summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2017-05-14 19:58:50 +0200
committerContext Git Mirror Bot <phg42.2a@gmail.com>2017-05-14 19:58:50 +0200
commitfd0c4577a4b6e85ca2db664906e1a03807ce133f (patch)
treefa23fcc04248d03ff82e34634b8ef1bb9cf28acb
parentdb581096187dc2d3cbdbe4cdc39d247c168b1607 (diff)
downloadcontext-fd0c4577a4b6e85ca2db664906e1a03807ce133f.tar.gz
2017-05-14 19:15:00
-rw-r--r--context/data/npp/context/notepad++.ini57
-rw-r--r--context/data/scite/context/lexers/data/scite-context-data-context.lua4
-rw-r--r--context/data/scite/context/lexers/data/scite-context-data-interfaces.lua16
-rw-r--r--context/data/scite/context/lexers/data/scite-context-data-metafun.lua4
-rw-r--r--context/data/scite/context/lexers/data/scite-context-data-metapost.lua6
-rw-r--r--context/data/scite/context/lexers/data/scite-context-data-tex.lua4
-rw-r--r--context/data/scite/context/lexers/scite-context-lexer-bibtex.lua24
-rw-r--r--context/data/scite/context/lexers/scite-context-lexer-cld.lua10
-rw-r--r--context/data/scite/context/lexers/scite-context-lexer-cpp-web.lua10
-rw-r--r--context/data/scite/context/lexers/scite-context-lexer-cpp.lua2
-rw-r--r--context/data/scite/context/lexers/scite-context-lexer-dummy.lua2
-rw-r--r--context/data/scite/context/lexers/scite-context-lexer-lua-longstring.lua2
-rw-r--r--context/data/scite/context/lexers/scite-context-lexer-lua.lua21
-rw-r--r--context/data/scite/context/lexers/scite-context-lexer-mps.lua6
-rw-r--r--context/data/scite/context/lexers/scite-context-lexer-pdf-object.lua2
-rw-r--r--context/data/scite/context/lexers/scite-context-lexer-pdf-xref.lua2
-rw-r--r--context/data/scite/context/lexers/scite-context-lexer-pdf.lua4
-rw-r--r--context/data/scite/context/lexers/scite-context-lexer-sql.lua2
-rw-r--r--context/data/scite/context/lexers/scite-context-lexer-tex-web.lua10
-rw-r--r--context/data/scite/context/lexers/scite-context-lexer-tex.lua11
-rw-r--r--context/data/scite/context/lexers/scite-context-lexer-txt.lua2
-rw-r--r--context/data/scite/context/lexers/scite-context-lexer-web-snippets.lua2
-rw-r--r--context/data/scite/context/lexers/scite-context-lexer-web.lua2
-rw-r--r--context/data/scite/context/lexers/scite-context-lexer-xml-cdata.lua2
-rw-r--r--context/data/scite/context/lexers/scite-context-lexer-xml-comment.lua2
-rw-r--r--context/data/scite/context/lexers/scite-context-lexer-xml-script.lua2
-rw-r--r--context/data/scite/context/lexers/scite-context-lexer-xml.lua2
-rw-r--r--context/data/scite/context/lexers/scite-context-lexer.lua501
-rw-r--r--context/data/scite/context/lexers/themes/scite-context-theme.lua239
-rw-r--r--context/data/scite/context/scite-context-data-context.properties353
-rw-r--r--context/data/scite/context/scite-context-data-interfaces.properties11246
-rw-r--r--context/data/scite/context/scite-context-data-metafun.properties109
-rw-r--r--context/data/scite/context/scite-context-data-metapost.properties154
-rw-r--r--context/data/scite/context/scite-context-data-tex.properties282
-rw-r--r--context/data/scite/context/scite-context-external.properties6
-rw-r--r--context/data/scite/context/scite-context.properties31
-rw-r--r--context/data/scite/context/scite-ctx.lua100
-rw-r--r--context/data/scite/context/scite-ctx.properties25
-rw-r--r--context/data/textadept/context/data/scite-context-data-context.lua4
-rw-r--r--context/data/textadept/context/data/scite-context-data-interfaces.lua10
-rw-r--r--context/data/textadept/context/data/scite-context-data-metafun.lua4
-rw-r--r--context/data/textadept/context/data/scite-context-data-metapost.lua9
-rw-r--r--context/data/textadept/context/data/scite-context-data-tex.lua9
-rw-r--r--context/data/textadept/context/init.lua69
-rw-r--r--context/data/textadept/context/lexers/lexer.rme1
-rw-r--r--context/data/textadept/context/lexers/scite-context-lexer-bibtex.lua196
-rw-r--r--context/data/textadept/context/lexers/scite-context-lexer-cld.lua24
-rw-r--r--context/data/textadept/context/lexers/scite-context-lexer-cpp-web.lua24
-rw-r--r--context/data/textadept/context/lexers/scite-context-lexer-cpp.lua189
-rw-r--r--context/data/textadept/context/lexers/scite-context-lexer-dummy.lua36
-rw-r--r--context/data/textadept/context/lexers/scite-context-lexer-lua-longstring.lua32
-rw-r--r--context/data/textadept/context/lexers/scite-context-lexer-lua.lua389
-rw-r--r--context/data/textadept/context/lexers/scite-context-lexer-mps.lua183
-rw-r--r--context/data/textadept/context/lexers/scite-context-lexer-pdf-object.lua137
-rw-r--r--context/data/textadept/context/lexers/scite-context-lexer-pdf-xref.lua44
-rw-r--r--context/data/textadept/context/lexers/scite-context-lexer-pdf.lua205
-rw-r--r--context/data/textadept/context/lexers/scite-context-lexer-sql.lua239
-rw-r--r--context/data/textadept/context/lexers/scite-context-lexer-tex-web.lua24
-rw-r--r--context/data/textadept/context/lexers/scite-context-lexer-tex.lua567
-rw-r--r--context/data/textadept/context/lexers/scite-context-lexer-txt.lua81
-rw-r--r--context/data/textadept/context/lexers/scite-context-lexer-web-snippets.lua134
-rw-r--r--context/data/textadept/context/lexers/scite-context-lexer-web.lua68
-rw-r--r--context/data/textadept/context/lexers/scite-context-lexer-xml-cdata.lua34
-rw-r--r--context/data/textadept/context/lexers/scite-context-lexer-xml-comment.lua34
-rw-r--r--context/data/textadept/context/lexers/scite-context-lexer-xml-script.lua34
-rw-r--r--context/data/textadept/context/lexers/scite-context-lexer-xml.lua351
-rw-r--r--context/data/textadept/context/lexers/scite-context-lexer.lua2299
-rw-r--r--context/data/textadept/context/modules/textadept-context-files.lua774
-rw-r--r--context/data/textadept/context/modules/textadept-context-runner.lua275
-rw-r--r--context/data/textadept/context/modules/textadept-context-settings.lua131
-rw-r--r--context/data/textadept/context/modules/textadept-context-types.lua176
-rw-r--r--context/data/textadept/context/textadept-context.cmd2
-rw-r--r--context/data/textadept/context/textadept-context.sh12
-rw-r--r--context/data/textadept/context/themes/scite-context-theme.lua159
-rw-r--r--doc/context/documents/general/fonts/fonts-mkiv.pdfbin0 -> 1216898 bytes
-rw-r--r--doc/context/documents/general/magazines/mag-0000-mkiv.pdfbin0 -> 33071 bytes
-rw-r--r--doc/context/documents/general/magazines/mag-0002-mkiv.pdfbin0 -> 71022 bytes
-rw-r--r--doc/context/documents/general/magazines/mag-0006-mkiv.pdfbin0 -> 108799 bytes
-rw-r--r--doc/context/documents/general/magazines/mag-0007-mkiv.pdfbin0 -> 221333 bytes
-rw-r--r--doc/context/documents/general/magazines/mag-0010-mkiv.pdfbin0 -> 117980 bytes
-rw-r--r--doc/context/documents/general/magazines/mag-1101-mkiv.pdfbin0 -> 52022 bytes
-rw-r--r--doc/context/documents/general/magazines/mag-1102-mkiv.pdfbin0 -> 81087 bytes
-rw-r--r--doc/context/documents/general/magazines/mag-1103-mkiv.pdfbin0 -> 71423 bytes
-rw-r--r--doc/context/documents/general/manuals/about.pdfbin0 -> 803763 bytes
-rw-r--r--doc/context/documents/general/manuals/charts-mkiv.pdfbin0 -> 144092 bytes
-rw-r--r--doc/context/documents/general/manuals/colors-mkiv.pdfbin0 -> 2129948 bytes
-rw-r--r--doc/context/documents/general/manuals/columnsets.pdfbin0 -> 4512620 bytes
-rw-r--r--doc/context/documents/general/manuals/details.pdfbin0 -> 2841669 bytes
-rw-r--r--doc/context/documents/general/manuals/hybrid.pdfbin0 -> 3339048 bytes
-rw-r--r--doc/context/documents/general/manuals/languages-mkiv.pdfbin669405 -> 678284 bytes
-rw-r--r--doc/context/documents/general/manuals/luatex.pdfbin995319 -> 1099068 bytes
-rw-r--r--doc/context/documents/general/manuals/math-mkiv.pdfbin0 -> 2934019 bytes
-rw-r--r--doc/context/documents/general/manuals/mk.pdfbin0 -> 9044010 bytes
-rw-r--r--doc/context/documents/general/manuals/mmlexamp.pdfbin0 -> 136092 bytes
-rw-r--r--doc/context/documents/general/manuals/mmlprime.pdfbin0 -> 772848 bytes
-rw-r--r--doc/context/documents/general/manuals/mreadme.pdfbin41455 -> 41444 bytes
-rw-r--r--doc/context/documents/general/manuals/rules-mkiv.pdfbin0 -> 155730 bytes
-rw-r--r--doc/context/documents/general/manuals/spacing-mkiv.pdfbin38452 -> 39828 bytes
-rw-r--r--doc/context/documents/general/manuals/spreadsheets-mkiv.pdfbin0 -> 110662 bytes
-rw-r--r--doc/context/documents/general/manuals/sql-mkiv.pdfbin90609 -> 94131 bytes
-rw-r--r--doc/context/documents/general/manuals/steps-mkiv.pdfbin0 -> 307883 bytes
-rw-r--r--doc/context/documents/general/manuals/still.pdfbin0 -> 1773534 bytes
-rw-r--r--doc/context/documents/general/manuals/swiglib-mkiv.pdfbin167938 -> 163664 bytes
-rw-r--r--doc/context/documents/general/manuals/workflows-mkiv.pdfbin94468 -> 96859 bytes
-rw-r--r--doc/context/documents/general/manuals/xml-mkiv.pdfbin1308267 -> 1351042 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-cs.pdfbin0 -> 808528 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-de.pdfbin0 -> 809657 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-en.pdfbin0 -> 812376 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-fr.pdfbin0 -> 806147 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-it.pdfbin0 -> 810008 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-nl.pdfbin0 -> 806419 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-ro.pdfbin0 -> 805215 bytes
-rw-r--r--doc/context/presentations/bachotex/2010/bachotex-2010-clash.pdfbin0 -> 33412 bytes
-rw-r--r--doc/context/presentations/bachotex/2010/bachotex-2010-clash.tex231
-rw-r--r--doc/context/presentations/bachotex/2010/bachotex-2010-move.pdfbin0 -> 21690 bytes
-rw-r--r--doc/context/presentations/bachotex/2010/bachotex-2010-move.tex114
-rw-r--r--doc/context/presentations/bachotex/2011/bachotex-2011-cld-and-mkvi.pdfbin0 -> 59142 bytes
-rw-r--r--doc/context/presentations/bachotex/2011/bachotex-2011-cld-and-mkvi.tex154
-rw-r--r--doc/context/presentations/bachotex/2013/bachotex-2013-bits.pdfbin0 -> 43359 bytes
-rw-r--r--doc/context/presentations/bachotex/2013/bachotex-2013-bits.tex223
-rw-r--r--doc/context/presentations/bachotex/2013/bachotex-2013-luatex.pdfbin0 -> 50957 bytes
-rw-r--r--doc/context/presentations/bachotex/2013/bachotex-2013-luatex.tex205
-rw-r--r--doc/context/presentations/bachotex/2013/bachotex-2013-sense.pdfbin0 -> 81302 bytes
-rw-r--r--doc/context/presentations/bachotex/2013/bachotex-2013-sense.tex319
-rw-r--r--doc/context/presentations/bachotex/2013/bachotex-2013-speed.pdfbin0 -> 33198 bytes
-rw-r--r--doc/context/presentations/bachotex/2013/bachotex-2013-speed.tex115
-rw-r--r--doc/context/presentations/bachotex/2015/bachotex-2015-ligatures.pdfbin0 -> 95633 bytes
-rw-r--r--doc/context/presentations/bachotex/2015/bachotex-2015-ligatures.tex138
-rw-r--r--doc/context/presentations/bachotex/2016/bachotex-2016-opentype.pdfbin0 -> 40433 bytes
-rw-r--r--doc/context/presentations/bachotex/2016/bachotex-2016-opentype.tex631
-rw-r--r--doc/context/presentations/bachotex/2016/bachotex-2016-toolbox.pdfbin0 -> 52712 bytes
-rw-r--r--doc/context/presentations/bachotex/2016/bachotex-2016-toolbox.tex212
-rw-r--r--doc/context/presentations/context/2011/context-2011-ebook-export.pdfbin0 -> 28897 bytes
-rw-r--r--doc/context/presentations/context/2011/context-2011-ebook-export.tex94
-rw-r--r--doc/context/presentations/context/2011/context-2011-mathml-update.pdfbin0 -> 23283 bytes
-rw-r--r--doc/context/presentations/context/2011/context-2011-mathml-update.tex67
-rw-r--r--doc/context/presentations/context/2011/context-2011-metapost-how-we-adapt.pdfbin0 -> 27010 bytes
-rw-r--r--doc/context/presentations/context/2011/context-2011-metapost-how-we-adapt.tex104
-rw-r--r--doc/context/presentations/context/2011/context-2011-sorting-registers.pdfbin0 -> 36234 bytes
-rw-r--r--doc/context/presentations/context/2011/context-2011-sorting-registers.tex161
-rw-r--r--doc/context/presentations/context/2012/context-2012-after-the-cleanup.pdfbin0 -> 44728 bytes
-rw-r--r--doc/context/presentations/context/2012/context-2012-after-the-cleanup.tex162
-rw-r--r--doc/context/presentations/context/2012/context-2012-lexing-sources.pdfbin0 -> 41024 bytes
-rw-r--r--doc/context/presentations/context/2012/context-2012-lexing-sources.tex81
-rw-r--r--doc/context/presentations/context/2012/context-2012-mixed-columns.pdfbin0 -> 37833 bytes
-rw-r--r--doc/context/presentations/context/2012/context-2012-mixed-columns.tex79
-rw-r--r--doc/context/presentations/context/2012/context-2012-the-script.pdfbin0 -> 63646 bytes
-rw-r--r--doc/context/presentations/context/2012/context-2012-the-script.tex453
-rw-r--r--doc/context/presentations/context/2012/context-2012-visual-debugging.pdfbin0 -> 72039 bytes
-rw-r--r--doc/context/presentations/context/2012/context-2012-visual-debugging.tex296
-rw-r--r--doc/context/presentations/context/2012/context-2012-xml-news.pdfbin0 -> 49133 bytes
-rw-r--r--doc/context/presentations/context/2012/context-2012-xml-news.tex131
-rw-r--r--doc/context/presentations/context/2013/context-2013-math.pdfbin0 -> 51849 bytes
-rw-r--r--doc/context/presentations/context/2013/context-2013-math.tex244
-rw-r--r--doc/context/presentations/context/2013/context-2013-speed.pdfbin0 -> 33773 bytes
-rw-r--r--doc/context/presentations/context/2013/context-2013-speed.tex108
-rw-r--r--doc/context/presentations/context/2015/context-2015-status.pdfbin0 -> 90938 bytes
-rw-r--r--doc/context/presentations/context/2015/context-2015-status.tex87
-rw-r--r--doc/context/presentations/context/2016/context-2016-luatex.pdfbin0 -> 90097 bytes
-rw-r--r--doc/context/presentations/context/2016/context-2016-luatex.tex242
-rw-r--r--doc/context/presentations/examples/present-balls-001.pdfbin0 -> 31968 bytes
-rw-r--r--doc/context/presentations/examples/present-balls-001.tex19
-rw-r--r--doc/context/presentations/examples/present-colorful-001.pdfbin0 -> 84698 bytes
-rw-r--r--doc/context/presentations/examples/present-colorful-001.tex25
-rw-r--r--doc/context/presentations/examples/present-funny-001.pdfbin0 -> 29024 bytes
-rw-r--r--doc/context/presentations/examples/present-funny-001.tex20
-rw-r--r--doc/context/presentations/examples/present-fuzzy-001.pdfbin0 -> 67584 bytes
-rw-r--r--doc/context/presentations/examples/present-fuzzy-001.tex19
-rw-r--r--doc/context/presentations/examples/present-green-001.pdfbin0 -> 23210 bytes
-rw-r--r--doc/context/presentations/examples/present-green-001.tex19
-rw-r--r--doc/context/presentations/examples/present-grow-001.pdfbin0 -> 50136 bytes
-rw-r--r--doc/context/presentations/examples/present-grow-001.tex138
-rw-r--r--doc/context/presentations/examples/present-organic-001.pdfbin0 -> 29745 bytes
-rw-r--r--doc/context/presentations/examples/present-organic-001.tex17
-rw-r--r--doc/context/presentations/examples/present-original-001.pdfbin0 -> 29520 bytes
-rw-r--r--doc/context/presentations/examples/present-original-001.tex19
-rw-r--r--doc/context/presentations/examples/present-punk-001.pdfbin0 -> 41701 bytes
-rw-r--r--doc/context/presentations/examples/present-punk-001.tex22
-rw-r--r--doc/context/presentations/examples/present-random-001.pdfbin0 -> 15621 bytes
-rw-r--r--doc/context/presentations/examples/present-random-001.tex38
-rw-r--r--doc/context/presentations/examples/present-shaded-001.pdfbin0 -> 34486 bytes
-rw-r--r--doc/context/presentations/examples/present-shaded-001.tex11
-rw-r--r--doc/context/presentations/examples/present-split-001.pdfbin0 -> 23404 bytes
-rw-r--r--doc/context/presentations/examples/present-split-001.tex15
-rw-r--r--doc/context/presentations/examples/present-stepper-001.pdfbin0 -> 18566 bytes
-rw-r--r--doc/context/presentations/examples/present-stepper-001.tex51
-rw-r--r--doc/context/presentations/examples/present-tiles-001.pdfbin0 -> 42542 bytes
-rw-r--r--doc/context/presentations/examples/present-tiles-001.tex20
-rw-r--r--doc/context/presentations/examples/present-windows-001.pdfbin0 -> 48495 bytes
-rw-r--r--doc/context/presentations/examples/present-windows-001.tex41
-rw-r--r--doc/context/presentations/present-readme.pdfbin0 -> 33697 bytes
-rw-r--r--doc/context/presentations/present-readme.tex33
-rw-r--r--doc/context/scripts/mkii/ctxtools.html2
-rw-r--r--doc/context/scripts/mkii/ctxtools.man2
-rw-r--r--doc/context/scripts/mkii/imgtopdf.html2
-rw-r--r--doc/context/scripts/mkii/imgtopdf.man2
-rw-r--r--doc/context/scripts/mkii/mptopdf.html2
-rw-r--r--doc/context/scripts/mkii/mptopdf.man2
-rw-r--r--doc/context/scripts/mkii/pdftools.html2
-rw-r--r--doc/context/scripts/mkii/pdftools.man2
-rw-r--r--doc/context/scripts/mkii/pstopdf.html2
-rw-r--r--doc/context/scripts/mkii/pstopdf.man2
-rw-r--r--doc/context/scripts/mkii/rlxtools.html2
-rw-r--r--doc/context/scripts/mkii/rlxtools.man2
-rw-r--r--doc/context/scripts/mkii/texexec.html2
-rw-r--r--doc/context/scripts/mkii/texexec.man2
-rw-r--r--doc/context/scripts/mkii/texmfstart.html3
-rw-r--r--doc/context/scripts/mkii/texmfstart.man5
-rw-r--r--doc/context/scripts/mkii/texmfstart.xml3
-rw-r--r--doc/context/scripts/mkii/textools.html2
-rw-r--r--doc/context/scripts/mkii/textools.man2
-rw-r--r--doc/context/scripts/mkii/texutil.html2
-rw-r--r--doc/context/scripts/mkii/texutil.man2
-rw-r--r--doc/context/scripts/mkii/tmftools.html2
-rw-r--r--doc/context/scripts/mkii/tmftools.man2
-rw-r--r--doc/context/scripts/mkii/xmltools.html2
-rw-r--r--doc/context/scripts/mkii/xmltools.man2
-rw-r--r--doc/context/scripts/mkiv/context.html9
-rw-r--r--doc/context/scripts/mkiv/context.man7
-rw-r--r--doc/context/scripts/mkiv/context.xml7
-rw-r--r--doc/context/scripts/mkiv/luatools.html2
-rw-r--r--doc/context/scripts/mkiv/luatools.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-babel.html2
-rw-r--r--doc/context/scripts/mkiv/mtx-babel.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-base.html2
-rw-r--r--doc/context/scripts/mkiv/mtx-base.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-bibtex.html2
-rw-r--r--doc/context/scripts/mkiv/mtx-bibtex.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-cache.html4
-rw-r--r--doc/context/scripts/mkiv/mtx-cache.man6
-rw-r--r--doc/context/scripts/mkiv/mtx-cache.xml4
-rw-r--r--doc/context/scripts/mkiv/mtx-chars.html2
-rw-r--r--doc/context/scripts/mkiv/mtx-chars.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-check.html2
-rw-r--r--doc/context/scripts/mkiv/mtx-check.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-colors.html2
-rw-r--r--doc/context/scripts/mkiv/mtx-colors.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-context.html9
-rw-r--r--doc/context/scripts/mkiv/mtx-context.man7
-rw-r--r--doc/context/scripts/mkiv/mtx-context.xml7
-rw-r--r--doc/context/scripts/mkiv/mtx-dvi.html48
-rw-r--r--doc/context/scripts/mkiv/mtx-dvi.man27
-rw-r--r--doc/context/scripts/mkiv/mtx-dvi.xml15
-rw-r--r--doc/context/scripts/mkiv/mtx-epub.html2
-rw-r--r--doc/context/scripts/mkiv/mtx-epub.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-fcd.html2
-rw-r--r--doc/context/scripts/mkiv/mtx-fcd.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-flac.html2
-rw-r--r--doc/context/scripts/mkiv/mtx-flac.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-fonts.html2
-rw-r--r--doc/context/scripts/mkiv/mtx-fonts.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-grep.html14
-rw-r--r--doc/context/scripts/mkiv/mtx-grep.man11
-rw-r--r--doc/context/scripts/mkiv/mtx-grep.xml16
-rw-r--r--doc/context/scripts/mkiv/mtx-interface.html2
-rw-r--r--doc/context/scripts/mkiv/mtx-interface.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-metapost.html2
-rw-r--r--doc/context/scripts/mkiv/mtx-metapost.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-metatex.html2
-rw-r--r--doc/context/scripts/mkiv/mtx-metatex.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-modules.html2
-rw-r--r--doc/context/scripts/mkiv/mtx-modules.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-package.html2
-rw-r--r--doc/context/scripts/mkiv/mtx-package.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-patterns.html2
-rw-r--r--doc/context/scripts/mkiv/mtx-patterns.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-pdf.html2
-rw-r--r--doc/context/scripts/mkiv/mtx-pdf.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-plain.html2
-rw-r--r--doc/context/scripts/mkiv/mtx-plain.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-profile.html2
-rw-r--r--doc/context/scripts/mkiv/mtx-profile.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-rsync.html2
-rw-r--r--doc/context/scripts/mkiv/mtx-rsync.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-scite.html2
-rw-r--r--doc/context/scripts/mkiv/mtx-scite.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-server.html2
-rw-r--r--doc/context/scripts/mkiv/mtx-server.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-texworks.html2
-rw-r--r--doc/context/scripts/mkiv/mtx-texworks.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-timing.html2
-rw-r--r--doc/context/scripts/mkiv/mtx-timing.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-tools.html2
-rw-r--r--doc/context/scripts/mkiv/mtx-tools.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-unicode.html2
-rw-r--r--doc/context/scripts/mkiv/mtx-unicode.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-unzip.html2
-rw-r--r--doc/context/scripts/mkiv/mtx-unzip.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-update.html2
-rw-r--r--doc/context/scripts/mkiv/mtx-update.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-watch.html2
-rw-r--r--doc/context/scripts/mkiv/mtx-watch.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-youless.html2
-rw-r--r--doc/context/scripts/mkiv/mtx-youless.man2
-rw-r--r--doc/context/scripts/mkiv/mtxrun.html7
-rw-r--r--doc/context/scripts/mkiv/mtxrun.man5
-rw-r--r--doc/context/scripts/mkiv/mtxrun.xml3
-rw-r--r--doc/context/sources/general/fonts/fonts/fonts-appendix.tex484
-rw-r--r--doc/context/sources/general/fonts/fonts/fonts-environment.tex34
-rw-r--r--doc/context/sources/general/fonts/fonts/fonts-extensions.tex2411
-rw-r--r--doc/context/sources/general/fonts/fonts/fonts-features.tex2631
-rw-r--r--doc/context/sources/general/fonts/fonts/fonts-formats.tex873
-rw-r--r--doc/context/sources/general/fonts/fonts/fonts-hooks.tex585
-rw-r--r--doc/context/sources/general/fonts/fonts/fonts-introduction.tex95
-rw-r--r--doc/context/sources/general/fonts/fonts/fonts-lookups.tex410
-rw-r--r--doc/context/sources/general/fonts/fonts/fonts-math.tex1093
-rw-r--r--doc/context/sources/general/fonts/fonts/fonts-methods.tex376
-rw-r--r--doc/context/sources/general/fonts/fonts/fonts-mkiv.tex75
-rw-r--r--doc/context/sources/general/fonts/fonts/fonts-modes.tex817
-rw-r--r--doc/context/sources/general/fonts/fonts/fonts-scripts.tex18
-rw-r--r--doc/context/sources/general/fonts/manuals-explaining-contents.tex11
-rw-r--r--doc/context/sources/general/fonts/manuals-explaining-cover.tex199
-rw-r--r--doc/context/sources/general/fonts/manuals-explaining-environment.tex325
-rw-r--r--doc/context/sources/general/magazines/mag-0000-mkiv.tex50
-rw-r--r--doc/context/sources/general/magazines/mag-0002-mkiv.tex106
-rw-r--r--doc/context/sources/general/magazines/mag-0006-mkiv.tex310
-rw-r--r--doc/context/sources/general/magazines/mag-0007-mkiv.tex206
-rw-r--r--doc/context/sources/general/magazines/mag-0010-mkiv.tex531
-rw-r--r--doc/context/sources/general/magazines/mag-1101-mkiv.tex254
-rw-r--r--doc/context/sources/general/magazines/mag-1102-mkiv.tex433
-rw-r--r--doc/context/sources/general/magazines/mag-1103-mkiv.tex320
-rw-r--r--doc/context/sources/general/manuals/about/about-calls.tex739
-rw-r--r--doc/context/sources/general/manuals/about/about-contents.tex17
-rw-r--r--doc/context/sources/general/manuals/about/about-environment.tex71
-rw-r--r--doc/context/sources/general/manuals/about/about-expanding.tex188
-rw-r--r--doc/context/sources/general/manuals/about/about-hashing.tex616
-rw-r--r--doc/context/sources/general/manuals/about/about-hz.tex96
-rw-r--r--doc/context/sources/general/manuals/about/about-introduction.tex38
-rw-r--r--doc/context/sources/general/manuals/about/about-jitting-jit-2013-06-04.lua148
-rw-r--r--doc/context/sources/general/manuals/about/about-jitting-jit.lua163
-rw-r--r--doc/context/sources/general/manuals/about/about-jitting.tex439
-rw-r--r--doc/context/sources/general/manuals/about/about-luafunctions.tex292
-rw-r--r--doc/context/sources/general/manuals/about/about-mathstackers.tex765
-rw-r--r--doc/context/sources/general/manuals/about/about-mathstyles.tex457
-rw-r--r--doc/context/sources/general/manuals/about/about-metafun.tex834
-rw-r--r--doc/context/sources/general/manuals/about/about-mobility.tex205
-rw-r--r--doc/context/sources/general/manuals/about/about-nodes.tex603
-rw-r--r--doc/context/sources/general/manuals/about/about-nuts.tex619
-rw-r--r--doc/context/sources/general/manuals/about/about-properties.tex209
-rw-r--r--doc/context/sources/general/manuals/about/about-speed.tex732
-rw-r--r--doc/context/sources/general/manuals/about/about-threequarters.tex330
-rw-r--r--doc/context/sources/general/manuals/about/about-titlepage.tex31
-rw-r--r--doc/context/sources/general/manuals/about/about.tex47
-rw-r--r--doc/context/sources/general/manuals/about/demo-data.lua10
-rw-r--r--doc/context/sources/general/manuals/about/luatest-hash-luajittex-073-JIT20.lua406
-rw-r--r--doc/context/sources/general/manuals/about/luatest-hash-luajittex-073-LUA51-40-6.lua406
-rw-r--r--doc/context/sources/general/manuals/about/luatest-hash-luajittex-073-LUA51.lua406
-rw-r--r--doc/context/sources/general/manuals/about/luatest-hash-luatex-073-LUA52-40-6.lua406
-rw-r--r--doc/context/sources/general/manuals/about/luatest-hash-luatex-073-LUA52.lua406
-rw-r--r--doc/context/sources/general/manuals/about/pi-speed-1.tex3
-rw-r--r--doc/context/sources/general/manuals/about/pi-speed-2.tex3
-rw-r--r--doc/context/sources/general/manuals/about/pi-speed-3.tex10
-rw-r--r--doc/context/sources/general/manuals/about/pi-speed-4.tex10
-rw-r--r--doc/context/sources/general/manuals/about/pi-speed-5.tex16
-rw-r--r--doc/context/sources/general/manuals/about/still-expanding-1.pngbin0 -> 15785 bytes
-rw-r--r--doc/context/sources/general/manuals/about/still-expanding-10.pngbin0 -> 21898 bytes
-rw-r--r--doc/context/sources/general/manuals/about/still-expanding-2.pngbin0 -> 20975 bytes
-rw-r--r--doc/context/sources/general/manuals/about/still-expanding-3.pngbin0 -> 7745 bytes
-rw-r--r--doc/context/sources/general/manuals/about/still-expanding-4.pngbin0 -> 11516 bytes
-rw-r--r--doc/context/sources/general/manuals/about/still-expanding-5.pngbin0 -> 14316 bytes
-rw-r--r--doc/context/sources/general/manuals/about/still-expanding-6.pngbin0 -> 12295 bytes
-rw-r--r--doc/context/sources/general/manuals/about/still-expanding-7.pngbin0 -> 8126 bytes
-rw-r--r--doc/context/sources/general/manuals/about/still-expanding-8.pngbin0 -> 14815 bytes
-rw-r--r--doc/context/sources/general/manuals/about/still-expanding-9.pngbin0 -> 16643 bytes
-rw-r--r--doc/context/sources/general/manuals/charts/charts-mkiv.tex1339
-rw-r--r--doc/context/sources/general/manuals/colors/colors-basics.tex1204
-rw-r--r--doc/context/sources/general/manuals/colors/colors-environment.tex7
-rw-r--r--doc/context/sources/general/manuals/colors/colors-graphics.tex234
-rw-r--r--doc/context/sources/general/manuals/colors/colors-introduction.tex49
-rw-r--r--doc/context/sources/general/manuals/colors/colors-metafun.tex695
-rw-r--r--doc/context/sources/general/manuals/colors/colors-mkiv.tex56
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-000.tex63
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-001.tex17
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-002.tex17
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-003.tex35
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-004.tex32
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-005.tex29
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-006.tex35
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-007.tex43
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-101.tex30
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-102.tex36
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-103.tex37
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-201.tex31
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-202.tex32
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-203.tex29
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-204.tex41
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-205.tex42
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-206.tex29
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-301.tex29
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-401.tex26
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-402.tex24
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-403.tex23
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-404.tex34
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-405.tex29
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-601.tex29
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-701.tex23
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-702.tex27
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-703.tex34
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-704.tex69
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-801.tex19
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-802.tex22
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-803.tex26
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-804.tex26
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-805.tex26
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-806.tex26
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-901.tex38
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-902.tex38
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets-903.tex41
-rw-r--r--doc/context/sources/general/manuals/columnsets/columnsets.tex886
-rw-r--r--doc/context/sources/general/manuals/epub/epub-mkiv.tex17
-rw-r--r--doc/context/sources/general/manuals/hybrid/benchmark-1.tex39
-rw-r--r--doc/context/sources/general/manuals/hybrid/benchmark-2.tex30
-rw-r--r--doc/context/sources/general/manuals/hybrid/benchmark-3.tex28
-rw-r--r--doc/context/sources/general/manuals/hybrid/benchmark-4.tex60
-rw-r--r--doc/context/sources/general/manuals/hybrid/benchmark-5.tex29
-rw-r--r--doc/context/sources/general/manuals/hybrid/calibri-fontshop.pngbin0 -> 49415 bytes
-rw-r--r--doc/context/sources/general/manuals/hybrid/ebook-metafun-1.pngbin0 -> 58058 bytes
-rw-r--r--doc/context/sources/general/manuals/hybrid/ebook-metafun-2.pngbin0 -> 169846 bytes
-rw-r--r--doc/context/sources/general/manuals/hybrid/ebook-pdf.pngbin0 -> 191688 bytes
-rw-r--r--doc/context/sources/general/manuals/hybrid/ebook-xhtml.pngbin0 -> 105358 bytes
-rw-r--r--doc/context/sources/general/manuals/hybrid/hybrid-backend.tex389
-rw-r--r--doc/context/sources/general/manuals/hybrid/hybrid-bidi.tex194
-rw-r--r--doc/context/sources/general/manuals/hybrid/hybrid-callbacks.tex229
-rw-r--r--doc/context/sources/general/manuals/hybrid/hybrid-characters.tex630
-rw-r--r--doc/context/sources/general/manuals/hybrid/hybrid-codebase.tex1290
-rw-r--r--doc/context/sources/general/manuals/hybrid/hybrid-contents.tex17
-rw-r--r--doc/context/sources/general/manuals/hybrid/hybrid-ebooks.tex593
-rw-r--r--doc/context/sources/general/manuals/hybrid/hybrid-environment.tex127
-rw-r--r--doc/context/sources/general/manuals/hybrid/hybrid-export.tex293
-rw-r--r--doc/context/sources/general/manuals/hybrid/hybrid-fontnames.tex444
-rw-r--r--doc/context/sources/general/manuals/hybrid/hybrid-glocal.tex269
-rw-r--r--doc/context/sources/general/manuals/hybrid/hybrid-goodies.tex648
-rw-r--r--doc/context/sources/general/manuals/hybrid/hybrid-grouping.tex545
-rw-r--r--doc/context/sources/general/manuals/hybrid/hybrid-inserts.tex506
-rw-r--r--doc/context/sources/general/manuals/hybrid/hybrid-intermezzo.tex21
-rw-r--r--doc/context/sources/general/manuals/hybrid/hybrid-introduction.tex152
-rw-r--r--doc/context/sources/general/manuals/hybrid/hybrid-italics.tex378
-rw-r--r--doc/context/sources/general/manuals/hybrid/hybrid-jit.tex653
-rw-r--r--doc/context/sources/general/manuals/hybrid/hybrid-languages.tex496
-rw-r--r--doc/context/sources/general/manuals/hybrid/hybrid-math.tex347
-rw-r--r--doc/context/sources/general/manuals/hybrid/hybrid-mathml.tex915
-rw-r--r--doc/context/sources/general/manuals/hybrid/hybrid-merge.tex225
-rw-r--r--doc/context/sources/general/manuals/hybrid/hybrid-mkvi.tex275
-rw-r--r--doc/context/sources/general/manuals/hybrid/hybrid-optimize.tex501
-rw-r--r--doc/context/sources/general/manuals/hybrid/hybrid-parbuilder.tex340
-rw-r--r--doc/context/sources/general/manuals/hybrid/hybrid-partests.tex313
-rw-r--r--doc/context/sources/general/manuals/hybrid/hybrid-tags.tex361
-rw-r--r--doc/context/sources/general/manuals/hybrid/hybrid-titlepage.tex63
-rw-r--r--doc/context/sources/general/manuals/hybrid/hybrid-weird.tex129
-rw-r--r--doc/context/sources/general/manuals/hybrid/hybrid.tex63
-rw-r--r--doc/context/sources/general/manuals/hybrid/luatex-co-acceptablelowres.jpgbin0 -> 1123825 bytes
-rw-r--r--doc/context/sources/general/manuals/hybrid/mtx-server-ctx-fonttest.pngbin0 -> 109850 bytes
-rw-r--r--doc/context/sources/general/manuals/hybrid/tagged-001.pngbin0 -> 28600 bytes
-rw-r--r--doc/context/sources/general/manuals/hybrid/tagged-002.pngbin0 -> 309006 bytes
-rw-r--r--doc/context/sources/general/manuals/hybrid/tagged-003.pngbin0 -> 142104 bytes
-rw-r--r--doc/context/sources/general/manuals/hybrid/tagged-004.pngbin0 -> 141349 bytes
-rw-r--r--doc/context/sources/general/manuals/hybrid/tagged-005.pngbin0 -> 39300 bytes
-rw-r--r--doc/context/sources/general/manuals/hybrid/tagged-006.pngbin0 -> 27267 bytes
-rw-r--r--doc/context/sources/general/manuals/hybrid/tagged-007.pngbin0 -> 28751 bytes
-rw-r--r--doc/context/sources/general/manuals/hybrid/tagged-008.pngbin0 -> 60773 bytes
-rw-r--r--doc/context/sources/general/manuals/hybrid/tagged-009.pngbin0 -> 21536 bytes
-rw-r--r--doc/context/sources/general/manuals/hybrid/tagged-010.pngbin0 -> 40805 bytes
-rw-r--r--doc/context/sources/general/manuals/hybrid/tagged-011.pngbin0 -> 78593 bytes
-rw-r--r--doc/context/sources/general/manuals/languages/languages-basics.tex20
-rw-r--r--doc/context/sources/general/manuals/languages/languages-environment.tex350
-rw-r--r--doc/context/sources/general/manuals/languages/languages-goodies.tex4
-rw-r--r--doc/context/sources/general/manuals/languages/languages-hyphenation.tex102
-rw-r--r--doc/context/sources/general/manuals/languages/languages-labels.tex4
-rw-r--r--doc/context/sources/general/manuals/languages/languages-mkiv.tex81
-rw-r--r--doc/context/sources/general/manuals/languages/languages-numbering.tex44
-rw-r--r--doc/context/sources/general/manuals/languages/languages-sorting.tex4
-rw-r--r--doc/context/sources/general/manuals/lua/lua-mkiv.tex4
-rw-r--r--doc/context/sources/general/manuals/luatex/luatex-enhancements.tex15
-rw-r--r--doc/context/sources/general/manuals/luatex/luatex-fonts.tex6
-rw-r--r--doc/context/sources/general/manuals/luatex/luatex-introduction.tex14
-rw-r--r--doc/context/sources/general/manuals/luatex/luatex-languages.tex202
-rw-r--r--doc/context/sources/general/manuals/luatex/luatex-math.tex270
-rw-r--r--doc/context/sources/general/manuals/luatex/luatex-modifications.tex363
-rw-r--r--doc/context/sources/general/manuals/luatex/luatex-nodes.tex657
-rw-r--r--doc/context/sources/general/manuals/luatex/luatex-style.tex6
-rw-r--r--doc/context/sources/general/manuals/luatex/luatex.tex24
-rw-r--r--doc/context/sources/general/manuals/manuals-explaining-contents.tex11
-rw-r--r--doc/context/sources/general/manuals/manuals-explaining-cover.tex199
-rw-r--r--doc/context/sources/general/manuals/manuals-explaining-environment.tex325
-rw-r--r--doc/context/sources/general/manuals/manuals-xml-environment.tex385
-rw-r--r--doc/context/sources/general/manuals/math/math-combining.tex58
-rw-r--r--doc/context/sources/general/manuals/math/math-contents.tex11
-rw-r--r--doc/context/sources/general/manuals/math/math-features.tex127
-rw-r--r--doc/context/sources/general/manuals/math/math-framing-001.tex113
-rw-r--r--doc/context/sources/general/manuals/math/math-framing.tex232
-rw-r--r--doc/context/sources/general/manuals/math/math-introduction.tex20
-rw-r--r--doc/context/sources/general/manuals/math/math-layout.tex59
-rw-r--r--doc/context/sources/general/manuals/math/math-mkiv.tex64
-rw-r--r--doc/context/sources/general/manuals/math/math-numbering.tex74
-rw-r--r--doc/context/sources/general/manuals/math/math-spacing-001.tex73
-rw-r--r--doc/context/sources/general/manuals/math/math-spacing.tex397
-rw-r--r--doc/context/sources/general/manuals/math/math-titlepage.tex29
-rw-r--r--doc/context/sources/general/manuals/mathml/envexamp.tex291
-rw-r--r--doc/context/sources/general/manuals/mathml/mmlexamp.tex124
-rw-r--r--doc/context/sources/general/manuals/mathml/mmlprime.tex6053
-rw-r--r--doc/context/sources/general/manuals/mathml/pc-d-001.xml9
-rw-r--r--doc/context/sources/general/manuals/mathml/pc-d-002.xml9
-rw-r--r--doc/context/sources/general/manuals/mathml/pc-d-003.xml18
-rw-r--r--doc/context/sources/general/manuals/mathml/pc-d-004.xml26
-rw-r--r--doc/context/sources/general/manuals/mathml/pc-d-005.xml27
-rw-r--r--doc/context/sources/general/manuals/mathml/pc-d-006.xml38
-rw-r--r--doc/context/sources/general/manuals/mathml/pc-d-007.xml58
-rw-r--r--doc/context/sources/general/manuals/mathml/pc-d-008.xml25
-rw-r--r--doc/context/sources/general/manuals/mathml/pc-d-009.xml25
-rw-r--r--doc/context/sources/general/manuals/mathml/pc-d-010.xml26
-rw-r--r--doc/context/sources/general/manuals/mathml/pc-d-011.xml32
-rw-r--r--doc/context/sources/general/manuals/mathml/pc-d-043.xml47
-rw-r--r--doc/context/sources/general/manuals/mathml/pc-d-051.xml17
-rw-r--r--doc/context/sources/general/manuals/mathml/pc-i-022.xml52
-rw-r--r--doc/context/sources/general/manuals/mathml/pc-i-380.xml73
-rw-r--r--doc/context/sources/general/manuals/mathml/pc-s-001.xml28
-rw-r--r--doc/context/sources/general/manuals/mathml/pc-s-002.xml36
-rw-r--r--doc/context/sources/general/manuals/mathml/pc-s-003.xml40
-rw-r--r--doc/context/sources/general/manuals/mathml/wh-g-001.xml28
-rw-r--r--doc/context/sources/general/manuals/mathml/wh-g-002.xml28
-rw-r--r--doc/context/sources/general/manuals/mathml/wh-g-003.xml28
-rw-r--r--doc/context/sources/general/manuals/mathml/wh-g-004.xml28
-rw-r--r--doc/context/sources/general/manuals/mathml/wh-g-005.xml31
-rw-r--r--doc/context/sources/general/manuals/mathml/wh-g-006.xml31
-rw-r--r--doc/context/sources/general/manuals/mathml/wh-g-007.xml33
-rw-r--r--doc/context/sources/general/manuals/mathml/wh-g-008.xml33
-rw-r--r--doc/context/sources/general/manuals/mathml/wh-g-009.xml33
-rw-r--r--doc/context/sources/general/manuals/mathml/wh-g-010.xml35
-rw-r--r--doc/context/sources/general/manuals/mathml/wh-g-011.xml27
-rw-r--r--doc/context/sources/general/manuals/mathml/wh-g-012.xml27
-rw-r--r--doc/context/sources/general/manuals/mathml/wh-g-013.xml27
-rw-r--r--doc/context/sources/general/manuals/mathml/wh-g-014.xml29
-rw-r--r--doc/context/sources/general/manuals/mathml/wh-g-015.xml32
-rw-r--r--doc/context/sources/general/manuals/mathml/wh-g-016.xml90
-rw-r--r--doc/context/sources/general/manuals/mathml/wh-l-001.xml35
-rw-r--r--doc/context/sources/general/manuals/mathml/wh-l-002.xml35
-rw-r--r--doc/context/sources/general/manuals/mathml/wh-l-003.xml32
-rw-r--r--doc/context/sources/general/manuals/mathml/wh-l-004.xml28
-rw-r--r--doc/context/sources/general/manuals/mathml/wh-s-001.xml49
-rw-r--r--doc/context/sources/general/manuals/mathml/wh-s-002.xml63
-rw-r--r--doc/context/sources/general/manuals/mcommon.tex2
-rw-r--r--doc/context/sources/general/manuals/mk/luatexref-t-luatex-progress-intermediate.lut3927
-rw-r--r--doc/context/sources/general/manuals/mk/luatexref-t-luatex-progress-runtime.lut3927
-rw-r--r--doc/context/sources/general/manuals/mk/mk-arabic.tex324
-rw-r--r--doc/context/sources/general/manuals/mk/mk-breakingapart.tex287
-rw-r--r--doc/context/sources/general/manuals/mk/mk-calcmath.tex130
-rw-r--r--doc/context/sources/general/manuals/mk/mk-cjk.tex320
-rw-r--r--doc/context/sources/general/manuals/mk/mk-code.tex219
-rw-r--r--doc/context/sources/general/manuals/mk/mk-colors.tex467
-rw-r--r--doc/context/sources/general/manuals/mk/mk-contents.tex11
-rw-r--r--doc/context/sources/general/manuals/mk/mk-debug.pngbin0 -> 64336 bytes
-rw-r--r--doc/context/sources/general/manuals/mk/mk-dirtytricks.tex144
-rw-r--r--doc/context/sources/general/manuals/mk/mk-environment.tex209
-rw-r--r--doc/context/sources/general/manuals/mk/mk-error.pngbin0 -> 59168 bytes
-rw-r--r--doc/context/sources/general/manuals/mk/mk-fallback.tex176
-rw-r--r--doc/context/sources/general/manuals/mk/mk-fonts.tex841
-rw-r--r--doc/context/sources/general/manuals/mk/mk-goingbeta.tex343
-rw-r--r--doc/context/sources/general/manuals/mk/mk-goingutf.tex187
-rw-r--r--doc/context/sources/general/manuals/mk/mk-halfway.tex377
-rw-r--r--doc/context/sources/general/manuals/mk/mk-iitoiv.tex118
-rw-r--r--doc/context/sources/general/manuals/mk/mk-initialization.tex214
-rw-r--r--doc/context/sources/general/manuals/mk/mk-introduction.tex61
-rw-r--r--doc/context/sources/general/manuals/mk/mk-itworks.tex142
-rw-r--r--doc/context/sources/general/manuals/mk/mk-last-state.pdfbin0 -> 20735 bytes
-rw-r--r--doc/context/sources/general/manuals/mk/mk-last.tex404
-rw-r--r--doc/context/sources/general/manuals/mk/mk-luafitsin.tex556
-rw-r--r--doc/context/sources/general/manuals/mk/mk-luatex-progress.lut12907
-rw-r--r--doc/context/sources/general/manuals/mk/mk-math.tex1024
-rw-r--r--doc/context/sources/general/manuals/mk/mk-memory.tex142
-rw-r--r--doc/context/sources/general/manuals/mk/mk-mix.tex1014
-rw-r--r--doc/context/sources/general/manuals/mk/mk-mplib.tex924
-rw-r--r--doc/context/sources/general/manuals/mk/mk-nicetoknow.tex77
-rw-r--r--doc/context/sources/general/manuals/mk/mk-nodes.tex462
-rw-r--r--doc/context/sources/general/manuals/mk/mk-open.tex276
-rw-r--r--doc/context/sources/general/manuals/mk/mk-optimization.tex265
-rw-r--r--doc/context/sources/general/manuals/mk/mk-order.tex375
-rw-r--r--doc/context/sources/general/manuals/mk/mk-performance.tex410
-rw-r--r--doc/context/sources/general/manuals/mk/mk-plain.tex285
-rw-r--r--doc/context/sources/general/manuals/mk/mk-punk.tex456
-rw-r--r--doc/context/sources/general/manuals/mk/mk-reflection.tex782
-rw-r--r--doc/context/sources/general/manuals/mk/mk-structure.tex437
-rw-r--r--doc/context/sources/general/manuals/mk/mk-timing-1-luatex-progress.lut64030
-rw-r--r--doc/context/sources/general/manuals/mk/mk-timing-1.tex3
-rw-r--r--doc/context/sources/general/manuals/mk/mk-timing-2-luatex-progress.lut44350
-rw-r--r--doc/context/sources/general/manuals/mk/mk-timing-2.tex4
-rw-r--r--doc/context/sources/general/manuals/mk/mk-timing-3-luatex-progress.lut44350
-rw-r--r--doc/context/sources/general/manuals/mk/mk-timing-3.tex19
-rw-r--r--doc/context/sources/general/manuals/mk/mk-titlepage.tex64
-rw-r--r--doc/context/sources/general/manuals/mk/mk-tokenspeak.tex266
-rw-r--r--doc/context/sources/general/manuals/mk/mk-tracking.tex341
-rw-r--r--doc/context/sources/general/manuals/mk/mk-xml.tex613
-rw-r--r--doc/context/sources/general/manuals/mk/mk-xml.xml24
-rw-r--r--doc/context/sources/general/manuals/mk/mk-zapfino.tex561
-rw-r--r--doc/context/sources/general/manuals/mk/mk.tex70
-rw-r--r--doc/context/sources/general/manuals/readme/mreadme.tex6
-rw-r--r--doc/context/sources/general/manuals/rules/rules-mkiv.tex821
-rw-r--r--doc/context/sources/general/manuals/spacing/spacing-mkiv.tex17
-rw-r--r--doc/context/sources/general/manuals/spreadsheets/spreadsheets-mkiv.tex760
-rw-r--r--doc/context/sources/general/manuals/sql/sql-mkiv.tex105
-rw-r--r--doc/context/sources/general/manuals/steps/steps-mkiv.tex760
-rw-r--r--doc/context/sources/general/manuals/still/still-acrobat-math.pngbin0 -> 57851 bytes
-rw-r--r--doc/context/sources/general/manuals/still/still-acrobat-text.pngbin0 -> 56826 bytes
-rw-r--r--doc/context/sources/general/manuals/still/still-backend.tex474
-rw-r--r--doc/context/sources/general/manuals/still/still-contents.tex7
-rw-r--r--doc/context/sources/general/manuals/still/still-environment.tex71
-rw-r--r--doc/context/sources/general/manuals/still/still-expanding.tex987
-rw-r--r--doc/context/sources/general/manuals/still/still-introduction.tex28
-rw-r--r--doc/context/sources/general/manuals/still/still-math-stripe.pngbin0 -> 1830 bytes
-rw-r--r--doc/context/sources/general/manuals/still/still-math.tex2880
-rw-r--r--doc/context/sources/general/manuals/still/still-one.tex234
-rw-r--r--doc/context/sources/general/manuals/still/still-opentypemath.tex921
-rw-r--r--doc/context/sources/general/manuals/still/still-profiling.tex802
-rw-r--r--doc/context/sources/general/manuals/still/still-simple.tex330
-rw-r--r--doc/context/sources/general/manuals/still/still-sumatra-math.pngbin0 -> 31799 bytes
-rw-r--r--doc/context/sources/general/manuals/still/still-sumatra-text.pngbin0 -> 30412 bytes
-rw-r--r--doc/context/sources/general/manuals/still/still-titlepage.tex38
-rw-r--r--doc/context/sources/general/manuals/still/still-tokens.tex903
-rw-r--r--doc/context/sources/general/manuals/still/still.tex46
-rw-r--r--doc/context/sources/general/manuals/swiglib/swiglib-mkiv-gm-1.pdfbin20433 -> 20433 bytes
-rw-r--r--doc/context/sources/general/manuals/swiglib/swiglib-mkiv.tex183
-rw-r--r--doc/context/sources/general/manuals/templates/templates-mkiv.tex4
-rw-r--r--doc/context/sources/general/manuals/tiptrick/tiptrick.tex17
-rw-r--r--doc/context/sources/general/manuals/tools/tools-mkiv.tex4
-rw-r--r--doc/context/sources/general/manuals/units/units-mkiv.tex17
-rw-r--r--doc/context/sources/general/manuals/workflows/workflows-injectors.tex57
-rw-r--r--doc/context/sources/general/manuals/workflows/workflows-mkiv.tex17
-rw-r--r--doc/context/sources/general/manuals/xml/xml-mkiv.tex588
-rw-r--r--doc/context/sources/general/manuals/xtables/xtables-mkiv.tex4
-rw-r--r--doc/fonts/hoekwater/koeieletters/koeieletters.rme52
-rw-r--r--fonts/truetype/hoekwater/koeieletters/koeielettersot.ttfbin0 -> 508712 bytes
-rw-r--r--metapost/context/base/mpii/mp-core.mpii2
-rw-r--r--metapost/context/base/mpii/mp-symb.mpii351
-rw-r--r--metapost/context/base/mpii/mp-tool.mpii76
-rw-r--r--metapost/context/base/mpiv/metafun.mpiv2
-rw-r--r--metapost/context/base/mpiv/mp-abck.mpiv53
-rw-r--r--metapost/context/base/mpiv/mp-asnc.mpiv2
-rw-r--r--metapost/context/base/mpiv/mp-base.mpiv8
-rw-r--r--metapost/context/base/mpiv/mp-char.mpiv15
-rw-r--r--metapost/context/base/mpiv/mp-chem.mpiv53
-rw-r--r--metapost/context/base/mpiv/mp-core.mpiv11
-rw-r--r--metapost/context/base/mpiv/mp-grap.mpiv22
-rw-r--r--metapost/context/base/mpiv/mp-idea.mpiv14
-rw-r--r--metapost/context/base/mpiv/mp-luas.mpiv66
-rw-r--r--metapost/context/base/mpiv/mp-mlib.mpiv584
-rw-r--r--metapost/context/base/mpiv/mp-node.mpiv182
-rw-r--r--metapost/context/base/mpiv/mp-page.mpiv14
-rw-r--r--metapost/context/base/mpiv/mp-shap.mpiv16
-rw-r--r--metapost/context/base/mpiv/mp-step.mpiv409
-rw-r--r--metapost/context/base/mpiv/mp-symb.mpiv84
-rw-r--r--metapost/context/base/mpiv/mp-tool.mpiv932
-rw-r--r--scripts/context/lua/mtx-cache.lua31
-rw-r--r--scripts/context/lua/mtx-context.lua208
-rw-r--r--scripts/context/lua/mtx-context.xml7
-rw-r--r--scripts/context/lua/mtx-dvi.lua411
-rw-r--r--scripts/context/lua/mtx-fonts.lua45
-rw-r--r--scripts/context/lua/mtx-grep.lua64
-rw-r--r--scripts/context/lua/mtx-interface.lua226
-rw-r--r--scripts/context/lua/mtx-patterns.lua45
-rw-r--r--scripts/context/lua/mtx-pdf.lua8
-rw-r--r--scripts/context/lua/mtx-server-ctx-fonttest.lua13
-rw-r--r--scripts/context/lua/mtx-server-ctx-help.lua9
-rw-r--r--scripts/context/lua/mtx-unicode.lua172
-rw-r--r--scripts/context/lua/mtxlibs.lua2
-rw-r--r--scripts/context/lua/mtxrun.lua3122
-rw-r--r--scripts/context/ruby/rslb/base.rb270
-rw-r--r--scripts/context/stubs/install/first-setup.sh62
-rw-r--r--scripts/context/stubs/mswin/mtxrun.lua3122
-rw-r--r--scripts/context/stubs/unix/ctxtools2
-rw-r--r--scripts/context/stubs/unix/mptopdf2
-rw-r--r--scripts/context/stubs/unix/mtxrun3122
-rw-r--r--scripts/context/stubs/unix/pstopdf2
-rw-r--r--scripts/context/stubs/win64/mtxrun.lua3122
-rw-r--r--tex/context/base/context-version.pdfbin4250 -> 4258 bytes
-rw-r--r--tex/context/base/mkii/cont-new.mkii2
-rw-r--r--tex/context/base/mkii/context.mkii2
-rw-r--r--tex/context/base/mkii/mult-cs.mkii1970
-rw-r--r--tex/context/base/mkii/mult-de.mkii27
-rw-r--r--tex/context/base/mkii/mult-en.mkii27
-rw-r--r--tex/context/base/mkii/mult-fr.mkii27
-rw-r--r--tex/context/base/mkii/mult-it.mkii27
-rw-r--r--tex/context/base/mkii/mult-nl.mkii31
-rw-r--r--tex/context/base/mkii/mult-pe.mkii27
-rw-r--r--tex/context/base/mkii/mult-ro.mkii27
-rw-r--r--tex/context/base/mkii/pack-box.mkii2
-rw-r--r--tex/context/base/mkii/page-mul.mkii6
-rw-r--r--tex/context/base/mkiv/anch-bar.mkiv10
-rw-r--r--tex/context/base/mkiv/anch-bck.mkvi281
-rw-r--r--tex/context/base/mkiv/anch-pgr.lua1348
-rw-r--r--tex/context/base/mkiv/anch-pgr.mkiv96
-rw-r--r--tex/context/base/mkiv/anch-pos.lua552
-rw-r--r--tex/context/base/mkiv/anch-pos.mkiv57
-rw-r--r--tex/context/base/mkiv/anch-snc.mkiv1
-rw-r--r--tex/context/base/mkiv/anch-tab.mkiv12
-rw-r--r--tex/context/base/mkiv/attr-col.lua121
-rw-r--r--tex/context/base/mkiv/attr-eff.lua4
-rw-r--r--tex/context/base/mkiv/attr-ini.lua3
-rw-r--r--tex/context/base/mkiv/attr-ini.mkiv38
-rw-r--r--tex/context/base/mkiv/attr-lay.lua9
-rw-r--r--tex/context/base/mkiv/attr-neg.lua4
-rw-r--r--tex/context/base/mkiv/back-exp.lua154
-rw-r--r--tex/context/base/mkiv/back-ini.lua31
-rw-r--r--tex/context/base/mkiv/back-pdf.lua138
-rw-r--r--tex/context/base/mkiv/back-pdf.mkiv68
-rw-r--r--tex/context/base/mkiv/bibl-bib.mkiv2
-rw-r--r--tex/context/base/mkiv/bibl-tra.lua33
-rw-r--r--tex/context/base/mkiv/bibl-tra.mkiv4
-rw-r--r--tex/context/base/mkiv/blob-ini.lua2
-rw-r--r--tex/context/base/mkiv/buff-imp-parsed-xml.lua2
-rw-r--r--tex/context/base/mkiv/buff-ini.lua170
-rw-r--r--tex/context/base/mkiv/buff-par.lua21
-rw-r--r--tex/context/base/mkiv/buff-par.mkvi29
-rw-r--r--tex/context/base/mkiv/buff-ver.lua3
-rw-r--r--tex/context/base/mkiv/buff-ver.mkiv7
-rw-r--r--tex/context/base/mkiv/char-cjk.lua1
-rw-r--r--tex/context/base/mkiv/char-def.lua13220
-rw-r--r--tex/context/base/mkiv/char-emj.lua2633
-rw-r--r--tex/context/base/mkiv/char-enc.lua1
-rw-r--r--tex/context/base/mkiv/char-fio.lua5
-rw-r--r--tex/context/base/mkiv/char-ini.lua276
-rw-r--r--tex/context/base/mkiv/char-obs.lua269
-rw-r--r--tex/context/base/mkiv/char-tex.lua4
-rw-r--r--tex/context/base/mkiv/char-utf.lua310
-rw-r--r--tex/context/base/mkiv/char-utf.mkiv6
-rw-r--r--tex/context/base/mkiv/chem-str.lua25
-rw-r--r--tex/context/base/mkiv/chem-str.mkiv10
-rw-r--r--tex/context/base/mkiv/cldf-bas.lua150
-rw-r--r--tex/context/base/mkiv/cldf-com.lua36
-rw-r--r--tex/context/base/mkiv/cldf-ini.lua1889
-rw-r--r--tex/context/base/mkiv/cldf-int.lua100
-rw-r--r--tex/context/base/mkiv/cldf-scn.lua2
-rw-r--r--tex/context/base/mkiv/cldf-stp.lua22
-rw-r--r--tex/context/base/mkiv/cldf-ver.lua59
-rw-r--r--tex/context/base/mkiv/colo-ext.mkiv4
-rw-r--r--tex/context/base/mkiv/colo-imp-rainbow.mkiv252
-rw-r--r--tex/context/base/mkiv/colo-imp-rgb.mkiv10
-rw-r--r--tex/context/base/mkiv/colo-imp-solarized.mkiv38
-rw-r--r--tex/context/base/mkiv/colo-ini.lua330
-rw-r--r--tex/context/base/mkiv/colo-ini.mkiv404
-rw-r--r--tex/context/base/mkiv/colo-run.lua9
-rw-r--r--tex/context/base/mkiv/cont-fil.mkiv55
-rw-r--r--tex/context/base/mkiv/cont-new.mkiv2
-rw-r--r--tex/context/base/mkiv/cont-run.lua9
-rw-r--r--tex/context/base/mkiv/cont-run.mkiv1
-rw-r--r--tex/context/base/mkiv/context-todo.tex139
-rw-r--r--tex/context/base/mkiv/context.css3
-rw-r--r--tex/context/base/mkiv/context.mkiv15
-rw-r--r--tex/context/base/mkiv/core-con.lua404
-rw-r--r--tex/context/base/mkiv/core-con.mkiv19
-rw-r--r--tex/context/base/mkiv/core-ctx.lua5
-rw-r--r--tex/context/base/mkiv/core-env.lua208
-rw-r--r--tex/context/base/mkiv/core-env.mkiv30
-rw-r--r--tex/context/base/mkiv/core-sys.lua2
-rw-r--r--tex/context/base/mkiv/core-sys.mkiv5
-rw-r--r--tex/context/base/mkiv/core-uti.lua72
-rw-r--r--tex/context/base/mkiv/core-uti.mkiv2
-rw-r--r--tex/context/base/mkiv/data-con.lua2
-rw-r--r--tex/context/base/mkiv/data-crl.lua36
-rw-r--r--tex/context/base/mkiv/data-exp.lua2
-rw-r--r--tex/context/base/mkiv/data-ini.lua10
-rw-r--r--tex/context/base/mkiv/data-lua.lua8
-rw-r--r--tex/context/base/mkiv/data-met.lua1
-rw-r--r--tex/context/base/mkiv/data-res.lua50
-rw-r--r--tex/context/base/mkiv/data-sch.lua30
-rw-r--r--tex/context/base/mkiv/data-tmp.lua48
-rw-r--r--tex/context/base/mkiv/data-use.lua6
-rw-r--r--tex/context/base/mkiv/enco-ini.mkiv2
-rw-r--r--tex/context/base/mkiv/example.rng304
-rw-r--r--tex/context/base/mkiv/file-job.lua15
-rw-r--r--tex/context/base/mkiv/file-job.mkvi14
-rw-r--r--tex/context/base/mkiv/file-lib.lua24
-rw-r--r--tex/context/base/mkiv/file-res.lua6
-rw-r--r--tex/context/base/mkiv/file-syn.lua2
-rw-r--r--tex/context/base/mkiv/font-afm.lua70
-rw-r--r--tex/context/base/mkiv/font-age.lua3
-rw-r--r--tex/context/base/mkiv/font-agl.lua2
-rw-r--r--tex/context/base/mkiv/font-cff.lua1396
-rw-r--r--tex/context/base/mkiv/font-cft.lua543
-rw-r--r--tex/context/base/mkiv/font-chk.lua118
-rw-r--r--tex/context/base/mkiv/font-col.lua37
-rw-r--r--tex/context/base/mkiv/font-col.mkvi15
-rw-r--r--tex/context/base/mkiv/font-con.lua636
-rw-r--r--tex/context/base/mkiv/font-ctx.lua1108
-rw-r--r--tex/context/base/mkiv/font-def.lua92
-rw-r--r--tex/context/base/mkiv/font-dsp.lua2079
-rw-r--r--tex/context/base/mkiv/font-enc.lua40
-rw-r--r--tex/context/base/mkiv/font-enh.lua34
-rw-r--r--tex/context/base/mkiv/font-ext.lua421
-rw-r--r--tex/context/base/mkiv/font-fea.mkvi56
-rw-r--r--tex/context/base/mkiv/font-fil.mkvi22
-rw-r--r--tex/context/base/mkiv/font-gbn.lua5
-rw-r--r--tex/context/base/mkiv/font-hsh.lua15
-rw-r--r--tex/context/base/mkiv/font-ini.lua2
-rw-r--r--tex/context/base/mkiv/font-ini.mkvi303
-rw-r--r--tex/context/base/mkiv/font-inj.lua120
-rw-r--r--tex/context/base/mkiv/font-lib.mkvi20
-rw-r--r--tex/context/base/mkiv/font-lig.lua48
-rw-r--r--tex/context/base/mkiv/font-map.lua204
-rw-r--r--tex/context/base/mkiv/font-mat.mkvi18
-rw-r--r--tex/context/base/mkiv/font-mis.lua2
-rw-r--r--tex/context/base/mkiv/font-mps.lua267
-rw-r--r--tex/context/base/mkiv/font-nod.lua44
-rw-r--r--tex/context/base/mkiv/font-ocl.lua586
-rw-r--r--tex/context/base/mkiv/font-odv.lua52
-rw-r--r--tex/context/base/mkiv/font-off.lua6
-rw-r--r--tex/context/base/mkiv/font-one.lua122
-rw-r--r--tex/context/base/mkiv/font-onr.lua216
-rw-r--r--tex/context/base/mkiv/font-osd.lua199
-rw-r--r--tex/context/base/mkiv/font-ota.lua58
-rw-r--r--tex/context/base/mkiv/font-otb.lua2
-rw-r--r--tex/context/base/mkiv/font-otc.lua472
-rw-r--r--tex/context/base/mkiv/font-otd.lua51
-rw-r--r--tex/context/base/mkiv/font-otf.lua440
-rw-r--r--tex/context/base/mkiv/font-oti.lua108
-rw-r--r--tex/context/base/mkiv/font-otj.lua711
-rw-r--r--tex/context/base/mkiv/font-otl.lua375
-rw-r--r--tex/context/base/mkiv/font-otn.lua60
-rw-r--r--tex/context/base/mkiv/font-oto.lua16
-rw-r--r--tex/context/base/mkiv/font-otp.lua19
-rw-r--r--tex/context/base/mkiv/font-otr.lua1149
-rw-r--r--tex/context/base/mkiv/font-ots.lua2939
-rw-r--r--tex/context/base/mkiv/font-ott.lua8
-rw-r--r--tex/context/base/mkiv/font-oup.lua264
-rw-r--r--tex/context/base/mkiv/font-pre.mkiv71
-rw-r--r--tex/context/base/mkiv/font-run.mkiv2
-rw-r--r--tex/context/base/mkiv/font-sel.lua195
-rw-r--r--tex/context/base/mkiv/font-sel.mkvi47
-rw-r--r--tex/context/base/mkiv/font-set.mkvi2
-rw-r--r--tex/context/base/mkiv/font-shp.lua410
-rw-r--r--tex/context/base/mkiv/font-sol.lua70
-rw-r--r--tex/context/base/mkiv/font-sty.mkvi21
-rw-r--r--tex/context/base/mkiv/font-sym.mkvi2
-rw-r--r--tex/context/base/mkiv/font-syn.lua103
-rw-r--r--tex/context/base/mkiv/font-tfm.lua554
-rw-r--r--tex/context/base/mkiv/font-tra.mkiv12
-rw-r--r--tex/context/base/mkiv/font-ttf.lua1158
-rw-r--r--tex/context/base/mkiv/font-vf.lua2
-rw-r--r--tex/context/base/mkiv/font-web.lua202
-rw-r--r--tex/context/base/mkiv/good-ctx.lua300
-rw-r--r--tex/context/base/mkiv/good-gen.lua208
-rw-r--r--tex/context/base/mkiv/good-ini.lua397
-rw-r--r--tex/context/base/mkiv/good-mth.lua312
-rw-r--r--tex/context/base/mkiv/grph-con.lua421
-rw-r--r--tex/context/base/mkiv/grph-fig.mkiv9
-rw-r--r--tex/context/base/mkiv/grph-fil.lua15
-rw-r--r--tex/context/base/mkiv/grph-inc.lua668
-rw-r--r--tex/context/base/mkiv/grph-inc.mkiv191
-rw-r--r--tex/context/base/mkiv/grph-mem.lua106
-rw-r--r--tex/context/base/mkiv/grph-pat.lua74
-rw-r--r--tex/context/base/mkiv/grph-pat.mkiv125
-rw-r--r--tex/context/base/mkiv/grph-rul.lua33
-rw-r--r--tex/context/base/mkiv/grph-u3d.lua3
-rw-r--r--tex/context/base/mkiv/l-dir.lua36
-rw-r--r--tex/context/base/mkiv/l-file.lua11
-rw-r--r--tex/context/base/mkiv/l-io.lua281
-rw-r--r--tex/context/base/mkiv/l-lpeg.lua107
-rw-r--r--tex/context/base/mkiv/l-lua.lua24
-rw-r--r--tex/context/base/mkiv/l-md5.lua3
-rw-r--r--tex/context/base/mkiv/l-number.lua23
-rw-r--r--tex/context/base/mkiv/l-os.lua50
-rw-r--r--tex/context/base/mkiv/l-pdfview.lua4
-rw-r--r--tex/context/base/mkiv/l-sandbox.lua77
-rw-r--r--tex/context/base/mkiv/l-string.lua39
-rw-r--r--tex/context/base/mkiv/l-table.lua159
-rw-r--r--tex/context/base/mkiv/l-unicode.lua32
-rw-r--r--tex/context/base/mkiv/lang-cnt.lua164
-rw-r--r--tex/context/base/mkiv/lang-def.mkiv38
-rw-r--r--tex/context/base/mkiv/lang-dis.lua320
-rw-r--r--tex/context/base/mkiv/lang-frq-pt.lua12
-rw-r--r--tex/context/base/mkiv/lang-hyp.lua764
-rw-r--r--tex/context/base/mkiv/lang-hyp.mkiv21
-rw-r--r--tex/context/base/mkiv/lang-ini.lua223
-rw-r--r--tex/context/base/mkiv/lang-ini.mkiv53
-rw-r--r--tex/context/base/mkiv/lang-lab.mkiv2
-rw-r--r--tex/context/base/mkiv/lang-rep.lua24
-rw-r--r--tex/context/base/mkiv/lang-txt.lua5444
-rw-r--r--tex/context/base/mkiv/lang-wrd.lua7
-rw-r--r--tex/context/base/mkiv/layo-ini.lua8
-rw-r--r--tex/context/base/mkiv/lpdf-ano.lua18
-rw-r--r--tex/context/base/mkiv/lpdf-col.lua62
-rw-r--r--tex/context/base/mkiv/lpdf-fld.lua15
-rw-r--r--tex/context/base/mkiv/lpdf-fmt.lua650
-rw-r--r--tex/context/base/mkiv/lpdf-grp.lua87
-rw-r--r--tex/context/base/mkiv/lpdf-ini.lua116
-rw-r--r--tex/context/base/mkiv/lpdf-mis.lua181
-rw-r--r--tex/context/base/mkiv/lpdf-nod.lua54
-rw-r--r--tex/context/base/mkiv/lpdf-pda.xml259
-rw-r--r--tex/context/base/mkiv/lpdf-ren.lua3
-rw-r--r--tex/context/base/mkiv/lpdf-res.lua6
-rw-r--r--tex/context/base/mkiv/lpdf-swf.lua25
-rw-r--r--tex/context/base/mkiv/lpdf-tag.lua21
-rw-r--r--tex/context/base/mkiv/lpdf-wid.lua15
-rw-r--r--tex/context/base/mkiv/lpdf-xmp.lua48
-rw-r--r--tex/context/base/mkiv/luat-cbk.lua17
-rw-r--r--tex/context/base/mkiv/luat-cnf.lua5
-rw-r--r--tex/context/base/mkiv/luat-cod.lua26
-rw-r--r--tex/context/base/mkiv/luat-exe.lua129
-rw-r--r--tex/context/base/mkiv/luat-fio.lua14
-rw-r--r--tex/context/base/mkiv/luat-fmt.lua129
-rw-r--r--tex/context/base/mkiv/luat-ini.lua10
-rw-r--r--tex/context/base/mkiv/luat-iop.lua25
-rw-r--r--tex/context/base/mkiv/luat-lib.mkiv4
-rw-r--r--tex/context/base/mkiv/luat-mac.lua5
-rw-r--r--tex/context/base/mkiv/luat-run.lua53
-rw-r--r--tex/context/base/mkiv/luat-usr.lua1
-rw-r--r--tex/context/base/mkiv/lxml-aux.lua15
-rw-r--r--tex/context/base/mkiv/lxml-css.lua721
-rw-r--r--tex/context/base/mkiv/lxml-ent.lua2
-rw-r--r--tex/context/base/mkiv/lxml-ini.lua2
-rw-r--r--tex/context/base/mkiv/lxml-ini.mkiv12
-rw-r--r--tex/context/base/mkiv/lxml-lpt.lua80
-rw-r--r--tex/context/base/mkiv/lxml-tab.lua114
-rw-r--r--tex/context/base/mkiv/lxml-tex.lua35
-rw-r--r--tex/context/base/mkiv/m-fonts-plugins.mkiv406
-rw-r--r--tex/context/base/mkiv/m-oldotf.mkiv1
-rw-r--r--tex/context/base/mkiv/math-acc.mkvi31
-rw-r--r--tex/context/base/mkiv/math-act.lua242
-rw-r--r--tex/context/base/mkiv/math-ali.mkiv816
-rw-r--r--tex/context/base/mkiv/math-del.mkiv89
-rw-r--r--tex/context/base/mkiv/math-dim.lua2
-rw-r--r--tex/context/base/mkiv/math-dir.lua18
-rw-r--r--tex/context/base/mkiv/math-fen.mkiv159
-rw-r--r--tex/context/base/mkiv/math-for.mkiv20
-rw-r--r--tex/context/base/mkiv/math-ini.lua125
-rw-r--r--tex/context/base/mkiv/math-ini.mkiv179
-rw-r--r--tex/context/base/mkiv/math-map.lua14
-rw-r--r--tex/context/base/mkiv/math-noa.lua591
-rw-r--r--tex/context/base/mkiv/math-pln.mkiv2
-rw-r--r--tex/context/base/mkiv/math-rad.mkvi2
-rw-r--r--tex/context/base/mkiv/math-stc.mkvi10
-rw-r--r--tex/context/base/mkiv/math-tag.lua14
-rw-r--r--tex/context/base/mkiv/math-vfu.lua6
-rw-r--r--tex/context/base/mkiv/meta-imp-mat.mkiv174
-rw-r--r--tex/context/base/mkiv/meta-imp-nodes.mkiv34
-rw-r--r--tex/context/base/mkiv/meta-imp-outlines.mkiv62
-rw-r--r--tex/context/base/mkiv/meta-imp-txt.mkiv305
-rw-r--r--tex/context/base/mkiv/meta-ini.lua70
-rw-r--r--tex/context/base/mkiv/meta-ini.mkiv72
-rw-r--r--tex/context/base/mkiv/meta-pdf.lua4
-rw-r--r--tex/context/base/mkiv/meta-tex.lua65
-rw-r--r--tex/context/base/mkiv/mlib-ctx.lua16
-rw-r--r--tex/context/base/mkiv/mlib-int.lua12
-rw-r--r--tex/context/base/mkiv/mlib-lua.lua281
-rw-r--r--tex/context/base/mkiv/mlib-pdf.lua42
-rw-r--r--tex/context/base/mkiv/mlib-pdf.mkiv2
-rw-r--r--tex/context/base/mkiv/mlib-pps.lua292
-rw-r--r--tex/context/base/mkiv/mlib-pps.mkiv40
-rw-r--r--tex/context/base/mkiv/mlib-run.lua185
-rw-r--r--tex/context/base/mkiv/mtx-context-domotica.tex167
-rw-r--r--tex/context/base/mkiv/mtx-context-listing.tex2
-rw-r--r--tex/context/base/mkiv/mtx-context-xml.tex17
-rw-r--r--tex/context/base/mkiv/mult-aux.mkiv5
-rw-r--r--tex/context/base/mkiv/mult-def.lua114
-rw-r--r--tex/context/base/mkiv/mult-fun.lua33
-rw-r--r--tex/context/base/mkiv/mult-ini.lua8
-rw-r--r--tex/context/base/mkiv/mult-ini.mkiv20
-rw-r--r--tex/context/base/mkiv/mult-low.lua21
-rw-r--r--tex/context/base/mkiv/mult-mps.lua7
-rw-r--r--tex/context/base/mkiv/mult-prm.lua36
-rw-r--r--tex/context/base/mkiv/mult-sys.mkiv33
-rw-r--r--tex/context/base/mkiv/node-acc.lua114
-rw-r--r--tex/context/base/mkiv/node-aux.lua319
-rw-r--r--tex/context/base/mkiv/node-bck.lua43
-rw-r--r--tex/context/base/mkiv/node-fin.lua144
-rw-r--r--tex/context/base/mkiv/node-fin.mkiv47
-rw-r--r--tex/context/base/mkiv/node-fnt.lua234
-rw-r--r--tex/context/base/mkiv/node-ini.lua83
-rw-r--r--tex/context/base/mkiv/node-ini.mkiv4
-rw-r--r--tex/context/base/mkiv/node-ltp.lua1537
-rw-r--r--tex/context/base/mkiv/node-met.lua320
-rw-r--r--tex/context/base/mkiv/node-mig.lua9
-rw-r--r--tex/context/base/mkiv/node-nut.lua484
-rw-r--r--tex/context/base/mkiv/node-ppt.lua16
-rw-r--r--tex/context/base/mkiv/node-pro.lua242
-rw-r--r--tex/context/base/mkiv/node-ref.lua344
-rw-r--r--tex/context/base/mkiv/node-res.lua293
-rw-r--r--tex/context/base/mkiv/node-rul.lua665
-rw-r--r--tex/context/base/mkiv/node-rul.mkiv154
-rw-r--r--tex/context/base/mkiv/node-scn.lua330
-rw-r--r--tex/context/base/mkiv/node-ser.lua157
-rw-r--r--tex/context/base/mkiv/node-shp.lua10
-rw-r--r--tex/context/base/mkiv/node-syn.lua504
-rw-r--r--tex/context/base/mkiv/node-tra.lua42
-rw-r--r--tex/context/base/mkiv/node-tsk.lua64
-rw-r--r--tex/context/base/mkiv/node-tst.lua16
-rw-r--r--tex/context/base/mkiv/node-typ.lua29
-rw-r--r--tex/context/base/mkiv/pack-box.mkiv111
-rw-r--r--tex/context/base/mkiv/pack-com.mkiv7
-rw-r--r--tex/context/base/mkiv/pack-lyr.mkiv31
-rw-r--r--tex/context/base/mkiv/pack-obj.lua1
-rw-r--r--tex/context/base/mkiv/pack-rul.lua90
-rw-r--r--tex/context/base/mkiv/pack-rul.mkiv137
-rw-r--r--tex/context/base/mkiv/page-brk.mkiv19
-rw-r--r--tex/context/base/mkiv/page-cst.lua68
-rw-r--r--tex/context/base/mkiv/page-cst.mkiv14
-rw-r--r--tex/context/base/mkiv/page-flt.lua3
-rw-r--r--tex/context/base/mkiv/page-flw.mkiv41
-rw-r--r--tex/context/base/mkiv/page-inj.lua1
-rw-r--r--tex/context/base/mkiv/page-ins.lua6
-rw-r--r--tex/context/base/mkiv/page-ins.mkiv5
-rw-r--r--tex/context/base/mkiv/page-lay.mkiv19
-rw-r--r--tex/context/base/mkiv/page-lin.lua39
-rw-r--r--tex/context/base/mkiv/page-lin.mkvi24
-rw-r--r--tex/context/base/mkiv/page-mix.lua238
-rw-r--r--tex/context/base/mkiv/page-mix.mkiv118
-rw-r--r--tex/context/base/mkiv/page-mrk.mkiv36
-rw-r--r--tex/context/base/mkiv/page-mul.mkiv31
-rw-r--r--tex/context/base/mkiv/page-one.mkiv5
-rw-r--r--tex/context/base/mkiv/page-sel.mkvi49
-rw-r--r--tex/context/base/mkiv/page-set.mkiv2
-rw-r--r--tex/context/base/mkiv/page-sid.mkiv169
-rw-r--r--tex/context/base/mkiv/page-str.lua57
-rw-r--r--tex/context/base/mkiv/page-txt.mkvi210
-rw-r--r--tex/context/base/mkiv/publ-aut.lua7
-rw-r--r--tex/context/base/mkiv/publ-dat.lua79
-rw-r--r--tex/context/base/mkiv/publ-imp-apa.lua11
-rw-r--r--tex/context/base/mkiv/publ-imp-apa.mkvi337
-rw-r--r--tex/context/base/mkiv/publ-imp-aps.mkvi126
-rw-r--r--tex/context/base/mkiv/publ-imp-cite.mkvi68
-rw-r--r--tex/context/base/mkiv/publ-imp-default.mkvi30
-rw-r--r--tex/context/base/mkiv/publ-ini.lua40
-rw-r--r--tex/context/base/mkiv/publ-ini.mkiv9
-rw-r--r--tex/context/base/mkiv/publ-reg.lua2
-rw-r--r--tex/context/base/mkiv/publ-sor.lua1
-rw-r--r--tex/context/base/mkiv/publ-tra.lua25
-rw-r--r--tex/context/base/mkiv/regi-ibm.lua26
-rw-r--r--tex/context/base/mkiv/regi-ini.lua110
-rw-r--r--tex/context/base/mkiv/scrn-bar.mkvi34
-rw-r--r--tex/context/base/mkiv/scrn-but.mkvi3
-rw-r--r--tex/context/base/mkiv/scrn-fld.mkvi1
-rw-r--r--tex/context/base/mkiv/scrn-hlp.lua30
-rw-r--r--tex/context/base/mkiv/scrn-ini.mkvi58
-rw-r--r--tex/context/base/mkiv/scrn-pag.lua1
-rw-r--r--tex/context/base/mkiv/scrn-pag.mkvi2
-rw-r--r--tex/context/base/mkiv/scrn-wid.lua1
-rw-r--r--tex/context/base/mkiv/scrn-wid.mkvi4
-rw-r--r--tex/context/base/mkiv/scrp-cjk.lua8
-rw-r--r--tex/context/base/mkiv/sort-ini.lua7
-rw-r--r--tex/context/base/mkiv/sort-lan.lua83
-rw-r--r--tex/context/base/mkiv/spac-adj.lua17
-rw-r--r--tex/context/base/mkiv/spac-adj.mkiv2
-rw-r--r--tex/context/base/mkiv/spac-ali.lua21
-rw-r--r--tex/context/base/mkiv/spac-ali.mkiv126
-rw-r--r--tex/context/base/mkiv/spac-chr.lua22
-rw-r--r--tex/context/base/mkiv/spac-chr.mkiv12
-rw-r--r--tex/context/base/mkiv/spac-def.mkiv1
-rw-r--r--tex/context/base/mkiv/spac-grd.mkiv28
-rw-r--r--tex/context/base/mkiv/spac-hor.lua1
-rw-r--r--tex/context/base/mkiv/spac-hor.mkiv33
-rw-r--r--tex/context/base/mkiv/spac-lin.mkiv19
-rw-r--r--tex/context/base/mkiv/spac-prf.lua147
-rw-r--r--tex/context/base/mkiv/spac-ver.lua1002
-rw-r--r--tex/context/base/mkiv/spac-ver.mkiv162
-rw-r--r--tex/context/base/mkiv/status-files.pdfbin9253 -> 25644 bytes
-rw-r--r--tex/context/base/mkiv/status-lua.pdfbin268228 -> 423833 bytes
-rw-r--r--tex/context/base/mkiv/status-mkiv.lua9497
-rw-r--r--tex/context/base/mkiv/strc-bkm.lua51
-rw-r--r--tex/context/base/mkiv/strc-con.mkvi14
-rw-r--r--tex/context/base/mkiv/strc-def.mkiv2
-rw-r--r--tex/context/base/mkiv/strc-des.mkvi4
-rw-r--r--tex/context/base/mkiv/strc-doc.lua20
-rw-r--r--tex/context/base/mkiv/strc-doc.mkiv4
-rw-r--r--tex/context/base/mkiv/strc-enu.mkvi4
-rw-r--r--tex/context/base/mkiv/strc-flt.mkvi138
-rw-r--r--tex/context/base/mkiv/strc-itm.mkvi160
-rw-r--r--tex/context/base/mkiv/strc-lev.lua14
-rw-r--r--tex/context/base/mkiv/strc-lev.mkvi2
-rw-r--r--tex/context/base/mkiv/strc-lst.lua2
-rw-r--r--tex/context/base/mkiv/strc-lst.mkvi16
-rw-r--r--tex/context/base/mkiv/strc-mar.lua5
-rw-r--r--tex/context/base/mkiv/strc-mat.mkiv494
-rw-r--r--tex/context/base/mkiv/strc-not.lua45
-rw-r--r--tex/context/base/mkiv/strc-not.mkvi85
-rw-r--r--tex/context/base/mkiv/strc-num.lua58
-rw-r--r--tex/context/base/mkiv/strc-num.mkiv8
-rw-r--r--tex/context/base/mkiv/strc-pag.mkiv10
-rw-r--r--tex/context/base/mkiv/strc-ref.lua82
-rw-r--r--tex/context/base/mkiv/strc-ref.mkvi12
-rw-r--r--tex/context/base/mkiv/strc-reg.lua22
-rw-r--r--tex/context/base/mkiv/strc-reg.mkiv6
-rw-r--r--tex/context/base/mkiv/strc-ren.mkiv201
-rw-r--r--tex/context/base/mkiv/strc-rsc.lua4
-rw-r--r--tex/context/base/mkiv/strc-sec.mkiv18
-rw-r--r--tex/context/base/mkiv/strc-syn.lua1
-rw-r--r--tex/context/base/mkiv/strc-tag.lua2
-rw-r--r--tex/context/base/mkiv/strc-tag.mkiv17
-rw-r--r--tex/context/base/mkiv/supp-box.lua364
-rw-r--r--tex/context/base/mkiv/supp-box.mkiv122
-rw-r--r--tex/context/base/mkiv/supp-ran.lua73
-rw-r--r--tex/context/base/mkiv/supp-ran.mkiv10
-rw-r--r--tex/context/base/mkiv/supp-vis.mkiv2
-rw-r--r--tex/context/base/mkiv/symb-emj.lua82
-rw-r--r--tex/context/base/mkiv/symb-emj.mkiv27
-rw-r--r--tex/context/base/mkiv/syst-aux.lua210
-rw-r--r--tex/context/base/mkiv/syst-aux.mkiv94
-rw-r--r--tex/context/base/mkiv/syst-ini.mkiv43
-rw-r--r--tex/context/base/mkiv/syst-lua.lua42
-rw-r--r--tex/context/base/mkiv/syst-mes.mkiv8
-rw-r--r--tex/context/base/mkiv/tabl-frm.mkiv209
-rw-r--r--tex/context/base/mkiv/tabl-ltb.mkiv3
-rw-r--r--tex/context/base/mkiv/tabl-ntb.mkiv269
-rw-r--r--tex/context/base/mkiv/tabl-tab.mkiv6
-rw-r--r--tex/context/base/mkiv/tabl-tbl.mkiv160
-rw-r--r--tex/context/base/mkiv/tabl-tsp.mkiv2
-rw-r--r--tex/context/base/mkiv/tabl-xtb.lua251
-rw-r--r--tex/context/base/mkiv/tabl-xtb.mkvi25
-rw-r--r--tex/context/base/mkiv/task-ini.lua30
-rw-r--r--tex/context/base/mkiv/toks-ini.lua34
-rw-r--r--tex/context/base/mkiv/toks-ini.mkiv8
-rw-r--r--tex/context/base/mkiv/toks-scn.lua43
-rw-r--r--tex/context/base/mkiv/toks-tra.lua1
-rw-r--r--tex/context/base/mkiv/toks-tra.mkiv11
-rw-r--r--tex/context/base/mkiv/trac-deb.lua62
-rw-r--r--tex/context/base/mkiv/trac-inf.lua69
-rw-r--r--tex/context/base/mkiv/trac-jus.lua92
-rw-r--r--tex/context/base/mkiv/trac-log.lua12
-rw-r--r--tex/context/base/mkiv/trac-par.lua17
-rw-r--r--tex/context/base/mkiv/trac-set.lua1
-rw-r--r--tex/context/base/mkiv/trac-tex.lua58
-rw-r--r--tex/context/base/mkiv/trac-vis.lua1204
-rw-r--r--tex/context/base/mkiv/trac-vis.mkiv2
-rw-r--r--tex/context/base/mkiv/trac-xml.lua1
-rw-r--r--tex/context/base/mkiv/type-set.mkiv8
-rw-r--r--tex/context/base/mkiv/typo-bld.lua69
-rw-r--r--tex/context/base/mkiv/typo-brk.lua121
-rw-r--r--tex/context/base/mkiv/typo-cap.lua158
-rw-r--r--tex/context/base/mkiv/typo-cap.mkiv2
-rw-r--r--tex/context/base/mkiv/typo-chr.lua5
-rw-r--r--tex/context/base/mkiv/typo-cln.lua5
-rw-r--r--tex/context/base/mkiv/typo-del.mkiv203
-rw-r--r--tex/context/base/mkiv/typo-dha.lua10
-rw-r--r--tex/context/base/mkiv/typo-dig.lua15
-rw-r--r--tex/context/base/mkiv/typo-dir.lua11
-rw-r--r--tex/context/base/mkiv/typo-drp.lua43
-rw-r--r--tex/context/base/mkiv/typo-dua.lua22
-rw-r--r--tex/context/base/mkiv/typo-dub.lua27
-rw-r--r--tex/context/base/mkiv/typo-duc.lua24
-rw-r--r--tex/context/base/mkiv/typo-fkr.lua129
-rw-r--r--tex/context/base/mkiv/typo-fkr.mkiv38
-rw-r--r--tex/context/base/mkiv/typo-fln.lua156
-rw-r--r--tex/context/base/mkiv/typo-itc.lua64
-rw-r--r--tex/context/base/mkiv/typo-krn.lua130
-rw-r--r--tex/context/base/mkiv/typo-lin.lua91
-rw-r--r--tex/context/base/mkiv/typo-mar.lua430
-rw-r--r--tex/context/base/mkiv/typo-mar.mkiv50
-rw-r--r--tex/context/base/mkiv/typo-pag.lua32
-rw-r--r--tex/context/base/mkiv/typo-rep.lua11
-rw-r--r--tex/context/base/mkiv/typo-rub.lua419
-rw-r--r--tex/context/base/mkiv/typo-rub.mkiv170
-rw-r--r--tex/context/base/mkiv/typo-scr.mkiv9
-rw-r--r--tex/context/base/mkiv/typo-spa.lua15
-rw-r--r--tex/context/base/mkiv/typo-sus.lua36
-rw-r--r--tex/context/base/mkiv/typo-tal.lua12
-rw-r--r--tex/context/base/mkiv/typo-wrp.lua10
-rw-r--r--tex/context/base/mkiv/util-deb.lua264
-rw-r--r--tex/context/base/mkiv/util-env.lua48
-rw-r--r--tex/context/base/mkiv/util-fil.lua218
-rw-r--r--tex/context/base/mkiv/util-jsn.lua21
-rw-r--r--tex/context/base/mkiv/util-lib-imp-gm.lua4
-rw-r--r--tex/context/base/mkiv/util-lib-imp-gs.lua4
-rw-r--r--tex/context/base/mkiv/util-lib.lua305
-rw-r--r--tex/context/base/mkiv/util-lua.lua18
-rw-r--r--tex/context/base/mkiv/util-prs.lua21
-rw-r--r--tex/context/base/mkiv/util-sac.lua230
-rw-r--r--tex/context/base/mkiv/util-sbx.lua529
-rw-r--r--tex/context/base/mkiv/util-sci.lua43
-rw-r--r--tex/context/base/mkiv/util-seq.lua28
-rw-r--r--tex/context/base/mkiv/util-sql-imp-client.lua37
-rw-r--r--tex/context/base/mkiv/util-sql-imp-library.lua4
-rw-r--r--tex/context/base/mkiv/util-sql-imp-sqlite.lua237
-rw-r--r--tex/context/base/mkiv/util-sql-imp-swiglib.lua54
-rw-r--r--tex/context/base/mkiv/util-sql-loggers.lua96
-rw-r--r--tex/context/base/mkiv/util-sql-tickets.lua5
-rw-r--r--tex/context/base/mkiv/util-sql.lua33
-rw-r--r--tex/context/base/mkiv/util-str.lua139
-rw-r--r--tex/context/base/mkiv/util-tab.lua170
-rw-r--r--tex/context/fonts/mkiv/bonum-math.lfg19
-rw-r--r--tex/context/fonts/mkiv/cambria-math.lfg9
-rw-r--r--tex/context/fonts/mkiv/dejavu-math.lfg18
-rw-r--r--tex/context/fonts/mkiv/hanbatanglvt.lfg50
-rw-r--r--tex/context/fonts/mkiv/koeielettersot.lfg16
-rw-r--r--tex/context/fonts/mkiv/lm.lfg16
-rw-r--r--tex/context/fonts/mkiv/lucida-opentype-math.lfg6
-rw-r--r--tex/context/fonts/mkiv/minion-math.lfg30
-rw-r--r--tex/context/fonts/mkiv/minion.lfg54
-rw-r--r--tex/context/fonts/mkiv/pagella-math.lfg19
-rw-r--r--tex/context/fonts/mkiv/schola-math.lfg19
-rw-r--r--tex/context/fonts/mkiv/stix-two-math.lfg27
-rw-r--r--tex/context/fonts/mkiv/termes-math.lfg19
-rw-r--r--tex/context/fonts/mkiv/type-imp-asana.mkiv2
-rw-r--r--tex/context/fonts/mkiv/type-imp-cambria.mkiv6
-rw-r--r--tex/context/fonts/mkiv/type-imp-dejavu.mkiv8
-rw-r--r--tex/context/fonts/mkiv/type-imp-ebgaramond.mkiv4
-rw-r--r--tex/context/fonts/mkiv/type-imp-euler.mkiv6
-rw-r--r--tex/context/fonts/mkiv/type-imp-gentium.mkiv2
-rw-r--r--tex/context/fonts/mkiv/type-imp-ipaex.mkiv2
-rw-r--r--tex/context/fonts/mkiv/type-imp-koeielettersot.mkiv179
-rw-r--r--tex/context/fonts/mkiv/type-imp-latinmodern.mkiv14
-rw-r--r--tex/context/fonts/mkiv/type-imp-libertinus.mkiv82
-rw-r--r--tex/context/fonts/mkiv/type-imp-lucida-opentype.mkiv4
-rw-r--r--tex/context/fonts/mkiv/type-imp-minion.mkiv54
-rw-r--r--tex/context/fonts/mkiv/type-imp-source.mkiv66
-rw-r--r--tex/context/fonts/mkiv/type-imp-stix.mkiv64
-rw-r--r--tex/context/fonts/mkiv/type-imp-texgyre.mkiv24
-rw-r--r--tex/context/fonts/mkiv/type-imp-xits.mkiv12
-rw-r--r--tex/context/fonts/mkiv/xits-math.lfg23
-rw-r--r--tex/context/interface/mkii/cont-nl.xml8
-rw-r--r--tex/context/interface/mkii/keys-cs.xml27
-rw-r--r--tex/context/interface/mkii/keys-de.xml27
-rw-r--r--tex/context/interface/mkii/keys-en.xml27
-rw-r--r--tex/context/interface/mkii/keys-fr.xml27
-rw-r--r--tex/context/interface/mkii/keys-it.xml27
-rw-r--r--tex/context/interface/mkii/keys-nl.xml31
-rw-r--r--tex/context/interface/mkii/keys-pe.xml27
-rw-r--r--tex/context/interface/mkii/keys-ro.xml27
-rw-r--r--tex/context/interface/mkiv/context-en.xml45488
-rw-r--r--tex/context/interface/mkiv/i-align.xml3
-rw-r--r--tex/context/interface/mkiv/i-attachment.xml10
-rw-r--r--tex/context/interface/mkiv/i-attribute.xml2
-rw-r--r--tex/context/interface/mkiv/i-background.xml16
-rw-r--r--tex/context/interface/mkiv/i-bar.xml44
-rw-r--r--tex/context/interface/mkiv/i-bleed.xml2
-rw-r--r--tex/context/interface/mkiv/i-block.xml4
-rw-r--r--tex/context/interface/mkiv/i-bookmark.xml2
-rw-r--r--tex/context/interface/mkiv/i-boxes.xml70
-rw-r--r--tex/context/interface/mkiv/i-buffer.xml15
-rw-r--r--tex/context/interface/mkiv/i-button.xml71
-rw-r--r--tex/context/interface/mkiv/i-capitals.xml2
-rw-r--r--tex/context/interface/mkiv/i-catcodes.xml2
-rw-r--r--tex/context/interface/mkiv/i-character.xml2
-rw-r--r--tex/context/interface/mkiv/i-characteralign.xml2
-rw-r--r--tex/context/interface/mkiv/i-chart.xml217
-rw-r--r--tex/context/interface/mkiv/i-chemical.xml2
-rw-r--r--tex/context/interface/mkiv/i-cleaning.xml2
-rw-r--r--tex/context/interface/mkiv/i-collector.xml2
-rw-r--r--tex/context/interface/mkiv/i-color.xml113
-rw-r--r--tex/context/interface/mkiv/i-combination.xml14
-rw-r--r--tex/context/interface/mkiv/i-commandhandler.xml2
-rw-r--r--tex/context/interface/mkiv/i-comment.xml10
-rw-r--r--tex/context/interface/mkiv/i-common-argument.xml59
-rw-r--r--tex/context/interface/mkiv/i-common-assignment.xml2
-rw-r--r--tex/context/interface/mkiv/i-common-definitions.xml3
-rw-r--r--tex/context/interface/mkiv/i-common-instance.xml140
-rw-r--r--tex/context/interface/mkiv/i-common-keyword.xml53
-rw-r--r--tex/context/interface/mkiv/i-common-string.xml2
-rw-r--r--tex/context/interface/mkiv/i-common-value.xml56
-rw-r--r--tex/context/interface/mkiv/i-context.pdfbin820707 -> 812376 bytes
-rw-r--r--tex/context/interface/mkiv/i-conversion.xml23
-rw-r--r--tex/context/interface/mkiv/i-counter.xml2
-rw-r--r--tex/context/interface/mkiv/i-dataset.xml2
-rw-r--r--tex/context/interface/mkiv/i-define.xml2
-rw-r--r--tex/context/interface/mkiv/i-delimitedtext.xml56
-rw-r--r--tex/context/interface/mkiv/i-description.xml8
-rw-r--r--tex/context/interface/mkiv/i-digits.xml2
-rw-r--r--tex/context/interface/mkiv/i-dimension.xml2
-rw-r--r--tex/context/interface/mkiv/i-direction.xml2
-rw-r--r--tex/context/interface/mkiv/i-document.xml32
-rw-r--r--tex/context/interface/mkiv/i-dummy.xml2
-rw-r--r--tex/context/interface/mkiv/i-effect.xml2
-rw-r--r--tex/context/interface/mkiv/i-enumeration.xml10
-rw-r--r--tex/context/interface/mkiv/i-export.xml2
-rw-r--r--tex/context/interface/mkiv/i-field.xml2
-rw-r--r--tex/context/interface/mkiv/i-figure.xml2
-rw-r--r--tex/context/interface/mkiv/i-file.xml24
-rw-r--r--tex/context/interface/mkiv/i-filler.xml94
-rw-r--r--tex/context/interface/mkiv/i-firstline.xml2
-rw-r--r--tex/context/interface/mkiv/i-fittingpage.xml6
-rw-r--r--tex/context/interface/mkiv/i-floats.xml63
-rw-r--r--tex/context/interface/mkiv/i-fontfamily.xml22
-rw-r--r--tex/context/interface/mkiv/i-fonts.xml121
-rw-r--r--tex/context/interface/mkiv/i-form.xml2
-rw-r--r--tex/context/interface/mkiv/i-formula.xml102
-rw-r--r--tex/context/interface/mkiv/i-fraction.xml12
-rw-r--r--tex/context/interface/mkiv/i-framed.xml50
-rw-r--r--tex/context/interface/mkiv/i-graphics.xml3
-rw-r--r--tex/context/interface/mkiv/i-grid.xml12
-rw-r--r--tex/context/interface/mkiv/i-help.xml10
-rw-r--r--tex/context/interface/mkiv/i-highlight.xml4
-rw-r--r--tex/context/interface/mkiv/i-hspace.xml8
-rw-r--r--tex/context/interface/mkiv/i-hyphenation.xml6
-rw-r--r--tex/context/interface/mkiv/i-indent.xml8
-rw-r--r--tex/context/interface/mkiv/i-indentedtext.xml4
-rw-r--r--tex/context/interface/mkiv/i-initial.xml2
-rw-r--r--tex/context/interface/mkiv/i-injector.xml2
-rw-r--r--tex/context/interface/mkiv/i-interaction.xml6
-rw-r--r--tex/context/interface/mkiv/i-interactionmenu.xml136
-rw-r--r--tex/context/interface/mkiv/i-interactionscreen.xml8
-rw-r--r--tex/context/interface/mkiv/i-interface.xml2
-rw-r--r--tex/context/interface/mkiv/i-interlinespace.xml26
-rw-r--r--tex/context/interface/mkiv/i-ipsum.xml81
-rw-r--r--tex/context/interface/mkiv/i-itemgroup.xml202
-rw-r--r--tex/context/interface/mkiv/i-javascript.xml2
-rw-r--r--tex/context/interface/mkiv/i-kerning.xml4
-rw-r--r--tex/context/interface/mkiv/i-label.xml9
-rw-r--r--tex/context/interface/mkiv/i-labeltext.xml839
-rw-r--r--tex/context/interface/mkiv/i-language.xml12
-rw-r--r--tex/context/interface/mkiv/i-layer.xml10
-rw-r--r--tex/context/interface/mkiv/i-layout.xml9
-rw-r--r--tex/context/interface/mkiv/i-linenumber.xml20
-rw-r--r--tex/context/interface/mkiv/i-lines.xml33
-rw-r--r--tex/context/interface/mkiv/i-linetable.xml2
-rw-r--r--tex/context/interface/mkiv/i-list.xml69
-rw-r--r--tex/context/interface/mkiv/i-lohi.xml24
-rw-r--r--tex/context/interface/mkiv/i-lua.xml6
-rw-r--r--tex/context/interface/mkiv/i-makeup.xml68
-rw-r--r--tex/context/interface/mkiv/i-margindata.xml504
-rw-r--r--tex/context/interface/mkiv/i-marker.xml2
-rw-r--r--tex/context/interface/mkiv/i-marking.xml2
-rw-r--r--tex/context/interface/mkiv/i-math.xml45
-rw-r--r--tex/context/interface/mkiv/i-mathalignment.xml39
-rw-r--r--tex/context/interface/mkiv/i-mathcases.xml39
-rw-r--r--tex/context/interface/mkiv/i-mathfence.xml9
-rw-r--r--tex/context/interface/mkiv/i-mathmatrix.xml41
-rw-r--r--tex/context/interface/mkiv/i-mathornament.xml4
-rw-r--r--tex/context/interface/mkiv/i-mathradical.xml4
-rw-r--r--tex/context/interface/mkiv/i-mathstackers.xml18
-rw-r--r--tex/context/interface/mkiv/i-metapost.xml4
-rw-r--r--tex/context/interface/mkiv/i-mixedcolumns.xml27
-rw-r--r--tex/context/interface/mkiv/i-modes.xml2
-rw-r--r--tex/context/interface/mkiv/i-modules.xml6
-rw-r--r--tex/context/interface/mkiv/i-narrow.xml10
-rw-r--r--tex/context/interface/mkiv/i-naturaltable.xml3
-rw-r--r--tex/context/interface/mkiv/i-note.xml236
-rw-r--r--tex/context/interface/mkiv/i-object.xml2
-rw-r--r--tex/context/interface/mkiv/i-offset.xml2
-rw-r--r--tex/context/interface/mkiv/i-ornament.xml14
-rw-r--r--tex/context/interface/mkiv/i-output.xml6
-rw-r--r--tex/context/interface/mkiv/i-overlay.xml2
-rw-r--r--tex/context/interface/mkiv/i-pagebreak.xml2
-rw-r--r--tex/context/interface/mkiv/i-pagegrid.xml4
-rw-r--r--tex/context/interface/mkiv/i-pageinjection.xml4
-rw-r--r--tex/context/interface/mkiv/i-pageselection.xml6
-rw-r--r--tex/context/interface/mkiv/i-pagestate.xml2
-rw-r--r--tex/context/interface/mkiv/i-pairedbox.xml73
-rw-r--r--tex/context/interface/mkiv/i-papersize.xml10
-rw-r--r--tex/context/interface/mkiv/i-paragraph.xml2
-rw-r--r--tex/context/interface/mkiv/i-paragraphs.xml10
-rw-r--r--tex/context/interface/mkiv/i-parallel.xml4
-rw-r--r--tex/context/interface/mkiv/i-pdf.xml2
-rw-r--r--tex/context/interface/mkiv/i-penalty.xml2
-rw-r--r--tex/context/interface/mkiv/i-periods.xml4
-rw-r--r--tex/context/interface/mkiv/i-placement.xml2
-rw-r--r--tex/context/interface/mkiv/i-position.xml8
-rw-r--r--tex/context/interface/mkiv/i-positionbar.xml2
-rw-r--r--tex/context/interface/mkiv/i-processor.xml2
-rw-r--r--tex/context/interface/mkiv/i-profile.xml2
-rw-r--r--tex/context/interface/mkiv/i-publication.xml108
-rw-r--r--tex/context/interface/mkiv/i-random.xml2
-rw-r--r--tex/context/interface/mkiv/i-readme.pdfbin60793 -> 60864 bytes
-rw-r--r--tex/context/interface/mkiv/i-references.xml4
-rw-r--r--tex/context/interface/mkiv/i-regime.xml2
-rw-r--r--tex/context/interface/mkiv/i-register.xml204
-rw-r--r--tex/context/interface/mkiv/i-rotatation.xml2
-rw-r--r--tex/context/interface/mkiv/i-ruby.xml76
-rw-r--r--tex/context/interface/mkiv/i-scite.xml26
-rw-r--r--tex/context/interface/mkiv/i-script.xml43
-rw-r--r--tex/context/interface/mkiv/i-section.xml380
-rw-r--r--tex/context/interface/mkiv/i-sectionblock.xml91
-rw-r--r--tex/context/interface/mkiv/i-setup.xml145
-rw-r--r--tex/context/interface/mkiv/i-setups.xml30
-rw-r--r--tex/context/interface/mkiv/i-shift.xml33
-rw-r--r--tex/context/interface/mkiv/i-sidebar.xml6
-rw-r--r--tex/context/interface/mkiv/i-sort.xml69
-rw-r--r--tex/context/interface/mkiv/i-spreadsheet.xml140
-rw-r--r--tex/context/interface/mkiv/i-startstop.xml4
-rw-r--r--tex/context/interface/mkiv/i-steps.xml412
-rw-r--r--tex/context/interface/mkiv/i-stream.xml2
-rw-r--r--tex/context/interface/mkiv/i-string.xml2
-rw-r--r--tex/context/interface/mkiv/i-symbol.xml6
-rw-r--r--tex/context/interface/mkiv/i-synonym.xml71
-rw-r--r--tex/context/interface/mkiv/i-system.xml89
-rw-r--r--tex/context/interface/mkiv/i-systemlog.xml2
-rw-r--r--tex/context/interface/mkiv/i-table.xml29
-rw-r--r--tex/context/interface/mkiv/i-tabulation.xml47
-rw-r--r--tex/context/interface/mkiv/i-tagging.xml7
-rw-r--r--tex/context/interface/mkiv/i-textbackground.xml6
-rw-r--r--tex/context/interface/mkiv/i-tolerance.xml2
-rw-r--r--tex/context/interface/mkiv/i-tooltip.xml58
-rw-r--r--tex/context/interface/mkiv/i-tracker.xml2
-rw-r--r--tex/context/interface/mkiv/i-translate.xml26
-rw-r--r--tex/context/interface/mkiv/i-twopassdata.xml2
-rw-r--r--tex/context/interface/mkiv/i-typography.xml2
-rw-r--r--tex/context/interface/mkiv/i-unit.xml27
-rw-r--r--tex/context/interface/mkiv/i-variables.xml19
-rw-r--r--tex/context/interface/mkiv/i-verbatim.xml234
-rw-r--r--tex/context/interface/mkiv/i-version.xml2
-rw-r--r--tex/context/interface/mkiv/i-viewerlayer.xml4
-rw-r--r--tex/context/interface/mkiv/i-visual.xml154
-rw-r--r--tex/context/interface/mkiv/i-visualizer.xml2
-rw-r--r--tex/context/interface/mkiv/i-vspace.xml1
-rw-r--r--tex/context/interface/mkiv/i-whitespace.xml2
-rw-r--r--tex/context/interface/mkiv/i-xtable.xml26
-rw-r--r--tex/context/modules/common/s-abr-01.tex4
-rw-r--r--tex/context/modules/common/s-pre-00.tex2
-rw-r--r--tex/context/modules/common/s-pre-12.tex92
-rw-r--r--tex/context/modules/common/s-pre-16.tex80
-rw-r--r--tex/context/modules/common/s-pre-23.tex14
-rw-r--r--tex/context/modules/common/s-pre-50.tex6
-rw-r--r--tex/context/modules/mkii/m-quest.mkii232
-rw-r--r--tex/context/modules/mkii/m-streams.mkii446
-rw-r--r--tex/context/modules/mkii/s-mag-01.mkii438
-rw-r--r--tex/context/modules/mkii/s-pre-01.mkii404
-rw-r--r--tex/context/modules/mkii/s-pre-02.mkii381
-rw-r--r--tex/context/modules/mkii/s-pre-03.mkii257
-rw-r--r--tex/context/modules/mkii/s-pre-04.mkii377
-rw-r--r--tex/context/modules/mkii/s-pre-05.mkii240
-rw-r--r--tex/context/modules/mkii/s-pre-09.mkii380
-rw-r--r--tex/context/modules/mkii/s-pre-10.mkii308
-rw-r--r--tex/context/modules/mkii/s-pre-11.mkii220
-rw-r--r--tex/context/modules/mkii/s-pre-14.mkii263
-rw-r--r--tex/context/modules/mkii/s-pre-15.mkii186
-rw-r--r--tex/context/modules/mkii/s-pre-19.mkii347
-rw-r--r--tex/context/modules/mkii/s-pre-61.mkii275
-rw-r--r--tex/context/modules/mkii/s-pre-62.mkii224
-rw-r--r--tex/context/modules/mkii/s-pre-63.mkii73
-rw-r--r--tex/context/modules/mkii/s-pre-64.mkii208
-rw-r--r--tex/context/modules/mkii/s-pre-68.mkii152
-rw-r--r--tex/context/modules/mkiv/m-asymptote.lua48
-rw-r--r--tex/context/modules/mkiv/m-asymptote.mkiv143
-rw-r--r--tex/context/modules/mkiv/m-chart.lua196
-rw-r--r--tex/context/modules/mkiv/m-chart.mkvi66
-rw-r--r--tex/context/modules/mkiv/m-educat.mkiv10
-rw-r--r--tex/context/modules/mkiv/m-graph.mkiv7
-rw-r--r--tex/context/modules/mkiv/m-ipsum.mkiv1
-rw-r--r--tex/context/modules/mkiv/m-matrix.mkiv250
-rw-r--r--tex/context/modules/mkiv/m-punk.mkiv7
-rw-r--r--tex/context/modules/mkiv/m-scite.mkiv37
-rw-r--r--tex/context/modules/mkiv/m-steps.lua530
-rw-r--r--tex/context/modules/mkiv/m-steps.mkvi528
-rw-r--r--tex/context/modules/mkiv/m-visual.mkiv102
-rw-r--r--tex/context/modules/mkiv/s-characters-properties.lua83
-rw-r--r--tex/context/modules/mkiv/s-characters-properties.mkiv30
-rw-r--r--tex/context/modules/mkiv/s-domotica-settings.lua165
-rw-r--r--tex/context/modules/mkiv/s-domotica-settings.mkiv26
-rw-r--r--tex/context/modules/mkiv/s-fonts-coverage.mkiv3
-rw-r--r--tex/context/modules/mkiv/s-fonts-emoji.mkiv331
-rw-r--r--tex/context/modules/mkiv/s-fonts-features.lua77
-rw-r--r--tex/context/modules/mkiv/s-fonts-features.mkiv7
-rw-r--r--tex/context/modules/mkiv/s-fonts-missing.lua3
-rw-r--r--tex/context/modules/mkiv/s-fonts-shapes.lua28
-rw-r--r--tex/context/modules/mkiv/s-fonts-shapes.mkiv9
-rw-r--r--tex/context/modules/mkiv/s-fonts-variable.lua313
-rw-r--r--tex/context/modules/mkiv/s-fonts-variable.mkiv111
-rw-r--r--tex/context/modules/mkiv/s-inf-01.mkvi21
-rw-r--r--tex/context/modules/mkiv/s-inf-03.mkiv22
-rw-r--r--tex/context/modules/mkiv/s-languages-frequencies.lua4
-rw-r--r--tex/context/modules/mkiv/s-languages-hyphenation.lua10
-rw-r--r--tex/context/modules/mkiv/s-mag-01.mkiv505
-rw-r--r--tex/context/modules/mkiv/s-math-characters.lua6
-rw-r--r--tex/context/modules/mkiv/s-math-characters.mkiv6
-rw-r--r--tex/context/modules/mkiv/s-math-extensibles.mkiv6
-rw-r--r--tex/context/modules/mkiv/s-math-repertoire.mkiv17
-rw-r--r--tex/context/modules/mkiv/s-pre-17.mkiv4
-rw-r--r--tex/context/modules/mkiv/s-present-balls.mkiv194
-rw-r--r--tex/context/modules/mkiv/s-present-banner.mkiv132
-rw-r--r--tex/context/modules/mkiv/s-present-bars.mkiv128
-rw-r--r--tex/context/modules/mkiv/s-present-colorful.mkiv384
-rw-r--r--tex/context/modules/mkiv/s-present-common.mkiv43
-rw-r--r--tex/context/modules/mkiv/s-present-four.mkiv188
-rw-r--r--tex/context/modules/mkiv/s-present-funny.mkiv208
-rw-r--r--tex/context/modules/mkiv/s-present-fuzzy.mkiv225
-rw-r--r--tex/context/modules/mkiv/s-present-green.mkiv349
-rw-r--r--tex/context/modules/mkiv/s-present-grow.mkiv171
-rw-r--r--tex/context/modules/mkiv/s-present-organic.mkiv335
-rw-r--r--tex/context/modules/mkiv/s-present-original.mkiv397
-rw-r--r--tex/context/modules/mkiv/s-present-ovals.mkiv94
-rw-r--r--tex/context/modules/mkiv/s-present-overlap.mkiv233
-rw-r--r--tex/context/modules/mkiv/s-present-phone.mkiv108
-rw-r--r--tex/context/modules/mkiv/s-present-punk.mkiv158
-rw-r--r--tex/context/modules/mkiv/s-present-random.lua66
-rw-r--r--tex/context/modules/mkiv/s-present-random.mkiv215
-rw-r--r--tex/context/modules/mkiv/s-present-shaded.mkiv161
-rw-r--r--tex/context/modules/mkiv/s-present-simple.mkiv151
-rw-r--r--tex/context/modules/mkiv/s-present-slanted.mkiv206
-rw-r--r--tex/context/modules/mkiv/s-present-split.mkiv191
-rw-r--r--tex/context/modules/mkiv/s-present-stack.mkiv194
-rw-r--r--tex/context/modules/mkiv/s-present-stepper.mkiv227
-rw-r--r--tex/context/modules/mkiv/s-present-stepwise.mkiv216
-rw-r--r--tex/context/modules/mkiv/s-present-tiles.mkiv49
-rw-r--r--tex/context/modules/mkiv/s-present-windows.mkiv350
-rw-r--r--tex/context/modules/mkiv/s-present-wobbling.mkiv339
-rw-r--r--tex/context/modules/mkiv/s-syntax.mkiv3
-rw-r--r--tex/context/modules/mkiv/s-xml-analyzers.lua189
-rw-r--r--tex/context/modules/mkiv/s-xml-analyzers.mkiv6
-rw-r--r--tex/context/modules/mkiv/x-asciimath.lua16
-rw-r--r--tex/context/modules/mkiv/x-asciimath.mkiv122
-rw-r--r--tex/context/modules/mkiv/x-html.mkiv4
-rw-r--r--tex/context/modules/mkiv/x-math-svg.mkvi65
-rw-r--r--tex/context/modules/mkiv/x-mathml.lua1
-rw-r--r--tex/context/modules/mkiv/x-mathml.mkiv67
-rw-r--r--tex/context/modules/mkiv/x-setups-basics.mkiv279
-rw-r--r--tex/context/modules/mkiv/x-setups-overview.mkiv2
-rw-r--r--tex/context/modules/mkiv/x-setups-proofing.mkiv5
-rw-r--r--tex/context/modules/mkiv/x-steps.mkiv22
-rw-r--r--tex/context/sample/common/carrol.tex5
-rw-r--r--tex/context/sample/common/douglas.tex2
-rw-r--r--tex/context/sample/common/khatt-en.tex4
-rw-r--r--tex/context/sample/common/knuth.tex2
-rw-r--r--tex/context/sample/common/samples.tex2
-rw-r--r--tex/context/sample/common/sapolsky.tex11
-rw-r--r--tex/context/test/mkiv/pdf-a2a.mkiv40
-rw-r--r--tex/context/test/mkiv/pdf-a3a.mkiv43
-rw-r--r--tex/generic/context/luatex/luatex-basics-gen.lua102
-rw-r--r--tex/generic/context/luatex/luatex-basics-nod.lua168
-rw-r--r--tex/generic/context/luatex/luatex-core.lua210
-rw-r--r--tex/generic/context/luatex/luatex-core.tex30
-rw-r--r--tex/generic/context/luatex/luatex-fonts-demo-vf-1.lua8
-rw-r--r--tex/generic/context/luatex/luatex-fonts-demo-vf-4.lua7
-rw-r--r--tex/generic/context/luatex/luatex-fonts-enc.lua59
-rw-r--r--tex/generic/context/luatex/luatex-fonts-ext.lua59
-rw-r--r--tex/generic/context/luatex/luatex-fonts-lig.lua2067
-rw-r--r--tex/generic/context/luatex/luatex-fonts-merged.lua14531
-rw-r--r--tex/generic/context/luatex/luatex-fonts.lua10
-rw-r--r--tex/generic/context/luatex/luatex-math.tex471
-rw-r--r--tex/generic/context/luatex/luatex-mplib.lua22
-rw-r--r--tex/generic/context/luatex/luatex-pdf.tex2
-rw-r--r--tex/generic/context/luatex/luatex-plain.tex8
-rw-r--r--tex/generic/context/luatex/luatex-swiglib-test.lua750
-rw-r--r--tex/generic/context/luatex/luatex-swiglib.lua5
-rw-r--r--tex/generic/context/luatex/luatex-test.tex12
-rw-r--r--web2c/contextcnf.lua42
-rw-r--r--web2c/readme.txt5
1521 files changed, 431339 insertions, 44373 deletions
diff --git a/context/data/npp/context/notepad++.ini b/context/data/npp/context/notepad++.ini
new file mode 100644
index 000000000..50b02e294
--- /dev/null
+++ b/context/data/npp/context/notepad++.ini
@@ -0,0 +1,57 @@
+# You can use the lexers that come with context and athat are meant for scite also for notepad++. On
+# my machine I always install such a portable program in c:\data\system\notepadplusplus (avoiding
+# funny characters).
+#
+# (1) Download a version of scintillua++ that matches the current version if notepad++ and unzip
+# the archive in a temporary place.
+#
+# c:\data\notepadplusplus\*
+#
+# (2) Copy these two dlls::
+#
+# c:\data\notepadplusplus\plugins\Scintillua++.dll
+# c:\data\notepadplusplus\plugins\Config\Scintillua++\LexLPeg.dll
+#
+# (3) Copy this file to:
+#
+# c:\data\notepadplusplus\plugins\Config\Scintillua++.ini
+#
+# (4) Copy the files from the texmf/context/data/scite/context so that you get:
+#
+# c:\data\notepadplusplus\plugins\Config\data\scite-context-data-*.lua
+# c:\data\notepadplusplus\plugins\Config\themes\scite-context-theme.lua
+# c:\data\notepadplusplus\plugins\Config\themes\lexer.lua
+# c:\data\notepadplusplus\plugins\Config\themes\scite-context-lexer.lua
+# c:\data\notepadplusplus\plugins\Config\themes\scite-context-lexer-*.lua
+#
+# Now you should get the standard context lexing for the file types mentioned below. I might add a few
+# more (consistent) lexers. Beware: we don't use the lexer.lua file that ships with scintillua++. Among
+# the reasons is that when I first played with this variant of lexing the scintillua implementation was
+# quite slow, so I redid the code with some agressive optimization (in context a good test file is the
+# character database file. There is still room for improvement. One problem with the lua lexer is that
+# there is not much communication possible so that getting the state involves guesswork.
+#
+# Also, we already had lpeg based lexing in context so it made more sense to find some common ground so
+# that I could share code (a bit of a hybrid approach). There are some extra features like showing
+# invisible spaces and most noticeably spell checking (for more info see the manual).
+#
+# The lexer assumes that you have the dejavu mono fonts installed. These cover a wide repertoire of
+# characters. Some features offered for scite won't be available because no additional menu items etc
+# are defined.
+#
+# In due time some more configuration files will be added for notepad++. Maybe some more can be set up
+# below.
+
+theme=scite-context-theme
+override=true
+
+scite-context-lexer-tex=*.tex;*.mkii;*.mkiv;*.mkvi;*.mkix;*.mkxi
+scite-context-lexer-xml=*.xml;*.xsl;*.xsd;*.fo;*.exa;*.rlb;*.rlg;*.rlv;*.rng;*.xfdf;*.xslt;*.dtd;*.lmx;*.htm;*.html;*.xhtml;*.ctx;*.export;*.svg;*.xul
+scite-context-lexer-mps=*.mp;*.mpx
+scite-context-lexer-lua=*.lua;*.luc;*.cld;*.tuc;*.luj;*.lum;*.tma;*.lfg;*.luv;*.lui
+scite-context-lexer-txt=*.txt
+scite-context-lexer-pdf=*.pdf
+scite-context-lexer-web=*.w;*.ww
+scite-context-lexer-cpp=*.h;*.c;*.hh;*.cc;*.hpp;*.cpp;*.hxx;*.cxx
+scite-context-lexer-bibtex=*.bib
+scite-context-lexer-sql=*.sql
diff --git a/context/data/scite/context/lexers/data/scite-context-data-context.lua b/context/data/scite/context/lexers/data/scite-context-data-context.lua
index bf8d8662c..b9a90c262 100644
--- a/context/data/scite/context/lexers/data/scite-context-data-context.lua
+++ b/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", "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", "presetdocument", "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", "emspace", "charspace", "nbsp", "crlf", "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" },
+ ["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", "maxcount", "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", "unexpandeddocumentvariable", "setupdocument", "presetdocument", "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", "parfillleftskip", "parfillrightskip" },
+ ["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", "privatescratchcounter", "scratchdimen", "globalscratchdimen", "privatescratchdimen", "scratchskip", "globalscratchskip", "privatescratchskip", "scratchmuskip", "globalscratchmuskip", "privatescratchmuskip", "scratchtoks", "globalscratchtoks", "privatescratchtoks", "scratchbox", "globalscratchbox", "privatescratchbox", "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", "emspace", "charspace", "nbsp", "crlf", "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", "lastlinewidth", "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", "compoundhyphenpenalty" },
} \ No newline at end of file
diff --git a/context/data/scite/context/lexers/data/scite-context-data-interfaces.lua b/context/data/scite/context/lexers/data/scite-context-data-interfaces.lua
index 43076f03e..5f4b667e2 100644
--- a/context/data/scite/context/lexers/data/scite-context-data-interfaces.lua
+++ b/context/data/scite/context/lexers/data/scite-context-data-interfaces.lua
@@ -1,10 +1,10 @@
return {
- ["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", "Lua", "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", "mathitalic", "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", "presetdocument", "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", "startsubjectlevel", "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", "stopsubjectlevel", "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", "useblankparameter", "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", "Lua", "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", "mathitalic", "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", "presetdocument", "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", "startsubjectlevel", "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", "stopsubjectlevel", "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", "useblankparameter", "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", "Lua", "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", "mathitalic", "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", "presetdocument", "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", "startsubjectlevel", "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", "stopsubjectlevel", "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", "useblankparameter", "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", "Lua", "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", "demarresubjectlevel", "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", "mathitalic", "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", "presetdocument", "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", "stoppesubjectlevel", "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", "useblankparameter", "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", "Lua", "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", "iniziasubjectlevel", "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", "mathitalic", "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", "presetdocument", "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", "terminasubjectlevel", "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", "useblankparameter", "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", "Lua", "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", "mathitalic", "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", "presetdocument", "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", "startsubjectlevel", "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", "stopsubjectlevel", "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", "useblankparameter", "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", "Lua", "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", "mathitalic", "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", "presetdocument", "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", "useblankparameter", "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", "شروعsubjectlevel", "شروع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", "پایانsubjectlevel", "پایان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", "Lua", "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", "mathitalic", "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", "presetdocument", "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", "startsubjectlevel", "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", "stopsubjectlevel", "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", "useblankparameter", "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" },
+ ["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", "Lua", "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", "MPwhd", "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", "TEXpage", "TaBlE", "TeX", "TheNormalizedFontSize", "TransparencyHack", "VSEDNIDEN", "VerboseNumber", "WidthSpanningText", "XETEX", "XeTeX", "Znak", "Znaky", "abjadnaivenumerals", "abjadnodotnumerals", "abjadnumerals", "activatespacehandler", "adaptcollector", "adaptfontfeature", "adaptpapersize", "addfeature", "addtoJSpreamble", "addtocommalist", "addvalue", "aftersplitstring", "aftertestandsplitstring", "aktualnicislonadpisu", "aktualnidatum", "alignmentcharacter", "allinputpaths", "alphabeticnumerals", "alwayscitation", "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", "aside", "assignalfadimension", "assigndimen", "assigndimension", "assignifempty", "assigntranslation", "assignvalue", "assignwidth", "assumelongusagecs", "astype", "attachment", "autocap", "autodirhbox", "autodirvbox", "autodirvtop", "autoinsertnextspace", "automathematics", "autosetups", "availablehsize", "averagecharwidth", "backgroundimage", "backgroundimagefill", "backgroundline", "barevnalista", "barva", "basegrid", "baselineleftbox", "baselinemiddlebox", "baselinerightbox", "bbox", "beforesplitstring", "beforetestandsplitstring", "big", "bigbodyfont", "bigg", "bigger", "biggl", "biggm", "biggr", "bigl", "bigm", "bigr", "bigskip", "binom", "bitmapimage", "blap", "bleed", "bleedheight", "bleedwidth", "blockligatures", "blockquote", "bodyfontenvironmentlist", "bodyfontsize", "bold", "boldface", "bolditalic", "boldslanted", "booleanmodevalue", "bottombox", "bottomleftbox", "bottomrightbox", "boxcursor", "boxmarker", "boxofsize", "boxreference", "bpos", "bthiddencitation", "btxabbreviatedjournal", "btxaddjournal", "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", "btxlistcitation", "btxloadjournalist", "btxoneorrange", "btxremapauthor", "btxsavejournalist", "btxsetup", "btxsingularorplural", "btxsingularplural", "btxtextcitation", "calligraphic", "camel", "catcodetablename", "cbox", "centerbox", "centeredbox", "centerednextbox", "cernalinka", "cernelinky", "cfrac", "chardescription", "charwidthlanguage", "checkcharacteralign", "checkedchar", "checkedfiller", "checkedstrippedcsname", "checkinjector", "checknextindentation", "checknextinjector", "checkpage", "checkparameters", "checkpreviousinjector", "checksoundtrack", "checktwopassdata", "checkvariables", "chem", "chemical", "chemicalbottext", "chemicalmidtext", "chemicalsymbol", "chemicaltext", "chemicaltoptext", "chineseallnumerals", "chinesecapnumerals", "chinesenumerals", "cisla", "cislonadpisu", "cislorovnice", "cislostrany", "citace", "citation", "cite", "citovat", "clap", "classfont", "cldcommand", "cldcontext", "cldloadfile", "cldprocessfile", "cleftarrow", "collect", "collectedtext", "collectexpanded", "colorcomponents", "colored", "coloronly", "columnbreak", "combinepages", "commalistelement", "commalistsentence", "commalistsize", "comment", "comparedimension", "comparedimensioneps", "completebtxrendering", "completelist", "completelistofpublications", "completelistofsorts", "completelistofsynonyms", "completepagenumber", "completeregister", "complexorsimple", "complexorsimpleempty", "composedcollector", "composedlayer", "compresult", "constantdimen", "constantdimenargument", "constantemptyargument", "constantnumber", "constantnumberargument", "contentreference", "continuednumber", "continueifinputfile", "convertargument", "convertcommand", "convertedcounter", "converteddimen", "convertedsubcounter", "convertmonth", "convertvalue", "convertvboxtohbox", "copypages", "copyparameters", "copyposition", "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", "datasetvariable", "datum", "dayoftheweek", "dayspermonth", "dbinom", "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", "definecomplexorsimpleempty", "defineconversionset", "definecounter", "definedataset", "definedelimitedtext", "definedfont", "defineeffect", "defineexpandable", "defineexternalfigure", "definefallbackfamily", "definefieldbody", "definefieldbodyset", "definefieldcategory", "definefileconstant", "definefilefallback", "definefilesynonym", "definefiller", "definefirstline", "definefittingpage", "definefontalternative", "definefontfallback", "definefontfamily", "definefontfamilypreset", "definefontfeature", "definefontfile", "definefontsize", "definefontsolution", "defineformula", "defineformulaalternative", "defineformulaframed", "defineframedcontent", "definefrozenfont", "defineglobalcolor", "definegraphictypesynonym", "definegridsnapping", "defineheadalternative", "definehelp", "definehigh", "definehighlight", "definehspace", "definehypenationfeatures", "defineindentedtext", "defineindenting", "defineinitial", "defineinsertion", "defineinteraction", "defineinteractionbar", "defineinterfaceconstant", "defineinterfaceelement", "defineinterfacevariable", "defineinterlinespace", "defineintermediatecolor", "defineitemgroup", "defineitems", "definelabelclass", "definelayer", "definelayerpreset", "definelayout", "definelinefiller", "definelinenote", "definelinenumbering", "definelines", "definelistalternative", "definelistextra", "definelow", "definelowhigh", "definelowmidhigh", "definemarginblock", "definemargindata", "definemarker", "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", "definenamespace", "definenarrower", "definenote", "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", "definujbarvu", "definujblok", "definujbloksekce", "definujbuffer", "definujfont", "definujformatodkazu", "definujhbox", "definujinterakcnimenu", "definujkombinovanyseznam", "definujkonverzi", "definujnadpis", "definujobrazeksymbol", "definujodkaz", "definujodstavce", "definujopis", "definujoramovani", "definujoramovanytext", "definujpaletu", "definujplvouciobjekt", "definujpodpole", "definujpole", "definujpopis", "definujpopisek", "definujprekryv", "definujprofil", "definujprogram", "definujprostredizakladnihofontu", "definujrejstrik", "definujsablonutabulky", "definujsekci", "definujseznam", "definujskupinubarev", "definujstartstop", "definujstyl", "definujstylfontu", "definujsymbol", "definujsynonumumfontu", "definujsynonyma", "definujtabelaci", "definujtext", "definujtrideni", "definujupravu", "definujvelikostpapiru", "definujvycet", "definujzakladnifont", "definujzasobnikpoli", "definujznaceni", "delimited", "delimitedtext", "delkaseznamu", "depthofstring", "depthonlybox", "depthspanningtext", "determinenoflines", "devanagarinumerals", "dfrac", "digits", "dimensiontocount", "directcolor", "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", "dorepeatwithcommand", "doreplacefeature", "doresetandafffeature", "doresetattribute", "dorotatebox", "dosetattribute", "dosetleftskipadaption", "dosetrightskipadaption", "dosetupcheckedinterlinespace", "doseventupleargument", "doseventupleempty", "dosingleargument", "dosingleempty", "dosinglegroupempty", "dosixtupleargument", "dosixtupleempty", "dostepwiserecurse", "dosubtractfeature", "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", "enskip", "enspace", "env", "envvar", "eoverbarfill", "eoverbracefill", "eoverbracketfill", "eoverparentfill", "epos", "equaldigits", "erightarrowfill", "erightharpoondownfill", "erightharpoonupfill", "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", "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", "flushboxregister", "flushcollector", "flushlayer", "flushlocalfloats", "flushnextbox", "flushnotes", "flushoutputstream", "flushshapebox", "flushtextflow", "flushtokens", "flushtoks", "fontalternative", "fontbody", "fontchar", "fontcharbyindex", "fontclass", "fontclassname", "fontface", "fontfeaturelist", "fontsize", "fontstyle", "footnotetext", "forcecharacterstripping", "forcelocalfloats", "forgeteverypar", "forgetparameters", "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", "getprivatechar", "getprivateslot", "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", "grabbufferdata", "grabbufferdatadirect", "grabuntil", "graf", "grayvalue", "greedysplitstring", "greeknumerals", "groupedcommand", "gsetboxllx", "gsetboxlly", "gujaratinumerals", "gurmurkhinumerals", "hairspace", "halfwaybox", "handletokens", "handwritten", "hash", "hboxofvbox", "hboxreference", "hdofstring", "headhbox", "headnumbercontent", "headnumberdistance", "headnumberwidth", "headreferenceattributes", "headsetupspacing", "headtextcontent", "headtextdistance", "headtextwidth", "headvbox", "headwidth", "heightanddepthofstring", "heightofstring", "heightspanningtext", "helptext", "hglue", "hiddenbar", "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", "incrementcounter", "incrementedcounter", "incrementpagenumber", "incrementsubpagenumber", "incrementvalue", "indentation", "infofont", "infofontbold", "inheritparameter", "inhibitblank", "initializeboxstack", "inlinebuffer", "inlinedbox", "inlinemath", "inlinemathematics", "inlinemessage", "inlineordisplaymath", "inlinerange", "innerflushshapebox", "input", "inputfilebarename", "inputfilename", "inputfilerealsuffix", "inputfilesuffix", "inputgivenfile", "insertpages", "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", "intermezzo", "intertext", "invokepageheandler", "istltdir", "istrtdir", "italic", "italicbold", "italiccorrection", "itemtag", "jazyk", "jdidolu", "jdina", "jdinabox", "jdinastranu", "jobfilename", "jobfilesuffix", "kap", "kapitola", "keeplinestogether", "keepunwantedspaces", "kerncharacters", "klonujpole", "komentar", "komponenta", "konvertujcislo", "kopirujpole", "koreancirclenumerals", "koreannumerals", "koreannumeralsc", "koreannumeralsp", "koreanparentnumerals", "korekcebilehomista", "languageCharacters", "languagecharacters", "languagecharwidth", "lastcounter", "lastcountervalue", "lastdigit", "lastlinewidth", "lastnaturalboxdp", "lastnaturalboxht", "lastnaturalboxwd", "lastpredefinedsymbol", "lastrealpage", "lastrealpagenumber", "lastsubcountervalue", "lastsubpage", "lastsubpagenumber", "lasttwodigits", "lastuserpage", "lastuserpagenumber", "lateluacode", "layeredtext", "layerheight", "layerwidth", "lazysavetaggedtwopassdata", "lazysavetwopassdata", "lbox", "left", "leftbottombox", "leftbox", "lefthbox", "leftorrighthbox", "leftorrightvbox", "leftorrightvtop", "leftskipadaption", "leftsubguillemot", "lefttopbox", "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", "limtatefirstline", "linespanningtext", "listcitation", "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", "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", "margindata", "markcontent", "markinjector", "mat", "matematika", "math", "mathbf", "mathbi", "mathblackboard", "mathbs", "mathcommand", "mathdefault", "mathfraktur", "mathfunction", "mathit", "mathitalic", "mathop", "mathrm", "mathscript", "mathsl", "mathss", "mathtext", "mathtextbf", "mathtextbi", "mathtextbs", "mathtextit", "mathtextsl", "mathtexttf", "mathtf", "mathtriplet", "mathtt", "mathupright", "mathword", "mathwordbf", "mathwordbi", "mathwordbs", "mathwordit", "mathwordsl", "mathwordtf", "mazaramovani", "mbox", "mcframed", "md", "measure", "measured", "medskip", "medspace", "mequal", "meritko", "mesic", "message", "metaTeX", "mezera", "mfence", "mfunction", "mfunctionlabeltext", "mhbox", "mhookleftarrow", "mhookrightarrow", "middle", "middlebox", "midhbox", "minimalhbox", "mixedcaps", "mkvibuffer", "mleftarrow", "mleftharpoondown", "mleftharpoonup", "mleftrightarrow", "mleftrightharpoons", "mmapsto", "moduleparameter", "molecule", "mono", "monobold", "mononormal", "monthlong", "monthshort", "mp", "mprandomnumber", "mrel", "mrightarrow", "mrightharpoondown", "mrightharpoonup", "mrightleftharpoons", "mrightoverleftarrow", "mrizka", "mtext", "mtriplerel", "mtwoheadleftarrow", "mtwoheadrightarrow", "namedheadnumber", "namedstructureheadlocation", "namedstructureuservariable", "namedstructurevariable", "namedtaggedlabeltexts", "nastavbarvu", "nastavbarvy", "nastavbilamista", "nastavblok", "nastavbloksekce", "nastavbuffer", "nastavcernelinky", "nastavcislonadpisu", "nastavcislostrany", "nastavcislovaniodstavcu", "nastavcislovaniradku", "nastavcislovanistran", "nastavcitaci", "nastavdeleniplvoucichobjektu", "nastavdelitko", "nastavdolnitexty", "nastavhorejsek", "nastavhornitexty", "nastavinterakci", "nastavinterakcnilistu", "nastavinterakcnimenu", "nastavinterakcniobrazovku", "nastavjazyk", "nastavkapitalky", "nastavkombinovanyseznam", "nastavkomentar", "nastavkomentarstrany", "nastavmarginalnilinky", "nastavmeziradkovoumezeru", "nastavnadpis", "nastavnadpisy", "nastavodkazovani", "nastavodsazovani", "nastavodstavce", "nastavopis", "nastavoramovani", "nastavorez", "nastavotoceni", "nastavpaletu", "nastavplvouciobjekt", "nastavpodcislostrany", "nastavpole", "nastavpolozky", "nastavpopisek", "nastavpozadi", "nastavprechodstrany", "nastavpreskok", "nastavprogramy", "nastavradkovani", "nastavradky", "nastavrejstrik", "nastavsadusymbolu", "nastavseznam", "nastavsirkucary", "nastavsloupce", "nastavspodek", "nastavsynonyma", "nastavtabelaci", "nastavtabulky", "nastavtenkelinky", "nastavtext", "nastavtextovelinky", "nastavtexttexty", "nastavtextyupati", "nastavtextyzahlavi", "nastavtoleranci", "nastavtrideni", "nastavtype", "nastavumisteniprotejsku", "nastavumistovani", "nastavupati", "nastavupravu", "nastavurl", "nastavusporadani", "nastavvelikostpapiru", "nastavvsechnapole", "nastavvycty", "nastavvyplnovelinky", "nastavvyplnoveradky", "nastavvzhled", "nastavzahlavi", "nastavzakladnifont", "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", "nivy", "nizky", "nobar", "nocitation", "nocite", "nodetostring", "noffigurepages", "noflines", "noflocalfloats", "noindentation", "noitem", "nokap", "nonfrenchspacing", "nonmathematics", "normal", "normalboldface", "normalframedwithsettings", "normalizebodyfontsize", "normalizedfontsize", "normalizefontdepth", "normalizefontheight", "normalizefontline", "normalizefontwidth", "normalizetextdepth", "normalizetextheight", "normalizetextline", "normalizetextwidth", "normaltypeface", "notesymbol", "ntimes", "numberofpoints", "obeydepth", "objectdepth", "objectheight", "objectmargin", "objectwidth", "obox", "obrazek", "obrazovka", "odkaz", "odkaznastranu", "odkaznatext", "odkazujici", "offset", "offsetbox", "onedigitrounding", "opis", "opissoubor", "oramovani", "oramovanytext", "ordinaldaynumber", "ordinalstr", "oref", "orez", "ornamenttext", "otocit", "outputfilename", "outputstreambox", "outputstreamcopy", "outputstreamunvbox", "outputstreamunvcopy", "over", "overbar", "overbars", "overbartext", "overbarunderbar", "overbrace", "overbracetext", "overbraceunderbrace", "overbracket", "overbrackettext", "overbracketunderbracket", "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", "pagestaterealpage", "paletsize", "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", "placeattachments", "placebtxrendering", "placecitation", "placecomments", "placecurrentformulanumber", "placedbox", "placefloat", "placefloatwithsetups", "placeframed", "placeheadnumber", "placeheadtext", "placehelp", "placeinitial", "placelayer", "placelayeredtext", "placelistofpublications", "placelistofsorts", "placelistofsynonyms", "placelocalnotes", "placement", "placenamedfloat", "placenamedformula", "placenotes", "placepagenumber", "placepairedbox", "placeparallel", "placerawlist", "placerenderingwindow", "plnezneni", "podpodpodpodsekce", "podpodpodpodtema", "podpodpodsekce", "podpodpodtema", "podpodsekce", "podpodtema", "podsekce", "podtema", "pole", "polozka", "polozky", "popattribute", "popmacro", "popmode", "popsystemmode", "porovnejpaletu", "porovnejskupinubarev", "positionoverlay", "positionregionoverlay", "postponenotes", "pozadi", "pozice", "poznamka", "predefinedfont", "predefinefont", "predefinesymbol", "pref", "prefixedpagenumber", "prelozit", "prependetoks", "prependgvalue", "prependtocommalist", "prependtoks", "prependtoksonce", "prependvalue", "prepninazakladnifont", "presetdocument", "presetfieldsymbols", "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", "profiledbox", "profilegivenbox", "program", "projekt", "prostredi", "pseudoMixedCapped", "pseudoSmallCapped", "pseudoSmallcapped", "pseudosmallcapped", "purenumber", "pushattribute", "pushbutton", "pushmacro", "pushmode", "pushoutputstream", "pushsystemmode", "qquad", "quad", "quads", "quitcommalist", "quitprevcommalist", "quittypescriptscanning", "raisebox", "randomizetext", "randomnumber", "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", "replaceincommalist", "replaceword", "rescan", "rescanwithsetup", "resetMPdrawing", "resetMPenvironment", "resetMPinstance", "resetallattributes", "resetandaddfeature", "resetbar", "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", "resolvedglyphdirect", "resolvedglyphstyled", "restartcounter", "restorebox", "restorecatcodes", "restorecounter", "restorecurrentattributes", "restoreendofline", "restoreglobalbodyfont", "reusableMPgraphic", "reuseMPgraphic", "reuserandomseed", "revivefeature", "rfence", "rhbox", "right", "rightbottombox", "rightbox", "righthbox", "rightorleftpageaction", "rightskipadaption", "rightsubguillemot", "righttolefthbox", "righttoleftvbox", "righttoleftvtop", "righttopbox", "rimskecislice", "rlap", "robustaddtocommalist", "robustdoifelseinset", "robustdoifinsetelse", "robustpretocommalist", "rollbutton", "roman", "rozdelplvouciobjekt", "roztazene", "rtop", "ruledhbox", "ruledhpack", "ruledmbox", "ruledtopv", "ruledtpack", "ruledvbox", "ruledvpack", "ruledvtop", "runMPbuffer", "runninghbox", "safechar", "sans", "sansbold", "sansnormal", "sansserif", "savebox", "savebtxdataset", "savebuffer", "savecounter", "savecurrentattributes", "savenormalmeaning", "savetaggedtwopassdata", "savetwopassdata", "sbox", "schovejbloky", "sd", "secondoffivearguments", "secondoffourarguments", "secondofsixarguments", "secondofthreearguments", "secondofthreeunexpanded", "secondoftwoarguments", "secondoftwounexpanded", "sedabarva", "sekce", "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", "setfractions", "setgmeasure", "setgvalue", "setgvariable", "setgvariables", "sethboxregister", "sethyphenatedurlafter", "sethyphenatedurlbefore", "sethyphenatedurlnormal", "sethyphenationfeatures", "setinitial", "setinjector", "setinteraction", "setinterfacecommand", "setinterfaceconstant", "setinterfaceelements", "setinterfacemessage", "setinterfacevariable", "setinternalrendering", "setitaliccorrection", "setlayer", "setlayerframed", "setlayertext", "setlinefiller", "setlocalhsize", "setmainbodyfont", "setmainparbuilder", "setmarker", "setmarking", "setmathstyle", "setmeasure", "setmessagetext", "setmode", "setnostrut", "setnote", "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", "setupMPgraphics", "setupMPinstance", "setupMPpage", "setupMPvariables", "setupTABLE", "setupTEXpage", "setupattachment", "setupbackend", "setupbar", "setupbleeding", "setupbookmark", "setupbtx", "setupbtxdataset", "setupbtxlist", "setupbtxregister", "setupbtxrendering", "setupbutton", "setupcharacterkerning", "setupcharacterspacing", "setupchemical", "setupchemicalframed", "setupcollector", "setupcolumnspan", "setupcombination", "setupcounter", "setupdataset", "setupdelimitedtext", "setupdescription", "setupdirections", "setupdocument", "setupeffect", "setupenumeration", "setupenv", "setupexport", "setupexternalfigure", "setupexternalsoundtracks", "setupfieldbody", "setupfieldcategory", "setupfieldcontentframed", "setupfieldlabelframed", "setupfieldtotalframed", "setupfiller", "setupfirstline", "setupfittingpage", "setupfloatcaption", "setupfontexpansion", "setupfontprotrusion", "setupfonts", "setupfontsolution", "setupforms", "setupformula", "setupformulaframed", "setupframedcontent", "setupframedtext", "setupglobalreferenceprefix", "setupheadalternative", "setuphelp", "setuphigh", "setuphighlight", "setuphyphenation", "setupindentedtext", "setupinitial", "setupinsertion", "setupitaliccorrection", "setupitemgroup", "setuplabel", "setuplayer", "setuplayeredtext", "setuplayouttext", "setuplinefiller", "setuplinefillers", "setuplinenote", "setuplinetable", "setuplistalternative", "setuplistextra", "setuplocalfloats", "setuplocalinterlinespace", "setuplow", "setuplowhigh", "setuplowmidhigh", "setupmarginblock", "setupmargindata", "setupmarginframed", "setupmarginrule", "setupmathalignment", "setupmathcases", "setupmathematics", "setupmathfence", "setupmathfraction", "setupmathframed", "setupmathmatrix", "setupmathornament", "setupmathradical", "setupmathstackers", "setupmathstyle", "setupmixedcolumns", "setupmodule", "setupnotation", "setupnotations", "setupnote", "setupnotes", "setupoffset", "setupoffsetbox", "setupoutputroutine", "setuppagechecker", "setuppagegrid", "setuppagegridarea", "setuppagegridareatext", "setuppagegridlines", "setuppagegridspan", "setuppagegridstart", "setuppageinjection", "setuppageinjectionalternative", "setuppageshift", "setuppagestate", "setuppairedbox", "setuppaper", "setupparagraph", "setupparagraphintro", "setupparallel", "setupperiods", "setupplacement", "setuppositionbar", "setupprocessor", "setupprofile", "setupquotation", "setuprealpagenumber", "setupreferenceformat", "setupreferenceprefix", "setupreferencestructureprefix", "setupregisters", "setuprenderingwindow", "setups", "setupscale", "setupscript", "setupscripts", "setupselector", "setupshift", "setupsidebar", "setupspellchecking", "setupstartstop", "setupstretched", "setupstruts", "setupstyle", "setupsubformula", "setuptabulation", "setuptagging", "setuptextbackground", "setuptextflow", "setuptooltip", "setupunit", "setupuserpagenumber", "setupversion", "setupviewerlayer", "setupvspacing", "setupwithargument", "setupwithargumentswapped", "setupxml", "setupxtable", "setuvalue", "setuxvalue", "setvalue", "setvariable", "setvariables", "setvboxregister", "setvisualizerfont", "setvtopregister", "setwidthof", "setxmeasure", "setxvalue", "setxvariable", "setxvariables", "sfrac", "shapedhbox", "showallmakeup", "showattributes", "showboxes", "showbtxdatasetauthors", "showbtxdatasetcompleteness", "showbtxdatasetfields", "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", "simplegroupedcommand", "singalcharacteralign", "singlebond", "sixthofsixarguments", "skryt", "slanted", "slantedbold", "slicepages", "sloupec", "slovenianNumerals", "sloveniannumerals", "small", "smallbodyfont", "smallbold", "smallbolditalic", "smallboldslanted", "smallcappedcharacters", "smallcappedromannumerals", "smaller", "smallitalicbold", "smallnormal", "smallskip", "smallslanted", "smallslantedbold", "smalltype", "smash", "smashbox", "smashboxed", "smashedhbox", "smashedvbox", "snaptogrid", "someheadnumber", "somekindoftab", "somelocalfloat", "somenamedheadnumber", "someplace", "sp", "spanishNumerals", "spanishnumerals", "speech", "splitatasterisk", "splitatcolon", "splitatcolons", "splitatcomma", "splitdfrac", "splitfilename", "splitfrac", "splitoffbase", "splitofffull", "splitoffkind", "splitoffname", "splitoffpath", "splitoffroot", "splitofftokens", "splitofftype", "splitstring", "spreadhbox", "sqrt", "stackrel", "stanovcharakteristickuseznamu", "stanovcislonadpisu", "startJScode", "startJSpreamble", "startMPclip", "startMPcode", "startMPdefinitions", "startMPdrawing", "startMPenvironment", "startMPextensions", "startMPinclusions", "startMPinitializations", "startMPpage", "startMPpositiongraphic", "startMPpositionmethod", "startMPrun", "startTABLE", "startTABLEbody", "startTABLEfoot", "startTABLEhead", "startTABLEnext", "startTC", "startTD", "startTDs", "startTEXpage", "startTH", "startTN", "startTR", "startTRs", "startTX", "startTY", "startallmodes", "startarrangedpages", "startaside", "startattachment", "startbar", "startbarva", "startbinom", "startbitmapimage", "startblockquote", "startbtxrenderingdefinitions", "startbuffer", "startbutton", "startcatcodetable", "startcharacteralign", "startcheckedfences", "startchemical", "startcitace", "startcitovat", "startcollect", "startcollecting", "startcolorintent", "startcoloronly", "startcolorset", "startcolumns", "startcolumnspan", "startcombination", "startcomment", "startcontextcode", "startcontextdefinitioncode", "startctxfunction", "startctxfunctiondefinition", "startcurrentcolor", "startcurrentlistentrywrapper", "startdbinom", "startdelimited", "startdelimitedtext", "startdfrac", "startdisplaymath", "startdmath", "startdocument", "starteffect", "startelement", "startembeddedxtable", "startendofline", "startexceptions", "startexpanded", "startexpandedcollect", "startextendedcatcodetable", "startexternalfigurecollection", "startfigure", "startfitfieldframed", "startfittingpage", "startfloatcombination", "startfont", "startfontclass", "startfontsolution", "startformula", "startformulas", "startfrac", "startframedcontent", "startframedtext", "startgraf", "startgridsnapping", "starthbox", "starthboxestohbox", "starthboxregister", "starthelptext", "starthiddenbar", "starthiding", "starthighlight", "starthyphenation", "startimath", "startindentation", "startindentedtext", "startinmframed", "startinteraction", "startinteraktivnimenu", "startinterface", "startintermezzo", "startintertext", "startitemgroup", "startjdina", "startkapitola", "startknockout", "startkomentar", "startkomponenta", "startlayout", "startlinecorrection", "startlinefiller", "startlinenumbering", "startlinetable", "startlinetablebody", "startlinetablecell", "startlinetablehead", "startlocalfootnotes", "startlocalheadsetup", "startlocallinecorrection", "startlocalnotes", "startlocalsetups", "startlua", "startluacode", "startluaparameterset", "startluasetups", "startmakeup", "startmarginalnilinka", "startmarginblock", "startmarkedcontent", "startmathmode", "startmathstyle", "startmatrices", "startmcframed", "startmdformula", "startmframed", "startmixedcolumns", "startmode", "startmodeset", "startmodule", "startmoduletestsection", "startmpformula", "startnadpis", "startnadtrzeni", "startnadtrzeno", "startnamedsection", "startnamedsubformulas", "startnarrow", "startnarrower", "startnegative", "startnicelyfilledbox", "startnobar", "startnointerference", "startnotallmodes", "startnotext", "startnotmode", "startobrazek", "startopposite", "startoramovani", "startoramovanytext", "startoutputstream", "startoverlay", "startoverprint", "startpagecomment", "startpagefigure", "startpagegrid", "startpagegridspan", "startpagelayout", "startpar", "startparagraph", "startparagraphs", "startparagraphscell", "startparbuilder", "startpath", "startplacepairedbox", "startpodpodpodpodsekce", "startpodpodpodpodtema", "startpodpodpodsekce", "startpodpodpodtema", "startpodpodsekce", "startpodpodtema", "startpodsekce", "startpodtema", "startpodtrzeni", "startpodtrzeno", "startpolozka", "startpositioning", "startpositionoverlay", "startpositive", "startpostponing", "startpozadi", "startpreskrtnuti", "startpreskrtnuto", "startprocessassignmentcommand", "startprocessassignmentlist", "startprocesscommacommand", "startprocesscommalist", "startprodukt", "startprojekt", "startprostredi", "startprotect", "startprotectedcolors", "startpublikace", "startpunctuation", "startradek", "startrandomized", "startrandomseed", "startrawsetups", "startreadingfile", "startreferenceprefix", "startregime", "startregister", "startreusableMPgraphic", "startscript", "startsdformula", "startsectionblock", "startsectionblockenvironment", "startsectionlevel", "startsekce", "startsetups", "startsfrac", "startshapebox", "startshift", "startsidebar", "startsimplecolumns", "startspecialitem", "startspeech", "startspformula", "startspread", "startstartstop", "startstaticMPfigure", "startstaticMPgraphic", "startstrictinspectnextcharacter", "startstructurepageregister", "startstrut", "startstyle", "startsubformulas", "startsubjectlevel", "startsubsentence", "startsubstack", "startsymbolset", "starttable", "starttablehead", "starttables", "starttabletail", "starttabulate", "starttabulatehead", "starttabulatetail", "starttabulka", "starttagged", "starttbinom", "starttema", "starttexcode", "starttexdefinition", "starttext", "starttextbackground", "starttextbackgroundmanual", "starttextcolor", "starttextcolorintent", "starttextflow", "starttextnapovedy", "starttextovalinka", "starttitul", "starttokens", "starttransparent", "starttypescript", "starttypescriptcollection", "startumistirovnici", "startunderdash", "startunderdashes", "startunderdot", "startunderdots", "startunderrandom", "startunderrandoms", "startunderstrike", "startunderstrikes", "startunframed", "startuniqueMPgraphic", "startuniqueMPpagegraphic", "startunpacked", "startusableMPgraphic", "startuseMPgraphic", "startusemathstyleparameter", "startusingbtxspecification", "startvbox", "startvboxregister", "startvboxtohbox", "startvboxtohboxseparator", "startviewerlayer", "startvtop", "startvtopregister", "startvycet", "startxcell", "startxcellgroup", "startxfrac", "startxgroup", "startxmldisplayverbatim", "startxmlinlineverbatim", "startxmlraw", "startxmlsetups", "startxrow", "startxrowgroup", "startxtable", "startxtablebody", "startxtablefoot", "startxtablehead", "startxtablenext", "startxxfrac", "startzhustene", "stopJScode", "stopJSpreamble", "stopMPclip", "stopMPcode", "stopMPdefinitions", "stopMPdrawing", "stopMPenvironment", "stopMPextensions", "stopMPinclusions", "stopMPinitializations", "stopMPpage", "stopMPpositiongraphic", "stopMPpositionmethod", "stopMPrun", "stopTABLE", "stopTABLEbody", "stopTABLEfoot", "stopTABLEhead", "stopTABLEnext", "stopTC", "stopTD", "stopTDs", "stopTEXpage", "stopTH", "stopTN", "stopTR", "stopTRs", "stopTX", "stopTY", "stopallmodes", "stoparrangedpages", "stopaside", "stopattachment", "stopbar", "stopbarva", "stopbinom", "stopbitmapimage", "stopblockquote", "stopbtxrenderingdefinitions", "stopbuffer", "stopbutton", "stopcatcodetable", "stopcharacteralign", "stopcheckedfences", "stopchemical", "stopcitace", "stopcitovat", "stopcollect", "stopcollecting", "stopcolorintent", "stopcoloronly", "stopcolorset", "stopcolumns", "stopcolumnspan", "stopcombination", "stopcomment", "stopcontextcode", "stopcontextdefinitioncode", "stopctxfunction", "stopctxfunctiondefinition", "stopcurrentcolor", "stopcurrentlistentrywrapper", "stopdbinom", "stopdelimited", "stopdelimitedtext", "stopdfrac", "stopdisplaymath", "stopdmath", "stopdocument", "stopeffect", "stopelement", "stopembeddedxtable", "stopendofline", "stopexceptions", "stopexpanded", "stopexpandedcollect", "stopextendedcatcodetable", "stopexternalfigurecollection", "stopfigure", "stopfitfieldframed", "stopfittingpage", "stopfloatcombination", "stopfont", "stopfontclass", "stopfontsolution", "stopformula", "stopformulas", "stopfrac", "stopframedcontent", "stopframedtext", "stopgraf", "stopgridsnapping", "stophbox", "stophboxestohbox", "stophboxregister", "stophelptext", "stophiddenbar", "stophiding", "stophighlight", "stophyphenation", "stopimath", "stopindentation", "stopindentedtext", "stopinmframed", "stopinteraction", "stopinteraktivnimenu", "stopinterface", "stopintermezzo", "stopintertext", "stopitemgroup", "stopjdina", "stopkapitola", "stopknockout", "stopkomentar", "stopkomponenta", "stoplayout", "stoplinecorrection", "stoplinefiller", "stoplinenumbering", "stoplinetable", "stoplinetablebody", "stoplinetablecell", "stoplinetablehead", "stoplocalfootnotes", "stoplocalheadsetup", "stoplocallinecorrection", "stoplocalnotes", "stoplocalsetups", "stoplua", "stopluacode", "stopluaparameterset", "stopluasetups", "stopmakeup", "stopmarginalnilinka", "stopmarginblock", "stopmarkedcontent", "stopmathmode", "stopmathstyle", "stopmatrices", "stopmcframed", "stopmdformula", "stopmframed", "stopmixedcolumns", "stopmode", "stopmodeset", "stopmodule", "stopmoduletestsection", "stopmpformula", "stopnadpis", "stopnadtrzeni", "stopnadtrzeno", "stopnamedsection", "stopnamedsubformulas", "stopnarrow", "stopnarrower", "stopnegative", "stopnicelyfilledbox", "stopnobar", "stopnointerference", "stopnotallmodes", "stopnotext", "stopnotmode", "stopobrazek", "stopopposite", "stoporamovani", "stoporamovanytext", "stopoutputstream", "stopoverlay", "stopoverprint", "stoppagecomment", "stoppagefigure", "stoppagegrid", "stoppagegridspan", "stoppagelayout", "stoppar", "stopparagraph", "stopparagraphs", "stopparagraphscell", "stopparbuilder", "stoppath", "stopplacepairedbox", "stoppodpodpodpodsekce", "stoppodpodpodpodtema", "stoppodpodpodsekce", "stoppodpodpodtema", "stoppodpodsekce", "stoppodpodtema", "stoppodsekce", "stoppodtema", "stoppodtrzeni", "stoppodtrzeno", "stoppolozka", "stoppositioning", "stoppositionoverlay", "stoppositive", "stoppostponing", "stoppozadi", "stoppreskrtnuti", "stoppreskrtnuto", "stopprocessassignmentcommand", "stopprocessassignmentlist", "stopprocesscommacommand", "stopprocesscommalist", "stopprodukt", "stopprojekt", "stopprostredi", "stopprotect", "stopprotectedcolors", "stoppublikace", "stoppunctuation", "stopradek", "stoprandomized", "stoprandomseed", "stoprawsetups", "stopreadingfile", "stopreferenceprefix", "stopregime", "stopregister", "stopreusableMPgraphic", "stopscript", "stopsdformula", "stopsectionblock", "stopsectionblockenvironment", "stopsectionlevel", "stopsekce", "stopsetups", "stopsfrac", "stopshapebox", "stopshift", "stopsidebar", "stopsimplecolumns", "stopspecialitem", "stopspeech", "stopspformula", "stopspread", "stopstartstop", "stopstaticMPfigure", "stopstaticMPgraphic", "stopstrictinspectnextcharacter", "stopstructurepageregister", "stopstrut", "stopstyle", "stopsubformulas", "stopsubjectlevel", "stopsubsentence", "stopsubstack", "stopsymbolset", "stoptable", "stoptablehead", "stoptables", "stoptabletail", "stoptabulate", "stoptabulatehead", "stoptabulatetail", "stoptabulka", "stoptagged", "stoptbinom", "stoptema", "stoptexcode", "stoptexdefinition", "stoptext", "stoptextbackground", "stoptextbackgroundmanual", "stoptextcolor", "stoptextcolorintent", "stoptextflow", "stoptextnapovedy", "stoptextovalinka", "stoptitul", "stoptokens", "stoptransparent", "stoptypescript", "stoptypescriptcollection", "stopumistirovnici", "stopunderdash", "stopunderdashes", "stopunderdot", "stopunderdots", "stopunderrandom", "stopunderrandoms", "stopunderstrike", "stopunderstrikes", "stopunframed", "stopuniqueMPgraphic", "stopuniqueMPpagegraphic", "stopunpacked", "stopusableMPgraphic", "stopuseMPgraphic", "stopusemathstyleparameter", "stopusingbtxspecification", "stopvbox", "stopvboxregister", "stopvboxtohbox", "stopvboxtohboxseparator", "stopviewerlayer", "stopvtop", "stopvtopregister", "stopvycet", "stopxcell", "stopxcellgroup", "stopxfrac", "stopxgroup", "stopxmldisplayverbatim", "stopxmlinlineverbatim", "stopxmlraw", "stopxmlsetups", "stopxrow", "stopxrowgroup", "stopxtable", "stopxtablebody", "stopxtablefoot", "stopxtablehead", "stopxtablenext", "stopxxfrac", "stopzhustene", "strana", "strictdoifelsenextoptional", "strictdoifnextoptionalelse", "stripcharacter", "strippedcsname", "stripspaces", "structurelistuservariable", "structurenumber", "structuretitle", "structureuservariable", "structurevariable", "strut", "strutdp", "strutht", "struthtdp", "struttedbox", "strutwd", "style", "styleinstance", "subpagenumber", "subsentence", "substituteincommalist", "subtractfeature", "swapcounts", "swapdimens", "swapface", "swapmacros", "swaptypeface", "switchstyleonly", "switchtocolor", "switchtointerlinespace", "symbol", "symbolreference", "synchronizeblank", "synchronizeindenting", "synchronizemarking", "synchronizeoutputstreams", "synchronizestrut", "synchronizewhitespace", "systemlog", "systemlogfirst", "systemloglast", "systemsetups", "tLeftarrow", "tLeftrightarrow", "tRightarrow", "tabulateautoline", "tabulateautorule", "tabulateline", "tabulaterule", "tabulka", "taggedctxcommand", "taggedlabeltexts", "tbinom", "tbox", "tecky", "tema", "tenkalinka", "tenkelinky", "tequal", "testandsplitstring", "testcolumn", "testfeature", "testfeatureonce", "testpage", "testpageonly", "testpagesync", "testtokens", "tex", "texdefinition", "texsetup", "textcitation", "textcite", "textcontrolspace", "textflowcollector", "textmath", "textminus", "textnapovedy", "textormathchar", "textovalinka", "textplus", "textvisiblespace", "tfrac", "thainumerals", "thefirstcharacter", "thenormalizedbodyfontsize", "theremainingcharacters", "thickspace", "thinspace", "thirdoffivearguments", "thirdoffourarguments", "thirdofsixarguments", "thirdofthreearguments", "thirdofthreeunexpanded", "thookleftarrow", "thookrightarrow", "threedigitrounding", "tibetannumerals", "tightlayer", "tinyfont", "titul", "tlacitko", "tlacitkomenu", "tlap", "tleftarrow", "tleftharpoondown", "tleftharpoonup", "tleftrightarrow", "tleftrightharpoons", "tloustkacary", "tmapsto", "tochar", "tolinenote", "topbox", "topleftbox", "toplinebox", "toprightbox", "topskippedbox", "tracecatcodetables", "tracedfontname", "traceoutputroutines", "tracepositions", "transparencycomponents", "transparent", "tref", "trel", "trightarrow", "trightharpoondown", "trightharpoonup", "trightleftharpoons", "trightoverleftarrow", "triplebond", "truefilename", "truefontname", "ttriplerel", "ttwoheadleftarrow", "ttwoheadrightarrow", "tvrdamezera", "tvrdemezery", "twodigitrounding", "tx", "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", "umistilokalnipoznamkypodcarou", "umistinadsebe", "umistinamrizku", "umistipodrovnici", "umistipoznamkypodcarou", "umistirejstrik", "umistirovnici", "umistiseznam", "umistivedlesebe", "umistizalozky", "undefinevalue", "undepthed", "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", "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", "useblankparameter", "usebodyfont", "usebodyfontparameter", "usebtxdataset", "usebtxdefinitions", "usecolors", "usecomponent", "usedummycolorparameter", "usedummystyleandcolor", "usedummystyleparameter", "useenvironment", "useexternalrendering", "usefigurebase", "usefile", "usegridparameter", "useindentingparameter", "useindentnextparameter", "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", "verbatim", "verbatimstring", "verbosenumber", "verticalgrowingbar", "verticalpositionbar", "verze", "vglue", "viewerlayer", "vl", "vlasovalinka", "vphantom", "vpos", "vradku", "vsedniden", "vsmash", "vsmashbox", "vsmashed", "vspace", "vspacing", "vyberbloky", "vycet", "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", "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", "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", "Lua", "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", "MPwhd", "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", "TEXpage", "TaBlE", "TeX", "TheNormalizedFontSize", "TransparencyHack", "VerboseNumber", "WOCHENTAG", "WOERTER", "WORT", "WidthSpanningText", "Woerter", "Wort", "XETEX", "XeTeX", "Ziffern", "abbildung", "abjadnaivenumerals", "abjadnodotnumerals", "abjadnumerals", "absatz", "activatespacehandler", "adaptcollector", "adaptfontfeature", "adaptpapersize", "addfeature", "addtoJSpreamble", "addtocommalist", "addvalue", "aftersplitstring", "aftertestandsplitstring", "alignmentcharacter", "allinputpaths", "alphabeticnumerals", "alwayscitation", "alwayscite", "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", "aside", "assignalfadimension", "assigndimen", "assigndimension", "assignifempty", "assigntranslation", "assignvalue", "assignwidth", "assumelongusagecs", "astype", "attachment", "aufseite", "aufzaehlung", "ausfuelltext", "ausschnitt", "autocap", "autodirhbox", "autodirvbox", "autodirvtop", "autoinsertnextspace", "automathematics", "autosetups", "availablehsize", "averagecharwidth", "backgroundimage", "backgroundimagefill", "backgroundline", "basegrid", "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", "blockligatures", "blockquote", "bodyfontenvironmentlist", "bodyfontsize", "bold", "boldface", "bolditalic", "boldslanted", "bookmark", "booleanmodevalue", "bottombox", "bottomleftbox", "bottomrightbox", "boxcursor", "boxmarker", "boxofsize", "boxreference", "bpos", "bthiddencitation", "btxabbreviatedjournal", "btxaddjournal", "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", "btxlistcitation", "btxloadjournalist", "btxoneorrange", "btxremapauthor", "btxsavejournalist", "btxsetup", "btxsingularorplural", "btxsingularplural", "btxtextcitation", "buchstabe", "buchstaben", "calligraphic", "camel", "catcodetablename", "cbox", "centerbox", "centeredbox", "centerednextbox", "cfrac", "chardescription", "charwidthlanguage", "checkcharacteralign", "checkedchar", "checkedfiller", "checkedstrippedcsname", "checkinjector", "checknextindentation", "checknextinjector", "checkpage", "checkparameters", "checkpreviousinjector", "checksoundtrack", "checktwopassdata", "checkvariables", "chem", "chemical", "chemicalbottext", "chemicalmidtext", "chemicalsymbol", "chemicaltext", "chemicaltoptext", "chineseallnumerals", "chinesecapnumerals", "chinesenumerals", "citation", "cite", "clap", "classfont", "cldcommand", "cldcontext", "cldloadfile", "cldprocessfile", "cleftarrow", "collect", "collectedtext", "collectexpanded", "colorcomponents", "colored", "coloronly", "columnbreak", "combinepages", "commalistelement", "commalistsentence", "commalistsize", "comment", "comparedimension", "comparedimensioneps", "completebtxrendering", "completelist", "completelistofpublications", "completelistofsorts", "completelistofsynonyms", "completepagenumber", "completeregister", "complexorsimple", "complexorsimpleempty", "composedcollector", "composedlayer", "compresult", "constantdimen", "constantdimenargument", "constantemptyargument", "constantnumber", "constantnumberargument", "contentreference", "continuednumber", "continueifinputfile", "convertargument", "convertcommand", "convertedcounter", "converteddimen", "convertedsubcounter", "convertmonth", "convertvalue", "convertvboxtohbox", "copypages", "copyparameters", "copyposition", "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", "datasetvariable", "datum", "dayoftheweek", "dayspermonth", "dbinom", "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", "definecomplexorsimpleempty", "defineconversionset", "definecounter", "definedataset", "definedelimitedtext", "definedfont", "defineeffect", "defineexpandable", "defineexternalfigure", "definefallbackfamily", "definefieldbody", "definefieldbodyset", "definefieldcategory", "definefileconstant", "definefilefallback", "definefilesynonym", "definefiller", "definefirstline", "definefittingpage", "definefontalternative", "definefontfallback", "definefontfamily", "definefontfamilypreset", "definefontfeature", "definefontfile", "definefontsize", "definefontsolution", "defineformula", "defineformulaalternative", "defineformulaframed", "defineframedcontent", "definefrozenfont", "defineglobalcolor", "definegraphictypesynonym", "definegridsnapping", "defineheadalternative", "definehelp", "definehigh", "definehighlight", "definehspace", "definehypenationfeatures", "defineindentedtext", "defineindenting", "defineinitial", "defineinsertion", "defineinteraction", "defineinteractionbar", "defineinterfaceconstant", "defineinterfaceelement", "defineinterfacevariable", "defineinterlinespace", "defineintermediatecolor", "defineitemgroup", "defineitems", "definelabelclass", "definelayer", "definelayerpreset", "definelayout", "definelinefiller", "definelinenote", "definelinenumbering", "definelines", "definelistalternative", "definelistextra", "definelow", "definelowhigh", "definelowmidhigh", "definemarginblock", "definemargindata", "definemarker", "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", "definenamespace", "definenarrower", "definenote", "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", "definierebeschreibung", "definierebeschriftung", "definiereblock", "definierefarbe", "definierefarbengruppe", "definierefeld", "definierefeldstapel", "definierefliesstext", "definierefliesstextumgebung", "definieregleitobjekt", "definierehbox", "definiereinteraktionsmenue", "definierekonversion", "definierelabel", "definiereliste", "definieren", "definierenummerierung", "definiereoverlay", "definierepalette", "definierepapierformat", "definiereprofil", "definiereprogramme", "definierepuffer", "definierereferenz", "definierereferenzformat", "definiereregister", "definiereschrift", "definiereschriftstil", "definieresortieren", "definierestartstop", "definierestil", "definieresubfeld", "definieresymbol", "definieresynonyme", "definieretabellenvorlage", "definieretabulator", "definieretext", "definieretippen", "definiereueberschrift", "definiereumbruch", "definiereumrahmt", "definiereumrahmtertext", "definierezusammengestellteliste", "delimited", "delimitedtext", "depthofstring", "depthonlybox", "depthspanningtext", "determinenoflines", "devanagarinumerals", "dfrac", "digits", "dimensiontocount", "directcolor", "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", "dorepeatwithcommand", "doreplacefeature", "doresetandafffeature", "doresetattribute", "dorotatebox", "dosetattribute", "dosetleftskipadaption", "dosetrightskipadaption", "dosetupcheckedinterlinespace", "doseventupleargument", "doseventupleempty", "dosingleargument", "dosingleempty", "dosinglegroupempty", "dosixtupleargument", "dosixtupleempty", "dostepwiserecurse", "dosubtractfeature", "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", "enskip", "enspace", "env", "envvar", "eoverbarfill", "eoverbracefill", "eoverbracketfill", "eoverparentfill", "epos", "equaldigits", "erightarrowfill", "erightharpoondownfill", "erightharpoonupfill", "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", "feld", "feldstapel", "fence", "fenced", "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", "flushboxregister", "flushcollector", "flushlayer", "flushlocalfloats", "flushnextbox", "flushnotes", "flushoutputstream", "flushshapebox", "flushtextflow", "flushtokens", "flushtoks", "fontalternative", "fontbody", "fontchar", "fontcharbyindex", "fontclass", "fontclassname", "fontface", "fontfeaturelist", "fontsize", "fontstyle", "footnotetext", "forcecharacterstripping", "forcelocalfloats", "forgeteverypar", "forgetparameters", "format", "formelnummer", "formula", "foundbox", "fourthoffivearguments", "fourthoffourarguments", "fourthofsixarguments", "frac", "frameddimension", "framedparameter", "framedtext", "freezedimenmacro", "freezemeasure", "frenchspacing", "fromlinenote", "frozenhbox", "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", "getprivatechar", "getprivateslot", "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", "grabbufferdata", "grabbufferdatadirect", "grabuntil", "grafik", "graufarbe", "grayvalue", "greedysplitstring", "greeknumerals", "groupedcommand", "gsetboxllx", "gsetboxlly", "gujaratinumerals", "gurmurkhinumerals", "haarlinie", "hairspace", "halfwaybox", "handletokens", "handwritten", "hash", "hauptsprache", "hboxofvbox", "hboxreference", "hdofstring", "headhbox", "headnumbercontent", "headnumberdistance", "headnumberwidth", "headreferenceattributes", "headsetupspacing", "headtextcontent", "headtextdistance", "headtextwidth", "headvbox", "headwidth", "heightanddepthofstring", "heightofstring", "heightspanningtext", "helptext", "heutigesdatum", "heutigeskopfnummer", "hglue", "hiddenbar", "hiddencitation", "hiddencite", "highlight", "highordinalstr", "hilfetext", "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", "immaumrise", "immediatesavetwopassdata", "impliedby", "implies", "imumriss", "in", "includemenu", "includeversioninfo", "increment", "incrementcounter", "incrementedcounter", "incrementpagenumber", "incrementsubpagenumber", "incrementvalue", "indentation", "infofont", "infofontbold", "inheritparameter", "inhibitblank", "initializeboxstack", "inlinebuffer", "inlinedbox", "inlinemath", "inlinemathematics", "inlinemessage", "inlineordisplaymath", "inlinerange", "innerflushshapebox", "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", "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", "intermezzo", "intertext", "invokepageheandler", "inzeile", "irgendwo", "istltdir", "istrtdir", "italic", "italicbold", "italiccorrection", "itemtag", "jobfilename", "jobfilesuffix", "kap", "kapitel", "keeplinestogether", "keepunwantedspaces", "keinekopfundfusszeilen", "keinspatium", "keinzeilenobenundunten", "kerncharacters", "klonierefeld", "knopf", "kommentar", "komponente", "konvertierezahl", "kopfnummer", "kopierefeld", "koreancirclenumerals", "koreannumerals", "koreannumeralsc", "koreannumeralsp", "koreanparentnumerals", "korrigierezwischenraum", "languageCharacters", "languagecharacters", "languagecharwidth", "lastcounter", "lastcountervalue", "lastdigit", "lastlinewidth", "lastnaturalboxdp", "lastnaturalboxht", "lastnaturalboxwd", "lastpredefinedsymbol", "lastrealpage", "lastrealpagenumber", "lastsubcountervalue", "lastsubpage", "lastsubpagenumber", "lasttwodigits", "lastuserpage", "lastuserpagenumber", "lateluacode", "layeredtext", "layerheight", "layerwidth", "lazysavetaggedtwopassdata", "lazysavetwopassdata", "lbox", "left", "leftbottombox", "leftbox", "lefthbox", "leftorrighthbox", "leftorrightvbox", "leftorrightvtop", "leftskipadaption", "leftsubguillemot", "lefttopbox", "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", "limtatefirstline", "linespanningtext", "liniendicke", "listcitation", "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", "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", "mathematik", "mathfraktur", "mathfunction", "mathit", "mathitalic", "mathop", "mathrm", "mathscript", "mathsl", "mathss", "mathtext", "mathtextbf", "mathtextbi", "mathtextbs", "mathtextit", "mathtextsl", "mathtexttf", "mathtf", "mathtriplet", "mathtt", "mathupright", "mathword", "mathwordbf", "mathwordbi", "mathwordbs", "mathwordit", "mathwordsl", "mathwordtf", "maumrise", "mbox", "mcframed", "md", "measure", "measured", "medskip", "medspace", "menueknopf", "mequal", "message", "metaTeX", "mfence", "mfunction", "mfunctionlabeltext", "mhbox", "mhookleftarrow", "mhookrightarrow", "middle", "middlebox", "midhbox", "minimalhbox", "mixedcaps", "mkvibuffer", "mleftarrow", "mleftharpoondown", "mleftharpoonup", "mleftrightarrow", "mleftrightharpoons", "mmapsto", "moduleparameter", "molecule", "monat", "mono", "monobold", "mononormal", "monthlong", "monthshort", "mp", "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", "nobar", "nocitation", "nocite", "nodetostring", "noffigurepages", "noflines", "noflocalfloats", "noindentation", "noitem", "nokap", "nonfrenchspacing", "nonmathematics", "normal", "normalboldface", "normalframedwithsettings", "normalizebodyfontsize", "normalizedfontsize", "normalizefontdepth", "normalizefontheight", "normalizefontline", "normalizefontwidth", "normalizetextdepth", "normalizetextheight", "normalizetextline", "normalizetextwidth", "normaltypeface", "notesymbol", "notiz", "ntimes", "numberofpoints", "obeydepth", "objectdepth", "objectheight", "objectmargin", "objectwidth", "obox", "offset", "offsetbox", "onedigitrounding", "ordinaldaynumber", "ordinalstr", "ornamenttext", "outputfilename", "outputstreambox", "outputstreamcopy", "outputstreamunvbox", "outputstreamunvcopy", "over", "overbar", "overbars", "overbartext", "overbarunderbar", "overbrace", "overbracetext", "overbraceunderbrace", "overbracket", "overbrackettext", "overbracketunderbracket", "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", "pagestaterealpage", "paletsize", "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", "placecitation", "placecomments", "placecurrentformulanumber", "placedbox", "placefloat", "placefloatwithsetups", "placeframed", "placeheadnumber", "placeheadtext", "placehelp", "placeinitial", "placelayer", "placelayeredtext", "placelistofpublications", "placelistofsorts", "placelistofsynonyms", "placelocalnotes", "placement", "placenamedfloat", "placenamedformula", "placenotes", "placepagenumber", "placepairedbox", "placeparallel", "placerawlist", "placerenderingwindow", "platzierebookmarks", "platziereformel", "platzierefussnoten", "platziereliste", "platzierelokalefussnoten", "platzierenebeneinander", "platziereregister", "platziereuntereinander", "platziereunterformel", "platzierezusammengestellteliste", "popattribute", "popmacro", "popmode", "popsystemmode", "pos", "position", "positionoverlay", "positionregionoverlay", "posten", "postponenotes", "predefinedfont", "predefinefont", "predefinesymbol", "prefixedpagenumber", "prependetoks", "prependgvalue", "prependtocommalist", "prependtoks", "prependtoksonce", "prependvalue", "presetdocument", "presetfieldsymbols", "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", "profiledbox", "profilegivenbox", "programm", "projekt", "pseudoMixedCapped", "pseudoSmallCapped", "pseudoSmallcapped", "pseudosmallcapped", "punkt", "purenumber", "pushattribute", "pushbutton", "pushmacro", "pushmode", "pushoutputstream", "pushsystemmode", "qquad", "quad", "quads", "quitcommalist", "quitprevcommalist", "quittypescriptscanning", "raisebox", "randomizetext", "randomnumber", "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", "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", "replaceincommalist", "replaceword", "rescan", "rescanwithsetup", "resetMPdrawing", "resetMPenvironment", "resetMPinstance", "resetallattributes", "resetandaddfeature", "resetbar", "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", "resolvedglyphdirect", "resolvedglyphstyled", "restartcounter", "restorebox", "restorecatcodes", "restorecounter", "restorecurrentattributes", "restoreendofline", "restoreglobalbodyfont", "reusableMPgraphic", "reuseMPgraphic", "reuserandomseed", "revivefeature", "rfence", "rhbox", "right", "rightbottombox", "rightbox", "righthbox", "rightorleftpageaction", "rightskipadaption", "rightsubguillemot", "righttolefthbox", "righttoleftvbox", "righttoleftvtop", "righttopbox", "rlap", "robustaddtocommalist", "robustdoifelseinset", "robustdoifinsetelse", "robustpretocommalist", "roemischezahlen", "rollbutton", "roman", "rtop", "ruecksetztenbeschriftung", "ruledhbox", "ruledhpack", "ruledmbox", "ruledtopv", "ruledtpack", "ruledvbox", "ruledvpack", "ruledvtop", "runMPbuffer", "runninghbox", "safechar", "sans", "sansbold", "sansnormal", "sansserif", "savebox", "savebtxdataset", "savebuffer", "savecounter", "savecurrentattributes", "savenormalmeaning", "savetaggedtwopassdata", "savetwopassdata", "sbox", "schreibezurliste", "schreibezwischenliste", "sd", "secondoffivearguments", "secondoffourarguments", "secondofsixarguments", "secondofthreearguments", "secondofthreeunexpanded", "secondoftwoarguments", "secondoftwounexpanded", "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", "setfractions", "setgmeasure", "setgvalue", "setgvariable", "setgvariables", "sethboxregister", "sethyphenatedurlafter", "sethyphenatedurlbefore", "sethyphenatedurlnormal", "sethyphenationfeatures", "setinitial", "setinjector", "setinteraction", "setinterfacecommand", "setinterfaceconstant", "setinterfaceelements", "setinterfacemessage", "setinterfacevariable", "setinternalrendering", "setitaliccorrection", "setlayer", "setlayerframed", "setlayertext", "setlinefiller", "setlocalhsize", "setmainbodyfont", "setmainparbuilder", "setmarker", "setmarking", "setmathstyle", "setmeasure", "setmessagetext", "setmode", "setnostrut", "setnote", "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", "setupMPgraphics", "setupMPinstance", "setupMPpage", "setupMPvariables", "setupTABLE", "setupTEXpage", "setupattachment", "setupbackend", "setupbar", "setupbleeding", "setupbookmark", "setupbtx", "setupbtxdataset", "setupbtxlist", "setupbtxregister", "setupbtxrendering", "setupbutton", "setupcharacterkerning", "setupcharacterspacing", "setupchemical", "setupchemicalframed", "setupcollector", "setupcolumnspan", "setupcombination", "setupcounter", "setupdataset", "setupdelimitedtext", "setupdescription", "setupdirections", "setupdocument", "setupeffect", "setupenumeration", "setupenv", "setupexport", "setupexternalfigure", "setupexternalsoundtracks", "setupfieldbody", "setupfieldcategory", "setupfieldcontentframed", "setupfieldlabelframed", "setupfieldtotalframed", "setupfiller", "setupfirstline", "setupfittingpage", "setupfloatcaption", "setupfontexpansion", "setupfontprotrusion", "setupfonts", "setupfontsolution", "setupforms", "setupformula", "setupformulaframed", "setupframedcontent", "setupframedtext", "setupglobalreferenceprefix", "setupheadalternative", "setuphelp", "setuphigh", "setuphighlight", "setuphyphenation", "setupindentedtext", "setupinitial", "setupinsertion", "setupitaliccorrection", "setupitemgroup", "setuplabel", "setuplayer", "setuplayeredtext", "setuplayouttext", "setuplinefiller", "setuplinefillers", "setuplinenote", "setuplinetable", "setuplistalternative", "setuplistextra", "setuplocalfloats", "setuplocalinterlinespace", "setuplow", "setuplowhigh", "setuplowmidhigh", "setupmarginblock", "setupmargindata", "setupmarginframed", "setupmarginrule", "setupmathalignment", "setupmathcases", "setupmathematics", "setupmathfence", "setupmathfraction", "setupmathframed", "setupmathmatrix", "setupmathornament", "setupmathradical", "setupmathstackers", "setupmathstyle", "setupmixedcolumns", "setupmodule", "setupnotation", "setupnotations", "setupnote", "setupnotes", "setupoffset", "setupoffsetbox", "setupoutputroutine", "setuppagechecker", "setuppagegrid", "setuppagegridarea", "setuppagegridareatext", "setuppagegridlines", "setuppagegridspan", "setuppagegridstart", "setuppageinjection", "setuppageinjectionalternative", "setuppageshift", "setuppagestate", "setuppairedbox", "setuppaper", "setupparagraph", "setupparagraphintro", "setupparallel", "setupperiods", "setupplacement", "setuppositionbar", "setupprocessor", "setupprofile", "setupquotation", "setuprealpagenumber", "setupreferenceformat", "setupreferenceprefix", "setupreferencestructureprefix", "setupregisters", "setuprenderingwindow", "setups", "setupscale", "setupscript", "setupscripts", "setupselector", "setupshift", "setupsidebar", "setupspellchecking", "setupstartstop", "setupstretched", "setupstruts", "setupstyle", "setupsubformula", "setuptabulation", "setuptagging", "setuptextbackground", "setuptextflow", "setuptooltip", "setupunit", "setupuserpagenumber", "setupversion", "setupviewerlayer", "setupvspacing", "setupwithargument", "setupwithargumentswapped", "setupxml", "setupxtable", "setuvalue", "setuxvalue", "setvalue", "setvariable", "setvariables", "setvboxregister", "setvisualizerfont", "setvtopregister", "setwidthof", "setxmeasure", "setxvalue", "setxvariable", "setxvariables", "sfrac", "shapedhbox", "showallmakeup", "showattributes", "showboxes", "showbtxdatasetauthors", "showbtxdatasetcompleteness", "showbtxdatasetfields", "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", "simplegroupedcommand", "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", "someheadnumber", "somekindoftab", "somelocalfloat", "somenamedheadnumber", "someplace", "sp", "spalte", "spanishNumerals", "spanishnumerals", "spatium", "speech", "spiegeln", "splitatasterisk", "splitatcolon", "splitatcolons", "splitatcomma", "splitdfrac", "splitfilename", "splitfrac", "splitoffbase", "splitofffull", "splitoffkind", "splitoffname", "splitoffpath", "splitoffroot", "splitofftokens", "splitofftype", "splitstring", "sprache", "spreadhbox", "sqrt", "stackrel", "startJScode", "startJSpreamble", "startMPclip", "startMPcode", "startMPdefinitions", "startMPdrawing", "startMPenvironment", "startMPextensions", "startMPinclusions", "startMPinitializations", "startMPpage", "startMPpositiongraphic", "startMPpositionmethod", "startMPrun", "startTABLE", "startTABLEbody", "startTABLEfoot", "startTABLEhead", "startTABLEnext", "startTC", "startTD", "startTDs", "startTEXpage", "startTH", "startTN", "startTR", "startTRs", "startTX", "startTY", "startabbildung", "startabsatz", "startallmodes", "startarrangedpages", "startaside", "startattachment", "startaufzaehlung", "startbar", "startbinom", "startbitmapimage", "startblockquote", "startbtxrenderingdefinitions", "startbuffer", "startbutton", "startcatcodetable", "startcharacteralign", "startcheckedfences", "startchemical", "startcollect", "startcollecting", "startcolorintent", "startcoloronly", "startcolorset", "startcolumns", "startcolumnspan", "startcombination", "startcomment", "startcontextcode", "startcontextdefinitioncode", "startctxfunction", "startctxfunctiondefinition", "startcurrentcolor", "startcurrentlistentrywrapper", "startdbinom", "startdelimited", "startdelimitedtext", "startdfrac", "startdisplaymath", "startdmath", "startdocument", "startdurchgestrichen", "startdurchstreichen", "starteffect", "startelement", "startembeddedxtable", "startendofline", "startexceptions", "startexpanded", "startexpandedcollect", "startextendedcatcodetable", "startexternalfigurecollection", "startfarbe", "startfigure", "startfitfieldframed", "startfittingpage", "startfloatcombination", "startfont", "startfontclass", "startfontsolution", "startformula", "startformulas", "startfrac", "startframedcontent", "startframedtext", "startgrafik", "startgridsnapping", "starthbox", "starthboxestohbox", "starthboxregister", "starthelptext", "starthiddenbar", "starthiding", "starthighlight", "starthilfetext", "starthintergrund", "starthyphenation", "startimath", "startindentation", "startindentedtext", "startinmframed", "startinteraction", "startinteraktionsmenue", "startinterface", "startintermezzo", "startintertext", "startitemgroup", "startkapitel", "startkleinerdurchschuss", "startknockout", "startkommentar", "startkomponente", "startkopf", "startlayout", "startlinecorrection", "startlinefiller", "startlinenumbering", "startlinetable", "startlinetablebody", "startlinetablecell", "startlinetablehead", "startlocalfootnotes", "startlocalheadsetup", "startlocallinecorrection", "startlocalnotes", "startlocalsetups", "startlua", "startluacode", "startluaparameterset", "startluasetups", "startmakeup", "startmarginallinie", "startmarginblock", "startmarkedcontent", "startmathmode", "startmathstyle", "startmatrices", "startmcframed", "startmdformula", "startmframed", "startmixedcolumns", "startmode", "startmodeset", "startmodule", "startmoduletestsection", "startmpformula", "startnamedsection", "startnamedsubformulas", "startnarrow", "startnarrower", "startnegative", "startnicelyfilledbox", "startnobar", "startnointerference", "startnotallmodes", "startnotext", "startnotmode", "startopposite", "startoutputstream", "startoverlay", "startoverprint", "startpagecomment", "startpagefigure", "startpagegrid", "startpagegridspan", "startpagelayout", "startpar", "startparagraph", "startparagraphs", "startparagraphscell", "startparbuilder", "startpath", "startplacepairedbox", "startplatziereformel", "startpos", "startpositioning", "startpositionoverlay", "startpositive", "startpostponing", "startprocessassignmentcommand", "startprocessassignmentlist", "startprocesscommacommand", "startprocesscommalist", "startprodukt", "startprojekt", "startprotect", "startprotectedcolors", "startpublikation", "startpunctuation", "startrandomized", "startrandomseed", "startrawsetups", "startreadingfile", "startreferenceprefix", "startregime", "startregister", "startreusableMPgraphic", "startscript", "startsdformula", "startsectionblock", "startsectionblockenvironment", "startsectionlevel", "startsetups", "startsfrac", "startshapebox", "startshift", "startsidebar", "startsimplecolumns", "startspecialitem", "startspeech", "startspformula", "startspread", "startstartstop", "startstaticMPfigure", "startstaticMPgraphic", "startstrictinspectnextcharacter", "startstructurepageregister", "startstrut", "startstyle", "startsubformulas", "startsubjectlevel", "startsubsentence", "startsubstack", "startsymbolset", "starttabelle", "starttable", "starttablehead", "starttables", "starttabletail", "starttabulate", "starttabulatehead", "starttabulatetail", "starttagged", "starttbinom", "starttexcode", "starttexdefinition", "starttext", "starttextbackground", "starttextbackgroundmanual", "starttextcolor", "starttextcolorintent", "starttextflow", "starttextlinie", "startthema", "starttitel", "starttokens", "starttransparent", "starttypescript", "starttypescriptcollection", "startueberstreichen", "startueberstrichen", "startumgebung", "startumrahmt", "startumrahmtertext", "startunderdash", "startunderdashes", "startunderdot", "startunderdots", "startunderrandom", "startunderrandoms", "startunderstrike", "startunderstrikes", "startunframed", "startuniqueMPgraphic", "startuniqueMPpagegraphic", "startunpacked", "startunterabsatz", "startunterstreichen", "startunterstrichen", "startunterthema", "startunterunterabsatz", "startunterunterthema", "startunterunterunterabsatz", "startunterunterunterthema", "startunterunterunterunterabsatz", "startunterunterunterunterthema", "startusableMPgraphic", "startuseMPgraphic", "startusemathstyleparameter", "startusingbtxspecification", "startvbox", "startvboxregister", "startvboxtohbox", "startvboxtohboxseparator", "startviewerlayer", "startvtop", "startvtopregister", "startxcell", "startxcellgroup", "startxfrac", "startxgroup", "startxmldisplayverbatim", "startxmlinlineverbatim", "startxmlraw", "startxmlsetups", "startxrow", "startxrowgroup", "startxtable", "startxtablebody", "startxtablefoot", "startxtablehead", "startxtablenext", "startxxfrac", "startzeile", "startzitat", "startzitieren", "startzu", "stelleabsaetzeein", "stelleabsatznummerierungein", "stelleabschnittsblockein", "stelleanordnenein", "stelleaufzaehlungenein", "stelleausschnittein", "stellebeschriftungein", "stellebildunterschriftein", "stellebindestrichein", "stelleblankoein", "stelleblockein", "stelledrehenein", "stelleduennerumrissein", "stelleeinziehenein", "stelleengerein", "stellefarbeein", "stellefarbenein", "stellefeldein", "stellefelderin", "stellefliesstextein", "stellefusszeileein", "stellefusszeilentextein", "stellegefuelltesrechteckein", "stellegefuelltezeileein", "stellegegenueberplatzierenein", "stellegleitobjektein", "stellehintergruendeein", "stellehintergrundein", "stelleinteraktionein", "stelleinteraktionsbalkenein", "stelleinteraktionsbildschirmein", "stelleinteraktionsmenueein", "stellekommentarein", "stellekopfzahlein", "stellekopfzeileein", "stellekopfzeilentextein", "stellelayoutein", "stellelinienbreiteein", "stellelisteein", "stellemarginallinieein", "stellenobenein", "stellepaletteein", "stellepapierformatein", "stelleplatziegeteiltegleitobjekt", "stellepositionierenein", "stellepostenein", "stelleprogrammein", "stellepufferein", "stellerechteckein", "stellereferenzierenein", "stelleregisterein", "stelleseitenkommentarein", "stelleseitennummerein", "stelleseitennummeriernungein", "stelleseitenuebergangein", "stellesortierenein", "stellespaltenein", "stellespatiumein", "stellespracheein", "stellesymbolsetein", "stellesynonymein", "stelletabellenein", "stelletabulatorein", "stelletextein", "stelletextobenein", "stelletexttexteein", "stelletextumrissein", "stelletextuntenein", "stelletipein", "stelletippenein", "stelletoleranzein", "stelleueberschriftein", "stelleueberschriftenein", "stelleumbruchein", "stelleumrahmtein", "stelleuntenein", "stelleunterseitennummerein", "stelleurlein", "stelleversalienein", "stellezeilenabstandein", "stellezeilenein", "stellezeilennumerierungein", "stellezitierenein", "stellezusammengestelltelisteein", "stellezwischenraumein", "stopJScode", "stopJSpreamble", "stopMPclip", "stopMPcode", "stopMPdefinitions", "stopMPdrawing", "stopMPenvironment", "stopMPextensions", "stopMPinclusions", "stopMPinitializations", "stopMPpage", "stopMPpositiongraphic", "stopMPpositionmethod", "stopMPrun", "stopTABLE", "stopTABLEbody", "stopTABLEfoot", "stopTABLEhead", "stopTABLEnext", "stopTC", "stopTD", "stopTDs", "stopTEXpage", "stopTH", "stopTN", "stopTR", "stopTRs", "stopTX", "stopTY", "stopabbildung", "stopabsatz", "stopallmodes", "stoparrangedpages", "stopaside", "stopattachment", "stopaufzaehlung", "stopbar", "stopbinom", "stopbitmapimage", "stopblockquote", "stopbtxrenderingdefinitions", "stopbuffer", "stopbutton", "stopcatcodetable", "stopcharacteralign", "stopcheckedfences", "stopchemical", "stopcollect", "stopcollecting", "stopcolorintent", "stopcoloronly", "stopcolorset", "stopcolumns", "stopcolumnspan", "stopcombination", "stopcomment", "stopcontextcode", "stopcontextdefinitioncode", "stopctxfunction", "stopctxfunctiondefinition", "stopcurrentcolor", "stopcurrentlistentrywrapper", "stopdbinom", "stopdelimited", "stopdelimitedtext", "stopdfrac", "stopdisplaymath", "stopdmath", "stopdocument", "stopdurchgestrichen", "stopdurchstreichen", "stopeffect", "stopelement", "stopembeddedxtable", "stopendofline", "stopexceptions", "stopexpanded", "stopexpandedcollect", "stopextendedcatcodetable", "stopexternalfigurecollection", "stopfarbe", "stopfigure", "stopfitfieldframed", "stopfittingpage", "stopfloatcombination", "stopfont", "stopfontclass", "stopfontsolution", "stopformula", "stopformulas", "stopfrac", "stopframedcontent", "stopframedtext", "stopgrafik", "stopgridsnapping", "stophbox", "stophboxestohbox", "stophboxregister", "stophelptext", "stophiddenbar", "stophiding", "stophighlight", "stophilfetext", "stophintergrund", "stophyphenation", "stopimath", "stopindentation", "stopindentedtext", "stopinmframed", "stopinteraction", "stopinteraktionsmenue", "stopinterface", "stopintermezzo", "stopintertext", "stopitemgroup", "stopkapitel", "stopkleinerdurchschuss", "stopknockout", "stopkommentar", "stopkomponente", "stopkopf", "stoplayout", "stoplinecorrection", "stoplinefiller", "stoplinenumbering", "stoplinetable", "stoplinetablebody", "stoplinetablecell", "stoplinetablehead", "stoplocalfootnotes", "stoplocalheadsetup", "stoplocallinecorrection", "stoplocalnotes", "stoplocalsetups", "stoplua", "stopluacode", "stopluaparameterset", "stopluasetups", "stopmakeup", "stopmarginallinie", "stopmarginblock", "stopmarkedcontent", "stopmathmode", "stopmathstyle", "stopmatrices", "stopmcframed", "stopmdformula", "stopmframed", "stopmixedcolumns", "stopmode", "stopmodeset", "stopmodule", "stopmoduletestsection", "stopmpformula", "stopnamedsection", "stopnamedsubformulas", "stopnarrow", "stopnarrower", "stopnegative", "stopnicelyfilledbox", "stopnobar", "stopnointerference", "stopnotallmodes", "stopnotext", "stopnotmode", "stopopposite", "stopoutputstream", "stopoverlay", "stopoverprint", "stoppagecomment", "stoppagefigure", "stoppagegrid", "stoppagegridspan", "stoppagelayout", "stoppar", "stopparagraph", "stopparagraphs", "stopparagraphscell", "stopparbuilder", "stoppath", "stopplacepairedbox", "stopplatziereformel", "stoppos", "stoppositioning", "stoppositionoverlay", "stoppositive", "stoppostponing", "stopprocessassignmentcommand", "stopprocessassignmentlist", "stopprocesscommacommand", "stopprocesscommalist", "stopprodukt", "stopprojekt", "stopprotect", "stopprotectedcolors", "stoppublikation", "stoppunctuation", "stoprandomized", "stoprandomseed", "stoprawsetups", "stopreadingfile", "stopreferenceprefix", "stopregime", "stopregister", "stopreusableMPgraphic", "stopscript", "stopsdformula", "stopsectionblock", "stopsectionblockenvironment", "stopsectionlevel", "stopsetups", "stopsfrac", "stopshapebox", "stopshift", "stopsidebar", "stopsimplecolumns", "stopspecialitem", "stopspeech", "stopspformula", "stopspread", "stopstartstop", "stopstaticMPfigure", "stopstaticMPgraphic", "stopstrictinspectnextcharacter", "stopstructurepageregister", "stopstrut", "stopstyle", "stopsubformulas", "stopsubjectlevel", "stopsubsentence", "stopsubstack", "stopsymbolset", "stoptabelle", "stoptable", "stoptablehead", "stoptables", "stoptabletail", "stoptabulate", "stoptabulatehead", "stoptabulatetail", "stoptagged", "stoptbinom", "stoptexcode", "stoptexdefinition", "stoptext", "stoptextbackground", "stoptextbackgroundmanual", "stoptextcolor", "stoptextcolorintent", "stoptextflow", "stoptextlinie", "stopthema", "stoptitel", "stoptokens", "stoptransparent", "stoptypescript", "stoptypescriptcollection", "stopueberstreichen", "stopueberstrichen", "stopumgebung", "stopumrahmt", "stopumrahmtertext", "stopunderdash", "stopunderdashes", "stopunderdot", "stopunderdots", "stopunderrandom", "stopunderrandoms", "stopunderstrike", "stopunderstrikes", "stopunframed", "stopuniqueMPgraphic", "stopuniqueMPpagegraphic", "stopunpacked", "stopunterabsatz", "stopunterstreichen", "stopunterstrichen", "stopunterthema", "stopunterunterabsatz", "stopunterunterthema", "stopunterunterunterabsatz", "stopunterunterunterthema", "stopunterunterunterunterabsatz", "stopunterunterunterunterthema", "stopusableMPgraphic", "stopuseMPgraphic", "stopusemathstyleparameter", "stopusingbtxspecification", "stopvbox", "stopvboxregister", "stopvboxtohbox", "stopvboxtohboxseparator", "stopviewerlayer", "stopvtop", "stopvtopregister", "stopxcell", "stopxcellgroup", "stopxfrac", "stopxgroup", "stopxmldisplayverbatim", "stopxmlinlineverbatim", "stopxmlraw", "stopxmlsetups", "stopxrow", "stopxrowgroup", "stopxtable", "stopxtablebody", "stopxtablefoot", "stopxtablehead", "stopxtablenext", "stopxxfrac", "stopzeile", "stopzitat", "stopzitieren", "stopzu", "strictdoifelsenextoptional", "strictdoifnextoptionalelse", "stripcharacter", "strippedcsname", "stripspaces", "structurelistuservariable", "structurenumber", "structuretitle", "structureuservariable", "structurevariable", "strut", "strutdp", "strutht", "struthtdp", "struttedbox", "strutwd", "style", "styleinstance", "subpagenumber", "subsentence", "substituteincommalist", "subtractfeature", "swapcounts", "swapdimens", "swapface", "swapmacros", "swaptypeface", "switchstyleonly", "switchtocolor", "switchtointerlinespace", "symbol", "symbolreference", "synchronizeblank", "synchronizeindenting", "synchronizemarking", "synchronizeoutputstreams", "synchronizestrut", "synchronizewhitespace", "systemlog", "systemlogfirst", "systemloglast", "systemsetups", "tLeftarrow", "tLeftrightarrow", "tRightarrow", "tabelle", "tabulateautoline", "tabulateautorule", "tabulateline", "tabulaterule", "taggedctxcommand", "taggedlabeltexts", "tbinom", "tbox", "teilegleitobjekt", "tequal", "testandsplitstring", "testcolumn", "testfeature", "testfeatureonce", "testpage", "testpageonly", "testpagesync", "testtokens", "tex", "texdefinition", "texsetup", "textcitation", "textcite", "textcontrolspace", "textflowcollector", "textlinie", "textmath", "textminus", "textormathchar", "textplus", "textreferenz", "textvisiblespace", "tfrac", "thainumerals", "thefirstcharacter", "thema", "thenormalizedbodyfontsize", "theremainingcharacters", "thickspace", "thinspace", "thirdoffivearguments", "thirdoffourarguments", "thirdofsixarguments", "thirdofthreearguments", "thirdofthreeunexpanded", "thookleftarrow", "thookrightarrow", "threedigitrounding", "tibetannumerals", "tief", "tightlayer", "tiho", "tinyfont", "tip", "tippedatei", "tippen", "tippepuffer", "titel", "tlap", "tleftarrow", "tleftharpoondown", "tleftharpoonup", "tleftrightarrow", "tleftrightharpoons", "tmapsto", "tochar", "tolinenote", "topbox", "topleftbox", "toplinebox", "toprightbox", "topskippedbox", "tracecatcodetables", "tracedfontname", "traceoutputroutines", "tracepositions", "transparencycomponents", "transparent", "trel", "trightarrow", "trightharpoondown", "trightharpoonup", "trightleftharpoons", "trightoverleftarrow", "triplebond", "truefilename", "truefontname", "ttriplerel", "ttwoheadleftarrow", "ttwoheadrightarrow", "twodigitrounding", "tx", "txx", "typedefinedbuffer", "typeface", "typescriptone", "typescriptprefix", "typescriptthree", "typescripttwo", "typesetbuffer", "typesetfile", "uconvertnumber", "ueber", "uebersetzten", "uedcatcodecommand", "umgebung", "umrahmt", "umrahmtertext", "unbekant", "undefinevalue", "undepthed", "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", "unprotected", "unregisterhyphenationpattern", "unspaceafter", "unspaceargument", "unspaced", "unspacestring", "unterabsatz", "unterthema", "unterunterabsatz", "unterunterthema", "unterunterunterabsatz", "unterunterunterthema", "unterunterunterunterabsatz", "unterunterunterunterthema", "untexargument", "untexcommand", "uppercased", "uppercasestring", "upperleftdoubleninequote", "upperleftdoublesixquote", "upperleftsingleninequote", "upperleftsinglesixquote", "upperrightdoubleninequote", "upperrightdoublesixquote", "upperrightsingleninequote", "upperrightsinglesixquote", "url", "useMPenvironmentbuffer", "useMPgraphic", "useMPlibrary", "useMPrun", "useMPvariables", "useblankparameter", "usebodyfont", "usebodyfontparameter", "usebtxdataset", "usebtxdefinitions", "usecolors", "usecomponent", "usedummycolorparameter", "usedummystyleandcolor", "usedummystyleparameter", "useenvironment", "useexternalrendering", "usefigurebase", "usefile", "usegridparameter", "useindentingparameter", "useindentnextparameter", "useinterlinespaceparameter", "uselanguageparameter", "useluamodule", "usemathstyleparameter", "useproduct", "useprofileparameter", "useproject", "usereferenceparameter", "userpagenumber", "usesetupsparameter", "usestaticMPfigure", "usesubpath", "usetexmodule", "usetypescript", "usetypescriptfile", "usezipfile", "utfchar", "utflower", "utfupper", "utilityregisterlength", "vboxreference", "verbatim", "verbatimstring", "verbergebloecke", "verbergen", "verbosenumber", "vergleichefarbengruppe", "vergleichepalette", "version", "verticalgrowingbar", "verticalpositionbar", "verwendeJSscript", "verwendeURL", "verwendebloecke", "verwendeexteresdokument", "verwendeexterneabbildung", "verwendeexternestonstueck", "verwendemodul", "verwendesymbole", "verwendeurl", "vglue", "viewerlayer", "vl", "volleswort", "von", "vphantom", "vpos", "vsmash", "vsmashbox", "vsmashed", "vspace", "vspacing", "waehlebloeckeaus", "wdofstring", "wechselezumfliesstext", "widthofstring", "widthspanningtext", "withoutpt", "wochentag", "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", "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", "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", "Lua", "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", "MPwhd", "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", "TEXpage", "TaBlE", "TeX", "TheNormalizedFontSize", "TransparencyHack", "VerboseNumber", "WEEKDAY", "WORD", "WORDS", "WidthSpanningText", "Word", "Words", "XETEX", "XeTeX", "abjadnaivenumerals", "abjadnodotnumerals", "abjadnumerals", "about", "activatespacehandler", "adaptcollector", "adaptfontfeature", "adaptlayout", "adaptpapersize", "addfeature", "addtoJSpreamble", "addtocommalist", "addvalue", "aftersplitstring", "aftertestandsplitstring", "alignmentcharacter", "allinputpaths", "alphabeticnumerals", "alwayscitation", "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", "aside", "assignalfadimension", "assigndimen", "assigndimension", "assignifempty", "assigntranslation", "assignvalue", "assignwidth", "assumelongusagecs", "astype", "at", "atpage", "attachment", "autocap", "autodirhbox", "autodirvbox", "autodirvtop", "autoinsertnextspace", "automathematics", "autosetups", "availablehsize", "averagecharwidth", "background", "backgroundimage", "backgroundimagefill", "backgroundline", "basegrid", "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", "blockligatures", "blockquote", "bodyfontenvironmentlist", "bodyfontsize", "bold", "boldface", "bolditalic", "boldslanted", "bookmark", "booleanmodevalue", "bottombox", "bottomleftbox", "bottomrightbox", "boxcursor", "boxmarker", "boxofsize", "boxreference", "bpos", "bthiddencitation", "btxabbreviatedjournal", "btxaddjournal", "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", "btxlistcitation", "btxloadjournalist", "btxoneorrange", "btxremapauthor", "btxsavejournalist", "btxsetup", "btxsingularorplural", "btxsingularplural", "btxtextcitation", "button", "calligraphic", "camel", "cap", "catcodetablename", "cbox", "centerbox", "centeredbox", "centerednextbox", "cfrac", "chapter", "character", "characters", "chardescription", "charwidthlanguage", "checkcharacteralign", "checkedchar", "checkedfiller", "checkedstrippedcsname", "checkinjector", "checknextindentation", "checknextinjector", "checkpage", "checkparameters", "checkpreviousinjector", "checksoundtrack", "checktwopassdata", "checkvariables", "chem", "chemical", "chemicalbottext", "chemicalmidtext", "chemicalsymbol", "chemicaltext", "chemicaltoptext", "chineseallnumerals", "chinesecapnumerals", "chinesenumerals", "citation", "cite", "clap", "classfont", "cldcommand", "cldcontext", "cldloadfile", "cldprocessfile", "cleftarrow", "clip", "clonefield", "collect", "collectedtext", "collectexpanded", "color", "colorbar", "colorcomponents", "colored", "coloronly", "colorvalue", "column", "columnbreak", "combinepages", "commalistelement", "commalistsentence", "commalistsize", "comment", "comparecolorgroup", "comparedimension", "comparedimensioneps", "comparepalet", "completebtxrendering", "completelist", "completelistofpublications", "completelistofsorts", "completelistofsynonyms", "completepagenumber", "completeregister", "complexorsimple", "complexorsimpleempty", "component", "composedcollector", "composedlayer", "compresult", "constantdimen", "constantdimenargument", "constantemptyargument", "constantnumber", "constantnumberargument", "contentreference", "continuednumber", "continueifinputfile", "convertargument", "convertcommand", "convertedcounter", "converteddimen", "convertedsubcounter", "convertmonth", "convertnumber", "convertvalue", "convertvboxtohbox", "copyfield", "copypages", "copyparameters", "copyposition", "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", "datasetvariable", "date", "dayoftheweek", "dayspermonth", "dbinom", "decrement", "decrementcounter", "decrementedcounter", "decrementpagenumber", "decrementsubpagenumber", "decrementvalue", "defaultinterface", "defaultobjectpage", "defaultobjectreference", "defcatcodecommand", "defconvertedargument", "defconvertedcommand", "defconvertedvalue", "define", "defineMPinstance", "defineTABLEsetup", "defineactivecharacter", "definealternativestyle", "defineanchor", "defineattachment", "defineattribute", "definebackground", "definebar", "defineblock", "definebodyfont", "definebodyfontenvironment", "definebodyfontswitch", "definebreakpoint", "definebreakpoints", "definebtx", "definebtxdataset", "definebtxregister", "definebtxrendering", "definebuffer", "definebutton", "definecapitals", "definecharacterkerning", "definecharacterspacing", "definechemical", "definechemicals", "definechemicalsymbol", "definecollector", "definecolor", "definecolorgroup", "definecolumnbreak", "definecombination", "definecombinedlist", "definecomment", "definecomplexorsimple", "definecomplexorsimpleempty", "defineconversion", "defineconversionset", "definecounter", "definedataset", "definedelimitedtext", "definedescription", "definedfont", "defineeffect", "defineenumeration", "defineexpandable", "defineexternalfigure", "definefallbackfamily", "definefield", "definefieldbody", "definefieldbodyset", "definefieldcategory", "definefieldstack", "definefiguresymbol", "definefileconstant", "definefilefallback", "definefilesynonym", "definefiller", "definefirstline", "definefittingpage", "definefloat", "definefont", "definefontalternative", "definefontfallback", "definefontfamily", "definefontfamilypreset", "definefontfeature", "definefontfile", "definefontsize", "definefontsolution", "definefontstyle", "definefontsynonym", "defineformula", "defineformulaalternative", "defineformulaframed", "defineframed", "defineframedcontent", "defineframedtext", "definefrozenfont", "defineglobalcolor", "definegraphictypesynonym", "definegridsnapping", "definehbox", "definehead", "defineheadalternative", "definehelp", "definehigh", "definehighlight", "definehspace", "definehypenationfeatures", "defineindentedtext", "defineindenting", "defineinitial", "defineinsertion", "defineinteraction", "defineinteractionbar", "defineinteractionmenu", "defineinterfaceconstant", "defineinterfaceelement", "defineinterfacevariable", "defineinterlinespace", "defineintermediatecolor", "defineitemgroup", "defineitems", "definelabel", "definelabelclass", "definelayer", "definelayerpreset", "definelayout", "definelinefiller", "definelinenote", "definelinenumbering", "definelines", "definelist", "definelistalternative", "definelistextra", "definelow", "definelowhigh", "definelowmidhigh", "definemakeup", "definemarginblock", "definemargindata", "definemarker", "definemarking", "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", "definenamespace", "definenarrower", "definenote", "defineornament", "defineoutputroutine", "defineoutputroutinecommand", "defineoverlay", "definepage", "definepagebreak", "definepagechecker", "definepagegrid", "definepagegridarea", "definepagegridspan", "definepageinjection", "definepageinjectionalternative", "definepageshift", "definepagestate", "definepairedbox", "definepalet", "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", "dimensiontocount", "directcolor", "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", "dorepeatwithcommand", "doreplacefeature", "doresetandafffeature", "doresetattribute", "dorotatebox", "dosetattribute", "dosetleftskipadaption", "dosetrightskipadaption", "dosetupcheckedinterlinespace", "doseventupleargument", "doseventupleempty", "dosingleargument", "dosingleempty", "dosinglegroupempty", "dosixtupleargument", "dosixtupleempty", "dostepwiserecurse", "dosubtractfeature", "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", "enskip", "enspace", "env", "environment", "envvar", "eoverbarfill", "eoverbracefill", "eoverbracketfill", "eoverparentfill", "epos", "equaldigits", "erightarrowfill", "erightharpoondownfill", "erightharpoonupfill", "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", "fence", "fenced", "fetchallmarkings", "fetchallmarks", "fetchmark", "fetchmarking", "fetchonemark", "fetchonemarking", "fetchruntinecommand", "fetchtwomarkings", "fetchtwomarks", "field", "fieldbody", "fieldstack", "fifthoffivearguments", "fifthofsixarguments", "figure", "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", "flushboxregister", "flushcollector", "flushlayer", "flushlocalfloats", "flushnextbox", "flushnotes", "flushoutputstream", "flushshapebox", "flushtextflow", "flushtokens", "flushtoks", "fontalternative", "fontbody", "fontchar", "fontcharbyindex", "fontclass", "fontclassname", "fontface", "fontfeaturelist", "fontsize", "fontstyle", "footnotetext", "forcecharacterstripping", "forcelocalfloats", "forgeteverypar", "forgetparameters", "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", "getprivatechar", "getprivateslot", "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", "goto", "gotobox", "gotopage", "grabbufferdata", "grabbufferdatadirect", "grabuntil", "graphic", "graycolor", "grayvalue", "greedysplitstring", "greeknumerals", "grid", "groupedcommand", "gsetboxllx", "gsetboxlly", "gujaratinumerals", "gurmurkhinumerals", "hairline", "hairspace", "halfwaybox", "handletokens", "handwritten", "hash", "hboxofvbox", "hboxreference", "hdofstring", "headhbox", "headnumber", "headnumbercontent", "headnumberdistance", "headnumberwidth", "headreferenceattributes", "headsetupspacing", "headtextcontent", "headtextdistance", "headtextwidth", "headvbox", "headwidth", "heightanddepthofstring", "heightofstring", "heightspanningtext", "helptext", "hglue", "hiddenbar", "hiddencitation", "hiddencite", "hideblocks", "hiding", "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", "incrementcounter", "incrementedcounter", "incrementpagenumber", "incrementsubpagenumber", "incrementvalue", "indentation", "infofont", "infofontbold", "inframed", "infull", "inheritparameter", "inhibitblank", "initializeboxstack", "inline", "inlinebuffer", "inlinedbox", "inlinemath", "inlinemathematics", "inlinemessage", "inlineordisplaymath", "inlinerange", "inmaframed", "innerflushshapebox", "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", "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", "intermezzo", "intertext", "invokepageheandler", "istltdir", "istrtdir", "italic", "italicbold", "italiccorrection", "item", "itemize", "items", "itemtag", "jobfilename", "jobfilesuffix", "kap", "keepblocks", "keeplinestogether", "keepunwantedspaces", "kerncharacters", "koreancirclenumerals", "koreannumerals", "koreannumeralsc", "koreannumeralsp", "koreanparentnumerals", "language", "languageCharacters", "languagecharacters", "languagecharwidth", "lastcounter", "lastcountervalue", "lastdigit", "lastlinewidth", "lastnaturalboxdp", "lastnaturalboxht", "lastnaturalboxwd", "lastpredefinedsymbol", "lastrealpage", "lastrealpagenumber", "lastsubcountervalue", "lastsubpage", "lastsubpagenumber", "lasttwodigits", "lastuserpage", "lastuserpagenumber", "lateluacode", "layeredtext", "layerheight", "layerwidth", "lazysavetaggedtwopassdata", "lazysavetwopassdata", "lbox", "left", "leftbottombox", "leftbox", "lefthbox", "leftorrighthbox", "leftorrightvbox", "leftorrightvtop", "leftskipadaption", "leftsubguillemot", "lefttopbox", "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", "limtatefirstline", "linespanningtext", "linethickness", "listcitation", "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", "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", "margindata", "markcontent", "marking", "markinjector", "mat", "math", "mathbf", "mathbi", "mathblackboard", "mathbs", "mathcommand", "mathdefault", "mathematics", "mathfraktur", "mathfunction", "mathit", "mathitalic", "mathop", "mathrm", "mathscript", "mathsl", "mathss", "mathtext", "mathtextbf", "mathtextbi", "mathtextbs", "mathtextit", "mathtextsl", "mathtexttf", "mathtf", "mathtriplet", "mathtt", "mathupright", "mathword", "mathwordbf", "mathwordbi", "mathwordbs", "mathwordit", "mathwordsl", "mathwordtf", "mbox", "mcframed", "md", "measure", "measured", "medskip", "medspace", "menubutton", "mequal", "message", "metaTeX", "mfence", "mfunction", "mfunctionlabeltext", "mhbox", "mhookleftarrow", "mhookrightarrow", "middle", "middlebox", "midhbox", "minimalhbox", "mirror", "mixedcaps", "mkvibuffer", "mleftarrow", "mleftharpoondown", "mleftharpoonup", "mleftrightarrow", "mleftrightharpoons", "mmapsto", "moduleparameter", "molecule", "mono", "monobold", "mononormal", "month", "monthlong", "monthshort", "mp", "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", "nobar", "nocap", "nocitation", "nocite", "nodetostring", "noffigurepages", "noflines", "noflocalfloats", "noheaderandfooterlines", "noindentation", "noitem", "nonfrenchspacing", "nonmathematics", "normal", "normalboldface", "normalframedwithsettings", "normalizebodyfontsize", "normalizedfontsize", "normalizefontdepth", "normalizefontheight", "normalizefontline", "normalizefontwidth", "normalizetextdepth", "normalizetextheight", "normalizetextline", "normalizetextwidth", "normaltypeface", "nospace", "note", "notesymbol", "notopandbottomlines", "ntimes", "numberofpoints", "numbers", "obeydepth", "objectdepth", "objectheight", "objectmargin", "objectwidth", "obox", "offset", "offsetbox", "onedigitrounding", "ordinaldaynumber", "ordinalstr", "ornamenttext", "outputfilename", "outputstreambox", "outputstreamcopy", "outputstreamunvbox", "outputstreamunvcopy", "over", "overbar", "overbars", "overbartext", "overbarunderbar", "overbrace", "overbracetext", "overbraceunderbrace", "overbracket", "overbrackettext", "overbracketunderbracket", "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", "pagenumber", "pagereference", "pagestaterealpage", "paletsize", "pdfTeX", "pdfactualtext", "pdfbackendactualtext", "pdfbackendcurrentresources", "pdfbackendsetcatalog", "pdfbackendsetcolorspace", "pdfbackendsetextgstate", "pdfbackendsetinfo", "pdfbackendsetname", "pdfbackendsetpageattribute", "pdfbackendsetpageresource", "pdfbackendsetpagesattribute", "pdfbackendsetpattern", "pdfbackendsetshade", "pdfcolor", "pdfeTeX", "percent", "percentdimen", "periods", "permitcaretescape", "permitcircumflexescape", "permitspacesbetweengroups", "persiandecimals", "persiannumerals", "phantom", "phantombox", "pickupgroupedcommand", "placeattachments", "placebookmarks", "placebtxrendering", "placecitation", "placecombinedlist", "placecomments", "placecurrentformulanumber", "placedbox", "placefloat", "placefloatwithsetups", "placefootnotes", "placeformula", "placeframed", "placeheadnumber", "placeheadtext", "placehelp", "placeinitial", "placelayer", "placelayeredtext", "placelist", "placelistofpublications", "placelistofsorts", "placelistofsynonyms", "placelocalfootnotes", "placelocalnotes", "placement", "placenamedfloat", "placenamedformula", "placenotes", "placeongrid", "placeontopofeachother", "placepagenumber", "placepairedbox", "placeparallel", "placerawlist", "placeregister", "placerenderingwindow", "placesidebyside", "placesubformula", "popattribute", "popmacro", "popmode", "popsystemmode", "position", "positionoverlay", "positionregionoverlay", "postponenotes", "predefinedfont", "predefinefont", "predefinesymbol", "prefixedpagenumber", "prependetoks", "prependgvalue", "prependtocommalist", "prependtoks", "prependtoksonce", "prependvalue", "presetdocument", "presetfieldsymbols", "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", "profiledbox", "profilegivenbox", "program", "project", "pseudoMixedCapped", "pseudoSmallCapped", "pseudoSmallcapped", "pseudosmallcapped", "purenumber", "pushattribute", "pushbutton", "pushmacro", "pushmode", "pushoutputstream", "pushsystemmode", "qquad", "quad", "quads", "quitcommalist", "quitprevcommalist", "quittypescriptscanning", "quotation", "quote", "raisebox", "randomizetext", "randomnumber", "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", "replaceincommalist", "replaceword", "rescan", "rescanwithsetup", "resetMPdrawing", "resetMPenvironment", "resetMPinstance", "resetallattributes", "resetandaddfeature", "resetbar", "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", "resolvedglyphdirect", "resolvedglyphstyled", "restartcounter", "restorebox", "restorecatcodes", "restorecounter", "restorecurrentattributes", "restoreendofline", "restoreglobalbodyfont", "reusableMPgraphic", "reuseMPgraphic", "reuserandomseed", "revivefeature", "rfence", "rhbox", "right", "rightbottombox", "rightbox", "righthbox", "rightorleftpageaction", "rightskipadaption", "rightsubguillemot", "righttolefthbox", "righttoleftvbox", "righttoleftvtop", "righttopbox", "rlap", "robustaddtocommalist", "robustdoifelseinset", "robustdoifinsetelse", "robustpretocommalist", "rollbutton", "roman", "romannumerals", "rotate", "rtop", "ruledhbox", "ruledhpack", "ruledmbox", "ruledtopv", "ruledtpack", "ruledvbox", "ruledvpack", "ruledvtop", "runMPbuffer", "runninghbox", "safechar", "sans", "sansbold", "sansnormal", "sansserif", "savebox", "savebtxdataset", "savebuffer", "savecounter", "savecurrentattributes", "savenormalmeaning", "savetaggedtwopassdata", "savetwopassdata", "sbox", "scale", "screen", "sd", "secondoffivearguments", "secondoffourarguments", "secondofsixarguments", "secondofthreearguments", "secondofthreeunexpanded", "secondoftwoarguments", "secondoftwounexpanded", "section", "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", "setfractions", "setgmeasure", "setgvalue", "setgvariable", "setgvariables", "sethboxregister", "sethyphenatedurlafter", "sethyphenatedurlbefore", "sethyphenatedurlnormal", "sethyphenationfeatures", "setinitial", "setinjector", "setinteraction", "setinterfacecommand", "setinterfaceconstant", "setinterfaceelements", "setinterfacemessage", "setinterfacevariable", "setinternalrendering", "setitaliccorrection", "setlayer", "setlayerframed", "setlayertext", "setlinefiller", "setlocalhsize", "setmainbodyfont", "setmainparbuilder", "setmarker", "setmarking", "setmathstyle", "setmeasure", "setmessagetext", "setmode", "setnostrut", "setnote", "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", "setupMPgraphics", "setupMPinstance", "setupMPpage", "setupMPvariables", "setupTABLE", "setupTEXpage", "setuparranging", "setupattachment", "setupbackend", "setupbackground", "setupbackgrounds", "setupbar", "setupblackrules", "setupblank", "setupbleeding", "setupblock", "setupbodyfont", "setupbookmark", "setupbottom", "setupbottomtexts", "setupbtx", "setupbtxdataset", "setupbtxlist", "setupbtxregister", "setupbtxrendering", "setupbuffer", "setupbutton", "setupcapitals", "setupcaption", "setupcharacterkerning", "setupcharacterspacing", "setupchemical", "setupchemicalframed", "setupclipping", "setupcollector", "setupcolor", "setupcolors", "setupcolumns", "setupcolumnspan", "setupcombination", "setupcombinedlist", "setupcomment", "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", "setupfonts", "setupfontsolution", "setupfooter", "setupfootertexts", "setupforms", "setupformula", "setupformulaframed", "setupframed", "setupframedcontent", "setupframedtext", "setupglobalreferenceprefix", "setuphead", "setupheadalternative", "setupheader", "setupheadertexts", "setupheadnumber", "setupheads", "setuphelp", "setuphigh", "setuphighlight", "setuphyphenation", "setuphyphenmark", "setupindentedtext", "setupindenting", "setupinitial", "setupinsertion", "setupinteraction", "setupinteractionbar", "setupinteractionmenu", "setupinteractionscreen", "setupinterlinespace", "setupitaliccorrection", "setupitemgroup", "setupitemizations", "setupitems", "setuplabel", "setuplanguage", "setuplayer", "setuplayeredtext", "setuplayout", "setuplayouttext", "setuplinefiller", "setuplinefillers", "setuplinenote", "setuplinenumbering", "setuplines", "setuplinetable", "setuplinewidth", "setuplist", "setuplistalternative", "setuplistextra", "setuplocalfloats", "setuplocalinterlinespace", "setuplow", "setuplowhigh", "setuplowmidhigh", "setupmakeup", "setupmarginblock", "setupmargindata", "setupmarginframed", "setupmarginrule", "setupmarginrules", "setupmarking", "setupmathalignment", "setupmathcases", "setupmathematics", "setupmathfence", "setupmathfraction", "setupmathframed", "setupmathmatrix", "setupmathornament", "setupmathradical", "setupmathstackers", "setupmathstyle", "setupmixedcolumns", "setupmodule", "setupnarrower", "setupnotation", "setupnotations", "setupnote", "setupnotes", "setupoffset", "setupoffsetbox", "setupoppositeplacing", "setupoutputroutine", "setuppagechecker", "setuppagecomment", "setuppagegrid", "setuppagegridarea", "setuppagegridareatext", "setuppagegridlines", "setuppagegridspan", "setuppagegridstart", "setuppageinjection", "setuppageinjectionalternative", "setuppagenumber", "setuppagenumbering", "setuppageshift", "setuppagestate", "setuppagetransitions", "setuppairedbox", "setuppalet", "setuppaper", "setuppapersize", "setupparagraph", "setupparagraphintro", "setupparagraphnumbering", "setupparagraphs", "setupparallel", "setupperiods", "setupplacement", "setuppositionbar", "setuppositioning", "setupprocessor", "setupprofile", "setupprograms", "setupquotation", "setupquote", "setuprealpagenumber", "setupreferenceformat", "setupreferenceprefix", "setupreferencestructureprefix", "setupreferencing", "setupregister", "setupregisters", "setuprenderingwindow", "setuprotate", "setups", "setupscale", "setupscript", "setupscripts", "setupsectionblock", "setupselector", "setupshift", "setupsidebar", "setupsorting", "setupspacing", "setupspellchecking", "setupstartstop", "setupstretched", "setupstruts", "setupstyle", "setupsubformula", "setupsubpagenumber", "setupsymbolset", "setupsynonyms", "setuptables", "setuptabulate", "setuptabulation", "setuptagging", "setuptext", "setuptextbackground", "setuptextflow", "setuptextrules", "setuptexttexts", "setupthinrules", "setuptolerance", "setuptooltip", "setuptop", "setuptoptexts", "setuptype", "setuptyping", "setupunit", "setupurl", "setupuserpagenumber", "setupversion", "setupviewerlayer", "setupvspacing", "setupwhitespace", "setupwithargument", "setupwithargumentswapped", "setupxml", "setupxtable", "setuvalue", "setuxvalue", "setvalue", "setvariable", "setvariables", "setvboxregister", "setvisualizerfont", "setvtopregister", "setwidthof", "setxmeasure", "setxvalue", "setxvariable", "setxvariables", "sfrac", "shapedhbox", "showallmakeup", "showattributes", "showbodyfont", "showbodyfontenvironment", "showboxes", "showbtxdatasetauthors", "showbtxdatasetcompleteness", "showbtxdatasetfields", "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", "simplegroupedcommand", "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", "someheadnumber", "somekindoftab", "someline", "somelocalfloat", "somenamedheadnumber", "someplace", "somewhere", "sp", "space", "spanishNumerals", "spanishnumerals", "speech", "splitatasterisk", "splitatcolon", "splitatcolons", "splitatcomma", "splitdfrac", "splitfilename", "splitfloat", "splitfrac", "splitoffbase", "splitofffull", "splitoffkind", "splitoffname", "splitoffpath", "splitoffroot", "splitofftokens", "splitofftype", "splitstring", "spreadhbox", "sqrt", "stackrel", "startJScode", "startJSpreamble", "startMPclip", "startMPcode", "startMPdefinitions", "startMPdrawing", "startMPenvironment", "startMPextensions", "startMPinclusions", "startMPinitializations", "startMPpage", "startMPpositiongraphic", "startMPpositionmethod", "startMPrun", "startTABLE", "startTABLEbody", "startTABLEfoot", "startTABLEhead", "startTABLEnext", "startTC", "startTD", "startTDs", "startTEXpage", "startTH", "startTN", "startTR", "startTRs", "startTX", "startTY", "startallmodes", "startarrangedpages", "startaside", "startattachment", "startbackground", "startbar", "startbinom", "startbitmapimage", "startblockquote", "startbtxrenderingdefinitions", "startbuffer", "startbutton", "startcatcodetable", "startchapter", "startcharacteralign", "startcheckedfences", "startchemical", "startcollect", "startcollecting", "startcolor", "startcolorintent", "startcoloronly", "startcolorset", "startcolumns", "startcolumnspan", "startcombination", "startcomment", "startcomponent", "startcontextcode", "startcontextdefinitioncode", "startctxfunction", "startctxfunctiondefinition", "startcurrentcolor", "startcurrentlistentrywrapper", "startdbinom", "startdelimited", "startdelimitedtext", "startdfrac", "startdisplaymath", "startdmath", "startdocument", "starteffect", "startelement", "startembeddedxtable", "startendofline", "startenvironment", "startexceptions", "startexpanded", "startexpandedcollect", "startextendedcatcodetable", "startexternalfigurecollection", "startfigure", "startfitfieldframed", "startfittingpage", "startfloatcombination", "startfont", "startfontclass", "startfontsolution", "startformula", "startformulas", "startfrac", "startframed", "startframedcontent", "startframedtext", "startgoto", "startgraphic", "startgridsnapping", "starthbox", "starthboxestohbox", "starthboxregister", "starthead", "starthelptext", "starthiddenbar", "starthiding", "starthighlight", "starthyphenation", "startimath", "startindentation", "startindentedtext", "startinmframed", "startinteraction", "startinteractionmenu", "startinterface", "startintermezzo", "startintertext", "startitem", "startitemgroup", "startitemize", "startknockout", "startlayout", "startline", "startlinecorrection", "startlinefiller", "startlinenumbering", "startlinetable", "startlinetablebody", "startlinetablecell", "startlinetablehead", "startlocalfootnotes", "startlocalheadsetup", "startlocallinecorrection", "startlocalnotes", "startlocalsetups", "startlua", "startluacode", "startluaparameterset", "startluasetups", "startmakeup", "startmarginblock", "startmarginrule", "startmarkedcontent", "startmathmode", "startmathstyle", "startmatrices", "startmcframed", "startmdformula", "startmframed", "startmixedcolumns", "startmode", "startmodeset", "startmodule", "startmoduletestsection", "startmpformula", "startnamedsection", "startnamedsubformulas", "startnarrow", "startnarrower", "startnegative", "startnicelyfilledbox", "startnobar", "startnointerference", "startnotallmodes", "startnotext", "startnotmode", "startopposite", "startoutputstream", "startoverbar", "startoverbars", "startoverlay", "startoverprint", "startoverstrike", "startoverstrikes", "startpacked", "startpagecomment", "startpagefigure", "startpagegrid", "startpagegridspan", "startpagelayout", "startpar", "startparagraph", "startparagraphs", "startparagraphscell", "startparbuilder", "startpath", "startplaceformula", "startplacepairedbox", "startpositioning", "startpositionoverlay", "startpositive", "startpostponing", "startprocessassignmentcommand", "startprocessassignmentlist", "startprocesscommacommand", "startprocesscommalist", "startproduct", "startproject", "startprotect", "startprotectedcolors", "startpublication", "startpunctuation", "startquotation", "startquote", "startrandomized", "startrandomseed", "startrawsetups", "startreadingfile", "startreferenceprefix", "startregime", "startregister", "startreusableMPgraphic", "startscript", "startsdformula", "startsection", "startsectionblock", "startsectionblockenvironment", "startsectionlevel", "startsetups", "startsfrac", "startshapebox", "startshift", "startsidebar", "startsimplecolumns", "startspecialitem", "startspeech", "startspformula", "startspread", "startstartstop", "startstaticMPfigure", "startstaticMPgraphic", "startstrictinspectnextcharacter", "startstructurepageregister", "startstrut", "startstyle", "startsubformulas", "startsubject", "startsubjectlevel", "startsubsection", "startsubsentence", "startsubstack", "startsubsubject", "startsubsubsection", "startsubsubsubject", "startsubsubsubsection", "startsubsubsubsubject", "startsubsubsubsubsection", "startsubsubsubsubsubject", "startsymbolset", "starttable", "starttablehead", "starttables", "starttabletail", "starttabulate", "starttabulatehead", "starttabulatetail", "starttagged", "starttbinom", "starttexcode", "starttexdefinition", "starttext", "starttextbackground", "starttextbackgroundmanual", "starttextcolor", "starttextcolorintent", "starttextflow", "starttextrule", "starttitle", "starttokens", "starttransparent", "starttypescript", "starttypescriptcollection", "startunderbar", "startunderbars", "startunderdash", "startunderdashes", "startunderdot", "startunderdots", "startunderrandom", "startunderrandoms", "startunderstrike", "startunderstrikes", "startunframed", "startuniqueMPgraphic", "startuniqueMPpagegraphic", "startunpacked", "startusableMPgraphic", "startuseMPgraphic", "startusemathstyleparameter", "startusingbtxspecification", "startvbox", "startvboxregister", "startvboxtohbox", "startvboxtohboxseparator", "startviewerlayer", "startvtop", "startvtopregister", "startxcell", "startxcellgroup", "startxfrac", "startxgroup", "startxmldisplayverbatim", "startxmlinlineverbatim", "startxmlraw", "startxmlsetups", "startxrow", "startxrowgroup", "startxtable", "startxtablebody", "startxtablefoot", "startxtablehead", "startxtablenext", "startxxfrac", "stopJScode", "stopJSpreamble", "stopMPclip", "stopMPcode", "stopMPdefinitions", "stopMPdrawing", "stopMPenvironment", "stopMPextensions", "stopMPinclusions", "stopMPinitializations", "stopMPpage", "stopMPpositiongraphic", "stopMPpositionmethod", "stopMPrun", "stopTABLE", "stopTABLEbody", "stopTABLEfoot", "stopTABLEhead", "stopTABLEnext", "stopTC", "stopTD", "stopTDs", "stopTEXpage", "stopTH", "stopTN", "stopTR", "stopTRs", "stopTX", "stopTY", "stopallmodes", "stoparrangedpages", "stopaside", "stopattachment", "stopbackground", "stopbar", "stopbinom", "stopbitmapimage", "stopblockquote", "stopbtxrenderingdefinitions", "stopbuffer", "stopbutton", "stopcatcodetable", "stopchapter", "stopcharacteralign", "stopcheckedfences", "stopchemical", "stopcollect", "stopcollecting", "stopcolor", "stopcolorintent", "stopcoloronly", "stopcolorset", "stopcolumns", "stopcolumnspan", "stopcombination", "stopcomment", "stopcomponent", "stopcontextcode", "stopcontextdefinitioncode", "stopctxfunction", "stopctxfunctiondefinition", "stopcurrentcolor", "stopcurrentlistentrywrapper", "stopdbinom", "stopdelimited", "stopdelimitedtext", "stopdfrac", "stopdisplaymath", "stopdmath", "stopdocument", "stopeffect", "stopelement", "stopembeddedxtable", "stopendofline", "stopenvironment", "stopexceptions", "stopexpanded", "stopexpandedcollect", "stopextendedcatcodetable", "stopexternalfigurecollection", "stopfigure", "stopfitfieldframed", "stopfittingpage", "stopfloatcombination", "stopfont", "stopfontclass", "stopfontsolution", "stopformula", "stopformulas", "stopfrac", "stopframed", "stopframedcontent", "stopframedtext", "stopgoto", "stopgraphic", "stopgridsnapping", "stophbox", "stophboxestohbox", "stophboxregister", "stophead", "stophelptext", "stophiddenbar", "stophiding", "stophighlight", "stophyphenation", "stopimath", "stopindentation", "stopindentedtext", "stopinmframed", "stopinteraction", "stopinteractionmenu", "stopinterface", "stopintermezzo", "stopintertext", "stopitem", "stopitemgroup", "stopitemize", "stopknockout", "stoplayout", "stopline", "stoplinecorrection", "stoplinefiller", "stoplinenumbering", "stoplinetable", "stoplinetablebody", "stoplinetablecell", "stoplinetablehead", "stoplocalfootnotes", "stoplocalheadsetup", "stoplocallinecorrection", "stoplocalnotes", "stoplocalsetups", "stoplua", "stopluacode", "stopluaparameterset", "stopluasetups", "stopmakeup", "stopmarginblock", "stopmarginrule", "stopmarkedcontent", "stopmathmode", "stopmathstyle", "stopmatrices", "stopmcframed", "stopmdformula", "stopmframed", "stopmixedcolumns", "stopmode", "stopmodeset", "stopmodule", "stopmoduletestsection", "stopmpformula", "stopnamedsection", "stopnamedsubformulas", "stopnarrow", "stopnarrower", "stopnegative", "stopnicelyfilledbox", "stopnobar", "stopnointerference", "stopnotallmodes", "stopnotext", "stopnotmode", "stopopposite", "stopoutputstream", "stopoverbar", "stopoverbars", "stopoverlay", "stopoverprint", "stopoverstrike", "stopoverstrikes", "stoppacked", "stoppagecomment", "stoppagefigure", "stoppagegrid", "stoppagegridspan", "stoppagelayout", "stoppar", "stopparagraph", "stopparagraphs", "stopparagraphscell", "stopparbuilder", "stoppath", "stopplaceformula", "stopplacepairedbox", "stoppositioning", "stoppositionoverlay", "stoppositive", "stoppostponing", "stopprocessassignmentcommand", "stopprocessassignmentlist", "stopprocesscommacommand", "stopprocesscommalist", "stopproduct", "stopproject", "stopprotect", "stopprotectedcolors", "stoppublication", "stoppunctuation", "stopquotation", "stopquote", "stoprandomized", "stoprandomseed", "stoprawsetups", "stopreadingfile", "stopreferenceprefix", "stopregime", "stopregister", "stopreusableMPgraphic", "stopscript", "stopsdformula", "stopsection", "stopsectionblock", "stopsectionblockenvironment", "stopsectionlevel", "stopsetups", "stopsfrac", "stopshapebox", "stopshift", "stopsidebar", "stopsimplecolumns", "stopspecialitem", "stopspeech", "stopspformula", "stopspread", "stopstartstop", "stopstaticMPfigure", "stopstaticMPgraphic", "stopstrictinspectnextcharacter", "stopstructurepageregister", "stopstrut", "stopstyle", "stopsubformulas", "stopsubject", "stopsubjectlevel", "stopsubsection", "stopsubsentence", "stopsubstack", "stopsubsubject", "stopsubsubsection", "stopsubsubsubject", "stopsubsubsubsection", "stopsubsubsubsubject", "stopsubsubsubsubsection", "stopsubsubsubsubsubject", "stopsymbolset", "stoptable", "stoptablehead", "stoptables", "stoptabletail", "stoptabulate", "stoptabulatehead", "stoptabulatetail", "stoptagged", "stoptbinom", "stoptexcode", "stoptexdefinition", "stoptext", "stoptextbackground", "stoptextbackgroundmanual", "stoptextcolor", "stoptextcolorintent", "stoptextflow", "stoptextrule", "stoptitle", "stoptokens", "stoptransparent", "stoptypescript", "stoptypescriptcollection", "stopunderbar", "stopunderbars", "stopunderdash", "stopunderdashes", "stopunderdot", "stopunderdots", "stopunderrandom", "stopunderrandoms", "stopunderstrike", "stopunderstrikes", "stopunframed", "stopuniqueMPgraphic", "stopuniqueMPpagegraphic", "stopunpacked", "stopusableMPgraphic", "stopuseMPgraphic", "stopusemathstyleparameter", "stopusingbtxspecification", "stopvbox", "stopvboxregister", "stopvboxtohbox", "stopvboxtohboxseparator", "stopviewerlayer", "stopvtop", "stopvtopregister", "stopxcell", "stopxcellgroup", "stopxfrac", "stopxgroup", "stopxmldisplayverbatim", "stopxmlinlineverbatim", "stopxmlraw", "stopxmlsetups", "stopxrow", "stopxrowgroup", "stopxtable", "stopxtablebody", "stopxtablefoot", "stopxtablehead", "stopxtablenext", "stopxxfrac", "stretched", "strictdoifelsenextoptional", "strictdoifnextoptionalelse", "stripcharacter", "strippedcsname", "stripspaces", "structurelistuservariable", "structurenumber", "structuretitle", "structureuservariable", "structurevariable", "strut", "strutdp", "strutht", "struthtdp", "struttedbox", "strutwd", "style", "styleinstance", "subject", "subpagenumber", "subsection", "subsentence", "substituteincommalist", "subsubject", "subsubsection", "subsubsubject", "subsubsubsection", "subsubsubsubject", "subsubsubsubsection", "subsubsubsubsubject", "subtractfeature", "swapcounts", "swapdimens", "swapface", "swapmacros", "swaptypeface", "switchstyleonly", "switchtobodyfont", "switchtocolor", "switchtointerlinespace", "symbol", "symbolreference", "synchronizeblank", "synchronizeindenting", "synchronizemarking", "synchronizeoutputstreams", "synchronizestrut", "synchronizewhitespace", "systemlog", "systemlogfirst", "systemloglast", "systemsetups", "tLeftarrow", "tLeftrightarrow", "tRightarrow", "table", "tabulateautoline", "tabulateautorule", "tabulateline", "tabulaterule", "taggedctxcommand", "taggedlabeltexts", "tbinom", "tbox", "tequal", "testandsplitstring", "testcolumn", "testfeature", "testfeatureonce", "testpage", "testpageonly", "testpagesync", "testtokens", "tex", "texdefinition", "texsetup", "textcitation", "textcite", "textcontrolspace", "textflowcollector", "textmath", "textminus", "textormathchar", "textplus", "textreference", "textrule", "textvisiblespace", "tfrac", "thainumerals", "thefirstcharacter", "thenormalizedbodyfontsize", "theremainingcharacters", "thickspace", "thinrule", "thinrules", "thinspace", "thirdoffivearguments", "thirdoffourarguments", "thirdofsixarguments", "thirdofthreearguments", "thirdofthreeunexpanded", "thookleftarrow", "thookrightarrow", "threedigitrounding", "tibetannumerals", "tightlayer", "tinyfont", "title", "tlap", "tleftarrow", "tleftharpoondown", "tleftharpoonup", "tleftrightarrow", "tleftrightharpoons", "tmapsto", "tochar", "tolinenote", "topbox", "topleftbox", "toplinebox", "toprightbox", "topskippedbox", "tracecatcodetables", "tracedfontname", "traceoutputroutines", "tracepositions", "translate", "transparencycomponents", "transparent", "trel", "trightarrow", "trightharpoondown", "trightharpoonup", "trightleftharpoons", "trightoverleftarrow", "triplebond", "truefilename", "truefontname", "ttriplerel", "ttwoheadleftarrow", "ttwoheadrightarrow", "twodigitrounding", "tx", "txx", "typ", "type", "typebuffer", "typedefinedbuffer", "typeface", "typefile", "typescriptone", "typescriptprefix", "typescriptthree", "typescripttwo", "typesetbuffer", "typesetfile", "uconvertnumber", "uedcatcodecommand", "undefinevalue", "undepthed", "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", "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", "useblankparameter", "useblocks", "usebodyfont", "usebodyfontparameter", "usebtxdataset", "usebtxdefinitions", "usecolors", "usecomponent", "usedirectory", "usedummycolorparameter", "usedummystyleandcolor", "usedummystyleparameter", "useenvironment", "useexternaldocument", "useexternalfigure", "useexternalrendering", "useexternalsoundtrack", "usefigurebase", "usefile", "usegridparameter", "useindentingparameter", "useindentnextparameter", "useinterlinespaceparameter", "uselanguageparameter", "useluamodule", "usemathstyleparameter", "usemodule", "useproduct", "useprofileparameter", "useproject", "usereferenceparameter", "userpagenumber", "usesetupsparameter", "usestaticMPfigure", "usesubpath", "usesymbols", "usetexmodule", "usetypescript", "usetypescriptfile", "useurl", "usezipfile", "utfchar", "utflower", "utfupper", "utilityregisterlength", "vboxreference", "verbatim", "verbatimstring", "verbosenumber", "version", "verticalgrowingbar", "verticalpositionbar", "vglue", "viewerlayer", "vl", "vphantom", "vpos", "vsmash", "vsmashbox", "vsmashed", "vspace", "vspacing", "wdofstring", "weekday", "widthofstring", "widthspanningtext", "withoutpt", "word", "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", "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", "Lua", "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", "MPwhd", "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", "TEXpage", "TaBlE", "TeX", "TheNormalizedFontSize", "TransparencyHack", "VerboseNumber", "WidthSpanningText", "XETEX", "XeTeX", "a", "abjadnaivenumerals", "abjadnodotnumerals", "abjadnumerals", "activatespacehandler", "adaptcollector", "adaptedisposition", "adaptfontfeature", "adaptpapersize", "addfeature", "addtoJSpreamble", "addtocommalist", "addvalue", "aftersplitstring", "aftertestandsplitstring", "ajustechamp", "alaligne", "alapage", "alignmentcharacter", "allinputpaths", "alphabeticnumerals", "alwayscitation", "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", "aside", "assignalfadimension", "assigndimen", "assigndimension", "assignifempty", "assigntranslation", "assignvalue", "assignwidth", "assumelongusagecs", "astype", "attachment", "autocap", "autodirhbox", "autodirvbox", "autodirvtop", "autoinsertnextspace", "automathematics", "autosetups", "availablehsize", "averagecharwidth", "backgroundimage", "backgroundimagefill", "backgroundline", "baha", "barrecouleur", "barreinteraction", "bas", "basegrid", "baselineleftbox", "baselinemiddlebox", "baselinerightbox", "bbox", "beforesplitstring", "beforetestandsplitstring", "big", "bigbodyfont", "bigg", "bigger", "biggl", "biggm", "biggr", "bigl", "bigm", "bigr", "bigskip", "binom", "bitmapimage", "blap", "bleed", "bleedheight", "bleedwidth", "blockligatures", "blockquote", "bodyfontenvironmentlist", "bodyfontsize", "bold", "boldface", "bolditalic", "boldslanted", "booleanmodevalue", "bottombox", "bottomleftbox", "bottomrightbox", "bouton", "boutonmenu", "boutonsinteraction", "boxcursor", "boxmarker", "boxofsize", "boxreference", "bpos", "bthiddencitation", "btxabbreviatedjournal", "btxaddjournal", "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", "btxlistcitation", "btxloadjournalist", "btxoneorrange", "btxremapauthor", "btxsavejournalist", "btxsetup", "btxsingularorplural", "btxsingularplural", "btxtextcitation", "cache", "cacheblocs", "calligraphic", "camel", "cap", "caractere", "caracteres", "catcodetablename", "cbox", "centerbox", "centeredbox", "centerednextbox", "cfrac", "champ", "changepolicecorps", "chapitre", "chardescription", "charwidthlanguage", "checkcharacteralign", "checkedchar", "checkedfiller", "checkedstrippedcsname", "checkinjector", "checknextindentation", "checknextinjector", "checkpage", "checkparameters", "checkpreviousinjector", "checksoundtrack", "checktwopassdata", "checkvariables", "chem", "chemical", "chemicalbottext", "chemicalmidtext", "chemicalsymbol", "chemicaltext", "chemicaltoptext", "chiffresromains", "chineseallnumerals", "chinesecapnumerals", "chinesenumerals", "citation", "cite", "citer", "clap", "classfont", "cldcommand", "cldcontext", "cldloadfile", "cldprocessfile", "cleftarrow", "clip", "clonechamp", "collect", "collectedtext", "collectexpanded", "colonne", "colorcomponents", "colored", "coloronly", "columnbreak", "combinepages", "commalistelement", "commalistsentence", "commalistsize", "comment", "commentaire", "comparedimension", "comparedimensioneps", "comparegroupecouleur", "comparepalette", "completebtxrendering", "completelist", "completelistofpublications", "completelistofsorts", "completelistofsynonyms", "completenumeropage", "completeregistre", "complexorsimple", "complexorsimpleempty", "composant", "composedcollector", "composedlayer", "compresult", "concernant", "constantdimen", "constantdimenargument", "constantemptyargument", "constantnumber", "constantnumberargument", "contentreference", "continuednumber", "continueifinputfile", "convertargument", "convertcommand", "convertedcounter", "converteddimen", "convertedsubcounter", "convertitnumero", "convertmonth", "convertvalue", "convertvboxtohbox", "copitchamp", "copypages", "copyparameters", "copyposition", "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", "dactylographier", "dans", "datasetvariable", "date", "datecourante", "dayoftheweek", "dayspermonth", "dbinom", "de", "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", "definecomplexorsimpleempty", "defineconversionset", "definecounter", "definedataset", "definedelimitedtext", "definedfont", "defineeffect", "defineexpandable", "defineexternalfigure", "definefallbackfamily", "definefieldbody", "definefieldbodyset", "definefieldcategory", "definefileconstant", "definefilefallback", "definefilesynonym", "definefiller", "definefirstline", "definefittingpage", "definefontalternative", "definefontfallback", "definefontfamily", "definefontfamilypreset", "definefontfeature", "definefontfile", "definefontsize", "definefontsolution", "defineformula", "defineformulaalternative", "defineformulaframed", "defineframed", "defineframedcontent", "defineframedtext", "definefrozenfont", "defineglobalcolor", "definegraphictypesynonym", "definegridsnapping", "defineheadalternative", "definehelp", "definehigh", "definehighlight", "definehspace", "definehypenationfeatures", "defineindentedtext", "defineindenting", "defineinitial", "defineinsertion", "defineinteraction", "defineinteractionbar", "defineinterfaceconstant", "defineinterfaceelement", "defineinterfacevariable", "defineinterlinespace", "defineintermediatecolor", "defineitemgroup", "defineitems", "definelabelclass", "definelayerpreset", "definelinefiller", "definelinenote", "definelinenumbering", "definelines", "definelistalternative", "definelistextra", "definelow", "definelowhigh", "definelowmidhigh", "definemarginblock", "definemargindata", "definemarker", "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", "definenamespace", "definenarrower", "definenote", "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", "definit", "definitbloc", "definitblocsection", "definitbuffer", "definitcalque", "definitchamp", "definitconversion", "definitcouleur", "definitdactylo", "definitdemarrestoppe", "definitdescription", "definitdisposition", "definitenumeration", "definitenvironnementpolicecorps", "definitetiquette", "definitflottant", "definitformatreference", "definitgroupecouleur", "definithbox", "definitliste", "definitlisteimbriquee", "definitmakeup", "definitmarquage", "definitmenuinteraction", "definitpalette", "definitparagraphes", "definitpilechamp", "definitpolice", "definitpolicecorps", "definitprofil", "definitprogramme", "definitreference", "definitregistre", "definitrevetement", "definitsautdecolonne", "definitsautdepage", "definitsection", "definitsouschamp", "definitstyle", "definitstylepolice", "definitsymbole", "definitsymbolefigure", "definitsynonymepolice", "definitsynonymes", "definittabulation", "definittaillepapier", "definittete", "definittexte", "definittrametableau", "definittri", "definittype", "definitvide", "delimited", "delimitedtext", "demarreJScode", "demarreJSpreamble", "demarreMPclip", "demarreMPcode", "demarreMPdefinitions", "demarreMPdrawing", "demarreMPenvironment", "demarreMPextensions", "demarreMPinclusions", "demarreMPinitializations", "demarreMPpage", "demarreMPpositiongraphic", "demarreMPpositionmethod", "demarreMPrun", "demarreTABLE", "demarreTABLEbody", "demarreTABLEfoot", "demarreTABLEhead", "demarreTABLEnext", "demarreTC", "demarreTD", "demarreTDs", "demarreTEXpage", "demarreTH", "demarreTN", "demarreTR", "demarreTRs", "demarreTX", "demarreTY", "demarreallmodes", "demarrearrangedpages", "demarrearriereplan", "demarreaside", "demarreattachment", "demarrebar", "demarrebinom", "demarrebitmapimage", "demarreblockquote", "demarrebtxrenderingdefinitions", "demarrebuffer", "demarrebutton", "demarrecatcodetable", "demarrechapitre", "demarrecharacteralign", "demarrecheckedfences", "demarrechemical", "demarrecitation", "demarreciter", "demarrecollect", "demarrecollecting", "demarrecolorintent", "demarrecoloronly", "demarrecolorset", "demarrecolumns", "demarrecolumnspan", "demarrecombination", "demarrecomment", "demarrecommentaire", "demarrecomposant", "demarrecontextcode", "demarrecontextdefinitioncode", "demarrecouleur", "demarrectxfunction", "demarrectxfunctiondefinition", "demarrecurrentcolor", "demarrecurrentlistentrywrapper", "demarredbinom", "demarredelimited", "demarredelimitedtext", "demarredfrac", "demarrediscours", "demarredisplaymath", "demarredmath", "demarredocument", "demarreeffect", "demarreelement", "demarreembeddedxtable", "demarreendofline", "demarreenvironement", "demarreexceptions", "demarreexpanded", "demarreexpandedcollect", "demarreextendedcatcodetable", "demarreexternalfigurecollection", "demarrefigure", "demarrefitfieldframed", "demarrefittingpage", "demarrefloatcombination", "demarrefont", "demarrefontclass", "demarrefontsolution", "demarreformula", "demarreformulas", "demarrefrac", "demarreframed", "demarreframedcontent", "demarreframedtext", "demarregraphique", "demarregridsnapping", "demarregroupe", "demarrehbox", "demarrehboxestohbox", "demarrehboxregister", "demarrehelptext", "demarrehiddenbar", "demarrehiding", "demarrehighlight", "demarrehyphenation", "demarreimath", "demarreindentation", "demarreindentedtext", "demarreinmframed", "demarreinteraction", "demarreinterface", "demarreintermezzo", "demarreintertext", "demarreitemgroup", "demarreknockout", "demarrelayout", "demarreligne", "demarreligneregleetexte", "demarrelinecorrection", "demarrelinefiller", "demarrelinenumbering", "demarrelinetable", "demarrelinetablebody", "demarrelinetablecell", "demarrelinetablehead", "demarrelister", "demarrelocalfootnotes", "demarrelocalheadsetup", "demarrelocallinecorrection", "demarrelocalnotes", "demarrelocalsetups", "demarrelua", "demarreluacode", "demarreluaparameterset", "demarreluasetups", "demarremakeup", "demarremargereglee", "demarremarginblock", "demarremarkedcontent", "demarremathmode", "demarremathstyle", "demarrematrices", "demarremcframed", "demarremdformula", "demarremenuinteraction", "demarremframed", "demarremixedcolumns", "demarremode", "demarremodeset", "demarremodule", "demarremoduletestsection", "demarrempformula", "demarrenamedsection", "demarrenamedsubformulas", "demarrenarrow", "demarrenarrower", "demarrenegative", "demarrenicelyfilledbox", "demarrenobar", "demarrenointerference", "demarrenotallmodes", "demarrenotext", "demarrenotmode", "demarreopposite", "demarreoutputstream", "demarreoverbar", "demarreoverbars", "demarreoverlay", "demarreoverprint", "demarrepagecomment", "demarrepagefigure", "demarrepagegrid", "demarrepagegridspan", "demarrepagelayout", "demarrepar", "demarreparagraph", "demarreparagraphs", "demarreparagraphscell", "demarreparbuilder", "demarrepath", "demarreplaceformule", "demarreplacepairedbox", "demarrepositioning", "demarrepositionoverlay", "demarrepositive", "demarrepostponing", "demarreprocessassignmentcommand", "demarreprocessassignmentlist", "demarreprocesscommacommand", "demarreprocesscommalist", "demarreproduit", "demarreprojet", "demarreprotect", "demarreprotectedcolors", "demarrepublication", "demarrepunctuation", "demarrerandomized", "demarrerandomseed", "demarrerawsetups", "demarrereadingfile", "demarrereferenceprefix", "demarreregime", "demarrereusableMPgraphic", "demarrescript", "demarresdformula", "demarresection", "demarresectionblock", "demarresectionblockenvironment", "demarresectionlevel", "demarresetups", "demarresfrac", "demarreshapebox", "demarreshift", "demarresidebar", "demarresimplecolumns", "demarresousligne", "demarresouslignetout", "demarresoussection", "demarresoussoussection", "demarresoussoussoussection", "demarresoussoussoussoussection", "demarresoussoussoussoussujet", "demarresoussoussoussujet", "demarresoussoussujet", "demarresoussujet", "demarrespecialitem", "demarrespeech", "demarrespformula", "demarrespread", "demarrestartstop", "demarrestaticMPfigure", "demarrestaticMPgraphic", "demarrestrictinspectnextcharacter", "demarrestrut", "demarrestyle", "demarresubformulas", "demarresubjectlevel", "demarresubsentence", "demarresubstack", "demarresujet", "demarresurligne", "demarresurlignetout", "demarresymbolset", "demarretable", "demarretableau", "demarretablehead", "demarretables", "demarretabletail", "demarretabulate", "demarretabulatehead", "demarretabulatetail", "demarretagged", "demarretbinom", "demarretete", "demarretexcode", "demarretexdefinition", "demarretext", "demarretextbackground", "demarretextbackgroundmanual", "demarretextcolor", "demarretextcolorintent", "demarretexteaide", "demarretexteencadre", "demarretextflow", "demarretitre", "demarretokens", "demarretransparent", "demarretypescript", "demarretypescriptcollection", "demarreunderdash", "demarreunderdashes", "demarreunderdot", "demarreunderdots", "demarreunderrandom", "demarreunderrandoms", "demarreunderstrike", "demarreunderstrikes", "demarreunframed", "demarreuniqueMPgraphic", "demarreuniqueMPpagegraphic", "demarreunpacked", "demarreusableMPgraphic", "demarreuseMPgraphic", "demarreusemathstyleparameter", "demarreusingbtxspecification", "demarreva", "demarrevbox", "demarrevboxregister", "demarrevboxtohbox", "demarrevboxtohboxseparator", "demarreviewerlayer", "demarrevtop", "demarrevtopregister", "demarrexcell", "demarrexcellgroup", "demarrexfrac", "demarrexgroup", "demarrexmldisplayverbatim", "demarrexmlinlineverbatim", "demarrexmlraw", "demarrexmlsetups", "demarrexrow", "demarrexrowgroup", "demarrextable", "demarrextablebody", "demarrextablefoot", "demarrextablehead", "demarrextablenext", "demarrexxfrac", "depthofstring", "depthonlybox", "depthspanningtext", "determinecaracteristiqueliste", "determinecaracteristiquesregistre", "determinenoflines", "determinenumerotete", "devanagarinumerals", "dfrac", "digits", "dimensiontocount", "directcolor", "directcolored", "directconvertedcounter", "directdummyparameter", "directgetboxllx", "directgetboxlly", "directhighlight", "directlocalframed", "directluacode", "directselect", "directsetbar", "directsetup", "directsymbol", "directvspacing", "dis", "disabledirectives", "disableexperiments", "disablemode", "disableoutputstream", "disableparpositions", "disableregime", "disabletrackers", "discours", "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", "dorepeatwithcommand", "doreplacefeature", "doresetandafffeature", "doresetattribute", "dorotatebox", "dosetattribute", "dosetleftskipadaption", "dosetrightskipadaption", "dosetupcheckedinterlinespace", "doseventupleargument", "doseventupleempty", "dosingleargument", "dosingleempty", "dosinglegroupempty", "dosixtupleargument", "dosixtupleempty", "dostepwiserecurse", "dosubtractfeature", "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", "elapsedseconds", "elapsedtime", "eleftarrowfill", "eleftharpoondownfill", "eleftharpoonupfill", "eleftrightarrowfill", "element", "elements", "emphasisboldface", "emphasistypeface", "emptylines", "emspace", "enabledirectives", "enableexperiments", "enablemode", "enableoutputstream", "enableparpositions", "enableregime", "enabletrackers", "enskip", "enspace", "env", "environement", "envvar", "eoverbarfill", "eoverbracefill", "eoverbracketfill", "eoverparentfill", "epos", "equaldigits", "erightarrowfill", "erightharpoondownfill", "erightharpoonupfill", "espace", "espacefixe", "espacesfixes", "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", "fence", "fenced", "fetchallmarkings", "fetchallmarks", "fetchmark", "fetchmarking", "fetchonemark", "fetchonemarking", "fetchruntinecommand", "fetchtwomarkings", "fetchtwomarks", "fichierdactylo", "fieldbody", "fifthoffivearguments", "fifthofsixarguments", "figure", "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", "flushboxregister", "flushcollector", "flushlayer", "flushlocalfloats", "flushnextbox", "flushnotes", "flushoutputstream", "flushshapebox", "flushtextflow", "flushtokens", "flushtoks", "fontalternative", "fontbody", "fontchar", "fontcharbyindex", "fontclass", "fontclassname", "fontface", "fontfeaturelist", "fontsize", "fontstyle", "forcecharacterstripping", "forcelocalfloats", "forgeteverypar", "forgetparameters", "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", "getprivatechar", "getprivateslot", "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", "grabbufferdata", "grabbufferdatadirect", "grabuntil", "graphique", "grayvalue", "greedysplitstring", "greeknumerals", "grille", "groupedcommand", "gsetboxllx", "gsetboxlly", "gujaratinumerals", "gurmurkhinumerals", "hairspace", "halfwaybox", "handletokens", "handwritten", "hash", "haut", "hboxofvbox", "hboxreference", "hdofstring", "headhbox", "headnumbercontent", "headnumberdistance", "headnumberwidth", "headreferenceattributes", "headsetupspacing", "headtextcontent", "headtextdistance", "headtextwidth", "headvbox", "headwidth", "heightanddepthofstring", "heightofstring", "heightspanningtext", "helptext", "hglue", "hiddenbar", "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", "incrementcounter", "incrementedcounter", "incrementpagenumber", "incrementsubpagenumber", "incrementvalue", "indentation", "infofont", "infofontbold", "inframed", "infull", "inheritparameter", "inhibitblank", "initializeboxstack", "inlinebuffer", "inlinedbox", "inlinemath", "inlinemathematics", "inlinemessage", "inlineordisplaymath", "inlinerange", "inmframed", "innerflushshapebox", "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", "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", "intermezzo", "intertext", "invokepageheandler", "istltdir", "istrtdir", "italic", "italicbold", "italiccorrection", "itemtag", "jobfilename", "jobfilesuffix", "joursemaine", "kap", "keeplinestogether", "keepunwantedspaces", "kerncharacters", "koreancirclenumerals", "koreannumerals", "koreannumeralsc", "koreannumeralsp", "koreanparentnumerals", "languageCharacters", "languagecharacters", "languagecharwidth", "langue", "langueprincipale", "largeurligne", "lastcounter", "lastcountervalue", "lastdigit", "lastlinewidth", "lastnaturalboxdp", "lastnaturalboxht", "lastnaturalboxwd", "lastpredefinedsymbol", "lastrealpage", "lastrealpagenumber", "lastsubcountervalue", "lastsubpage", "lastsubpagenumber", "lasttwodigits", "lastuserpage", "lastuserpagenumber", "lateluacode", "layeredtext", "layerheight", "layerwidth", "lazysavetaggedtwopassdata", "lazysavetwopassdata", "lbox", "left", "leftbottombox", "leftbox", "lefthbox", "leftorrighthbox", "leftorrightvbox", "leftorrightvtop", "leftskipadaption", "leftsubguillemot", "lefttopbox", "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", "limtatefirstline", "linespanningtext", "listcitation", "listcite", "lister", "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", "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", "marquage", "marquepage", "mat", "math", "mathbf", "mathbi", "mathblackboard", "mathbs", "mathcommand", "mathdefault", "mathematique", "mathfraktur", "mathfunction", "mathit", "mathitalic", "mathop", "mathrm", "mathscript", "mathsl", "mathss", "mathtext", "mathtextbf", "mathtextbi", "mathtextbs", "mathtextit", "mathtextsl", "mathtexttf", "mathtf", "mathtriplet", "mathtt", "mathupright", "mathword", "mathwordbf", "mathwordbi", "mathwordbs", "mathwordit", "mathwordsl", "mathwordtf", "mbox", "mcframed", "md", "measure", "measured", "medskip", "medspace", "menuinteraction", "mequal", "message", "metaTeX", "mfence", "mframed", "mfunction", "mfunctionlabeltext", "mhbox", "mhookleftarrow", "mhookrightarrow", "middle", "middlebox", "midhbox", "minimalhbox", "mixedcaps", "mkvibuffer", "mleftarrow", "mleftharpoondown", "mleftharpoonup", "mleftrightarrow", "mleftrightharpoons", "mmapsto", "moduleparameter", "mois", "molecule", "mono", "monobold", "mononormal", "monthlong", "monthshort", "montrecadre", "montrecouleur", "montredisposition", "montreedition", "montreenvironnementpolicecorps", "montregrille", "montregroupecouleur", "montrejeusymboles", "montremakeup", "montrepalette", "montrepolicecorps", "montrereglages", "montrestruts", "mp", "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", "nobar", "nocap", "nocitation", "nocite", "nodetostring", "noffigurepages", "noflines", "noflocalfloats", "noindentation", "noitem", "nonfrenchspacing", "nonmathematics", "normal", "normalboldface", "normalframedwithsettings", "normalizebodyfontsize", "normalizedfontsize", "normalizefontdepth", "normalizefontheight", "normalizefontline", "normalizefontwidth", "normalizetextdepth", "normalizetextheight", "normalizetextline", "normalizetextwidth", "normaltypeface", "note", "notesymbol", "ntimes", "numberofpoints", "numeroformule", "numeropage", "numeros", "numerotete", "numerotetecourant", "obeydepth", "objectdepth", "objectheight", "objectmargin", "objectwidth", "obox", "obtientmarquage", "offset", "offsetbox", "onedigitrounding", "ordinaldaynumber", "ordinalstr", "oriente", "ornamenttext", "outputfilename", "outputstreambox", "outputstreamcopy", "outputstreamunvbox", "outputstreamunvcopy", "over", "overbar", "overbars", "overbartext", "overbarunderbar", "overbrace", "overbracetext", "overbraceunderbrace", "overbracket", "overbrackettext", "overbracketunderbracket", "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", "pagestaterealpage", "paletsize", "pdfTeX", "pdfactualtext", "pdfbackendactualtext", "pdfbackendcurrentresources", "pdfbackendsetcatalog", "pdfbackendsetcolorspace", "pdfbackendsetextgstate", "pdfbackendsetinfo", "pdfbackendsetname", "pdfbackendsetpageattribute", "pdfbackendsetpageresource", "pdfbackendsetpagesattribute", "pdfbackendsetpattern", "pdfbackendsetshade", "pdfcolor", "pdfeTeX", "percent", "percentdimen", "periodes", "permitcaretescape", "permitcircumflexescape", "permitspacesbetweengroups", "persiandecimals", "persiannumerals", "phantom", "phantombox", "pickupgroupedcommand", "pilechamp", "placeattachments", "placebtxrendering", "placecitation", "placecomments", "placecoteacote", "placecurrentformulanumber", "placedbox", "placefloatwithsetups", "placeflottant", "placeformule", "placeframed", "placehelp", "placeinitial", "placelayer", "placelayeredtext", "placelesunsaudessusdesautres", "placeliste", "placelisteinmbriquee", "placelistofpublications", "placelistofsorts", "placelistofsynonyms", "placelocalnotes", "placemarquespages", "placement", "placenamedfloat", "placenamedformula", "placenotes", "placenotespdp", "placenotespdplocales", "placenumeropage", "placenumerotete", "placepairedbox", "placeparallel", "placerawlist", "placeregistre", "placerenderingwindow", "placesousformule", "placesurgrille", "placetextetete", "popattribute", "popmacro", "popmode", "popsystemmode", "position", "positionoverlay", "positionregionoverlay", "postponenotes", "predefinedfont", "predefinefont", "predefinesymbol", "prefixedpagenumber", "prendbuffer", "prependetoks", "prependgvalue", "prependtocommalist", "prependtoks", "prependtoksonce", "prependvalue", "presetdocument", "presetfieldsymbols", "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", "profiledbox", "profilegivenbox", "programme", "projet", "pseudoMixedCapped", "pseudoSmallCapped", "pseudoSmallcapped", "pseudosmallcapped", "purenumber", "pushattribute", "pushbutton", "pushmacro", "pushmode", "pushoutputstream", "pushsystemmode", "qqpart", "qquad", "quad", "quads", "quitcommalist", "quitprevcommalist", "quittypescriptscanning", "raisebox", "randomizetext", "randomnumber", "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", "reglearrangement", "reglearriereplan", "reglearriereplans", "reglebarreinteraction", "reglebloc", "regleblocsection", "reglebuffer", "reglecapitales", "reglechamp", "reglechamps", "regleclipping", "reglecolonnes", "reglecommentaire", "reglecommentairepage", "reglecompoetroite", "reglecomposeenalinea", "reglecouleur", "reglecouleurs", "regledactylo", "regledemarrestoppe", "regledisposition", "regleecraninteraction", "regleelements", "regleencadre", "regleentete", "regleepaisseurligne", "regleespaceblanc", "regleespacement", "regleespacementinterligne", "regleflottant", "regleformulaires", "reglegroupeselements", "regleinf", "regleinteraction", "regleintitule", "reglejeusymboles", "reglelangue", "reglelignes", "reglelignesnoires", "reglelignesreglestexte", "regleliste", "reglelisteimbriquee", "reglemakeup", "reglemargereglee", "reglemarquage", "reglemarquagehyphenation", "reglemenuinteraction", "reglenumeropage", "reglenumerotationligne", "reglenumerotationpage", "reglenumerotationparagraphe", "reglenumerotete", "regleoriente", "reglepalette", "reglepapier", "regleparagraphes", "reglepdp", "regleplacementopposition", "reglepolicecorps", "reglepositionnement", "regleprogrammes", "reglereferencage", "regleregistre", "regleremplitligne", "regleremplitlignesreglees", "regleseparationflottant", "reglesousnumeropage", "reglesup", "reglesynonymes", "regletableaux", "regletabulation", "regletaillepapier", "regletete", "regletetes", "regletexte", "regletextesentete", "regletextesinf", "regletextespdp", "regletextessup", "regletextestexte", "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", "replaceincommalist", "replaceword", "rescan", "rescanwithsetup", "resetMPdrawing", "resetMPenvironment", "resetMPinstance", "resetallattributes", "resetandaddfeature", "resetbar", "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", "resolvedglyphdirect", "resolvedglyphstyled", "restartcounter", "restorebox", "restorecatcodes", "restorecounter", "restorecurrentattributes", "restoreendofline", "restoreglobalbodyfont", "reusableMPgraphic", "reuseMPgraphic", "reuserandomseed", "revivefeature", "rfence", "rhbox", "right", "rightbottombox", "rightbox", "righthbox", "rightorleftpageaction", "rightskipadaption", "rightsubguillemot", "righttolefthbox", "righttoleftvbox", "righttoleftvtop", "righttopbox", "rlap", "robustaddtocommalist", "robustdoifelseinset", "robustdoifinsetelse", "robustpretocommalist", "rollbutton", "roman", "rtop", "ruledhbox", "ruledhpack", "ruledmbox", "ruledtopv", "ruledtpack", "ruledvbox", "ruledvpack", "ruledvtop", "runMPbuffer", "runninghbox", "safechar", "sans", "sansbold", "sansespace", "sanslignesenteteetpdp", "sanslignessupetinf", "sansnormal", "sansserif", "savebox", "savebtxdataset", "savebuffer", "savecounter", "savecurrentattributes", "savenormalmeaning", "savetaggedtwopassdata", "savetwopassdata", "sbox", "sd", "secondoffivearguments", "secondoffourarguments", "secondofsixarguments", "secondofthreearguments", "secondofthreeunexpanded", "secondoftwoarguments", "secondoftwounexpanded", "section", "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", "setfractions", "setgmeasure", "setgvalue", "setgvariable", "setgvariables", "sethboxregister", "sethyphenatedurlafter", "sethyphenatedurlbefore", "sethyphenatedurlnormal", "sethyphenationfeatures", "setinitial", "setinjector", "setinteraction", "setinterfacecommand", "setinterfaceconstant", "setinterfaceelements", "setinterfacemessage", "setinterfacevariable", "setinternalrendering", "setitaliccorrection", "setlayer", "setlayerframed", "setlayertext", "setlinefiller", "setlocalhsize", "setmainbodyfont", "setmainparbuilder", "setmarker", "setmarking", "setmathstyle", "setmeasure", "setmessagetext", "setmode", "setnostrut", "setnote", "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", "setupMPgraphics", "setupMPinstance", "setupMPpage", "setupMPvariables", "setupTABLE", "setupTEXpage", "setupattachment", "setupbackend", "setupbar", "setupbleeding", "setupbookmark", "setupbtx", "setupbtxdataset", "setupbtxlist", "setupbtxregister", "setupbtxrendering", "setupbutton", "setupcharacterkerning", "setupcharacterspacing", "setupchemical", "setupchemicalframed", "setupcollector", "setupcolumnspan", "setupcombination", "setupcounter", "setupdataset", "setupdelimitedtext", "setupdescription", "setupdirections", "setupdocument", "setupeffect", "setupenumeration", "setupenv", "setupexport", "setupexternalfigure", "setupexternalsoundtracks", "setupfieldbody", "setupfieldcategory", "setupfieldcontentframed", "setupfieldlabelframed", "setupfieldtotalframed", "setupfiller", "setupfirstline", "setupfittingpage", "setupfloatcaption", "setupfontexpansion", "setupfontprotrusion", "setupfonts", "setupfontsolution", "setupformula", "setupformulaframed", "setupframedcontent", "setupframedtext", "setupglobalreferenceprefix", "setupheadalternative", "setuphelp", "setuphigh", "setuphighlight", "setuphyphenation", "setupindentedtext", "setupinitial", "setupinsertion", "setupitaliccorrection", "setupitemgroup", "setuplabel", "setuplayer", "setuplayeredtext", "setuplayouttext", "setuplinefiller", "setuplinefillers", "setuplinenote", "setuplinetable", "setuplistalternative", "setuplistextra", "setuplocalfloats", "setuplocalinterlinespace", "setuplow", "setuplowhigh", "setuplowmidhigh", "setupmarginblock", "setupmargindata", "setupmarginframed", "setupmarginrule", "setupmathalignment", "setupmathcases", "setupmathematics", "setupmathfence", "setupmathfraction", "setupmathframed", "setupmathmatrix", "setupmathornament", "setupmathradical", "setupmathstackers", "setupmathstyle", "setupmixedcolumns", "setupmodule", "setupnotation", "setupnotations", "setupnote", "setupnotes", "setupoffset", "setupoffsetbox", "setupoutputroutine", "setuppagechecker", "setuppagegrid", "setuppagegridarea", "setuppagegridareatext", "setuppagegridlines", "setuppagegridspan", "setuppagegridstart", "setuppageinjection", "setuppageinjectionalternative", "setuppageshift", "setuppagestate", "setuppairedbox", "setupparagraph", "setupparagraphintro", "setupparallel", "setupperiods", "setupplacement", "setuppositionbar", "setupprocessor", "setupprofile", "setupquotation", "setuprealpagenumber", "setupreferenceformat", "setupreferenceprefix", "setupreferencestructureprefix", "setupregisters", "setuprenderingwindow", "setups", "setupscale", "setupscript", "setupscripts", "setupselector", "setupshift", "setupsidebar", "setupspellchecking", "setupstretched", "setupstruts", "setupstyle", "setupsubformula", "setuptabulation", "setuptagging", "setuptextbackground", "setuptextflow", "setuptooltip", "setupunit", "setupuserpagenumber", "setupversion", "setupviewerlayer", "setupvspacing", "setupwithargument", "setupwithargumentswapped", "setupxml", "setupxtable", "setuvalue", "setuxvalue", "setvalue", "setvariable", "setvariables", "setvboxregister", "setvisualizerfont", "setvtopregister", "setwidthof", "setxmeasure", "setxvalue", "setxvariable", "setxvariables", "sfrac", "shapedhbox", "showallmakeup", "showattributes", "showboxes", "showbtxdatasetauthors", "showbtxdatasetcompleteness", "showbtxdatasetfields", "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", "simplegroupedcommand", "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", "someheadnumber", "somekindoftab", "somelocalfloat", "somenamedheadnumber", "someplace", "sousnumeropage", "soussection", "soussoussection", "soussoussoussection", "soussoussoussoussection", "soussoussoussoussujet", "soussoussoussujet", "soussoussujet", "soussujet", "sp", "spanishNumerals", "spanishnumerals", "speech", "splitatasterisk", "splitatcolon", "splitatcolons", "splitatcomma", "splitdfrac", "splitfilename", "splitfrac", "splitoffbase", "splitofffull", "splitoffkind", "splitoffname", "splitoffpath", "splitoffroot", "splitofftokens", "splitofftype", "splitstring", "spreadhbox", "sqrt", "stackrel", "startregister", "startstructurepageregister", "stoppeJScode", "stoppeJSpreamble", "stoppeMPclip", "stoppeMPcode", "stoppeMPdefinitions", "stoppeMPdrawing", "stoppeMPenvironment", "stoppeMPextensions", "stoppeMPinclusions", "stoppeMPinitializations", "stoppeMPpage", "stoppeMPpositiongraphic", "stoppeMPpositionmethod", "stoppeMPrun", "stoppeTABLE", "stoppeTABLEbody", "stoppeTABLEfoot", "stoppeTABLEhead", "stoppeTABLEnext", "stoppeTC", "stoppeTD", "stoppeTDs", "stoppeTEXpage", "stoppeTH", "stoppeTN", "stoppeTR", "stoppeTRs", "stoppeTX", "stoppeTY", "stoppeallmodes", "stoppearrangedpages", "stoppearriereplan", "stoppeaside", "stoppeattachment", "stoppebar", "stoppebinom", "stoppebitmapimage", "stoppeblockquote", "stoppebtxrenderingdefinitions", "stoppebuffer", "stoppebutton", "stoppecatcodetable", "stoppechapitre", "stoppecharacteralign", "stoppecheckedfences", "stoppechemical", "stoppecitation", "stoppeciter", "stoppecollect", "stoppecollecting", "stoppecolorintent", "stoppecoloronly", "stoppecolorset", "stoppecolumns", "stoppecolumnspan", "stoppecombination", "stoppecomment", "stoppecommentaire", "stoppecomposant", "stoppecontextcode", "stoppecontextdefinitioncode", "stoppecouleur", "stoppectxfunction", "stoppectxfunctiondefinition", "stoppecurrentcolor", "stoppecurrentlistentrywrapper", "stoppedbinom", "stoppedelimited", "stoppedelimitedtext", "stoppedfrac", "stoppediscours", "stoppedisplaymath", "stoppedmath", "stoppedocument", "stoppeeffect", "stoppeelement", "stoppeembeddedxtable", "stoppeendofline", "stoppeenvironement", "stoppeexceptions", "stoppeexpanded", "stoppeexpandedcollect", "stoppeextendedcatcodetable", "stoppeexternalfigurecollection", "stoppefigure", "stoppefitfieldframed", "stoppefittingpage", "stoppefloatcombination", "stoppefont", "stoppefontclass", "stoppefontsolution", "stoppeformula", "stoppeformulas", "stoppefrac", "stoppeframed", "stoppeframedcontent", "stoppeframedtext", "stoppegraphique", "stoppegridsnapping", "stoppegroupe", "stoppehbox", "stoppehboxestohbox", "stoppehboxregister", "stoppehelptext", "stoppehiddenbar", "stoppehiding", "stoppehighlight", "stoppehyphenation", "stoppeimath", "stoppeindentation", "stoppeindentedtext", "stoppeinmframed", "stoppeinteraction", "stoppeinterface", "stoppeintermezzo", "stoppeintertext", "stoppeitemgroup", "stoppeknockout", "stoppelayout", "stoppeligne", "stoppeligneregleetexte", "stoppelinecorrection", "stoppelinefiller", "stoppelinenumbering", "stoppelinetable", "stoppelinetablebody", "stoppelinetablecell", "stoppelinetablehead", "stoppelister", "stoppelocalfootnotes", "stoppelocalheadsetup", "stoppelocallinecorrection", "stoppelocalnotes", "stoppelocalsetups", "stoppelua", "stoppeluacode", "stoppeluaparameterset", "stoppeluasetups", "stoppemakeup", "stoppemargereglee", "stoppemarginblock", "stoppemarkedcontent", "stoppemathmode", "stoppemathstyle", "stoppematrices", "stoppemcframed", "stoppemdformula", "stoppemenuinteraction", "stoppemframed", "stoppemixedcolumns", "stoppemode", "stoppemodeset", "stoppemodule", "stoppemoduletestsection", "stoppempformula", "stoppenamedsection", "stoppenamedsubformulas", "stoppenarrow", "stoppenarrower", "stoppenegative", "stoppenicelyfilledbox", "stoppenobar", "stoppenointerference", "stoppenotallmodes", "stoppenotext", "stoppenotmode", "stoppeopposite", "stoppeoutputstream", "stoppeoverbar", "stoppeoverbars", "stoppeoverlay", "stoppeoverprint", "stoppepagecomment", "stoppepagefigure", "stoppepagegrid", "stoppepagegridspan", "stoppepagelayout", "stoppepar", "stoppeparagraph", "stoppeparagraphs", "stoppeparagraphscell", "stoppeparbuilder", "stoppepath", "stoppeplaceformule", "stoppeplacepairedbox", "stoppepositioning", "stoppepositionoverlay", "stoppepositive", "stoppepostponing", "stoppeprocessassignmentcommand", "stoppeprocessassignmentlist", "stoppeprocesscommacommand", "stoppeprocesscommalist", "stoppeproduit", "stoppeprojet", "stoppeprotect", "stoppeprotectedcolors", "stoppepublication", "stoppepunctuation", "stopperandomized", "stopperandomseed", "stopperawsetups", "stoppereadingfile", "stoppereferenceprefix", "stopperegime", "stoppereusableMPgraphic", "stoppescript", "stoppesdformula", "stoppesection", "stoppesectionblock", "stoppesectionblockenvironment", "stoppesectionlevel", "stoppesetups", "stoppesfrac", "stoppeshapebox", "stoppeshift", "stoppesidebar", "stoppesimplecolumns", "stoppesousligne", "stoppesouslignetout", "stoppesoussection", "stoppesoussoussection", "stoppesoussoussoussection", "stoppesoussoussoussoussection", "stoppesoussoussoussoussujet", "stoppesoussoussoussujet", "stoppesoussoussujet", "stoppesoussujet", "stoppespecialitem", "stoppespeech", "stoppespformula", "stoppespread", "stoppestartstop", "stoppestaticMPfigure", "stoppestaticMPgraphic", "stoppestrictinspectnextcharacter", "stoppestrut", "stoppestyle", "stoppesubformulas", "stoppesubjectlevel", "stoppesubsentence", "stoppesubstack", "stoppesujet", "stoppesurligne", "stoppesurlignetout", "stoppesymbolset", "stoppetable", "stoppetableau", "stoppetablehead", "stoppetables", "stoppetabletail", "stoppetabulate", "stoppetabulatehead", "stoppetabulatetail", "stoppetagged", "stoppetbinom", "stoppetete", "stoppetexcode", "stoppetexdefinition", "stoppetext", "stoppetextbackground", "stoppetextbackgroundmanual", "stoppetextcolor", "stoppetextcolorintent", "stoppetexteaide", "stoppetexteencadre", "stoppetextflow", "stoppetitre", "stoppetokens", "stoppetransparent", "stoppetypescript", "stoppetypescriptcollection", "stoppeunderdash", "stoppeunderdashes", "stoppeunderdot", "stoppeunderdots", "stoppeunderrandom", "stoppeunderrandoms", "stoppeunderstrike", "stoppeunderstrikes", "stoppeunframed", "stoppeuniqueMPgraphic", "stoppeuniqueMPpagegraphic", "stoppeunpacked", "stoppeusableMPgraphic", "stoppeuseMPgraphic", "stoppeusemathstyleparameter", "stoppeusingbtxspecification", "stoppeva", "stoppevbox", "stoppevboxregister", "stoppevboxtohbox", "stoppevboxtohboxseparator", "stoppeviewerlayer", "stoppevtop", "stoppevtopregister", "stoppexcell", "stoppexcellgroup", "stoppexfrac", "stoppexgroup", "stoppexmldisplayverbatim", "stoppexmlinlineverbatim", "stoppexmlraw", "stoppexmlsetups", "stoppexrow", "stoppexrowgroup", "stoppextable", "stoppextablebody", "stoppextablefoot", "stoppextablehead", "stoppextablenext", "stoppexxfrac", "stopregister", "stopstructurepageregister", "strictdoifelsenextoptional", "strictdoifnextoptionalelse", "stripcharacter", "strippedcsname", "stripspaces", "structurelistuservariable", "structurenumber", "structuretitle", "structureuservariable", "structurevariable", "strut", "strutdp", "strutht", "struthtdp", "struttedbox", "strutwd", "style", "styleinstance", "subsentence", "substituteincommalist", "subtractfeature", "sujet", "swapcounts", "swapdimens", "swapface", "swapmacros", "swaptypeface", "switchstyleonly", "switchtocolor", "switchtointerlinespace", "symbole", "symbolreference", "synchronizeblank", "synchronizeindenting", "synchronizemarking", "synchronizeoutputstreams", "synchronizestrut", "synchronizewhitespace", "systemlog", "systemlogfirst", "systemloglast", "systemsetups", "tLeftarrow", "tLeftrightarrow", "tRightarrow", "tableau", "tabulateautoline", "tabulateautorule", "tabulateline", "tabulaterule", "taggedctxcommand", "taggedlabeltexts", "tapebuffer", "tbinom", "tbox", "tequal", "testandsplitstring", "testcolumn", "testfeature", "testfeatureonce", "testpage", "testpageonly", "testpagesync", "testtokens", "tex", "texdefinition", "texsetup", "textcitation", "textcite", "textcontrolspace", "texteaide", "texteencadre", "textenotepdp", "textflowcollector", "textmath", "textminus", "textormathchar", "textplus", "textvisiblespace", "tfrac", "thainumerals", "thefirstcharacter", "thenormalizedbodyfontsize", "theremainingcharacters", "thickspace", "thinspace", "thirdoffivearguments", "thirdoffourarguments", "thirdofsixarguments", "thirdofthreearguments", "thirdofthreeunexpanded", "thookleftarrow", "thookrightarrow", "threedigitrounding", "tibetannumerals", "tightlayer", "tinyfont", "titre", "tlap", "tleftarrow", "tleftharpoondown", "tleftharpoonup", "tleftrightarrow", "tleftrightharpoons", "tmapsto", "tochar", "tolinenote", "topbox", "topleftbox", "toplinebox", "toprightbox", "topskippedbox", "tracecatcodetables", "tracedfontname", "traceoutputroutines", "tracepositions", "traduire", "traiteblocs", "traitfin", "traitsfins", "transparencycomponents", "transparent", "trel", "trightarrow", "trightharpoondown", "trightharpoonup", "trightleftharpoons", "trightoverleftarrow", "triplebond", "truefilename", "truefontname", "ttriplerel", "ttwoheadleftarrow", "ttwoheadrightarrow", "twodigitrounding", "tx", "txx", "typ", "typedefinedbuffer", "typeface", "typescriptone", "typescriptprefix", "typescriptthree", "typescripttwo", "typesetbuffer", "typesetfile", "uconvertnumber", "uedcatcodecommand", "undefinevalue", "undepthed", "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", "unprotected", "unregisterhyphenationpattern", "unspaceafter", "unspaceargument", "unspaced", "unspacestring", "untexargument", "untexcommand", "uppercased", "uppercasestring", "upperleftdoubleninequote", "upperleftdoublesixquote", "upperleftsingleninequote", "upperleftsinglesixquote", "upperrightdoubleninequote", "upperrightdoublesixquote", "upperrightsingleninequote", "upperrightsinglesixquote", "url", "useMPenvironmentbuffer", "useMPgraphic", "useMPlibrary", "useMPrun", "useMPvariables", "useblankparameter", "usebodyfont", "usebodyfontparameter", "usebtxdataset", "usebtxdefinitions", "usecolors", "usecomponent", "usedummycolorparameter", "usedummystyleandcolor", "usedummystyleparameter", "useenvironment", "useexternalrendering", "usefigurebase", "usefile", "usegridparameter", "useindentingparameter", "useindentnextparameter", "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", "verbatim", "verbatimstring", "verbosenumber", "version", "verticalgrowingbar", "verticalpositionbar", "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", "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", "Lua", "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", "MPwhd", "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", "TEXpage", "TaBlE", "TeX", "TheNormalizedFontSize", "TransparencyHack", "VerboseNumber", "WidthSpanningText", "XETEX", "XeTeX", "abjadnaivenumerals", "abjadnodotnumerals", "abjadnumerals", "activatespacehandler", "adaptcollector", "adaptfontfeature", "adaptpapersize", "adattacampo", "adattalayout", "addfeature", "addtoJSpreamble", "addtocommalist", "addvalue", "aftersplitstring", "aftertestandsplitstring", "al", "alignmentcharacter", "allinputpaths", "alphabeticnumerals", "alwayscitation", "alwayscite", "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", "argomento", "asciistr", "aside", "assignalfadimension", "assigndimen", "assigndimension", "assignifempty", "assigntranslation", "assignvalue", "assignwidth", "assumelongusagecs", "astype", "attachment", "autocap", "autodirhbox", "autodirvbox", "autodirvtop", "autoinsertnextspace", "automathematics", "autosetups", "availablehsize", "averagecharwidth", "backgroundimage", "backgroundimagefill", "backgroundline", "barracolori", "barrainterazione", "basegrid", "baselineleftbox", "baselinemiddlebox", "baselinerightbox", "bbox", "beforesplitstring", "beforetestandsplitstring", "big", "bigbodyfont", "bigg", "bigger", "biggl", "biggm", "biggr", "bigl", "bigm", "bigr", "bigskip", "binom", "bitmapimage", "blap", "bleed", "bleedheight", "bleedwidth", "blockligatures", "blockquote", "bodyfontenvironmentlist", "bodyfontsize", "bold", "boldface", "bolditalic", "boldslanted", "booleanmodevalue", "bottombox", "bottomleftbox", "bottomrightbox", "boxcursor", "boxmarker", "boxofsize", "boxreference", "bpos", "bthiddencitation", "btxabbreviatedjournal", "btxaddjournal", "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", "btxlistcitation", "btxloadjournalist", "btxoneorrange", "btxremapauthor", "btxsavejournalist", "btxsetup", "btxsingularorplural", "btxsingularplural", "btxtextcitation", "calligraphic", "cambiaafontdeltesto", "camel", "campi", "cap", "capello", "capitolo", "capoverso", "catcodetablename", "cbox", "centerbox", "centeredbox", "centerednextbox", "cfrac", "chardescription", "charwidthlanguage", "checkcharacteralign", "checkedchar", "checkedfiller", "checkedstrippedcsname", "checkinjector", "checknextindentation", "checknextinjector", "checkpage", "checkparameters", "checkpreviousinjector", "checksoundtrack", "checktwopassdata", "checkvariables", "chemical", "chemicalbottext", "chemicalmidtext", "chemicalsymbol", "chemicaltext", "chemicaltoptext", "chim", "chineseallnumerals", "chinesecapnumerals", "chinesenumerals", "circondato", "citation", "citazione", "cite", "clap", "classfont", "cldcommand", "cldcontext", "cldloadfile", "cldprocessfile", "cleftarrow", "clip", "clonacampo", "collect", "collectedtext", "collectexpanded", "colonna", "colorcomponents", "colore", "colored", "coloregrigio", "coloronly", "columnbreak", "combinepages", "commalistelement", "commalistsentence", "commalistsize", "comment", "commento", "comparedimension", "comparedimensioneps", "completebtxrendering", "completelist", "completelistofpublications", "completelistofsorts", "completelistofsynonyms", "completeregister", "complexorsimple", "complexorsimpleempty", "componenet", "composedcollector", "composedlayer", "compresult", "confrontagruppocolori", "confrontatavolozza", "constantdimen", "constantdimenargument", "constantemptyargument", "constantnumber", "constantnumberargument", "contentreference", "continuednumber", "continueifinputfile", "convertargument", "convertcommand", "convertedcounter", "converteddimen", "convertedsubcounter", "convertinumero", "convertmonth", "convertvalue", "convertvboxtohbox", "copiacampo", "copypages", "copyparameters", "copyposition", "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", "da", "daqualcheparte", "data", "datadioggi", "datasetvariable", "dayoftheweek", "dayspermonth", "dbinom", "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", "definecomplexorsimpleempty", "defineconversionset", "definecounter", "definedataset", "definedelimitedtext", "definedfont", "defineeffect", "defineexpandable", "defineexternalfigure", "definefallbackfamily", "definefieldbody", "definefieldbodyset", "definefieldcategory", "definefileconstant", "definefilefallback", "definefilesynonym", "definefiller", "definefirstline", "definefittingpage", "definefontalternative", "definefontfallback", "definefontfamily", "definefontfamilypreset", "definefontfeature", "definefontfile", "definefontsize", "definefontsolution", "defineformula", "defineformulaalternative", "defineformulaframed", "defineframedcontent", "definefrozenfont", "defineglobalcolor", "definegraphictypesynonym", "definegridsnapping", "defineheadalternative", "definehelp", "definehigh", "definehighlight", "definehspace", "definehypenationfeatures", "defineindentedtext", "defineindenting", "defineinitial", "defineinsertion", "defineinteraction", "defineinteractionbar", "defineinterfaceconstant", "defineinterfaceelement", "defineinterfacevariable", "defineinterlinespace", "defineintermediatecolor", "defineitemgroup", "defineitems", "definelabelclass", "definelayer", "definelayerpreset", "definelinefiller", "definelinenote", "definelinenumbering", "definelines", "definelistalternative", "definelistextra", "definelow", "definelowhigh", "definelowmidhigh", "definemarginblock", "definemargindata", "definemarker", "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", "definenamespace", "definenarrower", "definenote", "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", "definisciambientefontdeltesto", "definisciblocco", "definiscibloccosezione", "definiscibuffer", "definiscicampo", "definiscicapoversi", "definiscicolore", "definisciconversione", "definiscidescrizione", "definiscidimensionicarta", "definiscielenco", "definiscielencocombinato", "definiscienumerazione", "definiscietichetta", "definiscifigurasimbolo", "definiscifont", "definiscifontdeltesto", "definisciformatoriferimento", "definiscigruppocolori", "definiscihbox", "definisciincorniciato", "definisciiniziatermina", "definiscilayout", "definiscimakeup", "definiscimarcatura", "definiscimenuinterazione", "definiscimodellotabella", "definiscioggettomobile", "definisciordinamento", "definisciprofilo", "definisciprogramma", "definisciregistro", "definisciriferimento", "definiscisezione", "definiscisimbolo", "definiscisinonimi", "definiscisinonimofont", "definiscisottocampo", "definiscisovrapposizione", "definiscistackcampi", "definiscistile", "definiscistilefont", "definiscitabulato", "definiscitavolozza", "definiscitesta", "definiscitesto", "definiscitestoincorniciato", "definiscitype", "definiscityping", "delimited", "delimitedtext", "depthofstring", "depthonlybox", "depthspanningtext", "determinacaratteristicheregistro", "determinacarattersticheelenco", "determinanumerotesta", "determinenoflines", "devanagarinumerals", "dfrac", "digits", "dimensiontocount", "directcolor", "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", "dorepeatwithcommand", "doreplacefeature", "doresetandafffeature", "doresetattribute", "dorotatebox", "dosetattribute", "dosetleftskipadaption", "dosetrightskipadaption", "dosetupcheckedinterlinespace", "doseventupleargument", "doseventupleempty", "dosingleargument", "dosingleempty", "dosinglegroupempty", "dosixtupleargument", "dosixtupleempty", "dostepwiserecurse", "dosubtractfeature", "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", "elaborablocchi", "elapsedseconds", "elapsedtime", "eleftarrowfill", "eleftharpoondownfill", "eleftharpoonupfill", "eleftrightarrowfill", "elementi", "elemento", "elenco", "emphasisboldface", "emphasistypeface", "emptylines", "emspace", "enabledirectives", "enableexperiments", "enablemode", "enableoutputstream", "enableparpositions", "enableregime", "enabletrackers", "enskip", "enspace", "env", "envvar", "eoverbarfill", "eoverbracefill", "eoverbracketfill", "eoverparentfill", "epos", "equaldigits", "erightarrowfill", "erightharpoondownfill", "erightharpoonupfill", "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", "fence", "fenced", "fetchallmarkings", "fetchallmarks", "fetchmark", "fetchmarking", "fetchonemark", "fetchonemarking", "fetchruntinecommand", "fetchtwomarkings", "fetchtwomarks", "fieldbody", "fifthoffivearguments", "fifthofsixarguments", "figura", "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", "flushboxregister", "flushcollector", "flushlayer", "flushlocalfloats", "flushnextbox", "flushnotes", "flushoutputstream", "flushshapebox", "flushtextflow", "flushtokens", "flushtoks", "fontalternative", "fontbody", "fontchar", "fontcharbyindex", "fontclass", "fontclassname", "fontface", "fontfeaturelist", "fontsize", "fontstyle", "forcecharacterstripping", "forcelocalfloats", "forgeteverypar", "forgetparameters", "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", "getprivatechar", "getprivateslot", "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", "grabbufferdata", "grabbufferdatadirect", "grabuntil", "grafico", "grayvalue", "greedysplitstring", "greeknumerals", "griglia", "groupedcommand", "gsetboxllx", "gsetboxlly", "gujaratinumerals", "gurmurkhinumerals", "hairspace", "halfwaybox", "handletokens", "handwritten", "hash", "hboxofvbox", "hboxreference", "hdofstring", "headhbox", "headnumbercontent", "headnumberdistance", "headnumberwidth", "headreferenceattributes", "headsetupspacing", "headtextcontent", "headtextdistance", "headtextwidth", "headvbox", "headwidth", "heightanddepthofstring", "heightofstring", "heightspanningtext", "helptext", "hglue", "hiddenbar", "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", "impostaampiezzariga", "impostabarrainterazione", "impostablocco", "impostabloccosezione", "impostabuffer", "impostacampi", "impostacampo", "impostacapoversi", "impostacaption", "impostacima", "impostaclippling", "impostacolonne", "impostacolore", "impostacolori", "impostacommento", "impostacommentopagina", "impostadimensionicarta", "impostaelementi", "impostaelencazioni", "impostaelenco", "impostaelencocombinato", "impostafondo", "impostafontdeltesto", "impostaforms", "impostaincorniciato", "impostainiziatermina", "impostainstestazione", "impostainterazione", "impostainterlinea", "impostalayout", "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", "impostarientro", "impostariferimento", "impostarighe", "impostarigheriempimento", "impostarigovuoto", "impostarotazione", "impostaschermointerazione", "impostasegnosillabazione", "impostasetsimboli", "impostasfondi", "impostasfondo", "impostasinonimi", "impostaspaziatura", "impostaspaziobianco", "impostaspezzamentooggettomobile", "impostatabelle", "impostatabulato", "impostatavolozza", "impostatesta", "impostateste", "impostatesticima", "impostatestifondo", "impostatestiintestazioni", "impostatestipdp", "impostatesto", "impostatestotesti", "impostatolleranza", "impostatransizionepagina", "impostatype", "impostatyping", "impostaurl", "in", "includemenu", "includeversioninfo", "incorniciato", "increment", "incrementcounter", "incrementedcounter", "incrementpagenumber", "incrementsubpagenumber", "incrementvalue", "indentation", "infofont", "infofontbold", "inheritparameter", "inhibitblank", "initializeboxstack", "iniziaJScode", "iniziaJSpreamble", "iniziaMPclip", "iniziaMPcode", "iniziaMPdefinitions", "iniziaMPdrawing", "iniziaMPenvironment", "iniziaMPextensions", "iniziaMPinclusions", "iniziaMPinitializations", "iniziaMPpage", "iniziaMPpositiongraphic", "iniziaMPpositionmethod", "iniziaMPrun", "iniziaTABLE", "iniziaTABLEbody", "iniziaTABLEfoot", "iniziaTABLEhead", "iniziaTABLEnext", "iniziaTC", "iniziaTD", "iniziaTDs", "iniziaTEXpage", "iniziaTH", "iniziaTN", "iniziaTR", "iniziaTRs", "iniziaTX", "iniziaTY", "iniziaallmodes", "iniziaambiente", "iniziaargomento", "iniziaarrangedpages", "iniziaaside", "iniziaattachment", "iniziabar", "iniziabinom", "iniziabitmapimage", "iniziablockquote", "iniziabtxrenderingdefinitions", "iniziabuffer", "iniziabutton", "iniziacapitolo", "iniziacapoverso", "iniziacatcodetable", "iniziacharacteralign", "iniziacheckedfences", "iniziachemical", "iniziacitazione", "iniziacollect", "iniziacollecting", "iniziacolore", "iniziacolorintent", "iniziacoloronly", "iniziacolorset", "iniziacolumns", "iniziacolumnspan", "iniziacombination", "iniziacomment", "iniziacommento", "iniziacomponenet", "iniziacontextcode", "iniziacontextdefinitioncode", "iniziactxfunction", "iniziactxfunctiondefinition", "iniziacurrentcolor", "iniziacurrentlistentrywrapper", "iniziadbinom", "iniziadelimited", "iniziadelimitedtext", "iniziadfrac", "iniziadisplaymath", "iniziadmath", "iniziadocument", "iniziaeffect", "iniziaelement", "iniziaelemento", "iniziaelenco", "iniziaembeddedxtable", "iniziaendofline", "iniziaexceptions", "iniziaexpanded", "iniziaexpandedcollect", "iniziaextendedcatcodetable", "iniziaexternalfigurecollection", "iniziafigura", "iniziafigure", "iniziafitfieldframed", "iniziafittingpage", "iniziafloatcombination", "iniziafont", "iniziafontclass", "iniziafontsolution", "iniziaformula", "iniziaformulas", "iniziafrac", "iniziaframedcontent", "iniziaframedtext", "iniziagrafico", "iniziagridsnapping", "iniziahbox", "iniziahboxestohbox", "iniziahboxregister", "iniziahelptext", "iniziahiddenbar", "iniziahiding", "iniziahighlight", "iniziahyphenation", "iniziaimath", "iniziaimpaccato", "iniziaincorniciato", "iniziaindentation", "iniziaindentedtext", "iniziainmframed", "iniziainteraction", "iniziainterface", "iniziaintermezzo", "iniziaintertext", "iniziaitemgroup", "iniziaknockout", "inizialayout", "inizialineamargine", "inizialineatesto", "inizialinecorrection", "inizialinefiller", "inizialinenumbering", "inizialinetable", "inizialinetablebody", "inizialinetablecell", "inizialinetablehead", "inizialocalfootnotes", "inizialocalheadsetup", "inizialocallinecorrection", "inizialocalnotes", "inizialocalsetups", "inizialua", "inizialuacode", "inizialuaparameterset", "inizialuasetups", "iniziamakeup", "iniziamarginblock", "iniziamarkedcontent", "iniziamathmode", "iniziamathstyle", "iniziamatrices", "iniziamcframed", "iniziamdformula", "iniziamenuinterattivo", "iniziamenzione", "iniziamettiformula", "iniziamframed", "iniziamixedcolumns", "iniziamode", "iniziamodeset", "iniziamodule", "iniziamoduletestsection", "iniziampformula", "inizianamedsection", "inizianamedsubformulas", "inizianarrow", "inizianarrower", "inizianegative", "inizianicelyfilledbox", "inizianobar", "inizianointerference", "inizianotallmodes", "inizianotext", "inizianotmode", "iniziaopposite", "iniziaoutputstream", "iniziaoverlay", "iniziaoverprint", "iniziapagecomment", "iniziapagefigure", "iniziapagegrid", "iniziapagegridspan", "iniziapagelayout", "iniziapar", "iniziaparagraph", "iniziaparagraphs", "iniziaparagraphscell", "iniziaparbuilder", "iniziapath", "iniziaplacepairedbox", "iniziapositioning", "iniziapositionoverlay", "iniziapositive", "iniziapostponing", "iniziaprocessassignmentcommand", "iniziaprocessassignmentlist", "iniziaprocesscommacommand", "iniziaprocesscommalist", "iniziaprodotto", "iniziaprogetto", "iniziaprotect", "iniziaprotectedcolors", "iniziapubblicazione", "iniziapunctuation", "iniziarandomized", "iniziarandomseed", "iniziarawsetups", "iniziareadingfile", "iniziareferenceprefix", "iniziaregime", "iniziareusableMPgraphic", "iniziariga", "iniziasbarrati", "iniziasbarrato", "iniziascript", "iniziasdformula", "iniziasectionblock", "iniziasectionblockenvironment", "iniziasectionlevel", "iniziasetups", "iniziasfondo", "iniziasfrac", "iniziashapebox", "iniziashift", "iniziasidebar", "iniziasimplecolumns", "iniziasopralinea", "iniziasopralinee", "iniziasottoargomento", "iniziasottocapoverso", "iniziasottolinea", "iniziasottolinee", "iniziasottosottoargomento", "iniziasottosottocapoverso", "iniziasottosottosottoargomento", "iniziasottosottosottocapoverso", "iniziasottosottosottosottoargomento", "iniziasottosottosottosottocapoverso", "iniziaspecialitem", "iniziaspeech", "iniziaspformula", "iniziaspread", "iniziastartstop", "iniziastaticMPfigure", "iniziastaticMPgraphic", "iniziastrictinspectnextcharacter", "iniziastrut", "iniziastyle", "iniziasubformulas", "iniziasubjectlevel", "iniziasubsentence", "iniziasubstack", "iniziasymbolset", "iniziatabella", "iniziatable", "iniziatablehead", "iniziatables", "iniziatabletail", "iniziatabulate", "iniziatabulatehead", "iniziatabulatetail", "iniziatagged", "iniziatbinom", "iniziatesta", "iniziatestoaiuto", "iniziatestoincorniciato", "iniziatexcode", "iniziatexdefinition", "iniziatext", "iniziatextbackground", "iniziatextbackgroundmanual", "iniziatextcolor", "iniziatextcolorintent", "iniziatextflow", "iniziatitolo", "iniziatokens", "iniziatransparent", "iniziatypescript", "iniziatypescriptcollection", "iniziaunderdash", "iniziaunderdashes", "iniziaunderdot", "iniziaunderdots", "iniziaunderrandom", "iniziaunderrandoms", "iniziaunderstrike", "iniziaunderstrikes", "iniziaunframed", "iniziauniqueMPgraphic", "iniziauniqueMPpagegraphic", "iniziaunpacked", "iniziausableMPgraphic", "iniziauseMPgraphic", "iniziausemathstyleparameter", "iniziausingbtxspecification", "iniziavaia", "iniziavbox", "iniziavboxregister", "iniziavboxtohbox", "iniziavboxtohboxseparator", "iniziaviewerlayer", "iniziavtop", "iniziavtopregister", "iniziaxcell", "iniziaxcellgroup", "iniziaxfrac", "iniziaxgroup", "iniziaxmldisplayverbatim", "iniziaxmlinlineverbatim", "iniziaxmlraw", "iniziaxmlsetups", "iniziaxrow", "iniziaxrowgroup", "iniziaxtable", "iniziaxtablebody", "iniziaxtablefoot", "iniziaxtablehead", "iniziaxtablenext", "iniziaxxfrac", "inlinebuffer", "inlinedbox", "inlinemath", "inlinemathematics", "inlinemessage", "inlineordisplaymath", "inlinerange", "inmaframed", "innerflushshapebox", "input", "inputfilebarename", "inputfilename", "inputfilerealsuffix", "inputfilesuffix", "inputgivenfile", "inriga", "insertpages", "installactionhandler", "installactivecharacter", "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", "intermezzo", "intertext", "intorno", "invokepageheandler", "istltdir", "istrtdir", "italic", "italicbold", "italiccorrection", "itemtag", "jobfilename", "jobfilesuffix", "kap", "keeplinestogether", "keepunwantedspaces", "kerncharacters", "koreancirclenumerals", "koreannumerals", "koreannumeralsc", "koreannumeralsp", "koreanparentnumerals", "languageCharacters", "languagecharacters", "languagecharwidth", "lastcounter", "lastcountervalue", "lastdigit", "lastlinewidth", "lastnaturalboxdp", "lastnaturalboxht", "lastnaturalboxwd", "lastpredefinedsymbol", "lastrealpage", "lastrealpagenumber", "lastsubcountervalue", "lastsubpage", "lastsubpagenumber", "lasttwodigits", "lastuserpage", "lastuserpagenumber", "lateluacode", "layeredtext", "layerheight", "layerwidth", "lazysavetaggedtwopassdata", "lazysavetwopassdata", "lbox", "left", "leftbottombox", "leftbox", "lefthbox", "leftorrighthbox", "leftorrightvbox", "leftorrightvtop", "leftskipadaption", "leftsubguillemot", "lefttopbox", "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", "limtatefirstline", "lineanera", "lineasottile", "lineatesto", "lineenere", "lineeriempimento", "lineesottili", "linespanningtext", "lingua", "linguaprincipale", "listcitation", "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", "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", "marcatura", "margindata", "markcontent", "markinjector", "mat", "matematica", "math", "mathbf", "mathbi", "mathblackboard", "mathbs", "mathcommand", "mathdefault", "mathfraktur", "mathfunction", "mathit", "mathitalic", "mathop", "mathrm", "mathscript", "mathsl", "mathss", "mathtext", "mathtextbf", "mathtextbi", "mathtextbs", "mathtextit", "mathtextsl", "mathtexttf", "mathtf", "mathtriplet", "mathtt", "mathupright", "mathword", "mathwordbf", "mathwordbi", "mathwordbs", "mathwordit", "mathwordsl", "mathwordtf", "mbox", "mcframed", "md", "measure", "measured", "medskip", "medspace", "menuinterattivo", "menzione", "mequal", "mese", "message", "metaTeX", "mettielenco", "mettielencocombinato", "mettifiancoafianco", "mettiformula", "mettiingriglia", "mettinotepdp", "mettinotepdplocali", "mettinumeropagina", "mettiregistro", "mettisegnalibro", "mettisottoformula", "mettiunosullaltro", "mfence", "mfunction", "mfunctionlabeltext", "mhbox", "mhookleftarrow", "mhookrightarrow", "middle", "middlebox", "midhbox", "minimalhbox", "mixedcaps", "mkvibuffer", "mleftarrow", "mleftharpoondown", "mleftharpoonup", "mleftrightarrow", "mleftrightharpoons", "mmapsto", "moduleparameter", "molecule", "mono", "monobold", "mononormal", "monthlong", "monthshort", "mostraambientefontdeltesto", "mostracolore", "mostracornice", "mostrafontdeltesto", "mostragriglia", "mostragruppocolori", "mostraimpostazioni", "mostralyout", "mostramakeup", "mostrasetsimboli", "mostrastampa", "mostrastruts", "mostratavolozza", "mp", "mprandomnumber", "mrel", "mrightarrow", "mrightharpoondown", "mrightharpoonup", "mrightleftharpoons", "mrightoverleftarrow", "mtext", "mtriplerel", "mtwoheadleftarrow", "mtwoheadrightarrow", "namedheadnumber", "namedstructureheadlocation", "namedstructureuservariable", "namedstructurevariable", "namedtaggedlabeltexts", "nascondere", "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", "nobar", "nocap", "nocitation", "nocite", "nodetostring", "noffigurepages", "noflines", "noflocalfloats", "noindentation", "noitem", "nonfrenchspacing", "nonmathematics", "normal", "normalboldface", "normalframedwithsettings", "normalizebodyfontsize", "normalizedfontsize", "normalizefontdepth", "normalizefontheight", "normalizefontline", "normalizefontwidth", "normalizetextdepth", "normalizetextheight", "normalizetextline", "normalizetextwidth", "normaltypeface", "nota", "notesymbol", "ntimes", "numberofpoints", "numeri", "numeriromani", "numeroformula", "numeropagina", "numeropaginacompleto", "numerotesta", "numerotestacorrente", "obeydepth", "objectdepth", "objectheight", "objectmargin", "objectwidth", "obox", "offset", "offsetbox", "onedigitrounding", "ordinaldaynumber", "ordinalstr", "ornamenttext", "outputfilename", "outputstreambox", "outputstreamcopy", "outputstreamunvbox", "outputstreamunvcopy", "over", "overbar", "overbars", "overbartext", "overbarunderbar", "overbrace", "overbracetext", "overbraceunderbrace", "overbracket", "overbrackettext", "overbracketunderbracket", "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", "pagestaterealpage", "pagina", "paletsize", "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", "placecitation", "placecomments", "placecurrentformulanumber", "placedbox", "placefloat", "placefloatwithsetups", "placeframed", "placehelp", "placeinitial", "placelayer", "placelayeredtext", "placelistofpublications", "placelistofsorts", "placelistofsynonyms", "placelocalnotes", "placement", "placenamedfloat", "placenamedformula", "placenotes", "placepairedbox", "placeparallel", "placerawlist", "placerenderingwindow", "popattribute", "popmacro", "popmode", "popsystemmode", "positionoverlay", "positionregionoverlay", "posizionanumerotesta", "posizionatestotesta", "posizione", "postponenotes", "predefinedfont", "predefinefont", "predefinesymbol", "prefixedpagenumber", "prendibuffer", "prendimarcatura", "prependetoks", "prependgvalue", "prependtocommalist", "prependtoks", "prependtoksonce", "prependvalue", "presetdocument", "presetfieldsymbols", "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", "profiledbox", "profilegivenbox", "progetto", "programma", "pseudoMixedCapped", "pseudoSmallCapped", "pseudoSmallcapped", "pseudosmallcapped", "pulsante", "pulsantemenu", "pulsantinterazione", "punti", "purenumber", "pushattribute", "pushbutton", "pushmacro", "pushmode", "pushoutputstream", "pushsystemmode", "qquad", "quad", "quads", "qualcheriga", "quitcommalist", "quitprevcommalist", "quittypescriptscanning", "raisebox", "randomizetext", "randomnumber", "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", "replaceincommalist", "replaceword", "rescan", "rescanwithsetup", "resetMPdrawing", "resetMPenvironment", "resetMPinstance", "resetallattributes", "resetandaddfeature", "resetbar", "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", "resolvedglyphdirect", "resolvedglyphstyled", "restartcounter", "restorebox", "restorecatcodes", "restorecounter", "restorecurrentattributes", "restoreendofline", "restoreglobalbodyfont", "reusableMPgraphic", "reuseMPgraphic", "reuserandomseed", "revivefeature", "rfence", "rhbox", "rif", "riferimento", "riferimentopagina", "riferimentotesto", "riflessione", "rigariempimento", "right", "rightbottombox", "rightbox", "righthbox", "rightorleftpageaction", "rightskipadaption", "rightsubguillemot", "righttolefthbox", "righttoleftvbox", "righttoleftvtop", "righttopbox", "rigovuoto", "rlap", "robustaddtocommalist", "robustdoifelseinset", "robustdoifinsetelse", "robustpretocommalist", "rollbutton", "roman", "rtop", "ruledhbox", "ruledhpack", "ruledmbox", "ruledtopv", "ruledtpack", "ruledvbox", "ruledvpack", "ruledvtop", "runMPbuffer", "runninghbox", "ruota", "safechar", "sans", "sansbold", "sansnormal", "sansserif", "savebox", "savebtxdataset", "savebuffer", "savecounter", "savecurrentattributes", "savenormalmeaning", "savetaggedtwopassdata", "savetwopassdata", "sbox", "scala", "schermo", "scrividentroelenco", "scriviinelenco", "sd", "secondoffivearguments", "secondoffourarguments", "secondofsixarguments", "secondofthreearguments", "secondofthreeunexpanded", "secondoftwoarguments", "secondoftwounexpanded", "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", "setfractions", "setgmeasure", "setgvalue", "setgvariable", "setgvariables", "sethboxregister", "sethyphenatedurlafter", "sethyphenatedurlbefore", "sethyphenatedurlnormal", "sethyphenationfeatures", "setinitial", "setinjector", "setinteraction", "setinterfacecommand", "setinterfaceconstant", "setinterfaceelements", "setinterfacemessage", "setinterfacevariable", "setinternalrendering", "setitaliccorrection", "setlayer", "setlayerframed", "setlayertext", "setlinefiller", "setlocalhsize", "setmainbodyfont", "setmainparbuilder", "setmarker", "setmarking", "setmathstyle", "setmeasure", "setmessagetext", "setmode", "setnostrut", "setnote", "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", "setupMPgraphics", "setupMPinstance", "setupMPpage", "setupMPvariables", "setupTABLE", "setupTEXpage", "setupattachment", "setupbackend", "setupbar", "setupbleeding", "setupbookmark", "setupbtx", "setupbtxdataset", "setupbtxlist", "setupbtxregister", "setupbtxrendering", "setupbutton", "setupcharacterkerning", "setupcharacterspacing", "setupchemical", "setupchemicalframed", "setupcollector", "setupcolumnspan", "setupcombination", "setupcounter", "setupdataset", "setupdelimitedtext", "setupdescription", "setupdirections", "setupdocument", "setupeffect", "setupenumeration", "setupenv", "setupexport", "setupexternalfigure", "setupexternalsoundtracks", "setupfieldbody", "setupfieldcategory", "setupfieldcontentframed", "setupfieldlabelframed", "setupfieldtotalframed", "setupfiller", "setupfirstline", "setupfittingpage", "setupfloatcaption", "setupfontexpansion", "setupfontprotrusion", "setupfonts", "setupfontsolution", "setupformula", "setupformulaframed", "setupframedcontent", "setupframedtext", "setupglobalreferenceprefix", "setupheadalternative", "setuphelp", "setuphigh", "setuphighlight", "setuphyphenation", "setupindentedtext", "setupinitial", "setupinsertion", "setupitaliccorrection", "setupitemgroup", "setuplabel", "setuplayer", "setuplayeredtext", "setuplayouttext", "setuplinefiller", "setuplinefillers", "setuplinenote", "setuplinetable", "setuplistalternative", "setuplistextra", "setuplocalfloats", "setuplocalinterlinespace", "setuplow", "setuplowhigh", "setuplowmidhigh", "setupmarginblock", "setupmargindata", "setupmarginframed", "setupmarginrule", "setupmathalignment", "setupmathcases", "setupmathematics", "setupmathfence", "setupmathfraction", "setupmathframed", "setupmathmatrix", "setupmathornament", "setupmathradical", "setupmathstackers", "setupmathstyle", "setupmixedcolumns", "setupmodule", "setupnotation", "setupnotations", "setupnote", "setupnotes", "setupoffset", "setupoffsetbox", "setupoutputroutine", "setuppagechecker", "setuppagegrid", "setuppagegridarea", "setuppagegridareatext", "setuppagegridlines", "setuppagegridspan", "setuppagegridstart", "setuppageinjection", "setuppageinjectionalternative", "setuppageshift", "setuppagestate", "setuppairedbox", "setuppaper", "setupparagraph", "setupparagraphintro", "setupparallel", "setupperiods", "setupplacement", "setuppositionbar", "setupprocessor", "setupprofile", "setupquotation", "setuprealpagenumber", "setupreferenceformat", "setupreferenceprefix", "setupreferencestructureprefix", "setupregisters", "setuprenderingwindow", "setups", "setupscale", "setupscript", "setupscripts", "setupselector", "setupshift", "setupsidebar", "setupspellchecking", "setupstretched", "setupstruts", "setupstyle", "setupsubformula", "setuptabulation", "setuptagging", "setuptextbackground", "setuptextflow", "setuptooltip", "setupunit", "setupuserpagenumber", "setupversion", "setupviewerlayer", "setupvspacing", "setupwithargument", "setupwithargumentswapped", "setupxml", "setupxtable", "setuvalue", "setuxvalue", "setvalue", "setvariable", "setvariables", "setvboxregister", "setvisualizerfont", "setvtopregister", "setwidthof", "setxmeasure", "setxvalue", "setxvariable", "setxvariables", "sfondo", "sfrac", "shapedhbox", "showallmakeup", "showattributes", "showboxes", "showbtxdatasetauthors", "showbtxdatasetcompleteness", "showbtxdatasetfields", "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", "simbolo", "simplegroupedcommand", "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", "someheadnumber", "somekindoftab", "somelocalfloat", "somenamedheadnumber", "someplace", "sottoargomento", "sottocapoverso", "sottosottoargomento", "sottosottocapoverso", "sottosottosottoargomento", "sottosottosottocapoverso", "sottosottosottosottoargomento", "sottosottosottosottocapoverso", "sp", "spanishNumerals", "spanishnumerals", "spazifissi", "spazio", "spaziofisso", "speech", "spessoreriga", "spezzaoggettomobile", "splitatasterisk", "splitatcolon", "splitatcolons", "splitatcomma", "splitdfrac", "splitfilename", "splitfrac", "splitoffbase", "splitofffull", "splitoffkind", "splitoffname", "splitoffpath", "splitoffroot", "splitofftokens", "splitofftype", "splitstring", "spreadhbox", "sqrt", "stackcampi", "stackrel", "startregister", "startstructurepageregister", "stirato", "stopregister", "stopstructurepageregister", "strictdoifelsenextoptional", "strictdoifnextoptionalelse", "stripcharacter", "strippedcsname", "stripspaces", "structurelistuservariable", "structurenumber", "structuretitle", "structureuservariable", "structurevariable", "strut", "strutdp", "strutht", "struthtdp", "struttedbox", "strutwd", "style", "styleinstance", "subpagenumber", "subsentence", "substituteincommalist", "subtractfeature", "swapcounts", "swapdimens", "swapface", "swapmacros", "swaptypeface", "switchstyleonly", "switchtocolor", "switchtointerlinespace", "symbolreference", "synchronizeblank", "synchronizeindenting", "synchronizemarking", "synchronizeoutputstreams", "synchronizestrut", "synchronizewhitespace", "systemlog", "systemlogfirst", "systemloglast", "systemsetups", "tLeftarrow", "tLeftrightarrow", "tRightarrow", "tabella", "tabulateautoline", "tabulateautorule", "tabulateline", "tabulaterule", "taggedctxcommand", "taggedlabeltexts", "tbinom", "tbox", "tequal", "terminaJScode", "terminaJSpreamble", "terminaMPclip", "terminaMPcode", "terminaMPdefinitions", "terminaMPdrawing", "terminaMPenvironment", "terminaMPextensions", "terminaMPinclusions", "terminaMPinitializations", "terminaMPpage", "terminaMPpositiongraphic", "terminaMPpositionmethod", "terminaMPrun", "terminaTABLE", "terminaTABLEbody", "terminaTABLEfoot", "terminaTABLEhead", "terminaTABLEnext", "terminaTC", "terminaTD", "terminaTDs", "terminaTEXpage", "terminaTH", "terminaTN", "terminaTR", "terminaTRs", "terminaTX", "terminaTY", "terminaallmodes", "terminaambiente", "terminaargomento", "terminaarrangedpages", "terminaaside", "terminaattachment", "terminabar", "terminabinom", "terminabitmapimage", "terminablockquote", "terminabtxrenderingdefinitions", "terminabuffer", "terminabutton", "terminacapitolo", "terminacapoverso", "terminacatcodetable", "terminacharacteralign", "terminacheckedfences", "terminachemical", "terminacitazione", "terminacollect", "terminacollecting", "terminacolore", "terminacolorintent", "terminacoloronly", "terminacolorset", "terminacolumns", "terminacolumnspan", "terminacombination", "terminacomment", "terminacommento", "terminacomponenet", "terminacontextcode", "terminacontextdefinitioncode", "terminactxfunction", "terminactxfunctiondefinition", "terminacurrentcolor", "terminacurrentlistentrywrapper", "terminadbinom", "terminadelimited", "terminadelimitedtext", "terminadfrac", "terminadisplaymath", "terminadmath", "terminadocument", "terminaeffect", "terminaelement", "terminaelemento", "terminaelenco", "terminaembeddedxtable", "terminaendofline", "terminaexceptions", "terminaexpanded", "terminaexpandedcollect", "terminaextendedcatcodetable", "terminaexternalfigurecollection", "terminafigura", "terminafigure", "terminafitfieldframed", "terminafittingpage", "terminafloatcombination", "terminafont", "terminafontclass", "terminafontsolution", "terminaformula", "terminaformulas", "terminafrac", "terminaframedcontent", "terminaframedtext", "terminagrafico", "terminagridsnapping", "terminahbox", "terminahboxestohbox", "terminahboxregister", "terminahelptext", "terminahiddenbar", "terminahiding", "terminahighlight", "terminahyphenation", "terminaimath", "terminaimpaccato", "terminaincorniciato", "terminaindentation", "terminaindentedtext", "terminainmframed", "terminainteraction", "terminainterface", "terminaintermezzo", "terminaintertext", "terminaitemgroup", "terminaknockout", "terminalayout", "terminalineamargine", "terminalineatesto", "terminalinecorrection", "terminalinefiller", "terminalinenumbering", "terminalinetable", "terminalinetablebody", "terminalinetablecell", "terminalinetablehead", "terminalocalfootnotes", "terminalocalheadsetup", "terminalocallinecorrection", "terminalocalnotes", "terminalocalsetups", "terminalua", "terminaluacode", "terminaluaparameterset", "terminaluasetups", "terminamakeup", "terminamarginblock", "terminamarkedcontent", "terminamathmode", "terminamathstyle", "terminamatrices", "terminamcframed", "terminamdformula", "terminamenuinterattivo", "terminamenzione", "terminamettiformula", "terminamframed", "terminamixedcolumns", "terminamode", "terminamodeset", "terminamodule", "terminamoduletestsection", "terminampformula", "terminanamedsection", "terminanamedsubformulas", "terminanarrow", "terminanarrower", "terminanegative", "terminanicelyfilledbox", "terminanobar", "terminanointerference", "terminanotallmodes", "terminanotext", "terminanotmode", "terminaopposite", "terminaoutputstream", "terminaoverlay", "terminaoverprint", "terminapagecomment", "terminapagefigure", "terminapagegrid", "terminapagegridspan", "terminapagelayout", "terminapar", "terminaparagraph", "terminaparagraphs", "terminaparagraphscell", "terminaparbuilder", "terminapath", "terminaplacepairedbox", "terminapositioning", "terminapositionoverlay", "terminapositive", "terminapostponing", "terminaprocessassignmentcommand", "terminaprocessassignmentlist", "terminaprocesscommacommand", "terminaprocesscommalist", "terminaprodotto", "terminaprogetto", "terminaprotect", "terminaprotectedcolors", "terminapubblicazione", "terminapunctuation", "terminarandomized", "terminarandomseed", "terminarawsetups", "terminareadingfile", "terminareferenceprefix", "terminaregime", "terminareusableMPgraphic", "terminariga", "terminasbarrati", "terminasbarrato", "terminascript", "terminasdformula", "terminasectionblock", "terminasectionblockenvironment", "terminasectionlevel", "terminasetups", "terminasfondo", "terminasfrac", "terminashapebox", "terminashift", "terminasidebar", "terminasimplecolumns", "terminasopralinea", "terminasopralinee", "terminasottoargomento", "terminasottocapoverso", "terminasottolinea", "terminasottolinee", "terminasottosottoargomento", "terminasottosottocapoverso", "terminasottosottosottoargomento", "terminasottosottosottocapoverso", "terminasottosottosottosottoargomento", "terminasottosottosottosottocapoverso", "terminaspecialitem", "terminaspeech", "terminaspformula", "terminaspread", "terminastartstop", "terminastaticMPfigure", "terminastaticMPgraphic", "terminastrictinspectnextcharacter", "terminastrut", "terminastyle", "terminasubformulas", "terminasubjectlevel", "terminasubsentence", "terminasubstack", "terminasymbolset", "terminatabella", "terminatable", "terminatablehead", "terminatables", "terminatabletail", "terminatabulate", "terminatabulatehead", "terminatabulatetail", "terminatagged", "terminatbinom", "terminatesta", "terminatestoaiuto", "terminatestoincorniciato", "terminatexcode", "terminatexdefinition", "terminatext", "terminatextbackground", "terminatextbackgroundmanual", "terminatextcolor", "terminatextcolorintent", "terminatextflow", "terminatitolo", "terminatokens", "terminatransparent", "terminatypescript", "terminatypescriptcollection", "terminaunderdash", "terminaunderdashes", "terminaunderdot", "terminaunderdots", "terminaunderrandom", "terminaunderrandoms", "terminaunderstrike", "terminaunderstrikes", "terminaunframed", "terminauniqueMPgraphic", "terminauniqueMPpagegraphic", "terminaunpacked", "terminausableMPgraphic", "terminauseMPgraphic", "terminausemathstyleparameter", "terminausingbtxspecification", "terminavaia", "terminavbox", "terminavboxregister", "terminavboxtohbox", "terminavboxtohboxseparator", "terminaviewerlayer", "terminavtop", "terminavtopregister", "terminaxcell", "terminaxcellgroup", "terminaxfrac", "terminaxgroup", "terminaxmldisplayverbatim", "terminaxmlinlineverbatim", "terminaxmlraw", "terminaxmlsetups", "terminaxrow", "terminaxrowgroup", "terminaxtable", "terminaxtablebody", "terminaxtablefoot", "terminaxtablehead", "terminaxtablenext", "terminaxxfrac", "testandsplitstring", "testcolumn", "testfeature", "testfeatureonce", "testoaiuto", "testoincorniciato", "testonotapdp", "testoriempimento", "testpage", "testpageonly", "testpagesync", "testtokens", "tex", "texdefinition", "texsetup", "textcitation", "textcite", "textcontrolspace", "textflowcollector", "textmath", "textminus", "textormathchar", "textplus", "textvisiblespace", "tfrac", "thainumerals", "thefirstcharacter", "thenormalizedbodyfontsize", "theremainingcharacters", "thickspace", "thinspace", "thirdoffivearguments", "thirdoffourarguments", "thirdofsixarguments", "thirdofthreearguments", "thirdofthreeunexpanded", "thookleftarrow", "thookrightarrow", "threedigitrounding", "tibetannumerals", "tieniblocchi", "tightlayer", "tinyfont", "titolo", "tlap", "tleftarrow", "tleftharpoondown", "tleftharpoonup", "tleftrightarrow", "tleftrightharpoons", "tmapsto", "tochar", "tolinenote", "topbox", "topleftbox", "toplinebox", "toprightbox", "topskippedbox", "tracecatcodetables", "tracedfontname", "traceoutputroutines", "tracepositions", "traduci", "transparencycomponents", "transparent", "trel", "trightarrow", "trightharpoondown", "trightharpoonup", "trightleftharpoons", "trightoverleftarrow", "triplebond", "truefilename", "truefontname", "ttriplerel", "ttwoheadleftarrow", "ttwoheadrightarrow", "twodigitrounding", "tx", "txx", "typ", "type", "typebuffer", "typedefinedbuffer", "typeface", "typefile", "typescriptone", "typescriptprefix", "typescriptthree", "typescripttwo", "typesetbuffer", "typesetfile", "uconvertnumber", "uedcatcodecommand", "undefinevalue", "undepthed", "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", "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", "useblankparameter", "usebodyfont", "usebodyfontparameter", "usebtxdataset", "usebtxdefinitions", "usecolors", "usecomponent", "usedummycolorparameter", "usedummystyleandcolor", "usedummystyleparameter", "useenvironment", "useexternalrendering", "usefigurebase", "usefile", "usegridparameter", "useindentingparameter", "useindentnextparameter", "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", "verbatim", "verbatimstring", "verbosenumber", "versione", "verticalgrowingbar", "verticalpositionbar", "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", "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", "Lua", "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", "MPwhd", "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", "TEXpage", "TaBlE", "TeX", "TheNormalizedFontSize", "TransparencyHack", "VerboseNumber", "WEEKDAG", "WOORD", "WOORDEN", "WidthSpanningText", "Woord", "Woorden", "XETEX", "XeTeX", "aanhangsel", "abjadnaivenumerals", "abjadnodotnumerals", "abjadnumerals", "about", "achtergrond", "activatespacehandler", "adaptcollector", "adaptfontfeature", "adaptpapersize", "addfeature", "addtoJSpreamble", "addtocommalist", "addvalue", "aftersplitstring", "aftertestandsplitstring", "alignmentcharacter", "allinputpaths", "alphabeticnumerals", "alwayscitation", "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", "aside", "assignalfadimension", "assigndimen", "assigndimension", "assignifempty", "assigntranslation", "assignvalue", "assignwidth", "assumelongusagecs", "astype", "attachment", "autocap", "autodirhbox", "autodirvbox", "autodirvtop", "autoinsertnextspace", "automathematics", "autosetups", "availablehsize", "averagecharwidth", "backgroundimage", "backgroundimagefill", "backgroundline", "basegrid", "baselineleftbox", "baselinemiddlebox", "baselinerightbox", "bbox", "beforesplitstring", "beforetestandsplitstring", "bepaalkopnummer", "bepaallijstkenmerken", "bepaalregisterkenmerken", "bewaarbuffer", "big", "bigbodyfont", "bigg", "bigger", "biggl", "biggm", "biggr", "bigl", "bigm", "bigr", "bigskip", "binom", "bitmapimage", "blanko", "blap", "bleed", "bleedheight", "bleedwidth", "blockligatures", "blockquote", "blokcitaat", "blokje", "blokjes", "bodyfontenvironmentlist", "bodyfontsize", "bold", "boldface", "bolditalic", "boldslanted", "bookmark", "booleanmodevalue", "bottombox", "bottomleftbox", "bottomrightbox", "boxcursor", "boxmarker", "boxofsize", "boxreference", "bpos", "bthiddencitation", "btxabbreviatedjournal", "btxaddjournal", "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", "btxlistcitation", "btxloadjournalist", "btxoneorrange", "btxremapauthor", "btxsavejournalist", "btxsetup", "btxsingularorplural", "btxsingularplural", "btxtextcitation", "button", "calligraphic", "camel", "catcodetablename", "cbox", "centerbox", "centeredbox", "centerednextbox", "cfrac", "chardescription", "charwidthlanguage", "checkcharacteralign", "checkedchar", "checkedfiller", "checkedstrippedcsname", "checkinjector", "checknextindentation", "checknextinjector", "checkpage", "checkparameters", "checkpreviousinjector", "checksoundtrack", "checktwopassdata", "checkvariables", "chem", "chemical", "chemicalbottext", "chemicalmidtext", "chemicalsymbol", "chemicaltext", "chemicaltoptext", "chineseallnumerals", "chinesecapnumerals", "chinesenumerals", "cijfers", "citaat", "citation", "cite", "citeer", "clap", "classfont", "cldcommand", "cldcontext", "cldloadfile", "cldprocessfile", "cleftarrow", "clip", "collect", "collectedtext", "collectexpanded", "colorcomponents", "colored", "coloronly", "columnbreak", "combinepages", "commalistelement", "commalistsentence", "commalistsize", "comment", "commentaar", "comparedimension", "comparedimensioneps", "completebtxrendering", "completelist", "completelistofpublications", "completelistofsorts", "completelistofsynonyms", "complexorsimple", "complexorsimpleempty", "composedcollector", "composedlayer", "compresult", "constantdimen", "constantdimenargument", "constantemptyargument", "constantnumber", "constantnumberargument", "contentreference", "continuednumber", "continueifinputfile", "convertargument", "convertcommand", "convertedcounter", "converteddimen", "convertedsubcounter", "converteernummer", "convertmonth", "convertvalue", "convertvboxtohbox", "copieerveld", "copypages", "copyparameters", "copyposition", "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", "datasetvariable", "datum", "dayoftheweek", "dayspermonth", "dbinom", "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", "definecomplexorsimpleempty", "defineconversionset", "definecounter", "definedataset", "definedelimitedtext", "definedfont", "defineeffect", "defineexpandable", "defineexternalfigure", "definefallbackfamily", "definefieldbody", "definefieldbodyset", "definefieldcategory", "definefileconstant", "definefilefallback", "definefilesynonym", "definefiller", "definefirstline", "definefittingpage", "definefontalternative", "definefontfallback", "definefontfamily", "definefontfamilypreset", "definefontfeature", "definefontfile", "definefontsize", "definefontsolution", "defineformula", "defineformulaalternative", "defineformulaframed", "defineframedcontent", "definefrozenfont", "defineglobalcolor", "definegraphictypesynonym", "definegridsnapping", "defineheadalternative", "definehelp", "definehigh", "definehighlight", "definehspace", "definehypenationfeatures", "defineindenting", "defineinitial", "defineinsertion", "defineinteraction", "defineinteractionbar", "defineinterfaceconstant", "defineinterfaceelement", "defineinterfacevariable", "defineinterlinespace", "defineintermediatecolor", "defineitems", "definelabelclass", "definelayerpreset", "definelinefiller", "definelinenote", "definelinenumbering", "definelines", "definelistalternative", "definelistextra", "definelow", "definelowhigh", "definelowmidhigh", "definemarginblock", "definemargindata", "definemarker", "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", "definenamespace", "definenarrower", "definenote", "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", "definieeralineas", "definieerblok", "definieerbuffer", "definieercombinatie", "definieerconversie", "definieerfiguursymbool", "definieerfont", "definieerfontstijl", "definieerfontsynoniem", "definieerhbox", "definieeringesprongentext", "definieerinteractiemenu", "definieeritemgroep", "definieerkadertekst", "definieerkleur", "definieerkleurgroep", "definieerkolomovergang", "definieerkop", "definieerkorps", "definieerkorpsomgeving", "definieerlayer", "definieerlayout", "definieerletter", "definieerlijst", "definieermarkering", "definieeromlijnd", "definieeropmaak", "definieeroverlay", "definieerpaginaovergang", "definieerpalet", "definieerpapierformaat", "definieerplaats", "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", "dimensiontocount", "directcolor", "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", "doornummeren", "dopositionaction", "doprocesslocalsetups", "doquadrupleargument", "doquadrupleempty", "doquadruplegroupempty", "doquintupleargument", "doquintupleempty", "doquintuplegroupempty", "dorechecknextindentation", "dorecurse", "dorepeatwithcommand", "doreplacefeature", "doresetandafffeature", "doresetattribute", "dorotatebox", "dosetattribute", "dosetleftskipadaption", "dosetrightskipadaption", "dosetupcheckedinterlinespace", "doseventupleargument", "doseventupleempty", "dosingleargument", "dosingleempty", "dosinglegroupempty", "dosixtupleargument", "dosixtupleempty", "dostepwiserecurse", "dosubtractfeature", "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", "enskip", "enspace", "env", "envvar", "eoverbarfill", "eoverbracefill", "eoverbracketfill", "eoverparentfill", "epos", "equaldigits", "ergens", "erightarrowfill", "erightharpoondownfill", "erightharpoonupfill", "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", "fence", "fenced", "fetchallmarkings", "fetchallmarks", "fetchmark", "fetchmarking", "fetchonemark", "fetchonemarking", "fetchruntinecommand", "fetchtwomarkings", "fetchtwomarks", "fieldbody", "fifthoffivearguments", "fifthofsixarguments", "figurefilename", "figurefilepath", "figurefiletype", "figurefullname", "figureheight", "figurenaturalheight", "figurenaturalwidth", "figuresymbol", "figurewidth", "figuur", "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", "flushboxregister", "flushcollector", "flushlayer", "flushlocalfloats", "flushnextbox", "flushnotes", "flushoutputstream", "flushshapebox", "flushtextflow", "flushtokens", "flushtoks", "fontalternative", "fontbody", "fontchar", "fontcharbyindex", "fontclass", "fontclassname", "fontface", "fontfeaturelist", "fontsize", "fontstyle", "forcecharacterstripping", "forcelocalfloats", "forgeteverypar", "forgetparameters", "formula", "formulenummer", "foundbox", "fourthoffivearguments", "fourthoffourarguments", "fourthofsixarguments", "frac", "frameddimension", "framedparameter", "framedtext", "freezedimenmacro", "freezemeasure", "frenchspacing", "fromlinenote", "frozenhbox", "gdefconvertedargument", "gdefconvertedcommand", "gebruikJSscripts", "gebruikURL", "gebruikblokken", "gebruikexterndocument", "gebruikexternfiguur", "gebruikexterngeluidsfragment", "gebruikmodule", "gebruikpad", "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", "getprivatechar", "getprivateslot", "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", "grabbufferdata", "grabbufferdatadirect", "grabuntil", "grafiek", "grayvalue", "greedysplitstring", "greeknumerals", "grijskleur", "groupedcommand", "gsetboxllx", "gsetboxlly", "gujaratinumerals", "gurmurkhinumerals", "haalbuffer", "haalmarkering", "haarlijn", "hairspace", "halfwaybox", "handhaafblokken", "handletokens", "handwritten", "hash", "hboxofvbox", "hboxreference", "hdofstring", "headhbox", "headnumbercontent", "headnumberdistance", "headnumberwidth", "headreferenceattributes", "headsetupspacing", "headtextcontent", "headtextdistance", "headtextwidth", "headvbox", "headwidth", "heightanddepthofstring", "heightofstring", "heightspanningtext", "helptekst", "helptext", "hglue", "hiddenbar", "hiddencitation", "hiddencite", "highlight", "highordinalstr", "hilo", "himilo", "hl", "hoofdstuk", "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", "includemenu", "includeversioninfo", "increment", "incrementcounter", "incrementedcounter", "incrementpagenumber", "incrementsubpagenumber", "incrementvalue", "indentation", "infofont", "infofontbold", "inheritparameter", "inhibitblank", "initializeboxstack", "inlijnd", "inlinebuffer", "inlinedbox", "inlinemath", "inlinemathematics", "inlinemessage", "inlineordisplaymath", "inlinerange", "innerflushshapebox", "input", "inputfilebarename", "inputfilename", "inputfilerealsuffix", "inputfilesuffix", "inputgivenfile", "inregel", "insertpages", "installactionhandler", "installactivecharacter", "installanddefineactivecharacter", "installattributestack", "installautocommandhandler", "installautosetuphandler", "installbasicautosetuphandler", "installbasicparameterhandler", "installbottomframerenderer", "installcommandhandler", "installcorenamespace", "installdefinehandler", "installdefinitionset", "installdefinitionsetmember", "installdirectcommandhandler", "installdirectparameterhandler", "installdirectparametersethandler", "installdirectsetuphandler", "installdirectstyleandcolorhandler", "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", "intermezzo", "intertext", "invokepageheandler", "invullijnen", "invulregel", "invultekst", "inwilijnd", "istltdir", "istrtdir", "italic", "italicbold", "italiccorrection", "items", "itemtag", "jobfilename", "jobfilesuffix", "kadertekst", "kap", "keeplinestogether", "keepunwantedspaces", "kerncharacters", "kleur", "kleurenbalk", "kleurwaarde", "kloonveld", "kolom", "kopnummer", "koreancirclenumerals", "koreannumerals", "koreannumeralsc", "koreannumeralsp", "koreanparentnumerals", "laag", "laho", "languageCharacters", "languagecharacters", "languagecharwidth", "lastcounter", "lastcountervalue", "lastdigit", "lastlinewidth", "lastnaturalboxdp", "lastnaturalboxht", "lastnaturalboxwd", "lastpredefinedsymbol", "lastrealpage", "lastrealpagenumber", "lastsubcountervalue", "lastsubpage", "lastsubpagenumber", "lasttwodigits", "lastuserpage", "lastuserpagenumber", "lateluacode", "layeredtext", "layerheight", "layerwidth", "lazysavetaggedtwopassdata", "lazysavetwopassdata", "lbox", "left", "leftbottombox", "leftbox", "lefthbox", "leftorrighthbox", "leftorrightvbox", "leftorrightvtop", "leftskipadaption", "leftsubguillemot", "lefttopbox", "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", "limtatefirstline", "linespanningtext", "listcitation", "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", "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", "margindata", "markcontent", "markeer", "markinjector", "mat", "math", "mathbf", "mathbi", "mathblackboard", "mathbs", "mathcommand", "mathdefault", "mathfraktur", "mathfunction", "mathit", "mathitalic", "mathop", "mathrm", "mathscript", "mathsl", "mathss", "mathtext", "mathtextbf", "mathtextbi", "mathtextbs", "mathtextit", "mathtextsl", "mathtexttf", "mathtf", "mathtriplet", "mathtt", "mathupright", "mathword", "mathwordbf", "mathwordbi", "mathwordbs", "mathwordit", "mathwordsl", "mathwordtf", "mbox", "mcframed", "md", "measure", "measured", "medskip", "medspace", "menubutton", "mequal", "message", "metaTeX", "mfence", "mfunction", "mfunctionlabeltext", "mhbox", "mhookleftarrow", "mhookrightarrow", "middle", "middlebox", "midhbox", "minimalhbox", "mixedcaps", "mkvibuffer", "mleftarrow", "mleftharpoondown", "mleftharpoonup", "mleftrightarrow", "mleftrightharpoons", "mmapsto", "moduleparameter", "molecule", "mono", "monobold", "mononormal", "monthlong", "monthshort", "mp", "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", "nobar", "nocitation", "nocite", "nodetostring", "noffigurepages", "noflines", "noflocalfloats", "noindentation", "noitem", "nokap", "nonfrenchspacing", "nonmathematics", "noot", "normal", "normalboldface", "normalframedwithsettings", "normalizebodyfontsize", "normalizedfontsize", "normalizefontdepth", "normalizefontheight", "normalizefontline", "normalizefontwidth", "normalizetextdepth", "normalizetextheight", "normalizetextline", "normalizetextwidth", "normaltypeface", "notesymbol", "ntimes", "numberofpoints", "obeydepth", "objectdepth", "objectheight", "objectmargin", "objectwidth", "obox", "offset", "offsetbox", "omgeving", "omlaag", "omlijnd", "onbekend", "onderdeel", "onderwerp", "onedigitrounding", "op", "oppagina", "opsomming", "ordinaldaynumber", "ordinalstr", "ornamenttext", "outputfilename", "outputstreambox", "outputstreamcopy", "outputstreamunvbox", "outputstreamunvcopy", "over", "overbar", "overbars", "overbartext", "overbarunderbar", "overbrace", "overbracetext", "overbraceunderbrace", "overbracket", "overbrackettext", "overbracketunderbracket", "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", "pagestaterealpage", "pagina", "paginanummer", "paginareferentie", "paletsize", "paragraaf", "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", "plaatslijst", "plaatslijstmetsynoniemen", "plaatslokalevoetnoten", "plaatsnaastelkaar", "plaatsonderelkaar", "plaatsopgrid", "plaatspaginanummer", "plaatsplaatsblok", "plaatsregister", "plaatsruwelijst", "plaatssamengesteldelijst", "plaatssubformule", "plaatsvoetnoten", "placeattachments", "placebtxrendering", "placecitation", "placecomments", "placecurrentformulanumber", "placedbox", "placefloatwithsetups", "placeframed", "placehelp", "placeinitial", "placelayer", "placelayeredtext", "placelistofpublications", "placelistofsorts", "placelocalnotes", "placement", "placenamedfloat", "placenamedformula", "placenotes", "placepairedbox", "placeparallel", "placerenderingwindow", "popattribute", "popmacro", "popmode", "popsystemmode", "positioneer", "positionoverlay", "positionregionoverlay", "postponenotes", "predefinedfont", "predefinefont", "predefinesymbol", "prefixedpagenumber", "prependetoks", "prependgvalue", "prependtocommalist", "prependtoks", "prependtoksonce", "prependvalue", "presetdocument", "presetfieldsymbols", "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", "profiledbox", "profilegivenbox", "programma", "projekt", "pseudoMixedCapped", "pseudoSmallCapped", "pseudoSmallcapped", "pseudosmallcapped", "punten", "purenumber", "pushattribute", "pushbutton", "pushmacro", "pushmode", "pushoutputstream", "pushsystemmode", "qquad", "quad", "quads", "quitcommalist", "quitprevcommalist", "quittypescriptscanning", "raisebox", "randomizetext", "randomnumber", "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", "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", "replaceincommalist", "replaceword", "rescan", "rescanwithsetup", "resetMPdrawing", "resetMPenvironment", "resetMPinstance", "resetallattributes", "resetandaddfeature", "resetbar", "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", "resolvedglyphdirect", "resolvedglyphstyled", "restartcounter", "restorebox", "restorecatcodes", "restorecounter", "restorecurrentattributes", "restoreendofline", "restoreglobalbodyfont", "reusableMPgraphic", "reuseMPgraphic", "reuserandomseed", "revivefeature", "rfence", "rhbox", "right", "rightbottombox", "rightbox", "righthbox", "rightorleftpageaction", "rightskipadaption", "rightsubguillemot", "righttolefthbox", "righttoleftvbox", "righttoleftvtop", "righttopbox", "rlap", "robustaddtocommalist", "robustdoifelseinset", "robustdoifinsetelse", "robustpretocommalist", "rollbutton", "roman", "romeins", "rooster", "roteer", "rtop", "ruledhbox", "ruledhpack", "ruledmbox", "ruledtopv", "ruledtpack", "ruledvbox", "ruledvpack", "ruledvtop", "runMPbuffer", "runninghbox", "safechar", "sans", "sansbold", "sansnormal", "sansserif", "savebox", "savebtxdataset", "savecounter", "savecurrentattributes", "savenormalmeaning", "savetaggedtwopassdata", "savetwopassdata", "sbox", "schaal", "scherm", "schrijfnaarlijst", "schrijftussenlijst", "sd", "secondoffivearguments", "secondoffourarguments", "secondofsixarguments", "secondofthreearguments", "secondofthreeunexpanded", "secondoftwoarguments", "secondoftwounexpanded", "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", "setfractions", "setgmeasure", "setgvalue", "setgvariable", "setgvariables", "sethboxregister", "sethyphenatedurlafter", "sethyphenatedurlbefore", "sethyphenatedurlnormal", "sethyphenationfeatures", "setinitial", "setinjector", "setinteraction", "setinterfacecommand", "setinterfaceconstant", "setinterfaceelements", "setinterfacemessage", "setinterfacevariable", "setinternalrendering", "setitaliccorrection", "setlayer", "setlayerframed", "setlayertext", "setlinefiller", "setlocalhsize", "setmainbodyfont", "setmainparbuilder", "setmarker", "setmarking", "setmathstyle", "setmeasure", "setmessagetext", "setmode", "setnostrut", "setnote", "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", "setupMPgraphics", "setupMPinstance", "setupMPpage", "setupMPvariables", "setupTABLE", "setupTEXpage", "setupattachment", "setupbackend", "setupbar", "setupbleeding", "setupbookmark", "setupbtx", "setupbtxdataset", "setupbtxlist", "setupbtxregister", "setupbtxrendering", "setupbutton", "setupcharacterkerning", "setupcharacterspacing", "setupchemical", "setupchemicalframed", "setupcollector", "setupcolumnspan", "setupcombination", "setupcounter", "setupdataset", "setupdelimitedtext", "setupdirections", "setupdocument", "setupeffect", "setupenv", "setupexport", "setupexternalfigure", "setupexternalsoundtracks", "setupfieldbody", "setupfieldcategory", "setupfieldcontentframed", "setupfieldlabelframed", "setupfieldtotalframed", "setupfiller", "setupfirstline", "setupfittingpage", "setupfloatcaption", "setupfontexpansion", "setupfontprotrusion", "setupfonts", "setupfontsolution", "setupformulaframed", "setupframedcontent", "setupglobalreferenceprefix", "setupheadalternative", "setuphelp", "setuphigh", "setuphighlight", "setuphyphenation", "setupinitial", "setupinsertion", "setupitaliccorrection", "setuplabel", "setuplayer", "setuplayeredtext", "setuplayouttext", "setuplinefiller", "setuplinefillers", "setuplinenote", "setuplinetable", "setuplistalternative", "setuplistextra", "setuplocalfloats", "setuplocalinterlinespace", "setuplow", "setuplowhigh", "setuplowmidhigh", "setupmarginframed", "setupmarginrule", "setupmathcases", "setupmathematics", "setupmathfence", "setupmathfraction", "setupmathframed", "setupmathmatrix", "setupmathornament", "setupmathradical", "setupmathstackers", "setupmathstyle", "setupmixedcolumns", "setupmodule", "setupnotation", "setupnotations", "setupnote", "setupnotes", "setupoffset", "setupoffsetbox", "setupoutputroutine", "setuppagechecker", "setuppagegrid", "setuppagegridarea", "setuppagegridareatext", "setuppagegridlines", "setuppagegridspan", "setuppagegridstart", "setuppageinjection", "setuppageinjectionalternative", "setuppageshift", "setuppagestate", "setuppairedbox", "setupparagraph", "setupparagraphintro", "setupparallel", "setupperiods", "setuppositionbar", "setupprocessor", "setupprofile", "setupquotation", "setuprealpagenumber", "setupreferenceformat", "setupreferenceprefix", "setupreferencestructureprefix", "setupregisters", "setuprenderingwindow", "setups", "setupscale", "setupscript", "setupscripts", "setupselector", "setupshift", "setupsidebar", "setupspellchecking", "setupstretched", "setupstruts", "setupstyle", "setupsubformula", "setuptabulation", "setuptagging", "setuptextflow", "setuptooltip", "setupunit", "setupuserpagenumber", "setupversion", "setupviewerlayer", "setupvspacing", "setupwithargument", "setupwithargumentswapped", "setupxml", "setupxtable", "setuvalue", "setuxvalue", "setvalue", "setvariable", "setvariables", "setvboxregister", "setvisualizerfont", "setvtopregister", "setwidthof", "setxmeasure", "setxvalue", "setxvariable", "setxvariables", "sfrac", "shapedhbox", "showallmakeup", "showattributes", "showboxes", "showbtxdatasetauthors", "showbtxdatasetcompleteness", "showbtxdatasetfields", "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", "simplegroupedcommand", "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", "som", "someheadnumber", "somekindoftab", "somelocalfloat", "somenamedheadnumber", "someplace", "sp", "spanishNumerals", "spanishnumerals", "spatie", "speech", "spiegel", "splitatasterisk", "splitatcolon", "splitatcolons", "splitatcomma", "splitdfrac", "splitfilename", "splitfrac", "splitoffbase", "splitofffull", "splitoffkind", "splitoffname", "splitoffpath", "splitoffroot", "splitofftokens", "splitofftype", "splitsplaatsblok", "splitstring", "spraak", "spreadhbox", "sqrt", "stackrel", "startJScode", "startJSpreamble", "startMPclip", "startMPcode", "startMPdefinitions", "startMPdrawing", "startMPenvironment", "startMPextensions", "startMPinclusions", "startMPinitializations", "startMPpage", "startMPpositiongraphic", "startMPpositionmethod", "startMPrun", "startTABLE", "startTABLEbody", "startTABLEfoot", "startTABLEhead", "startTABLEnext", "startTC", "startTD", "startTDs", "startTEXpage", "startTH", "startTN", "startTR", "startTRs", "startTX", "startTY", "startaanhangsel", "startachtergrond", "startallmodes", "startarrangedpages", "startaside", "startattachment", "startbar", "startbinom", "startbitmapimage", "startblockquote", "startblokcitaat", "startbtxrenderingdefinitions", "startbuffer", "startbutton", "startcatcodetable", "startcharacteralign", "startcheckedfences", "startchemical", "startcitaat", "startciteer", "startcollect", "startcollecting", "startcolorintent", "startcoloronly", "startcolorset", "startcolumns", "startcolumnspan", "startcombination", "startcomment", "startcommentaar", "startcontextcode", "startcontextdefinitioncode", "startctxfunction", "startctxfunctiondefinition", "startcurrentcolor", "startcurrentlistentrywrapper", "startdbinom", "startdelimited", "startdelimitedtext", "startdfrac", "startdisplaymath", "startdmath", "startdocument", "startdoorstreep", "startdoorstrepen", "starteffect", "startelement", "startembeddedxtable", "startendofline", "startexceptions", "startexpanded", "startexpandedcollect", "startextendedcatcodetable", "startexternalfigurecollection", "startfigure", "startfiguur", "startfitfieldframed", "startfittingpage", "startfloatcombination", "startfont", "startfontclass", "startfontsolution", "startformula", "startformulas", "startfrac", "startframedcontent", "startframedtext", "startgrafiek", "startgridsnapping", "starthbox", "starthboxestohbox", "starthboxregister", "starthelptekst", "starthelptext", "starthiddenbar", "starthiding", "starthighlight", "starthoofdstuk", "starthyphenation", "startimath", "startindentation", "startindentedtext", "startinmframed", "startinteractiemenu", "startinteraction", "startinterface", "startintermezzo", "startintertext", "startitemgroup", "startkadertekst", "startkantlijn", "startkleur", "startknockout", "startkop", "startlayout", "startlinefiller", "startlinenumbering", "startlinetable", "startlinetablebody", "startlinetablecell", "startlinetablehead", "startlocalheadsetup", "startlocallinecorrection", "startlocalnotes", "startlocalsetups", "startlokalevoetnoten", "startlua", "startluacode", "startluaparameterset", "startluasetups", "startmakeup", "startmargeblok", "startmarkedcontent", "startmathmode", "startmathstyle", "startmatrices", "startmcframed", "startmdformula", "startmframed", "startmixedcolumns", "startmode", "startmodeset", "startmodule", "startmoduletestsection", "startmpformula", "startnaar", "startnamedsection", "startnamedsubformulas", "startnarrow", "startnarrower", "startnegative", "startnicelyfilledbox", "startnobar", "startnointerference", "startnotallmodes", "startnotext", "startnotmode", "startomgeving", "startomlijnd", "startonderdeel", "startonderstreep", "startonderstrepen", "startonderwerp", "startopelkaar", "startopposite", "startopsomming", "startoutputstream", "startoverlay", "startoverprint", "startoverstreep", "startoverstrepen", "startpagecomment", "startpagefigure", "startpagegrid", "startpagegridspan", "startpagelayout", "startpar", "startparagraaf", "startparagraph", "startparagraphs", "startparagraphscell", "startparbuilder", "startpath", "startplaatsformule", "startplacepairedbox", "startpositioning", "startpositionoverlay", "startpositive", "startpostponing", "startprocessassignmentcommand", "startprocessassignmentlist", "startprocesscommacommand", "startprocesscommalist", "startprodukt", "startprojekt", "startprotect", "startprotectedcolors", "startpublicatie", "startpunctuation", "startrandomized", "startrandomseed", "startrawsetups", "startreadingfile", "startreferenceprefix", "startregel", "startregelcorrectie", "startregime", "startregister", "startreusableMPgraphic", "startscript", "startsdformula", "startsectionblock", "startsectionblockenvironment", "startsectionlevel", "startsetups", "startsfrac", "startshapebox", "startshift", "startsidebar", "startsimplecolumns", "startsom", "startspecialitem", "startspeech", "startspformula", "startspraak", "startspread", "startstartstop", "startstaticMPfigure", "startstaticMPgraphic", "startstrictinspectnextcharacter", "startstructurepageregister", "startstrut", "startstyle", "startsubformulas", "startsubjectlevel", "startsubonderwerp", "startsubparagraaf", "startsubsentence", "startsubstack", "startsubsubonderwerp", "startsubsubparagraaf", "startsubsubsubonderwerp", "startsubsubsubparagraaf", "startsubsubsubsubonderwerp", "startsubsubsubsubparagraaf", "startsymbolset", "starttabel", "starttable", "starttablehead", "starttables", "starttabletail", "starttabulate", "starttabulatehead", "starttabulatetail", "starttagged", "starttbinom", "starttekstachtergrond", "starttekstlijn", "starttexcode", "starttexdefinition", "starttext", "starttextbackgroundmanual", "starttextcolor", "starttextcolorintent", "starttextflow", "starttitel", "starttokens", "starttransparent", "starttypescript", "starttypescriptcollection", "startunderdash", "startunderdashes", "startunderdot", "startunderdots", "startunderrandom", "startunderrandoms", "startunderstrike", "startunderstrikes", "startunframed", "startuniqueMPgraphic", "startuniqueMPpagegraphic", "startunpacked", "startusableMPgraphic", "startuseMPgraphic", "startusemathstyleparameter", "startusingbtxspecification", "startvbox", "startvboxregister", "startvboxtohbox", "startvboxtohboxseparator", "startviewerlayer", "startvtop", "startvtopregister", "startxcell", "startxcellgroup", "startxfrac", "startxgroup", "startxmldisplayverbatim", "startxmlinlineverbatim", "startxmlraw", "startxmlsetups", "startxrow", "startxrowgroup", "startxtable", "startxtablebody", "startxtablefoot", "startxtablehead", "startxtablenext", "startxxfrac", "stelachtergrondenin", "stelachtergrondin", "stelalineasin", "stelarrangerenin", "stelblankoin", "stelblokin", "stelblokjesin", "stelblokkopjein", "stelbovenin", "stelboventekstenin", "stelbufferin", "stelciterenin", "stelclipin", "stelcommentaarin", "steldoordefinierenin", "steldoornummerenin", "steldunnelijnenin", "stelformulein", "stelformulierenin", "stelhoofdin", "stelhoofdtekstenin", "stelingesprongentextin", "stelinmargein", "stelinspringenin", "stelinteractiebalkin", "stelinteractiein", "stelinteractiemenuin", "stelinteractieschermin", "stelinterliniein", "stelinvullijnenin", "stelinvulregelsin", "stelitemgroepin", "stelitemsin", "stelkadertekstin", "stelkantlijnin", "stelkapitalenin", "stelkleurenin", "stelkleurin", "stelkolommenin", "stelkopin", "stelkopnummerin", "stelkoppeltekenin", "stelkoppenin", "stelkorpsin", "stellayoutin", "stellijndiktein", "stellijstin", "stelmargeblokkenin", "stelmarkeringin", "stelnaastplaatsenin", "stelomlijndin", "stelonderin", "stelondertekstenin", "stelopmaakin", "stelopsommingenin", "stelpaginacommentaarin", "stelpaginanummerin", "stelpaginanummeringin", "stelpaginaovergangenin", "stelpaletin", "stelpapierformaatin", "stelpapierin", "stelparagraafnummerenin", "stelplaatsblokin", "stelplaatsbloksplitsenin", "stelplaatsin", "stelpositionerenin", "stelprogrammasin", "stelrefererenin", "stelregelnummerenin", "stelregelsin", "stelregisterin", "stelroterenin", "stelsamengesteldelijstin", "stelsectieblokin", "stelsmallerin", "stelsorterenin", "stelspatieringin", "stelstartstopin", "stelsubpaginanummerin", "stelsymboolsetin", "stelsynoniemenin", "steltaalin", "steltabellenin", "steltabulatiein", "steltekstachtergrondin", "steltekstin", "steltekstinhoudin", "steltekstlijnenin", "stelteksttekstenin", "steltolerantiein", "steltypein", "steltypenin", "stelurlin", "stelveldenin", "stelveldin", "stelvoetin", "stelvoettekstenin", "stelwiskundeuitlijnenin", "stelwitruimtein", "stopJScode", "stopJSpreamble", "stopMPclip", "stopMPcode", "stopMPdefinitions", "stopMPdrawing", "stopMPenvironment", "stopMPextensions", "stopMPinclusions", "stopMPinitializations", "stopMPpage", "stopMPpositiongraphic", "stopMPpositionmethod", "stopMPrun", "stopTABLE", "stopTABLEbody", "stopTABLEfoot", "stopTABLEhead", "stopTABLEnext", "stopTC", "stopTD", "stopTDs", "stopTEXpage", "stopTH", "stopTN", "stopTR", "stopTRs", "stopTX", "stopTY", "stopaanhangsel", "stopachtergrond", "stopallmodes", "stoparrangedpages", "stopaside", "stopattachment", "stopbar", "stopbinom", "stopbitmapimage", "stopblockquote", "stopblokcitaat", "stopbtxrenderingdefinitions", "stopbuffer", "stopbutton", "stopcatcodetable", "stopcharacteralign", "stopcheckedfences", "stopchemical", "stopcitaat", "stopciteer", "stopcollect", "stopcollecting", "stopcolorintent", "stopcoloronly", "stopcolorset", "stopcolumns", "stopcolumnspan", "stopcombination", "stopcomment", "stopcommentaar", "stopcontextcode", "stopcontextdefinitioncode", "stopctxfunction", "stopctxfunctiondefinition", "stopcurrentcolor", "stopcurrentlistentrywrapper", "stopdbinom", "stopdelimited", "stopdelimitedtext", "stopdfrac", "stopdisplaymath", "stopdmath", "stopdocument", "stopdoorstreep", "stopdoorstrepen", "stopeffect", "stopelement", "stopembeddedxtable", "stopendofline", "stopexceptions", "stopexpanded", "stopexpandedcollect", "stopextendedcatcodetable", "stopexternalfigurecollection", "stopfigure", "stopfiguur", "stopfitfieldframed", "stopfittingpage", "stopfloatcombination", "stopfont", "stopfontclass", "stopfontsolution", "stopformula", "stopformulas", "stopfrac", "stopframedcontent", "stopframedtext", "stopgrafiek", "stopgridsnapping", "stophbox", "stophboxestohbox", "stophboxregister", "stophelptekst", "stophelptext", "stophiddenbar", "stophiding", "stophighlight", "stophoofdstuk", "stophyphenation", "stopimath", "stopindentation", "stopindentedtext", "stopinmframed", "stopinteractiemenu", "stopinteraction", "stopinterface", "stopintermezzo", "stopintertext", "stopitemgroup", "stopkadertekst", "stopkantlijn", "stopkleur", "stopknockout", "stopkop", "stoplayout", "stoplinefiller", "stoplinenumbering", "stoplinetable", "stoplinetablebody", "stoplinetablecell", "stoplinetablehead", "stoplocalheadsetup", "stoplocallinecorrection", "stoplocalnotes", "stoplocalsetups", "stoplokalevoetnoten", "stoplua", "stopluacode", "stopluaparameterset", "stopluasetups", "stopmakeup", "stopmargeblok", "stopmarkedcontent", "stopmathmode", "stopmathstyle", "stopmatrices", "stopmcframed", "stopmdformula", "stopmframed", "stopmixedcolumns", "stopmode", "stopmodeset", "stopmodule", "stopmoduletestsection", "stopmpformula", "stopnaar", "stopnamedsection", "stopnamedsubformulas", "stopnarrow", "stopnarrower", "stopnegative", "stopnicelyfilledbox", "stopnobar", "stopnointerference", "stopnotallmodes", "stopnotext", "stopnotmode", "stopomgeving", "stopomlijnd", "stoponderdeel", "stoponderstreep", "stoponderstrepen", "stoponderwerp", "stopopelkaar", "stopopposite", "stopopsomming", "stopoutputstream", "stopoverlay", "stopoverprint", "stopoverstreep", "stopoverstrepen", "stoppagecomment", "stoppagefigure", "stoppagegrid", "stoppagegridspan", "stoppagelayout", "stoppar", "stopparagraaf", "stopparagraph", "stopparagraphs", "stopparagraphscell", "stopparbuilder", "stoppath", "stopplaatsformule", "stopplacepairedbox", "stoppositioning", "stoppositionoverlay", "stoppositive", "stoppostponing", "stopprocessassignmentcommand", "stopprocessassignmentlist", "stopprocesscommacommand", "stopprocesscommalist", "stopprodukt", "stopprojekt", "stopprotect", "stopprotectedcolors", "stoppublicatie", "stoppunctuation", "stoprandomized", "stoprandomseed", "stoprawsetups", "stopreadingfile", "stopreferenceprefix", "stopregel", "stopregelcorrectie", "stopregime", "stopregister", "stopreusableMPgraphic", "stopscript", "stopsdformula", "stopsectionblock", "stopsectionblockenvironment", "stopsectionlevel", "stopsetups", "stopsfrac", "stopshapebox", "stopshift", "stopsidebar", "stopsimplecolumns", "stopsom", "stopspecialitem", "stopspeech", "stopspformula", "stopspraak", "stopspread", "stopstartstop", "stopstaticMPfigure", "stopstaticMPgraphic", "stopstrictinspectnextcharacter", "stopstructurepageregister", "stopstrut", "stopstyle", "stopsubformulas", "stopsubjectlevel", "stopsubonderwerp", "stopsubparagraaf", "stopsubsentence", "stopsubstack", "stopsubsubonderwerp", "stopsubsubparagraaf", "stopsubsubsubonderwerp", "stopsubsubsubparagraaf", "stopsubsubsubsubonderwerp", "stopsubsubsubsubparagraaf", "stopsymbolset", "stoptabel", "stoptable", "stoptablehead", "stoptables", "stoptabletail", "stoptabulate", "stoptabulatehead", "stoptabulatetail", "stoptagged", "stoptbinom", "stoptekstachtergrond", "stoptekstlijn", "stoptexcode", "stoptexdefinition", "stoptext", "stoptextbackgroundmanual", "stoptextcolor", "stoptextcolorintent", "stoptextflow", "stoptitel", "stoptokens", "stoptransparent", "stoptypescript", "stoptypescriptcollection", "stopunderdash", "stopunderdashes", "stopunderdot", "stopunderdots", "stopunderrandom", "stopunderrandoms", "stopunderstrike", "stopunderstrikes", "stopunframed", "stopuniqueMPgraphic", "stopuniqueMPpagegraphic", "stopunpacked", "stopusableMPgraphic", "stopuseMPgraphic", "stopusemathstyleparameter", "stopusingbtxspecification", "stopvbox", "stopvboxregister", "stopvboxtohbox", "stopvboxtohboxseparator", "stopviewerlayer", "stopvtop", "stopvtopregister", "stopxcell", "stopxcellgroup", "stopxfrac", "stopxgroup", "stopxmldisplayverbatim", "stopxmlinlineverbatim", "stopxmlraw", "stopxmlsetups", "stopxrow", "stopxrowgroup", "stopxtable", "stopxtablebody", "stopxtablefoot", "stopxtablehead", "stopxtablenext", "stopxxfrac", "strictdoifelsenextoptional", "strictdoifnextoptionalelse", "stripcharacter", "strippedcsname", "stripspaces", "structurelistuservariable", "structurenumber", "structuretitle", "structureuservariable", "structurevariable", "strut", "strutdp", "strutht", "struthtdp", "struttedbox", "strutwd", "style", "styleinstance", "subonderwerp", "subpaginanummer", "subparagraaf", "subsentence", "substituteincommalist", "subsubonderwerp", "subsubparagraaf", "subsubsubonderwerp", "subsubsubparagraaf", "subsubsubsubonderwerp", "subsubsubsubparagraaf", "subtractfeature", "swapcounts", "swapdimens", "swapface", "swapmacros", "swaptypeface", "switchnaarkorps", "switchstyleonly", "switchtocolor", "switchtointerlinespace", "symbolreference", "symbool", "synchronizeblank", "synchronizeindenting", "synchronizemarking", "synchronizeoutputstreams", "synchronizestrut", "synchronizewhitespace", "systemlog", "systemlogfirst", "systemloglast", "systemsetups", "tLeftarrow", "tLeftrightarrow", "tRightarrow", "taal", "tabel", "tabulateautoline", "tabulateautorule", "tabulateline", "tabulaterule", "taggedctxcommand", "taggedlabeltexts", "tbinom", "tbox", "tekstlijn", "tekstreferentie", "tequal", "testandsplitstring", "testfeature", "testfeatureonce", "testkolom", "testpageonly", "testpagesync", "testpagina", "testtokens", "tex", "texdefinition", "texsetup", "textcitation", "textcite", "textcontrolspace", "textflowcollector", "textmath", "textminus", "textormathchar", "textplus", "textvisiblespace", "tfrac", "thainumerals", "thefirstcharacter", "thenormalizedbodyfontsize", "theremainingcharacters", "thickspace", "thinspace", "thirdoffivearguments", "thirdoffourarguments", "thirdofsixarguments", "thirdofthreearguments", "thirdofthreeunexpanded", "thookleftarrow", "thookrightarrow", "threedigitrounding", "tibetannumerals", "tightlayer", "tinyfont", "titel", "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", "transparent", "trel", "trightarrow", "trightharpoondown", "trightharpoonup", "trightleftharpoons", "trightoverleftarrow", "triplebond", "truefilename", "truefontname", "ttriplerel", "ttwoheadleftarrow", "ttwoheadrightarrow", "twodigitrounding", "tx", "txx", "typ", "type", "typebuffer", "typedefinedbuffer", "typeface", "typefile", "typescriptone", "typescriptprefix", "typescriptthree", "typescripttwo", "typesetbuffer", "typesetfile", "uconvertnumber", "uedcatcodecommand", "uit", "uitgerekt", "undefinevalue", "undepthed", "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", "unprotected", "unregisterhyphenationpattern", "unspaceafter", "unspaceargument", "unspaced", "unspacestring", "untexargument", "untexcommand", "uppercased", "uppercasestring", "upperleftdoubleninequote", "upperleftdoublesixquote", "upperleftsingleninequote", "upperleftsinglesixquote", "upperrightdoubleninequote", "upperrightdoublesixquote", "upperrightsingleninequote", "upperrightsinglesixquote", "url", "useMPenvironmentbuffer", "useMPgraphic", "useMPlibrary", "useMPrun", "useMPvariables", "useblankparameter", "usebodyfont", "usebodyfontparameter", "usebtxdataset", "usebtxdefinitions", "usecolors", "usecomponent", "usedummycolorparameter", "usedummystyleandcolor", "usedummystyleparameter", "useenvironment", "useexternalrendering", "usefigurebase", "usefile", "usegridparameter", "useindentingparameter", "useindentnextparameter", "useinterlinespaceparameter", "uselanguageparameter", "useluamodule", "usemathstyleparameter", "useproduct", "useprofileparameter", "useproject", "usereferenceparameter", "userpagenumber", "usesetupsparameter", "usestaticMPfigure", "usesubpath", "usetexmodule", "usezipfile", "utfchar", "utflower", "utfupper", "utilityregisterlength", "vastespatie", "vastespaties", "vboxreference", "veld", "veldstapel", "verbatim", "verbatimstring", "verbergblokken", "verbergen", "verbosenumber", "vergelijkkleurgroep", "vergelijkpalet", "versie", "vertaal", "verticalgrowingbar", "verticalpositionbar", "verwerkblokken", "vglue", "viewerlayer", "vl", "voetnoottekst", "volledigepaginanummer", "volledigregister", "voluit", "vphantom", "vpos", "vsmash", "vsmashbox", "vsmashed", "vspace", "vspacing", "wdofstring", "weekdag", "widthofstring", "widthspanningtext", "wilijnd", "wiskunde", "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", "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", "Lua", "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", "MPwhd", "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", "TEXpage", "TaBlE", "TeX", "TheNormalizedFontSize", "TransparencyHack", "VerboseNumber", "WEEKDAY", "WORD", "WORDS", "WidthSpanningText", "Word", "Words", "XETEX", "XeTeX", "abjadnaivenumerals", "abjadnodotnumerals", "abjadnumerals", "activatespacehandler", "adaptcollector", "adaptfontfeature", "adaptpapersize", "addfeature", "addtoJSpreamble", "addtocommalist", "addvalue", "aftersplitstring", "aftertestandsplitstring", "alignmentcharacter", "allinputpaths", "alphabeticnumerals", "alwayscitation", "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", "aside", "assignalfadimension", "assigndimen", "assigndimension", "assignifempty", "assigntranslation", "assignvalue", "assignwidth", "assumelongusagecs", "astype", "attachment", "autocap", "autodirhbox", "autodirvbox", "autodirvtop", "autoinsertnextspace", "automathematics", "autosetups", "availablehsize", "averagecharwidth", "backgroundimage", "backgroundimagefill", "backgroundline", "basegrid", "baselineleftbox", "baselinemiddlebox", "baselinerightbox", "bbox", "beforesplitstring", "beforetestandsplitstring", "big", "bigbodyfont", "bigg", "bigger", "biggl", "biggm", "biggr", "bigl", "bigm", "bigr", "bigskip", "binom", "bitmapimage", "blap", "bleed", "bleedheight", "bleedwidth", "blockligatures", "blockquote", "bodyfontenvironmentlist", "bodyfontsize", "bold", "boldface", "bolditalic", "boldslanted", "booleanmodevalue", "bottombox", "bottomleftbox", "bottomrightbox", "boxcursor", "boxmarker", "boxofsize", "boxreference", "bpos", "bthiddencitation", "btxabbreviatedjournal", "btxaddjournal", "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", "btxlistcitation", "btxloadjournalist", "btxoneorrange", "btxremapauthor", "btxsavejournalist", "btxsetup", "btxsingularorplural", "btxsingularplural", "btxtextcitation", "calligraphic", "camel", "cap", "catcodetablename", "cbox", "centerbox", "centeredbox", "centerednextbox", "cfrac", "chardescription", "charwidthlanguage", "checkcharacteralign", "checkedchar", "checkedfiller", "checkedstrippedcsname", "checkinjector", "checknextindentation", "checknextinjector", "checkpage", "checkparameters", "checkpreviousinjector", "checksoundtrack", "checktwopassdata", "checkvariables", "chem", "chemical", "chemicalbottext", "chemicalmidtext", "chemicalsymbol", "chemicaltext", "chemicaltoptext", "chineseallnumerals", "chinesecapnumerals", "chinesenumerals", "citation", "cite", "clap", "classfont", "cldcommand", "cldcontext", "cldloadfile", "cldprocessfile", "cleftarrow", "collect", "collectedtext", "collectexpanded", "colorcomponents", "colored", "coloronly", "columnbreak", "combinepages", "commalistelement", "commalistsentence", "commalistsize", "comment", "comparedimension", "comparedimensioneps", "completebtxrendering", "completelist", "completelistofpublications", "completelistofsorts", "completelistofsynonyms", "complexorsimple", "complexorsimpleempty", "composedcollector", "composedlayer", "compresult", "constantdimen", "constantdimenargument", "constantemptyargument", "constantnumber", "constantnumberargument", "contentreference", "continuednumber", "continueifinputfile", "convertargument", "convertcommand", "convertedcounter", "converteddimen", "convertedsubcounter", "convertmonth", "convertvalue", "convertvboxtohbox", "copypages", "copyparameters", "copyposition", "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", "datasetvariable", "dayoftheweek", "dayspermonth", "dbinom", "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", "definecomplexorsimpleempty", "defineconversionset", "definecounter", "definedataset", "definedelimitedtext", "definedfont", "defineeffect", "defineexpandable", "defineexternalfigure", "definefallbackfamily", "definefieldbody", "definefieldbodyset", "definefieldcategory", "definefileconstant", "definefilefallback", "definefilesynonym", "definefiller", "definefirstline", "definefittingpage", "definefontalternative", "definefontfallback", "definefontfamily", "definefontfamilypreset", "definefontfeature", "definefontfile", "definefontsize", "definefontsolution", "defineformula", "defineformulaalternative", "defineformulaframed", "defineframedcontent", "definefrozenfont", "defineglobalcolor", "definegraphictypesynonym", "definegridsnapping", "defineheadalternative", "definehelp", "definehigh", "definehighlight", "definehspace", "definehypenationfeatures", "defineindentedtext", "defineindenting", "defineinitial", "defineinsertion", "defineinteraction", "defineinteractionbar", "defineinterfaceconstant", "defineinterfaceelement", "defineinterfacevariable", "defineinterlinespace", "defineintermediatecolor", "defineitems", "definelabelclass", "definelayerpreset", "definelinefiller", "definelinenote", "definelinenumbering", "definelines", "definelistalternative", "definelistextra", "definelow", "definelowhigh", "definelowmidhigh", "definemarginblock", "definemargindata", "definemarker", "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", "definenamespace", "definenarrower", "definenote", "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", "dimensiontocount", "directcolor", "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", "dorepeatwithcommand", "doreplacefeature", "doresetandafffeature", "doresetattribute", "dorotatebox", "dosetattribute", "dosetleftskipadaption", "dosetrightskipadaption", "dosetupcheckedinterlinespace", "doseventupleargument", "doseventupleempty", "dosingleargument", "dosingleempty", "dosinglegroupempty", "dosixtupleargument", "dosixtupleempty", "dostepwiserecurse", "dosubtractfeature", "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", "enskip", "enspace", "env", "envvar", "eoverbarfill", "eoverbracefill", "eoverbracketfill", "eoverparentfill", "epos", "equaldigits", "erightarrowfill", "erightharpoondownfill", "erightharpoonupfill", "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", "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", "flushboxregister", "flushcollector", "flushlayer", "flushlocalfloats", "flushnextbox", "flushnotes", "flushoutputstream", "flushshapebox", "flushtextflow", "flushtokens", "flushtoks", "fontalternative", "fontbody", "fontchar", "fontcharbyindex", "fontclass", "fontclassname", "fontface", "fontfeaturelist", "fontsize", "fontstyle", "forcecharacterstripping", "forcelocalfloats", "forgeteverypar", "forgetparameters", "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", "getprivatechar", "getprivateslot", "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", "grabbufferdata", "grabbufferdatadirect", "grabuntil", "grayvalue", "greedysplitstring", "greeknumerals", "groupedcommand", "gsetboxllx", "gsetboxlly", "gujaratinumerals", "gurmurkhinumerals", "hairspace", "halfwaybox", "handletokens", "handwritten", "hash", "hboxofvbox", "hboxreference", "hdofstring", "headhbox", "headnumbercontent", "headnumberdistance", "headnumberwidth", "headreferenceattributes", "headsetupspacing", "headtextcontent", "headtextdistance", "headtextwidth", "headvbox", "headwidth", "heightanddepthofstring", "heightofstring", "heightspanningtext", "helptext", "hglue", "hiddenbar", "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", "incrementcounter", "incrementedcounter", "incrementpagenumber", "incrementsubpagenumber", "incrementvalue", "indentation", "infofont", "infofontbold", "inheritparameter", "inhibitblank", "initializeboxstack", "inlinebuffer", "inlinedbox", "inlinemath", "inlinemathematics", "inlinemessage", "inlineordisplaymath", "inlinerange", "inmframed", "innerflushshapebox", "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", "jobfilename", "jobfilesuffix", "kap", "keeplinestogether", "keepunwantedspaces", "kerncharacters", "koreancirclenumerals", "koreannumerals", "koreannumeralsc", "koreannumeralsp", "koreanparentnumerals", "languageCharacters", "languagecharacters", "languagecharwidth", "lastcounter", "lastcountervalue", "lastdigit", "lastlinewidth", "lastnaturalboxdp", "lastnaturalboxht", "lastnaturalboxwd", "lastpredefinedsymbol", "lastrealpage", "lastrealpagenumber", "lastsubcountervalue", "lastsubpage", "lastsubpagenumber", "lasttwodigits", "lastuserpage", "lastuserpagenumber", "lateluacode", "layeredtext", "layerheight", "layerwidth", "lazysavetaggedtwopassdata", "lazysavetwopassdata", "lbox", "left", "leftbottombox", "leftbox", "lefthbox", "leftorrighthbox", "leftorrightvbox", "leftorrightvtop", "leftskipadaption", "leftsubguillemot", "lefttopbox", "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", "limtatefirstline", "linespanningtext", "listcitation", "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", "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", "mathitalic", "mathop", "mathrm", "mathscript", "mathsl", "mathss", "mathtext", "mathtextbf", "mathtextbi", "mathtextbs", "mathtextit", "mathtextsl", "mathtexttf", "mathtf", "mathtriplet", "mathtt", "mathupright", "mathword", "mathwordbf", "mathwordbi", "mathwordbs", "mathwordit", "mathwordsl", "mathwordtf", "mbox", "mcframed", "md", "measure", "measured", "medskip", "medspace", "mequal", "message", "metaTeX", "mfence", "mframed", "mfunction", "mfunctionlabeltext", "mhbox", "mhookleftarrow", "mhookrightarrow", "middle", "middlebox", "midhbox", "minimalhbox", "mixedcaps", "mkvibuffer", "mleftarrow", "mleftharpoondown", "mleftharpoonup", "mleftrightarrow", "mleftrightharpoons", "mmapsto", "moduleparameter", "molecule", "mono", "monobold", "mononormal", "monthlong", "monthshort", "mp", "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", "nobar", "nocitation", "nocite", "nodetostring", "noffigurepages", "noflines", "noflocalfloats", "noindentation", "noitem", "nonfrenchspacing", "nonmathematics", "normal", "normalboldface", "normalframedwithsettings", "normalizebodyfontsize", "normalizedfontsize", "normalizefontdepth", "normalizefontheight", "normalizefontline", "normalizefontwidth", "normalizetextdepth", "normalizetextheight", "normalizetextline", "normalizetextwidth", "normaltypeface", "notesymbol", "ntimes", "numberofpoints", "obeydepth", "objectdepth", "objectheight", "objectmargin", "objectwidth", "obox", "offset", "offsetbox", "onedigitrounding", "ordinaldaynumber", "ordinalstr", "ornamenttext", "outputfilename", "outputstreambox", "outputstreamcopy", "outputstreamunvbox", "outputstreamunvcopy", "over", "overbar", "overbars", "overbartext", "overbarunderbar", "overbrace", "overbracetext", "overbraceunderbrace", "overbracket", "overbrackettext", "overbracketunderbracket", "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", "pagestaterealpage", "paletsize", "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", "placecitation", "placecomments", "placecurrentformulanumber", "placedbox", "placefloatwithsetups", "placeframed", "placehelp", "placeinitial", "placelayer", "placelayeredtext", "placelistofpublications", "placelistofsorts", "placelistofsynonyms", "placelocalnotes", "placement", "placenamedfloat", "placenamedformula", "placenotes", "placepairedbox", "placeparallel", "placerenderingwindow", "popattribute", "popmacro", "popmode", "popsystemmode", "positionoverlay", "positionregionoverlay", "postponenotes", "predefinedfont", "predefinefont", "predefinesymbol", "prefixedpagenumber", "prependetoks", "prependgvalue", "prependtocommalist", "prependtoks", "prependtoksonce", "prependvalue", "presetdocument", "presetfieldsymbols", "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", "purenumber", "pushattribute", "pushbutton", "pushmacro", "pushmode", "pushoutputstream", "pushsystemmode", "qquad", "quad", "quads", "quitcommalist", "quitprevcommalist", "quittypescriptscanning", "raisebox", "randomizetext", "randomnumber", "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", "replaceincommalist", "replaceword", "rescan", "rescanwithsetup", "resetMPdrawing", "resetMPenvironment", "resetMPinstance", "resetallattributes", "resetandaddfeature", "resetbar", "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", "resolvedglyphdirect", "resolvedglyphstyled", "restartcounter", "restorebox", "restorecatcodes", "restorecounter", "restorecurrentattributes", "restoreendofline", "restoreglobalbodyfont", "reusableMPgraphic", "reuseMPgraphic", "reuserandomseed", "revivefeature", "rfence", "rhbox", "right", "rightbottombox", "rightbox", "righthbox", "rightorleftpageaction", "rightskipadaption", "rightsubguillemot", "righttolefthbox", "righttoleftvbox", "righttoleftvtop", "righttopbox", "rlap", "robustaddtocommalist", "robustdoifelseinset", "robustdoifinsetelse", "robustpretocommalist", "rollbutton", "roman", "rtop", "ruledhbox", "ruledhpack", "ruledmbox", "ruledtopv", "ruledtpack", "ruledvbox", "ruledvpack", "ruledvtop", "runMPbuffer", "runninghbox", "safechar", "sans", "sansbold", "sansnormal", "sansserif", "savebox", "savebtxdataset", "savebuffer", "savecounter", "savecurrentattributes", "savenormalmeaning", "savetaggedtwopassdata", "savetwopassdata", "sbox", "sd", "secondoffivearguments", "secondoffourarguments", "secondofsixarguments", "secondofthreearguments", "secondofthreeunexpanded", "secondoftwoarguments", "secondoftwounexpanded", "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", "setfractions", "setgmeasure", "setgvalue", "setgvariable", "setgvariables", "sethboxregister", "sethyphenatedurlafter", "sethyphenatedurlbefore", "sethyphenatedurlnormal", "sethyphenationfeatures", "setinitial", "setinjector", "setinteraction", "setinterfacecommand", "setinterfaceconstant", "setinterfaceelements", "setinterfacemessage", "setinterfacevariable", "setinternalrendering", "setitaliccorrection", "setlayer", "setlayerframed", "setlayertext", "setlinefiller", "setlocalhsize", "setmainbodyfont", "setmainparbuilder", "setmarker", "setmarking", "setmathstyle", "setmeasure", "setmessagetext", "setmode", "setnostrut", "setnote", "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", "setupMPgraphics", "setupMPinstance", "setupMPpage", "setupMPvariables", "setupTABLE", "setupTEXpage", "setupattachment", "setupbackend", "setupbar", "setupbleeding", "setupbookmark", "setupbtx", "setupbtxdataset", "setupbtxlist", "setupbtxregister", "setupbtxrendering", "setupbutton", "setupcapitals", "setupcharacterkerning", "setupcharacterspacing", "setupchemical", "setupchemicalframed", "setupcollector", "setupcolumnspan", "setupcombination", "setupcounter", "setupdataset", "setupdelimitedtext", "setupdescription", "setupdirections", "setupdocument", "setupeffect", "setupenumeration", "setupenv", "setupexport", "setupexternalfigure", "setupexternalsoundtracks", "setupfieldbody", "setupfieldcategory", "setupfieldcontentframed", "setupfieldlabelframed", "setupfieldtotalframed", "setupfiller", "setupfirstline", "setupfittingpage", "setupfloatcaption", "setupfontexpansion", "setupfontprotrusion", "setupfonts", "setupfontsolution", "setupformula", "setupformulaframed", "setupframedcontent", "setupframedtext", "setupglobalreferenceprefix", "setupheadalternative", "setuphelp", "setuphigh", "setuphighlight", "setuphyphenation", "setupindentedtext", "setupinitial", "setupinsertion", "setupitaliccorrection", "setuplabel", "setuplayer", "setuplayeredtext", "setuplayouttext", "setuplinefiller", "setuplinefillers", "setuplinenote", "setuplinetable", "setuplistalternative", "setuplistextra", "setuplocalfloats", "setuplocalinterlinespace", "setuplow", "setuplowhigh", "setuplowmidhigh", "setupmarginblock", "setupmargindata", "setupmarginframed", "setupmarginrule", "setupmathcases", "setupmathematics", "setupmathfence", "setupmathfraction", "setupmathframed", "setupmathmatrix", "setupmathornament", "setupmathradical", "setupmathstackers", "setupmathstyle", "setupmixedcolumns", "setupmodule", "setupnotation", "setupnotations", "setupnote", "setupnotes", "setupoffset", "setupoffsetbox", "setupoutputroutine", "setuppagechecker", "setuppagegrid", "setuppagegridarea", "setuppagegridareatext", "setuppagegridlines", "setuppagegridspan", "setuppagegridstart", "setuppageinjection", "setuppageinjectionalternative", "setuppageshift", "setuppagestate", "setuppairedbox", "setupparagraph", "setupparagraphintro", "setupparallel", "setupperiods", "setuppositionbar", "setupprocessor", "setupprofile", "setupquotation", "setuprealpagenumber", "setupreferenceformat", "setupreferenceprefix", "setupreferencestructureprefix", "setupregisters", "setuprenderingwindow", "setups", "setupscale", "setupscript", "setupscripts", "setupselector", "setupshift", "setupsidebar", "setupspellchecking", "setupstretched", "setupstruts", "setupstyle", "setupsubformula", "setuptabulation", "setuptagging", "setuptextbackground", "setuptextflow", "setuptooltip", "setupunit", "setupurl", "setupuserpagenumber", "setupversion", "setupviewerlayer", "setupvspacing", "setupwithargument", "setupwithargumentswapped", "setupxml", "setupxtable", "setuvalue", "setuxvalue", "setvalue", "setvariable", "setvariables", "setvboxregister", "setvisualizerfont", "setvtopregister", "setwidthof", "setxmeasure", "setxvalue", "setxvariable", "setxvariables", "sfrac", "shapedhbox", "showallmakeup", "showattributes", "showboxes", "showbtxdatasetauthors", "showbtxdatasetcompleteness", "showbtxdatasetfields", "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", "simplegroupedcommand", "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", "someheadnumber", "somekindoftab", "somelocalfloat", "somenamedheadnumber", "someplace", "sp", "spanishNumerals", "spanishnumerals", "speech", "splitatasterisk", "splitatcolon", "splitatcolons", "splitatcomma", "splitdfrac", "splitfilename", "splitfrac", "splitoffbase", "splitofffull", "splitoffkind", "splitoffname", "splitoffpath", "splitoffroot", "splitofftokens", "splitofftype", "splitstring", "spreadhbox", "sqrt", "stackrel", "startregister", "startstructurepageregister", "stopregister", "stopstructurepageregister", "strictdoifelsenextoptional", "strictdoifnextoptionalelse", "stripcharacter", "strippedcsname", "stripspaces", "structurelistuservariable", "structurenumber", "structuretitle", "structureuservariable", "structurevariable", "strut", "strutdp", "strutht", "struthtdp", "struttedbox", "strutwd", "style", "styleinstance", "subsentence", "substituteincommalist", "subtractfeature", "swapcounts", "swapdimens", "swapface", "swapmacros", "swaptypeface", "switchstyleonly", "switchtocolor", "switchtointerlinespace", "symbolreference", "synchronizeblank", "synchronizeindenting", "synchronizemarking", "synchronizeoutputstreams", "synchronizestrut", "synchronizewhitespace", "systemlog", "systemlogfirst", "systemloglast", "systemsetups", "tLeftarrow", "tLeftrightarrow", "tRightarrow", "tabulateautoline", "tabulateautorule", "tabulateline", "tabulaterule", "taggedctxcommand", "taggedlabeltexts", "tbinom", "tbox", "tequal", "testandsplitstring", "testfeature", "testfeatureonce", "testpageonly", "testpagesync", "testtokens", "texdefinition", "texsetup", "textcitation", "textcite", "textcontrolspace", "textflowcollector", "textmath", "textminus", "textormathchar", "textplus", "textvisiblespace", "tfrac", "thainumerals", "thefirstcharacter", "thenormalizedbodyfontsize", "theremainingcharacters", "thickspace", "thinspace", "thirdoffivearguments", "thirdoffourarguments", "thirdofsixarguments", "thirdofthreearguments", "thirdofthreeunexpanded", "thookleftarrow", "thookrightarrow", "threedigitrounding", "tibetannumerals", "tightlayer", "tinyfont", "tlap", "tleftarrow", "tleftharpoondown", "tleftharpoonup", "tleftrightarrow", "tleftrightharpoons", "tmapsto", "tochar", "tolinenote", "topbox", "topleftbox", "toplinebox", "toprightbox", "topskippedbox", "tracecatcodetables", "tracedfontname", "traceoutputroutines", "tracepositions", "transparencycomponents", "transparent", "trel", "trightarrow", "trightharpoondown", "trightharpoonup", "trightleftharpoons", "trightoverleftarrow", "triplebond", "truefilename", "truefontname", "ttriplerel", "ttwoheadleftarrow", "ttwoheadrightarrow", "twodigitrounding", "tx", "txx", "typ", "typedefinedbuffer", "typeface", "typescriptone", "typescriptprefix", "typescriptthree", "typescripttwo", "typesetbuffer", "typesetfile", "uconvertnumber", "uedcatcodecommand", "undefinevalue", "undepthed", "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", "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", "useblankparameter", "usebodyfont", "usebodyfontparameter", "usebtxdataset", "usebtxdefinitions", "usecolors", "usecomponent", "usedummycolorparameter", "usedummystyleandcolor", "usedummystyleparameter", "useenvironment", "useexternalrendering", "usefigurebase", "usefile", "usegridparameter", "useindentingparameter", "useindentnextparameter", "useinterlinespaceparameter", "uselanguageparameter", "useluamodule", "usemathstyleparameter", "useproduct", "useprofileparameter", "useproject", "usereferenceparameter", "userpagenumber", "usesetupsparameter", "usestaticMPfigure", "usesubpath", "usetexmodule", "useurl", "usezipfile", "utfchar", "utflower", "utfupper", "utilityregisterlength", "vboxreference", "verbatim", "verbatimstring", "verbosenumber", "verticalgrowingbar", "verticalpositionbar", "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", "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", "شروعMPclip", "شروعMPcode", "شروعMPdefinitions", "شروعMPdrawing", "شروعMPenvironment", "شروعMPextensions", "شروعMPinclusions", "شروعMPinitializations", "شروعMPpage", "شروعMPpositiongraphic", "شروعMPpositionmethod", "شروعMPrun", "شروعTABLE", "شروعTABLEbody", "شروعTABLEfoot", "شروعTABLEhead", "شروعTABLEnext", "شروعTC", "شروعTD", "شروعTDs", "شروعTEXpage", "شروعTH", "شروعTN", "شروعTR", "شروعTRs", "شروعTX", "شروعTY", "شروعallmodes", "شروعarrangedpages", "شروعaside", "شروعattachment", "شروعbar", "شروعbinom", "شروعbitmapimage", "شروعblockquote", "شروعbtxrenderingdefinitions", "شروعbuffer", "شروعbutton", "شروعcatcodetable", "شروعcharacteralign", "شروعcheckedfences", "شروعchemical", "شروعcollect", "شروعcollecting", "شروعcolorintent", "شروعcoloronly", "شروعcolorset", "شروعcolumns", "شروعcolumnspan", "شروعcombination", "شروعcomment", "شروعcontextcode", "شروعcontextdefinitioncode", "شروعctxfunction", "شروعctxfunctiondefinition", "شروعcurrentcolor", "شروعcurrentlistentrywrapper", "شروعdbinom", "شروعdelimited", "شروعdelimitedtext", "شروعdfrac", "شروعdisplaymath", "شروعdmath", "شروعdocument", "شروعeffect", "شروعelement", "شروعembeddedxtable", "شروعendofline", "شروعexceptions", "شروعexpanded", "شروعexpandedcollect", "شروعextendedcatcodetable", "شروعexternalfigurecollection", "شروعfigure", "شروعfitfieldframed", "شروعfittingpage", "شروعfloatcombination", "شروعfont", "شروعfontclass", "شروعfontsolution", "شروعformula", "شروعformulas", "شروعfrac", "شروعframedcontent", "شروعframedtext", "شروعgridsnapping", "شروعhbox", "شروعhboxestohbox", "شروعhboxregister", "شروعhelptext", "شروعhiddenbar", "شروعhiding", "شروعhighlight", "شروعhyphenation", "شروعimath", "شروعindentation", "شروعindentedtext", "شروعinmframed", "شروعinteraction", "شروعinterface", "شروعintertext", "شروعitemgroup", "شروعknockout", "شروعlayout", "شروعlinecorrection", "شروعlinefiller", "شروعlinenumbering", "شروعlinetable", "شروعlinetablebody", "شروعlinetablecell", "شروعlinetablehead", "شروعlocalfootnotes", "شروعlocalheadsetup", "شروعlocallinecorrection", "شروعlocalnotes", "شروعlocalsetups", "شروعlua", "شروعluacode", "شروعluaparameterset", "شروعluasetups", "شروعmakeup", "شروعmarginblock", "شروعmarkedcontent", "شروعmathmode", "شروعmathstyle", "شروعmatrices", "شروعmcframed", "شروعmdformula", "شروعmframed", "شروعmixedcolumns", "شروعmode", "شروعmodeset", "شروعmodule", "شروعmoduletestsection", "شروعmpformula", "شروعnamedsection", "شروعnamedsubformulas", "شروعnarrow", "شروعnarrower", "شروعnegative", "شروعnicelyfilledbox", "شروعnobar", "شروعnointerference", "شروعnotallmodes", "شروعnotext", "شروعnotmode", "شروعopposite", "شروعoutputstream", "شروعoverlay", "شروعoverprint", "شروعpagecomment", "شروعpagefigure", "شروعpagegrid", "شروعpagegridspan", "شروعpagelayout", "شروعpar", "شروعparagraph", "شروعparagraphs", "شروعparagraphscell", "شروعparbuilder", "شروعpath", "شروعplacepairedbox", "شروعpositioning", "شروعpositionoverlay", "شروعpositive", "شروعpostponing", "شروعprocessassignmentcommand", "شروعprocessassignmentlist", "شروعprocesscommacommand", "شروعprocesscommalist", "شروعprotect", "شروعprotectedcolors", "شروعpunctuation", "شروعrandomized", "شروعrandomseed", "شروعrawsetups", "شروعreadingfile", "شروعreferenceprefix", "شروعregime", "شروعreusableMPgraphic", "شروعscript", "شروعsdformula", "شروعsectionblock", "شروعsectionblockenvironment", "شروعsectionlevel", "شروعsetups", "شروعsfrac", "شروعshapebox", "شروعshift", "شروعsidebar", "شروعsimplecolumns", "شروعspecialitem", "شروعspeech", "شروعspformula", "شروعspread", "شروعstartstop", "شروعstaticMPfigure", "شروعstaticMPgraphic", "شروعstrictinspectnextcharacter", "شروعstrut", "شروعstyle", "شروعsubformulas", "شروعsubjectlevel", "شروعsubsentence", "شروعsubstack", "شروعsymbolset", "شروعtable", "شروعtablehead", "شروعtables", "شروعtabletail", "شروعtabulate", "شروعtabulatehead", "شروعtabulatetail", "شروعtagged", "شروعtbinom", "شروعtexcode", "شروعtexdefinition", "شروعtext", "شروعtextbackground", "شروعtextbackgroundmanual", "شروعtextcolor", "شروعtextcolorintent", "شروعtextflow", "شروعtokens", "شروعtransparent", "شروعtypescript", "شروعtypescriptcollection", "شروعunderdash", "شروعunderdashes", "شروعunderdot", "شروعunderdots", "شروعunderrandom", "شروعunderrandoms", "شروعunderstrike", "شروعunderstrikes", "شروعunframed", "شروعuniqueMPgraphic", "شروعuniqueMPpagegraphic", "شروعunpacked", "شروعusableMPgraphic", "شروعuseMPgraphic", "شروعusemathstyleparameter", "شروعusingbtxspecification", "شروعvbox", "شروعvboxregister", "شروعvboxtohbox", "شروعvboxtohboxseparator", "شروعviewerlayer", "شروعvtop", "شروعvtopregister", "شروعxcell", "شروعxcellgroup", "شروعxfrac", "شروعxgroup", "شروعxmldisplayverbatim", "شروعxmlinlineverbatim", "شروعxmlraw", "شروعxmlsetups", "شروعxrow", "شروعxrowgroup", "شروعxtable", "شروعxtablebody", "شروعxtablefoot", "شروعxtablehead", "شروعxtablenext", "شروعxxfrac", "شروعآیتم", "شروعآیتم‌بندی", "شروعبخش", "شروعبروبه", "شروعتوضیح", "شروعتولید", "شروعجدول", "شروعخط‌حاشیه", "شروعخط‌زدن", "شروعخط‌زدنها", "شروعخط‌متن", "شروعدرج‌فرمول", "شروعرنگ", "شروعزیربخش", "شروعزیرزیربخش", "شروعزیرزیرزیربخش", "شروعزیرزیرزیرزیربخش", "شروعزیرزیرزیرزیرموضوع", "شروعزیرزیرزیرموضوع", "شروعزیرزیرموضوع", "شروعزیرموضوع", "شروعسخنرانی", "شروعسر", "شروعشکل", "شروععنوان", "شروعفشرده", "شروعفصل", "شروعقالبی", "شروعمتن‌قالبی", "شروعمتن‌کمکی", "شروعمحیط", "شروعمنوی‌پانل", "شروعموضوع", "شروعمولفه", "شروعمیان‌پرده", "شروعمیله‌رو", "شروعمیله‌زیر", "شروعمیله‌ها‌رو", "شروعمیله‌‌های‌زیر", "شروعنشر", "شروعنقل", "شروعنقل‌بلوک", "شروعنقل‌قول", "شروعپروژه", "شروعپس‌زمینه", "شروعگرافیک", "شروع‌خط", "شماره‌زیرصفحه", "شماره‌سر", "شماره‌سرجاری", "شماره‌صفحه", "شماره‌صفحه‌کامل", "شماره‌فرمول", "شماره‌مبدل", "شماره‌ها", "شکافتن‌شناور", "شکل", "شکل‌خارجی", "صفحه", "صفحه‌تست", "طول‌لیست", "عرض‌خط", "عنوان", "فصل", "فضا", "فضاهای‌ثابت", "فضای‌ثابت", "فضای‌سفیدصحیح", "قالبی", "لوح‌مقایسه", "ماه", "متن‌قالبی", "متن‌پانوشت", "متن‌کمکی", "محیط", "مراجعه", "مرجع", "مرجع‌صفحه", "مرجع‌متن", "مقایسه‌گروه‌رنگ", "مقداررنگ", "مقیاس", "منوی‌پانل", "موضوع", "مولفه", "مکان", "میان‌پرده", "میدان", "میدان‌شبیه‌سازی", "میدان‌پشته", "میدان‌کپی", "میله‌رنگ", "میله‌پانل", "ناشناس", "نسخه", "نشانه‌گذاری", "نصب‌زبان", "نقطه‌ها", "نقل", "نقل‌بلوک", "نقل‌قول", "نماد", "نمایش‌آرایش", "نمایش‌بارگذاریها", "نمایش‌بستها", "نمایش‌توری", "نمایش‌رنگ", "نمایش‌طرح‌بندی", "نمایش‌قالب", "نمایش‌قلم‌بدنه", "نمایش‌لوح", "نمایش‌مجموعه‌علامت", "نمایش‌محیط‌قلم‌بدنه", "نمایش‌چاپ", "نمایش‌گروه‌رنگ", "پابا", "پایانJScode", "پایانJSpreamble", "پایانMPclip", "پایانMPcode", "پایانMPdefinitions", "پایانMPdrawing", "پایانMPenvironment", "پایانMPextensions", "پایانMPinclusions", "پایانMPinitializations", "پایانMPpage", "پایانMPpositiongraphic", "پایانMPpositionmethod", "پایانMPrun", "پایانTABLE", "پایانTABLEbody", "پایانTABLEfoot", "پایانTABLEhead", "پایانTABLEnext", "پایانTC", "پایانTD", "پایانTDs", "پایانTEXpage", "پایانTH", "پایانTN", "پایانTR", "پایانTRs", "پایانTX", "پایانTY", "پایانallmodes", "پایانarrangedpages", "پایانaside", "پایانattachment", "پایانbar", "پایانbinom", "پایانbitmapimage", "پایانblockquote", "پایانbtxrenderingdefinitions", "پایانbuffer", "پایانbutton", "پایانcatcodetable", "پایانcharacteralign", "پایانcheckedfences", "پایانchemical", "پایانcollect", "پایانcollecting", "پایانcolorintent", "پایانcoloronly", "پایانcolorset", "پایانcolumns", "پایانcolumnspan", "پایانcombination", "پایانcomment", "پایانcontextcode", "پایانcontextdefinitioncode", "پایانctxfunction", "پایانctxfunctiondefinition", "پایانcurrentcolor", "پایانcurrentlistentrywrapper", "پایانdbinom", "پایانdelimited", "پایانdelimitedtext", "پایانdfrac", "پایانdisplaymath", "پایانdmath", "پایانdocument", "پایانeffect", "پایانelement", "پایانembeddedxtable", "پایانendofline", "پایانexceptions", "پایانexpanded", "پایانexpandedcollect", "پایانextendedcatcodetable", "پایانexternalfigurecollection", "پایانfigure", "پایانfitfieldframed", "پایانfittingpage", "پایانfloatcombination", "پایانfont", "پایانfontclass", "پایانfontsolution", "پایانformula", "پایانformulas", "پایانfrac", "پایانframedcontent", "پایانframedtext", "پایانgridsnapping", "پایانhbox", "پایانhboxestohbox", "پایانhboxregister", "پایانhelptext", "پایانhiddenbar", "پایانhiding", "پایانhighlight", "پایانhyphenation", "پایانimath", "پایانindentation", "پایانindentedtext", "پایانinmframed", "پایانinteraction", "پایانinterface", "پایانintertext", "پایانitemgroup", "پایانknockout", "پایانlayout", "پایانlinecorrection", "پایانlinefiller", "پایانlinenumbering", "پایانlinetable", "پایانlinetablebody", "پایانlinetablecell", "پایانlinetablehead", "پایانlocalfootnotes", "پایانlocalheadsetup", "پایانlocallinecorrection", "پایانlocalnotes", "پایانlocalsetups", "پایانlua", "پایانluacode", "پایانluaparameterset", "پایانluasetups", "پایانmakeup", "پایانmarginblock", "پایانmarkedcontent", "پایانmathmode", "پایانmathstyle", "پایانmatrices", "پایانmcframed", "پایانmdformula", "پایانmframed", "پایانmixedcolumns", "پایانmode", "پایانmodeset", "پایانmodule", "پایانmoduletestsection", "پایانmpformula", "پایانnamedsection", "پایانnamedsubformulas", "پایانnarrow", "پایانnarrower", "پایانnegative", "پایانnicelyfilledbox", "پایانnobar", "پایانnointerference", "پایانnotallmodes", "پایانnotext", "پایانnotmode", "پایانopposite", "پایانoutputstream", "پایانoverlay", "پایانoverprint", "پایانpagecomment", "پایانpagefigure", "پایانpagegrid", "پایانpagegridspan", "پایانpagelayout", "پایانpar", "پایانparagraph", "پایانparagraphs", "پایانparagraphscell", "پایانparbuilder", "پایانpath", "پایانplacepairedbox", "پایانpositioning", "پایانpositionoverlay", "پایانpositive", "پایانpostponing", "پایانprocessassignmentcommand", "پایانprocessassignmentlist", "پایانprocesscommacommand", "پایانprocesscommalist", "پایانprotect", "پایانprotectedcolors", "پایانpunctuation", "پایانrandomized", "پایانrandomseed", "پایانrawsetups", "پایانreadingfile", "پایانreferenceprefix", "پایانregime", "پایانreusableMPgraphic", "پایانscript", "پایانsdformula", "پایانsectionblock", "پایانsectionblockenvironment", "پایانsectionlevel", "پایانsetups", "پایانsfrac", "پایانshapebox", "پایانshift", "پایانsidebar", "پایانsimplecolumns", "پایانspecialitem", "پایانspeech", "پایانspformula", "پایانspread", "پایانstartstop", "پایانstaticMPfigure", "پایانstaticMPgraphic", "پایانstrictinspectnextcharacter", "پایانstrut", "پایانstyle", "پایانsubformulas", "پایانsubjectlevel", "پایانsubsentence", "پایانsubstack", "پایانsymbolset", "پایانtable", "پایانtablehead", "پایانtables", "پایانtabletail", "پایانtabulate", "پایانtabulatehead", "پایانtabulatetail", "پایانtagged", "پایانtbinom", "پایانtexcode", "پایانtexdefinition", "پایانtext", "پایانtextbackground", "پایانtextbackgroundmanual", "پایانtextcolor", "پایانtextcolorintent", "پایانtextflow", "پایانtokens", "پایانtransparent", "پایانtypescript", "پایانtypescriptcollection", "پایانunderdash", "پایانunderdashes", "پایانunderdot", "پایانunderdots", "پایانunderrandom", "پایانunderrandoms", "پایانunderstrike", "پایانunderstrikes", "پایانunframed", "پایانuniqueMPgraphic", "پایانuniqueMPpagegraphic", "پایانunpacked", "پایانusableMPgraphic", "پایانuseMPgraphic", "پایانusemathstyleparameter", "پایانusingbtxspecification", "پایانvbox", "پایانvboxregister", "پایانvboxtohbox", "پایانvboxtohboxseparator", "پایانviewerlayer", "پایانvtop", "پایانvtopregister", "پایانxcell", "پایانxcellgroup", "پایانxfrac", "پایانxgroup", "پایانxmldisplayverbatim", "پایانxmlinlineverbatim", "پایانxmlraw", "پایانxmlsetups", "پایانxrow", "پایانxrowgroup", "پایانxtable", "پایانxtablebody", "پایانxtablefoot", "پایانxtablehead", "پایانxtablenext", "پایانxxfrac", "پایانآیتم", "پایانآیتم‌بندی", "پایانبخش", "پایانبروبه", "پایانتوضیح", "پایانتولید", "پایانجدول", "پایانخط‌حاشیه", "پایانخط‌زدن", "پایانخط‌زدنها", "پایانخط‌متن", "پایاندرج‌فرمول", "پایانرنگ", "پایانزیربخش", "پایانزیرزیربخش", "پایانزیرزیرزیربخش", "پایانزیرزیرزیرزیربخش", "پایانزیرزیرزیرزیرموضوع", "پایانزیرزیرزیرموضوع", "پایانزیرزیرموضوع", "پایانزیرموضوع", "پایانسخنرانی", "پایانسر", "پایانشکل", "پایانعنوان", "پایانفشرده", "پایانفصل", "پایانقالبی", "پایانمتن‌قالبی", "پایانمتن‌کمکی", "پایانمحیط", "پایانمنوی‌پانل", "پایانموضوع", "پایانمولفه", "پایانمیان‌پرده", "پایانمیله‌رو", "پایانمیله‌زیر", "پایانمیله‌ها‌رو", "پایانمیله‌‌های‌زیر", "پایاننشر", "پایاننقل", "پایاننقل‌بلوک", "پایاننقل‌قول", "پایانپروژه", "پایانپس‌زمینه", "پایانگرافیک", "پایان‌خط", "پایین", "پرده", "پروژه", "پرکردن‌میدان", "پس‌زمینه", "پنهان‌کردن", "چوبخط", "کشیده", "گرافیک", "گیره", "یادداشت", "یک‌جا", "یک‌خط" },
+ ["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", "Lua", "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", "MPwhd", "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", "TEXpage", "TaBlE", "TeX", "TheNormalizedFontSize", "TransparencyHack", "VerboseNumber", "WidthSpanningText", "XETEX", "XeTeX", "ZIDINSAPTAMANA", "abjadnaivenumerals", "abjadnodotnumerals", "abjadnumerals", "activatespacehandler", "adaptcollector", "adapteazaaspect", "adaptfontfeature", "adaptpapersize", "addfeature", "addtoJSpreamble", "addtocommalist", "addvalue", "adubuffer", "adumarcaje", "afiseazaaspect", "afiseazaculoare", "afiseazafonttext", "afiseazagrid", "afiseazagrupculoare", "afiseazamakeup", "afiseazamediufonttext", "afiseazapaleta", "afiseazarama", "afiseazasetari", "afiseazasetsimboluri", "afiseazastruts", "afiseazatiparire", "aftersplitstring", "aftertestandsplitstring", "alignmentcharacter", "allinputpaths", "alphabeticnumerals", "alwayscitation", "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", "ascundere", "aside", "assignalfadimension", "assigndimen", "assigndimension", "assignifempty", "assigntranslation", "assignvalue", "assignwidth", "assumelongusagecs", "astype", "attachment", "autocap", "autodirhbox", "autodirvbox", "autodirvtop", "autoinsertnextspace", "automathematics", "autosetups", "availablehsize", "averagecharwidth", "backgroundimage", "backgroundimagefill", "backgroundline", "baraculoare", "barainteractiune", "basegrid", "baselineleftbox", "baselinemiddlebox", "baselinerightbox", "bbox", "beforesplitstring", "beforetestandsplitstring", "big", "bigbodyfont", "bigg", "bigger", "biggl", "biggm", "biggr", "bigl", "bigm", "bigr", "bigskip", "binom", "bitmapimage", "blanc", "blap", "bleed", "bleedheight", "bleedwidth", "blockligatures", "blockquote", "bodyfontenvironmentlist", "bodyfontsize", "bold", "boldface", "bolditalic", "boldslanted", "booleanmodevalue", "bottombox", "bottomleftbox", "bottomrightbox", "boxcursor", "boxmarker", "boxofsize", "boxreference", "bpos", "bthiddencitation", "btxabbreviatedjournal", "btxaddjournal", "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", "btxlistcitation", "btxloadjournalist", "btxoneorrange", "btxremapauthor", "btxsavejournalist", "btxsetup", "btxsingularorplural", "btxsingularplural", "btxtextcitation", "butoaneinteractiune", "buton", "butonmeniu", "calligraphic", "camel", "camp", "capitol", "catcodetablename", "cbox", "centerbox", "centeredbox", "centerednextbox", "cfrac", "chardescription", "charwidthlanguage", "checkcharacteralign", "checkedchar", "checkedfiller", "checkedstrippedcsname", "checkinjector", "checknextindentation", "checknextinjector", "checkpage", "checkparameters", "checkpreviousinjector", "checksoundtrack", "checktwopassdata", "checkvariables", "chem", "chemical", "chemicalbottext", "chemicalmidtext", "chemicalsymbol", "chemicaltext", "chemicaltoptext", "chineseallnumerals", "chinesecapnumerals", "chinesenumerals", "citat", "citation", "cite", "clap", "classfont", "cldcommand", "cldcontext", "cldloadfile", "cldprocessfile", "cleftarrow", "clip", "cloneazacamp", "collect", "collectedtext", "collectexpanded", "coloana", "colorcomponents", "colored", "coloronly", "columnbreak", "combinepages", "comentariu", "commalistelement", "commalistsentence", "commalistsize", "comment", "comparagrupculoare", "comparapaleta", "comparedimension", "comparedimensioneps", "completeazanumarpagina", "completebtxrendering", "completelist", "completelistofpublications", "completelistofsorts", "completelistofsynonyms", "completeregister", "complexorsimple", "complexorsimpleempty", "componenta", "composedcollector", "composedlayer", "compresult", "constantdimen", "constantdimenargument", "constantemptyargument", "constantnumber", "constantnumberargument", "contentreference", "continuednumber", "continueifinputfile", "convertargument", "convertcommand", "convertedcounter", "converteddimen", "convertedsubcounter", "convertestenumar", "convertmonth", "convertvalue", "convertvboxtohbox", "copiazacamp", "copypages", "copyparameters", "copyposition", "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", "data", "datacurenta", "datasetvariable", "dayoftheweek", "dayspermonth", "dbinom", "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", "definecomplexorsimpleempty", "defineconversionset", "definecounter", "definedataset", "definedelimitedtext", "definedfont", "defineeffect", "defineexpandable", "defineexternalfigure", "definefallbackfamily", "definefieldbody", "definefieldbodyset", "definefieldcategory", "definefileconstant", "definefilefallback", "definefilesynonym", "definefiller", "definefirstline", "definefittingpage", "definefontalternative", "definefontfallback", "definefontfamily", "definefontfamilypreset", "definefontfeature", "definefontfile", "definefontsize", "definefontsolution", "defineformula", "defineformulaalternative", "defineformulaframed", "defineframedcontent", "definefrozenfont", "defineglobalcolor", "definegraphictypesynonym", "definegridsnapping", "defineheadalternative", "definehelp", "definehigh", "definehighlight", "definehspace", "definehypenationfeatures", "defineindentedtext", "defineindenting", "defineinitial", "defineinsertion", "defineinteraction", "defineinteractionbar", "defineinterfaceconstant", "defineinterfaceelement", "defineinterfacevariable", "defineinterlinespace", "defineintermediatecolor", "defineitemgroup", "defineitems", "definelabelclass", "definelayer", "definelayerpreset", "definelayout", "definelinefiller", "definelinenote", "definelinenumbering", "definelines", "definelistalternative", "definelistextra", "definelow", "definelowhigh", "definelowmidhigh", "definemarginblock", "definemargindata", "definemarker", "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", "definenamespace", "definenarrower", "definenote", "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", "definesteantet", "definestebloc", "definesteblocsectiune", "definestebuffer", "definestecamp", "definesteconversie", "definesteculoare", "definestedescriere", "definestedimensiunehartie", "definesteenumerare", "definesteeticheta", "definestefloat", "definestefont", "definestefonttext", "definesteformatreferinte", "definestegrupculori", "definestehbox", "definesteinconjurare", "definestelista", "definestelistacombinata", "definestemakeup", "definestemarcaje", "definestemediulfonttext", "definestemeniuinteractiune", "definesteoverlay", "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", "dimensiontocount", "din", "directcolor", "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", "dorepeatwithcommand", "doreplacefeature", "doresetandafffeature", "doresetattribute", "dorotatebox", "dosetattribute", "dosetleftskipadaption", "dosetrightskipadaption", "dosetupcheckedinterlinespace", "doseventupleargument", "doseventupleempty", "dosingleargument", "dosingleempty", "dosinglegroupempty", "dosixtupleargument", "dosixtupleempty", "dostepwiserecurse", "dosubtractfeature", "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", "elapsedseconds", "elapsedtime", "eleftarrowfill", "eleftharpoondownfill", "eleftharpoonupfill", "eleftrightarrowfill", "element", "emphasisboldface", "emphasistypeface", "emptylines", "emspace", "enabledirectives", "enableexperiments", "enablemode", "enableoutputstream", "enableparpositions", "enableregime", "enabletrackers", "enskip", "enspace", "enumerare", "env", "envvar", "eoverbarfill", "eoverbracefill", "eoverbracketfill", "eoverparentfill", "epos", "equaldigits", "erightarrowfill", "erightharpoondownfill", "erightharpoonupfill", "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", "fence", "fenced", "fetchallmarkings", "fetchallmarks", "fetchmark", "fetchmarking", "fetchonemark", "fetchonemarking", "fetchruntinecommand", "fetchtwomarkings", "fetchtwomarks", "fieldbody", "fifthoffivearguments", "fifthofsixarguments", "figura", "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", "flushboxregister", "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", "forcecharacterstripping", "forcelocalfloats", "forgeteverypar", "forgetparameters", "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", "getprivatechar", "getprivateslot", "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", "grabbufferdata", "grabbufferdatadirect", "grabuntil", "graficul", "grayvalue", "greedysplitstring", "greeknumerals", "grid", "grosimelinie", "groupedcommand", "gsetboxllx", "gsetboxlly", "gujaratinumerals", "gurmurkhinumerals", "hairspace", "halfwaybox", "handletokens", "handwritten", "hash", "hboxofvbox", "hboxreference", "hdofstring", "headhbox", "headnumbercontent", "headnumberdistance", "headnumberwidth", "headreferenceattributes", "headsetupspacing", "headtextcontent", "headtextdistance", "headtextwidth", "headvbox", "headwidth", "heightanddepthofstring", "heightofstring", "heightspanningtext", "helptext", "hglue", "hiddenbar", "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", "incrementcounter", "incrementedcounter", "incrementpagenumber", "incrementsubpagenumber", "incrementvalue", "indentation", "infofont", "infofontbold", "inframed", "inheritparameter", "inhibitblank", "initializeboxstack", "injos", "inlinebuffer", "inlinedbox", "inlinemath", "inlinemathematics", "inlinemessage", "inlineordisplaymath", "inlinerange", "inlinie", "inmaframed", "innerflushshapebox", "input", "inputfilebarename", "inputfilename", "inputfilerealsuffix", "inputfilesuffix", "inputgivenfile", "insertpages", "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", "integerrounding", "intermezzo", "intertext", "intins", "invokepageheandler", "istltdir", "istrtdir", "italic", "italicbold", "italiccorrection", "itemtag", "jobfilename", "jobfilesuffix", "jos", "jossus", "kap", "keeplinestogether", "keepunwantedspaces", "kerncharacters", "koreancirclenumerals", "koreannumerals", "koreannumeralsc", "koreannumeralsp", "koreanparentnumerals", "la", "languageCharacters", "languagecharacters", "languagecharwidth", "lapagina", "lastcounter", "lastcountervalue", "lastdigit", "lastlinewidth", "lastnaturalboxdp", "lastnaturalboxht", "lastnaturalboxwd", "lastpredefinedsymbol", "lastrealpage", "lastrealpagenumber", "lastsubcountervalue", "lastsubpage", "lastsubpagenumber", "lasttwodigits", "lastuserpage", "lastuserpagenumber", "lateluacode", "layeredtext", "layerheight", "layerwidth", "lazysavetaggedtwopassdata", "lazysavetwopassdata", "lbox", "left", "leftbottombox", "leftbox", "lefthbox", "leftorrighthbox", "leftorrightvbox", "leftorrightvtop", "leftskipadaption", "leftsubguillemot", "lefttopbox", "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", "limtatefirstline", "linespanningtext", "linieneagra", "liniesubtire", "linieumplere", "liniinegre", "liniisubtiri", "listcitation", "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", "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", "marcaje", "margindata", "markcontent", "markinjector", "mat", "matematica", "math", "mathbf", "mathbi", "mathblackboard", "mathbs", "mathcommand", "mathdefault", "mathfraktur", "mathfunction", "mathit", "mathitalic", "mathop", "mathrm", "mathscript", "mathsl", "mathss", "mathtext", "mathtextbf", "mathtextbi", "mathtextbs", "mathtextit", "mathtextsl", "mathtexttf", "mathtf", "mathtriplet", "mathtt", "mathupright", "mathword", "mathwordbf", "mathwordbi", "mathwordbs", "mathwordit", "mathwordsl", "mathwordtf", "mbox", "mcframed", "md", "measure", "measured", "mediu", "medskip", "medspace", "meniuinteractiune", "mequal", "message", "metaTeX", "mfence", "mfunction", "mfunctionlabeltext", "mhbox", "mhookleftarrow", "mhookrightarrow", "middle", "middlebox", "midhbox", "minicitat", "minimalhbox", "mixedcaps", "mkvibuffer", "mleftarrow", "mleftharpoondown", "mleftharpoonup", "mleftrightarrow", "mleftrightharpoons", "mmapsto", "moduleparameter", "molecule", "mono", "monobold", "mononormal", "monthlong", "monthshort", "mp", "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", "nobar", "nocitation", "nocite", "nodetostring", "noffigurepages", "noflines", "noflocalfloats", "noindentation", "noitem", "nokap", "nonfrenchspacing", "nonmathematics", "normal", "normalboldface", "normalframedwithsettings", "normalizebodyfontsize", "normalizedfontsize", "normalizefontdepth", "normalizefontheight", "normalizefontline", "normalizefontwidth", "normalizetextdepth", "normalizetextheight", "normalizetextline", "normalizetextwidth", "normaltypeface", "nota", "notesymbol", "ntimes", "numarformula", "numarpagina", "numartitlu", "numartitlucurent", "numberofpoints", "numere", "numereromane", "obeydepth", "objectdepth", "objectheight", "objectmargin", "objectwidth", "obox", "offset", "offsetbox", "olinie", "onedigitrounding", "ordinaldaynumber", "ordinalstr", "ornamenttext", "outputfilename", "outputstreambox", "outputstreamcopy", "outputstreamunvbox", "outputstreamunvcopy", "over", "overbar", "overbars", "overbartext", "overbarunderbar", "overbrace", "overbracetext", "overbraceunderbrace", "overbracket", "overbrackettext", "overbracketunderbracket", "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", "pagestaterealpage", "pagina", "paletsize", "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", "placecitation", "placecomments", "placecurrentformulanumber", "placedbox", "placefloat", "placefloatwithsetups", "placeframed", "placeheadnumber", "placeheadtext", "placehelp", "placeinitial", "placelayer", "placelayeredtext", "placelistofpublications", "placelistofsorts", "placelistofsynonyms", "placelocalnotes", "placement", "placenamedfloat", "placenamedformula", "placenotes", "placepairedbox", "placeparallel", "placerawlist", "placerenderingwindow", "plaseazapegrid", "plaseazasemnecarte", "popattribute", "popmacro", "popmode", "popsystemmode", "positionoverlay", "positionregionoverlay", "postponenotes", "potrivestecamp", "pozitie", "predefinedfont", "predefinefont", "predefinesymbol", "prefixedpagenumber", "prependetoks", "prependgvalue", "prependtocommalist", "prependtoks", "prependtoksonce", "prependvalue", "presetdocument", "presetfieldsymbols", "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", "profiledbox", "profilegivenbox", "program", "proiect", "pseudoMixedCapped", "pseudoSmallCapped", "pseudoSmallcapped", "pseudosmallcapped", "puncte", "punedeasuprafiecareia", "punefatainfata", "puneformula", "punelista", "punelistacombinata", "punenotesubsol", "punenotesubsollocale", "punenumarpagina", "puneregistru", "punesubformula", "purenumber", "pushattribute", "pushbutton", "pushmacro", "pushmode", "pushoutputstream", "pushsystemmode", "qquad", "quad", "quads", "quitcommalist", "quitprevcommalist", "quittypescriptscanning", "raisebox", "randomizetext", "randomnumber", "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", "replaceincommalist", "replaceword", "rescan", "rescanwithsetup", "resetMPdrawing", "resetMPenvironment", "resetMPinstance", "resetallattributes", "resetandaddfeature", "resetbar", "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", "resolvedglyphdirect", "resolvedglyphstyled", "restartcounter", "restorebox", "restorecatcodes", "restorecounter", "restorecurrentattributes", "restoreendofline", "restoreglobalbodyfont", "reusableMPgraphic", "reuseMPgraphic", "reuserandomseed", "revivefeature", "rfence", "rhbox", "right", "rightbottombox", "rightbox", "righthbox", "rightorleftpageaction", "rightskipadaption", "rightsubguillemot", "righttolefthbox", "righttoleftvbox", "righttoleftvtop", "righttopbox", "riglatext", "rigleumplere", "rlap", "robustaddtocommalist", "robustdoifelseinset", "robustdoifinsetelse", "robustpretocommalist", "rollbutton", "roman", "roteste", "rtop", "ruledhbox", "ruledhpack", "ruledmbox", "ruledtopv", "ruledtpack", "ruledvbox", "ruledvpack", "ruledvtop", "runMPbuffer", "runninghbox", "safechar", "sans", "sansbold", "sansnormal", "sansserif", "savebox", "savebtxdataset", "savebuffer", "savecounter", "savecurrentattributes", "savenormalmeaning", "savetaggedtwopassdata", "savetwopassdata", "sbox", "scala", "scriebuffer", "scrieinlista", "scrieintreliste", "sd", "secondoffivearguments", "secondoffourarguments", "secondofsixarguments", "secondofthreearguments", "secondofthreeunexpanded", "secondoftwoarguments", "secondoftwounexpanded", "sectiune", "select", "selecteazablocuri", "semncarte", "serializecommalist", "serializedcommalist", "serif", "serifbold", "serifnormal", "setJSpreamble", "setMPlayer", "setMPpositiongraphic", "setMPpositiongraphicrange", "setMPtext", "setMPvariable", "setMPvariables", "setareitemization", "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", "seteazaantet", "seteazaaranjareapag", "seteazaaspect", "seteazabarainteractiune", "seteazablanc", "seteazabloc", "seteazablocsectiune", "seteazabuffer", "seteazacamp", "seteazacampuri", "seteazaclipping", "seteazacoloane", "seteazacomentariu", "seteazacomentariupagina", "seteazaculoare", "seteazaculori", "seteazadimensiunihartie", "seteazaecraninteractiune", "seteazaelemente", "seteazafloat", "seteazafonttext", "seteazaformulare", "seteazafundal", "seteazafundaluri", "seteazagrosimelinie", "seteazaimpartireafloat", "seteazainconjurat", "seteazaingust", "seteazainteractiunea", "seteazajos", "seteazalegenda", "seteazaliniesilabe", "seteazaliniesubtire", "seteazalinii", "seteazaliniimargine", "seteazaliniinegre", "seteazaliniiumplere", "seteazalista", "seteazalistacombinata", "seteazamajuscule", "seteazamakeup", "seteazamarcaje", "seteazameniuinteractiune", "seteazaminicitat", "seteazanumarpagina", "seteazanumarsubpagina", "seteazanumartitlu", "seteazanumerotarelinii", "seteazanumerotarepagina", "seteazanumerotareparagrafe", "seteazapaleta", "seteazaparagrafe", "seteazaplasareaopozita", "seteazaprograme", "seteazareferinte", "seteazaregistru", "seteazarigletext", "seteazarigleumplere", "seteazarotare", "seteazasimbol", "seteazasinonime", "seteazasortare", "seteazaspatiu", "seteazaspatiualb", "seteazaspatiuinterliniar", "seteazasubsol", "seteazasus", "seteazatabele", "seteazatabulatori", "seteazatext", "seteazatexteantet", "seteazatextejos", "seteazatextesubsol", "seteazatextesus", "seteazatextetext", "seteazatitlu", "seteazatitluri", "seteazatoleranta", "seteazatranzitiepagina", "seteazatype", "seteazatyping", "seteazaurl", "setelementexporttag", "setemeasure", "setevalue", "setevariable", "setevariables", "setfirstline", "setflag", "setfont", "setfontcolorsheme", "setfontfeature", "setfontsolution", "setfontstrut", "setfractions", "setgmeasure", "setgvalue", "setgvariable", "setgvariables", "sethboxregister", "sethyphenatedurlafter", "sethyphenatedurlbefore", "sethyphenatedurlnormal", "sethyphenationfeatures", "setinitial", "setinjector", "setinteraction", "setinterfacecommand", "setinterfaceconstant", "setinterfaceelements", "setinterfacemessage", "setinterfacevariable", "setinternalrendering", "setitaliccorrection", "setlayer", "setlayerframed", "setlayertext", "setlinefiller", "setlocalhsize", "setmainbodyfont", "setmainparbuilder", "setmarker", "setmarking", "setmathstyle", "setmeasure", "setmessagetext", "setmode", "setnostrut", "setnote", "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", "setupMPgraphics", "setupMPinstance", "setupMPpage", "setupMPvariables", "setupTABLE", "setupTEXpage", "setupattachment", "setupbackend", "setupbar", "setupbleeding", "setupbookmark", "setupbtx", "setupbtxdataset", "setupbtxlist", "setupbtxregister", "setupbtxrendering", "setupbutton", "setupcharacterkerning", "setupcharacterspacing", "setupchemical", "setupchemicalframed", "setupcollector", "setupcolumnspan", "setupcombination", "setupcounter", "setupdataset", "setupdelimitedtext", "setupdescription", "setupdirections", "setupdocument", "setupeffect", "setupenumeration", "setupenv", "setupexport", "setupexternalfigure", "setupexternalsoundtracks", "setupfieldbody", "setupfieldcategory", "setupfieldcontentframed", "setupfieldlabelframed", "setupfieldtotalframed", "setupfiller", "setupfirstline", "setupfittingpage", "setupfloatcaption", "setupfontexpansion", "setupfontprotrusion", "setupfonts", "setupfontsolution", "setupformula", "setupformulaframed", "setupframedcontent", "setupframedtext", "setupglobalreferenceprefix", "setupheadalternative", "setuphelp", "setuphigh", "setuphighlight", "setuphyphenation", "setupindentedtext", "setupinitial", "setupinsertion", "setupitaliccorrection", "setupitemgroup", "setuplabel", "setuplayer", "setuplayeredtext", "setuplayouttext", "setuplinefiller", "setuplinefillers", "setuplinenote", "setuplinetable", "setuplistalternative", "setuplistextra", "setuplocalfloats", "setuplocalinterlinespace", "setuplow", "setuplowhigh", "setuplowmidhigh", "setupmarginblock", "setupmargindata", "setupmarginframed", "setupmarginrule", "setupmathalignment", "setupmathcases", "setupmathematics", "setupmathfence", "setupmathfraction", "setupmathframed", "setupmathmatrix", "setupmathornament", "setupmathradical", "setupmathstackers", "setupmathstyle", "setupmixedcolumns", "setupmodule", "setupnotation", "setupnotations", "setupnote", "setupnotes", "setupoffset", "setupoffsetbox", "setupoutputroutine", "setuppagechecker", "setuppagegrid", "setuppagegridarea", "setuppagegridareatext", "setuppagegridlines", "setuppagegridspan", "setuppagegridstart", "setuppageinjection", "setuppageinjectionalternative", "setuppageshift", "setuppagestate", "setuppairedbox", "setuppaper", "setupparagraph", "setupparagraphintro", "setupparallel", "setupperiods", "setupplacement", "setuppositionbar", "setupprocessor", "setupprofile", "setupquotation", "setuprealpagenumber", "setupreferenceformat", "setupreferenceprefix", "setupreferencestructureprefix", "setupregisters", "setuprenderingwindow", "setups", "setupscale", "setupscript", "setupscripts", "setupselector", "setupshift", "setupsidebar", "setupspellchecking", "setupstartstop", "setupstretched", "setupstruts", "setupstyle", "setupsubformula", "setuptabulation", "setuptagging", "setuptextbackground", "setuptextflow", "setuptooltip", "setupunit", "setupuserpagenumber", "setupversion", "setupviewerlayer", "setupvspacing", "setupwithargument", "setupwithargumentswapped", "setupxml", "setupxtable", "setuvalue", "setuxvalue", "setvalue", "setvariable", "setvariables", "setvboxregister", "setvisualizerfont", "setvtopregister", "setwidthof", "setxmeasure", "setxvalue", "setxvariable", "setxvariables", "sfrac", "shapedhbox", "showallmakeup", "showattributes", "showboxes", "showbtxdatasetauthors", "showbtxdatasetcompleteness", "showbtxdatasetfields", "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", "simbol", "simplegroupedcommand", "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", "someheadnumber", "somekindoftab", "somelocalfloat", "somenamedheadnumber", "someplace", "sp", "spanishNumerals", "spanishnumerals", "spatiifixate", "spatiu", "spatiufixat", "speech", "splitatasterisk", "splitatcolon", "splitatcolons", "splitatcomma", "splitdfrac", "splitfilename", "splitfrac", "splitoffbase", "splitofffull", "splitoffkind", "splitoffname", "splitoffpath", "splitoffroot", "splitofftokens", "splitofftype", "splitstring", "spreadhbox", "sqrt", "stackrel", "startJScode", "startJSpreamble", "startMPclip", "startMPcode", "startMPdefinitions", "startMPdrawing", "startMPenvironment", "startMPextensions", "startMPinclusions", "startMPinitializations", "startMPpage", "startMPpositiongraphic", "startMPpositionmethod", "startMPrun", "startTABLE", "startTABLEbody", "startTABLEfoot", "startTABLEhead", "startTABLEnext", "startTC", "startTD", "startTDs", "startTEXpage", "startTH", "startTN", "startTR", "startTRs", "startTX", "startTY", "startallmodes", "startarrangedpages", "startaside", "startattachment", "startbar", "startbarasus", "startbinom", "startbitmapimage", "startblockquote", "startbtxrenderingdefinitions", "startbuffer", "startbutton", "startcapitol", "startcatcodetable", "startcharacteralign", "startcheckedfences", "startchemical", "startcitat", "startcollect", "startcollecting", "startcolorintent", "startcoloronly", "startcolorset", "startcolumns", "startcolumnspan", "startcombination", "startcomentariu", "startcomment", "startcomponenta", "startcontextcode", "startcontextdefinitioncode", "startctxfunction", "startctxfunctiondefinition", "startculoare", "startcurrentcolor", "startcurrentlistentrywrapper", "startdbinom", "startdelimited", "startdelimitedtext", "startdfrac", "startdisplaymath", "startdmath", "startdocument", "startdute", "starteffect", "startelement", "startembeddedxtable", "startendofline", "startenumerare", "startexceptions", "startexpanded", "startexpandedcollect", "startextendedcatcodetable", "startexternalfigurecollection", "startfigura", "startfigure", "startfitfieldframed", "startfittingpage", "startfloatcombination", "startfont", "startfontclass", "startfontsolution", "startformula", "startformulas", "startfrac", "startframed", "startframedcontent", "startframedtext", "startfundal", "startgraficul", "startgridsnapping", "starthbox", "starthboxestohbox", "starthboxregister", "starthelptext", "starthiddenbar", "starthiding", "starthighlight", "starthyphenation", "startimath", "startimpachetat", "startindentation", "startindentedtext", "startinmframed", "startinteraction", "startinterface", "startintermezzo", "startintertext", "startitemgroup", "startknockout", "startlayout", "startlinecorrection", "startlinefiller", "startlinenumbering", "startlinetable", "startlinetablebody", "startlinetablecell", "startlinetablehead", "startlinie", "startliniemargine", "startliniepeste", "startliniipeste", "startlocalfootnotes", "startlocalheadsetup", "startlocallinecorrection", "startlocalnotes", "startlocalsetups", "startlua", "startluacode", "startluaparameterset", "startluasetups", "startmakeup", "startmarginblock", "startmarkedcontent", "startmathmode", "startmathstyle", "startmatrices", "startmcframed", "startmdformula", "startmediu", "startmeniuinteractiune", "startmframed", "startminicitat", "startmixedcolumns", "startmode", "startmodeset", "startmodule", "startmoduletestsection", "startmpformula", "startnamedsection", "startnamedsubformulas", "startnarrow", "startnarrower", "startnegative", "startnicelyfilledbox", "startnobar", "startnointerference", "startnotallmodes", "startnotext", "startnotmode", "startopposite", "startoutputstream", "startoverlay", "startoverprint", "startpagecomment", "startpagefigure", "startpagegrid", "startpagegridspan", "startpagelayout", "startpar", "startparagraph", "startparagraphs", "startparagraphscell", "startparbuilder", "startpath", "startplacepairedbox", "startpositioning", "startpositionoverlay", "startpositive", "startpostponing", "startprocessassignmentcommand", "startprocessassignmentlist", "startprocesscommacommand", "startprocesscommalist", "startprodus", "startproiect", "startprotect", "startprotectedcolors", "startpublicatie", "startpunctuation", "startpuneformula", "startrandomized", "startrandomseed", "startrawsetups", "startreadingfile", "startreferenceprefix", "startregime", "startregister", "startreusableMPgraphic", "startriglatext", "startscript", "startsdformula", "startsectionblock", "startsectionblockenvironment", "startsectionlevel", "startsectiune", "startsetups", "startsfrac", "startshapebox", "startshift", "startsidebar", "startsimplecolumns", "startspecialitem", "startspeech", "startspformula", "startspread", "startstartstop", "startstaticMPfigure", "startstaticMPgraphic", "startstrictinspectnextcharacter", "startstructurepageregister", "startstrut", "startstyle", "startsubformulas", "startsubiect", "startsubjectlevel", "startsublinie", "startsublinii", "startsubsectiune", "startsubsentence", "startsubstack", "startsubsubiect", "startsubsubsectiune", "startsubsubsubiect", "startsubsubsubsectiune", "startsubsubsubsubiect", "startsubsubsubsubsectiune", "startsubsubsubsubsubiect", "startsupralinie", "startsymbolset", "starttabelul", "starttable", "starttablehead", "starttables", "starttabletail", "starttabulate", "starttabulatehead", "starttabulatetail", "starttagged", "starttbinom", "starttexcode", "starttexdefinition", "starttext", "starttextajutator", "starttextbackground", "starttextbackgroundmanual", "starttextcolor", "starttextcolorintent", "starttextflow", "starttextinconjurat", "starttitlu", "starttokens", "starttransparent", "starttypescript", "starttypescriptcollection", "startunderdash", "startunderdashes", "startunderdot", "startunderdots", "startunderrandom", "startunderrandoms", "startunderstrike", "startunderstrikes", "startunframed", "startuniqueMPgraphic", "startuniqueMPpagegraphic", "startunpacked", "startusableMPgraphic", "startuseMPgraphic", "startusemathstyleparameter", "startusingbtxspecification", "startvbox", "startvboxregister", "startvboxtohbox", "startvboxtohboxseparator", "startviewerlayer", "startvtop", "startvtopregister", "startxcell", "startxcellgroup", "startxfrac", "startxgroup", "startxmldisplayverbatim", "startxmlinlineverbatim", "startxmlraw", "startxmlsetups", "startxrow", "startxrowgroup", "startxtable", "startxtablebody", "startxtablefoot", "startxtablehead", "startxtablenext", "startxxfrac", "stivacampuri", "stopJScode", "stopJSpreamble", "stopMPclip", "stopMPcode", "stopMPdefinitions", "stopMPdrawing", "stopMPenvironment", "stopMPextensions", "stopMPinclusions", "stopMPinitializations", "stopMPpage", "stopMPpositiongraphic", "stopMPpositionmethod", "stopMPrun", "stopTABLE", "stopTABLEbody", "stopTABLEfoot", "stopTABLEhead", "stopTABLEnext", "stopTC", "stopTD", "stopTDs", "stopTEXpage", "stopTH", "stopTN", "stopTR", "stopTRs", "stopTX", "stopTY", "stopallmodes", "stoparrangedpages", "stopaside", "stopattachment", "stopbar", "stopbarasus", "stopbinom", "stopbitmapimage", "stopblockquote", "stopbtxrenderingdefinitions", "stopbuffer", "stopbutton", "stopcapitol", "stopcatcodetable", "stopcharacteralign", "stopcheckedfences", "stopchemical", "stopcitat", "stopcollect", "stopcollecting", "stopcolorintent", "stopcoloronly", "stopcolorset", "stopcolumns", "stopcolumnspan", "stopcombination", "stopcomentariu", "stopcomment", "stopcomponenta", "stopcontextcode", "stopcontextdefinitioncode", "stopctxfunction", "stopctxfunctiondefinition", "stopculoare", "stopcurrentcolor", "stopcurrentlistentrywrapper", "stopdbinom", "stopdelimited", "stopdelimitedtext", "stopdfrac", "stopdisplaymath", "stopdmath", "stopdocument", "stopdute", "stopeffect", "stopelement", "stopembeddedxtable", "stopendofline", "stopenumerare", "stopexceptions", "stopexpanded", "stopexpandedcollect", "stopextendedcatcodetable", "stopexternalfigurecollection", "stopfigura", "stopfigure", "stopfitfieldframed", "stopfittingpage", "stopfloatcombination", "stopfont", "stopfontclass", "stopfontsolution", "stopformula", "stopformulas", "stopfrac", "stopframed", "stopframedcontent", "stopframedtext", "stopfundal", "stopgraficul", "stopgridsnapping", "stophbox", "stophboxestohbox", "stophboxregister", "stophelptext", "stophiddenbar", "stophiding", "stophighlight", "stophyphenation", "stopimath", "stopimpachetat", "stopindentation", "stopindentedtext", "stopinmframed", "stopinteraction", "stopinterface", "stopintermezzo", "stopintertext", "stopitemgroup", "stopknockout", "stoplayout", "stoplinecorrection", "stoplinefiller", "stoplinenumbering", "stoplinetable", "stoplinetablebody", "stoplinetablecell", "stoplinetablehead", "stoplinie", "stopliniemargine", "stopliniepeste", "stopliniipeste", "stoplocalfootnotes", "stoplocalheadsetup", "stoplocallinecorrection", "stoplocalnotes", "stoplocalsetups", "stoplua", "stopluacode", "stopluaparameterset", "stopluasetups", "stopmakeup", "stopmarginblock", "stopmarkedcontent", "stopmathmode", "stopmathstyle", "stopmatrices", "stopmcframed", "stopmdformula", "stopmediu", "stopmeniuinteractiune", "stopmframed", "stopminicitat", "stopmixedcolumns", "stopmode", "stopmodeset", "stopmodule", "stopmoduletestsection", "stopmpformula", "stopnamedsection", "stopnamedsubformulas", "stopnarrow", "stopnarrower", "stopnegative", "stopnicelyfilledbox", "stopnobar", "stopnointerference", "stopnotallmodes", "stopnotext", "stopnotmode", "stopopposite", "stopoutputstream", "stopoverlay", "stopoverprint", "stoppagecomment", "stoppagefigure", "stoppagegrid", "stoppagegridspan", "stoppagelayout", "stoppar", "stopparagraph", "stopparagraphs", "stopparagraphscell", "stopparbuilder", "stoppath", "stopplacepairedbox", "stoppositioning", "stoppositionoverlay", "stoppositive", "stoppostponing", "stopprocessassignmentcommand", "stopprocessassignmentlist", "stopprocesscommacommand", "stopprocesscommalist", "stopprodus", "stopproiect", "stopprotect", "stopprotectedcolors", "stoppublicatie", "stoppunctuation", "stoppuneformula", "stoprandomized", "stoprandomseed", "stoprawsetups", "stopreadingfile", "stopreferenceprefix", "stopregime", "stopregister", "stopreusableMPgraphic", "stopriglatext", "stopscript", "stopsdformula", "stopsectionblock", "stopsectionblockenvironment", "stopsectionlevel", "stopsectiune", "stopsetups", "stopsfrac", "stopshapebox", "stopshift", "stopsidebar", "stopsimplecolumns", "stopspecialitem", "stopspeech", "stopspformula", "stopspread", "stopstartstop", "stopstaticMPfigure", "stopstaticMPgraphic", "stopstrictinspectnextcharacter", "stopstructurepageregister", "stopstrut", "stopstyle", "stopsubformulas", "stopsubiect", "stopsubjectlevel", "stopsublinie", "stopsublinii", "stopsubsectiune", "stopsubsentence", "stopsubstack", "stopsubsubiect", "stopsubsubsectiune", "stopsubsubsubiect", "stopsubsubsubsectiune", "stopsubsubsubsubiect", "stopsubsubsubsubsectiune", "stopsubsubsubsubsubiect", "stopsupralinie", "stopsymbolset", "stoptabelul", "stoptable", "stoptablehead", "stoptables", "stoptabletail", "stoptabulate", "stoptabulatehead", "stoptabulatetail", "stoptagged", "stoptbinom", "stoptexcode", "stoptexdefinition", "stoptext", "stoptextajutator", "stoptextbackground", "stoptextbackgroundmanual", "stoptextcolor", "stoptextcolorintent", "stoptextflow", "stoptextinconjurat", "stoptitlu", "stoptokens", "stoptransparent", "stoptypescript", "stoptypescriptcollection", "stopunderdash", "stopunderdashes", "stopunderdot", "stopunderdots", "stopunderrandom", "stopunderrandoms", "stopunderstrike", "stopunderstrikes", "stopunframed", "stopuniqueMPgraphic", "stopuniqueMPpagegraphic", "stopunpacked", "stopusableMPgraphic", "stopuseMPgraphic", "stopusemathstyleparameter", "stopusingbtxspecification", "stopvbox", "stopvboxregister", "stopvboxtohbox", "stopvboxtohboxseparator", "stopviewerlayer", "stopvtop", "stopvtopregister", "stopxcell", "stopxcellgroup", "stopxfrac", "stopxgroup", "stopxmldisplayverbatim", "stopxmlinlineverbatim", "stopxmlraw", "stopxmlsetups", "stopxrow", "stopxrowgroup", "stopxtable", "stopxtablebody", "stopxtablefoot", "stopxtablehead", "stopxtablenext", "stopxxfrac", "strictdoifelsenextoptional", "strictdoifnextoptionalelse", "stripcharacter", "strippedcsname", "stripspaces", "structurelistuservariable", "structurenumber", "structuretitle", "structureuservariable", "structurevariable", "strut", "strutdp", "strutht", "struthtdp", "struttedbox", "strutwd", "style", "styleinstance", "subiect", "subpagenumber", "subsectiune", "subsentence", "substituteincommalist", "subsubiect", "subsubsectiune", "subsubsubiect", "subsubsubsectiune", "subsubsubsubiect", "subsubsubsubsectiune", "subsubsubsubsubiect", "subtractfeature", "swapcounts", "swapdimens", "swapface", "swapmacros", "swaptypeface", "switchstyleonly", "switchtocolor", "switchtointerlinespace", "symbolreference", "synchronizeblank", "synchronizeindenting", "synchronizemarking", "synchronizeoutputstreams", "synchronizestrut", "synchronizewhitespace", "systemlog", "systemlogfirst", "systemloglast", "systemsetups", "tLeftarrow", "tLeftrightarrow", "tRightarrow", "tabelul", "tabulateautoline", "tabulateautorule", "tabulateline", "tabulaterule", "taggedctxcommand", "taggedlabeltexts", "tbinom", "tbox", "tequal", "testandsplitstring", "testcolumn", "testfeature", "testfeatureonce", "testpage", "testpageonly", "testpagesync", "testtokens", "tex", "texdefinition", "texsetup", "textajutator", "textcitation", "textcite", "textcontrolspace", "textflowcollector", "textinconjurat", "textmath", "textminus", "textormathchar", "textplus", "textumplere", "textvisiblespace", "tfrac", "thainumerals", "thefirstcharacter", "thenormalizedbodyfontsize", "theremainingcharacters", "thickspace", "thinspace", "thirdoffivearguments", "thirdoffourarguments", "thirdofsixarguments", "thirdofthreearguments", "thirdofthreeunexpanded", "thookleftarrow", "thookrightarrow", "threedigitrounding", "tibetannumerals", "tightlayer", "tinyfont", "titlu", "tlap", "tleftarrow", "tleftharpoondown", "tleftharpoonup", "tleftrightarrow", "tleftrightharpoons", "tmapsto", "tochar", "tolinenote", "topbox", "topleftbox", "toplinebox", "toprightbox", "topskippedbox", "tracecatcodetables", "tracedfontname", "traceoutputroutines", "tracepositions", "traduce", "transparencycomponents", "transparent", "trecilafonttext", "trel", "trightarrow", "trightharpoondown", "trightharpoonup", "trightleftharpoons", "trightoverleftarrow", "triplebond", "truefilename", "truefontname", "ttriplerel", "ttwoheadleftarrow", "ttwoheadrightarrow", "twodigitrounding", "tx", "txx", "typ", "type", "typedefinedbuffer", "typeface", "typefile", "typescriptone", "typescriptprefix", "typescriptthree", "typescripttwo", "typesetbuffer", "typesetfile", "uconvertnumber", "uedcatcodecommand", "undefinevalue", "undepthed", "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", "unprotected", "unregisterhyphenationpattern", "unspaceafter", "unspaceargument", "unspaced", "unspacestring", "untexargument", "untexcommand", "uppercased", "uppercasestring", "upperleftdoubleninequote", "upperleftdoublesixquote", "upperleftsingleninequote", "upperleftsinglesixquote", "upperrightdoubleninequote", "upperrightdoublesixquote", "upperrightsingleninequote", "upperrightsinglesixquote", "url", "useMPenvironmentbuffer", "useMPgraphic", "useMPlibrary", "useMPrun", "useMPvariables", "useblankparameter", "usebodyfont", "usebodyfontparameter", "usebtxdataset", "usebtxdefinitions", "usecolors", "usecomponent", "usedummycolorparameter", "usedummystyleandcolor", "usedummystyleparameter", "useenvironment", "useexternalrendering", "usefigurebase", "usefile", "usegridparameter", "useindentingparameter", "useindentnextparameter", "useinterlinespaceparameter", "uselanguageparameter", "useluamodule", "usemathstyleparameter", "useproduct", "useprofileparameter", "useproject", "usereferenceparameter", "userpagenumber", "usesetupsparameter", "usestaticMPfigure", "usesubpath", "usetexmodule", "usetypescript", "usetypescriptfile", "usezipfile", "utfchar", "utflower", "utfupper", "utilityregisterlength", "valoareculoare", "vboxreference", "verbatim", "verbatimstring", "verbosenumber", "versiune", "verticalgrowingbar", "verticalpositionbar", "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", "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/context/data/scite/context/lexers/data/scite-context-data-metafun.lua b/context/data/scite/context/lexers/data/scite-context-data-metafun.lua
index 3be739005..5c061e039 100644
--- a/context/data/scite/context/lexers/data/scite-context-data-metafun.lua
+++ b/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", "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", "complementary", "complemented", "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" },
+ ["commands"]={ "loadmodule", "dispose", "nothing", "transparency", "tolist", "topath", "tocycle", "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", "unittriangle", "fulltriangle", "llcircle", "lrcircle", "urcircle", "ulcircle", "tcircle", "bcircle", "lcircle", "rcircle", "lltriangle", "lrtriangle", "urtriangle", "ultriangle", "uptriangle", "downtriangle", "lefttriangle", "righttriangle", "triangle", "smoothed", "cornered", "superellipsed", "randomized", "randomizedcontrols", "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", "boundingradius", "boundingcircle", "boundingpoint", "crossingunder", "insideof", "outsideof", "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", "withshaderadius", "withshadetransform", "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", "colordecimalslist", "textext", "thetextext", "rawtextext", "textextoffset", "texbox", "thetexbox", "rawtexbox", "verbatim", "thelabel", "label", "autoalign", "transparent", "withtransparency", "property", "properties", "withproperties", "asgroup", "infont", "space", "crlf", "dquote", "percent", "SPACE", "CRLF", "DQUOTE", "PERCENT", "grayscale", "greyscale", "withgray", "withgrey", "colorpart", "colorlike", "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", "resetarrows", "tensecircle", "roundedsquare", "colortype", "whitecolor", "blackcolor", "basiccolors", "complementary", "complemented", "resolvedcolor", "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", "pencilled", "decorated", "redecorated", "undecorated", "passvariable", "passarrayvariable", "tostring", "topair", "format", "formatted", "quotation", "quote", "startpassingvariable", "stoppassingvariable", "eofill", "eoclip", "nofill", "fillup", "eofillup", "area", "addbackground", "shadedup", "shadeddown", "shadedleft", "shadedright", "sortlist", "copylist", "shapedlist", "listtocurves", "listtolines", "listsize", "listlast", "uniquelist", "circularpath", "squarepath", "linearpath" },
+ ["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", "dq", "sq", "crossingscale", "crossingoption" },
} \ No newline at end of file
diff --git a/context/data/scite/context/lexers/data/scite-context-data-metapost.lua b/context/data/scite/context/lexers/data/scite-context-data-metapost.lua
index f3ace2b6a..8d1b88052 100644
--- a/context/data/scite/context/lexers/data/scite-context-data-metapost.lua
+++ b/context/data/scite/context/lexers/data/scite-context-data-metapost.lua
@@ -1,9 +1,9 @@
return {
- ["commands"]={ "upto", "downto", "beginfig", "endfig", "beginglyph", "endglyph", "rotatedaround", "reflectedabout", "arrowhead", "currentpen", "currentpicture", "cuttings", "defaultfont", "extra_beginfig", "extra_endfig", "ditto", "EOF", "down", "evenly", "fullcircle", "halfcircle", "identity", "in", "left", "pensquare", "penrazor", "penspec", "origin", "quartercircle", "right", "unitsquare", "up", "withdots", "abs", "bbox", "ceiling", "center", "cutafter", "cutbefore", "dir", "directionpoint", "div", "dotprod", "intersectionpoint", "inverse", "mod", "round", "unitvector", "whatever", "cutdraw", "draw", "drawarrow", "drawdblarrow", "fill", "filldraw", "drawdot", "loggingall", "interact", "tracingall", "tracingnone", "pickup", "undraw", "unfill", "unfilldraw", "buildcycle", "dashpattern", "decr", "dotlabel", "dotlabels", "drawoptions", "incr", "label", "labels", "max", "min", "thelabel", "z", "beginchar", "blacker", "capsule_end", "change_width", "define_blacker_pixels", "define_corrected_pixels", "define_good_x_pixels", "define_good_y_pixels", "define_horizontal_corrected_pixels", "define_pixels", "define_whole_blacker_pixels", "define_whole_pixels", "define_whole_vertical_blacker_pixels", "define_whole_vertical_pixels", "endchar", "extra_beginchar", "extra_endchar", "extra_setup", "font_coding_scheme", "clearxy", "clearit", "clearpen", "shipit", "font_extra_space", "exitunless", "relax", "hide", "gobble", "gobbled", "stop", "blankpicture", "counterclockwise", "tensepath", "takepower", "direction", "softjoin", "makelabel", "rotatedabout", "flex", "superellipse", "image", "nullpen", "savepen", "clearpen", "penpos", "penlabels", "range", "thru", "z", "laboff", "bye", "red", "green", "blue", "cyan", "magenta", "yellow", "black", "white", "background", "mm", "pt", "dd", "bp", "cm", "pc", "cc", "in", "triplet", "quadruplet" },
+ ["commands"]={ "upto", "downto", "beginfig", "endfig", "beginglyph", "endglyph", "rotatedaround", "reflectedabout", "arrowhead", "currentpen", "currentpicture", "cuttings", "defaultfont", "extra_beginfig", "extra_endfig", "down", "evenly", "fullcircle", "halfcircle", "identity", "in", "left", "pensquare", "penrazor", "penspec", "origin", "quartercircle", "right", "unitsquare", "up", "withdots", "abs", "bbox", "ceiling", "center", "cutafter", "cutbefore", "dir", "directionpoint", "div", "dotprod", "intersectionpoint", "inverse", "mod", "round", "unitvector", "whatever", "cutdraw", "draw", "drawarrow", "drawdblarrow", "fill", "filldraw", "drawdot", "loggingall", "interact", "tracingall", "tracingnone", "pickup", "undraw", "unfill", "unfilldraw", "buildcycle", "dashpattern", "decr", "dotlabel", "dotlabels", "drawoptions", "incr", "label", "labels", "max", "min", "thelabel", "z", "beginchar", "blacker", "capsule_end", "change_width", "define_blacker_pixels", "define_corrected_pixels", "define_good_x_pixels", "define_good_y_pixels", "define_horizontal_corrected_pixels", "define_pixels", "define_whole_blacker_pixels", "define_whole_pixels", "define_whole_vertical_blacker_pixels", "define_whole_vertical_pixels", "endchar", "extra_beginchar", "extra_endchar", "extra_setup", "font_coding_scheme", "clearxy", "clearit", "clearpen", "shipit", "font_extra_space", "exitunless", "relax", "hide", "gobble", "gobbled", "stop", "blankpicture", "counterclockwise", "tensepath", "takepower", "direction", "softjoin", "makelabel", "rotatedabout", "flex", "superellipse", "image", "nullpen", "savepen", "clearpen", "penpos", "penlabels", "range", "thru", "z", "laboff", "bye", "red", "green", "blue", "cyan", "magenta", "yellow", "black", "white", "background", "mm", "pt", "dd", "bp", "cm", "pc", "cc", "in", "triplet", "quadruplet" },
["disabled"]={ "verbatimtex", "troffmode" },
- ["internals"]={ "mitered", "rounded", "beveled", "butt", "squared", "eps", "epsilon", "infinity", "bboxmargin", "ahlength", "ahangle", "labeloffset", "dotlabeldiam", "defaultpen", "defaultscale", "join_radius", "charscale", "pen_lft", "pen_rt", "pen_top", "pen_bot" },
+ ["internals"]={ "mitered", "rounded", "beveled", "butt", "squared", "eps", "epsilon", "infinity", "bboxmargin", "ahlength", "ahangle", "labeloffset", "dotlabeldiam", "defaultpen", "defaultscale", "join_radius", "charscale", "ditto", "EOF", "pen_lft", "pen_rt", "pen_top", "pen_bot" },
["metafont"]={ "autorounding", "beginchar", "blacker", "boundarychar", "capsule_def", "capsule_end", "change_width", "chardp", "chardx", "chardy", "charexists", "charext", "charht", "charic", "charlist", "charwd", "cull", "cullit", "currenttransform", "currentwindow", "define_blacker_pixels", "define_corrected_pixels", "define_good_x_pixels", "define_good_y_pixels", "define_horizontal_corrected_pixels", "define_pixels", "define_whole_blacker_pixels", "define_whole_pixels", "define_whole_vertical_blacker_pixels", "define_whole_vertical_pixels", "designsize", "display", "displaying", "endchar", "extensible", "extra_beginchar", "extra_endchar", "extra_setup", "fillin", "font_coding_scheme", "font_extra_space", "font_identifier", "font_normal_shrink", "font_normal_space", "font_normal_stretch", "font_quad", "font_size", "font_slant", "font_x_height", "fontdimen", "fontmaking", "gfcorners", "granularity", "grayfont", "headerbyte", "hppp", "hround", "imagerules", "italcorr", "kern", "labelfont", "ligtable", "lowres_fix", "makebox", "makegrid", "maketicks", "mode_def", "mode_setup", "nodisplays", "notransforms", "numspecial", "o_correction", "openit", "openwindow", "pixels_per_inch", "proofing", "proofoffset", "proofrule", "proofrulethickness", "rulepen", "screenchars", "screenrule", "screenstrokes", "screen_cols", "screen_rows", "showit", "slantfont", "smode", "smoothing", "titlefont", "totalweight", "tracingedges", "tracingpens", "turningcheck", "unitpixel", "vppp", "vround", "xoffset", "yoffset" },
- ["primitives"]={ "charcode", "day", "linecap", "linejoin", "miterlimit", "month", "pausing", "prologues", "showstopping", "time", "tracingcapsules", "tracingchoices", "mpprocset", "tracingcommands", "tracingequations", "tracinglostchars", "tracingmacros", "tracingonline", "tracingoutput", "tracingrestores", "tracingspecs", "tracingstats", "tracingtitles", "truecorners", "warningcheck", "year", "false", "nullpicture", "pencircle", "true", "and", "angle", "arclength", "arctime", "ASCII", "boolean", "bot", "char", "color", "cosd", "cycle", "decimal", "directiontime", "floor", "fontsize", "hex", "infont", "intersectiontimes", "known", "length", "llcorner", "lrcorner", "makepath", "makepen", "mexp", "mlog", "normaldeviate", "not", "numeric", "oct", "odd", "or", "path", "pair", "pen", "penoffset", "picture", "point", "postcontrol", "precontrol", "reverse", "rotated", "scaled", "shifted", "sind", "slanted", "sqrt", "str", "string", "subpath", "substring", "transform", "transformed", "ulcorner", "uniformdeviate", "unknown", "urcorner", "xpart", "xscaled", "xxpart", "xypart", "ypart", "yscaled", "yxpart", "yypart", "zscaled", "addto", "clip", "input", "interim", "let", "newinternal", "save", "setbounds", "shipout", "show", "showdependencies", "showtoken", "showvariable", "special", "begingroup", "endgroup", "of", "curl", "tension", "and", "controls", "interpath", "on", "off", "def", "vardef", "enddef", "expr", "suffix", "text", "primary", "secondary", "tertiary", "primarydef", "secondarydef", "tertiarydef", "randomseed", "also", "contour", "doublepath", "withcolor", "withcmykcolor", "withpen", "dashed", "if", "else", "elseif", "fi", "for", "endfor", "forever", "exitif", "within", "forsuffixes", "step", "until", "charlist", "extensible", "fontdimen", "headerbyte", "kern", "ligtable", "boundarychar", "chardp", "charext", "charht", "charic", "charwd", "designsize", "fontmaking", "charexists", "cullit", "currenttransform", "gfcorners", "grayfont", "hround", "imagerules", "lowres_fix", "nodisplays", "notransforms", "openit", "displaying", "currentwindow", "screen_rows", "screen_cols", "pixels_per_inch", "cull", "display", "openwindow", "numspecial", "totalweight", "autorounding", "fillin", "proofing", "tracingpens", "xoffset", "chardx", "granularity", "smoothing", "turningcheck", "yoffset", "chardy", "hppp", "tracingedges", "vppp", "extra_beginfig", "extra_endfig", "mpxbreak", "endinput", "message", "delimiters", "turningnumber", "errmessage", "readstring", "scantokens", "end", "outer", "inner", "write", "to", "readfrom", "withprescript", "withpostscript", "top", "bot", "lft", "rt", "ulft", "urt", "llft", "lrt", "redpart", "greenpart", "bluepart", "cyanpart", "magentapart", "yellowpart", "blackpart", "prescriptpart", "postscriptpart", "rgbcolor", "cmykcolor", "colormodel", "graypart", "greypart", "greycolor", "graycolor", "dashpart", "penpart", "stroked", "filled", "textual", "clipped", "bounded", "pathpart", "expandafter", "minute", "hour", "outputformat", "outputtemplate", "filenametemplate", "fontmapfile", "fontmapline", "fontpart", "fontsize", "glyph", "restoreclipcolor", "troffmode", "runscript", "maketext" },
+ ["primitives"]={ "charcode", "day", "linecap", "linejoin", "miterlimit", "month", "pausing", "prologues", "showstopping", "time", "tracingcapsules", "tracingchoices", "mpprocset", "tracingcommands", "tracingequations", "tracinglostchars", "tracingmacros", "tracingonline", "tracingoutput", "tracingrestores", "tracingspecs", "tracingstats", "tracingtitles", "truecorners", "warningcheck", "year", "false", "nullpicture", "pencircle", "penspec", "true", "and", "angle", "arclength", "arctime", "ASCII", "boolean", "bot", "char", "color", "cosd", "cycle", "decimal", "directiontime", "floor", "fontsize", "hex", "infont", "intersectiontimes", "known", "length", "llcorner", "lrcorner", "makepath", "makepen", "mexp", "mlog", "normaldeviate", "not", "numeric", "oct", "odd", "or", "path", "pair", "pen", "penoffset", "picture", "point", "postcontrol", "precontrol", "reverse", "rotated", "scaled", "shifted", "sind", "slanted", "sqrt", "str", "string", "subpath", "substring", "transform", "transformed", "ulcorner", "uniformdeviate", "unknown", "urcorner", "xpart", "xscaled", "xxpart", "xypart", "ypart", "yscaled", "yxpart", "yypart", "zscaled", "addto", "clip", "input", "interim", "let", "newinternal", "save", "setbounds", "shipout", "show", "showdependencies", "showtoken", "showvariable", "special", "begingroup", "endgroup", "of", "curl", "tension", "and", "controls", "interpath", "on", "off", "def", "vardef", "enddef", "expr", "suffix", "text", "primary", "secondary", "tertiary", "primarydef", "secondarydef", "tertiarydef", "randomseed", "also", "contour", "doublepath", "withcolor", "withcmykcolor", "withpen", "dashed", "envelope", "if", "else", "elseif", "fi", "for", "endfor", "forever", "exitif", "within", "forsuffixes", "step", "until", "charlist", "extensible", "fontdimen", "headerbyte", "kern", "ligtable", "boundarychar", "chardp", "charext", "charht", "charic", "charwd", "designsize", "fontmaking", "charexists", "cullit", "currenttransform", "gfcorners", "grayfont", "hround", "imagerules", "lowres_fix", "nodisplays", "notransforms", "openit", "displaying", "currentwindow", "screen_rows", "screen_cols", "pixels_per_inch", "cull", "display", "openwindow", "numspecial", "totalweight", "autorounding", "fillin", "proofing", "tracingpens", "xoffset", "chardx", "granularity", "smoothing", "turningcheck", "yoffset", "chardy", "hppp", "tracingedges", "vppp", "extra_beginfig", "extra_endfig", "mpxbreak", "endinput", "message", "delimiters", "turningnumber", "errmessage", "readstring", "scantokens", "end", "outer", "inner", "write", "to", "readfrom", "withprescript", "withpostscript", "top", "bot", "lft", "rt", "ulft", "urt", "llft", "lrt", "redpart", "greenpart", "bluepart", "cyanpart", "magentapart", "yellowpart", "blackpart", "prescriptpart", "postscriptpart", "rgbcolor", "cmykcolor", "colormodel", "graypart", "greypart", "greycolor", "graycolor", "dashpart", "penpart", "stroked", "filled", "textual", "clipped", "bounded", "pathpart", "expandafter", "minute", "hour", "outputformat", "outputtemplate", "filenametemplate", "fontmapfile", "fontmapline", "fontpart", "fontsize", "glyph", "restoreclipcolor", "troffmode", "runscript", "maketext" },
["shortcuts"]={ "..", "...", "--", "---", "&", "\\" },
["tex"]={ "btex", "etex", "verbatimtex" },
} \ No newline at end of file
diff --git a/context/data/scite/context/lexers/data/scite-context-data-tex.lua b/context/data/scite/context/lexers/data/scite-context-data-tex.lua
index 30305f5ec..3d2e60ea4 100644
--- a/context/data/scite/context/lexers/data/scite-context-data-tex.lua
+++ b/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", "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" },
+ ["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", "Umathnolimitsupfactor", "Umathnolimitsubfactor", "Umiddle", "Uoverdelimiter", "Uradical", "Uright", "Uroot", "Uskewed", "Uskewedwithdelims", "Ustack", "Ustartdisplaymath", "Ustartmath", "Ustopdisplaymath", "Ustopmath", "Usubscript", "Usuperscript", "Uunderdelimiter", "Uvextensible", "adjustspacing", "alignmark", "aligntab", "attribute", "attributedef", "hyphenpenaltymode", "automatichyphenmode", "automatichyphenpenalty", "automaticdiscretionary", "explicithyphenpenalty", "explicitdiscretionary", "bodydir", "boundary", "boxdir", "catcodetable", "clearmarks", "copyfont", "crampeddisplaystyle", "crampedscriptscriptstyle", "crampedscriptstyle", "crampedtextstyle", "draftmode", "dviextension", "dvifeedback", "dvivariable", "efcode", "hjcode", "firstvalidlanguage", "fontid", "formatname", "gleaders", "hyphenationmin", "hyphenationbounds", "ifabsdim", "ifabsnum", "ifprimitive", "ignoreligaturesinfont", "initcatcodetable", "insertht", "lastsavedboxresourceindex", "lastsavedimageresourceindex", "lastsavedimageresourcepages", "lastxpos", "lastypos", "latelua", "leftghost", "leftmarginkern", "letcharcode", "letterspacefont", "linedir", "localbrokenpenalty", "localinterlinepenalty", "localleftbox", "localrightbox", "lpcode", "luaescapestring", "luatexbanner", "luatexrevision", "luatexversion", "luafunction", "mathdir", "mathdisplayskipmode", "matheqnogapstep", "mathitalicsmode", "mathnolimitsmode", "mathoption", "mathscriptsmode", "mathstyle", "mathsurroundskip", "mathsurroundmode", "mathrulesmode", "mathrulesfam", "noboundary", "nokerns", "nohrule", "noligs", "nospaces", "novrule", "normaldeviate", "outputbox", "outputmode", "pagedir", "pageheight", "pagebottomoffset", "pageleftoffset", "pagerightoffset", "pagetopoffset", "pagewidth", "pardir", "pdfextension", "pdffeedback", "pdfvariable", "postexhyphenchar", "posthyphenchar", "predisplaygapfactor", "preexhyphenchar", "prehyphenchar", "primitive", "protrudechars", "protrusionboundary", "pxdimen", "randomseed", "rightghost", "rightmarginkern", "rpcode", "saveboxresource", "savecatcodetable", "saveimageresource", "savepos", "scantextokens", "setfontid", "setrandomseed", "shapemode", "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", "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" },
+ ["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", "Umathnolimitsupfactor", "Umathnolimitsubfactor", "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", "hyphenpenaltymode", "automatichyphenmode", "automatichyphenpenalty", "automaticdiscretionary", "explicithyphenpenalty", "explicitdiscretionary", "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", "hyphenationmin", "hyphenationbounds", "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", "linedir", "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", "mathitalicsmode", "mathnolimitsmode", "mathop", "mathopen", "mathoption", "mathord", "mathpunct", "mathrel", "mathrulesmode", "mathrulesfam", "mathscriptsmode", "mathstyle", "mathsurroundskip", "mathsurroundmode", "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", "predisplaygapfactor", "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", "shapemode", "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", "suppressmathparerror", "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/context/data/scite/context/lexers/scite-context-lexer-bibtex.lua b/context/data/scite/context/lexers/scite-context-lexer-bibtex.lua
index ebcd7cbc6..b53da82ea 100644
--- a/context/data/scite/context/lexers/scite-context-lexer-bibtex.lua
+++ b/context/data/scite/context/lexers/scite-context-lexer-bibtex.lua
@@ -10,22 +10,22 @@ local global, string, table, lpeg = _G, string, table, lpeg
local P, R, S, V = lpeg.P, lpeg.R, lpeg.S, lpeg.V
local type = type
-local lexer = require("lexer")
-local context = lexer.context
-local patterns = context.patterns
+local lexer = require("scite-context-lexer")
+local context = lexer.context
+local patterns = context.patterns
-local token = lexer.token
-local exact_match = lexer.exact_match
+local token = lexer.token
+local exact_match = lexer.exact_match
-local bibtexlexer = lexer.new("bib","scite-context-lexer-bibtex")
-local whitespace = bibtexlexer.whitespace
+local bibtexlexer = lexer.new("bib","scite-context-lexer-bibtex")
+local whitespace = bibtexlexer.whitespace
- local escape, left, right = P("\\"), P('{'), P('}')
+local escape, left, right = P("\\"), P('{'), P('}')
- patterns.balanced = P {
- [1] = ((escape * (left+right)) + (1 - (left+right)) + V(2))^0,
- [2] = left * V(1) * right
- }
+patterns.balanced = P {
+ [1] = ((escape * (left+right)) + (1 - (left+right)) + V(2))^0,
+ [2] = left * V(1) * right
+}
-- taken from bibl-bib.lua
diff --git a/context/data/scite/context/lexers/scite-context-lexer-cld.lua b/context/data/scite/context/lexers/scite-context-lexer-cld.lua
index 3442a195c..7bda7800e 100644
--- a/context/data/scite/context/lexers/scite-context-lexer-cld.lua
+++ b/context/data/scite/context/lexers/scite-context-lexer-cld.lua
@@ -6,12 +6,12 @@ local info = {
license = "see context related readme files",
}
-local lexer = require("lexer")
-local context = lexer.context
-local patterns = context.patterns
+local lexer = require("scite-context-lexer")
+local context = lexer.context
+local patterns = context.patterns
-local cldlexer = lexer.new("cld","scite-context-lexer-cld")
-local lualexer = lexer.load("scite-context-lexer-lua")
+local cldlexer = lexer.new("cld","scite-context-lexer-cld")
+local lualexer = lexer.load("scite-context-lexer-lua")
-- can probably be done nicer now, a bit of a hack
diff --git a/context/data/scite/context/lexers/scite-context-lexer-cpp-web.lua b/context/data/scite/context/lexers/scite-context-lexer-cpp-web.lua
index daa9221ba..631a802fe 100644
--- a/context/data/scite/context/lexers/scite-context-lexer-cpp-web.lua
+++ b/context/data/scite/context/lexers/scite-context-lexer-cpp-web.lua
@@ -6,12 +6,12 @@ local info = {
license = "see context related readme files",
}
-local lexer = require("lexer")
-local context = lexer.context
-local patterns = context.patterns
+local lexer = require("scite-context-lexer")
+local context = lexer.context
+local patterns = context.patterns
-local cppweblexer = lexer.new("cpp-web","scite-context-lexer-cpp")
-local cpplexer = lexer.load("scite-context-lexer-cpp")
+local cppweblexer = lexer.new("cpp-web","scite-context-lexer-cpp")
+local cpplexer = lexer.load("scite-context-lexer-cpp")
-- can probably be done nicer now, a bit of a hack
diff --git a/context/data/scite/context/lexers/scite-context-lexer-cpp.lua b/context/data/scite/context/lexers/scite-context-lexer-cpp.lua
index 91ada7828..d9079855f 100644
--- a/context/data/scite/context/lexers/scite-context-lexer-cpp.lua
+++ b/context/data/scite/context/lexers/scite-context-lexer-cpp.lua
@@ -10,7 +10,7 @@ local info = {
local P, R, S = lpeg.P, lpeg.R, lpeg.S
-local lexer = require("lexer")
+local lexer = require("scite-context-lexer")
local context = lexer.context
local patterns = context.patterns
diff --git a/context/data/scite/context/lexers/scite-context-lexer-dummy.lua b/context/data/scite/context/lexers/scite-context-lexer-dummy.lua
index 9465561f3..5d3096b7d 100644
--- a/context/data/scite/context/lexers/scite-context-lexer-dummy.lua
+++ b/context/data/scite/context/lexers/scite-context-lexer-dummy.lua
@@ -10,7 +10,7 @@ local info = {
-- we need to trigger that, for instance in the bibtex lexer, but still
-- we get failed lexing
-local lexer = require("lexer")
+local lexer = require("scite-context-lexer")
local context = lexer.context
local patterns = context.patterns
diff --git a/context/data/scite/context/lexers/scite-context-lexer-lua-longstring.lua b/context/data/scite/context/lexers/scite-context-lexer-lua-longstring.lua
index 855adbe4e..b1304f65c 100644
--- a/context/data/scite/context/lexers/scite-context-lexer-lua-longstring.lua
+++ b/context/data/scite/context/lexers/scite-context-lexer-lua-longstring.lua
@@ -6,7 +6,7 @@ local info = {
license = "see context related readme files",
}
-local lexer = require("lexer") -- require("scite-context-lexer")
+local lexer = require("scite-context-lexer")
local context = lexer.context
local patterns = context.patterns
diff --git a/context/data/scite/context/lexers/scite-context-lexer-lua.lua b/context/data/scite/context/lexers/scite-context-lexer-lua.lua
index 9bee74845..d35ad5b15 100644
--- a/context/data/scite/context/lexers/scite-context-lexer-lua.lua
+++ b/context/data/scite/context/lexers/scite-context-lexer-lua.lua
@@ -13,7 +13,7 @@ local P, R, S, C, Cmt, Cp = lpeg.P, lpeg.R, lpeg.S, lpeg.C, lpeg.Cmt, lpeg.Cp
local match, find = string.match, string.find
local setmetatable = setmetatable
-local lexer = require("lexer")
+local lexer = require("scite-context-lexer")
local context = lexer.context
local patterns = context.patterns
@@ -25,7 +25,7 @@ local lualexer = lexer.new("lua","scite-context-lexer-lua")
local whitespace = lualexer.whitespace
local stringlexer = lexer.load("scite-context-lexer-lua-longstring")
-local labellexer = lexer.load("scite-context-lexer-lua-labelstring")
+----- labellexer = lexer.load("scite-context-lexer-lua-labelstring")
local directives = { } -- communication channel
@@ -80,7 +80,8 @@ local depricated = {
local csnames = { -- todo: option
"commands",
"context",
- "ctx",
+-- "ctxcmd",
+-- "ctx",
"metafun",
"metapost",
}
@@ -211,17 +212,17 @@ local p_constants = lexer.helpers.utfchartabletopattern(constants) * p_finish
local p_internals = P("__")
* lexer.helpers.utfchartabletopattern(internals) * p_finish -- exact_match(internals)
-local p_csnames = lexer.helpers.utfchartabletopattern(csnames) * p_finish -- just_match(csnames)
+local p_csnames = lexer.helpers.utfchartabletopattern(csnames) -- * p_finish -- just_match(csnames)
+local p_ctnames = P("ctx") * R("AZ","az","__")^0
local keyword = token("keyword", p_keywords)
local builtin = token("plain", p_functions)
local constant = token("data", p_constants)
local internal = token("data", p_internals)
-local csname = token("user", p_csnames)
- * (
- optionalspace * hasargument
- + ( optionalspace * token("special", S(".:")) * optionalspace * token("user", validword ) )^1
- + token("user", P("_") * validsuffix)
- )
+local csname = token("user", p_csnames + p_ctnames)
+ * p_finish * optionalspace * (
+ hasargument
+ + ( token("special", S(".:")) * optionalspace * token("user", validword) )^1
+ )^-1
local identifier = token("default", validword)
* ( optionalspace * token("special", S(".:")) * optionalspace * (
diff --git a/context/data/scite/context/lexers/scite-context-lexer-mps.lua b/context/data/scite/context/lexers/scite-context-lexer-mps.lua
index fa335eb3f..1c87ea6d0 100644
--- a/context/data/scite/context/lexers/scite-context-lexer-mps.lua
+++ b/context/data/scite/context/lexers/scite-context-lexer-mps.lua
@@ -10,7 +10,7 @@ local global, string, table, lpeg = _G, string, table, lpeg
local P, R, S, V = lpeg.P, lpeg.R, lpeg.S, lpeg.V
local type = type
-local lexer = require("lexer")
+local lexer = require("scite-context-lexer")
local context = lexer.context
local patterns = context.patterns
@@ -98,7 +98,8 @@ local primitive = token("primitive", exact_match(metapostprimitives))
local identifier = token("default", cstoken^1)
local number = token("number", number)
local grouping = token("grouping", S("()[]{}")) -- can be an option
-local special = token("special", S("#()[]{}<>=:\"")) -- or else := <> etc split
+local suffix = token("number", P("#@") + P("@#") + P("#"))
+local special = token("special", P("#@") + P("@#") + S("#()[]{}<>=:\"")) -- or else := <> etc split
local texlike = token("warning", P("\\") * cstokentex^1)
local extra = token("extra", P("+-+") + P("++") + S("`~%^&_-+*/\'|\\"))
@@ -134,6 +135,7 @@ metafunlexer._rules = {
{ "primitive", primitive },
{ "luacall", luacall },
{ "texstuff", texstuff },
+ { "suffix", suffix },
{ "identifier", identifier },
{ "number", number },
{ "quoted", quoted },
diff --git a/context/data/scite/context/lexers/scite-context-lexer-pdf-object.lua b/context/data/scite/context/lexers/scite-context-lexer-pdf-object.lua
index 1fb95838a..155a9bd51 100644
--- a/context/data/scite/context/lexers/scite-context-lexer-pdf-object.lua
+++ b/context/data/scite/context/lexers/scite-context-lexer-pdf-object.lua
@@ -10,7 +10,7 @@ local info = {
local P, R, S, C, V = lpeg.P, lpeg.R, lpeg.S, lpeg.C, lpeg.V
-local lexer = require("lexer")
+local lexer = require("scite-context-lexer")
local context = lexer.context
local patterns = context.patterns
diff --git a/context/data/scite/context/lexers/scite-context-lexer-pdf-xref.lua b/context/data/scite/context/lexers/scite-context-lexer-pdf-xref.lua
index 7097c41a6..14ba5296b 100644
--- a/context/data/scite/context/lexers/scite-context-lexer-pdf-xref.lua
+++ b/context/data/scite/context/lexers/scite-context-lexer-pdf-xref.lua
@@ -10,7 +10,7 @@ local info = {
local P, R = lpeg.P, lpeg.R
-local lexer = require("lexer")
+local lexer = require("scite-context-lexer")
local context = lexer.context
local patterns = context.patterns
diff --git a/context/data/scite/context/lexers/scite-context-lexer-pdf.lua b/context/data/scite/context/lexers/scite-context-lexer-pdf.lua
index f8e4e7380..0fd238d63 100644
--- a/context/data/scite/context/lexers/scite-context-lexer-pdf.lua
+++ b/context/data/scite/context/lexers/scite-context-lexer-pdf.lua
@@ -6,12 +6,12 @@ local info = {
license = "see context related readme files",
}
--- pdf is normally startic .. i.e. not edited so we don't really
+-- pdf is normally static .. i.e. not edited so we don't really
-- need embedded lexers.
local P, R, S, V = lpeg.P, lpeg.R, lpeg.S, lpeg.V
-local lexer = require("lexer")
+local lexer = require("scite-context-lexer")
local context = lexer.context
local patterns = context.patterns
diff --git a/context/data/scite/context/lexers/scite-context-lexer-sql.lua b/context/data/scite/context/lexers/scite-context-lexer-sql.lua
index 62f0fa820..cf0a03331 100644
--- a/context/data/scite/context/lexers/scite-context-lexer-sql.lua
+++ b/context/data/scite/context/lexers/scite-context-lexer-sql.lua
@@ -8,7 +8,7 @@ local info = {
local P, R, S = lpeg.P, lpeg.R, lpeg.S
-local lexer = require("lexer")
+local lexer = require("scite-context-lexer")
local context = lexer.context
local patterns = context.patterns
diff --git a/context/data/scite/context/lexers/scite-context-lexer-tex-web.lua b/context/data/scite/context/lexers/scite-context-lexer-tex-web.lua
index 5d8859c26..88499a9c2 100644
--- a/context/data/scite/context/lexers/scite-context-lexer-tex-web.lua
+++ b/context/data/scite/context/lexers/scite-context-lexer-tex-web.lua
@@ -6,12 +6,12 @@ local info = {
license = "see context related readme files",
}
-local lexer = require("lexer")
-local context = lexer.context
-local patterns = context.patterns
+local lexer = require("scite-context-lexer")
+local context = lexer.context
+local patterns = context.patterns
-local texweblexer = lexer.new("tex-web","scite-context-lexer-tex")
-local texlexer = lexer.load("scite-context-lexer-tex")
+local texweblexer = lexer.new("tex-web","scite-context-lexer-tex")
+local texlexer = lexer.load("scite-context-lexer-tex")
-- can probably be done nicer now, a bit of a hack
diff --git a/context/data/scite/context/lexers/scite-context-lexer-tex.lua b/context/data/scite/context/lexers/scite-context-lexer-tex.lua
index 027c8767e..4787263a3 100644
--- a/context/data/scite/context/lexers/scite-context-lexer-tex.lua
+++ b/context/data/scite/context/lexers/scite-context-lexer-tex.lua
@@ -31,7 +31,7 @@ local P, R, S, V, C, Cmt, Cp, Cc, Ct = lpeg.P, lpeg.R, lpeg.S, lpeg.V, lpeg.C, l
local type, next = type, next
local find, match, lower, upper = string.find, string.match, string.lower, string.upper
-local lexer = require("lexer")
+local lexer = require("scite-context-lexer")
local context = lexer.context
local patterns = context.patterns
local inform = context.inform
@@ -144,17 +144,20 @@ local validminimum = 3
-- fails (empty loop message) ... latest lpeg issue?
+-- todo: Make sure we only do this at the beginning .. a pitty that we
+-- can't store a state .. now is done too often.
+
local knownpreamble = Cmt(P("% "), function(input,i,_) -- todo : utfbomb, was #P("% ")
if i < 10 then
validwords, validminimum = false, 3
- local s, e, word = find(input,"^(.+)[\n\r]",i) -- combine with match
+ local s, e, word = find(input,"^(.-)[\n\r]",i) -- combine with match
if word then
- local interface = match(word,"interface=([a-z]+)")
+ local interface = match(word,"interface=([a-z][a-z]+)")
if interface and #interface == 2 then
inform("enabling context user interface '%s'",interface)
currentcommands = commands[interface] or commands.en or { }
end
- local language = match(word,"language=([a-z]+)")
+ local language = match(word,"language=([a-z][a-z]+)")
validwords, validminimum = setwordlist(language)
end
end
diff --git a/context/data/scite/context/lexers/scite-context-lexer-txt.lua b/context/data/scite/context/lexers/scite-context-lexer-txt.lua
index 43eec2c35..8ecfff7cb 100644
--- a/context/data/scite/context/lexers/scite-context-lexer-txt.lua
+++ b/context/data/scite/context/lexers/scite-context-lexer-txt.lua
@@ -9,7 +9,7 @@ local info = {
local P, S, Cmt, Cp = lpeg.P, lpeg.S, lpeg.Cmt, lpeg.Cp
local find, match = string.find, string.match
-local lexer = require("lexer")
+local lexer = require("scite-context-lexer")
local context = lexer.context
local patterns = context.patterns
diff --git a/context/data/scite/context/lexers/scite-context-lexer-web-snippets.lua b/context/data/scite/context/lexers/scite-context-lexer-web-snippets.lua
index 196a545bc..3cef71739 100644
--- a/context/data/scite/context/lexers/scite-context-lexer-web-snippets.lua
+++ b/context/data/scite/context/lexers/scite-context-lexer-web-snippets.lua
@@ -8,7 +8,7 @@ local info = {
local P, R, S, C, Cg, Cb, Cs, Cmt, lpegmatch = lpeg.P, lpeg.R, lpeg.S, lpeg.C, lpeg.Cg, lpeg.Cb, lpeg.Cs, lpeg.Cmt, lpeg.match
-local lexer = require("lexer")
+local lexer = require("scite-context-lexer")
local context = lexer.context
local patterns = context.patterns
diff --git a/context/data/scite/context/lexers/scite-context-lexer-web.lua b/context/data/scite/context/lexers/scite-context-lexer-web.lua
index 86ae76644..81a6f90df 100644
--- a/context/data/scite/context/lexers/scite-context-lexer-web.lua
+++ b/context/data/scite/context/lexers/scite-context-lexer-web.lua
@@ -8,7 +8,7 @@ local info = {
local P, R, S = lpeg.P, lpeg.R, lpeg.S
-local lexer = require("lexer")
+local lexer = require("scite-context-lexer")
local context = lexer.context
local patterns = context.patterns
diff --git a/context/data/scite/context/lexers/scite-context-lexer-xml-cdata.lua b/context/data/scite/context/lexers/scite-context-lexer-xml-cdata.lua
index e6276da0d..f5ca86cb2 100644
--- a/context/data/scite/context/lexers/scite-context-lexer-xml-cdata.lua
+++ b/context/data/scite/context/lexers/scite-context-lexer-xml-cdata.lua
@@ -8,7 +8,7 @@ local info = {
local P = lpeg.P
-local lexer = require("lexer")
+local lexer = require("scite-context-lexer")
local context = lexer.context
local patterns = context.patterns
diff --git a/context/data/scite/context/lexers/scite-context-lexer-xml-comment.lua b/context/data/scite/context/lexers/scite-context-lexer-xml-comment.lua
index b5b3fefe0..40de8f603 100644
--- a/context/data/scite/context/lexers/scite-context-lexer-xml-comment.lua
+++ b/context/data/scite/context/lexers/scite-context-lexer-xml-comment.lua
@@ -8,7 +8,7 @@ local info = {
local P = lpeg.P
-local lexer = require("lexer")
+local lexer = require("scite-context-lexer")
local context = lexer.context
local patterns = context.patterns
diff --git a/context/data/scite/context/lexers/scite-context-lexer-xml-script.lua b/context/data/scite/context/lexers/scite-context-lexer-xml-script.lua
index bbb938dc5..a1b717a6a 100644
--- a/context/data/scite/context/lexers/scite-context-lexer-xml-script.lua
+++ b/context/data/scite/context/lexers/scite-context-lexer-xml-script.lua
@@ -8,7 +8,7 @@ local info = {
local P = lpeg.P
-local lexer = require("lexer")
+local lexer = require("scite-context-lexer")
local context = lexer.context
local patterns = context.patterns
diff --git a/context/data/scite/context/lexers/scite-context-lexer-xml.lua b/context/data/scite/context/lexers/scite-context-lexer-xml.lua
index 77c89b1d6..bbdb3febc 100644
--- a/context/data/scite/context/lexers/scite-context-lexer-xml.lua
+++ b/context/data/scite/context/lexers/scite-context-lexer-xml.lua
@@ -17,7 +17,7 @@ local P, R, S, C, Cmt, Cp = lpeg.P, lpeg.R, lpeg.S, lpeg.C, lpeg.Cmt, lpeg.Cp
local type = type
local match, find = string.match, string.find
-local lexer = require("lexer")
+local lexer = require("scite-context-lexer")
local context = lexer.context
local patterns = context.patterns
diff --git a/context/data/scite/context/lexers/scite-context-lexer.lua b/context/data/scite/context/lexers/scite-context-lexer.lua
index 4d401ac7b..af21461b9 100644
--- a/context/data/scite/context/lexers/scite-context-lexer.lua
+++ b/context/data/scite/context/lexers/scite-context-lexer.lua
@@ -8,11 +8,6 @@ local info = {
}
--- todo: hook into context resolver etc
--- todo: only old api in lexers, rest in context subnamespace
--- todo: make sure we can run in one state .. copies or shared?
--- todo: auto-nesting
-
if lpeg.setmaxstack then lpeg.setmaxstack(1000) end
local log = false
@@ -27,74 +22,118 @@ local inspect = false -- can save some 15% (maybe easier on scintilla)
-- GET GOING
--
--- You need to copy this file over lexer.lua. In principle other lexers could
--- work too but not now. Maybe some day. All patterns will move into the patterns
--- name space. I might do the same with styles. If you run an older version of
--- SciTE you can take one of the archives. Pre 3.41 versions can just be copied
--- to the right path, as there we still use part of the normal lexer.
+-- You need to copy this file over lexer.lua. In principle other lexers could work
+-- too but not now. Maybe some day. All patterns will move into the patterns name
+-- space. I might do the same with styles. If you run an older version of SciTE you
+-- can take one of the archives. Pre 3.41 versions can just be copied to the right
+-- path, as there we still use part of the normal lexer. Below we mention some
+-- issues with different versions of SciTE. We try to keep up with changes but best
+-- check careful if the version that yuou install works as expected because SciTE
+-- and the scintillua dll need to be in sync.
--
-- REMARK
--
--- We started using lpeg lexing as soon as it came available. Because we had
--- rather demanding files an dalso wanted to use nested lexers, we ended up with
--- our own variant (more robust and faster). As a consequence successive versions
--- had to be adapted to changes in the (still unstable) api. In addition to
--- lexing we also have spell checking and such.
+-- We started using lpeg lexing as soon as it came available. Because we had rather
+-- demanding files and also wanted to use nested lexers, we ended up with our own
+-- variant. At least at that time this was more robust and also much faster (as we
+-- have some pretty large Lua data files and also work with large xml files). As a
+-- consequence successive versions had to be adapted to changes in the (at that time
+-- still unstable) api. In addition to lexing we also have spell checking and such.
+-- Around version 3.60 things became more stable so I don't expect to change much.
+--
+-- LEXING
+--
+-- When pc's showed up we wrote our own editor (texedit) in MODULA 2. It was fast,
+-- had multiple overlapping (text) windows, could run in the at most 1M memory at
+-- that time, etc. The realtime file browsing with lexing that we had at that time
+-- is still on my current wish list. The color scheme and logic that we used related
+-- to the logic behind the ConTeXt user interface that evolved.
+--
+-- Later I rewrote the editor in perl/tk. I don't like the perl syntax but tk
+-- widgets are very powerful and hard to beat. In fact, TextAdept reminds me of
+-- that: wrap your own interface around a framework (tk had an edit control that one
+-- could control completely not that different from scintilla). Last time I checked
+-- it still ran fine so I might try to implement something like its file handling in
+-- TextAdept.
+--
+-- In the end I settled for SciTE for which I wrote TeX and MetaPost lexers that
+-- could handle keyword sets. With respect to lexing (syntax highlighting) ConTeXt
+-- has a long history, if only because we need it for manuals. Anyway, in the end we
+-- arrived at lpeg based lexing (which is quite natural as we have lots of lpeg
+-- usage in ConTeXt). The basic color schemes haven't changed much. The most
+-- prominent differences are the nested lexers.
--
--- STATUS
+-- In the meantime I made the lexer suitable for typesetting sources which was no
+-- big deal as we already had that in place (ConTeXt used lpeg from the day it
+-- showed up so we have several lexing options there too).
--
--- todo: maybe use a special stripped version of the dll (stable api)
--- todo: play with hotspot and other properties
--- wish: access to all scite properties and in fact integrate in scite
--- todo: add proper tracing and so .. not too hard as we can run on mtxrun
--- todo: get rid of these lexers.STYLE_XX and lexers.XX (hide such details)
+-- Keep in mind that in ConTeXt (typesetting) lexing can follow several approached:
+-- line based (which is handy for verbatim mode), syntax mode (which is nice for
+-- tutorials), and tolerant mode (so that one can also show bad examples or errors).
+-- These demands can clash.
--
-- HISTORY
--
+-- The remarks below are more for myself so that I keep track of changes in the
+-- way we adapt to the changes in the scintillua and scite.
+--
-- The fold and lex functions are copied and patched from original code by Mitchell
--- (see lexer.lua). All errors are mine. The ability to use lpeg is a real nice
--- adition and a brilliant move. The code is a byproduct of the (mainly Lua based)
--- textadept (still a rapidly moving target) that unfortunately misses a realtime
--- output pane. On the other hand, SciTE is somewhat crippled by the fact that we
--- cannot pop in our own (language dependent) lexer into the output pane (somehow
--- the errorlist lexer is hard coded into the editor). Hopefully that will change
--- some day.
+-- (see lexer.lua) in the scintillua distribution. So whatever I say below, assume
+-- that all errors are mine. The ability to use lpeg in scintilla is a real nice
+-- addition and a brilliant move. The code is a byproduct of the (mainly Lua based)
+-- TextAdept which at the time I ran into it was a rapidly moving target so I
+-- decided to stick ot SciTE. When I played with it, it had no realtime output pane
+-- although that seems to be dealt with now (2017). I need to have a look at it in
+-- more detail but a first test again made the output hang and it was a bit slow too
+-- (and I also want the log pane as SciTE has it, on the right, in view). So, for
+-- now I stick to SciTE even when it's somewhat crippled by the fact that we cannot
+-- hook our own (language dependent) lexer into the output pane (somehow the
+-- errorlist lexer is hard coded into the editor). Hopefully that will change some
+-- day. The ConTeXt distribution has cmd runner for textdept that will plug in the
+-- lexers discussed here as well as a dedicated runner. Considere it an experiment.
--
--- Starting with SciTE version 3.20 there is an issue with coloring. As we still
--- lack a connection with SciTE itself (properties as well as printing to the log
--- pane) and we cannot trace this (on windows). As far as I can see, there are no
--- fundamental changes in lexer.lua or LexLPeg.cxx so it must be in Scintilla
--- itself. So for the moment I stick to 3.10. Indicators are: no lexing of 'next'
--- and 'goto <label>' in the Lua lexer and no brace highlighting either. Interesting
--- is that it does work ok in the cld lexer (so the Lua code is okay). Also the fact
--- that char-def.lua lexes fast is a signal that the lexer quits somewhere halfway.
--- Maybe there are some hard coded limitations on the amount of styles and/or length
--- if names.
+-- The basic code hasn't changed much but we had to adapt a few times to changes in
+-- the api and/or work around bugs. Starting with SciTE version 3.20 there was an
+-- issue with coloring. We still lacked a connection with SciTE itself (properties
+-- as well as printing to the log pane) and we could not trace this (on windows).
+-- However on unix we can see messages! As far as I can see, there are no
+-- fundamental changes in lexer.lua or LexLPeg.cxx so it must be/have been in
+-- Scintilla itself. So we went back to 3.10. Indicators of issues are: no lexing of
+-- 'next' and 'goto <label>' in the Lua lexer and no brace highlighting either.
+-- Interesting is that it does work ok in the cld lexer (so the Lua code is okay).
+-- All seems to be ok again in later versions, so, when you update best check first
+-- and just switch back to an older version as normally a SciTE update is not
+-- critital. When char-def.lua lexes real fast this is a signal that the lexer quits
+-- somewhere halfway. Maybe there are some hard coded limitations on the amount of
+-- styles and/or length of names.
--
--- After checking 3.24 and adapting to the new lexer tables things are okay again.
--- So, this version assumes 3.24 or higher. In 3.24 we have a different token
+-- Anyway, after checking 3.24 and adapting to the new lexer tables things are okay
+-- again. So, this version assumes 3.24 or higher. In 3.24 we have a different token
-- result, i.e. no longer a { tag, pattern } but just two return values. I didn't
--- check other changes but will do that when I run into issues. I had optimized
--- these small tables by hashing which was more efficient but this is no longer
--- needed. For the moment we keep some of that code around as I don't know what
--- happens in future versions.
+-- check other changes but will do that when I run into issues. I had already
+-- optimized these small tables by hashing which was much more efficient (and maybe
+-- even more efficient than the current approach) but this is no longer needed. For
+-- the moment we keep some of that code around as I don't know what happens in
+-- future versions. I'm anyway still happy with this kind of lexing.
--
-- In 3.31 another major change took place: some helper constants (maybe they're no
-- longer constants) and functions were moved into the lexer modules namespace but
-- the functions are assigned to the Lua module afterward so we cannot alias them
--- beforehand. We're probably getting close to a stable interface now. I've
--- considered making a whole copy and patch the other functions too as we need an
--- extra nesting model. However, I don't want to maintain too much. An unfortunate
--- change in 3.03 is that no longer a script can be specified. This means that
--- instead of loading the extensions via the properties file, we now need to load
--- them in our own lexers, unless of course we replace lexer.lua completely (which
--- adds another installation issue).
+-- beforehand. We're probably getting close to a stable interface now. At that time
+-- for the first time I considered making a whole copy and patch the other functions
+-- too as we need an extra nesting model. However, I don't want to maintain too
+-- much. An unfortunate change in 3.03 is that no longer a script can be specified.
+-- This means that instead of loading the extensions via the properties file, we now
+-- need to load them in our own lexers, unless of course we replace lexer.lua
+-- completely (which adds another installation issue).
--
-- Another change has been that _LEXERHOME is no longer available. It looks like
-- more and more functionality gets dropped so maybe at some point we need to ship
-- our own dll/so files. For instance, I'd like to have access to the current
--- filename and other scite properties. For instance, we could cache some info with
--- each file, if only we had knowledge of what file we're dealing with.
+-- filename and other SciTE properties. We could then cache some info with each
+-- file, if only we had knowledge of what file we're dealing with. This all makes a
+-- nice installation more complex and (worse) makes it hard to share files between
+-- different editors usign s similar directory structure.
--
-- For huge files folding can be pretty slow and I do have some large ones that I
-- keep open all the time. Loading is normally no ussue, unless one has remembered
@@ -104,14 +143,16 @@ local inspect = false -- can save some 15% (maybe easier on scintilla)
-- 2+ seconds. A 6 second load is quite ok for me. The changed lexer table structure
-- (no subtables) brings loading down to a few seconds.
--
--- When the lexer path is copied to the textadept lexer path, and the theme
--- definition to theme path (as lexer.lua), the lexer works there as well. When I
+-- When the lexer path is copied to the TextAdept lexer path, and the theme
+-- definition to theme path (as lexer.lua), the lexer works there as well. Although
+-- ... when I decided to check the state of TextAdept I had to adapt some loader
+-- code. The solution is not pretty but works and also permits overloading. When I
-- have time and motive I will make a proper setup file to tune the look and feel a
--- bit and associate suffixes with the context lexer. The textadept editor has a
--- nice style tracing option but lacks the tabs for selecting files that scite has.
--- It also has no integrated run that pipes to the log pane. Interesting is that the
--- jit version of textadept crashes on lexing large files (and does not feel faster
--- either; maybe a side effect of known limitations).
+-- bit more than we do now. The TextAdept editor nwo has tabs and a console so it
+-- has become more useable for me (it's still somewhat slower than SciTE).
+-- Interesting is that the jit version of TextAdept crashes on lexing large files
+-- (and does not feel faster either; maybe a side effect of known limitations as we
+-- know that Luajit is more limited than stock Lua).
--
-- Function load(lexer_name) starts with _lexers.WHITESPACE = lexer_name ..
-- '_whitespace' which means that we need to have it frozen at the moment we load
@@ -124,85 +165,129 @@ local inspect = false -- can save some 15% (maybe easier on scintilla)
-- lexers, especially if they are larger than a view. This is the hardest part of
-- getting things right.
--
--- It's a pitty that there is no scintillua library for the OSX version of scite.
--- Even better would be to have the scintillua library as integral part of scite as
+-- It's a pitty that there is no scintillua library for the OSX version of SciTE.
+-- Even better would be to have the scintillua library as integral part of SciTE as
-- that way I could use OSX alongside windows and linux (depending on needs). Also
--- nice would be to have a proper interface to scite then because currently the
--- lexer is rather isolated and the lua version does not provide all standard
--- libraries. It would also be good to have lpeg support in the regular scite lua
--- extension (currently you need to pick it up from someplace else).
+-- nice would be to have a proper interface to SciTE then because currently the
+-- lexer is rather isolated and the Lua version does not provide all standard
+-- libraries. It would also be good to have lpeg support in the regular SciTE Lua
+-- extension (currently you need to pick it up from someplace else). I keep hoping.
--
--- With 3.41 the interface changed again so it gets time to look into the C++ code
--- and consider compiling and patching myself. Loading is more complicated not as
--- the lexer gets loaded automatically so we have little control over extending the
--- code now. After a few days trying all kind of solutions I decided to follow a
--- different approach: drop in a complete replacement. This of course means that I
--- need to keep track of even more changes (which for sure will happen) but at least
--- I get rid of interferences. The api (lexing and configuration) is simply too
--- unstable across versions. Maybe in a few years things have stabelized. (Or maybe
--- it's not really expected that one writes lexers at all.) A side effect is that I
--- now no longer will use shipped lexers but just the built-in ones. Not that it
--- matters much as the context lexers cover what I need (and I can always write
--- more).
+-- With 3.41 the interface changed again so it became time to look into the C++ code
+-- and consider compiling and patching myself, something that I like to avoid.
+-- Loading is more complicated now as the lexer gets loaded automatically so we have
+-- little control over extending the code now. After a few days trying all kind of
+-- solutions I decided to follow a different approach: drop in a complete
+-- replacement. This of course means that I need to keep track of even more changes
+-- (which for sure will happen) but at least I get rid of interferences. Till 3.60
+-- the api (lexing and configuration) was simply too unstable across versions which
+-- is a pitty because we expect authors to install SciTE without hassle. Maybe in a
+-- few years things will have stabelized. Maybe it's also not really expected that
+-- one writes lexers at all. A side effect is that I now no longer will use shipped
+-- lexers for languages that I made no lexer for, but just the built-in ones in
+-- addition to the ConTeXt lpeg lexers. Not that it matters much as the ConTeXt
+-- lexers cover what I need (and I can always write more). For editing TeX files one
+-- only needs a limited set of lexers (TeX, MetaPost, Lua, BibTeX, C/W, PDF, SQL,
+-- etc). I can add more when I want.
--
-- In fact, the transition to 3.41 was triggered by an unfateful update of Ubuntu
-- which left me with an incompatible SciTE and lexer library and updating was not
-- possible due to the lack of 64 bit libraries. We'll see what the future brings.
+-- For now I can use SciTE under wine on linux. The fact that scintillua ships
+-- independently is a showstopper.
--
-- Promissing is that the library now can use another Lua instance so maybe some day
-- it will get properly in SciTE and we can use more clever scripting.
--
--- In some lexers we use embedded ones even if we could do it directly, The reason is
--- that when the end token is edited (e.g. -->), backtracking to the space before the
--- begin token (e.g. <!--) results in applying the surrounding whitespace which in
--- turn means that when the end token is edited right, backtracking doesn't go back.
--- One solution (in the dll) would be to backtrack several space categories. After all,
--- lexing is quite fast (applying the result is much slower).
+-- In some lexers we use embedded ones even if we could do it directly, The reason
+-- is that when the end token is edited (e.g. -->), backtracking to the space before
+-- the begin token (e.g. <!--) results in applying the surrounding whitespace which
+-- in turn means that when the end token is edited right, backtracking doesn't go
+-- back. One solution (in the dll) would be to backtrack several space categories.
+-- After all, lexing is quite fast (applying the result is much slower).
--
--- For some reason the first blob of text tends to go wrong (pdf and web). It would be
--- nice to have 'whole doc' initial lexing. Quite fishy as it makes it impossible to
--- lex the first part well (for already opened documents) because only a partial
+-- For some reason the first blob of text tends to go wrong (pdf and web). It would
+-- be nice to have 'whole doc' initial lexing. Quite fishy as it makes it impossible
+-- to lex the first part well (for already opened documents) because only a partial
-- text is passed.
--
-- So, maybe I should just write this from scratch (assuming more generic usage)
--- because after all, the dll expects just tables, based on a string. I can then also
--- do some more aggressive resource sharing (needed when used generic).
+-- because after all, the dll expects just tables, based on a string. I can then
+-- also do some more aggressive resource sharing (needed when used generic).
--
--- I think that nested lexers are still bugged (esp over longer ranges). It never was
--- robust or maybe it's simply not meant for too complex cases. The 3.24 version was
--- probably the best so far. The fact that styles bleed between lexers even if their
--- states are isolated is an issue. Another issus is that zero characters in the
--- text passed to the lexer can mess things up (pdf files have them in streams).
+-- I think that nested lexers are still bugged (esp over longer ranges). It never
+-- was robust or maybe it's simply not meant for too complex cases (well, it
+-- probably *is* tricky material). The 3.24 version was probably the best so far.
+-- The fact that styles bleed between lexers even if their states are isolated is an
+-- issue. Another issus is that zero characters in the text passed to the lexer can
+-- mess things up (pdf files have them in streams).
--
-- For more complex 'languages', like web or xml, we need to make sure that we use
-- e.g. 'default' for spacing that makes up some construct. Ok, we then still have a
-- backtracking issue but less.
--
+-- Good news for some ConTeXt users: there is now a scintillua plugin for notepad++
+-- and we ship an ini file for that editor with some installation instructions
+-- embedded. Also, TextAdept has a console so that we can run realtime. The spawner
+-- is still not perfect (sometimes hangs) but it was enough reason to spend time on
+-- making our lexer work with TextAdept and create a setup.
+--
+-- TRACING
+--
+-- The advantage is that we now can check more easily with regular Lua(TeX). We can
+-- also use wine and print to the console (somehow stdout is intercepted there.) So,
+-- I've added a bit of tracing. Interesting is to notice that each document gets its
+-- own instance which has advantages but also means that when we are spellchecking
+-- we reload the word lists each time. (In the past I assumed a shared instance and
+-- took some precautions. But I can fix this.)
+--
-- TODO
--
--- I can make an export to context, but first I'll redo the code that makes the grammar,
--- as we only seem to need
+-- It would be nice if we could lods some ConTeXt Lua modules (the basic set) and
+-- then use resolvers and such.
--
--- lexer._TOKENSTYLES : table
--- lexer._CHILDREN : flag
--- lexer._EXTRASTYLES : table
--- lexer._GRAMMAR : flag
+-- The current lexer basics are still a mix between old and new. Maybe I should redo
+-- some more. This is probably easier in TextAdept than in SciTE.
--
--- lexers.load : function
--- lexers.lex : function
+-- We have to make sure we don't overload ConTeXt definitions when this code is used
+-- in ConTeXt. I still have to add some of the goodies that we have there in lexers
+-- into these.
--
--- So, if we drop compatibility with other lex definitions, we can make things simpler.
-
--- TRACING
+-- Maybe I should use a special stripped on the one hand and extended version of the
+-- dll (stable api) and at least add a bit more interfacing to scintilla.
+--
+-- I need to investigate if we can use the already built in Lua instance so that we
+-- can combine the power of lexing with extensions.
+--
+-- I need to play with hotspot and other properties like indicators (whatever they
+-- are).
+--
+-- I want to get rid of these lexers.STYLE_XX and lexers.XX things. This is possible
+-- when we give up compatibility. Generalize the helpers that I wrote for SciTE so
+-- that they also can be used TextAdept.
+--
+-- I can make an export to ConTeXt, but first I'll redo the code that makes the
+-- grammar, as we only seem to need
+--
+-- lexer._TOKENSTYLES : table
+-- lexer._CHILDREN : flag
+-- lexer._EXTRASTYLES : table
+-- lexer._GRAMMAR : flag
+--
+-- lexers.load : function
+-- lexers.lex : function
--
--- The advantage is that we now can check more easily with regular Lua. We can also
--- use wine and print to the console (somehow stdout is intercepted there.) So, I've
--- added a bit of tracing. Interesting is to notice that each document gets its own
--- instance which has advantages but also means that when we are spellchecking we
--- reload the word lists each time. (In the past I assumed a shared instance and took
--- some precautions.)
+-- So, if we drop compatibility with other lex definitions, we can make things
+-- simpler. However, in the meantime one can just do this:
+--
+-- context --extra=listing --scite [--compact --verycompact] somefile.tex
+--
+-- and get a printable document. So, this todo is a bit obsolete.
+--
+-- Properties is an ugly mess ... due to chages in the interface we're now left
+-- with some hybrid that sort of works ok
--- todo: make sure we don't overload context definitions when used in context
+-- textadept: buffer:colourise(0,-1)
local lpeg = require("lpeg")
@@ -213,7 +298,9 @@ local type, next, setmetatable, rawset, tonumber, tostring = type, next, setmeta
local R, P, S, V, C, Cp, Cs, Ct, Cmt, Cc, Cf, Cg, Carg = lpeg.R, lpeg.P, lpeg.S, lpeg.V, lpeg.C, lpeg.Cp, lpeg.Cs, lpeg.Ct, lpeg.Cmt, lpeg.Cc, lpeg.Cf, lpeg.Cg, lpeg.Carg
local lpegmatch = lpeg.match
+local usage = (textadept and "textadept") or (resolvers and "context") or "scite"
local nesting = 0
+local print = textadept and ui and ui.print or print
local function report(fmt,str,...)
if log then
@@ -278,7 +365,6 @@ context.report = report
context.inform = inform
lexers.LEXERPATH = package.path -- can be multiple paths separated by ;
-lexers.LEXERPATH = "./?.lua" -- good enough, will be set anyway (was
if resolvers then
-- todo: set LEXERPATH
@@ -408,9 +494,9 @@ local function check_main_properties()
-- doing a comparison
return tonumber(lexers.property[k]) or 0 -- tostring removed
end,
- __newindex = function(t,k,v)
- report("properties are read-only, '%s' is not changed",k)
- end,
+ -- __newindex = function(t,k,v)
+ -- report("properties are read-only, '%s' is not changed",k)
+ -- end,
})
end
end
@@ -440,7 +526,7 @@ lexers.property_expanded = setmetatable({ }, {
-- end
-- We still want our own properties (as it keeps changing so better play
--- safe from now on):
+-- safe from now on). At some point I can freeze them.
local function check_properties(lexer)
if lexer.properties then
@@ -541,13 +627,41 @@ end
-- styleset is not needed any more as we predefine all styles as defaults
-- anyway (too bug sensitive otherwise).
+local function tocolors(colors)
+ local colorset = { }
+ local property_int = lexers.property_int or { }
+ for k, v in next, colors do
+ if type(v) == "table" then
+ local r, g, b = v[1], v[2], v[3]
+ if r and g and b then
+ v = tonumber(format("%02X%02X%02X",b,g,r),16) or 0 -- hm
+ elseif r then
+ v = tonumber(format("%02X%02X%02X",r,r,r),16) or 0
+ else
+ v = 0
+ end
+ end
+ colorset[k] = v
+ property_int["color."..k] = v
+ end
+ return colorset
+end
+
local function toproperty(specification)
local serialized = { }
for key, value in next, specification do
if value == true then
serialized[#serialized+1] = key
elseif type(value) == "table" then
- serialized[#serialized+1] = key .. ":" .. "#" .. value[1] .. value[2] .. value[3]
+ local r, g, b = value[1], value[2], value[3]
+ if r and g and b then
+ value = format("#%02X%02X%02X",r,g,b) or "#000000"
+ elseif r then
+ value = format("#%02X%02X%02X",r,r,r) or "#000000"
+ else
+ value = "#000000"
+ end
+ serialized[#serialized+1] = key .. ":" .. value
else
serialized[#serialized+1] = key .. ":" .. tostring(value)
end
@@ -568,27 +682,43 @@ end
context.toproperty = toproperty
context.tostyles = tostyles
+context.tocolors = tocolors
-- If we had one instance/state of Lua as well as all regular libraries
-- preloaded we could use the context base libraries. So, let's go poor-
-- mans solution now.
function context.registerstyles(styles)
- local styleset = tostyles(styles)
+ local styleset = tostyles(styles)
context.styles = styles
context.styleset = styleset
- if trace then
- if detail then
- local t, n = sortedkeys(styleset)
- local template = " %-" .. n .. "s : %s"
- report("initializing styleset:")
- for i=1,#t do
- local k = t[i]
- report(template,k,styleset[k])
- end
- else
- report("initializing styleset")
+ if detail then
+ local t, n = sortedkeys(styleset)
+ local template = " %-" .. n .. "s : %s"
+ report("initializing styleset:")
+ for i=1,#t do
+ local k = t[i]
+ report(template,k,styleset[k])
end
+ elseif trace then
+ report("initializing styleset")
+ end
+end
+
+function context.registercolors(colors) -- needed for textadept
+ local colorset = tocolors(colors)
+ context.colors = colors
+ context.colorset = colorset
+ if detail then
+ local t, n = sortedkeys(colorset)
+ local template = " %-" .. n .. "s : %i"
+ report("initializing colorset:")
+ for i=1,#t do
+ local k = t[i]
+ report(template,k,colorset[k])
+ end
+ elseif trace then
+ report("initializing colorset")
end
end
@@ -604,19 +734,49 @@ local locations = {
"./data", -- whatever
}
-local function collect(name)
- local root = gsub(lexers.LEXERPATH or ".","/.-lua$","") .. "/" -- this is a horrible hack
- -- report("module '%s' locating '%s'",tostring(lexers),name)
- for i=1,#locations do
- local fullname = root .. locations[i] .. "/" .. name .. ".lua" -- so we can also check for .luc
- if trace then
- report("attempt to locate '%s'",fullname)
- end
- local okay, result = pcall(function () return dofile(fullname) end)
- if okay then
- return result, fullname
+-- local function collect(name)
+-- local root = gsub(lexers.LEXERPATH or ".","/.-lua$","") .. "/" -- this is a horrible hack
+-- -- report("module '%s' locating '%s'",tostring(lexers),name)
+-- for i=1,#locations do
+-- local fullname = root .. locations[i] .. "/" .. name .. ".lua" -- so we can also check for .luc
+-- if trace then
+-- report("attempt to locate '%s'",fullname)
+-- end
+-- local okay, result = pcall(function () return dofile(fullname) end)
+-- if okay then
+-- return result, fullname
+-- end
+-- end
+-- end
+
+local collect
+
+if usage == "context" then
+
+ collect = function(name)
+ return require(name), name
+ end
+
+else
+
+ collect = function(name)
+ local rootlist = lexers.LEXERPATH or "."
+ for root in gmatch(rootlist,"[^;]+") do
+ local root = gsub(root,"/[^/]-lua$","")
+ for i=1,#locations do
+ local fullname = root .. "/" .. locations[i] .. "/" .. name .. ".lua" -- so we can also check for .luc
+ if trace then
+ report("attempt to locate '%s'",fullname)
+ end
+ local okay, result = pcall(function () return dofile(fullname) end)
+ if okay then
+ return result, fullname
+ end
+ end
end
+ -- return require(name), name
end
+
end
function context.loadluafile(name)
@@ -627,7 +787,9 @@ function context.loadluafile(name)
end
return data, fullname
end
- report("unable to load lua file '%s'",name)
+ if not textadept then
+ report("unable to load lua file '%s'",name)
+ end
end
-- in fact we could share more as we probably process the data but then we need
@@ -647,7 +809,9 @@ function context.loaddefinitions(name)
end
local data, fullname = collect(name)
if not data then
- report("unable to load definition file '%s'",name)
+ if not textadept then
+ report("unable to load definition file '%s'",name)
+ end
data = false
elseif trace then
report("definition file '%s' has been loaded",fullname)
@@ -880,7 +1044,9 @@ function context.setwordlist(tag,limit) -- returns hash (lowercase keys and orig
if not list then
list = context.loaddefinitions("spell-" .. tag)
if not list or type(list) ~= "table" then
- report("invalid spell checking list for '%s'",tag)
+ if not textadept then
+ report("invalid spell checking list for '%s'",tag)
+ end
list = { words = false, min = 3 }
else
list.words = list.words or false
@@ -1720,6 +1886,11 @@ function context.loadlexer(filename,namespace)
return lexer
end
+-- I probably need to check this occasionally with the original as I've messed around a bit
+-- in the past to get nesting working well as one can hit the max number of styles, get
+-- clashes due to fuzzy inheritance etc. so there is some interplay with the other patched
+-- code.
+
function context.embed_lexer(parent, child, start_rule, end_rule) -- mostly the same as the original
local embeddedrules = child._EMBEDDEDRULES
if not embeddedrules then
@@ -1766,6 +1937,30 @@ function context.embed_lexer(parent, child, start_rule, end_rule) -- mostly the
tokenstyles[token] = style
end
end
+ -- new, a bit redone, untested, no clue yet what it is for
+ local parentsymbols = parent._foldsymbols
+ local childsymbols = child ._foldsymbols
+ if not parentsymbols then
+ parentsymbols = { }
+ parent._foldsymbols = parentsymbols
+ end
+ if childsymbols then
+ for token, symbols in next, childsymbols do
+ local tokensymbols = parentsymbols[token]
+ if not tokensymbols then
+ tokensymbols = { }
+ parentsymbols[token] = tokensymbols
+ end
+ for k, v in next, symbols do
+ if type(k) == 'number' then
+ tokensymbols[#tokensymbols + 1] = v
+ elseif not tokensymbols[k] then
+ tokensymbols[k] = v
+ end
+ end
+ end
+ end
+ --
child._lexer = parent
parent_lexer = parent
end
@@ -1792,13 +1987,23 @@ lexers.inform = context.inform
do
- local floor = math and math.floor
- local char = string.char
+ local floor = math and math.floor
+ local char = string.char
+ local format = format
+ local tonumber = tonumber
if not floor then
- floor = function(n)
- return tonumber(format("%d",n))
+ if tonumber(string.match(_VERSION,"%d%.%d")) < 5.3 then
+ floor = function(n)
+ return tonumber(format("%d",n))
+ end
+ else
+ -- 5.3 has a mixed number system and format %d doesn't work with
+ -- floats any longer ... no fun
+ floor = function(n)
+ return (n - n % 1)
+ end
end
math = math or { }
diff --git a/context/data/scite/context/lexers/themes/scite-context-theme.lua b/context/data/scite/context/lexers/themes/scite-context-theme.lua
index b0c63fe39..f746c3d09 100644
--- a/context/data/scite/context/lexers/themes/scite-context-theme.lua
+++ b/context/data/scite/context/lexers/themes/scite-context-theme.lua
@@ -31,120 +31,129 @@ local info = {
-- changeable notchangeable (this way we can protect styles, e.g. preamble?)
-- hotspot nothotspot
-local font_name = 'Dejavu Sans Mono'
-local font_size = '14'
-
-local colors = {
- red = { '7F', '00', '00' },
- green = { '00', '7F', '00' },
- blue = { '00', '00', '7F' },
- cyan = { '00', '7F', '7F' },
- magenta = { '7F', '00', '7F' },
- yellow = { '7F', '7F', '00' },
- orange = { 'B0', '7F', '00' },
- --
- white = { 'FF', 'FF', 'FF' },
- light = { 'CF', 'CF', 'CF' },
- grey = { '80', '80', '80' },
- dark = { '4F', '4F', '4F' },
- black = { '00', '00', '00' },
- --
- selection = { 'F7', 'F7', 'F7' },
- logpanel = { 'E7', 'E7', 'E7' },
- textpanel = { 'CF', 'CF', 'CF' },
- linepanel = { 'A7', 'A7', 'A7' },
- tippanel = { '44', '44', '44' },
- --
- right = { '00', '00', 'FF' },
- wrong = { 'FF', '00', '00' },
-}
-
-local styles = {
-
- ["whitespace"] = { },
- ["default"] = { font = font_name, size = font_size, fore = colors.black, back = colors.textpanel },
- ["default"] = { font = font_name, size = font_size, fore = colors.black },
- ["number"] = { fore = colors.cyan },
- ["comment"] = { fore = colors.yellow },
- ["keyword"] = { fore = colors.blue, bold = true },
- ["string"] = { fore = colors.magenta },
- -- ["preproc"] = { fore = colors.yellow, bold = true },
- ["error"] = { fore = colors.red },
- ["label"] = { fore = colors.red, bold = true },
-
- ["nothing"] = { },
- ["class"] = { fore = colors.black, bold = true },
- ["function"] = { fore = colors.black, bold = true },
- ["constant"] = { fore = colors.cyan, bold = true },
- ["operator"] = { fore = colors.blue },
- ["regex"] = { fore = colors.magenta },
- ["preprocessor"] = { fore = colors.yellow, bold = true },
- ["tag"] = { fore = colors.cyan },
- ["type"] = { fore = colors.blue },
- ["variable"] = { fore = colors.black },
- ["identifier"] = { },
-
- ["linenumber"] = { back = colors.linepanel },
- ["bracelight"] = { fore = colors.orange, bold = true },
- ["bracebad"] = { fore = colors.orange, bold = true },
- ["controlchar"] = { },
- ["indentguide"] = { fore = colors.linepanel, back = colors.white },
- ["calltip"] = { fore = colors.white, back = colors.tippanel },
-
- ["invisible"] = { back = colors.orange },
- ["quote"] = { fore = colors.blue, bold = true },
- ["special"] = { fore = colors.blue },
- ["extra"] = { fore = colors.yellow },
- ["embedded"] = { fore = colors.black, bold = true },
- ["char"] = { fore = colors.magenta },
- ["reserved"] = { fore = colors.magenta, bold = true },
- ["definition"] = { fore = colors.black, bold = true },
- ["okay"] = { fore = colors.dark },
- ["warning"] = { fore = colors.orange },
- ["standout"] = { fore = colors.orange, bold = true },
- ["command"] = { fore = colors.green, bold = true },
- ["internal"] = { fore = colors.orange, bold = true },
- ["preamble"] = { fore = colors.yellow },
- ["grouping"] = { fore = colors.red },
- ["primitive"] = { fore = colors.blue, bold = true },
- ["plain"] = { fore = colors.dark, bold = true },
- ["user"] = { fore = colors.green },
- ["data"] = { fore = colors.cyan, bold = true },
-
- -- equal to default:
-
- ["text"] = { font = font_name, size = font_size, fore = colors.black, back = colors.textpanel },
- ["text"] = { font = font_name, size = font_size, fore = colors.black },
-
-}
-
-local properties = {
- ["fold.by.parsing"] = 1,
- ["fold.by.indentation"] = 0,
- ["fold.by.line"] = 0,
- ["fold.line.comments"] = 0,
- --
- ["lexer.context.log"] = 1, -- log errors and warnings
- ["lexer.context.trace"] = 0, -- show loading, initializations etc
- ["lexer.context.detail"] = 0, -- show more detail when tracing
- ["lexer.context.show"] = 0, -- show result of lexing
- ["lexer.context.collapse"] = 0, -- make lexing results somewhat more efficient
- ["lexer.context.inspect"] = 0, -- show some info about lexer (styles and so)
- --
--- ["lexer.context.log"] = 1, -- log errors and warnings
--- ["lexer.context.trace"] = 1, -- show loading, initializations etc
-}
-
-local lexer = lexer or require("lexer")
-local context = lexer.context
-
-if context then
- context.inform("loading context (style) properties")
- if context.registerstyles then
- context.registerstyles(styles)
- end
- if context.registerproperties then
- context.registerproperties(properties)
+if not lexers or not lexers.initialized then
+
+ local font_name = 'Dejavu Sans Mono'
+ local font_size = '14'
+
+ local colors = {
+ red = { 0x7F, 0x00, 0x00 },
+ green = { 0x00, 0x7F, 0x00 },
+ blue = { 0x00, 0x00, 0x7F },
+ cyan = { 0x00, 0x7F, 0x7F },
+ magenta = { 0x7F, 0x00, 0x7F },
+ yellow = { 0x7F, 0x7F, 0x00 },
+ orange = { 0xB0, 0x7F, 0x00 },
+ --
+ white = { 0xFF },
+ light = { 0xCF },
+ grey = { 0x80 },
+ dark = { 0x4F },
+ black = { 0x00 },
+ --
+ selection = { 0xF7 },
+ logpanel = { 0xE7 },
+ textpanel = { 0xCF },
+ linepanel = { 0xA7 },
+ tippanel = { 0x44 },
+ --
+ right = { 0x00, 0x00, 0xFF },
+ wrong = { 0xFF, 0x00, 0x00 },
+ }
+
+ local styles = {
+
+ ["whitespace"] = { },
+ -- ["default"] = { font = font_name, size = font_size, fore = colors.black, back = colors.textpanel },
+ -- ["default"] = { font = font_name, size = font_size, fore = colors.black },
+ ["default"] = { font = font_name, size = font_size, fore = colors.black,
+ back = textadept and colors.textpanel or nil },
+ ["number"] = { fore = colors.cyan },
+ ["comment"] = { fore = colors.yellow },
+ ["keyword"] = { fore = colors.blue, bold = true },
+ ["string"] = { fore = colors.magenta },
+ -- ["preproc"] = { fore = colors.yellow, bold = true },
+ ["error"] = { fore = colors.red },
+ ["label"] = { fore = colors.red, bold = true },
+
+ ["nothing"] = { },
+ ["class"] = { fore = colors.black, bold = true },
+ ["function"] = { fore = colors.black, bold = true },
+ ["constant"] = { fore = colors.cyan, bold = true },
+ ["operator"] = { fore = colors.blue },
+ ["regex"] = { fore = colors.magenta },
+ ["preprocessor"] = { fore = colors.yellow, bold = true },
+ ["tag"] = { fore = colors.cyan },
+ ["type"] = { fore = colors.blue },
+ ["variable"] = { fore = colors.black },
+ ["identifier"] = { },
+
+ ["linenumber"] = { back = colors.linepanel },
+ ["bracelight"] = { fore = colors.orange, bold = true },
+ ["bracebad"] = { fore = colors.orange, bold = true },
+ ["controlchar"] = { },
+ ["indentguide"] = { fore = colors.linepanel, back = colors.white },
+ ["calltip"] = { fore = colors.white, back = colors.tippanel },
+
+ ["invisible"] = { back = colors.orange },
+ ["quote"] = { fore = colors.blue, bold = true },
+ ["special"] = { fore = colors.blue },
+ ["extra"] = { fore = colors.yellow },
+ ["embedded"] = { fore = colors.black, bold = true },
+ ["char"] = { fore = colors.magenta },
+ ["reserved"] = { fore = colors.magenta, bold = true },
+ ["definition"] = { fore = colors.black, bold = true },
+ ["okay"] = { fore = colors.dark },
+ ["warning"] = { fore = colors.orange },
+ ["standout"] = { fore = colors.orange, bold = true },
+ ["command"] = { fore = colors.green, bold = true },
+ ["internal"] = { fore = colors.orange, bold = true },
+ ["preamble"] = { fore = colors.yellow },
+ ["grouping"] = { fore = colors.red },
+ ["primitive"] = { fore = colors.blue, bold = true },
+ ["plain"] = { fore = colors.dark, bold = true },
+ ["user"] = { fore = colors.green },
+ ["data"] = { fore = colors.cyan, bold = true },
+
+ -- equal to default:
+
+ ["text"] = { font = font_name, size = font_size, fore = colors.black, back = colors.textpanel },
+ ["text"] = { font = font_name, size = font_size, fore = colors.black },
+
+ }
+
+ local properties = {
+ ["fold.by.parsing"] = 1,
+ ["fold.by.indentation"] = 0,
+ ["fold.by.line"] = 0,
+ ["fold.line.comments"] = 0,
+ --
+ ["lexer.context.log"] = 1, -- log errors and warnings
+ ["lexer.context.trace"] = 0, -- show loading, initializations etc
+ ["lexer.context.detail"] = 0, -- show more detail when tracing
+ ["lexer.context.show"] = 0, -- show result of lexing
+ ["lexer.context.collapse"] = 0, -- make lexing results somewhat more efficient
+ ["lexer.context.inspect"] = 0, -- show some info about lexer (styles and so)
+ --
+ -- ["lexer.context.log"] = 1, -- log errors and warnings
+ -- ["lexer.context.trace"] = 1, -- show loading, initializations etc
+ }
+
+ ----- lexers = require("lexer")
+ local lexer = require("scite-context-lexer")
+ local context = lexer.context
+
+ if context then
+ context.inform("loading context (style) properties")
+ if context.registerstyles then
+ context.registerstyles(styles)
+ end
+ if context.registercolors then
+ context.registercolors(colors)
+ end
+ if context.registerproperties then
+ context.registerproperties(properties)
+ end
end
-end
+end
diff --git a/context/data/scite/context/scite-context-data-context.properties b/context/data/scite/context/scite-context-data-context.properties
index dce195726..1d091746b 100644
--- a/context/data/scite/context/scite-context-data-context.properties
+++ b/context/data/scite/context/scite-context-data-context.properties
@@ -4,68 +4,69 @@ 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 presetdocument \
-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
+halfapoint onebasepoint maxcount 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 unexpandeddocumentvariable \
+setupdocument presetdocument 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 parfillleftskip \
+parfillrightskip
keywordclass.context.helpers=\
startsetups stopsetups startxmlsetups stopxmlsetups \
@@ -101,117 +102,119 @@ 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 emspace \
-charspace nbsp crlf 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
+privatescratchcounter scratchdimen globalscratchdimen privatescratchdimen scratchskip \
+globalscratchskip privatescratchskip scratchmuskip globalscratchmuskip privatescratchmuskip \
+scratchtoks globalscratchtoks privatescratchtoks scratchbox globalscratchbox \
+privatescratchbox 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 \
+emspace charspace nbsp crlf 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 lastlinewidth 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 compoundhyphenpenalty
diff --git a/context/data/scite/context/scite-context-data-interfaces.properties b/context/data/scite/context/scite-context-data-interfaces.properties
index 60e3727b3..6eba6e0cd 100644
--- a/context/data/scite/context/scite-context-data-interfaces.properties
+++ b/context/data/scite/context/scite-context-data-interfaces.properties
@@ -18,309 +18,286 @@ 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 \
+MPvar MPvariable MPvv MPw MPwhd \
+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 TEXpage \
+TaBlE TeX TheNormalizedFontSize TransparencyHack VSEDNIDEN \
+VerboseNumber WidthSpanningText XETEX XeTeX Znak \
+Znaky abjadnaivenumerals abjadnodotnumerals abjadnumerals activatespacehandler \
+adaptcollector adaptfontfeature adaptpapersize 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 \
+aktualnidatum alignmentcharacter allinputpaths alphabeticnumerals alwayscitation \
+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 aside assignalfadimension assigndimen assigndimension \
+assignifempty assigntranslation assignvalue assignwidth assumelongusagecs \
+astype attachment autocap autodirhbox autodirvbox \
+autodirvtop autoinsertnextspace automathematics autosetups availablehsize \
+averagecharwidth backgroundimage backgroundimagefill backgroundline barevnalista \
+barva basegrid baselineleftbox baselinemiddlebox baselinerightbox \
+bbox beforesplitstring beforetestandsplitstring big bigbodyfont \
+bigg bigger biggl biggm biggr \
+bigl bigm bigr bigskip binom \
+bitmapimage blap bleed bleedheight bleedwidth \
+blockligatures 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 \
+boxreference bpos bthiddencitation btxabbreviatedjournal btxaddjournal \
+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 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 \
+calligraphic camel catcodetablename cbox centerbox \
+centeredbox centerednextbox cernalinka cernelinky cfrac \
+chardescription charwidthlanguage checkcharacteralign checkedchar checkedfiller \
+checkedstrippedcsname checkinjector checknextindentation checknextinjector checkpage \
+checkparameters checkpreviousinjector checksoundtrack checktwopassdata checkvariables \
+chem chemical chemicalbottext chemicalmidtext chemicalsymbol \
+chemicaltext chemicaltoptext chineseallnumerals chinesecapnumerals chinesenumerals \
+cisla cislonadpisu cislorovnice cislostrany citace \
+citation cite citovat clap classfont \
+cldcommand cldcontext cldloadfile cldprocessfile cleftarrow \
+collect collectedtext collectexpanded colorcomponents colored \
+coloronly columnbreak combinepages commalistelement commalistsentence \
+commalistsize comment comparedimension comparedimensioneps completebtxrendering \
+completelist completelistofpublications completelistofsorts completelistofsynonyms completepagenumber \
+completeregister complexorsimple 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 \
+convertvalue convertvboxtohbox copypages copyparameters copyposition \
+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 datasetvariable datum dayoftheweek \
+dayspermonth dbinom 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 definecomplexorsimpleempty defineconversionset \
+definecounter definedataset definedelimitedtext definedfont defineeffect \
+defineexpandable defineexternalfigure 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 \
+definefontfamilypreset definefontfeature definefontfile definefontsize definefontsolution \
+defineformula defineformulaalternative defineformulaframed defineframedcontent definefrozenfont \
+defineglobalcolor definegraphictypesynonym definegridsnapping defineheadalternative definehelp \
+definehigh definehighlight definehspace definehypenationfeatures defineindentedtext \
+defineindenting defineinitial defineinsertion defineinteraction defineinteractionbar \
+defineinterfaceconstant defineinterfaceelement defineinterfacevariable defineinterlinespace defineintermediatecolor \
+defineitemgroup defineitems definelabelclass definelayer definelayerpreset \
+definelayout definelinefiller definelinenote definelinenumbering definelines \
+definelistalternative definelistextra definelow definelowhigh definelowmidhigh \
+definemarginblock definemargindata definemarker 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 definenamespace \
+definenarrower definenote 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 definujbarvu definujblok definujbloksekce definujbuffer \
+definujfont definujformatodkazu definujhbox definujinterakcnimenu definujkombinovanyseznam \
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 \
+definujopis definujoramovani definujoramovanytext definujpaletu definujplvouciobjekt \
+definujpodpole definujpole definujpopis definujpopisek definujprekryv \
+definujprofil definujprogram definujprostredizakladnihofontu definujrejstrik definujsablonutabulky \
+definujsekci definujseznam definujskupinubarev definujstartstop definujstyl \
+definujstylfontu definujsymbol definujsynonumumfontu definujsynonyma definujtabelaci \
+definujtext definujtrideni definujupravu definujvelikostpapiru definujvycet \
+definujzakladnifont definujzasobnikpoli definujznaceni 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 \
+devanagarinumerals dfrac digits dimensiontocount directcolor \
+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 \
+dorepeatwithcommand doreplacefeature doresetandafffeature doresetattribute dorotatebox \
+dosetattribute dosetleftskipadaption dosetrightskipadaption dosetupcheckedinterlinespace doseventupleargument \
+doseventupleempty dosingleargument dosingleempty dosinglegroupempty dosixtupleargument \
+dosixtupleempty dostepwiserecurse dosubtractfeature 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 enskip enspace env envvar \
+eoverbarfill eoverbracefill eoverbracketfill eoverparentfill epos \
+equaldigits erightarrowfill erightharpoondownfill erightharpoonupfill 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 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 flushboxregister flushcollector \
+flushlayer flushlocalfloats flushnextbox flushnotes flushoutputstream \
+flushshapebox flushtextflow flushtokens flushtoks fontalternative \
+fontbody fontchar fontcharbyindex fontclass fontclassname \
+fontface fontfeaturelist fontsize fontstyle footnotetext \
+forcecharacterstripping forcelocalfloats forgeteverypar forgetparameters 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 getprivatechar \
+getprivateslot 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 grabbufferdata grabbufferdatadirect grabuntil graf \
+grayvalue greedysplitstring greeknumerals groupedcommand gsetboxllx \
+gsetboxlly gujaratinumerals gurmurkhinumerals hairspace halfwaybox \
+handletokens handwritten hash hboxofvbox hboxreference \
+hdofstring headhbox headnumbercontent headnumberdistance headnumberwidth \
+headreferenceattributes headsetupspacing headtextcontent headtextdistance headtextwidth \
+headvbox headwidth heightanddepthofstring heightofstring heightspanningtext \
+helptext hglue hiddenbar 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 incrementcounter incrementedcounter incrementpagenumber incrementsubpagenumber \
+incrementvalue indentation infofont infofontbold inheritparameter \
+inhibitblank initializeboxstack inlinebuffer inlinedbox inlinemath \
+inlinemathematics inlinemessage inlineordisplaymath inlinerange innerflushshapebox \
+input inputfilebarename inputfilename inputfilerealsuffix inputfilesuffix \
+inputgivenfile insertpages instalacejazyka installactionhandler installactivecharacter \
installanddefineactivecharacter installattributestack installautocommandhandler installautosetuphandler installbasicautosetuphandler \
installbasicparameterhandler installbottomframerenderer installcommandhandler installcorenamespace installdefinehandler \
installdefinitionset installdefinitionsetmember installdirectcommandhandler installdirectparameterhandler installdirectparametersethandler \
@@ -330,170 +307,153 @@ installparametersethandler installparentinjector installrightframerenderer insta
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 \
+interakcnitlacitka interaktivnimenu intermezzo intertext invokepageheandler \
+istltdir istrtdir italic italicbold italiccorrection \
+itemtag jazyk jdidolu jdina jdinabox \
+jdinastranu jobfilename jobfilesuffix kap kapitola \
+keeplinestogether keepunwantedspaces kerncharacters klonujpole komentar \
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 \
+koreannumeralsc koreannumeralsp koreanparentnumerals korekcebilehomista languageCharacters \
+languagecharacters languagecharwidth lastcounter lastcountervalue lastdigit \
+lastlinewidth lastnaturalboxdp lastnaturalboxht lastnaturalboxwd lastpredefinedsymbol \
+lastrealpage lastrealpagenumber lastsubcountervalue lastsubpage lastsubpagenumber \
+lasttwodigits lastuserpage lastuserpagenumber lateluacode layeredtext \
+layerheight layerwidth lazysavetaggedtwopassdata lazysavetwopassdata lbox \
+left leftbottombox leftbox lefthbox leftorrighthbox \
+leftorrightvbox leftorrightvtop leftskipadaption leftsubguillemot lefttopbox \
+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 limtatefirstline linespanningtext listcitation 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 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 \
-mathitalic 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 \
+maoramovani mapfontsize margindata markcontent markinjector \
+mat matematika math mathbf mathbi \
+mathblackboard mathbs mathcommand mathdefault mathfraktur \
+mathfunction mathit mathitalic mathop mathrm \
+mathscript mathsl mathss mathtext mathtextbf \
+mathtextbi mathtextbs mathtextit mathtextsl mathtexttf \
+mathtf mathtriplet mathtt mathupright mathword \
+mathwordbf mathwordbi mathwordbs mathwordit mathwordsl \
+mathwordtf mazaramovani mbox mcframed md \
+measure measured medskip medspace mequal \
+meritko mesic message metaTeX mezera \
+mfence mfunction mfunctionlabeltext mhbox mhookleftarrow \
+mhookrightarrow middle middlebox midhbox minimalhbox \
+mixedcaps mkvibuffer mleftarrow mleftharpoondown mleftharpoonup \
+mleftrightarrow mleftrightharpoons mmapsto moduleparameter molecule \
+mono monobold mononormal monthlong monthshort \
+mp mprandomnumber mrel mrightarrow mrightharpoondown \
+mrightharpoonup mrightleftharpoons mrightoverleftarrow mrizka mtext \
+mtriplerel mtwoheadleftarrow mtwoheadrightarrow namedheadnumber namedstructureheadlocation \
+namedstructureuservariable namedstructurevariable namedtaggedlabeltexts nastavbarvu nastavbarvy \
+nastavbilamista nastavblok nastavbloksekce nastavbuffer nastavcernelinky \
+nastavcislonadpisu nastavcislostrany nastavcislovaniodstavcu nastavcislovaniradku nastavcislovanistran \
+nastavcitaci nastavdeleniplvoucichobjektu nastavdelitko nastavdolnitexty nastavhorejsek \
+nastavhornitexty nastavinterakci nastavinterakcnilistu nastavinterakcnimenu nastavinterakcniobrazovku \
+nastavjazyk nastavkapitalky nastavkombinovanyseznam nastavkomentar nastavkomentarstrany \
+nastavmarginalnilinky nastavmeziradkovoumezeru nastavnadpis nastavnadpisy nastavodkazovani \
+nastavodsazovani 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 \
+nastavpolozky nastavpopisek nastavpozadi nastavprechodstrany nastavpreskok \
+nastavprogramy nastavradkovani nastavradky nastavrejstrik nastavsadusymbolu \
+nastavseznam nastavsirkucary nastavsloupce nastavspodek nastavsynonyma \
+nastavtabelaci nastavtabulky nastavtenkelinky nastavtext nastavtextovelinky \
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 \
+nastavurl nastavusporadani nastavvelikostpapiru nastavvsechnapole nastavvycty \
+nastavvyplnovelinky nastavvyplnoveradky nastavvzhled nastavzahlavi nastavzakladnifont \
+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 \
+nivy nizky nobar nocitation nocite \
+nodetostring noffigurepages noflines noflocalfloats noindentation \
+noitem nokap 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 obrazovka odkaz \
+normalizetextline normalizetextwidth normaltypeface notesymbol ntimes \
+numberofpoints obeydepth objectdepth objectheight objectmargin \
+objectwidth obox obrazek obrazovka odkaz \
odkaznastranu odkaznatext odkazujici offset offsetbox \
-okr onedigitrounding operatorlanguage operatortext opis \
-opis opissoubor oramovani ordinaldaynumber ordinalstr \
-oref orez ornamenttext ornamenttext ornamenttext \
+onedigitrounding opis opissoubor oramovani oramovanytext \
+ordinaldaynumber ordinalstr oref orez 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 \
-presetdocument 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 \
+outputstreamunvcopy over overbar overbars overbartext \
+overbarunderbar overbrace overbracetext overbraceunderbrace overbracket \
+overbrackettext overbracketunderbracket 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 pagestaterealpage \
+paletsize 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 placeattachments placebtxrendering \
+placecitation placecomments placecurrentformulanumber placedbox placefloat \
+placefloatwithsetups placeframed placeheadnumber placeheadtext placehelp \
+placeinitial placelayer placelayeredtext placelistofpublications placelistofsorts \
+placelistofsynonyms placelocalnotes placement placenamedfloat placenamedformula \
+placenotes placepagenumber placepairedbox placeparallel placerawlist \
+placerenderingwindow plnezneni podpodpodpodsekce podpodpodpodtema podpodpodsekce \
+podpodpodtema podpodsekce podpodtema podsekce podtema \
+pole polozka polozky popattribute popmacro \
+popmode popsystemmode porovnejpaletu porovnejskupinubarev positionoverlay \
+positionregionoverlay postponenotes pozadi pozice poznamka \
+predefinedfont predefinefont predefinesymbol pref prefixedpagenumber \
+prelozit prependetoks prependgvalue prependtocommalist prependtoks \
+prependtoksonce prependvalue prepninazakladnifont presetdocument presetfieldsymbols \
+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 profiledbox profilegivenbox \
+program projekt prostredi pseudoMixedCapped pseudoSmallCapped \
+pseudoSmallcapped pseudosmallcapped purenumber pushattribute pushbutton \
+pushmacro pushmode pushoutputstream pushsystemmode qquad \
+quad quads quitcommalist quitprevcommalist quittypescriptscanning \
+raisebox randomizetext randomnumber 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 \
replaceincommalist replaceword rescan rescanwithsetup resetMPdrawing \
-resetMPenvironment resetMPinstance resetallattributes resetandaddfeature resetandaddfeature \
+resetMPenvironment resetMPinstance resetallattributes resetandaddfeature resetbar \
resetbreakpoints resetbuffer resetcharacteralign resetcharacterkerning resetcharacterspacing \
resetcharacterstripping resetcollector resetcounter resetdigitsmanipulation resetdirection \
resetfeature resetflag resetfontcolorsheme resetfontfallback resetfontsolution \
@@ -503,87 +463,83 @@ 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 \
+reshapebox resolvedglyphdirect resolvedglyphstyled restartcounter restorebox \
+restorecatcodes restorecounter restorecurrentattributes restoreendofline restoreglobalbodyfont \
+reusableMPgraphic reuseMPgraphic reuserandomseed revivefeature rfence \
+rhbox right rightbottombox rightbox righthbox \
+rightorleftpageaction rightskipadaption rightsubguillemot righttolefthbox righttoleftvbox \
+righttoleftvtop righttopbox rimskecislice rlap robustaddtocommalist \
+robustdoifelseinset robustdoifinsetelse robustpretocommalist rollbutton roman \
+rozdelplvouciobjekt roztazene rtop ruledhbox ruledhpack \
+ruledmbox ruledtopv ruledtpack ruledvbox ruledvpack \
+ruledvtop runMPbuffer runninghbox safechar sans \
sansbold sansnormal sansserif savebox savebtxdataset \
-savebuffer savebuffer savecounter savecurrentattributes savenormalmeaning \
-savetaggedtwopassdata savetwopassdata sbox schovejbloky secondoffivearguments \
+savebuffer savecounter savecurrentattributes savenormalmeaning savetaggedtwopassdata \
+savetwopassdata sbox schovejbloky sd 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 \
+secondoftwounexpanded sedabarva sekce 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 \
+setfractions setgmeasure setgvalue setgvariable setgvariables \
+sethboxregister sethyphenatedurlafter sethyphenatedurlbefore sethyphenatedurlnormal sethyphenationfeatures \
+setinitial setinjector setinteraction setinterfacecommand setinterfaceconstant \
+setinterfaceelements setinterfacemessage setinterfacevariable setinternalrendering setitaliccorrection \
+setlayer setlayerframed setlayertext setlinefiller setlocalhsize \
+setmainbodyfont setmainparbuilder setmarker setmarking setmathstyle \
+setmeasure setmessagetext setmode setnostrut setnote \
+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 \
+setupMPgraphics setupMPinstance setupMPpage setupMPvariables setupTABLE \
+setupTEXpage setupattachment setupbackend setupbar setupbleeding \
+setupbookmark setupbtx setupbtxdataset setupbtxlist setupbtxregister \
+setupbtxrendering setupbutton setupcharacterkerning setupcharacterspacing setupchemical \
+setupchemicalframed setupcollector setupcolumnspan setupcombination 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 \
+setupfontexpansion setupfontprotrusion setupfonts setupfontsolution setupforms \
+setupformula setupformulaframed setupframedcontent setupframedtext setupglobalreferenceprefix \
+setupheadalternative setuphelp setuphigh setuphighlight setuphyphenation \
+setupindentedtext setupinitial setupinsertion setupitaliccorrection setupitemgroup \
+setuplabel setuplayer setuplayeredtext setuplayouttext setuplinefiller \
+setuplinefillers setuplinenote setuplinetable setuplistalternative setuplistextra \
+setuplocalfloats setuplocalinterlinespace setuplow setuplowhigh setuplowmidhigh \
+setupmarginblock setupmargindata setupmarginframed setupmarginrule setupmathalignment \
+setupmathcases setupmathematics setupmathfence setupmathfraction setupmathframed \
+setupmathmatrix setupmathornament setupmathradical setupmathstackers setupmathstyle \
+setupmixedcolumns setupmodule setupnotation setupnotations setupnote \
+setupnotes setupoffset setupoffsetbox setupoutputroutine setuppagechecker \
+setuppagegrid setuppagegridarea setuppagegridareatext setuppagegridlines setuppagegridspan \
+setuppagegridstart setuppageinjection setuppageinjectionalternative setuppageshift setuppagestate \
+setuppairedbox setuppaper setupparagraph setupparagraphintro setupparallel \
+setupperiods setupplacement setuppositionbar 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 \
+setupregisters setuprenderingwindow setups setupscale setupscript \
+setupscripts setupselector setupshift setupsidebar setupspellchecking \
+setupstartstop setupstretched setupstruts setupstyle setupsubformula \
+setuptabulation setuptagging setuptextbackground setuptextflow setuptooltip \
+setupunit setupuserpagenumber setupversion setupviewerlayer setupvspacing \
+setupwithargument setupwithargumentswapped setupxml setupxtable setuvalue \
+setuxvalue setvalue setvariable setvariables setvboxregister \
+setvisualizerfont setvtopregister setwidthof setxmeasure setxvalue \
+setxvariable setxvariables sfrac shapedhbox showallmakeup \
+showattributes showboxes showbtxdatasetauthors showbtxdatasetcompleteness showbtxdatasetfields \
showbtxfields showbtxhashedauthors showbtxtables showchardata showcharratio \
showcolorbar showcolorcomponents showcolorset showcolorstruts showcounter \
showdirectives showdirsinmargin showedebuginfo showexperiments showfont \
@@ -593,274 +549,237 @@ 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 \
+simplegroupedcommand singalcharacteralign singlebond sixthofsixarguments skryt \
+slanted slantedbold slicepages sloupec 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 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 \
+snaptogrid someheadnumber somekindoftab somelocalfloat somenamedheadnumber \
+someplace sp spanishNumerals spanishnumerals speech \
+splitatasterisk splitatcolon splitatcolons splitatcomma splitdfrac \
+splitfilename splitfrac splitoffbase splitofffull splitoffkind \
+splitoffname splitoffpath splitoffroot splitofftokens splitofftype \
+splitstring spreadhbox sqrt stackrel stanovcharakteristickuseznamu \
+stanovcislonadpisu startJScode startJSpreamble startMPclip startMPcode \
+startMPdefinitions startMPdrawing startMPenvironment startMPextensions startMPinclusions \
+startMPinitializations startMPpage startMPpositiongraphic startMPpositionmethod startMPrun \
+startTABLE startTABLEbody startTABLEfoot startTABLEhead startTABLEnext \
+startTC startTD startTDs startTEXpage startTH \
+startTN startTR startTRs startTX startTY \
+startallmodes startarrangedpages startaside startattachment startbar \
+startbarva startbinom startbitmapimage startblockquote startbtxrenderingdefinitions \
+startbuffer startbutton startcatcodetable startcharacteralign startcheckedfences \
+startchemical startcitace startcitovat startcollect startcollecting \
+startcolorintent startcoloronly startcolorset startcolumns startcolumnspan \
+startcombination startcomment startcontextcode startcontextdefinitioncode startctxfunction \
+startctxfunctiondefinition startcurrentcolor startcurrentlistentrywrapper startdbinom startdelimited \
+startdelimitedtext startdfrac startdisplaymath startdmath startdocument \
+starteffect startelement startembeddedxtable startendofline startexceptions \
+startexpanded startexpandedcollect startextendedcatcodetable startexternalfigurecollection startfigure \
+startfitfieldframed startfittingpage startfloatcombination startfont startfontclass \
+startfontsolution startformula startformulas startfrac startframedcontent \
+startframedtext startgraf startgridsnapping starthbox starthboxestohbox \
+starthboxregister starthelptext starthiddenbar starthiding starthighlight \
+starthyphenation startimath startindentation startindentedtext startinmframed \
+startinteraction startinteraktivnimenu startinterface startintermezzo startintertext \
+startitemgroup startjdina startkapitola startknockout startkomentar \
+startkomponenta startlayout startlinecorrection startlinefiller startlinenumbering \
+startlinetable startlinetablebody startlinetablecell startlinetablehead startlocalfootnotes \
+startlocalheadsetup startlocallinecorrection startlocalnotes startlocalsetups startlua \
+startluacode startluaparameterset startluasetups startmakeup startmarginalnilinka \
+startmarginblock startmarkedcontent startmathmode startmathstyle startmatrices \
+startmcframed startmdformula startmframed startmixedcolumns startmode \
+startmodeset startmodule startmoduletestsection startmpformula startnadpis \
+startnadtrzeni startnadtrzeno startnamedsection startnamedsubformulas startnarrow \
+startnarrower startnegative startnicelyfilledbox startnobar startnointerference \
+startnotallmodes startnotext startnotmode startobrazek startopposite \
+startoramovani startoramovanytext 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 \
+startpar startparagraph startparagraphs startparagraphscell startparbuilder \
+startpath startplacepairedbox startpodpodpodpodsekce startpodpodpodpodtema startpodpodpodsekce \
+startpodpodpodtema startpodpodsekce startpodpodtema startpodsekce startpodtema \
+startpodtrzeni startpodtrzeno startpolozka startpositioning startpositionoverlay \
+startpositive startpostponing startpozadi startpreskrtnuti startpreskrtnuto \
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 startsubjectlevel 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 stopsubjectlevel \
-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 \
+startprojekt startprostredi startprotect startprotectedcolors startpublikace \
+startpunctuation startradek startrandomized startrandomseed startrawsetups \
+startreadingfile startreferenceprefix startregime startregister startreusableMPgraphic \
+startscript startsdformula startsectionblock startsectionblockenvironment startsectionlevel \
+startsekce startsetups startsfrac startshapebox startshift \
+startsidebar startsimplecolumns startspecialitem startspeech startspformula \
+startspread startstartstop startstaticMPfigure startstaticMPgraphic startstrictinspectnextcharacter \
+startstructurepageregister startstrut startstyle startsubformulas startsubjectlevel \
+startsubsentence startsubstack startsymbolset starttable starttablehead \
+starttables starttabletail starttabulate starttabulatehead starttabulatetail \
+starttabulka starttagged starttbinom starttema starttexcode \
+starttexdefinition starttext starttextbackground starttextbackgroundmanual starttextcolor \
+starttextcolorintent starttextflow starttextnapovedy starttextovalinka starttitul \
+starttokens starttransparent starttypescript starttypescriptcollection startumistirovnici \
+startunderdash startunderdashes startunderdot startunderdots startunderrandom \
+startunderrandoms startunderstrike startunderstrikes startunframed startuniqueMPgraphic \
+startuniqueMPpagegraphic startunpacked startusableMPgraphic startuseMPgraphic startusemathstyleparameter \
+startusingbtxspecification startvbox startvboxregister startvboxtohbox startvboxtohboxseparator \
+startviewerlayer startvtop startvtopregister startvycet startxcell \
+startxcellgroup startxfrac startxgroup startxmldisplayverbatim startxmlinlineverbatim \
+startxmlraw startxmlsetups startxrow startxrowgroup startxtable \
+startxtablebody startxtablefoot startxtablehead startxtablenext startxxfrac \
+startzhustene stopJScode stopJSpreamble stopMPclip stopMPcode \
+stopMPdefinitions stopMPdrawing stopMPenvironment stopMPextensions stopMPinclusions \
+stopMPinitializations stopMPpage stopMPpositiongraphic stopMPpositionmethod stopMPrun \
+stopTABLE stopTABLEbody stopTABLEfoot stopTABLEhead stopTABLEnext \
+stopTC stopTD stopTDs stopTEXpage stopTH \
+stopTN stopTR stopTRs stopTX stopTY \
+stopallmodes stoparrangedpages stopaside stopattachment stopbar \
+stopbarva stopbinom stopbitmapimage stopblockquote stopbtxrenderingdefinitions \
+stopbuffer stopbutton stopcatcodetable stopcharacteralign stopcheckedfences \
+stopchemical stopcitace stopcitovat stopcollect stopcollecting \
+stopcolorintent stopcoloronly stopcolorset stopcolumns stopcolumnspan \
+stopcombination stopcomment stopcontextcode stopcontextdefinitioncode stopctxfunction \
+stopctxfunctiondefinition stopcurrentcolor stopcurrentlistentrywrapper stopdbinom stopdelimited \
+stopdelimitedtext stopdfrac stopdisplaymath stopdmath stopdocument \
+stopeffect stopelement stopembeddedxtable stopendofline stopexceptions \
+stopexpanded stopexpandedcollect stopextendedcatcodetable stopexternalfigurecollection stopfigure \
+stopfitfieldframed stopfittingpage stopfloatcombination stopfont stopfontclass \
+stopfontsolution stopformula stopformulas stopfrac stopframedcontent \
+stopframedtext stopgraf stopgridsnapping stophbox stophboxestohbox \
+stophboxregister stophelptext stophiddenbar stophiding stophighlight \
+stophyphenation stopimath stopindentation stopindentedtext stopinmframed \
+stopinteraction stopinteraktivnimenu stopinterface stopintermezzo stopintertext \
+stopitemgroup stopjdina stopkapitola stopknockout stopkomentar \
+stopkomponenta stoplayout stoplinecorrection stoplinefiller stoplinenumbering \
+stoplinetable stoplinetablebody stoplinetablecell stoplinetablehead stoplocalfootnotes \
+stoplocalheadsetup stoplocallinecorrection stoplocalnotes stoplocalsetups stoplua \
+stopluacode stopluaparameterset stopluasetups stopmakeup stopmarginalnilinka \
+stopmarginblock stopmarkedcontent stopmathmode stopmathstyle stopmatrices \
+stopmcframed stopmdformula stopmframed stopmixedcolumns stopmode \
+stopmodeset stopmodule stopmoduletestsection stopmpformula stopnadpis \
+stopnadtrzeni stopnadtrzeno stopnamedsection stopnamedsubformulas stopnarrow \
+stopnarrower stopnegative stopnicelyfilledbox stopnobar stopnointerference \
+stopnotallmodes stopnotext stopnotmode stopobrazek stopopposite \
+stoporamovani stoporamovanytext stopoutputstream stopoverlay stopoverprint \
+stoppagecomment stoppagefigure stoppagegrid stoppagegridspan stoppagelayout \
+stoppar stopparagraph stopparagraphs stopparagraphscell stopparbuilder \
+stoppath stopplacepairedbox stoppodpodpodpodsekce stoppodpodpodpodtema stoppodpodpodsekce \
+stoppodpodpodtema stoppodpodsekce stoppodpodtema stoppodsekce stoppodtema \
+stoppodtrzeni stoppodtrzeno stoppolozka stoppositioning stoppositionoverlay \
+stoppositive stoppostponing stoppozadi stoppreskrtnuti stoppreskrtnuto \
+stopprocessassignmentcommand stopprocessassignmentlist stopprocesscommacommand stopprocesscommalist stopprodukt \
+stopprojekt stopprostredi stopprotect stopprotectedcolors stoppublikace \
+stoppunctuation stopradek stoprandomized stoprandomseed stoprawsetups \
+stopreadingfile stopreferenceprefix stopregime stopregister stopreusableMPgraphic \
+stopscript stopsdformula stopsectionblock stopsectionblockenvironment stopsectionlevel \
+stopsekce stopsetups stopsfrac stopshapebox stopshift \
+stopsidebar stopsimplecolumns stopspecialitem stopspeech stopspformula \
+stopspread stopstartstop stopstaticMPfigure stopstaticMPgraphic stopstrictinspectnextcharacter \
+stopstructurepageregister stopstrut stopstyle stopsubformulas stopsubjectlevel \
+stopsubsentence stopsubstack stopsymbolset stoptable stoptablehead \
+stoptables stoptabletail stoptabulate stoptabulatehead stoptabulatetail \
+stoptabulka stoptagged stoptbinom stoptema stoptexcode \
+stoptexdefinition stoptext stoptextbackground stoptextbackgroundmanual stoptextcolor \
+stoptextcolorintent stoptextflow stoptextnapovedy stoptextovalinka stoptitul \
+stoptokens stoptransparent stoptypescript stoptypescriptcollection stopumistirovnici \
+stopunderdash stopunderdashes stopunderdot stopunderdots stopunderrandom \
+stopunderrandoms stopunderstrike stopunderstrikes stopunframed stopuniqueMPgraphic \
+stopuniqueMPpagegraphic stopunpacked stopusableMPgraphic stopuseMPgraphic stopusemathstyleparameter \
+stopusingbtxspecification stopvbox stopvboxregister stopvboxtohbox stopvboxtohboxseparator \
+stopviewerlayer stopvtop stopvtopregister stopvycet stopxcell \
+stopxcellgroup stopxfrac stopxgroup stopxmldisplayverbatim stopxmlinlineverbatim \
+stopxmlraw stopxmlsetups stopxrow stopxrowgroup stopxtable \
+stopxtablebody stopxtablefoot stopxtablehead stopxtablenext stopxxfrac \
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 \
+strippedcsname stripspaces structurelistuservariable structurenumber structuretitle \
+structureuservariable structurevariable strut strutdp strutht \
+struthtdp struttedbox strutwd style styleinstance \
+subpagenumber subsentence substituteincommalist subtractfeature swapcounts \
+swapdimens swapface swapmacros swaptypeface switchstyleonly \
+switchtocolor switchtointerlinespace symbol symbolreference synchronizeblank \
+synchronizeindenting synchronizemarking synchronizeoutputstreams synchronizestrut synchronizewhitespace \
+systemlog systemlogfirst systemloglast systemsetups tLeftarrow \
+tLeftrightarrow tRightarrow tabulateautoline tabulateautorule tabulateline \
+tabulaterule tabulka taggedctxcommand taggedlabeltexts tbinom \
+tbox tecky tema tenkalinka tenkelinky \
+tequal testandsplitstring testcolumn testfeature testfeatureonce \
+testpage testpageonly testpagesync testtokens tex \
+texdefinition texsetup textcitation textcite textcontrolspace \
+textflowcollector textmath textminus textnapovedy textormathchar \
+textovalinka textplus textvisiblespace tfrac thainumerals \
+thefirstcharacter thenormalizedbodyfontsize theremainingcharacters thickspace thinspace \
+thirdoffivearguments thirdoffourarguments thirdofsixarguments thirdofthreearguments thirdofthreeunexpanded \
+thookleftarrow thookrightarrow threedigitrounding tibetannumerals tightlayer \
+tinyfont titul tlacitko tlacitkomenu tlap \
+tleftarrow tleftharpoondown tleftharpoonup tleftrightarrow tleftrightharpoons \
+tloustkacary tmapsto tochar tolinenote topbox \
+topleftbox toplinebox toprightbox topskippedbox tracecatcodetables \
+tracedfontname traceoutputroutines tracepositions transparencycomponents transparent \
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 \
+ttriplerel ttwoheadleftarrow ttwoheadrightarrow tvrdamezera tvrdemezery \
+twodigitrounding tx 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 umistilokalnipoznamkypodcarou umistinadsebe \
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 useblankparameter usebodyfont \
+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 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 useblankparameter 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 \
+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 verbatim verbatimstring verbosenumber verticalgrowingbar \
+verticalpositionbar verze vglue viewerlayer vl \
+vlasovalinka vphantom vpos vradku vsedniden \
+vsmash vsmashbox vsmashed vspace vspacing \
+vyberbloky vycet 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 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 zasobnikpoli \
ziskejbuffer ziskejznaceni znaceni znak znaky \
zpracujbloky zrcadlit zref
@@ -885,147 +804,130 @@ 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 \
+MPwhd 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 TEXpage TaBlE TeX TheNormalizedFontSize \
+TransparencyHack VerboseNumber WOCHENTAG WOERTER WORT \
+WidthSpanningText Woerter Wort XETEX XeTeX \
+Ziffern abbildung abjadnaivenumerals abjadnodotnumerals abjadnumerals \
+absatz activatespacehandler adaptcollector adaptfontfeature adaptpapersize \
+addfeature addtoJSpreamble addtocommalist addvalue aftersplitstring \
+aftertestandsplitstring alignmentcharacter allinputpaths alphabeticnumerals alwayscitation \
+alwayscite 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 aside assignalfadimension assigndimen \
+assigndimension assignifempty assigntranslation assignvalue assignwidth \
+assumelongusagecs astype attachment aufseite aufzaehlung \
+ausfuelltext ausschnitt autocap autodirhbox autodirvbox \
+autodirvtop autoinsertnextspace automathematics autosetups availablehsize \
+averagecharwidth backgroundimage backgroundimagefill backgroundline basegrid \
+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 blockligatures \
+blockquote bodyfontenvironmentlist bodyfontsize bold boldface \
+bolditalic boldslanted bookmark booleanmodevalue bottombox \
+bottomleftbox bottomrightbox boxcursor boxmarker boxofsize \
+boxreference bpos bthiddencitation btxabbreviatedjournal btxaddjournal \
+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 btxlistcitation btxloadjournalist btxoneorrange btxremapauthor \
+btxsavejournalist btxsetup btxsingularorplural btxsingularplural btxtextcitation \
+buchstabe buchstaben calligraphic camel catcodetablename \
+cbox centerbox centeredbox centerednextbox cfrac \
+chardescription charwidthlanguage checkcharacteralign checkedchar checkedfiller \
+checkedstrippedcsname checkinjector checknextindentation checknextinjector checkpage \
+checkparameters checkpreviousinjector checksoundtrack checktwopassdata checkvariables \
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 \
+citation cite clap classfont cldcommand \
+cldcontext cldloadfile cldprocessfile cleftarrow collect \
+collectedtext collectexpanded colorcomponents colored coloronly \
+columnbreak combinepages commalistelement commalistsentence commalistsize \
+comment comparedimension comparedimensioneps completebtxrendering completelist \
+completelistofpublications completelistofsorts completelistofsynonyms completepagenumber completeregister \
+complexorsimple complexorsimpleempty composedcollector composedlayer compresult \
+constantdimen constantdimenargument constantemptyargument constantnumber constantnumberargument \
+contentreference continuednumber continueifinputfile convertargument convertcommand \
+convertedcounter converteddimen convertedsubcounter convertmonth convertvalue \
+convertvboxtohbox copypages copyparameters copyposition 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 datasetvariable datum dayoftheweek dayspermonth \
+dbinom 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 definecomplexorsimpleempty defineconversionset definecounter \
+definedataset definedelimitedtext definedfont defineeffect defineexpandable \
+defineexternalfigure definefallbackfamily definefieldbody definefieldbodyset definefieldcategory \
+definefileconstant definefilefallback definefilesynonym definefiller definefirstline \
+definefittingpage definefontalternative definefontfallback definefontfamily definefontfamilypreset \
definefontfeature definefontfile definefontsize definefontsolution defineformula \
-defineformulaalternative defineframedcontent definefrozenfont defineglobalcolor defineglobalcolor \
+defineformulaalternative defineformulaframed defineframedcontent definefrozenfont 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 \
+defineinterfaceelement defineinterfacevariable defineinterlinespace defineintermediatecolor defineitemgroup \
+defineitems definelabelclass definelayer definelayerpreset definelayout \
+definelinefiller definelinenote definelinenumbering definelines definelistalternative \
+definelistextra definelow definelowhigh definelowmidhigh definemarginblock \
+definemargindata definemarker 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 definenamespace definenarrower \
+definenote 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 definierebeschreibung \
+definierebeschriftung definiereblock definierefarbe definierefarbengruppe definierefeld \
+definierefeldstapel definierefliesstext definierefliesstextumgebung definieregleitobjekt definierehbox \
+definiereinteraktionsmenue definierekonversion definierelabel definiereliste definieren \
+definierenummerierung definiereoverlay definierepalette definierepapierformat definiereprofil \
+definiereprogramme definierepuffer definierereferenz definierereferenzformat definiereregister \
+definiereschrift definiereschriftstil definieresortieren definierestartstop definierestil \
+definieresubfeld definieresymbol definieresynonyme definieretabellenvorlage definieretabulator \
+definieretext definieretippen definiereueberschrift definiereumbruch definiereumrahmt \
+definiereumrahmtertext definierezusammengestellteliste delimited delimitedtext depthofstring \
+depthonlybox depthspanningtext determinenoflines devanagarinumerals dfrac \
+digits dimensiontocount directcolor directcolored directconvertedcounter \
directdummyparameter directgetboxllx directgetboxlly directhighlight directlocalframed \
directluacode directselect directsetbar directsetup directsymbol \
directvspacing dis disabledirectives disableexperiments disablemode \
@@ -1099,54 +1001,51 @@ doifvaluenothing doifvaluenothingelse doifvaluesomething doifvariable doifvariab
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 \
+doquintuplegroupempty dorechecknextindentation dorecurse dorepeatwithcommand doreplacefeature \
+doresetandafffeature doresetattribute dorotatebox dosetattribute dosetleftskipadaption \
+dosetrightskipadaption dosetupcheckedinterlinespace doseventupleargument doseventupleempty dosingleargument \
+dosingleempty dosinglegroupempty dosixtupleargument dosixtupleempty dostepwiserecurse \
+dosubtractfeature 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 enskip enspace \
+env envvar eoverbarfill eoverbracefill eoverbracketfill \
+eoverparentfill epos equaldigits erightarrowfill erightharpoondownfill \
+erightharpoonupfill 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 \
+fastsxsy feature feld feldstapel fence \
+fenced 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 flushboxregister flushcollector flushlayer flushlocalfloats \
+flushnextbox flushnotes flushoutputstream flushshapebox flushtextflow \
+flushtokens flushtoks fontalternative fontbody fontchar \
+fontcharbyindex fontclass fontclassname fontface fontfeaturelist \
+fontsize fontstyle footnotetext forcecharacterstripping forcelocalfloats \
+forgeteverypar forgetparameters format formelnummer formula \
+foundbox fourthoffivearguments fourthoffourarguments fourthofsixarguments frac \
+frameddimension framedparameter framedtext freezedimenmacro freezemeasure \
+frenchspacing fromlinenote frozenhbox gdefconvertedargument gdefconvertedcommand \
gefuelltesrechteck gefuelltezeile gestreckt getMPdrawing getMPlayer \
getboxllx getboxlly getbufferdata getcommacommandsize getcommalistsize \
getdayoftheweek getdayspermonth getdefinedbuffer getdocumentargument getdocumentargumentdefault \
@@ -1155,113 +1054,103 @@ getfiguredimensions getfirstcharacter getfirsttwopassdata getfromcommacommand ge
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 \
+getpaletsize getparameters getprivatechar getprivateslot 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 \
+grabbufferdata grabbufferdatadirect grabuntil grafik graufarbe \
+grayvalue greedysplitstring greeknumerals groupedcommand gsetboxllx \
+gsetboxlly gujaratinumerals gurmurkhinumerals haarlinie hairspace \
+halfwaybox handletokens handwritten hash hauptsprache \
+hboxofvbox hboxreference hdofstring headhbox headnumbercontent \
+headnumberdistance headnumberwidth headreferenceattributes headsetupspacing headtextcontent \
+headtextdistance headtextwidth headvbox headwidth heightanddepthofstring \
+heightofstring heightspanningtext helptext heutigesdatum heutigeskopfnummer \
+hglue hiddenbar hiddencitation hiddencite highlight \
+highordinalstr hilfetext 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 immaumrise immediatesavetwopassdata impliedby \
+implies imumriss in includemenu includeversioninfo \
+increment incrementcounter incrementedcounter incrementpagenumber incrementsubpagenumber \
+incrementvalue indentation infofont infofontbold inheritparameter \
+inhibitblank initializeboxstack inlinebuffer inlinedbox inlinemath \
+inlinemathematics inlinemessage inlineordisplaymath inlinerange innerflushshapebox \
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 \
+inputgivenfile insertpages installactionhandler installactivecharacter installanddefineactivecharacter \
+installattributestack installautocommandhandler installautosetuphandler installbasicautosetuphandler installbasicparameterhandler \
+installbottomframerenderer installcommandhandler installcorenamespace installdefinehandler installdefinitionset \
+installdefinitionsetmember installdirectcommandhandler installdirectparameterhandler installdirectparametersethandler installdirectsetuphandler \
+installdirectstyleandcolorhandler installframedautocommandhandler installframedcommandhandler 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 intermezzo intertext invokepageheandler \
+inzeile irgendwo istltdir istrtdir italic \
+italicbold italiccorrection itemtag jobfilename jobfilesuffix \
+kap kapitel keeplinestogether keepunwantedspaces keinekopfundfusszeilen \
+keinspatium keinzeilenobenundunten kerncharacters klonierefeld knopf \
+kommentar komponente konvertierezahl kopfnummer kopierefeld \
+koreancirclenumerals koreannumerals koreannumeralsc koreannumeralsp koreanparentnumerals \
+korrigierezwischenraum languageCharacters languagecharacters languagecharwidth lastcounter \
+lastcountervalue lastdigit lastlinewidth lastnaturalboxdp lastnaturalboxht \
+lastnaturalboxwd lastpredefinedsymbol lastrealpage lastrealpagenumber lastsubcountervalue \
+lastsubpage lastsubpagenumber lasttwodigits lastuserpage lastuserpagenumber \
+lateluacode layeredtext layerheight layerwidth lazysavetaggedtwopassdata \
+lazysavetwopassdata lbox left leftbottombox leftbox \
+lefthbox leftorrighthbox leftorrightvbox leftorrightvtop leftskipadaption \
+leftsubguillemot lefttopbox 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 limtatefirstline linespanningtext \
+liniendicke listcitation 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 \
+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 mathematik mathfraktur mathfunction mathit \
-mathitalic 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 \
+mathitalic mathop mathrm mathscript mathsl \
+mathss mathtext mathtextbf mathtextbi mathtextbs \
+mathtextit mathtextsl mathtexttf mathtf mathtriplet \
+mathtt mathupright mathword mathwordbf mathwordbi \
+mathwordbs mathwordit mathwordsl mathwordtf maumrise \
+mbox mcframed md measure measured \
+medskip medspace menueknopf mequal message \
+metaTeX mfence mfunction mfunctionlabeltext mhbox \
+mhookleftarrow mhookrightarrow middle middlebox midhbox \
minimalhbox mixedcaps mkvibuffer mleftarrow mleftharpoondown \
mleftharpoonup mleftrightarrow mleftrightharpoons mmapsto moduleparameter \
-molecule monat mono monobold monobold \
-mononormal monthlong monthshort mprandomnumber mrel \
+molecule monat mono monobold mononormal \
+monthlong monthshort mp mprandomnumber mrel \
mrightarrow mrightharpoondown mrightharpoonup mrightleftharpoons mrightoverleftarrow \
mtext mtriplerel mtwoheadleftarrow mtwoheadrightarrow nachunten \
namedheadnumber namedstructureheadlocation namedstructureuservariable namedstructurevariable namedtaggedlabeltexts \
@@ -1271,171 +1160,157 @@ 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 \
+nextsubpage nextsubpagenumber nextuserpage nextuserpagenumber nobar \
+nocitation nocite nodetostring noffigurepages noflines \
+noflocalfloats noindentation noitem nokap nonfrenchspacing \
+nonmathematics normal normalboldface normalframedwithsettings normalizebodyfontsize \
+normalizedfontsize normalizefontdepth normalizefontheight normalizefontline normalizefontwidth \
+normalizetextdepth normalizetextheight normalizetextline normalizetextwidth normaltypeface \
+notesymbol notiz ntimes numberofpoints obeydepth \
+objectdepth objectheight objectmargin objectwidth obox \
+offset offsetbox onedigitrounding ordinaldaynumber ordinalstr \
+ornamenttext outputfilename outputstreambox outputstreamcopy outputstreamunvbox \
+outputstreamunvcopy over overbar overbars overbartext \
+overbarunderbar overbrace overbracetext overbraceunderbrace overbracket \
+overbrackettext overbracketunderbracket 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 \
+pagefigure pagegridspanwidth pageinjection pagestaterealpage paletsize \
+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 \
+placecitation placecomments placecurrentformulanumber placedbox placefloat \
+placefloatwithsetups placeframed placeheadnumber placeheadtext placehelp \
+placeinitial placelayer placelayeredtext placelistofpublications placelistofsorts \
+placelistofsynonyms 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 presetdocument 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 \
+placerenderingwindow platzierebookmarks platziereformel platzierefussnoten platziereliste \
+platzierelokalefussnoten platzierenebeneinander platziereregister platziereuntereinander platziereunterformel \
+platzierezusammengestellteliste popattribute popmacro popmode popsystemmode \
+pos position positionoverlay positionregionoverlay posten \
+postponenotes predefinedfont predefinefont predefinesymbol prefixedpagenumber \
+prependetoks prependgvalue prependtocommalist prependtoks prependtoksonce \
+prependvalue presetdocument presetfieldsymbols 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 profiledbox profilegivenbox \
+programm projekt pseudoMixedCapped pseudoSmallCapped pseudoSmallcapped \
+pseudosmallcapped punkt purenumber pushattribute pushbutton \
+pushmacro pushmode pushoutputstream pushsystemmode qquad \
+quad quads quitcommalist quitprevcommalist quittypescriptscanning \
+raisebox randomizetext randomnumber 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 \
+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 replaceincommalist \
+replaceword rescan rescanwithsetup resetMPdrawing resetMPenvironment \
+resetMPinstance resetallattributes resetandaddfeature resetbar 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 resolvedglyphdirect \
+resolvedglyphstyled restartcounter restorebox restorecatcodes restorecounter \
+restorecurrentattributes restoreendofline restoreglobalbodyfont reusableMPgraphic reuseMPgraphic \
+reuserandomseed revivefeature rfence rhbox right \
+rightbottombox rightbox righthbox rightorleftpageaction rightskipadaption \
+rightsubguillemot righttolefthbox righttoleftvbox righttoleftvtop righttopbox \
+rlap robustaddtocommalist robustdoifelseinset robustdoifinsetelse robustpretocommalist \
+roemischezahlen rollbutton roman rtop ruecksetztenbeschriftung \
ruledhbox ruledhpack ruledmbox ruledtopv ruledtpack \
-ruledvbox ruledvpack ruledvtop runMPbuffer safechar \
-sans sansbold sansnormal sansserif savebox \
-savebtxdataset savebuffer savebuffer savecounter savecurrentattributes \
+ruledvbox ruledvpack ruledvtop runMPbuffer runninghbox \
+safechar sans sansbold sansnormal sansserif \
+savebox savebtxdataset 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 \
+schreibezwischenliste sd secondoffivearguments secondoffourarguments secondofsixarguments \
+secondofthreearguments secondofthreeunexpanded secondoftwoarguments secondoftwounexpanded 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 setfractions \
+setgmeasure setgvalue setgvariable setgvariables sethboxregister \
+sethyphenatedurlafter sethyphenatedurlbefore sethyphenatedurlnormal sethyphenationfeatures setinitial \
+setinjector setinteraction setinterfacecommand setinterfaceconstant setinterfaceelements \
+setinterfacemessage setinterfacevariable setinternalrendering setitaliccorrection setlayer \
+setlayerframed setlayertext setlinefiller setlocalhsize setmainbodyfont \
+setmainparbuilder setmarker setmarking setmathstyle setmeasure \
+setmessagetext setmode setnostrut setnote 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 setupMPgraphics \
+setupMPinstance setupMPpage setupMPvariables setupTABLE setupTEXpage \
+setupattachment setupbackend setupbar setupbleeding setupbookmark \
+setupbtx setupbtxdataset setupbtxlist setupbtxregister setupbtxrendering \
+setupbutton setupcharacterkerning setupcharacterspacing setupchemical setupchemicalframed \
+setupcollector setupcolumnspan setupcombination 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 \
+setupfontprotrusion setupfonts setupfontsolution setupforms setupformula \
+setupformulaframed setupframedcontent setupframedtext setupglobalreferenceprefix setupheadalternative \
+setuphelp setuphigh setuphighlight setuphyphenation setupindentedtext \
+setupinitial setupinsertion setupitaliccorrection setupitemgroup setuplabel \
+setuplayer setuplayeredtext setuplayouttext setuplinefiller setuplinefillers \
+setuplinenote setuplinetable setuplistalternative setuplistextra setuplocalfloats \
+setuplocalinterlinespace setuplow setuplowhigh setuplowmidhigh setupmarginblock \
+setupmargindata setupmarginframed setupmarginrule setupmathalignment setupmathcases \
+setupmathematics setupmathfence setupmathfraction setupmathframed setupmathmatrix \
+setupmathornament setupmathradical setupmathstackers setupmathstyle setupmixedcolumns \
+setupmodule setupnotation setupnotations setupnote setupnotes \
+setupoffset setupoffsetbox setupoutputroutine setuppagechecker setuppagegrid \
+setuppagegridarea setuppagegridareatext setuppagegridlines setuppagegridspan setuppagegridstart \
+setuppageinjection setuppageinjectionalternative setuppageshift setuppagestate setuppairedbox \
+setuppaper setupparagraph setupparagraphintro setupparallel setupperiods \
+setupplacement setuppositionbar setupprocessor setupprofile setupquotation \
+setuprealpagenumber setupreferenceformat setupreferenceprefix setupreferencestructureprefix setupregisters \
+setuprenderingwindow setups setupscale setupscript setupscripts \
+setupselector setupshift setupsidebar setupspellchecking setupstartstop \
+setupstretched setupstruts setupstyle setupsubformula setuptabulation \
+setuptagging setuptextbackground setuptextflow setuptooltip setupunit \
+setupuserpagenumber setupversion setupviewerlayer setupvspacing setupwithargument \
+setupwithargumentswapped setupxml setupxtable setuvalue setuxvalue \
+setvalue setvariable setvariables setvboxregister setvisualizerfont \
+setvtopregister setwidthof setxmeasure setxvalue setxvariable \
+setxvariables sfrac shapedhbox showallmakeup showattributes \
+showboxes showbtxdatasetauthors showbtxdatasetcompleteness showbtxdatasetfields showbtxfields \
showbtxhashedauthors showbtxtables showchardata showcharratio showcolorbar \
showcolorcomponents showcolorset showcolorstruts showcounter showdirectives \
showdirsinmargin showedebuginfo showexperiments showfont showfontdata \
@@ -1445,289 +1320,252 @@ 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 \
+simplegroupedcommand 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 \
+smashboxed smashedhbox smashedvbox snaptogrid someheadnumber \
+somekindoftab somelocalfloat somenamedheadnumber someplace sp \
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 \
+spiegeln splitatasterisk splitatcolon splitatcolons splitatcomma \
+splitdfrac splitfilename splitfrac splitoffbase splitofffull \
+splitoffkind splitoffname splitoffpath splitoffroot splitofftokens \
+splitofftype splitstring sprache spreadhbox sqrt \
+stackrel startJScode startJSpreamble startMPclip startMPcode \
+startMPdefinitions startMPdrawing startMPenvironment startMPextensions startMPinclusions \
+startMPinitializations startMPpage startMPpositiongraphic startMPpositionmethod startMPrun \
+startTABLE startTABLEbody startTABLEfoot startTABLEhead startTABLEnext \
+startTC startTD startTDs 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 \
+startabbildung startabsatz startallmodes startarrangedpages startaside \
+startattachment startaufzaehlung startbar startbinom startbitmapimage \
+startblockquote startbtxrenderingdefinitions startbuffer startbutton startcatcodetable \
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 \
+startcolorintent startcoloronly startcolorset startcolumns startcolumnspan \
+startcombination startcomment startcontextcode startcontextdefinitioncode startctxfunction \
+startctxfunctiondefinition startcurrentcolor startcurrentlistentrywrapper startdbinom startdelimited \
+startdelimitedtext startdfrac startdisplaymath startdmath startdocument \
+startdurchgestrichen startdurchstreichen starteffect startelement startembeddedxtable \
+startendofline startexceptions startexpanded startexpandedcollect startextendedcatcodetable \
+startexternalfigurecollection startfarbe startfigure startfitfieldframed startfittingpage \
+startfloatcombination startfont startfontclass startfontsolution startformula \
+startformulas startfrac startframedcontent startframedtext startgrafik \
+startgridsnapping starthbox starthboxestohbox starthboxregister starthelptext \
+starthiddenbar starthiding starthighlight starthilfetext starthintergrund \
+starthyphenation startimath startindentation startindentedtext startinmframed \
+startinteraction startinteraktionsmenue startinterface startintermezzo startintertext \
+startitemgroup startkapitel startkleinerdurchschuss startknockout startkommentar \
+startkomponente startkopf startlayout startlinecorrection startlinefiller \
+startlinenumbering startlinetable startlinetablebody startlinetablecell startlinetablehead \
+startlocalfootnotes startlocalheadsetup startlocallinecorrection startlocalnotes startlocalsetups \
+startlua startluacode startluaparameterset startluasetups startmakeup \
+startmarginallinie startmarginblock startmarkedcontent startmathmode startmathstyle \
+startmatrices startmcframed startmdformula startmframed startmixedcolumns \
+startmode startmodeset startmodule startmoduletestsection startmpformula \
+startnamedsection startnamedsubformulas startnarrow startnarrower startnegative \
+startnicelyfilledbox startnobar startnointerference startnotallmodes startnotext \
+startnotmode startopposite startoutputstream startoverlay startoverprint \
+startpagecomment startpagefigure startpagegrid startpagegridspan startpagelayout \
+startpar startparagraph startparagraphs startparagraphscell startparbuilder \
+startpath startplacepairedbox startplatziereformel startpos startpositioning \
+startpositionoverlay startpositive startpostponing startprocessassignmentcommand startprocessassignmentlist \
+startprocesscommacommand startprocesscommalist startprodukt startprojekt startprotect \
+startprotectedcolors startpublikation startpunctuation startrandomized startrandomseed \
+startrawsetups startreadingfile startreferenceprefix startregime startregister \
+startreusableMPgraphic startscript startsdformula startsectionblock startsectionblockenvironment \
+startsectionlevel startsetups startsfrac startshapebox startshift \
+startsidebar startsimplecolumns startspecialitem startspeech startspformula \
startspread startstartstop startstaticMPfigure startstaticMPgraphic startstrictinspectnextcharacter \
-startstructurepageregister startstrut startstyle startstyle startsubformulas \
-startsubject startsubjectlevel 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 \
+startstructurepageregister startstrut startstyle startsubformulas startsubjectlevel \
+startsubsentence startsubstack startsymbolset starttabelle starttable \
+starttablehead starttables starttabletail starttabulate starttabulatehead \
+starttabulatetail starttagged starttbinom starttexcode starttexdefinition \
+starttext starttextbackground starttextbackgroundmanual starttextcolor starttextcolorintent \
+starttextflow starttextlinie startthema starttitel starttokens \
+starttransparent starttypescript starttypescriptcollection startueberstreichen startueberstrichen \
+startumgebung startumrahmt startumrahmtertext startunderdash startunderdashes \
+startunderdot startunderdots startunderrandom startunderrandoms startunderstrike \
+startunderstrikes startunframed startuniqueMPgraphic startuniqueMPpagegraphic startunpacked \
+startunterabsatz startunterstreichen startunterstrichen startunterthema startunterunterabsatz \
+startunterunterthema startunterunterunterabsatz startunterunterunterthema startunterunterunterunterabsatz startunterunterunterunterthema \
+startusableMPgraphic startuseMPgraphic startusemathstyleparameter startusingbtxspecification startvbox \
+startvboxregister startvboxtohbox startvboxtohboxseparator startviewerlayer startvtop \
+startvtopregister startxcell startxcellgroup startxfrac startxgroup \
+startxmldisplayverbatim startxmlinlineverbatim startxmlraw startxmlsetups startxrow \
+startxrowgroup startxtable startxtablebody startxtablefoot startxtablehead \
+startxtablenext startxxfrac startzeile startzitat startzitieren \
+startzu stelleabsaetzeein stelleabsatznummerierungein stelleabschnittsblockein stelleanordnenein \
+stelleaufzaehlungenein stelleausschnittein stellebeschriftungein stellebildunterschriftein stellebindestrichein \
+stelleblankoein stelleblockein stelledrehenein stelleduennerumrissein stelleeinziehenein \
+stelleengerein stellefarbeein stellefarbenein stellefeldein stellefelderin \
+stellefliesstextein stellefusszeileein stellefusszeilentextein stellegefuelltesrechteckein stellegefuelltezeileein \
+stellegegenueberplatzierenein stellegleitobjektein stellehintergruendeein stellehintergrundein 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 \
+stellekopfzeileein stellekopfzeilentextein stellelayoutein stellelinienbreiteein stellelisteein \
+stellemarginallinieein stellenobenein stellepaletteein stellepapierformatein stelleplatziegeteiltegleitobjekt \
+stellepositionierenein stellepostenein stelleprogrammein stellepufferein stellerechteckein \
+stellereferenzierenein stelleregisterein stelleseitenkommentarein stelleseitennummerein stelleseitennummeriernungein \
stelleseitenuebergangein stellesortierenein stellespaltenein stellespatiumein stellespracheein \
stellesymbolsetein stellesynonymein stelletabellenein stelletabulatorein stelletextein \
stelletextobenein stelletexttexteein stelletextumrissein stelletextuntenein stelletipein \
-stelletippenein stelletoleranzein stelleueberschriftein stelleueberschrifttextein stelleumbruchein \
+stelletippenein stelletoleranzein stelleueberschriftein stelleueberschriftenein 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 \
+stellezwischenraumein stopJScode stopJSpreamble stopMPclip stopMPcode \
+stopMPdefinitions 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 \
+stopTABLE stopTABLEbody stopTABLEfoot stopTABLEhead stopTABLEnext \
+stopTC stopTD stopTDs stopTEXpage stopTH \
+stopTN stopTR stopTRs stopTX stopTY \
+stopabbildung stopabsatz stopallmodes stoparrangedpages stopaside \
+stopattachment stopaufzaehlung stopbar stopbinom stopbitmapimage \
+stopblockquote stopbtxrenderingdefinitions stopbuffer stopbutton stopcatcodetable \
+stopcharacteralign stopcheckedfences stopchemical stopcollect stopcollecting \
+stopcolorintent stopcoloronly stopcolorset stopcolumns stopcolumnspan \
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 \
-stopsubjectlevel 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 \
+stopctxfunctiondefinition stopcurrentcolor stopcurrentlistentrywrapper stopdbinom stopdelimited \
+stopdelimitedtext stopdfrac stopdisplaymath stopdmath stopdocument \
+stopdurchgestrichen stopdurchstreichen stopeffect stopelement stopembeddedxtable \
+stopendofline stopexceptions stopexpanded stopexpandedcollect stopextendedcatcodetable \
+stopexternalfigurecollection stopfarbe stopfigure stopfitfieldframed stopfittingpage \
+stopfloatcombination stopfont stopfontclass stopfontsolution stopformula \
+stopformulas stopfrac stopframedcontent stopframedtext stopgrafik \
+stopgridsnapping stophbox stophboxestohbox stophboxregister stophelptext \
+stophiddenbar stophiding stophighlight stophilfetext stophintergrund \
+stophyphenation stopimath stopindentation stopindentedtext stopinmframed \
+stopinteraction stopinteraktionsmenue stopinterface stopintermezzo stopintertext \
+stopitemgroup stopkapitel stopkleinerdurchschuss stopknockout stopkommentar \
+stopkomponente stopkopf stoplayout stoplinecorrection stoplinefiller \
+stoplinenumbering stoplinetable stoplinetablebody stoplinetablecell stoplinetablehead \
+stoplocalfootnotes stoplocalheadsetup stoplocallinecorrection stoplocalnotes stoplocalsetups \
+stoplua stopluacode stopluaparameterset stopluasetups stopmakeup \
+stopmarginallinie stopmarginblock stopmarkedcontent stopmathmode stopmathstyle \
+stopmatrices stopmcframed stopmdformula stopmframed stopmixedcolumns \
+stopmode stopmodeset stopmodule stopmoduletestsection stopmpformula \
+stopnamedsection stopnamedsubformulas stopnarrow stopnarrower stopnegative \
+stopnicelyfilledbox stopnobar stopnointerference stopnotallmodes stopnotext \
+stopnotmode stopopposite stopoutputstream stopoverlay stopoverprint \
+stoppagecomment stoppagefigure stoppagegrid stoppagegridspan stoppagelayout \
+stoppar stopparagraph stopparagraphs stopparagraphscell stopparbuilder \
+stoppath stopplacepairedbox stopplatziereformel stoppos stoppositioning \
+stoppositionoverlay stoppositive stoppostponing stopprocessassignmentcommand stopprocessassignmentlist \
+stopprocesscommacommand stopprocesscommalist stopprodukt stopprojekt stopprotect \
+stopprotectedcolors stoppublikation stoppunctuation stoprandomized stoprandomseed \
+stoprawsetups stopreadingfile stopreferenceprefix stopregime stopregister \
+stopreusableMPgraphic stopscript stopsdformula stopsectionblock stopsectionblockenvironment \
+stopsectionlevel stopsetups stopsfrac stopshapebox stopshift \
+stopsidebar stopsimplecolumns stopspecialitem stopspeech stopspformula \
+stopspread stopstartstop stopstaticMPfigure stopstaticMPgraphic stopstrictinspectnextcharacter \
+stopstructurepageregister stopstrut stopstyle stopsubformulas stopsubjectlevel \
+stopsubsentence stopsubstack stopsymbolset stoptabelle stoptable \
+stoptablehead stoptables stoptabletail stoptabulate stoptabulatehead \
+stoptabulatetail stoptagged stoptbinom stoptexcode stoptexdefinition \
+stoptext stoptextbackground stoptextbackgroundmanual stoptextcolor stoptextcolorintent \
+stoptextflow stoptextlinie stopthema stoptitel stoptokens \
+stoptransparent stoptypescript stoptypescriptcollection stopueberstreichen stopueberstrichen \
+stopumgebung stopumrahmt stopumrahmtertext stopunderdash stopunderdashes \
+stopunderdot stopunderdots stopunderrandom stopunderrandoms stopunderstrike \
+stopunderstrikes stopunframed stopuniqueMPgraphic stopuniqueMPpagegraphic stopunpacked \
+stopunterabsatz stopunterstreichen stopunterstrichen stopunterthema stopunterunterabsatz \
+stopunterunterthema stopunterunterunterabsatz stopunterunterunterthema stopunterunterunterunterabsatz stopunterunterunterunterthema \
+stopusableMPgraphic stopuseMPgraphic stopusemathstyleparameter stopusingbtxspecification stopvbox \
+stopvboxregister stopvboxtohbox stopvboxtohboxseparator stopviewerlayer stopvtop \
+stopvtopregister stopxcell stopxcellgroup stopxfrac stopxgroup \
+stopxmldisplayverbatim stopxmlinlineverbatim stopxmlraw stopxmlsetups stopxrow \
+stopxrowgroup stopxtable stopxtablebody stopxtablefoot stopxtablehead \
+stopxtablenext stopxxfrac stopzeile stopzitat stopzitieren \
+stopzu strictdoifelsenextoptional strictdoifnextoptionalelse stripcharacter strippedcsname \
+stripspaces structurelistuservariable structurenumber structuretitle structureuservariable \
+structurevariable strut strutdp strutht struthtdp \
+struttedbox strutwd style styleinstance subpagenumber \
+subsentence substituteincommalist subtractfeature swapcounts swapdimens \
+swapface swapmacros swaptypeface switchstyleonly switchtocolor \
+switchtointerlinespace symbol symbolreference synchronizeblank synchronizeindenting \
+synchronizemarking synchronizeoutputstreams synchronizestrut synchronizewhitespace systemlog \
+systemlogfirst systemloglast systemsetups tLeftarrow tLeftrightarrow \
+tRightarrow tabelle tabulateautoline tabulateautorule tabulateline \
+tabulaterule taggedctxcommand taggedlabeltexts tbinom tbox \
+teilegleitobjekt tequal testandsplitstring testcolumn testfeature \
+testfeatureonce testpage testpageonly testpagesync testtokens \
+tex texdefinition texsetup textcitation textcite \
+textcontrolspace textflowcollector textlinie textmath textminus \
+textormathchar textplus textreferenz textvisiblespace tfrac \
+thainumerals thefirstcharacter thema thenormalizedbodyfontsize theremainingcharacters \
+thickspace thinspace thirdoffivearguments thirdoffourarguments thirdofsixarguments \
+thirdofthreearguments thirdofthreeunexpanded thookleftarrow thookrightarrow threedigitrounding \
+tibetannumerals tief tightlayer tiho tinyfont \
+tip tippedatei tippen tippepuffer titel \
+tlap tleftarrow tleftharpoondown tleftharpoonup tleftrightarrow \
+tleftrightharpoons tmapsto tochar tolinenote topbox \
+topleftbox toplinebox toprightbox topskippedbox tracecatcodetables \
+tracedfontname traceoutputroutines tracepositions transparencycomponents transparent \
+trel trightarrow trightharpoondown trightharpoonup trightleftharpoons \
+trightoverleftarrow triplebond truefilename truefontname ttriplerel \
+ttwoheadleftarrow ttwoheadrightarrow twodigitrounding tx 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 useblankparameter 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 \
+uebersetzten uedcatcodecommand umgebung umrahmt umrahmtertext \
+unbekant undefinevalue undepthed 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 unprotected unregisterhyphenationpattern unspaceafter unspaceargument \
+unspaced unspacestring unterabsatz unterthema unterunterabsatz \
+unterunterthema unterunterunterabsatz unterunterunterthema unterunterunterunterabsatz unterunterunterunterthema \
+untexargument untexcommand uppercased uppercasestring upperleftdoubleninequote \
+upperleftdoublesixquote upperleftsingleninequote upperleftsinglesixquote upperrightdoubleninequote upperrightdoublesixquote \
+upperrightsingleninequote upperrightsinglesixquote url useMPenvironmentbuffer useMPgraphic \
+useMPlibrary useMPrun useMPvariables useblankparameter usebodyfont \
+usebodyfontparameter usebtxdataset usebtxdefinitions usecolors usecomponent \
+usedummycolorparameter usedummystyleandcolor usedummystyleparameter useenvironment useexternalrendering \
+usefigurebase usefile usegridparameter useindentingparameter useindentnextparameter \
+useinterlinespaceparameter uselanguageparameter useluamodule usemathstyleparameter useproduct \
+useprofileparameter useproject usereferenceparameter userpagenumber usesetupsparameter \
+usestaticMPfigure usesubpath usetexmodule usetypescript usetypescriptfile \
+usezipfile utfchar utflower utfupper utilityregisterlength \
+vboxreference verbatim verbatimstring verbergebloecke verbergen \
+verbosenumber vergleichefarbengruppe vergleichepalette version verticalgrowingbar \
+verticalpositionbar verwendeJSscript verwendeURL verwendebloecke verwendeexteresdokument \
+verwendeexterneabbildung verwendeexternestonstueck verwendemodul verwendesymbole verwendeurl \
+vglue viewerlayer vl volleswort von \
+vphantom vpos vsmash vsmashbox vsmashed \
+vspace vspacing waehlebloeckeaus wdofstring wechselezumfliesstext \
+widthofstring widthspanningtext withoutpt wochentag 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 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 ziffern zitat zitieren \
zu zurbox zurseite
keywordclass.context.en=\
@@ -1751,134 +1589,117 @@ 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 \
+MPwhd 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 TEXpage TaBlE TeX \
+TheNormalizedFontSize TransparencyHack VerboseNumber WEEKDAY WORD \
+WORDS WidthSpanningText Word Words XETEX \
+XeTeX abjadnaivenumerals abjadnodotnumerals abjadnumerals about \
+activatespacehandler adaptcollector adaptfontfeature adaptlayout adaptpapersize \
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 \
+aftertestandsplitstring alignmentcharacter allinputpaths alphabeticnumerals alwayscitation \
+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 aside assignalfadimension assigndimen assigndimension \
+assignifempty assigntranslation assignvalue assignwidth assumelongusagecs \
+astype at atpage attachment autocap \
+autodirhbox autodirvbox autodirvtop autoinsertnextspace automathematics \
+autosetups availablehsize averagecharwidth background backgroundimage \
+backgroundimagefill backgroundline basegrid 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 blockligatures \
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 \
+boxreference bpos bthiddencitation btxabbreviatedjournal btxaddjournal \
+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 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 \
+button calligraphic camel cap catcodetablename \
+cbox centerbox centeredbox centerednextbox 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 \
+checkcharacteralign checkedchar checkedfiller checkedstrippedcsname checkinjector \
+checknextindentation checknextinjector checkpage checkparameters checkpreviousinjector \
+checksoundtrack checktwopassdata checkvariables chem chemical \
+chemicalbottext chemicalmidtext chemicalsymbol chemicaltext chemicaltoptext \
+chineseallnumerals chinesecapnumerals chinesenumerals citation cite \
+clap classfont cldcommand cldcontext cldloadfile \
+cldprocessfile cleftarrow clip clonefield collect \
+collectedtext collectexpanded color colorbar colorcomponents \
+colored coloronly colorvalue column columnbreak \
+combinepages commalistelement commalistsentence commalistsize comment \
+comparecolorgroup comparedimension comparedimensioneps comparepalet completebtxrendering \
+completelist completelistofpublications completelistofsorts completelistofsynonyms completepagenumber \
+completeregister complexorsimple complexorsimpleempty 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 \
+convertmonth convertnumber convertvalue convertvboxtohbox copyfield \
+copypages copyparameters copyposition 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 datasetvariable date \
+dayoftheweek dayspermonth dbinom decrement decrementcounter \
+decrementedcounter decrementpagenumber decrementsubpagenumber decrementvalue defaultinterface \
+defaultobjectpage defaultobjectreference defcatcodecommand defconvertedargument defconvertedcommand \
+defconvertedvalue define defineMPinstance defineTABLEsetup defineactivecharacter \
+definealternativestyle defineanchor defineattachment defineattribute definebackground \
+definebar defineblock definebodyfont definebodyfontenvironment definebodyfontswitch \
+definebreakpoint definebreakpoints definebtx definebtxdataset definebtxregister \
+definebtxrendering definebuffer definebutton definecapitals definecharacterkerning \
+definecharacterspacing definechemical definechemicals definechemicalsymbol definecollector \
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 \
+definecomment definecomplexorsimple definecomplexorsimpleempty defineconversion defineconversionset \
+definecounter definedataset definedelimitedtext definedescription definedfont \
+defineeffect defineenumeration defineexpandable defineexternalfigure 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 \
+definefirstline definefittingpage definefloat definefont definefontalternative \
+definefontfallback definefontfamily definefontfamilypreset definefontfeature definefontfile \
+definefontsize definefontsolution definefontstyle definefontsynonym defineformula \
+defineformulaalternative defineformulaframed defineframed defineframedcontent defineframedtext \
+definefrozenfont defineglobalcolor definegraphictypesynonym definegridsnapping definehbox \
+definehead defineheadalternative definehelp definehigh definehighlight \
+definehspace definehypenationfeatures defineindentedtext defineindenting defineinitial \
+defineinsertion defineinteraction defineinteractionbar defineinteractionmenu defineinterfaceconstant \
+defineinterfaceelement defineinterfacevariable defineinterlinespace defineintermediatecolor defineitemgroup \
defineitems definelabel definelabelclass definelayer definelayerpreset \
-definelayerpreset definelayout definelinenote definelinenumbering definelines \
+definelayout definelinefiller 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 \
+definemarking 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 definenamespace definenarrower definenote \
+defineornament defineoutputroutine defineoutputroutinecommand defineoverlay definepage \
+definepagebreak definepagechecker definepagegrid definepagegridarea definepagegridspan \
+definepageinjection definepageinjectionalternative definepageshift definepagestate definepairedbox \
+definepalet definepapersize defineparagraph defineparagraphs defineparallel \
defineparbuilder defineplacement definepositioning defineprefixset defineprocesscolor \
defineprocessor defineprofile defineprogram definepushbutton definepushsymbol \
definereference definereferenceformat defineregister definerenderingwindow defineresetset \
@@ -1893,314 +1714,291 @@ definetypescriptsynonym definetypesetting definetyping defineunit defineviewerla
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 \
+digits dimensiontocount directcolor 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 dorepeatwithcommand doreplacefeature \
+doresetandafffeature doresetattribute dorotatebox dosetattribute dosetleftskipadaption \
+dosetrightskipadaption dosetupcheckedinterlinespace doseventupleargument doseventupleempty dosingleargument \
+dosingleempty dosinglegroupempty dosixtupleargument dosixtupleempty dostepwiserecurse \
+dosubtractfeature 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 enskip \
+enspace env environment envvar eoverbarfill \
+eoverbracefill eoverbracketfill eoverparentfill epos equaldigits \
+erightarrowfill erightharpoondownfill erightharpoonupfill 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 fence fenced fetchallmarkings fetchallmarks \
+fetchmark fetchmarking fetchonemark fetchonemarking fetchruntinecommand \
+fetchtwomarkings fetchtwomarks field fieldbody fieldstack \
+fifthoffivearguments fifthofsixarguments figure 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 flushboxregister flushcollector flushlayer flushlocalfloats \
+flushnextbox flushnotes flushoutputstream flushshapebox flushtextflow \
+flushtokens flushtoks fontalternative fontbody fontchar \
+fontcharbyindex fontclass fontclassname fontface fontfeaturelist \
+fontsize fontstyle footnotetext forcecharacterstripping forcelocalfloats \
+forgeteverypar forgetparameters 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 getprivatechar getprivateslot 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 \
goto gotobox gotopage grabbufferdata grabbufferdatadirect \
-grabuntil grave graycolor grayvalue greedysplitstring \
+grabuntil graphic 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 \
+handletokens handwritten hash hboxofvbox hboxreference \
+hdofstring headhbox headnumber headnumbercontent headnumberdistance \
+headnumberwidth headreferenceattributes headsetupspacing headtextcontent headtextdistance \
+headtextwidth headvbox headwidth heightanddepthofstring heightofstring \
+heightspanningtext helptext hglue hiddenbar hiddencitation \
+hiddencite hideblocks hiding 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 incrementcounter \
+incrementedcounter incrementpagenumber incrementsubpagenumber incrementvalue indentation \
+infofont infofontbold inframed infull inheritparameter \
+inhibitblank initializeboxstack 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 \
+inmaframed innerflushshapebox 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 \
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 \
+integerrounding interactionbar interactionbuttons interactionmenu intermezzo \
+intertext invokepageheandler istltdir istrtdir italic \
+italicbold italiccorrection item itemize items \
+itemtag 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 mathitalic \
-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 \
+koreannumeralsc koreannumeralsp koreanparentnumerals language languageCharacters \
+languagecharacters languagecharwidth lastcounter lastcountervalue lastdigit \
+lastlinewidth lastnaturalboxdp lastnaturalboxht lastnaturalboxwd lastpredefinedsymbol \
+lastrealpage lastrealpagenumber lastsubcountervalue lastsubpage lastsubpagenumber \
+lasttwodigits lastuserpage lastuserpagenumber lateluacode layeredtext \
+layerheight layerwidth lazysavetaggedtwopassdata lazysavetwopassdata lbox \
+left leftbottombox leftbox lefthbox leftorrighthbox \
+leftorrightvbox leftorrightvtop leftskipadaption leftsubguillemot lefttopbox \
+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 limtatefirstline linespanningtext linethickness listcitation \
+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 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 margindata markcontent marking \
+markinjector mat math mathbf mathbi \
+mathblackboard mathbs mathcommand mathdefault mathematics \
+mathfraktur mathfunction mathit mathitalic mathop \
+mathrm mathscript mathsl mathss mathtext \
+mathtextbf mathtextbi mathtextbs mathtextit mathtextsl \
+mathtexttf mathtf mathtriplet mathtt mathupright \
+mathword mathwordbf mathwordbi mathwordbs mathwordit \
+mathwordsl mathwordtf mbox mcframed md \
+measure measured medskip medspace 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 \
+mfunctionlabeltext mhbox mhookleftarrow mhookrightarrow middle \
+middlebox midhbox minimalhbox mirror mixedcaps \
+mkvibuffer mleftarrow mleftharpoondown mleftharpoonup mleftrightarrow \
+mleftrightharpoons mmapsto moduleparameter molecule mono \
+monobold mononormal month monthlong monthshort \
+mp 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 nobar nocap nocitation nocite \
+nodetostring noffigurepages noflines noflocalfloats noheaderandfooterlines \
+noindentation noitem nonfrenchspacing nonmathematics 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 \
+notesymbol notopandbottomlines ntimes numberofpoints numbers \
+obeydepth objectdepth objectheight objectmargin objectwidth \
+obox offset offsetbox onedigitrounding ordinaldaynumber \
+ordinalstr ornamenttext outputfilename outputstreambox outputstreamcopy \
+outputstreamunvbox outputstreamunvcopy over overbar overbars \
+overbartext overbarunderbar overbrace overbracetext overbraceunderbrace \
+overbracket overbrackettext overbracketunderbracket 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 \
+pagenumber pagereference pagestaterealpage paletsize pdfTeX \
+pdfactualtext pdfbackendactualtext pdfbackendcurrentresources pdfbackendsetcatalog pdfbackendsetcolorspace \
+pdfbackendsetextgstate pdfbackendsetinfo pdfbackendsetname pdfbackendsetpageattribute pdfbackendsetpageresource \
+pdfbackendsetpagesattribute pdfbackendsetpattern pdfbackendsetshade pdfcolor pdfeTeX \
+percent percentdimen 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 \
+pickupgroupedcommand placeattachments placebookmarks placebtxrendering placecitation \
+placecombinedlist placecomments placecurrentformulanumber placedbox placefloat \
+placefloatwithsetups placefootnotes placeformula placeframed placeheadnumber \
+placeheadtext placehelp placeinitial placelayer placelayeredtext \
+placelist placelistofpublications placelistofsorts placelistofsynonyms placelocalfootnotes \
+placelocalnotes placement placenamedfloat placenamedformula placenotes \
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 presetdocument 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 \
+popattribute popmacro popmode popsystemmode position \
+positionoverlay positionregionoverlay postponenotes predefinedfont predefinefont \
+predefinesymbol prefixedpagenumber prependetoks prependgvalue prependtocommalist \
+prependtoks prependtoksonce prependvalue presetdocument presetfieldsymbols \
+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 profiledbox profilegivenbox program project \
+pseudoMixedCapped pseudoSmallCapped pseudoSmallcapped pseudosmallcapped purenumber \
+pushattribute pushbutton pushmacro pushmode pushoutputstream \
+pushsystemmode qquad quad quads quitcommalist \
+quitprevcommalist quittypescriptscanning quotation quote raisebox \
+randomizetext randomnumber rawcounter rawcountervalue rawdate \
rawdoifelseinset rawdoifinset rawdoifinsetelse rawgetparameters rawprocessaction \
rawprocesscommacommand rawprocesscommalist rawstructurelistuservariable rawsubcountervalue rbox \
readfile readfixfile readjobfile readlocfile readsetfile \
@@ -2212,119 +2010,112 @@ registerhyphenationpattern registermenubuttons registersort registersynonym regi
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 \
+removeunwantedspaces replacefeature replaceincommalist replaceword rescan \
+rescanwithsetup resetMPdrawing resetMPenvironment resetMPinstance resetallattributes \
+resetandaddfeature resetbar 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 resolvedglyphdirect resolvedglyphstyled \
+restartcounter restorebox restorecatcodes restorecounter restorecurrentattributes \
+restoreendofline restoreglobalbodyfont reusableMPgraphic reuseMPgraphic reuserandomseed \
+revivefeature rfence rhbox right rightbottombox \
+rightbox righthbox rightorleftpageaction rightskipadaption rightsubguillemot \
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 \
+robustaddtocommalist robustdoifelseinset robustdoifinsetelse robustpretocommalist rollbutton \
+roman romannumerals rotate rtop ruledhbox \
+ruledhpack ruledmbox ruledtopv ruledtpack ruledvbox \
+ruledvpack ruledvtop runMPbuffer runninghbox safechar \
+sans sansbold sansnormal sansserif savebox \
+savebtxdataset savebuffer savecounter savecurrentattributes savenormalmeaning \
+savetaggedtwopassdata savetwopassdata sbox scale screen \
+sd secondoffivearguments secondoffourarguments secondofsixarguments secondofthreearguments \
+secondofthreeunexpanded secondoftwoarguments secondoftwounexpanded section 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 setfractions setgmeasure setgvalue \
+setgvariable setgvariables sethboxregister sethyphenatedurlafter sethyphenatedurlbefore \
+sethyphenatedurlnormal sethyphenationfeatures setinitial setinjector setinteraction \
+setinterfacecommand setinterfaceconstant setinterfaceelements setinterfacemessage setinterfacevariable \
+setinternalrendering setitaliccorrection setlayer setlayerframed setlayertext \
+setlinefiller setlocalhsize setmainbodyfont setmainparbuilder setmarker \
+setmarking setmathstyle setmeasure setmessagetext setmode \
+setnostrut setnote 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 setupMPgraphics setupMPinstance setupMPpage \
+setupMPvariables setupTABLE setupTEXpage setuparranging setupattachment \
+setupbackend setupbackground setupbackgrounds setupbar setupblackrules \
+setupblank setupbleeding setupblock setupbodyfont setupbookmark \
+setupbottom setupbottomtexts setupbtx setupbtxdataset setupbtxlist \
+setupbtxregister setupbtxrendering setupbuffer setupbutton setupcapitals \
+setupcaption setupcharacterkerning setupcharacterspacing setupchemical setupchemicalframed \
+setupclipping setupcollector setupcolor setupcolors setupcolumns \
+setupcolumnspan setupcombination setupcombinedlist setupcomment 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 setupfonts setupfontsolution \
+setupfooter setupfootertexts setupforms setupformula setupformulaframed \
+setupframed setupframedcontent setupframedtext setupglobalreferenceprefix setuphead \
+setupheadalternative setupheader setupheadertexts setupheadnumber setupheads \
+setuphelp setuphigh setuphighlight setuphyphenation setuphyphenmark \
+setupindentedtext setupindenting setupinitial setupinsertion setupinteraction \
+setupinteractionbar setupinteractionmenu setupinteractionscreen setupinterlinespace setupitaliccorrection \
+setupitemgroup setupitemizations setupitems setuplabel setuplanguage \
+setuplayer setuplayeredtext setuplayout setuplayouttext setuplinefiller \
+setuplinefillers 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 \
+setupmathfraction setupmathframed setupmathmatrix setupmathornament setupmathradical \
+setupmathstackers setupmathstyle setupmixedcolumns setupmodule setupnarrower \
+setupnotation setupnotations setupnote setupnotes setupoffset \
+setupoffsetbox setupoppositeplacing setupoutputroutine setuppagechecker setuppagecomment \
+setuppagegrid setuppagegridarea setuppagegridareatext setuppagegridlines setuppagegridspan \
+setuppagegridstart setuppageinjection setuppageinjectionalternative setuppagenumber setuppagenumbering \
+setuppageshift setuppagestate setuppagetransitions setuppairedbox setuppalet \
+setuppaper setuppapersize setupparagraph setupparagraphintro setupparagraphnumbering \
+setupparagraphs setupparallel setupperiods setupplacement setuppositionbar \
+setuppositioning setupprocessor setupprofile setupprograms setupquotation \
+setupquote setuprealpagenumber setupreferenceformat setupreferenceprefix setupreferencestructureprefix \
+setupreferencing setupregister setupregisters setuprenderingwindow setuprotate \
+setups setupscale setupscript setupscripts setupsectionblock \
+setupselector setupshift setupsidebar setupsorting setupspacing \
+setupspellchecking setupstartstop setupstretched setupstruts setupstyle \
+setupsubformula setupsubpagenumber setupsymbolset setupsynonyms setuptables \
+setuptabulate setuptabulation setuptagging 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 \
+setupunit setupurl setupuserpagenumber setupversion setupviewerlayer \
+setupvspacing setupwhitespace setupwithargument setupwithargumentswapped setupxml \
+setupxtable setuvalue setuxvalue setvalue setvariable \
+setvariables setvboxregister setvisualizerfont setvtopregister setwidthof \
+setxmeasure setxvalue setxvariable setxvariables sfrac \
+shapedhbox showallmakeup showattributes showbodyfont showbodyfontenvironment \
+showboxes showbtxdatasetauthors showbtxdatasetcompleteness showbtxdatasetfields showbtxfields \
showbtxhashedauthors showbtxtables showchardata showcharratio showcolor \
showcolorbar showcolorcomponents showcolorgroup showcolorset showcolorstruts \
showcounter showdirectives showdirsinmargin showedebuginfo showexperiments \
@@ -2336,236 +2127,200 @@ 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 \
+simplegroupedcommand 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 \
+smashboxed smashedhbox smashedvbox snaptogrid someheadnumber \
+somekindoftab someline somelocalfloat somenamedheadnumber someplace \
+somewhere sp space spanishNumerals spanishnumerals \
+speech splitatasterisk splitatcolon splitatcolons splitatcomma \
+splitdfrac splitfilename splitfloat splitfrac splitoffbase \
+splitofffull splitoffkind splitoffname splitoffpath splitoffroot \
+splitofftokens splitofftype splitstring spreadhbox sqrt \
+stackrel startJScode startJSpreamble startMPclip startMPcode \
+startMPdefinitions startMPdrawing startMPenvironment startMPextensions startMPinclusions \
+startMPinitializations startMPpage startMPpositiongraphic startMPpositionmethod startMPrun \
+startTABLE startTABLEbody startTABLEfoot startTABLEhead startTABLEnext \
+startTC startTD startTDs 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 \
+startallmodes startarrangedpages startaside startattachment startbackground \
+startbar startbinom startbitmapimage startblockquote startbtxrenderingdefinitions \
+startbuffer startbutton startcatcodetable startchapter startcharacteralign \
+startcheckedfences startchemical startcollect startcollecting startcolor \
+startcolorintent startcoloronly startcolorset startcolumns startcolumnspan \
+startcombination startcomment startcomponent startcontextcode startcontextdefinitioncode \
+startctxfunction startctxfunctiondefinition startcurrentcolor startcurrentlistentrywrapper startdbinom \
+startdelimited startdelimitedtext startdfrac startdisplaymath startdmath \
+startdocument starteffect startelement startembeddedxtable startendofline \
+startenvironment startexceptions startexpanded startexpandedcollect startextendedcatcodetable \
+startexternalfigurecollection startfigure startfitfieldframed startfittingpage startfloatcombination \
+startfont startfontclass startfontsolution startformula startformulas \
+startfrac startframed startframedcontent startframedtext startgoto \
+startgraphic startgridsnapping starthbox starthboxestohbox starthboxregister \
+starthead starthelptext starthiddenbar starthiding starthighlight \
+starthyphenation startimath startindentation startindentedtext startinmframed \
+startinteraction startinteractionmenu startinterface startintermezzo startintertext \
+startitem startitemgroup startitemize startknockout startlayout \
+startline startlinecorrection startlinefiller startlinenumbering startlinetable \
+startlinetablebody startlinetablecell startlinetablehead startlocalfootnotes startlocalheadsetup \
+startlocallinecorrection startlocalnotes startlocalsetups startlua startluacode \
+startluaparameterset startluasetups startmakeup startmarginblock startmarginrule \
+startmarkedcontent startmathmode startmathstyle startmatrices startmcframed \
+startmdformula startmframed startmixedcolumns startmode startmodeset \
+startmodule startmoduletestsection startmpformula startnamedsection startnamedsubformulas \
+startnarrow startnarrower startnegative startnicelyfilledbox startnobar \
+startnointerference startnotallmodes startnotext startnotmode startopposite \
+startoutputstream startoverbar startoverbars startoverlay startoverprint \
+startoverstrike startoverstrikes startpacked startpagecomment startpagefigure \
+startpagegrid startpagegridspan startpagelayout startpar startparagraph \
+startparagraphs startparagraphscell startparbuilder startpath startplaceformula \
+startplacepairedbox startpositioning startpositionoverlay startpositive startpostponing \
+startprocessassignmentcommand startprocessassignmentlist startprocesscommacommand startprocesscommalist startproduct \
+startproject startprotect startprotectedcolors startpublication startpunctuation \
+startquotation startquote startrandomized startrandomseed startrawsetups \
+startreadingfile startreferenceprefix startregime startregister startreusableMPgraphic \
+startscript startsdformula startsection startsectionblock startsectionblockenvironment \
+startsectionlevel startsetups startsfrac startshapebox startshift \
+startsidebar startsimplecolumns startspecialitem startspeech startspformula \
+startspread startstartstop startstaticMPfigure startstaticMPgraphic startstrictinspectnextcharacter \
+startstructurepageregister startstrut startstyle startsubformulas startsubject \
startsubjectlevel 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 \
+startsubsubsubsubsubject startsymbolset starttable starttablehead starttables \
+starttabletail starttabulate starttabulatehead starttabulatetail starttagged \
+starttbinom starttexcode starttexdefinition 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 \
+starttitle starttokens starttransparent starttypescript starttypescriptcollection \
+startunderbar startunderbars startunderdash startunderdashes startunderdot \
+startunderdots startunderrandom startunderrandoms startunderstrike startunderstrikes \
+startunframed startuniqueMPgraphic startuniqueMPpagegraphic startunpacked startusableMPgraphic \
+startuseMPgraphic startusemathstyleparameter startusingbtxspecification startvbox startvboxregister \
+startvboxtohbox startvboxtohboxseparator startviewerlayer startvtop startvtopregister \
+startxcell startxcellgroup startxfrac startxgroup startxmldisplayverbatim \
+startxmlinlineverbatim startxmlraw startxmlsetups startxrow startxrowgroup \
+startxtable startxtablebody startxtablefoot startxtablehead startxtablenext \
+startxxfrac stopJScode stopJSpreamble stopMPclip stopMPcode \
+stopMPdefinitions stopMPdrawing stopMPenvironment stopMPextensions stopMPinclusions \
+stopMPinitializations stopMPpage stopMPpositiongraphic stopMPpositionmethod stopMPrun \
+stopTABLE stopTABLEbody stopTABLEfoot stopTABLEhead stopTABLEnext \
+stopTC stopTD stopTDs stopTEXpage stopTH \
+stopTN stopTR stopTRs stopTX stopTY \
+stopallmodes stoparrangedpages stopaside stopattachment stopbackground \
+stopbar stopbinom stopbitmapimage stopblockquote stopbtxrenderingdefinitions \
+stopbuffer stopbutton stopcatcodetable stopchapter stopcharacteralign \
+stopcheckedfences stopchemical stopcollect stopcollecting stopcolor \
+stopcolorintent stopcoloronly stopcolorset stopcolumns stopcolumnspan \
+stopcombination stopcomment stopcomponent stopcontextcode stopcontextdefinitioncode \
+stopctxfunction stopctxfunctiondefinition stopcurrentcolor stopcurrentlistentrywrapper stopdbinom \
+stopdelimited stopdelimitedtext stopdfrac stopdisplaymath stopdmath \
+stopdocument stopeffect stopelement stopembeddedxtable stopendofline \
+stopenvironment stopexceptions stopexpanded stopexpandedcollect stopextendedcatcodetable \
+stopexternalfigurecollection stopfigure stopfitfieldframed stopfittingpage stopfloatcombination \
+stopfont stopfontclass stopfontsolution stopformula stopformulas \
+stopfrac stopframed stopframedcontent stopframedtext stopgoto \
+stopgraphic stopgridsnapping stophbox stophboxestohbox stophboxregister \
+stophead stophelptext stophiddenbar stophiding stophighlight \
+stophyphenation stopimath stopindentation stopindentedtext stopinmframed \
+stopinteraction stopinteractionmenu stopinterface stopintermezzo stopintertext \
+stopitem stopitemgroup stopitemize stopknockout stoplayout \
+stopline stoplinecorrection stoplinefiller stoplinenumbering stoplinetable \
+stoplinetablebody stoplinetablecell stoplinetablehead stoplocalfootnotes stoplocalheadsetup \
+stoplocallinecorrection stoplocalnotes stoplocalsetups stoplua stopluacode \
+stopluaparameterset stopluasetups stopmakeup stopmarginblock stopmarginrule \
+stopmarkedcontent stopmathmode stopmathstyle stopmatrices stopmcframed \
+stopmdformula stopmframed stopmixedcolumns stopmode stopmodeset \
+stopmodule stopmoduletestsection stopmpformula stopnamedsection stopnamedsubformulas \
+stopnarrow stopnarrower stopnegative stopnicelyfilledbox stopnobar \
+stopnointerference stopnotallmodes stopnotext stopnotmode stopopposite \
+stopoutputstream stopoverbar stopoverbars stopoverlay stopoverprint \
+stopoverstrike stopoverstrikes stoppacked stoppagecomment stoppagefigure \
+stoppagegrid stoppagegridspan stoppagelayout stoppar stopparagraph \
+stopparagraphs stopparagraphscell stopparbuilder stoppath stopplaceformula \
+stopplacepairedbox stoppositioning stoppositionoverlay stoppositive stoppostponing \
+stopprocessassignmentcommand stopprocessassignmentlist stopprocesscommacommand stopprocesscommalist stopproduct \
+stopproject stopprotect stopprotectedcolors stoppublication stoppunctuation \
+stopquotation stopquote stoprandomized stoprandomseed stoprawsetups \
+stopreadingfile stopreferenceprefix stopregime stopregister stopreusableMPgraphic \
+stopscript stopsdformula stopsection stopsectionblock stopsectionblockenvironment \
+stopsectionlevel stopsetups stopsfrac stopshapebox stopshift \
+stopsidebar stopsimplecolumns stopspecialitem stopspeech stopspformula \
stopspread stopstartstop stopstaticMPfigure stopstaticMPgraphic stopstrictinspectnextcharacter \
-stopstructurepageregister stopstrut stopstyle stopstyle stopsubformulas \
-stopsubject stopsubjectlevel 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 \
+stopstructurepageregister stopstrut stopstyle stopsubformulas stopsubject \
+stopsubjectlevel stopsubsection stopsubsentence stopsubstack stopsubsubject \
+stopsubsubsection stopsubsubsubject stopsubsubsubsection stopsubsubsubsubject stopsubsubsubsubsection \
+stopsubsubsubsubsubject stopsymbolset stoptable stoptablehead stoptables \
+stoptabletail stoptabulate stoptabulatehead stoptabulatetail stoptagged \
+stoptbinom stoptexcode stoptexdefinition stoptext stoptextbackground \
+stoptextbackgroundmanual stoptextcolor stoptextcolorintent stoptextflow stoptextrule \
+stoptitle stoptokens stoptransparent stoptypescript stoptypescriptcollection \
+stopunderbar stopunderbars stopunderdash stopunderdashes stopunderdot \
+stopunderdots stopunderrandom stopunderrandoms stopunderstrike stopunderstrikes \
+stopunframed stopuniqueMPgraphic stopuniqueMPpagegraphic stopunpacked stopusableMPgraphic \
+stopuseMPgraphic stopusemathstyleparameter stopusingbtxspecification stopvbox stopvboxregister \
+stopvboxtohbox stopvboxtohboxseparator stopviewerlayer stopvtop stopvtopregister \
+stopxcell stopxcellgroup stopxfrac stopxgroup stopxmldisplayverbatim \
+stopxmlinlineverbatim stopxmlraw stopxmlsetups stopxrow stopxrowgroup \
+stopxtable stopxtablebody stopxtablefoot stopxtablehead stopxtablenext \
+stopxxfrac stretched strictdoifelsenextoptional strictdoifnextoptionalelse stripcharacter \
+strippedcsname stripspaces structurelistuservariable structurenumber structuretitle \
+structureuservariable structurevariable strut strutdp strutht \
+struthtdp struttedbox strutwd style styleinstance \
+subject subpagenumber subsection subsentence substituteincommalist \
+subsubject subsubsection subsubsubject subsubsubsection subsubsubsubject \
+subsubsubsubsection subsubsubsubsubject subtractfeature swapcounts swapdimens \
+swapface swapmacros swaptypeface switchstyleonly switchtobodyfont \
+switchtocolor switchtointerlinespace 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 \
+tLeftrightarrow tRightarrow table tabulateautoline tabulateautorule \
+tabulateline tabulaterule taggedctxcommand taggedlabeltexts tbinom \
+tbox tequal testandsplitstring testcolumn testfeature \
+testfeatureonce testpage testpageonly testpagesync testtokens \
+tex texdefinition texsetup textcitation 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 \
+thainumerals thefirstcharacter thenormalizedbodyfontsize theremainingcharacters thickspace \
+thinrule thinrules thinspace thirdoffivearguments thirdoffourarguments \
+thirdofsixarguments thirdofthreearguments thirdofthreeunexpanded thookleftarrow thookrightarrow \
+threedigitrounding tibetannumerals tightlayer tinyfont title \
+tlap tleftarrow tleftharpoondown tleftharpoonup tleftrightarrow \
+tleftrightharpoons tmapsto tochar tolinenote topbox \
topleftbox toplinebox toprightbox topskippedbox tracecatcodetables \
tracedfontname traceoutputroutines tracepositions translate transparencycomponents \
-trel trightarrow trightharpoondown trightharpoonup trightleftharpoons \
-trightoverleftarrow triplebond truefilename truefontname ttraggedright \
+transparent trel trightarrow trightharpoondown trightharpoonup \
+trightleftharpoons trightoverleftarrow triplebond truefilename truefontname \
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 \
+txx typ type typebuffer typedefinedbuffer \
+typeface typefile typescriptone typescriptprefix typescriptthree \
+typescripttwo typesetbuffer typesetfile uconvertnumber uedcatcodecommand \
+undefinevalue undepthed 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 useblankparameter useblocks usebodyfont usebodyfontparameter \
-usebtxdataset usebtxdefinitions usecolors usecomponent usedirectory \
-usedummycolorparameter usedummystyleandcolor usedummystyleparameter useenvironment useexternaldocument \
-useexternalfigure useexternalrendering useexternalsoundtrack usefigurebase usefile \
-usegridparameter useindentingparameter useindentnextparameter useinterlinespaceparameter useinterlinespaceparameter \
+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 useblankparameter useblocks usebodyfont \
+usebodyfontparameter usebtxdataset usebtxdefinitions usecolors usecomponent \
+usedirectory usedummycolorparameter usedummystyleandcolor usedummystyleparameter useenvironment \
+useexternaldocument useexternalfigure useexternalrendering useexternalsoundtrack usefigurebase \
+usefile usegridparameter useindentingparameter useindentnextparameter 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 \
+utfupper utilityregisterlength vboxreference verbatim verbatimstring \
+verbosenumber version verticalgrowingbar verticalpositionbar vglue \
+viewerlayer vl vphantom vpos vsmash \
+vsmashbox vsmashed vspace vspacing wdofstring \
+weekday widthofstring widthspanningtext withoutpt word \
words wordtonumber writebetweenlist writedatatolist writestatus \
writetolist xLeftarrow xLeftrightarrow xRightarrow xdefconvertedargument \
xequal xfrac xhookleftarrow xhookrightarrow xleftarrow \
@@ -2586,15 +2341,15 @@ 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
+xmlregistereddocumentsetups xmlregisteredsetups 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=\
AMSTEX AfterPar Alphabeticnumerals AmSTeX \
@@ -2617,234 +2372,201 @@ 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 \
+MPvar MPvariable MPvv MPw MPwhd \
+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 TEXpage TaBlE TeX \
+TheNormalizedFontSize TransparencyHack VerboseNumber WidthSpanningText XETEX \
+XeTeX a abjadnaivenumerals abjadnodotnumerals abjadnumerals \
+activatespacehandler adaptcollector adaptedisposition adaptfontfeature adaptpapersize \
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 \
+aftertestandsplitstring ajustechamp alaligne alapage alignmentcharacter \
+allinputpaths alphabeticnumerals alwayscitation 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 \
+aside 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 \
+attachment autocap autodirhbox autodirvbox autodirvtop \
+autoinsertnextspace automathematics autosetups availablehsize averagecharwidth \
+backgroundimage backgroundimagefill backgroundline baha barrecouleur \
+barreinteraction bas basegrid baselineleftbox baselinemiddlebox \
+baselinerightbox bbox beforesplitstring beforetestandsplitstring big \
+bigbodyfont bigg bigger biggl biggm \
+biggr bigl bigm bigr bigskip \
+binom bitmapimage blap bleed bleedheight \
+bleedwidth blockligatures blockquote bodyfontenvironmentlist bodyfontsize \
+bold boldface bolditalic boldslanted booleanmodevalue \
+bottombox bottomleftbox bottomrightbox bouton boutonmenu \
+boutonsinteraction boxcursor boxmarker boxofsize boxreference \
+bpos bthiddencitation btxabbreviatedjournal btxaddjournal 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 \
+btxlistcitation btxloadjournalist btxoneorrange btxremapauthor btxsavejournalist \
+btxsetup btxsingularorplural btxsingularplural btxtextcitation cache \
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 \
+caracteres catcodetablename cbox centerbox centeredbox \
+centerednextbox cfrac champ changepolicecorps chapitre \
+chardescription charwidthlanguage checkcharacteralign checkedchar checkedfiller \
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 \
+checkparameters checkpreviousinjector checksoundtrack checktwopassdata checkvariables \
+chem chemical chemicalbottext chemicalmidtext chemicalsymbol \
+chemicaltext chemicaltoptext chiffresromains chineseallnumerals chinesecapnumerals \
+chinesenumerals citation cite citer clap \
+classfont cldcommand cldcontext cldloadfile cldprocessfile \
+cleftarrow clip clonechamp collect collectedtext \
+collectexpanded colonne colorcomponents colored coloronly \
+columnbreak combinepages commalistelement commalistsentence commalistsize \
+comment commentaire comparedimension comparedimensioneps comparegroupecouleur \
+comparepalette completebtxrendering completelist completelistofpublications completelistofsorts \
+completelistofsynonyms completenumeropage completeregistre complexorsimple complexorsimpleempty \
+composant composedcollector composedlayer compresult concernant \
+constantdimen constantdimenargument constantemptyargument constantnumber constantnumberargument \
+contentreference continuednumber continueifinputfile convertargument convertcommand \
+convertedcounter converteddimen convertedsubcounter convertitnumero convertmonth \
+convertvalue convertvboxtohbox copitchamp copypages copyparameters \
+copyposition 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 dactylographier dans datasetvariable date \
+datecourante dayoftheweek dayspermonth dbinom de \
+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 \
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 \
+definedfont defineeffect defineexpandable defineexternalfigure definefallbackfamily \
+definefieldbody definefieldbodyset definefieldcategory definefileconstant definefilefallback \
+definefilesynonym definefiller definefirstline definefittingpage definefontalternative \
+definefontfallback definefontfamily definefontfamilypreset definefontfeature definefontfile \
+definefontsize definefontsolution defineformula defineformulaalternative defineformulaframed \
+defineframed defineframedcontent defineframedtext definefrozenfont defineglobalcolor \
+definegraphictypesynonym definegridsnapping defineheadalternative definehelp definehigh \
+definehighlight definehspace definehypenationfeatures defineindentedtext defineindenting \
+defineinitial defineinsertion defineinteraction defineinteractionbar defineinterfaceconstant \
+defineinterfaceelement defineinterfacevariable defineinterlinespace defineintermediatecolor defineitemgroup \
+defineitems definelabelclass definelayerpreset definelinefiller 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 \
+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 definenamespace definenarrower definenote 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 \
+definit definitbloc definitblocsection definitbuffer definitcalque \
+definitchamp definitconversion definitcouleur definitdactylo definitdemarrestoppe \
+definitdescription definitdisposition definitenumeration definitenvironnementpolicecorps definitetiquette \
+definitflottant definitformatreference definitgroupecouleur definithbox definitliste \
+definitlisteimbriquee definitmakeup definitmarquage definitmenuinteraction definitpalette \
+definitparagraphes definitpilechamp definitpolice definitpolicecorps definitprofil \
+definitprogramme definitreference definitregistre definitrevetement definitsautdecolonne \
+definitsautdepage definitsection definitsouschamp definitstyle definitstylepolice \
+definitsymbole definitsymbolefigure definitsynonymepolice definitsynonymes definittabulation \
+definittaillepapier definittete definittexte definittrametableau definittri \
+definittype definitvide delimited delimitedtext demarreJScode \
+demarreJSpreamble demarreMPclip demarreMPcode demarreMPdefinitions demarreMPdrawing \
+demarreMPenvironment demarreMPextensions demarreMPinclusions demarreMPinitializations demarreMPpage \
+demarreMPpositiongraphic demarreMPpositionmethod demarreMPrun demarreTABLE demarreTABLEbody \
+demarreTABLEfoot demarreTABLEhead demarreTABLEnext demarreTC demarreTD \
+demarreTDs demarreTEXpage demarreTH demarreTN demarreTR \
+demarreTRs demarreTX demarreTY demarreallmodes demarrearrangedpages \
+demarrearriereplan demarreaside demarreattachment demarrebar demarrebinom \
+demarrebitmapimage demarreblockquote demarrebtxrenderingdefinitions demarrebuffer demarrebutton \
+demarrecatcodetable demarrechapitre demarrecharacteralign demarrecheckedfences demarrechemical \
+demarrecitation demarreciter demarrecollect demarrecollecting demarrecolorintent \
+demarrecoloronly demarrecolorset demarrecolumns demarrecolumnspan demarrecombination \
+demarrecomment demarrecommentaire demarrecomposant demarrecontextcode demarrecontextdefinitioncode \
+demarrecouleur demarrectxfunction demarrectxfunctiondefinition demarrecurrentcolor demarrecurrentlistentrywrapper \
+demarredbinom demarredelimited demarredelimitedtext demarredfrac demarrediscours \
+demarredisplaymath demarredmath demarredocument demarreeffect demarreelement \
+demarreembeddedxtable demarreendofline demarreenvironement demarreexceptions demarreexpanded \
+demarreexpandedcollect demarreextendedcatcodetable demarreexternalfigurecollection demarrefigure demarrefitfieldframed \
+demarrefittingpage demarrefloatcombination demarrefont demarrefontclass demarrefontsolution \
+demarreformula demarreformulas demarrefrac demarreframed demarreframedcontent \
+demarreframedtext demarregraphique demarregridsnapping demarregroupe demarrehbox \
+demarrehboxestohbox demarrehboxregister demarrehelptext demarrehiddenbar demarrehiding \
+demarrehighlight demarrehyphenation demarreimath demarreindentation demarreindentedtext \
+demarreinmframed demarreinteraction demarreinterface demarreintermezzo demarreintertext \
+demarreitemgroup demarreknockout demarrelayout demarreligne demarreligneregleetexte \
+demarrelinecorrection demarrelinefiller demarrelinenumbering demarrelinetable demarrelinetablebody \
+demarrelinetablecell demarrelinetablehead demarrelister demarrelocalfootnotes demarrelocalheadsetup \
+demarrelocallinecorrection demarrelocalnotes demarrelocalsetups demarrelua demarreluacode \
+demarreluaparameterset demarreluasetups demarremakeup demarremargereglee demarremarginblock \
+demarremarkedcontent demarremathmode demarremathstyle demarrematrices demarremcframed \
+demarremdformula demarremenuinteraction demarremframed demarremixedcolumns demarremode \
+demarremodeset demarremodule demarremoduletestsection demarrempformula demarrenamedsection \
+demarrenamedsubformulas demarrenarrow demarrenarrower demarrenegative demarrenicelyfilledbox \
+demarrenobar demarrenointerference demarrenotallmodes demarrenotext demarrenotmode \
+demarreopposite demarreoutputstream demarreoverbar demarreoverbars demarreoverlay \
+demarreoverprint demarrepagecomment demarrepagefigure demarrepagegrid demarrepagegridspan \
+demarrepagelayout demarrepar demarreparagraph demarreparagraphs demarreparagraphscell \
+demarreparbuilder demarrepath demarreplaceformule demarreplacepairedbox demarrepositioning \
+demarrepositionoverlay demarrepositive demarrepostponing demarreprocessassignmentcommand demarreprocessassignmentlist \
+demarreprocesscommacommand demarreprocesscommalist demarreproduit demarreprojet demarreprotect \
+demarreprotectedcolors demarrepublication demarrepunctuation demarrerandomized demarrerandomseed \
+demarrerawsetups demarrereadingfile demarrereferenceprefix demarreregime demarrereusableMPgraphic \
+demarrescript demarresdformula demarresection demarresectionblock demarresectionblockenvironment \
+demarresectionlevel demarresetups demarresfrac demarreshapebox demarreshift \
+demarresidebar demarresimplecolumns demarresousligne demarresouslignetout demarresoussection \
+demarresoussoussection demarresoussoussoussection demarresoussoussoussoussection demarresoussoussoussoussujet demarresoussoussoussujet \
+demarresoussoussujet demarresoussujet demarrespecialitem demarrespeech demarrespformula \
demarrespread demarrestartstop demarrestaticMPfigure demarrestaticMPgraphic demarrestrictinspectnextcharacter \
-demarrestrut demarrestyle demarrestyle demarresubformulas demarresubject \
-demarresubjectlevel 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 \
+demarrestrut demarrestyle demarresubformulas demarresubjectlevel demarresubsentence \
+demarresubstack demarresujet demarresurligne demarresurlignetout demarresymbolset \
+demarretable demarretableau demarretablehead demarretables demarretabletail \
+demarretabulate demarretabulatehead demarretabulatetail demarretagged demarretbinom \
+demarretete demarretexcode demarretexdefinition demarretext demarretextbackground \
+demarretextbackgroundmanual demarretextcolor demarretextcolorintent demarretexteaide demarretexteencadre \
+demarretextflow demarretitre demarretokens demarretransparent demarretypescript \
+demarretypescriptcollection demarreunderdash demarreunderdashes demarreunderdot demarreunderdots \
+demarreunderrandom demarreunderrandoms demarreunderstrike demarreunderstrikes demarreunframed \
+demarreuniqueMPgraphic demarreuniqueMPpagegraphic demarreunpacked demarreusableMPgraphic demarreuseMPgraphic \
+demarreusemathstyleparameter demarreusingbtxspecification demarreva demarrevbox demarrevboxregister \
+demarrevboxtohbox demarrevboxtohboxseparator demarreviewerlayer demarrevtop demarrevtopregister \
+demarrexcell demarrexcellgroup demarrexfrac demarrexgroup demarrexmldisplayverbatim \
+demarrexmlinlineverbatim demarrexmlraw demarrexmlsetups demarrexrow demarrexrowgroup \
+demarrextable demarrextablebody demarrextablefoot demarrextablehead demarrextablenext \
+demarrexxfrac depthofstring depthonlybox depthspanningtext determinecaracteristiqueliste \
+determinecaracteristiquesregistre determinenoflines determinenumerotete devanagarinumerals dfrac \
+digits dimensiontocount directcolor directcolored directconvertedcounter \
+directdummyparameter directgetboxllx directgetboxlly directhighlight directlocalframed \
+directluacode directselect directsetbar directsetup directsymbol \
+directvspacing dis disabledirectives disableexperiments disablemode \
+disableoutputstream disableparpositions disableregime disabletrackers discours \
displaymath displaymathematics displaymessage distributedhsize dividedsize \
doadaptleftskip doadaptrightskip doaddfeature doassign doassignempty \
doboundtext docheckassignment docheckedpagestate docheckedpair documentvariable \
@@ -2914,62 +2636,60 @@ doifvalueelse doifvaluenothing doifvaluenothingelse doifvaluesomething doifvaria
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 \
+doquintupleempty doquintuplegroupempty dorechecknextindentation dorecurse dorepeatwithcommand \
+doreplacefeature doresetandafffeature doresetattribute dorotatebox dosetattribute \
+dosetleftskipadaption dosetrightskipadaption dosetupcheckedinterlinespace doseventupleargument doseventupleempty \
+dosingleargument dosingleempty dosinglegroupempty dosixtupleargument dosixtupleempty \
+dostepwiserecurse dosubtractfeature 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 elapsedseconds elapsedtime eleftarrowfill \
+eleftharpoondownfill eleftharpoonupfill eleftrightarrowfill element elements \
+emphasisboldface emphasistypeface emptylines emspace enabledirectives \
+enableexperiments enablemode enableoutputstream enableparpositions enableregime \
+enabletrackers enskip enspace env environement \
+envvar eoverbarfill eoverbracefill eoverbracketfill eoverparentfill \
+epos equaldigits erightarrowfill erightharpoondownfill erightharpoonupfill \
+espace espacefixe espacesfixes 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 fence fenced fetchallmarkings \
+fetchallmarks fetchmark fetchmarking fetchonemark fetchonemarking \
+fetchruntinecommand fetchtwomarkings fetchtwomarks fichierdactylo fieldbody \
+fifthoffivearguments fifthofsixarguments figure 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 flushboxregister flushcollector flushlayer flushlocalfloats \
+flushnextbox flushnotes flushoutputstream flushshapebox flushtextflow \
+flushtokens flushtoks fontalternative fontbody fontchar \
+fontcharbyindex fontclass fontclassname fontface fontfeaturelist \
+fontsize fontstyle forcecharacterstripping forcelocalfloats forgeteverypar \
+forgetparameters 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 getprivatechar getprivateslot \
getrandomcount getrandomdimen getrandomfloat getrandomnumber getrandomseed \
getraweparameters getrawgparameters getrawnoflines getrawparameters getrawxparameters \
getreference getreferenceentry getroundednoflines getsubstring gettwopassdata \
@@ -2981,99 +2701,91 @@ gobbledoubleempty gobbleeightarguments gobblefivearguments gobblefiveoptionals g
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 \
+grabbufferdata grabbufferdatadirect grabuntil graphique grayvalue \
+greedysplitstring greeknumerals grille groupedcommand gsetboxllx \
+gsetboxlly gujaratinumerals gurmurkhinumerals hairspace halfwaybox \
+handletokens handwritten hash haut hboxofvbox \
+hboxreference hdofstring headhbox headnumbercontent headnumberdistance \
+headnumberwidth headreferenceattributes headsetupspacing headtextcontent headtextdistance \
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 \
+heightspanningtext helptext hglue hiddenbar 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 incrementcounter incrementedcounter incrementpagenumber incrementsubpagenumber \
+incrementvalue indentation infofont infofontbold inframed \
+infull inheritparameter inhibitblank initializeboxstack inlinebuffer \
+inlinedbox inlinemath inlinemathematics inlinemessage inlineordisplaymath \
+inlinerange inmframed innerflushshapebox 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 \
+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 intermezzo intertext invokepageheandler \
+istltdir istrtdir italic italicbold italiccorrection \
+itemtag jobfilename jobfilesuffix joursemaine kap \
+keeplinestogether keepunwantedspaces kerncharacters koreancirclenumerals koreannumerals \
+koreannumeralsc koreannumeralsp koreanparentnumerals languageCharacters languagecharacters \
+languagecharwidth langue langueprincipale largeurligne lastcounter \
+lastcountervalue lastdigit lastlinewidth 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 \
-mathitalic 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 \
+lateluacode layeredtext layerheight layerwidth lazysavetaggedtwopassdata \
+lazysavetwopassdata lbox left leftbottombox leftbox \
+lefthbox leftorrighthbox leftorrightvbox leftorrightvtop leftskipadaption \
+leftsubguillemot lefttopbox 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 limtatefirstline linespanningtext listcitation \
+listcite lister 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 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 marquage marquepage mat \
+math mathbf mathbi mathblackboard mathbs \
+mathcommand mathdefault mathematique mathfraktur mathfunction \
+mathit mathitalic mathop mathrm mathscript \
+mathsl mathss mathtext mathtextbf mathtextbi \
+mathtextbs mathtextit mathtextsl mathtexttf mathtf \
+mathtriplet mathtt mathupright mathword mathwordbf \
+mathwordbi mathwordbs mathwordit mathwordsl mathwordtf \
+mbox mcframed md measure measured \
+medskip medspace menuinteraction mequal message \
+metaTeX mfence mframed mfunction mfunctionlabeltext \
+mhbox mhookleftarrow mhookrightarrow middle middlebox \
+midhbox minimalhbox mixedcaps mkvibuffer mleftarrow \
+mleftharpoondown mleftharpoonup mleftrightarrow mleftrightharpoons mmapsto \
+moduleparameter mois molecule mono monobold \
+mononormal monthlong monthshort montrecadre montrecouleur \
+montredisposition montreedition montreenvironnementpolicecorps montregrille montregroupecouleur \
+montrejeusymboles montremakeup montrepalette montrepolicecorps montrereglages \
+montrestruts mp mprandomnumber mrel mrightarrow \
mrightharpoondown mrightharpoonup mrightleftharpoons mrightoverleftarrow mtext \
mtriplerel mtwoheadleftarrow mtwoheadrightarrow namedheadnumber namedstructureheadlocation \
namedstructureuservariable namedstructurevariable namedtaggedlabeltexts naturalhbox naturalhpack \
@@ -3083,68 +2795,58 @@ 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 \
+nextuserpage nextuserpagenumber nobar nocap nocitation \
+nocite nodetostring noffigurepages noflines noflocalfloats \
+noindentation noitem nonfrenchspacing nonmathematics normal \
+normalboldface normalframedwithsettings normalizebodyfontsize normalizedfontsize normalizefontdepth \
+normalizefontheight normalizefontline normalizefontwidth normalizetextdepth normalizetextheight \
+normalizetextline normalizetextwidth normaltypeface note notesymbol \
+ntimes numberofpoints numeroformule numeropage numeros \
+numerotete numerotetecourant obeydepth objectdepth objectheight \
+objectmargin objectwidth obox obtientmarquage offset \
+offsetbox onedigitrounding ordinaldaynumber ordinalstr oriente \
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 \
+outputstreamunvcopy over overbar overbars overbartext \
+overbarunderbar overbrace overbracetext overbraceunderbrace overbracket \
+overbrackettext overbracketunderbracket 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 pagestaterealpage \
+paletsize pdfTeX pdfactualtext pdfbackendactualtext pdfbackendcurrentresources \
+pdfbackendsetcatalog pdfbackendsetcolorspace pdfbackendsetextgstate pdfbackendsetinfo pdfbackendsetname \
+pdfbackendsetpageattribute pdfbackendsetpageresource pdfbackendsetpagesattribute pdfbackendsetpattern pdfbackendsetshade \
+pdfcolor pdfeTeX percent percentdimen 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 presetdocument 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 \
+placebtxrendering placecitation placecomments placecoteacote placecurrentformulanumber \
+placedbox placefloatwithsetups placeflottant placeformule placeframed \
+placehelp placeinitial placelayer placelayeredtext placelesunsaudessusdesautres \
+placeliste placelisteinmbriquee placelistofpublications placelistofsorts placelistofsynonyms \
+placelocalnotes placemarquespages placement placenamedfloat placenamedformula \
+placenotes placenotespdp placenotespdplocales placenumeropage placenumerotete \
+placepairedbox placeparallel placerawlist placeregistre placerenderingwindow \
+placesousformule placesurgrille placetextetete popattribute popmacro \
+popmode popsystemmode position positionoverlay positionregionoverlay \
+postponenotes predefinedfont predefinefont predefinesymbol prefixedpagenumber \
+prendbuffer prependetoks prependgvalue prependtocommalist prependtoks \
+prependtoksonce prependvalue presetdocument presetfieldsymbols 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 profiledbox \
+profilegivenbox programme projet pseudoMixedCapped pseudoSmallCapped \
+pseudoSmallcapped pseudosmallcapped purenumber pushattribute pushbutton \
+pushmacro pushmode pushoutputstream pushsystemmode qqpart \
+qquad quad quads quitcommalist quitprevcommalist \
+quittypescriptscanning raisebox randomizetext randomnumber rawcounter \
rawcountervalue rawdate rawdoifelseinset rawdoifinset rawdoifinsetelse \
rawgetparameters rawprocessaction rawprocesscommacommand rawprocesscommalist rawstructurelistuservariable \
rawsubcountervalue razmarquage rbox readfile readfixfile \
@@ -3154,56 +2856,52 @@ 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 \
+reglearrangement reglearriereplan reglearriereplans reglebarreinteraction reglebloc \
+regleblocsection reglebuffer reglecapitales reglechamp reglechamps \
+regleclipping reglecolonnes reglecommentaire reglecommentairepage reglecompoetroite \
+reglecomposeenalinea reglecouleur reglecouleurs regledactylo regledemarrestoppe \
+regledisposition regleecraninteraction regleelements regleencadre regleentete \
+regleepaisseurligne regleespaceblanc regleespacement regleespacementinterligne regleflottant \
+regleformulaires reglegroupeselements regleinf regleinteraction regleintitule \
+reglejeusymboles reglelangue 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 \
+regleparagraphes reglepdp regleplacementopposition reglepolicecorps reglepositionnement \
+regleprogrammes reglereferencage regleregistre regleremplitligne regleremplitlignesreglees \
+regleseparationflottant reglesousnumeropage reglesup reglesynonymes regletableaux \
+regletabulation regletaillepapier regletete regletetes regletexte \
+regletextesentete regletextesinf regletextespdp regletextessup regletextestexte \
+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 \
+replaceincommalist replaceword rescan rescanwithsetup resetMPdrawing \
+resetMPenvironment resetMPinstance resetallattributes resetandaddfeature resetbar \
+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 \
+resolvedglyphdirect resolvedglyphstyled restartcounter restorebox restorecatcodes \
+restorecounter restorecurrentattributes restoreendofline restoreglobalbodyfont reusableMPgraphic \
+reuseMPgraphic reuserandomseed revivefeature rfence rhbox \
+right rightbottombox rightbox righthbox rightorleftpageaction \
+rightskipadaption rightsubguillemot righttolefthbox righttoleftvbox righttoleftvtop \
+righttopbox rlap robustaddtocommalist robustdoifelseinset robustdoifinsetelse \
+robustpretocommalist rollbutton roman rtop ruledhbox \
ruledhpack ruledmbox ruledtopv ruledtpack ruledvbox \
-ruledvpack ruledvtop runMPbuffer safechar sans \
-sansbold sansespace sanslignesenteteetpdp sanslignessupetinf sansnormal \
-sansserif savebox savebtxdataset savebuffer savebuffer \
+ruledvpack ruledvtop runMPbuffer runninghbox safechar \
+sans sansbold sansespace sanslignesenteteetpdp sanslignessupetinf \
+sansnormal sansserif savebox savebtxdataset savebuffer \
savecounter savecurrentattributes savenormalmeaning savetaggedtwopassdata savetwopassdata \
-sbox secondoffivearguments secondoffourarguments secondofsixarguments secondofthreearguments \
-secondofthreeunexpanded secondoftwoarguments secondoftwounexpanded section seeindex \
+sbox sd secondoffivearguments secondoffourarguments secondofsixarguments \
+secondofthreearguments secondofthreeunexpanded secondoftwoarguments secondoftwounexpanded section \
select selectionneblocs separeflottant serializecommalist serializedcommalist \
serif serifbold serifnormal setJSpreamble setMPlayer \
setMPpositiongraphic setMPpositiongraphicrange setMPtext setMPvariable setMPvariables \
@@ -3214,14 +2912,14 @@ 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 \
+setfontcolorsheme setfontfeature setfontsolution setfontstrut setfractions \
+setgmeasure setgvalue setgvariable setgvariables sethboxregister \
+sethyphenatedurlafter sethyphenatedurlbefore sethyphenatedurlnormal sethyphenationfeatures setinitial \
+setinjector setinteraction setinterfacecommand setinterfaceconstant setinterfaceelements \
+setinterfacemessage setinterfacevariable setinternalrendering setitaliccorrection setlayer \
+setlayerframed setlayertext setlinefiller setlocalhsize setmainbodyfont \
+setmainparbuilder setmarker setmarking setmathstyle setmeasure \
+setmessagetext setmode setnostrut setnote setnotetext \
setobject setoldstyle setpagegrid setpagereference setpagestate \
setpagestaterealpageno setpenalties setpercentdimen setposition setpositionbox \
setpositiondata setpositiondataplus setpositiononly setpositionplus setpositionstrut \
@@ -3230,237 +2928,213 @@ setreplacement setrigidcolumnbalance setrigidcolumnhsize setscript setsectionblo
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 \
+setuevalue setugvalue setunreferencedobject setup setupMPgraphics \
+setupMPinstance setupMPpage setupMPvariables setupTABLE setupTEXpage \
+setupattachment setupbackend setupbar setupbleeding setupbookmark \
+setupbtx setupbtxdataset setupbtxlist setupbtxregister setupbtxrendering \
+setupbutton setupcharacterkerning setupcharacterspacing setupchemical setupchemicalframed \
+setupcollector setupcolumnspan setupcombination setupcounter setupdataset \
+setupdelimitedtext setupdescription setupdirections setupdocument setupeffect \
+setupenumeration setupenv setupexport setupexternalfigure setupexternalsoundtracks \
+setupfieldbody setupfieldcategory setupfieldcontentframed setupfieldlabelframed setupfieldtotalframed \
+setupfiller setupfirstline setupfittingpage setupfloatcaption setupfontexpansion \
+setupfontprotrusion setupfonts setupfontsolution setupformula setupformulaframed \
+setupframedcontent setupframedtext setupglobalreferenceprefix setupheadalternative setuphelp \
+setuphigh setuphighlight setuphyphenation setupindentedtext setupinitial \
+setupinsertion setupitaliccorrection setupitemgroup setuplabel setuplayer \
+setuplayeredtext setuplayouttext setuplinefiller setuplinefillers setuplinenote \
+setuplinetable setuplistalternative setuplistextra setuplocalfloats setuplocalinterlinespace \
+setuplow setuplowhigh setuplowmidhigh setupmarginblock setupmargindata \
+setupmarginframed setupmarginrule setupmathalignment setupmathcases setupmathematics \
+setupmathfence setupmathfraction setupmathframed setupmathmatrix setupmathornament \
+setupmathradical setupmathstackers setupmathstyle setupmixedcolumns setupmodule \
+setupnotation setupnotations setupnote setupnotes setupoffset \
+setupoffsetbox setupoutputroutine setuppagechecker setuppagegrid setuppagegridarea \
+setuppagegridareatext setuppagegridlines setuppagegridspan setuppagegridstart setuppageinjection \
+setuppageinjectionalternative setuppageshift setuppagestate setuppairedbox setupparagraph \
+setupparagraphintro setupparallel setupperiods setupplacement setuppositionbar \
+setupprocessor setupprofile setupquotation setuprealpagenumber setupreferenceformat \
+setupreferenceprefix setupreferencestructureprefix setupregisters setuprenderingwindow setups \
+setupscale setupscript setupscripts setupselector setupshift \
+setupsidebar setupspellchecking setupstretched setupstruts setupstyle \
+setupsubformula setuptabulation setuptagging setuptextbackground setuptextflow \
+setuptooltip setupunit 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 \
+setvboxregister setvisualizerfont setvtopregister setwidthof setxmeasure \
+setxvalue setxvariable setxvariables sfrac shapedhbox \
+showallmakeup showattributes showboxes showbtxdatasetauthors showbtxdatasetcompleteness \
+showbtxdatasetfields 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 simplegroupedcommand 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 \
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 \
+sousnumeropage soussection soussoussection soussoussoussection soussoussoussoussection \
+soussoussoussoussujet soussoussoussujet soussoussujet soussujet sp \
+spanishNumerals spanishnumerals speech splitatasterisk splitatcolon \
+splitatcolons splitatcomma splitdfrac splitfilename splitfrac \
+splitoffbase splitofffull splitoffkind splitoffname splitoffpath \
+splitoffroot splitofftokens splitofftype splitstring spreadhbox \
+sqrt stackrel startregister startstructurepageregister stoppeJScode \
+stoppeJSpreamble stoppeMPclip stoppeMPcode stoppeMPdefinitions stoppeMPdrawing \
+stoppeMPenvironment stoppeMPextensions stoppeMPinclusions stoppeMPinitializations stoppeMPpage \
+stoppeMPpositiongraphic stoppeMPpositionmethod stoppeMPrun stoppeTABLE stoppeTABLEbody \
+stoppeTABLEfoot stoppeTABLEhead stoppeTABLEnext stoppeTC stoppeTD \
+stoppeTDs stoppeTEXpage stoppeTH stoppeTN stoppeTR \
+stoppeTRs stoppeTX stoppeTY stoppeallmodes stoppearrangedpages \
+stoppearriereplan stoppeaside stoppeattachment stoppebar stoppebinom \
+stoppebitmapimage stoppeblockquote stoppebtxrenderingdefinitions stoppebuffer stoppebutton \
+stoppecatcodetable stoppechapitre stoppecharacteralign stoppecheckedfences stoppechemical \
+stoppecitation stoppeciter stoppecollect stoppecollecting stoppecolorintent \
+stoppecoloronly stoppecolorset stoppecolumns stoppecolumnspan stoppecombination \
+stoppecomment stoppecommentaire stoppecomposant stoppecontextcode stoppecontextdefinitioncode \
+stoppecouleur stoppectxfunction stoppectxfunctiondefinition stoppecurrentcolor stoppecurrentlistentrywrapper \
+stoppedbinom stoppedelimited stoppedelimitedtext stoppedfrac stoppediscours \
+stoppedisplaymath stoppedmath stoppedocument stoppeeffect stoppeelement \
+stoppeembeddedxtable stoppeendofline stoppeenvironement stoppeexceptions stoppeexpanded \
+stoppeexpandedcollect stoppeextendedcatcodetable stoppeexternalfigurecollection stoppefigure stoppefitfieldframed \
+stoppefittingpage stoppefloatcombination stoppefont stoppefontclass stoppefontsolution \
+stoppeformula stoppeformulas stoppefrac stoppeframed stoppeframedcontent \
+stoppeframedtext stoppegraphique stoppegridsnapping stoppegroupe stoppehbox \
+stoppehboxestohbox stoppehboxregister stoppehelptext stoppehiddenbar stoppehiding \
+stoppehighlight stoppehyphenation stoppeimath stoppeindentation stoppeindentedtext \
+stoppeinmframed stoppeinteraction stoppeinterface stoppeintermezzo stoppeintertext \
+stoppeitemgroup stoppeknockout stoppelayout stoppeligne stoppeligneregleetexte \
+stoppelinecorrection stoppelinefiller stoppelinenumbering stoppelinetable stoppelinetablebody \
+stoppelinetablecell stoppelinetablehead stoppelister stoppelocalfootnotes stoppelocalheadsetup \
+stoppelocallinecorrection stoppelocalnotes stoppelocalsetups stoppelua stoppeluacode \
+stoppeluaparameterset stoppeluasetups stoppemakeup stoppemargereglee stoppemarginblock \
+stoppemarkedcontent stoppemathmode stoppemathstyle stoppematrices stoppemcframed \
+stoppemdformula stoppemenuinteraction stoppemframed stoppemixedcolumns stoppemode \
+stoppemodeset stoppemodule stoppemoduletestsection stoppempformula stoppenamedsection \
+stoppenamedsubformulas stoppenarrow stoppenarrower stoppenegative stoppenicelyfilledbox \
+stoppenobar stoppenointerference stoppenotallmodes stoppenotext stoppenotmode \
+stoppeopposite stoppeoutputstream stoppeoverbar stoppeoverbars 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 stoppesubjectlevel 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 \
+stoppepagelayout stoppepar stoppeparagraph stoppeparagraphs stoppeparagraphscell \
+stoppeparbuilder stoppepath stoppeplaceformule stoppeplacepairedbox stoppepositioning \
+stoppepositionoverlay stoppepositive stoppepostponing stoppeprocessassignmentcommand stoppeprocessassignmentlist \
+stoppeprocesscommacommand stoppeprocesscommalist stoppeproduit stoppeprojet stoppeprotect \
+stoppeprotectedcolors stoppepublication stoppepunctuation stopperandomized stopperandomseed \
+stopperawsetups stoppereadingfile stoppereferenceprefix stopperegime stoppereusableMPgraphic \
+stoppescript stoppesdformula stoppesection stoppesectionblock stoppesectionblockenvironment \
+stoppesectionlevel stoppesetups stoppesfrac stoppeshapebox stoppeshift \
+stoppesidebar stoppesimplecolumns stoppesousligne stoppesouslignetout stoppesoussection \
+stoppesoussoussection stoppesoussoussoussection stoppesoussoussoussoussection stoppesoussoussoussoussujet stoppesoussoussoussujet \
+stoppesoussoussujet stoppesoussujet stoppespecialitem stoppespeech stoppespformula \
+stoppespread stoppestartstop stoppestaticMPfigure stoppestaticMPgraphic stoppestrictinspectnextcharacter \
+stoppestrut stoppestyle stoppesubformulas stoppesubjectlevel stoppesubsentence \
+stoppesubstack stoppesujet stoppesurligne stoppesurlignetout stoppesymbolset \
+stoppetable stoppetableau stoppetablehead stoppetables stoppetabletail \
+stoppetabulate stoppetabulatehead stoppetabulatetail stoppetagged stoppetbinom \
+stoppetete stoppetexcode stoppetexdefinition stoppetext stoppetextbackground \
+stoppetextbackgroundmanual stoppetextcolor stoppetextcolorintent stoppetexteaide stoppetexteencadre \
+stoppetextflow stoppetitre stoppetokens stoppetransparent stoppetypescript \
+stoppetypescriptcollection stoppeunderdash stoppeunderdashes stoppeunderdot stoppeunderdots \
+stoppeunderrandom stoppeunderrandoms stoppeunderstrike stoppeunderstrikes stoppeunframed \
+stoppeuniqueMPgraphic stoppeuniqueMPpagegraphic stoppeunpacked stoppeusableMPgraphic stoppeuseMPgraphic \
+stoppeusemathstyleparameter stoppeusingbtxspecification stoppeva stoppevbox stoppevboxregister \
+stoppevboxtohbox stoppevboxtohboxseparator stoppeviewerlayer stoppevtop stoppevtopregister \
+stoppexcell stoppexcellgroup stoppexfrac stoppexgroup stoppexmldisplayverbatim \
+stoppexmlinlineverbatim stoppexmlraw stoppexmlsetups stoppexrow stoppexrowgroup \
+stoppextable stoppextablebody stoppextablefoot stoppextablehead stoppextablenext \
+stoppexxfrac stopregister stopstructurepageregister strictdoifelsenextoptional strictdoifnextoptionalelse \
+stripcharacter strippedcsname stripspaces structurelistuservariable structurenumber \
+structuretitle structureuservariable structurevariable strut strutdp \
+strutht struthtdp struttedbox strutwd style \
+styleinstance subsentence substituteincommalist subtractfeature sujet \
+swapcounts swapdimens swapface swapmacros swaptypeface \
+switchstyleonly switchtocolor switchtointerlinespace symbole symbolreference \
+synchronizeblank synchronizeindenting synchronizemarking synchronizeoutputstreams synchronizestrut \
+synchronizewhitespace systemlog systemlogfirst systemloglast systemsetups \
+tLeftarrow tLeftrightarrow tRightarrow tableau tabulateautoline \
+tabulateautorule tabulateline tabulaterule taggedctxcommand taggedlabeltexts \
+tapebuffer tbinom tbox tequal testandsplitstring \
+testcolumn testfeature testfeatureonce testpage testpageonly \
+testpagesync testtokens tex texdefinition texsetup \
+textcitation textcite textcontrolspace texteaide texteencadre \
+textenotepdp textflowcollector textmath textminus textormathchar \
+textplus textvisiblespace tfrac thainumerals thefirstcharacter \
+thenormalizedbodyfontsize theremainingcharacters thickspace thinspace thirdoffivearguments \
+thirdoffourarguments thirdofsixarguments thirdofthreearguments thirdofthreeunexpanded thookleftarrow \
+thookrightarrow threedigitrounding tibetannumerals tightlayer tinyfont \
+titre tlap tleftarrow tleftharpoondown tleftharpoonup \
+tleftrightarrow tleftrightharpoons tmapsto tochar tolinenote \
+topbox topleftbox toplinebox toprightbox topskippedbox \
+tracecatcodetables tracedfontname traceoutputroutines tracepositions traduire \
+traiteblocs traitfin traitsfins transparencycomponents transparent \
+trel trightarrow trightharpoondown trightharpoonup trightleftharpoons \
+trightoverleftarrow triplebond truefilename truefontname ttriplerel \
+ttwoheadleftarrow ttwoheadrightarrow twodigitrounding tx txx \
+typ typedefinedbuffer typeface typescriptone typescriptprefix \
+typescriptthree typescripttwo typesetbuffer typesetfile uconvertnumber \
+uedcatcodecommand undefinevalue undepthed 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 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 useblankparameter 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
+useMPvariables useblankparameter usebodyfont usebodyfontparameter usebtxdataset \
+usebtxdefinitions usecolors usecomponent usedummycolorparameter usedummystyleandcolor \
+usedummystyleparameter useenvironment useexternalrendering usefigurebase usefile \
+usegridparameter useindentingparameter useindentnextparameter 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 verbatim \
+verbatimstring verbosenumber version verticalgrowingbar verticalpositionbar \
+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 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=\
AMSTEX AfterPar Alphabeticnumerals AmSTeX \
@@ -3483,411 +3157,371 @@ 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 \
+MPw MPwhd 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 TEXpage TaBlE TeX \
+TheNormalizedFontSize TransparencyHack VerboseNumber WidthSpanningText XETEX \
+XeTeX abjadnaivenumerals abjadnodotnumerals abjadnumerals activatespacehandler \
+adaptcollector adaptfontfeature adaptpapersize adattacampo adattalayout \
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 \
+aftertestandsplitstring al alignmentcharacter allinputpaths alphabeticnumerals \
+alwayscitation alwayscite 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 argomento \
+asciistr aside 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 \
+astype attachment autocap autodirhbox autodirvbox \
+autodirvtop autoinsertnextspace automathematics autosetups availablehsize \
+averagecharwidth backgroundimage backgroundimagefill backgroundline barracolori \
+barrainterazione basegrid baselineleftbox baselinemiddlebox baselinerightbox \
+bbox beforesplitstring beforetestandsplitstring big bigbodyfont \
+bigg bigger biggl biggm biggr \
+bigl bigm bigr bigskip binom \
+bitmapimage blap bleed bleedheight bleedwidth \
+blockligatures blockquote bodyfontenvironmentlist bodyfontsize bold \
+boldface bolditalic boldslanted booleanmodevalue bottombox \
+bottomleftbox bottomrightbox boxcursor boxmarker boxofsize \
+boxreference bpos bthiddencitation btxabbreviatedjournal btxaddjournal \
+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 btxlistcitation btxloadjournalist btxoneorrange btxremapauthor \
+btxsavejournalist btxsetup btxsingularorplural btxsingularplural btxtextcitation \
+calligraphic cambiaafontdeltesto camel campi cap \
+capello capitolo capoverso catcodetablename cbox \
+centerbox centeredbox centerednextbox cfrac chardescription \
+charwidthlanguage checkcharacteralign checkedchar checkedfiller checkedstrippedcsname \
+checkinjector checknextindentation checknextinjector checkpage checkparameters \
+checkpreviousinjector checksoundtrack checktwopassdata checkvariables chemical \
+chemicalbottext chemicalmidtext chemicalsymbol chemicaltext chemicaltoptext \
+chim chineseallnumerals chinesecapnumerals chinesenumerals circondato \
+citation citazione cite clap classfont \
+cldcommand cldcontext cldloadfile cldprocessfile cleftarrow \
+clip clonacampo collect collectedtext collectexpanded \
+colonna colorcomponents colore colored coloregrigio \
+coloronly columnbreak combinepages commalistelement commalistsentence \
+commalistsize comment commento comparedimension comparedimensioneps \
+completebtxrendering completelist completelistofpublications completelistofsorts completelistofsynonyms \
+completeregister complexorsimple complexorsimpleempty 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 \
+convertvboxtohbox copiacampo copypages copyparameters copyposition \
+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 da daqualcheparte \
+data datadioggi datasetvariable dayoftheweek dayspermonth \
+dbinom 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 definecomplexorsimpleempty defineconversionset definecounter \
+definedataset definedelimitedtext definedfont defineeffect defineexpandable \
+defineexternalfigure 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 \
+definefittingpage definefontalternative definefontfallback definefontfamily definefontfamilypreset \
+definefontfeature definefontfile definefontsize definefontsolution defineformula \
+defineformulaalternative defineformulaframed defineframedcontent definefrozenfont defineglobalcolor \
+definegraphictypesynonym definegridsnapping defineheadalternative definehelp definehigh \
+definehighlight definehspace definehypenationfeatures defineindentedtext defineindenting \
+defineinitial defineinsertion defineinteraction defineinteractionbar defineinterfaceconstant \
+defineinterfaceelement defineinterfacevariable defineinterlinespace defineintermediatecolor defineitemgroup \
+defineitems definelabelclass definelayer definelayerpreset definelinefiller \
+definelinenote definelinenumbering definelines definelistalternative definelistextra \
+definelow definelowhigh definelowmidhigh definemarginblock definemargindata \
+definemarker 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 definenamespace definenarrower definenote \
+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 definisciambientefontdeltesto definisciblocco \
+definiscibloccosezione definiscibuffer definiscicampo definiscicapoversi definiscicolore \
+definisciconversione definiscidescrizione definiscidimensionicarta definiscielenco definiscielencocombinato \
+definiscienumerazione definiscietichetta definiscifigurasimbolo definiscifont definiscifontdeltesto \
+definisciformatoriferimento definiscigruppocolori definiscihbox definisciincorniciato definisciiniziatermina \
+definiscilayout definiscimakeup definiscimarcatura definiscimenuinterazione definiscimodellotabella \
+definiscioggettomobile definisciordinamento definisciprofilo definisciprogramma definisciregistro \
+definisciriferimento definiscisezione definiscisimbolo definiscisinonimi definiscisinonimofont \
+definiscisottocampo definiscisovrapposizione definiscistackcampi definiscistile definiscistilefont \
+definiscitabulato 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 \
+determinenoflines devanagarinumerals dfrac digits dimensiontocount \
+directcolor 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 dorepeatwithcommand doreplacefeature doresetandafffeature doresetattribute \
+dorotatebox dosetattribute dosetleftskipadaption dosetrightskipadaption dosetupcheckedinterlinespace \
+doseventupleargument doseventupleempty dosingleargument dosingleempty dosinglegroupempty \
+dosixtupleargument dosixtupleempty dostepwiserecurse dosubtractfeature 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 \
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 \
+eleftharpoonupfill eleftrightarrowfill elementi elemento elenco \
+emphasisboldface emphasistypeface emptylines emspace enabledirectives \
+enableexperiments enablemode enableoutputstream enableparpositions enableregime \
+enabletrackers enskip enspace env envvar \
+eoverbarfill eoverbracefill eoverbracketfill eoverparentfill epos \
+equaldigits erightarrowfill erightharpoondownfill erightharpoonupfill 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 fence fenced fetchallmarkings fetchallmarks \
+fetchmark fetchmarking fetchonemark fetchonemarking fetchruntinecommand \
+fetchtwomarkings fetchtwomarks fieldbody fifthoffivearguments fifthofsixarguments \
+figura 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 flushboxregister \
+flushcollector flushlayer flushlocalfloats flushnextbox flushnotes \
+flushoutputstream flushshapebox flushtextflow flushtokens flushtoks \
+fontalternative fontbody fontchar fontcharbyindex fontclass \
+fontclassname fontface fontfeaturelist fontsize fontstyle \
+forcecharacterstripping forcelocalfloats forgeteverypar forgetparameters 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 getprivatechar \
+getprivateslot 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 grabbufferdata grabbufferdatadirect grabuntil \
+grafico grayvalue greedysplitstring greeknumerals griglia \
+groupedcommand gsetboxllx gsetboxlly gujaratinumerals gurmurkhinumerals \
+hairspace halfwaybox handletokens handwritten hash \
+hboxofvbox hboxreference hdofstring headhbox headnumbercontent \
+headnumberdistance headnumberwidth headreferenceattributes headsetupspacing headtextcontent \
+headtextdistance headtextwidth headvbox headwidth heightanddepthofstring \
+heightofstring heightspanningtext helptext hglue hiddenbar \
+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 impostaampiezzariga \
+impostabarrainterazione impostablocco impostabloccosezione impostabuffer impostacampi \
+impostacampo impostacapoversi impostacaption impostacima impostaclippling \
+impostacolonne impostacolore impostacolori impostacommento impostacommentopagina \
+impostadimensionicarta impostaelementi impostaelencazioni impostaelenco impostaelencocombinato \
+impostafondo impostafontdeltesto impostaforms impostaincorniciato impostainiziatermina \
+impostainstestazione impostainterazione impostainterlinea impostalayout 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 \
+impostarientro impostariferimento impostarighe impostarigheriempimento impostarigovuoto \
+impostarotazione impostaschermointerazione impostasegnosillabazione impostasetsimboli impostasfondi \
+impostasfondo impostasinonimi impostaspaziatura impostaspaziobianco impostaspezzamentooggettomobile \
+impostatabelle impostatabulato impostatavolozza impostatesta impostateste \
+impostatesticima impostatestifondo impostatestiintestazioni impostatestipdp impostatesto \
+impostatestotesti impostatolleranza impostatransizionepagina impostatype impostatyping \
+impostaurl in includemenu includeversioninfo incorniciato \
+increment incrementcounter incrementedcounter incrementpagenumber incrementsubpagenumber \
+incrementvalue indentation infofont infofontbold inheritparameter \
+inhibitblank initializeboxstack iniziaJScode iniziaJSpreamble iniziaMPclip \
+iniziaMPcode iniziaMPdefinitions iniziaMPdrawing iniziaMPenvironment iniziaMPextensions \
+iniziaMPinclusions iniziaMPinitializations iniziaMPpage iniziaMPpositiongraphic iniziaMPpositionmethod \
+iniziaMPrun iniziaTABLE iniziaTABLEbody iniziaTABLEfoot iniziaTABLEhead \
+iniziaTABLEnext iniziaTC iniziaTD iniziaTDs iniziaTEXpage \
+iniziaTH iniziaTN iniziaTR iniziaTRs iniziaTX \
+iniziaTY iniziaallmodes iniziaambiente iniziaargomento iniziaarrangedpages \
+iniziaaside iniziaattachment iniziabar iniziabinom iniziabitmapimage \
+iniziablockquote iniziabtxrenderingdefinitions iniziabuffer iniziabutton iniziacapitolo \
+iniziacapoverso iniziacatcodetable iniziacharacteralign iniziacheckedfences iniziachemical \
+iniziacitazione iniziacollect iniziacollecting iniziacolore iniziacolorintent \
+iniziacoloronly iniziacolorset iniziacolumns iniziacolumnspan iniziacombination \
+iniziacomment iniziacommento iniziacomponenet iniziacontextcode iniziacontextdefinitioncode \
+iniziactxfunction iniziactxfunctiondefinition iniziacurrentcolor iniziacurrentlistentrywrapper iniziadbinom \
+iniziadelimited iniziadelimitedtext iniziadfrac iniziadisplaymath iniziadmath \
+iniziadocument iniziaeffect iniziaelement iniziaelemento iniziaelenco \
+iniziaembeddedxtable iniziaendofline iniziaexceptions iniziaexpanded iniziaexpandedcollect \
+iniziaextendedcatcodetable iniziaexternalfigurecollection iniziafigura iniziafigure iniziafitfieldframed \
+iniziafittingpage iniziafloatcombination iniziafont iniziafontclass iniziafontsolution \
+iniziaformula iniziaformulas iniziafrac iniziaframedcontent iniziaframedtext \
+iniziagrafico iniziagridsnapping iniziahbox iniziahboxestohbox iniziahboxregister \
+iniziahelptext iniziahiddenbar iniziahiding iniziahighlight iniziahyphenation \
+iniziaimath iniziaimpaccato iniziaincorniciato iniziaindentation iniziaindentedtext \
+iniziainmframed iniziainteraction iniziainterface iniziaintermezzo iniziaintertext \
+iniziaitemgroup iniziaknockout inizialayout inizialineamargine inizialineatesto \
+inizialinecorrection inizialinefiller inizialinenumbering inizialinetable inizialinetablebody \
+inizialinetablecell inizialinetablehead inizialocalfootnotes inizialocalheadsetup inizialocallinecorrection \
+inizialocalnotes inizialocalsetups inizialua inizialuacode inizialuaparameterset \
+inizialuasetups iniziamakeup iniziamarginblock iniziamarkedcontent iniziamathmode \
+iniziamathstyle iniziamatrices iniziamcframed iniziamdformula iniziamenuinterattivo \
+iniziamenzione iniziamettiformula iniziamframed iniziamixedcolumns iniziamode \
+iniziamodeset iniziamodule iniziamoduletestsection iniziampformula inizianamedsection \
+inizianamedsubformulas inizianarrow inizianarrower inizianegative inizianicelyfilledbox \
+inizianobar inizianointerference inizianotallmodes inizianotext inizianotmode \
+iniziaopposite iniziaoutputstream iniziaoverlay iniziaoverprint iniziapagecomment \
+iniziapagefigure iniziapagegrid iniziapagegridspan iniziapagelayout iniziapar \
+iniziaparagraph iniziaparagraphs iniziaparagraphscell iniziaparbuilder iniziapath \
+iniziaplacepairedbox iniziapositioning iniziapositionoverlay iniziapositive iniziapostponing \
+iniziaprocessassignmentcommand iniziaprocessassignmentlist iniziaprocesscommacommand iniziaprocesscommalist iniziaprodotto \
+iniziaprogetto iniziaprotect iniziaprotectedcolors iniziapubblicazione iniziapunctuation \
+iniziarandomized iniziarandomseed iniziarawsetups iniziareadingfile iniziareferenceprefix \
+iniziaregime iniziareusableMPgraphic iniziariga iniziasbarrati iniziasbarrato \
+iniziascript iniziasdformula iniziasectionblock iniziasectionblockenvironment iniziasectionlevel \
+iniziasetups iniziasfondo iniziasfrac iniziashapebox iniziashift \
+iniziasidebar iniziasimplecolumns iniziasopralinea iniziasopralinee iniziasottoargomento \
+iniziasottocapoverso iniziasottolinea iniziasottolinee iniziasottosottoargomento iniziasottosottocapoverso \
+iniziasottosottosottoargomento iniziasottosottosottocapoverso iniziasottosottosottosottoargomento iniziasottosottosottosottocapoverso iniziaspecialitem \
iniziaspeech iniziaspformula iniziaspread iniziastartstop iniziastaticMPfigure \
-iniziastaticMPgraphic iniziastrictinspectnextcharacter iniziastrut iniziastyle iniziastyle \
-iniziasubformulas iniziasubject iniziasubjectlevel 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 \
+iniziastaticMPgraphic iniziastrictinspectnextcharacter iniziastrut iniziastyle iniziasubformulas \
+iniziasubjectlevel iniziasubsentence iniziasubstack iniziasymbolset iniziatabella \
+iniziatable iniziatablehead iniziatables iniziatabletail iniziatabulate \
+iniziatabulatehead iniziatabulatetail iniziatagged iniziatbinom iniziatesta \
+iniziatestoaiuto iniziatestoincorniciato iniziatexcode iniziatexdefinition iniziatext \
+iniziatextbackground iniziatextbackgroundmanual iniziatextcolor iniziatextcolorintent iniziatextflow \
+iniziatitolo iniziatokens iniziatransparent iniziatypescript iniziatypescriptcollection \
+iniziaunderdash iniziaunderdashes iniziaunderdot iniziaunderdots iniziaunderrandom \
+iniziaunderrandoms iniziaunderstrike iniziaunderstrikes iniziaunframed iniziauniqueMPgraphic \
+iniziauniqueMPpagegraphic iniziaunpacked iniziausableMPgraphic iniziauseMPgraphic iniziausemathstyleparameter \
+iniziausingbtxspecification iniziavaia iniziavbox iniziavboxregister iniziavboxtohbox \
+iniziavboxtohboxseparator iniziaviewerlayer iniziavtop iniziavtopregister iniziaxcell \
+iniziaxcellgroup iniziaxfrac iniziaxgroup iniziaxmldisplayverbatim iniziaxmlinlineverbatim \
+iniziaxmlraw iniziaxmlsetups iniziaxrow iniziaxrowgroup iniziaxtable \
+iniziaxtablebody iniziaxtablefoot iniziaxtablehead iniziaxtablenext iniziaxxfrac \
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 \
+inlineordisplaymath inlinerange inmaframed innerflushshapebox input \
+inputfilebarename inputfilename inputfilerealsuffix inputfilesuffix inputgivenfile \
+inriga insertpages installactionhandler installactivecharacter installalingua \
installanddefineactivecharacter installattributestack installautocommandhandler installautosetuphandler installbasicautosetuphandler \
installbasicparameterhandler installbottomframerenderer installcommandhandler installcorenamespace installdefinehandler \
installdefinitionset installdefinitionsetmember installdirectcommandhandler installdirectparameterhandler installdirectparametersethandler \
@@ -3896,178 +3530,162 @@ installnamespace installoutputroutine installpagearrangement installparameterhan
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 \
+installunitsseparator installunitsspace installversioninfo integerrounding intermezzo \
+intertext intorno invokepageheandler istltdir istrtdir \
+italic italicbold italiccorrection itemtag 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 \
+languageCharacters languagecharacters languagecharwidth lastcounter lastcountervalue \
+lastdigit lastlinewidth lastnaturalboxdp lastnaturalboxht lastnaturalboxwd \
+lastpredefinedsymbol lastrealpage lastrealpagenumber lastsubcountervalue lastsubpage \
+lastsubpagenumber lasttwodigits lastuserpage lastuserpagenumber lateluacode \
+layeredtext layerheight layerwidth lazysavetaggedtwopassdata lazysavetwopassdata \
+lbox left leftbottombox leftbox lefthbox \
+leftorrighthbox leftorrightvbox leftorrightvtop leftskipadaption leftsubguillemot \
+lefttopbox 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 limtatefirstline \
+lineanera lineasottile lineatesto lineenere lineeriempimento \
+lineesottili linespanningtext lingua linguaprincipale listcitation \
+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 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 mathitalic 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 \
+makecharacteractive makerawcommalist makestrutofbox mapfontsize marcatura \
+margindata markcontent markinjector mat matematica \
+math mathbf mathbi mathblackboard mathbs \
+mathcommand mathdefault mathfraktur mathfunction mathit \
+mathitalic mathop mathrm mathscript mathsl \
+mathss mathtext mathtextbf mathtextbi mathtextbs \
+mathtextit mathtextsl mathtexttf mathtf mathtriplet \
+mathtt mathupright mathword mathwordbf mathwordbi \
+mathwordbs mathwordit mathwordsl mathwordtf mbox \
+mcframed md measure measured medskip \
+medspace menuinterattivo menzione mequal mese \
+message metaTeX mettielenco mettielencocombinato mettifiancoafianco \
+mettiformula mettiingriglia mettinotepdp mettinotepdplocali mettinumeropagina \
+mettiregistro mettisegnalibro mettisottoformula mettiunosullaltro mfence \
+mfunction mfunctionlabeltext mhbox mhookleftarrow mhookrightarrow \
+middle middlebox midhbox minimalhbox mixedcaps \
+mkvibuffer mleftarrow mleftharpoondown mleftharpoonup mleftrightarrow \
+mleftrightharpoons mmapsto moduleparameter molecule mono \
+monobold mononormal monthlong monthshort mostraambientefontdeltesto \
+mostracolore mostracornice mostrafontdeltesto mostragriglia mostragruppocolori \
+mostraimpostazioni mostralyout mostramakeup mostrasetsimboli mostrastampa \
+mostrastruts mostratavolozza mp mprandomnumber mrel \
+mrightarrow mrightharpoondown mrightharpoonup mrightleftharpoons mrightoverleftarrow \
+mtext mtriplerel mtwoheadleftarrow mtwoheadrightarrow namedheadnumber \
+namedstructureheadlocation namedstructureuservariable namedstructurevariable namedtaggedlabeltexts nascondere \
+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 nobar nocap \
+nocitation nocite nodetostring noffigurepages noflines \
+noflocalfloats noindentation noitem nonfrenchspacing nonmathematics \
+normal normalboldface normalframedwithsettings normalizebodyfontsize normalizedfontsize \
+normalizefontdepth normalizefontheight normalizefontline normalizefontwidth normalizetextdepth \
+normalizetextheight normalizetextline normalizetextwidth normaltypeface nota \
+notesymbol ntimes numberofpoints numeri numeriromani \
+numeroformula numeropagina numeropaginacompleto numerotesta numerotestacorrente \
+obeydepth objectdepth objectheight objectmargin objectwidth \
+obox offset offsetbox onedigitrounding ordinaldaynumber \
+ordinalstr ornamenttext outputfilename outputstreambox outputstreamcopy \
+outputstreamunvbox outputstreamunvcopy over overbar overbars \
+overbartext overbarunderbar overbrace overbracetext overbraceunderbrace \
+overbracket overbrackettext overbracketunderbracket 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 pagestaterealpage \
+pagina paletsize 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 placecitation placecomments \
+placecurrentformulanumber placedbox placefloat placefloatwithsetups placeframed \
+placehelp placeinitial placelayer placelayeredtext placelistofpublications \
+placelistofsorts placelistofsynonyms 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 presetdocument 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 \
+placerenderingwindow popattribute popmacro popmode popsystemmode \
+positionoverlay positionregionoverlay posizionanumerotesta posizionatestotesta posizione \
+postponenotes predefinedfont predefinefont predefinesymbol prefixedpagenumber \
+prendibuffer prendimarcatura prependetoks prependgvalue prependtocommalist \
+prependtoks prependtoksonce prependvalue presetdocument presetfieldsymbols \
+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 \
+profiledbox profilegivenbox progetto programma pseudoMixedCapped \
+pseudoSmallCapped pseudoSmallcapped pseudosmallcapped pulsante pulsantemenu \
+pulsantinterazione punti purenumber pushattribute pushbutton \
+pushmacro pushmode pushoutputstream pushsystemmode qquad \
+quad quads qualcheriga quitcommalist quitprevcommalist \
+quittypescriptscanning raisebox randomizetext randomnumber 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 replaceincommalist replaceword rescan \
+rescanwithsetup resetMPdrawing resetMPenvironment resetMPinstance resetallattributes \
+resetandaddfeature resetbar 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 resolvedglyphdirect resolvedglyphstyled restartcounter \
+restorebox restorecatcodes restorecounter restorecurrentattributes restoreendofline \
+restoreglobalbodyfont reusableMPgraphic reuseMPgraphic reuserandomseed revivefeature \
+rfence rhbox rif riferimento riferimentopagina \
+riferimentotesto riflessione rigariempimento right rightbottombox \
+rightbox righthbox rightorleftpageaction rightskipadaption rightsubguillemot \
+righttolefthbox righttoleftvbox righttoleftvtop righttopbox rigovuoto \
+rlap robustaddtocommalist robustdoifelseinset robustdoifinsetelse robustpretocommalist \
+rollbutton roman rtop ruledhbox ruledhpack \
+ruledmbox ruledtopv ruledtpack ruledvbox ruledvpack \
+ruledvtop runMPbuffer runninghbox ruota safechar \
+sans sansbold sansnormal sansserif savebox \
+savebtxdataset savebuffer savecounter savecurrentattributes savenormalmeaning \
+savetaggedtwopassdata savetwopassdata sbox scala schermo \
+scrividentroelenco scriviinelenco sd secondoffivearguments secondoffourarguments \
+secondofsixarguments secondofthreearguments secondofthreeunexpanded secondoftwoarguments secondoftwounexpanded \
segnalibro select selezionablocchi serializecommalist serializedcommalist \
serif serifbold serifnormal setJSpreamble setMPlayer \
setMPpositiongraphic setMPpositiongraphicrange setMPtext setMPvariable setMPvariables \
@@ -4078,14 +3696,14 @@ 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 \
+setfontcolorsheme setfontfeature setfontsolution setfontstrut setfractions \
+setgmeasure setgvalue setgvariable setgvariables sethboxregister \
+sethyphenatedurlafter sethyphenatedurlbefore sethyphenatedurlnormal sethyphenationfeatures setinitial \
+setinjector setinteraction setinterfacecommand setinterfaceconstant setinterfaceelements \
+setinterfacemessage setinterfacevariable setinternalrendering setitaliccorrection setlayer \
+setlayerframed setlayertext setlinefiller setlocalhsize setmainbodyfont \
+setmainparbuilder setmarker setmarking setmathstyle setmeasure \
+setmessagetext setmode setnostrut setnote setnotetext \
setobject setoldstyle setpagegrid setpagereference setpagestate \
setpagestaterealpageno setpenalties setpercentdimen setposition setpositionbox \
setpositiondata setpositiondataplus setpositiononly setpositionplus setpositionstrut \
@@ -4094,239 +3712,214 @@ setreplacement setrigidcolumnbalance setrigidcolumnhsize setscript setsectionblo
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 \
+setuevalue setugvalue setunreferencedobject setup setupMPgraphics \
+setupMPinstance setupMPpage setupMPvariables setupTABLE setupTEXpage \
+setupattachment setupbackend setupbar setupbleeding setupbookmark \
+setupbtx setupbtxdataset setupbtxlist setupbtxregister setupbtxrendering \
+setupbutton setupcharacterkerning setupcharacterspacing setupchemical setupchemicalframed \
+setupcollector setupcolumnspan setupcombination setupcounter setupdataset \
+setupdelimitedtext setupdescription setupdirections setupdocument setupeffect \
+setupenumeration setupenv setupexport setupexternalfigure setupexternalsoundtracks \
+setupfieldbody setupfieldcategory setupfieldcontentframed setupfieldlabelframed setupfieldtotalframed \
+setupfiller setupfirstline setupfittingpage setupfloatcaption setupfontexpansion \
+setupfontprotrusion setupfonts setupfontsolution setupformula setupformulaframed \
+setupframedcontent setupframedtext setupglobalreferenceprefix setupheadalternative setuphelp \
+setuphigh setuphighlight setuphyphenation setupindentedtext setupinitial \
+setupinsertion setupitaliccorrection setupitemgroup setuplabel setuplayer \
+setuplayeredtext setuplayouttext setuplinefiller setuplinefillers setuplinenote \
+setuplinetable setuplistalternative setuplistextra setuplocalfloats setuplocalinterlinespace \
+setuplow setuplowhigh setuplowmidhigh setupmarginblock setupmargindata \
+setupmarginframed setupmarginrule setupmathalignment setupmathcases setupmathematics \
+setupmathfence setupmathfraction setupmathframed setupmathmatrix setupmathornament \
+setupmathradical setupmathstackers setupmathstyle setupmixedcolumns setupmodule \
+setupnotation setupnotations setupnote setupnotes setupoffset \
+setupoffsetbox setupoutputroutine setuppagechecker setuppagegrid setuppagegridarea \
+setuppagegridareatext setuppagegridlines setuppagegridspan setuppagegridstart setuppageinjection \
+setuppageinjectionalternative setuppageshift setuppagestate setuppairedbox setuppaper \
+setupparagraph setupparagraphintro setupparallel setupperiods setupplacement \
+setuppositionbar setupprocessor setupprofile setupquotation setuprealpagenumber \
+setupreferenceformat setupreferenceprefix setupreferencestructureprefix setupregisters setuprenderingwindow \
+setups setupscale setupscript setupscripts setupselector \
+setupshift setupsidebar setupspellchecking setupstretched setupstruts \
+setupstyle setupsubformula setuptabulation setuptagging setuptextbackground \
+setuptextflow setuptooltip setupunit 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 \
+setvariables setvboxregister setvisualizerfont setvtopregister setwidthof \
+setxmeasure setxvalue setxvariable setxvariables sfondo \
+sfrac shapedhbox showallmakeup showattributes showboxes \
+showbtxdatasetauthors showbtxdatasetcompleteness showbtxdatasetfields 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 simbolo simplegroupedcommand \
+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 someheadnumber somekindoftab \
+somelocalfloat somenamedheadnumber someplace sottoargomento sottocapoverso \
+sottosottoargomento sottosottocapoverso sottosottosottoargomento sottosottosottocapoverso sottosottosottosottoargomento \
+sottosottosottosottocapoverso sp spanishNumerals spanishnumerals spazifissi \
+spazio spaziofisso speech spessoreriga spezzaoggettomobile \
+splitatasterisk splitatcolon splitatcolons splitatcomma splitdfrac \
+splitfilename splitfrac splitoffbase splitofffull splitoffkind \
+splitoffname splitoffpath splitoffroot splitofftokens splitofftype \
+splitstring spreadhbox sqrt stackcampi stackrel \
+startregister startstructurepageregister stirato stopregister stopstructurepageregister \
+strictdoifelsenextoptional strictdoifnextoptionalelse stripcharacter strippedcsname stripspaces \
+structurelistuservariable structurenumber structuretitle structureuservariable structurevariable \
+strut strutdp strutht struthtdp struttedbox \
+strutwd style styleinstance subpagenumber subsentence \
+substituteincommalist subtractfeature swapcounts swapdimens swapface \
+swapmacros swaptypeface switchstyleonly switchtocolor 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 \
+systemsetups tLeftarrow tLeftrightarrow tRightarrow tabella \
+tabulateautoline tabulateautorule tabulateline tabulaterule taggedctxcommand \
+taggedlabeltexts tbinom tbox tequal terminaJScode \
+terminaJSpreamble terminaMPclip terminaMPcode terminaMPdefinitions terminaMPdrawing \
+terminaMPenvironment terminaMPextensions terminaMPinclusions terminaMPinitializations terminaMPpage \
+terminaMPpositiongraphic terminaMPpositionmethod terminaMPrun terminaTABLE terminaTABLEbody \
+terminaTABLEfoot terminaTABLEhead terminaTABLEnext terminaTC terminaTD \
+terminaTDs terminaTEXpage terminaTH terminaTN terminaTR \
+terminaTRs terminaTX terminaTY terminaallmodes terminaambiente \
+terminaargomento terminaarrangedpages terminaaside terminaattachment terminabar \
+terminabinom terminabitmapimage terminablockquote terminabtxrenderingdefinitions terminabuffer \
+terminabutton terminacapitolo terminacapoverso terminacatcodetable terminacharacteralign \
+terminacheckedfences terminachemical terminacitazione terminacollect terminacollecting \
+terminacolore terminacolorintent terminacoloronly terminacolorset terminacolumns \
+terminacolumnspan terminacombination terminacomment terminacommento terminacomponenet \
+terminacontextcode terminacontextdefinitioncode terminactxfunction terminactxfunctiondefinition terminacurrentcolor \
+terminacurrentlistentrywrapper terminadbinom terminadelimited terminadelimitedtext terminadfrac \
+terminadisplaymath terminadmath terminadocument terminaeffect terminaelement \
+terminaelemento terminaelenco terminaembeddedxtable terminaendofline terminaexceptions \
+terminaexpanded terminaexpandedcollect terminaextendedcatcodetable terminaexternalfigurecollection terminafigura \
+terminafigure terminafitfieldframed terminafittingpage terminafloatcombination terminafont \
+terminafontclass terminafontsolution terminaformula terminaformulas terminafrac \
+terminaframedcontent terminaframedtext terminagrafico terminagridsnapping terminahbox \
+terminahboxestohbox terminahboxregister terminahelptext terminahiddenbar terminahiding \
+terminahighlight terminahyphenation terminaimath terminaimpaccato terminaincorniciato \
+terminaindentation terminaindentedtext terminainmframed terminainteraction terminainterface \
+terminaintermezzo terminaintertext terminaitemgroup terminaknockout terminalayout \
+terminalineamargine terminalineatesto terminalinecorrection terminalinefiller terminalinenumbering \
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 terminasubjectlevel 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 \
+terminalocalheadsetup terminalocallinecorrection terminalocalnotes terminalocalsetups terminalua \
+terminaluacode terminaluaparameterset terminaluasetups terminamakeup terminamarginblock \
+terminamarkedcontent terminamathmode terminamathstyle terminamatrices terminamcframed \
+terminamdformula terminamenuinterattivo terminamenzione terminamettiformula terminamframed \
+terminamixedcolumns terminamode terminamodeset terminamodule terminamoduletestsection \
+terminampformula terminanamedsection terminanamedsubformulas terminanarrow terminanarrower \
+terminanegative terminanicelyfilledbox terminanobar terminanointerference terminanotallmodes \
+terminanotext terminanotmode terminaopposite terminaoutputstream terminaoverlay \
+terminaoverprint terminapagecomment terminapagefigure terminapagegrid terminapagegridspan \
+terminapagelayout terminapar terminaparagraph terminaparagraphs terminaparagraphscell \
+terminaparbuilder terminapath terminaplacepairedbox terminapositioning terminapositionoverlay \
+terminapositive terminapostponing terminaprocessassignmentcommand terminaprocessassignmentlist terminaprocesscommacommand \
+terminaprocesscommalist terminaprodotto terminaprogetto terminaprotect terminaprotectedcolors \
+terminapubblicazione terminapunctuation terminarandomized terminarandomseed terminarawsetups \
+terminareadingfile terminareferenceprefix terminaregime terminareusableMPgraphic terminariga \
+terminasbarrati terminasbarrato terminascript terminasdformula terminasectionblock \
+terminasectionblockenvironment terminasectionlevel terminasetups terminasfondo terminasfrac \
+terminashapebox terminashift terminasidebar terminasimplecolumns terminasopralinea \
+terminasopralinee terminasottoargomento terminasottocapoverso terminasottolinea terminasottolinee \
+terminasottosottoargomento terminasottosottocapoverso terminasottosottosottoargomento terminasottosottosottocapoverso terminasottosottosottosottoargomento \
+terminasottosottosottosottocapoverso terminaspecialitem terminaspeech terminaspformula terminaspread \
+terminastartstop terminastaticMPfigure terminastaticMPgraphic terminastrictinspectnextcharacter terminastrut \
+terminastyle terminasubformulas terminasubjectlevel terminasubsentence terminasubstack \
+terminasymbolset terminatabella terminatable terminatablehead terminatables \
+terminatabletail terminatabulate terminatabulatehead terminatabulatetail terminatagged \
+terminatbinom terminatesta terminatestoaiuto terminatestoincorniciato terminatexcode \
+terminatexdefinition terminatext terminatextbackground terminatextbackgroundmanual terminatextcolor \
+terminatextcolorintent terminatextflow terminatitolo terminatokens terminatransparent \
+terminatypescript terminatypescriptcollection terminaunderdash terminaunderdashes terminaunderdot \
+terminaunderdots terminaunderrandom terminaunderrandoms terminaunderstrike terminaunderstrikes \
+terminaunframed terminauniqueMPgraphic terminauniqueMPpagegraphic terminaunpacked terminausableMPgraphic \
+terminauseMPgraphic terminausemathstyleparameter terminausingbtxspecification terminavaia terminavbox \
+terminavboxregister terminavboxtohbox terminavboxtohboxseparator terminaviewerlayer terminavtop \
+terminavtopregister terminaxcell terminaxcellgroup terminaxfrac terminaxgroup \
+terminaxmldisplayverbatim terminaxmlinlineverbatim terminaxmlraw terminaxmlsetups terminaxrow \
+terminaxrowgroup terminaxtable terminaxtablebody terminaxtablefoot terminaxtablehead \
+terminaxtablenext terminaxxfrac testandsplitstring testcolumn testfeature \
+testfeatureonce testoaiuto testoincorniciato testonotapdp testoriempimento \
+testpage testpageonly testpagesync testtokens tex \
+texdefinition texsetup textcitation textcite textcontrolspace \
+textflowcollector textmath textminus textormathchar textplus \
+textvisiblespace tfrac thainumerals thefirstcharacter thenormalizedbodyfontsize \
+theremainingcharacters thickspace 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 useblankparameter 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
+threedigitrounding tibetannumerals tieniblocchi tightlayer tinyfont \
+titolo tlap tleftarrow tleftharpoondown tleftharpoonup \
+tleftrightarrow tleftrightharpoons tmapsto tochar tolinenote \
+topbox topleftbox toplinebox toprightbox topskippedbox \
+tracecatcodetables tracedfontname traceoutputroutines tracepositions traduci \
+transparencycomponents transparent trel trightarrow trightharpoondown \
+trightharpoonup trightleftharpoons trightoverleftarrow triplebond truefilename \
+truefontname ttriplerel ttwoheadleftarrow ttwoheadrightarrow twodigitrounding \
+tx txx typ type typebuffer \
+typedefinedbuffer typeface typefile typescriptone typescriptprefix \
+typescriptthree typescripttwo typesetbuffer typesetfile uconvertnumber \
+uedcatcodecommand undefinevalue undepthed 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 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 \
+useblankparameter usebodyfont usebodyfontparameter usebtxdataset usebtxdefinitions \
+usecolors usecomponent usedummycolorparameter usedummystyleandcolor usedummystyleparameter \
+useenvironment useexternalrendering usefigurebase usefile usegridparameter \
+useindentingparameter useindentnextparameter 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 verbatim verbatimstring \
+verbosenumber versione verticalgrowingbar verticalpositionbar 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 \
+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=\
AMSTEX AfterPar Alphabeticnumerals AmSTeX \
@@ -4349,90 +3942,78 @@ 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 \
+MPw MPwhd 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 TEXpage TaBlE TeX \
+TheNormalizedFontSize TransparencyHack VerboseNumber WEEKDAG WOORD \
+WOORDEN WidthSpanningText Woord Woorden XETEX \
+XeTeX aanhangsel abjadnaivenumerals abjadnodotnumerals abjadnumerals \
+about achtergrond activatespacehandler adaptcollector adaptfontfeature \
+adaptpapersize addfeature addtoJSpreamble addtocommalist addvalue \
+aftersplitstring aftertestandsplitstring alignmentcharacter allinputpaths alphabeticnumerals \
+alwayscitation 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 aside assignalfadimension assigndimen \
+assigndimension assignifempty assigntranslation assignvalue assignwidth \
+assumelongusagecs astype attachment autocap autodirhbox \
+autodirvbox autodirvtop autoinsertnextspace automathematics autosetups \
+availablehsize averagecharwidth backgroundimage backgroundimagefill backgroundline \
+basegrid baselineleftbox baselinemiddlebox baselinerightbox bbox \
+beforesplitstring beforetestandsplitstring bepaalkopnummer bepaallijstkenmerken bepaalregisterkenmerken \
+bewaarbuffer big bigbodyfont bigg bigger \
+biggl biggm biggr bigl bigm \
+bigr bigskip binom bitmapimage blanko \
+blap bleed bleedheight bleedwidth blockligatures \
+blockquote blokcitaat 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 \
+bthiddencitation btxabbreviatedjournal btxaddjournal 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 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 \
+btxsingularorplural btxsingularplural btxtextcitation button calligraphic \
+camel catcodetablename cbox centerbox centeredbox \
+centerednextbox cfrac chardescription charwidthlanguage checkcharacteralign \
+checkedchar checkedfiller checkedstrippedcsname checkinjector checknextindentation \
+checknextinjector checkpage checkparameters checkpreviousinjector checksoundtrack \
+checktwopassdata checkvariables chem chemical chemicalbottext \
+chemicalmidtext chemicalsymbol chemicaltext chemicaltoptext chineseallnumerals \
+chinesecapnumerals chinesenumerals cijfers citaat citation \
+cite citeer clap classfont cldcommand \
+cldcontext cldloadfile cldprocessfile cleftarrow clip \
+collect collectedtext collectexpanded colorcomponents colored \
+coloronly columnbreak combinepages commalistelement commalistsentence \
+commalistsize comment commentaar comparedimension comparedimensioneps \
+completebtxrendering completelist completelistofpublications completelistofsorts completelistofsynonyms \
+complexorsimple complexorsimpleempty composedcollector composedlayer compresult \
+constantdimen constantdimenargument constantemptyargument constantnumber constantnumberargument \
+contentreference continuednumber continueifinputfile convertargument convertcommand \
+convertedcounter converteddimen convertedsubcounter converteernummer convertmonth \
+convertvalue convertvboxtohbox copieerveld copypages copyparameters \
+copyposition 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 datasetvariable \
+datum dayoftheweek dayspermonth dbinom decrement \
decrementcounter decrementedcounter decrementpagenumber decrementsubpagenumber decrementvalue \
defaultinterface defaultobjectpage defaultobjectreference defcatcodecommand defconvertedargument \
defconvertedcommand defconvertedvalue defineMPinstance defineTABLEsetup defineactivecharacter \
@@ -4440,28 +4021,26 @@ definealternativestyle defineanchor defineattachment defineattribute definebackg
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 \
+definecollector definecomment definecomplexorsimple definecomplexorsimpleempty defineconversionset \
+definecounter definedataset definedelimitedtext definedfont defineeffect \
+defineexpandable defineexternalfigure definefallbackfamily definefieldbody definefieldbodyset \
+definefieldcategory definefileconstant definefilefallback definefilesynonym definefiller \
+definefirstline definefittingpage definefontalternative definefontfallback definefontfamily \
+definefontfamilypreset definefontfeature definefontfile definefontsize definefontsolution \
+defineformula defineformulaalternative defineformulaframed defineframedcontent definefrozenfont \
+defineglobalcolor definegraphictypesynonym definegridsnapping defineheadalternative definehelp \
+definehigh definehighlight definehspace definehypenationfeatures defineindenting \
+defineinitial defineinsertion defineinteraction defineinteractionbar defineinterfaceconstant \
+defineinterfaceelement defineinterfacevariable defineinterlinespace defineintermediatecolor defineitems \
+definelabelclass definelayerpreset definelinefiller definelinenote definelinenumbering \
+definelines definelistalternative definelistextra definelow definelowhigh \
+definelowmidhigh definemarginblock definemargindata definemarker 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 definenamespace \
+definenarrower definenote defineornament defineoutputroutine defineoutputroutinecommand \
definepage definepagechecker definepagegrid definepagegridarea definepagegridspan \
definepageinjection definepageinjectionalternative definepageshift definepagestate definepairedbox \
defineparagraph defineparallel defineparbuilder definepositioning defineprefixset \
@@ -4472,259 +4051,245 @@ definestyleinstance definesubformula definesynonym definesystemattribute defines
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 \
+definextable definieer definieeralineas definieerblok definieerbuffer \
+definieercombinatie definieerconversie definieerfiguursymbool definieerfont definieerfontstijl \
+definieerfontsynoniem definieerhbox definieeringesprongentext definieerinteractiemenu definieeritemgroep \
+definieerkadertekst definieerkleur definieerkleurgroep definieerkolomovergang definieerkop \
+definieerkorps definieerkorpsomgeving definieerlayer definieerlayout definieerletter \
+definieerlijst definieermarkering definieeromlijnd definieeropmaak definieeroverlay \
+definieerpaginaovergang definieerpalet definieerpapierformaat definieerplaats 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 \
+digits dimensiontocount directcolor 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 \
+doornummeren dopositionaction doprocesslocalsetups doquadrupleargument doquadrupleempty \
+doquadruplegroupempty doquintupleargument doquintupleempty doquintuplegroupempty dorechecknextindentation \
+dorecurse dorepeatwithcommand doreplacefeature doresetandafffeature doresetattribute \
+dorotatebox dosetattribute dosetleftskipadaption dosetrightskipadaption dosetupcheckedinterlinespace \
+doseventupleargument doseventupleempty dosingleargument dosingleempty dosinglegroupempty \
+dosixtupleargument dosixtupleempty dostepwiserecurse dosubtractfeature 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 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 \
+erightarrowfill erightharpoondownfill erightharpoonupfill 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 fence fenced fetchallmarkings fetchallmarks \
+fetchmark fetchmarking fetchonemark fetchonemarking fetchruntinecommand \
+fetchtwomarkings fetchtwomarks fieldbody fifthoffivearguments fifthofsixarguments \
+figurefilename figurefilepath figurefiletype figurefullname figureheight \
+figurenaturalheight figurenaturalwidth figuresymbol figurewidth figuur \
+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 flushboxregister 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 \
+forcelocalfloats forgeteverypar forgetparameters formula formulenummer \
+foundbox fourthoffivearguments fourthoffourarguments fourthofsixarguments frac \
+frameddimension framedparameter framedtext freezedimenmacro freezemeasure \
+frenchspacing fromlinenote frozenhbox gdefconvertedargument gdefconvertedcommand \
+gebruikJSscripts gebruikURL gebruikblokken gebruikexterndocument gebruikexternfiguur \
+gebruikexterngeluidsfragment gebruikmodule gebruikpad 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 getprivatechar \
+getprivateslot 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 grabbufferdata grabbufferdatadirect grabuntil grafiek \
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 \
+handletokens handwritten hash hboxofvbox hboxreference \
+hdofstring headhbox headnumbercontent headnumberdistance headnumberwidth \
+headreferenceattributes headsetupspacing headtextcontent headtextdistance headtextwidth \
+headvbox headwidth heightanddepthofstring heightofstring heightspanningtext \
+helptekst helptext hglue hiddenbar hiddencitation \
+hiddencite highlight highordinalstr hilo himilo \
+hl hoofdstuk 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 \
+impliedby implies in includemenu includeversioninfo \
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 \
+incrementvalue indentation infofont infofontbold inheritparameter \
+inhibitblank initializeboxstack inlijnd inlinebuffer inlinedbox \
+inlinemath inlinemathematics inlinemessage inlineordisplaymath inlinerange \
+innerflushshapebox input inputfilebarename inputfilename inputfilerealsuffix \
+inputfilesuffix inputgivenfile 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 \
+installdirectparametersethandler installdirectsetuphandler installdirectstyleandcolorhandler 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 intermezzo \
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 \
+italiccorrection items itemtag jobfilename jobfilesuffix \
+kadertekst kap keeplinestogether keepunwantedspaces kerncharacters \
+kleur kleurenbalk kleurwaarde kloonveld kolom \
+kopnummer koreancirclenumerals koreannumerals koreannumeralsc koreannumeralsp \
+koreanparentnumerals laag laho languageCharacters languagecharacters \
+languagecharwidth lastcounter lastcountervalue lastdigit lastlinewidth \
+lastnaturalboxdp lastnaturalboxht lastnaturalboxwd lastpredefinedsymbol lastrealpage \
+lastrealpagenumber lastsubcountervalue lastsubpage lastsubpagenumber lasttwodigits \
+lastuserpage lastuserpagenumber lateluacode layeredtext layerheight \
+layerwidth lazysavetaggedtwopassdata lazysavetwopassdata lbox left \
+leftbottombox leftbox lefthbox leftorrighthbox leftorrightvbox \
+leftorrightvtop leftskipadaption leftsubguillemot lefttopbox 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 \
+limtatefirstline linespanningtext listcitation 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 \
+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 margindata markcontent markeer markinjector \
mat math mathbf mathbi mathblackboard \
mathbs mathcommand mathdefault mathfraktur mathfunction \
-mathit mathitalic 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 \
+mathit mathitalic mathop mathrm mathscript \
+mathsl mathss mathtext mathtextbf mathtextbi \
+mathtextbs mathtextit mathtextsl mathtexttf mathtf \
+mathtriplet mathtt mathupright mathword mathwordbf \
+mathwordbi mathwordbs mathwordit mathwordsl mathwordtf \
+mbox mcframed md measure measured \
+medskip medspace menubutton mequal message \
+metaTeX mfence mfunction mfunctionlabeltext mhbox \
+mhookleftarrow mhookrightarrow middle middlebox midhbox \
minimalhbox mixedcaps mkvibuffer mleftarrow mleftharpoondown \
mleftharpoonup mleftrightarrow mleftrightharpoons mmapsto moduleparameter \
-molecule mono monobold monobold mononormal \
-monthlong monthshort mprandomnumber mrel mrightarrow \
+molecule mono monobold mononormal monthlong \
+monthshort mp mprandomnumber mrel mrightarrow \
mrightharpoondown mrightharpoonup mrightleftharpoons mrightoverleftarrow mtext \
mtriplerel mtwoheadleftarrow mtwoheadrightarrow naar naarbox \
naarpagina namedheadnumber namedstructureheadlocation namedstructureuservariable namedstructurevariable \
@@ -4735,172 +4300,156 @@ 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 \
+nobar nocitation nocite nodetostring noffigurepages \
+noflines noflocalfloats noindentation noitem nokap \
+nonfrenchspacing nonmathematics noot normal normalboldface \
+normalframedwithsettings normalizebodyfontsize normalizedfontsize normalizefontdepth normalizefontheight \
+normalizefontline normalizefontwidth normalizetextdepth normalizetextheight normalizetextline \
+normalizetextwidth normaltypeface notesymbol ntimes numberofpoints \
+obeydepth objectdepth objectheight objectmargin objectwidth \
+obox offset offsetbox omgeving omlaag \
+omlijnd onbekend onderdeel onderwerp onedigitrounding \
+op oppagina opsomming ordinaldaynumber ordinalstr \
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 \
+outputstreamunvcopy over overbar overbars overbartext \
+overbarunderbar overbrace overbracetext overbraceunderbrace overbracket \
+overbrackettext overbracketunderbracket 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 pagestaterealpage pagina \
+paginanummer paginareferentie paletsize paragraaf 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 plaatslijst plaatslijstmetsynoniemen plaatslokalevoetnoten plaatsnaastelkaar \
+plaatsonderelkaar 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 presetdocument 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 \
+placebtxrendering placecitation placecomments placecurrentformulanumber placedbox \
+placefloatwithsetups placeframed placehelp placeinitial placelayer \
+placelayeredtext placelistofpublications placelistofsorts placelocalnotes placement \
+placenamedfloat placenamedformula placenotes placepairedbox placeparallel \
+placerenderingwindow popattribute popmacro popmode popsystemmode \
+positioneer positionoverlay positionregionoverlay postponenotes predefinedfont \
+predefinefont predefinesymbol prefixedpagenumber prependetoks prependgvalue \
+prependtocommalist prependtoks prependtoksonce prependvalue presetdocument \
+presetfieldsymbols 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 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 \
+pseudoMixedCapped pseudoSmallCapped pseudoSmallcapped pseudosmallcapped punten \
+purenumber pushattribute pushbutton pushmacro pushmode \
+pushoutputstream pushsystemmode qquad quad quads \
+quitcommalist quitprevcommalist quittypescriptscanning raisebox randomizetext \
+randomnumber 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 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 \
+replaceincommalist replaceword rescan rescanwithsetup resetMPdrawing \
+resetMPenvironment resetMPinstance resetallattributes resetandaddfeature resetbar \
+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 resolvedglyphdirect resolvedglyphstyled restartcounter restorebox \
+restorecatcodes restorecounter restorecurrentattributes restoreendofline restoreglobalbodyfont \
+reusableMPgraphic reuseMPgraphic reuserandomseed revivefeature rfence \
+rhbox right rightbottombox rightbox righthbox \
+rightorleftpageaction rightskipadaption rightsubguillemot righttolefthbox righttoleftvbox \
+righttoleftvtop righttopbox rlap robustaddtocommalist robustdoifelseinset \
+robustdoifinsetelse robustpretocommalist rollbutton roman romeins \
+rooster roteer rtop ruledhbox ruledhpack \
+ruledmbox ruledtopv ruledtpack ruledvbox ruledvpack \
+ruledvtop runMPbuffer runninghbox safechar sans \
+sansbold sansnormal sansserif savebox savebtxdataset \
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 \
+sd secondoffivearguments secondoffourarguments secondofsixarguments secondofthreearguments \
+secondofthreeunexpanded secondoftwoarguments secondoftwounexpanded 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 setfractions setgmeasure setgvalue setgvariable \
+setgvariables sethboxregister sethyphenatedurlafter sethyphenatedurlbefore sethyphenatedurlnormal \
+sethyphenationfeatures setinitial setinjector setinteraction setinterfacecommand \
+setinterfaceconstant setinterfaceelements setinterfacemessage setinterfacevariable setinternalrendering \
+setitaliccorrection setlayer setlayerframed setlayertext setlinefiller \
+setlocalhsize setmainbodyfont setmainparbuilder setmarker setmarking \
+setmathstyle setmeasure setmessagetext setmode setnostrut \
+setnote 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 \
+setupMPgraphics setupMPinstance setupMPpage setupMPvariables setupTABLE \
+setupTEXpage setupattachment setupbackend setupbar setupbleeding \
+setupbookmark setupbtx setupbtxdataset setupbtxlist setupbtxregister \
+setupbtxrendering setupbutton setupcharacterkerning setupcharacterspacing setupchemical \
+setupchemicalframed setupcollector setupcolumnspan setupcombination setupcounter \
+setupdataset setupdelimitedtext setupdirections setupdocument setupeffect \
+setupenv setupexport setupexternalfigure setupexternalsoundtracks setupfieldbody \
+setupfieldcategory setupfieldcontentframed setupfieldlabelframed setupfieldtotalframed setupfiller \
+setupfirstline setupfittingpage setupfloatcaption setupfontexpansion setupfontprotrusion \
+setupfonts setupfontsolution setupformulaframed setupframedcontent setupglobalreferenceprefix \
+setupheadalternative setuphelp setuphigh setuphighlight setuphyphenation \
+setupinitial setupinsertion setupitaliccorrection setuplabel setuplayer \
+setuplayeredtext setuplayouttext setuplinefiller setuplinefillers setuplinenote \
+setuplinetable setuplistalternative setuplistextra setuplocalfloats setuplocalinterlinespace \
+setuplow setuplowhigh setuplowmidhigh setupmarginframed setupmarginrule \
+setupmathcases setupmathematics setupmathfence setupmathfraction setupmathframed \
+setupmathmatrix setupmathornament setupmathradical setupmathstackers setupmathstyle \
+setupmixedcolumns setupmodule setupnotation setupnotations setupnote \
+setupnotes setupoffset setupoffsetbox setupoutputroutine setuppagechecker \
+setuppagegrid setuppagegridarea setuppagegridareatext setuppagegridlines setuppagegridspan \
+setuppagegridstart setuppageinjection setuppageinjectionalternative setuppageshift setuppagestate \
+setuppairedbox setupparagraph setupparagraphintro setupparallel setupperiods \
+setuppositionbar setupprocessor setupprofile setupquotation setuprealpagenumber \
+setupreferenceformat setupreferenceprefix setupreferencestructureprefix setupregisters setuprenderingwindow \
+setups setupscale setupscript setupscripts setupselector \
+setupshift setupsidebar setupspellchecking setupstretched setupstruts \
+setupstyle setupsubformula setuptabulation setuptagging setuptextflow \
+setuptooltip setupunit setupuserpagenumber setupversion setupviewerlayer \
+setupvspacing setupwithargument setupwithargumentswapped setupxml setupxtable \
+setuvalue setuxvalue setvalue setvariable setvariables \
+setvboxregister setvisualizerfont setvtopregister setwidthof setxmeasure \
+setxvalue setxvariable setxvariables sfrac shapedhbox \
+showallmakeup showattributes showboxes showbtxdatasetauthors showbtxdatasetcompleteness \
+showbtxdatasetfields showbtxfields showbtxhashedauthors showbtxtables showchardata \
showcharratio showcolorbar showcolorcomponents showcolorset showcolorstruts \
showcounter showdirectives showdirsinmargin showedebuginfo showexperiments \
showfont showfontdata showfontkerns showfontparameters showfontstrip \
@@ -4909,282 +4458,247 @@ 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 \
+showwarning simplegroupedcommand 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 \
+som someheadnumber somekindoftab somelocalfloat somenamedheadnumber \
+someplace sp spanishNumerals spanishnumerals spatie \
+speech spiegel splitatasterisk splitatcolon splitatcolons \
+splitatcomma splitdfrac splitfilename splitfrac splitoffbase \
+splitofffull splitoffkind splitoffname splitoffpath splitoffroot \
+splitofftokens splitofftype splitsplaatsblok splitstring spraak \
spreadhbox sqrt stackrel startJScode startJSpreamble \
-startLUA startLUA startMP startMP startMPclip \
-startMPcode startMPdefinitions startMPdrawing startMPdrawing startMPenvironment \
+startMPclip startMPcode startMPdefinitions 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 \
+startMPpositionmethod startMPrun startTABLE startTABLEbody startTABLEfoot \
+startTABLEhead startTABLEnext startTC startTD startTDs \
+startTEXpage startTH startTN startTR startTRs \
+startTX startTY startaanhangsel startachtergrond startallmodes \
+startarrangedpages startaside startattachment startbar startbinom \
+startbitmapimage startblockquote startblokcitaat startbtxrenderingdefinitions startbuffer \
+startbutton startcatcodetable startcharacteralign startcheckedfences startchemical \
+startcitaat startciteer startcollect startcollecting startcolorintent \
+startcoloronly startcolorset startcolumns startcolumnspan startcombination \
+startcomment startcommentaar startcontextcode startcontextdefinitioncode startctxfunction \
+startctxfunctiondefinition startcurrentcolor startcurrentlistentrywrapper startdbinom startdelimited \
+startdelimitedtext startdfrac startdisplaymath startdmath startdocument \
+startdoorstreep startdoorstrepen starteffect startelement startembeddedxtable \
+startendofline startexceptions startexpanded startexpandedcollect startextendedcatcodetable \
+startexternalfigurecollection startfigure startfiguur startfitfieldframed startfittingpage \
+startfloatcombination startfont startfontclass startfontsolution startformula \
+startformulas startfrac startframedcontent startframedtext startgrafiek \
+startgridsnapping starthbox starthboxestohbox starthboxregister starthelptekst \
+starthelptext starthiddenbar starthiding starthighlight starthoofdstuk \
+starthyphenation startimath startindentation startindentedtext startinmframed \
+startinteractiemenu startinteraction startinterface startintermezzo startintertext \
+startitemgroup startkadertekst startkantlijn startkleur startknockout \
+startkop startlayout startlinefiller startlinenumbering startlinetable \
+startlinetablebody startlinetablecell startlinetablehead startlocalheadsetup startlocallinecorrection \
+startlocalnotes startlocalsetups startlokalevoetnoten startlua startluacode \
+startluaparameterset startluasetups startmakeup startmargeblok startmarkedcontent \
+startmathmode startmathstyle startmatrices startmcframed startmdformula \
+startmframed startmixedcolumns startmode startmodeset 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 startsubjectlevel \
-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 \
+startnarrow startnarrower startnegative startnicelyfilledbox startnobar \
+startnointerference startnotallmodes startnotext startnotmode startomgeving \
+startomlijnd startonderdeel startonderstreep startonderstrepen startonderwerp \
+startopelkaar startopposite startopsomming startoutputstream startoverlay \
+startoverprint startoverstreep startoverstrepen startpagecomment startpagefigure \
+startpagegrid startpagegridspan startpagelayout startpar startparagraaf \
+startparagraph startparagraphs startparagraphscell startparbuilder startpath \
+startplaatsformule startplacepairedbox startpositioning startpositionoverlay startpositive \
+startpostponing startprocessassignmentcommand startprocessassignmentlist startprocesscommacommand startprocesscommalist \
+startprodukt startprojekt startprotect startprotectedcolors startpublicatie \
+startpunctuation startrandomized startrandomseed startrawsetups startreadingfile \
+startreferenceprefix startregel startregelcorrectie startregime startregister \
+startreusableMPgraphic startscript startsdformula startsectionblock startsectionblockenvironment \
+startsectionlevel startsetups startsfrac startshapebox startshift \
+startsidebar startsimplecolumns startsom startspecialitem startspeech \
+startspformula startspraak startspread startstartstop startstaticMPfigure \
+startstaticMPgraphic startstrictinspectnextcharacter startstructurepageregister startstrut startstyle \
+startsubformulas startsubjectlevel startsubonderwerp startsubparagraaf startsubsentence \
+startsubstack startsubsubonderwerp startsubsubparagraaf startsubsubsubonderwerp startsubsubsubparagraaf \
+startsubsubsubsubonderwerp startsubsubsubsubparagraaf startsymbolset starttabel starttable \
+starttablehead starttables starttabletail starttabulate starttabulatehead \
+starttabulatetail starttagged starttbinom starttekstachtergrond starttekstlijn \
+starttexcode starttexdefinition starttext starttextbackgroundmanual starttextcolor \
+starttextcolorintent starttextflow starttitel starttokens starttransparent \
+starttypescript starttypescriptcollection startunderdash startunderdashes startunderdot \
+startunderdots startunderrandom startunderrandoms startunderstrike startunderstrikes \
+startunframed startuniqueMPgraphic startuniqueMPpagegraphic startunpacked startusableMPgraphic \
+startuseMPgraphic startusemathstyleparameter startusingbtxspecification startvbox startvboxregister \
+startvboxtohbox startvboxtohboxseparator startviewerlayer startvtop startvtopregister \
+startxcell startxcellgroup startxfrac startxgroup startxmldisplayverbatim \
+startxmlinlineverbatim startxmlraw startxmlsetups startxrow startxrowgroup \
+startxtable startxtablebody startxtablefoot startxtablehead startxtablenext \
+startxxfrac stelachtergrondenin stelachtergrondin 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 \
+steldoordefinierenin steldoornummerenin steldunnelijnenin stelformulein stelformulierenin \
+stelhoofdin stelhoofdtekstenin stelingesprongentextin stelinmargein stelinspringenin \
+stelinteractiebalkin stelinteractiein stelinteractiemenuin stelinteractieschermin stelinterliniein \
+stelinvullijnenin stelinvulregelsin stelitemgroepin stelitemsin stelkadertekstin \
+stelkantlijnin stelkapitalenin stelkleurenin stelkleurin stelkolommenin \
+stelkopin stelkopnummerin stelkoppeltekenin stelkoppenin stelkorpsin \
+stellayoutin stellijndiktein stellijstin stelmargeblokkenin stelmarkeringin \
+stelnaastplaatsenin stelomlijndin stelonderin stelondertekstenin stelopmaakin \
+stelopsommingenin stelpaginacommentaarin stelpaginanummerin stelpaginanummeringin stelpaginaovergangenin \
+stelpaletin stelpapierformaatin stelpapierin stelparagraafnummerenin stelplaatsblokin \
+stelplaatsbloksplitsenin stelplaatsin stelpositionerenin stelprogrammasin stelrefererenin \
+stelregelnummerenin stelregelsin 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 \
+stelteksttekstenin steltolerantiein steltypein steltypenin stelurlin \
+stelveldenin stelveldin stelvoetin stelvoettekstenin stelwiskundeuitlijnenin \
+stelwitruimtein stopJScode stopJSpreamble stopMPclip stopMPcode \
+stopMPdefinitions stopMPdrawing stopMPenvironment stopMPextensions stopMPinclusions \
+stopMPinitializations stopMPpage stopMPpositiongraphic stopMPpositionmethod stopMPrun \
+stopTABLE stopTABLEbody stopTABLEfoot stopTABLEhead stopTABLEnext \
+stopTC stopTD stopTDs 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 \
+stopaanhangsel stopachtergrond stopallmodes stoparrangedpages stopaside \
+stopattachment stopbar stopbinom stopbitmapimage stopblockquote \
+stopblokcitaat stopbtxrenderingdefinitions stopbuffer stopbutton stopcatcodetable \
+stopcharacteralign stopcheckedfences stopchemical stopcitaat stopciteer \
+stopcollect stopcollecting stopcolorintent stopcoloronly stopcolorset \
+stopcolumns stopcolumnspan stopcombination stopcomment stopcommentaar \
+stopcontextcode stopcontextdefinitioncode stopctxfunction stopctxfunctiondefinition stopcurrentcolor \
+stopcurrentlistentrywrapper stopdbinom stopdelimited stopdelimitedtext stopdfrac \
+stopdisplaymath stopdmath stopdocument stopdoorstreep stopdoorstrepen \
+stopeffect stopelement stopembeddedxtable 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 stopsubjectlevel 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 \
+stopfiguur stopfitfieldframed stopfittingpage stopfloatcombination stopfont \
+stopfontclass stopfontsolution stopformula stopformulas stopfrac \
+stopframedcontent stopframedtext stopgrafiek stopgridsnapping stophbox \
+stophboxestohbox stophboxregister stophelptekst stophelptext stophiddenbar \
+stophiding stophighlight stophoofdstuk stophyphenation stopimath \
+stopindentation stopindentedtext stopinmframed stopinteractiemenu stopinteraction \
+stopinterface stopintermezzo stopintertext stopitemgroup stopkadertekst \
+stopkantlijn stopkleur stopknockout stopkop stoplayout \
+stoplinefiller stoplinenumbering stoplinetable stoplinetablebody stoplinetablecell \
+stoplinetablehead stoplocalheadsetup stoplocallinecorrection stoplocalnotes stoplocalsetups \
+stoplokalevoetnoten stoplua stopluacode stopluaparameterset stopluasetups \
+stopmakeup stopmargeblok stopmarkedcontent stopmathmode stopmathstyle \
+stopmatrices stopmcframed stopmdformula stopmframed stopmixedcolumns \
+stopmode stopmodeset stopmodule stopmoduletestsection stopmpformula \
+stopnaar stopnamedsection stopnamedsubformulas stopnarrow stopnarrower \
+stopnegative stopnicelyfilledbox stopnobar stopnointerference stopnotallmodes \
+stopnotext stopnotmode stopomgeving stopomlijnd stoponderdeel \
+stoponderstreep stoponderstrepen stoponderwerp stopopelkaar stopopposite \
+stopopsomming stopoutputstream stopoverlay stopoverprint stopoverstreep \
+stopoverstrepen stoppagecomment stoppagefigure stoppagegrid stoppagegridspan \
+stoppagelayout stoppar stopparagraaf stopparagraph stopparagraphs \
+stopparagraphscell stopparbuilder stoppath stopplaatsformule stopplacepairedbox \
+stoppositioning stoppositionoverlay stoppositive stoppostponing stopprocessassignmentcommand \
+stopprocessassignmentlist stopprocesscommacommand stopprocesscommalist stopprodukt stopprojekt \
+stopprotect stopprotectedcolors stoppublicatie stoppunctuation stoprandomized \
+stoprandomseed stoprawsetups stopreadingfile stopreferenceprefix stopregel \
+stopregelcorrectie stopregime stopregister stopreusableMPgraphic stopscript \
+stopsdformula stopsectionblock stopsectionblockenvironment stopsectionlevel stopsetups \
+stopsfrac stopshapebox stopshift stopsidebar stopsimplecolumns \
+stopsom stopspecialitem stopspeech stopspformula stopspraak \
+stopspread stopstartstop stopstaticMPfigure stopstaticMPgraphic stopstrictinspectnextcharacter \
+stopstructurepageregister stopstrut stopstyle stopsubformulas stopsubjectlevel \
+stopsubonderwerp stopsubparagraaf stopsubsentence stopsubstack stopsubsubonderwerp \
+stopsubsubparagraaf stopsubsubsubonderwerp stopsubsubsubparagraaf stopsubsubsubsubonderwerp stopsubsubsubsubparagraaf \
+stopsymbolset stoptabel stoptable stoptablehead stoptables \
+stoptabletail stoptabulate stoptabulatehead stoptabulatetail stoptagged \
+stoptbinom stoptekstachtergrond stoptekstlijn stoptexcode stoptexdefinition \
+stoptext stoptextbackgroundmanual stoptextcolor stoptextcolorintent stoptextflow \
+stoptitel stoptokens stoptransparent stoptypescript stoptypescriptcollection \
+stopunderdash stopunderdashes stopunderdot stopunderdots stopunderrandom \
+stopunderrandoms stopunderstrike stopunderstrikes stopunframed stopuniqueMPgraphic \
+stopuniqueMPpagegraphic stopunpacked stopusableMPgraphic stopuseMPgraphic stopusemathstyleparameter \
+stopusingbtxspecification stopvbox stopvboxregister stopvboxtohbox stopvboxtohboxseparator \
+stopviewerlayer stopvtop stopvtopregister stopxcell stopxcellgroup \
+stopxfrac stopxgroup stopxmldisplayverbatim stopxmlinlineverbatim stopxmlraw \
+stopxmlsetups stopxrow stopxrowgroup stopxtable stopxtablebody \
+stopxtablefoot stopxtablehead stopxtablenext stopxxfrac strictdoifelsenextoptional \
+strictdoifnextoptionalelse stripcharacter 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 \
+style styleinstance subonderwerp subpaginanummer subparagraaf \
+subsentence substituteincommalist subsubonderwerp subsubparagraaf subsubsubonderwerp \
+subsubsubparagraaf subsubsubsubonderwerp subsubsubsubparagraaf subtractfeature swapcounts \
+swapdimens swapface swapmacros swaptypeface switchnaarkorps \
+switchstyleonly switchtocolor switchtointerlinespace symbolreference symbool \
+synchronizeblank synchronizeindenting synchronizemarking synchronizeoutputstreams synchronizestrut \
+synchronizewhitespace systemlog systemlogfirst systemloglast systemsetups \
+tLeftarrow tLeftrightarrow tRightarrow taal tabel \
+tabulateautoline tabulateautorule tabulateline tabulaterule taggedctxcommand \
+taggedlabeltexts 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 \
+texdefinition texsetup textcitation textcite textcontrolspace \
+textflowcollector textmath textminus textormathchar textplus \
+textvisiblespace tfrac thainumerals thefirstcharacter thenormalizedbodyfontsize \
+theremainingcharacters thickspace thinspace thirdoffivearguments thirdoffourarguments \
+thirdofsixarguments thirdofthreearguments thirdofthreeunexpanded thookleftarrow thookrightarrow \
+threedigitrounding tibetannumerals tightlayer tinyfont titel \
+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 transparent trel \
+trightarrow trightharpoondown trightharpoonup trightleftharpoons trightoverleftarrow \
+triplebond truefilename truefontname ttriplerel ttwoheadleftarrow \
+ttwoheadrightarrow twodigitrounding tx txx typ \
+type typebuffer typedefinedbuffer typeface typefile \
+typescriptone typescriptprefix typescriptthree typescripttwo typesetbuffer \
+typesetfile uconvertnumber uedcatcodecommand uit uitgerekt \
+undefinevalue undepthed 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 \
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 \
-useblankparameter 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 \
+useMPgraphic useMPlibrary useMPrun useMPvariables useblankparameter \
+usebodyfont usebodyfontparameter usebtxdataset usebtxdefinitions usecolors \
+usecomponent usedummycolorparameter usedummystyleandcolor usedummystyleparameter useenvironment \
+useexternalrendering usefigurebase usefile usegridparameter useindentingparameter \
+useindentnextparameter useinterlinespaceparameter uselanguageparameter useluamodule usemathstyleparameter \
+useproduct useprofileparameter useproject usereferenceparameter userpagenumber \
+usesetupsparameter usestaticMPfigure usesubpath usetexmodule usezipfile \
+utfchar utflower utfupper utilityregisterlength vastespatie \
+vastespaties vboxreference veld veldstapel verbatim \
+verbatimstring verbergblokken verbergen verbosenumber vergelijkkleurgroep \
+vergelijkpalet versie vertaal verticalgrowingbar verticalpositionbar \
+verwerkblokken vglue viewerlayer vl voetnoottekst \
+volledigepaginanummer volledigregister voluit vphantom vpos \
+vsmash vsmashbox vsmashed vspace vspacing \
+wdofstring weekdag widthofstring widthspanningtext wilijnd \
+wiskunde 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 xmlremapname \
xmlremapnamespace xmlremovedocumentsetup xmlremovesetup xmlresetdocumentsetups xmlresetinjectors \
xmlresetsetups xmlsave xmlsetentity xmlsetfunction xmlsetinjectors \
xmlsetsetup xmlsetup xmlshow xmlsnippet xmlstrip \
@@ -5215,226 +4729,209 @@ 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 \
+MPwhd 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 TEXpage TaBlE TeX \
+TheNormalizedFontSize TransparencyHack VerboseNumber WEEKDAY WORD \
+WORDS WidthSpanningText Word Words XETEX \
+XeTeX abjadnaivenumerals abjadnodotnumerals abjadnumerals activatespacehandler \
+adaptcollector adaptfontfeature adaptpapersize addfeature addtoJSpreamble \
+addtocommalist addvalue aftersplitstring aftertestandsplitstring alignmentcharacter \
+allinputpaths alphabeticnumerals alwayscitation 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 aside assignalfadimension \
+assigndimen assigndimension assignifempty assigntranslation assignvalue \
+assignwidth assumelongusagecs astype attachment autocap \
+autodirhbox autodirvbox autodirvtop autoinsertnextspace automathematics \
+autosetups availablehsize averagecharwidth backgroundimage backgroundimagefill \
+backgroundline basegrid baselineleftbox baselinemiddlebox baselinerightbox \
+bbox beforesplitstring beforetestandsplitstring big bigbodyfont \
+bigg bigger biggl biggm biggr \
+bigl bigm bigr bigskip binom \
+bitmapimage blap bleed bleedheight bleedwidth \
+blockligatures blockquote bodyfontenvironmentlist bodyfontsize bold \
+boldface bolditalic boldslanted booleanmodevalue bottombox \
+bottomleftbox bottomrightbox boxcursor boxmarker boxofsize \
+boxreference bpos bthiddencitation btxabbreviatedjournal btxaddjournal \
+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 btxlistcitation btxloadjournalist btxoneorrange btxremapauthor \
+btxsavejournalist btxsetup btxsingularorplural btxsingularplural btxtextcitation \
+calligraphic camel cap catcodetablename cbox \
+centerbox centeredbox centerednextbox cfrac chardescription \
+charwidthlanguage checkcharacteralign checkedchar checkedfiller checkedstrippedcsname \
+checkinjector checknextindentation checknextinjector checkpage checkparameters \
+checkpreviousinjector checksoundtrack checktwopassdata checkvariables chem \
+chemical chemicalbottext chemicalmidtext chemicalsymbol chemicaltext \
+chemicaltoptext chineseallnumerals chinesecapnumerals chinesenumerals citation \
+cite clap classfont cldcommand cldcontext \
+cldloadfile cldprocessfile cleftarrow collect collectedtext \
+collectexpanded colorcomponents colored coloronly columnbreak \
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 \
+comparedimension comparedimensioneps completebtxrendering completelist completelistofpublications \
+completelistofsorts completelistofsynonyms complexorsimple complexorsimpleempty composedcollector \
+composedlayer compresult constantdimen constantdimenargument constantemptyargument \
+constantnumber constantnumberargument contentreference continuednumber continueifinputfile \
+convertargument convertcommand convertedcounter converteddimen convertedsubcounter \
+convertmonth convertvalue convertvboxtohbox copypages copyparameters \
+copyposition 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 datasetvariable dayoftheweek \
+dayspermonth dbinom 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 definecomplexorsimpleempty defineconversionset definecounter definedataset \
+definedelimitedtext definedfont defineeffect defineexpandable defineexternalfigure \
+definefallbackfamily definefieldbody definefieldbodyset definefieldcategory definefileconstant \
+definefilefallback definefilesynonym definefiller definefirstline definefittingpage \
+definefontalternative definefontfallback definefontfamily definefontfamilypreset definefontfeature \
+definefontfile definefontsize definefontsolution defineformula defineformulaalternative \
+defineformulaframed defineframedcontent definefrozenfont defineglobalcolor definegraphictypesynonym \
+definegridsnapping defineheadalternative definehelp definehigh definehighlight \
+definehspace definehypenationfeatures defineindentedtext defineindenting defineinitial \
+defineinsertion defineinteraction defineinteractionbar defineinterfaceconstant defineinterfaceelement \
+defineinterfacevariable defineinterlinespace defineintermediatecolor defineitems definelabelclass \
+definelayerpreset definelinefiller definelinenote definelinenumbering definelines \
+definelistalternative definelistextra definelow definelowhigh definelowmidhigh \
+definemarginblock definemargindata definemarker 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 \
+definemode definemultitonecolor definenamedcolor definenamespace definenarrower \
+definenote 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 \
+dimensiontocount directcolor 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 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 \
+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 enskip enspace env \
+envvar eoverbarfill eoverbracefill eoverbracketfill eoverparentfill \
+epos equaldigits erightarrowfill erightharpoondownfill erightharpoonupfill \
+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 fence fenced fetchallmarkings \
fetchallmarks fetchmark fetchmarking fetchonemark fetchonemarking \
fetchruntinecommand fetchtwomarkings fetchtwomarks fieldbody fifthoffivearguments \
fifthofsixarguments figurefilename figurefilepath figurefiletype figurefullname \
@@ -5446,12 +4943,12 @@ firstcharacter firstcounter firstcountervalue firstoffivearguments firstoffourar
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 \
+fittopbaselinegrid flag floatuserdataparameter flushboxregister flushcollector \
+flushlayer flushlocalfloats flushnextbox flushnotes flushoutputstream \
+flushshapebox flushtextflow flushtokens flushtoks fontalternative \
+fontbody fontchar fontcharbyindex fontclass fontclassname \
+fontface fontfeaturelist fontsize fontstyle forcecharacterstripping \
+forcelocalfloats forgeteverypar forgetparameters formula foundbox \
fourthoffivearguments fourthoffourarguments fourthofsixarguments frac frameddimension \
framedparameter framedtext freezedimenmacro freezemeasure frenchspacing \
fromlinenote frozenhbox gdefconvertedargument gdefconvertedcommand getMPdrawing \
@@ -5462,80 +4959,74 @@ getexpandedparameters getfiguredimensions getfirstcharacter getfirsttwopassdata
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 \
+getobjectdimensions getpaletsize getparameters getprivatechar getprivateslot \
+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 \
+grabbufferdata grabbufferdatadirect grabuntil 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 \
+hash hboxofvbox hboxreference hdofstring headhbox \
+headnumbercontent headnumberdistance headnumberwidth headreferenceattributes headsetupspacing \
+headtextcontent headtextdistance headtextwidth headvbox headwidth \
+heightanddepthofstring heightofstring heightspanningtext helptext hglue \
+hiddenbar 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 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 \
+incrementvalue indentation infofont infofontbold inheritparameter \
+inhibitblank initializeboxstack inlinebuffer inlinedbox inlinemath \
+inlinemathematics inlinemessage inlineordisplaymath inlinerange inmframed \
+innerflushshapebox 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 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 \
+koreannumeralsc koreannumeralsp koreanparentnumerals languageCharacters languagecharacters \
+languagecharwidth lastcounter lastcountervalue lastdigit lastlinewidth \
+lastnaturalboxdp lastnaturalboxht lastnaturalboxwd lastpredefinedsymbol lastrealpage \
+lastrealpagenumber lastsubcountervalue lastsubpage lastsubpagenumber lasttwodigits \
+lastuserpage lastuserpagenumber lateluacode layeredtext layerheight \
+layerwidth lazysavetaggedtwopassdata lazysavetwopassdata lbox left \
+leftbottombox leftbox lefthbox leftorrighthbox leftorrightvbox \
+leftorrightvtop leftskipadaption leftsubguillemot lefttopbox 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 \
+limtatefirstline linespanningtext listcitation 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 \
lomihi lowerbox lowercased lowercasestring lowerleftdoubleninequote \
lowerleftsingleninequote lowerrightdoubleninequote lowerrightsingleninequote lrtbbox ltop \
luaTeX luacode luaconditional luaenvironment luaexpanded \
@@ -5545,82 +5036,73 @@ mRightarrow makecharacteractive makerawcommalist makestrutofbox mapfontsize \
margindata markcontent markinjector mat math \
mathbf mathbi mathblackboard mathbs mathcommand \
mathdefault mathfraktur mathfunction mathit mathitalic \
-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 \
+mathop mathrm mathscript mathsl mathss \
+mathtext mathtextbf mathtextbi mathtextbs mathtextit \
+mathtextsl mathtexttf mathtf mathtriplet mathtt \
+mathupright mathword mathwordbf mathwordbi mathwordbs \
+mathwordit mathwordsl mathwordtf mbox mcframed \
+md measure measured medskip medspace \
+mequal message metaTeX mfence mframed \
+mfunction mfunctionlabeltext mhbox mhookleftarrow mhookrightarrow \
+middle middlebox midhbox minimalhbox mixedcaps \
+mkvibuffer mleftarrow mleftharpoondown mleftharpoonup mleftrightarrow \
+mleftrightharpoons mmapsto moduleparameter molecule mono \
+monobold mononormal monthlong monthshort mp \
+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 \
+nobar nocitation nocite nodetostring noffigurepages \
+noflines noflocalfloats noindentation noitem 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 \
+notesymbol ntimes numberofpoints obeydepth objectdepth \
+objectheight objectmargin objectwidth obox offset \
+offsetbox onedigitrounding ordinaldaynumber ordinalstr 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 \
+over overbar overbars overbartext overbarunderbar \
+overbrace overbracetext overbraceunderbrace overbracket overbrackettext \
+overbracketunderbracket 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 pagestaterealpage paletsize 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 placecitation placecomments placecurrentformulanumber \
+placedbox placefloatwithsetups placeframed placehelp placeinitial \
+placelayer placelayeredtext placelistofpublications placelistofsorts placelistofsynonyms \
+placelocalnotes placement placenamedfloat placenamedformula placenotes \
+placepairedbox placeparallel placerenderingwindow popattribute popmacro \
+popmode popsystemmode positionoverlay positionregionoverlay postponenotes \
+predefinedfont predefinefont predefinesymbol prefixedpagenumber prependetoks \
prependgvalue prependtocommalist prependtoks prependtoksonce prependvalue \
-presetbtxlabeltext presetdocument 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 \
+presetdocument presetfieldsymbols 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 purenumber pushattribute pushbutton \
+pushmacro pushmode pushoutputstream pushsystemmode qquad \
+quad quads quitcommalist quitprevcommalist quittypescriptscanning \
+raisebox randomizetext randomnumber rawcounter rawcountervalue \
rawdate rawdoifelseinset rawdoifinset rawdoifinsetelse rawgetparameters \
rawprocessaction rawprocesscommacommand rawprocesscommalist rawstructurelistuservariable rawsubcountervalue \
rbox readfile readfixfile readjobfile readlocfile \
@@ -5631,434 +5113,386 @@ registerexternalfigure registerfontclass registerhyphenationexception registerhy
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 \
+removesubstring removetoks removeunwantedspaces replacefeature replaceincommalist \
+replaceword rescan rescanwithsetup resetMPdrawing resetMPenvironment \
+resetMPinstance resetallattributes resetandaddfeature resetbar 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 resolvedglyphdirect \
+resolvedglyphstyled restartcounter restorebox restorecatcodes restorecounter \
+restorecurrentattributes restoreendofline restoreglobalbodyfont reusableMPgraphic reuseMPgraphic \
+reuserandomseed revivefeature rfence rhbox right \
+rightbottombox rightbox righthbox rightorleftpageaction rightskipadaption \
+rightsubguillemot righttolefthbox righttoleftvbox righttoleftvtop righttopbox \
+rlap robustaddtocommalist robustdoifelseinset robustdoifinsetelse robustpretocommalist \
+rollbutton roman rtop ruledhbox ruledhpack \
+ruledmbox ruledtopv ruledtpack ruledvbox ruledvpack \
+ruledvtop runMPbuffer runninghbox safechar sans \
+sansbold sansnormal sansserif savebox savebtxdataset \
+savebuffer savecounter savecurrentattributes savenormalmeaning savetaggedtwopassdata \
+savetwopassdata sbox sd secondoffivearguments secondoffourarguments \
+secondofsixarguments secondofthreearguments secondofthreeunexpanded secondoftwoarguments secondoftwounexpanded \
+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 setfractions setgmeasure setgvalue \
+setgvariable setgvariables sethboxregister sethyphenatedurlafter sethyphenatedurlbefore \
+sethyphenatedurlnormal sethyphenationfeatures setinitial setinjector setinteraction \
+setinterfacecommand setinterfaceconstant setinterfaceelements setinterfacemessage setinterfacevariable \
+setinternalrendering setitaliccorrection setlayer setlayerframed setlayertext \
+setlinefiller setlocalhsize setmainbodyfont setmainparbuilder setmarker \
+setmarking setmathstyle setmeasure setmessagetext setmode \
+setnostrut setnote 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 setupMPgraphics setupMPinstance setupMPpage setupMPvariables \
+setupTABLE setupTEXpage setupattachment setupbackend setupbar \
+setupbleeding setupbookmark setupbtx setupbtxdataset setupbtxlist \
+setupbtxregister setupbtxrendering setupbutton setupcapitals setupcharacterkerning \
+setupcharacterspacing setupchemical setupchemicalframed setupcollector setupcolumnspan \
+setupcombination setupcounter setupdataset setupdelimitedtext setupdescription \
+setupdirections setupdocument setupeffect setupenumeration setupenv \
+setupexport setupexternalfigure setupexternalsoundtracks setupfieldbody setupfieldcategory \
+setupfieldcontentframed setupfieldlabelframed setupfieldtotalframed setupfiller setupfirstline \
+setupfittingpage setupfloatcaption setupfontexpansion setupfontprotrusion setupfonts \
+setupfontsolution setupformula setupformulaframed 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 \
+setuphyphenation setupindentedtext setupinitial setupinsertion setupitaliccorrection \
+setuplabel setuplayer setuplayeredtext setuplayouttext setuplinefiller \
+setuplinefillers setuplinenote setuplinetable setuplistalternative setuplistextra \
+setuplocalfloats setuplocalinterlinespace setuplow setuplowhigh setuplowmidhigh \
+setupmarginblock setupmargindata setupmarginframed setupmarginrule setupmathcases \
+setupmathematics setupmathfence setupmathfraction setupmathframed setupmathmatrix \
setupmathornament setupmathradical setupmathstackers setupmathstyle setupmixedcolumns \
-setupmodule setupnotation setupnote setupoffset setupoffsetbox \
-setupoperatortext setupoutputroutine setupoutputroutine setuppagechecker setuppagegrid \
+setupmodule setupnotation setupnotations setupnote setupnotes \
+setupoffset setupoffsetbox 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 \
+setupprocessor setupprofile setupquotation setuprealpagenumber setupreferenceformat \
+setupreferenceprefix setupreferencestructureprefix setupregisters setuprenderingwindow setups \
+setupscale setupscript setupscripts 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 \
+setupsubformula setuptabulation setuptagging setuptextbackground setuptextflow \
+setuptooltip setupunit setupurl setupuserpagenumber setupversion \
+setupviewerlayer setupvspacing setupwithargument setupwithargumentswapped setupxml \
+setupxtable setuvalue setuxvalue setvalue setvariable \
+setvariables setvboxregister setvisualizerfont setvtopregister 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 \
+shapedhbox showallmakeup showattributes showboxes showbtxdatasetauthors \
+showbtxdatasetcompleteness showbtxdatasetfields 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 simplegroupedcommand 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 someheadnumber somekindoftab somelocalfloat somenamedheadnumber \
+someplace sp spanishNumerals spanishnumerals speech \
+splitatasterisk splitatcolon splitatcolons splitatcomma splitdfrac \
+splitfilename splitfrac splitoffbase splitofffull splitoffkind \
+splitoffname splitoffpath splitoffroot splitofftokens splitofftype \
+splitstring spreadhbox sqrt stackrel startregister \
+startstructurepageregister stopregister stopstructurepageregister strictdoifelsenextoptional strictdoifnextoptionalelse \
+stripcharacter 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 \
+styleinstance subsentence substituteincommalist subtractfeature swapcounts \
+swapdimens swapface swapmacros swaptypeface switchstyleonly \
+switchtocolor switchtointerlinespace symbolreference synchronizeblank synchronizeindenting \
+synchronizemarking synchronizeoutputstreams synchronizestrut synchronizewhitespace systemlog \
+systemlogfirst systemloglast systemsetups tLeftarrow tLeftrightarrow \
+tRightarrow tabulateautoline tabulateautorule tabulateline tabulaterule \
+taggedctxcommand taggedlabeltexts 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 \
+testtokens texdefinition texsetup textcitation textcite \
+textcontrolspace textflowcollector textmath textminus textormathchar \
+textplus textvisiblespace tfrac thainumerals thefirstcharacter \
+thenormalizedbodyfontsize theremainingcharacters thickspace thinspace thirdoffivearguments \
+thirdoffourarguments thirdofsixarguments thirdofthreearguments thirdofthreeunexpanded thookleftarrow \
+thookrightarrow threedigitrounding tibetannumerals tightlayer tinyfont \
+tlap tleftarrow tleftharpoondown tleftharpoonup tleftrightarrow \
+tleftrightharpoons tmapsto tochar tolinenote 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 \
-useblankparameter 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 آیتم آیتمها آینه \
-از استفاده‌بلوکها استفاده‌دستخط‌تایپ استفاده‌شکل‌خارجی استفاده‌قطعه‌موزیک‌خارجی \
-استفاده‌مدول استفاده‌مسیر استفاده‌نمادها استفاده‌نوشتارخارجی استفاده‌پرونده‌دستخط‌تایپ \
-اعدادلاتین افزودن اما اما انتخاب‌بلوکها \
-بارگذاری‌آرایش بارگذاری‌آیتمها بارگذاری‌ارجاع بارگذاری‌اندازه‌برگ بارگذاری‌اندازه‌برگ \
-بارگذاری‌باریکتر بارگذاری‌بافر بارگذاری‌بالا بارگذاری‌بردباری بارگذاری‌برنامه‌ها \
-بارگذاری‌برگ بارگذاری‌بلوک بارگذاری‌بلوک‌بخش بارگذاری‌تایپ بارگذاری‌تایپ‌کردن \
-بارگذاری‌ترتیب بارگذاری‌ترتیب بارگذاری‌تنظیم بارگذاری‌تنظیم‌ریاضی بارگذاری‌ته‌برگ \
-بارگذاری‌تورفتگی بارگذاری‌توضیح بارگذاری‌توضیح‌صفحه بارگذاری‌ثبت بارگذاری‌ثبت \
-بارگذاری‌جانشانی بارگذاری‌جدولها بارگذاری‌جدول‌بندی بارگذاری‌خالی بارگذاری‌خطها \
-بارگذاری‌خطهای‌حاشیه بارگذاری‌خطهای‌سیاه بارگذاری‌خطهای‌متن بارگذاری‌خطها‌ی‌نازک بارگذاری‌درج‌درخطها \
-بارگذاری‌درج‌مخالف بارگذاری‌دوران بارگذاری‌راهنما بارگذاری‌رنگ بارگذاری‌رنگها \
-بارگذاری‌زبان بارگذاری‌ستونها بارگذاری‌سر بارگذاری‌سربرگ بارگذاری‌شرح \
-بارگذاری‌شروع‌پایان بارگذاری‌شماره‌زیرصفحه بارگذاری‌شماره‌سر بارگذاری‌شماره‌صفحه بارگذاری‌شماره‌گذاری‌صفحه \
-بارگذاری‌شماره‌گذاری‌پاراگراف بارگذاری‌شماره‌‌گذاری‌خط بارگذاری‌شناور بارگذاری‌شکافتن‌شناورها بارگذاری‌طرح \
-بارگذاری‌طرح‌بندی بارگذاری‌طرح‌بندی بارگذاری‌عرض‌خط بارگذاری‌فاصله‌بین‌خط بارگذاری‌فاصله‌بین‌خط \
-بارگذاری‌فاصله‌بین‌خط بارگذاری‌فاصله‌بین‌خط بارگذاری‌فاصله‌بین‌خط بارگذاری‌فاصله‌بین‌خط بارگذاری‌فضای‌سفید \
+tracedfontname traceoutputroutines tracepositions transparencycomponents transparent \
+trel trightarrow trightharpoondown trightharpoonup trightleftharpoons \
+trightoverleftarrow triplebond truefilename truefontname ttriplerel \
+ttwoheadleftarrow ttwoheadrightarrow twodigitrounding tx txx \
+typ typedefinedbuffer typeface typescriptone typescriptprefix \
+typescriptthree typescripttwo typesetbuffer typesetfile uconvertnumber \
+uedcatcodecommand undefinevalue undepthed 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 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 useblankparameter usebodyfont usebodyfontparameter \
+usebtxdataset usebtxdefinitions usecolors usecomponent usedummycolorparameter \
+usedummystyleandcolor usedummystyleparameter useenvironment useexternalrendering usefigurebase \
+usefile usegridparameter useindentingparameter useindentnextparameter useinterlinespaceparameter \
+uselanguageparameter useluamodule usemathstyleparameter useproduct useprofileparameter \
+useproject usereferenceparameter userpagenumber usesetupsparameter usestaticMPfigure \
+usesubpath usetexmodule useurl usezipfile utfchar \
+utflower utfupper utilityregisterlength vboxreference verbatim \
+verbatimstring verbosenumber verticalgrowingbar verticalpositionbar 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 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 \
+زبان‌اصلی زیربخش زیرزیربخش زیرزیرزیربخش زیرزیرزیرزیربخش \
+زیرزیرزیرزیرموضوع زیرزیرزیرموضوع زیرزیرموضوع زیرموضوع ستون \
+ستون‌امتحان سخنرانی سرپوش‌کوچک‌نه شروعJScode شروعJSpreamble \
+شروعMPclip شروعMPcode شروعMPdefinitions شروعMPdrawing شروعMPenvironment \
+شروعMPextensions شروعMPinclusions شروعMPinitializations شروعMPpage شروعMPpositiongraphic \
+شروعMPpositionmethod شروعMPrun شروعTABLE شروعTABLEbody شروعTABLEfoot \
+شروعTABLEhead شروعTABLEnext شروعTC شروعTD شروعTDs \
+شروعTEXpage شروعTH شروعTN شروعTR شروعTRs \
+شروعTX شروعTY شروعallmodes شروعarrangedpages شروعaside \
+شروعattachment شروعbar شروعbinom شروعbitmapimage شروعblockquote \
+شروعbtxrenderingdefinitions شروعbuffer شروعbutton شروعcatcodetable شروعcharacteralign \
+شروعcheckedfences شروعchemical شروعcollect شروعcollecting شروعcolorintent \
+شروعcoloronly شروعcolorset شروعcolumns شروعcolumnspan شروعcombination \
+شروعcomment شروعcontextcode شروعcontextdefinitioncode شروعctxfunction شروعctxfunctiondefinition \
+شروعcurrentcolor شروعcurrentlistentrywrapper شروعdbinom شروعdelimited شروعdelimitedtext \
+شروعdfrac شروعdisplaymath شروعdmath شروعdocument شروعeffect \
+شروعelement شروعembeddedxtable شروعendofline شروعexceptions شروعexpanded \
+شروعexpandedcollect شروعextendedcatcodetable شروعexternalfigurecollection شروعfigure شروعfitfieldframed \
+شروعfittingpage شروعfloatcombination شروعfont شروعfontclass شروعfontsolution \
+شروعformula شروعformulas شروعfrac شروعframedcontent شروعframedtext \
+شروعgridsnapping شروعhbox شروعhboxestohbox شروعhboxregister شروعhelptext \
+شروعhiddenbar شروعhiding شروعhighlight شروعhyphenation شروعimath \
+شروعindentation شروعindentedtext شروعinmframed شروعinteraction شروعinterface \
+شروعintertext شروعitemgroup شروعknockout شروعlayout شروعlinecorrection \
+شروعlinefiller شروعlinenumbering شروعlinetable شروعlinetablebody شروعlinetablecell \
+شروعlinetablehead شروعlocalfootnotes شروعlocalheadsetup شروعlocallinecorrection شروعlocalnotes \
شروع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 \
+شروعmakeup شروعmarginblock شروعmarkedcontent شروعmathmode شروعmathstyle \
+شروعmatrices شروعmcframed شروعmdformula شروعmframed شروعmixedcolumns \
+شروعmode شروعmodeset شروعmodule شروعmoduletestsection شروعmpformula \
+شروعnamedsection شروعnamedsubformulas شروعnarrow شروعnarrower شروعnegative \
+شروعnicelyfilledbox شروعnobar شروعnointerference شروعnotallmodes شروعnotext \
+شروعnotmode شروع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 شروعsubjectlevel شروع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 شروعآیتم شروعاما \
-شروعبروبه شروعتنظیم‌راست شروعتنظیم‌وسط شروعتولید شروعتولید \
-شروعحقیقت شروعخط‌حاشیه شروعخط‌حاشیه شروعخط‌متن شروعدرج‌راهنما \
-شروعدرج‌شناور شروعدرج‌فرمول شروعدرج‌فرمول شروعرنگ شروعرنگ \
-شروعرنگ شروعسر شروعفشرده شروعقالبی شروعمتن‌برچسب \
-شروعمتن‌سر شروعمحیط شروعمحیط شروعمنفی شروعمنوی‌پانل \
-شروعمولفه شروعمولفه شروعنشر شروعنقل شروعنقل‌قول \
-شروعپانوشت شروعپانوشت شروعپروژه شروعپروژه شروعپس‌زمینه \
-شروعپس‌زمینه شروعچپ‌چین شروع‌خط شماره‌زیرصفحه شماره‌سر \
+شروعpar شروعparagraph شروعparagraphs شروعparagraphscell شروعparbuilder \
+شروعpath شروعplacepairedbox شروعpositioning شروعpositionoverlay شروعpositive \
+شروعpostponing شروعprocessassignmentcommand شروعprocessassignmentlist شروعprocesscommacommand شروعprocesscommalist \
+شروعprotect شروعprotectedcolors شروعpunctuation شروعrandomized شروعrandomseed \
+شروعrawsetups شروعreadingfile شروعreferenceprefix شروعregime شروعreusableMPgraphic \
+شروعscript شروعsdformula شروعsectionblock شروعsectionblockenvironment شروعsectionlevel \
+شروعsetups شروعsfrac شروعshapebox شروعshift شروعsidebar \
+شروعsimplecolumns شروعspecialitem شروعspeech شروعspformula شروعspread \
+شروعstartstop شروعstaticMPfigure شروعstaticMPgraphic شروعstrictinspectnextcharacter شروعstrut \
+شروعstyle شروعsubformulas شروعsubjectlevel شروعsubsentence شروعsubstack \
+شروعsymbolset شروعtable شروعtablehead شروعtables شروعtabletail \
+شروعtabulate شروعtabulatehead شروعtabulatetail شروعtagged شروعtbinom \
+شروعtexcode شروعtexdefinition شروعtext شروعtextbackground شروعtextbackgroundmanual \
+شروعtextcolor شروعtextcolorintent شروعtextflow شروعtokens شروعtransparent \
+شروعtypescript شروعtypescriptcollection شروعunderdash شروعunderdashes شروعunderdot \
+شروعunderdots شروعunderrandom شروعunderrandoms شروعunderstrike شروعunderstrikes \
+شروعunframed شروعuniqueMPgraphic شروعuniqueMPpagegraphic شروعunpacked شروعusableMPgraphic \
+شروعuseMPgraphic شروعusemathstyleparameter شروعusingbtxspecification شروعvbox شروعvboxregister \
+شروعvboxtohbox شروعvboxtohboxseparator شروعviewerlayer شروعvtop شروعvtopregister \
+شروعxcell شروعxcellgroup شروعxfrac شروعxgroup شروعxmldisplayverbatim \
+شروعxmlinlineverbatim شروعxmlraw شروعxmlsetups شروعxrow شروعxrowgroup \
+شروعxtable شروعxtablebody شروعxtablefoot شروعxtablehead شروعxtablenext \
+شروعxxfrac شروعآیتم شروعآیتم‌بندی شروعبخش شروعبروبه \
+شروعتوضیح شروعتولید شروعجدول شروعخط‌حاشیه شروعخط‌زدن \
+شروعخط‌زدنها شروعخط‌متن شروعدرج‌فرمول شروعرنگ شروعزیربخش \
+شروعزیرزیربخش شروعزیرزیرزیربخش شروعزیرزیرزیرزیربخش شروعزیرزیرزیرزیرموضوع شروعزیرزیرزیرموضوع \
+شروعزیرزیرموضوع شروعزیرموضوع شروعسخنرانی شروعسر شروعشکل \
+شروععنوان شروعفشرده شروعفصل شروعقالبی شروعمتن‌قالبی \
+شروعمتن‌کمکی شروعمحیط شروعمنوی‌پانل شروعموضوع شروعمولفه \
+شروعمیان‌پرده شروعمیله‌رو شروعمیله‌زیر شروعمیله‌ها‌رو شروعمیله‌‌های‌زیر \
+شروعنشر شروعنقل شروعنقل‌بلوک شروعنقل‌قول شروعپروژه \
+شروعپس‌زمینه شروعگرافیک شروع‌خط شماره‌زیرصفحه شماره‌سر \
شماره‌سرجاری شماره‌صفحه شماره‌صفحه‌کامل شماره‌فرمول شماره‌مبدل \
-شماره‌ها شکافتن‌شناور شکل‌خارجی صفحه صفحه‌تست \
-طول‌لیست عرض‌خط عنوان‌حاشیه فضا فضاهای‌ثابت \
-فضای‌ثابت فضای‌سفیدصحیح قالبی لوح‌مقایسه ماه \
-متن‌برچسب متن‌حاشیه متن‌سر متن‌پانوشت متن‌پانوشت \
-محیط محیط مراجعه مرجع مرجع‌صفحه \
-مرجع‌متن مقایسه‌گروه‌رنگ مقداررنگ مقیاس منفی \
-منفی منوی‌پانل مولفه مولفه مکان \
-میدان میدان‌شبیه‌سازی میدان‌پشته میدان‌کپی میله‌رنگ \
-میله‌پانل ناشناس نسخه نشانه‌گذاری نصب‌زبان \
-نصب‌زبان نقطه‌ها نقطه‌ها نقل نقل‌قول \
-نم نماد نماد نمادسر نمایش‌آرایش \
-نمایش‌بارگذاریها نمایش‌بستها نمایش‌توری نمایش‌رنگ نمایش‌طرح‌بندی \
-نمایش‌قالب نمایش‌قلم‌بدنه نمایش‌لوح نمایش‌مجموعه‌علامت نمایش‌محیط‌قلم‌بدنه \
-نمایش‌چاپ نمایش‌گروه‌رنگ پابا پانوشت پانوشت \
-پایان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 \
+شماره‌ها شکافتن‌شناور شکل شکل‌خارجی صفحه \
+صفحه‌تست طول‌لیست عرض‌خط عنوان فصل \
+فضا فضاهای‌ثابت فضای‌ثابت فضای‌سفیدصحیح قالبی \
+لوح‌مقایسه ماه متن‌قالبی متن‌پانوشت متن‌کمکی \
+محیط مراجعه مرجع مرجع‌صفحه مرجع‌متن \
+مقایسه‌گروه‌رنگ مقداررنگ مقیاس منوی‌پانل موضوع \
+مولفه مکان میان‌پرده میدان میدان‌شبیه‌سازی \
+میدان‌پشته میدان‌کپی میله‌رنگ میله‌پانل ناشناس \
+نسخه نشانه‌گذاری نصب‌زبان نقطه‌ها نقل \
+نقل‌بلوک نقل‌قول نماد نمایش‌آرایش نمایش‌بارگذاریها \
+نمایش‌بستها نمایش‌توری نمایش‌رنگ نمایش‌طرح‌بندی نمایش‌قالب \
+نمایش‌قلم‌بدنه نمایش‌لوح نمایش‌مجموعه‌علامت نمایش‌محیط‌قلم‌بدنه نمایش‌چاپ \
+نمایش‌گروه‌رنگ پابا پایانJScode پایانJSpreamble پایانMPclip \
+پایانMPcode پایانMPdefinitions پایانMPdrawing پایانMPenvironment پایانMPextensions \
+پایانMPinclusions پایانMPinitializations پایانMPpage پایانMPpositiongraphic پایانMPpositionmethod \
+پایانMPrun پایانTABLE پایانTABLEbody پایانTABLEfoot پایانTABLEhead \
+پایانTABLEnext پایانTC پایانTD پایانTDs پایانTEXpage \
+پایانTH پایانTN پایانTR پایانTRs پایانTX \
+پایانTY پایانallmodes پایانarrangedpages پایانaside پایانattachment \
+پایانbar پایانbinom پایانbitmapimage پایانblockquote پایانbtxrenderingdefinitions \
+پایانbuffer پایانbutton پایانcatcodetable پایانcharacteralign پایانcheckedfences \
+پایانchemical پایانcollect پایانcollecting پایانcolorintent پایانcoloronly \
+پایانcolorset پایانcolumns پایانcolumnspan پایان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 \
+پایانcurrentlistentrywrapper پایانdbinom پایانdelimited پایانdelimitedtext پایانdfrac \
+پایانdisplaymath پایانdmath پایانdocument پایانeffect پایانelement \
+پایانembeddedxtable پایانendofline پایانexceptions پایانexpanded پایانexpandedcollect \
+پایانextendedcatcodetable پایانexternalfigurecollection پایانfigure پایانfitfieldframed پایانfittingpage \
+پایانfloatcombination پایانfont پایانfontclass پایانfontsolution پایانformula \
+پایانformulas پایانfrac پایانframedcontent پایانframedtext پایانgridsnapping \
+پایانhbox پایانhboxestohbox پایانhboxregister پایانhelptext پایانhiddenbar \
+پایانhiding پایانhighlight پایانhyphenation پایانimath پایانindentation \
+پایانindentedtext پایانinmframed پایانinteraction پایانinterface پایانintertext \
+پایانitemgroup پایانknockout پایانlayout پایانlinecorrection پایانlinefiller \
+پایانlinenumbering پایان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 پایانsubjectlevel پایان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 پایانآیتم پایاناما \
-پایانبروبه پایانتنظیم‌راست پایانتنظیم‌وسط پایانتولید پایانتولید \
-پایانحقیقت پایانخط‌حاشیه پایانخط‌حاشیه پایانخط‌متن پایاندرج‌راهنما \
-پایاندرج‌شناور پایاندرج‌فرمول پایاندرج‌فرمول پایانرنگ پایانرنگ \
-پایانرنگ پایانسر پایانفشرده پایانقالبی پایانمتن‌برچسب \
-پایانمتن‌سر پایانمحیط پایانمحیط پایانمنفی پایانمنوی‌پانل \
-پایانمولفه پایانمولفه پایاننشر پایاننقل پایاننقل‌قول \
-پایانپانوشت پایانپانوشت پایانپروژه پایانپروژه پایانپس‌زمینه \
-پایانپس‌زمینه پایانچپ‌چین پایان‌خط پایین پرده \
-پروژه پروژه پرکردن‌میدان پس‌زمینه چوبخط \
-چپ‌چین کشیده کلمه‌حاشیه کلمه‌راست گیره \
-یادداشت یک‌جا یک‌خط
+پایانlua پایانluacode پایانluaparameterset پایانluasetups پایانmakeup \
+پایانmarginblock پایانmarkedcontent پایانmathmode پایانmathstyle پایانmatrices \
+پایانmcframed پایانmdformula پایانmframed پایانmixedcolumns پایانmode \
+پایانmodeset پایانmodule پایانmoduletestsection پایانmpformula پایانnamedsection \
+پایانnamedsubformulas پایانnarrow پایانnarrower پایانnegative پایانnicelyfilledbox \
+پایانnobar پایانnointerference پایانnotallmodes پایانnotext پایانnotmode \
+پایانopposite پایانoutputstream پایانoverlay پایانoverprint پایانpagecomment \
+پایانpagefigure پایانpagegrid پایانpagegridspan پایانpagelayout پایانpar \
+پایانparagraph پایانparagraphs پایانparagraphscell پایانparbuilder پایانpath \
+پایانplacepairedbox پایانpositioning پایانpositionoverlay پایانpositive پایانpostponing \
+پایانprocessassignmentcommand پایانprocessassignmentlist پایانprocesscommacommand پایانprocesscommalist پایانprotect \
+پایانprotectedcolors پایانpunctuation پایانrandomized پایانrandomseed پایانrawsetups \
+پایانreadingfile پایانreferenceprefix پایانregime پایانreusableMPgraphic پایانscript \
+پایانsdformula پایانsectionblock پایانsectionblockenvironment پایانsectionlevel پایانsetups \
+پایانsfrac پایانshapebox پایانshift پایانsidebar پایانsimplecolumns \
+پایانspecialitem پایانspeech پایانspformula پایانspread پایانstartstop \
+پایانstaticMPfigure پایانstaticMPgraphic پایانstrictinspectnextcharacter پایانstrut پایانstyle \
+پایانsubformulas پایانsubjectlevel پایانsubsentence پایانsubstack پایانsymbolset \
+پایانtable پایانtablehead پایانtables پایانtabletail پایانtabulate \
+پایانtabulatehead پایانtabulatetail پایانtagged پایانtbinom پایانtexcode \
+پایانtexdefinition پایانtext پایانtextbackground پایانtextbackgroundmanual پایانtextcolor \
+پایانtextcolorintent پایانtextflow پایانtokens پایانtransparent پایانtypescript \
+پایانtypescriptcollection پایانunderdash پایانunderdashes پایانunderdot پایانunderdots \
+پایانunderrandom پایانunderrandoms پایانunderstrike پایانunderstrikes پایانunframed \
+پایانuniqueMPgraphic پایانuniqueMPpagegraphic پایانunpacked پایانusableMPgraphic پایانuseMPgraphic \
+پایانusemathstyleparameter پایانusingbtxspecification پایانvbox پایانvboxregister پایانvboxtohbox \
+پایانvboxtohboxseparator پایانviewerlayer پایانvtop پایانvtopregister پایانxcell \
+پایانxcellgroup پایانxfrac پایانxgroup پایانxmldisplayverbatim پایانxmlinlineverbatim \
+پایانxmlraw پایانxmlsetups پایانxrow پایانxrowgroup پایانxtable \
+پایانxtablebody پایانxtablefoot پایانxtablehead پایانxtablenext پایانxxfrac \
+پایانآیتم پایانآیتم‌بندی پایانبخش پایانبروبه پایانتوضیح \
+پایانتولید پایانجدول پایانخط‌حاشیه پایانخط‌زدن پایانخط‌زدنها \
+پایانخط‌متن پایاندرج‌فرمول پایانرنگ پایانزیربخش پایانزیرزیربخش \
+پایانزیرزیرزیربخش پایانزیرزیرزیرزیربخش پایانزیرزیرزیرزیرموضوع پایانزیرزیرزیرموضوع پایانزیرزیرموضوع \
+پایانزیرموضوع پایانسخنرانی پایانسر پایانشکل پایانعنوان \
+پایانفشرده پایانفصل پایانقالبی پایانمتن‌قالبی پایانمتن‌کمکی \
+پایانمحیط پایانمنوی‌پانل پایانموضوع پایانمولفه پایانمیان‌پرده \
+پایانمیله‌رو پایانمیله‌زیر پایانمیله‌ها‌رو پایانمیله‌‌های‌زیر پایاننشر \
+پایاننقل پایاننقل‌بلوک پایاننقل‌قول پایانپروژه پایانپس‌زمینه \
+پایانگرافیک پایان‌خط پایین پرده پروژه \
+پرکردن‌میدان پس‌زمینه پنهان‌کردن چوبخط کشیده \
+گرافیک گیره یادداشت یک‌جا یک‌خط
keywordclass.context.ro=\
AMSTEX AfterPar Alphabeticnumerals AmSTeX \
@@ -6081,83 +5515,70 @@ 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 \
+MPvar MPvariable MPvv MPw MPwhd \
+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 TEXpage TaBlE TeX TheNormalizedFontSize \
+TransparencyHack VerboseNumber WidthSpanningText XETEX XeTeX \
+ZIDINSAPTAMANA abjadnaivenumerals abjadnodotnumerals abjadnumerals activatespacehandler \
+adaptcollector adapteazaaspect adaptfontfeature adaptpapersize 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 \
+alignmentcharacter allinputpaths alphabeticnumerals alwayscitation 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 ascundere aside assignalfadimension assigndimen \
+assigndimension assignifempty assigntranslation assignvalue assignwidth \
+assumelongusagecs astype attachment autocap autodirhbox \
+autodirvbox autodirvtop autoinsertnextspace automathematics autosetups \
+availablehsize averagecharwidth backgroundimage backgroundimagefill backgroundline \
+baraculoare barainteractiune basegrid baselineleftbox baselinemiddlebox \
+baselinerightbox bbox beforesplitstring beforetestandsplitstring big \
+bigbodyfont bigg bigger biggl biggm \
+biggr bigl bigm bigr bigskip \
+binom bitmapimage blanc blap bleed \
+bleedheight bleedwidth blockligatures blockquote bodyfontenvironmentlist \
+bodyfontsize bold boldface bolditalic boldslanted \
+booleanmodevalue bottombox bottomleftbox bottomrightbox boxcursor \
+boxmarker boxofsize boxreference bpos bthiddencitation \
+btxabbreviatedjournal btxaddjournal 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 \
+btxfoundname btxfoundtype btxhybridcite btxlistcitation btxloadjournalist \
+btxoneorrange btxremapauthor btxsavejournalist btxsetup btxsingularorplural \
+btxsingularplural btxtextcitation butoaneinteractiune buton butonmeniu \
+calligraphic camel camp capitol catcodetablename \
+cbox centerbox centeredbox centerednextbox cfrac \
+chardescription charwidthlanguage checkcharacteralign checkedchar checkedfiller \
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 \
+checkparameters checkpreviousinjector checksoundtrack checktwopassdata checkvariables \
+chem chemical chemicalbottext chemicalmidtext chemicalsymbol \
+chemicaltext chemicaltoptext chineseallnumerals chinesecapnumerals chinesenumerals \
+citat citation cite clap classfont \
cldcommand cldcontext cldloadfile cldprocessfile cleftarrow \
clip cloneazacamp collect collectedtext collectexpanded \
-coloana colorcomponents colored colored columnbreak \
-com combinepages commalistelement commalistsentence commalistsize \
+coloana colorcomponents colored coloronly columnbreak \
+combinepages comentariu 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 \
+completeazanumarpagina completebtxrendering completelist completelistofpublications completelistofsorts \
+completelistofsynonyms completeregister complexorsimple complexorsimpleempty componenta \
+composedcollector composedlayer compresult constantdimen constantdimenargument \
+constantemptyargument constantnumber constantnumberargument contentreference continuednumber \
+continueifinputfile convertargument convertcommand convertedcounter converteddimen \
+convertedsubcounter convertestenumar convertmonth convertvalue convertvboxtohbox \
+copiazacamp copypages copyparameters copyposition corecteazaspatiualb \
countersubs counttoken counttokens cramped crampedclap \
crampedllap crampedrlap crightarrow crightoverleftarrow ctop \
ctxcommand ctxdirectcommand ctxdirectlua ctxfunction ctxlatecommand \
@@ -6168,9 +5589,8 @@ currentfeaturetest currentinterface currentlanguage currentlistentrydestinationa
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 \
+currenttime currentvalue currentxtablecolumn currentxtablerow data \
+datacurenta datasetvariable dayoftheweek dayspermonth dbinom \
decrement decrementcounter decrementedcounter decrementpagenumber decrementsubpagenumber \
decrementvalue defaultinterface defaultobjectpage defaultobjectreference defcatcodecommand \
defconvertedargument defconvertedcommand defconvertedvalue defineMPinstance defineTABLEsetup \
@@ -6179,28 +5599,26 @@ definebackground definebar definebodyfontswitch definebreakpoint definebreakpoin
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 \
+definecomplexorsimple definecomplexorsimpleempty defineconversionset definecounter definedataset \
+definedelimitedtext definedfont defineeffect defineexpandable defineexternalfigure \
+definefallbackfamily definefieldbody definefieldbodyset definefieldcategory definefileconstant \
+definefilefallback definefilesynonym definefiller definefirstline definefittingpage \
+definefontalternative definefontfallback definefontfamily definefontfamilypreset definefontfeature \
+definefontfile definefontsize definefontsolution defineformula defineformulaalternative \
+defineformulaframed defineframedcontent definefrozenfont defineglobalcolor definegraphictypesynonym \
+definegridsnapping defineheadalternative definehelp definehigh definehighlight \
+definehspace definehypenationfeatures defineindentedtext defineindenting defineinitial \
+defineinsertion defineinteraction defineinteractionbar defineinterfaceconstant defineinterfaceelement \
+defineinterfacevariable defineinterlinespace defineintermediatecolor defineitemgroup defineitems \
+definelabelclass definelayer definelayerpreset definelayout definelinefiller \
+definelinenote definelinenumbering definelines definelistalternative definelistextra \
+definelow definelowhigh definelowmidhigh definemarginblock definemargindata \
+definemarker 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 definenamespace definenarrower definenote \
defineornament defineoutputroutine defineoutputroutinecommand definepage definepagebreak \
definepagechecker definepagegrid definepagegridarea definepagegridspan definepageinjection \
definepageinjectionalternative definepageshift definepagestate definepairedbox defineparagraph \
@@ -6208,176 +5626,171 @@ defineparallel defineparbuilder defineplacement definepositioning defineprefixse
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 \
+defineste definesteantet definestebloc definesteblocsectiune definestebuffer \
+definestecamp definesteconversie definesteculoare definestedescriere definestedimensiunehartie \
+definesteenumerare definesteeticheta definestefloat definestefont definestefonttext \
+definesteformatreferinte definestegrupculori definestehbox definesteinconjurare definestelista \
+definestelistacombinata definestemakeup definestemarcaje definestemediulfonttext definestemeniuinteractiune \
+definesteoverlay 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 dimensiontocount \
+din directcolor 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 dorepeatwithcommand doreplacefeature doresetandafffeature \
+doresetattribute dorotatebox dosetattribute dosetleftskipadaption dosetrightskipadaption \
+dosetupcheckedinterlinespace doseventupleargument doseventupleempty dosingleargument dosingleempty \
+dosinglegroupempty dosixtupleargument dosixtupleempty dostepwiserecurse dosubtractfeature \
+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 \
+elapsedseconds elapsedtime eleftarrowfill eleftharpoondownfill eleftharpoonupfill \
+eleftrightarrowfill 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 \
+enableparpositions enableregime enabletrackers enskip enspace \
+enumerare env envvar eoverbarfill eoverbracefill \
+eoverbracketfill eoverparentfill epos equaldigits erightarrowfill \
+erightharpoondownfill erightharpoonupfill 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 fence fenced fetchallmarkings \
+fetchallmarks fetchmark fetchmarking fetchonemark fetchonemarking \
+fetchruntinecommand fetchtwomarkings fetchtwomarks fieldbody fifthoffivearguments \
+fifthofsixarguments figura 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 flushboxregister 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 forcecharacterstripping forcelocalfloats \
+forgeteverypar forgetparameters 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 getprivatechar \
+getprivateslot 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 grabbufferdata grabbufferdatadirect grabuntil graficul \
+grayvalue greedysplitstring greeknumerals grid grosimelinie \
+groupedcommand gsetboxllx gsetboxlly gujaratinumerals gurmurkhinumerals \
+hairspace halfwaybox handletokens handwritten hash \
+hboxofvbox hboxreference hdofstring headhbox headnumbercontent \
+headnumberdistance headnumberwidth headreferenceattributes headsetupspacing headtextcontent \
+headtextdistance headtextwidth headvbox headwidth heightanddepthofstring \
+heightofstring heightspanningtext helptext hglue hiddenbar \
hiddencitation hiddencite highlight highordinalstr hilo \
himilo hl horizontalgrowingbar horizontalpositionbar hphantom \
hpos hsizefraction hsmash hsmashbox hsmashed \
@@ -6386,543 +5799,482 @@ 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 \
+inalt includemenu includeversioninfo increment incrementcounter \
+incrementedcounter incrementpagenumber incrementsubpagenumber incrementvalue indentation \
+infofont infofontbold inframed inheritparameter inhibitblank \
+initializeboxstack injos inlinebuffer inlinedbox inlinemath \
+inlinemathematics inlinemessage inlineordisplaymath inlinerange inlinie \
+inmaframed innerflushshapebox input inputfilebarename inputfilename \
+inputfilerealsuffix inputfilesuffix inputgivenfile insertpages 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 \
+integerrounding intermezzo intertext intins invokepageheandler \
+istltdir istrtdir italic italicbold italiccorrection \
+itemtag jobfilename jobfilesuffix jos jossus \
+kap keeplinestogether keepunwantedspaces kerncharacters koreancirclenumerals \
+koreannumerals koreannumeralsc koreannumeralsp koreanparentnumerals la \
+languageCharacters languagecharacters languagecharwidth lapagina lastcounter \
+lastcountervalue lastdigit lastlinewidth lastnaturalboxdp lastnaturalboxht \
+lastnaturalboxwd lastpredefinedsymbol lastrealpage lastrealpagenumber lastsubcountervalue \
+lastsubpage lastsubpagenumber lasttwodigits lastuserpage lastuserpagenumber \
+lateluacode layeredtext layerheight layerwidth lazysavetaggedtwopassdata \
+lazysavetwopassdata lbox left leftbottombox leftbox \
+lefthbox leftorrighthbox leftorrightvbox leftorrightvtop leftskipadaption \
+leftsubguillemot lefttopbox 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 \
+limtatefirstline linespanningtext linieneagra liniesubtire linieumplere \
+liniinegre liniisubtiri listcitation 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 mathitalic \
-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 \
+locatefilepath locfilename 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 \
+marcaje margindata markcontent markinjector mat \
+matematica math mathbf mathbi mathblackboard \
+mathbs mathcommand mathdefault mathfraktur mathfunction \
+mathit mathitalic mathop mathrm mathscript \
+mathsl mathss mathtext mathtextbf mathtextbi \
+mathtextbs mathtextit mathtextsl mathtexttf mathtf \
+mathtriplet mathtt mathupright mathword mathwordbf \
+mathwordbi mathwordbs mathwordit mathwordsl mathwordtf \
+mbox mcframed md measure measured \
+mediu medskip medspace meniuinteractiune mequal \
+message metaTeX mfence mfunction mfunctionlabeltext \
+mhbox mhookleftarrow mhookrightarrow middle middlebox \
+midhbox minicitat minimalhbox mixedcaps mkvibuffer \
+mleftarrow mleftharpoondown mleftharpoonup mleftrightarrow mleftrightharpoons \
+mmapsto moduleparameter molecule mono monobold \
+mononormal monthlong monthshort mp 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 \
+nobar nocitation nocite nodetostring noffigurepages \
+noflines noflocalfloats noindentation noitem nokap \
+nonfrenchspacing nonmathematics normal normalboldface normalframedwithsettings \
+normalizebodyfontsize normalizedfontsize normalizefontdepth normalizefontheight normalizefontline \
+normalizefontwidth normalizetextdepth normalizetextheight normalizetextline normalizetextwidth \
+normaltypeface nota notesymbol ntimes numarformula \
+numarpagina numartitlu numartitlucurent numberofpoints numere \
+numereromane obeydepth objectdepth objectheight objectmargin \
+objectwidth obox offset offsetbox olinie \
+onedigitrounding ordinaldaynumber ordinalstr ornamenttext outputfilename \
+outputstreambox outputstreamcopy outputstreamunvbox outputstreamunvcopy over \
+overbar overbars overbartext overbarunderbar overbrace \
+overbracetext overbraceunderbrace overbracket overbrackettext overbracketunderbracket \
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 \
+pageinjection pagestaterealpage pagina paletsize 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 placecitation \
+placecomments placecurrentformulanumber placedbox placefloat placefloatwithsetups \
+placeframed placeheadnumber placeheadtext placehelp placeinitial \
+placelayer placelayeredtext placelistofpublications placelistofsorts placelistofsynonyms \
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 \
-presetdocument 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 \
+placepairedbox placeparallel placerawlist placerenderingwindow plaseazapegrid \
+plaseazasemnecarte popattribute popmacro popmode popsystemmode \
+positionoverlay positionregionoverlay postponenotes potrivestecamp pozitie \
+predefinedfont predefinefont predefinesymbol prefixedpagenumber prependetoks \
+prependgvalue prependtocommalist prependtoks prependtoksonce prependvalue \
+presetdocument presetfieldsymbols 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 profiledbox profilegivenbox \
+program proiect pseudoMixedCapped pseudoSmallCapped pseudoSmallcapped \
+pseudosmallcapped puncte punedeasuprafiecareia punefatainfata puneformula \
+punelista punelistacombinata punenotesubsol punenotesubsollocale punenumarpagina \
+puneregistru punesubformula purenumber pushattribute pushbutton \
+pushmacro pushmode pushoutputstream pushsystemmode qquad \
+quad quads quitcommalist quitprevcommalist quittypescriptscanning \
+raisebox randomizetext randomnumber 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 replaceincommalist replaceword rescan rescanwithsetup \
+resetMPdrawing resetMPenvironment resetMPinstance resetallattributes resetandaddfeature \
+resetbar 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 resolvedglyphdirect resolvedglyphstyled restartcounter \
+restorebox restorecatcodes restorecounter restorecurrentattributes restoreendofline \
+restoreglobalbodyfont reusableMPgraphic reuseMPgraphic reuserandomseed revivefeature \
+rfence rhbox right rightbottombox rightbox \
+righthbox rightorleftpageaction rightskipadaption rightsubguillemot righttolefthbox \
+righttoleftvbox righttoleftvtop righttopbox riglatext rigleumplere \
+rlap robustaddtocommalist robustdoifelseinset robustdoifinsetelse robustpretocommalist \
+rollbutton roman roteste rtop ruledhbox \
ruledhpack ruledmbox ruledtopv ruledtpack ruledvbox \
-ruledvpack ruledvtop runMPbuffer safechar sans \
-sansbold sansnormal sansserif savebox savebtxdataset \
-savebuffer savebuffer savecounter savecurrentattributes savenormalmeaning \
+ruledvpack ruledvtop runMPbuffer runninghbox safechar \
+sans sansbold sansnormal sansserif savebox \
+savebtxdataset savebuffer savecounter savecurrentattributes savenormalmeaning \
savetaggedtwopassdata savetwopassdata sbox scala scriebuffer \
-scrieinlista scrieintreliste secondoffivearguments secondoffourarguments secondofsixarguments \
-secondofthreearguments secondofthreeunexpanded secondoftwoarguments secondoftwounexpanded section \
-seeindex select selecteazablocuri semncarte serializecommalist \
+scrieinlista scrieintreliste sd secondoffivearguments secondoffourarguments \
+secondofsixarguments secondofthreearguments secondofthreeunexpanded secondoftwoarguments secondoftwounexpanded \
+sectiune 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 \
+setMPvariables setareitemization 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 seteazaantet seteazaaranjareapag seteazaaspect \
+seteazabarainteractiune seteazablanc seteazabloc seteazablocsectiune seteazabuffer \
+seteazacamp seteazacampuri seteazaclipping seteazacoloane seteazacomentariu \
+seteazacomentariupagina seteazaculoare seteazaculori seteazadimensiunihartie seteazaecraninteractiune \
+seteazaelemente seteazafloat seteazafonttext seteazaformulare seteazafundal \
+seteazafundaluri seteazagrosimelinie seteazaimpartireafloat seteazainconjurat seteazaingust \
+seteazainteractiunea seteazajos 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 \
+seteazanumerotarepagina seteazanumerotareparagrafe seteazapaleta seteazaparagrafe seteazaplasareaopozita \
+seteazaprograme seteazareferinte seteazaregistru seteazarigletext seteazarigleumplere \
+seteazarotare seteazasimbol seteazasinonime seteazasortare seteazaspatiu \
+seteazaspatiualb seteazaspatiuinterliniar seteazasubsol seteazasus seteazatabele \
+seteazatabulatori seteazatext seteazatexteantet seteazatextejos seteazatextesubsol \
+seteazatextesus seteazatextetext seteazatitlu seteazatitluri seteazatoleranta \
+seteazatranzitiepagina seteazatype seteazatyping seteazaurl setelementexporttag \
+setemeasure setevalue setevariable setevariables setfirstline \
+setflag setfont setfontcolorsheme setfontfeature setfontsolution \
+setfontstrut setfractions setgmeasure setgvalue setgvariable \
+setgvariables sethboxregister sethyphenatedurlafter sethyphenatedurlbefore sethyphenatedurlnormal \
+sethyphenationfeatures setinitial setinjector setinteraction setinterfacecommand \
+setinterfaceconstant setinterfaceelements setinterfacemessage setinterfacevariable setinternalrendering \
+setitaliccorrection setlayer setlayerframed setlayertext setlinefiller \
+setlocalhsize setmainbodyfont setmainparbuilder setmarker setmarking \
+setmathstyle setmeasure setmessagetext setmode setnostrut \
+setnote 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 setupMPgraphics setupMPinstance setupMPpage setupMPvariables \
+setupTABLE setupTEXpage setupattachment setupbackend setupbar \
+setupbleeding setupbookmark setupbtx setupbtxdataset setupbtxlist \
+setupbtxregister setupbtxrendering setupbutton setupcharacterkerning setupcharacterspacing \
+setupchemical setupchemicalframed setupcollector setupcolumnspan setupcombination \
+setupcounter setupdataset setupdelimitedtext setupdescription setupdirections \
+setupdocument setupeffect setupenumeration setupenv setupexport \
+setupexternalfigure setupexternalsoundtracks setupfieldbody setupfieldcategory setupfieldcontentframed \
+setupfieldlabelframed setupfieldtotalframed setupfiller setupfirstline setupfittingpage \
+setupfloatcaption setupfontexpansion setupfontprotrusion setupfonts setupfontsolution \
+setupformula setupformulaframed 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 \
+setupindentedtext setupinitial setupinsertion setupitaliccorrection setupitemgroup \
+setuplabel setuplayer setuplayeredtext setuplayouttext setuplinefiller \
+setuplinefillers setuplinenote setuplinetable setuplistalternative setuplistextra \
+setuplocalfloats 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 \
+setupmathmatrix setupmathornament setupmathradical setupmathstackers setupmathstyle \
+setupmixedcolumns setupmodule setupnotation setupnotations setupnote \
+setupnotes setupoffset setupoffsetbox setupoutputroutine setuppagechecker \
+setuppagegrid setuppagegridarea setuppagegridareatext setuppagegridlines setuppagegridspan \
+setuppagegridstart setuppageinjection setuppageinjectionalternative setuppageshift setuppagestate \
+setuppairedbox setuppaper setupparagraph setupparagraphintro setupparallel \
+setupperiods setupplacement setuppositionbar setupprocessor setupprofile \
+setupquotation setuprealpagenumber setupreferenceformat setupreferenceprefix setupreferencestructureprefix \
+setupregisters setuprenderingwindow setups setupscale setupscript \
+setupscripts setupselector setupshift setupsidebar setupspellchecking \
+setupstartstop setupstretched setupstruts setupstyle setupsubformula \
+setuptabulation setuptagging setuptextbackground setuptextflow setuptooltip \
+setupunit setupuserpagenumber setupversion setupviewerlayer setupvspacing \
+setupwithargument setupwithargumentswapped setupxml setupxtable setuvalue \
+setuxvalue setvalue setvariable setvariables setvboxregister \
+setvisualizerfont setvtopregister setwidthof setxmeasure setxvalue \
+setxvariable setxvariables sfrac shapedhbox showallmakeup \
+showattributes showboxes showbtxdatasetauthors showbtxdatasetcompleteness showbtxdatasetfields \
+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 \
+simbol simplegroupedcommand 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 \
someheadnumber somekindoftab somelocalfloat somenamedheadnumber someplace \
-spanishNumerals spanishnumerals spatiifixate spatiu spatiufixat \
-speech splitdfrac splitfilename splitfrac splitoffbase \
+sp spanishNumerals spanishnumerals spatiifixate spatiu \
+spatiufixat speech splitatasterisk splitatcolon splitatcolons \
+splitatcomma 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 \
+stackrel startJScode startJSpreamble startMPclip startMPcode \
+startMPdefinitions 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 \
+startTABLE startTABLEbody startTABLEfoot startTABLEhead startTABLEnext \
+startTC startTD startTDs startTEXpage startTH \
+startTN startTR startTRs startTX startTY \
+startallmodes startarrangedpages startaside startattachment startbar \
+startbarasus startbinom startbitmapimage startblockquote startbtxrenderingdefinitions \
+startbuffer startbutton startcapitol startcatcodetable startcharacteralign \
+startcheckedfences startchemical startcitat startcollect startcollecting \
+startcolorintent startcoloronly startcolorset startcolumns startcolumnspan \
+startcombination startcomentariu startcomment startcomponenta startcontextcode \
+startcontextdefinitioncode startctxfunction startctxfunctiondefinition startculoare startcurrentcolor \
+startcurrentlistentrywrapper startdbinom startdelimited startdelimitedtext startdfrac \
+startdisplaymath startdmath startdocument startdute starteffect \
+startelement startembeddedxtable startendofline startenumerare startexceptions \
+startexpanded startexpandedcollect startextendedcatcodetable startexternalfigurecollection startfigura \
+startfigure startfitfieldframed startfittingpage startfloatcombination startfont \
+startfontclass startfontsolution startformula startformulas startfrac \
+startframed startframedcontent startframedtext startfundal startgraficul \
+startgridsnapping starthbox starthboxestohbox starthboxregister starthelptext \
+starthiddenbar starthiding starthighlight starthyphenation startimath \
+startimpachetat startindentation startindentedtext startinmframed startinteraction \
+startinterface startintermezzo startintertext startitemgroup startknockout \
+startlayout startlinecorrection startlinefiller startlinenumbering startlinetable \
+startlinetablebody startlinetablecell startlinetablehead startlinie startliniemargine \
+startliniepeste startliniipeste startlocalfootnotes startlocalheadsetup startlocallinecorrection \
+startlocalnotes startlocalsetups startlua startluacode startluaparameterset \
+startluasetups startmakeup startmarginblock startmarkedcontent startmathmode \
+startmathstyle startmatrices startmcframed startmdformula startmediu \
+startmeniuinteractiune startmframed startminicitat startmixedcolumns startmode \
+startmodeset startmodule startmoduletestsection startmpformula startnamedsection \
+startnamedsubformulas startnarrow startnarrower startnegative startnicelyfilledbox \
+startnobar startnointerference startnotallmodes startnotext startnotmode \
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 startsubjectlevel 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 \
+startparagraph startparagraphs startparagraphscell startparbuilder startpath \
+startplacepairedbox startpositioning startpositionoverlay startpositive startpostponing \
+startprocessassignmentcommand startprocessassignmentlist startprocesscommacommand startprocesscommalist startprodus \
+startproiect startprotect startprotectedcolors startpublicatie startpunctuation \
+startpuneformula startrandomized startrandomseed startrawsetups startreadingfile \
+startreferenceprefix startregime startregister startreusableMPgraphic startriglatext \
+startscript startsdformula startsectionblock startsectionblockenvironment startsectionlevel \
+startsectiune startsetups startsfrac startshapebox startshift \
+startsidebar startsimplecolumns startspecialitem startspeech startspformula \
+startspread startstartstop startstaticMPfigure startstaticMPgraphic startstrictinspectnextcharacter \
+startstructurepageregister startstrut startstyle startsubformulas startsubiect \
+startsubjectlevel startsublinie startsublinii startsubsectiune startsubsentence \
+startsubstack startsubsubiect startsubsubsectiune startsubsubsubiect startsubsubsubsectiune \
+startsubsubsubsubiect startsubsubsubsubsectiune startsubsubsubsubsubiect startsupralinie startsymbolset \
+starttabelul starttable starttablehead starttables starttabletail \
+starttabulate starttabulatehead starttabulatetail starttagged starttbinom \
+starttexcode starttexdefinition starttext starttextajutator starttextbackground \
+starttextbackgroundmanual starttextcolor starttextcolorintent starttextflow starttextinconjurat \
+starttitlu starttokens starttransparent starttypescript starttypescriptcollection \
+startunderdash startunderdashes startunderdot startunderdots startunderrandom \
+startunderrandoms startunderstrike startunderstrikes startunframed startuniqueMPgraphic \
+startuniqueMPpagegraphic startunpacked startusableMPgraphic startuseMPgraphic startusemathstyleparameter \
+startusingbtxspecification startvbox startvboxregister startvboxtohbox startvboxtohboxseparator \
+startviewerlayer startvtop startvtopregister startxcell startxcellgroup \
+startxfrac startxgroup startxmldisplayverbatim startxmlinlineverbatim startxmlraw \
+startxmlsetups startxrow startxrowgroup startxtable startxtablebody \
+startxtablefoot startxtablehead startxtablenext startxxfrac stivacampuri \
+stopJScode stopJSpreamble stopMPclip stopMPcode stopMPdefinitions \
+stopMPdrawing stopMPenvironment stopMPextensions stopMPinclusions stopMPinitializations \
+stopMPpage stopMPpositiongraphic stopMPpositionmethod stopMPrun stopTABLE \
+stopTABLEbody stopTABLEfoot stopTABLEhead stopTABLEnext stopTC \
+stopTD stopTDs stopTEXpage stopTH stopTN \
+stopTR stopTRs stopTX stopTY stopallmodes \
+stoparrangedpages stopaside stopattachment stopbar stopbarasus \
+stopbinom stopbitmapimage stopblockquote stopbtxrenderingdefinitions stopbuffer \
+stopbutton stopcapitol stopcatcodetable stopcharacteralign stopcheckedfences \
+stopchemical stopcitat stopcollect stopcollecting stopcolorintent \
+stopcoloronly stopcolorset stopcolumns stopcolumnspan stopcombination \
+stopcomentariu stopcomment stopcomponenta stopcontextcode stopcontextdefinitioncode \
+stopctxfunction stopctxfunctiondefinition stopculoare stopcurrentcolor stopcurrentlistentrywrapper \
+stopdbinom stopdelimited stopdelimitedtext stopdfrac stopdisplaymath \
+stopdmath stopdocument stopdute stopeffect stopelement \
+stopembeddedxtable stopendofline stopenumerare stopexceptions stopexpanded \
+stopexpandedcollect stopextendedcatcodetable stopexternalfigurecollection stopfigura stopfigure \
+stopfitfieldframed stopfittingpage stopfloatcombination stopfont stopfontclass \
+stopfontsolution stopformula stopformulas stopfrac stopframed \
+stopframedcontent stopframedtext stopfundal stopgraficul stopgridsnapping \
+stophbox stophboxestohbox stophboxregister stophelptext stophiddenbar \
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 stopsubjectlevel \
-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 \
+stopindentation stopindentedtext stopinmframed stopinteraction stopinterface \
+stopintermezzo stopintertext stopitemgroup stopknockout stoplayout \
+stoplinecorrection stoplinefiller stoplinenumbering stoplinetable stoplinetablebody \
+stoplinetablecell stoplinetablehead stoplinie stopliniemargine stopliniepeste \
+stopliniipeste stoplocalfootnotes stoplocalheadsetup stoplocallinecorrection stoplocalnotes \
+stoplocalsetups stoplua stopluacode stopluaparameterset stopluasetups \
+stopmakeup stopmarginblock stopmarkedcontent stopmathmode stopmathstyle \
+stopmatrices stopmcframed stopmdformula stopmediu stopmeniuinteractiune \
+stopmframed stopminicitat stopmixedcolumns stopmode stopmodeset \
+stopmodule stopmoduletestsection stopmpformula stopnamedsection stopnamedsubformulas \
+stopnarrow stopnarrower stopnegative stopnicelyfilledbox stopnobar \
+stopnointerference stopnotallmodes stopnotext stopnotmode stopopposite \
+stopoutputstream stopoverlay stopoverprint stoppagecomment stoppagefigure \
+stoppagegrid stoppagegridspan stoppagelayout stoppar stopparagraph \
+stopparagraphs stopparagraphscell stopparbuilder stoppath stopplacepairedbox \
+stoppositioning stoppositionoverlay stoppositive stoppostponing stopprocessassignmentcommand \
+stopprocessassignmentlist stopprocesscommacommand stopprocesscommalist stopprodus stopproiect \
+stopprotect stopprotectedcolors stoppublicatie stoppunctuation stoppuneformula \
+stoprandomized stoprandomseed stoprawsetups stopreadingfile stopreferenceprefix \
+stopregime stopregister stopreusableMPgraphic stopriglatext stopscript \
+stopsdformula stopsectionblock stopsectionblockenvironment stopsectionlevel stopsectiune \
+stopsetups stopsfrac stopshapebox stopshift stopsidebar \
+stopsimplecolumns stopspecialitem stopspeech stopspformula stopspread \
+stopstartstop stopstaticMPfigure stopstaticMPgraphic stopstrictinspectnextcharacter stopstructurepageregister \
+stopstrut stopstyle stopsubformulas stopsubiect stopsubjectlevel \
+stopsublinie stopsublinii stopsubsectiune stopsubsentence stopsubstack \
+stopsubsubiect stopsubsubsectiune stopsubsubsubiect stopsubsubsubsectiune stopsubsubsubsubiect \
+stopsubsubsubsubsectiune stopsubsubsubsubsubiect stopsupralinie stopsymbolset stoptabelul \
+stoptable stoptablehead stoptables stoptabletail stoptabulate \
+stoptabulatehead stoptabulatetail stoptagged stoptbinom stoptexcode \
+stoptexdefinition stoptext stoptextajutator stoptextbackground stoptextbackgroundmanual \
+stoptextcolor stoptextcolorintent stoptextflow stoptextinconjurat stoptitlu \
+stoptokens stoptransparent stoptypescript stoptypescriptcollection stopunderdash \
+stopunderdashes stopunderdot stopunderdots stopunderrandom stopunderrandoms \
+stopunderstrike stopunderstrikes stopunframed stopuniqueMPgraphic stopuniqueMPpagegraphic \
+stopunpacked stopusableMPgraphic stopuseMPgraphic stopusemathstyleparameter stopusingbtxspecification \
+stopvbox stopvboxregister stopvboxtohbox stopvboxtohboxseparator stopviewerlayer \
+stopvtop stopvtopregister stopxcell stopxcellgroup stopxfrac \
+stopxgroup stopxmldisplayverbatim stopxmlinlineverbatim stopxmlraw stopxmlsetups \
+stopxrow stopxrowgroup stopxtable stopxtablebody stopxtablefoot \
+stopxtablehead stopxtablenext stopxxfrac strictdoifelsenextoptional strictdoifnextoptionalelse \
+stripcharacter strippedcsname stripspaces structurelistuservariable structurenumber \
+structuretitle structureuservariable structurevariable strut strutdp \
+strutht struthtdp struttedbox strutwd style \
+styleinstance subiect subpagenumber subsectiune subsentence \
+substituteincommalist subsubiect subsubsectiune subsubsubiect subsubsubsectiune \
+subsubsubsubiect subsubsubsubsectiune subsubsubsubsubiect 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 useblankparameter 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
+switchtocolor switchtointerlinespace symbolreference synchronizeblank synchronizeindenting \
+synchronizemarking synchronizeoutputstreams synchronizestrut synchronizewhitespace systemlog \
+systemlogfirst systemloglast systemsetups tLeftarrow tLeftrightarrow \
+tRightarrow tabelul tabulateautoline tabulateautorule tabulateline \
+tabulaterule taggedctxcommand taggedlabeltexts tbinom tbox \
+tequal testandsplitstring testcolumn testfeature testfeatureonce \
+testpage testpageonly testpagesync testtokens tex \
+texdefinition texsetup textajutator textcitation textcite \
+textcontrolspace textflowcollector textinconjurat textmath textminus \
+textormathchar textplus textumplere textvisiblespace tfrac \
+thainumerals thefirstcharacter thenormalizedbodyfontsize theremainingcharacters thickspace \
+thinspace thirdoffivearguments thirdoffourarguments thirdofsixarguments thirdofthreearguments \
+thirdofthreeunexpanded thookleftarrow thookrightarrow threedigitrounding tibetannumerals \
+tightlayer tinyfont titlu tlap tleftarrow \
+tleftharpoondown tleftharpoonup tleftrightarrow tleftrightharpoons tmapsto \
+tochar tolinenote topbox topleftbox toplinebox \
+toprightbox topskippedbox tracecatcodetables tracedfontname traceoutputroutines \
+tracepositions traduce transparencycomponents transparent trecilafonttext \
+trel trightarrow trightharpoondown trightharpoonup trightleftharpoons \
+trightoverleftarrow triplebond truefilename truefontname ttriplerel \
+ttwoheadleftarrow ttwoheadrightarrow twodigitrounding tx txx \
+typ type typedefinedbuffer typeface typefile \
+typescriptone typescriptprefix typescriptthree typescripttwo typesetbuffer \
+typesetfile uconvertnumber uedcatcodecommand undefinevalue undepthed \
+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 unprotected \
+unregisterhyphenationpattern unspaceafter unspaceargument unspaced unspacestring \
+untexargument untexcommand uppercased uppercasestring upperleftdoubleninequote \
+upperleftdoublesixquote upperleftsingleninequote upperleftsinglesixquote upperrightdoubleninequote upperrightdoublesixquote \
+upperrightsingleninequote upperrightsinglesixquote url useMPenvironmentbuffer useMPgraphic \
+useMPlibrary useMPrun useMPvariables useblankparameter usebodyfont \
+usebodyfontparameter usebtxdataset usebtxdefinitions usecolors usecomponent \
+usedummycolorparameter usedummystyleandcolor usedummystyleparameter useenvironment useexternalrendering \
+usefigurebase usefile usegridparameter useindentingparameter useindentnextparameter \
+useinterlinespaceparameter uselanguageparameter useluamodule usemathstyleparameter useproduct \
+useprofileparameter useproject usereferenceparameter userpagenumber usesetupsparameter \
+usestaticMPfigure usesubpath usetexmodule usetypescript usetypescriptfile \
+usezipfile utfchar utflower utfupper utilityregisterlength \
+valoareculoare vboxreference verbatim verbatimstring verbosenumber \
+versiune verticalgrowingbar verticalpositionbar 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 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/context/data/scite/context/scite-context-data-metafun.properties b/context/data/scite/context/scite-context-data-metafun.properties
index 9110148d4..e2ec4c467 100644
--- a/context/data/scite/context/scite-context-data-metafun.properties
+++ b/context/data/scite/context/scite-context-data-metafun.properties
@@ -1,57 +1,65 @@
keywordclass.metafun.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 \
+loadmodule dispose nothing transparency \
+tolist topath tocycle 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 unittriangle \
+fulltriangle llcircle lrcircle urcircle ulcircle \
+tcircle bcircle lcircle rcircle lltriangle \
+lrtriangle urtriangle ultriangle uptriangle downtriangle \
+lefttriangle righttriangle triangle smoothed cornered \
+superellipsed randomized randomizedcontrols 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 \
+boundingradius boundingcircle boundingpoint crossingunder insideof \
+outsideof 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 complementary complemented 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
+withshadevector withshadecenter withshadedirection withshaderadius withshadetransform \
+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 colordecimalslist textext thetextext rawtextext \
+textextoffset texbox thetexbox rawtexbox verbatim \
+thelabel label autoalign transparent withtransparency \
+property properties withproperties asgroup infont \
+space crlf dquote percent SPACE \
+CRLF DQUOTE PERCENT grayscale greyscale \
+withgray withgrey colorpart colorlike 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 resetarrows tensecircle \
+roundedsquare colortype whitecolor blackcolor basiccolors \
+complementary complemented resolvedcolor 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 pencilled decorated redecorated undecorated \
+passvariable passarrayvariable tostring topair format \
+formatted quotation quote startpassingvariable stoppassingvariable \
+eofill eoclip nofill fillup eofillup \
+area addbackground shadedup shadeddown shadedleft \
+shadedright sortlist copylist shapedlist listtocurves \
+listtolines listsize listlast uniquelist circularpath \
+squarepath linearpath
keywordclass.metafun.internals=\
nocolormodel greycolormodel graycolormodel rgbcolormodel \
@@ -59,5 +67,6 @@ 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
+ahdimple ahfactor metapostversion maxdimensions drawoptionsfactor \
+dq sq crossingscale crossingoption
diff --git a/context/data/scite/context/scite-context-data-metapost.properties b/context/data/scite/context/scite-context-data-metapost.properties
index 59014623a..3a197144b 100644
--- a/context/data/scite/context/scite-context-data-metapost.properties
+++ b/context/data/scite/context/scite-context-data-metapost.properties
@@ -2,33 +2,33 @@ keywordclass.metapost.commands=\
upto downto beginfig endfig \
beginglyph endglyph rotatedaround reflectedabout arrowhead \
currentpen currentpicture cuttings defaultfont extra_beginfig \
-extra_endfig ditto EOF down evenly \
-fullcircle halfcircle identity in left \
-pensquare penrazor penspec origin quartercircle \
-right unitsquare up withdots abs \
-bbox ceiling center cutafter cutbefore \
-dir directionpoint div dotprod intersectionpoint \
-inverse mod round unitvector whatever \
-cutdraw draw drawarrow drawdblarrow fill \
-filldraw drawdot loggingall interact tracingall \
-tracingnone pickup undraw unfill unfilldraw \
-buildcycle dashpattern decr dotlabel dotlabels \
-drawoptions incr label labels max \
-min thelabel z beginchar blacker \
-capsule_end change_width define_blacker_pixels define_corrected_pixels define_good_x_pixels \
-define_good_y_pixels define_horizontal_corrected_pixels define_pixels define_whole_blacker_pixels define_whole_pixels \
-define_whole_vertical_blacker_pixels define_whole_vertical_pixels endchar extra_beginchar extra_endchar \
-extra_setup font_coding_scheme clearxy clearit clearpen \
-shipit font_extra_space exitunless relax hide \
-gobble gobbled stop blankpicture counterclockwise \
-tensepath takepower direction softjoin makelabel \
-rotatedabout flex superellipse image nullpen \
-savepen clearpen penpos penlabels range \
-thru z laboff bye red \
-green blue cyan magenta yellow \
-black white background mm pt \
-dd bp cm pc cc \
-in triplet quadruplet
+extra_endfig down evenly fullcircle halfcircle \
+identity in left pensquare penrazor \
+penspec origin quartercircle right unitsquare \
+up withdots abs bbox ceiling \
+center cutafter cutbefore dir directionpoint \
+div dotprod intersectionpoint inverse mod \
+round unitvector whatever cutdraw draw \
+drawarrow drawdblarrow fill filldraw drawdot \
+loggingall interact tracingall tracingnone pickup \
+undraw unfill unfilldraw buildcycle dashpattern \
+decr dotlabel dotlabels drawoptions incr \
+label labels max min thelabel \
+z beginchar blacker capsule_end change_width \
+define_blacker_pixels define_corrected_pixels define_good_x_pixels define_good_y_pixels define_horizontal_corrected_pixels \
+define_pixels define_whole_blacker_pixels define_whole_pixels define_whole_vertical_blacker_pixels define_whole_vertical_pixels \
+endchar extra_beginchar extra_endchar extra_setup font_coding_scheme \
+clearxy clearit clearpen shipit font_extra_space \
+exitunless relax hide gobble gobbled \
+stop blankpicture counterclockwise tensepath takepower \
+direction softjoin makelabel rotatedabout flex \
+superellipse image nullpen savepen clearpen \
+penpos penlabels range thru z \
+laboff bye red green blue \
+cyan magenta yellow black white \
+background mm pt dd bp \
+cm pc cc in triplet \
+quadruplet
keywordclass.metapost.disabled=\
verbatimtex troffmode
@@ -37,8 +37,8 @@ keywordclass.metapost.internals=\
mitered rounded beveled butt \
squared eps epsilon infinity bboxmargin \
ahlength ahangle labeloffset dotlabeldiam defaultpen \
-defaultscale join_radius charscale pen_lft pen_rt \
-pen_top pen_bot
+defaultscale join_radius charscale ditto EOF \
+pen_lft pen_rt pen_top pen_bot
keywordclass.metapost.metafont=\
autorounding beginchar blacker boundarychar \
@@ -69,54 +69,54 @@ time tracingcapsules tracingchoices mpprocset tracingcommands \
tracingequations tracinglostchars tracingmacros tracingonline tracingoutput \
tracingrestores tracingspecs tracingstats tracingtitles truecorners \
warningcheck year false nullpicture pencircle \
-true and angle arclength arctime \
-ASCII boolean bot char color \
-cosd cycle decimal directiontime floor \
-fontsize hex infont intersectiontimes known \
-length llcorner lrcorner makepath makepen \
-mexp mlog normaldeviate not numeric \
-oct odd or path pair \
-pen penoffset picture point postcontrol \
-precontrol reverse rotated scaled shifted \
-sind slanted sqrt str string \
-subpath substring transform transformed ulcorner \
-uniformdeviate unknown urcorner xpart xscaled \
-xxpart xypart ypart yscaled yxpart \
-yypart zscaled addto clip input \
-interim let newinternal save setbounds \
-shipout show showdependencies showtoken showvariable \
-special begingroup endgroup of curl \
-tension and controls interpath on \
-off def vardef enddef expr \
-suffix text primary secondary tertiary \
-primarydef secondarydef tertiarydef randomseed also \
-contour doublepath withcolor withcmykcolor withpen \
-dashed if else elseif fi \
-for endfor forever exitif within \
-forsuffixes step until charlist extensible \
-fontdimen headerbyte kern ligtable boundarychar \
-chardp charext charht charic charwd \
-designsize fontmaking charexists cullit currenttransform \
-gfcorners grayfont hround imagerules lowres_fix \
-nodisplays notransforms openit displaying currentwindow \
-screen_rows screen_cols pixels_per_inch cull display \
-openwindow numspecial totalweight autorounding fillin \
-proofing tracingpens xoffset chardx granularity \
-smoothing turningcheck yoffset chardy hppp \
-tracingedges vppp extra_beginfig extra_endfig mpxbreak \
-endinput message delimiters turningnumber errmessage \
-readstring scantokens end outer inner \
-write to readfrom withprescript withpostscript \
-top bot lft rt ulft \
-urt llft lrt redpart greenpart \
-bluepart cyanpart magentapart yellowpart blackpart \
-prescriptpart postscriptpart rgbcolor cmykcolor colormodel \
-graypart greypart greycolor graycolor dashpart \
-penpart stroked filled textual clipped \
-bounded pathpart expandafter minute hour \
-outputformat outputtemplate filenametemplate fontmapfile fontmapline \
-fontpart fontsize glyph restoreclipcolor troffmode \
-runscript maketext
+penspec true and angle arclength \
+arctime ASCII boolean bot char \
+color cosd cycle decimal directiontime \
+floor fontsize hex infont intersectiontimes \
+known length llcorner lrcorner makepath \
+makepen mexp mlog normaldeviate not \
+numeric oct odd or path \
+pair pen penoffset picture point \
+postcontrol precontrol reverse rotated scaled \
+shifted sind slanted sqrt str \
+string subpath substring transform transformed \
+ulcorner uniformdeviate unknown urcorner xpart \
+xscaled xxpart xypart ypart yscaled \
+yxpart yypart zscaled addto clip \
+input interim let newinternal save \
+setbounds shipout show showdependencies showtoken \
+showvariable special begingroup endgroup of \
+curl tension and controls interpath \
+on off def vardef enddef \
+expr suffix text primary secondary \
+tertiary primarydef secondarydef tertiarydef randomseed \
+also contour doublepath withcolor withcmykcolor \
+withpen dashed envelope if else \
+elseif fi for endfor forever \
+exitif within forsuffixes step until \
+charlist extensible fontdimen headerbyte kern \
+ligtable boundarychar chardp charext charht \
+charic charwd designsize fontmaking charexists \
+cullit currenttransform gfcorners grayfont hround \
+imagerules lowres_fix nodisplays notransforms openit \
+displaying currentwindow screen_rows screen_cols pixels_per_inch \
+cull display openwindow numspecial totalweight \
+autorounding fillin proofing tracingpens xoffset \
+chardx granularity smoothing turningcheck yoffset \
+chardy hppp tracingedges vppp extra_beginfig \
+extra_endfig mpxbreak endinput message delimiters \
+turningnumber errmessage readstring scantokens end \
+outer inner write to readfrom \
+withprescript withpostscript top bot lft \
+rt ulft urt llft lrt \
+redpart greenpart bluepart cyanpart magentapart \
+yellowpart blackpart prescriptpart postscriptpart rgbcolor \
+cmykcolor colormodel graypart greypart greycolor \
+graycolor dashpart penpart stroked filled \
+textual clipped bounded pathpart expandafter \
+minute hour outputformat outputtemplate filenametemplate \
+fontmapfile fontmapline fontpart fontsize glyph \
+restoreclipcolor troffmode runscript maketext
keywordclass.metapost.shortcuts=\
.. ... -- --- \
diff --git a/context/data/scite/context/scite-context-data-tex.properties b/context/data/scite/context/scite-context-data-tex.properties
index 267cb7b1c..af7216f46 100644
--- a/context/data/scite/context/scite-context-data-tex.properties
+++ b/context/data/scite/context/scite-context-data-tex.properties
@@ -45,34 +45,37 @@ Umathrelrelspacing Umathskewedfractionhgap Umathskewedfractionvgap Umathspaceaft
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 \
+Umathunderdelimitervgap Umathnolimitsupfactor Umathnolimitsubfactor Umiddle Uoverdelimiter \
+Uradical Uright Uroot Uskewed Uskewedwithdelims \
+Ustack Ustartdisplaymath Ustartmath Ustopdisplaymath Ustopmath \
+Usubscript Usuperscript Uunderdelimiter Uvextensible adjustspacing \
+alignmark aligntab attribute attributedef hyphenpenaltymode \
+automatichyphenmode automatichyphenpenalty automaticdiscretionary explicithyphenpenalty explicitdiscretionary \
+bodydir boundary boxdir catcodetable clearmarks \
+copyfont crampeddisplaystyle crampedscriptscriptstyle crampedscriptstyle crampedtextstyle \
+draftmode dviextension dvifeedback dvivariable efcode \
+hjcode firstvalidlanguage fontid formatname gleaders \
+hyphenationmin hyphenationbounds ifabsdim ifabsnum ifprimitive \
+ignoreligaturesinfont initcatcodetable insertht lastsavedboxresourceindex lastsavedimageresourceindex \
+lastsavedimageresourcepages lastxpos lastypos latelua leftghost \
+leftmarginkern letcharcode letterspacefont linedir localbrokenpenalty \
localinterlinepenalty localleftbox localrightbox lpcode luaescapestring \
luatexbanner luatexrevision luatexversion luafunction mathdir \
-mathdisplayskipmode matheqnogapstep mathoption mathscriptsmode mathstyle \
-mathsurroundskip noboundary nokerns nohrule noligs \
+mathdisplayskipmode matheqnogapstep mathitalicsmode mathnolimitsmode mathoption \
+mathscriptsmode mathstyle mathsurroundskip mathsurroundmode mathrulesmode \
+mathrulesfam 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
+pdfvariable postexhyphenchar posthyphenchar predisplaygapfactor preexhyphenchar \
+prehyphenchar primitive protrudechars protrusionboundary pxdimen \
+randomseed rightghost rightmarginkern rpcode saveboxresource \
+savecatcodetable saveimageresource savepos scantextokens setfontid \
+setrandomseed shapemode suppressfontnotfounderror suppressifcsnameerror suppresslongerror \
+suppressoutererror suppressmathparerror 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 \
@@ -137,42 +140,44 @@ Umathskewedfractionhgap Umathskewedfractionvgap Umathspaceafterscript Umathstack
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 \
+Umathnolimitsupfactor Umathnolimitsubfactor 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 hyphenpenaltymode automatichyphenmode \
+automatichyphenpenalty automaticdiscretionary explicithyphenpenalty explicitdiscretionary 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 hyphenationmin hyphenationbounds if \
ifabsdim ifabsnum ifcase ifcat ifcsname \
ifdefined ifdim ifeof iffalse iffontchar \
ifhbox ifhmode ifincsname ifinner ifmmode \
@@ -186,85 +191,86 @@ lastpenalty lastsavedboxresourceindex lastsavedimageresourceindex lastsavedimage
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
+linedir 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 mathitalicsmode mathnolimitsmode mathop mathopen \
+mathoption mathord mathpunct mathrel mathrulesmode \
+mathrulesfam mathscriptsmode mathstyle mathsurroundskip mathsurroundmode \
+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 \
+predisplaygapfactor 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 shapemode 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 suppressmathparerror 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/context/data/scite/context/scite-context-external.properties b/context/data/scite/context/scite-context-external.properties
index 06e716432..5df60b99b 100644
--- a/context/data/scite/context/scite-context-external.properties
+++ b/context/data/scite/context/scite-context-external.properties
@@ -5,7 +5,7 @@ lexer.lpeg.home=$(SciteDefaultHome)/context/lexers
lexer.lpeg.color.theme=scite-context-theme
# lexer.lpeg.color.theme=$(SciteDefaultHome)/context/lexers/themes/scite-context-theme.lua
-# The lexer dll no longer interfaces to teh following properties. It never had a full
+# The lexer dll no longer interfaces to the following properties. It never had a full
# interface, so maybe I'll make my own.
fold.by.parsing=1
@@ -69,6 +69,10 @@ lexer.$(file.patterns.html)=lpeg_scite-context-lexer-xml
comment.block.lpeg_scite-context-lexer-tex=%
comment.block.at.line.start.lpeg_scite-context-lexer-tex=1
+#~ comment.box.start.lpeg_scite-context-lexer-tex=%
+#~ comment.box.middle.lpeg_scite-context-lexer-tex=%
+#~ comment.box.end.lpeg_scite-context-lexer-tex=%
+
comment.block.lpeg_scite-context-lexer-mps=%
comment.block.at.line.start.lpeg_scite-context-lexer-mps=1
diff --git a/context/data/scite/context/scite-context.properties b/context/data/scite/context/scite-context.properties
index d034c5e7f..b639ce7f8 100644
--- a/context/data/scite/context/scite-context.properties
+++ b/context/data/scite/context/scite-context.properties
@@ -53,6 +53,11 @@ textwrapper.length=68
output.wrap=0
+find.use.strip=1
+replace.use.strip=1
+
+open.dialog.in.file.directory=1
+
# xml.auto.close.tags=1
# ConTeXt: suffixes (really needed)
@@ -63,6 +68,22 @@ file.patterns.context=*.tex;*.mkii;*.mkiv;*.mkvi;*.mkix;*.mkxi;
open.suffix.$(file.patterns.context)=.tex
+#~ api.$(file.patterns.context)=$(SciteDefaultHome)/context/scite-context.api
+
+# starttext
+# stoptext
+# setuptest[foo=,bar=]
+
+#~ autocompleteword.automatic=0
+#~ autocomplete.choose.single=0
+#~ autocomplete.context.start.characters=\
+
+#~ calltip.$(file.patterns.context).word.characters=
+#~ calltip.$(file.patterns.context).parameters.start=[
+#~ calltip.$(file.patterns.context).parameters.end=]
+#~ calltip.$(file.patterns.context).parameters.separators=,
+#~ calltip.$(file.patterns.context).end.definition
+
# Example : patterns
file.patterns.xml=
@@ -139,12 +160,12 @@ if PLAT_GTK
# Commands: help info, e:\websites\www.pragma-ade.com\showcase.pdf / todo: manuals
command.help.$(file.patterns.context)=$(name.context.texshow) $(CurrentWord)
-command.help.$(file.patterns.context)=mtxrun --gethelp --url="http://localhost:31415/mtx-server-ctx-help.lua?command=%command%" --command="$(CurrentWord)"
-command.help.$(file.patterns.context)=mtxrun --gethelp --url="http://www.contextgarden.net/Command/%command%" --command="$(CurrentWord)"
+command.help.$(file.patterns.context)=mtxrun --gethelp --url="http://localhost:8088/mtx-server-ctx-help.lua?command=%command%" --command="$(CurrentWord)"
+#~ command.help.$(file.patterns.context)=mtxrun --gethelp --url="http://www.contextgarden.net/Command/%command%" --command="$(CurrentWord)"
command.help.$(file.patterns.example)=
command.help.$(file.patterns.metafun)=
-command.help.subsystem.$(file.patterns.context)=2
+command.help.subsystem.$(file.patterns.context)=1
# Commands: tools menu extensions
@@ -516,8 +537,8 @@ source.files=$(file.patterns.context);$(file.patterns.metafun);$(file.patterns.e
if PLAT_WIN
print.colour.mode=1
print.margins=750,750,750,750
- print.header.format=$(FileNameExt) Printed on $(CurrentDate), $(CurrentTime) Page $(CurrentPage)
- print.footer.format=$(FilePath) File date: $(FileDate) File time: $(FileTime)
+ print.header.format=$(FileNameExt) | Printed on $(CurrentDate), $(CurrentTime) | Page $(CurrentPage)
+ print.footer.format=$(FilePath) | File date: $(FileDate) | File time: $(FileTime)
print.header.style=font:Dejavu Sans Mono,size:10
print.footer.style=font:Dejavu Sans Mono,size:10
diff --git a/context/data/scite/context/scite-ctx.lua b/context/data/scite/context/scite-ctx.lua
index a529b3ced..809f36041 100644
--- a/context/data/scite/context/scite-ctx.lua
+++ b/context/data/scite/context/scite-ctx.lua
@@ -72,11 +72,15 @@
props = props or { } -- setmetatable(props,{ __index = function(k,v) props[k] = "unknown" return "unknown" end } )
-local byte, lower, upper, gsub, sub, find, rep, match, gmatch, format = string.byte, string.lower, string.upper, string.gsub, string.sub, string.find, string.rep, string.match, string.gmatch, string.format
+local byte, lower, upper, gsub, sub, find, rep, match, gmatch, format, char = string.byte, string.lower, string.upper, string.gsub, string.sub, string.find, string.rep, string.match, string.gmatch, string.format, string.char
local sort, concat = table.sort, table.concat
local crlf = "\n"
+if not trace then
+ trace = print
+end
+
function traceln(str)
trace(str .. crlf)
io.flush()
@@ -234,22 +238,41 @@ end
do
- print("loading scite-ctx.lua definition file\n")
- print("- see scite-ctx.properties for configuring info\n")
- print("- ctx.spellcheck.wordpath set to " .. props['ctx.spellcheck.wordpath'])
- if find(lower(props['ctx.spellcheck.wordpath']),"ctxspellpath") then
- if os.getenv('ctxspellpath') then
- print("- ctxspellpath set to " .. os.getenv('CTXSPELLPATH'))
- else
- print("- 'ctxspellpath is not set")
+ local wordpath = props['ctx.spellcheck.wordpath']
+
+ if wordpath and wordpath ~= "" then
+ print("loading scite-ctx.lua definition file\n")
+ print("- see scite-ctx.properties for configuring info\n")
+ print("- ctx.spellcheck.wordpath set to " .. wordpath)
+ if find(lower(wordpath),"ctxspellpath") then
+ if os.getenv('ctxspellpath') then
+ print("- ctxspellpath set to " .. os.getenv('CTXSPELLPATH'))
+ else
+ print("- 'ctxspellpath is not set")
+ end
+ print("- ctx.spellcheck.wordpath expands to " .. expand(wordpath))
end
- print("- ctx.spellcheck.wordpath expands to " .. expand(props['ctx.spellcheck.wordpath']))
+ else
+ print("- 'ctxspellpath is not set")
end
- print("\n- ctx.wraptext.length is set to " .. props['ctx.wraptext.length'])
- if props['ctx.helpinfo'] ~= '' then
+
+ local wraplength = props['ctx.wraptext.length']
+
+ if wraplength and wraplength ~= "" then
+ print("\n- ctx.wraptext.length is set to " .. wraplength)
+ else
+ print("\n- ctx.wraptext.length is not set")
+ end
+
+ local helpinfo = props['ctx.helpinfo']
+
+ if helpinfo and helpinfo ~= "" then
print("\n- key bindings:\n")
- print((gsub(strip(props['ctx.helpinfo']),"%s*|%s*","\n")))
+ print((gsub(strip(helpinfo),"%s*|%s*","\n")))
+ else
+ print("\n- no extra key bindings")
end
+
print("\n- recognized first lines:\n")
print("xml <?xml version='1.0' language='nl'")
print("tex % language=nl")
@@ -262,6 +285,30 @@ end
local magicstring = rep("<ctx-crlf/>", 2)
+local l2 = char(0xC0)
+local l3 = char(0xE0)
+local l4 = char(0xF0)
+
+local function utflen(str)
+ local n = 0
+ local l = 0
+ for s in gmatch(str,".") do
+ if l > 0 then
+ l = l - 1
+ else
+ n = n + 1
+ if s >= l4 then
+ l = 3
+ elseif s >= l3 then
+ l = 2
+ elseif s >= l2 then
+ l = 1
+ end
+ end
+ end
+ return n
+end
+
function wrap_text()
-- We always go to the end of a line, so in fact some of
@@ -295,6 +342,7 @@ function wrap_text()
local replacement = { }
local templine = ''
+ local tempsize = 0
local indentation = rep(' ',startcolumn)
local selection = editor:GetSelText()
@@ -307,13 +355,20 @@ function wrap_text()
replacement[#replacement+1] = templine
replacement[#replacement+1] = ""
templine = ''
- elseif #templine + #snippet > length then
- replacement[#replacement+1] = templine
- templine = indentation .. snippet
- elseif #templine == 0 then
- templine = indentation .. snippet
+ tempsize = 0
else
- templine = templine .. ' ' .. snippet
+ local snipsize = utflen(snippet)
+ if tempsize + snipsize > length then
+ replacement[#replacement+1] = templine
+ templine = indentation .. snippet
+ tempsize = startcolumn + snipsize
+ elseif tempsize == 0 then
+ templine = indentation .. snippet
+ tempsize = tempsize + startcolumn + snipsize
+ else
+ templine = templine .. ' ' .. snippet
+ tempsize = tempsize + 1 + snipsize
+ end
end
end
@@ -489,7 +544,7 @@ end
-- written while listening to Alanis Morissette's acoustic
-- Jagged Little Pill and Tori Amos' Beekeeper after
--- reinstalling on my good old ATH-7
+-- reinstalling my good old ATH-7
local language = props["ctx.spellcheck.language"]
local wordsize = props["ctx.spellcheck.wordsize"]
@@ -1395,4 +1450,7 @@ function OnOpen(filename)
editor:Colourise(0,editor.TextLength)
end
--- output.LexerLanguage = ""
+-- Last time I checked the source the output pane errorlist lexer was still
+-- hardcoded and could not be turned off ... alas.
+
+-- output.Lexer = 0
diff --git a/context/data/scite/context/scite-ctx.properties b/context/data/scite/context/scite-ctx.properties
index 0b791f008..4430060f7 100644
--- a/context/data/scite/context/scite-ctx.properties
+++ b/context/data/scite/context/scite-ctx.properties
@@ -11,15 +11,17 @@
# % version =1.0 language=uk
# <?xml version='1.0' language='uk' ?>
+# default.file.ext=.txt
+
ext.lua.auto.reload=1
ext.lua.startup.script=$(SciteDefaultHome)/context/scite-ctx.lua
-#~ extension.$(file.patterns.context)=scite-ctx.lua
-#~ extension.$(file.patterns.example)=scite-ctx.lua
+# extension.$(file.patterns.context)=scite-ctx.lua
+# extension.$(file.patterns.example)=scite-ctx.lua
-#~ ext.lua.reset=1
-#~ ext.lua.auto.reload=1
-#~ ext.lua.startup.script=t:/lua/scite-ctx.lua
+# ext.lua.reset=1
+# ext.lua.auto.reload=1
+# ext.lua.startup.script=t:/lua/scite-ctx.lua
ctx.menulist.default=\
wrap=wrap_text|\
@@ -63,6 +65,10 @@ ctx.menulist.cpp=\
wrap=wrap_text|\
sort=sort_text
+ctx.menulist.lua=\
+ wrap=wrap_text|\
+ sort=sort_text
+
ctx.wraptext.length=80
ctx.spellcheck.language=auto
@@ -119,6 +125,13 @@ 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.$(file.patterns.lua)=C Action List
+command.subsystem.21.$(file.patterns.lua)=3
+command.21.$(file.patterns.lua)=show_menu $(ctx.menulist.lua)
+command.groupundo.21.$(file.patterns.lua)=yes
+command.save.before.21.$(file.patterns.lua)=2
+command.shortcut.21.$(file.patterns.lua)=Shift+F11
+
#~ command.name.21.*=CTX Action List
#~ command.subsystem.21.*=3
#~ command.21.*=show_menu $(ctx.menulist.default)
@@ -192,3 +205,5 @@ command.subsystem.28.*=3
command.28.*=toggle_strip
command.save.before.28.*=2
command.shortcut.28.*=Ctrl++
+
+output.scroll=2
diff --git a/context/data/textadept/context/data/scite-context-data-context.lua b/context/data/textadept/context/data/scite-context-data-context.lua
new file mode 100644
index 000000000..b9a90c262
--- /dev/null
+++ b/context/data/textadept/context/data/scite-context-data-context.lua
@@ -0,0 +1,4 @@
+return {
+ ["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", "maxcount", "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", "unexpandeddocumentvariable", "setupdocument", "presetdocument", "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", "parfillleftskip", "parfillrightskip" },
+ ["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", "privatescratchcounter", "scratchdimen", "globalscratchdimen", "privatescratchdimen", "scratchskip", "globalscratchskip", "privatescratchskip", "scratchmuskip", "globalscratchmuskip", "privatescratchmuskip", "scratchtoks", "globalscratchtoks", "privatescratchtoks", "scratchbox", "globalscratchbox", "privatescratchbox", "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", "emspace", "charspace", "nbsp", "crlf", "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", "lastlinewidth", "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", "compoundhyphenpenalty" },
+} \ No newline at end of file
diff --git a/context/data/textadept/context/data/scite-context-data-interfaces.lua b/context/data/textadept/context/data/scite-context-data-interfaces.lua
new file mode 100644
index 000000000..5f4b667e2
--- /dev/null
+++ b/context/data/textadept/context/data/scite-context-data-interfaces.lua
@@ -0,0 +1,10 @@
+return {
+ ["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", "Lua", "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", "MPwhd", "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", "TEXpage", "TaBlE", "TeX", "TheNormalizedFontSize", "TransparencyHack", "VSEDNIDEN", "VerboseNumber", "WidthSpanningText", "XETEX", "XeTeX", "Znak", "Znaky", "abjadnaivenumerals", "abjadnodotnumerals", "abjadnumerals", "activatespacehandler", "adaptcollector", "adaptfontfeature", "adaptpapersize", "addfeature", "addtoJSpreamble", "addtocommalist", "addvalue", "aftersplitstring", "aftertestandsplitstring", "aktualnicislonadpisu", "aktualnidatum", "alignmentcharacter", "allinputpaths", "alphabeticnumerals", "alwayscitation", "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", "aside", "assignalfadimension", "assigndimen", "assigndimension", "assignifempty", "assigntranslation", "assignvalue", "assignwidth", "assumelongusagecs", "astype", "attachment", "autocap", "autodirhbox", "autodirvbox", "autodirvtop", "autoinsertnextspace", "automathematics", "autosetups", "availablehsize", "averagecharwidth", "backgroundimage", "backgroundimagefill", "backgroundline", "barevnalista", "barva", "basegrid", "baselineleftbox", "baselinemiddlebox", "baselinerightbox", "bbox", "beforesplitstring", "beforetestandsplitstring", "big", "bigbodyfont", "bigg", "bigger", "biggl", "biggm", "biggr", "bigl", "bigm", "bigr", "bigskip", "binom", "bitmapimage", "blap", "bleed", "bleedheight", "bleedwidth", "blockligatures", "blockquote", "bodyfontenvironmentlist", "bodyfontsize", "bold", "boldface", "bolditalic", "boldslanted", "booleanmodevalue", "bottombox", "bottomleftbox", "bottomrightbox", "boxcursor", "boxmarker", "boxofsize", "boxreference", "bpos", "bthiddencitation", "btxabbreviatedjournal", "btxaddjournal", "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", "btxlistcitation", "btxloadjournalist", "btxoneorrange", "btxremapauthor", "btxsavejournalist", "btxsetup", "btxsingularorplural", "btxsingularplural", "btxtextcitation", "calligraphic", "camel", "catcodetablename", "cbox", "centerbox", "centeredbox", "centerednextbox", "cernalinka", "cernelinky", "cfrac", "chardescription", "charwidthlanguage", "checkcharacteralign", "checkedchar", "checkedfiller", "checkedstrippedcsname", "checkinjector", "checknextindentation", "checknextinjector", "checkpage", "checkparameters", "checkpreviousinjector", "checksoundtrack", "checktwopassdata", "checkvariables", "chem", "chemical", "chemicalbottext", "chemicalmidtext", "chemicalsymbol", "chemicaltext", "chemicaltoptext", "chineseallnumerals", "chinesecapnumerals", "chinesenumerals", "cisla", "cislonadpisu", "cislorovnice", "cislostrany", "citace", "citation", "cite", "citovat", "clap", "classfont", "cldcommand", "cldcontext", "cldloadfile", "cldprocessfile", "cleftarrow", "collect", "collectedtext", "collectexpanded", "colorcomponents", "colored", "coloronly", "columnbreak", "combinepages", "commalistelement", "commalistsentence", "commalistsize", "comment", "comparedimension", "comparedimensioneps", "completebtxrendering", "completelist", "completelistofpublications", "completelistofsorts", "completelistofsynonyms", "completepagenumber", "completeregister", "complexorsimple", "complexorsimpleempty", "composedcollector", "composedlayer", "compresult", "constantdimen", "constantdimenargument", "constantemptyargument", "constantnumber", "constantnumberargument", "contentreference", "continuednumber", "continueifinputfile", "convertargument", "convertcommand", "convertedcounter", "converteddimen", "convertedsubcounter", "convertmonth", "convertvalue", "convertvboxtohbox", "copypages", "copyparameters", "copyposition", "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", "datasetvariable", "datum", "dayoftheweek", "dayspermonth", "dbinom", "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", "definecomplexorsimpleempty", "defineconversionset", "definecounter", "definedataset", "definedelimitedtext", "definedfont", "defineeffect", "defineexpandable", "defineexternalfigure", "definefallbackfamily", "definefieldbody", "definefieldbodyset", "definefieldcategory", "definefileconstant", "definefilefallback", "definefilesynonym", "definefiller", "definefirstline", "definefittingpage", "definefontalternative", "definefontfallback", "definefontfamily", "definefontfamilypreset", "definefontfeature", "definefontfile", "definefontsize", "definefontsolution", "defineformula", "defineformulaalternative", "defineformulaframed", "defineframedcontent", "definefrozenfont", "defineglobalcolor", "definegraphictypesynonym", "definegridsnapping", "defineheadalternative", "definehelp", "definehigh", "definehighlight", "definehspace", "definehypenationfeatures", "defineindentedtext", "defineindenting", "defineinitial", "defineinsertion", "defineinteraction", "defineinteractionbar", "defineinterfaceconstant", "defineinterfaceelement", "defineinterfacevariable", "defineinterlinespace", "defineintermediatecolor", "defineitemgroup", "defineitems", "definelabelclass", "definelayer", "definelayerpreset", "definelayout", "definelinefiller", "definelinenote", "definelinenumbering", "definelines", "definelistalternative", "definelistextra", "definelow", "definelowhigh", "definelowmidhigh", "definemarginblock", "definemargindata", "definemarker", "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", "definenamespace", "definenarrower", "definenote", "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", "definujbarvu", "definujblok", "definujbloksekce", "definujbuffer", "definujfont", "definujformatodkazu", "definujhbox", "definujinterakcnimenu", "definujkombinovanyseznam", "definujkonverzi", "definujnadpis", "definujobrazeksymbol", "definujodkaz", "definujodstavce", "definujopis", "definujoramovani", "definujoramovanytext", "definujpaletu", "definujplvouciobjekt", "definujpodpole", "definujpole", "definujpopis", "definujpopisek", "definujprekryv", "definujprofil", "definujprogram", "definujprostredizakladnihofontu", "definujrejstrik", "definujsablonutabulky", "definujsekci", "definujseznam", "definujskupinubarev", "definujstartstop", "definujstyl", "definujstylfontu", "definujsymbol", "definujsynonumumfontu", "definujsynonyma", "definujtabelaci", "definujtext", "definujtrideni", "definujupravu", "definujvelikostpapiru", "definujvycet", "definujzakladnifont", "definujzasobnikpoli", "definujznaceni", "delimited", "delimitedtext", "delkaseznamu", "depthofstring", "depthonlybox", "depthspanningtext", "determinenoflines", "devanagarinumerals", "dfrac", "digits", "dimensiontocount", "directcolor", "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", "dorepeatwithcommand", "doreplacefeature", "doresetandafffeature", "doresetattribute", "dorotatebox", "dosetattribute", "dosetleftskipadaption", "dosetrightskipadaption", "dosetupcheckedinterlinespace", "doseventupleargument", "doseventupleempty", "dosingleargument", "dosingleempty", "dosinglegroupempty", "dosixtupleargument", "dosixtupleempty", "dostepwiserecurse", "dosubtractfeature", "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", "enskip", "enspace", "env", "envvar", "eoverbarfill", "eoverbracefill", "eoverbracketfill", "eoverparentfill", "epos", "equaldigits", "erightarrowfill", "erightharpoondownfill", "erightharpoonupfill", "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", "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", "flushboxregister", "flushcollector", "flushlayer", "flushlocalfloats", "flushnextbox", "flushnotes", "flushoutputstream", "flushshapebox", "flushtextflow", "flushtokens", "flushtoks", "fontalternative", "fontbody", "fontchar", "fontcharbyindex", "fontclass", "fontclassname", "fontface", "fontfeaturelist", "fontsize", "fontstyle", "footnotetext", "forcecharacterstripping", "forcelocalfloats", "forgeteverypar", "forgetparameters", "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", "getprivatechar", "getprivateslot", "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", "grabbufferdata", "grabbufferdatadirect", "grabuntil", "graf", "grayvalue", "greedysplitstring", "greeknumerals", "groupedcommand", "gsetboxllx", "gsetboxlly", "gujaratinumerals", "gurmurkhinumerals", "hairspace", "halfwaybox", "handletokens", "handwritten", "hash", "hboxofvbox", "hboxreference", "hdofstring", "headhbox", "headnumbercontent", "headnumberdistance", "headnumberwidth", "headreferenceattributes", "headsetupspacing", "headtextcontent", "headtextdistance", "headtextwidth", "headvbox", "headwidth", "heightanddepthofstring", "heightofstring", "heightspanningtext", "helptext", "hglue", "hiddenbar", "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", "incrementcounter", "incrementedcounter", "incrementpagenumber", "incrementsubpagenumber", "incrementvalue", "indentation", "infofont", "infofontbold", "inheritparameter", "inhibitblank", "initializeboxstack", "inlinebuffer", "inlinedbox", "inlinemath", "inlinemathematics", "inlinemessage", "inlineordisplaymath", "inlinerange", "innerflushshapebox", "input", "inputfilebarename", "inputfilename", "inputfilerealsuffix", "inputfilesuffix", "inputgivenfile", "insertpages", "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", "intermezzo", "intertext", "invokepageheandler", "istltdir", "istrtdir", "italic", "italicbold", "italiccorrection", "itemtag", "jazyk", "jdidolu", "jdina", "jdinabox", "jdinastranu", "jobfilename", "jobfilesuffix", "kap", "kapitola", "keeplinestogether", "keepunwantedspaces", "kerncharacters", "klonujpole", "komentar", "komponenta", "konvertujcislo", "kopirujpole", "koreancirclenumerals", "koreannumerals", "koreannumeralsc", "koreannumeralsp", "koreanparentnumerals", "korekcebilehomista", "languageCharacters", "languagecharacters", "languagecharwidth", "lastcounter", "lastcountervalue", "lastdigit", "lastlinewidth", "lastnaturalboxdp", "lastnaturalboxht", "lastnaturalboxwd", "lastpredefinedsymbol", "lastrealpage", "lastrealpagenumber", "lastsubcountervalue", "lastsubpage", "lastsubpagenumber", "lasttwodigits", "lastuserpage", "lastuserpagenumber", "lateluacode", "layeredtext", "layerheight", "layerwidth", "lazysavetaggedtwopassdata", "lazysavetwopassdata", "lbox", "left", "leftbottombox", "leftbox", "lefthbox", "leftorrighthbox", "leftorrightvbox", "leftorrightvtop", "leftskipadaption", "leftsubguillemot", "lefttopbox", "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", "limtatefirstline", "linespanningtext", "listcitation", "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", "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", "margindata", "markcontent", "markinjector", "mat", "matematika", "math", "mathbf", "mathbi", "mathblackboard", "mathbs", "mathcommand", "mathdefault", "mathfraktur", "mathfunction", "mathit", "mathitalic", "mathop", "mathrm", "mathscript", "mathsl", "mathss", "mathtext", "mathtextbf", "mathtextbi", "mathtextbs", "mathtextit", "mathtextsl", "mathtexttf", "mathtf", "mathtriplet", "mathtt", "mathupright", "mathword", "mathwordbf", "mathwordbi", "mathwordbs", "mathwordit", "mathwordsl", "mathwordtf", "mazaramovani", "mbox", "mcframed", "md", "measure", "measured", "medskip", "medspace", "mequal", "meritko", "mesic", "message", "metaTeX", "mezera", "mfence", "mfunction", "mfunctionlabeltext", "mhbox", "mhookleftarrow", "mhookrightarrow", "middle", "middlebox", "midhbox", "minimalhbox", "mixedcaps", "mkvibuffer", "mleftarrow", "mleftharpoondown", "mleftharpoonup", "mleftrightarrow", "mleftrightharpoons", "mmapsto", "moduleparameter", "molecule", "mono", "monobold", "mononormal", "monthlong", "monthshort", "mp", "mprandomnumber", "mrel", "mrightarrow", "mrightharpoondown", "mrightharpoonup", "mrightleftharpoons", "mrightoverleftarrow", "mrizka", "mtext", "mtriplerel", "mtwoheadleftarrow", "mtwoheadrightarrow", "namedheadnumber", "namedstructureheadlocation", "namedstructureuservariable", "namedstructurevariable", "namedtaggedlabeltexts", "nastavbarvu", "nastavbarvy", "nastavbilamista", "nastavblok", "nastavbloksekce", "nastavbuffer", "nastavcernelinky", "nastavcislonadpisu", "nastavcislostrany", "nastavcislovaniodstavcu", "nastavcislovaniradku", "nastavcislovanistran", "nastavcitaci", "nastavdeleniplvoucichobjektu", "nastavdelitko", "nastavdolnitexty", "nastavhorejsek", "nastavhornitexty", "nastavinterakci", "nastavinterakcnilistu", "nastavinterakcnimenu", "nastavinterakcniobrazovku", "nastavjazyk", "nastavkapitalky", "nastavkombinovanyseznam", "nastavkomentar", "nastavkomentarstrany", "nastavmarginalnilinky", "nastavmeziradkovoumezeru", "nastavnadpis", "nastavnadpisy", "nastavodkazovani", "nastavodsazovani", "nastavodstavce", "nastavopis", "nastavoramovani", "nastavorez", "nastavotoceni", "nastavpaletu", "nastavplvouciobjekt", "nastavpodcislostrany", "nastavpole", "nastavpolozky", "nastavpopisek", "nastavpozadi", "nastavprechodstrany", "nastavpreskok", "nastavprogramy", "nastavradkovani", "nastavradky", "nastavrejstrik", "nastavsadusymbolu", "nastavseznam", "nastavsirkucary", "nastavsloupce", "nastavspodek", "nastavsynonyma", "nastavtabelaci", "nastavtabulky", "nastavtenkelinky", "nastavtext", "nastavtextovelinky", "nastavtexttexty", "nastavtextyupati", "nastavtextyzahlavi", "nastavtoleranci", "nastavtrideni", "nastavtype", "nastavumisteniprotejsku", "nastavumistovani", "nastavupati", "nastavupravu", "nastavurl", "nastavusporadani", "nastavvelikostpapiru", "nastavvsechnapole", "nastavvycty", "nastavvyplnovelinky", "nastavvyplnoveradky", "nastavvzhled", "nastavzahlavi", "nastavzakladnifont", "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", "nivy", "nizky", "nobar", "nocitation", "nocite", "nodetostring", "noffigurepages", "noflines", "noflocalfloats", "noindentation", "noitem", "nokap", "nonfrenchspacing", "nonmathematics", "normal", "normalboldface", "normalframedwithsettings", "normalizebodyfontsize", "normalizedfontsize", "normalizefontdepth", "normalizefontheight", "normalizefontline", "normalizefontwidth", "normalizetextdepth", "normalizetextheight", "normalizetextline", "normalizetextwidth", "normaltypeface", "notesymbol", "ntimes", "numberofpoints", "obeydepth", "objectdepth", "objectheight", "objectmargin", "objectwidth", "obox", "obrazek", "obrazovka", "odkaz", "odkaznastranu", "odkaznatext", "odkazujici", "offset", "offsetbox", "onedigitrounding", "opis", "opissoubor", "oramovani", "oramovanytext", "ordinaldaynumber", "ordinalstr", "oref", "orez", "ornamenttext", "otocit", "outputfilename", "outputstreambox", "outputstreamcopy", "outputstreamunvbox", "outputstreamunvcopy", "over", "overbar", "overbars", "overbartext", "overbarunderbar", "overbrace", "overbracetext", "overbraceunderbrace", "overbracket", "overbrackettext", "overbracketunderbracket", "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", "pagestaterealpage", "paletsize", "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", "placeattachments", "placebtxrendering", "placecitation", "placecomments", "placecurrentformulanumber", "placedbox", "placefloat", "placefloatwithsetups", "placeframed", "placeheadnumber", "placeheadtext", "placehelp", "placeinitial", "placelayer", "placelayeredtext", "placelistofpublications", "placelistofsorts", "placelistofsynonyms", "placelocalnotes", "placement", "placenamedfloat", "placenamedformula", "placenotes", "placepagenumber", "placepairedbox", "placeparallel", "placerawlist", "placerenderingwindow", "plnezneni", "podpodpodpodsekce", "podpodpodpodtema", "podpodpodsekce", "podpodpodtema", "podpodsekce", "podpodtema", "podsekce", "podtema", "pole", "polozka", "polozky", "popattribute", "popmacro", "popmode", "popsystemmode", "porovnejpaletu", "porovnejskupinubarev", "positionoverlay", "positionregionoverlay", "postponenotes", "pozadi", "pozice", "poznamka", "predefinedfont", "predefinefont", "predefinesymbol", "pref", "prefixedpagenumber", "prelozit", "prependetoks", "prependgvalue", "prependtocommalist", "prependtoks", "prependtoksonce", "prependvalue", "prepninazakladnifont", "presetdocument", "presetfieldsymbols", "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", "profiledbox", "profilegivenbox", "program", "projekt", "prostredi", "pseudoMixedCapped", "pseudoSmallCapped", "pseudoSmallcapped", "pseudosmallcapped", "purenumber", "pushattribute", "pushbutton", "pushmacro", "pushmode", "pushoutputstream", "pushsystemmode", "qquad", "quad", "quads", "quitcommalist", "quitprevcommalist", "quittypescriptscanning", "raisebox", "randomizetext", "randomnumber", "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", "replaceincommalist", "replaceword", "rescan", "rescanwithsetup", "resetMPdrawing", "resetMPenvironment", "resetMPinstance", "resetallattributes", "resetandaddfeature", "resetbar", "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", "resolvedglyphdirect", "resolvedglyphstyled", "restartcounter", "restorebox", "restorecatcodes", "restorecounter", "restorecurrentattributes", "restoreendofline", "restoreglobalbodyfont", "reusableMPgraphic", "reuseMPgraphic", "reuserandomseed", "revivefeature", "rfence", "rhbox", "right", "rightbottombox", "rightbox", "righthbox", "rightorleftpageaction", "rightskipadaption", "rightsubguillemot", "righttolefthbox", "righttoleftvbox", "righttoleftvtop", "righttopbox", "rimskecislice", "rlap", "robustaddtocommalist", "robustdoifelseinset", "robustdoifinsetelse", "robustpretocommalist", "rollbutton", "roman", "rozdelplvouciobjekt", "roztazene", "rtop", "ruledhbox", "ruledhpack", "ruledmbox", "ruledtopv", "ruledtpack", "ruledvbox", "ruledvpack", "ruledvtop", "runMPbuffer", "runninghbox", "safechar", "sans", "sansbold", "sansnormal", "sansserif", "savebox", "savebtxdataset", "savebuffer", "savecounter", "savecurrentattributes", "savenormalmeaning", "savetaggedtwopassdata", "savetwopassdata", "sbox", "schovejbloky", "sd", "secondoffivearguments", "secondoffourarguments", "secondofsixarguments", "secondofthreearguments", "secondofthreeunexpanded", "secondoftwoarguments", "secondoftwounexpanded", "sedabarva", "sekce", "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", "setfractions", "setgmeasure", "setgvalue", "setgvariable", "setgvariables", "sethboxregister", "sethyphenatedurlafter", "sethyphenatedurlbefore", "sethyphenatedurlnormal", "sethyphenationfeatures", "setinitial", "setinjector", "setinteraction", "setinterfacecommand", "setinterfaceconstant", "setinterfaceelements", "setinterfacemessage", "setinterfacevariable", "setinternalrendering", "setitaliccorrection", "setlayer", "setlayerframed", "setlayertext", "setlinefiller", "setlocalhsize", "setmainbodyfont", "setmainparbuilder", "setmarker", "setmarking", "setmathstyle", "setmeasure", "setmessagetext", "setmode", "setnostrut", "setnote", "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", "setupMPgraphics", "setupMPinstance", "setupMPpage", "setupMPvariables", "setupTABLE", "setupTEXpage", "setupattachment", "setupbackend", "setupbar", "setupbleeding", "setupbookmark", "setupbtx", "setupbtxdataset", "setupbtxlist", "setupbtxregister", "setupbtxrendering", "setupbutton", "setupcharacterkerning", "setupcharacterspacing", "setupchemical", "setupchemicalframed", "setupcollector", "setupcolumnspan", "setupcombination", "setupcounter", "setupdataset", "setupdelimitedtext", "setupdescription", "setupdirections", "setupdocument", "setupeffect", "setupenumeration", "setupenv", "setupexport", "setupexternalfigure", "setupexternalsoundtracks", "setupfieldbody", "setupfieldcategory", "setupfieldcontentframed", "setupfieldlabelframed", "setupfieldtotalframed", "setupfiller", "setupfirstline", "setupfittingpage", "setupfloatcaption", "setupfontexpansion", "setupfontprotrusion", "setupfonts", "setupfontsolution", "setupforms", "setupformula", "setupformulaframed", "setupframedcontent", "setupframedtext", "setupglobalreferenceprefix", "setupheadalternative", "setuphelp", "setuphigh", "setuphighlight", "setuphyphenation", "setupindentedtext", "setupinitial", "setupinsertion", "setupitaliccorrection", "setupitemgroup", "setuplabel", "setuplayer", "setuplayeredtext", "setuplayouttext", "setuplinefiller", "setuplinefillers", "setuplinenote", "setuplinetable", "setuplistalternative", "setuplistextra", "setuplocalfloats", "setuplocalinterlinespace", "setuplow", "setuplowhigh", "setuplowmidhigh", "setupmarginblock", "setupmargindata", "setupmarginframed", "setupmarginrule", "setupmathalignment", "setupmathcases", "setupmathematics", "setupmathfence", "setupmathfraction", "setupmathframed", "setupmathmatrix", "setupmathornament", "setupmathradical", "setupmathstackers", "setupmathstyle", "setupmixedcolumns", "setupmodule", "setupnotation", "setupnotations", "setupnote", "setupnotes", "setupoffset", "setupoffsetbox", "setupoutputroutine", "setuppagechecker", "setuppagegrid", "setuppagegridarea", "setuppagegridareatext", "setuppagegridlines", "setuppagegridspan", "setuppagegridstart", "setuppageinjection", "setuppageinjectionalternative", "setuppageshift", "setuppagestate", "setuppairedbox", "setuppaper", "setupparagraph", "setupparagraphintro", "setupparallel", "setupperiods", "setupplacement", "setuppositionbar", "setupprocessor", "setupprofile", "setupquotation", "setuprealpagenumber", "setupreferenceformat", "setupreferenceprefix", "setupreferencestructureprefix", "setupregisters", "setuprenderingwindow", "setups", "setupscale", "setupscript", "setupscripts", "setupselector", "setupshift", "setupsidebar", "setupspellchecking", "setupstartstop", "setupstretched", "setupstruts", "setupstyle", "setupsubformula", "setuptabulation", "setuptagging", "setuptextbackground", "setuptextflow", "setuptooltip", "setupunit", "setupuserpagenumber", "setupversion", "setupviewerlayer", "setupvspacing", "setupwithargument", "setupwithargumentswapped", "setupxml", "setupxtable", "setuvalue", "setuxvalue", "setvalue", "setvariable", "setvariables", "setvboxregister", "setvisualizerfont", "setvtopregister", "setwidthof", "setxmeasure", "setxvalue", "setxvariable", "setxvariables", "sfrac", "shapedhbox", "showallmakeup", "showattributes", "showboxes", "showbtxdatasetauthors", "showbtxdatasetcompleteness", "showbtxdatasetfields", "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", "simplegroupedcommand", "singalcharacteralign", "singlebond", "sixthofsixarguments", "skryt", "slanted", "slantedbold", "slicepages", "sloupec", "slovenianNumerals", "sloveniannumerals", "small", "smallbodyfont", "smallbold", "smallbolditalic", "smallboldslanted", "smallcappedcharacters", "smallcappedromannumerals", "smaller", "smallitalicbold", "smallnormal", "smallskip", "smallslanted", "smallslantedbold", "smalltype", "smash", "smashbox", "smashboxed", "smashedhbox", "smashedvbox", "snaptogrid", "someheadnumber", "somekindoftab", "somelocalfloat", "somenamedheadnumber", "someplace", "sp", "spanishNumerals", "spanishnumerals", "speech", "splitatasterisk", "splitatcolon", "splitatcolons", "splitatcomma", "splitdfrac", "splitfilename", "splitfrac", "splitoffbase", "splitofffull", "splitoffkind", "splitoffname", "splitoffpath", "splitoffroot", "splitofftokens", "splitofftype", "splitstring", "spreadhbox", "sqrt", "stackrel", "stanovcharakteristickuseznamu", "stanovcislonadpisu", "startJScode", "startJSpreamble", "startMPclip", "startMPcode", "startMPdefinitions", "startMPdrawing", "startMPenvironment", "startMPextensions", "startMPinclusions", "startMPinitializations", "startMPpage", "startMPpositiongraphic", "startMPpositionmethod", "startMPrun", "startTABLE", "startTABLEbody", "startTABLEfoot", "startTABLEhead", "startTABLEnext", "startTC", "startTD", "startTDs", "startTEXpage", "startTH", "startTN", "startTR", "startTRs", "startTX", "startTY", "startallmodes", "startarrangedpages", "startaside", "startattachment", "startbar", "startbarva", "startbinom", "startbitmapimage", "startblockquote", "startbtxrenderingdefinitions", "startbuffer", "startbutton", "startcatcodetable", "startcharacteralign", "startcheckedfences", "startchemical", "startcitace", "startcitovat", "startcollect", "startcollecting", "startcolorintent", "startcoloronly", "startcolorset", "startcolumns", "startcolumnspan", "startcombination", "startcomment", "startcontextcode", "startcontextdefinitioncode", "startctxfunction", "startctxfunctiondefinition", "startcurrentcolor", "startcurrentlistentrywrapper", "startdbinom", "startdelimited", "startdelimitedtext", "startdfrac", "startdisplaymath", "startdmath", "startdocument", "starteffect", "startelement", "startembeddedxtable", "startendofline", "startexceptions", "startexpanded", "startexpandedcollect", "startextendedcatcodetable", "startexternalfigurecollection", "startfigure", "startfitfieldframed", "startfittingpage", "startfloatcombination", "startfont", "startfontclass", "startfontsolution", "startformula", "startformulas", "startfrac", "startframedcontent", "startframedtext", "startgraf", "startgridsnapping", "starthbox", "starthboxestohbox", "starthboxregister", "starthelptext", "starthiddenbar", "starthiding", "starthighlight", "starthyphenation", "startimath", "startindentation", "startindentedtext", "startinmframed", "startinteraction", "startinteraktivnimenu", "startinterface", "startintermezzo", "startintertext", "startitemgroup", "startjdina", "startkapitola", "startknockout", "startkomentar", "startkomponenta", "startlayout", "startlinecorrection", "startlinefiller", "startlinenumbering", "startlinetable", "startlinetablebody", "startlinetablecell", "startlinetablehead", "startlocalfootnotes", "startlocalheadsetup", "startlocallinecorrection", "startlocalnotes", "startlocalsetups", "startlua", "startluacode", "startluaparameterset", "startluasetups", "startmakeup", "startmarginalnilinka", "startmarginblock", "startmarkedcontent", "startmathmode", "startmathstyle", "startmatrices", "startmcframed", "startmdformula", "startmframed", "startmixedcolumns", "startmode", "startmodeset", "startmodule", "startmoduletestsection", "startmpformula", "startnadpis", "startnadtrzeni", "startnadtrzeno", "startnamedsection", "startnamedsubformulas", "startnarrow", "startnarrower", "startnegative", "startnicelyfilledbox", "startnobar", "startnointerference", "startnotallmodes", "startnotext", "startnotmode", "startobrazek", "startopposite", "startoramovani", "startoramovanytext", "startoutputstream", "startoverlay", "startoverprint", "startpagecomment", "startpagefigure", "startpagegrid", "startpagegridspan", "startpagelayout", "startpar", "startparagraph", "startparagraphs", "startparagraphscell", "startparbuilder", "startpath", "startplacepairedbox", "startpodpodpodpodsekce", "startpodpodpodpodtema", "startpodpodpodsekce", "startpodpodpodtema", "startpodpodsekce", "startpodpodtema", "startpodsekce", "startpodtema", "startpodtrzeni", "startpodtrzeno", "startpolozka", "startpositioning", "startpositionoverlay", "startpositive", "startpostponing", "startpozadi", "startpreskrtnuti", "startpreskrtnuto", "startprocessassignmentcommand", "startprocessassignmentlist", "startprocesscommacommand", "startprocesscommalist", "startprodukt", "startprojekt", "startprostredi", "startprotect", "startprotectedcolors", "startpublikace", "startpunctuation", "startradek", "startrandomized", "startrandomseed", "startrawsetups", "startreadingfile", "startreferenceprefix", "startregime", "startregister", "startreusableMPgraphic", "startscript", "startsdformula", "startsectionblock", "startsectionblockenvironment", "startsectionlevel", "startsekce", "startsetups", "startsfrac", "startshapebox", "startshift", "startsidebar", "startsimplecolumns", "startspecialitem", "startspeech", "startspformula", "startspread", "startstartstop", "startstaticMPfigure", "startstaticMPgraphic", "startstrictinspectnextcharacter", "startstructurepageregister", "startstrut", "startstyle", "startsubformulas", "startsubjectlevel", "startsubsentence", "startsubstack", "startsymbolset", "starttable", "starttablehead", "starttables", "starttabletail", "starttabulate", "starttabulatehead", "starttabulatetail", "starttabulka", "starttagged", "starttbinom", "starttema", "starttexcode", "starttexdefinition", "starttext", "starttextbackground", "starttextbackgroundmanual", "starttextcolor", "starttextcolorintent", "starttextflow", "starttextnapovedy", "starttextovalinka", "starttitul", "starttokens", "starttransparent", "starttypescript", "starttypescriptcollection", "startumistirovnici", "startunderdash", "startunderdashes", "startunderdot", "startunderdots", "startunderrandom", "startunderrandoms", "startunderstrike", "startunderstrikes", "startunframed", "startuniqueMPgraphic", "startuniqueMPpagegraphic", "startunpacked", "startusableMPgraphic", "startuseMPgraphic", "startusemathstyleparameter", "startusingbtxspecification", "startvbox", "startvboxregister", "startvboxtohbox", "startvboxtohboxseparator", "startviewerlayer", "startvtop", "startvtopregister", "startvycet", "startxcell", "startxcellgroup", "startxfrac", "startxgroup", "startxmldisplayverbatim", "startxmlinlineverbatim", "startxmlraw", "startxmlsetups", "startxrow", "startxrowgroup", "startxtable", "startxtablebody", "startxtablefoot", "startxtablehead", "startxtablenext", "startxxfrac", "startzhustene", "stopJScode", "stopJSpreamble", "stopMPclip", "stopMPcode", "stopMPdefinitions", "stopMPdrawing", "stopMPenvironment", "stopMPextensions", "stopMPinclusions", "stopMPinitializations", "stopMPpage", "stopMPpositiongraphic", "stopMPpositionmethod", "stopMPrun", "stopTABLE", "stopTABLEbody", "stopTABLEfoot", "stopTABLEhead", "stopTABLEnext", "stopTC", "stopTD", "stopTDs", "stopTEXpage", "stopTH", "stopTN", "stopTR", "stopTRs", "stopTX", "stopTY", "stopallmodes", "stoparrangedpages", "stopaside", "stopattachment", "stopbar", "stopbarva", "stopbinom", "stopbitmapimage", "stopblockquote", "stopbtxrenderingdefinitions", "stopbuffer", "stopbutton", "stopcatcodetable", "stopcharacteralign", "stopcheckedfences", "stopchemical", "stopcitace", "stopcitovat", "stopcollect", "stopcollecting", "stopcolorintent", "stopcoloronly", "stopcolorset", "stopcolumns", "stopcolumnspan", "stopcombination", "stopcomment", "stopcontextcode", "stopcontextdefinitioncode", "stopctxfunction", "stopctxfunctiondefinition", "stopcurrentcolor", "stopcurrentlistentrywrapper", "stopdbinom", "stopdelimited", "stopdelimitedtext", "stopdfrac", "stopdisplaymath", "stopdmath", "stopdocument", "stopeffect", "stopelement", "stopembeddedxtable", "stopendofline", "stopexceptions", "stopexpanded", "stopexpandedcollect", "stopextendedcatcodetable", "stopexternalfigurecollection", "stopfigure", "stopfitfieldframed", "stopfittingpage", "stopfloatcombination", "stopfont", "stopfontclass", "stopfontsolution", "stopformula", "stopformulas", "stopfrac", "stopframedcontent", "stopframedtext", "stopgraf", "stopgridsnapping", "stophbox", "stophboxestohbox", "stophboxregister", "stophelptext", "stophiddenbar", "stophiding", "stophighlight", "stophyphenation", "stopimath", "stopindentation", "stopindentedtext", "stopinmframed", "stopinteraction", "stopinteraktivnimenu", "stopinterface", "stopintermezzo", "stopintertext", "stopitemgroup", "stopjdina", "stopkapitola", "stopknockout", "stopkomentar", "stopkomponenta", "stoplayout", "stoplinecorrection", "stoplinefiller", "stoplinenumbering", "stoplinetable", "stoplinetablebody", "stoplinetablecell", "stoplinetablehead", "stoplocalfootnotes", "stoplocalheadsetup", "stoplocallinecorrection", "stoplocalnotes", "stoplocalsetups", "stoplua", "stopluacode", "stopluaparameterset", "stopluasetups", "stopmakeup", "stopmarginalnilinka", "stopmarginblock", "stopmarkedcontent", "stopmathmode", "stopmathstyle", "stopmatrices", "stopmcframed", "stopmdformula", "stopmframed", "stopmixedcolumns", "stopmode", "stopmodeset", "stopmodule", "stopmoduletestsection", "stopmpformula", "stopnadpis", "stopnadtrzeni", "stopnadtrzeno", "stopnamedsection", "stopnamedsubformulas", "stopnarrow", "stopnarrower", "stopnegative", "stopnicelyfilledbox", "stopnobar", "stopnointerference", "stopnotallmodes", "stopnotext", "stopnotmode", "stopobrazek", "stopopposite", "stoporamovani", "stoporamovanytext", "stopoutputstream", "stopoverlay", "stopoverprint", "stoppagecomment", "stoppagefigure", "stoppagegrid", "stoppagegridspan", "stoppagelayout", "stoppar", "stopparagraph", "stopparagraphs", "stopparagraphscell", "stopparbuilder", "stoppath", "stopplacepairedbox", "stoppodpodpodpodsekce", "stoppodpodpodpodtema", "stoppodpodpodsekce", "stoppodpodpodtema", "stoppodpodsekce", "stoppodpodtema", "stoppodsekce", "stoppodtema", "stoppodtrzeni", "stoppodtrzeno", "stoppolozka", "stoppositioning", "stoppositionoverlay", "stoppositive", "stoppostponing", "stoppozadi", "stoppreskrtnuti", "stoppreskrtnuto", "stopprocessassignmentcommand", "stopprocessassignmentlist", "stopprocesscommacommand", "stopprocesscommalist", "stopprodukt", "stopprojekt", "stopprostredi", "stopprotect", "stopprotectedcolors", "stoppublikace", "stoppunctuation", "stopradek", "stoprandomized", "stoprandomseed", "stoprawsetups", "stopreadingfile", "stopreferenceprefix", "stopregime", "stopregister", "stopreusableMPgraphic", "stopscript", "stopsdformula", "stopsectionblock", "stopsectionblockenvironment", "stopsectionlevel", "stopsekce", "stopsetups", "stopsfrac", "stopshapebox", "stopshift", "stopsidebar", "stopsimplecolumns", "stopspecialitem", "stopspeech", "stopspformula", "stopspread", "stopstartstop", "stopstaticMPfigure", "stopstaticMPgraphic", "stopstrictinspectnextcharacter", "stopstructurepageregister", "stopstrut", "stopstyle", "stopsubformulas", "stopsubjectlevel", "stopsubsentence", "stopsubstack", "stopsymbolset", "stoptable", "stoptablehead", "stoptables", "stoptabletail", "stoptabulate", "stoptabulatehead", "stoptabulatetail", "stoptabulka", "stoptagged", "stoptbinom", "stoptema", "stoptexcode", "stoptexdefinition", "stoptext", "stoptextbackground", "stoptextbackgroundmanual", "stoptextcolor", "stoptextcolorintent", "stoptextflow", "stoptextnapovedy", "stoptextovalinka", "stoptitul", "stoptokens", "stoptransparent", "stoptypescript", "stoptypescriptcollection", "stopumistirovnici", "stopunderdash", "stopunderdashes", "stopunderdot", "stopunderdots", "stopunderrandom", "stopunderrandoms", "stopunderstrike", "stopunderstrikes", "stopunframed", "stopuniqueMPgraphic", "stopuniqueMPpagegraphic", "stopunpacked", "stopusableMPgraphic", "stopuseMPgraphic", "stopusemathstyleparameter", "stopusingbtxspecification", "stopvbox", "stopvboxregister", "stopvboxtohbox", "stopvboxtohboxseparator", "stopviewerlayer", "stopvtop", "stopvtopregister", "stopvycet", "stopxcell", "stopxcellgroup", "stopxfrac", "stopxgroup", "stopxmldisplayverbatim", "stopxmlinlineverbatim", "stopxmlraw", "stopxmlsetups", "stopxrow", "stopxrowgroup", "stopxtable", "stopxtablebody", "stopxtablefoot", "stopxtablehead", "stopxtablenext", "stopxxfrac", "stopzhustene", "strana", "strictdoifelsenextoptional", "strictdoifnextoptionalelse", "stripcharacter", "strippedcsname", "stripspaces", "structurelistuservariable", "structurenumber", "structuretitle", "structureuservariable", "structurevariable", "strut", "strutdp", "strutht", "struthtdp", "struttedbox", "strutwd", "style", "styleinstance", "subpagenumber", "subsentence", "substituteincommalist", "subtractfeature", "swapcounts", "swapdimens", "swapface", "swapmacros", "swaptypeface", "switchstyleonly", "switchtocolor", "switchtointerlinespace", "symbol", "symbolreference", "synchronizeblank", "synchronizeindenting", "synchronizemarking", "synchronizeoutputstreams", "synchronizestrut", "synchronizewhitespace", "systemlog", "systemlogfirst", "systemloglast", "systemsetups", "tLeftarrow", "tLeftrightarrow", "tRightarrow", "tabulateautoline", "tabulateautorule", "tabulateline", "tabulaterule", "tabulka", "taggedctxcommand", "taggedlabeltexts", "tbinom", "tbox", "tecky", "tema", "tenkalinka", "tenkelinky", "tequal", "testandsplitstring", "testcolumn", "testfeature", "testfeatureonce", "testpage", "testpageonly", "testpagesync", "testtokens", "tex", "texdefinition", "texsetup", "textcitation", "textcite", "textcontrolspace", "textflowcollector", "textmath", "textminus", "textnapovedy", "textormathchar", "textovalinka", "textplus", "textvisiblespace", "tfrac", "thainumerals", "thefirstcharacter", "thenormalizedbodyfontsize", "theremainingcharacters", "thickspace", "thinspace", "thirdoffivearguments", "thirdoffourarguments", "thirdofsixarguments", "thirdofthreearguments", "thirdofthreeunexpanded", "thookleftarrow", "thookrightarrow", "threedigitrounding", "tibetannumerals", "tightlayer", "tinyfont", "titul", "tlacitko", "tlacitkomenu", "tlap", "tleftarrow", "tleftharpoondown", "tleftharpoonup", "tleftrightarrow", "tleftrightharpoons", "tloustkacary", "tmapsto", "tochar", "tolinenote", "topbox", "topleftbox", "toplinebox", "toprightbox", "topskippedbox", "tracecatcodetables", "tracedfontname", "traceoutputroutines", "tracepositions", "transparencycomponents", "transparent", "tref", "trel", "trightarrow", "trightharpoondown", "trightharpoonup", "trightleftharpoons", "trightoverleftarrow", "triplebond", "truefilename", "truefontname", "ttriplerel", "ttwoheadleftarrow", "ttwoheadrightarrow", "tvrdamezera", "tvrdemezery", "twodigitrounding", "tx", "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", "umistilokalnipoznamkypodcarou", "umistinadsebe", "umistinamrizku", "umistipodrovnici", "umistipoznamkypodcarou", "umistirejstrik", "umistirovnici", "umistiseznam", "umistivedlesebe", "umistizalozky", "undefinevalue", "undepthed", "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", "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", "useblankparameter", "usebodyfont", "usebodyfontparameter", "usebtxdataset", "usebtxdefinitions", "usecolors", "usecomponent", "usedummycolorparameter", "usedummystyleandcolor", "usedummystyleparameter", "useenvironment", "useexternalrendering", "usefigurebase", "usefile", "usegridparameter", "useindentingparameter", "useindentnextparameter", "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", "verbatim", "verbatimstring", "verbosenumber", "verticalgrowingbar", "verticalpositionbar", "verze", "vglue", "viewerlayer", "vl", "vlasovalinka", "vphantom", "vpos", "vradku", "vsedniden", "vsmash", "vsmashbox", "vsmashed", "vspace", "vspacing", "vyberbloky", "vycet", "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", "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", "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", "Lua", "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", "MPwhd", "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", "TEXpage", "TaBlE", "TeX", "TheNormalizedFontSize", "TransparencyHack", "VerboseNumber", "WOCHENTAG", "WOERTER", "WORT", "WidthSpanningText", "Woerter", "Wort", "XETEX", "XeTeX", "Ziffern", "abbildung", "abjadnaivenumerals", "abjadnodotnumerals", "abjadnumerals", "absatz", "activatespacehandler", "adaptcollector", "adaptfontfeature", "adaptpapersize", "addfeature", "addtoJSpreamble", "addtocommalist", "addvalue", "aftersplitstring", "aftertestandsplitstring", "alignmentcharacter", "allinputpaths", "alphabeticnumerals", "alwayscitation", "alwayscite", "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", "aside", "assignalfadimension", "assigndimen", "assigndimension", "assignifempty", "assigntranslation", "assignvalue", "assignwidth", "assumelongusagecs", "astype", "attachment", "aufseite", "aufzaehlung", "ausfuelltext", "ausschnitt", "autocap", "autodirhbox", "autodirvbox", "autodirvtop", "autoinsertnextspace", "automathematics", "autosetups", "availablehsize", "averagecharwidth", "backgroundimage", "backgroundimagefill", "backgroundline", "basegrid", "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", "blockligatures", "blockquote", "bodyfontenvironmentlist", "bodyfontsize", "bold", "boldface", "bolditalic", "boldslanted", "bookmark", "booleanmodevalue", "bottombox", "bottomleftbox", "bottomrightbox", "boxcursor", "boxmarker", "boxofsize", "boxreference", "bpos", "bthiddencitation", "btxabbreviatedjournal", "btxaddjournal", "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", "btxlistcitation", "btxloadjournalist", "btxoneorrange", "btxremapauthor", "btxsavejournalist", "btxsetup", "btxsingularorplural", "btxsingularplural", "btxtextcitation", "buchstabe", "buchstaben", "calligraphic", "camel", "catcodetablename", "cbox", "centerbox", "centeredbox", "centerednextbox", "cfrac", "chardescription", "charwidthlanguage", "checkcharacteralign", "checkedchar", "checkedfiller", "checkedstrippedcsname", "checkinjector", "checknextindentation", "checknextinjector", "checkpage", "checkparameters", "checkpreviousinjector", "checksoundtrack", "checktwopassdata", "checkvariables", "chem", "chemical", "chemicalbottext", "chemicalmidtext", "chemicalsymbol", "chemicaltext", "chemicaltoptext", "chineseallnumerals", "chinesecapnumerals", "chinesenumerals", "citation", "cite", "clap", "classfont", "cldcommand", "cldcontext", "cldloadfile", "cldprocessfile", "cleftarrow", "collect", "collectedtext", "collectexpanded", "colorcomponents", "colored", "coloronly", "columnbreak", "combinepages", "commalistelement", "commalistsentence", "commalistsize", "comment", "comparedimension", "comparedimensioneps", "completebtxrendering", "completelist", "completelistofpublications", "completelistofsorts", "completelistofsynonyms", "completepagenumber", "completeregister", "complexorsimple", "complexorsimpleempty", "composedcollector", "composedlayer", "compresult", "constantdimen", "constantdimenargument", "constantemptyargument", "constantnumber", "constantnumberargument", "contentreference", "continuednumber", "continueifinputfile", "convertargument", "convertcommand", "convertedcounter", "converteddimen", "convertedsubcounter", "convertmonth", "convertvalue", "convertvboxtohbox", "copypages", "copyparameters", "copyposition", "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", "datasetvariable", "datum", "dayoftheweek", "dayspermonth", "dbinom", "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", "definecomplexorsimpleempty", "defineconversionset", "definecounter", "definedataset", "definedelimitedtext", "definedfont", "defineeffect", "defineexpandable", "defineexternalfigure", "definefallbackfamily", "definefieldbody", "definefieldbodyset", "definefieldcategory", "definefileconstant", "definefilefallback", "definefilesynonym", "definefiller", "definefirstline", "definefittingpage", "definefontalternative", "definefontfallback", "definefontfamily", "definefontfamilypreset", "definefontfeature", "definefontfile", "definefontsize", "definefontsolution", "defineformula", "defineformulaalternative", "defineformulaframed", "defineframedcontent", "definefrozenfont", "defineglobalcolor", "definegraphictypesynonym", "definegridsnapping", "defineheadalternative", "definehelp", "definehigh", "definehighlight", "definehspace", "definehypenationfeatures", "defineindentedtext", "defineindenting", "defineinitial", "defineinsertion", "defineinteraction", "defineinteractionbar", "defineinterfaceconstant", "defineinterfaceelement", "defineinterfacevariable", "defineinterlinespace", "defineintermediatecolor", "defineitemgroup", "defineitems", "definelabelclass", "definelayer", "definelayerpreset", "definelayout", "definelinefiller", "definelinenote", "definelinenumbering", "definelines", "definelistalternative", "definelistextra", "definelow", "definelowhigh", "definelowmidhigh", "definemarginblock", "definemargindata", "definemarker", "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", "definenamespace", "definenarrower", "definenote", "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", "definierebeschreibung", "definierebeschriftung", "definiereblock", "definierefarbe", "definierefarbengruppe", "definierefeld", "definierefeldstapel", "definierefliesstext", "definierefliesstextumgebung", "definieregleitobjekt", "definierehbox", "definiereinteraktionsmenue", "definierekonversion", "definierelabel", "definiereliste", "definieren", "definierenummerierung", "definiereoverlay", "definierepalette", "definierepapierformat", "definiereprofil", "definiereprogramme", "definierepuffer", "definierereferenz", "definierereferenzformat", "definiereregister", "definiereschrift", "definiereschriftstil", "definieresortieren", "definierestartstop", "definierestil", "definieresubfeld", "definieresymbol", "definieresynonyme", "definieretabellenvorlage", "definieretabulator", "definieretext", "definieretippen", "definiereueberschrift", "definiereumbruch", "definiereumrahmt", "definiereumrahmtertext", "definierezusammengestellteliste", "delimited", "delimitedtext", "depthofstring", "depthonlybox", "depthspanningtext", "determinenoflines", "devanagarinumerals", "dfrac", "digits", "dimensiontocount", "directcolor", "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", "dorepeatwithcommand", "doreplacefeature", "doresetandafffeature", "doresetattribute", "dorotatebox", "dosetattribute", "dosetleftskipadaption", "dosetrightskipadaption", "dosetupcheckedinterlinespace", "doseventupleargument", "doseventupleempty", "dosingleargument", "dosingleempty", "dosinglegroupempty", "dosixtupleargument", "dosixtupleempty", "dostepwiserecurse", "dosubtractfeature", "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", "enskip", "enspace", "env", "envvar", "eoverbarfill", "eoverbracefill", "eoverbracketfill", "eoverparentfill", "epos", "equaldigits", "erightarrowfill", "erightharpoondownfill", "erightharpoonupfill", "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", "feld", "feldstapel", "fence", "fenced", "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", "flushboxregister", "flushcollector", "flushlayer", "flushlocalfloats", "flushnextbox", "flushnotes", "flushoutputstream", "flushshapebox", "flushtextflow", "flushtokens", "flushtoks", "fontalternative", "fontbody", "fontchar", "fontcharbyindex", "fontclass", "fontclassname", "fontface", "fontfeaturelist", "fontsize", "fontstyle", "footnotetext", "forcecharacterstripping", "forcelocalfloats", "forgeteverypar", "forgetparameters", "format", "formelnummer", "formula", "foundbox", "fourthoffivearguments", "fourthoffourarguments", "fourthofsixarguments", "frac", "frameddimension", "framedparameter", "framedtext", "freezedimenmacro", "freezemeasure", "frenchspacing", "fromlinenote", "frozenhbox", "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", "getprivatechar", "getprivateslot", "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", "grabbufferdata", "grabbufferdatadirect", "grabuntil", "grafik", "graufarbe", "grayvalue", "greedysplitstring", "greeknumerals", "groupedcommand", "gsetboxllx", "gsetboxlly", "gujaratinumerals", "gurmurkhinumerals", "haarlinie", "hairspace", "halfwaybox", "handletokens", "handwritten", "hash", "hauptsprache", "hboxofvbox", "hboxreference", "hdofstring", "headhbox", "headnumbercontent", "headnumberdistance", "headnumberwidth", "headreferenceattributes", "headsetupspacing", "headtextcontent", "headtextdistance", "headtextwidth", "headvbox", "headwidth", "heightanddepthofstring", "heightofstring", "heightspanningtext", "helptext", "heutigesdatum", "heutigeskopfnummer", "hglue", "hiddenbar", "hiddencitation", "hiddencite", "highlight", "highordinalstr", "hilfetext", "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", "immaumrise", "immediatesavetwopassdata", "impliedby", "implies", "imumriss", "in", "includemenu", "includeversioninfo", "increment", "incrementcounter", "incrementedcounter", "incrementpagenumber", "incrementsubpagenumber", "incrementvalue", "indentation", "infofont", "infofontbold", "inheritparameter", "inhibitblank", "initializeboxstack", "inlinebuffer", "inlinedbox", "inlinemath", "inlinemathematics", "inlinemessage", "inlineordisplaymath", "inlinerange", "innerflushshapebox", "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", "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", "intermezzo", "intertext", "invokepageheandler", "inzeile", "irgendwo", "istltdir", "istrtdir", "italic", "italicbold", "italiccorrection", "itemtag", "jobfilename", "jobfilesuffix", "kap", "kapitel", "keeplinestogether", "keepunwantedspaces", "keinekopfundfusszeilen", "keinspatium", "keinzeilenobenundunten", "kerncharacters", "klonierefeld", "knopf", "kommentar", "komponente", "konvertierezahl", "kopfnummer", "kopierefeld", "koreancirclenumerals", "koreannumerals", "koreannumeralsc", "koreannumeralsp", "koreanparentnumerals", "korrigierezwischenraum", "languageCharacters", "languagecharacters", "languagecharwidth", "lastcounter", "lastcountervalue", "lastdigit", "lastlinewidth", "lastnaturalboxdp", "lastnaturalboxht", "lastnaturalboxwd", "lastpredefinedsymbol", "lastrealpage", "lastrealpagenumber", "lastsubcountervalue", "lastsubpage", "lastsubpagenumber", "lasttwodigits", "lastuserpage", "lastuserpagenumber", "lateluacode", "layeredtext", "layerheight", "layerwidth", "lazysavetaggedtwopassdata", "lazysavetwopassdata", "lbox", "left", "leftbottombox", "leftbox", "lefthbox", "leftorrighthbox", "leftorrightvbox", "leftorrightvtop", "leftskipadaption", "leftsubguillemot", "lefttopbox", "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", "limtatefirstline", "linespanningtext", "liniendicke", "listcitation", "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", "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", "mathematik", "mathfraktur", "mathfunction", "mathit", "mathitalic", "mathop", "mathrm", "mathscript", "mathsl", "mathss", "mathtext", "mathtextbf", "mathtextbi", "mathtextbs", "mathtextit", "mathtextsl", "mathtexttf", "mathtf", "mathtriplet", "mathtt", "mathupright", "mathword", "mathwordbf", "mathwordbi", "mathwordbs", "mathwordit", "mathwordsl", "mathwordtf", "maumrise", "mbox", "mcframed", "md", "measure", "measured", "medskip", "medspace", "menueknopf", "mequal", "message", "metaTeX", "mfence", "mfunction", "mfunctionlabeltext", "mhbox", "mhookleftarrow", "mhookrightarrow", "middle", "middlebox", "midhbox", "minimalhbox", "mixedcaps", "mkvibuffer", "mleftarrow", "mleftharpoondown", "mleftharpoonup", "mleftrightarrow", "mleftrightharpoons", "mmapsto", "moduleparameter", "molecule", "monat", "mono", "monobold", "mononormal", "monthlong", "monthshort", "mp", "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", "nobar", "nocitation", "nocite", "nodetostring", "noffigurepages", "noflines", "noflocalfloats", "noindentation", "noitem", "nokap", "nonfrenchspacing", "nonmathematics", "normal", "normalboldface", "normalframedwithsettings", "normalizebodyfontsize", "normalizedfontsize", "normalizefontdepth", "normalizefontheight", "normalizefontline", "normalizefontwidth", "normalizetextdepth", "normalizetextheight", "normalizetextline", "normalizetextwidth", "normaltypeface", "notesymbol", "notiz", "ntimes", "numberofpoints", "obeydepth", "objectdepth", "objectheight", "objectmargin", "objectwidth", "obox", "offset", "offsetbox", "onedigitrounding", "ordinaldaynumber", "ordinalstr", "ornamenttext", "outputfilename", "outputstreambox", "outputstreamcopy", "outputstreamunvbox", "outputstreamunvcopy", "over", "overbar", "overbars", "overbartext", "overbarunderbar", "overbrace", "overbracetext", "overbraceunderbrace", "overbracket", "overbrackettext", "overbracketunderbracket", "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", "pagestaterealpage", "paletsize", "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", "placecitation", "placecomments", "placecurrentformulanumber", "placedbox", "placefloat", "placefloatwithsetups", "placeframed", "placeheadnumber", "placeheadtext", "placehelp", "placeinitial", "placelayer", "placelayeredtext", "placelistofpublications", "placelistofsorts", "placelistofsynonyms", "placelocalnotes", "placement", "placenamedfloat", "placenamedformula", "placenotes", "placepagenumber", "placepairedbox", "placeparallel", "placerawlist", "placerenderingwindow", "platzierebookmarks", "platziereformel", "platzierefussnoten", "platziereliste", "platzierelokalefussnoten", "platzierenebeneinander", "platziereregister", "platziereuntereinander", "platziereunterformel", "platzierezusammengestellteliste", "popattribute", "popmacro", "popmode", "popsystemmode", "pos", "position", "positionoverlay", "positionregionoverlay", "posten", "postponenotes", "predefinedfont", "predefinefont", "predefinesymbol", "prefixedpagenumber", "prependetoks", "prependgvalue", "prependtocommalist", "prependtoks", "prependtoksonce", "prependvalue", "presetdocument", "presetfieldsymbols", "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", "profiledbox", "profilegivenbox", "programm", "projekt", "pseudoMixedCapped", "pseudoSmallCapped", "pseudoSmallcapped", "pseudosmallcapped", "punkt", "purenumber", "pushattribute", "pushbutton", "pushmacro", "pushmode", "pushoutputstream", "pushsystemmode", "qquad", "quad", "quads", "quitcommalist", "quitprevcommalist", "quittypescriptscanning", "raisebox", "randomizetext", "randomnumber", "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", "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", "replaceincommalist", "replaceword", "rescan", "rescanwithsetup", "resetMPdrawing", "resetMPenvironment", "resetMPinstance", "resetallattributes", "resetandaddfeature", "resetbar", "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", "resolvedglyphdirect", "resolvedglyphstyled", "restartcounter", "restorebox", "restorecatcodes", "restorecounter", "restorecurrentattributes", "restoreendofline", "restoreglobalbodyfont", "reusableMPgraphic", "reuseMPgraphic", "reuserandomseed", "revivefeature", "rfence", "rhbox", "right", "rightbottombox", "rightbox", "righthbox", "rightorleftpageaction", "rightskipadaption", "rightsubguillemot", "righttolefthbox", "righttoleftvbox", "righttoleftvtop", "righttopbox", "rlap", "robustaddtocommalist", "robustdoifelseinset", "robustdoifinsetelse", "robustpretocommalist", "roemischezahlen", "rollbutton", "roman", "rtop", "ruecksetztenbeschriftung", "ruledhbox", "ruledhpack", "ruledmbox", "ruledtopv", "ruledtpack", "ruledvbox", "ruledvpack", "ruledvtop", "runMPbuffer", "runninghbox", "safechar", "sans", "sansbold", "sansnormal", "sansserif", "savebox", "savebtxdataset", "savebuffer", "savecounter", "savecurrentattributes", "savenormalmeaning", "savetaggedtwopassdata", "savetwopassdata", "sbox", "schreibezurliste", "schreibezwischenliste", "sd", "secondoffivearguments", "secondoffourarguments", "secondofsixarguments", "secondofthreearguments", "secondofthreeunexpanded", "secondoftwoarguments", "secondoftwounexpanded", "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", "setfractions", "setgmeasure", "setgvalue", "setgvariable", "setgvariables", "sethboxregister", "sethyphenatedurlafter", "sethyphenatedurlbefore", "sethyphenatedurlnormal", "sethyphenationfeatures", "setinitial", "setinjector", "setinteraction", "setinterfacecommand", "setinterfaceconstant", "setinterfaceelements", "setinterfacemessage", "setinterfacevariable", "setinternalrendering", "setitaliccorrection", "setlayer", "setlayerframed", "setlayertext", "setlinefiller", "setlocalhsize", "setmainbodyfont", "setmainparbuilder", "setmarker", "setmarking", "setmathstyle", "setmeasure", "setmessagetext", "setmode", "setnostrut", "setnote", "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", "setupMPgraphics", "setupMPinstance", "setupMPpage", "setupMPvariables", "setupTABLE", "setupTEXpage", "setupattachment", "setupbackend", "setupbar", "setupbleeding", "setupbookmark", "setupbtx", "setupbtxdataset", "setupbtxlist", "setupbtxregister", "setupbtxrendering", "setupbutton", "setupcharacterkerning", "setupcharacterspacing", "setupchemical", "setupchemicalframed", "setupcollector", "setupcolumnspan", "setupcombination", "setupcounter", "setupdataset", "setupdelimitedtext", "setupdescription", "setupdirections", "setupdocument", "setupeffect", "setupenumeration", "setupenv", "setupexport", "setupexternalfigure", "setupexternalsoundtracks", "setupfieldbody", "setupfieldcategory", "setupfieldcontentframed", "setupfieldlabelframed", "setupfieldtotalframed", "setupfiller", "setupfirstline", "setupfittingpage", "setupfloatcaption", "setupfontexpansion", "setupfontprotrusion", "setupfonts", "setupfontsolution", "setupforms", "setupformula", "setupformulaframed", "setupframedcontent", "setupframedtext", "setupglobalreferenceprefix", "setupheadalternative", "setuphelp", "setuphigh", "setuphighlight", "setuphyphenation", "setupindentedtext", "setupinitial", "setupinsertion", "setupitaliccorrection", "setupitemgroup", "setuplabel", "setuplayer", "setuplayeredtext", "setuplayouttext", "setuplinefiller", "setuplinefillers", "setuplinenote", "setuplinetable", "setuplistalternative", "setuplistextra", "setuplocalfloats", "setuplocalinterlinespace", "setuplow", "setuplowhigh", "setuplowmidhigh", "setupmarginblock", "setupmargindata", "setupmarginframed", "setupmarginrule", "setupmathalignment", "setupmathcases", "setupmathematics", "setupmathfence", "setupmathfraction", "setupmathframed", "setupmathmatrix", "setupmathornament", "setupmathradical", "setupmathstackers", "setupmathstyle", "setupmixedcolumns", "setupmodule", "setupnotation", "setupnotations", "setupnote", "setupnotes", "setupoffset", "setupoffsetbox", "setupoutputroutine", "setuppagechecker", "setuppagegrid", "setuppagegridarea", "setuppagegridareatext", "setuppagegridlines", "setuppagegridspan", "setuppagegridstart", "setuppageinjection", "setuppageinjectionalternative", "setuppageshift", "setuppagestate", "setuppairedbox", "setuppaper", "setupparagraph", "setupparagraphintro", "setupparallel", "setupperiods", "setupplacement", "setuppositionbar", "setupprocessor", "setupprofile", "setupquotation", "setuprealpagenumber", "setupreferenceformat", "setupreferenceprefix", "setupreferencestructureprefix", "setupregisters", "setuprenderingwindow", "setups", "setupscale", "setupscript", "setupscripts", "setupselector", "setupshift", "setupsidebar", "setupspellchecking", "setupstartstop", "setupstretched", "setupstruts", "setupstyle", "setupsubformula", "setuptabulation", "setuptagging", "setuptextbackground", "setuptextflow", "setuptooltip", "setupunit", "setupuserpagenumber", "setupversion", "setupviewerlayer", "setupvspacing", "setupwithargument", "setupwithargumentswapped", "setupxml", "setupxtable", "setuvalue", "setuxvalue", "setvalue", "setvariable", "setvariables", "setvboxregister", "setvisualizerfont", "setvtopregister", "setwidthof", "setxmeasure", "setxvalue", "setxvariable", "setxvariables", "sfrac", "shapedhbox", "showallmakeup", "showattributes", "showboxes", "showbtxdatasetauthors", "showbtxdatasetcompleteness", "showbtxdatasetfields", "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", "simplegroupedcommand", "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", "someheadnumber", "somekindoftab", "somelocalfloat", "somenamedheadnumber", "someplace", "sp", "spalte", "spanishNumerals", "spanishnumerals", "spatium", "speech", "spiegeln", "splitatasterisk", "splitatcolon", "splitatcolons", "splitatcomma", "splitdfrac", "splitfilename", "splitfrac", "splitoffbase", "splitofffull", "splitoffkind", "splitoffname", "splitoffpath", "splitoffroot", "splitofftokens", "splitofftype", "splitstring", "sprache", "spreadhbox", "sqrt", "stackrel", "startJScode", "startJSpreamble", "startMPclip", "startMPcode", "startMPdefinitions", "startMPdrawing", "startMPenvironment", "startMPextensions", "startMPinclusions", "startMPinitializations", "startMPpage", "startMPpositiongraphic", "startMPpositionmethod", "startMPrun", "startTABLE", "startTABLEbody", "startTABLEfoot", "startTABLEhead", "startTABLEnext", "startTC", "startTD", "startTDs", "startTEXpage", "startTH", "startTN", "startTR", "startTRs", "startTX", "startTY", "startabbildung", "startabsatz", "startallmodes", "startarrangedpages", "startaside", "startattachment", "startaufzaehlung", "startbar", "startbinom", "startbitmapimage", "startblockquote", "startbtxrenderingdefinitions", "startbuffer", "startbutton", "startcatcodetable", "startcharacteralign", "startcheckedfences", "startchemical", "startcollect", "startcollecting", "startcolorintent", "startcoloronly", "startcolorset", "startcolumns", "startcolumnspan", "startcombination", "startcomment", "startcontextcode", "startcontextdefinitioncode", "startctxfunction", "startctxfunctiondefinition", "startcurrentcolor", "startcurrentlistentrywrapper", "startdbinom", "startdelimited", "startdelimitedtext", "startdfrac", "startdisplaymath", "startdmath", "startdocument", "startdurchgestrichen", "startdurchstreichen", "starteffect", "startelement", "startembeddedxtable", "startendofline", "startexceptions", "startexpanded", "startexpandedcollect", "startextendedcatcodetable", "startexternalfigurecollection", "startfarbe", "startfigure", "startfitfieldframed", "startfittingpage", "startfloatcombination", "startfont", "startfontclass", "startfontsolution", "startformula", "startformulas", "startfrac", "startframedcontent", "startframedtext", "startgrafik", "startgridsnapping", "starthbox", "starthboxestohbox", "starthboxregister", "starthelptext", "starthiddenbar", "starthiding", "starthighlight", "starthilfetext", "starthintergrund", "starthyphenation", "startimath", "startindentation", "startindentedtext", "startinmframed", "startinteraction", "startinteraktionsmenue", "startinterface", "startintermezzo", "startintertext", "startitemgroup", "startkapitel", "startkleinerdurchschuss", "startknockout", "startkommentar", "startkomponente", "startkopf", "startlayout", "startlinecorrection", "startlinefiller", "startlinenumbering", "startlinetable", "startlinetablebody", "startlinetablecell", "startlinetablehead", "startlocalfootnotes", "startlocalheadsetup", "startlocallinecorrection", "startlocalnotes", "startlocalsetups", "startlua", "startluacode", "startluaparameterset", "startluasetups", "startmakeup", "startmarginallinie", "startmarginblock", "startmarkedcontent", "startmathmode", "startmathstyle", "startmatrices", "startmcframed", "startmdformula", "startmframed", "startmixedcolumns", "startmode", "startmodeset", "startmodule", "startmoduletestsection", "startmpformula", "startnamedsection", "startnamedsubformulas", "startnarrow", "startnarrower", "startnegative", "startnicelyfilledbox", "startnobar", "startnointerference", "startnotallmodes", "startnotext", "startnotmode", "startopposite", "startoutputstream", "startoverlay", "startoverprint", "startpagecomment", "startpagefigure", "startpagegrid", "startpagegridspan", "startpagelayout", "startpar", "startparagraph", "startparagraphs", "startparagraphscell", "startparbuilder", "startpath", "startplacepairedbox", "startplatziereformel", "startpos", "startpositioning", "startpositionoverlay", "startpositive", "startpostponing", "startprocessassignmentcommand", "startprocessassignmentlist", "startprocesscommacommand", "startprocesscommalist", "startprodukt", "startprojekt", "startprotect", "startprotectedcolors", "startpublikation", "startpunctuation", "startrandomized", "startrandomseed", "startrawsetups", "startreadingfile", "startreferenceprefix", "startregime", "startregister", "startreusableMPgraphic", "startscript", "startsdformula", "startsectionblock", "startsectionblockenvironment", "startsectionlevel", "startsetups", "startsfrac", "startshapebox", "startshift", "startsidebar", "startsimplecolumns", "startspecialitem", "startspeech", "startspformula", "startspread", "startstartstop", "startstaticMPfigure", "startstaticMPgraphic", "startstrictinspectnextcharacter", "startstructurepageregister", "startstrut", "startstyle", "startsubformulas", "startsubjectlevel", "startsubsentence", "startsubstack", "startsymbolset", "starttabelle", "starttable", "starttablehead", "starttables", "starttabletail", "starttabulate", "starttabulatehead", "starttabulatetail", "starttagged", "starttbinom", "starttexcode", "starttexdefinition", "starttext", "starttextbackground", "starttextbackgroundmanual", "starttextcolor", "starttextcolorintent", "starttextflow", "starttextlinie", "startthema", "starttitel", "starttokens", "starttransparent", "starttypescript", "starttypescriptcollection", "startueberstreichen", "startueberstrichen", "startumgebung", "startumrahmt", "startumrahmtertext", "startunderdash", "startunderdashes", "startunderdot", "startunderdots", "startunderrandom", "startunderrandoms", "startunderstrike", "startunderstrikes", "startunframed", "startuniqueMPgraphic", "startuniqueMPpagegraphic", "startunpacked", "startunterabsatz", "startunterstreichen", "startunterstrichen", "startunterthema", "startunterunterabsatz", "startunterunterthema", "startunterunterunterabsatz", "startunterunterunterthema", "startunterunterunterunterabsatz", "startunterunterunterunterthema", "startusableMPgraphic", "startuseMPgraphic", "startusemathstyleparameter", "startusingbtxspecification", "startvbox", "startvboxregister", "startvboxtohbox", "startvboxtohboxseparator", "startviewerlayer", "startvtop", "startvtopregister", "startxcell", "startxcellgroup", "startxfrac", "startxgroup", "startxmldisplayverbatim", "startxmlinlineverbatim", "startxmlraw", "startxmlsetups", "startxrow", "startxrowgroup", "startxtable", "startxtablebody", "startxtablefoot", "startxtablehead", "startxtablenext", "startxxfrac", "startzeile", "startzitat", "startzitieren", "startzu", "stelleabsaetzeein", "stelleabsatznummerierungein", "stelleabschnittsblockein", "stelleanordnenein", "stelleaufzaehlungenein", "stelleausschnittein", "stellebeschriftungein", "stellebildunterschriftein", "stellebindestrichein", "stelleblankoein", "stelleblockein", "stelledrehenein", "stelleduennerumrissein", "stelleeinziehenein", "stelleengerein", "stellefarbeein", "stellefarbenein", "stellefeldein", "stellefelderin", "stellefliesstextein", "stellefusszeileein", "stellefusszeilentextein", "stellegefuelltesrechteckein", "stellegefuelltezeileein", "stellegegenueberplatzierenein", "stellegleitobjektein", "stellehintergruendeein", "stellehintergrundein", "stelleinteraktionein", "stelleinteraktionsbalkenein", "stelleinteraktionsbildschirmein", "stelleinteraktionsmenueein", "stellekommentarein", "stellekopfzahlein", "stellekopfzeileein", "stellekopfzeilentextein", "stellelayoutein", "stellelinienbreiteein", "stellelisteein", "stellemarginallinieein", "stellenobenein", "stellepaletteein", "stellepapierformatein", "stelleplatziegeteiltegleitobjekt", "stellepositionierenein", "stellepostenein", "stelleprogrammein", "stellepufferein", "stellerechteckein", "stellereferenzierenein", "stelleregisterein", "stelleseitenkommentarein", "stelleseitennummerein", "stelleseitennummeriernungein", "stelleseitenuebergangein", "stellesortierenein", "stellespaltenein", "stellespatiumein", "stellespracheein", "stellesymbolsetein", "stellesynonymein", "stelletabellenein", "stelletabulatorein", "stelletextein", "stelletextobenein", "stelletexttexteein", "stelletextumrissein", "stelletextuntenein", "stelletipein", "stelletippenein", "stelletoleranzein", "stelleueberschriftein", "stelleueberschriftenein", "stelleumbruchein", "stelleumrahmtein", "stelleuntenein", "stelleunterseitennummerein", "stelleurlein", "stelleversalienein", "stellezeilenabstandein", "stellezeilenein", "stellezeilennumerierungein", "stellezitierenein", "stellezusammengestelltelisteein", "stellezwischenraumein", "stopJScode", "stopJSpreamble", "stopMPclip", "stopMPcode", "stopMPdefinitions", "stopMPdrawing", "stopMPenvironment", "stopMPextensions", "stopMPinclusions", "stopMPinitializations", "stopMPpage", "stopMPpositiongraphic", "stopMPpositionmethod", "stopMPrun", "stopTABLE", "stopTABLEbody", "stopTABLEfoot", "stopTABLEhead", "stopTABLEnext", "stopTC", "stopTD", "stopTDs", "stopTEXpage", "stopTH", "stopTN", "stopTR", "stopTRs", "stopTX", "stopTY", "stopabbildung", "stopabsatz", "stopallmodes", "stoparrangedpages", "stopaside", "stopattachment", "stopaufzaehlung", "stopbar", "stopbinom", "stopbitmapimage", "stopblockquote", "stopbtxrenderingdefinitions", "stopbuffer", "stopbutton", "stopcatcodetable", "stopcharacteralign", "stopcheckedfences", "stopchemical", "stopcollect", "stopcollecting", "stopcolorintent", "stopcoloronly", "stopcolorset", "stopcolumns", "stopcolumnspan", "stopcombination", "stopcomment", "stopcontextcode", "stopcontextdefinitioncode", "stopctxfunction", "stopctxfunctiondefinition", "stopcurrentcolor", "stopcurrentlistentrywrapper", "stopdbinom", "stopdelimited", "stopdelimitedtext", "stopdfrac", "stopdisplaymath", "stopdmath", "stopdocument", "stopdurchgestrichen", "stopdurchstreichen", "stopeffect", "stopelement", "stopembeddedxtable", "stopendofline", "stopexceptions", "stopexpanded", "stopexpandedcollect", "stopextendedcatcodetable", "stopexternalfigurecollection", "stopfarbe", "stopfigure", "stopfitfieldframed", "stopfittingpage", "stopfloatcombination", "stopfont", "stopfontclass", "stopfontsolution", "stopformula", "stopformulas", "stopfrac", "stopframedcontent", "stopframedtext", "stopgrafik", "stopgridsnapping", "stophbox", "stophboxestohbox", "stophboxregister", "stophelptext", "stophiddenbar", "stophiding", "stophighlight", "stophilfetext", "stophintergrund", "stophyphenation", "stopimath", "stopindentation", "stopindentedtext", "stopinmframed", "stopinteraction", "stopinteraktionsmenue", "stopinterface", "stopintermezzo", "stopintertext", "stopitemgroup", "stopkapitel", "stopkleinerdurchschuss", "stopknockout", "stopkommentar", "stopkomponente", "stopkopf", "stoplayout", "stoplinecorrection", "stoplinefiller", "stoplinenumbering", "stoplinetable", "stoplinetablebody", "stoplinetablecell", "stoplinetablehead", "stoplocalfootnotes", "stoplocalheadsetup", "stoplocallinecorrection", "stoplocalnotes", "stoplocalsetups", "stoplua", "stopluacode", "stopluaparameterset", "stopluasetups", "stopmakeup", "stopmarginallinie", "stopmarginblock", "stopmarkedcontent", "stopmathmode", "stopmathstyle", "stopmatrices", "stopmcframed", "stopmdformula", "stopmframed", "stopmixedcolumns", "stopmode", "stopmodeset", "stopmodule", "stopmoduletestsection", "stopmpformula", "stopnamedsection", "stopnamedsubformulas", "stopnarrow", "stopnarrower", "stopnegative", "stopnicelyfilledbox", "stopnobar", "stopnointerference", "stopnotallmodes", "stopnotext", "stopnotmode", "stopopposite", "stopoutputstream", "stopoverlay", "stopoverprint", "stoppagecomment", "stoppagefigure", "stoppagegrid", "stoppagegridspan", "stoppagelayout", "stoppar", "stopparagraph", "stopparagraphs", "stopparagraphscell", "stopparbuilder", "stoppath", "stopplacepairedbox", "stopplatziereformel", "stoppos", "stoppositioning", "stoppositionoverlay", "stoppositive", "stoppostponing", "stopprocessassignmentcommand", "stopprocessassignmentlist", "stopprocesscommacommand", "stopprocesscommalist", "stopprodukt", "stopprojekt", "stopprotect", "stopprotectedcolors", "stoppublikation", "stoppunctuation", "stoprandomized", "stoprandomseed", "stoprawsetups", "stopreadingfile", "stopreferenceprefix", "stopregime", "stopregister", "stopreusableMPgraphic", "stopscript", "stopsdformula", "stopsectionblock", "stopsectionblockenvironment", "stopsectionlevel", "stopsetups", "stopsfrac", "stopshapebox", "stopshift", "stopsidebar", "stopsimplecolumns", "stopspecialitem", "stopspeech", "stopspformula", "stopspread", "stopstartstop", "stopstaticMPfigure", "stopstaticMPgraphic", "stopstrictinspectnextcharacter", "stopstructurepageregister", "stopstrut", "stopstyle", "stopsubformulas", "stopsubjectlevel", "stopsubsentence", "stopsubstack", "stopsymbolset", "stoptabelle", "stoptable", "stoptablehead", "stoptables", "stoptabletail", "stoptabulate", "stoptabulatehead", "stoptabulatetail", "stoptagged", "stoptbinom", "stoptexcode", "stoptexdefinition", "stoptext", "stoptextbackground", "stoptextbackgroundmanual", "stoptextcolor", "stoptextcolorintent", "stoptextflow", "stoptextlinie", "stopthema", "stoptitel", "stoptokens", "stoptransparent", "stoptypescript", "stoptypescriptcollection", "stopueberstreichen", "stopueberstrichen", "stopumgebung", "stopumrahmt", "stopumrahmtertext", "stopunderdash", "stopunderdashes", "stopunderdot", "stopunderdots", "stopunderrandom", "stopunderrandoms", "stopunderstrike", "stopunderstrikes", "stopunframed", "stopuniqueMPgraphic", "stopuniqueMPpagegraphic", "stopunpacked", "stopunterabsatz", "stopunterstreichen", "stopunterstrichen", "stopunterthema", "stopunterunterabsatz", "stopunterunterthema", "stopunterunterunterabsatz", "stopunterunterunterthema", "stopunterunterunterunterabsatz", "stopunterunterunterunterthema", "stopusableMPgraphic", "stopuseMPgraphic", "stopusemathstyleparameter", "stopusingbtxspecification", "stopvbox", "stopvboxregister", "stopvboxtohbox", "stopvboxtohboxseparator", "stopviewerlayer", "stopvtop", "stopvtopregister", "stopxcell", "stopxcellgroup", "stopxfrac", "stopxgroup", "stopxmldisplayverbatim", "stopxmlinlineverbatim", "stopxmlraw", "stopxmlsetups", "stopxrow", "stopxrowgroup", "stopxtable", "stopxtablebody", "stopxtablefoot", "stopxtablehead", "stopxtablenext", "stopxxfrac", "stopzeile", "stopzitat", "stopzitieren", "stopzu", "strictdoifelsenextoptional", "strictdoifnextoptionalelse", "stripcharacter", "strippedcsname", "stripspaces", "structurelistuservariable", "structurenumber", "structuretitle", "structureuservariable", "structurevariable", "strut", "strutdp", "strutht", "struthtdp", "struttedbox", "strutwd", "style", "styleinstance", "subpagenumber", "subsentence", "substituteincommalist", "subtractfeature", "swapcounts", "swapdimens", "swapface", "swapmacros", "swaptypeface", "switchstyleonly", "switchtocolor", "switchtointerlinespace", "symbol", "symbolreference", "synchronizeblank", "synchronizeindenting", "synchronizemarking", "synchronizeoutputstreams", "synchronizestrut", "synchronizewhitespace", "systemlog", "systemlogfirst", "systemloglast", "systemsetups", "tLeftarrow", "tLeftrightarrow", "tRightarrow", "tabelle", "tabulateautoline", "tabulateautorule", "tabulateline", "tabulaterule", "taggedctxcommand", "taggedlabeltexts", "tbinom", "tbox", "teilegleitobjekt", "tequal", "testandsplitstring", "testcolumn", "testfeature", "testfeatureonce", "testpage", "testpageonly", "testpagesync", "testtokens", "tex", "texdefinition", "texsetup", "textcitation", "textcite", "textcontrolspace", "textflowcollector", "textlinie", "textmath", "textminus", "textormathchar", "textplus", "textreferenz", "textvisiblespace", "tfrac", "thainumerals", "thefirstcharacter", "thema", "thenormalizedbodyfontsize", "theremainingcharacters", "thickspace", "thinspace", "thirdoffivearguments", "thirdoffourarguments", "thirdofsixarguments", "thirdofthreearguments", "thirdofthreeunexpanded", "thookleftarrow", "thookrightarrow", "threedigitrounding", "tibetannumerals", "tief", "tightlayer", "tiho", "tinyfont", "tip", "tippedatei", "tippen", "tippepuffer", "titel", "tlap", "tleftarrow", "tleftharpoondown", "tleftharpoonup", "tleftrightarrow", "tleftrightharpoons", "tmapsto", "tochar", "tolinenote", "topbox", "topleftbox", "toplinebox", "toprightbox", "topskippedbox", "tracecatcodetables", "tracedfontname", "traceoutputroutines", "tracepositions", "transparencycomponents", "transparent", "trel", "trightarrow", "trightharpoondown", "trightharpoonup", "trightleftharpoons", "trightoverleftarrow", "triplebond", "truefilename", "truefontname", "ttriplerel", "ttwoheadleftarrow", "ttwoheadrightarrow", "twodigitrounding", "tx", "txx", "typedefinedbuffer", "typeface", "typescriptone", "typescriptprefix", "typescriptthree", "typescripttwo", "typesetbuffer", "typesetfile", "uconvertnumber", "ueber", "uebersetzten", "uedcatcodecommand", "umgebung", "umrahmt", "umrahmtertext", "unbekant", "undefinevalue", "undepthed", "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", "unprotected", "unregisterhyphenationpattern", "unspaceafter", "unspaceargument", "unspaced", "unspacestring", "unterabsatz", "unterthema", "unterunterabsatz", "unterunterthema", "unterunterunterabsatz", "unterunterunterthema", "unterunterunterunterabsatz", "unterunterunterunterthema", "untexargument", "untexcommand", "uppercased", "uppercasestring", "upperleftdoubleninequote", "upperleftdoublesixquote", "upperleftsingleninequote", "upperleftsinglesixquote", "upperrightdoubleninequote", "upperrightdoublesixquote", "upperrightsingleninequote", "upperrightsinglesixquote", "url", "useMPenvironmentbuffer", "useMPgraphic", "useMPlibrary", "useMPrun", "useMPvariables", "useblankparameter", "usebodyfont", "usebodyfontparameter", "usebtxdataset", "usebtxdefinitions", "usecolors", "usecomponent", "usedummycolorparameter", "usedummystyleandcolor", "usedummystyleparameter", "useenvironment", "useexternalrendering", "usefigurebase", "usefile", "usegridparameter", "useindentingparameter", "useindentnextparameter", "useinterlinespaceparameter", "uselanguageparameter", "useluamodule", "usemathstyleparameter", "useproduct", "useprofileparameter", "useproject", "usereferenceparameter", "userpagenumber", "usesetupsparameter", "usestaticMPfigure", "usesubpath", "usetexmodule", "usetypescript", "usetypescriptfile", "usezipfile", "utfchar", "utflower", "utfupper", "utilityregisterlength", "vboxreference", "verbatim", "verbatimstring", "verbergebloecke", "verbergen", "verbosenumber", "vergleichefarbengruppe", "vergleichepalette", "version", "verticalgrowingbar", "verticalpositionbar", "verwendeJSscript", "verwendeURL", "verwendebloecke", "verwendeexteresdokument", "verwendeexterneabbildung", "verwendeexternestonstueck", "verwendemodul", "verwendesymbole", "verwendeurl", "vglue", "viewerlayer", "vl", "volleswort", "von", "vphantom", "vpos", "vsmash", "vsmashbox", "vsmashed", "vspace", "vspacing", "waehlebloeckeaus", "wdofstring", "wechselezumfliesstext", "widthofstring", "widthspanningtext", "withoutpt", "wochentag", "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", "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", "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", "Lua", "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", "MPwhd", "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", "TEXpage", "TaBlE", "TeX", "TheNormalizedFontSize", "TransparencyHack", "VerboseNumber", "WEEKDAY", "WORD", "WORDS", "WidthSpanningText", "Word", "Words", "XETEX", "XeTeX", "abjadnaivenumerals", "abjadnodotnumerals", "abjadnumerals", "about", "activatespacehandler", "adaptcollector", "adaptfontfeature", "adaptlayout", "adaptpapersize", "addfeature", "addtoJSpreamble", "addtocommalist", "addvalue", "aftersplitstring", "aftertestandsplitstring", "alignmentcharacter", "allinputpaths", "alphabeticnumerals", "alwayscitation", "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", "aside", "assignalfadimension", "assigndimen", "assigndimension", "assignifempty", "assigntranslation", "assignvalue", "assignwidth", "assumelongusagecs", "astype", "at", "atpage", "attachment", "autocap", "autodirhbox", "autodirvbox", "autodirvtop", "autoinsertnextspace", "automathematics", "autosetups", "availablehsize", "averagecharwidth", "background", "backgroundimage", "backgroundimagefill", "backgroundline", "basegrid", "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", "blockligatures", "blockquote", "bodyfontenvironmentlist", "bodyfontsize", "bold", "boldface", "bolditalic", "boldslanted", "bookmark", "booleanmodevalue", "bottombox", "bottomleftbox", "bottomrightbox", "boxcursor", "boxmarker", "boxofsize", "boxreference", "bpos", "bthiddencitation", "btxabbreviatedjournal", "btxaddjournal", "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", "btxlistcitation", "btxloadjournalist", "btxoneorrange", "btxremapauthor", "btxsavejournalist", "btxsetup", "btxsingularorplural", "btxsingularplural", "btxtextcitation", "button", "calligraphic", "camel", "cap", "catcodetablename", "cbox", "centerbox", "centeredbox", "centerednextbox", "cfrac", "chapter", "character", "characters", "chardescription", "charwidthlanguage", "checkcharacteralign", "checkedchar", "checkedfiller", "checkedstrippedcsname", "checkinjector", "checknextindentation", "checknextinjector", "checkpage", "checkparameters", "checkpreviousinjector", "checksoundtrack", "checktwopassdata", "checkvariables", "chem", "chemical", "chemicalbottext", "chemicalmidtext", "chemicalsymbol", "chemicaltext", "chemicaltoptext", "chineseallnumerals", "chinesecapnumerals", "chinesenumerals", "citation", "cite", "clap", "classfont", "cldcommand", "cldcontext", "cldloadfile", "cldprocessfile", "cleftarrow", "clip", "clonefield", "collect", "collectedtext", "collectexpanded", "color", "colorbar", "colorcomponents", "colored", "coloronly", "colorvalue", "column", "columnbreak", "combinepages", "commalistelement", "commalistsentence", "commalistsize", "comment", "comparecolorgroup", "comparedimension", "comparedimensioneps", "comparepalet", "completebtxrendering", "completelist", "completelistofpublications", "completelistofsorts", "completelistofsynonyms", "completepagenumber", "completeregister", "complexorsimple", "complexorsimpleempty", "component", "composedcollector", "composedlayer", "compresult", "constantdimen", "constantdimenargument", "constantemptyargument", "constantnumber", "constantnumberargument", "contentreference", "continuednumber", "continueifinputfile", "convertargument", "convertcommand", "convertedcounter", "converteddimen", "convertedsubcounter", "convertmonth", "convertnumber", "convertvalue", "convertvboxtohbox", "copyfield", "copypages", "copyparameters", "copyposition", "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", "datasetvariable", "date", "dayoftheweek", "dayspermonth", "dbinom", "decrement", "decrementcounter", "decrementedcounter", "decrementpagenumber", "decrementsubpagenumber", "decrementvalue", "defaultinterface", "defaultobjectpage", "defaultobjectreference", "defcatcodecommand", "defconvertedargument", "defconvertedcommand", "defconvertedvalue", "define", "defineMPinstance", "defineTABLEsetup", "defineactivecharacter", "definealternativestyle", "defineanchor", "defineattachment", "defineattribute", "definebackground", "definebar", "defineblock", "definebodyfont", "definebodyfontenvironment", "definebodyfontswitch", "definebreakpoint", "definebreakpoints", "definebtx", "definebtxdataset", "definebtxregister", "definebtxrendering", "definebuffer", "definebutton", "definecapitals", "definecharacterkerning", "definecharacterspacing", "definechemical", "definechemicals", "definechemicalsymbol", "definecollector", "definecolor", "definecolorgroup", "definecolumnbreak", "definecombination", "definecombinedlist", "definecomment", "definecomplexorsimple", "definecomplexorsimpleempty", "defineconversion", "defineconversionset", "definecounter", "definedataset", "definedelimitedtext", "definedescription", "definedfont", "defineeffect", "defineenumeration", "defineexpandable", "defineexternalfigure", "definefallbackfamily", "definefield", "definefieldbody", "definefieldbodyset", "definefieldcategory", "definefieldstack", "definefiguresymbol", "definefileconstant", "definefilefallback", "definefilesynonym", "definefiller", "definefirstline", "definefittingpage", "definefloat", "definefont", "definefontalternative", "definefontfallback", "definefontfamily", "definefontfamilypreset", "definefontfeature", "definefontfile", "definefontsize", "definefontsolution", "definefontstyle", "definefontsynonym", "defineformula", "defineformulaalternative", "defineformulaframed", "defineframed", "defineframedcontent", "defineframedtext", "definefrozenfont", "defineglobalcolor", "definegraphictypesynonym", "definegridsnapping", "definehbox", "definehead", "defineheadalternative", "definehelp", "definehigh", "definehighlight", "definehspace", "definehypenationfeatures", "defineindentedtext", "defineindenting", "defineinitial", "defineinsertion", "defineinteraction", "defineinteractionbar", "defineinteractionmenu", "defineinterfaceconstant", "defineinterfaceelement", "defineinterfacevariable", "defineinterlinespace", "defineintermediatecolor", "defineitemgroup", "defineitems", "definelabel", "definelabelclass", "definelayer", "definelayerpreset", "definelayout", "definelinefiller", "definelinenote", "definelinenumbering", "definelines", "definelist", "definelistalternative", "definelistextra", "definelow", "definelowhigh", "definelowmidhigh", "definemakeup", "definemarginblock", "definemargindata", "definemarker", "definemarking", "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", "definenamespace", "definenarrower", "definenote", "defineornament", "defineoutputroutine", "defineoutputroutinecommand", "defineoverlay", "definepage", "definepagebreak", "definepagechecker", "definepagegrid", "definepagegridarea", "definepagegridspan", "definepageinjection", "definepageinjectionalternative", "definepageshift", "definepagestate", "definepairedbox", "definepalet", "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", "dimensiontocount", "directcolor", "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", "dorepeatwithcommand", "doreplacefeature", "doresetandafffeature", "doresetattribute", "dorotatebox", "dosetattribute", "dosetleftskipadaption", "dosetrightskipadaption", "dosetupcheckedinterlinespace", "doseventupleargument", "doseventupleempty", "dosingleargument", "dosingleempty", "dosinglegroupempty", "dosixtupleargument", "dosixtupleempty", "dostepwiserecurse", "dosubtractfeature", "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", "enskip", "enspace", "env", "environment", "envvar", "eoverbarfill", "eoverbracefill", "eoverbracketfill", "eoverparentfill", "epos", "equaldigits", "erightarrowfill", "erightharpoondownfill", "erightharpoonupfill", "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", "fence", "fenced", "fetchallmarkings", "fetchallmarks", "fetchmark", "fetchmarking", "fetchonemark", "fetchonemarking", "fetchruntinecommand", "fetchtwomarkings", "fetchtwomarks", "field", "fieldbody", "fieldstack", "fifthoffivearguments", "fifthofsixarguments", "figure", "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", "flushboxregister", "flushcollector", "flushlayer", "flushlocalfloats", "flushnextbox", "flushnotes", "flushoutputstream", "flushshapebox", "flushtextflow", "flushtokens", "flushtoks", "fontalternative", "fontbody", "fontchar", "fontcharbyindex", "fontclass", "fontclassname", "fontface", "fontfeaturelist", "fontsize", "fontstyle", "footnotetext", "forcecharacterstripping", "forcelocalfloats", "forgeteverypar", "forgetparameters", "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", "getprivatechar", "getprivateslot", "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", "goto", "gotobox", "gotopage", "grabbufferdata", "grabbufferdatadirect", "grabuntil", "graphic", "graycolor", "grayvalue", "greedysplitstring", "greeknumerals", "grid", "groupedcommand", "gsetboxllx", "gsetboxlly", "gujaratinumerals", "gurmurkhinumerals", "hairline", "hairspace", "halfwaybox", "handletokens", "handwritten", "hash", "hboxofvbox", "hboxreference", "hdofstring", "headhbox", "headnumber", "headnumbercontent", "headnumberdistance", "headnumberwidth", "headreferenceattributes", "headsetupspacing", "headtextcontent", "headtextdistance", "headtextwidth", "headvbox", "headwidth", "heightanddepthofstring", "heightofstring", "heightspanningtext", "helptext", "hglue", "hiddenbar", "hiddencitation", "hiddencite", "hideblocks", "hiding", "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", "incrementcounter", "incrementedcounter", "incrementpagenumber", "incrementsubpagenumber", "incrementvalue", "indentation", "infofont", "infofontbold", "inframed", "infull", "inheritparameter", "inhibitblank", "initializeboxstack", "inline", "inlinebuffer", "inlinedbox", "inlinemath", "inlinemathematics", "inlinemessage", "inlineordisplaymath", "inlinerange", "inmaframed", "innerflushshapebox", "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", "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", "intermezzo", "intertext", "invokepageheandler", "istltdir", "istrtdir", "italic", "italicbold", "italiccorrection", "item", "itemize", "items", "itemtag", "jobfilename", "jobfilesuffix", "kap", "keepblocks", "keeplinestogether", "keepunwantedspaces", "kerncharacters", "koreancirclenumerals", "koreannumerals", "koreannumeralsc", "koreannumeralsp", "koreanparentnumerals", "language", "languageCharacters", "languagecharacters", "languagecharwidth", "lastcounter", "lastcountervalue", "lastdigit", "lastlinewidth", "lastnaturalboxdp", "lastnaturalboxht", "lastnaturalboxwd", "lastpredefinedsymbol", "lastrealpage", "lastrealpagenumber", "lastsubcountervalue", "lastsubpage", "lastsubpagenumber", "lasttwodigits", "lastuserpage", "lastuserpagenumber", "lateluacode", "layeredtext", "layerheight", "layerwidth", "lazysavetaggedtwopassdata", "lazysavetwopassdata", "lbox", "left", "leftbottombox", "leftbox", "lefthbox", "leftorrighthbox", "leftorrightvbox", "leftorrightvtop", "leftskipadaption", "leftsubguillemot", "lefttopbox", "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", "limtatefirstline", "linespanningtext", "linethickness", "listcitation", "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", "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", "margindata", "markcontent", "marking", "markinjector", "mat", "math", "mathbf", "mathbi", "mathblackboard", "mathbs", "mathcommand", "mathdefault", "mathematics", "mathfraktur", "mathfunction", "mathit", "mathitalic", "mathop", "mathrm", "mathscript", "mathsl", "mathss", "mathtext", "mathtextbf", "mathtextbi", "mathtextbs", "mathtextit", "mathtextsl", "mathtexttf", "mathtf", "mathtriplet", "mathtt", "mathupright", "mathword", "mathwordbf", "mathwordbi", "mathwordbs", "mathwordit", "mathwordsl", "mathwordtf", "mbox", "mcframed", "md", "measure", "measured", "medskip", "medspace", "menubutton", "mequal", "message", "metaTeX", "mfence", "mfunction", "mfunctionlabeltext", "mhbox", "mhookleftarrow", "mhookrightarrow", "middle", "middlebox", "midhbox", "minimalhbox", "mirror", "mixedcaps", "mkvibuffer", "mleftarrow", "mleftharpoondown", "mleftharpoonup", "mleftrightarrow", "mleftrightharpoons", "mmapsto", "moduleparameter", "molecule", "mono", "monobold", "mononormal", "month", "monthlong", "monthshort", "mp", "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", "nobar", "nocap", "nocitation", "nocite", "nodetostring", "noffigurepages", "noflines", "noflocalfloats", "noheaderandfooterlines", "noindentation", "noitem", "nonfrenchspacing", "nonmathematics", "normal", "normalboldface", "normalframedwithsettings", "normalizebodyfontsize", "normalizedfontsize", "normalizefontdepth", "normalizefontheight", "normalizefontline", "normalizefontwidth", "normalizetextdepth", "normalizetextheight", "normalizetextline", "normalizetextwidth", "normaltypeface", "nospace", "note", "notesymbol", "notopandbottomlines", "ntimes", "numberofpoints", "numbers", "obeydepth", "objectdepth", "objectheight", "objectmargin", "objectwidth", "obox", "offset", "offsetbox", "onedigitrounding", "ordinaldaynumber", "ordinalstr", "ornamenttext", "outputfilename", "outputstreambox", "outputstreamcopy", "outputstreamunvbox", "outputstreamunvcopy", "over", "overbar", "overbars", "overbartext", "overbarunderbar", "overbrace", "overbracetext", "overbraceunderbrace", "overbracket", "overbrackettext", "overbracketunderbracket", "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", "pagenumber", "pagereference", "pagestaterealpage", "paletsize", "pdfTeX", "pdfactualtext", "pdfbackendactualtext", "pdfbackendcurrentresources", "pdfbackendsetcatalog", "pdfbackendsetcolorspace", "pdfbackendsetextgstate", "pdfbackendsetinfo", "pdfbackendsetname", "pdfbackendsetpageattribute", "pdfbackendsetpageresource", "pdfbackendsetpagesattribute", "pdfbackendsetpattern", "pdfbackendsetshade", "pdfcolor", "pdfeTeX", "percent", "percentdimen", "periods", "permitcaretescape", "permitcircumflexescape", "permitspacesbetweengroups", "persiandecimals", "persiannumerals", "phantom", "phantombox", "pickupgroupedcommand", "placeattachments", "placebookmarks", "placebtxrendering", "placecitation", "placecombinedlist", "placecomments", "placecurrentformulanumber", "placedbox", "placefloat", "placefloatwithsetups", "placefootnotes", "placeformula", "placeframed", "placeheadnumber", "placeheadtext", "placehelp", "placeinitial", "placelayer", "placelayeredtext", "placelist", "placelistofpublications", "placelistofsorts", "placelistofsynonyms", "placelocalfootnotes", "placelocalnotes", "placement", "placenamedfloat", "placenamedformula", "placenotes", "placeongrid", "placeontopofeachother", "placepagenumber", "placepairedbox", "placeparallel", "placerawlist", "placeregister", "placerenderingwindow", "placesidebyside", "placesubformula", "popattribute", "popmacro", "popmode", "popsystemmode", "position", "positionoverlay", "positionregionoverlay", "postponenotes", "predefinedfont", "predefinefont", "predefinesymbol", "prefixedpagenumber", "prependetoks", "prependgvalue", "prependtocommalist", "prependtoks", "prependtoksonce", "prependvalue", "presetdocument", "presetfieldsymbols", "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", "profiledbox", "profilegivenbox", "program", "project", "pseudoMixedCapped", "pseudoSmallCapped", "pseudoSmallcapped", "pseudosmallcapped", "purenumber", "pushattribute", "pushbutton", "pushmacro", "pushmode", "pushoutputstream", "pushsystemmode", "qquad", "quad", "quads", "quitcommalist", "quitprevcommalist", "quittypescriptscanning", "quotation", "quote", "raisebox", "randomizetext", "randomnumber", "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", "replaceincommalist", "replaceword", "rescan", "rescanwithsetup", "resetMPdrawing", "resetMPenvironment", "resetMPinstance", "resetallattributes", "resetandaddfeature", "resetbar", "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", "resolvedglyphdirect", "resolvedglyphstyled", "restartcounter", "restorebox", "restorecatcodes", "restorecounter", "restorecurrentattributes", "restoreendofline", "restoreglobalbodyfont", "reusableMPgraphic", "reuseMPgraphic", "reuserandomseed", "revivefeature", "rfence", "rhbox", "right", "rightbottombox", "rightbox", "righthbox", "rightorleftpageaction", "rightskipadaption", "rightsubguillemot", "righttolefthbox", "righttoleftvbox", "righttoleftvtop", "righttopbox", "rlap", "robustaddtocommalist", "robustdoifelseinset", "robustdoifinsetelse", "robustpretocommalist", "rollbutton", "roman", "romannumerals", "rotate", "rtop", "ruledhbox", "ruledhpack", "ruledmbox", "ruledtopv", "ruledtpack", "ruledvbox", "ruledvpack", "ruledvtop", "runMPbuffer", "runninghbox", "safechar", "sans", "sansbold", "sansnormal", "sansserif", "savebox", "savebtxdataset", "savebuffer", "savecounter", "savecurrentattributes", "savenormalmeaning", "savetaggedtwopassdata", "savetwopassdata", "sbox", "scale", "screen", "sd", "secondoffivearguments", "secondoffourarguments", "secondofsixarguments", "secondofthreearguments", "secondofthreeunexpanded", "secondoftwoarguments", "secondoftwounexpanded", "section", "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", "setfractions", "setgmeasure", "setgvalue", "setgvariable", "setgvariables", "sethboxregister", "sethyphenatedurlafter", "sethyphenatedurlbefore", "sethyphenatedurlnormal", "sethyphenationfeatures", "setinitial", "setinjector", "setinteraction", "setinterfacecommand", "setinterfaceconstant", "setinterfaceelements", "setinterfacemessage", "setinterfacevariable", "setinternalrendering", "setitaliccorrection", "setlayer", "setlayerframed", "setlayertext", "setlinefiller", "setlocalhsize", "setmainbodyfont", "setmainparbuilder", "setmarker", "setmarking", "setmathstyle", "setmeasure", "setmessagetext", "setmode", "setnostrut", "setnote", "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", "setupMPgraphics", "setupMPinstance", "setupMPpage", "setupMPvariables", "setupTABLE", "setupTEXpage", "setuparranging", "setupattachment", "setupbackend", "setupbackground", "setupbackgrounds", "setupbar", "setupblackrules", "setupblank", "setupbleeding", "setupblock", "setupbodyfont", "setupbookmark", "setupbottom", "setupbottomtexts", "setupbtx", "setupbtxdataset", "setupbtxlist", "setupbtxregister", "setupbtxrendering", "setupbuffer", "setupbutton", "setupcapitals", "setupcaption", "setupcharacterkerning", "setupcharacterspacing", "setupchemical", "setupchemicalframed", "setupclipping", "setupcollector", "setupcolor", "setupcolors", "setupcolumns", "setupcolumnspan", "setupcombination", "setupcombinedlist", "setupcomment", "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", "setupfonts", "setupfontsolution", "setupfooter", "setupfootertexts", "setupforms", "setupformula", "setupformulaframed", "setupframed", "setupframedcontent", "setupframedtext", "setupglobalreferenceprefix", "setuphead", "setupheadalternative", "setupheader", "setupheadertexts", "setupheadnumber", "setupheads", "setuphelp", "setuphigh", "setuphighlight", "setuphyphenation", "setuphyphenmark", "setupindentedtext", "setupindenting", "setupinitial", "setupinsertion", "setupinteraction", "setupinteractionbar", "setupinteractionmenu", "setupinteractionscreen", "setupinterlinespace", "setupitaliccorrection", "setupitemgroup", "setupitemizations", "setupitems", "setuplabel", "setuplanguage", "setuplayer", "setuplayeredtext", "setuplayout", "setuplayouttext", "setuplinefiller", "setuplinefillers", "setuplinenote", "setuplinenumbering", "setuplines", "setuplinetable", "setuplinewidth", "setuplist", "setuplistalternative", "setuplistextra", "setuplocalfloats", "setuplocalinterlinespace", "setuplow", "setuplowhigh", "setuplowmidhigh", "setupmakeup", "setupmarginblock", "setupmargindata", "setupmarginframed", "setupmarginrule", "setupmarginrules", "setupmarking", "setupmathalignment", "setupmathcases", "setupmathematics", "setupmathfence", "setupmathfraction", "setupmathframed", "setupmathmatrix", "setupmathornament", "setupmathradical", "setupmathstackers", "setupmathstyle", "setupmixedcolumns", "setupmodule", "setupnarrower", "setupnotation", "setupnotations", "setupnote", "setupnotes", "setupoffset", "setupoffsetbox", "setupoppositeplacing", "setupoutputroutine", "setuppagechecker", "setuppagecomment", "setuppagegrid", "setuppagegridarea", "setuppagegridareatext", "setuppagegridlines", "setuppagegridspan", "setuppagegridstart", "setuppageinjection", "setuppageinjectionalternative", "setuppagenumber", "setuppagenumbering", "setuppageshift", "setuppagestate", "setuppagetransitions", "setuppairedbox", "setuppalet", "setuppaper", "setuppapersize", "setupparagraph", "setupparagraphintro", "setupparagraphnumbering", "setupparagraphs", "setupparallel", "setupperiods", "setupplacement", "setuppositionbar", "setuppositioning", "setupprocessor", "setupprofile", "setupprograms", "setupquotation", "setupquote", "setuprealpagenumber", "setupreferenceformat", "setupreferenceprefix", "setupreferencestructureprefix", "setupreferencing", "setupregister", "setupregisters", "setuprenderingwindow", "setuprotate", "setups", "setupscale", "setupscript", "setupscripts", "setupsectionblock", "setupselector", "setupshift", "setupsidebar", "setupsorting", "setupspacing", "setupspellchecking", "setupstartstop", "setupstretched", "setupstruts", "setupstyle", "setupsubformula", "setupsubpagenumber", "setupsymbolset", "setupsynonyms", "setuptables", "setuptabulate", "setuptabulation", "setuptagging", "setuptext", "setuptextbackground", "setuptextflow", "setuptextrules", "setuptexttexts", "setupthinrules", "setuptolerance", "setuptooltip", "setuptop", "setuptoptexts", "setuptype", "setuptyping", "setupunit", "setupurl", "setupuserpagenumber", "setupversion", "setupviewerlayer", "setupvspacing", "setupwhitespace", "setupwithargument", "setupwithargumentswapped", "setupxml", "setupxtable", "setuvalue", "setuxvalue", "setvalue", "setvariable", "setvariables", "setvboxregister", "setvisualizerfont", "setvtopregister", "setwidthof", "setxmeasure", "setxvalue", "setxvariable", "setxvariables", "sfrac", "shapedhbox", "showallmakeup", "showattributes", "showbodyfont", "showbodyfontenvironment", "showboxes", "showbtxdatasetauthors", "showbtxdatasetcompleteness", "showbtxdatasetfields", "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", "simplegroupedcommand", "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", "someheadnumber", "somekindoftab", "someline", "somelocalfloat", "somenamedheadnumber", "someplace", "somewhere", "sp", "space", "spanishNumerals", "spanishnumerals", "speech", "splitatasterisk", "splitatcolon", "splitatcolons", "splitatcomma", "splitdfrac", "splitfilename", "splitfloat", "splitfrac", "splitoffbase", "splitofffull", "splitoffkind", "splitoffname", "splitoffpath", "splitoffroot", "splitofftokens", "splitofftype", "splitstring", "spreadhbox", "sqrt", "stackrel", "startJScode", "startJSpreamble", "startMPclip", "startMPcode", "startMPdefinitions", "startMPdrawing", "startMPenvironment", "startMPextensions", "startMPinclusions", "startMPinitializations", "startMPpage", "startMPpositiongraphic", "startMPpositionmethod", "startMPrun", "startTABLE", "startTABLEbody", "startTABLEfoot", "startTABLEhead", "startTABLEnext", "startTC", "startTD", "startTDs", "startTEXpage", "startTH", "startTN", "startTR", "startTRs", "startTX", "startTY", "startallmodes", "startarrangedpages", "startaside", "startattachment", "startbackground", "startbar", "startbinom", "startbitmapimage", "startblockquote", "startbtxrenderingdefinitions", "startbuffer", "startbutton", "startcatcodetable", "startchapter", "startcharacteralign", "startcheckedfences", "startchemical", "startcollect", "startcollecting", "startcolor", "startcolorintent", "startcoloronly", "startcolorset", "startcolumns", "startcolumnspan", "startcombination", "startcomment", "startcomponent", "startcontextcode", "startcontextdefinitioncode", "startctxfunction", "startctxfunctiondefinition", "startcurrentcolor", "startcurrentlistentrywrapper", "startdbinom", "startdelimited", "startdelimitedtext", "startdfrac", "startdisplaymath", "startdmath", "startdocument", "starteffect", "startelement", "startembeddedxtable", "startendofline", "startenvironment", "startexceptions", "startexpanded", "startexpandedcollect", "startextendedcatcodetable", "startexternalfigurecollection", "startfigure", "startfitfieldframed", "startfittingpage", "startfloatcombination", "startfont", "startfontclass", "startfontsolution", "startformula", "startformulas", "startfrac", "startframed", "startframedcontent", "startframedtext", "startgoto", "startgraphic", "startgridsnapping", "starthbox", "starthboxestohbox", "starthboxregister", "starthead", "starthelptext", "starthiddenbar", "starthiding", "starthighlight", "starthyphenation", "startimath", "startindentation", "startindentedtext", "startinmframed", "startinteraction", "startinteractionmenu", "startinterface", "startintermezzo", "startintertext", "startitem", "startitemgroup", "startitemize", "startknockout", "startlayout", "startline", "startlinecorrection", "startlinefiller", "startlinenumbering", "startlinetable", "startlinetablebody", "startlinetablecell", "startlinetablehead", "startlocalfootnotes", "startlocalheadsetup", "startlocallinecorrection", "startlocalnotes", "startlocalsetups", "startlua", "startluacode", "startluaparameterset", "startluasetups", "startmakeup", "startmarginblock", "startmarginrule", "startmarkedcontent", "startmathmode", "startmathstyle", "startmatrices", "startmcframed", "startmdformula", "startmframed", "startmixedcolumns", "startmode", "startmodeset", "startmodule", "startmoduletestsection", "startmpformula", "startnamedsection", "startnamedsubformulas", "startnarrow", "startnarrower", "startnegative", "startnicelyfilledbox", "startnobar", "startnointerference", "startnotallmodes", "startnotext", "startnotmode", "startopposite", "startoutputstream", "startoverbar", "startoverbars", "startoverlay", "startoverprint", "startoverstrike", "startoverstrikes", "startpacked", "startpagecomment", "startpagefigure", "startpagegrid", "startpagegridspan", "startpagelayout", "startpar", "startparagraph", "startparagraphs", "startparagraphscell", "startparbuilder", "startpath", "startplaceformula", "startplacepairedbox", "startpositioning", "startpositionoverlay", "startpositive", "startpostponing", "startprocessassignmentcommand", "startprocessassignmentlist", "startprocesscommacommand", "startprocesscommalist", "startproduct", "startproject", "startprotect", "startprotectedcolors", "startpublication", "startpunctuation", "startquotation", "startquote", "startrandomized", "startrandomseed", "startrawsetups", "startreadingfile", "startreferenceprefix", "startregime", "startregister", "startreusableMPgraphic", "startscript", "startsdformula", "startsection", "startsectionblock", "startsectionblockenvironment", "startsectionlevel", "startsetups", "startsfrac", "startshapebox", "startshift", "startsidebar", "startsimplecolumns", "startspecialitem", "startspeech", "startspformula", "startspread", "startstartstop", "startstaticMPfigure", "startstaticMPgraphic", "startstrictinspectnextcharacter", "startstructurepageregister", "startstrut", "startstyle", "startsubformulas", "startsubject", "startsubjectlevel", "startsubsection", "startsubsentence", "startsubstack", "startsubsubject", "startsubsubsection", "startsubsubsubject", "startsubsubsubsection", "startsubsubsubsubject", "startsubsubsubsubsection", "startsubsubsubsubsubject", "startsymbolset", "starttable", "starttablehead", "starttables", "starttabletail", "starttabulate", "starttabulatehead", "starttabulatetail", "starttagged", "starttbinom", "starttexcode", "starttexdefinition", "starttext", "starttextbackground", "starttextbackgroundmanual", "starttextcolor", "starttextcolorintent", "starttextflow", "starttextrule", "starttitle", "starttokens", "starttransparent", "starttypescript", "starttypescriptcollection", "startunderbar", "startunderbars", "startunderdash", "startunderdashes", "startunderdot", "startunderdots", "startunderrandom", "startunderrandoms", "startunderstrike", "startunderstrikes", "startunframed", "startuniqueMPgraphic", "startuniqueMPpagegraphic", "startunpacked", "startusableMPgraphic", "startuseMPgraphic", "startusemathstyleparameter", "startusingbtxspecification", "startvbox", "startvboxregister", "startvboxtohbox", "startvboxtohboxseparator", "startviewerlayer", "startvtop", "startvtopregister", "startxcell", "startxcellgroup", "startxfrac", "startxgroup", "startxmldisplayverbatim", "startxmlinlineverbatim", "startxmlraw", "startxmlsetups", "startxrow", "startxrowgroup", "startxtable", "startxtablebody", "startxtablefoot", "startxtablehead", "startxtablenext", "startxxfrac", "stopJScode", "stopJSpreamble", "stopMPclip", "stopMPcode", "stopMPdefinitions", "stopMPdrawing", "stopMPenvironment", "stopMPextensions", "stopMPinclusions", "stopMPinitializations", "stopMPpage", "stopMPpositiongraphic", "stopMPpositionmethod", "stopMPrun", "stopTABLE", "stopTABLEbody", "stopTABLEfoot", "stopTABLEhead", "stopTABLEnext", "stopTC", "stopTD", "stopTDs", "stopTEXpage", "stopTH", "stopTN", "stopTR", "stopTRs", "stopTX", "stopTY", "stopallmodes", "stoparrangedpages", "stopaside", "stopattachment", "stopbackground", "stopbar", "stopbinom", "stopbitmapimage", "stopblockquote", "stopbtxrenderingdefinitions", "stopbuffer", "stopbutton", "stopcatcodetable", "stopchapter", "stopcharacteralign", "stopcheckedfences", "stopchemical", "stopcollect", "stopcollecting", "stopcolor", "stopcolorintent", "stopcoloronly", "stopcolorset", "stopcolumns", "stopcolumnspan", "stopcombination", "stopcomment", "stopcomponent", "stopcontextcode", "stopcontextdefinitioncode", "stopctxfunction", "stopctxfunctiondefinition", "stopcurrentcolor", "stopcurrentlistentrywrapper", "stopdbinom", "stopdelimited", "stopdelimitedtext", "stopdfrac", "stopdisplaymath", "stopdmath", "stopdocument", "stopeffect", "stopelement", "stopembeddedxtable", "stopendofline", "stopenvironment", "stopexceptions", "stopexpanded", "stopexpandedcollect", "stopextendedcatcodetable", "stopexternalfigurecollection", "stopfigure", "stopfitfieldframed", "stopfittingpage", "stopfloatcombination", "stopfont", "stopfontclass", "stopfontsolution", "stopformula", "stopformulas", "stopfrac", "stopframed", "stopframedcontent", "stopframedtext", "stopgoto", "stopgraphic", "stopgridsnapping", "stophbox", "stophboxestohbox", "stophboxregister", "stophead", "stophelptext", "stophiddenbar", "stophiding", "stophighlight", "stophyphenation", "stopimath", "stopindentation", "stopindentedtext", "stopinmframed", "stopinteraction", "stopinteractionmenu", "stopinterface", "stopintermezzo", "stopintertext", "stopitem", "stopitemgroup", "stopitemize", "stopknockout", "stoplayout", "stopline", "stoplinecorrection", "stoplinefiller", "stoplinenumbering", "stoplinetable", "stoplinetablebody", "stoplinetablecell", "stoplinetablehead", "stoplocalfootnotes", "stoplocalheadsetup", "stoplocallinecorrection", "stoplocalnotes", "stoplocalsetups", "stoplua", "stopluacode", "stopluaparameterset", "stopluasetups", "stopmakeup", "stopmarginblock", "stopmarginrule", "stopmarkedcontent", "stopmathmode", "stopmathstyle", "stopmatrices", "stopmcframed", "stopmdformula", "stopmframed", "stopmixedcolumns", "stopmode", "stopmodeset", "stopmodule", "stopmoduletestsection", "stopmpformula", "stopnamedsection", "stopnamedsubformulas", "stopnarrow", "stopnarrower", "stopnegative", "stopnicelyfilledbox", "stopnobar", "stopnointerference", "stopnotallmodes", "stopnotext", "stopnotmode", "stopopposite", "stopoutputstream", "stopoverbar", "stopoverbars", "stopoverlay", "stopoverprint", "stopoverstrike", "stopoverstrikes", "stoppacked", "stoppagecomment", "stoppagefigure", "stoppagegrid", "stoppagegridspan", "stoppagelayout", "stoppar", "stopparagraph", "stopparagraphs", "stopparagraphscell", "stopparbuilder", "stoppath", "stopplaceformula", "stopplacepairedbox", "stoppositioning", "stoppositionoverlay", "stoppositive", "stoppostponing", "stopprocessassignmentcommand", "stopprocessassignmentlist", "stopprocesscommacommand", "stopprocesscommalist", "stopproduct", "stopproject", "stopprotect", "stopprotectedcolors", "stoppublication", "stoppunctuation", "stopquotation", "stopquote", "stoprandomized", "stoprandomseed", "stoprawsetups", "stopreadingfile", "stopreferenceprefix", "stopregime", "stopregister", "stopreusableMPgraphic", "stopscript", "stopsdformula", "stopsection", "stopsectionblock", "stopsectionblockenvironment", "stopsectionlevel", "stopsetups", "stopsfrac", "stopshapebox", "stopshift", "stopsidebar", "stopsimplecolumns", "stopspecialitem", "stopspeech", "stopspformula", "stopspread", "stopstartstop", "stopstaticMPfigure", "stopstaticMPgraphic", "stopstrictinspectnextcharacter", "stopstructurepageregister", "stopstrut", "stopstyle", "stopsubformulas", "stopsubject", "stopsubjectlevel", "stopsubsection", "stopsubsentence", "stopsubstack", "stopsubsubject", "stopsubsubsection", "stopsubsubsubject", "stopsubsubsubsection", "stopsubsubsubsubject", "stopsubsubsubsubsection", "stopsubsubsubsubsubject", "stopsymbolset", "stoptable", "stoptablehead", "stoptables", "stoptabletail", "stoptabulate", "stoptabulatehead", "stoptabulatetail", "stoptagged", "stoptbinom", "stoptexcode", "stoptexdefinition", "stoptext", "stoptextbackground", "stoptextbackgroundmanual", "stoptextcolor", "stoptextcolorintent", "stoptextflow", "stoptextrule", "stoptitle", "stoptokens", "stoptransparent", "stoptypescript", "stoptypescriptcollection", "stopunderbar", "stopunderbars", "stopunderdash", "stopunderdashes", "stopunderdot", "stopunderdots", "stopunderrandom", "stopunderrandoms", "stopunderstrike", "stopunderstrikes", "stopunframed", "stopuniqueMPgraphic", "stopuniqueMPpagegraphic", "stopunpacked", "stopusableMPgraphic", "stopuseMPgraphic", "stopusemathstyleparameter", "stopusingbtxspecification", "stopvbox", "stopvboxregister", "stopvboxtohbox", "stopvboxtohboxseparator", "stopviewerlayer", "stopvtop", "stopvtopregister", "stopxcell", "stopxcellgroup", "stopxfrac", "stopxgroup", "stopxmldisplayverbatim", "stopxmlinlineverbatim", "stopxmlraw", "stopxmlsetups", "stopxrow", "stopxrowgroup", "stopxtable", "stopxtablebody", "stopxtablefoot", "stopxtablehead", "stopxtablenext", "stopxxfrac", "stretched", "strictdoifelsenextoptional", "strictdoifnextoptionalelse", "stripcharacter", "strippedcsname", "stripspaces", "structurelistuservariable", "structurenumber", "structuretitle", "structureuservariable", "structurevariable", "strut", "strutdp", "strutht", "struthtdp", "struttedbox", "strutwd", "style", "styleinstance", "subject", "subpagenumber", "subsection", "subsentence", "substituteincommalist", "subsubject", "subsubsection", "subsubsubject", "subsubsubsection", "subsubsubsubject", "subsubsubsubsection", "subsubsubsubsubject", "subtractfeature", "swapcounts", "swapdimens", "swapface", "swapmacros", "swaptypeface", "switchstyleonly", "switchtobodyfont", "switchtocolor", "switchtointerlinespace", "symbol", "symbolreference", "synchronizeblank", "synchronizeindenting", "synchronizemarking", "synchronizeoutputstreams", "synchronizestrut", "synchronizewhitespace", "systemlog", "systemlogfirst", "systemloglast", "systemsetups", "tLeftarrow", "tLeftrightarrow", "tRightarrow", "table", "tabulateautoline", "tabulateautorule", "tabulateline", "tabulaterule", "taggedctxcommand", "taggedlabeltexts", "tbinom", "tbox", "tequal", "testandsplitstring", "testcolumn", "testfeature", "testfeatureonce", "testpage", "testpageonly", "testpagesync", "testtokens", "tex", "texdefinition", "texsetup", "textcitation", "textcite", "textcontrolspace", "textflowcollector", "textmath", "textminus", "textormathchar", "textplus", "textreference", "textrule", "textvisiblespace", "tfrac", "thainumerals", "thefirstcharacter", "thenormalizedbodyfontsize", "theremainingcharacters", "thickspace", "thinrule", "thinrules", "thinspace", "thirdoffivearguments", "thirdoffourarguments", "thirdofsixarguments", "thirdofthreearguments", "thirdofthreeunexpanded", "thookleftarrow", "thookrightarrow", "threedigitrounding", "tibetannumerals", "tightlayer", "tinyfont", "title", "tlap", "tleftarrow", "tleftharpoondown", "tleftharpoonup", "tleftrightarrow", "tleftrightharpoons", "tmapsto", "tochar", "tolinenote", "topbox", "topleftbox", "toplinebox", "toprightbox", "topskippedbox", "tracecatcodetables", "tracedfontname", "traceoutputroutines", "tracepositions", "translate", "transparencycomponents", "transparent", "trel", "trightarrow", "trightharpoondown", "trightharpoonup", "trightleftharpoons", "trightoverleftarrow", "triplebond", "truefilename", "truefontname", "ttriplerel", "ttwoheadleftarrow", "ttwoheadrightarrow", "twodigitrounding", "tx", "txx", "typ", "type", "typebuffer", "typedefinedbuffer", "typeface", "typefile", "typescriptone", "typescriptprefix", "typescriptthree", "typescripttwo", "typesetbuffer", "typesetfile", "uconvertnumber", "uedcatcodecommand", "undefinevalue", "undepthed", "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", "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", "useblankparameter", "useblocks", "usebodyfont", "usebodyfontparameter", "usebtxdataset", "usebtxdefinitions", "usecolors", "usecomponent", "usedirectory", "usedummycolorparameter", "usedummystyleandcolor", "usedummystyleparameter", "useenvironment", "useexternaldocument", "useexternalfigure", "useexternalrendering", "useexternalsoundtrack", "usefigurebase", "usefile", "usegridparameter", "useindentingparameter", "useindentnextparameter", "useinterlinespaceparameter", "uselanguageparameter", "useluamodule", "usemathstyleparameter", "usemodule", "useproduct", "useprofileparameter", "useproject", "usereferenceparameter", "userpagenumber", "usesetupsparameter", "usestaticMPfigure", "usesubpath", "usesymbols", "usetexmodule", "usetypescript", "usetypescriptfile", "useurl", "usezipfile", "utfchar", "utflower", "utfupper", "utilityregisterlength", "vboxreference", "verbatim", "verbatimstring", "verbosenumber", "version", "verticalgrowingbar", "verticalpositionbar", "vglue", "viewerlayer", "vl", "vphantom", "vpos", "vsmash", "vsmashbox", "vsmashed", "vspace", "vspacing", "wdofstring", "weekday", "widthofstring", "widthspanningtext", "withoutpt", "word", "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", "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", "Lua", "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", "MPwhd", "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", "TEXpage", "TaBlE", "TeX", "TheNormalizedFontSize", "TransparencyHack", "VerboseNumber", "WidthSpanningText", "XETEX", "XeTeX", "a", "abjadnaivenumerals", "abjadnodotnumerals", "abjadnumerals", "activatespacehandler", "adaptcollector", "adaptedisposition", "adaptfontfeature", "adaptpapersize", "addfeature", "addtoJSpreamble", "addtocommalist", "addvalue", "aftersplitstring", "aftertestandsplitstring", "ajustechamp", "alaligne", "alapage", "alignmentcharacter", "allinputpaths", "alphabeticnumerals", "alwayscitation", "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", "aside", "assignalfadimension", "assigndimen", "assigndimension", "assignifempty", "assigntranslation", "assignvalue", "assignwidth", "assumelongusagecs", "astype", "attachment", "autocap", "autodirhbox", "autodirvbox", "autodirvtop", "autoinsertnextspace", "automathematics", "autosetups", "availablehsize", "averagecharwidth", "backgroundimage", "backgroundimagefill", "backgroundline", "baha", "barrecouleur", "barreinteraction", "bas", "basegrid", "baselineleftbox", "baselinemiddlebox", "baselinerightbox", "bbox", "beforesplitstring", "beforetestandsplitstring", "big", "bigbodyfont", "bigg", "bigger", "biggl", "biggm", "biggr", "bigl", "bigm", "bigr", "bigskip", "binom", "bitmapimage", "blap", "bleed", "bleedheight", "bleedwidth", "blockligatures", "blockquote", "bodyfontenvironmentlist", "bodyfontsize", "bold", "boldface", "bolditalic", "boldslanted", "booleanmodevalue", "bottombox", "bottomleftbox", "bottomrightbox", "bouton", "boutonmenu", "boutonsinteraction", "boxcursor", "boxmarker", "boxofsize", "boxreference", "bpos", "bthiddencitation", "btxabbreviatedjournal", "btxaddjournal", "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", "btxlistcitation", "btxloadjournalist", "btxoneorrange", "btxremapauthor", "btxsavejournalist", "btxsetup", "btxsingularorplural", "btxsingularplural", "btxtextcitation", "cache", "cacheblocs", "calligraphic", "camel", "cap", "caractere", "caracteres", "catcodetablename", "cbox", "centerbox", "centeredbox", "centerednextbox", "cfrac", "champ", "changepolicecorps", "chapitre", "chardescription", "charwidthlanguage", "checkcharacteralign", "checkedchar", "checkedfiller", "checkedstrippedcsname", "checkinjector", "checknextindentation", "checknextinjector", "checkpage", "checkparameters", "checkpreviousinjector", "checksoundtrack", "checktwopassdata", "checkvariables", "chem", "chemical", "chemicalbottext", "chemicalmidtext", "chemicalsymbol", "chemicaltext", "chemicaltoptext", "chiffresromains", "chineseallnumerals", "chinesecapnumerals", "chinesenumerals", "citation", "cite", "citer", "clap", "classfont", "cldcommand", "cldcontext", "cldloadfile", "cldprocessfile", "cleftarrow", "clip", "clonechamp", "collect", "collectedtext", "collectexpanded", "colonne", "colorcomponents", "colored", "coloronly", "columnbreak", "combinepages", "commalistelement", "commalistsentence", "commalistsize", "comment", "commentaire", "comparedimension", "comparedimensioneps", "comparegroupecouleur", "comparepalette", "completebtxrendering", "completelist", "completelistofpublications", "completelistofsorts", "completelistofsynonyms", "completenumeropage", "completeregistre", "complexorsimple", "complexorsimpleempty", "composant", "composedcollector", "composedlayer", "compresult", "concernant", "constantdimen", "constantdimenargument", "constantemptyargument", "constantnumber", "constantnumberargument", "contentreference", "continuednumber", "continueifinputfile", "convertargument", "convertcommand", "convertedcounter", "converteddimen", "convertedsubcounter", "convertitnumero", "convertmonth", "convertvalue", "convertvboxtohbox", "copitchamp", "copypages", "copyparameters", "copyposition", "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", "dactylographier", "dans", "datasetvariable", "date", "datecourante", "dayoftheweek", "dayspermonth", "dbinom", "de", "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", "definecomplexorsimpleempty", "defineconversionset", "definecounter", "definedataset", "definedelimitedtext", "definedfont", "defineeffect", "defineexpandable", "defineexternalfigure", "definefallbackfamily", "definefieldbody", "definefieldbodyset", "definefieldcategory", "definefileconstant", "definefilefallback", "definefilesynonym", "definefiller", "definefirstline", "definefittingpage", "definefontalternative", "definefontfallback", "definefontfamily", "definefontfamilypreset", "definefontfeature", "definefontfile", "definefontsize", "definefontsolution", "defineformula", "defineformulaalternative", "defineformulaframed", "defineframed", "defineframedcontent", "defineframedtext", "definefrozenfont", "defineglobalcolor", "definegraphictypesynonym", "definegridsnapping", "defineheadalternative", "definehelp", "definehigh", "definehighlight", "definehspace", "definehypenationfeatures", "defineindentedtext", "defineindenting", "defineinitial", "defineinsertion", "defineinteraction", "defineinteractionbar", "defineinterfaceconstant", "defineinterfaceelement", "defineinterfacevariable", "defineinterlinespace", "defineintermediatecolor", "defineitemgroup", "defineitems", "definelabelclass", "definelayerpreset", "definelinefiller", "definelinenote", "definelinenumbering", "definelines", "definelistalternative", "definelistextra", "definelow", "definelowhigh", "definelowmidhigh", "definemarginblock", "definemargindata", "definemarker", "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", "definenamespace", "definenarrower", "definenote", "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", "definit", "definitbloc", "definitblocsection", "definitbuffer", "definitcalque", "definitchamp", "definitconversion", "definitcouleur", "definitdactylo", "definitdemarrestoppe", "definitdescription", "definitdisposition", "definitenumeration", "definitenvironnementpolicecorps", "definitetiquette", "definitflottant", "definitformatreference", "definitgroupecouleur", "definithbox", "definitliste", "definitlisteimbriquee", "definitmakeup", "definitmarquage", "definitmenuinteraction", "definitpalette", "definitparagraphes", "definitpilechamp", "definitpolice", "definitpolicecorps", "definitprofil", "definitprogramme", "definitreference", "definitregistre", "definitrevetement", "definitsautdecolonne", "definitsautdepage", "definitsection", "definitsouschamp", "definitstyle", "definitstylepolice", "definitsymbole", "definitsymbolefigure", "definitsynonymepolice", "definitsynonymes", "definittabulation", "definittaillepapier", "definittete", "definittexte", "definittrametableau", "definittri", "definittype", "definitvide", "delimited", "delimitedtext", "demarreJScode", "demarreJSpreamble", "demarreMPclip", "demarreMPcode", "demarreMPdefinitions", "demarreMPdrawing", "demarreMPenvironment", "demarreMPextensions", "demarreMPinclusions", "demarreMPinitializations", "demarreMPpage", "demarreMPpositiongraphic", "demarreMPpositionmethod", "demarreMPrun", "demarreTABLE", "demarreTABLEbody", "demarreTABLEfoot", "demarreTABLEhead", "demarreTABLEnext", "demarreTC", "demarreTD", "demarreTDs", "demarreTEXpage", "demarreTH", "demarreTN", "demarreTR", "demarreTRs", "demarreTX", "demarreTY", "demarreallmodes", "demarrearrangedpages", "demarrearriereplan", "demarreaside", "demarreattachment", "demarrebar", "demarrebinom", "demarrebitmapimage", "demarreblockquote", "demarrebtxrenderingdefinitions", "demarrebuffer", "demarrebutton", "demarrecatcodetable", "demarrechapitre", "demarrecharacteralign", "demarrecheckedfences", "demarrechemical", "demarrecitation", "demarreciter", "demarrecollect", "demarrecollecting", "demarrecolorintent", "demarrecoloronly", "demarrecolorset", "demarrecolumns", "demarrecolumnspan", "demarrecombination", "demarrecomment", "demarrecommentaire", "demarrecomposant", "demarrecontextcode", "demarrecontextdefinitioncode", "demarrecouleur", "demarrectxfunction", "demarrectxfunctiondefinition", "demarrecurrentcolor", "demarrecurrentlistentrywrapper", "demarredbinom", "demarredelimited", "demarredelimitedtext", "demarredfrac", "demarrediscours", "demarredisplaymath", "demarredmath", "demarredocument", "demarreeffect", "demarreelement", "demarreembeddedxtable", "demarreendofline", "demarreenvironement", "demarreexceptions", "demarreexpanded", "demarreexpandedcollect", "demarreextendedcatcodetable", "demarreexternalfigurecollection", "demarrefigure", "demarrefitfieldframed", "demarrefittingpage", "demarrefloatcombination", "demarrefont", "demarrefontclass", "demarrefontsolution", "demarreformula", "demarreformulas", "demarrefrac", "demarreframed", "demarreframedcontent", "demarreframedtext", "demarregraphique", "demarregridsnapping", "demarregroupe", "demarrehbox", "demarrehboxestohbox", "demarrehboxregister", "demarrehelptext", "demarrehiddenbar", "demarrehiding", "demarrehighlight", "demarrehyphenation", "demarreimath", "demarreindentation", "demarreindentedtext", "demarreinmframed", "demarreinteraction", "demarreinterface", "demarreintermezzo", "demarreintertext", "demarreitemgroup", "demarreknockout", "demarrelayout", "demarreligne", "demarreligneregleetexte", "demarrelinecorrection", "demarrelinefiller", "demarrelinenumbering", "demarrelinetable", "demarrelinetablebody", "demarrelinetablecell", "demarrelinetablehead", "demarrelister", "demarrelocalfootnotes", "demarrelocalheadsetup", "demarrelocallinecorrection", "demarrelocalnotes", "demarrelocalsetups", "demarrelua", "demarreluacode", "demarreluaparameterset", "demarreluasetups", "demarremakeup", "demarremargereglee", "demarremarginblock", "demarremarkedcontent", "demarremathmode", "demarremathstyle", "demarrematrices", "demarremcframed", "demarremdformula", "demarremenuinteraction", "demarremframed", "demarremixedcolumns", "demarremode", "demarremodeset", "demarremodule", "demarremoduletestsection", "demarrempformula", "demarrenamedsection", "demarrenamedsubformulas", "demarrenarrow", "demarrenarrower", "demarrenegative", "demarrenicelyfilledbox", "demarrenobar", "demarrenointerference", "demarrenotallmodes", "demarrenotext", "demarrenotmode", "demarreopposite", "demarreoutputstream", "demarreoverbar", "demarreoverbars", "demarreoverlay", "demarreoverprint", "demarrepagecomment", "demarrepagefigure", "demarrepagegrid", "demarrepagegridspan", "demarrepagelayout", "demarrepar", "demarreparagraph", "demarreparagraphs", "demarreparagraphscell", "demarreparbuilder", "demarrepath", "demarreplaceformule", "demarreplacepairedbox", "demarrepositioning", "demarrepositionoverlay", "demarrepositive", "demarrepostponing", "demarreprocessassignmentcommand", "demarreprocessassignmentlist", "demarreprocesscommacommand", "demarreprocesscommalist", "demarreproduit", "demarreprojet", "demarreprotect", "demarreprotectedcolors", "demarrepublication", "demarrepunctuation", "demarrerandomized", "demarrerandomseed", "demarrerawsetups", "demarrereadingfile", "demarrereferenceprefix", "demarreregime", "demarrereusableMPgraphic", "demarrescript", "demarresdformula", "demarresection", "demarresectionblock", "demarresectionblockenvironment", "demarresectionlevel", "demarresetups", "demarresfrac", "demarreshapebox", "demarreshift", "demarresidebar", "demarresimplecolumns", "demarresousligne", "demarresouslignetout", "demarresoussection", "demarresoussoussection", "demarresoussoussoussection", "demarresoussoussoussoussection", "demarresoussoussoussoussujet", "demarresoussoussoussujet", "demarresoussoussujet", "demarresoussujet", "demarrespecialitem", "demarrespeech", "demarrespformula", "demarrespread", "demarrestartstop", "demarrestaticMPfigure", "demarrestaticMPgraphic", "demarrestrictinspectnextcharacter", "demarrestrut", "demarrestyle", "demarresubformulas", "demarresubjectlevel", "demarresubsentence", "demarresubstack", "demarresujet", "demarresurligne", "demarresurlignetout", "demarresymbolset", "demarretable", "demarretableau", "demarretablehead", "demarretables", "demarretabletail", "demarretabulate", "demarretabulatehead", "demarretabulatetail", "demarretagged", "demarretbinom", "demarretete", "demarretexcode", "demarretexdefinition", "demarretext", "demarretextbackground", "demarretextbackgroundmanual", "demarretextcolor", "demarretextcolorintent", "demarretexteaide", "demarretexteencadre", "demarretextflow", "demarretitre", "demarretokens", "demarretransparent", "demarretypescript", "demarretypescriptcollection", "demarreunderdash", "demarreunderdashes", "demarreunderdot", "demarreunderdots", "demarreunderrandom", "demarreunderrandoms", "demarreunderstrike", "demarreunderstrikes", "demarreunframed", "demarreuniqueMPgraphic", "demarreuniqueMPpagegraphic", "demarreunpacked", "demarreusableMPgraphic", "demarreuseMPgraphic", "demarreusemathstyleparameter", "demarreusingbtxspecification", "demarreva", "demarrevbox", "demarrevboxregister", "demarrevboxtohbox", "demarrevboxtohboxseparator", "demarreviewerlayer", "demarrevtop", "demarrevtopregister", "demarrexcell", "demarrexcellgroup", "demarrexfrac", "demarrexgroup", "demarrexmldisplayverbatim", "demarrexmlinlineverbatim", "demarrexmlraw", "demarrexmlsetups", "demarrexrow", "demarrexrowgroup", "demarrextable", "demarrextablebody", "demarrextablefoot", "demarrextablehead", "demarrextablenext", "demarrexxfrac", "depthofstring", "depthonlybox", "depthspanningtext", "determinecaracteristiqueliste", "determinecaracteristiquesregistre", "determinenoflines", "determinenumerotete", "devanagarinumerals", "dfrac", "digits", "dimensiontocount", "directcolor", "directcolored", "directconvertedcounter", "directdummyparameter", "directgetboxllx", "directgetboxlly", "directhighlight", "directlocalframed", "directluacode", "directselect", "directsetbar", "directsetup", "directsymbol", "directvspacing", "dis", "disabledirectives", "disableexperiments", "disablemode", "disableoutputstream", "disableparpositions", "disableregime", "disabletrackers", "discours", "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", "dorepeatwithcommand", "doreplacefeature", "doresetandafffeature", "doresetattribute", "dorotatebox", "dosetattribute", "dosetleftskipadaption", "dosetrightskipadaption", "dosetupcheckedinterlinespace", "doseventupleargument", "doseventupleempty", "dosingleargument", "dosingleempty", "dosinglegroupempty", "dosixtupleargument", "dosixtupleempty", "dostepwiserecurse", "dosubtractfeature", "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", "elapsedseconds", "elapsedtime", "eleftarrowfill", "eleftharpoondownfill", "eleftharpoonupfill", "eleftrightarrowfill", "element", "elements", "emphasisboldface", "emphasistypeface", "emptylines", "emspace", "enabledirectives", "enableexperiments", "enablemode", "enableoutputstream", "enableparpositions", "enableregime", "enabletrackers", "enskip", "enspace", "env", "environement", "envvar", "eoverbarfill", "eoverbracefill", "eoverbracketfill", "eoverparentfill", "epos", "equaldigits", "erightarrowfill", "erightharpoondownfill", "erightharpoonupfill", "espace", "espacefixe", "espacesfixes", "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", "fence", "fenced", "fetchallmarkings", "fetchallmarks", "fetchmark", "fetchmarking", "fetchonemark", "fetchonemarking", "fetchruntinecommand", "fetchtwomarkings", "fetchtwomarks", "fichierdactylo", "fieldbody", "fifthoffivearguments", "fifthofsixarguments", "figure", "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", "flushboxregister", "flushcollector", "flushlayer", "flushlocalfloats", "flushnextbox", "flushnotes", "flushoutputstream", "flushshapebox", "flushtextflow", "flushtokens", "flushtoks", "fontalternative", "fontbody", "fontchar", "fontcharbyindex", "fontclass", "fontclassname", "fontface", "fontfeaturelist", "fontsize", "fontstyle", "forcecharacterstripping", "forcelocalfloats", "forgeteverypar", "forgetparameters", "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", "getprivatechar", "getprivateslot", "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", "grabbufferdata", "grabbufferdatadirect", "grabuntil", "graphique", "grayvalue", "greedysplitstring", "greeknumerals", "grille", "groupedcommand", "gsetboxllx", "gsetboxlly", "gujaratinumerals", "gurmurkhinumerals", "hairspace", "halfwaybox", "handletokens", "handwritten", "hash", "haut", "hboxofvbox", "hboxreference", "hdofstring", "headhbox", "headnumbercontent", "headnumberdistance", "headnumberwidth", "headreferenceattributes", "headsetupspacing", "headtextcontent", "headtextdistance", "headtextwidth", "headvbox", "headwidth", "heightanddepthofstring", "heightofstring", "heightspanningtext", "helptext", "hglue", "hiddenbar", "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", "incrementcounter", "incrementedcounter", "incrementpagenumber", "incrementsubpagenumber", "incrementvalue", "indentation", "infofont", "infofontbold", "inframed", "infull", "inheritparameter", "inhibitblank", "initializeboxstack", "inlinebuffer", "inlinedbox", "inlinemath", "inlinemathematics", "inlinemessage", "inlineordisplaymath", "inlinerange", "inmframed", "innerflushshapebox", "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", "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", "intermezzo", "intertext", "invokepageheandler", "istltdir", "istrtdir", "italic", "italicbold", "italiccorrection", "itemtag", "jobfilename", "jobfilesuffix", "joursemaine", "kap", "keeplinestogether", "keepunwantedspaces", "kerncharacters", "koreancirclenumerals", "koreannumerals", "koreannumeralsc", "koreannumeralsp", "koreanparentnumerals", "languageCharacters", "languagecharacters", "languagecharwidth", "langue", "langueprincipale", "largeurligne", "lastcounter", "lastcountervalue", "lastdigit", "lastlinewidth", "lastnaturalboxdp", "lastnaturalboxht", "lastnaturalboxwd", "lastpredefinedsymbol", "lastrealpage", "lastrealpagenumber", "lastsubcountervalue", "lastsubpage", "lastsubpagenumber", "lasttwodigits", "lastuserpage", "lastuserpagenumber", "lateluacode", "layeredtext", "layerheight", "layerwidth", "lazysavetaggedtwopassdata", "lazysavetwopassdata", "lbox", "left", "leftbottombox", "leftbox", "lefthbox", "leftorrighthbox", "leftorrightvbox", "leftorrightvtop", "leftskipadaption", "leftsubguillemot", "lefttopbox", "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", "limtatefirstline", "linespanningtext", "listcitation", "listcite", "lister", "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", "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", "marquage", "marquepage", "mat", "math", "mathbf", "mathbi", "mathblackboard", "mathbs", "mathcommand", "mathdefault", "mathematique", "mathfraktur", "mathfunction", "mathit", "mathitalic", "mathop", "mathrm", "mathscript", "mathsl", "mathss", "mathtext", "mathtextbf", "mathtextbi", "mathtextbs", "mathtextit", "mathtextsl", "mathtexttf", "mathtf", "mathtriplet", "mathtt", "mathupright", "mathword", "mathwordbf", "mathwordbi", "mathwordbs", "mathwordit", "mathwordsl", "mathwordtf", "mbox", "mcframed", "md", "measure", "measured", "medskip", "medspace", "menuinteraction", "mequal", "message", "metaTeX", "mfence", "mframed", "mfunction", "mfunctionlabeltext", "mhbox", "mhookleftarrow", "mhookrightarrow", "middle", "middlebox", "midhbox", "minimalhbox", "mixedcaps", "mkvibuffer", "mleftarrow", "mleftharpoondown", "mleftharpoonup", "mleftrightarrow", "mleftrightharpoons", "mmapsto", "moduleparameter", "mois", "molecule", "mono", "monobold", "mononormal", "monthlong", "monthshort", "montrecadre", "montrecouleur", "montredisposition", "montreedition", "montreenvironnementpolicecorps", "montregrille", "montregroupecouleur", "montrejeusymboles", "montremakeup", "montrepalette", "montrepolicecorps", "montrereglages", "montrestruts", "mp", "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", "nobar", "nocap", "nocitation", "nocite", "nodetostring", "noffigurepages", "noflines", "noflocalfloats", "noindentation", "noitem", "nonfrenchspacing", "nonmathematics", "normal", "normalboldface", "normalframedwithsettings", "normalizebodyfontsize", "normalizedfontsize", "normalizefontdepth", "normalizefontheight", "normalizefontline", "normalizefontwidth", "normalizetextdepth", "normalizetextheight", "normalizetextline", "normalizetextwidth", "normaltypeface", "note", "notesymbol", "ntimes", "numberofpoints", "numeroformule", "numeropage", "numeros", "numerotete", "numerotetecourant", "obeydepth", "objectdepth", "objectheight", "objectmargin", "objectwidth", "obox", "obtientmarquage", "offset", "offsetbox", "onedigitrounding", "ordinaldaynumber", "ordinalstr", "oriente", "ornamenttext", "outputfilename", "outputstreambox", "outputstreamcopy", "outputstreamunvbox", "outputstreamunvcopy", "over", "overbar", "overbars", "overbartext", "overbarunderbar", "overbrace", "overbracetext", "overbraceunderbrace", "overbracket", "overbrackettext", "overbracketunderbracket", "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", "pagestaterealpage", "paletsize", "pdfTeX", "pdfactualtext", "pdfbackendactualtext", "pdfbackendcurrentresources", "pdfbackendsetcatalog", "pdfbackendsetcolorspace", "pdfbackendsetextgstate", "pdfbackendsetinfo", "pdfbackendsetname", "pdfbackendsetpageattribute", "pdfbackendsetpageresource", "pdfbackendsetpagesattribute", "pdfbackendsetpattern", "pdfbackendsetshade", "pdfcolor", "pdfeTeX", "percent", "percentdimen", "periodes", "permitcaretescape", "permitcircumflexescape", "permitspacesbetweengroups", "persiandecimals", "persiannumerals", "phantom", "phantombox", "pickupgroupedcommand", "pilechamp", "placeattachments", "placebtxrendering", "placecitation", "placecomments", "placecoteacote", "placecurrentformulanumber", "placedbox", "placefloatwithsetups", "placeflottant", "placeformule", "placeframed", "placehelp", "placeinitial", "placelayer", "placelayeredtext", "placelesunsaudessusdesautres", "placeliste", "placelisteinmbriquee", "placelistofpublications", "placelistofsorts", "placelistofsynonyms", "placelocalnotes", "placemarquespages", "placement", "placenamedfloat", "placenamedformula", "placenotes", "placenotespdp", "placenotespdplocales", "placenumeropage", "placenumerotete", "placepairedbox", "placeparallel", "placerawlist", "placeregistre", "placerenderingwindow", "placesousformule", "placesurgrille", "placetextetete", "popattribute", "popmacro", "popmode", "popsystemmode", "position", "positionoverlay", "positionregionoverlay", "postponenotes", "predefinedfont", "predefinefont", "predefinesymbol", "prefixedpagenumber", "prendbuffer", "prependetoks", "prependgvalue", "prependtocommalist", "prependtoks", "prependtoksonce", "prependvalue", "presetdocument", "presetfieldsymbols", "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", "profiledbox", "profilegivenbox", "programme", "projet", "pseudoMixedCapped", "pseudoSmallCapped", "pseudoSmallcapped", "pseudosmallcapped", "purenumber", "pushattribute", "pushbutton", "pushmacro", "pushmode", "pushoutputstream", "pushsystemmode", "qqpart", "qquad", "quad", "quads", "quitcommalist", "quitprevcommalist", "quittypescriptscanning", "raisebox", "randomizetext", "randomnumber", "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", "reglearrangement", "reglearriereplan", "reglearriereplans", "reglebarreinteraction", "reglebloc", "regleblocsection", "reglebuffer", "reglecapitales", "reglechamp", "reglechamps", "regleclipping", "reglecolonnes", "reglecommentaire", "reglecommentairepage", "reglecompoetroite", "reglecomposeenalinea", "reglecouleur", "reglecouleurs", "regledactylo", "regledemarrestoppe", "regledisposition", "regleecraninteraction", "regleelements", "regleencadre", "regleentete", "regleepaisseurligne", "regleespaceblanc", "regleespacement", "regleespacementinterligne", "regleflottant", "regleformulaires", "reglegroupeselements", "regleinf", "regleinteraction", "regleintitule", "reglejeusymboles", "reglelangue", "reglelignes", "reglelignesnoires", "reglelignesreglestexte", "regleliste", "reglelisteimbriquee", "reglemakeup", "reglemargereglee", "reglemarquage", "reglemarquagehyphenation", "reglemenuinteraction", "reglenumeropage", "reglenumerotationligne", "reglenumerotationpage", "reglenumerotationparagraphe", "reglenumerotete", "regleoriente", "reglepalette", "reglepapier", "regleparagraphes", "reglepdp", "regleplacementopposition", "reglepolicecorps", "reglepositionnement", "regleprogrammes", "reglereferencage", "regleregistre", "regleremplitligne", "regleremplitlignesreglees", "regleseparationflottant", "reglesousnumeropage", "reglesup", "reglesynonymes", "regletableaux", "regletabulation", "regletaillepapier", "regletete", "regletetes", "regletexte", "regletextesentete", "regletextesinf", "regletextespdp", "regletextessup", "regletextestexte", "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", "replaceincommalist", "replaceword", "rescan", "rescanwithsetup", "resetMPdrawing", "resetMPenvironment", "resetMPinstance", "resetallattributes", "resetandaddfeature", "resetbar", "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", "resolvedglyphdirect", "resolvedglyphstyled", "restartcounter", "restorebox", "restorecatcodes", "restorecounter", "restorecurrentattributes", "restoreendofline", "restoreglobalbodyfont", "reusableMPgraphic", "reuseMPgraphic", "reuserandomseed", "revivefeature", "rfence", "rhbox", "right", "rightbottombox", "rightbox", "righthbox", "rightorleftpageaction", "rightskipadaption", "rightsubguillemot", "righttolefthbox", "righttoleftvbox", "righttoleftvtop", "righttopbox", "rlap", "robustaddtocommalist", "robustdoifelseinset", "robustdoifinsetelse", "robustpretocommalist", "rollbutton", "roman", "rtop", "ruledhbox", "ruledhpack", "ruledmbox", "ruledtopv", "ruledtpack", "ruledvbox", "ruledvpack", "ruledvtop", "runMPbuffer", "runninghbox", "safechar", "sans", "sansbold", "sansespace", "sanslignesenteteetpdp", "sanslignessupetinf", "sansnormal", "sansserif", "savebox", "savebtxdataset", "savebuffer", "savecounter", "savecurrentattributes", "savenormalmeaning", "savetaggedtwopassdata", "savetwopassdata", "sbox", "sd", "secondoffivearguments", "secondoffourarguments", "secondofsixarguments", "secondofthreearguments", "secondofthreeunexpanded", "secondoftwoarguments", "secondoftwounexpanded", "section", "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", "setfractions", "setgmeasure", "setgvalue", "setgvariable", "setgvariables", "sethboxregister", "sethyphenatedurlafter", "sethyphenatedurlbefore", "sethyphenatedurlnormal", "sethyphenationfeatures", "setinitial", "setinjector", "setinteraction", "setinterfacecommand", "setinterfaceconstant", "setinterfaceelements", "setinterfacemessage", "setinterfacevariable", "setinternalrendering", "setitaliccorrection", "setlayer", "setlayerframed", "setlayertext", "setlinefiller", "setlocalhsize", "setmainbodyfont", "setmainparbuilder", "setmarker", "setmarking", "setmathstyle", "setmeasure", "setmessagetext", "setmode", "setnostrut", "setnote", "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", "setupMPgraphics", "setupMPinstance", "setupMPpage", "setupMPvariables", "setupTABLE", "setupTEXpage", "setupattachment", "setupbackend", "setupbar", "setupbleeding", "setupbookmark", "setupbtx", "setupbtxdataset", "setupbtxlist", "setupbtxregister", "setupbtxrendering", "setupbutton", "setupcharacterkerning", "setupcharacterspacing", "setupchemical", "setupchemicalframed", "setupcollector", "setupcolumnspan", "setupcombination", "setupcounter", "setupdataset", "setupdelimitedtext", "setupdescription", "setupdirections", "setupdocument", "setupeffect", "setupenumeration", "setupenv", "setupexport", "setupexternalfigure", "setupexternalsoundtracks", "setupfieldbody", "setupfieldcategory", "setupfieldcontentframed", "setupfieldlabelframed", "setupfieldtotalframed", "setupfiller", "setupfirstline", "setupfittingpage", "setupfloatcaption", "setupfontexpansion", "setupfontprotrusion", "setupfonts", "setupfontsolution", "setupformula", "setupformulaframed", "setupframedcontent", "setupframedtext", "setupglobalreferenceprefix", "setupheadalternative", "setuphelp", "setuphigh", "setuphighlight", "setuphyphenation", "setupindentedtext", "setupinitial", "setupinsertion", "setupitaliccorrection", "setupitemgroup", "setuplabel", "setuplayer", "setuplayeredtext", "setuplayouttext", "setuplinefiller", "setuplinefillers", "setuplinenote", "setuplinetable", "setuplistalternative", "setuplistextra", "setuplocalfloats", "setuplocalinterlinespace", "setuplow", "setuplowhigh", "setuplowmidhigh", "setupmarginblock", "setupmargindata", "setupmarginframed", "setupmarginrule", "setupmathalignment", "setupmathcases", "setupmathematics", "setupmathfence", "setupmathfraction", "setupmathframed", "setupmathmatrix", "setupmathornament", "setupmathradical", "setupmathstackers", "setupmathstyle", "setupmixedcolumns", "setupmodule", "setupnotation", "setupnotations", "setupnote", "setupnotes", "setupoffset", "setupoffsetbox", "setupoutputroutine", "setuppagechecker", "setuppagegrid", "setuppagegridarea", "setuppagegridareatext", "setuppagegridlines", "setuppagegridspan", "setuppagegridstart", "setuppageinjection", "setuppageinjectionalternative", "setuppageshift", "setuppagestate", "setuppairedbox", "setupparagraph", "setupparagraphintro", "setupparallel", "setupperiods", "setupplacement", "setuppositionbar", "setupprocessor", "setupprofile", "setupquotation", "setuprealpagenumber", "setupreferenceformat", "setupreferenceprefix", "setupreferencestructureprefix", "setupregisters", "setuprenderingwindow", "setups", "setupscale", "setupscript", "setupscripts", "setupselector", "setupshift", "setupsidebar", "setupspellchecking", "setupstretched", "setupstruts", "setupstyle", "setupsubformula", "setuptabulation", "setuptagging", "setuptextbackground", "setuptextflow", "setuptooltip", "setupunit", "setupuserpagenumber", "setupversion", "setupviewerlayer", "setupvspacing", "setupwithargument", "setupwithargumentswapped", "setupxml", "setupxtable", "setuvalue", "setuxvalue", "setvalue", "setvariable", "setvariables", "setvboxregister", "setvisualizerfont", "setvtopregister", "setwidthof", "setxmeasure", "setxvalue", "setxvariable", "setxvariables", "sfrac", "shapedhbox", "showallmakeup", "showattributes", "showboxes", "showbtxdatasetauthors", "showbtxdatasetcompleteness", "showbtxdatasetfields", "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", "simplegroupedcommand", "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", "someheadnumber", "somekindoftab", "somelocalfloat", "somenamedheadnumber", "someplace", "sousnumeropage", "soussection", "soussoussection", "soussoussoussection", "soussoussoussoussection", "soussoussoussoussujet", "soussoussoussujet", "soussoussujet", "soussujet", "sp", "spanishNumerals", "spanishnumerals", "speech", "splitatasterisk", "splitatcolon", "splitatcolons", "splitatcomma", "splitdfrac", "splitfilename", "splitfrac", "splitoffbase", "splitofffull", "splitoffkind", "splitoffname", "splitoffpath", "splitoffroot", "splitofftokens", "splitofftype", "splitstring", "spreadhbox", "sqrt", "stackrel", "startregister", "startstructurepageregister", "stoppeJScode", "stoppeJSpreamble", "stoppeMPclip", "stoppeMPcode", "stoppeMPdefinitions", "stoppeMPdrawing", "stoppeMPenvironment", "stoppeMPextensions", "stoppeMPinclusions", "stoppeMPinitializations", "stoppeMPpage", "stoppeMPpositiongraphic", "stoppeMPpositionmethod", "stoppeMPrun", "stoppeTABLE", "stoppeTABLEbody", "stoppeTABLEfoot", "stoppeTABLEhead", "stoppeTABLEnext", "stoppeTC", "stoppeTD", "stoppeTDs", "stoppeTEXpage", "stoppeTH", "stoppeTN", "stoppeTR", "stoppeTRs", "stoppeTX", "stoppeTY", "stoppeallmodes", "stoppearrangedpages", "stoppearriereplan", "stoppeaside", "stoppeattachment", "stoppebar", "stoppebinom", "stoppebitmapimage", "stoppeblockquote", "stoppebtxrenderingdefinitions", "stoppebuffer", "stoppebutton", "stoppecatcodetable", "stoppechapitre", "stoppecharacteralign", "stoppecheckedfences", "stoppechemical", "stoppecitation", "stoppeciter", "stoppecollect", "stoppecollecting", "stoppecolorintent", "stoppecoloronly", "stoppecolorset", "stoppecolumns", "stoppecolumnspan", "stoppecombination", "stoppecomment", "stoppecommentaire", "stoppecomposant", "stoppecontextcode", "stoppecontextdefinitioncode", "stoppecouleur", "stoppectxfunction", "stoppectxfunctiondefinition", "stoppecurrentcolor", "stoppecurrentlistentrywrapper", "stoppedbinom", "stoppedelimited", "stoppedelimitedtext", "stoppedfrac", "stoppediscours", "stoppedisplaymath", "stoppedmath", "stoppedocument", "stoppeeffect", "stoppeelement", "stoppeembeddedxtable", "stoppeendofline", "stoppeenvironement", "stoppeexceptions", "stoppeexpanded", "stoppeexpandedcollect", "stoppeextendedcatcodetable", "stoppeexternalfigurecollection", "stoppefigure", "stoppefitfieldframed", "stoppefittingpage", "stoppefloatcombination", "stoppefont", "stoppefontclass", "stoppefontsolution", "stoppeformula", "stoppeformulas", "stoppefrac", "stoppeframed", "stoppeframedcontent", "stoppeframedtext", "stoppegraphique", "stoppegridsnapping", "stoppegroupe", "stoppehbox", "stoppehboxestohbox", "stoppehboxregister", "stoppehelptext", "stoppehiddenbar", "stoppehiding", "stoppehighlight", "stoppehyphenation", "stoppeimath", "stoppeindentation", "stoppeindentedtext", "stoppeinmframed", "stoppeinteraction", "stoppeinterface", "stoppeintermezzo", "stoppeintertext", "stoppeitemgroup", "stoppeknockout", "stoppelayout", "stoppeligne", "stoppeligneregleetexte", "stoppelinecorrection", "stoppelinefiller", "stoppelinenumbering", "stoppelinetable", "stoppelinetablebody", "stoppelinetablecell", "stoppelinetablehead", "stoppelister", "stoppelocalfootnotes", "stoppelocalheadsetup", "stoppelocallinecorrection", "stoppelocalnotes", "stoppelocalsetups", "stoppelua", "stoppeluacode", "stoppeluaparameterset", "stoppeluasetups", "stoppemakeup", "stoppemargereglee", "stoppemarginblock", "stoppemarkedcontent", "stoppemathmode", "stoppemathstyle", "stoppematrices", "stoppemcframed", "stoppemdformula", "stoppemenuinteraction", "stoppemframed", "stoppemixedcolumns", "stoppemode", "stoppemodeset", "stoppemodule", "stoppemoduletestsection", "stoppempformula", "stoppenamedsection", "stoppenamedsubformulas", "stoppenarrow", "stoppenarrower", "stoppenegative", "stoppenicelyfilledbox", "stoppenobar", "stoppenointerference", "stoppenotallmodes", "stoppenotext", "stoppenotmode", "stoppeopposite", "stoppeoutputstream", "stoppeoverbar", "stoppeoverbars", "stoppeoverlay", "stoppeoverprint", "stoppepagecomment", "stoppepagefigure", "stoppepagegrid", "stoppepagegridspan", "stoppepagelayout", "stoppepar", "stoppeparagraph", "stoppeparagraphs", "stoppeparagraphscell", "stoppeparbuilder", "stoppepath", "stoppeplaceformule", "stoppeplacepairedbox", "stoppepositioning", "stoppepositionoverlay", "stoppepositive", "stoppepostponing", "stoppeprocessassignmentcommand", "stoppeprocessassignmentlist", "stoppeprocesscommacommand", "stoppeprocesscommalist", "stoppeproduit", "stoppeprojet", "stoppeprotect", "stoppeprotectedcolors", "stoppepublication", "stoppepunctuation", "stopperandomized", "stopperandomseed", "stopperawsetups", "stoppereadingfile", "stoppereferenceprefix", "stopperegime", "stoppereusableMPgraphic", "stoppescript", "stoppesdformula", "stoppesection", "stoppesectionblock", "stoppesectionblockenvironment", "stoppesectionlevel", "stoppesetups", "stoppesfrac", "stoppeshapebox", "stoppeshift", "stoppesidebar", "stoppesimplecolumns", "stoppesousligne", "stoppesouslignetout", "stoppesoussection", "stoppesoussoussection", "stoppesoussoussoussection", "stoppesoussoussoussoussection", "stoppesoussoussoussoussujet", "stoppesoussoussoussujet", "stoppesoussoussujet", "stoppesoussujet", "stoppespecialitem", "stoppespeech", "stoppespformula", "stoppespread", "stoppestartstop", "stoppestaticMPfigure", "stoppestaticMPgraphic", "stoppestrictinspectnextcharacter", "stoppestrut", "stoppestyle", "stoppesubformulas", "stoppesubjectlevel", "stoppesubsentence", "stoppesubstack", "stoppesujet", "stoppesurligne", "stoppesurlignetout", "stoppesymbolset", "stoppetable", "stoppetableau", "stoppetablehead", "stoppetables", "stoppetabletail", "stoppetabulate", "stoppetabulatehead", "stoppetabulatetail", "stoppetagged", "stoppetbinom", "stoppetete", "stoppetexcode", "stoppetexdefinition", "stoppetext", "stoppetextbackground", "stoppetextbackgroundmanual", "stoppetextcolor", "stoppetextcolorintent", "stoppetexteaide", "stoppetexteencadre", "stoppetextflow", "stoppetitre", "stoppetokens", "stoppetransparent", "stoppetypescript", "stoppetypescriptcollection", "stoppeunderdash", "stoppeunderdashes", "stoppeunderdot", "stoppeunderdots", "stoppeunderrandom", "stoppeunderrandoms", "stoppeunderstrike", "stoppeunderstrikes", "stoppeunframed", "stoppeuniqueMPgraphic", "stoppeuniqueMPpagegraphic", "stoppeunpacked", "stoppeusableMPgraphic", "stoppeuseMPgraphic", "stoppeusemathstyleparameter", "stoppeusingbtxspecification", "stoppeva", "stoppevbox", "stoppevboxregister", "stoppevboxtohbox", "stoppevboxtohboxseparator", "stoppeviewerlayer", "stoppevtop", "stoppevtopregister", "stoppexcell", "stoppexcellgroup", "stoppexfrac", "stoppexgroup", "stoppexmldisplayverbatim", "stoppexmlinlineverbatim", "stoppexmlraw", "stoppexmlsetups", "stoppexrow", "stoppexrowgroup", "stoppextable", "stoppextablebody", "stoppextablefoot", "stoppextablehead", "stoppextablenext", "stoppexxfrac", "stopregister", "stopstructurepageregister", "strictdoifelsenextoptional", "strictdoifnextoptionalelse", "stripcharacter", "strippedcsname", "stripspaces", "structurelistuservariable", "structurenumber", "structuretitle", "structureuservariable", "structurevariable", "strut", "strutdp", "strutht", "struthtdp", "struttedbox", "strutwd", "style", "styleinstance", "subsentence", "substituteincommalist", "subtractfeature", "sujet", "swapcounts", "swapdimens", "swapface", "swapmacros", "swaptypeface", "switchstyleonly", "switchtocolor", "switchtointerlinespace", "symbole", "symbolreference", "synchronizeblank", "synchronizeindenting", "synchronizemarking", "synchronizeoutputstreams", "synchronizestrut", "synchronizewhitespace", "systemlog", "systemlogfirst", "systemloglast", "systemsetups", "tLeftarrow", "tLeftrightarrow", "tRightarrow", "tableau", "tabulateautoline", "tabulateautorule", "tabulateline", "tabulaterule", "taggedctxcommand", "taggedlabeltexts", "tapebuffer", "tbinom", "tbox", "tequal", "testandsplitstring", "testcolumn", "testfeature", "testfeatureonce", "testpage", "testpageonly", "testpagesync", "testtokens", "tex", "texdefinition", "texsetup", "textcitation", "textcite", "textcontrolspace", "texteaide", "texteencadre", "textenotepdp", "textflowcollector", "textmath", "textminus", "textormathchar", "textplus", "textvisiblespace", "tfrac", "thainumerals", "thefirstcharacter", "thenormalizedbodyfontsize", "theremainingcharacters", "thickspace", "thinspace", "thirdoffivearguments", "thirdoffourarguments", "thirdofsixarguments", "thirdofthreearguments", "thirdofthreeunexpanded", "thookleftarrow", "thookrightarrow", "threedigitrounding", "tibetannumerals", "tightlayer", "tinyfont", "titre", "tlap", "tleftarrow", "tleftharpoondown", "tleftharpoonup", "tleftrightarrow", "tleftrightharpoons", "tmapsto", "tochar", "tolinenote", "topbox", "topleftbox", "toplinebox", "toprightbox", "topskippedbox", "tracecatcodetables", "tracedfontname", "traceoutputroutines", "tracepositions", "traduire", "traiteblocs", "traitfin", "traitsfins", "transparencycomponents", "transparent", "trel", "trightarrow", "trightharpoondown", "trightharpoonup", "trightleftharpoons", "trightoverleftarrow", "triplebond", "truefilename", "truefontname", "ttriplerel", "ttwoheadleftarrow", "ttwoheadrightarrow", "twodigitrounding", "tx", "txx", "typ", "typedefinedbuffer", "typeface", "typescriptone", "typescriptprefix", "typescriptthree", "typescripttwo", "typesetbuffer", "typesetfile", "uconvertnumber", "uedcatcodecommand", "undefinevalue", "undepthed", "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", "unprotected", "unregisterhyphenationpattern", "unspaceafter", "unspaceargument", "unspaced", "unspacestring", "untexargument", "untexcommand", "uppercased", "uppercasestring", "upperleftdoubleninequote", "upperleftdoublesixquote", "upperleftsingleninequote", "upperleftsinglesixquote", "upperrightdoubleninequote", "upperrightdoublesixquote", "upperrightsingleninequote", "upperrightsinglesixquote", "url", "useMPenvironmentbuffer", "useMPgraphic", "useMPlibrary", "useMPrun", "useMPvariables", "useblankparameter", "usebodyfont", "usebodyfontparameter", "usebtxdataset", "usebtxdefinitions", "usecolors", "usecomponent", "usedummycolorparameter", "usedummystyleandcolor", "usedummystyleparameter", "useenvironment", "useexternalrendering", "usefigurebase", "usefile", "usegridparameter", "useindentingparameter", "useindentnextparameter", "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", "verbatim", "verbatimstring", "verbosenumber", "version", "verticalgrowingbar", "verticalpositionbar", "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", "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", "Lua", "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", "MPwhd", "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", "TEXpage", "TaBlE", "TeX", "TheNormalizedFontSize", "TransparencyHack", "VerboseNumber", "WidthSpanningText", "XETEX", "XeTeX", "abjadnaivenumerals", "abjadnodotnumerals", "abjadnumerals", "activatespacehandler", "adaptcollector", "adaptfontfeature", "adaptpapersize", "adattacampo", "adattalayout", "addfeature", "addtoJSpreamble", "addtocommalist", "addvalue", "aftersplitstring", "aftertestandsplitstring", "al", "alignmentcharacter", "allinputpaths", "alphabeticnumerals", "alwayscitation", "alwayscite", "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", "argomento", "asciistr", "aside", "assignalfadimension", "assigndimen", "assigndimension", "assignifempty", "assigntranslation", "assignvalue", "assignwidth", "assumelongusagecs", "astype", "attachment", "autocap", "autodirhbox", "autodirvbox", "autodirvtop", "autoinsertnextspace", "automathematics", "autosetups", "availablehsize", "averagecharwidth", "backgroundimage", "backgroundimagefill", "backgroundline", "barracolori", "barrainterazione", "basegrid", "baselineleftbox", "baselinemiddlebox", "baselinerightbox", "bbox", "beforesplitstring", "beforetestandsplitstring", "big", "bigbodyfont", "bigg", "bigger", "biggl", "biggm", "biggr", "bigl", "bigm", "bigr", "bigskip", "binom", "bitmapimage", "blap", "bleed", "bleedheight", "bleedwidth", "blockligatures", "blockquote", "bodyfontenvironmentlist", "bodyfontsize", "bold", "boldface", "bolditalic", "boldslanted", "booleanmodevalue", "bottombox", "bottomleftbox", "bottomrightbox", "boxcursor", "boxmarker", "boxofsize", "boxreference", "bpos", "bthiddencitation", "btxabbreviatedjournal", "btxaddjournal", "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", "btxlistcitation", "btxloadjournalist", "btxoneorrange", "btxremapauthor", "btxsavejournalist", "btxsetup", "btxsingularorplural", "btxsingularplural", "btxtextcitation", "calligraphic", "cambiaafontdeltesto", "camel", "campi", "cap", "capello", "capitolo", "capoverso", "catcodetablename", "cbox", "centerbox", "centeredbox", "centerednextbox", "cfrac", "chardescription", "charwidthlanguage", "checkcharacteralign", "checkedchar", "checkedfiller", "checkedstrippedcsname", "checkinjector", "checknextindentation", "checknextinjector", "checkpage", "checkparameters", "checkpreviousinjector", "checksoundtrack", "checktwopassdata", "checkvariables", "chemical", "chemicalbottext", "chemicalmidtext", "chemicalsymbol", "chemicaltext", "chemicaltoptext", "chim", "chineseallnumerals", "chinesecapnumerals", "chinesenumerals", "circondato", "citation", "citazione", "cite", "clap", "classfont", "cldcommand", "cldcontext", "cldloadfile", "cldprocessfile", "cleftarrow", "clip", "clonacampo", "collect", "collectedtext", "collectexpanded", "colonna", "colorcomponents", "colore", "colored", "coloregrigio", "coloronly", "columnbreak", "combinepages", "commalistelement", "commalistsentence", "commalistsize", "comment", "commento", "comparedimension", "comparedimensioneps", "completebtxrendering", "completelist", "completelistofpublications", "completelistofsorts", "completelistofsynonyms", "completeregister", "complexorsimple", "complexorsimpleempty", "componenet", "composedcollector", "composedlayer", "compresult", "confrontagruppocolori", "confrontatavolozza", "constantdimen", "constantdimenargument", "constantemptyargument", "constantnumber", "constantnumberargument", "contentreference", "continuednumber", "continueifinputfile", "convertargument", "convertcommand", "convertedcounter", "converteddimen", "convertedsubcounter", "convertinumero", "convertmonth", "convertvalue", "convertvboxtohbox", "copiacampo", "copypages", "copyparameters", "copyposition", "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", "da", "daqualcheparte", "data", "datadioggi", "datasetvariable", "dayoftheweek", "dayspermonth", "dbinom", "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", "definecomplexorsimpleempty", "defineconversionset", "definecounter", "definedataset", "definedelimitedtext", "definedfont", "defineeffect", "defineexpandable", "defineexternalfigure", "definefallbackfamily", "definefieldbody", "definefieldbodyset", "definefieldcategory", "definefileconstant", "definefilefallback", "definefilesynonym", "definefiller", "definefirstline", "definefittingpage", "definefontalternative", "definefontfallback", "definefontfamily", "definefontfamilypreset", "definefontfeature", "definefontfile", "definefontsize", "definefontsolution", "defineformula", "defineformulaalternative", "defineformulaframed", "defineframedcontent", "definefrozenfont", "defineglobalcolor", "definegraphictypesynonym", "definegridsnapping", "defineheadalternative", "definehelp", "definehigh", "definehighlight", "definehspace", "definehypenationfeatures", "defineindentedtext", "defineindenting", "defineinitial", "defineinsertion", "defineinteraction", "defineinteractionbar", "defineinterfaceconstant", "defineinterfaceelement", "defineinterfacevariable", "defineinterlinespace", "defineintermediatecolor", "defineitemgroup", "defineitems", "definelabelclass", "definelayer", "definelayerpreset", "definelinefiller", "definelinenote", "definelinenumbering", "definelines", "definelistalternative", "definelistextra", "definelow", "definelowhigh", "definelowmidhigh", "definemarginblock", "definemargindata", "definemarker", "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", "definenamespace", "definenarrower", "definenote", "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", "definisciambientefontdeltesto", "definisciblocco", "definiscibloccosezione", "definiscibuffer", "definiscicampo", "definiscicapoversi", "definiscicolore", "definisciconversione", "definiscidescrizione", "definiscidimensionicarta", "definiscielenco", "definiscielencocombinato", "definiscienumerazione", "definiscietichetta", "definiscifigurasimbolo", "definiscifont", "definiscifontdeltesto", "definisciformatoriferimento", "definiscigruppocolori", "definiscihbox", "definisciincorniciato", "definisciiniziatermina", "definiscilayout", "definiscimakeup", "definiscimarcatura", "definiscimenuinterazione", "definiscimodellotabella", "definiscioggettomobile", "definisciordinamento", "definisciprofilo", "definisciprogramma", "definisciregistro", "definisciriferimento", "definiscisezione", "definiscisimbolo", "definiscisinonimi", "definiscisinonimofont", "definiscisottocampo", "definiscisovrapposizione", "definiscistackcampi", "definiscistile", "definiscistilefont", "definiscitabulato", "definiscitavolozza", "definiscitesta", "definiscitesto", "definiscitestoincorniciato", "definiscitype", "definiscityping", "delimited", "delimitedtext", "depthofstring", "depthonlybox", "depthspanningtext", "determinacaratteristicheregistro", "determinacarattersticheelenco", "determinanumerotesta", "determinenoflines", "devanagarinumerals", "dfrac", "digits", "dimensiontocount", "directcolor", "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", "dorepeatwithcommand", "doreplacefeature", "doresetandafffeature", "doresetattribute", "dorotatebox", "dosetattribute", "dosetleftskipadaption", "dosetrightskipadaption", "dosetupcheckedinterlinespace", "doseventupleargument", "doseventupleempty", "dosingleargument", "dosingleempty", "dosinglegroupempty", "dosixtupleargument", "dosixtupleempty", "dostepwiserecurse", "dosubtractfeature", "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", "elaborablocchi", "elapsedseconds", "elapsedtime", "eleftarrowfill", "eleftharpoondownfill", "eleftharpoonupfill", "eleftrightarrowfill", "elementi", "elemento", "elenco", "emphasisboldface", "emphasistypeface", "emptylines", "emspace", "enabledirectives", "enableexperiments", "enablemode", "enableoutputstream", "enableparpositions", "enableregime", "enabletrackers", "enskip", "enspace", "env", "envvar", "eoverbarfill", "eoverbracefill", "eoverbracketfill", "eoverparentfill", "epos", "equaldigits", "erightarrowfill", "erightharpoondownfill", "erightharpoonupfill", "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", "fence", "fenced", "fetchallmarkings", "fetchallmarks", "fetchmark", "fetchmarking", "fetchonemark", "fetchonemarking", "fetchruntinecommand", "fetchtwomarkings", "fetchtwomarks", "fieldbody", "fifthoffivearguments", "fifthofsixarguments", "figura", "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", "flushboxregister", "flushcollector", "flushlayer", "flushlocalfloats", "flushnextbox", "flushnotes", "flushoutputstream", "flushshapebox", "flushtextflow", "flushtokens", "flushtoks", "fontalternative", "fontbody", "fontchar", "fontcharbyindex", "fontclass", "fontclassname", "fontface", "fontfeaturelist", "fontsize", "fontstyle", "forcecharacterstripping", "forcelocalfloats", "forgeteverypar", "forgetparameters", "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", "getprivatechar", "getprivateslot", "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", "grabbufferdata", "grabbufferdatadirect", "grabuntil", "grafico", "grayvalue", "greedysplitstring", "greeknumerals", "griglia", "groupedcommand", "gsetboxllx", "gsetboxlly", "gujaratinumerals", "gurmurkhinumerals", "hairspace", "halfwaybox", "handletokens", "handwritten", "hash", "hboxofvbox", "hboxreference", "hdofstring", "headhbox", "headnumbercontent", "headnumberdistance", "headnumberwidth", "headreferenceattributes", "headsetupspacing", "headtextcontent", "headtextdistance", "headtextwidth", "headvbox", "headwidth", "heightanddepthofstring", "heightofstring", "heightspanningtext", "helptext", "hglue", "hiddenbar", "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", "impostaampiezzariga", "impostabarrainterazione", "impostablocco", "impostabloccosezione", "impostabuffer", "impostacampi", "impostacampo", "impostacapoversi", "impostacaption", "impostacima", "impostaclippling", "impostacolonne", "impostacolore", "impostacolori", "impostacommento", "impostacommentopagina", "impostadimensionicarta", "impostaelementi", "impostaelencazioni", "impostaelenco", "impostaelencocombinato", "impostafondo", "impostafontdeltesto", "impostaforms", "impostaincorniciato", "impostainiziatermina", "impostainstestazione", "impostainterazione", "impostainterlinea", "impostalayout", "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", "impostarientro", "impostariferimento", "impostarighe", "impostarigheriempimento", "impostarigovuoto", "impostarotazione", "impostaschermointerazione", "impostasegnosillabazione", "impostasetsimboli", "impostasfondi", "impostasfondo", "impostasinonimi", "impostaspaziatura", "impostaspaziobianco", "impostaspezzamentooggettomobile", "impostatabelle", "impostatabulato", "impostatavolozza", "impostatesta", "impostateste", "impostatesticima", "impostatestifondo", "impostatestiintestazioni", "impostatestipdp", "impostatesto", "impostatestotesti", "impostatolleranza", "impostatransizionepagina", "impostatype", "impostatyping", "impostaurl", "in", "includemenu", "includeversioninfo", "incorniciato", "increment", "incrementcounter", "incrementedcounter", "incrementpagenumber", "incrementsubpagenumber", "incrementvalue", "indentation", "infofont", "infofontbold", "inheritparameter", "inhibitblank", "initializeboxstack", "iniziaJScode", "iniziaJSpreamble", "iniziaMPclip", "iniziaMPcode", "iniziaMPdefinitions", "iniziaMPdrawing", "iniziaMPenvironment", "iniziaMPextensions", "iniziaMPinclusions", "iniziaMPinitializations", "iniziaMPpage", "iniziaMPpositiongraphic", "iniziaMPpositionmethod", "iniziaMPrun", "iniziaTABLE", "iniziaTABLEbody", "iniziaTABLEfoot", "iniziaTABLEhead", "iniziaTABLEnext", "iniziaTC", "iniziaTD", "iniziaTDs", "iniziaTEXpage", "iniziaTH", "iniziaTN", "iniziaTR", "iniziaTRs", "iniziaTX", "iniziaTY", "iniziaallmodes", "iniziaambiente", "iniziaargomento", "iniziaarrangedpages", "iniziaaside", "iniziaattachment", "iniziabar", "iniziabinom", "iniziabitmapimage", "iniziablockquote", "iniziabtxrenderingdefinitions", "iniziabuffer", "iniziabutton", "iniziacapitolo", "iniziacapoverso", "iniziacatcodetable", "iniziacharacteralign", "iniziacheckedfences", "iniziachemical", "iniziacitazione", "iniziacollect", "iniziacollecting", "iniziacolore", "iniziacolorintent", "iniziacoloronly", "iniziacolorset", "iniziacolumns", "iniziacolumnspan", "iniziacombination", "iniziacomment", "iniziacommento", "iniziacomponenet", "iniziacontextcode", "iniziacontextdefinitioncode", "iniziactxfunction", "iniziactxfunctiondefinition", "iniziacurrentcolor", "iniziacurrentlistentrywrapper", "iniziadbinom", "iniziadelimited", "iniziadelimitedtext", "iniziadfrac", "iniziadisplaymath", "iniziadmath", "iniziadocument", "iniziaeffect", "iniziaelement", "iniziaelemento", "iniziaelenco", "iniziaembeddedxtable", "iniziaendofline", "iniziaexceptions", "iniziaexpanded", "iniziaexpandedcollect", "iniziaextendedcatcodetable", "iniziaexternalfigurecollection", "iniziafigura", "iniziafigure", "iniziafitfieldframed", "iniziafittingpage", "iniziafloatcombination", "iniziafont", "iniziafontclass", "iniziafontsolution", "iniziaformula", "iniziaformulas", "iniziafrac", "iniziaframedcontent", "iniziaframedtext", "iniziagrafico", "iniziagridsnapping", "iniziahbox", "iniziahboxestohbox", "iniziahboxregister", "iniziahelptext", "iniziahiddenbar", "iniziahiding", "iniziahighlight", "iniziahyphenation", "iniziaimath", "iniziaimpaccato", "iniziaincorniciato", "iniziaindentation", "iniziaindentedtext", "iniziainmframed", "iniziainteraction", "iniziainterface", "iniziaintermezzo", "iniziaintertext", "iniziaitemgroup", "iniziaknockout", "inizialayout", "inizialineamargine", "inizialineatesto", "inizialinecorrection", "inizialinefiller", "inizialinenumbering", "inizialinetable", "inizialinetablebody", "inizialinetablecell", "inizialinetablehead", "inizialocalfootnotes", "inizialocalheadsetup", "inizialocallinecorrection", "inizialocalnotes", "inizialocalsetups", "inizialua", "inizialuacode", "inizialuaparameterset", "inizialuasetups", "iniziamakeup", "iniziamarginblock", "iniziamarkedcontent", "iniziamathmode", "iniziamathstyle", "iniziamatrices", "iniziamcframed", "iniziamdformula", "iniziamenuinterattivo", "iniziamenzione", "iniziamettiformula", "iniziamframed", "iniziamixedcolumns", "iniziamode", "iniziamodeset", "iniziamodule", "iniziamoduletestsection", "iniziampformula", "inizianamedsection", "inizianamedsubformulas", "inizianarrow", "inizianarrower", "inizianegative", "inizianicelyfilledbox", "inizianobar", "inizianointerference", "inizianotallmodes", "inizianotext", "inizianotmode", "iniziaopposite", "iniziaoutputstream", "iniziaoverlay", "iniziaoverprint", "iniziapagecomment", "iniziapagefigure", "iniziapagegrid", "iniziapagegridspan", "iniziapagelayout", "iniziapar", "iniziaparagraph", "iniziaparagraphs", "iniziaparagraphscell", "iniziaparbuilder", "iniziapath", "iniziaplacepairedbox", "iniziapositioning", "iniziapositionoverlay", "iniziapositive", "iniziapostponing", "iniziaprocessassignmentcommand", "iniziaprocessassignmentlist", "iniziaprocesscommacommand", "iniziaprocesscommalist", "iniziaprodotto", "iniziaprogetto", "iniziaprotect", "iniziaprotectedcolors", "iniziapubblicazione", "iniziapunctuation", "iniziarandomized", "iniziarandomseed", "iniziarawsetups", "iniziareadingfile", "iniziareferenceprefix", "iniziaregime", "iniziareusableMPgraphic", "iniziariga", "iniziasbarrati", "iniziasbarrato", "iniziascript", "iniziasdformula", "iniziasectionblock", "iniziasectionblockenvironment", "iniziasectionlevel", "iniziasetups", "iniziasfondo", "iniziasfrac", "iniziashapebox", "iniziashift", "iniziasidebar", "iniziasimplecolumns", "iniziasopralinea", "iniziasopralinee", "iniziasottoargomento", "iniziasottocapoverso", "iniziasottolinea", "iniziasottolinee", "iniziasottosottoargomento", "iniziasottosottocapoverso", "iniziasottosottosottoargomento", "iniziasottosottosottocapoverso", "iniziasottosottosottosottoargomento", "iniziasottosottosottosottocapoverso", "iniziaspecialitem", "iniziaspeech", "iniziaspformula", "iniziaspread", "iniziastartstop", "iniziastaticMPfigure", "iniziastaticMPgraphic", "iniziastrictinspectnextcharacter", "iniziastrut", "iniziastyle", "iniziasubformulas", "iniziasubjectlevel", "iniziasubsentence", "iniziasubstack", "iniziasymbolset", "iniziatabella", "iniziatable", "iniziatablehead", "iniziatables", "iniziatabletail", "iniziatabulate", "iniziatabulatehead", "iniziatabulatetail", "iniziatagged", "iniziatbinom", "iniziatesta", "iniziatestoaiuto", "iniziatestoincorniciato", "iniziatexcode", "iniziatexdefinition", "iniziatext", "iniziatextbackground", "iniziatextbackgroundmanual", "iniziatextcolor", "iniziatextcolorintent", "iniziatextflow", "iniziatitolo", "iniziatokens", "iniziatransparent", "iniziatypescript", "iniziatypescriptcollection", "iniziaunderdash", "iniziaunderdashes", "iniziaunderdot", "iniziaunderdots", "iniziaunderrandom", "iniziaunderrandoms", "iniziaunderstrike", "iniziaunderstrikes", "iniziaunframed", "iniziauniqueMPgraphic", "iniziauniqueMPpagegraphic", "iniziaunpacked", "iniziausableMPgraphic", "iniziauseMPgraphic", "iniziausemathstyleparameter", "iniziausingbtxspecification", "iniziavaia", "iniziavbox", "iniziavboxregister", "iniziavboxtohbox", "iniziavboxtohboxseparator", "iniziaviewerlayer", "iniziavtop", "iniziavtopregister", "iniziaxcell", "iniziaxcellgroup", "iniziaxfrac", "iniziaxgroup", "iniziaxmldisplayverbatim", "iniziaxmlinlineverbatim", "iniziaxmlraw", "iniziaxmlsetups", "iniziaxrow", "iniziaxrowgroup", "iniziaxtable", "iniziaxtablebody", "iniziaxtablefoot", "iniziaxtablehead", "iniziaxtablenext", "iniziaxxfrac", "inlinebuffer", "inlinedbox", "inlinemath", "inlinemathematics", "inlinemessage", "inlineordisplaymath", "inlinerange", "inmaframed", "innerflushshapebox", "input", "inputfilebarename", "inputfilename", "inputfilerealsuffix", "inputfilesuffix", "inputgivenfile", "inriga", "insertpages", "installactionhandler", "installactivecharacter", "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", "intermezzo", "intertext", "intorno", "invokepageheandler", "istltdir", "istrtdir", "italic", "italicbold", "italiccorrection", "itemtag", "jobfilename", "jobfilesuffix", "kap", "keeplinestogether", "keepunwantedspaces", "kerncharacters", "koreancirclenumerals", "koreannumerals", "koreannumeralsc", "koreannumeralsp", "koreanparentnumerals", "languageCharacters", "languagecharacters", "languagecharwidth", "lastcounter", "lastcountervalue", "lastdigit", "lastlinewidth", "lastnaturalboxdp", "lastnaturalboxht", "lastnaturalboxwd", "lastpredefinedsymbol", "lastrealpage", "lastrealpagenumber", "lastsubcountervalue", "lastsubpage", "lastsubpagenumber", "lasttwodigits", "lastuserpage", "lastuserpagenumber", "lateluacode", "layeredtext", "layerheight", "layerwidth", "lazysavetaggedtwopassdata", "lazysavetwopassdata", "lbox", "left", "leftbottombox", "leftbox", "lefthbox", "leftorrighthbox", "leftorrightvbox", "leftorrightvtop", "leftskipadaption", "leftsubguillemot", "lefttopbox", "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", "limtatefirstline", "lineanera", "lineasottile", "lineatesto", "lineenere", "lineeriempimento", "lineesottili", "linespanningtext", "lingua", "linguaprincipale", "listcitation", "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", "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", "marcatura", "margindata", "markcontent", "markinjector", "mat", "matematica", "math", "mathbf", "mathbi", "mathblackboard", "mathbs", "mathcommand", "mathdefault", "mathfraktur", "mathfunction", "mathit", "mathitalic", "mathop", "mathrm", "mathscript", "mathsl", "mathss", "mathtext", "mathtextbf", "mathtextbi", "mathtextbs", "mathtextit", "mathtextsl", "mathtexttf", "mathtf", "mathtriplet", "mathtt", "mathupright", "mathword", "mathwordbf", "mathwordbi", "mathwordbs", "mathwordit", "mathwordsl", "mathwordtf", "mbox", "mcframed", "md", "measure", "measured", "medskip", "medspace", "menuinterattivo", "menzione", "mequal", "mese", "message", "metaTeX", "mettielenco", "mettielencocombinato", "mettifiancoafianco", "mettiformula", "mettiingriglia", "mettinotepdp", "mettinotepdplocali", "mettinumeropagina", "mettiregistro", "mettisegnalibro", "mettisottoformula", "mettiunosullaltro", "mfence", "mfunction", "mfunctionlabeltext", "mhbox", "mhookleftarrow", "mhookrightarrow", "middle", "middlebox", "midhbox", "minimalhbox", "mixedcaps", "mkvibuffer", "mleftarrow", "mleftharpoondown", "mleftharpoonup", "mleftrightarrow", "mleftrightharpoons", "mmapsto", "moduleparameter", "molecule", "mono", "monobold", "mononormal", "monthlong", "monthshort", "mostraambientefontdeltesto", "mostracolore", "mostracornice", "mostrafontdeltesto", "mostragriglia", "mostragruppocolori", "mostraimpostazioni", "mostralyout", "mostramakeup", "mostrasetsimboli", "mostrastampa", "mostrastruts", "mostratavolozza", "mp", "mprandomnumber", "mrel", "mrightarrow", "mrightharpoondown", "mrightharpoonup", "mrightleftharpoons", "mrightoverleftarrow", "mtext", "mtriplerel", "mtwoheadleftarrow", "mtwoheadrightarrow", "namedheadnumber", "namedstructureheadlocation", "namedstructureuservariable", "namedstructurevariable", "namedtaggedlabeltexts", "nascondere", "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", "nobar", "nocap", "nocitation", "nocite", "nodetostring", "noffigurepages", "noflines", "noflocalfloats", "noindentation", "noitem", "nonfrenchspacing", "nonmathematics", "normal", "normalboldface", "normalframedwithsettings", "normalizebodyfontsize", "normalizedfontsize", "normalizefontdepth", "normalizefontheight", "normalizefontline", "normalizefontwidth", "normalizetextdepth", "normalizetextheight", "normalizetextline", "normalizetextwidth", "normaltypeface", "nota", "notesymbol", "ntimes", "numberofpoints", "numeri", "numeriromani", "numeroformula", "numeropagina", "numeropaginacompleto", "numerotesta", "numerotestacorrente", "obeydepth", "objectdepth", "objectheight", "objectmargin", "objectwidth", "obox", "offset", "offsetbox", "onedigitrounding", "ordinaldaynumber", "ordinalstr", "ornamenttext", "outputfilename", "outputstreambox", "outputstreamcopy", "outputstreamunvbox", "outputstreamunvcopy", "over", "overbar", "overbars", "overbartext", "overbarunderbar", "overbrace", "overbracetext", "overbraceunderbrace", "overbracket", "overbrackettext", "overbracketunderbracket", "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", "pagestaterealpage", "pagina", "paletsize", "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", "placecitation", "placecomments", "placecurrentformulanumber", "placedbox", "placefloat", "placefloatwithsetups", "placeframed", "placehelp", "placeinitial", "placelayer", "placelayeredtext", "placelistofpublications", "placelistofsorts", "placelistofsynonyms", "placelocalnotes", "placement", "placenamedfloat", "placenamedformula", "placenotes", "placepairedbox", "placeparallel", "placerawlist", "placerenderingwindow", "popattribute", "popmacro", "popmode", "popsystemmode", "positionoverlay", "positionregionoverlay", "posizionanumerotesta", "posizionatestotesta", "posizione", "postponenotes", "predefinedfont", "predefinefont", "predefinesymbol", "prefixedpagenumber", "prendibuffer", "prendimarcatura", "prependetoks", "prependgvalue", "prependtocommalist", "prependtoks", "prependtoksonce", "prependvalue", "presetdocument", "presetfieldsymbols", "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", "profiledbox", "profilegivenbox", "progetto", "programma", "pseudoMixedCapped", "pseudoSmallCapped", "pseudoSmallcapped", "pseudosmallcapped", "pulsante", "pulsantemenu", "pulsantinterazione", "punti", "purenumber", "pushattribute", "pushbutton", "pushmacro", "pushmode", "pushoutputstream", "pushsystemmode", "qquad", "quad", "quads", "qualcheriga", "quitcommalist", "quitprevcommalist", "quittypescriptscanning", "raisebox", "randomizetext", "randomnumber", "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", "replaceincommalist", "replaceword", "rescan", "rescanwithsetup", "resetMPdrawing", "resetMPenvironment", "resetMPinstance", "resetallattributes", "resetandaddfeature", "resetbar", "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", "resolvedglyphdirect", "resolvedglyphstyled", "restartcounter", "restorebox", "restorecatcodes", "restorecounter", "restorecurrentattributes", "restoreendofline", "restoreglobalbodyfont", "reusableMPgraphic", "reuseMPgraphic", "reuserandomseed", "revivefeature", "rfence", "rhbox", "rif", "riferimento", "riferimentopagina", "riferimentotesto", "riflessione", "rigariempimento", "right", "rightbottombox", "rightbox", "righthbox", "rightorleftpageaction", "rightskipadaption", "rightsubguillemot", "righttolefthbox", "righttoleftvbox", "righttoleftvtop", "righttopbox", "rigovuoto", "rlap", "robustaddtocommalist", "robustdoifelseinset", "robustdoifinsetelse", "robustpretocommalist", "rollbutton", "roman", "rtop", "ruledhbox", "ruledhpack", "ruledmbox", "ruledtopv", "ruledtpack", "ruledvbox", "ruledvpack", "ruledvtop", "runMPbuffer", "runninghbox", "ruota", "safechar", "sans", "sansbold", "sansnormal", "sansserif", "savebox", "savebtxdataset", "savebuffer", "savecounter", "savecurrentattributes", "savenormalmeaning", "savetaggedtwopassdata", "savetwopassdata", "sbox", "scala", "schermo", "scrividentroelenco", "scriviinelenco", "sd", "secondoffivearguments", "secondoffourarguments", "secondofsixarguments", "secondofthreearguments", "secondofthreeunexpanded", "secondoftwoarguments", "secondoftwounexpanded", "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", "setfractions", "setgmeasure", "setgvalue", "setgvariable", "setgvariables", "sethboxregister", "sethyphenatedurlafter", "sethyphenatedurlbefore", "sethyphenatedurlnormal", "sethyphenationfeatures", "setinitial", "setinjector", "setinteraction", "setinterfacecommand", "setinterfaceconstant", "setinterfaceelements", "setinterfacemessage", "setinterfacevariable", "setinternalrendering", "setitaliccorrection", "setlayer", "setlayerframed", "setlayertext", "setlinefiller", "setlocalhsize", "setmainbodyfont", "setmainparbuilder", "setmarker", "setmarking", "setmathstyle", "setmeasure", "setmessagetext", "setmode", "setnostrut", "setnote", "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", "setupMPgraphics", "setupMPinstance", "setupMPpage", "setupMPvariables", "setupTABLE", "setupTEXpage", "setupattachment", "setupbackend", "setupbar", "setupbleeding", "setupbookmark", "setupbtx", "setupbtxdataset", "setupbtxlist", "setupbtxregister", "setupbtxrendering", "setupbutton", "setupcharacterkerning", "setupcharacterspacing", "setupchemical", "setupchemicalframed", "setupcollector", "setupcolumnspan", "setupcombination", "setupcounter", "setupdataset", "setupdelimitedtext", "setupdescription", "setupdirections", "setupdocument", "setupeffect", "setupenumeration", "setupenv", "setupexport", "setupexternalfigure", "setupexternalsoundtracks", "setupfieldbody", "setupfieldcategory", "setupfieldcontentframed", "setupfieldlabelframed", "setupfieldtotalframed", "setupfiller", "setupfirstline", "setupfittingpage", "setupfloatcaption", "setupfontexpansion", "setupfontprotrusion", "setupfonts", "setupfontsolution", "setupformula", "setupformulaframed", "setupframedcontent", "setupframedtext", "setupglobalreferenceprefix", "setupheadalternative", "setuphelp", "setuphigh", "setuphighlight", "setuphyphenation", "setupindentedtext", "setupinitial", "setupinsertion", "setupitaliccorrection", "setupitemgroup", "setuplabel", "setuplayer", "setuplayeredtext", "setuplayouttext", "setuplinefiller", "setuplinefillers", "setuplinenote", "setuplinetable", "setuplistalternative", "setuplistextra", "setuplocalfloats", "setuplocalinterlinespace", "setuplow", "setuplowhigh", "setuplowmidhigh", "setupmarginblock", "setupmargindata", "setupmarginframed", "setupmarginrule", "setupmathalignment", "setupmathcases", "setupmathematics", "setupmathfence", "setupmathfraction", "setupmathframed", "setupmathmatrix", "setupmathornament", "setupmathradical", "setupmathstackers", "setupmathstyle", "setupmixedcolumns", "setupmodule", "setupnotation", "setupnotations", "setupnote", "setupnotes", "setupoffset", "setupoffsetbox", "setupoutputroutine", "setuppagechecker", "setuppagegrid", "setuppagegridarea", "setuppagegridareatext", "setuppagegridlines", "setuppagegridspan", "setuppagegridstart", "setuppageinjection", "setuppageinjectionalternative", "setuppageshift", "setuppagestate", "setuppairedbox", "setuppaper", "setupparagraph", "setupparagraphintro", "setupparallel", "setupperiods", "setupplacement", "setuppositionbar", "setupprocessor", "setupprofile", "setupquotation", "setuprealpagenumber", "setupreferenceformat", "setupreferenceprefix", "setupreferencestructureprefix", "setupregisters", "setuprenderingwindow", "setups", "setupscale", "setupscript", "setupscripts", "setupselector", "setupshift", "setupsidebar", "setupspellchecking", "setupstretched", "setupstruts", "setupstyle", "setupsubformula", "setuptabulation", "setuptagging", "setuptextbackground", "setuptextflow", "setuptooltip", "setupunit", "setupuserpagenumber", "setupversion", "setupviewerlayer", "setupvspacing", "setupwithargument", "setupwithargumentswapped", "setupxml", "setupxtable", "setuvalue", "setuxvalue", "setvalue", "setvariable", "setvariables", "setvboxregister", "setvisualizerfont", "setvtopregister", "setwidthof", "setxmeasure", "setxvalue", "setxvariable", "setxvariables", "sfondo", "sfrac", "shapedhbox", "showallmakeup", "showattributes", "showboxes", "showbtxdatasetauthors", "showbtxdatasetcompleteness", "showbtxdatasetfields", "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", "simbolo", "simplegroupedcommand", "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", "someheadnumber", "somekindoftab", "somelocalfloat", "somenamedheadnumber", "someplace", "sottoargomento", "sottocapoverso", "sottosottoargomento", "sottosottocapoverso", "sottosottosottoargomento", "sottosottosottocapoverso", "sottosottosottosottoargomento", "sottosottosottosottocapoverso", "sp", "spanishNumerals", "spanishnumerals", "spazifissi", "spazio", "spaziofisso", "speech", "spessoreriga", "spezzaoggettomobile", "splitatasterisk", "splitatcolon", "splitatcolons", "splitatcomma", "splitdfrac", "splitfilename", "splitfrac", "splitoffbase", "splitofffull", "splitoffkind", "splitoffname", "splitoffpath", "splitoffroot", "splitofftokens", "splitofftype", "splitstring", "spreadhbox", "sqrt", "stackcampi", "stackrel", "startregister", "startstructurepageregister", "stirato", "stopregister", "stopstructurepageregister", "strictdoifelsenextoptional", "strictdoifnextoptionalelse", "stripcharacter", "strippedcsname", "stripspaces", "structurelistuservariable", "structurenumber", "structuretitle", "structureuservariable", "structurevariable", "strut", "strutdp", "strutht", "struthtdp", "struttedbox", "strutwd", "style", "styleinstance", "subpagenumber", "subsentence", "substituteincommalist", "subtractfeature", "swapcounts", "swapdimens", "swapface", "swapmacros", "swaptypeface", "switchstyleonly", "switchtocolor", "switchtointerlinespace", "symbolreference", "synchronizeblank", "synchronizeindenting", "synchronizemarking", "synchronizeoutputstreams", "synchronizestrut", "synchronizewhitespace", "systemlog", "systemlogfirst", "systemloglast", "systemsetups", "tLeftarrow", "tLeftrightarrow", "tRightarrow", "tabella", "tabulateautoline", "tabulateautorule", "tabulateline", "tabulaterule", "taggedctxcommand", "taggedlabeltexts", "tbinom", "tbox", "tequal", "terminaJScode", "terminaJSpreamble", "terminaMPclip", "terminaMPcode", "terminaMPdefinitions", "terminaMPdrawing", "terminaMPenvironment", "terminaMPextensions", "terminaMPinclusions", "terminaMPinitializations", "terminaMPpage", "terminaMPpositiongraphic", "terminaMPpositionmethod", "terminaMPrun", "terminaTABLE", "terminaTABLEbody", "terminaTABLEfoot", "terminaTABLEhead", "terminaTABLEnext", "terminaTC", "terminaTD", "terminaTDs", "terminaTEXpage", "terminaTH", "terminaTN", "terminaTR", "terminaTRs", "terminaTX", "terminaTY", "terminaallmodes", "terminaambiente", "terminaargomento", "terminaarrangedpages", "terminaaside", "terminaattachment", "terminabar", "terminabinom", "terminabitmapimage", "terminablockquote", "terminabtxrenderingdefinitions", "terminabuffer", "terminabutton", "terminacapitolo", "terminacapoverso", "terminacatcodetable", "terminacharacteralign", "terminacheckedfences", "terminachemical", "terminacitazione", "terminacollect", "terminacollecting", "terminacolore", "terminacolorintent", "terminacoloronly", "terminacolorset", "terminacolumns", "terminacolumnspan", "terminacombination", "terminacomment", "terminacommento", "terminacomponenet", "terminacontextcode", "terminacontextdefinitioncode", "terminactxfunction", "terminactxfunctiondefinition", "terminacurrentcolor", "terminacurrentlistentrywrapper", "terminadbinom", "terminadelimited", "terminadelimitedtext", "terminadfrac", "terminadisplaymath", "terminadmath", "terminadocument", "terminaeffect", "terminaelement", "terminaelemento", "terminaelenco", "terminaembeddedxtable", "terminaendofline", "terminaexceptions", "terminaexpanded", "terminaexpandedcollect", "terminaextendedcatcodetable", "terminaexternalfigurecollection", "terminafigura", "terminafigure", "terminafitfieldframed", "terminafittingpage", "terminafloatcombination", "terminafont", "terminafontclass", "terminafontsolution", "terminaformula", "terminaformulas", "terminafrac", "terminaframedcontent", "terminaframedtext", "terminagrafico", "terminagridsnapping", "terminahbox", "terminahboxestohbox", "terminahboxregister", "terminahelptext", "terminahiddenbar", "terminahiding", "terminahighlight", "terminahyphenation", "terminaimath", "terminaimpaccato", "terminaincorniciato", "terminaindentation", "terminaindentedtext", "terminainmframed", "terminainteraction", "terminainterface", "terminaintermezzo", "terminaintertext", "terminaitemgroup", "terminaknockout", "terminalayout", "terminalineamargine", "terminalineatesto", "terminalinecorrection", "terminalinefiller", "terminalinenumbering", "terminalinetable", "terminalinetablebody", "terminalinetablecell", "terminalinetablehead", "terminalocalfootnotes", "terminalocalheadsetup", "terminalocallinecorrection", "terminalocalnotes", "terminalocalsetups", "terminalua", "terminaluacode", "terminaluaparameterset", "terminaluasetups", "terminamakeup", "terminamarginblock", "terminamarkedcontent", "terminamathmode", "terminamathstyle", "terminamatrices", "terminamcframed", "terminamdformula", "terminamenuinterattivo", "terminamenzione", "terminamettiformula", "terminamframed", "terminamixedcolumns", "terminamode", "terminamodeset", "terminamodule", "terminamoduletestsection", "terminampformula", "terminanamedsection", "terminanamedsubformulas", "terminanarrow", "terminanarrower", "terminanegative", "terminanicelyfilledbox", "terminanobar", "terminanointerference", "terminanotallmodes", "terminanotext", "terminanotmode", "terminaopposite", "terminaoutputstream", "terminaoverlay", "terminaoverprint", "terminapagecomment", "terminapagefigure", "terminapagegrid", "terminapagegridspan", "terminapagelayout", "terminapar", "terminaparagraph", "terminaparagraphs", "terminaparagraphscell", "terminaparbuilder", "terminapath", "terminaplacepairedbox", "terminapositioning", "terminapositionoverlay", "terminapositive", "terminapostponing", "terminaprocessassignmentcommand", "terminaprocessassignmentlist", "terminaprocesscommacommand", "terminaprocesscommalist", "terminaprodotto", "terminaprogetto", "terminaprotect", "terminaprotectedcolors", "terminapubblicazione", "terminapunctuation", "terminarandomized", "terminarandomseed", "terminarawsetups", "terminareadingfile", "terminareferenceprefix", "terminaregime", "terminareusableMPgraphic", "terminariga", "terminasbarrati", "terminasbarrato", "terminascript", "terminasdformula", "terminasectionblock", "terminasectionblockenvironment", "terminasectionlevel", "terminasetups", "terminasfondo", "terminasfrac", "terminashapebox", "terminashift", "terminasidebar", "terminasimplecolumns", "terminasopralinea", "terminasopralinee", "terminasottoargomento", "terminasottocapoverso", "terminasottolinea", "terminasottolinee", "terminasottosottoargomento", "terminasottosottocapoverso", "terminasottosottosottoargomento", "terminasottosottosottocapoverso", "terminasottosottosottosottoargomento", "terminasottosottosottosottocapoverso", "terminaspecialitem", "terminaspeech", "terminaspformula", "terminaspread", "terminastartstop", "terminastaticMPfigure", "terminastaticMPgraphic", "terminastrictinspectnextcharacter", "terminastrut", "terminastyle", "terminasubformulas", "terminasubjectlevel", "terminasubsentence", "terminasubstack", "terminasymbolset", "terminatabella", "terminatable", "terminatablehead", "terminatables", "terminatabletail", "terminatabulate", "terminatabulatehead", "terminatabulatetail", "terminatagged", "terminatbinom", "terminatesta", "terminatestoaiuto", "terminatestoincorniciato", "terminatexcode", "terminatexdefinition", "terminatext", "terminatextbackground", "terminatextbackgroundmanual", "terminatextcolor", "terminatextcolorintent", "terminatextflow", "terminatitolo", "terminatokens", "terminatransparent", "terminatypescript", "terminatypescriptcollection", "terminaunderdash", "terminaunderdashes", "terminaunderdot", "terminaunderdots", "terminaunderrandom", "terminaunderrandoms", "terminaunderstrike", "terminaunderstrikes", "terminaunframed", "terminauniqueMPgraphic", "terminauniqueMPpagegraphic", "terminaunpacked", "terminausableMPgraphic", "terminauseMPgraphic", "terminausemathstyleparameter", "terminausingbtxspecification", "terminavaia", "terminavbox", "terminavboxregister", "terminavboxtohbox", "terminavboxtohboxseparator", "terminaviewerlayer", "terminavtop", "terminavtopregister", "terminaxcell", "terminaxcellgroup", "terminaxfrac", "terminaxgroup", "terminaxmldisplayverbatim", "terminaxmlinlineverbatim", "terminaxmlraw", "terminaxmlsetups", "terminaxrow", "terminaxrowgroup", "terminaxtable", "terminaxtablebody", "terminaxtablefoot", "terminaxtablehead", "terminaxtablenext", "terminaxxfrac", "testandsplitstring", "testcolumn", "testfeature", "testfeatureonce", "testoaiuto", "testoincorniciato", "testonotapdp", "testoriempimento", "testpage", "testpageonly", "testpagesync", "testtokens", "tex", "texdefinition", "texsetup", "textcitation", "textcite", "textcontrolspace", "textflowcollector", "textmath", "textminus", "textormathchar", "textplus", "textvisiblespace", "tfrac", "thainumerals", "thefirstcharacter", "thenormalizedbodyfontsize", "theremainingcharacters", "thickspace", "thinspace", "thirdoffivearguments", "thirdoffourarguments", "thirdofsixarguments", "thirdofthreearguments", "thirdofthreeunexpanded", "thookleftarrow", "thookrightarrow", "threedigitrounding", "tibetannumerals", "tieniblocchi", "tightlayer", "tinyfont", "titolo", "tlap", "tleftarrow", "tleftharpoondown", "tleftharpoonup", "tleftrightarrow", "tleftrightharpoons", "tmapsto", "tochar", "tolinenote", "topbox", "topleftbox", "toplinebox", "toprightbox", "topskippedbox", "tracecatcodetables", "tracedfontname", "traceoutputroutines", "tracepositions", "traduci", "transparencycomponents", "transparent", "trel", "trightarrow", "trightharpoondown", "trightharpoonup", "trightleftharpoons", "trightoverleftarrow", "triplebond", "truefilename", "truefontname", "ttriplerel", "ttwoheadleftarrow", "ttwoheadrightarrow", "twodigitrounding", "tx", "txx", "typ", "type", "typebuffer", "typedefinedbuffer", "typeface", "typefile", "typescriptone", "typescriptprefix", "typescriptthree", "typescripttwo", "typesetbuffer", "typesetfile", "uconvertnumber", "uedcatcodecommand", "undefinevalue", "undepthed", "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", "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", "useblankparameter", "usebodyfont", "usebodyfontparameter", "usebtxdataset", "usebtxdefinitions", "usecolors", "usecomponent", "usedummycolorparameter", "usedummystyleandcolor", "usedummystyleparameter", "useenvironment", "useexternalrendering", "usefigurebase", "usefile", "usegridparameter", "useindentingparameter", "useindentnextparameter", "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", "verbatim", "verbatimstring", "verbosenumber", "versione", "verticalgrowingbar", "verticalpositionbar", "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", "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", "Lua", "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", "MPwhd", "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", "TEXpage", "TaBlE", "TeX", "TheNormalizedFontSize", "TransparencyHack", "VerboseNumber", "WEEKDAG", "WOORD", "WOORDEN", "WidthSpanningText", "Woord", "Woorden", "XETEX", "XeTeX", "aanhangsel", "abjadnaivenumerals", "abjadnodotnumerals", "abjadnumerals", "about", "achtergrond", "activatespacehandler", "adaptcollector", "adaptfontfeature", "adaptpapersize", "addfeature", "addtoJSpreamble", "addtocommalist", "addvalue", "aftersplitstring", "aftertestandsplitstring", "alignmentcharacter", "allinputpaths", "alphabeticnumerals", "alwayscitation", "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", "aside", "assignalfadimension", "assigndimen", "assigndimension", "assignifempty", "assigntranslation", "assignvalue", "assignwidth", "assumelongusagecs", "astype", "attachment", "autocap", "autodirhbox", "autodirvbox", "autodirvtop", "autoinsertnextspace", "automathematics", "autosetups", "availablehsize", "averagecharwidth", "backgroundimage", "backgroundimagefill", "backgroundline", "basegrid", "baselineleftbox", "baselinemiddlebox", "baselinerightbox", "bbox", "beforesplitstring", "beforetestandsplitstring", "bepaalkopnummer", "bepaallijstkenmerken", "bepaalregisterkenmerken", "bewaarbuffer", "big", "bigbodyfont", "bigg", "bigger", "biggl", "biggm", "biggr", "bigl", "bigm", "bigr", "bigskip", "binom", "bitmapimage", "blanko", "blap", "bleed", "bleedheight", "bleedwidth", "blockligatures", "blockquote", "blokcitaat", "blokje", "blokjes", "bodyfontenvironmentlist", "bodyfontsize", "bold", "boldface", "bolditalic", "boldslanted", "bookmark", "booleanmodevalue", "bottombox", "bottomleftbox", "bottomrightbox", "boxcursor", "boxmarker", "boxofsize", "boxreference", "bpos", "bthiddencitation", "btxabbreviatedjournal", "btxaddjournal", "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", "btxlistcitation", "btxloadjournalist", "btxoneorrange", "btxremapauthor", "btxsavejournalist", "btxsetup", "btxsingularorplural", "btxsingularplural", "btxtextcitation", "button", "calligraphic", "camel", "catcodetablename", "cbox", "centerbox", "centeredbox", "centerednextbox", "cfrac", "chardescription", "charwidthlanguage", "checkcharacteralign", "checkedchar", "checkedfiller", "checkedstrippedcsname", "checkinjector", "checknextindentation", "checknextinjector", "checkpage", "checkparameters", "checkpreviousinjector", "checksoundtrack", "checktwopassdata", "checkvariables", "chem", "chemical", "chemicalbottext", "chemicalmidtext", "chemicalsymbol", "chemicaltext", "chemicaltoptext", "chineseallnumerals", "chinesecapnumerals", "chinesenumerals", "cijfers", "citaat", "citation", "cite", "citeer", "clap", "classfont", "cldcommand", "cldcontext", "cldloadfile", "cldprocessfile", "cleftarrow", "clip", "collect", "collectedtext", "collectexpanded", "colorcomponents", "colored", "coloronly", "columnbreak", "combinepages", "commalistelement", "commalistsentence", "commalistsize", "comment", "commentaar", "comparedimension", "comparedimensioneps", "completebtxrendering", "completelist", "completelistofpublications", "completelistofsorts", "completelistofsynonyms", "complexorsimple", "complexorsimpleempty", "composedcollector", "composedlayer", "compresult", "constantdimen", "constantdimenargument", "constantemptyargument", "constantnumber", "constantnumberargument", "contentreference", "continuednumber", "continueifinputfile", "convertargument", "convertcommand", "convertedcounter", "converteddimen", "convertedsubcounter", "converteernummer", "convertmonth", "convertvalue", "convertvboxtohbox", "copieerveld", "copypages", "copyparameters", "copyposition", "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", "datasetvariable", "datum", "dayoftheweek", "dayspermonth", "dbinom", "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", "definecomplexorsimpleempty", "defineconversionset", "definecounter", "definedataset", "definedelimitedtext", "definedfont", "defineeffect", "defineexpandable", "defineexternalfigure", "definefallbackfamily", "definefieldbody", "definefieldbodyset", "definefieldcategory", "definefileconstant", "definefilefallback", "definefilesynonym", "definefiller", "definefirstline", "definefittingpage", "definefontalternative", "definefontfallback", "definefontfamily", "definefontfamilypreset", "definefontfeature", "definefontfile", "definefontsize", "definefontsolution", "defineformula", "defineformulaalternative", "defineformulaframed", "defineframedcontent", "definefrozenfont", "defineglobalcolor", "definegraphictypesynonym", "definegridsnapping", "defineheadalternative", "definehelp", "definehigh", "definehighlight", "definehspace", "definehypenationfeatures", "defineindenting", "defineinitial", "defineinsertion", "defineinteraction", "defineinteractionbar", "defineinterfaceconstant", "defineinterfaceelement", "defineinterfacevariable", "defineinterlinespace", "defineintermediatecolor", "defineitems", "definelabelclass", "definelayerpreset", "definelinefiller", "definelinenote", "definelinenumbering", "definelines", "definelistalternative", "definelistextra", "definelow", "definelowhigh", "definelowmidhigh", "definemarginblock", "definemargindata", "definemarker", "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", "definenamespace", "definenarrower", "definenote", "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", "definieeralineas", "definieerblok", "definieerbuffer", "definieercombinatie", "definieerconversie", "definieerfiguursymbool", "definieerfont", "definieerfontstijl", "definieerfontsynoniem", "definieerhbox", "definieeringesprongentext", "definieerinteractiemenu", "definieeritemgroep", "definieerkadertekst", "definieerkleur", "definieerkleurgroep", "definieerkolomovergang", "definieerkop", "definieerkorps", "definieerkorpsomgeving", "definieerlayer", "definieerlayout", "definieerletter", "definieerlijst", "definieermarkering", "definieeromlijnd", "definieeropmaak", "definieeroverlay", "definieerpaginaovergang", "definieerpalet", "definieerpapierformaat", "definieerplaats", "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", "dimensiontocount", "directcolor", "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", "doornummeren", "dopositionaction", "doprocesslocalsetups", "doquadrupleargument", "doquadrupleempty", "doquadruplegroupempty", "doquintupleargument", "doquintupleempty", "doquintuplegroupempty", "dorechecknextindentation", "dorecurse", "dorepeatwithcommand", "doreplacefeature", "doresetandafffeature", "doresetattribute", "dorotatebox", "dosetattribute", "dosetleftskipadaption", "dosetrightskipadaption", "dosetupcheckedinterlinespace", "doseventupleargument", "doseventupleempty", "dosingleargument", "dosingleempty", "dosinglegroupempty", "dosixtupleargument", "dosixtupleempty", "dostepwiserecurse", "dosubtractfeature", "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", "enskip", "enspace", "env", "envvar", "eoverbarfill", "eoverbracefill", "eoverbracketfill", "eoverparentfill", "epos", "equaldigits", "ergens", "erightarrowfill", "erightharpoondownfill", "erightharpoonupfill", "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", "fence", "fenced", "fetchallmarkings", "fetchallmarks", "fetchmark", "fetchmarking", "fetchonemark", "fetchonemarking", "fetchruntinecommand", "fetchtwomarkings", "fetchtwomarks", "fieldbody", "fifthoffivearguments", "fifthofsixarguments", "figurefilename", "figurefilepath", "figurefiletype", "figurefullname", "figureheight", "figurenaturalheight", "figurenaturalwidth", "figuresymbol", "figurewidth", "figuur", "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", "flushboxregister", "flushcollector", "flushlayer", "flushlocalfloats", "flushnextbox", "flushnotes", "flushoutputstream", "flushshapebox", "flushtextflow", "flushtokens", "flushtoks", "fontalternative", "fontbody", "fontchar", "fontcharbyindex", "fontclass", "fontclassname", "fontface", "fontfeaturelist", "fontsize", "fontstyle", "forcecharacterstripping", "forcelocalfloats", "forgeteverypar", "forgetparameters", "formula", "formulenummer", "foundbox", "fourthoffivearguments", "fourthoffourarguments", "fourthofsixarguments", "frac", "frameddimension", "framedparameter", "framedtext", "freezedimenmacro", "freezemeasure", "frenchspacing", "fromlinenote", "frozenhbox", "gdefconvertedargument", "gdefconvertedcommand", "gebruikJSscripts", "gebruikURL", "gebruikblokken", "gebruikexterndocument", "gebruikexternfiguur", "gebruikexterngeluidsfragment", "gebruikmodule", "gebruikpad", "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", "getprivatechar", "getprivateslot", "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", "grabbufferdata", "grabbufferdatadirect", "grabuntil", "grafiek", "grayvalue", "greedysplitstring", "greeknumerals", "grijskleur", "groupedcommand", "gsetboxllx", "gsetboxlly", "gujaratinumerals", "gurmurkhinumerals", "haalbuffer", "haalmarkering", "haarlijn", "hairspace", "halfwaybox", "handhaafblokken", "handletokens", "handwritten", "hash", "hboxofvbox", "hboxreference", "hdofstring", "headhbox", "headnumbercontent", "headnumberdistance", "headnumberwidth", "headreferenceattributes", "headsetupspacing", "headtextcontent", "headtextdistance", "headtextwidth", "headvbox", "headwidth", "heightanddepthofstring", "heightofstring", "heightspanningtext", "helptekst", "helptext", "hglue", "hiddenbar", "hiddencitation", "hiddencite", "highlight", "highordinalstr", "hilo", "himilo", "hl", "hoofdstuk", "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", "includemenu", "includeversioninfo", "increment", "incrementcounter", "incrementedcounter", "incrementpagenumber", "incrementsubpagenumber", "incrementvalue", "indentation", "infofont", "infofontbold", "inheritparameter", "inhibitblank", "initializeboxstack", "inlijnd", "inlinebuffer", "inlinedbox", "inlinemath", "inlinemathematics", "inlinemessage", "inlineordisplaymath", "inlinerange", "innerflushshapebox", "input", "inputfilebarename", "inputfilename", "inputfilerealsuffix", "inputfilesuffix", "inputgivenfile", "inregel", "insertpages", "installactionhandler", "installactivecharacter", "installanddefineactivecharacter", "installattributestack", "installautocommandhandler", "installautosetuphandler", "installbasicautosetuphandler", "installbasicparameterhandler", "installbottomframerenderer", "installcommandhandler", "installcorenamespace", "installdefinehandler", "installdefinitionset", "installdefinitionsetmember", "installdirectcommandhandler", "installdirectparameterhandler", "installdirectparametersethandler", "installdirectsetuphandler", "installdirectstyleandcolorhandler", "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", "intermezzo", "intertext", "invokepageheandler", "invullijnen", "invulregel", "invultekst", "inwilijnd", "istltdir", "istrtdir", "italic", "italicbold", "italiccorrection", "items", "itemtag", "jobfilename", "jobfilesuffix", "kadertekst", "kap", "keeplinestogether", "keepunwantedspaces", "kerncharacters", "kleur", "kleurenbalk", "kleurwaarde", "kloonveld", "kolom", "kopnummer", "koreancirclenumerals", "koreannumerals", "koreannumeralsc", "koreannumeralsp", "koreanparentnumerals", "laag", "laho", "languageCharacters", "languagecharacters", "languagecharwidth", "lastcounter", "lastcountervalue", "lastdigit", "lastlinewidth", "lastnaturalboxdp", "lastnaturalboxht", "lastnaturalboxwd", "lastpredefinedsymbol", "lastrealpage", "lastrealpagenumber", "lastsubcountervalue", "lastsubpage", "lastsubpagenumber", "lasttwodigits", "lastuserpage", "lastuserpagenumber", "lateluacode", "layeredtext", "layerheight", "layerwidth", "lazysavetaggedtwopassdata", "lazysavetwopassdata", "lbox", "left", "leftbottombox", "leftbox", "lefthbox", "leftorrighthbox", "leftorrightvbox", "leftorrightvtop", "leftskipadaption", "leftsubguillemot", "lefttopbox", "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", "limtatefirstline", "linespanningtext", "listcitation", "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", "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", "margindata", "markcontent", "markeer", "markinjector", "mat", "math", "mathbf", "mathbi", "mathblackboard", "mathbs", "mathcommand", "mathdefault", "mathfraktur", "mathfunction", "mathit", "mathitalic", "mathop", "mathrm", "mathscript", "mathsl", "mathss", "mathtext", "mathtextbf", "mathtextbi", "mathtextbs", "mathtextit", "mathtextsl", "mathtexttf", "mathtf", "mathtriplet", "mathtt", "mathupright", "mathword", "mathwordbf", "mathwordbi", "mathwordbs", "mathwordit", "mathwordsl", "mathwordtf", "mbox", "mcframed", "md", "measure", "measured", "medskip", "medspace", "menubutton", "mequal", "message", "metaTeX", "mfence", "mfunction", "mfunctionlabeltext", "mhbox", "mhookleftarrow", "mhookrightarrow", "middle", "middlebox", "midhbox", "minimalhbox", "mixedcaps", "mkvibuffer", "mleftarrow", "mleftharpoondown", "mleftharpoonup", "mleftrightarrow", "mleftrightharpoons", "mmapsto", "moduleparameter", "molecule", "mono", "monobold", "mononormal", "monthlong", "monthshort", "mp", "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", "nobar", "nocitation", "nocite", "nodetostring", "noffigurepages", "noflines", "noflocalfloats", "noindentation", "noitem", "nokap", "nonfrenchspacing", "nonmathematics", "noot", "normal", "normalboldface", "normalframedwithsettings", "normalizebodyfontsize", "normalizedfontsize", "normalizefontdepth", "normalizefontheight", "normalizefontline", "normalizefontwidth", "normalizetextdepth", "normalizetextheight", "normalizetextline", "normalizetextwidth", "normaltypeface", "notesymbol", "ntimes", "numberofpoints", "obeydepth", "objectdepth", "objectheight", "objectmargin", "objectwidth", "obox", "offset", "offsetbox", "omgeving", "omlaag", "omlijnd", "onbekend", "onderdeel", "onderwerp", "onedigitrounding", "op", "oppagina", "opsomming", "ordinaldaynumber", "ordinalstr", "ornamenttext", "outputfilename", "outputstreambox", "outputstreamcopy", "outputstreamunvbox", "outputstreamunvcopy", "over", "overbar", "overbars", "overbartext", "overbarunderbar", "overbrace", "overbracetext", "overbraceunderbrace", "overbracket", "overbrackettext", "overbracketunderbracket", "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", "pagestaterealpage", "pagina", "paginanummer", "paginareferentie", "paletsize", "paragraaf", "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", "plaatslijst", "plaatslijstmetsynoniemen", "plaatslokalevoetnoten", "plaatsnaastelkaar", "plaatsonderelkaar", "plaatsopgrid", "plaatspaginanummer", "plaatsplaatsblok", "plaatsregister", "plaatsruwelijst", "plaatssamengesteldelijst", "plaatssubformule", "plaatsvoetnoten", "placeattachments", "placebtxrendering", "placecitation", "placecomments", "placecurrentformulanumber", "placedbox", "placefloatwithsetups", "placeframed", "placehelp", "placeinitial", "placelayer", "placelayeredtext", "placelistofpublications", "placelistofsorts", "placelocalnotes", "placement", "placenamedfloat", "placenamedformula", "placenotes", "placepairedbox", "placeparallel", "placerenderingwindow", "popattribute", "popmacro", "popmode", "popsystemmode", "positioneer", "positionoverlay", "positionregionoverlay", "postponenotes", "predefinedfont", "predefinefont", "predefinesymbol", "prefixedpagenumber", "prependetoks", "prependgvalue", "prependtocommalist", "prependtoks", "prependtoksonce", "prependvalue", "presetdocument", "presetfieldsymbols", "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", "profiledbox", "profilegivenbox", "programma", "projekt", "pseudoMixedCapped", "pseudoSmallCapped", "pseudoSmallcapped", "pseudosmallcapped", "punten", "purenumber", "pushattribute", "pushbutton", "pushmacro", "pushmode", "pushoutputstream", "pushsystemmode", "qquad", "quad", "quads", "quitcommalist", "quitprevcommalist", "quittypescriptscanning", "raisebox", "randomizetext", "randomnumber", "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", "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", "replaceincommalist", "replaceword", "rescan", "rescanwithsetup", "resetMPdrawing", "resetMPenvironment", "resetMPinstance", "resetallattributes", "resetandaddfeature", "resetbar", "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", "resolvedglyphdirect", "resolvedglyphstyled", "restartcounter", "restorebox", "restorecatcodes", "restorecounter", "restorecurrentattributes", "restoreendofline", "restoreglobalbodyfont", "reusableMPgraphic", "reuseMPgraphic", "reuserandomseed", "revivefeature", "rfence", "rhbox", "right", "rightbottombox", "rightbox", "righthbox", "rightorleftpageaction", "rightskipadaption", "rightsubguillemot", "righttolefthbox", "righttoleftvbox", "righttoleftvtop", "righttopbox", "rlap", "robustaddtocommalist", "robustdoifelseinset", "robustdoifinsetelse", "robustpretocommalist", "rollbutton", "roman", "romeins", "rooster", "roteer", "rtop", "ruledhbox", "ruledhpack", "ruledmbox", "ruledtopv", "ruledtpack", "ruledvbox", "ruledvpack", "ruledvtop", "runMPbuffer", "runninghbox", "safechar", "sans", "sansbold", "sansnormal", "sansserif", "savebox", "savebtxdataset", "savecounter", "savecurrentattributes", "savenormalmeaning", "savetaggedtwopassdata", "savetwopassdata", "sbox", "schaal", "scherm", "schrijfnaarlijst", "schrijftussenlijst", "sd", "secondoffivearguments", "secondoffourarguments", "secondofsixarguments", "secondofthreearguments", "secondofthreeunexpanded", "secondoftwoarguments", "secondoftwounexpanded", "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", "setfractions", "setgmeasure", "setgvalue", "setgvariable", "setgvariables", "sethboxregister", "sethyphenatedurlafter", "sethyphenatedurlbefore", "sethyphenatedurlnormal", "sethyphenationfeatures", "setinitial", "setinjector", "setinteraction", "setinterfacecommand", "setinterfaceconstant", "setinterfaceelements", "setinterfacemessage", "setinterfacevariable", "setinternalrendering", "setitaliccorrection", "setlayer", "setlayerframed", "setlayertext", "setlinefiller", "setlocalhsize", "setmainbodyfont", "setmainparbuilder", "setmarker", "setmarking", "setmathstyle", "setmeasure", "setmessagetext", "setmode", "setnostrut", "setnote", "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", "setupMPgraphics", "setupMPinstance", "setupMPpage", "setupMPvariables", "setupTABLE", "setupTEXpage", "setupattachment", "setupbackend", "setupbar", "setupbleeding", "setupbookmark", "setupbtx", "setupbtxdataset", "setupbtxlist", "setupbtxregister", "setupbtxrendering", "setupbutton", "setupcharacterkerning", "setupcharacterspacing", "setupchemical", "setupchemicalframed", "setupcollector", "setupcolumnspan", "setupcombination", "setupcounter", "setupdataset", "setupdelimitedtext", "setupdirections", "setupdocument", "setupeffect", "setupenv", "setupexport", "setupexternalfigure", "setupexternalsoundtracks", "setupfieldbody", "setupfieldcategory", "setupfieldcontentframed", "setupfieldlabelframed", "setupfieldtotalframed", "setupfiller", "setupfirstline", "setupfittingpage", "setupfloatcaption", "setupfontexpansion", "setupfontprotrusion", "setupfonts", "setupfontsolution", "setupformulaframed", "setupframedcontent", "setupglobalreferenceprefix", "setupheadalternative", "setuphelp", "setuphigh", "setuphighlight", "setuphyphenation", "setupinitial", "setupinsertion", "setupitaliccorrection", "setuplabel", "setuplayer", "setuplayeredtext", "setuplayouttext", "setuplinefiller", "setuplinefillers", "setuplinenote", "setuplinetable", "setuplistalternative", "setuplistextra", "setuplocalfloats", "setuplocalinterlinespace", "setuplow", "setuplowhigh", "setuplowmidhigh", "setupmarginframed", "setupmarginrule", "setupmathcases", "setupmathematics", "setupmathfence", "setupmathfraction", "setupmathframed", "setupmathmatrix", "setupmathornament", "setupmathradical", "setupmathstackers", "setupmathstyle", "setupmixedcolumns", "setupmodule", "setupnotation", "setupnotations", "setupnote", "setupnotes", "setupoffset", "setupoffsetbox", "setupoutputroutine", "setuppagechecker", "setuppagegrid", "setuppagegridarea", "setuppagegridareatext", "setuppagegridlines", "setuppagegridspan", "setuppagegridstart", "setuppageinjection", "setuppageinjectionalternative", "setuppageshift", "setuppagestate", "setuppairedbox", "setupparagraph", "setupparagraphintro", "setupparallel", "setupperiods", "setuppositionbar", "setupprocessor", "setupprofile", "setupquotation", "setuprealpagenumber", "setupreferenceformat", "setupreferenceprefix", "setupreferencestructureprefix", "setupregisters", "setuprenderingwindow", "setups", "setupscale", "setupscript", "setupscripts", "setupselector", "setupshift", "setupsidebar", "setupspellchecking", "setupstretched", "setupstruts", "setupstyle", "setupsubformula", "setuptabulation", "setuptagging", "setuptextflow", "setuptooltip", "setupunit", "setupuserpagenumber", "setupversion", "setupviewerlayer", "setupvspacing", "setupwithargument", "setupwithargumentswapped", "setupxml", "setupxtable", "setuvalue", "setuxvalue", "setvalue", "setvariable", "setvariables", "setvboxregister", "setvisualizerfont", "setvtopregister", "setwidthof", "setxmeasure", "setxvalue", "setxvariable", "setxvariables", "sfrac", "shapedhbox", "showallmakeup", "showattributes", "showboxes", "showbtxdatasetauthors", "showbtxdatasetcompleteness", "showbtxdatasetfields", "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", "simplegroupedcommand", "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", "som", "someheadnumber", "somekindoftab", "somelocalfloat", "somenamedheadnumber", "someplace", "sp", "spanishNumerals", "spanishnumerals", "spatie", "speech", "spiegel", "splitatasterisk", "splitatcolon", "splitatcolons", "splitatcomma", "splitdfrac", "splitfilename", "splitfrac", "splitoffbase", "splitofffull", "splitoffkind", "splitoffname", "splitoffpath", "splitoffroot", "splitofftokens", "splitofftype", "splitsplaatsblok", "splitstring", "spraak", "spreadhbox", "sqrt", "stackrel", "startJScode", "startJSpreamble", "startMPclip", "startMPcode", "startMPdefinitions", "startMPdrawing", "startMPenvironment", "startMPextensions", "startMPinclusions", "startMPinitializations", "startMPpage", "startMPpositiongraphic", "startMPpositionmethod", "startMPrun", "startTABLE", "startTABLEbody", "startTABLEfoot", "startTABLEhead", "startTABLEnext", "startTC", "startTD", "startTDs", "startTEXpage", "startTH", "startTN", "startTR", "startTRs", "startTX", "startTY", "startaanhangsel", "startachtergrond", "startallmodes", "startarrangedpages", "startaside", "startattachment", "startbar", "startbinom", "startbitmapimage", "startblockquote", "startblokcitaat", "startbtxrenderingdefinitions", "startbuffer", "startbutton", "startcatcodetable", "startcharacteralign", "startcheckedfences", "startchemical", "startcitaat", "startciteer", "startcollect", "startcollecting", "startcolorintent", "startcoloronly", "startcolorset", "startcolumns", "startcolumnspan", "startcombination", "startcomment", "startcommentaar", "startcontextcode", "startcontextdefinitioncode", "startctxfunction", "startctxfunctiondefinition", "startcurrentcolor", "startcurrentlistentrywrapper", "startdbinom", "startdelimited", "startdelimitedtext", "startdfrac", "startdisplaymath", "startdmath", "startdocument", "startdoorstreep", "startdoorstrepen", "starteffect", "startelement", "startembeddedxtable", "startendofline", "startexceptions", "startexpanded", "startexpandedcollect", "startextendedcatcodetable", "startexternalfigurecollection", "startfigure", "startfiguur", "startfitfieldframed", "startfittingpage", "startfloatcombination", "startfont", "startfontclass", "startfontsolution", "startformula", "startformulas", "startfrac", "startframedcontent", "startframedtext", "startgrafiek", "startgridsnapping", "starthbox", "starthboxestohbox", "starthboxregister", "starthelptekst", "starthelptext", "starthiddenbar", "starthiding", "starthighlight", "starthoofdstuk", "starthyphenation", "startimath", "startindentation", "startindentedtext", "startinmframed", "startinteractiemenu", "startinteraction", "startinterface", "startintermezzo", "startintertext", "startitemgroup", "startkadertekst", "startkantlijn", "startkleur", "startknockout", "startkop", "startlayout", "startlinefiller", "startlinenumbering", "startlinetable", "startlinetablebody", "startlinetablecell", "startlinetablehead", "startlocalheadsetup", "startlocallinecorrection", "startlocalnotes", "startlocalsetups", "startlokalevoetnoten", "startlua", "startluacode", "startluaparameterset", "startluasetups", "startmakeup", "startmargeblok", "startmarkedcontent", "startmathmode", "startmathstyle", "startmatrices", "startmcframed", "startmdformula", "startmframed", "startmixedcolumns", "startmode", "startmodeset", "startmodule", "startmoduletestsection", "startmpformula", "startnaar", "startnamedsection", "startnamedsubformulas", "startnarrow", "startnarrower", "startnegative", "startnicelyfilledbox", "startnobar", "startnointerference", "startnotallmodes", "startnotext", "startnotmode", "startomgeving", "startomlijnd", "startonderdeel", "startonderstreep", "startonderstrepen", "startonderwerp", "startopelkaar", "startopposite", "startopsomming", "startoutputstream", "startoverlay", "startoverprint", "startoverstreep", "startoverstrepen", "startpagecomment", "startpagefigure", "startpagegrid", "startpagegridspan", "startpagelayout", "startpar", "startparagraaf", "startparagraph", "startparagraphs", "startparagraphscell", "startparbuilder", "startpath", "startplaatsformule", "startplacepairedbox", "startpositioning", "startpositionoverlay", "startpositive", "startpostponing", "startprocessassignmentcommand", "startprocessassignmentlist", "startprocesscommacommand", "startprocesscommalist", "startprodukt", "startprojekt", "startprotect", "startprotectedcolors", "startpublicatie", "startpunctuation", "startrandomized", "startrandomseed", "startrawsetups", "startreadingfile", "startreferenceprefix", "startregel", "startregelcorrectie", "startregime", "startregister", "startreusableMPgraphic", "startscript", "startsdformula", "startsectionblock", "startsectionblockenvironment", "startsectionlevel", "startsetups", "startsfrac", "startshapebox", "startshift", "startsidebar", "startsimplecolumns", "startsom", "startspecialitem", "startspeech", "startspformula", "startspraak", "startspread", "startstartstop", "startstaticMPfigure", "startstaticMPgraphic", "startstrictinspectnextcharacter", "startstructurepageregister", "startstrut", "startstyle", "startsubformulas", "startsubjectlevel", "startsubonderwerp", "startsubparagraaf", "startsubsentence", "startsubstack", "startsubsubonderwerp", "startsubsubparagraaf", "startsubsubsubonderwerp", "startsubsubsubparagraaf", "startsubsubsubsubonderwerp", "startsubsubsubsubparagraaf", "startsymbolset", "starttabel", "starttable", "starttablehead", "starttables", "starttabletail", "starttabulate", "starttabulatehead", "starttabulatetail", "starttagged", "starttbinom", "starttekstachtergrond", "starttekstlijn", "starttexcode", "starttexdefinition", "starttext", "starttextbackgroundmanual", "starttextcolor", "starttextcolorintent", "starttextflow", "starttitel", "starttokens", "starttransparent", "starttypescript", "starttypescriptcollection", "startunderdash", "startunderdashes", "startunderdot", "startunderdots", "startunderrandom", "startunderrandoms", "startunderstrike", "startunderstrikes", "startunframed", "startuniqueMPgraphic", "startuniqueMPpagegraphic", "startunpacked", "startusableMPgraphic", "startuseMPgraphic", "startusemathstyleparameter", "startusingbtxspecification", "startvbox", "startvboxregister", "startvboxtohbox", "startvboxtohboxseparator", "startviewerlayer", "startvtop", "startvtopregister", "startxcell", "startxcellgroup", "startxfrac", "startxgroup", "startxmldisplayverbatim", "startxmlinlineverbatim", "startxmlraw", "startxmlsetups", "startxrow", "startxrowgroup", "startxtable", "startxtablebody", "startxtablefoot", "startxtablehead", "startxtablenext", "startxxfrac", "stelachtergrondenin", "stelachtergrondin", "stelalineasin", "stelarrangerenin", "stelblankoin", "stelblokin", "stelblokjesin", "stelblokkopjein", "stelbovenin", "stelboventekstenin", "stelbufferin", "stelciterenin", "stelclipin", "stelcommentaarin", "steldoordefinierenin", "steldoornummerenin", "steldunnelijnenin", "stelformulein", "stelformulierenin", "stelhoofdin", "stelhoofdtekstenin", "stelingesprongentextin", "stelinmargein", "stelinspringenin", "stelinteractiebalkin", "stelinteractiein", "stelinteractiemenuin", "stelinteractieschermin", "stelinterliniein", "stelinvullijnenin", "stelinvulregelsin", "stelitemgroepin", "stelitemsin", "stelkadertekstin", "stelkantlijnin", "stelkapitalenin", "stelkleurenin", "stelkleurin", "stelkolommenin", "stelkopin", "stelkopnummerin", "stelkoppeltekenin", "stelkoppenin", "stelkorpsin", "stellayoutin", "stellijndiktein", "stellijstin", "stelmargeblokkenin", "stelmarkeringin", "stelnaastplaatsenin", "stelomlijndin", "stelonderin", "stelondertekstenin", "stelopmaakin", "stelopsommingenin", "stelpaginacommentaarin", "stelpaginanummerin", "stelpaginanummeringin", "stelpaginaovergangenin", "stelpaletin", "stelpapierformaatin", "stelpapierin", "stelparagraafnummerenin", "stelplaatsblokin", "stelplaatsbloksplitsenin", "stelplaatsin", "stelpositionerenin", "stelprogrammasin", "stelrefererenin", "stelregelnummerenin", "stelregelsin", "stelregisterin", "stelroterenin", "stelsamengesteldelijstin", "stelsectieblokin", "stelsmallerin", "stelsorterenin", "stelspatieringin", "stelstartstopin", "stelsubpaginanummerin", "stelsymboolsetin", "stelsynoniemenin", "steltaalin", "steltabellenin", "steltabulatiein", "steltekstachtergrondin", "steltekstin", "steltekstinhoudin", "steltekstlijnenin", "stelteksttekstenin", "steltolerantiein", "steltypein", "steltypenin", "stelurlin", "stelveldenin", "stelveldin", "stelvoetin", "stelvoettekstenin", "stelwiskundeuitlijnenin", "stelwitruimtein", "stopJScode", "stopJSpreamble", "stopMPclip", "stopMPcode", "stopMPdefinitions", "stopMPdrawing", "stopMPenvironment", "stopMPextensions", "stopMPinclusions", "stopMPinitializations", "stopMPpage", "stopMPpositiongraphic", "stopMPpositionmethod", "stopMPrun", "stopTABLE", "stopTABLEbody", "stopTABLEfoot", "stopTABLEhead", "stopTABLEnext", "stopTC", "stopTD", "stopTDs", "stopTEXpage", "stopTH", "stopTN", "stopTR", "stopTRs", "stopTX", "stopTY", "stopaanhangsel", "stopachtergrond", "stopallmodes", "stoparrangedpages", "stopaside", "stopattachment", "stopbar", "stopbinom", "stopbitmapimage", "stopblockquote", "stopblokcitaat", "stopbtxrenderingdefinitions", "stopbuffer", "stopbutton", "stopcatcodetable", "stopcharacteralign", "stopcheckedfences", "stopchemical", "stopcitaat", "stopciteer", "stopcollect", "stopcollecting", "stopcolorintent", "stopcoloronly", "stopcolorset", "stopcolumns", "stopcolumnspan", "stopcombination", "stopcomment", "stopcommentaar", "stopcontextcode", "stopcontextdefinitioncode", "stopctxfunction", "stopctxfunctiondefinition", "stopcurrentcolor", "stopcurrentlistentrywrapper", "stopdbinom", "stopdelimited", "stopdelimitedtext", "stopdfrac", "stopdisplaymath", "stopdmath", "stopdocument", "stopdoorstreep", "stopdoorstrepen", "stopeffect", "stopelement", "stopembeddedxtable", "stopendofline", "stopexceptions", "stopexpanded", "stopexpandedcollect", "stopextendedcatcodetable", "stopexternalfigurecollection", "stopfigure", "stopfiguur", "stopfitfieldframed", "stopfittingpage", "stopfloatcombination", "stopfont", "stopfontclass", "stopfontsolution", "stopformula", "stopformulas", "stopfrac", "stopframedcontent", "stopframedtext", "stopgrafiek", "stopgridsnapping", "stophbox", "stophboxestohbox", "stophboxregister", "stophelptekst", "stophelptext", "stophiddenbar", "stophiding", "stophighlight", "stophoofdstuk", "stophyphenation", "stopimath", "stopindentation", "stopindentedtext", "stopinmframed", "stopinteractiemenu", "stopinteraction", "stopinterface", "stopintermezzo", "stopintertext", "stopitemgroup", "stopkadertekst", "stopkantlijn", "stopkleur", "stopknockout", "stopkop", "stoplayout", "stoplinefiller", "stoplinenumbering", "stoplinetable", "stoplinetablebody", "stoplinetablecell", "stoplinetablehead", "stoplocalheadsetup", "stoplocallinecorrection", "stoplocalnotes", "stoplocalsetups", "stoplokalevoetnoten", "stoplua", "stopluacode", "stopluaparameterset", "stopluasetups", "stopmakeup", "stopmargeblok", "stopmarkedcontent", "stopmathmode", "stopmathstyle", "stopmatrices", "stopmcframed", "stopmdformula", "stopmframed", "stopmixedcolumns", "stopmode", "stopmodeset", "stopmodule", "stopmoduletestsection", "stopmpformula", "stopnaar", "stopnamedsection", "stopnamedsubformulas", "stopnarrow", "stopnarrower", "stopnegative", "stopnicelyfilledbox", "stopnobar", "stopnointerference", "stopnotallmodes", "stopnotext", "stopnotmode", "stopomgeving", "stopomlijnd", "stoponderdeel", "stoponderstreep", "stoponderstrepen", "stoponderwerp", "stopopelkaar", "stopopposite", "stopopsomming", "stopoutputstream", "stopoverlay", "stopoverprint", "stopoverstreep", "stopoverstrepen", "stoppagecomment", "stoppagefigure", "stoppagegrid", "stoppagegridspan", "stoppagelayout", "stoppar", "stopparagraaf", "stopparagraph", "stopparagraphs", "stopparagraphscell", "stopparbuilder", "stoppath", "stopplaatsformule", "stopplacepairedbox", "stoppositioning", "stoppositionoverlay", "stoppositive", "stoppostponing", "stopprocessassignmentcommand", "stopprocessassignmentlist", "stopprocesscommacommand", "stopprocesscommalist", "stopprodukt", "stopprojekt", "stopprotect", "stopprotectedcolors", "stoppublicatie", "stoppunctuation", "stoprandomized", "stoprandomseed", "stoprawsetups", "stopreadingfile", "stopreferenceprefix", "stopregel", "stopregelcorrectie", "stopregime", "stopregister", "stopreusableMPgraphic", "stopscript", "stopsdformula", "stopsectionblock", "stopsectionblockenvironment", "stopsectionlevel", "stopsetups", "stopsfrac", "stopshapebox", "stopshift", "stopsidebar", "stopsimplecolumns", "stopsom", "stopspecialitem", "stopspeech", "stopspformula", "stopspraak", "stopspread", "stopstartstop", "stopstaticMPfigure", "stopstaticMPgraphic", "stopstrictinspectnextcharacter", "stopstructurepageregister", "stopstrut", "stopstyle", "stopsubformulas", "stopsubjectlevel", "stopsubonderwerp", "stopsubparagraaf", "stopsubsentence", "stopsubstack", "stopsubsubonderwerp", "stopsubsubparagraaf", "stopsubsubsubonderwerp", "stopsubsubsubparagraaf", "stopsubsubsubsubonderwerp", "stopsubsubsubsubparagraaf", "stopsymbolset", "stoptabel", "stoptable", "stoptablehead", "stoptables", "stoptabletail", "stoptabulate", "stoptabulatehead", "stoptabulatetail", "stoptagged", "stoptbinom", "stoptekstachtergrond", "stoptekstlijn", "stoptexcode", "stoptexdefinition", "stoptext", "stoptextbackgroundmanual", "stoptextcolor", "stoptextcolorintent", "stoptextflow", "stoptitel", "stoptokens", "stoptransparent", "stoptypescript", "stoptypescriptcollection", "stopunderdash", "stopunderdashes", "stopunderdot", "stopunderdots", "stopunderrandom", "stopunderrandoms", "stopunderstrike", "stopunderstrikes", "stopunframed", "stopuniqueMPgraphic", "stopuniqueMPpagegraphic", "stopunpacked", "stopusableMPgraphic", "stopuseMPgraphic", "stopusemathstyleparameter", "stopusingbtxspecification", "stopvbox", "stopvboxregister", "stopvboxtohbox", "stopvboxtohboxseparator", "stopviewerlayer", "stopvtop", "stopvtopregister", "stopxcell", "stopxcellgroup", "stopxfrac", "stopxgroup", "stopxmldisplayverbatim", "stopxmlinlineverbatim", "stopxmlraw", "stopxmlsetups", "stopxrow", "stopxrowgroup", "stopxtable", "stopxtablebody", "stopxtablefoot", "stopxtablehead", "stopxtablenext", "stopxxfrac", "strictdoifelsenextoptional", "strictdoifnextoptionalelse", "stripcharacter", "strippedcsname", "stripspaces", "structurelistuservariable", "structurenumber", "structuretitle", "structureuservariable", "structurevariable", "strut", "strutdp", "strutht", "struthtdp", "struttedbox", "strutwd", "style", "styleinstance", "subonderwerp", "subpaginanummer", "subparagraaf", "subsentence", "substituteincommalist", "subsubonderwerp", "subsubparagraaf", "subsubsubonderwerp", "subsubsubparagraaf", "subsubsubsubonderwerp", "subsubsubsubparagraaf", "subtractfeature", "swapcounts", "swapdimens", "swapface", "swapmacros", "swaptypeface", "switchnaarkorps", "switchstyleonly", "switchtocolor", "switchtointerlinespace", "symbolreference", "symbool", "synchronizeblank", "synchronizeindenting", "synchronizemarking", "synchronizeoutputstreams", "synchronizestrut", "synchronizewhitespace", "systemlog", "systemlogfirst", "systemloglast", "systemsetups", "tLeftarrow", "tLeftrightarrow", "tRightarrow", "taal", "tabel", "tabulateautoline", "tabulateautorule", "tabulateline", "tabulaterule", "taggedctxcommand", "taggedlabeltexts", "tbinom", "tbox", "tekstlijn", "tekstreferentie", "tequal", "testandsplitstring", "testfeature", "testfeatureonce", "testkolom", "testpageonly", "testpagesync", "testpagina", "testtokens", "tex", "texdefinition", "texsetup", "textcitation", "textcite", "textcontrolspace", "textflowcollector", "textmath", "textminus", "textormathchar", "textplus", "textvisiblespace", "tfrac", "thainumerals", "thefirstcharacter", "thenormalizedbodyfontsize", "theremainingcharacters", "thickspace", "thinspace", "thirdoffivearguments", "thirdoffourarguments", "thirdofsixarguments", "thirdofthreearguments", "thirdofthreeunexpanded", "thookleftarrow", "thookrightarrow", "threedigitrounding", "tibetannumerals", "tightlayer", "tinyfont", "titel", "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", "transparent", "trel", "trightarrow", "trightharpoondown", "trightharpoonup", "trightleftharpoons", "trightoverleftarrow", "triplebond", "truefilename", "truefontname", "ttriplerel", "ttwoheadleftarrow", "ttwoheadrightarrow", "twodigitrounding", "tx", "txx", "typ", "type", "typebuffer", "typedefinedbuffer", "typeface", "typefile", "typescriptone", "typescriptprefix", "typescriptthree", "typescripttwo", "typesetbuffer", "typesetfile", "uconvertnumber", "uedcatcodecommand", "uit", "uitgerekt", "undefinevalue", "undepthed", "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", "unprotected", "unregisterhyphenationpattern", "unspaceafter", "unspaceargument", "unspaced", "unspacestring", "untexargument", "untexcommand", "uppercased", "uppercasestring", "upperleftdoubleninequote", "upperleftdoublesixquote", "upperleftsingleninequote", "upperleftsinglesixquote", "upperrightdoubleninequote", "upperrightdoublesixquote", "upperrightsingleninequote", "upperrightsinglesixquote", "url", "useMPenvironmentbuffer", "useMPgraphic", "useMPlibrary", "useMPrun", "useMPvariables", "useblankparameter", "usebodyfont", "usebodyfontparameter", "usebtxdataset", "usebtxdefinitions", "usecolors", "usecomponent", "usedummycolorparameter", "usedummystyleandcolor", "usedummystyleparameter", "useenvironment", "useexternalrendering", "usefigurebase", "usefile", "usegridparameter", "useindentingparameter", "useindentnextparameter", "useinterlinespaceparameter", "uselanguageparameter", "useluamodule", "usemathstyleparameter", "useproduct", "useprofileparameter", "useproject", "usereferenceparameter", "userpagenumber", "usesetupsparameter", "usestaticMPfigure", "usesubpath", "usetexmodule", "usezipfile", "utfchar", "utflower", "utfupper", "utilityregisterlength", "vastespatie", "vastespaties", "vboxreference", "veld", "veldstapel", "verbatim", "verbatimstring", "verbergblokken", "verbergen", "verbosenumber", "vergelijkkleurgroep", "vergelijkpalet", "versie", "vertaal", "verticalgrowingbar", "verticalpositionbar", "verwerkblokken", "vglue", "viewerlayer", "vl", "voetnoottekst", "volledigepaginanummer", "volledigregister", "voluit", "vphantom", "vpos", "vsmash", "vsmashbox", "vsmashed", "vspace", "vspacing", "wdofstring", "weekdag", "widthofstring", "widthspanningtext", "wilijnd", "wiskunde", "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", "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", "Lua", "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", "MPwhd", "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", "TEXpage", "TaBlE", "TeX", "TheNormalizedFontSize", "TransparencyHack", "VerboseNumber", "WEEKDAY", "WORD", "WORDS", "WidthSpanningText", "Word", "Words", "XETEX", "XeTeX", "abjadnaivenumerals", "abjadnodotnumerals", "abjadnumerals", "activatespacehandler", "adaptcollector", "adaptfontfeature", "adaptpapersize", "addfeature", "addtoJSpreamble", "addtocommalist", "addvalue", "aftersplitstring", "aftertestandsplitstring", "alignmentcharacter", "allinputpaths", "alphabeticnumerals", "alwayscitation", "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", "aside", "assignalfadimension", "assigndimen", "assigndimension", "assignifempty", "assigntranslation", "assignvalue", "assignwidth", "assumelongusagecs", "astype", "attachment", "autocap", "autodirhbox", "autodirvbox", "autodirvtop", "autoinsertnextspace", "automathematics", "autosetups", "availablehsize", "averagecharwidth", "backgroundimage", "backgroundimagefill", "backgroundline", "basegrid", "baselineleftbox", "baselinemiddlebox", "baselinerightbox", "bbox", "beforesplitstring", "beforetestandsplitstring", "big", "bigbodyfont", "bigg", "bigger", "biggl", "biggm", "biggr", "bigl", "bigm", "bigr", "bigskip", "binom", "bitmapimage", "blap", "bleed", "bleedheight", "bleedwidth", "blockligatures", "blockquote", "bodyfontenvironmentlist", "bodyfontsize", "bold", "boldface", "bolditalic", "boldslanted", "booleanmodevalue", "bottombox", "bottomleftbox", "bottomrightbox", "boxcursor", "boxmarker", "boxofsize", "boxreference", "bpos", "bthiddencitation", "btxabbreviatedjournal", "btxaddjournal", "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", "btxlistcitation", "btxloadjournalist", "btxoneorrange", "btxremapauthor", "btxsavejournalist", "btxsetup", "btxsingularorplural", "btxsingularplural", "btxtextcitation", "calligraphic", "camel", "cap", "catcodetablename", "cbox", "centerbox", "centeredbox", "centerednextbox", "cfrac", "chardescription", "charwidthlanguage", "checkcharacteralign", "checkedchar", "checkedfiller", "checkedstrippedcsname", "checkinjector", "checknextindentation", "checknextinjector", "checkpage", "checkparameters", "checkpreviousinjector", "checksoundtrack", "checktwopassdata", "checkvariables", "chem", "chemical", "chemicalbottext", "chemicalmidtext", "chemicalsymbol", "chemicaltext", "chemicaltoptext", "chineseallnumerals", "chinesecapnumerals", "chinesenumerals", "citation", "cite", "clap", "classfont", "cldcommand", "cldcontext", "cldloadfile", "cldprocessfile", "cleftarrow", "collect", "collectedtext", "collectexpanded", "colorcomponents", "colored", "coloronly", "columnbreak", "combinepages", "commalistelement", "commalistsentence", "commalistsize", "comment", "comparedimension", "comparedimensioneps", "completebtxrendering", "completelist", "completelistofpublications", "completelistofsorts", "completelistofsynonyms", "complexorsimple", "complexorsimpleempty", "composedcollector", "composedlayer", "compresult", "constantdimen", "constantdimenargument", "constantemptyargument", "constantnumber", "constantnumberargument", "contentreference", "continuednumber", "continueifinputfile", "convertargument", "convertcommand", "convertedcounter", "converteddimen", "convertedsubcounter", "convertmonth", "convertvalue", "convertvboxtohbox", "copypages", "copyparameters", "copyposition", "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", "datasetvariable", "dayoftheweek", "dayspermonth", "dbinom", "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", "definecomplexorsimpleempty", "defineconversionset", "definecounter", "definedataset", "definedelimitedtext", "definedfont", "defineeffect", "defineexpandable", "defineexternalfigure", "definefallbackfamily", "definefieldbody", "definefieldbodyset", "definefieldcategory", "definefileconstant", "definefilefallback", "definefilesynonym", "definefiller", "definefirstline", "definefittingpage", "definefontalternative", "definefontfallback", "definefontfamily", "definefontfamilypreset", "definefontfeature", "definefontfile", "definefontsize", "definefontsolution", "defineformula", "defineformulaalternative", "defineformulaframed", "defineframedcontent", "definefrozenfont", "defineglobalcolor", "definegraphictypesynonym", "definegridsnapping", "defineheadalternative", "definehelp", "definehigh", "definehighlight", "definehspace", "definehypenationfeatures", "defineindentedtext", "defineindenting", "defineinitial", "defineinsertion", "defineinteraction", "defineinteractionbar", "defineinterfaceconstant", "defineinterfaceelement", "defineinterfacevariable", "defineinterlinespace", "defineintermediatecolor", "defineitems", "definelabelclass", "definelayerpreset", "definelinefiller", "definelinenote", "definelinenumbering", "definelines", "definelistalternative", "definelistextra", "definelow", "definelowhigh", "definelowmidhigh", "definemarginblock", "definemargindata", "definemarker", "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", "definenamespace", "definenarrower", "definenote", "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", "dimensiontocount", "directcolor", "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", "dorepeatwithcommand", "doreplacefeature", "doresetandafffeature", "doresetattribute", "dorotatebox", "dosetattribute", "dosetleftskipadaption", "dosetrightskipadaption", "dosetupcheckedinterlinespace", "doseventupleargument", "doseventupleempty", "dosingleargument", "dosingleempty", "dosinglegroupempty", "dosixtupleargument", "dosixtupleempty", "dostepwiserecurse", "dosubtractfeature", "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", "enskip", "enspace", "env", "envvar", "eoverbarfill", "eoverbracefill", "eoverbracketfill", "eoverparentfill", "epos", "equaldigits", "erightarrowfill", "erightharpoondownfill", "erightharpoonupfill", "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", "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", "flushboxregister", "flushcollector", "flushlayer", "flushlocalfloats", "flushnextbox", "flushnotes", "flushoutputstream", "flushshapebox", "flushtextflow", "flushtokens", "flushtoks", "fontalternative", "fontbody", "fontchar", "fontcharbyindex", "fontclass", "fontclassname", "fontface", "fontfeaturelist", "fontsize", "fontstyle", "forcecharacterstripping", "forcelocalfloats", "forgeteverypar", "forgetparameters", "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", "getprivatechar", "getprivateslot", "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", "grabbufferdata", "grabbufferdatadirect", "grabuntil", "grayvalue", "greedysplitstring", "greeknumerals", "groupedcommand", "gsetboxllx", "gsetboxlly", "gujaratinumerals", "gurmurkhinumerals", "hairspace", "halfwaybox", "handletokens", "handwritten", "hash", "hboxofvbox", "hboxreference", "hdofstring", "headhbox", "headnumbercontent", "headnumberdistance", "headnumberwidth", "headreferenceattributes", "headsetupspacing", "headtextcontent", "headtextdistance", "headtextwidth", "headvbox", "headwidth", "heightanddepthofstring", "heightofstring", "heightspanningtext", "helptext", "hglue", "hiddenbar", "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", "incrementcounter", "incrementedcounter", "incrementpagenumber", "incrementsubpagenumber", "incrementvalue", "indentation", "infofont", "infofontbold", "inheritparameter", "inhibitblank", "initializeboxstack", "inlinebuffer", "inlinedbox", "inlinemath", "inlinemathematics", "inlinemessage", "inlineordisplaymath", "inlinerange", "inmframed", "innerflushshapebox", "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", "jobfilename", "jobfilesuffix", "kap", "keeplinestogether", "keepunwantedspaces", "kerncharacters", "koreancirclenumerals", "koreannumerals", "koreannumeralsc", "koreannumeralsp", "koreanparentnumerals", "languageCharacters", "languagecharacters", "languagecharwidth", "lastcounter", "lastcountervalue", "lastdigit", "lastlinewidth", "lastnaturalboxdp", "lastnaturalboxht", "lastnaturalboxwd", "lastpredefinedsymbol", "lastrealpage", "lastrealpagenumber", "lastsubcountervalue", "lastsubpage", "lastsubpagenumber", "lasttwodigits", "lastuserpage", "lastuserpagenumber", "lateluacode", "layeredtext", "layerheight", "layerwidth", "lazysavetaggedtwopassdata", "lazysavetwopassdata", "lbox", "left", "leftbottombox", "leftbox", "lefthbox", "leftorrighthbox", "leftorrightvbox", "leftorrightvtop", "leftskipadaption", "leftsubguillemot", "lefttopbox", "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", "limtatefirstline", "linespanningtext", "listcitation", "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", "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", "mathitalic", "mathop", "mathrm", "mathscript", "mathsl", "mathss", "mathtext", "mathtextbf", "mathtextbi", "mathtextbs", "mathtextit", "mathtextsl", "mathtexttf", "mathtf", "mathtriplet", "mathtt", "mathupright", "mathword", "mathwordbf", "mathwordbi", "mathwordbs", "mathwordit", "mathwordsl", "mathwordtf", "mbox", "mcframed", "md", "measure", "measured", "medskip", "medspace", "mequal", "message", "metaTeX", "mfence", "mframed", "mfunction", "mfunctionlabeltext", "mhbox", "mhookleftarrow", "mhookrightarrow", "middle", "middlebox", "midhbox", "minimalhbox", "mixedcaps", "mkvibuffer", "mleftarrow", "mleftharpoondown", "mleftharpoonup", "mleftrightarrow", "mleftrightharpoons", "mmapsto", "moduleparameter", "molecule", "mono", "monobold", "mononormal", "monthlong", "monthshort", "mp", "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", "nobar", "nocitation", "nocite", "nodetostring", "noffigurepages", "noflines", "noflocalfloats", "noindentation", "noitem", "nonfrenchspacing", "nonmathematics", "normal", "normalboldface", "normalframedwithsettings", "normalizebodyfontsize", "normalizedfontsize", "normalizefontdepth", "normalizefontheight", "normalizefontline", "normalizefontwidth", "normalizetextdepth", "normalizetextheight", "normalizetextline", "normalizetextwidth", "normaltypeface", "notesymbol", "ntimes", "numberofpoints", "obeydepth", "objectdepth", "objectheight", "objectmargin", "objectwidth", "obox", "offset", "offsetbox", "onedigitrounding", "ordinaldaynumber", "ordinalstr", "ornamenttext", "outputfilename", "outputstreambox", "outputstreamcopy", "outputstreamunvbox", "outputstreamunvcopy", "over", "overbar", "overbars", "overbartext", "overbarunderbar", "overbrace", "overbracetext", "overbraceunderbrace", "overbracket", "overbrackettext", "overbracketunderbracket", "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", "pagestaterealpage", "paletsize", "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", "placecitation", "placecomments", "placecurrentformulanumber", "placedbox", "placefloatwithsetups", "placeframed", "placehelp", "placeinitial", "placelayer", "placelayeredtext", "placelistofpublications", "placelistofsorts", "placelistofsynonyms", "placelocalnotes", "placement", "placenamedfloat", "placenamedformula", "placenotes", "placepairedbox", "placeparallel", "placerenderingwindow", "popattribute", "popmacro", "popmode", "popsystemmode", "positionoverlay", "positionregionoverlay", "postponenotes", "predefinedfont", "predefinefont", "predefinesymbol", "prefixedpagenumber", "prependetoks", "prependgvalue", "prependtocommalist", "prependtoks", "prependtoksonce", "prependvalue", "presetdocument", "presetfieldsymbols", "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", "purenumber", "pushattribute", "pushbutton", "pushmacro", "pushmode", "pushoutputstream", "pushsystemmode", "qquad", "quad", "quads", "quitcommalist", "quitprevcommalist", "quittypescriptscanning", "raisebox", "randomizetext", "randomnumber", "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", "replaceincommalist", "replaceword", "rescan", "rescanwithsetup", "resetMPdrawing", "resetMPenvironment", "resetMPinstance", "resetallattributes", "resetandaddfeature", "resetbar", "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", "resolvedglyphdirect", "resolvedglyphstyled", "restartcounter", "restorebox", "restorecatcodes", "restorecounter", "restorecurrentattributes", "restoreendofline", "restoreglobalbodyfont", "reusableMPgraphic", "reuseMPgraphic", "reuserandomseed", "revivefeature", "rfence", "rhbox", "right", "rightbottombox", "rightbox", "righthbox", "rightorleftpageaction", "rightskipadaption", "rightsubguillemot", "righttolefthbox", "righttoleftvbox", "righttoleftvtop", "righttopbox", "rlap", "robustaddtocommalist", "robustdoifelseinset", "robustdoifinsetelse", "robustpretocommalist", "rollbutton", "roman", "rtop", "ruledhbox", "ruledhpack", "ruledmbox", "ruledtopv", "ruledtpack", "ruledvbox", "ruledvpack", "ruledvtop", "runMPbuffer", "runninghbox", "safechar", "sans", "sansbold", "sansnormal", "sansserif", "savebox", "savebtxdataset", "savebuffer", "savecounter", "savecurrentattributes", "savenormalmeaning", "savetaggedtwopassdata", "savetwopassdata", "sbox", "sd", "secondoffivearguments", "secondoffourarguments", "secondofsixarguments", "secondofthreearguments", "secondofthreeunexpanded", "secondoftwoarguments", "secondoftwounexpanded", "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", "setfractions", "setgmeasure", "setgvalue", "setgvariable", "setgvariables", "sethboxregister", "sethyphenatedurlafter", "sethyphenatedurlbefore", "sethyphenatedurlnormal", "sethyphenationfeatures", "setinitial", "setinjector", "setinteraction", "setinterfacecommand", "setinterfaceconstant", "setinterfaceelements", "setinterfacemessage", "setinterfacevariable", "setinternalrendering", "setitaliccorrection", "setlayer", "setlayerframed", "setlayertext", "setlinefiller", "setlocalhsize", "setmainbodyfont", "setmainparbuilder", "setmarker", "setmarking", "setmathstyle", "setmeasure", "setmessagetext", "setmode", "setnostrut", "setnote", "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", "setupMPgraphics", "setupMPinstance", "setupMPpage", "setupMPvariables", "setupTABLE", "setupTEXpage", "setupattachment", "setupbackend", "setupbar", "setupbleeding", "setupbookmark", "setupbtx", "setupbtxdataset", "setupbtxlist", "setupbtxregister", "setupbtxrendering", "setupbutton", "setupcapitals", "setupcharacterkerning", "setupcharacterspacing", "setupchemical", "setupchemicalframed", "setupcollector", "setupcolumnspan", "setupcombination", "setupcounter", "setupdataset", "setupdelimitedtext", "setupdescription", "setupdirections", "setupdocument", "setupeffect", "setupenumeration", "setupenv", "setupexport", "setupexternalfigure", "setupexternalsoundtracks", "setupfieldbody", "setupfieldcategory", "setupfieldcontentframed", "setupfieldlabelframed", "setupfieldtotalframed", "setupfiller", "setupfirstline", "setupfittingpage", "setupfloatcaption", "setupfontexpansion", "setupfontprotrusion", "setupfonts", "setupfontsolution", "setupformula", "setupformulaframed", "setupframedcontent", "setupframedtext", "setupglobalreferenceprefix", "setupheadalternative", "setuphelp", "setuphigh", "setuphighlight", "setuphyphenation", "setupindentedtext", "setupinitial", "setupinsertion", "setupitaliccorrection", "setuplabel", "setuplayer", "setuplayeredtext", "setuplayouttext", "setuplinefiller", "setuplinefillers", "setuplinenote", "setuplinetable", "setuplistalternative", "setuplistextra", "setuplocalfloats", "setuplocalinterlinespace", "setuplow", "setuplowhigh", "setuplowmidhigh", "setupmarginblock", "setupmargindata", "setupmarginframed", "setupmarginrule", "setupmathcases", "setupmathematics", "setupmathfence", "setupmathfraction", "setupmathframed", "setupmathmatrix", "setupmathornament", "setupmathradical", "setupmathstackers", "setupmathstyle", "setupmixedcolumns", "setupmodule", "setupnotation", "setupnotations", "setupnote", "setupnotes", "setupoffset", "setupoffsetbox", "setupoutputroutine", "setuppagechecker", "setuppagegrid", "setuppagegridarea", "setuppagegridareatext", "setuppagegridlines", "setuppagegridspan", "setuppagegridstart", "setuppageinjection", "setuppageinjectionalternative", "setuppageshift", "setuppagestate", "setuppairedbox", "setupparagraph", "setupparagraphintro", "setupparallel", "setupperiods", "setuppositionbar", "setupprocessor", "setupprofile", "setupquotation", "setuprealpagenumber", "setupreferenceformat", "setupreferenceprefix", "setupreferencestructureprefix", "setupregisters", "setuprenderingwindow", "setups", "setupscale", "setupscript", "setupscripts", "setupselector", "setupshift", "setupsidebar", "setupspellchecking", "setupstretched", "setupstruts", "setupstyle", "setupsubformula", "setuptabulation", "setuptagging", "setuptextbackground", "setuptextflow", "setuptooltip", "setupunit", "setupurl", "setupuserpagenumber", "setupversion", "setupviewerlayer", "setupvspacing", "setupwithargument", "setupwithargumentswapped", "setupxml", "setupxtable", "setuvalue", "setuxvalue", "setvalue", "setvariable", "setvariables", "setvboxregister", "setvisualizerfont", "setvtopregister", "setwidthof", "setxmeasure", "setxvalue", "setxvariable", "setxvariables", "sfrac", "shapedhbox", "showallmakeup", "showattributes", "showboxes", "showbtxdatasetauthors", "showbtxdatasetcompleteness", "showbtxdatasetfields", "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", "simplegroupedcommand", "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", "someheadnumber", "somekindoftab", "somelocalfloat", "somenamedheadnumber", "someplace", "sp", "spanishNumerals", "spanishnumerals", "speech", "splitatasterisk", "splitatcolon", "splitatcolons", "splitatcomma", "splitdfrac", "splitfilename", "splitfrac", "splitoffbase", "splitofffull", "splitoffkind", "splitoffname", "splitoffpath", "splitoffroot", "splitofftokens", "splitofftype", "splitstring", "spreadhbox", "sqrt", "stackrel", "startregister", "startstructurepageregister", "stopregister", "stopstructurepageregister", "strictdoifelsenextoptional", "strictdoifnextoptionalelse", "stripcharacter", "strippedcsname", "stripspaces", "structurelistuservariable", "structurenumber", "structuretitle", "structureuservariable", "structurevariable", "strut", "strutdp", "strutht", "struthtdp", "struttedbox", "strutwd", "style", "styleinstance", "subsentence", "substituteincommalist", "subtractfeature", "swapcounts", "swapdimens", "swapface", "swapmacros", "swaptypeface", "switchstyleonly", "switchtocolor", "switchtointerlinespace", "symbolreference", "synchronizeblank", "synchronizeindenting", "synchronizemarking", "synchronizeoutputstreams", "synchronizestrut", "synchronizewhitespace", "systemlog", "systemlogfirst", "systemloglast", "systemsetups", "tLeftarrow", "tLeftrightarrow", "tRightarrow", "tabulateautoline", "tabulateautorule", "tabulateline", "tabulaterule", "taggedctxcommand", "taggedlabeltexts", "tbinom", "tbox", "tequal", "testandsplitstring", "testfeature", "testfeatureonce", "testpageonly", "testpagesync", "testtokens", "texdefinition", "texsetup", "textcitation", "textcite", "textcontrolspace", "textflowcollector", "textmath", "textminus", "textormathchar", "textplus", "textvisiblespace", "tfrac", "thainumerals", "thefirstcharacter", "thenormalizedbodyfontsize", "theremainingcharacters", "thickspace", "thinspace", "thirdoffivearguments", "thirdoffourarguments", "thirdofsixarguments", "thirdofthreearguments", "thirdofthreeunexpanded", "thookleftarrow", "thookrightarrow", "threedigitrounding", "tibetannumerals", "tightlayer", "tinyfont", "tlap", "tleftarrow", "tleftharpoondown", "tleftharpoonup", "tleftrightarrow", "tleftrightharpoons", "tmapsto", "tochar", "tolinenote", "topbox", "topleftbox", "toplinebox", "toprightbox", "topskippedbox", "tracecatcodetables", "tracedfontname", "traceoutputroutines", "tracepositions", "transparencycomponents", "transparent", "trel", "trightarrow", "trightharpoondown", "trightharpoonup", "trightleftharpoons", "trightoverleftarrow", "triplebond", "truefilename", "truefontname", "ttriplerel", "ttwoheadleftarrow", "ttwoheadrightarrow", "twodigitrounding", "tx", "txx", "typ", "typedefinedbuffer", "typeface", "typescriptone", "typescriptprefix", "typescriptthree", "typescripttwo", "typesetbuffer", "typesetfile", "uconvertnumber", "uedcatcodecommand", "undefinevalue", "undepthed", "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", "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", "useblankparameter", "usebodyfont", "usebodyfontparameter", "usebtxdataset", "usebtxdefinitions", "usecolors", "usecomponent", "usedummycolorparameter", "usedummystyleandcolor", "usedummystyleparameter", "useenvironment", "useexternalrendering", "usefigurebase", "usefile", "usegridparameter", "useindentingparameter", "useindentnextparameter", "useinterlinespaceparameter", "uselanguageparameter", "useluamodule", "usemathstyleparameter", "useproduct", "useprofileparameter", "useproject", "usereferenceparameter", "userpagenumber", "usesetupsparameter", "usestaticMPfigure", "usesubpath", "usetexmodule", "useurl", "usezipfile", "utfchar", "utflower", "utfupper", "utilityregisterlength", "vboxreference", "verbatim", "verbatimstring", "verbosenumber", "verticalgrowingbar", "verticalpositionbar", "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", "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", "شروعMPclip", "شروعMPcode", "شروعMPdefinitions", "شروعMPdrawing", "شروعMPenvironment", "شروعMPextensions", "شروعMPinclusions", "شروعMPinitializations", "شروعMPpage", "شروعMPpositiongraphic", "شروعMPpositionmethod", "شروعMPrun", "شروعTABLE", "شروعTABLEbody", "شروعTABLEfoot", "شروعTABLEhead", "شروعTABLEnext", "شروعTC", "شروعTD", "شروعTDs", "شروعTEXpage", "شروعTH", "شروعTN", "شروعTR", "شروعTRs", "شروعTX", "شروعTY", "شروعallmodes", "شروعarrangedpages", "شروعaside", "شروعattachment", "شروعbar", "شروعbinom", "شروعbitmapimage", "شروعblockquote", "شروعbtxrenderingdefinitions", "شروعbuffer", "شروعbutton", "شروعcatcodetable", "شروعcharacteralign", "شروعcheckedfences", "شروعchemical", "شروعcollect", "شروعcollecting", "شروعcolorintent", "شروعcoloronly", "شروعcolorset", "شروعcolumns", "شروعcolumnspan", "شروعcombination", "شروعcomment", "شروعcontextcode", "شروعcontextdefinitioncode", "شروعctxfunction", "شروعctxfunctiondefinition", "شروعcurrentcolor", "شروعcurrentlistentrywrapper", "شروعdbinom", "شروعdelimited", "شروعdelimitedtext", "شروعdfrac", "شروعdisplaymath", "شروعdmath", "شروعdocument", "شروعeffect", "شروعelement", "شروعembeddedxtable", "شروعendofline", "شروعexceptions", "شروعexpanded", "شروعexpandedcollect", "شروعextendedcatcodetable", "شروعexternalfigurecollection", "شروعfigure", "شروعfitfieldframed", "شروعfittingpage", "شروعfloatcombination", "شروعfont", "شروعfontclass", "شروعfontsolution", "شروعformula", "شروعformulas", "شروعfrac", "شروعframedcontent", "شروعframedtext", "شروعgridsnapping", "شروعhbox", "شروعhboxestohbox", "شروعhboxregister", "شروعhelptext", "شروعhiddenbar", "شروعhiding", "شروعhighlight", "شروعhyphenation", "شروعimath", "شروعindentation", "شروعindentedtext", "شروعinmframed", "شروعinteraction", "شروعinterface", "شروعintertext", "شروعitemgroup", "شروعknockout", "شروعlayout", "شروعlinecorrection", "شروعlinefiller", "شروعlinenumbering", "شروعlinetable", "شروعlinetablebody", "شروعlinetablecell", "شروعlinetablehead", "شروعlocalfootnotes", "شروعlocalheadsetup", "شروعlocallinecorrection", "شروعlocalnotes", "شروعlocalsetups", "شروعlua", "شروعluacode", "شروعluaparameterset", "شروعluasetups", "شروعmakeup", "شروعmarginblock", "شروعmarkedcontent", "شروعmathmode", "شروعmathstyle", "شروعmatrices", "شروعmcframed", "شروعmdformula", "شروعmframed", "شروعmixedcolumns", "شروعmode", "شروعmodeset", "شروعmodule", "شروعmoduletestsection", "شروعmpformula", "شروعnamedsection", "شروعnamedsubformulas", "شروعnarrow", "شروعnarrower", "شروعnegative", "شروعnicelyfilledbox", "شروعnobar", "شروعnointerference", "شروعnotallmodes", "شروعnotext", "شروعnotmode", "شروعopposite", "شروعoutputstream", "شروعoverlay", "شروعoverprint", "شروعpagecomment", "شروعpagefigure", "شروعpagegrid", "شروعpagegridspan", "شروعpagelayout", "شروعpar", "شروعparagraph", "شروعparagraphs", "شروعparagraphscell", "شروعparbuilder", "شروعpath", "شروعplacepairedbox", "شروعpositioning", "شروعpositionoverlay", "شروعpositive", "شروعpostponing", "شروعprocessassignmentcommand", "شروعprocessassignmentlist", "شروعprocesscommacommand", "شروعprocesscommalist", "شروعprotect", "شروعprotectedcolors", "شروعpunctuation", "شروعrandomized", "شروعrandomseed", "شروعrawsetups", "شروعreadingfile", "شروعreferenceprefix", "شروعregime", "شروعreusableMPgraphic", "شروعscript", "شروعsdformula", "شروعsectionblock", "شروعsectionblockenvironment", "شروعsectionlevel", "شروعsetups", "شروعsfrac", "شروعshapebox", "شروعshift", "شروعsidebar", "شروعsimplecolumns", "شروعspecialitem", "شروعspeech", "شروعspformula", "شروعspread", "شروعstartstop", "شروعstaticMPfigure", "شروعstaticMPgraphic", "شروعstrictinspectnextcharacter", "شروعstrut", "شروعstyle", "شروعsubformulas", "شروعsubjectlevel", "شروعsubsentence", "شروعsubstack", "شروعsymbolset", "شروعtable", "شروعtablehead", "شروعtables", "شروعtabletail", "شروعtabulate", "شروعtabulatehead", "شروعtabulatetail", "شروعtagged", "شروعtbinom", "شروعtexcode", "شروعtexdefinition", "شروعtext", "شروعtextbackground", "شروعtextbackgroundmanual", "شروعtextcolor", "شروعtextcolorintent", "شروعtextflow", "شروعtokens", "شروعtransparent", "شروعtypescript", "شروعtypescriptcollection", "شروعunderdash", "شروعunderdashes", "شروعunderdot", "شروعunderdots", "شروعunderrandom", "شروعunderrandoms", "شروعunderstrike", "شروعunderstrikes", "شروعunframed", "شروعuniqueMPgraphic", "شروعuniqueMPpagegraphic", "شروعunpacked", "شروعusableMPgraphic", "شروعuseMPgraphic", "شروعusemathstyleparameter", "شروعusingbtxspecification", "شروعvbox", "شروعvboxregister", "شروعvboxtohbox", "شروعvboxtohboxseparator", "شروعviewerlayer", "شروعvtop", "شروعvtopregister", "شروعxcell", "شروعxcellgroup", "شروعxfrac", "شروعxgroup", "شروعxmldisplayverbatim", "شروعxmlinlineverbatim", "شروعxmlraw", "شروعxmlsetups", "شروعxrow", "شروعxrowgroup", "شروعxtable", "شروعxtablebody", "شروعxtablefoot", "شروعxtablehead", "شروعxtablenext", "شروعxxfrac", "شروعآیتم", "شروعآیتم‌بندی", "شروعبخش", "شروعبروبه", "شروعتوضیح", "شروعتولید", "شروعجدول", "شروعخط‌حاشیه", "شروعخط‌زدن", "شروعخط‌زدنها", "شروعخط‌متن", "شروعدرج‌فرمول", "شروعرنگ", "شروعزیربخش", "شروعزیرزیربخش", "شروعزیرزیرزیربخش", "شروعزیرزیرزیرزیربخش", "شروعزیرزیرزیرزیرموضوع", "شروعزیرزیرزیرموضوع", "شروعزیرزیرموضوع", "شروعزیرموضوع", "شروعسخنرانی", "شروعسر", "شروعشکل", "شروععنوان", "شروعفشرده", "شروعفصل", "شروعقالبی", "شروعمتن‌قالبی", "شروعمتن‌کمکی", "شروعمحیط", "شروعمنوی‌پانل", "شروعموضوع", "شروعمولفه", "شروعمیان‌پرده", "شروعمیله‌رو", "شروعمیله‌زیر", "شروعمیله‌ها‌رو", "شروعمیله‌‌های‌زیر", "شروعنشر", "شروعنقل", "شروعنقل‌بلوک", "شروعنقل‌قول", "شروعپروژه", "شروعپس‌زمینه", "شروعگرافیک", "شروع‌خط", "شماره‌زیرصفحه", "شماره‌سر", "شماره‌سرجاری", "شماره‌صفحه", "شماره‌صفحه‌کامل", "شماره‌فرمول", "شماره‌مبدل", "شماره‌ها", "شکافتن‌شناور", "شکل", "شکل‌خارجی", "صفحه", "صفحه‌تست", "طول‌لیست", "عرض‌خط", "عنوان", "فصل", "فضا", "فضاهای‌ثابت", "فضای‌ثابت", "فضای‌سفیدصحیح", "قالبی", "لوح‌مقایسه", "ماه", "متن‌قالبی", "متن‌پانوشت", "متن‌کمکی", "محیط", "مراجعه", "مرجع", "مرجع‌صفحه", "مرجع‌متن", "مقایسه‌گروه‌رنگ", "مقداررنگ", "مقیاس", "منوی‌پانل", "موضوع", "مولفه", "مکان", "میان‌پرده", "میدان", "میدان‌شبیه‌سازی", "میدان‌پشته", "میدان‌کپی", "میله‌رنگ", "میله‌پانل", "ناشناس", "نسخه", "نشانه‌گذاری", "نصب‌زبان", "نقطه‌ها", "نقل", "نقل‌بلوک", "نقل‌قول", "نماد", "نمایش‌آرایش", "نمایش‌بارگذاریها", "نمایش‌بستها", "نمایش‌توری", "نمایش‌رنگ", "نمایش‌طرح‌بندی", "نمایش‌قالب", "نمایش‌قلم‌بدنه", "نمایش‌لوح", "نمایش‌مجموعه‌علامت", "نمایش‌محیط‌قلم‌بدنه", "نمایش‌چاپ", "نمایش‌گروه‌رنگ", "پابا", "پایانJScode", "پایانJSpreamble", "پایانMPclip", "پایانMPcode", "پایانMPdefinitions", "پایانMPdrawing", "پایانMPenvironment", "پایانMPextensions", "پایانMPinclusions", "پایانMPinitializations", "پایانMPpage", "پایانMPpositiongraphic", "پایانMPpositionmethod", "پایانMPrun", "پایانTABLE", "پایانTABLEbody", "پایانTABLEfoot", "پایانTABLEhead", "پایانTABLEnext", "پایانTC", "پایانTD", "پایانTDs", "پایانTEXpage", "پایانTH", "پایانTN", "پایانTR", "پایانTRs", "پایانTX", "پایانTY", "پایانallmodes", "پایانarrangedpages", "پایانaside", "پایانattachment", "پایانbar", "پایانbinom", "پایانbitmapimage", "پایانblockquote", "پایانbtxrenderingdefinitions", "پایانbuffer", "پایانbutton", "پایانcatcodetable", "پایانcharacteralign", "پایانcheckedfences", "پایانchemical", "پایانcollect", "پایانcollecting", "پایانcolorintent", "پایانcoloronly", "پایانcolorset", "پایانcolumns", "پایانcolumnspan", "پایانcombination", "پایانcomment", "پایانcontextcode", "پایانcontextdefinitioncode", "پایانctxfunction", "پایانctxfunctiondefinition", "پایانcurrentcolor", "پایانcurrentlistentrywrapper", "پایانdbinom", "پایانdelimited", "پایانdelimitedtext", "پایانdfrac", "پایانdisplaymath", "پایانdmath", "پایانdocument", "پایانeffect", "پایانelement", "پایانembeddedxtable", "پایانendofline", "پایانexceptions", "پایانexpanded", "پایانexpandedcollect", "پایانextendedcatcodetable", "پایانexternalfigurecollection", "پایانfigure", "پایانfitfieldframed", "پایانfittingpage", "پایانfloatcombination", "پایانfont", "پایانfontclass", "پایانfontsolution", "پایانformula", "پایانformulas", "پایانfrac", "پایانframedcontent", "پایانframedtext", "پایانgridsnapping", "پایانhbox", "پایانhboxestohbox", "پایانhboxregister", "پایانhelptext", "پایانhiddenbar", "پایانhiding", "پایانhighlight", "پایانhyphenation", "پایانimath", "پایانindentation", "پایانindentedtext", "پایانinmframed", "پایانinteraction", "پایانinterface", "پایانintertext", "پایانitemgroup", "پایانknockout", "پایانlayout", "پایانlinecorrection", "پایانlinefiller", "پایانlinenumbering", "پایانlinetable", "پایانlinetablebody", "پایانlinetablecell", "پایانlinetablehead", "پایانlocalfootnotes", "پایانlocalheadsetup", "پایانlocallinecorrection", "پایانlocalnotes", "پایانlocalsetups", "پایانlua", "پایانluacode", "پایانluaparameterset", "پایانluasetups", "پایانmakeup", "پایانmarginblock", "پایانmarkedcontent", "پایانmathmode", "پایانmathstyle", "پایانmatrices", "پایانmcframed", "پایانmdformula", "پایانmframed", "پایانmixedcolumns", "پایانmode", "پایانmodeset", "پایانmodule", "پایانmoduletestsection", "پایانmpformula", "پایانnamedsection", "پایانnamedsubformulas", "پایانnarrow", "پایانnarrower", "پایانnegative", "پایانnicelyfilledbox", "پایانnobar", "پایانnointerference", "پایانnotallmodes", "پایانnotext", "پایانnotmode", "پایانopposite", "پایانoutputstream", "پایانoverlay", "پایانoverprint", "پایانpagecomment", "پایانpagefigure", "پایانpagegrid", "پایانpagegridspan", "پایانpagelayout", "پایانpar", "پایانparagraph", "پایانparagraphs", "پایانparagraphscell", "پایانparbuilder", "پایانpath", "پایانplacepairedbox", "پایانpositioning", "پایانpositionoverlay", "پایانpositive", "پایانpostponing", "پایانprocessassignmentcommand", "پایانprocessassignmentlist", "پایانprocesscommacommand", "پایانprocesscommalist", "پایانprotect", "پایانprotectedcolors", "پایانpunctuation", "پایانrandomized", "پایانrandomseed", "پایانrawsetups", "پایانreadingfile", "پایانreferenceprefix", "پایانregime", "پایانreusableMPgraphic", "پایانscript", "پایانsdformula", "پایانsectionblock", "پایانsectionblockenvironment", "پایانsectionlevel", "پایانsetups", "پایانsfrac", "پایانshapebox", "پایانshift", "پایانsidebar", "پایانsimplecolumns", "پایانspecialitem", "پایانspeech", "پایانspformula", "پایانspread", "پایانstartstop", "پایانstaticMPfigure", "پایانstaticMPgraphic", "پایانstrictinspectnextcharacter", "پایانstrut", "پایانstyle", "پایانsubformulas", "پایانsubjectlevel", "پایانsubsentence", "پایانsubstack", "پایانsymbolset", "پایانtable", "پایانtablehead", "پایانtables", "پایانtabletail", "پایانtabulate", "پایانtabulatehead", "پایانtabulatetail", "پایانtagged", "پایانtbinom", "پایانtexcode", "پایانtexdefinition", "پایانtext", "پایانtextbackground", "پایانtextbackgroundmanual", "پایانtextcolor", "پایانtextcolorintent", "پایانtextflow", "پایانtokens", "پایانtransparent", "پایانtypescript", "پایانtypescriptcollection", "پایانunderdash", "پایانunderdashes", "پایانunderdot", "پایانunderdots", "پایانunderrandom", "پایانunderrandoms", "پایانunderstrike", "پایانunderstrikes", "پایانunframed", "پایانuniqueMPgraphic", "پایانuniqueMPpagegraphic", "پایانunpacked", "پایانusableMPgraphic", "پایانuseMPgraphic", "پایانusemathstyleparameter", "پایانusingbtxspecification", "پایانvbox", "پایانvboxregister", "پایانvboxtohbox", "پایانvboxtohboxseparator", "پایانviewerlayer", "پایانvtop", "پایانvtopregister", "پایانxcell", "پایانxcellgroup", "پایانxfrac", "پایانxgroup", "پایانxmldisplayverbatim", "پایانxmlinlineverbatim", "پایانxmlraw", "پایانxmlsetups", "پایانxrow", "پایانxrowgroup", "پایانxtable", "پایانxtablebody", "پایانxtablefoot", "پایانxtablehead", "پایانxtablenext", "پایانxxfrac", "پایانآیتم", "پایانآیتم‌بندی", "پایانبخش", "پایانبروبه", "پایانتوضیح", "پایانتولید", "پایانجدول", "پایانخط‌حاشیه", "پایانخط‌زدن", "پایانخط‌زدنها", "پایانخط‌متن", "پایاندرج‌فرمول", "پایانرنگ", "پایانزیربخش", "پایانزیرزیربخش", "پایانزیرزیرزیربخش", "پایانزیرزیرزیرزیربخش", "پایانزیرزیرزیرزیرموضوع", "پایانزیرزیرزیرموضوع", "پایانزیرزیرموضوع", "پایانزیرموضوع", "پایانسخنرانی", "پایانسر", "پایانشکل", "پایانعنوان", "پایانفشرده", "پایانفصل", "پایانقالبی", "پایانمتن‌قالبی", "پایانمتن‌کمکی", "پایانمحیط", "پایانمنوی‌پانل", "پایانموضوع", "پایانمولفه", "پایانمیان‌پرده", "پایانمیله‌رو", "پایانمیله‌زیر", "پایانمیله‌ها‌رو", "پایانمیله‌‌های‌زیر", "پایاننشر", "پایاننقل", "پایاننقل‌بلوک", "پایاننقل‌قول", "پایانپروژه", "پایانپس‌زمینه", "پایانگرافیک", "پایان‌خط", "پایین", "پرده", "پروژه", "پرکردن‌میدان", "پس‌زمینه", "پنهان‌کردن", "چوبخط", "کشیده", "گرافیک", "گیره", "یادداشت", "یک‌جا", "یک‌خط" },
+ ["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", "Lua", "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", "MPwhd", "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", "TEXpage", "TaBlE", "TeX", "TheNormalizedFontSize", "TransparencyHack", "VerboseNumber", "WidthSpanningText", "XETEX", "XeTeX", "ZIDINSAPTAMANA", "abjadnaivenumerals", "abjadnodotnumerals", "abjadnumerals", "activatespacehandler", "adaptcollector", "adapteazaaspect", "adaptfontfeature", "adaptpapersize", "addfeature", "addtoJSpreamble", "addtocommalist", "addvalue", "adubuffer", "adumarcaje", "afiseazaaspect", "afiseazaculoare", "afiseazafonttext", "afiseazagrid", "afiseazagrupculoare", "afiseazamakeup", "afiseazamediufonttext", "afiseazapaleta", "afiseazarama", "afiseazasetari", "afiseazasetsimboluri", "afiseazastruts", "afiseazatiparire", "aftersplitstring", "aftertestandsplitstring", "alignmentcharacter", "allinputpaths", "alphabeticnumerals", "alwayscitation", "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", "ascundere", "aside", "assignalfadimension", "assigndimen", "assigndimension", "assignifempty", "assigntranslation", "assignvalue", "assignwidth", "assumelongusagecs", "astype", "attachment", "autocap", "autodirhbox", "autodirvbox", "autodirvtop", "autoinsertnextspace", "automathematics", "autosetups", "availablehsize", "averagecharwidth", "backgroundimage", "backgroundimagefill", "backgroundline", "baraculoare", "barainteractiune", "basegrid", "baselineleftbox", "baselinemiddlebox", "baselinerightbox", "bbox", "beforesplitstring", "beforetestandsplitstring", "big", "bigbodyfont", "bigg", "bigger", "biggl", "biggm", "biggr", "bigl", "bigm", "bigr", "bigskip", "binom", "bitmapimage", "blanc", "blap", "bleed", "bleedheight", "bleedwidth", "blockligatures", "blockquote", "bodyfontenvironmentlist", "bodyfontsize", "bold", "boldface", "bolditalic", "boldslanted", "booleanmodevalue", "bottombox", "bottomleftbox", "bottomrightbox", "boxcursor", "boxmarker", "boxofsize", "boxreference", "bpos", "bthiddencitation", "btxabbreviatedjournal", "btxaddjournal", "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", "btxlistcitation", "btxloadjournalist", "btxoneorrange", "btxremapauthor", "btxsavejournalist", "btxsetup", "btxsingularorplural", "btxsingularplural", "btxtextcitation", "butoaneinteractiune", "buton", "butonmeniu", "calligraphic", "camel", "camp", "capitol", "catcodetablename", "cbox", "centerbox", "centeredbox", "centerednextbox", "cfrac", "chardescription", "charwidthlanguage", "checkcharacteralign", "checkedchar", "checkedfiller", "checkedstrippedcsname", "checkinjector", "checknextindentation", "checknextinjector", "checkpage", "checkparameters", "checkpreviousinjector", "checksoundtrack", "checktwopassdata", "checkvariables", "chem", "chemical", "chemicalbottext", "chemicalmidtext", "chemicalsymbol", "chemicaltext", "chemicaltoptext", "chineseallnumerals", "chinesecapnumerals", "chinesenumerals", "citat", "citation", "cite", "clap", "classfont", "cldcommand", "cldcontext", "cldloadfile", "cldprocessfile", "cleftarrow", "clip", "cloneazacamp", "collect", "collectedtext", "collectexpanded", "coloana", "colorcomponents", "colored", "coloronly", "columnbreak", "combinepages", "comentariu", "commalistelement", "commalistsentence", "commalistsize", "comment", "comparagrupculoare", "comparapaleta", "comparedimension", "comparedimensioneps", "completeazanumarpagina", "completebtxrendering", "completelist", "completelistofpublications", "completelistofsorts", "completelistofsynonyms", "completeregister", "complexorsimple", "complexorsimpleempty", "componenta", "composedcollector", "composedlayer", "compresult", "constantdimen", "constantdimenargument", "constantemptyargument", "constantnumber", "constantnumberargument", "contentreference", "continuednumber", "continueifinputfile", "convertargument", "convertcommand", "convertedcounter", "converteddimen", "convertedsubcounter", "convertestenumar", "convertmonth", "convertvalue", "convertvboxtohbox", "copiazacamp", "copypages", "copyparameters", "copyposition", "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", "data", "datacurenta", "datasetvariable", "dayoftheweek", "dayspermonth", "dbinom", "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", "definecomplexorsimpleempty", "defineconversionset", "definecounter", "definedataset", "definedelimitedtext", "definedfont", "defineeffect", "defineexpandable", "defineexternalfigure", "definefallbackfamily", "definefieldbody", "definefieldbodyset", "definefieldcategory", "definefileconstant", "definefilefallback", "definefilesynonym", "definefiller", "definefirstline", "definefittingpage", "definefontalternative", "definefontfallback", "definefontfamily", "definefontfamilypreset", "definefontfeature", "definefontfile", "definefontsize", "definefontsolution", "defineformula", "defineformulaalternative", "defineformulaframed", "defineframedcontent", "definefrozenfont", "defineglobalcolor", "definegraphictypesynonym", "definegridsnapping", "defineheadalternative", "definehelp", "definehigh", "definehighlight", "definehspace", "definehypenationfeatures", "defineindentedtext", "defineindenting", "defineinitial", "defineinsertion", "defineinteraction", "defineinteractionbar", "defineinterfaceconstant", "defineinterfaceelement", "defineinterfacevariable", "defineinterlinespace", "defineintermediatecolor", "defineitemgroup", "defineitems", "definelabelclass", "definelayer", "definelayerpreset", "definelayout", "definelinefiller", "definelinenote", "definelinenumbering", "definelines", "definelistalternative", "definelistextra", "definelow", "definelowhigh", "definelowmidhigh", "definemarginblock", "definemargindata", "definemarker", "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", "definenamespace", "definenarrower", "definenote", "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", "definesteantet", "definestebloc", "definesteblocsectiune", "definestebuffer", "definestecamp", "definesteconversie", "definesteculoare", "definestedescriere", "definestedimensiunehartie", "definesteenumerare", "definesteeticheta", "definestefloat", "definestefont", "definestefonttext", "definesteformatreferinte", "definestegrupculori", "definestehbox", "definesteinconjurare", "definestelista", "definestelistacombinata", "definestemakeup", "definestemarcaje", "definestemediulfonttext", "definestemeniuinteractiune", "definesteoverlay", "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", "dimensiontocount", "din", "directcolor", "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", "dorepeatwithcommand", "doreplacefeature", "doresetandafffeature", "doresetattribute", "dorotatebox", "dosetattribute", "dosetleftskipadaption", "dosetrightskipadaption", "dosetupcheckedinterlinespace", "doseventupleargument", "doseventupleempty", "dosingleargument", "dosingleempty", "dosinglegroupempty", "dosixtupleargument", "dosixtupleempty", "dostepwiserecurse", "dosubtractfeature", "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", "elapsedseconds", "elapsedtime", "eleftarrowfill", "eleftharpoondownfill", "eleftharpoonupfill", "eleftrightarrowfill", "element", "emphasisboldface", "emphasistypeface", "emptylines", "emspace", "enabledirectives", "enableexperiments", "enablemode", "enableoutputstream", "enableparpositions", "enableregime", "enabletrackers", "enskip", "enspace", "enumerare", "env", "envvar", "eoverbarfill", "eoverbracefill", "eoverbracketfill", "eoverparentfill", "epos", "equaldigits", "erightarrowfill", "erightharpoondownfill", "erightharpoonupfill", "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", "fence", "fenced", "fetchallmarkings", "fetchallmarks", "fetchmark", "fetchmarking", "fetchonemark", "fetchonemarking", "fetchruntinecommand", "fetchtwomarkings", "fetchtwomarks", "fieldbody", "fifthoffivearguments", "fifthofsixarguments", "figura", "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", "flushboxregister", "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", "forcecharacterstripping", "forcelocalfloats", "forgeteverypar", "forgetparameters", "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", "getprivatechar", "getprivateslot", "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", "grabbufferdata", "grabbufferdatadirect", "grabuntil", "graficul", "grayvalue", "greedysplitstring", "greeknumerals", "grid", "grosimelinie", "groupedcommand", "gsetboxllx", "gsetboxlly", "gujaratinumerals", "gurmurkhinumerals", "hairspace", "halfwaybox", "handletokens", "handwritten", "hash", "hboxofvbox", "hboxreference", "hdofstring", "headhbox", "headnumbercontent", "headnumberdistance", "headnumberwidth", "headreferenceattributes", "headsetupspacing", "headtextcontent", "headtextdistance", "headtextwidth", "headvbox", "headwidth", "heightanddepthofstring", "heightofstring", "heightspanningtext", "helptext", "hglue", "hiddenbar", "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", "incrementcounter", "incrementedcounter", "incrementpagenumber", "incrementsubpagenumber", "incrementvalue", "indentation", "infofont", "infofontbold", "inframed", "inheritparameter", "inhibitblank", "initializeboxstack", "injos", "inlinebuffer", "inlinedbox", "inlinemath", "inlinemathematics", "inlinemessage", "inlineordisplaymath", "inlinerange", "inlinie", "inmaframed", "innerflushshapebox", "input", "inputfilebarename", "inputfilename", "inputfilerealsuffix", "inputfilesuffix", "inputgivenfile", "insertpages", "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", "integerrounding", "intermezzo", "intertext", "intins", "invokepageheandler", "istltdir", "istrtdir", "italic", "italicbold", "italiccorrection", "itemtag", "jobfilename", "jobfilesuffix", "jos", "jossus", "kap", "keeplinestogether", "keepunwantedspaces", "kerncharacters", "koreancirclenumerals", "koreannumerals", "koreannumeralsc", "koreannumeralsp", "koreanparentnumerals", "la", "languageCharacters", "languagecharacters", "languagecharwidth", "lapagina", "lastcounter", "lastcountervalue", "lastdigit", "lastlinewidth", "lastnaturalboxdp", "lastnaturalboxht", "lastnaturalboxwd", "lastpredefinedsymbol", "lastrealpage", "lastrealpagenumber", "lastsubcountervalue", "lastsubpage", "lastsubpagenumber", "lasttwodigits", "lastuserpage", "lastuserpagenumber", "lateluacode", "layeredtext", "layerheight", "layerwidth", "lazysavetaggedtwopassdata", "lazysavetwopassdata", "lbox", "left", "leftbottombox", "leftbox", "lefthbox", "leftorrighthbox", "leftorrightvbox", "leftorrightvtop", "leftskipadaption", "leftsubguillemot", "lefttopbox", "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", "limtatefirstline", "linespanningtext", "linieneagra", "liniesubtire", "linieumplere", "liniinegre", "liniisubtiri", "listcitation", "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", "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", "marcaje", "margindata", "markcontent", "markinjector", "mat", "matematica", "math", "mathbf", "mathbi", "mathblackboard", "mathbs", "mathcommand", "mathdefault", "mathfraktur", "mathfunction", "mathit", "mathitalic", "mathop", "mathrm", "mathscript", "mathsl", "mathss", "mathtext", "mathtextbf", "mathtextbi", "mathtextbs", "mathtextit", "mathtextsl", "mathtexttf", "mathtf", "mathtriplet", "mathtt", "mathupright", "mathword", "mathwordbf", "mathwordbi", "mathwordbs", "mathwordit", "mathwordsl", "mathwordtf", "mbox", "mcframed", "md", "measure", "measured", "mediu", "medskip", "medspace", "meniuinteractiune", "mequal", "message", "metaTeX", "mfence", "mfunction", "mfunctionlabeltext", "mhbox", "mhookleftarrow", "mhookrightarrow", "middle", "middlebox", "midhbox", "minicitat", "minimalhbox", "mixedcaps", "mkvibuffer", "mleftarrow", "mleftharpoondown", "mleftharpoonup", "mleftrightarrow", "mleftrightharpoons", "mmapsto", "moduleparameter", "molecule", "mono", "monobold", "mononormal", "monthlong", "monthshort", "mp", "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", "nobar", "nocitation", "nocite", "nodetostring", "noffigurepages", "noflines", "noflocalfloats", "noindentation", "noitem", "nokap", "nonfrenchspacing", "nonmathematics", "normal", "normalboldface", "normalframedwithsettings", "normalizebodyfontsize", "normalizedfontsize", "normalizefontdepth", "normalizefontheight", "normalizefontline", "normalizefontwidth", "normalizetextdepth", "normalizetextheight", "normalizetextline", "normalizetextwidth", "normaltypeface", "nota", "notesymbol", "ntimes", "numarformula", "numarpagina", "numartitlu", "numartitlucurent", "numberofpoints", "numere", "numereromane", "obeydepth", "objectdepth", "objectheight", "objectmargin", "objectwidth", "obox", "offset", "offsetbox", "olinie", "onedigitrounding", "ordinaldaynumber", "ordinalstr", "ornamenttext", "outputfilename", "outputstreambox", "outputstreamcopy", "outputstreamunvbox", "outputstreamunvcopy", "over", "overbar", "overbars", "overbartext", "overbarunderbar", "overbrace", "overbracetext", "overbraceunderbrace", "overbracket", "overbrackettext", "overbracketunderbracket", "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", "pagestaterealpage", "pagina", "paletsize", "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", "placecitation", "placecomments", "placecurrentformulanumber", "placedbox", "placefloat", "placefloatwithsetups", "placeframed", "placeheadnumber", "placeheadtext", "placehelp", "placeinitial", "placelayer", "placelayeredtext", "placelistofpublications", "placelistofsorts", "placelistofsynonyms", "placelocalnotes", "placement", "placenamedfloat", "placenamedformula", "placenotes", "placepairedbox", "placeparallel", "placerawlist", "placerenderingwindow", "plaseazapegrid", "plaseazasemnecarte", "popattribute", "popmacro", "popmode", "popsystemmode", "positionoverlay", "positionregionoverlay", "postponenotes", "potrivestecamp", "pozitie", "predefinedfont", "predefinefont", "predefinesymbol", "prefixedpagenumber", "prependetoks", "prependgvalue", "prependtocommalist", "prependtoks", "prependtoksonce", "prependvalue", "presetdocument", "presetfieldsymbols", "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", "profiledbox", "profilegivenbox", "program", "proiect", "pseudoMixedCapped", "pseudoSmallCapped", "pseudoSmallcapped", "pseudosmallcapped", "puncte", "punedeasuprafiecareia", "punefatainfata", "puneformula", "punelista", "punelistacombinata", "punenotesubsol", "punenotesubsollocale", "punenumarpagina", "puneregistru", "punesubformula", "purenumber", "pushattribute", "pushbutton", "pushmacro", "pushmode", "pushoutputstream", "pushsystemmode", "qquad", "quad", "quads", "quitcommalist", "quitprevcommalist", "quittypescriptscanning", "raisebox", "randomizetext", "randomnumber", "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", "replaceincommalist", "replaceword", "rescan", "rescanwithsetup", "resetMPdrawing", "resetMPenvironment", "resetMPinstance", "resetallattributes", "resetandaddfeature", "resetbar", "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", "resolvedglyphdirect", "resolvedglyphstyled", "restartcounter", "restorebox", "restorecatcodes", "restorecounter", "restorecurrentattributes", "restoreendofline", "restoreglobalbodyfont", "reusableMPgraphic", "reuseMPgraphic", "reuserandomseed", "revivefeature", "rfence", "rhbox", "right", "rightbottombox", "rightbox", "righthbox", "rightorleftpageaction", "rightskipadaption", "rightsubguillemot", "righttolefthbox", "righttoleftvbox", "righttoleftvtop", "righttopbox", "riglatext", "rigleumplere", "rlap", "robustaddtocommalist", "robustdoifelseinset", "robustdoifinsetelse", "robustpretocommalist", "rollbutton", "roman", "roteste", "rtop", "ruledhbox", "ruledhpack", "ruledmbox", "ruledtopv", "ruledtpack", "ruledvbox", "ruledvpack", "ruledvtop", "runMPbuffer", "runninghbox", "safechar", "sans", "sansbold", "sansnormal", "sansserif", "savebox", "savebtxdataset", "savebuffer", "savecounter", "savecurrentattributes", "savenormalmeaning", "savetaggedtwopassdata", "savetwopassdata", "sbox", "scala", "scriebuffer", "scrieinlista", "scrieintreliste", "sd", "secondoffivearguments", "secondoffourarguments", "secondofsixarguments", "secondofthreearguments", "secondofthreeunexpanded", "secondoftwoarguments", "secondoftwounexpanded", "sectiune", "select", "selecteazablocuri", "semncarte", "serializecommalist", "serializedcommalist", "serif", "serifbold", "serifnormal", "setJSpreamble", "setMPlayer", "setMPpositiongraphic", "setMPpositiongraphicrange", "setMPtext", "setMPvariable", "setMPvariables", "setareitemization", "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", "seteazaantet", "seteazaaranjareapag", "seteazaaspect", "seteazabarainteractiune", "seteazablanc", "seteazabloc", "seteazablocsectiune", "seteazabuffer", "seteazacamp", "seteazacampuri", "seteazaclipping", "seteazacoloane", "seteazacomentariu", "seteazacomentariupagina", "seteazaculoare", "seteazaculori", "seteazadimensiunihartie", "seteazaecraninteractiune", "seteazaelemente", "seteazafloat", "seteazafonttext", "seteazaformulare", "seteazafundal", "seteazafundaluri", "seteazagrosimelinie", "seteazaimpartireafloat", "seteazainconjurat", "seteazaingust", "seteazainteractiunea", "seteazajos", "seteazalegenda", "seteazaliniesilabe", "seteazaliniesubtire", "seteazalinii", "seteazaliniimargine", "seteazaliniinegre", "seteazaliniiumplere", "seteazalista", "seteazalistacombinata", "seteazamajuscule", "seteazamakeup", "seteazamarcaje", "seteazameniuinteractiune", "seteazaminicitat", "seteazanumarpagina", "seteazanumarsubpagina", "seteazanumartitlu", "seteazanumerotarelinii", "seteazanumerotarepagina", "seteazanumerotareparagrafe", "seteazapaleta", "seteazaparagrafe", "seteazaplasareaopozita", "seteazaprograme", "seteazareferinte", "seteazaregistru", "seteazarigletext", "seteazarigleumplere", "seteazarotare", "seteazasimbol", "seteazasinonime", "seteazasortare", "seteazaspatiu", "seteazaspatiualb", "seteazaspatiuinterliniar", "seteazasubsol", "seteazasus", "seteazatabele", "seteazatabulatori", "seteazatext", "seteazatexteantet", "seteazatextejos", "seteazatextesubsol", "seteazatextesus", "seteazatextetext", "seteazatitlu", "seteazatitluri", "seteazatoleranta", "seteazatranzitiepagina", "seteazatype", "seteazatyping", "seteazaurl", "setelementexporttag", "setemeasure", "setevalue", "setevariable", "setevariables", "setfirstline", "setflag", "setfont", "setfontcolorsheme", "setfontfeature", "setfontsolution", "setfontstrut", "setfractions", "setgmeasure", "setgvalue", "setgvariable", "setgvariables", "sethboxregister", "sethyphenatedurlafter", "sethyphenatedurlbefore", "sethyphenatedurlnormal", "sethyphenationfeatures", "setinitial", "setinjector", "setinteraction", "setinterfacecommand", "setinterfaceconstant", "setinterfaceelements", "setinterfacemessage", "setinterfacevariable", "setinternalrendering", "setitaliccorrection", "setlayer", "setlayerframed", "setlayertext", "setlinefiller", "setlocalhsize", "setmainbodyfont", "setmainparbuilder", "setmarker", "setmarking", "setmathstyle", "setmeasure", "setmessagetext", "setmode", "setnostrut", "setnote", "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", "setupMPgraphics", "setupMPinstance", "setupMPpage", "setupMPvariables", "setupTABLE", "setupTEXpage", "setupattachment", "setupbackend", "setupbar", "setupbleeding", "setupbookmark", "setupbtx", "setupbtxdataset", "setupbtxlist", "setupbtxregister", "setupbtxrendering", "setupbutton", "setupcharacterkerning", "setupcharacterspacing", "setupchemical", "setupchemicalframed", "setupcollector", "setupcolumnspan", "setupcombination", "setupcounter", "setupdataset", "setupdelimitedtext", "setupdescription", "setupdirections", "setupdocument", "setupeffect", "setupenumeration", "setupenv", "setupexport", "setupexternalfigure", "setupexternalsoundtracks", "setupfieldbody", "setupfieldcategory", "setupfieldcontentframed", "setupfieldlabelframed", "setupfieldtotalframed", "setupfiller", "setupfirstline", "setupfittingpage", "setupfloatcaption", "setupfontexpansion", "setupfontprotrusion", "setupfonts", "setupfontsolution", "setupformula", "setupformulaframed", "setupframedcontent", "setupframedtext", "setupglobalreferenceprefix", "setupheadalternative", "setuphelp", "setuphigh", "setuphighlight", "setuphyphenation", "setupindentedtext", "setupinitial", "setupinsertion", "setupitaliccorrection", "setupitemgroup", "setuplabel", "setuplayer", "setuplayeredtext", "setuplayouttext", "setuplinefiller", "setuplinefillers", "setuplinenote", "setuplinetable", "setuplistalternative", "setuplistextra", "setuplocalfloats", "setuplocalinterlinespace", "setuplow", "setuplowhigh", "setuplowmidhigh", "setupmarginblock", "setupmargindata", "setupmarginframed", "setupmarginrule", "setupmathalignment", "setupmathcases", "setupmathematics", "setupmathfence", "setupmathfraction", "setupmathframed", "setupmathmatrix", "setupmathornament", "setupmathradical", "setupmathstackers", "setupmathstyle", "setupmixedcolumns", "setupmodule", "setupnotation", "setupnotations", "setupnote", "setupnotes", "setupoffset", "setupoffsetbox", "setupoutputroutine", "setuppagechecker", "setuppagegrid", "setuppagegridarea", "setuppagegridareatext", "setuppagegridlines", "setuppagegridspan", "setuppagegridstart", "setuppageinjection", "setuppageinjectionalternative", "setuppageshift", "setuppagestate", "setuppairedbox", "setuppaper", "setupparagraph", "setupparagraphintro", "setupparallel", "setupperiods", "setupplacement", "setuppositionbar", "setupprocessor", "setupprofile", "setupquotation", "setuprealpagenumber", "setupreferenceformat", "setupreferenceprefix", "setupreferencestructureprefix", "setupregisters", "setuprenderingwindow", "setups", "setupscale", "setupscript", "setupscripts", "setupselector", "setupshift", "setupsidebar", "setupspellchecking", "setupstartstop", "setupstretched", "setupstruts", "setupstyle", "setupsubformula", "setuptabulation", "setuptagging", "setuptextbackground", "setuptextflow", "setuptooltip", "setupunit", "setupuserpagenumber", "setupversion", "setupviewerlayer", "setupvspacing", "setupwithargument", "setupwithargumentswapped", "setupxml", "setupxtable", "setuvalue", "setuxvalue", "setvalue", "setvariable", "setvariables", "setvboxregister", "setvisualizerfont", "setvtopregister", "setwidthof", "setxmeasure", "setxvalue", "setxvariable", "setxvariables", "sfrac", "shapedhbox", "showallmakeup", "showattributes", "showboxes", "showbtxdatasetauthors", "showbtxdatasetcompleteness", "showbtxdatasetfields", "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", "simbol", "simplegroupedcommand", "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", "someheadnumber", "somekindoftab", "somelocalfloat", "somenamedheadnumber", "someplace", "sp", "spanishNumerals", "spanishnumerals", "spatiifixate", "spatiu", "spatiufixat", "speech", "splitatasterisk", "splitatcolon", "splitatcolons", "splitatcomma", "splitdfrac", "splitfilename", "splitfrac", "splitoffbase", "splitofffull", "splitoffkind", "splitoffname", "splitoffpath", "splitoffroot", "splitofftokens", "splitofftype", "splitstring", "spreadhbox", "sqrt", "stackrel", "startJScode", "startJSpreamble", "startMPclip", "startMPcode", "startMPdefinitions", "startMPdrawing", "startMPenvironment", "startMPextensions", "startMPinclusions", "startMPinitializations", "startMPpage", "startMPpositiongraphic", "startMPpositionmethod", "startMPrun", "startTABLE", "startTABLEbody", "startTABLEfoot", "startTABLEhead", "startTABLEnext", "startTC", "startTD", "startTDs", "startTEXpage", "startTH", "startTN", "startTR", "startTRs", "startTX", "startTY", "startallmodes", "startarrangedpages", "startaside", "startattachment", "startbar", "startbarasus", "startbinom", "startbitmapimage", "startblockquote", "startbtxrenderingdefinitions", "startbuffer", "startbutton", "startcapitol", "startcatcodetable", "startcharacteralign", "startcheckedfences", "startchemical", "startcitat", "startcollect", "startcollecting", "startcolorintent", "startcoloronly", "startcolorset", "startcolumns", "startcolumnspan", "startcombination", "startcomentariu", "startcomment", "startcomponenta", "startcontextcode", "startcontextdefinitioncode", "startctxfunction", "startctxfunctiondefinition", "startculoare", "startcurrentcolor", "startcurrentlistentrywrapper", "startdbinom", "startdelimited", "startdelimitedtext", "startdfrac", "startdisplaymath", "startdmath", "startdocument", "startdute", "starteffect", "startelement", "startembeddedxtable", "startendofline", "startenumerare", "startexceptions", "startexpanded", "startexpandedcollect", "startextendedcatcodetable", "startexternalfigurecollection", "startfigura", "startfigure", "startfitfieldframed", "startfittingpage", "startfloatcombination", "startfont", "startfontclass", "startfontsolution", "startformula", "startformulas", "startfrac", "startframed", "startframedcontent", "startframedtext", "startfundal", "startgraficul", "startgridsnapping", "starthbox", "starthboxestohbox", "starthboxregister", "starthelptext", "starthiddenbar", "starthiding", "starthighlight", "starthyphenation", "startimath", "startimpachetat", "startindentation", "startindentedtext", "startinmframed", "startinteraction", "startinterface", "startintermezzo", "startintertext", "startitemgroup", "startknockout", "startlayout", "startlinecorrection", "startlinefiller", "startlinenumbering", "startlinetable", "startlinetablebody", "startlinetablecell", "startlinetablehead", "startlinie", "startliniemargine", "startliniepeste", "startliniipeste", "startlocalfootnotes", "startlocalheadsetup", "startlocallinecorrection", "startlocalnotes", "startlocalsetups", "startlua", "startluacode", "startluaparameterset", "startluasetups", "startmakeup", "startmarginblock", "startmarkedcontent", "startmathmode", "startmathstyle", "startmatrices", "startmcframed", "startmdformula", "startmediu", "startmeniuinteractiune", "startmframed", "startminicitat", "startmixedcolumns", "startmode", "startmodeset", "startmodule", "startmoduletestsection", "startmpformula", "startnamedsection", "startnamedsubformulas", "startnarrow", "startnarrower", "startnegative", "startnicelyfilledbox", "startnobar", "startnointerference", "startnotallmodes", "startnotext", "startnotmode", "startopposite", "startoutputstream", "startoverlay", "startoverprint", "startpagecomment", "startpagefigure", "startpagegrid", "startpagegridspan", "startpagelayout", "startpar", "startparagraph", "startparagraphs", "startparagraphscell", "startparbuilder", "startpath", "startplacepairedbox", "startpositioning", "startpositionoverlay", "startpositive", "startpostponing", "startprocessassignmentcommand", "startprocessassignmentlist", "startprocesscommacommand", "startprocesscommalist", "startprodus", "startproiect", "startprotect", "startprotectedcolors", "startpublicatie", "startpunctuation", "startpuneformula", "startrandomized", "startrandomseed", "startrawsetups", "startreadingfile", "startreferenceprefix", "startregime", "startregister", "startreusableMPgraphic", "startriglatext", "startscript", "startsdformula", "startsectionblock", "startsectionblockenvironment", "startsectionlevel", "startsectiune", "startsetups", "startsfrac", "startshapebox", "startshift", "startsidebar", "startsimplecolumns", "startspecialitem", "startspeech", "startspformula", "startspread", "startstartstop", "startstaticMPfigure", "startstaticMPgraphic", "startstrictinspectnextcharacter", "startstructurepageregister", "startstrut", "startstyle", "startsubformulas", "startsubiect", "startsubjectlevel", "startsublinie", "startsublinii", "startsubsectiune", "startsubsentence", "startsubstack", "startsubsubiect", "startsubsubsectiune", "startsubsubsubiect", "startsubsubsubsectiune", "startsubsubsubsubiect", "startsubsubsubsubsectiune", "startsubsubsubsubsubiect", "startsupralinie", "startsymbolset", "starttabelul", "starttable", "starttablehead", "starttables", "starttabletail", "starttabulate", "starttabulatehead", "starttabulatetail", "starttagged", "starttbinom", "starttexcode", "starttexdefinition", "starttext", "starttextajutator", "starttextbackground", "starttextbackgroundmanual", "starttextcolor", "starttextcolorintent", "starttextflow", "starttextinconjurat", "starttitlu", "starttokens", "starttransparent", "starttypescript", "starttypescriptcollection", "startunderdash", "startunderdashes", "startunderdot", "startunderdots", "startunderrandom", "startunderrandoms", "startunderstrike", "startunderstrikes", "startunframed", "startuniqueMPgraphic", "startuniqueMPpagegraphic", "startunpacked", "startusableMPgraphic", "startuseMPgraphic", "startusemathstyleparameter", "startusingbtxspecification", "startvbox", "startvboxregister", "startvboxtohbox", "startvboxtohboxseparator", "startviewerlayer", "startvtop", "startvtopregister", "startxcell", "startxcellgroup", "startxfrac", "startxgroup", "startxmldisplayverbatim", "startxmlinlineverbatim", "startxmlraw", "startxmlsetups", "startxrow", "startxrowgroup", "startxtable", "startxtablebody", "startxtablefoot", "startxtablehead", "startxtablenext", "startxxfrac", "stivacampuri", "stopJScode", "stopJSpreamble", "stopMPclip", "stopMPcode", "stopMPdefinitions", "stopMPdrawing", "stopMPenvironment", "stopMPextensions", "stopMPinclusions", "stopMPinitializations", "stopMPpage", "stopMPpositiongraphic", "stopMPpositionmethod", "stopMPrun", "stopTABLE", "stopTABLEbody", "stopTABLEfoot", "stopTABLEhead", "stopTABLEnext", "stopTC", "stopTD", "stopTDs", "stopTEXpage", "stopTH", "stopTN", "stopTR", "stopTRs", "stopTX", "stopTY", "stopallmodes", "stoparrangedpages", "stopaside", "stopattachment", "stopbar", "stopbarasus", "stopbinom", "stopbitmapimage", "stopblockquote", "stopbtxrenderingdefinitions", "stopbuffer", "stopbutton", "stopcapitol", "stopcatcodetable", "stopcharacteralign", "stopcheckedfences", "stopchemical", "stopcitat", "stopcollect", "stopcollecting", "stopcolorintent", "stopcoloronly", "stopcolorset", "stopcolumns", "stopcolumnspan", "stopcombination", "stopcomentariu", "stopcomment", "stopcomponenta", "stopcontextcode", "stopcontextdefinitioncode", "stopctxfunction", "stopctxfunctiondefinition", "stopculoare", "stopcurrentcolor", "stopcurrentlistentrywrapper", "stopdbinom", "stopdelimited", "stopdelimitedtext", "stopdfrac", "stopdisplaymath", "stopdmath", "stopdocument", "stopdute", "stopeffect", "stopelement", "stopembeddedxtable", "stopendofline", "stopenumerare", "stopexceptions", "stopexpanded", "stopexpandedcollect", "stopextendedcatcodetable", "stopexternalfigurecollection", "stopfigura", "stopfigure", "stopfitfieldframed", "stopfittingpage", "stopfloatcombination", "stopfont", "stopfontclass", "stopfontsolution", "stopformula", "stopformulas", "stopfrac", "stopframed", "stopframedcontent", "stopframedtext", "stopfundal", "stopgraficul", "stopgridsnapping", "stophbox", "stophboxestohbox", "stophboxregister", "stophelptext", "stophiddenbar", "stophiding", "stophighlight", "stophyphenation", "stopimath", "stopimpachetat", "stopindentation", "stopindentedtext", "stopinmframed", "stopinteraction", "stopinterface", "stopintermezzo", "stopintertext", "stopitemgroup", "stopknockout", "stoplayout", "stoplinecorrection", "stoplinefiller", "stoplinenumbering", "stoplinetable", "stoplinetablebody", "stoplinetablecell", "stoplinetablehead", "stoplinie", "stopliniemargine", "stopliniepeste", "stopliniipeste", "stoplocalfootnotes", "stoplocalheadsetup", "stoplocallinecorrection", "stoplocalnotes", "stoplocalsetups", "stoplua", "stopluacode", "stopluaparameterset", "stopluasetups", "stopmakeup", "stopmarginblock", "stopmarkedcontent", "stopmathmode", "stopmathstyle", "stopmatrices", "stopmcframed", "stopmdformula", "stopmediu", "stopmeniuinteractiune", "stopmframed", "stopminicitat", "stopmixedcolumns", "stopmode", "stopmodeset", "stopmodule", "stopmoduletestsection", "stopmpformula", "stopnamedsection", "stopnamedsubformulas", "stopnarrow", "stopnarrower", "stopnegative", "stopnicelyfilledbox", "stopnobar", "stopnointerference", "stopnotallmodes", "stopnotext", "stopnotmode", "stopopposite", "stopoutputstream", "stopoverlay", "stopoverprint", "stoppagecomment", "stoppagefigure", "stoppagegrid", "stoppagegridspan", "stoppagelayout", "stoppar", "stopparagraph", "stopparagraphs", "stopparagraphscell", "stopparbuilder", "stoppath", "stopplacepairedbox", "stoppositioning", "stoppositionoverlay", "stoppositive", "stoppostponing", "stopprocessassignmentcommand", "stopprocessassignmentlist", "stopprocesscommacommand", "stopprocesscommalist", "stopprodus", "stopproiect", "stopprotect", "stopprotectedcolors", "stoppublicatie", "stoppunctuation", "stoppuneformula", "stoprandomized", "stoprandomseed", "stoprawsetups", "stopreadingfile", "stopreferenceprefix", "stopregime", "stopregister", "stopreusableMPgraphic", "stopriglatext", "stopscript", "stopsdformula", "stopsectionblock", "stopsectionblockenvironment", "stopsectionlevel", "stopsectiune", "stopsetups", "stopsfrac", "stopshapebox", "stopshift", "stopsidebar", "stopsimplecolumns", "stopspecialitem", "stopspeech", "stopspformula", "stopspread", "stopstartstop", "stopstaticMPfigure", "stopstaticMPgraphic", "stopstrictinspectnextcharacter", "stopstructurepageregister", "stopstrut", "stopstyle", "stopsubformulas", "stopsubiect", "stopsubjectlevel", "stopsublinie", "stopsublinii", "stopsubsectiune", "stopsubsentence", "stopsubstack", "stopsubsubiect", "stopsubsubsectiune", "stopsubsubsubiect", "stopsubsubsubsectiune", "stopsubsubsubsubiect", "stopsubsubsubsubsectiune", "stopsubsubsubsubsubiect", "stopsupralinie", "stopsymbolset", "stoptabelul", "stoptable", "stoptablehead", "stoptables", "stoptabletail", "stoptabulate", "stoptabulatehead", "stoptabulatetail", "stoptagged", "stoptbinom", "stoptexcode", "stoptexdefinition", "stoptext", "stoptextajutator", "stoptextbackground", "stoptextbackgroundmanual", "stoptextcolor", "stoptextcolorintent", "stoptextflow", "stoptextinconjurat", "stoptitlu", "stoptokens", "stoptransparent", "stoptypescript", "stoptypescriptcollection", "stopunderdash", "stopunderdashes", "stopunderdot", "stopunderdots", "stopunderrandom", "stopunderrandoms", "stopunderstrike", "stopunderstrikes", "stopunframed", "stopuniqueMPgraphic", "stopuniqueMPpagegraphic", "stopunpacked", "stopusableMPgraphic", "stopuseMPgraphic", "stopusemathstyleparameter", "stopusingbtxspecification", "stopvbox", "stopvboxregister", "stopvboxtohbox", "stopvboxtohboxseparator", "stopviewerlayer", "stopvtop", "stopvtopregister", "stopxcell", "stopxcellgroup", "stopxfrac", "stopxgroup", "stopxmldisplayverbatim", "stopxmlinlineverbatim", "stopxmlraw", "stopxmlsetups", "stopxrow", "stopxrowgroup", "stopxtable", "stopxtablebody", "stopxtablefoot", "stopxtablehead", "stopxtablenext", "stopxxfrac", "strictdoifelsenextoptional", "strictdoifnextoptionalelse", "stripcharacter", "strippedcsname", "stripspaces", "structurelistuservariable", "structurenumber", "structuretitle", "structureuservariable", "structurevariable", "strut", "strutdp", "strutht", "struthtdp", "struttedbox", "strutwd", "style", "styleinstance", "subiect", "subpagenumber", "subsectiune", "subsentence", "substituteincommalist", "subsubiect", "subsubsectiune", "subsubsubiect", "subsubsubsectiune", "subsubsubsubiect", "subsubsubsubsectiune", "subsubsubsubsubiect", "subtractfeature", "swapcounts", "swapdimens", "swapface", "swapmacros", "swaptypeface", "switchstyleonly", "switchtocolor", "switchtointerlinespace", "symbolreference", "synchronizeblank", "synchronizeindenting", "synchronizemarking", "synchronizeoutputstreams", "synchronizestrut", "synchronizewhitespace", "systemlog", "systemlogfirst", "systemloglast", "systemsetups", "tLeftarrow", "tLeftrightarrow", "tRightarrow", "tabelul", "tabulateautoline", "tabulateautorule", "tabulateline", "tabulaterule", "taggedctxcommand", "taggedlabeltexts", "tbinom", "tbox", "tequal", "testandsplitstring", "testcolumn", "testfeature", "testfeatureonce", "testpage", "testpageonly", "testpagesync", "testtokens", "tex", "texdefinition", "texsetup", "textajutator", "textcitation", "textcite", "textcontrolspace", "textflowcollector", "textinconjurat", "textmath", "textminus", "textormathchar", "textplus", "textumplere", "textvisiblespace", "tfrac", "thainumerals", "thefirstcharacter", "thenormalizedbodyfontsize", "theremainingcharacters", "thickspace", "thinspace", "thirdoffivearguments", "thirdoffourarguments", "thirdofsixarguments", "thirdofthreearguments", "thirdofthreeunexpanded", "thookleftarrow", "thookrightarrow", "threedigitrounding", "tibetannumerals", "tightlayer", "tinyfont", "titlu", "tlap", "tleftarrow", "tleftharpoondown", "tleftharpoonup", "tleftrightarrow", "tleftrightharpoons", "tmapsto", "tochar", "tolinenote", "topbox", "topleftbox", "toplinebox", "toprightbox", "topskippedbox", "tracecatcodetables", "tracedfontname", "traceoutputroutines", "tracepositions", "traduce", "transparencycomponents", "transparent", "trecilafonttext", "trel", "trightarrow", "trightharpoondown", "trightharpoonup", "trightleftharpoons", "trightoverleftarrow", "triplebond", "truefilename", "truefontname", "ttriplerel", "ttwoheadleftarrow", "ttwoheadrightarrow", "twodigitrounding", "tx", "txx", "typ", "type", "typedefinedbuffer", "typeface", "typefile", "typescriptone", "typescriptprefix", "typescriptthree", "typescripttwo", "typesetbuffer", "typesetfile", "uconvertnumber", "uedcatcodecommand", "undefinevalue", "undepthed", "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", "unprotected", "unregisterhyphenationpattern", "unspaceafter", "unspaceargument", "unspaced", "unspacestring", "untexargument", "untexcommand", "uppercased", "uppercasestring", "upperleftdoubleninequote", "upperleftdoublesixquote", "upperleftsingleninequote", "upperleftsinglesixquote", "upperrightdoubleninequote", "upperrightdoublesixquote", "upperrightsingleninequote", "upperrightsinglesixquote", "url", "useMPenvironmentbuffer", "useMPgraphic", "useMPlibrary", "useMPrun", "useMPvariables", "useblankparameter", "usebodyfont", "usebodyfontparameter", "usebtxdataset", "usebtxdefinitions", "usecolors", "usecomponent", "usedummycolorparameter", "usedummystyleandcolor", "usedummystyleparameter", "useenvironment", "useexternalrendering", "usefigurebase", "usefile", "usegridparameter", "useindentingparameter", "useindentnextparameter", "useinterlinespaceparameter", "uselanguageparameter", "useluamodule", "usemathstyleparameter", "useproduct", "useprofileparameter", "useproject", "usereferenceparameter", "userpagenumber", "usesetupsparameter", "usestaticMPfigure", "usesubpath", "usetexmodule", "usetypescript", "usetypescriptfile", "usezipfile", "utfchar", "utflower", "utfupper", "utilityregisterlength", "valoareculoare", "vboxreference", "verbatim", "verbatimstring", "verbosenumber", "versiune", "verticalgrowingbar", "verticalpositionbar", "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", "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/context/data/textadept/context/data/scite-context-data-metafun.lua b/context/data/textadept/context/data/scite-context-data-metafun.lua
new file mode 100644
index 000000000..5c061e039
--- /dev/null
+++ b/context/data/textadept/context/data/scite-context-data-metafun.lua
@@ -0,0 +1,4 @@
+return {
+ ["commands"]={ "loadmodule", "dispose", "nothing", "transparency", "tolist", "topath", "tocycle", "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", "unittriangle", "fulltriangle", "llcircle", "lrcircle", "urcircle", "ulcircle", "tcircle", "bcircle", "lcircle", "rcircle", "lltriangle", "lrtriangle", "urtriangle", "ultriangle", "uptriangle", "downtriangle", "lefttriangle", "righttriangle", "triangle", "smoothed", "cornered", "superellipsed", "randomized", "randomizedcontrols", "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", "boundingradius", "boundingcircle", "boundingpoint", "crossingunder", "insideof", "outsideof", "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", "withshaderadius", "withshadetransform", "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", "colordecimalslist", "textext", "thetextext", "rawtextext", "textextoffset", "texbox", "thetexbox", "rawtexbox", "verbatim", "thelabel", "label", "autoalign", "transparent", "withtransparency", "property", "properties", "withproperties", "asgroup", "infont", "space", "crlf", "dquote", "percent", "SPACE", "CRLF", "DQUOTE", "PERCENT", "grayscale", "greyscale", "withgray", "withgrey", "colorpart", "colorlike", "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", "resetarrows", "tensecircle", "roundedsquare", "colortype", "whitecolor", "blackcolor", "basiccolors", "complementary", "complemented", "resolvedcolor", "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", "pencilled", "decorated", "redecorated", "undecorated", "passvariable", "passarrayvariable", "tostring", "topair", "format", "formatted", "quotation", "quote", "startpassingvariable", "stoppassingvariable", "eofill", "eoclip", "nofill", "fillup", "eofillup", "area", "addbackground", "shadedup", "shadeddown", "shadedleft", "shadedright", "sortlist", "copylist", "shapedlist", "listtocurves", "listtolines", "listsize", "listlast", "uniquelist", "circularpath", "squarepath", "linearpath" },
+ ["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", "dq", "sq", "crossingscale", "crossingoption" },
+} \ No newline at end of file
diff --git a/context/data/textadept/context/data/scite-context-data-metapost.lua b/context/data/textadept/context/data/scite-context-data-metapost.lua
new file mode 100644
index 000000000..8d1b88052
--- /dev/null
+++ b/context/data/textadept/context/data/scite-context-data-metapost.lua
@@ -0,0 +1,9 @@
+return {
+ ["commands"]={ "upto", "downto", "beginfig", "endfig", "beginglyph", "endglyph", "rotatedaround", "reflectedabout", "arrowhead", "currentpen", "currentpicture", "cuttings", "defaultfont", "extra_beginfig", "extra_endfig", "down", "evenly", "fullcircle", "halfcircle", "identity", "in", "left", "pensquare", "penrazor", "penspec", "origin", "quartercircle", "right", "unitsquare", "up", "withdots", "abs", "bbox", "ceiling", "center", "cutafter", "cutbefore", "dir", "directionpoint", "div", "dotprod", "intersectionpoint", "inverse", "mod", "round", "unitvector", "whatever", "cutdraw", "draw", "drawarrow", "drawdblarrow", "fill", "filldraw", "drawdot", "loggingall", "interact", "tracingall", "tracingnone", "pickup", "undraw", "unfill", "unfilldraw", "buildcycle", "dashpattern", "decr", "dotlabel", "dotlabels", "drawoptions", "incr", "label", "labels", "max", "min", "thelabel", "z", "beginchar", "blacker", "capsule_end", "change_width", "define_blacker_pixels", "define_corrected_pixels", "define_good_x_pixels", "define_good_y_pixels", "define_horizontal_corrected_pixels", "define_pixels", "define_whole_blacker_pixels", "define_whole_pixels", "define_whole_vertical_blacker_pixels", "define_whole_vertical_pixels", "endchar", "extra_beginchar", "extra_endchar", "extra_setup", "font_coding_scheme", "clearxy", "clearit", "clearpen", "shipit", "font_extra_space", "exitunless", "relax", "hide", "gobble", "gobbled", "stop", "blankpicture", "counterclockwise", "tensepath", "takepower", "direction", "softjoin", "makelabel", "rotatedabout", "flex", "superellipse", "image", "nullpen", "savepen", "clearpen", "penpos", "penlabels", "range", "thru", "z", "laboff", "bye", "red", "green", "blue", "cyan", "magenta", "yellow", "black", "white", "background", "mm", "pt", "dd", "bp", "cm", "pc", "cc", "in", "triplet", "quadruplet" },
+ ["disabled"]={ "verbatimtex", "troffmode" },
+ ["internals"]={ "mitered", "rounded", "beveled", "butt", "squared", "eps", "epsilon", "infinity", "bboxmargin", "ahlength", "ahangle", "labeloffset", "dotlabeldiam", "defaultpen", "defaultscale", "join_radius", "charscale", "ditto", "EOF", "pen_lft", "pen_rt", "pen_top", "pen_bot" },
+ ["metafont"]={ "autorounding", "beginchar", "blacker", "boundarychar", "capsule_def", "capsule_end", "change_width", "chardp", "chardx", "chardy", "charexists", "charext", "charht", "charic", "charlist", "charwd", "cull", "cullit", "currenttransform", "currentwindow", "define_blacker_pixels", "define_corrected_pixels", "define_good_x_pixels", "define_good_y_pixels", "define_horizontal_corrected_pixels", "define_pixels", "define_whole_blacker_pixels", "define_whole_pixels", "define_whole_vertical_blacker_pixels", "define_whole_vertical_pixels", "designsize", "display", "displaying", "endchar", "extensible", "extra_beginchar", "extra_endchar", "extra_setup", "fillin", "font_coding_scheme", "font_extra_space", "font_identifier", "font_normal_shrink", "font_normal_space", "font_normal_stretch", "font_quad", "font_size", "font_slant", "font_x_height", "fontdimen", "fontmaking", "gfcorners", "granularity", "grayfont", "headerbyte", "hppp", "hround", "imagerules", "italcorr", "kern", "labelfont", "ligtable", "lowres_fix", "makebox", "makegrid", "maketicks", "mode_def", "mode_setup", "nodisplays", "notransforms", "numspecial", "o_correction", "openit", "openwindow", "pixels_per_inch", "proofing", "proofoffset", "proofrule", "proofrulethickness", "rulepen", "screenchars", "screenrule", "screenstrokes", "screen_cols", "screen_rows", "showit", "slantfont", "smode", "smoothing", "titlefont", "totalweight", "tracingedges", "tracingpens", "turningcheck", "unitpixel", "vppp", "vround", "xoffset", "yoffset" },
+ ["primitives"]={ "charcode", "day", "linecap", "linejoin", "miterlimit", "month", "pausing", "prologues", "showstopping", "time", "tracingcapsules", "tracingchoices", "mpprocset", "tracingcommands", "tracingequations", "tracinglostchars", "tracingmacros", "tracingonline", "tracingoutput", "tracingrestores", "tracingspecs", "tracingstats", "tracingtitles", "truecorners", "warningcheck", "year", "false", "nullpicture", "pencircle", "penspec", "true", "and", "angle", "arclength", "arctime", "ASCII", "boolean", "bot", "char", "color", "cosd", "cycle", "decimal", "directiontime", "floor", "fontsize", "hex", "infont", "intersectiontimes", "known", "length", "llcorner", "lrcorner", "makepath", "makepen", "mexp", "mlog", "normaldeviate", "not", "numeric", "oct", "odd", "or", "path", "pair", "pen", "penoffset", "picture", "point", "postcontrol", "precontrol", "reverse", "rotated", "scaled", "shifted", "sind", "slanted", "sqrt", "str", "string", "subpath", "substring", "transform", "transformed", "ulcorner", "uniformdeviate", "unknown", "urcorner", "xpart", "xscaled", "xxpart", "xypart", "ypart", "yscaled", "yxpart", "yypart", "zscaled", "addto", "clip", "input", "interim", "let", "newinternal", "save", "setbounds", "shipout", "show", "showdependencies", "showtoken", "showvariable", "special", "begingroup", "endgroup", "of", "curl", "tension", "and", "controls", "interpath", "on", "off", "def", "vardef", "enddef", "expr", "suffix", "text", "primary", "secondary", "tertiary", "primarydef", "secondarydef", "tertiarydef", "randomseed", "also", "contour", "doublepath", "withcolor", "withcmykcolor", "withpen", "dashed", "envelope", "if", "else", "elseif", "fi", "for", "endfor", "forever", "exitif", "within", "forsuffixes", "step", "until", "charlist", "extensible", "fontdimen", "headerbyte", "kern", "ligtable", "boundarychar", "chardp", "charext", "charht", "charic", "charwd", "designsize", "fontmaking", "charexists", "cullit", "currenttransform", "gfcorners", "grayfont", "hround", "imagerules", "lowres_fix", "nodisplays", "notransforms", "openit", "displaying", "currentwindow", "screen_rows", "screen_cols", "pixels_per_inch", "cull", "display", "openwindow", "numspecial", "totalweight", "autorounding", "fillin", "proofing", "tracingpens", "xoffset", "chardx", "granularity", "smoothing", "turningcheck", "yoffset", "chardy", "hppp", "tracingedges", "vppp", "extra_beginfig", "extra_endfig", "mpxbreak", "endinput", "message", "delimiters", "turningnumber", "errmessage", "readstring", "scantokens", "end", "outer", "inner", "write", "to", "readfrom", "withprescript", "withpostscript", "top", "bot", "lft", "rt", "ulft", "urt", "llft", "lrt", "redpart", "greenpart", "bluepart", "cyanpart", "magentapart", "yellowpart", "blackpart", "prescriptpart", "postscriptpart", "rgbcolor", "cmykcolor", "colormodel", "graypart", "greypart", "greycolor", "graycolor", "dashpart", "penpart", "stroked", "filled", "textual", "clipped", "bounded", "pathpart", "expandafter", "minute", "hour", "outputformat", "outputtemplate", "filenametemplate", "fontmapfile", "fontmapline", "fontpart", "fontsize", "glyph", "restoreclipcolor", "troffmode", "runscript", "maketext" },
+ ["shortcuts"]={ "..", "...", "--", "---", "&", "\\" },
+ ["tex"]={ "btex", "etex", "verbatimtex" },
+} \ No newline at end of file
diff --git a/context/data/textadept/context/data/scite-context-data-tex.lua b/context/data/textadept/context/data/scite-context-data-tex.lua
new file mode 100644
index 000000000..3d2e60ea4
--- /dev/null
+++ b/context/data/textadept/context/data/scite-context-data-tex.lua
@@ -0,0 +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", "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", "Umathnolimitsupfactor", "Umathnolimitsubfactor", "Umiddle", "Uoverdelimiter", "Uradical", "Uright", "Uroot", "Uskewed", "Uskewedwithdelims", "Ustack", "Ustartdisplaymath", "Ustartmath", "Ustopdisplaymath", "Ustopmath", "Usubscript", "Usuperscript", "Uunderdelimiter", "Uvextensible", "adjustspacing", "alignmark", "aligntab", "attribute", "attributedef", "hyphenpenaltymode", "automatichyphenmode", "automatichyphenpenalty", "automaticdiscretionary", "explicithyphenpenalty", "explicitdiscretionary", "bodydir", "boundary", "boxdir", "catcodetable", "clearmarks", "copyfont", "crampeddisplaystyle", "crampedscriptscriptstyle", "crampedscriptstyle", "crampedtextstyle", "draftmode", "dviextension", "dvifeedback", "dvivariable", "efcode", "hjcode", "firstvalidlanguage", "fontid", "formatname", "gleaders", "hyphenationmin", "hyphenationbounds", "ifabsdim", "ifabsnum", "ifprimitive", "ignoreligaturesinfont", "initcatcodetable", "insertht", "lastsavedboxresourceindex", "lastsavedimageresourceindex", "lastsavedimageresourcepages", "lastxpos", "lastypos", "latelua", "leftghost", "leftmarginkern", "letcharcode", "letterspacefont", "linedir", "localbrokenpenalty", "localinterlinepenalty", "localleftbox", "localrightbox", "lpcode", "luaescapestring", "luatexbanner", "luatexrevision", "luatexversion", "luafunction", "mathdir", "mathdisplayskipmode", "matheqnogapstep", "mathitalicsmode", "mathnolimitsmode", "mathoption", "mathscriptsmode", "mathstyle", "mathsurroundskip", "mathsurroundmode", "mathrulesmode", "mathrulesfam", "noboundary", "nokerns", "nohrule", "noligs", "nospaces", "novrule", "normaldeviate", "outputbox", "outputmode", "pagedir", "pageheight", "pagebottomoffset", "pageleftoffset", "pagerightoffset", "pagetopoffset", "pagewidth", "pardir", "pdfextension", "pdffeedback", "pdfvariable", "postexhyphenchar", "posthyphenchar", "predisplaygapfactor", "preexhyphenchar", "prehyphenchar", "primitive", "protrudechars", "protrusionboundary", "pxdimen", "randomseed", "rightghost", "rightmarginkern", "rpcode", "saveboxresource", "savecatcodetable", "saveimageresource", "savepos", "scantextokens", "setfontid", "setrandomseed", "shapemode", "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", "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", "Umathnolimitsupfactor", "Umathnolimitsubfactor", "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", "hyphenpenaltymode", "automatichyphenmode", "automatichyphenpenalty", "automaticdiscretionary", "explicithyphenpenalty", "explicitdiscretionary", "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", "hyphenationmin", "hyphenationbounds", "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", "linedir", "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", "mathitalicsmode", "mathnolimitsmode", "mathop", "mathopen", "mathoption", "mathord", "mathpunct", "mathrel", "mathrulesmode", "mathrulesfam", "mathscriptsmode", "mathstyle", "mathsurroundskip", "mathsurroundmode", "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", "predisplaygapfactor", "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", "shapemode", "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", "suppressmathparerror", "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/context/data/textadept/context/init.lua b/context/data/textadept/context/init.lua
new file mode 100644
index 000000000..2aefb970f
--- /dev/null
+++ b/context/data/textadept/context/init.lua
@@ -0,0 +1,69 @@
+local info = {
+ version = 1.002,
+ comment = "ini for textadept for context/metafun",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+if not textadept then
+ return
+end
+
+-- The textadept documentation says that there can be a lexers directory under a user
+-- directory but it's not in the package path. The next involved a bit or trial and
+-- error in order to avoid crashes so I suppose it can be done better. If I use
+-- textadept alongside scite I will make a different key binding. The code below is
+-- a bit of a mess, which is a side effect of stepwise adaption combined with shared
+-- iuse of code.
+--
+-- We use the commandline switch -u to point to the location where this file is located
+-- as we then can keep it outside the program area. We also put some other files under
+-- themes.
+--
+-- A problem is that scite needs the lexer.lua file while for textadept we don't want
+-- to touch that one. So we end up with duplicate files. We cannot configure scite to
+-- use an explicit lexer so both lexer paths have the same files except that the textadept
+-- one has no lexer.lua there. Unfortunately themes is not requires's but always looked
+-- up with an explicit path. (Maybe I should patch that.)
+--
+-- We are in one of:
+--
+-- tex/texmf-context/context/data/textadept/context
+-- data/develop/context/scite/data/context/textadept
+
+package.path = table.concat ( {
+ --
+ _USERHOME .. "/?.lua",
+ --
+ _USERHOME .. "/lexers/?.lua",
+ _USERHOME .. "/modules/?.lua",
+ _USERHOME .. "/themes/?.lua",
+ _USERHOME .. "/data/?.lua",
+ --
+ package.path
+ --
+}, ';')
+
+-- We now reset the session location to a writeable user area. We also take the opportunity
+-- to increase the list.
+
+local sessionpath = os.getenv(not WIN32 and 'HOME' or 'USERPROFILE') .. '/.textadept'
+local sessionfile = not CURSES and 'session' or 'session_term'
+
+textadept.session.default_session = sessionpath .. "/" .. sessionfile
+textadept.session.save_on_quit = true
+textadept.session.max_recent_files = 25
+
+-- Let's load our adapted lexer framework.
+
+require("scite-context-lexer")
+require("textadept-context-runner")
+require("textadept-context-files")
+require("scite-context-theme")
+require("textadept-context-settings")
+require("textadept-context-types")
+
+-- This prevents other themes to spoil our settings.
+
+ui.set_theme("scite-context-theme")
diff --git a/context/data/textadept/context/lexers/lexer.rme b/context/data/textadept/context/lexers/lexer.rme
new file mode 100644
index 000000000..5e9604f63
--- /dev/null
+++ b/context/data/textadept/context/lexers/lexer.rme
@@ -0,0 +1 @@
+We have no lexer.lua here!
diff --git a/context/data/textadept/context/lexers/scite-context-lexer-bibtex.lua b/context/data/textadept/context/lexers/scite-context-lexer-bibtex.lua
new file mode 100644
index 000000000..dce24a2b9
--- /dev/null
+++ b/context/data/textadept/context/lexers/scite-context-lexer-bibtex.lua
@@ -0,0 +1,196 @@
+local info = {
+ version = 1.002,
+ comment = "scintilla lpeg lexer for bibtex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+local global, string, table, lpeg = _G, string, table, lpeg
+local P, R, S, V = lpeg.P, lpeg.R, lpeg.S, lpeg.V
+local type = type
+
+-- local lexer = require("lexer")
+local lexer = require("scite-context-lexer")
+local context = lexer.context
+local patterns = context.patterns
+
+local token = lexer.token
+local exact_match = lexer.exact_match
+
+local bibtexlexer = lexer.new("bib","scite-context-lexer-bibtex")
+local whitespace = bibtexlexer.whitespace
+
+ local escape, left, right = P("\\"), P('{'), P('}')
+
+ patterns.balanced = P {
+ [1] = ((escape * (left+right)) + (1 - (left+right)) + V(2))^0,
+ [2] = left * V(1) * right
+ }
+
+-- taken from bibl-bib.lua
+
+local anything = patterns.anything
+local percent = P("%")
+local start = P("@")
+local comma = P(",")
+local hash = P("#")
+local escape = P("\\")
+local single = P("'")
+local double = P('"')
+local left = P('{')
+local right = P('}')
+local lineending = S("\n\r")
+local space = S(" \t\n\r\f")
+local spaces = space^1
+local equal = P("=")
+
+local keyword = (R("az","AZ","09") + S("@_:-"))^1
+----- s_quoted = ((escape*single) + spaces + (1-single))^0
+----- d_quoted = ((escape*double) + spaces + (1-double))^0
+local s_quoted = ((escape*single) + (1-single))^0
+local d_quoted = ((escape*double) + (1-double))^0
+
+local balanced = patterns.balanced
+
+local t_spacing = token(whitespace, space^1)
+local t_optionalws = token("default", space^1)^0
+
+local t_equal = token("operator",equal)
+local t_left = token("grouping",left)
+local t_right = token("grouping",right)
+local t_comma = token("operator",comma)
+local t_hash = token("operator",hash)
+
+local t_s_value = token("operator",single)
+ * token("text",s_quoted)
+ * token("operator",single)
+local t_d_value = token("operator",double)
+ * token("text",d_quoted)
+ * token("operator",double)
+local t_b_value = token("operator",left)
+ * token("text",balanced)
+ * token("operator",right)
+local t_r_value = token("text",keyword)
+
+local t_keyword = token("keyword",keyword)
+local t_key = token("command",keyword)
+local t_label = token("warning",keyword)
+
+local t_somevalue = t_s_value + t_d_value + t_b_value + t_r_value
+local t_value = t_somevalue
+ * ((t_optionalws * t_hash * t_optionalws) * t_somevalue)^0
+
+local t_assignment = t_optionalws
+ * t_key
+ * t_optionalws
+ * t_equal
+ * t_optionalws
+ * t_value
+
+local t_shortcut = t_keyword
+ * t_optionalws
+ * t_left
+ * t_optionalws
+ * (t_assignment * t_comma^0)^0
+ * t_optionalws
+ * t_right
+
+local t_definition = t_keyword
+ * t_optionalws
+ * t_left
+ * t_optionalws
+ * t_label
+ * t_optionalws
+ * t_comma
+ * (t_assignment * t_comma^0)^0
+ * t_optionalws
+ * t_right
+
+local t_comment = t_keyword
+ * t_optionalws
+ * t_left
+ * token("text",(1-t_right)^0)
+ * t_optionalws
+ * t_right
+
+local t_forget = token("comment",percent^1 * (1-lineending)^0)
+
+local t_rest = token("default",anything)
+
+-- this kind of lexing seems impossible as the size of the buffer passed to the lexer is not
+-- large enough .. but we can cheat and use this:
+--
+-- function OnOpen(filename) editor:Colourise(1,editor.TextLength) end -- or is it 0?
+
+-- somehow lexing fails on this more complex lexer when we insert something, there is no
+-- backtracking to whitespace when we have no embedded lexer, so we fake one ... this works
+-- to some extend but not in all cases (e.g. editing inside line fails) .. maybe i need to
+-- patch the dll ... (better not)
+
+local dummylexer = lexer.load("scite-context-lexer-dummy","bib-dum")
+
+local dummystart = token("embedded",P("\001")) -- an unlikely to be used character
+local dummystop = token("embedded",P("\002")) -- an unlikely to be used character
+
+lexer.embed_lexer(bibtexlexer,dummylexer,dummystart,dummystop)
+
+-- maybe we need to define each functional block as lexer (some 4) so i'll do that when
+-- this issue is persistent ... maybe consider making a local lexer options (not load,
+-- just lexer.new or so) .. or maybe do the reverse, embed the main one in a dummy child
+
+bibtexlexer._rules = {
+ { "whitespace", t_spacing },
+ { "forget", t_forget },
+ { "shortcut", t_shortcut },
+ { "definition", t_definition },
+ { "comment", t_comment },
+ { "rest", t_rest },
+}
+
+-- local t_assignment = t_key
+-- * t_optionalws
+-- * t_equal
+-- * t_optionalws
+-- * t_value
+--
+-- local t_shortcut = t_keyword
+-- * t_optionalws
+-- * t_left
+--
+-- local t_definition = t_keyword
+-- * t_optionalws
+-- * t_left
+-- * t_optionalws
+-- * t_label
+-- * t_optionalws
+-- * t_comma
+--
+-- bibtexlexer._rules = {
+-- { "whitespace", t_spacing },
+-- { "assignment", t_assignment },
+-- { "definition", t_definition },
+-- { "shortcut", t_shortcut },
+-- { "right", t_right },
+-- { "comma", t_comma },
+-- { "forget", t_forget },
+-- { "comment", t_comment },
+-- { "rest", t_rest },
+-- }
+
+bibtexlexer._tokenstyles = context.styleset
+
+bibtexlexer._foldpattern = P("{") + P("}")
+
+bibtexlexer._foldsymbols = {
+ _patterns = {
+ "{",
+ "}",
+ },
+ ["grouping"] = {
+ ["{"] = 1,
+ ["}"] = -1,
+ },
+}
+
+return bibtexlexer
diff --git a/context/data/textadept/context/lexers/scite-context-lexer-cld.lua b/context/data/textadept/context/lexers/scite-context-lexer-cld.lua
new file mode 100644
index 000000000..a5fbf9cd7
--- /dev/null
+++ b/context/data/textadept/context/lexers/scite-context-lexer-cld.lua
@@ -0,0 +1,24 @@
+local info = {
+ version = 1.002,
+ comment = "scintilla lpeg lexer for cld",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+-- local lexer = require("lexer")
+local lexer = require("scite-context-lexer")
+local context = lexer.context
+local patterns = context.patterns
+
+local cldlexer = lexer.new("cld","scite-context-lexer-cld")
+local lualexer = lexer.load("scite-context-lexer-lua")
+
+-- can probably be done nicer now, a bit of a hack
+
+cldlexer._rules = lualexer._rules_cld
+cldlexer._tokenstyles = lualexer._tokenstyles
+cldlexer._foldsymbols = lualexer._foldsymbols
+cldlexer._directives = lualexer._directives
+
+return cldlexer
diff --git a/context/data/textadept/context/lexers/scite-context-lexer-cpp-web.lua b/context/data/textadept/context/lexers/scite-context-lexer-cpp-web.lua
new file mode 100644
index 000000000..e8ff3c1ff
--- /dev/null
+++ b/context/data/textadept/context/lexers/scite-context-lexer-cpp-web.lua
@@ -0,0 +1,24 @@
+local info = {
+ version = 1.002,
+ comment = "scintilla lpeg lexer for cpp web",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+-- local lexer = require("lexer")
+local lexer = require("scite-context-lexer")
+local context = lexer.context
+local patterns = context.patterns
+
+local cppweblexer = lexer.new("cpp-web","scite-context-lexer-cpp")
+local cpplexer = lexer.load("scite-context-lexer-cpp")
+
+-- can probably be done nicer now, a bit of a hack
+
+cppweblexer._rules = cpplexer._rules_web
+cppweblexer._tokenstyles = cpplexer._tokenstyles
+cppweblexer._foldsymbols = cpplexer._foldsymbols
+cppweblexer._directives = cpplexer._directives
+
+return cppweblexer
diff --git a/context/data/textadept/context/lexers/scite-context-lexer-cpp.lua b/context/data/textadept/context/lexers/scite-context-lexer-cpp.lua
new file mode 100644
index 000000000..d56dc58f9
--- /dev/null
+++ b/context/data/textadept/context/lexers/scite-context-lexer-cpp.lua
@@ -0,0 +1,189 @@
+local info = {
+ version = 1.002,
+ comment = "scintilla lpeg lexer for cpp",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+-- looks liks the original cpp lexer but web ready (so nothing special here yet)
+
+local P, R, S = lpeg.P, lpeg.R, lpeg.S
+
+-- local lexer = require("lexer")
+local lexer = require("scite-context-lexer")
+local context = lexer.context
+local patterns = context.patterns
+
+local token = lexer.token
+local exact_match = lexer.exact_match
+
+local cpplexer = lexer.new("cpp","scite-context-lexer-cpp")
+local whitespace = cpplexer.whitespace
+
+local keywords = { -- copied from cpp.lua
+ -- c
+ "asm", "auto", "break", "case", "const", "continue", "default", "do", "else",
+ "extern", "false", "for", "goto", "if", "inline", "register", "return",
+ "sizeof", "static", "switch", "true", "typedef", "volatile", "while",
+ "restrict",
+ -- hm
+ "_Bool", "_Complex", "_Pragma", "_Imaginary",
+ -- c++.
+ "catch", "class", "const_cast", "delete", "dynamic_cast", "explicit",
+ "export", "friend", "mutable", "namespace", "new", "operator", "private",
+ "protected", "public", "signals", "slots", "reinterpret_cast",
+ "static_assert", "static_cast", "template", "this", "throw", "try", "typeid",
+ "typename", "using", "virtual"
+}
+
+local datatypes = { -- copied from cpp.lua
+ "bool", "char", "double", "enum", "float", "int", "long", "short", "signed",
+ "struct", "union", "unsigned", "void"
+}
+
+local macros = { -- copied from cpp.lua
+ "define", "elif", "else", "endif", "error", "if", "ifdef", "ifndef", "import",
+ "include", "line", "pragma", "undef", "using", "warning"
+}
+
+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 period = P(".")
+local escaped = P("\\") * P(1)
+local slashes = P("//")
+local begincomment = P("/*")
+local endcomment = P("*/")
+local percent = P("%")
+
+local hexadecimal = patterns.hexadecimal
+local decimal = patterns.decimal
+local float = patterns.float
+local integer = P("-")^-1 * (hexadecimal + decimal) -- also in patterns ?
+
+local spacing = token(whitespace, space^1)
+local rest = token("default", any)
+
+local shortcomment = token("comment", slashes * restofline^0)
+local longcomment = token("comment", begincomment * (1-endcomment)^0 * endcomment^-1)
+
+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)
+
+local number = token("number", float + integer)
+
+local validword = R("AZ","az","__") * R("AZ","az","__","09")^0
+local identifier = token("default",validword)
+
+local operator = token("special", S("+-*/%^!=<>;:{}[]().&|?~"))
+
+----- optionalspace = spacing^0
+
+local p_keywords = exact_match(keywords)
+local p_datatypes = exact_match(datatypes)
+local p_macros = exact_match(macros)
+
+local keyword = token("keyword", p_keywords)
+local datatype = token("keyword", p_datatypes)
+local identifier = token("default", validword)
+
+local macro = token("data", #P("#") * startofline * P("#") * S("\t ")^0 * p_macros)
+
+cpplexer._rules = {
+ { "whitespace", spacing },
+ { "keyword", keyword },
+ { "type", datatype },
+ { "identifier", identifier },
+ { "string", shortstring },
+ { "longcomment", longcomment },
+ { "shortcomment", shortcomment },
+ { "number", number },
+ { "macro", macro },
+ { "operator", operator },
+ { "rest", rest },
+}
+
+local web = lexer.loadluafile("scite-context-lexer-web-snippets")
+
+if web then
+
+ lexer.inform("supporting web snippets in cpp lexer")
+
+ cpplexer._rules_web = {
+ { "whitespace", spacing },
+ { "keyword", keyword },
+ { "type", datatype },
+ { "identifier", identifier },
+ { "string", shortstring },
+ { "longcomment", longcomment },
+ { "shortcomment", shortcomment },
+ { "web", web.pattern },
+ { "number", number },
+ { "macro", macro },
+ { "operator", operator },
+ { "rest", rest },
+ }
+
+else
+
+ lexer.report("not supporting web snippets in cpp lexer")
+
+ cpplexer._rules_web = {
+ { "whitespace", spacing },
+ { "keyword", keyword },
+ { "type", datatype },
+ { "identifier", identifier },
+ { "string", shortstring },
+ { "longcomment", longcomment },
+ { "shortcomment", shortcomment },
+ { "number", number },
+ { "macro", macro },
+ { "operator", operator },
+ { "rest", rest },
+ }
+
+end
+
+cpplexer._tokenstyles = context.styleset
+
+cpplexer._foldpattern = P("/*") + P("*/") + S("{}") -- separate entry else interference (singular?)
+
+cpplexer._foldsymbols = {
+ _patterns = {
+ "[{}]",
+ "/%*",
+ "%*/",
+ },
+ -- ["data"] = { -- macro
+ -- ["region"] = 1,
+ -- ["endregion"] = -1,
+ -- ["if"] = 1,
+ -- ["ifdef"] = 1,
+ -- ["ifndef"] = 1,
+ -- ["endif"] = -1,
+ -- },
+ ["special"] = { -- operator
+ ["{"] = 1,
+ ["}"] = -1,
+ },
+ ["comment"] = {
+ ["/*"] = 1,
+ ["*/"] = -1,
+ }
+}
+
+-- -- by indentation:
+
+cpplexer._foldpatterns = nil
+cpplexer._foldsymbols = nil
+
+return cpplexer
diff --git a/context/data/textadept/context/lexers/scite-context-lexer-dummy.lua b/context/data/textadept/context/lexers/scite-context-lexer-dummy.lua
new file mode 100644
index 000000000..69590ed34
--- /dev/null
+++ b/context/data/textadept/context/lexers/scite-context-lexer-dummy.lua
@@ -0,0 +1,36 @@
+-- local info = {
+ version = 1.002,
+ comment = "scintilla lpeg lexer that triggers whitespace backtracking",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+-- the lexer dll doesn't backtrack when there is no embedded lexer so
+-- we need to trigger that, for instance in the bibtex lexer, but still
+-- we get failed lexing
+
+-- local lexer = require("lexer")
+local lexer = require("scite-context-lexer")
+local context = lexer.context
+local patterns = context.patterns
+
+local token = lexer.token
+
+local dummylexer = lexer.new("dummy","scite-context-lexer-dummy")
+local whitespace = dummylexer.whitespace
+
+local space = patterns.space
+local nospace = (1-space)
+
+local t_spacing = token(whitespace, space ^1)
+local t_rest = token("default", nospace^1)
+
+dummylexer._rules = {
+ { "whitespace", t_spacing },
+ { "rest", t_rest },
+}
+
+dummylexer._tokenstyles = context.styleset
+
+return dummylexer
diff --git a/context/data/textadept/context/lexers/scite-context-lexer-lua-longstring.lua b/context/data/textadept/context/lexers/scite-context-lexer-lua-longstring.lua
new file mode 100644
index 000000000..5d5b689d2
--- /dev/null
+++ b/context/data/textadept/context/lexers/scite-context-lexer-lua-longstring.lua
@@ -0,0 +1,32 @@
+local info = {
+ version = 1.002,
+ comment = "scintilla lpeg lexer for lua longstrings",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+-- local lexer = require("lexer")
+local lexer = require("scite-context-lexer")
+local context = lexer.context
+local patterns = context.patterns
+
+local token = lexer.token
+
+local stringlexer = lexer.new("lua-longstring","scite-context-lexer-lua-longstring")
+local whitespace = stringlexer.whitespace
+
+local space = patterns.space
+local nospace = 1 - space
+
+local p_spaces = token(whitespace, space ^1)
+local p_string = token("string", nospace^1)
+
+stringlexer._rules = {
+ { "whitespace", p_spaces },
+ { "string", p_string },
+}
+
+stringlexer._tokenstyles = context.styleset
+
+return stringlexer
diff --git a/context/data/textadept/context/lexers/scite-context-lexer-lua.lua b/context/data/textadept/context/lexers/scite-context-lexer-lua.lua
new file mode 100644
index 000000000..a8aa8dbe3
--- /dev/null
+++ b/context/data/textadept/context/lexers/scite-context-lexer-lua.lua
@@ -0,0 +1,389 @@
+local info = {
+ version = 1.002,
+ comment = "scintilla lpeg lexer for lua",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+-- beware: all multiline is messy, so even if it's no lexer, it should be an embedded lexer
+-- we probably could use a local whitespace variant but this is cleaner
+
+local P, R, S, C, Cmt, Cp = lpeg.P, lpeg.R, lpeg.S, lpeg.C, lpeg.Cmt, lpeg.Cp
+local match, find = string.match, string.find
+local setmetatable = setmetatable
+
+-- local lexer = require("lexer")
+local lexer = require("scite-context-lexer")
+local context = lexer.context
+local patterns = context.patterns
+
+local token = lexer.token
+local exact_match = lexer.exact_match
+local just_match = lexer.just_match
+
+local lualexer = lexer.new("lua","scite-context-lexer-lua")
+local whitespace = lualexer.whitespace
+
+local stringlexer = lexer.load("scite-context-lexer-lua-longstring")
+----- labellexer = lexer.load("scite-context-lexer-lua-labelstring")
+
+local directives = { } -- communication channel
+
+-- this will be extended
+
+-- we could combine some in a hash that returns the class that then makes the token
+-- this can save time on large files
+
+local keywords = {
+ "and", "break", "do", "else", "elseif", "end", "false", "for", "function", -- "goto",
+ "if", "in", "local", "nil", "not", "or", "repeat", "return", "then", "true",
+ "until", "while",
+}
+
+local functions = {
+ "assert", "collectgarbage", "dofile", "error", "getmetatable",
+ "ipairs", "load", "loadfile", "module", "next", "pairs",
+ "pcall", "print", "rawequal", "rawget", "rawset", "require",
+ "setmetatable", "tonumber", "tostring", "type", "unpack", "xpcall", "select",
+
+ "string", "table", "coroutine", "debug", "file", "io", "lpeg", "math", "os", "package", "bit32",
+}
+
+local constants = {
+ "_G", "_VERSION", "_M", "...", "_ENV",
+ -- here too
+ "__add", "__call", "__concat", "__div", "__idiv", "__eq", "__gc", "__index",
+ "__le", "__lt", "__metatable", "__mode", "__mul", "__newindex",
+ "__pow", "__sub", "__tostring", "__unm", "__len",
+ "__pairs", "__ipairs",
+ "NaN",
+}
+
+-- local tokenmappings = { }
+--
+-- for i=1,#keywords do tokenmappings[keywords [i]] = "keyword" }
+-- for i=1,#functions do tokenmappings[functions[i]] = "function" }
+-- for i=1,#constants do tokenmappings[constants[i]] = "constant" }
+
+local internals = { -- __
+ "add", "call", "concat", "div", "eq", "gc", "index",
+ "le", "lt", "metatable", "mode", "mul", "newindex",
+ "pow", "sub", "tostring", "unm", "len",
+}
+
+local depricated = {
+ "arg", "arg.n",
+ "loadstring", "setfenv", "getfenv",
+ "pack",
+}
+
+local csnames = { -- todo: option
+ "commands",
+ "context",
+-- "ctxcmd",
+-- "ctx",
+ "metafun",
+ "metapost",
+}
+
+local level = nil
+local setlevel = function(_,i,s) level = s return i end
+
+local equals = P("=")^0
+
+local longonestart = P("[[")
+local longonestop = P("]]")
+local longonestring = (1-longonestop)^0
+
+local longtwostart = P("[") * Cmt(equals,setlevel) * P("[")
+local longtwostop = P("]") * equals * P("]")
+
+local sentinels = { } setmetatable(sentinels, { __index = function(t,k) local v = "]" .. k .. "]" t[k] = v return v end })
+
+local longtwostring = P(function(input,index)
+ if level then
+ -- local sentinel = "]" .. level .. "]"
+ local sentinel = sentinels[level]
+ local _, stop = find(input,sentinel,index,true)
+ return stop and stop + 1 - #sentinel or #input + 1
+ end
+end)
+
+ local longtwostring_body = longtwostring
+
+ local longtwostring_end = P(function(input,index)
+ if level then
+ -- local sentinel = "]" .. level .. "]"
+ local sentinel = sentinels[level]
+ local _, stop = find(input,sentinel,index,true)
+ return stop and stop + 1 or #input + 1
+ end
+ end)
+
+local longcomment = Cmt(#("[[" + ("[" * C(equals) * "[")), function(input,index,level)
+ -- local sentinel = "]" .. level .. "]"
+ local sentinel = sentinels[level]
+ local _, stop = find(input,sentinel,index,true)
+ return stop and stop + 1 or #input + 1
+end)
+
+local space = patterns.space -- S(" \n\r\t\f\v")
+local any = patterns.any
+local eol = patterns.eol
+
+local squote = P("'")
+local dquote = P('"')
+local escaped = P("\\") * P(1)
+local dashes = P("--")
+
+local spacing = token(whitespace, space^1)
+local rest = token("default", any)
+
+local shortcomment = token("comment", dashes * (1-eol)^0)
+local longcomment = token("comment", dashes * longcomment)
+
+-- fails on very long string with \ at end of lines (needs embedded lexer)
+-- and also on newline before " but it makes no sense to waste time on it
+
+local shortstring = token("quote", dquote)
+ * token("string", (escaped + (1-dquote))^0)
+ * token("quote", dquote)
+ + token("quote", squote)
+ * token("string", (escaped + (1-squote))^0)
+ * token("quote", squote)
+
+----- longstring = token("quote", longonestart)
+----- * token("string", longonestring)
+----- * token("quote", longonestop)
+----- + token("quote", longtwostart)
+----- * token("string", longtwostring)
+----- * token("quote", longtwostop)
+
+local string = shortstring
+----- + longstring
+
+lexer.embed_lexer(lualexer, stringlexer, token("quote",longtwostart), token("string",longtwostring_body) * token("quote",longtwostring_end))
+
+local integer = P("-")^-1 * (patterns.hexadecimal + patterns.decimal)
+local number = token("number", patterns.float + integer)
+ * (token("error",R("AZ","az","__")^1))^0
+
+-- officially 127-255 are ok but not utf so useless
+
+----- validword = R("AZ","az","__") * R("AZ","az","__","09")^0
+
+local utf8character = P(1) * R("\128\191")^1
+local validword = (R("AZ","az","__") + utf8character) * (R("AZ","az","__","09") + utf8character)^0
+local validsuffix = (R("AZ","az") + utf8character) * (R("AZ","az","__","09") + utf8character)^0
+
+local identifier = token("default",validword)
+
+----- operator = token("special", P('..') + P('~=') + S('+-*/%^#=<>;:,.{}[]()')) -- maybe split off {}[]()
+----- operator = token("special", S('+-*/%^#=<>;:,{}[]()') + P('..') + P('.') + P('~=') ) -- maybe split off {}[]()
+----- operator = token("special", S('+-*/%^#=<>;:,{}[]().') + P('~=') ) -- no ^1 because of nested lexers
+local operator = token("special", S('+-*/%^#=<>;:,{}[]().|~')) -- no ^1 because of nested lexers
+
+local structure = token("special", S('{}[]()'))
+
+local optionalspace = spacing^0
+local hasargument = #S("{([")
+
+-- ideal should be an embedded lexer ..
+
+local gotokeyword = token("keyword", P("goto"))
+ * spacing
+ * token("grouping",validword)
+local gotolabel = token("keyword", P("::"))
+ * (spacing + shortcomment)^0
+ * token("grouping",validword)
+ * (spacing + shortcomment)^0
+ * token("keyword", P("::"))
+
+----- p_keywords = exact_match(keywords)
+----- p_functions = exact_match(functions)
+----- p_constants = exact_match(constants)
+----- p_internals = P("__")
+----- * exact_match(internals)
+
+local p_finish = #(1-R("az","AZ","__"))
+local p_keywords = lexer.helpers.utfchartabletopattern(keywords) * p_finish -- exact_match(keywords)
+local p_functions = lexer.helpers.utfchartabletopattern(functions) * p_finish -- exact_match(functions)
+local p_constants = lexer.helpers.utfchartabletopattern(constants) * p_finish -- exact_match(constants)
+local p_internals = P("__")
+ * lexer.helpers.utfchartabletopattern(internals) * p_finish -- exact_match(internals)
+
+local p_csnames = lexer.helpers.utfchartabletopattern(csnames) -- * p_finish -- just_match(csnames)
+local p_ctnames = P("ctx") * R("AZ","az","__")^0
+local keyword = token("keyword", p_keywords)
+local builtin = token("plain", p_functions)
+local constant = token("data", p_constants)
+local internal = token("data", p_internals)
+local csname = token("user", p_csnames + p_ctnames)
+ * p_finish * optionalspace * (
+ hasargument
+ + ( token("special", S(".:")) * optionalspace * token("user", validword) )^1
+ )^-1
+
+local identifier = token("default", validword)
+ * ( optionalspace * token("special", S(".:")) * optionalspace * (
+ token("warning", p_keywords) +
+ token("data", p_internals) +
+ token("default", validword )
+ ) )^0
+
+-- local t = { } for k, v in next, tokenmappings do t[#t+1] = k end t = table.concat(t)
+-- -- local experimental = (S(t)^1) / function(s) return tokenmappings[s] end * Cp()
+--
+-- local experimental = Cmt(S(t)^1, function(_,i,s)
+-- local t = tokenmappings[s]
+-- if t then
+-- return true, t, i
+-- end
+-- end)
+
+lualexer._rules = {
+ { "whitespace", spacing },
+ { "keyword", keyword }, -- can be combined
+ -- { "structure", structure },
+ { "function", builtin }, -- can be combined
+ { "constant", constant }, -- can be combined
+ -- { "experimental", experimental }, -- works but better split
+ { "csname", csname },
+ { "goto", gotokeyword },
+ { "identifier", identifier },
+ { "string", string },
+ { "number", number },
+ { "longcomment", longcomment },
+ { "shortcomment", shortcomment },
+ { "label", gotolabel },
+ { "operator", operator },
+ { "rest", rest },
+}
+
+-- -- experiment
+--
+-- local idtoken = R("az","AZ","__")
+--
+-- function context.one_of_match(specification)
+-- local pattern = idtoken -- the concat catches _ etc
+-- local list = { }
+-- for i=1,#specification do
+-- local style = specification[i][1]
+-- local words = specification[i][2]
+-- pattern = pattern + S(table.concat(words))
+-- for i=1,#words do
+-- list[words[i]] = style
+-- end
+-- end
+-- return Cmt(pattern^1, function(_,i,s)
+-- local style = list[s]
+-- if style then
+-- return true, { style, i } -- and i or nil
+-- else
+-- -- fail
+-- end
+-- end)
+-- end
+--
+-- local whatever = context.one_of_match {
+-- { "keyword", keywords }, -- keyword
+-- { "plain", functions }, -- builtin
+-- { "data", constants }, -- constant
+-- }
+--
+-- lualexer._rules = {
+-- { "whitespace", spacing },
+-- { "whatever", whatever },
+-- { "csname", csname },
+-- { "goto", gotokeyword },
+-- { "identifier", identifier },
+-- { "string", string },
+-- { "number", number },
+-- { "longcomment", longcomment },
+-- { "shortcomment", shortcomment },
+-- { "label", gotolabel },
+-- { "operator", operator },
+-- { "rest", rest },
+-- }
+
+lualexer._tokenstyles = context.styleset
+
+-- lualexer._foldpattern = R("az")^2 + S("{}[]") -- separate entry else interference
+
+lualexer._foldpattern = (P("end") + P("if") + P("do") + P("function") + P("repeat") + P("until")) * P(#(1 - R("az")))
+ + S("{}[]")
+
+lualexer._foldsymbols = {
+ _patterns = {
+ "[a-z][a-z]+",
+ "[{}%[%]]",
+ },
+ ["keyword"] = { -- challenge: if=0 then=1 else=-1 elseif=-1
+ ["if"] = 1, -- if .. [then|else] .. end
+ ["do"] = 1, -- [while] do .. end
+ ["function"] = 1, -- function .. end
+ ["repeat"] = 1, -- repeat .. until
+ ["until"] = -1,
+ ["end"] = -1,
+ },
+ ["comment"] = {
+ ["["] = 1, ["]"] = -1,
+ },
+ -- ["quote"] = { -- confusing
+ -- ["["] = 1, ["]"] = -1,
+ -- },
+ ["special"] = {
+ -- ["("] = 1, [")"] = -1,
+ ["{"] = 1, ["}"] = -1,
+ },
+}
+
+-- embedded in tex:
+
+local cstoken = R("az","AZ","\127\255") + S("@!?_")
+local texcsname = P("\\") * cstoken^1
+local commentline = P("%") * (1-S("\n\r"))^0
+
+local texcomment = token("comment", Cmt(commentline, function() return directives.cld_inline end))
+
+local longthreestart = P("\\!!bs")
+local longthreestop = P("\\!!es")
+local longthreestring = (1-longthreestop)^0
+
+local texstring = token("quote", longthreestart)
+ * token("string", longthreestring)
+ * token("quote", longthreestop)
+
+----- texcommand = token("user", texcsname)
+local texcommand = token("warning", texcsname)
+
+-- local texstring = token("quote", longthreestart)
+-- * (texcommand + token("string",P(1-texcommand-longthreestop)^1) - longthreestop)^0 -- we match long non-\cs sequences
+-- * token("quote", longthreestop)
+
+-- local whitespace = "whitespace"
+-- local spacing = token(whitespace, space^1)
+
+lualexer._directives = directives
+
+lualexer._rules_cld = {
+ { "whitespace", spacing },
+ { "texstring", texstring },
+ { "texcomment", texcomment },
+ { "texcommand", texcommand },
+ -- { "structure", structure },
+ { "keyword", keyword },
+ { "function", builtin },
+ { "csname", csname },
+ { "constant", constant },
+ { "identifier", identifier },
+ { "string", string },
+ { "longcomment", longcomment },
+ { "shortcomment", shortcomment }, -- should not be used inline so best signal it as comment (otherwise complex state till end of inline)
+ { "number", number },
+ { "operator", operator },
+ { "rest", rest },
+}
+
+return lualexer
diff --git a/context/data/textadept/context/lexers/scite-context-lexer-mps.lua b/context/data/textadept/context/lexers/scite-context-lexer-mps.lua
new file mode 100644
index 000000000..e24a41d0c
--- /dev/null
+++ b/context/data/textadept/context/lexers/scite-context-lexer-mps.lua
@@ -0,0 +1,183 @@
+local info = {
+ version = 1.002,
+ comment = "scintilla lpeg lexer for metafun",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+local global, string, table, lpeg = _G, string, table, lpeg
+local P, R, S, V = lpeg.P, lpeg.R, lpeg.S, lpeg.V
+local type = type
+
+-- local lexer = require("lexer")
+local lexer = require("scite-context-lexer")
+local context = lexer.context
+local patterns = context.patterns
+
+local token = lexer.token
+local exact_match = lexer.exact_match
+
+local metafunlexer = lexer.new("mps","scite-context-lexer-mps")
+local whitespace = metafunlexer.whitespace
+
+local metapostprimitives = { }
+local metapostinternals = { }
+local metapostshortcuts = { }
+local metapostcommands = { }
+
+local metafuninternals = { }
+local metafunshortcuts = { }
+local metafuncommands = { }
+
+local mergedshortcuts = { }
+local mergedinternals = { }
+
+do
+
+ local definitions = context.loaddefinitions("scite-context-data-metapost")
+
+ if definitions then
+ metapostprimitives = definitions.primitives or { }
+ metapostinternals = definitions.internals or { }
+ metapostshortcuts = definitions.shortcuts or { }
+ metapostcommands = definitions.commands or { }
+ end
+
+ local definitions = context.loaddefinitions("scite-context-data-metafun")
+
+ if definitions then
+ metafuninternals = definitions.internals or { }
+ metafunshortcuts = definitions.shortcuts or { }
+ metafuncommands = definitions.commands or { }
+ end
+
+ for i=1,#metapostshortcuts do
+ mergedshortcuts[#mergedshortcuts+1] = metapostshortcuts[i]
+ end
+ for i=1,#metafunshortcuts do
+ mergedshortcuts[#mergedshortcuts+1] = metafunshortcuts[i]
+ end
+
+ for i=1,#metapostinternals do
+ mergedinternals[#mergedinternals+1] = metapostinternals[i]
+ end
+ for i=1,#metafuninternals do
+ mergedinternals[#mergedinternals+1] = metafuninternals[i]
+ end
+
+end
+
+local space = patterns.space -- S(" \n\r\t\f\v")
+local any = patterns.any
+
+local dquote = P('"')
+local cstoken = patterns.idtoken
+local mptoken = patterns.alpha
+local leftbrace = P("{")
+local rightbrace = P("}")
+local number = patterns.real
+
+local cstokentex = R("az","AZ","\127\255") + S("@!?_")
+
+-- we could collapse as in tex
+
+local spacing = token(whitespace, space^1)
+local rest = token("default", any)
+local comment = token("comment", P("%") * (1-S("\n\r"))^0)
+local internal = token("reserved", exact_match(mergedshortcuts,false))
+local shortcut = token("data", exact_match(mergedinternals))
+local helper = token("command", exact_match(metafuncommands))
+local plain = token("plain", exact_match(metapostcommands))
+local quoted = token("quote", dquote)
+ * token("string", P(1-dquote)^0)
+ * token("quote", dquote)
+local texstuff = token("quote", P("btex ") + P("verbatimtex "))
+ * token("string", P(1-P(" etex"))^0)
+ * token("quote", P(" etex"))
+local primitive = token("primitive", exact_match(metapostprimitives))
+local identifier = token("default", cstoken^1)
+local number = token("number", number)
+local grouping = token("grouping", S("()[]{}")) -- can be an option
+local suffix = token("number", P("#@") + P("@#") + P("#"))
+local special = token("special", P("#@") + P("@#") + S("#()[]{}<>=:\"")) -- or else := <> etc split
+local texlike = token("warning", P("\\") * cstokentex^1)
+local extra = token("extra", P("+-+") + P("++") + S("`~%^&_-+*/\'|\\"))
+
+local nested = P { leftbrace * (V(1) + (1-rightbrace))^0 * rightbrace }
+local texlike = token("embedded", P("\\") * (P("MP") + P("mp")) * mptoken^1)
+ * spacing^0
+ * token("grouping", leftbrace)
+ * token("default", (nested + (1-rightbrace))^0 )
+ * token("grouping", rightbrace)
+ + token("warning", P("\\") * cstokentex^1)
+
+-- lua: we assume: lua ( "lua code" )
+
+local cldlexer = lexer.load("scite-context-lexer-cld","mps-cld")
+
+local startlua = P("lua") * space^0 * P('(') * space^0 * P('"')
+local stoplua = P('"') * space^0 * P(')')
+
+local startluacode = token("embedded", startlua)
+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 },
+ { "internal", internal },
+ { "shortcut", shortcut },
+ { "helper", helper },
+ { "plain", plain },
+ { "primitive", primitive },
+ { "luacall", luacall },
+ { "texstuff", texstuff },
+ { "suffix", suffix },
+ { "identifier", identifier },
+ { "number", number },
+ { "quoted", quoted },
+ -- { "grouping", grouping }, -- can be an option
+ { "special", special },
+ { "texlike", texlike },
+ { "extra", extra },
+ { "rest", rest },
+}
+
+metafunlexer._tokenstyles = context.styleset
+
+metafunlexer._foldpattern = patterns.lower^2 -- separate entry else interference
+
+metafunlexer._foldsymbols = {
+ _patterns = {
+ "[a-z][a-z]+",
+ },
+ ["plain"] = {
+ ["beginfig"] = 1,
+ ["endfig"] = -1,
+ ["beginglyph"] = 1,
+ ["endglyph"] = -1,
+ -- ["begingraph"] = 1,
+ -- ["endgraph"] = -1,
+ },
+ ["primitive"] = {
+ ["def"] = 1,
+ ["vardef"] = 1,
+ ["primarydef"] = 1,
+ ["secondarydef" ] = 1,
+ ["tertiarydef"] = 1,
+ ["enddef"] = -1,
+ ["if"] = 1,
+ ["fi"] = -1,
+ ["for"] = 1,
+ ["forever"] = 1,
+ ["endfor"] = -1,
+ }
+}
+
+-- if inspect then inspect(metafunlexer) end
+
+return metafunlexer
diff --git a/context/data/textadept/context/lexers/scite-context-lexer-pdf-object.lua b/context/data/textadept/context/lexers/scite-context-lexer-pdf-object.lua
new file mode 100644
index 000000000..cdf33cf7c
--- /dev/null
+++ b/context/data/textadept/context/lexers/scite-context-lexer-pdf-object.lua
@@ -0,0 +1,137 @@
+local info = {
+ version = 1.002,
+ comment = "scintilla lpeg lexer for pdf objects",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+-- no longer used: nesting lexers with whitespace in start/stop is unreliable
+
+local P, R, S, C, V = lpeg.P, lpeg.R, lpeg.S, lpeg.C, lpeg.V
+
+-- local lexer = require("lexer")
+local lexer = require("scite-context-lexer")
+local context = lexer.context
+local patterns = context.patterns
+
+local token = lexer.token
+
+local pdfobjectlexer = lexer.new("pdfobj","scite-context-lexer-pdf-object")
+local whitespace = pdfobjectlexer.whitespace
+
+local space = patterns.space
+local spacing = patterns.spacing
+local nospacing = patterns.nospacing
+local anything = patterns.anything
+local newline = patterns.eol
+local real = patterns.real
+local cardinal = patterns.cardinal
+
+local lparent = P("(")
+local rparent = P(")")
+local langle = P("<")
+local rangle = P(">")
+local escape = P("\\")
+local unicodetrigger = P("feff")
+
+local nametoken = 1 - space - S("<>/[]()")
+local name = P("/") * nametoken^1
+
+local p_string = P { ( escape * anything + lparent * V(1) * rparent + (1 - rparent) )^0 }
+
+local t_spacing = token(whitespace, spacing)
+local t_spaces = token(whitespace, spacing)^0
+local t_rest = token("default", nospacing) -- anything
+
+local p_stream = P("stream")
+local p_endstream = P("endstream")
+local p_obj = P("obj")
+local p_endobj = P("endobj")
+local p_reference = P("R")
+
+local p_objectnumber = patterns.cardinal
+local p_comment = P("%") * (1-S("\n\r"))^0
+
+local t_string = token("quote", lparent)
+ * token("string", p_string)
+ * token("quote", rparent)
+local t_unicode = token("quote", langle)
+ * token("plain", unicodetrigger)
+ * token("string", (1-rangle)^1)
+ * token("quote", rangle)
+local t_whatsit = token("quote", langle)
+ * token("string", (1-rangle)^1)
+ * token("quote", rangle)
+local t_keyword = token("command", name)
+local t_constant = token("constant", name)
+local t_number = token("number", real)
+-- t_reference = token("number", cardinal)
+-- * t_spacing
+-- * token("number", cardinal)
+local t_reserved = token("number", P("true") + P("false") + P("NULL"))
+local t_reference = token("warning", cardinal)
+ * t_spacing
+ * token("warning", cardinal)
+ * t_spacing
+ * token("keyword", p_reference)
+
+local t_comment = token("comment", p_comment)
+
+local t_openobject = token("warning", p_objectnumber * spacing)
+-- * t_spacing
+ * token("warning", p_objectnumber * spacing)
+-- * t_spacing
+ * token("keyword", p_obj)
+local t_closeobject = token("keyword", p_endobj)
+
+local t_opendictionary = token("grouping", P("<<"))
+local t_closedictionary = token("grouping", P(">>"))
+
+local t_openarray = token("grouping", P("["))
+local t_closearray = token("grouping", P("]"))
+
+-- todo: comment
+
+local t_stream = token("keyword", p_stream)
+-- * token("default", newline * (1-newline*p_endstream*newline)^1 * newline)
+-- * token("text", (1 - p_endstream)^1)
+ * (token("text", (1 - p_endstream-spacing)^1) + t_spacing)^1
+ * token("keyword", p_endstream)
+
+local t_dictionary = { "dictionary",
+ dictionary = t_opendictionary * (t_spaces * t_keyword * t_spaces * V("whatever"))^0 * t_spaces * t_closedictionary,
+ array = t_openarray * (t_spaces * V("whatever"))^0 * t_spaces * t_closearray,
+ whatever = V("dictionary") + V("array") + t_constant + t_reference + t_string + t_unicode + t_number + t_reserved + t_whatsit,
+ }
+
+----- t_object = { "object", -- weird that we need to catch the end here (probably otherwise an invalid lpeg)
+----- object = t_spaces * (V("dictionary") * t_spaces * t_stream^-1 + V("array") + V("number") + t_spaces) * t_spaces * t_closeobject,
+----- dictionary = t_opendictionary * (t_spaces * t_keyword * t_spaces * V("whatever"))^0 * t_spaces * t_closedictionary,
+----- array = t_openarray * (t_spaces * V("whatever"))^0 * t_spaces * t_closearray,
+----- whatever = V("dictionary") + V("array") + t_constant + t_reference + t_string + t_unicode + t_number + t_reserved + t_whatsit,
+----- number = t_number,
+----- }
+
+local t_object = { "object", -- weird that we need to catch the end here (probably otherwise an invalid lpeg)
+ dictionary = t_dictionary.dictionary,
+ array = t_dictionary.array,
+ whatever = t_dictionary.whatever,
+ object = t_openobject^-1 * t_spaces * (V("dictionary") * t_spaces * t_stream^-1 + V("array") + V("number") + t_spaces) * t_spaces * t_closeobject,
+ number = t_number,
+ }
+
+pdfobjectlexer._shared = {
+ dictionary = t_dictionary,
+ object = t_object,
+ stream = t_stream,
+}
+
+pdfobjectlexer._rules = {
+ { "whitespace", t_spacing }, -- in fact, here we don't want whitespace as it's top level lexer work
+ { "object", t_object },
+}
+
+pdfobjectlexer._tokenstyles = context.styleset
+
+return pdfobjectlexer
diff --git a/context/data/textadept/context/lexers/scite-context-lexer-pdf-xref.lua b/context/data/textadept/context/lexers/scite-context-lexer-pdf-xref.lua
new file mode 100644
index 000000000..f08d16488
--- /dev/null
+++ b/context/data/textadept/context/lexers/scite-context-lexer-pdf-xref.lua
@@ -0,0 +1,44 @@
+local info = {
+ version = 1.002,
+ comment = "scintilla lpeg lexer for pdf xref",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+-- no longer used: nesting lexers with whitespace in start/stop is unreliable
+
+local P, R = lpeg.P, lpeg.R
+
+-- local lexer = require("lexer")
+local lexer = require("scite-context-lexer")
+local context = lexer.context
+local patterns = context.patterns
+
+local token = lexer.token
+
+local pdfxreflexer = lexer.new("pdfxref","scite-context-lexer-pdf-xref")
+local whitespace = pdfxreflexer.whitespace
+
+local spacing = patterns.spacing
+local cardinal = patterns.cardinal
+local alpha = patterns.alpha
+
+local t_spacing = token(whitespace, spacing)
+
+local p_xref = P("xref")
+local t_xref = token("keyword",p_xref)
+ * token("number", cardinal * spacing * cardinal * spacing)
+
+local t_number = token("number", cardinal * spacing * cardinal * spacing)
+ * token("keyword", alpha)
+
+pdfxreflexer._rules = {
+ { "whitespace", t_spacing },
+ { "xref", t_xref },
+ { "number", t_number },
+}
+
+pdfxreflexer._tokenstyles = context.styleset
+
+return pdfxreflexer
diff --git a/context/data/textadept/context/lexers/scite-context-lexer-pdf.lua b/context/data/textadept/context/lexers/scite-context-lexer-pdf.lua
new file mode 100644
index 000000000..1d4796ea5
--- /dev/null
+++ b/context/data/textadept/context/lexers/scite-context-lexer-pdf.lua
@@ -0,0 +1,205 @@
+local info = {
+ version = 1.002,
+ comment = "scintilla lpeg lexer for pdf",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+-- pdf is normally startic .. i.e. not edited so we don't really
+-- need embedded lexers.
+
+local P, R, S, V = lpeg.P, lpeg.R, lpeg.S, lpeg.V
+
+-- local lexer = require("lexer")
+local lexer = require("scite-context-lexer")
+local context = lexer.context
+local patterns = context.patterns
+
+local token = lexer.token
+
+local pdflexer = lexer.new("pdf","scite-context-lexer-pdf")
+local whitespace = pdflexer.whitespace
+
+----- pdfobjectlexer = lexer.load("scite-context-lexer-pdf-object")
+----- pdfxreflexer = lexer.load("scite-context-lexer-pdf-xref")
+
+local anything = patterns.anything
+local space = patterns.space
+local spacing = patterns.spacing
+local nospacing = patterns.nospacing
+local anything = patterns.anything
+local restofline = patterns.restofline
+
+local t_whitespace = token(whitespace, spacing)
+local t_spacing = token("default", spacing)
+----- t_rest = token("default", nospacing)
+local t_rest = token("default", anything)
+
+local p_comment = P("%") * restofline
+local t_comment = token("comment", p_comment)
+
+-- whatever
+
+local space = patterns.space
+local spacing = patterns.spacing
+local nospacing = patterns.nospacing
+local anything = patterns.anything
+local newline = patterns.eol
+local real = patterns.real
+local cardinal = patterns.cardinal
+local alpha = patterns.alpha
+
+local lparent = P("(")
+local rparent = P(")")
+local langle = P("<")
+local rangle = P(">")
+local escape = P("\\")
+local unicodetrigger = P("feff")
+
+local nametoken = 1 - space - S("<>/[]()")
+local name = P("/") * nametoken^1
+
+local p_string = P { ( escape * anything + lparent * V(1) * rparent + (1 - rparent) )^0 }
+
+local t_spacing = token("default", spacing)
+local t_spaces = token("default", spacing)^0
+local t_rest = token("default", nospacing) -- anything
+
+local p_stream = P("stream")
+local p_endstream = P("endstream")
+local p_obj = P("obj")
+local p_endobj = P("endobj")
+local p_reference = P("R")
+
+local p_objectnumber = patterns.cardinal
+local p_comment = P("%") * (1-S("\n\r"))^0
+
+local t_string = token("quote", lparent)
+ * token("string", p_string)
+ * token("quote", rparent)
+local t_unicode = token("quote", langle)
+ * token("plain", unicodetrigger)
+ * token("string", (1-rangle)^1)
+ * token("quote", rangle)
+local t_whatsit = token("quote", langle)
+ * token("string", (1-rangle)^1)
+ * token("quote", rangle)
+local t_keyword = token("command", name)
+local t_constant = token("constant", name)
+local t_number = token("number", real)
+-- t_reference = token("number", cardinal)
+-- * t_spacing
+-- * token("number", cardinal)
+local t_reserved = token("number", P("true") + P("false") + P("NULL"))
+-- t_reference = token("warning", cardinal * spacing * cardinal * spacing)
+-- * token("keyword", p_reference)
+local t_reference = token("warning", cardinal)
+ * t_spacing
+ * token("warning", cardinal)
+ * t_spacing
+ * token("keyword", p_reference)
+
+local t_comment = token("comment", p_comment)
+
+local t_openobject = token("warning", p_objectnumber)
+ * t_spacing
+ * token("warning", p_objectnumber)
+ * t_spacing
+ * token("keyword", p_obj)
+-- t_openobject = token("warning", p_objectnumber * spacing)
+-- * token("warning", p_objectnumber * spacing)
+-- * token("keyword", p_obj)
+local t_closeobject = token("keyword", p_endobj)
+
+local t_opendictionary = token("grouping", P("<<"))
+local t_closedictionary = token("grouping", P(">>"))
+
+local t_openarray = token("grouping", P("["))
+local t_closearray = token("grouping", P("]"))
+
+local t_stream = token("keyword", p_stream)
+ * token("text", (1 - p_endstream)^1)
+ * token("keyword", p_endstream)
+
+local t_dictionary = { "dictionary",
+ dictionary = t_opendictionary * (t_spaces * t_keyword * t_spaces * V("whatever"))^0 * t_spaces * t_closedictionary,
+ array = t_openarray * (t_spaces * V("whatever"))^0 * t_spaces * t_closearray,
+ whatever = V("dictionary") + V("array") + t_constant + t_reference + t_string + t_unicode + t_number + t_reserved + t_whatsit,
+ }
+
+local t_object = { "object", -- weird that we need to catch the end here (probably otherwise an invalid lpeg)
+ dictionary = t_dictionary.dictionary,
+ array = t_dictionary.array,
+ whatever = t_dictionary.whatever,
+ object = t_openobject * t_spaces * (V("dictionary")^-1 * t_spaces * t_stream^-1 + V("array") + V("number") + t_spaces) * t_spaces * t_closeobject,
+ number = t_number,
+ }
+
+-- objects ... sometimes NUL characters play havoc ... and in xref we have
+-- issues with embedded lexers that have spaces in the start and stop
+-- conditions and this cannot be handled well either ... so, an imperfect
+-- solution ... but anyway, there is not that much that can end up in
+-- the root of the tree see we're sort of safe
+
+local p_trailer = P("trailer")
+local t_trailer = token("keyword", p_trailer)
+ * t_spacing
+ * t_dictionary
+-- t_trailer = token("keyword", p_trailer * spacing)
+-- * t_dictionary
+
+local p_startxref = P("startxref")
+local t_startxref = token("keyword", p_startxref)
+ * t_spacing
+ * token("number", cardinal)
+-- t_startxref = token("keyword", p_startxref * spacing)
+-- * token("number", cardinal)
+
+local p_xref = P("xref")
+local t_xref = token("keyword",p_xref)
+ * t_spacing
+ * token("number", cardinal)
+ * t_spacing
+ * token("number", cardinal)
+ * spacing
+-- t_xref = token("keyword",p_xref)
+-- * token("number", spacing * cardinal * spacing * cardinal * spacing)
+
+local t_number = token("number", cardinal)
+ * t_spacing
+ * token("number", cardinal)
+ * t_spacing
+ * token("keyword", S("fn"))
+-- t_number = token("number", cardinal * spacing * cardinal * spacing)
+-- * token("keyword", S("fn"))
+
+pdflexer._rules = {
+ { "whitespace", t_whitespace },
+ { "object", t_object },
+ { "comment", t_comment },
+ { "trailer", t_trailer },
+ { "startxref", t_startxref },
+ { "xref", t_xref },
+ { "number", t_number },
+ { "rest", t_rest },
+}
+
+pdflexer._tokenstyles = context.styleset
+
+-- lexer.inspect(pdflexer)
+
+-- collapser: obj endobj stream endstream
+
+pdflexer._foldpattern = p_obj + p_endobj + p_stream + p_endstream
+
+pdflexer._foldsymbols = {
+ ["keyword"] = {
+ ["obj"] = 1,
+ ["endobj"] = -1,
+ ["stream"] = 1,
+ ["endstream"] = -1,
+ },
+}
+
+return pdflexer
diff --git a/context/data/textadept/context/lexers/scite-context-lexer-sql.lua b/context/data/textadept/context/lexers/scite-context-lexer-sql.lua
new file mode 100644
index 000000000..ea432c5c9
--- /dev/null
+++ b/context/data/textadept/context/lexers/scite-context-lexer-sql.lua
@@ -0,0 +1,239 @@
+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 lexer = require("scite-context-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/context/data/textadept/context/lexers/scite-context-lexer-tex-web.lua b/context/data/textadept/context/lexers/scite-context-lexer-tex-web.lua
new file mode 100644
index 000000000..4a55fd143
--- /dev/null
+++ b/context/data/textadept/context/lexers/scite-context-lexer-tex-web.lua
@@ -0,0 +1,24 @@
+local info = {
+ version = 1.002,
+ comment = "scintilla lpeg lexer for tex web",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+-- local lexer = require("lexer")
+local lexer = require("scite-context-lexer")
+local context = lexer.context
+local patterns = context.patterns
+
+local texweblexer = lexer.new("tex-web","scite-context-lexer-tex")
+local texlexer = lexer.load("scite-context-lexer-tex")
+
+-- can probably be done nicer now, a bit of a hack
+
+texweblexer._rules = texlexer._rules_web
+texweblexer._tokenstyles = texlexer._tokenstyles
+texweblexer._foldsymbols = texlexer._foldsymbols
+texweblexer._directives = texlexer._directives
+
+return texweblexer
diff --git a/context/data/textadept/context/lexers/scite-context-lexer-tex.lua b/context/data/textadept/context/lexers/scite-context-lexer-tex.lua
new file mode 100644
index 000000000..bc08bfcd9
--- /dev/null
+++ b/context/data/textadept/context/lexers/scite-context-lexer-tex.lua
@@ -0,0 +1,567 @@
+local info = {
+ version = 1.002,
+ comment = "scintilla lpeg lexer for context",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+-- maybe: _LINEBYLINE variant for large files (no nesting)
+-- maybe: protected_macros
+
+--[[
+
+ experiment dd 2009/10/28 .. todo:
+
+ -- figure out if tabs instead of splits are possible
+ -- locate an option to enter name in file dialogue (like windows permits)
+ -- figure out why loading a file fails
+ -- we cannot print to the log pane
+ -- we cannot access props["keywordclass.macros.context.en"]
+ -- lexer.get_property only handles integers
+ -- we cannot run a command to get the location of mult-def.lua
+
+ -- local interface = props["keywordclass.macros.context.en"]
+ -- local interface = lexer.get_property("keywordclass.macros.context.en","")
+
+]]--
+
+local global, string, table, lpeg = _G, string, table, lpeg
+local P, R, S, V, C, Cmt, Cp, Cc, Ct = lpeg.P, lpeg.R, lpeg.S, lpeg.V, lpeg.C, lpeg.Cmt, lpeg.Cp, lpeg.Cc, lpeg.Ct
+local type, next = type, next
+local find, match, lower, upper = string.find, string.match, string.lower, string.upper
+
+-- local lexer = require("lexer")
+local lexer = require("scite-context-lexer")
+local context = lexer.context
+local patterns = context.patterns
+local inform = context.inform
+
+local token = lexer.token
+local exact_match = lexer.exact_match
+
+local contextlexer = lexer.new("tex","scite-context-lexer-tex")
+local whitespace = contextlexer.whitespace
+
+local cldlexer = lexer.load("scite-context-lexer-cld")
+local mpslexer = lexer.load("scite-context-lexer-mps")
+
+local commands = { en = { } }
+local primitives = { }
+local helpers = { }
+local constants = { }
+
+do -- todo: only once, store in global
+
+ -- commands helpers primitives
+
+ local definitions = context.loaddefinitions("scite-context-data-interfaces")
+
+ if definitions then
+ local list = { }
+ for interface, list in next, definitions do
+ list[#list+1] = interface
+ local c = { }
+ for i=1,#list do
+ c[list[i]] = true
+ end
+ if interface ~= "en" then
+ list = definitions.en
+ if list then
+ for i=1,#list do
+ c[list[i]] = true
+ end
+ end
+ end
+ commands[interface] = c
+ end
+ inform("context user interfaces '%s' supported",table.concat(list," "))
+ end
+
+ local definitions = context.loaddefinitions("scite-context-data-context")
+ local overloaded = { }
+
+ if definitions then
+ helpers = definitions.helpers or { }
+ constants = definitions.constants or { }
+ for i=1,#helpers do
+ overloaded[helpers[i]] = true
+ end
+ for i=1,#constants do
+ overloaded[constants[i]] = true
+ end
+ end
+
+ local definitions = context.loaddefinitions("scite-context-data-tex")
+
+ if definitions then
+ local function add(data,normal)
+ for k, v in next, data do
+ if v ~= "/" and v ~= "-" then
+ if not overloaded[v] then
+ primitives[#primitives+1] = v
+ end
+ if normal then
+ v = "normal" .. v
+ if not overloaded[v] then
+ primitives[#primitives+1] = v
+ end
+ end
+ end
+ end
+ end
+ add(definitions.tex,true)
+ add(definitions.etex,true)
+ add(definitions.pdftex,true)
+ add(definitions.aleph,true)
+ add(definitions.omega,true)
+ add(definitions.luatex,true)
+ add(definitions.xetex,true)
+ end
+
+end
+
+local currentcommands = commands.en or { }
+
+local cstoken = R("az","AZ","\127\255") + S("@!?_")
+
+local knowncommand = Cmt(cstoken^1, function(_,i,s)
+ return currentcommands[s] and i
+end)
+
+local utfchar = context.utfchar
+local wordtoken = context.patterns.wordtoken
+local iwordtoken = context.patterns.iwordtoken
+local wordpattern = context.patterns.wordpattern
+local iwordpattern = context.patterns.iwordpattern
+local invisibles = context.patterns.invisibles
+local checkedword = context.checkedword
+local styleofword = context.styleofword
+local setwordlist = context.setwordlist
+local validwords = false
+local validminimum = 3
+
+-- % language=uk
+
+-- fails (empty loop message) ... latest lpeg issue?
+
+local knownpreamble = Cmt(P("% "), function(input,i,_) -- todo : utfbomb, was #P("% ")
+ if i < 10 then
+ validwords, validminimum = false, 3
+ local s, e, word = find(input,"^(.-)[\n\r]",i) -- combine with match
+ if word then
+ local interface = match(word,"interface=([a-z][a-z]+)")
+ if interface and #interface == 2 then
+ inform("enabling context user interface '%s'",interface)
+ currentcommands = commands[interface] or commands.en or { }
+ end
+ local language = match(word,"language=([a-z][a-z]+)")
+ validwords, validminimum = setwordlist(language)
+ end
+ end
+ return false
+end)
+
+-- -- the token list contains { "style", endpos } entries
+-- --
+-- -- in principle this is faster but it is also crash sensitive for large files
+
+-- local constants_hash = { } for i=1,#constants do constants_hash [constants [i]] = true end
+-- local helpers_hash = { } for i=1,#helpers do helpers_hash [helpers [i]] = true end
+-- local primitives_hash = { } for i=1,#primitives do primitives_hash[primitives[i]] = true end
+
+-- local specialword = Ct( P("\\") * Cmt( C(cstoken^1), function(input,i,s)
+-- if currentcommands[s] then
+-- return true, "command", i
+-- elseif constants_hash[s] then
+-- return true, "data", i
+-- elseif helpers_hash[s] then
+-- return true, "plain", i
+-- elseif primitives_hash[s] then
+-- return true, "primitive", i
+-- else -- if starts with if then primitive
+-- return true, "user", i
+-- end
+-- end) )
+
+-- local specialword = P("\\") * Cmt( C(cstoken^1), function(input,i,s)
+-- if currentcommands[s] then
+-- return true, { "command", i }
+-- elseif constants_hash[s] then
+-- return true, { "data", i }
+-- elseif helpers_hash[s] then
+-- return true, { "plain", i }
+-- elseif primitives_hash[s] then
+-- return true, { "primitive", i }
+-- else -- if starts with if then primitive
+-- return true, { "user", i }
+-- end
+-- end)
+
+-- experiment: keep space with whatever ... less tables
+
+-- 10pt
+
+local commentline = P("%") * (1-S("\n\r"))^0
+local endline = S("\n\r")^1
+
+local space = patterns.space -- S(" \n\r\t\f\v")
+local any = patterns.any
+local backslash = P("\\")
+local hspace = S(" \t")
+
+local p_spacing = space^1
+local p_rest = any
+
+local p_preamble = knownpreamble
+local p_comment = commentline
+----- p_command = backslash * knowncommand
+----- p_constant = backslash * exact_match(constants)
+----- p_helper = backslash * exact_match(helpers)
+----- p_primitive = backslash * exact_match(primitives)
+
+local p_command = backslash * lexer.helpers.utfchartabletopattern(currentcommands) * #(1-cstoken)
+local p_constant = backslash * lexer.helpers.utfchartabletopattern(constants) * #(1-cstoken)
+local p_helper = backslash * lexer.helpers.utfchartabletopattern(helpers) * #(1-cstoken)
+local p_primitive = backslash * lexer.helpers.utfchartabletopattern(primitives) * #(1-cstoken)
+
+local p_ifprimitive = P("\\if") * cstoken^1
+local p_csname = backslash * (cstoken^1 + P(1))
+local p_grouping = S("{$}")
+local p_special = S("#()[]<>=\"")
+local p_extra = S("`~%^&_-+/\'|")
+local p_text = iwordtoken^1 --maybe add punctuation and space
+
+local p_reserved = backslash * (
+ P("??") + R("az") * P("!")
+ ) * cstoken^1
+
+local p_number = context.patterns.real
+local p_unit = P("pt") + P("bp") + P("sp") + P("mm") + P("cm") + P("cc") + P("dd")
+
+-- no looking back = #(1-S("[=")) * cstoken^3 * #(1-S("=]"))
+
+-- This one gives stack overflows:
+--
+-- local p_word = Cmt(iwordpattern, function(_,i,s)
+-- if validwords then
+-- return checkedword(validwords,validminimum,s,i)
+-- else
+-- -- return true, { "text", i }
+-- return true, "text", i
+-- end
+-- end)
+--
+-- So we use this one instead:
+
+----- p_word = Ct( iwordpattern / function(s) return styleofword(validwords,validminimum,s) end * Cp() ) -- the function can be inlined
+local p_word = iwordpattern / function(s) return styleofword(validwords,validminimum,s) end * Cp() -- the function can be inlined
+
+----- p_text = (1 - p_grouping - p_special - p_extra - backslash - space + hspace)^1
+
+-- keep key pressed at end-of syst-aux.mkiv:
+--
+-- 0 : 15 sec
+-- 1 : 13 sec
+-- 2 : 10 sec
+--
+-- the problem is that quite some style subtables get generated so collapsing ranges helps
+
+local option = 1
+
+if option == 1 then
+
+ p_comment = p_comment^1
+ p_grouping = p_grouping^1
+ p_special = p_special^1
+ p_extra = p_extra^1
+
+ p_command = p_command^1
+ p_constant = p_constant^1
+ p_helper = p_helper^1
+ p_primitive = p_primitive^1
+ p_ifprimitive = p_ifprimitive^1
+ p_reserved = p_reserved^1
+
+elseif option == 2 then
+
+ local included = space^0
+
+ p_comment = (p_comment * included)^1
+ p_grouping = (p_grouping * included)^1
+ p_special = (p_special * included)^1
+ p_extra = (p_extra * included)^1
+
+ p_command = (p_command * included)^1
+ p_constant = (p_constant * included)^1
+ p_helper = (p_helper * included)^1
+ p_primitive = (p_primitive * included)^1
+ p_ifprimitive = (p_ifprimitive * included)^1
+ p_reserved = (p_reserved * included)^1
+
+end
+
+local p_invisible = invisibles^1
+
+local spacing = token(whitespace, p_spacing )
+
+local rest = token("default", p_rest )
+local preamble = token("preamble", p_preamble )
+local comment = token("comment", p_comment )
+local command = token("command", p_command )
+local constant = token("data", p_constant )
+local helper = token("plain", p_helper )
+local primitive = token("primitive", p_primitive )
+local ifprimitive = token("primitive", p_ifprimitive)
+local reserved = token("reserved", p_reserved )
+local csname = token("user", p_csname )
+local grouping = token("grouping", p_grouping )
+local number = token("number", p_number )
+ * token("constant", p_unit )
+local special = token("special", p_special )
+local reserved = token("reserved", p_reserved ) -- reserved internal preproc
+local extra = token("extra", p_extra )
+local invisible = token("invisible", p_invisible )
+local text = token("default", p_text )
+local word = p_word
+
+----- startluacode = token("grouping", P("\\startluacode"))
+----- stopluacode = token("grouping", P("\\stopluacode"))
+
+local luastatus = false
+local luatag = nil
+local lualevel = 0
+
+local function startdisplaylua(_,i,s)
+ luatag = s
+ luastatus = "display"
+ cldlexer._directives.cld_inline = false
+ return true
+end
+
+local function stopdisplaylua(_,i,s)
+ local ok = luatag == s
+ if ok then
+ cldlexer._directives.cld_inline = false
+ luastatus = false
+ end
+ return ok
+end
+
+local function startinlinelua(_,i,s)
+ if luastatus == "display" then
+ return false
+ elseif not luastatus then
+ luastatus = "inline"
+ cldlexer._directives.cld_inline = true
+ lualevel = 1
+ return true
+ else-- if luastatus == "inline" then
+ lualevel = lualevel + 1
+ return true
+ end
+end
+
+local function stopinlinelua_b(_,i,s) -- {
+ if luastatus == "display" then
+ return false
+ elseif luastatus == "inline" then
+ lualevel = lualevel + 1 -- ?
+ return false
+ else
+ return true
+ end
+end
+
+local function stopinlinelua_e(_,i,s) -- }
+ if luastatus == "display" then
+ return false
+ elseif luastatus == "inline" then
+ lualevel = lualevel - 1
+ local ok = lualevel <= 0 -- was 0
+ if ok then
+ cldlexer._directives.cld_inline = false
+ luastatus = false
+ end
+ return ok
+ else
+ return true
+ end
+end
+
+contextlexer._reset_parser = function()
+ luastatus = false
+ luatag = nil
+ lualevel = 0
+end
+
+local luaenvironment = P("lua") * (P("setups") + P("code") + P(true))
+ + P("ctxfunction") * (P("definition") + P(true))
+
+local inlinelua = P("\\") * (
+ P("ctx") * (P("lua") + P("command") + P("late") * (P("lua") + P("command")) + P("function"))
+ + P("cld") * (P("command") + P("context"))
+ + P("luaexpr")
+ + (P("direct") + P("late")) * P("lua")
+ )
+
+local startlua = P("\\start") * Cmt(luaenvironment,startdisplaylua)
+ + P("<?lua") * Cmt(P(true),startdisplaylua)
+ + inlinelua * space^0 * ( Cmt(P("{"),startinlinelua) )
+
+local stoplua = P("\\stop") * Cmt(luaenvironment,stopdisplaylua)
+ + P("?>") * Cmt(P(true),stopdisplaylua)
+ + Cmt(P("{"),stopinlinelua_b)
+ + Cmt(P("}"),stopinlinelua_e)
+
+local startluacode = token("embedded", startlua)
+local stopluacode = #stoplua * token("embedded", stoplua)
+
+local luacall = P("clf_") * R("az","__","AZ")^1
+
+local metafuncall = ( P("reusable") + P("usable") + P("unique") + P("use") + P("reuse") ) * ("MPgraphic")
+ + P("uniqueMPpagegraphic")
+ + P("MPpositiongraphic")
+
+local metafunenvironment = metafuncall -- ( P("use") + P("reusable") + P("unique") ) * ("MPgraphic")
+ + P("MP") * ( P("code")+ P("page") + P("inclusions") + P("initializations") + P("definitions") + P("extensions") + P("graphic") + P("calculation") )
+
+local startmetafun = P("\\start") * metafunenvironment
+local stopmetafun = P("\\stop") * metafunenvironment -- todo match start
+
+----- subsystem = token("embedded", P("\\xml") * R("az")^1 + (P("\\st") * (P("art") + P("op")) * P("xmlsetups")))
+local subsystemtags = P("xml") + P("btx") -- will be pluggable or maybe even a proper list of valid commands
+local subsystemmacro = P("\\") * (subsystemtags * R("az")^1 + (R("az")-subsystemtags)^1 * subsystemtags * R("az")^1)
+local subsystem = token("embedded", subsystemmacro)
+
+local openargument = token("special", P("{"))
+local closeargument = token("special", P("}"))
+local argumentcontent = token("default",(1-P("}"))^0) -- maybe space needs a treatment
+
+local metafunarguments = (spacing^0 * openargument * argumentcontent * closeargument)^-2
+
+local startmetafuncode = token("embedded", startmetafun) * metafunarguments
+local stopmetafuncode = token("embedded", stopmetafun)
+
+local callers = token("embedded", P("\\") * metafuncall) * metafunarguments
+ + token("embedded", P("\\") * luacall)
+
+lexer.embed_lexer(contextlexer, cldlexer, startluacode, stopluacode)
+lexer.embed_lexer(contextlexer, mpslexer, startmetafuncode, stopmetafuncode)
+
+contextlexer._rules = {
+ { "whitespace", spacing },
+ { "preamble", preamble },
+ { "word", word },
+ { "text", text }, -- non words
+ { "comment", comment },
+ { "constant", constant },
+ -- { "subsystem", subsystem },
+ { "callers", callers },
+ { "subsystem", subsystem },
+ { "helper", helper },
+ { "command", command },
+ { "primitive", primitive },
+ { "ifprimitive", ifprimitive },
+ -- { "subsystem", subsystem },
+ { "reserved", reserved },
+ { "csname", csname },
+ -- { "whatever", specialword }, -- not yet, crashes
+ { "grouping", grouping },
+ -- { "number", number },
+ { "special", special },
+ { "extra", extra },
+ { "invisible", invisible },
+ { "rest", rest },
+}
+
+-- Watch the text grabber, after all, we're talking mostly of text (beware,
+-- no punctuation here as it can be special). We might go for utf here.
+
+local web = lexer.loadluafile("scite-context-lexer-web-snippets")
+
+if web then
+
+ lexer.inform("supporting web snippets in tex lexer")
+
+ contextlexer._rules_web = {
+ { "whitespace", spacing },
+ { "text", text }, -- non words
+ { "comment", comment },
+ { "constant", constant },
+ { "callers", callers },
+ { "helper", helper },
+ { "command", command },
+ { "primitive", primitive },
+ { "ifprimitive", ifprimitive },
+ { "reserved", reserved },
+ { "csname", csname },
+ { "grouping", grouping },
+ { "special", special },
+ { "extra", extra },
+ { "invisible", invisible },
+ { "web", web.pattern },
+ { "rest", rest },
+ }
+
+else
+
+ lexer.report("not supporting web snippets in tex lexer")
+
+ contextlexer._rules_web = {
+ { "whitespace", spacing },
+ { "text", text }, -- non words
+ { "comment", comment },
+ { "constant", constant },
+ { "callers", callers },
+ { "helper", helper },
+ { "command", command },
+ { "primitive", primitive },
+ { "ifprimitive", ifprimitive },
+ { "reserved", reserved },
+ { "csname", csname },
+ { "grouping", grouping },
+ { "special", special },
+ { "extra", extra },
+ { "invisible", invisible },
+ { "rest", rest },
+ }
+
+end
+
+contextlexer._tokenstyles = context.styleset
+
+local environment = {
+ ["\\start"] = 1, ["\\stop"] = -1,
+ -- ["\\begin"] = 1, ["\\end" ] = -1,
+}
+
+-- local block = {
+-- ["\\begin"] = 1, ["\\end" ] = -1,
+-- }
+
+local group = {
+ ["{"] = 1, ["}"] = -1,
+}
+
+contextlexer._foldpattern = P("\\" ) * (P("start") + P("stop")) + S("{}") -- separate entry else interference
+
+contextlexer._foldsymbols = { -- these need to be style references .. todo: multiple styles
+ _patterns = {
+ "\\start", "\\stop", -- regular environments
+ -- "\\begin", "\\end", -- (moveable) blocks
+ "[{}]",
+ },
+ ["command"] = environment,
+ ["constant"] = environment,
+ ["data"] = environment,
+ ["user"] = environment,
+ ["embedded"] = environment,
+ ["helper"] = environment,
+ ["plain"] = environment,
+ ["grouping"] = group,
+}
+
+-- context.inspect(contextlexer)
+
+return contextlexer
diff --git a/context/data/textadept/context/lexers/scite-context-lexer-txt.lua b/context/data/textadept/context/lexers/scite-context-lexer-txt.lua
new file mode 100644
index 000000000..152e9a663
--- /dev/null
+++ b/context/data/textadept/context/lexers/scite-context-lexer-txt.lua
@@ -0,0 +1,81 @@
+local info = {
+ version = 1.002,
+ comment = "scintilla lpeg lexer for plain text (with spell checking)",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+local P, S, Cmt, Cp = lpeg.P, lpeg.S, lpeg.Cmt, lpeg.Cp
+local find, match = string.find, string.match
+
+-- local lexer = require("lexer")
+local lexer = require("scite-context-lexer")
+local context = lexer.context
+local patterns = context.patterns
+
+local token = lexer.token
+
+local textlexer = lexer.new("txt","scite-context-lexer-txt")
+local whitespace = textlexer.whitespace
+
+local space = patterns.space
+local any = patterns.any
+local wordtoken = patterns.wordtoken
+local wordpattern = patterns.wordpattern
+
+local checkedword = context.checkedword
+local styleofword = context.styleofword
+local setwordlist = context.setwordlist
+local validwords = false
+local validminimum = 3
+
+-- local styleset = context.newstyleset {
+-- "default",
+-- "text", "okay", "error", "warning",
+-- "preamble",
+-- }
+
+-- [#!-%] language=uk
+
+local p_preamble = Cmt((S("#!-%") * P(" ")), function(input,i,_) -- todo: utf bomb no longer #
+ if i == 1 then -- < 10 then
+ validwords, validminimum = false, 3
+ local s, e, line = find(input,"^[#!%-%%](.+)[\n\r]",i)
+ if line then
+ local language = match(line,"language=([a-z]+)")
+ if language then
+ validwords, validminimum = setwordlist(language)
+ end
+ end
+ end
+ return false
+end)
+
+local t_preamble =
+ token("preamble", p_preamble)
+
+local t_word =
+ wordpattern / function(s) return styleofword(validwords,validminimum,s) end * Cp() -- the function can be inlined
+
+local t_text =
+ token("default", wordtoken^1)
+
+local t_rest =
+ token("default", (1-wordtoken-space)^1)
+
+local t_spacing =
+ token(whitespace, space^1)
+
+textlexer._rules = {
+ { "whitespace", t_spacing },
+ { "preamble", t_preamble },
+ { "word", t_word }, -- words >= 3
+ { "text", t_text }, -- non words
+ { "rest", t_rest },
+}
+
+textlexer._LEXBYLINE = true -- new (needs testing, not yet as the system changed in 3.24)
+textlexer._tokenstyles = context.styleset
+
+return textlexer
diff --git a/context/data/textadept/context/lexers/scite-context-lexer-web-snippets.lua b/context/data/textadept/context/lexers/scite-context-lexer-web-snippets.lua
new file mode 100644
index 000000000..141de20e1
--- /dev/null
+++ b/context/data/textadept/context/lexers/scite-context-lexer-web-snippets.lua
@@ -0,0 +1,134 @@
+local info = {
+ version = 1.002,
+ comment = "scintilla lpeg lexer for web snippets",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+local P, R, S, C, Cg, Cb, Cs, Cmt, lpegmatch = lpeg.P, lpeg.R, lpeg.S, lpeg.C, lpeg.Cg, lpeg.Cb, lpeg.Cs, lpeg.Cmt, lpeg.match
+
+-- local lexer = require("lexer")
+local lexer = require("scite-context-lexer")
+local context = lexer.context
+local patterns = context.patterns
+
+local token = lexer.token
+
+local websnippets = { }
+
+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 period = P(".")
+
+local t_whitespace = token(whitespace, space^1)
+local t_spacing = token("default", space^1)
+local t_rest = token("default", any)
+
+-- the web subset
+
+local p_beginofweb = P("@")
+local p_endofweb = P("@>")
+
+-- @, @/ @| @# @+ @; @[ @]
+
+local p_directive_1 = p_beginofweb * S(",/|#+;[]")
+local t_directive_1 = token("label",p_directive_1)
+
+-- @.text @>(monospaced)
+-- @:text @>(macro driven)
+-- @= verbose@>
+-- @! underlined @>
+-- @t text @> (hbox)
+-- @q ignored @>
+
+local p_typeset = p_beginofweb * S(".:=!tq")
+local t_typeset = token("label",p_typeset) * token("warning",(1-p_endofweb)^1) * token("label",p_endofweb)
+
+-- @^index@>
+
+local p_index = p_beginofweb * P("^")
+local t_index = token("label",p_index) * token("function",(1-p_endofweb)^1) * token("label",p_endofweb)
+
+-- @f text renderclass
+
+local p_render = p_beginofweb * S("f")
+local t_render = token("label",p_render) * t_spacing * token("warning",(1-space)^1) * t_spacing * token("label",(1-space)^1)
+
+-- @s idem
+-- @p idem
+-- @& strip (spaces before)
+-- @h
+
+local p_directive_2 = p_beginofweb * S("sp&h")
+local t_directive_2 = token("label",p_directive_2)
+
+-- @< ... @> [=|+=|]
+-- @(foo@>
+
+local p_reference = p_beginofweb * S("<(")
+local t_reference = token("label",p_reference) * token("function",(1-p_endofweb)^1) * token("label",p_endofweb * (P("+=") + P("="))^-1)
+
+-- @'char' (ascii code)
+
+local p_character = p_beginofweb * S("'")
+local t_character = token("label",p_character) * token("reserved",(1-squote)^1) * token("label",squote)
+
+-- @l nonascii
+
+local p_nonascii = p_beginofweb * S("l")
+local t_nonascii = token("label",p_nonascii) * t_spacing * token("reserved",(1-space)^1)
+
+-- @x @y @z changefile
+-- @i webfile
+
+local p_filename = p_beginofweb * S("xyzi")
+local t_filename = token("label",p_filename) * t_spacing * token("reserved",(1-space)^1)
+
+-- @@ escape
+
+local p_escape = p_beginofweb * p_beginofweb
+local t_escape = token("text",p_escape)
+
+-- structure
+
+-- @* title.
+
+-- local p_section = p_beginofweb * P("*")^1
+-- local t_section = token("label",p_section) * t_spacing * token("function",(1-period)^1) * token("label",period)
+
+-- @ explanation
+
+-- local p_explanation = p_beginofweb
+-- local t_explanation = token("label",p_explanation) * t_spacing^1
+
+-- @d macro
+
+-- local p_macro = p_beginofweb * P("d")
+-- local t_macro = token("label",p_macro)
+
+-- @c code
+
+-- local p_code = p_beginofweb * P("c")
+-- local t_code = token("label",p_code)
+
+websnippets.pattern = P (
+ t_typeset
+ + t_index
+ + t_render
+ + t_reference
+ + t_filename
+ + t_directive_1
+ + t_directive_2
+ + t_character
+ + t_nonascii
+ + t_escape
+)
+
+
+return websnippets
diff --git a/context/data/textadept/context/lexers/scite-context-lexer-web.lua b/context/data/textadept/context/lexers/scite-context-lexer-web.lua
new file mode 100644
index 000000000..6fe5ac84c
--- /dev/null
+++ b/context/data/textadept/context/lexers/scite-context-lexer-web.lua
@@ -0,0 +1,68 @@
+local info = {
+ version = 1.003,
+ comment = "scintilla lpeg lexer for web",
+ 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 lexer = require("scite-context-lexer")
+local context = lexer.context
+local patterns = context.patterns
+
+local token = lexer.token
+local exact_match = lexer.exact_match
+
+local weblexer = lexer.new("web","scite-context-lexer-web")
+local whitespace = weblexer.whitespace
+
+local space = patterns.space -- S(" \n\r\t\f\v")
+local any = patterns.any
+local restofline = patterns.restofline
+local startofline = patterns.startofline
+
+local period = P(".")
+local percent = P("%")
+
+local spacing = token(whitespace, space^1)
+local rest = token("default", any)
+
+local eop = P("@>")
+local eos = eop * P("+")^-1 * P("=")
+
+-- we can put some of the next in the web-snippets file
+-- is f okay here?
+
+local texcomment = token("comment", percent * restofline^0)
+
+local texpart = token("label",P("@")) * #spacing
+ + token("label",P("@") * P("*")^1) * token("function",(1-period)^1) * token("label",period)
+local midpart = token("label",P("@d")) * #spacing
+ + token("label",P("@f")) * #spacing
+local cpppart = token("label",P("@c")) * #spacing
+ + token("label",P("@p")) * #spacing
+ + token("label",P("@") * S("<(")) * token("function",(1-eop)^1) * token("label",eos)
+
+local anypart = P("@") * ( P("*")^1 + S("dfcp") + space^1 + S("<(") * (1-eop)^1 * eos )
+local limbo = 1 - anypart - percent
+
+local texlexer = lexer.load("scite-context-lexer-tex-web")
+local cpplexer = lexer.load("scite-context-lexer-cpp-web")
+
+lexer.embed_lexer(weblexer, texlexer, texpart + limbo, #anypart)
+lexer.embed_lexer(weblexer, cpplexer, cpppart + midpart, #anypart)
+
+local texcomment = token("comment", percent * restofline^0)
+
+weblexer._rules = {
+ { "whitespace", spacing },
+ { "texcomment", texcomment }, -- else issues with first tex section
+ { "rest", rest },
+}
+
+weblexer._tokenstyles = context.styleset
+
+return weblexer
diff --git a/context/data/textadept/context/lexers/scite-context-lexer-xml-cdata.lua b/context/data/textadept/context/lexers/scite-context-lexer-xml-cdata.lua
new file mode 100644
index 000000000..25fa9128f
--- /dev/null
+++ b/context/data/textadept/context/lexers/scite-context-lexer-xml-cdata.lua
@@ -0,0 +1,34 @@
+local info = {
+ version = 1.002,
+ comment = "scintilla lpeg lexer for xml cdata",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+local P = lpeg.P
+
+-- local lexer = require("lexer")
+local lexer = require("scite-context-lexer")
+local context = lexer.context
+local patterns = context.patterns
+
+local token = lexer.token
+
+local xmlcdatalexer = lexer.new("xml-cdata","scite-context-lexer-xml-cdata")
+local whitespace = xmlcdatalexer.whitespace
+
+local space = patterns.space
+local nospace = 1 - space - P("]]>")
+
+local t_spaces = token(whitespace, space ^1)
+local t_cdata = token("comment", nospace^1)
+
+xmlcdatalexer._rules = {
+ { "whitespace", t_spaces },
+ { "cdata", t_cdata },
+}
+
+xmlcdatalexer._tokenstyles = context.styleset
+
+return xmlcdatalexer
diff --git a/context/data/textadept/context/lexers/scite-context-lexer-xml-comment.lua b/context/data/textadept/context/lexers/scite-context-lexer-xml-comment.lua
new file mode 100644
index 000000000..2d7260b69
--- /dev/null
+++ b/context/data/textadept/context/lexers/scite-context-lexer-xml-comment.lua
@@ -0,0 +1,34 @@
+local info = {
+ version = 1.002,
+ comment = "scintilla lpeg lexer for xml comments",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+local P = lpeg.P
+
+-- local lexer = require("lexer")
+local lexer = require("scite-context-lexer")
+local context = lexer.context
+local patterns = context.patterns
+
+local token = lexer.token
+
+local xmlcommentlexer = lexer.new("xml-comment","scite-context-lexer-xml-comment")
+local whitespace = xmlcommentlexer.whitespace
+
+local space = patterns.space
+local nospace = 1 - space - P("-->")
+
+local t_spaces = token(whitespace, space ^1)
+local t_comment = token("comment", nospace^1)
+
+xmlcommentlexer._rules = {
+ { "whitespace", t_spaces },
+ { "comment", t_comment },
+}
+
+xmlcommentlexer._tokenstyles = context.styleset
+
+return xmlcommentlexer
diff --git a/context/data/textadept/context/lexers/scite-context-lexer-xml-script.lua b/context/data/textadept/context/lexers/scite-context-lexer-xml-script.lua
new file mode 100644
index 000000000..1ee96ba89
--- /dev/null
+++ b/context/data/textadept/context/lexers/scite-context-lexer-xml-script.lua
@@ -0,0 +1,34 @@
+local info = {
+ version = 1.002,
+ comment = "scintilla lpeg lexer for xml script",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+local P = lpeg.P
+
+-- local lexer = require("lexer")
+local lexer = require("scite-context-lexer")
+local context = lexer.context
+local patterns = context.patterns
+
+local token = lexer.token
+
+local xmlscriptlexer = lexer.new("xml-script","scite-context-lexer-xml-script")
+local whitespace = xmlscriptlexer.whitespace
+
+local space = patterns.space
+local nospace = 1 - space - (P("</") * P("script") + P("SCRIPT")) * P(">")
+
+local t_spaces = token(whitespace, space ^1)
+local t_script = token("default", nospace^1)
+
+xmlscriptlexer._rules = {
+ { "whitespace", t_spaces },
+ { "script", t_script },
+}
+
+xmlscriptlexer._tokenstyles = context.styleset
+
+return xmlscriptlexer
diff --git a/context/data/textadept/context/lexers/scite-context-lexer-xml.lua b/context/data/textadept/context/lexers/scite-context-lexer-xml.lua
new file mode 100644
index 000000000..1b7e2e897
--- /dev/null
+++ b/context/data/textadept/context/lexers/scite-context-lexer-xml.lua
@@ -0,0 +1,351 @@
+local info = {
+ version = 1.002,
+ comment = "scintilla lpeg lexer for xml",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+-- adapted from the regular context pretty printer code (after all, lexing
+-- boils down to much of the same and there are only so many ways to do
+-- things). Simplified a bit as we have a different nesting model.
+
+-- todo: parse entities in attributes
+
+local global, string, table, lpeg = _G, string, table, lpeg
+local P, R, S, C, Cmt, Cp = lpeg.P, lpeg.R, lpeg.S, lpeg.C, lpeg.Cmt, lpeg.Cp
+local type = type
+local match, find = string.match, string.find
+
+-- local lexer = require("lexer")
+local lexer = require("scite-context-lexer")
+local context = lexer.context
+local patterns = context.patterns
+
+local token = lexer.token
+local exact_match = lexer.exact_match
+
+local xmllexer = lexer.new("xml","scite-context-lexer-xml")
+local whitespace = xmllexer.whitespace
+
+local xmlcommentlexer = lexer.load("scite-context-lexer-xml-comment")
+local xmlcdatalexer = lexer.load("scite-context-lexer-xml-cdata")
+local xmlscriptlexer = lexer.load("scite-context-lexer-xml-script")
+local lualexer = lexer.load("scite-context-lexer-lua")
+
+local space = patterns.space
+local any = patterns.any
+
+local dquote = P('"')
+local squote = P("'")
+local colon = P(":")
+local semicolon = P(";")
+local equal = P("=")
+local ampersand = P("&")
+
+local name = (R("az","AZ","09") + S("_-."))^1
+local openbegin = P("<")
+local openend = P("</")
+local closebegin = P("/>") + P(">")
+local closeend = P(">")
+local opencomment = P("<!--")
+local closecomment = P("-->")
+local openinstruction = P("<?")
+local closeinstruction = P("?>")
+local opencdata = P("<![CDATA[")
+local closecdata = P("]]>")
+local opendoctype = P("<!DOCTYPE") -- could grab the whole doctype
+local closedoctype = P("]>") + P(">")
+local openscript = openbegin * (P("script") + P("SCRIPT")) * (1-closeend)^0 * closeend -- begin
+local closescript = openend * (P("script") + P("SCRIPT")) * closeend
+
+local openlua = "<?lua"
+local closelua = "?>"
+
+-- <!DOCTYPE Something PUBLIC "... ..." "..." [ ... ] >
+-- <!DOCTYPE Something PUBLIC "... ..." "..." >
+-- <!DOCTYPE Something SYSTEM "... ..." [ ... ] >
+-- <!DOCTYPE Something SYSTEM "... ..." >
+-- <!DOCTYPE Something [ ... ] >
+-- <!DOCTYPE Something >
+
+local entity = ampersand * (1-semicolon)^1 * semicolon
+
+local utfchar = context.utfchar
+local wordtoken = context.patterns.wordtoken
+local iwordtoken = context.patterns.iwordtoken
+local wordpattern = context.patterns.wordpattern
+local iwordpattern = context.patterns.iwordpattern
+local invisibles = context.patterns.invisibles
+local checkedword = context.checkedword
+local styleofword = context.styleofword
+local setwordlist = context.setwordlist
+local validwords = false
+local validminimum = 3
+
+-- <?xml version="1.0" encoding="UTF-8" language="uk" ?>
+--
+-- <?context-directive editor language us ?>
+
+local t_preamble = Cmt(P("<?xml "), function(input,i,_) -- todo: utf bomb, no longer #
+ if i < 200 then
+ validwords, validminimum = false, 3
+ local language = match(input,"^<%?xml[^>]*%?>%s*<%?context%-directive%s+editor%s+language%s+(..)%s+%?>")
+ -- if not language then
+ -- language = match(input,"^<%?xml[^>]*language=[\"\'](..)[\"\'][^>]*%?>",i)
+ -- end
+ if language then
+ validwords, validminimum = setwordlist(language)
+ end
+ end
+ return false
+end)
+
+local t_word =
+-- Ct( iwordpattern / function(s) return styleofword(validwords,validminimum,s) end * Cp() ) -- the function can be inlined
+ iwordpattern / function(s) return styleofword(validwords,validminimum,s) end * Cp() -- the function can be inlined
+
+local t_rest =
+ token("default", any)
+
+local t_text =
+ token("default", (1-S("<>&")-space)^1)
+
+local t_spacing =
+ token(whitespace, space^1)
+
+local t_optionalwhitespace =
+ token("default", space^1)^0
+
+local t_localspacing =
+ token("default", space^1)
+
+-- Because we want a differently colored open and close we need an embedded lexer (whitespace
+-- trigger). What is actually needed is that scintilla applies the current whitespace style.
+-- Even using different style keys is not robust as they can be shared. I'll fix the main
+-- lexer code.
+
+local t_sstring =
+ token("quote",dquote)
+ * token("string",(1-dquote)^0) -- different from context
+ * token("quote",dquote)
+
+local t_dstring =
+ token("quote",squote)
+ * token("string",(1-squote)^0) -- different from context
+ * token("quote",squote)
+
+-- local t_comment =
+-- token("command",opencomment)
+-- * token("comment",(1-closecomment)^0) -- different from context
+-- * token("command",closecomment)
+
+-- local t_cdata =
+-- token("command",opencdata)
+-- * token("comment",(1-closecdata)^0) -- different from context
+-- * token("command",closecdata)
+
+-- maybe cdata just text (then we don't need the extra lexer as we only have one comment then)
+
+-- <!DOCTYPE Something PUBLIC "... ..." "..." [ ... ] >
+-- <!DOCTYPE Something PUBLIC "... ..." "..." >
+-- <!DOCTYPE Something SYSTEM "... ..." [ ... ] >
+-- <!DOCTYPE Something SYSTEM "... ..." >
+-- <!DOCTYPE Something [ ... ] >
+-- <!DOCTYPE Something >
+
+-- <!ENTITY xxxx SYSTEM "yyyy" NDATA zzzz>
+-- <!ENTITY xxxx PUBLIC "yyyy" >
+-- <!ENTITY xxxx "yyyy" >
+
+local t_docstr = t_dstring + t_sstring
+
+local t_docent = token("command",P("<!ENTITY"))
+ * t_optionalwhitespace
+ * token("keyword",name)
+ * t_optionalwhitespace
+ * (
+ (
+ token("constant",P("SYSTEM"))
+ * t_optionalwhitespace
+ * t_docstr
+ * t_optionalwhitespace
+ * token("constant",P("NDATA"))
+ * t_optionalwhitespace
+ * token("keyword",name)
+ ) + (
+ token("constant",P("PUBLIC"))
+ * t_optionalwhitespace
+ * t_docstr
+ ) + (
+ t_docstr
+ )
+ )
+ * t_optionalwhitespace
+ * token("command",P(">"))
+
+local t_docele = token("command",P("<!ELEMENT"))
+ * t_optionalwhitespace
+ * token("keyword",name)
+ * t_optionalwhitespace
+ * token("command",P("("))
+ * (
+ t_localspacing
+ + token("constant",P("#CDATA") + P("#PCDATA") + P("ANY"))
+ + token("text",P(","))
+ + token("comment",(1-S(",)"))^1)
+ )^1
+ * token("command",P(")"))
+ * t_optionalwhitespace
+ * token("command",P(">"))
+
+local t_docset = token("command",P("["))
+ * t_optionalwhitespace
+ * ((t_optionalwhitespace * (t_docent + t_docele))^1 + token("comment",(1-P("]"))^0))
+ * t_optionalwhitespace
+ * token("command",P("]"))
+
+local t_doctype = token("command",P("<!DOCTYPE"))
+ * t_optionalwhitespace
+ * token("keyword",name)
+ * t_optionalwhitespace
+ * (
+ (
+ token("constant",P("PUBLIC"))
+ * t_optionalwhitespace
+ * t_docstr
+ * t_optionalwhitespace
+ * t_docstr
+ * t_optionalwhitespace
+ ) + (
+ token("constant",P("SYSTEM"))
+ * t_optionalwhitespace
+ * t_docstr
+ * t_optionalwhitespace
+ )
+ )^-1
+ * t_docset^-1
+ * t_optionalwhitespace
+ * token("command",P(">"))
+
+lexer.embed_lexer(xmllexer, lualexer, token("command", openlua), token("command", closelua))
+lexer.embed_lexer(xmllexer, xmlcommentlexer, token("command", opencomment), token("command", closecomment))
+lexer.embed_lexer(xmllexer, xmlcdatalexer, token("command", opencdata), token("command", closecdata))
+lexer.embed_lexer(xmllexer, xmlscriptlexer, token("command", openscript), token("command", closescript))
+
+-- local t_name =
+-- token("plain",name)
+-- * (
+-- token("default",colon)
+-- * token("keyword",name)
+-- )
+-- + token("keyword",name)
+
+local t_name = -- more robust
+ token("plain",name * colon)^-1
+ * token("keyword",name)
+
+-- local t_key =
+-- token("plain",name)
+-- * (
+-- token("default",colon)
+-- * token("constant",name)
+-- )
+-- + token("constant",name)
+
+local t_key =
+ token("plain",name * colon)^-1
+ * token("constant",name)
+
+local t_attributes = (
+ t_optionalwhitespace
+ * t_key
+ * t_optionalwhitespace
+ * token("plain",equal)
+ * t_optionalwhitespace
+ * (t_dstring + t_sstring)
+ * t_optionalwhitespace
+)^0
+
+local t_open =
+ token("keyword",openbegin)
+ * (
+ t_name
+ * t_optionalwhitespace
+ * t_attributes
+ * token("keyword",closebegin)
+ +
+ token("error",(1-closebegin)^1)
+ )
+
+local t_close =
+ token("keyword",openend)
+ * (
+ t_name
+ * t_optionalwhitespace
+ * token("keyword",closeend)
+ +
+ token("error",(1-closeend)^1)
+ )
+
+local t_entity =
+ token("constant",entity)
+
+local t_instruction =
+ token("command",openinstruction * P("xml"))
+ * t_optionalwhitespace
+ * t_attributes
+ * t_optionalwhitespace
+ * token("command",closeinstruction)
+ + token("command",openinstruction * name)
+ * token("default",(1-closeinstruction)^1)
+ * token("command",closeinstruction)
+
+local t_invisible =
+ token("invisible",invisibles^1)
+
+-- local t_preamble =
+-- token("preamble", t_preamble )
+
+xmllexer._rules = {
+ { "whitespace", t_spacing },
+ { "preamble", t_preamble },
+ { "word", t_word },
+ -- { "text", t_text },
+ -- { "comment", t_comment },
+ -- { "cdata", t_cdata },
+ { "doctype", t_doctype },
+ { "instruction", t_instruction },
+ { "close", t_close },
+ { "open", t_open },
+ { "entity", t_entity },
+ { "invisible", t_invisible },
+ { "rest", t_rest },
+}
+
+xmllexer._tokenstyles = context.styleset
+
+xmllexer._foldpattern = P("</") + P("<") + P("/>") -- separate entry else interference
++ P("<!--") + P("-->")
+
+xmllexer._foldsymbols = {
+ _patterns = {
+ "</",
+ "/>",
+ "<",
+ },
+ ["keyword"] = {
+ ["</"] = -1,
+ ["/>"] = -1,
+ ["<"] = 1,
+ },
+ ["command"] = {
+ ["</"] = -1,
+ ["/>"] = -1,
+ ["<!--"] = 1,
+ ["-->"] = -1,
+ ["<"] = 1,
+ },
+}
+
+return xmllexer
diff --git a/context/data/textadept/context/lexers/scite-context-lexer.lua b/context/data/textadept/context/lexers/scite-context-lexer.lua
new file mode 100644
index 000000000..e526d5045
--- /dev/null
+++ b/context/data/textadept/context/lexers/scite-context-lexer.lua
@@ -0,0 +1,2299 @@
+local info = {
+ version = 1.400,
+ comment = "basics for scintilla lpeg lexer for context/metafun",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+ comment = "contains copyrighted code from mitchell.att.foicica.com",
+
+}
+
+-- todo: hook into context resolver etc
+-- todo: only old api in lexers, rest in context subnamespace
+-- todo: make sure we can run in one state .. copies or shared?
+-- todo: auto-nesting
+
+if lpeg.setmaxstack then lpeg.setmaxstack(1000) end
+
+local log = false
+local trace = false
+local detail = false
+local show = false -- nice for tracing (also for later)
+local collapse = false -- can save some 15% (maybe easier on scintilla)
+local inspect = false -- can save some 15% (maybe easier on scintilla)
+
+-- local log = true
+-- local trace = true
+
+-- GET GOING
+--
+-- You need to copy this file over lexer.lua. In principle other lexers could work too but
+-- not now. Maybe some day. All patterns will move into the patterns name space. I might do
+-- the same with styles. If you run an older version of SciTE you can take one of the
+-- archives. Pre 3.41 versions can just be copied to the right path, as there we still use
+-- part of the normal lexer.
+--
+-- REMARK
+--
+-- We started using lpeg lexing as soon as it came available. Because we had rather demanding
+-- files and also wanted to use nested lexers, we ended up with our own variant. At least at
+-- that time this was more robust and also faster (as we have some pretty large lua data files
+-- and also work with large xml files). As a consequence successive versions had to be adapted
+-- to changes in the (at that time still unstable) api. In addition to lexing we also have
+-- spell checking and such. Around version 3.60 things became more stable so I don't expect to
+-- change much.
+--
+-- STATUS
+--
+-- todo: maybe use a special stripped version of the dll (stable api) and add a bit more
+-- interfacing to scintilla
+-- todo: investigate if we can use the already built in lua instance so that we can combine the
+-- power of lexign with extensions
+-- todo: play with hotspot and other properties (but no real need now)
+-- todo: maybe come up with an extension to the api subsystem
+-- todo: add proper tracing and so .. not too hard as we can run on mtxrun, but we lack a console
+-- for debugging (ok, chicken-egg as lexers probably need to be loaded before a console can
+-- kick in)
+-- todo: get rid of these lexers.STYLE_XX and lexers.XX (hide such details)
+--
+-- wish: access to all scite properties and in fact integrate in scite
+--
+--
+-- In the meantime I made the lexer suitable for typesetting sources which was no big deal as we
+-- already had that in place (ConTeXt used lpeg from the day it showed up so we have several lexing
+-- options there too).
+--
+-- HISTORY
+--
+-- The fold and lex functions are copied and patched from original code by Mitchell (see lexer.lua).
+-- All errors are mine. The ability to use lpeg in scintilla is a real nice addition and a brilliant
+-- move. The code is a byproduct of the (mainly Lua based) textadept (at the time I ran into it was
+-- a rapidly moving target so I decided to stick ot SciTE). When I played with it, it had no realtime
+-- output pane but that seems to be dealt with now (2017). I need to have a look at it in more detail
+-- but a first test again mad the output hang and it was a bit slow too (and I also want the log pane
+-- as scite has it, on the right, in view). So, for now I stick to SciTE even when it's somewhat
+-- crippled by the fact that we cannot hook our own (language dependent) lexer into the output pane
+-- (somehow the errorlist lexer is hard coded into the editor). Hopefully that will change some day.
+-- So, how did we arrive where we're now.
+--
+-- Starting with SciTE version 3.20 there is an issue with coloring. As we still lack a connection
+-- with SciTE itself (properties as well as printing to the log pane) and we cannot trace this (on
+-- windows). As far as I can see, there are no fundamental changes in lexer.lua or LexLPeg.cxx so it
+-- must be in Scintilla itself. So for the moment I stick to 3.10. Indicators are: no lexing of 'next'
+-- and 'goto <label>' in the Lua lexer and no brace highlighting either. Interesting is that it does
+-- work ok in the cld lexer (so the Lua code is okay). All seems to be ok again in later versions,
+-- so, when you update best check first and just switch back to an older version as normally a SciTE
+-- update is not critital. When char-def.lua lexes real fast this is a signal that the lexer quits
+-- somewhere halfway. Maybe there are some hard coded limitations on the amount of styles and/or
+-- length of names.
+--
+-- Anyway, after checking 3.24 and adapting to the new lexer tables things are okay again. So, this
+-- version assumes 3.24 or higher. In 3.24 we have a different token result, i.e. no longer a { tag,
+-- pattern } but just two return values. I didn't check other changes but will do that when I run into
+-- issues. I had optimized these small tables by hashing which was more efficient but this is no longer
+-- needed. For the moment we keep some of that code around as I don't know what happens in future
+-- versions. I'm anyway still happy with this kind of lexing.
+--
+-- In 3.31 another major change took place: some helper constants (maybe they're no longer constants)
+-- and functions were moved into the lexer modules namespace but the functions are assigned to the Lua
+-- module afterward so we cannot alias them beforehand. We're probably getting close to a stable
+-- interface now. I've considered making a whole copy and patch the other functions too as we need an
+-- extra nesting model. However, I don't want to maintain too much. An unfortunate change in 3.03 is
+-- that no longer a script can be specified. This means that instead of loading the extensions via the
+-- properties file, we now need to load them in our own lexers, unless of course we replace lexer.lua
+-- completely (which adds another installation issue).
+--
+-- Another change has been that _LEXERHOME is no longer available. It looks like more and more
+-- functionality gets dropped so maybe at some point we need to ship our own dll/so files. For instance,
+-- I'd like to have access to the current filename and other scite properties. We could then cache some
+-- info with each file, if only we had knowledge of what file we're dealing with.
+--
+-- For huge files folding can be pretty slow and I do have some large ones that I keep open all the time.
+-- Loading is normally no ussue, unless one has remembered the status and the cursor is at the last line
+-- of a 200K line file. Optimizing the fold function brought down loading of char-def.lua from 14 sec
+-- => 8 sec. Replacing the word_match function and optimizing the lex function gained another 2+ seconds.
+-- A 6 second load is quite ok for me. The changed lexer table structure (no subtables) brings loading
+-- down to a few seconds.
+--
+-- When the lexer path is copied to the textadept lexer path, and the theme definition to theme path
+-- (as lexer.lua), the lexer works there as well. Although ... when I decided to check the state of
+-- textadept i had to adapt some loader code. It's not pretty but works and also permits overloading.
+-- When I have time and motive I will make a proper setup file to tune the look and feel a bit and
+-- associate suffixes with the context lexer. The textadept editor has a nice style tracing option but
+-- lacks the tabs for selecting files that scite has. It also has no integrated run that pipes to the
+-- log pane. Interesting is that the jit version of textadept crashes on lexing large files (and does
+-- not feel faster either; maybe a side effect of known limitations as we know that luajit is more
+-- limited than stock lua). Btw, in the meantime on unix one can test easier as there we can enable
+-- the loggers in this module.
+--
+-- Function load(lexer_name) starts with _lexers.WHITESPACE = lexer_name .. '_whitespace' which means
+-- that we need to have it frozen at the moment we load another lexer. Because spacing is used to revert
+-- to a parent lexer we need to make sure that we load children as late as possible in order not to get
+-- the wrong whitespace trigger. This took me quite a while to figure out (not being that familiar with
+-- the internals). The lex and fold functions have been optimized. It is a pitty that there is no proper
+-- print available. Another thing needed is a default style in our own theme style definition, as otherwise
+-- we get wrong nested lexers, especially if they are larger than a view. This is the hardest part of
+-- getting things right.
+--
+-- It's a pitty that there is no scintillua library for the OSX version of scite. Even better would be
+-- to have the scintillua library as integral part of scite as that way I could use OSX alongside
+-- windows and linux (depending on needs). Also nice would be to have a proper interface to scite then
+-- because currently the lexer is rather isolated and the lua version does not provide all standard
+-- libraries. It would also be good to have lpeg support in the regular scite lua extension (currently
+-- you need to pick it up from someplace else).
+--
+-- With 3.41 the interface changed again so it gets time to look into the C++ code and consider compiling
+-- and patching myself. Loading is more complicated now as the lexer gets loaded automatically so we have
+-- little control over extending the code now. After a few days trying all kind of solutions I decided to
+-- follow a different approach: drop in a complete replacement. This of course means that I need to keep
+-- track of even more changes (which for sure will happen) but at least I get rid of interferences. The
+-- api (lexing and configuration) is simply too unstable across versions. Maybe in a few years things have
+-- stabelized again. (Or maybe it's not really expected that one writes lexers at all.) A side effect is
+-- that I now no longer will use shipped lexers but just the built-in ones in addition to the context
+-- lpeg lexers. Not that it matters much as the context lexers cover what I need (and I can always write
+-- more).
+--
+-- In fact, the transition to 3.41 was triggered by an unfateful update of Ubuntu which left me with an
+-- incompatible SciTE and lexer library and updating was not possible due to the lack of 64 bit libraries.
+-- We'll see what the future brings.
+--
+-- Promissing is that the library now can use another Lua instance so maybe some day it will get properly
+-- in SciTE and we can use more clever scripting.
+--
+-- In some lexers we use embedded ones even if we could do it directly, The reason is that when the end
+-- token is edited (e.g. -->), backtracking to the space before the begin token (e.g. <!--) results in
+-- applying the surrounding whitespace which in turn means that when the end token is edited right,
+-- backtracking doesn't go back. One solution (in the dll) would be to backtrack several space categories.
+-- After all, lexing is quite fast (applying the result is much slower).
+--
+-- For some reason the first blob of text tends to go wrong (pdf and web). It would be nice to have 'whole
+-- doc' initial lexing. Quite fishy as it makes it impossible to lex the first part well (for already opened
+-- documents) because only a partial text is passed.
+--
+-- So, maybe I should just write this from scratch (assuming more generic usage) because after all, the dll
+-- expects just tables, based on a string. I can then also do some more aggressive resource sharing (needed
+-- when used generic).
+--
+-- I think that nested lexers are still bugged (esp over longer ranges). It never was robust or maybe it's
+-- simply not meant for too complex cases (well, it probably *is* tricky material). The 3.24 version was
+-- probably the best so far. The fact that styles bleed between lexers even if their states are isolated is
+-- an issue. Another issus is that zero characters in the text passed to the lexer can mess things up (pdf
+-- files have them in streams).
+--
+-- For more complex 'languages', like web or xml, we need to make sure that we use e.g. 'default' for
+-- spacing that makes up some construct. Ok, we then still have a backtracking issue but less.
+--
+-- Good news for some ConTeXt users: there is now a scintillua plugin for notepad++ and we ship an ini
+-- file for that editor with some installation instructions embedded.
+--
+-- TODO
+--
+-- I can make an export to context, but first I'll redo the code that makes the grammar,
+-- as we only seem to need
+--
+-- lexer._TOKENSTYLES : table
+-- lexer._CHILDREN : flag
+-- lexer._EXTRASTYLES : table
+-- lexer._GRAMMAR : flag
+--
+-- lexers.load : function
+-- lexers.lex : function
+--
+-- So, if we drop compatibility with other lex definitions, we can make things simpler. Howeverm in the
+-- meantime one can just do this:
+--
+-- context --extra=listing --scite [--compact --verycompact] somefile.tex
+--
+-- and get a printable document. So, this todo is obsolete.
+
+-- TRACING
+--
+-- The advantage is that we now can check more easily with regular Lua(TeX). We can also use wine and print
+-- to the console (somehow stdout is intercepted there.) So, I've added a bit of tracing. Interesting is to
+-- notice that each document gets its own instance which has advantages but also means that when we are
+-- spellchecking we reload the word lists each time. (In the past I assumed a shared instance and took
+-- some precautions.)
+
+-- todo: make sure we don't overload context definitions when used in context
+
+-- properties is an ugly mess ... due to chages in the interface we're now left with some hybrid
+-- that sort of works ok
+
+local lpeg = require("lpeg")
+
+local global = _G
+local find, gmatch, match, lower, upper, gsub, sub, format = string.find, string.gmatch, string.match, string.lower, string.upper, string.gsub, string.sub, string.format
+local concat, sort = table.concat, table.sort
+local type, next, setmetatable, rawset, tonumber, tostring = type, next, setmetatable, rawset, tonumber, tostring
+local R, P, S, V, C, Cp, Cs, Ct, Cmt, Cc, Cf, Cg, Carg = lpeg.R, lpeg.P, lpeg.S, lpeg.V, lpeg.C, lpeg.Cp, lpeg.Cs, lpeg.Ct, lpeg.Cmt, lpeg.Cc, lpeg.Cf, lpeg.Cg, lpeg.Carg
+local lpegmatch = lpeg.match
+
+local nesting = 0
+
+local print = (textadept and ui and ui.print) or print
+
+local function report(fmt,str,...)
+ if log then
+ if str then
+ fmt = format(fmt,str,...)
+ end
+ print(format("scite lpeg lexer > %s > %s",nesting == 0 and "-" or nesting,fmt))
+ end
+end
+
+local function inform(...)
+ if log and trace then
+ report(...)
+ end
+end
+
+inform("loading context lexer module (global table: %s)",tostring(global))
+
+if not package.searchpath then
+
+ -- Unfortunately the io library is only available when we end up
+ -- in this branch of code.
+
+ inform("using adapted function 'package.searchpath' (if used at all)")
+
+ function package.searchpath(name,path)
+ local tried = { }
+ for part in gmatch(path,"[^;]+") do
+ local filename = gsub(part,"%?",name)
+ local f = io.open(filename,"r")
+ if f then
+ inform("file found on path: %s",filename)
+ f:close()
+ return filename
+ end
+ tried[#tried + 1] = format("no file '%s'",filename)
+ end
+ -- added: local path .. for testing
+ local f = io.open(filename,"r")
+ if f then
+ inform("file found on current path: %s",filename)
+ f:close()
+ return filename
+ end
+ --
+ tried[#tried + 1] = format("no file '%s'",filename)
+ return nil, concat(tried,"\n")
+ end
+
+end
+
+local lexers = { }
+local context = { }
+local helpers = { }
+lexers.context = context
+lexers.helpers = helpers
+
+local patterns = { }
+context.patterns = patterns -- todo: lexers.patterns
+
+context.report = report
+context.inform = inform
+
+lexers.LEXERPATH = package.path -- can be multiple paths separated by ;
+
+if resolvers then
+ -- todo: set LEXERPATH
+ -- todo: set report
+end
+
+local function sortedkeys(hash) -- simple version, good enough for here
+ local t, n = { }, 0
+ for k, v in next, hash do
+ t[#t+1] = k
+ local l = #tostring(k)
+ if l > n then
+ n = l
+ end
+ end
+ sort(t)
+ return t, n
+end
+
+helpers.sortedkeys = sortedkeys
+
+local usedlexers = { }
+local parent_lexer = nil
+
+-- The problem with styles is that there is some nasty interaction with scintilla
+-- and each version of lexer dll/so has a different issue. So, from now on we will
+-- just add them here. There is also a limit on some 30 styles. Maybe I should
+-- hash them in order to reuse.
+
+-- todo: work with proper hashes and analyze what styles are really used by a
+-- lexer
+
+local default = {
+ "nothing", "whitespace", "comment", "string", "number", "keyword",
+ "identifier", "operator", "error", "preprocessor", "constant", "variable",
+ "function", "type", "label", "embedded",
+ "quote", "special", "extra", "reserved", "okay", "warning",
+ "command", "internal", "preamble", "grouping", "primitive", "plain",
+ "user",
+ -- not used (yet) .. we cross the 32 boundary so had to patch the initializer, see (1)
+ "char", "class", "data", "definition", "invisible", "regex",
+ "standout", "tag",
+ "text",
+}
+
+local predefined = {
+ "default", "linenumber", "bracelight", "bracebad", "controlchar",
+ "indentguide", "calltip"
+}
+
+-- Bah ... ugly ... nicer would be a proper hash .. we now have properties
+-- as well as STYLE_* and some connection between them ... why .. ok, we
+-- could delay things but who cares. Anyway, at this moment the properties
+-- are still unknown.
+
+local function preparestyles(list)
+ local reverse = { }
+ for i=1,#list do
+ local k = list[i]
+ local K = upper(k)
+ local s = "style." .. k
+ lexers[K] = k -- is this used
+ lexers["STYLE_"..K] = "$(" .. k .. ")"
+ reverse[k] = true
+ end
+ return reverse
+end
+
+local defaultstyles = preparestyles(default)
+local predefinedstyles = preparestyles(predefined)
+
+-- These helpers are set afterwards so we delay their initialization ... there
+-- is no need to alias each time again and this way we can more easily adapt
+-- to updates.
+
+-- These keep changing (values, functions, tables ...) so we nee to check these
+-- with each update. Some of them are set in the loader (the require 'lexer' is
+-- in fact not a real one as the lexer code is loaded in the dll). It's also not
+-- getting more efficient.
+
+-- FOLD_BASE = lexers.FOLD_BASE or SC_FOLDLEVELBASE
+-- FOLD_HEADER = lexers.FOLD_HEADER or SC_FOLDLEVELHEADERFLAG
+-- FOLD_BLANK = lexers.FOLD_BLANK or SC_FOLDLEVELWHITEFLAG
+-- get_style_at = lexers.get_style_at or GetStyleAt
+-- get_indent_amount = lexers.get_indent_amount or GetIndentAmount
+-- get_property = lexers.get_property or GetProperty
+-- get_fold_level = lexers.get_fold_level or GetFoldLevel
+
+-- It needs checking: do we have access to all properties now? I'll clean
+-- this up anyway as I want a simple clean and stable model.
+
+-- This is somewhat messy. The lexer dll provides some virtual fields:
+--
+-- + property
+-- + property_int
+-- + style_at
+-- + fold_level
+-- + indent_amount
+--
+-- but for some reasons not:
+--
+-- + property_expanded
+--
+-- As a consequence we need to define it here because otherwise the
+-- lexer will crash. The fuzzy thing is that we don't have to define
+-- the property and property_int tables but we do have to define the
+-- expanded beforehand. The folding properties are no longer interfaced
+-- so the interface to scite is now rather weak (only a few hard coded
+-- properties).
+
+local FOLD_BASE = 0
+local FOLD_HEADER = 0
+local FOLD_BLANK = 0
+
+local style_at = { }
+local indent_amount = { }
+local fold_level = { }
+
+local function check_main_properties()
+ if not lexers.property then
+ lexers.property = { }
+ end
+ if not lexers.property_int then
+ lexers.property_int = setmetatable({ }, {
+ __index = function(t,k)
+ -- why the tostring .. it relies on lua casting to a number when
+ -- doing a comparison
+ return tonumber(lexers.property[k]) or 0 -- tostring removed
+ end,
+ -- __newindex = function(t,k,v)
+ -- report("properties are read-only, '%s' is not changed",k)
+ -- end,
+ })
+ end
+end
+
+lexers.property_expanded = setmetatable({ }, {
+ __index = function(t,k)
+ -- better be safe for future changes .. what if at some point this is
+ -- made consistent in the dll ... we need to keep an eye on that
+ local property = lexers.property
+ if not property then
+ check_main_properties()
+ end
+ --
+ return gsub(property[k],"[$%%]%b()", function(k)
+ return t[sub(k,3,-2)]
+ end)
+ end,
+ __newindex = function(t,k,v)
+ report("properties are read-only, '%s' is not changed",k)
+ end,
+})
+
+-- A downward compatible feature but obsolete:
+
+-- local function get_property(tag,default)
+-- return lexers.property_int[tag] or lexers.property[tag] or default
+-- end
+
+-- We still want our own properties (as it keeps changing so better play
+-- safe from now on). At some point I can freeze them.
+
+local function check_properties(lexer)
+ if lexer.properties then
+ return lexer
+ end
+ check_main_properties()
+ -- we use a proxy
+ local mainproperties = lexers.property
+ local properties = { }
+ local expanded = setmetatable({ }, {
+ __index = function(t,k)
+ return gsub(properties[k] or mainproperties[k],"[$%%]%b()", function(k)
+ return t[sub(k,3,-2)]
+ end)
+ end,
+ })
+ lexer.properties = setmetatable(properties, {
+ __index = mainproperties,
+ __call = function(t,k,default) -- expands
+ local v = expanded[k]
+ local t = type(default)
+ if t == "number" then
+ return tonumber(v) or default
+ elseif t == "boolean" then
+ return v == nil and default or v
+ else
+ return v or default
+ end
+ end,
+ })
+ return lexer
+end
+
+-- do
+-- lexers.property = { foo = 123, red = "R" }
+-- local a = check_properties({}) print("a.foo",a.properties.foo)
+-- a.properties.foo = "bar" print("a.foo",a.properties.foo)
+-- a.properties.foo = "bar:$(red)" print("a.foo",a.properties.foo) print("a.foo",a.properties("foo"))
+-- end
+
+local function set(value,default)
+ if value == 0 or value == false or value == "0" then
+ return false
+ elseif value == 1 or value == true or value == "1" then
+ return true
+ else
+ return default
+ end
+end
+
+local function check_context_properties()
+ local property = lexers.property -- let's hope that this stays
+ log = set(property["lexer.context.log"], log)
+ trace = set(property["lexer.context.trace"], trace)
+ detail = set(property["lexer.context.detail"], detail)
+ show = set(property["lexer.context.show"], show)
+ collapse = set(property["lexer.context.collapse"],collapse)
+ inspect = set(property["lexer.context.inspect"], inspect)
+end
+
+function context.registerproperties(p) -- global
+ check_main_properties()
+ local property = lexers.property -- let's hope that this stays
+ for k, v in next, p do
+ property[k] = v
+ end
+ check_context_properties()
+end
+
+context.properties = setmetatable({ }, {
+ __index = lexers.property,
+ __newindex = function(t,k,v)
+ check_main_properties()
+ lexers.property[k] = v
+ check_context_properties()
+ end,
+})
+
+-- We want locals to we set them delayed. Once.
+
+local function initialize()
+ FOLD_BASE = lexers.FOLD_BASE
+ FOLD_HEADER = lexers.FOLD_HEADER
+ FOLD_BLANK = lexers.FOLD_BLANK
+ --
+ style_at = lexers.style_at -- table
+ indent_amount = lexers.indent_amount -- table
+ fold_level = lexers.fold_level -- table
+ --
+ check_main_properties()
+ --
+ initialize = nil
+end
+
+-- Style handler.
+--
+-- The property table will be set later (after loading) by the library. The
+-- styleset is not needed any more as we predefine all styles as defaults
+-- anyway (too bug sensitive otherwise).
+
+local function tocolors(colors)
+ local colorset = { }
+ local property_int = lexers.property_int or { }
+ for k, v in next, colors do
+ if type(v) == "table" then
+ local r, g, b = v[1], v[2], v[3]
+ if r and g and b then
+ v = tonumber(format("%02X%02X%02X",b,g,r),16) or 0 -- hm
+ elseif r then
+ v = tonumber(format("%02X%02X%02X",r,r,r),16) or 0
+ else
+ v = 0
+ end
+ end
+ colorset[k] = v
+ property_int["color."..k] = v
+ end
+ return colorset
+end
+
+local function toproperty(specification)
+ local serialized = { }
+ for key, value in next, specification do
+ if value == true then
+ serialized[#serialized+1] = key
+ elseif type(value) == "table" then
+ local r, g, b = value[1], value[2], value[3]
+ if r and g and b then
+ value = format("#%02X%02X%02X",r,g,b) or "#000000"
+ elseif r then
+ value = format("#%02X%02X%02X",r,r,r) or "#000000"
+ else
+ value = "#000000"
+ end
+ serialized[#serialized+1] = key .. ":" .. value
+ else
+ serialized[#serialized+1] = key .. ":" .. tostring(value)
+ end
+ end
+ return concat(serialized,",")
+end
+
+local function tostyles(styles)
+ local styleset = { }
+ local property = lexers.property or { }
+ for k, v in next, styles do
+ v = toproperty(v)
+ styleset[k] = v
+ property["style."..k] = v
+ end
+ return styleset
+end
+
+context.toproperty = toproperty
+context.tostyles = tostyles
+context.tocolors = tocolors
+
+-- If we had one instance/state of Lua as well as all regular libraries
+-- preloaded we could use the context base libraries. So, let's go poor-
+-- mans solution now.
+
+function context.registerstyles(styles)
+ local styleset = tostyles(styles)
+ context.styles = styles
+ context.styleset = styleset
+ if detail then
+ local t, n = sortedkeys(styleset)
+ local template = " %-" .. n .. "s : %s"
+ report("initializing styleset:")
+ for i=1,#t do
+ local k = t[i]
+ report(template,k,styleset[k])
+ end
+ elseif trace then
+ report("initializing styleset")
+ end
+end
+
+function context.registercolors(colors) -- needed for textadept
+ local colorset = tocolors(colors)
+ context.colors = colors
+ context.colorset = colorset
+ if detail then
+ local t, n = sortedkeys(colorset)
+ local template = " %-" .. n .. "s : %i"
+ report("initializing colorset:")
+ for i=1,#t do
+ local k = t[i]
+ report(template,k,colorset[k])
+ end
+ elseif trace then
+ report("initializing colorset")
+ end
+end
+
+-- Some spell checking related stuff. Unfortunately we cannot use a path set
+-- by property. This will get a hook for resolvers.
+
+local locations = {
+ "context/lexers", -- context lexers
+ "context/lexers/data", -- context lexers
+ "../lexers", -- original lexers
+ "../lexers/data", -- original lexers
+ ".", -- whatever
+ "./data", -- whatever
+}
+
+-- local function collect(name)
+-- local root = gsub(lexers.LEXERPATH or ".","/.-lua$","") .. "/" -- this is a horrible hack
+-- -- report("module '%s' locating '%s'",tostring(lexers),name)
+-- for i=1,#locations do
+-- local fullname = root .. locations[i] .. "/" .. name .. ".lua" -- so we can also check for .luc
+-- if trace then
+-- report("attempt to locate '%s'",fullname)
+-- end
+-- local okay, result = pcall(function () return dofile(fullname) end)
+-- if okay then
+-- return result, fullname
+-- end
+-- end
+-- end
+
+local function collect(name)
+ local rootlist = lexers.LEXERPATH or "."
+ for root in gmatch(rootlist,"[^;]+") do
+ local root = gsub(root,"/[^/]-lua$","")
+ for i=1,#locations do
+ local fullname = root .. "/" .. locations[i] .. "/" .. name .. ".lua" -- so we can also check for .luc
+ if trace then
+ report("attempt to locate '%s'",fullname)
+ end
+ local okay, result = pcall(function () return dofile(fullname) end)
+ if okay then
+ return result, fullname
+ end
+ end
+ end
+end
+
+function context.loadluafile(name)
+ local data, fullname = collect(name)
+ if data then
+ if trace then
+ report("lua file '%s' has been loaded",fullname)
+ end
+ return data, fullname
+ end
+ if not textadept then
+ report("unable to load lua file '%s'",name)
+ end
+end
+
+-- in fact we could share more as we probably process the data but then we need
+-- to have a more advanced helper
+
+local cache = { }
+
+function context.loaddefinitions(name)
+ local data = cache[name]
+ if data then
+ if trace then
+ report("reusing definitions '%s'",name)
+ end
+ return data
+ elseif trace and data == false then
+ report("definitions '%s' were not found",name)
+ end
+ local data, fullname = collect(name)
+ if not data then
+ if not textadept then
+ report("unable to load definition file '%s'",name)
+ end
+ data = false
+ elseif trace then
+ report("definition file '%s' has been loaded",fullname)
+ if detail then
+ local t, n = sortedkeys(data)
+ local template = " %-" .. n .. "s : %s"
+ for i=1,#t do
+ local k = t[i]
+ local v = data[k]
+ if type(v) ~= "table" then
+ report(template,k,tostring(v))
+ elseif #v > 0 then
+ report(template,k,#v)
+ else
+ -- no need to show hash
+ end
+ end
+ end
+ end
+ cache[name] = data
+ return type(data) == "table" and data
+end
+
+function context.word_match(words,word_chars,case_insensitive)
+ local chars = "%w_" -- maybe just "" when word_chars
+ if word_chars then
+ chars = "^([" .. chars .. gsub(word_chars,"([%^%]%-])", "%%%1") .."]+)"
+ else
+ chars = "^([" .. chars .."]+)"
+ end
+ if case_insensitive then
+ local word_list = { }
+ for i=1,#words do
+ word_list[lower(words[i])] = true
+ end
+ return P(function(input, index)
+ local s, e, word = find(input,chars,index)
+ return word and word_list[lower(word)] and e + 1 or nil
+ end)
+ else
+ local word_list = { }
+ for i=1,#words do
+ word_list[words[i]] = true
+ end
+ return P(function(input, index)
+ local s, e, word = find(input,chars,index)
+ return word and word_list[word] and e + 1 or nil
+ end)
+ end
+end
+
+-- Patterns are grouped in a separate namespace but the regular lexers expect
+-- shortcuts to be present in the lexers library. Maybe I'll incorporate some
+-- of l-lpeg later.
+
+do
+
+ local anything = P(1)
+ local idtoken = R("az","AZ","\127\255","__")
+ local digit = R("09")
+ local sign = S("+-")
+ local period = P(".")
+ local octdigit = R("07")
+ local hexdigit = R("09","AF","af")
+ local lower = R("az")
+ local upper = R("AZ")
+ local alpha = upper + lower
+ local space = S(" \n\r\t\f\v")
+ local eol = S("\r\n")
+ local backslash = P("\\")
+ local decimal = digit^1
+ local octal = P("0")
+ * octdigit^1
+ local hexadecimal = P("0") * S("xX")
+ * (hexdigit^0 * period * hexdigit^1 + hexdigit^1 * period * hexdigit^0 + hexdigit^1)
+ * (S("pP") * sign^-1 * hexdigit^1)^-1 -- *
+
+ patterns.idtoken = idtoken
+ patterns.digit = digit
+ patterns.sign = sign
+ patterns.period = period
+ patterns.octdigit = octdigit
+ patterns.hexdigit = hexdigit
+ patterns.ascii = R("\000\127") -- useless
+ patterns.extend = R("\000\255") -- useless
+ patterns.control = R("\000\031")
+ patterns.lower = lower
+ patterns.upper = upper
+ patterns.alpha = alpha
+ patterns.decimal = decimal
+ patterns.octal = octal
+ patterns.hexadecimal = hexadecimal
+ patterns.float = sign^-1
+ * (digit^0 * period * digit^1 + digit^1 * period * digit^0 + digit^1)
+ * S("eE") * sign^-1 * digit^1 -- *
+ patterns.cardinal = decimal
+
+ patterns.signeddecimal = sign^-1 * decimal
+ patterns.signedoctal = sign^-1 * octal
+ patterns.signedhexadecimal = sign^-1 * hexadecimal
+ patterns.integer = sign^-1 * (hexadecimal + octal + decimal)
+ patterns.real =
+ sign^-1 * ( -- at most one
+ digit^1 * period * digit^0 -- 10.0 10.
+ + digit^0 * period * digit^1 -- 0.10 .10
+ + digit^1 -- 10
+ )
+
+ patterns.anything = anything
+ patterns.any = anything
+ patterns.restofline = (1-eol)^1
+ patterns.space = space
+ patterns.spacing = space^1
+ patterns.nospacing = (1-space)^1
+ patterns.eol = eol
+ patterns.newline = P("\r\n") + eol
+
+ local endof = S("\n\r\f")
+
+ patterns.startofline = P(function(input,index)
+ return (index == 1 or lpegmatch(endof,input,index-1)) and index
+ end)
+
+ -- These are the expected ones for other lexers. Maybe all in own namespace
+ -- and provide compatibility layer. or should I just remove them?
+
+ lexers.any = anything
+ lexers.ascii = ascii
+ lexers.extend = extend
+ lexers.alpha = alpha
+ lexers.digit = digit
+ lexers.alnum = alnum
+ lexers.lower = lower
+ lexers.upper = upper
+ lexers.xdigit = hexdigit
+ lexers.cntrl = control
+ lexers.graph = R("!~")
+ lexers.print = R(" ~")
+ lexers.punct = R("!/", ":@", "[\'", "{~")
+ lexers.space = space
+ lexers.newline = S("\r\n\f")^1
+ lexers.nonnewline = 1 - lexers.newline
+ lexers.nonnewline_esc = 1 - (lexers.newline + '\\') + backslash * anything
+ lexers.dec_num = decimal
+ lexers.oct_num = octal
+ lexers.hex_num = hexadecimal
+ lexers.integer = integer
+ lexers.float = float
+ lexers.word = (alpha + "_") * (alpha + digit + "_")^0 -- weird, why digits
+
+end
+
+-- end of patterns
+
+function context.exact_match(words,word_chars,case_insensitive)
+ local characters = concat(words)
+ local pattern -- the concat catches _ etc
+ if word_chars == true or word_chars == false or word_chars == nil then
+ word_chars = ""
+ end
+ if type(word_chars) == "string" then
+ pattern = S(characters) + patterns.idtoken
+ if case_insensitive then
+ pattern = pattern + S(upper(characters)) + S(lower(characters))
+ end
+ if word_chars ~= "" then
+ pattern = pattern + S(word_chars)
+ end
+ elseif word_chars then
+ pattern = word_chars
+ end
+ if case_insensitive then
+ local list = { }
+ if #words == 0 then
+ for k, v in next, words do
+ list[lower(k)] = v
+ end
+ else
+ for i=1,#words do
+ list[lower(words[i])] = true
+ end
+ end
+ return Cmt(pattern^1, function(_,i,s)
+ return list[lower(s)] -- and i or nil
+ end)
+ else
+ local list = { }
+ if #words == 0 then
+ for k, v in next, words do
+ list[k] = v
+ end
+ else
+ for i=1,#words do
+ list[words[i]] = true
+ end
+ end
+ return Cmt(pattern^1, function(_,i,s)
+ return list[s] -- and i or nil
+ end)
+ end
+end
+
+function context.just_match(words)
+ local p = P(words[1])
+ for i=2,#words do
+ p = p + P(words[i])
+ end
+ return p
+end
+
+-- spell checking (we can only load lua files)
+--
+-- return {
+-- min = 3,
+-- max = 40,
+-- n = 12345,
+-- words = {
+-- ["someword"] = "someword",
+-- ["anotherword"] = "Anotherword",
+-- },
+-- }
+
+local lists = { }
+
+function context.setwordlist(tag,limit) -- returns hash (lowercase keys and original values)
+ if not tag or tag == "" then
+ return false, 3
+ end
+ local list = lists[tag]
+ if not list then
+ list = context.loaddefinitions("spell-" .. tag)
+ if not list or type(list) ~= "table" then
+ if not textadept then
+ report("invalid spell checking list for '%s'",tag)
+ end
+ list = { words = false, min = 3 }
+ else
+ list.words = list.words or false
+ list.min = list.min or 3
+ end
+ lists[tag] = list
+ end
+ if trace then
+ report("enabling spell checking for '%s' with minimum '%s'",tag,list.min)
+ end
+ return list.words, list.min
+end
+
+patterns.wordtoken = R("az","AZ","\127\255")
+patterns.wordpattern = patterns.wordtoken^3 -- todo: if limit and #s < limit then
+
+function context.checkedword(validwords,validminimum,s,i) -- ,limit
+ if not validwords then -- or #s < validminimum then
+ return true, "text", i -- true, "default", i
+ else
+ -- keys are lower
+ local word = validwords[s]
+ if word == s then
+ return true, "okay", i -- exact match
+ elseif word then
+ return true, "warning", i -- case issue
+ else
+ local word = validwords[lower(s)]
+ if word == s then
+ return true, "okay", i -- exact match
+ elseif word then
+ return true, "warning", i -- case issue
+ elseif upper(s) == s then
+ return true, "warning", i -- probably a logo or acronym
+ else
+ return true, "error", i
+ end
+ end
+ end
+end
+
+function context.styleofword(validwords,validminimum,s) -- ,limit
+ if not validwords or #s < validminimum then
+ return "text"
+ else
+ -- keys are lower
+ local word = validwords[s]
+ if word == s then
+ return "okay" -- exact match
+ elseif word then
+ return "warning" -- case issue
+ else
+ local word = validwords[lower(s)]
+ if word == s then
+ return "okay" -- exact match
+ elseif word then
+ return "warning" -- case issue
+ elseif upper(s) == s then
+ return "warning" -- probably a logo or acronym
+ else
+ return "error"
+ end
+ end
+ end
+end
+
+-- overloaded functions
+
+local h_table, b_table, n_table = { }, { }, { } -- from the time small tables were used (optimization)
+
+setmetatable(h_table, { __index = function(t,level) local v = { level, FOLD_HEADER } t[level] = v return v end })
+setmetatable(b_table, { __index = function(t,level) local v = { level, FOLD_BLANK } t[level] = v return v end })
+setmetatable(n_table, { __index = function(t,level) local v = { level } t[level] = v return v end })
+
+local newline = patterns.newline
+local p_yes = Cp() * Cs((1-newline)^1) * newline^-1
+local p_nop = newline
+
+local folders = { }
+
+local function fold_by_parsing(text,start_pos,start_line,start_level,lexer)
+ local folder = folders[lexer]
+ if not folder then
+ --
+ local pattern, folds, text, start_pos, line_num, prev_level, current_level
+ --
+ local fold_symbols = lexer._foldsymbols
+ local fold_pattern = lexer._foldpattern -- use lpeg instead (context extension)
+ --
+ if fold_pattern then
+ -- if no functions are found then we could have a faster one
+ fold_pattern = Cp() * C(fold_pattern) / function(s,match)
+ local symbols = fold_symbols[style_at[start_pos + s]]
+ if symbols then
+ local l = symbols[match]
+ if l then
+ current_level = current_level + l
+ end
+ end
+ end
+ local action_y = function()
+ folds[line_num] = prev_level
+ if current_level > prev_level then
+ folds[line_num] = prev_level + FOLD_HEADER
+ end
+ if current_level < FOLD_BASE then
+ current_level = FOLD_BASE
+ end
+ prev_level = current_level
+ line_num = line_num + 1
+ end
+ local action_n = function()
+ folds[line_num] = prev_level + FOLD_BLANK
+ line_num = line_num + 1
+ end
+ pattern = ((fold_pattern + (1-newline))^1 * newline / action_y + newline/action_n)^0
+
+ else
+ -- the traditional one but a bit optimized
+ local fold_symbols_patterns = fold_symbols._patterns
+ local action_y = function(pos,line)
+ for j = 1, #fold_symbols_patterns do
+ for s, match in gmatch(line,fold_symbols_patterns[j]) do -- "()(" .. patterns[i] .. ")"
+ local symbols = fold_symbols[style_at[start_pos + pos + s - 1]]
+ local l = symbols and symbols[match]
+ local t = type(l)
+ if t == "number" then
+ current_level = current_level + l
+ elseif t == "function" then
+ current_level = current_level + l(text, pos, line, s, match)
+ end
+ end
+ end
+ folds[line_num] = prev_level
+ if current_level > prev_level then
+ folds[line_num] = prev_level + FOLD_HEADER
+ end
+ if current_level < FOLD_BASE then
+ current_level = FOLD_BASE
+ end
+ prev_level = current_level
+ line_num = line_num + 1
+ end
+ local action_n = function()
+ folds[line_num] = prev_level + FOLD_BLANK
+ line_num = line_num + 1
+ end
+ pattern = (p_yes/action_y + p_nop/action_n)^0
+ end
+ --
+ local reset_parser = lexer._reset_parser
+ --
+ folder = function(_text_,_start_pos_,_start_line_,_start_level_)
+ if reset_parser then
+ reset_parser()
+ end
+ folds = { }
+ text = _text_
+ start_pos = _start_pos_
+ line_num = _start_line_
+ prev_level = _start_level_
+ current_level = prev_level
+ lpegmatch(pattern,text)
+ -- make folds collectable
+ local t = folds
+ folds = nil
+ return t
+ end
+ folders[lexer] = folder
+ end
+ return folder(text,start_pos,start_line,start_level,lexer)
+end
+
+local folds, current_line, prev_level
+
+local function action_y()
+ local current_level = FOLD_BASE + indent_amount[current_line]
+ if current_level > prev_level then -- next level
+ local i = current_line - 1
+ local f
+ while true do
+ f = folds[i]
+ if not f then
+ break
+ elseif f[2] == FOLD_BLANK then
+ i = i - 1
+ else
+ f[2] = FOLD_HEADER -- low indent
+ break
+ end
+ end
+ folds[current_line] = { current_level } -- high indent
+ elseif current_level < prev_level then -- prev level
+ local f = folds[current_line - 1]
+ if f then
+ f[1] = prev_level -- high indent
+ end
+ folds[current_line] = { current_level } -- low indent
+ else -- same level
+ folds[current_line] = { prev_level }
+ end
+ prev_level = current_level
+ current_line = current_line + 1
+end
+
+local function action_n()
+ folds[current_line] = { prev_level, FOLD_BLANK }
+ current_line = current_line + 1
+end
+
+local pattern = ( S("\t ")^0 * ( (1-patterns.eol)^1 / action_y + P(true) / action_n) * newline )^0
+
+local function fold_by_indentation(text,start_pos,start_line,start_level)
+ -- initialize
+ folds = { }
+ current_line = start_line
+ prev_level = start_level
+ -- define
+ -- -- not here .. pattern binds and local functions are not frozen
+ -- analyze
+ lpegmatch(pattern,text)
+ -- flatten
+ for line, level in next, folds do
+ folds[line] = level[1] + (level[2] or 0)
+ end
+ -- done, make folds collectable
+ local t = folds
+ folds = nil
+ return t
+end
+
+local function fold_by_line(text,start_pos,start_line,start_level)
+ local folds = { }
+ -- can also be lpeg'd
+ for _ in gmatch(text,".-\r?\n") do
+ folds[start_line] = n_table[start_level] -- { start_level } -- stile tables ? needs checking
+ start_line = start_line + 1
+ end
+ return folds
+end
+
+local threshold_by_lexer = 512 * 1024 -- we don't know the filesize yet
+local threshold_by_parsing = 512 * 1024 -- we don't know the filesize yet
+local threshold_by_indentation = 512 * 1024 -- we don't know the filesize yet
+local threshold_by_line = 512 * 1024 -- we don't know the filesize yet
+
+function context.fold(lexer,text,start_pos,start_line,start_level) -- hm, we had size thresholds .. where did they go
+ if text == "" then
+ return { }
+ end
+ if initialize then
+ initialize()
+ end
+ local fold_by_lexer = lexer._fold
+ local fold_by_symbols = lexer._foldsymbols
+ local filesize = 0 -- we don't know that
+ if fold_by_lexer then
+ if filesize <= threshold_by_lexer then
+ return fold_by_lexer(text,start_pos,start_line,start_level,lexer)
+ end
+ elseif fold_by_symbols then -- and lexer.properties("fold.by.parsing",1) > 0 then
+ if filesize <= threshold_by_parsing then
+ return fold_by_parsing(text,start_pos,start_line,start_level,lexer)
+ end
+ elseif lexer.properties("fold.by.indentation",1) > 0 then
+ if filesize <= threshold_by_indentation then
+ return fold_by_indentation(text,start_pos,start_line,start_level,lexer)
+ end
+ elseif lexer.properties("fold.by.line",1) > 0 then
+ if filesize <= threshold_by_line then
+ return fold_by_line(text,start_pos,start_line,start_level,lexer)
+ end
+ end
+ return { }
+end
+
+-- The following code is mostly unchanged:
+
+local function add_rule(lexer,id,rule) -- unchanged
+ if not lexer._RULES then
+ lexer._RULES = { }
+ lexer._RULEORDER = { }
+ end
+ lexer._RULES[id] = rule
+ lexer._RULEORDER[#lexer._RULEORDER + 1] = id
+end
+
+-- I finally figured out that adding more styles was an issue because of several
+-- reasons:
+--
+-- + in old versions there was a limit in the amount, so we overran the built-in
+-- hard coded scintilla range
+-- + then, the add_style function didn't check for already known ones, so again
+-- we had an overrun (with some magic that could be avoided)
+-- + then, when I messed with a new default set I realized that there is no check
+-- in initializing _TOKENSTYLES (here the inspect function helps)
+-- + of course it was mostly a side effect of passing all the used styles to the
+-- _tokenstyles instead of only the not-default ones but such a thing should not
+-- matter (read: intercepted)
+--
+-- This finally removed a head-ache and was revealed by lots of tracing, which I
+-- should have built in way earlier.
+
+local function add_style(lexer,token_name,style) -- changed a bit around 3.41
+ -- We don't add styles that are already defined as this can overflow the
+ -- amount possible (in old versions of scintilla).
+ if defaultstyles[token_name] then
+ if trace and detail then
+ report("default style '%s' is ignored as extra style",token_name)
+ end
+ return
+ elseif predefinedstyles[token_name] then
+ if trace and detail then
+ report("predefined style '%s' is ignored as extra style",token_name)
+ end
+ return
+ else
+ if trace and detail then
+ report("adding extra style '%s' as '%s'",token_name,style)
+ end
+ end
+ -- This is unchanged. We skip the dangerous zone.
+ local num_styles = lexer._numstyles
+ if num_styles == 32 then
+ num_styles = num_styles + 8
+ end
+ if num_styles >= 255 then
+ report("there can't be more than %s styles",255)
+ end
+ lexer._TOKENSTYLES[token_name] = num_styles
+ lexer._EXTRASTYLES[token_name] = style
+ lexer._numstyles = num_styles + 1
+end
+
+local function check_styles(lexer)
+ -- Here we also use a check for the dangerous zone. That way we can have a
+ -- larger default set. The original code just assumes that #default is less
+ -- than the dangerous zone's start.
+ local numstyles = 0
+ local tokenstyles = { }
+ for i=1, #default do
+ if numstyles == 32 then
+ numstyles = numstyles + 8
+ end
+ tokenstyles[default[i]] = numstyles
+ numstyles = numstyles + 1
+ end
+ -- Unchanged.
+ for i=1, #predefined do
+ tokenstyles[predefined[i]] = i + 31
+ end
+ lexer._TOKENSTYLES = tokenstyles
+ lexer._numstyles = numstyles
+ lexer._EXTRASTYLES = { }
+ return lexer
+end
+
+-- At some point an 'any' append showed up in the original code ...
+-- but I see no need to catch that case ... beter fix the specification.
+--
+-- hm, why are many joined twice
+
+local function join_tokens(lexer) -- slightly different from the original (no 'any' append)
+ local patterns = lexer._RULES
+ local order = lexer._RULEORDER
+ -- report("lexer: %s, tokens: %s",lexer._NAME,table.concat(order," + "))
+ if patterns and order then
+ local token_rule = patterns[order[1]] -- normally whitespace
+ for i=2,#order do
+ token_rule = token_rule + patterns[order[i]]
+ end
+ if lexer._TYPE ~= "context" then
+ token_rule = token_rule + lexers.token(lexers.DEFAULT, patterns.any)
+ end
+ lexer._TOKENRULE = token_rule
+ return token_rule
+ else
+ return P(1)
+ end
+end
+
+local function add_lexer(grammar, lexer) -- mostly the same as the original
+ local token_rule = join_tokens(lexer)
+ local lexer_name = lexer._NAME
+ local children = lexer._CHILDREN
+ for i=1,#children do
+ local child = children[i]
+ if child._CHILDREN then
+ add_lexer(grammar, child)
+ end
+ local child_name = child._NAME
+ local rules = child._EMBEDDEDRULES[lexer_name]
+ local rules_token_rule = grammar["__" .. child_name] or rules.token_rule
+ local pattern = (-rules.end_rule * rules_token_rule)^0 * rules.end_rule^-1
+ grammar[child_name] = pattern * V(lexer_name)
+ local embedded_child = "_" .. child_name
+ grammar[embedded_child] = rules.start_rule * pattern
+ token_rule = V(embedded_child) + token_rule
+ end
+ if trace then
+ report("adding lexer '%s' with %s children",lexer_name,#children)
+ end
+ grammar["__" .. lexer_name] = token_rule
+ grammar[lexer_name] = token_rule^0
+end
+
+local function build_grammar(lexer,initial_rule) -- same as the original
+ local children = lexer._CHILDREN
+ local lexer_name = lexer._NAME
+ if children then
+ if not initial_rule then
+ initial_rule = lexer_name
+ end
+ local grammar = { initial_rule }
+ add_lexer(grammar, lexer)
+ lexer._INITIALRULE = initial_rule
+ lexer._GRAMMAR = Ct(P(grammar))
+ if trace then
+ report("building grammar for '%s' with whitespace '%s'and %s children",lexer_name,lexer.whitespace or "?",#children)
+ end
+ else
+ lexer._GRAMMAR = Ct(join_tokens(lexer)^0)
+ if trace then
+ report("building grammar for '%s' with whitespace '%s'",lexer_name,lexer.whitespace or "?")
+ end
+ end
+end
+
+-- So far. We need these local functions in the next one.
+
+local lineparsers = { }
+
+local maxmatched = 100
+
+local function collapsed(t)
+ local lasttoken = nil
+ local lastindex = nil
+ for i=1,#t,2 do
+ local token = t[i]
+ local position = t[i+1]
+ if token == lasttoken then
+ t[lastindex] = position
+ elseif lastindex then
+ lastindex = lastindex + 1
+ t[lastindex] = token
+ lastindex = lastindex + 1
+ t[lastindex] = position
+ lasttoken = token
+ else
+ lastindex = i+1
+ lasttoken = token
+ end
+ end
+ for i=#t,lastindex+1,-1 do
+ t[i] = nil
+ end
+ return t
+end
+
+local function matched(lexer,grammar,text)
+ -- text = string.gsub(text,"\z","!")
+ local t = lpegmatch(grammar,text)
+ if trace then
+ if show then
+ report("output of lexer: %s (max %s entries)",lexer._NAME,maxmatched)
+ local s = lexer._TOKENSTYLES
+ local p = 1
+ for i=1,2*maxmatched,2 do
+ local n = i + 1
+ local ti = t[i]
+ local tn = t[n]
+ if ti then
+ local txt = sub(text,p,tn-1)
+ if txt then
+ txt = gsub(txt,"[%s]"," ")
+ else
+ txt = "!no text!"
+ end
+ report("%4i : %s > %s (%s) (%s)",n/2,ti,tn,s[ti] or "!unset!",txt)
+ p = tn
+ else
+ break
+ end
+ end
+ end
+ report("lexer results: %s, length: %s, ranges: %s",lexer._NAME,#text,#t/2)
+ if collapse then
+ t = collapsed(t)
+ report("lexer collapsed: %s, length: %s, ranges: %s",lexer._NAME,#text,#t/2)
+ end
+ elseif collapse then
+ t = collapsed(t)
+ end
+ return t
+end
+
+-- Todo: make nice generic lexer (extra argument with start/stop commands) for
+-- context itself.
+
+function context.lex(lexer,text,init_style)
+ -- local lexer = global._LEXER
+ local grammar = lexer._GRAMMAR
+ if initialize then
+ initialize()
+ end
+ if not grammar then
+ return { }
+ elseif lexer._LEXBYLINE then -- we could keep token
+ local tokens = { }
+ local offset = 0
+ local noftokens = 0
+ local lineparser = lineparsers[lexer]
+ if not lineparser then -- probably a cmt is more efficient
+ lineparser = C((1-newline)^0 * newline) / function(line)
+ local length = #line
+ local line_tokens = length > 0 and lpegmatch(grammar,line)
+ if line_tokens then
+ for i=1,#line_tokens,2 do
+ noftokens = noftokens + 1
+ tokens[noftokens] = line_tokens[i]
+ noftokens = noftokens + 1
+ tokens[noftokens] = line_tokens[i + 1] + offset
+ end
+ end
+ offset = offset + length
+ if noftokens > 0 and tokens[noftokens] ~= offset then
+ noftokens = noftokens + 1
+ tokens[noftokens] = "default"
+ noftokens = noftokens + 1
+ tokens[noftokens] = offset + 1
+ end
+ end
+ lineparser = lineparser^0
+ lineparsers[lexer] = lineparser
+ end
+ lpegmatch(lineparser,text)
+ return tokens
+ elseif lexer._CHILDREN then
+ local hash = lexer._HASH -- hm, was _hash
+ if not hash then
+ hash = { }
+ lexer._HASH = hash
+ end
+ grammar = hash[init_style]
+ if grammar then
+ lexer._GRAMMAR = grammar
+ -- lexer._GRAMMAR = lexer._GRAMMAR or grammar
+ else
+ for style, style_num in next, lexer._TOKENSTYLES do
+ if style_num == init_style then
+ -- the name of the lexers is filtered from the whitespace
+ -- specification .. weird code, should be a reverse hash
+ local lexer_name = match(style,"^(.+)_whitespace") or lexer._NAME
+ if lexer._INITIALRULE ~= lexer_name then
+ grammar = hash[lexer_name]
+ if not grammar then
+ build_grammar(lexer,lexer_name)
+ grammar = lexer._GRAMMAR
+ hash[lexer_name] = grammar
+ end
+ end
+ break
+ end
+ end
+ grammar = grammar or lexer._GRAMMAR
+ hash[init_style] = grammar
+ end
+ if trace then
+ report("lexing '%s' with initial style '%s' and %s children",lexer._NAME,#lexer._CHILDREN or 0,init_style)
+ end
+ return matched(lexer,grammar,text)
+ else
+ if trace then
+ report("lexing '%s' with initial style '%s'",lexer._NAME,init_style)
+ end
+ return matched(lexer,grammar,text)
+ end
+end
+
+-- hm, changed in 3.24 .. no longer small table but one table:
+
+function context.token(name, patt)
+ return patt * Cc(name) * Cp()
+end
+
+-- The next ones were mostly unchanged (till now), we moved it here when 3.41
+-- became close to impossible to combine with cq. overload and a merge was
+-- the only solution. It makes later updates more painful but the update to
+-- 3.41 was already a bit of a nightmare anyway.
+
+-- Loading lexers is rather interwoven with what the dll/so sets and
+-- it changes over time. So, we need to keep an eye on changes. One
+-- problem that we always faced were the limitations in length of
+-- lexer names (as they get app/prepended occasionally to strings with
+-- a hard coded limit). So, we always used alternative names and now need
+-- to make sure this doesn't clash. As I no longer intend to use shipped
+-- lexers I could strip away some of the code in the future, but keeping
+-- it as reference makes sense.
+
+-- I spend quite some time figuring out why 3.41 didn't work or crashed which
+-- is hard when no stdout is available and when the io library is absent. In
+-- the end of of the problems was in the _NAME setting. We set _NAME
+-- to e.g. 'tex' but load from a file with a longer name, which we do
+-- as we don't want to clash with existing files, we end up in
+-- lexers not being found.
+
+local whitespaces = { }
+
+local function push_whitespace(name)
+ table.insert(whitespaces,lexers.WHITESPACE or "whitespace")
+ lexers.WHITESPACE = name .. "_whitespace"
+end
+
+local function pop_whitespace()
+ lexers.WHITESPACE = table.remove(whitespaces) or "whitespace"
+end
+
+local function check_whitespace(lexer,name)
+ if lexer then
+ lexer.whitespace = (name or lexer.name or lexer._NAME) .. "_whitespace"
+ end
+end
+
+function context.new(name,filename)
+ local lexer = {
+ _TYPE = "context",
+ --
+ _NAME = name, -- used for token building
+ _FILENAME = filename, -- for diagnostic purposed
+ --
+ name = name,
+ filename = filename,
+ }
+ if trace then
+ report("initializing lexer tagged '%s' from file '%s'",name,filename or name)
+ end
+ check_whitespace(lexer)
+ check_styles(lexer)
+ check_properties(lexer)
+ return lexer
+end
+
+local function nolexer(name)
+ local lexer = {
+ _TYPE = "unset",
+ _NAME = name,
+ -- _rules = { },
+ }
+ check_styles(lexer)
+ check_whitespace(lexer)
+ check_properties(lexer)
+ return lexer
+end
+
+local function load_lexer(name,namespace)
+ if trace then
+ report("loading lexer file '%s'",name)
+ end
+ push_whitespace(namespace or name) -- for traditional lexers .. no alt_name yet
+ local lexer, fullname = context.loadluafile(name)
+ pop_whitespace()
+ if not lexer then
+ report("invalid lexer file '%s'",name)
+ elseif trace then
+ report("lexer file '%s' has been loaded",fullname)
+ end
+ if type(lexer) ~= "table" then
+ if trace then
+ report("lexer file '%s' gets a dummy lexer",name)
+ end
+ return nolexer(name)
+ end
+ if lexer._TYPE ~= "context" then
+ lexer._TYPE = "native"
+ check_styles(lexer)
+ check_whitespace(lexer,namespace or name)
+ check_properties(lexer)
+ end
+ if not lexer._NAME then
+ lexer._NAME = name -- so: filename
+ end
+ if name ~= namespace then
+ lexer._NAME = namespace
+ end
+ return lexer
+end
+
+-- tracing ...
+
+local function inspect_lexer(lexer,level)
+ -- If we had the regular libs available I could use the usual
+ -- helpers.
+ local parent = lexer._lexer
+ lexer._lexer = nil -- prevent endless recursion
+ local name = lexer._NAME
+ local function showstyles_1(tag,styles)
+ local numbers = { }
+ for k, v in next, styles do
+ numbers[v] = k
+ end
+ -- sort by number and make number hash too
+ local keys = sortedkeys(numbers)
+ for i=1,#keys do
+ local k = keys[i]
+ local v = numbers[k]
+ report("[%s %s] %s %s = %s",level,name,tag,k,v)
+ end
+ end
+ local function showstyles_2(tag,styles)
+ local keys = sortedkeys(styles)
+ for i=1,#keys do
+ local k = keys[i]
+ local v = styles[k]
+ report("[%s %s] %s %s = %s",level,name,tag,k,v)
+ end
+ end
+ local keys = sortedkeys(lexer)
+ for i=1,#keys do
+ local k = keys[i]
+ local v = lexer[k]
+ report("[%s %s] root key : %s = %s",level,name,k,tostring(v))
+ end
+ showstyles_1("token style",lexer._TOKENSTYLES)
+ showstyles_2("extra style",lexer._EXTRASTYLES)
+ local children = lexer._CHILDREN
+ if children then
+ for i=1,#children do
+ inspect_lexer(children[i],level+1)
+ end
+ end
+ lexer._lexer = parent
+end
+
+function context.inspect(lexer)
+ inspect_lexer(lexer,0)
+end
+
+-- An optional second argument has been introduced so that one can embed a lexer
+-- more than once ... maybe something to look into (as not it's done by remembering
+-- the start sequence ... quite okay but maybe suboptimal ... anyway, never change
+-- a working solution).
+
+-- namespace can be automatic: if parent then use name of parent (chain)
+
+function context.loadlexer(filename,namespace)
+ nesting = nesting + 1
+ if not namespace then
+ namespace = filename
+ end
+ local lexer = usedlexers[namespace] -- we load by filename but the internal name can be short
+ if lexer then
+ if trace then
+ report("reusing lexer '%s'",namespace)
+ end
+ nesting = nesting - 1
+ return lexer
+ elseif trace then
+ report("loading lexer '%s'",namespace)
+ end
+ --
+ if initialize then
+ initialize()
+ end
+ --
+ parent_lexer = nil
+ --
+ lexer = load_lexer(filename,namespace) or nolexer(filename,namespace)
+ usedlexers[filename] = lexer
+ --
+ if not lexer._rules and not lexer._lexer then
+ lexer._lexer = parent_lexer
+ end
+ --
+ if lexer._lexer then
+ local _l = lexer._lexer
+ local _r = lexer._rules
+ local _s = lexer._tokenstyles
+ if not _l._tokenstyles then
+ _l._tokenstyles = { }
+ end
+ if _r then
+ local rules = _l._rules
+ local name = lexer.name
+ for i=1,#_r do
+ local rule = _r[i]
+ rules[#rules + 1] = {
+ name .. "_" .. rule[1],
+ rule[2],
+ }
+ end
+ end
+ if _s then
+ local tokenstyles = _l._tokenstyles
+ for token, style in next, _s do
+ tokenstyles[token] = style
+ end
+ end
+ lexer = _l
+ end
+ --
+ local _r = lexer._rules
+ if _r then
+ local _s = lexer._tokenstyles
+ if _s then
+ for token, style in next, _s do
+ add_style(lexer, token, style)
+ end
+ end
+ for i=1,#_r do
+ local rule = _r[i]
+ add_rule(lexer, rule[1], rule[2])
+ end
+ build_grammar(lexer)
+ end
+ --
+ add_style(lexer, lexer.whitespace, lexers.STYLE_WHITESPACE)
+ --
+ local foldsymbols = lexer._foldsymbols
+ if foldsymbols then
+ local patterns = foldsymbols._patterns
+ if patterns then
+ for i = 1, #patterns do
+ patterns[i] = "()(" .. patterns[i] .. ")"
+ end
+ end
+ end
+ --
+ lexer.lex = lexers.lex
+ lexer.fold = lexers.fold
+ --
+ nesting = nesting - 1
+ --
+ if inspect then
+ context.inspect(lexer)
+ end
+ --
+ return lexer
+end
+
+-- I probably need to check this occasionally with the original as I've messed around a bit
+-- in the past to get nesting working well as one can hit the max number of styles, get
+-- clashes due to fuzzy inheritance etc. so there is some interplay with the other patched
+-- code.
+
+function context.embed_lexer(parent, child, start_rule, end_rule) -- mostly the same as the original
+ local embeddedrules = child._EMBEDDEDRULES
+ if not embeddedrules then
+ embeddedrules = { }
+ child._EMBEDDEDRULES = embeddedrules
+ end
+ if not child._RULES then
+ local rules = child._rules
+ if not rules then
+ report("child lexer '%s' has no rules",child._NAME or "unknown")
+ rules = { }
+ child._rules = rules
+ end
+ for i=1,#rules do
+ local rule = rules[i]
+ add_rule(child, rule[1], rule[2])
+ end
+ end
+ embeddedrules[parent._NAME] = {
+ ["start_rule"] = start_rule,
+ ["token_rule"] = join_tokens(child),
+ ["end_rule"] = end_rule
+ }
+ local children = parent._CHILDREN
+ if not children then
+ children = { }
+ parent._CHILDREN = children
+ end
+ children[#children + 1] = child
+ local tokenstyles = parent._tokenstyles
+ if not tokenstyles then
+ tokenstyles = { }
+ parent._tokenstyles = tokenstyles
+ end
+ local childname = child._NAME
+ local whitespace = childname .. "_whitespace"
+ tokenstyles[whitespace] = lexers.STYLE_WHITESPACE -- all these STYLE_THINGS will go .. just a proper hash
+ if trace then
+ report("using whitespace '%s' as trigger for '%s' with property '%s'",whitespace,childname,lexers.STYLE_WHITESPACE)
+ end
+ local childstyles = child._tokenstyles
+ if childstyles then
+ for token, style in next, childstyles do
+ tokenstyles[token] = style
+ end
+ end
+ -- new, a bit redone, untested, no clue yet what it is for
+ local parentsymbols = parent._foldsymbols
+ local childsymbols = child ._foldsymbols
+ if not parentsymbols then
+ parentsymbols = { }
+ parent._foldsymbols = parentsymbols
+ end
+ if childsymbols then
+ for token, symbols in next, childsymbols do
+ local tokensymbols = parentsymbols[token]
+ if not tokensymbols then
+ tokensymbols = { }
+ parentsymbols[token] = tokensymbols
+ end
+ for k, v in next, symbols do
+ if type(k) == 'number' then
+ tokensymbols[#tokensymbols + 1] = v
+ elseif not tokensymbols[k] then
+ tokensymbols[k] = v
+ end
+ end
+ end
+ end
+ --
+ child._lexer = parent
+ parent_lexer = parent
+end
+
+-- we now move the adapted code to the lexers namespace
+
+lexers.new = context.new
+lexers.load = context.loadlexer
+------.loadlexer = context.loadlexer
+lexers.loadluafile = context.loadluafile
+lexers.embed_lexer = context.embed_lexer
+lexers.fold = context.fold
+lexers.lex = context.lex
+lexers.token = context.token
+lexers.word_match = context.word_match
+lexers.exact_match = context.exact_match
+lexers.just_match = context.just_match
+lexers.inspect = context.inspect
+lexers.report = context.report
+lexers.inform = context.inform
+
+-- helper .. alas ... the lexer's lua instance is rather crippled .. not even
+-- math is part of it
+
+do
+
+ local floor = math and math.floor
+ local char = string.char
+ local format = format
+ local tonumber = tonumber
+
+ if not floor then
+
+ if tonumber(string.match(_VERSION,"%d%.%d")) < 5.3 then
+ floor = function(n)
+ return tonumber(format("%d",n))
+ end
+ else
+ -- 5.3 has a mixed number system and format %d doesn't work with
+ -- floats any longer ... no fun
+ floor = function(n)
+ return (n - n % 1)
+ end
+ end
+
+ math = math or { }
+
+ math.floor = floor
+
+ end
+
+ local function utfchar(n)
+ if n < 0x80 then
+ return char(n)
+ elseif n < 0x800 then
+ return char(
+ 0xC0 + floor(n/0x40),
+ 0x80 + (n % 0x40)
+ )
+ elseif n < 0x10000 then
+ return char(
+ 0xE0 + floor(n/0x1000),
+ 0x80 + (floor(n/0x40) % 0x40),
+ 0x80 + (n % 0x40)
+ )
+ elseif n < 0x40000 then
+ return char(
+ 0xF0 + floor(n/0x40000),
+ 0x80 + floor(n/0x1000),
+ 0x80 + (floor(n/0x40) % 0x40),
+ 0x80 + (n % 0x40)
+ )
+ else
+ -- return char(
+ -- 0xF1 + floor(n/0x1000000),
+ -- 0x80 + floor(n/0x40000),
+ -- 0x80 + floor(n/0x1000),
+ -- 0x80 + (floor(n/0x40) % 0x40),
+ -- 0x80 + (n % 0x40)
+ -- )
+ return "?"
+ end
+ end
+
+ context.utfchar = utfchar
+
+ -- -- the next one is good enough for use here but not perfect (see context for a
+ -- -- better one)
+ --
+ -- local function make(t)
+ -- local p
+ -- for k, v in next, t do
+ -- if not p then
+ -- if next(v) then
+ -- p = P(k) * make(v)
+ -- else
+ -- p = P(k)
+ -- end
+ -- else
+ -- if next(v) then
+ -- p = p + P(k) * make(v)
+ -- else
+ -- p = p + P(k)
+ -- end
+ -- end
+ -- end
+ -- return p
+ -- end
+ --
+ -- function lpeg.utfchartabletopattern(list)
+ -- local tree = { }
+ -- for i=1,#list do
+ -- local t = tree
+ -- for c in gmatch(list[i],".") do
+ -- if not t[c] then
+ -- t[c] = { }
+ -- end
+ -- t = t[c]
+ -- end
+ -- end
+ -- return make(tree)
+ -- end
+
+ helpers.utfcharpattern = P(1) * R("\128\191")^0 -- unchecked but fast
+
+ local p_false = P(false)
+ local p_true = P(true)
+
+ local function make(t)
+ local function making(t)
+ local p = p_false
+ local keys = sortedkeys(t)
+ for i=1,#keys do
+ local k = keys[i]
+ if k ~= "" then
+ local v = t[k]
+ if v == true then
+ p = p + P(k) * p_true
+ elseif v == false then
+ -- can't happen
+ else
+ p = p + P(k) * making(v)
+ end
+ end
+ end
+ if t[""] then
+ p = p + p_true
+ end
+ return p
+ end
+ local p = p_false
+ local keys = sortedkeys(t)
+ for i=1,#keys do
+ local k = keys[i]
+ if k ~= "" then
+ local v = t[k]
+ if v == true then
+ p = p + P(k) * p_true
+ elseif v == false then
+ -- can't happen
+ else
+ p = p + P(k) * making(v)
+ end
+ end
+ end
+ return p
+ end
+
+ local function collapse(t,x)
+ if type(t) ~= "table" then
+ return t, x
+ else
+ local n = next(t)
+ if n == nil then
+ return t, x
+ elseif next(t,n) == nil then
+ -- one entry
+ local k = n
+ local v = t[k]
+ if type(v) == "table" then
+ return collapse(v,x..k)
+ else
+ return v, x .. k
+ end
+ else
+ local tt = { }
+ for k, v in next, t do
+ local vv, kk = collapse(v,k)
+ tt[kk] = vv
+ end
+ return tt, x
+ end
+ end
+ end
+
+ function helpers.utfchartabletopattern(list)
+ local tree = { }
+ local n = #list
+ if n == 0 then
+ for s in next, list do
+ local t = tree
+ local p, pk
+ for c in gmatch(s,".") do
+ if t == true then
+ t = { [c] = true, [""] = true }
+ p[pk] = t
+ p = t
+ t = false
+ elseif t == false then
+ t = { [c] = false }
+ p[pk] = t
+ p = t
+ t = false
+ else
+ local tc = t[c]
+ if not tc then
+ tc = false
+ t[c] = false
+ end
+ p = t
+ t = tc
+ end
+ pk = c
+ end
+ if t == false then
+ p[pk] = true
+ elseif t == true then
+ -- okay
+ else
+ t[""] = true
+ end
+ end
+ else
+ for i=1,n do
+ local s = list[i]
+ local t = tree
+ local p, pk
+ for c in gmatch(s,".") do
+ if t == true then
+ t = { [c] = true, [""] = true }
+ p[pk] = t
+ p = t
+ t = false
+ elseif t == false then
+ t = { [c] = false }
+ p[pk] = t
+ p = t
+ t = false
+ else
+ local tc = t[c]
+ if not tc then
+ tc = false
+ t[c] = false
+ end
+ p = t
+ t = tc
+ end
+ pk = c
+ end
+ if t == false then
+ p[pk] = true
+ elseif t == true then
+ -- okay
+ else
+ t[""] = true
+ end
+ end
+ end
+ collapse(tree,"")
+ -- inspect(tree)
+ return make(tree)
+ end
+
+ patterns.invisibles = helpers.utfchartabletopattern {
+ utfchar(0x00A0), -- nbsp
+ utfchar(0x2000), -- enquad
+ utfchar(0x2001), -- emquad
+ utfchar(0x2002), -- enspace
+ utfchar(0x2003), -- emspace
+ utfchar(0x2004), -- threeperemspace
+ utfchar(0x2005), -- fourperemspace
+ utfchar(0x2006), -- sixperemspace
+ utfchar(0x2007), -- figurespace
+ utfchar(0x2008), -- punctuationspace
+ utfchar(0x2009), -- breakablethinspace
+ utfchar(0x200A), -- hairspace
+ utfchar(0x200B), -- zerowidthspace
+ utfchar(0x202F), -- narrownobreakspace
+ utfchar(0x205F), -- math thinspace
+ }
+
+ -- now we can make:
+
+ patterns.iwordtoken = patterns.wordtoken - patterns.invisibles
+ patterns.iwordpattern = patterns.iwordtoken^3
+
+end
+
+-- The following helpers are not used, partially replaced by other mechanisms and
+-- when needed I'll first optimize them. I only made them somewhat more readable.
+
+function lexers.delimited_range(chars, single_line, no_escape, balanced) -- unchanged
+ local s = sub(chars,1,1)
+ local e = #chars == 2 and sub(chars,2,2) or s
+ local range
+ local b = balanced and s or ""
+ local n = single_line and "\n" or ""
+ if no_escape then
+ local invalid = S(e .. n .. b)
+ range = patterns.any - invalid
+ else
+ local invalid = S(e .. n .. b) + patterns.backslash
+ range = patterns.any - invalid + patterns.backslash * patterns.any
+ end
+ if balanced and s ~= e then
+ return P {
+ s * (range + V(1))^0 * e
+ }
+ else
+ return s * range^0 * P(e)^-1
+ end
+end
+
+function lexers.starts_line(patt) -- unchanged
+ return P ( function(input, index)
+ if index == 1 then
+ return index
+ end
+ local char = sub(input,index - 1,index - 1)
+ if char == "\n" or char == "\r" or char == "\f" then
+ return index
+ end
+ end ) * patt
+end
+
+function lexers.last_char_includes(s) -- unchanged
+ s = "[" .. gsub(s,"[-%%%[]", "%%%1") .. "]"
+ return P ( function(input, index)
+ if index == 1 then
+ return index
+ end
+ local i = index
+ while match(sub(input,i - 1,i - 1),"[ \t\r\n\f]") do
+ i = i - 1
+ end
+ if match(sub(input,i - 1,i - 1),s) then
+ return index
+ end
+ end)
+end
+
+function lexers.nested_pair(start_chars, end_chars) -- unchanged
+ local s = start_chars
+ local e = P(end_chars)^-1
+ return P {
+ s * (patterns.any - s - end_chars + V(1))^0 * e
+ }
+end
+
+local function prev_line_is_comment(prefix, text, pos, line, s) -- unchanged
+ local start = find(line,"%S")
+ if start < s and not find(line,prefix,start,true) then
+ return false
+ end
+ local p = pos - 1
+ if sub(text,p,p) == "\n" then
+ p = p - 1
+ if sub(text,p,p) == "\r" then
+ p = p - 1
+ end
+ if sub(text,p,p) ~= "\n" then
+ while p > 1 and sub(text,p - 1,p - 1) ~= "\n"
+ do p = p - 1
+ end
+ while find(sub(text,p,p),"^[\t ]$") do
+ p = p + 1
+ end
+ return sub(text,p,p + #prefix - 1) == prefix
+ end
+ end
+ return false
+end
+
+local function next_line_is_comment(prefix, text, pos, line, s)
+ local p = find(text,"\n",pos + s)
+ if p then
+ p = p + 1
+ while find(sub(text,p,p),"^[\t ]$") do
+ p = p + 1
+ end
+ return sub(text,p,p + #prefix - 1) == prefix
+ end
+ return false
+end
+
+function lexers.fold_line_comments(prefix)
+ local property_int = lexers.property_int
+ return function(text, pos, line, s)
+ if property_int["fold.line.comments"] == 0 then
+ return 0
+ end
+ if s > 1 and match(line,"^%s*()") < s then
+ return 0
+ end
+ local prev_line_comment = prev_line_is_comment(prefix, text, pos, line, s)
+ local next_line_comment = next_line_is_comment(prefix, text, pos, line, s)
+ if not prev_line_comment and next_line_comment then
+ return 1
+ end
+ if prev_line_comment and not next_line_comment then
+ return -1
+ end
+ return 0
+ end
+end
+
+-- done
+
+return lexers
diff --git a/context/data/textadept/context/modules/textadept-context-files.lua b/context/data/textadept/context/modules/textadept-context-files.lua
new file mode 100644
index 000000000..5811280a2
--- /dev/null
+++ b/context/data/textadept/context/modules/textadept-context-files.lua
@@ -0,0 +1,774 @@
+local info = {
+ version = 1.002,
+ comment = "file handler for textadept for context/metafun",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+local lexer = require("scite-context-lexer")
+local context = lexer.context
+
+local char, format, gsub = string.char, string.format, string.gsub
+
+-- What is _CHARSET doing ... I don't want any messing with conversion at all. Scite is
+-- more clever with e.g. pdf. How can I show non ascii as escapes.
+
+-- I'll add a few more keybindings. I mostly made this file for my own use and as a
+-- fallback for SciTE as it runs on all os's. It might evolve ... who knows.
+
+io.encodings = {
+ "UTF-8",
+ "ASCII",
+ "UTF-16",
+}
+
+-- We need this for for instance pdf files (faster too):
+
+local sevenbitascii = { }
+for i=127,255 do
+ sevenbitascii[char(i)] = format("0x%02X",i)
+end
+
+local function setsevenbitascii(buffer)
+ -- we cannot directly assign sevenbitascii to buffer
+ local representation = buffer.representation
+ for k, v in next, sevenbitascii do
+ representation[k] = v
+ end
+end
+
+-- Here we rebind keys. For this we need to load the alternative runner framework. I will
+-- probably change the menu.
+
+local oldrunner = textadept.run
+local runner = require("textadept-context-runner")
+
+-- local function userunner(runner)
+-- --
+-- keys [OSX and 'mr' or 'cr' ] = runner.process or runner.run
+-- keys [OSX and 'mR' or (GUI and 'cR' or 'cmr')] = runner.check or runner.compile
+-- keys [OSX and 'mB' or (GUI and 'cB' or 'cmb')] = runner.preview or runner.build
+-- keys [OSX and 'mX' or (GUI and 'cX' or 'cmx')] = runner.quit or runner.stop
+-- --
+-- textadept.menu.menubar [_L['_Tools']] [_L['_Run']] [2] = runner.process or runner.run
+-- textadept.menu.menubar [_L['_Tools']] [_L['_Compile']] [2] = runner.check or runner.compile
+-- textadept.menu.menubar [_L['_Tools']] [_L['Buil_d']] [2] = runner.preview or runner.build
+-- textadept.menu.menubar [_L['_Tools']] [_L['S_top']] [2] = runner.quit or runner.stop
+-- --
+-- end
+
+-- I played a while with supporting both systems alongsize but getting the menus
+-- synchronized is a real pain and semi-random. So, I decided to just drop the
+-- old. And I don't want to implement a full variant now. Anyway, after that
+-- conclusion I decided to replace not only the tools menu.
+
+local SEPARATOR = { "" }
+local newmenu = { }
+local newkeys = { }
+
+do
+
+ newmenu.file = {
+
+ title = '_File',
+
+ { '_New', buffer.new },
+ { '_Open', io.open_file },
+ { 'Open _Recent', io.open_recent_file },
+ { 'Re_load', io.reload_file },
+ { '_Save', io.save_file },
+ { 'Save _As', io.save_file_as },
+ { 'Save All', io.save_all_files },
+
+ SEPARATOR,
+
+ { '_Close', io.close_buffer },
+ { 'Close All', io.close_all_buffers },
+
+ -- SEPARATOR,
+
+ -- { 'Loa_d Session', textadept.session.load },
+ -- { 'Sav_e Session', textadept.session.save },
+
+ SEPARATOR,
+
+ { _L['_Quit'], quit },
+
+ }
+
+ -- maybe just the same keys on all ... or duplicate on osx
+
+ newkeys[OSX and 'mn' or 'cn'] = buffer.new
+ newkeys[OSX and 'mo' or 'co'] = io.open_file
+ newkeys[OSX and 'cmo' or 'cao'] = io.open_recent_file
+ newkeys[OSX and 'ms' or 'cs'] = io.save_file
+ newkeys[OSX and 'mS' or 'cS'] = io.save_file_as
+ newkeys[OSX and 'mw' or 'cw'] = io.close_buffer
+ newkeys[OSX and 'mW' or 'cW'] = io.close_all_buffers
+
+end
+
+do
+
+ local function complete_symbol()
+ textadept.editing.autocomplete(buffer:get_lexer(true))
+ end
+
+ newmenu.edit = {
+
+ title = '_Edit',
+
+ SEPARATOR,
+
+ { '_Undo', buffer.undo },
+ { '_Redo', buffer.redo },
+
+ SEPARATOR,
+
+ { 'Cu_t', buffer.cut },
+ { '_Copy', buffer.copy },
+ { '_Paste', buffer.paste },
+ { '_Delete', buffer.clear },
+ { 'Select _All', buffer.select_all },
+
+ SEPARATOR,
+
+ { 'Duplicate _Line', buffer.line_duplicate },
+
+ SEPARATOR,
+
+ { 'Toggle _Block Comment', textadept.editing.block_comment },
+ { '_Upper Case Selection', buffer.upper_case },
+ { '_Lower Case Selection', buffer.lower_case },
+
+ }
+
+ newkeys[OSX and 'mz' or 'cz'] = buffer.undo
+ newkeys[OSX and 'my' or 'cy'] = buffer.redo
+ newkeys[OSX and 'mx' or 'cx'] = buffer.cut
+ newkeys[OSX and 'mc' or 'cc'] = buffer.copy
+ newkeys[OSX and 'mv' or 'cv'] = buffer.paste
+ newkeys[OSX and 'ma' or 'ca'] = buffer.select_all
+
+ newkeys[OSX and 'mD' or 'cD'] = textadept.editing.select_word
+ newkeys[OSX and 'mN' or 'cN'] = textadept.editing.select_line
+ newkeys[OSX and 'mP' or 'cP'] = textadept.editing.select_paragraph
+
+ newkeys['del'] = buffer.clear
+ newkeys['cy'] = buffer.redo
+
+ newkeys[OSX and 'md' or 'cd'] = buffer.line_duplicate
+ newkeys[OSX and 'cu' or 'cau'] = buffer.upper_case
+ newkeys[OSX and 'cU' or 'caU'] = buffer.lower_case
+
+ newkeys[OSX and 'mq' or 'cq'] = textadept.editing.block_comment
+
+ -- Do I ever use these?
+
+ -- newkeys['cf'] = buffer.char_right
+ -- newkeys['cF'] = buffer.char_right_extend
+ -- newkeys['cmf'] = buffer.word_right
+ -- newkeys['cmF'] = buffer.word_right_extend
+ -- newkeys['cb'] = buffer.char_left
+ -- newkeys['cB'] = buffer.char_left_extend
+ -- newkeys['cmb'] = buffer.word_left
+ -- newkeys['cmB'] = buffer.word_left_extend
+ -- newkeys['cn'] = buffer.line_down
+ -- newkeys['cN'] = buffer.line_down_extend
+ -- newkeys['cp'] = buffer.line_up
+ -- newkeys['cP'] = buffer.line_up_extend
+ -- newkeys['ca'] = buffer.vc_home
+ -- newkeys['cA'] = buffer.vc_home_extend
+ -- newkeys['ce'] = buffer.line_end
+ -- newkeys['cE'] = buffer.line_end_extend
+ -- newkeys['aright'] = buffer.word_right
+ -- newkeys['aleft'] = buffer.word_left
+ -- newkeys['cdv'] = buffer.clear
+ -- newkeys['ck'] = function() buffer:line_end_extend() buffer:cut() end
+ -- newkeys['cl'] = buffer.vertical_centre_caret
+
+ newkeys.fn = OSX and function() return true end or nil
+
+ newkeys[OSX and 'c@' or 'c '] = complete_symbol
+
+end
+
+do
+
+ local function find_in_file()
+ ui.find.in_files = false
+ ui.find.focus()
+ end
+
+ local function find_in_files()
+ ui.find.in_files = true
+ ui.find.focus()
+ end
+
+ local function find_next_in_files()
+ ui.find.goto_file_found(false,true)
+ end
+
+ local function find_previous_in_files()
+ ui.find.goto_file_found(false,false)
+ end
+
+ newmenu.search = {
+
+ title = '_Search',
+
+ SEPARATOR,
+
+ { '_Find', find_in_file },
+ { 'Find _Next', ui.find.find_next },
+ { 'Find _Previous', ui.find.find_prev },
+ { '_Replace', ui.find.replace },
+ { 'Replace _All', ui.find.replace_all },
+ { 'Find _Incremental', ui.find.find_incremental },
+
+ SEPARATOR,
+
+ { 'Find in Fi_les', find_in_files },
+ { 'Goto Nex_t File Found', find_next_in_files },
+ { 'Goto Previou_s File Found', find_previous_in_files },
+
+ SEPARATOR,
+
+ { '_Jump to', textadept.editing.goto_line }
+
+ }
+
+ -- The few times I use osx I want the same keys ... better explicitly handle
+ -- "not GUI" but I have to test the curses version first anyway.
+
+ newkeys[OSX and 'mf' or 'cf'] = find_in_file
+ newkeys[OSX and 'mg' or 'cg'] = ui.find.find_next
+ newkeys[OSX and 'mG' or 'cG'] = ui.find.find_prev
+ newkeys[OSX and 'mg' or 'cg'] = textadept.editing.goto_line
+
+ newkeys['f3'] = not OSX and ui.find.find_next or nil
+ newkeys['sf3'] = not OSX and ui.find.find_prev or nil
+
+ newkeys[OSX and 'cr' or 'car'] = ui.find.replace
+ newkeys[OSX and 'cR' or 'caR'] = ui.find.replace_all
+ newkeys[OSX and 'cmf' or 'caf'] = ui.find.find_incremental
+
+ newkeys[OSX and 'mF' or 'cF'] = find_in_files
+ newkeys[OSX and 'cmg' or 'cag'] = find_next_in_files
+ newkeys[OSX and 'cmG' or 'caG'] = find_previous_in_files
+
+end
+
+do
+
+ io.quick_open_max = 5000
+
+ local function isdir(path)
+ return path and path ~= "" and lfs.attributes(path,'mode') == 'directory'
+ end
+
+ local function resolveroot(path)
+ local path = runner.resultof("mtxrun --resolve-path TEXMFCONTEXT")
+ if path then
+ return string.match(path,"(.-)%s$")
+ end
+ end
+
+ local function opencurrentdirectory()
+ local path = buffer.filename
+ if path and path ~= "" then
+ path = string.match(path,"^(.+)[/\\]")
+ if isdir(path) then
+ io.quick_open(path)
+ end
+ end
+ end
+
+ local function openuserdirectory()
+ local path = resolveroot("TEXMFPROJECT")
+ if isdir(path) then
+ io.quick_open(path .. "/tex/context/user")
+ end
+ end
+
+ local function openbasedirectory()
+ local path = resolveroot("TEXMFCONTEXT")
+ if isdir(path) then
+ io.quick_open(path .. "/tex/context/base/mkiv")
+ end
+ end
+
+ local started = false
+
+ local function startservice()
+ if WIN32 then
+ os.execute([[cmd /c start /min "Context Documentation" mtxrun --script server --auto]])
+ else
+ os.execute([[mtxrun --script server --start > ~/context-wwwserver.log &]])
+ end
+ started = true
+ end
+
+ local function showcommand()
+ -- if not started then
+ -- startservice()
+ -- end
+ local start = buffer.selection_n_start[0]
+ local stop = buffer.selection_n_end[0]
+ if start == stop then
+ buffer:set_target_range(buffer:word_start_position(start,true),buffer:word_end_position(stop,true))
+ else
+ buffer:set_target_range(start,stop)
+ end
+ local word = buffer.target_text
+ os.execute(format([[mtxrun --gethelp --url="http://localhost:8088/mtx-server-ctx-help.lua?command=%s"]],word or ""))
+ end
+
+ newmenu.tools = {
+
+ title = '_Tools',
+
+ SEPARATOR,
+
+ { 'Check Source', runner.check },
+ { 'Process Source', runner.process },
+ { 'Preview Result', runner.preview },
+ { 'Show Log File', runner.install("logfile") },
+ { 'Quit', runner.quit },
+
+ SEPARATOR,
+
+ { 'Open Current Directory', opencurrentdirectory },
+ { 'Open User Directory', openuserdirectory },
+ { 'Open Base Directory', openbasedirectory },
+
+ SEPARATOR,
+
+ { 'Purge Files', runner.install("purge") },
+ { 'Clear Cache', runner.install("clear") },
+ { 'Generate File Database', runner.install("generate") },
+ { 'Generate Font Database', runner.install("fonts") },
+
+ SEPARATOR,
+
+ { 'Typeset Listing', runner.install("listing") },
+ { 'Process and Arrange', runner.install("arrange") },
+
+ SEPARATOR,
+
+ { 'Start Document Service', startservice },
+ { 'Goto Document Service', showcommand },
+
+ SEPARATOR,
+
+ { 'Show Unicodes', runner.install("unicodes") },
+
+ }
+
+ newkeys[OSX and 'mc' or 'cc'] = runner.check
+ newkeys[OSX and 'mr' or 'cr'] = runner.process
+ newkeys[OSX and 'mp' or 'cp'] = runner.preview
+ newkeys[OSX and 'mx' or 'cx'] = runner.quit
+
+ newkeys['f7'] = runner.process
+ newkeys['f12'] = runner.process
+
+end
+
+do
+
+ local function use_tabs()
+ buffer.use_tabs = not buffer.use_tabs
+ events.emit(events.UPDATE_UI) -- for updating statusbar
+ end
+
+ local function set_eol_mode_crlf()
+ set_eol_mode(buffer.EOL_CRLF)
+ end
+
+ local function set_eol_mode_lf()
+ set_eol_mode(buffer.EOL_LF)
+ end
+
+ local function show_eol()
+ buffer.view_eol = not buffer.view_eol
+ end
+
+ local function wrap_mode()
+ buffer.wrap_mode = buffer.wrap_mode == 0 and buffer.WRAP_WHITESPACE or 0
+ end
+
+ function show_white_space()
+ buffer.view_ws = buffer.view_ws == 0 and buffer.WS_VISIBLEALWAYS or 0
+ end
+
+ local function update_lexing()
+ buffer:colourise(0,-1)
+ end
+
+ function set_endoding_utf8()
+ set_encoding('UTF-8')
+ end
+
+ function set_encoding_ascii()
+ set_encoding('ASCII')
+ end
+
+ function set_endoding_utf16le()
+ set_encoding('UTF-16LE')
+ end
+
+ function set_endoding_utf16Be()
+ set_encoding('UTF-16BE')
+ end
+
+ function goto_prev_buffer()
+ view:goto_buffer(-1)
+ end
+
+ function goto_next_buffer()
+ view:goto_buffer(1)
+ end
+
+ newmenu.buffer = {
+
+ title = '_Buffer',
+
+ SEPARATOR,
+
+ { '_Previous Buffer', goto_prev_buffer },
+ { '_Next Buffer', goto_next_buffer },
+ { '_Switch to Buffer', ui.switch_buffer },
+
+ SEPARATOR,
+
+ { '_Toggle Use Tabs', use_tabs },
+ {
+ title = 'EOL Mode',
+
+ { '_CRLF', set_eol_mode_crlf },
+ { '_LF', set_eol_mode_lf },
+ },
+ {
+ title = 'Encoding',
+
+ { '_ASCII', set_encoding_ascii },
+ { '_UTF-8', set_encoding_utf8 },
+ { 'UTF-16-_BE', set_encoding_utf16le },
+ { 'UTF-16-_LE', set_encoding_utf16be },
+ },
+
+ SEPARATOR,
+
+ { 'Toggle View _EOL', show_eol },
+ { 'Toggle _Wrap Mode', wrap_mode },
+ { 'Toggle View _Spacing', show_whitespace },
+
+ SEPARATOR,
+
+ { 'Select _Lexer', textadept.file_types.select_lexer },
+ { 'Refresh _Syntax Highlighting', update_lexing }
+
+ }
+
+ newkeys['f5'] = update_lexing
+
+ newkeys[OSX and 'mp' or 'cs\t'] = goto_prev_buffer
+ newkeys[OSX and 'mn' or 'c\t'] = goto_next_buffer
+ newkeys[OSX and 'mb' or 'cb'] = ui.switch_buffer
+
+end
+
+do
+
+ local function toggle_current_fold()
+ buffer:toggle_fold(buffer:line_from_position(buffer.current_pos))
+ end
+
+ local function toggle_show_guides()
+ local off = buffer.indentation_guides == 0
+ buffer.indentation_guides = off and buffer.IV_LOOKBOTH or 0
+ end
+
+ local function toggle_virtual_space()
+ local off = buffer.virtual_space_options == 0
+ buffer.virtual_space_options = off and buffer.VS_USERACCESSIBLE or 0
+ end
+
+ local function reset_zoom()
+ buffer.zoom = 0
+ end
+
+ newmenu.view = {
+
+ title = '_View',
+
+ SEPARATOR,
+
+ { 'Toggle Current _Fold' , toggle_current_fold },
+
+ SEPARATOR,
+
+ { 'Toggle Show In_dent Guides', toggle_show_guides },
+ { 'Toggle _Virtual Space', toggle_virtual_space },
+
+ SEPARATOR,
+
+ { 'Zoom _In', buffer.zoom_in },
+ { 'Zoom _Out', buffer.zoom_out },
+ { '_Reset Zoom', reset_zoom },
+
+ }
+
+ newkeys[OSX and 'm=' or 'c='] = buffer.zoom_in
+ newkeys[OSX and 'm-' or 'c-'] = buffer.zoom_out
+ newkeys[OSX and 'm0' or 'c0'] = reset_zoom
+
+end
+
+do
+
+ -- It's a pity that we can't have a proper monospaced font here so we try to make the best of it:
+
+ local template = "\n\trelease info: %s\t\n\n\tcopyright: %s\t\n\n\tvariant: ConTeXt related editing\t\n\n\tadapted by: Hans Hagen\t"
+
+ function show_about()
+ ui.dialogs.msgbox {
+ title = "about",
+ informative_text = format(template,(gsub(_RELEASE,"%s+"," ")),(gsub(_COPYRIGHT,"%s+"," ")))
+ }
+ end
+
+ local function open_url(url) -- adapted from non public open_page
+ local cmd = (WIN32 and 'start ""') or (OSX and 'open') or 'xdg-open'
+ spawn(format('%s "%s"', cmd, url))
+ end
+
+
+ newmenu.help = {
+
+ title = '_Help',
+
+ SEPARATOR,
+
+ { 'ConTeXt garden wiki', function() open_url("http://www.contextgarden.net") end },
+
+ -- SEPARATOR,
+
+ { '_About', show_about }
+
+ }
+
+end
+
+do
+
+ local function replace(oldmenu,newmenu)
+ local n = #newmenu
+ local o = #oldmenu
+ for i=1,n do
+ oldmenu[i] = newmenu[i]
+ end
+ for i=o,n+1,-1 do
+ oldmenu[i] = nil
+ end
+ end
+
+ replace(textadept.menu.menubar [_L['_File']], newmenu.file)
+ replace(textadept.menu.menubar [_L['_Edit']], newmenu.edit)
+ replace(textadept.menu.menubar [_L['_Search']], newmenu.search)
+ replace(textadept.menu.menubar [_L['_Tools']], newmenu.tools)
+ replace(textadept.menu.menubar [_L['_Buffer']], newmenu.buffer)
+ replace(textadept.menu.menubar [_L['_View']], newmenu.view)
+ replace(textadept.menu.menubar [_L['_Help']], newmenu.help)
+
+ local char = string.char
+
+ local combi = {
+ "c", "m", "a",
+ "cm", "ca", "ma",
+ }
+
+ local pad = {
+ "esc", "del", "bs",
+ "up", "down", "left", "right",
+ "end", "home",
+ "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9", "f10", "f11", "f12",
+ }
+
+ local s = "s"
+
+ for i=1,#combi do
+ local c = combi[i]
+ for i=0x20,0x40 do
+ local ci = char(i)
+ keys[ c..ci] = nil
+ keys[s..c..ci] = nil
+ end
+ for i=0x41,0x5A do -- A .. Z
+ local ci = char(i)
+ keys[ c..ci] = nil
+ end
+ for i=0x5B,0x60 do
+ local ci = char(i)
+ keys[ c..ci] = nil
+ keys[s..c..ci] = nil
+ end
+ for i=0x61,0x7A do -- a .. z
+ local ci = char(i)
+ keys[ c..ci] = nil
+ end
+ for i=0x7B,0x7F do
+ local ci = char(i)
+ keys[ c..ci] = nil
+ keys[s..c..ci] = nil
+ end
+ for i=1,#pad do
+ local pi = pad[i]
+ keys[ c..pi] = nil
+ keys[s..c..pi] = nil
+ end
+ end
+
+ for k, v in next, newkeys do
+ keys[k] = v
+ end
+
+end
+
+-- We have a different way to set up files and runners. Less distributed and morein the way we
+-- do things in context.
+
+local dummyrunner = function() end
+local extensions = textadept.file_types.extensions
+local specifications = runner.specifications
+local setters = { }
+local defaults = {
+ check = dummyrunner,
+ process = dummyrunner,
+ preview = dummyrunner,
+}
+
+setmetatable(specifications, { __index = defaults })
+
+function context.install(specification)
+ local suffixes = specification.suffixes
+ if suffixes then
+ local lexer = specification.lexer
+ local setter = specification.setter
+ local encoding = specification.encoding
+ for i=1,#suffixes do
+ local suffix = suffixes[i]
+ if lexer and extensions then
+ extensions[suffix] = lexer
+ end
+ specifications[suffix] = specification
+ if lexer then
+ setters[lexer] = function()
+ if encoding == "7-BIT-ASCII" then
+ setsevenbitascii(buffer)
+ end
+ if setter then
+ setter(lexer)
+ end
+ end
+ end
+ end
+ end
+end
+
+-- Too much interference so I might drop all the old stuff eventually.
+
+local function synchronize(lexer)
+ if lexer then
+ local setter = lexer and setters[lexer]
+ if setter then
+ local action = context.synchronize
+ if action then
+ action()
+ end
+ -- userunner()
+ setter(lexer)
+ else
+ -- useoldrunner()
+ end
+ end
+end
+
+events.connect(events.FILE_OPENED,function(filename)
+ synchronize(buffer.get_lexer(buffer))
+end)
+
+events.connect(events.LEXER_LOADED,function(lexer)
+ synchronize(lexer)
+end)
+
+-- obsolete
+
+-- events.connect(events.BUFFER_AFTER_SWITCH,function()
+-- synchronize(buffer.get_lexer(buffer))
+-- end)
+
+-- events.connect(events.VIEW_AFTER_SWITCH,function()
+-- synchronize(buffer.get_lexer(buffer))
+-- end)
+
+-- events.connect(events.BUFFER_NEW,function()
+-- synchronize(buffer.get_lexer(buffer))
+-- end)
+
+-- events.connect(events.VIEW_NEW,function()
+-- synchronize(buffer.get_lexer(buffer))
+-- end)
+
+-- events.connect(events.RESET_AFTER,function()
+-- synchronize(buffer.get_lexer(buffer))
+-- end)
+
+-- local oldtools = { }
+-- local usingold = false
+-- local toolsmenu = textadept.menu.menubar [_L['_Tools']]
+--
+-- for i=1,#toolsmenu do
+-- oldtools[i] = toolsmenu[i]
+-- end
+--
+-- local function replace(tools)
+-- local n = #toolsmenu
+-- local m = #tools
+-- for i=1,m do
+-- toolsmenu[i] = tools[i]
+-- end
+-- for i=n,m+1,-1 do
+-- toolsmenu[i] = nil
+-- end
+-- end
+--
+-- local function useoldrunner()
+-- if not usingold then
+-- keys [OSX and 'mr' or 'cr' ] = oldrunner.run
+-- keys [OSX and 'mR' or (GUI and 'cR' or 'cmr')] = oldrunner.compile
+-- keys [OSX and 'mB' or (GUI and 'cB' or 'cmb')] = oldrunner.build
+-- keys [OSX and 'mX' or (GUI and 'cX' or 'cmx')] = oldrunner.stop
+-- --
+-- replace(oldtools)
+-- --
+-- usingold = true
+-- end
+-- end
+--
+-- local function userunner()
+-- if usingold then
+-- keys [OSX and 'mr' or 'cr' ] = runner.process
+-- keys [OSX and 'mR' or (GUI and 'cR' or 'cmr')] = runner.check
+-- keys [OSX and 'mB' or (GUI and 'cB' or 'cmb')] = runner.preview
+-- keys [OSX and 'mX' or (GUI and 'cX' or 'cmx')] = runner.quit
+-- --
+-- replace(newtools)
+-- --
+-- usingold = false
+-- end
+-- end
+--
+-- userunner()
diff --git a/context/data/textadept/context/modules/textadept-context-runner.lua b/context/data/textadept/context/modules/textadept-context-runner.lua
new file mode 100644
index 000000000..4d0053996
--- /dev/null
+++ b/context/data/textadept/context/modules/textadept-context-runner.lua
@@ -0,0 +1,275 @@
+local info = {
+ version = 1.002,
+ comment = "prototype textadept runner for context/metafun",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+-- This is an adapted version of the run code by mitchell.att.foicica.corunner. The main
+-- reason I started patching is that long lines got broken in the middle so we needed
+-- to have a more clever line splitter that saves half of a line for later. Then I
+-- decided to come up with a few more variants so in the end ... it's just too tempting
+-- make something that exactly suits out needs. In fact, maybe I'll do that some day:
+-- take core textadept and make a dedicated variant for the kind of processing that we
+-- do and make it suitable for document authors (the manual says that is doable). In that
+-- case I can also use a lot of already written helpers.
+--
+-- The error scanner is not needed. If I need one, it will be using a lexers applied
+-- afterwards because working on half lines is not going to work out well anyway.
+--
+-- Here I removed iconv calls as in context we use utf (less hassle with fonts too). One
+-- can always use the original approach.
+--
+-- The events seems to have hard coded names, Also, the name of the message buffer cannot
+-- be changes because otherwise we get a message when the session is restored. I don't
+-- care about locales.
+--
+-- Somehow the process hangs when I refresh the pdf viewer, this doesn't happen in scite so
+-- the underlying code is for the moment less reliant.
+
+local match, gsub, find, format = string.match, string.gsub, string.find, string.format
+local assert, type = assert, type
+
+local original = textadept.run
+local runner = { }
+
+runner.MARK_WARNING = original.MARK_WARNING
+runner.MARK_ERROR = original.MARK_ERROR
+
+local specifications = { }
+runner.specifications = specifications
+
+----- RUNNER_EVENT = "[Context Runner]"
+local OUTPUT_BUFFER = '[Message Buffer]' -- CONSOLE
+
+----- events.RUNNER_EVENT = RUNNER_EVENT
+
+local currentprocess = nil
+local xbuffer = nil
+
+local function find_buffer(buffer_type)
+ for i=1,#_BUFFERS do
+ local buffer = _BUFFERS[i]
+ if buffer._type == buffer_type then
+ return buffer
+ end
+ end
+end
+
+local function print_output(str)
+ local print_buffer = find_buffer(OUTPUT_BUFFER)
+ -- some simplified magic copied from the adeptext runner
+ if not print_buffer then
+ if not ui.tabs then
+ view:split()
+ end
+ print_buffer = buffer.new()
+ print_buffer._type = OUTPUT_BUFFER
+ events.emit(events.FILE_OPENED)
+ else
+ for i=1,#_VIEWS do
+ local view = _VIEWS[i]
+ if view.buffer._type == OUTPUT_BUFFER then
+ ui.goto_view(view)
+ break
+ end
+ end
+ if view.buffer._type ~= OUTPUT_BUFFER then
+ view:goto_buffer(print_buffer)
+ end
+ end
+ print_buffer:append_text(str)
+ print_buffer:goto_pos(buffer.length)
+ print_buffer:set_save_point()
+ --
+ return true -- quits
+end
+
+local function clear_output()
+ xbuffer = buffer
+ local print_buffer = find_buffer(OUTPUT_BUFFER)
+ if print_buffer then
+ print_buffer:clear_all()
+ end
+end
+
+local function is_output(buffer)
+ return buffer._type == OUTPUT_BUFFER
+end
+
+-- Instead of events we will have out own interceptors so that we don't have
+-- interference. The main problem is that we don't hav emuch control over the
+-- order. If we have much actions I can always come up with something.
+
+local function process(buffer,filename,action)
+ if not filename then
+ filename = buffer.filename
+ end
+ if filename == buffer.filename then
+ buffer:annotation_clear_all() -- needed ?
+ io.save_file()
+ end
+ if filename == "" then
+ return
+ end
+ local suffix = match(filename,'[^/\\.]+$')
+ local specification = specifications[suffix]
+ if not specification then
+ return
+ end
+ local action = specification[action]
+ local quitter = nil
+ if type(action) == "table" then
+ action = action.command
+ quitter = action.quitter
+ end
+ if type(action) ~= "string" then
+ return
+ end
+ clear_output()
+ local pathpart = ''
+ local basename = filename
+ if find(filename,'[/\\]') then
+ pathpart, basename = match(filename,'^(.+[/\\])([^/\\]+)$')
+ end
+ -- beter strip one from the end
+ local nameonly = match(basename,'^(.+)%.')
+ -- more in sync which what we normally do (i'd rather use the ctx template mechanism)
+ local command = gsub(action,'%%(.-)%%', {
+ filename = filename,
+ pathname = dirname,
+ dirname = dirname,
+ pathpart = dirname,
+ basename = basename,
+ nameonly = nameonly,
+ suffix = suffix,
+ selection = function() return match(buffer.get_sel_text(),"%s*([A-Za-z]+)") end,
+ })
+ -- for fun i'll add a ansi escape sequence lexer some day
+ local function emit_output(output)
+ print_output(output) -- events.emit(RUNNER_EVENT,...)
+ -- afaik there is no way to check if we're waiting for input (no input callback)
+ if quitter then
+ local quit, message = quitter(interceptor)
+ if quit then
+ if message then
+ print_output(format("\n\n> quit: %s\n",message))
+ end
+ runner.quit()
+ end
+ end
+ end
+ local function exit_output(status)
+ print_output(format("\n\n> exit: %s, press esc to return to source\n",status)) -- events.emit(RUNNER_EVENT,...)
+ end
+ print_output(format("> command: %s\n",command)) -- events.emit(RUNNER_EVENT,...)
+ currentprocess = assert(spawn(command, pathpart, emit_output, emit_output, exit_output))
+end
+
+function runner.install(name)
+ return function(filename)
+ process(buffer,filename,name)
+ end
+end
+
+runner.check = runner.install("check")
+runner.process = runner.install("process")
+runner.preview = runner.install("preview")
+
+function runner.resultof(command) -- from l-os.lua
+ local handle = io.popen(command,"r")
+ if handle then
+ local result = handle:read("*all") or ""
+ handle:close()
+ return result
+ else
+ return ""
+ end
+end
+
+function runner.quit()
+ if currentprocess then
+ assert(currentprocess:kill())
+ end
+end
+
+local function char_added(code)
+ if code == 10 and currentprocess and currentprocess:status() == 'running' and buffer._type == OUTPUT_BUFFER then
+ local line_num = buffer:line_from_position(buffer.current_pos) - 1
+ currentprocess:write((buffer:get_line(line_num)))
+ end
+ return true -- quits
+end
+
+function runner.goto_error(line, next)
+ -- see original code for how to do it
+end
+
+local function key_press(code)
+ if xbuffer and keys.KEYSYMS[code] == 'esc' then
+ view:goto_buffer(xbuffer)
+ return true
+ end
+end
+
+local function double_click()
+ if xbuffer and is_output(buffer) then
+ view:goto_buffer(xbuffer)
+ return true
+ end
+end
+
+-- Tricky: we can't reset an event (because we need to know the function which is
+-- local. So, a first solution injected a false into the table which will trigger
+-- a break and then I found out that returning true has the same effect. Then I
+-- found out that we can have our own events and next decided not to use them at
+-- all.
+
+-- events.connect(events.RUNNER_EVENT, print_output, 1)
+
+events.connect(events.CHAR_ADDED, char_added, 1)
+events.connect(events.KEYPRESS, key_press, 1)
+events.connect(events.DOUBLE_CLICK, double_click, 1)
+
+return runner
+
+-- The ui.print function is a bit heavy as each flush will parse the whole list of buffers.
+-- Also it does some tab magic that we don't need or want. There is the original ui.print for
+-- that. FWIW, speed is not an issue. Some optimizations:
+
+-- function _print(buffer_type,one,two,...)
+-- ...
+-- print_buffer:append_text(one)
+-- if two then
+-- print_buffer:append_text(two)
+-- for i=1, select('#', ...) do
+-- print_buffer:append_text((select(i,...)))
+-- end
+-- end
+-- print_buffer:append_text('\n')
+-- ...
+-- end
+--
+-- And a better splitter:
+-- ...
+-- local rest
+-- local function emit_output(output)
+-- for line, lineend in output:gmatch('([^\r\n]+)([\r\n]?)') do
+-- if rest then
+-- line = rest .. line
+-- rest = nil
+-- end
+-- if lineend and lineend ~= "" then
+-- events.emit(event, line, ext_or_lexer)
+-- else
+-- rest = line
+-- end
+-- end
+-- end
+-- ...
+-- if rest then
+-- events.emit(event,rest,ext_or_lexer)
+-- end
+-- events.emit(event, '> exit status: '..status)
+-- ...
diff --git a/context/data/textadept/context/modules/textadept-context-settings.lua b/context/data/textadept/context/modules/textadept-context-settings.lua
new file mode 100644
index 000000000..53b5c896f
--- /dev/null
+++ b/context/data/textadept/context/modules/textadept-context-settings.lua
@@ -0,0 +1,131 @@
+local info = {
+ version = 1.002,
+ comment = "presets for textadept for context/metafun",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+local lexer = require("scite-context-lexer")
+local context = lexer.context
+
+if context then
+
+ function context.synchronize()
+ local buffer = buffer
+ local property = lexer.property
+ local property_int = lexer.property_int
+
+ buffer:set_fold_margin_colour (true, property_int["color.light"])
+ buffer:set_fold_margin_hi_colour (true, property_int["color.white"])
+ buffer:set_sel_fore (false, property_int["color.dark"])
+ buffer:set_sel_back (true, property_int["color.selection"])
+
+ local MARK_BOOKMARK = textadept.bookmarks.MARK_BOOKMARK
+ local MARK_WARNING = textadept.run.MARK_WARNING
+ local MARK_ERROR = textadept.run.MARK_ERROR
+
+ -- buffer.marker_fore[MARK_BOOKMARK] = property_int["color.white"]
+ buffer.marker_back[MARK_BOOKMARK] = property_int["color.blue"]
+ -- buffer.marker_fore[MARK_WARNING] = property_int["color.white"]
+ buffer.marker_back[MARK_WARNING] = property_int["color.orange"]
+ -- buffer.marker_fore[MARK_ERROR] = property_int["color.white"]
+ buffer.marker_back[MARK_ERROR] = property_int["color.red"]
+ for i = 25, 31 do
+ buffer.marker_fore[i] = property_int["color.white"]
+ buffer.marker_back[i] = property_int["color.grey"]
+ buffer.marker_back_selected[i] = property_int["color.dark"]
+ end
+
+ local INDIC_BRACEMATCH = textadept.editing .INDIC_BRACEMATCH
+ local INDIC_HIGHLIGHT = textadept.editing .INDIC_HIGHLIGHT
+ local INDIC_PLACEHOLDER = textadept.snippets.INDIC_PLACEHOLDER
+ local INDIC_FIND = ui.find.INDIC_FIND
+
+ buffer.indic_fore [INDIC_FIND] = property_int["color.gray"]
+ buffer.indic_alpha[INDIC_FIND] = 255
+ buffer.indic_fore [INDIC_BRACEMATCH] = property_int["color.orange"]
+ buffer.indic_style[INDIC_BRACEMATCH] = buffer.INDIC_BOX -- hard to see (I need to check scite)
+ buffer.indic_fore [INDIC_HIGHLIGHT] = property_int["color.gray"]
+ buffer.indic_alpha[INDIC_HIGHLIGHT] = 255
+ buffer.indic_fore [INDIC_PLACEHOLDER] = property_int["color.gray"]
+
+ -- buffer:brace_highlight_indicator(false, INDIC_BRACEMATCH)
+
+ -- buffer.call_tip_fore_hlt = property_int["color.blue"]
+ buffer.edge_colour = property_int["color.grey"]
+
+ buffer.tab_width = 4
+ buffer.use_tabs = false
+ buffer.indent = 4
+ buffer.tab_indents = true
+ buffer.back_space_un_indents = true
+ buffer.indentation_guides = not CURSES and buffer.IV_LOOKBOTH or buffer.IV_NONE
+
+ buffer.sel_eol_filled = true
+ -- buffer.sel_alpha =
+ buffer.multiple_selection = true
+ buffer.additional_selection_typing = true
+ -- buffer.multi_paste = buffer.MULTIPASTE_EACH
+ -- buffer.virtual_space_options = buffer.VS_RECTANGULARSELECTION + buffer.VS_USERACCESSIBLE
+ buffer.rectangular_selection_modifier = buffer.MOD_ALT
+ buffer.mouse_selection_rectangular_switch = true
+
+ -- buffer.additional_sel_alpha =
+ -- buffer.additional_sel_fore =
+ -- buffer.additional_sel_back =
+
+ -- how to turn of the annoying background behind the current line ...
+
+ -- buffer.additional_caret_fore =
+ -- buffer.additional_carets_blink = false
+ -- buffer.additional_carets_visible = false
+ buffer.caret_line_visible = false -- not CURSES and buffer ~= ui.command_entry
+ buffer.caret_line_visible_always = false
+ -- buffer.caret_period = 0
+ -- buffer.caret_style = buffer.CARETSTYLE_BLOCK
+ buffer.caret_width = 10
+ buffer.caret_sticky = buffer.CARETSTICKY_ON
+ buffer.caret_fore = property_int["color.black"]
+ buffer.caret_line_back = property_int["color.light"]
+ -- buffer.caret_line_back_alpha =
+
+ buffer.view_ws = buffer.WS_INVISIBLE
+ buffer.view_eol = false
+
+ buffer.annotation_visible = buffer.ANNOTATION_BOXED
+
+ -- local NUMBER_MARGIN = 0
+ -- local MARKER_MARGIN = 1
+ -- local FOLD_MARGIN = 2 -- there are more
+ --
+ -- buffer.margin_type_n [NUMBER_MARGIN] = buffer.MARGIN_NUMBER
+ -- buffer.margin_width_n[NUMBER_MARGIN] = (CURSES and 0 or 4)
+ -- + 4 * buffer:text_width(buffer.STYLE_LINENUMBER,'9') -- magic
+ -- buffer.margin_width_n[MARKER_MARGIN] = CURSES and 1 or 4
+ -- buffer.margin_width_n[FOLD_MARGIN] = CURSES and 1 or 12
+ --
+ -- buffer.margin_mask_n[FOLD_MARGIN] = buffer.MASK_FOLDERS
+
+ buffer.wrap_mode = buffer.WRAP_NONE
+
+ buffer.margin_back_n[0] = property_int["color.linenumber"] -- doesn't work
+
+ buffer.property = {
+ -- ["style.linenumber"] = property["style.linenumber"], -- somehow it fails
+ }
+
+ buffer.property_int = {
+ -- nothing
+ }
+
+ -- keys [OSX and 'mr' or 'cr' ] = textadept.run.run
+ -- keys [OSX and 'mR' or (GUI and 'cR' or 'cmr')] = textadept.run.compile
+ -- keys [OSX and 'mB' or (GUI and 'cB' or 'cmb')] = textadept.run.build
+ -- keys [OSX and 'mX' or (GUI and 'cX' or 'cmx')] = textadept.run.stop
+
+ end
+
+ context.synchronize()
+
+end
diff --git a/context/data/textadept/context/modules/textadept-context-types.lua b/context/data/textadept/context/modules/textadept-context-types.lua
new file mode 100644
index 000000000..5c4dd3a21
--- /dev/null
+++ b/context/data/textadept/context/modules/textadept-context-types.lua
@@ -0,0 +1,176 @@
+local info = {
+ version = 1.002,
+ comment = "filetypes for textadept for context/metafun",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+-- todo: add the same ones as we have in scite
+
+local lexer = require("scite-context-lexer")
+local context = lexer.context
+local install = context.install
+
+-- autopdf takes long to stop (weird, not in scite)
+
+-- WIN32 and 'start "" "%e.pdf"' or OSX and 'open "%e.pdf"' or 'xdg-open "%e.pdf"',
+
+local quitter = function(output)
+ return find(output,"%? +$") and true or false, "see message above"
+end
+
+local listing = {
+ command = [[mtxrun --autogenerate --script context --extra=listing --scite --compact "%basename%"]], -- --autopdf
+ quitter = quitter,
+}
+
+install {
+ lexer = "scite-context-lexer-tex",
+ suffixes = {
+ "tex",
+ "mkii",
+ "mkiv", "mkvi", "mkix", "mkxi"
+ },
+ check = {
+ command = [[mtxrun --autogenerate --script check "%basename%"]],
+ quitter = quitter,
+ },
+ process = {
+ command = [[mtxrun --autogenerate --script context "%basename%"]], -- --autopdf,
+ quitter = quitter,
+ },
+ listing = listing,
+ generate = [[mtxrun --generate]],
+ fonts = [[mtxrun --script fonts --reload --force]],
+ clear = [[mtxrun --script cache --erase]],
+ purge = [[mtxrun --script context --purgeall]],
+ preview = [[]],
+ logfile = [[]],
+ arrange = [[]],
+ unicodes = [[]],
+ setter = function(lexer)
+ -- whatever
+ end,
+}
+
+
+
+
+install {
+ lexer = "scite-context-lexer-xml",
+ suffixes = {
+ "xml", "xsl", "xsd", "fo", "dtd", "xslt",
+ "lmx", "exa", "ctx", "export",
+ "rlb", "rlg", "rlv", "rng",
+ "xfdf",
+ "htm", "html", "xhtml",
+ "svg",
+ "xul"
+ },
+ check = [[tidy -quiet -utf8 -xml -errors "%basename%"]],
+ process = {
+ command = [[mtxrun --autogenerate --script context "%basename%"]], -- --autopdf]],
+ quitter = quitter,
+ },
+ listing = listing,
+ setter = function(lexer)
+ -- whatever
+ end,
+}
+
+install {
+ lexer = "scite-context-lexer-mps",
+ suffixes = {
+ "mp", "mpx"
+ },
+ listing = listing,
+ setter = function(lexer)
+ -- whatever
+ end,
+}
+
+install {
+ lexer = "scite-context-lexer-lua",
+ suffixes = {
+ "lua", "luc",
+ "cld", "tuc", "luj", "lum", "tma", "lfg", "luv", "lui"
+ },
+ check = [[mtxrun --autogenerate --script "%basename%"]],
+ process = [[mtxrun --autogenerate --script "%basename%"]],
+ preview = [[mtxrun --autogenerate --script "%basename%"]],
+ listing = listing,
+ setter = function(lexer)
+ -- whatever
+ end,
+}
+
+install {
+ lexer = "scite-context-lexer-txt",
+ suffixes = {
+ "txt"
+ },
+ listing = listing,
+ setter = function(lexer)
+ -- whatever
+ end,
+}
+
+install {
+ lexer = "scite-context-lexer-pdf",
+ suffixes = {
+ "pdf"
+ },
+ encoding = "7-BIT-ASCII",
+ setter = function(lexer)
+ -- whatever
+ end,
+}
+
+install {
+ lexer = "scite-context-lexer-web",
+ suffixes = {
+ "w",
+ "ww"
+ },
+ listing = listing,
+ setter = function(lexer)
+ -- whatever
+ end,
+}
+
+install {
+ lexer = "scite-context-lexer-cpp",
+ suffixes = {
+ "h", "c",
+ "hh", "cc",
+ "hpp", "cpp",
+ "hxx", "cxx"
+ },
+ listing = listing,
+ setter = function(lexer)
+ -- whatever
+ end,
+}
+
+install {
+ "scite-context-lexer-bibtex",
+ suffixes = {
+ "bib"
+ },
+ listing = listing,
+ setter = function(lexer)
+ -- whatever
+ end,
+}
+
+install {
+ "scite-context-lexer-sql",
+ suffixes = {
+ "sql"
+ },
+ listing = listing,
+ setter = function(lexer)
+ -- whatever
+ end,
+}
diff --git a/context/data/textadept/context/textadept-context.cmd b/context/data/textadept/context/textadept-context.cmd
new file mode 100644
index 000000000..716b4896c
--- /dev/null
+++ b/context/data/textadept/context/textadept-context.cmd
@@ -0,0 +1,2 @@
+start textadept -u %~dp0 %*
+
diff --git a/context/data/textadept/context/textadept-context.sh b/context/data/textadept/context/textadept-context.sh
new file mode 100644
index 000000000..5f613ccf8
--- /dev/null
+++ b/context/data/textadept/context/textadept-context.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+# copied from setuptex
+
+if [ z"$BASH_SOURCE" != z ]; then
+ textadept -u $(cd -P -- "$(dirname -- "$BASH_SOURCE")" && pwd -P) "$@" &
+elif [ z"$KSH_VERSION" != z ]; then
+ textadept -u $(cd -P -- "$(dirname -- "${.sh.file}")" && pwd -P) "$@" &
+else
+ textadept -u $(cd -P -- "$(dirname -- "$0")" && pwd -P) "$@" &
+fi
+
diff --git a/context/data/textadept/context/themes/scite-context-theme.lua b/context/data/textadept/context/themes/scite-context-theme.lua
new file mode 100644
index 000000000..f746c3d09
--- /dev/null
+++ b/context/data/textadept/context/themes/scite-context-theme.lua
@@ -0,0 +1,159 @@
+local info = {
+ version = 1.002,
+ comment = "theme for scintilla lpeg lexer for context/metafun",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+-- context_path = string.split(os.resultof("mtxrun --find-file context.mkiv"))[1] or ""
+
+-- What used to be proper Lua definitions are in 3.42 SciTE properties although
+-- integration is still somewhat half. Also, the indexed style specification is
+-- now a hash (which indeed makes more sense). However, the question is: am I
+-- going to rewrite the style bit? It anyway makes more sense to keep this file
+-- somewhat neutral as we no longer need to be compatible. However, we cannot be
+-- sure of helpers being present yet when this file is loaded, so we are somewhat
+-- crippled. On the other hand, I don't see other schemes being used with the
+-- context lexers.
+
+-- The next kludge is no longer needed which is good!
+--
+-- if GTK then -- WIN32 GTK OSX CURSES
+-- font_name = '!' .. font_name
+-- end
+
+-- I need to play with these, some work ok:
+--
+-- eolfilled noteolfilled
+-- characterset:u|l
+-- visible notvisible
+-- changeable notchangeable (this way we can protect styles, e.g. preamble?)
+-- hotspot nothotspot
+
+if not lexers or not lexers.initialized then
+
+ local font_name = 'Dejavu Sans Mono'
+ local font_size = '14'
+
+ local colors = {
+ red = { 0x7F, 0x00, 0x00 },
+ green = { 0x00, 0x7F, 0x00 },
+ blue = { 0x00, 0x00, 0x7F },
+ cyan = { 0x00, 0x7F, 0x7F },
+ magenta = { 0x7F, 0x00, 0x7F },
+ yellow = { 0x7F, 0x7F, 0x00 },
+ orange = { 0xB0, 0x7F, 0x00 },
+ --
+ white = { 0xFF },
+ light = { 0xCF },
+ grey = { 0x80 },
+ dark = { 0x4F },
+ black = { 0x00 },
+ --
+ selection = { 0xF7 },
+ logpanel = { 0xE7 },
+ textpanel = { 0xCF },
+ linepanel = { 0xA7 },
+ tippanel = { 0x44 },
+ --
+ right = { 0x00, 0x00, 0xFF },
+ wrong = { 0xFF, 0x00, 0x00 },
+ }
+
+ local styles = {
+
+ ["whitespace"] = { },
+ -- ["default"] = { font = font_name, size = font_size, fore = colors.black, back = colors.textpanel },
+ -- ["default"] = { font = font_name, size = font_size, fore = colors.black },
+ ["default"] = { font = font_name, size = font_size, fore = colors.black,
+ back = textadept and colors.textpanel or nil },
+ ["number"] = { fore = colors.cyan },
+ ["comment"] = { fore = colors.yellow },
+ ["keyword"] = { fore = colors.blue, bold = true },
+ ["string"] = { fore = colors.magenta },
+ -- ["preproc"] = { fore = colors.yellow, bold = true },
+ ["error"] = { fore = colors.red },
+ ["label"] = { fore = colors.red, bold = true },
+
+ ["nothing"] = { },
+ ["class"] = { fore = colors.black, bold = true },
+ ["function"] = { fore = colors.black, bold = true },
+ ["constant"] = { fore = colors.cyan, bold = true },
+ ["operator"] = { fore = colors.blue },
+ ["regex"] = { fore = colors.magenta },
+ ["preprocessor"] = { fore = colors.yellow, bold = true },
+ ["tag"] = { fore = colors.cyan },
+ ["type"] = { fore = colors.blue },
+ ["variable"] = { fore = colors.black },
+ ["identifier"] = { },
+
+ ["linenumber"] = { back = colors.linepanel },
+ ["bracelight"] = { fore = colors.orange, bold = true },
+ ["bracebad"] = { fore = colors.orange, bold = true },
+ ["controlchar"] = { },
+ ["indentguide"] = { fore = colors.linepanel, back = colors.white },
+ ["calltip"] = { fore = colors.white, back = colors.tippanel },
+
+ ["invisible"] = { back = colors.orange },
+ ["quote"] = { fore = colors.blue, bold = true },
+ ["special"] = { fore = colors.blue },
+ ["extra"] = { fore = colors.yellow },
+ ["embedded"] = { fore = colors.black, bold = true },
+ ["char"] = { fore = colors.magenta },
+ ["reserved"] = { fore = colors.magenta, bold = true },
+ ["definition"] = { fore = colors.black, bold = true },
+ ["okay"] = { fore = colors.dark },
+ ["warning"] = { fore = colors.orange },
+ ["standout"] = { fore = colors.orange, bold = true },
+ ["command"] = { fore = colors.green, bold = true },
+ ["internal"] = { fore = colors.orange, bold = true },
+ ["preamble"] = { fore = colors.yellow },
+ ["grouping"] = { fore = colors.red },
+ ["primitive"] = { fore = colors.blue, bold = true },
+ ["plain"] = { fore = colors.dark, bold = true },
+ ["user"] = { fore = colors.green },
+ ["data"] = { fore = colors.cyan, bold = true },
+
+ -- equal to default:
+
+ ["text"] = { font = font_name, size = font_size, fore = colors.black, back = colors.textpanel },
+ ["text"] = { font = font_name, size = font_size, fore = colors.black },
+
+ }
+
+ local properties = {
+ ["fold.by.parsing"] = 1,
+ ["fold.by.indentation"] = 0,
+ ["fold.by.line"] = 0,
+ ["fold.line.comments"] = 0,
+ --
+ ["lexer.context.log"] = 1, -- log errors and warnings
+ ["lexer.context.trace"] = 0, -- show loading, initializations etc
+ ["lexer.context.detail"] = 0, -- show more detail when tracing
+ ["lexer.context.show"] = 0, -- show result of lexing
+ ["lexer.context.collapse"] = 0, -- make lexing results somewhat more efficient
+ ["lexer.context.inspect"] = 0, -- show some info about lexer (styles and so)
+ --
+ -- ["lexer.context.log"] = 1, -- log errors and warnings
+ -- ["lexer.context.trace"] = 1, -- show loading, initializations etc
+ }
+
+ ----- lexers = require("lexer")
+ local lexer = require("scite-context-lexer")
+ local context = lexer.context
+
+ if context then
+ context.inform("loading context (style) properties")
+ if context.registerstyles then
+ context.registerstyles(styles)
+ end
+ if context.registercolors then
+ context.registercolors(colors)
+ end
+ if context.registerproperties then
+ context.registerproperties(properties)
+ end
+ end
+
+end
diff --git a/doc/context/documents/general/fonts/fonts-mkiv.pdf b/doc/context/documents/general/fonts/fonts-mkiv.pdf
new file mode 100644
index 000000000..d388df3e9
--- /dev/null
+++ b/doc/context/documents/general/fonts/fonts-mkiv.pdf
Binary files differ
diff --git a/doc/context/documents/general/magazines/mag-0000-mkiv.pdf b/doc/context/documents/general/magazines/mag-0000-mkiv.pdf
new file mode 100644
index 000000000..c904eb0f5
--- /dev/null
+++ b/doc/context/documents/general/magazines/mag-0000-mkiv.pdf
Binary files differ
diff --git a/doc/context/documents/general/magazines/mag-0002-mkiv.pdf b/doc/context/documents/general/magazines/mag-0002-mkiv.pdf
new file mode 100644
index 000000000..5b88e63bb
--- /dev/null
+++ b/doc/context/documents/general/magazines/mag-0002-mkiv.pdf
Binary files differ
diff --git a/doc/context/documents/general/magazines/mag-0006-mkiv.pdf b/doc/context/documents/general/magazines/mag-0006-mkiv.pdf
new file mode 100644
index 000000000..a556dc75b
--- /dev/null
+++ b/doc/context/documents/general/magazines/mag-0006-mkiv.pdf
Binary files differ
diff --git a/doc/context/documents/general/magazines/mag-0007-mkiv.pdf b/doc/context/documents/general/magazines/mag-0007-mkiv.pdf
new file mode 100644
index 000000000..987ddbf7b
--- /dev/null
+++ b/doc/context/documents/general/magazines/mag-0007-mkiv.pdf
Binary files differ
diff --git a/doc/context/documents/general/magazines/mag-0010-mkiv.pdf b/doc/context/documents/general/magazines/mag-0010-mkiv.pdf
new file mode 100644
index 000000000..41e82974f
--- /dev/null
+++ b/doc/context/documents/general/magazines/mag-0010-mkiv.pdf
Binary files differ
diff --git a/doc/context/documents/general/magazines/mag-1101-mkiv.pdf b/doc/context/documents/general/magazines/mag-1101-mkiv.pdf
new file mode 100644
index 000000000..6b7c19fc6
--- /dev/null
+++ b/doc/context/documents/general/magazines/mag-1101-mkiv.pdf
Binary files differ
diff --git a/doc/context/documents/general/magazines/mag-1102-mkiv.pdf b/doc/context/documents/general/magazines/mag-1102-mkiv.pdf
new file mode 100644
index 000000000..47c00b05b
--- /dev/null
+++ b/doc/context/documents/general/magazines/mag-1102-mkiv.pdf
Binary files differ
diff --git a/doc/context/documents/general/magazines/mag-1103-mkiv.pdf b/doc/context/documents/general/magazines/mag-1103-mkiv.pdf
new file mode 100644
index 000000000..6cfe20113
--- /dev/null
+++ b/doc/context/documents/general/magazines/mag-1103-mkiv.pdf
Binary files differ
diff --git a/doc/context/documents/general/manuals/about.pdf b/doc/context/documents/general/manuals/about.pdf
new file mode 100644
index 000000000..75714f628
--- /dev/null
+++ b/doc/context/documents/general/manuals/about.pdf
Binary files differ
diff --git a/doc/context/documents/general/manuals/charts-mkiv.pdf b/doc/context/documents/general/manuals/charts-mkiv.pdf
new file mode 100644
index 000000000..1a0289aa5
--- /dev/null
+++ b/doc/context/documents/general/manuals/charts-mkiv.pdf
Binary files differ
diff --git a/doc/context/documents/general/manuals/colors-mkiv.pdf b/doc/context/documents/general/manuals/colors-mkiv.pdf
new file mode 100644
index 000000000..f211288d9
--- /dev/null
+++ b/doc/context/documents/general/manuals/colors-mkiv.pdf
Binary files differ
diff --git a/doc/context/documents/general/manuals/columnsets.pdf b/doc/context/documents/general/manuals/columnsets.pdf
new file mode 100644
index 000000000..32a7f8b06
--- /dev/null
+++ b/doc/context/documents/general/manuals/columnsets.pdf
Binary files differ
diff --git a/doc/context/documents/general/manuals/details.pdf b/doc/context/documents/general/manuals/details.pdf
new file mode 100644
index 000000000..b99ae19a9
--- /dev/null
+++ b/doc/context/documents/general/manuals/details.pdf
Binary files differ
diff --git a/doc/context/documents/general/manuals/hybrid.pdf b/doc/context/documents/general/manuals/hybrid.pdf
new file mode 100644
index 000000000..4d5c2df84
--- /dev/null
+++ b/doc/context/documents/general/manuals/hybrid.pdf
Binary files differ
diff --git a/doc/context/documents/general/manuals/languages-mkiv.pdf b/doc/context/documents/general/manuals/languages-mkiv.pdf
index 480b30d1f..026acfca5 100644
--- a/doc/context/documents/general/manuals/languages-mkiv.pdf
+++ b/doc/context/documents/general/manuals/languages-mkiv.pdf
Binary files differ
diff --git a/doc/context/documents/general/manuals/luatex.pdf b/doc/context/documents/general/manuals/luatex.pdf
index 92424d805..db570e634 100644
--- a/doc/context/documents/general/manuals/luatex.pdf
+++ b/doc/context/documents/general/manuals/luatex.pdf
Binary files differ
diff --git a/doc/context/documents/general/manuals/math-mkiv.pdf b/doc/context/documents/general/manuals/math-mkiv.pdf
new file mode 100644
index 000000000..1dd24f225
--- /dev/null
+++ b/doc/context/documents/general/manuals/math-mkiv.pdf
Binary files differ
diff --git a/doc/context/documents/general/manuals/mk.pdf b/doc/context/documents/general/manuals/mk.pdf
new file mode 100644
index 000000000..f81cf3bc4
--- /dev/null
+++ b/doc/context/documents/general/manuals/mk.pdf
Binary files differ
diff --git a/doc/context/documents/general/manuals/mmlexamp.pdf b/doc/context/documents/general/manuals/mmlexamp.pdf
new file mode 100644
index 000000000..d86238a5a
--- /dev/null
+++ b/doc/context/documents/general/manuals/mmlexamp.pdf
Binary files differ
diff --git a/doc/context/documents/general/manuals/mmlprime.pdf b/doc/context/documents/general/manuals/mmlprime.pdf
new file mode 100644
index 000000000..0d48394c0
--- /dev/null
+++ b/doc/context/documents/general/manuals/mmlprime.pdf
Binary files differ
diff --git a/doc/context/documents/general/manuals/mreadme.pdf b/doc/context/documents/general/manuals/mreadme.pdf
index 031be0fda..36d31f277 100644
--- a/doc/context/documents/general/manuals/mreadme.pdf
+++ b/doc/context/documents/general/manuals/mreadme.pdf
Binary files differ
diff --git a/doc/context/documents/general/manuals/rules-mkiv.pdf b/doc/context/documents/general/manuals/rules-mkiv.pdf
new file mode 100644
index 000000000..97ac2fe4d
--- /dev/null
+++ b/doc/context/documents/general/manuals/rules-mkiv.pdf
Binary files differ
diff --git a/doc/context/documents/general/manuals/spacing-mkiv.pdf b/doc/context/documents/general/manuals/spacing-mkiv.pdf
index c717e6abf..1f0057f1d 100644
--- a/doc/context/documents/general/manuals/spacing-mkiv.pdf
+++ b/doc/context/documents/general/manuals/spacing-mkiv.pdf
Binary files differ
diff --git a/doc/context/documents/general/manuals/spreadsheets-mkiv.pdf b/doc/context/documents/general/manuals/spreadsheets-mkiv.pdf
new file mode 100644
index 000000000..d8709f169
--- /dev/null
+++ b/doc/context/documents/general/manuals/spreadsheets-mkiv.pdf
Binary files differ
diff --git a/doc/context/documents/general/manuals/sql-mkiv.pdf b/doc/context/documents/general/manuals/sql-mkiv.pdf
index fa9a5ad61..ff9824bad 100644
--- a/doc/context/documents/general/manuals/sql-mkiv.pdf
+++ b/doc/context/documents/general/manuals/sql-mkiv.pdf
Binary files differ
diff --git a/doc/context/documents/general/manuals/steps-mkiv.pdf b/doc/context/documents/general/manuals/steps-mkiv.pdf
new file mode 100644
index 000000000..f263d9e43
--- /dev/null
+++ b/doc/context/documents/general/manuals/steps-mkiv.pdf
Binary files differ
diff --git a/doc/context/documents/general/manuals/still.pdf b/doc/context/documents/general/manuals/still.pdf
new file mode 100644
index 000000000..5918f91cb
--- /dev/null
+++ b/doc/context/documents/general/manuals/still.pdf
Binary files differ
diff --git a/doc/context/documents/general/manuals/swiglib-mkiv.pdf b/doc/context/documents/general/manuals/swiglib-mkiv.pdf
index 57b717f9b..19ad12c4e 100644
--- a/doc/context/documents/general/manuals/swiglib-mkiv.pdf
+++ b/doc/context/documents/general/manuals/swiglib-mkiv.pdf
Binary files differ
diff --git a/doc/context/documents/general/manuals/workflows-mkiv.pdf b/doc/context/documents/general/manuals/workflows-mkiv.pdf
index 9b8e1f142..cbbec0a5a 100644
--- a/doc/context/documents/general/manuals/workflows-mkiv.pdf
+++ b/doc/context/documents/general/manuals/workflows-mkiv.pdf
Binary files differ
diff --git a/doc/context/documents/general/manuals/xml-mkiv.pdf b/doc/context/documents/general/manuals/xml-mkiv.pdf
index 7305fb7a8..4ca2570d3 100644
--- a/doc/context/documents/general/manuals/xml-mkiv.pdf
+++ b/doc/context/documents/general/manuals/xml-mkiv.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-cs.pdf b/doc/context/documents/general/qrcs/setup-cs.pdf
new file mode 100644
index 000000000..f16447a53
--- /dev/null
+++ b/doc/context/documents/general/qrcs/setup-cs.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-de.pdf b/doc/context/documents/general/qrcs/setup-de.pdf
new file mode 100644
index 000000000..d7733b4a1
--- /dev/null
+++ b/doc/context/documents/general/qrcs/setup-de.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-en.pdf b/doc/context/documents/general/qrcs/setup-en.pdf
new file mode 100644
index 000000000..27a797b07
--- /dev/null
+++ b/doc/context/documents/general/qrcs/setup-en.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-fr.pdf b/doc/context/documents/general/qrcs/setup-fr.pdf
new file mode 100644
index 000000000..fc0f336f6
--- /dev/null
+++ b/doc/context/documents/general/qrcs/setup-fr.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-it.pdf b/doc/context/documents/general/qrcs/setup-it.pdf
new file mode 100644
index 000000000..935eab1f1
--- /dev/null
+++ b/doc/context/documents/general/qrcs/setup-it.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-nl.pdf b/doc/context/documents/general/qrcs/setup-nl.pdf
new file mode 100644
index 000000000..d99f290f4
--- /dev/null
+++ b/doc/context/documents/general/qrcs/setup-nl.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-ro.pdf b/doc/context/documents/general/qrcs/setup-ro.pdf
new file mode 100644
index 000000000..7f7e85ce9
--- /dev/null
+++ b/doc/context/documents/general/qrcs/setup-ro.pdf
Binary files differ
diff --git a/doc/context/presentations/bachotex/2010/bachotex-2010-clash.pdf b/doc/context/presentations/bachotex/2010/bachotex-2010-clash.pdf
new file mode 100644
index 000000000..8dfb31d11
--- /dev/null
+++ b/doc/context/presentations/bachotex/2010/bachotex-2010-clash.pdf
Binary files differ
diff --git a/doc/context/presentations/bachotex/2010/bachotex-2010-clash.tex b/doc/context/presentations/bachotex/2010/bachotex-2010-clash.tex
new file mode 100644
index 000000000..bda1934e9
--- /dev/null
+++ b/doc/context/presentations/bachotex/2010/bachotex-2010-clash.tex
@@ -0,0 +1,231 @@
+% \enablemode[paper]
+
+\usemodule[present-stepwise,present-wobbling,abr-02]
+
+\setuppapersize[S6][S6] \setupbodyfont[10pt] \def\METAPOST{MetaPost}
+
+% \StartText{...}{...}
+
+\startdocument
+ [title={\TEX\ and Reality\crlf Clashing Mindsets?},
+ topic={Bacho\TEX, May 1, 2010}]
+
+\StartItems{Some reasons to use \TEX}
+ \StartItem
+ There can be several reasons for using \TEX. Some are subjective.
+ \StopItem
+ \StartItem
+ You like the way it works: you edit a document using a simple editor,
+ add a couple of directives and delay rendering. It's the content and
+ structure that matter.
+ \StopItem
+ \StartItem
+ You need it for instance because you have to typeset math and you believe that
+ no other tool can do a better job on that.
+ \StopItem
+ \StartItem
+ You found out that it can save time because it is programmable and after all,
+ programming is a nice distraction from writing.
+ \StopItem
+ \StartItem
+ You don't want to change a 20 year old habit and why quit using something that
+ you know well by now.
+ \StopItem
+ \StartItem
+ You like an occasional fight with a batch oriented system and updating (sometimes to
+ the extend of compiling) can be done while watching a movie.
+ \StopItem
+ \StartItem
+ You dislike learning a new program every 5 years. Of course it would be different
+ if we'd live for 500 years.
+ \StopItem
+\StopItems
+
+\StartItems{My reasons to use \TEX}
+ \StartItem
+ I've always used \TEX\ and can do what I need to do with it. I like to
+ focus on what can be done instead of what can't.
+ \StopItem
+ \StartItem
+ I don't like disposable tools and am quite lucky that \TEX\ still
+ can adapt to my needs.
+ \StopItem
+ \StartItem
+ I like my job but only when using the current tools and cooking up
+ reuseable solutions.
+ \StopItem
+ \StartItem
+ I need it for rendering (often educational) content and also use it
+ for fun.
+ \StopItem
+ \StartItem
+ In the process I need to implement styles based on designs provided by
+ designers, most probably only know click and point tools but some of them
+ can think outside that box.
+ \StopItem
+\StopItems
+
+
+\StartItems{Using \TEX\ in projects}
+ \StartItem
+ Each project has at least a few challenges, the input,
+ the design, graphics, the boundary conditions, interfaces, etc.
+ \StopItem
+ \StartItem
+ In quite some cases a printed product is an afterthought and coding is
+ driven by viewing on the web.
+ \StopItem
+ \StartItem
+ Most time goes into mapping structure. Coding is done in \XML\ because
+ we can then manipulate content and publishers can reuse it.
+ \StopItem
+ \StartItem
+ Publishers often use a preselected designer and ask him/her to come
+ up with a design.
+ \StopItem
+ \StartItem
+ Chapter openings and title pages take some effort as well, especially
+ if the implementation has to be exact. For some reason design comes before
+ content so the designer has to guess.
+ \StopItem
+ \StartItem
+ Although one can try to catch bordercases it hardly pays off as the eventual
+ solutions are not that logic. Simplification is preferred over heuristics.
+ \StopItem
+ \StartItem
+ Unfortunately designers never use the fact that we can program variations and
+ and flexible solutions. On the other hand in a later stage we can quite conveniently
+ provide solutions for problems resulting in the editorial workflow.
+ \StopItem
+\StopItems
+
+\StartItems{Struggling with structure}
+ \StartItem
+ Structure in regular \TEX\ documents assumes a proper nesting of chapters,
+ sections, subsections etc.
+ \StopItem
+ \StartItem
+ In \CONTEXT\ we can clone heads and configure them independently. Often we end up with
+ tens of variants.
+ \StopItem
+ \StartItem
+ In practice numberings can intermix, for instance subsections can be numbered
+ per chapter instead of per subsection.
+ \StopItem
+ \StartItem
+ Numbers seldom run like 1 \unknown\ 1.1 \unknown\ 1.1.1 and individual components can be omitted and can
+ have different properties (font, color). This quickly becomes messy as more (unexpected)
+ structure is added.
+ \StopItem
+ \StartItem
+ It's for this reason that we now have a more complex model of resetting and synchronization
+ of states in \CONTEXT. Actually we keep adding more structure support.
+ \StopItem
+ \StartItem
+ Additional information that is used in a chapter sometimes is also used elsewhere, as
+ in tables of contents (for instance icons). Therefore in \CONTEXT\ \MKIV\ we now have
+ the possibility to let userdata travel around.
+ \StopItem
+\StopItems
+
+\StartItems{Bringing system in color}
+ \StartItem
+ When making a product line it helps if there is some systematic
+ approach in defining colors but it does not work out that way.
+ \StopItem
+ \StartItem
+ Unfortunately we can never use the colorpalet and colorgroup features
+ that have been present in \CONTEXT\ from the start.
+ \StopItem
+ \StartItem
+ Spotcolors are nice as they enforce a more systematic approach than
+ process colors. In such cases there is often some system.
+ \StopItem
+ \StartItem
+ With processcolors we often have to fight the \quotation {on my screen 0.01
+ \letterpercent\ makes a big difference} dilemma.
+ \StopItem
+ \StartItem
+ Automatically converting graphics to such color spaces can save a lot of time and
+ money.
+ \StopItem
+\StopItems
+
+\StartItems{Relations between fonts}
+ \StartItem
+ Although there is some fashion in using fonts most designs use at least
+ a few different ones.
+ \StopItem
+ \StartItem
+ Not all fonts are equally well equipped and one cannot rely too much on
+ features without testing them first. Although \OPENTYPE\ makes things
+ easier it also introduces problems due to incomplete features.
+ \StopItem
+ \StartItem
+ A macro package assumes some logic in sizes and relations but this is of no
+ use in practice. Most if the font mechanism is simply not used.
+ \StopItem
+ \StartItem
+ The same is true for interline spacing. Often some standard latin quote and
+ title is used to determine the spec. Not seldom most spacing is inconsistent.
+ \StopItem
+ \StartItem
+ It looks like justification is not wanted that much, let alone advanced features
+ like protrusion and expansion. Inter|-|character spacing is sometimes requested.
+ \StopItem
+\StopItems
+
+\StartItems{Why I still use \TEX}
+ \StartItem
+ We started making \CONTEXT\ for our own use, especially complex and demanding
+ educational documents.
+ \StopItem
+ \StartItem
+ Nowadays we stick to typesetting and as we specialize in automated processing
+ we have to operate within strict bounds.
+ \StopItem
+ \StartItem
+ We use not that many handy features as there is hardly any structure in the designs
+ we have to implement.
+ \StopItem
+ \StartItem
+ But we use quite some of the manipulative power of \CONTEXT. Also, we are able to
+ fulfil even the most extreme demands.
+ \StopItem
+ \StartItem
+ It's user demand that is the driving force behind most new features. Users typically
+ use \CONTEXT\ in a different way than we do.
+ \StopItem
+ \StartItem
+ And \unknown\ some things can probably only be done with \TEX, especially in automated
+ workflows.
+ \StopItem
+\StopItems
+
+\StartItems{Suggestions for designers}
+ \StartItem
+ Talk to those implementing the design, let them show you what can be done. Stick to
+ general designs and don't go into much detail. It's the look and feel that matters.
+ \StopItem
+ \StartItem
+ Think in systematic solutions. Lack of freedom in interactive placement of graphics can
+ be compensated by other variations.
+ \StopItem
+ \StartItem
+ Think outside the box. Use the fact that the system is programmable and can adapt. And it
+ probably goes beyond what you can think of.
+ \StopItem
+ \StartItem
+ Try to make a design extensible. There will always be more structure. Some components
+ will have less text that expected. Titles can be very short or quite long. Keep in mind
+ that you cannot tweak.
+ \StopItem
+ \StartItem
+ Try to see a pattern in structure and provide escapes for strange cases. Give the implementor
+ some freedom.
+ \StopItem
+\StopItems
+
+\stopdocument
+
+% \StopText
diff --git a/doc/context/presentations/bachotex/2010/bachotex-2010-move.pdf b/doc/context/presentations/bachotex/2010/bachotex-2010-move.pdf
new file mode 100644
index 000000000..e4c087b64
--- /dev/null
+++ b/doc/context/presentations/bachotex/2010/bachotex-2010-move.pdf
Binary files differ
diff --git a/doc/context/presentations/bachotex/2010/bachotex-2010-move.tex b/doc/context/presentations/bachotex/2010/bachotex-2010-move.tex
new file mode 100644
index 000000000..6c016e911
--- /dev/null
+++ b/doc/context/presentations/bachotex/2010/bachotex-2010-move.tex
@@ -0,0 +1,114 @@
+% \enablemode[paper]
+
+\usemodule[present-stepwise,present-wobbling,abr-02]
+
+\setuppapersize[S6][S6] \setupbodyfont[11pt] \def\METAPOST{MetaPost}
+
+% \definecolor[maincolor] [red]
+% \definecolor[extracolor][blue]
+
+\definecolor[maincolor] [green]
+\definecolor[extracolor][red]
+
+% \StartText{...}{...}
+
+\startdocument
+ [title={Hybrids: \crlf the evolution of \CONTEXT},
+ topic={Bacho\TEX, May 3, 2010}]
+
+\StartItems{How you code your documents}
+ \StartItem
+ Coding in \TEX\ is quite natural and given a proper macro set
+ the overhead is not that large.
+ \StopItem
+ \StartItem
+ Coding in \XML\ makes sense when you have to manipulate or reuse
+ your data and when \TEX\ is just the renderer.
+ \StopItem
+ \StartItem
+ For non|-|artistic graphics \METAPOST\ provides a convenient input
+ language. It also plays well with \TEX.
+ \StopItem
+ \StartItem
+ Some problems can more conveniently be solved in a procedural programming
+ language and \LUA\ perfectly fits in there.
+ \StopItem
+\StopItems
+
+\StartItems{How the codebase evolves}
+ \StartItem
+ Of course we started with only \TEX\ code. Functionality has been nicely
+ split in modules
+ \StopItem
+ \StartItem
+ Front- and backend code has always been separated.
+ \StopItem
+ \StartItem
+ The user interface is quite consistent which provides backward compatibility
+ as well extensibility.
+ \StopItem
+ \StartItem
+ For quite some time \METAPOST\ support has been tightly integrated, including
+ a two way communication between these subsystems.
+ \StopItem
+ \StartItem
+ When we decided on \LUA\ as language it didn't take long before large chunks of
+ \CONTEXT\ were rewritten using it.
+ \StopItem
+\StopItems
+
+\StartItems{How the codebase evolves}
+ \StartItem
+ Most font handling takes place in \LUA\ and as usual with \TEX\ we can do more
+ than fonts provide.
+ \StopItem
+ \StartItem
+ Other subsystems, like languages, input encoding, file io and xml also were among
+ the first to be supported by \LUA.
+ \StopItem
+ \StartItem
+ Lots of information is now carried around, especially related to structure. This will
+ permit users more freedom.
+ \StopItem
+ \StartItem
+ Notes, descriptions and enumerations also rely on \LUA.
+ \StopItem
+ \StartItem
+ Graphics (including \METAPOST) is all dealt with in \LUA. Float management is currently
+ on the agenda.
+ \StopItem
+ \StartItem
+ The backend code is completely rewritten in \LUA. We've disabled the low level primitives
+ so that third party modules can not spoil the game (this was already the case in \MKII).
+ \StopItem
+ \StartItem
+ Eventually most management tasks will move from \TEX\ to \LUA, but we keep in pace with
+ \LUATEX\ development and don't push things to the limit.
+ \StopItem
+\StopItems
+
+\StartItems{where we will end up}
+ \StartItem
+ Eventually we will have a more layered macro package so that one can make specialized
+ versions.
+ \StopItem
+ \StartItem
+ In addition to the regular \TEX\ interface there will be a \LUA\ interface. We already have
+ one such interface but there will be more.
+ \StopItem
+ \StartItem
+ It will be possible to avoid \TEX\ code completely which makes sense in predictable
+ workflows where no artistic intervening is needed.
+ \StopItem
+ \StartItem
+ Core \TEX\ functionality will also be available as (often less efficient) \LUA\ variant
+ so that we can extend it. We already provide hooks into the callback subsystem.
+ \StopItem
+ \StartItem
+ We can already all of this intermixed so the user has complete freedom of choice.
+ \StopItem
+\StopItems
+
+\stopdocument
+
+% \StopText
diff --git a/doc/context/presentations/bachotex/2011/bachotex-2011-cld-and-mkvi.pdf b/doc/context/presentations/bachotex/2011/bachotex-2011-cld-and-mkvi.pdf
new file mode 100644
index 000000000..7b98216fd
--- /dev/null
+++ b/doc/context/presentations/bachotex/2011/bachotex-2011-cld-and-mkvi.pdf
Binary files differ
diff --git a/doc/context/presentations/bachotex/2011/bachotex-2011-cld-and-mkvi.tex b/doc/context/presentations/bachotex/2011/bachotex-2011-cld-and-mkvi.tex
new file mode 100644
index 000000000..24cb665a3
--- /dev/null
+++ b/doc/context/presentations/bachotex/2011/bachotex-2011-cld-and-mkvi.tex
@@ -0,0 +1,154 @@
+% \enablemode[print]
+
+\usemodule[present-stepwise,present-four,abr-02]
+
+\abbreviation [METAPOST] {MetaPost} {}
+
+\startdocument
+ [title=Finding\par the\par balance]
+
+%D This style is mostly for myself \unknown\ to get an idea of what I need to
+%D talk about, in this case the rather drastic transformation of the \CONTEXT\
+%D code base to \MKIV\ and \LUA.
+
+\startsubject[title={No way back}]
+
+\StartSteps
+
+\startitemize
+\startitem We have passed the point of no return already years ago. \stopitem \FlushStep
+\startitem Most users now use \MKIV, with an occasional fall-back on \MKII. \stopitem \FlushStep
+\startitem The code base is now completely split, with the exception of some modules. \stopitem \FlushStep
+\startitem Some solutions are implemented in \LUA\ with only a small wrapper at the \TEX\ end. \stopitem \FlushStep
+\stopitemize
+
+\StopSteps
+
+\stopsubject
+
+\startsubject[title={To get an idea}]
+
+\StartSteps
+
+\startitemize
+\startitem structure: sectioning, notes, descriptions, registers, synonyms \stopitem \FlushStep
+\startitem typesetting: sectioning, notes, descriptions, \stopitem \FlushStep
+\stopitemize
+
+\StopSteps
+
+\stopsubject
+
+\startsubject[title={Hybrid coding}]
+
+\StartSteps
+
+\startitemize
+\startitem The complete \CONTEXT\ user interface is available at the \LUA\ end (context namespace). \stopitem \FlushStep
+\startitem Eventually all \LUA\ solutions will have a dual interface: \LUA\ (all kind of namespaces) and
+towards \TEX\ (the command namespace). \stopitem \FlushStep
+\startitem Some of the support \LUA\ modules can also be used independent from \CONTEXT. \stopitem \FlushStep
+\stopitemize
+
+\StopSteps \StopPage
+
+\startsubject[title={Coding in \TEX}]
+
+\StartSteps
+
+\starttyping
+\starttabulate[|l|c|r|]
+\NC one \NC 1 \NC first \NC \NR
+\NC two \NC 2 \NC second \NC \NR
+\NC three \NC 3 \NC third \NC \NR
+\stoptabulate
+\stoptyping
+\FlushStep
+
+\StopSteps \StopPage
+
+\startsubject[title={Coding in \LUA}]
+
+\StartSteps
+
+\starttyping
+local NC = context.NC
+local NR = context.NR
+
+context.starttabulate { "|l|c|r|" }
+NC() one NC() 1 NC() first NC() NR()
+NC() two NC() 2 NC() second NC() NR()
+NC() three NC() 3 NC() third NC() NR()
+context.stoptabulate()
+\stoptyping
+\FlushStep
+
+\StopSteps \StopPage
+
+\startsubject[title={Pure \LUA\ vs \TEX}]
+
+\StartSteps
+
+\starttyping
+function converters.ordinal(n,language)
+ local t = ordinals[language]
+ return t and t(n)
+end
+
+function commands.ordinal(n,language)
+ local t = ordinals[language]
+ local o = t and t(n)
+ if o then
+ context.highordinalstr(o)
+ end
+end
+\stoptyping
+\FlushStep
+
+\StopSteps \StopPage
+
+\startsubject[title={Up to \MKVI}]
+
+\StartSteps
+
+\starttyping
+\def\MyPlace#Country#City%
+ {\blank
+ #City is situated in #Country
+ \blank}
+
+\starttexdefinition MyName #Name
+ My name is: #Name.
+\stoptexdefinition
+
+\MyPlace{Netherlands}{Hasselt}
+\MyPlace{Poland} {Bachotek}
+
+\MyName{Hans Hagen}
+\stoptyping
+\FlushStep
+
+\StopSteps \StopPage
+
+\startsubject[title={\CONTEXT\ \LUA\ Documents}]
+
+\StartSteps
+
+Let's look at some examples: \FlushStep
+
+\starttyping
+cld-math-001.cld
+music-001.cld
+m-zint.mkiv
+s-edu-01.mkiv
+m-morse.mkvi
+scrn-wid.[lua|mkvi]
+[grph|lpdf|back]-swf.mkiv
+\stoptyping
+\FlushStep
+
+(In 2016 I'd show different examples.) \FlushStep
+
+\StopSteps \StopPage
+
+\stopdocument
diff --git a/doc/context/presentations/bachotex/2013/bachotex-2013-bits.pdf b/doc/context/presentations/bachotex/2013/bachotex-2013-bits.pdf
new file mode 100644
index 000000000..cadfb197a
--- /dev/null
+++ b/doc/context/presentations/bachotex/2013/bachotex-2013-bits.pdf
Binary files differ
diff --git a/doc/context/presentations/bachotex/2013/bachotex-2013-bits.tex b/doc/context/presentations/bachotex/2013/bachotex-2013-bits.tex
new file mode 100644
index 000000000..96db6bdeb
--- /dev/null
+++ b/doc/context/presentations/bachotex/2013/bachotex-2013-bits.tex
@@ -0,0 +1,223 @@
+% \enablemode[print]
+
+\usemodule[pre-stepwise,present-tiles,abr-02]
+
+\definecolor[maincolor] [darkgray]
+\definecolor[othercolor][r=.3,b=.3]
+
+% \setupinteractionscreen
+% [option=max]
+
+\startdocument
+ [title={Bits and pieces:\\\\ConTeXt\\MetaPost\\Lua and more},
+ subtitle={Hans Hagen\\EuroBacho\TeX\\May 2013}]
+
+\StartSteps
+
+\starttopic[title={ConTeXt\\recently done}]
+
+ \startitemize
+ \startitem some more cleanup of old left||overs \FlushStep \stopitem
+ \startitem most mechanisms now use the new level of parameter abstraction \FlushStep \stopitem
+ \startitem only a few fundamental incompatibilities (split of mechanisms, more control) \FlushStep \stopitem
+ \startitem slow introduction of hooks and extensions via setups \FlushStep \stopitem
+ \startitem first version of new multi|| column routines \FlushStep \stopitem
+ \startitem replacing mechanism that have a (too) complex implementation \FlushStep \stopitem
+ \startitem exploring the mix (e.g. chemistry with Alan) \FlushStep \stopitem
+ \startitem remove some ugly left||overs from \MKII\ math \FlushStep \stopitem
+ \startitem normalized dynamic fonts (mostly interfacing) \FlushStep \stopitem
+ \stopitemize
+
+\stoptopic
+
+\StopSteps
+
+\StartSteps
+
+\starttopic[title={ConTeXt\\next on the todo list}]
+
+ \startitemize
+ \startitem more definitive split between generic and context (generated) \FlushStep \stopitem
+ \startitem some math extensions, maybe already math dictionaries \FlushStep \stopitem
+ \startitem normalize all styles and modules \FlushStep \stopitem
+ \startitem play a bit more with the \LUA\ parbuilder \FlushStep \stopitem
+ \startitem add more integrated bidi layout support \FlushStep \stopitem
+ \startitem finalize experimental (auto)script code \FlushStep \stopitem
+ \startitem investigate what more is needed in the \CLD\ interface \FlushStep \stopitem
+ \startitem check multi||lingual interface translations (not entirely in sync now) \FlushStep \stopitem
+ \stopitemize
+
+\stoptopic
+
+\StopSteps
+
+\StartSteps
+
+\starttopic[title={MetaPost\\recently done}]
+
+ \startitemize
+ \startitem we already had instances, a bit more configurability added \FlushStep \stopitem
+ \startitem instances now can be initialized to a number model \FlushStep \stopitem
+ \startitem some of the (runtime loaded) \METAFUN\ code has been optimized (as \METAPOST\ has become somewhat slower and now has dynamic memory management \FlushStep \stopitem
+ \stopitemize
+
+\stoptopic
+
+\StopSteps
+
+\StartSteps
+
+\starttopic[title={MetaPost\\next on the todo list}]
+
+ \startitemize
+ \startitem reimplement and extend graph (with Alan) \FlushStep \stopitem
+ \stopitemize
+
+\stoptopic
+
+\StopSteps
+
+\StartSteps
+
+\starttopic[title={Lua\\recently done}]
+
+ \startitemize
+ \startitem font code has been better isolated \FlushStep \stopitem
+ \startitem basic modules are more or less stable now \FlushStep \stopitem
+ \startitem support for \SQL, templates and other workflow helper code \FlushStep \stopitem
+ \startitem the \CLD\ manual has been extended (continuous effort) \FlushStep \stopitem
+ \startitem messages and tracing have been checked and made more consistent \FlushStep \stopitem
+ \startitem it is possible to build libraries so that one can use the same kind of code in projects (\type {mtxrun} using \LUATEX\ vs \type {mtxlibs} using \LUA) \FlushStep \stopitem
+ \stopitemize
+
+\stoptopic
+
+\StopSteps
+
+\StartSteps
+
+\starttopic[title={Lua\\next on the todo list}]
+
+ \startitemize
+ \startitem maybe cleanup of file database code (no real need to be completely \type {kpse} and \TDS\ compatible) \FlushStep \stopitem
+ \startitem pick up run||from|||zip experiment \FlushStep \stopitem
+ \startitem maybe more some framework code in the distribution \FlushStep \stopitem
+ \startitem experiment with some libraries (sockets, graphics, \type {gsl}) \FlushStep \stopitem
+ \stopitemize
+
+\stoptopic
+
+\StopSteps
+
+\StartSteps
+
+\starttopic[title={Lua\TeX\\recently done}]
+
+ \startitemize
+ \startitem
+ Luigi cooked up \LUAJITTEX\ and we did lots of experiments \unknown\
+ our pet project turned into an persistent extra engine \unknown\ some
+ 10 upto 40\% speedup due to faster \LUA\ interpreter (no \type {jit})
+ \FlushStep \stopitem
+ \startitem
+ I prototyped some speedups with access to node properties \unknown\
+ Luigi and I tested this across platforms \unknown\ and Taco finalized
+ and integrated all into the codebase
+ \FlushStep \stopitem
+ \startitem
+ Taco did the periodical check of tracker items \unknown\ some not too
+ intrusive patches and fixes have been applied \unknown\ the new
+ \METAPOST\ library has been integrated.
+ \FlushStep \stopitem
+ \startitem
+ I played with a speedup of logging to the console and identified some
+ bottlenecks \unknown\ Taco decided to make some improvements in the
+ code base.
+ \FlushStep \stopitem
+ \startitem
+ I did some parbuilder experiments in \CONTEXT\ with simplified hz
+ \unknown\ trivial extension needed in backend \unknown\ in the
+ meantime Hartmut decided to drastically cleanup the whole code path.
+ \FlushStep \stopitem
+ \stopitemize
+
+\stoptopic
+
+\StopSteps
+
+\StartSteps
+
+\starttopic[title={Lua\TeX\\next on the todo list}]
+
+ \startitemize
+ \startitem remove some old engine stuff (after tl 2013 is out) \FlushStep \stopitem
+ \startitem with Luigi, get \SWIGLIB\ project upto speed (and running) \FlushStep \stopitem
+ \startitem with Hartmut, get ex||factor implemented in the backend (explored in the \LUA\ parbuilder) \FlushStep \stopitem
+ \startitem with Taco, catch up on some ideas we have accumulated \FlushStep \stopitem
+ \stopitemize
+
+\stoptopic
+
+\StopSteps
+
+\StartSteps
+
+\starttopic[title={Fonts\\next on the todo list}]
+
+ \startitemize
+ \startitem normalize a few extensions \FlushStep \stopitem
+ \startitem implement some more detailed control \FlushStep \stopitem
+ \startitem play with the \LUA\ parbuilder (if it makes sense at all) \FlushStep \stopitem
+ \startitem finish (and test) support for Devanagari \FlushStep \stopitem
+ \stopitemize
+
+\stoptopic
+
+\StopSteps
+
+\StartSteps
+
+\starttopic[title=Manuals]
+
+ \startitemize
+ \startitem new manuals for templates, \SQL, \SCITE, extreme tables, etc. \FlushStep \stopitem
+ \startitem first uploads of the (technical) font manual \FlushStep \stopitem
+ \startitem package some sources to the documentation zip \FlushStep \stopitem
+ \stopitemize
+
+ todo:
+
+ \startitemize
+ \startitem check metafun for additions \FlushStep \stopitem
+ \startitem check and extend the \XML\ manual \FlushStep \stopitem
+ \startitem check and republish the mathml manual \FlushStep \stopitem
+ \startitem redo some of the specific manuals for \MKIV \FlushStep \stopitem
+ \startitem beginners manual is being redone (by Ton) \FlushStep \stopitem
+ \startitem chemistry manual is being redone (by Alan) \FlushStep \stopitem
+ \stopitemize
+
+\stoptopic
+
+\StopSteps
+
+\StartSteps
+
+\starttopic[title=Scripts]
+
+ \startitemize
+ \startitem additional help info support (\TEXLIVE\ requirement) \FlushStep \stopitem
+ \startitem relatively stable but most are still a first||version \FlushStep \stopitem
+ \startitem improve the \SCITE\ reference lexers \FlushStep \stopitem
+ \stopitemize
+
+\stoptopic
+
+\StopSteps
+
+\starttopic[title=Speed]
+
+\goto{pre-bt-2013-speed}[file(pre-bt-2013-speed)] \FlushStep
+
+\stoptopic
+
+\stopdocument
diff --git a/doc/context/presentations/bachotex/2013/bachotex-2013-luatex.pdf b/doc/context/presentations/bachotex/2013/bachotex-2013-luatex.pdf
new file mode 100644
index 000000000..147c34ac3
--- /dev/null
+++ b/doc/context/presentations/bachotex/2013/bachotex-2013-luatex.pdf
Binary files differ
diff --git a/doc/context/presentations/bachotex/2013/bachotex-2013-luatex.tex b/doc/context/presentations/bachotex/2013/bachotex-2013-luatex.tex
new file mode 100644
index 000000000..1dc6f2f89
--- /dev/null
+++ b/doc/context/presentations/bachotex/2013/bachotex-2013-luatex.tex
@@ -0,0 +1,205 @@
+% \enablemode[print]
+
+\usemodule[pre-stepwise,present-tiles,abr-02]
+
+\definecolor[maincolor] [darkgray]
+\definecolor[othercolor][g=.3,b=.3]
+
+% \setupinteractionscreen
+% [option=max]
+
+\setupbodyfont[opendyslexic,ss]
+
+\startdocument
+ [title={Lua\TeX\ for dummies\\\\(so you can still leave)},
+ subtitle={Hans Hagen\\EuroBacho\TeX\\May 2013}]
+
+\StartSteps
+
+\starttopic[title={The \TEX\ perspective}]
+
+ \startitemize
+ \startitem it started out as \PDFTEX \FlushStep \stopitem
+ \startitem then got merged with \ALEPH \FlushStep \stopitem
+ \startitem but we left out the ugly bits of both \FlushStep \stopitem
+ \startitem it's exclusively \UTF-8 \FlushStep \stopitem
+ \startitem it's math machinery got extended with \OPENTYPE\ like features \FlushStep \stopitem
+ \startitem there are no fundamental extensions as it's impossible to agree in them \FlushStep \stopitem
+ \stopitemize
+
+\stoptopic
+
+\StopSteps
+
+\StartSteps
+
+\starttopic[title={The \LUA\ perspective}]
+
+ \startitemize
+ \startitem it just a \LUA\ engine \FlushStep \stopitem
+ \startitem it has some extra libraries on board \FlushStep \stopitem
+ \startitem you don't even have to use \TEX \FlushStep \stopitem
+ \startitem but there are hooks into the \TEX\ machinery \FlushStep \stopitem
+ \startitem and we can go further by loading libraries \FlushStep \stopitem
+ \stopitemize
+
+\stoptopic
+
+\StopSteps
+
+\StartSteps
+
+\starttopic[title={The hybrid perspective}]
+
+ \startitemize
+ \startitem we can extend \TEX\ using \LUA \FlushStep \stopitem
+ \startitem eventually everything will be opened up \FlushStep \stopitem
+ \startitem users never have to see any of that \FlushStep \stopitem
+ \startitem they can simply use \LUA\ for scripting and print results to \TEX \FlushStep \stopitem
+ \startitem but developers can go deep into the \TEX\ internals and mess around \FlushStep \stopitem
+ \startitem the average user will just depend on what a macro package will provide \FlushStep \stopitem
+ \stopitemize
+
+\stoptopic
+
+\StopSteps
+
+\StartSteps
+
+\starttopic[title={The complications}]
+
+ \startitemize
+ \startitem normally one wants a bit of infrastructure (management) \FlushStep \stopitem
+ \startitem and maybe a special user space, hidden from core extensions \FlushStep \stopitem
+ \startitem but history has tought that users can't be controlled that way \FlushStep \stopitem
+ \startitem so we stick to just providing the mechanisms \FlushStep \stopitem
+ \stopitemize
+
+\stoptopic
+
+\StopSteps
+
+\StartSteps
+
+\starttopic[title={The future}]
+
+ \startitemize
+ \startitem there are a couple of generic modules (derived from \CONTEXT) \FlushStep \stopitem
+ \startitem in principle I can make more generic modules \FlushStep \stopitem
+ \startitem that's after all the idea behind the (to be) \METATEX\ variant \FlushStep \stopitem
+ \startitem but does it really make sense as one still needs substantial subsystems \FlushStep \stopitem
+ \stopitemize
+
+\stoptopic
+
+\StopSteps
+
+\StartSteps
+
+\starttopic[title={This workshop}]
+
+ \startitemize
+ \startitem just using \LUA: it's what most users will do \FlushStep \stopitem
+ \startitem showing the hooks: it's what developers want to use \FlushStep \stopitem
+ \startitem answering questions: it's probably the most I can do \FlushStep \stopitem
+ \stopitemize
+
+\stoptopic
+
+\StopSteps
+
+\StartSteps
+
+\starttopic[title={Just plain}]
+
+ We need to make a format, like:
+
+ \starttyping
+ luatex --ini plain \dump
+ \stoptyping
+
+ \FlushStep
+
+ and can then run files with:
+
+ \starttyping
+ luatex --fmt=plain somefile.tex
+ \stoptyping
+
+ \FlushStep
+
+ This is a another way:
+
+ \starttyping
+ mtxrun --script plain --make --texformat=plain
+ \stoptyping
+
+ \FlushStep
+
+ with:
+
+ \starttyping
+ mtxrun --script plain --texformat=plain somefile.tex
+ \stoptyping
+
+ \FlushStep
+
+\stoptopic
+
+\StopSteps
+
+\StartSteps
+
+\starttopic[title={A bit less plain}]
+
+ In order to profit from \OPENTYPE\ fonts:
+
+ \starttyping
+ mtxrun --script plain --make
+ \stoptyping
+
+ \FlushStep
+
+ with:
+
+ \starttyping
+ mtxrun --script plain somefile.tex
+ \stoptyping
+
+ \FlushStep
+
+ On windows you can copy \type {mtxrun.exe} to \type {plain.exe} and stick to:
+
+ \starttyping
+ plain --make
+ \stoptyping
+
+ \FlushStep
+
+ with:
+
+ \starttyping
+ plain somefile.tex
+ \stoptyping
+
+\stoptopic
+
+\StopSteps
+
+\StartSteps
+
+\starttopic[title={Hardly plain}]
+
+ If you can live with a bit less plain:
+
+ \starttyping
+ context yourfile.tex
+ \stoptyping
+
+ \FlushStep
+
+\stoptopic
+
+\StopSteps
+
+\stopdocument
diff --git a/doc/context/presentations/bachotex/2013/bachotex-2013-sense.pdf b/doc/context/presentations/bachotex/2013/bachotex-2013-sense.pdf
new file mode 100644
index 000000000..be0939b40
--- /dev/null
+++ b/doc/context/presentations/bachotex/2013/bachotex-2013-sense.pdf
Binary files differ
diff --git a/doc/context/presentations/bachotex/2013/bachotex-2013-sense.tex b/doc/context/presentations/bachotex/2013/bachotex-2013-sense.tex
new file mode 100644
index 000000000..72e3f4dc2
--- /dev/null
+++ b/doc/context/presentations/bachotex/2013/bachotex-2013-sense.tex
@@ -0,0 +1,319 @@
+% \enablemode[print]
+
+\usemodule[pre-stepwise,present-tiles,abr-02]
+
+\definecolor[maincolor] [s=.6]
+\definecolor[othercolor][s=.2]
+
+% \setupinteractionscreen
+% [option=max]
+
+\startdocument
+ [title={How about those\\typographic virtues:\\do they still make sense?},
+ subtitle={Hans Hagen\\EuroBacho\TeX\\May 2013}]
+
+\StartSteps
+
+\starttopic[title=Typesetting]
+
+ \FlushStep
+
+ \startitemize
+ \startitem somehow we turned sounds into speech into language \FlushStep \stopitem
+ \startitem and after that it may have started with writing in the sand \FlushStep \stopitem
+ \startitem followed by painting on cave walls \FlushStep \stopitem
+ \startitem or maybe carving symbols in wood \FlushStep \stopitem
+ \startitem and figuring out some writing system \FlushStep \stopitem
+ \startitem that made it possible to chisel thoughts in stone \FlushStep \stopitem
+ \startitem and eventually putting blobs on paper \FlushStep \stopitem
+ \startitem that we somehow managed to map onto pixels \FlushStep \stopitem
+ \stopitemize
+
+ but \FlushStep
+
+ \startitemize
+ \startitem typesetting only happened very lately \FlushStep \stopitem
+ \stopitemize
+
+\stoptopic
+
+\StopSteps
+
+\StartSteps
+
+\starttopic[title=In the process]
+
+ \FlushStep
+
+ \startitemize
+ \startitem mankind optimized the basic shapes (to suit the language) \FlushStep \stopitem
+ \startitem and kept inventing new symbols \FlushStep \stopitem
+ \startitem more and more automated typesetting and rendering and printing \FlushStep \stopitem
+ \startitem and of course this went with all kind of silly arguments \FlushStep \stopitem
+ \stopitemize
+
+ think of this: \FlushStep
+
+ \startitemize
+ \startitem for ages scribes were the only way to get high end arabic typesetting \FlushStep \stopitem
+ \startitem and now we can do this mostly automatic (in good and bad ways) \FlushStep \stopitem
+ \startitem so we endangered yet another craft \FlushStep \stopitem
+ \stopitemize
+
+
+\stoptopic
+
+\StopSteps
+
+\StartSteps
+
+\starttopic[title=But eventually]
+
+ \FlushStep
+
+ \startitemize
+ \startitem new interfaces will bring new ways of reading (how about leap motion) \FlushStep \stopitem
+ \startitem and we'll go from manual to visual (glasses, look at gaming) \FlushStep \stopitem
+ \startitem so information will be pushed more or less directly into our brain \FlushStep \stopitem
+ \startitem while high quality rendering moves to the arts department \FlushStep \stopitem
+ \startitem and in the end probably not much gets printed any more \FlushStep \stopitem
+ \startitem so we will share, stare at and discuss books no longer the way we do now \FlushStep \stopitem
+ \startitem just look at how kids deal with information nowadays \FlushStep \stopitem
+ \stopitemize
+
+\stoptopic
+
+\StopSteps
+
+\StartSteps
+
+\starttopic[title=Targeting paper]
+
+ \FlushStep
+
+ \startitemize
+ \startitem we kept trying to save space by combine shapes and using umlauts and accents \FlushStep \stopitem
+ \startitem we can make it look better, using ligatures, alternative shapes \FlushStep \stopitem
+ \startitem color comes cheap, as does mixing fonts \FlushStep \stopitem
+ \startitem went from left to right and vise versa and top to bottom and mixed all this \FlushStep \stopitem
+ \startitem papers and magazines squeezed more into columns (in fact, we get less newspapers and magazines, but more advertising, so for a while there's as much print but more of dubious quality) \FlushStep \stopitem
+ \startitem and we even optimized the art of unreadability as in anti||smoke warnings \FlushStep \stopitem
+ \startitem thanks to software we can tweak fonts, mess with kerning, fool ourselve with expansion and protrusion \FlushStep \stopitem
+ \startitem we mess around with margins, aspect ratios, scaling, rotating, and justification \FlushStep \stopitem
+ \startitem and yes, we introduced conventions but also entered endless debates \FlushStep \stopitem
+ \stopitemize
+
+\stoptopic
+
+\StopSteps
+
+\StartSteps
+
+\starttopic[title=Towards displays]
+
+ \FlushStep
+
+ \startitemize
+ \startitem nowadays we can fake the old stuff on the screen and simulate paper \FlushStep \stopitem
+ \startitem we have weird user interfaces as we still want to recognize the old e.g.\ funny borders and strange buttons \FlushStep \stopitem
+ \startitem and we're told how less pixels are actually needed to keep us happy \FlushStep \stopitem
+ \startitem while we stare at ourselves on those mirroring and radiating displays \FlushStep \stopitem
+ \startitem lack of detail gets nicely compensated with special reading compensation programs at school \FlushStep \stopitem
+ \startitem and still progress is hampered by copyrighting trivial properties and inventions that anyone can come up with given the machinery \FlushStep \stopitem
+ \stopitemize
+
+\stoptopic
+
+\StopSteps
+
+\StartSteps
+
+\starttopic[title=The state of affairs]
+
+ \FlushStep
+
+ \startitemize
+ \startitem we already lost (or maybe never reached) optimal quality \FlushStep \stopitem
+ \startitem it looks like ragged right won the battle \FlushStep \stopitem
+ \startitem and messing with fonts beyond what designers had in mind is okay \FlushStep \stopitem
+ \startitem the users start controlling the layout by scaling, rotating and setting properties \FlushStep \stopitem
+ \stopitemize
+
+ so \FlushStep
+
+ \startitemize
+ \startitem why do we texies still bother about typography, hobyism apart \FlushStep \stopitem
+ \startitem does paying so much attention and trying to be original still fit into rappidly changing times \FlushStep \stopitem
+ \startitem we're not alone: the same is true for programs, apps, operating systems, etc \FlushStep \stopitem
+ \stopitemize
+
+\stoptopic
+
+\StopSteps
+
+\StartSteps
+
+\starttopic[title=Take ligatures]
+
+ \FlushStep
+
+ \definefont[TestA][texgyrepagella-regular*default]
+ \definefont[TestB][cambria*default]
+ \definefont[TestC][dejavuserif*default]
+ \definefont[TestD][lmroman10-regular*default]
+
+ \startcombination[alternative=none,nx=1,ny=4]
+ {\hbox to \textwidth{\scale[height=.1\textheight]{\TestA fi ffi fl ffl ij}\hss}}
+ {\hbox to \textwidth{\scale[height=.1\textheight]{\TestB fi ffi fl ffl ij}\hss\tlap{\scale[height=.25\textheight]{\TestB ffl\hskip.1emffi}}}}
+ {\hbox to \textwidth{\scale[height=.1\textheight]{\TestC fi ffi fl ffl ij}\hss}}
+ {\hbox to \textwidth{\scale[height=.1\textheight]{\TestD fi ffi fl ffl ij}\hss\tlap{\scale[height=.25\textheight]{\TestD ffl\hskip.1emffi}}}}
+ \stopcombination
+
+ \FlushStep
+
+ Subtle kerning, partial substitution, different shapes: take your
+ choice. Can texies really claim that their ffi looks the best? Just
+ stare at it for a while.
+
+ \FlushStep
+
+\stoptopic
+
+\StopSteps
+
+\StartSteps
+
+\starttopic[title=Accent battles]
+
+ \FlushStep
+
+ \startcombination[alternative=label,nx=5,ny=2]
+ {\scale[height=.25\textheight]{\definedfont[texgyrepagella-regular]š}}
+ {\scale[height=.25\textheight]{\definedfont[dejavuserif]š}}
+ {\scale[height=.25\textheight]{\definedfont[cambria]š}}
+ {\scale[height=.25\textheight]{\definedfont[texgyretermes-regular]š}}
+ {\scale[height=.25\textheight]{\definedfont[lucidabrightot]š}}
+ {\scale[height=.25\textheight]{\definedfont[texgyrebonum-regular]š}}
+ {\scale[height=.25\textheight]{\definedfont[texgyreheros-regular]š}}
+ {\scale[height=.25\textheight]{\definedfont[lmroman10-regular]š}}
+ {\scale[height=.25\textheight]{\definedfont[KozMinPr6N-Regular]š}}
+ {\scale[height=.25\textheight]{\definedfont[zapfinoextraltpro]š}}
+ \stopcombination
+
+ \FlushStep
+
+ \blank
+
+ Of course there are some conventions, but given that designs are \unknown\ well,
+ designs \unknown\ it's never going to be okay for all of us.
+
+ \FlushStep
+
+\stoptopic
+
+\StopSteps
+
+\StartSteps
+
+\starttopic[title=Justification]
+
+ \FlushStep
+
+ % \externalfigure[chinese-courier.jpg][height=.7\textheight]
+ \externalfigure[chinese-courier.jpg][width=\textwidth]
+
+ \FlushStep
+
+ \blank
+
+ Intercharacter spacing, interglyph spacing, tightening symbols: why bother
+ any longer: let's play safe and from now on advice to use monospaced ragged
+ right.
+
+ \FlushStep
+
+\stoptopic
+
+\StopSteps
+
+\StartSteps
+
+\starttopic[title=Backslashes]
+
+ \FlushStep
+
+ \startitemize
+ \startitem you always need a way to escape formatting directives \FlushStep \stopitem
+ \startitem so texies have the backslash and a few more special characters \FlushStep \stopitem
+ \startitem coding in \XML\ seems to be too complex and awkward for most users \FlushStep \stopitem
+ \startitem but \ASCII\ based quick and dirty formatting becomes a fashion (\type {*doc}) \FlushStep \stopitem
+ \startitem of course influencing the makeup and making things nice involves even nastier escapes \FlushStep \stopitem
+ \startitem and in the process we eventually loose quality \FlushStep \stopitem
+ \stopitemize
+
+ but \FlushStep
+
+ \startitemize
+ \startitem it fits nicely into quick and dirty often one||time markup \FlushStep \stopitem
+ \startitem and real markup, maybe targeted at reuse, becomes a speciality, craft, hobby or disappears \FlushStep \stopitem
+ \startitem there is no reason why what we do now stays \unknown\ we have no copying monks left either \FlushStep \stopitem
+ \stopitemize
+
+\stoptopic
+
+\StopSteps
+
+\StartSteps
+
+\starttopic[title=Endangered features]
+
+ \FlushStep
+
+ \startitemize
+ \startitem ebooks are mostly single sided \FlushStep \stopitem
+ \startitem but somehow we still care about pages (or can't look beyond them) \FlushStep \stopitem
+ \startitem there is no longer room and need for multi||columns \FlushStep \stopitem
+ \startitem and also no need for footnotes as we can have roll||overs \FlushStep \stopitem
+ \startitem paper size can still be different but can swap to landscape\FlushStep \stopitem
+ \startitem floats become cumbersome compared to paper books, so no floats \FlushStep \stopitem
+ \startitem margins, they waste space and we already have hardware margins \FlushStep \stopitem
+ \startitem a proper tables of contents still make some sense \FlushStep \stopitem
+ \startitem indices can be replaced but searching in most cases \FlushStep \stopitem
+ \startitem bibliographies can become pop||ups \FlushStep \stopitem
+ \startitem readers are encouraged to choose and scale fonts so the design has limitations \FlushStep \stopitem
+ \startitem and why even bother optimizing the look and feel \FlushStep \stopitem
+ \stopitemize
+
+\stoptopic
+
+\StopSteps
+
+\StartSteps
+
+\starttopic[title=The future of \TEX]
+
+ \FlushStep
+
+ \startitemize
+ \startitem as it happens: these are all mechanisms that complicate the \TEX\ machinery and workflow \FlushStep \stopitem
+ \startitem and removing the need for them might as well remove the need for \TEX \FlushStep \stopitem
+ \startitem but still, for a long time \CONTEXT\ \MKIV\ can fulfill the needs as demands probably only become more simple \FlushStep \stopitem
+ \startitem and I can start working on a simple version: twittertex™, monospaced, one paragraph fat most 140 characters, no pages, no structure, maybe random generated content, etc. \FlushStep \stopitem
+ \startitem or maybe first make some intermediate version: markuptex™, geared at ebooks in some kind of \XML\ format \FlushStep \stopitem
+ \startitem and Luigi will make \type {livetex}, a dna based typesetting plugin that connects to our already built||in retina \FlushStep \stopitem
+ \stopitemize
+
+ however, \FlushStep
+
+ \startitemize
+ \startitem looking at the still active \TEX\ crowd we will stay around for a while \FlushStep \stopitem
+ \startitem given that we manage to advocate the virtues of typographical traditions \FlushStep \stopitem
+ \startitem and for that, we might need to reinvent ourselves (a nice theme for a conference) \FlushStep \stopitem
+ \stopitemize
+
+\stoptopic
+
+\StopSteps
+
+\stopdocument
+
diff --git a/doc/context/presentations/bachotex/2013/bachotex-2013-speed.pdf b/doc/context/presentations/bachotex/2013/bachotex-2013-speed.pdf
new file mode 100644
index 000000000..6dcd5478c
--- /dev/null
+++ b/doc/context/presentations/bachotex/2013/bachotex-2013-speed.pdf
Binary files differ
diff --git a/doc/context/presentations/bachotex/2013/bachotex-2013-speed.tex b/doc/context/presentations/bachotex/2013/bachotex-2013-speed.tex
new file mode 100644
index 000000000..df7ca2f3a
--- /dev/null
+++ b/doc/context/presentations/bachotex/2013/bachotex-2013-speed.tex
@@ -0,0 +1,115 @@
+% \enablemode[print]
+
+\usemodule[pre-stepwise,present-tiles,abr-02]
+
+\definecolor[maincolor] [darkgray]
+\definecolor[othercolor][r=.3,g=.3]
+
+% \setupinteractionscreen
+% [option=max]
+
+\setupbodyfont[15pt]
+
+\startdocument
+ [title={Speed:\\\\can we make\\it any faster},
+ subtitle={Hans Hagen\\EuroBacho\TeX\\May 2013}]
+
+\StartSteps
+
+\starttopic[title={Speed}]
+
+ \startitemize
+ \startitem speed matters in a edit-run-preview cycle although this is mostly perception \FlushStep \stopitem
+ \startitem the nicer the interface, the slower it gets, but you seldom set something up \FlushStep \stopitem
+ \startitem everything you provide gets used at some point, also in inefficient ways \FlushStep \stopitem
+ \startitem lots of local (grouped) tweaks leads to many mechanisms kicking in unseen \FlushStep \stopitem
+ \startitem wrong use of functionality can have drastic and unexpected speed penalties \FlushStep \stopitem
+ \stopitemize
+
+\stoptopic
+
+\StopSteps
+
+\StartSteps
+
+\starttopic[title={Pages per minute}]
+
+ \startitemize
+ \startitem we try to speed up baseline performance (in pages per second) \FlushStep \stopitem
+ \startitem identify and optimize critical routines, both at the \TEX\ and \LUA\ end \FlushStep \stopitem
+ \startitem of course the machine (Dell M90, SSD, 4GB, 2.33 Ghz T7600, Windows 8) and versions if \LUATEX\ (0.72+) and \CONTEXT\ matter \FlushStep \stopitem
+ \stopitemize
+
+ \blank
+
+ \starttyping
+ \dorecurse {1000} {test \page}
+ \stoptyping
+
+ \FlushStep
+
+ \blank
+
+ \starttabulate[|r|r|r|r|]
+ \HL
+ \NC \bf \# pages \NC \bf Januari \NC \bf April \NC \bf May\rlap{\quad(2013)} \NR
+ \HL
+ \NC 1 \NC 2 \NC 2 \NC 2 \NC \NR
+ \NC 10 \NC 15 \NC 17 \NC 17 \NC \NR
+ \NC 100 \NC 90 \NC 109 \NC 110 \NC \NR
+ \NC 1000 \NC 185 \NC 234 \NC 259 \NC \NR
+ \NC 10000 \NC 215 \NC 258 \NC 289 \NC \NR
+ \HL
+ \stoptabulate
+
+ \FlushStep
+
+\stoptopic
+
+\StopSteps
+
+\StartSteps
+
+\starttopic[title={What happens}]
+
+ \startitemize
+ \startitem load macros and \LUA\ code is loaded from the format \FlushStep \stopitem
+ \startitem the system gets initialized, think of fonts and languages \FlushStep \stopitem
+ \startitem additional (runtime) files are loaded \FlushStep \stopitem
+ \startitem text is typeset and eventually gets passed to the page builder \FlushStep \stopitem
+ \startitem pages are packaged, this includes reverting to global document states \FlushStep \stopitem
+ \startitem the \PDF\ representation is created \FlushStep \stopitem
+ \startitem each of these steps has its bottlenecks \FlushStep \stopitem
+ \startitem the more we don, the more \LUA\ gets involved \FlushStep \stopitem
+ \stopitemize
+
+\stoptopic
+
+\StopSteps
+
+\StartSteps
+
+\starttopic[title={What we can do}]
+
+ \startitemize
+ \startitem avoid copying boxes where possible \FlushStep \stopitem
+ \startitem only enable initializers and finalizers when functionality is used \FlushStep \stopitem
+ \startitem be clever with fonts, in usage as well as in supporting features \FlushStep \stopitem
+ \startitem use trial runs in multi||pass mechanisms \FlushStep \stopitem
+ \startitem avoid too much macro expansion (only matters for tracing) \FlushStep \stopitem
+ \startitem accept that more functionality has a price \FlushStep \stopitem
+ \stopitemize
+
+ but
+
+ \startitemize
+ \startitem don't compromise functionality \FlushStep \stopitem
+ \startitem avoid too obscure code \FlushStep \stopitem
+ \startitem forget about optimization by means of combining functionality \FlushStep \stopitem
+ \stopitemize
+
+\stoptopic
+
+\StopSteps
+
+\stopdocument
diff --git a/doc/context/presentations/bachotex/2015/bachotex-2015-ligatures.pdf b/doc/context/presentations/bachotex/2015/bachotex-2015-ligatures.pdf
new file mode 100644
index 000000000..96147dfdc
--- /dev/null
+++ b/doc/context/presentations/bachotex/2015/bachotex-2015-ligatures.pdf
Binary files differ
diff --git a/doc/context/presentations/bachotex/2015/bachotex-2015-ligatures.tex b/doc/context/presentations/bachotex/2015/bachotex-2015-ligatures.tex
new file mode 100644
index 000000000..0a59afbe9
--- /dev/null
+++ b/doc/context/presentations/bachotex/2015/bachotex-2015-ligatures.tex
@@ -0,0 +1,138 @@
+\usemodule[present-ovals]
+
+\definecolor[maincolor][darkgray]
+
+\definefont[largett][Mono sa 3]
+
+\starttext
+
+\startstandardmakeup
+ \bfc\setstrut
+ \vfil
+ \midaligned{\strut the interaction between}
+ \vfil
+ \midaligned{\strut ligatures hyphenation}
+ \vfil
+ \midaligned{\strut and kerning}
+ \vfil
+ \bf\setstrut
+ \vfil
+ \midaligned{\strut Hans Hagen}
+ \vfil
+ \midaligned{\strut Bacho\TeX\ 2015}
+ \vfil
+\stopstandardmakeup
+
+\starttitle[title={Ligature}]
+\startlines \largett\setupinterlinespace
+ {\red e}{\red f}{\red f}{\red e}
+ {\red e}{\blue ff}{\red e}
+ {\red e}{\vl}{\blue ff}{\vl}{\red e}
+\stoplines
+\stoptitle
+
+\starttitle[title={Discretionary}]
+\startlines \bigger \setupinterlinespace
+ \type{\discretionary{pre}{post}{replace}}
+ \blank
+ \type{explicit: \-}
+ \blank
+ \type{automatic: -}
+ \blank
+ \type{regular: patterns}
+ \blank
+ \type{first: internal}
+ \type{second: internal}
+\stoplines
+\stoptitle
+
+\starttitle[title={Hyphenated ligature}]
+\startlines \largett\setupinterlinespace
+ {\red e}{\red f}{\green -}{\red f}{\red e}
+ {\red e}[{\red f}{\green -}][{\red f}][{\blue ff}]{\red e}
+ {\red e}[{\vl}{\red f}{\vl}{\green -}][{\red f}{\vl}][{\vl}{\blue ff}{\vl}]{\red e}
+\stoplines
+\stoptitle
+
+\starttitle[title={Substitution}]
+\startlines \largett\setupinterlinespace
+{\red e}{\red f}{\red f}{\red e}
+{\red e}{\magenta f}{\cyan f}{\red e}
+{\red e}{\vl}{\magenta f}{\vl}{\cyan f}{\vl}{\red e}
+\stoplines
+\stoptitle
+\stoptitle
+
+\starttitle[title={Hyphenation substitution}]
+\startlines \largett\setupinterlinespace
+{\red e}{\red f}{\green -}{\red f}{\red e}
+{\red e}[{\red f}{\green -}][{\red f}][{\magenta f}{\cyan f}]{\red e}
+{\red e}[{\vl}{\red f}{\vl}{\green -}][{\red f}{\vl}][{\vl}{\magenta f}{\vl}{\cyan f}{\vl}]{\red e}
+\stoplines
+\stoptitle
+
+\starttitle[title={Hyphenation substitution (2)}]
+\startlines \largett\setupinterlinespace
+{\red e}{\red f}{\green -}{\red f}{\red e}
+{\red e}[{\red f}{\green -}][{\green -}{\red f}][{\magenta f}{\cyan f}]{\red e}
+{\red e}[{\vl}{\red f}{\vl}{\green -}][{\green -}{\vl}{\red f}{\vl}][{\vl}{\magenta f}{\vl}{\cyan f}{\vl}]{\red e}
+\stoplines
+\stoptitle
+
+\starttitle[title={Hyphenation substitution (3)}]
+\startlines \largett\setupinterlinespace
+{\red e}{\red f}{\green -}{\red f}{\red e}
+{\red e}[{\yellow f}{\green -}][{\green -}{\red f}][{\magenta f}{\cyan f}]{\red e}
+{\red e}[{\vl}{\yellow f}{\vl}{\green -}][{\green -}{\vl}{\red f}{\vl}][{\vl}{\magenta f}{\vl}{\cyan f}{\vl}]{\red e}
+\stoplines
+\stoptitle
+
+\starttitle[title={Hyphenation substitution (4)}]
+\startlines \largett\setupinterlinespace
+\dontleavehmode\hbox{{\red e}{\red f}{\green -}{\red f}{\red i}{\green -}{\red c}{\red i}{\red e}{\red n}{\red t}}
+\dontleavehmode\hbox{{\red e}[{\red f}{\green -}][{\blue fi}][{\blue ffi}{\green -}]{\red c}}
+\dontleavehmode\hbox{{\red e}[{\vl}{\red f}{\vl}{\green -}][{\blue fi}{\vl}][{\vl}{\blue ffi}{\vl}{\green -}{\vl}]{\red c}}
+\stoplines
+\stoptitle
+
+\starttitle[title={Languages}]
+\startlines \largett\setupinterlinespace
+{\red f}{\red i}{\red j}{\red n}
+{\blue fi}{\red j}{\red n}
+{\red f}{\blue ij}{\red n}
+\stoplines
+\stoptitle
+
+\starttitle[title={Relevance of typesetting}]
+\startparagraph glyphs (shapes) are a way to communicate \stopparagraph
+\startparagraph writing and reading are complementary \stopparagraph
+\startparagraph both were instrumental to progress \stopparagraph
+\startparagraph and both are under pressure \stopparagraph
+\startparagraph we need to distinguish between art and useability \stopparagraph
+\startparagraph typography is a tool, not an aim \stopparagraph
+\stoptitle
+
+\starttitle[title={Relevance of ligatures}]
+\startparagraph save space (less medium needed) \stopparagraph
+\startparagraph kind of arbitrary applied / provided \stopparagraph
+\startparagraph less relevant apart from look \stopparagraph
+\startparagraph alien for most readers \stopparagraph
+\startparagraph not always better readable \stopparagraph
+\startparagraph better spend energy elsewhere \stopparagraph
+\stoptitle
+
+\page
+
+\usemodule[punk] \usetypescript[punk]
+
+\startstandardmakeup
+
+ \definedfont[demo@punk at 40pt] \setupinterlinespace \EnableRandomPunk
+
+ Should we really care about such features in a time when kids no
+ longer need to write and don't seem to care at all about how things
+ look.
+
+\stopstandardmakeup
+
+\stoptext
diff --git a/doc/context/presentations/bachotex/2016/bachotex-2016-opentype.pdf b/doc/context/presentations/bachotex/2016/bachotex-2016-opentype.pdf
new file mode 100644
index 000000000..cacdc4c56
--- /dev/null
+++ b/doc/context/presentations/bachotex/2016/bachotex-2016-opentype.pdf
Binary files differ
diff --git a/doc/context/presentations/bachotex/2016/bachotex-2016-opentype.tex b/doc/context/presentations/bachotex/2016/bachotex-2016-opentype.tex
new file mode 100644
index 000000000..aa9cb60fd
--- /dev/null
+++ b/doc/context/presentations/bachotex/2016/bachotex-2016-opentype.tex
@@ -0,0 +1,631 @@
+\usemodule[present-banner]
+
+\startdocument
+ [title={OPENTYPE FONTS},
+ subtitle={the generic loader},
+ location={Hans Hagen \endash\ bacho\TeX\ 2016}]
+
+\starttitle[title={how engines sees a font}]
+
+\startsubject[title={\TeX}]
+
+ \highlight [nb] {fields:} width, height, depth, italic correction, kern table,
+ ligature tree, vf commands, next size pointer, extensible specification
+ \highlight [nb] {and} a set of text and math parameters
+
+\stopsubject
+
+\startsubject[title={\pdfTeX}]
+
+ \highlight [nb] {extra fields:} left protruding, right protruding, expansion
+ factor \highlight [nb] {and} parameters to control these
+
+\stopsubject
+
+\startsubject[title={\LuaTeX}]
+
+ \highlight [nb] {extra fields:} math top accent, math bot accent, tounicode,
+ adapted extensible specification, vertical variants, horizontal variants,
+ name, index, used status, math kerns \highlight [nb] {and} extra parameters
+ \highlight [nb] {and} math constants \highlight [nb] {and} no 8~bit
+ limitations
+
+\stopsubject
+
+\startsubject[title={\XeTeX}]
+
+ probably something similar
+
+\stopsubject
+
+\stoptitle
+
+\starttitle[title={font handling}]
+
+\startsubject[title={loading opentype font data}]
+
+ \startitemize
+ \startitem
+ till recently we used the built|-|in fontforge loader library
+ \stopitem
+ \startitem
+ but now we use a recently written \Lua\ loader
+ \stopitem
+ \startitem
+ but use a similar feature handler
+ \stopitem
+ \startitem
+ in \ConTeXt\ one can fall back to the old loader/handler
+ \stopitem
+ \stopitemize
+
+\stopsubject
+
+\startsubject[title={applying (opentype) features}]
+
+ \highlight [nb] {generic modes:} base, node \crlf
+ \highlight [nb] {\ConTeXt\ modes:} base, node, auto, dynamic
+
+\stopsubject
+
+\startsubject[title={locating (opentype) fonts}]
+
+ \startitemize
+ \startitem
+ \highlight [nb] {file}: kpse in generic, resolvers in \ConTeXt
+ \stopitem
+ \startitem
+ \highlight [nb] {name}: simple in generic, extended in \ConTeXt,
+ different in \LaTeX
+ \stopitem
+ \startitem
+ \highlight [nb] {spec}: not in generic (uses font database)
+ \stopitem
+ \startitem
+ \highlight [nb] {virtual}: not in generic
+ \stopitem
+ \startitem
+ \highlight [nb] {lua}: delegated to low level interfaces
+ \stopitem
+ \stopitemize
+
+\stopsubject
+
+\stoptitle
+
+\starttitle[title={preparations}]
+
+\startsubject[title={after loading}]
+
+ \startitemize
+ \startitem
+ initialize format driven substitution
+ \stopitem
+ \startitem
+ initialize format driven positioning
+ \stopitem
+ \startitem
+ enable analysis of states/properties
+ \stopitem
+ \startitem
+ initialize additional data for engine (protrusion, expansion, extend,
+ slant)
+ \stopitem
+ \startitem
+ apply user or \TeX\ format extensions
+ \stopitem
+ \startitem
+ apply manipulations before and after loading
+ \stopitem
+ \startitem
+ (build virtual fonts)
+ \stopitem
+ \startitem
+ enable special script handlers (fuzzy side of opentype)
+ \stopitem
+ \startitem
+ pass metrics and some metadata to \TeX
+ \stopitem
+ \stopitemize
+
+\stopsubject
+
+\startsubject[title={benefit}]
+
+ efficient access to all font properties for additional processing beforehand
+ or afterwards
+
+\stopsubject
+
+\stoptitle
+
+\starttitle[title={processing}]
+
+\startsubject[title={steps}]
+
+ \startitemize
+ \startitem
+ (comes after hyphenation)
+ \stopitem
+ \startitem
+ first identifies to be handled modes
+ \stopitem
+ \startitem
+ normalization (in \ConTeXt) node list
+ \stopitem
+ \startitem
+ delegate handling to \TeX\ or \Lua
+ \stopitem
+ \startitem
+ when using \Lua\ features are applied in prescribed order:
+ substitution, positioning, etc.
+ \stopitem
+ \startitem
+ as last step positioning is finalized (left/right kern injection,
+ space kerning, anchoring, cursives)
+ \stopitem
+ \stopitemize
+
+\stopsubject
+
+\startsubject[title={remarks}]
+
+ \startitemize
+ \startitem
+ efficient contextual analysis is|-|non trivial
+ \stopitem
+ \startitem
+ discretionaries need special care: ...pre ...replace... post...
+ \stopitem
+ \startitem
+ there is no real limit in extensions
+ \stopitem
+ \startitem
+ it's not too hard to inject experimental code
+ \stopitem
+ \startitem
+ so users can add their own features
+ \stopitem
+ \startitem
+ some day there may be alternative handlers
+ \stopitem
+ \stopitemize
+
+\stopsubject
+
+\stoptitle
+
+\starttitle[title={math}]
+
+\startsubject[title={format}]
+
+ the opentype math specification stays close to \TeX, but has extensions and
+ more control (see articles & presentations by Ulrik Vieth)
+
+\stopsubject
+
+\startsubject[title={loading}]
+
+ \startitemize
+ \startitem
+ maps more or less directly onto internal structures
+ \stopitem
+ \startitem
+ in \ConTeXt\ we use(d) virtual unicode fonts awaiting lm/gyre
+ \stopitem
+ \stopitemize
+
+\stopsubject
+
+\startsubject[title={processing}]
+
+ character mapping and special element handling remains macro package
+ dependent
+
+\stopsubject
+
+\startsubject[title={construction}]
+
+ \startitemize
+ \startitem
+ we split code paths when needed: traditional or opentype (no longer
+ heuristics)
+ \stopitem
+ \startitem
+ the \luaTeX\ engine provides much control over spacing and a bit more
+ over rendering
+ \stopitem
+ \stopitemize
+
+\stopsubject
+
+\stoptitle
+
+\starttitle[title={the basics of loading}]
+
+\startsubject[title={the format}]
+
+ \startitemize
+ \startitem
+ it evolved out of competing formats by apple, microsoft and adobe
+ \stopitem
+ \startitem
+ two flavours can normally be recognized by suffix: \type {ttf} and
+ \type {otf}
+ \stopitem
+ \startitem
+ main differences are bounding box info, global kern tables, cubic vs
+ quadratic curves
+ \stopitem
+ \startitem
+ multiple sub fonts inside \type {ttc} files (font collections)
+ \stopitem
+ \startitem
+ it's considered a standard (so it should be possible to implement)
+ \stopitem
+ \stopitemize
+
+\stopsubject
+
+\startsubject[title={the specification}]
+
+ \startitemize
+ \startitem
+ the only useable reference is on the microsoft website
+ \stopitem
+ \startitem
+ (the iso mpeg standard is more or less a bunch of ugly rendered
+ webpages)
+ \stopitem
+ \startitem
+ trial and error helps understanding/identifying fuzzy aspects
+ \stopitem
+ \stopitemize
+
+\stopsubject
+
+\stoptitle
+
+\starttitle[title={the available loaders}]
+
+\startsubject[title={the fontforge loader}]
+
+ \startitemize
+ \startitem
+ offers the same view on the font as the editor (good for debugging)
+ \stopitem
+ \startitem
+ in order to process a font some optimal data structures are created
+ after loading
+ \stopitem
+ \startitem
+ we cache fonts because loading and creating these structures takes
+ time and it saves memory too
+ \stopitem
+ \startitem
+ fontforge has a lot of heuristics (catching issues collected over
+ time) but these are hard to get rid of when they're wrong
+ \stopitem
+ \stopitemize
+
+\stopsubject
+
+\startsubject[title={the lua loader}]
+
+ \startitemize
+ \startitem
+ this started out as experiment for loading outlines in \MetaFun
+ \stopitem
+ \startitem
+ it avoids the conversion to optimal structures for handling
+ \stopitem
+ \startitem
+ we can hook in better heuristics (data is more raw)
+ \stopitem
+ \startitem
+ it fits in the wish for maximum flexibility (next stage \ConTeXt)
+ \stopitem
+ \startitem
+ it's rather trivial to extend and adapt without hard coding
+ \stopitem
+ \startitem
+ the performance can be a bit less on initial loading (pre|-|cache)
+ but there is a bit of room to improve
+ \stopitem
+ \startitem
+ it's much more efficient in identifying fonts (not a real issue in
+ practice)
+ \stopitem
+ \startitem
+ in practice most fonts behave ok (no recovery needed) but there are
+ some sloppy fonts around
+ \stopitem
+ \stopitemize
+
+\stopsubject
+
+\stoptitle
+
+\starttitle[title={what do we load}]
+
+\startsubject[title={tables}]
+
+ \startitemize
+ \startitem
+ opentype is mostly tables with lots of subtables
+ \stopitem
+ \startitem
+ there are required, truetype outline, postscript outline, (svg and
+ bitmap), typography & additional ones
+ \stopitem
+ \startitem
+ the typographic tables specify transformations to apply (gdef, gsub,
+ gpos)
+ \stopitem
+ \stopitemize
+
+\stopsubject
+
+\startsubject[title={calculations}]
+
+ \startitemize
+ \startitem
+ as we need ht/dp we need to calculate the boundingbox of postscript
+ outlines (cff parser)
+ \stopitem
+ \startitem
+ internally we use unicodes instead of indices
+ \stopitem
+ \startitem
+ we need to identify/filter the right unicode information
+ \stopitem
+ \startitem
+ we want to do more so we need to carry around more info (tounicode etc)
+ \stopitem
+ \stopitemize
+
+\stopsubject
+
+\startsubject[title={pitfalls}]
+
+ \startitemize
+ \startitem
+ there is no real consistent approach to use of basic features:
+ single, one to multiple, multiple to one & many to many replacements,
+ and look ahead and/or back based solutions
+ \stopitem
+ \startitem
+ in principle consistent families like lm/gyre could share common data
+ and logic but otherwise there is much diversity around
+ \stopitem
+ \stopitemize
+
+\stopsubject
+
+\stoptitle
+
+\starttitle[title={a few details}]
+
+\startsubject[title={loading}]
+
+ \startitemize
+ \startitem
+ load the file (subfont if needed) in a \Lua\ friendly format
+ \stopitem
+ \startitem
+ prepare for later processing and/or access
+ \stopitem
+ \startitem
+ optimize data structures
+ \stopitem
+ \startitem
+ cache the instance (and compile to bytecode)
+ \stopitem
+ \startitem
+ share loaded font data where possible
+ \stopitem
+ \startitem
+ initialize & mark enabled features
+ \stopitem
+ \startitem
+ pass metrics, parameters and some properties to \TeX
+ \stopitem
+ \stopitemize
+
+\stopsubject
+
+\startsubject[title={processing}]
+
+ \startitemize
+ \startitem
+ we need to run over enabled features (also virtual non|-|opentype
+ ones)
+ \stopitem
+ \startitem
+ we use lookup hashes to determine if action is needed
+ \stopitem
+ \startitem
+ if needed we access detailed data and apply it
+ \stopitem
+ \startitem
+ there can be a few but also many hundreds of loops over the node list
+ \stopitem
+ \startitem
+ contextual matching can make us end up with a real lot of access and
+ analysis
+ \stopitem
+ \startitem
+ descending into discretionaries adds significant overhead (so it's
+ optimized)
+ \stopitem
+ \stopitemize
+
+\stopsubject
+
+\stoptitle
+
+\starttitle[title={traditional fonts}]
+
+\startsubject[title={tfm}]
+
+ \startitemize
+ \startitem
+ there is a built|-|in loader for \type {tfm}, \type {ofm}, \type {vf}
+ and \type {ovf} files
+ \stopitem
+ \startitem
+ encoding and filename mapping is as usual (\type {enc} and \type
+ {map} files)
+ \stopitem
+ \startitem
+ (in the early days \ConTeXt\ filtered info from those \type {enc}
+ files too)
+ \stopitem
+ \stopitemize
+
+\stopsubject
+
+\startsubject[title={type one}]
+
+ \startitemize
+ \startitem
+ type one fonts have their own loader that gets information from \type
+ {afm} files
+ \stopitem
+ \startitem
+ the \type {pfb} file is consulted to get the index (to unicode)
+ mapping
+ \stopitem
+ \startitem
+ the \type {afm} loader was already written in \Lua\ but we now can also use
+ \Lua\ for the \type {pfb} file
+ \stopitem
+ \stopitemize
+
+\stopsubject
+
+\stoptitle
+
+\starttitle[title={remarks}]
+
+ \startitemize
+ \startitem
+ features like additional character kerning don't belong in the font
+ handler as they are (to some extent) macro package dependant
+ \stopitem
+ \startitem
+ the same is true for italic correction (often input related and
+ therefore a macro package specific issue)
+ \stopitem
+ \startitem
+ setting up protrusion and expansion is again somewhat macro package
+ dependent
+ \stopitem
+ \startitem
+ \ConTeXt\ has many extra font related mechanisms and features
+ (described in a more technical manual)
+ \stopitem
+ \blank
+ \startitem
+ this has to work well with the core subsystems: languages especially
+ hyphenators, specific script demands, typesetting (all kind), builders
+ (paragraph, page), etc.
+ \stopitem
+ \startitem
+ a complication is that we do this more and more in \Lua, but still need to
+ support the built|-|in mechanismsm too
+ \stopitem
+ \blank
+ \startitem
+ the interfacing to macro packages differs (for plain \TeX\ we use
+ code that ships with \ConTeXt)
+ \stopitem
+ \startitem
+ for bugs and issues of with fonts in \ConTeXt\ you use its mailing list (or
+ mail me)
+ \stopitem
+ \startitem
+ the \LaTeX\ interface is handled by Philipp Gesang
+ \stopitemize
+
+\stoptitle
+
+\starttitle[title={future}]
+
+ \startitemize
+ \startitem
+ we'll improve handling of border cases (within the constraints of
+ performance)
+ \stopitem
+ \startitem
+ we might provide a few more hooks for plug|-|ins
+ \stopitem
+ \startitem
+ the type one \type {pfb} reader will be extended to provide outlines
+ (not complex, needed for \MetaFun)
+ \stopitem
+ \startitem
+ we keep playing with extra new features and virtual fonts
+ \stopitem
+ \blank
+ \startitem
+ maybe some more code can be made generic (fwiw)
+ \stopitem
+ \stopitemize
+
+\stoptitle
+
+\starttitle[title={credits}]
+
+ \startitemize
+ \startitem
+ Kai Eigner and Ivo Geradts for (experimental) patches in the handlers
+ for rare, complex & creepy fonts
+ \stopitem
+ \startitem
+ Philipp Gesang for binding the generic code to \LaTeX\ font mechanims.
+ \stopitem
+ \startitem
+ Idris Samawi Hamid for testing and providing the very complex and
+ demanding Husayni font
+ \stopitem
+ \startitem
+ Hartmut Henkel for the initial cleaning up of expansion and protrusion
+ \stopitem
+ \startitem
+ Taco Hoekwater for the original loader and discussions and a lot more
+ \stopitem
+ \startitem
+ Boguslaw Jackowski and friends for the fonts and patience with us
+ \stopitem
+ \startitem
+ Dohyun Kim for testing and suggestions on CJK font support
+ \stopitem
+ \startitem
+ Mojca Miklavec for distributions, managing us, and basically everything
+ \stopitem
+ \startitem
+ Luigi Scarso for patiently testing and managing my patches and testing
+ very beta code
+ \stopitem
+ \startitem
+ Thomas Schmitz for using betas in deadline critital book production
+ and making sure we patch fast
+ \stopitem
+ \startitem
+ Ton Otten for permitting me to work on all this \TeX\ related stuff for
+ ever and ever (and using to the extreme)
+ \stopitem
+ \startitem
+ Wolfgang Schuster for knowing and testing every detail of \ConTeXt\
+ and writing selectfont (for system fonts)
+ \stopitem
+ \blank
+ \startitem
+ and all (\ConTeXt) users who patiently accept betas and testing
+ \stopitem
+ \stopitemize
+
+\stoptitle
+
+\stopdocument
diff --git a/doc/context/presentations/bachotex/2016/bachotex-2016-toolbox.pdf b/doc/context/presentations/bachotex/2016/bachotex-2016-toolbox.pdf
new file mode 100644
index 000000000..1d93243f0
--- /dev/null
+++ b/doc/context/presentations/bachotex/2016/bachotex-2016-toolbox.pdf
Binary files differ
diff --git a/doc/context/presentations/bachotex/2016/bachotex-2016-toolbox.tex b/doc/context/presentations/bachotex/2016/bachotex-2016-toolbox.tex
new file mode 100644
index 000000000..972630fbb
--- /dev/null
+++ b/doc/context/presentations/bachotex/2016/bachotex-2016-toolbox.tex
@@ -0,0 +1,212 @@
+\usemodule[present-phone]
+
+\startdocument
+
+\startstandardmakeup[bottom=,top=]
+
+ \raggedcenter
+
+ \vfil\vfil
+ \dontleavehmode\scale[height=2ex]{\ssbf Grandpa's toolbox}
+ \vfil
+ \dontleavehmode\scale[height=1ex]{\ssbf (making closets)}
+ \vfil
+ \dontleavehmode\scale[height=2ex]{\ssbf Dad's hobby}
+ \vfil
+ \dontleavehmode\scale[height=1ex]{\ssbf (cleaning closets)}
+ \vfil
+ \dontleavehmode\scale[height=2ex]{\ssbf Uncle's friends}
+ \vfil
+ \dontleavehmode\scale[height=1ex]{\ssbf (talking closets)}
+ \vfil
+ \vfil
+ \dontleavehmode\scale[width=0.45\textwidth]{\ssbf bacho\TeX\ 2016}
+ \vfil\vfil\vfil\vfil
+
+\stopstandardmakeup
+
+% walk in front
+% use my personal phone
+
+\startsection[title={closets}]
+ \startitemize
+ \startitem there's closets and closets \stopitem
+ \startitem take the ones you put stuff in ... e.g.\ that you buy at ikea \stopitem
+ \startitem you have to assemble them so you get out your toolbox \stopitem
+ \startitem this kid sits next to you wondering what that tool is \stopitem
+ \startitem what is natural for you to use might not be so for them \stopitem
+ \startitem but grandpa likes to carry over his knowledge and experiences \stopitem
+ \stopitemize
+\stopsection
+
+% \startitem look at their toolbox in their garage or shed wondering \unknown \stopitem
+% \startitem \unknown\ what tools their kids will keep (or even understand) \stopitem
+
+\startsection[title={interest}]
+ \startitemize
+ \startitem but \unknown\ kids get their information from the internet, not from you \stopitem
+ \startitem (they watch discovery channel or national geographic and know a lot) \stopitem
+ \startitem or they look at vloggers (no bloggers) trying to learn something \stopitem
+ \startitem and they keep moving on \unknown\ and on \stopitem
+ \startitem do gp's live long tools really make sense to them? \stopitem
+ \stopitemize
+\stopsection
+
+\startsection[title={grandpas}]
+ \startitemize
+ \startitem grandpa also has a vlogger, he is called knuth \stopitem
+ \startitem gp is as locked into tex as the kids are into apps \stopitem
+ \startitem he's a do-it-him-self kind of person \stopitem
+ \startitem will his grandkids love watching him crafting \stopitem
+ \startitem and hear his stories about meetings and journals \stopitem
+ \stopitemize
+\stopsection
+
+\startsection[title={writing}]
+ \startitemize
+ \startitem will future generations still putting things on paper \stopitem
+ \startitem just watch how handwriting evolves \stopitem
+ \startitem compare todays scribbles to your grandmothers letters \stopitem
+ \startitem the possibility of reuse doesn't even ring a bell \stopitem
+ \startitem after all, why should they keep that text \stopitem
+ \startitem eventually they will de-facebook, un-twitter and no-app \stopitem
+ \startitem and who cares what get lost (most eventually gets lost anyway) \stopitem
+ \stopitemize
+\stopsection
+
+\startsection[title={quality}]
+ \startitemize
+ \startitem say you help someone out with some graphic work \stopitem
+ \startitem you send them an example \stopitem
+ \startitem and then get remarks based on previewing on a phone \stopitem
+ \startitem possibly with a broken screen \stopitem
+ \startitem of a fuzzy backlight \stopitem
+ \startitem or some blue|-|filtering going on \stopitem
+ \startitem no color profiled monitors needed \stopitem
+ \stopitemize
+\stopsection
+
+\startsection[title={low impact}]
+ \startitemize
+ \startitem going to a meeting with you is no problem \stopitem
+ \startitem they are even willing to attend workshops \stopitem
+ \startitem the impressions they get are great, but what was it about? \stopitem
+ \startitem oh, that backslash (slanted thingie), they might recognize that (and never need it) \stopitem
+ \startitem fonts, languages, clever solutions, beautiful macros \unknown\ what impresses us
+ leaves no dent \stopitem
+ % \startitem it all sounds polish to them \stopitem
+ \startitem and let's face it: topics get weirder (much has been told by now) \stopitem
+ \stopitemize
+\stopsection
+
+\startsection[title={devices}]
+ \startitemize
+ \startitem phones, phablets and tables .. retinal project some day \stopitem
+ \startitem epub devices are accepted, probably for as long as phone battery life is bad \stopitem
+ \startitem quality rendering is irrelevant \stopitem
+ \startitem larger laptops are still popular but not for long \stopitem
+ \startitem so in the end ... do they need typesetting at all \stopitem
+ \startitem a one|-|time enforced user doesn't count \stopitem
+ \startitem does \quote {installed on 3 billion devices} really impress \stopitem
+ \stopitemize
+\stopsection
+
+% \startsection[title={moving on}]
+% \startitemize
+% \startitem not real when no ads \stopitem
+% \startitem why should one pay \stopitem
+% \startitem how many subscriptions do you need \stopitem
+% \startitem no tv, no books, no newspapers \stopitem
+% \stopitemize
+% \stopsection
+
+% \startsection[title={throw away}]
+% \startitemize
+% \startitem we store and trust the cloud \stopitem
+% \startitem delete when space is needed \stopitem
+% \startitem loose or crash, and just forget about it \stopitem
+% \startitem one moves from phone to phone \stopitem
+% \startitem device full, buy new, wipe old and sell or give away \stopitem
+% \stopitemize
+% \stopsection
+
+\startsection[title={future}]
+ \startitemize
+ \startitem accept your fate: what is current now, is obsolete tomorrow (take cars) \stopitem
+ \startitem how to determine what is stable (quality) anyway (how much stayed) \stopitem
+ \startitem how to locate the good in the pool of mediocre \stopitem
+ \startitem how to be able to use your live long tools at work \stopitem
+ \startitem just in a few generations: scratches, chisseling, scribes, monks, gutenberg, tex, ... \stopitem
+ \startitem the longer we live, the more old fashioned we'll look: we live on islands of technology \stopitem
+ \stopitemize
+\stopsection
+
+\startsection[title={history cycles}]
+ \startitemize
+ \startitem there is this historic cycle (reinvent the wheel) \stopitem
+ \startitem for instance we currently see a revival of vinyl \stopitem
+ \startitem is this a side effect of crappy mp3 and/or poor digital equipment? \stopitem
+ \startitem does it mean that eventually paper books will florish again too? \stopitem
+ \startitem and that old fashioned rendering and printing will return? \stopitem
+ \stopitemize
+\stopsection
+
+\startsection[title={consider the following}]
+ \startitemize
+ \startitem will superintelligence really show up soon and make all our efforts futile \stopitem
+ \startitem maybe moderate artificial intelligence is already a killer \stopitem
+ \startitem scifi books seldom mention reading books \stopitem
+ \startitem let alone high quality typeset books \stopitem
+ \startitem we have an experimental hive|-|mind outside the canteen here that we're learning to typeset a paragraph\stopitem
+ \stopitemize
+\stopsection
+
+\startsection[title={think of this 1}]
+ \startitemize
+ \startitem there is something called context \stopitem
+ \startitem say that we want to make it popular \stopitem
+ \startitem we make it into an phone app \stopitem
+ \startitem that sits in its own namespace \stopitem
+ \startitem but wants access to all your document \stopitem
+ \startitem and your adressbook, so that we can tell your friends \stopitem
+ \startitem it is free for personal use \stopitem
+ \startitem but mixed with advertisements \stopitem
+ \startitem and it predicts your favourite look and feel \stopitem
+ \startitem of course it collects your data (for your benefit) \stopitem
+ \startitem it organizes your content the way it thinks best \stopitem
+ \startitem and offers you only all kind of benefits \stopitem
+ \startitem and it keep buzzing and popping up \stopitem
+ \startitem this is what kids find normal \stopitem
+ \startitem and discard at a daily basis \stopitem
+ \stopitemize
+\stopsection
+
+\startsection[title={think of this 2}]
+ \startitemize
+ \startitem or we can take the business view (for the old folks) \stopitem
+ \startitem let's call it context professional or enterprise \stopitem
+ \startitem subscription (only affordable for large companies, no simple plans) \stopitem
+ \startitem support is charged per cpu / core \stopitem
+ \startitem forget about the small, go 5 digit numbers \stopitem
+ \startitem configurations happen via the cloud (only) \stopitem
+ \startitem we use open source but don't tell that \stopitem
+ \startitem we make sure we use a many page license, we share because we ... \stopitem
+ \startitem we then need investors ... going big is a \quote {must} \stopitem
+ \startitem so eventually we sell ourselves \stopitem
+ \startitem naturally we get sold over and over again \stopitem
+ \startitem and then quit and start new \stopitem
+ \startitem and expect sympathy from users in the process \stopitem
+ \stopitemize
+\stopsection
+
+\startsection[title={so \unknown\ grandpa}]
+ \startitemize
+ \startitem do we really want that kind of adapting \stopitem
+ \startitem do we really expect next generations to take over \stopitem
+ \startitem maybe we should keep tex in our closet \stopitem
+ \startitem you don't want it to become a dirty (highway) closet, does you? \stopitem
+ \startitem think different, think like kids (jc example) \stopitem
+ \stopitemize
+\stopsection
+
+\stopdocument
diff --git a/doc/context/presentations/context/2011/context-2011-ebook-export.pdf b/doc/context/presentations/context/2011/context-2011-ebook-export.pdf
new file mode 100644
index 000000000..327a25bd3
--- /dev/null
+++ b/doc/context/presentations/context/2011/context-2011-ebook-export.pdf
Binary files differ
diff --git a/doc/context/presentations/context/2011/context-2011-ebook-export.tex b/doc/context/presentations/context/2011/context-2011-ebook-export.tex
new file mode 100644
index 000000000..dfa050ae4
--- /dev/null
+++ b/doc/context/presentations/context/2011/context-2011-ebook-export.tex
@@ -0,0 +1,94 @@
+% \enablemode[print]
+
+\usemodule[present-overlap,abr-02]
+
+\startdocument
+ [title=e-books,
+ subtitle=old wine in new bottles,
+ location=\ConTeXt\ Meeting 2011]
+
+\Topic{Some observations}
+
+\StartSteps
+\startitemize
+\item Most ebooks are just books (or try to be). \FlushStep
+\item Only a small portion has (or needs) design. \FlushStep
+\item To what extent appreciation matters is hard to measure. \FlushStep
+\item Vendor locking is spoiling much. \FlushStep
+\item 10 years of low res screens have made readers tolerant. \FlushStep
+\item Publishers already lost the edge. \FlushStep
+\item Eventually authors will publish themselves. \FlushStep
+\stopitemize
+\StopSteps
+
+% Does quality matter (just look around you)
+% Does livetime matter (much tolerance for potentially crappy old stuff anyway)
+% Does timebound look and feel matter (it helps to put into perspective)
+
+\Topic{What is an ebook}
+
+\StartSteps
+\startitemize
+\item Nicest is it being a \PDF\ (some design). \FlushStep
+\item Easiest is it being an \XHTML\ file (with some \CSS). \FlushStep
+\item Pointless it is being a frozen app. \FlushStep
+\item We can already provide a \PDF\ for paper and screen for quite a while. \FlushStep
+\item We can consider providing an \XHTML\ alongside as reflowable variant. \FlushStep
+\item Who knows what we can provide in the future. \FlushStep
+\stopitemize
+\StopSteps
+
+\Topic{The starting point}
+
+\StartSteps
+\startitemize
+\item No output is better than the input. \FlushStep
+\item Fixing bad coding is a waste of energy. \FlushStep
+\item Not that many publishers want to invest in coding. \FlushStep
+\item Not that many tools enforce structure. \FlushStep
+\item The real good devices still have to come but we can be ready for it. \FlushStep
+\item The intelligence has to be in the macro package, not in the engine. \FlushStep
+\stopitemize
+\StopSteps
+
+\Topic{Implementation}
+
+\StartSteps
+\startitemize
+\item Some users have to produce tagged pdf (to satisfy validators). \FlushStep
+\item It helps that many commands in \CONTEXT\ are built upon a relatively small generic set. \FlushStep
+\item So, given some basic structure, supporting tags is easy. \FlushStep
+\item It integrates in the core. \FlushStep
+\item And as a side effect an export was equally easy to support. \FlushStep
+\item The overhead is not that large (upto 10\%). \FlushStep
+\item Instead of going for freaky solutions (no need for challenges) we assume proper structure. \FlushStep
+\item It's not to hard to extend the current features. \FlushStep
+\stopitemize
+\StopSteps
+
+\Topic{Consequence for users}
+
+\StartSteps
+\startitemize
+\item Use \type{\startchapter} cum suis, but that was already the \MKIV\ fashion. \FlushStep
+\item Preferable use \type{\startitem} instead of \type {\item}. \FlushStep
+\item Playing safe means tagging paragraphs with \type {\startparagraph}. \FlushStep
+\item Use style environments instead of font switches. \FlushStep
+\item Just use whatever structural markup that \CONTEXT\ already provides for ages. \FlushStep
+\stopitemize
+\StopSteps
+
+\Topic{An example}
+
+\StartSteps
+\startitemize
+\item A normal input with \TEX\ commands (cld-mkiv.tex) \FlushStep
+\item Regular (tagged) output (cld-mkiv.pdf) \FlushStep
+\item Structured output (cld-mkiv.xml) \FlushStep
+\item Reflowable output (cld-mkiv-export.xhtml) \FlushStep
+\item Dynamic styling (cld-mkiv-export.css) \FlushStep
+\item Basic template (cld-mkiv-export.template) \FlushStep
+\stopitemize
+\StopSteps
+
+\stopdocument
diff --git a/doc/context/presentations/context/2011/context-2011-mathml-update.pdf b/doc/context/presentations/context/2011/context-2011-mathml-update.pdf
new file mode 100644
index 000000000..b6f00d904
--- /dev/null
+++ b/doc/context/presentations/context/2011/context-2011-mathml-update.pdf
Binary files differ
diff --git a/doc/context/presentations/context/2011/context-2011-mathml-update.tex b/doc/context/presentations/context/2011/context-2011-mathml-update.tex
new file mode 100644
index 000000000..fb18ef36a
--- /dev/null
+++ b/doc/context/presentations/context/2011/context-2011-mathml-update.tex
@@ -0,0 +1,67 @@
+\usemodule[present-overlap,abr-02]
+
+\startdocument
+ [title=MathML,
+ subtitle=or math in general,
+ location=\ConTeXt\ Meeting 2011]
+
+\Topic{Some developments}
+
+\StartSteps
+\startitemize
+\startitem \MATHML\ started as an interchange format on the one hand (content) \stopitem \FlushStep
+\startitem but also provides a rendering variant (presentation) \stopitem \FlushStep
+\startitem and in the meantime has been merged with what is called open math \stopitem \FlushStep
+\startitem we now have \MATHML\ 3 and \CONTEXT\ has been updated a while ago to support this \stopitem \FlushStep
+\stopitemize
+\StopSteps
+
+\Topic{Some history}
+
+\StartSteps
+\startitemize
+\startitem we supported \MATHML\ right from the start \stopitem \FlushStep
+\startitem in \MKII\ quite some data juggling takes place because we need to do some analysis \stopitem \FlushStep
+\startitem the \MKII\ code has been upgraded a few times but is now frozen \stopitem \FlushStep
+\startitem in \MKIV\ we have rewritten all code using the first version of the new \XML\ parser \stopitem \FlushStep
+\startitem it currently is a mixture of \LUA, \TEX\ and \METAPOST \stopitem \FlushStep
+\startitem there will probably be a partial rewrite some day in the future \stopitem \FlushStep
+\stopitemize
+\StopSteps
+
+\Topic{\UNICODE}
+
+\StartSteps
+\startitemize
+\startitem in the meantime \UNICODE\ has been extended with math \stopitem \FlushStep
+\startitem in the past in \MATHML\ special characters and symbols were accessed by entity \stopitem \FlushStep
+\startitem but now we can exclusively use \UNICODE\ characters and forget about the entities \stopitem \FlushStep
+\startitem no matter what, we do need to do some analysis on the content of (presentation) elements \stopitem \FlushStep
+\stopitemize
+\StopSteps
+
+\Topic{Rendering}
+
+\StartSteps
+\startitemize
+\startitem we still provide rendering options as there might be (cultural) differences \stopitem \FlushStep
+\startitem in both marks we just need to load the module \stopitem \FlushStep
+\startitem in \MKIV\ you need a reasonable namespace directive \stopitem \FlushStep
+\startitem content markup can give better results than presentation markup \stopitem \FlushStep
+\stopitemize
+\StopSteps
+
+\Topic{Consequences}
+
+\StartSteps
+\startitemize
+\startitem we already use a database or definitions \stopitem \FlushStep
+\startitem we won't go the (somewhat extreme) route of more commands \stopitem \FlushStep
+\startitem we're working on a subsystem for field driven rendering \stopitem \FlushStep
+\startitem bidirectional math already works but will be integrated in the layout model \stopitem \FlushStep
+\startitem cultural specific solutions are possible (we already provide language specific functions) \stopitem \FlushStep
+\startitem more information is carried around (for rendering as well as export), for instance functions \stopitem \FlushStep
+\stopitemize
+\StopSteps
+
+\stopdocument
diff --git a/doc/context/presentations/context/2011/context-2011-metapost-how-we-adapt.pdf b/doc/context/presentations/context/2011/context-2011-metapost-how-we-adapt.pdf
new file mode 100644
index 000000000..0f7fef0ee
--- /dev/null
+++ b/doc/context/presentations/context/2011/context-2011-metapost-how-we-adapt.pdf
Binary files differ
diff --git a/doc/context/presentations/context/2011/context-2011-metapost-how-we-adapt.tex b/doc/context/presentations/context/2011/context-2011-metapost-how-we-adapt.tex
new file mode 100644
index 000000000..77a9cf993
--- /dev/null
+++ b/doc/context/presentations/context/2011/context-2011-metapost-how-we-adapt.tex
@@ -0,0 +1,104 @@
+% \enablemode[print]
+
+\usemodule[present-overlap,abr-02]
+
+\startdocument
+ [title=MetaPost,
+ subtitle=how we adapt,
+ location=\ConTeXt\ Meeting 2011]
+
+\Topic{Development Stage}
+
+\StartSteps
+\startitemize
+\startitem we started with simple usage (logos) and \POSTSCRIPT\ output \stopitem \FlushStep
+\startitem then we moved on to conversion to \PDF\ using \TEX\ macro solution \stopitem \FlushStep
+\startitem this has the advantage that fonts are handled by \TEX \stopitem \FlushStep
+\startitem for a long time this was a generic solution (later became the \MKII\ variant) \stopitem \FlushStep
+\stopitemize
+\StopSteps
+
+\Topic{Development Stage}
+
+\StartSteps
+\startitemize
+\startitem we added some extensions (transparency, cmyk, etc) and \METAFUN\ showed up \stopitem \FlushStep
+\startitem that extension mechanism uses special colors as signals \stopitem \FlushStep
+\startitem we always collected btex ... etex in order to speed up processing \stopitem \FlushStep
+\startitem in addition we added textext and similar features \stopitem \FlushStep
+\startitem communication between \METAFUN\ and \CONTEXT\ became more advanced over time \stopitem \FlushStep
+\stopitemize
+\StopSteps
+
+\Topic{Development Stage}
+
+\StartSteps
+\startitemize
+\startitem when \LUATEX\ showed up a substitution based lua converter was written \stopitem \FlushStep
+\startitem later when \LPEG\ came around an experimental lpeg converter showed up \stopitem \FlushStep
+\startitem some changes were made to textext processing and run management \stopitem \FlushStep
+\stopitemize
+\StopSteps
+
+\Topic{Development Stage}
+
+\StartSteps
+\startitemize
+\startitem the arrival of mplib had rather big consequences \stopitem \FlushStep
+\startitem integration of \METAFUN\ became less of a runtime burden \stopitem \FlushStep
+\startitem a more definitive lpeg converter was written \stopitem \FlushStep
+\startitem text handling was kept internal (but still needs two passes) \stopitem \FlushStep
+\stopitemize
+\StopSteps
+
+\Topic{Development Stage}
+
+\StartSteps
+\startitemize
+\startitem some extensions were changed to use the new pre/postscripts functionality \stopitem \FlushStep
+\startitem the lpeg converter was adapted accordingly \stopitem \FlushStep
+\startitem multiple (independent) \METAPOST\ instances were now supported \stopitem \FlushStep
+\startitem the chemical code was overhauled and moved to the core \stopitem \FlushStep
+\stopitemize
+\StopSteps
+
+\Topic{Development Stage}
+
+\StartSteps
+\startitemize
+\startitem by now all extensions use pre/postscripts \stopitem \FlushStep
+\startitem this made it easier to add more extend functionality \stopitem \FlushStep
+\startitem again the lpeg converter was adapted (simplified) \stopitem \FlushStep
+\startitem it became possible to do some color trickery with text \stopitem \FlushStep
+\startitem but (till now) color spaces are more complex (mp has a mixed model) \stopitem \FlushStep
+\startitem so we might move towards a slightly different approach \stopitem \FlushStep
+\startitem a couple of helpers were added for Mojca (some more will follow) \stopitem \FlushStep
+\stopitemize
+\StopSteps
+
+\Topic{Development Stage}
+
+\StartSteps
+\startitemize
+\startitem we're now splitting the code in \MPII\ and \MPIV\ code bases \stopitem \FlushStep
+\startitem from now on the focus will be on \MPIV \stopitem \FlushStep
+\startitem the (rather old) \METAFUN\ code will be cleaned up \stopitem \FlushStep
+\startitem where possible namespaces will be added \stopitem \FlushStep
+\startitem as \METAFUN\ us loaded runtime we see an impact on startup time (quite some files) \stopitem \FlushStep
+\startitem so maybe we will use a packed and/or zipped pseudo format file for faster loading \stopitem \FlushStep
+\stopitemize
+\StopSteps
+
+\Topic{Development Stage}
+
+\StartSteps
+\startitemize
+\startitem an overhaul of the flowchart code is on the agenda \stopitem \FlushStep
+\startitem we also want to finish (and cleanup) the chemical related code \stopitem \FlushStep
+\startitem simple data/graphics helpers will be provided (graph replacement) \stopitem \FlushStep
+\startitem and of course we keep moving on (who knows what \METAPOST\ 2 will bring us) \stopitem \FlushStep
+\startitem some examples: tests/mkiv/metapost/plugins-* \stopitem \FlushStep
+\stopitemize
+\StopSteps
+
+\stopdocument
diff --git a/doc/context/presentations/context/2011/context-2011-sorting-registers.pdf b/doc/context/presentations/context/2011/context-2011-sorting-registers.pdf
new file mode 100644
index 000000000..db0d9da2b
--- /dev/null
+++ b/doc/context/presentations/context/2011/context-2011-sorting-registers.pdf
Binary files differ
diff --git a/doc/context/presentations/context/2011/context-2011-sorting-registers.tex b/doc/context/presentations/context/2011/context-2011-sorting-registers.tex
new file mode 100644
index 000000000..f05290906
--- /dev/null
+++ b/doc/context/presentations/context/2011/context-2011-sorting-registers.tex
@@ -0,0 +1,161 @@
+% tests/mkiv/scripts/korean-005.tex
+% examplex elsewhere
+
+% \enablemode[print]
+
+\usemodule[present-overlap,abr-02]
+
+\startdocument
+ [title=Sorting,
+ subtitle=registers,
+ location=\ConTeXt\ Meeting 2011]
+
+\startluacode
+
+local function show(t,start,stop)
+ if type(t) == "table" then
+ start = start or 1
+ stop = stop or #t
+ for i=start,stop do
+ if i > start then
+ context.space()
+ end
+ if type(t[i]) == "number" then
+ context(utf.char(t[i]))
+ else
+ context(t[i])
+ end
+ end
+ elseif type(t) == "string" then
+ context(t)
+ elseif type(t) == "number" then
+ context(utf.char(t))
+ end
+end
+
+function context.ShowCharacterData(n)
+ local d = characters.data[n]
+ if d then
+ local bTR, bTD, eTD, eTR = context.bTR, context.bTD, context.eTD, context.eTR
+ context.bTABLE()
+ bTR() bTD() context("unicode") eTD() bTD() show(n) eTD() eTR()
+ bTR() bTD() context("shcode") eTD() bTD() show(characters.shchars [n]) eTD() eTR()
+ bTR() bTD() context("lccode") eTD() bTD() show(characters.lcchars [n]) eTD() eTR()
+ bTR() bTD() context("uccode") eTD() bTD() show(characters.ucchars [n]) eTD() eTR()
+ bTR() bTD() context("fscode") eTD() bTD() show(characters.fschars [n]) eTD() eTR() -- leadconsonant
+ bTR() bTD() context("specials") eTD() bTD() show(
+ characters.remap_hangul_syllabe(characters.specials[n]),2) eTD() eTR()
+ context.eTABLE()
+ end
+end
+
+\stopluacode
+
+\unexpanded\def\ShowCharacterData#1{\cldcommand{ShowCharacterData("#1")}}
+
+\Topic{The old way}
+
+\StartSteps
+\startitemize
+\startitem in \MKII\ sorting is delegated to \TEXUTIL\ i.e.\ a multipass action \stopitem \FlushStep
+\startitem encoding vectors are passed along \stopitem \FlushStep
+\startitem sort vectors depend on the language \stopitem \FlushStep
+\startitem there are the usual complications with direct characters and commands \stopitem \FlushStep
+\stopitemize
+\StopSteps
+
+\Topic{Moving on}
+
+\StartSteps
+\startitemize
+\startitem in \MKIV\ sorting happens during the run \stopitem \FlushStep
+\startitem we only have to deal with \UNICODE\ (utf) \stopitem \FlushStep
+\startitem sort vectors still depend on the language \stopitem \FlushStep
+\startitem sorting can be controlled by methods \stopitem \FlushStep
+\startitem there is no universal solution (conflicting user demands, mixed languages) \stopitem \FlushStep
+\stopitemize
+\StopSteps
+
+\Topic{Character data}
+
+\setupTABLE[background=color,backgroundcolor=lightgray,rulethickness=.75bp,framecolor=darkgray]
+
+\StartSteps
+\startcombination[5*1]
+ {\definedfont[Normal*none]\ShowCharacterData{a}} {regular\FlushStep}
+ {\definedfont[Normal*none]\ShowCharacterData{ä}} {accent\FlushStep}
+ {\definedfont[Normal*none]\ShowCharacterData{æ}} {ligature\FlushStep}
+ {\definedfont[adobemyungjostd-medium]\ShowCharacterData{그}} {hangul\FlushStep}
+ {\definedfont[adobemyungjostd-medium]\ShowCharacterData{학}} {hangul\FlushStep}
+\stopcombination
+\StopSteps
+
+\Topic{Sorting methods}
+
+\StartSteps
+\starttabulate[|l|l|r|]
+ \NC ch \NC raw character \NC \FlushStep \NC \NR
+ \NC uc \NC unicode \NC \FlushStep \NC \NR
+ \NC mm \NC mapping \NC minus \FlushStep \NC \NR
+ \NC zm \NC \NC zero \FlushStep \NC \NR
+ \NC pm \NC \NC plus \FlushStep \NC \NR
+ \NC mc \NC lower case \NC minus \FlushStep \NC \NR
+ \NC zc \NC \NC zero \FlushStep \NC \NR
+ \NC pc \NC \NC plus \FlushStep \NC \NR
+\stoptabulate
+\StopSteps
+
+\Topic{Predefined methods}
+
+\StartSteps
+\starttabulate[|l|l|]
+ \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
+
+\FlushStep
+
+\starttyping
+\enabletrackers[sorters.tests]
+\enabletrackers[sorters.methods]
+\stoptyping
+
+\FlushStep
+\StopSteps
+
+\Topic{An example (1)}
+
+\startbuffer
+àâá\index{àâá}
+aaa\index{aaa}
+aab\index{aab}
+Aaa\index{Aaa}
+Aab\index{Aab}
+\stopbuffer
+
+\StartSteps
+\typebuffer \FlushStep
+
+\startlines \getbuffer \stoplines \FlushStep
+\StopSteps
+
+\Topic{An example (2)}
+
+% \enabletrackers[sorters.tests]
+% \enabletrackers[sorters.methods]
+
+\setupregister[index][criterium=text,n=1,before=,after=]
+\defineframed[indexframed][align=normal,width=.2\textwidth,strut=no]
+
+\StartSteps
+\startcombination[4*1]
+ {\setupinteraction[state=stop]\indexframed{\placeregister[index][method={mm,mc,uc}]}} {mm,mc,uc\FlushStep}
+ {\setupinteraction[state=stop]\indexframed{\placeregister[index][method={pm,mc,uc}]}} {pm,mc,uc\FlushStep}
+ {\setupinteraction[state=stop]\indexframed{\placeregister[index][method={pc,mm,uc}]}} {pc,mm,uc\FlushStep}
+ {\setupinteraction[state=stop]\indexframed{\placeregister[index][method={mc,mm,uc}]}} {mc,mm,uc\FlushStep}
+\stopcombination
+\StopSteps
+
+\stopdocument
diff --git a/doc/context/presentations/context/2012/context-2012-after-the-cleanup.pdf b/doc/context/presentations/context/2012/context-2012-after-the-cleanup.pdf
new file mode 100644
index 000000000..dc0e85ed4
--- /dev/null
+++ b/doc/context/presentations/context/2012/context-2012-after-the-cleanup.pdf
Binary files differ
diff --git a/doc/context/presentations/context/2012/context-2012-after-the-cleanup.tex b/doc/context/presentations/context/2012/context-2012-after-the-cleanup.tex
new file mode 100644
index 000000000..a127ca09a
--- /dev/null
+++ b/doc/context/presentations/context/2012/context-2012-after-the-cleanup.tex
@@ -0,0 +1,162 @@
+\usemodule[present-stepwise,present-bars,abr-01]
+
+\startdocument
+ [title=After the cleanup,
+ color=darkred]
+
+\StartSteps
+
+\startsubject[title=The update]
+
+ \startitemize[packed]
+
+ \startitem The move to \MKIV\ is more than supporting an engine. \stopitem \FlushStep
+ \startitem It is a complete rewrite (pruning, extending, cleaning). \stopitem \FlushStep
+ \startitem Although somewhat crippled by the fact that we want to remain compatible. \stopitem \FlushStep
+ \startitem But sometimes we sacrifice compatibility by getting rid of old stuff. \stopitem \FlushStep
+
+ \stopitemize
+
+\stopsubject
+
+\startsubject[title=The current state]
+
+ \startitemize[packed]
+
+ \startitem A lot of work, more than I had thought, so it takes longer. \stopitem \FlushStep
+ \startitem Most \TEX\ code is done (some structure and column code left). \stopitem \FlushStep
+ \startitem New namespaces and helpers mostly done, but will be checked for constency. \stopitem \FlushStep
+
+ \stopitemize
+
+\stopsubject
+
+\StopSteps
+
+\page
+
+\StartSteps
+
+\startsubject[title=What is there todo]
+
+ \startitemize[packed]
+
+ \startitem Some code might become generalized (also depends on others). \stopitem \FlushStep
+ \startitem Layer and positioning code might get a more extensive \LUA\ and \XML\ interface. \stopitem \FlushStep
+ \startitem Structure related code will support setups (some already in place). \stopitem \FlushStep
+ \startitem New page builder variants will be explored (anyway more column support and floats). \stopitem \FlushStep
+ \startitem Math domains cq.\ dictionaries (basics already in place, just needs time). \stopitem \FlushStep
+ \startitem Math list optimization (pet project). \stopitem \FlushStep
+ \startitem Generate dependecy trees (easier now) and more consistent code loading order. \stopitem \FlushStep
+ \startitem All error messages needs checking (some gone, some not yet translated). \stopitem \FlushStep
+ \startitem Update all xml definitions (work in progress, also relates to wiki). \stopitem \FlushStep
+ \startitem Optimize positioning system (a bit more powerful now, but also more resources). \stopitem \FlushStep
+ \startitem More support for css like styling (makes it easier to share code). \stopitem \FlushStep
+ \startitem Modules (especially those for tracing) need to be normalized. \stopitem \FlushStep
+ \startitem Some styles (mostly private presentation styles) needs to be fixed. \stopitem \FlushStep
+ \startitem Pick up the \quote {lean and mean} \CONTEXT\ variant project. \stopitem \FlushStep
+ \startitem Now that we have more code isolated, we can define an api. \stopitem \FlushStep
+ \startitem Some manuals need to be updated (most still applies). \stopitem \FlushStep
+
+ \stopitemize
+
+\stopsubject
+
+\StopSteps
+
+\page
+
+\StartSteps
+
+\startsubject[title=What I have to keep in mind]
+
+ \startitemize[packed]
+
+ \startitem What is handy for me is not always handy for all users. \stopitem \FlushStep
+
+ \stopitemize
+
+\stopsubject
+
+\startsubject[title=But nevertheless there will be new things]
+
+ \startitemize[packed]
+
+ \startitem Elements of our processing framework will show up in the distribution. \stopitem \FlushStep
+ \startitem It's just more convenient to have one installation for related things. \stopitem \FlushStep
+ \startitem This is also why support for databases has been added recently. \stopitem \FlushStep
+ \startitem Running (blocking) \TEX\ jobs needs special treatment (ticket management). \stopitem \FlushStep
+ \startitem It makes sense to use the well developed \TDS\ infrastructure. \stopitem \FlushStep
+
+ \stopitemize
+
+\stopsubject
+
+\StopSteps
+
+\page
+
+\StartSteps
+
+\startsubject[title=Keep an eye on updates]
+
+ \startitemize[packed]
+
+ \startitem Rewriting the code base leads to bugs but these are often resolved quickly
+ (indeed by Wolfgang). \stopitem \FlushStep
+ \startitem Following the mailing list helps and nowadays the wiki is adapted close to
+ realtime (coordinated by Sietse). \stopitem \FlushStep
+ \startitem Changes in standards and related tools are supported and followed by those who
+ depend on them (ask Peter). \stopitem \FlushStep
+ \startitem Sometimes users have demands and these end up as extensions to existing
+ mechanisms (Aditya's elastic modules). \stopitem \FlushStep
+ \startitem Issues with platforms are often quickly dealt with (if Luigi doesn't know it
+ \unknown). \stopitem \FlushStep
+ \startitem And of course I add new things driven by projects, challenges (and an occasional
+ stack of new \CD's). \stopitem \FlushStep
+ \startitem New releases (and betas) are checked against a growing set of test files (Lukas
+ mails a report after each update). \stopitem \FlushStep
+ \stopitemize
+
+\stopsubject
+
+\StopSteps
+
+\page
+
+\StartSteps
+
+\startsubject[title=Just ask]
+
+ \startitemize[packed]
+
+ \startitem We started long ago with what ended up as \MKII\ and \MPII. \stopitem \FlushStep
+ \startitem We currently have \MKIV\ and \MPIV. \stopitem \FlushStep
+ \startitem It has some features that we tag as \MKVI. \stopitem \FlushStep
+ \startitem Recently \MKIX\ and \MKXI\ were introduced. \stopitem \FlushStep
+ \blank
+ \startitem Examples: \MKIV, \MKVI, \MKIX, \MKXI \stopitem \FlushStep
+ \blank
+ \startitem So, what should \MKIC\ provide \stopitem \FlushStep
+
+ \stopitemize
+
+\stopsubject
+
+\startsubject[title=What I'm working on]
+
+ \startitemize[packed]
+
+ \startitem Proper dependency chain so that we can make small dedicated formats. \stopitem \FlushStep
+ \startitem Support for typesetting from databases (text, graphics). \stopitem \FlushStep
+ \startitem Next iteration if (job) tickets processing system cq. framework. \stopitem \FlushStep
+
+ \stopitemize
+
+\stopsubject
+
+\StopSteps
+
+% show latest manuals
+
+\stopdocument
diff --git a/doc/context/presentations/context/2012/context-2012-lexing-sources.pdf b/doc/context/presentations/context/2012/context-2012-lexing-sources.pdf
new file mode 100644
index 000000000..be51108b3
--- /dev/null
+++ b/doc/context/presentations/context/2012/context-2012-lexing-sources.pdf
Binary files differ
diff --git a/doc/context/presentations/context/2012/context-2012-lexing-sources.tex b/doc/context/presentations/context/2012/context-2012-lexing-sources.tex
new file mode 100644
index 000000000..1135148e1
--- /dev/null
+++ b/doc/context/presentations/context/2012/context-2012-lexing-sources.tex
@@ -0,0 +1,81 @@
+\usemodule[present-stepwise,present-bars,abr-01]
+
+\definecolor[verydark][s=.2]
+
+\startdocument
+ [title=Lexing sources,
+ color=verydark]
+
+\StartSteps
+
+\startsubject[title=What is lexing]
+
+ \startitemize[packed]
+ \startitem Computer languages have mandate structure. \stopitem \FlushStep
+ \startitem You can avoid errors by checking the input. \stopitem \FlushStep
+ \startitem Editors can help by coloring reserved words, concept etc. \stopitem \FlushStep
+ \startitem Consistency in coloring different languages makes sense. \stopitem \FlushStep
+ \stopitemize
+
+\stopsubject
+
+\startsubject[title=When did we start]
+
+ \startitemize[packed]
+ \startitem We wrote our first editor begin 90's. \stopitem \FlushStep
+ \startitem An extension quickly followed when we moved to \TEX: \TEXEDIT. \stopitem \FlushStep
+ \startitem When \MODULA\ was no longer fashion we moved on to \PERL: \TEXWORK\ (quick demo) \stopitem \FlushStep
+ \startitem When we ran into \SCITE\ we start using that. \stopitem \FlushStep
+ \startitem I provided syntax highlighting for \TEX\ and \METAPOST\ (support for multiple formats etc.). \stopitem \FlushStep
+ \stopitemize
+
+\stopsubject
+
+\StopSteps
+
+\page
+
+\StartSteps
+
+\startsubject[title=Side effect of \MKIV]
+
+ \startitemize[packed]
+ \startitem \SCITE\ got \LPEG\ based lexing (external lexing). \stopitem \FlushStep
+ \startitem I already had already written some lexers for the pretty printers. \stopitem \FlushStep
+ \startitem So I gave it a go and made some more advanced lexers. \stopitem \FlushStep
+ \startitem These ship with \CONTEXT: \TEX, \XML, \PDF, \LUA, \CLD, \METAPOST, text. \stopitem \FlushStep
+ \stopitemize
+
+\stopsubject
+
+\startsubject[title=Characteristics]
+
+ \startitemize[packed]
+ \startitem The \TEX\ lexer supports nested lexing of \LUA\ and \METAPOST. \stopitem \FlushStep
+ \startitem Integrated spell checking is provided. \stopitem \FlushStep
+ \startitem Unfortunately there is no lexing for \SCITE\ on \MACOSX\ (not that I care too much nowadays). \stopitem \FlushStep
+ \startitem It is a pitty that we have no access to \SCITE\ internal as with the regular \LUA\ interface. \stopitem \FlushStep
+ \startitem On my good old machine huge files lex somewhat slow (at the end). \stopitem \FlushStep
+ \stopitemize
+
+\stopsubject
+
+\StopSteps
+
+\page
+
+\StartSteps
+
+\startsubject[title=The future]
+
+ \startitemize[packed]
+ \startitem I will improve the current lexers. \stopitem \FlushStep
+ \startitem An \SQL\ lexer will be added at some point \stopitem \FlushStep
+ \startitem I might make an \HTML/\CSS\ variant that supports nexted \LMX. \stopitem \FlushStep
+ \stopitemize
+
+\stopsubject
+
+\StopSteps
+
+\stopdocument
diff --git a/doc/context/presentations/context/2012/context-2012-mixed-columns.pdf b/doc/context/presentations/context/2012/context-2012-mixed-columns.pdf
new file mode 100644
index 000000000..f2dc8ecaf
--- /dev/null
+++ b/doc/context/presentations/context/2012/context-2012-mixed-columns.pdf
Binary files differ
diff --git a/doc/context/presentations/context/2012/context-2012-mixed-columns.tex b/doc/context/presentations/context/2012/context-2012-mixed-columns.tex
new file mode 100644
index 000000000..af35917f0
--- /dev/null
+++ b/doc/context/presentations/context/2012/context-2012-mixed-columns.tex
@@ -0,0 +1,79 @@
+\usemodule[present-stepwise,present-bars,abr-01]
+
+\startdocument
+ [title=The scripts,
+ color=darkyellow]
+
+\StartSteps
+
+\startsubject[title=Output]
+
+ \startitemize[packed]
+
+ \startitem \TEX\ collects content paragraph wise. \stopitem \FlushStep
+ \startitem In between it can trigger the so called output routine. \stopitem \FlushStep
+ \startitem At that moment you can do something with the result. \stopitem \FlushStep
+ \startitem One of the things you can do is package all collected so far in a page. \stopitem \FlushStep
+
+ \stopitemize
+
+\stopsubject
+
+\startsubject[title=Bonus]
+
+ \startitemize[packed]
+
+ \startitem In \LUATEX\ we can also intercept content at more places. \stopitem \FlushStep
+ \startitem For instance before and after each paragraph is processed. \stopitem \FlushStep
+
+ \stopitemize
+
+\stopsubject
+
+\StopSteps \page \StartSteps
+
+\startsubject[title=Columns]
+
+ \startitemize[packed]
+
+ \startitem \TEX\ has no concept of columns. \stopitem \FlushStep
+ \startitem You need to fake them by fiddling with the width and spitting boxes. \stopitem \FlushStep
+ \startitem Often we can use tabulate (no output routine). \stopitem \FlushStep
+ \startitem For some local applications we use simple columns. \stopitem \FlushStep
+ \startitem In for instance itemize we used a mixed one- and multi-column model. \stopitem \FlushStep
+ \startitem Columnsets are another (independent) mechanism, strongly grid based. \stopitem \FlushStep
+ \startitem Traditional multicolumns are being replaced by a new mechanism: mixed columns. \stopitem \FlushStep
+
+ \stopitemize
+
+\stopsubject
+
+\startsubject[title=Pitfalls]
+
+ \startitemize[packed]
+
+ \startitem Footnotes: page, first or last column, each column (delayed, immediate). \stopitem \FlushStep
+ \startitem Graphics: moving floats around is more complex than in single columns. \stopitem \FlushStep
+ \startitem Nesting: how about columns inside columns. \stopitem \FlushStep
+ \startitem Balancing: can be hard taking all into account. \stopitem \FlushStep
+
+ \stopitemize
+
+\stopsubject
+
+\StopSteps \page \StartSteps
+
+\startsubject[title=Questions]
+
+ \startitemize[packed]
+
+ \startitem Do complex column mechanisms still make sense given the move to electronic paper. \stopitem \FlushStep
+ \startitem If so, what functionality should be provided. \stopitem \FlushStep
+
+ \stopitemize
+
+\stopsubject
+
+\StopSteps
+
+\stopdocument
diff --git a/doc/context/presentations/context/2012/context-2012-the-script.pdf b/doc/context/presentations/context/2012/context-2012-the-script.pdf
new file mode 100644
index 000000000..935e6600e
--- /dev/null
+++ b/doc/context/presentations/context/2012/context-2012-the-script.pdf
Binary files differ
diff --git a/doc/context/presentations/context/2012/context-2012-the-script.tex b/doc/context/presentations/context/2012/context-2012-the-script.tex
new file mode 100644
index 000000000..be586e2ff
--- /dev/null
+++ b/doc/context/presentations/context/2012/context-2012-the-script.tex
@@ -0,0 +1,453 @@
+\usemodule[present-stepwise,present-bars,abr-01]
+
+\startdocument
+ [title=The scripts,
+ color=darkblue]
+
+\StartSteps
+
+\startsubject[title=Some myths]
+
+ \startitemize[packed]
+
+ \startitem \CONTEXT\ looks al lot like plain \TEX\ and expects users to program macros. \stopitem \FlushStep
+ \startitem \CONTEXT\ depends on \RUBY. \stopitem \FlushStep
+
+ \stopitemize
+
+\stopsubject
+
+\startsubject[title=The truth]
+
+ \startitemize[packed]
+
+ \startitem On the average users don't have to program. Configuring is not programming. \stopitem \FlushStep
+ \startitem As \TEX\ lacks commandline handling and job control, helpers are provided. \stopitem \FlushStep
+ \startitem Of course users can still program a lot, but not all need that. \stopitem \FlushStep
+ \startitem Of course users can directly run \CONTEXT, but why should they. \stopitem \FlushStep
+
+ \stopitemize
+
+\stopsubject
+
+\startsubject[title=A few facts]
+
+ \startitemize[packed]
+
+ \startitem The \CONTEXT\ distribution provides a sort of ecosystem. \stopitem \FlushStep
+ \startitem In \MKII\ indeed we use \RUBY\ for some job control. \stopitem \FlushStep
+ \startitem But in \MKIV\ all is (of course) done in \LUA. \stopitem \FlushStep
+ \startitem Two scripts play an important role: mtxrun and context. \stopitem \FlushStep
+
+ \stopitemize
+
+\stopsubject
+
+\StopSteps
+
+\page
+
+\StartSteps
+
+\startsubject[title=The \quote {mtxrun} script]
+
+ \startitemize[packed]
+
+ \startitem Locates and runs scripts, has a lot of helpers preloaded. \stopitem \FlushStep
+ \startitem It is in fact my \LUA\ runner on top the \TEXLUA. \stopitem \FlushStep
+ \startitem It knows about files and the environment we run in. \stopitem \FlushStep
+ \startitem It has some features that makes it easier to integrate in services. \stopitem \FlushStep
+ \startitem This way we don't need stubs (and avoid potential conflicts in name). \stopitem \FlushStep
+
+ \stopitemize
+
+\stopsubject
+
+\startsubject[title=The \quote {context} script]
+
+\startitemize[packed]
+
+ \startitem It runs \CONTEXT\ and keeps track of how many runs are needed. \stopitem \FlushStep
+ \startitem Contrary to its \MKII\ ancestor it is not needed for index sorting etc. \stopitem \FlushStep
+ \startitem It has a few extensions that are loaded on demand: extras \stopitem \FlushStep
+
+\stopitemize
+
+\stopsubject
+
+\StopSteps
+
+\page
+
+\StartSteps
+
+\startsubject[title=A regular run]
+
+ \starttyping
+ context [--run] filename
+ \stoptyping \FlushStep
+
+\stopsubject
+
+\startsubject[title=Running from an editor]
+
+ \starttyping
+ context --autopdf filename
+ \stoptyping \FlushStep
+
+\stopsubject
+
+\startsubject[title=Running from an service]
+
+ \starttyping
+ mtxrun --path=somepath --script context filename
+ \stoptyping \FlushStep
+
+\stopsubject
+
+\StopSteps
+
+\page
+
+\StartSteps
+
+\startsubject[title=Controlling the rendering]
+
+ \starttyping
+ --usemodule=list
+ --environment=list
+ --mode=list
+ --arguments=list
+ --path=list
+ \stoptyping \FlushStep
+
+\stopsubject
+
+\startsubject[title=Controlling with ctx files]
+
+ \starttyping
+ --ctx=name
+ \stoptyping \FlushStep
+
+\stopsubject
+
+\startsubject[title=Also in preamble]
+
+ \starttyping
+ <?context-directive job ctxfile m4all.ctx ?>
+ \stoptyping \FlushStep
+
+\stopsubject
+
+\StopSteps
+
+\page
+
+\StartSteps
+
+\startsubject[title=A ctx file]
+
+\starttyping
+<?xml version='1.0' standalone='yes'?>
+
+<ctx:job>
+ <ctx:message>EPUB Formatter</ctx:message>
+ <ctx:flags>
+ <ctx:flag>purge</ctx:flag>
+ <ctx:flag>global</ctx:flag>
+ </ctx:flags>
+ <ctx:process>
+ <ctx:resources>
+ <ctx:module>epub-01</ctx:module>
+ </ctx:resources>
+ </ctx:process>
+</ctx:job>
+\stoptyping \FlushStep
+
+\stopsubject
+
+\StopSteps
+
+\page
+
+\StartSteps
+
+\startsubject[title=Multiple products from one source]
+
+ \starttyping
+ --result=name
+ \stoptyping \FlushStep
+
+\stopsubject
+
+\startsubject[title=When imposition is needed]
+
+ \starttyping
+ --arrange
+ \stoptyping \FlushStep
+
+\stopsubject
+
+\startsubject[title=Cleanup after runs]
+
+ \starttyping
+ --batchmode
+ --purge(all)
+ --purgeresult
+ \stoptyping \FlushStep
+
+\stopsubject
+
+\StopSteps
+
+\page
+
+\StartSteps
+
+\startsubject[title=Sometimes faster (in services)]
+
+ \starttyping
+ --once
+ --runs=2
+ \stoptyping \FlushStep
+
+\stopsubject
+
+\startsubject[title=Normally automatically done]
+
+ \starttyping
+ --make
+ --generate
+ --touch
+ \stoptyping \FlushStep
+
+\stopsubject
+
+\startsubject[title=Seldom used]
+
+ \starttyping
+ --interface
+ --randomseed=number
+ \stoptyping \FlushStep
+
+\stopsubject
+
+\StopSteps
+
+\page
+
+\StartSteps
+
+\startsubject[title=Information about extra control]
+
+ \starttyping
+ --trackers
+ --directives
+ --showlogcategories
+ --version
+ \stoptyping \FlushStep
+
+\stopsubject
+
+\startsubject[title=Controlling the machinery]
+
+ \starttyping
+ --trackers=list
+ --directives=list
+ --silent=list
+ --noconsole
+ --nostatistics
+ \stoptyping \FlushStep
+
+\stopsubject
+
+\StopSteps
+
+\page
+
+\StartSteps
+
+\startsubject[title=When no local file is used]
+
+ \starttyping
+ --global
+ --nofile
+ \stoptyping \FlushStep
+
+\stopsubject
+
+\startsubject[title=When the automatics recognition doesn't work]
+
+ \starttyping
+ --forcexml
+ --forcecld
+ --forcelua
+ --forcemp
+ \stoptyping \FlushStep
+
+\stopsubject
+
+\StopSteps
+
+\page
+
+\StartSteps
+
+\startsubject[title=Only handy for development (or me)]
+
+ \starttyping
+ --profile
+ --timing
+ \stoptyping \FlushStep
+
+\stopsubject
+
+\startsubject[title=Forget about these]
+
+ \starttyping
+ --paranoid
+ --update
+ \stoptyping \FlushStep
+
+\stopsubject
+
+\startsubject[title=Some hidden treasures]
+
+ \starttyping
+ --extras
+ --extra=name
+ \stoptyping \FlushStep
+
+\stopsubject
+
+\StopSteps
+
+\page
+
+\StartSteps
+
+\startsubject[title=Arguments can be prefixed]
+
+ \starttyping
+ environment:
+ relative:
+ auto:
+ locate:
+ filename:
+ pathname:
+ home:
+ selfautoloc:
+ selfautoparent:
+ selfautodir:
+ \stoptyping \FlushStep
+
+\stopsubject
+
+\StopSteps
+
+\page
+
+\StartSteps
+
+\startsubject[title=Recent (probably unnoticed) change]
+
+ \starttyping
+ luatex
+ --fmt=".../tex/texmf-cache/luatex-cache/context/.../formats/cont-en"
+ --lua=".../tex/texmf-cache/luatex-cache/context/.../formats/cont-en.lui"
+ --jobname="context-the-script"
+ --no-parse-first-line
+ --c:autopdf
+ --c:currentrun=1
+ --c:fulljobname="./context-the-script.tex"
+ --c:input="./context-the-script.tex"
+ --c:kindofrun=1
+ "cont-yes.mkiv"
+ \stoptyping \FlushStep
+
+\stopsubject
+
+\startsubject[title=Another change]
+
+\startitemize[packed]
+
+ \startitem The (runtime generated) options file is no longer there. \stopitem \FlushStep
+ \startitem For as far as possible arguments are passed directly. \stopitem \FlushStep
+ \startitem Input files are always loaded indirectly, no more stubs. \stopitem \FlushStep
+
+\stopitemize
+
+\stopsubject
+
+\StopSteps
+
+\page
+
+\StartSteps
+
+\startsubject[title=About 30 mtx/lmx scripts]
+
+ \starttyping
+ mtx-check.lua
+ mtx-convert.lua
+ mtx-epub.lua
+ mtx-fonts.lua
+ mtx-modules.lua
+ mtx-patterns.lua
+ mtx-pdf.lua
+ \stoptyping \FlushStep
+
+\stopsubject
+
+\startsubject[title=These are run like]
+
+ \starttyping
+ mtxrun --script pdf
+ \stoptyping \FlushStep
+
+\stopsubject
+
+\StopSteps
+
+\page
+
+\StartSteps
+
+\startsubject[title=Several mtx templates]
+
+ \starttyping
+ mtx-context-arrange.lua
+ mtx-context-combine.lua
+ mtx-context-listing.lua
+ mtx-context-select.lua
+ mtx-context-timing.lua
+ \stoptyping \FlushStep
+
+\stopsubject
+
+\startsubject[title=These are run like]
+
+ \starttyping
+ context --extra=arrange [--help] ...
+ \stoptyping \FlushStep
+
+\stopsubject
+
+\StopSteps
+
+\page
+
+\StartSteps
+
+\startsubject[title=Local preferences]
+
+ \starttyping
+ texmfcnf.lua
+ \stoptyping \FlushStep
+
+\stopsubject
+
+\StopSteps
+
+\stopdocument
+
diff --git a/doc/context/presentations/context/2012/context-2012-visual-debugging.pdf b/doc/context/presentations/context/2012/context-2012-visual-debugging.pdf
new file mode 100644
index 000000000..879a1ff69
--- /dev/null
+++ b/doc/context/presentations/context/2012/context-2012-visual-debugging.pdf
Binary files differ
diff --git a/doc/context/presentations/context/2012/context-2012-visual-debugging.tex b/doc/context/presentations/context/2012/context-2012-visual-debugging.tex
new file mode 100644
index 000000000..4be8d5e72
--- /dev/null
+++ b/doc/context/presentations/context/2012/context-2012-visual-debugging.tex
@@ -0,0 +1,296 @@
+\usemodule[present-stepwise,present-bars,abr-01]
+
+\startdocument
+ [title=Visual debugging,
+ color=darkmagenta]
+
+\StartSteps
+
+\startsubject[title=How it started]
+
+ \startitemize[packed]
+
+ \startitem Some 15 years ago I wanted some more feedback. \stopitem \FlushStep
+ \startitem So I figured out a way to visualize boxes, kerns, glue, etc. \stopitem \FlushStep
+ \startitem Some aspects were tricky, like stretch and shrink (no \ETEX\ yet), fillers, leaders, etc. \stopitem \FlushStep
+ \startitem I gave some presentations and it was nice to see the puzzled faces. \stopitem \FlushStep
+ \startitem As unboxing does not work, it is somewhat interfering. \stopitem \FlushStep
+ \startitem When not enabed there is no overhead but we did disable it at some places. \stopitem \FlushStep
+
+ \stopitemize
+
+\stopsubject
+
+\startsubject[title=Do we need it]
+
+ \startitemize[packed]
+
+ \startitem I wonder if anyone ever used it. \stopitem \FlushStep
+ \startitem Some of the helpers are quite handy, like \type {\ruledhbox}. \stopitem \FlushStep
+ \startitem So these had to be provided anyway, so: where to stop? \stopitem \FlushStep
+
+ \stopitemize
+
+\stopsubject
+
+\StopSteps \page \StartSteps
+
+\startsubject[title=All kind of debugging]
+
+ \startitemize[packed]
+
+ \startitem We have more debugging, much shows up when writing new code. \stopitem \FlushStep
+ \startitem Think of fonts, math, graphics, characters, etc. \stopitem \FlushStep
+ \startitem Some make no sense in \MKIV, so they're gone, but new ones show up. \stopitem \FlushStep
+ \startitem In due time this will all be normalized (as most lives in modules). \stopitem \FlushStep
+
+ \stopitemize
+
+\stopsubject
+
+\StopSteps \page \StartSteps
+
+\startsubject[title=Why we kept it]
+
+ \startitemize[packed]
+
+ \startitem When cleaning up the code I had to decide to keep it or redo it as it could be done \MKIV-ish. \stopitem \FlushStep
+ \startitem But as we already had some \LUA\ based extras it made sense to redo it. \stopitem \FlushStep
+ \startitem The old code is still there as module (also because it had some more funstuff). \stopitem \FlushStep
+
+ \stopitemize
+
+\stopsubject
+
+\startsubject[title=How it worked]
+
+ \startitemize[packed]
+
+ \startitem In \MKII\ primitives are overloaded. \stopitem \FlushStep
+ \startitem So effectively, when enabled, \type {\hbox} cum suis become macros. \stopitem \FlushStep
+ \startitem We use rules (and leaders) to visualize properties. \stopitem \FlushStep
+ \startitem Some constructs interfere so we need to compensate side effects. \stopitem \FlushStep
+
+ \stopitemize
+
+\stopsubject
+
+\StopSteps \page \StartSteps
+
+\startsubject[title=How it works]
+
+ \startitemize[packed]
+
+ \startitem The basics were a rather trivial quick job as we had a lot in place already. \stopitem \FlushStep
+ \startitem Interpreting the node list and injecting visualizers. \stopitem \FlushStep
+ \startitem We use colors, rules and text but much can be overlayed. \stopitem \FlushStep
+ \startitem Control over what gets visualized at the \TEX\ end. \stopitem \FlushStep
+ \startitem Control over what gets shown by using layers. \stopitem \FlushStep
+ \startitem As usual most time went into visualization choices and optimzation. \stopitem \FlushStep
+ \startitem Some visualizers interfered with (hardcoded) expectations in the backend. \stopitem \FlushStep
+ \startitem When I decided to use layers I had to adapt some oter code (mostly out of efficiency). \stopitem \FlushStep
+ \startitem There is room for more (but first I want the bitlib of \LUA\ 5.2). \stopitem \FlushStep
+
+ \stopitemize
+
+\stopsubject
+
+\StopSteps
+
+\page
+
+\defineoverlay[invoke][\overlaybutton{NextPage}]
+
+\defineframed
+ [MyFramed]
+ [background=color,
+ backgroundcolor=yellow,
+ offset=overlay,
+ frame=off]
+
+\startbuffer
+\ruledhbox{j}
+\ruledhbox{jj}
+\ruledhbox{jjj}
+\ruledhbox{jjjj}
+\ruledhbox{jjjjj}
+\stopbuffer
+
+\startsubject[title=Details 1]
+
+ \scale[width=\textwidth]{\MyFramed \bgroup
+ {\getbuffer}\removeunwantedspaces
+ \egroup}
+
+ \typebuffer
+
+\stopsubject
+
+\page
+
+\startbuffer
+\ruledhbox{take boxes}
+\stopbuffer
+
+\startsubject[title=Details 2a]
+
+ \scale[width=\textwidth]{\MyFramed \bgroup
+ {\getbuffer}\removeunwantedspaces
+ \egroup}
+
+ \typebuffer
+
+\stopsubject
+
+\page
+
+\startbuffer
+\ruledhbox{some depth too}
+\stopbuffer
+
+\startsubject[title=Details 2b]
+
+ \scale[width=\textwidth]{\MyFramed \bgroup
+ {\getbuffer}\removeunwantedspaces
+ \egroup}
+
+ \typebuffer
+
+\stopsubject
+
+\page
+
+\startbuffer
+\showmakeup \hbox{again an hbox}
+\stopbuffer
+
+\startsubject[title=Details 3a]
+
+ \scale[width=\textwidth]{\MyFramed \bgroup
+ {\getbuffer}\removeunwantedspaces
+ \egroup}
+
+ \typebuffer
+
+\stopsubject
+
+\page
+
+\startbuffer
+\ruledvtop{\ruledvbox{\ruledhbox{multiple boxes}}}
+\stopbuffer
+
+\startsubject[title=Details 3b]
+
+ \scale[width=\textwidth]{\MyFramed \bgroup
+ {\getbuffer}\removeunwantedspaces
+ \egroup}
+
+ \typebuffer
+
+\stopsubject
+
+\page
+
+\startbuffer
+\showmakeup \hbox{multiple boxes}
+\stopbuffer
+
+\startsubject[title=Details 3c]
+
+ \scale[width=\textwidth]{\MyFramed \bgroup
+ \hskip.5em
+ {\getbuffer}\removeunwantedspaces
+ \hskip.5em
+ \egroup}
+
+ \typebuffer
+
+\stopsubject
+
+\page
+
+\startbuffer
+\showmakeup \vbox{\hbox{multiple boxes}}
+\stopbuffer
+
+\startsubject[title=Details 3c]
+
+ \scale[width=\textwidth]{\MyFramed \bgroup
+ \hskip.5em
+ {\getbuffer}\removeunwantedspaces
+ \hskip.5em
+ \egroup}
+
+ \typebuffer
+
+\stopsubject
+
+\page
+
+\startbuffer
+\showmakeup \vtop{\vbox{\hbox{multiple boxes}}}
+\stopbuffer
+
+\startsubject[title=Details 3d]
+
+ \scale[width=\textwidth]{\MyFramed \bgroup
+ \hskip.5em
+ {\getbuffer}\removeunwantedspaces
+ \hskip.5em
+ \egroup}
+
+ \typebuffer
+
+\stopsubject
+
+\page
+
+\startbuffer
+\showstruts why \strut use \strut's
+\stopbuffer
+
+\startsubject[title=Details 4]
+
+ \scale[width=\textwidth]{\MyFramed \bgroup
+ {\getbuffer}\removeunwantedspaces
+ \egroup}
+
+ \typebuffer
+
+\stopsubject
+
+\page
+
+\startbuffer
+\showglyphs glyphs
+\stopbuffer
+
+\startsubject[title=Details 5]
+
+ \scale[width=\textwidth]{\MyFramed \bgroup
+ {\getbuffer}\removeunwantedspaces
+ \egroup}
+
+ \typebuffer
+
+\stopsubject
+\page
+
+\startbuffer
+\enabletrackers[visualizers.whatsit]glyphs \righttoleft glyphs
+\stopbuffer
+
+\startsubject[title=Details 6]
+
+ \scale[width=\textwidth]{\MyFramed \bgroup
+ \hskip.75em
+ {\getbuffer}\removeunwantedspaces
+ \hskip.75em
+ \egroup}
+
+ \typebuffer
+
+\stopsubject
+
+\stopdocument
diff --git a/doc/context/presentations/context/2012/context-2012-xml-news.pdf b/doc/context/presentations/context/2012/context-2012-xml-news.pdf
new file mode 100644
index 000000000..ddbf138d7
--- /dev/null
+++ b/doc/context/presentations/context/2012/context-2012-xml-news.pdf
Binary files differ
diff --git a/doc/context/presentations/context/2012/context-2012-xml-news.tex b/doc/context/presentations/context/2012/context-2012-xml-news.tex
new file mode 100644
index 000000000..c11c35d31
--- /dev/null
+++ b/doc/context/presentations/context/2012/context-2012-xml-news.tex
@@ -0,0 +1,131 @@
+\usemodule[present-stepwise,present-bars,abr-01]
+
+\startdocument
+ [title={Processing XML, some basics},
+ color=darkcyan]
+
+\StartSteps
+
+\startsubject[title=Topics]
+
+ \startitemize[packed]
+
+ \startitem processing \stopitem \FlushStep
+ \startitem selecting \stopitem \FlushStep
+ \startitem flushing \stopitem \FlushStep
+ \startitem testing \stopitem \FlushStep
+ \startitem basics only \stopitem \FlushStep
+
+ \stopitemize
+
+\stopsubject
+
+\StopSteps \page \StartSteps
+
+\startsubject[title=Processing]
+
+ \starttyping
+ \xmlprocessfile {name} {filename} {setup}
+ \xmlprocessbuffer {name} {filename} {setup}
+ \xmlloadonly {name} {filename} {setup}
+ \stoptyping \FlushStep
+
+\stopsubject
+
+\startsubject[title=Loading]
+
+ \starttyping
+ \xmlload {name} {filename} {setup}
+ \xmlloadbuffer {name} {buffername} {setup}
+ \stoptyping \FlushStep
+
+\stopsubject
+
+\StopSteps \page \StartSteps
+
+\startsubject[title=Injecting elements]
+
+ \starttyping
+ \xmlall {node} {pattern}
+ \xmlfirst {node} {pattern}
+ \xmllast {node} {pattern}
+ \xmlflush {node}
+ \stoptyping \FlushStep
+
+ \starttyping
+ \xmlraw {node} {pattern}
+ \xmlcontext {node} {pattern}
+ \xmlstrip {node} {pattern}
+ \xmltag {node}
+ \xmltext {node} {pattern}
+ \stoptyping \FlushStep
+
+\stopsubject
+
+\StopSteps \page \StartSteps
+
+\startsubject[title=Injecting attributes]
+
+ \starttyping
+ \xmlatt {node} {name}
+ \xmlattdef {node} {namev {default}
+ \xmlattribute {node} {pattern} {name}
+ \xmlattributedef {node} {pattern} {name} {default}
+ \stoptyping \FlushStep
+
+\stopsubject
+
+\startsubject[title=Injecting properties]
+
+ \starttyping
+ \xmlcount {node} {pattern}
+ \xmlname {node}
+ \xmlnamespace {node}
+ \stoptyping \FlushStep
+
+\stopsubject
+
+\StopSteps \page \StartSteps
+
+\startsubject[title=Filters]
+
+ \starttyping
+ \xmlcommand {node} {pattern} {setup
+ \xmlfilter {node} {pattern}
+ \stoptyping \FlushStep
+
+\stopsubject
+
+\startsubject[title=Much more]
+
+ \starttyping
+ \xmlverbatim {node}
+ \xmldisplayverbatim {node}
+ \xmlinlineverbatim {node}
+ \stoptyping \FlushStep
+
+ \starttyping
+ \xmlinclude {node} {pattern} {attribute}
+ \xmlshow {node}
+ \stoptyping \FlushStep
+
+\stopsubject
+
+\StopSteps \page \StartSteps
+
+\startsubject[title=Testing]
+
+ \starttyping
+ \xmldoif {node} {pattern} {true}
+ \xmldoifnot {node} {pattern} {true}
+ \xmldoifelse {node} {pattern} {true} {false}
+ \xmldoiftext {node} {pattern} {true}
+ \xmldoifnottext {node} {pattern} {true}
+ \xmldoifelsetext {node} {pattern} {true} {false}
+ \stoptyping \FlushStep
+
+\stopsubject
+
+\StopSteps
+
+\stopdocument
diff --git a/doc/context/presentations/context/2013/context-2013-math.pdf b/doc/context/presentations/context/2013/context-2013-math.pdf
new file mode 100644
index 000000000..4272d4144
--- /dev/null
+++ b/doc/context/presentations/context/2013/context-2013-math.pdf
Binary files differ
diff --git a/doc/context/presentations/context/2013/context-2013-math.tex b/doc/context/presentations/context/2013/context-2013-math.tex
new file mode 100644
index 000000000..d15fffec2
--- /dev/null
+++ b/doc/context/presentations/context/2013/context-2013-math.tex
@@ -0,0 +1,244 @@
+% \enablemode[print]
+
+\usemodule[present-stepwise,present-tiles,abr-02]
+
+\definecolor[maincolor] [darkgray]
+\definecolor[othercolor][b=.3]
+
+\setupinteractionscreen
+ [option=max]
+
+% \setupalign
+% [flushleft,tolerant]
+
+\defineframed
+ [conclusion]
+ [location=low,
+ width=max,
+ align=flushleft,
+ background=color,
+ backgroundcolor=white,
+ foregroundcolor=othercolor]
+
+\setupbodyfont[15pt]
+
+\startdocument
+ [title={Math:\\\\progress or standing still},
+ %subtitle={Hans Hagen\\TUG Conference\\October 2013}]
+ subtitle={Hans Hagen\\\ConTeXt\ Meeting\\September 2013}]
+
+\StartSteps \starttopic [title={Math as script}]
+
+ \startitem math can be input using the \TEX\ syntax, \MATHML, calculator like sequences, \unknown \FlushStep \stopitem
+ \startitem but apart from content \MATHML\ all stay close to good old \TEX \FlushStep \stopitem
+ \startitem although not officially a script, \OPENTYPE\ treats it as such, but without control \FlushStep \stopitem
+
+ \blank[2*big]
+
+ \starttyping
+ $ ( (x + 1) / a + 1 )^2 = (x - 1) / b $
+ \stoptyping
+
+ \FlushStep
+
+ \starttyping
+ $ \left( \frac{x + 1}{a} + 1 \right)^2 = \frac{x - 1}{b} $
+ \stoptyping
+
+ \FlushStep
+
+ \starttyping
+ <mfenced open="(" close = ")">
+ <mfrac>...</mfrac> <mo>+</mo> <mn>1</mn>
+ </mfenced>
+ \stoptyping
+
+ \FlushStep
+
+ \starttyping
+ <mrow>
+ <mo>(</mo> <mfrac>...</mfrac> <mo>+</mo> <mn>1</mn> <mo>)</mo>
+ </mrow>
+ \stoptyping
+
+ \FlushStep
+
+ \vfilll \conclusion{There is recognition of math as a proper (but not standardized) script.} \FlushStep
+
+\stoptopic \StopSteps
+
+\StartSteps \starttopic [title={Alphabets}]
+
+ \startitem the shape (style) of a character determines its meaning \FlushStep \stopitem
+ \startitem but in most cases an type {a} is entered as \ASCII\ character \FlushStep \stopitem
+ \startitem and tagged with some rendering directive, often indicating a font style \FlushStep \stopitem
+ \startitem in traditional \TEX\ we have alphabets in different fonts, so we're talking switches \FlushStep \stopitem
+ \startitem in \UNICODE\ and \OPENTYPE\ we have alphabets with standardized code points (but gaps too) \FlushStep \stopitem
+ \startitem this has big advantages for communicating, transferring data etc \FlushStep \stopitem
+ \startitem but a math engine still has to deal with \ASCII\ input as well \FlushStep \stopitem
+ \startitem multiple axis: types, alphabets, styles, variants, shapes, modifiers \FlushStep \stopitem
+
+ \vfilll \conclusion{We're off better but the gaps are an anomality.} \FlushStep
+
+\stoptopic \StopSteps
+
+\StartSteps \starttopic [title={Heavy bold}]
+
+ \startitem for titles and captions we might need bolder math \FlushStep \stopitem
+ \startitem bold symbols in math have special meaning \FlushStep \stopitem
+ \startitem so when going full bold they should become heavy \FlushStep \stopitem
+ \startitem heavy math involves boldening everything, including extensibles \FlushStep \stopitem
+ \startitem there are currently no fonts that have such complete heavy companions \FlushStep \stopitem
+
+ \vfilll \conclusion{We need proper bold fonts, but they need to be relatively complete.} \FlushStep
+
+\stoptopic \StopSteps
+
+\StartSteps \starttopic [title={Radicals}]
+
+ \startitem this always has been (and still is) a combination of vertical extensibles and horizontal rules \FlushStep \stopitem
+ \startitem it is the only two dimensional extensible so always a bit of an exception \FlushStep \stopitem
+ \startitem in the wide engines we now have more direct support primitive for that (no macro needed) \FlushStep \stopitem
+ \startitem in practice (at least in \MKIV) we still use macros because we want control \FlushStep \stopitem
+
+ \vfilll \conclusion{Native support for radicals is nice to have and makes coding cleaner.} \FlushStep
+
+\stoptopic \StopSteps
+
+\StartSteps \starttopic [title={Primes}]
+
+ \startitem this is a special case as we (sort of) have upto two superscripts \FlushStep \stopitem
+ \startitem and also need to handle an optional subscript of the base symbol \FlushStep \stopitem
+ \startitem and in order to be visually okay, we need to collect multiple primes \FlushStep \stopitem
+ \startitem some fonts have primes raised, some have them flying high \FlushStep \stopitem
+ \startitem maybe at some point the upcoming math pre- and postscripts will help \FlushStep \stopitem
+
+ \vfilll \conclusion{Supporting primes will always be a bit of a pain but I stay on top of it.} \FlushStep
+
+\stoptopic \StopSteps
+
+\StartSteps \starttopic [title={Accents}]
+
+ \startitem they can go on top or below one or more characters (also in combination) \FlushStep \stopitem
+ \startitem accents have some hard codes positional properties \FlushStep \stopitem
+ \startitem the wide engines have more direct support for this \FlushStep \stopitem
+ \startitem fonts provide a limited set of sizes, such accents cannot extend (by design) \FlushStep \stopitem
+
+ \vfilll \conclusion{Engine support for accents is better now but maybe fonts need to have more sizes.} \FlushStep
+
+\stoptopic \StopSteps
+
+\StartSteps \starttopic [title={Stackers}]
+
+ \startitem arrows (and other horizontal extensibles) traditionally were made from snippets \FlushStep \stopitem
+ \startitem we need them also for chemistry, in rather flexible ways \FlushStep \stopitem
+ \startitem in upcoming math fonts they are become real extensibles \FlushStep \stopitem
+ \startitem but then we still need to deal with existing fonts that lack them (one font in the end) \FlushStep \stopitem
+ \startitem there will be native support for so called character leaders \FlushStep \stopitem
+
+ \vfilll \conclusion{Stackers are more easily implemented although fonts pose some challenges.} \FlushStep
+
+\stoptopic \StopSteps
+
+\StartSteps \starttopic [title={Fences}]
+
+ \startitem these go left and right (or in the middle) of things \FlushStep \stopitem
+ \startitem there need to be a matching pair else we get an error \FlushStep \stopitem
+ \startitem they have to adapt their size to what they wrap \FlushStep \stopitem
+ \startitem \TEX ies can take care of that in their input \FlushStep \stopitem
+ \startitem but in for instance \MATHML\ checking all this is a bit of a pain \FlushStep \stopitem
+ \startitem this is still the domain of macros \FlushStep \stopitem
+ \startitem but we could make the engines a bit more tolerant (hard to do) \FlushStep \stopitem
+
+ \vfilll \conclusion{Matching fences will always be a bit of a problem.} \FlushStep
+
+\stoptopic \StopSteps
+
+\StartSteps \starttopic [title={Directions}]
+
+ \startitem bidirectional math is mostly a matter of the availability of fonts \FlushStep \stopitem
+ \startitem there need to be some agreement (at the macro package level) of control \FlushStep \stopitem
+ \startitem it's (for me) a visually interesting challenge \FlushStep \stopitem
+ \startitem there are some \TEX ies working on these matters (quite some research is done already) \FlushStep \stopitem
+
+ \vfilll \conclusion{Right to left math will show up thanks to pioneers.} \FlushStep
+
+\stoptopic \StopSteps
+
+\StartSteps \starttopic [title={Structure}]
+
+ \startitem demand for tagging also means that we need to carry a bit more info around \FlushStep \stopitem
+ \startitem this puts a little more burden on the user \FlushStep \stopitem
+ \startitem in the end it largely is a macro package issue \FlushStep \stopitem
+ \startitem better tagging of input can also help rendering \FlushStep \stopitem
+ \startitem detailed control at the \TEX\ level makes that users can spoil the game \FlushStep \stopitem
+
+ \vfilll \conclusion{In these times structure gets more important so minimal coding is less an option.} \FlushStep
+
+\stoptopic \StopSteps
+
+\StartSteps \starttopic [title={Italic correction}]
+
+ \startitem in traditional \TEX\ fonts this was used for spacing as well as special purposed \FlushStep \stopitem
+ \startitem across fonts there was never much correction \FlushStep \stopitem
+ \startitem \OPENTYPE\ doesn't have this concept \FlushStep \stopitem
+ \startitem \OPENTYPE\ math has some of if but also more powerful kerning \FlushStep \stopitem
+ \startitem generally speaking: we can ignore italic corrections \FlushStep \stopitem
+
+ \vfilll \conclusion{We need to accept that old concepts die and new onces show up.} \FlushStep
+
+\stoptopic \StopSteps
+
+\StartSteps \starttopic [title={Big}]
+
+ \startitem normally extensible fences are chosen automatically \FlushStep \stopitem
+ \startitem but macro packages provide tricks to choose a size \FlushStep \stopitem
+ \startitem extensible steps are unpredictable but still several mechanisms can be provided \FlushStep \stopitem
+
+ \vfilll \conclusion{Users will always want control and no engine can provide that but macros can.} \FlushStep
+
+\stoptopic \StopSteps
+
+\StartSteps \starttopic [title={Macros}]
+
+ \startitem some special symbols were constructed by macros (and using special font properties) \FlushStep \stopitem
+ \startitem these are mostly gone (the diagonal dots) \FlushStep \stopitem
+ \startitem if it is ever needed again, we should extend the fonts \FlushStep \stopitem
+
+ \vfilll \conclusion{Thanks to new font technologies and wide engines need less dirty tricks.} \FlushStep
+
+\stoptopic \StopSteps
+
+\StartSteps \starttopic [title={Unscripting}]
+
+ \startitem you can bet on those funny \UNICODE\ super and subscripts showing up in input \FlushStep \stopitem
+ \startitem it's a somewhat limited and unuseable lot for math (a modifier would have made more sense) \FlushStep \stopitem
+ \startitem it's one of these legacies that we need to deal with \FlushStep \stopitem
+ \startitem so the macro package needs to intercept them and map them onto proper math \FlushStep \stopitem
+
+ \vfilll \conclusion{We always need to deal with weird input, if only because standards lack.} \FlushStep
+
+\stoptopic \StopSteps
+
+\StartSteps \starttopic [title={Combining fonts}]
+
+ \startitem we can expect math fonts to be rather complete and if not, one should choose another one \FlushStep \stopitem
+ \startitem but sometimes (for simple math) you want to swap in alphabets and digits that match the text font \FlushStep \stopitem
+ \startitem given that we talk of ranges this is easy to support at the macro package level \FlushStep \stopitem
+
+ \vfilll \conclusion{Although fonts are more complete, occasional combinations should remain possible.} \FlushStep
+
+\stoptopic \StopSteps
+
+\StartSteps \starttopic [title={Tracing}]
+
+ \startitem there are lots of symbols involved \FlushStep \stopitem
+ \startitem and we have those extensibles too \FlushStep \stopitem
+ \startitem the larger the fonts get the more checking we need to do \FlushStep \stopitem
+ \startitem so macro packages need to provide some tracing options (or tables in print) \FlushStep \stopitem
+
+ \vfilll \conclusion{We keep an eye on things.} \FlushStep
+
+\stoptopic \StopSteps
+
+\stopdocument
diff --git a/doc/context/presentations/context/2013/context-2013-speed.pdf b/doc/context/presentations/context/2013/context-2013-speed.pdf
new file mode 100644
index 000000000..0f70fe9c8
--- /dev/null
+++ b/doc/context/presentations/context/2013/context-2013-speed.pdf
Binary files differ
diff --git a/doc/context/presentations/context/2013/context-2013-speed.tex b/doc/context/presentations/context/2013/context-2013-speed.tex
new file mode 100644
index 000000000..2c8fc1d31
--- /dev/null
+++ b/doc/context/presentations/context/2013/context-2013-speed.tex
@@ -0,0 +1,108 @@
+% language=uk
+
+% \enablemode[print]
+
+\usemodule[present-stepwise,present-tiles,abr-02]
+
+\definecolor[maincolor] [darkgray]
+\definecolor[othercolor][r=.3,g=.3]
+
+\setupinteractionscreen
+ [option=max]
+
+% \setupalign
+% [flushleft,tolerant]
+
+\setupbodyfont[15pt]
+
+\startdocument
+ [title={Speed:\\\\why it matters\\and why we care},
+ subtitle={Hans Hagen\\\ConTeXt\ Meeting\\September 2013}]
+
+\StartSteps \starttopic [title={Speed}]
+
+ \startitemize
+ \startitem speed matters in a edit-run-preview cycle although this is mostly perception \FlushStep \stopitem
+ \startitem the nicer the interface, the slower it gets, but you seldom set something up so that is not much of a burden\FlushStep \stopitem
+ \startitem everything you provide gets used at some point, also in inefficient ways, so best know your weak spots \FlushStep \stopitem
+ \startitem lots of local (grouped) tweaks leads to many mechanisms kicking in unseen, grouping matters \FlushStep \stopitem
+ \startitem wrong use of functionality can have drastic and unexpected speed penalties \FlushStep \stopitem
+ \stopitemize
+
+\stoptopic \StopSteps
+
+\StartSteps \starttopic [title={Pages per minute}]
+
+ \startitemize
+ \startitem we have speed up the baseline performance (in pages per second) as much as possible \FlushStep \stopitem
+ \startitem we try to identify and optimize critical routines, both at the \TEX\ and \LUA\ end \FlushStep \stopitem
+ \startitem of course the used hardware machine and versions of \LUATEX\ and \CONTEXT\ matter \FlushStep \stopitem
+ \stopitemize
+
+ \blank
+
+ \starttyping
+ \dorecurse {1000} {test \page}
+ \stoptyping
+
+ \FlushStep
+
+ \blank
+
+ \starttabulate[|r|r|r|r|r|r|]
+ \HL
+ \NC \bf \# pages \NC \bf Jan \NC \bf Apr \NC \bf May \NC \bf Sep \NC (nuts) \NC \NR
+ \HL
+ \NC 1 \NC 2 \NC 2 \NC 2 \NC 4 \NC 4 \NC \NR
+ \NC 10 \NC 15 \NC 17 \NC 17 \NC 36 \NC 37 \NC \NR
+ \NC 100 \NC 90 \NC 109 \NC 110 \NC 237 \NC 236 \NC \NR
+ \NC 1000 \NC 185 \NC 234 \NC 259 \NC 509 \NC 512 \NC \NR
+ \NC 10000 \NC 215 \NC 258 \NC 289 \NC 548 \NC 557 \NC \NR
+ \HL
+ \stoptabulate
+
+ < 06/2013, \LUATEX: 0.72+, Dell M90, SSD, 4GB, 2.33 Ghz T7600, Windows 8/32 bit\par
+ > 06/2013, \LUATEX: 0.72+, Dell 6700, SSD, 16GB, 2.80 Ghz 3840QM, Windows 8/64 bit\par
+
+ \FlushStep
+
+\stoptopic \StopSteps
+
+\StartSteps \starttopic [title={What happens}]
+
+ \startitemize
+ \startitem load macros and \LUA\ code is loaded from the format \FlushStep \stopitem
+ \startitem the system gets initialized, think of fonts and languages \FlushStep \stopitem
+ \startitem additional (runtime) files are loaded \FlushStep \stopitem
+ \startitem text is typeset and eventually gets passed to the page builder \FlushStep \stopitem
+ \startitem pages are packaged, this includes reverting to global document states \FlushStep \stopitem
+ \startitem the \PDF\ representation is created \FlushStep \stopitem
+ \startitem each of these steps has its bottlenecks \FlushStep \stopitem
+ \startitem the more we don, the more \LUA\ gets involved \FlushStep \stopitem
+ \stopitemize
+
+\stoptopic \StopSteps
+
+\StartSteps \starttopic [title={What we can do}]
+
+ \startitemize
+ \startitem avoid copying boxes where possible \FlushStep \stopitem
+ \startitem only enable initializers and finalizers when functionality is used \FlushStep \stopitem
+ \startitem be clever with fonts, in usage as well as in supporting features \FlushStep \stopitem
+ \startitem use trial runs in multi||pass mechanisms \FlushStep \stopitem
+ \startitem avoid too much macro expansion (only matters for tracing) \FlushStep \stopitem
+ \startitem accept that more functionality has a price \FlushStep \stopitem
+ \startitem improve the engine and cook up more clever low level code \FlushStep \stopitem
+ \stopitemize
+
+ but
+
+ \startitemize
+ \startitem don't compromise functionality \FlushStep \stopitem
+ \startitem avoid too obscure code \FlushStep \stopitem
+ \startitem forget about optimization by means of combining functionality \FlushStep \stopitem
+ \stopitemize
+
+\stoptopic \StopSteps
+
+\stopdocument
diff --git a/doc/context/presentations/context/2015/context-2015-status.pdf b/doc/context/presentations/context/2015/context-2015-status.pdf
new file mode 100644
index 000000000..49ef295c2
--- /dev/null
+++ b/doc/context/presentations/context/2015/context-2015-status.pdf
Binary files differ
diff --git a/doc/context/presentations/context/2015/context-2015-status.tex b/doc/context/presentations/context/2015/context-2015-status.tex
new file mode 100644
index 000000000..6ccdea876
--- /dev/null
+++ b/doc/context/presentations/context/2015/context-2015-status.tex
@@ -0,0 +1,87 @@
+\usemodule[present-ovals]
+
+\setupwhitespace
+ [halfline]
+
+\doifelsemode {atpragma} {
+ \usetypescriptfile[ghz]
+ \setupbodyfont[palatino-informal]
+ \setupbodyfont[24pt,ss]
+ \definefont[whatever][file:palatinosansinflcom-med*default at 10pt]
+} {
+ \setupbodyfont[palatino]
+ \setupbodyfont[24pt,ss]
+ \definefont[whatever][Bold*default at 10pt]
+}
+
+\setuplayout[topspace=.10\paperheight]
+
+\definecolor[maincolor][orange]
+%definecolor[othercolor][black]
+
+\startuseMPgraphic{common}
+
+ detailpaths ; % let draw = detaileddraw ;
+
+ drawoptionsfactor := .03bp ;
+
+ drawlineoptions (withpen pencircle scaled 1.0 drawoptionsfactor withcolor .5white) ;
+ drawpointoptions (withpen pencircle scaled 4.0 drawoptionsfactor withcolor white) ;
+ drawcontroloptions(withpen pencircle scaled 2.5 drawoptionsfactor withcolor white) ;
+ drawpathoptions (withpen pencircle scaled 5.0 drawoptionsfactor withcolor .8white) ;
+
+ vardef oneliner(expr t, x, y) =
+ outlinetext.b (t) (withcolor .75white) (withcolor .25white) ysized 2cm shifted (x,y)
+ enddef ;
+
+\stopuseMPgraphic
+
+\startuseMPgraphic{whatif}
+ \includeMPgraphic{common}
+ normaldraw oneliner("\whatever \setstrut \strut \ConTeXt", 0mm, 0mm) ;
+ normaldraw oneliner("\whatever \setstrut \strut 2015", 11mm,-20mm) ;
+\stopuseMPgraphic
+
+\startdocument
+
+\startstandardmakeup
+ \scale[width=\textwidth]{\useMPgraphic{whatif}}
+\stopstandardmakeup
+
+\starttexdefinition statusstep #1
+ \startparagraph
+ #1
+ \stopparagraph
+\stoptexdefinition
+
+\starttexdefinition status #1#2
+ \starttitle[title={#1}]
+ \processcommalist[#2]\statusstep
+ \stoptitle
+\stoptexdefinition
+
+\status{fonts} {new loader, stable interfaces, related mechanisms can be cleaned up, extensions possible}
+\status{hyphenation} {experimental, normalization considered}
+\status{spacing} {functional stable, maybe some cleanup needed}
+\status{metafun} {updated tex and backend interface, occasional additions, module for graphs pending}
+\status{math} {stable, some improvements possible, maybe lua variant (fun project)}
+\status{margins} {quite okay, right2left adaption in progress}
+\status{structure} {stable, maybe cleanup}
+\status{conversions} {stable}
+\status{sorting} {works, extension possible, japanese in progress}
+\status{publications}{getting there, documentation pending}
+\status{color} {stable}
+\status{backend} {stable, awaiting some cleanup in engine backend}
+\status{images} {stable}
+\status{epub} {always work in progress}
+\status{columns} {mixed more or less stable, columsets to be redone, better float support needed}
+\status{file io} {stable}
+\status{tables} {stable, maybe some xtables extensions}
+\status{verbatim} {stable, maybe some cleanup}
+\status{xml} {stable, maybe some more helpers}
+\status{positioning} {okay, optimization possible}
+\status{cldf} {okay, always more possible}
+\status{layout} {okay, bidi model neeed}
+\status{scripts} {work in progress}
+
+\stopdocument
diff --git a/doc/context/presentations/context/2016/context-2016-luatex.pdf b/doc/context/presentations/context/2016/context-2016-luatex.pdf
new file mode 100644
index 000000000..2319aa995
--- /dev/null
+++ b/doc/context/presentations/context/2016/context-2016-luatex.pdf
Binary files differ
diff --git a/doc/context/presentations/context/2016/context-2016-luatex.tex b/doc/context/presentations/context/2016/context-2016-luatex.tex
new file mode 100644
index 000000000..348c2ea5f
--- /dev/null
+++ b/doc/context/presentations/context/2016/context-2016-luatex.tex
@@ -0,0 +1,242 @@
+\usemodule[present-luatex]
+
+\startdocument
+ [title={\luaTeX},
+ subtitle={Version 1.00},
+ location={ConTeXt meeting \emdash\ September 2016},
+ mp:title={luatex},
+ mp:subtitle={1.00\space\endash\space2016}]
+
+\startstandardmakeup
+
+After ten years of stepwise development and experimenting we release version 1.00
+of \LuaTeX\ during the 10\high{th} \ConTeXt\ meeting in the Netherlands, September
+2016.
+
+The interface is now rather stable and will not change significantly which means
+that one can write stable packages.
+
+So, it's time for a bit reflection as well as time to tell what we will be doing
+next.
+
+\stopstandardmakeup
+
+\startstandardmakeup
+
+Around 2005, after we talked a bit about it, Hartmut added the \Lua\ scripting
+language to \pdfTeX\ as an experiment.
+
+This add|-|on was inspired by the \Lua\ extension to the Scite editor that I
+(still) use.
+
+\stopstandardmakeup
+
+\startstandardmakeup
+
+One could query counter registers and box dimensions and print strings to the
+\TeX\ input buffer.
+
+The Oriental \TeX\ project then made it possible to go forward and come up with a
+complete interface.
+
+For this, Taco converted the code base from Pascal to C, an impressive effort.
+
+\stopstandardmakeup
+
+\startstandardmakeup
+
+We spent more than a year intensively discussing, testing and implementing
+the interface between \TeX\ and \Lua.
+
+In successive years we polished things and extended bits and pieces.
+
+The last few years we cleaned up, filled in gaps and reached the point where we
+were more of less satisfied.
+
+\stopstandardmakeup
+
+\startstandardmakeup
+
+The core is still traditional \TeX, but extended with \pdfTeX\ protrusion and
+expansion (reworked) and directional features from Aleph (cleaned up).
+
+\stopstandardmakeup
+
+\startstandardmakeup
+
+The font subsystem accept now wide fonts.
+
+The hyphenation machinery can use runtime loaded (and extended) patterns.
+
+Hyphenation, ligaturing, kerning are separated.
+
+Most steps in processing node lists can be intercepted using callbacks.
+
+The math machinery has opentype math code paths.
+
+\stopstandardmakeup
+
+\startstandardmakeup
+
+All in- and output can be controlled and intercepted.
+
+The backend code has been separated better.
+
+You can write (simple) parsers.
+
+Nodes can be accessed and manipulated.
+
+Images and reuseable boxes are now native.
+
+\stopstandardmakeup
+
+\startstandardmakeup
+
+The project is driven by \ConTeXt\ users and \ConTeXt\ development.
+
+Right from the start \ConTeXt\ supported \LuaTeX.
+
+This means that most mechanisms have been tested in production.
+
+Raw performance is less than 8 bit \pdfTeX\ but in practice and on modern
+machines \LuaTeX\ behaves well.
+
+\stopstandardmakeup
+
+\startstandardmakeup
+
+We will continue development, but functionality will stay stable within versions.
+Of course bugs will be fixed.
+
+The code will be further streamlined and documented. We deliberately postponed some
+cleanup till after version 1.00.
+
+Of course the manual will be improved over time.
+
+\stopstandardmakeup
+
+\startstandardmakeup[bottom=,top=]
+
+ \vfil
+
+ \ssbf
+
+ Hans Hagen \par
+ Hartmut Henkel \par
+ Taco Hoekwater \par
+ Luigi Scarso \par
+
+ \vfil \vfil \vfil
+
+ \txx
+
+ many thanks to all the\break
+ early adopters
+
+ \vfil
+
+\stopstandardmakeup
+
+% ideas
+
+\startstandardmakeup
+
+ \midaligned{Some ideas (1)}
+
+ So far we managed to avoid extensions beyond those needed as part of the opening
+ up.
+
+ We stick close to Don Knuths concepts so that existing documentation still
+ conceptualy applies. We keep our promise of not adding to the core.
+
+ We might open up (make configureable) some of the still hard coded properties.
+
+\stopstandardmakeup
+
+\startstandardmakeup
+
+ \midaligned{Some ideas (2)}
+
+ Some node lists can use a bit of (non critical) cleanup, for instance passive
+ nodes, local par nodes, and other left|-|overs. Maybe we should add missing
+ left|/|right skips.
+
+\stopstandardmakeup
+
+\startstandardmakeup
+
+ \midaligned{Some ideas (3)}
+
+ We can optimize some callback resolution (more direct) so that we can gain a little
+ performance.
+
+\stopstandardmakeup
+
+\startstandardmakeup
+
+ \midaligned{Some ideas (4)}
+
+ Inheritance of attributes needs checking and maybe we need to permits some more
+ explicit settings.
+
+\stopstandardmakeup
+
+\startstandardmakeup
+
+ \midaligned{Some ideas (5)}
+
+ Bring some more code to the api file. Use the global PDF and \Lua\ states
+ consistently. Some macros can probably go away.
+
+\stopstandardmakeup
+
+\startstandardmakeup
+
+ \midaligned{Some ideas (6)}
+
+ Minimize return values of \Lua\ functions; only return nil when we expect
+ multiple calls in in one line.
+
+\stopstandardmakeup
+
+\startstandardmakeup
+
+ \midaligned{Some ideas (7)}
+
+ Figure out a way to deal with literals in virtual characters (relates to font
+ switching in the result).
+
+\stopstandardmakeup
+
+\startstandardmakeup
+
+ \midaligned{Some ideas (8)}
+
+ Maybe reorganize some code so that documentation is easier. See if we can stick
+ close to what Don Knuth documents.
+
+\stopstandardmakeup
+
+\startstandardmakeup
+
+ \midaligned{Some ideas (9)}
+
+ Cleanup and isolate the backend a bit more. Maybe add a bit more options to
+ delegate to \Lua. Get rid of some historic PDF artifacts.
+
+\stopstandardmakeup
+
+\startstandardmakeup
+
+ \midaligned{Some ideas (10)}
+
+ It is tempting to think of a (lean and mean) \LuaTeX\ variant for \ConTeXt.
+
+ We will not touch stable unless it concerns bug fixes, but we will expose
+ \ConTeXt\ users to the experimental branch (as we do now).
+
+ So \unknown\ be prepared.
+
+\stopstandardmakeup
+
+\stopdocument
diff --git a/doc/context/presentations/examples/present-balls-001.pdf b/doc/context/presentations/examples/present-balls-001.pdf
new file mode 100644
index 000000000..7960df97c
--- /dev/null
+++ b/doc/context/presentations/examples/present-balls-001.pdf
Binary files differ
diff --git a/doc/context/presentations/examples/present-balls-001.tex b/doc/context/presentations/examples/present-balls-001.tex
new file mode 100644
index 000000000..e806fc9e8
--- /dev/null
+++ b/doc/context/presentations/examples/present-balls-001.tex
@@ -0,0 +1,19 @@
+\usemodule[present-balls]
+
+\starttext
+
+\TitlePage{Do you know \TEX ?}
+
+\startbuffer
+\StartIdea
+ \StartItem We use \TEX\ for typesetting \unknown \StopItem
+ \StartItem mathematical text \unknown \StopItem
+ \StartItem but also for text that has no math \unknown \StopItem
+ \StartItem or presentations like this \unknown \StopItem
+ \StartItem and whatever you can come up with! \StopItem
+\StopIdea
+\stopbuffer
+
+\dorecurse{6}{\getbuffer}
+
+\stoptext
diff --git a/doc/context/presentations/examples/present-colorful-001.pdf b/doc/context/presentations/examples/present-colorful-001.pdf
new file mode 100644
index 000000000..9db2ba07a
--- /dev/null
+++ b/doc/context/presentations/examples/present-colorful-001.pdf
Binary files differ
diff --git a/doc/context/presentations/examples/present-colorful-001.tex b/doc/context/presentations/examples/present-colorful-001.tex
new file mode 100644
index 000000000..ea4e758b4
--- /dev/null
+++ b/doc/context/presentations/examples/present-colorful-001.tex
@@ -0,0 +1,25 @@
+\usemodule[present-colorful]
+
+\starttext
+
+\TitlePage{Title Page\\pre-colorfull}
+
+\Topics{Some Nice Quotes}
+
+\Topic{A Few}
+
+\Subject{Knuth} \input knuth
+\Subject{Tufte} \input tufte
+
+\startitemize
+\item test
+\item test
+\item test
+\stopitemize
+
+\Topic{Some More}
+
+\Subject{Zapf} \input zapf
+\Subject{Bryson} \input bryson
+
+\stoptext
diff --git a/doc/context/presentations/examples/present-funny-001.pdf b/doc/context/presentations/examples/present-funny-001.pdf
new file mode 100644
index 000000000..05a50de83
--- /dev/null
+++ b/doc/context/presentations/examples/present-funny-001.pdf
Binary files differ
diff --git a/doc/context/presentations/examples/present-funny-001.tex b/doc/context/presentations/examples/present-funny-001.tex
new file mode 100644
index 000000000..b475721ac
--- /dev/null
+++ b/doc/context/presentations/examples/present-funny-001.tex
@@ -0,0 +1,20 @@
+\usemodule[present-funny]
+
+\starttext
+
+\TitlePage{Title Page\\pre-funny}
+
+\Topics{Some Nice Quotes}
+
+\Topic{A Few}
+
+\Subject{Knuth} \input knuth
+\Subject{Tufte} \input tufte
+
+\Topic{Some More}
+
+\Subject{Zapf} \input zapf
+\Subject{Bryson} \input bryson
+
+\stoptext
+
diff --git a/doc/context/presentations/examples/present-fuzzy-001.pdf b/doc/context/presentations/examples/present-fuzzy-001.pdf
new file mode 100644
index 000000000..04c0230e2
--- /dev/null
+++ b/doc/context/presentations/examples/present-fuzzy-001.pdf
Binary files differ
diff --git a/doc/context/presentations/examples/present-fuzzy-001.tex b/doc/context/presentations/examples/present-fuzzy-001.tex
new file mode 100644
index 000000000..9351d0980
--- /dev/null
+++ b/doc/context/presentations/examples/present-fuzzy-001.tex
@@ -0,0 +1,19 @@
+\usemodule[present-fuzzy]
+
+\starttext
+
+\TitlePage{Title Page\\pre-fuzzy}
+
+\Topics{Some Nice Quotes}
+
+\Topic{A Few}
+
+\Subject{Knuth} \input knuth
+\Subject{Tufte} \input tufte
+
+\Topic{Some More}
+
+\Subject{Zapf} \input zapf
+\Subject{Bryson} \input bryson
+
+\stoptext
diff --git a/doc/context/presentations/examples/present-green-001.pdf b/doc/context/presentations/examples/present-green-001.pdf
new file mode 100644
index 000000000..f7ee69d4a
--- /dev/null
+++ b/doc/context/presentations/examples/present-green-001.pdf
Binary files differ
diff --git a/doc/context/presentations/examples/present-green-001.tex b/doc/context/presentations/examples/present-green-001.tex
new file mode 100644
index 000000000..41dd2da16
--- /dev/null
+++ b/doc/context/presentations/examples/present-green-001.tex
@@ -0,0 +1,19 @@
+\usemodule[present-green]
+
+\starttext
+
+\TitlePage{Title Page\\present-green}
+
+\Topics{Some Nice Quotes}
+
+\Topic{A Few}
+
+\Subject{Knuth} \input knuth
+\Subject{Tufte} \input tufte
+
+\Topic{Some More}
+
+\Subject{Zapf} \input zapf
+\Subject{Bryson} \input bryson
+
+\stoptext
diff --git a/doc/context/presentations/examples/present-grow-001.pdf b/doc/context/presentations/examples/present-grow-001.pdf
new file mode 100644
index 000000000..fcd5086e1
--- /dev/null
+++ b/doc/context/presentations/examples/present-grow-001.pdf
Binary files differ
diff --git a/doc/context/presentations/examples/present-grow-001.tex b/doc/context/presentations/examples/present-grow-001.tex
new file mode 100644
index 000000000..0a9d1db6b
--- /dev/null
+++ b/doc/context/presentations/examples/present-grow-001.tex
@@ -0,0 +1,138 @@
+\usemodule[present-grow]
+
+\def\SomeSymbol#1#2{\definedfont[ContextNavigation at #1]\fontcharbyindex{#2}}
+
+\setupcombinations[distance=\FrameOffset,inbetween=\vskip\FrameOffset]
+
+\starttext
+
+\TitlePage{Some Famous Symbols}
+
+\Topic{Symbols}
+
+\StartSample
+ \startcombination[2*2]
+ {\SomeSymbol{5cm}{1}} {}
+ {\SomeSymbol{5cm}{3}} {}
+ {\SomeSymbol{5cm}{2}} {}
+ {\SomeSymbol{5cm}{4}} {}
+ \stopcombination
+\StopSample
+
+\Topic{Previous}
+
+\StartIdea
+ \StartSample
+ \SomeSymbol{7cm}{1}
+ \StopSample
+ \StartText
+ This symbol can be used to indicate a hyperlink to a
+ previous page.
+ \StopText
+\StopIdea
+
+\StartIdea
+ \StartSubText
+ As one can expect there is also a symbol for going to
+ the next page.
+ \StopSubText
+\StopIdea
+
+\Topic{Previous}
+
+\StartIdea
+ \StartSample
+ \SomeSymbol{9cm}{2}
+ \StopSample
+ \StartText
+ This symbol is actually just a mirrored version of the
+ first symbol we showed.
+ \StopText
+\StopIdea
+
+\NoTopic
+
+\StartText
+ Is this nice or not?
+\StopText
+
+\Topic{First and Last}
+
+\StartSample
+ \SomeSymbol{11cm}{3}
+\StopSample
+
+\StartSample
+ \SomeSymbol{11cm}{4}
+\StopSample
+
+\StartIdea
+ \StartSample
+ \SomeSymbol{5cm}{3}
+ \StopSample
+ \StartText
+ A few screens back, we saw this symbol.
+ \StopText
+\StopIdea
+
+\StartIdea
+ \StartSubText
+ This symbol represents the beginning of something.
+ \StopSubText
+\StopIdea
+
+\StartIdea
+ \StartSample
+ \SomeSymbol{5cm}{4}
+ \StopSample
+ \StartSubText
+ Just like this one represents an end.
+ \StopSubText
+\StopIdea
+
+\StartIdea
+ \StartSubText
+ They look just like the symbols found on audio and
+ video players.
+ \StopSubText
+\StopIdea
+
+\Topic{Summary}
+
+\StartIdea
+ \StartSample
+ \SomeSymbol{6cm}{1}
+ \StopSample
+ \StartText
+ So we have a symbol for previous \unknown
+ \StopText
+\StopIdea
+
+\StartIdea
+ \StartSample
+ \SomeSymbol{6cm}{2}
+ \StopSample
+ \StartSubText
+ \unknown\ and one for next \unknown
+ \StopSubText
+\StopIdea
+
+\StartIdea
+ \StartSample
+ \SomeSymbol{6cm}{3}
+ \StopSample
+ \StartSubText
+ \unknown\ and yet another for first \unknown
+ \StopSubText
+\StopIdea
+
+\StartIdea
+ \StartSample
+ \SomeSymbol{6cm}{4}
+ \StopSample
+ \StartSubText
+ \unknown\ and of course for last.
+ \StopSubText
+\StopIdea
+
+\stoptext
diff --git a/doc/context/presentations/examples/present-organic-001.pdf b/doc/context/presentations/examples/present-organic-001.pdf
new file mode 100644
index 000000000..b49a4437a
--- /dev/null
+++ b/doc/context/presentations/examples/present-organic-001.pdf
Binary files differ
diff --git a/doc/context/presentations/examples/present-organic-001.tex b/doc/context/presentations/examples/present-organic-001.tex
new file mode 100644
index 000000000..bdd56c5c6
--- /dev/null
+++ b/doc/context/presentations/examples/present-organic-001.tex
@@ -0,0 +1,17 @@
+\usemodule[present-organic]
+
+\setupMPvariables[page][alternative=3]
+
+\startdocument
+ [title={A Few Nice Quotes},
+ subtitle={A Simple Style Demo},
+ location={Hans Hagen, August 2000}]
+
+ \Topic {Douglas R. Hofstadter} \input douglas \page
+ \Topic {Donald E. Knuth} \input knuth \page
+ \Topic {Edward R. Tufte} \input tufte \page
+ \Topic {Hermann Zapf} \input zapf \page
+ %Topic {David F. Stork} \input stork \page
+
+\stoptext
+
diff --git a/doc/context/presentations/examples/present-original-001.pdf b/doc/context/presentations/examples/present-original-001.pdf
new file mode 100644
index 000000000..06052f284
--- /dev/null
+++ b/doc/context/presentations/examples/present-original-001.pdf
Binary files differ
diff --git a/doc/context/presentations/examples/present-original-001.tex b/doc/context/presentations/examples/present-original-001.tex
new file mode 100644
index 000000000..bd7dec414
--- /dev/null
+++ b/doc/context/presentations/examples/present-original-001.tex
@@ -0,0 +1,19 @@
+\usemodule[present-original]
+
+\starttext
+
+\TitlePage{Title Page\\present-original}
+
+\Topics{Some Nice Quotes}
+
+\Topic{A Few}
+
+\Subject{Knuth} \input knuth
+\Subject{Tufte} \input tufte
+
+\Topic{Some More}
+
+\Subject{Zapf} \input zapf
+\Subject{Bryson} \input bryson
+
+\stoptext
diff --git a/doc/context/presentations/examples/present-punk-001.pdf b/doc/context/presentations/examples/present-punk-001.pdf
new file mode 100644
index 000000000..e49761287
--- /dev/null
+++ b/doc/context/presentations/examples/present-punk-001.pdf
Binary files differ
diff --git a/doc/context/presentations/examples/present-punk-001.tex b/doc/context/presentations/examples/present-punk-001.tex
new file mode 100644
index 000000000..932cb1b2f
--- /dev/null
+++ b/doc/context/presentations/examples/present-punk-001.tex
@@ -0,0 +1,22 @@
+\usemodule[present-stepwise,present-punk]
+
+\starttext
+
+\title {Punk for dummies}
+
+\dorecurse{10} {
+
+ \title{Just a few dummy pages}
+
+ \StartSteps
+ \startitemize[packed]
+ \startitem bla \FlushStep \stopitem
+ \startitem bla bla \FlushStep \stopitem
+ \startitem bla bla bla \FlushStep \stopitem
+ \startitem bla bla bla bla \FlushStep \stopitem
+ \stopitemize
+ \StopSteps
+
+}
+
+\stoptext
diff --git a/doc/context/presentations/examples/present-random-001.pdf b/doc/context/presentations/examples/present-random-001.pdf
new file mode 100644
index 000000000..eaed9e641
--- /dev/null
+++ b/doc/context/presentations/examples/present-random-001.pdf
Binary files differ
diff --git a/doc/context/presentations/examples/present-random-001.tex b/doc/context/presentations/examples/present-random-001.tex
new file mode 100644
index 000000000..87e328e55
--- /dev/null
+++ b/doc/context/presentations/examples/present-random-001.tex
@@ -0,0 +1,38 @@
+% \enablemode[paper]
+% \usemodule[present-stepwise]
+
+\usemodule[present-random]
+
+\usemodule[abr-02]
+
+\doifelsemode {atpragma} {
+ \usetypescriptfile[type-hgz]
+ \usetypescript[palatino-informal]
+ \setupbodyfont[palatino-informal,15pt]
+} {
+ \setupbodyfont[modern-variable,15pt]
+}
+
+\logo [METAPOST] {MetaPost}
+
+\starttext
+
+\StartTopics
+ \StartTopic[1] A \StopTopic
+ \StartTopic[5] B \StopTopic
+ \StartTopic[9] C \StopTopic
+\StopTopics
+
+\StartTopics
+ \StartTopic A \StopTopic
+ \StartTopic B \StopTopic
+ \StartTopic C \StopTopic
+ \StartTopic D \StopTopic
+ \StartTopic E \StopTopic
+ \StartTopic F \StopTopic
+ \StartTopic G \StopTopic
+ \StartTopic H \StopTopic
+ \StartTopic I \StopTopic
+\StopTopics
+
+\stoptext
diff --git a/doc/context/presentations/examples/present-shaded-001.pdf b/doc/context/presentations/examples/present-shaded-001.pdf
new file mode 100644
index 000000000..da760f3cd
--- /dev/null
+++ b/doc/context/presentations/examples/present-shaded-001.pdf
Binary files differ
diff --git a/doc/context/presentations/examples/present-shaded-001.tex b/doc/context/presentations/examples/present-shaded-001.tex
new file mode 100644
index 000000000..d71c620ca
--- /dev/null
+++ b/doc/context/presentations/examples/present-shaded-001.tex
@@ -0,0 +1,11 @@
+\usemodule[present-shaded]
+
+\startdocument
+ \dorecurse {10} {
+ \startchapter[title={Whatever}][color=shade:#1]
+ \section{test}
+ test #1
+ \namedstructureuservariable{chapter}{color}
+ \stopchapter
+ }
+\stopdocument
diff --git a/doc/context/presentations/examples/present-split-001.pdf b/doc/context/presentations/examples/present-split-001.pdf
new file mode 100644
index 000000000..04d99c848
--- /dev/null
+++ b/doc/context/presentations/examples/present-split-001.pdf
Binary files differ
diff --git a/doc/context/presentations/examples/present-split-001.tex b/doc/context/presentations/examples/present-split-001.tex
new file mode 100644
index 000000000..6d6cc7f99
--- /dev/null
+++ b/doc/context/presentations/examples/present-split-001.tex
@@ -0,0 +1,15 @@
+\usemodule[present-split]
+
+\startdocument
+ [title=Some Quotes,
+ subtitle=that you probably know by now]
+
+ \Topic{Tufte} \input tufte
+ \Topic{Knuth} \input knuth
+ \Topic{Reich} \input reich
+ \Topic{Zapf} \input zapf
+ \Topic{Materie} \input materie
+ %Topic{Stork} \input stork
+
+\stopdocument
+
diff --git a/doc/context/presentations/examples/present-stepper-001.pdf b/doc/context/presentations/examples/present-stepper-001.pdf
new file mode 100644
index 000000000..d803c1706
--- /dev/null
+++ b/doc/context/presentations/examples/present-stepper-001.pdf
Binary files differ
diff --git a/doc/context/presentations/examples/present-stepper-001.tex b/doc/context/presentations/examples/present-stepper-001.tex
new file mode 100644
index 000000000..5be4cf691
--- /dev/null
+++ b/doc/context/presentations/examples/present-stepper-001.tex
@@ -0,0 +1,51 @@
+\usemodule[present-stepper]
+
+\starttext
+
+\TitlePage{Stepwise\\Refinement}
+
+\Topics{Topics}
+
+\Topic{Female Artists}
+
+\StartSteps
+
+\startitemize
+\item Fiona Apple \FlushStep
+\item Tori Amos \FlushStep
+\item Kate Bush \FlushStep
+\item Heather Nova \FlushStep
+\item Alanis Morissette \FlushStep
+\item Suzanne Vega \FlushStep
+\stopitemize
+
+\StopSteps
+
+\Topic{Male Composers}
+
+\StartSteps
+
+\startitemize
+\item John Adams \FlushStep
+\item Steve Reich \FlushStep
+\item Louis Andriessen \FlushStep
+\item Olivier Messiaen \FlushStep
+\stopitemize
+
+\StopSteps
+
+\Topic{And Some More}
+
+\StartSteps
+
+\startitemize
+\item Mark Hollis \FlushStep
+\item Roger Waters \FlushStep
+\item David Gilmore \FlushStep
+\item Peter Gabriel \FlushStep
+\item Randy Newman \FlushStep
+\stopitemize
+
+\StopSteps
+
+\stoptext
diff --git a/doc/context/presentations/examples/present-tiles-001.pdf b/doc/context/presentations/examples/present-tiles-001.pdf
new file mode 100644
index 000000000..ca04eff4e
--- /dev/null
+++ b/doc/context/presentations/examples/present-tiles-001.pdf
Binary files differ
diff --git a/doc/context/presentations/examples/present-tiles-001.tex b/doc/context/presentations/examples/present-tiles-001.tex
new file mode 100644
index 000000000..ca9799a71
--- /dev/null
+++ b/doc/context/presentations/examples/present-tiles-001.tex
@@ -0,0 +1,20 @@
+\usemodule[present-tiles]
+
+\startdocument[title=Whatever We\\Want Here,subtitle=Whatever We\\Want There]
+
+\dorecurse {12} {
+ \starttopic[title=Topic #1]
+ \input tufte
+ \blank[3*line]
+ \bold{Buttons (roll-over in acrobat):}
+ \blank[line]
+ \starttabulate[|T||]
+ \NC click left top \NC home \NC \NR
+ \NC click right top \NC contents \NC \NR
+ \NC click left bottom \NC previous \NC \NR
+ \NC click left bottom \NC next page \NC \NR
+ \stoptabulate
+ \stoptopic
+}
+
+\stopdocument
diff --git a/doc/context/presentations/examples/present-windows-001.pdf b/doc/context/presentations/examples/present-windows-001.pdf
new file mode 100644
index 000000000..58fdf684d
--- /dev/null
+++ b/doc/context/presentations/examples/present-windows-001.pdf
Binary files differ
diff --git a/doc/context/presentations/examples/present-windows-001.tex b/doc/context/presentations/examples/present-windows-001.tex
new file mode 100644
index 000000000..3a08ff4af
--- /dev/null
+++ b/doc/context/presentations/examples/present-windows-001.tex
@@ -0,0 +1,41 @@
+\usemodule[present-windows]
+
+\starttext
+
+\setupbodyfont[12pt]
+
+\TitlePage{Quotes, Quotes\\and more quotes}
+
+\StartIdea
+ \StartSample
+ sample: \input knuth \par
+ \StopSample
+ \StartText
+ \Topic{Tufte}
+ text: \input tufte \par
+ \StopText
+\StopIdea
+
+\StartIdea
+ \StartSample
+ sample: \input materie \par
+ \StopSample
+ \StartText
+ text: \input reich \par
+ \StopText
+\StopIdea
+
+\StartText
+ text: \input tufte \par
+\StopText
+
+\StartIdea
+ \StartSample
+ sample: \input knuth \par
+ \StopSample
+ \StartText
+ text: \input tufte \par
+ \StopText
+\StopIdea
+
+\stoptext
diff --git a/doc/context/presentations/present-readme.pdf b/doc/context/presentations/present-readme.pdf
new file mode 100644
index 000000000..e937a5e3e
--- /dev/null
+++ b/doc/context/presentations/present-readme.pdf
Binary files differ
diff --git a/doc/context/presentations/present-readme.tex b/doc/context/presentations/present-readme.tex
new file mode 100644
index 000000000..e5025a3fe
--- /dev/null
+++ b/doc/context/presentations/present-readme.tex
@@ -0,0 +1,33 @@
+\usemodule[art-01]
+
+\noheaderandfooterlines
+
+\starttext
+
+\subject{Presentations}
+
+For demonstration purposes we ship some presentations. Some of these are called
+up when a style is processed (in demo mode). The look and feel evolves with
+\ConTeXt\ and often a style uses some trickery (\TeX, \ConTeXt, \MetaPost, \Lua\
+etc.) I was playing with at that moment. The older styles therefore use more PDF
+trickery than the later ones (especially because in the end the viewers were less
+stable than we hoped).
+
+Of the hundreds of presentations made so far only a subset can be found here. You
+can find some more on the web (conference websites). Many presentations are
+outdated but might have some historic value or show some tricks. The real old
+ones are not here anyway. Some presentations build upon a previous one although I
+try to avoid duplicate talks. Of course status reports can be somewhat redundant
+but keep in mind that meetings are also for developers.
+
+\ConTeXt, \LuaTeX and \MetaPost\ related presentations happened at meetings of \TeX\
+user groups like TUG, NTG, Bacho\TeX, Dante, CSTUG, UKTUG, GUTENBERG, but also at
+other occasions but not all make sense to collect here, if only because when they
+were close in time some were similar. Also, I just deleted some sources when I
+found them irrelevant for reuse. You can always report a missing one in which
+case I'll see if I can find back the source. If you really want some MkII style
+in MkIV too, let me know.
+
+Hans Hagen
+
+\stoptext
diff --git a/doc/context/scripts/mkii/ctxtools.html b/doc/context/scripts/mkii/ctxtools.html
index 06ab4ba0d..405965c1e 100644
--- a/doc/context/scripts/mkii/ctxtools.html
+++ b/doc/context/scripts/mkii/ctxtools.html
@@ -17,7 +17,7 @@
<title>CtxTools 1.3.5</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkii/ctxtools.man b/doc/context/scripts/mkii/ctxtools.man
index a741aca56..d85ab59e4 100644
--- a/doc/context/scripts/mkii/ctxtools.man
+++ b/doc/context/scripts/mkii/ctxtools.man
@@ -1,4 +1,4 @@
-.TH "ctxtools" "1" "01-01-2016" "version 1.3.5" "CtxTools"
+.TH "ctxtools" "1" "01-01-2017" "version 1.3.5" "CtxTools"
.SH NAME
.B ctxtools
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkii/imgtopdf.html b/doc/context/scripts/mkii/imgtopdf.html
index 40863c4b8..ec75e4886 100644
--- a/doc/context/scripts/mkii/imgtopdf.html
+++ b/doc/context/scripts/mkii/imgtopdf.html
@@ -17,7 +17,7 @@
<title>ImgToPdf 1.1.2</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkii/imgtopdf.man b/doc/context/scripts/mkii/imgtopdf.man
index 220cbd4a7..4cebf81fe 100644
--- a/doc/context/scripts/mkii/imgtopdf.man
+++ b/doc/context/scripts/mkii/imgtopdf.man
@@ -1,4 +1,4 @@
-.TH "imgtopdf" "1" "01-01-2016" "version 1.1.2" "ImgToPdf"
+.TH "imgtopdf" "1" "01-01-2017" "version 1.1.2" "ImgToPdf"
.SH NAME
.B imgtopdf
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkii/mptopdf.html b/doc/context/scripts/mkii/mptopdf.html
index 4508402b2..24f1325dd 100644
--- a/doc/context/scripts/mkii/mptopdf.html
+++ b/doc/context/scripts/mkii/mptopdf.html
@@ -17,7 +17,7 @@
<title>MPtoPDF 1.4.1</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkii/mptopdf.man b/doc/context/scripts/mkii/mptopdf.man
index 908fba5ce..e1c4ff914 100644
--- a/doc/context/scripts/mkii/mptopdf.man
+++ b/doc/context/scripts/mkii/mptopdf.man
@@ -1,4 +1,4 @@
-.TH "mptopdf" "1" "01-01-2016" "version 1.4.1" "convert MetaPost figures to PDF"
+.TH "mptopdf" "1" "01-01-2017" "version 1.4.1" "convert MetaPost figures to PDF"
.SH NAME
.B mptopdf
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkii/pdftools.html b/doc/context/scripts/mkii/pdftools.html
index 77e3efef3..94b5f1a2a 100644
--- a/doc/context/scripts/mkii/pdftools.html
+++ b/doc/context/scripts/mkii/pdftools.html
@@ -17,7 +17,7 @@
<title>PDFTools 1.2.1</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkii/pdftools.man b/doc/context/scripts/mkii/pdftools.man
index acb3b8c92..b59b9494e 100644
--- a/doc/context/scripts/mkii/pdftools.man
+++ b/doc/context/scripts/mkii/pdftools.man
@@ -1,4 +1,4 @@
-.TH "pdftools" "1" "01-01-2016" "version 1.2.1" "PDFTools"
+.TH "pdftools" "1" "01-01-2017" "version 1.2.1" "PDFTools"
.SH NAME
.B pdftools
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkii/pstopdf.html b/doc/context/scripts/mkii/pstopdf.html
index 43593195e..9b8f50762 100644
--- a/doc/context/scripts/mkii/pstopdf.html
+++ b/doc/context/scripts/mkii/pstopdf.html
@@ -17,7 +17,7 @@
<title>PStoPDF 2.0.1</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkii/pstopdf.man b/doc/context/scripts/mkii/pstopdf.man
index 628903964..b633c731f 100644
--- a/doc/context/scripts/mkii/pstopdf.man
+++ b/doc/context/scripts/mkii/pstopdf.man
@@ -1,4 +1,4 @@
-.TH "pstopdf" "1" "01-01-2016" "version 2.0.1" "PStoPDF"
+.TH "pstopdf" "1" "01-01-2017" "version 2.0.1" "PStoPDF"
.SH NAME
.B pstopdf
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkii/rlxtools.html b/doc/context/scripts/mkii/rlxtools.html
index bb377860d..5aeffa129 100644
--- a/doc/context/scripts/mkii/rlxtools.html
+++ b/doc/context/scripts/mkii/rlxtools.html
@@ -17,7 +17,7 @@
<title>RlxTools 1.0.1</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkii/rlxtools.man b/doc/context/scripts/mkii/rlxtools.man
index 0810b3a35..934623a79 100644
--- a/doc/context/scripts/mkii/rlxtools.man
+++ b/doc/context/scripts/mkii/rlxtools.man
@@ -1,4 +1,4 @@
-.TH "rlxtools" "1" "01-01-2016" "version 1.0.1" "RlxTools"
+.TH "rlxtools" "1" "01-01-2017" "version 1.0.1" "RlxTools"
.SH NAME
.B rlxtools
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkii/texexec.html b/doc/context/scripts/mkii/texexec.html
index 1ba325ba9..8a3a60abd 100644
--- a/doc/context/scripts/mkii/texexec.html
+++ b/doc/context/scripts/mkii/texexec.html
@@ -17,7 +17,7 @@
<title>TeXExec 6.2.1</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkii/texexec.man b/doc/context/scripts/mkii/texexec.man
index a2c3325d0..c0b2a0f35 100644
--- a/doc/context/scripts/mkii/texexec.man
+++ b/doc/context/scripts/mkii/texexec.man
@@ -1,4 +1,4 @@
-.TH "texexec" "1" "01-01-2016" "version 6.2.1" "TeXExec"
+.TH "texexec" "1" "01-01-2017" "version 6.2.1" "TeXExec"
.SH NAME
.B texexec
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkii/texmfstart.html b/doc/context/scripts/mkii/texmfstart.html
index ed149a0d0..9a86eeee3 100644
--- a/doc/context/scripts/mkii/texmfstart.html
+++ b/doc/context/scripts/mkii/texmfstart.html
@@ -17,7 +17,7 @@
<title>texmfstart 7.0.0</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
@@ -86,6 +86,7 @@
<tr><th>--experiments</th><td></td><td>show (known) experiments</td></tr>
<tr><th/><td/><td/></tr>
<tr><th>--expand-braces</th><td></td><td>expand complex variable</td></tr>
+ <tr><th>--resolve-path</th><td></td><td>expand variable (completely resolve paths)</td></tr>
<tr><th>--expand-path</th><td></td><td>expand variable (resolve paths)</td></tr>
<tr><th>--expand-var</th><td></td><td>expand variable (resolve references)</td></tr>
<tr><th>--show-path</th><td></td><td>show path expansion of ...</td></tr>
diff --git a/doc/context/scripts/mkii/texmfstart.man b/doc/context/scripts/mkii/texmfstart.man
index 90a0f9152..5ddb5f6b2 100644
--- a/doc/context/scripts/mkii/texmfstart.man
+++ b/doc/context/scripts/mkii/texmfstart.man
@@ -1,4 +1,4 @@
-.TH "mtxrun" "1" "01-01-2016" "version 1.31" "ConTeXt TDS Runner Tool"
+.TH "mtxrun" "1" "01-01-2017" "version 1.32" "ConTeXt TDS Runner Tool"
.SH NAME
.B mtxrun
.SH SYNOPSIS
@@ -119,6 +119,9 @@ show (known) experiments
.B --expand-braces
expand complex variable
.TP
+.B --resolve-path
+expand variable (completely resolve paths)
+.TP
.B --expand-path
expand variable (resolve paths)
.TP
diff --git a/doc/context/scripts/mkii/texmfstart.xml b/doc/context/scripts/mkii/texmfstart.xml
index c7e719541..a10fef328 100644
--- a/doc/context/scripts/mkii/texmfstart.xml
+++ b/doc/context/scripts/mkii/texmfstart.xml
@@ -2,7 +2,7 @@
<metadata>
<entry name="name">mtxrun</entry>
<entry name="detail">ConTeXt TDS Runner Tool</entry>
- <entry name="version">1.31</entry>
+ <entry name="version">1.32</entry>
</metadata>
<flags>
<category name="basic">
@@ -65,6 +65,7 @@
</subcategory>
<subcategory>
<flag name="expand-braces"><short>expand complex variable</short></flag>
+ <flag name="resolve-path"><short>expand variable (completely resolve paths)</short></flag>
<flag name="expand-path"><short>expand variable (resolve paths)</short></flag>
<flag name="expand-var"><short>expand variable (resolve references)</short></flag>
<flag name="show-path"><short>show path expansion of ...</short></flag>
diff --git a/doc/context/scripts/mkii/textools.html b/doc/context/scripts/mkii/textools.html
index 6e7b2d8aa..397de9d8b 100644
--- a/doc/context/scripts/mkii/textools.html
+++ b/doc/context/scripts/mkii/textools.html
@@ -17,7 +17,7 @@
<title>TeXTools 1.3.1</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkii/textools.man b/doc/context/scripts/mkii/textools.man
index 17830ffae..578c0ded5 100644
--- a/doc/context/scripts/mkii/textools.man
+++ b/doc/context/scripts/mkii/textools.man
@@ -1,4 +1,4 @@
-.TH "textools" "1" "01-01-2016" "version 1.3.1" "TeXTools"
+.TH "textools" "1" "01-01-2017" "version 1.3.1" "TeXTools"
.SH NAME
.B textools
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkii/texutil.html b/doc/context/scripts/mkii/texutil.html
index c98571a07..b5974ab99 100644
--- a/doc/context/scripts/mkii/texutil.html
+++ b/doc/context/scripts/mkii/texutil.html
@@ -17,7 +17,7 @@
<title>TeXUtil 9.1.0</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkii/texutil.man b/doc/context/scripts/mkii/texutil.man
index c8062b7f6..c086eb603 100644
--- a/doc/context/scripts/mkii/texutil.man
+++ b/doc/context/scripts/mkii/texutil.man
@@ -1,4 +1,4 @@
-.TH "texutil" "1" "01-01-2016" "version 9.1.0" "TeXUtil"
+.TH "texutil" "1" "01-01-2017" "version 9.1.0" "TeXUtil"
.SH NAME
.B texutil
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkii/tmftools.html b/doc/context/scripts/mkii/tmftools.html
index af275f69c..1e13062b9 100644
--- a/doc/context/scripts/mkii/tmftools.html
+++ b/doc/context/scripts/mkii/tmftools.html
@@ -17,7 +17,7 @@
<title>TMFTools 1.2.1</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkii/tmftools.man b/doc/context/scripts/mkii/tmftools.man
index f6c0d7dfe..f3fe4cade 100644
--- a/doc/context/scripts/mkii/tmftools.man
+++ b/doc/context/scripts/mkii/tmftools.man
@@ -1,4 +1,4 @@
-.TH "tmftools" "1" "01-01-2016" "version 1.1.0" "TMFTools"
+.TH "tmftools" "1" "01-01-2017" "version 1.1.0" "TMFTools"
.SH NAME
.B tmftools
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkii/xmltools.html b/doc/context/scripts/mkii/xmltools.html
index 5d7d25d3a..fcb27aaf4 100644
--- a/doc/context/scripts/mkii/xmltools.html
+++ b/doc/context/scripts/mkii/xmltools.html
@@ -17,7 +17,7 @@
<title>XMLTools 1.2.1</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkii/xmltools.man b/doc/context/scripts/mkii/xmltools.man
index 7596f20ac..1da86756c 100644
--- a/doc/context/scripts/mkii/xmltools.man
+++ b/doc/context/scripts/mkii/xmltools.man
@@ -1,4 +1,4 @@
-.TH "xmltools" "1" "01-01-2016" "version 1.2.2" "XMLTools"
+.TH "xmltools" "1" "01-01-2017" "version 1.2.2" "XMLTools"
.SH NAME
.B xmltools
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/context.html b/doc/context/scripts/mkiv/context.html
index 5fbf49d2b..c63c81132 100644
--- a/doc/context/scripts/mkiv/context.html
+++ b/doc/context/scripts/mkiv/context.html
@@ -14,17 +14,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
- <title>ConTeXt Process Management 0.63</title>
+ <title>ConTeXt Process Management 1.01</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%; }
+ 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; } .invisible { visibility: hidden; } 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">ConTeXt Process Management 0.63 </div>
+ <div id="top-two">ConTeXt Process Management 1.01 </div>
</div>
</div>
<div id="bottom"> <div id="bottom-one">
@@ -81,7 +81,8 @@
<tr><th/><td/><td/></tr>
<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>--synctex</th><td></td><td>run with synctex enabled (optional value: zipped, unzipped, 1, -1, context)</td></tr>
+ <tr><th>--syncttx</th><td></td><td>a shortcut for --synctex=context</td></tr>
<tr><th>--nodates</th><td></td><td>omit runtime dates in pdf file (optional value: a number (this 1970 offset time) or string "YYYY-MM-DD HH:MM")</td></tr>
<tr><th>--nocompression</th><td></td><td>forcefully turns off compression in the backend</td></tr>
<tr><th>--trailerid</th><td></td><td>alternative trailer id (or constant one)</td></tr>
diff --git a/doc/context/scripts/mkiv/context.man b/doc/context/scripts/mkiv/context.man
index c8359e9e8..88f970e7b 100644
--- a/doc/context/scripts/mkiv/context.man
+++ b/doc/context/scripts/mkiv/context.man
@@ -1,4 +1,4 @@
-.TH "mtx-context" "1" "01-01-2016" "version 0.62" "ConTeXt Process Management"
+.TH "mtx-context" "1" "01-01-2017" "version 1.01" "ConTeXt Process Management"
.SH NAME
.B mtx-context
.SH SYNOPSIS
@@ -111,7 +111,10 @@ run without stopping and do not show messages on the console
run without stopping
.TP
.B --synctex
-run with synctex enabled (optional value: zipped, unzipped, 1, -1)
+run with synctex enabled (optional value: zipped, unzipped, 1, -1, context)
+.TP
+.B --syncttx
+a shortcut for --synctex=context
.TP
.B --nodates
omit runtime dates in pdf file (optional value: a number (this 1970 offset time) or string "YYYY-MM-DD HH:MM")
diff --git a/doc/context/scripts/mkiv/context.xml b/doc/context/scripts/mkiv/context.xml
index 2ba7ee59e..25e92d7a6 100644
--- a/doc/context/scripts/mkiv/context.xml
+++ b/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.62</entry>
+ <entry name="version">1.01</entry>
<entry name="comment">external helpinfo file</entry>
</metadata>
<flags>
@@ -126,7 +126,10 @@
<short>run without stopping</short>
</flag>
<flag name="synctex">
- <short>run with synctex enabled (optional value: zipped, unzipped, 1, -1)</short>
+ <short>run with synctex enabled (optional value: zipped, unzipped, 1, -1, context)</short>
+ </flag>
+ <flag name="syncttx">
+ <short>a shortcut for --synctex=context</short>
</flag>
<flag name="nodates">
<short>omit runtime dates in pdf file (optional value: a number (this 1970 offset time) or string "YYYY-MM-DD HH:MM")</short>
diff --git a/doc/context/scripts/mkiv/luatools.html b/doc/context/scripts/mkiv/luatools.html
index 614896880..5ec428efd 100644
--- a/doc/context/scripts/mkiv/luatools.html
+++ b/doc/context/scripts/mkiv/luatools.html
@@ -17,7 +17,7 @@
<title>luatools 1.35</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkiv/luatools.man b/doc/context/scripts/mkiv/luatools.man
index bcf7fb514..7795a18a4 100644
--- a/doc/context/scripts/mkiv/luatools.man
+++ b/doc/context/scripts/mkiv/luatools.man
@@ -1,4 +1,4 @@
-.TH "luatools" "1" "01-01-2016" "version 1.35" "ConTeXt TDS Management Tool (aka luatools)"
+.TH "luatools" "1" "01-01-2017" "version 1.35" "ConTeXt TDS Management Tool (aka luatools)"
.SH NAME
.B luatools
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-babel.html b/doc/context/scripts/mkiv/mtx-babel.html
index a26e94ed6..97f891516 100644
--- a/doc/context/scripts/mkiv/mtx-babel.html
+++ b/doc/context/scripts/mkiv/mtx-babel.html
@@ -17,7 +17,7 @@
<title>Babel Input To UTF Conversion 1.20</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkiv/mtx-babel.man b/doc/context/scripts/mkiv/mtx-babel.man
index a0a3f312f..236434f94 100644
--- a/doc/context/scripts/mkiv/mtx-babel.man
+++ b/doc/context/scripts/mkiv/mtx-babel.man
@@ -1,4 +1,4 @@
-.TH "mtx-babel" "1" "01-01-2016" "version 1.20" "Babel Input To UTF Conversion"
+.TH "mtx-babel" "1" "01-01-2017" "version 1.20" "Babel Input To UTF Conversion"
.SH NAME
.B mtx-babel
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-base.html b/doc/context/scripts/mkiv/mtx-base.html
index 93d79f40b..7eceb57fc 100644
--- a/doc/context/scripts/mkiv/mtx-base.html
+++ b/doc/context/scripts/mkiv/mtx-base.html
@@ -17,7 +17,7 @@
<title>ConTeXt TDS Management Tool (aka luatools) 1.35</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkiv/mtx-base.man b/doc/context/scripts/mkiv/mtx-base.man
index fdd239c68..d092ae514 100644
--- a/doc/context/scripts/mkiv/mtx-base.man
+++ b/doc/context/scripts/mkiv/mtx-base.man
@@ -1,4 +1,4 @@
-.TH "mtx-base" "1" "01-01-2016" "version 1.35" "ConTeXt TDS Management Tool (aka luatools)"
+.TH "mtx-base" "1" "01-01-2017" "version 1.35" "ConTeXt TDS Management Tool (aka luatools)"
.SH NAME
.B mtx-base
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-bibtex.html b/doc/context/scripts/mkiv/mtx-bibtex.html
index 61a679716..a70c88483 100644
--- a/doc/context/scripts/mkiv/mtx-bibtex.html
+++ b/doc/context/scripts/mkiv/mtx-bibtex.html
@@ -17,7 +17,7 @@
<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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkiv/mtx-bibtex.man b/doc/context/scripts/mkiv/mtx-bibtex.man
index 7fdb304a5..c7fbe4261 100644
--- a/doc/context/scripts/mkiv/mtx-bibtex.man
+++ b/doc/context/scripts/mkiv/mtx-bibtex.man
@@ -1,4 +1,4 @@
-.TH "mtx-bibtex" "1" "01-01-2016" "version 1.00" "bibtex helpers"
+.TH "mtx-bibtex" "1" "01-01-2017" "version 1.00" "bibtex helpers"
.SH NAME
.B mtx-bibtex
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-cache.html b/doc/context/scripts/mkiv/mtx-cache.html
index fdab3ed20..e69a73977 100644
--- a/doc/context/scripts/mkiv/mtx-cache.html
+++ b/doc/context/scripts/mkiv/mtx-cache.html
@@ -17,7 +17,7 @@
<title>ConTeXt & MetaTeX Cache Management 0.10</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
@@ -43,7 +43,7 @@
<tr><th>--erase</th><td></td><td>completely remove cache</td></tr>
<tr><th>--list</th><td></td><td>show cache</td></tr>
<tr><th/><td/><td/></tr>
- <tr><th>--all</th><td></td><td>all (not yet implemented)</td></tr>
+ <tr><th>--fonts</th><td></td><td>only wipe fonts</td></tr>
</table>
<br/>
</div>
diff --git a/doc/context/scripts/mkiv/mtx-cache.man b/doc/context/scripts/mkiv/mtx-cache.man
index 91c9aa45e..f0f6a11ac 100644
--- a/doc/context/scripts/mkiv/mtx-cache.man
+++ b/doc/context/scripts/mkiv/mtx-cache.man
@@ -1,4 +1,4 @@
-.TH "mtx-cache" "1" "01-01-2016" "version 0.10" "ConTeXt & MetaTeX Cache Management"
+.TH "mtx-cache" "1" "01-01-2017" "version 0.10" "ConTeXt & MetaTeX Cache Management"
.SH NAME
.B mtx-cache
.SH SYNOPSIS
@@ -20,8 +20,8 @@ completely remove cache
.B --list
show cache
.TP
-.B --all
-all (not yet implemented)
+.B --fonts
+only wipe fonts
.SH AUTHOR
More information about ConTeXt and the tools that come with it can be found at:
diff --git a/doc/context/scripts/mkiv/mtx-cache.xml b/doc/context/scripts/mkiv/mtx-cache.xml
index 2e37f036c..4bd3acc3d 100644
--- a/doc/context/scripts/mkiv/mtx-cache.xml
+++ b/doc/context/scripts/mkiv/mtx-cache.xml
@@ -2,7 +2,7 @@
<application>
<metadata>
<entry name="name">mtx-cache</entry>
- <entry name="detail">ConTeXt & MetaTeX Cache Management</entry>
+ <entry name="detail">ConTeXt &amp; MetaTeX Cache Management</entry>
<entry name="version">0.10</entry>
</metadata>
<flags>
@@ -13,7 +13,7 @@
<flag name="list"><short>show cache</short></flag>
</subcategory>
<subcategory>
- <flag name="all"><short>all (not yet implemented)</short></flag>
+ <flag name="fonts"><short>only wipe fonts</short></flag>
</subcategory>
</category>
</flags>
diff --git a/doc/context/scripts/mkiv/mtx-chars.html b/doc/context/scripts/mkiv/mtx-chars.html
index 93f1995b9..0cc3840e6 100644
--- a/doc/context/scripts/mkiv/mtx-chars.html
+++ b/doc/context/scripts/mkiv/mtx-chars.html
@@ -17,7 +17,7 @@
<title>MkII Character Table Generators 0.10</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkiv/mtx-chars.man b/doc/context/scripts/mkiv/mtx-chars.man
index f05536430..9afac1b5c 100644
--- a/doc/context/scripts/mkiv/mtx-chars.man
+++ b/doc/context/scripts/mkiv/mtx-chars.man
@@ -1,4 +1,4 @@
-.TH "mtx-chars" "1" "01-01-2016" "version 0.10" "MkII Character Table Generators"
+.TH "mtx-chars" "1" "01-01-2017" "version 0.10" "MkII Character Table Generators"
.SH NAME
.B mtx-chars
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-check.html b/doc/context/scripts/mkiv/mtx-check.html
index 0ebbe750f..df50c7288 100644
--- a/doc/context/scripts/mkiv/mtx-check.html
+++ b/doc/context/scripts/mkiv/mtx-check.html
@@ -17,7 +17,7 @@
<title>Basic ConTeXt Syntax Checking 0.10</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkiv/mtx-check.man b/doc/context/scripts/mkiv/mtx-check.man
index 85a352d04..2a23dce7f 100644
--- a/doc/context/scripts/mkiv/mtx-check.man
+++ b/doc/context/scripts/mkiv/mtx-check.man
@@ -1,4 +1,4 @@
-.TH "mtx-check" "1" "01-01-2016" "version 0.10" "Basic ConTeXt Syntax Checking"
+.TH "mtx-check" "1" "01-01-2017" "version 0.10" "Basic ConTeXt Syntax Checking"
.SH NAME
.B mtx-check
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-colors.html b/doc/context/scripts/mkiv/mtx-colors.html
index 1a62f1891..f9b05c74c 100644
--- a/doc/context/scripts/mkiv/mtx-colors.html
+++ b/doc/context/scripts/mkiv/mtx-colors.html
@@ -17,7 +17,7 @@
<title>ConTeXt Color Management 0.10</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkiv/mtx-colors.man b/doc/context/scripts/mkiv/mtx-colors.man
index 9d1de2b35..fb7800586 100644
--- a/doc/context/scripts/mkiv/mtx-colors.man
+++ b/doc/context/scripts/mkiv/mtx-colors.man
@@ -1,4 +1,4 @@
-.TH "mtx-colors" "1" "01-01-2016" "version 0.10" "ConTeXt Color Management"
+.TH "mtx-colors" "1" "01-01-2017" "version 0.10" "ConTeXt Color Management"
.SH NAME
.B mtx-colors
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-context.html b/doc/context/scripts/mkiv/mtx-context.html
index 5fbf49d2b..c63c81132 100644
--- a/doc/context/scripts/mkiv/mtx-context.html
+++ b/doc/context/scripts/mkiv/mtx-context.html
@@ -14,17 +14,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
- <title>ConTeXt Process Management 0.63</title>
+ <title>ConTeXt Process Management 1.01</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%; }
+ 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; } .invisible { visibility: hidden; } 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">ConTeXt Process Management 0.63 </div>
+ <div id="top-two">ConTeXt Process Management 1.01 </div>
</div>
</div>
<div id="bottom"> <div id="bottom-one">
@@ -81,7 +81,8 @@
<tr><th/><td/><td/></tr>
<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>--synctex</th><td></td><td>run with synctex enabled (optional value: zipped, unzipped, 1, -1, context)</td></tr>
+ <tr><th>--syncttx</th><td></td><td>a shortcut for --synctex=context</td></tr>
<tr><th>--nodates</th><td></td><td>omit runtime dates in pdf file (optional value: a number (this 1970 offset time) or string "YYYY-MM-DD HH:MM")</td></tr>
<tr><th>--nocompression</th><td></td><td>forcefully turns off compression in the backend</td></tr>
<tr><th>--trailerid</th><td></td><td>alternative trailer id (or constant one)</td></tr>
diff --git a/doc/context/scripts/mkiv/mtx-context.man b/doc/context/scripts/mkiv/mtx-context.man
index c8359e9e8..88f970e7b 100644
--- a/doc/context/scripts/mkiv/mtx-context.man
+++ b/doc/context/scripts/mkiv/mtx-context.man
@@ -1,4 +1,4 @@
-.TH "mtx-context" "1" "01-01-2016" "version 0.62" "ConTeXt Process Management"
+.TH "mtx-context" "1" "01-01-2017" "version 1.01" "ConTeXt Process Management"
.SH NAME
.B mtx-context
.SH SYNOPSIS
@@ -111,7 +111,10 @@ run without stopping and do not show messages on the console
run without stopping
.TP
.B --synctex
-run with synctex enabled (optional value: zipped, unzipped, 1, -1)
+run with synctex enabled (optional value: zipped, unzipped, 1, -1, context)
+.TP
+.B --syncttx
+a shortcut for --synctex=context
.TP
.B --nodates
omit runtime dates in pdf file (optional value: a number (this 1970 offset time) or string "YYYY-MM-DD HH:MM")
diff --git a/doc/context/scripts/mkiv/mtx-context.xml b/doc/context/scripts/mkiv/mtx-context.xml
index 2ba7ee59e..25e92d7a6 100644
--- a/doc/context/scripts/mkiv/mtx-context.xml
+++ b/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.62</entry>
+ <entry name="version">1.01</entry>
<entry name="comment">external helpinfo file</entry>
</metadata>
<flags>
@@ -126,7 +126,10 @@
<short>run without stopping</short>
</flag>
<flag name="synctex">
- <short>run with synctex enabled (optional value: zipped, unzipped, 1, -1)</short>
+ <short>run with synctex enabled (optional value: zipped, unzipped, 1, -1, context)</short>
+ </flag>
+ <flag name="syncttx">
+ <short>a shortcut for --synctex=context</short>
</flag>
<flag name="nodates">
<short>omit runtime dates in pdf file (optional value: a number (this 1970 offset time) or string "YYYY-MM-DD HH:MM")</short>
diff --git a/doc/context/scripts/mkiv/mtx-dvi.html b/doc/context/scripts/mkiv/mtx-dvi.html
new file mode 100644
index 000000000..e83c43748
--- /dev/null
+++ b/doc/context/scripts/mkiv/mtx-dvi.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>ConTeXt DVI Helpers 0.10</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; } .invisible { visibility: hidden; } 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">ConTeXt DVI Helpers 0.10 </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>--list</th><td></td><td>list dvi commands</td></tr>
+ </table>
+<br/>
+ </div>
+ </div>
+ </body>
+ </html>
diff --git a/doc/context/scripts/mkiv/mtx-dvi.man b/doc/context/scripts/mkiv/mtx-dvi.man
new file mode 100644
index 000000000..09a1301c0
--- /dev/null
+++ b/doc/context/scripts/mkiv/mtx-dvi.man
@@ -0,0 +1,27 @@
+.TH "mtx-dvi" "1" "01-01-2017" "version 0.01" "ConTeXt DVI Helpers"
+.SH NAME
+.B mtx-dvi
+.SH SYNOPSIS
+.B mtxrun --script dvi [
+.I OPTIONS ...
+.B ] [
+.I FILENAMES
+.B ]
+.SH DESCRIPTION
+.B ConTeXt DVI Helpers
+.SH OPTIONS
+.TP
+.B --list
+list dvi commands
+.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/doc/context/scripts/mkiv/mtx-dvi.xml b/doc/context/scripts/mkiv/mtx-dvi.xml
new file mode 100644
index 000000000..e27adf2f2
--- /dev/null
+++ b/doc/context/scripts/mkiv/mtx-dvi.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<application>
+ <metadata>
+ <entry name="name">mtx-dvi</entry>
+ <entry name="detail">ConTeXt DVI Helpers</entry>
+ <entry name="version">0.01</entry>
+ </metadata>
+ <flags>
+ <category name="basic">
+ <subcategory>
+ <flag name="list"><short>list dvi commands</short></flag>
+ </subcategory>
+ </category>
+ </flags>
+</application>
diff --git a/doc/context/scripts/mkiv/mtx-epub.html b/doc/context/scripts/mkiv/mtx-epub.html
index 9b63234be..1a92a794a 100644
--- a/doc/context/scripts/mkiv/mtx-epub.html
+++ b/doc/context/scripts/mkiv/mtx-epub.html
@@ -17,7 +17,7 @@
<title>ConTeXt EPUB Helpers 1.10</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkiv/mtx-epub.man b/doc/context/scripts/mkiv/mtx-epub.man
index f40501270..a3101e84b 100644
--- a/doc/context/scripts/mkiv/mtx-epub.man
+++ b/doc/context/scripts/mkiv/mtx-epub.man
@@ -1,4 +1,4 @@
-.TH "mtx-epub" "1" "01-01-2016" "version 1.10" "ConTeXt EPUB Helpers"
+.TH "mtx-epub" "1" "01-01-2017" "version 1.10" "ConTeXt EPUB Helpers"
.SH NAME
.B mtx-epub
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-fcd.html b/doc/context/scripts/mkiv/mtx-fcd.html
index 4b29b62eb..ec928f79d 100644
--- a/doc/context/scripts/mkiv/mtx-fcd.html
+++ b/doc/context/scripts/mkiv/mtx-fcd.html
@@ -17,7 +17,7 @@
<title>Fast Directory Change 1.00</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkiv/mtx-fcd.man b/doc/context/scripts/mkiv/mtx-fcd.man
index 80d8670e4..c322b55ed 100644
--- a/doc/context/scripts/mkiv/mtx-fcd.man
+++ b/doc/context/scripts/mkiv/mtx-fcd.man
@@ -1,4 +1,4 @@
-.TH "mtx-fcd" "1" "01-01-2016" "version 1.00" "Fast Directory Change"
+.TH "mtx-fcd" "1" "01-01-2017" "version 1.00" "Fast Directory Change"
.SH NAME
.B mtx-fcd
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-flac.html b/doc/context/scripts/mkiv/mtx-flac.html
index cbb3167c0..c4fb4efc4 100644
--- a/doc/context/scripts/mkiv/mtx-flac.html
+++ b/doc/context/scripts/mkiv/mtx-flac.html
@@ -17,7 +17,7 @@
<title>ConTeXt Flac Helpers 0.10</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkiv/mtx-flac.man b/doc/context/scripts/mkiv/mtx-flac.man
index 693cb71ed..87aa90dda 100644
--- a/doc/context/scripts/mkiv/mtx-flac.man
+++ b/doc/context/scripts/mkiv/mtx-flac.man
@@ -1,4 +1,4 @@
-.TH "mtx-flac" "1" "01-01-2016" "version 0.10" "ConTeXt Flac Helpers"
+.TH "mtx-flac" "1" "01-01-2017" "version 0.10" "ConTeXt Flac Helpers"
.SH NAME
.B mtx-flac
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-fonts.html b/doc/context/scripts/mkiv/mtx-fonts.html
index e4548b255..43d81015f 100644
--- a/doc/context/scripts/mkiv/mtx-fonts.html
+++ b/doc/context/scripts/mkiv/mtx-fonts.html
@@ -17,7 +17,7 @@
<title>ConTeXt Font Database Management 0.21</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkiv/mtx-fonts.man b/doc/context/scripts/mkiv/mtx-fonts.man
index 676ca17ab..1a8d3023b 100644
--- a/doc/context/scripts/mkiv/mtx-fonts.man
+++ b/doc/context/scripts/mkiv/mtx-fonts.man
@@ -1,4 +1,4 @@
-.TH "mtx-fonts" "1" "01-01-2016" "version 0.21" "ConTeXt Font Database Management"
+.TH "mtx-fonts" "1" "01-01-2017" "version 0.21" "ConTeXt Font Database Management"
.SH NAME
.B mtx-fonts
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-grep.html b/doc/context/scripts/mkiv/mtx-grep.html
index 45a32f987..184ca0df3 100644
--- a/doc/context/scripts/mkiv/mtx-grep.html
+++ b/doc/context/scripts/mkiv/mtx-grep.html
@@ -17,7 +17,7 @@
<title>Simple Grepper 0.10</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
@@ -42,10 +42,20 @@
<tr><th>--pattern</th><td></td><td>search for pattern (optional)</td></tr>
<tr><th>--count</th><td></td><td>count matches only</td></tr>
<tr><th>--nocomment</th><td></td><td>skip lines that start with %% or #</td></tr>
+ <tr><th>--n</th><td></td><td>show at most n matches</td></tr>
+ <tr><th>--first</th><td></td><td>only show first match</td></tr>
+ <tr><th>--match</th><td></td><td>return the match (if it is one)</td></tr>
<tr><th>--xml</th><td></td><td>pattern is lpath expression</td></tr>
</table>
<br/>
- </div>
+<h1>Examples</h1>
+<tt>mtxrun --script grep --pattern=module *.mkiv</tt>
+<br/><tt>mtxrun --script grep --pattern="modules.-%['(.-)'%]" char-*.lua --first</tt>
+<br/><tt>mtxrun --script grep --pattern=module --count *.mkiv</tt>
+<br/><tt>mtxrun --script grep --pattern=module --first *.mkiv</tt>
+<br/><tt>mtxrun --script grep --pattern=module --nocomment *.mkiv</tt>
+<br/><tt>mtxrun --script grep --pattern=module --n=10 *.mkiv</tt>
+<br/><br/> </div>
</div>
</body>
</html>
diff --git a/doc/context/scripts/mkiv/mtx-grep.man b/doc/context/scripts/mkiv/mtx-grep.man
index 2a3d30316..3254c904d 100644
--- a/doc/context/scripts/mkiv/mtx-grep.man
+++ b/doc/context/scripts/mkiv/mtx-grep.man
@@ -1,4 +1,4 @@
-.TH "mtx-grep" "1" "01-01-2016" "version 0.10" "Simple Grepper"
+.TH "mtx-grep" "1" "01-01-2017" "version 0.10" "Simple Grepper"
.SH NAME
.B mtx-grep
.SH SYNOPSIS
@@ -20,6 +20,15 @@ count matches only
.B --nocomment
skip lines that start with %% or #
.TP
+.B --n
+show at most n matches
+.TP
+.B --first
+only show first match
+.TP
+.B --match
+return the match (if it is one)
+.TP
.B --xml
pattern is lpath expression
.SH AUTHOR
diff --git a/doc/context/scripts/mkiv/mtx-grep.xml b/doc/context/scripts/mkiv/mtx-grep.xml
index d8567e035..a78565b57 100644
--- a/doc/context/scripts/mkiv/mtx-grep.xml
+++ b/doc/context/scripts/mkiv/mtx-grep.xml
@@ -11,10 +11,26 @@
<flag name="pattern"><short>search for pattern (optional)</short></flag>
<flag name="count"><short>count matches only</short></flag>
<flag name="nocomment"><short>skip lines that start with %% or #</short></flag>
+ <flag name="n"><short>show at most n matches</short></flag>
+ <flag name="first"><short>only show first match</short></flag>
+ <flag name="match"><short>return the match (if it is one)</short></flag>
<flag name="xml"><short>pattern is lpath expression</short></flag>
</subcategory>
</category>
</flags>
+ <examples>
+ <category>
+ <title>Examples</title>
+ <subcategory>
+ <example><command>mtxrun --script grep --pattern=module *.mkiv</command></example>
+ <example><command>mtxrun --script grep --pattern="modules.-%['(.-)'%]" char-*.lua --first</command></example>
+ <example><command>mtxrun --script grep --pattern=module --count *.mkiv</command></example>
+ <example><command>mtxrun --script grep --pattern=module --first *.mkiv</command></example>
+ <example><command>mtxrun --script grep --pattern=module --nocomment *.mkiv</command></example>
+ <example><command>mtxrun --script grep --pattern=module --n=10 *.mkiv</command></example>
+ </subcategory>
+ </category>
+ </examples>
<comments>
<comment>patterns are lua patterns and need to be escaped accordingly</comment>
</comments>
diff --git a/doc/context/scripts/mkiv/mtx-interface.html b/doc/context/scripts/mkiv/mtx-interface.html
index 468342893..045dea546 100644
--- a/doc/context/scripts/mkiv/mtx-interface.html
+++ b/doc/context/scripts/mkiv/mtx-interface.html
@@ -17,7 +17,7 @@
<title>ConTeXt Interface Related Goodies 0.13</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkiv/mtx-interface.man b/doc/context/scripts/mkiv/mtx-interface.man
index 2b21c8dba..831b9acc9 100644
--- a/doc/context/scripts/mkiv/mtx-interface.man
+++ b/doc/context/scripts/mkiv/mtx-interface.man
@@ -1,4 +1,4 @@
-.TH "mtx-interface" "1" "01-01-2016" "version 0.13" "ConTeXt Interface Related Goodies"
+.TH "mtx-interface" "1" "01-01-2017" "version 0.13" "ConTeXt Interface Related Goodies"
.SH NAME
.B mtx-interface
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-metapost.html b/doc/context/scripts/mkiv/mtx-metapost.html
index 51708663b..793a411b9 100644
--- a/doc/context/scripts/mkiv/mtx-metapost.html
+++ b/doc/context/scripts/mkiv/mtx-metapost.html
@@ -17,7 +17,7 @@
<title>MetaPost to PDF processor 0.10</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkiv/mtx-metapost.man b/doc/context/scripts/mkiv/mtx-metapost.man
index ca712c7f8..66f178287 100644
--- a/doc/context/scripts/mkiv/mtx-metapost.man
+++ b/doc/context/scripts/mkiv/mtx-metapost.man
@@ -1,4 +1,4 @@
-.TH "mtx-metapost" "1" "01-01-2016" "version 0.10" "MetaPost to PDF processor"
+.TH "mtx-metapost" "1" "01-01-2017" "version 0.10" "MetaPost to PDF processor"
.SH NAME
.B mtx-metapost
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-metatex.html b/doc/context/scripts/mkiv/mtx-metatex.html
index 0c563e566..0bdc78987 100644
--- a/doc/context/scripts/mkiv/mtx-metatex.html
+++ b/doc/context/scripts/mkiv/mtx-metatex.html
@@ -17,7 +17,7 @@
<title>MetaTeX Process Management 0.10</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkiv/mtx-metatex.man b/doc/context/scripts/mkiv/mtx-metatex.man
index 68e090031..1ff5ec367 100644
--- a/doc/context/scripts/mkiv/mtx-metatex.man
+++ b/doc/context/scripts/mkiv/mtx-metatex.man
@@ -1,4 +1,4 @@
-.TH "mtx-metatex" "1" "01-01-2016" "version 0.10" "MetaTeX Process Management"
+.TH "mtx-metatex" "1" "01-01-2017" "version 0.10" "MetaTeX Process Management"
.SH NAME
.B mtx-metatex
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-modules.html b/doc/context/scripts/mkiv/mtx-modules.html
index f13ccbb6f..8278c1aca 100644
--- a/doc/context/scripts/mkiv/mtx-modules.html
+++ b/doc/context/scripts/mkiv/mtx-modules.html
@@ -17,7 +17,7 @@
<title>ConTeXt Module Documentation Generators 1.00</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkiv/mtx-modules.man b/doc/context/scripts/mkiv/mtx-modules.man
index 1e1e34fc2..0455d83c9 100644
--- a/doc/context/scripts/mkiv/mtx-modules.man
+++ b/doc/context/scripts/mkiv/mtx-modules.man
@@ -1,4 +1,4 @@
-.TH "mtx-modules" "1" "01-01-2016" "version 1.00" "ConTeXt Module Documentation Generators"
+.TH "mtx-modules" "1" "01-01-2017" "version 1.00" "ConTeXt Module Documentation Generators"
.SH NAME
.B mtx-modules
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-package.html b/doc/context/scripts/mkiv/mtx-package.html
index 51dd6189f..3ebf5c5be 100644
--- a/doc/context/scripts/mkiv/mtx-package.html
+++ b/doc/context/scripts/mkiv/mtx-package.html
@@ -17,7 +17,7 @@
<title>Distribution Related Goodies 0.10</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkiv/mtx-package.man b/doc/context/scripts/mkiv/mtx-package.man
index dfd8d21f0..2ff4a165a 100644
--- a/doc/context/scripts/mkiv/mtx-package.man
+++ b/doc/context/scripts/mkiv/mtx-package.man
@@ -1,4 +1,4 @@
-.TH "mtx-package" "1" "01-01-2016" "version 0.10" "Distribution Related Goodies"
+.TH "mtx-package" "1" "01-01-2017" "version 0.10" "Distribution Related Goodies"
.SH NAME
.B mtx-package
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-patterns.html b/doc/context/scripts/mkiv/mtx-patterns.html
index 8aa0d8132..8aa378298 100644
--- a/doc/context/scripts/mkiv/mtx-patterns.html
+++ b/doc/context/scripts/mkiv/mtx-patterns.html
@@ -17,7 +17,7 @@
<title>ConTeXt Pattern File Management 0.20</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkiv/mtx-patterns.man b/doc/context/scripts/mkiv/mtx-patterns.man
index fd0088cca..c962da2e8 100644
--- a/doc/context/scripts/mkiv/mtx-patterns.man
+++ b/doc/context/scripts/mkiv/mtx-patterns.man
@@ -1,4 +1,4 @@
-.TH "mtx-patterns" "1" "01-01-2016" "version 0.20" "ConTeXt Pattern File Management"
+.TH "mtx-patterns" "1" "01-01-2017" "version 0.20" "ConTeXt Pattern File Management"
.SH NAME
.B mtx-patterns
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-pdf.html b/doc/context/scripts/mkiv/mtx-pdf.html
index f292c0089..e2961d94d 100644
--- a/doc/context/scripts/mkiv/mtx-pdf.html
+++ b/doc/context/scripts/mkiv/mtx-pdf.html
@@ -17,7 +17,7 @@
<title>ConTeXt PDF Helpers 0.10</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkiv/mtx-pdf.man b/doc/context/scripts/mkiv/mtx-pdf.man
index 60fa91e50..fa702b86c 100644
--- a/doc/context/scripts/mkiv/mtx-pdf.man
+++ b/doc/context/scripts/mkiv/mtx-pdf.man
@@ -1,4 +1,4 @@
-.TH "mtx-pdf" "1" "01-01-2016" "version 0.10" "ConTeXt PDF Helpers"
+.TH "mtx-pdf" "1" "01-01-2017" "version 0.10" "ConTeXt PDF Helpers"
.SH NAME
.B mtx-pdf
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-plain.html b/doc/context/scripts/mkiv/mtx-plain.html
index d7600397a..2ceda35e7 100644
--- a/doc/context/scripts/mkiv/mtx-plain.html
+++ b/doc/context/scripts/mkiv/mtx-plain.html
@@ -17,7 +17,7 @@
<title>Plain TeX Runner 1.00</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkiv/mtx-plain.man b/doc/context/scripts/mkiv/mtx-plain.man
index 174402377..73c1a9377 100644
--- a/doc/context/scripts/mkiv/mtx-plain.man
+++ b/doc/context/scripts/mkiv/mtx-plain.man
@@ -1,4 +1,4 @@
-.TH "mtx-plain" "1" "01-01-2016" "version 1.00" "Plain TeX Runner"
+.TH "mtx-plain" "1" "01-01-2017" "version 1.00" "Plain TeX Runner"
.SH NAME
.B mtx-plain
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-profile.html b/doc/context/scripts/mkiv/mtx-profile.html
index 46714e67b..50ac0c42e 100644
--- a/doc/context/scripts/mkiv/mtx-profile.html
+++ b/doc/context/scripts/mkiv/mtx-profile.html
@@ -17,7 +17,7 @@
<title>ConTeXt MkIV LuaTeX Profiler 1.00</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkiv/mtx-profile.man b/doc/context/scripts/mkiv/mtx-profile.man
index d09563415..862afe5fb 100644
--- a/doc/context/scripts/mkiv/mtx-profile.man
+++ b/doc/context/scripts/mkiv/mtx-profile.man
@@ -1,4 +1,4 @@
-.TH "mtx-profile" "1" "01-01-2016" "version 1.00" "ConTeXt MkIV LuaTeX Profiler"
+.TH "mtx-profile" "1" "01-01-2017" "version 1.00" "ConTeXt MkIV LuaTeX Profiler"
.SH NAME
.B mtx-profile
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-rsync.html b/doc/context/scripts/mkiv/mtx-rsync.html
index 9b2b3af3a..5a55fcbe5 100644
--- a/doc/context/scripts/mkiv/mtx-rsync.html
+++ b/doc/context/scripts/mkiv/mtx-rsync.html
@@ -17,7 +17,7 @@
<title>Rsync Helpers 0.10</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkiv/mtx-rsync.man b/doc/context/scripts/mkiv/mtx-rsync.man
index 7297ace50..13c838fd7 100644
--- a/doc/context/scripts/mkiv/mtx-rsync.man
+++ b/doc/context/scripts/mkiv/mtx-rsync.man
@@ -1,4 +1,4 @@
-.TH "mtx-rsync" "1" "01-01-2016" "version 0.10" "Rsync Helpers"
+.TH "mtx-rsync" "1" "01-01-2017" "version 0.10" "Rsync Helpers"
.SH NAME
.B mtx-rsync
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-scite.html b/doc/context/scripts/mkiv/mtx-scite.html
index 24229db73..3b540fa81 100644
--- a/doc/context/scripts/mkiv/mtx-scite.html
+++ b/doc/context/scripts/mkiv/mtx-scite.html
@@ -17,7 +17,7 @@
<title>Scite Helper Script 1.00</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkiv/mtx-scite.man b/doc/context/scripts/mkiv/mtx-scite.man
index f88d4b016..4911790f2 100644
--- a/doc/context/scripts/mkiv/mtx-scite.man
+++ b/doc/context/scripts/mkiv/mtx-scite.man
@@ -1,4 +1,4 @@
-.TH "mtx-scite" "1" "01-01-2016" "version 1.00" "Scite Helper Script"
+.TH "mtx-scite" "1" "01-01-2017" "version 1.00" "Scite Helper Script"
.SH NAME
.B mtx-scite
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-server.html b/doc/context/scripts/mkiv/mtx-server.html
index 11d3c59c3..01cf1cdf7 100644
--- a/doc/context/scripts/mkiv/mtx-server.html
+++ b/doc/context/scripts/mkiv/mtx-server.html
@@ -17,7 +17,7 @@
<title>Simple Webserver For Helpers 0.10</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkiv/mtx-server.man b/doc/context/scripts/mkiv/mtx-server.man
index 3c115c0c1..5dec932e3 100644
--- a/doc/context/scripts/mkiv/mtx-server.man
+++ b/doc/context/scripts/mkiv/mtx-server.man
@@ -1,4 +1,4 @@
-.TH "mtx-server" "1" "01-01-2016" "version 0.10" "Simple Webserver For Helpers"
+.TH "mtx-server" "1" "01-01-2017" "version 0.10" "Simple Webserver For Helpers"
.SH NAME
.B mtx-server
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-texworks.html b/doc/context/scripts/mkiv/mtx-texworks.html
index 624e9ab18..5de6a748f 100644
--- a/doc/context/scripts/mkiv/mtx-texworks.html
+++ b/doc/context/scripts/mkiv/mtx-texworks.html
@@ -17,7 +17,7 @@
<title>TeXworks Startup Script 1.00</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkiv/mtx-texworks.man b/doc/context/scripts/mkiv/mtx-texworks.man
index 1422b802a..e475dc10e 100644
--- a/doc/context/scripts/mkiv/mtx-texworks.man
+++ b/doc/context/scripts/mkiv/mtx-texworks.man
@@ -1,4 +1,4 @@
-.TH "mtx-texworks" "1" "01-01-2016" "version 1.00" "TeXworks Startup Script"
+.TH "mtx-texworks" "1" "01-01-2017" "version 1.00" "TeXworks Startup Script"
.SH NAME
.B mtx-texworks
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-timing.html b/doc/context/scripts/mkiv/mtx-timing.html
index 9626f6d81..1da0e6439 100644
--- a/doc/context/scripts/mkiv/mtx-timing.html
+++ b/doc/context/scripts/mkiv/mtx-timing.html
@@ -17,7 +17,7 @@
<title>ConTeXt Timing Tools 0.10</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkiv/mtx-timing.man b/doc/context/scripts/mkiv/mtx-timing.man
index 9a5b98790..3a9f76a5e 100644
--- a/doc/context/scripts/mkiv/mtx-timing.man
+++ b/doc/context/scripts/mkiv/mtx-timing.man
@@ -1,4 +1,4 @@
-.TH "mtx-timing" "1" "01-01-2016" "version 0.10" "ConTeXt Timing Tools"
+.TH "mtx-timing" "1" "01-01-2017" "version 0.10" "ConTeXt Timing Tools"
.SH NAME
.B mtx-timing
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-tools.html b/doc/context/scripts/mkiv/mtx-tools.html
index ae3933f24..0cb6d6de3 100644
--- a/doc/context/scripts/mkiv/mtx-tools.html
+++ b/doc/context/scripts/mkiv/mtx-tools.html
@@ -17,7 +17,7 @@
<title>Some File Related Goodies 1.01</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkiv/mtx-tools.man b/doc/context/scripts/mkiv/mtx-tools.man
index b828f48d0..adebb7202 100644
--- a/doc/context/scripts/mkiv/mtx-tools.man
+++ b/doc/context/scripts/mkiv/mtx-tools.man
@@ -1,4 +1,4 @@
-.TH "mtx-tools" "1" "01-01-2016" "version 1.01" "Some File Related Goodies"
+.TH "mtx-tools" "1" "01-01-2017" "version 1.01" "Some File Related Goodies"
.SH NAME
.B mtx-tools
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-unicode.html b/doc/context/scripts/mkiv/mtx-unicode.html
index c042b28c0..6c0729e0e 100644
--- a/doc/context/scripts/mkiv/mtx-unicode.html
+++ b/doc/context/scripts/mkiv/mtx-unicode.html
@@ -17,7 +17,7 @@
<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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkiv/mtx-unicode.man b/doc/context/scripts/mkiv/mtx-unicode.man
index 4f520b9b8..3d9ec0785 100644
--- a/doc/context/scripts/mkiv/mtx-unicode.man
+++ b/doc/context/scripts/mkiv/mtx-unicode.man
@@ -1,4 +1,4 @@
-.TH "mtx-unicode" "1" "01-01-2016" "version 1.02" "Checker for char-dat.lua"
+.TH "mtx-unicode" "1" "01-01-2017" "version 1.02" "Checker for char-dat.lua"
.SH NAME
.B mtx-unicode
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-unzip.html b/doc/context/scripts/mkiv/mtx-unzip.html
index 6bc987e8f..885599f8f 100644
--- a/doc/context/scripts/mkiv/mtx-unzip.html
+++ b/doc/context/scripts/mkiv/mtx-unzip.html
@@ -17,7 +17,7 @@
<title>Simple Unzipper 0.10</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkiv/mtx-unzip.man b/doc/context/scripts/mkiv/mtx-unzip.man
index 548ca1dc3..d6e3ded10 100644
--- a/doc/context/scripts/mkiv/mtx-unzip.man
+++ b/doc/context/scripts/mkiv/mtx-unzip.man
@@ -1,4 +1,4 @@
-.TH "mtx-unzip" "1" "01-01-2016" "version 0.10" "Simple Unzipper"
+.TH "mtx-unzip" "1" "01-01-2017" "version 0.10" "Simple Unzipper"
.SH NAME
.B mtx-unzip
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-update.html b/doc/context/scripts/mkiv/mtx-update.html
index feae398ec..577453246 100644
--- a/doc/context/scripts/mkiv/mtx-update.html
+++ b/doc/context/scripts/mkiv/mtx-update.html
@@ -17,7 +17,7 @@
<title>ConTeXt Minimals Updater 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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkiv/mtx-update.man b/doc/context/scripts/mkiv/mtx-update.man
index 3a3ca6ae8..5e1313aa6 100644
--- a/doc/context/scripts/mkiv/mtx-update.man
+++ b/doc/context/scripts/mkiv/mtx-update.man
@@ -1,4 +1,4 @@
-.TH "mtx-update" "1" "01-01-2016" "version 1.02" "ConTeXt Minimals Updater"
+.TH "mtx-update" "1" "01-01-2017" "version 1.02" "ConTeXt Minimals Updater"
.SH NAME
.B mtx-update
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-watch.html b/doc/context/scripts/mkiv/mtx-watch.html
index 42b55280e..1f0e49bb4 100644
--- a/doc/context/scripts/mkiv/mtx-watch.html
+++ b/doc/context/scripts/mkiv/mtx-watch.html
@@ -17,7 +17,7 @@
<title>ConTeXt Request Watchdog 1.00</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkiv/mtx-watch.man b/doc/context/scripts/mkiv/mtx-watch.man
index 1fcb090d0..acb5ff22d 100644
--- a/doc/context/scripts/mkiv/mtx-watch.man
+++ b/doc/context/scripts/mkiv/mtx-watch.man
@@ -1,4 +1,4 @@
-.TH "mtx-watch" "1" "01-01-2016" "version 1.00" "ConTeXt Request Watchdog"
+.TH "mtx-watch" "1" "01-01-2017" "version 1.00" "ConTeXt Request Watchdog"
.SH NAME
.B mtx-watch
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-youless.html b/doc/context/scripts/mkiv/mtx-youless.html
index 7f7fda694..6edb3fee6 100644
--- a/doc/context/scripts/mkiv/mtx-youless.html
+++ b/doc/context/scripts/mkiv/mtx-youless.html
@@ -17,7 +17,7 @@
<title>YouLess Fetcher 1.00</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%; }
+ 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; } .invisible { visibility: hidden; } 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>
diff --git a/doc/context/scripts/mkiv/mtx-youless.man b/doc/context/scripts/mkiv/mtx-youless.man
index d360430bd..b48113381 100644
--- a/doc/context/scripts/mkiv/mtx-youless.man
+++ b/doc/context/scripts/mkiv/mtx-youless.man
@@ -1,4 +1,4 @@
-.TH "mtx-youless" "1" "01-01-2016" "version 1.00" "youless Fetcher"
+.TH "mtx-youless" "1" "01-01-2017" "version 1.00" "youless Fetcher"
.SH NAME
.B mtx-youless
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtxrun.html b/doc/context/scripts/mkiv/mtxrun.html
index 6e4146899..8b6155041 100644
--- a/doc/context/scripts/mkiv/mtxrun.html
+++ b/doc/context/scripts/mkiv/mtxrun.html
@@ -14,17 +14,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
- <title>ConTeXt TDS Runner Tool 1.31</title>
+ <title>ConTeXt TDS Runner Tool 1.32</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%; }
+ 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; } .invisible { visibility: hidden; } 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">ConTeXt TDS Runner Tool 1.31 </div>
+ <div id="top-two">ConTeXt TDS Runner Tool 1.32 </div>
</div>
</div>
<div id="bottom"> <div id="bottom-one">
@@ -86,6 +86,7 @@
<tr><th>--experiments</th><td></td><td>show (known) experiments</td></tr>
<tr><th/><td/><td/></tr>
<tr><th>--expand-braces</th><td></td><td>expand complex variable</td></tr>
+ <tr><th>--resolve-path</th><td></td><td>expand variable (completely resolve paths)</td></tr>
<tr><th>--expand-path</th><td></td><td>expand variable (resolve paths)</td></tr>
<tr><th>--expand-var</th><td></td><td>expand variable (resolve references)</td></tr>
<tr><th>--show-path</th><td></td><td>show path expansion of ...</td></tr>
diff --git a/doc/context/scripts/mkiv/mtxrun.man b/doc/context/scripts/mkiv/mtxrun.man
index 90a0f9152..5ddb5f6b2 100644
--- a/doc/context/scripts/mkiv/mtxrun.man
+++ b/doc/context/scripts/mkiv/mtxrun.man
@@ -1,4 +1,4 @@
-.TH "mtxrun" "1" "01-01-2016" "version 1.31" "ConTeXt TDS Runner Tool"
+.TH "mtxrun" "1" "01-01-2017" "version 1.32" "ConTeXt TDS Runner Tool"
.SH NAME
.B mtxrun
.SH SYNOPSIS
@@ -119,6 +119,9 @@ show (known) experiments
.B --expand-braces
expand complex variable
.TP
+.B --resolve-path
+expand variable (completely resolve paths)
+.TP
.B --expand-path
expand variable (resolve paths)
.TP
diff --git a/doc/context/scripts/mkiv/mtxrun.xml b/doc/context/scripts/mkiv/mtxrun.xml
index 138afc96e..25f58545f 100644
--- a/doc/context/scripts/mkiv/mtxrun.xml
+++ b/doc/context/scripts/mkiv/mtxrun.xml
@@ -3,7 +3,7 @@
<metadata>
<entry name="name">mtxrun</entry>
<entry name="detail">ConTeXt TDS Runner Tool</entry>
- <entry name="version">1.31</entry>
+ <entry name="version">1.32</entry>
</metadata>
<flags>
<category name="basic">
@@ -66,6 +66,7 @@
</subcategory>
<subcategory>
<flag name="expand-braces"><short>expand complex variable</short></flag>
+ <flag name="resolve-path"><short>expand variable (completely resolve paths)</short></flag>
<flag name="expand-path"><short>expand variable (resolve paths)</short></flag>
<flag name="expand-var"><short>expand variable (resolve references)</short></flag>
<flag name="show-path"><short>show path expansion of ...</short></flag>
diff --git a/doc/context/sources/general/fonts/fonts/fonts-appendix.tex b/doc/context/sources/general/fonts/fonts/fonts-appendix.tex
new file mode 100644
index 000000000..ae42b10fa
--- /dev/null
+++ b/doc/context/sources/general/fonts/fonts/fonts-appendix.tex
@@ -0,0 +1,484 @@
+% language=uk
+
+\startcomponent fonts-appendix
+
+\environment fonts-environment
+
+\startchapter[title=Appendix][color=darkgray]
+
+\startsection[title=The \type {tfm} file,reference=fontdata:tfm]
+
+The (binary) \type {tfm} file is not human readable but can be turned into a
+verbose property list which is not that hard to understand.
+
+\starttyping
+tftopl texnansi-lmr10.tfm
+\stoptyping
+
+Here is an excerpt from the data file. It starts with some general properties of
+the font. The \type {O} means that the value is in octal while the \type {R} is a
+real. Keep in mind that \TEX\ has no datatype \quote {real} so internally it is
+just integers representing scaled points.
+
+\startnarrowtyping
+(FAMILY LMROMAN10)
+(FACE O 352)
+(CODINGSCHEME LY1 ENCODING /TEX'N'ANSI, Y&Y/)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM O 4720464277)
+\stopnarrowtyping
+
+A text font has the following font dimensions:
+
+\startnarrowtyping
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.333333)
+ (STRETCH R 0.166667)
+ (SHRINK R 0.111112)
+ (XHEIGHT R 0.43055)
+ (QUAD R 1.0)
+ (EXTRASPACE R 0.111112)
+ ...
+)
+\stopnarrowtyping
+
+Kerns and ligatures are packed into a table that is basically a sequence of
+labelled entries. Here we see the entry for the character \type {f} which has
+three ligatures: \type {ff}, \type {fi} and \type {fl}. Because ligatures can be
+chained, octal slot 13 will have ligature entries for \type {ffl} and \type
+{ffi}.
+
+\startnarrowtyping
+(LIGTABLE
+ ...
+ (LABEL C f)
+ (LIG C f O 13)
+ (LIG C i O 14)
+ (LIG C l O 10)
+ (KRN O 135 R 0.027779)
+ (KRN O 41 R 0.027779)
+ (KRN O 51 R 0.027779)
+ (KRN O 77 R 0.027779)
+ (KRN O 223 R 0.027779)
+ (KRN O 224 R 0.027779)
+ (KRN O 140 R 0.027779)
+ (KRN O 47 R 0.027779)
+ (STOP)
+ ...
+)
+\stopnarrowtyping
+
+Each character gets its own entry. In this case there is no depth involved so it
+is not shown. The comment is just a repetition of the entry in the ligtable.
+
+\startnarrowtyping
+(CHARACTER C f
+ (CHARWD R 0.30555)
+ (CHARHT R 0.688875)
+ (CHARIC R 0.079222)
+ (COMMENT
+ (LIG C f O 13)
+ (LIG C i O 14)
+ (LIG C l O 10)
+ (KRN O 135 R 0.027779)
+ (KRN O 41 R 0.027779)
+ (KRN O 51 R 0.027779)
+ (KRN O 77 R 0.027779)
+ (KRN O 223 R 0.027779)
+ (KRN O 224 R 0.027779)
+ (KRN O 140 R 0.027779)
+ (KRN O 47 R 0.027779)
+ )
+)
+\stopnarrowtyping
+
+\stopsection
+
+\startsection[title=The \type {vf} file,reference=fontdata:vf]
+
+A virtual font specification file can be converted to a more readable format with
+\type {vftovp}, for instance:
+
+\starttyping
+vftovp eurm10.vf
+\stoptyping
+
+The information in a \type {vf} file will be combined with the data in the
+accompanying \type {tfm} file so the output looks similar:
+
+\startnarrowtyping
+(VTITLE )
+(FAMILY UNSPECIFIED)
+(FACE F MRR)
+(CODINGSCHEME TEX MATH ITALIC)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM O 24401046203)
+(SEVENBITSAFEFLAG TRUE)
+\stopnarrowtyping
+
+Because this font is a math font there is no space defined.
+
+\startnarrowtyping
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.0)
+ (STRETCH R 0.0)
+ (SHRINK R 0.0)
+ (XHEIGHT R 0.459)
+ (QUAD R 1.0)
+ (EXTRASPACE R 0.0)
+)
+\stopnarrowtyping
+
+A virtual font will take glyphs from another font and therefore there are entries
+that refer to these fonts. In the following definition index \type {0} is created
+(the \type {D} specifies a decimal entry).
+
+\startnarrowtyping
+(MAPFONT D 0
+ (FONTNAME eurm10)
+ (FONTCHECKSUM O 4276740471)
+ (FONTAT R 1.0)
+ (FONTDSIZE R 10.0)
+)
+(MAPFONT D 1
+ (FONTNAME cmmi10)
+ (FONTCHECKSUM O 1350061076)
+ (FONTAT R 1.0)
+ (FONTDSIZE R 10.0)
+)
+\stopnarrowtyping
+
+The zero indexed font is the default, so in the following entry this font is
+taken:
+
+\startnarrowtyping
+(CHARACTER C W
+ (CHARWD R 0.986)
+ (CHARHT R 0.691)
+ (CHARIC R 0.056)
+ (COMMENT
+ (KRN O 177 R 0.056)
+ (KRN O 75 R -0.056)
+ (KRN O 73 R -0.083)
+ (KRN O 72 R -0.083)
+ )
+ (MAP
+ (SETCHAR C W)
+ )
+)
+\stopnarrowtyping
+
+The next specification is a combination of two other glyphs becoming a new
+glyph. We see here that the \type {MAP} table is actually a sort of program:
+
+\startnarrowtyping
+(CHARACTER O 200
+ (CHARWD R 0.622)
+ (CHARHT R 0.691)
+ (MAP
+ (PUSH)
+ (MOVEDOWN R -0.18)
+ (MOVERIGHT R 0.015)
+ (SELECTFONT D 2)
+ (SETCHAR O 40)
+ (POP)
+ (SELECTFONT D 0)
+ (SETCHAR C h)
+ )
+)
+\stopnarrowtyping
+
+The character information is also in the \type {tfm} companion and that is what
+\TEX\ uses. The virtual information kicks in when the backend is creating the
+page stream and embedding the fonts.
+
+\stopsection
+
+\startsection[title=The \type {map} file,reference=fontdata:map]
+
+In a map file each line maps a font name onto a file that contains the font
+shapes in bitmap or outline format. For instance in the file \type
+{lm-texnansi.map} we find the line:
+
+\startnarrowtyping
+texnansi-lmr10 LMRoman10-Regular "enclmtexnansi ReEncodeFont" <lm-texnansi.enc <lmr10.pfb
+\stopnarrowtyping
+
+The backend will fetch the glyph data from \type {lmf10.pfb} and use the given
+encoding file to resolve indices to glyph names. A \type {pfb} file can contain
+more than 256 entries so names are used to access the data. The string between
+quotes is used for the encoding vector in the resulting file.
+
+The second entry in the line is the font name that will be used. This name is
+also used to control subset behaviour. Multiple references to this name will be
+collapsed into one inclusion when possible, thereby making the file as small as
+possible. You better make sure that the names are unique for a specific font.
+
+In addition to this, there can be directives for extending the font (horizontal
+stretch) and transforming it into a slanted variant. Both are to be used with
+care.
+
+In \MKIV\ map files are only used for virtual math fonts and just as in \MKII\ we
+load such files selectively. Users don't have to worry about this.
+
+\stopsection
+
+\startsection[title=The \type {enc} file,reference=fontdata:enc]
+
+For historic reasons, an encoding file is a blob of \POSTSCRIPT, probably because
+it can be copied into the final output directly. Given that \TEX\ got extended
+anyway, you can wonder why this information never ended up in an extended \type
+{tfm} or \type {vf} file. It had definitely made the traditional process much
+more robust.
+
+\startnarrowtyping
+/enclmtexnansi[
+/.notdef
+/Euro
+...
+/dotaccent
+/hungarumlaut
+/ogonek
+...
+/ffi
+/ffl
+/dotlessi
+/dotlessj
+/grave
+...
+/thorn
+/ydieresis
+] def
+\stopnarrowtyping
+
+There are excactly 256 entries in such a vector and the names should match those
+in a \type {pfb} file.
+
+\stopsection
+
+\startsection[title=The \type {afm} file,reference=fontdata:afm]
+
+Here we show an excerpt from an \type {afm} file that comes with Latin Modern
+Roman. Just as with a \type {tfm} file we start with some general information.
+However we don't need to convert the file as is it already in human readable
+format.
+
+\startnarrowtyping
+StartFontMetrics 2.0
+Comment Generated by MetaType1 (a MetaPost-based engine)
+Comment Creation Date: 7th October 2009
+Notice Copyright 2003--2009 by B. Jackowski and J.M. Nowacki (on behalf of TeX USERS GROUPS).
+Comment Supported by CSTUG, DANTE eV, GUST, GUTenberg, NTG, and TUG.
+Comment METATYPE1/Type 1 version by B. Jackowski & J. M. Nowacki
+Comment from GUST (http://www.gust.org.pl).
+Comment This work is released under the GUST Font License.
+Comment For the most recent version of this license see
+Comment This work has the LPPL maintenance status `maintained'.
+Comment The Current Maintainer of this work is Bogus\l{}aw Jackowski and Janusz M. Nowacki.
+Comment This work consists of the files listed in the MANIFEST-Latin-Modern.txt file.
+FontName LMRoman10-Regular
+FullName LMRoman10-Regular
+FamilyName LMRoman10
+Weight Normal
+ItalicAngle 0
+IsFixedPitch false
+UnderlinePosition -146
+UnderlineThickness 40
+Version 2.004
+EncodingScheme FontSpecific
+FontBBox -430 -290 1417 1127
+CapHeight 683.33333
+XHeight 430.55556
+Descender -194.44444
+Ascender 694.44444
+Comment PFM parameters: LMRoman10 0 0 0xEE
+Comment TFM designsize: 10 (in points)
+Comment TFM fontdimen 1: 0 (slant)
+Comment TFM fontdimen 2: 3.33333 (space)
+Comment TFM fontdimen 3: 1.66667 (space stretch)
+Comment TFM fontdimen 4: 1.11111 (space shrink)
+Comment TFM fontdimen 5: 4.3055 (xheight)
+Comment TFM fontdimen 6: 10 (quad)
+Comment TFM fontdimen 7: 1.11111 (extra space)
+Comment TFM fontdimen 8: 6.833 (non-standard: uc height)
+Comment TFM fontdimen 9: 6.9445 (non-standard: ascender)
+Comment TFM fontdimen 10: 11.27 (non-standard: accented cap height)
+Comment TFM fontdimen 11: 1.94443 (non-standard: descender depth)
+Comment TFM fontdimen 12: 11.27 (non-standard: max height)
+Comment TFM fontdimen 13: 2.9 (non-standard: max depth)
+Comment TFM fontdimen 14: 5 (non-standard: digit width)
+Comment TFM fontdimen 15: 0.88889 (non-standard: uc stem)
+Comment TFM fontdimen 16: 12 (non-standard: baselineskip)
+Comment TFM fontdimen 17: 0.69444 (non-standard: lc stem)
+Comment TFM fontdimen 18: 0.55556 (non-standard: u, i.e., font unit)
+Comment TFM fontdimen 19: 0.22223 (non-standard: overshoot)
+Comment TFM fontdimen 20: 0.25 (non-standard: thin stem, hair)
+Comment TFM fontdimen 21: 0.30556 (non-standard: cap thin stem, i.e., cap_hair)
+Comment TFM headerbyte 9: FontSpecific
+Comment TFM headerbyte 49: LMRoman10
+Comment TFM headerbyte 72: 234
+\stopnarrowtyping
+
+Watch the comments! Because \TEX\ needs a couple of so called fontdimens to be
+set, the comments list the appropriate values. When a \type {tfm} file is
+generated from an \type {afm} file, these values have to be used.
+
+Each character (or glyph) gets an entry. When we run out of indices i.e.\ pass
+the 255 boundary (we start at 0) the index becomes \type {-1}. Only the width is
+specified. The height and depth have to be derived from the bounding box for
+which the specification starts with key \type {B}.
+
+\startnarrowtyping
+StartCharMetrics 821
+...
+C 32 ; WX 333.33333 ; N space ; B 0 0 0 0 ;
+...
+C 102 ; WX 305.55556 ; N f ; B 33 0 357 705 ; L f ff ; L i fi ; L k f_k ; L l fl ;
+C 105 ; WX 277.77777 ; N i ; B 33 0 247 657 ;
+C 108 ; WX 277.77777 ; N l ; B 33 0 255 694 ;
+...
+C -1 ; WX 500 ; N Acute ; B 181 493 388 656 ;
+C -1 ; WX 500 ; N acute ; B 188 510 374 698 ;
+C -1 ; WX 500 ; N acute.ts1 ; B 208 513 392 699 ;
+...
+EndCharMetrics
+\stopnarrowtyping
+
+Watch how this font defines a space character and keep in mind that these fonts
+date from the time that there was only one kind of space. The \type {L} entry
+specifies a ligature.
+
+The names of glyphs are standardized, and even the \type {f_k} is conforming to
+standards. This standardization makes it possible to go back from glyphs to characters
+when copying text from a typeset document.
+
+The kern table is pretty large here and for a reason. First of all the file
+defines 821 glyphs so the average amount of kerns per glyph is not that large.
+But take a look at the \type {A}. Because the \type {Aacute} has the same shape
+it kerns in a similar way. This means that ideally all combined characters end up
+with the same value as their base glyph. However, in our case a bit more
+selective approach is taken. The \type {Adieresis} has a different set of kerns,
+probably to save space. It is for this reason that \OPENTYPE\ fonts have a model
+of kern classes so that similar shapes can be treated as one when setting kerns.
+You see a similar issue with ligatures, where often the right part of the shape
+kerns the same as the (stand alone) first part of the shape does.
+
+\startnarrowtyping
+StartKernData
+StartKernPairs 9230
+...
+KPX seven.prop hyphen.prop -37
+KPX seven.prop four.prop -74
+KPX seven.prop six.prop -18.5
+KPX hyphen.prop one.prop -37
+KPX hyphen.prop two.prop -18.5
+KPX hyphen.prop seven.prop -55.5
+KPX seven.oldstyle four.oldstyle -74
+KPX A T -83.333
+KPX Aacute T -83.333
+KPX Abreve T -83.333
+KPX Acircumflex T -83.333
+...
+KPX Adieresis C -27.778
+...
+KPX f bracketright 27.778
+KPX f exclam 27.778
+KPX f parenright 27.778
+KPX f question 27.778
+KPX f quotedblleft 27.778
+KPX f quotedblleft.cm 27.778
+KPX f quotedblright 27.778
+KPX f quotedblright.cm 27.778
+KPX f quoteleft 27.778
+KPX f quoteright 27.778
+...
+KPX ff bracketright 27.778
+KPX ff exclam 27.778
+KPX ff parenright 27.778
+KPX ff question 27.778
+KPX ff quotedblleft 27.778
+KPX ff quotedblleft.cm 27.778
+KPX ff quotedblright 27.778
+KPX ff quotedblright.cm 27.778
+KPX ff quoteleft 27.778
+KPX ff quoteright 27.778
+...
+EndKernPairs
+EndKernData
+\stopnarrowtyping
+
+If you look closely at the names, you will notice that some glyphs have a
+variant. In \OPENTYPE\ fonts these variants are grouped in features like \type
+{oldstyle}. The first part of such a name is still part of the standardization,
+but the second part is up to the font designer.
+
+The file ends with:
+
+\startnarrowtyping
+EndFontMetrics
+\stopnarrowtyping
+
+\stopsection
+
+\startsection[title=The \type {otf} file,reference=fontdata:otf]
+
+In the \LUATEX\ manual you can find an overview of the raw \OTF\ format as
+exposed in a \LUA\ table. The first decade of \LUATEX\ we used the built|-|in
+loader but even then in \CONTEXT\ we didn't use that format directly but used it
+to create a more compact and efficient table instead. The current release of
+\CONTEXT\ uses its own loader written in \LUA, but the fundamentals have not
+changed much. The tables are cached and can be read in at high speed. The
+structure of the tables is unlikely to change much although more data might get
+added. Although you can access the data it seldom makes sense to do so. Where
+needed interfaces are provided.
+
+\stopsection
+
+\startsection[title=The \type {lfg} file,reference=fontdata:lua]
+
+We use the goodies file control what gets added, replaced, patched or manipulated
+in a font. A goodie file permits us to go beyond what font provide by default.
+The content of a goodie file differs per font. As we also use this for
+experiments, not all entries that you find in such files are meant for users.
+
+\stopsection
+
+\startsection[title=Used fonts]
+
+The examples in the document depend on the fonts used. Here is a list of fonts used
+to render this version. Because fonts might have changed in the meantime, some examples
+might come out other than intended.
+
+\startluacode
+local list = table.load("fonts-mkiv-usedfonts.lua")
+
+local NC, NR = context.NC, context.NR
+
+for i=1,#list do
+ local l = list[i]
+ context.starttabulate { "|lB|l|" }
+ local basename = string.lower(file.basename(l.filename))
+ local version = string.lower(l.version)
+ local filesize = (l.size or 0) / 1000 .. " Kb"
+ local instances = l.instances or 1
+ NC() context("filename") NC() context.type(basename) NC() NR()
+ NC() context("instances") NC() context.type(instances) NC() NR()
+ NC() context("filesize") NC() context.type(filesize) NC() NR()
+ NC() context("version") NC() context.type(version) NC() NR()
+ context.stoptabulate()
+end
+
+\stopluacode
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
+
diff --git a/doc/context/sources/general/fonts/fonts/fonts-environment.tex b/doc/context/sources/general/fonts/fonts/fonts-environment.tex
new file mode 100644
index 000000000..a8de89a42
--- /dev/null
+++ b/doc/context/sources/general/fonts/fonts/fonts-environment.tex
@@ -0,0 +1,34 @@
+\startenvironment fonts-environment
+
+ \blockligatures[fi,fl,ff] % we need to do this beforehand
+
+ \environment manuals-explaining-environment
+ \environment manuals-explaining-cover
+
+ \enabledirectives[visualizers.fraction=2]
+
+ \usemodule [s] [fonts-tables]
+ \usemodule [s] [fonts-missing]
+ \usemodule [s] [fonts-vectors]
+ \usemodule [s] [fonts-features]
+ \usemodule [s] [math-extensibles]
+
+ \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]
+
+\stopenvironment
diff --git a/doc/context/sources/general/fonts/fonts/fonts-extensions.tex b/doc/context/sources/general/fonts/fonts/fonts-extensions.tex
new file mode 100644
index 000000000..fcb9746f2
--- /dev/null
+++ b/doc/context/sources/general/fonts/fonts/fonts-extensions.tex
@@ -0,0 +1,2411 @@
+% language=uk
+
+\startcomponent fonts-extensions
+
+\environment fonts-environment
+
+\startchapter[title=Extensions][color=darkorange]
+
+\startsection[title=Introduction]
+
+One of the benefits of using \TEX\ is that you can add your own features and try
+to optimize the look and feel. Of course this can also go wrong and output can
+look pretty awful when you don't know what you're doing, but on the average it
+works out well. In many aspects the move to an \UNICODE\ data path and \OPENTYPE\
+fonts is a good one and solves a lot of problems with traditional \TEX\ engines
+and helps us to avoid complex and ugly hacks. But, if you look into the source
+code of \CONTEXT\ you will notice that there's still quite some complex coding
+needed. This is because we want to control mechanisms, even if it's only for
+dealing with some border cases. It's also the reason why \LUATEX\ is what it is:
+an extensible engine, building on tradition.
+
+As always with \TEX, fonts are an area where many tuning happens and this is also
+true in \CONTEXT. In this chapter some of the extensions will be discussed. Some
+extensions run on top of the (rather generic) feature mechanism and some are
+using dedicated code.
+
+\stopsection
+
+\startsection[title=Italics]
+
+Although \OPENTYPE\ fonts are more rich in features than traditional \TEX\ and
+\TYPEONE\ fonts, one important feature is missing: italic correction. This might
+sound strange but you need to keep in mind that in practice it's a feature that
+needs to be applied manually.
+
+\starttyping
+test {\it test\/} test
+\stoptyping
+
+It is possible to automate this mechanism and this is what the \type {\em} command
+does in \MKII:
+
+\starttyping
+test {\em test} test
+\stoptyping
+
+This command knows that it switches to italic (or slanted) and when used nested it
+knows to switch back. It also knows if a bold italic or slanted font is used. Therefore
+it can add italic correction between an italic and upright shape.
+
+An italic correction is bound to a glyph and bound to a font. In \in {figure}
+[latinmodern-italic] we see how an italic shape extends out of the bounding box.
+This is not the case in Dejavu: watch \in {figure} [dejavu-italic].
+
+\startplacefigure[reference=latinmodern-italic,title={Italic overshoot in Latin Modern.}]
+ \startcombination
+ \startcontent
+ \backgroundline[gray]{\color[maincolor]{\definedfont[lmroman10-regular*default sa 8]test}}
+ \stopcontent
+ \startcaption
+ Latin Modern Roman Regular
+ \stopcaption
+ \startcontent
+ \backgroundline[gray]{\color[maincolor]{\definedfont[lmroman10-italic*default sa 8]test}}
+ \stopcontent
+ \startcaption
+ Latin Modern Roman Italic
+ \stopcaption
+ \stopcombination
+\stopplacefigure
+
+\startplacefigure[reference=dejavu-italic,title={Italic overshoot in Dejavu Serif.}]
+ \startcombination
+ \startcontent
+ \backgroundline[gray]{\color[maincolor]{\definedfont[dejavuserif*default sa 8]test}}
+ \stopcontent
+ \startcaption
+ Dejavu Regular
+ \stopcaption
+ \startcontent
+ \backgroundline[gray]{\color[maincolor]{\definedfont[dejavuserifitalic*default sa 8]test}}
+ \stopcontent
+ \startcaption
+ Dejavu Italic
+ \stopcaption
+ \stopcombination
+\stopplacefigure
+
+This means that the application of italic correction should never been applied without
+knowing the font. In \in {figure} [italic-upright] we see an upright word following
+an italic. The space is determined by the upright one.
+
+\startplacefigure[reference=italic-upright,title={Italic followed by upright.}]
+ \startcombination
+ \startcontent
+ \backgroundline
+ [gray]
+ {\color[maincolor]{\definedfont[lmroman10-italic*default sa 4]test}
+ \color[maincolor]{\definedfont[lmroman10-regular*default sa 4]\space test}}
+ \stopcontent
+ \startcaption
+ Latin Modern
+ \stopcaption
+ \startcontent
+ \backgroundline
+ [gray]
+ {\color[maincolor]{\definedfont[dejavuserifitalic*default sa 4]test}%
+ \color[maincolor]{\definedfont[dejavuserif*default sa 4]\space test}}
+ \stopcontent
+ \startcaption
+ Dejavu
+ \stopcaption
+ \stopcombination
+\stopplacefigure
+
+Because it is to be used with care you need to enable this feature per font, You
+also need to explicitly enable the application of this correction. in \in {figure}
+[italic-one] we see italic correction in action.
+
+\startbuffer
+\definefontfeature
+ [italic]
+ [default]
+ [itlc=yes]
+\stopbuffer
+
+\typebuffer
+
+\getbuffer
+
+\startplacefigure[reference=italic-one,title={Italic correction.}]
+ \startcombination
+ \startcontent
+ \backgroundline
+ [maincolor]
+ {\color[white]{\definedfont[lmroman10-italic*default sa 4]test}
+ \color[white]{\definedfont[lmroman10-regular*default sa 4]\space test}}
+ \stopcontent
+ \startcaption
+ \backgroundline
+ [maincolor]
+ {\setupitaliccorrection[text]%
+ \color[white]{\definedfont[lmroman10-italic*italic sa 4]test}
+ \color[white]{\definedfont[lmroman10-regular*default sa 4]\space test}}
+ \stopcaption
+ \startcontent
+ \backgroundline
+ [maincolor]
+ {\color[white]{\definedfont[dejavuserifitalic*default sa 4]test}
+ \color[white]{\definedfont[dejavuserif*default sa 4]\space test}}
+ \stopcontent
+ \startcaption
+ \backgroundline
+ [maincolor]
+ {\setupitaliccorrection[text]%
+ \color[white]{\definedfont[dejavuserifitalic*italic sa 4]test}
+ \color[white]{\definedfont[dejavuserif*default sa 4]\space test}}
+ \stopcaption
+ \stopcombination
+\stopplacefigure
+
+This only signals the font constructor that additional italic information has
+to be added to the font metrics. As we already mentioned, the application of
+correction is driven by the \type {\/} primitive and that one consults the
+font metrics. Because the correction is not part of the original font
+metrics it is calculated automatically by adding a small value to the
+width. This value is calculated as follows:
+
+\starttyping
+factor * (parameters.uwidth or 40) / 2
+\stoptyping
+
+The \type {uwidth} parameter is sometimes part of the specification but if not, we
+take a reasonable default. The factor is under user control:
+
+\startbuffer
+\definefontfeature
+ [moreitalic]
+ [default]
+ [itlc=5]
+\stopbuffer
+
+\typebuffer
+
+\getbuffer
+
+This is demonstrated in \in {figure} [italic-two]. You will notice that for Latin
+Modern (any) correction makes sense, but for Dejavu it probably makes things look
+worse. This is why italic correction is disabled by default. When enabled there
+are several variants:
+
+\starttabulate[|Bl|l|]
+\NC global \NC always apply correction \NC \NR
+\NC text \NC only apply correction to text \NC \NR
+\NC always \NC apply correction between text and boxes \NC \NR
+\NC none \NC forget about correction \NC \NR
+\stoptabulate
+
+We keep track of the state using attributes but that comes at a (small) price in terms
+of extra memory and runtime. The \type {global} option simply assumes that we always
+need to check for correction (of course only for fonts that have this feature enables).
+In the given example we used:
+
+\starttyping
+\setupitaliccorrection
+ [text]
+\stoptyping
+
+You can combine keys:
+
+\starttyping
+\setupitaliccorrection
+ [global,always]
+\stoptyping
+
+\startplacefigure[reference=italic-two,title={Italic correction (factor 5).}]
+ \startcombination
+ \startcontent
+ \backgroundline
+ [maincolor]
+ {\color[white]{\definedfont[lmroman10-italic*default sa 4]test}
+ \color[white]{\definedfont[lmroman10-regular*default sa 4]\space test}}
+ \stopcontent
+ \startcaption
+ \backgroundline
+ [maincolor]
+ {\setupitaliccorrection[text]%
+ \color[white]{\definedfont[lmroman10-italic*italic sa 4]test}
+ \color[white]{\definedfont[lmroman10-regular*default sa 4]\space test}}
+ \stopcaption
+ \startcontent
+ \backgroundline
+ [maincolor]
+ {\color[white]{\definedfont[dejavuserifitalic*default sa 4]test}
+ \color[white]{\definedfont[dejavuserif*default sa 4]\space test}}
+ \stopcontent
+ \startcaption
+ \backgroundline
+ [maincolor]
+ {\setupitaliccorrection[text]%
+ \color[white]{\definedfont[dejavuserifitalic*italic sa 4]test}
+ \color[white]{\definedfont[dejavuserif*default sa 4]\space test}}
+ \stopcaption
+ \stopcombination
+\stopplacefigure
+
+The \type {itlc} feature controls if a font gets italic correction applied. In
+principle this is all that the user needs to do, given that the mechanism is
+enabled. These is an extra feature that controls the implementation:
+
+\starttabulate[|T|T|p|]
+\NC itlc \NC no \NC don't apply italic correction (default) \NC \NR
+\NC \NC yes \NC apply italic correction \NC \NR
+\NC textitalics \NC no \NC precalculate italic corrections (permit engine usage) \NC \NR
+\NC \NC yes \NC precalculate italic corrections (inhibit engine) \NC \NR
+\NC \NC delay \NC delay calculation of corrections \NC \NR
+\stoptabulate
+
+When \type {textitalics} is set to \type {yes} or \type {delay} the mechanism
+built into the engine is completely disabled. When set to \type {no} the engine
+can kick in but normally the alternative method takes precedence so that the
+engine sees no reason for further action. You can trace italic corrections with:
+
+\starttyping
+\enabletrackers[typesetters.italics]
+\stoptyping
+
+\stopsection
+
+\startsection[title=Bounding boxes]
+
+\startbuffer
+\definefontfeature
+ [withbbox]
+ [boundingbox=yes]
+
+\definefont
+ [FontWithBB]
+ [Normal*withbbox]
+\stopbuffer
+
+\start \getbuffer \FontWithBB
+
+There are some features that are rather useless and only make sense when figuring out
+issues. An example of such a feature is the following:
+
+\typebuffer
+
+This feature adds a background to each character in a font. In some fonts a glyph
+has a tight bounding box, while on other fonts some extra space is put on the left
+and right. Keep in mind that this feature blocks colored text.
+
+\par \stop
+
+\stopsection
+
+\startsection[title=Math italics]
+
+In the traditional \TEX\ fonts the width of a glyph was not the real width because
+one had to add the italic correction to it. The engine then juggles a bit with
+these properties. If you run into fonts that are designed this way, you can do this:
+
+\starttyping
+\definefontfeature[mathextra][italicwidths=yes] % fix latin modern
+\stoptyping
+
+This might make \type {$\left|V\right| = \left|W\right|$} look better for such
+fonts. Of course there can be side effects because these fonts assume a
+traditional engine.
+
+\stopsection
+
+\startsection[title=Slanting]
+
+This features (as well as the one described in the next section) are seldom used
+but provided because they were introduced in \PDFTEX.
+
+\startbuffer[define]
+\definefontfeature
+ [abitslanted]
+ [default]
+ [slant=.1]
+
+\definefontfeature
+ [abitmoreslanted]
+ [default]
+ [slant=.2]
+\stopbuffer
+
+\startbuffer[sample]
+\definedfont[Normal*abitslanted]This is a bit slanted.
+\definedfont[Normal*abitmoreslanted]And this is a bit more slanted.
+\stopbuffer
+
+\typebuffer[define,sample]
+
+The result is:
+
+\getbuffer[define]
+
+\startlines
+\getbuffer[sample]
+\stoplines
+
+\stopsection
+
+\startsection[title=Extending]
+
+The second manipulation is extending the shapes horizontally:
+
+\startbuffer[define]
+\definefontfeature
+ [abitbolder]
+ [default]
+ [extend=1.3]
+
+\definefontfeature
+ [abitnarrower]
+ [default]
+ [extend=0.7]
+\stopbuffer
+
+\startbuffer[sample]
+\definedfont[Normal*abitbolder]This looks a bit bolder.
+\definedfont[Normal*abitnarrower]And this is a bit narrower.
+\stopbuffer
+
+\typebuffer[define,sample]
+
+The result is:
+
+\getbuffer[define]
+
+\startlines
+\getbuffer[sample]
+\stoplines
+
+We can also combine slanting and extending:
+
+\startbuffer[define]
+\definefontfeature
+ [abitofboth]
+ [default]
+ [extend=1.3,
+ slant=.1]
+\stopbuffer
+
+\startbuffer[sample]
+\definedfont[Normal*abitofboth]This is a bit bolder but also slanted.
+\stopbuffer
+
+\typebuffer[define,sample]
+
+If you remember those first needle matrix printers you might recognize the
+next rendering:
+
+\getbuffer[define]
+
+\startlines
+\getbuffer[sample]
+\stoplines
+
+\stopsection
+
+\startsection[title=Fixing] % dimensions
+
+This is a rather special one. First we show a couple of definitions:
+
+\startbuffer
+\definefontfeature
+ [dimensions-a]
+ [default]
+ [dimensions={1,1,1}]
+
+\definefontfeature
+ [dimensions-b]
+ [default]
+ [dimensions={1,2,3}]
+
+\definefontfeature
+ [dimensions-c]
+ [default]
+ [dimensions={1,3,2}]
+
+\definefontfeature
+ [dimensions-d]
+ [default]
+ [dimensions={3,3,3}]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+As usual you apply such a feature as follows:
+
+\starttyping
+\definefont[MyFont][Serif*dimensions-a sa 2]
+\stoptyping
+
+Alternatively you can use such a feature on its own:
+
+\starttyping
+\definefontfeature
+ [dimensions-333]
+ [dimensions={3,3,3}]
+\definefont[MyFont][Serif*default,dimensions-333 sa 2]
+\stoptyping
+
+In \in {figure} [dimensions-side-by-side] you see these four definitions in
+action. The leftmost rendering is the default rendering. The three numbers in the
+definitions represent the width (in em), height and depth (in ex).
+
+\startplacefigure[reference={dimensions-side-by-side},title={Freezing dimensions of glyphs.}]
+ \startcombination[5*1]
+ \startcontent \hbox to 7em {\hss\ruledhbox{\definedfont[Serif*default sa 2]g}\hss}\stopcontent \startcaption default \stopcaption
+ \startcontent \hbox to 7em {\hss\ruledhbox{\definedfont[Serif*dimensions-a sa 2]g}\hss}\stopcontent \startcaption \hbox{1em 1ex 1ex} \stopcaption
+ \startcontent \hbox to 7em {\hss\ruledhbox{\definedfont[Serif*dimensions-b sa 2]g}\hss}\stopcontent \startcaption \hbox{1em 2ex 3ex} \stopcaption
+ \startcontent \hbox to 7em {\hss\ruledhbox{\definedfont[Serif*dimensions-c sa 2]g}\hss}\stopcontent \startcaption \hbox{1em 3ex 2ex} \stopcaption
+ \startcontent \hbox to 7em {\hss\ruledhbox{\definedfont[Serif*dimensions-d sa 2]g}\hss}\stopcontent \startcaption \hbox{3em 3ex 3ex} \stopcaption
+ \stopcombination
+\stopplacefigure
+
+This feature only makes sense for fonts that need a fixed width, like the
+\CJK\ fonts that are used for asian scripts. Normally those fonts already
+have fixed dimensions, but this feature can be used to fix problematic
+fonts or add some more space. However, for such large fonts this also brings a
+larger memory footprint.
+
+A special case is the following:
+
+\startbuffer
+\definefontfeature
+ [dimensions-e]
+ [dimensions=strut]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+This will make the height and depth the same as the current strut height and depth:
+
+\startbuffer
+\ruledhbox{\definedfont[Serif*default,dimensions-e at 8pt]clipped}
+\ruledhbox{\definedfont[Serif*default,dimensions-e at 12pt]clipped}
+\ruledhbox{\definedfont[Serif*default,dimensions-e at 24pt]clipped}
+\stopbuffer
+
+\typebuffer
+
+The dimensions are (in this case) limited:
+
+\startlinecorrection[blank] \dontleavehmode \hpack{\maincolor\inlinebuffer} \stoplinecorrection
+
+\stopsection
+
+\startsection[title=Unicoding]
+
+Nowadays we will mostly use fonts that ship with a \UNICODE\ aware encoding. And
+in \CONTEXT, even if we use a \TYPEONE\ font, it gets mapped onto \UNICODE.
+However, there are some exceptions, for instance the Zapf Dingbats in \TYPEONE\
+format. These have a rather obscure private encoding and the glyph names run from
+\type {a1} upto \type {a206} and have no relation to what the glyph represents.
+
+In the case of Dingbats we're somewhat lucky that they ended up in \UNICODE, so
+we can relocate the glyphs to match their rightful place. This is done by means
+of a goodies file. We already discussed this in \in {section} [goodies] so we
+only repeat the usage.
+
+\startbuffer
+\definefontfeature
+ [dingbats]
+ [mode=base,
+ goodies=dingbats,
+ unicoding=yes]
+
+\definefontsynonym
+ [ZapfDingbats]
+ [file:uzdr.afm]
+ [features=dingbats]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+I tend to qualify the Dingbat font in \TEX\ distributions as rather unstable
+because of name changes and them either or not being included. Therefore it's best to
+use the hard coded name because that triggers the most visible error message when
+the font is not found.
+
+A font like this can for instance be used with the glyph placement macros as is
+demonstrated below. In the last line we see that a direct \UTF\ input also works
+out well.
+
+\starttabulate[|||T|]
+\HL
+\NC \type{\getglyphdirect {ZapfDingbats*dingbats}{\number"2701}} \NC \getglyphdirect {ZapfDingbats*dingbats}{\number"2701} \NC \NC \NR
+\NC \type{\getglyphdirect {ZapfDingbats*dingbats}{\char"2701}} \NC \getglyphdirect {ZapfDingbats*dingbats}{\char"2701} \NC \NC \NR
+\NC \type{\getnamedglyphdirect{ZapfDingbats*dingbats}{a1}} \NC \getnamedglyphdirect{ZapfDingbats*dingbats}{a1} \NC \NC \NR
+\NC \type{\getnamedglyphdirect{ZapfDingbats*dingbats}{a11}} \NC \getnamedglyphdirect{ZapfDingbats*dingbats}{a11} \NC \NC \NR
+\HL
+\NC \type{\getglyphdirect {ZapfDingbats}{\number"2701}} \NC \getglyphdirect {ZapfDingbats}{\number"2701} \NC unknown \NC \NR
+\NC \type{\getglyphdirect {ZapfDingbats}{\char"2701}} \NC \getglyphdirect {ZapfDingbats}{\char"2701} \NC unknown \NC \NR
+\NC \type{\getnamedglyphdirect{ZapfDingbats}{a1}} \NC \getnamedglyphdirect{ZapfDingbats}{a1} \NC \NC \NR
+\NC \type{\getnamedglyphdirect{ZapfDingbats}{a11}} \NC \getnamedglyphdirect{ZapfDingbats}{a11} \NC \NC \NR
+\HL
+\NC \type{\definedfont[ZapfDingbats*dingbats]✁} \NC \definedfont[ZapfDingbats*dingbats]✁ \NC \NC \NR
+\HL
+\stoptabulate
+
+Keep in mind that fonts like Dejavu (that we use here as document font) already
+has these characters which is why it shows up in the verbose part of the table.
+
+\stopsection
+
+\startsection[title=Protrusion]
+
+Protrusion is a feature that \LUATEX\ inherits from \PDFTEX. It is sometimes
+referred to as hanging punctuation but in our case any character qualifies. Also,
+hanging is not frozen but can be tuned in detail. Currently the engine defines
+protrusion in terms of the emwidth which is unfortunate and likely to change.
+\footnote {In general the low level implementation can be optimized as there are
+better mechanisms in \LUATEX.}
+
+It is sometimes believed that protrusion improves for instance narrower columns,
+but I'm pretty sure that this is not the case. It is true that it is taken into
+account when breaking a paragraph into lines, and that we then have a little bit
+more width available, but at the same time it is an extra constraint: if we
+protrude we have to do it for each line (and the whole main body of text) so it's
+just a different solution space. The main reason for applying this feature is
+{\em not} that the lines look better or that we get better looking narrow lines
+but that the right and left margins look nicer. Personally I don't like half
+protrusion of punctuation and hyphens. Best is to have small values for regular
+characters to improve the visual appearance and use full protrusion for hyphens
+(and maybe punctuation).
+
+\startsubsubject[title=protrusion classes]
+
+In \CONTEXT\ we've always defined protrusion as a percentage of the width of a
+glyph. From \MKII\ we inherit the level of control as well as the ability to
+define vectors. The shared properties are collected in so called classes and the
+character specific properties in vectors. The following classes are predefined:
+
+\showprotrusionclass
+
+The names are used in the definitions:
+
+\starttyping
+\definefontfeature[default][protrusion=quality]
+\stoptyping
+
+Currently adding a class only has a \LUA\ interface.
+
+\startbuffer
+\startluacode
+fonts.protrusions.classes.myown = {
+ vector = 'myown',
+ factor = 1,
+}
+\stopluacode
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\stopsubsubject
+
+\startsubsubject[title=protrusion vectors]
+
+Vectors are larger but not as large as you might expect. Only a subset of
+characters needs to be defined. This is because in practice only latin scripts
+are candidates and these scripts have glyphs that look a lot like each other. As
+we only operate on the horizontal direction characters like \quote
+{aàáâãäå} look the same from the left and right so we only have to define
+the protrusion for \quote {a}.
+
+As with classes, you can define your own vectors:
+
+\startbuffer
+\startluacode
+fonts.protrusions.vectors.myown = table.merged (
+ fonts.protrusions.vectors.quality,
+ {
+ [0x002C] = { 0, 2 }, -- comma
+ }
+)
+\stopluacode
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\stopsubsubject
+
+\startsubsubject[title=protrusion vector pure]
+ \showprotrusionvector[name=pure]
+\stopsubsubject
+
+\startsubsubject[title=protrusion vector punctuation]
+ \showprotrusionvector[name=punctuation]
+\stopsubsubject
+
+\startsubsubject[title=protrusion vector alpha]
+ \showprotrusionvector[name=alpha]
+\stopsubsubject
+
+\startsubsubject[title=protrusion vector quality]
+ \showprotrusionvector[name=quality]
+\stopsubsubject
+
+\startsubsubject[title=examples of protrusion]
+
+Next we show the quality protrusion. For this we use \type {tufte.tex} as
+this one for sure will result in punctuation and other candidates for
+protrusion.
+
+\startbuffer[define]
+\definefontfeature
+ [whatever]
+ [default]
+ [protrusion=quality]
+
+\definefont[MyTestA][Serif*default at 10pt]
+\definefont[MyTestB][Serif*whatever at 10pt]
+\stopbuffer
+
+\startbuffer[example]
+\startoverlay
+ {\ruledvbox \bgroup
+ \hsize\textwidth
+ \MyTestA
+ \setupalign[normal]
+ \input{tufte}
+ \egroup}
+ {\ruledvbox \bgroup
+ \hsize\textwidth
+ \MyTestB
+ \setupalign[hanging,normal]
+ \maincolor
+ \input{tufte}
+ \egroup}
+\stopoverlay
+\stopbuffer
+
+\typebuffer[define]
+\getbuffer [define]
+
+We use the following example. The results are shown in \in {figure}
+[protrusion:quality]. The colored text is the protruding one.
+
+\typebuffer[example]
+
+\startplacefigure[reference=protrusion:quality,title=The difference between no protrusion and quality protrusion.]
+ \getbuffer [example]
+\stopplacefigure
+
+The previously defined own class and vector is somewhat more extreme:
+
+\startbuffer[define]
+\definefontfeature
+ [whatever]
+ [default]
+ [protrusion=myown]
+
+\definefont[MyTestA][Serif*default at 10pt]
+\definefont[MyTestB][Serif*whatever at 10pt]
+\stopbuffer
+
+\typebuffer[define]
+\getbuffer [define]
+
+In \in {figure} [protrusion:myown] we see that the somewhat extreem definition of
+the comma also pulls the preceding character into the margin.
+
+\startplacefigure[reference=protrusion:myown,title=The influence of extreme protrusion on preceding characters.]
+ \getbuffer [example]
+\stopplacefigure
+
+\stopsection
+
+\startsection[title=Expansion]
+
+Expansion is also an inheritance of \PDFTEX. \footnote {As with protrusion the
+implementation in the engine is somewhat suboptimal and inefficient and will be
+upgraded to a more \LUATEX-ish way.} This mechanism selectively expands
+characters, normally upto 5\%. One reason for applying it is that we have less
+visually incompatible spacing, especially when we have underfull or cramped
+lines. For each (broken) line the badness is reconsidered with either shrink or
+stretch applied to all characters in that line. So, in the worst case a shrunken
+line is followed by a stretched one and that can be visible when the scaling
+factors are chosen wrong.
+
+As with protrusion, the solution space is larger but so are the constraints. But
+contrary to protrusion here the look and feel of the whole line can be made
+better but at the cost of much more runtime and larger (\PDF) files.
+
+\startsubsubject[title=protrusion classes]
+
+The amount of expansion depends in the shape of the character. Vertical strokes
+are more sensitive for expansion then horizontal ones. So an \quote {o} can
+get a different scaling than an \quote {m}. As with protrusion we have collected
+the properties in classes:
+
+\showexpansionclass
+
+The smaller the step, the more instances of a font we get, the better it
+looks, and the larger the files become. it's best not to use too many stretch
+and shrink steps. A stretch of 2 and shrink of 2 and step of .25 results in
+upto 8~instances plus the regular sized one.
+
+\stopsubsubject
+
+\startsubsubject[title=expansion vectors]
+
+We only have one vector: \type {quality}:
+
+\showexpansionvector[name=quality]
+
+\stopsubsubject
+
+\startsubsubject[title=an example of expansion]
+
+We use \type {zapf.tex} as example text, if only because Hermann Zapf introduced
+this optimization. Keep in mind that you can combine expansion and protrusion.
+
+\startbuffer[define]
+\definefontfeature
+ [whatever]
+ [default]
+ [expansion=quality]
+
+\definefont[MyTestA][Serif*default at 10pt]
+\definefont[MyTestB][Serif*whatever at 10pt]
+\stopbuffer
+
+\startbuffer[example]
+\startoverlay
+ {\ruledvbox \bgroup
+ \hsize\textwidth
+ \MyTestA
+ \setupalign[normal]
+ \input{tufte}
+ \egroup}
+ {\ruledvbox \bgroup
+ \hsize\textwidth
+ \MyTestB
+ \setupalign[hz,normal]
+ \maincolor
+ \input{tufte}
+ \egroup}
+\stopoverlay
+\stopbuffer
+
+\typebuffer[define]
+\getbuffer [define]
+
+We use the following example. The results are shown in \in {figure}
+[expansion:quality]. The colored text is the protruding one.
+
+\typebuffer[example]
+
+\startplacefigure[reference=expansion:quality,title=The difference between no expansion and quality expansion.]
+ \getbuffer [example]
+\stopplacefigure
+
+\startsubsubject[title=Expansion and kerning]
+
+When we expand glyphs we also need to look at the font kerns between them. In the
+original implementation taken from \PDFTEX\ expansion was implemented using pseudo
+fonts (with expanded glyph widths) and expansion of inter|-|character kerns was
+based on font information. In \LUATEX\ we have expansion factors in glyph nodes
+instead which is more efficient and gives a cleaner separation between front- and
+backend as the backend has no need to consult the font.
+
+For the font kerns we set the kern compensation directly and for that we use the
+average expansion factors of the neighbouring fonts so technically we support
+kerns between different fonts). This also has the advantage that kerns injected
+in node mode are treated well, given that they are tagged as font kern.
+
+So what is the effect (and need) of scaling font kerns? Let's look at an example.
+Kerns can be positive but also negative:
+
+\startlinecorrection
+\startcombination
+ {\vbox {
+ \forgetall
+ \hpack to 3cm{\hss\ruledhbox{\maincolor V\kern-1ptA}\hss}
+ \hpack to 3cm{\hss\ruledhbox{\maincolor V\kern 0ptA}\hss}
+ }} {negative}
+ {\vbox {
+ \forgetall
+ \hpack to 3cm{\hss\ruledhbox{\maincolor I\kern.25ptI}\hss}
+ \hpack to 3cm{\hss\ruledhbox{\maincolor I\kern 0ptI}\hss}
+ }} {positive}
+\stopcombination
+\stoplinecorrection
+
+If we use a rediculous amount of stretch we get the following. In the top line we
+scale the kern, in the bottom line we don't.
+
+\startlinecorrection
+\startcombination
+ {\vbox {
+ \definedfont[file:texgyrepagella-regular.otf at 12pt]%
+ \forgetall
+ \hpack to 3cm{\maincolor \hss\strut \scale[xscale=5000]{V}\kern-5pt\scale[xscale=5000]{A}\hss}
+ \hpack to 3cm{\maincolor \hss\strut \scale[xscale=5000]{V}\kern-1pt\scale[xscale=5000]{A}\hss}
+ }} {negative}
+ {\vbox {
+ \definedfont[file:texgyrepagella-regular.otf at 12pt]%
+ \forgetall
+ \hpack to 3cm{\maincolor \hss\strut \scale[xscale=5000]{I}\kern1.25pt\scale[xscale=5000]{I}\hss}
+ \hpack to 3cm{\maincolor \hss\strut \scale[xscale=5000]{I}\kern0.25pt\scale[xscale=5000]{I}\hss}
+ }} {positive}
+\stopcombination
+\stoplinecorrection
+
+The reason that we mention this is that when we apply \OPENTYPE\ features,
+positioning not necessarily result in font kerns. For instance ligatures can be
+the result of careful applied kerns and in some scripts kerns are used to connect
+glyphs. This means that we best cannot expand kerns by default. How bad is
+that? By looking at the examples above one would say \quotation {real bad}.
+
+But say that we have about 1pt of font kerns, then a 5\% expansion (which is
+already a lot) amounts to 0.05pt so to \blackrule [width=1pt, height=max,
+depth=max] we add \blackrule [width=.05pt, height=max, depth=max] which is so
+little that it probably goes unnoticed. Even if we use extreme kerns, as between
+VA, in practice the small amount of stretch or shrink added to a font kern goes
+unnoticed.
+
+In \in {figure} [hz:natural] we have overlayed the different strategies. The
+sample and width is chosen such that we see something. On a display you can
+scale up these examples and inspect if there is really something to see,
+but on paper zooming in helps, as in \in {figure} [hz:zoomed]. Even then the
+effect of expanded kerns is invisible. The used definitions are:
+
+\definecolor[hz:test:tr][r=1,a=1,t=.5]
+\definecolor[hz:test:tg][g=1,a=1,t=.5]
+\definecolor[hz:test:tb][b=1,a=1,t=.5]
+
+\startbuffer
+\setupfontexpansion
+ [extremehz]
+ [stretch=5,shrink=5,step=.5,vector=default,factor=1]
+\setupfontexpansion
+ [regularhz]
+ [stretch=2,shrink=2,step=.5,vector=default,factor=1]
+\setupfontexpansion
+ [minimalhz]
+ [stretch=2,shrink=2,step=.5,vector=default,factor=.5]
+
+\definefontfeature
+ [extremehz] [default]
+ [mode=node,expansion=extremehz]
+\definefontfeature
+ [regularhz] [default]
+ [mode=node,expansion=regularhz]
+\definefontfeature [minimalhz] [default]
+ [mode=node,expansion=minimalhz]
+
+\definefont
+ [ExtremeHzFont]
+ [file:texgyrepagella-regular.otf*extremehz at 10pt]
+\definefont
+ [RegularHzFont]
+ [file:texgyrepagella-regular.otf*regularhz at 10pt]
+\definefont
+ [MinimalHzFont]
+ [file:texgyrepagella-regular.otf*minimalhz at 10pt]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\edef\HzSampleText{\cldloadfile{ward}}
+
+\def\NoHzSample {\vbox{\hsize 10cm \color[hz:test:tr]{\setupalign [nohz]\HzSampleText\par}}}
+\def\HzSample {\vbox{\hsize 10cm \color[hz:test:tg]{\setupalign [hz]\HzSampleText\par}}}
+\def\FullHzSample{\vbox{\hsize 10cm \color[hz:test:tb]{\setupalign[fullhz]\HzSampleText\par}}}
+
+\startplacefigure[reference=hz:natural,title={The two expansion methods compared.}]
+ \showfontkerns
+ \dontcomplain
+ \enabledirectives[fonts.injections.fontkern]
+ \startcombination[1*3]
+ {\ExtremeHzFont\ruledhpack{\startoverlay {\NoHzSample} {\HzSample } \stopoverlay}} {no hz \& hz}
+ {\ExtremeHzFont\ruledhpack{\startoverlay {\NoHzSample} {\FullHzSample} \stopoverlay}} {no hz \& full hz}
+ {\ExtremeHzFont\ruledhpack{\startoverlay {\HzSample } {\FullHzSample} \stopoverlay}} {hz \& full hz}
+ \stopcombination
+ \disabledirectives[fonts.injections.fontkern]
+\stopplacefigure
+
+\startplacefigure[reference=hz:zoomed,title={The two expansion methods compared (zoomed in).}]
+ \showfontkerns
+ \dontcomplain
+ \enabledirectives[fonts.injections.fontkern]
+ \startcombination[3*3]
+
+ {\ExtremeHzFont
+ \clip[nx=6,ny=5,x=2,y=2,sx=2]{\startoverlay {\NoHzSample} {\HzSample } \stopoverlay}} {extreme: no hz \& hz}
+ {\ExtremeHzFont
+ \clip[nx=6,ny=5,x=2,y=2,sx=2]{\startoverlay {\NoHzSample} {\FullHzSample} \stopoverlay}} {extreme: no hz \& full hz}
+ {\ExtremeHzFont
+ \clip[nx=6,ny=5,x=2,y=2,sx=2]{\startoverlay {\HzSample } {\FullHzSample} \stopoverlay}} {extreme: hz \& full hz}
+
+ {\RegularHzFont
+ \clip[nx=6,ny=5,x=2,y=2,sx=2]{\startoverlay {\NoHzSample} {\HzSample } \stopoverlay}} {regular: no hz \& hz}
+ {\RegularHzFont
+ \clip[nx=6,ny=5,x=2,y=2,sx=2]{\startoverlay {\NoHzSample} {\FullHzSample} \stopoverlay}} {regular: no hz \& full hz}
+ {\RegularHzFont
+ \clip[nx=6,ny=5,x=2,y=2,sx=2]{\startoverlay {\HzSample } {\FullHzSample} \stopoverlay}} {regular: hz \& full hz}
+
+ {\MinimalHzFont
+ \clip[nx=6,ny=5,x=2,y=2,sx=2]{\startoverlay {\NoHzSample} {\HzSample } \stopoverlay}} {minimal: no hz \& hz}
+ {\MinimalHzFont
+ \clip[nx=6,ny=5,x=2,y=2,sx=2]{\startoverlay {\NoHzSample} {\FullHzSample} \stopoverlay}} {minimal: no hz \& full hz}
+ {\MinimalHzFont
+ \clip[nx=6,ny=5,x=2,y=2,sx=2]{\startoverlay {\HzSample } {\FullHzSample} \stopoverlay}} {minimal: hz \& full hz}
+
+ \stopcombination
+ \disabledirectives[fonts.injections.fontkern]
+\stopplacefigure
+
+In \CONTEXT\ the \type {hz} alignment option only enables expansion of glyphs, while \type
+{fullhz} also applies it to kerns. However, in the examples here we had to explicitly enable
+font kerns in node mode:
+
+\starttyping
+\enabledirectives[fonts.injections.fontkern]
+\stoptyping
+
+It will be clear that you can just stick to using the \type {hz} directive (if
+you want expansion at all) because this directive is normally disabled and
+because most fonts are processed in node mode.
+
+\stopsubsubject
+
+\stopsection
+
+\startsection[title=Composing]
+
+This feature is seldom needed but can come in handy for old fonts or when
+some special language is to be supported. When writing this section I tested
+this feature with Dejavu and only two additional characters were added:
+
+\definefontfeature
+ [default-plus-compose]
+ [compose=yes]
+
+\definefont
+ [MyComposedSerif]
+ [Serif*default-plus-compose]
+
+% we need to cheat a bit as we don't have the main character in mono
+
+\startlines \MyComposedSerif
+\type{fonts > combining > }\hbox to .5em{\hss Ѷ\hss}\type{ (U+00476) = }\hbox to .5em{\hss Ѵ\hss}\type{ (U+00474) + ̏ (U+0030F)}
+\type{fonts > combining > }\hbox to .5em{\hss ѷ\hss}\type{ (U+00477) = }\hbox to .5em{\hss ѵ\hss}\type{ (U+00475) + ̏ (U+0030F)}
+\stoplines
+
+This trace showed up after giving:
+
+\starttyping
+\enabletrackers
+ [fonts.composing.define]
+
+\definefontfeature
+ [default-plus-compose]
+ [compose=yes]
+
+\definefont
+ [MyFont]
+ [Serif*default-plus-compose]
+\stoptyping
+
+Fonts like Latin Modern have lots of glyphs but still lack some. Although the
+composer can add some of the missing, some of those new virtual glyphs probably
+will never look real good. For instance, putting additional accents on top of
+already accented uppercase characters will fail when that character has a rather
+tight (or even clipped) boundingbox in order not to spoil the lineheight. You can
+get some more insight in the process by turning on tracing:
+
+\starttyping
+\enabletrackers[fonts.composing.visualize]
+\stoptyping
+
+One reason why composing can be suboptimal is that it uses the boundingbox of the
+characters that are combined. If you really depend on a specific font and need
+some of the missing characters it makes sense to spend some time on optimizing
+the rendering. This can be done via the goodies mechanism. As an example we've
+added \type {lm-compose-test.lfg} to the distribution. First we show how it
+looks at the \TEX\ end:
+
+\startbuffer
+\enabletrackers[fonts.composing.visualize]
+
+\definefontfeature
+ [default-plus-compose]
+ [compose=yes]
+
+\loadfontgoodies
+ [lm-compose-test] % playground
+
+\definefont
+ [MyComposedSerif]
+ [file:lmroman10regular*default-plus-compose at 48pt]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\blank
+\backgroundline
+ [halfcolor]
+ {\MyComposedSerif B\quad\char"1E02\quad\char"1E04}
+\blank
+
+The positions of the dot accents on top and below the capital B is defined
+in a goodie file:
+
+\starttyping
+return {
+ name = "lm-compose-test",
+ version = "1.00",
+ comment = "Goodies that demonstrate composition.",
+ author = "Hans and Mojca",
+ copyright = "ConTeXt development team",
+ compositions = {
+ ["lmroman12-regular"] = compose,
+ }
+}
+\stoptyping
+
+As this is an experimental feature there are several ways to deal with
+this. For instance:
+
+\starttyping
+local defaultfraction = 10.0
+
+local compose = {
+ dy = defaultfraction,
+ [0x1E02] = { -- B dot above
+ dy = 150
+ },
+ [0x1E04] = { -- B dot below
+ dy = 150
+ },
+}
+\stoptyping
+
+Here the fraction is relative to the difference between the height of the
+accentee and the accent. A better solution is the following:
+
+\starttyping
+local compose = {
+ [0x1E02] = { -- B dot above
+ anchored = "top",
+ },
+ [0x1E04] = { -- B dot below
+ anchored = "bottom",
+ },
+ [0x0042] = { -- B
+ anchors = {
+ top = {
+ x = 300, y = 700,
+ },
+ bottom = {
+ x = 300, y = -30,
+ },
+ },
+ },
+ [0x0307] = {
+ anchors = {
+ top = {
+ x = -250, y = 550,
+ },
+ },
+ },
+ [0x0323] = {
+ anchors = {
+ bottom = {
+ x = -250, y = -80,
+ },
+ },
+ },
+}
+\stoptyping
+
+This approach is more or less the same as \OPENTYPE\ anchoring. It takes a bit
+more effort to define these tables but the result is better.
+
+\stopsection
+
+\startsection[title=Kerning]
+
+Inter|-|character kerning is not supported at the font level and with good
+reason. The fact that something is conceptually possible doesn't mean that we
+should use or support it. Normally proper kerning (or the lack of it) is part
+of a font design and for some scripts different kerning is not even an option.
+
+On the average \TEX\ does a proper job on justification but not all programs
+are that capable. As a consequence designers (at least we ran into it) tend to
+stick to flush left rendering because they don't trust their system to do a
+proper job otherwise. On the other hand they seem to have no problem with
+messing up the inter|-|character spacing and even combine that with excessive
+inter|-|word spacing {\em if} they want to achieve justification (without
+hyphenation). And it can become even worse when extreme glyph expansion (like
+hz) is applied.
+
+Anyhow, it will be clear that consider messing with properties like kerning that
+are part of the font design is to be done careful.
+
+\definecharacterkerning [extremekerning] [factor=.125]
+
+\start \setcharacterkerning[extremekerning]
+
+For running text additional kerning makes no sense. It not only looks
+bad, it also spoils the grayness of a text. When it is applied we need
+to deal with special cases. For instance ligatures make no sense so they
+should be disabled. Additional kerning should relate to already present
+kerning and interword spacing should be adapted accordingly. Embedded
+non|-|characters also need to be treated well.
+
+\par \stop
+
+This paragraph was typeset as follows:
+
+\starttyping
+\definecharacterkerning [extremekerning] [factor=.125]
+
+\setcharacterkerning[extremekerning] ... text ...
+\stoptyping
+
+Where additional kerning can make sense, is in titles. The previous
+command can do that job. In addition we have a mechanism that
+fills a given space. This mechanism uses the following definition:
+
+\starttyping
+\setupcharacterkerning
+ [stretched]
+ [factor=max,
+ width=\availablehsize]
+\stoptyping
+
+\startbuffer
+\stretched{\bfd to the limit}
+\stopbuffer
+
+\typebuffer
+
+\blank \start \color[maincolor]{\getbuffer} \stop \blank
+
+The following does not work:
+
+\startbuffer
+\ruledhbox to 5cm{\stretched{\bfd to the limit}}
+\stopbuffer
+
+\typebuffer
+
+\blank \start \color[maincolor]{\getbuffer} \stop \blank
+
+But this works ok:
+
+\startbuffer
+\setupcharacterkerning
+ [stretched]
+ [width=]
+
+\stretched{\bfd to the limit}
+\stopbuffer
+
+\typebuffer
+
+\blank \start \color[maincolor]{\getbuffer} \stop \blank
+
+You can also say this:
+
+\startbuffer
+\stretched[width=]{\bfd to the limit}
+\stopbuffer
+
+\typebuffer
+
+\blank \start \color[maincolor]{\getbuffer} \stop \blank
+
+or:
+
+\startbuffer
+\ruledhbox{\stretched[width=10cm]{\bfd to the limit}}
+\stopbuffer
+
+\typebuffer
+
+\blank \start \color[maincolor]{\getbuffer} \stop \blank
+
+You can get some insight in what kerning does to your font by the following
+command:
+
+\startbuffer
+\usemodule[typesetting-kerning]
+
+\starttext
+ \showcharacterkerningsteps
+ [style=Bold,
+ sample=how to violate a proper font design,
+ text=rubish,
+ first=0,
+ last=45,
+ step=5]
+\stoptext
+\stopbuffer
+
+\typebuffer
+
+\blank \getbuffer \blank
+
+\stopsection
+
+\startsection[title=Extra font kerns]
+
+Fonts are processed independent of each other. Sometimes that is unfortunate for
+kerning, although in practice it won't happen that often. We can enable an
+additional kerning mechanism to deal with these cases. The \type
+{\setextrafontkerns} command takes one argument between square brackets. The
+effect can be seen below:
+
+\startbuffer
+ VA {\smallcaps va} V{\smallcaps a}
+ VA {\bf VA} V{\bf A} {\bf V}A
+ V{\it A}
+\stopbuffer
+
+\starttabulate[|Tl|l|p|]
+\HL
+\BC key \BC result \BC logic \NC \NR
+\HL
+\NC no kerns \NC \showfontkerns\setextrafontkerns[reset]\subff{f:kern}\inlinebuffer \NC no kerns at all \NC \NR
+\NC kerns \NC \showfontkerns\setextrafontkerns[reset]\inlinebuffer \NC kerns within a font (feature) run \NC \NR
+\HL
+\NC none \NC \showfontkerns\setextrafontkerns [none]\inlinebuffer \NC only extra kerns within fonts \NC \NR
+\NC min \NC \showfontkerns\setextrafontkerns [min]\inlinebuffer \NC minimal kerns within and across fonts \NC \NR
+\NC max \NC \showfontkerns\setextrafontkerns [max]\inlinebuffer \NC maximum kerns within and across fonts \NC \NR
+\NC mixed \NC \showfontkerns\setextrafontkerns[mixed]\inlinebuffer \NC averaged kerns within and across fonts \NC \NR
+\HL
+\stoptabulate
+
+The content is defined as:
+
+\typebuffer
+
+This mechanism obeys grouping so you have complete control over where and when
+it gets applied. The \type {\showfontkerns} command can be used to trace the
+injection of (font) kerns.
+
+\stopsection
+
+\startsection[title=Ligatures]
+
+For some Latin fonts ligature building is quite advanced, take Unifraktur. I have no
+problem admitting that I find fraktur hard to read, but this one actually is sort of
+an exception. It's also a good candidate for a screen presentation where you mainly
+made notes for yourself: no one has to read it, but it looks great, especially if
+you consider it to be drawn by a pen.
+
+Anyway, we will use the following code as example (based on some remarks on the
+fonts website).
+
+\startbuffer[sample]
+sitzen / ſitzen / effe fietsen / ch ck ſt tz ſi fi
+\stopbuffer
+
+\typebuffer[sample]
+
+Some ligatures are implemented in the usual way, using the \type {liga} and \type {dlig}
+features, others kick in thanks to \type {ccmp}. This fact alone is an illustration that
+the low level \OPENTYPE\ ligature feature is not related to ligatures at all but a more
+generic mechanism: you can basically combine multiple shapes into one in all features
+exposed to the user.
+
+We define a bunch of specific feature sets:
+
+\startbuffer
+\definefontfeature
+ [unifraktur-a]
+ [default]
+\definefontfeature
+ [unifraktur-b]
+ [default]
+ [goodies=unifraktur,keepligatures=yes]
+\definefontfeature
+ [unifraktur-c]
+ [default]
+ [ccmp=yes]
+\definefontfeature
+ [unifraktur-d]
+ [default]
+ [ccmp=yes,goodies=unifraktur,keepligatures=yes]
+\definefontfeature
+ [unifraktur-e]
+ [default]
+ [liga=no,rlig=no,clig=no,dlig=no,ccmp=yes,keepligatures=auto]
+\stopbuffer
+
+\getbuffer \typebuffer
+
+and also some fonts:
+
+\startbuffer
+\definefont[TestA][UnifrakturCook*unifraktur-a sa 0.9]
+\definefont[TestB][UnifrakturCook*unifraktur-b sa 0.9]
+\definefont[TestC][UnifrakturCook*unifraktur-c sa 0.9]
+\definefont[TestD][UnifrakturCook*unifraktur-d sa 0.9]
+\definefont[TestE][UnifrakturCook*unifraktur-e sa 0.9]
+\stopbuffer
+
+\getbuffer \typebuffer
+
+We show these five alternatives here:
+
+\starttabulate[|T||]
+\NC liga \NC \TestA\getbuffer[sample] \NC \NR
+\NC liga + keepligatures \NC \TestB\getbuffer[sample] \NC \NR
+\NC liga + ccmp \NC \TestC\getbuffer[sample] \NC \NR
+\NC liga + ccmp + keepligatures \NC \TestD\getbuffer[sample] \NC \NR
+\NC ccmp + keepligatures \NC \TestE\getbuffer[sample] \NC \NR
+\stoptabulate
+
+The real fun starts when we want to add extra spacing between characters. Some
+ligatures need to get broken and some kept.
+
+\startbuffer
+\setupcharacterkerning[kerncharacters][factor=0.5]
+\setupcharacterkerning[letterspacing] [factor=0.5]
+\stopbuffer
+
+\getbuffer \typebuffer
+
+\enabletrackers[typesetters.kerns.ligatures]
+
+Next we will see how ligatures behave depending on how the mechanisms are set
+up. The colors indicate what trickery is used:
+
+\starttabulate[|T||]
+\NC \color[darkred] {red} \NC kept by dynamic feature \NC \NR
+\NC \color[darkgreen]{green} \NC kept by static feature \NC \NR
+\NC \color[darkblue] {blue} \NC keep by goodie \NC \NR
+\stoptabulate
+
+First we use \type {\kerncharacters}:
+
+\starttabulate[|T||]
+\NC liga \NC \kerncharacters {\TestA\getbuffer[sample]} \NC \NR
+\NC liga + keepligatures \NC \kerncharacters {\TestB\getbuffer[sample]} \NC \NR
+\NC liga + ccmp \NC \kerncharacters {\TestC\getbuffer[sample]} \NC \NR
+\NC liga + ccmp + keepligatures \NC \kerncharacters {\TestD\getbuffer[sample]} \NC \NR
+\NC ccmp + keepligatures \NC \kerncharacters {\TestE\getbuffer[sample]} \NC \NR
+\stoptabulate
+
+In the next example we use \type {\letterspacing}:
+
+\starttabulate[|T||]
+\NC liga \NC \letterspacing {\TestA\getbuffer[sample]} \NC \NR
+\NC liga + keepligatures \NC \letterspacing {\TestB\getbuffer[sample]} \NC \NR
+\NC liga + ccmp \NC \letterspacing {\TestC\getbuffer[sample]} \NC \NR
+\NC liga + ccmp + keepligatures \NC \letterspacing {\TestD\getbuffer[sample]} \NC \NR
+\NC ccmp + keepligatures \NC \letterspacing {\TestE\getbuffer[sample]} \NC \NR
+\stoptabulate
+
+\disabletrackers[typesetters.kerns.ligatures]
+
+The difference is that the letterspacing variant dynamically adds the predefined
+featureset \type {letterspacing} which is defined in a similar way as \type
+{unifraktur-e}. In the case of this font, this variant is the better one to use.
+In fact, this variant probably works okay with most fonts. However, by not hard
+coding this behaviour we keep control, as one never knows what the demands are.
+When no features are used, information from the (given) goodie file \type
+{unifraktur.lfg} is consulted:
+
+\starttyping
+letterspacing = {
+ -- watch it: zwnj's are used (in the tounicodes too)
+ keptligatures = {
+ ["c_afii301_k.ccmp"] = true, -- ck
+ ["c_afii301_h.ccmp"] = true, -- ch
+ ["t_afii301_z.ccmp"] = true, -- tz
+ ["uniFB05"] = true, -- ſt
+ },
+}
+\stoptyping
+
+These kick in when we don't disable ligatures by setting features (case~e).
+
+There are two pseudo features that can help us out when a font doesn't provide
+the wanted ligatures but has the right glyphs for building them. The \UNICODE\
+database has some information about how characters can be (de)composed and we can
+use that information to create virtual glyphs:
+
+\starttyping
+\definefontfeature
+ [default] [default]
+ [char-ligatures=yes,mode=node]
+\stoptyping
+
+and:
+
+\starttyping
+\definefontfeature
+ [default] [default]
+ [compat-ligatures=yes,mode=node]
+\stoptyping
+
+This feature was added after some discussion on the \CONTEXT\ mailing list about
+the following use case.
+
+\startbuffer
+\definefontfeature
+ [default-l] [default]
+ [char-ligatures=yes,
+ compat-ligatures=yes,
+ mode=node]
+
+\definefont[LigCd][cambria*default]
+\definefont[LigPd][texgyrepagellaregular*default]
+\definefont[LigCl][cambria*default-l]
+\definefont[LigPl][texgyrepagellaregular*default-l]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+These definitions result in:
+
+\starttabulate[|l|l|l|l|l|]
+\NC \NC \type {\LigCd} \NC \type {\LigPd} \NC \type {\LigCl} \NC \type {\LigPl} \NC \NR
+\NC \type{PEL·LÍCULES} \NC \LigCd PEL·LÍCULES \NC \LigPd PEL·LÍCULES \NC \LigCl PEL·LÍCULES \NC \LigPl PEL·LÍCULES \NC \NR
+\NC \type{pel·lícules} \NC \LigCd pel·lícules \NC \LigPd pel·lícules \NC \LigCl pel·lícules \NC \LigPl pel·lícules \NC \NR
+\NC \type{PEĿLÍCULES} \NC \LigCd PEĿLÍCULES \NC \LigPd PEĿLÍCULES \NC \LigCl PEĿLÍCULES \NC \LigPl PEĿLÍCULES \NC \NR
+\NC \type{peŀlícules} \NC \LigCd peŀlícules \NC \LigPd peŀlícules \NC \LigCl peŀlícules \NC \LigPl peŀlícules \NC \NR
+\stoptabulate
+
+Of course one can wonder is this is the right approach and if it's not better to
+use a font that provides the needed characters in the first place.
+
+\stopsection
+
+\startsection[title=New features]
+
+\startsubsection[title=Substitution]
+
+It is possible to add new features via \LUA. Here is an example of a single
+substitution:
+
+\startbuffer
+\startluacode
+ fonts.handlers.otf.addfeature {
+ name = "stest",
+ type = "substitution",
+ data = {
+ a = "X",
+ b = "P",
+ }
+ }
+\stopluacode
+\stopbuffer
+
+\typebuffer \getbuffer
+
+We show an overview at the end of this section, but here is a simple example
+already. You need to define the feature before defining a font because otherwise
+the font will not know about it.
+
+\startbuffer
+\definefontfeature[stest][stest=yes]
+\definedfont[file:dejavu-serifbold.ttf*default]
+abracadabra: \addff{stest}abracadabra
+\stopbuffer
+
+\typebuffer \start \blank \maincolor \getbuffer \blank \stop
+
+Instead of (more readable) glyph names you can also give \UNICODE\ numbers:
+
+\starttyping
+\startluacode
+ fonts.handlers.otf.addfeature {
+ name = "stest",
+ type = "substitution",
+ data = {
+ [0x61] = 0x58
+ [0x62] = 0x50
+ }
+ }
+\stopluacode
+\stoptyping
+
+The definition is quite simple: we just map glyph names (or unicodes) onto
+other ones. An alternate is also possible:
+
+\startbuffer
+\startluacode
+ fonts.handlers.otf.addfeature {
+ name = "atest",
+ type = "alternate",
+ data = {
+ a = { "X", "Y" },
+ b = { "P", "Q" },
+ }
+ }
+\stopluacode
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Less useful is a multiple substitution. Normally this one is part of a chain of
+replacements.
+
+\startbuffer
+\startluacode
+ fonts.handlers.otf.addfeature {
+ name = "mtest",
+ type = "multiple",
+ data = {
+ a = { "X", "Y" },
+ b = { "P", "Q" },
+ }
+ }
+\stopluacode
+\stopbuffer
+
+\typebuffer \getbuffer
+
+A ligature (or multiple to one) is also possible but normally only makes sense when
+there is indeed a ligature. We use a similar definition for mapping the \TEX\ input
+sequence \type {---} onto an \emdash.
+
+\startbuffer
+\startluacode
+ fonts.handlers.otf.addfeature {
+ name = "ltest",
+ type = "ligature",
+ data = {
+ ['1'] = { "a", "b" },
+ ['2'] = { "d", "a" },
+ }
+ }
+\stopluacode
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\stopsubsection
+
+\startsubsection[title=Positioning]
+
+You can define a kern feature too but when doing so you need to use measures in
+font units.
+
+\startbuffer
+\startluacode
+ fonts.handlers.otf.addfeature {
+ name = "ktest",
+ type = "kern",
+ data = {
+ a = { b = -500 },
+ }
+ }
+\stopluacode
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Pairwise positioning is more complex and involves two (optional) arrays
+that specify \type {{dx dy wd ht}} for each of the two glyphs. In the next
+example we only displace the second glyph.
+
+\startbuffer
+\startluacode
+ fonts.handlers.otf.addfeature {
+ name = "ptest",
+ type = "pair",
+ data = {
+ ["a"] = { ["b"] = { false, { -1000, 1200, 0, 0 } } },
+ }
+ }
+\stopluacode
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Of course you need to know a bit about the metrics of the glyphs involved so in
+practice this boils down to trial and error.
+
+\stopsubsection
+
+\startsubsection[title=Examples]
+
+We didn't show usage yet. This is because we need to define a feature before we
+define a font. New features will be added to a font when it gets defined.
+
+\startbuffer
+\definefontfeature[stest][stest=yes]
+\definefontfeature[atest][atest=2]
+\definefontfeature[mtest][mtest=yes]
+\definefontfeature[ltest][ltest=yes]
+\definefontfeature[ktest][ktest=yes]
+\definefontfeature[ptest][ptest=yes]
+\definefontfeature[ctest][ctest=yes]
+
+\definedfont[file:dejavu-serif.ttf*default]
+
+\starttabulate[|l|l|l|]
+\NC operation \NC feature \NC abracadabra \NC \NR
+\HL
+\NC substitution \NC \type {stest} \NC \addff{stest}abracadabra \NC \NR
+\NC alternate \NC \type {atest} \NC \addff{atest}abracadabra \NC \NR
+\NC multiple \NC \type {mtest} \NC \addff{mtest}abracadabra \NC \NR
+\NC ligature \NC \type {ltest} \NC \addff{ltest}abracadabra \NC \NR
+\NC kern \NC \type {ktest} \NC \addff{ktest}abracadabra \NC \NR
+\NC pair \NC \type {ptest} \NC \addff{ptest}abracadabra \NC \NR
+\NC chain sub \NC \type {ctest} \NC \addff{ctest}abracadabra \NC \NR
+\stoptabulate
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\stopsubsection
+
+\startsubsection[title=Contexts]
+
+A more complex substitution is the following:
+
+\startbuffer
+\startluacode
+ fonts.handlers.otf.addfeature {
+ name = "ytest",
+ type = "chainsubstitution",
+ lookups = {
+ {
+ type = "substitution",
+ data = {
+ ["b"] = "B",
+ ["c"] = "C",
+ },
+ },
+ },
+ data = {
+ rules = {
+ {
+ before = { { "a" } },
+ current = { { "b", "c" } },
+ lookups = { 1 },
+ },
+ },
+ },
+ }
+\stopluacode
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Here the dataset is a sequence of rules. There can be a \type {before}, \type
+{current} and \type {after} match. The replacements are specified with the \type
+{lookups} entry and the numbers are indices in the provided \type {lookups}
+table.
+
+\stopsubsection
+
+\startsubsection[title={Language dependencies}]
+
+When \OPENTYPE\ was not around we only had to deal with ligatures, smallcaps and
+oldstyle and of course kerns. Their number was so small that the term \quote
+{features} was not even used. In practice one just loaded a font that had
+oldstyle or smallcaps or none of that and was done. There were different fonts and
+sold separately.
+
+In \OPENTYPE\ we have more variation and although these fonts can be much more
+advanced the lack of standardization (for instance what gets initialized, or what
+shapes are in the default slots) can lead to messy setups. Some fonts bind
+features to scripts, some don't, which means that:
+
+\starttyping
+\definefontfeature[smallcaps][smcp=yes,script=dflt]
+\definefontfeature[smallcaps][smcp=yes,script=latn]
+\definefontfeature[smallcaps][smcp=yes,script=cyrl]
+\stoptyping
+
+are in fact different and you don't know in advance if you need to specify \type
+{dflt} or \type {latn}. In practice for a feature like smallcaps there is no
+difference between languages, but for ligatures there can be.
+
+When we extend an existing feature we can think of:
+
+\starttyping
+\definefontfeature[smallcaps][default][smcp=yes,script=auto]
+\definefontfeature[smallcaps][default][smcp=yes,script=*]
+\stoptyping
+
+but that can have side effects too (for instance disabling language specific
+features). The easiest way to explore this language dependency is to make
+a feature of our own.
+
+\startbuffer
+\startluacode
+fonts.handlers.otf.addfeature {
+ name = "simplify",
+ type = "multiple",
+ prepend = true,
+ features = {
+ ["*"] = {
+ ["deu"] = true
+ }
+ },
+ data = {
+ [utf.byte("ä")] = { "a", "e" },
+ [utf.byte("Ä")] = { "A", "E" },
+ [utf.byte("ü")] = { "u", "e" },
+ [utf.byte("Ü")] = { "U", "E" },
+ [utf.byte("ö")] = { "o", "e" },
+ [utf.byte("Ö")] = { "O", "E" },
+ [utf.byte("ß")] = { "s", "z" },
+ [utf.byte("ẞ")] = { "S", "Z" },
+ },
+}
+\stopluacode
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Here we implement a language specific feature that we use at the \TEX\ end:
+
+\startbuffer
+\definefontfeature
+ [simplify-de]
+ [simplify=yes,
+ language=deu]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+that we can use as:
+
+\startbuffer
+\definedfont[Serif*default,simplify-de]%
+äüöß
+{\de äüöß}
+{\nl äüöß}
+\stopbuffer
+
+\typebuffer
+
+and get: \start \maincolor \inlinebuffer \stop, but as you see, both German and
+Dutch get the same treatment, which might not be what you want, because in Dutch
+the diearesis has a different meaning.
+
+\startbuffer
+\definedfont[Serif*default]%
+ äüöß
+{\de\addff{simplify-de}äüöß}
+{\nl äüöß}
+\stopbuffer
+
+\typebuffer
+
+The above is restricts the usage so now we get: \start \maincolor \inlinebuffer
+\stop, which is more language bound. You don't need much imagination for
+extending this:
+
+\startbuffer
+\definefontfeature
+ [simplify]
+ [simplify=yes,
+ language=deu]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer
+\definedfont[Serif*default]%
+ äüöß
+{\de\addff{simplify}äüöß}
+{\nl\addff{simplify}äüöß}
+\stopbuffer
+
+So what do we expect with the next?
+
+\typebuffer
+
+We get: \start \maincolor \inlinebuffer \stop, and we see that the language
+setting is not taken into account! This is because the font already has been set
+up with a script and language combination. The solution is to temporary set the
+font related language explicitly:
+
+\definefontfeature
+ [simplify]
+ [simplify=yes]
+
+\startbuffer
+\definedfont[Serif*default]%
+ äüöß
+{\de\addfflanguage\addff{simplify}äüöß}
+{\nl\addfflanguage\addff{simplify}äüöß}
+\stopbuffer
+
+\typebuffer
+
+So we can automatically switch to language specific features if we want to:
+\start \maincolor \inlinebuffer \stop.
+
+Let's now move to another level of complexity: support for more than one language
+as in fact this example was made for Dutch in the first place, but the German
+outcome is a bit more visible.
+
+\startbuffer
+\startluacode
+fonts.handlers.otf.addfeature {
+ name = "simplify",
+ type = "multiple",
+ prepend = true,
+ -- prepend = "smcp",
+ dataset =
+ {
+ {
+ features = {
+ ["*"] = {
+ ["nld"] = true
+ }
+ },
+ data = {
+ -- [utf.byte("ä")] = { "a" },
+ -- [utf.byte("Ä")] = { "A" },
+ -- [utf.byte("ü")] = { "u" },
+ -- [utf.byte("Ü")] = { "U" },
+ -- [utf.byte("ö")] = { "o" },
+ -- [utf.byte("Ö")] = { "O" },
+ [utf.byte("ij")] = { "i", "j" },
+ [utf.byte("IJ")] = { "I", "J" },
+ [utf.byte("æ")] = { "a", "e" },
+ [utf.byte("Æ")] = { "A", "E" },
+ },
+ },
+ {
+ -- type = "multiple", -- local values possible
+ features = {
+ ["*"] = {
+ ["deu"] = true
+ }
+ },
+ data = {
+ [utf.byte("ä")] = { "a", "e" },
+ [utf.byte("Ä")] = { "A", "E" },
+ [utf.byte("ü")] = { "u", "e" },
+ [utf.byte("Ü")] = { "U", "E" },
+ [utf.byte("ö")] = { "o", "e" },
+ [utf.byte("Ö")] = { "O", "E" },
+ [utf.byte("ß")] = { "s", "z" },
+ [utf.byte("ẞ")] = { "S", "Z" },
+ },
+ }
+ }
+}
+\stopluacode
+\stopbuffer
+
+\typebuffer \getbuffer
+
+For this we use the following example:
+
+\startbuffer
+\definedfont[Serif*default,simplify]%
+ äüöß ijæ
+{\de\addfflanguage äüöß ijæ}
+{\nl\addfflanguage äüöß ijæ}
+\stopbuffer
+
+\typebuffer
+
+Because the Dutch is hard to check we use an \type {æ} replacement too and
+commented the similarities with German: \start \maincolor \inlinebuffer \stop.
+But still we're not done, say that we want smallcaps too:
+
+\startbuffer
+\definefontfeature[alwayssmcp][smcp=always]%
+\definedfont[Serif*default,simplify,alwayssmcp]%
+ äüöß ijæ
+{\de\addfflanguage äüöß ijæ}
+{\nl\addfflanguage äüöß ijæ}
+\stopbuffer
+
+\typebuffer
+
+This comes out as: \start \maincolor \inlinebuffer \stop.
+
+The reason for specifying \type{smcp} as \type {always} is that otherwise we
+get language specific smallcaps while often they are not bound to a language
+but to the defaults. The good news is that we can do this automatically:
+
+\startbuffer
+\setupfonts[language=auto]%
+\definefontfeature[alwayssmcp][smcp=always]%
+\definedfont[Serif*default,simplify,alwayssmcp]%
+ äüöß ijæ
+{\de äüöß ijæ}
+{\nl äüöß ijæ}
+\stopbuffer
+
+\typebuffer
+
+But be aware that this applies to all situations. Here we get: \start \maincolor
+\inlinebuffer \stop.
+
+\stopsubsection
+
+\startsubsection[title=Syntax summary]
+
+In the examples we have seen several ways to define features. One of the
+differences is that you either set a \type {data} field directly, or that you
+specify a dataset. The fields in a dataset entry overload the ones given at the
+top level or when not set the top level value will be taken. There is a bit
+of (downward compatibility) tolerance built in, but best not depend on that.
+
+\starttyping
+fonts.handlers.otf.addfeature {
+ name = "demo",
+ features = {
+ [<script>] = {
+ [<language>] = true
+ }
+ },
+ prepend = true | featurename | position,
+ dataset = {
+ {
+ type = "substitution",
+ data = {
+ [<char|code>] = <char|code>,
+ }
+ },
+ {
+ type = "alternate",
+ data = {
+ [<char|code>] = { <char|code>, <char|code>, ... },
+ }
+ },
+ {
+ type = "multiple",
+ data = {
+ [<char|code>] = { <char|code>, <char|code>, ... },
+ }
+ },
+ {
+ type = "ligature",
+ data = {
+ [<char|code>] = { <char|code>, <char|code>, ... },
+ }
+ },
+ {
+ type = "kern",
+ data = {
+ [<char|code>] = { [<char|code>] = <value> },
+ }
+ },
+ {
+ type = "pair",
+ data = {
+ [<char|code>] = { [<char|code>] = {
+ false | { <value>, <value>, <value>, <value> },
+ false | { <value>, <value>, <value>, <value> }
+ }
+ }
+ },
+ {
+ type = "chainsubstitution",
+ lookups = {
+ {
+ type = <typename>,
+ data = <mapping>,
+ },
+ },
+ data = {
+ rules = {
+ {
+ before = { { [<char|code>], ... } },
+ current = { { [<char|code>], ... } },
+ after = { { [<char|code>], ... } },
+ lookups = { <index>, ... },
+ },
+ },
+ },
+ },
+ },
+}
+\stoptyping
+
+\stopsubsection
+
+\startsubsection[title=Extra characters]
+
+\startbuffer[hyphenchars]
+\startluacode
+
+ local privateslots = fonts.constructors.privateslots
+
+ local function addspecialhyphen(tfmdata)
+
+ local exheight = tfmdata.parameters.xheight
+ local emwidth = tfmdata.parameters.quad
+ local width = emwidth / 4
+ local height = exheight / 10
+ local depth = exheight / 2
+ local offset = emwidth / 6
+
+ tfmdata.characters[privateslots.righthyphenchar] = {
+ -- no dimensions
+ commands = {
+
+ { "right", offset },
+
+ { "push" },
+ { "right", -width },
+ { "down", depth },
+ { "rule", height, width },
+ { "pop" },
+
+ { "right", -width/5 },
+ { "down", depth + height },
+ { "rule", 3*height, width/5 },
+
+
+ }
+ }
+
+ tfmdata.characters[privateslots.lefthyphenchar] = {
+ -- no dimensions
+ commands = {
+
+ { "right", -offset },
+
+ { "push" },
+ { "down", depth + height },
+ { "rule", 3*height, width/5 },
+ { "pop" },
+
+ { "down", depth },
+ { "rule", height, width },
+
+ }
+ }
+
+ end
+
+ fonts.constructors.features.otf.register {
+ name = "specialhyphen",
+ description = "special hyphen",
+ manipulators = {
+ base = addspecialhyphen,
+ node = addspecialhyphen,
+ }
+ }
+
+\stopluacode
+\stopbuffer
+
+You can add virtual characters to fonts. Here we give an example that is derived
+from an example posted on the mailing list. By default, when we hyphenated a word,
+we get this:
+
+\definefont[DemoFont] [Serif*default]
+
+\blank \start \DemoFont \maincolor \hsize 1mm averylongword \par \stop \blank
+
+The default character that is appended at the end and beginning of a line
+can be specified as follows:
+
+\startbuffer
+\setuplanguage
+ [en]
+ [righthyphenchar=45,
+ lefthyphenchar=45]
+\stopbuffer
+
+\typebuffer
+
+So now we get:
+
+\blank \start \getbuffer \DemoFont \maincolor \hsize 1mm averylongword \par \stop \blank
+
+Say that we want a different signal, for instance some rule. Here is how that can
+be done:
+
+\typebuffer[hyphenchars]
+
+\getbuffer[hyphenchars]
+
+Watch the way we use private slots. You can best use a unique glyph name as these
+numbers are shared between fonts. With:
+
+\startbuffer
+\definefontfeature
+ [default]
+ [default]
+ [specialhyphen=yes]
+\definefont
+ [DemoFont]
+ [Serif*default at 24pt]
+\setuplanguage
+ [en]
+ [righthyphenchar=\getprivateglyphslot{righthyphenchar},
+ lefthyphenchar=\getprivateglyphslot{lefthyphenchar}]
+\stopbuffer
+
+\typebuffer
+
+We get:
+
+\startlinecorrection[blank]
+\getbuffer
+\framed
+ [foregroundstyle=\DemoFont \setupinterlinespace,
+ offset=none,
+ frame=no,
+ width=1mm,
+ align={flushleft}]
+ {\hsize 1mm \maincolor averylongword\par}
+\stoplinecorrection
+
+You need to keep in mind that some of these settings are global but in practice that is
+not a real problem. Here is how you reset:
+
+\startbuffer
+\definefontfeature
+ [default]
+ [default]
+ [specialhyphen=no]
+\setuplanguage
+ [en]
+ [righthyphenchar=45,
+ lefthyphenchar=0]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\stopsubsection
+
+\startsubsection[title=Goodies]
+
+The examples above extend a font in the \TEX\ document (normally a style) but you
+can use a goodies file too, for instance \type {cambria.lfg}.
+
+\starttyping
+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] = { -- combining acute
+ [0x0301] = { -- aeligature
+ false,
+ { -500, 0, 0, 0 }
+ }
+ },
+ }
+ }
+ }
+}
+\stoptyping
+
+Here we use the feature name \type {kern} and therefore we don't have to define a
+specific (new) feature for it. Such a goodie is then used as follows:
+
+\starttyping
+\definefontsynonym
+ [Serif]
+ [cambria]
+ [features=default,
+ goodies=cambria]
+\stoptyping
+
+You can find such definitions in the \type {type-imp-*.mkiv} files.
+
+\stopsubsection
+
+\stopsection
+
+\startsection[title=Spacing]
+
+% By default the font loader deduces the spacing from the space character or
+% other font properties. You can influence this by the \type {space} feature.
+%
+% \starttyping
+% \definefontfeature
+% [korean]
+% [default]
+% [script=hang,
+% language=kor,
+% space=local] % or locl
+% \stoptyping
+%
+% Instead of the usual \type {yes} (which means: use character 32), \type {local}
+% or \type {locl} (which means: use a replacement provided by the \type{locl}
+% feature), you can also pass a character, so
+%
+% \starttyping
+% \definefontfeature
+% [spacy]
+% [default]
+% [space=A]
+% \stoptyping
+%
+% is valid.
+
+As you probably know, \TEX\ has no space character. When the input is read,
+characters tagged as space are intercepted and become glue. Compare this:
+
+\startlinecorrection[blank]
+ \startcombination
+ {\framed
+ [width=3cm,height=15mm,align={middle,lohi},foregroundcolor=maincolor]
+ {\dorecurse{5}{test }}}
+ {\type{text test...}}
+ {\framed
+ [width=3cm,height=15mm,align={middle,lohi},foregroundcolor=maincolor]
+ {\dorecurse{5}{test\char32\relax}}}
+ {\type{text\char32test...}}
+ \stopcombination
+\stoplinecorrection
+
+Most fonts have a space character and you can actually use it and indeed a space
+character will be injected but as it is not glue, the line break algorithm will
+not see it as space.
+
+Al the magic done with space characters other than the native space character
+(decimal 32) are at some point translated into glue.
+
+\starttabulate[||T|p|]
+\NC \bf command \NC \UNICODE \NC width \NC \NR
+
+\NC \type{\nobreakspace}
+ \type{\nbsp} \NC U+00A0 \NC space \NC \NR
+\NC \type{\ideographicspace} \NC U+2000 \NC quad/2 \NC \NR
+\NC \type{\ideographichalffillspace} \NC U+2001 \NC quad \NC \NR
+\NC \type{\twoperemspace}
+ \type{\enspace} \NC U+2002 \NC quad/2 \NC \NR
+\NC \type{\emspace}
+ \type{\quad} \NC U+2003 \NC quad \NC \NR
+\NC \type{\threeperemspace} \NC U+2004 \NC quad/3 \NC \NR
+\NC \type{\fourperemspace} \NC U+2005 \NC quad/4 \NC \NR
+\NC \type{\fiveperemspace} \NC \NC quad/5 \NC \NR
+\NC \type{\sixperemspace} \NC U+2006 \NC quad/6 \NC \NR
+\NC \type{\figurespace} \NC U+2007 \NC width of zero \NC \NR
+\NC \type{\punctuationspace} \NC U+2008 \NC width of period \NC \NR
+\NC \type{\breakablethinspace} \NC U+2009 \NC quad/8 \NC \NR
+\NC \type{\hairspace} \NC U+200A \NC quad/8 \NC \NR
+\NC \type{\zerowidthspace} \NC U+200B \NC 0 \NC \NR
+\NC \type{\zerowidthnonjoiner}
+ \type{\zwnj} \NC U+200C \NC 0 \NC \NR
+\NC \type{\zerowidthjoiner}
+ \type{\zwj} \NC U+200D \NC 0 \NC \NR
+\NC \type{\narrownobreakspace} \NC U+202F \NC quad/8 \NC \NR
+\NC \type{\zerowidthnobreakspace} \NC U+FEFF \NC \NC \NR
+\NC \type{\optionalspace} \NC \NC space when not followed by punctuation \NC \NR
+\stoptabulate
+
+% "205F % space/8 (math)
+
+The last one is not un \UNICODE\ and the fifths of an emspace is not in \UNICODE\
+either. This emspace (or quad in \TEX\ speak) is a font property. The width of
+the space used by \CONTEXT\ is dreived form this value. In case of a monospace
+fonts, the following logic is applied:
+
+\startitemize
+ \startitem
+ When there is a space character, the width of that character is used.
+ \stopitem
+ \startitem
+ Otherwise, when there is an emdash present, the width if that character
+ is used.
+ \stopitem
+ \startitem
+ Otherwise, when there is an \type {charwidth} property available (the
+ average width), that valua is used.
+ \stopitem
+\stopitemize
+
+When a proportional font is used, we do as follows:
+
+\startitemize
+ \startitem
+ When there is a space character, the width of that character is used.
+ \stopitem
+ \startitem
+ Otherwise, when there is an emdash present, the width of that character
+ divided by two is used.
+ \stopitem
+ \startitem
+ Otherwise, when there is an \type {charwidth} property available (the
+ average width), that value is used.
+ \stopitem
+\stopitemize
+
+In both cases, when no value is set we use the units of the font (often 1000 or
+2048). In \TEX\ a space glue also has stretch and shrink. Here we follow the
+traditional \TEX\ logic:
+
+\startitemize
+ \startitem
+ The stretch is set to half the width of a space but to zero with a mono
+ spaced font.
+ \stopitem
+ \startitem
+ The shrink is set to one third of the width of a space but to zero with a
+ mono spaced font.
+ \stopitem
+\stopitemize
+
+The xheight is set to the values specified by the font and when this is unset the
+height of the character \type {x} will be used but when this character is not in
+the font, we use two fifths of the font's units (normally the same as the
+emwidth). The italic angle is also taken from the font (and is of course zero for
+a not italic font). Most fonts have these properties set so we seldom have to
+fall back to a guess.
+
+\stopsection
+
+\startsection[title=Ligatures]
+
+Not all fonts provide ligature control (normally related to languages), so here is a
+trick.
+
+\starttyping
+\blockligatures[fi,ff]
+\blockligatures[fl]
+
+\definefontfeature
+ [default]
+ [default]
+ [blockligatures=yes]
+
+\setupbodyfont[pagella]
+
+...
+\stoptyping
+
+This way it works globally. Of course you can also bind it to a font instance:
+
+\startbuffer
+\blockligatures[fi,fl]
+
+\definefontfeature
+ [default:blockligs]
+ [default]
+ [blockligatures=yes]
+
+\definefont[DemoBlockY][Serif*default:blockligs at 20pt]
+\definefont[DemoBlockN][Serif*default at 20pt]
+
+Here we have no ligatures: {\DemoBlockY fi ff fl}, while here we get
+them: {\DemoBlockN fi ff fl}. Of course it also depends on the font.
+\stopbuffer
+
+\typebuffer \start \showfontkerns \getbuffer \par \stop
+
+There is one limitation: you need to specify the blocked ligatures before a font
+gets defined and because we share resources it even has to happen before the
+first font gets loaded. So, the \type {\blockligatures} commands go before
+setting up the body font. This is no real problem because it's a hack anyway.
+
+\stopsection
+
+\startsection[title=Collections]
+
+ {\em Todo.}
+
+\stopsection
+
+\stopchapter
diff --git a/doc/context/sources/general/fonts/fonts/fonts-features.tex b/doc/context/sources/general/fonts/fonts/fonts-features.tex
new file mode 100644
index 000000000..f6a12c30d
--- /dev/null
+++ b/doc/context/sources/general/fonts/fonts/fonts-features.tex
@@ -0,0 +1,2631 @@
+language=uk
+
+\startcomponent fonts-features
+
+\environment fonts-environment
+
+% windows: seguiemj.ttf (windows 10)
+% public : emojionecolor-svginot.ttf (https://github.com/eosrei/emojione-color-font)
+
+\startMPextensions
+ vardef MyRectangle(expr n, w, h, x, y, c) =
+ image (
+ fill unitsquare xyscaled (w,h) shifted (x,y) withcolor c ;
+ draw textext("\tttf " & decimal n) xsized (1/2) shifted (w/2,h/2) shifted (x,y) withcolor white ;
+ )
+ enddef ;
+ vardef MyDot(expr x, y) =
+ image (
+ draw (x,y) withpen pencircle scaled (2/3) withcolor white ;
+ draw (x,y) withpen pencircle scaled (1/2) withcolor black ;
+ )
+ enddef ;
+\stopMPextensions
+
+\startchapter[title=Features][color=darkmagenta]
+
+\startsection[title=Introduction]
+
+If you look into fonts, it is hard not to bump into kerns (spacing between
+characters) and ligatures (combining multiple shapes into one) and apart from
+monospaced fonts most \TYPEONE\ fonts have them. In the \OPENTYPE\ universe we
+call these properties features and in such a font there can be many such
+features.
+
+For those who grew up with \TEX\ or still remember the times of eight bit fonts,
+it is no secret that \TEX\ macro packages did some magic to get most out of a
+font: replacing missing glyphs, fixing metrics, using commands to access shapes
+that had a weird code point, to mention a few. As there is absolutely no
+guarantee that an \OPENTYPE\ font does better, there is a good reason to continue
+messing around with fonts. After all, it's what \TEX\ users seem to like:
+control.
+
+So, when we started writing support for \OPENTYPE\ quite soon a mechanism has
+been created that permits adding our own features to the repertoire that comes
+with a font. Because \OPENTYPE\ features demand a configuration and control
+mechanism, it made sense to generalize that and provide a single interface.
+
+This means that when we talk about font features, we don't limit ourselves to
+those provided by the font, but also those provided by \CONTEXT. As with font
+features, they are enabled per font.
+
+Some of the extra features are sort of generic, others are very font specific and
+their properties are somewhat bound to a font. Such features are defined in a
+font goodie files. Consider these goodies a font extension mechanism.
+
+Some features need information that only the engine can provide. This is why we
+have analyzers. Some are generic, others are bound to scripts. They come in
+action before features are applied. Rather special is applying features in
+combination with paragraph building. This is something very specific to \CONTEXT\
+but it depends on properties of the font. It falls into the category \quote
+{optimizing}.
+
+It is clear that when we talk of features many aspects of a font play a role. In
+this chapter we will discuss all the mentioned aspects. There is quite a bit of
+\LUA\ code shown in this chapter, but don't worry, users will seldom need to
+tweak fonts this way. On the other hand it's good to see what is possible.
+
+\stopsection
+
+\startsection[title=Regulars]
+
+\startsubsection[title=Introduction]
+
+The \OPENTYPE\ specification, which can be found on the \MICROSOFT\ website
+is no easy reading. Some of the concepts are easy to understand, like relative
+positioning (that we call kerning in \TEX) or ligature substitution (as we
+have ligatures in \TEX\ too). It makes no sense to discuss the bitwise composition
+of an \OPENTYPE\ or \TRUETYPE\ file here. First of all, all we get to see is
+a \LUA\ table, and in \CONTEXT\ even that one gets sanitized and optimized
+into a more useable table. However, as the data that comes with a font is
+a good indication of what a font is capable of, we will discuss some of it in
+an appendix. In this section we will discuss the basic principles and categories
+of features.
+
+\stopsubsection
+
+\startsubsection[title=Feature sets]
+
+Because in the next examples we will demonstrate features, we need to know how
+we can tell \CONTEXT\ what features to use. Although you can add explicit
+feature definitions to a font specification, I strongly advice you not to do this
+but use the more abstract mechanism of feature sets. These are defined as follows:
+
+\starttyping
+\definefontfeature
+ [MyFeatureSet]
+ [alpha=yes,
+ beta=no,
+ gamma=123]
+\stoptyping
+
+Such a set is bound to a font with the \type {*} specifier, as in:
+
+\starttyping
+\definefont
+ [MyFontInstance]
+ [MyNiceFont*MyFeatureSet at 12pt]
+\stoptyping
+
+In most cases the already defined \type {default} feature set will suffice. It often
+makes sense to use that one as base for new definitions:
+
+\starttyping
+\definefontfeature
+ [MyFeatureSet]
+ [default]
+ [alpha=yes,
+ beta=no,
+ gamma=123]
+\stoptyping
+
+The second argument can be a list, as in:
+
+\starttyping
+\definefontfeature
+ [MyFeatureSet]
+ [MyFirstSet,MySecondSet]
+ [alpha=yes,
+ beta=no,
+ gamma=123]
+\stoptyping
+
+Of course you need to know what features a font support, and one way to find
+out is:
+
+\starttyping
+mtxrun --script font --list --info --pattern=pagella
+\stoptyping
+
+Don't be too surprised if different fonts show different features and even similar
+features can be implemented differently. Sometimes you really need to know the font,
+but fortunately many fonts come with examples.
+
+There are many features and there values are kept with the font when it gets
+defined. This means that when you change a featureset, it will not affect already
+defined fonts. Because fonts are often defined on demand, you need to be aware of
+the fact that a redefinition of a featureset can have consequences for already
+defined fonts. For instance, a bodyfont switch only sets up the fonts and delays
+defining them.
+
+Although features are a sort of abstractions it can be interesting to see what features
+and values are actually used:
+
+\starttyping
+\usemodule[fonts-features] \showusedfeatures
+\stoptyping
+
+You will notice that we have more features than \OPENTYPE\ fonts can offer. This
+is because in \CONTEXT\ features is a more general concept.
+
+\showusedfeatures
+
+\stopsubsection
+
+\startsubsection[title=Main categories]
+
+There are two (but potentially more) main groups of features: those that deal
+with substitution, and those that lead to positioning. It is not really needed
+to know the gory details, but it helps to know at least a bit about them as
+it can help to track down issues with fonts.
+
+There are several substitutions possible:
+
+\startitemize[packed]
+\startitem a single substitution replaces one glyph by another \stopitem
+\startitem a multiple substitution replaces one glyph by one or more \stopitem
+\startitem a ligature substitution replaces multiple glyphs by one glyph \stopitem
+\startitem an alternate substitution replaces one glyph by one out of a set \stopitem
+\stopitemize
+
+Like it or not, but these categories are not always used as intended: they just
+are a way of replacing one or more glyphs by one or more other glyphs. This means
+that when for instance \type {ij} gets replaced by one glyph (given that the font
+supports it) a ligature substitution is used, even when in fact we have to do
+with a diftong that can be represented by one character.
+
+No matter what features you will use, keep in mind that they are nothing more
+than a combination of substitutions and positioning directives. So, the de facto
+standard ligature building feature \type {liga} indeed uses a ligature
+substitution, but other features with names that resemble no ligatures might use
+this substitution as well.
+
+An example of a single substitution is an oldstyle (\type {onum}) although it can
+as well be implemented as a choice out of alternate glyphs. Another example is
+smallcaps (\type {smcp}). Nowdays these are more or less standard features for a
+grown up font, while in the past they came as separate fonts. So, instead of loading
+an extra font, one sticks to one and selects the feature that does the
+substitution.
+
+A second category concerns relative positioning. Again we have several variants:
+
+\startitemize[packed]
+\startitem a single positioning moves a glyph over one of two axis and can change the width and|/|or height \stopitem
+\startitem a pair positioning also moved glyphs but concerns two adjacent glyphs \stopitem
+\startitem a cursive positioning operates on a range of glyphs and is used to visually connect them \stopitem
+\stopitemize
+
+In addition there are three ways to anchor marks onto glyphs:
+
+\startitemize[packed]
+\startitem a mark can be anchored on a base glyph \stopitem
+\startitem a mark can be anchored on a specific (visual) component of a ligature \stopitem
+\startitem a mark can be anchored on another mark \stopitem
+\stopitemize
+
+In base mode the single, alternate and ligature substitutions can rather easily
+be mapped onto the traditional \TEX\ font handling mechanism and this is what
+happens in base mode. A single substitution is just another instance of a glyph
+so there we just replace the original index into the glyph table by another one.
+In the case of an alternate we change the default index into one of several
+possible replacements in the alternate set. Ligatures can be mapped onto \TEX s
+ligature mechanism. The single positioning maps nicely on \TEX s kerning
+mechanism and pairwise positioning is not applicable in base mode. In node mode
+we don't do any remapping at loading time but delegate that to \LUA\ when
+processing the node lists.
+
+Marks are special in the sense that they normally only occur in scripts that also
+use substitution and positioning which in turn means that some more housekeeping
+is involved. After all, we need to keep track to what a mark applies. Of course a
+font can provide regular latin accents as marks but that is ill practice because
+cut and paste might not work out as expected. A proper font will support composed
+characters and provide glyphs that have the accents built in. Marks are not dealt
+with in base mode.
+
+Talking of complex scripts, the above set of operations is far from enough. Take
+for instance Arabic, where a sequence of 5~characters with 3~marks can easily
+become two glyphs glued together with two marks only. In the process we can have
+single substitutions, ligatures being built, marks being anchored and glyphs
+being cursively positioned. But, in order to do this well, some contextual
+analysis has to be done as well. Again we have several variants of this:
+
+\startitemize[packed]
+\startitem with contextual substitution a replacement takes place depending on a matching sequence of glyphs,
+optionally preceded or followed by matches \stopitem
+\startitem with contextual positioning shifting and anchoring happens based on a matching sequence of glyphs,
+optionally preceded or followed by matches \stopitem
+\startitem multiple contextual substitutions or positionings can be chained together \stopitem
+\startitem this can also happen in the reverse order (for right|-|to|-|left scripts) \stopitem
+\stopitemize
+
+In practice there is no fundamental difference between these and we can collapse
+them all in a sequence of lookups resulting in a sequence of whatever other
+manipulation is wanted.
+
+Given this, what is a feature? It's mostly a sequence of actions expressed in the
+above. And although there is a whole repertoire of semi|-|standardized features
+like \type {liga} and \type {onum}, there is no real hard coded support for them
+in \CONTEXT. Instead we have a generic feature processor that deals with all of
+them. A feature, say \type {abcd}, has a definition that boils down to a sequence
+of lookups. A lookup is just a name that is associated to one of the mentioned
+actions. So, \type {abcd} can do a decomposition (multiple substitution), then a
+replacement (single substitution) based on neighbouring glyphs, then do some
+ligature building (ligature substitution) and finally position the resulting
+glyphs relative to each other (like cursive positioning and anchoring marks).
+
+Imagine that we start out with 5 characters in the input. Instead of real glyphs
+we represent them by rectangles. The third one is a mark.
+
+\startlinecorrection
+\startMPcode
+ draw MyRectangle(1,2,6, 0,0,.5red ) ;
+ draw MyRectangle(2,2,4, 3,0,.5green ) ; draw MyDot(4,4.25) ;
+ draw MyRectangle(3,2,1, 6,5,.5blue ) ; draw MyDot(7,4.75) ;
+ draw MyRectangle(4,2,5, 9,0,.5yellow ) ;
+ draw MyRectangle(5,2,5,12,0,.5magenta) ;
+ currentpicture := currentpicture ysized(4cm) ;
+\stopMPcode
+\stoplinecorrection
+
+In the next variant we see that four and five have been replaced by
+number six. This is a ligature replacement.
+
+\startlinecorrection
+\startMPcode
+ draw MyRectangle(1,2,6,0,0,.5red ) ;
+ draw MyRectangle(2,2,4,3,0,.5green) ; draw MyDot(4,4.25) ;
+ draw MyRectangle(3,2,1,6,5,.5blue ) ; draw MyDot(7,4.75) ;
+ draw MyRectangle(6,3,5,9,0,.5cyan ) ;
+ currentpicture := currentpicture ysized(4cm) ;
+\stopMPcode
+\stoplinecorrection
+
+The mark is an independent entity. Sometimes it has a width, sometimes it hasn't.
+In both cases we can position it. Here we move the shape left and down. There are
+two ways to do this: simple pairwise kerning but better is to use anchors. Here
+we have one anchor per shape but there can be many.
+
+\startlinecorrection
+\startMPcode
+ draw MyRectangle(1,2,6,0,0 ,.5red ) ;
+ draw MyRectangle(2,2,4,3,0 ,.5green) ;
+ draw MyRectangle(3,2,1,3,4.5,.5blue ) ; draw MyDot(4,4.25) ;
+ draw MyRectangle(6,3,5,6,0 ,.5cyan ) ;
+ currentpicture := currentpicture ysized(4cm) ;
+\stopMPcode
+\stoplinecorrection
+
+Next we apply some kerning. Of course the anchored marks need to move as well.
+
+\startlinecorrection
+\startMPcode
+ draw MyRectangle(1,2,6,0, 0 ,.5red ) ;
+ draw MyRectangle(2,2,4,2.5,0 ,.5green) ;
+ draw MyRectangle(3,2,1,2.5,4.5,.5blue ) ; draw MyDot(3.5,4.25) ;
+ draw MyRectangle(6,3,5,5, 0 ,.5cyan ) ;
+ currentpicture := currentpicture ysized(4cm) ;
+\stopMPcode
+\stoplinecorrection
+
+Alternatively we can connect the shapes in a cursive way. The name cursive is
+somewhat misleading as it just boils down to shifting. The cursive indicates that
+the shifts accumulate within a word.
+
+\startlinecorrection
+\startMPcode
+ draw MyRectangle(1,2,6,0,0 ,.5red ) ;
+ draw MyRectangle(2,2,4,2,0.5,.5green) ;
+ draw MyRectangle(3,2,1,2,5 ,.5blue ) ; draw MyDot(3,4.75) ;
+ draw MyRectangle(6,3,5,4,1 ,.5cyan ) ;
+ currentpicture := currentpicture ysized(4cm) ;
+\stopMPcode
+\stoplinecorrection
+
+\stopsubsection
+
+\startsubsection[title={Single substitution}]
+
+Single substitutions are probably the most used ones. For instance, when you
+ask for small caps, a lot of glyphs get replaced. When using oldstyle numerals
+only digits get replaced but even then each glyph has to be checked. This can be
+demonstrated with the Latin Modern fonts.
+
+\startlinecorrection
+\scale
+ [height=1cm]
+ {\strut
+ {\definedfont[lmroman10-bold*default]\$123.45}%
+ \quad
+ {\definedfont[lmroman10-bold*oldstyle]\$123.45}}
+\stoplinecorrection
+
+As you can see here, Latin Modern has an oldstyle dollar sign. If you don't like
+that one, you're in troubles as it comes with the rest of the oldstyles. The only
+way out is to apply the oldstyle numerals to digits only which involves more tagging
+than you might be willing to add. So, whenever you choose a substitution, be aware
+that you have not that much control over what gets substituted: it's the font that
+drives it. Here are some examples:
+
+\starttyping
+\definefontfeature[capsandold][smallcaps,oldstyle]
+
+\showotfcomposition{dejavu-serif*capsandold at 24pt}{}{It's 2013!}
+\showotfcomposition{cambria*capsandold at 24pt}{}{It's 2013!}
+\showotfcomposition{lmroman10regular*capsandold at 24pt}{}{It's 2013!}
+\showotfcomposition{texgyrepagellaregular*capsandold at 24pt}{}{It's 2013!}
+\stoptyping
+
+\definefontfeature[capsandold][smallcaps,oldstyle]
+
+\blank \showotfcomposition{dejavu-serif*capsandold at 24pt}{}{\disabletrackers[otf.analyzing]\color[maincolor]{It's 2013!}} \blank
+\blank \showotfcomposition{cambria*capsandold at 24pt}{}{\disabletrackers[otf.analyzing]\color[maincolor]{It's 2013!}} \blank
+\blank \showotfcomposition{lmroman10regular*capsandold at 24pt}{}{\disabletrackers[otf.analyzing]\color[maincolor]{It's 2013!}} \blank
+\blank \showotfcomposition{texgyrepagellaregular*capsandold at 24pt}{}{\disabletrackers[otf.analyzing]\color[maincolor]{It's 2013!}} \blank
+
+\stopsubsection
+
+\startsubsection[title={Multiple substitution}]
+
+In a multiple substitution a sequence of characters (glyphs) gets replaced by
+another sequence. In fact, you might wonder why one||to||one, multiple||to||one
+and multiple||to||multiple are not all generalized into this variant. Efficiency
+is probably the main reason. \footnote {Isn't it strange that complex mechanisms
+are designed to save a few bytes while at the same time we produce ridiculous
+large pictures with cameras.} For instance the many||to||one is often used for
+ligatures (\type {liga}) and as a consequence \type {liga} is often misused also
+for non||ligatures.
+
+One usage of multiple replacements is to avoid and or undo other replacements. In
+the next example we see a language dependent \type {fi} ligature. Take the dutch
+\type {ij} and \type {ie} diftongs. Here we need to prevent the \type {i}
+becoming combined with the \type {f} as it would look weird. Among the solutions
+for this are: context dependent ligatures (which involves a lot of rules), or
+multiple to multiple replacements (looking at the \type {fij} sequence).
+
+\startbuffer[definitions]
+\definefontfeature[default-fijn-en][default][language=eng,script=latn]
+\definefontfeature[default-fijn-nl][default][language=nld,script=latn]
+\stopbuffer
+
+\getbuffer[definitions] \typebuffer[definitions]
+
+\starttyping
+\definedfont[lmroman10-regular*default-fijn-en]\en effe fijn fietsen
+\definedfont[lmroman10-regular*default-fijn-nl]\nl effe fijn fietsen
+\stoptyping
+
+This gives:
+
+\startlinecorrection[blank]
+\scale [width=\textwidth] \bgroup
+ \framed [offset=overlay,frame=off,foregroundcolor=maincolor,align=normal,strut=no] \bgroup
+ \definedfont[lmroman10-regular*default-fijn-en]\en effe fijn fietsen\vskip-1ex
+ \definedfont[lmroman10-regular*default-fijn-nl]\nl effe fijn fietsen\par
+ \egroup
+\egroup
+\stoplinecorrection
+
+Of course from this result one cannot see what (combination of) substitution(s)
+was used, but it's a nice exercise to work out a solution.
+
+Multiple substitutions are mostly used for scripts more complex than latin or
+special fonts like Zapfino where advanced contextual analysis happens.
+
+\stopsubsection
+
+\startsubsection[title={Alternate substitution}]
+
+Alternates are simple one||to||one substitutions. Popular examples are small
+capitials and oldstyle numerals.
+
+A nice application of alternates is the punk font. This font is a Knuth original.
+As part of experimenting with the \METAPOST\ library in the early days of
+\LUATEX\ and \MKIV, runtime randomization was implemented. However, that variant
+used virtual fonts and was somewhat resource hungry. So, in a later stage Khaled
+Hosny made an \OPENTYPE\ version using \METAPOST\ output. Randomization is
+implemented through the \type {rand} feature.
+
+In \MKIV\ the \type {rand} feature is not really special and behaves just like
+any other (stylistic) alternate. The only difference is that for this feature a
+value of \type {yes} equals \type {random}. This also means that any feature that
+uses alternates use them randomly.
+
+\startbuffer
+\definefontfeature[punknova-first] [mode=node,kern=yes,rand=first]
+\definefontfeature[punknova-2] [mode=node,kern=yes,rand=2]
+\definefontfeature[punknova-yes] [mode=node,kern=yes,rand=yes]
+\definefontfeature[punknova-random][mode=node,kern=yes,rand=random]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+We use this is:
+
+\startbuffer[sample]
+The original punk font is designed by Don Knuth: xxxxxxxxxxxx
+\stopbuffer
+
+\startbuffer
+\definedfont[punknova-regular at 15pt] \getbuffer[sample]
+\definedfont[punknova-regular*punknova-first at 15pt] \getbuffer[sample]
+\definedfont[punknova-regular*punknova-2 at 15pt] \getbuffer[sample]
+\definedfont[punknova-regular*punknova-yes at 15pt] \getbuffer[sample]
+\definedfont[punknova-regular*punknova-random at 15pt] \getbuffer[sample]
+\stopbuffer
+
+\typebuffer[sample]
+
+\typebuffer
+
+In order to illustrate the variants we show a sequence of \type {x}'s. There are
+upto ten different variants per characters.
+
+\startlines[color=maincolor] \getbuffer \stoplines
+
+There is one pitfall with random alternates: if each run leads to a different
+outcome, we can end up in oscillation: different shapes give different paragraphs
+and we can get more pages or cross references etc.\ that can end up differently
+so this is why \CONTEXT\ always uses the same random seed (which gets reset when
+you purge the auxiliary files.
+
+\stopsubsection
+
+\startsubsection[title={Ligature substitution}]
+
+A ligature is traditionally a combination of several characters into one. Popular
+ligatures are \quote {fi}, \quote {fl}, \quote {ffi} and , \quote {ffl}.
+Occasionally we see \quote {\ae}, \quote {\oe} and some more. Often ligatures are
+language dependant. For instance in languages like Dutch and German there can be
+compound words where one part ends with an \type {f} and the next part starts with
+an \type {f} and that looks bad or at least not intuitive. To some extent one
+can wonder if this tradition of ligatures is a good one. It definitely made
+sense ages ago, but I wouldn't be surprised if they are often added to fonts
+because the encoding vectors have them. After all, nothing prevents to go ahead
+and come up with way more ligatures.
+
+There can be many ligature features in a font. Although we support arbitrary
+features, that is: those not registered as being official one way or the other,
+the following are known by description:
+
+\startluacode
+context.starttabulate { "|lTCT{maincolor}|l|" }
+for k, v in table.sortedhash(fonts.handlers.otf.tables.features) do
+ if string.find(v,"ligature") then
+ context.NC()
+ context(k)
+ context.NC()
+ context(v)
+ context.NR()
+ end
+end
+context.stoptabulate()
+\stopluacode
+
+The \type {default} feature set has type {liga} as wel as the \TEX\ specific \type {tlig}
+that replaces successive hyphen signs into en- and emdashes. The \type {arabic} feature
+set also has \type {rlig} enabled.
+
+Now, there is one thing you should realize when we discuss specific features and
+the underlaying mechanisms: there is no real relationship between the features's
+name and the mechanisms used: any feature can use any underlying mechanism or
+combination. This is why deep down we see that what is internally called ligature
+gets used for any purpose where multiple||to||one replacements happen, and why the
+\type {liga} feature can use single substitutions or alternates to swap in
+another rendering so that the dot of the \type {i} stays free of the preceding
+\type {f}. And for some fonts relative positioning can be used to achieve a
+ligature effect.
+
+The next examples demonstrate how the \type {liga} feature deals with \type {ffi}.
+Possible solutions are: replace all three at once, replace the first two first and
+in a next step, combine a ligature and following character, replace one or more
+components by variants that have no interference with the dot of the~\quote{i}.
+
+\starttyping
+\showotfcomposition{dejavu-serif*default at 48pt}{}{ffi}
+\showotfcomposition{cambria*default at 48pt}{}{ffi}
+\showotfcomposition{lmroman10regular*default at 48pt}{}{ffi}
+\showotfcomposition{texgyrepagellaregular*default at 48pt}{}{ffi}
+\stoptyping
+
+\blank \showotfcomposition{dejavu-serif*default at 48pt}{}{\disabletrackers[otf.analyzing]\color[maincolor]{ffi}} \blank
+\blank \showotfcomposition{cambria*default at 48pt}{}{\disabletrackers[otf.analyzing]\color[maincolor]{ffi}} \blank
+\blank \showotfcomposition{lmroman10regular*default at 48pt}{}{\disabletrackers[otf.analyzing]\color[maincolor]{ffi}} \blank
+\blank \showotfcomposition{texgyrepagellaregular*default at 48pt}{}{\disabletrackers[otf.analyzing]\color[maincolor]{ffi}} \blank
+
+\stopsubsection
+
+\startsubsection[title={Single positioning}]
+
+Single positioning is also known as kerning, moving characters closer together so
+that we get a more uniformly spaced sequence of glyphs. It is a mistake to think
+that kerning is always needed! There are fonts that have hardly any kerns or no
+kerns at all and still look good.
+
+\start
+ \showfontkerns \blank
+ \definedfont[dejavu-serif*default at 8pt]Dejavu Serif: \input tufte (E.R. Tufte)\blank
+ \definedfont[cambria*default at 9pt]Cambria: \input tufte (E.R. Tufte)\blank
+ \definedfont[lmroman10regular*default at 10pt]Latin Roman Regular: \input tufte (E.R. Tufte)\blank
+ \definedfont[lucidabrightot*default at 8pt]Lucida Bright: \input tufte (E.R. Tufte)\blank
+ \definedfont[texgyrepagellaregular*default at 9pt]Pagella Regular: \input tufte (E.R. Tufte)\blank
+\stop
+
+The next couple of examples show the action for a few words:
+
+\blank \showotfcomposition{dejavu-serif*default at 24pt}{}{\disabletrackers[otf.analyzing]\color[maincolor]{We thrive}} \blank
+\blank \showotfcomposition{cambria*default at 24pt}{}{\disabletrackers[otf.analyzing]\color[maincolor]{We thrive}} \blank
+\blank \showotfcomposition{lmroman10regular*default at 24pt}{}{\disabletrackers[otf.analyzing]\color[maincolor]{We thrive}} \blank
+\blank \showotfcomposition{lucidabrightot*default at 24pt}{}{\disabletrackers[otf.analyzing]\color[maincolor]{We thrive}} \blank
+\blank \showotfcomposition{texgyrepagellaregular*default at 24pt}{}{\disabletrackers[otf.analyzing]\color[maincolor]{We thrive}} \blank
+
+\stopsubsection
+
+\startsubsection[title={Pairwise positioning}]
+
+This variant of positioning involved the first, second or both glyphs of a glyph
+pair. The specification can influence the horizontal and vertical positions we
+well as the widths of the positioned glyphs.
+
+\startnotabene
+ We need an example here.
+\stopnotabene
+
+\stopsubsection
+
+\startsubsection[title={Mark positioning}]
+
+Marks are (often) small symbols that represent accents (in latin) or vowels (in
+arabic) that get attached to base glyphs. In the input stream they come after the
+character that they apply to. Many fonts come with precomposed latin characters
+which means that an \type {à} in the input is mapped directly onto its
+corresponding shape. When the input contains an \type {a} followed by a \type{̀ }
+input normalization will normally turn this into an \type {à}. But, when this
+doesn't happen, the font machinery has to make sure that the mark gets positioned
+right onto the base character. In traditional \TYPEONE\ fonts that more or less
+happened automatically by overlaying the shapes. In \OPENTYPE\ (single)
+positioning is used to place the mark right.
+
+\startnarrowtyping
+\showotfcomposition{dejavu-serif*default at 24pt}{}{à a\utfchar{"0300} à}
+\showotfcomposition{cambria*default at 24pt}{}{à a\utfchar{"0300} à}
+\showotfcomposition{lmroman10regular*default at 24pt}{}{à a\utfchar{"0300} à}
+\showotfcomposition{lucidabrightot*default at 24pt}{}{à a\utfchar{"0300} à}
+\showotfcomposition{texgyrepagellaregular*default at 24pt}{}{à a\utfchar{"0300} à}
+\stopnarrowtyping
+
+Of course a font can contain logic that replaces a sequence of base and mark into
+precomposed characters with the right \UNICODE\ entry.
+
+\blank \showotfcomposition{dejavu-serif*default at 24pt}{}{\disabletrackers[otf.analyzing]\color[maincolor]{à a\utfchar{"0300} à}} \blank
+\blank \showotfcomposition{cambria*default at 24pt}{}{\disabletrackers[otf.analyzing]\color[maincolor]{à a\utfchar{"0300} à}} \blank
+\blank \showotfcomposition{lmroman10regular*default at 24pt}{}{\disabletrackers[otf.analyzing]\color[maincolor]{à a\utfchar{"0300} à}} \blank
+\blank \showotfcomposition{lucidabrightot*default at 24pt}{}{\disabletrackers[otf.analyzing]\color[maincolor]{à a\utfchar{"0300} à}} \blank
+\blank \showotfcomposition{texgyrepagellaregular*default at 24pt}{}{\disabletrackers[otf.analyzing]\color[maincolor]{à a\utfchar{"0300} à}} \blank
+
+You can imagine that when marks are bound to characters that have become
+ligatures the anchoring is more complex as the font machinery has to keep track
+of onto which component the mark goes. For this purpose marks as well as base
+characters and base ligatures have anchors and feature lookups can explicitly
+refer to them.
+
+\stopsubsection
+
+\startsubsection[title={Contextual analysis}]
+
+What actually happens when turning a list of characters into a list of glyphs can
+range from real simple to pretty complex. For instance the \type {smcp} feature
+only has to run over the list and relate characters to a smallcaps shape. A
+slightly more complex feature might also demand some positioning. One step further
+is the use of contextual analysis, i.e. looking at previous, current and following
+characters (or glyphs). Because features can range from simple to complex the actual
+processing is not per feature! A font comes with a sequence of so called lookups that
+relate to a feature, script and language. Also, each feature can use one||to||one,
+multiple||to||one and many||to||many replacements as well as relative positioning.
+
+So, what actually happens is not that a feature is processed, but that all features
+are dealt with at the same time, in the order that the font prescribes. Enabling a
+specific feature means that a step is executed, while a disabled feature skips all
+steps that are tagged as belonging to that feature. And, as each feature can use
+contextual analysis, you can imagine that the effective sequence of actions can be
+a complex mix.
+
+A nice example of a contextual substitution is the centered period character in
+catalan in \type {ebgaramond}:
+
+\startbuffer
+\definefontfeature
+ [example]
+ [default]
+ [locl=yes,script=latn,language=cat]
+
+\definedfont[file:ebgaramond12-regular.otf*default at 40pt]l·l\quad
+\definedfont[file:ebgaramond12-regular.otf*example at 40pt]l·l
+\stopbuffer
+
+\typebuffer
+
+We show the boundingbox of the glyphs. The centered period between two l's is
+is replaced by a raised variant with no width.
+
+\blank \start \showglyphs \maincolor \midaligned{\getbuffer} \stop \blank
+
+It will be clear that in order to use such features you need to know what the font
+provides. For some fonts you need to explicitly enable the latin script (while others
+use default). Such a feature can be part of localized support but that is no rule.
+In that respect \OPENTYPE\ features are a rather unpredictable mess. For instance,
+nothing prevents such a feature to be a ligature, and in case you find that strange,
+especially ligature features are often abused for any purpose.
+
+\stopsubsection
+
+\startsubsection[reference=ligatures:hyphenation,title=Ligatures and hyphenation]
+
+In this section we will say a few words on how hyphenation interferes with
+(especially) ligature building. For this you need to know that:
+
+\starttyping
+effe
+\stoptyping
+
+But when hyphenation is permitted between the two \type{s}'s we actually have
+internally:
+
+\starttyping
+ef{-}{}{}fe
+\stoptyping
+
+The first snippet comes at the end of a line, the second at the beginning of a
+the next line and the last snippet is used when no hyphenation is needed. Such
+triplets need to be taken into account when we do replacements and positioning
+and also when we do contextual lookups.
+
+An \OPENTYPE\ font is just a container that collects the following:
+
+\startitemize[packed]
+\startitem
+ graphic representations of characters and symbols
+\stopitem
+\startitem
+ information about what characters the shapes represent
+\stopitem
+\startitem
+ rules about converting (sequences of) characters into one or more
+ representations
+\stopitem
+\startitem
+ rules about positioning representations relative to each other
+\stopitem
+\stopitemize
+
+Although the way this information is stored is standardized, the rules are not.
+You can imagine that there would be some standard way to turn an \type {f} and
+\type {i} into an \quote{fi} but we already saw that this is not the case. Here
+are some possibilities:
+
+\startitemize[packed]
+\startitem
+ The two characters get their own standard glyph, maybe with some kerning.
+\stopitem
+\startitem
+ The two characters are combined into one shape.
+\stopitem
+\startitem
+ The \type{f} gets a narrow representation and is kept close to the standard
+ \type{i}.
+\stopitem
+\startitem
+ A standard \type {f} is kerned with a dotless \type{i} (not to be confused
+ with the \UNICODE\ character).
+\stopitem
+\startitem
+ A special \type {f} is combined with a special \type {i}.
+\stopitem
+\stopitemize
+
+% maybe mark lig components when separate chars so that we can do spacing
+
+If the two characters are represented by their own shape, some contextual
+analysis takes place. Again there are several approaches to this:
+
+\startitemize[packed]
+\startitem
+ When an \type{f} is seen in the input, the next character is checked and one
+ or both gets replaced.
+\stopitem
+\startitem
+ When an \type{i} is seen in the input, the previous character is checked and
+ the \type {i} gets replaced.
+\stopitem
+\startitem
+ When an \type{f} several following characters are checked, for instance to
+ see if we need to take \type {ij} into account.
+\stopitem
+\stopitemize
+
+Traditionally the \type {f} followed by an \type{f}, \type{l} and \type{i} get a
+treatment, but some fonts also combine the \type {f} with \type {k}, \type {j},
+\type {b}, \type {t} and more.
+
+The \MKIV\ font handler is rather generic in the sense that it support what the
+font requires. However, a complication is that the scripts (languages) that use
+these diverse methods also expect hyphenation within such a ligature. Script like
+Arabic that are more demanding don't hyphenate so there interference with
+hyphenation is not a problem.
+
+Some ligatures are sensitive for languages. In languages that have compound words
+it might be undesirable to have a ligature at a word boundary, or in the Dutch
+word \type {fijn} we like to have a nice glyph (or combinations) for \type {ij}
+but no \type {fi} ligature. In a similar way hyphenation patterns can have
+rules and it will be no surprise that the hyphenation mechanism can compete with
+the ligature building for the best solution. This gets complicated by the fact
+that there is no real way to recognize in the font handler if we really are
+dealing with ligature building. Not only is the \type {liga} feature (and deep
+down the ligature gsub handling) not bound to ligatures (but simply a
+many|-|to|-|one mapper), some of the mentioned pseudo ligature builders use simple
+substitution and kerning and there is no way to recognize that as a ligature.
+
+Although it is possible to come up with a solution that is acceptable for many cases,
+there is no way to predict what kind of tricks font designers will use. A hyphenation
+point can be seen as follows:
+
+\starttabulate[||||]
+\NC \type{effe} \NC \type{ef-fe} \NC \type{e{f-}{f}{ff}e} \NC \NR
+\NC \type{efficient} \NC \type{ef-fi-cient} \NC \type{e{ffi-}{}{ffi}cient} \NC \NR
+\stoptabulate
+
+In the second case the larger ligatures has replaced the previous one. We could
+have kept the first one because there are ways to manage two|-|step bounding
+ligatures but it's not worth the trouble (read: way more complex code and
+increased runtime for the whole mechanism). Here the \type {{ff}} and \type
+{{ffi}} can be individual shapes or just one shape.
+
+The three components of a hyphenation point: the pre, post and replacement text
+need to be looked at independently so that we get the proper kerning with the
+preceding and following characters. Also, in more complex (chained) lookups we
+need to compare each element with its surrounding. A fully expanded solution tree
+is too time consuming so we take some shortcuts and limits the checks to the
+level that it has no big impact on performance. The occasionally needed
+backtracking and inspection of components is currently quite reasonable. We need
+to trade quality with convenience: the result should look okay but processing
+speed should also be as high as possible. There is no need to let other scripts
+or regular fonts suffer too much from excessive script demands of fonts that
+could have be done better.
+
+The complication is that we not only need to check and replace but also need to
+check the kerning with preceding and following characters. We also need to take
+the hyphen into account (here one, but there can also be one after the break.
+
+It is for this reason that in \MKIV\ we have a (we think) acceptable mix of
+heuristics around hyphenation points that deal with single and multiple
+substitution as well as kerning. It will never be 100\% pertect but we consider
+it better to drop an occasional hyphenation in favor of proper font handling. In
+practice \TEX\ is clever enough to break a paragraph in lines within these
+restrictions.
+
+In \CONTEXT\ we have the traditional \TEX\ hyphenator but also provide an
+extensible \LUA\ reimplementation. That one might become the default in future
+versions. In traditional \TEX\ there are several low level hyphenation
+representations: simple hyphen only points, injected by the hyphenator,
+explicitly injected by the user or originating from a hyphen character. Then
+there is the generic (pre, post, replace) discretionary that can be explicitly
+injected by the user (or a macro). In \MKIV\ all hyphenation points get
+normalized to this generic discretionary. There is no need for old|-|time
+optimizations and a consistent (expanded) representation is easier to deal with
+in other extensions. However, because the font handler is supposed to also work
+outside \CONTEXT\ we need to deal with traditional cases too. But \unknown\ the
+results might differ a bit.
+
+\stopsubsection
+
+ \startsubsection[title=Color]
+
+ % TODO: use emojionecolor-svginot-archived.ttf
+
+ A recent new (and evolving) addition to \OPENTYPE\ is colored glyphs. One variant
+ (by \MICROSOFT) uses overlays and this method is quite efficient.
+
+ \startbuffer
+ \definefontfeature[colored][colr=yes]
+ \definefontsynonym[Emoji][file:seguiemj.ttf*default,colored]
+
+ \definesymbol[bug][\getglyphdirect{Emoji}{\char"1F41B}]
+ \definesymbol[ant][\getglyphdirect{Emoji}{\char"1F41C}]
+ \definesymbol[bee][\getglyphdirect{Emoji}{\char"1F41D}]
+ \stopbuffer
+
+ \typebuffer \getbuffer
+
+ Here we see a \symbol[bug], \symbol[ant] and \symbol[bee], and they come in
+ color! Once \UNICODE\ started adding such symbols (and more get added) the
+ distinction between characters and symbols get even fuzzier. Of course one
+ can argue that we communicate in pictograms but even then, given that
+ mankind lasts a while, the \UNICODE\ repertoire will explode.
+
+ \startplacefigure[title={A few emojis from \type {seguiemj.ttf}}]
+ \startcombination [3*1]
+ {\scale[width=.3\textwidth]{\symbol[bug]}} {\type{U+1F41B}: bug}
+ {\scale[width=.3\textwidth]{\symbol[ant]}} {\type{U+1F41C}: ant}
+ {\scale[width=.3\textwidth]{\symbol[bee]}} {\type{U+1F41D}: bee}
+ \stopcombination
+ \stopplacefigure
+
+ Here we use \type {seguiemj.ttf}, a font that comes with \MSWINDOWS. Colors are
+ achieved by combining glyphs rendered in different colors. A variant that uses
+ \SVG\ instead of overlays is \type {emojionecolor-svginot.ttf}:
+
+ \startbuffer
+ \definefontfeature[svg][svg=yes]
+ \definefontsynonym[Emoji][file:emojionecolor-svginot.ttf*default,svg]
+ \stopbuffer
+
+ \typebuffer \getbuffer
+
+ This time we get \symbol[bug], \symbol[ant] and \symbol[bee] and they look
+ quite different. Both fonts also have ligatures and you can wonder what sense
+ that makes. It makes it impossible to swap fonts and as there is no standard
+ one never knows what to expect.
+
+ \startplacefigure[title={A few emojis from \type {emojionecolor-svginot.ttf}}]
+ \startcombination [3*1]
+ {\scale[width=.3\textwidth]{\symbol[bug]}} {\type{U+1F41B}: bug}
+ {\scale[width=.3\textwidth]{\symbol[ant]}} {\type{U+1F41C}: ant}
+ {\scale[width=.3\textwidth]{\symbol[bee]}} {\type{U+1F41D}: bee}
+ \stopcombination
+ \stopplacefigure
+
+ \definefont[emoji][file:emojionecolor-svginot.ttf*default,svg]
+
+ \def\FourFaces{\char128104\zwj\char128105\zwj\char128102\zwj\char128102\relax}
+
+ \def\Man {\char"1F468\relax}
+ \def\Woman{\char"1F469\relax}
+ \def\Boy {\char"1F466\relax}
+ \def\Girl {\char"1F467\relax}
+
+ How do we know what faces add up to the ligature {\emoji\Man \zwj \Woman \zwj
+ \Girl \zwj \Boy} and how are we supposed to know that there should {\darkgray
+ \type {zwj}} in between? When we input four faces separated by zero width
+ joiners, we get a four face symbol instead. The reason for having the joiners in
+ between is probably to avoid unexpected ligatures. The sequence \type {man},
+ \type {woman}, \type {boy}, \type {boy} gives \type {family}:
+ %
+ {\emoji\Man} + {\darkgray \type {zwj}}
+ {\emoji\Woman} + {\darkgray \type {zwj}}
+ {\emoji\Boy} + {\darkgray \type {zwj}}
+ {\emoji\Boy} = {\emoji\Man \zwj \Woman \zwj \Boy \zwj \Boy},
+ %
+ but two girls also work:
+ %
+ {\emoji\Man} + {\darkgray \type {zwj}}
+ {\emoji\Woman} + {\darkgray \type {zwj}}
+ {\emoji\Girl} + {\darkgray \type {zwj}}
+ {\emoji\Girl} = {\emoji\Man \zwj \Woman \zwj \Girl \zwj \Girl},
+ %
+ so does a mixture of kids:
+ %
+ {\emoji\Man} + {\darkgray \type {zwj}}
+ {\emoji\Woman} + {\darkgray \type {zwj}}
+ {\emoji\Girl} + {\darkgray \type {zwj}}
+ {\emoji\Boy} = {\emoji\Man \zwj \Woman \zwj \Girl \zwj \Boy},
+ %
+ although (at least currently):
+ %
+ {\emoji\Man} + {\darkgray \type {zwj}}
+ {\emoji\Woman} + {\darkgray \type {zwj}}
+ {\emoji\Boy} + {\darkgray \type {zwj}}
+ {\emoji\Girl} = {\emoji\Man \zwj \Woman \zwj \Boy \zwj \Girl},
+ %
+ gives twin boys. Of course the real family emoj is {\emoji\char"1F46A}.
+
+ In our times for sure many combinations are possible, so:
+ %
+ {\emoji\Man} + {\darkgray \type {zwj}}
+ {\emoji\Man} + {\darkgray \type {zwj}}
+ {\emoji\Girl} + {\darkgray \type {zwj}}
+ {\emoji\Girl} = {\emoji\Man \zwj \Man \zwj \Girl \zwj \Girl},
+ %
+ indeed gives a family, but I wonder at what point cultural bias will creep into
+ font design. One can even wonder how clothing and haircut will demand frequent
+ font updates: {\emoji\char"1F46B}, {\emoji\char"1F46C}, {\emoji\char"1F46D}.
+
+ In the math alphabets we have a couple of annoying holes because some characters
+ were already present in \UNICODE. The bad thing here is that we now always have
+ to deal with these exceptions. But not so with emojis because here eventually all
+ variants will show up. Where a character \type {A} in red or blue uses the same
+ code point, a white telephone {\emoji\char"1F57E} and black telephone
+ {\emoji\char"1F57F} have their own. And because obsolete scripts are already
+ supported in \UNICODE\ and more get added, we can expect old artifacts also
+ showing up at some time. Soon the joystick {\emoji\char"1F579} will be an unknown
+ item to most of us, while the \MICROSOFT\ hololens migth get its slot.
+
+ \startplacefigure[title={Will all animals come in stages of development?}]
+ \startcombination [3*1]
+ {\scale[width=.3\textwidth]{\emoji\char"1F423}} {\type{U+1F423}: hatching chick}
+ {\scale[width=.3\textwidth]{\emoji\char"1F424}} {\type{U+1F424}: baby chick}
+ {\scale[width=.3\textwidth]{\emoji\char"1F425}} {\type{U+1F425}: front-facing baby chick}
+ \stopcombination
+ \stopplacefigure
+
+ For sure these mechanisms will evolve and to what extent we support them depends
+ on what users want. At least we have the basics implemented.
+
+ \stopsubsection
+
+ \stopsection
+
+\startsection[title=Extras]
+
+\startnotabene
+ Todo.
+\stopnotabene
+
+\stopsection
+
+\startsection[reference=goodies,title=Goodies]
+
+Goodies range from simple to complex. They share that they are defined in files
+and loaded at runtime. There is a good change that when you read this, that there
+are already more goodies than mentioned here. Here we will just mention a couple
+of goodies. More details can be found in the files that ship with \CONTEXT\ and
+have suffix \type {lfg}.
+
+A goodie file is a regular \LUA\ file and is supposed to return a table. This
+table collects data that is used for implementing the goodie or relates to a
+regular feature. It can also provide information that is used for patching a
+font. An example of a simple goodie file is the ones that accompanies the first
+release of the \OPENTYPE\ Lucida fonts.
+
+\starttyping
+return {
+ name = "lucida-opentype-math",
+ version = "1.00",
+ comment = "Goodies that complement lucida opentype.",
+ author = "Hans Hagen",
+ copyright = "ConTeXt development team",
+ mathematics = {
+ alternates = {
+ italic = {
+ feature = 'ss01',
+ value = 1,
+ comment = "Mathematical Alternative Italic"
+ },
+ }
+ }
+}
+\stoptyping
+
+This goodie file is only providing information about the meaning of a stylistic
+alternate. These have abstract tags like \type {ss01} and in this case this
+category collects alternative italic (calligraphic) shapes. Because math does
+not follow the same rules as text, this feature is enabled explicitly.
+
+In the goodie file of Xits math the alternates table has more entries:
+
+\startnarrowtyping
+alternates = {
+ cal = { ... comment = "Mathematical Calligraphic Alphabet" },
+ greekssup = { ... comment = "Mathematical Greek Sans Serif Alphabet" },
+ greekssit = { ... comment = "Mathematical Italic Sans Serif Digits" },
+ monobfnum = { ... comment = "Mathematical Bold Monospace Digits" },
+ mathbbbf = { ... comment = "Mathematical Bold Double-Struck Alphabet" },
+ mathbbit = { ... comment = "Mathematical Italic Double-Struck Alphabet" },
+ mathbbbi = { ... comment = "Mathematical Bold Italic Double-Struck Alphabet" },
+ upint = { ... comment = "Upright Integrals" },
+ vertnot = { ... comment = "Negated Symbols With Vertical Stroke" },
+}
+\stopnarrowtyping
+
+An alternate is triggered at the \TEX\ end with:
+
+\starttyping
+$ABC$ $\cal ABC$ $\mathalternate{cal}\cal ABC$
+\stoptyping
+
+This is an example of a dynamic feature that gets applied when enabled at a
+specific location in the input. The \type {cal} is only recognized when it
+is defined in a goodies file, where the value is defined (in all of the above cases
+the value is~\type {1}).
+
+The Xits math fonts has a goodie files that starts with:
+
+\starttyping
+return {
+ name = "xits-math",
+ version = "1.00",
+ comment = "Goodies that complement xits (by Khaled Hosny).",
+ author = "Hans Hagen",
+ copyright = "ConTeXt development team",
+ mathematics = {
+ italics = {
+ ["xits-math"] = italics,
+ },
+ alternates = {
+\stoptyping
+
+Here the \type {italics} variable is a table defined before the \type {return}
+that looks as follows:
+
+\starttyping
+local italics = {
+ defaultfactor = 0.025,
+ disableengine = true,
+ corrections = {
+ -- [0x1D44E] = 0.99, -- a (fraction of quad)
+ -- [0x1D44F] = 100, -- b (font points)
+ [0x1D453] = -0.0375, -- f
+ }
+}
+\stoptyping
+
+This rather specific table tells \CONTEXT\ that (when enabled) it has to apply
+italic correction. It disables support built into the \TEX\ engine (which in the
+case of \LUATEX\ is close to absent anyway). It will apply a default italic
+correction of \type {0.025} but for some shapes a different value is used. Again
+we have some commands at the \TEX\ end:
+
+\starttyping
+\setupmathematics[italics=1] % fontitalics
+\setupmathematics[italics=2] % fontdata
+\setupmathematics[italics=3] % quad based
+\setupmathematics[italics=4] % combination of 1 and 3
+\stoptyping
+
+Because (definitely at the start of the \LUATEX\ project) we had no
+proper \OPENTYPE\ math fonts, but at the same time wanted to move on
+to \OPENTYPE\ and \UNICODE\ math and no longer struggle with all
+those math families and definitions. The way out of this problem
+is to define a virtual math font. The code for doing this is built
+into the \MKIV\ core but is controlled by a goodie definition. Take
+for instance Antykwa Math:
+
+\startnarrowtyping
+return {
+ name = "antykwa-math",
+ version = "1.00",
+ comment = "Goodies that complement antykwa math.",
+ author = "Hans, Mojca, Aditya",
+ copyright = "ConTeXt development team",
+ mathematics = {
+ mapfiles = {
+ "antt-rm.map",
+ "antt-mi.map",
+ "antt-sy.map",
+ "antt-ex.map",
+ "mkiv-base.map",
+ },
+ virtuals = {
+ ["antykwa-math"] = {
+ { name = "file:AntykwaTorunska-Regular", features = "virtualmath", main = true },
+ { name = "mi-anttri.tfm", vector = "tex-mi", skewchar=0x7F },
+ { name = "mi-anttri.tfm", vector = "tex-it", skewchar=0x7F },
+ { name = "sy-anttrz.tfm", vector = "tex-sy", skewchar=0x30, parameters = true } ,
+ { name = "ex-anttr.tfm", vector = "tex-ex", extension = true } ,
+ { name = "msam10.tfm", vector = "tex-ma" },
+ { name = "msbm10.tfm", vector = "tex-mb" },
+ },
+\stopnarrowtyping
+
+Normally users will not define such tables but the keys give an indication of
+what is involved. The same is true for the previously shown tables: they are just
+provided in the \CONTEXT\ distribution.
+
+Text fonts also can have goodies. We start with a rather dumb one and there
+will be not that many of those. This one is needed to turn a \TYPEONE\ font
+with a rather special encoding into a \UNICODE\ font. The next mapping is
+possible because the dingbats are part of \UNICODE.
+
+\starttyping
+return {
+ name = "dingbats",
+ version = "1.00",
+ comment = "Goodies that complement dingbats (funny names).",
+ author = "Hans Hagen",
+ copyright = "ConTeXt development team",
+ remapping = {
+ tounicode = true,
+ unicodes = {
+ a1 = 0x2701,
+ a10 = 0x2721,
+ a100 = 0x275E,
+ a101 = 0x2761,
+ a102 = 0x2762,
+\stoptyping
+
+Applying this encoding happens in two steps. Because goodies like this are just
+features, we need to define a proper font feature set:
+
+\starttyping
+\definefontfeature
+ [dingbats]
+ [mode=base,
+ goodies=dingbats,
+ unicoding=yes]
+\stoptyping
+
+We have a base mode font, so no special processing takes place. The \type {goodies}
+key is used to communicate the goodies file. The \type {unicoding} key is used
+to apply the encoding. Of course this only works because the remapper code is present
+in the core and is hooked in to the font initialization code. The \type {dingbats}
+feature set is predefined, just as the font definition:
+
+\starttyping
+\definefontsynonym [ZapfDingbats] [file:uzdr] [features=dingbats]
+\stoptyping
+
+Here is a goodie file that I made a while ago:
+
+\starttyping
+return {
+ name = "oxoniensis",
+ version = "1.00",
+ comment = "Oxoniensis test file for Thomas Schmitz.",
+ author = "Hans Hagen",
+ copyright = "ConTeXt development team",
+ features = {
+ lunatesigma = {
+ type = "substitution",
+ data = {
+ sigma = 0x03F2,
+ sigma1 = 0x03F2,
+ Sigma = 0x03F9,
+ phi = phi1,
+ },
+ }
+ },
+}
+\stoptyping
+
+There is not that much to say about this, apart from that it's a sort of fake
+feature that gets enabled as regular one:
+
+\starttyping
+\definefontfeature[test]
+ [mode=node,
+ kern=yes,
+ lunatesigma=yes,
+ goodies=oxoniensis]
+
+\definefont[somefont][file:oxoniensis*test]
+\stoptyping
+
+A complete different kind of goodie is the following. At one of the \CONTEXT\ meetings
+Mojca Miklavec discussed the possibility to have an additional mechanism for
+defining combinations of fonts. Often fonts come in a set of four (regular, italic,
+bold and bold italic). In \MKII\ the complexity of typescripts depends on the amount of
+encodings that need to be supported but in \MKIV\ things are easier. For a set of four fonts
+a typescript looks as follows:
+
+\starttyping
+\starttypescript [sans] [somesansfont] [name]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [file:somesans] [features=default]
+ \definefontsynonym [SansBold] [file:somesansb] [features=default]
+ \definefontsynonym [SansItalic] [file:somesansi] [features=default]
+ \definefontsynonym [SansBoldItalic] [file:somesansz] [features=default]
+\stoptypescript
+\stoptyping
+
+We still have the abstract notion of a \type {Sans} font so that we can refer to
+the regular shape without knowing the real name but the number of lines needed
+is small. Such a definition can then be referred to using:
+
+\starttyping
+\starttypescript[somefontset]
+ \definetypeface [somefontset] [rm] [serif] [someserif] [default]
+ \definetypeface [somefontset] [ss] [sans] [somesans] [default]
+ \definetypeface [somefontset] [tt] [mono] [somemono] [default]
+ \definetypeface [somefontset] [mm] [math] [somemath] [default]
+\stoptypescript
+\stoptyping
+
+So far things look simple. Given that many fonts follow a similar naming scheme
+Wolfgang made a module that avoids such definitions altogether. However, being
+involved in the development of the Antykwa fonts, Mojca ran into the situation
+that not just four fonts were part of the set but many more. There are several
+weight (think of light and heavy variants) as well as condensed variants and of
+course the whole set is not per se a multiple of four.
+
+In the meantime, in addition to the \type {file:} and \type {name:} accessors,
+\CONTEXT\ had an additional one tagged \type {spec:} where a string made out of
+weight, style, width etc.\ is turned into a (best guessed) font name. Therefore
+the most natural way to deal with the many|-|fonts|-|in|-|a|-|set dilemma was to
+provide an additional interface between this specification and the font set and
+the most robust method was to define all in a goodie file.
+
+In this case the goodies are loaded independent of the font, that is: not
+as a feature. For instance:
+
+\starttyping
+\loadfontgoodies[antykwapoltawskiego]
+\stoptyping
+
+This file maps obscure fontnames onto the \type {spec:} interface so that
+we can access them in a robust way.
+
+\starttyping
+\definefont
+ [MyFontA]
+ [file:Iwona-Regular*smallcaps]
+\definefont
+ [MyFontB]
+ [file:AntykwaTorunska-Regular*smallcaps]
+\definefont
+ [MyFontC]
+ [file:antpoltltcond-regular*smallcaps]
+\definefont
+ [MyFontD]
+ [spec:antykwapoltawskiego-bold-italic-condensed-normal*smallcaps]
+\definefont
+ [MyFontE]
+ [spec:antykwapoltawskiego-bold-italic-normal]
+\stoptyping
+
+The goodies file looks as follows:
+
+\starttyping
+return {
+ name = "antykwa-poltawskiego",
+ version = "1.00",
+ comment = "Goodies that complement Antykwa Poltawskiego",
+ author = "Hans & Mojca",
+ copyright = "ConTeXt development team",
+ files = {
+ name = "antykwapoltawskiego", -- shared
+ list = {
+ ["AntPoltLtCond-Regular.otf"] = {
+ weight = "light",
+ style = "regular",
+ width = "condensed",
+ },
+ ...
+ ["AntPoltExpd-BoldItalic.otf"] = {
+ weight = "bold",
+ style = "italic",
+ width = "expanded",
+ },
+ },
+ },
+ typefaces = {
+ ["antykwapoltawskiego-light"] = {
+ shortcut = "rm",
+ shape = "serif",
+ fontname = "antykwapoltawskiego",
+ normalweight = "light",
+ boldweight = "medium",
+ width = "normal",
+ size = "default",
+ features = "default",
+ },
+ ...
+ },
+}
+\stoptyping
+
+In addition to the files|-|to|-|specification mapping, there is
+also a typeface specification table. This permits the definition
+of a typeface in the following way:
+
+\starttyping
+\definetypeface
+ [name=mojcasfavourite,
+ preset=antykwapoltawskiego,
+ normalweight=light,
+ boldweight=bold,
+ width=expanded]
+
+\setupbodyfont
+ [mojcasfavourite]
+\stoptyping
+
+When resolving the definition, the best possible match will be taken from the
+typeface table in the goodie file. Of course this is not something that we expect
+the average user to deliver and deal with.
+
+As the Antykwa font is somewhat atypical and not used in everyday typesetting,
+you might wonder if all this overhead makes sense. However, there are type
+foundries that do ship their fonts in many weights and for those using a \LUA\
+goodie file instead of many typescripts in \TEX\ coding makes sense. Take for
+instance TheMix:
+
+\starttyping
+\loadfontgoodies
+ [themix]
+
+\definetypeface
+ [name=themix,
+ preset=themix-light]
+
+\definetypeface
+ [name=themix,
+ preset=themixmono-light]
+
+\setupbodyfont
+ [themix]
+\stoptyping
+
+In this case the goodie file can serve as a template for more such fonts.
+In order to be efficient this goodie file uses a couple of local
+tables (we could have used metatables instead).
+
+\starttyping
+local themix = {
+ name = "themix",
+ shortcut = "ss",
+ shape = "sans",
+ fontname = "themix",
+ width = "normal",
+ size = "default",
+ features = "default",
+}
+
+local themixmono = {
+ name = "themixmono",
+ shortcut = "tt",
+ shape = "mono",
+ fontname = "themixmono",
+ width = "normal",
+ size = "default",
+ features = "default",
+}
+\stoptyping
+
+The main goodie table defines a lot of weights:
+
+\startnarrowtyping
+return {
+ name = "themix",
+ version = "1.00",
+ comment = "Goodies that complement TheMix (by and for sale at www.lucasfonts.com).",
+ author = "Hans Hagen",
+ copyright = "ConTeXt development team",
+ files = {
+ list = {
+ ["TheMixOsF-ExtraLight"] = {
+ name = "themix",
+ weight = "extralight",
+ style = "regular",
+ width = "normal"
+ },
+ ["TheMixOsF-ExtraLightItalic"] = {
+ ...
+ },
+ ...
+ ["TheMixOsF-Black"] = {
+ ...
+ },
+ ["TheMixOsF-BlackItalic"] = {
+ ...
+ },
+ ...
+ --
+ ["TheMixMono-W2ExtraLight"] = {
+ name = "themixmono",
+ weight = "extralight",
+ style = "regular",
+ width = "normal"
+ },
+ ...
+ ["TheMixMono-W9BlackItalic"] = {
+ ...
+ },
+ },
+ },
+ typefaces = {
+ ["themix-extralight"] = table.merged(themix, {
+ normalweight = "extralight",
+ boldweight = "semilight"
+ }),
+ ["themix-light"] = table.merged(themix, {
+ normalweight = "light",
+ boldweight = "normal"
+ }),
+ ...
+ ["themixmono-bold"] = table.merged(themixmono, {
+ normalweight = "bold",
+ boldweight = "black"
+ }),
+ },
+}
+\stopnarrowtyping
+
+It's now time for some generic goodies. In the \CONTEXT\ distribution there
+is a goodie file that (at the time of this writing) looks as follows:
+
+\starttyping
+local default = {
+ analyze = "yes",
+ mode = "node",
+ language = "dflt",
+ script = "dflt",
+}
+
+local smallcaps = {
+ smcp = "yes",
+}
+
+local function statistics(tfmdata)
+ commands.showfontparameters(tfmdata)
+end
+
+local function squeeze(tfmdata)
+ for k, v in next, tfmdata.characters do
+ v.height = 0.75 * (v.height or 0)
+ v.depth = 0.75 * (v.depth or 0)
+ end
+end
+
+return {
+ name = "demo",
+ version = "1.01",
+ comment = "An example of goodies.",
+ author = "Hans Hagen",
+ featuresets = {
+ default = {
+ default,
+ },
+ smallcaps = {
+ default, smallcaps,
+ },
+ },
+ colorschemes = {
+ default = {
+ [1] = {
+ "one", "three", "five", "seven", "nine",
+ },
+ [2] = {
+ "two", "four", "six", "eight", "ten",
+ },
+ },
+ all = {
+ [1] = {
+ "*",
+ },
+ },
+ some = {
+ [1] = {
+ "0x0030:0x0035",
+ },
+ },
+ },
+ postprocessors = {
+ statistics = statistics,
+ squeeze = squeeze,
+ },
+}
+\stoptyping
+
+This demo file implements several goodies: featuresets, colors and
+postprocessors. Keep in mind that a goodie file can provide whatever information
+it wants but of course only known subtables will be dealt with.
+
+The coloring of glyphs can happen by name, which assumes that glyph names are
+used, or by number. Here we use generic glyph names, but for a specific font one
+might need to provide a special goodie file. For instance, the color section of
+the goodie file for the husayni font has entries like:
+
+\startnarrowtyping
+[3] = {
+ "Ttaa.waqf", "SsLY.waqf", "QLY.waqf", "Miim.waqf", "LA.waqf", "Jiim.waqf",
+ "Threedotsabove.waqf", "Siin.waqf", "Ssaad.waqf", "Qaaf.waqf", "SsL.waqf",
+ "QF.waqf", "SKTH.waqf", "WQFH.waqf", "Kaaf.waqf", "Ayn.ruku", "Miim.nuun_high",
+ "Siin.Ssaad", "Nuunsmall", "emptydot_low", "emptydot_high", "Sifr.fill",
+ "Miim.nuun_low", "Nuun.tanwiin",
+},
+\stopnarrowtyping
+
+Of course such a definition can only be made when the internals of the font are
+known and in this case it concerns a pretty complex font.
+
+\startbuffer
+\definefontfeature
+ [demo-colored]
+ [goodies=demo,
+ colorscheme=default,
+ featureset=default]
+
+\definefontfeature
+ [demo-colored-all]
+ [goodies=demo,
+ colorscheme=all,
+ featureset=default]
+
+\definefontfeature
+ [demo-colored-some]
+ [goodies=demo,
+ colorscheme=some,
+ featureset=default]
+
+\definefont[DemoFontA][MonoBold*demo-colored at 10pt]
+\definefont[DemoFontB][MonoBold*demo-colored-all at 10pt]
+\definefont[DemoFontC][MonoBold*demo-colored-some at 10pt]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+% \definecolor[colorscheme:1:1][s=.75]
+% \definecolor[colorscheme:1:2][r=.75]
+% \definecolor[colorscheme:1:3][g=.75]
+% \definecolor[colorscheme:1:4][b=.75]
+% \definecolor[colorscheme:1:5][c=.75]
+% \definecolor[colorscheme:1:6][m=.75]
+% \definecolor[colorscheme:1:7][y=.75]
+
+% \definecolor[colorscheme:2:7][s=.75]
+% \definecolor[colorscheme:2:6][r=.75]
+% \definecolor[colorscheme:2:5][g=.75]
+% \definecolor[colorscheme:2:4][b=.75]
+% \definecolor[colorscheme:2:3][c=.75]
+% \definecolor[colorscheme:2:2][m=.75]
+% \definecolor[colorscheme:2:1][y=.75]
+
+\startbuffer
+\starttabulate[||||]
+\NC
+ \DemoFontA \resetfontcolorscheme test 1234567890 \NC
+ \DemoFontA \setfontcolorscheme [1]test 1234567890 \NC
+ \DemoFontA \setfontcolorscheme [2]test 1234567890 \NC
+\NR
+\NC
+ \DemoFontB \resetfontcolorscheme test 1234567890 \NC
+ \DemoFontB \setfontcolorscheme [1]test 1234567890 \NC
+ \DemoFontB \setfontcolorscheme [2]test 1234567890 \NC
+\NR
+\NC
+ \DemoFontC \resetfontcolorscheme test 1234567890 \NC
+ \DemoFontC \setfontcolorscheme [1]test 1234567890 \NC
+ \DemoFontC \setfontcolorscheme [2]test 1234567890 \NC
+\NR
+\stoptabulate
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Here is an example that I made at the TUG 2013 conference in Japan,
+after a presentation by Chof. The font (adapted by by Dohyun Kim) can
+be downloaded from: \hyphenatedurl {http://ftp.ktug.org/KTUG/hcr-lvt/1.910_nomac/}.
+
+\startbuffer[korean-demo]
+\definefontfeature
+ [korean-composed]
+ [goodies=hanbatanglvt,
+ colorscheme=default,
+ mode=node,
+ ljmo=yes,
+ tjmo=yes,
+ vjmo=yes,
+ script=hang,
+ language=kor]
+
+\definefont
+ [KoreanJMO]
+ [hanbatanglvt*korean-composed]
+
+\definecolor[colorscheme:100:1][r=.75]
+\definecolor[colorscheme:100:2][g=.75]
+\definecolor[colorscheme:100:3][b=.75]
+
+\definecolor[colorscheme:101:1][g=.75,b=.75]
+\definecolor[colorscheme:101:2][r=.75,b=.75]
+\definecolor[colorscheme:101:3][r=.75,g=.75]
+\stopbuffer
+
+\typebuffer[korean-demo] \getbuffer[korean-demo]
+
+\startbuffer
+ % Hunminjeongeum: http://en.wikipedia.org/wiki/Hunminjeongeum
+ 나랏말ᄊᆞ미中듕國귁에달아문ᄍᆞᆼ와로서르ᄉᆞᄆᆞᆺ디아니ᄒᆞᆯᄊᆡ%
+ 사ᄅᆞᆷ마다ᄒᆡᅇᅧ수ᄫᅵ니겨나...% ᆯ로ᄡᅮ메便뼌安ᅙᅡᆫ킈ᄒᆞ고져ᄒᆞᇙᄯᆞᄅᆞ미니라
+\stopbuffer
+
+\startlinecorrection
+\startcombination[1*3]
+ {\framed{\startscript[hangul]\KoreanJMO \getbuffer\stopscript}} {no colorscheme}
+ {\framed{\startscript[hangul]\KoreanJMO\setfontcolorscheme[100]\getbuffer\stopscript}} {colorscheme 100}
+ {\framed{\startscript[hangul]\KoreanJMO\setfontcolorscheme[101]\getbuffer\stopscript}} {colorscheme 101}
+\stopcombination
+\stoplinecorrection
+
+The goodie definition looks as follows (watch how we use ranges):
+
+\starttyping
+return {
+ name = "hanbatanglvt",
+ version = "1.00",
+ comment = "Goodies that complement the hanbatanglvt fonts.",
+ author = "Hans Hagen",
+ colorschemes = {
+ default = {
+ { "0x01100:0x0115F" }, -- jamo_initial (r/c)
+ { "0x01160:0x011A7" }, -- jamo_medial (g/m)
+ { "0x011A8:0x011FF" }, -- jamo_final (b/y)
+ }
+ }
+}
+\stoptyping
+
+This is much shorter (and efficent) that defining a whole vector, as in:
+
+\starttyping
+local f_uni_base = string.formatters["uni%04X"]
+local f_uni_plus = string.formatters["uni%04X.y%s"]
+
+local function range(first,last)
+ local t = { }
+ for i=first,last do
+ t[#t+1] = f_uni_base(i)
+ for j=0,19 do
+ t[#t+1] = f_uni_plus(i,j)
+ end
+ end
+ return t
+end
+
+return {
+ name = "hanbatanglvt",
+ version = "1.00",
+ comment = "Goodies that complement the hanbatanglvt fonts.",
+ author = "Hans Hagen",
+ colorschemes = {
+ default = {
+ range(0x01100,0x0115F), -- jamo_initial (r/c)
+ range(0x01160,0x011A7), -- jamo_medial (g/m)
+ range(0x011A8,0x011FF), -- jamo_final (b/y)
+ }
+ }
+}
+\stoptyping
+
+By using names we don't depend on \UNICODE\ which sometimes is needed when glyphs
+have ended up in the private space. However, by default, after glyphs have been
+mapped to colors, an extra pass will make sure that characters pushed into
+private space will get the same mapping as their regular \UNICODE\ has gotten
+(given that the number is known). Of course explicitly assigned colors will be
+preserved.
+
+Another generic demo feature is postprocessing. In principle one can
+add additional postprocessors but for that the source code needs to
+be consulted which in turn assumes some knowledge of fonts and \CONTEXT\
+internals.
+
+\startbuffer
+\definefontfeature
+ [justademoa]
+ [default]
+ [goodies=demo,
+ postprocessor=squeeze]
+
+\definefontfeature
+ [justademob]
+ [default]
+ [goodies=demo,
+ postprocessor=statistics]
+
+\definefontfeature
+ [justademoc]
+ [default]
+ [goodies=demo,
+ postprocessor={statistics,squeeze}]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+The statistics just print some font parameters to the log so that one
+is not showing up here. The squeeze looks as follows:
+
+\startbuffer
+\definefont[DemoFontD][Serif*default at 30pt]
+\definefont[DemoFontE][Serif*justademoa at 30pt]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startlinecorrection
+\hbox\bgroup
+ \ruledhbox{\color[maincolor]{DemoFontD height \& depth}}\quad
+ \ruledhbox{\color[maincolor]{DemoFontE height \& depth}}
+\egroup
+\stoplinecorrection
+
+The squeezer just makes the height and depth of glyphs a bit smaller and it is
+not that hard to imagine other manipulations. The demo goodie file is good
+place to start playing with such things.
+
+Because there is less standardization with respect to features than one might
+suspect, goodie files provide a mean to define featuresets. We can use such a set
+in another definition:
+
+\starttyping
+\definefontfeature
+ [demo-smallcaps]
+ [goodies=demo,
+ featureset=smallcaps]
+\stoptyping
+
+Of course this only makes sense for more complex combinations. The already mentioned
+husayni font comes with many features and most of these work together.
+
+The basic goodie table looks as follows:
+
+\startnarrowtyping
+return {
+ name = "husayni",
+ version = "1.00",
+ comment = "Goodies that complement the Husayni font by Idris Samawi Hamid.",
+ author = "Idris Samawi Hamid and Hans Hagen",
+ featuresets = { },
+ solutions = { },
+ stylistics = { },
+ colorschemes = { },
+}
+\stopnarrowtyping
+
+We already saw the color schemes and now we will fill in the other tables. First
+we define a couple of sets:
+
+\startnarrowtyping
+local basics = {
+ analyze = "yes",
+ mode = "node",
+ language = "dflt",
+ script = "arab",
+}
+
+local analysis = {
+ ccmp = "yes",
+ init = "yes", medi = "yes", fina = "yes",
+}
+
+local regular = {
+ rlig = "yes", calt = "yes", salt = "yes", anum = "yes",
+ ss01 = "yes", ss03 = "yes", ss07 = "yes", ss10 = "yes", ss12 = "yes",
+ ss15 = "yes", ss16 = "yes", ss19 = "yes", ss24 = "yes", ss25 = "yes",
+ ss26 = "yes", ss27 = "yes", ss31 = "yes", ss34 = "yes", ss35 = "yes",
+ ss36 = "yes", ss37 = "yes", ss38 = "yes", ss41 = "yes", ss42 = "yes",
+ ss43 = "yes", js16 = "yes",
+}
+
+local positioning = {
+ kern = "yes", curs = "yes", mark = "yes", mkmk = "yes",
+}
+
+local minimal_stretching = {
+ js11 = "yes", js03 = "yes",
+}
+
+local medium_stretching = {
+ js12="yes", js05="yes",
+}
+local maximal_stretching= {
+ js13 = "yes", js05 = "yes", js09 = "yes",
+}
+
+local wide_all = {
+ js11 = "yes", js12 = "yes", js13 = "yes", js05 = "yes", js09 = "yes",
+}
+
+local shrink = {
+ flts = "yes", js17 = "yes", ss05 = "yes", ss11 = "yes", ss06 = "yes",
+ ss09 = "yes",
+}
+
+local default = {
+ basics, analysis, regular, positioning, -- xxxx = "yes", yyyy = 2,
+}
+\stopnarrowtyping
+
+Next we define some featuresets and we use the default as starting point:
+
+\startnarrowtyping
+ featuresets = {
+ default = {
+ default,
+ },
+ minimal_stretching = {
+ default, js11 = "yes", js03 = "yes",
+ },
+ medium_stretching = {
+ default, js12="yes", js05="yes",
+ },
+ maximal_stretching= {
+ default, js13 = "yes", js05 = "yes", js09 = "yes",
+ },
+ wide_all = {
+ default, js11 = "yes", js12 = "yes", js13 = "yes", js05 = "yes",
+ js09 = "yes",
+ },
+ shrink = {
+ default, flts = "yes", js17 = "yes", ss05 = "yes", ss11 = "yes",
+ ss06 = "yes", ss09 = "yes",
+ },
+ }
+\stopnarrowtyping
+
+When defining the font at the \TEX\ end we can now refer to for instance \type
+{wide_all} which saves us some typing. However, it does not stop here. In a later
+paragraph we will see how fonts can work in tandem with the parbuilder. For that
+purpose the goodie table has a \type {solutions} subtable:
+
+\startnarrowtyping
+solutions = {
+ experimental = {
+ less = {
+ "shrink"
+ },
+ more = {
+ "minimal_stretching", "medium_stretching", "maximal_stretching", "wide_all"
+ },
+ },
+}
+\stopnarrowtyping
+
+Here we define an experimental solution for optimizing the lines in a paragraph:
+we can narrow words or we can widen them according to a specific featureset. In
+order to reach the optimal solution the text will be retypeset under a different
+feature regime.
+
+{\em TODO: show how to apply.}
+
+%D \starttyping
+%D \setupfontsolutions[method={random,preroll},criterium=1,randomseed=101]
+%D
+%D \definefontsolution % actually only the last run needs to be done this way
+%D [FancyHusayni]
+%D [goodies=husayni,
+%D solution=experimental]
+%D
+%D \definedfont[husayni*husayni-default at 24pt]
+%D \setupinterlinespace[line=36pt]
+%D \righttoleft
+%D \enabletrackers[parbuilders.solutions.splitters.colors]
+%D \setfontsolution[FancyHusayni]
+%D alb alb alb \par
+%D \resetfontsolution
+%D \disabletrackers[parbuilders.solutions.splitters.colors]
+%D \stoptyping
+
+Because there are a some 55 stylistic and 21 justification variants the
+goodie file also provides a \type {stylistics} table and for tracing purposes
+the {colorschemes} table is populated.
+
+Yet another demonstration of manipulation is the following. Not all fonts come
+with all combined glyphs. Although we have an auto|-|compose feature in \CONTEXT\
+it sometimes helps to be specific with respect to some combinations. This is
+where the \type {compositions} goodie kicks in:
+
+\starttyping
+local compose = {
+ [0x1E02] = {
+ anchored = "top",
+ },
+ [0x1E04] = {
+ anchored = "bottom",
+ },
+ [0x0042] = { -- B
+ anchors = {
+ top = {
+ x = 300,
+ y = 700,
+ },
+ bottom = {
+ x = 300,
+ y = -30,
+ },
+ },
+ },
+ [0x0307] = {
+ anchors = {
+ top = {
+ x = -250,
+ y = 550,
+ },
+ },
+ },
+ [0x0323] = {
+ anchors = {
+ bottom = {
+ x = -250,
+ y = -80,
+ },
+ },
+ },
+}
+
+return {
+ name = "lm-compose-test",
+ version = "1.00",
+ comment = "Goodies that demonstrate composition.",
+ author = "Hans and Mojca",
+ copyright = "ConTeXt development team",
+ compositions = {
+ ["lmroman12-regular"] = compose,
+ }
+}
+\stoptyping
+
+Of course this assumes some knowledge of the font metrics (in base points) and
+\UNICODE\ slots, but it might be worth the trouble. After all, one only needs to
+figure it out once. But keep in mind that it will always be a kludge.
+
+A slightly different way to define such compositions is the following:
+
+\starttyping
+local defaultunits = 193 - 30
+
+local compose = {
+ DY = defaultunits,
+ -- [0x010C] = { DY = defaultunits }, -- Ccaron
+ -- [0x02C7] = { DY = defaultunits }, -- textcaron
+}
+
+-- fractions relative to delta(X_height - x_height)
+
+local defaultfraction = 0.85
+
+local compose = {
+ DY = defaultfraction, -- uppercase compensation
+}
+
+return {
+ name = "lucida-one",
+ version = "1.00",
+ comment = "Goodies that complement lucida.",
+ author = "Hans and Mojca",
+ copyright = "ConTeXt development team",
+ compositions = {
+ ["lbr"] = compose,
+ ["lbi"] = compose,
+ ["lbd"] = compose,
+ ["lbdi"] = compose,
+ }
+}
+\stoptyping
+
+Of course no one really needs this because \OPENTYPE\ Lucida fonts
+have replaced the \TYPEONE\ versions.
+
+The next goodie table is dedicated to the de facto standard \TEX\ font Latin
+Modern. There is a bit of history behind this file. When we started writing
+\CONTEXT\ there were not that many fonts available and so we ended up with a font
+system that was rather well suited for the predecessor of Latin Modern, called
+Computer Modern. And because these fonts came in design sizes the font system
+was made such that it could cope efficiently with many files in a font set. Although
+there is no additional overhead compared to small font sets, apart from more files,
+there is some burden in defining them. And, as they are the default fonts, these
+definitions slow down the initialization of \CONTEXT\ (which is due to the fact that
+the large typescript definitions were loaded and parsed). So, at some point
+the decision was made to kick out these definitions and move the burden of figuring
+out the right size to \LUA. When Latin Modern is chosen as font the effect is the
+same when design sizes are enabled. But, instead of many definitions (one for each
+combination of size and style) we now have an option. A non|-|designsize typeface
+is defined as follows:
+
+\startnarrowtyping
+\starttypescript [modern,modern-base]
+ \definetypeface [\typescriptone] [rm] [serif] [modern] [default]
+ \definetypeface [\typescriptone] [ss] [sans] [modern] [default]
+ \definetypeface [\typescriptone] [tt] [mono] [modern] [default]
+ \definetypeface [\typescriptone] [mm] [math] [modern] [default]
+ \quittypescriptscanning
+\stoptypescript
+\stopnarrowtyping
+
+The designsize variant looks like this:
+
+\startnarrowtyping
+\starttypescript [modern-designsize]
+ \definetypeface [\typescriptone]
+ [rm] [serif] [latin-modern-designsize] [default] [designsize=auto]
+ \definetypeface [\typescriptone]
+ [ss] [sans] [latin-modern-designsize] [default] [designsize=auto]
+ \definetypeface [\typescriptone]
+ [tt] [mono] [latin-modern-designsize] [default] [designsize=auto]
+ \definetypeface [\typescriptone]
+ [mm] [math] [latin-modern-designsize] [default] [designsize=auto]
+ \quittypescriptscanning
+\stoptypescript
+\stopnarrowtyping
+
+Of course there are accompanying typescripts that map the sans, serif, mono
+and math styles onto files. The \type {designsize} magic uses the following
+table. We show only part of the file, as it is in the \CONTEXT\ distribution.
+
+\starttyping
+return {
+ name = "latin modern",
+ version = "1.00",
+ comment = "Goodies that complement latin modern.",
+ author = "Hans Hagen",
+ copyright = "ConTeXt development team",
+ mathematics = {
+ tweaks = {
+ aftercopying = {
+ mathematics.tweaks.fixbadprime, -- prime is too low
+ },
+ },
+ },
+ designsizes = {
+ ["LMMathRoman-Regular"] = {
+ ["4pt"] = "LMMath5-Regular@lmroman5-math",
+ ...
+ ["12pt"] = "LMMath12-Regular@lmroman12-math",
+ default = "LMMath10-Regular@lmroman10-math"
+ },
+ ["LMMathRoman-Bold"] = { -- not yet ready
+ ...
+ },
+ ["LMRoman-Regular"] = {
+ ["4pt"] = "file:lmroman5-regular",
+ ...
+ ["12pt"] = "file:lmroman12-regular",
+ default = "file:lmroman10-regular",
+ },
+ ["LMRoman-Bold"] = {
+ ...
+ },
+ ["LMRoman-Demi"] = {
+ default = "file:lmromandemi10-regular",
+ },
+ ["LMRoman-Italic"] = {
+ ...
+ },
+ ...
+ ["LMRoman-Unslanted"] = {
+ default = "file:lmromanunsl10-regular",
+ },
+ ["LMSans-Regular"] = {
+ ...
+ },
+ ["LMTypewriter-Regular"] = {
+ ...
+ },
+ ...
+ ["LMTypewriterVarWd-DarkOblique"] = {
+ default = "file:lmmonoproplt10-boldoblique",
+ },
+ ...
+ ["LMTypewriter-CapsOblique"] = {
+ default = "file:lmmonocaps10-oblique",
+ },
+ }
+}
+\stoptyping
+
+The \type {auto} option will choose a best fit compatible to the
+\MKII\ implementation. When \type {default} is used instead, the
+default filename will be taken. Of course one might wonder if
+there will ever be similar goodie files because design sizes
+are not that popular nowadays.
+
+Not all fonts are perfect and of course the \LUATEX\ engine can have flaws as
+well. For this reason we can implement patches. Here is another example of a
+goodie file that has some more code than just a table:
+
+\starttyping
+local patches = fonts.handlers.otf.enhancers.patches
+
+local function patch(data,filename,threshold)
+ local m = data.metadata.math
+ if m then
+ local d = m.DisplayOperatorMinHeight or 0
+ if d < threshold then
+ patches.report("DisplayOperatorMinHeight(%s -> %s)",d,threshold)
+ m.DisplayOperatorMinHeight = threshold
+ end
+ end
+end
+
+patches.register("after","analyze math","asana",
+ function(data,filename) patch(data,filename,1350) end)
+
+local function less(value,target,original)
+ return 0.25 * value
+end
+
+local function more(value,target,original)
+ local o = original.mathparameters.DisplayOperatorMinHeight
+ if o < 2800 then
+ return 2800 * target.parameters.factor
+ else
+ return value -- already scaled
+ end
+end
+
+return {
+ name = "asana-math",
+ version = "1.00",
+ comment = "Goodies that complement asana.",
+ author = "Hans Hagen",
+ copyright = "ConTeXt development team",
+ mathematics = {
+ parameters = {
+ DisplayOperatorMinHeight = more,
+ StackBottomDisplayStyleShiftDown = less,
+ StackBottomShiftDown = less,
+ StackDisplayStyleGapMin = less,
+ StackGapMin = less,
+ StackTopDisplayStyleShiftUp = less,
+ StackTopShiftUp = less,
+ StretchStackBottomShiftDown = less,
+ StretchStackGapAboveMin = less,
+ StretchStackGapBelowMin = less,
+ StretchStackTopShiftUp = less,
+ }
+ }
+}
+\stoptyping
+
+In fact, in addition to already mentioned \type {mapfiles} and
+\type {virtuals} subtables, we can pass variables and
+overload parameters.
+
+\starttyping
+return {
+ name = "lm-math",
+ ...
+ mathematics = {
+ mapfiles = {
+ ...
+ },
+ virtuals = {
+ ...
+ variables = {
+ joinrelfactor = 3, -- default anyway
+ },
+ parameters = { -- test values
+ -- FactorA = 123.456,
+ -- FactorB = false,
+ -- FactorC = function(value,target,original)
+ -- return 7.89 * target.factor
+ -- end,
+ -- FactorD = "Hi There!",
+ },
+ }
+}
+\stoptyping
+
+This kind of goodie functionality is typical for the development of \LUATEX\ and
+experimental math fonts and no user should ever be bothered with it. However, it
+demonstrates that we're not stuck with only features built in the fonts.
+
+% mathdimensions
+
+It can be that a user is not satisfied by some aspects of a math font design.
+There is not much that we can do about the shapes, but we can manipulate for
+instance dimensions.
+
+For this there are two mechanism available: automatically applied dimensional
+fixes and a \type {mathdimensions} feature. Both work with the same goody
+specification.
+
+\starttyping
+mathematics = {
+ ...
+ dimensions = {
+ },
+ ...
+}
+\stoptyping
+
+The entries in a dimensions table are tables themselves. There can be many
+of them so one can organize dimensional tweaks in groups. The \type {default}
+group is always applied, while others are applied on demand. Say that want
+to tweak all \type {±} and \type {∓}. \footnote {In fact, this mechanism is a
+a response to a mail on the \CONTEXT\ mailing list.}
+
+\starttyping
+mathematics = {
+ dimensions = {
+ default = {
+ [0x00B1] = { -- ±
+ height = 500,
+ depth = 0,
+ },
+ [0x2213] = { -- ∓
+ height = 500,
+ depth = 0,
+ },
+ },
+ },
+}
+\stoptyping
+
+This will give these two characters a different height and depth. However, this
+will not have much effect in rendering (much larger dimensions might have).
+
+\starttyping
+mathematics = {
+ dimensions = {
+ default = {
+ [0x00B1] = { -- ±
+ yoffset = 100,
+ },
+ [0x2213] = { -- ∓
+ yoffset = -100,
+ },
+ },
+ },
+}
+\stoptyping
+
+This will raise and lower the glyphs in their bounding boxes and give them
+an appearance more close to their ancestors. But defined this way, they are
+always applied and that might not be what we want. So, we can do this:
+
+\starttyping
+mathematics = {
+ dimensions = {
+ signs = {
+ [0x00B1] = { -- ±
+ yoffset = 100,
+ },
+ [0x2213] = { -- ∓
+ yoffset = -100,
+ },
+ },
+ },
+}
+\stoptyping
+
+This time the application is feature driven. As with all features, setting them
+up has to happen {\em before} fonts are loaded. This will do the trick:
+
+\starttyping
+\definefontfeature [lm-math] [mathdimensions=signs]
+\stoptyping
+
+The \type {lm-math} feature is not defined by default but can be used for such
+purposes. It {\em is} defined with the fontname:
+
+\starttyping
+\definefontsynonym
+ [LMMathRoman-Regular]
+ [file:latinmodern-math-regular.otf]
+ [features={math\mathsizesuffix,lm-math},
+ goodies=lm]
+\stoptyping
+
+A rather specialized goodie is the one that is used to specify math cut|-|ins. A
+good quality math font has these kerns already defined but even then you might
+want to add or replace some by your own. Here is an example of such a patch.
+Normally there are multiple goodies defined in one file but we only show kerns
+here:
+
+\starttyping
+local kern_200 = { bottomright = { { kern = -200 } } }
+local kern_100 = { bottomright = { { kern = -100 } } }
+
+return {
+ name = "pagella-math",
+ version = "1.00",
+ comment = "Goodies that complement pagella.",
+ author = "Hans Hagen",
+ copyright = "ConTeXt development team",
+ mathematics = {
+ kerns = {
+ [0x1D449] = kern_200, -- math italic V
+ [0x1D44A] = kern_100, -- math italic W
+ },
+ },
+}
+\stoptyping
+
+As with other goodies the file is loaded with:
+
+\starttyping
+\definefontsynonym
+ [MathRoman] % names used in definitions
+ [file:texgyrepagella-math.otf] % the file to be loaded
+ [features=math\mathsizesuffix, % size dependent features
+ goodies=pagella-math] % the goodie file to be applied
+\stoptyping
+
+This is typically a goodie that is always applied and not driven by a feature.
+After all, the values given are passed to the engine (after being scaled).
+
+Most goodies are bound to fonts of collections of fonts. This is different for
+treatments. These ship with the distribution but you can also provide your own.
+As this is still somewhat experimental we just mention a few aspects. The entries
+are filenames that point to tables.
+
+\starttyping
+return {
+ name = "treatments",
+ version = "1.00",
+ comment = "Goodies that deals with some general issues.",
+ author = "Hans Hagen",
+ copyright = "ConTeXt development team",
+ treatments = {
+ ["adobeheitistd-regular.otf"] = {
+ embedded = false, -- not yet used
+ comment = "this font is part of acrobat",
+ },
+ ["crap.ttf"] = {
+ ignored = true,
+ comment = "a text file with suffix ttf",
+ },
+ ["latinmodern-math.otf"] = {
+ comment = "experimental",
+ },
+ ["rubish-regular.ttf"] = {
+ comment = "check output for missing à and á",
+ }
+ },
+}
+\stoptyping
+
+The comment entry in such a table becomes part of the message at the end
+of a run:
+
+\startnarrowtyping
+mkiv lua stats > loaded fonts: 2 files: latinmodern-math.otf (experimental), lmroman12-regular.otf
+\stopnarrowtyping
+
+The ignored flag signals the font name database builder to ignore the file. This
+means that the font can still be known as file, but that its (name based)
+properties are not collected. As you asked explicitly for a file, the file can
+still be loaded. You can use this trick to avoid issues with the database builder
+in case of a problematic file, but a real run will still try to load the file. After
+all, you get what you ask for. If loading and usage is successful you get at least
+the message reported at the end of the run.
+
+\stopsection
+
+\startsection[title=Analyzers]
+
+An \OPENTYPE\ font is kind of special in the sense that it provides some
+information on how to turn sequences of characters into sequences of glyphs. In
+fact, if all fonts had a reasonable repertoire of glyphs most of the information
+that concerns combining, remapping and shuffling the input and|/|or mapping onto
+glyphs could as well happen in the renderer. This means that fonts have many of
+their internal features tables in common, or more precisely could share many gsub
+related issues, if only there had been some predefined sets of substitutional
+features.
+
+So, for most of the time, a feature processor just does what the font demands and
+the font provides the information. There are however a few cases where font only
+provide part of the logic. Take for instance the \type {init}, \type {medi},
+\type {fina} and \type {isol} features that relate to positions in the word: the
+start, the end, in the middle or isolated. For these features to work the engine
+has to provide information about the state of a character (glyph) and this is where
+analysis kicks in. Just watch this:
+
+\startbuffer
+\definefontfeature
+ [default-with-analyze]
+ [default]
+ [script=latn,mode=node,
+ init=yes,medi=yes,fina=yes,isol=yes]
+
+\showotfcomposition
+ {dejavu-serif*default-with-analyze at 24pt}
+ {}
+ {I don't wanna know tha\utfchar{"300}t!}
+\stopbuffer
+
+\typebuffer
+
+In the tracer the different categories are colored. This kind of information is
+especially important for typesetting Arabic. Normally \CONTEXT\ can figure out
+itself when this is needed so you don't have to worry too much about this kind of
+additional actions.
+
+\blank \getbuffer \blank
+
+\stopsection
+
+\startsection[title=Processors]
+
+ \startnotabene
+ Todo.
+ \stopnotabene
+
+\stopsection
+
+\startsection[title=Optimizing]
+
+ \startnotabene
+ Todo.
+ \stopnotabene
+
+\stopsection
+
+\startsection[title=Tracing]
+
+There are a lot of tracing options in \MKIV, but most will never be seen by users. Most
+are enabled using the tracker mechanism. Some have a bit more visibility and have a dedicated
+command to trigger them.
+
+When something is going terribly wrong, you will always get a message but sometimes even an
+end|-|user has to request for more information. An example are missing characters. There are
+several ways to get them reported:
+
+\starttyping
+\enabletrackers[fonts.missing=replace]
+\enabletrackers[fonts.missing=remove]
+\enabletrackers[fonts.missing]
+\stoptyping
+
+For historic reasons we also have:
+
+\starttyping
+\checkcharactersinfont
+\removemissingcharacters
+\replacemissingcharacters
+\stoptyping
+
+which happens automatically when you enable the tracker. There is some extra
+overhead involved so you might want to turn on this feature on only if you really
+expect characters not to be present.
+
+Say that we use Latin Modern fonts and ask for some of the rare fractions:
+
+\startbuffer
+\definedfont[lmroman10-regular*default-with-missing at 10pt]
+a b c ½ ⅓ ¼ ⅕ ⅙ ⅛ Ɣ ɣ ʤ ʭ ʮ α β γ
+\stopbuffer
+
+\typebuffer
+
+\enabletrackers[fonts.missing=replace]
+We get this: \start \getbuffer \stop
+\removeunwantedspaces . \space
+In the log file you will find something like this:
+\par \disabletrackers[fonts.missing]
+
+\starttyping
+fonts > characters > start missing characters: lmroman10-regular.otf
+
+missing > U+00194 Ɣ LATIN CAPITAL LETTER GAMMA
+missing > U+00263 ɣ LATIN SMALL LETTER GAMMA
+missing > U+002A4 ʤ LATIN SMALL LETTER DEZH DIGRAPH
+missing > U+002AD ʭ LATIN LETTER BIDENTAL PERCUSSIVE
+missing > U+002AE ʮ LATIN SMALL LETTER TURNED H WITH FISHHOOK
+missing > U+003B1 α GREEK SMALL LETTER ALPHA
+missing > U+003B2 β GREEK SMALL LETTER BETA
+missing > U+003B3 γ GREEK SMALL LETTER GAMMA
+missing > U+02153 ⅓ VULGAR FRACTION ONE THIRD
+missing > U+02155 ⅕ VULGAR FRACTION ONE FIFTH
+missing > U+02159 ⅙ VULGAR FRACTION ONE SIXTH
+missing > U+0215B ⅛ VULGAR FRACTION ONE EIGHTH
+
+fonts > characters > stop missing characters
+\stoptyping
+
+If you're lucky your editor will use a font that shows the missing characters (dejavu
+monospace is a good candidate).
+
+The replacement characters can help you to locate the spots where something is missing
+so that an alternative can be considered. The replacements resemble the category
+of the missing character.
+
+\showmissingcharacterslegend
+
+You can call up this legend after loading an extra module:
+
+\starttyping
+\usemodule[s][fonts-missing]
+
+\showmissingcharacterslegend
+
+\showmissingcharacters
+\stoptyping
+
+The last command shows a detailed list of missing characters
+
+\showmissingcharacters
+
+Here the characters are shown, because we use a monospaced font that happens to
+have them. Of course this example uses characters that are rarely used and are
+unlikely to show up in future versions of the Latin Modern fonts.
+
+\startnotabene
+ Here a few more relevant trackers will be mentioned.
+\stopnotabene
+
+\stopsection
+
+\startsection[title=Discretionaries]
+
+% speed test:
+%
+% \edef\tufte{\cldloadfile{tufte}}
+% \enabledirectives[otf.alwaysdisc]
+% \testfeatureonce{100}{\setbox0\hbox{\tufte \smallcaps \tufte}}\elapsedtime\par
+% \disabledirectives[otf.alwaysdisc]
+% \testfeatureonce{100}{\setbox0\hbox{\tufte \smallcaps \tufte}}\elapsedtime\par
+
+\startbuffer
+\definedfont[cambria*default]
+12\discretionary
+ {3} {4} {5}%
+67\par
+12{\oldstyle\discretionary
+ {3} {4} {5}}%
+67\par
+12\discretionary
+ {3{\oldstyle3}} {{\oldstyle4}4} {5{\oldstyle5}5}%
+67\par
+\stopbuffer
+
+The font handler has to do some magick to get features working with and across
+discretionaries. To some extend you can use font switches inside discretionaries
+but for sure border cases are not dealt with. This works:
+
+\startlinecorrection[blank]
+\startcombination[nx=4,ny=1,location=top]
+ {\framed[align=normal]{\enabledirectives [otf.alwaysdisc]\setupwhitespace[line]\getbuffer}} {1}
+ {\framed[align=normal]{\enabledirectives [otf.alwaysdisc]\hsize1mm\getbuffer}} {2}
+ {\framed[align=normal]{\disabledirectives[otf.alwaysdisc]\setupwhitespace[line]\getbuffer}} {3}
+ {\framed[align=normal]{\disabledirectives[otf.alwaysdisc]\hsize1mm\getbuffer}} {4}
+\stopcombination
+\stoplinecorrection
+
+The first two examples have \type {otf.alwaysdisk} enabled, the last two have it
+disabled.
+
+\typebuffer
+
+\stopsection
+
+\startsection[title=Some remarks]
+
+If you talk about features and fonts it is not difficult to end up speaking
+\OPENTYPE . However, in \CONTEXT\ we use the term in a more general way, if only
+because we provide more features. In traditional \TEX\ we have a few features:
+ligatures, smallcaps and kerns, and to some extent we can see oldstyle numerals
+also as feature. It is however important to notice that in \OPENTYPE\ ligatures
+are just a synonym for combining multiple characters into on. From the user
+interface point of view these operations are grouped into \type {liga}, \type
+{dlig}, \type {clig} and \type {rlig} and for \TEX ies we have \type {tlig}. The
+distinction is not as clear as one might think: any feature can use the ligature
+builder. And as a consequence we see that happen too, for instance some fonts use
+\type {ccmp} for constructing mandatory ligatures.
+
+Some of these interpretations (or maybe even tricks) are side effects of for
+instance user interfaces. If one can for instance not turn on or off the \type
+{ccmp} feature, but can do that for \type {liga}, then one way to keep some
+ligatures in for instance letter spaced text, is to put them into \type {ccmp},
+assuming that this one will always be enabled. Eventually that then becomes a
+sort of standard. Personally I don't like such pseudo standards but we have to
+live with them.
+
+Another example of such a standard is the used of non breakable spaces to
+influence treatment of some Devanagari characters. Where \UNICODE\ has special
+characters to influence mechanisms that combine and replace characters, the lack
+of some triggers others to be used and eventually that becomes a standard.
+Similar ambiguities arise with math: we have no way to indicate math (while we do
+have ways to indicate a change in writing order).
+
+Talking of math, take \OPENTYPE\ math: at some point there is a draft, that then
+gets implemented in one word processor using one font, but omissions or
+imperfections that surface (maybe because more fonts and engines are developed)
+stay around because the initial implementation is published and frozen, simply
+because there are many users that stick to expectations. Where \TEX ies accept a
+few years of development, this is not true for commercial applications. \footnote
+{Of course \HTML\ is the biggest example of this: we're stuck forever with open
+tags without close tags, mixed uppercase and lowercase tags, attributes without
+value or values without quotes.}
+
+So, although there is without doubt progress, some annoyances stay. The \TEX\
+community has always been able to adapt, and this is one reason why a \LUA\
+implementation is nice: it gives room for experiments, extensions, variants, etc.
+Of course it also makes a bit more independent, although one may wonder if that
+matters any longer in a rapidly changing world. The original idea behind \TEX,
+that it should be useable for ages, will survive, but users might see more
+changes in a lifetime than foreseen when \TEX\ showed up.
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/fonts/fonts/fonts-formats.tex b/doc/context/sources/general/fonts/fonts/fonts-formats.tex
new file mode 100644
index 000000000..dc98ee486
--- /dev/null
+++ b/doc/context/sources/general/fonts/fonts/fonts-formats.tex
@@ -0,0 +1,873 @@
+% language=uk
+
+\startcomponent fonts-formats
+
+\environment fonts-environment
+
+\startchapter[title=Font formats][color=darkred]
+
+\startsection[title=Introduction]
+
+In this chapter the font formats as we know them will be introduced. The
+descriptions will be rather general but more details can be found in the
+appendix. Although in \MKIV\ we do support all these types eventually the focus
+will be on \OPENTYPE\ fonts but it does not hurt to see where we are coming from.
+
+\stopsection
+
+\startsection[title=Glyphs]
+
+A typeset text is mostly a sequence of characters turned into glyphs. We talk of
+characters when you input the text, but the visualization involves glyphs. When
+you copy a part of the screen in an open \PDF\ document or \HTML\ page back to
+your editor you end up with characters again. In case you wonder why we make this
+distinction between these two states we give an example.
+
+\startplacefigure [location=here,reference=fig:character-glyph,title=From characters to glyphs.]
+ \startcombination
+ {\color[maincolor]{\definedfont[Serif*default at 30pt]affiliation}} {upright}
+ {\color[maincolor]{\definedfont[SerifItalic*default at 30pt]affiliation}} {italic}
+ \stopcombination
+\stopplacefigure
+
+We see here that the shape of the \type {a} is different for an upright serif and
+an italic. We also see that in \type {ffi} there is no dot on the \type {i}. The
+first case is just a stylistic one but the second one, called a ligature, is
+actually one shape. The 11 characters are converted into 9 glyphs. Hopefully the
+final document format carries some extra information about this transformation so
+that a cut and paste will work out well. In \PDF\ files this is normally the
+case. In this document we will not be too picky about the distinction as in most
+cases the glyph is rather related to the character as one knows it.
+
+So, a font contains glyphs and it also carries some information about
+replacements. In addition to that there needs to be at least some information
+about the dimensions of them. Actually, a typesetting engine does not have to
+know anything about the actual shape at all.
+
+\startplacefigure [location=here,reference=fig:glyph-dimension-normal,title=The boundingbox of some normal glyphs.]
+ \startcombination[9*1]
+ {\ruledhbox{\color[maincolor]{\definedfont[Serif*default at 30pt]a}}} {}
+ {\ruledhbox{\color[maincolor]{\definedfont[Serif*default at 30pt]b}}} {}
+ {\ruledhbox{\color[maincolor]{\definedfont[Serif*default at 30pt]g}}} {}
+ {\ruledhbox{\color[maincolor]{\definedfont[Serif*default at 30pt]l}}} {}
+ {\ruledhbox{\color[maincolor]{\definedfont[Serif*default at 30pt]q}}} {}
+ {\ruledhbox{\color[maincolor]{\definedfont[Serif*default at 30pt].}}} {}
+ {\ruledhbox{\color[maincolor]{\definedfont[Serif*default at 30pt];}}} {}
+ {\ruledhbox{\color[maincolor]{\definedfont[Serif*default at 30pt]?}}} {}
+ {\ruledhbox{\color[maincolor]{\definedfont[Serif*default at 30pt]ffi}}} {}
+ \stopcombination
+\stopplacefigure
+
+\startplacefigure [location=here,reference=fig:glyph-dimension-italic,title=The boundingbox of some italic glyphs.]
+ \startcombination[9*1]
+ {\ruledhbox{\color[maincolor]{\definedfont[SerifItalic*default at 30pt]a}}} {}
+ {\ruledhbox{\color[maincolor]{\definedfont[SerifItalic*default at 30pt]b}}} {}
+ {\ruledhbox{\color[maincolor]{\definedfont[SerifItalic*default at 30pt]g}}} {}
+ {\ruledhbox{\color[maincolor]{\definedfont[SerifItalic*default at 30pt]l}}} {}
+ {\ruledhbox{\color[maincolor]{\definedfont[SerifItalic*default at 30pt]q}}} {}
+ {\ruledhbox{\color[maincolor]{\definedfont[SerifItalic*default at 30pt].}}} {}
+ {\ruledhbox{\color[maincolor]{\definedfont[SerifItalic*default at 30pt];}}} {}
+ {\ruledhbox{\color[maincolor]{\definedfont[SerifItalic*default at 30pt]?}}} {}
+ {\ruledhbox{\color[maincolor]{\definedfont[SerifItalic*default at 30pt]ffi}}} {}
+ \stopcombination
+\stopplacefigure
+
+The rectangles around the shapes \in {figure} [fig:glyph-dimension-normal] and \in
+{figure} [fig:glyph-dimension-italic] are called boundingbox. The dashed line
+reflects the baseline where they eventually are aligned onto next to each other.
+The amount above the baseline is called height, and below is called depth. The
+piece of the shape above the baseline is the ascender and the bit below the
+descender. The width of the bounding box is not by definition the width of the
+glyph. In \TYPEONE\ and \OPENTYPE\ fonts each shape has a so called advance width
+and that is the one that will be used.
+
+\usemodule[fnt-40]
+
+\startplacefigure [location=here,reference=fig:glyph-kerns,title={Kerning in Latin Roman, Cambria, Pagella and Dejavu.}]
+ \scale[width=\textwidth]{\startcombination[1*4]
+ {\color[maincolor]{\definedfont[name:lmroman10-regular*default sa 1]\ShowKernedHBox{Very often glyphs get very small spaces inserted horizontally.}}} {}
+ {\color[maincolor]{\definedfont[name:cambria*default sa 1]\ShowKernedHBox{Very often glyphs get very small spaces inserted horizontally.}}} {}
+ {\color[maincolor]{\definedfont[name:texgyrepagellaregular*default sa 1]\ShowKernedHBox{Very often glyphs get very small spaces inserted horizontally.}}} {}
+ {\color[maincolor]{\definedfont[name:dejavuserif*default sa 0.9]\ShowKernedHBox{Very often glyphs get very small spaces inserted horizontally.}}} {}
+ \stopcombination}
+\stopplacefigure
+
+Another traditional property of a font is kerning. In \in {figure}
+[fig:glyph-kerns] you see this in action. These examples
+demonstrate that not all fonts need (or provide) the same kerns
+(in points).
+
+So, as a start, we have now met a couple of properties of a font.
+They can be summarized as follows:
+
+\starttabulate[|l|p|]
+\NC mapping to glyphs \EQ characters are represented by a shapes that have recognizable
+ properties so that readers know what they mean \NC \NR
+\NC ligature building \EQ a sequence of characters gets mapped onto one glyph \NC \NR
+\NC dimensions \EQ each glyph has a width, height and depth \NC \NR
+\NC inter-glyph kerning \EQ optionally a bit of positive or negative space has to be inserted between glyphs \NC \NR
+%NC italic correction \EQ a correction is applied between an oblique shape and what follows \NC \NR
+\stoptabulate
+
+Regular font kerning is hardly noticeable and improves the overall look of the
+page. Typesetting applications sometimes are capable of inserting additional
+spaces between shapes. This more excessive kerning is not that much related to
+the font and is used for special purposes, like making a snippet of text stand
+out. In \CONTEXT\ this kind of kerning is available but it is a font independent
+feature. Keep in mind that when applying that kind of rather visible kerning
+you'd better not have ligatures and fancy replacements enabled as \CONTEXT\
+already tries to deal with that as good as possible.
+
+\stopsection
+
+\startsection[title=The basic process]
+
+In \TEX\ a font is an abstraction: the engine only needs to know about the
+mapping from characters to glyphs, what the width, height and depth is, what
+sequences need to be translated into ligatures and when kerning has to be
+applied. If for the moment we forget about math, these are all the properties
+that matter and this is what the \TEX\ font metric files that we see in the next
+section provide.
+
+Because one of the principles behind \LUATEX\ is that the core engine (the
+binary) stays small and that new functionality is provided in \LUA\ code, the
+font subsystem largely looks like it always has been. As users will normally use
+a macro package most of the loading will be hidden from the user. It is however
+good to give a quick overview of how for instance \PDFTEX\ deals with fonts using
+traditional metric files.
+
+\startFLOWchart[pdftex]
+ \startFLOWcell
+ \name {source}
+ \location {1,1}
+ \shape {action}
+ \text {input}
+ \connection [rl] {parser}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {parser}
+ \location {2,1}
+ \shape {action}
+ \text {characters}
+ \connection [rl] {builder}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {builder}
+ \location {3,1}
+ \shape {action}
+ \text {glyphs}
+ \connection [rl] {backend}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {backend}
+ \location {4,1}
+ \shape {action}
+ \text {subset}
+ \stopFLOWcell
+\stopFLOWchart
+
+\startplacefigure [location=here,reference=fig:tfm-pdftex,title={Several translation steps in a traditonal \TEX\ flow.}]
+ \FLOWchart[pdftex]
+\stopplacefigure
+
+The input (bytes) gets translated into characters by the input parser. Normally
+this is a one|-|to|-|one translation but there are examples of some translation
+taking place. You can for instance make characters active and give them a
+meaning. So, the eight bit represention of an editors code page \type {ë} can
+become something else internally, for instance a regular \type {e} with an \type
+{¨} overlayed. It can also become another character, which in the code page
+would be shown as \type {á} but the user will not know this as by then this byte
+is already tokenized. Another example is multibyte translation, for instance
+\UTF\ sequences can get remapped to something that is known internally as being a
+character of some kind. The \LUATEX\ engine expects \UTF\ so a macro package has
+to make sure that translation to this encoding happens beforehand, for instance
+using a callback that intercepts the input from file. \footnote {In \CONTEXT\ we
+talk of input regimes and these can be mixed, although in practice most users
+will stick to \UTF\ and never use regimes.}
+
+So, the input character (sequence) becomes tokens representing a character. From
+these tokens \TEX\ will start building a (linked) node list where each character
+becomes a node. In this node there is a reference to the current font. If you
+know \TEX\ you will understand that a list can have more than characters: there
+can be skips, kerns, rules, references to images, boxes, etc.
+
+At some point \TEX\ will handle this list over to a routine that will turn them
+into something that resembles a paragraph or otherwise snippet of text. In that
+stage hyphenation kicks in, ligatures get built and kerning is added. Character
+references become glyph indices. This list can finally be broken into lines.
+
+It is no secret that \TEX\ can box and unbox material and that after unboxing
+some new formatting has to happen. The traditional engine has some optimizations
+that demand a partial reconstruction of the original list but in \LUATEX\ we
+removed this kind of optimization so there the process is somewhat simpler. We
+will see more of that later.
+
+When \TEX\ ships out a page, the backend will load the real font data and merge
+that into the final output. It will now take the glyph index and build the right
+data structures and references to the real font. As a font gets subset only the
+used glyphs end up in the final output.
+
+There is one tricky aspect involved here: re|-|encoding. In so called map files
+one can map a specific metric filename onto a real font name. One can also
+specify an encoding vector that tells what a given index really refers to. This
+makes it possible to use fonts that have more than 256 glyphs and refer to any of
+them. This is also the trick that makes it possible to use \TRUETYPE\ fonts in
+\PDFTEX: the backend code filters the right glyphs from the font, remapping
+\TEX's glyph indices onto real entries in the font happens via the encoding
+vector. In \in {figure} [fig:tfm-bytes] we show a possible route for input byte
+68.
+
+\startFLOWchart[bytes]
+ \startFLOWcell
+ \name {source}
+ \location {1,1}
+ \shape {action}
+ \text {bytes (68)}
+ \connection [rl] {parser}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {parser}
+ \location {2,1}
+ \shape {action}
+ \text {bytes (31)}
+ \connection [rl] {builder}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {builder}
+ \location {3,1}
+ \shape {action}
+ \text {index (31)}
+ \connection [rl] {backend}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {backend}
+ \location {4,1}
+ \shape {action}
+ \text {index (88)}
+ \stopFLOWcell
+\stopFLOWchart
+
+\startplacefigure [location=here,reference=fig:tfm-bytes,title={From bytes to indices.}]
+ \FLOWchart[bytes]
+\stopplacefigure
+
+As \LUATEX\ carries much of the bagage of older engines, you can still do it this
+way but in \CONTEXT\ \MKIV\ we have made our live much simpler: we use unicode as
+much as possible. This means that we effectively have removed two steps (see \in
+{figure} [fig:tfm-luatex]).
+
+\startFLOWchart[luatex]
+ \startFLOWcell
+ \name {source}
+ \location {1,1}
+ \shape {action}
+ \text {input}
+ \connection [rl] {builder}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {builder}
+ \location {2,1}
+ \shape {action}
+ \text {glyphs}
+ \stopFLOWcell
+\stopFLOWchart
+
+\startplacefigure [location=here,reference=fig:tfm-luatex,title={Simplified mapping in \LUATEX.}]
+ \FLOWchart[luatex]
+\stopplacefigure
+
+There is of course still some work to do for the backend, like subsetting, but
+the nasty dependency on the input encoding, font encoding (that itself relates to
+hyphenation) and backend re|-|encoding is gone. But keep in mind that the
+internal data structure of the font is still quite traditional.
+
+Before we move on to font formats I like to point out that there is no space in
+\TEX. Spaces in the input are converted into glue, either or not with some
+stretch and|/|or shrink. This also means that accessing character 32 in
+traditional \TEX\ will not end up as space in the output.
+
+\stopsection
+
+\startsection[title=\TEX\ metrics]
+
+\appendixdata{\in[fontdata:tfm]}
+\appendixdata{\in[fontdata:vf]}
+
+Traditional font metrics are packaged in a binary format. Due to the limitations
+of that time a font has at most 256 characters. In books dedicated to \TEX\ you
+will often find tables that show what glyphs are in a font, so we will not repeat
+that here as after all we got rid of that limitation in \LUATEX.
+
+Because 256 is not that much, especially when you mix many scripts and need lots
+of symbols from the same font, there are quite some encodings used in traditional
+\TEX, like \type {texnansi}, \type {ec} and \type {qx}. When you use \LUATEX\
+exclusively you can do with way less font files. This is easier for users,
+especially because most of those files were never used anyway. It's interesting
+to notice that some of the encodings contain symbols that are never used or used
+only once in a document, like the copyright or registered symbols. They are often
+accessed by symbolic names and therefore easily could have been omitted and
+collected in a dedicated symbol font thereby freeing slots for more useful
+characters anyway. The lack of coverage is probably one of the reasons why new
+encodings kept popping up. In the next table you see how many files are involved
+in Latin Modern which comes in a couple of design sizes. \footnote {The original
+Computer Modern fonts have \METAFONT\ source files and (runtime) generated bitmap
+files in whatever resolutions are needed for previewing and printing. The
+\TYPEONE\ follow|-|up came in several sets, organized by language support. The
+Latin Modern fonts have a few more weights and variants than Computer Modern.}
+
+\starttabulate[|l|c|r|r|r|]
+\HL
+\NC \bf font format \NC \bf type \NC \bf \# files \NC \bf size in bytes \NC \bf \CONTEXT \NC \NR
+\HL
+\NC type 1 \NC tfm \NC 380 \NC 3.841.708 \NC \NC \NR
+\NC \NC afm \NC 25 \NC 2.697.583 \NC \NC \NR
+\NC \NC pfb \NC 92 \NC 9.193.082 \NC \NC \NR
+\NC \NC enc \NC 15 \NC 37.605 \NC \NC \NR
+\NC \NC map \NC 9 \NC 42.040 \NC \NC \NR
+\HL[darkgray]
+\NC \NC \NC 521 \NC 15.812.018 \NC mkii \NC \NR
+\HL
+\NC opentype \NC otf \NC 73 \NC 8.224.100 \NC mkiv \NC \NR
+\HL
+\stoptabulate
+
+A \TFM\ file can contain so called italic corrections. This is an additional kern
+that can be added after a character in order to get better spacing between an
+italic shape and an upright one. As this is manual work, it's a not that advanced
+mechanism, but in addition to width, height, depth, kerns and ligatures it is
+nevertheless a useful piece of information. But, it's a rather \TEX\ specific
+quantity.
+
+Since \TEX\ showed up many fonts have been added. In addition support for
+commercial fonts was provided. In fact, for that to happen, one only needs
+accompanying metric files for \TEX\ itself and map files and encoding vectors
+for the backend. Because a metric file also has some general information, like
+spacing (including stretch and shrink), the ex|-|height and em|-|width, this
+means that sometimes guesses must be made when the original font does not come
+with such parameters.
+
+At some point virtual fonts were introduced. In a virtual font a \TFM\ file has
+an accompanying \VF\ file. In that file each glyph has a specification that tells
+where to find the real glyph. It is even possible to construct glyphs from other
+glyphs. In traditional \TEX\ this only concerns the backend, which in \PDFTEX\ is
+built in. In \LUATEX\ this mechanism is integrated into the frontend which means
+that users can construct such virtual fonts themselves. We will see more of that
+later, but for now it's enough to know that when we talk about the representation
+of font (the \TFM\ table) in \LUATEX, this includes virtual functionality.
+
+An important limitation of \TFM\ files cq.\ traditional \TEX\ is that the number
+of depths and heights is limited to 16 each. Although this results in somewhat
+inaccurate dimensions in practice this gets unnoticed, if only because many
+designs have some consistency in this. On the other hand, it is a limitation when
+we start thinking of accents or even multiple accents which lead to many more
+distinctive heights and depths.
+
+Concerning ligatures we can remark that there are quite some substitutions
+possible although in practice only the multiple to one replacement has been used.
+
+Some fonts that are used in \TEX\ started out as bitmaps but rather soon
+\TYPEONE\ outline fonts became the fashion. These are supported using the map
+files that we will discuss later. First we look into \TYPEONE\ fonts.
+
+\stopsection
+
+\startsection[title=\TYPEONE]
+
+\appendixdata{\in[fontdata:afm]}
+\appendixdata{\in[fontdata:enc]}
+\appendixdata{\in[fontdata:map]}
+
+For a long time \TYPEONE\ fonts have dominated the scene. These are \POSTSCRIPT\
+fonts that can have more that 256 glyphs in the file that defines the shapes, but
+only 256 of them can be used at one time. Of course there can be multiple subsets
+active in one document.
+
+In traditional \TEX\ a \TYPEONE\ font is used by making a \TFM\ file from a so
+called Adobe metric file (\AFM) that come with such a font. There are several
+tool chains for doing this and \CONTEXT\ \MKII\ ships with one that can be of
+help when you need to support commercial fonts. Projects like the Latin Modern
+Fonts and \TEX\ Gyre have normalized a whole lot of fonts that came in several
+more or less complete encodings into a consistent package of \TYPEONE\ fonts.
+This already simplified live a lot but still users had to choose a suitable input
+and font encoding for their language and|/|or script. As \TEX\ only cares about
+metrics and not about the rendering, it doesn't consider \TYPEONE\ fonts as
+something special. Also, as \TEX\ and \POSTSCRIPT\ were developed about the same
+time support for \TYPEONE\ fonts is rather present in \TEX\ distributions.
+
+You can still follow this route but for \CONTEXT\ \MKIV\ this is no longer the
+recommended way because there we have changed the whole subsystem to use
+\UNICODE. As a result we no longer use \TFM\ files derived from \AFM\ files, but
+directly interpret the \AFM\ data. This not only removes the 256 limitation, but
+also brings more resolution in height and depth as we no longer have at most 16
+alternatives. There can also be more kerns. Of course we need some heuristics to
+determine for instance the spacing but that is not different from former times.
+
+Because most \TEX\ users don't use commercial fonts, they will not notice that
+\CONTEXT\ \MKIV\ treats \TYPEONE\ fonts this way. One reason is that the free
+fonts also come as wide fonts in \OPENTYPE\ format and whenever possible
+\CONTEXT\ prefers \OPENTYPE\ over \TYPEONE\ over \TFM.
+
+In the beginning \LUATEX\ only could load a \TFM\ file, which is why loading
+\AFM\ files is implemented in \LUA. Later, when the \OPENTYPE\ loaded was added,
+loading \PFB\ and \AFM\ files also became possible but it's slower and we see no
+reason to rewrite the current code in \CONTEXT. We also do a couple of extra
+things when loading such a file. As more \TYPEONE\ fonts move on to \OPENTYPE\ we
+don't expect that much usage anyway.
+
+\stopsection
+
+\startsection[title=\OPENTYPE]
+
+\appendixdata{\in[fontdata:otf]}
+
+When an engine can deal with \UNICODE\ directly it also means that internally it
+uses pretty large numbers for storing characters and glyph indices. The first
+\TEX\ descendent that went wide was \OMEGA, later replaced by \ALEPH. However, this
+engine never took off and still used its own extended \TFM\ format: \OFM. In fact,
+as \LUATEX\ uses some of the \ALEPH\ code, it can also use these extended metric
+files but I don't think that there are any useful fonts around so we can forget
+about this.
+
+We use the term \OPENTYPE\ for a couple of font formats that share the same
+principles: \OPENTYPE\ (\OTF), \TRUETYPE\ (\TTF) and \TRUETYPE\ containers
+(\TTC). The \LUATEX\ font reader presents them in a similar format. In the case
+of a \TRUETYPE\ container, one does not load the whole font but selects an
+instance from it. Internally an \OPENTYPE\ font can have the glyphs organized in
+subfonts.
+
+The first \TEX\ descendent to really go wide from front to back is \XETEX. This
+engine can use \OPENTYPE\ fonts directly and for a whole category of users this
+opened up a new world. Hoever, it is still mostly a traditional engine. The
+transition from characters to glyphs is accomplished by external libraries, while
+in \LUATEX\ we code in \LUA. This has the disadvantage that it is slower
+(although that depends on the job) but the advantage is that we have much more
+control and can extend the font handler as we like.
+
+An \OPENTYPE\ font is much more complex than a \TYPEONE\ one. Unless it is a
+quick and dirty converted existing font, it will have more glyphs to start with.
+Quite likely it will have kerns and ligatures too and of course there are
+dimensions. However, there is no concept of a depth and height. These need to be
+deduced from the bounding box instead. There is an advance width. This means that
+we can start right away using such fonts if we map those properties onto the
+\TFM\ table that \LUATEX\ expects.
+
+But there is more, take ligatures. In a traditional font the sequence \type {ffi}
+always becomes a ligature, given that the font has such a glyph. In \LUATEX\
+there is a way to disable this mechanism, which is sometimes handy when dealing
+with mono|-|spaced fonts in verbatim. It's pretty hard to disable that. For
+instance one option is to insert kerns manually. In an \OPENTYPE\ font ligatures
+are collected in a so called feature. There can be many such features and even
+kerning is a feature. Other examples are old style numerals, fractions,
+superiors, inferiors, historic ligatures and stylistic alternates.
+
+\starttabulate[|lT|l|l|l|l|]
+\NC \type{onum} \NC \ruledhbox{\maincolor\DemoOnumLM\char45 1}
+ \NC \ruledhbox{\maincolor\DemoOnumLM1234567890}
+ \NC \ruledhbox{\maincolor\DemoOnumLM\char"A2}
+ \NC \ruledhbox{\maincolor\DemoOnumLM\char"24} \NC \NR
+%NC \type{lnum} \NC \ruledhbox{\maincolor\DemoLnumLM\char45 1}
+% \NC \ruledhbox{\maincolor\DemoLnumLM1234567890}
+% \NC \ruledhbox{\maincolor\DemoLnumLM\char"A2}
+% \NC \ruledhbox{\maincolor\DemoLnumLM\char"24} \NC \NR
+\NC \type{tnum} \NC \ruledhbox{\maincolor\DemoTnumLM\char45 1}
+ \NC \ruledhbox{\maincolor\DemoTnumLM1234567890}
+ \NC \ruledhbox{\maincolor\DemoTnumLM\char"A2}
+ \NC \ruledhbox{\maincolor\DemoTnumLM\char"24} \NC \NR
+\NC \type{pnum} \NC \ruledhbox{\maincolor\DemoPnumLM\char45 1}
+ \NC \ruledhbox{\maincolor\DemoPnumLM1234567890}
+ \NC \ruledhbox{\maincolor\DemoPnumLM\char"A2}
+ \NC \ruledhbox{\maincolor\DemoPnumLM\char"24} \NC \NR
+\stoptabulate
+
+To this all you need to add that features operate in two dimensions: languages
+and scripts. This means that when ligatures are enabled for Dutch the \type {ij}
+sequence becomes a single glyph but for German it gets mapped onto two glyphs.
+And, to make it even more complex, a substitution can depend on circumstances,
+which means that for Dutch \type {fijn} becomes \type {f ij n} but \type {fiets}
+becomes \type {fi ets}. It will be no surprise that not all \OPENTYPE\ fonts come
+with a complete and rich repertoire of rules. To make things worse, there can be
+rules that turn \type {1/2} into one glyph, or transfer the numbers into superior
+and inferior alternatives, but leaves us with an unacceptable rendered \type
+{1/a}, given that the \type {frac} features is enabled. It looks like features
+like this are to be applied to a manually selected range of characters.
+
+The fact that an \OPENTYPE\ font can contain many features and rules to apply
+them makes it possible to typeset scripts like Arabic. And this is where it gets
+vague. A generic \OPENTYPE\ sub|-|engine can do clever things using these rules,
+but if you read the specification for some scripts additional intelligence has to
+be provided by the typesetting engine.
+
+While users no longer have to care about encodings, map files and back|-|end
+issues, they do have to carry knowledge about the possibilities and limitations
+of features. Even worse, he or she needs to be aware that fonts can have bugs.
+Also, as font vendors have no tradition of providing updates this is something
+that we might need to take care of ourselves by tweaking the engine.
+
+One of the problems with the transition from \TYPEONE\ to \OPENTYPE\ is that font
+designers can take an existing design and start from that basic repertoire of
+shapes. If such a design had oldstyle figures only, there is a good chance that
+this will be the case in the \OPENTYPE\ variant too. However, such a default
+interferes with the fact that the \type {onum} feature is one that we explicitly
+have to enable. This means that writing a generic style where a font is later
+plugged in becomes somewhat messy if it assumes that features need to be turned
+on.
+
+\TEX\ users expect more control, which means that in practice just an \OPENTYPE\
+engine is not enough, but for the average font the \TEX\ model using the
+traditional approach still is quite acceptable. After all, not all users use
+complex scripts or need advanced features. And, in practice most readers don't
+notice the difference anyway.
+
+\stopsection
+
+\startsection[title=\LUA]
+
+\appendixdata{\in[fontdata:lua]}
+
+As mentioned support for virtual fonts is built into \LUATEX\ and loading the so
+called \VF\ files happens when needed. However, that concerns traditional fonts
+that we already covered. In \CONTEXT\ we do use the virtual font mechanism for
+creating missing glyphs out of existing ones or add fallbacks when this is not
+possible. But this is not related to some kind of font format.
+
+In 2010 and 2011 the first public \OPENTYPE\ math fonts showed up that replace
+their \TYPEONE\ originals. In \CONTEXT\ we already went forward and created
+virtual \UNICODE\ fonts out of traditional fonts. Of course eventually the
+defaults will change to the \OPENTYPE\ alternatives. The specification for such a
+virtual font is given in \LUA\ tables and therefore you can consider \LUA\ to be
+a font format as well. In \CONTEXT\ such fonts can be defined in so called
+goodies files. As we use these files for much more tuning, we come back to that
+in a later chapter. In a virtual font you can mix real \TYPEONE\ fonts and real
+\OPENTYPE\ fonts using whatever metrics suit best.
+
+An extreme example is the virtual \UNICODE\ Punk font. This font is defined in
+the \METAPOST\ language (derived from Don Knuths \METAFONT\ sources) where each
+glyph is one graphic. Normally we get \POSTSCRIPT, but in \LUATEX\ we can also
+get output in a comparable \LUA\ table. That output is converted to \PDF\
+literals that become part of the virtual font definitions and these eventually
+end up in the \PDF\ page stream. So, at the \TEX\ end we have regular (virtual)
+characters and all \TEX\ needs is their dimensions, but in the \PDF\ each glyph
+is shown using drawing operations. Of course the now available \OPENTYPE\ variant
+is more efficient, but it demonstrates the possibilities.
+
+\stopsection
+
+\startsection[title=Files]
+
+We summarize these formats in the following table where we explain what the file
+suffixes stand for:
+
+\starttabulate[|Tl|p|]
+\HL
+\NC tfm \NC This is the traditional \TEX\ font metric file format and it reflects
+ the internal quantities that \TEX\ uses. The internal data structures
+ (in \LUATEX) are an extension of the \TFM\ format. \NC \NR
+\NC vf \NC This file contains information about how to construct and where to
+ find virtual glyphs and is meant for the backend. With \LUATEX\ this
+ format gets more known. \NC \NR
+\NC pk \NC This is the bitmap format used for the first generation of \TEX\
+ fonts but the typesetter never deals with them. Bitmap files are more
+ or less obselete. \NC \NR
+\HL
+\NC ofm \NC This is the \OMEGA\ variant of the \type {tfm} files that caters for
+ larger fonts. \NC \NR
+\NC ovf \NC This is the \OMEGA\ variant of the \type {vf}. \NC \NR
+\HL
+\NC pfb \NC In this file we find the glyph data (outlines) and some basic
+ information about the font, like name|-|to|-|index mappings. A
+ differently byte|-|encoded variant of this format is \type {pfa}.\NC
+ \NR
+\NC afm \NC This file accompanies the \type {pfb} file and provides additional
+ metrics, kerns and information about ligatures. A binary variant of
+ this is the \PFA\ format. For \MSWINDOWS\ there is a variant that has the
+ \type {pfm} suffix. \NC \NR
+\NC map \NC The backend will consult this file for mapping metric file names onto
+ real font names. \NC \NR
+\NC enc \NC The backend will include (and use) this encoding vector to map
+ internal indices to font indices using glyph names, if needed. \NC
+ \NR
+\HL
+\NC otf \NC This binary format describes not only the font in terms of metrics,
+ features and properties but also contains the shapes. \NC \NR
+\NC ttf \NC This is the \MICROSOFT\ variant of \OPENTYPE. \NC \NR
+\NC ttc \NC This is the \MICROSOFT\ container format that combines multiple fonts
+ in one. \NC \NR
+\HL
+\NC fea \NC A (\FONTFORGE) feature definition file. Such a file can be loaded and
+ applied to a font. This is no longer supported in \CONTEXT\ as we have
+ other means to achieve the same goals. \NC \NR
+\NC cid \NC A glyph index (name) to \UNICODE\ mapping file that is referenced
+ from an \OPENTYPE\ font and is shared between fonts. \NC \NR
+\HL
+\NC lfg \NC These are \CONTEXT\ specific \LUA\ font goodie files providing
+ additional information. \NC \NR
+\HL
+\stoptabulate
+
+If you look at how files are organized in a \TEX\ distribution, you will notice
+that these files all get their own place. Therefore adding a \TYPEONE\ font to
+the distribution is not that trivial if you want to avoid clashes. Also, files
+are simply not found when they are not in the right spot. Just to mention a few
+paths:
+
+\starttyping
+<root>/fonts/tfm/vendor/typeface
+<root>/fonts/vf/vendor/typeface
+<root>/fonts/type1/vendor/typeface
+<root>/fonts/truetype/vendor/typeface
+<root>/fonts/opentype/vendor/typeface
+<root>/fonts/fea
+<root>/fonts/cid
+<root>/fonts/dvips/enc
+<root>/fonts/dvips/map
+\stoptyping
+
+There can be multiple roots and the right locations are specified in a
+configuration file. Currently all engines can use the \DVIPS\ encoding and map
+files, so luckily we don't need to duplicate this. For some reason \TRUETYPE\ and
+\OPENTYPE\ fonts have different locations and you need to be aware of the fact
+that some fonts come in both formats (just to confuse users) so you might end up
+with conflicts.
+
+In \CONTEXT\ we try to make live somewhat easier by also supporting a simple path
+structure:
+
+\starttyping
+<root>/fonts/data/vendor/typeface
+\stoptyping
+
+This way files are kept together and installing commercial fonts is less complex
+and error prone. Also, in practice we only have one set of files now: one of the
+other \OPENTYPE\ formats.
+
+If you want to see the difference between a traditional (\PDFTEX\ or \XETEX\ plus
+\CONTEXT\ \MKII) setup or a modern one (\LUATEX\ with \CONTEXT\ \MKIV) you can
+install the \CONTEXT\ suite (formerly known as minimals). If you explicitly
+choose for a \LUATEX\ only setup, you will notice that far less files get
+installed.
+
+\stopsection
+
+\startsection[title=Text]
+
+This is not an in|-|depth explanation of how to define and load fonts in
+\CONTEXT. First of all this is covered in other manuals, but more important is
+that we assume that the reader is already familiar with the way \CONTEXT\ deals
+with fonts. Therefore we limit ourselves to some remarks and expand on this a bit
+in later chapters.
+
+The font subsystem has evolved over years and when you look at the low level code
+you will probably find it complex. This is true, although in some aspects it is
+not as complex as in \MKII\ where we also had to deal with encodings due to the
+eight bit limitations. In fact, setting up fonts is easier due the fact that we
+have less files to deal with.
+
+The main properties of a (modern) font subsystem for typesetting text are the
+following:
+
+\startitemize[n]
+ \startitem
+ We need to be able to switch the look and feel efficiently and
+ consistently, for instance going from regular to bold or italic. So,
+ when we load a font family we not only load one file, but often
+ at least four: regular, bold, italic (oblique) and bolditalic
+ (boldoblique).
+ \stopitem
+ \startitem
+ When we change the size we also need to make sure that these related
+ sets are changed accordingly. You really want the bold shapes to scale
+ along with the regular ones.
+ \stopitem
+ \startitem
+ Shapes are organized in serif, sans serif, mono spaced and math and for
+ proper working of a typesetter that has math all over you need always
+ need the math. Again, when you change size, all these shapes need to
+ scale in sync.
+ \stopitem
+ \startitem
+ In one document several families can be combined so the subsystem should
+ make it possible to switch from one to the other without too much
+ overhead.
+ \stopitem
+ \startitem
+ Because section heads and other structural elements have their own sizes
+ there has to be a consistent way to deal with that. It should also be
+ possible to specify exceptions for them.
+ \stopitem
+\stopitemize
+
+In the next chapters we will cover some details, for instance font features. You
+can actually control these when setting up a body font, simply by redefining
+the \type {default} feature set, but not all features are dealt with this way.
+So let's continue the demands put on a font subsystem.
+
+\startitemize[continue]
+ \startitem
+ Sometimes inter|-|character kerning is needed. In \CONTEXT\ this is not a
+ property of a font because glyphs can be mixed with basically anything.
+ This kind of features is applied independent of a font.
+ \stopitem
+ \startitem
+ The same is true for casing (like uppercasing and such) which is not
+ related to a font but applied to a selected (or marked) piece of the
+ input stream.
+ \stopitem
+ \startitem
+ Using so called \quotation {small caps} or \quotation {old style}
+ numerals or \unknown\ can be dealt with by setting the default features
+ but often these are applied selectively. As these are applied using the
+ information in a font they do belong to the font subsystem but in
+ practice they can be seen as independent (assuming that the font supports
+ them at all).
+ \stopitem
+ \startitem
+ Protrusion (into margins) and expansion (to improve whitespace) are
+ applied to the font at load time because the engine needs to know about
+ them. But they two can selectively be turned on and off. They are more
+ related to line break handling than font defining.
+ \stopitem
+ \startitem
+ Slanting (to fake oblique) and expanding (to fake bold) are regular
+ features but are applied to the font because the engine needs to know
+ about them. They permanently influence the shape.
+ \stopitem
+\stopitemize
+
+We will discuss these in this manual too. What we will not discuss in depth is
+spacing, even when it depends on the (main body) font size. These use properties
+of fonts (like the ex|-|height or em|-|width and maybe the width of the space,
+but normally they are controlled by the spacing subsystem. We will however
+mention some rather specific possibilities:
+
+\startitemize[continue]
+ \startitem
+ The \CONTEXT\ font subsystem provides ways to combine multiple fonts
+ into one.
+ \stopitem
+ \startitem
+ You can construct artificial fonts, using existing fonts or \METAPOST\
+ graphics.
+ \stopitem
+ \startitem
+ Fonts can be fixed (dimensions) and completed (for instance accented
+ characters) when loading/
+ \stopitem
+ \startitem
+ There are extensive tracing options, not only for applied features but
+ also for loading, checking etc. There is a set of styles that can be
+ used to study fonts.
+ \stopitem
+\stopitemize
+
+Sometimes users ask for very special trickery and it no surprise then that some
+of that is now widely know (or even discussed in detail). When we get notice of
+that we can mention it in this manual.
+
+So how does this all relate to font formats? We mentioned that when loading we
+basically load some four files per family (and more if we use specific fonts for
+titling). These files just provide the data: metric information, shapes and ways
+to remap characters (or sequences) into glyphs, either of not positioned relative
+to each other. In traditional \TEX\ only dimensions, kerns and ligatures
+mattered, but in nowadays we also deal with specific \OPENTYPE\ features. But
+still, as you can deduce from the above, this is only part of the story. You need
+a complete and properly integrated system. It is no big deal to set up some
+environment that uses font files to achieve some typesetting goal, but to provide
+users with some consistent and extensible system is a bit more work.
+
+There are basically three font formats: good old bitmaps, \TYPEONE\ and
+\OPENTYPE. All need to be supported and expectations are that we also support
+their features. But is should be noticed that whatever font you use, the quality
+of the outcome depends on what information the font can provide. We can improve
+processing but are often stuck with the font. There are many thousands of
+fonts out there and we need to be able to use them all.
+
+\stopsection
+
+\startsection[title=Math]
+
+In the previous section we already mentioned math fonts. The fonts are just one
+aspect of typesetting math and math fonts are special in the sense that they have
+to provide the relevant information. For instance a parenthesis comes in several
+sizes and at some point turns in a symbol made out of pieces (like a top curve,
+middle lines and bottom curve) that overlap. The user never sees such details. In
+fact, there are ot that many math fonts and these are already set up so there is
+not much to mess up here. Nevertheless we mention:
+
+\startitemize [n]
+ \startitem
+ Math fonts are loaded in three sizes: text, script and scriptscript. The
+ optimal relative sizes ar defined in the font.
+ \stopitem
+ \startitem
+ There are direction aware math fonts and we support this in \CONTEXT.
+ \stopitem
+ \startitem
+ Bold math is in fact a bolder version of a regular math font (that can
+ have bold symbols too). Again this is supported.
+ \stopitem
+\stopitemize
+
+The way math is dealt with in \CONTEXT\ is different from the way it is done
+traditionally. Already when we started with \MKIV\ we moved to \UNICODE\ and
+the setup at the font level is kept simple by delegating some of the work to
+the \LUA\ end. We will see some of the mentioned aspects in more detail later.
+
+Because of it's complexity and because in a math text there can be many times
+activation of math fonts (and related settings) quite some effort has been put in
+making it efficient. But you need to keep in mind that when we discuss math
+related topics later on, this is hardly of concern. Math fonts are loaded only
+once so manipulating them a bit has no penalty. And using them later on is hardly
+related to the font subsystem.
+
+Concerning formats we can notice that traditional \TEX\ comes with math fonts
+that have properties that the engine can use. Because there were not many math
+fonts, this was no problem. The \OPENTYPE\ math fonts however are also used in
+other applications and therefore are a bit more generic. \footnote {Their
+internals are now defined in the \OPENTYPE\ specification.} For this we not only
+had to adapt the math engine in \LUATEX\ (although we kept that to the minimum)
+but we also had to think different about loading them. In later chapters we will
+see that in the transition to \UNICODE\ math fonts we implemented a mechanism for
+combining \TYPEONE\ fonts into virtual \UNICODE\ fonts. We did that because it
+made no sense to keep an old and new loader alongside.
+
+There will not be thousands of math fonts flying around. A few dozen is already a
+lot and the developers of macro packages can set them up for the users. So, in
+practice there is not much that a user needs to know about math font formats.
+
+\stopsection
+
+\startsection[title=Caching]
+
+Because fonts can be large and because we use \LUA\ tables to describe them
+a bit of effort has been put into managing them efficiently. Once converted
+to the representation that we need they get cached. You can peek into the cache
+which is someplace on your system (depending on the setup):
+
+\starttabulate[|l|p|]
+\NC \type{fonts/afm} \NC type one fonts, converted from \type {afm} and \type
+ {pfb} files \NC \NR
+\NC \type{fonts/data} \NC font name databases \NC \NR
+\NC \type{fonts/mp} \NC fonts created using \METAPOST \NC \NR
+\NC \type{fonts/otf} \NC open type fonts, converted from \type {ttf}, \type {otf},
+ \type {ttc} and \type {ttx} files loaded using the
+ \FONTFORGE\ loader \NC \NR
+\NC \type{fonts/otl} \NC open type fonts, converted from \type {ttf}, \type {otf},
+ \type {ttc} and \type {ttx} files loaded using the
+ \CONTEXT\ \LUA\ loader \NC \NR
+\NC \type{fonts/shapes} \NC outlines of fonts (for instance for use in \METAFUN) \NC \NR
+\stoptabulate
+
+There can be three types of files there. The \type{tma} files are just \LUA\
+tables and they can be large. These files can be compiled to bytecode where \type
+{tmc} is for stock \LUATEX\ and \type {tmb} for \LUAJITTEX. The \type {tma} files
+are optimized for space and memory (aka: packed) but you can expand them with
+\type {mtxrun --script font}.
+
+Fonts in the cache are automatically updated when you install new versions of a
+font or when the \CONTEXT\ font loader has been updated.
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/fonts/fonts/fonts-hooks.tex b/doc/context/sources/general/fonts/fonts/fonts-hooks.tex
new file mode 100644
index 000000000..9be69d6b8
--- /dev/null
+++ b/doc/context/sources/general/fonts/fonts/fonts-hooks.tex
@@ -0,0 +1,585 @@
+% language=uk
+
+\startcomponent fonts-hooks
+
+\environment fonts-environment
+
+\startchapter[title=Hooks][color=darkcyan]
+
+\startsection[title=Introduction]
+
+One of the virtues of \TEX\ is its flexibility. Because we cannot predict what
+users want to mess around with, much of the underlying code has hooks. And because
+it's not too hard to add functionality that will break things we will not advocate
+all of it. Of course you can study the code and figure out what can be done and
+there is no problem with that. It's just that you shouldn't expect much support.
+
+In this chapter we collect some of these hooks. If you run into interesting ones
+that are worth mentioning, you can always ask us to add description here.
+
+\stopsection
+
+\startsection[title=Safe hooks]
+
+\startsubsection[title=Trimming fonts]
+
+Because we store font related information in \LUA\ tables there can be situations
+where the resources used outgrow memory. An example of such a font is \type
+{lastresort} that basically defined the whole \UNICODE\ range. The font is
+actually not that large as it uses similar placeholders for glyphs in a range,
+but it has rather verbose (redundant) names. As we normally don't need these, you
+can decide to strip them away.
+
+\starttyping
+\startluacode
+ fonts.handlers.otf.readers.registerextender {
+ name = "remove names from lastresort",
+ action = function(fontdata)
+ if fontdata.metadata.fullname == "LastResort" then
+ for k, v in next, fontdata.descriptions do
+ v.name = nil
+ end
+ end
+ end
+ }
+\stopluacode
+
+\definedfont[LastResort][lastresort*default sa 1]
+\stoptyping
+
+This will result in a much smaller font, one that has less change to crash the
+engine due to lack of memory. Extenders like this are applied once the font has
+been loaded but before it gets saved.
+
+\stopsubsection
+
+\stopsection
+
+\startsection[title=Loading]
+
+\startsubsection[title=Introduction]
+
+We basically have to deal with three font formats that can easily be recognized
+by the suffix of the files involved: \type {tfm} and \type {vf} files that
+describe 8 bit fonts, traditionally bitmap fonts, but as they carry only metric
+information, any 8 bit font can be described. Then there are \type {afm} files
+that contain metrics related to \TYPEONE\ fonts (stored in \type {pfb} files).
+Although such fonts could contain more than 256 shapes, the implementation was
+limited to 8 bits too. By converting \type {afm} files to \type {tfm} files,
+traditional \TEX\ can deal with \TYPEONE\ given that the backend can include them
+in the final result.
+
+In this section we will discuss some aspects of the \OPENTYPE\ font reader. As
+\TEX\ only deals with metrics (in the frontend) we need to parse them, filter
+information from it and pass the metrics to \TEX. In addition, we can use all
+kind of extra information to manipulate the so called node list but in the end
+\TEX\ is only interested in font id's (that point to a font resource) and glyph
+indexes.
+
+To overcome the 256 limitation of \TYPEONE\ fonts, in \CONTEXT\ we moved away
+from \type {tfm} files (we can of course still deal with them) and turn \type
+{afm} files into so called wide fonts. Basically we turn them in a more rich
+format that looks similar to the internal \OPENTYPE\ format we use. We will not
+go into much detail about that because \TYPEONE\ is kind of obsolete and being
+replaced by \OPENTYPE, but we will of course support the old formats simply
+because we have all these fonts around.
+
+Already early in the development of \LUATEX\ a font loader library was created
+that can turn an \OPENTYPE\ (but also a \TYPEONE) font into a \LUA\ table. This
+library is derived from \FONTFORGE\ which makes it possible to look into a font
+using that editor and at the same time get a similar view on the font in \LUA,
+which is quite handy. However, at some point in \CONTEXT\ we wanted to play with
+outlines in \METAPOST\ and for that purpose an \OPENTYPE\ reader was written in
+\LUA\ that could extract the data. Because \TYPEONE\ fonts already were done in
+\LUA\ it was a logical step to also do \OPENTYPE\ in \LUA\ so now we use an
+alternative loader that doesn't depend in the \FONTFORGE\ library. This not only
+gives more flexibility but also makes it possible to avoid some conversions
+needed to provide the \CONTEXT\ font handler with the needed information in an
+efficient way.
+
+\stopsubsection
+
+\startsubsection[title=Loading \OPENTYPE\ fonts]
+
+As with most binary media formats today an \OPENTYPE\ font file is a linked list
+of records. The top level structure is called table. There are two flavours of
+\OPENTYPE\ where the main difference is in the way the shapes are defined: they
+can be \TRUETYPE\ outlines using quadratric bezier curves or cff files using
+cubic bezier curves. The last variant is the same as \POSTSCRIPT\ \TYPEONE\
+fonts. Simplified, a quadratic curve defines the shape in points with a control
+point in between, while a quadratic one also has points but each with two control
+points (as in \METAPOST).
+
+An \OPENTYPE\ font can be large: there can be upto 65536 glyphs and lots of extra
+properties and features. In order to save space the data is rather packed using
+different numeric data types. Of course one can wonder if size really matters now
+that most bandwidth is taken by audio, video and pictures but we have to live
+with it.
+
+The definition of \OPENTYPE\ can be found on the \MICROSOFT\ website:
+\hyphenatedurl {https://www.microsoft.com/typography/otspec}. Most tables then
+could make sense for us are mentioned in the following list:
+
+\starttabulate[|Bl|l|l|]
+\NC required \NC cmap \NC character to glyph mapping \NC \NR
+\NC \NC head \NC font header \NC \NR
+\NC \NC hhea \NC horizontal header \NC \NR
+\NC \NC hmtx \NC horizontal metrics \NC \NR
+\NC \NC maxp \NC maximum profile \NC \NR
+\NC \NC name \NC naming table \NC \NR
+\NC \NC os/2 \NC os/2 and windows specific metrics \NC \NR
+\NC \NC post \NC postScript information \NC \NR
+\NC truetype \NC glyf \NC glyph data \NC \NR
+\NC \NC loca \NC index to location \NC \NR
+\NC postscript \NC cff \NC compact font format \NC \NR
+\NC \NC vorg \NC vertical origin \NC \NR
+\NC typographic \NC base \NC baseline data \NC \NR
+\NC \NC gdef \NC glyph definition data \NC \NR
+\NC \NC gpos \NC glyph positioning data \NC \NR
+\NC \NC gsub \NC glyph substitution data \NC \NR
+\NC \NC jstf \NC justification data \NC \NR
+\NC \NC math \NC math layout data \NC \NR
+\NC extras \NC kern \NC kerning \NC \NR
+\NC \NC ltsh \NC linear threshold data \NC \NR
+\NC \NC vhea \NC vertical metrics header \NC \NR
+\NC \NC vmtx \NC vertical metrics \NC \NR
+\NC \NC colr \NC color table \NC \NR
+\NC \NC cpal \NC color palette table \NC \NR
+\stoptabulate
+
+When we read these tables it depends on what we want to do with the result how
+much we will really read. For instance when we only want to identify a font and
+get some basic information we don't need to read all tables and certainly don't
+need to read them completely. If we want to have the outlines we need to read the
+\type {glyf} or \type {cff} table. If we also want to boundingbox of \POSTSCRIPT\
+shapes we even need to process the shapes so that we know the dimensions of the
+result. There is no need to summarize the format here in detail because you can
+find it on the \MICROSOFT\ site. Here I only cover some aspects that influence
+the way \TEX\ can use the fonts.
+
+One of the main differences between the readers is that the \FONTFORGE\ reader
+has a lot of (recovery) heuristics for bad fonts. Nowadays most fonts are quite
+okay, and in \CONTEXT\ we prefer to just reject bad ones. In the process of
+loading the built|-|in loader gives each glyph a name (it makes them up for
+variants needed for features). It also tries to figure out some font properties,
+like the weight. If does a pretty good job on that but it is also hard to repair
+at the \LUA\ end when it makes a bad guess. The \LUA\ variants stays closer to
+the specification, but delegates more to the final user, which is good because we
+need and want that level of control as controls is what \TEX\ is about. It also
+made it possible to support for instance colored fonts without too much effort.
+
+So what data needs to be collected? If we look at what we get eventually the list
+of glyphs is the bulk. For each glyph we collect some metric information. For
+instance we fetch the (advance) width of the glyph but also the boundingbox,
+which gives us the the height and depth.
+
+In the font file the list of glyphs starts at zero and runs up tot the total
+number of glyphs. The index in this table is used in for instance the tables that
+define the font features, for instance kerning between glyphs, or multiple glyphs
+that are turned into ligatures. Each glyph gets a name. That can be a meaningful
+one but also a rather dumb one, for instance the index number.
+
+Eventually (at least in \CONTEXT) we don't order by glyph index but by \UNICODE.
+The font file contains information about the mapping from index to \UNICODE. In
+principle other encodings are possible but we stick to \UNICODE. But, because
+many glyphs can refer to one \UNICODE\ slot, for instance a regular shape as well
+as a smallcaps or oldstyle variant. These extra glyphs we let end up in the
+private \UNICODE\ areas. This also means that with each glyph in the final table
+there is also a field that has the \UNICODE. Because we order by \UNICODE\ we
+also need to store the index. An example from a Latin Modern font is:
+
+\starttyping
+[97] = {
+ boundingbox = { 34, -10, 474, 446 },
+ index = 28,
+ name = "a",
+ unicode = 97,
+ width = 490,
+}
+\stoptyping
+
+Another example is the following. Here we end up in private space:
+
+\starttyping
+[983059] = {
+ boundingbox = { 30, -10, 734, 446 },
+ index = 19,
+ name = "oe.dup",
+ unicode = 339,
+ width = 762,
+}
+\stoptyping
+
+Yet another entry is:
+
+\starttyping
+[306] = {
+ boundingbox = { 28, -22, 790, 683 },
+ index = 357,
+ name = "I_J",
+ unicode = { 73, 74 },
+ width = 839,
+ },
+\stoptyping
+
+Here you see two \UNICODE\ numbers. That kind of information is deduced from the
+name of the glyph, using knowledge on how such names are supposed to be
+constructed, or, when that is not possible, from ligature information in the
+fonts.
+
+It makes no sense to discuss the whole font table in detail, if only because most users
+will never (need to) see it. But if your curious you can have a look at the fonts
+in the cache tree, in the \CONTEXT\ distribution from the \CONTEXT\ garden this is
+
+\starttyping
+.../tex/texmf-cache/luatex-cache/context/<somehash>/fonts/otl
+\stoptyping
+
+There can be three kind of files there, with suffixes \type {tma}, \type {tmc}
+and \type {tmb}. The first one is the table as converted from the binary font
+file. The second and third variants are just bytecode compilations of this file
+(for \LUATEX\ and|/|or \LUAJITTEX). The bytecode variants are smaller but more
+important, they load a bit faster. On my disk the largest \type{tma} file is just
+below 10 MByte (an extensive \CJK\ font) but normally they are in the few hundred
+KByte range (some are real small), with the bytecode files of course being
+relatively small to their original.
+
+However, there is a bit of cheating here. If we run the command:
+
+\starttyping
+mtxrun --script font --convert lmroman10-regular.otf
+\stoptyping
+
+A \LUA\ file is generated: \type {lmroman10-regular.lua}. This file is much larger
+than the \type {tma} file in the cache:
+
+\starttabulate[|T|T|]
+\NC 643.924 \NC lmroman10-regular.lua \NC 0.029 \NR
+\NC 209.950 \NC lmroman10-regular.tma \NC 0.010 \NR
+\NC 121.541 \NC lmroman10-regular.tmb \NC \NR
+\NC 134.564 \NC lmroman10-regular.tmc \NC 0.003 \NR
+\stoptabulate
+
+The reason for this is the following. Most information is stored in tables.
+Especially tables that describe font features can be the same all over the place.
+This is why we pack the table in a more compact format before saving it in the
+cache, and unpack it after loading. The effects on loading are neglectable but
+and it has the benefit that it saves a lot of memory. By looking at such numbers
+one should be careful with conclusions, but (assuming proper garbage collection)
+we see a memory footprint of the \type {lua} file of 2836 Kbyte, while the
+unpacked variant takes 704 Kbyte. You can imagine what happens with large \CJK\
+fonts. Loading the (larger unpacked) \type {lua} file currently costs me 0.029
+seconds, while loading and unpacking the \type {tma} file takes 0.010 seconds and
+the bytecode variant \type {tmc} 0.003 seconds.
+
+\stopsubsection
+
+\startsubsection[title=Loading \TYPEONE\ fonts]
+
+When we started with \CONTEXT\ \MKIV\ (which is shortly after we started with
+\LUATEX) the only \TFM\ files that were loaded, were those to make virtual
+\UNICODE\ math fonts, awaiting real \OPENTYPE\ math fonts. Math fonts are kind
+of special with respect to metrics and such.
+
+For \TYPEONE\ text fonts we didn't use the \TFM\ files but went for parsing \AFM\
+files. That way we could use all the glyphs provided by fonts and not be limited
+to 256 slots. So, effectively we made them \UNICODE\ and similar to \OPENTYPE. Of
+course the only features were ligatures, kerns and some special ones like \TEX\
+ligatures and replacements. With the old loader code, we always made them base
+mode fonts, which means that processing was delegated to \TEX. In the new loader
+we implement ligatures and kerns as node mode features, which means that we can
+use those fonts in base mode as well as node mode. The last options therefore
+permits to add or adapt features to \TYPEONE\ fonts as well.
+
+In the next sections we will focus on \OPENTYPE\ but as the \TYPEONE\ fonts are
+organized in a similar way, some of it also applies to this older type. The most
+important to keep in mind is that we only have \type {liga}, \type {kern} and a
+few \CONTEXT\ specific features.
+
+\stopsubsection
+
+\stopsection
+
+\startsection[title=The tables]
+
+\startsubsection[title=Structure]
+
+Getting a font read for \TEX\ happens in stages. The original \OPENTYPE\ file is
+read only once. At that moment the shapes are described in the \type
+{descriptions} subtable while by the time that we pass the information to \TEX\
+they are in \type {characters}. The reason is that we go from dimensions in font
+units to dimensions in scaled points. We start with the following table:
+
+\ctxlua{context.tocontext(fonts.tables.data.original,"original_table")}
+
+The table passed \TEX\ is constructed from this one and looks like:
+
+\ctxlua{context.tocontext(fonts.tables.data.scaled,"scaled_table")}
+
+There might be a few more (often obscure) fields for special purposes. The
+characters subtable conforms to what \TEX\ expects, while the descriptions stays
+closer to \OPENTYPE. The \type {kerns} and \type {ligatures} subtables are there
+for base mode and are not present in \type {node} mode. The \type {commands} and
+\type {fonts} subtables relate to virtual fonts.
+
+\startitemize[packed]
+\startitem
+ Start with the (already) loaded \OPENTYPE\ table.
+\stopitem
+\startitem
+ Copy relevant information from \type {descriptions} to \type {characters} etc.
+\stopitem
+\startitem
+ Construct \type {properties} and \type {parameters} tables.
+\stopitem
+\startitem
+ Apply additional manipulators, for instance extend the \type {characters}
+ table, with expansion and protrusion.
+\stopitem
+\startitem
+ Scale the \type {characters}, \type {properties} and \type {parameters}.
+\stopitem
+\startitem
+ Apply additional manipulators.
+\stopitem
+\startitem
+ Pass the table to \TEX, but keep it around for later access.
+\stopitem
+\stopitemize
+
+One of the things you need to be aware of is that all references to glyphs are
+\UNICODE\ slots, either natural ones (representing a character) or a private one
+(representing an alternative representation). In \OPENTYPE\ features are defined
+in terms of glyph indices but we prefer \UNICODE\ because that is easier to deal
+with when we run over the node list. Before font processing the character field
+in a glyph node is a \UNICODE\ slot and afterwards it's still a \UNICODE\ but
+when it's a private one it can always be resolved to a non private slot of
+sequence of slots. Of course that could also be done with indices but it's just
+more natural this way.
+
+Another thing to note is that in the descriptions we're still working with font
+units ranging from $-1000$ to $+1000$, $-2048$ to $+2048$ or similar ranges. At
+the \TEX\ end we need scaled points which are much larger numbers.
+
+The question is: how often do users need to access the raw data in a font? After
+a decade of \MKIV\ and \LUATEX\ hardly any user has requested such access,
+probably because when needed easier interfaces were provided. Also, in the
+\CONTEXT\ distrubution there are some examples of manipulations that can be
+copied and adapted to personal use. There's also a danger is messing with the
+fonts (similar messing with the node lists): you never know how it interferes
+with other (maybe future) features.
+
+If you still want to do it, best is probably to start with saving the
+to|-|be|-|passed|-|to|-|\TEX\ table in a file and have a look at it. The most
+prominent subtable is the \type {characters} table and messing a bit with
+dimensions is rather harmless. You could add characters, for instance virtual
+ones, which again is harmless unless you use invalid commands. You probably want
+to stay away from the resources subtable, if only because some of its subtables
+are shared and therefore adapting them can have side effects. The top level \type
+{shared} and \type {unscaled} subtable are off limits as is the \type
+{specification}.
+
+You can save a font by consulting one of the hashes but for a specific font
+you need to know its id. You can do this by using low level accessors but better
+is to use the helpers made for this, because they prevent saving redundant
+data.
+
+% \starttyping
+% \startluacode
+% local nullfont = fonts.hashes.identifiers[false]
+% local currentfont = fonts.hashes.identifiers[true]
+%
+% local id, tfmdata = fonts.definers.define {
+% name = "dejavusansmono*default",
+% size = tex.sp("6pt")
+% }
+%
+% table.save("temp-nullfont.lua", nullfont)
+% table.save("temp-currentfont.lua",currentfont)
+% table.save("temp-definedfont.lua",tfmdata)
+% table.save("temp-definedfont.lua",fonts.hashes.identifiers[id])
+% \stopluacode
+% \stoptyping
+
+\starttyping
+\startluacode
+fonts.tables.save {
+ filename = "temp-font-scaled.lua",
+ fontname = "dejavusansmono*default",
+ method = "original",
+}
+\stopluacode
+\stoptyping
+
+At the \TEX\ end you can use:
+
+\starttyping
+\savefont
+ [name=dejavusansmono*default,
+ file=temp-o.lua,
+ method=original]
+\savefont
+ [name=dejavusansmono*default,
+ file=temp-s.lua,
+ method=scaled]
+\stoptyping
+
+When no \type {name} is given, the current font is used and when no \type {file}
+is given a filename is made up. The default \type {method} is \type {scaled}. The
+saved name is reported.
+
+\stopsubsection
+
+\startsubsection[title=Plug-ins]
+
+There are several places where you can hook in code: before scaling
+(initalizers), after scaling (manipulators) and while processing (processors).
+Only the first two are meant for tweaks.
+
+\starttyping
+local do_something = {
+ name = "something",
+ description = "doing something",
+ initializers = {
+ -- position = 1,
+ base = function(tfmdata,value,features) ... end,
+ node = function(tfmdata,value,features) ... end,
+ },
+ manipulators = {
+ -- position = 1,
+ base = function(tfmdata,feature,value) ... end,
+ node = function(tfmdata,feature,value) ... end,
+ },
+ processors = {
+ -- position = 1,
+ base = function(tfmdata,font,attr) ... end,
+ node = function(tfmdata,font,attr) ... end,
+ }
+}
+
+fonts.constructors.features.register.otf(so_something)
+fonts.constructors.features.register.afm(so_something)
+\stoptyping
+
+A \type {initializer} is applied just before the font gets scaled. This means
+that the characterm properties and parameters are unscaled! Initializers can for
+instance be used to add extra features to fonts. You can provide an \type
+{position} key with a number to force a place in the list of initializers but of
+course you can never be sure of interference.
+
+A \type {manipulator} is applied when the font is scaled but before it gets
+passed to \TEX. It's a good place to tweak dimensions. Here you can also probide
+a \type {position}.
+
+The processors are applied when the node list gets processed, hence the \type
+{font} and optional \type {attr} arguments. The action is only applied to the
+specified font (id) and when an attribute gets passed, this is tested for a
+value. When an attribute is used, an unset attribute on the node will skip the
+action.
+
+If adapting characters and their properties is your main objetive, then there is a
+better plugin mechanism using sequencers. We illustrate this with a fake example:
+
+\starttyping
+\startluacode
+
+function document.b_copying(tfmdata)
+ logs.report("fonts","before copying: %s",tfmdata.properties.filename)
+end
+function document.a_copying(tfmdata)
+ logs.report("fonts","after copying: %s",tfmdata.properties.filename)
+end
+
+function document.b_math(tfmdata)
+ logs.report("fonts","before math: %s",tfmdata.properties.filename)
+end
+function document.a_math(tfmdata)
+ logs.report("fonts","after math: %s",tfmdata.properties.filename)
+end
+
+utilities.sequencers.appendaction(
+ "beforecopyingcharacters",
+ "before",
+ "document.a_copying"
+)
+
+utilities.sequencers.appendaction(
+ "aftercopyingcharacters",
+ "after",
+ "document.b_copying"
+)
+
+utilities.sequencers.appendaction(
+ "mathparameters",
+ "before",
+ "document.b_math"
+)
+
+utilities.sequencers.appendaction(
+ "mathparameters",
+ "after",
+ "document.a_math"
+)
+\stopluacode
+\stoptyping
+
+When we call the next command:
+
+\starttyping
+\definedfont[MathRoman at 3pt]
+\stoptyping
+
+we get this reported:
+
+\starttyping
+fonts > before math: ...../public/dejavu/texgyredejavu-math.otf
+fonts > after math: ...../public/dejavu/texgyredejavu-math.otf
+fonts > after copying: ...../public/dejavu/texgyredejavu-math.otf
+fonts > before copying: ...../public/dejavu/texgyredejavu-math.otf
+\stoptyping
+
+In between \type {before} and \type {after} we have \type {system} which is
+reserved for \CONTEXT\ actions. These actions are executed in the scaler
+function. The function get two tables passed: the original data as well as the
+target. If you ever need these hooks, you can probably best run an \type
+{inspect} on these arguments to see what you're dealing with.
+
+Fonts get reused when possible and for that a hash is calculated depending on the
+enabled features and size. If for some reason you want to adapt that hash you can
+use postprocessors. When the \type {tfmdata} table has a subtable \type
+{postprocessors}, then the actions in that subtable will be applied. When an
+action returns a string, the string will be combined with the hash. You can set
+(o rextend) the postprocessors table using the previopusly mentioned commands.
+However, in \CONTEXT\ you can best stay away from this as it might interfere. This
+mechanism is mostly provided for generic use.
+
+\stopsubsection
+
+\stopsection
+
+\startsection[title=Goodies]
+
+The font goodies are already discussed as an official mechanism to extend or enhance
+fonts with additional features. There are quite some goodies defined and for sure more will
+show up. Here is the full repertoire:
+
+\ctxlua{context.tocontext(fonts.tables.data.goodies,"goodie_table")}
+
+Of course you will never use all the options at the same time. The best place to
+look for examples are the \type {lfg} files in the \CONTEXT\ distribution.
+\footnote {At some point we might decide to also support goodies in the generic
+version.}
+
+\stopsection
+
+% - features
+% - subfonts
+% - outlines
+% - math
+% - hashes
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/fonts/fonts/fonts-introduction.tex b/doc/context/sources/general/fonts/fonts/fonts-introduction.tex
new file mode 100644
index 000000000..0ca91ee9f
--- /dev/null
+++ b/doc/context/sources/general/fonts/fonts/fonts-introduction.tex
@@ -0,0 +1,95 @@
+% language=uk
+
+\startcomponent fonts-introduction
+
+\environment fonts-environment
+
+\startchapter[title=Introduction][color=darkgray]
+
+You sit in a cave and wonder how to keep track of your winter stock. While
+playing with some burned wood you end up with vertical strokes on the wall
+representing how much you have in store.
+
+You walk through the woods and wonder how to find your way back. Suddenly it
+strikes you that you can put markers on trees. Years from that moment the whole
+forest is marked with routes. Different symbols carry different meanings.
+
+The next thing you want to do is to carry around information and pass it onto
+following generations. So, you turn those symbols into shapes that make up the
+scripts that can be used to express your languages in.
+
+For ages scripts have evolved and the rendering of them on stone or wood and
+later paper has resulted in a multitude of coherent collections of so called
+glyphs. Manual labour turned into (semi) automated mass production and once that
+took off, developments went fast. But the quality was still somewhat dubious,
+especially when for instance specialized scripts like math had to be dealt with.
+
+Some 30 years ago Don Knuth wrote a book, and in the process invented the \TEX\
+typesetting system, the graphical language \METAFONT\ and a bunch of fonts. He
+made it open and free of charge. He was well aware that the new ideas were built
+on older ones that had evolved from common sense: how to keep track of things on
+paper.
+
+It is no surprise that an active community formed around these goodies. First of
+all the system has no strings attached: the licence is generous and there are no
+patents involved. There is also a network of user groups that takes care of
+coordinated updates to the whole machinery. Of course it helps that it all
+relates to Don Knuth.
+
+Since \TEX\ showed up several open and closed source typesetting systems have
+surfaced and only some of them survived. Also regular word processing has become
+more clever and still become better. The \TEX\ typesetting system also moved on.
+Some of its ideas have been used in other programs and some of the ideas of other
+programs made their way into \TEX. However, its main property is still there: you
+can tweak and tune it to your needs and are not hampered by too many limitations.
+
+Don Knuth had this chicken or egg problem: once you can typeset a source you need
+fonts but you can only make fonts if you can use them in a typesetting program.
+As a result \TEX\ came with its own fonts and it has special ways to deal with
+them. Given the limitations of that time \TEX\ puts some limitations on fonts and
+also expects them to have certain properties, something that is most noticeable
+in math fonts.
+
+Rather soon from the start it has been possible to use third party fonts in \TEX,
+for instance \TYPEONE. As \TEX\ only needs some information about the shapes, it
+was the backend that integrated the font resources in the final document. One of
+its descendants, \PDFTEX, had this backend built in and could do some more clever
+things with fonts in the typesetting process, like protrusion and expansion. The
+integration of front- and backend made live much easier. Another descendant,
+\XETEX\ made it possible to move on to the often large \OPENTYPE\ fonts. On the
+one hand this made live even more easy but at the other end it introduced users
+to the characteristics of such fonts and making the right choices, i.e.\ not fall
+in the trap of too fancy font usage.
+
+In this manual we will look at fonts from the perspective of yet another
+descendant, \LUATEX. It inherits the font technology from traditional \TEX, but
+also extends it so that we can deal with modern font technologies. Of course it
+offers much more, but in practice much relates to fonts one way or the other.
+
+Of course this exploration will be from the perspective of the \CONTEXT\ macro
+package but this is not a manual about how to use fonts in \CONTEXT\ as we have
+another manual for that. Much of what we say here applies to the generic font
+code as well, although some more advanced control is \CONTEXT\ specific. There is
+nothing real new here, and it all evolved from common sense and dealing with
+\TEX\ for many years. The perspective is mostly that of being a user myself so
+don't complain too loudly if things look complicated and unclear.
+
+There is some overlap between the chapters. This is because each chapter is
+written from another perspective and this document quite certainly will not be
+read as a whole but more by looking at examples.
+
+\startnotabene
+ This document will probably have an \quote {still under construction} state
+ for a long time. The functionality discussed here will stay and more might
+ show up. Of course there are errors, and they're all mine.
+\stopnotabene
+
+\startlines
+Hans Hagen
+PRAGMA ADE, Hasselt NL
+Summer 2011 \endash\ Spring 2016
+\stoplines
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/fonts/fonts/fonts-lookups.tex b/doc/context/sources/general/fonts/fonts/fonts-lookups.tex
new file mode 100644
index 000000000..e9448b884
--- /dev/null
+++ b/doc/context/sources/general/fonts/fonts/fonts-lookups.tex
@@ -0,0 +1,410 @@
+% language=uk
+
+\startcomponent fonts-lookups
+
+\environment fonts-environment
+
+\startchapter[title=Lookups][color=darkblue]
+
+\startsection[title=Introduction]
+
+In traditional \TEX\ a font is defined by referring to its filename. A
+definition looks like this:
+
+\starttyping
+\font \MyFontA = lmr10
+\font \MyFontB = lmr10 at 20pt
+\font \MyFontC = lmr10 scaled 1500
+\stoptyping
+
+The first definition defines the command \type {MyFontA} as a reference to the
+font stored in the file \type {lmx10}. No scaling takes place so the natural size
+is taken. This so called designsize is in no way standardized. Just look at these
+three specimen:
+
+\startlines
+{\definedfont[file:dejavuserif*default]Design Size (Dejavu)}
+{\definedfont[file:cambria*default]Design Size (Cambria)}
+{\definedfont[file:lmroman10-regular*default]Design Size (Latin Modern)}
+\stoplines
+
+The designsize is normally 10 point, but as there is no real reference for this a
+designer decides how to translate this into a visual representation. As a
+consequence the \type {20pt} in the second line of the example definitions only
+means that the font is scaled to (normally) twice the designsize. The third line
+scaled by a factor \type {1.5} and the reason for using a value thousand times
+larger is that \TEX's numbers are integers.
+
+The next three lines are typical for Latin Modern (derived from Computer Modern)
+because this family comes in different design sizes.
+
+\starttyping
+\font \MyFontD = lmr12
+\font \MyFontE = lmr12 at 20pt
+\font \MyFontF = lmr12 scaled 1500
+\stoptyping
+
+Because the designsize is part of the font metrics the second line (\type
+{\MyFontE}) is of similar size as \type {\MyFontB} although the 12~point variant
+is visually better suited for scaling up.
+
+These definitions refer to files, but what file? What gets loaded is the file
+with name \type {name.tfm}. Eventually for embedding in the (let's assume \PDF)
+file the outlines are taken from \type {name.pfb}. At that stage, when present, a
+\type {name.vf} is consulted in order to resolve characters that are combinations
+of others (potentially from other \type {pfb} files). The mapping from \type
+{name.tfm} to \type {name.pfb} filename happens in the so called map file. This
+means that one can also refer to another file, for instance \type {name.ttf}.
+
+All this logic is hard coded in the engine and because the virtual font mechanism
+was introduced later without extending the \type {tfm} format, it can be hard at
+times to figure out issues when a (maybe obsolete) virtual file is present (this
+can be the case if you have generated the \type {tfm} file from an \type {afm}
+file that comes with the \type {pfb} file when you buy one.
+
+But, in \LUATEX\ we no longer use traditional fonts and as a consequence we have
+more options open. Before we move on to them, we mention yet another definition:
+
+\starttyping
+\font \MyFontG = lmr12 sa 1.2
+\stoptyping
+
+This method is not part of \TEX\ but is provided by \CONTEXT, \MKII\ as well as
+\MKIV. It means as much as \quotation {scale this font to 1.2 times the
+bodyfontsize}. As this involves parsing the specification, it does not work
+as advertised here, but the next definition works okay:
+
+\starttyping
+\definefont[MyFontG][lmr12 sa 1.2]
+\stoptyping
+
+This indicates that we already had a parser for font specifications on board
+which in turn made it relatively easy to do even more parsing, for instance for
+font features as introduced in \XETEX\ and \LUATEX.
+
+\stopsection
+
+\startsection[title=Specifications]
+
+In \LUATEX\ we intercept the font loader. We do so for several reasons.
+
+\startitemize[packed]
+
+\startitem We want to make decisions on what file to load, this is needed when
+for instance there are files with the same name but different properties. \stopitem
+
+\startitem We want to be able to lookup by file, by name, and by more abstract specification.
+In doing so, we want to be as tolerant as possible. \stopitem
+
+\startitem We want to support several scaling methods, as discussed in the previous section. \stopitem
+
+\startitem We want to implement several strategies for passing features and defining non
+standard approaches. \stopitem
+
+\stopitemize
+
+The formal specification of a font is as follows:
+
+\starttyping
+\definefont[PublicReference][filename]
+\definefont[PublicReference][filename at dimension]
+\definefont[PublicReference][filename scaled number]
+\stoptyping
+
+We already had that extended to:
+
+\starttyping
+\definefont[PublicReference][filename]
+\definefont[PublicReference][filename at dimension]
+\definefont[PublicReference][filename scaled number]
+\definefont[PublicReference][filename sa number]
+\stoptyping
+
+So let's generalize that to:
+
+\starttyping
+\definefont[PublicReference][filename scaling]
+\stoptyping
+
+And in \MKIV\ we now have:
+
+\starttyping
+\definefont[PublicReference][filename*featurenames scaling]
+\definefont[PublicReference][filename:featurespecication scaling]
+\definefont[PublicReference][filename@virtualconstructor scaling]
+\stoptyping
+
+The second variant is seldom used and is only provided because some users
+have fonts defined in the \XETEX\ way. Users are advised not to use this
+method. The last method is special in the sense that it's used to define
+fonts that are constructed using the built in virtual font constructors. This
+method is for instance used for defining virtual math fonts.
+
+The first method is what we use most. It is really important not to forget the
+feature specification. A rather safe bet is \type {*default}. In a next chapter
+we will discuss the difference between these two; here we focus on the name part.
+
+The \type {filename} is in fact a symbolic name. In \CONTEXT\ we have always used
+an indirect reference to fonts. Look at this:
+
+\starttyping
+\definefont[TitleFont][SerifBold*default sa 2]
+\stoptyping
+
+A reference like \type {SerifBold} makes it possible to define styles independent
+of the chosen font family. This reference eventually gets resolved to a real
+name and there can be a chain of references.
+
+Font definitions can be grouped into a larger setup using typescripts. In that
+case, we can set the features for a regular, italic, bold and bolditalic for the
+whole set but when a fontname has a specific feature associated (as in the
+previous examples) that one takes precedence.
+
+so far we talked about fonts being files, but in practice a lookup happens by
+file as well as by name as known to the system. In the next section this will be
+explained in more detail.
+
+\stopsection
+
+\startsection[title=File]
+
+You can force a file lookup with:
+
+\starttyping
+\definefont[TitleFont][file:somefilename*default sa 2]
+\stoptyping
+
+If you use more symbolic names you can use the \type {file:} prefix in the
+mapping:
+
+\starttyping
+\definefontsynonym[SerifBold][file:somefile]
+\definefont[TitleFont][SerifBold*default sa 2]
+\stoptyping
+
+In projects that are supposed to run for a long time I always use the file based
+lookup, because filenames tend to be rather stable. Also, as the lookup happens
+in the \TEX\ directory structure, file lookups will rely on the general file
+search routines. This has the benefit that case is ignored. When no match is found
+the lookup will also use the font name database. Spaces and special characters are
+ignored.
+
+The name alone is not enough as there can be similar filenames with different
+suffixes. Therefore the lookup will happen in the order \ctxcommand {
+concatcommalist { list = fonts.readers.sequence, separator = ", ", last = " and
+", command = "type" } }. You can force a lookup by being more explicit, like:
+
+\starttyping
+\definefont[TitleFont][file:somefilename.ttf*default sa 1]
+\stoptyping
+
+\stopsection
+
+\startsection[title=Name]
+
+Say that we want to use a Dejavu font and that instead of filenames we want to
+use its given name. The best way to find out what is available is to call for a
+list:
+
+\starttyping
+mtxrun --script font --list --all dejavu
+\stoptyping
+
+This produces the following list:
+
+\startnarrowtyping
+dejavusans dejavusans dejavusans.ttf
+dejavusansbold dejavusansbold dejavusans-bold.ttf
+dejavusansboldoblique dejavusansboldoblique dejavusans-boldoblique.ttf
+dejavusanscondensed dejavusanscondensed dejavusanscondensed.ttf
+dejavusanscondensedbold dejavusanscondensedbold dejavusanscondensed-bold.ttf
+dejavusanscondensedboldoblique dejavusanscondensedboldoblique dejavusanscondensed-boldoblique.ttf
+dejavusanscondensednormal dejavusanscondensed dejavusanscondensed.ttf
+dejavusanscondensedoblique dejavusanscondensedoblique dejavusanscondensed-oblique.ttf
+dejavusansextralight dejavusansextralight dejavusans-extralight.ttf
+dejavusanslight dejavusansextralight dejavusans-extralight.ttf
+dejavusansmono dejavusansmono dejavusansmono.ttf
+dejavusansmonobold dejavusansmonobold dejavusansmono-bold.ttf
+dejavusansmonoboldoblique dejavusansmonoboldoblique dejavusansmono-boldoblique.ttf
+dejavusansmononormal dejavusansmonooblique dejavusansmono-oblique.ttf
+dejavusansmonooblique dejavusansmonooblique dejavusansmono-oblique.ttf
+dejavusansnormal dejavusans dejavusans.ttf
+dejavusansoblique dejavusansoblique dejavusans-oblique.ttf
+dejavuserif dejavuserif dejavuserif.ttf
+dejavuserifbold dejavuserifbold dejavuserif-bold.ttf
+dejavuserifbolditalic dejavuserifbolditalic dejavuserif-bolditalic.ttf
+dejavuserifcondensed dejavuserifcondensed dejavuserifcondensed.ttf
+dejavuserifcondensedbold dejavuserifcondensedbold dejavuserifcondensed-bold.ttf
+dejavuserifcondensedbolditalic dejavuserifcondensedbolditalic dejavuserifcondensed-bolditalic.ttf
+dejavuserifcondenseditalic dejavuserifcondenseditalic dejavuserifcondensed-italic.ttf
+dejavuserifcondensednormal dejavuserifcondensed dejavuserifcondensed.ttf
+dejavuserifitalic dejavuserifitalic dejavuserif-italic.ttf
+dejavuserifnormal dejavuserif dejavuserif.ttf
+\stopnarrowtyping
+
+The first two columns mention the names that we can use to access a font. These
+are normalized names in the sense that we only kept letters and numbers. The next three
+definitions are equivalent:
+
+\starttyping
+\definefont[TitleFont][name:dejavuserif*default sa 1]
+\definefont[TitleFont][name:dejavuserifnormal*default sa 1]
+\definefont[TitleFont][name:dejavuserif.ttf*default sa 1]
+\stoptyping
+
+In the list you see two names that all point to \type {dejavusans-extralight.ttf}:
+
+\starttyping
+dejavusansextralight
+dejavusanslight
+\stoptyping
+
+There are some heuristics built into \CONTEXT\ and we do some cleanup as well.
+For instance we interpret \type {ital} as \type {italic}. In a font there is
+sometimes information about the weight and we look at those properties as well.
+Unfortunately font names (even within a collection) are often rather inconsistent
+so you still need to know what you're looking for. The more explicit you are, the
+less change of problems.
+
+\stopsection
+
+\startsection[title=Spec]
+
+There is often some logic in naming fonts but it's not robust and really depends on
+how consistent a font designer or typefoundry has been. In \CONTEXT\ we can
+access names by using a normalized scheme.
+
+\starttyping
+name-weight-style-width-variant
+\stoptyping
+
+The following values are valid:
+
+\starttabulate[|Bl|Tp|]
+\NC weight \NC \ctxcommand { concatcommalist { list = fonts.names.knownweights } } \NC \NR
+\NC style \NC \ctxcommand { concatcommalist { list = fonts.names.knownstyles } } \NC \NR
+\NC width \NC \ctxcommand { concatcommalist { list = fonts.names.knownwidths } } \NC \NR
+\NC variant \NC \ctxcommand { concatcommalist { list = fonts.names.knownvariants } } \NC \NR
+\stoptabulate
+
+The four specifiers are optional but the more you provide, the better the match. Let's
+give an example:
+
+\starttyping
+mtxrun --script fonts --list --spec dejavu
+\stoptyping
+
+This reports:
+
+\startnarrowtyping
+dejavuserifcondensed normal normal normal normal dejavuserifcondensed dejavuserifcondensed.ttf
+dejavuserif normal normal normal normal dejavuserif dejavuserif.ttf
+dejavusansmono normal normal normal normal dejavusansmono dejavusansmono.ttf
+dejavusanscondensed normal normal normal normal dejavusanscondensed dejavusanscondensed.ttf
+dejavusans normal normal normal normal dejavusans dejavusans.ttf
+\stopnarrowtyping
+
+We can be more specific, for instance:
+
+\starttyping
+mtxrun --script fonts --list --spec dejavu-bold
+\stoptyping
+
+\startnarrowtyping
+dejavuserif bold normal normal normal dejavuserifbold dejavuserif-bold.ttf
+dejavusansmono bold normal normal normal dejavusansmonobold dejavusansmono-bold.ttf
+dejavusans bold normal normal normal dejavusansbold dejavusans-bold.ttf
+\stopnarrowtyping
+
+We add another specifier:
+
+\starttyping
+mtxrun --script fonts --list --spec dejavu-bold-italic
+\stoptyping
+
+\startnarrowtyping
+dejavuserif bold italic normal normal dejavuserifbolditalic dejavuserif-bolditalic.ttf
+dejavusansmono bold italic normal normal dejavusansmonoboldoblique dejavusansmono-boldoblique.ttf
+dejavusans bold italic normal normal dejavusansboldoblique dejavusans-boldoblique.ttf
+\stopnarrowtyping
+
+As the first hit is used we need to be more specific with respect to the
+name, so lets do that in an example definition:
+
+\starttyping
+\definefont[TitleFont][spec:dejavuserif-bold-italic*default sa 1]
+\stoptyping
+
+Watch the prefix \type {spec}. Wolfgang Schusters \type {simplefonts} module
+nowadays uses this method to define sets of fonts based on a name only
+specification. Of course that works best if a fontset has well defined
+properties.
+
+\stopsection
+
+\startsection[title=Selectfont]
+
+The selectfont interface by Wolfgang Schuster can be used to define fonts
+by name. For a long term project workflow you probably want to use filenames
+but for average use names do well:
+
+\starttyping
+\definefontfamily [mainface] [serif] [DejaVu Serif]
+\definefontfamily [mainface] [sans] [DejaVu Sans]
+\definefontfamily [mainface] [mono] [DejaVu Sans Mono] [features=none]
+\definefontfamily [mainface] [math] [Dejavu Math]
+\stoptyping
+
+This setup is triggered in the usual way:
+
+\starttyping
+\setupbodyfont[mainface]
+\stoptyping
+
+When you combine different designs you may need to apply a relative scale:
+
+\starttyping
+\definefontfamily [mainface] [math] [XITS Math] [rscale=1.1]
+\stoptyping
+
+Some fonts come in designsizes, like Latin Modern:
+
+\starttyping
+\definefontfamily
+ [mainface]
+ [serif]
+ [Latin Modern Roman]
+ [designsize=auto]
+\stoptyping
+
+You can define fallbacks, for example:
+
+\starttyping
+\definefallbackfamily
+ [mainface]
+ [serif]
+ [DejaVu Serif]
+ [range=cyrillic]
+
+\definefontfamily [mainface] [serif] [TeX Gyre Pagella]
+\stoptyping
+
+Here Pagella is used with missing characters taken from Dejavu. The ranges
+are defined with:
+
+\starttyping
+\definefontfamilypreset
+ [range:cyrillic]
+ [range={cyrillic,
+ cyrillicextendeda,
+ cyrillicextendedb,
+ cyrillicsupplement}]
+\stoptyping
+
+For more details you can consult the wiki and the source file \type {font-sel.mkvi}.
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/fonts/fonts/fonts-math.tex b/doc/context/sources/general/fonts/fonts/fonts-math.tex
new file mode 100644
index 000000000..766204937
--- /dev/null
+++ b/doc/context/sources/general/fonts/fonts/fonts-math.tex
@@ -0,0 +1,1093 @@
+% language=uk
+
+% todo:
+
+% \starttext
+% \setupbodyfont[cambria]
+% \setupmathematics[kernpairs=yes]
+% $abcd$ % 𝑎𝑏
+% \stoptext
+%
+% kernpairs = {
+% [0x1D44E] = {
+% [0x1D44F] = 1000, -- 𝑎𝑏 demo
+% }
+% },
+
+\startcomponent fonts-math
+
+\environment fonts-environment
+
+\startchapter[title=Math][color=darkmix-3]
+
+\startsection[title=Introduction]
+
+As one can expect, math support in \CONTEXT\ is to some extend modelled after
+what plain \TEX\ provides, plus what was later decided to be standard. This
+mostly concerns the way fonts behave and what names are used to access glyphs or
+special constructs. It means that when you come from another macro package you
+can stick to coding math the way you did before, at least the basic coding. In
+addition to this, \CONTEXT\ gives control over fonts, structure and rendering and
+most of that was either driven by personal need or user demand. To be honest,
+many of the options are probably of not much interest to the average user.
+
+As we focus on fonts we will only touch this aspect of math here. Right from when
+we started with developing \LUATEX, cleaning op the math part of \CONTEXT\ was
+part of the game. Some primitives were added that would make it possible to avoid
+unnecessary complex macros to get certain glyphs rendered, like radicals, accents
+and extensibles. This was made easy because we also support \OPENTYPE\ math and
+because we knew that eventually the Latin Modern and Gyre fonts would also
+support \OPENTYPE. In order to move forward and get rid of traditional eight bit
+fonts \CONTEXT\ \MKIV\ can construct a virtual \OPENTYPE\ font from traditional
+math fonts. It makes not much sense to discuss that here as by now this method is
+only provided for reasons of compatibility and a reference to the past. As a lot
+of time went into this it will always stay around if only to remind us of what
+we went through to get where we are now.
+
+\stopsection
+
+\startsection[title=\UNICODE\ math]
+
+Due to the limited amount of glyphs in a \TYPEONE\ font a macro package has to
+jump through loops in order to get traditional \TEX\ engines behave well. As a
+practical consequence these fonts are often a mixture of characters, symbols,
+punctuation and snippets that make up larger shapes. The font dimensions in these
+files have often special meanings too.
+
+This has all changed considerably with math being part of \UNICODE. It was however
+\MICROSOFT\ where the real action took place: the development of the first font that
+combined \UNICODE\ with \OPENTYPE\ technology. The Cambria font can be considered
+the benchmark for fonts that surfaced later. The characteristic of a math font are
+the following:
+
+\startitemize[packed]
+ \startitem All math alphabets are present: latin as well as greek, in regular,
+ italic, bold, fraktur and script variants as well as some combinations of these. \stopitem
+ \startitem The symbols that make sense are present (read: the more obscure shapes
+ can be omited). \stopitem
+ \startitem For the characters that make sense, there are two variants that render well
+ at smaller sizes: script and scriptscript. In the font they have the same size but
+ the application will scale them down. This feature is named \type {ssty}. \stopitem
+ \startitem Characters that can extend horizontally (for instance accents and arrows) or vertically
+ (like radicals and fences) have associated larger variants and carries information about
+ how to grow indefinitely. \stopitem
+ \startitem There is a whole lot of special math dimensions. Most of the ones
+ already used in \TEX\ are present. \stopitem
+ \startitem Some glyphs come in variants in order to please special usage. There
+ can also be variants for script or fraktur alphabets. \stopitem
+\stopitemize
+
+This means that in practice an \OPENTYPE\ math font is quite large. We easily
+have thousands of glyphs. It also means that creating such a font involves some
+expertise and this is one of the reasons why \TEX\ usergroups have joined forces
+in developing a suite of fonts. There are also other initiatives in the \TEX\
+community, of which Xits is an example. \footnote {This is a useable
+variant of Stix fonts with proper math features, some extra glyphs and
+experimental right||to||left shapes.} The well known Lucida Bright math font
+package has also been upgraded to a set of \OPENTYPE\ math fonts.
+
+The fact that there are not that many math fonts out there has a positive side as
+well: \CONTEXT\ comes with them pre|-|configured. Because during the development
+of \LUATEX\ we needed to have at least a couple of fonts for testing, and because
+it makes no sense to waste time on traditional fonts, the Latin Modern, Palatino,
+Times and a few more fonts were (and still are) provided as virtual \UNICODE\
+fonts.
+
+In a regular text font, what you key in is what you get out. So, when you've
+chosen a font with an italic shape, you get italic shapes, even if the smallcaps
+feature is enabled. In math, if you use the right unicodes you also get the shape
+you expect. Because in this case italic shapes are situated in one of the
+alphabets you explicitly choose a rendering. You can enter the right codepoints
+directly, so for instance if you enter \UNICODE\ character \type {U+1D434} you
+will get \mathematics {\utfchar {"1D434}}. In practice something like \type {$\bi
+A$} should also give that character if only because that is what we have been
+doing for over three decades. This means that the engine has to map a regular
+\type {A} onto the bold italic alphabet. In a traditional approach you will use
+math families for this, but in \CONTEXT\ \MKIV\ we simply use one font and one
+family and let the \MKIV\ machinery do the rest.
+
+In text mode we switch fonts styles in the following way:
+
+\startbuffer
+regular {\it italic} {\bf bold} {\bi bold italic} and so on
+\stopbuffer
+
+\typebuffer
+
+The three commands shown here are shortcuts for font switches. This input is
+converted into an internal representation and after whatever manipulations
+are applied end up as:
+
+\blank \getbuffer \blank
+
+If we look at what fonts we end up with we get:
+
+\blank \markfonts{\getbuffer} \blank
+
+Now lets do the same in math mode:
+
+\startbuffer
+$regular {\it italic} {\bf bold} {\bi bold italic} and so on$
+\stopbuffer
+
+\typebuffer
+
+This time we get a different result:
+
+\blank \getbuffer \blank
+
+If again we analyze the fonts you see this:
+
+\blank \markfonts{\getbuffer} \blank
+
+All glyphs come from the same font. Instead of regular we get italic simply because
+math characters are italic by nature. The two character style switches are not
+really font switches but just make sure that the given input is mapped onto the
+right alphabet.
+
+A traditional approach using \TYPEONE\ fonts is to use a so called math family for
+each alphabet. In that case each alphabet maps one||to||one onto the font: when
+we switch to a bold family we just take the glyph that sits in that slot. In \MKIV\
+we have all characters in one family so behind the screens a given character is
+remapped.
+
+Now take a look at the following example:
+
+\startbuffer
+$text^{script^{scriptscript}}$
+\stopbuffer
+
+\typebuffer
+
+This renders to this, with the characters marked by font:
+
+\blank \markfonts{\getbuffer} \blank
+
+This time we have three different fonts: one for each of the three math sizes.
+But this representation is not entirely honest, because indeed we have three font
+instances for math, but the glyphs come from the same \OPENTYPE\ math font. We
+just load the same font three times, once for each size. In fact we load the
+font once, but use three copies, scaled accordingly to the relative scale the
+font prescribes.
+
+There is a whole bunch of commands to choose specific characters in math mode
+using a regular input. These are state switching commands.
+
+\def\SampleLine#1#2#3%
+ {\NC \type{#1}\space
+ \ifx#2\empty\else\type{#2}\fi\space
+ \ifx#3\empty\else\type{#3}\fi
+ \NC $#1 a$
+ \NC $#1 A$
+ \NC \NR}
+
+\starttabulate[|||||]
+\HL
+\SampleLine \mr \empty \empty
+\HL
+\SampleLine \mathdefault \empty \empty
+\SampleLine \mathscript \empty \empty
+\SampleLine \mathfraktur \empty \empty
+\SampleLine \mathblackboard\empty \empty
+\HL
+\SampleLine \rm \mathrm \empty
+\SampleLine \ss \mathss \empty
+\SampleLine \tt \mathtt \empty
+\HL
+\SampleLine \tf \mathtf \tfmath
+\SampleLine \sl \mathsl \slmath
+\SampleLine \it \mathit \itmath
+\HL
+\SampleLine \bf \mathbf \bfmath
+\SampleLine \bs \mathbs \bsmath
+\SampleLine \bi \mathbi \bimath
+\HL
+\stoptabulate
+
+As you can see here, some commands have synonyms. The short commands adapt
+themselves to text and mathmode, the longer ones are meant for use in math mode
+only.
+
+In text mode distinctive shapes are either a font property (the whole font looks
+that way) or a stylistic alternate (an extra feature of a font). In math mode we
+can have alternates, but in addition to the previously mentioned alphabet
+switchers we have a few more:
+
+\starttabulate[|||||]
+\HL
+\SampleLine \frak \empty \empty
+\SampleLine \cal \empty \empty
+\SampleLine \bbd \empty \empty
+\SampleLine \blackboard \empty \empty
+\SampleLine \fraktur \empty \empty
+\SampleLine \gothic \empty \empty
+\HL
+\stoptabulate
+
+This chapter is not meant as an introduction to math but it is good to know
+that math font support in \CONTEXT\ is rather flexible. There are several
+mechanisms for remapping and converting characters and sequences into
+others and more is possible. Here is one:
+
+\startbuffer
+\startformula
+\reals {\mathbf R} \utfchar{"0211D} \utfchar{"1D411}
+\stopformula
+\stopbuffer
+
+\typebuffer \blank \getbuffer \blank
+
+Compare this to:
+
+\startbuffer
+\setupmathematics[symbolset=blackboard-to-bold]
+\startformula
+\reals {\mathbf R} \utfchar{"0211D} \utfchar{"1D411}
+\stopformula
+\stopbuffer
+
+\typebuffer \blank \start \getbuffer \stop \blank
+
+Greek is always troublesome because instead of regular text shapes math uses a
+few variants. Because in \UNICODE\ characters are only included once, we have
+gaps in the math alphabets but \MKIV\ will take care of this. \footnote {This is
+a typical example of where exceptions in a standard force all applications that
+deal with it have to implement tweaks.} Depending on the field an author has to
+choose between upright and italic greek:
+
+\startbuffer
+$\nabla \alpha \mathgreekupright \nabla \alpha \mathgreekitalic \nabla \alpha$
+\stopbuffer
+
+\typebuffer \blank \start \getbuffer \stop \blank
+
+By default \CONTEXT\ is set up as follows:
+
+\starttyping
+\setupmathematics
+ [sygreek=normal,
+ lcgreek=italic,
+ ucgreek=normal]
+\stoptyping
+
+Again, these are not features of a font. The font just provides the glyphs and
+the \TEX\ engine, controlled by \CONTEXT\ takes care of mapping characters to
+glyphs and building special constructs. The same is true for spacing. Although
+math fonts do have kerning information, most of the math spacing is controlled
+by properties of characters and not by the font.
+
+\unexpanded\def\SampleLine#1%
+ {\NC
+ \type{$a #1{+} b$}
+ \NC
+ \ruledhbox{$\mathsurround\zeropoint a#1{+}b$}
+ \NC \NR}
+
+\starttabulate[|||]
+\SampleLine \mathord
+\SampleLine \mathpunct
+\SampleLine \mathinner
+\SampleLine \mathop
+\SampleLine \mathalpha
+\SampleLine \mathnothing
+\SampleLine \mathbin
+\SampleLine \mathrel
+\stoptabulate
+
+As a user you don't have to worry about these issues because characters are tagged
+according to their usage. \footnote {There are a few more commands, like \type
+{\mathlimop}, \type {\mathnolop} and \type {mathbox} but these are used
+differently.}
+
+With \TEX\ being the oldest and still dominant math renderer it is no surprise
+that \MICROSOFT\ modelled its math renderer after \TEX\ and Cambria quite well
+suits the concept. In retrospect it is somewhat unfortunate that we're still
+stuck with some left overs (or compromises) from the past with respect to spacing
+built into the font. However, as long as this is consistent over fonts it's not
+that relevant. You can always influence the spacing with the commands mentioned.
+
+If you look at the low level definitions in for instance plain \TEX\ but also in
+\CONTEXT\ \MKII\ that relate to prime symbols it probably takes a while before you
+figure out what happens there. For instance, the prime symbol is triggered by a
+quote and multiple in a row results in primes that are spaced tightly. In
+\UNICODE\ we have slots for single, double and tripple primes. Therefore, in
+\MKIV\ we have a mechanism that accepts different kinds of input that eventually
+all end up in one of these three glyphs.
+
+\unexpanded\def\SampleLine#1%
+ {\NC \type{#1} \NC #1 \NC \NR}
+
+\starttabulate[|||]
+\SampleLine{$f^2$}
+\SampleLine{$f\prime^2$}
+\SampleLine{$f\prime\prime^2$}
+\SampleLine{$f\prime\prime\prime^2$}
+\SampleLine{$f{\prime}^2$}
+\SampleLine{$f{\prime\prime}^2$}
+\SampleLine{$f{\prime\prime\prime}^2$}
+\SampleLine{$f'(x)$}
+\SampleLine{$f''(x)$}
+\SampleLine{$f'''(x)$}
+\SampleLine{$f\utfchar{0x2032}(x)$}
+\SampleLine{$f\utfchar{0x2033}(x)$}
+\SampleLine{$f\utfchar{0x2034}(x)$}
+\SampleLine{$f\utfchar{0x2032}\utfchar{0x2032}(x)$}
+\SampleLine{$f\utfchar{0x2032}\utfchar{0x2032}\utfchar{0x2032}(x)$}
+\SampleLine{$f\utfchar{0x2033}\utfchar{0x2032}(x)$}
+\SampleLine{$f\utfchar{0x2032}\utfchar{0x2033}(x)$}
+\stoptabulate
+
+Again, this is not the same as ligature building features in text fonts, but
+handled in a different way.
+
+The \TEX\ engine understands the concept of italic correction. When an italic
+shape is followed by for instance an upright shape, you can insert a \type {\/}
+and the engine will add a correction as defined in the font. In \OPENTYPE\ we
+don't have such corrections available but we can fake it, which is what the \type
+{itlc} feature in \CONTEXT\ does. However, you need to enable this feature
+explicitly. An example of a setup is:
+
+\starttyping
+\definefontfeature
+ [default]
+ [default]
+ [itlc=yes,textitalics=yes]
+
+\setupitaliccorrection
+ [global,always]
+\stoptyping
+
+This will make sure that the right amount of correction is added between
+italic shapes and non italics or boxes. Using \type {text} instead of
+\type {always} would limit the correction to glyphs only and leaving out
+the \type {global} would permit selective (grouped) usage at the cost
+of more runtime. There is no need for the \type {\/} here.
+
+In math we also can have italic correction but there it is built into the engine
+and in traditional \TEX\ no directives are needed. Italic correction properties
+in math fonts are somewhat troublesome as their application depends on what we're
+dealing with: symbols, super- and subscripts, etc. Because early versions of
+\LUATEX\ didn't handle all of it well, if only because the fonts were not yet okay,
+the \MKIV\ math handler provides a bit of control.
+
+\def\SampleLine#1#2%
+ {\NC #1
+ \NC \setupmathematics[italics=#1]\ruledhbox{$m$ t}
+ \NC \setupmathematics[italics=#1]\ruledhbox{$m$ {\it t}}
+ \NC \setupmathematics[italics=#1]\ruledhbox{t $m$ t $m$ {\it t}}
+ \NC #2
+ \NC \NR}
+
+\starttabulate[||||||]
+\SampleLine0{no correction}
+\SampleLine1{only apply italics when the font carries them}
+\SampleLine2{apply italics provided by the font or automatically calculated}
+\SampleLine3{apply italics based on an emwidth and character properties}
+\SampleLine4{use method 1 but fall back on 3 if needed}
+\stoptabulate
+
+Because we cannot rely on fonts too much, we default to method~3 which in practice
+works out well, so the setup is:
+
+\starttyping
+\setupmathematics
+ [italics=3]
+\stoptyping
+
+There are all kind of commands that can be used to build math constructs in such a
+way that super- and subscripts are consistently rendered. It goes beyond this
+chapter to discuss them and most users will never see or use those commands. The
+main message of the examples above is that text and math use different fonts and
+properties and therefore also different methods in rendering text or a formula.
+Even if the names of mechanisms are the same (like italics) you cannot assume
+that both modes do exactly the same.
+
+\stopsection
+
+\startsection[title=Bold math]
+
+If you look at what \UNICODE\ provides you will notice that there are quite some
+bold characters. First of all there are a bunch of alphabets and because bold is
+not present in the text part of \UNICODE\ these alphabets have no holes. Then
+there are some symbols that have special meaning.
+
+\startluacode
+local find = string.find
+local NC, NR = context.NC, context.NR
+
+context.starttabulate { "|Tl||l|" }
+for unicode, entry in table.sortedhash(characters.data) do
+ local description = entry.description
+ if find(description,"^MATHEMATICAL BOLD") then
+ NC() context("U+04X",unicode)
+ NC() context.mathematics(utf.char(unicode))
+ NC() context(description)
+ NC() NR()
+ end
+end
+context.stoptabulate()
+\stopluacode
+
+The biggest mistake one can make when discussing bold math is the assumption that
+these bold alphabets are meant for section titles and other structural elements
+that need some emphasis. This is not true, in that case we would expect the whole
+formula to be bold and the bold symbols or variables would be even more bold.
+Bold math boils down to {\em all} math being bold. The reason why we show the
+list of bold characters on the previous pages is that it gives a good impression of
+fact that we're mostly given alphabets in an otherwise regular font.
+
+As Latin Modern (being derived from Computer Modern) has some bold extras in
+\MKII\ to some extend we do support a complete bold math switch but mixing bold
+formulas with regular ones has some limitations. Math typesetting consists of two
+phases: first the input is translated into a special list where references to
+fonts are not yet resolved. Instead families are used and each family has three
+sizes: text, script and scriptscript. In a second pass the formula is typeset and
+the families get translated into fonts. So, if we change the definition of a
+family, say math italic into bold math italic, then the definition that is actual
+when the second pass takes place is used.
+
+Although \LUATEX\ provides for many more families and as a consequence we could
+have replaced the \MKII\ mechanism with a more complete one, instead we just
+forgot about it and stuck to one family for regular math and another one for bold
+math. Okay, this is not entirely true as later on we added some more in order to
+deal with bidirectional typesetting.
+
+Only a few math fonts come with a bold variant. One of the objectives of the \TEX
+Gyre math font project is to explore the possibilities of bold math companions,
+but such a font will probably have less coverage, simply because no real complex
+math will end up in for instance section titles.
+
+When I wrote this down there were not that many math fonts that come with a real
+(complete) bold variant. The \CONTEXT\ math font subsystem tries to fill this gap
+as good as possible by using pseudo fonts. When a typeface doesn't define a math
+bold variant a pseudo setup is used. When a real bold font is used, it could be
+that not all alphabets are supported in which case a suitable alternative is
+tried.
+
+The Xits font, assembed from Stix and enhanced by Khaled Hosny, comes with a bold
+variant but the coverage is not complete, at least not when I wrote this
+paragraph. This can go unnoticed because \CONTEXT\ tries to work around this. On
+the other hand, it definitely has bold properties, which can be seen from the
+next example. You switch between regular and bold math with the \type {\mr} and
+\type {\mb} commands.
+
+\startbuffer
+\switchtobodyfont[xitsbidi]
+
+$ \sqrt{x } \quad
+ \mb \sqrt{mb} \quad
+ \mathupright \sqrt{u } \quad
+ \mr \sqrt{mr} \quad
+ \mathupright \sqrt{u } \quad
+ \mathdefault \sqrt{d }
+$
+\stopbuffer
+
+\typebuffer \blank \start \getbuffer \stop \blank
+
+You can track some of what happens with:
+
+\starttyping
+\enabletrackers[math.remapping,math.families]
+\stoptyping
+
+You will get some information about remapping or when it fails if fallback
+remapping is used. But no matter what happens with glyphs, you will notice in
+this example that the radical symbol is bold indeed.
+
+\stopsection
+
+\startsection[title=Bidirectional math]
+
+There is not that much to tell about bidirectional math typesetting, simply
+because the fonts are still in development. However, Khaled Hosny added
+some support to the Xits font. Of course you need to load this font first:
+
+\starttyping
+\switchtobodyfont[xitsbidi]
+\stoptyping
+
+In the previous chapter we mentioned bold math and as Xits also comes with
+a bold variant which means that this command loads the whole lot (which is
+fast enough anyway).
+
+Easiest is to just show a few examples. When in left to right mode we get what we
+are accustomed to:
+
+\startbuffer
+\setupmathematics[align=l2r]
+
+\startformula
+\sqrt{x^2\over 4x} \eqno(1)
+\stopformula
+
+\startformula
+5 < 6 > 4
+\stopformula
+
+\startformula
+5 \leq 6 \geq 7
+\stopformula
+\stopbuffer
+
+\typebuffer \start \switchtobodyfont[xitsbidi] \getbuffer \stop
+
+However, when we go the other way, we automatically get digits converted to
+arabic.
+
+\startbuffer
+\setupmathematics[align=r2l,bidi=yes]
+
+\startformula
+\sqrt{ف^2\over 4ب} \eqno(1)
+\stopformula
+
+\startformula
+5 < 6 > 4
+\stopformula
+
+\startformula
+5 \leq 6 \geq 7
+\stopformula
+\stopbuffer
+
+\typebuffer \start \switchtobodyfont[xitsbidi] \getbuffer \stop
+
+You don't have to worry about how the font is set up, but not that much is needed
+because \CONTEXT\ does it for you and the Xits typescripts carries the right
+definitions. Just to give you an idea, we show a feature definition: The magic is
+in the \type {rtlm} feature combined with \type {locl}.
+
+\starttyping
+\definefontfeature
+ [mathematics-r2l]
+ [mathematics]
+ [language=ara,
+ rtlm=yes,
+ locl=yes]
+\stoptyping
+
+Some symbols are mirrored too:
+
+\startbuffer
+\setupmathematics[align=r2l,bidi=yes]
+
+\startformula
+\sum^\infty_{س=0} س^2 \eqno(2)
+\stopformula
+\stopbuffer
+
+\typebuffer \start \switchtobodyfont[xitsbidi] \getbuffer \stop
+
+And of course the extensible fences are done properly too:
+
+\startbuffer
+\setupmathematics[align=r2l,bidi=yes]
+
+\startformula
+\left(\root{2} \of{155}\right)
+\stopformula
+
+\startformula
+\left[\int^{55}_{123} 666^3\right]
+\qquad\textstyle\left[\int^{55}_{123} 666^3\right]
+\stopformula
+
+\startformula
+\left\{\sum^{55}_{123} 666^3\right\}
+\stopformula
+\stopbuffer
+
+\typebuffer \start \switchtobodyfont[xitsbidi] \getbuffer \stop
+
+The real torture test is the radical sign. A mirrored shape is used
+and it grows upwards as well as leftwards.
+
+\startbuffer
+\setupmathematics[align=r2l,bidi=yes]
+
+\startformula
+\sqrt{\sqrt{\sqrt{\sqrt{\sqrt{\sqrt{\sqrt{\sqrt{\sqrt{\sqrt{55}}}}}}}}}}
+\stopformula
+\stopbuffer
+
+\typebuffer \start \switchtobodyfont[xitsbidi] \getbuffer \stop
+
+\stopsection
+
+\startsection[title=Styles]
+
+In text mode you use font switches like \type {\sl} that switches the current font
+to a slanted one. In math mode it is an alphabet switch in the same font. In
+fact, there isn't much to choose from fonts there, apart from a massive switch
+to bold, in which case \type {\bf} is just a bolder alphabet in that bolder font.
+
+A lot of things in math mode happen automatically. There are for instance always
+three instances of (the same) font active, each different in size: text, script
+and the smallest, scriptscript and when you ask for instance for a superscript
+the next smaller size is used.
+
+\starttabulate[|l|l|l|]
+\NC normal \NC \type {\textstyle} \NC $\textstyle text^{script^{scriptscript}}$ \NC \NR
+\NC smaller \NC \type {\scriptstyle} \NC $\scriptstyle text^{script^{scriptscript}}$ \NC \NR
+\NC smallest \NC \type {\scriptscriptstyle} \NC $\scriptscriptstyle text^{script^{scriptscript}}$ \NC \NR
+\stoptabulate
+
+In text style, superscripts can go twice smaller, but in script style only one
+smaller size is left, and in scriptscript style you're stuck with one size. The
+commands in the second column can be used to force a style.
+
+The math formula builder has an important property: the formula is typeset after
+it has been scanned completely. In a traditional setup that has some
+consequences. Take this:
+
+\starttyping
+one \sl two \bf three \bi four
+\stoptyping
+
+In a traditional setup four so called families are used and each character gets
+tagged with a family number. So we have (for instance):
+
+\blank \start \tttf
+o\low7n\low7e\low7 t\low6w\low6o\low6 t\low5h\low5r\low5e\low5e\low5 f\low9o\low9u\low9r\low9
+\stop \blank
+
+As the number of families was limited there could be at most 16 families. In
+fact, the first four were traditionally reserved for math roman, math italic,
+symbol and extensibles. Then, due to the limit of 256 characters per font,
+another few were used for additional symbol fonts. So, adding a few more variants
+could exhaust the family pool quite fast. You could argue that we could halfway
+redefine a family but this will not work as there is a one to one relationship
+between family numbers and fonts assigned to them when the formula has been
+read in (the last value counts). And grouping won't help you either.
+
+The actual (plain) situation is even more complex. As we have a limited number of
+characters per font, most symbols are accessed by name, and the name relates to a
+mathematical character definition using for instance \type {\mathchardef}. Such a
+definition refers to a slot in a specific family number and therefore font. It
+also puts a character in a so called math class. One of these, the alphanumeric
+class, with number~7, is special. Characters that are input directly on the
+keyboard (like \type {a}||\type {z} can also be tagged this way using \type
+{\mathcode}.
+
+When we switch a family, this will normally not affect a symbol defined as math
+character, simply because we refer to a specific family|/|slot combination, but
+when a character has class~7, then it will be taken from the current family. This
+permits latin letters, digits and greek letters to be typeset in different
+styles. So, in that traditional approach we have fonts that provide a bunch of
+symbols as well as some alphabets. Think for instance of a font with additional
+symbols where the regular alphabet slots contain blackboard shapes. The symbols
+are accessed directly and the characters are accessed via the regular \type
+{a}||\type {z} characters as these will adapt to the family and therefore font.
+In practice users will not notice this complication as macro packages hide the
+implementation details.
+
+In \MKIV\ the situation is different as there we have one family (or a few more
+if we use a full bold switch and|/|or bidirectional math). Although we no longer
+have the limit of 16 fonts we actually don't need that many families, at least
+not in the way we've set up \MKIV \footnote{A technical note: in principle the
+\MKIV\ approach can have a speed penalty compared to a multi||family approach but
+we don't care too much about it. Also, as we load less fonts the extra overhead gets
+compensated nicely.}
+
+\blank \start \tttf
+o\low1n\low1e\low1 t\low1w\low1o\low1 t\low1h\low1r\low1e\low1e\low1 f\low1o\low1u\low1r\low1
+\stop \blank
+
+So how does this relate to styles? Each family has three fonts and we can use the
+switch commands to choose any of these. In text mode we use the term style for a
+font switch, while in math mode it's more than that: indeed we switch a font, but
+only in size, but the spacing is also adapted. If a proper math font is used, the
+smaller sizes are actually alternates in the font, visually adapted to suit their
+use.
+
+In text mode we do this in order to limit the scope of a switch:
+
+\starttyping
+normal {\bf bold {\it italic} bold} normalbracket
+\stoptyping
+
+This is the same as:
+
+\starttyping
+normal \bgroup \bf bold \bgroup \it italic\egroup
+ \ bold\egroup \ normalbracket
+\stoptyping
+
+and:
+
+\starttyping
+normal \begingroup \bf bold \begingroup \it italic\endgroup
+ \ bold\endgroup \ normalbracket
+\stoptyping
+
+The \CONTEXT\ distribution ships with a plain math definition file that also uses
+one family but reassigns some math codes when we switch to another style. As the
+number of characters that this applies to this is efficient enough for a modern
+computer. A peek into \type {luatex-math.tex} gives an impression of what we deal
+with. However, keep in mind that the implementation in \MKIV\ goes it differently
+and is therefore more powerful. We also have hardly any definitions at the \TEX\
+end and use information from \type {char-def.lua} instead.
+
+In math mode there is a subtle difference in the way grouping works with styles:
+
+\starttyping
+text {\scriptstyle script} normal
+\stoptyping
+
+This is the same as:
+
+\starttyping
+text \bgroup\scriptstyle script\egroup\ normal
+\stoptyping
+
+but different from:
+
+\starttyping
+text \begingroup\scriptstyle script\endgroup\ script
+\stoptyping
+
+This has to do with the fact that a style switch is explicitly registered in the
+math list and grouping like this is not limiting the scope. In math mode the
+braced grouping mode actually does create a math group and there the scope of the
+switch is limited to that group. In practice users will not run into this but
+they can use macros that use \type {\begingroup}. Among other reasons, this is
+why we have a special mathstyle mechanism.
+
+\startbuffer
+\ruledhbox{$x\begingroup\scriptstyle x\endgroup x$} \quad
+\ruledhbox{$x\begingroup\setupmathstyle[script]x\endgroup x$} \quad
+\ruledhbox{$x{\setupmathstyle[script]x}x$} \quad
+\ruledhbox{$x\startmathstyle[script]x\stopmathstyle x$}
+\stopbuffer
+
+\typebuffer
+
+This gives:
+
+\startlinecorrection[blank] \dontleavehmode \getbuffer \stoplinecorrection
+
+Mechanisms that support the \type {mathstyle} parameter know how to apply the
+proper grouping so you don't have to worry there. You can best avoid using the
+verbose grouping command and stick to braces or the \type {start}||\type {stop}
+command. An example is the fence mechanism:
+
+\startbuffer
+\definemathfence
+ [fancybracket] [bracket]
+ [color=darkblue]
+\definemathfence
+ [smallbracket] [bracket]
+ [command=yes,color=darkgreen,mathstyle=small]
+\definemathfence
+ [normalbracket] [bracket]
+ [command=yes,color=darkred]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+We apply this to an example:
+
+\startbuffer
+$x \fenced[bar]{\frac{1}{x}} x$ \quad
+$x \fenced[doublebar]{\frac{1}{x}} x$ \quad
+$x \fenced[bracket]{\frac{1}{x}} x$ \quad
+$x \fenced[fancybracket]{\frac{1}{x}} x$ \quad
+$x \frac{1}{n} \normalbracket{\frac{1}{n}} \smallbracket{\frac{1}{s}} x$
+\stopbuffer
+
+\typebuffer
+
+Of course these somewhat weird examples are not real but at least they
+demonstrate the principles.
+
+\startlinecorrection[blank] \dontleavehmode \getbuffer \stoplinecorrection
+
+A math style is a combination of the following keys. Their effect can depend on
+the current state, for instance you can switch cramp or size indepently.
+
+\starttabulate[|T||]
+\NC display \NC display style, like text style but somewhat more spacy \NC \NR
+\NC text \NC text style, normally used inline \NC \NR
+\NC script \NC smaller than text cq. display style \NC \NR
+\NC scriptscript \NC smaller than script style \NC \NR
+\NC cramped packed \NC more tightly positioned superscripts \NC \NR
+\NC uncramped normal \NC normal positioned superscripts \NC \NR
+\NC small \NC switch to the next smaller style but keep cramp state \NC \NR
+\NC big \NC switch to the next larger style but keep cramp state \NC \NR
+\stoptabulate
+
+Future versions of \MKIV\ will provide more features (like parameter sets driven
+by keywords). As you might prefer a more symbolic approach we provide:
+
+\starttyping
+\definemathstyle[default][text,cramped]
+\stoptyping
+
+After this you can use the keyword \type {default} which has the advantage that
+you only need to change one definition in order to get different rendering.
+
+\stopsection
+
+\startsection[title=Supported fonts]
+
+As in \CONTEXT\ MKIV\ I wanted to go ahead with \UNICODE\ math as soon as the
+first version of \LUATEX\ showed up. Because at that time only Cambria was
+available I decided to provide virtual \UNICODE\ math fonts as a prelude to
+proper replacements for the popular \TYPEONE\ math fonts. In the meantime Xits
+came around and in 2012 we had quite useable math companions for the public Latin
+Modern, Pagella and Termes fonts and the \TEX\ user groups started shipping
+\OPENTYPE\ variants of Lucida. The virtual variants will still around so that we
+can compare them with the new implementations. As the official specification of
+\OPENTYPE\ math is not always clear from the beginning the \OPENTYPE\ fonts get
+improved over time. In fact, this is true not only for math fonts. Just think of
+this:
+
+\startitemize
+
+\startitem As \UNICODE\ gets extended, fonts might get more glyphs and possibly
+alternate shapes. \stopitem
+
+\startitem The more languages are supported, the more glyphs are to be available
+and features have to get language dependent instances. \stopitem
+
+\startitem The larger the font, the bigger the chance that mistakes get unnoticed
+especially when contextual subtitutions and positioning are used. \stopitem
+
+\startitem Math fonts can get more script and scriptscript alternates, more size
+variants, more advanced extensibles, bidirectional support, etc. \stopitem
+
+\stopitemize
+
+So, like regular programs, \LUATEX\ and macro packages, we now have fonts as
+component that needs occasional updating. Of course resources like hyphenation
+patterns are also subjected to this, so it's not a new aspect. But still, best
+keep en eye on font updates.
+
+While there are lots of text fonts, there are not that many math fonts, so you
+can safely assume that \CONTEXT\ ships with the proper setup for those fonts. Of
+course you have to choose a specific instance when you set up your own
+combination of fonts, but a peek into the typescripts shows the way.
+
+In the font manual and on the wiki you can find more about typescript and what is
+possible, so here we just take a look at one definition:
+
+\startnarrowtyping
+\starttypescript [serif] [dejavu] [name]
+ \definefontsynonym [Serif] [name:dejavuserif] [features=default]
+ \definefontsynonym [SerifBold] [name:dejavuserifbold] [features=default]
+ \definefontsynonym [SerifItalic] [name:dejavuserifitalic] [features=default]
+ \definefontsynonym [SerifBoldItalic] [name:dejavuserifbolditalic] [features=default]
+\stoptypescript
+
+\starttypescript [sans] [dejavu] [name]
+ \definefontsynonym [Sans] [name:dejavusans] [features=default]
+ \definefontsynonym [SansBold] [name:dejavusansbold] [features=default]
+ \definefontsynonym [SansItalic] [name:dejavusansoblique] [features=default]
+ \definefontsynonym [SansBoldItalic] [name:dejavusansboldoblique] [features=default]
+\stoptypescript
+
+\starttypescript [mono] [dejavu] [name]
+ \definefontsynonym [Mono] [name:dejavusansmono] [features=none]
+ \definefontsynonym [MonoBold] [name:dejavusansmonobold] [features=none]
+ \definefontsynonym [MonoItalic] [name:dejavusansmonooblique] [features=none]
+ \definefontsynonym [MonoBoldItalic] [name:dejavusansmonoboldoblique] [features=none]
+\stoptypescript
+
+\starttypescript[dejavu]
+ \definetypeface [dejavu] [rm] [serif] [dejavu] [default]
+ \definetypeface [dejavu] [ss] [sans] [dejavu] [default]
+ \definetypeface [dejavu] [tt] [mono] [dejavu] [default]
+ \definetypeface [dejavu] [mm] [math] [xits] [default] [scale=1.2]
+\stoptypescript
+\stopnarrowtyping
+
+So, in many cases you can just copy this blob and replace the font names by your
+own.
+
+Loading a font, and Dejavu is a predefined one, is done as follows:
+
+\starttyping
+\setupbodyfont[dejavu]
+\stoptyping
+
+In a similar fashion you can enable \type {cambria}, \type {pagella}, \type
+{termes}, \type {lucidaot}, etc.\ and if you don't use this command at all, you
+get Latin Modern. These fonts are part of \TEX\ distributions, including
+\CONTEXT\ stand||alone that can be downloaded from \CONTEXT\ garden.
+
+If you want to use Lucida, all you have to do when you have bought the fonts, is
+to put the \OPENTYPE\ files in a place where they can be found, for instance:
+
+\starttyping
+tex/texmf-fonts/fonts/data/lucida
+\stoptyping
+
+Of course you need to run \type {mtxrun --generate} afterwards so that the files
+can be found.
+
+\startnotabene
+ Tracing and characters coverage will be discussed here as soon as the styles
+ that are used for them are normalized.
+\stopnotabene
+
+\stopsection
+
+\startsection[title={Stylistic alternates}]
+
+Some fonts provide stylistic alternates. These can be described in goodies files
+and the Lucida setup is a good example. Here we demonstrate the effects. We
+disable the default math rendering (which takes the italic variants).
+
+\startbuffer[sa:1]
+\switchtobodyfont[lucidaot,14.4pt]
+\setupmathrendering[lucidaot][it=]
+$x
+ ^{i \leftarrow 0 = ∅}
+ _{i \leftarrow 0 = ∅}
+$
+\stopbuffer
+
+\typebuffer[sa:1]
+
+The next code enabled three alternatives:
+
+\startbuffer[sa:2]
+\switchtobodyfont[lucidaot,14.4pt]
+\setupmathrendering[lucidaot][it=]
+$x
+ ^{i \leftarrow 0 = ∅}
+ _{\setmathfontalternate{arrow}
+ \setmathfontalternate{dotless}
+ \setmathfontalternate{zero}
+ i \leftarrow 0 = ∅}
+$
+\stopbuffer
+
+\typebuffer[sa:2]
+
+Here we set them in one go:
+
+\startbuffer[sa:3]
+\switchtobodyfont[lucidaot,14.4pt]
+\setupmathrendering[lucidaot][it=]
+$x
+ ^{i \leftarrow 0 = ∅}
+ _{\setmathfontalternate{arrow,dotless,zero}
+ i \leftarrow 0 = ∅}
+$
+\stopbuffer
+\
+\typebuffer[sa:3]
+
+The last example shows how to enable these features globally:
+
+\startbuffer[sa:4]
+\switchtobodyfont[lucidaot,14.4pt]
+\setupmathrendering[lucidaot][it=]
+\setupmathematics[stylealternative={arrow,dotless,zero}]
+$x
+ ^{i \leftarrow 0 = ∅}
+ _{i \leftarrow 0 = ∅}
+$
+\stopbuffer
+
+\typebuffer[sa:4]
+
+The results are collected here:
+
+\startlinecorrection[blank]
+\startcombination[4*1]
+ {\vbox{\hsize.2\hsize\midaligned{\nospacing\getbuffer[sa:1]}}} {\bf nothing}
+ {\vbox{\hsize.2\hsize\midaligned{\nospacing\getbuffer[sa:2]}}} {\bf stepwise}
+ {\vbox{\hsize.2\hsize\midaligned{\nospacing\getbuffer[sa:3]}}} {\bf combined}
+ {\vbox{\hsize.2\hsize\midaligned{\nospacing\getbuffer[sa:4]}}} {\bf global}
+\stopcombination
+\stoplinecorrection
+
+\stopsection
+
+\startsection[title=Italics and limits]
+
+An \OPENTYPE\ font treats italic correction differently from traditional fonts.
+Officially the italic correction is used for placement above and below limits
+where the scripts shift left and right half of the correction from the center of
+the shape. Advanced kerns are then to be used for anchoring the scripts when they
+are placed at the right side (so far no fonts seem to do this). Because we cannot
+foresee if fonts compensate for correction then we can control placement a bit.
+There is a parameter \type {\mathnolimitsmode} that controls the correction.
+
+\definebodyfontenvironment[20pt]
+
+\startlinecorrection
+\startcombination[5*1]
+ {\ruledhbox to .15\hsize{\hss\showglyphs\switchtobodyfont[20pt]\mathnolimitsmode0$\displaystyle\int\nolimits^0_1$\hss}} {\tttf 0}
+ {\ruledhbox to .15\hsize{\hss\showglyphs\switchtobodyfont[20pt]\mathnolimitsmode1$\displaystyle\int\nolimits^0_1$\hss}} {\tttf 1}
+ {\ruledhbox to .15\hsize{\hss\showglyphs\switchtobodyfont[20pt]\mathnolimitsmode2$\displaystyle\int\nolimits^0_1$\hss}} {\tttf 2}
+ {\ruledhbox to .15\hsize{\hss\showglyphs\switchtobodyfont[20pt]\mathnolimitsmode3$\displaystyle\int\nolimits^0_1$\hss}} {\tttf 3}
+ {\ruledhbox to .15\hsize{\hss\showglyphs\switchtobodyfont[20pt]\mathnolimitsmode4$\displaystyle\int\nolimits^0_1$\hss}} {\tttf 4}
+\stopcombination
+\stoplinecorrection
+
+A value larger than 15 is interpreted as a factor (in the usual \TEX\ way 1000
+means 1.0). We have some values left for future use when correction is to be
+combined with kerns.
+
+In \CONTEXT\ we set the value to 1 which means that the factors for super- and
+subscript are set via math parameters (or constants in the font). We use a
+default of \type {{0,800}} so we don't shift the superscript and the subscript we
+shift less than the italic correction. This is driven by a feature but you can
+change the values before loading a font, for instance with:
+
+\starttyping
+\adaptfontfeature[*math*][mathnolimitsmode={100,700}]
+\stoptyping
+
+The defaults come out as:
+
+\startlinecorrection
+\startcombination[5*1]
+ {\ruledhbox to .15\hsize{\hss\showglyphs\switchtobodyfont[modern, 20pt]$\displaystyle\int\nolimits^0_1$\hss}} {\tttf modern}
+ {\ruledhbox to .15\hsize{\hss\showglyphs\switchtobodyfont[xits, 20pt]$\displaystyle\int\nolimits^0_1$\hss}} {\tttf xits}
+ {\ruledhbox to .15\hsize{\hss\showglyphs\switchtobodyfont[lucidaot,20pt]$\displaystyle\int\nolimits^0_1$\hss}} {\tttf lucidaot}
+ {\ruledhbox to .15\hsize{\hss\showglyphs\switchtobodyfont[pagella, 20pt]$\displaystyle\int\nolimits^0_1$\hss}} {\tttf pagella}
+ {\ruledhbox to .15\hsize{\hss\showglyphs\switchtobodyfont[cambria, 20pt]$\displaystyle\int\nolimits^0_1$\hss}} {\tttf cambria}
+\stopcombination
+\stoplinecorrection
+
+\stopsection
+
+\startsection[title=Kerning]
+
+Math kerns in \OPENTYPE\ are quite advanced and use a staircase model left
+and|/|or right of characters. However, hardly any math font implements them
+(extensively). Therefore we provide a way to fine tune your fonts to your
+preferences. You can test this mechanism by patching \type {cambria-math.lfg} by
+adding this to the mathematics subtable:
+
+\starttyping
+kernpairs = {
+ [0x1D44E] = {
+ [0x1D44F] = 1000, -- 𝑎𝑏 demo
+ }
+}
+\stoptyping
+
+After that, the next example should work:
+
+\starttyping
+\starttext
+ \setupbodyfont[cambria]
+ \setupmathematics[kernpairs=yes]
+ $abcd$
+\stoptext
+\stoptyping
+
+There should be a gap between the $𝑎$ and $𝑏$. It is not shown here because I
+don't want to mess up my goodie file.
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/fonts/fonts/fonts-methods.tex b/doc/context/sources/general/fonts/fonts/fonts-methods.tex
new file mode 100644
index 000000000..eac86d694
--- /dev/null
+++ b/doc/context/sources/general/fonts/fonts/fonts-methods.tex
@@ -0,0 +1,376 @@
+% language=uk
+
+\startcomponent fonts-methods
+
+\environment fonts-environment
+
+\startchapter[title=Methods][color=darkyellow]
+
+\startsection[title=Introduction]
+
+A font definition looks as follows:
+
+\starttyping
+\definefont
+ [MyFont]
+ [namepart method specification size]
+\stoptyping
+
+For example:
+
+\starttyping
+\definefont
+ [MyFont]
+ [Bold*default at 12.3pt]
+\stoptyping
+
+We have already discussed the namepart and size in a previous chapter and here
+we will focus on the method. The method is represented by a character and although
+we currently only have a few methods there can be many more.
+
+\stopsection
+
+\startsection[title=: (direct features)]
+
+This one is seldom used, but those coming from another macro package to \CONTEXT\
+might use it as first attempt to defining a font.
+
+\starttyping
+\definefont
+ [MyFont]
+ [Bold:+kern;+liga; at 12.3pt]
+\stoptyping
+
+This is the \XETEX\ way of defining fonts. A \type {+} means as much as
+\quotation {turn on this feature} so you can guess what the minus sign does.
+Alternatively you can use a key/value approach with semicolons as separator. If
+no value is given the value \type {yes} is assumed.
+
+\starttyping
+\definefont
+ [MyFont]
+ [Bold:kern=yes;liga=yes; at 12.3pt]
+\stoptyping
+
+When we started supporting \XETEX\ we ran into issues with already present
+features of \CONTEXT\ as the \XETEX\ syntax also has some more obscure properties
+using slashes and brackets for signalling a file or name lookup. As in \CONTEXT\
+we prefer a more symbolic approach anyway, it never was a real issue.
+
+\stopsection
+
+\startsection[title=* (symbolic features)]
+
+The most natural way to associate a set of features with a font instance
+is the following:
+
+\starttyping
+\definefont
+ [MyFont]
+ [Bold*default at 12.3pt]
+\stoptyping
+
+This will use the featureset named \type {default} and this one is defined in
+\type {font-pre.mkiv} which might be worth looking at.
+
+\starttyping
+\definefontfeature
+ [always]
+ [mode=auto,
+ script=auto,
+ kern=yes,
+ mark=yes,
+ mkmk=yes,
+ curs=yes]
+
+\definefontfeature
+ [default]
+ [always]
+ [liga=yes,
+ tlig=yes,
+ trep=yes] % texligatures=yes,texquotes=yes
+
+\definefontfeature
+ [smallcaps]
+ [always]
+ [smcp=yes,
+ tlig=yes,
+ trep=yes] % texligatures=yes,texquotes=yes
+
+\definefontfeature
+ [oldstyle]
+ [always]
+ [onum=yes,
+ liga=yes,
+ tlig=yes,
+ trep=yes] % texligatures=yes,texquotes=yes
+
+\definefontfeature % == default unless redefined
+ [ligatures]
+ [always]
+ [liga=yes,
+ tlig=yes,
+ trep=yes]
+
+\definefontfeature % can be used for type1 fonts
+ [complete]
+ [always]
+ [compose=yes,
+ liga=yes,
+ tlig=yes,
+ trep=yes]
+
+\definefontfeature
+ [none]
+ [mode=none,
+ features=no]
+\stoptyping
+
+These definitions show that you can construct feature sets on top of existing
+ones, but keep in mind that they are defined instantly, so any change in the
+parent is not reflected in its kids.
+
+In a font definition you can specify more than one set:
+
+\starttyping
+\definefont
+ [MyFont]
+ [Bold*always,oldstyle at 12.3pt]
+\stoptyping
+
+\stopsection
+
+\startsection[title=@ (virtual features)]
+
+This method is somewhat special as it demands knowledge of the internals
+of the \CONTEXT\ font code. Much of it is still experimental but it is a
+nice playground. A good example of its usage can be found in the file
+\type {m-punk.mkiv} where we create a font out of \METAPOST\ graphics.
+
+Another example is virtual math. As in the beginning of \LUATEX\ and \MKIV\
+there were only a few \OPENTYPE\ math fonts, and as I wanted to get rid
+of the old mechanisms, it was decided to virtualize the math fonts. For
+instance a Latin Modern Roman 10 point math font can be defined as follows:
+
+\starttyping
+\definefontsynonym
+ [LMMathRoman10-Regular]
+ [LMMath10-Regular@lmroman10-math]
+\stoptyping
+
+The \type {lmroman10-math} refers to a virtual definition and in this case
+it is one using a built|-|in constructor and therefore we use a goodies
+file to specify the font. That file looks as follows:
+
+\starttyping
+return {
+ name = "lm-math",
+ version = "1.00",
+ comment = "Goodies that complement latin modern math.",
+ author = "Hans Hagen",
+ copyright = "ConTeXt development team",
+ mathematics = {
+ ...
+ virtuals = {
+ ...
+ ["lmroman10-math"] = ten,
+ ...
+ },
+ ...
+ }
+}
+\stoptyping
+
+Here \type {ten} is a previously defined table:
+
+\startnarrowtyping
+local ten = {
+ { name = "lmroman10-regular.otf", features = "virtualmath", main = true },
+ { name = "rm-lmr10.tfm", vector = "tex-mr-missing" } ,
+ { name = "lmmi10.tfm", vector = "tex-mi", skewchar = 0x7F },
+ { name = "lmmi10.tfm", vector = "tex-it", skewchar = 0x7F },
+ { name = "lmsy10.tfm", vector = "tex-sy", skewchar = 0x30, parameters = true } ,
+ { name = "lmex10.tfm", vector = "tex-ex", extension = true } ,
+ { name = "msam10.tfm", vector = "tex-ma" },
+ { name = "msbm10.tfm", vector = "tex-mb" },
+ { name = "stmary10.afm", vector = "tex-mc" },
+ { name = "lmroman10-bold.otf", vector = "tex-bf" } ,
+ { name = "lmmib10.tfm", vector = "tex-bi", skewchar = 0x7F } ,
+ { name = "lmsans10-regular.otf", vector = "tex-ss", optional = true },
+ { name = "lmmono10-regular.otf", vector = "tex-tt", optional = true },
+ { name = "eufm10.tfm", vector = "tex-fraktur", optional = true },
+ { name = "eufb10.tfm", vector = "tex-fraktur-bold", optional = true },
+}
+\stopnarrowtyping
+
+This says as much as: take \type {lmroman10-regular.otf} as starting point
+and overload slots with ones found in the following fonts. The vectors are
+predefined as they are shared with other font sets like \type {px} and
+\type {tx}.
+
+In due time more virtual methods might end up in \CONTEXT\ because they are
+a convenient way to extend or manipulate fonts.
+
+\stopsection
+
+\startsection[title=Lua fonts]
+
+You can define a font in \LUA. In the process you can use all kind of helper
+functions that \CONTEXT\ provides. Here is an example:
+
+\typefile{fonts-demo-rule.lua}
+
+This code is stored in \type {fonts-demo-rule.lua} and we can load that font
+in the usual way, by specifying a filename:
+
+\startbuffer
+\definefont
+ [MyRuleFont]
+ [file:fonts-demo-rule.lua*default sa 1]
+\stopbuffer
+
+\typebuffer
+
+\getbuffer
+
+{\MyRuleFont So when we use it we get text typeset where all vowels are replaced
+by rules. The actualtext injection (in theory) makes it possible to cut and paste
+the text from the \PDF\ document but while writing this (mid 2016) a {\maincolor
+\type {mupdf}} based viewer couldn't handle it and {\maincolor \type {acrobat}}
+had problems with spaces.}
+
+\startbuffer
+\definefontfeature
+ [myrulefont]
+ [default]
+ [original=file:texgyrepagella-regular.otf]
+\definefont
+ [MyRuleFont]
+ [file:fonts-demo-rule.lua*myrulefont]
+\stopbuffer
+
+\typebuffer
+
+\getbuffer
+
+{\showfontkerns \MyRuleFont The previous code demonstrates how we can pass a
+fontname to be used as base to the generator. In case you wonder how features
+behave with such fonts: as you can see here, font kerns are indeed injected.
+Compared to {\maincolor \type {Dejavu}}, the {\maincolor \type {Pagella}} font
+has quite some more kerns.}
+
+\startbuffer
+\definefontfeature
+ [myrulefont]
+ [default]
+ [original=file:texgyrepagella-regular.otf,
+ option=line]
+\definefont
+ [MyRuleFont]
+ [file:fonts-demo-rule.lua*myrulefont]
+\stopbuffer
+
+\typebuffer
+
+\getbuffer
+
+{\MyRuleFont Here we show how the passed {\maincolor \type {option}} is handled.
+Because we no longer have a relationship with the height and depth, the real text
+is a bit harder to guess.}
+
+\stopsection
+
+\startsection[title=Old fuzzy fonts]
+
+Most natural is to use \OPENTYPE\ or \TYPEONE\ fonts. In the case of \TYPEONE\ a
+matching pair of \type {afm} and \type {pfb} files is needed. However, there can
+be situations where there is only a \type{tfm} and \type {pfb} file (or not even
+that: just a bitmap file).
+
+I will not show specimen here, simply because I don't have (nor want to have) the
+fonts needed in my development and production environments. The implementation
+was tested with a specific czech computer modern font.
+
+In a traditional (8 bit) setup we have an \type {tfm} file, a \type {pfb} file
+and a \type {enc file}. The order of the characters in the \type {tfm} file
+directly relates to the input encoding. The \type {enc} file relates that order
+to the order in the \type {pfb} file. The mapping from input encoding to font
+shape encoding happens via glyph names. In the \type {map} file we tell what
+\type {pfb} file to use with what \type {enc} file.
+
+However, in the case of the \type {csr.tfm} and \type {csr.pfb} file it looks
+like in practice the \type {enc} file is not used, probably because in the \type
+{pfb} file the standard encoding matches the order in the \type {tfm} file. This
+is of course a rather dangerous assumption, especially if information lacks to
+check it.
+
+The next example definitions demonstrate several paths to go from \UNICODE\ input
+(source file) to rendered shapes. As this is mostly meant for generic usage we
+use the low level definition code (\CONTEXT\ users are not supposed to use that
+method).
+
+\starttyping
+\font\foo=file:csr10.tfm:reencode=auto;mode=node;liga=yes;kern=yes
+\stoptyping
+
+This is the easiest way. We use the \type {tfm} file for dimensions, ligatures
+and kerns. The \type {auto} option will use the \type {pfb} file to identify the
+right mapping. We enable ligatures and kerns and we use node mode. This indicates
+that we're dealing with a pseudo \OPENTYPE\ setup here. You can provide a \type
+{pfb} file with the \type {pfbfile} feature in case the name differes from the
+\type {tfm} file.
+
+\starttyping
+\font\foo=file:csr10.tfm:reencode=csr.enc;mode=node;liga=yes;kern=yes
+\stoptyping
+
+Now we use the \type {enc} file for the encoding vector but we still need the
+\type {pfb} file for mapping that onto the right shape. You probably can best use
+\type {auto} instead.
+
+\starttyping
+\font\foo=file:csr10.tfm:reencode=csr.enc;bitmap=yes;mode=node;liga=yes;kern=yes
+\stoptyping
+
+Here we force bitmap shapes. This is a bit tricky as a different code path is
+followed in the backend. Unless the situation is too confusing, a proper \type
+{ToUnicode} is included in the output, so that cut and paste works all right,
+given that the viewer is able to deal with it (always use \ACROBAT\ as
+reference).
+
+Why do we need modes and|/|or to simulate \OPENTYPE\ behaviour? Indeed it seldom
+makes sense with \type {tfm} files but in this particular case teh font has a
+quote cheat.
+
+\starttyping
+\startluacode
+ fonts.handlers.otf.addfeature {
+ name = "czechdqcheat",
+ type = "substitution",
+ data = {
+ quotedblright = "csquotedblright",
+ },
+ }
+\stopluacode
+\stoptyping
+
+We could make this a language specific feature but as this font is not meant for
+other languages it makes no sense to do so. This feature is enabled with:
+
+\starttyping
+czechdqcheat=yes
+\stoptyping
+
+This will replace one quote by another with different side bearings. Of course a
+properly bounded quote with proper kerning makes much more sense. A test case is:
+
+\starttyping
+\quotedblleft X\quotedblright
+\quotedblright X\quotedblleft
+\stoptyping
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/fonts/fonts/fonts-mkiv.tex b/doc/context/sources/general/fonts/fonts/fonts-mkiv.tex
new file mode 100644
index 000000000..c5283ad41
--- /dev/null
+++ b/doc/context/sources/general/fonts/fonts/fonts-mkiv.tex
@@ -0,0 +1,75 @@
+% language=uk
+
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
+%
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+%
+% comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt
+% Group journal or otherwise. Thanks to the editors for corrections. Also thanks
+% to users for testing, feedback and corrections.
+
+% \definefontfeature[default][default][globalkern=true]
+%
+% \usemodule[speedtest]
+
+\enabletrackers[fonts.files]
+
+\enablemode[simple] % ,oversized
+
+\startbuffer[abstract]
+
+ This book is about fonts and how they are dealt with in \CONTEXT\ \MKIV\ and
+ \LUATEX. Although we use \CONTEXT\ as starting point, much applies to the
+ generic font handler that ships as part of this macro package. We discuss the
+ way fonts are dealt with in the engine, font formats, standard features and
+ additional goodies. Tracing and the extensibility of code are also discussed.
+ This book is the more technical companion of the regular \CONTEXT\ font
+ manual.
+
+\stopbuffer
+
+\environment fonts-environment
+
+\startdocument
+ [author=Hans Hagen,
+ title=Fonts out of \ConTeXt,
+ subtitle=explaining luatex and mkiv,
+ affiliation=PRAGMA ADE,
+ comment=work in progress,
+ cover:color:1=darkred,
+ cover:color:2=darkgreen,
+ cover:color:3=darkblue,
+ cover:color:4=darkyellow,
+ cover:color:5=darkgray]
+
+ \startfrontmatter
+ \component manuals-explaining-contents
+ \component fonts-introduction
+ \stopfrontmatter
+
+ \startbodymatter
+ \component fonts-formats
+ \component fonts-modes
+ \component fonts-lookups
+ \component fonts-methods
+ \component fonts-features
+ \component fonts-scripts
+ \component fonts-math
+ \component fonts-extensions
+ \component fonts-hooks
+ \stopbodymatter
+
+ \startappendices
+ \component fonts-appendix
+ \stopappendices
+
+\stopdocument
diff --git a/doc/context/sources/general/fonts/fonts/fonts-modes.tex b/doc/context/sources/general/fonts/fonts/fonts-modes.tex
new file mode 100644
index 000000000..95cb95732
--- /dev/null
+++ b/doc/context/sources/general/fonts/fonts/fonts-modes.tex
@@ -0,0 +1,817 @@
+% language=uk
+
+\definefontfeature
+ [otftracker-husayni]
+ [analyze=yes,mode=node,language=dflt,script=arab,
+ ccmp=yes,init=yes,medi=yes,fina=yes,
+ rlig=yes,tlig=yes,anum=yes,calt=yes,salt=yes,
+ ss01=yes,ss03=yes,ss10=yes,ss12=yes,ss15=yes,
+ ss16=yes,ss19=yes,ss24=yes,ss25=yes,ss26=yes,
+ ss27=yes,ss31=yes,ss34=yes,ss35=yes,ss36=yes,
+ ss37=yes,ss38=yes,ss41=yes,ss42=yes,ss43=yes,
+ ss60=yes,js16=yes,
+ kern=yes,curs=yes,mark=yes,mkmk=yes]
+
+\startbuffer[nodechart:1a]
+
+ \switchtobodyfont[6pt]
+
+ \definecolor[nodechart:glyph][maincolor]
+
+ \hboxtoFLOWchart[dummy]{\definedfont[Normal*none]\language0 test BLAtest}
+
+ \FLOWchart[dummy][width=14em,height=3em,dx=.5em,dy=.75em,offset=1em,hcompact=yes]
+
+\stopbuffer
+
+\startbuffer[nodechart:1b]
+
+ \switchtobodyfont[6pt]
+
+ \definecolor[nodechart:glyph][maincolor]
+
+ \hboxtoFLOWchart[dummy]{test BLAtest}
+
+ \FLOWchart[dummy][width=14em,height=3em,dx=.5em,dy=.75em,offset=1em,hcompact=yes]
+
+\stopbuffer
+
+\startbuffer[nodechart:2a]
+
+ \switchtobodyfont[6pt]
+
+ \definecolor[nodechart:glyph][maincolor]
+
+ \hboxtoFLOWchart[dummy]{affiliation}
+
+ \FLOWchart[dummy][width=14em,height=3em,dx=.5em,dy=.75em,offset=1em,hcompact=yes]
+
+\stopbuffer
+
+\startbuffer[nodechart:2b]
+
+ \switchtobodyfont[6pt]
+
+ \definecolor[nodechart:glyph][maincolor]
+
+ \hboxtoFLOWchart[dummy]{abc\discretionary{d}{e}{f}ghi}
+
+ \FLOWchart[dummy][width=14em,height=3em,dx=.5em,dy=.75em,offset=1em,hcompact=yes]
+
+\stopbuffer
+
+\startbuffer[nodechart:2c]
+
+ \switchtobodyfont[6pt]
+
+ \definecolor[nodechart:glyph][maincolor]
+
+ \hboxtoFLOWchart[dummy]{\nl effe fijn fietsen}
+
+ \FLOWchart[dummy][width=12em,height=3em,dx=.5em,dy=.75em,offset=1em,hcompact=yes]
+
+\stopbuffer
+
+\startbuffer[nodechart:3a]
+
+ \switchtobodyfont[6pt]
+
+ \definecolor[nodechart:glyph][maincolor]
+
+ \hboxtoFLOWchart[dummy]{\tttf\righttoleft فَخَا}
+
+ \FLOWchart[dummy][width=12em,height=3em,dx=.5em,dy=.75em,offset=1em,hcompact=yes]
+
+\stopbuffer
+
+\startbuffer[nodechart:3b]
+
+ \switchtobodyfont[6pt]
+
+ \definecolor[nodechart:glyph][maincolor]
+
+ \hboxtoFLOWchart[dummy]{{\definedfont[name:husayni*otftracker-husayni at 6pt]\righttoleft فَخَا}}
+
+ \FLOWchart[dummy][width=12em,height=3em,dx=.5em,dy=.75em,offset=1em,hcompact=yes]
+
+\stopbuffer
+
+\startcomponent fonts-modes
+
+\environment fonts-environment
+
+\startchapter[title=Modes][color=darkgreen]
+
+\startsection[title=Introduction]
+
+We use the term modes for classifying the several ways characters are turned into
+glyphs. When a font is defined, a set of features can be associated and one of
+them is the mode.
+
+\starttabulate[|l|p|]
+\NC none \NC Characters are just mapped onto glyphs and no substitution or
+ positioning takes place. \NC \NR
+\NC base \NC The routines built into the engine are used. For many Latin fonts
+ this is a rather useable and efficient method. \NC \NR
+\NC node \NC Here alternative routines written in \LUA\ are used. This mode is
+ needed for more complex scripts as well as more advanced features
+ that demand some analysis. \NC \NR
+\NC auto \NC This mode will determine the most suitable mode for the given
+ feature set. \NC \NR
+\stoptabulate
+
+When we talk about features, we refer to more than only features provided by
+fonts as \CONTEXT\ adds some of its own. In the following section each of these
+modes is discussed. Before we do so a short introduction to font tables that we
+use is given.
+
+\stopsection
+
+\startsection[title=The font table]
+
+The internal representation of a font in \CONTEXT\ is such that we can
+conveniently access data that is needed in the mentioned modes. When a font is
+used for the first time, or when it has changed, it is read in its most raw form.
+After some cleanup and normalization the font gets cached when it is a \TYPEONE\
+or \OPENTYPE\ font. This is done in a rather efficient way. A next time the
+cached copy is used.
+
+The normalized table is shared among instances of a font. This means that when a
+font is used at a different scale, or when a different feature set is used, the
+font gets loaded only once and its data is shared when possible. In \in {figure}
+[fig:tfm-loading] we have visualized the process. Say that you ask for font \type
+{whatever} at \type {12pt} using featureset \type {smallcaps}. In low level code
+this boils down to:
+
+\starttyping
+\font\MySmallCaps=whatever*smallcaps at 12pt
+\stoptyping
+
+In \CONTEXT\ we have overloaded the font loader so \LUA\ code takes care of the
+loading. Basically there is a function hooked into \LUATEX's font definer (the
+\type {\font} primitive) that returns a table and from that on \LUATEX\ will
+create its internal representation that is identified by a number, the so called
+font id. So, in fact the \type {\Whatever} command is a reference to a font id, a
+positive number. When this font is already loaded, \CONTEXT\ will reuse the id
+and pas that one.
+
+\startFLOWchart[loading]
+ \startFLOWcell \name {tfm 1} \location {2,1} \text {raw tfm} \connection [bt]{tfm 2} \stopFLOWcell
+ \startFLOWcell \name {tfm 2} \location {2,2} \text {normalized tfm} \connection [rl]{tfm 3} \stopFLOWcell
+ \startFLOWcell \name {tfm 3} \location {4,2} \text {featured tfm} \connection[+rl]{tfm 5a}
+ \connection [rl]{tfm 5b}
+ \connection[-rl]{tfm 5c} \stopFLOWcell
+
+ \startFLOWcell \name {tfm 5a} \location {5,1} \text {scaled tfm} \connection[r+t]{tfm} \stopFLOWcell
+ \startFLOWcell \name {tfm 5b} \location {5,2} \text {scaled tfm} \connection [rt]{tfm} \stopFLOWcell
+ \startFLOWcell \name {tfm 5c} \location {5,3} \text {scaled tfm} \connection[r-t]{tfm} \stopFLOWcell
+
+ \startFLOWcell \name {afm 1} \location {2,4} \text {raw afm} \connection [bt]{afm 2} \stopFLOWcell
+ \startFLOWcell \name {afm 2} \location {2,5} \text {normalized afm} \connection [rl]{afm 3} \stopFLOWcell
+ \startFLOWcell \name {afm 3} \location {3,5} \text {cached afm} \connection[+rl]{afm 4a}
+ \connection [rl]{afm 4b} \stopFLOWcell
+ \startFLOWcell \name {afm 4a} \location {4,4} \text {featured afm} \connection [rl]{afm 5a} \stopFLOWcell
+ \startFLOWcell \name {afm 4b} \location {4,5} \text {featured afm} \connection [rl]{afm 5b}
+ \connection[-rl]{afm 5c} \stopFLOWcell
+ \startFLOWcell \name {afm 5a} \location {5,4} \text {scaled afm} \connection[r+l]{tfm} \stopFLOWcell
+ \startFLOWcell \name {afm 5b} \location {5,5} \text {scaled afm} \connection [rl]{tfm} \stopFLOWcell
+ \startFLOWcell \name {afm 5c} \location {5,6} \text {scaled afm} \connection[r-l]{tfm} \stopFLOWcell
+
+ \startFLOWcell \name {otf 1} \location {2,7} \text {raw otf} \connection [bt]{otf 2} \stopFLOWcell
+ \startFLOWcell \name {otf 2} \location {2,8} \text {normalized otf} \connection [rl]{otf 3} \stopFLOWcell
+ \startFLOWcell \name {otf 3} \location {3,8} \text {cached otf} \connection[+rl]{otf 4a}
+ \connection [rl]{otf 4b} \stopFLOWcell
+ \startFLOWcell \name {otf 4a} \location {4,7} \text {featured otf} \connection [rl]{otf 5a} \stopFLOWcell
+ \startFLOWcell \name {otf 4b} \location {4,8} \text {featured otf} \connection [rl]{otf 5b}
+ \connection[-rl]{otf 5c} \stopFLOWcell
+ \startFLOWcell \name {otf 5a} \location {5,7} \text {scaled otf} \connection[r-b]{tfm} \stopFLOWcell
+ \startFLOWcell \name {otf 5b} \location {5,8} \text {scaled otf} \connection [rb]{tfm} \stopFLOWcell
+ \startFLOWcell \name {otf 5c} \location {5,9} \text {scaled otf} \connection[r+b]{tfm} \stopFLOWcell
+
+ \startFLOWcell \name {tfm} \location {6,5} \text {engine tfm} \stopFLOWcell
+\stopFLOWchart
+
+\startplacefigure [location=here,reference=fig:tfm-loading,title={Defining a font.}]
+ \FLOWchart[loading][dx=.75\bodyfontsize,dy=.5\bodyfontsize,width=6\bodyfontsize,offset=0pt,x=2]
+\stopplacefigure
+
+The first step is loading the font (or using the cached copy). From that a copy
+is made that has some additional data concerning the features set and from that a
+scaled copy is constructed. These copies share as much data as possible to keep
+the memory footprint as small as possible. The table that is passed to \LUATEX\
+gets cleaned up afterwards. In practice the \TFM\ loader only kicks in for
+creating virtual math fonts. The \AFM\ reader is used for \TYPEONE\ fonts and as
+there is no free upgrade path from \TYPEONE\ to \OPENTYPE\ for commercial fonts,
+that one will get used for older fonts. Of course most loading is done by the
+\OTF\ reader(s).
+
+\appendixdata{\in[fonts:trackers:tables]}
+
+The data in the final \TFM\ table is organized in subtables. The biggest ones are
+the \type {characters} and \type {descriptions} tables that have information
+about each glyph. Later we will see more of that. There are a few additional
+tables of which we show two: \type {properties} and \type {parameters}. For the
+current font the first one has the following entries:
+
+\showfontproperties
+
+The \type {parameters} table has variables that have been (re)assigned in the
+process. A period in the key indicates that we are dealing with a subtable, for
+instance \type {expansion}.
+
+\showfontparameters
+
+To give you an impression of what we are dealing with, the positional features
+are shown next:
+
+\showfontpositionings
+
+The substitution features of the current font are as follows:
+
+\showfontsubstitutions
+
+This is clearly an \OPENTYPE\ font. Normally there are a default
+script and default language supported. If this is not the case you
+need to provide them as part of the featureset, otherwise there
+will be no features applied.
+
+\stopsection
+
+\startsection[title=Base mode]
+
+We talk of base mode processing when the font machinery is used that is built in
+\LUATEX. So what does this traditional mechanism provide?
+
+Before we discuss this, a somewhat simplified model of how \TEX\ works has to be
+given. Say that we have the following input:
+
+\starttyping
+\def\bla{BLA}
+test \bla test
+\stoptyping
+
+This input gets translated into tokens and those tokens are either processed
+later or they become something else directly. Take the first line. Characters in
+the input have a so called catcode property that determines how the parser
+tokenized them. Effectively we therefore get something like this:
+
+\starttyping
+<command def>
+<command bla>
+<begingroup>
+<character B>
+<character L>
+<character A>
+<endgroup>
+\stoptyping
+
+and finally in the hash table there will be an entry for \type {bla} that has the
+meaning \type {BLA} expressed in three characters.
+
+The second line refers to \type {\bla} and in the process this macro gets
+expanded, so we get:
+
+\starttyping
+<character t>
+<character e>
+<character s>
+<character t>
+<space>
+<character B>
+<character L>
+<character A>
+<character t>
+<character e>
+<character s>
+<character t>
+\stoptyping
+
+Because the parser gobbles spaces after a macro name, there is no space before
+the second \type {test}. In practice there will be no intermediate list like
+this, because as soon as possible \TEX\ will add something to a so called node
+list. When the moment is there, this list will be passed to the typesetting
+routine that constructs a horizontal list. Later this list can be converted into
+a horizontal box or broken into lines when it concerns a paragraph.
+
+In traditional \TEX\ characters are stored into char nodes and the builder turns
+them into glyph nodes. In \LUATEX\ they start out as glyph nodes and the subtype
+number will flag them as glyphs. Any value larger than 255 is a signal that the
+list has been processed. The previous example leads to the list shown in \in
+{figure} [nodechart:1a].
+
+\startplacefigure[title={The text \quote {\typ {test BLAtest}} converted to nodes.},reference=nodechart:1a]
+ \getbuffer[nodechart:1a]
+\stopplacefigure
+
+Here we have turned off inter|-|character kerning and hyphenation. When we turn
+that on, we get a slightly more complex list, as shown in \in {figure}
+[nodechart:1b]. Hyphenation points are represented by discretionary nodes and
+these have pointers to a pre break, post break and replacement text.
+
+\startplacefigure[title={The text \quote {\typ {test BLAtest}} converted to nodes, hyphenated and kerned.},reference=nodechart:1b]
+ \getbuffer[nodechart:1b]
+\stopplacefigure
+
+In addition to hyphenation and kerning we can have ligatures. The list in \in
+{figure} [nodechart:2a] shows that we get a reference to a ligature in the glyph
+node but that the components are still known. This figure also demonstrates that
+the ligature is build in steps.
+
+\startplacefigure[title={The rendering of the word \quote {\typ {affiliation}}.},reference=nodechart:2a]
+ \getbuffer[nodechart:2a]
+\stopplacefigure
+
+% \appendixdata{\in[nodes:discretionaries]}
+
+If we insert an explicit \type {\discretionary} command, we see in
+\in {figure} [nodechart:2b] that we get three variants. In \in
+{figure} [nodechart:2c] we render some Dutch words and these have
+quite some ligatures.
+
+\startplacefigure[title={The rendering of the bogus word \quote {\typ {abcghi}} with an
+ explicit discretionary added.},reference=nodechart:2b]
+ \getbuffer[nodechart:2b]
+\stopplacefigure
+
+\startplacefigure[title={The rendering of the Dutch words \quote { \typ{effe fijn fietsen}}.},reference=nodechart:2c]
+ \getbuffer[nodechart:2c]
+\stopplacefigure
+
+So, we have hyphenation, ligature building and kerning and to some extent these
+mechanisms hook into each other. This process is driven by information stored in
+the font and rules related to the language. The hyphenation happens first, so the
+builder just sees discretionary nodes and needs to act properly on them. Although
+languages play an important role in formatting the text, for the moment we can
+forget about that. This leaves the font.
+
+As we already mentioned in a previous chapter, in \CONTEXT\ we use \UNICODE\
+internally. This also means that fonts are organized this way. By default the
+glyph representation of a \UNICODE\ character sits in the same slot in the glyph
+table. All additional glyphs, like ligatures or alternates are pushed in the
+private unicode space. This is why in the lists shown in the figures the
+ligatures have a private \UNICODE\ number.
+
+The basic mode of operation in the builder in \LUATEX\ is as follows:
+
+\startitemize[packed]
+\startitem hyphenate the node list \stopitem
+\startitem build ligatures \stopitem
+\startitem inject kerns \stopitem
+\startitem optionally break into lines \stopitem
+\stopitemize
+
+In traditional \TEX\ the first step is not that independent. There hyphenation
+takes place when the text is broken into lines, and only in places that are
+candidate for such a break. In \LUATEX\ the whole text is hyphenated. This has
+the advantage that the steps are clearly separated and that no complex
+reconstruction and re|-|hyphenation has to take place. The speed penalty can be
+neglected and the extra memory overhead is small compared to what is needed
+anyway.
+
+In base mode the raw font data is read in and from that only basic information is
+used to construct the \TFM\ table: dimensions, ligatures and kerns. In a node
+list, all glyph ranges that refer to such a font get the standard ligature and
+kern routines applied, but only if the subtype is still less than 256. This check
+on subtype prevents duplicate processing that might happen as a side effect of
+for instance unboxing some material in a yet to be typeset text.
+
+Given that the majority of what \TEX\ has to deal with is relatively simple latin
+script, base mode processing is rather convenient and efficient. It is also the
+reference point of other kinds of processing. The most simple way to force base
+mode is the following:
+
+\starttyping
+\definefontfeature[basemode][mode=base,kern=yes,liga=yes]
+
+\definefont[MyTitleFont][SerifBold*basemode at 12pt]
+\stoptyping
+
+Here \type {\MyTitleFont} will be a bold serif with ligatures and kerns applied.
+However, as an \OPENTYPE\ font can have many features, the following definitions
+are also valid:
+
+\starttyping
+\definefontfeature[basemode-o][mode=base,kern=yes,onum=yes,liga=yes]
+\definefontfeature[basemode-s][mode=base,kern=yes,smcp=yes]
+\stoptyping
+
+The \TFM\ constructor will filter the right information from the font data and
+construct a proper table based on these specifications. But you need to keep in
+mind that when for instance old style numerals or small caps are activated, that
+their rendering (the glyph) will always be used. So, for instance \type {3} and
+\type {A} keep their \UNICODE\ points but as part of their specification they
+will get an index pointing to the oldstyle or small caps variant and the
+dimensions of that shape will be used.
+
+\stopsection
+
+\startsection[title=Node mode]
+
+Node mode is by far the most interesting of the modes. When enabled we only pass
+a few properties of glyphs to the engine: the width, height and depth and
+optionally protrusion, expansion factors as well as some extra \CONTEXT\ specific
+quantities. So there is no kerning and no ligature building done by the engine.
+Instead we do this in \LUA\ by walking over the node list and checking if some
+action is needed.
+
+\appendixdata{\in[fonts:trackers:features]}
+
+The default feature set enables kerning and ligature building for default and/or
+Latin scripts and the default language. Being a relative simple feature,
+ligatures don't take much action. Next we show a trace of a ligature replacement.
+
+\blank
+\showotfcomposition{name:dejavuserif*default at 24pt}{1}{affiliation}
+\blank
+
+Be warned that this \type {f f i} sequence not always becomes a ligature.
+Actually this is one area where tradition is quite visible: for some reason most
+fonts do have these f|-|related ligatures but lack others. These ligatures even
+have code points in \UNICODE\ which is quite debatable. Just as there are fonts
+with hardly any kerns (like Lucida) there are fonts that follow a different route
+to improve the look and feel of neighbouring glyphs, like Cambria:
+
+\blank
+\showotfcomposition{name:cambria*default at 24pt}{1}{affiliation}
+\blank
+
+Instead of representing multiple characters by one glyph the designer has decided
+to replace the \type {f} by a slightly narrower one so that the dot of the \type
+{i} stays loose.
+
+An example where much more is involved is the following. The Husayni font that is
+used for typesetting Arabic is built upon a solid but complex \OPENTYPE\
+foundation and can only be dealt with in node mode. When the \LUATEX\ project
+started we assumed that more power in the engine was needed to accomplish this,
+but so far the results with standard \OPENTYPE\ functionality are quite good.
+\CONTEXT\ has an additional paragraph optimizer that can apply additional
+features to get even better results but discussing this falls beyond this
+chapter. A trace of just one Arabic word is much longer than the previously shown
+traces.
+
+\blank
+\showotfcomposition{name:husayni*otftracker-husayni at 48pt}{-1}{فَخَا}
+\blank
+
+What we see here is a stepwise substitution process, sometimes based on a
+contextual analysis, followed by positioning. The coloring concerns the outcome
+of the analysis which in this case flags initial, final, medial and isolated
+characters.
+
+The starting point of this Arabic word is visualized in \in {figure}
+[nodechart:3a] and as expected we see no discretionary nodes here. The result as
+seen in \in {figure} [nodechart:3b] has (interestingly) no kerns as all
+replacements happen via offsets in the glyph node.
+
+\startplacefigure[title={The Arabic input \quote {\tttf\righttoleft فَخَا} before rendering.},reference=nodechart:3a]
+ \getbuffer[nodechart:3a]
+\stopplacefigure
+
+\startplacefigure[title={The Arabic input \quote {\tttf\righttoleft فَخَا} after rendering.},reference=nodechart:3b]
+ \getbuffer[nodechart:3b]
+\stopplacefigure
+
+\stopsection
+
+\startsection[title=Auto mode]
+
+Base mode is lean and mean and relatively fast while node mode is more powerful
+and slower. So how do you know what to choose? The safest bet is to use node mode
+for everything. In \CONTEXT\ however, we also have the so called auto mode. In that
+case there is some analysis going on that chooses between base mode and node mode
+depending on the boundary conditions of script and language and there are specific
+demands in terms of feature processing. So, auto mode will resolve to base or
+node mode.
+
+\stopsection
+
+\startsection[title=None mode]
+
+Sometimes no features have to be applied at all. A good example is verbatim.
+There you don't want ligatures, kerning or fancy substitutions. Contrary to what
+you might expect, monospaced fonts can have such features. Some might actually
+make sense, like rendering zeros. However, you cannot assume such a feature to be
+present so this is an example of where some more knowledge about a particular
+font is needed. This is what Latin Modern provides.
+
+\starttabulate[|l|l|l|]
+\NC \type{none} \NC typewriter \NC \ruledhbox{\maincolor\DemoNoneLT1234567890} \NC \NR
+\NC \type{zero} \NC typewriter \NC \ruledhbox{\maincolor\DemoZeroLT1234567890} \NC \NR
+\NC \type{none} \NC regular \NC \ruledhbox{\maincolor\DemoNoneLM1234567890} \NC \NR
+\NC \type{zero} \NC regular \NC \ruledhbox{\maincolor\DemoZeroLM1234567890} \NC \NR
+\stoptabulate
+
+Normally using mode none for situations that need to be predictable is quite
+okay.
+
+\stopsection
+
+\startsection[title=Dynamics]
+
+Sometimes you want to enable or disable a specific feature only for a specific
+span of text. Defining a font for only this occasion is overkill, especially when
+for instance features are used to fine|-|tune the typography as happens in the
+Oriental \TEX\ project, which is related to \LUATEX. Instead of defining yet
+another font instance we can therefore enable and disable specific features. For
+this it is not needed to know the current font and its size. \footnote {Dynamics
+are a \CONTEXT\ specific feature and is not available in the generic version of
+the font code. There are several reasons for this: it complicates the code, it
+assumes the \CONTEXT\ feature definition mechanism to be used, and it is somewhat
+slower as some extra analysis has to be done.}
+
+Dynamics are a special case of node mode and you don't need to set it up when
+defining a font. In fact, a font defined in base mode can also be dynamic. We
+show some simple examples of applying dynamic features.
+
+% First we define two feature sets, one for ligatures and one for oldstyle. As in
+% our example we want to start fresh we also define a simple set with only kerning
+% enabled. In a next chapter we will see more of how featuresets are defined.
+%
+% \startbuffer
+% \definefontfeature[l][script=latn,liga=yes]
+% \definefontfeature[o][script=latn,onum=yes]
+% \definefontfeature[k][script=latn,kern=yes]
+%
+% \definefont[LOKfont][file:lmroman10-regular*k]
+% \stopbuffer
+%
+% \typebuffer \getbuffer
+
+% \startbuffer[demo]
+% {\LOKfont fiets 123 fiets 123 fiets 123}\par
+% {\LOKfont fiets 123 \addff{l}fiets 123 \addff{o}fiets 123}\par
+% {\LOKfont fiets 123 \addff{o}fiets 123 \addff{l}fiets 123}\par
+% {\LOKfont fiets 123 \addfs{l}fiets 123 \addfs{o}fiets 123}\par
+% {\LOKfont fiets 123 \addfs{o}fiets 123 \addfs{l}fiets 123}\par
+% {\LOKfont fiets 123 \addfs{l}fiets 123 \subfs{l}fiets 123}\par
+% {\LOKfont fiets 123 \addfs{o}fiets 123 \subfs{o}fiets 123}\par
+% \stopbuffer
+%
+% We use the following test line:
+%
+% \typebuffer
+%
+% In the first line we do nothing but in the following lines we add features to the
+% font (replacing existing ones), we add features to the current set (nothing gets
+% replaced) and finally we remove some from the set. The typeset result is shown in
+% \in {figure} [fig:modes:dynamics].
+%
+% \placefigure
+% [here]
+% [fig:modes:dynamics]
+% {Selectively applying ligatures and oldstyle numerals using dynamic features in
+% Latin Modern Roman.}
+% {\color[maincolor]{\externalfigure[demo.buffer][width=.75\textwidth]}}
+%
+% Although for reasons of symmetry we have a few more commands, in practice only
+% the following make sense, and even the first one is mostly of interest or
+% testing.
+%
+% \starttabulate[|l|l|]
+% \NC \type {\addff} \NC set a feature to be the one applied \NC \NR
+% \NC \type {\addfs} \NC add a feature to current set \NC \NR
+% \NC \type {\subfs} \NC remove a feature from the current set \NC \NR
+% \stoptabulate
+%
+% Keep in mind that the given feature set can set a combination of
+% features. Also be aware of the fact that these commands don't
+% accumulate: the last one is applied.
+
+% A more sophisticated dynamic feature mechanism is the following. This
+% time we do stack up features. We can add, subtract or even replace
+% feature sets.
+
+Let's first define some feature sets:
+
+\startbuffer
+\definefontfeature[f:smallcaps][smcp=yes]
+\definefontfeature[f:nocaps] [smcp=no]
+\definefontfeature[f:oldstyle] [onum=yes]
+\definefontfeature[f:newstyle] [onum=no]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+We can add and subtract these features from the current feature set
+that is bound to the current font.
+
+\startbuffer
+\switchtobodyfont[pagella] 123 normal
+\addfeature {f:oldstyle} 123 oldstyle
+\addfeature {f:smallcaps} 123 olstyle smallcaps
+\subtractfeature{f:oldstyle} 123 smallcaps
+\subtractfeature{f:smallcaps} 123 normal
+\stopbuffer
+
+\typebuffer
+
+Here we choose a font that has oldstyle numerals as well as small caps: pagella.
+
+\blank \start \getbuffer \stop \blank
+
+The following does the same, but only uses addition:
+
+\startbuffer
+\switchtobodyfont[pagella] 123 normal
+\addfeature{f:oldstyle} 123 oldstyle
+\addfeature{f:smallcaps} 123 olstyle smallcaps
+\addfeature{f:newstyle} 123 smallcaps
+\addfeature{f:nocaps} 123 normal
+\stopbuffer
+
+\typebuffer
+
+You can also completely replace a feature set. Of course the set is only
+forgotten inside the current group.
+
+\startbuffer
+\switchtobodyfont[pagella] 123 normal
+\addfeature {f:oldstyle} 123 oldstyle
+\addfeature {f:smallcaps} 123 olstyle smallcaps
+\replacefeature{f:oldstyle} 123 oldstyle
+\replacefeature{f:smallcaps} 123 smallcaps
+\stopbuffer
+
+\typebuffer
+
+and now we get:
+
+\blank \start \getbuffer \stop \blank
+
+You can exercise some control with \type {\resetfeature}:
+
+\startbuffer
+\switchtobodyfont[pagella] 123 normal
+\addfeature [f:oldstyle] 123 oldstyle
+\addfeature [f:smallcaps] 123 olstyle smallcaps
+\resetfeature 123 reset
+\addfeature [f:oldstyle] 123 oldstyle
+\addfeature [f:smallcaps] 123 olstyle smallcaps
+\stopbuffer
+
+\typebuffer
+
+Watch how we use the \type {[]} variant of the commands. The braced and
+bracketed variants behave the same.
+
+\blank \start \getbuffer \stop \blank
+
+There is also a generic command \type {\feature} that takes two arguments. Below
+we show all calls, with long and short variants:
+
+\starttyping
+\addfeature [f:mine] \feature [more][f:mine] \feature[+][f:mine]
+\subtractfeature [f:mine] \feature [less][f:mine] \feature[-][f:mine]
+\replacefeature [f:mine] \feature [new][f:mine] \feature[=][f:mine]
+\resetandaddfeature[f:mine] \feature[local][f:mine] \feature[!][f:mine]
+\revivefeature [f:mine] \feature [old][f:mine] \feature[>][f:mine]
+\resetfeature \feature[reset] \feature[<]
+\stoptyping
+
+Each variant also accepts \type {{}} instead of \type {[]} so that they can
+conveniently be used in square bracket arguments. As a bonus, the following also
+works:
+
+\startbuffer
+\switchtobodyfont[pagella]
+123 normal
+\feature[+][f:smallcaps,f:oldstyle]
+123 SmallCaps and OldStyle
+\stopbuffer
+
+\typebuffer
+
+Here is the proof:
+
+\blank \start \getbuffer \stop \blank
+
+\stopsection
+
+\startsection[title=Discretionaries]
+
+One of the complications in supporting more complex features is that we can have
+discretionary nodes. These are either inserted by the hyphenation engine, or
+explicitly by the user (directly or via macros). In most cases we don't need to
+bother about this. For instance, more demanding scripts like Arabic don't
+hyphenate, languages using the Latin script seldom want ligatures at hyphenation
+points (as they can be compound words) and|/|or avoid confusing hyphenation
+points, so what is left are specific user inserted discretionaries. Add to that,
+that a proper font has not much kerning between lowercase characters and it will
+be clear that we can ignore most of this. Anyway, as we explicitly deal with user
+discretionaries, the next works out okay. Watch how we normally only have
+something special in the replacements text that shows up when no hyphenation is
+needed.
+
+\startbuffer
+\language[nl]
+\definedfont[file:texgyrepagella-regular.otf*default]
+\hsize 1mm vereffenen \par
+\hsize 1mm effe \par
+\hsize 1mm e\discretionary{f-}{f}{ff}e \par
+\hsize 20mm e\discretionary{f-}{f}{ff}e \par
+\smallcaps
+\hsize 1mm vereffenen \par
+\hsize 1mm effe \par
+\hsize 1mm e\discretionary{f-}{f}{ff}e \par
+\hsize 20mm e\discretionary{f-}{f}{ff}e \par
+\stopbuffer
+
+\typebuffer
+
+\blank
+\startcolumns[n=6]
+ \indenting[no]
+ \maincolor
+ \getbuffer
+\stopcolumns
+\blank
+
+In base mode such things are handled by the \TEX\ engine itself and it can deal
+with pretty complex cases. In node mode we use a simplification which in practice
+suffices. We will come back to this in \in {section} [ligatures:hyphenation].
+
+\stopsection
+
+\startsection[title=Efficiency]
+
+The efficiency of the mechanisms described here depends on several factors. It
+will be clear that the larger the font, the more time it will take to load it.
+But what is large? Most \CJK\ fonts are pretty large but also rather simple. A
+font like Zapfino on the other hand covers only latin but comes with many
+alternative shapes and a large set of rules. The Husayni font focusses on Arabic,
+which in itself has not that large an alphabet, but being an advanced script
+font, it has a lot of features and definitely a lot of rules.
+
+In terms of processing it's safe to say that Latin is of average complexity. At
+most you will get some substitutions, like regular numerals being replaced by
+oldstyles, or ligature building, which involves a bit of analysis, and some
+kerning at the end. In base mode the substitutions have no overhead, simply
+because the character table already has references to the substituents and the
+replacement already takes place when defining the font. There ligature building
+and kerning are also fast because of the limited amount of lookups that also are
+already kept with the characters. In node mode however, the lists have to be
+parsed and tables have to be consulted so even Latin processing has some
+overhead: each glyph node is consulted and analyzed (either or not in its
+context), often multiple times. However, the code is rather optimized and we use
+caching of already analyzed data when possible.
+
+A \CJK\ script is somewhat more complex on the one hand, but pretty simple on the
+other. Instead of font based kerning, we need to prevent or encourage breaks
+between certain characters. This information is not in the font and is processed
+otherwise but it does cost some time. The font part however is largely idle as
+there are no features to be applied. Even better, because the glyphs are large
+and the information density is high, the processing time per page is not much
+different from Latin. Base mode is good enough for most \CJK.
+
+The Arabic script is another matter. There we definitely go beyond what base mode
+offers so we always end up in node mode. Also, because there is some analysis
+involved, quite some substitutions and in the end also positioning, these are the
+least efficient fonts in terms of processing time. Of course the fact that we mix
+directions also plays a role. If in the Husayni font you enable 30 features with
+an average of 5 rules per feature, a 300 character paragraph will take 45.000
+actions. \footnote {For a modern machine this amount is no real issue, but as
+each action involves function calls and possibly some garbage collection there
+is some price to pay.} When multiple fonts are combined in a paragraph there will
+be more sweeps over the list and of course the replacements also have to happen.
+
+In a time when the average photo camera produces megabyte pictures it makes no
+sense to whine about the size of a font file. On the other hand as each font
+eventually ends up in memory as a \LUA\ table, it makes sense to optimize that
+bit. This is why fonts are converted into a more efficient intermediate table
+that is cached on disk. This makes loading a font quite fast and due to shared
+tables memory usage rather efficient. Of course a scaled instance has to be
+generated too, but that is acceptable. To some extent loading and defining a font
+also depends on the way the macro package is set up.
+
+When comparing \LUATEX\ with for instance \PDFTEX\ or \XETEX\ you need to take
+into account that in \CONTEXT\ \MKIV\ we tend to use \OPENTYPE\ fonts only so
+there are less fonts loaded than in a more traditional setup. In \CONTEXT\
+startup time of \MKIV\ is less than \MKII\ although overall processing time is
+slower, which is due to \UNICODE\ being used and more functionality being
+provided. On the other hand, immediate \METAPOST\ processing and more clever
+multipass handling wins back time. The impact of fonts on processing time in a
+regular document is therefore not that impressive. In practice a \MKIV\ run can
+be faster than a \MKII\ run, especially when \METAPOST\ is used.
+
+In \CONTEXT\ processing of node lists with respect to fonts is only one of the
+many manipulations of such lists and by now fonts are not really the bottleneck.
+The more not font related features users demand and enable, the less the relative
+impact of font processing becomes.
+
+Also, there are some advanced typographic extras that \LUATEX\ offers, like
+protrusion (think of hanging punctuation) and hz optimization (glyph scaling) and
+these slow down processing quite a lot, and they are not taking place at the
+\LUA\ end at all, but this might change in \MKIV. And, of course, typesetting
+involves more than fonts and other aspects can be way more demanding.
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
+
+% oldstyle not in math (old school tex)
+% funny tex ligatures
+% features=yes
+% analysis
+% mode=none (tt)
diff --git a/doc/context/sources/general/fonts/fonts/fonts-scripts.tex b/doc/context/sources/general/fonts/fonts/fonts-scripts.tex
new file mode 100644
index 000000000..aed4f0a5c
--- /dev/null
+++ b/doc/context/sources/general/fonts/fonts/fonts-scripts.tex
@@ -0,0 +1,18 @@
+% language=uk
+
+\startcomponent fonts-scripts
+
+\environment fonts-environment
+
+\startchapter[title=Scripts][color=darkmix-6]
+
+\startsection[title=Introduction]
+
+As \OPENTYPE\ fonts can provide specific features to deal with scripts and
+languages it makes sense to spend some word on this.
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/fonts/manuals-explaining-contents.tex b/doc/context/sources/general/fonts/manuals-explaining-contents.tex
new file mode 100644
index 000000000..3e1fadabc
--- /dev/null
+++ b/doc/context/sources/general/fonts/manuals-explaining-contents.tex
@@ -0,0 +1,11 @@
+% language=uk
+
+\startcomponent manuals-explaining-contents
+
+ \starttitle[title=Contents][color=darkgray]
+
+ \placelist[chapter][criterium=text]
+
+ \stoptitle
+
+\stopcomponent
diff --git a/doc/context/sources/general/fonts/manuals-explaining-cover.tex b/doc/context/sources/general/fonts/manuals-explaining-cover.tex
new file mode 100644
index 000000000..8b4f3e891
--- /dev/null
+++ b/doc/context/sources/general/fonts/manuals-explaining-cover.tex
@@ -0,0 +1,199 @@
+% language=uk
+
+% Please try to be original and don't just copy this cover page as I don't want
+% confusion and be associated with (or responsibility for the look of) similar
+% looking documents.
+
+\startenvironment manuals-explaining-cover
+
+\startsetups document:abstract
+ \framed [
+ foregroundstyle=bold,
+ foregroundcolor=white,
+ width=7.5cm,
+ align={normal,tolerant},
+ frame=off,
+ strut=no,
+ ] {
+ \getbuffer[abstract]
+ }
+\stopsetups
+
+\startMPinclusions
+
+ def DrawCoverPage (expr what) =
+
+ numeric variant ; variant := 1 ;
+
+ StartCover ;
+
+ save width, height, size, anchor, offset, colors ;
+
+ numeric width, height, size ; pair anchor, offset ; string colors[] ;
+
+ colors[1] := "\documentvariable{cover:color:1}" ;
+ colors[2] := "\documentvariable{cover:color:2}" ;
+ colors[3] := "\documentvariable{cover:color:3}" ;
+ colors[4] := "\documentvariable{cover:color:4}" ;
+ colors[5] := "\documentvariable{cover:color:5}" ;
+
+ fill CoverPage enlarged PaperBleed withcolor colors[5] ;
+
+ fill Spine bottomenlarged -.5PaperHeight withcolor colors[3] ;
+ fill Spine topenlarged -.5PaperHeight withcolor colors[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 colors[1] ;
+ fill anchored.urt (urtriangle scaled size, llcorner FrontPage) withcolor colors[2] ;
+ fill anchored.lrt (lrtriangle scaled size, ulcorner FrontPage) withcolor colors[3] ;
+ fill anchored.ulft(ultriangle scaled size, lrcorner FrontPage) withcolor colors[4] ;
+
+ fill anchored.lrt (lrtriangle scaled size, ulcorner BackPage) withcolor colors[1] ;
+ fill anchored.llft(lltriangle scaled size, urcorner BackPage) withcolor colors[3] ;
+ fill anchored.ulft(ultriangle scaled size, lrcorner BackPage) withcolor colors[2] ;
+ fill anchored.urt (urtriangle scaled size, llcorner BackPage) withcolor colors[4] ;
+
+ draw thetextext.llft(
+ textext("\bf \documentvariable{title}\hskip-.1em")
+ rotated 45 ysized .350height,
+ anchor shifted (6*offset+offset)
+ ) withcolor white ;
+ draw thetextext.llft(
+ textext("\bf \documentvariable{subtitle}")
+ rotated 45 ysized .275height,
+ anchor shifted (5*offset+offset)
+ ) withcolor white ;
+ draw thetextext.llft(
+ textext("\bf \documentvariable{author}")
+ rotated 45 ysized .200height,
+ anchor shifted (2*offset+offset)
+ ) withcolor white ;
+ draw thetextext.llft(
+ textext("\bf \documentvariable{affiliation}")
+ rotated 45 ysized .200height,
+ anchor shifted (1*offset+offset)
+ ) withcolor white ;
+
+ % for the moment
+
+ if (what = "back") or (what = "cover") :
+
+ draw
+ thetextext.top(
+ textext("\bf \documentvariable{comment}")
+ xsized 4cm,
+ lrcorner Page shifted (-3cm,1cm)
+ ) withcolor white ;
+
+ fi ;
+
+ % till here
+
+ width := BackPageWidth ;
+
+ if (what = "back") or (what = "cover") :
+
+ draw thetextext(
+ textext("\bf\setups[document:abstract]")
+ xsized .65width rotated 45,
+ center BackPage
+ ) withcolor white ;
+
+ fi ;
+
+ if what = "cover" :
+
+ draw thetextext.bot(
+ textext("\bf \documentvariable{title}\hskip-.1em")
+ rotated 90 xsized .8SpineWidth,
+ .5[ulcorner Spine,urcorner Spine] shifted (0,-1cm)
+ ) withcolor white ;
+
+ draw thetextext.top(
+ textext("\bf \documentvariable{author}")
+ rotated 90 xsized .8SpineWidth,
+ .5[llcorner Spine,lrcorner Spine] shifted (0,1cm)
+ ) withcolor white ;
+
+ fi ;
+
+ StopCover ;
+
+ if what = "front" :
+ clip currentpicture to FrontPage ;
+ elseif what = "back" :
+ clip currentpicture to BackPage ;
+ else :
+ drawboundary CoverPage ;
+ fi ;
+
+ enddef ;
+
+\stopMPinclusions
+
+\startsetups document:start
+
+ % \startcovermatter[front]
+
+ \setupbackgrounds[page][background=]
+
+ \doifmodeelse {simple} {
+
+ \startMPpage
+ DrawCoverPage("front") ;
+ \stopMPpage
+
+ } {
+
+ \startMPpage
+ DrawCoverPage("cover") ;
+ \stopMPpage
+
+ }
+
+ \page[dummy]
+
+ \setupbackgrounds[page][background=page]
+
+ \resetuserpagenumber
+
+ % \stopcovermatter
+
+\stopsetups
+
+\startsetups document:stop
+
+ \doifmodeelse {simple} {
+
+ % \startcovermatter[back]
+
+ \page
+
+ \setuppagenumbering[page=]
+
+ \setupbackgrounds[page][background=]
+
+ \page[empty,left]
+
+ \setupmakeup[doublesided=no,page=no]
+
+ \startMPpage
+ DrawCoverPage("back") ;
+ \stopMPpage
+
+ % \stopcovermatter
+
+ } {
+
+ % not needed as it's part of the cover page
+
+ }
+
+\stopsetups
+
+\stopenvironment
diff --git a/doc/context/sources/general/fonts/manuals-explaining-environment.tex b/doc/context/sources/general/fonts/manuals-explaining-environment.tex
new file mode 100644
index 000000000..f896c219b
--- /dev/null
+++ b/doc/context/sources/general/fonts/manuals-explaining-environment.tex
@@ -0,0 +1,325 @@
+\startenvironment manuals-explaining-environment
+
+\usemodule[abr-01]
+\usemodule[visual]
+\usemodule[simulate]
+\usemodule[chart]
+\usemodule[nodechart]
+
+% done
+
+\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=\directsetup{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 "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 "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 "\namedstructureuservariable{chapter}{color}" ;
+
+ 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[maincolor] [darkgray]
+
+\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]
+
+% modules
+
+\setupsorting
+ [logo]
+ [style=]
+
+\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=]
+
+% whatever
+
+\definestartstop
+ [notabene]
+ [before=\blank,
+ after=\blank,
+ style=\em]
+
+\setuphyphenation
+ [method=default]
+
+
+\startbuffer[underconstruction]
+\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
+\stopbuffer
+
+\stopenvironment
diff --git a/doc/context/sources/general/magazines/mag-0000-mkiv.tex b/doc/context/sources/general/magazines/mag-0000-mkiv.tex
new file mode 100644
index 000000000..c24d4c4ad
--- /dev/null
+++ b/doc/context/sources/general/magazines/mag-0000-mkiv.tex
@@ -0,0 +1,50 @@
+% language=uk
+
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
+%
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+%
+% comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt
+% Group journal or otherwise. Thanks to the editors for corrections. Also thanks
+% to users for testing, feedback and corrections.
+
+\usemodule[mag-01]
+
+\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
+
+\startdocument
+ [title={Introduction},
+ subtitle={Welcome},
+ author={Hans Hagen},
+ affiliation=PRAGMA ADE,
+ date=Januari 2003,
+ number=0 \MKIV]
+
+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 or color) 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.
+
+\stopdocument
diff --git a/doc/context/sources/general/magazines/mag-0002-mkiv.tex b/doc/context/sources/general/magazines/mag-0002-mkiv.tex
new file mode 100644
index 000000000..cbc49ac82
--- /dev/null
+++ b/doc/context/sources/general/magazines/mag-0002-mkiv.tex
@@ -0,0 +1,106 @@
+% language=uk
+
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
+%
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+%
+% comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt
+% Group journal or otherwise. Thanks to the editors for corrections. Also thanks
+% to users for testing, feedback and corrections.
+
+\usemodule[mag-01]
+
+\startbuffer[abstract]
+ Subpage numbers can save you some messing around with page references. Here
+ we show some basics.
+\stopbuffer
+
+\startdocument
+ [title={Page Ranges},
+ author=Hans Hagen,
+ affiliation=PRAGMA ADE,
+ date=Februari 2003,
+ number=2 \MKIV]
+
+This is a simple example of using subpage numbers. Subpage numbers are not
+automatically kept track of, so you first need to activate them:
+
+\startbuffer
+\setupsubpagenumber
+ [way=bychapter,
+ state=start]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+After activating this mechanism, you can access the numbers as follows. The
+numbers are synchronized in during page building, which means that they are
+correct when constructing headers and footers.
+
+\startbuffer
+\setupheadertexts
+ [\firstsubpage--\lastsubpage]
+
+\setupfootertexts
+ [\pagenumber]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+There are several ways to access those numbers:
+
+\starttabulate
+\NC \type{\firstsubpage} \NC first real pagenumber in range \NC\NR
+\NC \type{\prevsubpage} \NC previous real pagenumber in range \NC\NR
+\NC \type{\nextsubpage} \NC next real pagenumber in range \NC\NR
+\NC \type{\lastsubpage} \NC last real pagenumber in range \NC\NR
+\stoptabulate
+
+\startsetups [sub check]
+
+ \vfill
+
+ \setupbodyfont[8pt]
+
+ \startcolor[MyBlue]
+
+ \starttabulate[|l|r|]
+ \NC \type{\firstsubpage} \NC \firstsubpage \NC\NR
+ \NC \type{\prevsubpage} \NC \prevsubpage \NC\NR
+ \NC \type{\nextsubpage} \NC \nextsubpage \NC\NR
+ \NC \type{\lastsubpage} \NC \lastsubpage \NC\NR
+ \NC \type{\nofsubpages} \NC \nofsubpages \NC\NR
+ \TB
+ \NC \type{\lastpage} \NC \lastpage \NC\NR
+ \TB
+ \NC \type{\subpageno} \NC \number \subpageno \NC\NR
+ \NC \type{\pageno} \NC \number \pageno \NC\NR
+ \NC \type{\realpageno} \NC \number \realpageno \NC\NR
+ \stoptabulate
+
+ \stopcolor
+
+ \vfill \vfill
+
+\stopsetups
+
+We will now generate a bunch of fake chapters to illustrate this feature.
+
+\setuptexttexts
+ [margin]
+ [] [\vbox to \textheight{\setups[sub check]}]
+
+\chapter{Tufte} \dorecurse{15}{\input tufte }
+\chapter{Zapf} \dorecurse{10}{\input zapf }
+\chapter{Knuth} \dorecurse{20}{\input knuth }
+
+\stopdocument
diff --git a/doc/context/sources/general/magazines/mag-0006-mkiv.tex b/doc/context/sources/general/magazines/mag-0006-mkiv.tex
new file mode 100644
index 000000000..8baa5e003
--- /dev/null
+++ b/doc/context/sources/general/magazines/mag-0006-mkiv.tex
@@ -0,0 +1,310 @@
+% language=uk
+
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
+%
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+%
+% comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt
+% Group journal or otherwise. Thanks to the editors for corrections. Also thanks
+% to users for testing, feedback and corrections.
+
+\usemodule[mag-01,abr-02]
+
+\setupcolors[rgb=no,cmyk=yes]
+
+\definecolor[red] [c=.25,m=.75,y=.75,k=.25]
+\definecolor[green] [c=.75,m=.25,y=.75,k=.25]
+\definecolor[blue] [c=.75,m=.75,y=.25,k=.25]
+
+\definecolor[tred] [c=.25,m=.75,y=.75,k=.25,t=.5,a=1]
+\definecolor[tgreen] [c=.75,m=.25,y=.75,k=.25,t=.5,a=1]
+\definecolor[tblue] [c=.75,m=.75,y=.25,k=.25,t=.5,a=1]
+\definecolor[tblack] [s=0,t=.75,a=1]
+
+\definecolor[ocyan] [c=.75]
+\definecolor[omagenta] [m=.75]
+\definecolor[oyellow] [y=.75]
+\definecolor[ogray] [s=.5]
+
+\startbuffer[abstract]
+ Occasionally we experiment a bit with (\PDF) features that are useful but at
+ the same time dangerous when applied uncontrolled. In the process of cleaning
+ up some files in my source tree and triggered by a discussion about overprint
+ I decided to move some of that code into the kernel. You are warned!
+\stopbuffer
+
+
+\startdocument
+ [title={A Few Dangerous Features},
+ author=Hans Hagen,
+ affiliation=PRAGMA ADE,
+ date=June 2004,
+ number=6 \MKIV]
+
+\subject{Remark}
+
+The features discussed here have a so called global character, i.e. all settings
+are global by nature. Future releases may introduce (and by default change to)
+local behaviour. So, don't make your documents depending on local/global
+behaviour. In most cases you will probably not notice the difference.
+
+\subject{Being negative}
+
+The \CONTEXT\ page imposition machinery provides negation because sometimes
+raster image processors need that feature. In that case negation is applied to
+the whole page. Within the document stream inverted colors are normally (and
+best) realized with defining an appropriate color. For special purposes we also
+provide negation
+
+\startbuffer
+\startcolor[red]\ignorespaces
+ \input ward
+ \startnegative\ignorespaces
+ \input ward
+ \startpositive\ignorespaces
+ \input ward
+ \removeunwantedspaces\stoppositive
+ \input ward
+ \removeunwantedspaces\stopnegative
+ \input ward
+\removeunwantedspaces\stopcolor
+\stopbuffer
+
+\typebuffer \getbuffer
+
+We can also apply negation to graphic, but the result may not be what we expect.
+While writing this document \in {figure} [fig:negated] negates well when view in
+\GHOSTSCRIPT\ but \ACROBAT~6 shows a strange vertical line pattern.
+
+\startbuffer
+\startcombination
+ {\startpositive
+ \externalfigure[hacker.jpg][width=4cm]%
+ \stoppositive}
+ {normal}
+ {\startnegative
+ \externalfigure[hacker.jpg][width=4cm]%
+ \stopnegative}
+ {negative}
+\stopcombination
+\stopbuffer
+
+\typebuffer
+
+\placefigure
+ [here] [fig:negated]
+ {Negation of graphics.}
+ {\getbuffer}
+
+\subject{Font effects}
+
+Another bag of tricks concerns font effects. As with negation and the to be
+discussed overprint these are implemented using the \CONTEXT\ (still
+experimental) feature handler, but this time we don't provide direct commands.
+Instead we use arguments to control the effects.
+
+\startbuffer
+In this paragraph we have \starteffect[hidden]hidden a piece of
+text\stopeffect. How useful this feature is depends on the kind
+of documents you make. An alternative is to put the text in a
+viewer layer (\starteffect[hidden]as provided by \PDF\stopeffect)
+that is hidden, but since that feature is not widely available
+the effects approach is safer.
+\stopbuffer
+
+\typebuffer \getbuffer
+
+More interesting is changing the way a font is rendered. An outline version is
+rendered with the \type {outer} effect.
+
+\startbuffer
+\bf \starteffect[outer]\input ward \stopeffect \par
+\stopbuffer
+
+\typebuffer \start \getbuffer \stop
+
+The \type {inner} effect is the normal one so there is no reason to show it here.
+The \type {both} option combines the two resulting in an extra bold version.
+
+\startbuffer
+\bf \starteffect[both]\input ward \stopeffect \par
+\stopbuffer
+
+\typebuffer \start \getbuffer \stop
+
+You can influence the linewidth as is demonstrated in the following example:
+
+\startbuffer
+\setupeffect[outer][rulethickness=.8pt]
+\bfd \starteffect[outer]Bigger is Beautiful\stopeffect
+\stopbuffer
+
+\typebuffer \start \getbuffer \stop
+
+Speaking of 2004, in \CONTEXT\ (read: \TEX) intercharacter spacing can only be
+achieved by macro processing. The next method works well, but you need to
+manipulate the \type {\hsize} yourself, since the typesetting engine is unaware
+of this backend manipulation.
+
+\startbuffer
+\setupeffect[both][stretch=2]
+\setupalign[right]
+\dontleavehmode \hsize=.6\hsize
+\bf \starteffect[both]\input ward \stopeffect \par
+\stopbuffer
+
+\typebuffer \start \getbuffer \stop
+
+The \type {normal} (or \type {inner}) alternative looks as follows:
+
+\startbuffer
+\setupeffect[normal][stretch=2]
+\setupalign[right]
+\dontleavehmode \hsize=.6\hsize
+\bf \starteffect[normal]\input ward \stopeffect \par
+\stopbuffer
+
+\typebuffer \start \getbuffer \stop
+
+\subject{Overprint and knockout}
+
+Another feature that should be used with care is overprint. Normally a raster
+image processor will knock out colored areas under colored text or areas on top.
+This works well when the printing engine (or press) is able to precisely align
+the color plates. If not, you will get artifacts that show up as follows (often
+such effects occur in newspapers and cheap magazines):
+
+\definelayer[fake][width=6cm,height=4cm]
+
+\setlayerframed
+ [fake]
+ [preset=lefttop]
+ [frame=off,width=8cm,height=4cm,
+ background=color,backgroundcolor=blue,foregroundcolor=white]
+ {\definedfont[SerifBold at 6\bodyfontsize]cheap}
+
+\setlayerframed
+ [fake]
+ [preset=lefttop,offset=1pt]
+ [frame=off,width=8cm,height=4cm,
+ foregroundcolor=tblack]
+ {\definedfont[SerifBold at 6\bodyfontsize]cheap}
+
+\startbaselinecorrection
+\tightlayer[fake]
+\stopbaselinecorrection
+
+On the one hand we get white spots and depending on how well the ink covers, we
+can get darker spots as well. In such cases it's best to overprint the
+background, which of course only works as expected when the top color is a well
+covering black. Otherwise we probably may have to compensate the color, which in
+turn depends on the kind of paper used.
+
+At the document level, you can set the overprint with:
+
+\starttyping
+\setupcolors[overprint=yes]
+\stoptyping
+
+We show a few examples of local usage: a simple application first (\in {figure}
+{a} [fig:overprint]):
+
+\startbuffer[a]
+\framed
+ [background=color,backgroundcolor=ocyan,
+ frame=off,offset=.25cm,strut=no]
+ {\bfb\setstrut
+ \startoverprint
+ \framed
+ [background=color,backgroundcolor=omagenta,
+ foregroundcolor=oyellow,align={lohi,middle},
+ frame=off,width=2.5cm,height=2cm]
+ {overprint\\\startknockout knockout \stopknockout}%
+ \stopoverprint
+ \framed
+ [background=color,backgroundcolor=omagenta,
+ foregroundcolor=oyellow,align={lohi,middle},
+ frame=off,width=2.5cm,height=2cm]
+ {knockout\\\startoverprint overprint\stopoverprint}}%
+\stopbuffer
+
+\typebuffer[a]
+
+We can nest overprint and turn it off as well (\in {figure} {b} [fig:overprint]):
+
+\startbuffer[b]
+\startoverprint
+\framed
+ [background=color,backgroundcolor=ocyan,
+ frame=off,offset=.25cm,strut=no]
+ {\bfb\setstrut
+ \framed
+ [background=color,backgroundcolor=omagenta,
+ foregroundcolor=oyellow,align={lohi,middle},
+ frame=off,width=2.5cm,height=2cm]
+ {overprint\\\startknockout knockout\stopknockout}%
+ \startknockout
+ \framed
+ [background=color,backgroundcolor=omagenta,
+ foregroundcolor=oyellow,align={lohi,middle},
+ frame=off,width=2.5cm,height=2cm]
+ {knockout\\\startoverprint overprint\stopoverprint}%
+ \stopknockout}%
+\stopoverprint
+\stopbuffer
+
+\typebuffer[b]
+
+Sometimes the overprint preview in \ACROBAT\ works better when we apply a gray
+background (\in {figure} {c} [fig:overprint]). We use rather ugly pure \CMYK\
+colors, otherwise the effect is not visible in overprint preview mode.
+
+\startbuffer[c]
+\framed
+ [background=color,backgroundcolor=ogray,backgroundoffset=.25em,
+ frame=off,offset=overlay]
+ {\getbuffer[a]}
+\stopbuffer
+
+\typebuffer[c]
+
+and (\in {figure} {d} [fig:overprint]):
+
+\startbuffer[d]
+\framed
+ [background=color,backgroundcolor=ogray,backgroundoffset=.25em,
+ frame=off,offset=overlay]
+ {\getbuffer[b]}
+\stopbuffer
+
+\typebuffer[d]
+
+\startbuffer
+\startcombination[2*2]
+ {\getbuffer[a]} {a}
+ {\getbuffer[c]} {c}
+ {\getbuffer[b]} {b}
+ {\getbuffer[d]} {d}
+\stopcombination
+\stopbuffer
+
+\placefigure
+ [here] [fig:overprint]
+ {Preview overprint and knockout.}
+ {\getbuffer}
+
+If we look at examples~b and~d of \in {figure} [fig:overprint]) in \ACROBAT\
+overprint preview mode, we will see that the effect depends on where we apply the
+overprint settings. As said, these are tricky features and should be used with
+care and understanding.
+
+\stopdocument
diff --git a/doc/context/sources/general/magazines/mag-0007-mkiv.tex b/doc/context/sources/general/magazines/mag-0007-mkiv.tex
new file mode 100644
index 000000000..885d3cb14
--- /dev/null
+++ b/doc/context/sources/general/magazines/mag-0007-mkiv.tex
@@ -0,0 +1,206 @@
+% language=uk
+
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
+%
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+%
+% comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt
+% Group journal or otherwise. Thanks to the editors for corrections. Also thanks
+% to users for testing, feedback and corrections.
+
+\usemodule[mag-01,abr-02,visual]
+
+\startbuffer[abstract]
+ The \type {m-visual} module is used in some manuals that come with \CONTEXT\
+ to generate random text. This is sometimes less confusing that nice quotes
+ because the reader can then distinguish the explanation from the example.
+ This module is not extensive (but may grow) and is just an addition to
+ already built in visualization tools.
+\stopbuffer
+
+\startdocument
+ [title={Faking Text and More},
+ author=Hans Hagen,
+ affiliation=PRAGMA ADE,
+ date=August 2004,
+ number=7 \MKIV]
+
+\setupindenting[medium] \indenting[always] \setupwhitespace[none]
+
+\subject{Remark}
+
+When again a user asked me for the macros that I use to generate fake text, I
+took a while to document them. Most macros use the built in random number
+generator. In manuals you may want to control the randomization a bit. You can do
+that by setting the seed:
+
+\starttyping
+\setupystem[random=12345]
+\stoptyping
+
+% Some more visualization tricks are discussed in the visual debugger modules \type
+% {supp-vis.tex} and \type {core-vis.tex}. If you have special wishes, let me know.
+% If they make sense (or more important: if they can be implemented in a decent
+% way) they may be honored in the future.
+
+In \MKIV\ there is a lot of visualization available like showing all boxes, glue,
+characters etc.\ (try \type {\showmakeup}) . Many mechanism have dedicated
+trackers that visualize matters with color. Here we just mention a few
+possibilities of a module with helpers. This module is loaded with:
+
+\starttyping
+\usemodule[visual]
+\stoptyping
+
+\subject{Faking words}
+
+We don't need much words to demonstrate the macros. Here we fake a single work
+with \type {\fakeword}: \fakeword. You can fake a whole bunch with:
+
+\startbuffer
+\fakewords{100}{200} \par
+\fakewords {30} {80} \par
+\fakewords{200}{200}
+\stopbuffer
+
+\typebuffer \getbuffer
+
+In addition to \type {\fakewords} we have \type {\fakenwords}. This time we don't
+specify a range, but a number and a random seed.
+
+\startbuffer
+\fakenwords{100}{2} % words seed
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Drop caps can be faked as follows:
+
+\startbuffer
+\fakedroppedcaps{3}
+\fakewords{100}{200} \par
+\fakewords{100}{200}
+\stopbuffer
+
+\typebuffer \getbuffer
+
+You can visualize the indentation by adding another faker:
+
+\startbuffer
+\fakeparindent \fakewords{100}{200}
+\stopbuffer
+
+\typebuffer \getbuffer
+
+You can suppress indentation with:
+
+\startbuffer
+\onlyfakewords{100}{200}
+\stopbuffer
+
+\typebuffer \getbuffer
+
+You can influence the color by redefining one or more of the folowing fake
+colors:
+
+\startbuffer
+\definecolor[fakerulecolor] [black]
+\definecolor[fakebaselinecolor] [green]
+\definecolor[fakeparindentcolor][blue]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+In case you wonder if fake words hyphenate, they kind of do, as is shown here:
+\bgroup \showfakewords \onlyfakewords{100}{200} \egroup
+
+\subject{Faking lines}
+
+Lines can be faked with:
+
+\startbuffer
+\fakelines{3}{5}
+\fakelines{4}{8}
+\stopbuffer
+
+\typebuffer \getbuffer
+
+This is (of course) more efficient than faking words.
+
+\subject{Faking figures}
+
+Faking figures does not make that much sense.
+
+\startbuffer
+\fakefigure
+ [left][]
+ {10em}{12em}
+ {3\lineheight}{5\lineheight}
+
+\fakewords{100}{200}
+\stopbuffer
+
+\typebuffer \getbuffer
+
+In this case the width will vary between \type {10em} and \type {12em}, while the
+height end up somewhere between 3 and~5 times the lineheight.
+
+If you want nice placeholders you can better use the \METAPOST\ \type {dum}
+library. This one hooks into the external figure placement macros and will
+produce a random graphic (with more or less random colors).
+
+\startbuffer
+\useMPlibrary[dum]
+\placefigure
+ [left][]
+ {\fakewords{3}{6}}
+ {\externalfigure[ForTheMomentFaked][width=3cm,height=2cm]}
+
+\fakewords{100}{200}
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\subject{Faking formulas}
+
+Another probably seldom used placeholder is \type {\fakeformula}:
+
+\startbuffer
+\startformula \fakeformula \stopformula
+\stopbuffer
+
+\typebuffer \getbuffer
+
+An alternative, showing baselines, is:
+
+\startbuffer
+\startformula \fakespacingformula \stopformula
+\stopbuffer
+
+\typebuffer \getbuffer
+
+You can trigger drawing of baseline yourself too:
+
+\startbuffer
+\showbaselines
+\fakewords{100}{200} \par
+\fakewords {30} {80} \par
+\fakewords{200}{200}
+\stopbuffer
+
+\typebuffer \bgroup \getbuffer \egroup
+
+In this case you will notice that this document is not typeset on a grid, and
+therefore, since the blank space is set to big the baseline visualization shows
+this distance when applicable.
+
+\stopdocument
diff --git a/doc/context/sources/general/magazines/mag-0010-mkiv.tex b/doc/context/sources/general/magazines/mag-0010-mkiv.tex
new file mode 100644
index 000000000..65c20180c
--- /dev/null
+++ b/doc/context/sources/general/magazines/mag-0010-mkiv.tex
@@ -0,0 +1,531 @@
+% language=uk
+
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
+%
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+%
+% comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt
+% Group journal or otherwise. Thanks to the editors for corrections. Also thanks
+% to users for testing, feedback and corrections.
+
+\usemodule[mag-01,abr-02]
+
+\startbuffer[abstract]
+ The content of tenth magazine was written while listening to Tori Amos'
+ latest album, The Beekeeper. In the (nice) booklet the text flows in shapes
+ and here I will demonstrate that \TEX\ can do something similar. It's also a
+ nice example of applying \HZ\ optimization.
+\stopbuffer
+
+\startdocument
+ [title={Good looking shapes},
+ author=Hans Hagen,
+ affiliation=PRAGMA ADE,
+ date=March 2005,
+ number=10 \MKIV]
+
+Just as it takes while to get an understanding what \TEX\ is about, it takes a
+couple of listening loops to get a general picture about Tori Amos' Beekeeper.
+While browsing the rather nicely designed booklet I got puzzled |<|as usual when
+seeing such nice book(let)s|>| why everything looked okay except the text. High
+end design combined with rather low end typography. Don't get me wrong, apart
+from the typesetting it's a pretty good product! Tori being one of my favourite
+artists, you can imagine that I wrote quite some \CONTEXT\ code listening to her
+music.
+
+Now I will not argue that \TEX\ (or \CONTEXT) is the proper system for making
+\CD\ covers, but since most of such a booklet is a matter of pasting graphics
+components together, I can imagine that one should ask someone to typeset the
+text snippets using a proper engine. Anyway, most buyers (fans) won't notice it,
+but anyone familiar with \TEX\ will immediate get distracted by the strange
+intercharacter and interline spacing.
+
+Typesetting in a fixed shape is non||trivial. First of all lines should break in
+a pleasing way. If possible, hyphenation should be avoided. The gaps between
+characters must not become to large and the last line should not be too short.
+Doing this in \TEX\ is non trivial either, not so much because \TEX\ cannot do
+such things, but because one needs to control several mechanisms at once. On the
+other hand, one should know what one's dealing with anyway.
+
+Because the size of the shape is fixed, we can manipulate the number of lines
+and/or the line length and scale afterwards to the desired size. The font size is
+not fixed. This permits us to implement a semi||automated solution. The
+difference between the first version of the solution and current one is that we
+take into account an odd|/|even number of lines. Also, finding the best exit
+condition took some experiments. The final solution is not that complex and also
+shows a couple of tricks.
+
+\startbuffer
+\definecolor[BeeColorA][r=.4,g=.5,b=.6]
+\definecolor[BeeColorB][r=.5,g=.6,b=.4]
+\definecolor[BeeColorC][r=.6,g=.4,b=.5]
+
+\definecolor[BeeColor] [BeeColorA]
+
+\defineoverlay
+ [beecell]
+ [\uniqueMPgraphic{beecell}{offset=3mm,color=BeeColor}]
+
+\startuniqueMPgraphic{beecell}{offset,color}
+ fill
+ for i = 1 upto 6 : (0,OverlayHeight/2)
+ rotatedaround (center OverlayBox,i*60) --
+ endfor cycle
+ withpen pencircle scaled \MPvar{offset}
+ withcolor \MPvar{color} ;
+\stopuniqueMPgraphic
+\stopbuffer
+
+\getbuffer
+
+The shape we are dealing with looks as follows:
+
+\startlinecorrection
+\startMPcode
+ fill
+ for i = 1 upto 6 : (5cm,0)
+ rotatedaround(origin,i*60) --
+ endfor cycle
+ withpen pencircle scaled 2mm
+ withcolor \MPcolor{BeeColorC} ;
+ currentpicture := currentpicture xsized(5cm) ;
+\stopMPcode
+\stoplinecorrection
+
+We will will later put such a shape behind the text for which we define an
+overlay:
+
+\typebuffer
+
+Normally one will not put a shape behind the text, but in our case it illustrates
+the idea. We use an offset in order to get a more pleasing look.
+
+We will use the following two sample texts. The original linebreaks are visible
+in the source:
+
+\startbuffer
+\startbuffer[parasol]
+\title {PARASOL} when I come to
+terms to terms with this when
+I come to terms with this when I
+come to terms to terms with this my
+world will change for me I haven't moved
+since the call came since the call came I
+haven't moved I stare at the wall knowing on the
+other side the storm that waits for me then the
+Seated Woman with a Parasol may be the only one you
+can't Betray if I'm the Seated Women with a Parasol I will
+be safe in my frame I have no need for a sea view for a sea
+view I have no need I have my little pleasures this wall
+being one of these when I come to terms to terms
+with this when I come to terms with this when I
+come to terms with this whip lash of Silk on
+wool embroidery then the Seated Woman
+with a Parasol may be the only one you
+can't betray if I'm the Seated Woman
+with a Parasol I will be safe in my
+frame I will be safe in my frame
+in your House in your frame
+\stopbuffer
+
+\startbuffer[beekeeper]
+\title {THE BEEKEEPER} Flaxen hair
+blowing in the breeze It is time
+for the geese to head south I have
+come with my mustard seed I cannot
+accept that she will be taken from me
+``Do you know who I am'' she said ``I'm the
+one who taps you on the shoulder when it's
+your time Don't be afraid I promise that she
+will awake Tomorrow Somewhere Tomorrow
+Somewhere'' --- wrap yourself around the Tree of
+Life and the Dance of the Infinity of the Hive --- take
+this message to Michael I will comb myself into chains In
+between the tap dance clan and your ballerina gang I have
+come for the Beekeeper I know you want my You want
+my Queen --- Anything but this Can you use me instead?
+In your gown with your breathing mask Plugged into
+a heart machine As if you ever needed one I must
+see the Beekeeper I must see if she'll keep her
+alive Call Engine 49 I have come with my
+mustard seed Maybe I'm passing you by
+On my way On my way I'm just passing
+you by But don't be confused
+One day I'll be coming for you \unknown\space
+I must see the Beekeeper
+I must see the Beekeeper
+\stopbuffer
+\stopbuffer
+
+\typebuffer \getbuffer
+
+We will call these buffers indirectly (using setups is a convenient way to
+collect commands and definitions).
+
+\startbuffer
+\startsetups [beetext]
+ \getbuffer[parasol]
+\stopsetups
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Now comes the dirty code. We assume that you know a bit of \CONTEXT. First of all
+we choose a font, in our case a Termes for the running text. We will use
+Hermann Zapf optimization, which is way more acceptable that intercharacter
+spacing and gives quite good results here.
+
+\startbuffer
+\definefontfeature[hzdefault][default][hz=quality]
+\definefont[BeeFont][file:texgyre-termes*hzdefault]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+The core of the code is a loop wherein we try to figure out what the best width
+is. In principle this method can be used for similar shapes. Beforehand we define
+a few variables.
+
+\startbuffer
+\cldcontext{math.cosd(60)}
+\cldcontext{math.sind(60)}
+
+\newdimen\BeeEdge
+\newdimen\BeeLine
+\newdimen\BeeSize
+
+\newbox \BeeBox
+
+\def\BeeLines{17} % choose optimum odd/even
+\def\BeeStart{2cm} % set automatically
+\def\BeeStep {.5mm} % accurate enough
+\stopbuffer
+
+\typebuffer \getbuffer
+
+The loop starts with a rather small width and with increasing steps tries to find
+the solution where the number of used lines equals the asked number of lines. We
+could have used low level \TEX\ primitives, but using a few \CONTEXT\ wrappers
+makes more sense because that way struts and alike are set as well. In the end we
+stretch the interline spacing to match the height of the cell.
+
+\startbuffer
+
+\startsetups beeloop
+
+\def\title##1%
+ {{\ss\bf\kerncharacters[0.25]##1}%
+ \hskip.5em plus .5em minus .25em\relax
+ \ignorespaces}
+
+\setbox\scratchbox=\hbox{\setups[beetext]}
+
+\edef\BeeStart
+ {\the\dimexpr.5\wd\scratchbox/\BeeLines\relax}
+
+\def\BeeMax
+ {10000}
+
+\def\BeeShapeA
+ {\scratchdimen\numexpr\recurselevel-1\relax
+ \dimexpr\BeeEdge/\BeeLast\relax
+ \appendetoks
+ \the\dimexpr\BeeEdge- \scratchdimen\relax\space
+ \the\dimexpr\hsize +2\scratchdimen\relax\space
+ \to\scratchtoks}
+
+\def\BeeShapeB
+ {\appendetoks
+ \zeropoint\space
+ \the\dimexpr\hsize+2\BeeEdge\relax\space
+ \to\scratchtoks}
+
+\doloop
+ {\bgroup
+ \forgetall
+ \dontcomplain
+ \edef\BeeLast
+ {\the\numexpr(\BeeLines\ifodd\BeeLines-1\fi)/2\relax}%
+ \hsize\dimexpr\BeeStart+\recurselevel\dimexpr\BeeStep\relax\relax
+ \BeeEdge=\cldcontext{math.cosd(60)}\hsize
+ \BeeSize=\cldcontext{math.sind(60)}\hsize
+ \BeeLine=\dimexpr2\BeeSize/\numexpr2*\BeeLast+1\relax\relax
+ \setupinterlinespace[line=\BeeLine,stretch=.5]%
+ \setuptolerance[verytolerant]%
+ \setupalign[hz]%
+ \parfillskip\zeropoint
+ \scratchtoks\emptytoks
+ \ifodd\BeeLines
+ \dostepwiserecurse{1}{\BeeLast}{+1}{\BeeShapeA}%
+ \BeeShapeB
+ \dostepwiserecurse{\BeeLast}{1}{-1}{\BeeShapeA}%
+ \rightskip\zeropoint
+ \else
+ % we want to stay inside the shape, so we need
+ % to compensate the right side
+ \advance\hsize +\dimexpr\BeeEdge/\BeeLast\relax
+ \dostepwiserecurse{1}{\BeeLast}{+1}{\BeeShapeA}%
+ \dostepwiserecurse{\BeeLast}{1}{-1}{\BeeShapeA}%
+ \advance\hsize -\dimexpr\BeeEdge/\BeeLast\relax
+ \rightskip\dimexpr\BeeEdge/\BeeLast\relax
+ \fi
+ \setbox\scratchbox\vbox \bgroup
+ % we set it like this in case grid is turned on
+ \baselineskip=1\baselineskip plus 20pt minus 20pt
+ \parshape\numexpr\BeeLines\relax\the\scratchtoks
+ \begstrut
+ \ignorespaces\setups[beetext]\removeunwantedspaces
+ \endstrut
+ \endgraf
+ \xdef\BeeTotal{\number\prevgraf}%
+ \xdef\BeeRate {\number\badness }%
+ \egroup
+ \writestatus
+ {beestate}
+ { run: \recurselevel\space
+ target: \BeeLines \space
+ lines: \BeeTotal \space
+ badness: \BeeRate}%
+ \CheckBeeLines % sets 'done'
+ \ifdone
+ \vbox to 2\BeeSize
+ {\unvbox\ifvoid\BeeBox\scratchbox\else\BeeBox\fi}%
+ \egroup
+ \exitloop
+ \else
+ \egroup
+ \fi}
+
+\stopsetups
+\stopbuffer
+
+\getbuffer \typebuffer
+
+The end criterium is determined by:
+
+\startbuffer
+\def\CheckBeeLines
+ {\ifnum\BeeTotal>\BeeLines\relax
+ \donefalse
+ \else
+ \donetrue
+ \fi}
+\stopbuffer
+
+\getbuffer \typebuffer
+
+This solution is rather safe and, at the cost of the ugly saving of the number of
+lines as registered in \type {\prevgraf}, works better than measuring the height
+of the box.
+
+We could build the loop out of more isolated pieces of code like this but the
+reason why we do it for the checker is that we now can redefine it. At the cost
+of a few more tests, the following checker is better, because it goes on for a
+while and keeps looking for better solutions. If you have no idea what badness
+is, just skip the following code snippet.
+
+\startbuffer
+\def\CheckBeeLines
+ {\ifnum\BeeTotal>\BeeLines\relax
+ \donefalse
+ \else\ifnum\BeeTotal=\BeeLines\relax
+ \ifnum\BeeRate=\zerocount
+ \global\setbox\BeeBox=\box\scratchbox
+ \donetrue
+ \else\ifnum\BeeRate<\BeeMax\relax
+ \global\let\BeeMax\BeeRate
+ \global\setbox\BeeBox=\box\scratchbox
+ \donefalse
+ \else
+ \donefalse
+ \fi\fi
+ \else
+ \donetrue
+ \fi\fi}
+\stopbuffer
+
+\getbuffer \typebuffer
+
+Well, this is not the kind of code you want a designer to enter, but providing it
+as feature in a desk top publishing application is also non||trivial because each
+case differs and turning many knobs to get things done is not easy either, so
+basically it comes down to manual work (neglectable to the total amount of work
+involved in getting such a musical product done). Of course one can ask someone
+to typeset the text in \TEX\ and provide it as image, but that would make
+coordination the production more complex.
+
+The criterium (here \BeeStep) can be made smaller when you encounter problems. If
+we set it to 1mm, we get one case where the amount of lines jumps~2 and the loop
+is exit unexpected. Of course one can catch such cases but it does not make much
+sense in such a one||shot macro.
+
+The previous setup is applied as follows:
+
+\startbuffer
+\startsetups beeloner
+ \framed
+ [offset=overlay,
+ frame=off,
+ background=beecell,
+ foregroundstyle=\BeeFont]
+ {\setups[beeloop]}
+\stopsetups
+\stopbuffer
+
+\getbuffer \typebuffer
+
+We will now put several variants alongside. For this we use a layer:
+
+\startbuffer
+\startsetups beesample
+
+\definelayer
+ [beekeeper]
+ [width=13cm,
+ height=9cm]
+
+\setlayer
+ [beekeeper]
+ [preset=lefttop]
+ {\scale[width=5cm]{\def\BeeLines{16}\setups[beeloner]}}
+
+\setlayer
+ [beekeeper]
+ [preset=leftbottom]
+ {\scale[width=5cm]{\def\BeeLines{17}\setups[beeloner]}}
+
+\setlayer
+ [beekeeper]
+ [preset=righttop]
+ {\scale[width=5cm]{\def\BeeLines{18}\setups[beeloner]}}
+
+\setlayer
+ [beekeeper]
+ [preset=rightbottom]
+ {\scale[width=5cm]{\def\BeeLines{19}\setups[beeloner]}}
+
+\setlayer
+ [beekeeper]
+ [preset=middle]
+ {\scale[width=5cm]{\def\BeeLines{20}\setups[beeloner]}}
+
+\tightlayer[beekeeper]
+
+\stopsetups
+\stopbuffer
+
+\getbuffer \typebuffer
+
+\startbuffer[a]
+\startsetups [beetext]
+ \getbuffer[parasol]
+\stopsetups
+
+\definecolor[BeeColor][BeeColorA] \setups[beesample]
+\stopbuffer
+
+\startbuffer[b]
+\startsetups [beetext]
+ \getbuffer[beekeeper]
+\stopsetups
+
+\definecolor[BeeColor][BeeColorB] \setups[beesample]
+\stopbuffer
+
+\startpostponing
+
+\placefigure
+ [here]
+ [fig:parasol]
+ {Parasol}
+ {\getbuffer[a]}
+
+\placefigure
+ [here]
+ [fig:beekeeper]
+ {The Beekeeper}
+ {\getbuffer[b]}
+
+\page
+
+\stoppostponing
+
+The first samples, shown in \in {figure} [fig:parasol], will be typeset using:
+
+\typebuffer[a]
+
+The second example, shown in \in {figure} [fig:beekeeper], is done in a similar
+way. We redefine the \type {beetext} setup.
+
+\typebuffer[b]
+
+You can zoom in on cells using your viewer. An enlarged example is shown in \in
+{figure} [fig:big].
+
+\startbuffer
+\definecolor[BeeColor][BeeColorC]%
+\startcombination
+ {\scale
+ [width=.475\textwidth]
+ {\startsetups[beetext]\getbuffer[parasol]\stopsetups
+ \def\BeeLines{17}\setups[beeloner]}}
+ {Parasol}
+ {\scale
+ [width=.475\textwidth]
+ {\startsetups[beetext]\getbuffer[beekeeper]\stopsetups
+ \def\BeeLines{20}\setups[beeloner]}}
+ {The Beekeeper}
+\stopcombination
+\stopbuffer
+
+\typebuffer
+
+Choosing the best alternative is a matter of taste. If you ever get a change to
+see the \CD\ (a good buy anyway) you will note the difference. It is possible to
+improve the spacing at the top and bottom but we leave this as an exercise.
+
+\placefigure
+ [here]
+ [fig:big]
+ {An few enlarged examples.}
+ {\getbuffer}
+
+The downside of this exercise was that in the process my laptop suddenly made
+some funny noises and made me end up with a cracked \CD. So in the end the
+message may be not to bother too much about badly typeset paragraphs in \CD\
+booklets.
+
+\vbox to \vsize \bgroup
+
+ \vfil
+
+ \hbox to \hsize \bgroup \hss
+ \scale
+ [height=.45\textheight]
+ {\startsetups[beetext]\getbuffer[parasol]\stopsetups
+ \defineoverlay[beecell][]\def\BeeLines{17}\setups[beeloner]}%
+ \hss \egroup
+
+ \vfil \vfil
+
+ \hbox to \hsize \bgroup \hss
+ \scale
+ [height=.45\textheight]
+ {\startsetups[beetext]\getbuffer[beekeeper]\stopsetups
+ \defineoverlay[beecell][]\def\BeeLines{20}\setups[beeloner]}%
+ \hss \egroup
+
+ \vfil
+
+\egroup
+
+\stopdocument
diff --git a/doc/context/sources/general/magazines/mag-1101-mkiv.tex b/doc/context/sources/general/magazines/mag-1101-mkiv.tex
new file mode 100644
index 000000000..f56dbfe39
--- /dev/null
+++ b/doc/context/sources/general/magazines/mag-1101-mkiv.tex
@@ -0,0 +1,254 @@
+% language=uk
+
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
+%
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+%
+% comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt
+% Group journal or otherwise. Thanks to the editors for corrections. Also thanks
+% to users for testing, feedback and corrections.
+
+\usemodule[mag-01,abr-02,job-01]
+
+\startbuffer[abstract]
+ For a long time already \CONTEXT\ provides a way to organize your document(s)
+ in a structure that permits processing of components. This mechanism has been
+ upgraded a bit in \MKIV\ and here we will summarize the status quo.
+\stopbuffer
+
+\startdocument
+ [title={Project Structure},
+ author=Hans Hagen,
+ affiliation=PRAGMA ADE,
+ date=July 2011,
+ number=1101 \MKIV]
+
+A regular document has a simple structure. When we talk about structure here, we
+only refer to the overall document structure.
+
+\startscite[tex]
+% style specification
+
+\starttext
+ % the document content
+\stoptext
+\stopscite
+
+For practical reasons we delay initial font loading till the first \type
+{\starttext} so that one can overload the defaults. This means that when no
+bodyfont is specified, and {\starttext} is not given, there will be hardly any
+visible output.
+
+An example of a more elaborate structure is the following:
+
+% \enabletrackers[context.trace]
+
+\startscite[tex]
+\environment environment-1
+\environment environment-2
+
+\startproduct product-1
+
+ \component component-1.tex
+ \component component-2.mkiv
+ \component component-3.cld
+
+ \component component-1
+ \component component-2
+
+\stopproduct
+\stopscite
+
+Here we have a specific product, made up out of components and using a few
+environment files that specify the style. By default we assume tex files, but you
+can be specific and use known suffixes. A less abstract example is the following:
+
+\startscite[tex]
+\environment my-fonts
+\environment my-style
+\environment my-abbreviations
+\environment my-urls
+
+\startproduct manual
+
+ \component titlepage
+ \component contents
+
+ \component chapter-1
+ \component chapter-2
+ \component chapter-3
+
+ \component index
+
+\stopproduct
+\stopscite
+
+You can process components and products independently but be aware that you won't
+get cross document (or chapter) references then.
+
+There is one more level: projects.
+
+\startscite[tex]
+\environment my-fonts
+\environment my-style
+\environment my-abbreviations
+\environment my-urls
+
+\startproject documentation
+
+ \product manual
+ \product faqs
+
+\stopproject
+\stopscite
+
+This means that we can also define the manual as follows:
+
+\startscite[tex]
+\project documentation
+
+\startproduct manual
+
+ \component titlepage
+ \component contents
+
+ \component chapter-1
+ \component chapter-2
+ \component chapter-3
+
+ \component index
+
+\stopproduct
+\stopscite
+
+Environments are only loaded once and when you run a component or product that
+refers to environments or when environments are picked up from an encapsulating
+structure you need to be aware of the order of loading.
+
+The names given after the start command are not that important but the names
+after the simple commands refer to filenames, so in the next case there need to
+be a file called \type {index.tex}:
+
+\startscite[tex]
+\component index
+\stopscite
+
+Equally valid is:
+
+\startscite[tex]
+\component[index]
+\stopscite
+
+Subpaths are also permitted:
+
+\startscite[tex]
+\component manual/index
+\stopscite
+
+The meaning of the mentioned commands is not frozen but adapts itself to the
+current situation. A file can be processed many times, only once or never. The
+following table shows what will happen when:
+
+\ctxlua{moduledata.jobs.showprocessors()}
+
+When you load an environment or component, you can specify it to be a \LUA\ file
+by using the \type {lua} or \type {cld} suffix. In that case the file will be
+loaded in the right way. From the table you can deduce that the following is also
+valid:
+
+\startscite[tex]
+\environment mystyle
+
+\starttext
+ % the content
+\stoptext
+\stopscite
+
+combined with:
+
+\startscite[tex]
+\startenvironment mystyle
+ % the definitions
+\stopenvironment
+\stopscite
+
+This is about the simplest structure that you can use that still gives a bit of
+abstraction.
+
+In addition to files in a project structure, you can load predefined modules.
+
+\startscite[tex]
+\usemodule[mathml]
+\stopscite
+
+or more specific:
+
+\startscite[tex]
+\usemodule[x][mathml]
+\stopscite
+
+Which limits the lookup to the \type {x} namespace. The first match quits the
+search and the order of lookups is: \type {mkvi}, \type {mkiv}, \type {tex},
+\type {cld}, \type {lua}. It follows that modules can be \LUA\ files.
+
+When you use structure in the files you will find an overview in the log file.
+This looks as follows:
+
+\starttyping
+system > structure > start used structure
+
+used structure > text: product-1
+used structure > environment: environment-1
+used structure > environment: environment-2
+used structure > product: product-1
+used structure > component: component-1
+used structure > component: component-2
+used structure > component: component-1
+used structure > component: component-2
+
+system > structure > stop used structure
+\stoptyping
+
+Some basic logging on the console can be enabled with:
+
+\startscite[tex]
+\enabletrackers[system.jobfiles]
+\stopscite
+
+A new command pair is the following:
+
+\starttyping
+\startdocument[settings]
+ structured content
+\stopdocument
+\stoptyping
+
+The settings are key|/|value pairs and the values can be retrieved using:
+
+\starttyping
+\documentvariable{key}
+\stoptyping
+
+You can set \type {before} and \type {after} parameters and by default these are
+set up as follows:
+
+\starttyping
+\setvariables
+ [document]
+ [before=\directsetup{document:start},
+ after=\directsetup{document:stop}]
+\stoptyping
+
+You can for instance define these setups to generate a title page (using document
+variables) and a colophon page. In the future more functionality might be added.
+
+\stopdocument
diff --git a/doc/context/sources/general/magazines/mag-1102-mkiv.tex b/doc/context/sources/general/magazines/mag-1102-mkiv.tex
new file mode 100644
index 000000000..ad9dcc5f9
--- /dev/null
+++ b/doc/context/sources/general/magazines/mag-1102-mkiv.tex
@@ -0,0 +1,433 @@
+% language=uk
+
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
+%
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+%
+% comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt
+% Group journal or otherwise. Thanks to the editors for corrections. Also thanks
+% to users for testing, feedback and corrections.
+
+\usemodule[mag-01,abr-02]
+
+\startbuffer[abstract]
+ A not so widely known feature of the verbatim handler in \CONTEXT\ is the
+ ability to add comments in another style and \MKIV\ even offers a bit more.
+ Here some examples are shown.
+\stopbuffer
+
+\startdocument
+ [title={Annotated Verbatim},
+ author=Hans Hagen,
+ affiliation=PRAGMA ADE,
+ date=July 2011,
+ number=1102 \MKIV]
+
+\definetextbackground
+ [example]
+ [frame=on,
+ framecolor=darkblue,
+ location=paragraph,
+ leftoffset=1ex,
+ topoffset=1ex,
+ bottomoffset=1ex]
+
+Annotating verbatim content is done using a mechanism called escaping. For such
+special cases it's often best to define a specific instance.
+
+\startbuffer[define]
+\definetyping
+ [annotatedtyping]
+ [escape=/,
+ color=darkblue,
+ before=,
+ after=]
+\stopbuffer
+
+\startbuffer[example]
+\startannotatedtyping
+bla = test /bgroup /sl oeps /egroup
+ /bgroup /bf some more /egroup
+ | another test
+ | somethingverylong /bgroup /it oeps /egroup
+\stopannotatedtyping
+\stopbuffer
+
+\typebuffer[define,example][option=TEX] \getbuffer[define]
+
+\starttextbackground[example]
+ \getbuffer[example]
+\stoptextbackground
+
+In this example the \type {/} now serves as an escape character. Of course you
+can also use the normal backslash but then you need to use a command to specify
+it.
+
+\startbuffer[setup]
+\setuptyping
+ [annotatedtyping]
+ [escape=\letterbackslash]
+\stopbuffer
+
+\typebuffer[setup][option=TEX] \getbuffer[setup]
+
+Now we can say:
+
+\startbuffer[example]
+\startannotatedtyping
+bla = test \bgroup \sl oeps \egroup
+ \bgroup \bf some more \egroup
+ | another test
+ | somethingverylong \bgroup \it oeps \egroup
+\stopannotatedtyping
+\stopbuffer
+
+\typebuffer[example][option=TEX]
+
+and get:
+
+\starttextbackground[example]
+ \getbuffer[example]
+\stoptextbackground
+
+You can also define an end symbol:
+
+\startbuffer[setup]
+\setuptyping
+ [annotatedtyping]
+ [escape={//,*},
+ color=darkblue]
+
+\definestartstop
+ [cmt]
+ [style=\rm\bf]
+\stopbuffer
+
+\typebuffer[setup][option=TEX] \getbuffer[setup]
+
+Here the \type {//} starts the annotation and \type {*} ends it.
+
+\startbuffer[example]
+\startannotatedtyping
+bla = test // \black // \cmt{oeps} *
+ // \black // \cmt{some more} *
+ | another test
+ | somethingverylong // \black // \cmt{oeps} *
+\stopannotatedtyping
+\stopbuffer
+
+\typebuffer[example][option=TEX]
+
+Contrary to the first example, all text in the annotation is treated as \TEX\
+input:
+
+\starttextbackground[example]
+ \getbuffer[example]
+\stoptextbackground
+
+You can consider using more balanced tagging, as in:
+
+\startbuffer[setup]
+\setuptyping
+ [annotatedtyping]
+ [escape={<<,>>},
+ color=darkblue]
+\stopbuffer
+
+\typebuffer[example][option=TEX]
+
+Watch how we limit the annotation to part of the text:
+
+\startbuffer[example]
+\startannotatedtyping
+bla = test << \rm\bf first >> test
+ << \rm\bf second >> test
+ | test
+ | somethingverylong << \rm\bf fourth >> test
+\stopannotatedtyping
+\stopbuffer
+
+\typebuffer[example][option=TEX]
+
+The \type {test} a the end of the lines is verbatim again.
+
+\starttextbackground[example]
+ \getbuffer[example]
+\stoptextbackground
+
+If no end symbol is given, the end of the line is used instead:
+
+\startbuffer[setup]
+\setuptyping
+ [annotatedtyping]
+ [escape={//,},
+ color=darkblue]
+\stopbuffer
+
+\typebuffer[setup][option=TEX] \getbuffer[setup]
+
+Watch out: here we use \type {{//,}} and not just \type {//} (which would trigger
+the escaped variant).
+
+\definestartstop[cmt][style=\rm\bf]
+
+\startbuffer[example]
+\startannotatedtyping
+bla = test // \black // \cmt{oeps}
+ // \black // \cmt{some more}
+ | test
+ | somethingverylong // \black // \cmt{oeps}
+\stopannotatedtyping
+\stopbuffer
+
+\typebuffer[example][option=TEX]
+
+The result is:
+
+\starttextbackground[example]
+ \getbuffer[example]
+\stoptextbackground
+
+This can also be done easier by abusing the \type {style} option of \type {cmt}:
+
+\startbuffer[setup]
+\definestartstop
+ [cmt]
+ [color=black,
+ style=\black //\rm\bf\space]
+\stopbuffer
+
+\typebuffer[setup][option=TEX] \getbuffer[setup]
+
+When we give:
+
+\startbuffer[example]
+\startannotatedtyping
+bla = test // \cmt{oeps}
+ // \cmt{some more}
+ | test
+ | somethingverylong // \cmt{oeps}
+\stopannotatedtyping
+\stopbuffer
+
+\typebuffer[example][option=TEX]
+
+We get:
+
+\starttextbackground[example]
+ \getbuffer[example]
+\stoptextbackground
+
+For cases like this, where we want to specify a somewhat detailed way to deal
+with a situation, we can use processors: \footnote {More mechanisms in \CONTEXT\
+\MKIV\ will use that feature.}
+
+\startbuffer[setup]
+\defineprocessor
+ [escape]
+ [style=bold,
+ color=black,
+ left=(,right=)]
+\stopbuffer
+
+\typebuffer[setup][option=TEX] \getbuffer[setup]
+
+The previous definition of the annotation now becomes:
+
+\startbuffer[setup]
+\setuptyping
+ [annotatedtyping]
+ [escape=escape->{//,},
+ color=darkblue]
+\stopbuffer
+
+\typebuffer[setup][option=TEX] \getbuffer[setup]
+
+This time no commands are needed in the annotation:
+
+\startbuffer[example]
+\startannotatedtyping
+bla = test // first
+ // second
+ | test
+ | somethingverylong // fourth
+\stopannotatedtyping
+\stopbuffer
+
+\typebuffer[example][option=TEX]
+
+The processor is applied to all text following the \type {//}. Spaces before the
+text are stripped.
+
+\starttextbackground[example]
+ \getbuffer[example]
+\stoptextbackground
+
+As some characters are special to \TEX, sometimes you need to escape the boundary
+sequence:
+
+\startbuffer[setup]
+\defineprocessor
+ [myescape]
+ [style=\rm\tf,
+ color=black]
+
+\setuptyping
+ [annotatedtyping]
+ [escape=myescape->{\letterhash\letterhash,},
+ color=darkgreen]
+\stopbuffer
+
+\typebuffer[setup][option=TEX] \getbuffer[setup]
+
+All text between the double hashes and the end of the line is now treated as
+annotation:
+
+\startbuffer[example]
+\startannotatedtyping
+bla = test ## first \bf test
+ ## second \sl test
+ | test
+ | somethingverylong ## third \it test
+\stopannotatedtyping
+\stopbuffer
+
+\typebuffer[example][option=TEX]
+
+So we get:
+
+\starttextbackground[example]
+ \getbuffer[example]
+\stoptextbackground
+
+We can beautify \TEX\ commenting as follows:
+
+\startbuffer[setup]
+\defineprocessor
+ [comment]
+ [style=\rm,
+ color=black,
+ left={\tttf\letterpercent\space}]
+
+\setuptyping
+ [annotatedtyping]
+ [escape=comment->{\letterpercent\letterpercent,},
+ color=darkblue]
+\stopbuffer
+
+\typebuffer[setup][option=TEX] \getbuffer[setup]
+
+Here the double comments are turned into a single one and the text after it is
+typeset in a regular font:
+
+\startbuffer[example]
+\startannotatedtyping
+bla = test %% first \bf test
+ %% second \sl test
+ | test
+ | somethingverylong %% third \it test
+\stopannotatedtyping
+\stopbuffer
+
+\typebuffer[example][option=TEX]
+
+This gives:
+
+\starttextbackground[example]
+ \getbuffer[example]
+\stoptextbackground
+
+It is possible to define several escapes. Let's start with the delimited variant:
+
+\startbuffer[setup]
+\defineprocessor
+ [escape_a]
+ [style=bold,
+ color=darkred,
+ left=(,
+ right=)]
+
+\defineprocessor
+ [escape_b]
+ [style=bold,
+ color=darkgreen,
+ left=(,
+ right=)]
+
+\setuptyping
+ [annotatedtyping]
+ [escape={escape_a->{[[,]]},escape_b->{[(,)]}},
+ color=darkblue]
+\stopbuffer
+
+\typebuffer[setup][option=TEX] \getbuffer[setup]
+
+We can now alternate comments:
+
+\startbuffer[example]
+\startannotatedtyping
+bla = test [[ first ]] test [( first )]
+ [[ second ]] test [( second )]
+ | test
+ | somethingverylong [[ fourth ]] test [( fourth )]
+\stopannotatedtyping
+\stopbuffer
+
+\typebuffer[example][option=TEX]
+
+When typeset this looks as follows:
+
+\starttextbackground[example]
+ \getbuffer[example]
+\stoptextbackground
+
+The line terminated variant can also have multiple escapes.
+
+\startbuffer[setup]
+\defineprocessor
+ [annotated_bf]
+ [style=\rm\bf,
+ color=darkred]
+
+\defineprocessor
+ [annotated_bs]
+ [style=\rm\bs,
+ color=darkyellow]
+
+\setuptyping
+ [annotatedtyping]
+ [escape={annotated_bf->{!bf,},annotated_bs->{!bs,}},
+ color=darkblue]
+\stopbuffer
+
+\typebuffer[setup][option=TEX] \getbuffer[setup]
+
+So this time we have two ways to enter regular \TEX\ mode:
+
+\startbuffer[example]
+\startannotatedtyping
+bla = test !bf one {\em again}
+ !bs two {\em again}
+ | test
+ | somethingverylong !bf three {\em again}
+\stopannotatedtyping
+\stopbuffer
+
+\typebuffer[example][option=TEX]
+
+These somewhat meaningful tags result in:
+
+\starttextbackground[example]
+ \getbuffer[example]
+\stoptextbackground
+
+\stopdocument
diff --git a/doc/context/sources/general/magazines/mag-1103-mkiv.tex b/doc/context/sources/general/magazines/mag-1103-mkiv.tex
new file mode 100644
index 000000000..90a5f0848
--- /dev/null
+++ b/doc/context/sources/general/magazines/mag-1103-mkiv.tex
@@ -0,0 +1,320 @@
+% language=uk
+
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
+%
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+%
+% comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt
+% Group journal or otherwise. Thanks to the editors for corrections. Also thanks
+% to users for testing, feedback and corrections.
+
+\usemodule[mag-01,abr-02]
+
+\startbuffer[abstract]
+ The (cross) reference mechanism in \CONTEXT\ is rather complex (in terms of
+ code) and provides a lot of functionality. Of course one can ask for page
+ numbers, section numbers, titles, or arbitrary text, but also control the
+ viewer, go to locations and have chains of actions. In this document we only
+ discuss some aspects of cross document referencing. This is not a complete
+ manual.
+\stopbuffer
+
+\startdocument
+ [title={Cross document referencing},
+ author=Hans Hagen,
+ affiliation=PRAGMA ADE,
+ date=September 2011,
+ number=1103 \MKIV]
+
+\subject{Other documents}
+
+A straightforward way to refer to something in an other document is by prefixing
+the reference by a document tag. Take for instance:
+
+\startscite[tex]
+\in{chapter}[other::whatever]
+\stopscite
+
+Here, \type {other} is either a tag or a filename. In the case if a tag, you also
+need a definition like:
+
+\startscite[tex]
+\useexternalfile[other][somefilename]
+\stopscite
+
+Because we load the references of the other file (when present), you can also ask
+for titles of chapters. In fact, all the following work:
+
+\startscite[tex]
+\at {page}[other::whatever]
+\in {chapter}[other::whatever]
+\about [other::whatever]
+\goto{location}[other::whatever]
+\stopscite
+
+given of course that in the other file we have set a reference:
+
+\startscite[tex]
+\startchapter[reference=whatever,title={Who cares}]
+ ...
+\stopchapter
+\stopscite
+
+In \MKIV\ this mechanisms has been extended to deal with products and components.
+In order not to get clashes between references in multiple chapters, you can do
+something like this:
+
+\startscite[tex]
+\setuphead[chapter][referenceprefix=whatever]
+\stopscite
+
+This will create a namespace for this chapter. A more automated alternative is:
+
+\startscite[tex]
+\setuphead[chapter][referenceprefix=+]
+\stopscite
+
+Here the given reference (\type {whatever}) will automatically become the
+namespace for that chapter.
+
+\subject{Products and components}
+
+This is however somewhat cumbersome when we deal with a project structure. There
+we have the complication that we can process components within a product and
+although one will only do this for proofing it makes sense at least to deal with
+references in other components.
+
+In the test suite there are four files demonstrating what is possible. They can
+be recognized by the name \type {cross-*.tex}. The product file \type {cross-100}
+includes two components:
+
+\startscite[tex]
+\startproduct cross-100
+
+ \component cross-001
+ \component cross-002
+
+\stopproduct
+\stopscite
+
+In these components there are references to the other component. The cross
+reference mechanism will automatically use the component's name as namespace but
+only when you say:
+
+\startscite[tex]
+\setupreferencing[autofile=yes]
+\stopscite
+
+A component looks as follows:
+
+\startscite[tex]
+\setupreferencing[autofile=yes]
+\setupinteraction[state=start]
+
+\startcomponent cross-001
+
+\product cross-100
+
+\startchapter[title=One,reference=one]
+ ...
+\stopchapter
+
+\stopcomponent
+\stopscite
+
+When a component is processed, the references of the product are also loaded.
+Actually, some more information fetched so that for instance the chapter number
+gets set as well as the page number.
+
+Of course this will not guarantee that all referencing turns out right, but it's
+better than nothing. There are now several ways to refer to something, and as we
+have quite some fallback heuristics in place all the following will work out
+well. However, keep in mind that when multiple \type {one}'s are uses you might
+end up with the wrong one when no prefix is given.
+
+\startscite[tex]
+\at {page}[one]
+\in {chapter}[one]
+\about [one]
+\goto{location}[one]
+
+\at {page}[cross-001:one]
+\in {chapter}[cross-001:one]
+\about [cross-001:one]
+\goto{location}[cross-001:one]
+
+\at {page}[cross-001::one]
+\in {chapter}[cross-001::one]
+\about [cross-001::one]
+\goto{location}[cross-001::one]
+
+\at {page}[cross-001:::one]
+\in {chapter}[cross-001:::one]
+\about [cross-001:::one]
+\goto{location}[cross-001:::one]
+\stopscite
+
+So what do the (subtle) differences in colons mean? The \type {cross-001:} prefix
+is just a prefix. Such a prefix is not always related to a document but it
+happens that when no other match is found, an extra check takes place to see if
+it is a component namespace. This is new per September 2011.
+
+The \type {cross-001::} prefix is the official way to refer to another document
+and this is no news. However, the \type {cross-001:::} prefix is new and
+depending on how the document is run, is either a regular namespace prefix (one
+colon) or an external reference (two colons). When you use the project structure
+this might be the best way to go. The reason is that order of looking (and
+fallbacks) is better defined this way.
+
+So, given that you have a proper usage of product and components, the following
+method is to be preferred:
+
+\startscite[tex]
+\at {page}[other:::one] in \from[other]
+\in chapter}[other:::one] of \from[other] (\about[other:::one])
+\goto{details}[other:::one]
+\stopscite
+
+Keep in mind that in most cases a combination of components and extra prefixes
+(that is, explicitly set prefixes) work ok. The prefixing mechanism is controlled
+with:
+
+\startscite[tex]
+\setupreferencing[prefix=blabla]
+\stopscite
+
+but you will seldom need this command. In order to prevent clashes you can best
+use some redundancy:
+
+\startscite[tex]
+\placefigure[here][fig:foo]{}{}{}
+\placetable [here][tab:foo]{}{}{}
+\stopscite
+
+works out quite well.
+
+\subject{Reference commands}
+
+In \MKII\ the main reference mechanism handled not only user references but also
+stored section numbers, section titles, captions and all that made sense to refer
+to. In \MKIV\ we carry around way more information and references are stored in
+and retrieved from several data structures. Although we keep much more
+information in memory and store more information in the auxiliary file, we save
+some too because now (for instance) section titles are stored only once.
+
+The following two commands store an explicit reference, unrelated to a structural
+component. However, with the page number we also store information about the
+current section so that we can add a prefix any time we want.
+
+\startscite[tex]
+\textreference[sometag]{some text}
+\pagereference[sometag]
+\stopscite
+
+Keep in mind that these commands insert a so called node so they can best be
+attached to some content in order not to dangle around and interfere with
+spacing. The following works okay:
+
+\startscite[tex]
+\dontleavehmode\textreference[ward]{Quoting Ward}\input ward
+\stopscite
+
+A rather low level (not interactive) fetching can be done as follows:
+
+\startscite[tex]
+\ref[text][sometag]
+\ref[page][sometag]
+\stopscite
+
+We already saw some more advanced commands to retrieve reference data:
+
+\startscite[tex]
+\at {page}[one]
+\in {chapter}[one]
+\about [one]
+\goto{location}[one]
+\stopscite
+
+These commands will create a hyperlink when interactivity is turned on.
+
+The \type {\at} command typesets the page number and the \type {\in} command
+typesets a number. The \type {\about} command deals with the title. In the case
+of a regular reference the last two commands do a similar thing but the last one
+adds quotes (by default). The \type {\goto} command only has a meaning in
+interactive documents. It does not add anything to the text.
+
+In interactive mode all these commands will apply a so called contrast color in
+case the reference refers to the page itself.
+
+There are two commands that relate to current location:
+
+\startscite[tex]
+\somewere{before}{current}{after}[one]
+\atpage[one]
+\stopscite
+
+The first command typesets one of the three texts, which one depends of the
+typeset and referred \type {one} being on the same page. The second command
+generates a text automatically.
+
+Although not related to the kind of references we discuss here, you can define
+symbolic references with:
+
+\startscite[tex]
+\definereference[symbolic name][real reference]
+\resetreference[symbolic name]
+\stopscite
+
+Using this only makes sense in interactive documents where we can have special
+operations with arguments and combinations of such references.
+
+\subject{Reference formats}
+
+You can control the formatting of references in detail using the setup command.
+For instance you can tweak the way sections numbers are prefixed but as this
+relates to numbering this will not be discussed here. Reference formats are
+another way to control the rendering
+
+\startscite[tex]
+\definereferenceformat[informula] [left=(,right=),text=formula]
+\definereferenceformat[informulas] [left=(,right=),text=formulas]
+\definereferenceformat[andformula] [left=(,right=),text=and]
+\definereferenceformat[andformulas][left=(,right=),text=and]
+
+\informula [b] and \informula [for:c]
+the \informula {formulas}[b] \informula {and} [for:c]
+the \informulas {formulas}[b] \informula {and} [for:c]
+the \informulas [b] \informula {en} [for:c]
+the \informulas [b] \andformula [for:c]
+\stopscite
+
+Instead of a text, one can specify a label, which should be defined with \type
+{\setuplabeltext}.
+
+\subject{User references}
+
+You can create user references too. This is done with the following command:
+
+\startscite[tex]
+\setreference[myref][key-1=value-1,key-2=value-2]
+\stopscite
+
+You can then ask for keys using:
+
+\startscite[tex]
+\getreference[myref][key-2]
+\stopscite
+
+In principle you can add filters and rendering variants as well using \LUA\ code
+but that is rather specialized and often not needed.
+
+\stopdocument
diff --git a/doc/context/sources/general/manuals/about/about-calls.tex b/doc/context/sources/general/manuals/about/about-calls.tex
new file mode 100644
index 000000000..83bf89aad
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/about-calls.tex
@@ -0,0 +1,739 @@
+% language=uk
+
+\startcomponent about-calls
+
+\environment about-environment
+
+\startchapter[title={Calling Lua}]
+
+\startsection[title=Introduction]
+
+One evening, on Skype, Luigi and I were pondering about the somewhat
+disappointing impact of jit in \LUAJITTEX\ and one of the reasons we could come
+up with is that when you invoke \LUA\ from inside \TEX\ each \type {\directlua}
+gets an extensive treatment. Take the following:
+
+\starttyping
+\def\SomeValue#1%
+ {\directlua{tex.print(math.sin(#1)/math.cos(2*#1))}}
+\stoptyping
+
+Each time \type {\SomeValue} is expanded, the \TEX\ parser will do the following:
+
+\startitemize[packed]
+\startitem
+ It sees \type {\directlua} and will jump to the related scanner.
+\stopitem
+\startitem
+ There it will see a \type +{+ and enter a special mode in which it starts
+ collecting tokens.
+\stopitem
+\startitem
+ In the process, it will expand control sequences that are expandable.
+\stopitem
+\startitem
+ The scanning ends when a matching \type +}+ is seen.
+\stopitem
+\startitem
+ The collected tokens are converted into a regular (C) string.
+\stopitem
+\startitem
+ This string is passed to the \type {lua_load} function that compiles it into
+ bytecode.
+\stopitem
+\startitem
+ The bytecode is executed and characters that are printed to \TEX\ are
+ injected into the input buffer.
+\stopitem
+\stopitemize
+
+In the process, some state information is set and reset and errors are dealt
+with. Although it looks like a lot of actions, this all happens very fast, so
+fast actually that for regular usage you don't need to bother about it.
+
+There are however applications where you might want to see a performance boost,
+for instance when you're crunching numbers that end up in tables or graphics
+while processing the document. Again, this is not that typical for jobs, but with
+the availability of \LUA\ more of that kind of usage will show up. And, as we now
+also have \LUAJITTEX\ its jitting capabilities could be an advantage.
+
+Back to the example: there are two calls to functions there and apart from the
+fact that they need to be resolved in the \type {math} table, they also are
+executed C functions. As \LUAJIT\ optimizes known functions like this, there can
+be a potential speed gain but as \type {\directlua} is parsed and loaded each
+time, the jit machinery will not do that, unless the same code gets exercised
+lots of time. In fact, the jit related overhead would be a waste in this one time
+usage.
+
+In the next sections we will show two variants that follow a different approach
+and as a consequence can speed up a bit. But, be warned: the impact is not as
+large as you might expect, and as the code might look less intuitive, the good
+old \type {\directlua} command is still the advised method.
+
+Before we move on it's important to realize that a \type {\directlua} call is
+in fact a function call. Say that we have this:
+
+\starttyping
+\def\SomeValue{1.23}
+\stoptyping
+
+This becomes:
+
+\starttyping
+\directlua{tex.print(math.sin(1.23)/math.cos(2*1.23))}
+\stoptyping
+
+Which in \LUA\ is wrapped up as:
+
+\starttyping
+function()
+ tex.print(math.sin(1.23)/math.cos(2*1.23))
+end
+\stoptyping
+
+that gets executed. So, the code is always wrapped in a function. Being a
+function it is also a closure and therefore local variables are local to this
+function and are invisible at the outer level.
+
+\stopsection
+
+\startsection[title=Indirect \LUA]
+
+The first variant is tagged as indirect \LUA. With indirect we mean that instead
+of directly parsing, compiling and executing the code, it is done in steps. This
+method is not as generic a the one discussed in the next section, but for cases
+where relatively constant calls are used it is fine. Consider the next call:
+
+\starttyping
+\def\NextValue
+ {\indirectlua{myfunctions.nextvalue()}}
+\stoptyping
+
+This macro does not pass values and always looks the same. Of course there can be
+much more code, for instance the following is equally valid:
+
+\starttyping
+\def\MoreValues {\indirectlua{
+ for i=1,100 do
+ myfunctions.nextvalue(i)
+ end
+}}
+\stoptyping
+
+Again, there is no variable information passed from \TEX. Even the next variant
+is relative constant:
+
+\starttyping
+\def\SomeValues#1{\indirectlua{
+ for i=1,#1 do
+ myfunctions.nextvalue(i)
+ end
+}}
+\stoptyping
+
+especially when this macro is called many times with the same value. So how does
+\type {\indirectlua} work? Well, it's behaviour is in fact undefined! It does,
+like \type {\directlua}, parse the argument and makes the string, but instead of
+calling \LUA\ directly, it will pass the string to a \LUA\ function \type
+{lua_call}.
+
+\starttyping
+lua.call = function(s) load(s)() end
+\stoptyping
+
+The previous definition is quite okay and in fact makes \type {\indirectlua}
+behave like \type {\directlua}. This definition makes
+
+% \ctxlua{lua.savedcall = lua.call lua.call = function(s) load(s)() end}
+% \testfeatureonce{10000}{\directlua {math.sin(1.23)}}
+% \testfeatureonce{10000}{\indirectlua{math.sin(1.23)}}
+% \ctxlua{lua.call = lua.savedcall}
+
+\starttyping
+\directlua {tex.print(math.sin(1.23))}
+\indirectlua{tex.print(math.sin(1.23))}
+\stoptyping
+
+equivalent calls but the second one is slightly slower, which is to be expected
+due to the wrapping and indirect loading. But look at this:
+
+\starttyping
+local indirectcalls = { }
+
+function lua.call(code)
+ local fun = indirectcalls[code]
+ if not fun then
+ fun = load(code)
+ if type(fun) ~= "function" then
+ fun = function() end
+ end
+ indirectcalls[code] = fun
+ end
+ fun()
+end
+\stoptyping
+
+This time the code needs about one third of the runtime. How much we gain depends
+on the size of the code and its complexity, but on the average its's much faster.
+Of course, during a \TEX\ job only a small part of the time is spent on this, so
+the overall impact is much smaller, but it makes runtime number crunching more
+feasible.
+
+If we bring jit into the picture, the situation becomes somewhat more diffuse.
+When we use \LUAJITTEX\ the whole job processed faster, also this part, but
+because loading and interpreting is more optimized the impact might be less. If
+you enable jit, in most cases a run is slower than normal. But as soon as you
+have millions of calls to e.g.\ type {math.sin} it might make a difference.
+
+This variant of calling \LUA\ is quite intuitive and also permits us to implement
+specific solutions because the \type {lua.call} function can be defined as you
+with. Of course macro package writers can decide to use this feature too, so you
+need to beware of unpleasant side effects if you redefine this function.
+
+% \testfeatureonce{100000}{\directlua {math.sin(1.23)}}
+% \testfeatureonce{100000}{\indirectlua{math.sin(1.23)}}
+
+\stopsection
+
+\startsection[title=Calling \LUA]
+
+In the process we did some tests with indirect calls in \CONTEXT\ core code and
+indeed some gain in speed could be noticed. However, many calls get variable
+input and therefore don't qualify. Also, as a mixture of \type {\directlua} and
+\type {\indirectlua} calls in the source can be confusing it only makes sense to
+use this feature in real time|-|critical cases, because even in moderately
+complex documents there are not that many calls anyway.
+
+The next method uses a slightly different approach. Here we stay at the \TEX\
+end, parse some basic type arguments, push them on the \LUA\ stack, and call a
+predefined function. The amount of parsing \TEX\ code is not less, but especially
+when we pass numbers stored in registers, no tokenization (serialization of a
+number value into the input stream) and stringification (converting the tokens
+back to a \LUA\ number) takes place.
+
+\starttyping
+\indirectluacall 123
+ {some string}
+ \scratchcounter
+ {another string}
+ true
+ \dimexpr 10pt\relax
+\relax
+\stoptyping
+
+Actually, an extension like this had been on the agenda for a while, but never
+really got much priority. The first number is a reference to a function to be
+called.
+
+\starttyping
+lua.calls = lua.calls or { }
+lua.calls[123] = function(s1,n1,s2,b,n2)
+ -- do something with
+ --
+ -- string s1
+ -- number n1
+ -- string s2
+ -- boolean b
+ -- number n2
+end
+\stoptyping
+
+The first number to \type {indirectluacall} is mandate. It can best also be a
+number that has a function associated in the \type {lua.calls} table. Following
+that number and before the also mandate \type {\relax}, there can be any number
+of arguments: strings, numbers and booleans.
+
+Anything surrounded by \type {{}} becomes a string. The keywords \type {true} and
+\type {false} become boolean values. Spaces are skipped and everything else is
+assumed to be a number. This means that if you omit the final \type {\relax}, you
+get a error message mentioning a \quote {missing number}. The normal number
+parser applies, so when a dimension register is passed, it is turned into a
+number. The example shows that wrapping a more verbose dimension into a \type
+{\dimexpr} also works.
+
+Performance wise, each string goes from list of tokens to temporary C string to
+\LUA\ string, so that adds some overhead. A number is more efficient, especially
+when you pass it using a register. The booleans are simple sequences of character
+tokens so they are relatively efficient too. Because \LUA\ functions accept an
+arbitrary number of arguments, you can provide as many as you like, or even less
+than the function expects: it is all driven by the final \type {\relax}.
+
+An important characteristic of this kind of call is that there is no \type {load}
+involved, which means that the functions in \type {lua.calls} can be subjected to
+jitting.
+
+\stopsection
+
+\startsection[title=Name spaces]
+
+As with \type {\indirectlua} there is a potential clash when users mess with the
+\type {lua.calls} table without taking the macro package usage into account. It not
+that complex to define a variant that provides namespaces:
+
+\starttyping
+\newcount\indirectmain \indirectmain=1
+\newcount\indirectuser \indirectuser=2
+
+\indirectluacall \indirectmain
+ {function 1}
+ {some string}
+\relax
+
+\indirectluacall \indirectuser
+ {function 1}
+ {some string}
+\relax
+\stoptyping
+
+A matching implementation is this:
+
+\starttyping
+lua.calls = lua.calls or { }
+
+local main = { }
+
+lua.calls[1] = function(name,...)
+ main[name](...)
+end
+
+main["function 1"] = function(a,b,c)
+ -- do something with a,b,c
+end
+
+local user = { }
+
+lua.calls[2] = function(name,...)
+ user[name](...)
+end
+
+user["function 1"] = function(a,b,c)
+ -- do something with a,b,c
+end
+\stoptyping
+
+Of course this is also ok:
+
+\starttyping
+\indirectluacall \indirectmain 1
+ {some string}
+\relax
+
+\indirectluacall \indirectuser 1
+ {some string}
+\relax
+\stoptyping
+
+with:
+
+\starttyping
+main[1] = function(a,b,c)
+ -- do something with a,b,c
+end
+
+user[1] = function(a,b,c)
+ -- do something with a,b,c
+end
+\stoptyping
+
+Normally a macro package, if it wants to expose this mechanism, will provide a
+more abstract interface that hides the implementation details. In that case the
+user is not supposed to touch \type {lua.calls} but this is not much different
+from the limitations in redefining primitives, so users can learn to live with
+this.
+
+\stopsection
+
+\startsection[title=Practice]
+
+There are some limitations. For instance in \CONTEXT\ we often pass tables and
+this is not implemented. Providing a special interface for that is possible but
+does not really help. Often the data passed that way is far from constant, so it
+can as well be parsed by \LUA\ itself, which is quite efficient. We did some
+experiments with the more simple calls and the outcome is somewhat disputable. If
+we replace some of the \quote {critital} calls we can gain some 3\% on a run of
+for instance the \type {fonts-mkiv.pdf} manual and a bit more on the command
+reference \type {cont-en.pdf}. The first manual uses lots of position tracking
+(an unfortunate side effect of using a specific feature that triggers continuous
+tracking) and low level font switches and many of these can benefit from the
+indirect call variant. The command reference manual uses \XML\ processing and
+that involves many calls to the \XML\ mapper and also does quite some string
+manipulations so again there is something to gain there.
+
+The following numbers are just an indication, as only a subset of \type
+{\directlua} calls has been replaced. The 166 page font manual processes in about
+9~seconds which is not bad given its complexity. The timings are on a Dell
+Precision M6700 with Core i7 3840QM, 16 GB memory, a fast SSD and 64 bit Windows
+8. The binaries were cross compiled mingw 32 bit by Luigi. \footnote {While
+testing with several function definitions we noticed that \type {math.random} in
+our binaries made jit twice as slow as normal, while for instance \type
+{math.sin} was 100 times faster. As the font manual uses the random function for
+rendering random punk examples it might have some negative impact. Our experience
+is that binaries compiled with the ms compiler are somewhat faster but as long as
+the engines that we test are compiled similarly the numbers can be compared.}
+
+% old: 8.870 8.907 9.089 / jit: 6.948 6.966 7.009 / jiton: 7.449 7.586 7.609
+% new: 8.710 8.764 8.682 | 8.64 / jit: 6.935 6.969 6.967 | 6.82 / jiton: 7.412 7.223 7.481
+%
+% 3% on total, 6% on lua
+
+\starttabulate[|lT|cT|cT|cT|]
+\HL
+\NC \NC \LUATEX \NC \LUAJITTEX \NC \LUAJITTEX\ + jit \NC \NR
+\HL
+\NC direct \NC 8.90 \NC 6.95 \NC 7.50 \NC \NR
+\NC indirect \NC 8.65 \NC 6.80 \NC 7.30 \NC \NR
+\HL
+\stoptabulate
+
+So, we can gain some 3\% on such a document and given that we spend probably half
+the time in \LUA, this means that these new features can make \LUA\ run more than
+5\% faster which is not that bad for a couple of lines of extra code. For regular
+documents we can forget about jit which confirms earlier experiments. The
+commands reference has these timings:
+
+\starttabulate[|lT|cT|cT|cT|]
+\HL
+\NC \NC \LUATEX \NC \LUAJITTEX \NC \NR
+\HL
+\NC direct \NC 2.55 \NC 1.90 \NC \NR
+\NC indirect \NC 2.40 \NC 1.80 \NC \NR
+\HL
+\stoptabulate
+
+Here the differences are larger which is due to the fact that we can indirect
+most of the calls used in this processing. The document is rather simple but as
+mentioned is encoded in \XML\ and the \TEX||\XML\ interface qualifies for this
+kind of speedups.
+
+As Luigi is still trying to figure out why jitting doesn't work out so well, we
+also did some tests with (in itself useless) calculations. After all we need
+proof. The first test was a loop with 100.000 step doing a regular \type
+{\directlua}:
+
+\starttyping
+\directlua {
+ local t = { }
+ for i=1,10000
+ do t[i] = math.sin(i/10000)
+ end
+}
+\stoptyping
+
+The second test is a bit optimized. When we use jit this kind of optimizations
+happens automatically for known (!) functions so there is not much won.
+
+\starttyping
+\directlua {
+ local sin = math.sin
+ local t = { }
+ for i=1,10000
+ do t[i] = sin(i/10000)
+ end
+}
+\stoptyping
+
+We also tested this with \type {\indirectlua} and therefore defined some
+functions to test the call variant:
+
+\starttyping
+lua.calls[1] = function()
+ -- overhead
+end
+
+lua.calls[2] = function()
+ local t = { }
+ for i=1,10000 do
+ t[i] = math.sin(i/10000) -- naive
+ end
+end
+
+lua.calls[3] = function()
+ local sin = math.sin
+ local t = { }
+ for i=1,10000 do
+ t[i] = sin(i/10000) -- normal
+ end
+end
+\stoptyping
+
+These are called with:
+
+\starttyping
+\indirectluacall0\relax
+\indirectluacall1\relax
+\indirectluacall2\relax
+\stoptyping
+
+The overhead variant demonstrated that there was hardly any: less than 0.1 second.
+
+\starttabulate[|lT|lT|cT|cT|cT|]
+\HL
+\NC \NC \NC \LUATEX \NC \LUAJITTEX \NC \LUAJITTEX\ + jit \NC \NR
+\HL
+\NC directlua \NC normal \NC 167 \NC 64 \NC 46 \NC \NR
+\NC \NC local \NC 122 \NC 57 \NC 46 \NC \NR
+\NC indirectlua \NC normal \NC 166 \NC 63 \NC 45 \NC \NR
+\NC \NC local \NC 121 \NC 56 \NC 45 \NC \NR
+\NC indirectluacall \NC normal \NC 165 \NC 66 \NC 48 \NC \NR
+\NC \NC local \NC 120 \NC 60 \NC 47 \NC \NR
+\HL
+\stoptabulate
+
+The results are somewhat disappoint but not that unexpected. We do see a speedup
+with \LUAJITTEX\ and in this case even jitting makes sense. However in a regular
+typesetting run jitting will never catch up with the costs it carries for the
+overall process. The indirect call is somewhat faster than the direct call.
+Possible reasons are that hashing at the \LUA\ end also costs time and the
+100.000 calls from \TEX\ to \LUA\ is not that big a burden. The indirect call is
+therefore also not much faster because it has some additional parsing overhead at
+the \TEX\ end. That one only speeds up when we pass arguments and even then not
+always the same amount. It is therefore mostly a convenience feature.
+
+We left one aspect out and that is garbage collection. It might be that in large
+runs less loading has a positive impact on collecting garbage. We also need to
+keep in mind that careful application can have some real impact. Take the
+following example of \CONTEXT\ code:
+
+\startntyping
+\dorecurse {1000} {
+
+ \startsection[title=section #1]
+
+ \startitemize[n,columns]
+ \startitem test \stopitem
+ \startitem test \stopitem
+ \startitem test \stopitem
+ \startitem test \stopitem
+ \stopitemize
+
+ \starttabulate[|l|p|]
+ \NC test \NC test \NC \NR
+ \NC test \NC test \NC \NR
+ \NC test \NC test \NC \NR
+ \stoptabulate
+
+ test {\setfontfeature{smallcaps} abc} test
+ test {\setfontfeature{smallcaps} abc} test
+ test {\setfontfeature{smallcaps} abc} test
+ test {\setfontfeature{smallcaps} abc} test
+ test {\setfontfeature{smallcaps} abc} test
+ test {\setfontfeature{smallcaps} abc} test
+
+ \framed[align={lohi,middle}]{test}
+
+ \startembeddedxtable
+ \startxrow \startxcell x \stopxcell \startxcell x \stopxcell \stopxrow
+ \startxrow \startxcell x \stopxcell \startxcell x \stopxcell \stopxrow
+ \startxrow \startxcell x \stopxcell \startxcell x \stopxcell \stopxrow
+ \startxrow \startxcell x \stopxcell \startxcell x \stopxcell \stopxrow
+ \startxrow \startxcell x \stopxcell \startxcell x \stopxcell \stopxrow
+ \stopembeddedxtable
+
+ \stopsection
+
+ \page
+
+}
+\stopntyping
+
+These macros happen to use mechanism that are candidates for indirectness.
+However, it doesn't happen often you you process thousands of pages with mostly
+tables and smallcaps (although tabular digits are a rather valid font feature in
+tables). For instance, in web services squeezing out a few tens of seconds might
+make sense if there is a large queue of documents.
+
+\starttabulate[|lT|cT|cT|cT|]
+\HL
+\NC \NC \LUATEX \NC \LUAJITTEX \NC \LUAJITTEX\ + jit \NC \NR
+\HL
+\NC direct \NC 19.1 \NC 15.9 \NC 15.8 \NC \NR
+\NC indirect \NC 18.0 \NC 15.2 \NC 15.0 \NC \NR
+\HL
+\stoptabulate
+
+Surprisingly, even jitting helps a bit here. Maybe it relates the the number of
+pages and the amount of calls but we didn't investigate this. By default jitting
+is off anyway. The impact of indirectness is more than in previous examples.
+
+For this test a file was loaded that redefines some core \CONTEXT\ code. This
+also has some overhead which means that numbers for the indirect case will be
+somewhat better if we decide to use these mechanisms in the core code. It is
+tempting to do that but it involves some work and it's always the question if a
+week of experimenting and coding will ever be compensated by less. After all, in
+this last test, a speed of 50 pages per second is not that bad a performance.
+
+When looking at these numbers, keep in mind that it is still not clear if we end
+up using this functionality, and when \CONTEXT\ will use it, it might be in a way
+that gives better or worse timings than mentioned above. For instance, storing \LUA\
+code in the format is possible, but these implementations force us to serialize
+the \type {lua.calls} mechanism and initialize them after format loading. For that
+reason alone, a more native solution is better.
+
+\stopsection
+
+\startsection[title=Exploration]
+
+In the early days of \LUATEX\ Taco and I discussed an approach similar do
+registers which means that there is some \type {\...def} command available. The
+biggest challenge there is to come up with a decent way to define the arguments.
+On the one hand, using a hash syntax is natural to \TEX, but using names is more
+natural to \LUA. So, when we picked up that thread, solutions like this came up
+in a Skype session with Taco:
+
+\starttyping
+\luadef\myfunction#1#2{ tex.print(arg[1]+arg[2]) }
+\stoptyping
+
+The \LUA\ snippet becomes a function with this body:
+
+\starttyping
+local arg = { #1, #2 } -- can be preallocated and reused
+-- the body as defined at the tex end
+tex.print(arg[1]+arg[2])
+\stoptyping
+
+Where \type {arg} is set each time. As we wrapped it in a function we can
+also put the arguments on the stack and use:
+
+\starttyping
+\luadef\myfunction#1#2{ tex.print((select(1,...))+(select(2,...)) }
+\stoptyping
+
+Given that we can make select work this way (either or not by additional
+wrapping). Anyway, both these solutions are ugly and so we need to look further.
+Also, the \type {arg} variant mandates building a table. So, a natural next
+iteration is:
+
+\starttyping
+\luadef\myfunction a b { tex.print(a+b) }
+\stoptyping
+
+Here it becomes already more natural:
+
+\starttyping
+local a = #1
+local b = #2
+-- the body as defined at the tex end
+tex.print(a+b)
+\stoptyping
+
+But, as we don't want to reload the body we need to push \type {#1} into the
+closure. This is a more static definition equivalent:
+
+\starttyping
+local a = select(1,...)
+local b = select(2,...)
+tex.print(a+b)
+\stoptyping
+
+Keep in mind that we are not talking of some template that gets filled in and
+loaded, but about precompiled functions! So, a \type {#1} is not really put there
+but somehow pushed into the closure (we know the stack offsets).
+
+Yet another issue is more direct alias. Say that we define a function at the
+\LUA\ end and want to access it using this kind of interface.
+
+\starttyping
+function foo(a,b)
+ tex.print(a+b)
+end
+\stoptyping
+
+Given that we have something:
+
+\starttyping
+\luadef \myfunctiona a b { tex.print(a+b) }
+\stoptyping
+
+We can consider:
+
+\starttyping
+\luaref \myfunctionb 2 {foo}
+\stoptyping
+
+The explicit number is debatable as it can be interesting to permit
+an arbitrary number of arguments here.
+
+\starttyping
+\myfunctiona{1}{2}
+\myfunctionb{1}{2}
+\stoptyping
+
+So, if we go for:
+
+\starttyping
+\luaref \myfunctionb {foo}
+\stoptyping
+
+we can use \type {\relax} as terminator:
+
+\starttyping
+\myfunctiona{1}{2}
+\myfunctionb{1}{2}\relax
+\stoptyping
+
+In fact, the call method discussed in a previous section can be used here as well
+as it permits less arguments as well as mixed types. Think of this:
+
+\starttyping
+\luadef \myfunctiona a b c { tex.print(a or 0 + b or 0 + c or 0) }
+\luaref \myfunctionb {foo}
+\stoptyping
+
+with
+
+\starttyping
+function foo(a,b,c)
+ tex.print(a or 0 + b or 0 + c or 0)
+end
+\stoptyping
+
+This could be all be valid:
+
+\starttyping
+\myfunctiona{1}{2}{3]\relax
+\myfunctiona{1}\relax
+\myfunctionb{1}{2}\relax
+\stoptyping
+
+or (as in practice we want numbers):
+
+\starttyping
+\myfunctiona 1 \scratchcounter 3\relax
+\myfunctiona 1 \relax
+\myfunctionb 1 2 \relax
+\stoptyping
+
+We basicaly get optional arguments for free, as long as we deal with it properly
+at the \LUA\ end. The only condition with the \type {\luadef} case is that there
+can be no more than the given number of arguments, because that's how the function
+body gets initialized set up. In practice this is quite okay.
+
+% After this exploration we can move on to the final implementation and see what we
+% ended up with.
+
+\stopsection
+
+% \startsection[title=The final implementation]
+% {\em todo}
+% \stopsection
+
+\startsection[title=The follow up]
+
+We don't know what eventually will happen with \LUATEX. We might even (at least
+in \CONTEXT) stick to the current approach because there not much to gain in
+terms of speed, convenience and (most of all) beauty.
+
+{\em Note:} In \LUATEX\ 0.79 onward \type {\indirectlua} has been implemented as
+\type {\luafunction} and the \type {lua.calls} table is available as \type
+{lua.get_functions_table()}. A decent token parser has been discussed at the
+\CONTEXT\ 2013 conference and will show up in due time. In addition, so called
+\type {latelua} nodes support function assignments and \type {user} nodes support
+a field for \LUA\ values. Additional information can be associated with any nodes
+using the properties subsystem.
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/about/about-contents.tex b/doc/context/sources/general/manuals/about/about-contents.tex
new file mode 100644
index 000000000..0b8cdad97
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/about-contents.tex
@@ -0,0 +1,17 @@
+% language=uk
+
+\startcomponent about-contents
+
+\environment about-environment
+
+\starttitle[title={Contents}]
+
+\setuplist[chapter][aligntitle=yes,after=,before=]
+
+\placelist[chapter][criterium=frontpart:all] \blank
+\placelist[chapter][criterium=bodypart:all] \blank
+\placelist[chapter][criterium=backpart:all] \blank
+
+\stoptitle
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/about/about-environment.tex b/doc/context/sources/general/manuals/about/about-environment.tex
new file mode 100644
index 000000000..893039550
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/about-environment.tex
@@ -0,0 +1,71 @@
+\startenvironment about-environment
+
+\setupbodyfont
+ [pagella]
+
+\usemodule
+ [abr-02,narrowtt]
+
+\definecolor [maincolor] [.6(orange)]
+
+\setupwhitespace
+ [big]
+
+\setuptyping
+ [color=maincolor]
+
+\setuptype
+ [color=maincolor]
+
+\setupitemgroup
+ [itemize]
+ [each]
+ [color=maincolor,
+ symcolor=maincolor]
+
+\setupcaptions
+ [color=maincolor]
+
+\setuphead
+ [chapter]
+ [before=,
+ after={\blank[2*big]},
+ style=\bfc,
+ color=maincolor]
+
+\setuphead
+ [section]
+ [before={\blank[2*big]},
+ after=\blank,
+ style=\bfb,
+ color=maincolor]
+
+\setuphead
+ [subsection]
+ [before=\blank,
+ after=\blank,
+ style=\bfa,
+ color=maincolor]
+
+\setuplayout
+ [width=middle,
+ height=middle,
+ header=0cm,
+ topspace=2cm,
+ bottomspace=1cm,
+ footer=1cm,
+ footerdistance=.5cm]
+
+\setupfootertexts
+ [][{\getmarking[chapter]\hbox to 2em{\hss\pagenumber}}]
+ [{\hbox to 2em{\pagenumber\hss}\getmarking[chapter]}][]
+
+\setuppagenumbering
+ [alternative=doublesided]
+
+\startMPextensions
+ % color maincolor ; maincolor := \MPcolor{maincolor} ;
+ string maincolor ; maincolor := "maincolor" ;
+\stopMPextensions
+
+\stopenvironment
diff --git a/doc/context/sources/general/manuals/about/about-expanding.tex b/doc/context/sources/general/manuals/about/about-expanding.tex
new file mode 100644
index 000000000..6f643ffad
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/about-expanding.tex
@@ -0,0 +1,188 @@
+% engine=luatex macros=mkvi language=uk
+
+\startcomponent about-exploring
+
+\environment about-environemnt
+
+\startchapter[title=Still Expanding]
+
+In the beginning of October 2013 Luigi figured out that \LUAJITTEX\ could
+actually deal with \UTF\ identifiers. After we played a bit with this, a patch
+was made for stock \LUATEX\ to provide the same. In the process I found out that
+I needed to adapt the \SCITE\ lexer a bit and that some more characters had to
+get catcode~11 (letter). In the following text screendumps from the editor will
+be used instead of verbatim code. This also demonstrates how \SCITE\ deals with
+syntax highlighting.
+
+\starttexdefinition ShowExample #1
+ \startbaselinecorrection
+ \externalfigure[still-expanding-#1][scale=500]
+ \stopbaselinecorrection
+ \getbuffer
+\stoptexdefinition
+
+First we define a proper font for to deal with \CJK\ characters and a helper
+macro that wraps an example using that font.
+
+\startbuffer
+\definefont
+ [GoodForJapanese]
+ [heiseiminstd-w3]
+ [script=kana,
+ language=jan]
+
+\definestartstop
+ [example]
+ [style=GoodForJapanese]
+\stopbuffer
+
+\ShowExample{1}
+
+According to the Google translator, \example {例題} means example and \example
+{数} means number. It doesn't matter much as we only use these characters as
+demo. Of course one can wonder if it makes sense to define functions, variables
+and keys in a script other than basic Latin, but at least it looks kind of
+modern.
+
+\startbuffer
+\startluacode
+ local function 例題(str)
+ context.formatted.example("例題 1.%s: 数 %s",str,str)
+ context.par()
+ end
+
+ for i=1,3 do
+ 例題(i)
+ end
+\stopluacode
+\stopbuffer
+
+We only show the first three lines. Because using the formatter gives nicer
+source code we operate in that subnamespace.
+
+\ShowExample{2}
+
+As \CONTEXT\ is already \UTF\ aware for a while you can define macros with such
+characters. It was a sort of coincidence that this specific range of characters
+had not yet gotten the proper catcodes, but that is something users don't need to
+worry about. If your script doesn't work, we just need to initialize a few more
+characters.
+
+\startbuffer
+\def\例題#1{\example{例題 2: 数 #1}\par}
+
+\例題{2.1}
+\stopbuffer
+
+\ShowExample{3}
+
+Of course this command is now also present at the \LUA\ end:
+
+\startbuffer
+\startluacode
+ context.startexample()
+ context.例題(2.2)
+ context.stopexample()
+\stopluacode
+\stopbuffer
+
+\ShowExample{4}
+
+The \type {MKVI} parser has also been adapted to this phenomena as have the
+alternative ways of defining macros. We could already do this:
+
+\startbuffer
+\starttexdefinition test #1
+ \startexample
+ 例題 3: 数 #1 \par
+ \stopexample
+\stoptexdefinition
+
+\test{3}
+\stopbuffer
+
+\ShowExample{5}
+
+But now we can also do this:
+
+\startbuffer
+\starttexdefinition 例題 #1
+ \startexample
+ 例題 4: 数 #1 \par
+ \stopexample
+\stoptexdefinition
+
+\例題{4}
+\stopbuffer
+
+\ShowExample{6}
+
+Named parameters support a wider range of characters too:
+
+\startbuffer
+\def\例題#数{\example{例題 5: 数 #数}\par}
+
+\例題{5}
+\stopbuffer
+
+\ShowExample{7}
+
+So, in the end we can have definitions like this:
+
+\startbuffer
+\starttexdefinition 例題 #数
+ \startexample
+ 例題 6: 数 #数 \par
+ \stopexample
+\stoptexdefinition
+
+\例題{6}
+\stopbuffer
+
+\ShowExample{8}
+
+Of course the optional (first) arguments still are supported but these stay
+Latin.
+
+\startbuffer
+\starttexdefinition unexpanded 例題 #数
+ \startexample
+ 例題 7: 数 #数 \par
+ \stopexample
+\stoptexdefinition
+
+\例題{7}
+\stopbuffer
+
+\ShowExample{9}
+
+Finally Luigi wondered of we could use math symbols too and of course there is no
+reason why not:
+
+\startbuffer
+\startluacode
+ function commands.∑(...)
+ local t = { ... }
+ local s = 0
+ for i=1,#t do
+ s = s + t[i]
+ end
+ context("% + t = %s",t,s)
+ end
+\stopluacode
+
+\ctxcommand{∑(1,3,5,7,9)}
+\stopbuffer
+
+\ShowExample{10}
+
+The \CONTEXT\ source code will of course stay \ASCII, although some of the multi
+lingual user interfaces already use characters other than that, for instance
+accented characters or completely different scripts (like Persian). We just went
+a step further and supported it at the \LUA\ end which in turn introduced those
+characters into \MKVI.
+
+\stopchapter
+
+\stopcomponent
+
diff --git a/doc/context/sources/general/manuals/about/about-hashing.tex b/doc/context/sources/general/manuals/about/about-hashing.tex
new file mode 100644
index 000000000..3a9a74c61
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/about-hashing.tex
@@ -0,0 +1,616 @@
+% language=uk
+
+\startcomponent about-hashing
+
+\environment about-environment
+
+\usemodule[lua-hashing]
+
+\startchapter[title={Lua strings}]
+
+\startsection[title=Introduction]
+
+In the crited project \footnote {This is a project by Thomas Schmitz, Alan
+Braslau, Luigi Scarso and Hans Hagen funded by the Institut für Klassische und
+Romanische Philologie Universität Bonn.} we have to deal with large amounts of
+data. The sources are in \TEI\ \XML\ and processed directly in \CONTEXT\ \MKIV,
+and we have to filter content from different places in the \XML\ tree. Processing
+relies on \LUA\ a lot because we use \LUA\ for dealing with the \XML. We're
+talking about Latin and Greek texts so there is no demand for extensive font
+processing in \LUA\ is moderate. But as critical editions have lots of line
+specific referencing and notes there are some more complex layout elements
+involved, and again these use \LUA. There is also extensive use of bibliographies
+and it will be no surprise that \LUA\ comes to help too. \footnote {One of the
+objectives of the project is to update and enhance the bibliographic subsystem.}
+
+One secondary objective is to be able to process the complex documents at a speed
+of at least 20 pages per second on a modern 2014 workstation laptop. One way of
+achieving this is to use \LUAJITTEX\ which has a faster virtual \LUA\ machine.
+However, we ran into several issues with the \LUAJIT\ interpreter, which is fully
+\LUA\ language 5.1 and partly 5.2 compatible but definitely has a different low
+level implementation. In the next sections I will discuss two issues that Luigi
+and I ran into and for which we could come up with reasonable workarounds.
+
+\stopsection
+
+\startsection[title=The stacks]
+
+A \TEX\ job is normally a multi|-|pass experience. One run can produce information
+that is used in a successive one. The reason is that something can happen on page
+15 that influences the typesetting of page~9. There can even be a partial chain
+reaction: you typeset a document the first time the table of contents (and the
+pages it refers to) is not known yet but information is saved that makes it
+possible next time. That next run it gets included and it takes for instance 4
+pages. This means that all page numbers shift up. This in turn will trigger a new
+run because all cross references might change too: two digit page numbers can
+become three digits, so paragraphs can run wider, and that again can trigger more
+pages. Normally an initial three runs is enough, and with minor updates of the
+source one or two runs are enough after that.
+
+The multi|-|pass information is saved in tables in the so called utility file and
+loaded a next run. Common subtables are shared in the process. In order to
+determine if there has been crucial changes that demand an extra run, we have to
+make sure that random order in these tables is eliminated. Normally we already
+sort keys in tables when writing them to file but some tables come out in the
+order the traversing \type {next} function delivers them. In the more recent 5.2
+versions \LUA\ has added some randomness to the order in which hashed tables are
+organized, so while in previous versions we could assume that for a specific
+binary the order was the same each time, we cannot rely on that any longer. This is
+not that important for normal cases, but we compare previous and current versions
+of the utility file and pack shared tables in them as well, which means that we
+are sensitive for a change in order. But, this could be dealt with at the cost of
+some extra sorting. \footnote {In \CONTEXT\ we also pack font tables which saves
+lots of memory and also some load time).}
+
+Anyway, this kind of changes in the \LUA\ machinery is harmless apart from taking
+some time to adapt to it. It is also the reason why we cannot simply push a new
+update of \LUA\ into \LUATEX\ because low level changes can have an (yet unknown)
+impact. Of course performance is the biggest issue here: we don't want a slower
+\LUATEX.
+
+In the past we already reported on the benefits of \LUAJITTEX, especially its
+faster virtual machine. We don't benefit from jitting; on the contrary it slows
+us down. One reason is that we cross the \LUA||\CCODE\ boundary often and hardly
+use any of the optimized functions. Part of the speed is achieved by a different
+implementation deep down and one of them is a different virtual machine
+instruction set. While \LUA\ can go real big in terms of memory and table
+construction, \LUAJIT\ limits us to at most 2G memory and poses some 64K
+limitations in functions and table constructors. The memory is not so much the
+issue in the crited project but the (nested) table constructor is. When we have a
+few tens of thousands of cross references, index entries and|/|or list entries we
+simply cannot load the multi|-|pass data. A few days of playing with splitting up
+nested tables didn't help much: it made the code look horrible and eventually we
+again ran into a maximum of 64K someplace as a \type {dofile} effectively makes a
+function that gets run and \LUAJIT\ doesn't like that size. For the record: we
+don't have such issues with large font tables probably because they are just one
+big table. The reason why we cannot use that approach is that serializing the
+potentially very large tables in the utility file also has limitations.
+
+Eventually this could be solved by assuming only forward referencing for certain
+registers. That way we only used the index entries collected in memory during the
+run and as long as we don't put a register before it's entries are defined we're
+okay. So here we have a typical case where one can set an option to circumvent
+an engine limitation. \footnote {A decade ago similar tricks had to be used to
+support hundreds of thousands of hyperlinks in \TEX\ engines with at that time
+limited memory capabilities.} Explaining this in a user manual is a challenge,
+because an error message like the following is not that helpful:
+
+\starttyping
+main function has more than 65536 constants
+\stoptyping
+
+But, once we could generate these indices again by posing some limitations,
+\LUAJITTEX\ had other issues. This time we got excessive runtime and we spent
+quite some time sorting that one out. More on that in the next section.
+
+\stopsection
+
+\startsection[title=Hashing]
+
+One of the reasons why (text processing with) \LUA\ is rather fast is that it
+hashes its strings so that a test for equality is real fast. This means that for
+each string that enters \LUA\ a hash value is calculated and that hash is used in
+comparisons. Of course hashing takes time, but especially when you work with lots
+of tables the advantage of a simple hash compare outweighs this one||time
+hashing. On the other hand, if you work with files and process lines, and maybe
+split these in words, you might end up with a lot of unneeded hashing. But, in
+\LUATEX\ and therefore \MKIV\ we benefit from hashing a lot. In \LUA\ 5.2 the
+hash function was adapted so that only strings upto than (default) 40 characters
+get hashed. In practice we're not affected much by this, as most keywords we use
+are shorter than this boundary. And in \CONTEXT\ we do quite some keyword checking.
+
+So, when we were conducting tests with these large registers, we were surprised
+that \LUAJITTEX\ performed significantly slower (ten times or more) that stock
+\LUATEX, while until then we had observed that a \LUAJITTEX\ run was normally
+some 20 to 40\% faster.
+
+The first impression was that it related to the large amount of strings that are
+written from \LUA\ to \TEX. After index entries are collected, they are sorted
+and the index is flushed to \TEX. This happens in one go, and \TEX\ code ends up
+in the \TEX\ input stack. Some actions are delayed and create callbacks to \LUA,
+so some wrapping in functions happens too. That means that some (\LUA) strings
+are only freed later on, but that proved not to be the main problem.
+
+When the entries are typeset, an interactive cross reference is kept track of and
+these exist till the document is closed and the referencing information is
+written to the \PDF\ file. Of course we could tweak this but once you start along
+that path there is no end to writing ugly hacks.
+
+Eventually we found that the slowdown relates to hashing, especially because that is
+not the first area where you look. Why is this? The specific register concerned lots
+of small greek words, pointing to locations in a text, where locations looked like
+\type {1.2.3}. In case you wonder why greek is mentioned: in multi|-|byte \UTF\
+sequences there is a lot of repetition:
+
+\startluacode
+local byte = string.byte
+function sample(s)
+ context.NC() context(s)
+ context.NC() context.ttx(false)
+ for b in string.utfvalues(s) do
+ context("%02X ",b)
+ end
+ context.NC() context.ttx(false)
+ for b in string.gmatch(s,".") do
+ context("%02X ",byte(b))
+ end
+ context.NC() context.NR()
+end
+
+context.starttabulate { "||||" }
+context.FL()
+context.NC() context.bold("word")
+context.NC() context.bold("unicode")
+context.NC() context.bold("bytes")
+context.NC() context.NR()
+context.FL()
+sample("βίον")
+sample("βίου")
+sample("βιοὺς")
+sample("βουλὴν")
+sample("βουλῆς")
+context.LL()
+context.stoptabulate()
+\stopluacode
+
+When cross referencing these index entries with their origin, you end up with
+reference identifiers like \type {foo:1.2.3} or, because \CONTEXT\ has automated
+internal references (which are rather efficient in the resulting \PDF), we get
+\type {aut:1}, \type {aut:2} upto in this case some 30.000 of them.
+
+The problem with hashing is as follows. When we write commands to \TEX\ or use
+data with a repetitive property, the similarity of these strings can be hard on
+the hasher as it can produce similar hash keys in which case collisions need to
+be dealt with. I'm no expert on hashing but looking at the code shows that in
+\LUAJIT\ (at least in the version we're talking about) the string is seen as
+chunks of 4 bytes. The first, last, middle and halfway middle chunks are
+consulted and after some bit juggling we get a hash value. In the case of strings
+like the following it is clear that the beginning and end look quite the same:
+
+\starttyping
+foo:000001 foo:010001 foo:100001
+\stoptyping
+
+or:
+
+\starttyping
+foo:1.2.12 foo:1.3.12 foo:1.4.12 foo:1.5.12
+\stoptyping
+
+It seems that the used method of hashing is somewhat arbitrary and maybe tuned
+for specific applications. In order to see what the impact is of hashing quite
+similar strings, some experiments were conducted: with \LUATEX\ 0.73 using \LUA\
+5.2 hashing, with \LUAJITTEX\ 0.73, and with the same \LUAJITTEX\ but using the
+hash variant of native \LUA\ 5.1. For each variant we ran tests where strings of
+increasing length were combined with a number (running from one to one million).
+
+\starttabulate[|||]
+\NC none \NC <string> \NC \NR
+\NC right \NC <string> <number> \NC \NR
+\NC left \NC <number> <string> \NC \NR
+\NC center \NC <string> <number> <string> \NC \NR
+\NC edges \NC <number> <string> <number> \NC \NR
+\stoptabulate
+
+The differences between engines can be seen in tables in the next page. In the
+fourth table we summarize which engine performs best. Keep in mind that
+\LUAJITTEX\ has the advantage of the faster virtual machine so it has an
+additional speed advantage.
+
+We show three tables with measurements. The \type {none} column shows the
+baseline of the test:
+
+\starttyping
+
+local t = { }
+for i=1,1000000 do
+ t[i] = i
+end
+\stoptyping
+
+The column tagged \quote {right} does this:
+
+\starttyping
+local t = { }
+for i=1,1000000 do
+ t[i] = text .. i
+end
+\stoptyping
+
+And \quote {left} does:
+
+\starttyping
+local t = { }
+for i=1,1000000 do
+ t[i] = i .. text
+end
+\stoptyping
+
+That leaves \quote {center}:
+
+\starttyping
+local t = { }
+for i=1,1000000 do
+ t[i] = text .. i .. text
+end
+\stoptyping
+
+and \quote {edges}:
+
+\starttyping
+local t = { }
+for i=1,1000000 do
+ t[i] = i .. text .. i
+end
+\stoptyping
+
+Of course there is also the loop and the concatenation involved so the last two
+variants have some more overhead. We show some measurements in \in {tables}
+[tab:torture-1], \in [tab:torture-2] \in {and} [tab:torture-3]. So, there we have
+strings like:
+
+\starttyping
+2abc
+222abc
+22222abc
+abc222222
+222222abc222222
+222222abc222222
+abc2222abc
+\stoptyping
+
+and so on. Of course a million such strings makes not much sense in practice but
+it serves our purpose of testing.
+
+\startplacetable[reference=tab:torture-1,location=page,title=\type{context test.tex}]
+ \scale
+ [height=\the\dimexpr\textheight-3\lineheight\relax]
+ % [width=\the\dimexpr\textwidth+.5\backspace\relax]
+ {\vbox{\ctxlua{moduledata.luatests.showhashing { filename = "luatest-hash-luatex-073-LUA52.lua" }}}}
+\stopplacetable
+
+\startplacetable[reference=tab:torture-2,location=page,title=\type{context --jit --jithash=luajit20 test.tex}]
+ \scale
+ [height=\the\dimexpr\textheight-3\lineheight\relax]
+ % [width=\the\dimexpr\textwidth+.5\backspace\relax]
+ {\vbox{\ctxlua{moduledata.luatests.showhashing { filename = "luatest-hash-luajittex-073-JIT20.lua" }}}}
+\stopplacetable
+
+\startplacetable[reference=tab:torture-3,location=page,title=\type{context --jit --jithash=lua51 test.tex}]
+ \scale
+ [height=\the\dimexpr\textheight-3\lineheight\relax]
+ % [width=\the\dimexpr\textwidth+.5\backspace\relax]
+ {\vbox{\ctxlua{moduledata.luatests.showhashing { filename = "luatest-hash-luajittex-073-LUA51.lua" }}}}
+\stopplacetable
+
+In these tables you can see some extremes. On the average \LUA\ 5.2 performs
+quite okay as does standard \LUAJIT. However, when we bring the 5.1 hash variant
+into \LUAJITTEX\ we get a more predictable average performance as it deals better
+with some of the extreme cases that make \LUAJITTEX\ crawl compared to \LUATEX.
+We have done more tests and interesting is to see that in the 5.1 (and derived
+5,2) method there are sometimes cases where odd lengths perform much worse than
+even lengths. Red values are larger than two times the average, blue values
+larger than average while green values indicate a less than half average value.
+
+In \in {table} [tab:compare-1] we show which method performs best relative to each
+other. Of course in many applications there will be no such extreme cases, but
+we happen to ran into them. But, even if \type {JIT20} is a winner in most cases,
+the fact that it has extreme slow exceptions makes it a bit of a gamble.
+
+\startplacetable[location=page,reference=tab:compare-1,title=The best performances per engine and hasher.]
+ \startcombination
+ \startcontent
+ \scale
+ [height=\the\dimexpr\textheight-4\lineheight\relax]
+ {\vbox{\ctxlua{moduledata.luatests.showhashing {
+ fileset = {
+ { tag = "JIT20", filename = "luatest-hash-luajittex-073-JIT20.lua" },
+ { tag = "JIT51", filename = "luatest-hash-luajittex-073-LUA51.lua" },
+ } } }}}
+ \stopcontent
+ \startcaption
+ \LUAJITTEX\ only
+ \stopcaption
+ \startcontent
+ \scale
+ [height=\the\dimexpr\textheight-4\lineheight\relax]
+ {\vbox{\ctxlua{moduledata.luatests.showhashing {
+ fileset = {
+ { tag = "LUA52", filename = "luatest-hash-luatex-073-LUA52.lua" },
+ { tag = "JIT20", filename = "luatest-hash-luajittex-073-JIT20.lua" },
+ { tag = "JIT51", filename = "luatest-hash-luajittex-073-LUA51.lua" },
+ } } }}}
+ \stopcontent
+ \startcaption
+ Both engines.
+ \stopcaption
+ \stopcombination
+\stopplacetable
+
+The 5.1 hasher runs over the string with a step that depends on the length of the
+string. We've seen that in 5.2 it doesn't hash strings larger than 40 characters.
+The step is calculated by shifting the length (by default) over 5 bits. This
+means that for strings of size 32 and more the step becomes 2 which is why we see
+this odd|/|even timing issue in the tables. Basically we hash at most 32
+characters of the 40. The next table shows that the less characters we take
+into account (first column) the less unique keys we get (second column).
+
+\starttabulate[|c|r|l|]
+\FL
+\NC \bf n \NC \bf unique \NC \bf text \NC \NR
+\FL
+\NC 3 \NC 22 \NC \tt\tx /Border [ 0 0 0 ] /F 4 /Subtype /Link /A * 0 R \NC \NR
+\NC 3 \NC 31 \NC \tt\tx << /D [ * 0 R /Fit ] /S /GoTo >> \NC \NR
+\NC 4 \NC 43 \NC \tt\tx /Border [ 0 0 0 ] /F 4 /Subtype /Link /A * 0 R \NC \NR
+\NC 4 \NC 51 \NC \tt\tx << /D [ * 0 R /Fit ] /S /GoTo >> \NC \NR
+\NC 5 \NC 410 \NC \tt\tx /Border [ 0 0 0 ] /F 4 /Subtype /Link /A * 0 R \NC \NR
+\NC 5 \NC 210 \NC \tt\tx << /D [ * 0 R /Fit ] /S /GoTo >> \NC \NR
+\NC 6 \NC 29947 \NC \tt\tx /Border [ 0 0 0 ] /F 4 /Subtype /Link /A * 0 R \NC \NR
+\NC 6 \NC 29823 \NC \tt\tx << /D [ * 0 R /Fit ] /S /GoTo >> \NC \NR
+\LL
+\stoptabulate
+
+In the next table we show a few cases. The characters that are taken into account
+are colored red. \footnote {Again the first column indicates the shift applied to
+the length in order to determine the step.}
+
+\starttabulate[|c|l|l|]
+\FL
+\NC \bf n \NC \bf text \NC \bf consulted \NC \NR
+\FL
+\NC 3\NC \tt\tx << /D [ 8 0 R /Fit ] /S /GoTo >> \NC \tt\tx <{\darkred <} /{\darkred D} [{\darkred \space }8 {\darkred 0} R{\darkred \space }/F{\darkred i}t {\darkred ]} /{\darkred S} /{\darkred G}oT{\darkred o} >{\darkred >} \NC \NR
+\NC 3\NC \tt\tx << /D [ 9 0 R /Fit ] /S /GoTo >> \NC \tt\tx <{\darkred <} /{\darkred D} [{\darkred \space }9 {\darkred 0} R{\darkred \space }/F{\darkred i}t {\darkred ]} /{\darkred S} /{\darkred G}oT{\darkred o} >{\darkred >} \NC \NR
+\NC 3\NC \tt\tx << /D [ 10 0 R /Fit ] /S /GoTo >> \NC \tt\tx <<{\darkred \space }/D{\darkred \space}[ {\darkred 1}0 {\darkred 0} R{\darkred \space }/F{\darkred i}t {\darkred ]} /{\darkred S} /{\darkred G}oT{\darkred o} >{\darkred >} \NC \NR
+\NC 3\NC \tt\tx << /D [ 11 0 R /Fit ] /S /GoTo >> \NC \tt\tx <<{\darkred \space }/D{\darkred \space}[ {\darkred 1}1 {\darkred 0} R{\darkred \space }/F{\darkred i}t {\darkred ]} /{\darkred S} /{\darkred G}oT{\darkred o} >{\darkred >} \NC \NR
+\NC 3\NC \tt\tx << /D [ 12 0 R /Fit ] /S /GoTo >> \NC \tt\tx <<{\darkred \space }/D{\darkred \space}[ {\darkred 1}2 {\darkred 0} R{\darkred \space }/F{\darkred i}t {\darkred ]} /{\darkred S} /{\darkred G}oT{\darkred o} >{\darkred >} \NC \NR
+\ML
+\NC 4\NC \tt\tx << /D [ 8 0 R /Fit ] /S /GoTo >> \NC \tt\tx <{\darkred <} {\darkred /}D{\darkred \space }[{\darkred \space }8{\darkred \space }0{\darkred \space }R{\darkred \space }/{\darkred F}i{\darkred t} {\darkred ]} {\darkred /}S{\darkred \space }/{\darkred G}o{\darkred T}o{\darkred \space }>{\darkred >} \NC \NR
+\NC 4\NC \tt\tx << /D [ 9 0 R /Fit ] /S /GoTo >> \NC \tt\tx <{\darkred <} {\darkred /}D{\darkred \space }[{\darkred \space }9{\darkred \space }0{\darkred \space }R{\darkred \space }/{\darkred F}i{\darkred t} {\darkred ]} {\darkred /}S{\darkred \space }/{\darkred G}o{\darkred T}o{\darkred \space }>{\darkred >} \NC \NR
+\NC 4\NC \tt\tx << /D [ 10 0 R /Fit ] /S /GoTo >> \NC \tt\tx {\darkred <}<{\darkred \space}/{\darkred D} {\darkred [} {\darkred 1}0{\darkred \space }0{\darkred \space }R{\darkred \space }/{\darkred F}i{\darkred t} {\darkred ]} {\darkred /}S{\darkred \space }/{\darkred G}o{\darkred T}o{\darkred \space }>{\darkred >} \NC \NR
+\NC 4\NC \tt\tx << /D [ 11 0 R /Fit ] /S /GoTo >> \NC \tt\tx {\darkred <}<{\darkred \space}/{\darkred D} {\darkred [} {\darkred 1}1{\darkred \space }0{\darkred \space }R{\darkred \space }/{\darkred F}i{\darkred t} {\darkred ]} {\darkred /}S{\darkred \space }/{\darkred G}o{\darkred T}o{\darkred \space }>{\darkred >} \NC \NR
+\NC 4\NC \tt\tx << /D [ 12 0 R /Fit ] /S /GoTo >> \NC \tt\tx {\darkred <}<{\darkred \space}/{\darkred D} {\darkred [} {\darkred 1}2{\darkred \space }0{\darkred \space }R{\darkred \space }/{\darkred F}i{\darkred t} {\darkred ]} {\darkred /}S{\darkred \space }/{\darkred G}o{\darkred T}o{\darkred \space }>{\darkred >} \NC \NR
+\LL
+\stoptabulate
+
+Of course, in practice, in \LUA\ 5.2 the longer string exceeds 40 characters so
+is never hashed anyway. Apart from this maximum, the \LUA\ hash code looks like this:
+
+\starttyping
+/* Lua will use at most ~(2^LUAI_HASHLIMIT) bytes from
+a string to compute its hash */
+...
+h = cast(unsigned int,len) ;
+step = (len>>LUAI_HASHLIMIT) + 1 ;
+for (l1=len; l1>=step; l1-=step) {
+ h = h ^ ((h<<5) + (h>>2) + cast(unsigned char,str[l1-1])) ;
+}
+...
+\stoptyping
+
+This translates in verbose \LUA\ function as follows:
+
+\starttyping
+function string.luahash(str,shift)
+ local len = #str
+ local hash = len
+ local step = bit32.rshift(len,shift or 5) + 1
+ for i=len,1,-step do
+ hash = bit32.bxor(hash, (
+ bit32.lshift(hash,5) +
+ bit32.rshift(hash,2) +
+ string.byte(string.sub(str,i,i))
+ ) )
+ end
+ return hash
+end
+\stoptyping
+
+The reader can argue that the following string would perform better:
+
+\starttyping
+/Subtype/Link/Border[0 0 0]/F 4/A 12 0 R
+\stoptyping
+
+but this is not the case. Also, here we use \PDF\ code, but similar cases can
+happen if we flush \TEX\ commands:
+
+\starttyping
+\dothisorthat{1}
+\dothisorthat{101}
+\dothisorthat{10101}
+\stoptyping
+
+And in the case of \UTF\ strings, it remains a fact that when characters need two
+bytes a sequence can end up with each odd or even byte being the same. This is
+one more reason to support upto 64 byte (or 40 in practice) hashing.
+
+Because of this we decided to experiment with a value of 64 instead. \footnote {Of
+course, in \LUATEX, the length limit kicks in before we get to 64.} We can do the
+same when we use the \LUA\ 5.1 method in \LUAJIT. In \in {table} [tab:torture-4]
+\in {and} [tab:torture-5] we show the timings. Interesting is that we lost the
+extremes now. The performance of the default settings are compared with the higher
+values in \in {table} [tab:compare-2]. Of course the numbers are just indications
+and there might be small differences between test runs. Therefore we use a threshold
+of 5\% when we compare two methods.
+
+\startplacetable[reference=tab:torture-4,location=page,title={\type{context test.tex} with len<=40 and hash<=64}]
+ \scale
+ [height=\the\dimexpr\textheight-3\lineheight\relax]
+ % [width=\the\dimexpr\textwidth+.5\backspace\relax]
+ {\vbox{\ctxlua{moduledata.luatests.showhashing { filename = "luatest-hash-luatex-073-LUA52-40-6.lua" }}}}
+\stopplacetable
+
+\startplacetable[reference=tab:torture-5,location=page,title={\type{context --jit test.tex} with hash<=64}]
+ \scale
+ [height=\the\dimexpr\textheight-3\lineheight\relax]
+ % [width=\the\dimexpr\textwidth+.5\backspace\relax]
+ {\vbox{\ctxlua{moduledata.luatests.showhashing { filename = "luatest-hash-luajittex-073-LUA51-40-6.lua" }}}}
+\stopplacetable
+
+\startplacetable[location=page,reference=tab:compare-2,title=More than 5\% difference between 32 byte or 64 byte hashing.]
+ \startcombination
+ \startcontent
+ \scale
+ [height=\the\dimexpr\textheight-4\lineheight\relax]
+ {\vbox{\ctxlua{moduledata.luatests.showhashing {
+ fileset = {
+ { tag = "40 / 32", filename = "luatest-hash-luatex-073-LUA52.lua" },
+ { tag = "40 / 64", filename = "luatest-hash-luatex-073-LUA52-40-6.lua" },
+ } } }}}
+
+ \stopcontent
+ \startcaption
+ \LUATEX\ (size limit 40)
+ \stopcaption
+ \startcontent
+ \scale
+ [height=\the\dimexpr\textheight-4\lineheight\relax]
+ {\vbox{\ctxlua{moduledata.luatests.showhashing {
+ fileset = {
+ { tag = "40 / 32", filename = "luatest-hash-luajittex-073-LUA51.lua" },
+ { tag = "40 / 64", filename = "luatest-hash-luajittex-073-LUA51-40-6.lua" },
+ } } }}}
+
+ \stopcontent
+ \startcaption
+ \LUAJITTEX\ (no size limit)
+ \stopcaption
+ \stopcombination
+\stopplacetable
+
+So how does this affect us in document production? It is not that hard to get a
+processing rate of a few dozen pages per second on a modern machine, even with
+somewhat complex documents, where \XML\ turns into \PDF. However, interactivity
+comes somehow with a price when we use \LUAJITTEX. In \CONTEXT\ \MKIV\ we do all
+\PDF\ annotations in \LUA\ and that involves assembling dictionaries. Here are
+two examples, a destination:
+
+\starttyping
+<< /D [ 15 0 R /Fit ] /S /GoTo >>
+\stoptyping
+
+and a reference:
+
+\starttyping
+/Subtype /Link /Border [ 0 0 0 ] /F 4 /A 16 0 R
+\stoptyping
+
+These strings are build with small variations and at some point end up in the \PDF\
+file. The same string can end up in the file several times, although sometimes we
+can create a reusable object. In the last case we keep them at the \LUA\ end as
+reference to such a shareable object, a key in an object reference hash. Now imagine
+that we have some 30K of such references and/or destinations, which indeed happens in
+crited documents. In the next two lines we use a \type {*} to show where the
+differences are:
+
+\starttyping
+<< /D [ * 0 R /Fit ] /S /GoTo >>
+/Subtype /Link /Border [ 0 0 0 ] /F 4 /A * 0 R
+\stoptyping
+
+If we replace these \type {*} by a number, there are big differences between the
+engines with respect to the time needed. This is summarized in the next table.
+\footnote {The numbers concern 30K hash creations. The time shown is the average
+over 30 runs.}
+
+\starttabulate[|c|c|c|l|]
+\FL
+\NC \bf \LUA\ 5.2 \NC \bf \LUAJIT\ 2.0 \NC \bf \LUAJIT\ 2.0+5.1 \NC \NR
+\FL
+\NC 0.096 \NC 0.046 \NC 0.047 \NC \ttx << /D [ * 0 R /Fit ] /S /GoTo >> \NC \NR
+\NC 0.054 \NC 6.017 \NC 0.055 \NC \ttx /Subtype /Link /Border [ 0 0 0 ] /F 4 /A * 0 R \NC \NR
+\LL
+\stoptabulate
+
+Especially the second case behaves bad in \LUAJIT. Say that a result comes out
+as:
+
+\starttyping
+/Subtype /Link /Border [ 0 0 0 ] /F 4 /A 12 0 R
+/Subtype /Link /Border [ 0 0 0 ] /F 4 /A 123 0 R
+/Subtype /Link /Border [ 0 0 0 ] /F 4 /A 1234 0 R
+\stoptyping
+
+The \LUAJIT\ hasher (more or less) looks at the first~4, last~4, middle~4 and
+somewhere a quarter along the string, and uses these sequences for the
+calculation, so you can imagine that there are clashes. The \LUA\ 5.1 hasher runs
+over part of the string and sees more of the difference. The 5.2 hasher has a
+threshold and doesn't hash at all when the length exceeds (by default) 40
+characters, which is the case with the second string. Looking at only specific
+parts of a string is somewhat arbitrary and what works for one kind of
+application is not always good for another.
+
+After these tests we decided that it makes sense to replace the \LUAJIT\ hash
+calculation by the traditional \LUA\ one (or at least give users a choice at
+startup. The choice of hash is a runtime option:
+
+\starttyping
+mtxrunjit --script context --jithash=lua51 ......
+mtxrunjit --script context --jithash=luajit20 ......
+\stoptyping
+
+For the moment we default to the traditional \LUA\ 5.1 hashing method. Although
+it can behave real bad on some large strings we think that chances are low that
+this will happen in practice. An overall good performance on strings like the
+hyperlink examples is more important. Using the \LUA\ 5.2 method would be even
+better but it required a change in the virtual machine and that is not something
+we have in mind.
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
+
+% Luatex manual:
+%
+% In \LUA\ strings are hashed which makes a test for equality fast and in \LUATEX\
+% we benefit from that fact. Starting with \LUA\ 5.2 the hash function is no longer
+% hashing strings larger than (by default) 40 characters. Of these at most 32
+% characters are hashed in stock \LUA\ but for a string rich environment as \TEX\
+% this can lead to many collisions. Therefore we have now set that constant limit
+% to 64 characters (so in practice it's now 40 too).
+%
+% In \LUAJIT\ the hash function is not the same as in \LUA\ and can in some cases
+% lead to a significant slowdown. We ran into cases where a \LUAJITTEX\ run was 20
+% times slower than a normal \LUATEX\ run while normally such run is 30\% faster.
+% For this reason we have replaced the hash code with the \LUA\ 5.1 hash code. This
+% change is minimal and gives less collisions. The impact on speed can be neglected.
+%
+% For \LUAJITTEX\ you can control the hash method:
+%
+% \starttyping
+% --jithash=luajit
+% --jithash=lua51
+% \stoptyping
+%
+% The current status of the hash function is available in:
+%
+% \starttyping
+% status.list().luatex_hashtype
+% status.list().luatex_hashchars
+% \stoptyping
+%
+% The first one returns \type {lua}, \type{luajit} or \type {lua51} depending on
+% the engine. The second one should always return 6. If it returns 5 then you have
+% a non|-|optimized binary. Other values are suspicious.
diff --git a/doc/context/sources/general/manuals/about/about-hz.tex b/doc/context/sources/general/manuals/about/about-hz.tex
new file mode 100644
index 000000000..5f3d6c6b4
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/about-hz.tex
@@ -0,0 +1,96 @@
+% language=uk
+
+\startcomponent about-hz
+
+\environment about-environment
+
+\startchapter[title={Font expansion}]
+
+\startsection[title=Introduction]
+
+A lot in \LUATEX\ is not new. It started as a mix of \PDFTEX\ (which itself is
+built on top of original \TEX\ and \ETEX) and the directional bits of \ALEPH\
+(which is a variant of \OMEGA). Of course large portions have been changed in the
+meantime, most noticeably the input encoding (\UNICODE), fonts with a more
+generic fontloader and \LUA\ based processing, \UNICODE\ math and related font
+rendering, and many subsystems can be overloaded or extended. But at the time I
+write this (end of January 2013) the parbuilder still has the \PDFTEX\ font
+expansion code.
+
+This code is the result of a research project by \THANH. By selectively widening
+shapes a better greyness of the paragraph can be achieved. This trick is inspired
+by the work of Hermann Zapf and therefore, instead of expansion, we often talk of
+{\em hz} optimization.
+
+It started with (runtime) generated \METAFONT\ bitmap fonts and as a consequence
+we ended up with many more font instances. However, when eventually bitmap
+support was dropped and outlines became the norm, the implementation didn't
+change much. Also some of the real work was delegated to the backend and as it
+goes then: never change a working system if there's no reason.
+
+When I played with the \LUA\ based par builder I quickly realized that this
+implementation was far from efficient. It was already known that enabling it
+slowed down par building and I saw that this was largely due to many redundant
+calculations, generating auxiliary fonts, and the interaction between front- and
+backend. And, as I seldom hesitate to reimplement something that can be done
+better (one reason why \CONTEXT\ is never finished) I came to an alternative
+implementation. That was 2010. What helped was that by that time Hartmut Henkel
+already had made the backend part cleaner, in the sense that instead of including
+multiple instances of the same font (but with different glyph widths) the base
+font was transformed in|-|line. This made me realize that we could use just one
+font in the frontend and pass the scale with the glyph node to the backend. And
+so, an extra field was added to glyphs nodes in order to make experiments
+possible.
+
+More than two years later (January 2013) I finally took up this pet project and
+figured out how to adapt the backend. Interestingly a few lines of extra code
+we all that was needed. At the same time the frontend part became much simpler,
+that is, in the \LUA\ parbuilder. But eventually it will be retrofitted into the
+core engine, if only because that's much faster.
+
+\stopsection
+
+\startsection[title=The changes]
+
+The most important changes are the following. Instead of multiple font instances,
+only one is used. This way less memory is used, no extra font instances need to
+be created (and those \OPENTYPE\ fonts can be large).
+
+Because less calculations are needed the code looks less complex and more elegant.
+Okay, the parbuilder code will never really look easy, if only because much more
+is involved.
+
+The glyph related factors are related to the emwidth. This makes not much sense
+so in \CONTEXT\ we define them in fractions of the character width, map them onto
+emwidths, and in the parbuilder need to go to glyph related widths again. If we can
+get rid of these emwidths, we have less complex code.
+
+Probably for reasons of efficiency an expanded font carries a definition that
+tells how much stretch and shrink is permitted and how large the steps are. So,
+for instance a font can be widened 5\% and narrowed 3\% in steps of 1\% which
+gives at most 8 extra instances. There is no real reason why this should be a
+font property and the parbuilder cannot deal with fonts with different steps
+anyway, so it makes more sense to make it a property of the paragraph and treat
+all fonts alike. In the \LUA\ based variant we can even have more granularity but
+we leave that for now. In any case this will lift the limitation of mixed font
+usage that is present in the original mechanism.
+
+The front- and backend code with repect to expansion gets clearly separated. In
+fact, the backend doesn't need to do any calculations other than applying the
+factor that is carried with the glyph. This and previously mentioned simplifications
+make the mechanism more efficient.
+
+It is debatable if expansion needs to be applied to font kerns, as is the case in
+the old mechanism. So, at least it should be an option. Removing this feature
+would again made the code nicer. If we keep it, we should keep in mind that
+expansion doesn't work well with complex fonts (say Arabic) but I will look into
+this later. It might be feasible when using the \LUA\ based variant because then
+we can use some of the information that is carried around with the related
+mechanisms. Of course this then related to the \LUA\ based font builder.
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
+
diff --git a/doc/context/sources/general/manuals/about/about-introduction.tex b/doc/context/sources/general/manuals/about/about-introduction.tex
new file mode 100644
index 000000000..92b386a75
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/about-introduction.tex
@@ -0,0 +1,38 @@
+% language=uk
+
+\startcomponent about-introduction
+
+\environment about-environment
+
+\startchapter[title={Introduction}]
+
+During the development of \LUATEX\ we wrapped up the state of affairs in articles
+and reports. Upto version 0.50 we tagged them as \quote {\MKIV} (the transition
+from \MKII), while for the next 0.25 versions we bundled them in \quote {hybrid}
+(the rewrite of \CONTEXT). The next series goes under the name \type {about} as
+one might wonder what all this \LUATEX\ and \CONTEXT\ is about. After all we've
+now reached a state where we can think about future applications instead of
+improving older features as that process is ongoing.
+
+As we're a bit beyond experimenting now, the focus will be on practical usage and
+of course we target on applications that the \LUA\ and \TEX\ combination makes
+possible, either new or in a renewed form. Some of the chapters will eventually
+become part of manuals.
+
+As with the two preceding collections of \LUATEX\ development stories, \quote
+{mk} and \quote {hybrid}, this one, called \quote {about}, covers a stretch of
+development, mostly between versions 0.50 and 0.75. The forth stretch, upto 1.00
+is covered in \quote {still}.
+
+\startlines
+Hans Hagen
+Hasselt NL
+2013\endash2015
+\blank
+\type {http://www.luatex.org}
+\type {http://www.pragma-ade.com}
+\stoplines
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/about/about-jitting-jit-2013-06-04.lua b/doc/context/sources/general/manuals/about/about-jitting-jit-2013-06-04.lua
new file mode 100644
index 000000000..189f5244c
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/about-jitting-jit-2013-06-04.lua
@@ -0,0 +1,148 @@
+return {
+ {
+ ["off"]="0.399",
+ ["on"]="0.081",
+ },
+ {
+ ["off"]="1.339",
+ ["on"]="0.081",
+ },
+ {
+ ["off"]="4.527",
+ ["on"]="2.817",
+ },
+ {
+ ["off"]="0.644",
+ ["on"]="0.640",
+ },
+ {
+ ["off"]="3.032",
+ ["on"]="3.007",
+ },
+ {
+ ["off"]="4.046",
+ ["on"]="4.977",
+ },
+ ["local fc = font.current\
+\
+function font.current()\
+ return fc()\
+end\
+\
+return function()\
+ local a = 0\
+ for i=1,10000 do\
+ a = a + font.current()\
+ end\
+end"]={
+ ["off"]="1.998",
+ ["on"]="2.417",
+ },
+ ["local function whatever(i)\
+ return i\
+end\
+\
+return function()\
+ local a = 0\
+ for i=1,10000 do\
+ a = a + whatever(i)\
+ end\
+end"]={
+ ["off"]="0.675",
+ ["on"]="0.041",
+ },
+ ["local tostring, tonumber = tostring, tonumber\
+return function()\
+ local a = 0\
+ for i=1,1000 do\
+ local a = a + tonumber(tostring(i))\
+ end\
+end"]={
+ ["off"]="4.762",
+ ["on"]="0.172",
+ },
+ ["local tostring, tonumber = tostring, tonumber\
+return function()\
+ local a = 0\
+ for i=1,10000 do\
+ local a = a + tonumber(tostring(i))\
+ end\
+end"]={
+ ["off"]="79.316",
+ ["on"]="5.640",
+ },
+ ["return function()\
+ local a = 0\
+ for i=1,100 do\
+ local a = a + tonumber(tostring(i))\
+ end\
+end"]={
+ ["off"]="0.703",
+ ["on"]="0.047",
+ },
+ ["return function()\
+ local a = 0\
+ for i=1,1000 do\
+ local a = a + tonumber(tostring(i))\
+ end\
+end"]={
+ ["off"]="4.786",
+ ["on"]="0.171",
+ },
+ ["return function()\
+ local a = 0\
+ for i=1,10000 do\
+ a = a + font.current()\
+ end\
+end"]={
+ ["off"]="1.417",
+ ["on"]="1.427",
+ },
+ ["return function()\
+ local a = 0\
+ for i=1,10000 do\
+ a = a + i\
+ end\
+end"]={
+ ["off"]="0.198",
+ ["on"]="0.041",
+ },
+ ["return function()\
+ local a = 0\
+ for i=1,10000 do\
+ a = a + math.sin(1/i)\
+ end\
+end"]={
+ ["off"]="2.206",
+ ["on"]="1.440",
+ },
+ ["return function()\
+ local a = 0\
+ for i=1,10000 do\
+ local a = a + tonumber(tostring(i))\
+ end\
+end"]={
+ ["off"]="79.456",
+ ["on"]="5.703",
+ },
+ ["return function()\
+ local a = 0\
+ local p = (1-lpeg.P(\"5\"))^0 * lpeg.P(\"5\")\
+ for i=1,100 do\
+ local a = a + (tonumber(lpeg.match(p,tostring(i))) or 0)\
+ end\
+end"]={
+ ["off"]="0.859",
+ ["on"]="0.843",
+ },
+ ["return function()\
+ local a = 0\
+ local p = (1-lpeg.P(\"5\"))^0 * lpeg.P(\"5\") + lpeg.Cc(0)\
+ for i=1,100 do\
+ local a = a + lpeg.match(p,tostring(i))\
+ end\
+end"]={
+ ["off"]="0.514",
+ ["on"]="0.516",
+ },
+} \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/about/about-jitting-jit.lua b/doc/context/sources/general/manuals/about/about-jitting-jit.lua
new file mode 100644
index 000000000..ec669a253
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/about-jitting-jit.lua
@@ -0,0 +1,163 @@
+return {
+ {
+ ["off"]="0.399",
+ ["on"]="0.081",
+ },
+ {
+ ["off"]="1.339",
+ ["on"]="0.081",
+ },
+ {
+ ["off"]="4.527",
+ ["on"]="2.817",
+ },
+ {
+ ["off"]="0.644",
+ ["on"]="0.640",
+ },
+ {
+ ["off"]="3.032",
+ ["on"]="3.007",
+ },
+ {
+ ["off"]="4.046",
+ ["on"]="4.977",
+ },
+ ["local fc = font.current\
+\
+function font.current()\
+ return fc()\
+end\
+\
+return function()\
+ local a = 0\
+ for i=1,10000 do\
+ a = a + font.current()\
+ end\
+end"]={
+ ["off"]="1.966",
+ ["on"]="2.492",
+ },
+ ["local fc = font.current\
+\
+function font.xcurrent()\
+ return fc()\
+end\
+\
+return function()\
+ local a = 0\
+ for i=1,10000 do\
+ a = a + font.xcurrent()\
+ end\
+end"]={
+ ["off"]="1.912",
+ ["on"]="1.915",
+ },
+ ["local function whatever(i)\
+ return i\
+end\
+\
+return function()\
+ local a = 0\
+ for i=1,10000 do\
+ a = a + whatever(i)\
+ end\
+end"]={
+ ["off"]="0.648",
+ ["on"]="0.042",
+ },
+ ["local tostring, tonumber = tostring, tonumber\
+return function()\
+ local a = 0\
+ for i=1,1000 do\
+ local a = a + tonumber(tostring(i))\
+ end\
+end"]={
+ ["off"]="2.620",
+ ["on"]="0.162",
+ },
+ ["local tostring, tonumber = tostring, tonumber\
+return function()\
+ local a = 0\
+ for i=1,10000 do\
+ local a = a + tonumber(tostring(i))\
+ end\
+end"]={
+ ["off"]="79.316",
+ ["on"]="5.640",
+ },
+ ["return function()\
+ local a = 0\
+ for i=1,100 do\
+ local a = a + tonumber(tostring(i))\
+ end\
+end"]={
+ ["off"]="0.703",
+ ["on"]="0.047",
+ },
+ ["return function()\
+ local a = 0\
+ for i=1,1000 do\
+ local a = a + tonumber(tostring(i))\
+ end\
+end"]={
+ ["off"]="2.607",
+ ["on"]="0.162",
+ },
+ ["return function()\
+ local a = 0\
+ for i=1,10000 do\
+ a = a + font.current()\
+ end\
+end"]={
+ ["off"]="1.292",
+ ["on"]="1.296",
+ },
+ ["return function()\
+ local a = 0\
+ for i=1,10000 do\
+ a = a + i\
+ end\
+end"]={
+ ["off"]="0.207",
+ ["on"]="0.042",
+ },
+ ["return function()\
+ local a = 0\
+ for i=1,10000 do\
+ a = a + math.sin(1/i)\
+ end\
+end"]={
+ ["off"]="2.204",
+ ["on"]="1.482",
+ },
+ ["return function()\
+ local a = 0\
+ for i=1,10000 do\
+ local a = a + tonumber(tostring(i))\
+ end\
+end"]={
+ ["off"]="79.456",
+ ["on"]="5.703",
+ },
+ ["return function()\
+ local a = 0\
+ local p = (1-lpeg.P(\"5\"))^0 * lpeg.P(\"5\")\
+ for i=1,100 do\
+ local a = a + (tonumber(lpeg.match(p,tostring(i))) or 0)\
+ end\
+end"]={
+ ["off"]="0.859",
+ ["on"]="0.843",
+ },
+ ["return function()\
+ local a = 0\
+ local p = (1-lpeg.P(\"5\"))^0 * lpeg.P(\"5\") + lpeg.Cc(0)\
+ for i=1,100 do\
+ local a = a + lpeg.match(p,tostring(i))\
+ end\
+end"]={
+ ["off"]="0.313",
+ ["on"]="0.316",
+ },
+} \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/about/about-jitting.tex b/doc/context/sources/general/manuals/about/about-jitting.tex
new file mode 100644
index 000000000..4a8bc763a
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/about-jitting.tex
@@ -0,0 +1,439 @@
+% language=uk engine=luajittex
+
+\startluacode
+
+ local nofjitruns = 5000
+
+ local runnow = string.find(environment.jobname,"about%-jitting") and jit
+
+ local runtimes = table.load("about-jitting-jit.lua") or {
+ nofjitruns = nofjitruns,
+ timestamp = os.currenttime(),
+ }
+
+ document.NOfJitRuns = runtimes.nofjitruns or nofjitruns
+ document.JitRunTimes = runtimes
+
+ function document.JitRun(specification)
+
+ local code = buffers.getcontent(specification.name)
+
+ if runnow then
+
+ local function testrun(how)
+ local test = load(code)()
+ collectgarbage("collect")
+ jit[how]()
+ local t = os.clock()
+ for i=1,document.NOfJitRuns do
+ test()
+ end
+ t = os.clock() - t
+ jit.off()
+ return string.format("%0.3f",t)
+ end
+
+ local rundata = {
+ off = testrun("off"),
+ on = testrun("on"),
+ }
+
+ runtimes[code] = rundata
+ document.JitTiming = rundata
+
+ else
+
+ local rundata = runtimes[code] or { }
+
+ document.JitTiming = {
+ off = rundata.off or "0",
+ on = rundata.on or "0",
+ }
+
+
+ end
+
+ end
+
+\stopluacode
+
+\starttexdefinition LuaJitTest #1%
+
+ \ctxlua{document.JitRun { name = "#1" } }
+
+ \starttabulate[|lT|lT|]
+ \NC off \NC \cldcontext{document.JitTiming.off} \NC \NR
+ \NC on \NC \cldcontext{document.JitTiming.on } \NC \NR
+ \stoptabulate
+
+\stoptexdefinition
+
+\starttexdefinition NOfLuaJitRuns
+ \cldcontext{document.NOfJitRuns}
+\stoptexdefinition
+
+% end of code
+
+\startcomponent about-jitting
+
+\environment about-environment
+
+\definehead[jittestsection][subsubsection][color=,style=bold]
+
+\startchapter[title=Luigi's nightmare]
+
+\startsection[title=Introduction]
+
+If you have a bit of a background in programming and watch kids playing video
+games, either or not on a dedicates desktop machine, a console or even a mobile
+device, there is a good change that you realize how much processing power is
+involved. All those pixels get calculated many times per second, based on a
+dynamic model that not only involves characters, environment, physics and a story
+line but also immediately reacts on user input.
+
+If on the other hand in your text editor hit the magic key combination that
+renders a document source into for instance a \PDF\ file, you might wonder why
+that takes so many seconds. Of course it does matter that some resources are
+loaded, that maybe images are included, and lots of fuzzy logic makes things
+happen, but the most important factor is without doubt that \TEX\ macros are not
+compiled into machine code but into an intermediate representation. Those macros
+then get expanded, often over and over again, and that a relative slow process.
+As (local) macros can be redefined any time, the engine needs to take that into
+account and there is not much caching going on, unless you explicitly define
+macros that do so. Take this:
+
+\starttyping
+\def\bar{test}
+\def\foo{test \bar\space test}
+\stoptyping
+
+Even if the definition of \type {\test} stays the same, that if \type {\bar} can
+change:
+
+\starttyping
+\foo \def\bar{foo} \foo
+\stoptyping
+
+There is no mechanism to freeze the meaning of \type {\bar} in \type {\foo},
+something that is possible in the other language used in \CONTEXT:
+
+\starttyping
+local function bar() context("test") end
+function foo() context("test ") bar() context(" test") end
+\stoptyping
+
+Here we can use local functions to limit their scope.
+
+\starttyping
+foo() local function bar() context("foo") end foo()
+\stoptyping
+
+In a way you can say that \TEX\ is a bit more dynamic that \LUA, and optimizing
+(as well as hardening) it is much more difficult. In \CONTEXT\ we already
+stretched that to the limits, although occasionally I find ways to speed up a
+bit. Given that we spend a considerable amount of runtime in \LUA\ it makes sense
+to see what we can gain there. We have less possible interference and often a more
+predictable outcome as \type {bar}s won't suddenly become \type {foo}s.
+
+Nevertheless, the dynamic nature of both \TEX\ and \LUA\ has some impact on
+performance, especially when they do most of the work. While in games there are
+dedicated chips to do tasks, for \TEX\ there aren't. So, we're sort of stuck when
+it comes to speeding up the process to the level that is similar to advanced
+games. In the next sections I will discuss a few aspects of possible speedups and
+the reason why it doesn't work out as expected.
+
+\stopsection
+
+\startsection[title=Jitting]
+
+Let's go back once more to Luigi's nightmare of disappointing jit \footnote
+{Luigi Scarso is the author of \LUAJITTEX\ and we have reported on experiments
+with this variant of \LUATEX\ on several occasions.} We already know that the
+virtual machine of \LUAJIT\ is about twice as fast as the standard machine. We
+also experienced that enabling jit can degrade performance. Although we did
+observe some real drastic drop in performance when testing functions like \type
+{math.random} using the \type {mingw} compiler, we also saw a performance boost
+with simple pure \LUA\ functions. In that respect \LUAJIT\ is an impressive
+effort. So, it makes sense to use \LUAJITTEX\ even if in theory it could be
+faster.
+
+Next some tests will be shown. The timings are snapshots so different versions of
+\LUAJITTEX\ can have different outcomes. The tests are mostly used for
+discussions between Luigi and me and further experiments and believe me: we've
+really done all kind of tests to see if we can get some speed out of jitting.
+After all it's hard to believe that we can't gain something from it, so we might
+as do something wrong.
+
+Each test is run \NOfLuaJitRuns\ times. These are of course non|-|typical
+examples but they illustrate the principle. Each time we show two measurements:
+one with jit turned on, and one with jit off, but in both cases the faster
+virtual machine is enabled. The times shown are of course dependent on the
+architecture and operating system, but as we are only interested in relative
+times it's enough to know that we run 32 bit mingw binaries under 64 bit Windows
+8 on a modern quad core Ivy bridge \CPU. We did most tests with \LUAJIT\ 2.0.1
+but as far as we can see 2.0.2 has a similar performance.
+
+\startjittestsection[title={simple loops, no function calls}]
+
+\startbuffer[jittest]
+return function()
+ local a = 0
+ for i=1,10000 do
+ a = a + i
+ end
+end
+\stopbuffer
+
+\typebuffer[jittest] \LuaJitTest{jittest}
+
+\stopjittestsection
+
+\startjittestsection[title={simple loops, with simple function}]
+
+\startbuffer[jittest]
+local function whatever(i)
+ return i
+end
+
+return function()
+ local a = 0
+ for i=1,10000 do
+ a = a + whatever(i)
+ end
+end
+\stopbuffer
+
+\typebuffer[jittest] \LuaJitTest{jittest}
+
+\stopjittestsection
+
+\startjittestsection[title={simple loops, with built-in basic functions}]
+
+\startbuffer[jittest]
+return function()
+ local a = 0
+ for i=1,10000 do
+ a = a + math.sin(1/i)
+ end
+end
+\stopbuffer
+
+\typebuffer[jittest] \LuaJitTest{jittest}
+
+\stopjittestsection
+
+\startjittestsection[title={simple loops, with built-in simple functions}]
+
+\startbuffer[jittest]
+return function()
+ local a = 0
+ for i=1,1000 do
+ local a = a + tonumber(tostring(i))
+ end
+end
+\stopbuffer
+
+\typebuffer[jittest] \LuaJitTest{jittest}
+
+\stopjittestsection
+
+\startjittestsection[title={simple loops, with built-in simple functions}]
+
+\startbuffer[jittest]
+local tostring, tonumber = tostring, tonumber
+return function()
+ local a = 0
+ for i=1,1000 do
+ local a = a + tonumber(tostring(i))
+ end
+end
+\stopbuffer
+
+\typebuffer[jittest] \LuaJitTest{jittest}
+
+\stopjittestsection
+
+\startjittestsection[title={simple loops, with built-in complex functions}]
+
+\startbuffer[jittest]
+return function()
+ local a = 0
+ local p = (1-lpeg.P("5"))^0 * lpeg.P("5") + lpeg.Cc(0)
+ for i=1,100 do
+ local a = a + lpeg.match(p,tostring(i))
+ end
+end
+\stopbuffer
+
+\typebuffer[jittest] \LuaJitTest{jittest}
+
+\stopjittestsection
+
+\startjittestsection[title={simple loops, with foreign function}]
+
+\startbuffer[jittest]
+return function()
+ local a = 0
+ for i=1,10000 do
+ a = a + font.current()
+ end
+end
+\stopbuffer
+
+\typebuffer[jittest] \LuaJitTest{jittest}
+
+\stopjittestsection
+
+\startjittestsection[title={simple loops, with wrapped foreign functions}]
+
+\startbuffer[jittest]
+local fc = font.current
+
+function font.xcurrent()
+ return fc()
+end
+
+return function()
+ local a = 0
+ for i=1,10000 do
+ a = a + font.xcurrent()
+ end
+end
+\stopbuffer
+
+\typebuffer[jittest] \LuaJitTest{jittest}
+
+\stopjittestsection
+
+What we do observe here is that turning on jit doesn't always help. By design the
+current just|-|in|-|time compiler aborts optimization when it sees a function
+that is not known. This means that in \LUAJITTEX\ most code will not get jit,
+because we use built|-|in library calls a lot. Also, in version 2.0 we notice
+that a bit of extra wrapping will make performance worse too. This might be why
+for us jitting doesn't work out the way it is advertised. Often performance tests
+are done with simple functions that use built in functions that do get jit. And
+the more of those are supported, the better it gets. Although, when you profile a
+\CONTEXT\ run, you will notice that we don't call that many standard library
+functions, at least not so often that jitting would get noticed.
+
+A safe conclusion is that you can benefit a lot from the fast virtual machine but
+should check carefully if jit is not having a negative impact. As it is turned on
+by default in \LUAJIT\ (but off in \LUAJITTEX) it might as well get unnoticed,
+especially because there is always a performance gain due to the faster virtual
+machine and that might show more overall gain than the drawback of jitting
+unjittable code. It might just be a bit less drastic then possible because of
+artifacts mentioned here, but who knows what future versions of \LUAJIT\ will
+bring.
+
+Maybe sometime we can benefit from \type {ffi} but it makes no sense to mess up
+the \CONTEXT\ code with related calls: it looks ugly and also makes the code
+unusable in stock \LUA, so it is a a sort of no|-|go. There are some suggestions
+in \LUAJIT\ related posts about adapting the code to suit the jitter, but again,
+that makes no sense. If we need to keep a specific interpreter in mind, we could
+as well start writing everything in C. So, our hopes are on future versions of
+stock \LUA\ and \LUAJIT. Luigi uncovered the following comment in the source code:
+
+\starttyping
+/* C functions can have arbitrary side-effects and are not
+recorded (yet). */
+\stoptyping
+
+Although the \type {(yet)} indicates that at some point this restriction can be
+lifted, we don't expect this to happen soon. And patching the jit machinery
+ourselves to suite \LUATEX\ is no option.
+
+There is an important difference between a \LUATEX\ run and other programs: they
+are runs and these live short. A lot of code gets executed only once of a few
+times (like loading fonts), or gets executed in such different ways that (branch)
+prediction is hard. If you run a web server using \LUA\ it runs for weeks in a
+row so optimizing a function pays off, given that it gets optimized. When you
+have a \LUA\ enhanced interactive program, again, the session is long enough to
+benefit from jitting (if applied). And, when you crunch numbers, it might pay off
+too. In practice, a \TEX\ run has no such characteristics.
+
+\stopsection
+
+\startsection[title=Implementation]
+
+In \LUA\ 5.2 there are some changes in the implementation compared to 5.1 and
+before. It is hard to measure the impact of that but it's probably a win some
+here and loose some there situation. A good example is the way \LUA\ deals with
+strings. Before 5.2 all strings were hashed, but now only short strings are
+(at most 32 bytes are looked at). Now, consider this:
+
+\startitemize
+ \startitem
+ In \CONTEXT\ we do all font handling in \LUA\ and that involves lots of
+ tables with lots of (nicely hashed) short keys. So, comparing them is
+ pretty fast.
+ \stopitem
+ \startitem
+ We also read a lot from files, and each line passes filters and such
+ before it gets passed to \TEX. There hashing is not really needed,
+ although when it gets processed by filters it might as well save some
+ time.
+ \stopitem
+ \startitem
+ When we go from \TEX\ to \LUA\ and reverse, lots of strings are involved
+ and many of them are unique and used once. There hashing might bring a
+ penalty.
+ \stopitem
+ \startitem
+ When we loop over a string with \type {gmatch} or some \type {lpeg}
+ subprogram lots of (small) strings can get created and each gets hashed,
+ even if they have a short livespan.
+ \stopitem
+\stopitemize
+
+The above items indicate that we can benefit from hashing but that sometimes it
+might have a performance hit. My impression is that on the average we're better
+off by hashing and it's one of the reasons why \LUA\ is so fast (and useable).
+
+In \TEX\ all numbers are integers and in \LUA\ all numbers are floats. On modern
+computers dealing with floating point is fast and we're not crunching numbers
+anyway. We definitely would have an issue when numbers were just integers and an
+upcoming mixed integer|/|float model might not be in our advantage. We'll see.
+
+I had expected to benefit from bitwise operations but so far never could find a
+real application in \CONTEXT, at least not one that had a positive impact. But
+maybe it's just a way of thinking that hasn't evolved yet. Also, the fact that
+functions are used instead of a real language extension makes it less possible
+that there is a speedup involved.
+
+\stopsection
+
+\startsection[title=Garbage collection]
+
+In the beginning I played with tuning the \LUA\ garbage collector in order to
+improve performance. For some documents changing the step and multiplier worked
+out well, but for others it didn't, so I decided that one can best leave the
+values as they are. Turning the garbage collector off as expected gives a
+relative small speedup, and for the average run the extra memory used can be
+neglected. Just keep in mind that a \TEX\ run are never persistent so memory
+can't keep filling. I did some tests with the in theory faster (experimental)
+generational mode of the garbage collector but it made runs significantly slower.
+For instance processing the \type {fonts-mkiv.pdf} went from 9 to 9.5 seconds.
+
+\stopsection
+
+\startsection[title=Conclusion]
+
+So what is, given unpredictable performance hits of advertised optimizations, the
+best approach. It all starts by the \LUA\ (and \TEX) code: sloppy coding can have
+a price. Some of that can be disguised by clever interpreters but some can't. If
+the code is already fast, there is not much to gain. When going from \MKII\ to
+\MKIV\ more and more \LUA\ got introduced and lots of approaches were
+benchmarked, so, I'm already rather confident that there is not that much to
+gain. It will never have the impressive performance of interactive games and
+that's something we have to live with. As long as \LUA\ stays lean and mean,
+things can only get better over time.
+
+\stopsection
+
+\startluacode
+ table.save("about-jitting-jit.lua",document.JitRunTimes)
+\stopluacode
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/about/about-luafunctions.tex b/doc/context/sources/general/manuals/about/about-luafunctions.tex
new file mode 100644
index 000000000..810de10fd
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/about-luafunctions.tex
@@ -0,0 +1,292 @@
+% language=uk
+
+\startcomponent about-properties
+
+\environment about-environment
+
+\startchapter[title=Functions]
+
+\startsection[title=Introduction]
+
+As part of the crited project Luigi and I also tried to identity weak spots in
+the engine and although we found some issues not all were dealt with because
+complicating the machinery makes no sense. However just like the new \type
+{properties} mechanism provides a real simple way to associate extra \LUA\ data
+to a node without bothering about freeing it when a node is flushed, the next
+\type {luafunctions} mechanism provides an additional and fast way to cross the
+\TEX||\LUA\ boundary.
+
+\stopsection
+
+\startsection[title=Callbacks]
+
+In \LUATEX\ we can create more functionality by using \LUA\ which means that we
+end up (at least in \CONTEXT) with a constant switching between \TEX\ macro
+expansion and \LUA\ code interpretation. The magic word in this process is \type
+{callback} and there are two variants:
+
+\startitemize
+
+\startitem At well defined moments in processing its input and node lists, \TEX\
+will check if a specific callback is defined and if so, it will run that code.
+\stopitem
+
+\startitem As part of the input you can have a \type {\directlua} command and
+that one gets expanded and processed. It can print back content into the current
+input buffer. \footnote {Currently this process is somewhat more complex than
+needed, which is a side effect of supporting multiple \LUA\ states in the first
+versions of \LUATEX. We will clean up this mechanism at some point.} \stopitem
+
+\stopitemize
+
+The first type is call a \quote {direct} callback because \TEX\ calls it
+directly, and the second one is an \quote {indirect} one (even if the command is
+\type {\directlua}). It has a deferred cousin \type {\latelua} that results in a
+node being inserted that will become a \LUA\ call during shipout, when the page
+is turned into a \PDF\ stream.
+
+A callback of the first category is pretty fast because the code is already
+translated in \LUA\ bytecode. Checking if a callback has been assigned at all is
+fast too. The second variant is slower because each time the input has to be
+interpreted and checked on validity. Then there is of course some overhead in
+making the call itself.
+
+There is a subtle aspect there. If you have a document that needs say ten calls
+like:
+
+\starttyping
+\directlua{tex.print("[x]")}
+\stoptyping
+
+and you have these calls inlined, you end up with ten times conversion into
+tokens (\TEX's internal view) and ten times conversion back to a string that gets
+fed into \LUA. On the other hand,
+
+\starttyping
+\def\MyCall{\directlua{tex.print("[x]")}}
+\stoptyping
+
+where we call \type {\MyCall} ten times is more efficient because we have already
+tokenized the \type {\directlua}. If we have
+
+\starttyping
+foo foo foo \directlua{tex.print("[1]")} ...
+bar bar bar \directlua{tex.print("[2]")} ...
+\stoptyping
+
+It makes sense to wrap this into a definition:
+
+\starttyping
+\def\MyCall#1{\directlua{tex.print("[#1]")}}
+\stoptyping
+
+and use:
+
+\starttyping
+foo foo foo \MyCall{1} bar bar bar \MyCall{1} ...
+\stoptyping
+
+Of course this is not unique for \type {\directlua} and to be honest, apart from
+convenience (read: less input) the gain often can be neglected. Because a macro
+package wraps functionality in (indeed) macros we already save us the tokenization
+step. We can save some time by wrapping more in a function at the \LUA\ end:
+
+\starttyping
+\startluacode
+function MyFloat(f)
+ tex.print(string.format("%0.5f",f))
+end
+\stopluacode
+
+\def\MyFloat#1%
+ {\directlua{MyFloat(#1)}}
+\stoptyping
+
+This is somewhat more efficient than:
+
+\starttyping
+\def\MyFloat#1%
+ {\directlua{tex.print(string.format("\letterpercent0.5f",#1))}}
+\stoptyping
+
+\stopsection
+
+Of course this is only true when we call this macro a lot of times.
+
+\startsection[title=Shortcuts]
+
+When we talk of \quote {often} or \quote {a lot} we mean many thousands of calls.
+There are some places in \CONTEXT\ where this is indeed the case, for instance
+when we process large registers in critical editions: a few hundred pages of
+references generated in \LUA\ is no exception there. Think of the following:
+
+\starttyping
+\startluacode
+function GetTitle(n)
+ tex.print(Entries[n].title)
+end
+\stopluacode
+
+\def\GetTitle#1%
+ {\directlua{GetTitle(#1)}}
+\stoptyping
+
+If we call \type {\GetTitle} ourselves it's the same as the \type {\MyFloat}
+example, but how about this:
+
+\starttyping
+\def\GetTitle#1%
+ {{\bf \directlua{GetTitle(#1)}}}
+
+\startluacode
+function GetTitle(n)
+ tex.print(Entries[n].title)
+end
+
+function GetEntry(n)
+ if Entries[n] then
+ tex.print("\\directlua{GetTitle(",n,")}")
+ -- some more action
+ end
+end
+\stopluacode
+\stoptyping
+
+Here we have two calls where one is delayed till a later time. This delay results
+in a tokenization and transation to \LUA\ so it will cost time. A way out is this:
+
+\starttyping
+\def\GetTitle#1%
+ {{\bf \luafunction#1}}
+
+\startluacode
+local functions = tex.get_functions_table()
+
+function GetTitle(n)
+ tex.print(Entries[n].title)
+end
+
+function GetEntry(n)
+ if Entries[n] then
+ local m = #functions+1
+ functions[m] = function() GetTitle(n) end
+ tex.print("\\GetTitle{",m,"}")
+ -- some more action
+ end
+end
+\stopluacode
+\stoptyping
+
+We define a function at the \LUA\ end and just print a macro call. That call itself
+calls the defined function using \type {\luafunction}. For a large number
+of calls this is more efficient but it will be clear that you need to make sure that
+used functions are cleaned up. A simple way is to start again at slot one after (say)
+100.000 functions, another method is to reset used functions and keep counting.
+
+\starttyping
+\startluacode
+local functions = tex.get_functions_table()
+
+function GetTitle(n)
+ tex.print(Entries[n].title)
+end
+
+function GetEntry(n)
+ if Entries[n] then
+ local m = #functions+1
+ functions[m] = function(slot) -- the slot number is always
+ GetTitle(n) -- passed as argument so that
+ functions[slot] = nil -- we can reset easily
+ end
+ tex.print("\\GetTitle{",m,"}")
+ -- some more action
+ end
+end
+\stopluacode
+\stoptyping
+
+As you can expect, in \CONTEXT\ users are not expect to deal directly with
+functions at all. Already for years you can so this:
+
+\starttyping
+\def\GetTitle#1%
+ {{\bf#1}}
+
+\startluacode
+function GetEntry(n)
+ if Entries[n] then
+ context(function() context.GetTitle(Entries[n].title) end)
+ -- some more action
+ end
+end
+\stopluacode
+\stoptyping
+
+Upto \LUATEX\ 0.78 we had a \CONTEXT\ specific implementation of functions and
+from 0.79 onwards we use this new mechanism but users won't see that in practice.
+In the \type {cld-mkiv.pdf} manual you can find more about accessing \CONTEXT\
+from the \LUA\ end.
+
+Keep in mind that \type {\luafunction} is not that clever: it doesn't pick up
+arguments. That will be part of future more extensive token handling but of
+course that will then also be a real slow downer because a mix of \TEX\
+tokenization and serialization is subtoptimal (we already did extensive tests
+with that).
+
+\stopsection
+
+\startsection[title=Helpers]
+
+The above mechanism demands some orchestration in the macro package. For instance
+freeing slots should be consistent and therefore user should not mess directly
+with the functions table. If you really want to use this feature you can best do this:
+
+\starttyping
+\startctxfunction MyFunctionA
+ context(" A1 ")
+\stopctxfunction
+
+\startctxfunctiondefinition MyFunctionB
+ context(" B2 ")
+\stopctxfunctiondefinition
+
+\starttext
+ \dorecurse{10000}{\ctxfunction{MyFunctionA}} \page
+ \dorecurse{10000}{\MyFunctionB} \page
+ \dorecurse{10000}{\ctxlua{context(" C3 ")}} \page
+ \dorecurse{10000}{\ctxlua{tex.sprint(" D4 ")}} \page
+\stoptext
+\stoptyping
+
+In case you're curious about performance, here are timing. Given that we have
+10.000 calls the gain is rather neglectable especially because the whole run
+takes 2.328 seconds for 52 processed pages resulting in 22.4 pages per second.
+The real gain is in more complex calls with more tokens involved and in \CONTEXT\
+we have some placed where we run into the hundreds of thousands. A similar
+situation occurs when your input comes from databases and is fetched stepwise.
+
+\starttabulate[|c|c|c|c|]
+\NC \bf A \NC \bf B \NC \bf C \NC \bf D \NC \NR
+\NC 0.053 \NC 0.044 \NC 0.081 \NC 0.081 \NC \NR
+\stoptabulate
+
+So, we can save 50\% runtime but on a simple document like this a few percent is
+not that much. Of course many such few percentages can add up, and it's one of
+the reasons why \CONTEXT\ \MKIV\ is pretty fast in spite of all the switching
+between \TEX\ and \LUA. One objective is that an average complex document should
+be processed with a rate of at least 20 pages per second and in most cases we
+succeed. This fast function accessing can of course trigger new features in
+\CONTEXT, ones we didn't consider useful because of overhead.
+
+Keep in mind that in most cases, especially when programming in \LUA\ directly
+the \type {context} command already does all kind of housekeeping for you. For
+instance it also keeps track of so called trial typesetting runs and can inject
+nodes in the current stream as well. So, be warned: there is no real need to
+complicate your code with this kind of hackery if some high level subsystem
+provides the functionality already.
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/about/about-mathstackers.tex b/doc/context/sources/general/manuals/about/about-mathstackers.tex
new file mode 100644
index 000000000..07fadf102
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/about-mathstackers.tex
@@ -0,0 +1,765 @@
+% language=uk
+
+\startcomponent about-mathstackers
+
+\environment about-environment
+
+\startchapter[title=Math stackers]
+
+\startsection[title=Introduction]
+
+In the next sections I will discuss the way we deal with stacked content in
+\CONTEXT\ \MKIV\ and in particular extensible characters. The mechanism describe
+here is actually more generic and can also deal with regular text. The stacker
+code is an evolution of the mechanisms that combine math arrows with text. From
+the users perspective there is not that much difference with the old methods
+because in practice \quote {defined} commands are used and their name stayed.
+However, we use different definition and setup commands and provide much more
+control. The new implementation is leaner but not meaner and fits the way \MKIV\
+is set up.
+
+How does \LUA\ fits in? We use a helper in order to determine some
+characteristics of extensibles, but we could have done without. We also use some
+new \LUATEX\ math primitives and of course we depend on \OPENTYPE\ font
+technoloygy.
+
+\stopsection
+
+\startsection[title=Extensibles]
+
+The command \type {\leftarrowfill} was introduced in plain \TEX\ and gives, as
+the name indicates, a \leftarrowfill\ that stretches itself so that it takes the
+available space. Take the following example:
+
+\starttyping
+\hbox to 4cm{\leftarrowfill}
+\stoptyping
+
+This will make an arrow of length 4cm:
+
+\blank \mathstylehbox{\Umathaccent\fam\zerocount"2190{\hskip4cm}} \blank
+
+This arrow is made out of small snippets:
+
+\blank {\showglyphs\scale[width=\textwidth]{\mathstylehbox{\Umathaccent\fam\zerocount"2190{\hskip4cm}}}} \blank
+
+Here is another one:
+
+\starttyping
+\hbox to 4cm{\rightoverleftarrowfill}
+\stoptyping
+
+or:
+
+\blank {\mathstylehbox{\Umathaccent\fam\zerocount"21C4{\hskip4cm}}} \blank
+
+This time we have three different snippets:
+
+\blank {\showglyphs\scale[width=\textwidth]{\mathstylehbox{\Umathaccent\fam\zerocount"21C4{\hskip4cm}}}} \blank
+
+The \TEX\ engine has a concept of extensible characters. In fact there are two
+mechanisms: there is a list of larger glyphs and when that list is exhausted
+larger characters can be constructed out of snippets. Examples are left and right
+fences in math like braces and brackets, and, also in math, some top and bottom
+accents.
+
+For reasons unknown to me, some of these extensibles are handled by the engine
+directly, using properties of a font, while others are composed using macros.
+Given that \TEX\ is quite popular for typesetting scientific articles it is
+beyond my understanding why no one decided to provide some more fonts and|/|or
+extend the \TEX\ engine. After all, the whole idea of Donald Knuth with \TEX\ was
+that it could be adapted to future needs by its users. And so, more that 30 years
+after \TEX\ and macro packages showed up we're stuck with not only incomplete
+fonts, but also an engine that was never adapted to demands.
+
+\stopsection
+
+\startsection[title=The traditional way]
+
+In \CONTEXT\ we have support for extensibles built into the core but it uses the
+traditional approach: take some snippets and paste them together, making sure to
+achieve some overlap and get rid of side bearings. In terms of \TEX\ code this can
+best be illustrated with the plain \TEX\ definition of such a command:
+
+\starttyping
+\def\leftarrowfill
+ {$%
+ \mathsurround0pt%
+ \mathord\leftarrow\mkern-7mu%
+ \cleaders\hbox{$\mkern-2mu\smash-\mkern-2mu$}\hfill
+ \mkern-7mu\smash-%
+ $}
+\stoptyping
+
+Here we create a tight formula starting with a \type {leftarrow}, ending with a
+minus sign and glued together with the number of minus signs that are needed to
+fill the available space. This macro eventually expands to something like this (a
+bit spaced out):
+
+\starttyping
+\def\leftarrowfill { $
+ % \leftarrow = \mathchardef\leftarrow="3220 in plain but in
+ % unicode it's character 0x2190 so we use that one here
+ \mathsurround=0pt
+ \mathord{\mathchar"2190}
+ \mkern-7mu
+ \cleaders
+ \hbox { $
+ \mkern-2mu
+ \mathchoice
+ {\setbox0\hbox{$\displaystyle -$}\ht0=0pt\dp0=0pt\box0}
+ {\setbox0\hbox{$\textstyle -$}\ht0=0pt\dp0=0pt\box0}
+ {\setbox0\hbox{$\scriptstyle -$}\ht0=0pt\dp0=0pt\box0}
+ {\setbox0\hbox{$\scriptscriptstyle-$}\ht0=0pt\dp0=0pt\box0}
+ \mkern-2mu
+ $ }
+ \hfill
+ \mkern-7mu
+ \mathchoice
+ {\setbox0\hbox{$\displaystyle -$}\ht0=0pt\dp0=0pt\box0}
+ {\setbox0\hbox{$\textstyle -$}\ht0=0pt\dp0=0pt\box0}
+ {\setbox0\hbox{$\scriptstyle -$}\ht0=0pt\dp0=0pt\box0}
+ {\setbox0\hbox{$\scriptscriptstyle-$}\ht0=0pt\dp0=0pt\box0}
+$ }
+\stoptyping
+
+If you look at the code you see a few hacks. First of all we see that we need to
+add kerns in order to make the symbols overlap. For the middle shapes this is
+understandable as there we don't want rounding errors to lead to gaps. Also,
+because the minus in Computer Modern (and therefore Latin Modern) has rounded
+tips, we need to make sure that we end up beyond the tips. Next we see two blobs
+of \type {mathchoice}. This primitive chooses one of the four variants and
+switches to the right math style. It packages the minus and smashes it. In our
+case smashing makes not much sense as the arrowhead has height and depth anyway,
+but it's a side effect of using general purpose macros that there can be some
+unneeded overhead.
+
+\blank
+\hbox \bgroup \quad
+ \scale[sx=5,sy=5]{\hbox{\showglyphs$\mathsurround\zeropoint\char"2190$}}\quad
+ \scale[sx=5,sy=5]{\hbox{\showglyphs$\mathsurround\zeropoint\char"002D$}}\quad
+ \scale[sx=5,sy=5]{\hbox{\showglyphs$\mathsurround\zeropoint\char"27F8$}}\quad
+ \scale[sx=5,sy=5]{\hbox{\showglyphs$\mathsurround\zeropoint\char"003D$}}\quad
+\egroup
+\blank
+
+Above you see the two characters that traditionally are combined into a leftward
+pointing arrows. Watch the whitespace on the left and right of the actual glyph.
+
+\stopsection
+
+\startsection[title=The new way]
+
+These zero height and depth don't show up in our rendered examples. Why is this?
+The reason is that I cheated a bit. I used this to get the arrow: \footnote {In
+this example I misuse the accent placement mechanism. Upto \LUATEX\ 0.75 that was
+the way to go.}
+
+\starttyping
+\mathstylehbox{\Umathaccent\fam\zerocount"21C4{\hskip4cm}}
+\stoptyping
+
+The \CONTEXT\ support macro \type {\mathstylehbox} is an efficient variant of
+\type {\mathchoice}. More significant is that we don't assemble the arrow, but
+just put it as an accent on top of a skip. The \type {\Umathaccent} primitive
+will assemble the long arrow for us, using information in the font. If we look
+into the definition of the (Latin Modern) font in \MKIV\ we see this:
+
+\starttyping
+[8592]={
+ ["boundingbox"]={ 57, -10, 942, 510 },
+ ["class"]="base",
+ ["index"]=1852,
+ ["math"]={
+ ["horiz_parts"]={
+ {
+ ["advance"]=507,
+ ["end"]=169,
+ ["extender"]=0,
+ ["glyph"]=984274,
+ ["start"]=0,
+ },
+ {
+ ["advance"]=337,
+ ["end"]=337,
+ ["extender"]=1,
+ ["glyph"]=984275,
+ ["start"]=337,
+ },
+ {
+ ["advance"]=507,
+ ["end"]=0,
+ ["extender"]=0,
+ ["glyph"]=984276,
+ ["start"]=169,
+ },
+ },
+ ["horiz_variants"]={ 10229 },
+ },
+ ["name"]="arrowleft",
+ ["width"]=1000,
+}
+\stoptyping
+
+This arrow symbol comes in two sizes. The extra size is mentioned in \type
+{horiz_variants}. When no more variants are seen, it switches to the extensible
+definition, that uses \type {horiz_parts}. The dimensions are in basepoints, the
+references to glyphs are decimal. The \type {end} and \type {start} fields
+specify the overlap. When \type {extender} equals 1 it signals a repeatable
+snippet.
+
+In the \TEX\ engine the slot allocated for the left arrow symbol has a \type
+{next} pointer to a larger shape. Here there is only one such shape but when
+there are more they form a linked list. The the last one in such a list gets the
+specification of the extenders.
+
+We hard|-|coded the width to 4cm so how does it work when the arrow has to adapt
+itself? There are two cases there. When we are putting text on top of or below an
+arrow, we know what the width is because we can measure the text. But when we use
+the arrow as a filler, we have to leave it to the engine to arrange it. In recent
+\LUATEX\ the definition can be as simple as:
+
+\starttyping
+\def\leftarrowfill{\leaders "2190 \hfill}
+\stoptyping
+
+or:
+
+\starttyping
+\def\leftarrowfill{\mathstylehbox{\leaders"2190\hfill}}
+\stoptyping
+
+In fact, we can use this new \LUATEX\ extension to \type {\leaders} to
+replace the accent hacks as well.
+
+\stopsection
+
+\startsection[title=Wrapping it in macros]
+
+If this was all, we would be done in a few lines of definitions but as usual
+there is more involved: especially text. The prerequisites can be summarized as
+follows:
+
+\startitemize[packed]
+\startitem
+ The width of the extensible need to adapt itself automatically.
+\stopitem
+\startitem
+ We need to be able to control horizontal and vertical offsets.
+\stopitem
+\startitem
+ We best have a math as well as a text variant (which is handy for chemistry).
+\stopitem
+\startitem
+ For historic reasons we need to deal with optional arguments in a special
+ (reverse) way.
+\stopitem
+\startitem
+ We need alternatives for extensibles on top, in the middle and at the bottom.
+\stopitem
+\stopitemize
+
+Using a low level command we can do this:
+
+\startbuffer[math]
+$x \directmathextensible{"2192}{top}{bottom} x$
+\stopbuffer
+
+\typebuffer[math] \blank \getbuffer[math] \blank
+
+This is not that exiting too look at, but the next might be:
+
+\enabletrackers[math.stackers.texts]
+
+\blank \getbuffer[math] \blank
+
+Here we have turned on a tracker:
+
+\starttyping
+\enabletrackers[math.stackers.texts]
+\stoptyping
+
+The toppart is transparent blue, the middlepart transparent red and the bottom
+part becomes transparent green. When the areas overlap you see the mixed color.
+
+Before we explore some options, we show some variants. Often extensibles are used
+in math mode, if only because they originate in math and come from math fonts.
+
+\startbuffer[text]
+$x \textstacker{"2192}{top}{bottom} x$
+\stopbuffer
+
+\typebuffer[text] \blank \getbuffer[text] \blank
+
+These commands also work outside math mode:
+
+\startbuffer[none]
+x \textstacker{"2192}{top}{bottom} x
+\stopbuffer
+
+\typebuffer[none] \blank \getbuffer[none] \blank
+
+and to some extend can adapt themselves:
+
+\startbuffer[high]
+x\high{x \textstacker{"2192}{top}{bottom} x} x
+\stopbuffer
+
+\typebuffer[high] \blank[2*big] \getbuffer[high] \blank
+
+\stopsection
+
+\startsection[title=Influencing the spacing]
+
+We will use the text example to illustrate some options.
+
+\startbuffer[demo]
+\ruledhbox \bgroup \quad
+ \setupmathstackers[location=top]%
+ \textstacker{"21C4}{top}{bottom}\quad
+ \setupmathstackers[location=high]%
+ \textstacker{"21C4}{top}{bottom}\quad
+ \setupmathstackers[location=middle]%
+ \textstacker{"21C4}{top}{bottom}\quad
+ \setupmathstackers[location=low]%
+ \textstacker{"21C4}{top}{bottom}\quad
+ \setupmathstackers[location=bottom]%
+ \textstacker{"21C4}{top}{bottom}\quad
+\egroup
+\stopbuffer
+
+\typebuffer[demo]
+
+You can set up extensibles to be shifted up and down.
+
+\blank \getbuffer[demo] \blank
+
+The above rendering uses the default spacing. When we set all values to zero we
+get this:
+
+\startbuffer[setup]
+\setupmathstackers
+ [voffset=\zeropoint,
+ hoffset=\zeropoint,
+ minheight=\exheight,
+ mindepth=\zeropoint,
+ minwidth=\zeropoint]
+\stopbuffer
+
+\blank \start \getbuffer[setup,demo] \stop \blank
+
+The setup looks like this:
+
+\typebuffer[setup]
+
+and gives a pretty tight rendering. The default values are:
+
+\starttyping
+\setupmathstackers
+ [voffset=.25\exheight,
+ hoffset=.5\emwidth,
+ minheight=\exheight,
+ mindepth=\zeropoint,
+ minwidth=\emwidth]
+\stoptyping
+
+\startbuffer[setup]
+\setupmathstackers
+ [voffset=2\exheight,
+ hoffset=\emwidth,
+ minheight=\exheight,
+ mindepth=\zeropoint,
+ minwidth=\zeropoint]
+\stopbuffer
+
+When we set \type {voffset} to twice the ex|-|height and \type {hoffset} to
+the em|-|width we get:
+
+\blank \start \getbuffer[setup,demo] \stop \blank
+
+We can enforce a (consistent) height and depth of the extensible by setting the
+minimum values:
+
+\startbuffer[setup]
+\setupmathstackers
+ [voffset=\zeropoint,
+ hoffset=\zeropoint,
+ minheight=5\exheight,
+ mindepth=3\exheight,
+ minwidth=6\emwidth]
+\stopbuffer
+
+\typebuffer
+
+\blank \start \getbuffer[setup,demo] \stop \blank
+
+\stopsection
+
+\startsection[title=A neat feature]
+
+A more obscure feature relates to the visual appearance. When we put something
+on top of for instance an arrow, it sometimes looks better when we only consider
+the middle part. Watch the following:
+
+\startbuffer[setup]
+\setupmathstackers
+ [voffset=\zeropoint,
+ hoffset=\zeropoint,
+ minheight=\zeropoint,
+ mindepth=\zeropoint,
+ minwidth=\zeropoint]
+\stopbuffer
+
+\startbuffer[demo]
+\ruledhbox \bgroup \quad
+ \setupmathstackers[offset=normal]%
+ \textstacker{"21C4}{top}{bottom}\quad
+ \setupmathstackers[offset=min]%
+ \textstacker{"21C4}{top}{bottom}\quad
+ \setupmathstackers[offset=max]%
+ \textstacker{"21C4}{top}{bottom}\quad
+\egroup
+\stopbuffer
+
+\typebuffer[demo]
+
+The \type {min} and \type {max} values will add extra offsets that relate to the
+width of the edge snippets.
+
+\blank \start \getbuffer[setup,demo] \stop \blank
+
+In this case both have the same result but the difference becomes clear when we
+set the \type {hoffset} to the em|-|width. In the case of \type {min} we don't
+add some extra space if the \type {hoffset} is applied.
+
+\startbuffer[setup]
+\setupmathstackers
+ [voffset=\zeropoint,
+ hoffset=\emwidth,
+ minheight=\zeropoint,
+ mindepth=\zeropoint,
+ minwidth=\zeropoint]
+\stopbuffer
+
+\startbuffer[demo]
+\ruledhbox \bgroup \quad
+ \setupmathstackers[offset=normal]%
+ \textstacker{"21C4}{top}{bottom}\quad
+ \setupmathstackers[offset=min]%
+ \textstacker{"21C4}{top}{bottom}\quad
+ \setupmathstackers[offset=max]%
+ \textstacker{"21C4}{top}{bottom}\quad
+\egroup
+\stopbuffer
+
+\typebuffer[demo]
+
+Of course in this example we have a symmetrical correction.
+
+\blank \start \getbuffer[setup,demo] \stop \blank
+
+A one sided arrow behaves different:
+
+\startbuffer[demo]
+\ruledhbox \bgroup \quad
+ \setupmathstackers[offset=normal]%
+ \textstacker{"2192}{top}{bottom}\quad
+ \setupmathstackers[offset=min]%
+ \textstacker{"2192}{top}{bottom}\quad
+ \setupmathstackers[offset=max]%
+ \textstacker{"2192}{top}{bottom}\quad
+\egroup
+\stopbuffer
+
+\blank \start \getbuffer[setup,demo] \stop \blank
+
+\stopsection
+
+\startsection[title=The user interface]
+
+It all starts out with categories. We have a couple of predefined categories in
+the core. The \type {mathematics} category typesets the top and bottom texts in
+mathmode, while the \type {text} category doesn't. The \type {reverse} category
+swaps its arguments. There are \type {upper} and \type {under} categories too.
+
+As with most \CONTEXT\ mechanisms inheritance is part of the picture:
+
+\starttyping
+\definemathextensibles [mine] [big] [offset=min]
+\stoptyping
+
+You can change settings with:
+
+\starttyping
+\setupmathstackers [mine] [big] [voffset=\exheight]
+\stoptyping
+
+For downward compatibility we also provide these:
+
+\starttyping
+\definemathextensibles [normal] [hoffset=0.5\emwidth]
+\definemathextensibles [none] [hoffset=\zeropoint]
+\definemathextensibles [small] [hoffset=1\emwidth]
+\definemathextensibles [medium] [hoffset=1.5\emwidth]
+\definemathextensibles [big] [hoffset=2\emwidth]
+\stoptyping
+
+They inherit from \type {mathematics} so choosing this also forces the top and
+bottomtexts to be typeset in math mode.
+
+These commands don't define extensibles, they only provide a way to categorize
+them. There are couple of definers and one reason for that is that we want to
+define downward compatible commands.
+
+\starttyping
+\definemathextensible [reverse] [xleftarrow] ["2190]
+\definemathextensible [reverse] [xrightarrow] ["2192]
+\stoptyping
+
+The \type {x} in the name is sort of standard for an extensible symbol with
+optionally some text on top or below. The reverse forced compatible behaviour.
+
+\startbuffer
+\xrightarrow{stuff below} {stuff on top} \quad
+\xrightarrow{stuff on top} \quad
+\xrightarrow{} {stuff on top} \quad
+\xrightarrow{stuff below} {} \quad
+\xrightarrow{} {} \quad
+\xrightarrow \quad
+\stopbuffer
+
+\typebuffer \getbuffer
+
+New in \MKIV\ is the \type {t} variant that typesets the text as (indeed) text.
+In addition we have a normal|-|order \type {m} variant:
+
+\starttyping
+\definemathextensible [text] [tleftarrow] ["2190]
+\definemathextensible [text] [trightarrow] ["2192]
+
+\definemathextensible [mathematics] [mleftarrow] ["2190]
+\definemathextensible [mathematics] [mrightarrow] ["2192]
+\stoptyping
+
+This time the order is always top first and bottom next:
+
+\startbuffer
+\trightarrow{stuff on top} {stuff below} \quad
+\trightarrow{stuff on top} {} \quad
+\trightarrow{stuff on top} \quad
+\trightarrow{} {stuff below} \quad
+\trightarrow \quad
+\stopbuffer
+
+\typebuffer
+
+So we get:
+
+\getbuffer
+
+As you can see, there is an optional first argument that specifies the category
+that applies. This permits you to define extra commands that have their own
+(spacing) properties.
+
+Earlier on we saw that defined commands can be forced into a category:
+
+\startbuffer
+\trightarrow[big] {stuff on top} {stuff below} \quad
+\trightarrow[medium]{stuff on top} {stuff below} \quad
+\trightarrow[small] {stuff on top} {stuff below}
+\stopbuffer
+
+\typebuffer
+
+Here we get:
+
+\getbuffer
+
+A variation on this kind of extensibles are over- and underarrows. This time the
+text is the nucleus.
+
+\starttyping
+\definemathoverextensible [top] [overleftarrow] ["2190]
+\definemathoverextensible [top] [overrightarrow] ["2192]
+
+\definemathunderextensible [bottom] [underleftarrow] ["2190]
+\definemathunderextensible [bottom] [underrightarrow] ["2192]
+\stoptyping
+
+In action this looks like:
+
+\startbuffer
+\ruledhbox \bgroup $ \quad
+ \overleftarrow {a} \quad \overleftarrow {ABC} $ \quad
+ x_{\overleftarrow {a}} \quad x_{\overleftarrow {ABC}} $ \quad
+ \underleftarrow{a} \quad \underleftarrow{ABC} $ \quad
+ x_{\underleftarrow{a}} \quad x_{\underleftarrow{ABC}} $ \quad
+$ \egroup
+\stopbuffer
+
+\typebuffer
+
+Here we also have tracing enabled, and we also show the bounding box:
+
+\blank \getbuffer \blank
+
+This leaves us one command: the one that defines the basic filler:
+
+\starttyping
+\definemathextensiblefiller [leftarrowfill] ["2190]
+\definemathextensiblefiller [rightarrowfill] ["2192]
+\stoptyping
+
+Commands defined like this will stretch themselves to fit the circumstances,
+and normally they will fill op the available space.
+
+\startbuffer
+\hbox to 4cm {from here \leftarrowfill\ to there}
+\hbox to 8cm {from there \rightarrowfill\ to here}
+\stopbuffer
+
+\typebuffer
+
+These commands (like the others) work in text mode as well as in math mode.
+
+\blank \getbuffer \blank
+
+\stopsection
+
+\startsection[title=Special cases]
+
+One of the reasons why the arrows mechanism has always been somewhat
+configureable is that we need arrows in the chemistry code.
+
+\starttyping
+\definemathextensibles
+ [chemistry]
+ [offset=max,
+ left=\enspace,
+ right=\enspace,
+ hoffset=.5\emwidth]
+
+\definemathextensible [chemistry] [cleftarrow] ["2190]
+\definemathextensible [chemistry] [crightarrow] ["2192]
+\definemathextensible [chemistry] [crightoverleftarrow] ["21C4]
+\stoptyping
+
+\startbuffer
+2H + O \crightarrow{explosive}\ H\low{2}O
+\stopbuffer
+
+\typebuffer
+
+Of course normally such code is wrapped into the chemistry enviroments and
+support macros.
+
+\blank \getbuffer \blank
+
+If you want something else than an extensible you can use definitions like the
+following:
+
+\startbuffer
+\definemathtriplet [tripleta]
+\definemathtriplet [text] [tripletb]
+\definemathtriplet [text] [tripletc] [\otimes]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer
+\tripleta{\ominus}{top}{botom} and
+\tripletb{\oplus} {top}{botom} and
+\tripletc {top}{botom}
+\stopbuffer
+
+\typebuffer
+
+\blank \hbox{\getbuffer} \blank
+
+As optional first argument you can pass a category.
+
+\startbuffer
+\tripleta[mathematics]{\ominus}{top}{botom} and
+\tripletb[mathematics]{\oplus}{top}{botom} and
+\tripletc[mathematics]{top}{botom}
+\stopbuffer
+
+\typebuffer
+
+Which gives:
+
+\blank \hbox{\getbuffer} \blank
+
+Instead of \type {mathematics} you could have given its synonym \type {math}.
+Keep in mind that categories are shared among stackers. There is also a direct
+command:
+
+\starttyping
+before \mathtriplet{\otimes}{top}{botom} after
+\stoptyping
+
+\stopsection
+
+\startsection[title=An overview]
+
+We end with showing a list of extensibles that come with the font used here, the
+\TEX Gyre Pagella. First we load a module:
+
+\startbuffer
+\usemodule[s][math-extensibles]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+This module provides a couple of commands that typesets a table with the
+extensibles as known in \CONTEXT. Beware: not all fonts have all those
+characters.
+
+\startbuffer
+\showmathextensibles[alternative=a]
+\stopbuffer
+
+A second command is:
+
+\typebuffer
+
+This commands shows the base glyph, and the stretched variant with text on top
+and below. When no symbol is found in the font a rule is rendered.
+
+\getbuffer
+
+\startbuffer
+\showmathextensibles[alternative=b]
+\stopbuffer
+
+\typebuffer
+
+This command typesets a list with \UNICODE\ entries and defined commands. There
+are empty entries due to lack of glyphs in the used font. Not all characters have
+an associated command. Some have multiple commands with different math classes.
+
+\getbuffer
+
+\stopsection
+
+\startsection[title=Remark]
+
+The number of extensions to the \LUATEX\ core math engine is not that large and
+mostly involves more control over spacing and support for \UNICODE\ math as
+\OPENTYPE\ math extensibles. However, a few years after writing this chapter the
+machinery was cleaned up a bit and in the process some more control was added to
+constructors for radicals, fractions and delimiters. The spacing and composition
+can be controlled in a bit more detail using keywords (and dimensions). Because
+in \CONTEXT\ we already have mechanisms in place not much of that new
+functionality is used (yet). Also, in the meantime \CONTEXT\ evolved further.
+This chapter is just a snapshot and it might even render a bit different in more
+recent versions of \CONTEXT\ and|/|or \LUATEX. After all, it was written as part
+of the development story.
+
+\stopsection
+
+\stopchapter
+
+\disabletrackers[math.extensibles.texts]
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/about/about-mathstyles.tex b/doc/context/sources/general/manuals/about/about-mathstyles.tex
new file mode 100644
index 000000000..205e98561
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/about-mathstyles.tex
@@ -0,0 +1,457 @@
+% language=uk
+
+\startcomponent about-speed
+
+\environment about-environment
+
+\startchapter[title=Math Styles]
+
+\startsection[title=Introduction]
+
+Because \CONTEXT\ is often considered somewhat less math savvy than for instance
+\LATEX\ we have more freedom to experiment with new insights and move forward. Of
+course \CONTEXT\ always could deal with math, and even provides rather advanced
+support when it comes to combining fonts, which at some point was needed for a
+magazine that used two completely different sets of fonts in one issue. Also,
+many of the mechanisms had ways to influence the rendering, but often by means of
+constants and flags.
+
+Already in an early stage of \LUATEX\ we went \UNICODE\ and after that the low
+level code has been cleaned up stepwise. In fact, we probably have less code now
+than before because we need less hacks. Well, this might not be that true, if we
+consider that we also introduced code at the \LUA\ end which wasn't there before,
+but which makes makes support easier.
+
+Because we don't need to support all kind of third party math extensions that
+themselves might depend on overloading low level implementations, we can
+rigourously replace mechanisms. In the process we also make things easier to
+configure, easier to define and we promote some previously low level tuning
+options at the user level.
+
+Or course, by introducing new features and more options, there is a price to pay
+in terms of speed, but in practice users will seldom use the more complex
+constructs thousands of times in one document. Elsewhere arrows and alike were
+discussed, here I will spend some words on math styles and will use fences and
+fractions as an example as these mechanisms were used to experiment.
+
+\stopsection
+
+\startsection[title=Math styles]
+
+In \TEX\ a formula can used three different sizes of a font: text, script and
+scriptscript. In addition a formula can be typeset using rules for display math
+or rules for inline math. This means that we have the following so called math
+styles:
+
+\starttabulate[||||]
+% \FL
+\NC \bf keyword \NC \bf meaning \NC \bf command \NC \NR
+% \FL
+\NC \type{display} \NC used for display math \NC \type {\displaystyle} \NC \NR
+\NC \type{text} \NC used for inline math \NC \type {\textstyle} \NC \NR
+\NC \type{script} \NC smaller than text style \NC \type {\scriptstyle} \NC \NR
+\NC \type{scriptscript} \NC smaller than script style \NC \type {\scriptscriptstyle} \NC \NR
+% \LL
+\stoptabulate
+
+Each of these commands will force a style but in practice you seldom need to do
+that because \TEX\ does it automatically. In addition there is are cramped styles
+with corresponding commands.
+
+\starttabulate
+ \NC \ruledhbox{$\displaystyle x^2 + \sqrt{x^2+2x} + \sqrt{\displaystyle x^2+2x}$} \NC \type{\displaystyle } \NC \NR
+ \NC \ruledhbox{$\crampeddisplaystyle x^2 + \sqrt{x^2+2x} + \sqrt{\crampeddisplaystyle x^2+2x}$} \NC \type{\crampeddisplaystyle } \NC \NR
+ \NC \ruledhbox{$\textstyle x^2 + \sqrt{x^2+2x} + \sqrt{\textstyle x^2+2x}$} \NC \type{\textstyle } \NC \NR
+ \NC \ruledhbox{$\crampedtextstyle x^2 + \sqrt{x^2+2x} + \sqrt{\crampedtextstyle x^2+2x}$} \NC \type{\crampedtextstyle } \NC \NR
+ \NC \ruledhbox{$\scriptstyle x^2 + \sqrt{x^2+2x} + \sqrt{\scriptstyle x^2+2x}$} \NC \type{\scriptstyle } \NC \NR
+ \NC \ruledhbox{$\crampedscriptstyle x^2 + \sqrt{x^2+2x} + \sqrt{\crampedscriptstyle x^2+2x}$} \NC \type{\crampedscriptstyle } \NC \NR
+ \NC \ruledhbox{$\scriptscriptstyle x^2 + \sqrt{x^2+2x} + \sqrt{\scriptscriptstyle x^2+2x}$} \NC \type{\scriptscriptstyle } \NC \NR
+ \NC \ruledhbox{$\crampedscriptscriptstyle x^2 + \sqrt{x^2+2x} + \sqrt{\crampedscriptscriptstyle x^2+2x}$} \NC \type{\crampedscriptscriptstyle} \NC \NR
+\stoptabulate
+
+Here we applied the styles as follows:
+
+\startbuffer
+$\textstyle x^2 + \sqrt{x^2+2x} + \sqrt{\textstyle x^2+2x}$
+\stopbuffer
+
+\typebuffer
+
+The differences are subtle: the superscripts in the square root are positioned a
+bit lower than normal: the radical forces them to be cramped.
+
+\startlinecorrection
+\scale[width=\hsize]{\maincolor \getbuffer}
+\stoplinecorrection
+
+Although the average user will not bother about styles, a math power user might
+get excited about the possibility to control the size of fonts being used, of
+course wit the danger of creating a visually inconsistent document. And, as in
+\CONTEXT\ we try to avoid such low level commands \footnote {Although \unknown\
+it's pretty hard to convince users to stay away from \type {\vskip} and friends.}
+it will be no surprise that we have ways to set them beforehand.
+
+\startbuffer
+\definemathstyle[mystyle][scriptscript]
+
+$ 2x + \startmathstyle [mystyle] 4y^2 \stopmathstyle = 10 $
+\stopbuffer
+
+\typebuffer
+
+So, if you want it this ugly, you can get it:
+
+\blank \start \getbuffer \stop \blank
+
+A style can be a combination of keywords. Of course we have \type {display},
+\type {text}, \type {script} and \type {scriptscript}. Then there are \type
+{uncramped} and \type {cramped} along with their synonyms \type {normal} and
+\type {packed}. In some cases you can also use \type {small} and \type {big}
+which will promote the size up or down, relative to what we have currently.
+
+A style definition can be combination of such keywords:
+
+\starttyping
+\definemathstyle[mystyle][scriptscript,cramped]
+\stoptyping
+
+Gradually we will introduce the \type {mathstyle} keyword in math related
+setups commands.
+
+In most cases a user will limit the scope of some setting by using braces, like
+this:
+
+\startbuffer
+$x{\setupmathstyle[script]x}x$
+\stopbuffer
+
+This gives {\maincolor \ignorespaces \getbuffer \removeunwantedspaces}: a smaller
+symbol between two with text size. Equally valid is this:
+
+\startbuffer
+$x\startmathstyle[script]x\stopmathstyle x$
+\stopbuffer
+
+\typebuffer
+
+Again we get {\maincolor \ignorespaces \getbuffer \removeunwantedspaces}, but at
+the cost of more verbose coding.
+
+The use of \type {{}} (either or not hidden in commands) has a few side effects.
+In text mode, when we use this at the start of a paragraph, the paragraph will
+start inside the group and when we end the group, specific settings that were
+done at that time get lost. So, in practice you will force a paragraph outside
+the group using \type {\dontleavehmode}, \type {\strut}, or one of the
+indentation commands. \stopitem
+
+In math mode a new math group is created which limits local style settings to
+this group. But as such groups also can trigger special kinds of spacing you
+sometimes don't want that. One pitfall is then to do this:
+
+\startbuffer
+$x\begingroup\setupmathstyle[script]x\endgroup x$
+\stopbuffer
+
+\typebuffer
+
+Alas, now we get {\maincolor \ignorespaces \getbuffer \removeunwantedspaces}. A
+\type {\begingroup} limits the scope of many things but it will not create a math
+group! This kind of subtle issues is the reason why we have pre|-|built solutions
+that take care of style switching, grouping, spacing and positioning.
+
+\stopsection
+
+\startsection[title=Fences]
+
+Fences are symbols at the left and right of an expression: braces, brackets,
+curly braces, and bars are the most well known. Often they are supposed to adapt
+their size to the content that they wrap. Here you see some in action:
+
+\starttabulate[||c||]
+\NC \type {$|x|$} \NC $|x|$ \NC okay \NC \NR
+\NC \type {$||x||$} \NC $||x||$ \NC okay \NC \NR
+\NC \type {$a\left | \frac{1}{b}\right | c$} \NC $a\left | \frac{1}{b}\right | c$ \NC okay \NC \NR
+\NC \type {$a\left ||\frac{1}{b}\right ||c$} \NC $a\left || \frac{1}{b}\right ||c$ \NC wrong \NC \NR
+\NC \type {$a\left ‖ \frac{1}{b}\right ‖ c$} \NC $a\left ‖ \frac{1}{b}\right ‖ c$ \NC okay \NC \NR
+\stoptabulate
+
+Often authors like to code their math with minimal structure and if you use
+\UNICODE\ characters that is actually quite doable. Just look at the double bar
+in the example above: if we input \type {||} we don't get what we want, but with
+\type {‖} the result is okay. This is because the \type {\left} and \type
+{\right} commands expect one character. But, even then, coding a bit more
+verbose sometimes makes sense.
+
+In stock \CONTEXT\ we have a couple of predefined fences:
+
+\starttyping
+\definemathfence [parenthesis] [left=0x0028,right=0x0029]
+\definemathfence [bracket] [left=0x005B,right=0x005D]
+\definemathfence [braces] [left=0x007B,right=0x007D]
+\definemathfence [bar] [left=0x007C,right=0x007C]
+\definemathfence [doublebar] [left=0x2016,right=0x2016]
+\definemathfence [angle] [left=0x003C,right=0x003E]
+\stoptyping
+
+\startbuffer
+test $a \fenced[bar] {\frac{1}{b}} c$ test
+test $a \fenced[doublebar]{\frac{1}{b}} c$ test
+test $a \fenced[bracket] {\frac{1}{b}} c$ test
+\stopbuffer
+
+You use these by name:
+
+\typebuffer
+
+and get
+
+\startlines \getbuffer \stoplines
+
+\startbuffer
+\definemathfence [nooffence] [left=0x005B]
+\stopbuffer
+
+You can stick to only one fence:
+
+\typebuffer \getbuffer
+
+\startbuffer
+on $a \fenced[nooffence]{\frac{1}{b}} c$ off
+\stopbuffer
+
+Here \CONTEXT\ will take care of the dummy fence that \TEX\ expects instead.
+
+\startlines \getbuffer \stoplines
+
+You can define new fences and clone existing ones. You can also assign some
+properties:
+
+\startbuffer
+\definemathfence
+ [fancybracket]
+ [bracket]
+ [command=yes,
+ color=blue]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer
+test $a\fancybracket{\frac{1}{b}}c$ test
+test \color[red]{$a\fancybracket{\frac{1}{b}}c$} test
+\stopbuffer
+
+\typebuffer
+
+The color is only applied to the fence. This makes sense as the formula can
+follow the main color but influencing the fences is technically somewhat more
+complex.
+
+\getbuffer
+
+Here are some more examples:
+
+\startbuffer
+\definemathfence
+ [normalbracket]
+ [bracket]
+ [command=yes,
+ color=blue]
+
+\definemathfence
+ [scriptbracket]
+ [normalbracket]
+ [mathstyle=script]
+
+\definemathfence
+ [smallbracket]
+ [normalbracket]
+ [mathstyle=small]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\starttabulate
+\NC \type{$a \frac{1}{b} c$} \NC $a \frac{1}{b} c$ \NC \NR
+\TB
+\NC \type{$a \normalbracket{\frac{1}{b} c$}} \NC $a \normalbracket{\frac{1}{b}} c$ \NC \NR
+\TB
+\NC \type{$a \scriptbracket{\frac{1}{b} c$}} \NC $a \scriptbracket{\frac{1}{b}} c$ \NC \NR
+\TB
+\NC \type{$a \smallbracket {\frac{1}{b} c$}} \NC $a \smallbracket {\frac{1}{b}} c$ \NC \NR
+\stoptabulate
+
+As with most commands, the fences inherit from the parents so we can say:
+
+\starttyping
+\setupmathfences [color=red]
+\stoptyping
+
+and get all our fences colored red. The \type {command} option results in a
+command being defined, which saves you some keying.
+
+\stopsection
+
+\startsection[title=Fractions]
+
+In \TEX\ the mechanism to put something on top of something else, separated by a
+horizontal rule, is driven by the \type {\over} primitive. That one has a
+(compared to other commands) somewhat different specification, in the sense that
+one of its arguments sits in front:
+
+\starttyping
+$ {{2x}\over{x^1}} $
+\stoptyping
+
+Although to some extend this is considered to be more readable, macro packages
+often provide a \type {\frac} commands that goes like this:
+
+\starttyping
+$ \frac{2x}{x^1} $
+\stoptyping
+
+There we have less braces and the arguments come after the command. As with the
+fences in the previous section, you can define your own fractions:
+
+\startbuffer
+\definemathfraction
+ [innerfrac]
+ [frac]
+ [alternative=inner,
+ mathstyle=script,
+ color=red]
+
+\definemathfraction
+ [outerfrac]
+ [frac]
+ [alternative=outer,
+ mathstyle=script,
+ color=blue]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+The mathstyle and color are already discussed but the \type {alternative} is
+specific for these fractions. It determines if the style is applied to the whole
+fraction or to its components.
+
+\startbuffer
+\startformula
+\outerfrac{2a}{3b} = \innerfrac{2a}{3b} = \frac{2a}{3b}
+\stopformula
+\stopbuffer
+
+\typebuffer
+
+As with fences, the color is only applied to the horizontal bar as there is no
+other easy way to color that otherwise.
+
+\getbuffer
+
+As \TEX\ has a couple of low level stackers, we provide an interface to that as
+well, but we hide the dirty details. For instance you can define left and right
+fences and influence the rule
+
+\startbuffer
+\definemathfraction[fraca][rule=no,left=0x005B,right=0x007C]
+\definemathfraction[fracb][rule=yes,left=0x007B,right=0x007D]
+\definemathfraction[fracc][rule=auto,left=0x007C]
+\definemathfraction[fracd][rule=yes,rulethickness=2pt,left=0x007C]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+When \type {rule} is set to \type {auto}, we use \TEX's values (derived from font
+metrics) for the thickness of rules, while \type {yes} triggers usage of the
+specified \type {rulethickness}.
+
+\startbuffer
+\startformula
+\fraca{a}{b} + \fracb{a}{b} + \fracc{a}{b} + \fracd{a}{b}
+\stopformula
+\stopbuffer
+
+\typebuffer
+
+Gives:
+
+\getbuffer
+
+\startbuffer
+\definemathfraction
+ [frace]
+ [rule=yes,
+ color=blue,
+ rulethickness=1pt,
+ left=0x005B,
+ right=0x007C]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+This fraction looks as follows (scaled up):
+
+\startlinecorrection
+\midaligned{\scale[height=5ex]{$\displaystyle\frace{a}{b}$}}
+\stoplinecorrection
+
+So, the color is applied to the (optional) fences as well as to the (optional)
+rule. And when you color the whole formula as part of the context, you get
+
+\startlinecorrection
+\midaligned{\scale[height=5ex]{\color[maincolor]{$\displaystyle\frace{a}{b}$}}}
+\stoplinecorrection
+
+There is a (maybe not so) subtle difference between fences that come with
+fractions and regular fences, Take these definitions:
+
+\startbuffer
+\definemathfence [parenta] [left=0x28,right=0x29,command=yes]
+\definemathfraction [parentb] [left=0x28,right=0x29,rule=auto]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Of course the \type {b} variant takes less code:
+
+\startbuffer
+\startformula
+\parenta{\frac{a}{b}} + \parentb{a}{b}
+\stopformula
+\stopbuffer
+
+\typebuffer
+
+But watch how the parentheses are also larger. At some point \CONTEXT\ will
+provide a bit more control over this,
+
+\getbuffer
+
+You can also influence the width of the rule, but that is not related to the
+style.
+
+\startbuffer
+\definemathfraction
+ [wfrac]
+ [margin=.25em]
+
+\definemathfraction
+ [wwfrac]
+ [margin=.50em]
+
+\startformula
+ \frac { a } { \frac { b } { c } } +
+ \wfrac { a } { \frac { b } { c } } =
+ \wwfrac { 2a } { \frac { 2b } { 2c } }
+\stopformula
+\stopbuffer
+
+\typebuffer
+
+Both the nominator and denominator are widened by the margin:
+
+\getbuffer
+
+\stopsection
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/about/about-metafun.tex b/doc/context/sources/general/manuals/about/about-metafun.tex
new file mode 100644
index 000000000..8daff05a7
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/about-metafun.tex
@@ -0,0 +1,834 @@
+% language=uk
+
+\startcomponent about-metafun
+
+\environment about-environment
+
+\startchapter[title={\LUA\ in \METAPOST}]
+
+% Hans Hagen, PRAGMA ADE, April 2014
+
+\startsection[title=Introduction]
+
+Already for some years I have been wondering how it would be if we could escape
+to \LUA\ inside \METAPOST, or in practice, in \MPLIB\ in \LUATEX. The idea is
+simple: embed \LUA\ code in a \METAPOST\ file that gets run as soon as it's seen.
+In case you wonder why \LUA\ code makes sense, imagine generating graphics using
+external data. The capabilities of \LUA\ to deal with that is more flexible and
+advanced than in \METAPOST. Of course we could generate a \METAPOST\ definition
+of a graphic from data but it often makes more sense to do the reverse. I finally
+found time and reason to look into this and in the following sections I will
+describe how it's done.
+
+\stopsection
+
+\startsection[title=The basics]
+
+The approach is comparable to \LUATEX's \type {\directlua}. That primitive can be
+used to execute \LUA\ code and in combination with \type {tex.print} we can pipe
+strings back into the \TEX\ input stream. A complication is that we have to be
+able to operate under different so called catcode regimes: the meaning of
+characters can differ per regime. We also have to deal with line endings in
+special ways as they relate to paragraphs and such. In \METAPOST\ we don't have
+that complication so getting back input into the \METAPOST\ input, we can do so
+with simple strings. For that a mechanism similar to \type {scantokens} can be
+used. That way we can return anything (including nothing) as long as \METAPOST\
+can interpret it and as long as it fulfils the expectations.
+
+\starttyping
+numeric n ; n := scantokens("123.456") ;
+\stoptyping
+
+A script is run as follows:
+
+\starttyping
+numeric n ; n := runscript("return '123.456'") ;
+\stoptyping
+
+This primitive doesn't have the word \type {lua} in its name so in principle any
+wrapper around the library can use it as a hook. In the case of \LUATEX\ the
+script language is of course \LUA. At the \METAPOST\ end we only expect a string.
+How that string is constructed is completely up to the \LUA\ script. In fact, the
+user is completely free to implement the runner any way she or he wants, like:
+
+\starttyping
+local function scriptrunner(code)
+ local f = loadstring(code)
+ if f then
+ return tostring(f())
+ else
+ return ""
+ end
+end
+\stoptyping
+
+This is hooked into an instance as follows:
+
+\starttyping
+local m = mplib.new {
+ ...
+ run_script = scriptrunner,
+ ...
+}
+\stoptyping
+
+Now, beware, this is not the \CONTEXT\ way. We provide print functions and other
+helpers, which we will explain in the next section.
+
+\stopsection
+
+\startsection[title=Helpers]
+
+After I got this feature up and running I played a bit with possible interfaces
+at the \CONTEXT\ (read: \METAFUN) end and ended up with a bit more advanced runner
+where no return value is used. The runner is wrapped in the \type {lua} macro.
+
+\startbuffer
+numeric n ; n := lua("mp.print(12.34567)") ;
+draw textext(n) xsized 4cm withcolor maincolor ;
+\stopbuffer
+
+\typebuffer
+
+This renders as:
+
+\startlinecorrection[blank]
+\processMPbuffer
+\stoplinecorrection
+
+In case you wonder how efficient calling \LUA\ is, don't worry: it's fast enough,
+especially if you consider suboptimal \LUA\ code and the fact that we switch
+between machineries.
+
+\startbuffer
+draw image (
+ lua("statistics.starttiming()") ;
+ for i=1 upto 10000 : draw
+ lua("mp.pair(math.random(-200,200),math.random(-50,50))") ;
+ endfor ;
+ setbounds currentpicture to fullsquare xyscaled (400,100) ;
+ lua("statistics.stoptiming()") ;
+ draw textext(lua("mp.print(statistics.elapsedtime())"))
+ ysized 50 ;
+) withcolor maincolor withpen pencircle scaled 1 ;
+\stopbuffer
+
+\typebuffer
+
+Here the line:
+
+\starttyping
+draw lua("mp.pair(math.random(-200,200),math.random(-50,50))") ;
+\stoptyping
+
+effectively becomes (for instance):
+
+\starttyping
+draw scantokens "(25,40)" ;
+\stoptyping
+
+which in turn becomes:
+
+\starttyping
+draw scantokens (25,40) ;
+\stoptyping
+
+The same happens with this:
+
+\starttyping
+draw textext(lua("mp.print(statistics.elapsedtime())")) ...
+\stoptyping
+
+This becomes for instance:
+
+\starttyping
+draw textext(scantokens "1.23") ...
+\stoptyping
+
+and therefore:
+
+\starttyping
+draw textext(1.23) ...
+\stoptyping
+
+We can use \type {mp.print} here because the \type {textext} macro can deal with
+numbers. The following also works:
+
+\starttyping
+draw textext(lua("mp.quoted(statistics.elapsedtime())")) ...
+\stoptyping
+
+Now we get (in \METAPOST\ speak):
+
+\starttyping
+draw textext(scantokens (ditto & "1.23" & ditto) ...
+\stoptyping
+
+Here \type {ditto} represents the double quotes that mark a string. Of course,
+because we pass the strings directly to \type {scantokens}, there are no outer
+quotes at all, but this is how it can be simulated. In the end we have:
+
+\starttyping
+draw textext("1.23") ...
+\stoptyping
+
+What print variant you use, \type {mp.print} or \type {mp.quoted}, depends on
+what the expected code is: an assignment to a numeric can best be a number or an
+expression resulting in a number.
+
+This graphic becomes:
+
+\startlinecorrection[blank]
+\processMPbuffer
+\stoplinecorrection
+
+The runtime on my current machine is some 0.25 seconds without and 0.12 seconds
+with caching. But to be honest, speed is not really a concern here as the amount
+of complex \METAPOST\ graphics can be neglected compared to extensive node list
+manipulation. Generating the graphic with \LUAJITTEX\ takes 15\% less time.
+\footnote {Processing a small 8 page document like this takes about one second,
+which includes loading a bunch of fonts.}
+
+\startbuffer
+numeric n ; n := lua("mp.print(1) mp.print('+') mp.print(2)") ;
+draw textext(n) xsized 1cm withcolor maincolor ;
+\stopbuffer
+
+The three print command accumulate their arguments:
+
+\typebuffer
+
+As expected we get:
+
+\startlinecorrection[blank]
+\processMPbuffer
+\stoplinecorrection
+
+\startbuffer
+numeric n ; n := lua("mp.print(1,'+',2)") ;
+draw textext(n) xsized 1cm withcolor maincolor ;
+\stopbuffer
+
+Equally valid is:
+
+\typebuffer
+
+This gives the same result:
+
+\startlinecorrection[blank]
+\processMPbuffer
+\stoplinecorrection
+
+Of course all kind of action can happen between the prints. It is also legal to
+have nothing returned as could be seen in the 10.000 dot example: there the timer
+related code returns nothing, so effectively we have \type {scantokens("")}.
+Another helper is \type {mp.quoted}, as in:
+
+\startbuffer
+draw
+ textext(lua("mp.quoted('@0.3f'," & decimal n & ")"))
+ withcolor maincolor ;
+\stopbuffer
+
+\typebuffer
+
+This typesets \processMPbuffer. Note the \type {@}. When no percent character is
+found in the format specifier, we assume that an \type {@} is used instead.
+
+\startbuffer
+\startluacode
+table.save("demo-data.lua",
+ {
+ { 1, 2 }, { 2, 4 }, { 3, 3 }, { 4, 2 },
+ { 5, 2 }, { 6, 3 }, { 7, 4 }, { 8, 1 },
+ }
+)
+\stopluacode
+\stopbuffer
+
+But, the real benefit of embedded \LUA\ is when we deal with data that is stored
+at the \LUA\ end. First we define a small dataset:
+
+\typebuffer
+
+\getbuffer
+
+There are several ways to deal with this table. I will show clumsy as well as
+better looking ways.
+
+\startbuffer
+lua("MP = { } MP.data = table.load('demo-data.lua')") ;
+numeric n ;
+lua("mp.print('n := ',\#MP.data)") ;
+for i=1 upto n :
+ drawdot
+ lua("mp.pair(MP.data[" & decimal i & "])") scaled cm
+ withpen pencircle scaled 2mm
+ withcolor maincolor ;
+endfor ;
+\stopbuffer
+
+\typebuffer
+
+Here we load a \LUA\ table and assign the size to a \METAPOST\ numeric. Next we
+loop over the table entries and draw the coordinates.
+
+\startlinecorrection[blank]
+\processMPbuffer
+\stoplinecorrection
+
+We will stepwise improve this code. In the previous examples we omitted wrapper
+code but here we show it:
+
+\startbuffer
+\startluacode
+ MP.data = table.load('demo-data.lua')
+ function MP.n()
+ mp.print(#MP.data)
+ end
+ function MP.dot(i)
+ mp.pair(MP.data[i])
+ end
+\stopluacode
+
+\startMPcode
+ numeric n ; n := lua("MP.n()") ;
+ for i=1 upto n :
+ drawdot
+ lua("MP.dot(" & decimal i & ")") scaled cm
+ withpen pencircle scaled 2mm
+ withcolor maincolor ;
+ endfor ;
+\stopMPcode
+\stopbuffer
+
+\typebuffer
+
+So, we create a few helpers in the \type {MP} table. This table is predefined so
+normally you don't need to define it. You may however decide to wipe it clean.
+
+\startlinecorrection[blank]
+\getbuffer
+\stoplinecorrection
+
+You can decide to hide the data:
+
+\startbuffer
+\startluacode
+ local data = { }
+ function MP.load(name)
+ data = table.load(name)
+ end
+ function MP.n()
+ mp.print(#data)
+ end
+ function MP.dot(i)
+ mp.pair(data[i])
+ end
+\stopluacode
+\stopbuffer
+
+\typebuffer \getbuffer
+
+It is possible to use less \LUA, for instance in:
+
+\startbuffer
+\startluacode
+ local data = { }
+ function MP.loaded(name)
+ data = table.load(name)
+ mp.print(#data)
+ end
+ function MP.dot(i)
+ mp.pair(data[i])
+ end
+\stopluacode
+
+\startMPcode
+ for i=1 upto lua("MP.loaded('demo-data.lua')") :
+ drawdot
+ lua("MP.dot(",i,")") scaled cm
+ withpen pencircle scaled 4mm
+ withcolor maincolor ;
+ endfor ;
+\stopMPcode
+\stopbuffer
+
+\typebuffer
+
+Here we also omit the \type {decimal} because the \type {lua} macro is clever
+enough to recognize it as a number.
+
+\startlinecorrection[blank]
+\getbuffer
+\stoplinecorrection
+
+By using some \METAPOST\ magic we can even go a step further in readability:
+
+\startbuffer
+\startMPcode{doublefun}
+ lua.MP.load("demo-data.lua") ;
+
+ for i=1 upto lua.MP.n() :
+ drawdot
+ lua.MP.dot(i) scaled cm
+ withpen pencircle scaled 4mm
+ withcolor maincolor ;
+ endfor ;
+
+ for i=1 upto MP.n() :
+ drawdot
+ MP.dot(i) scaled cm
+ withpen pencircle scaled 2mm
+ withcolor white ;
+ endfor ;
+\stopMPcode
+\stopbuffer
+
+\typebuffer
+
+Here we demonstrate that it also works well in \type {double} mode, which makes
+much sense when processing data from other sources. Note how we omit the
+type {lua.} prefix: the \type {MP} macro will deal with that.
+
+\startlinecorrection[blank]
+\getbuffer
+\stoplinecorrection
+
+So in the end we can simplify the code that we started with to:
+
+\starttyping
+\startMPcode{doublefun}
+ for i=1 upto MP.loaded("demo-data.lua") :
+ drawdot
+ MP.dot(i) scaled cm
+ withpen pencircle scaled 2mm
+ withcolor maincolor ;
+ endfor ;
+\stopMPcode
+\stoptyping
+
+\stopsection
+
+\startsection[title=Access to variables]
+
+The question with such mechanisms is always: how far should we go. Although
+\METAPOST\ is a macro language, it has properties of procedural languages. It also
+has more introspective features at the user end. For instance, one can loop over
+the resulting picture and manipulate it. This means that we don't need full
+access to \METAPOST\ internals. However, it makes sense to provide access to
+basic variables: \type {numeric}, \type {string}, and \type {boolean}.
+
+\startbuffer
+draw textext(lua("mp.quoted('@0.15f',mp.get.numeric('pi')-math.pi)"))
+ ysized 1cm
+ withcolor maincolor ;
+\stopbuffer
+
+\typebuffer
+
+In double mode you will get zero printed but in scaled mode we definitely get a
+different results:
+
+\startlinecorrection[blank]
+\processMPbuffer
+\stoplinecorrection
+
+\startbuffer
+boolean b ; b := true ;
+draw textext(lua("mp.quoted(mp.get.boolean('b') and 'yes' or 'no')"))
+ ysized 1cm
+ withcolor maincolor ;
+\stopbuffer
+
+In the next example we use \type {mp.quoted} to make sure that indeed we pass a
+string. The \type {textext} macro can deal with numbers, but an unquoted \type
+{yes} or \type {no} is asking for problems.
+
+\typebuffer
+
+Especially when more text is involved it makes sense to predefine a helper in
+the \type {MP} namespace, if only because \METAPOST\ (currently) doesn't like
+newlines in the middle of a string, so a \type {lua} call has to be on one line.
+
+\startlinecorrection[blank]
+\processMPbuffer
+\stoplinecorrection
+
+Here is an example where \LUA\ does something that would be close to impossible,
+especially if more complex text is involved.
+
+% \enabletrackers[metapost.lua]
+
+\startbuffer
+string s ; s := "ΤΕΧ" ; % "τεχ"
+draw textext(lua("mp.quoted(characters.lower(mp.get.string('s')))"))
+ ysized 1cm
+ withcolor maincolor ;
+\stopbuffer
+
+\typebuffer
+
+As you can see here, the whole repertoire of helper functions can be used in
+a \METAFUN\ definition.
+
+\startlinecorrection[blank]
+\processMPbuffer
+\stoplinecorrection
+
+\stopsection
+
+\startsection[title=The library]
+
+In \CONTEXT\ we have a dedicated runner, but for the record we mention the
+low level constructor:
+
+\starttyping
+local m = mplib.new {
+ ...
+ script_runner = function(s) return loadstring(s)() end,
+ script_error = function(s) print(s) end,
+ ...,
+}
+\stoptyping
+
+An instance (in this case \type {m}) has a few extra methods. Instead you can use
+the helpers in the library.
+
+\starttabulate[|l|l|]
+\HL
+\NC \type {m:get_numeric(name)} \NC returns a numeric (double) \NC \NR
+\NC \type {m:get_boolean(name)} \NC returns a boolean (\type {true} or \type {false}) \NC \NR
+\NC \type {m:get_string (name)} \NC returns a string \NC \NR
+\HL
+\NC \type {mplib.get_numeric(m,name)} \NC returns a numeric (double) \NC \NR
+\NC \type {mplib.get_boolean(m,name)} \NC returns a boolean (\type {true} or \type {false}) \NC \NR
+\NC \type {mplib.get_string (m,name)} \NC returns a string \NC \NR
+\HL
+\stoptabulate
+
+In \CONTEXT\ the instances are hidden and wrapped in high level macros, so there
+you cannot use these commands.
+
+\stopsection
+
+\startsection[title=\CONTEXT\ helpers]
+
+The \type {mp} namespace provides the following helpers:
+
+\starttabulate[|l|l|]
+\HL
+\NC \type {print(...)} \NC returns one or more values \NC \NR
+\NC \type {pair(x,y)}
+ \type {pair(t)} \NC returns a proper pair \NC \NR
+\NC \type {triplet(x,y,z)}
+ \type {triplet(t)} \NC returns an \RGB\ color \NC \NR
+\NC \type {quadruple(w,x,y,z)}
+ \type {quadruple(t)} \NC returns an \CMYK\ color \NC \NR
+\NC \type {format(fmt,...)} \NC returns a formatted string \NC \NR
+\NC \type {quoted(fmt,...)}
+ \type {quoted(s)} \NC returns a (formatted) quoted string \NC \NR
+\NC \type {path(t[,connect][,close])} \NC returns a connected (closed) path \NC \NR
+\HL
+\stoptabulate
+
+The \type {mp.get} namespace provides the following helpers:
+
+\starttabulate[|l|l|]
+\NC \type {numeric(name)} \NC gets a numeric from \METAPOST \NC \NR
+\NC \type {boolean(name)} \NC gets a boolean from \METAPOST \NC \NR
+\NC \type {string(name)} \NC gets a string from \METAPOST \NC \NR
+\HL
+\stoptabulate
+
+\stopsection
+
+\startsection[title=Paths]
+
+% {\em This section will move to the metafun manual.} \blank
+
+In the meantime we got several questions on the \CONTEXT\ mailing list about turning
+coordinates into paths. Now imagine that we have this dataset:
+
+\startbuffer[dataset]
+10 20 20 20 -- sample 1
+30 40 40 60
+50 10
+
+10 10 20 30 % sample 2
+30 50 40 50
+50 20
+
+10 20 20 10 # sample 3
+30 40 40 20
+50 10
+\stopbuffer
+
+\typebuffer[dataset]
+
+In this case I have put the data in a buffer, so that it can be shown
+here, as well as used in a demo. Look how we can add comments. The
+following code converts this into a table with three subtables.
+
+\startbuffer
+\startluacode
+ MP.myset = mp.dataset(buffers.getcontent("dataset"))
+\stopluacode
+\stopbuffer
+
+\typebuffer \getbuffer
+
+We use the \type {MP} (user) namespace to store the table. Next we turn
+these subtables into paths:
+
+\startbuffer
+\startMPcode
+ for i=1 upto lua("mp.print(mp.n(MP.myset))") :
+ draw
+ lua("mp.path(MP.myset[" & decimal i & "])")
+ xysized (HSize,10ExHeight)
+ withpen pencircle scaled .25ExHeight
+ withcolor basiccolors[i]/2 ;
+ endfor ;
+\stopMPcode
+\stopbuffer
+
+\typebuffer
+
+This gives:
+
+\startlinecorrection[blank] \getbuffer \stoplinecorrection
+
+Instead we can fill the path, in which case we will also need to close it. The
+\type {true} argument deals with that:
+
+\startbuffer
+\startMPcode
+ for i=1 upto lua("mp.print(mp.n(MP.myset))") :
+ path p ; p :=
+ lua("mp.path(MP.myset[" & decimal i & "],true)")
+ xysized (HSize,10ExHeight) ;
+ fill p
+ withcolor basiccolors[i]/2
+ withtransparency (1,.5) ;
+ endfor ;
+\stopMPcode
+\stopbuffer
+
+\typebuffer
+
+We get:
+
+\startlinecorrection[blank] \getbuffer \stoplinecorrection
+
+\startbuffer
+\startMPcode
+ for i=1 upto lua("mp.print(mp.n(MP.myset))") :
+ path p ; p :=
+ lua("mp.path(MP.myset[" & decimal i & "])")
+ xysized (HSize,10ExHeight) ;
+ p :=
+ (xpart llcorner boundingbox p,0) --
+ p --
+ (xpart lrcorner boundingbox p,0) --
+ cycle ;
+ fill p
+ withcolor basiccolors[i]/2
+ withtransparency (1,.25) ;
+ endfor ;
+\stopMPcode
+\stopbuffer
+
+The following makes more sense:
+
+\typebuffer
+
+So this gives:
+
+\startlinecorrection[blank] \getbuffer \stoplinecorrection
+
+This (area) fill is so common, that we have a helper for it:
+
+\startbuffer
+\startMPcode
+ for i=1 upto lua("mp.size(MP.myset)") :
+ fill area
+ lua("mp.path(MP.myset[" & decimal i & "])")
+ xysized (HSize,5ExHeight)
+ withcolor basiccolors[i]/2
+ withtransparency (2,.25) ;
+ endfor ;
+\stopMPcode
+\stopbuffer
+
+\typebuffer
+
+So this gives:
+
+\startlinecorrection[blank] \getbuffer \stoplinecorrection
+
+This snippet of \METAPOST\ code still looks kind of horrible, so how can we make
+it look better? Here is an attempt. First we define a bit more \LUA:
+
+\startbuffer
+\startluacode
+local data = mp.dataset(buffers.getcontent("dataset"))
+
+MP.dataset = {
+ Line = function(n) mp.path(data[n]) end,
+ Size = function() mp.size(data) end,
+}
+\stopluacode
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer
+\startMPcode
+ for i=1 upto lua.MP.dataset.Size() :
+ path p ; p :=
+ lua.MP.dataset.Line(i)
+ xysized (HSize,20ExHeight) ;
+ draw
+ p
+ withpen pencircle scaled .25ExHeight
+ withcolor basiccolors[i]/2 ;
+ drawpoints
+ p
+ withpen pencircle scaled ExHeight
+ withcolor .5white ;
+ endfor ;
+\stopMPcode
+\stopbuffer
+
+We can now make the \METAPOST\ look more natural. Of course, this is possible
+because in \METAFUN\ the \type {lua} macro does some extra work.
+
+\typebuffer
+
+As expected, we get the desired result:
+
+\startlinecorrection[blank] \getbuffer \stoplinecorrection
+
+Once we start making things look nicer and more convenient, we quickly end up
+with helpers like those in the next example. First we save some demo data in
+files:
+
+\startbuffer
+\startluacode
+ io.savedata("foo.tmp","10 20 20 20 30 40 40 60 50 10")
+ io.savedata("bar.tmp","10 10 20 30 30 50 40 50 50 20")
+\stopluacode
+\stopbuffer
+
+\typebuffer \getbuffer
+
+We load the data in datasets:
+
+\startbuffer
+\startMPcode
+ lua.mp.datasets.load("foo","foo.tmp") ;
+ lua.mp.datasets.load("bar","bar.tmp") ;
+ fill area
+ lua.mp.datasets.foo.Line()
+ xysized (HSize/2-EmWidth,10ExHeight)
+ withpen pencircle scaled .25ExHeight
+ withcolor green/2 ;
+ fill area
+ lua.mp.datasets.bar.Line()
+ xysized (HSize/2-EmWidth,10ExHeight)
+ shifted (HSize/2+EmWidth,0)
+ withpen pencircle scaled .25ExHeight
+ withcolor red/2 ;
+\stopMPcode
+\stopbuffer
+
+\typebuffer
+
+Because the datasets are stored by name, we can use them without worrying about
+them being forgotten:
+
+\startlinecorrection[blank] \getbuffer \stoplinecorrection
+
+If no tag is given, the filename (without suffix) is used as a tag, so the
+following is valid:
+
+\starttyping
+\startMPcode
+ lua.mp.datasets.load("foo.tmp") ;
+ lua.mp.datasets.load("bar.tmp") ;
+\stopMPcode
+\stoptyping
+
+The following methods are defined for a dataset:
+
+\starttabulate[|l|pl|]
+\HL
+\NC \type {method} \NC usage \NC \NR
+\HL
+\NC \type {Size} \NC the number of subsets in a dataset \NC \NR
+\NC \type {Line} \NC the joined pairs in a dataset making a non|-|closed path \NC \NR
+\NC \type {Data} \NC the table containing the data (in subsets, so there is always at least one subset) \NC \NR
+\HL
+\stoptabulate
+
+{\em Due to limitations in \METAPOST\ suffix handling the methods start with an
+uppercase character.}
+
+\stopsection
+
+\startsection[title=Remark]
+
+The features described here are currently still experimental but the interface
+will not change. There might be a few more accessors and for sure more \LUA\
+helpers will be provided. As usual I need some time to play with it before I make
+up my mind. It is also possible to optimize the \METAPOST||\LUA\ script call a
+bit, but I might do that later.
+
+When we played with this interface we ran into problems with loop variables
+and macro arguments. These are internally kind of anonymous. Take this:
+
+\starttyping
+for i=1 upto 100 : draw(i,i) endfor ;
+\stoptyping
+
+The \type {i} is not really a variable with name \type {i} but becomes an object
+(capsule) when the condition is scanned, and a reference to that object when the
+body is scanned. The body of the for loop gets expanded for each step, but at that
+time there is no longer a variable \type {i}. The same is true for variables in:
+
+\starttyping
+def foo(expr x, y, delta) = draw (x+delta,y+delta) enddef ;
+\stoptyping
+
+We are still trying to get this right with the \LUA\ interface. Interesting is
+that when we were exploring this, we ran into quite some cases where we could
+make \METAPOST\ abort due some memory or stack overflow. Some are just bugs in
+the new code (due to the new number model) while others come with the design of
+the system: border cases that never seem to happen in interactive use while the
+library use assumes no interaction in case of errors.
+
+In \CONTEXT\ there are more features and helpers than shown here but these are
+discussed in the \METAFUN\ manual.
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
+
+% \startMPcode{doublefun}
+% numeric n ; n := 123.456 ;
+% lua("print('>>>>>>>>>>>> number',mp.get.number('n'))") ;
+% lua("print('>>>>>>>>>>>> number',mp.get.boolean('n'))") ;
+% lua("print('>>>>>>>>>>>> number',mp.get.string('n'))") ;
+% boolean b ; b := true ;
+% lua("print('>>>>>>>>>>>> boolean',mp.get.number('b'))") ;
+% lua("print('>>>>>>>>>>>> boolean',mp.get.boolean('b'))") ;
+% lua("print('>>>>>>>>>>>> boolean',mp.get.string('b'))") ;
+% string s ; s := "TEST" ;
+% lua("print('>>>>>>>>>>>> string',mp.get.number('s'))") ;
+% lua("print('>>>>>>>>>>>> string',mp.get.boolean('s'))") ;
+% lua("print('>>>>>>>>>>>> string',mp.get.string('s'))") ;
+% \stopMPcode
+
diff --git a/doc/context/sources/general/manuals/about/about-mobility.tex b/doc/context/sources/general/manuals/about/about-mobility.tex
new file mode 100644
index 000000000..c844ea2f7
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/about-mobility.tex
@@ -0,0 +1,205 @@
+% language=uk
+
+\startcomponent about-mobility
+
+\environment about-environment
+
+\startchapter[title=Flash forward]
+
+\startsection[title=Introduction]
+
+At the 2013 \CONTEXT\ meeting in Breslov, Harald König has taken some of his
+gadgets with him and this time the target was to get \CONTEXT\ running on small
+devices, most noticeably a mobile phone. You may wonder what purpose this serves,
+but with such devices becoming more powerful each year, and desktops and laptops
+getting less popular, we might see the small devices taking their place.
+Especially when we can dock them in a cradle and connect them to a proper monitor
+and keyboard we might end up with universal devices. Combine that with projection
+on our retinas and less tactile input and it will be clear that we should at
+least look into this from the perspective of \TEX\ usage.
+
+\stopsection
+
+\startsection[title=The tests]
+
+We used five tests for measuring basic performance. Of course we made sure that
+binaries and resources were cached.
+
+Test 1 measures some basics, like typesetting a paragraph, flushing pages and
+loading a file. Because we do lots of pages we can also see if garbage collection
+is a problem.
+
+\typefile{pi-speed-1.tex}
+
+A normal \CONTEXT\ run is triggered with:
+
+\starttyping
+context speed-1
+\stoptyping
+
+but with
+
+\starttyping
+context --timing speed-1
+\stoptyping
+
+memory consumption is measured and one can generate a visual representation of
+this afterwards.
+
+\starttyping
+context --extra=timing speed-1
+\stoptyping
+
+We don't show them here, simply because we saw nothing exciting in the ones
+for these tests.
+
+The second test is rather stupid but it gives an indication of how efficient the
+base pagebuilder is:
+
+\typefile{pi-speed-2.tex}
+
+The numbers are normally 10 to 20 times more impressive than those for regular runs.
+
+Test three is a variation on test one but this time we avoid the file being read
+in many times, so we inline \type{ward.tex}. We also add no page breaks so we get
+less pages but with more content.
+
+\typefile{pi-speed-3.tex}
+
+The fourth test draws a few \METAPOST\ graphics, which themselves use a bit of
+typeset text.
+
+\typefile{pi-speed-4.tex}
+
+The last test, number five, is more demanding. Here we use some colors (which
+stresses the backend) and a dynamic switch to smallcaps, which puts a bit of a
+burden on the \OPENTYPE\ handler.
+
+\typefile{pi-speed-5.tex}
+
+\stopsection
+
+\startsection[title=Regular laptops]
+
+We started measuring on Haralds laptop, a Lenovo X201i, and got the following
+timings (that matched our expectations). The second column shows the runtime, the
+last column the pages per second.
+
+\starttabulate[|l|r|r|]
+\BC speed-1 \NC 5.8 \NC 17.1 \NC \NR
+\BC speed-2 \NC 3.6 \NC 275.6 \NC \NR
+\BC speed-3 \NC 5.1 \NC 19.8 \NC \NR
+\BC speed-4 \NC 0.6 \NC 1.8 \NC \NR
+\BC speed-5 \NC 11.9 \NC 10.6 \NC \NR
+\stoptabulate
+
+Just for comparison, as I'm wrapping this up in 2016, on my current Dell 7600 I
+get these timings (the last two columns are with \LUAJITTEX):
+
+\starttabulate[|l|r|r|r|r|]
+\BC speed-1 \NC 4.6 \NC 21.9 \NC 3.0 \NC 33.5 \NC \NR
+\BC speed-2 \NC 3.6 \NC 278.2 \NC 2.8 \NC 357.7 \NC \NR
+\BC speed-3 \NC 4.2 \NC 23.6 \NC 2,7 \NC 37.0 \NC \NR
+\BC speed-4 \NC 0.8 \NC 1.3 \NC 0.6 \NC 1.7 \NC \NR
+\BC speed-5 \NC 6.2 \NC 20.3 \NC 4.0 \NC 31.9 \NC \NR
+\stoptabulate
+
+These tests were run with a \LUATEX\ 0.98 and the most recent \CONTEXT\
+\OPENTYPE\ font processor. As we do more in \LUA\ that a few years back, one
+can't expect a much faster run, even when the Dell has a faster processor than
+the Lenovo. However, what gets noticed is that the fifth speed test runs about
+twice as fast which is mostly due to improvements in the handling of \OPENTYPE\
+features.
+
+\startsection[title=The Nexus IV]
+
+This mobile phone has a quad-core arm processor running at 1.5 GHz. With 2 Gb
+memory this should be sufficient for running \TEX. The operating system is
+Android, which means that some effort is needed to put \TEX\ with its resources
+on the internal flash disk. Access was remote from a laptop.
+
+\starttabulate[|l|r|r|]
+\BC speed-1 \NC 41.9 \NC 2.4 \NC \NR
+\BC speed-2 \NC 27.5 \NC 36.4 \NC \NR
+\BC speed-3 \NC 38.7 \NC 2.6 \NC \NR
+\BC speed-4 \NC 3.4 \NC 3.0 \NC \NR
+\BC speed-5 \NC 87.9 \NC 1.4 \NC \NR
+\stoptabulate
+
+So it looks like the phone runs these tests about five times slower than the
+laptop. The fifth test is most stressful on the hardware but as noted, a more
+recent \CONTEXT\ will give better times there due to improvements in feature
+processing.
+
+\stopsection
+
+\startsection[title=The Raspbery Pi]
+
+The Pi (we're talking of the first model here) has an extension bus and can be
+used to control whatever device, it has more the properties (and build) of a
+media player and indeed there are dedicated installations for that. But as this
+popular small device can host any \LINUX\ distribution this is what was done. The
+distribution of choice was OpenSuse. The setup was really experimental with an
+unboxed Pi, an unframed \LCD\ panel, a keyboard and mouse, a power supply and
+some wires to connect this all. With an ethernet cable running directly to the
+router a distribution could be fetched and installed.
+
+This device has a single core arm processor running at 700 Mhz with half a
+gigabyte of memory. Persistent memory is a flash card, not that fast but
+acceptable. The maximum read speed was some 20 MB per second. It was no real
+surprise that the set of tests ran much slower than on the phone.
+
+It took a bit of experimenting but a 200 Mhz overclock of the \CPU\ combined with
+overclocked memory made performance jump up. In fact, we got a speed that we
+could somehow relate to the phone that has a more modern \CPU\ and runs at 1.5
+times that speed.
+
+Being a regular \LINUX\ setup, installation was more straightforward than on the
+phone but of course it took a while before all was in place. The default clock
+timings are:
+
+\starttabulate[|l|r|r|]
+\BC speed-1 \NC 95.841 \NC 1.043 \NC \NR
+\BC speed-2 \NC 76.817 \NC 13.018 \NC \NR
+\BC speed-3 \NC 84.890 \NC 1.178 \NC \NR
+\BC speed-4 \NC 13.241 \NC 0.076 \NC \NR
+\BC speed-5 \NC 192.288 \NC 0.660 \NC \NR
+\stoptabulate
+
+Again, the main conclusion here is that documents that need lots of \OPENTYPE\
+feature juggling, this is not the best platform.
+
+\stopsection
+
+\startsection[title=Summary]
+
+We see small devices gaining more performance each iteration than larger
+machines. Their screens and input method also evolve at a higher speed. The
+question is if arm will keep dominating this segment, but at least it is clear
+that they are useable for \TEX\ processing. Keep in mind that we used \LUATEX,
+which means that we also have \LUA\ with its garbage collector. Add \CONTEXT\ to
+that, which is not that small and preloads quite some resources, and it will be
+clear that these devices actually perform quite well, given slower memory, slower
+disks, small caches etc. With down|-|scaled intel chips showing up it can only
+get better. Keep in mind that we only need one core, so the speed of one core
+matters more than having multiple cores available, although the other cores can
+be wasted on keeping up with your social demands on such a device in parallel
+with the \TEX\ run.
+
+A runtime five to ten times slower than a decent laptop is not something that we
+look forward to in a production environment, but when you're on the road it is
+quite okay, especially if it can replace a somewhat heavy portable workstation
+like we do. Okay, how much \TEX\ processing do you need when mobile, but still.
+As vendors of server hardware are looking into high density servers with lots of
+small fast processors, we might at some point actually use \TEX\ on such
+hardware. By then performance might be en par with virtual machines running on
+average loaded machines.
+
+We are pretty sure that on following \CONTEXT\ meetings more such experiments
+will be done so we'll keep you posted.
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/about/about-nodes.tex b/doc/context/sources/general/manuals/about/about-nodes.tex
new file mode 100644
index 000000000..f365f1fc4
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/about-nodes.tex
@@ -0,0 +1,603 @@
+% language=uk
+
+\usemodule[nodechart]
+
+\startcomponent about-nodes
+
+\environment about-environment
+
+\startchapter[title={Juggling nodes}]
+
+\startsection[title=Introduction]
+
+When you use \TEX, join the community, follow mailing lists, read manuals,
+and|/|or attend meetings, there will come a moment when you run into the word
+\quote {node}. But, as a regular user, even if you write macros, you can happily
+ignore them because in practice you will never really see them. They are hidden
+deep down in \TEX.
+
+Some expert \TEX ies love to talk about \TEX's mouth, stomach, gut and other
+presumed bodily elements. Maybe it is seen as proof of the deeper understanding
+of this program as Don Knuth uses these analogies in his books about \TEX\ when
+he discusses how \TEX\ reads the input, translates it and digests it into a
+something that can be printed or viewed. No matter how your input gets digested,
+at some point we get nodes. However, as users have no real access to the
+internals, nodes never show themselves to the user. They have no bodily analogy
+either.
+
+A character that is read from the input can become a character node. Multiple
+characters can become a linked list of nodes. Such a list can contain other kind
+of nodes as well, for instance spaced become glue. There can also be penalties
+that steer the machinery. And kerns too: fixed displacements. Such a list can be
+wrapped in a box. In the process hyphenation is applied, characters become glyphs
+and intermediate math nodes becomes a combination of regular glyphs, kerns and
+glue, wrapped into boxes. So, an hbox that contains the three glyphs \type {tex}
+can be represented as follows:
+
+\startlinecorrection
+ \setupFLOWchart
+ [dx=2em,
+ dy=1em,
+ width=4em,
+ height=2em]
+ \setupFLOWshapes
+ [framecolor=maincolor]
+ \startFLOWchart[nodes]
+ \startFLOWcell
+ \name {box}
+ \location {1,1}
+ \shape {action}
+ \text {hbox}
+ \connection [rl] {t}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {t}
+ \location {2,1}
+ \shape {action}
+ \text {t}
+ \connection [+t-t] {e}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {e}
+ \location {3,1}
+ \shape {action}
+ \text {e}
+ \connection [+t-t] {x}
+ \connection [-b+b] {t}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {x}
+ \location {4,1}
+ \shape {action}
+ \text {x}
+ \connection [-b+b] {e}
+ \stopFLOWcell
+ \stopFLOWchart
+ \FLOWchart[nodes]
+\stoplinecorrection
+
+Eventually a long sequence of nodes can become a paragraph of lines and each line
+is a box. The lines together make a page which is also a box. There are many kind
+of nodes but some are rather special and don't translate directly to some visible
+result. When dealing with \TEX\ as user we can forget about nodes: we never really
+see them.
+
+In this example we see an hlist (hbox) node. Such a node has properties like
+width, height, depth, shift etc. The characters become glyph nodes that have
+(among other properties) a reference to a font, character, language.
+
+Because \TEX\ is also about math, and because math is somewhat special, we have
+noads, some intermediate kind of node that makes up a math list, that eventually
+gets transformed into a list of nodes. And, as proof of extensibility, Knuth came
+up with a special node that is more or less ignored by the machinery but travels
+with the list and can be dealt with in special backend code. Their name indicates
+what it's about: they are called whatsits (which sounds better that whatevers).
+In \LUATEX\ some whatsits are used in the frontend, for instance directional
+information is stored in whatsits.
+
+The \LUATEX\ engine not only opens up the \UNICODE\ and \OPENTYPE\ universes, but
+also the traditional \TEX\ engine. It gives us access to nodes. And this permits
+us to go beyond what was possible before and therefore on mailing lists like the
+\CONTEXT\ list, the word node will pop up more frequently. If you look into the
+\LUA\ files that ship with \CONTEXT\ you cannot avoid seeing them. And, when you
+use the \CLD\ interface you might even want to manipulate them. A nice side
+effect is that you can sound like an expert without having to refer to bodily
+aspects of \TEX: you just see them as some kind of \LUA\ userdata variable. And
+you access them like tables: they are abstracts units with properties.
+
+\stopsection
+
+\startsection[title=Basics]
+
+Nodes are kind of special in the sense that you need to keep an eye on creation
+and destruction. In \TEX\ itself this is mostly hidden:
+
+\startbuffer
+\setbox0\hbox{some text}
+\stopbuffer
+
+\typebuffer
+
+If we look {\em into} this box we get a list of glyphs (see \in {figure}
+[fig:dummy:1]).
+
+\startplacefigure[reference=fig:dummy:1]
+ \getbuffer
+ \boxtoFLOWchart[dummy]{0}
+ \small
+ \FLOWchart[dummy][width=14em,height=3em,dx=1em,dy=.75em] % ,hcompact=yes]
+\stopplacefigure
+
+In \TEX\ you can flush such a box using \type {\box0} or copy it using \type
+{\copy0}. You can also flush the contents i.e.\ omit the wrapper using \type
+{\unhbox0} and \type {\unhcopy0}. The possibilities for disassembling the
+content of a box (or any list for that matter) are limited. In practice you
+can consider disassembling to be absent.
+
+This is different at the \LUA\ end: there we can really start at the beginning of
+a list, loop over it and see what's in there as well as change, add and remove
+nodes. The magic starts with:
+
+\starttyping
+local box = tex.box[0]
+\stoptyping
+
+Now we have a variable that has a so called \type {hlist} node. This node has not
+only properties like \type {width}, \type {height}, \type {depth} and \type
+{shift}, but also a pointer to the content: \type {list}.
+
+\starttyping
+local list = box.list
+\stoptyping
+
+Now, when we start messing with this list, we need to keep into account that the
+nodes are in fact userdata objects, that is: they are efficient \TEX\ data
+structures that have a \LUA\ interface. At the \TEX\ end the repertoire of
+commands that we can use to flush boxes is rather limited and as we cannot mess
+with the content we have no memory management issues. However, at the \LUA\ end
+this is different. Nodes can have pointers to other nodes and they can even have
+special properties that relate to other resources in the program.
+
+Take this example:
+
+\starttyping
+\setbox0\hbox{some text}
+\directlua{node.write(tex.box[0])}
+\stoptyping
+
+At the \TEX\ end we wrap something in a box. Then we can at the \LUA\ end access
+that box and print it back into the input. However, as \TEX\ is no longer in
+control it cannot know that we already flushed the list. Keep in mind that this
+is a simple example, but imagine more complex content, that contains hyperlinks
+or so. Now take this:
+
+\starttyping
+\setbox0\hbox{some text 1}
+\setbox0\hbox{some text 2}
+\stoptyping
+
+Here \TEX\ knows that the box has content and it will free the memory beforehand
+and forget the first text. Or this:
+
+\starttyping
+\setbox0\hbox{some text}
+\box0 \box0
+\stoptyping
+
+The box will be used and after that it's empty so the second flush is basically a
+harmless null operation: nothing gets inserted. But this:
+
+\starttyping
+\setbox0\hbox{some text}
+\directlua{node.write(tex.box[0])}
+\directlua{node.write(tex.box[0])}
+\stoptyping
+
+will definitely fail. The first call flushes the box and the second one sees
+no box content and will bark. The best solution is to use a copy:
+
+\starttyping
+\setbox0\hbox{some text}
+\directlua{node.write(node.copy_list(tex.box[0]))}
+\stoptyping
+
+That way \TEX\ doesn't see a change in the box and will free it when needed: when
+it gets flushed, reassigned, at the end of a group, wherever.
+
+In \CONTEXT\ a somewhat shorter way of printing back to \TEX\ is the following
+and we will use that:
+
+\starttyping
+\setbox0\hbox{some text}
+\ctxlua{context(node.copy_list(tex.box[0])}
+\stoptyping
+
+or shortcut into \CONTEXT:
+
+\starttyping
+\setbox0\hbox{some text}
+\cldcontext{node.copy_list(tex.box[0])}
+\stoptyping
+
+As we've now arrived at the \LUA\ end, we have more possibilities with nodes. In
+the next sections we will explore some of these.
+
+\stopsection
+
+\startsection[title=Management]
+
+The most important thing to keep in mind is that each node is unique in the sense
+that it can be used only once. If you don't need it and don't flush it, you
+should free it. If you need it more than once, you need to make a copy. But let's
+first start with creating a node.
+
+\starttyping
+local g = node.new("glyph")
+\stoptyping
+
+This node has some properties that need to be set. The most important are the font
+and the character. You can find more in the \LUATEX\ manual.
+
+\starttyping
+g.font = font.current()
+g.char = utf.byte("a")
+\stoptyping
+
+After this we can write it to the \TEX\ input:
+
+\starttyping
+context(g)
+\stoptyping
+
+This node is automatically freed afterwards. As we're talking \LUA\ you can use
+all kind of commands that are defined in \CONTEXT. Take fonts:
+
+\startbuffer
+\startluacode
+local g1 = node.new("glyph")
+local g2 = node.new("glyph")
+
+g1.font = fonts.definers.internal {
+ name = "dejavuserif",
+ size = "60pt",
+}
+
+g2.font = fonts.definers.internal {
+ name = "dejavusansmono",
+ size = "60pt",
+}
+
+g1.char = utf.byte("a")
+g2.char = utf.byte("a")
+
+context(g1)
+context(g2)
+\stopluacode
+\stopbuffer
+
+\typebuffer
+
+We get: \getbuffer, but there is one pitfall: the nodes have to be flushed in
+horizontal mode, so either put \type {\dontleavehmode} in front or add \type
+{context.dontleavehmode()}. If you get error messages like \typ {this can't
+happen} you probably forgot to enter horizontal mode.
+
+In \CONTEXT\ you have some helpers, for instance:
+
+\starttyping
+\startluacode
+local id = fonts.definers.internal { name = "dejavuserif" }
+
+context(nodes.pool.glyph(id,utf.byte("a")))
+context(nodes.pool.glyph(id,utf.byte("b")))
+context(nodes.pool.glyph(id,utf.byte("c")))
+\stopluacode
+\stoptyping
+
+or, when we need these functions a lot and want to save some typing:
+
+\startbuffer
+\startluacode
+local getfont = fonts.definers.internal
+local newglyph = nodes.pool.glyph
+local utfbyte = utf.byte
+
+local id = getfont { name = "dejavuserif" }
+
+context(newglyph(id,utfbyte("a")))
+context(newglyph(id,utfbyte("b")))
+context(newglyph(id,utfbyte("c")))
+\stopluacode
+\stopbuffer
+
+\typebuffer
+
+This renders as: \getbuffer. We can make copies of nodes too:
+
+\startbuffer
+\startluacode
+local id = fonts.definers.internal { name = "dejavuserif" }
+local a = nodes.pool.glyph(id,utf.byte("a"))
+
+for i=1,10 do
+ context(node.copy(a))
+end
+
+node.free(a)
+\stopluacode
+\stopbuffer
+
+\typebuffer
+
+This gives: \getbuffer. Watch how afterwards we free the node. If we have not one
+node but a list (for instance because we use box content) you need to use the
+alternatives \type {node.copy_list} and \type {node.free_list} instead.
+
+In \CONTEXT\ there is a convenient helper to create a list of text nodes:
+
+\startbuffer
+\startluacode
+context(nodes.typesetters.tonodes("this works okay"))
+\stopluacode
+\stopbuffer
+
+\typebuffer
+
+And indeed, \getbuffer, even when we use spaces. Of course it makes
+more sense (and it is also more efficient) to do this:
+
+\startbuffer
+\startluacode
+context("this works okay")
+\stopluacode
+\stopbuffer
+
+In this case the list is constructed at the \TEX\ end. We have now learned enough
+to start using some convenient operations, so these are introduced next. Instead
+of the longer \type {tonodes} call we will use the shorter one:
+
+\starttyping
+local head, tail = string.tonodes("this also works"))
+\stoptyping
+
+As you see, this constructor returns the head as well as the tail of the
+constructed list.
+
+\stopsection
+
+\startsection[title=Operations]
+
+If you are familiar with \LUA\ you will recognize this kind of code:
+
+\starttyping
+local str = "time: " .. os.time()
+\stoptyping
+
+Here a string \type {str} is created that is built out if two concatinated
+snippets. And, \LUA\ is clever enough to see that it has to convert the number to
+a string.
+
+In \CONTEXT\ we can do the same with nodes:
+
+\startbuffer
+\startluacode
+local foo = string.tonodes("foo")
+local bar = string.tonodes("bar")
+local amp = string.tonodes(" & ")
+
+context(foo .. amp .. bar)
+\stopluacode
+\stopbuffer
+
+\typebuffer
+
+This will append the two node lists: \getbuffer.
+
+\startbuffer
+\startluacode
+local l = string.tonodes("l")
+local m = string.tonodes(" ")
+local r = string.tonodes("r")
+
+context(5 * l .. m .. r * 5)
+\stopluacode
+\stopbuffer
+
+\typebuffer
+
+You can have the multiplier on either side of the node: \getbuffer.
+Addition and subtraction is also supported but it comes in flavors:
+
+\startbuffer
+\startluacode
+local l1 = string.tonodes("aaaaaa")
+local r1 = string.tonodes("bbbbbb")
+local l2 = string.tonodes("cccccc")
+local r2 = string.tonodes("dddddd")
+local m = string.tonodes(" + ")
+
+context((l1 - r1) .. m .. (l2 + r2))
+\stopluacode
+\stopbuffer
+
+\typebuffer
+
+In this case, as we have two node (lists) involved in the addition and
+subtraction, we get one of them injected into the other: after the first, or
+before the last node. This might sound weird but it happens.
+
+\dontleavehmode \start \maincolor \getbuffer \stop
+
+We can use these operators to take a slice of the given node list.
+
+\startbuffer
+\startluacode
+local l = string.tonodes("123456")
+local r = string.tonodes("123456")
+local m = string.tonodes("+ & +")
+
+context((l - 3) .. (1 + m - 1).. (3 + r))
+\stopluacode
+\stopbuffer
+
+\typebuffer
+
+So we get snippets that get appended: \getbuffer. The unary operator
+reverses the list:
+
+\startbuffer
+\startluacode
+local l = string.tonodes("123456")
+local r = string.tonodes("123456")
+local m = string.tonodes(" & ")
+
+context(l .. m .. - r)
+\stopluacode
+\stopbuffer
+
+\typebuffer
+
+This is probably not that useful, but it works as expected: \getbuffer.
+
+We saw that \type {*} makes copies but sometimes that is not enough. Consider the
+following:
+
+\startbuffer
+\startluacode
+local n = string.tonodes("123456")
+
+context((n - 2) .. (2 + n))
+\stopluacode
+\stopbuffer
+
+\typebuffer
+
+Because the slicer frees the unused nodes, the value of \type {n} in the second
+case is undefined. It still points to a node but that one already has been freed.
+So you get an error message. But of course (as already demonstrated) this is
+valid:
+
+\startbuffer
+\startluacode
+local n = string.tonodes("123456")
+
+context(2 + n - 2)
+\stopluacode
+\stopbuffer
+
+\typebuffer
+
+We get the two middle characters: \getbuffer. So, how can we use a
+node (list) several times in an expression? Here is an example
+
+\startbuffer
+\startluacode
+local l = string.tonodes("123")
+local m = string.tonodes(" & ")
+local r = string.tonodes("456")
+
+context((l^1 .. r^1)^2 .. m^1 .. r .. m .. l)
+\stopluacode
+\stopbuffer
+
+\typebuffer
+
+Using \type {^} we create copies, so we can still use the original later on. You
+can best make sure that one reference to a node is not copied because otherwise
+we get a memory leak. When you write the above without copying \LUATEX\ most
+likely end up in a loop. The result of the above is:
+
+\blank \start \dontleavehmode \maincolor \getbuffer \stop \blank
+
+Let's repeat it once more time: keep in mind that we need to do the memory
+management ourselves. In practice we will seldom need more than the
+concatination, but if you make complex expressions be prepared to loose some
+memory when you copy and don't free them. As \TEX\ runs are normally limited in
+time this is hardly an issue.
+
+So what about the division. We needed some kind of escape and as with \type
+{lpeg} we use the \type {/} to apply additional operations.
+
+\startbuffer
+\startluacode
+local l = string.tonodes("123")
+local m = string.tonodes(" & ")
+local r = string.tonodes("456")
+
+local function action(n)
+ for g in node.traverse_id(node.id("glyph"),n) do
+ g.char = string.byte("!")
+ end
+ return n
+end
+
+context(l .. m / action .. r)
+\stopluacode
+\stopbuffer
+
+\typebuffer
+
+And indeed we the middle glyph gets replaced: \getbuffer.
+
+\startbuffer
+\startluacode
+local l = string.tonodes("123")
+local r = string.tonodes("456")
+
+context(l .. nil .. r)
+\stopluacode
+\stopbuffer
+
+\typebuffer
+
+When you construct lists programmatically it can happen that one of the
+components is nil and to some extend this is supported: so the above
+gives: \getbuffer.
+
+Here is a summary of the operators that are currently supported. Keep in mind that
+these are not built in \LUATEX\ but extensions in \MKIV. After all, there are many
+ways to map operators on actions and this is just one.
+
+\starttabulate[|l|l|]
+\NC \type{n1 .. n2} \NC append nodes (lists) \type {n1} and \type {n2}, no copies \NC \NR
+\NC \type{n * 5} \NC append 4 copies of node (list) \type {n} to \type {n} \NC \NR
+\NC \type{5 + n} \NC discard the first 5 nodes from list \type {n} \NC \NR
+\NC \type{n - 5} \NC discard the last 5 nodes from list \type {n} \NC \NR
+\NC \type{n1 + n2} \NC inject (list) \type {n2} after first of list \type {n1} \NC \NR
+\NC \type{n1 - n2} \NC inject (list) \type {n2} before last of list \type {n1} \NC \NR
+\NC \type{n^2} \NC make two copies of node (list) \type {n} and keep the orginal \NC \NR
+\NC \type{- n} \NC reverse node (list) \type {n} \NC \NR
+\NC \type{n / f} \NC apply function \type {f} to node (list) \type {n} \NC \NR
+\stoptabulate
+
+As mentioned, you can only use a node or list once, so when you need it more times, you need
+to make copies. For example:
+
+\startbuffer
+\startluacode
+local l = string.tonodes( -- maybe: nodes.maketext
+ " 1 2 3 "
+)
+local r = nodes.tracers.rule( -- not really a user helper (spec might change)
+ string.todimen("1%"), -- or maybe: nodes.makerule("1%",...)
+ string.todimen("2ex"),
+ string.todimen(".5ex"),
+ "maincolor"
+)
+
+context(30 * (r^1 .. l) .. r)
+\stopluacode
+\stopbuffer
+
+\typebuffer
+
+This gives a mix of glyphs, glue and rules: \getbuffer. Of course you can wonder
+how often this kind of juggling happens in use cases but at least in some core
+code the concatination (\type {..}) gives a bit more readable code and the
+overhead is quite acceptable.
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/about/about-nuts.tex b/doc/context/sources/general/manuals/about/about-nuts.tex
new file mode 100644
index 000000000..9ca1ba345
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/about-nuts.tex
@@ -0,0 +1,619 @@
+% language=uk
+
+\startcomponent about-calls
+
+\environment about-environment
+
+\startchapter[title={Going nuts}]
+
+\startsection[title=Introduction]
+
+This is not the first story about speed and it will probably not be the last one
+either. This time we discuss a substantial speedup: upto 50\% with \LUAJITTEX.
+So, if you don't want to read further at least know that this speedup came at the
+cost of lots of testing and adapting code. Of course you could be one of those
+users who doesn't care about that and it may also be that your documents don't
+qualify at all.
+
+Often when I see a kid playing a modern computer game, I wonder how it gets done:
+all that high speed rendering, complex environments, shading, lightning,
+inter||player communication, many frames per second, adapted story lines,
+\unknown. Apart from clever programming, quite some of the work gets done by
+multiple cores working together, but above all the graphics and physics
+processors take much of the workload. The market has driven the development of
+this hardware and with success. In this perspective it's not that much of a
+surprise that complex \TEX\ jobs still take some time to get finished: all the
+hard work has to be done by interpreted languages using rather traditional
+hardware. Of course all kind of clever tricks make processors perform better than
+years ago, but still: we don't get much help from specialized hardware. \footnote
+{Apart from proper rendering on screen and printing on paper.} We're sort of
+stuck: when I replaced my 6 year old laptop (when I buy one, I always buy the
+fastest one possible) for a new one (so again a fast one) the gain in speed of
+processing a document was less than twice. The many times faster graphic
+capabilities are not of much help there, not is twice the amount of cores.
+
+So, if we ever want to go much faster, we need to improve the software. The
+reason for trying to speed up \MKIV\ has been mentioned before, but let's
+summarize it here:
+
+\startitemize
+
+\startitem
+ There was a time when users complained about the speed of \CONTEXT,
+ especially compared to other macro packages. I'm not so sure if this is still
+ a valid complaint, but I do my best to avoid bottlenecks and much time goes
+ into testing efficiency.
+\stopitem
+
+\startitem
+ Computers don't get that much faster, at least we don't see an impressive
+ boost each year any more. We might even see a slowdown when battery live
+ dominates: more cores at a lower speed seems to be a trend and that doesn't
+ suit current \TEX\ engines well. Of course we assume that \TEX\ will be
+ around for some time.
+\stopitem
+
+\startitem
+ Especially in automated workflows where multiple products each demanding a
+ couple of runs are produced speed pays back in terms of resources and
+ response time. Of course the time invested in the speedup is never regained
+ by ourselves, but we hope that users appreciate it.
+\stopitem
+
+\startitem
+ The more we do in \LUA, read: the more demanding users get and the more
+ functionality is enabled, the more we need to squeeze out of the processor.
+ And we want to do more in \LUA\ in order to get better typeset results.
+\stopitem
+
+\startitem
+ Although \LUA\ is pretty fast, future versions might be slower. So, the more
+ efficient we are, the less we probably suffer from changes.
+\stopitem
+
+\startitem
+ Using more complex scripts and fonts is so demanding that the number of pages
+ per second drops dramatically. Personally I consider a rate of 15 pps with
+ \LUATEX\ or 20 pps with \LUAJITTEX\ reasonable minima on my laptop. \footnote
+ {A Dell 6700 laptop with Core i7 3840QM, 16 GB memory and SSD, running 64 bit
+ Windows 8.}
+\stopitem
+
+\startitem
+ Among the reasons why \LUAJIT\ jitting does not help us much is that (at
+ least in \CONTEXT) we don't use that many core functions that qualify for
+ jitting. Also, as runs are limited in time and much code kicks in only a few
+ times the analysis and compilation doesn't pay back in runtime. So we cannot
+ simply sit down and wait till matters improve.
+\stopitem
+
+\stopitemize
+
+Luigi Scarso and I have been exploring several options, with \LUATEX\ as well as
+\LUAJITTEX. We observed that the virtual machine in \LUAJITTEX\ is much faster so
+that engine already gives a boots. The advertised jit feature can best be
+disabled as it slows down a run noticeably. We played with \type {ffi} as well,
+but there is additional overhead involved (\type {cdata}) as well as limited
+support for userdata, so we can forget about that too. \footnote {As we've now
+introduced getters we can construct a metatable at the \LUA\ end as that is what
+\type {ffi} likes most. But even then, we don't expect much from it: the four
+times slow down that experiments showed will not magically become a large gain.}
+Nevertheless, the twice as fast virtual machine of \LUAJIT\ is a real blessing,
+especially if you take into account that \CONTEXT\ spends quite some time in
+\LUA. We're also looking forward to the announced improved garbage collector of
+\LUAJIT.
+
+In the end we started looking at \LUATEX\ itself. What can be gained there,
+within the constraints of not having to completely redesign existing
+(\CONTEXT) \LUA\ code? \footnote {In the end a substantial change was needed but
+only in accessing node properties. The nice thing about C is that there macros
+often provide a level of abstraction which means that a similar adaption of \TEX\
+source code would be more convenient.}
+
+\stopsection
+
+\startsection[title={Two access models}]
+
+Because the \CONTEXT\ code is reasonably well optimized already, the only option
+is to look into \LUATEX\ itself. We had played with the \TEX||\LUA\ interface
+already and came to the conclusion that some runtime could be gained there. On
+the long run it adds up but it's not too impressive; these extensions are
+awaiting integration. Tracing and bechmarking as well as some quick and dirty
+patches demonstrated that there were two bottlenecks in accessing fields in
+nodes: checking (comparing the metatables) and constructing results (userdata
+with metatable).
+
+In case you're infamiliar with the concept this is how nodes work. There is an
+abstract object called node that is in \LUA\ qualified as user data. This object
+contains a pointer to \TEX's node memory. \footnote {The traditional \TEX\ node
+memory manager is used, but at some point we might change to regular C
+(de)allocation. This might be slower but has some advantages too.} As it is real
+user data (not so called light) it also carries a metatable. In the metatble
+methods are defined and one of them is the indexer. So when you say this:
+
+\starttyping
+local nn = n.next
+\stoptyping
+
+given that \type {n} is a node (userdata) the \type {next} key is resolved up
+using the \type {__index} metatable value, in our case a function. So, in fact,
+there is no \type {next} field: it's kind of virtual. The index function that
+gets the relevant data from node memory is a fast operation: after determining
+the kind of node, the requested field is located. The return value can be a
+number, for instance when we ask for \type {width}, which is also fast to return.
+But it can also be a node, as is the case with \type {next}, an then we need to
+allocate a new userdata object (memory management overhead) and a metatable has
+to be associated. And that comes at a cost.
+
+In a previous update we had already optimized the main \type {__index} function
+but felt that some more was possible. For instance we can avoid the lookup of the
+metatable for the returned node(s). And, if we don't use indexed access but a
+instead a function for frequently accessed fields we can sometimes gain a bit too.
+
+A logical next step was to avoid some checking, which is okay given that one pays
+a bit attention to coding. So, we provided a special table with some accessors of
+frequently used fields. We actually implemented this as a so called \quote {fast}
+access model, and adapted part of the \CONTEXT\ code to this, as we wanted to see
+if it made sense. We were able to gain 5 to 10\% which is nice but still not
+impressive. In fact, we concluded that for the average run using fast was indeed
+faster but not enough to justify rewriting code to the (often) less nice looking
+faster access. A nice side effect of the recoding was that I can add more advanced
+profiling.
+
+But, in the process we ran into another possibility: use accessors exclusively
+and avoiding userdata by passing around references to \TEX\ node memory directly.
+As internally nodes can be represented by numbers, we ended up with numbers, but
+future versions might use light userdata instead to carry pointers around. Light
+userdata is cheap basic object with no garbage collection involved. We tagged
+this method \quote {direct} and one can best treat the values that gets passed
+around as abstract entities (in \MKIV\ we call this special view on nodes
+\quote {nuts}).
+
+So let's summarize this in code. Say that we want to know the next node of
+\type {n}:
+
+\starttyping
+local nn = n.next
+\stoptyping
+
+Here \type {__index} will be resolved and the associated function be called. We
+can avoid that lookup by applying the \type {__index} method directly (after all,
+that one assumes a userdata node):
+
+\starttyping
+local getfield = getmetatable(n).__index
+
+local nn = getfield(n,"next") -- userdata
+\stoptyping
+
+But this is not a recomended interface for regular users. A normal helper that
+does checking is as about fast as the indexed method:
+
+\starttyping
+local getfield = node.getfield
+
+local nn = getfield(n,"next") -- userdata
+\stoptyping
+
+So, we can use indexes as well as getters mixed and both perform more of less
+equal. A dedicated getter is somewhat more efficient:
+
+\starttyping
+local getnext = node.getnext
+
+local nn = getnext(n) -- userdata
+\stoptyping
+
+If we forget about checking, we can go fast, in fact the nicely interfaced \type
+{__index} is the fast one.
+
+\starttyping
+local getfield = node.fast.getfield
+
+local nn = getfield(n,"next") -- userdata
+\stoptyping
+
+Even more efficient is the following as that one knows already what to fetch:
+
+\starttyping
+local getnext = node.fast.getnext
+
+local nn = getnext(n) -- userdata
+\stoptyping
+
+The next step, away from userdata was:
+
+\starttyping
+local getfield = node.direct.getfield
+
+local nn = getfield(n,"next") -- abstraction
+\stoptyping
+
+and:
+
+\starttyping
+local getnext = node.direct.getnext
+
+local nn = getnext(n) -- abstraction
+\stoptyping
+
+Because we considered three variants a bit too much and because \type {fast} was
+only 5 to 10\% faster in extreme cases, we decided to drop that experimental code
+and stick to providing accessors in the node namespace as well as direct variants
+for critical cases.
+
+Before you start thinking: \quote {should I rewrite all my code?} think twice!
+First of all, \type {n.next} is quite fast and switching between the normal and
+direct model also has some cost. So, unless you also adapt all your personal
+helper code or provide two variants of each, it only makes sense to use direct
+mode in critical situations. Userdata mode is much more convenient when
+developing code and only when you have millions of access you can gain by direct
+mode. And even then, if the time spent in \LUA\ is small compared to the time
+spent in \TEX\ it might not even be noticeable. The main reason we made direct
+variants is that it does pay of in \OPENTYPE\ font processing where complex
+scripts can result in many millions of calls indeed. And that code will be set up
+in such a way that it will use userdata by default and only in well controlled
+case (like \MKIV) we will use direct mode. \footnote {When we are confident
+that \type {direct} node code is stable we can consider going direct in generic
+code as well, although we need to make sure that third party code keeps working.}
+
+Another thing to keep in mind is that when you provide hooks for users you should
+assume that they use the regular mode so you need to cast the plugins onto direct
+mode then. Because the idea is that one should be able to swap normal functions
+by direct ones (which of course is only possible when no indexes are used) all
+relevant function in the \type {node} namespace are available in \type {direct}
+as well. This means that the following code is rather neutral:
+
+\starttyping
+local x = node -- or: x = node.direct
+
+for n in x.traverse(head) do
+ if x.getid(n) == node.id("glyph") and x.getchar(n) == 0x123 then
+ x.setfield(n,"char",0x456)
+ end
+end
+\stoptyping
+
+Of course one needs to make sure that \type {head} fits the model. For this you
+can use the cast functions:
+
+\starttyping
+node.direct.todirect(node or direct)
+node.direct.tonode(direct or node)
+\stoptyping
+
+These helpers are flexible enough to deal with either model. Aliasing the
+functions to locals is of course more efficient when a large number of calls
+happens (when you use \LUAJITTEX\ it will do some of that for you automatically).
+Of course, normally we use a more natural variant, using an id traverser:
+
+\starttyping
+for n in node.traverse_id(head,node.id("glyph")) do
+ if n.char == 0x123 then
+ n.char = 0x456
+ end
+end
+\stoptyping
+
+This is not that much slower, especially when it's only ran once. Just count the
+number of characters on a page (or in your document) and you will see that it's
+hard to come up with that many calls. Of course, processing many pages of Arabic
+using a mature font with many features enabled and contextual lookups, you do run
+into quantities. Tens of features times tens of contextual lookup passes can add
+up considerably. In Latin scripts you never reach such numbers, unless you use
+fonts like Zapfino.
+
+\stopsection
+
+\startsection[title={The transition}]
+
+After weeks of testing, rewriting, skyping, compiling and making decisions, we
+reached a more or less stable situation. At that point we were faced with a
+speedup that gave us a good feeling, but transition to the faster variant has a
+few consequences.
+
+\startitemize
+
+\startitem We need to use an adapted code base: indexes are to be replaced by
+function calls. This is a tedious job that can endanger stability so it has to be
+done with care. \footnote {The reverse is easier, as converting getters and
+setters to indexed is a rather simple conversion, while for instance changing
+type {.next} into a \type {getnext} needs more checking because that key is not
+unique to nodes.} \stopitem
+
+\startitem When using an old engine with the new \MKIV\ code, this approach will
+result in a somewhat slower run. Most users will probably accept a temporary
+slowdown of 10\%, so we might take this intermediate step. \stopitem
+
+\startitem When the regular getters and setters become available we get back to
+normal. Keep in mind that these accessors do some checking on arguments so that
+slows down to the level of using indexes. On the other hand, the dedicated ones
+(like \type {getnext}) are more efficient so there we gain. \stopitem
+
+\startitem As soon as direct becomes available we suddenly see a boost in speed.
+In documents of average complexity this is 10-20\% and when we use more complex
+scripts and fonts it can go up to 40\%. Here we assume that the macro package
+spends at least 50\% of its time in \LUA. \stopitem
+
+\stopitemize
+
+If we take the extremes: traditional indexed on the one hand versus optimized
+direct in \LUAJITTEX, a 50\% gain compared to the old methods is feasible.
+Because we also retrofitted some fast code into the regular accessor, indexed
+mode should also be somewhat faster compared to the older engine.
+
+In addition to the already provide helpers in the \type {node} namespace, we
+added the following:
+
+\starttabulate[|Tl|p|]
+\HL
+\NC getnext \NC this one is used a lot when analyzing and processing node lists \NC \NR
+\NC getprev \NC this one is used less often but fits in well (companion to \type {getnext}) \NC \NR
+\NC getfield \NC this is the general accessor, in userdata mode as fast as indexed \NC \NR
+\HL
+\NC getid \NC one of the most frequent called getters when parsing node lists \NC \NR
+\NC getsubtype \NC especially in fonts handling this getter gets used \NC \NR
+\HL
+\NC getfont \NC especially in complex font handling this is a favourite \NC \NR
+\NC getchar \NC as is this one \NC \NR
+\HL
+\NC getlist \NC we often want to recurse into hlists and vlists and this helps \NC \NR
+\NC getleader \NC and also often need to check if glue has leader specification (like list) \NC \NR
+\HL
+\NC setfield \NC we have just one setter as setting is less critical \NC \NR
+\HL
+\stoptabulate
+
+As \type {getfield} and \type {setfield} are just variants on indexed access, you
+can also use them to access attributes. Just pass a number as key. In the \type
+{direct} namespace, helpers like \type {insert_before} also deal with direct
+nodes.
+
+We currently only provide \type {setfield} because setting happens less than
+getting. Of course you can construct nodelists at the \LUA\ end but it doesn't
+add up that fast and indexed access is then probably as efficient. One reason why
+setters are less an issue is that they don't return nodes so no userdata overhead
+is involved. We could (and might) provide \type {setnext} and \type {setprev},
+although, when you construct lists at the \LUA\ end you will probably use the
+type {insert_after} helper anyway.
+
+\stopsection
+
+\startsection[title={Observations}]
+
+So how do these variants perform? As we no longer have \type {fast} in the engine
+that I use for this text, we can only check \type {getfield} where we can simulate
+fast mode with calling the \type{__index} metamethod. In practice the \type
+{getnext} helper will be somewhat faster because no key has to be checked,
+although the \type {getfield} functions have been optimized according to the
+frequencies of accessed keys already.
+
+\starttabulate
+\NC node[*] \NC 0.516 \NC \NR
+\NC node.fast.getfield \NC 0.616 \NC \NR
+\NC node.getfield \NC 0.494 \NC \NR
+\NC node.direct.getfield \NC 0.172 \NC \NR
+\stoptabulate
+
+Here we simulate a dumb 20 times node count of 200 paragraphs \type {tufte.tex}
+with a little bit of overhead for wrapping in functions. \footnote {When
+typesetting Arabic or using complex fonts we quickly get a tenfold.} We encounter
+over three million nodes this way. We average a couple or runs.
+
+\starttyping
+local function check(current)
+ local n = 0
+ while current do
+ n = n + 1
+ current = getfield(current,"next") -- current = current.next
+ end
+ return n
+end
+\stoptyping
+
+What we see here is that indexed access is quite okay given the amount of nodes,
+but that direct is much faster. Of course we will never see that gain in practice
+because much more happens than counting and because we also spend time in \TEX.
+The 300\% speedup will eventually go down to one tenth of that.
+
+Because \CONTEXT\ avoids node list processing when possible the baseline
+performance is not influenced much.
+
+\starttyping
+\starttext \dorecurse{1000}{test\page} \stoptext
+\stoptyping
+
+With \LUATEX\ we get some 575 pages per second and with \LUAJITTEX\ more than 610
+pages per second.
+
+\starttyping
+\setupbodyfont[pagella]
+
+\edef\zapf{\cldcontext
+ {context(io.loaddata(resolvers.findfile("zapf.tex")))}}
+
+\starttext \dorecurse{1000}{\zapf\par} \stoptext
+\stoptyping
+
+For this test \LUATEX\ needs 3.9 seconds and runs at 54 pages per second, while
+\LUAJITTEX\ needs only 2.3 seconds and gives us 93 pages per second.
+
+Just for the record, if we run this:
+
+\starttyping
+\starttext
+\stoptext
+\stoptyping
+
+a \LUATEX\ runs takes 0.229 seconds and a \LUAJITTEX\ run 0.178 seconds. This includes
+initializing fonts. If we run just this:
+
+\starttyping
+\stoptext
+\stoptyping
+
+\LUATEX\ needs 0.199 seconds and \LUAJITTEX\ only 0.082 seconds. So, in the
+meantime, we hardly spend any time on startup. Launching the binary and managing
+the job with \type {mtxrun} calling \type {mtx-context} adds 0.160 seconds
+overhead. Of course this is only true when you have already ran \CONTEXT\ once as
+the operating system normally caches files (in our case format files and fonts).
+This means that by now an edit|-|preview cycle is quite convenient. \footnote {I
+use \SCITE\ with dedicated lexers as editor and currently \type {sumatrapdf} as
+previewer.}
+
+As a more practical test we used the current version of \type {fonts-mkiv} (166
+pages, using all kind of font tricks and tracing), \type {about} (60 pages, quite
+some traced math) and a torture test of Arabic text (61 pages dense text). The
+following measurements are from 2013-07-05 after adapting some 50 files to the
+new model. Keep in mind that the old binary can fake a fast getfield and setfield
+but that the other getters are wrapped functions. The more we have, the slower it
+gets. We used the mingw versions.
+
+\starttabulate[|l|r|r|r|]
+\HL
+\NC version \NC fonts \NC about \NC arabic \NC \NR
+\HL
+\NC old mingw, indexed plus some functions \NC 8.9 \NC 3.2 \NC 20.3 \NC \NR
+\NC old mingw, fake functions \NC 9.9 \NC 3.5 \NC 27.4 \NC \NR
+\HL
+\NC new mingw, node functions \NC 9.0 \NC 3.1 \NC 20.8 \NC \NR
+\NC new mingw, indexed plus some functions \NC 8.6 \NC 3.1 \NC 19.6 \NC \NR
+\NC new mingw, direct functions \NC 7.5 \NC 2.6 \NC 14.4 \NC \NR
+\HL
+\stoptabulate
+
+The second row shows what happens when we use the adapted \CONTEXT\ code with an
+older binary. We're slower. The last row is what we will have eventually. All
+documents show a nice gain in speed and future extensions to \CONTEXT\ will no
+longer have the same impact as before. This is because what we here see also
+includes \TEX\ activity. The 300\% increase of speed of node access makes node
+processing less influential. On the average we gain 25\% here and as on these
+documents \LUAJITTEX\ gives us some 40\% gain on indexed access, it gives more
+than 50\% on the direct function based variant.
+
+In the fonts manual some 25 million getter accesses happen while the setters
+don't exceed one million. I lost the tracing files but at some point the Arabic
+test showed more than 100 millions accesses. So it's save to conclude that
+setters are sort of neglectable. In the fonts manual the amount of accesses to
+the previous node were less that 5000 while the id and next fields were the clear
+winners and list and leader fields also scored high. Of course it all depends on
+the kind of document and features used, but we think that the current set of
+helpers is quite adequate. And because we decided to provide that for normal
+nodes as well, there is no need to go direct for more simple cases.
+
+Maybe in the future further tracing might show that adding getters for width,
+height, depth and other properties of glyph, glue, kern, penalty, rule, hlist and
+vlist nodes can be of help, but quite probably only in direct mode combined with
+extensive list manipulations. We will definitely explore other getters but only
+after the current set has proven to be useful.
+
+\stopsection
+
+\startsection[title={Nuts}]
+
+So why going nuts and what are nuts? In Dutch \quote {node} sounds a bit like
+\quote {noot} and translates back to \quote {nut}. And as in \CONTEXT\ I needed
+word for these direct nodes they became \quote {nuts}. It also suits this
+project: at some point we're going nuts because we could squeeze more out
+of \LUAJITTEX, so we start looking at other options. And we're sure some folks
+consider us being nuts anyway, because we spend time on speeding up. And adapting
+the \LUATEX\ and \CONTEXT\ \MKIV\ code mid||summer is also kind of nuts.
+
+At the \CONTEXT\ 2013 conference we will present this new magic and about that
+time we've done enough tests to see if it works our well. The \LUATEX\ engine
+will provide the new helpers but they will stay experimental for a while as one
+never knows where we messed up.
+
+I end with another measurement set. Every now and and then I play with a \LUA\
+variant of the \TEX\ par builder. At some point it will show up on \MKIV\ but
+first I want to abstract it a bit more and provide some hooks. In order to test
+the performance I use the following tests:
+
+% \testfeatureonce{1000}{\tufte \par}
+
+\starttyping
+\testfeatureonce{1000}{\setbox0\hbox{\tufte}}
+
+\testfeatureonce{1000}{\setbox0\vbox{\tufte}}
+
+\startparbuilder[basic]
+ \testfeatureonce{1000}{\setbox0\vbox{\tufte}}
+\stopparbuilder
+\stoptyping
+
+We use a \type {\hbox} to determine the baseline performance. Then we break lines
+using the built|-|in parbuilder. Next we do the same but now with the \LUA\
+variant. \footnote {If we also enable protrusion and hz the \LUA\ variant suffers
+less because it implements this more efficient.}
+
+\starttabulate[|l|l|l|l|l|]
+\HL
+\NC \NC \bf \rlap{luatex} \NC \NC \bf \rlap{luajittex} \NC \NC \NR
+\HL
+\NC \NC \bf total \NC \bf linebreak \NC \bf total \NC \bf linebreak \NC \NR
+\HL
+\NC 223 pp nodes \NC 5.67 \NC 2.25 flushing \NC 3.64 \NC 1.58 flushing \NC \NR
+\HL
+\NC hbox nodes \NC 3.42 \NC \NC 2.06 \NC \NC \NR
+\NC vbox nodes \NC 3.63 \NC 0.21 baseline \NC 2.27 \NC 0.21 baseline \NC \NR
+\NC vbox lua nodes \NC 7.38 \NC 3.96 \NC 3.95 \NC 1.89 \NC \NR
+\HL
+\NC 223 pp nuts \NC 4.07 \NC 1.62 flushing \NC 2.36 \NC 1.11 flushing \NC \NR
+\HL
+\NC hbox nuts \NC 2.45 \NC \NC 1.25 \NC \NC \NR
+\NC vbox nuts \NC 2.53 \NC 0.08 baseline \NC 1.30 \NC 0.05 baseline \NC \NR
+\NC vbox lua nodes \NC 6.16 \NC 3.71 \NC 3.03 \NC 1.78 \NC \NR
+\NC vbox lua nuts \NC 5.45 \NC 3.00 \NC 2.47 \NC 1.22 \NC \NR
+\HL
+\stoptabulate
+
+We see that on this test nuts have an advantage over nodes. In this case we
+mostly measure simple font processing and there is no markup involved. Even a 223
+page document with only simple paragraphs needs to be broken across pages,
+wrapped in page ornaments and shipped out. The overhead tagged as \quote
+{flushed} indicates how much extra time would have been involved in that. These
+numbers demonstrate that with nuts the \LUA\ parbuilder is performing 10\% better
+so we gain some. In a regular document only part of the processing involves
+paragraph building so switching to a \LUA\ variant has no big impact anyway,
+unless we have simple documents (like novels). When we bring hz into the picture
+performance will drop (and users occasionally report this) but here we already
+found out that this is mostly an implementation issue: the \LUA\ variant suffers
+less so we will backport some of the improvements. \footnote {There are still
+some aspects that can be approved. For instance these tests still checks lists
+for \type {prev} fields, something that is not needed in future versions.}
+
+\stopsection
+
+\startsection[title={\LUA\ 5.3}]
+
+When we were working on this the first working version of \LUA\ 5.3 was
+announced. Apart from some minor changes that won't affect us, the most important
+change is the introduction of integers deep down. On the one hand we can benefit
+from this, given that we adapt the \TEX|-|\LUA\ interfaces a bit: the distinction
+between \type {to_number} and \type {to_integer} for instance. And, numbers are
+always somewhat special in \TEX\ as it relates to reproduction on different
+architectures, also over time. There are some changes in conversion to string
+(needs attention) and maybe at some time also in the automated casting from
+strings to numbers (the last is no big deal for us).
+
+On the one hand the integers might have a positive influence on performance
+especially as scaled points are integers and because fonts use them too (maybe
+there is some advantage in memory usage). But we also need a proper efficient
+round function (or operator) then. I'm wondering if mixed integer and float usage
+will be efficient, but on the the other hand we do not that many calculations so
+the benefits might outperform the drawbacks.
+
+We noticed that 5.2 was somewhat faster but that the experimental generational
+garbage collecter makes runs slower. Let's hope that the garbage collector
+performance doesn't degrade. But the relative gain of node versus direct will
+probably stay.
+
+Because we already have an experimental setup we will probably experiment a bit
+with this in the future. Of course the question then is how \LUAJITTEX\ will work
+out, because it is already not 5.2 compatible it has to be seen if it will
+support the next level. At least in \CONTEXT\ \MKIV\ we can prepare ourselves as
+we did with \LUA\ 5.2 so that we're ready when we follow up.
+
+\stopsection
+
+\stopchapter
diff --git a/doc/context/sources/general/manuals/about/about-properties.tex b/doc/context/sources/general/manuals/about/about-properties.tex
new file mode 100644
index 000000000..07bb2924c
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/about-properties.tex
@@ -0,0 +1,209 @@
+% language=uk
+
+\startcomponent about-properties
+
+\environment about-environment
+
+\startchapter[title=Properties]
+
+\startsection[title=Introduction]
+
+Attributes are a nice extension to \TEX\ as they permits us to let information
+travel with nodes. Internally they are represented as a linked list that
+travels with a node. Because often a sequence of nodes has the same attributes,
+this mechanism is quite efficient. Access is relatively fast too. Attributes
+have a number and a value (also a number) which is fine. Of course one could
+wish for them to be anything, but imagine the amount of management needed
+in the engine if that were the case. Not only does saving and restoring (due to
+grouping) at the \TEX\ end has no \LUA\ equivalent, an overload of the \LUA\
+registry (the most natural interface for this) is not what we want. Of course
+it is also not acceptable that (future) extensions slow down a run. In fact,
+leaner and meaner should be the main objective.
+
+At some point I thought that packing crucial information in a node using a bitset
+would help to speed up some critical mechanisms (mostly fonts) but although
+managing some 32 or 64 on||off states is possible in a more closed macro package,
+in practice it would lead to conflicts in use. Also, an experimental
+implementation of this idea was not faster than using attributes due to the fact
+that manipulating bits also involves function calls that deal with setting,
+resetting, masking and more. It also makes nodes larger and increases the memory
+footprint.
+
+So, when I discarded that idea, I moved to another one, which is associating a
+\LUA\ table with each node (that makes sense). Again, an implementation where
+some way a reference to a table is carried with a node, is non||trivial because
+it has to go via the \LUA\ registry and will not be too efficient in terms of
+speed. Also, when dealing with such information one wants to stay at the \LUA\
+end and not cross the C||boundary too often.
+
+Therefore a different approach was taken which involves a \LUA\ table. The main
+issue with carrying information with a node is not to associate that information,
+but to make sure that it gets cleaned up when a node is freed and copied when a
+node is copied. All nodes that have attributes, also get properties.
+
+\stopsection
+
+\startsection[title=The implementation]
+
+The implementation is rather minimalistic. This is because hard codes solutions
+don't fit in the \LUATEX\ design philosophy. Also, there are many ways to use
+such a mechanism so too much hard coded behaviour only complicates usage.
+
+When a node is copied, we also copy the associated property entry. Normally its
+type is \type {nil} or \type {table}. Depending on how you enabled this
+mechanism, the table copy is shallow (just a reference to the same table), or we
+assign en empty table with the original as metatable index. The second approach
+as some more overhead.
+
+When a new node is assigned, nothing extra is done with the properties. The
+overhead is zero. This means that when you want to assign properties at the \LUA\
+end, you also have to check if a node property already has a table and if not,
+create one. The same is true for querying properties: you have to test if there
+are properties at all.
+
+When you use the \quote {direct} node model, you can directly access the property
+table. But, with direct as well as wrapped nodes, you can also use setters and
+getters. The property table has no metatable so you can add your own one for
+alternative access if needed. In \CONTEXT\ you can best stay away from such hacks
+and use the provided mechanisms because otherwise you get a performance hit.
+
+\stopsection
+
+\startsection[title=The \LUA\ interface]
+
+The interface (in regular nodes as well as direct ones) is quite simple and
+provides five functions:
+
+\starttyping
+set_properties_mode(boolean,boolean)
+flush_properties_table()
+get_properties_table()
+getproperty(node_id)
+setproperty(node_id,value)
+\stoptyping
+
+By default this mechanism is disabled so that when it's not used, there is no
+overhead involved. With \type {set_properties_mode} the first argument determines
+if you enable or disable this mechanism. The properties themselves are untouched.
+When the second argument is \type {true} copied properties create a new table
+with a metatable pointing to the original. You can flush all properties with
+\type {flush_properties_table}.
+
+You can access and set properties with \type {getproperty} and \type
+{setproperty}. Instead you can also use the table approach, where you can reach
+the table with \type {get_properties_table}. Keep in mind that the normal and
+direct calls to this function return a different table.
+
+\stopsection
+
+\startsection[title=A few examples]
+
+The following examples use \CONTEXT\ but apart from the calls to the \type
+{context} namespace, they are rather generic. We have enabled the property
+mechanism with:
+
+\starttyping
+set_properties_mode(true)
+\stoptyping
+
+We fill a box:
+
+\startbuffer
+\newbox\MyPropertyBox
+
+\setbox\MyPropertyBox=\hbox{test}
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer[common]
+local list = tex.getbox("MyPropertyBox").list
+
+local function start()
+ context.starttabulate { "||||" }
+ context.HL()
+end
+
+local function stop()
+ context.HL()
+ context.stoptabulate()
+end
+
+local function row(n,p)
+ context.NC() context(tostring(n==p))
+ context.NC() context(tostring(n))
+ context.NC() context(tostring(p))
+ context.NC() context.NR()
+end
+\stopbuffer
+
+\typebuffer[common]
+
+We will demonstrate the four access models. First regular properties
+using functions:
+
+\startbuffer[example]
+for n in node.traverse(list) do
+ node.setproperty(n,{ vif = n })
+end
+start()
+for n in node.traverse(list) do
+ row(n,node.getproperty(n).vif)
+end
+stop()
+\stopbuffer
+
+\typebuffer[example] {\ttxx\ctxluabuffer[common,example]}
+
+We can use a table instead (in fact, we can use both approaches
+mixed:
+
+\startbuffer[example]
+local n_properties = node.get_properties_table()
+
+for n in node.traverse(list) do
+ n_properties[n] = { vit = n }
+ node.direct.setproperty(n,{ vdf = n })
+end
+start()
+for n in node.traverse(list) do
+ row(n,n_properties[n].vit)
+end
+stop()
+\stopbuffer
+
+\typebuffer[example] {\ttxx\ctxluabuffer[common,example]}
+
+The direct method looks the same, apart from a cast to direct:
+
+\startbuffer[example]
+for n in node.direct.traverse(node.direct.todirect(list)) do
+ node.direct.setproperty(n,{ vdf = n })
+end
+start()
+for n in node.direct.traverse(node.direct.todirect(list)) do
+ row(n,node.direct.getproperty(n).vdf)
+end
+stop()
+\stopbuffer
+
+\typebuffer[example] {\tt\ctxluabuffer[common,example]}
+
+Again, we can use the table approach:
+
+\startbuffer[example]
+local d_properties = node.direct.get_properties_table()
+
+for n in node.direct.traverse(node.direct.todirect(list)) do
+ d_properties[n] = { vdt = n }
+end
+start()
+for n in node.direct.traverse(node.direct.todirect(list)) do
+ row(n,d_properties[n].vdt)
+end
+stop()
+\stopbuffer
+
+\typebuffer[example] {\tt\ctxluabuffer[common,example]}
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/about/about-speed.tex b/doc/context/sources/general/manuals/about/about-speed.tex
new file mode 100644
index 000000000..4b4a376e8
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/about-speed.tex
@@ -0,0 +1,732 @@
+% language=uk
+
+\startcomponent about-speed
+
+\environment about-environment
+
+\startchapter[title=Speed]
+
+\startsection[title=Introduction]
+
+In the \quote {mk} and \type {hybrid} progress reports I have spend some words
+on speed. Why is speed this important?
+
+In the early days of \CONTEXT\ I often had to process documents with thousands of
+pages and hundreds of thousands of hyperlinks. You can imagine that this took a
+while, especially when all kind of ornaments had to be added to the page:
+backgrounds, buttons with their own backgrounds and offsets, hyperlink colors
+dependent on their state, etc. Given that multiple runs were needed, this could
+mean that you'd leave the machine running all night in order to get the final
+document.
+
+It was the time when computers got twice the speed with each iteration of
+hardware, so I suppose that it would run substantially faster on my current
+laptop, an old Dell M90 workhorse. Of course a recently added SSD drive adds a
+boost as well. But still, processing such documents on a machine with a 8Mhz 286
+processor and 640 megabytes of memory was close to impossible. But, when I
+compare the speed of core duo M90 with for instance an M4600 with a i5 \CPU\
+running the same clock speed as the M90, I see a factor 2 improvement at most. Of
+course going for a extremely clocked desktop will be much faster, but we're no
+longer seeing a tenfold speedup every few years. On the contrary: we see a shift
+multiple cores, often running at a lower clock speed, with the assumption that
+threaded applications are used. This scales perfectly for web services and
+graphic manipulations but not so much for \TEX. If we want go faster, we need to
+see where we can be more efficient within more or less frozen clock speeds.
+
+Of course there are some developments that help us. First of all, for programs
+like \TEX\ clever caching of files by the operating system helps a lot. Memory
+still becomes faster and \CPU\ cached become larger too. For large documents with
+lots of resources an SSD works out great. As \LUA\ uses floating point, speedup
+in that area also help with \LUATEX. We use virtual machines for \TEX\ related
+services and for some reason that works out quite well, as the underlying
+operating system does lots of housekeeping in parallel. But, with all maxing out,
+we finally end up at the software itself, and in \TEX\ this boils down to a core
+of compiled code along with lots of macro expansions and interpret \LUA\ code.
+
+In the end, the question remains what causes excessive runtimes. Is it the nature
+of the \TEX\ expansion engine? Is it bad macro writing? Is there too much
+overhead? If you notice how fast processing the \TEX\ book goes on modern
+hardware it is clear that the core engine is not the problem. It's no big deal to
+get 100 pages per second on documents that use relative a simple page builder and
+have macros that lack a flexible user interface.
+
+Take the following example:
+
+\starttyping
+\starttext
+\dorecurse{1000}{test\page}
+\stoptext
+\stoptyping
+
+We do nothing special here. We use the default Latin Modern fonts and process
+single words. No burden is put on the pagebuilder either. This way we get on a
+2.33 Ghz T7600 \CPU\ a performance of 185 pages per second. \footnote {In this
+case the mingw version was used. A version using the native \WINDOWS\ compiler
+runs somewhat faster, although this depends on the compiler options. \footnote
+{We've noticed that sometimes the mingw binaries are faster than native binaries,
+but sometimes they're slower.} With \LUAJITTEX\ the 185 pages per second become
+becomes 195 on a 1000 page document.} The estimated \LUA\ overhead in this 1000
+page document is some 1.5 to 2 seconds. The following table shows the performance
+on such a test document with different page numbers in pps (reported pages per
+second).
+
+\starttabulate[|r|r|]
+\HL
+\NC \bf \# pages \NC \bf pps \NC \NR
+\HL
+\NC 1 \NC 2 \NC \NR
+\NC 10 \NC 15 \NC \NR
+\NC 100 \NC 90 \NC \NR
+\NC 1000 \NC 185 \NC \NR
+\NC 10000 \NC 215 \NC \NR
+\HL
+\stoptabulate
+
+The startup time, measured on a zero page document, is 0.5 seconds. This includes
+loading the format, loading the embedded \LUA\ scripts and initializing them,
+initializing and loading the file database, locating and loading some runtime
+files and loading the absolute minumum number of fonts: a regular and math Latin
+Modern. A few years before this writing that was more than a second, and the gain
+is due to a slightly faster \LUA\ interpreter as well as improvements in
+\CONTEXT.
+
+So why does this matter at all, if on a larger document the startup time can be
+neglected? It does because when I have to implement a style for a project or are
+developing some functionality a fast edit||run||preview cycle is a must, if only
+because even a few second wait feels uncomfortable. On the other hand, when I
+process a manual of say 150 pages, which uses some tricks to explain matters, I
+don't care if the processing rate is between 5 and 15 pages per second, simply
+because you get (done) what you asked for. It mostly has to do with feeling
+comfortable.
+
+There is one thing to keep in mind: such measurements can vary over time, as they
+depend on several factors. Even in the trivial case we need to:
+
+\startitemize[packed]
+\startitem
+ load macros and \LUA\ code
+\stopitem
+\startitem
+ load additional files
+\stopitem
+\startitem
+ initialize the system, think of fonts and languages
+\stopitem
+\startitem
+ package the pages, which includes reverting to global document states
+\stopitem
+\startitem
+ create the final output stream (\PDF)
+\stopitem
+\stopitemize
+
+The simple one word per page test is not that slow, and normally for 1000 pages we
+measure around 200 pps. However, due to some small speedups (that somehow add up)
+in three months time I could gain a lot:
+
+\starttabulate[|r|r|r|r|]
+\HL
+\NC \bf \# pages \NC \bf Januari \NC \bf April \NC \bf May\rlap{\quad(2013)} \NR
+\HL
+\NC 1 \NC 2 \NC 2 \NC 2 \NC \NR
+\NC 10 \NC 15 \NC 17 \NC 17 \NC \NR
+\NC 100 \NC 90 \NC 109 \NC 110 \NC \NR
+\NC 1000 \NC 185 \NC 234 \NC 259 \NC \NR
+\NC 10000 \NC 215 \NC 258 \NC 289 \NC \NR
+\HL
+\stoptabulate
+
+Among the improvements in April were a faster output to the console (first
+prototyped in \LUA, later done in the \LUATEX\ engine itself), and a couple of
+low level \LUA\ optimizations. In May a dirty (maybe too tricky) global document
+state restore trick has beeing introduced. Although these changes give nice speed
+bump, they will mostly go unnoticed in more realistic documents. There we are
+happy if we end up in the 20 pps range. So, in practice a more than 10 percent
+speedup between Januari and April is just a dream. \footnote {If you wonder why I
+still bother with such things: sometimes speedups are just a side effect of
+trying to accomplish something else, like less verbose output in full tracing
+mode.}
+
+There are many cases where it does matter to squeeze out every second possible.
+We run workflows where some six documents are generated from one source. If we
+forget about the initial overhead of fetching the source from a remote server
+\footnote {In the user interface we report the time it takes to fetch the source
+so that the typesetter can't be blamed for delays.} gaining half a second per
+document (if we start frech each needs two runs at least) means that the user
+will see the first result one second faster and have them all in six less than
+before. In that case it makes sense to identify bottlenecks in the more high
+level mechanisms.
+
+And this is why during the development of \CONTEXT\ and the transition from
+\MKII\ to \MKIV\ quite some time has been spent on avoiding bottlenecks. And, at
+this point we can safely conclude that, in spite of more advanced functionality,
+the current version of \MKIV\ runs faster than the \MKII\ versions in most cases,
+especially if you take the additional functionality into account (like \UNICODE\
+input and fonts).
+
+\stopsection
+
+\startsection[title=The \TEX\ engine]
+
+Writing inefficient macros is not that hard. If they are used only a few times,
+for instance in setting up properties it plays no role. But if they're expanded
+many times it may make a difference. Because use and development of \CONTEXT\
+went hand in hand we always made sure that the overhead was kept at a minimum.
+
+\startsubject[title=The parbuilder]
+
+There are a couple of places where document processing in a traditional \TEX\
+engine gets a performance hit. Let's start with the parbuilder. Although the
+paragraph builder is quite fast it can responsible for a decent amount of runtime.
+It is also a fact that the parbuilder of the engines derived from original \TEX\
+are more complex. For instance, \OMEGA\ adds bidirectionality to the picture
+which involves some extra checking as well as more nodes in the list. The \PDFTEX\
+engine provides protrusion and expansions, and as that feature was primarily a
+topic of research it was never optimized.
+
+In \LUATEX\ the parbuilder is a mixture of the \PDFTEX\ and \OMEGA\ builders and
+adapted to the fact that we have split the hyphenation, ligature building,
+kerning and breaking a paragraph into lines. The protrusion and expansion code is
+still there but already for a few years I have alternative code for \LUATEX\ that
+simplifies the implementation and could in principle give a speed boost as well
+but till now we never found time to adapt the engine. Take the following test code:
+
+\ifdefined\tufte \else \let\tufte\relax \fi
+
+\starttyping
+\testfeatureonce{100}{\setbox0\hbox{\tufte \par}} \tufte \par
+\stoptyping
+
+In \MKIV\ we use \LUA\ for doing fonts so when we measure this bit we get the
+used time for typesetting our \type {\tufte} quote without breaking it into
+lines. A normal \LUATEX\ run needs 0.80 seconds and a \LUAJITTEX\ run takes 0.47
+seconds. \footnote {All measurements are on a Dell M90 laptop running Windows 8.
+I keep using this machine because it has a decent high res 4:3 screen. It's the
+same machine Luigi Scarso and I used when experimenting with \LUAJITTEX.}
+
+\starttyping
+\testfeatureonce{100}{\setbox0\vbox{\tufte \par}} \tufte \par
+\stoptyping
+
+In this case \LUATEX\ needs 0.80 seconds and \LUAJITTEX\ needs 0.50 seconds and
+as we break the list into lines, we can deduct that close to zero seconds are
+needed to break 100 samples. This (often used) sample text has the interesting
+property that it has many hyphenation points and always gives multiple hyphenated
+lines. So, the parbuilder, if no protrusion and expansion are used, is real fast!
+
+\starttyping
+\startparbuilder[basic]
+ \testfeatureonce{100}{\setbox0\vbox{\tufte \par}} \tufte \par
+\stopparbuilder
+\stoptyping
+
+Here we kick in our \LUA\ version of the par builder. This takes 1.50 seconds for
+\LUATEX\ and 0.90 seconds for \LUAJITTEX. So, \LUATEX\ needs 0.70 seconds to
+break the quote into lines while \LUAJITTEX\ needs 0.43. If we stick to stock
+\LUATEX, this means that a medium complex paragraph needs 0.007 seconds of \LUA\
+time and this is not that is not a time to be worried about. Of course these
+numbers are not that accurate but the measurements are consistent over multiple
+runs for a specific combination of \LUATEX\ and \MKIV. On a more modern machine
+it's probably also close to zero.
+
+These measurements demonstrate that we should add some nuance to the assumption
+that parbuilding takes time. For this we need to distinguish between traditional
+\TEX\ and \LUATEX. In traditional \TEX\ you build an horizontal box or vertical
+box. In \TEX\ speak these are called horizontal and vertical lists. The main text
+flow is a special case and called the main vertical list, but in this perspective
+you can consider it to be like a vertical box.
+
+Each vertical box is split into lines. These lines are packed into horizontal
+boxes. In traditional \TEX\ constructing a list starts with turning references to
+characters into glyphs and ligatures. Kerns get inserted between characters if
+the font requests that. When a vertical box is split into lines, discretionary
+nodes get inserted (hyphenation) and when font expansion or protrusion is enabled
+extra fonts with expanded dimensions get added.
+
+So, in the case of vertical box, building the paragraph is not really
+distinguished from ligaturing, kerning and hyphenation which means that the
+timing of this process is somewhat fuzzy. Also, because after the lines are
+identified some final packing of lines happens and the result gets added to a
+vertical list.
+
+In \LUATEX\ all these stages are split into hyphenation, ligature building,
+kerning, line breaking and finalizing. When the callbacks are not enabled the
+normal machinery kicks in but still the stages are clearly separated. In the case
+of \CONTEXT\ the font ligaturing and kerning get preceded by so called node mode
+font handling. This means that we have extra steps and there can be even more
+steps before and afterwards. And, hyphenation always happens on the whole list,
+contrary to traditional \TEX\ that interweaves this. Keep in mind that because we
+can box and unbox and in that process add extra text the whole process can get
+repeated several times for the same list. Of course already treated glyphs and
+kerns are normally kept as they are.
+
+So, because in \LUATEX\ the process of splitting into lines is separated we can
+safely conclude that it is real fast. Definitely compared to al the font related
+steps. So, let's go back to the tests and let's do the following:
+
+\starttyping
+\testfeatureonce{1000}{\setbox0\hbox{\tufte}}
+
+\testfeatureonce{1000}{\setbox0\vbox{\tufte}}
+
+\startparbuilder[basic]
+ \testfeatureonce{1000}{\setbox0\vbox{\tufte}}
+\stopparbuilder
+\stoptyping
+
+We've put the text into a macro so that we don't have interference from reading
+files. The test wrapper does the timing. The following measurements are somewhat
+rough but repetition gives similar results. \footnote {Before and between runs
+we do a garbage collection.}
+
+\starttabulate[|c|c|c|c|c|]
+\HL
+\NC \NC \bf engine \NC \bf method \NC \bf normal \NC \bf hz \NC \NR % comment
+\HL
+\NC 1 \NC luatex \NC tex hbox \NC ~9.64 \NC ~9.64 \NC \NR % baseline font feature processing, hyphenation etc: 9.74
+\NC 2 \NC \NC tex vbox \NC ~9.84 \NC 10.16 \NC \NR % 0.20 linebreak / 0.52 with hz -> 0.32 hz overhead (150pct more)
+\NC 3 \NC \NC lua vbox \NC 17.28 \NC 18.43 \NC \NR % 7.64 linebreak / 8.79 with hz -> 1.33 hz overhead ( 20pct more)
+\HL
+\NC 4 \NC luajittex \NC tex hbox \NC ~6.33 \NC ~6.33 \NC \NR % baseline font feature processing, hyphenation etc: 6.33
+\NC 5 \NC \NC tex vbox \NC ~6.53 \NC ~6.81 \NC \NR % 0.20 linebreak / 0.48 with hz -> 0.28 hz overhead (expected 0.32)
+\NC 6 \NC \NC lua vbox \NC 11.06 \NC 11.81 \NC \NR % 4.53 linebreak / 5.28 with hz -> 0.75 hz overhead
+\HL
+\stoptabulate
+
+In line~1 we see the basline: hyphenation, processing fonts and hpacking takes
+9.74 seconds. In the second line we see that breaking the 1000 paragraphs costs
+some 0.20 seconds and when expansion is enabled an extra 12 seconds is needed.
+This means that expansion takes 150\% more runtime. If we delegate the task to
+\LUA\ we need 7.64 seconds for breaking into lines which can not be neglected
+but is still ok given the fact that we break 1000 paragraphs. But, interesting
+is to see that our alternative expansion routine only adds 1.33 seconds which is
+less than 20\%. It must be said that the built|-|in method is not that efficient
+by design if only because it started out differently as part of research.
+
+When measured three months later, the numbers for regular \LUATEX\ (at that time
+version 0.77) with the latest \CONTEXT\ were: 8.52, 8.72 and 15.40 seconds for
+the normal run, which demonstrates that we should not draw too many conclusions
+from such measurements. It's the overal picture that matters.
+
+As with earlier timings, if we use \LUAJITTEX\ we see that the runtime of \LUA\
+is much lower (due to the virtual machine). Of course we're still 20 times slower
+than the built|-| in method but only 10 times slower when we use expansion. To put
+these numbers in perspective: 5 seconds for 1000 paragraphs.
+
+\starttyping
+\setupbodyfont[dejavu]
+
+\starttext
+ \dontcomplain \dorecurse{1000}{\tufte\par}
+\stoptext
+\stoptyping
+
+This results in 295 pages in the default layout and takes 17.8 seconds or 16.6
+pages per second. Expansion is not enabled.
+
+\starttext
+\startparbuilder[basic]
+ \dontcomplain \dorecurse{1000}{\tufte\par}
+\stopparbuilder
+\stoptext
+
+That one takes 24.7 seconds and runs at 11.9 pages per second. This is indeed
+slower but on a bit more modern machine I expect better results. We should also
+realize that with Dejavu being a relative large font a difficult paragraph like
+the tufte example gives overfull boxes which in turn is an indication that quite
+some alternative breaks are tried.
+
+When typeset with Latin Modern we don't get overfull boxes and interesting is
+that the native method needs less time (15.9 seconds or 14.1 pages per second)
+while the \LUA\ variant also runs a bit faster: 23.4 or 9.5 pages per second. The
+number of pages is 223 because this font is smaller by design.
+
+When we disable hyphenation the the Dejavu variant takes 16.5 (instead of 17.8)
+seconds and 23.1 (instead of 24.7) seconds for \LUA, so this process is not that
+demanding.
+
+For typesetting so many paragraphs without anything special it makes no sense to
+bother with using a \LUA\ based parbuilder. I must admit that I never had to typeset
+novels so all my 300 page runs are much longer anyway. Anyway, when at some point
+we introduce alternative parbuilding to \CONTEXT, the speed penalty is probably
+acceptable.
+
+Just to indicate that predictions are fuzzy: when we put a \type {\blank} between
+the paragraphs we end up with 313 pages and the traditional method takes 18.3
+while \LUA\ needs 23.6 seconds. One reason for this is that the whitespace is
+also handled by \LUA\ and in the pagebuilder we do some finalizing, so we
+suddenly get interference of other processes (as well as the garbage collector).
+Again an indication that we should not bother too much about speed. I try to make
+sure that the \LUA\ (as well as \TEX) code is reasonably efficient, so in
+practice it's the document style that is a more important factor than the
+parbuilder, it being the traditional one or the \LUA\ variant.
+
+\stopsubject
+
+\startsubject[title=Copying boxes]
+
+As soon as in \CONTEXT\ you start enhancing the page with headers and footers and
+backgrounds you will see that the pps rate drops. This is partly due to the fact
+that suddenly quite some macro expansion takes place in order to check what needs
+to happen (like font and color switches, offsets, overlays etc). But what has
+more impact is that we might end up with copying boxes and that takes time. Also,
+by wrapping and repackaging boxes, we add additional levels of recursion in
+postprocessing code.
+
+\stopsubject
+
+\startsubject[title=Macro expansion]
+
+Taco and I once calculated that \MKII\ spends some 4\% of the time in accessing
+the hash table. This is a clear indication that quite some macro expansions goes
+on. Due to the fact that when I rewrote \MKII\ into \MKIV\ I no longer had to
+take memory and other limitations into account, the codebase looks quite
+different. There we do have more expansion in the mechanism that deals with
+settings but the body of macros is much smaller and less parameters are passed.
+So, the overall performance is better.
+
+\stopsubject
+
+\startsubject[title=Fonts]
+
+Using a font has several aspects. First you have to define an instance. Then, when
+you use it for the first time, the font gets loaded from storage, initialized and
+is passed to \TEX. All these steps are quite optimized. If we process the following
+file:
+
+\starttyping
+\setupbodyfont[dejavu]
+
+\starttext
+ regular, {\it italic}, {\bf bold ({\bi italic})} and $m^a_th$
+\stoptext
+\stoptyping
+
+we get reported:
+
+\starttabulate[||T|]
+\NC \type{loaded fonts} \NC xits-math.otf xits-mathbold.otf \NC \NR
+\NC \NC dejavuserif-bold.ttf dejavuserif-bolditalic.ttf \NC \NR
+\NC \NC dejavuserif-italic.ttf dejavuserif.ttf \NC \NR
+\NC \type{fonts load time} \NC 0.374 seconds \NR
+\NC \type{runtime} \NC 1.014 seconds, 0.986 pages/second \NC \NR
+\stoptabulate
+
+So, six fonts are loaded and because XITS is used we also preload the math bold
+variant. Loading of text fonts is delayed but in order initialize math we need to
+preload the math fonts.
+
+If we don't define a bodyfont, a default set gets loaded: Latin Modern. In that
+case we get:
+
+\starttabulate[||T|]
+\NC \type{loaded fonts} \NC latinmodern-math.otf \NC \NR
+\NC \NC lmroman10-bolditalic.otf lmroman12-bold.otf \NC \NR
+\NC \NC lmroman12-italic.otf lmroman12-regular.otf \NC \NR
+\NC \type{fonts load time} \NC 0.265 seconds \NR
+\NC \type{runtime} \NC 0.874 seconds, 1.144 pages/second \NC \NR
+\stoptabulate
+
+Before we had native \OPENTYPE\ Latin Modern math fonts, it took slightly longer
+because we had to load many small \TYPEONE\ fonts and assemble a virtual math font.
+
+As soon as you start mixing more fonts and/or load additional weights and styles
+you will see these times increase. But if you use an already loaded font with
+a different featureset or scaled differently, the burden is rather low. It is
+safe to say that at this moment loading fonts is not a bottleneck.
+
+Applying fonts can be more demanding. For instance if you typeset Arabic or
+Devanagari the amount of node and font juggling definitely influences the total
+runtime. As the code is rather optimized there is not much we can do about it.
+It's the price that comes with flexibility. As far as I can tell getting the same
+results with \PDFTEX\ (if possible at all) or \XETEX\ is not taking less time. If
+you've split up your document in separate files you will seldom run more than a
+dozen pages which is then still bearable.
+
+If you are for instance typesetting a dictionary like document, it does not make
+sense to do all font switches by switching body fonts. Just defining a couple of
+font instances makes more sense and comes at no cost. Being already quite
+efficient given the complexity you should not expect impressive speedups in this
+area.
+
+\stopsubject
+
+\startsubject[title=Manipulations]
+
+The main manipulation that I have to do is to process \XML\ into something
+readable. Using the built||in parser and mapper already has some advantages
+and if applied in the right way it's also rather efficient. The more you restrict
+your queries, the better.
+
+Text manipulations using \LUA\ are often quite fast and seldom the reason for
+seeing slow processing. You can do lots of things at the \LUA\ end and still have
+all the \CONTEXT\ magic by using the \type {context} namespace and function.
+
+\stopsubject
+
+\startsubject[title=Multipass]
+
+You can try to save 1 second on a 20 second run but that is not that impressive
+if you need to process the document three times in order to get your cross
+references right. Okay you'd save 3 seconds but still to get result you needs
+some 60 seconds (unless you already have run the document before). If you have a
+predictable workflow you might know in advance that you only need two runs in
+case you can enforce that with \type {--runs=2}. Furthermore you can try to
+optimize the style by getting rid of redundant settings and inefficient font
+switches. But no matter what we optimize, unless we have a document with no cross
+references, sectioning and positioning, you often end up with the extra run,
+although \CONTEXT\ tries to minimize the number of needed runs needed.
+
+\stopsubject
+
+\startsubject[title=Trial runs]
+
+Some mechanisms, like extreme tables, need multiple passes and all but the last
+one are tagged as trial runs. Because in many cases only dimensions matter, we
+can disable some time consuming code in such case. For instance, at some point
+Alan Braslau and I found out that the new chemical manual ran real slow, mainly
+due to the tens of thousands of \METAPOST\ graphics. Adding support for trial
+runs to the chemical structure macros gave a fourfold improvement. The manual is
+still a slow|-|runner, but that is simply because it has so many runtime
+generated graphics.
+
+\stopsubject
+
+\stopsection
+
+\startsection[title=The \METAPOST\ library]
+
+When the \METAPOST\ library got included we saw a drastic speedup in processing
+document with lots of graphics. However, when \METAPOST\ got a different number
+system (native, double and decimal) the changed memory model immediately lead to
+a slow down. On one 150 page manual which a graphic on each page I saw the
+\METAPOST\ runtime go up from about half a second upto more than 5 seconds. In
+this case I was able to rewrite some core \METAFUN\ macro to better suit the new
+model, but you might not be so lucky. So more careful coding is needed. Of course
+if you only have a few graphics, you can just ignore the change.
+
+\stopsection
+
+\startsection[title=The \LUA\ interpreter]
+
+Where the \TEX\ part of \LUATEX\ is compiled, the \LUA\ code gets interpreted,
+converted into bytecode, and ran by the virtual machine. \LUA\ is by design quite
+portable, which means that the virtual machine is not optimized for a specific
+target. The \LUAJIT\ interpreter on the other hand is written in assembler and
+available for only some platforms, but the virtual machine is about twice as
+fast. The just||in||time part of \LUAJIT\ is not if much help and even can slow
+down processing.
+
+When we moved from \LUA~5.1 to 5.2 we found out that there was some speedup but
+it's hard to say why. There has been changes in the way strings are dealt with
+(\LUA\ hashes strings) and we use lots of strings, really lots. There has been
+changes in the garbage collection and during a run lots of garbage needs to be
+collected. There are some fundamental changes in so called environments and who
+knows what impact that has.
+
+If you ever tried to measure the performance of \LUA, you probably have noticed
+that it is quite fast. This means that it makes no sense to optimize code that
+gets visited only occasionally. But some of the \CONTEXT\ code gets exercised a
+lot, for instance all code that deals with fonts. We use attributes a lot and
+checking them is for good reason not the fastest code. But given the often
+advanced functionality that it makes possible we're willing to pay the price.
+It's also functionality that you seldom need all at the same time and for
+straightforward text only documents all that code is never executed.
+
+When writing \TEX\ or \LUA\ code I spent a lot of time making it as efficient as
+possible in terms of performance and memory usage. The sole reason for that is
+that we happen to process documents where a lot of functionality is combined, so
+if many small speed||ups accumulate to a noticeable performance gain it's worth
+the effort.
+
+So, where does \LUA\ influence runtime? First of all we use \LUA\ do deal with all
+in- and output as well as locating files in the \TEX\ directory structure. Because
+that code is partly shared with the script manager (\type {mtxrun}) it is optimized
+but some more is possible if needed. It is already not the most easy to read code,
+so I don't want to introduce even more obscurity.
+
+Quite some code deals with loading, preparing and caching fonts. That code is
+mostly optimized for memory usage although speed is also okay. This code is only
+called when a font is loaded for the first time (after an update). After that
+loading is at matter of milliseconds. When a text gets typeset and when fonts are
+processed in so called node mode, depending on the script and|/|or enabled
+features, a substantial amount of time is spent in \LUA. There is still a bit
+complex dealing with inserting kerns but future \LUATEX\ will carry kerning
+in the glyph node so there we can gain some runtime.
+
+If a page has 4000 characters and if font features as well as other manipulations
+demand 10 runs over the text, we have 40.000 checks of nodes and potential
+actions. Each involves an id check, maybe a subtype check, maybe some attribute
+checking and possibly some action. So, if we have 200.000 (or more) function
+calls to the per page \TEX\ end it might add up to a lot. Around the time that we
+went to \LUA~5.2 and played with \LUAJITTEX, the node accessors have been sped
+up. This gave indeed a measurable speedup but not on an average document, only on
+the more extreme documents or features. Because the \MKIV\ \LUA\ code goes from
+experimental to production to final, some improvements are made in the process
+but there is not much to gain there. We just have to wait till computers get
+faster, \CPU\ cache get bigger, branch prediction improves, floating point
+calculations take less time, memory is speedy, and flash storage is the standard.
+
+The \LUA\ code is plugged into the \TEX\ machinery via callbacks. For
+instance each time a box is build several callbacks are triggered, even if it's
+an empty box or just an extra wrapper. Take for instance this:
+
+\starttyping
+\hbox \bgroup
+ \hskip \zeropoint
+ \hbox \bgroup
+ test
+ \egroup
+ \hskip \zeropoint
+\egroup
+\stoptyping
+
+Of course you won't come up with this code as it doesn't do much good but macros
+that you use can definitely produce this. For instance, the zero skip can be a
+left and right margin that happen to be. For 10.000 iterations I measured 0.78
+seconds while the text one takes 0.62 seconds:
+
+\starttyping
+\hbox \bgroup
+ \hbox \bgroup
+ test
+ \egroup
+\egroup
+\stoptyping
+
+Why is this? One reason is that a zero skip results in a node and the more nodes
+we have the more memory (de)allocation takes place and the more nodes in the list
+need to be checked. Of course the relative difference is less when we have more
+text. So how can we improve this? The following variant, at the cost of some
+testing takes just as much time.
+
+\starttyping
+\hbox \bgroup
+ \hbox \bgroup
+ \scratchdimen\zeropoint
+ \ifdim\scratchdimen=\zeropoint\else\hskip\scratchdimen\fi
+ test
+ \ifdim\scratchdimen=\zeropoint\else\hskip\scratchdimen\fi
+ \egroup
+\egroup
+\stoptyping
+
+As does this one, but the longer the text, the slower it gets as one of the two
+copies needs to be skipped.
+
+\starttyping
+\hbox \bgroup
+ \hbox \bgroup
+ \scratchdimen\zeropoint
+ \ifdim\scratchdimen=\zeropoint
+ test%
+ \else
+ \hskip\scratchdimen
+ test%
+ \hskip\scratchdimen
+ \fi
+ \egroup
+\egroup
+\stoptyping
+
+Of course most speedup is gained when we don't package at all, so if we test
+before we package but such an optimization is seldom realistic because much more
+goes on and we cannot check for everything. Also, 10.000 is a lot while 0.10
+seconds is something we can live with. By the way, compare the following
+
+\starttyping
+\hbox \bgroup
+ \hskip\zeropoint
+ test%
+ \hskip\zeropoint
+\egroup
+
+\hbox \bgroup
+ \kern\zeropoint
+ test%
+ \kern\zeropoint
+\egroup
+\stoptyping
+
+The first variant is less efficient that the second one, because a skip
+effectively is a glue node pointing to a specification node while a kern is just
+a simple node with the width stored in it. \footnote {On the \LUATEX\ agenda is
+moving the glue spec into the glue node.} I must admit that I seldom keep in mind
+to use kerns instead of skips when possible if only because one needs to be sure
+to be in the right mode, horizontal or vertical, so additional commands might be
+needed.
+
+\stopsection
+
+\startsection[title=Macros]
+
+Are macros a bottleneck? In practice not really. Of course we have optimized the
+core \CONTEXT\ macros pretty well, but one reason for that is that we have a
+rather extensive set of configuration and definition mechanisms that rely heavily
+on inheritance. Where possible all that code is written in a way that macro
+expansion won't hurt too much. because of this users themselves can be more
+liberal in coding. There is a lot going on deep down and if you turn on tracing
+macros you can get horrified. But, not all shown code paths are entered. During the
+move (and rewrite) from \MKII\ to \MKIV\ quite some bottlenecks that result from
+limitations of machines and memory have been removed and as a result the macro
+expansion part is somewhat faster, which nicely compensates the fact that we
+have a more advanced but slower inheritance subsystem. Readability of code and
+speed are probably nicely balanced by now.
+
+Once a macro is read in, its internal representation is pretty efficient. For
+instance references to macro names are just pointers into a hash table. Of
+course, when a macro is seen in your source, that name has to be looked up, but
+that's a fast action. Using short names in the running text for instance really
+doesn't speed up processing much. Switching font sets on the other hand does, as
+then quite some checking happens and the related macros are pretty extensive.
+However, once a font is loaded references to it a pretty fast. Just keep in mind
+that if you define something inside a group, in most cases it got forgotten. So,
+if you need something more often, just define it at the outer level.
+
+\stopsection
+
+\startsection[title=Optimizing code]
+
+Optimizing only makes sense if used very often and called frequently or when the
+problem to solve is demanding. An example of code that gets done often is page
+building, where we pack together many layout elements. Font switches can also be
+time consuming, if defined wrong. These can happen for instance for formulas,
+marked words, cross references, margin notes, footnotes (often a complete
+bodyfont switch), table cells, etc. Yet another is clever vertical spacing that
+happens between structural elements. All these mechanisms are reasonably
+optimized.
+
+I can safely say that deep down \CONTEXT\ is no that inefficient, given what it
+has to do. But when a style for instance does redundant or unnecessary massive
+font switches you are wasting runtime. I dare to say that instead of trying to
+speed up code (for instance by redefining macros) you can better spend the time
+in making styles efficient. For instance having 10 \type {\blank}'s in a row
+will work out rather well but takes time. If you know that a section head has no
+raised or lowered text and no math, you can consider using \type {\definefont} to
+define the right size (especially if it is a special size) instead of defining
+an extra bodyfont size and switch to that as it includes setting up related sizes
+and math.
+
+It might sound like using \LUA\ for some tasks makes \CONTEXT\ slower, but this
+is not true. Of course it's hard to prove because by now we also have more
+advanced font support, cleaner math mechanisms, additional features especially in
+especially structure related mechanisms, etc. There are also mechanisms that are
+faster, for instance extreme tables (a follow up on natural tables) and mixed
+column modes. Of course on the previously mentioned 300 page simple paragraphs
+with simple Latin text the \PDFTEX\ engine is much faster than \LUATEX, also
+because simple fonts are used. But for many of todays document this engine is no
+longer an options. For instance in our \XML\ processing in multiple languages,
+\LUATEX\ beats \PDFTEX. There is not that much to optimize left, so most speed up
+has to come from faster machines. And this is not much different from the past:
+processing 300 page document on a 4.7Mhz 8086 architecture was not much fun and
+we're not even talking of advanced macros here. Faster machines made more clever
+and user friendly systems possible but at the cost of runtime, to even if
+machines have become many times faster, processing still takes time. On the other
+hand, \CONTEXT\ will not become more complex than it is now, so from now on we
+can benefit from faster \CPU's, memory and storage.
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/about/about-threequarters.tex b/doc/context/sources/general/manuals/about/about-threequarters.tex
new file mode 100644
index 000000000..fe6f4a95b
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/about-threequarters.tex
@@ -0,0 +1,330 @@
+% language=uk
+
+\startcomponent about-calls
+
+\environment about-environment
+
+\logo[CRITED]{CritEd}
+
+\startchapter[title={\LUATEX\ 0.79}]
+
+% Hans Hagen, PRAGMA ADE, April 2014
+
+\startsection[title=Introduction]
+
+To some it might look as if not much has been done in \LUATEX\ development but
+this is not true. First of all, the 2013 versions (0.75-0.77) are quite stable
+and can be used for production so there is not much buzz about new things.
+\CONTEXT\ users normally won't even notice changes because most is encapsulated
+in functionality that itself won't change. The binaries on the \type
+{contextgarden.net} are always the latest so an update results in binaries that
+are in sync with the \LUA\ and \TEX\ code. Okay, behaviour might become better
+but that could also be the side effect of better coding. Of course some more
+fundamental changes can result in temporary bugs but those are normally easy to
+solve.
+
+Here I will only mention the most important work done. I'll leave out the
+technical details as they can be found in the manual and in articles that were
+written during development. The version discussed is 0.79.
+
+\stopsection
+
+\startsection[title=Speed]
+
+One of the things we spent a lot of time on is speed. This is of course of more
+importance for a system like \CONTEXT\ that can spend more than half its time in
+\LUA, but eventually we all benefit from it. For the average user it doesn't
+matter much if a run takes a few seconds but in automated workflows these
+accumulate and if a process has to produce 5 documents of 20 pages (each
+demanding a few runs) or a few documents of several hundreds of pages, it might
+make a difference. In the \CRITED\ project we aim for complex documents produced
+from \XML\ at a rate of 20 pages per second, at least for stock \LUATEX.
+\footnote {This might look slow but a lot is happening there. A simple 100 page
+document with one word per page processes at more that 500 pages per second but
+this is hard to match with more realistic documents. When processing data from
+bases using the \CLD\ interface getting 50 pages per seconds is no problem.} In
+an edit|-|preview cycle it feels better if we don't use more than half a second
+for a couple of pages: loading the \TEX\ format, initializing the \LUA\ modules,
+loading fonts, typesetting and producing a proper \PDF\ file. We also want to be
+prepared for the ultra portable computers where multiple cores compensate the
+lower frequency, which harms \TEX\ as sequential processor using one core only.
+
+An important aspect of speedup is that it must not obscure the code. This is why
+the easiest way to achieve it is to use a faster variant of \LUA, and \LUAJIT\
+with its faster virtual machine, is a solution for that. We are aware of the
+fact that processors not necessarily become faster, but that on the other hand
+memory becomes larger. Disk speed also got better with the arrival of
+flash based storage. Because \LUATEX\ should run smoothly on future portable
+devices, the more we can gain now, the better it gets in the future. A decent
+basic performance is possible and we don't have to focus too much on memory and
+disk access and mostly need to keep an eye on basic \CPU\ cycles. Although we
+have some ideas about improving performance, tests demonstrate that \LUATEX\
+is not doing that bad and we don't have to change it's internals. In fact, if we
+do it might as well result in a drastic slowdown!
+
+One interesting performance factor is console output. Because \TEX\ outputs
+immediately with hardly any buffering, it depends a lot on the speed of console
+output. This itself depends on what console is used. \UNIX\ consoles normally
+have some buffering and refresh delay built in. There the speed depends on what
+fonts are used and to what extend the output gets interpreted (escape sequences
+are an example). I've run into cases where a run took seconds more because of a
+bad choice of fonts. On \WINDOWS\ it's more complicated since there the standard
+console (like \TEX) is unbuffered. The good news is that there are several
+alternatives that perform quite well, like console2 and conemu. These
+alternatives buffer output and have refresh delays. But still, on a very high res
+screen, with a large console window logging has impact. Interesting is that when
+I run from the editor (SciTE) output is pretty fast, so normally I never notice
+much of a slowdown. Of course these kind of performance issues can hit you more
+when you work in a remote terminal.
+
+The reason why I mention this is that in order to provide a user feedback about
+issues, there has to be some logging and depending on the kind of use, more or
+less is needed. This means that on the \CONTEXT\ mailing list we sometimes get
+complaints about the amount of logging. It is for this reason that much logging is
+optional and all logging can be disabled as well. Because we go through \LUA\
+we have some control over efficiency too. In the current \LUATEX\ release most
+logging can now be intercepted, including error messages.
+
+Talking of a slowdown, in the \CRITED\ project we have to deal with real large
+indices (tens of thousands of entries) and we found out that in the case of
+interactive variants (register entry to text and back) the use of \LUAJITTEX\
+could bring down a run to a grinding halt. In the end, after much testing we
+figured out that a suboptimal string hashing function was the culprit and we did
+extensive tests with both the \LUAJIT, \LUA\ 5.1 and \LUA\ 5.2 variant. We ended
+up by replacing the \LUAJIT\ hash function by the the \LUA\ 5.1 one which is a
+relative easy operation. Because \LUAJIT\ can address less memory than regular
+\LUA\ it will always be a matter of testing if \LUAJITTEX\ can be used instead of
+\LUATEX. Standard document processing (reports and such) is normally no problem
+but processing large amounts of data from databases can be an issue.
+
+In the process of cleaning up the code base for sure we will also find ways to
+make things run even smoother. But, in any case, version 0.80 is already a good
+benchmark for what can be achieved.
+
+\stopsection
+
+\startsection[title=Nodes]
+
+One of the bottlenecks in the hybrid approach is crossing the so called C
+boundary. This is not really a bottleneck, unless we're talking of many millions
+of function calls. In practice this only happens in for instance more extreme
+font handling (Devanagari or sometimes Arabic). If performance is really an issue
+one can fallback on a more direct node access model. Of course the overhead of
+access should be compared to other related activities: one can gain .25 seconds
+on a run in using the direct access model, but if the whole runs takes 25
+seconds, it can be neglected. If the price paid for it is less readable code it
+should only be done deep down a macro package where no user even sees the code.
+We use this access model in the \CONTEXT\ core modules and so far it looks quite
+okay, especially for more extensive manipulations. The gain in speed is quite
+noticeable if you use the more advanced features of \CONTEXT.
+
+There can be some changes in the node model but not that drastic as the current
+model is quite ok and also stays close to original \TEX\ so that existing
+documentation still applies. One of the changes will be that glue spec (sub)nodes
+will disappear and glue nodes will carry that information. Direction whatsits
+will become first class nodes as they are part of the concept (whatsits
+normally relate to extensions) and the same might happen with image nodes. As a
+side effect we can restructure the code so that it becomes more readable. Some
+experimental \PDFTEX\ functionality will be removed as it can be done better with
+callbacks.
+
+\stopsection
+
+\startsection[title=The parbuilder and HZ]
+
+As we started from \PDFTEX\ we inherit also its experimental code and character.
+One of the objectives is to separate font- and backend as good as possible. We
+have already achieved a lot and apart from bringing consistency in the code, the
+biggest change has been a partial rewrite of the hz code, especially the way
+fonts are managed. Instead of making copies of fonts with different properties,
+we now carry information in the relevant nodes. The backend code already got away
+from multiple fonts by using transformation of the base font instead of
+additional font instances, so this was a natural adaptation. This was actually
+triggered by the fact that a \LUA\ based par builder demonstrated that this made
+sense. The new approach uses less memory and is a bit faster (at least in
+theory).
+
+In callbacks it makes life easier when a node list has a predictable structure.
+For instance, the result of a paragraph broken into lines still has discretionary
+nodes. Is that really needed? Lines can have left- or rightskip nodes, depending
+on the fact if they were set. Math nodes can disappear as part of a cleanup in
+the line break code, but this is unfortunate when one expects them to be
+somewhere in the list in a callback. All this will be made consistent. These are
+issues we will look into on the way to version 1.0.
+
+I occasionally play with the \LUA\ based par builder and it is quite compatible
+even if we take the floating point \LUA\ aspect into account. However when using
+hz the outcome is different: sometimes better, sometimes worse. Personally I
+don't care too much as long as it's consistent. Features like hz are for special
+cases anyway and can never be stable over years if only because fonts evolve. And
+we're talking of bordercase typesetting: narrow columns that no matter what method is
+used will never look okay. \footnote {Some people don't like larger spaces, others
+don't like stretched glyphs.}
+
+\stopsection
+
+\startsection[title=The backend]
+
+The separation of front- and backend is more a pet project. There is some
+experimental code that will get removed or integrated. We try to make the backend
+consistent from the \TEX\ as well as \LUA\ end and some is reflected in
+additional features and callbacks.
+
+Some of the variables that can be set (the \LUA\ counterparts of the \type {\pdf..}
+token registers at the \TEX\ end) are now consistent with each other and avoid
+going via pseudo tokenization. Typical aspects of a backend that only a few users
+will notice but nevertheless needed work.
+
+The merge of engines also resulted in inconsistencies in function names, like using
+\type {pdf_} in function names where nothing \type {PDF} is involved.
+
+\stopsection
+
+\startsection[title=Backlinks]
+
+In callbacks we mostly deal with node lists. At the \TEX\ end of course we also
+have these lists but there it is quite clear what gets done with them. This means
+that there is no need for double linked lists. It also means that what is known
+as the head of a list can in fact be in the middle. The for \TEX\ characteristic
+nesting model has resulted in stacks and current pointers. The code uses so
+called temp nodes to point at the head node.
+
+As a consequence in \LUATEX, where we present a double linked list, before the
+current version one could run into cases where for instance a head node had a
+prev pointer, even one that made no sense. As said, no big deal in \TEX\ but in
+the hands of a user who manipulates the node list it can be dramatic. The current
+version has cleaned head nodes as well as consistent backlinks, but of course we
+keep the internals mostly unchanged because we stay close to the Knuthian
+original when possible. \footnote {Even with extensions the original
+documentation still covers most of what happens.}
+
+\stopsection
+
+\startsection[title=Properties]
+
+Sometimes you want to associate additional information to a node. A natural way
+to do this is attributes. These can be set at the \TEX\ and \LUA\ end and
+accessed at the \LUA\ end. At the \LUA\ end one can have tables with nodes as
+indices and store extra information but that has the disadvantage that one has no
+clue if such information is current: nodes come and go and are recycled.
+
+For this reason we now have a global properties table where each allocated node
+can have a table with whatever information users might like to store. This itself
+is not special, but the nice thing is that when a node is freed, that information
+is also freed. So, you cannot run into old data. When nodes are copied its
+properties are also copied. The overhead, when not used, is close to zero, which is
+always an objective when extending the core engine.
+
+Of course this model demands that macro package somehow controls consistent use
+but that is not different from what already has to be done. Also, simple
+extensions like this avoid hard codes solutions, which is also something we want
+to avoid.
+
+\stopsection
+
+\startsection[title=\LUA\ calls]
+
+We have so called user nodes that can carry a number, string, token list or node
+list. We now have added \LUA\ to this repertoire. In fact, we now could use only a
+\LUA\ variable and we might have done so in retrospect, but for the moment we we
+stick to the current model of several basic types. The \LUA\ variable can be
+anything and it is up to the user (in some callback) to deal with them.
+
+User nodes are not to be confused with late \LUA\ nodes. You can store a function
+call in a user node but that's about it. You can at a later moment decide to call
+that function but it's still an explicit action. The value of a late \LUA\ node
+on the other hand is dealt with automatically during shipout. When the value is a
+string it gets interpreted as \LUA, but new is that when the value is a function
+it will get called. At that moment we have access to some of the current backend
+properties, like locations.
+
+\stopsection
+
+\startsection[title=Artefacts]
+
+Because \LUATEX\ took code from \PDFTEX, that is built upon \ETEX, which in turn
+is an extension to \TEX, and \OMEGA, that also extends \TEX, there is code that
+no longer makes sense for us. Combine that with the fact that some code carries
+signatures of translated \PASCAL\ to \CCODE, we have some cleanup to do as follow
+up on the not to be underestimated move to \CCODE. This is an ongoing process but
+also fun doing. Luigi and I spend many hours exploring venues and have
+interesting Skype sessions that can easily sidetrack, and with Taco getting more
+time for \LUATEX\ we expect to get most of our (still growing) todo list done.
+
+Because \LUATEX\ started out as an experiment, there is some old code around. For
+instance, we used to have multiple instances and this still shows in some places.
+We can simplify the \LUA\ to \TEX\ interface a bit and clean up the \LUA\ global
+state handling, but we're not in a big hurry with this. Experiments have been
+done with some extensions to the writer code but they are hold back to after the
+cleanup.
+
+In a similar fashion we have sped up the way \LUA\ keyword and values get
+resolved. Already early in the development we did this for critical code like
+passing \LUA\ font tables to \TEX, followed by accessing nodes, but now we have
+done that for most code. There is still some to do but it has the side effect of
+not only consistency but also of helping to document the interface. Of course we
+learn a lot about the \LUA\ internals too. The C macro system is of great help
+here, although the mentioned pascal conversion (web2c) and merged engines have
+resulted in some inconsistency that needs to be cleaned up before we start
+documenting more of the internals (another subproject we want to finish before
+retirement).
+
+\stopsection
+
+\startsection[title=Callbacks]
+
+There are a few more callbacks and most of them come from the tracker. The
+backend now has page related callbacks, the \LUA\ error handler can be
+intercepted. Error messages that consist of multiple pieces are handled better
+too. When a file is opened and closed a callback is now possible. Technically we
+could have combined this with the already present callbacks but as in \TEX\
+synchronization matters these new callbacks relate to current message callbacks
+that show \type {[]}, \type {{}}, \type {<>} and|/|or \type {<<>>} fenced
+filenames, where the later were introduced in successive backend code.
+
+\stopsection
+
+\startsection[title=\LUA]
+
+We currently use \LUA\ 5.2 but a next version will show up soon. Because \LUA\
+5.3 introduces a hybrid number model, this will be one of the next things to play
+with. It could work out well, because \TEX\ is internally integer based (scaled
+points) but you never know. It could be that we need to check existing code for
+serialization and printing issues but normally that will not lead to
+compatibility issues. We could even decide to stick to \LUA\ 5.2 or at least wait
+till all has stabilized. There is some basic support for \UTF\ in 5.3 but in
+\CONTEXT\ we don't depend on that. In practice hardly any processing takes place
+that assumes that \UTF\ is more than a sequence of bytes and \LUA\ can handle
+bytes quite well.
+
+\stopsection
+
+\startsection[title=\CONTEXT]
+
+Of course the development of \LUATEX\ has consequences for \CONTEXT. For
+instance, existing code is used to test alternative solutions and sometimes these
+make it into the core. Some new features are used immediately, like the more
+consistent control over \PDF\ properties, but others have to wait till the new
+binary is more widespread. \footnote {Normally dissemination is rather fast
+because the contextgarden provides recent binaries. The new windows binaries
+often show up within hours after the repository has been updated.}
+
+Some of the improvement in the code base directly relate to \CONTEXT\ activities.
+For instance the \CRITED\ project (complex critical editions) uncovered some
+hashing issues with \LUAJIT\ that have been taken care of now. The (small)
+additions to the \PDF\ backend resulted in a partial cleanup of relatively old
+\CONTEXT\ backend code.
+
+Although some more complex mechanisms, like multi|-|columns are being reworked,
+it is still needed to open up a bit more of the \TEX\ internals, so we have some
+work to do. As usual, version 0.80 doesn't mean that only 0.20 has to be done to
+get to 1.00, as development is not a linear process. The jump from 0.77 to 0.79
+for instance involved a lot of work (exploration as well as testing). But as long
+as it's fun to do, time doesn't matter much. As we've said before: we're in no
+hurry.
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/about/about-titlepage.tex b/doc/context/sources/general/manuals/about/about-titlepage.tex
new file mode 100644
index 000000000..392fdb1be
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/about-titlepage.tex
@@ -0,0 +1,31 @@
+\startcomponent about-titlepage
+
+\environment about-environment
+
+\setvariables
+ [document]
+ [title=about,
+ subtitle=luatex and context,
+ author=hans hagen]
+
+\startpagemakeup
+
+ \startMPcode
+
+ StartPage ;
+
+ fill Page enlarged 5mm withcolor \MPcolor{maincolor} ;
+
+ draw anchored.lrt(image(draw textext("\getvariable{document}{title}") xsized(.750PaperWidth) withcolor white),(lrcorner Page) shifted (-PaperWidth/20, PaperWidth/ 5)) ;
+ draw anchored.lrt(image(draw textext("\getvariable{document}{subtitle}") xsized(.750PaperWidth) withcolor white),(lrcorner Page) shifted (-PaperWidth/20, PaperWidth/10)) ;
+ draw anchored.urt(image(draw textext("\getvariable{document}{author}") xsized(.375PaperWidth) rotated 90 withcolor white),(urcorner Page) shifted (-PaperWidth/20,-PaperWidth/20)) ;
+
+ setbounds currentpicture to Page ;
+
+ StopPage ;
+
+ \stopMPcode
+
+\stoppagemakeup
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/about/about.tex b/doc/context/sources/general/manuals/about/about.tex
new file mode 100644
index 000000000..65e5fde2c
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/about.tex
@@ -0,0 +1,47 @@
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
+%
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+%
+% comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt
+% Group journal or otherwise. Thanks to the editors for corrections. Also thanks
+% to users for testing, feedback and corrections.
+
+\environment about-environment
+
+\startproduct about
+
+\component about-titlepage
+
+\startfrontmatter
+ \component about-contents
+ \component about-introduction
+\stopfrontmatter
+
+\startbodymatter
+ \component about-mathstackers
+ \component about-speed
+ \component about-mathstyles
+ \component about-calls
+ \component about-jitting
+ \component about-mobility
+ \component about-hz
+ \component about-nodes
+ \component about-expanding
+ \component about-nuts
+ \component about-hashing
+ \component about-properties
+ \component about-luafunctions
+ \component about-metafun
+ \component about-threequarters
+\stopbodymatter
+
+\stopproduct
diff --git a/doc/context/sources/general/manuals/about/demo-data.lua b/doc/context/sources/general/manuals/about/demo-data.lua
new file mode 100644
index 000000000..96b55acd0
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/demo-data.lua
@@ -0,0 +1,10 @@
+return {
+ { 1, 2 },
+ { 2, 4 },
+ { 3, 3 },
+ { 4, 2 },
+ { 5, 2 },
+ { 6, 3 },
+ { 7, 4 },
+ { 8, 1 },
+} \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/about/luatest-hash-luajittex-073-JIT20.lua b/doc/context/sources/general/manuals/about/luatest-hash-luajittex-073-JIT20.lua
new file mode 100644
index 000000000..ab09ee429
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/luatest-hash-luajittex-073-JIT20.lua
@@ -0,0 +1,406 @@
+return {
+ ["comment"]="jit 20 hashing",
+ ["datetime"]=1393683029,
+ ["samples"]={
+ {
+ ["center"]=1.125,
+ ["edges"]=1.656,
+ ["left"]=1.125,
+ ["none"]=0.016,
+ ["right"]=1.125,
+ ["text"]="a",
+ },
+ {
+ ["center"]=1.11,
+ ["edges"]=1.594,
+ ["left"]=1.109,
+ ["none"]=0,
+ ["right"]=1.141,
+ ["text"]="ab",
+ },
+ {
+ ["center"]=1.124,
+ ["edges"]=1.651,
+ ["left"]=1.094,
+ ["none"]=0.016,
+ ["right"]=1.109,
+ ["text"]="abc",
+ },
+ {
+ ["center"]=1.014,
+ ["edges"]=1.653,
+ ["left"]=1.147,
+ ["none"]=0.0090000000000003,
+ ["right"]=1.149,
+ ["text"]="abcd",
+ },
+ {
+ ["center"]=1.008,
+ ["edges"]=1.646,
+ ["left"]=1.142,
+ ["none"]=0.0080000000000027,
+ ["right"]=1.153,
+ ["text"]="abcde",
+ },
+ {
+ ["center"]=1.014,
+ ["edges"]=1.652,
+ ["left"]=1.157,
+ ["none"]=0.0090000000000003,
+ ["right"]=1.14,
+ ["text"]="abcdef",
+ },
+ {
+ ["center"]=1.006,
+ ["edges"]=1.652,
+ ["left"]=1.155,
+ ["none"]=0.0079999999999956,
+ ["right"]=1.214,
+ ["text"]="abcdefg",
+ },
+ {
+ ["center"]=1.17,
+ ["edges"]=1.642,
+ ["left"]=1.256,
+ ["none"]=0.0080000000000027,
+ ["right"]=1.169,
+ ["text"]="abcdefgh",
+ },
+ {
+ ["center"]=1.169,
+ ["edges"]=1.644,
+ ["left"]=1.216,
+ ["none"]=0.0080000000000027,
+ ["right"]=2.557,
+ ["text"]="abcdefghi",
+ },
+ {
+ ["center"]=1.172,
+ ["edges"]=1.636,
+ ["left"]=1.296,
+ ["none"]=0.0090000000000003,
+ ["right"]=2.048,
+ ["text"]="abcdefghij",
+ },
+ {
+ ["center"]=1.172,
+ ["edges"]=1.639,
+ ["left"]=2.841,
+ ["none"]=0.0079999999999956,
+ ["right"]=2.621,
+ ["text"]="abcdefghijk",
+ },
+ {
+ ["center"]=1.196,
+ ["edges"]=1.638,
+ ["left"]=1.761,
+ ["none"]=0.0090000000000003,
+ ["right"]=1.977,
+ ["text"]="abcdefghijkl",
+ },
+ {
+ ["center"]=1.201,
+ ["edges"]=1.635,
+ ["left"]=1.589,
+ ["none"]=0.0079999999999956,
+ ["right"]=2.56,
+ ["text"]="abcdefghijklm",
+ },
+ {
+ ["center"]=1.194,
+ ["edges"]=1.634,
+ ["left"]=1.592,
+ ["none"]=0.0079999999999956,
+ ["right"]=1.983,
+ ["text"]="abcdefghijklmn",
+ },
+ {
+ ["center"]=1.2,
+ ["edges"]=1.637,
+ ["left"]=2.722,
+ ["none"]=0.0090000000000003,
+ ["right"]=2.537,
+ ["text"]="abcdefghijklmno",
+ },
+ {
+ ["center"]=1.221,
+ ["edges"]=1.639,
+ ["left"]=2.279,
+ ["none"]=0.0079999999999956,
+ ["right"]=1.955,
+ ["text"]="abcdefghijklmnop",
+ },
+ {
+ ["center"]=1.219,
+ ["edges"]=1.639,
+ ["left"]=1.889,
+ ["none"]=0.0090000000000003,
+ ["right"]=2.511,
+ ["text"]="abcdefghijklmnopq",
+ },
+ {
+ ["center"]=1.202,
+ ["edges"]=1.652,
+ ["left"]=1.157,
+ ["none"]=0.0080000000000098,
+ ["right"]=2.035,
+ ["text"]="abcdefghijklmnopqr",
+ },
+ {
+ ["center"]=1.203,
+ ["edges"]=1.635,
+ ["left"]=1.486,
+ ["none"]=0.0090000000000146,
+ ["right"]=2.583,
+ ["text"]="abcdefghijklmnopqrs",
+ },
+ {
+ ["center"]=1.224,
+ ["edges"]=1.643,
+ ["left"]=1.404,
+ ["none"]=0.0080000000000098,
+ ["right"]=2.012,
+ ["text"]="abcdefghijklmnopqrst",
+ },
+ {
+ ["center"]=1.224,
+ ["edges"]=1.639,
+ ["left"]=1.056,
+ ["none"]=0.0089999999999861,
+ ["right"]=2.56,
+ ["text"]="abcdefghijklmnopqrstu",
+ },
+ {
+ ["center"]=1.223,
+ ["edges"]=1.648,
+ ["left"]=1.111,
+ ["none"]=0.0090000000000146,
+ ["right"]=2.008,
+ ["text"]="abcdefghijklmnopqrstuv",
+ },
+ {
+ ["center"]=1.226,
+ ["edges"]=1.648,
+ ["left"]=1.084,
+ ["none"]=0.0089999999999861,
+ ["right"]=2.555,
+ ["text"]="abcdefghijklmnopqrstuvw",
+ },
+ {
+ ["center"]=1.239,
+ ["edges"]=1.645,
+ ["left"]=1.071,
+ ["none"]=0.0089999999999861,
+ ["right"]=1.951,
+ ["text"]="abcdefghijklmnopqrstuvwx",
+ },
+ {
+ ["center"]=1.239,
+ ["edges"]=1.645,
+ ["left"]=1.048,
+ ["none"]=0.0080000000000098,
+ ["right"]=2.518,
+ ["text"]="abcdefghijklmnopqrstuvwxy",
+ },
+ {
+ ["center"]=1.234,
+ ["edges"]=1.635,
+ ["left"]=1.062,
+ ["none"]=0.0090000000000146,
+ ["right"]=2.069,
+ ["text"]="abcdefghijklmnopqrstuvwxyz",
+ },
+ {
+ ["center"]=1.236,
+ ["edges"]=1.636,
+ ["left"]=1.076,
+ ["none"]=0.0090000000000146,
+ ["right"]=2.616,
+ ["text"]="abcdefghijklmnopqrstuvwxyzA",
+ },
+ {
+ ["center"]=1.26,
+ ["edges"]=1.639,
+ ["left"]=1.085,
+ ["none"]=0.0080000000000098,
+ ["right"]=2.065,
+ ["text"]="abcdefghijklmnopqrstuvwxyzAB",
+ },
+ {
+ ["center"]=1.27,
+ ["edges"]=1.651,
+ ["left"]=1.06,
+ ["none"]=0.0090000000000146,
+ ["right"]=2.671,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABC",
+ },
+ {
+ ["center"]=1.274,
+ ["edges"]=1.648,
+ ["left"]=1.117,
+ ["none"]=0.0099999999999909,
+ ["right"]=2.075,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCD",
+ },
+ {
+ ["center"]=1.27,
+ ["edges"]=1.652,
+ ["left"]=1.056,
+ ["none"]=0.0080000000000098,
+ ["right"]=2.631,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDE",
+ },
+ {
+ ["center"]=1.294,
+ ["edges"]=1.656,
+ ["left"]=1.09,
+ ["none"]=0.0080000000000098,
+ ["right"]=2.048,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEF",
+ },
+ {
+ ["center"]=1.301,
+ ["edges"]=1.647,
+ ["left"]=1.079,
+ ["none"]=0.0089999999999861,
+ ["right"]=2.548,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFG",
+ },
+ {
+ ["center"]=1.301,
+ ["edges"]=1.653,
+ ["left"]=1.06,
+ ["none"]=0.0080000000000382,
+ ["right"]=2.043,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGH",
+ },
+ {
+ ["center"]=1.347,
+ ["edges"]=1.649,
+ ["left"]=1.0530000000001,
+ ["none"]=0.0079999999999814,
+ ["right"]=2.618,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHI",
+ },
+ {
+ ["center"]=1.388,
+ ["edges"]=1.643,
+ ["left"]=1.086,
+ ["none"]=0.0079999999999814,
+ ["right"]=2.018,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJ",
+ },
+ {
+ ["center"]=1.417,
+ ["edges"]=1.667,
+ ["left"]=1.034,
+ ["none"]=0.0090000000000146,
+ ["right"]=2.535,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJK",
+ },
+ {
+ ["center"]=1.43,
+ ["edges"]=1.639,
+ ["left"]=1.163,
+ ["none"]=0.0079999999999814,
+ ["right"]=2.018,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKL",
+ },
+ {
+ ["center"]=1.454,
+ ["edges"]=1.643,
+ ["left"]=1.051,
+ ["none"]=0.0080000000000382,
+ ["right"]=2.548,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLM",
+ },
+ {
+ ["center"]=1.489,
+ ["edges"]=1.639,
+ ["left"]=1.117,
+ ["none"]=0.0079999999999814,
+ ["right"]=1.98,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN",
+ },
+ {
+ ["center"]=1.495,
+ ["edges"]=1.637,
+ ["left"]=1.051,
+ ["none"]=0.0079999999999814,
+ ["right"]=2.51,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNO",
+ },
+ {
+ ["center"]=1.498,
+ ["edges"]=1.642,
+ ["left"]=1.052,
+ ["none"]=0.0090000000000146,
+ ["right"]=2.069,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP",
+ },
+ {
+ ["center"]=1.502,
+ ["edges"]=1.642,
+ ["left"]=1.084,
+ ["none"]=0.0090000000000146,
+ ["right"]=2.643,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQ",
+ },
+ {
+ ["center"]=1.524,
+ ["edges"]=1.641,
+ ["left"]=1.172,
+ ["none"]=0.0090000000000146,
+ ["right"]=2.052,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQR",
+ },
+ {
+ ["center"]=1.523,
+ ["edges"]=1.649,
+ ["left"]=1.064,
+ ["none"]=0.0080000000000382,
+ ["right"]=2.61,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRS",
+ },
+ {
+ ["center"]=1.522,
+ ["edges"]=1.64,
+ ["left"]=1.193,
+ ["none"]=0.0079999999999814,
+ ["right"]=2.04,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRST",
+ },
+ {
+ ["center"]=1.509,
+ ["edges"]=1.64,
+ ["left"]=1.029,
+ ["none"]=0.0090000000000146,
+ ["right"]=2.557,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTU",
+ },
+ {
+ ["center"]=1.533,
+ ["edges"]=1.642,
+ ["left"]=1.172,
+ ["none"]=0.0089999999999577,
+ ["right"]=2.038,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV",
+ },
+ {
+ ["center"]=1.541,
+ ["edges"]=1.645,
+ ["left"]=1.078,
+ ["none"]=0.0079999999999814,
+ ["right"]=2.586,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVW",
+ },
+ {
+ ["center"]=1.535,
+ ["edges"]=1.643,
+ ["left"]=1.114,
+ ["none"]=0.0079999999999814,
+ ["right"]=2.107,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWX",
+ },
+ },
+}
diff --git a/doc/context/sources/general/manuals/about/luatest-hash-luajittex-073-LUA51-40-6.lua b/doc/context/sources/general/manuals/about/luatest-hash-luajittex-073-LUA51-40-6.lua
new file mode 100644
index 000000000..91a7b34f0
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/luatest-hash-luajittex-073-LUA51-40-6.lua
@@ -0,0 +1,406 @@
+return {
+ ["comment"]="lua 51 max 40 hash 2^6 bytes",
+ ["datetime"]=1393867414,
+ ["samples"]={
+ {
+ ["center"]=1.094,
+ ["edges"]=1.684,
+ ["left"]=1.078,
+ ["none"]=0.016,
+ ["right"]=1.078,
+ ["text"]="a",
+ },
+ {
+ ["center"]=1.116,
+ ["edges"]=1.657,
+ ["left"]=1.098,
+ ["none"]=0.008,
+ ["right"]=1.112,
+ ["text"]="ab",
+ },
+ {
+ ["center"]=1.109,
+ ["edges"]=1.646,
+ ["left"]=1.091,
+ ["none"]=0.0079999999999991,
+ ["right"]=1.108,
+ ["text"]="abc",
+ },
+ {
+ ["center"]=1.126,
+ ["edges"]=1.653,
+ ["left"]=1.095,
+ ["none"]=0.0090000000000003,
+ ["right"]=1.108,
+ ["text"]="abcd",
+ },
+ {
+ ["center"]=1.131,
+ ["edges"]=1.647,
+ ["left"]=1.099,
+ ["none"]=0.0090000000000003,
+ ["right"]=1.104,
+ ["text"]="abcde",
+ },
+ {
+ ["center"]=1.135,
+ ["edges"]=1.648,
+ ["left"]=1.102,
+ ["none"]=0.0090000000000003,
+ ["right"]=1.11,
+ ["text"]="abcdef",
+ },
+ {
+ ["center"]=1.13,
+ ["edges"]=1.65,
+ ["left"]=1.099,
+ ["none"]=0.0090000000000003,
+ ["right"]=1.113,
+ ["text"]="abcdefg",
+ },
+ {
+ ["center"]=1.123,
+ ["edges"]=1.64,
+ ["left"]=1.108,
+ ["none"]=0.0090000000000003,
+ ["right"]=1.116,
+ ["text"]="abcdefgh",
+ },
+ {
+ ["center"]=1.127,
+ ["edges"]=1.646,
+ ["left"]=1.107,
+ ["none"]=0.0090000000000003,
+ ["right"]=1.115,
+ ["text"]="abcdefghi",
+ },
+ {
+ ["center"]=1.132,
+ ["edges"]=1.645,
+ ["left"]=1.114,
+ ["none"]=0.0090000000000003,
+ ["right"]=1.12,
+ ["text"]="abcdefghij",
+ },
+ {
+ ["center"]=1.137,
+ ["edges"]=1.646,
+ ["left"]=1.121,
+ ["none"]=0.0090000000000003,
+ ["right"]=1.126,
+ ["text"]="abcdefghijk",
+ },
+ {
+ ["center"]=1.144,
+ ["edges"]=1.646,
+ ["left"]=1.115,
+ ["none"]=0.0090000000000003,
+ ["right"]=1.121,
+ ["text"]="abcdefghijkl",
+ },
+ {
+ ["center"]=1.158,
+ ["edges"]=1.648,
+ ["left"]=1.117,
+ ["none"]=0.0079999999999956,
+ ["right"]=1.128,
+ ["text"]="abcdefghijklm",
+ },
+ {
+ ["center"]=1.168,
+ ["edges"]=1.655,
+ ["left"]=1.121,
+ ["none"]=0.010000000000005,
+ ["right"]=1.129,
+ ["text"]="abcdefghijklmn",
+ },
+ {
+ ["center"]=1.174,
+ ["edges"]=1.657,
+ ["left"]=1.12,
+ ["none"]=0.0090000000000003,
+ ["right"]=1.132,
+ ["text"]="abcdefghijklmno",
+ },
+ {
+ ["center"]=1.205,
+ ["edges"]=1.65,
+ ["left"]=1.118,
+ ["none"]=0.0090000000000003,
+ ["right"]=1.127,
+ ["text"]="abcdefghijklmnop",
+ },
+ {
+ ["center"]=1.232,
+ ["edges"]=1.655,
+ ["left"]=1.115,
+ ["none"]=0.0090000000000003,
+ ["right"]=1.129,
+ ["text"]="abcdefghijklmnopq",
+ },
+ {
+ ["center"]=1.263,
+ ["edges"]=1.66,
+ ["left"]=1.079,
+ ["none"]=0.0090000000000003,
+ ["right"]=1.134,
+ ["text"]="abcdefghijklmnopqr",
+ },
+ {
+ ["center"]=1.273,
+ ["edges"]=1.656,
+ ["left"]=1.138,
+ ["none"]=0.0080000000000098,
+ ["right"]=1.134,
+ ["text"]="abcdefghijklmnopqrs",
+ },
+ {
+ ["center"]=1.306,
+ ["edges"]=1.659,
+ ["left"]=1.123,
+ ["none"]=0.0090000000000146,
+ ["right"]=1.134,
+ ["text"]="abcdefghijklmnopqrst",
+ },
+ {
+ ["center"]=1.331,
+ ["edges"]=1.663,
+ ["left"]=1.124,
+ ["none"]=0.0090000000000146,
+ ["right"]=1.137,
+ ["text"]="abcdefghijklmnopqrstu",
+ },
+ {
+ ["center"]=1.346,
+ ["edges"]=1.677,
+ ["left"]=1.135,
+ ["none"]=0.0089999999999861,
+ ["right"]=1.15,
+ ["text"]="abcdefghijklmnopqrstuv",
+ },
+ {
+ ["center"]=1.349,
+ ["edges"]=1.682,
+ ["left"]=1.137,
+ ["none"]=0.0089999999999861,
+ ["right"]=1.151,
+ ["text"]="abcdefghijklmnopqrstuvw",
+ },
+ {
+ ["center"]=1.326,
+ ["edges"]=1.662,
+ ["left"]=1.12,
+ ["none"]=0.0079999999999814,
+ ["right"]=1.131,
+ ["text"]="abcdefghijklmnopqrstuvwx",
+ },
+ {
+ ["center"]=1.326,
+ ["edges"]=1.677,
+ ["left"]=1.12,
+ ["none"]=0.0090000000000146,
+ ["right"]=1.134,
+ ["text"]="abcdefghijklmnopqrstuvwxy",
+ },
+ {
+ ["center"]=1.329,
+ ["edges"]=1.689,
+ ["left"]=1.122,
+ ["none"]=0.0089999999999861,
+ ["right"]=1.136,
+ ["text"]="abcdefghijklmnopqrstuvwxyz",
+ },
+ {
+ ["center"]=1.328,
+ ["edges"]=1.706,
+ ["left"]=1.126,
+ ["none"]=0.0090000000000146,
+ ["right"]=1.147,
+ ["text"]="abcdefghijklmnopqrstuvwxyzA",
+ },
+ {
+ ["center"]=1.329,
+ ["edges"]=1.722,
+ ["left"]=1.13,
+ ["none"]=0.0090000000000146,
+ ["right"]=1.145,
+ ["text"]="abcdefghijklmnopqrstuvwxyzAB",
+ },
+ {
+ ["center"]=4.739,
+ ["edges"]=1.758,
+ ["left"]=1.14,
+ ["none"]=0.0080000000000098,
+ ["right"]=1.155,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABC",
+ },
+ {
+ ["center"]=5.212,
+ ["edges"]=1.778,
+ ["left"]=1.147,
+ ["none"]=0.0089999999999861,
+ ["right"]=1.169,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCD",
+ },
+ {
+ ["center"]=5.438,
+ ["edges"]=1.784,
+ ["left"]=1.173,
+ ["none"]=0.0090000000000146,
+ ["right"]=1.195,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDE",
+ },
+ {
+ ["center"]=5.288,
+ ["edges"]=1.782,
+ ["left"]=1.175,
+ ["none"]=0.0090000000000146,
+ ["right"]=1.2,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEF",
+ },
+ {
+ ["center"]=5.698,
+ ["edges"]=1.797,
+ ["left"]=1.181,
+ ["none"]=0.0080000000000098,
+ ["right"]=1.201,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFG",
+ },
+ {
+ ["center"]=5.676,
+ ["edges"]=1.805,
+ ["left"]=1.201,
+ ["none"]=0.0090000000000146,
+ ["right"]=1.218,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGH",
+ },
+ {
+ ["center"]=5.933,
+ ["edges"]=1.822,
+ ["left"]=1.215,
+ ["none"]=0.0079999999999814,
+ ["right"]=1.23,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHI",
+ },
+ {
+ ["center"]=5.795,
+ ["edges"]=1.83,
+ ["left"]=1.23,
+ ["none"]=0.0089999999999577,
+ ["right"]=1.251,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJ",
+ },
+ {
+ ["center"]=5.933,
+ ["edges"]=1.842,
+ ["left"]=1.234,
+ ["none"]=0.0080000000000382,
+ ["right"]=1.257,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJK",
+ },
+ {
+ ["center"]=5.953,
+ ["edges"]=1.849,
+ ["left"]=1.251,
+ ["none"]=0.0080000000000382,
+ ["right"]=1.273,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKL",
+ },
+ {
+ ["center"]=6.297,
+ ["edges"]=1.845,
+ ["left"]=1.26,
+ ["none"]=0.0089999999999577,
+ ["right"]=1.289,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLM",
+ },
+ {
+ ["center"]=6.005,
+ ["edges"]=1.841,
+ ["left"]=1.273,
+ ["none"]=0.0090000000000146,
+ ["right"]=1.295,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN",
+ },
+ {
+ ["center"]=6.303,
+ ["edges"]=1.843,
+ ["left"]=1.285,
+ ["none"]=0.0090000000000146,
+ ["right"]=1.312,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNO",
+ },
+ {
+ ["center"]=6.11,
+ ["edges"]=1.852,
+ ["left"]=1.309,
+ ["none"]=0.0079999999999814,
+ ["right"]=1.325,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP",
+ },
+ {
+ ["center"]=6.672,
+ ["edges"]=1.871,
+ ["left"]=1.319,
+ ["none"]=0.0090000000000146,
+ ["right"]=1.337,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQ",
+ },
+ {
+ ["center"]=6.417,
+ ["edges"]=1.838,
+ ["left"]=1.305,
+ ["none"]=0.0089999999999577,
+ ["right"]=1.33,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQR",
+ },
+ {
+ ["center"]=6.69,
+ ["edges"]=1.843,
+ ["left"]=1.303,
+ ["none"]=0.0079999999999814,
+ ["right"]=1.328,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRS",
+ },
+ {
+ ["center"]=6.4,
+ ["edges"]=1.852,
+ ["left"]=1.31,
+ ["none"]=0.0090000000000146,
+ ["right"]=1.33,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRST",
+ },
+ {
+ ["center"]=7.058,
+ ["edges"]=1.853,
+ ["left"]=1.312,
+ ["none"]=0.0090000000000146,
+ ["right"]=1.33,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTU",
+ },
+ {
+ ["center"]=6.736,
+ ["edges"]=1.847,
+ ["left"]=1.308,
+ ["none"]=0.0079999999999814,
+ ["right"]=1.331,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV",
+ },
+ {
+ ["center"]=7.123,
+ ["edges"]=1.85,
+ ["left"]=1.305,
+ ["none"]=0.0090000000000146,
+ ["right"]=1.326,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVW",
+ },
+ {
+ ["center"]=6.893,
+ ["edges"]=1.848,
+ ["left"]=1.305,
+ ["none"]=0.0090000000000146,
+ ["right"]=1.331,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWX",
+ },
+ },
+} \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/about/luatest-hash-luajittex-073-LUA51.lua b/doc/context/sources/general/manuals/about/luatest-hash-luajittex-073-LUA51.lua
new file mode 100644
index 000000000..f11fa024f
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/luatest-hash-luajittex-073-LUA51.lua
@@ -0,0 +1,406 @@
+return {
+ ["comment"]="lua 5.1 hashing",
+ ["datetime"]=1393675147,
+ ["samples"]={
+ {
+ ["center"]=1.11,
+ ["edges"]=1.625,
+ ["left"]=1.094,
+ ["none"]=0,
+ ["right"]=1.157,
+ ["text"]="a",
+ },
+ {
+ ["center"]=1.133,
+ ["edges"]=1.659,
+ ["left"]=1.111,
+ ["none"]=0,
+ ["right"]=1.125,
+ ["text"]="ab",
+ },
+ {
+ ["center"]=1.133,
+ ["edges"]=1.659,
+ ["left"]=1.122,
+ ["none"]=0.0090000000000003,
+ ["right"]=1.128,
+ ["text"]="abc",
+ },
+ {
+ ["center"]=1.132,
+ ["edges"]=1.668,
+ ["left"]=1.119,
+ ["none"]=0.0079999999999991,
+ ["right"]=1.128,
+ ["text"]="abcd",
+ },
+ {
+ ["center"]=1.141,
+ ["edges"]=1.661,
+ ["left"]=1.122,
+ ["none"]=0.0079999999999991,
+ ["right"]=1.131,
+ ["text"]="abcde",
+ },
+ {
+ ["center"]=1.141,
+ ["edges"]=1.66,
+ ["left"]=1.121,
+ ["none"]=0.0090000000000003,
+ ["right"]=1.134,
+ ["text"]="abcdef",
+ },
+ {
+ ["center"]=1.14,
+ ["edges"]=1.667,
+ ["left"]=1.12,
+ ["none"]=0.0090000000000003,
+ ["right"]=1.129,
+ ["text"]="abcdefg",
+ },
+ {
+ ["center"]=1.14,
+ ["edges"]=1.662,
+ ["left"]=1.116,
+ ["none"]=0.0090000000000003,
+ ["right"]=1.128,
+ ["text"]="abcdefgh",
+ },
+ {
+ ["center"]=1.137,
+ ["edges"]=1.66,
+ ["left"]=1.112,
+ ["none"]=0.0079999999999956,
+ ["right"]=1.124,
+ ["text"]="abcdefghi",
+ },
+ {
+ ["center"]=1.146,
+ ["edges"]=1.659,
+ ["left"]=1.116,
+ ["none"]=0.0080000000000027,
+ ["right"]=1.127,
+ ["text"]="abcdefghij",
+ },
+ {
+ ["center"]=1.15,
+ ["edges"]=1.664,
+ ["left"]=1.121,
+ ["none"]=0.0090000000000003,
+ ["right"]=1.132,
+ ["text"]="abcdefghijk",
+ },
+ {
+ ["center"]=1.168,
+ ["edges"]=1.674,
+ ["left"]=1.122,
+ ["none"]=0.0090000000000003,
+ ["right"]=1.135,
+ ["text"]="abcdefghijkl",
+ },
+ {
+ ["center"]=3.021,
+ ["edges"]=1.677,
+ ["left"]=1.128,
+ ["none"]=0.0090000000000003,
+ ["right"]=1.139,
+ ["text"]="abcdefghijklm",
+ },
+ {
+ ["center"]=3.952,
+ ["edges"]=1.676,
+ ["left"]=1.129,
+ ["none"]=0.0090000000000003,
+ ["right"]=1.142,
+ ["text"]="abcdefghijklmn",
+ },
+ {
+ ["center"]=3.309,
+ ["edges"]=1.673,
+ ["left"]=1.124,
+ ["none"]=0.0090000000000003,
+ ["right"]=1.138,
+ ["text"]="abcdefghijklmno",
+ },
+ {
+ ["center"]=3.999,
+ ["edges"]=1.68,
+ ["left"]=1.121,
+ ["none"]=0.0090000000000003,
+ ["right"]=1.134,
+ ["text"]="abcdefghijklmnop",
+ },
+ {
+ ["center"]=3.405,
+ ["edges"]=1.678,
+ ["left"]=1.13,
+ ["none"]=0.0080000000000098,
+ ["right"]=1.144,
+ ["text"]="abcdefghijklmnopq",
+ },
+ {
+ ["center"]=4.034,
+ ["edges"]=1.686,
+ ["left"]=1.134,
+ ["none"]=0.0079999999999956,
+ ["right"]=1.142,
+ ["text"]="abcdefghijklmnopqr",
+ },
+ {
+ ["center"]=3.998,
+ ["edges"]=1.69,
+ ["left"]=1.133,
+ ["none"]=0.0090000000000146,
+ ["right"]=1.145,
+ ["text"]="abcdefghijklmnopqrs",
+ },
+ {
+ ["center"]=4.145,
+ ["edges"]=4.488,
+ ["left"]=1.133,
+ ["none"]=0.0089999999999861,
+ ["right"]=1.148,
+ ["text"]="abcdefghijklmnopqrst",
+ },
+ {
+ ["center"]=4.095,
+ ["edges"]=1.759,
+ ["left"]=1.138,
+ ["none"]=0.0079999999999814,
+ ["right"]=1.152,
+ ["text"]="abcdefghijklmnopqrstu",
+ },
+ {
+ ["center"]=4.238,
+ ["edges"]=4.466,
+ ["left"]=1.144,
+ ["none"]=0.0079999999999814,
+ ["right"]=1.154,
+ ["text"]="abcdefghijklmnopqrstuv",
+ },
+ {
+ ["center"]=4.441,
+ ["edges"]=1.743,
+ ["left"]=1.141,
+ ["none"]=0.0090000000000146,
+ ["right"]=1.154,
+ ["text"]="abcdefghijklmnopqrstuvw",
+ },
+ {
+ ["center"]=4.404,
+ ["edges"]=4.455,
+ ["left"]=1.153,
+ ["none"]=0.0090000000000146,
+ ["right"]=1.163,
+ ["text"]="abcdefghijklmnopqrstuvwx",
+ },
+ {
+ ["center"]=4.531,
+ ["edges"]=1.747,
+ ["left"]=1.151,
+ ["none"]=0.0080000000000098,
+ ["right"]=1.162,
+ ["text"]="abcdefghijklmnopqrstuvwxy",
+ },
+ {
+ ["center"]=4.585,
+ ["edges"]=4.466,
+ ["left"]=3.902,
+ ["none"]=0.0090000000000146,
+ ["right"]=4.392,
+ ["text"]="abcdefghijklmnopqrstuvwxyz",
+ },
+ {
+ ["center"]=4.851,
+ ["edges"]=1.727,
+ ["left"]=33.17,
+ ["none"]=0.0080000000000098,
+ ["right"]=4.341,
+ ["text"]="abcdefghijklmnopqrstuvwxyzA",
+ },
+ {
+ ["center"]=5.002,
+ ["edges"]=4.959,
+ ["left"]=4.508,
+ ["none"]=0.0090000000000146,
+ ["right"]=4.642,
+ ["text"]="abcdefghijklmnopqrstuvwxyzAB",
+ },
+ {
+ ["center"]=36.952,
+ ["edges"]=1.747,
+ ["left"]=32.597,
+ ["none"]=0.0090000000000146,
+ ["right"]=4.65,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABC",
+ },
+ {
+ ["center"]=59.268,
+ ["edges"]=5.001,
+ ["left"]=4.613,
+ ["none"]=0.0089999999999577,
+ ["right"]=4.617,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCD",
+ },
+ {
+ ["center"]=42.982,
+ ["edges"]=1.747,
+ ["left"]=33.058,
+ ["none"]=0.0080000000000382,
+ ["right"]=4.696,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDE",
+ },
+ {
+ ["center"]=39.54,
+ ["edges"]=4.953,
+ ["left"]=4.438,
+ ["none"]=0.0090000000000146,
+ ["right"]=4.9359999999999,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEF",
+ },
+ {
+ ["center"]=69.576,
+ ["edges"]=1.7379999999999,
+ ["left"]=32.999,
+ ["none"]=0.0090000000000146,
+ ["right"]=4.874,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFG",
+ },
+ {
+ ["center"]=43.781,
+ ["edges"]=4.961,
+ ["left"]=4.84,
+ ["none"]=0.0080000000000382,
+ ["right"]=4.9749999999999,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGH",
+ },
+ {
+ ["center"]=40.142,
+ ["edges"]=1.744,
+ ["left"]=33.765,
+ ["none"]=0.0090000000000146,
+ ["right"]=4.994,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHI",
+ },
+ {
+ ["center"]=70.239,
+ ["edges"]=5.114,
+ ["left"]=4.7800000000001,
+ ["none"]=0.0090000000000146,
+ ["right"]=5.213,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJ",
+ },
+ {
+ ["center"]=46.93,
+ ["edges"]=1.742,
+ ["left"]=32.366,
+ ["none"]=0.0079999999999245,
+ ["right"]=5.117,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJK",
+ },
+ {
+ ["center"]=43.434,
+ ["edges"]=5.1499999999999,
+ ["left"]=4.5730000000001,
+ ["none"]=0.0080000000000382,
+ ["right"]=5.23,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKL",
+ },
+ {
+ ["center"]=76.315,
+ ["edges"]=1.752,
+ ["left"]=32.632,
+ ["none"]=0.0080000000000382,
+ ["right"]=5.3120000000001,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLM",
+ },
+ {
+ ["center"]=51.809,
+ ["edges"]=5.1949999999999,
+ ["left"]=4.5729999999999,
+ ["none"]=0.0080000000000382,
+ ["right"]=5.4829999999999,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN",
+ },
+ {
+ ["center"]=46.811,
+ ["edges"]=1.7719999999999,
+ ["left"]=32.4,
+ ["none"]=0.0080000000000382,
+ ["right"]=5.595,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNO",
+ },
+ {
+ ["center"]=87.013,
+ ["edges"]=5.1410000000001,
+ ["left"]=4.961,
+ ["none"]=0.0090000000000146,
+ ["right"]=5.527,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP",
+ },
+ {
+ ["center"]=55.775,
+ ["edges"]=1.7800000000002,
+ ["left"]=32.732,
+ ["none"]=0.0089999999997872,
+ ["right"]=5.624,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQ",
+ },
+ {
+ ["center"]=49.956,
+ ["edges"]=5.5519999999999,
+ ["left"]=5.0459999999998,
+ ["none"]=0.0090000000000146,
+ ["right"]=5.893,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQR",
+ },
+ {
+ ["center"]=495.147,
+ ["edges"]=1.819,
+ ["left"]=32.684,
+ ["none"]=0.0090000000000146,
+ ["right"]=5.8970000000002,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRS",
+ },
+ {
+ ["center"]=542.566,
+ ["edges"]=5.482,
+ ["left"]=4.982,
+ ["none"]=0.0080000000002656,
+ ["right"]=5.9839999999999,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRST",
+ },
+ {
+ ["center"]=66.082,
+ ["edges"]=1.835,
+ ["left"]=32.42,
+ ["none"]=0.0090000000000146,
+ ["right"]=5.8340000000003,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTU",
+ },
+ {
+ ["center"]=97.62,
+ ["edges"]=5.6189999999997,
+ ["left"]=5.0569999999998,
+ ["none"]=0.0090000000000146,
+ ["right"]=6.172,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV",
+ },
+ {
+ ["center"]=531.977,
+ ["edges"]=1.8630000000003,
+ ["left"]=32.873,
+ ["none"]=0.0090000000000146,
+ ["right"]=6.1799999999998,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVW",
+ },
+ {
+ ["center"]=576.093,
+ ["edges"]=5.6260000000002,
+ ["left"]=5.4200000000001,
+ ["none"]=0.0090000000000146,
+ ["right"]=6.306,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWX",
+ },
+ },
+}
diff --git a/doc/context/sources/general/manuals/about/luatest-hash-luatex-073-LUA52-40-6.lua b/doc/context/sources/general/manuals/about/luatest-hash-luatex-073-LUA52-40-6.lua
new file mode 100644
index 000000000..201f67096
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/luatest-hash-luatex-073-LUA52-40-6.lua
@@ -0,0 +1,406 @@
+return {
+ ["comment"]="lua 52 hashing 40 max 2^6 bytes",
+ ["datetime"]=1393862849,
+ ["samples"]={
+ {
+ ["center"]=1.198,
+ ["edges"]=1.723,
+ ["left"]=1.154,
+ ["none"]=0.026,
+ ["right"]=1.202,
+ ["text"]="a",
+ },
+ {
+ ["center"]=1.202,
+ ["edges"]=1.728,
+ ["left"]=1.156,
+ ["none"]=0.026000000000001,
+ ["right"]=1.199,
+ ["text"]="ab",
+ },
+ {
+ ["center"]=1.21,
+ ["edges"]=1.731,
+ ["left"]=1.174,
+ ["none"]=0.026,
+ ["right"]=1.203,
+ ["text"]="abc",
+ },
+ {
+ ["center"]=1.216,
+ ["edges"]=1.743,
+ ["left"]=1.177,
+ ["none"]=0.026,
+ ["right"]=1.207,
+ ["text"]="abcd",
+ },
+ {
+ ["center"]=1.221,
+ ["edges"]=1.738,
+ ["left"]=1.18,
+ ["none"]=0.026,
+ ["right"]=1.21,
+ ["text"]="abcde",
+ },
+ {
+ ["center"]=1.256,
+ ["edges"]=1.758,
+ ["left"]=1.209,
+ ["none"]=0.027000000000001,
+ ["right"]=1.219,
+ ["text"]="abcdef",
+ },
+ {
+ ["center"]=1.236,
+ ["edges"]=1.741,
+ ["left"]=1.196,
+ ["none"]=0.027000000000001,
+ ["right"]=1.234,
+ ["text"]="abcdefg",
+ },
+ {
+ ["center"]=1.23,
+ ["edges"]=1.742,
+ ["left"]=1.187,
+ ["none"]=0.025999999999996,
+ ["right"]=1.218,
+ ["text"]="abcdefgh",
+ },
+ {
+ ["center"]=1.217,
+ ["edges"]=1.744,
+ ["left"]=1.188,
+ ["none"]=0.026000000000003,
+ ["right"]=1.215,
+ ["text"]="abcdefghi",
+ },
+ {
+ ["center"]=1.227,
+ ["edges"]=1.734,
+ ["left"]=1.193,
+ ["none"]=0.025999999999996,
+ ["right"]=1.21,
+ ["text"]="abcdefghij",
+ },
+ {
+ ["center"]=1.225,
+ ["edges"]=1.732,
+ ["left"]=1.196,
+ ["none"]=0.024999999999991,
+ ["right"]=1.214,
+ ["text"]="abcdefghijk",
+ },
+ {
+ ["center"]=1.229,
+ ["edges"]=1.734,
+ ["left"]=1.18,
+ ["none"]=0.024999999999991,
+ ["right"]=1.213,
+ ["text"]="abcdefghijkl",
+ },
+ {
+ ["center"]=1.241,
+ ["edges"]=1.733,
+ ["left"]=1.186,
+ ["none"]=0.025999999999996,
+ ["right"]=1.218,
+ ["text"]="abcdefghijklm",
+ },
+ {
+ ["center"]=1.249,
+ ["edges"]=1.736,
+ ["left"]=1.191,
+ ["none"]=0.02600000000001,
+ ["right"]=1.219,
+ ["text"]="abcdefghijklmn",
+ },
+ {
+ ["center"]=1.261,
+ ["edges"]=1.748,
+ ["left"]=1.187,
+ ["none"]=0.025999999999996,
+ ["right"]=1.236,
+ ["text"]="abcdefghijklmno",
+ },
+ {
+ ["center"]=1.256,
+ ["edges"]=1.745,
+ ["left"]=1.192,
+ ["none"]=0.025999999999996,
+ ["right"]=1.23,
+ ["text"]="abcdefghijklmnop",
+ },
+ {
+ ["center"]=1.259,
+ ["edges"]=1.743,
+ ["left"]=1.195,
+ ["none"]=0.025999999999996,
+ ["right"]=1.226,
+ ["text"]="abcdefghijklmnopq",
+ },
+ {
+ ["center"]=1.056,
+ ["edges"]=1.74,
+ ["left"]=1.192,
+ ["none"]=0.025999999999996,
+ ["right"]=1.225,
+ ["text"]="abcdefghijklmnopqr",
+ },
+ {
+ ["center"]=1.057,
+ ["edges"]=1.741,
+ ["left"]=1.186,
+ ["none"]=0.025000000000006,
+ ["right"]=1.223,
+ ["text"]="abcdefghijklmnopqrs",
+ },
+ {
+ ["center"]=1.062,
+ ["edges"]=1.751,
+ ["left"]=1.194,
+ ["none"]=0.025000000000006,
+ ["right"]=1.23,
+ ["text"]="abcdefghijklmnopqrst",
+ },
+ {
+ ["center"]=1.069,
+ ["edges"]=1.756,
+ ["left"]=1.197,
+ ["none"]=0.02600000000001,
+ ["right"]=1.231,
+ ["text"]="abcdefghijklmnopqrstu",
+ },
+ {
+ ["center"]=1.087,
+ ["edges"]=1.756,
+ ["left"]=1.208,
+ ["none"]=0.025000000000006,
+ ["right"]=1.231,
+ ["text"]="abcdefghijklmnopqrstuv",
+ },
+ {
+ ["center"]=1.072,
+ ["edges"]=1.76,
+ ["left"]=1.198,
+ ["none"]=0.025000000000006,
+ ["right"]=1.234,
+ ["text"]="abcdefghijklmnopqrstuvw",
+ },
+ {
+ ["center"]=1.063,
+ ["edges"]=1.759,
+ ["left"]=1.195,
+ ["none"]=0.025999999999982,
+ ["right"]=1.232,
+ ["text"]="abcdefghijklmnopqrstuvwx",
+ },
+ {
+ ["center"]=1.066,
+ ["edges"]=1.764,
+ ["left"]=1.199,
+ ["none"]=0.025999999999982,
+ ["right"]=1.235,
+ ["text"]="abcdefghijklmnopqrstuvwxy",
+ },
+ {
+ ["center"]=1.062,
+ ["edges"]=1.762,
+ ["left"]=1.248,
+ ["none"]=0.02600000000001,
+ ["right"]=1.248,
+ ["text"]="abcdefghijklmnopqrstuvwxyz",
+ },
+ {
+ ["center"]=1.07,
+ ["edges"]=1.772,
+ ["left"]=1.216,
+ ["none"]=0.02600000000001,
+ ["right"]=1.247,
+ ["text"]="abcdefghijklmnopqrstuvwxyzA",
+ },
+ {
+ ["center"]=1.07,
+ ["edges"]=1.77,
+ ["left"]=1.223,
+ ["none"]=0.027000000000015,
+ ["right"]=1.264,
+ ["text"]="abcdefghijklmnopqrstuvwxyzAB",
+ },
+ {
+ ["center"]=1.073,
+ ["edges"]=1.586,
+ ["left"]=1.211,
+ ["none"]=0.02600000000001,
+ ["right"]=1.248,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABC",
+ },
+ {
+ ["center"]=1.075,
+ ["edges"]=1.584,
+ ["left"]=1.22,
+ ["none"]=0.02600000000001,
+ ["right"]=1.252,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCD",
+ },
+ {
+ ["center"]=1.105,
+ ["edges"]=1.593,
+ ["left"]=1.218,
+ ["none"]=0.02600000000001,
+ ["right"]=1.255,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDE",
+ },
+ {
+ ["center"]=1.109,
+ ["edges"]=1.594,
+ ["left"]=1.219,
+ ["none"]=0.025000000000006,
+ ["right"]=1.256,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEF",
+ },
+ {
+ ["center"]=1.122,
+ ["edges"]=1.589,
+ ["left"]=1.223,
+ ["none"]=0.025000000000006,
+ ["right"]=1.257,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFG",
+ },
+ {
+ ["center"]=1.129,
+ ["edges"]=1.596,
+ ["left"]=1.22,
+ ["none"]=0.02600000000001,
+ ["right"]=1.253,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGH",
+ },
+ {
+ ["center"]=1.141,
+ ["edges"]=1.59,
+ ["left"]=1.046,
+ ["none"]=0.024999999999977,
+ ["right"]=1.077,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHI",
+ },
+ {
+ ["center"]=1.159,
+ ["edges"]=1.599,
+ ["left"]=1.033,
+ ["none"]=0.025999999999982,
+ ["right"]=1.08,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJ",
+ },
+ {
+ ["center"]=1.162,
+ ["edges"]=1.595,
+ ["left"]=1.034,
+ ["none"]=0.02600000000001,
+ ["right"]=1.06,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJK",
+ },
+ {
+ ["center"]=1.171,
+ ["edges"]=1.599,
+ ["left"]=1.04,
+ ["none"]=0.024999999999977,
+ ["right"]=1.06,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKL",
+ },
+ {
+ ["center"]=1.178,
+ ["edges"]=1.6,
+ ["left"]=1.033,
+ ["none"]=0.024999999999977,
+ ["right"]=1.063,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLM",
+ },
+ {
+ ["center"]=1.137,
+ ["edges"]=1.602,
+ ["left"]=1.029,
+ ["none"]=0.02600000000001,
+ ["right"]=1.061,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN",
+ },
+ {
+ ["center"]=1.138,
+ ["edges"]=1.604,
+ ["left"]=1.032,
+ ["none"]=0.024999999999977,
+ ["right"]=1.06,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNO",
+ },
+ {
+ ["center"]=1.151,
+ ["edges"]=1.622,
+ ["left"]=1.032,
+ ["none"]=0.025000000000034,
+ ["right"]=1.064,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP",
+ },
+ {
+ ["center"]=1.151,
+ ["edges"]=1.635,
+ ["left"]=1.039,
+ ["none"]=0.025999999999954,
+ ["right"]=1.068,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQ",
+ },
+ {
+ ["center"]=1.149,
+ ["edges"]=1.633,
+ ["left"]=1.039,
+ ["none"]=0.02600000000001,
+ ["right"]=1.069,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQR",
+ },
+ {
+ ["center"]=1.16,
+ ["edges"]=1.642,
+ ["left"]=1.041,
+ ["none"]=0.024999999999977,
+ ["right"]=1.067,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRS",
+ },
+ {
+ ["center"]=1.155,
+ ["edges"]=1.651,
+ ["left"]=1.04,
+ ["none"]=0.02600000000001,
+ ["right"]=1.071,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRST",
+ },
+ {
+ ["center"]=1.155,
+ ["edges"]=1.664,
+ ["left"]=1.042,
+ ["none"]=0.024999999999977,
+ ["right"]=1.073,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTU",
+ },
+ {
+ ["center"]=1.146,
+ ["edges"]=1.668,
+ ["left"]=1.059,
+ ["none"]=0.02600000000001,
+ ["right"]=1.088,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV",
+ },
+ {
+ ["center"]=1.173,
+ ["edges"]=1.673,
+ ["left"]=1.067,
+ ["none"]=0.02600000000001,
+ ["right"]=1.099,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVW",
+ },
+ {
+ ["center"]=1.14,
+ ["edges"]=1.669,
+ ["left"]=1.063,
+ ["none"]=0.024999999999977,
+ ["right"]=1.102,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWX",
+ },
+ },
+} \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/about/luatest-hash-luatex-073-LUA52.lua b/doc/context/sources/general/manuals/about/luatest-hash-luatex-073-LUA52.lua
new file mode 100644
index 000000000..7fb7dc044
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/luatest-hash-luatex-073-LUA52.lua
@@ -0,0 +1,406 @@
+return {
+ ["comment"]="lua 5.2 hashing",
+ ["datetime"]=1393679507,
+ ["samples"]={
+ {
+ ["center"]=1.188,
+ ["edges"]=1.701,
+ ["left"]=1.143,
+ ["none"]=0.016,
+ ["right"]=1.19,
+ ["text"]="a",
+ },
+ {
+ ["center"]=1.175,
+ ["edges"]=1.685,
+ ["left"]=1.141,
+ ["none"]=0.024999999999999,
+ ["right"]=1.177,
+ ["text"]="ab",
+ },
+ {
+ ["center"]=1.179,
+ ["edges"]=1.691,
+ ["left"]=1.142,
+ ["none"]=0.025,
+ ["right"]=1.183,
+ ["text"]="abc",
+ },
+ {
+ ["center"]=1.187,
+ ["edges"]=1.692,
+ ["left"]=1.147,
+ ["none"]=0.024999999999999,
+ ["right"]=1.183,
+ ["text"]="abcd",
+ },
+ {
+ ["center"]=1.209,
+ ["edges"]=1.705,
+ ["left"]=1.156,
+ ["none"]=0.025000000000002,
+ ["right"]=1.194,
+ ["text"]="abcde",
+ },
+ {
+ ["center"]=1.215,
+ ["edges"]=1.714,
+ ["left"]=1.161,
+ ["none"]=0.024999999999999,
+ ["right"]=1.201,
+ ["text"]="abcdef",
+ },
+ {
+ ["center"]=1.222,
+ ["edges"]=1.714,
+ ["left"]=1.164,
+ ["none"]=0.027000000000001,
+ ["right"]=1.203,
+ ["text"]="abcdefg",
+ },
+ {
+ ["center"]=1.215,
+ ["edges"]=1.715,
+ ["left"]=1.162,
+ ["none"]=0.026000000000003,
+ ["right"]=1.202,
+ ["text"]="abcdefgh",
+ },
+ {
+ ["center"]=1.209,
+ ["edges"]=1.698,
+ ["left"]=1.171,
+ ["none"]=0.024999999999999,
+ ["right"]=1.206,
+ ["text"]="abcdefghi",
+ },
+ {
+ ["center"]=1.207,
+ ["edges"]=1.707,
+ ["left"]=1.161,
+ ["none"]=0.024999999999991,
+ ["right"]=1.21,
+ ["text"]="abcdefghij",
+ },
+ {
+ ["center"]=1.228,
+ ["edges"]=1.708,
+ ["left"]=1.165,
+ ["none"]=0.024999999999991,
+ ["right"]=1.213,
+ ["text"]="abcdefghijk",
+ },
+ {
+ ["center"]=1.224,
+ ["edges"]=1.708,
+ ["left"]=1.165,
+ ["none"]=0.025000000000006,
+ ["right"]=1.205,
+ ["text"]="abcdefghijkl",
+ },
+ {
+ ["center"]=3.586,
+ ["edges"]=1.705,
+ ["left"]=1.162,
+ ["none"]=0.025000000000006,
+ ["right"]=1.215,
+ ["text"]="abcdefghijklm",
+ },
+ {
+ ["center"]=5.056,
+ ["edges"]=1.708,
+ ["left"]=1.175,
+ ["none"]=0.025000000000006,
+ ["right"]=1.207,
+ ["text"]="abcdefghijklmn",
+ },
+ {
+ ["center"]=3.965,
+ ["edges"]=1.712,
+ ["left"]=1.177,
+ ["none"]=0.025000000000006,
+ ["right"]=1.215,
+ ["text"]="abcdefghijklmno",
+ },
+ {
+ ["center"]=5.097,
+ ["edges"]=1.725,
+ ["left"]=1.177,
+ ["none"]=0.025000000000006,
+ ["right"]=1.21,
+ ["text"]="abcdefghijklmnop",
+ },
+ {
+ ["center"]=3.982,
+ ["edges"]=1.724,
+ ["left"]=1.18,
+ ["none"]=0.024000000000001,
+ ["right"]=1.213,
+ ["text"]="abcdefghijklmnopq",
+ },
+ {
+ ["center"]=5.195,
+ ["edges"]=1.714,
+ ["left"]=1.182,
+ ["none"]=0.024999999999977,
+ ["right"]=1.219,
+ ["text"]="abcdefghijklmnopqr",
+ },
+ {
+ ["center"]=4.016,
+ ["edges"]=1.722,
+ ["left"]=1.184,
+ ["none"]=0.025000000000006,
+ ["right"]=1.217,
+ ["text"]="abcdefghijklmnopqrs",
+ },
+ {
+ ["center"]=5.199,
+ ["edges"]=5.623,
+ ["left"]=1.182,
+ ["none"]=0.025000000000006,
+ ["right"]=1.221,
+ ["text"]="abcdefghijklmnopqrst",
+ },
+ {
+ ["center"]=4.056,
+ ["edges"]=1.815,
+ ["left"]=1.191,
+ ["none"]=0.024999999999977,
+ ["right"]=1.244,
+ ["text"]="abcdefghijklmnopqrstu",
+ },
+ {
+ ["center"]=1.082,
+ ["edges"]=5.637,
+ ["left"]=1.193,
+ ["none"]=0.024999999999977,
+ ["right"]=1.247,
+ ["text"]="abcdefghijklmnopqrstuv",
+ },
+ {
+ ["center"]=1.085,
+ ["edges"]=1.827,
+ ["left"]=1.22,
+ ["none"]=0.024999999999977,
+ ["right"]=1.251,
+ ["text"]="abcdefghijklmnopqrstuvw",
+ },
+ {
+ ["center"]=1.071,
+ ["edges"]=5.58,
+ ["left"]=1.205,
+ ["none"]=0.025000000000006,
+ ["right"]=1.244,
+ ["text"]="abcdefghijklmnopqrstuvwx",
+ },
+ {
+ ["center"]=1.07,
+ ["edges"]=1.821,
+ ["left"]=1.195,
+ ["none"]=0.025000000000006,
+ ["right"]=1.247,
+ ["text"]="abcdefghijklmnopqrstuvwxy",
+ },
+ {
+ ["center"]=1.088,
+ ["edges"]=5.514,
+ ["left"]=5.094,
+ ["none"]=0.024999999999977,
+ ["right"]=5.24,
+ ["text"]="abcdefghijklmnopqrstuvwxyz",
+ },
+ {
+ ["center"]=1.069,
+ ["edges"]=1.838,
+ ["left"]=44.874,
+ ["none"]=0.025000000000006,
+ ["right"]=5.257,
+ ["text"]="abcdefghijklmnopqrstuvwxyzA",
+ },
+ {
+ ["center"]=1.075,
+ ["edges"]=5.577,
+ ["left"]=5.412,
+ ["none"]=0.024999999999977,
+ ["right"]=5.231,
+ ["text"]="abcdefghijklmnopqrstuvwxyzAB",
+ },
+ {
+ ["center"]=1.081,
+ ["edges"]=1.841,
+ ["left"]=45.411,
+ ["none"]=0.024999999999977,
+ ["right"]=5.208,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABC",
+ },
+ {
+ ["center"]=1.091,
+ ["edges"]=5.643,
+ ["left"]=5.536,
+ ["none"]=0.02600000000001,
+ ["right"]=5.248,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCD",
+ },
+ {
+ ["center"]=1.084,
+ ["edges"]=1.844,
+ ["left"]=45.54,
+ ["none"]=0.024000000000001,
+ ["right"]=5.351,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDE",
+ },
+ {
+ ["center"]=1.078,
+ ["edges"]=5.657,
+ ["left"]=5.55,
+ ["none"]=0.024999999999977,
+ ["right"]=5.376,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEF",
+ },
+ {
+ ["center"]=1.077,
+ ["edges"]=1.831,
+ ["left"]=45.903,
+ ["none"]=0.025000000000034,
+ ["right"]=5.422,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFG",
+ },
+ {
+ ["center"]=1.082,
+ ["edges"]=5.71,
+ ["left"]=5.525,
+ ["none"]=0.024999999999977,
+ ["right"]=5.266,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGH",
+ },
+ {
+ ["center"]=1.076,
+ ["edges"]=1.8480000000001,
+ ["left"]=48.141,
+ ["none"]=0.024999999999977,
+ ["right"]=5.223,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHI",
+ },
+ {
+ ["center"]=1.083,
+ ["edges"]=6.241,
+ ["left"]=5.427,
+ ["none"]=0.025000000000091,
+ ["right"]=5.26,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJ",
+ },
+ {
+ ["center"]=1.08,
+ ["edges"]=1.59,
+ ["left"]=45.596,
+ ["none"]=0.024999999999977,
+ ["right"]=5.3099999999999,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJK",
+ },
+ {
+ ["center"]=1.0799999999999,
+ ["edges"]=1.5790000000001,
+ ["left"]=5.9499999999999,
+ ["none"]=0.024999999999977,
+ ["right"]=5.2330000000001,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKL",
+ },
+ {
+ ["center"]=1.088,
+ ["edges"]=1.567,
+ ["left"]=45.252,
+ ["none"]=0.024999999999977,
+ ["right"]=5.314,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLM",
+ },
+ {
+ ["center"]=1.074,
+ ["edges"]=1.5699999999999,
+ ["left"]=5.5310000000001,
+ ["none"]=0.024000000000001,
+ ["right"]=5.4889999999999,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN",
+ },
+ {
+ ["center"]=1.074,
+ ["edges"]=1.574,
+ ["left"]=45.903,
+ ["none"]=0.024999999999977,
+ ["right"]=5.598,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNO",
+ },
+ {
+ ["center"]=1.081,
+ ["edges"]=1.569,
+ ["left"]=6.033,
+ ["none"]=0.024999999999977,
+ ["right"]=5.657,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP",
+ },
+ {
+ ["center"]=1.0690000000001,
+ ["edges"]=1.568,
+ ["left"]=1.296,
+ ["none"]=0.024999999999977,
+ ["right"]=1.115,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQ",
+ },
+ {
+ ["center"]=1.08,
+ ["edges"]=1.572,
+ ["left"]=1.048,
+ ["none"]=0.025000000000091,
+ ["right"]=1.0799999999999,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQR",
+ },
+ {
+ ["center"]=1.085,
+ ["edges"]=1.566,
+ ["left"]=1.0509999999999,
+ ["none"]=0.025000000000091,
+ ["right"]=1.083,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRS",
+ },
+ {
+ ["center"]=1.09,
+ ["edges"]=1.573,
+ ["left"]=1.0459999999999,
+ ["none"]=0.024999999999977,
+ ["right"]=1.083,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRST",
+ },
+ {
+ ["center"]=1.088,
+ ["edges"]=1.576,
+ ["left"]=1.052,
+ ["none"]=0.024000000000001,
+ ["right"]=1.082,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTU",
+ },
+ {
+ ["center"]=1.085,
+ ["edges"]=1.5699999999999,
+ ["left"]=1.048,
+ ["none"]=0.024999999999977,
+ ["right"]=1.08,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV",
+ },
+ {
+ ["center"]=1.08,
+ ["edges"]=1.571,
+ ["left"]=1.049,
+ ["none"]=0.024999999999977,
+ ["right"]=1.085,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVW",
+ },
+ {
+ ["center"]=1.077,
+ ["edges"]=1.568,
+ ["left"]=1.037,
+ ["none"]=0.024999999999977,
+ ["right"]=1.083,
+ ["text"]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWX",
+ },
+ },
+}
diff --git a/doc/context/sources/general/manuals/about/pi-speed-1.tex b/doc/context/sources/general/manuals/about/pi-speed-1.tex
new file mode 100644
index 000000000..be716749a
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/pi-speed-1.tex
@@ -0,0 +1,3 @@
+\starttext
+ \dorecurse{1000}{\input ward \par}
+\stoptext
diff --git a/doc/context/sources/general/manuals/about/pi-speed-2.tex b/doc/context/sources/general/manuals/about/pi-speed-2.tex
new file mode 100644
index 000000000..8dcfab188
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/pi-speed-2.tex
@@ -0,0 +1,3 @@
+\starttext
+ \dorecurse{1000}{test \page}
+\stoptext
diff --git a/doc/context/sources/general/manuals/about/pi-speed-3.tex b/doc/context/sources/general/manuals/about/pi-speed-3.tex
new file mode 100644
index 000000000..d3ead50a1
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/pi-speed-3.tex
@@ -0,0 +1,10 @@
+\starttext
+ \dorecurse{1000}{
+ The Earth, as a habitat for animal life, is in old age and
+ has a fatal illness. Several, in fact. It would be happening
+ whether humans had ever evolved or not. But our presence is
+ like the effect of an old|-|age patient who smokes many packs
+ of cigarettes per day |=| and we humans are the cigarettes.
+ \par
+ }
+\stoptext
diff --git a/doc/context/sources/general/manuals/about/pi-speed-4.tex b/doc/context/sources/general/manuals/about/pi-speed-4.tex
new file mode 100644
index 000000000..517e77285
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/pi-speed-4.tex
@@ -0,0 +1,10 @@
+\starttext
+
+\dorecurse{10} {
+ \startMPcode
+ draw fullcircle scaled 1cm withpen pencircle scaled 1mm ;
+ draw textext("X") ;
+ \stopMPcode
+}
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/about/pi-speed-5.tex b/doc/context/sources/general/manuals/about/pi-speed-5.tex
new file mode 100644
index 000000000..2417e00c3
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/pi-speed-5.tex
@@ -0,0 +1,16 @@
+\setupbodyfont[pagella]
+
+\starttext
+
+\dorecurse {100} {
+ \input ward \par
+ \dorecurse{100} {
+ \dontleavehmode
+ {\green this is green}
+ {\red \smallcaps this is red}
+ {\blue \bf this is blue}
+ }
+ \par
+}
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/about/still-expanding-1.png b/doc/context/sources/general/manuals/about/still-expanding-1.png
new file mode 100644
index 000000000..54579ca13
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/still-expanding-1.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/about/still-expanding-10.png b/doc/context/sources/general/manuals/about/still-expanding-10.png
new file mode 100644
index 000000000..3eda60b82
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/still-expanding-10.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/about/still-expanding-2.png b/doc/context/sources/general/manuals/about/still-expanding-2.png
new file mode 100644
index 000000000..6e750b7a2
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/still-expanding-2.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/about/still-expanding-3.png b/doc/context/sources/general/manuals/about/still-expanding-3.png
new file mode 100644
index 000000000..68ec86a9f
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/still-expanding-3.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/about/still-expanding-4.png b/doc/context/sources/general/manuals/about/still-expanding-4.png
new file mode 100644
index 000000000..0033f3063
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/still-expanding-4.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/about/still-expanding-5.png b/doc/context/sources/general/manuals/about/still-expanding-5.png
new file mode 100644
index 000000000..0c50f50d6
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/still-expanding-5.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/about/still-expanding-6.png b/doc/context/sources/general/manuals/about/still-expanding-6.png
new file mode 100644
index 000000000..ce0730847
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/still-expanding-6.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/about/still-expanding-7.png b/doc/context/sources/general/manuals/about/still-expanding-7.png
new file mode 100644
index 000000000..a74d19a99
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/still-expanding-7.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/about/still-expanding-8.png b/doc/context/sources/general/manuals/about/still-expanding-8.png
new file mode 100644
index 000000000..43199fa0c
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/still-expanding-8.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/about/still-expanding-9.png b/doc/context/sources/general/manuals/about/still-expanding-9.png
new file mode 100644
index 000000000..0e965a724
--- /dev/null
+++ b/doc/context/sources/general/manuals/about/still-expanding-9.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/charts/charts-mkiv.tex b/doc/context/sources/general/manuals/charts/charts-mkiv.tex
new file mode 100644
index 000000000..2081b872b
--- /dev/null
+++ b/doc/context/sources/general/manuals/charts/charts-mkiv.tex
@@ -0,0 +1,1339 @@
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
+%
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+%
+% comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt
+% Group journal or otherwise. Thanks to the editors for corrections. Also thanks
+% to users for testing, feedback and corrections.
+
+\usemodule[abr-02]
+
+\usemodule[setups-basics] \loadsetups[i-chart.xml]
+
+\setupexternalfigures
+ [location={local,default}]
+
+\setuplayout
+ [topspace=15mm,
+ header=15mm,
+ headerdistance=0mm,
+ footer=0cm,
+ width=middle,
+ height=middle]
+
+\setuppagenumbering
+ [alternative=doublesided]
+
+\definetypeface [mainface] [rm] [serif] [pagella] [default]
+\definetypeface [mainface] [ss] [sans] [heros] [default] % [rscale=1.1]
+\definetypeface [mainface] [tt] [mono] [modern] [default] % [rscale=1.1]
+\definetypeface [mainface] [mm] [math] [pagella] [default]
+
+\setupbodyfont[mainface,12pt]
+
+% \definecolor[maincolor][r=.4,g=.2,b=.6]
+\definecolor[maincolor][r=.2,g=.1,b=.3]
+
+\setupwhitespace
+ [big]
+
+\setuptolerance
+ [verytolerant,stretch]
+
+\setuptype
+ [color=maincolor]
+
+\setuptyping
+ [color=maincolor]
+
+\setuphead
+ [section]
+ [style=\bfb,
+ color=maincolor]
+
+\setupinteraction
+ [state=start,
+ color=,
+ contrastcolor=,
+ style=]
+
+\startsetups titlepage
+ \startpagemakeup[doublesided=no,page=no]
+ \useMPgraphic{titlepage}
+ \stoppagemakeup
+ \startstandardmakeup[doublesided=no,page=no]
+ \vfill
+ \startsubject[title=Contents]
+ \startcolumns[distance=4em]
+ \placelist[section][alternative=c,width=2em]
+ \stopcolumns
+ \stopsubject
+ \stopstandardmakeup
+\stopsetups
+
+\startsetups colofon
+ \blank[2*big]
+ \testpage[3]
+ \startpacked
+ \documentvariable{author}\par
+ \documentvariable{affiliation}\par
+ \documentvariable{location}\par
+ \stoppacked
+\stopsetups
+
+\setupdocument
+ [title=No Title,
+ before=\setups{titlepage},
+ after=\setups{colofon}]
+
+% specific for this document
+
+\usemodule[chart]
+
+\setupFLOWcharts
+ [width=2.25cm,
+ height=1.25cm,
+ dx=.25cm,
+ dy=.25cm]
+
+\startuseMPgraphic{titlepage}
+ numeric width, height, delta ;
+ color a, b, c, d ;
+
+ width := PaperWidth ;
+ height := PaperHeight ;
+ delta := width/10 ;
+ ahlength := 6delta ;
+
+ a := white/2 ;
+ b := white/3 ;
+ c := resolvedcolor ("maincolor") ;
+ d := c ;
+
+ path p ; p := unitsquare xscaled width yscaled height ;
+
+ fill p withcolor c ;
+
+ drawarrow llcorner p -- urcorner p withpen pencircle scaled (3.0delta) withcolor a ;
+ draw llcorner p -- urcorner p withpen pencircle scaled (4.0delta) withcolor a ;
+ drawarrow urcorner p -- llcorner p withpen pencircle scaled (2.5delta) withcolor b ;
+ draw llcorner p -- urcorner p withpen pencircle scaled (3.0delta) withcolor b ;
+ drawarrow llcorner p -- urcorner p withpen pencircle scaled (2.0delta) withcolor d ;
+ drawarrow urcorner p -- llcorner p withpen pencircle scaled (1.5delta) withcolor d ;
+
+ draw anchored.lrt(
+ textext("\ss\bf \documentvariable{title}") rotated 90 xsized (3delta/4),
+ lrcorner p shifted (-delta,3delta/4)
+ ) withcolor white ;
+
+ resetarrows ;
+
+ setbounds currentpicture to p ;
+\stopuseMPgraphic
+
+\startdocument
+ [title=Flowcharts,
+ author= Hans Hagen,
+ affiliation=PRAGMA ADE,
+ location=Hasselt NL]
+
+\startsection[reference=introduction,title={Introduction}]
+
+This is just another story of \TEX\ meeting \METAPOST. This time we will focus on
+charts, especially flowcharts. In \CONTEXT\ flowchart support is not part of the
+core functionality, but is provided as a module. Therefore, before you can
+actually define a chart, this module must be loaded:
+
+\starttyping
+\usemodule[chart]
+\stoptyping
+
+Once loaded, you has access to the functionality described here. Before we go
+into detail on the features, we will say some words on history.
+
+When dealing with graphics, it makes sense to use a drawing program. In fact,
+before we started using this module, we did use such programs, and they have
+without doubt their advantages. As soon as \CONTEXT\ supported interactive
+documents, there were means to make graphics interactive, and as long as only a
+few graphics are involved, this mechanism works ok.
+
+And then we suddenly had to make a document with thousands of pages and hundreds
+of often rather complicated flowcharts. Because these charts were tightly
+integrated in the main document, they not only had to be consistent in the use of
+fonts, but also had to be interactive and were to be presented both as a whole
+and in subchart parts. We wanted fonts, colors and the overall appearance as well
+as names of people, places, steps, activities and more to be consistent,
+especially because these charts are constantly updated.
+
+I use the term flowchart here because I want to stress that this module typesets
+charts which cells are connected by lines (often arrows). Our first application
+of this module concerned diagrams that expressed actions and relations between
+those actions, using some techniques originating years ago in programming
+environments: lines were not to cross, one should read from top to bottom and
+left to right, etc. However, the module presented here can be used to draw all
+kind of charts, and all kind of connections. But there are limits.
+
+{\em This manual is mostly the one written of end 1998 when the flowchart module
+showed up in the distribution. In the meantime the code has been rewritten for
+\MKIV\ and some functionality is adapted. But the interface hasn't changed much.}
+
+\stopsection
+
+\startsection[title={The grid}]
+
+A flowchart consists of shapes, positioned on a grid, connected by lines. The
+grid enables the user to anchor the shapes and enables the drawing routines to
+determine connections. One can either explicitly specify the grid, or let it be
+calculated automatically.
+
+\startbuffer[grid]
+\setupFLOWcharts
+ [option=test,
+ nx=4,
+ ny=3,
+ dx=\bodyfontsize,
+ dy=\bodyfontsize,
+ width=6\bodyfontsize,
+ height=4\bodyfontsize,
+ maxwidth=\textwidth]
+
+\startFLOWchart [grid]
+\stopFLOWchart
+\stopbuffer
+
+\placefigure
+ [here][fig:grid]
+ {The grid.}
+ {\getbuffer[grid]\FLOWchart[grid]}
+
+Normally the grid is not visible, unless one enters test mode. The grid in \in
+{figure} [fig:grid] is the result of the definition:
+
+\typebuffer[grid]
+
+The most straightforward way of calling up this chart is by saying:
+
+\starttyping
+\FLOWchart[grid]
+\stoptyping
+
+In \in {figure} [fig:grid] we see a grid an dwithin each cell a shape. Normally
+shapes are smaller than grid cells. This is necessary because connecting lines
+need some room. The offset is important, because when a connection follows the
+outer lines, a little extra space outside that line not only looks better, but
+also prevents the line from being clipped. It makes sense to keep the offset as
+well as the space between shapes constant across a document. The numbers are
+typeset outside the bounding box of the figure.
+
+Grid cells are numbered from top to bottom starting at the left side, so the left
+topmost cell is $(1,1)$. Later we will see that because cells have names, these
+numbers play a minor role.
+
+\stopsection
+
+\startsection[title={Shapes}]
+
+A shape is something, typically a text, within a frame. The frame has certain
+dimensions and can have some color and background. In this respect it looks like
+the \CONTEXT\ command \type {\framed}. The most important shapes have been
+assigned names as indicated in \in {figure} [fig:shapes]. There are more shapes,
+but they are identified by a number only. The total number of shapes will quite
+certainly increase. The shapes {\em up}, {\em down}, {\em left} and {\em right}
+are not really shapes, but lines that can be used to force a direction.
+
+\startFLOWchart [shapes]
+\startFLOWcell \name{a} \location{1,1} \shape{node} \text{node} \stopFLOWcell
+\startFLOWcell \name{b} \location{2,1} \shape{action} \text{action} \stopFLOWcell
+\startFLOWcell \name{c} \location{3,1} \shape{procedure} \text{procedure} \stopFLOWcell
+\startFLOWcell \name{d} \location{4,1} \shape{product} \text{product} \stopFLOWcell
+\startFLOWcell \name{e} \location{1,2} \shape{decision} \text{decision} \stopFLOWcell
+\startFLOWcell \name{f} \location{2,2} \shape{archive} \text{archive} \stopFLOWcell
+\startFLOWcell \name{g} \location{3,2} \shape{loop} \text{loop} \stopFLOWcell
+\startFLOWcell \name{h} \location{4,2} \shape{wait} \text{wait} \stopFLOWcell
+\startFLOWcell \name{i} \location{1,3} \shape{subprocedure} \text{sub procedure} \stopFLOWcell
+\startFLOWcell \name{j} \location{2,3} \shape{singledocument} \text{single document} \stopFLOWcell
+\startFLOWcell \name{k} \location{3,3} \shape{multidocument} \text{multi document} \stopFLOWcell
+
+\startFLOWcell \name{l} \location{1,4} \shape{right} \text{right} \stopFLOWcell
+\startFLOWcell \name{m} \location{2,4} \shape{left} \text{left} \stopFLOWcell
+\startFLOWcell \name{n} \location{3,4} \shape{up} \text{up} \stopFLOWcell
+\startFLOWcell \name{o} \location{4,4} \shape{down} \text{down} \stopFLOWcell
+\stopFLOWchart
+
+\placefigure
+ [here][fig:shapes]
+ {The shapes.}
+ {\tx\FLOWchart[shapes]}
+
+When no shape is specified, the default shape is used. One can change this
+default value with the \type {\setupFLOWshapes} command.
+
+\startbuffer[cells]
+\startFLOWchart [cells]
+ \startFLOWcell
+ \name {first}
+ \location {1,1}
+ \shape {singledocument}
+ \text {not realy a document}
+ \stopFLOWcell
+\stopFLOWchart
+\stopbuffer
+
+\typebuffer[cells]
+
+\getbuffer[cells]
+
+A flow chart consists of cells. Each cell has a name, is positioned somewhere on
+the grid, has a certain shape, and normally this shape surrounds text. The shape
+is drawn by \METAPOST, and the text is placed by \TEX. Later we will see that
+there are some more fields to fill. Names are local to a chart.
+
+\placefigure
+ [][fig:cells]
+ {}{\tx\FLOWchart[cells]}
+
+\stopsection
+
+\startsection[title={Connections}]
+
+Shapes can be connected. As shown in \in {figure} [fig:points] each shape has
+four connection points: top, bottom, left and right. When connecting shapes we
+refer to their logical names and specify two of the four directions.
+
+\startFLOWchart [points]
+\startFLOWcell \name{a} \location{1,1} \shape{procedure} \stopFLOWcell
+\startFLOWcell \name{b} \location{2,1} \shape{product} \stopFLOWcell
+\startFLOWcell \name{c} \location{3,1} \shape{archive} \stopFLOWcell
+\startFLOWcell \name{d} \location{4,1} \shape{multidocument} \stopFLOWcell
+\stopFLOWchart
+
+\placefigure
+ [here][fig:points]
+ {The connection points.}
+ {\tx\setupFLOWcharts[dot=con]\FLOWchart[points]}
+
+In \in {figure} [fig:connect] we see three connections. The lines have smooth
+curves and run across the grid lines. By using smooth curves, an option that can
+be turned off, the direction of touching curves is always clear. Here we use
+arrows. Smoothing, arrows and dashed lines are some of the attributes of lines.
+
+\startFLOWchart [connect]
+ \startFLOWcell
+ \name {alpha}
+ \location {1,1}
+ \shape {procedure}
+ \text {first}
+ \connection [rl] {beta}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {beta}
+ \location {2,1}
+ \shape {product}
+ \text {second}
+ \connection [bl] {alpha}
+ \connection [rl] {gamma}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {gamma}
+ \location {3,1}
+ \shape {action}
+ \text {third}
+ \stopFLOWcell
+\stopFLOWchart
+
+\placefigure
+ [here][fig:connect]
+ {A few connections.}
+ {\tx\setupFLOWcharts[dot=con]\FLOWchart[connect]}
+
+\startFLOWchart [two]
+ \startFLOWcell
+ \name {alpha}
+ \location {1,1}
+ \shape {action}
+ \text {first}
+ \connection [rl] {beta}
+ \connection [rl] {alpha}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {beta}
+ \location {2,1}
+ \shape {loop}
+ \text {second}
+ \connection [tr] {beta}
+ \stopFLOWcell
+\stopFLOWchart
+
+\placefigure
+ {A few more connections.}
+ {\tx\setupFLOWcharts[dot=con]\FLOWchart[two]}
+
+There can be more than one connection per shape. When defining such a connection
+we first specify the direction. In this example \type {[rl]} means connect the
+right point to the left one, while \type {[tr]} results in a connection between
+the top and the right point. The second argument specifies the shape to connect
+to. As we can see, connections can point back to their origin shape.
+
+\startFLOWchart [around]
+ \startFLOWcell
+ \name {alpha}
+ \location {1,1}
+ \shape {procedure}
+ \text {first}
+ \connection [rl] {gamma}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {beta}
+ \location {2,1}
+ \shape {product}
+ \text {second}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {gamma}
+ \location {3,1}
+ \shape {action}
+ \text {third}
+ \stopFLOWcell
+\stopFLOWchart
+
+\placefigure
+ [here][fig:around]
+ {Going around shapes.}
+ {\tx\setupFLOWcharts[dot=con]\FLOWchart[around]}
+
+\startFLOWchart [straight]
+ \startFLOWcell
+ \name {alpha}
+ \location {2,1}
+ \shape {procedure}
+ \text {first}
+ \connection [lt] {gamma}
+ \connection [rt] {delta}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {beta}
+ \location {3,1}
+ \shape {product}
+ \text {second}
+ \connection [tl] {gamma}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {gamma}
+ \location {1,2}
+ \shape {action}
+ \text {third}
+ \connection [rr] {delta}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {delta}
+ \location {3,2}
+ \shape {archive}
+ \text {fourth}
+ \stopFLOWcell
+\stopFLOWchart
+
+\placefigure
+ [here][fig:straight]
+ {Following grid lines.}
+ {\tx\setupFLOWcharts[dot=con]\FLOWchart[straight]}
+
+The connection drawing routines have a rather strong urge to follow grid lines.
+\in {Figure} [fig:straight] demonstrates this several times. From the first shape
+to the third one, we see that the connection takes the shortest route possible
+without crossing other shapes. I have to admit that the routines in themselves
+are rather stupid, but for normal use they suffice.
+
+\startFLOWchart [straightagain]
+ \startFLOWcell
+ \name {alpha}
+ \location {2,1}
+ \shape {procedure}
+ \text {first}
+ \connection [lt] {gamma}
+ \connection [rt] {delta}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {beta}
+ \location {3,1}
+ \shape {product}
+ \text {second}
+ \connection [tl] {gamma}
+ \connection [tt] {alpha}
+ \connection [bt] {delta}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {gamma}
+ \location {1,2}
+ \shape {action}
+ \text {third}
+ \connection [rr] {delta}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {delta}
+ \location {3,2}
+ \shape {archive}
+ \text {fourth}
+ \connection [bb] {gamma}
+ \stopFLOWcell
+\stopFLOWchart
+
+Generally speaking, when two lines end at the same point, it makes sense to
+connect these. When on the other hand lines originate at the same point or cross
+eachother, readers can get confused. Therefore such lines are drawn in such a way
+that they don't touch. In this respect, \in {figure} [fig:white] demonstrates a
+less than optimal chart.
+
+\placefigure
+ [here][fig:white]
+ {Confusing (crossing) grid lines.}
+ {\tx\setupFLOWcharts[dot=con]\FLOWchart[straightagain]}
+
+\stopsection
+
+\startsection[title={Adding text}]
+
+In \in {figure} [fig:comment] we have added some comment to a connection. Like
+the dots at the connections, the point halfway the connection shows up in a
+special debugging mode. The comment will be placed relative to this point. In \in
+{figure} [fig:comment] this is to the left of the point.
+
+\startFLOWchart [comment]
+ \startFLOWcell
+ \name {alpha}
+ \location {1,1}
+ \shape {action}
+ \text {here}
+ \connection [bl] {beta}
+ \comment [l] {from here to there}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {beta}
+ \location {2,2}
+ \shape {action}
+ \text {there}
+ \stopFLOWcell
+\stopFLOWchart
+
+\placefigure
+ [here][fig:comment]
+ {Comment to connections.}
+ {\tx\setupFLOWcharts[dot=mid]\FLOWchart[comment]}
+
+It will be no surprise that a comment is defined using \type {\comment}. Comments
+can be anchored to eight locations, simply \type {l}, \type {r}, \type {t}, \type
+{b}, or a combination like \type {tr}.
+
+\starttyping
+\startFLOWcell
+ ...
+ \comment [l] {from here to there}
+ ...
+\stopFLOWcell
+\stoptyping
+
+\startFLOWchart [labels]
+ \startFLOWcell
+ \name {alpha}
+ \location {1,1}
+ \shape {action}
+ \text {here}
+ \connection [bl] {beta}
+ \label [b] {from here}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {beta}
+ \location {2,2}
+ \shape {action}
+ \text {there}
+ \label [l] {to there}
+ \stopFLOWcell
+\stopFLOWchart
+
+\placefigure
+ [here][fig:labels]
+ {Labels to connection points.}
+ {\tx\setupFLOWcharts[dot=con]\FLOWchart[labels]}
+
+We can also put labels at the connection points. Often this is preferred over
+comment halfway along a connection. Like comments, labels have a dedicated
+command. Here we specify the connection point \type {l}, \type {r}, \type {t} or
+\type {b}.
+
+\starttyping
+\startFLOWcell
+ ...
+ \label [l] {to there}
+ ...
+\stopFLOWcell
+\stoptyping
+
+\startFLOWchart [text]
+ \startFLOWcell
+ \name {alpha}
+ \location {1,1}
+ \shape {action}
+ \text {here}
+ \connection [bl] {beta}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {beta}
+ \location {2,2}
+ \shape {action}
+ \text {there}
+ \stopFLOWcell
+ \startFLOWcell
+ \shape {none}
+ \location {2,1}
+ \text {Is there any reason to go
+ from here to there?}
+ \stopFLOWcell
+\stopFLOWchart
+
+\placefigure
+ [here][fig:text]
+ {Text without shapes.}
+ {\tx\setupFLOWcharts[dot=con]\FLOWchart[text]}
+
+In \in {figure} [fig:text] we see some text without any shapes around it. When
+shape \type {none} is specified, the whole shape area is available for text.
+
+\starttyping
+\startFLOWcell
+ \shape {none}
+ \location {2,1}
+ \text {Is there any reason to go
+ from here to there?}
+\stopFLOWcell
+\stoptyping
+
+One can force the alignment with the key characters \type {l}, \type {r}, \type
+{c}, \type {t} and \type {b}. So, the next definition only places text.
+
+\stopsection
+
+\startsection[title={Inheritance}]
+
+When explaining something by using a chart, we often show successive versions of
+the chart, where each version adds a new feature. To prevent us from retyping the
+same components again and again, it helps to partition the source code of the
+complete chart into subcharts. Inclusion of a part is straightforward: the
+subchart is called by name and positioned on the grid.
+
+\startbuffer[include]
+\startFLOWchart [include]
+
+ \includeFLOWchart[labels][x=1,y=1]
+
+ \startFLOWcell
+ \shape {none}
+ \location {2,1}
+ \text {There is no reason to go
+ from here to there!}
+ \stopFLOWcell
+
+\stopFLOWchart
+\stopbuffer
+
+\typebuffer[include]
+
+The included sub chart has its own reference point, so one does not have to
+bother about positions.
+
+\getbuffer[include]
+
+\placefigure
+ [here][fig:include]
+ {Sharing components.}
+ {\tx\FLOWchart[include]}
+
+\stopsection
+
+\startsection[title={How it works}]
+
+The charting module, loaded by \type {\usemodule[chart]} is only responsible for
+the \TEX\ part of the job, which means positioning text and graphics generated by
+\METAPOST. The grid, shape and connection drawing routines are grouped together
+in a dedicated \METAPOST\ module.
+
+Because of the mix of \TEX\ and \METAPOST, and because we want to be able to
+scale charts, the buffer mechanism is used. The communication between \TEX\ and
+\METAPOST\ uses the \METAPOST\ embedding macros that are native to \CONTEXT.
+Additional communication from \METAPOST\ to \CONTEXT\ is handled in the module
+itself. This rather fuzzy description is visualized in \in {figure}
+[fig:process]. Depending on the general color settings, among the other processes
+involved are: color conversion and|/|or reduction to grayscales, and conversion
+to \PDF. When watching this module in action, don't feel disturbed by the many
+steps involved.
+
+\startFLOWchart [process]
+ \startFLOWcell
+ \name {user file}
+ \location {1,2}
+ \shape {action}
+ \text {User File}
+ \connection [rl] {context}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {context}
+ \location {2,2}
+ \shape {action}
+ \text {\CONTEXT}
+ \connection [nrnl] {buffer}
+ \connection [prl] {metapost}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {buffer}
+ \location {3,2}
+ \shape {action}
+ \text {scalable buffer}
+ \connection [nlnr] {context}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {metapost}
+ \location {4,2}
+ \shape {action}
+ \text {\METAPOST}
+ \connection [rr] {graphic}
+ \connection [rr] {datafile}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {graphic}
+ \location {4,1}
+ \shape {action}
+ \text {\POSTSCRIPT}
+ \connection [lt] {context}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {datafile}
+ \location {4,3}
+ \shape {action}
+ \text {Data File}
+ \connection [lb] {context}
+ \stopFLOWcell
+\stopFLOWchart
+
+\placefigure
+ [here][fig:process]
+ {The process.}
+ {\tx\FLOWchart[process]}
+
+\startbuffer[collection]
+\startFLOWchart [collection]
+ \dorecurse{10}
+ {\dorecurse{8}
+ {\scratchcounter=\numexpr\numexpr##1-1\relax*10+#1\relax
+ \startFLOWcell
+ \name {#1-##1}
+ \location {#1,##1}
+ \shape {\the\scratchcounter}
+ \normalexpanded{\label[bc]{\hbox{\tt\the\scratchcounter}}}
+ \stopFLOWcell}}
+\stopFLOWchart
+
+\setupFLOWcharts
+ [width=.08\textwidth,
+ height=.06\textwidth,
+ dx=.01\textwidth,
+ dy=.02\textwidth,
+ linewidth=1pt,
+ dot=yes]
+
+\FLOWchart[collection]
+\stopbuffer
+
+A few pages back we introduced the named shapes. There are however some more
+shapes. Each shape is identified by a number. In \in {figure} [fig:collection]
+all currently available shapes are shown. The zero numbered shape is actually a
+shape, but with zero dimensions. It can be used as a meeting point for lines. The
+unused numbers can be used for new shapes. The maximum number of shapes is
+limited to 4095, which is a \METAPOST\ limitation.
+
+\placefigure
+ [here][fig:collection]
+ {All shapes by number. Shape 0 is valid and has zero dimensions.}
+ {\tx\getbuffer[collection]}
+
+\stopsection
+
+\startsection[title={Bonus points}]
+
+Sometimes charts can become rather large, due to the many shapes used or lines
+drawn. At the same time charts can become unclear because more than one
+connection starts or ends at a shape. \in {Figure} [fig:bonus 1] shows a way out
+of this situation.
+
+\startFLOWchart [bonus 1]
+ \startFLOWcell
+ \name {tex}
+ \location {1,1}
+ \shape {action}
+ \text {\TEX}
+ \connection [prpl] {pdf}
+ \connection [nrnl] {dvi}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {dvi}
+ \location {2,1}
+ \shape {action}
+ \text {\DVI}
+ \connection [prpl] {ps}
+ \connection [nrr] {pdf}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {ps}
+ \location {3,1}
+ \shape {action}
+ \text {\POSTSCRIPT}
+ \connection [rnl] {pdf}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {pdf}
+ \location {4,1}
+ \shape {action}
+ \text {\PDF}
+ \stopFLOWcell
+\stopFLOWchart
+
+\placefigure
+ [here][fig:bonus 1]
+ {Even more points.}
+ {\tx\setupFLOWcharts[dot=all]\FLOWchart[bonus 1]}
+
+\startFLOWchart [bonus 2]
+ \startFLOWcell
+ \name {tex}
+ \location {1,1}
+ \shape {action}
+ \text {\TEX}
+ \connection [bt] {pdf}
+ \connection [rl] {dvi}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {dvi}
+ \location {2,1}
+ \shape {action}
+ \text {\DVI}
+ \connection [rl] {ps}
+ \connection [br] {pdf}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {ps}
+ \location {3,1}
+ \shape {action}
+ \text {\POSTSCRIPT}
+ \connection [br] {pdf}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {pdf}
+ \location {1,2}
+ \shape {action}
+ \text {\PDF}
+ \stopFLOWcell
+\stopFLOWchart
+
+\placefigure
+ [here][fig:bonus 2]
+ {An alternative for \in {figure}[fig:bonus 1].}
+ {\tx\FLOWchart[bonus 2]}
+
+\startFLOWchart [bonus 3]
+ \startFLOWcell
+ \name {tex}
+ \location {1,1}
+ \shape {action}
+ \text {\TEX}
+ \connection [bb] {pdf}
+ \connection [rl] {dvi}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {dvi}
+ \location {2,1}
+ \shape {action}
+ \text {\DVI}
+ \connection [rl] {ps}
+ \connection [tt] {pdf}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {ps}
+ \location {3,1}
+ \shape {action}
+ \text {\POSTSCRIPT}
+ \connection [rl] {pdf}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {pdf}
+ \location {4,1}
+ \shape {action}
+ \text {\PDF}
+ \stopFLOWcell
+\stopFLOWchart
+
+\placefigure
+ [here][fig:bonus 3]
+ {Yet another alternative for \in {figure}[fig:bonus 1].}
+ {\tx\FLOWchart[bonus 3]}
+
+Defining such a chart is not so much harder than previous cases. Each left,
+right, top and bottom point has two companion points: positive and negative. In
+connections the left points are: \type {pl}, \type {l} and \type {nl}: positive
+left, left and negative left, so the first cell in \in {figure} [fig:bonus 1] is
+defined as:
+
+\starttyping
+\startFLOWcell
+ \name {tex}
+ \location {1,1}
+ \shape {action}
+ \text {\TEX}
+ \connection [prpl] {pdf}
+ \connection [nrnl] {dvi}
+\stopFLOWcell
+\stoptyping
+
+Alternatively to \type {p} and \type {n} one may use \type {+} and \type {-}. As
+soon as the positive and negative points are used, the connection drawing
+routines will take into account the fact that they are off||center. This does not
+free users from thinking about better ways to draw such a chart.
+
+\stopsection
+
+\startsection[title={Clip and focus}]
+
+The flowcharter automatically calculates the size of the grid. When needed, one
+can force the dimensions and/or clip pieces of a chart. \in {Figure}
+[fig:clipped] shows such a clip. This example also shows why the offset, the
+small area around the outer grid lines, is important. \in {Figure} [fig:clipped]
+was produced while the next settings were in action.
+
+\startbuffer[clip]
+\setupFLOWcharts
+ [x=1,y=1,nx=2,ny=1]
+\stopbuffer
+
+\typebuffer[clip]
+
+\placefigure
+ [here][fig:clipped]
+ {Clipping a piece of a chart.}
+ {\tx\getbuffer[clip]\FLOWchart[connect]}
+
+Sometimes, for instance when explaining a chart, it makes sense to emphasize one
+or more particular cells. Therefore this module offers the ability to focus on
+cells. In \in {figure} [fig:focus] we see that the focus is on the cell with name
+\type {dvi}. This is accomplished by saying:
+
+\startbuffer
+\setupFLOWfocus
+ [framecolor=pragmacolor]
+\setupFLOWcharts
+ [focus=dvi]
+\stopbuffer
+
+\typebuffer
+
+\placefigure
+ [here][fig:focus]
+ {Gaining some focus.}
+ {\tx\getbuffer\FLOWchart[bonus 3]}
+
+Clipping and focus bring us to the third way of zooming in: autofocus. \in
+{Figure} [fig:autofocus] shows what happens when we say:
+
+\startbuffer
+\setupFLOWfocus
+ [framecolor=pragmacolor]
+\setupFLOWcharts
+ [focus=dvi,autofocus=dvi,
+ nx=1,ny=1]
+
+\startFLOWchart [bonus 3]
+ \startFLOWcell
+ \name {tex}
+ \location {1,1}
+ \shape {action}
+ \text {\TEX}
+ \connection [rl] {pdf}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {pdf}
+ \location {4,1}
+ \shape {action}
+ \text {\PDF}
+ \stopFLOWcell
+\stopFLOWchart
+\stopbuffer
+
+\typebuffer
+
+\placefigure
+ [here][fig:autofocus]
+ {Applying autofocus.}
+ {\tx\getbuffer\FLOWchart[bonus 3]}
+
+In \in {figure}[fig:autofocus] we see both focus and auto focus in action.
+
+\stopsection
+
+\startsection[title={Line types}]
+
+As is to be expected, we can set up some characteristics of a chart, the shapes,
+the connecting lines, and the focus. When we want dashed lines and a different
+shape color, we just say:
+
+\startbuffer
+\setupFLOWshapes
+ [framecolor=pragmacolor]
+\setupFLOWlines
+ [framecolor=pragmacolor,
+ dash=yes]
+\stopbuffer
+
+\typebuffer
+
+\placefigure
+ [here][fig:lines]
+ {Dashed and colored lines.}
+ {\tx\getbuffer\FLOWchart[bonus 3]}
+
+We can change the characteristics at several levels: chart, line, shape and|/|or
+focus. In the near future some more options will be added. Once the \METAPOST\
+module is stable and documented, the graphic code will also be accessible. The
+formal definition of the four setup commands is as follows (these diagrams
+conform the \CONTEXT\ conventions):
+
+\setup{setupFLOWcharts}
+
+\setup{setupFLOWfocus}
+
+\setup{setupFLOWlines}
+
+\setup{setupFLOWshapes}
+
+\stopsection
+
+\startsection[title={Overlays}]
+
+Why should we limit ourselves to text? In \CONTEXT\ most frames||related features
+can have overlays. Because in this flowchart module shapes are drawn by
+\METAPOST, we use a slightly different approach: there can be overlays but they
+are sort of clipped by the shape. \in {Figure} [fig:overlay] illustrates this.
+
+\startbuffer
+\defineoverlay
+ [coward]
+ [{\externalfigure
+ [cow]
+ [width=\overlaywidth,
+ height=\overlayheight]}]
+
+\startFLOWchart [overlay]
+ \startFLOWcell
+ \name {alpha}
+ \location {1,1}
+ \shape {procedure}
+ \connection [rl] {beta}
+ \figure {cow}
+ \text [lt] {\darkred \bfb COW 1}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {beta}
+ \location {2,1}
+ \shape {product}
+ \connection [rl] {gamma}
+ \overlay {cow}
+ \text {\darkgreen \bfb COW 2}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {gamma}
+ \location {3,1}
+ \shape {action}
+ \connection [rl] {alpha}
+ \overlay {cow}
+ \text [rb] {\darkblue \bfb COW 3}
+ \stopFLOWcell
+\stopFLOWchart
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\placefigure
+ [here][fig:overlay]
+ {Overlays.}
+ {\tx\FLOWchart[overlay]}
+
+There are two commands related to overlays. In our example we used: which
+automatically scales figure {\em cow} to the shape size. The normal rules for
+overlays apply. The width and height of the overlay are available at the moment
+the overlay is typeset.
+
+The text is aligned differently in this example and driven by an optional
+argument that can take one of the following values: \type {l}, \type {r}, \type
+{m}, \type {c}, \type {t}, \type {b}, \type {lt}, \type {rt}, \type {mt}, \type
+{ct}, \type {lb}, \type {rb}, \type {mb}, \type {cb}.
+
+\stopsection
+
+\startsection[title={Interaction}]
+
+One of the reasons for writing this module was that we wanted interactive
+flowcharts. The shape text can contain references. \footnote {Currently this only
+works ok when the chart is not scaled.} The shape as a whole becomes a button as
+soon as we add the \type {\destination} entry:
+
+\starttyping
+\startFLOWcell
+ ...
+ \destination {destination}
+ ...
+\stopFLOWcell
+\stoptyping
+
+\startbuffer[movie]
+\defineoverlay
+ [fun]
+ [{\externalfigure
+ [texwork.mov]
+ [width=\framedwidth,
+ height=\framedheight,
+ preview=yes,
+ repeat=yes]}]
+\stopbuffer
+
+\getbuffer[movie]
+
+\starthelptext [alpha]
+ \input knuth \blank D.E.~Knuth
+\stophelptext
+
+\starthelptext [beta]
+ \input tufte \blank E.R.~Tufte
+\stophelptext
+
+\starthelptext [delta]
+ \externalfigure[cow][width=\hsize]
+\stophelptext
+
+\startFLOWchart [interactive]
+
+ \startFLOWcell
+ \name {alpha}
+ \location {1,1}
+ \shape {procedure}
+ \connection [rl] {beta}
+ \text {\goto{introduction}[introduction]}
+ \stopFLOWcell
+
+ \startFLOWcell
+ \name {beta}
+ \location {2,1}
+ \shape {product}
+ \connection [rl] {gamma}
+ \text {Did you\\read me\\indeed?}
+ \destination{introduction}
+ \stopFLOWcell
+
+ \setupFLOWlines[dash=yes]
+
+ \startFLOWcell
+ \name {gamma}
+ \location {3,1}
+ \shape {action}
+ \connection [rl] {alpha}
+ \overlay {fun}
+ \stopFLOWcell
+
+ \setupFLOWlines[dash=no]
+
+ \startFLOWcell
+ \name {delta}
+ \location {4,1}
+ \shape {decision}
+ \connection [tt] {alpha}
+ \connection [tt] {beta}
+ \connection [tt] {gamma}
+ \figure {cow}
+ \stopFLOWcell
+
+\stopFLOWchart
+
+\placefigure
+ [here][fig:interactive]
+ {Interactive buttons.}
+ {\tx\FLOWchart[interactive]}
+
+When read as \PDF\ file, \in {figure} [fig:interactive] shows quite a few
+interactive features. The first cell has a \type {\goto} included in the text,
+like:
+
+\starttyping
+\startFLOWcell
+ ...
+ \text {\goto{introduction}[introduction]}
+ ...
+\stopFLOWcell
+\stoptyping
+
+The second shape is interactive as a whole. This is accomplished by saying:
+
+\starttyping
+\startFLOWcell
+ ...
+ \text {Did you\\read me\\indeed?}
+ \destination {introduction}
+ ...
+\stopFLOWcell
+\stoptyping
+
+The third cell is a movie, which is only visible in suitable viewers. The movie
+is included as an overlay.
+
+\typebuffer[movie]
+
+The last cell is an illustration.
+
+\stopsection
+
+\startsection[title={Splitting charts}]
+
+Sometimes a chart does not fit comfortably on the page. In such cases, it makes
+sense to split up the chart. There is a dedicated setup command to serve
+splitting:
+
+\setup{setupFLOWsplit}
+
+An example of splitting is:
+
+\starttyping
+\setupFLOWsplit
+ [nx=5,ny=10,
+ dx=1,dy=1,
+ before=,after=\page]
+
+\FLOWcharts[mybigflow]
+\stoptyping
+
+For easy alignment of the split pages, cut marks are added. This can be turned
+off by setting \type {marking} to \type {off}. The \type {n} parameters determine
+the number of cells per split off subject, and the \type {d} parameters specify
+the overlap: a value of~1 means that each split off subject has one row and|/|or
+columns in common with its neighbour.
+
+The splitter can be used with the split float placement macro:
+
+\starttyping
+\splitfloat
+ {\placefigure{What a big flowchart this is!}}
+ {\FLOWcharts[mybigflow]}
+\stoptyping
+
+Here every flowchart gets an caption with a decent subnumber.
+
+Related to splitting up charts is the option to define exit points as
+demonstrated in the next chart.
+
+\startbuffer
+\startFLOWchart[metatex]
+ \setupFLOWcharts
+ [width=6\bodyfontsize,
+ height=3\bodyfontsize,
+ dx=\bodyfontsize,
+ dy=\bodyfontsize]
+ \startFLOWcell
+ \name {texexec 1}
+ \location {1,1}
+ \shape {action}
+ \text {\TEXEXEC}
+ \connection [rl] {context 1}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {context 1}
+ \location {2,1}
+ \shape {action}
+ \text {\CONTEXT}
+ \connection [bt] {metapost 1}
+ \connection [rl] {texexec 2}
+ \exit [r] {123}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {metapost 1}
+ \location {2,2}
+ \shape {action}
+ \text {\METAPOST}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {texexec 2}
+ \location {3,1}
+ \shape {action}
+ \text {\TEXEXEC}
+ \connection [rl] {context 2}
+ \connection [bt] {metapost 2}
+ \exit [l] {123}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {context 2}
+ \location {4,1}
+ \shape {action}
+ \text {\CONTEXT}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {metapost 2}
+ \location {3,2}
+ \shape {action}
+ \text {\METAPOST}
+ \stopFLOWcell
+\stopFLOWchart
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer[a]
+\FLOWchart [metatex] [x=1,nx=2,frame=on]
+\stopbuffer
+
+\startbuffer[b]
+\FLOWchart [metatex] [x=3,nx=2,frame=on]
+\stopbuffer
+
+When we ask for subcharts, the exit points will show up. Because they don't
+attribute to the dimensions of the chart, you can still align charts as expected.
+
+\startlinecorrection[blank] \getbuffer[a] \stoplinecorrection
+\typebuffer[a]
+
+\startlinecorrection[blank] \getbuffer[b] \stoplinecorrection
+\typebuffer[b]
+
+\stopsection
+
+\startsection[title={Other features}]
+
+It is possible to predefine flow charts in a way similar to external figures.
+Currently this mechanism is under construction, so describing it would be a bit
+premature.
+
+Crossing lines, which are often forbidden in charts, can be made less confusing
+by adding a gap in the lines to be crossed. This is one of the features that are
+already implemented but not yet accessible by the \CONTEXT\ user interface.
+
+Another feature, used in this document, concerns automatic down||scaling. As soon
+as we start scaling illustrations, we introduce inconsistent typography,
+especially in the bodyfontsize. Therefore, the flow chart macros, when told to,
+are able to automatically scale down in steps of 1~point.
+
+{\em This manual was first published in GUST magazine and presented at the anual
+meeting of the Polish user group in Bachotek 1999. Next it was published in the
+MAPS volume 23. After that it became Up||To||Date number 1999-003, and now it's
+part of the manual series. This version is for \MKIV.}
+
+\stopsection
+
+\stopdocument
diff --git a/doc/context/sources/general/manuals/colors/colors-basics.tex b/doc/context/sources/general/manuals/colors/colors-basics.tex
new file mode 100644
index 000000000..4d7822bd0
--- /dev/null
+++ b/doc/context/sources/general/manuals/colors/colors-basics.tex
@@ -0,0 +1,1204 @@
+% language=uk
+
+\startcomponent colors-basics
+
+\environment colors-environment
+
+\usemodule[setups-basics] \loadsetups[i-color]
+
+\startchapter[title=Basics][color=darkred]
+
+\startsection[title=Color models]
+
+When you work with displays, and most of us do, the dominant color model is \RGB.
+As far as I know \CMYK\ electrowetting displays are still not in production and
+even there the \CMYK\ seems to have made place for \RGB\ (at least in promotion
+movies). This is strange since where \RGB\ is used in cases where colors are
+radiated, \CMYK\ shows up in reflective situations (and epub readers are just
+that). But \RGB\ and \CMYK\ being complementary is not the only difference:
+\CMYK\ has an explicit black channel, and as a consequence you cannot go from one
+to the other color space without loss.
+
+In print \CMYK\ is dominant but in order to get real good colors you can go with
+spot colors. The ink is not mixed with others but applied in more or less
+quantity. A mixture of spot colors and \CMYK\ is used too. You can combine spot
+colors into a so called multitone color. Often spot colors have names (for
+instance refering to Pantone) but they always have a specification in another
+color space in order to be shown on screen. Think of \quotation {gold} being a
+valid ink, but hard to render on screen, so some yellowish replacement is used
+there when documents get prepared on screen.
+
+In \CONTEXT\ all these models are supported, either or not at the same time. In \MKII\
+you had to turn on color support explicitly, if only because of the impact of the
+overhead on performance, but in \MKIV\ color is on by default. You can disable it
+with:
+
+\starttyping
+\setupcolors
+ [state=stop]
+\stoptyping
+
+The three mentioned models are controlled by keys, and by default we have set:
+
+\starttyping
+\setupcolors
+ [rgb=yes,
+ cmyk=yes,
+ spot=yes]
+\stoptyping
+
+Spot colors and their combinations in multitone colors are controlled by the same
+parameter. You can define colors in the \HSV\ color space but in the end these
+become and behave like \RGB.
+
+\stopsection
+
+\startsection[title=Using color]
+
+Normally you will use colors grouped. Most environments accept a \type {color}
+parameter (some have \type {textcolor} or similar longer names too). In a running
+text you can use:
+
+\starttyping
+\color[red]{This will show up red.}
+\stoptyping
+
+or:
+
+\starttyping
+\startcolor[red]
+ This will show up red.
+\stopcolor
+\stoptyping
+
+In case you don't want the grouping you can use:
+
+\starttyping
+\directcolor[red]
+\stoptyping
+
+You can even use:
+
+\starttyping
+\colored[r=0.5]{also red}
+\stoptyping
+
+In which case an anonymous color is used. An ungrouped variant of this is:
+
+\starttyping
+\directcolored[r=0.5]
+\stoptyping
+
+You will seldom use these direct variants, but they might come in handy when you
+write macros yourself where extra grouping starts interfering. In fact, it often
+makes sense to use a bit more abstraction:
+
+\startbuffer
+\definehighlight
+ [important]
+ [color=red]
+
+First \highlight[important]{or} second \important {or} third.
+\stopbuffer
+
+\typebuffer
+
+This gives: \inlinebuffer .
+
+\stopsection
+
+\startsection[title=Using \CMYK\ or \RGB]
+
+When you compare colors in different color spaces, you need to be aware of the
+fact that when a black component is used in \CMYK, conversion to \RGB\ might give
+the same results but going back from that to \CMYK\ will look different from the
+original. Also, \CMYK\ colors are often tuned for specific paper.
+
+\startbuffer
+\definecolor[demo:rgb:1][r=1.0,g=1.0]
+\definecolor[demo:rgb:2][r=1.0,g=1.0,b=0.5]
+\definecolor[demo:rgb:3][r=1.0,g=1.0,b=0.6]
+\definecolor[demo:cmy:1][y=1.0]
+\definecolor[demo:cmy:2][y=0.5]
+\definecolor[demo:cmy:3][y=0.4]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+In these definitions we have no black component. In \in {figure}
+[color:rgb:cmyk:1] we see how these colors translate to the other color spaces.
+
+\startbuffer[compare]
+\startbuffer
+\definemeasure[demo][(\textwidth-2em)/3]
+\startcombination[3*2]
+ {\blackrule[width=\measure{demo},height=1cm,depth=0cm,color=demo:rgb:1]}{\infofont\colorcomponents{demo:rgb:1}}
+ {\blackrule[width=\measure{demo},height=1cm,depth=0cm,color=demo:rgb:2]}{\infofont\colorcomponents{demo:rgb:2}}
+ {\blackrule[width=\measure{demo},height=1cm,depth=0cm,color=demo:rgb:3]}{\infofont\colorcomponents{demo:rgb:3}}
+ {\blackrule[width=\measure{demo},height=1cm,depth=0cm,color=demo:cmy:1]}{\infofont\colorcomponents{demo:cmy:1}}
+ {\blackrule[width=\measure{demo},height=1cm,depth=0cm,color=demo:cmy:2]}{\infofont\colorcomponents{demo:cmy:2}}
+ {\blackrule[width=\measure{demo},height=1cm,depth=0cm,color=demo:cmy:3]}{\infofont\colorcomponents{demo:cmy:3}}
+\stopcombination
+\stopbuffer
+
+\startcombination[1*4]
+ {\setupcolors[rgb=yes,cmyk=yes]\getbuffer} {Both \RGB\ and \CMYK\ enabled}
+ {\setupcolors [rgb=no,cmyk=yes]\getbuffer} {Only \CMYK\ enabled.}
+ {\setupcolors [rgb=yes,cmyk=no]\getbuffer} {Only \RGB\ enabled.}
+ {\setupcolors [rgb=no,cmyk=no]\getbuffer} {Both \RGB\ and \CMYK\ disabled.}
+\stopcombination
+\stopbuffer
+
+\startplacefigure[location=page,reference=color:rgb:cmyk:1,title={What happens when we disable color spaces.}]
+ \getbuffer[compare]
+\stopplacefigure
+
+\startbuffer
+\definecolor[demo:rgb:1][r=0.5,g=0.6,b=0.7]
+\definecolor[demo:rgb:2][r=0.5,g=0.6,b=0.7]
+\definecolor[demo:rgb:3][r=0.5,g=0.6,b=0.7]
+\definecolor[demo:cmy:1][c=0.5,m=0.4,y=0.3]
+\definecolor[demo:cmy:2][c=0.4,m=0.3,y=0.2,k=0.1]
+\definecolor[demo:cmy:3][c=0.3,m=0.2,y=0.1,k=0.2]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+When we define the colors as above, you can see a difference between the \RGB\
+and \CMYK\ values, but also between a black component versus black distributed
+over the colorants. This is seen best in \in {figure} [color:rgb:cmyk:2] when we
+compare the first and third colors alongside. In \in {figure} [color:rgb:cmyk:3]
+you see the whole repertoire.
+
+\startplacefigure[reference=color:rgb:cmyk:2,title={The impact of black on a \CMYK\ color.}]
+\startMPcode
+ fill fullsquare xyscaled (TextWidth,25mm) withcolor \MPcolor{demo:cmy:3} ;
+ fill fullsquare xyscaled (TextWidth,20mm) withcolor \MPcolor{demo:cmy:1} ;
+ fill fullsquare xyscaled (TextWidth,10mm) withcolor \MPcolor{demo:cmy:3} ;
+ fill fullsquare xyscaled (TextWidth, 5mm) withcolor \MPcolor{demo:cmy:1} ;
+\stopMPcode
+\stopplacefigure
+
+\startplacefigure[reference=color:rgb:cmyk:3,title={What happens when we disable color spaces (black component).}]
+ \getbuffer[compare]
+\stopplacefigure
+
+\stopsection
+
+\startsection[title=Conversion]
+
+A conversion to gray happens when \RGB\ and \CMYK\ are both disabled. The following
+setting forces conversion. It disables both \RGB\ and \CMYK:
+
+\starttyping
+\setupcolors
+ [conversion=always]
+\stoptyping
+
+The default setting is \type {yes} which means that colors will be reduced to gray in
+the backend. This is an optimization which can result in slightly smaller output:
+
+\starttabulate[|l|c|l|]
+\NC \NC \bf \# \NC \bf \PDF\ sequence \NC \NR
+\NC \bf cmyk \NC 23 \NC \tttf 0 0 0 0.5 k 0 0 0 0.5 K \NC \NR
+\NC \bf rgb \NC 29 \NC \tttf 0.5 0.5 0.5 rg 0.5 0.5 0.5 RG \NC \NR
+\NC \bf gray \NC 11 \NC \tttf 0.5 g 0.5 G \NC \NR
+\stoptabulate
+
+The conversion to gray is controlled by:
+
+\starttyping
+\setupcolors
+ [factor=yes]
+\stoptyping
+
+Like \type {conversion} the \type {factor} is a global setting. You can play with the factor values.
+The default (\type {yes}) uses the factors used by color television:
+
+\startformula
+ s = 0.30r + 0.59g + 0.11b
+\stopformula
+
+In \in {figure} [color:demo:gray] we demonstrate what happens when you use different
+values. Normally you won't change the defaults but for experimenting we do provide
+the option:
+
+\starttyping
+\setupcolors
+ [factor=0.20:0.40:0.40]
+\stoptyping
+
+There is one pitfall. Colors are finalized per page and as this is a backend
+feature the value current when a page is shipped out is used. An exception are
+\METAPOST\ graphics, as they have local resources and are finalized immediately.
+This is hardly a limitation because one will never set these numbers in the
+middle of a document.
+
+\starttexdefinition color:demo:gray:do
+ \definecolor[demo:rgb:0][r=0.5,g=0.6,b=0.7]
+ % \blackrule[width=4cm,height=1cm,color=demo:rgb:0]
+ \lower.4\strutdp\hbox\bgroup
+ \startMPcode
+ fill unitsquare xyscaled (.5TextWidth,.9LineHeight)
+ withcolor "demo:rgb:0";
+ \stopMPcode
+ \egroup
+\stoptexdefinition
+
+\starttexdefinition color:demo:gray #1#2#3
+ \NC \tttf #1 \NC \tttf #2 \NC \tttf #3 \NC
+ \setupcolors[factor={#1:#2:#3}]
+ \setupcolors[rgb=no,cmyk=no]
+ \texdefinition{color:demo:gray:do}
+ \setupcolors[factor=yes]
+ \NC \NR
+\stoptexdefinition
+
+\startplacefigure[reference=color:demo:gray,title={Color to gray conversion using factors.}]
+\starttabulate[|c|c|c|c|]
+\NC \bf r \NC \bf g \NC \bf b \NC \bf gray \NC \NR
+\NC \NC \NC \NC \texdefinition{color:demo:gray:do} \NC \NR
+\texdefinition{color:demo:gray}{0.30}{0.59}{0.11}
+\texdefinition{color:demo:gray}{0.30}{0.11}{0.59}
+\texdefinition{color:demo:gray}{0.59}{0.30}{0.11}
+\texdefinition{color:demo:gray}{0.11}{0.30}{0.59}
+\texdefinition{color:demo:gray}{0.11}{0.59}{0.30}
+\texdefinition{color:demo:gray}{0.59}{0.11}{0.30}
+\texdefinition{color:demo:gray}{0.20}{0.40}{0.40}
+\texdefinition{color:demo:gray}{0.30}{0.60}{0.10}
+\texdefinition{color:demo:gray}{0.20}{0.30}{0.20}
+\texdefinition{color:demo:gray}{0.40}{0.40}{0.40}
+\stoptabulate
+\stopplacefigure
+
+\stopsection
+
+% let's take a break and watch: https://www.youtube.com/watch?v=baLrrW3El-M
+
+\startsection[title=Definitions]
+
+The mostly used color definition command is \type {\definecolor}. Here we define the
+primary colors:
+
+\startbuffer
+\definecolor [red] [r=1]
+\definecolor [green] [g=1]
+\definecolor [blue] [b=1]
+\definecolor [yellow] [y=1]
+\definecolor [magenta] [m=1]
+\definecolor [cyan] [c=1]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+These can be visualized as follows:
+
+\startbuffer
+\showcolorcomponents[red,green,blue,yellow,magenta,cyan,black]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Transparency is included in these tables but is, as already noted, in fact
+independent. It can be defined with a color:
+
+\startbuffer
+\definecolor [t:red] [r=1,a=1,t=.5]
+\definecolor [t:green] [g=1,a=1,t=.5]
+\definecolor [t:blue] [b=1,a=1,t=.5]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+This time the transparency values show up too:
+
+\showcolorcomponents[t:red,t:green,t:blue]
+
+Because transparency is separated from color, we can define transparent behaviour
+as follows:
+
+\startbuffer
+\definecolor[t:only] [a=1,t=.5]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer
+ \dontleavehmode
+ \blackrule[width=4cm,height=1cm,color=darkgreen]%
+ \hskip-2cm
+ \color[t:only]{\blackrule[width=4cm,height=1cm,color=darkred]}%
+ \hskip-2cm
+ \color[t:only]{\blackrule[width=4cm,height=1cm]}
+\stopbuffer
+
+\typebuffer
+
+We skip back to create an overlay, so we get:
+
+\startlinecorrection
+\getbuffer
+\stoplinecorrection
+
+In the section about transparency a bit more will be said about the relation between
+color and transparencies and how to cheat.
+
+As soon as you need to typeset something for professional printing, spot colors
+will show up so they are supported too. A spot color is not really a color but
+related to the substance that gets put on the paper. This can be ink but also
+something metallic, like silver, gold or some texture. In these cases we need
+something to represent it when not printed on a suitable device so again we end
+up with a color. This is reflected in the way spot colors are set up.
+
+\startbuffer
+\definecolor [parentspot] [r=.5,g=.2,b=.8]
+\definespotcolor [childspot-1] [parentspot] [p=.7,e=fancy]
+\definespotcolor [childspot-2] [parentspot] [p=.4]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+The three colors, two of them are spot colors, show up as follows:
+
+\setupcolors[spot=yes]
+
+\showcolorcomponents[parentspot,childspot-1,childspot-2]
+
+The \type {p} is comparable to the \type {s} in gray scales. The \type {e}
+parameter can be used to specify a name for the color. In the \PDF\ file that
+name will become the separation name (a popular commercial naming scheme is
+Pantone).
+
+A combination of spotcolor is called a multitone color. These are defined as
+follows (we also define a few spotcolors and use transparency):
+
+\startbuffer
+\definespotcolor [spotone] [darkred] [p=1]
+\definespotcolor [spottwo] [darkgreen] [p=1]
+
+\definespotcolor [spotone-t] [darkred] [a=1,t=.5]
+\definespotcolor [spottwo-t] [darkgreen] [a=1,t=.5]
+
+\definemultitonecolor
+ [whatever]
+ [spotone=.5,spottwo=.5]
+ [b=.5]
+
+\definemultitonecolor
+ [whatever-t]
+ [spotone=.5,spottwo=.5]
+ [b=.5]
+ [a=1,t=.5]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\showcolorcomponents[spotone,spottwo,spotone-t,spottwo-t,whatever,whatever-t]
+
+Transparencies combine as follows:
+
+\startbuffer
+\blackrule[width=3cm,height=1cm,color=spotone-t]\hskip-1.5cm
+\blackrule[width=3cm,height=1cm,color=spotone-t]
+\stopbuffer
+
+\typebuffer
+
+\startlinecorrection
+\dontleavehmode\getbuffer
+\stoplinecorrection
+
+In case you want to specify colors in the \HSV\ color space, you can do that too.
+The hue parameter (\type {h}) is in degrees and runs from 0 upto 360 (larger
+values get divided). The saturation (\type {s}) and value (\type {v}) parameters
+run from 0 to 1. The \type {v} parameter is mandate. In \in {figure} [fig:hsv] we
+show what the last two variables do.
+
+\starttyping
+\definecolor[somecolor][h=125,s=0.5,v=0.8]
+\stoptyping
+
+\startMPextensions
+ vardef hsvcircle(expr s, v) =
+ image ( save p ; path p ; p := fullcircle ;
+ save l ; numeric l ; l := length(p)/360 ;
+ for i=0 upto 360 :
+ fill origin -- subpath (i*l,(i+1)*l) of p -- cycle withcolor hsvtorgb(i,s,v) ;
+ endfor ;
+ )
+ enddef;
+\stopMPextensions
+
+\startplacefigure[reference=fig:hsv,title={Four hsv color circle running from 0 to 360 degrees, with zero at the right.}]
+ \startcombination[4*1]
+ {\startMPcode draw hsvcircle(0.6,0.6) scaled 3cm ; \stopMPcode} {\tttf s=0.6 v=0.6}
+ {\startMPcode draw hsvcircle(0.4,0.6) scaled 3cm ; \stopMPcode} {\tttf s=0.4 v=0.6}
+ {\startMPcode draw hsvcircle(0.6,0.4) scaled 3cm ; \stopMPcode} {\tttf s=0.6 v=0.4}
+ {\startMPcode draw hsvcircle(0.4,0.4) scaled 3cm ; \stopMPcode} {\tttf s=0.4 v=0.4}
+ \stopcombination
+\stopplacefigure
+
+% \scratchdimen\dimexpr(\textwidth-118pt)/120\relax
+% \dontleavehmode \dostepwiserecurse{0}{359}{1}{%
+% \definecolor[tempcolor][h=#1,s=0.6,v=0.6]%
+% \blackrule[color=tempcolor,width=\scratchdimen,height=1ex,depth=1ex]%
+% \hskip1pt
+% }
+
+If you need to use hexadecimal color specifications you can use these
+definitions:
+
+\starttyping
+\definecolor[mycolor][x=4477AA]
+\definecolor[mycolor][h=4477AA]
+\definecolor[mycolor][x=66]
+\definecolor[mycolor][#4477AA]
+\stoptyping
+
+The \type {#} is normally not accepted in \TEX\ source code but when you get the
+specification from elsewhere (e.g.\ \XML) it can be convenient.
+
+\stopsection
+
+\startsection[title=Freezing colors]
+
+We can clone colors and thereby overload color dynamically. You can however
+freeze colors via the setup option \type {expansion}.
+
+\startbuffer
+\definecolor[green] [r=.5]{({\green green -> red})}
+\definecolor[green] [g=.5]{({\green green -> green})}
+\definecolor[green] [blue]{({\green green -> blue})}
+\definecolor[blue] [red]{({\green green -> red})}
+\setupcolors[expansion=yes]%
+\definecolor[blue] [red]%
+\definecolor[green] [blue]%
+\definecolor[blue] [r=.5]{({\green green -> blue})}
+\stopbuffer
+
+\typebuffer
+
+\start
+\definecolor[red] [r=.5]%
+\definecolor[green][g=.5]%
+\definecolor[blue] [b=.5]%
+\getbuffer
+\stop
+
+\stopsection
+
+\startsection[title=Color groups]
+
+Nowadays we seldom use colorgroups but they are still supported. Groups are
+collections of distinctive colors, something we needed in projects where many
+graphics had to be made and consistency between text and image colors was
+important. The groups can be translated into similar collections in drawing
+programs used at that time.
+
+\startbuffer
+\definecolorgroup
+ [redish]
+ [1.00:0.90:0.90, % 1
+ 1.00:0.80:0.80, % 2
+ 1.00:0.70:0.70, % 3
+ 1.00:0.55:0.55, % 4
+ 1.00:0.40:0.40, % 5
+ 1.00:0.25:0.25, % 6
+ 1.00:0.15:0.15, % 7
+ 0.90:0.00:0.00] % 8
+\stopbuffer
+
+\typebuffer \getbuffer
+
+The redish color is called by number:
+
+\startbuffer
+\blackrule[width=3cm,height=1cm,depth=0pt,color=redish:1]\quad
+\blackrule[width=3cm,height=1cm,depth=0pt,color=redish:2]\quad
+\blackrule[width=3cm,height=1cm,depth=0pt,color=redish:3]
+\stopbuffer
+
+\typebuffer
+
+The number of elements is normally limited and eight is about what is useful and
+still distinguishes good enough when printed in black and white.
+
+\startlinecorrection
+\dontleavehmode\getbuffer
+\stoplinecorrection
+
+\startlinecorrection
+\setupcolors[rgb=no,cmyk=no]\dontleavehmode\getbuffer
+\stoplinecorrection
+
+\stopsection
+
+\startsection[title=Palets]
+
+Color palets are handy when you want to use a set of (named) colors but
+also want to switch efficiently between different definitions:
+
+\startbuffer
+\definepalet
+ [standard]
+ [darkred=darkcyan,
+ darkgreen=darkmagenta,
+ darkblue=darkyellow]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+The \type {\setuppalet} commands switches to a palet. When a requested color is
+not part of a palet, a regular lookup happens. This is used as:
+
+\startbuffer
+\blackrule[width=15mm,height=10mm,depth=0mm,color=darkred]\quad
+\blackrule[width=15mm,height=10mm,depth=0mm,color=darkgreen]\quad
+\blackrule[width=15mm,height=10mm,depth=0mm,color=darkblue]\quad
+\setuppalet[standard]%
+\blackrule[width=15mm,height=10mm,depth=0mm,color=darkred]\quad
+\blackrule[width=15mm,height=10mm,depth=0mm,color=darkgreen]\quad
+\blackrule[width=15mm,height=10mm,depth=0mm,color=darkblue]
+\stopbuffer
+
+\typebuffer
+
+\startlinecorrection
+\dontleavehmode \getbuffer
+\stoplinecorrection
+
+Here we use color names but often you end up with more symbolic names:
+
+\starttyping
+\definepalet
+ [standard]
+ [important=darkred,
+ notabene=darkgreen,
+ warning=darkyellow]
+\stoptyping
+
+As with the regular color commands, the palet mechanism is an old one but it is
+well integrated. Instead of inheriting you can also use definitions:
+
+\starttyping
+\definepalet
+ [standard]
+ [important={r=.5},
+ notabene={g=.5},
+ warning={r=.5,g=.5}]
+\stoptyping
+
+\stopsection
+
+\startsection[title=Transparency]
+
+We already discussed transparency as part of colors. In most cases we will choose
+type {normal} (or \type {1}) as transparency type, but there are more:
+
+\startluacode
+ local codes = table.swapped(attributes.transparencies.names)
+
+ context.startcolumns { n = 4 }
+ context.starttabulate ( { "|B||" }, { keeptogether = "no" } )
+ for i=0,#codes do
+ context.NC()
+ context(i)
+ context.NC()
+ context(codes[i])
+ context.NC()
+ context.NR()
+ end
+ context.stoptabulate()
+ context.stopcolumns()
+\stopluacode
+
+In \in {figure} [fig:transparency] we compare these variants. Not all are as
+effective as their effect depends on several factors. You can read more about it
+in the \PDF\ specification.
+
+\startMPextensions
+ vardef transdemo(expr b) =
+ image ( save p ; path p ; p := fullcircle ;
+ save l ; numeric l ; l := length(p)/16 ;
+ if (b = 1) or (b = 3) :
+ fill fullcircle scaled 1.00 withcolor yellow ;
+ fill fullcircle scaled 0.80 withcolor red ;
+ fill fullcircle scaled 0.60 withcolor black ;
+ fill fullcircle scaled 0.40 withcolor white ;
+ fill fullcircle scaled 0.20 withcolor .5white ;
+ fi ;
+ if (b = 2) or (b = 3) :
+ for i=0 upto 15 :
+ fill origin -- subpath (i*l,(i+1)*l) of p -- cycle
+ withcolor red
+ withtransparency (i,0.5) ;
+ draw textext("\ttbf " & decimal i) ysized .04 shifted (.45,0) rotated (i*360/16 + 360/32) ;
+ endfor ;
+ fi ;
+ )
+ enddef;
+\stopMPextensions
+
+\startplacefigure[reference=fig:transparency,title={The differences between the transparency options. The center is explicitly filled with white.}]
+ \startcombination[3*1]
+ {\startMPcode draw transdemo(1) scaled 4cm ; \stopMPcode} {\tttf backgrounds used}
+ {\startMPcode draw transdemo(2) scaled 4cm ; \stopMPcode} {\tttf transparencies used}
+ {\startMPcode draw transdemo(3) scaled 4cm ; \stopMPcode} {\tttf transparency overlayed}
+ \stopcombination
+\stopplacefigure
+
+Colors and transparencies are coupled by definitions. We will explain this by
+some examples. When we say:
+
+\startbuffer
+\definecolor[clr1][r=.5]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+A non|-|transparent color is defined and when we say:
+
+\startbuffer
+\definecolor[clr2][g=.5,a=1,t=.5]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+We defined a color with a transparency. However, color and transparency get separated
+attributes. So when we nest them as in:
+
+\startbuffer
+\color[clr1]{\bf RED \color[clr2] {GREEN}}
+\color[clr2]{\bf GREEN \color[clr1] {RED} }
+\stopbuffer
+
+\typebuffer
+
+we get:
+
+\startlines \getbuffer \stoplines
+
+The transparency of the outer color is also applied to the inner color. If you
+don't want that, you explicitly need to set them:
+
+\startbuffer
+\definecolor[clr3][b=.5,a=1,t=1]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer
+\color[clr1]{\bf RED \color[clr2] {GREEN} \color[clr3]{BLUE} }
+\color[clr2]{\bf GREEN \color[clr1] {RED} \color[clr2]{GREEN}}
+\color[clr3]{\bf BLUE \color[clr1] {RED} \color[clr2]{GREEN}}
+\stopbuffer
+
+\typebuffer
+
+we get:
+
+\startlines \getbuffer \stoplines
+
+If you define a transparent|-|only color, you get transparent black:
+
+\startbuffer
+\definecolor[clr4][a=1,t=.5]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+So:
+
+\startbuffer
+\color[clr1]{\bf RED \color[clr4] {RED}}
+\color[clr4]{\bf BLACK \color[clr1] {RED}}
+\stopbuffer
+
+\typebuffer
+
+gives:
+
+\startlines \getbuffer \stoplines
+
+In addition to the already discussed definers and setters we also have a few
+special ones. Personally I never needed them but they are the for completeness.
+
+\startbuffer
+\definetransparency[tsp1][a=1,t=.5]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+We apply this to some text:
+
+\startbuffer
+\color [clr1]{\bf RED \transparent[tsp1] {RED} }
+\transparent[tsp1]{\bf BLACK \color [clr1] {RED} }
+\transparent[tsp1]{\bf BLACK \transparent[reset]{BLACK} }
+\stopbuffer
+
+\typebuffer
+
+and get:
+
+\startlines \getbuffer \stoplines
+
+We can also only switch color:
+
+\startbuffer
+\color[clr1]{\bf RED \color [clr2] {GREEN}}
+\color[clr1]{\bf RED \coloronly[clr2] {GREEN}}
+\stopbuffer
+
+\typebuffer
+
+So the second line has no transparency:
+
+\startlines \getbuffer \stoplines
+
+The \typ {\starttransparent} and \type {\startcoloronly} commands are the
+complements of \typ {\transparent} and \typ {\coloronly}.
+
+\stopsection
+
+\startsection[title=Interpolation]
+
+You can define intermediate colors in a way comparable with \METAPOST\ \type
+{.5[red,green]} kind of specifications. Here are some examples:
+
+\startbuffer
+\definecolor [mycolor1] [.5(red,green)]
+\definecolor [mycolor2] [.8(red,green)]
+\definecolor [mycolor3] [.4(red,white)]
+\definecolor [mycolor4] [.4(white,red)]
+
+\showcolorcomponents[red,green,mycolor1,mycolor2,mycolor3,mycolor4]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+An older method, still available is:
+
+\starttyping
+\defineintermediatecolor[mycolor5][0.5,red,green]
+\stoptyping
+
+A variation on this are complementary colors:
+
+\startbuffer
+\definecolor[mycolor1][.5(blue,red)]
+\definecolor[mycolor2][-.5(blue,red)]
+\definecolor[mycolor3][-(blue)]
+\definecolor[mycolor4][-(red)]
+
+\showcolorcomponents[blue,red,mycolor1,mycolor2,mycolor3,mycolor4]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\stopsection
+
+\startsection[title=PDF]
+
+Although it is not perfect, \PDF\ evolved in such a way that it will stay around
+for a while. One reason is that it has become a standard, or more precisely a set
+of standards. Depending on what variant you choose color support is limited.
+
+\startluacode
+
+local function state(v)
+ context.NC()
+ if v then
+ context("\\star")
+ end
+end
+
+context.starttabulate { "|l|c|c|c|c|c|" }
+context.NC() context.bold("format")
+context.NC() context.bold("gray")
+context.NC() context.bold("rgb")
+context.NC() context.bold("cmyk")
+context.NC() context.bold("spot")
+-------.NC() context.bold("multi")
+context.NC() context.bold("transparency")
+context.NC() context.NR()
+for name, data in table.sortedhash(lpdf.formats.data) do
+ context.NC() context.type(name)
+ state(data.gray_scale)
+ state(data.rgb_colors)
+ state(data.cmyk_colors)
+ state(data.spot_colors)
+ -- state(data.nchannel_colorspace)
+ -- state(data.calibrated_rgb_colors)
+ -- state(data.cielab_colors)
+ state(data.transparency)
+ -- state(data.include_intents)
+ -- state(data.internal_icc_profiles)
+ -- state(data.external_icc_profiles)
+ context.NR()
+end
+context.stoptabulate()
+
+\stopluacode
+
+When you have set the \type{format} with \type {\setupbackend} to one of the
+known formats mentioned in the previous table, the color conversions will
+automatically kick in.
+
+\stopsection
+
+\startsection[title=Unboxing]
+
+This paragraph is somewhat complex, so skip it when you don't feel comfortable
+with the subject or when you've never seen low level \CONTEXT\ code.
+
+Colors are implemented using attributes. Attributes behave like fonts. This means
+that they are kind of frozen once material is boxed. Consider that we define a
+box as follows:
+
+\startbuffer
+\setbox0\hbox{\bf default {\darkred red \darkgreen green} default}
+\stopbuffer
+
+\typebuffer \getbuffer
+
+What do you expect to come out the next code? In \MKII\ the \quote {default}
+inside the box will be colored yellow but the internal red and and green words
+will keep their color.
+
+\startbuffer
+\bf default {\darkyellow yellow {\box0} yellow} default
+\stopbuffer
+
+\typebuffer
+
+This is what we get in \MKIV: \start \inlinebuffer \stop
+
+When we use fonts switches we don't expect the content of the
+box to change. So, in the following the \quote {default} texts will
+{\em not} become bold.
+
+\startbuffer
+\setbox0\hbox{default {\sl slanted \bi bold italic} default}
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer
+default {\bf bold {\box0} bold} default
+\stopbuffer
+
+\typebuffer
+
+Now we get: \inlinebuffer .
+
+Redoing a box with a new font is sort of tricky as by then all kind of
+manipulations have been applied and the original inputs is long gone. But colors
+are easier to deal with and therefore in \MKIV\ we have a trick to make sure the
+outer color gets applied to the box:
+
+\startbuffer[enable]
+\enabledirectives
+ [attributes.inheritance]
+\stopbuffer
+
+\startbuffer
+default {\bf \darkyellow yellow {\attributedbox0} yellow} default
+\stopbuffer
+
+\typebuffer
+
+So, we get: \start\inlinebuffer[box]\inlinebuffer[enable]\space\inlinebuffer
+\stop, but only after we have enabled this mechanisms explicitly:
+
+\typebuffer[enable]
+
+There is also an \type {\attributedcopy} macro. These macros signal the attribute
+resolver that this box is to be treated special.
+
+In \MKII\ we have a similar situation which is why we had the option (only used
+deep down in \CONTEXT) to encapsulate a bunch of code with
+
+\starttyping
+\startregistercolor[foregroundcolor]
+some macro code ... here foregroundcolor is applied ... more code
+\stopregistercolor
+\stoptyping
+
+This is for instance used in the \type {\framed} macro. First we package the
+content, foregroundcolor is not yet applied because the injected specials of
+literals can interfere badly, but by registering the colors the nested color
+calls are tricked into thinking that preceding and following content is colored.
+When packaged, we apply backgrounds, frames, and foregroundcolor to the whole
+result. Because nested colors were aware of the foregroundcolor they have
+properly reverted to this color when needed.
+
+In \MKIV\ the situation is reversed. Here we definitely need to set the
+foregroundcolor because otherwise attributes are not set. This is no problem
+because contrary to \MKII\ colors don't interfere (no extra nodes). We could have
+flushed the framed content using \type {\attributedbox}, but we don't want to
+enable inheritance by default because it comes with some overhead.
+
+\stopsection
+
+\startsection[title=Color intents]
+
+If we do this:
+
+\startbuffer
+\startoverlay
+ {\blackrule[color=darkred, height=2cm,width=4cm]}
+ {\blackrule[color=darkblue,height=1cm,width=3cm]}
+\stopoverlay
+\stopbuffer
+
+\typebuffer
+
+we get:
+
+\startlinecorrection
+\getbuffer
+\stoplinecorrection
+
+The blue rectangle is drawn on top of the red one. In print, normally the
+printing engine will make sure that there is no red below the blue. In case of
+transparent colors this is somewhat tricky because then we definitely want to see
+part of what lays below.
+
+You can control this process with the following commands:
+
+\starttyping
+\setupcolors
+ [intent=...]
+\stoptyping
+
+The default setting is \type {none} but you can set the intent to \type {overprint} or
+\type {knockout} as well. In a running text you can use the following commands:
+
+\starttyping
+\startcolorintent[overprint|knockout]
+ ...
+\stopcolorintent
+
+\startoverprint
+ ...
+\stopoverprint
+
+\startknockout
+ ...
+\stopknockout
+\stoptyping
+
+In practice you will probably seldom need to deal with this so best leave the defaults
+as they are.
+
+\stopsection
+
+\startsection[title=Collections]
+
+Collections are predefined sets of colors. You find them in the files \type
+{colo-imp-*.mkiv} and you can make such files yourself. When you define a color a
+command is generated by default. When you load a collection, there is a danger
+that you redefine commands unintended. For that reason most collections are
+wrapped in:
+
+\starttyping
+\startprotectedcolors
+ % definitions
+\stopprotectedcolors
+\stoptyping
+
+This prevents commands being defined and assumes that colors are accessed by
+using the \type {color} parameter of setup commands or in the text with:
+
+\starttyping
+\color[somecolor]{this gets colored}
+
+\startcolor[somecolor]
+ this gets colored
+\stopcolorintent
+\stoptyping
+
+The default set (\type {rgb}) is already preloaded with:
+
+\starttyping
+\usecolors[rgb] % preloaded
+\stoptyping
+
+You can get a list of colors with
+
+\startbuffer
+\showcolor[rgb]
+\stopbuffer
+
+\typebuffer
+
+This generates the list:
+
+\getbuffer
+
+These are the collections shipped with \CONTEXT. Some names are
+
+\starttabulate[|T||]
+\NC crayola \NC crayon colors \NC \NR
+\NC dem \NC a demo set of groups and palets \NC \NR
+\NC ema \NC an old coming from an Emacs user \NC \NR
+%NC pan \NC a bunch of Pantone colors \NC \NR % can't be distributed
+%NC pra \NC colors used at \PRAGMA \NC \NR
+\NC rainbow \NC a series of color groups by Alan \NC \NR
+\NC ral \NC a set often used in industry (from Germany) \NC \NR
+\NC rgb \NC a basic set of colors defined in the \RGB\ color space \NC \NR
+%NC ros \NC the roscolux color set used in theater and cinema lighting \NC \NR % probably can't be distributed
+\NC x11 \NC (most of the) standard X11 \RGB\ colors \NC \NR
+\stoptabulate
+
+You can look in these files to see what gets defined. Even if you don't use them
+they might be illustrative,
+
+\stopsection
+
+\startsection[title=Text color]
+
+Setting the color of the running text is done with:
+
+\starttyping
+\setupcolors
+ [textcolor=darkgray]
+\stoptyping
+
+If needed you can also set the \type {pagecolormodel} there but its default value
+is \type {none} which means that it will obey the global settings.
+
+\stopsection
+
+\startsection[title=Tikz]
+
+In case you use the TikZ graphical subsystem you need to be aware of the the fact
+that its color support is more geared towards \LATEX. There is glue code that
+binds the \CONTEXT\ color system to its internal representation but there can
+still be problems. For instance, not all color systems are supported so \CONTEXT\
+will try to remap, but only when it knows that it has to do so. You can best not
+mix colorspaces when you use TikZ. If you really want (and there is no real
+reason to do so) you can say:
+
+\starttyping
+\enabledirectives[colors.pgf]
+\stoptyping
+
+and then (at the cost of some extra overhead) define colors as:
+
+\starttyping
+\definecolor[pgfcolora][blue!50!green]
+\definecolor[pgfcolorb][red!50!blue]
+\stoptyping
+
+\stopsection
+
+\startsection[title=Implementation details]
+
+The low level implementation of colors in \MKIV\ is fundamentally different from
+\MKII. In \MKIV\ something like this happens:
+
+\starttyping
+one \color[red]{two} three
+\stoptyping
+
+becomes (with grouping):
+
+\starttyping
+one {<start color: red>two<stop color>} three
+\stoptyping
+
+the start and stop points are in fact injections in the input: a special (for
+\DVI) or literals (for \PDF) is inserted that turns the color on and off, but
+also information is carried along about the state of color, so that we can
+properly nest as well as pick up the current color after a page break. We never
+had real problems with this mechanism but one had to keep in mind that injections
+like this could interfere with typesetting. This mechanism didn't rely on the
+engine for housekeeping, all was done at the \TEX\ end using so called marks.
+
+In \MKIV\ we use attributes. This means that the sequence now looks like:
+
+\starttyping
+one {<set color attribute to red>two} three
+\stoptyping
+
+The actual handling of color happens when a page is shipped out and there is no
+interference with typesetting. The work is mostly done in \LUA.
+
+Colorspaces (\RGB, \CMYK, spot) were already supported in \MKII\ and of course
+still are in \MKIV. However, the colorspace is now a more independent property.
+At some point in \MKII\ we also implemented transparency as a property of a
+color. In \MKIV\ transparency is still defined with a color but handled
+independently. This means that where in \MKII\ color is just one axis, in \MKIV\
+we have three: colorspace (model), color and transparency. This of course has a
+bit of a performance and memory hit, but in practice a user won't notice it.
+
+\stopsection
+
+\startsection[title=Grouping]
+
+The \type {\color} and \type {\startcolor} command group their arguments. There might
+be cases where this interferes with your intentions, for instance when you want to
+set some variable and use its value later on.
+
+\startbuffer
+1 \scratchcounter=1
+plus
+1 \advance \scratchcounter by 1
+equals
+\the\scratchcounter
+\stopbuffer
+
+\typebuffer
+
+The summation works out okay: {\bf \inlinebuffer}.
+
+\startbuffer
+\color[darkblue]{1 \scratchcounter=1}
+plus
+\color[darkblue]{1 \advance \scratchcounter by 1}
+equals
+\color[darkgreen]{\the\scratchcounter}
+\stopbuffer
+
+\typebuffer
+
+Here the final result depends on the value of \type {\scratchcounter}:
+{\scratchcounter 3 \bf \inlinebuffer}.
+
+\startbuffer
+\start
+ \pushcolor[darkblue]1 \scratchcounter=1 \popcolor
+ plus
+ \pushcolor[darkblue]1 \advance \scratchcounter by 1 \popcolor
+ equals
+ \pushcolor[darkgreen]\the\scratchcounter \popcolor
+\stop
+\stopbuffer
+
+\typebuffer
+
+Here we get: {\bf \inlinebuffer}. The \typ {\pushcolor} and \typ {\popcolor}
+commands can be used nested which give a bot of overhead. The \typ {\savecolor}
+and \typ {\restorecolor} commands are variants that don't stack. They are a bit
+more efficient but if you use them nested you probably also will use some
+grouping. Where the push||pop pair needs to be matched, the save||restore pair
+doesn't impose that restriction.
+
+\stopsection
+
+\startsection[title=Commands]
+
+There are quite some commands that relate to colors but you probably only need
+\typ {\definecolor}, \type {\color} and \typ {\startcolor} \unknown \typ
+{\stopcolor}. Here we show the complete list. Some commands are redundant, for
+instance \typ {\definenamedcolor} is the same as \typ {\definecolor}.
+
+\placeallsetups
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/colors/colors-environment.tex b/doc/context/sources/general/manuals/colors/colors-environment.tex
new file mode 100644
index 000000000..99f625854
--- /dev/null
+++ b/doc/context/sources/general/manuals/colors/colors-environment.tex
@@ -0,0 +1,7 @@
+\startenvironment colors-environment
+
+ \environment manuals-explaining-environment
+ \environment manuals-explaining-cover
+
+\stopenvironment
+
diff --git a/doc/context/sources/general/manuals/colors/colors-graphics.tex b/doc/context/sources/general/manuals/colors/colors-graphics.tex
new file mode 100644
index 000000000..4c8fb5270
--- /dev/null
+++ b/doc/context/sources/general/manuals/colors/colors-graphics.tex
@@ -0,0 +1,234 @@
+% language=uk
+
+\startcomponent colors-basics
+
+\environment colors-environment
+
+\startchapter[title=Graphics][color=darkblue]
+
+\startsection[title=Conversion]
+
+There is not that much to tell about graphics and color simply because from the
+perspective of \TEX\ a graphic is just a blob with dimensions that travels
+through the system and in the backend gets included as|-|is. This means that when
+there is a problem with an image you have to go back to the source of that image
+and fix it there.
+
+It can happen that you need to manipulate an image and in a fully automated
+workflow that can be cumbersome. For that reason \CONTEXT\ has a mechanism for
+converting graphics.
+
+\startluacode
+ context.starttabulate { "|BT|T|" }
+ context.NC() context.bold("original")
+ context.NC() context.bold("target")
+ context.NC() context.NR()
+ for k, v in table.sortedhash(figures.converters) do
+ context.NC() context(k)
+ context.NC() context("%{\\quad }t",table.sortedkeys(v))
+ context.NC() context.NR()
+ end
+ context.stoptabulate()
+\stopluacode
+
+Some of these converters are applied automatically. For instance if you include
+an \type {eps} image, \CONTEXT\ will try to convert it into a \PDF\ file and only
+do that once (unless the image changed). Of course it needs a conversion program,
+but as long as you have GhostScript, GraphicMagick and InkScape on your machine
+it should work out well.
+
+You can also define your own converters (we use a verbose variant):
+
+\starttyping
+\startluacode
+ -- of course we need options
+
+ local resolutions = {
+ [interfaces.variables.low] = "150x150",
+ [interfaces.variables.medium] = "300x300",
+ [interfaces.variables.high] = "600x600",
+ }
+
+ figures.programs.lowrespng = {
+ command = "gm",
+ argument = [[convert -resample %resolution% "%oldname%" "%newname%"]],
+ }
+
+ figures.converters["png"]["lowres.png"] = function(oldname,newname,resolution)
+ runprogram (
+ figures.programs.lowrespng.command,
+ figures.programs.lowrespng.argument,
+ {
+ oldname = oldname,
+ newname = newname,
+ resolution = resolutions[resolution] or "150x150"
+ }
+ )
+ end
+\stopluacode
+\stoptyping
+
+Usage is as follows:
+
+\starttyping
+\externalfigure[mill.png][conversion=lowres.png]
+\stoptyping
+
+\stopsection
+
+\startsection[title=Recoloring]
+
+You can think of more complex conversions, like converting a gray scale image to
+a colored one.
+
+\startbuffer
+\startluacode
+ figures.programs.recolor = {
+ command = "gm",
+ argument = [[convert -recolor "%color%" "%oldname%" "%newname%"]],
+ }
+
+ figures.converters["png"]["recolor.png"] =
+ function(oldname,newname,resolution,arguments)
+ figures.programs.run (
+ figures.programs.recolor.command,
+ figures.programs.recolor.argument,
+ {
+ oldname = oldname,
+ newname = newname,
+ color = arguments or ".5 0 0 .7 0 0 .9 0 0",
+ }
+ )
+ end
+\stopluacode
+\stopbuffer
+
+\typebuffer % built in so no \getbuffer
+
+\startbuffer
+\useexternalfigure[mill][mill.png][conversion=recolor.png]
+\startcombination[3*2]
+ {\externalfigure[mill][arguments=.5 0 0 .7 0 0 .9 0 0]}{\figurefilearguments}
+ {\externalfigure[mill][arguments=.7 0 0 .9 0 0 .5 0 0]}{\figurefilearguments}
+ {\externalfigure[mill][arguments=.9 0 0 .5 0 0 .7 0 0]}{\figurefilearguments}
+ {\externalfigure[mill][arguments=.5 0 0 .9 0 0 .7 0 0]}{\figurefilearguments}
+ {\externalfigure[mill][arguments=.7 0 0 .5 0 0 .9 0 0]}{\figurefilearguments}
+ {\externalfigure[mill][arguments=.9 0 0 .7 0 0 .5 0 0]}{\figurefilearguments}
+\stopcombination
+\stopbuffer
+
+This can be applied as follows. The \type {resolution} and \type {color}
+parameters get passed to the converter. This method is actually built
+in already.
+
+\typebuffer
+
+The results are shown in \in {figure} [fig:recolor]. In this case we pass the
+colors to be use in a kind of matrix notation that GraphicMagick needs.
+
+\startplacefigure[reference=fig:recolor,title={Recoloring bitmap images.}]
+ \getbuffer
+\stopplacefigure
+
+Recoloring an image this way is actually not the best solution because
+there is an internal mechanism that does the same. This trick (currently)
+only works with spot colors.
+
+\startbuffer
+\definecolor [my-blue] [c=1,m=.38,y=0,k=.64] % pms 2965 uncoated m
+\definecolor [my-yellow] [c=0,m=.28,y=1,k=.06] % pms 124 uncoated m
+
+\definespotcolor [my-blue-100] [my-blue] [p=1]
+\definespotcolor [my-yellow-100] [my-yellow] [p=1]
+\definespotcolor [my-blue-50] [my-blue] [p=.5]
+\definespotcolor [my-yellow-50] [my-yellow] [p=.5]
+
+\definemultitonecolor [my-mix] [my-blue=.12,my-yellow=.28] [c=.1,m=.1,y=.3,k=.1]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+These colors show up as:
+
+\starttabulate[|T||]
+\NC my-blue \NC \blackrule[color=my-blue, width=.6\textwidth,height=5mm] \NC \NR
+\NC my-blue-50 \NC \blackrule[color=my-blue-50, width=.6\textwidth,height=5mm] \NC \NR
+\NC my-blue-100 \NC \blackrule[color=my-blue-100, width=.6\textwidth,height=5mm] \NC \NR
+\NC my-yellow \NC \blackrule[color=my-yellow, width=.6\textwidth,height=5mm] \NC \NR
+\NC my-yellow-50 \NC \blackrule[color=my-yellow-50, width=.6\textwidth,height=5mm] \NC \NR
+\NC my-yellow-100 \NC \blackrule[color=my-yellow-100,width=.6\textwidth,height=5mm] \NC \NR
+\NC my-mix \NC \blackrule[color=my-mix, width=.6\textwidth,height=5mm] \NC \NR
+\stoptabulate
+
+\useexternalfigure[demofig][mill.png][object=no,width=.2\textwidth]
+
+\startbuffer
+\startcombination[4*1]
+ {\externalfigure[demofig]} {no color}
+ {\externalfigure[demofig][color=my-mix]} {indexed duotone}
+ {\externalfigure[demofig][color=my-blue-100]} {spot color}
+ {\externalfigure[demofig][color=my-yellow-100]} {spot color}
+\stopcombination
+\stopbuffer
+
+\typebuffer
+
+This time we don't call an external program but we add an indexed color map to the
+image. The result can be seen in \in {figure} [fig:reindexing].
+
+\startplacefigure[reference=fig:reindexing,title={Reindexing bitmap images.}]
+ \getbuffer
+\stopplacefigure
+
+\stopsection
+
+\startsection[title=Profiles]
+
+Color profiles are used to control the printing process. There is some (limited)
+support for that built in. An example of a setup that we use in a project is the
+following:
+
+\starttyping
+\setupexternalfigures
+ [order={pdf,eps,png,jpg},
+ conversion=cmyk.pdf,
+ method=auto]
+\stoptyping
+
+So, we prefer \PDF\ vector images, if needed converted from \EPS. When there is
+no vector image we check for a \PNG\ and as last resort for a \JPG. The
+\type{method} is set to \type {auto} which means that we check if the image file
+indeed is reflected in the suffix. This is needed because in a workflow with tens
+of thousands of images there can be bad ones.
+
+The \type {conversion} parameter will make \CONTEXT\ check if there is a \type
+{cmyk.pdf} converter defined and when that is the case, it's applied. That
+specific converter will add a color profile to the image. You can set the
+profiles with:
+
+\starttyping
+\enabledirectives[graphics.conversion.rgbprofile=srgb.icc]
+\enabledirectives[graphics.conversion.cmykprofile=isocoated_v2_eci.icc]
+\stoptyping
+
+and these happens to be the defaults. You have to make sure that the files are
+present, preferable in \type{t:/texmf/colors/icc/context}. If you add profiles
+you need to make sure that \type {colorprofiles.lua} is updated accordingly.
+
+Just for completeness, in our situation, we also have set:
+
+\starttyping
+\enabledirectives[graphics.conversion.eps.cleanup.ai]
+\enabledirectives[graphics.extracheck]
+\stoptyping
+
+The first directive will make sure that confusing sections (for instance meant to
+the drawing program) are stripped from an \EPS\ file, and the second one forces
+some extra checking on the image (just to make sure that the engine doesn't exit
+on bad images).
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/colors/colors-introduction.tex b/doc/context/sources/general/manuals/colors/colors-introduction.tex
new file mode 100644
index 000000000..ba1db9915
--- /dev/null
+++ b/doc/context/sources/general/manuals/colors/colors-introduction.tex
@@ -0,0 +1,49 @@
+% language=uk
+
+\startcomponent colors-introduction
+
+\environment colors-environment
+
+\startchapter[title=Introduction][color=darkgray]
+
+This manual fits in the series where we discus fundamental subsystems like fonts
+and languages. Here we will collect the more technical backgrounds. This document
+is not meant as a manual for users who start with \CONTEXT, for that we have
+other manuals.
+
+Color has a rather long history in \CONTEXT\ because we supported it right from
+the start. In the times that \DVI\ backend drivers were used, specials were the
+way to force color in the result. However, each driver had different demands:
+some expected specific color directives, others a sequence of for instance
+\POSTSCRIPT\ commands. When \PDF\ showed up, resource management entered the
+game. Because ot always used a backend driver model in \CONTEXT, it could easily
+be adapted. All management, for instance of nested colors, was done in \TEX\
+code. If advanced color support hadn't been available right from the start, we'd
+probably not be using \TEX\ now.
+
+In \MKIV\ color support was implemented from scratch but in a for the user
+downward compatible way. In that respect this manual is not going to reveal
+anything revolutionary. Much of the work is now delegated to \LUA\ and because of
+that directives are no longer part of the (expanded) input stream. As a result
+color is now more robust and less intrusive.
+
+Because \METAPOST\ support is well integrated, we also communicate colors to
+\METAPOST. In \MKIV\ the communication between the two engines was upgraded and
+hopefully evolved into an (even) more convenient interface.
+
+External graphics are in fact islands in the document flow: they manage their
+resources like colors themselves. However, there are some ways to deal with the
+demands of publishers and printers with respect to colors. These will be
+discussed too.
+
+\getbuffer[underconstruction]
+
+\startlines
+Hans Hagen
+PRAGMA ADE, Hasselt NL
+2016
+\stoplines
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/colors/colors-metafun.tex b/doc/context/sources/general/manuals/colors/colors-metafun.tex
new file mode 100644
index 000000000..82514659b
--- /dev/null
+++ b/doc/context/sources/general/manuals/colors/colors-metafun.tex
@@ -0,0 +1,695 @@
+% language=uk
+
+\startcomponent colors-basics
+
+\environment colors-environment
+
+\startchapter[title=Metafun][color=darkyellow]
+
+\startsection[title=Defining and using]
+
+In \METAPOST\ itself colors are defined as numbers or sets:
+
+\starttyping
+color red ; red := (1,0,0) ;
+cmykcolor cyan ; cyan := (1,0,0,0) ;
+numeric gray ; gray := 0.5 ;
+\stoptyping
+
+You don't need much fantasy to see that this fits well in the data model of
+\METAPOST. In fact, transparency could be represented as a \type {pair}. The
+disadvantage of having no generic color type is that you cannot mix them. In case
+you need to manipulate them, you can check the type:
+
+\starttyping
+if cmykcolor cyan : ... fi ;
+\stoptyping
+
+because \METAFUN\ is tightly integrated in \CONTEXT\ you can refer to colors
+known at the \TEX\ end by string. So,
+
+\starttyping
+string mycolor ; mycolor := "red" ;
+\stoptyping
+
+and then:
+
+\starttyping
+fill fullcircle scaled 4cm withcolor mycolor ;
+\stoptyping
+
+is quite okay. For completeness we also have \type {namedcolor} but it's not
+really needed:
+
+\starttyping
+fill fullcircle scaled 4cm withcolor namedcolor("red");
+\stoptyping
+
+You can define spot colors too but normally you will refer to colors
+defined at the \TEX\ end.
+
+\startbuffer[spot]
+\startMPcode
+ fill fullcircle scaled 3cm withcolor
+ .5 * spotcolor("whatever",(.3,.4,.5)) ;
+ fill fullcircle scaled 2cm withcolor
+ spotcolor("whatever",(.3,.4,.5)) ;
+ fill fullcircle scaled 1cm withcolor
+ spotcolor("whatever",(.3,.4,.5)/2) ;
+\stopMPcode
+\stopbuffer
+
+\startbuffer[multi]
+\startMPcode
+ fill fullcircle scaled 3cm withcolor
+ .5 * multitonecolor("whatever",(.3,.4,.5),(.5,.3,.4)) ;
+ fill fullcircle scaled 2cm withcolor
+ multitonecolor("whatever",(.3,.4,.5),(.5,.3,.4)) ;
+ fill fullcircle scaled 1cm withcolor
+ multitonecolor("whatever",(.3,.4,.5)/2,(.5,.3,.4)/2) ;
+\stopMPcode
+\stopbuffer
+
+\typebuffer[spot]
+
+Multitones are defined as:
+
+\typebuffer[multi]
+
+Some \PDF\ renderers have problems with fractions of such colors and even display
+the wrong colors. So, in these examples the third alternative in the sets of
+three might be more robust than the first. The result is shown in \in {figure}
+[fig:mpspot].
+
+\startplacefigure[reference=fig:mpspot,title={Spot and multitones directly defined in \METAFUN.}]
+ \startcombination[2*1]
+ {\getbuffer[spot]} {}
+ {\getbuffer[multi]} {}
+ \stopcombination
+\stopplacefigure
+
+\stopsection
+
+\startsection[title=Passing colors]
+
+Originally \TEX\ and \METAPOST\ were separated processes and even in \LUATEX\
+they still are. There can be many independent \METAPOST\ instances present, but
+always there is \LUA\ as glue between them. In the early days of \LUATEX\ this
+was a one way channel: the \METAPOST\ output is available at the \TEX\ end in
+\LUA\ as a table and properties are used to communicate extensions. In today's
+\LUATEX\ the \METAPOST\ library has access to \LUA\ itself so that gives us a
+channel to \TEX, although with some limitations.
+
+Say that we have a color defined as follows:
+
+\startbuffer
+\definecolor[MyColor][r=.25,g=.50,b=.75]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+We can apply this to a rule:
+
+\startbuffer
+\blackrule[color=MyColor,width=3cm,height=1cm,depth=0cm]
+\stopbuffer
+
+\typebuffer
+
+From this we get:
+
+\startlinecorrection
+\getbuffer
+\stoplinecorrection
+
+In \TEX\ (code) we can do this:
+
+\startbuffer
+\startMPcode
+ fill unitsquare xyscaled (3cm,1cm) withcolor \MPcolor {MyColor} ;
+\stopMPcode
+\stopbuffer
+
+\typebuffer
+
+When the code is pushed to \METAPOST\ the color gets expanded, in this case to
+\typ {(0.25, 0.50, 0.75)} because we specified an \RGB\ color but the other
+colorspaces are supported too.
+
+\startlinecorrection
+\getbuffer
+\stoplinecorrection
+
+Equally valid code is:
+
+\starttyping
+\startMPcode
+ fill unitsquare xyscaled (3cm,1cm) withcolor "MyColor" ;
+\stopMPcode
+\stoptyping
+
+This is very un-\METAPOST\ as naturally it can only deal with numerics for gray
+scales, triplets for \RGB\ colors, and quadruplets for \CMYK\ colors. In
+\METAFUN\ (as present in \CONTEXT\ MKIV) the \type {withcolor} operator also
+accepts a string, which is resolved to a color specification.
+
+For the record we note that when you use transparent colors, a more complex
+specification gets passed with \type {\MPcolor} or resolved (via the string). The
+same is true for spot and multitone colors. It will be clear that when you want
+to assign a color to a variable you have to make sure the type matches. A rather
+safe way to define colors is:
+
+\starttyping
+def MyColor =
+ \MPcolor{MyColor}
+enddef ;
+\stoptyping
+
+and because we can use strings, string variables are also an option.
+
+\stopsection
+
+\startsection[title=Grouping]
+
+The reason for discussing these details is that there is a rather fundamental
+concept of grouping in \TEX\ which can lead to unexpected side effects. The
+reason is that there is no grouping at the \LUA\ end, unless one uses a kind of
+stack, and that in \METAPOST\ grouping is an explicit feature.
+
+\starttyping
+\scratchcounter=123
+\bgroup
+ \scratchcounter=456
+\egroup
+\stoptyping
+
+After this \TEX\ code is expanded the counter has value 123. In \METAPOST\ you
+can do the following:
+
+\starttyping
+scratchcounter := 123 ;
+\begingroup
+ scratchcounter := 456 ;
+\endgroup
+\stoptyping
+
+but here the counter is 456 afterwards! You explicitly need to save a value:
+
+\starttyping
+scratchcounter := 123 ;
+\begingroup
+ save scratchcounter ;
+ numeric scratchcounter ; % variables are numeric by default anyway
+ scratchcounter := 456 ;
+\endgroup
+\stoptyping
+
+The difference perfectly makes sense if you think about the kind of applications
+\TEX\ and \METAPOST\ are used for. In \LUA\ you can do this:
+
+
+\starttyping
+scratchcounter = 123
+do
+ local scratchcounter = 456
+end
+\stoptyping
+
+and in fact, a \type {then}, \type {else}, \type {while}, \type {repeat}, \type
+{do} and function body also behave this way.
+
+So, what is the impact on colors? Imagine that you do this:
+
+\startbuffer
+\bgroup
+ \definecolor[MyColor][s=.5]
+ \startMPcode
+ pickup pencircle scaled 4mm ;
+ draw fullcircle scaled 30mm withcolor \MPcolor{MyColor} ;
+ draw fullcircle scaled 15mm withcolor "MyColor" ;
+ \stopMPcode
+\egroup
+\quad
+\startMPcode
+ pickup pencircle scaled 4mm ;
+ draw fullcircle scaled 30mm withcolor \MPcolor{MyColor} ;
+ draw fullcircle scaled 15mm withcolor "MyColor" ;
+\stopMPcode
+\stopbuffer
+
+\typebuffer
+
+We get the following colors:
+
+\startlinecorrection
+\hbox{\getbuffer}
+\stoplinecorrection
+
+Because \type {\MPcolor} is a \TEX\ macro, its value gets expanded when the
+graphic is calculated. After the group (first graphic) the color is restored.
+But, in order to access the colors defined at the \TEX\ end in \METAPOST\ by name
+(using \LUA) we need to make sure that a defined color is registered at that end.
+Before we could use the string accessor in \METAPOST\ colors, this was never a
+real issue. We kept the values in a (global) \LUA\ table which was good enough
+for the cases where we wanted to access color specifications, for instance for
+tracing. Such colors never changed in a document. But with the more dynamic
+\METAPOST\ graphics we cannot do that: there is no way that \METAPOST\ (or \LUA)
+later on can know that the color was defined inside a group as clone. For daily
+usage it's enough to know that we have found a way around it in \CONTEXT\ at
+neglectable overhead. In the rare case this mechanism fails, you can always
+revert to the \type {\MPcolor} method.
+
+\startbuffer
+\definecolor[DemoOne][red]
+\definecolor[DemoTwo][s=.8,t=0.5,a=1]
+
+%definepalet[DemoPalet][NumberColor={g=1}]
+\definepalet[DemoPalet][NumberColor=red,red=cyan]
+\definepalet[DemoPalet][NumberColor=red]
+
+\setuppalet[DemoPalet]
+
+\bgroup
+ \definecolor[red] [b=.8]
+ \definecolor[DemoOne][yellow]
+ \startMPcode
+ fill fullcircle scaled 10 withcolor "NumberColor" ;
+ fill fullcircle scaled 7 withcolor "red" ;
+ fill fullcircle scaled 6 withcolor .5\MPcolor{red} ;
+ fill fullcircle scaled 4 shifted (-4,0) withcolor \MPcolor{DemoTwo} ;
+ fill fullcircle scaled 4 shifted ( 4,0) withcolor "DemoTwo" ;
+ fill fullcircle scaled 2 withcolor "DemoOne" ;
+ fill fullcircle scaled 1 withcolor \MPcolor{NumberColor} ;
+ currentpicture := currentpicture xysized(5cm,3cm) ;
+ \stopMPcode
+\egroup
+\hskip1cm
+\startMPcode
+ fill fullcircle scaled 10 withcolor "NumberColor" ;
+ fill fullcircle scaled 7 withcolor "red" ;
+ fill fullcircle scaled 6 withcolor .5\MPcolor{red} ;
+ fill fullcircle scaled 4 shifted (-4,0) withcolor \MPcolor{DemoTwo} ;
+ fill fullcircle scaled 4 shifted ( 4,0) withcolor "DemoTwo" ;
+ fill fullcircle scaled 2 withcolor "DemoOne" ;
+ fill fullcircle scaled 1 withcolor \MPcolor{NumberColor} ;
+ currentpicture := currentpicture xysized(5cm,3cm) ;
+\stopMPcode
+\stopbuffer
+
+The following example was used when developing the string based color resolver.
+The complication was in getting the color palets resolved right without too much
+overhead. Again we demonstrate this because border cases might occur that are not
+catched (yet).
+
+\startlinecorrection
+ \hbox {\getbuffer}
+\stoplinecorrection
+
+\stopsection
+
+\startsection[title=Transparency]
+
+Transparency is supported at the \TEX\ end: either or not bound to colors. We
+already saw how to use colors, here's how to apply transparency:
+
+\startbuffer
+\startMPcode
+ fill fullsquare xyscaled (4cm,2cm) randomized 5mm
+ withcolor "darkred" ;
+ fill fullsquare xyscaled (2cm,4cm) randomized 5mm
+ withcolor "darkblue" withtransparency ("normal",0.5) ;
+
+ fill fullsquare xyscaled (4cm,2cm) randomized 5mm shifted (45mm,0)
+ withcolor "darkred" withtransparency ("normal",0.5) ;
+ fill fullsquare xyscaled (2cm,4cm) randomized 5mm shifted (45mm,0)
+ withcolor "darkblue" withtransparency ("normal",0.5) ;
+
+ fill fullsquare xyscaled (4cm,2cm) randomized 5mm shifted (90mm,0)
+ withcolor "darkred" withtransparency ("normal",0.5) ;
+ fill fullsquare xyscaled (2cm,4cm) randomized 5mm shifted (90mm,0)
+ withcolor "darkblue" ;
+\stopMPcode
+\stopbuffer
+
+\typebuffer
+
+We get a mixture of normal and transparent colors. Instead of \type {normal}
+you can also pass a number (with \type {1} being \type {normal}).
+
+\startlinecorrection
+ \getbuffer
+\stoplinecorrection
+
+\stopsection
+
+\startsection[title=Shading]
+
+Shading is available too. This mechanism is a bit more complex deep down because
+it needs resources as well as shading vectors that adapt themselves to the current
+scale. We will not go into detail about the shading properties here.
+
+\startbuffer
+\startMPcode
+ comment("two shades with mp colors");
+ fill fullcircle scaled 5cm
+ withshademethod "circular"
+ withshadevector (2cm,1cm)
+ withshadecenter (.1,.5)
+ withshadedomain (.2,.6)
+ withshadefactor 1.2
+ withshadecolors (red,white)
+ ;
+ fill fullcircle scaled 5cm shifted (6cm,0)
+ withshademethod "circular"
+ withcolor "red" shadedinto "blue"
+ ;
+\stopMPcode
+\stopbuffer
+
+\typebuffer
+
+You can use normal \METAPOST\ colors as well as named colors.
+
+\startlinecorrection
+ \getbuffer
+\stoplinecorrection
+
+\startbuffer
+\startMPcode
+ comment("two shades with named colors");
+ fill fullcircle scaled 5cm
+ withshademethod "circular"
+ withshadecolors ((1,0,0),(0,0,1,0))
+ ;
+ fill fullcircle scaled 5cm shifted (6cm,0)
+ withshademethod "circular"
+ withcolor (1,0,0,0) shadedinto "blue"
+ ;
+\stopMPcode
+\stopbuffer
+
+The color space of the first color determines if the second one needs
+to be converted, so this is valid:
+
+\typebuffer
+
+The first circle is in \RGB\ colors and the second in \CMYK.
+
+\startlinecorrection
+ \getbuffer
+\stoplinecorrection
+
+You cannot use spot colors but you can use transparency, so with:
+
+\startbuffer
+\startMPcode
+ comment("three transparent shades");
+ fill fullcircle scaled 5cm
+ withshademethod "circular"
+ withshadecolors ("red","green")
+ withtransparency ("normal",0.5)
+ ;
+ fill fullcircle scaled 5cm shifted (30mm,0)
+ withshademethod "circular"
+ withshadecolors ("green","blue")
+ withtransparency ("normal",0.5)
+ ;
+ fill fullcircle scaled 5cm shifted (60mm,0)
+ withshademethod "circular"
+ withshadecolors ("blue","yellow")
+ withtransparency ("normal",0.5)
+ ;
+\stopMPcode
+\stopbuffer
+
+\typebuffer
+
+we get:
+
+\startlinecorrection
+ \getbuffer
+\stoplinecorrection
+
+You can define a shade and use it later on, for example:
+
+\startbuffer
+\startMPcode
+ defineshade myshade
+ withshademethod "circular"
+ withshadefactor 1
+ withshadedomain (0,1)
+ withshadecolors (black,white)
+ withtransparency (1,.5)
+ ;
+
+ fill fullcircle xyscaled(.75TextWidth,4cm)
+ shaded myshade ;
+ fill fullcircle xyscaled(.75TextWidth,4cm) shifted (.125TextWidth,0)
+ shaded myshade ;
+ fill fullcircle xyscaled(.75TextWidth,4cm) shifted (.25TextWidth,0)
+ shaded myshade ;
+\stopMPcode
+\stopbuffer
+
+\typebuffer
+
+This gives three transparent shaded shapes:
+
+\startlinecorrection
+ \getbuffer
+\stoplinecorrection
+
+A very special shade is the following:
+
+\startbuffer
+\startMPcode
+ fill fullsquare yscaled 5ExHeight xscaled TextWidth
+ withshademethod "linear"
+ withshadevector (0,1)
+ withshadestep (
+ withshadefraction .3
+ withshadecolors (red,green)
+ )
+ withshadestep (
+ withshadefraction .5
+ withshadecolors (green,blue)
+ )
+ withshadestep (
+ withshadefraction .7
+ withshadecolors (blue,red)
+ )
+ withshadestep (
+ withshadefraction 1
+ withshadecolors (red,yellow)
+ )
+ ;
+\stopMPcode
+\stopbuffer
+
+\typebuffer
+
+The result is a colorful band:
+
+\startlinecorrection
+ \getbuffer
+\stoplinecorrection
+
+\stopsection
+
+\startsection[title=Text]
+
+The text typeset with \type {textext} is processed in \TEX\ using the
+current settings. A text can of course have color directives embedded.
+
+\startbuffer
+\startMPcode
+numeric u ; u := 8mm ;
+draw thetextext("RED", (0,0u)) withcolor darkred ;
+draw thetextext("\darkgreen GREEN", (0,1u)) ;
+draw thetextext("\darkblue BLUE", (0,2u)) withcolor darkred ;
+draw thetextext("BLACK {\darkgreen GREEN}",(0,3u)) ;
+draw thetextext("RED {\darkblue BLUE}",(0,4u)) withcolor darkred ;
+\stopMPcode
+\stopbuffer
+
+\typebuffer
+
+In this example we demonstrate that you can also apply a color to the
+resulting picture.
+
+\startlinecorrection
+\tttfd \getbuffer
+\stoplinecorrection
+
+\stopsection
+
+\startsection[title=Helpers]
+
+\stopsection
+
+There are several color related macros in \METAFUN\ and these are discussed
+in the \METAFUN\ manual, so we only mention a few here.
+
+\startbuffer
+\startMPcode
+ fill fullsquare xyscaled(TextWidth,4cm)
+ withcolor darkred ;
+ fill fullsquare xyscaled(TextWidth,3cm)
+ withcolor complementary darkred ;
+ fill fullsquare xyscaled(TextWidth,2cm)
+ withcolor complemented darkred ;
+ fill fullsquare xyscaled(TextWidth,1cm)
+ withcolor grayed darkred ;
+\stopMPcode
+\stopbuffer
+
+\typebuffer
+
+This example code is shown in \in {figure} [fig:complemen-1]. The \type
+{complementary} operator subtracts the given color from white, the \type
+{complemented} operator calculates its values from opposites (so a zero becomes a
+one). In \in {figure} [fig:complemen-2] a more extensive example is shown.
+
+\startplacefigure
+ [reference=fig:complemen-1,
+ title={The \type {complementary}, \type {complemented} and \type
+ {grayed} methodscompared.}]
+ \getbuffer
+\stopplacefigure
+
+\startMPdefinitions
+ % This is an old example I had laying around since 2005. The original was just
+ % a framed text with the graphic as background but here I use textext instead.
+ def MyCompare (text method) =
+
+ picture p ; p := textext("\quad \bf
+ I don't understand about complementary colors\quad
+ And what they say\quad
+ Side by side they both get bright\quad
+ Together they both get gray\quad"
+ ) ;
+
+ numeric w ; w := bbwidth p ;
+ numeric h ; h := bbheight p ;
+
+ for i = 1 upto 10 :
+ fill fullsquare
+ xscaled (w/10)
+ yscaled 5h
+ shifted (-w/2-w/20+i*w/10,-3h/2)
+ withcolor (i*red/10)
+ withtransparency(1,.5) ;
+ fill fullsquare
+ xscaled (w/10)
+ yscaled 5h
+ shifted (-w/2-w/20+i*w/10,3h/2)
+ withcolor method (i*red/10)
+ withtransparency(1,.5) ;
+ endfor ;
+ addbackground withcolor .75white ;
+
+ draw p withcolor white ;
+
+ currentpicture := currentpicture xsized TextWidth ;
+ enddef ;
+\stopMPdefinitions
+
+\startplacefigure[reference=fig:complemen-2,title={Two methods to complement colors compared (text: Fiona Apple).}]
+ \startcombination[1*2]
+ {\startMPcode MyCompare(complemented) ; \stopMPcode} {complemented}
+ {\startMPcode MyCompare(complementary) ; \stopMPcode} {complementary}
+ \stopcombination
+\stopplacefigure
+
+As we discussed before, the different color models in \METAPOST\ cannot be mixed
+in expressions. We therefore have two macros that expand into white or black
+in the right colorspace.
+
+\typebuffer
+
+\startbuffer
+\startMPcode
+ fill fullsquare xyscaled(TextWidth,4cm)
+ withcolor .5[(.5,0,0), whitecolor (.5,0,0)] ;
+ fill fullsquare xyscaled(TextWidth,3cm)
+ withcolor .5[(.5,0,0), blackcolor (.5,0,0)] ;
+ fill fullsquare xyscaled(TextWidth,2cm)
+ withcolor .5[(.5,0,0,0), whitecolor (.5,0,0,0)] ;
+ fill fullsquare xyscaled(TextWidth,1cm)
+ withcolor .5[(.5,0,0,0), blackcolor (.5,0,0,0)] ;
+\stopMPcode
+\stopbuffer
+
+\typebuffer
+
+\startlinecorrection
+\getbuffer
+\stoplinecorrection
+
+There are two macros that can be used to resolve string to colors: \type
+{resolvedcolor} and \type {namedcolor}. A resolved color is expanded via \LUA\
+while a named color is handled in the backend, when the result is converted to
+\PDF. The resolved approach is more recent and is the same as a string color
+specification.
+
+\startbuffer
+\startMPcode
+ fill fullcircle scaled 4cm withcolor .5 resolvedcolor "darkred" ;
+ fill fullcircle scaled 3cm withcolor .5 resolvedcolor "gray" ;
+ fill fullcircle scaled 2cm withcolor .5 namedcolor "darkblue" ;
+ fill fullcircle scaled 1cm withcolor .5 namedcolor "gray" ;
+\stopMPcode
+\stopbuffer
+
+\typebuffer
+
+\startlinecorrection
+\getbuffer
+\stoplinecorrection
+
+There is a \type {drawoptions} macro that can be used to define properties in one go.
+
+\startbuffer
+\startMPcode
+ drawoptions(withcolor "darkgreen");
+ fill fullcircle scaled 4cm ;
+ fill fullcircle scaled 3cm withcolor white ;
+ fill fullcircle scaled 2cm ;
+\stopMPcode
+\stopbuffer
+
+\typebuffer
+
+We get:
+
+\startlinecorrection
+\getbuffer
+\stoplinecorrection
+
+The drawback of this approach is that, because we use so called pre- and
+postscripts for achieving special effects (like spotcolors and shading)
+successive \type {withcolor} calls can interfere in a way that unexpected results
+turn up. A way out is to use properties:
+
+\startbuffer
+\startMPcode
+ property p[] ;
+ p1 = properties(withcolor "darkred") ;
+ p2 = properties(withcolor "white") ;
+ fill fullcircle scaled 4cm withproperties p1 ;
+ fill fullcircle scaled 3cm withproperties p2 ;
+ fill fullcircle scaled 2cm withproperties p1 ;
+\stopMPcode
+\stopbuffer
+
+\typebuffer
+
+This results in:
+
+\startlinecorrection
+\getbuffer
+\stoplinecorrection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/colors/colors-mkiv.tex b/doc/context/sources/general/manuals/colors/colors-mkiv.tex
new file mode 100644
index 000000000..a39ff0f37
--- /dev/null
+++ b/doc/context/sources/general/manuals/colors/colors-mkiv.tex
@@ -0,0 +1,56 @@
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
+%
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+%
+% comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt
+% Group journal or otherwise. Thanks to the editors for corrections. Also thanks
+% to users for testing, feedback and corrections.
+
+% \nopdfcompression
+
+\enablemode[simple] % ,oversized
+
+\startbuffer[abstract]
+
+ This book is about colors and how to use them in \CONTEXT\ \MKIV, including
+ \METAFUN. Although the basics are not that complex, a bit of insight in how
+ they are implemented and what can be done might help in creating more
+ interesting looking documents.
+
+\stopbuffer
+
+\environment colors-environment
+
+\startdocument
+ [author=Hans Hagen,
+ title=Coloring \ConTeXt,
+ subtitle=explaining luatex and mkiv,
+ affiliation=PRAGMA ADE,
+ comment=work in progress,
+ cover:color:1=darkgreen,
+ cover:color:2=darkyellow,
+ cover:color:3=darkblue,
+ cover:color:4=darkmagenta,
+ cover:color:5=darkgray]
+
+ \startfrontmatter
+ \component manuals-explaining-contents
+ \component colors-introduction
+ \stopfrontmatter
+
+ \startbodymatter
+ \component colors-basics
+ \component colors-metafun
+ \component colors-graphics
+ \stopbodymatter
+
+\stopdocument
diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-000.tex b/doc/context/sources/general/manuals/columnsets/columnsets-000.tex
new file mode 100644
index 000000000..429a067de
--- /dev/null
+++ b/doc/context/sources/general/manuals/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/doc/context/sources/general/manuals/columnsets/columnsets-001.tex b/doc/context/sources/general/manuals/columnsets/columnsets-001.tex
new file mode 100644
index 000000000..689f4e044
--- /dev/null
+++ b/doc/context/sources/general/manuals/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/doc/context/sources/general/manuals/columnsets/columnsets-002.tex b/doc/context/sources/general/manuals/columnsets/columnsets-002.tex
new file mode 100644
index 000000000..a67dd3161
--- /dev/null
+++ b/doc/context/sources/general/manuals/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/doc/context/sources/general/manuals/columnsets/columnsets-003.tex b/doc/context/sources/general/manuals/columnsets/columnsets-003.tex
new file mode 100644
index 000000000..eed0286f8
--- /dev/null
+++ b/doc/context/sources/general/manuals/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/doc/context/sources/general/manuals/columnsets/columnsets-004.tex b/doc/context/sources/general/manuals/columnsets/columnsets-004.tex
new file mode 100644
index 000000000..a58ddf621
--- /dev/null
+++ b/doc/context/sources/general/manuals/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/doc/context/sources/general/manuals/columnsets/columnsets-005.tex b/doc/context/sources/general/manuals/columnsets/columnsets-005.tex
new file mode 100644
index 000000000..f1d970d9e
--- /dev/null
+++ b/doc/context/sources/general/manuals/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/doc/context/sources/general/manuals/columnsets/columnsets-006.tex b/doc/context/sources/general/manuals/columnsets/columnsets-006.tex
new file mode 100644
index 000000000..033619970
--- /dev/null
+++ b/doc/context/sources/general/manuals/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/doc/context/sources/general/manuals/columnsets/columnsets-007.tex b/doc/context/sources/general/manuals/columnsets/columnsets-007.tex
new file mode 100644
index 000000000..137a414d9
--- /dev/null
+++ b/doc/context/sources/general/manuals/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/doc/context/sources/general/manuals/columnsets/columnsets-101.tex b/doc/context/sources/general/manuals/columnsets/columnsets-101.tex
new file mode 100644
index 000000000..f9c7b59cb
--- /dev/null
+++ b/doc/context/sources/general/manuals/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/doc/context/sources/general/manuals/columnsets/columnsets-102.tex b/doc/context/sources/general/manuals/columnsets/columnsets-102.tex
new file mode 100644
index 000000000..3cf4dcd0e
--- /dev/null
+++ b/doc/context/sources/general/manuals/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/doc/context/sources/general/manuals/columnsets/columnsets-103.tex b/doc/context/sources/general/manuals/columnsets/columnsets-103.tex
new file mode 100644
index 000000000..f1d4dbedc
--- /dev/null
+++ b/doc/context/sources/general/manuals/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/doc/context/sources/general/manuals/columnsets/columnsets-201.tex b/doc/context/sources/general/manuals/columnsets/columnsets-201.tex
new file mode 100644
index 000000000..37b26c391
--- /dev/null
+++ b/doc/context/sources/general/manuals/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/doc/context/sources/general/manuals/columnsets/columnsets-202.tex b/doc/context/sources/general/manuals/columnsets/columnsets-202.tex
new file mode 100644
index 000000000..1721d9cbc
--- /dev/null
+++ b/doc/context/sources/general/manuals/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/doc/context/sources/general/manuals/columnsets/columnsets-203.tex b/doc/context/sources/general/manuals/columnsets/columnsets-203.tex
new file mode 100644
index 000000000..6c15578bc
--- /dev/null
+++ b/doc/context/sources/general/manuals/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/doc/context/sources/general/manuals/columnsets/columnsets-204.tex b/doc/context/sources/general/manuals/columnsets/columnsets-204.tex
new file mode 100644
index 000000000..d390f468e
--- /dev/null
+++ b/doc/context/sources/general/manuals/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/doc/context/sources/general/manuals/columnsets/columnsets-205.tex b/doc/context/sources/general/manuals/columnsets/columnsets-205.tex
new file mode 100644
index 000000000..b53709770
--- /dev/null
+++ b/doc/context/sources/general/manuals/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/doc/context/sources/general/manuals/columnsets/columnsets-206.tex b/doc/context/sources/general/manuals/columnsets/columnsets-206.tex
new file mode 100644
index 000000000..8b9f524b1
--- /dev/null
+++ b/doc/context/sources/general/manuals/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/doc/context/sources/general/manuals/columnsets/columnsets-301.tex b/doc/context/sources/general/manuals/columnsets/columnsets-301.tex
new file mode 100644
index 000000000..4d21f2b02
--- /dev/null
+++ b/doc/context/sources/general/manuals/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/doc/context/sources/general/manuals/columnsets/columnsets-401.tex b/doc/context/sources/general/manuals/columnsets/columnsets-401.tex
new file mode 100644
index 000000000..ee91e608c
--- /dev/null
+++ b/doc/context/sources/general/manuals/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/doc/context/sources/general/manuals/columnsets/columnsets-402.tex b/doc/context/sources/general/manuals/columnsets/columnsets-402.tex
new file mode 100644
index 000000000..00db6017c
--- /dev/null
+++ b/doc/context/sources/general/manuals/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/doc/context/sources/general/manuals/columnsets/columnsets-403.tex b/doc/context/sources/general/manuals/columnsets/columnsets-403.tex
new file mode 100644
index 000000000..c9bc2e648
--- /dev/null
+++ b/doc/context/sources/general/manuals/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/doc/context/sources/general/manuals/columnsets/columnsets-404.tex b/doc/context/sources/general/manuals/columnsets/columnsets-404.tex
new file mode 100644
index 000000000..05a25acfe
--- /dev/null
+++ b/doc/context/sources/general/manuals/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/doc/context/sources/general/manuals/columnsets/columnsets-405.tex b/doc/context/sources/general/manuals/columnsets/columnsets-405.tex
new file mode 100644
index 000000000..fa20ef34c
--- /dev/null
+++ b/doc/context/sources/general/manuals/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/doc/context/sources/general/manuals/columnsets/columnsets-601.tex b/doc/context/sources/general/manuals/columnsets/columnsets-601.tex
new file mode 100644
index 000000000..b139210f4
--- /dev/null
+++ b/doc/context/sources/general/manuals/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/doc/context/sources/general/manuals/columnsets/columnsets-701.tex b/doc/context/sources/general/manuals/columnsets/columnsets-701.tex
new file mode 100644
index 000000000..b2c50cfaf
--- /dev/null
+++ b/doc/context/sources/general/manuals/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/doc/context/sources/general/manuals/columnsets/columnsets-702.tex b/doc/context/sources/general/manuals/columnsets/columnsets-702.tex
new file mode 100644
index 000000000..5b9a879c1
--- /dev/null
+++ b/doc/context/sources/general/manuals/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/doc/context/sources/general/manuals/columnsets/columnsets-703.tex b/doc/context/sources/general/manuals/columnsets/columnsets-703.tex
new file mode 100644
index 000000000..549b49f61
--- /dev/null
+++ b/doc/context/sources/general/manuals/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/doc/context/sources/general/manuals/columnsets/columnsets-704.tex b/doc/context/sources/general/manuals/columnsets/columnsets-704.tex
new file mode 100644
index 000000000..7fa6cb313
--- /dev/null
+++ b/doc/context/sources/general/manuals/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/doc/context/sources/general/manuals/columnsets/columnsets-801.tex b/doc/context/sources/general/manuals/columnsets/columnsets-801.tex
new file mode 100644
index 000000000..1a84f99ab
--- /dev/null
+++ b/doc/context/sources/general/manuals/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/doc/context/sources/general/manuals/columnsets/columnsets-802.tex b/doc/context/sources/general/manuals/columnsets/columnsets-802.tex
new file mode 100644
index 000000000..a126d0012
--- /dev/null
+++ b/doc/context/sources/general/manuals/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/doc/context/sources/general/manuals/columnsets/columnsets-803.tex b/doc/context/sources/general/manuals/columnsets/columnsets-803.tex
new file mode 100644
index 000000000..58a278bb1
--- /dev/null
+++ b/doc/context/sources/general/manuals/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/doc/context/sources/general/manuals/columnsets/columnsets-804.tex b/doc/context/sources/general/manuals/columnsets/columnsets-804.tex
new file mode 100644
index 000000000..c2b7a6b1e
--- /dev/null
+++ b/doc/context/sources/general/manuals/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/doc/context/sources/general/manuals/columnsets/columnsets-805.tex b/doc/context/sources/general/manuals/columnsets/columnsets-805.tex
new file mode 100644
index 000000000..fc80e7e9c
--- /dev/null
+++ b/doc/context/sources/general/manuals/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/doc/context/sources/general/manuals/columnsets/columnsets-806.tex b/doc/context/sources/general/manuals/columnsets/columnsets-806.tex
new file mode 100644
index 000000000..0322a336f
--- /dev/null
+++ b/doc/context/sources/general/manuals/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/doc/context/sources/general/manuals/columnsets/columnsets-901.tex b/doc/context/sources/general/manuals/columnsets/columnsets-901.tex
new file mode 100644
index 000000000..300458bf5
--- /dev/null
+++ b/doc/context/sources/general/manuals/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/doc/context/sources/general/manuals/columnsets/columnsets-902.tex b/doc/context/sources/general/manuals/columnsets/columnsets-902.tex
new file mode 100644
index 000000000..fda2969af
--- /dev/null
+++ b/doc/context/sources/general/manuals/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/doc/context/sources/general/manuals/columnsets/columnsets-903.tex b/doc/context/sources/general/manuals/columnsets/columnsets-903.tex
new file mode 100644
index 000000000..68cd31ae2
--- /dev/null
+++ b/doc/context/sources/general/manuals/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/doc/context/sources/general/manuals/columnsets/columnsets.tex b/doc/context/sources/general/manuals/columnsets/columnsets.tex
new file mode 100644
index 000000000..0cb95229d
--- /dev/null
+++ b/doc/context/sources/general/manuals/columnsets/columnsets.tex
@@ -0,0 +1,886 @@
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
+%
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+%
+% comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt
+% Group journal or otherwise. Thanks to the editors for corrections. Also thanks
+% to users for testing, feedback and corrections.
+
+\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/doc/context/sources/general/manuals/epub/epub-mkiv.tex b/doc/context/sources/general/manuals/epub/epub-mkiv.tex
index 6fc4ed9d4..2eea58b9e 100644
--- a/doc/context/sources/general/manuals/epub/epub-mkiv.tex
+++ b/doc/context/sources/general/manuals/epub/epub-mkiv.tex
@@ -1,5 +1,22 @@
% language=uk
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
+%
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+%
+% comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt
+% Group journal or otherwise. Thanks to the editors for corrections. Also thanks
+% to users for testing, feedback and corrections.
+
% todo:
%
% metadata
diff --git a/doc/context/sources/general/manuals/hybrid/benchmark-1.tex b/doc/context/sources/general/manuals/hybrid/benchmark-1.tex
new file mode 100644
index 000000000..adb89dbc7
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/benchmark-1.tex
@@ -0,0 +1,39 @@
+\setupbodyfont[dejavu]
+
+\starttext
+
+\dontcomplain
+
+\startluacode
+ if jit then
+ jit.on()
+ jit.off()
+ end
+\stopluacode
+
+\startluacode
+ statistics.starttiming()
+\stopluacode
+
+\dorecurse {10} {
+ \dorecurse{1000} {
+ \dontleavehmode
+ \startMPcode
+ for i=1,100 :
+ draw
+ fullcircle scaled 10pt
+ withpen pencircle xscaled 2 yscaled 4 rotated 20 ;
+ endfor ;
+ \stopMPcode
+ \enspace
+ }
+ \page
+}
+
+\startluacode
+ statistics.stoptiming()
+ context(statistics.elapsedtime())
+\stopluacode
+
+\stoptext
+
diff --git a/doc/context/sources/general/manuals/hybrid/benchmark-2.tex b/doc/context/sources/general/manuals/hybrid/benchmark-2.tex
new file mode 100644
index 000000000..4bf0974f1
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/benchmark-2.tex
@@ -0,0 +1,30 @@
+\setupbodyfont[dejavu]
+
+\starttext
+
+\dontcomplain
+
+\startluacode
+ if jit then
+ jit.on()
+ jit.off()
+ end
+\stopluacode
+
+\startluacode
+ statistics.starttiming()
+\stopluacode
+
+\dorecurse {1000} {
+ {\bf \red \input tufte } \blank
+ {\it \green \input tufte } \blank
+ {\tf \blue \input tufte } \page
+}
+
+\startluacode
+ statistics.stoptiming()
+ context(statistics.elapsedtime())
+\stopluacode
+
+\stoptext
+
diff --git a/doc/context/sources/general/manuals/hybrid/benchmark-3.tex b/doc/context/sources/general/manuals/hybrid/benchmark-3.tex
new file mode 100644
index 000000000..5d9759124
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/benchmark-3.tex
@@ -0,0 +1,28 @@
+\setupbodyfont[dejavu]
+
+\starttext
+
+\dontcomplain
+
+\startluacode
+ if jit then
+ jit.on()
+ jit.off()
+ end
+\stopluacode
+
+\startluacode
+ statistics.starttiming()
+\stopluacode
+
+\dorecurse {1000} {
+ test \page
+}
+
+\startluacode
+ statistics.stoptiming()
+ context(statistics.elapsedtime())
+\stopluacode
+
+\stoptext
+
diff --git a/doc/context/sources/general/manuals/hybrid/benchmark-4.tex b/doc/context/sources/general/manuals/hybrid/benchmark-4.tex
new file mode 100644
index 000000000..95c605c16
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/benchmark-4.tex
@@ -0,0 +1,60 @@
+\setupbodyfont[dejavu]
+
+\starttext
+
+\dontcomplain
+
+\startluacode
+ if jit then
+ jit.on()
+ jit.off()
+ end
+\stopluacode
+
+\startluacode
+ statistics.starttiming()
+\stopluacode
+
+\startbuffer
+ \margintext{test} test test
+
+ \startitemize[a]
+ \startitem test \stopitem
+ \startitem test \stopitem
+ \startitem test \stopitem
+ \startitem test \stopitem
+ \stopitemize
+
+ \startxtable
+ \startxrow
+ \startxcell test \stopxcell
+ \startxcell test \stopxcell
+ \startxcell test \stopxcell
+ \stopxrow
+ \startxrow
+ \startxcell test \stopxcell
+ \startxcell test \stopxcell
+ \startxcell test \stopxcell
+ \stopxrow
+ \stopxtable
+\stopbuffer
+
+\dorecurse {25} {
+ \startchapter[title=Test #1]
+ \dorecurse {25} {
+ \startsection[title=Test #1]
+ \getbuffer
+ \stopsection
+ }
+ \stopchapter
+}
+
+\page
+
+\startluacode
+ statistics.stoptiming()
+ context(statistics.elapsedtime())
+\stopluacode
+
+\stoptext
+
diff --git a/doc/context/sources/general/manuals/hybrid/benchmark-5.tex b/doc/context/sources/general/manuals/hybrid/benchmark-5.tex
new file mode 100644
index 000000000..49fae5da3
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/benchmark-5.tex
@@ -0,0 +1,29 @@
+\starttext
+
+\startluacode
+
+ if jit then
+ jit.on()
+ jit.off()
+ end
+
+ local t = os.clock()
+ local a = 0
+ for i=1,10*1000*1000 do
+ a = a + math.sin(i)
+ end
+ context(os.clock()-t)
+
+ context.par()
+
+ local t = os.clock()
+ local sin = math.sin
+ local a = 0
+ for i=1,10*1000*1000 do
+ a = a + sin(i)
+ end
+ context(os.clock()-t)
+
+\stopluacode
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/hybrid/calibri-fontshop.png b/doc/context/sources/general/manuals/hybrid/calibri-fontshop.png
new file mode 100644
index 000000000..68563581d
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/calibri-fontshop.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/hybrid/ebook-metafun-1.png b/doc/context/sources/general/manuals/hybrid/ebook-metafun-1.png
new file mode 100644
index 000000000..167bfeb6d
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/ebook-metafun-1.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/hybrid/ebook-metafun-2.png b/doc/context/sources/general/manuals/hybrid/ebook-metafun-2.png
new file mode 100644
index 000000000..e151657f0
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/ebook-metafun-2.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/hybrid/ebook-pdf.png b/doc/context/sources/general/manuals/hybrid/ebook-pdf.png
new file mode 100644
index 000000000..51c3d821d
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/ebook-pdf.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/hybrid/ebook-xhtml.png b/doc/context/sources/general/manuals/hybrid/ebook-xhtml.png
new file mode 100644
index 000000000..c1161964c
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/ebook-xhtml.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/hybrid/hybrid-backend.tex b/doc/context/sources/general/manuals/hybrid/hybrid-backend.tex
new file mode 100644
index 000000000..4b6055151
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/hybrid-backend.tex
@@ -0,0 +1,389 @@
+% language=uk
+
+\startcomponent hybrid-backends
+
+\environment hybrid-environment
+
+\startchapter[title={Backend code}]
+
+\startsection [title={Introduction}]
+
+In \CONTEXT\ we've always separated the backend code in so called driver files.
+This means that in the code related to typesetting only calls to the \API\ take
+place, and no backend specific code is to be used. That way we can support
+backend like dvipsone (and dviwindo), dvips, acrobat, pdftex and dvipdfmx with
+one interface. A simular model is used in \MKIV\ although at the moment we only
+have one backend: \PDF. \footnote {At this moment we only support the native
+\PDF\ backend but future versions might support \XML\ (\HTML) output as well.}
+
+Some \CONTEXT\ users like to add their own \PDF\ specific code to their styles or
+modules. However, such extensions can interfere with existing code, especially
+when resources are involved. This has to be done via the official helper macros.
+
+In the next sections an overview will be given of the current approach. There are
+still quite some rough edges but these will be polished as soon as the backend
+code is more isolated in \LUATEX\ itself.
+
+\stopsection
+
+\startsection [title={Structure}]
+
+A \PDF\ file is a tree of indirect objects. Each object has a number and the file
+contains a table (or multiple tables) that relates these numbers to positions in
+a file (or position in a compressed object stream). That way a file can be viewed
+without reading all data: a viewer only loads what is needed.
+
+\starttyping
+1 0 obj <<
+ /Name (test) /Address 2 0 R
+>>
+2 0 obj [
+ (Main Street) (24) (postal code) (MyPlace)
+]
+\stoptyping
+
+For the sake of the discussion we consider strings like \type {(test)} also to be
+objects. In the next table we list what we can encounter in a \PDF\ file. There
+can be indirect objects in which case a reference is used (\type{2 0 R}) and
+direct ones.
+
+\starttabulate[|l|l|p|]
+\FL
+\NC \bf type \NC \bf form \NC \bf meaning \NC \NR
+\TL
+\NC constant \NC \type{/...} \NC A symbol (prescribed string). \NC \NR
+\NC string \NC \type{(...)} \NC A sequence of characters in pdfdoc encoding \NC \NR
+\NC unicode \NC \type{<...>} \NC A sequence of characters in utf16 encoding \NC \NR
+\NC number \NC \type{3.1415} \NC A number constant. \NC \NR
+\NC boolean \NC \type{true/false} \NC A boolean constant. \NC \NR
+\NC reference \NC \type{N 0 R} \NC A reference to an object \NC \NR
+\NC dictionary \NC \type{<< ... >>} \NC A collection of key value pairs where the
+ value itself is an (indirect) object. \NC \NR
+\NC array \NC \type{[ ... ]} \NC A list of objects or references to objects. \NC \NR
+\NC stream \NC \NC A sequence of bytes either or not packaged with a dictionary
+ that contains descriptive data. \NC \NR
+\NC xform \NC \NC A special kind of object containing an reusable blob of data,
+ for example an image. \NC \NR
+\LL
+\stoptabulate
+
+While writing additional backend code, we mostly create dictionaries.
+
+\starttyping
+<< /Name (test) /Address 2 0 R >>
+\stoptyping
+
+In this case the indirect object can look like:
+
+\starttyping
+[ (Main Street) (24) (postal code) (MyPlace) ]
+\stoptyping
+
+It all starts in the document's root object. From there we access the page tree
+and resources. Each page carries its own resource information which makes random
+access easier. A page has a page stream and there we find the to be rendered
+content as a mixture of (\UNICODE) strings and special drawing and rendering
+operators. Here we will not discuss them as they are mostly generated by the
+engine itself or dedicated subsystems like the \METAPOST\ converter. There we use
+literal or \type {\latelua} whatsits to inject code into the current stream.
+
+In the \CONTEXT\ \MKII\ backend drivers code you will see objects in their
+verbose form. The content is passed on using special primitives, like \type
+{\pdfobj}, \type{\pdfannot}, \type {\pdfcatalog}, etc. In \MKIV\ no such
+primitives are used. In fact, some of them are overloaded to do nothing at all.
+In the \LUA\ backend code you will find function calls like:
+
+\starttyping
+local d = lpdf.dictionary {
+ Name = lpdf.string("test"),
+ Address = lpdf.array {
+ "Main Street", "24", "postal code", "MyPlace",
+ }
+}
+\stoptyping
+
+Equaly valid is:
+
+\starttyping
+local d = lpdf.dictionary()
+d.Name = "test"
+\stoptyping
+
+Eventually the object will end up in the file using calls like:
+
+\starttyping
+local r = pdf.immediateobj(tostring(d))
+\stoptyping
+
+or using the wrapper (which permits tracing):
+
+\starttyping
+local r = lpdf.flushobject(d)
+\stoptyping
+
+The object content will be serialized according to the formal specification so
+the proper \type {<< >>} etc.\ are added. If you want the content instead you can
+use a function call:
+
+\starttyping
+local dict = d()
+\stoptyping
+
+An example of using references is:
+
+\starttyping
+local a = lpdf.array {
+ "Main Street", "24", "postal code", "MyPlace",
+}
+local d = lpdf.dictionary {
+ Name = lpdf.string("test"),
+ Address = lpdf.reference(a),
+}
+local r = lpdf.flushobject(d)
+\stoptyping
+
+\stopsection
+
+We have the following creators. Their arguments are optional.
+
+\starttabulate[|l|p|]
+\FL
+\NC \bf function \NC \bf optional parameter \NC \NR
+\TL
+%NC \type{lpdf.stream} \NC indexed table of operators \NC \NR
+\NC \type{lpdf.dictionary} \NC hash with key/values \NC \NR
+\NC \type{lpdf.array} \NC indexed table of objects \NC \NR
+\NC \type{lpdf.unicode} \NC string \NC \NR
+\NC \type{lpdf.string} \NC string \NC \NR
+\NC \type{lpdf.number} \NC number \NC \NR
+\NC \type{lpdf.constant} \NC string \NC \NR
+\NC \type{lpdf.null} \NC \NC \NR
+\NC \type{lpdf.boolean} \NC boolean \NC \NR
+%NC \type{lpdf.true} \NC \NC \NR
+%NC \type{lpdf.false} \NC \NC \NR
+\NC \type{lpdf.reference} \NC string \NC \NR
+\NC \type{lpdf.verbose} \NC indexed table of strings \NC \NR
+\LL
+\stoptabulate
+
+Flushing objects is done with:
+
+\starttyping
+lpdf.flushobject(obj)
+\stoptyping
+
+Reserving object is or course possible and done with:
+
+\starttyping
+local r = lpdf.reserveobject()
+\stoptyping
+
+Such an object is flushed with:
+
+\starttyping
+lpdf.flushobject(r,obj)
+\stoptyping
+
+We also support named objects:
+
+\starttyping
+lpdf.reserveobject("myobject")
+
+lpdf.flushobject("myobject",obj)
+\stoptyping
+
+\startsection [title={Resources}]
+
+While \LUATEX\ itself will embed all resources related to regular typesetting,
+\MKIV\ has to take care of embedding those related to special tricks, like
+annotations, spot colors, layers, shades, transparencies, metadata, etc. If you
+ever took a look in the \MKII\ \type {spec-*} files you might have gotten the
+impression that it quickly becomes messy. The code there is actually rather old
+and evolved in sync with the \PDF\ format as well as \PDFTEX\ and \DVIPDFMX\
+maturing to their current state. As a result we have a dedicated object
+referencing model that sometimes results in multiple passes due to forward
+references. We could have gotten away from that with the latest versions of
+\PDFTEX\ as it provides means to reserve object numbers but it makes not much
+sense to do that now that \MKII\ is frozen.
+
+Because third party modules (like tikz) also can add resources like in \MKII\
+using an \API\ that makes sure that no interference takes place. Think of macros
+like:
+
+\starttyping
+\pdfbackendsetcatalog {key}{string}
+\pdfbackendsetinfo {key}{string}
+\pdfbackendsetname {key}{string}
+
+\pdfbackendsetpageattribute {key}{string}
+\pdfbackendsetpagesattribute{key}{string}
+\pdfbackendsetpageresource {key}{string}
+
+\pdfbackendsetextgstate {key}{pdfdata}
+\pdfbackendsetcolorspace {key}{pdfdata}
+\pdfbackendsetpattern {key}{pdfdata}
+\pdfbackendsetshade {key}{pdfdata}
+\stoptyping
+
+One is free to use the \LUA\ interface instead, as there one has more
+possibilities. The names are similar, like:
+
+\starttyping
+lpdf.addtoinfo(key,anything_valid_pdf)
+\stoptyping
+
+At the time of this writing (\LUATEX\ .50) there are still places where \TEX\ and
+\LUA\ code is interwoven in a non optimal way, but that will change in the future
+as the backend is completely separated and we can do more \TEX\ trickery at the
+\LUA\ end.
+
+Also, currently we expose more of the backend code than we like and future
+versions will have a more restricted access. The following function will stay
+public:
+
+\starttyping
+lpdf.addtopageresources (key,value)
+lpdf.addtopageattributes (key,value)
+lpdf.addtopagesattributes(key,value)
+
+lpdf.adddocumentextgstate(key,value)
+lpdf.adddocumentcolorspac(key,value)
+lpdf.adddocumentpattern (key,value)
+lpdf.adddocumentshade (key,value)
+
+lpdf.addtocatalog (key,value)
+lpdf.addtoinfo (key,value)
+lpdf.addtonames (key,value)
+\stoptyping
+
+There are several tracing options built in and some more will be added in due
+time:
+
+\starttyping
+\enabletrackers
+ [backend.finalizers,
+ backend.resources,
+ backend.objects,
+ backend.detail]
+\stoptyping
+
+As with all trackers you can also pass them on the command line, for example:
+
+\starttyping
+context --trackers=backend.* yourfile
+\stoptyping
+
+The reference related backend mechanisms have their own trackers.
+
+\stopsection
+
+\startsection [title={Transformations}]
+
+There is at the time of this writing still some backend related code at the \TEX\
+end that needs a cleanup. Most noticeable is the code that deals with
+transformations (like scaling). At some moment in \PDFTEX\ a primitive was
+introduced but it was not completely covering the transform matrix so we never
+used it. In \LUATEX\ we will come up with a better mechanism. Till that moment we
+stick to the \MKII\ method.
+
+\stopsection
+
+\startsection [title={Annotations}]
+
+The \LUA\ based backend of \MKIV\ is not so much less code, but definitely
+cleaner. The reason why there is quite some code is because in \CONTEXT\ we also
+handle annotations and destinations in \LUA. In other words: \TEX\ is not
+bothered by the backend any more. We could make that split without too much
+impact as we never depended on \PDFTEX\ hyperlink related features and used
+generic annotations instead. It's for that reason that \CONTEXT\ has always been
+able to nest hyperlinks and have annotations with a chain of actions.
+
+Another reason for doing it all at the \LUA\ end is that as in \MKII\ we have to
+deal with the rather hybrid cross reference mechanisms which uses a sort of
+language and parsing this is also easier at the \LUA\ end. Think of:
+
+\starttyping
+\definereference[somesound][StartSound(attention)]
+
+\at {just some page} [someplace,somesound,StartMovie(somemovie)]
+\stoptyping
+
+We parse the specification expanding shortcuts when needed, create an action
+chain, make sure that the movie related resources are taken care of (normally the
+movie itself will be a figure), and turn the three words into hyperlinks. As this
+all happens in \LUA\ we have less \TEX\ code. Contrary to what you might expect,
+the \LUA\ code is not that much faster as the \MKII\ \TEX\ code is rather
+optimized.
+
+Special features like \JAVASCRIPT\ as well as widgets (and forms) are also
+reimplemented. Support for \JAVASCRIPT\ is not that complex at all, but as in
+\CONTEXT\ we can organize scripts in collections and have automatic inclusion of
+used functions, still some code is needed. As we now do this in \LUA\ we use less
+\TEX\ memory. Reimplementing widgets took a bit more work as I used the
+opportunity to remove hacks for older viewers. As support for widgets is somewhat
+instable in viewers quite some testing was needed, especially because we keep
+supporting cloned and copied fields (resulting in widget trees).
+
+An interesting complication with widgets is that each instance can have a lot of
+properties and as we want to be able to use thousands of them in one document,
+each with different properties, we have efficient storage in \MKII\ and want to
+do the same in \LUA. Most code at the \TEX\ end is related to passing all those
+options.
+
+You could use the \LUA\ functions that relate to annotations etc.\ but normally
+you will use the regular \CONTEXT\ user interface. For practical reasons, the
+backend code is grouped in several tables:
+
+The \type{backends} table has subtables for each backend and currently there is
+only one: \type {pdf}. Each backend provides tables itself. In the
+\type{codeinjections} namespace we collect functions that don't interfere with
+the typesetting or typeset result, like inserting all kind of resources (movies,
+attachment, etc.), widget related functionality, and in fact everything that does
+not fit into the other categories. In \type {nodeinjections} we organize
+functions that inject literal \PDF\ code in the nodelist which then ends up in
+the \PDF\ stream: color, layers, etc. The \type {registrations} table is reserved
+for functions related to resources that result from node injections: spot colors,
+transparencies, etc. Once the backend code is finished we might come up with
+another organization. No matter what we end up with, the way the \type {backends}
+table is supposed to be organized determines the \API\ and those who have seen
+the \MKII\ backend code will recognize some of it.
+
+\startsection [title={Metadata}]
+
+We always had the opportunity to set the information fields in a \PDF\ but
+standardization forces us to add these large verbose metadata blobs. As this blob
+is coded in \XML\ we use the built in \XML\ parser to fill a template. Thanks to
+extensive testing and research by Peter Rolf we now have a rather complete
+support for \PDF/x related demands. This will definitely evolve with the advance
+of the \PDF\ specification. You can replace the information with your own but we
+suggest that you stay away from this metadata mess as far as possible.
+
+\stopsection
+
+\startsection [title={Helpers}]
+
+If you look into the \type {lpdf-*.lua} files you will find more
+functions. Some are public helpers, like:
+
+\starttabulate
+\NC \type {lpdf.toeight(str)} \NC returns \type {(string)} \NC \NR
+%NC \type {lpdf.cleaned(str)} \NC returns \type {escaped string} \NC \NR
+\NC \type {lpdf.tosixteen(str)} \NC returns \type {<utf16 sequence>} \NC \NR
+\stoptabulate
+
+An example of another public function is:
+
+\starttyping
+lpdf.sharedobj(content)
+\stoptyping
+
+This one flushes the object and returns the object number. Already defined
+objects are reused. In addition to this code driven optimization, some other
+optimization and reuse takes place but all that happens without user
+intervention.
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/hybrid/hybrid-bidi.tex b/doc/context/sources/general/manuals/hybrid/hybrid-bidi.tex
new file mode 100644
index 000000000..c291d11eb
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/hybrid-bidi.tex
@@ -0,0 +1,194 @@
+% language=uk
+
+\startcomponent hybrid-inserts
+
+\environment hybrid-environment
+
+\startchapter[title={The Bidi Dilemma}]
+
+Here I will introduce a few concepts of bidirectional typesetting. While \LUATEX\
+does a lot automatically, this does not mean that you get a proper bidirectional
+layout for free. We distinguish a few cases:
+
+\startitemize [packed]
+\startitem verbatim as used in manuals \stopitem
+\startitem simulating a text editor \stopitem
+\startitem typesetting of text \stopitem
+\stopitemize
+
+In addition to this we distinguish two document layouts:
+
+\startitemize [packed]
+\startitem predominantly left||to||right with some right||to||left snippets \stopitem
+\startitem predominantly right||to||left with some left||to||right snippets \stopitem
+\stopitemize
+
+In both cases explicit choices have to be made when defining the layout,
+programming the style, and coding the content. In this chapter I will stick to
+verbatim.
+
+In verbatim mode we normally use a monospaced font and no interference with
+features is to be expected. You get what you've keyed in. Because verbatim is
+used for illustrative purposes, we need to have predictable output. This is why
+we have to control the position of the linenumbers as well as the alignment
+explicitly.
+
+\startbuffer[basics]
+\definetyping [XXtyping] [numbering=line]
+\definetyping [RLtyping] [align=r2l,numbering=line]
+\definetyping [LRtyping] [align=l2r,numbering=line]
+\stopbuffer
+
+\typebuffer[basics] \getbuffer[basics]
+
+We use these definitions in the following example:
+
+\startbuffer[sample]
+\startLRtyping
+At the left!
+At the left!
+\stopLRtyping
+
+\startRLtyping
+At the right!
+At the right!
+\stopRLtyping
+
+\startalignment[l2r]
+\startXXtyping
+At the left!
+At the left!
+\stopXXtyping
+\stopalignment
+
+\startalignment[r2l]
+\startXXtyping
+At the right!
+At the right!
+\stopXXtyping
+\stopalignment
+\stopbuffer
+
+\typebuffer[sample]
+
+However, we can have a bit more control over the position of the line numbers. As
+linenumbers are added in a later stage we need to define additional line number
+classes for this. We show four relevant positions of linenumbers. What setting
+you use depends on the predominant direction of your document as well as what you
+want to demonstrate.
+
+\startbuffer
+\definetyping [RLtypingLEFT] [align=r2l,numbering=line]
+\definetyping [LRtypingLEFT] [align=l2r,numbering=line]
+
+\setuplinenumbering [RLtypingLEFT] [location=left]
+\setuplinenumbering [LRtypingLEFT] [location=left]
+
+\startLRtypingLEFT
+At the left!
+At the left!
+\stopLRtypingLEFT
+
+\startRLtypingLEFT
+At the right!
+At the right!
+\stopRLtypingLEFT
+\stopbuffer
+
+\typebuffer
+
+When \type {location} is set to \type {left}, the line numbers will always be in
+the left margin, no matter what the text direction is.
+
+\getbuffer
+
+\startbuffer
+\definetyping [RLtypingRIGHT] [align=r2l,numbering=line]
+\definetyping [LRtypingRIGHT] [align=l2r,numbering=line]
+
+\setuplinenumbering [RLtypingRIGHT] [location=right]
+\setuplinenumbering [LRtypingRIGHT] [location=right]
+
+\startLRtypingRIGHT
+At the left!
+At the left!
+\stopLRtypingRIGHT
+
+\startRLtypingRIGHT
+At the right!
+At the right!
+\stopRLtypingRIGHT
+\stopbuffer
+
+From this it follows that when \type {location} is set to \type {right}, the line
+numbers will always be in the right margin.
+
+\typebuffer
+
+Again, the text direction is not influencing the placement.
+
+\getbuffer
+
+\startbuffer
+\definetyping [RLtypingBEGIN] [align=r2l,numbering=line]
+\definetyping [LRtypingBEGIN] [align=l2r,numbering=line]
+
+\setuplinenumbering [RLtypingBEGIN] [location=begin]
+\setuplinenumbering [LRtypingBEGIN] [location=begin]
+
+\startLRtypingBEGIN
+At the left!
+At the left!
+\stopLRtypingBEGIN
+
+\startRLtypingBEGIN
+At the right!
+At the right!
+\stopRLtypingBEGIN
+\stopbuffer
+
+The next two cases {\em do} obey to the text direction. When set to \type
+{begin}, the location will be at the beginning of the line.
+
+\typebuffer
+
+When typesetting a paragraph from right to left, the beginning of the line is at
+the right margin.
+
+\getbuffer
+
+\startbuffer
+\definetyping [RLtypingEND] [align=r2l,numbering=line]
+\definetyping [LRtypingEND] [align=l2r,numbering=line]
+
+\setuplinenumbering [RLtypingEND] [location=end]
+\setuplinenumbering [LRtypingEND] [location=end]
+
+\startLRtypingEND
+At the left!
+At the left!
+\stopLRtypingEND
+
+\startRLtypingEND
+At the right!
+At the right!
+\stopRLtypingEND
+\stopbuffer
+
+Consequently we get the opposite result when we set \type {location} to
+\type {end}.
+
+\typebuffer
+
+This time we get complementary results:
+
+\getbuffer
+
+It will be clear that when we are writing a manual where we mix example code with
+real right to left text some care goes into setting up the verbatim environments.
+And this is just one of the aspects you have to deal with in a bidirectional
+document layout.
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/hybrid/hybrid-callbacks.tex b/doc/context/sources/general/manuals/hybrid/hybrid-callbacks.tex
new file mode 100644
index 000000000..00b3c0f3f
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/hybrid-callbacks.tex
@@ -0,0 +1,229 @@
+% language=uk
+
+\startcomponent hybrid-callbacks
+
+\environment hybrid-environment
+
+\startchapter[title={Callbacks}]
+
+\startsection [title={Introduction}]
+
+Callbacks are the means to extend the basic \TEX\ engine's functionality in
+\LUATEX\ and \CONTEXT\ \MKIV\ uses them extensively. Although the interface is
+still in development we see users popping in their own functionality and although
+there is nothing wrong with that, it can open a can of worms.
+
+It is for this reason that from now on we protect the \MKIV\ callbacks from being
+overloaded. For those who still want to add their own code some hooks are
+provided. Here we will address some of these issues.
+
+\stopsection
+
+\startsection [title={Actions}]
+
+There are already quite some callbacks and we use most of them. In the following
+list the callbacks tagged with \type {enabled} are used and frozen, the ones
+tagged \type {disabled} are blocked and never used, while the ones tagged \type
+{undefined} are yet unused.
+
+\ctxcommand{showcallbacks()}
+
+You can be rather sure that we will eventually use all callbacks one way or the
+other. Also, some callbacks are only set when certain functionality is enabled.
+
+It may sound somewhat harsh but if users kick in their own code, we cannot
+guarantee \CONTEXT's behaviour any more and support becomes a pain. If you really
+need to use a callback yourself, you should use one of the hooks and make sure
+that you return the right values.
+
+The exact working of the callback handler is not something we need to bother
+users with so we stick to a simple description. The next list is not definitive
+and evolves. For instance we might at some point decide to add more granularity.
+
+We only open up some of the node list related callbacks. All callbacks related to
+file handling, font definition and housekeeping are frozen. Most if the
+mechanisms that use these callbacks have hooks anyway.
+
+Of course you can overload the built in functionality as this is currently not
+protected, but we might do that as well once \MKIV\ is stable enough. After all,
+at the time of this writing overloading can be handy when testing.
+
+This leaves the node list manipulators. The are grouped as follows:
+
+\starttabulate[|l|l|p|]
+\FL
+\NC \bf category \NC \bf callback \NC \bf usage \NC \NR
+\TL
+\NC \type{processors} \NC \type{pre_linebreak_filter} \NC called just before the paragraph is broken into lines \NC \NR
+\NC \NC \type{hpack_filter} \NC called just before a horizontal box is constructed \NC \NR
+\NC \type{finalizers} \NC \type{post_linebreak_filter} \NC called just after the paragraph has been broken into lines \NC \NR
+\NC \type{shipouts} \NC \type{no callback yet} \NC applied to the box (or xform) that is to be shipped out \NC \NR
+\NC \type{mvlbuilders} \NC \type{buildpage_filter} \NC called after some material has been added to the main vertical list \NC \NR
+\NC \type{vboxbuilders} \NC \type{vpack_filter} \NC called when some material is added to a vertical box \NC \NR
+%NC \type{parbuilders} \NC \type{linebreak_filter} \NC called when a paragraph is to be broken into lines \NC \NR
+%NC \type{pagebuilders} \NC \type{pre_output_filter} \NC called when a page it fed into the output routing \NC \NR
+\NC \type{math} \NC \type{mlist_to_hlist} \NC called just after the math list is created, before it is turned into an horizontal list \NC \NR
+\BL
+\stoptabulate
+
+Each category has several subcategories but for users only two
+make sense: \type {before} and \type {after}. Say that you want to
+hook some tracing into the \type {mvlbuilder}. This is how it's
+done:
+
+\starttyping
+function third.mymodule.myfunction(where)
+ nodes.show_simple_list(tex.lists.contrib_head)
+end
+
+nodes.tasks.appendaction("processors", "before", "third.mymodule.myfunction")
+\stoptyping
+
+As you can see, in this case the function gets no \type {head} passed (at least
+not currently). This example also assumes that you know how to access the right
+items. The arguments and return values are given below. \footnote {This interface
+might change a bit in future versions of \CONTEXT. Therefore we will not discuss
+the few more optional arguments that are possible.}
+
+\starttabulate[|l|l|p|]
+\FL
+\NC \bf category \NC \bf arguments \NC \bf return value \NC \NR
+\TL
+\NC \type{processors} \NC \type{head, ...} \NC \type{head, done} \NC \NR
+\NC \type{finalizers} \NC \type{head, ...} \NC \type{head, done} \NC \NR
+\NC \type{shipouts} \NC \type{head} \NC \type{head, done} \NC \NR
+\NC \type{mvlbuilders} \NC \NC \type{done} \NC \NR
+\NC \type{vboxbuilders} \NC \type{head, ...} \NC \type{head, done} \NC \NR
+%NC \type{parbuilders} \NC \type{head, ...} \NC \type{head, done} \NC \NR
+%NC \type{pagebuilders} \NC \type{head, ...} \NC \type{head, done} \NC \NR
+\NC \type{math} \NC \type{head, ...} \NC \type{head, done} \NC \NR
+\LL
+\stoptabulate
+
+\stopsection
+
+\startsection [title={Tasks}]
+
+In the previous section we already saw that the actions are in fact tasks and
+that we can append (and therefore also prepend) to a list of tasks. The \type
+{before} and \type {after} task lists are valid hooks for users contrary to the
+other tasks that can make up an action. However, the task builder is generic
+enough for users to be used for individual tasks that are plugged into the user
+hooks.
+
+Of course at some point, too many nested tasks bring a performance penalty with
+them. At the end of a run \MKIV\ reports some statistics and timings and these
+can give you an idea how much time is spent in \LUA. Of course this is a rough
+estimate only.
+
+The following tables list all the registered tasks for the processors actions:
+
+\ctxlua{nodes.tasks.table("processors")}
+
+Some of these do have subtasks and some of these even more, so you can imagine
+that quite some action is going on there.
+
+The finalizer tasks are:
+
+\ctxlua{nodes.tasks.table("finalizers")}
+
+Shipouts concern:
+
+\ctxlua{nodes.tasks.table("shipouts")}
+
+There are not that many mvlbuilder tasks currently:
+
+\ctxlua{nodes.tasks.table("mvlbuilders")}
+
+The vboxbuilder perform similar tasks:
+
+\ctxlua{nodes.tasks.table("vboxbuilders")}
+
+% In the future we expect to have more parbuilder tasks. Here again
+% there are subtasks that depend on the current typesetting environment, so
+% this is the right spot for language specific treatments.
+%
+% \ctxlua{nodes.tasks.table("parbuilders")}
+
+% The following actions are applied just before the list is
+% passed on the the output routine. The return value is a vlist.
+%
+% \ctxlua{nodes.tasks.table("pagebuilders")}
+
+Finally, we have tasks related to the math list:
+
+\ctxlua{nodes.tasks.table("math")}
+
+As \MKIV\ is developed in sync with \LUATEX\ and code changes from experimental
+to more final and reverse, you should not be too surprised if the registered
+function names change.
+
+You can create your own task list with:
+
+\starttyping
+nodes.tasks.new("mytasks",{ "one", "two" })
+\stoptyping
+
+After that you can register functions. You can append as well as prepend them
+either or not at a specific position.
+
+\starttyping
+nodes.tasks.appendaction ("mytask","one","bla.alpha")
+nodes.tasks.appendaction ("mytask","one","bla.beta")
+
+nodes.tasks.prependaction("mytask","two","bla.gamma")
+nodes.tasks.prependaction("mytask","two","bla.delta")
+
+nodes.tasks.appendaction ("mytask","one","bla.whatever","bla.alpha")
+\stoptyping
+
+Functions can also be removed:
+
+\starttyping
+nodes.tasks.removeaction("mytask","one","bla.whatever")
+\stoptyping
+
+As removal is somewhat drastic, it is also possible to enable and disable
+functions. From the fact that with these two functions you don't specify a
+category (like \type {one} or \type {two}) you can conclude that the function
+names need to be unique within the task list or else all with the same name
+within this task will be disabled.
+
+\starttyping
+nodes.tasks.enableaction ("mytask","bla.whatever")
+nodes.tasks.disableaction("mytask","bla.whatever")
+\stoptyping
+
+The same can be done with a complete category:
+
+\starttyping
+nodes.tasks.enablegroup ("mytask","one")
+nodes.tasks.disablegroup("mytask","one")
+\stoptyping
+
+There is one function left:
+
+\starttyping
+nodes.tasks.actions("mytask",2)
+\stoptyping
+
+This function returns a function that when called will perform the tasks. In this
+case the function takes two extra arguments in addition to \type {head}.
+\footnote {Specifying this number permits for some optimization but is not really
+needed}
+
+Tasks themselves are implemented on top of sequences but we won't discuss them
+here.
+
+\stopsection
+
+\startsection [title={Paragraph and page builders}]
+
+Building paragraphs and pages is implemented differently and has no user hooks.
+There is a mechanism for plugins but the interface is quite experimental.
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/hybrid/hybrid-characters.tex b/doc/context/sources/general/manuals/hybrid/hybrid-characters.tex
new file mode 100644
index 000000000..4800e1500
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/hybrid-characters.tex
@@ -0,0 +1,630 @@
+% language=uk
+
+\startcomponent hybrid-characters
+
+\environment hybrid-environment
+
+\startchapter[title={Characters with special meanings}]
+
+\startsection[title={Introduction}]
+
+When \TEX\ was designed \UNICODE\ was not yet available and characters were
+encoded in a seven or eight bit encoding, like \ASCII\ or \EBCDIC. Also, the
+layout of keyboards was dependent of the vendor. A lot has happened since then:
+more and more \UNICODE\ has become the standard (with \UTF\ as widely used way of
+efficiently coding it).
+
+Also at that time, fonts on computers were limited to 256 characters at most.
+This resulted in \TEX\ macro packages dealing with some form of input encoding on
+the one hand and a font encoding on the other. As a side effect of character
+nodes storing a reference to a glyph in a font hyphenation was related to font
+encodings. All this was quite okay for documents written in English but when
+\TEX\ became pupular in more countries more input as well as font encodings were
+used.
+
+Of course, with \LUATEX\ being a \UNICODE\ engine this has changed, and even more
+because wide fonts (either \TYPEONE\ or \OPENTYPE) are supported. However, as
+\TEX\ is already widely used, we cannot simply change the way characters are
+treated, certainly not special ones. Let's go back in time and see how plain
+\TEX\ set some standards, see how \CONTEXT\ does it currently, and look ahead how
+future versions will deal with it.
+
+\stopsection
+
+\startsection[title={Catcodes}]
+
+Traditional \TEX\ is an eight bit engine while \LUATEX\ extends this to \UTF\
+input and internally works with large numbers.
+
+In addition to its natural number (at most 0xFF for traditional \TEX\ and upto
+0x10FFFF for \LUATEX), each character can have a so called category code, or
+catcode. This code determines how \TEX\ will treat the character when it is seen
+in the input. The category code is stored with the character so when we change
+such a code, already read characters retain theirs. Once typeset a character can
+have turned into a glyph and its catcode properties are lost.
+
+There are 16 possible catcodes that have the following meaning:
+
+\starttabulate[|l|l|p|]
+\NC 0 \NC escape \NC This starts an control sequence. The scanner
+reads the whole sequence and stores a reference to it in an
+efficient way. For instance the character sequence \type {\relax}
+starts with a backslash that has category code zero and \TEX\
+reads on till it meets non letters. In macro definitions a
+reference to the so called hash table is stored. \NC \NR
+\NC 1 \NC begin group \NC This marks the begin of a group. A group
+an be used to indicate a scope, the content of a token list, box
+or macro body, etc. \NC \NR
+\NC 2 \NC end group \NC This marks the end of a group. \NC \NR
+\NC 3 \NC math shift \NC Math starts and ends with characters
+tagged like this. Two in a row indicate display math. \NC \NR
+\NC 4 \NC alignment tab \NC Characters with this property indicate
+a next entry in an alignment. \NC \NR
+\NC 5 \NC end line \NC This one is somewhat special. As line
+endings are operating system dependent, they are normalized to
+character 13 and by default that one has this category code. \NC
+\NR
+\NC 6 \NC parameter \NC Macro parameters start with a character
+with this category code. Such characters are also used in
+alignment specifications. In nested definitions, multiple of them
+in a row are used. \NC \NR
+\NC 7 \NC superscript \NC Tagged like this, a character signals
+that the next token (or group) is to be superscripted. Two such
+characters in a row will make the parser treat the following
+character or lowercase hexadecimal number as specification for
+a replacement character. \NC \NR
+\NC 8 \NC subscript \NC Codes as such, a character signals that
+the next token (or group) is to be subscripted. \NC \NR
+\NC 9 \NC ignored \NC When a character has this category code it
+is simply ignored. \NC \NR
+\NC 10 \NC space \NC This one is also special. Any character tagged
+as such is converted to the \ASCII\ space character with code 32.
+\NC \NR
+\NC 11 \NC letter \NC Normally this are the characters that make op
+sequences with a meaning like words. Letters are special in the sense that
+macro names can only be made of letters. The hyphenation machinery will
+normally only deal with letters. \NC \NR
+\NC 12 \NC other \NC Examples of other characters are punctuation and
+special symbols. \NC \NR
+\NC 13 \NC active \NC This makes a character into a macro. Of course
+it needs to get a meaning in order not to trigger an error. \NC \NR
+\NC 14 \NC comment \NC All characters on the same line after comment
+characters are ignored. \NC \NR
+\NC 15 \NC invalid \NC An error message is issued when an invalid
+character is seen. This catcode is probably not assigned very
+often. \NC \NR
+\stoptabulate
+
+So, there is a lot to tell about these codes. We will not discuss the input
+parser here, but it is good to know that the following happens.
+
+\startitemize[packed]
+\startitem
+ The engine reads lines, and normalizes cariage return
+ and linefeed sequences.
+\stopitem
+\startitem
+ Each line gets a character with number \type {\endlinechar} appended.
+ Normally this is a character with code 13. In \LUATEX\ a value of $-1$ will
+ disable this automatism.
+\stopitem
+\startitem
+ Normally spaces (characters with the space property) at the end of a line are
+ discarded.
+\stopitem
+\startitem
+ Sequences like \type {^^A} are converted to characters with numbers depending
+ on the position in \ASCII\ vector: \type {^^@} is zero, \type {^^A} is one,
+ etc.
+\stopitem
+\startitem
+ Sequences like \type {^^1f} are converted to characters with a number similar
+ to the (lowercase) hexadecimal part.
+\stopitem
+\stopitemize
+
+Hopefully this is enough background information to get through the following
+sections so let's stick to a simple example:
+
+\starttyping
+\def\test#1{$x_{#1}$}
+\stoptyping
+
+Here there are two control sequences, starting with a backslash with category
+code zero. Then comes an category~6 character that indicates a parameter that is
+referenced later on. The outer curly braces encapsulate the definition and the
+inner two braces mark the argument to a subscript, which itself is indicated by
+an underscore with category code~8. The start and end of mathmode is indicated
+with a dollar sign that is tagged as math shift (category code~3). The character
+\type {x} is just a letter.
+
+Given the above description, how do we deal with catcodes and newlines at the
+\LUA\ end? Catcodes are easy: we can print back to \TEX\ using a specific catcode
+regime (later we will see a few of those regimes). As character~13 is used as
+default at the \TEX\ end, we should also use it at the \LUA\ end, i.e.\ we should
+use \type {\r} as line terminator (\type {\endlinechar}). On the other hand, we
+have to use \type {\n} (character 10, \type {\newlinechar}) for printing to the
+terminal, log file, of \TEX\ output handles, although in \CONTEXT\ all that
+happens via \LUA\ anyway, so we don't bother too much about it here.
+
+There is a pitfall. As \TEX\ reads lines, it depends on the file system to
+provide them: it fetches lines or whatever represents the same on block devices.
+In \LUATEX\ the implementation is similar: if you plug in a reader callback, it
+has to provide a function that returns a line. Passing two lines does not work
+out as expected as \TEX\ discards anything following the line separator (cr, lf
+or crlf) and then appends a normalized endline character (in our case
+character~13). At least, this is what \TEX\ does naturally. So, in callbacks you
+can best feed line by line without any of those characters.
+
+When you print something from \LUA\ to \TEX\ the situation is slightly different:
+
+\startbuffer
+\startluacode
+tex.print("line 1\r line 2")
+tex.print("line 3\n line 4")
+\stopluacode
+\stopbuffer
+
+\typebuffer
+
+This is what we get:
+
+\startpacked\getbuffer\stoppacked
+
+The explicit \type {\endlinechar} (\type {\r}) terminates the line and the rest
+gets discarded. However, a \type {\n} by default has category code~12 (other) and
+is turned into a space and successive spaces are (normally) ignored, which is why
+we get the third and fourth line separated by a space.
+
+Things get real hairy when we do the following:
+
+\startbuffer
+\startluacode
+tex.print("\\bgroup")
+tex.print("\\obeylines")
+tex.print("line 1\r line 2")
+tex.print("line 3\n line 4")
+tex.print("\\egroup")
+\stopluacode
+\stopbuffer
+
+\typebuffer
+
+Now we get this (the \type {tex.print} function appends an endline character
+itself):
+
+\startpacked\getbuffer\stoppacked
+
+By making the endline character active and equivalent to \type {\par} \TEX\
+nicely scans on and we get the second line as well. Now, if you're still with us,
+you're ready for the next section.
+
+\stopsection
+
+\startsection[title={Plain \TEX}]
+
+In the \TEX\ engine, some characters already have a special meaning. This is
+needed because otherwise we cannot use the macro language to set up the format.
+This is hard|-|coded so the next code is not really used.
+
+\starttyping
+\catcode `\^^@ = 9 % ascii null is ignored
+\catcode `\^^M = 5 % ascii return is end-line
+\catcode `\\ = 0 % backslash is TeX escape character
+\catcode `\% = 14 % percent sign is comment character
+\catcode `\ = 10 % ascii space is blank space
+\catcode `\^^? = 15 % ascii delete is invalid
+\stoptyping
+
+There is no real reason for setting up the null and delete character but maybe in
+those days the input could contain them. The regular upper- and lowercase
+characters are initialized to be letters with catcode~11. All other characters
+get category code~12 (other).
+
+The plain \TEX\ format starts with setting up some characters that get a special
+meaning.
+
+\starttyping
+\catcode `\{ = 1 % left brace is begin-group character
+\catcode `\} = 2 % right brace is end-group character
+\catcode `\$ = 3 % dollar sign is math shift
+\catcode `\& = 4 % ampersand is alignment tab
+\catcode `\# = 6 % hash mark is macro parameter character
+\catcode `\^ = 7 \catcode`\^^K=7 % circumflex and uparrow
+ % are for superscripts
+\catcode `\_ = 8 \catcode`\^^A=8 % underline and downarrow
+ % are for subscripts
+\catcode `\^^I = 10 % ascii tab is a blank space
+\catcode `\~ = 13 % tilde is active
+\stoptyping
+
+The fact that this happens in the format file indicates that it is not by design
+that for instance curly braces are used for grouping, or the hash for indicating
+arguments. Even math could have been set up differently. Nevertheless, all macro
+packages have adopted these conventions so they could as well have been
+hard|-|coded presets.
+
+Keep in mind that nothing prevents us to define more characters this way, so we
+could make square brackets into group characters as well. I wonder how many
+people have used the two additional special characters that can be used for
+super- and subscripts. The comment indicates that it is meant for a special
+keyboard.
+
+One way to make sure that a macro will not be overloaded is to use characters in
+it's name that are letters when defining the macro but make sure that they are
+others when the user inputs text.
+
+\starttyping
+\catcode `@ = 11
+\stoptyping
+
+Again, the fact that plain \TEX\ uses the commercial at sign has set a standard.
+After all, at that time this symbol was not as popular as it is nowadays.
+
+Further on in the format some more catcode magic happens. For instance this:
+
+\starttyping
+\catcode `\^^L = 13 \outer\def^^L{\par} % ascii form-feed is "\outer\par"
+\stoptyping
+
+So, in your input a formfeed is equivalent to an empty line which makes sense,
+although later we will see that in \CONTEXT\ we do it differently. As the tilde
+was already active it also gets defined:
+
+\starttyping \def~{\penalty10000\ } % tie \stoptyping
+
+Again, this convention is adopted and therefore a sort of standard. Nowadays we
+have special \UNICODE\ characters for this, but as they don't have a
+visualization editing is somewhat cumbersome.
+
+The change in catcode of the newline character \type {^^M} is done locally, for
+instance in \type {\obeylines}. Keep in mind that this is the character that
+\TEX\ appends to the end of an input line. The space is made active when spaces
+are to be obeyed.
+
+A few very special cases are the following.
+
+\starttyping
+\mathcode `\^^Z = "8000 % \ne
+\mathcode `\ = "8000 % \space
+\mathcode `\' = "8000 % ^\prime
+\mathcode `\_ = "8000 % \_
+\stoptyping
+
+This flags those characters as being special in mathmode. Normally when you do
+something like this:
+
+\starttyping
+\def\test#1{$#1$} \test{x_2} \test{x''}
+\stoptyping
+
+The catcodes that are set when passing the argument to \type {\test} are frozen
+when they end up in the body of the macro. This means that when \type {'} is
+other it will be other when the math list is built. However, in math mode, plain
+\TEX\ wants to turn that character into a prime and even in a double one when
+there are two in a row. The special value \type {"8000} tells the math machinery
+that when it has an active meaning, that one will be triggered. And indeed, the
+plain format defined these active characters, but in a special way, sort of:
+
+\starttyping
+{ \catcode`\' = 13 \gdef'{....} }
+\stoptyping
+
+So, when active it has a meaning, and it happens to be only treated as active
+when in math mode.
+
+Quite some other math codes are set as well, like:
+
+\starttyping
+\mathcode`\^^@ = "2201 % \cdot
+\mathcode`\^^A = "3223 % \downarrow
+\mathcode`\^^B = "010B % \alpha
+\mathcode`\^^C = "010C % \beta
+\stoptyping
+
+In Appendix~C of The \TeX book Don Knuth explains the rationale behind this
+choice: he had a keyboard that has these shortcuts. As a consequence, one of the
+math font encodings also has that layout. It must have been a pretty classified
+keyboard as I could not find a picture on the internet. One can probably assemble
+such a keyboard from one of those keyboard that come with no imprint. Anyhow, Don
+explicitly says \quotation {Of course, designers of \TEX\ macro packages that are
+intended to be widely used should stick to the standard \ASCII\ characters.} so
+that is what we do in the next sections.
+
+\stopsection
+
+\startsection[title={How about \CONTEXT}]
+
+In \CONTEXT\ we've always used several catcode regimes and switching between them
+was a massive operation. Think of a different regime when defining macros,
+inputting text, typesetting verbatim, processing \XML, etc. When \LUATEX\
+introduced catcode tables, the existing mechanisms were rewritten to take
+advantage of this. This is the standard table for input as of December 2010.
+
+\starttyping
+\startcatcodetable \ctxcatcodes
+ \catcode \tabasciicode \spacecatcode
+ \catcode \endoflineasciicode \endoflinecatcode
+ \catcode \formfeedasciicode \endoflinecatcode
+ \catcode \spaceasciicode \spacecatcode
+ \catcode \endoffileasciicode \ignorecatcode
+ \catcode \circumflexasciicode \superscriptcatcode
+ \catcode \underscoreasciicode \subscriptcatcode
+ \catcode \ampersandasciicode \alignmentcatcode
+ \catcode \backslashasciicode \escapecatcode
+ \catcode \leftbraceasciicode \begingroupcatcode
+ \catcode \rightbraceasciicode \endgroupcatcode
+ \catcode \dollarasciicode \mathshiftcatcode
+ \catcode \hashasciicode \parametercatcode
+ \catcode \commentasciicode \commentcatcode
+ \catcode \tildeasciicode \activecatcode
+ \catcode \barasciicode \activecatcode
+\stopcatcodetable
+\stoptyping
+
+Because the meaning of active characters can differ per table there is a related
+mechanism for switching those meanings. A careful reader might notice that the
+formfeed character is just a newline. If present at all, it often sits on its own
+line, so effectively it then behaves as in plain \TEX: triggering a new
+paragraph. Otherwise it becomes just a space in the running text.
+
+In addition to the active tilde we also have an active bar. This is actually one
+of the oldest features: we use bars for signaling special breakpoints, something
+that is really needed in Dutch (education), where we have many compound words.
+Just to show a few applications:
+
+\starttyping
+firstpart||secondpart this|(|orthat) one|+|two|+|three
+\stoptyping
+
+In \MKIV\ we have another way of dealing with this. There you can enable a
+special parser that deals with it at another level, the node list.
+
+\starttyping
+\setbreakpoints[compound]
+\stoptyping
+
+When \TEX ies discuss catcodes some can get quite upset, probably because they
+spend some time fighting their side effects. Personally I like the concept. They
+can be a pain to deal with but also can be fun. For instance, support of \XML\ in
+\CONTEXT\ \MKII\ was made possible by using active \type {<} and \type {&}.
+
+When dealing with all kind of inputs the fact that characters have special
+meanings can get in the way. One can argue that once a few have a special
+meaning, it does not matter that some others have. Most complaints from users
+concern \type {$}, \type {&} and \type {_}. When for symmetry we add \type {^} it
+is clear that these characters relate to math.
+
+Getting away from the \type {$} can only happen when users are willing to use for
+instance \type {\m{x}} instead of \type {$x$}. The \type {&} is an easy one
+because in \CONTEXT\ we have always discouraged its use in tables and math
+alignments. Using (short) commands is a bit more keying but also provides more
+control. That leaves the \type {_} and \type {^} and there is a nice solution for
+this: the special math tagging discussed in the previous section.
+
+For quite a while \CONTEXT\ provides two commands that makes it possible to use
+\type {&}, \type {_} and \type {^} as characters with only a special meaning
+inside math mode. The command
+
+\starttyping
+\nonknuthmode
+\stoptyping
+
+turns on this feature. The counterpart of this command is
+
+\starttyping
+\donknuthmode
+\stoptyping
+
+One step further goes the command:
+
+\starttyping
+\asciimode
+\stoptyping
+
+This only leave the backslash and curly braces a special meaning.
+
+\starttyping
+\startcatcodetable \txtcatcodes
+ \catcode \tabasciicode \spacecatcode
+ \catcode \endoflineasciicode \endoflinecatcode
+ \catcode \formfeedasciicode \endoflinecatcode
+ \catcode \spaceasciicode \spacecatcode
+ \catcode \endoffileasciicode \ignorecatcode
+ \catcode \backslashasciicode \escapecatcode
+ \catcode \leftbraceasciicode \begingroupcatcode
+ \catcode \rightbraceasciicode\endgroupcatcode
+\stopcatcodetable
+\stoptyping
+
+So, even the percentage character being a comment starter is no longer there. At
+this time it's still being discussed where we draw the line. For instance, using
+the following setup renders puts \TEX\ out of action, and we happily use it deep
+down in \CONTEXT\ to deal with verbatim.
+
+\starttyping
+\startcatcodetable \vrbcatcodes
+ \catcode \tabasciicode \othercatcode
+ \catcode \endoflineasciicode \othercatcode
+ \catcode \formfeedasciicode \othercatcode
+ \catcode \spaceasciicode \othercatcode
+ \catcode \endoffileasciicode \othercatcode
+\stopcatcodetable
+\stoptyping
+
+\stopsection
+
+\startsection[title={Where are we heading?}]
+
+When defining macros, in \CONTEXT\ we not only use the \type {@} to provide some
+protection against overloading, but also the \type {?} and \type {!}. There is of
+course some freedom in how to use them but there are a few rules, like:
+
+\starttyping
+\c!width % interface neutral key
+\v!yes % interface neutral value
+\s!default % system constant
+\e!start % interface specific command name snippet
+\!!depth % width as keyword to primitive
+\!!stringa % scratch macro
+\??ab % namespace
+\@@abwidth % namespace-key combination
+\stoptyping
+
+There are some more but this demonstrates the principle. When defining macros
+that use these, you need to push and pop the current catcode regime
+
+\starttyping
+\pushcatcodes
+\catcodetable \prtcatcodes
+....
+\popcatcodes
+\stoptyping
+
+or more convenient:
+
+\starttyping
+\unprotect
+....
+\protect
+\stoptyping
+
+Recently we introduced named parameters in \CONTEXT\ and files that are coded
+that way are tagged as \MKVI. Because we nowadays are less concerned about
+performance, some of the commands that define the user interface have been
+rewritten. At the cost of a bit more runtime we move towards a somewhat cleaner
+inheritance model that uses less memory. As a side effect module writers can
+define the interface to functionality with a few commands; think of defining
+instances with inheritance, setting up instances, accessing parameters etc. It
+sounds more impressive than it is in practice but the reason for mentioning it
+here is that this opportunity is also used to provide module writers an
+additional protected character: \type {_}.
+
+\starttyping
+\def\do_this_or_that#variable#index%
+ {$#variable_{#index}$}
+
+\def\thisorthat#variable#index%
+ {(\do_this_or_that{#variable}{#index})}
+\stoptyping
+
+Of course in the user macros we don't use the \type {_} if only because we want
+that character to show up as it is meant.
+
+\starttyping
+\startcatcodetable \prtcatcodes
+ \catcode \tabasciicode \spacecatcode
+ \catcode \endoflineasciicode \endoflinecatcode
+ \catcode \formfeedasciicode \endoflinecatcode
+ \catcode \spaceasciicode \spacecatcode
+ \catcode \endoffileasciicode \ignorecatcode
+ \catcode \circumflexasciicode \superscriptcatcode
+ \catcode \underscoreasciicode \lettercatcode
+ \catcode \ampersandasciicode \alignmentcatcode
+ \catcode \backslashasciicode \escapecatcode
+ \catcode \leftbraceasciicode \begingroupcatcode
+ \catcode \rightbraceasciicode \endgroupcatcode
+ \catcode \dollarasciicode \mathshiftcatcode
+ \catcode \hashasciicode \parametercatcode
+ \catcode \commentasciicode \commentcatcode
+ \catcode `\@ \lettercatcode
+ \catcode `\! \lettercatcode
+ \catcode `\? \lettercatcode
+ \catcode \tildeasciicode \activecatcode
+ \catcode \barasciicode \activecatcode
+\stopcatcodetable
+\stoptyping
+
+This table is currently used when defining core macros and modules. A rather
+special case is the circumflex. It still has a superscript related catcode, and
+this is only because the circumflex has an additional special meaning
+
+Instead of the symbolic names in the previous blob of code we could have
+indicated characters numbers as follows:
+
+\starttyping
+\catcode `\^^I \spacecatcode
+\stoptyping
+
+However, if at some point we decide to treat the circumflex similar as the
+underscore, i.e.\ give it a letter catcode, then we should not use this double
+circumflex method. In fact, the code base does not do that any longer, so we can
+decide on that any moment. If for some reason the double circumflex method is
+needed, for instance when defining macros like \type {\obeylines}, one can do
+this:
+
+\starttyping
+\bgroup
+ \permitcircumflexescape
+ \catcode \endoflineasciicode \activecatcode
+ \gdef\obeylines%
+ {\catcode\endoflineasciicode\activecatcode%
+ \def^^M{\par}}
+\egroup
+\stoptyping
+
+However, in the case of a newline one can also do this:
+
+\starttyping
+\bgroup
+ \catcode \endoflineasciicode \activecatcode
+ \gdef\obeylines%
+ {\catcode\endoflineasciicode\activecatcode%
+ \def
+ {\par}}
+\egroup
+\stoptyping
+
+Or just:
+
+\starttyping
+\def\obeylines{\defineactivecharacter 13 {\par}}
+\stoptyping
+
+In \CONTEXT\ we have the following variant, which is faster
+than the previous one.
+
+\starttyping
+\def\obeylines
+ {\catcode\endoflineasciicode\activecatcode
+ \expandafter\def\activeendoflinecode{\obeyedline}}
+\stoptyping
+
+So there are not circumflexes used at all. Also, we only need to change the
+meaning of \type {\obeyedline} to give this macro another effect.
+
+All this means that we are upgrading catcode tables, we also consider making
+\type {\nonknuthmode} the default, i.e.\ move the initialization to the catcode
+vectors. Interesting is that we could have done that long ago, as the mentioned
+\type {"8000} trickery has proven to be quite robust. In fact, in math mode we're
+still pretty much in knuth mode anyway.
+
+There is one pitfall. Take this:
+
+\starttyping
+\def\test{$\something_2$} % \something_
+\def\test{$\something_x$} % \something_x
+\stoptyping
+
+When we are in unprotected mode, the underscore is part of the macro name, and
+will not trigger a subscript. The solution is simple:
+
+\starttyping
+\def\test{$\something _2$}
+\def\test{$\something _x$}
+\stoptyping
+
+In the rather large \CONTEXT\ code base there were only a few spots where we had
+to add a space. When moving on to \MKIV\ we have the freedom to introduce such
+changes, although we don't want to break compatibility too much and only for the
+good. We expect this all to settle down in 2011. No matter what we decide upon,
+some characters will always have a special meaning. So in fact we always stay in
+some sort of donknuthmode, which is what \TEX\ is all about.
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
+
+% ligatures
diff --git a/doc/context/sources/general/manuals/hybrid/hybrid-codebase.tex b/doc/context/sources/general/manuals/hybrid/hybrid-codebase.tex
new file mode 100644
index 000000000..cfbc82a97
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/hybrid-codebase.tex
@@ -0,0 +1,1290 @@
+% language=uk
+
+\startcomponent hybrid-lexing
+
+\environment hybrid-environment
+
+\startchapter[title={Updating the code base}]
+
+\startsection [title={Introduction}]
+
+After much experimenting with new code in \MKIV\ a new stage in \CONTEXT\
+development was entered in the last quarter of 2011. This was triggered by
+several more or less independent developments. I will discuss some of them here
+since they are a nice illustration of how \CONTEXT\ evolves. This chapter was
+published in TugBoat 103; thanks to Karl Berry and Barbara Beeton for making it
+better.
+
+\stopsection
+
+\startsection [title={Interfacing}]
+
+Wolfgang Schuster, Aditya Mahajan and I were experimenting with an abstraction
+layer for module writers. In fact this layer itself was a variant of some new
+mechanisms used in the \MKIV\ structure related code. That code was among the
+first to be adapted as it is accompanied by much \LUA\ code and has been
+performing rather well for some years now.
+
+In \CONTEXT\ most of the user interface is rather similar and module writers are
+supposed to follow the same route as the core of \CONTEXT. For those who have
+looked in the source the following code might look familiar:
+
+\starttyping
+\unexpanded\def\mysetupcommand
+ {\dosingleempty\domysetupcommand}
+
+\def\domysetupcommand[#1]%
+ {..........
+ \getparameters[\??my][#1]%
+ ..........
+ ..........}
+\stoptyping
+
+This implements the command \type {\mysetupcommand} that is used as
+follows:
+
+\starttyping
+\mysetupcommand[color=red,style=bold,...]
+\stoptyping
+
+The above definition uses three rather low|-|level interfacing commands. The
+\type {\unexpanded} makes sure that the command does not expand in unexpected
+ways in cases where expansion is less desirable. (Aside: The \CONTEXT\ \type
+{\unexpanded} prefix has a long history and originally resulted in the indirect
+definition of a macro. That way the macro could be part of testing (expanded)
+equivalence. When \ETEX\ functionality showed up we could use \type {\protected}
+but we stuck to the name \type {\unexpanded}. So, currently \CONTEXT's \type
+{\unexpanded} is equivalent to \ETEX's \type {\protected}. Furthermore, in
+\CONTEXT\ \type {\expanded} is not the same as the \ETEX\ primitive. In order to
+use the primitives you need to use their \type {\normal...} synonyms.) The \type
+{\dosingleempty} makes sure that one argument gets seen by injecting a dummy when
+needed. At some point the \type {\getparameters} command will store the values of
+keys in a namespace that is determined by \type {\??my}. The namespace used here
+is actually one of the internal namespaces which can be deduced from the double
+question marks. Module namespaces have four question marks.
+
+There is some magic involved in storing the values. For instance, keys are
+translated from the interface language into the internal language which happens
+to be English. This translation is needed because a new command is generated:
+
+\starttyping
+\def\@@mycolor{red}
+\def\@@mystyle{bold}
+\stoptyping
+
+and such a command can be used internally because in so|-|called unprotected mode
+\type {@?!} are valid in names. The Dutch equivalent is:
+
+\starttyping
+\mijnsetupcommando[kleur=rood,letter=vet]
+\stoptyping
+
+and here the \type {kleur} has to be converted into \type {color} before the
+macro is constructed. Of course values themselves can stay as they are as long as
+checking them uses the internal symbolic names that have the language specific
+meaning.
+
+\starttyping
+\c!style{color}
+\k!style{kleur}
+\v!bold {vet}
+\stoptyping
+
+Internally assignments are done with the \type {\c!} variant, translation of the
+key is done using the \type {\k!} alternative and values are prefixed by \type
+{\v!}.
+
+It will be clear that for the English user interface no translation is needed and
+as a result that interface is somewhat faster. There we only need
+
+\starttyping
+\c!style{color}
+\v!bold {bold}
+\stoptyping
+
+Users never see these prefixed versions, unless they want to define an
+internationalized style, in which case the form
+
+\starttyping
+\mysetupcommand[\c!style=\v!bold]
+\stoptyping
+
+has to be used, as it will adapt itself to the user interface. This leaves the
+\type {\??my} that in fact expands to \type {\@@my}. This is the namespace prefix.
+
+Is this the whole story? Of course it isn't, as in \CONTEXT\ we often have a
+generic instance from which we can clone specific alternatives; in practice, the
+\type {\@@mycolor} variant is used in a few cases only. In that case a setup
+command can look like:
+
+\starttyping
+\mysetupcommand[myinstance][style=bold]
+\stoptyping
+
+And access to the parameters is done with:
+
+\starttyping
+\getvalue{\??my myinstance\c!color}
+\stoptyping
+
+So far the description holds for \MKII\ as well as \MKIV, but in \MKIV\ we are
+moving to a variant of this. At the cost of a bit more runtime and helper macros,
+we can get cleaner low|-|level code. The magic word here is \type
+{commandhandler}. At some point the new \MKIV\ code started using an extra
+abstraction layer, but the code needed looked rather repetitive despite subtle
+differences. Then Wolfgang suggested that we should wrap part of that
+functionality in a definition macro that could be used to define module setup and
+definition code in one go, thereby providing a level of abstraction that hides
+some nasty details. The main reason why code could look cleaner is that the
+experimental core code provided a nicer inheritance model for derived instances
+and Wolfgang's letter module uses that extensively. After doing some performance
+tests with the code we decided that indeed such an initializer made sense. Of
+course, after that we played with it, some more tricks were added, and eventually
+I decided to replace the similar code in the core as well, that is: use the
+installer instead of defining helpers locally.
+
+So, how does one install a new setup mechanism? We stick to the core code and
+leave modules aside for the moment.
+
+\starttyping
+\definesystemvariable{my}
+
+\installcommandhandler \??my {whatever} \??my
+\stoptyping
+
+After this command we have available some new helper commands of which only a few
+are mentioned here (after all, this mechanism is still somewhat experimental):
+
+\starttyping
+\setupwhatever[key=value]
+\setupwhatever[instance][key=value]
+\stoptyping
+
+Now a value is fetched using a helper:
+
+\starttyping
+\namedwhateverparameter{instance}{key}
+\stoptyping
+
+However, more interesting is this one:
+
+\starttyping
+\whateverparameter{key}
+\stoptyping
+
+For this to work, we need to set the instance:
+
+\starttyping
+\def\currentwhatever{instance}
+\stoptyping
+
+Such a current state macro already was used in many places, so it fits into the
+existing code quite well. In addition to \type {\setupwhatever} and friends,
+another command becomes available:
+
+\starttyping
+\definewhatever[instance]
+\definewhatever[instance][key=value]
+\stoptyping
+
+Again, this is not so much a revolution as we can define such a command easily
+with helpers, but it pairs nicely with the setup command. One of the goodies is
+that it provides the following feature for free:
+
+\starttyping
+\definewhatever[instance][otherinstance]
+\definewhatever[instance][otherinstance][key=value]
+\stoptyping
+
+In some cases this creates more overhead than needed because not all commands
+have instances. On the other hand, some commands that didn't have instances yet,
+now suddenly have them. For cases where this is not needed, we provide simple
+variants of commandhandlers.
+
+Additional commands can be hooked into a setup or definition so that for instance
+the current situation can be updated or extra commands can be defined for this
+instance, such as \type {\start...} and \type {\stop...} commands.
+
+It should be stressed that the installer itself is not that special in the sense
+that we could do without it, but it saves some coding. More important is that we
+no longer have the \type {@@} prefixed containers but use \type
+{\whateverparameter} commands instead. This is definitely slower than the direct
+macro, but as we often deal with instances, it's not that much slower than \type
+{\getvalue} and critical components are rather well speed|-|optimized anyway.
+
+There is, however, a slowdown due to the way inheritance is implemented. That is
+how this started out: using a different (but mostly compatible) inheritance
+model. In the \MKII\ approach (which is okay in itself) inheritance happens by
+letting values point to the parent value. In the new model we have a more dynamic
+chain. It saves us macros but can expand quite wildly depending on the depth of
+inheritance. For instance, in sectioning there can easily be five or more levels
+of inheritance. So, there we get slower processing. The same is true for \type
+{\framed} which is a rather critical command, but there it is nicely compensated
+by less copying. My personal impression is that due to the way \CONTEXT\ is set
+up, the new mechanism is actually more efficient on an average job. Also, because
+many constructs also depend on the \type {\framed} command, that one can easily
+be part of the chain, which again speeds up a bit. In any case, the new
+mechanisms use much less hash space.
+
+Some mechanisms still look too complex, especially when they hook into others.
+Multiple inheritance is not trivial to deal with, not only because the meaning of
+keys can clash, but also because supporting it would demand quite complex fully
+expandable resolvers. So for the moment we stay away from it. In case you wonder
+why we cannot delegate more to \LUA: it's close to impossible to deal with \TEX's
+grouping in efficient ways at the \LUA\ end, and without grouping available \TEX\
+becomes less useful.
+
+Back to the namespace. We already had a special one for modules but after many
+years of \CONTEXT\ development, we started to run out of two character
+combinations and many of them had no relation to what name they spaced. As the
+code base is being overhauled anyway, it makes sense to also provide a new core
+namespace mechanism. Again, this is nothing revolutionary but it reads much more
+nicely.
+
+\starttyping
+\installcorenamespace {whatever}
+
+\installcommandhandler \??whatever {whatever} \??whatever
+\stoptyping
+
+This time deep down no \type {@@} is used, but rather something more obscure. In
+any case, no one will use the meaning of the namespace variables, as all access
+to parameters happens indirectly. And of course there is no speed penalty
+involved; in fact, we are more efficient. One reason is that we often used the
+prefix as follows:
+
+\starttyping
+\setvalue{\??my:option:bla}{foo}
+\stoptyping
+
+and now we just say:
+
+\starttyping
+\installcorenamespace {whateveroption}
+
+\setvalue{\??whateveroption bla}{foo}
+\stoptyping
+
+The commandhandler does such assignments slightly differently as it has to prevent
+clashes between instances and keywords. A nice example of such a clash is this:
+
+\starttyping
+\setvalue{\??whateveroption sectionnumber}{yes}
+\stoptyping
+
+In sectioning we have instances named \type {section}, but we also have keys
+named \type {number} and \type {sectionnumber}. So, we end up with
+something like this:
+
+\starttyping
+\setvalue{\??whateveroption section:sectionnumber}{yes}
+\setvalue{\??whateveroption section:number}{yes}
+\setvalue{\??whateveroption :number}{yes}
+\stoptyping
+
+When I decided to replace code similar to that generated by the installer a new
+rewrite stage was entered. Therefore one reason for explaining this here is that
+in the process of adapting the core code instabilities are introduced and as most
+users use the beta version of \MKIV, some tolerance and flexibility is needed and
+it might help to know why something suddenly fails.
+
+In itself using the commandhandler is not that problematic, but wherever I decide
+to use it, I also clean up the related code and that is where the typos creep in.
+Fortunately Wolfgang keeps an eye on the changes so problems that users report on
+the mailing lists are nailed down relatively fast. Anyway, the rewrite itself is
+triggered by another event but that one is discussed in the next section.
+
+We don't backport (low|-|level) improvements and speedups to \MKII, because for
+what we need \TEX\ for, we consider \PDFTEX\ and \XETEX\ rather obsolete. Recent
+tests show that at the moment of this writing a \LUATEX\ \MKIV\ run is often
+faster than a comparable \PDFTEX\ \MKII\ run (using \UTF-8 and complex font
+setups). When compared to a \XETEX\ \MKII\ run, a \LUATEX\ \MKIV\ run is often
+faster, but it's hard to compare, as we have advanced functionality in \MKIV\
+that is not (or differently) available in \MKII.
+
+\stopsection
+
+\startsection [title={Lexing}]
+
+The editor that I use, called \SCITE, has recently been extended with an extra
+external lexer module that makes more advanced syntax highlighting possible,
+using the \LUA\ \LPEG\ library. It is no secret that the user interface of
+\CONTEXT\ is also determined by the way structure, definitions and setups can be
+highlighted in an editor. \footnote {It all started with \type {wdt}, \type
+{texedit} and \type {texwork}, editors and environments written by myself in
+\MODULA2 and later in \PERL\ Tk, but that was in a previous century.} When I
+changed to \SCITE\ I made sure that we had proper highlighting there.
+
+At \PRAGMA\ one of the leading principles has always been: if the document source
+looks bad, mistakes are more easily made and the rendering will also be affected.
+Or phrased differently: if we cannot make the source look nice, the content is
+probably not structured that well either. The same is true for \TEX\ source,
+although to a large extent there one must deal with the specific properties of
+the language.
+
+So, syntax highlighting, or more impressively: lexing, has always been part of
+the development of \CONTEXT\ and for instance the pretty printers of verbatim
+provide similar features. For a long time we assumed line|-|based lexing, mostly
+for reasons of speed. And surprisingly, that works out quite well with \TEX. We
+used a simple color scheme suitable for everyday usage, with not too intrusive
+coloring. Of course we made sure that we had runtime spell checking integrated,
+and that the different user interfaces were served well.
+
+But then came the \LPEG\ lexer. Suddenly we could do much more advanced
+highlighting. Once I started playing with it, a new color scheme was set up and
+more sophisticated lexing was applied. Just to mention a few properties:
+
+\startitemize[packed]
+\startitem
+ We distinguish between several classes of macro names: primitives, helpers,
+ interfacing, and user macros.
+\stopitem
+\startitem
+ In addition we highlight constant values and special registers differently.
+\stopitem
+\startitem
+ Conditional constructs can be recognized and are treated as in any
+ regular language (keep in mind that users can define their own).
+\stopitem
+\startitem
+ Embedded \METAPOST\ code is lexed independently using a lexer that knows the
+ language's primitives, helpers, user macros, constants and of course specific
+ syntax and drawing operators. Related commands at the \TEX\ end (for defining
+ and processing graphics) are also dealt with.
+\stopitem
+\startitem
+ Embedded \LUA\ is lexed independently using a lexer that not only deals with the
+ language but also knows a bit about how it is used in \CONTEXT. Of course the
+ macros that trigger \LUA\ code are handled.
+\stopitem
+\startitem
+ Metastructure and metadata related macros are colored in a fashion similar to
+ constants (after all, in a document one will not see any constants, so there is
+ no color clash).
+\stopitem
+\startitem
+ Some special and often invisible characters get a special background color so
+ that we can see when there are for instance non|-|breakable spaces
+ sitting there.
+\stopitem
+\startitem
+ Real|-|time spell checking is part of the deal and can optionally be turned on.
+ There we distinguish between unknown words, known but potentially misspelled
+ words, and known words.
+\stopitem
+\stopitemize
+
+Of course we also made lexers for \METAPOST, \LUA, \XML, \PDF\ and text documents
+so that we have a consistent look and feel.
+
+When writing the new lexer code, and testing it on sources, I automatically
+started adapting the source to the new lexing where possible. Actually, as
+cleaning up code is somewhat boring, the new lexer is adding some fun to it. I'm
+not so sure if I would have started a similar overhaul so easily otherwise,
+especially because the rewrite now also includes speedup and cleanup. At least it
+helps to recognize less desirable left|-|overs of \MKII\ code.
+
+\stopsection
+
+\startsection [title={Hiding}]
+
+It is interesting to notice that users seldom define commands that clash with low
+level commands. This is of course a side effect of the fact that one seldom needs
+to define a command, but nevertheless. Low|-|level commands were protected by
+prefixing them by one or more (combinations of) \type {do}, \type {re} and \type
+{no}'s. This habit is a direct effect of the early days of writing macros. For
+\TEX\ it does not matter how long a name is, as internally it becomes a pointer
+anyway, but memory consumption of editors, loading time of a format, string space
+and similar factors determined the way one codes in \TEX\ for quite a while.
+Nowadays there are hardly any limits and the stress that \CONTEXT\ puts on the
+\TEX\ engine is even less than in \MKII\ as we delegate many tasks to \LUA.
+Memory comes cheap, editors can deal with large amount of data (keep in mind that
+the larger the file gets, the more lexing power can be needed), and screens are
+wide enough not to lose part of long names in the edges.
+
+Another development has been that in \LUATEX\ we have lots of registers so that
+we no longer have to share temporary variables and such. The rewrite is a good
+moment to get rid of that restriction.
+
+This all means that at some point it was decided to start using longer command
+names internally and permit \type {_} in names. As I was never a fan of using
+\type {@} for this, underscore made sense. We have been discussing the use of
+colons, which is also nice, but has the disadvantage that colons are also used in
+the source, for instance to create a sub|-|namespace. When we have replaced all
+old namespaces, colons might show up in command names, so another renaming
+roundup can happen.
+
+One reason for mentioning this is that users get to see these names as part of
+error messages. An example of a name is:
+
+\starttyping
+\page_layouts_this_or_that
+\stoptyping
+
+The first part of the name is the category of macros and in most cases is the
+same as the first part of the filename. The second part is a namespace. The rest
+of the name can differ but we're approaching some consistency in this.
+
+In addition we have prefixed names, where prefixes are used as consistently as
+possible:
+
+\starttabulate[|l|l|]
+\NC \type {t_} \NC token register \NC \NR
+\NC \type {d_} \NC dimension register \NC \NR
+\NC \type {s_} \NC skip register \NC \NR
+\NC \type {u_} \NC muskip register \NC \NR
+\NC \type {c_} \NC counter register, constant or conditional \NC \NR
+\NC \type {m_} \NC (temporary) macro \NC \NR
+\NC \type {p_} \NC (temporary) parameter expansion (value of key)\NC \NR
+\NC \type {f_} \NC fractions \NC \NR
+\stoptabulate
+
+This is not that different from other prefixing in \CONTEXT\ apart from the fact
+that from now on those variables (registers) are no longer accessible in a
+regular run. We might decide on another scheme but renaming can easily be
+scripted. In the process some of the old prefixes are being removed. The main
+reason for changing to this naming scheme is that it is more convenient to grep
+for them.
+
+In the process most traditional \type {\if}s get replaced by \quote
+{conditionals}. The same is true for \type {\chardef}s that store states;
+these become \quote {constants}.
+
+\stopsection
+
+\startsection[title=Status]
+
+We always try to keep the user interface constant, so most functionality and
+control stays stable. However, now that most users use \MKIV, commands that no
+longer make sense are removed. An interesting observation is that some users
+report that low|-|level macros or registers are no longer accessible. Fortunately
+that is no big deal as we point them to the official ways to deal with matters.
+It is also a good opportunity for users to clean up accumulated hackery.
+
+The systematic (file by file) cleanup started in the second half of 2011 and as
+of January 2012 one third of the core (\TEX) modules have to be cleaned up and
+the planning is to get most of that done as soon as possible. However, some
+modules will be rewritten (or replaced) and that takes more time. In any case we
+hope that rather soon most of the code is stable enough that we can start working
+on new mechanisms and features. Before that a cleanup of the \LUA\ code is
+planned.
+
+Although in many cases there are no fundamental changes in the user interface and
+functionality, I will wrap up some issues that are currently being dealt with.
+This is just a snapshot of what is happening currently and as a consequence it
+describes what users can run into due to newly introduced bugs.
+
+The core modules of \CONTEXT\ are loosely organized in groups. Over time there
+has been some reorganization and in \MKIV\ some code has been moved into new
+categories. The alphabetical order does not reflect the loading order or
+dependency tree as categories are loaded intermixed. Therefore the order below is
+somewhat arbitrary and does not express importance. Each category has multiple
+files.
+
+\startsubsubject[title={anch: anchoring and positioning}]
+
+More than a decade ago we started experimenting with position tracking. The
+ability to store positional information and use that in a second pass permits for
+instance adding backgrounds. As this code interacts nicely with (runtime)
+\METAPOST\ it has always been quite powerful and flexible on the one hand, but at
+the same time it was demanding in terms of runtime and resources. However, were
+it not for this feature, we would probably not be using \TEX\ at all, as
+backgrounds and special relative positioning are needed in nearly all our
+projects.
+
+In \MKIV\ this mechanism had already been ported to a hybrid form, but recently
+much of the code has been overhauled and its \MKII\ artifacts stripped. As a
+consequence the overhead in terms of memory probably has increased but the impact
+on runtime has been considerably reduced. It will probably take some time to
+become stable if only because the glue to \METAPOST\ has changed. There are some
+new goodies, like backgrounds behind parshapes, something that probably no one
+uses and is always somewhat tricky but it was not too hard to support. Also,
+local background support has been improved which means that it's easier to get
+them in more column-based layouts, several table mechanisms, floats and such.
+This was always possible but is now more automatic and hopefully more intuitive.
+
+\stopsubsubject
+
+\startsubsubject[title={attr: attributes}]
+
+We use attributes (properties of nodes) a lot. The framework for this had been
+laid early in \MKIV\ development, so not much has changed here. Of course the
+code gets cleaner and hopefully better as it is putting quite a load on the
+processing. Each new feature depending on attributes adds some extra overhead
+even if we make sure that mechanisms only kick in when they are used. This is due
+to the fact that attributes are linked lists and although unique lists are
+shared, they travel with each node. On the other hand, the cleanup (and
+de|-|\MKII|-|ing) of code leads to better performance so on the average no user
+will notice this.
+
+\stopsubsubject
+
+\startsubsubject[title={back: backend code generation}]
+
+This category wraps backend issues in an abstract way that is similar to the
+special drivers in \MKII. So far we have only three backends: \PDF, \XML, and
+\XHTML. Such code is always in a state of maintenance, if only because backends
+evolve.
+
+\stopsubsubject
+
+\startsubsubject[title={bibl: bibliographies}]
+
+For a while now, bibliographies have not been an add|-|on but part of the core.
+There are two variants: traditional \BIBTEX\ support derived from a module by
+Taco Hoekwater but using \MKIV\ features (the module hooks into core code), and a
+variant that delegates most work to \LUA\ by creating an in-memory \XML\ tree
+that gets manipulated. At some point I will extend the second variant. Going the
+\XML\ route also connects better with developments such as Jean|-|Michel
+Hufflen's Ml\BIBTEX.
+
+\stopsubsubject
+
+\startsubsubject[title={blob: typesetting in \LUA}]
+
+Currently we only ship a few helpers but eventually this will become a framework
+for typesetting raw text in \LUA. This might be handy for some projects that we
+have where the only input is \XML, but I'm not that sure if it will produce nice
+results and if the code will look better. On the other hand, there are some cases
+where in a regular \TEX\ run some basic typesetting in \LUA\ might make sense. Of
+course I also need an occasional pet project so this might qualify as one.
+
+\stopsubsubject
+
+\startsubsubject[title={buff: buffers and verbatim}]
+
+Traditionally buffers and verbatim have always been relatives as they share code.
+The code was among the first to be adapted to \LUATEX. There is not that much to
+gain in adapting it further. Maybe I will provide more lexers for
+pretty|-|printing some day.
+
+\stopsubsubject
+
+\startsubsubject[title={catc: catcodes}]
+
+Catcodes are a rather \TEX|-|specific feature and we have organized them in
+catcode regimes. The most important recent change has been that some of the
+characters with a special meaning in \TEX\ (like ampersand, underscore,
+superscript, etc.) are no longer special except in cases that matter. This
+somewhat incompatible change surprisingly didn't lead to many problems. Some code
+that is specific for the \MKII\ \XML\ processor has been removed as we no longer
+assume it is in \MKIV.
+
+\stopsubsubject
+
+\startsubsubject[title={char: characters}]
+
+This important category deals with characters and their properties. Already from
+the beginning of \MKIV\ character properties have been (re)organized in \LUA\
+tables and therefore much code deals with it. The code is rather stable but
+occasionally the tables are updated as they depend on developments in \UNICODE.
+In order to share as much data as possible and prevent duplicates there are
+several inheritance mechanisms in place but their overhead is negligible.
+
+\stopsubsubject
+
+\startsubsubject[title={chem: chemistry}]
+
+The external module that deals with typesetting chemistry was transformed
+into a \MKIV\ core module some time ago. Not much has changed in this department
+but some enhancements are pending.
+
+\stopsubsubject
+
+\startsubsubject[title={cldf: \CONTEXT\ \LUA\ documents}]
+
+These modules are mostly \LUA\ code and are the interface into \CONTEXT\ as well
+as providing ways to code complete documents in \LUA. This is one of those
+categories that is visited every now and then to be adapted to improvements in
+other core code or in \LUATEX. This is one of my favourite categories as it
+exposes most of \CONTEXT\ at the \LUA\ end which permits writing solutions in
+\LUA\ while still using the full power of \CONTEXT. A dedicated manual is on its
+way.
+
+\stopsubsubject
+
+\startsubsubject[title={colo: colors and transparencies}]
+
+This is rather old code, and apart from some cleanup not much has been changed
+here. Some macros that were seldom used have been removed. One issue that is
+still pending is a better interface to \METAPOST\ as it has different color
+models and we have adapted code at that end. This has a rather low priority
+because in practice it is no real problem.
+
+\stopsubsubject
+
+\startsubsubject[title={cont: runtime code}]
+
+These modules contain code that is loaded at runtime, such as filename remapping,
+patches, etc. It does not make much sense to improve these.
+
+\stopsubsubject
+
+\startsubsubject[title={core: all kinds of core code}]
+
+Housekeeping is the main target of these modules. There are still some
+typesetting|-|related components here but these will move to other categories.
+This code is cleaned up when there is a need for it. Think of managing files,
+document project structure, module loading, environments, multipass data, etc.
+
+\stopsubsubject
+
+\startsubsubject[title={data: file and data management}]
+
+This category hosts only \LUA\ code and hasn't been touched for a while. Here we
+deal with locating files, caching, accessing remote data, resources,
+environments, and the like.
+
+\stopsubsubject
+
+\startsubsubject[title={enco: encodings}]
+
+Because (font) encodings are gone, there is only one file in this category and
+that one deals with weird (composed or otherwise special) symbols. It also
+provides a few traditional \TEX\ macros that users expect to be present, for
+instance to put accents over characters.
+
+\stopsubsubject
+
+\startsubsubject[title={file: files}]
+
+There is some overlap between this category and core modules. Loading files is
+always somewhat special in \TEX\ as there is the \TEX\ directory structure to
+deal with. Sometimes you want to use files in the so|-|called tree, but other
+times you don't. This category provides some management code for (selective)
+loading of document files, modules and resources. Most of the code works with
+accompanying \LUA\ code and has not been touched for years, apart from some
+weeding and low|-|level renaming. The project structure code has mostly been
+moved to \LUA\ and this mechanism is now more restrictive in the sense that one
+cannot misuse products and components in unpredictable ways. This change permits
+better automatic loading of cross references in related documents.
+
+\stopsubsubject
+
+\startsubsubject[title={font: fonts}]
+
+Without proper font support a macro package is rather useless. Of course we do
+support the popular font formats but nowadays that's mostly delegated to \LUA\
+code. What remains at the \TEX\ end is code that loads and triggers a combination
+of fonts efficiently. Of course in the process text and math each need to get the
+proper amount of attention.
+
+There is no longer shared code between \MKII\ and \MKIV. Both already had rather
+different low|-|level solutions, but recently with \MKIV\ we went a step further.
+Of course it made sense to kick out commands that were only used for \PDFTEX\
+\TYPEONE\ and \XETEX\ \OPENTYPE\ support but more important was the decision to
+change the way design sizes are supported.
+
+In \CONTEXT\ we have basic font definition and loading code and that hasn't
+conceptually changed much over the years. In addition to that we have so-called
+bodyfont environments and these have been made a bit more powerful in recent
+\MKIV. Then there are typefaces, which are abstract combinations of fonts and
+defining them happens in typescripts. This layered approach is rather flexible,
+and was greatly needed when we had all those font encodings (to be used in all
+kinds of combinations within one document). In \MKIV, however, we already had
+fewer typescripts as font encodings are gone (also for \TYPEONE\ fonts). However,
+there remained a rather large blob of definition code dealing with Latin Modern;
+large because it comes in design sizes.
+
+As we always fall back on Latin Modern, and because we don't preload fonts, there
+is some overhead involved in resolving design size related issues and
+definitions. But, it happens that this is the only font that ships with many
+files related to different design sizes. In practice no user will change the
+defaults. So, although the regular font mechanism still provides flexible ways to
+define font file combinations per bodyfont size, resolving to the right best
+matching size now happens automatically via a so|-|called \LUA\ font goodie file
+which brings down the number of definitions considerably. The consequence is that
+\CONTEXT\ starts up faster, not only in the case of Latin Modern being used, but
+also when other designs are in play. The main reason for this is that we don't
+have to parse those large typescripts anymore, as the presets were always part of
+the core set of typescripts. At the same time loading a specific predefined set
+has been automated and optimized. Of course on a run of 30 seconds this is not
+that noticeable, but it is on a 5 second run or when testing something in the
+editor that takes less than a second. It also makes a difference in automated
+workflows; for instance at \PRAGMA\ we run unattended typesetting flows that need
+to run as fast as possible. Also, in virtual machines using network shares, the
+fewer files consulted the better.
+
+Because math support was already based on \OPENTYPE, where \CONTEXT\ turns
+\TYPEONE\ fonts into \OPENTYPE\ at runtime, nothing fundamental has changed here,
+apart from some speedups (at the cost of some extra memory). Where the overhead
+of math font switching in \MKII\ is definitely a factor, in \MKIV\ it is close to
+negligible, even if we mix regular, bold, and bidirectional math, which we have
+done for a while.
+
+The low|-|level code has been simplified a bit further by making a better
+distinction between the larger sizes (\type {a} up to \type {d}) and smaller
+sizes (\type {x} and \type {xx}). These now operate independently of each other
+(i.e.\ one can now have a smaller relative \type {x} size of a larger one). This
+goes at the cost of more resources but it is worth the effort.
+
+By splitting up the large basic font module into smaller ones, I hope that it can
+be maintained more easily although someone familiar with the older code will only
+recognize bits and pieces. This is partly due to the fact that font code is
+highly optimized.
+
+\stopsubsubject
+
+\startsubsubject[title={grph: graphic (and widget) inclusion}]
+
+Graphics inclusion is always work in progress as new formats have to be dealt
+with or users want additional conversions to be done. This code will be cleaned
+up later this year. The plug|-|in mechanisms will be extended (examples of
+existing plug|-|ins are automatic converters and barcode generation).
+
+\stopsubsubject
+
+\startsubsubject[title={hand: special font handling}]
+
+As we treat protrusion and hz as features of a font, there is not much left in
+this category apart from some fine|-|tuning. So, not much has happened here and
+eventually the left|-|overs in this category might be merged with the font
+modules.
+
+\stopsubsubject
+
+\startsubsubject[title={java: \JAVASCRIPT\ in \PDF}]
+
+This code already has been cleaned up a while ago, when moving to \MKIV, but we
+occasionally need to check and patch due to issues with \JAVASCRIPT\ engines in
+viewers.
+
+\stopsubsubject
+
+\startsubsubject[title={lang: languages and labels}]
+
+There is not much changed in this department, apart from additional labels. The
+way inheritance works in languages differs too much from other inheritance code
+so we keep what we have here. Label definitions have been moved to \LUA\ tables
+from which labels at the \TEX\ end are defined that can then be overloaded
+locally. Of course the basic interface has not changed as this is typically code
+that users will use in styles.
+
+\stopsubsubject
+
+\startsubsubject[title={luat: housekeeping}]
+
+This is mostly \LUA\ code needed to get the basic components and libraries in
+place. While the \type {data} category implements the connection to the outside
+world, this category runs on top of that and feeds the \TEX\ machinery. For
+instance conversion of \MKVI\ files happens here. These files are seldom touched
+but might need an update some time (read: prune obsolete code).
+
+\stopsubsubject
+
+\startsubsubject[title={lpdf: \PDF\ backend}]
+
+Here we implement all kinds of \PDF\ backend features. Most are abstracted via
+the backend interface. So, for instance, colors are done with a high level
+command that goes via the backend interface to the \type {lpdf} code. In fact,
+there is more such code than in (for instance) the \MKII\ special drivers, but
+readability comes at a price. This category is always work in progress as
+insights evolve and users demand more.
+
+\stopsubsubject
+
+\startsubsubject[title={lxml: \XML\ and lpath}]
+
+As this category is used by some power users we cannot change too much here,
+apart from speedups and extensions. It's also the bit of code we use frequently
+at \PRAGMA, and as we often have to deal with rather crappy \XML\ I expect to
+move some more helpers into the code. The latest greatest trickery related to
+proper typesetting can be seen in the documents made by Thomas Schmitz. I wonder
+if I'd still have fun doing our projects if I hadn't, in an early stage of \MKIV,
+written the \XML\ parser and expression parser used for filtering.
+
+\stopsubsubject
+
+\startsubsubject[title={math: mathematics}]
+
+Math deserves its own category but compared to \MKII\ there is much less code,
+thanks to \UNICODE. Since we support \TYPEONE\ as virtual \OPENTYPE\ nothing
+special is needed there (and eventually there will be proper fonts anyway). When
+rewriting code I try to stay away from hacks, which is sometimes possible by
+using \LUA\ but it comes with a slight speed penalty. Much of the \UNICODE\
+math|-|related font code is already rather old but occasionally we add new
+features. For instance, because \OPENTYPE\ has no italic correction we provide an
+alternative (mostly automated) solution.
+
+On the agenda is more structural math encoding (maybe like openmath) but tagging
+is already part of the code so we get a reasonable export. Not that someone is
+waiting for it, but it's there for those who want it. Most math|-|related
+character properties are part of the character database which gets extended on
+demand. Of course we keep \MATHML\ up|-|to|-|date because we need it in a few
+projects.
+
+We're not in a hurry here but this is something where Aditya and I have to redo
+some of the code that provides \AMS|-|like math commands (but as we have them
+configurable some work is needed to keep compatibility). In the process it's
+interesting to run into probably never|-|used code, so we just remove those
+artifacts.
+
+\stopsubsubject
+
+\startsubsubject[title={meta: metapost interfacing}]
+
+This and the next category deal with \METAPOST. This first category is quite old
+but already adapted to the new situation. Sometimes we add extra functionality
+but the last few years the situation has become rather stable with the exception
+of backgrounds, because these have been overhauled completely.
+
+\stopsubsubject
+
+\startsubsubject[title={mlib: metapost library}]
+
+Apart from some obscure macros that provide the interface between front- and
+backend this is mostly \LUA\ code that controls the embedded \METAPOST\ library.
+So, here we deal with extensions (color, shading, images, text, etc.) as well as
+runtime management because sometimes two runs are needed to get a graphic right.
+Some time ago, the \MKII|-|like extension interface was dropped in favor of one
+more natural to the library and \METAPOST~2. As this code is used on a daily
+basis it is quite well debugged and the performance is pretty good too.
+
+\stopsubsubject
+
+\startsubsubject[title={mult: multi|-|lingual user interface}]
+
+Even if most users use the English user interface, we keep the other ones around
+as they're part of the trademark. Commands, keys, constants, messages and the
+like are now managed with \LUA\ tables. Also, some of the tricky remapping code
+has been stripped because the setup definitions files are dealt with. These are
+\XML\ files that describe the user interface that get typeset and shipped with
+\CONTEXT.
+
+These files are being adapted. First of all the commandhandler code is defined
+here. As we use a new namespace model now, most of these namespaces are defined
+in the files where they are used. This is possible because they are more verbose
+so conflicts are less likely (also, some checking is done to prevent reuse).
+Originally the namespace prefixes were defined in this category but eventually
+all that code will be gone. This is a typical example where 15|-|year|-|old
+constraints are no longer an issue and better code can be used.
+
+\stopsubsubject
+
+\startsubsubject[title={node: nodes}]
+
+This is a somewhat strange category as all typeset material in \TEX\ becomes
+nodes so this deals with everything. One reason for this category is that new
+functionality often starts here and is sometimes shared between several
+mechanisms. So, for the moment we keep this category. Think of special kerning,
+insert management, low|-|level referencing (layer between user code and backend
+code) and all kinds of rule and displacement features. Some of this functionality
+is described in previously published documents.
+
+\stopsubsubject
+
+\startsubsubject[title={norm: normalize primitives}]
+
+We used to initialize the primitives here (because \LUATEX\ starts out blank).
+But after moving that code this category only has one definition left and that
+one will go too. In \MKII\ these files are still used (and actually generated by
+\MKIV).
+
+\stopsubsubject
+
+\startsubsubject[title={pack: wrapping content in packages}]
+
+This is quite an important category as in \CONTEXT\ lots of things get packed.
+The best example is \type {\framed} and this macro has been maximally optimized,
+which is not that trivial since much can be configured. The code has been adapted
+to work well with the new commandhandler code and in future versions it might use
+the commandhandler directly. This is however not that trivial because hooking a
+setup of a command into \type {\framed} can conflict with the two commands using
+keys for different matters.
+
+Layers are also in this category and they probably will be further optimized.
+Reimplementing reusable objects is on the horizon, but for that we need a more
+abstract \LUA\ interface, so that will come first. This has a low priority
+because it all works well. This category also hosts some helpers for the page
+builder but the builder itself has a separate category.
+
+\stopsubsubject
+
+\startsubsubject[title={page: pages and output routines}]
+
+Here we have an old category: output routines (trying to make a page), page
+building, page imposition and shipout, single and multi column handling, very
+special page construction, line numbering, and of course setting up pages and
+layouts. All this code is being redone stepwise and stripped of old hacks. This
+is a cumbersome process as these are core components where side effects are
+sometimes hard to trace because mechanisms (and user demands) can interfere.
+Expect some changes for the good here.
+
+\stopsubsubject
+
+\startsubsubject[title={phys: physics}]
+
+As we have a category for chemistry it made sense to have one for physics and
+here is where the unit module's code ended up. So, from now on units are
+integrated into the core. We took the opportunity to rewrite most of it from
+scratch, providing a bit more control.
+
+\stopsubsubject
+
+\startsubsubject[title={prop: properties}]
+
+The best|-|known property in \TEX\ is a font and color is a close second. Both
+have their own category of files. In \MKII\ additional properties like backend
+layers and special rendering of text were supported in this category but in
+\MKIV\ properties as a generic feature are gone and replaced by more specific
+implementations in the \type {attr} namespace. We do issue a warning when any of
+the old methods are used.
+
+\stopsubsubject
+
+\startsubsubject[title={regi: input encodings}]
+
+We still support input encoding regimes but hardly any \TEX\ code is involved
+now. Only when users demand more functionality does this code get extended. For
+instant, recently a user wanted a conversion function for going from \UTF-8 to an
+encoding that another program wanted to see.
+
+\stopsubsubject
+
+\startsubsubject[title={scrn: interactivity and widgets}]
+
+All modules in this category have been overhauled. On the one hand we lifted some
+constraints, for instance the delayed initialization of fields no longer makes
+sense as we have a more dynamic variable resolver now (which is somewhat slower
+but still acceptable). On the other hand some nice but hard to maintain features
+have been simplified (not that anyone will notice as they were rather special).
+The reason for this is that vaguely documented \PDF\ features tend to change over
+time which does not help portability. Of course there have also been some
+extensions, and it is actually less hassle (but still no fun) to deal with such
+messy backend related code in \LUA.
+
+\stopsubsubject
+
+\startsubsubject[title={scrp: script|-|specific tweaks}]
+
+These are script|-|specific \LUA\ files that help with getting better results for
+scripts like \CJK. Occasionally I look at them but how they evolve depends on
+usage. I have some very experimental files that are not in the distribution.
+
+\stopsubsubject
+
+\startsubsubject[title={sort: sorting}]
+
+As sorting is delegated to \LUA\ there is not much \TEX\ code here. The \LUA\
+code occasionally gets improved if only because users have demands. For instance,
+sorting Korean was an interesting exercise, as was dealing with multiple
+languages in one index. Because sorting can happen on a combination of \UNICODE,
+case, shape, components, etc.\ the sorting mechanism is one of the more complex
+subsystems.
+
+\stopsubsubject
+
+\startsubsubject[title={spac: spacing}]
+
+This important set of modules is responsible for vertical spacing, strut
+management, justification, grid snapping, and all else that relates to spacing
+and alignments. Already in an early stage vertical spacing was mostly delegated
+to \LUA\ so there we're only talking of cleaning up now. Although \unknown\ I'm
+still not satisfied with the vertical spacing solution because it is somewhat
+demanding and an awkward mix of \TEX\ and \LUA\ which is mostly due to the fact
+that we cannot evaluate \TEX\ code in \LUA.
+
+Horizontal spacing can be quite demanding when it comes down to configuration:
+think of a table with 1000 cells where each cell has to be set up (justification,
+tolerance, spacing, protrusion, etc.). Recently a more drastic optimization has
+been done which permits even more options but at the same time is much more
+efficient, although not in terms of memory.
+
+Other code, for instance spread|-|related status information, special spacing
+characters, interline spacing and linewise typesetting all falls into this
+category and there is probably room for improvement there. It's good to mention
+that in the process of the current cleanup hardly any \LUA\ code gets touched, so
+that's another effort.
+
+\stopsubsubject
+
+\startsubsubject[title={strc: structure}]
+
+Big things happened here but mostly at the \TEX\ end as the support code in \LUA\
+was already in place. In this category we collect all code that gets or can get
+numbered, moves around and provides visual structure. So, here we find itemize,
+descriptions, notes, sectioning, marks, block moves, etc. This means that the
+code here interacts with nearly all other mechanisms.
+
+Itemization now uses the new inheritance code instead of its own specific
+mechanism but that is not a fundamental change. More important is that code has
+been moved around, stripped, and slightly extended. For instance, we had
+introduced proper \type {\startitem} and \type {\stopitem} commands which are
+somewhat conflicting with \type {\item} where a next instance ends a previous
+one. The code is still not nice, partly due to the number of options. The code is
+a bit more efficient now but functionally the same.
+
+The sectioning code is under reconstruction as is the code that builds lists. The
+intention is to have a better pluggable model and so far it looks promising. As
+similar models will be used elsewhere we need to converge to an acceptable
+compromise. One thing is clear: users no longer need to deal with arguments but
+variables and no longer with macros but with setups. Of course providing backward
+compatibility is a bit of a pain here.
+
+The code that deals with descriptions, enumerations and notes was already done in
+a \MKIV\ way, which means that they run on top of lists as storage and use the
+generic numbering mechanism. However, they had their own inheritance support code
+and moving to the generic code was a good reason to look at them again. So, now
+we have a new hierarchy: constructs, descriptions, enumerations and notations
+where notations are hooked into the (foot)note mechanisms.
+
+These mechanisms share the rendering code but operate independently (which was
+the main challenge). I did explore the possibility of combining the code with
+lists as there are some similarities but the usual rendering is too different as
+in the interface (think of enumerations with optional local titles, multiple
+notes that get broken over pages, etc.). However, as they are also stored in
+lists, users can treat them as such and reuse the information when needed (which
+for instance is just an alternative way to deal with end notes).
+
+At some point math formula numbering (which runs on top of enumerations) might
+get its own construct base. Math will be revised when we consider the time to be
+ripe for it anyway.
+
+The reference mechanism is largely untouched as it was already doing well, but
+better support has been added for automatic cross|-|document referencing. For
+instance it is now easier to process components that make up a product and still
+get the right numbering and cross referencing in such an instance.
+
+Float numbering, placement and delaying can all differ per output routine (single
+column, multi|-|column, columnset, etc.). Some of the management has moved to
+\LUA\ but most is just a job for \TEX. The better some support mechanisms become,
+the less code we need here.
+
+Registers will get the same treatment as lists: even more user control than is
+already possible. Being a simple module this is a relatively easy task, something
+for a hot summer day. General numbering is already fine as are block moves so
+they come last. The \XML\ export and \PDF\ tagging is also controlled from this
+category.
+
+\stopsubsubject
+
+\startsubsubject[title={supp: support code}]
+
+Support modules are similar to system ones (discussed later) but on a slightly
+more abstract level. There are not that many left now so these might as well
+become system modules at some time. The most important one is the one dealing
+with boxes. The biggest change there is that we use more private registers. I'm
+still not sure what to do with the visual debugger code. The math|-|related code
+might move to the math category.
+
+\stopsubsubject
+
+\startsubsubject[title={symb: symbols}]
+
+The symbol mechanisms organizes special characters in groups. With
+\UNICODE|-|related fonts becoming more complete we hardly need this mechanism.
+However, it is still the abstraction used in converters (for instance footnote
+symbols and interactive elements). The code has been cleaned up a bit but
+generally stays as is.
+
+\stopsubsubject
+
+\startsubsubject[title={syst: tex system level code}]
+
+Here you find all kinds of low|-|level helpers. Most date from early times but
+have been improved stepwise. We tend to remove obscure helpers (unless someone
+complains loudly) and add new ones every now and then. Even if we would strip
+down \CONTEXT\ to a minimum size, these modules would still be there. Of course
+the bootstrap code is also in this category: think of allocators, predefined
+constants and such.
+
+\stopsubsubject
+
+\startsubsubject[title={tabl: tables}]
+
+The oldest table mechanism was a quite seriously patched version of \TABLE\ and
+finally the decision has been made to strip, replace and clean up that bit. So,
+we have less code, but more features, such as colored columns and more.
+
+The (in|-|stream) tabulate code is mostly unchanged but has been optimized
+(again) as it is often used. The multipass approach stayed but is somewhat more
+efficient now.
+
+The natural table code was originally meant for \XML\ processing but is quite
+popular among users. The functionality and code is frozen but benefits from
+optimizations in other areas. The reason for the freeze is that it is pretty
+complex multipass code and we don't want to break anything.
+
+As an experiment, a variant of natural tables was made. Natural tables have a
+powerful inheritance model where rows and cells (first, last, \unknown) can be
+set up as a group but that is rather costly in terms of runtime. The new table
+variant treats each column, row and cell as an instance of \type {\framed} where
+cells can be grouped arbitrarily. And, because that is somewhat extreme, these
+tables are called x|-|tables. As much of the logic has been implemented in \LUA\
+and as these tables use buffers (for storing the main body) one could imagine
+that there is some penalty involved in going between \TEX\ and \LUA\ several
+times, as we have a two, three or four pass mechanism. However, this mechanism is
+surprisingly fast compared to natural tables. The reason for writing it was not
+only speed, but also the fact that in a project we had tables of 50 pages with
+lots of spans and such that simply didn't fit into \TEX's memory any more, took
+ages to process, and could also confuse the float splitter.
+
+Line tables \unknown\ well, I will look into them when needed. They are nice in a
+special way, as they can split vertically and horizontally, but they are seldom
+used. (This table mechanism was written for a project where large quantities of
+statistical data had to be presented.)
+
+\stopsubsubject
+
+\startsubsubject[title={task: lua tasks}]
+
+Currently this is mostly a place where we collect all kinds of tasks that are
+delegated to \LUA, often hooked into callbacks. No user sees this code.
+
+\stopsubsubject
+
+\startsubsubject[title={toks: token lists}]
+
+This category has some helpers that are handy for tracing or manuals but no sane
+user will ever use them, I expect. However, at some point I will clean up this
+old \MKIV\ mess. This code might end up in a module outside the core.
+
+\stopsubsubject
+
+\startsubsubject[title={trac: tracing}]
+
+A lot of tracing is possible in the \LUA\ code, which can be controlled from the
+\TEX\ end using generic enable and disable commands. At the macro level we do
+have some tracing but this will be replaced by a similar mechanism. This means
+that many \type {\tracewhatevertrue} directives will go away and be replaced.
+This is of course introducing some incompatibility but normally users don't use
+this in styles.
+
+\stopsubsubject
+
+\startsubsubject[title={type: typescripts}]
+
+We already mentioned that typescripts relate to fonts. Traditionally this is a
+layer on top of font definitions and we keep it this way. In this category there
+are also the definitions of typefaces: combinations of fonts. As we split the
+larger into smaller ones, there are many more files now. This has the added
+benefit that we use less memory as typescripts are loaded only once and stored
+permanently.
+
+\stopsubsubject
+
+\startsubsubject[title={typo: typesetting and typography}]
+
+This category is rather large in \MKIV\ as we move all code into here that
+somehow deals with special typesetting. Here we find all kinds of interesting new
+code that uses \LUA\ solutions (slower but more robust). Much has been discussed
+in articles as they are nice examples and often these are rather stable.
+
+The most important new kid on the block is margin data, which has been moved into
+this category. The new mechanism is somewhat more powerful but the code is also
+quite complex and still experimental. The functionality is roughly the same as in
+\MKII\ and older \MKIV, but there is now more advanced inheritance, a clear
+separation between placement and rendering, slightly more robust stacking, local
+anchoring (new). It was a nice challenge but took a bit more time than other
+reimplementations due to all kinds of possible interference. Also, it's not
+always easy to simulate \TEX\ grouping in a script language. Even if much more
+code is involved, it looks like the new implementation is somewhat faster. I
+expect to clean up this code a couple of times.
+
+On the agenda is not only further cleanup of all modules in this category, but
+also more advanced control over paragraph building. There is a parbuilder written
+in \LUA\ on my machine for years already which we use for experiments and in the
+process a more \LUATEX-ish (and efficient) way of dealing with protrusion has
+been explored. But for this to become effective, some of the \LUATEX\ backend
+code has to be reorganized and Hartmut wants do that first. In fact, we can then
+backport the new approach to the built|-|in builder, which is not only faster but
+also more efficient in terms of memory usage.
+
+\stopsubsubject
+
+\startsubsubject[title={unic: \UNICODE\ vectors and helpers}]
+
+As \UNICODE\ support is now native all the \MKII\ code (mostly vectors and
+converters) is gone. Only a few helpers remain and even these might go away.
+Consider this category obsolete and replaced by the \type {char} category.
+
+\stopsubsubject
+
+\startsubsubject[title={util: utility functions}]
+
+These are \LUA\ files that are rather stable. Think of parsers, format
+generation, debugging, dimension helpers, etc. Like the data category, this one
+is loaded quite early.
+
+\stopsubsubject
+
+\startsubsubject[title={Other \TEX\ files}]
+
+Currently there are the above categories which can be recognized by filename and
+prefix in macro names. But there are more files involved. For instance, user
+extensions can go into these categories as well but they need names starting with
+something like \type {xxxx-imp-} with \type {xxxx} being the category.
+
+Then there are modules that can be recognized by their prefix: \type {m-} (basic
+module), \type {t-} (third party module), \type {x-} (\XML|-|specific module),
+\type {u-} (user module), \type {p-} (private module). Some modules that Wolfgang
+and Aditya are working on might end up in the core distribution. In a similar
+fashion some seldom used core code might get moved to (auto|-|loaded) modules.
+
+There are currently many modules that provide tracing for mechanisms (like font
+and math) and these need to be normalized into a consistent interface. Often such
+modules show up when we work on an aspect of \CONTEXT\ or \LUATEX\ and at that
+moment integration is not high on the agenda.
+
+\stopsubsubject
+
+\startsubsubject[title={\METAPOST\ files}]
+
+A rather fundamental change in \METAPOST\ is that it no longer has a format (mem
+file). Maybe at some point it will read \type {.gz} files, but all code is loaded
+at runtime.
+
+For this reason I decided to split the files for \MKII\ and \MKIV\ as having
+version specific code in a common set no longer makes much sense. This means that
+already for a while we have \type {.mpii} and \type {.mpiv} files with the latter
+category being more efficient because we delegate some backend|-|related issues
+to \CONTEXT\ directly. I might split up the files for \MKIV\ a bit more so that
+selective loading is easier. This gives a slight performance boost when working
+over a network connection.
+
+\stopsubsubject
+
+\startsubsubject[title={\LUA\ files}]
+
+There are some generic helper modules, with names starting with \type {l-}. Then
+there are the \type {mtx-*} scripts for all kinds of management tasks with the
+most important one being \type {mtx-context} for managing a \TEX\ run.
+
+\stopsubsubject
+
+\startsubsubject[title={Generic files}]
+This leaves the bunch of generic files that provides \OPENTYPE\ support to
+packages other than \CONTEXT. Much time went into moving \CONTEXT|-|specific code
+out of the way and providing a better abstract interface. This means that new
+\CONTEXT\ code (we provide more font magic) will be less likely to interfere and
+integration is easier. Of course there is a penalty for \CONTEXT\ but it is
+bearable. And yes, providing generic code takes quite a lot of time so I
+sometimes wonder why I did it in the first place, but currently the maintenance
+burden is rather low. Khaled Hosny is responsible for bridging this code to
+\LATEX.
+
+\stopsubsubject
+
+\stopsection
+
+\startsection[title={What next}]
+
+Here ends this summary of the current state of \CONTEXT. I expect to spend the
+rest of the year on further cleaning up. I'm close to halfway now. What I really
+like is that many users upgrade as soon as there is a new beta, and as in a
+rewrite typos creep in, I therefore often get a fast response.
+
+Of course it helps a lot that Wolfgang Schuster, Aditya Mahajan, and Luigi Scarso
+know the code so well that patches show up on the list shortly after a problem
+gets reported. Also, for instance Thomas Schmitz uses the latest betas in
+academic book production, presentations, lecture notes and more, and so provides
+invaluable fast feedback. And of course Mojca Miklavec keeps all of it (and us)
+in sync. Such a drastic cleanup could not be done without their help. So let's
+end this status report with \unknown\ a big thank you to all those (unnamed)
+patient users and contributors.
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/hybrid/hybrid-contents.tex b/doc/context/sources/general/manuals/hybrid/hybrid-contents.tex
new file mode 100644
index 000000000..2b94cd482
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/hybrid-contents.tex
@@ -0,0 +1,17 @@
+% language=uk
+
+\startcomponent hybrid-contents
+
+\environment hybrid-environment
+
+\starttitle[title={Contents}]
+
+\setuplist[chapter][aligntitle=yes,after=,before=]
+
+\placelist[chapter][criterium=frontpart:all] \blank
+\placelist[chapter][criterium=bodypart:all] \blank
+\placelist[chapter][criterium=backpart:all] \blank
+
+\stoptitle
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/hybrid/hybrid-ebooks.tex b/doc/context/sources/general/manuals/hybrid/hybrid-ebooks.tex
new file mode 100644
index 000000000..b7bc5185f
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/hybrid-ebooks.tex
@@ -0,0 +1,593 @@
+% language=uk
+
+\startcomponent hybrid-ebooks
+
+\environment hybrid-environment
+
+\startchapter[title={E-books: Old wine in new bottles}]
+
+\startsection [title={Introduction}]
+
+When Dave Walden asked me if \TEX\ (or \CONTEXT) can generate ebooks we exchanged
+a bit of mail on the topic. Although I had promised myself never to fall into the
+trap of making examples for the sake of proving something I decided to pick up an
+experiment that I had been doing with a manual in progress and look into the
+\HTML\ side of that story. After all, occasionally on the \CONTEXT\ list similar
+questions are asked, like \quotation {Can \CONTEXT\ produce \HTML ?}. \footnote
+{This text appeared in the \EUROTEX\ 2011 proceedings and TUGBoat 101. Thanks to
+Karl Berry for correcting it.}
+
+\stopsection
+
+\startsection [title={Nothing new}]
+
+When you look at what nowadays is presented as an ebook document, there is not
+much new going on. Of course there are very advanced and interactive documents,
+using techniques only possible with recent hardware and programs, but the average
+ebook is pretty basic. This is no surprise. When you take a novel, apart from
+maybe a cover or an occasional special formatting of section titles, the
+typesetting of the content is pretty straightforward. In fact, given that
+formatters like \TEX\ have been around that can do such jobs without much
+intervention, it takes quite some effort to get that job done badly. It was a bit
+shocking to notice that on one of the first e-ink devices that became available
+the viewing was quite good, but the help document was just some word processor
+output turned into bad|-|looking \PDF. The availability of proper hardware does
+not automatically trigger proper usage.
+
+I can come up with several reasons why a novel published as an ebook does not
+look much more interesting and in many cases looks worse. First of all it has to
+be produced cheaply, because there is also a printed version and because the
+vendor of some devices also want to make money on it (or even lock you into their
+technology or shop). Then, it has to be rendered on various devices so the least
+sophisticated one sets the standard. As soon as it gets rendered, the resolution
+is much worse than what can be achieved in print, although nowadays I've seen
+publishers go for quick and dirty printing, especially for reprints.
+
+Over a decade ago, we did some experiments with touch screen computers. They had
+a miserable battery life, a slow processor and not much memory, but the
+resolution was the same as on the now fashionable devices. They were quite
+suitable for reading but even in environments where that made sense (for instance
+to replace carrying around huge manuals), such devices never took off. Nowadays
+we have wireless access and \USB\ sticks and memory cards to move files around,
+which helps a lot. And getting a quality comparable to what can be done today was
+no big deal, at least from the formatting point of view.
+
+In the \CONTEXT\ distribution you will find several presentation styles that can
+serve as bases for an ebook style. Also some of the \CONTEXT\ manuals come with
+two versions: one for printing and one for viewing on the screen. A nice example
+is the \METAFUN\ manual (see \in {figure} [fig:metafun]) where each page has a
+different look.
+
+\placefigure
+ [here]
+ [fig:metafun]
+ {A page from the \METAFUN\ manual.}
+ {\externalfigure[ebook-metafun-2.png][width=\textwidth]}
+
+It must be said that the (currently only black and white) devices that use
+electronic ink have a perceived resolution that is higher than their
+specifications, due to the semi|-|analog way the \quote {ink} behaves. In a
+similar fashion clever anti|-|aliasing can do wonders on \LCD\ screens. On the
+other hand they are somewhat slow and a display refresh is not that convenient.
+Their liquid crystal counterparts are much faster but they can be tiresome to
+look at for a long time and reading a book on it sitting in the sun is a no|-|go.
+Eventually we will get there and I'm really looking forward to seeing the first
+device that will use a high resolution electrowetting \CMYK\ display. \footnote
+{http://www.liquavista.com/files/LQV0905291LL5-15.pdf} But no matter what device
+is used, formatting something for it is not the most complex task at hand.
+
+\stopsection
+
+\startsection[title={Impact}]
+
+Just as with phones and portable audio devices, the market for tablets and
+ebook|-|only devices is evolving rapidly. While writing this, at work I have one
+ebook device and one tablet. The ebook device is sort of obsolete because the
+e-ink screen has deteriorated even without using it and it's just too slow to be
+used for reference manuals. The tablet is nice, but not that suitable for all
+circumstances: in the sun it is unreadable and at night the backlight is rather
+harsh. But, as I mentioned in the previous section, I expect this to change.
+
+If we look at the investment, one needs good arguments to buy hardware that is
+seldom used and after a few years is obsolete. Imagine that a family of four has
+to buy an ebook device for each member. Add to that the cost of the books and you
+quickly can end up with a larger budget than for books. Now, imagine that you
+want to share a book with a friend: will you give him or her the device? It might
+be that you need a few more devices then. Of course there is also some data
+management needed: how many copies of a file are allowed to be made and do we
+need special programs for that? And if no copy can be made, do we end up swapping
+devices? It is hard to predict how the situation will be in a few years from now,
+but I'm sure that not everyone can afford this rapid upgrading and redundant
+device approach.
+
+A friend of mine bought ebook devices for his children but they are back to paper
+books now because the devices were not kid|-|proof enough: you can sit on a book
+but not on an ebook reader.
+
+The more general devices (pads) have similar problems. I was surprised to see
+that an iPad is a single user device. One can hide some options behind passwords
+but I'm not sure if parents want children to read their mail, change preferences,
+install any application they like, etc. This makes pads not that family friendly
+and suggests that such a personal device has to be bought for each member. In
+which case it suddenly becomes a real expensive adventure. So, unless the prices
+drop drastically, pads are not a valid large scale alternative for books yet.
+
+It might sound like I'm not that willing to progress, but that's not true. For
+instance, I'm already an enthusiastic user of a media player infrastructure.
+\footnote {The software and hardware was developed by SlimDevices and currently
+is available as Logitech Squeezeserver. Incidentally I can use the iPad as an
+advanced remote control.} The software is public, pretty usable, and has no
+vendor lock|-|in. Now, it would make sense to get rid of traditional audio media
+then, but this is not true. I still buy \CD{}s if only because I then can rip
+them to a proper lossless audio format (\FLAC). The few \FLAC s that I bought via
+the Internet were from self|-|publishing performers. After the download I still
+got the \CD{}s which was nice because the booklets are among the nicest that I've
+ever seen.
+
+Of course it makes no sense to scan books for ebook devices so for that we depend
+on a publishing network. I expect that at some point there will be proper tools
+for managing your own electronic books and in most cases a simple file server
+will do. And the most open device with a proper screen will become my favourite.
+Also, I would not be surprised if ten years from now, many authors will publish
+themselves in open formats and hopefully users will be honest enough to pay for
+it. I'm not too optimistic about the latter, if only because I observe that
+younger family members fetch everything possible from the Internet and don't
+bother about rights, so we definitely need to educate them. To some extent
+publishers of content deserve this behaviour because more than I like I find
+myself in situations where I've paid some 20 euro for a \CD\ only to see that
+half a year later you can get it for half the price (sometimes it also happens
+with books).
+
+Given that eventually the abovementioned problems and disadvantages will be dealt
+with, we can assume that ebooks are here and will stay forever. So let's move on
+to the next section and discuss their look and feel.
+
+\stopsection
+
+\startsection[title={Interactivity}]
+
+The nice thing about a paper book is that it is content and interface at the same
+time. It is clear where it starts and ends and going from one page to another is
+well standardized. Putting a bookmark in it is easy as you can fall back on any
+scrap of paper lying around. While reading you know how far you came and how much
+there is to come. Just as a desktop on a desktop computer does not resemble the
+average desktop, an ebook is not a book. It is a device that can render content
+in either a given or more free|-|form way.
+
+However, an electronic book needs an interface and this is also where at the
+moment it gets less interesting. Of course the Internet is a great place to
+wander around and a natural place to look for electronic content. But there are
+some arguments for buying them at a bookshop, one being that you see a lot of
+(potentially) new books, often organized in topics in one glance. It's a
+different way of selecting. I'm not arguing that the Internet is a worse place,
+but there is definitely a difference: more aggressive advertisements, unwanted
+profiling that can narrow what is presented to a few choices.
+
+Would I enter a bookshop if on the display tables there were stacks of (current)
+ebook devices showing the latest greatest books? I can imagine that at some point
+we will have ebook devices that have screens that run from edge to edge and then
+we get back some of the appeal of book designs. It is that kind of future devices
+that we need to keep in mind when we design electronic documents, especially when
+after some decades we want them to be as interesting as old books can be. Of
+course this is only true for documents that carry the look and feel of a certain
+time and place and many documents are thrown away. Most books have a short
+lifespan due to the quality of the paper and binding so we should not become too
+sentimental about the transition to another medium.
+
+Once you're in the process of reading a book not much interfacing is needed.
+Simple gestures or touching indicated areas on the page are best. For more
+complex documents the navigation could be part of the design and no screen real
+estate has to be wasted by the device itself. Recently I visited a
+school|-|related exhibition and I was puzzled by the fact that on an electronic
+schoolboard so much space was wasted on colorful nonsense. Taking some 20\% off
+each side of such a device brings down the effective resolution to 600 pixels so
+we end up with 10 pixels or less per character (shown at about 1 cm width). At
+the same exhibition there were a lot of compensation programs for dyslexia
+advertised, and there might be a relationship.
+
+\stopsection
+
+\startsection[title={Formatting}]
+
+So how important is the formatting? Do we prefer reflow on demand or is a more
+frozen design that suits the content and expresses the wish of the author more
+appropriate? In the first case \HTML\ is a logical choice, and in the second one
+\PDF\ makes sense. You design a nice \HTML\ document but at some point the reflow
+gets in the way. And yes, you can reflow a \PDF\ file but it's mostly a joke.
+Alternatively one can provide both which is rather trivial when the source code
+is encoded in a systematic way so that multiple output is a valid option. Again,
+this is not new and mostly a matter of a publisher's policy. It won't cost more
+to store in neutral formats and it has already been done cheaply for a long time.
+
+Somewhat interfering in this matter is digital rights management. While it is
+rather customary to buy a book and let friends or family read the same book, it
+can get complicated when content is bound to one (or a few) devices. Not much
+sharing there, and in the worst case, no way to move your books to a better
+device. Each year in the Netherlands we have a book fair and bookshops give away
+a book specially written for the occasion. This year the book was also available
+as an ebook, but only via a special code that came with the book. I decided to
+give it a try and ended up installing a broken application, i.e.\ I could not get
+it to load the book from the Internet, and believe me, I have a decent machine
+and the professional \PDF\ viewer software that was a prerequisite.
+
+\stopsection
+
+\startsection[title={Using \TEX}]
+
+So, back to Dave's question: if \CONTEXT\ can generate ebooks in the \EPUB\
+format. Equally interesting is the question if \TEX\ can format an \EPUB\ file
+into a (say) \PDF\ file. As with much office software, an \EPUB\ file is nothing
+more than a zip file with a special suffix in which several resources are
+combined. The layout of the archive is prescribed. However, by demanding that the
+content itself is in \HTML\ and by providing a stylesheet to control the
+renderer, we don't automatically get properly tagged and organized content. When
+I first looked into \EPUB, I naively assumed that there was some well|-|defined
+structure in the content; turns out this is not the case.
+
+Let's start by answering the second question. Yes, \CONTEXT\ can be used to
+convert an \EPUB\ file into a \PDF\ file. The natural followup question is if it
+can be done automatically, and then some more nuance is needed: it depends. If
+you download the \EPUB\ for \quotation {A tale of two cities} from Charles
+Dickens from the Gutenberg Project website and look into a chapter you will see
+this:
+
+\starttyping
+<h1 id="pgepubid00000">A TALE OF TWO CITIES</h1>
+<h2 id="pgepubid00001">A STORY OF THE FRENCH REVOLUTION</h2>
+<p><br/></p>
+<h2>By Charles Dickens</h2>
+<p><br/>
+<br/></p>
+<hr/>
+<p><br/>
+<br/></p>
+<h2 id="pgepubid00002">Contents</h2>
+\stoptyping
+
+What follows is a table of contents formatted using \HTML\ tables
+and after that
+
+\starttyping
+<h2 id="pgepubid00004">I. The Period</h2>
+\stoptyping
+
+So, a level two header is used for the subtitle of the book as well as a regular
+chapter. I must admit that I had to go on the Internet to find this snippet as I
+wanted to check its location. On my disk I had a similar file from a year ago
+when I first looked into \EPUB. There I have:
+
+\starttyping
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>I | A Tale of Two Cities</title>
+ ....
+ </head>
+ <body>
+ <div class="body">
+ <div class="chapter">
+ <h3 class="chapter-title">I</h3>
+ <h4 class="chapter-subtitle">The Period</h4>
+\stoptyping
+
+I also wanted to make sure if the interesting combination of third and fourth
+level head usage was still there but it seems that there are several variants
+available. It is not my intention to criticize the coding, after all it is valid
+\HTML\ and can be rendered as intended. Nevertheless, the first snippet
+definitely looks worse, as it uses breaks instead of \CSS\ spacing directives and
+the second wins on obscurity due to the abuse of the head element.
+
+These examples answer the question about formatting an arbitrary \EPUB\ file:
+\quotation {no}. We can of course map the tagging to \CONTEXT\ and get pretty
+good results but we do need to look at the coding.
+
+As such books are rather predictable it makes sense to code them in a more
+generic way. That way generic stylesheets can be used to render the book directly
+in a viewer and generic \CONTEXT\ styles can be used to format it differently,
+e.g.\ as \PDF.
+
+Of course, if I were asked to set up a workflow for formatting ebooks, that would
+be relatively easy. For instance the Gutenberg books are available as raw text
+and that can be parsed to some intermediate format or (with \MKIV) interpreted
+directly.
+
+Making a style for a specific instance, like the Dickens book, is not that
+complex either. After all, the amount of encoding is rather minimal and special
+bits and pieces like a title page need special design anyway. The zipped file can
+be processed directly by \CONTEXT, but this is mostly just a convenience.
+
+As \EPUB\ is just a wrapper, the next question is if \CONTEXT\ can produce some
+kind of \HTML\ and the answer to that question is positive. Of course this only
+makes sense when the input is a \TEX\ source, and we have argued before that when
+multiple output is needed the user might consider a different starting point.
+After all, \CONTEXT\ can deal with \XML\ directly.
+
+The main advantage of coding in \TEX\ is that the source remains readable and for
+some documents it's certainly more convenient, like manuals about \TEX. In the
+reference manual \quote {\CONTEXT\ \LUA\ Documents} (\CLD) there are the
+following commands:
+
+\starttyping
+\setupbackend
+ [export=yes]
+
+\setupinteraction
+ [title=Context Lua Documents,
+ subtitle=preliminary version,
+ author=Hans Hagen]
+\stoptyping
+
+At the cost of at most 10\% extra runtime an \XML\ export is generated in
+addition to the regular \PDF\ file. Given that you have a structured \TEX\ source
+the exported file will have a decent structure as well and you can therefore
+transform the file into something else, for instance \HTML. But, as we already
+have a good|-|looking \PDF\ file, the only reason to have \HTML\ as well is for
+reflowing. Of course wrapping up the \HTML\ into an \EPUB\ structure is not that
+hard. We can probably even get away from wrapping because we have a single
+self|-|contained file.
+
+\placefigure
+ {A page from the \CLD\ manual in \PDF.}
+ {\externalfigure[ebook-pdf.png][width=\textwidth]}
+
+The \type {\setupbackend} command used in the \CLD\ manual has a few
+more options:
+
+\starttyping
+\setupbackend
+ [export=cld-mkiv-export.xml,
+ xhtml=cld-mkiv-export.xhtml,
+ css={cld-mkiv-export.css,mathml.css}]
+\stoptyping
+
+We explicitly name the export file and in addition specify a stylesheet and an
+alternative \XHTML\ file. If you can live without hyperlinks the \XML\ file
+combined with the cascading style sheet will do a decent job of controlling the
+formatting.
+
+In the \CLD\ manual chapters are coded like this:
+
+\starttyping
+\startchapter[title=A bit of Lua]
+
+\startsection[title=The language]
+\stoptyping
+
+The \XML\ output of this
+
+\starttyping
+<division detail='bodypart'>
+ <section detail='chapter' location='aut:3'>
+ <sectionnumber>1</sectionnumber>
+ <sectiontitle>A bit of Lua</sectiontitle>
+ <sectioncontent>
+ <section detail='section'>
+ <sectionnumber>1.1</sectionnumber>
+ <sectiontitle>The language</sectiontitle>
+ <sectioncontent>
+\stoptyping
+
+The \HTML\ version has some extra elements:
+
+\starttyping
+<xhtml:a name="aut_3">
+ <section location="aut:3" detail="chapter">
+\stoptyping
+
+The table of contents and cross references have \type {xhtml:a} elements too but
+with the \type {href} attribute. It's interesting to search the web for ways to
+avoid this, but so far no standardized solution for mapping \XML\ elements onto
+hyperlinks has been agreed upon. In fact, getting the \CSS\ mapping done was not
+that much work but arriving at the conclusion that (in 2011) these links could
+only be done in a robust way using \HTML\ tags took more time. \footnote {In this
+example we see the reference \type {aut:3} turned into \type {aut_1}. This is
+done because some browsers like to interpret this colon as a url.} Apart from
+this the \CSS\ has enough on board to map the export onto something presentable.
+For instance:
+
+\starttyping
+sectioncontent {
+ display: block ;
+ margin-top: 1em ;
+ margin-bottom: 1em ;
+}
+
+section[detail=chapter], section[detail=title] {
+ margin-top: 3em ;
+ margin-bottom: 2em ;
+}
+
+section[detail=chapter]>sectionnumber {
+ display: inline-block ;
+ margin-right: 1em ;
+ font-size: 3em ;
+ font-weight: bold ;
+}
+\stoptyping
+
+As always, dealing with verbatim is somewhat special. The following code does the
+trick:
+
+\starttyping
+verbatimblock {
+ background-color: #9999FF ;
+ display: block ;
+ padding: 1em ;
+ margin-bottom: 1em ;
+ margin-top: 1em ;
+ font-family: "Lucida Console", "DejaVu Sans Mono", monospace ;
+}
+
+verbatimline {
+ display: block ;
+ white-space: pre-wrap ;
+}
+
+verbatim {
+ white-space: pre-wrap ;
+ color: #666600 ;
+ font-family: "Lucida Console", "DejaVu Sans Mono", monospace ;
+}
+\stoptyping
+
+The spacing before the first and after the last one differs from the spacing
+between lines, so we need some extra directives:
+
+\starttyping
+verbatimlines+verbatimlines {
+ display: block ;
+ margin-top: 1em ;
+}
+\stoptyping
+
+This will format code like the following with a bluish background and inline
+verbatim with its complement:
+
+\starttyping
+<verbatimblock detail='typing'>
+ <verbatimlines>
+ <verbatimline>function sum(a,b)</verbatimline>
+ <verbatimline> print(a, b, a + b)</verbatimline>
+ <verbatimline>end</verbatimline>
+ </verbatimlines>
+</verbatimblock>
+\stoptyping
+
+The hyperlinks need some attention. We need to make sure that only the links and
+not the anchors get special formatting. After some experimenting I arrived at
+this:
+
+\starttyping
+a[href] {
+ text-decoration: none ;
+ color: inherit ;
+}
+
+a[href]:hover {
+ color: #770000 ;
+ text-decoration: underline ;
+}
+\stoptyping
+
+Tables are relatively easy to control. We have tabulate (nicer for text) and
+natural tables (similar to the \HTML\ model). Both get mapped into \HTML\ tables
+with \CSS\ directives. There is some detail available so we see things like this:
+
+\starttyping
+tablecell[align=flushleft] {
+ display: table-cell ;
+ text-align: left ;
+ padding: .1em ;
+}
+\stoptyping
+
+It is not hard to support more variants or detail in the export but that will
+probably only happen when I find a good reason (a project), have some personal
+need, or when a user asks for it. For instance images will need some special
+attention (conversion, etc.). Also, because we use \METAPOST\ all over the place
+that needs special care as well, but a regular (novel|-|like) ebook will not have
+such resources.
+
+\placefigure
+ {A page from \CLD\ manual in \HTML.}
+ {\externalfigure[ebook-xhtml.png][width=\textwidth]}
+
+As an extra, a template file is generated that mentions all
+elements used, like this:
+
+\starttyping
+section[detail=summary] {
+ display: block ;
+}
+\stoptyping
+
+with the inline and display properties already filled in. That way I could see
+that I still had to add a couple of directives to the final \CSS\ file. It also
+became clear that in the \CLD\ manual some math is used that gets tagged as
+\MATHML, so that needs to be covered as well. \footnote {Some more advanced
+\MATHML\ output will be available when the matrix|-|related core commands have
+been upgraded to \MKIV\ and extended to suit today's needs.} Here we need to make
+some decisions as we export \UNICODE\ and need to consider support for less
+sophisticated fonts. On the other hand, the \WTHREEC\ consortium has published
+\CSS\ for this purpose so we can use these as a starting point. It might be that
+eventually more tuning will be delegated to the \XHTML\ variant. This is not much
+extra work as we have the (then intermediate) \XML\ tree available. Thinking of
+it, we could eventually end up with some kind of \CSS\ support in \CONTEXT\
+itself.
+
+It will take some experimenting and feedback from users to get the export right,
+especially to provide a convenient way to produce so|-|called \EPUB\ files
+directly. There is already some support for this container format. If you have
+enabled \XHTML\ export, you can produce an \EPUB\ archive afterwards with:
+
+\starttyping
+mtxrun --script epub yourfile
+\stoptyping
+
+For testing the results, open source programs like \type {calibre} are quite
+useful. It will probably take a while to figure out to what extent we need to
+support formats like \EPUB, if only because such formats are adapted on a regular
+basis.
+
+\stopsection
+
+\startsection[title=The future]
+
+It is hard to predict the future. I can imagine that given the user interface
+that has evolved over ages paper books will not disappear soon. Probably there
+will be a distinction between read|-|once and throw|-|away books and those that
+you carry with you your whole life as visible proof of that life. I can also
+imagine that (if only for environmental reasons) ebooks (hopefully with stable
+devices) will dominate. In that case traditional bookshops will disappear and
+with them the need for publishers that supply them. Self|-|publishing will then
+be most interesting for authors and maybe some of them (or their helpful friends)
+will be charmed by \TEX\ and tinkering with the layout using the macro language.
+I can also imagine that at some point new media (and I don't consider an ebook a
+new medium) will dominate. And how about science fiction becoming true:
+downloading stories and information directly into our brains.
+
+It reminds me of something I need to do some day soon: get rid of old journals
+that I planned to read but never will. I would love to keep them electronically
+but it is quite unlikely that they are available and if so, it's unlikely that I
+want to pay for them again. This is typically an area where I'd consider using an
+ebook device, even if it's suboptimal. On the other hand, I don't consider
+dropping my newspaper subscription yet as I don't see a replacement for the
+regular coffeestop at the table where it sits and where we discuss the latest
+news.
+
+The nice thing about an analogue camera is that the image carrier has been
+standardized and you can buy batteries everywhere. Compare this with their
+digital cousins: all have different batteries, there are all kinds of memory
+cards, and only recently has some standardization in lenses shown up. There is a
+wide range of resolutions and aspect ratios. Other examples of standardization
+are nuts and bolts used in cars, although it took some time for the metric system
+to catch on. Books have different dimensions but it's not hard to deal with that
+property. Where desktop hardware is rather uniform everything portable is
+different. For some brands you need a special toolkit with every new device.
+Batteries cannot be exchanged and there are quite some data carriers. On the
+other hand, we're dealing with software and if we want we can support data
+formats forever. The \MICROSOFT\ operating systems have demonstrated that
+programs written years ago can still run on updates. In addition \LINUX\
+demonstrates that users can take and keep control and create an independence from
+vendors. So, given that we can still read document sources and given that they
+are well structured, we can create history|-|proof solutions. I don't expect that
+the traditional publishers will play a big role in this if only because of their
+short term agendas and because changing ownerships works against long term views.
+And programs like \TEX\ have already demonstrated having a long life span,
+although it must be said that in today's rapid upgrade cycles it takes some
+courage to stay with it and its descendants. But downward compatibility is high
+on the agenda of its users and user groups which is good in the perspective of
+discussing stable ebooks.
+
+Let's finish with an observation. Books often make a nice (birthday) present and
+finding one that suits is part of the gift. Currently a visible book has some
+advantages: when unwrapped it can be looked at and passed around. It also can be
+a topic of discussion and it has a visible personal touch. I'm not so sure if
+vouchers for an ebook have the same properties. It probably feels a bit like
+giving synthetic flowers. I don't know what percentage of books is given as
+presents but this aspect cannot be neglected. Anyway, I wonder when I will buy my
+first ebook and for who. Before that happens I'll probably have generated lots of
+them.
+
+\stopsection
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/hybrid/hybrid-environment.tex b/doc/context/sources/general/manuals/hybrid/hybrid-environment.tex
new file mode 100644
index 000000000..23dd3b785
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/hybrid-environment.tex
@@ -0,0 +1,127 @@
+\startenvironment hybrid-environment
+
+% \showgrid[outer,lines]
+% \showgrid
+
+\usemodule[abr-02,chart,narrowtt]
+
+\starttypescript [hybrid]
+ \definetypeface [hybrid] [rm] [serif] [bookman] [default]
+ \definetypeface [hybrid] [ss] [sans] [dejavu] [default] [rscale=0.9]
+ \definetypeface [hybrid] [tt] [mono] [dejavu] [default] [rscale=0.9]
+ \definetypeface [hybrid] [mm] [math] [xits] [default] [rscale=1.00]
+\stoptypescript
+
+\setupbodyfont[hybrid]
+
+\setupFLOWcharts
+ [offset=\zeropoint,
+ dx=1.2\bodyfontsize,
+ dy=1.2\bodyfontsize,
+ height=2\bodyfontsize,
+ width=7\bodyfontsize]
+
+\setupFLOWshapes
+ [framecolor=blue]
+
+\setupFLOWlines
+ [color=red]
+
+\abbreviation[METAPOST]{MetaPost}{}
+\abbreviation[EPUB] {Epub} {}
+
+\setuplayout
+ [width=middle,
+ height=middle,
+ header=0cm,
+ topspace=2cm,
+ bottomspace=1cm,
+ footer=1cm,
+ footerdistance=.5cm]
+
+\setupfootertexts
+ [][{\getmarking[chapter]\quad\pagenumber}]
+ [{\pagenumber\quad\getmarking[chapter]}][]
+
+\setuppagenumbering
+ [alternative=doublesided]
+
+\setupfooter
+ [color=blue,
+ style=\dontconvertfont\bf]
+
+\setuplayout
+ [grid=tolerant] % we need a test
+
+\setupformulas
+ [grid=min]
+
+\setupwhitespace
+ [big]
+
+\setuphead
+ [chapter]
+ [before=,
+ after={\blank[2*big]},
+ style=\bfc,
+ color=blue]
+
+\setuphead
+ [section]
+ [before={\blank[2*big]},
+ after=\blank,
+ style=\bfb,
+ color=blue]
+
+\setuphead
+ [subsection]
+ [before=\blank,
+ after=\blank,
+ style=\bfa,
+ color=blue]
+
+% grid settings
+
+% none will effectively smash the box to one line (zero inner) but is the same as strut as outer will snap
+% however you can use {none,top:3} to move it down 3 lines then
+% {local,strut} will use the style related settings and move one line down because the font is larger
+
+\setuphead
+ [chapter]
+ [grid=none]
+
+\setuphead
+ [section]
+ [grid=none]
+
+\setuphead
+ [subsection]
+ [grid=none]
+
+% so far
+
+\setupitemgroup
+ [itemize]
+ [each]
+ [color=blue,
+ symcolor=blue]
+
+\setuptyping
+ [color=blue]
+
+\setuptype
+ [color=blue]
+
+\definecolor[red] [r=.4]
+\definecolor[green] [g=.4]
+\definecolor[blue] [b=.4]
+\definecolor[yellow] [r=.4,g=.4]
+\definecolor[gray] [s=.6]
+
+\setupcaptions
+ [color=blue]
+
+\setupexternalfigures
+ [location={local,default}]
+
+\stopenvironment
diff --git a/doc/context/sources/general/manuals/hybrid/hybrid-export.tex b/doc/context/sources/general/manuals/hybrid/hybrid-export.tex
new file mode 100644
index 000000000..6a1fb3734
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/hybrid-export.tex
@@ -0,0 +1,293 @@
+% language=uk
+
+\startluacode
+ job.files.context(dir.glob("exported-*.tex"),"--directives=structures.export.lessstate")
+\stopluacode
+
+\startcomponent hybrid-export
+
+\environment hybrid-environment
+
+\startchapter[title={Exporting XML}]
+
+\startsection [title={Introduction}]
+
+Every now and then on the the mailing list users ask if \CONTEXT\ can produce
+\HTML\ instead of for instance \PDF, and the answer has always been unsatisfying.
+In this chapter I will present the \MKIV\ way of doing this.
+
+\stopsection
+
+\startsection [title={The clumsy way}]
+
+My favourite answer to the question about how to produce \HTML\ (or more general
+\XML\ as it can be transformed) has always been: \quotation {I'd just typeset
+it!}. Take:
+
+\starttyping
+\def\MyChapterCommand#1#2{<h1>#2</h1>}
+\setuphead[chapter][command=\MyChapterCommand]
+\stoptyping
+
+Here \type {\chapter{Hello World}} will produce:
+
+\starttyping
+<h1>Hello World</h1>
+\stoptyping
+
+Now imagine that you hook such commands into all relevant environments and that
+you use a style with no header and footer lines. You use a large page (A2) and a
+small monospaced font (4pt) so that page breaks will not interfere too much. If
+you want columns, fine, just hook in some code that typesets the final columns as
+tables. In the end you will have an ugly looking \PDF\ file but by feeding it
+into \type {pdftotext} you will get a nicely formatted \HTML\ file.
+
+For some languages of course encoding issues would show up and there can be all
+kind of interferences, so eventually the amount of code dealing with it would
+have accumulated. This is why we don't follow this route.
+
+An alternative is to use \type {tex4ht} which does an impressive job for \LATEX,
+and supports \CONTEXT\ to some extent as well. As far as I know it overloads some
+code deep down in the kernel which is something \quote {not done} in the
+\CONTEXT\ universe if only because we cannot keep control over side effects. It
+also complicates maintainance of both systems.
+
+In \MKIV\ however, we do have the ability to export the document to a structured
+\XML\ file so let's have a look at that.
+
+\stopsection
+
+\startsection [title={Structure}]
+
+The ability to export to some more verbose format depends on the availability of
+structural information. As we already tag elements for the sake of tagged \PDF,
+it was tempting to see how well we could use those tags for exporting to \XML. In
+principle it is possible to use Acrobat Professional to export the content using
+tags but you can imagine that we get a better quality if we stay within the scope
+of the producing machinery.
+
+\starttyping
+\setupbackend[export=yes]
+\stoptyping
+
+This is all you need unless you want to fine tune the resulting \XML\ file. If
+you are familiar with tagged \PDF\ support in \CONTEXT, you will recognize the
+result. When you process the following file:
+
+\typefile{exported-001.tex}
+
+You will get a file with the suffix \type {export} that looks as follows:
+\footnote{We will omit the topmost lines in following examples.}
+
+\typefile{exported-001.export}
+
+It's no big deal to postprocess such a file. In that case one can for instance
+ignore the chapter number or combine the number and the title. Of course
+rendering information is lost here. However, sometime it makes sense to export
+some more details. Take the following table:
+
+\typefile[range=2]{exported-002.tex}
+
+Here we need to preserve the span related information as well as cell specific
+alignments as for tables this is an essential part of the structure.
+
+\typefile[range=7]{exported-002.export}
+
+The tabulate mechanism is quite handy for regular text especially when the
+content of cells has to be split over pages. As each line in a paragraph in a
+tabulate becomes a cell, we need to reconstruct the paragraphs from the (split)
+alignment cells.
+
+\typefile[range=2]{exported-003.tex}
+
+This becomes:
+
+\typefile[range=7]{exported-003.export}
+
+The \type {<break/>} elements are injected automatically between paragraphs. We
+could tag each paragraph individually but that does not work that well when we
+have for instance a quotation that spans multiple paragraphs (and maybe starts in
+the middle of one). An empty element is not sensitive for this and is still a
+signal that vertical spacing is supposed to be applied.
+
+\stopsection
+
+\startsection[title=The implementation]
+
+We implement tagging using attributes. The advantage of this is that it does not
+interfere with typesetting, but a disadvantage is that not all parent elements
+are visible. When we encounter some content, we're in the innermost element so if
+we want to do something special, we need to deduce the structure from the current
+child. This is no big deal as we have that information available at each child
+element in the tree.
+
+The first implementation just flushed the \XML\ on the fly (i.e.\ when traversing
+the node list) but when I figured out that collapsing was needed for special
+cases like tabulated paragraphs this approach was no longer valid. So, after some
+experiments I decided to build a complete structure tree in memory \footnote {We
+will see if this tree will be used for other purposes in the future.}. This
+permits us to handle situations like the following:
+
+\typefile[range=2]{exported-005.tex}
+
+Here we get:
+
+\typefile[range=7]{exported-005.export}
+
+The \type {symbol} and \type {packed} attributes are first seen at the \type
+{itemcontent} level (the innermost element) so when we flush the \type
+{itemgroup} element's attributes we need to look at the child elements (content)
+that actually carry the attribute.\footnote {Only glyph nodes are investigated
+for structure.}
+
+I already mentioned collapsing. As paragraphs in a tabulate get split into cells,
+we encounter a mixture that cannot be flushed sequentially. However, as each cell
+is tagged uniquely we can append the lines within a cell. Also, as each paragraph
+gets a unique number, we can add breaks before a new paragraph starts. Collapsing
+and adding breakpoints is done at the end, and not per page, as paragraphs can
+cross pages. Again, thanks to the fact that we have a tree, we can investigate
+content and do this kind of manipulations.
+
+Moving data like footnotes are somewhat special. When notes are put on the page
+(contrary to for instance end notes) the so called \quote {insert} mechanism is
+used where their content is kept with the line where it is defined. As a result
+we see them end up instream which is not that bad a coincidence. However, as in
+\MKIV\ notes are built on top of (enumerated) descriptions, we need to
+distinguish them somehow so that we can cross reference them in the export.
+
+\typefile[range=2]{exported-006.tex}
+
+Currently this will end up as follows:
+
+\typefile[range=7]{exported-006.export}
+
+Graphics are also tagged and the \type {image} element reflects the included
+image.
+
+\typefile[range=2]{exported-007.tex}
+
+If the image sits on another path then that path shows up in an attribute and
+when a page other than~1 is taken from the (pdf) image, it gets mentioned as
+well.
+
+\typefile[range=7]{exported-007.export}
+
+Cross references are another relevant aspect of an export. In due time we will
+export them all. It's not so much complicated because all information is there
+but we need to hook some code into the right spot and making examples for those
+cases takes a while as well.
+
+\typefile[range=2]{exported-009.tex}
+
+We export references in the \CONTEXT\ specific way, so no
+interpretation takes place.
+
+\typefile[range=7]{exported-009.export}
+
+As \CONTEXT\ has an integrated referencing system that deals with internal as
+well as external references, url's, special interactive actions like controlling
+widgets and navigations, etc.\ and we export the raw reference specification as
+well as additional attributes that provide some detail.
+
+\typefile[range=2]{exported-013.tex}
+
+Of course, when postprocessing the exported data, you need to take these variants
+into account.
+
+\typefile[range=7]{exported-013.export}
+
+\stopsection
+
+\startsection[title=Math]
+
+Of course there are limitations. For instance \TEX ies doing math might wonder if
+we can export formulas. To some extent the export works quite well.
+
+\typefile[range=2]{exported-008.tex}
+
+This results in the usual rather verbose presentation \MATHML:
+
+\typefile[range=7]{exported-008.export}
+
+More complex math (like matrices) will be dealt with in due time as for this
+Aditya and I have to take tagging into account when we revisit the relevant code
+as part of the \MKIV\ cleanup and extensions. It's not that complex but it makes
+no sense to come up with intermediate solutions.
+
+Display verbatim is also supported. In this case we tag individual lines.
+
+\typefile[range=2]{exported-010.tex}
+
+The export is not that spectacular:
+
+\typefile[range=7]{exported-010.export}
+
+A rather special case are marginal notes. We do tag them because they
+often contain usefull information.
+
+\typefile[range=2]{exported-012.tex}
+
+The output is currently as follows:
+
+\typefile[range=7]{exported-012.export}
+
+However, this might change in future versions.
+
+\stopsection
+
+\startsection[title=Formatting]
+
+The output is formatted using indentation and newlines. The extra run time needed
+for this (actually, quite some of the code is related to this) is compensated by
+the fact that inspecting the result becomes more convenient. Each environment has
+one of the properties \type {inline}, \type {mixed} and \type {display}. A
+display environment gets newlines around it and an inline environment none at
+all. The mixed variant does something in between. In the following example we tag
+some user elements, but you can as well influence the built in ones.
+
+\typefile[range=2]{exported-004.tex}
+
+This results in:
+
+\typefile[range=7]{exported-004.export}
+
+Keep in mind that elements have no influence on the typeset result apart from
+introducing spaces when used this way (this is not different from other \TEX\
+commands). In due time the formatting might improve a bit but at least we have
+less chance ending up with those megabyte long one||liners that some applications
+produce.
+
+\stopsection
+
+\startsection[title=A word of advise]
+
+In (for instance) \HTML\ class attributes are used to control rendering driven by
+stylesheets. In \CONTEXT\ you can often define derived environments and their
+names will show up in the detail attribute. So, if you want control at that level
+in the export, you'd better use the structure related options built in \CONTEXT,
+for instance:
+
+\typefile[range=2]{exported-011.tex}
+
+This gives two different sections:
+
+\typefile[range=7]{exported-011.export}
+
+\stopsection
+
+\startsection[title=Conclusion]
+
+It is an open question if such an export is useful. Personally I never needed a
+feature like this and there are several reasons for this. First of all, most of
+my work involves going from (often complex) \XML\ to \PDF\ and if you have \XML\
+as input, you can also produce \HTML\ from it. For documents that relate to
+\CONTEXT\ I don't need it either because manuals are somewhat special in the
+sense that they often depend on showing something that ends up on paper (or its
+screen counterpart) anyway. Loosing the makeup also renders the content somewhat
+obsolete. But this feature is still a nice proof of concept anyway.
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/hybrid/hybrid-fontnames.tex b/doc/context/sources/general/manuals/hybrid/hybrid-fontnames.tex
new file mode 100644
index 000000000..bc39ba9b4
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/hybrid-fontnames.tex
@@ -0,0 +1,444 @@
+% language=uk
+
+\startcomponent hybrid-fontnames
+
+\environment hybrid-environment
+
+\startchapter[title={The font name mess}]
+
+\startsection [title={Introduction}]
+
+When \TEX\ came around it shipped with its own fonts. At that moment the \TEX\
+font universe was a small and well known territory. The \quote {only} hassle was
+that one needed to make sure that the right kind of bitmap was available for the
+printer.
+
+When other languages than English came into the picture things became more
+complex as now fonts instances in specific encodings showed up. After a couple of
+years the by then standardised \TEX\ distributions carried tens of thousands of
+font files. The reason for this was simple: \TEX\ fonts could only have 256
+characters and therefore there were quite some encodings. Also, large \CJK\ fonts
+could easily have hundreds of metric files per font. Distributions also provide
+metrics for commercial fonts although I could never use them and as a result have
+many extra metric files in my personal trees (generated by \TEXFONT). \footnote
+{Distributions like \TEX Live have between 50.000 and 100.000 files, but
+derivatives like the \CONTEXT\ minimals are much smaller.}
+
+At the input side many problems related to encodings were solved by \UNICODE. So,
+when the more \UNICODE\ aware fonts showed up, it looked like things would become
+easier. For instance, no longer were choices for encodings needed. Instead one
+had to choose features and enable languages and scripts and so the problem of the
+multitude of files was replaced by the necessity to know what some font actually
+provides. But still, for the average user it can be seen as an improvement.
+
+A rather persistent problem remained, especially for those who want to use
+different fonts and or need to install fonts on the system that come from
+elsewhere (either free or commercial): the names used for fonts. You may argue
+that modern \TEX\ engines and macro packages can make things easier, especially
+as one can call up fonts by their names instead of their filenames, but actually
+the problem has worsened. With traditional \TEX\ you definitely get an error when
+you mistype a filename or call for a font that is not on your system. The more
+modern \TEX's macro packages can provide fallback mechanisms and you can end up
+with something you didn't ask for.
+
+For years one of the good things of \TEX\ was its stability. If we forget about
+changes in content, macro packages and|/|or hyphenation patterns, documents could
+render more or less the same for years. This is because fonts didn't change.
+However, now that fonts are more complex, bugs gets fixed and thereby results can
+differ. Or, if you use platform fonts, your updated operating system might have
+new or even different variants. Or, if you access your fonts by fontname, a
+lookup can resolve differently.
+
+The main reason for this is that fontnames as well as filenames of fonts are
+highly inconsistent across vendors, within vendors and platforms. As we have to
+deal with this matter, in \MKIV\ we have several ways to address a font: by
+filename, by fontname, and by specification. In the next sections I will describe
+all three.
+
+\stopsection
+
+\startsection [title={Method 1: file}]
+
+The most robust way to specify what fonts is to be used is the filename. This is
+done as follows:
+
+\starttyping
+\definefont[SomeFont][file:lmmono10-regular]
+\stoptyping
+
+A filename lookup is case insensitive and the name you pass is exact. Of course
+the \type {file:} prefix (as with any prefix) can be used in font synonyms as
+well. You may add a suffix, so this is also valid:
+
+\starttyping
+\definefont[SomeFont][file:lmmono10-regular.otf]
+\stoptyping
+
+By default \CONTEXT\ will first look for an \OPENTYPE\ font so in both cases you
+will get such a font. But how do you know what the filename is? You can for
+instance check it out with:
+
+\starttyping
+mtxrun --script font --list --file --pattern="lm*mono"
+\stoptyping
+
+This reports some information about the file, like the weight, style, width,
+fontname, filename and optionally the subfont id and a mismatch between the
+analysed weight and the one mentioned by the font.
+
+\startntyping
+latinmodernmonolight light normal normal lmmonolt10regular lmmonolt10-regular.otf
+latinmodernmonoproplight light italic normal lmmonoproplt10oblique lmmonoproplt10-oblique.otf
+latinmodernmono normal normal normal lmmono9regular lmmono9-regular.otf
+latinmodernmonoprop normal italic normal lmmonoprop10oblique lmmonoprop10-oblique.otf
+latinmodernmono normal italic normal lmmono10italic lmmono10-italic.otf
+latinmodernmono normal normal normal lmmono8regular lmmono8-regular.otf
+latinmodernmonolightcond light italic condensed lmmonoltcond10oblique lmmonoltcond10-oblique.otf
+latinmodernmonolight light italic normal lmmonolt10oblique lmmonolt10-oblique.otf
+latinmodernmonolightcond light normal condensed lmmonoltcond10regular lmmonoltcond10-regular.otf
+latinmodernmonolight bold italic normal lmmonolt10boldoblique lmmonolt10-boldoblique.otf
+latinmodernmonocaps normal italic normal lmmonocaps10oblique lmmonocaps10-oblique.otf
+latinmodernmonoproplight bold italic normal lmmonoproplt10boldoblique lmmonoproplt10-boldoblique.otf
+latinmodernmonolight bold normal normal lmmonolt10bold lmmonolt10-bold.otf
+latinmodernmonoproplight bold normal normal lmmonoproplt10bold lmmonoproplt10-bold.otf
+latinmodernmonoslanted normal normal normal lmmonoslant10regular lmmonoslant10-regular.otf
+latinmodernmono normal normal normal lmmono12regular lmmono12-regular.otf
+latinmodernmonocaps normal normal normal lmmonocaps10regular lmmonocaps10-regular.otf
+latinmodernmonoprop normal normal normal lmmonoprop10regular lmmonoprop10-regular.otf
+latinmodernmono normal normal normal lmmono10regular lmmono10-regular.otf
+latinmodernmonoproplight light normal normal lmmonoproplt10regular lmmonoproplt10-regular.otf
+\stopntyping
+
+\stopsection
+
+\startsection [title={Method 1: name}]
+
+Instead of lookup by file, you can also use names. In the font database we store
+references to the fontname and fullname as well as some composed names from
+information that comes with the font. This permits rather liberal naming and the
+main reason is that we can more easily look up fonts. In practice you will use
+names that are as close to the filename as possible.
+
+\starttyping
+mtxrun --script font --list --name --pattern="lmmono*regular" --all
+\stoptyping
+
+This gives on my machine:
+
+\startntyping
+lmmono10regular lmmono10regular lmmono10-regular.otf
+lmmono12regular lmmono12regular lmmono12-regular.otf
+lmmono8regular lmmono8regular lmmono8-regular.otf
+lmmono9regular lmmono9regular lmmono9-regular.otf
+lmmonocaps10regular lmmonocaps10regular lmmonocaps10-regular.otf
+lmmonolt10regular lmmonolt10regular lmmonolt10-regular.otf
+lmmonoltcond10regular lmmonoltcond10regular lmmonoltcond10-regular.otf
+lmmonoprop10regular lmmonoprop10regular lmmonoprop10-regular.otf
+lmmonoproplt10regular lmmonoproplt10regular lmmonoproplt10-regular.otf
+lmmonoslant10regular lmmonoslant10regular lmmonoslant10-regular.otf
+\stopntyping
+
+It does not show from this list but with name lookups first \OPENTYPE\ fonts are
+checked and then \TYPEONE. In this case there are \TYPEONE\ variants as well but
+they are ignored. Fonts are registered under all names that make sense and can be
+derived from its description. So:
+
+\starttyping
+mtxrun --script font --list --name --pattern="latinmodern*mono" --all
+\stoptyping
+
+will give:
+
+\startntyping
+latinmodernmono lmmono9regular lmmono9-regular.otf
+latinmodernmonocaps lmmonocaps10oblique lmmonocaps10-oblique.otf
+latinmodernmonocapsitalic lmmonocaps10oblique lmmonocaps10-oblique.otf
+latinmodernmonocapsnormal lmmonocaps10oblique lmmonocaps10-oblique.otf
+latinmodernmonolight lmmonolt10regular lmmonolt10-regular.otf
+latinmodernmonolightbold lmmonolt10boldoblique lmmonolt10-boldoblique.otf
+latinmodernmonolightbolditalic lmmonolt10boldoblique lmmonolt10-boldoblique.otf
+latinmodernmonolightcond lmmonoltcond10oblique lmmonoltcond10-oblique.otf
+latinmodernmonolightconditalic lmmonoltcond10oblique lmmonoltcond10-oblique.otf
+latinmodernmonolightcondlight lmmonoltcond10oblique lmmonoltcond10-oblique.otf
+latinmodernmonolightitalic lmmonolt10oblique lmmonolt10-oblique.otf
+latinmodernmonolightlight lmmonolt10regular lmmonolt10-regular.otf
+latinmodernmononormal lmmono9regular lmmono9-regular.otf
+latinmodernmonoprop lmmonoprop10oblique lmmonoprop10-oblique.otf
+latinmodernmonopropitalic lmmonoprop10oblique lmmonoprop10-oblique.otf
+latinmodernmonoproplight lmmonoproplt10oblique lmmonoproplt10-oblique.otf
+latinmodernmonoproplightbold lmmonoproplt10boldoblique lmmonoproplt10-boldoblique.otf
+latinmodernmonoproplightbolditalic lmmonoproplt10boldoblique lmmonoproplt10-boldoblique.otf
+latinmodernmonoproplightitalic lmmonoproplt10oblique lmmonoproplt10-oblique.otf
+latinmodernmonoproplightlight lmmonoproplt10oblique lmmonoproplt10-oblique.otf
+latinmodernmonopropnormal lmmonoprop10oblique lmmonoprop10-oblique.otf
+latinmodernmonoslanted lmmonoslant10regular lmmonoslant10-regular.otf
+latinmodernmonoslantednormal lmmonoslant10regular lmmonoslant10-regular.otf
+\stopntyping
+
+Watch the 9 point version in this list. It happens that there are 9, 10 and 12
+point regular variants but all those extras come in 10 point only. So we get a
+mix and if you want a specific design size you really have to be more specific.
+Because one font can be registered with its fontname, fullname etc.\ it can show
+up more than once in the list. You get what you ask for.
+
+With this obscurity you might wonder why names make sense as lookups. One
+advantage is that you can forget about special characters. Also, Latin Modern
+with its design sizes is probably the worst case. So, although for most fonts a
+name like the following will work, for Latin Modern it gives one of the design
+sizes:
+
+\starttyping
+\definefont[SomeFont][name:latinmodernmonolightbolditalic]
+\stoptyping
+
+But this is quite okay:
+
+\starttyping
+\definefont[SomeFont][name:lmmonolt10boldoblique]
+\stoptyping
+
+So, in practice this method will work out as well as the file method but
+you can best check if you get what you want.
+
+\stopsection
+
+\startsection [title={Method 1: spec}]
+
+We have now arrived at the third method, selecting by means of a specification.
+This time we take the familyname as starting point (although we have some
+fallback mechanisms):
+
+\starttyping
+\definefont[SomeSerif] [spec:times]
+\definefont[SomeSerifBold] [spec:times-bold]
+\definefont[SomeSerifItalic] [spec:times-italic]
+\definefont[SomeSerifBoldItalic][spec:times-bold-italic]
+\stoptyping
+
+The patterns are of the form:
+
+\starttyping
+spec:name-weight-style-width
+spec:name-weight-style
+spec:name-style
+\stoptyping
+
+When only the name is used, it actually boils down to:
+
+\starttyping
+spec:name-normal-normal-normal
+\stoptyping
+
+So, this is also valid:
+
+\starttyping
+spec:name-normal-italic-normal
+spec:name-normal-normal-condensed
+\stoptyping
+
+Again we can consult the database:
+
+\starttyping
+mtxrun --script font --list --spec lmmono-normal-italic
+\stoptyping
+
+This prints the following list. The first column is the familyname, the fifth
+column the fontname:
+
+\startntyping
+latinmodernmono normal italic normal lmmono10italic lmmono10-italic.otf
+latinmodernmonoprop normal italic normal lmmonoprop10oblique lmmonoprop10-oblique.otf
+lmmono10 normal italic normal lmmono10italic lmtti10.afm
+lmmonoprop10 normal italic normal lmmonoprop10oblique lmvtto10.afm
+lmmonocaps10 normal italic normal lmmonocaps10oblique lmtcso10.afm
+latinmodernmonocaps normal italic normal lmmonocaps10oblique lmmonocaps10-oblique.otf
+\stopntyping
+
+Watch the \OPENTYPE\ and \TYPEONE\ mix. As we're just investigating here, the
+lookup looks at the fontname and not at the familyname. At the \TEX\ end you use
+the familyname:
+
+\starttyping
+\definefont[SomeFont][spec:latinmodernmono-normal-italic-normal]
+\stoptyping
+
+So, we have the following ways to access this font:
+
+\starttyping
+\definefont[SomeFont][file:lmmono10-italic]
+\definefont[SomeFont][file:lmmono10-italic.otf]
+\definefont[SomeFont][name:lmmono10italic]
+\definefont[SomeFont][spec:latinmodernmono-normal-italic-normal]
+\stoptyping
+
+As \OPENTYPE\ fonts are prefered over \TYPEONE\ there is not much chance of a
+mixup.
+
+As mentioned in the introduction, qualifications are somewhat inconsistent. Among
+the weight we find: black, bol, bold, demi, demibold, extrabold, heavy, light,
+medium, mediumbold, regular, semi, semibold, ultra, ultrabold and ultralight.
+Styles are: ita, ital, italic, roman, regular, reverseoblique, oblique and
+slanted. Examples of width are: book, cond, condensed, expanded, normal and thin.
+Finally we have alternatives which can be anything.
+
+When doing a lookup, some normalizations takes place, with the default always
+being \quote {normal}. But still the repertoire is large:
+
+\startntyping
+helveticaneue medium normal normal helveticaneuemedium HelveticaNeue.ttc index: 0
+helveticaneue bold normal condensed helveticaneuecondensedbold HelveticaNeue.ttc index: 1
+helveticaneue black normal condensed helveticaneuecondensedblack HelveticaNeue.ttc index: 2
+helveticaneue ultralight italic thin helveticaneueultralightitalic HelveticaNeue.ttc index: 3
+helveticaneue ultralight normal thin helveticaneueultralight HelveticaNeue.ttc index: 4
+helveticaneue light italic normal helveticaneuelightitalic HelveticaNeue.ttc index: 5
+helveticaneue light normal normal helveticaneuelight HelveticaNeue.ttc index: 6
+helveticaneue bold italic normal helveticaneuebolditalic HelveticaNeue.ttc index: 7
+helveticaneue normal italic normal helveticaneueitalic HelveticaNeue.ttc index: 8
+helveticaneue bold normal normal helveticaneuebold HelveticaNeue.ttc index: 9
+helveticaneue normal normal normal helveticaneue HelveticaNeue.ttc index: 10
+helveticaneue normal normal condensed helveticaneuecondensed hlc_____.afm conflict: roman
+helveticaneue bold normal condensed helveticaneueboldcond hlbc____.afm
+helveticaneue black normal normal helveticaneueblackcond hlzc____.afm conflict: normal
+helveticaneue black normal normal helveticaneueblack hlbl____.afm conflict: normal
+helveticaneue normal normal normal helveticaneueroman lt_50259.afm conflict: regular
+\stopntyping
+
+\stopsection
+
+\startsection[title={The font database}]
+
+In \MKIV\ we use a rather extensive font database which in addition to bare
+information also contains a couple of hashes. When you use \CONTEXT\ \MKIV\ and
+install a new font, you have to regenerate the file database. In a next \TEX\ run
+this will trigger a reload of the font database. Of course you can also force a
+reload with:
+
+\starttyping
+mtxrun --script font --reload
+\stoptyping
+
+As a summary we mention a few of the discussed calls of this script:
+
+\startntyping
+mtxrun --script font --list somename (== --pattern=*somename*)
+
+mtxrun --script font --list --name somename
+mtxrun --script font --list --name --pattern=*somename*
+
+mtxrun --script font --list --spec somename
+mtxrun --script font --list --spec somename-bold-italic
+mtxrun --script font --list --spec --pattern=*somename*
+mtxrun --script font --list --spec --filter="fontname=somename"
+mtxrun --script font --list --spec --filter="familyname=somename,weight=bold,style=italic,width=condensed"
+
+mtxrun --script font --list --file somename
+mtxrun --script font --list --file --pattern=*somename*
+\stopntyping
+
+The lists shown in before depend on what fonts are installed and
+their version. They might not reflect reality at the time you read
+this.
+
+\stopsection
+
+\startsection[title={Interfacing}]
+
+Regular users never deal with the font database directly. However, if you write
+font loading macros yourself, you can access the database from the \TEX\ end.
+First we show an example of an entry in the database, in this case TeXGyreTermes
+Regular.
+
+\starttyping
+{
+ designsize = 100,
+ familyname = "texgyretermes",
+ filename = "texgyretermes-regular.otf",
+ fontname = "texgyretermesregular",
+ fontweight = "regular",
+ format = "otf",
+ fullname = "texgyretermesregular",
+ maxsize = 200,
+ minsize = 50,
+ rawname = "TeXGyreTermes-Regular",
+ style = "normal",
+ variant = "",
+ weight = "normal",
+ width = "normal",
+}
+\stoptyping
+
+Another example is Helvetica Neue Italic:
+
+\starttyping
+{
+ designsize = 0,
+ familyname = "helveticaneue",
+ filename = "HelveticaNeue.ttc",
+ fontname = "helveticaneueitalic",
+ fontweight = "book",
+ format = "ttc",
+ fullname = "helveticaneueitalic",
+ maxsize = 0,
+ minsize = 0,
+ rawname = "Helvetica Neue Italic",
+ style = "italic",
+ subfont = 8,
+ variant = "",
+ weight = "normal",
+ width = "normal",
+}
+\stoptyping
+
+As you can see, some fields can be meaningless, like the sizes. As using the low
+level \TEX\ interface assumes some knowledge, we stick here to an example:
+
+\starttyping
+\def\TestLookup#1%
+ {\dolookupfontbyspec{#1}
+ pattern: #1, found: \dolookupnoffound
+ \blank
+ \dorecurse {\dolookupnoffound} {%
+ \recurselevel:~\dolookupgetkeyofindex{fontname}{\recurselevel}%
+ \quad
+ }%
+ \blank}
+
+\TestLookup{familyname=helveticaneue}
+\TestLookup{familyname=helveticaneue,weight=bold}
+\TestLookup{familyname=helveticaneue,weight=bold,style=italic}
+\stoptyping
+
+You can use the following commands:
+
+\starttyping
+\dolookupfontbyspec {key=value list}
+\dolookupnoffound
+\dolookupgetkeyofindex {key}{index}
+\dolookupgetkey {key}
+\stoptyping
+
+First you do a lookup. After that there can be one or more matches and you can
+access the fields of each match. What you do with the information is up to
+yourself.
+
+\stopsection
+
+\startsection[title={A few remarks}]
+
+The fact that modern \TEX\ engines can access system fonts is promoted as a
+virtue. The previous sections demonstrated that in practice this does not really
+free us from a name mess. Of course, when we use a really small \TEX\ tree, and
+system fonts only, there is not much that can go wrong, but when you have extra
+fonts installed there can be clashes.
+
+We're better off with filenames than we were in former times when operating
+systems and media forced distributors to stick to 8 characters in filenames. But
+that does not guarantee that today's shipments are more consistent. And as there
+are still some limitations in the length of fontnames, obscure names will be with
+us for a long time to come.
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/hybrid/hybrid-glocal.tex b/doc/context/sources/general/manuals/hybrid/hybrid-glocal.tex
new file mode 100644
index 000000000..a67146a5b
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/hybrid-glocal.tex
@@ -0,0 +1,269 @@
+% language=uk
+
+\startcomponent hybrid-glocal
+
+\environment hybrid-environment
+
+\startchapter[title={Glocal assignments}]
+
+Here is a nice puzzle. Say that you do this:
+
+\starttyping
+\def\test{local} \test
+\stoptyping
+
+What will get typeset? Right, you'll get \type {local}. Now take this:
+
+\startbuffer
+\bgroup
+ \def \test {local}[\test]
+ \xdef\test{global}[\test]
+ \def \test {local}[\test]
+\egroup
+ [\test]
+\stopbuffer
+
+\typebuffer
+
+Will you get:
+
+\starttyping
+[local] [local] [local] [global]
+\stoptyping
+
+or will it be:
+
+\starttyping
+[local] [global] [local] [global]
+\stoptyping
+
+Without knowing \TEX, there are good reasons for getting either of them: is a
+global assignment global only i.e.\ does it reach over the group(s) or is it
+global and local at the same time? The answer is that the global definitions also
+happens to be a local one, so the second line is what we get.
+
+Something similar happens with registers, like counters:
+
+\startbuffer
+\newcount\democount
+\bgroup
+ \democount 1[\the\democount]
+ \global\democount 2[\the\democount]
+ \democount 1[\the\democount]
+\egroup
+ [\the\democount]
+\stopbuffer
+
+\typebuffer
+
+We get: {\tttf\getbuffer\removeunwantedspaces}, so this is
+consistent with macros. But how about boxes?
+
+\startbuffer
+\bgroup
+ \setbox0\hbox {local}[\copy0:\the\wd0]
+ \global\setbox0\hbox{global}[\copy0:\the\wd0]
+ \setbox0\hbox {local}[\copy0:\the\wd0]
+\egroup
+ [\copy0:\the\wd0]
+\stopbuffer
+
+\typebuffer
+
+This gives:
+
+\startlines \tttf
+\getbuffer
+\stoplines
+
+Again, this is consistent, so let's do some manipulation:
+
+\startbuffer
+\bgroup
+ \setbox0\hbox{local} \wd0=6em [\copy0:\the\wd0]
+ \global\setbox0\hbox{global} \global\wd0=5em [\copy0:\the\wd0]
+ \setbox0\hbox{local} \wd0=6em [\copy0:\the\wd0]
+\egroup
+ [\copy0:\the\wd0]
+\stopbuffer
+
+\typebuffer
+
+\startlines \tttf
+\getbuffer
+\stoplines
+
+Right, no surprise here, but \unknown
+
+\startbuffer
+\bgroup
+ \setbox0\hbox{local} \wd0=6em [\copy0:\the\wd0]
+ \global\setbox0\hbox{global} \wd0=5em [\copy0:\the\wd0]
+ \setbox0\hbox{local} \wd0=6em [\copy0:\the\wd0]
+\egroup
+ [\copy0:\the\wd0]
+\stopbuffer
+
+\typebuffer
+
+See the difference? There is none. The second width assignment is applied to the
+global box.
+
+\startlines \tttf
+\getbuffer
+\stoplines
+
+So how about this then:
+
+\startbuffer
+\bgroup
+ \setbox0\hbox{local} \wd0=6em [\copy0:\the\wd0]
+ \global\setbox0\hbox{global} [\copy0:\the\wd0]
+ \setbox0\hbox{local} \wd0=6em [\copy0:\the\wd0]
+\egroup
+ [\copy0:\the\wd0]
+\stopbuffer
+
+\typebuffer
+
+Is this what you expect?
+
+\startlines \tttf
+\getbuffer
+\stoplines
+
+So, in the case of boxes, an assignment to a box dimension is applied to the last
+instance of the register, and the global nature is kind of remembered. Inside a
+group, registers that are accessed are pushed on a stack and the assignments are
+applied to the one on the stack and when no local box is assigned, the one at the
+outer level gets the treatment. You can also say that a global box is unreachable
+once a local instance is used. \footnote {The code that implements \type
+{\global\setbox} actually removes all intermediate boxes.}
+
+\startbuffer
+\setbox0\hbox{outer} [\copy0:\the\wd0]
+\bgroup
+ \wd0=6em [\copy0:\the\wd0]
+\egroup
+ [\copy0:\the\wd0]
+\stopbuffer
+
+\typebuffer
+
+This gives:
+
+\startlines \tttf
+\getbuffer
+\stoplines
+
+It works as expected when we use local boxes after such an assignment:
+
+\startbuffer
+\setbox0\hbox{outer} [\copy0:\the\wd0]
+\bgroup
+ \wd0=6em [\copy0:\the\wd0]
+ \setbox0\hbox{inner (local)} [\copy0:\the\wd0]
+\egroup
+ [\copy0:\the\wd0]
+\stopbuffer
+
+\typebuffer
+
+This gives:
+
+\startlines \tttf
+\getbuffer
+\stoplines
+
+Interestingly in practice this is natural enough not to get noticed. Also, as the
+\TEX book explicitly mentions that one should not mix local and global usage, not
+many users will do that. For instance the scratch registers 0, 2, 4, 6 and 8 are
+often used locally while 1, 3, 5, 7 and 9 are supposedly used global. The
+argument for doing this is that it does not lead to unwanted stack build-up, but
+the last examples given here provide another good reason. Actually, global
+assignments happen seldom in macro packages, at least compared to local ones.
+
+In \LUATEX\ we can also access boxes at the \LUA\ end. We can for instance change
+the width as follows:
+
+\startbuffer
+\bgroup
+ \setbox0\hbox{local}
+ \ctxlua{tex.box[0].width = tex.sp("6em")} [\copy0:\the\wd0]
+ \global\setbox0\hbox{global}
+ \ctxlua{tex.box[0].width = tex.sp("5em")} [\copy0:\the\wd0]
+ \setbox0\hbox{local}
+ \ctxlua{tex.box[0].width = tex.sp("6em")} [\copy0:\the\wd0]
+\egroup
+ [\copy0:\the\wd0]
+\stopbuffer
+
+\typebuffer
+
+This is consistent with the \TEX\ end:
+
+\startlines \tttf
+\getbuffer
+\stoplines
+
+This is also true for:
+
+\startbuffer
+\bgroup
+ \setbox0\hbox{local}
+ \ctxlua{tex.box[0].width = tex.sp("6em")} [\copy0:\the\wd0]
+ \global\setbox0\hbox{global} [\copy0:\the\wd0]
+ \setbox0\hbox{local}
+ \ctxlua{tex.box[0].width = tex.sp("6em")} [\copy0:\the\wd0]
+\egroup
+ [\copy0:\the\wd0]
+\stopbuffer
+
+\typebuffer
+
+Which gives:
+
+\startlines \tttf
+\getbuffer
+\stoplines
+
+The fact that a \type {\global} prefix is not needed for a global assignment at
+the \TEX\ end means that we don't need a special function at the \LUA\ end for
+assigning the width of a box. You won't miss it.
+
+There is one catch when coding at the \TEX\ end. Imagine this:
+
+\startbuffer
+\setbox0\hbox{local} [\copy0:\the\wd0]
+\bgroup
+ \wd0=6em [\copy0:\the\wd0]
+\egroup
+ [\copy0:\the\wd0]
+\stopbuffer
+
+\typebuffer
+
+In sync with what we told you will get:
+
+\startlines \tttf
+\getbuffer
+\stoplines
+
+However, this does not look that intuitive as the following:
+
+\startbuffer
+\setbox0\hbox{local} [\copy0:\the\wd0]
+\bgroup
+ \global\wd0=6em [\copy0:\the\wd0]
+\egroup
+ [\copy0:\the\wd0]
+\stopbuffer
+
+Here the global is redundant but it looks quite okay to put it there if only to
+avoid confusion. \footnote {I finally decided to remove some of the \type
+{\global} prefixes in my older code, but I must admit that I sometimes felt
+reluctant when doing it, so I kept a few.}
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/hybrid/hybrid-goodies.tex b/doc/context/sources/general/manuals/hybrid/hybrid-goodies.tex
new file mode 100644
index 000000000..f6a2317f0
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/hybrid-goodies.tex
@@ -0,0 +1,648 @@
+% language=uk
+
+\usetypescriptfile[type-husayni]
+
+\startcomponent hybrid-goodies
+
+\environment hybrid-environment
+
+% this will change
+
+\definefontfeature
+ [husayni-none]
+ [analyze=yes,mode=node,
+ language=dflt,script=arab,
+ ccmp=yes]
+
+\definefontfeature
+ [husayni-default]
+ [analyze=yes,mode=node,
+ language=dflt,script=arab,
+ ccmp=yes,init=yes,medi=yes,fina=yes,
+ rlig=yes,calt=yes,salt=yes,anum=yes,
+ kern=yes,curs=yes,mark=yes,mkmk=yes,
+ ss01=yes,ss03=yes,ss10=yes,ss12=yes,ss15=yes,ss16=yes,
+ ss19=yes,ss24=yes,ss25=yes,ss26=yes,ss27=yes,ss31=yes,
+ ss34=yes,ss35=yes,ss36=yes,ss37=yes,ss38=yes,ss41=yes,
+ ss43=yes]
+
+\definefontfeature
+ [husayni-first-order]
+ [script=arab,ss01=yes,ss03=yes,ss05=yes,
+ ss10=yes,ss12=yes,ss15=yes,ss16=yes,ss19=yes,ss24=yes,
+ ss25=yes,ss26=yes,ss27=yes,ss31=yes,ss34=yes,ss35=yes,
+ ss36=yes,ss37=yes,ss38=yes,ss41=yes,ss42=yes,ss43=yes]
+
+\definefontfeature
+ [husayni-stack-jiim-multi-level]
+ [script=arab,ss05=yes]
+
+\definefontfeature
+ [husayni-minimal-stretching]
+ [script=arab,
+ ss05=yes,ss09=yes,ss06=yes,ss13=yes,ss17=yes,ss40=yes,
+ js11=yes,js14=yes,js16=yes]
+
+\definefontfeature
+ [husayni-maximal-stretching]
+ [script=arab,
+ ss05=yes,ss09=yes,ss06=yes,ss13=yes,ss17=yes,ss40=yes,
+ js13=yes,js14=yes,js16=yes]
+
+\definefontfeature
+ [husayni-chop-haa]
+ [script=arab,
+ ss05=yes,ss09=yes,ss06=yes,ss13=yes,ss17=yes,ss54=yes]
+
+\definefontfeature
+ [husayni-normal]
+ [goodies=husayni,
+ featureset=default]
+
+\definefont[ArabicFontNone][husayni*husayni-none at 40pt]
+\definefont[ArabicFontFull][husayni*husayni-default at 40pt] % husayni-normal
+
+\startchapter[title={Font Goodies}]
+
+\startsection[title={Introduction}]
+
+The Oriental \TEX\ project is one of the first and more ambitious users of
+\LUATEX. A major undertaking in this project is the making of a rather full
+features and complex font for typesetting Arabic. As the following text will show
+some Arabic, you might get the impression that I'm an expert but be warned that
+I'm far from that. But as Idris compensates this quite well the team has a lot of
+fun in figuring out how to achieve our goals using \OPENTYPE\ technology in
+combination with \LUATEX\ and \MKIV. A nice side effect of this is that we end up
+with some neat tricks in the \CONTEXT\ core.
+
+Before we come to some of these goodies, an example of Arabic is given that
+relates quite well to the project. It was first used at the euro\TEX\ 2009
+meeting. Take the following 6 shapes:
+
+\starttabulate[|c|c|c|c|c|c|]
+\NC \ArabicFontFull ل \NC \ArabicFontFull و \NC \ArabicFontFull ا \NC \ArabicFontFull ت \NC \ArabicFontFull ي \NC \ArabicFontFull خ \NC \NR
+\NC \type{l} \NC \type{w} \NC \type{ā} \NC \type{t} \NC \type{ī} \NC \type{kh} \NC \NR
+\stoptabulate
+
+With these we can make the name \LUATEX\ and as we use a nice script we can
+forget about the lowered~E. Putting these characters in sequence is not enough as
+Arabic typesetting has to mimick the subtle aspects of scribes.
+
+In Latin scripts we have mostly one|-|to|-|one and many|-|to|-|one substitutions.
+These can happen in sequence which in in practice boils down to multiple passes
+over the stream of characters. In this process sometimes surrounding characters
+(or shapes) play a role, for instance ligatures are not always wanted and their
+coming into existence might depend on neighbouring characters. In some cases
+glyphs have to be (re)positioned relative to each other. While in Latin scripts
+the number of substitutions and positioning is not that large but in advanced
+Arabic fonts it can be pretty extensive.
+
+With \OPENTYPE\ we have some machinery available, so we try to put as much logic
+in the font as possible. However, in addition we have some dedicated optimizing
+routines. The whole process is split into a couple if stages.
+
+The so called First|-|Order Analysis puts a given character into isolated,
+initial, middle, or final state. Next, the Second|-|Order Analysis looks at the
+characters and relates this state to what characters precede or succeed it. Based
+on that state we do character substitutions. There can be multiple analysis and
+replacements in sequence. We can do some simple aesthetic stretching and
+additional related replacements. We need to attach identity marks and vowels in
+proper but nice looking places. In most cases we're then done. Contrary to other
+fonts we don't use many ligatures but compose characters.
+
+The previous steps already give reasonable results and implementing it also
+nicely went along with the development of \LUATEX\ and \CONTEXT\ \MKIV. Currently
+we're working on extending and perfecting the font to support what we call
+Third|-|Order Contextual Analysis. This boils down to an interplay between the
+paragraph builder and additional font features. In order to get pleasing spacing
+we apply further substitutions, this time with wider or narrower shapes. When
+this is done we need to reattach identity marks and vowels. Optionally we can
+apply \HZ\ like stretching as a finishing touch but so far we didn't follow that
+route yet.
+
+So, let's see how we can typeset the word \LUATEX\ in Arabic using some of these
+techniques.
+
+\startlines
+no order (kh ī t ā w [u] l)\hfilll {\righttoleft\ArabicFontNone لُواتيخ}
+first order \hfilll {\subff{husayni-first-order}\righttoleft\ArabicFontFull لُواتيخ}
+second order \hfilll {\righttoleft\ArabicFontFull لُواتيخ}
+second order (Jiim-stacking) \hfilll {\addff{husayni-stack-jiim-multi-level}\righttoleft\ArabicFontFull لُواتيخ}
+minimal stretching \hfilll {\addff{husayni-minimal-stretching}\righttoleft\ArabicFontFull لُواتيخ}
+maximal stretching (level 3) \hfilll {\addff{husayni-maximal-stretching}\righttoleft\ArabicFontFull لُواتيخ}
+chopped letter khaa (for e.g.\ underlining) \hfilll {\addff{husayni-chop-haa}\righttoleft\ArabicFontFull لُواتيخ}
+\stoplines
+
+As said, this font is quite complex in the sense that it has many features and
+associated lookups. In addition to the usual features we have stylistic and
+justification variants. As these are not standardized (after all, each font can
+have its own look and feel and associated treatments) we store some information
+in the goodies files that ship with this font.
+
+\startbuffer[stylistics]
+\startluacode
+ local goodies = fonts.goodies.load("husayni")
+ local stylistics = goodies and goodies.stylistics
+ if stylistics then
+ local col, row, type = context.NC, context.NR, context.type
+ context.starttabulate { "|l|pl|" }
+ col() context("feature") col() context("meaning") col() row()
+ for feature, meaning in table.sortedpairs(stylistics) do
+ col() type(feature) col() type(meaning) col() row()
+ end
+ context.stoptabulate()
+ end
+\stopluacode
+\stopbuffer
+
+\getbuffer[stylistics]
+
+It is highly unlikely that a user will remember all these features, which is why
+there will be a bunch of predefined combinations. These are internalized as
+follows:
+
+\startbuffer[featuresets]
+\startluacode
+ local goodies = fonts.goodies.load("husayni")
+ local featuresets = goodies and goodies.featuresets
+ if featuresets then
+ local col, row, type = context.NC, context.NR, context.type
+ context.starttabulate { "|l|pl|" }
+ col() context("featureset") col() context("definitions") col() row()
+ for featureset, definitions in table.sortedpairs(featuresets) do
+ col() type(featureset) col()
+ for k, v in table.sortedpairs(definitions) do
+ type(string.format("%s=%s",k,tostring(v)))
+ context.quad()
+ end
+ col() row()
+ end
+ context.stoptabulate()
+ end
+\stopluacode
+\stopbuffer
+
+\getbuffer[featuresets]
+
+\stopsection
+
+\startsection[title={Color}]
+
+One of the objectives of the oriental \TEX\ project is to bring color to typeset
+Arabic. When Idris started making samples with much manual intervention it was
+about time to figure out if it could be supported by a bit of \LUA\ code.
+
+As the colorization concerns classes of glyphs (like vowels) this is something
+that can best be done after all esthetics have been sorted out. Because things
+like coloring are not part of font technology and because we don't want to misuse
+the \OPENTYPE\ feature mechanisms for that, the solution lays in an extra file
+that describes these goodies.
+
+\startbuffer[goodies-1]
+\definefontfeature
+ [husayni-colored]
+ [goodies=husayni,
+ colorscheme=default,
+ featureset=default]
+\stopbuffer
+
+\startbuffer[goodies-2]
+\start
+ \definedfont[husayni*husayni-colored at 72pt]
+ \righttoleft
+ \resetfontcolorscheme لُواتيخ ألف ليلة وليلة \par
+ \setfontcolorscheme [1]لُواتيخ ألف ليلة وليلة \crlf
+ \setfontcolorscheme [2]لُواتيخ ألف ليلة وليلة \crlf
+\stop
+\stopbuffer
+
+\getbuffer[goodies-1,goodies-2]
+
+The second and third of these three lines have colored vowels and identity marks.
+So how did we get the colors? There are actually two mechanisms involved in this:
+
+\startitemize[packed]
+\startitem we need to associate colorschemes with classed of glyphs \stopitem
+\startitem we need to be able to turn on and off coloring \stopitem
+\stopitemize
+
+The first is done by loading goodies and selecting a colorscheme:
+
+\typebuffer[goodies-1]
+
+Turning on and off coloring is done with two commands (we might provide a proper
+environment for this) as shown in:
+
+\typebuffer[goodies-2]
+
+If you look closely at the feature definition you'll notice that we also choose a
+default featureset. For most (latin) fonts the regular feature definitions are
+convenient, but for fonts that are used for Arabic there are preferred
+combinations of features as there can be many.
+
+Currently the font we use here has the following colorschemes:
+
+\startbuffer[colorschemes]
+\startluacode
+ local goodies = fonts.goodies.load("husayni")
+ local colorschemes = goodies and goodies.colorschemes
+ if colorschemes then
+ local col, row, type = context.NC, context.NR, context.type
+ context.starttabulate { "|l|pl|" }
+ col() context("colorscheme") col() context("numbers") col() row()
+ for colorscheme, numbers in table.sortedpairs(colorschemes) do
+ col() type(colorscheme) col()
+ for i=1,#numbers do
+ type(i)
+ context.quad()
+ end
+ col() row()
+ end
+ context.stoptabulate()
+ end
+\stopluacode
+\stopbuffer
+
+\getbuffer[colorschemes]
+
+\stopsection
+
+\startsection[title={The goodies file}]
+
+In principle a goodies files can contain anuy data that makes sense but in order
+to be useable some entries have a prescribed structure. A goodies file looks as
+follows:
+
+\starttyping
+return {
+ name = "husayni",
+ version = "1.00",
+ comment = "Goodies that complement the Husayni font by Idris Samawi Hamid.",
+ author = "Idris Samawi Hamid and Hans Hagen",
+ featuresets = {
+ default = {
+ key = value, <table>, ...
+ },
+ ...
+ },
+ stylistics = {
+ key = value, ...
+ },
+ colorschemes = {
+ default = {
+ [1] = {
+ "glyph_a.one", "glyph_b.one", ...
+ },
+ ...
+ }
+ }
+}
+\stoptyping
+
+We already saw the list of special features and these are defined in the \type
+{stylistics} stable. In this document, that list was typeset using the following
+(hybrid) code:
+
+\typebuffer[stylistics]
+
+The table with colorscheme that we showed is generated with:
+
+\getbuffer[colorschemes]
+
+In a similar fashion we typeset the featuresets:
+
+\typebuffer[featuresets]
+
+The unprocessed \type {featuresets} table can contain one or more
+named sets and each set can be a mixture of tables and key value
+pairs. Say that we have:
+
+\starttyping
+ default = {
+ kern = "yes", { ss01 = "yes" }, { ss02 = "yes" }, "mark"
+ }
+\stoptyping
+
+Given the previous definition, the order of processing is as follows.
+
+\startitemize[packed,n]
+\startitem \type {{ ss01 = "yes" }} \stopitem
+\startitem \type {{ ss02 = "yes" }} \stopitem
+\startitem \type {mark} (set to \type {"yes"}) \stopitem
+\startitem \type {kern = "yes"} \stopitem
+\stopitemize
+
+So, first we process the indexed part if the list, and next the hash. Already set
+values are not set again. The advantage of using a \LUA\ table is that you can
+simplify definitions. Before we return the table we can define local variables,
+like:
+
+\starttyping
+local one = { ss01 = "yes" }
+local two = { ss02 = "yes" }
+local pos = { kern = "yes", mark = "yes" }
+\stoptyping
+
+and use them in:
+
+\starttyping
+default = {
+ one, two, pos
+}
+\stoptyping
+
+That way we we can conveniently define all kind of interesting combinations
+without the need for many repetitive entries.
+
+The \type {colorsets} table has named subtables that are (currently) indexed by
+number. Each number is associated with a color (at the \TEX\ end) and is coupled
+to a list of glyphs. As you can see here, we use the name of the glyph. We prefer
+this over an index (that can change during development of the font). We cannot
+use \UNICODE\ points as many such glyphs are just variants and have no unique
+code.
+
+\stopsection
+
+\startsection[title={Optimizing Arabic}]
+
+\usemodule[abr-01,narrowtt]
+
+\enabletrackers[fonts.goodies,nodes.optimizer]
+
+The ultimate goal of the Oriental \TEX\ project is to improve the look and feel
+of a paragraph. Because \TEX\ does a pretty good job on breaking the paragraph
+into lines, and because complicating the paragraph builder is not a good idea, we
+finally settled on improving the lines that result from the par builder. This
+approach is rather close to what scribes do and the advanced Husayni font
+provides features that support this.
+
+In principle the current optimizer can replace character expansion but that would
+slow down considerably. Also, for that we first have to clean up the experimental
+\LUA\ based par builder.
+
+After several iterations the following approach was chosen.
+
+\startitemize
+
+\startitem
+ We typeset the paragraph with an optimal feature set. In our case this is
+ \type {husayni-default}.
+\stopitem
+
+\startitem
+ Next we define two sets of additional features: one that we can apply to
+ shrink words, and one that does the opposite.
+\stopitem
+
+\startitem
+ When the line has a badness we don't like, we either stepwise shrink words or
+ stretch them, depending on how bad things are.
+\stopitem
+
+\stopitemize
+
+The set that takes care of shrinking is defined as:
+
+\starttyping
+\definefontfeature
+ [shrink]
+ [husayni-default]
+ [flts=yes,js17=yes,ss05=yes,ss11=yes,ss06=yes,ss09=yes]
+\stoptyping
+
+Stretch has a few more variants:
+
+\starttyping
+\definefontfeature
+ [minimal_stretching]
+ [husayni-default]
+ [js11=yes,js03=yes]
+\definefontfeature
+ [medium_stretching]
+ [husayni-default]
+ [js12=yes,js05=yes]
+\definefontfeature
+ [maximal_stretching]
+ [husayni-default]
+ [js13=yes,js05=yes,js09=yes]
+\definefontfeature
+ [wide_all]
+ [husayni-default]
+ [js11=yes,js12=yes,js13=yes,js05=yes,js09=yes]
+\stoptyping
+
+Next we define a font solution:
+
+\starttyping
+\definefontsolution
+ [FancyHusayni]
+ [goodies=husayni,
+ less=shrink,
+ more={minimal_stretching,medium_stretching,maximal_stretching,wide_all}]
+\stoptyping
+
+Because these featuresets relate quite closely to the font design we don't use
+this way if defining but put the definitions in the goodies file:
+
+\startntyping
+ .....
+ featuresets = { -- here we don't have references to featuresets
+ default = {
+ default,
+ },
+ minimal_stretching = {
+ default, js11 = yes, js03 = yes,
+ },
+ medium_stretching = {
+ default, js12=yes, js05=yes,
+ },
+ maximal_stretching= {
+ default, js13 = yes, js05 = yes, js09 = yes,
+ },
+ wide_all = {
+ default, js11 = yes, js12 = yes, js13 = yes, js05 = yes, js09 = yes,
+ },
+ shrink = {
+ default, flts = yes, js17 = yes, ss05 = yes, ss11 = yes, ss06 = yes, ss09 = yes,
+ },
+ },
+ solutions = { -- here we have references to featuresets, so we use strings!
+ experimental = {
+ less = { "shrink" },
+ more = { "minimal_stretching", "medium_stretching", "maximal_stretching", "wide_all" },
+ },
+ },
+ .....
+\stopntyping
+
+Now the definition looks much simpler:
+
+\startbuffer
+\definefontsolution
+ [FancyHusayni]
+ [goodies=husayni,
+ solution=experimental]
+\stopbuffer
+
+% unhbox to show stretch - shrink
+
+\typebuffer \getbuffer
+
+{\em I want some funny text (complete with translation). Actually I want all
+examples translated.}
+
+\startbuffer[sample]
+قد صعدنا
+ذرى الحقائق بأقدام النبوة و الولاية و نورنا
+سبع طبقات أعلام الفتوى بالهداية فنحن ليوث
+الوغى و غيوث الندى و طعان العدى و فينا السيف و
+القلم في العاجل و لواء الحمد
+و الحوض في الآجل و أسباطنا حلفاء
+الدين و خلفاء النبيين و مصابيح الأمم و مفاتيح
+الكرم فالكليم ألبس حلة الاصطفاء لما عهدنا
+منه الوفاء و روح القدس في جنان الصاقورة ذاق من
+حدائقنا الباكورة و شيعتنا الفئة الناجية و
+الفرقة الزاكية و صاروا لنا ردءا و صونا و على
+الظلمة ألبا و عونا و سينفجر لهم ينابيع
+الحيوان بعد لظى النيران لتمام آل حم و طه و
+الطواسين من السنين و هذا الكتاب درة من درر
+الرحمة و قطرة من بحر الحكمة و كتب الحسن بن
+علي العسكري في سنة أربع و خمسين و مائتين
+\stopbuffer
+
+\startbuffer
+\definedfont[husayni*husayni-default at 24pt]
+% todo: factor ivm grid, so the next line looks hackery:
+\expanded{\setuplocalinterlinespace[line=\the\dimexpr2\lineheight]}
+\setfontsolution[FancyHusayni]% command will change
+\enabletrackers[builders.paragraphs.solutions.splitters.colors]
+\righttoleft \getbuffer[sample] \par
+\disabletrackers[builders.paragraphs.solutions.splitters.colors]
+\resetfontsolution
+\stopbuffer
+
+In the following example the yellow words are stretched and the green ones are
+shrunken.\footnote {Make sure that the paragraph is finished (for instance using
+\type {\par} before resetting it.)}
+
+\typebuffer
+
+\start \getbuffer \stop
+
+% \setfontsolution[FancyHusayni]x\par\resetfontsolution
+% \setfontsolution[FancyHusayni]x\par\resetfontsolution
+% \setfontsolution[FancyHusayni]x\par\resetfontsolution
+% \setfontsolution[FancyHusayni]x\par\resetfontsolution
+% \setfontsolution[FancyHusayni]x\par\resetfontsolution
+% \setfontsolution[FancyHusayni]x\par\resetfontsolution
+% \setfontsolution[FancyHusayni]x\par\resetfontsolution
+% \setfontsolution[FancyHusayni]x\par\resetfontsolution
+
+% \startbuffer[sample]
+% \dorecurse{50}{الحمد \recurselevel\space}
+% \stopbuffer
+
+This mechanism is somewhat experimental as is the (user) interface. It is also
+rather slow compared to normal processing. There is room for improvement but I
+will do that when other components are more stable so that simple variants (that
+we can use here) can be derived.
+
+When criterium~0 used above is changed into for instance~5 processing is faster.
+When you enable a preroll processing is more time consuming. Examples of settings
+are:
+
+\starttyping
+\setupfontsolutions[method={preroll,normal},criterium=2]
+\setupfontsolutions[method={preroll,random},criterium=5]
+\setupfontsolutions[method=reverse,criterium=8]
+\setupfontsolutions[method=random,criterium=2]
+\stoptyping
+
+Using a preroll is slower because it first tries all variants and then settles
+for the best; otherwise we process the first till the last solution till the
+criterium is satisfied.
+
+% {\em Todo: show normal, reverse and random.}
+% {\em Todo: bind setting to paragraph.}
+
+\stopsection
+
+\startsection[title={Protrusion and expansion}]
+
+There are two entries in the goodies file that relate to advanced parbuilding:
+\type {protrusions} and \type {expansions}.
+
+\starttyping
+protrusions = {
+ vectors = {
+ pure = {
+ [0x002C] = { 0, 1 }, -- comma
+ [0x002E] = { 0, 1 }, -- period
+ .....
+ }
+ }
+}
+\stoptyping
+
+These vectors are similar to the ones defined globally but the vectors defined in
+a goodie file are taken instead when present.
+
+\stopsection
+
+\startsection[title={Filenames and properties}]
+
+As filenames and properties of fonts are somewhat of an inconsistent mess, we can
+use the goodies to provide more information:
+
+\starttyping
+files = {
+ name = "antykwapoltawskiego", -- shared
+ list = {
+ ["AntPoltLtCond-Regular.otf"] = {
+ -- name = "antykwapoltawskiego",
+ style = "regular",
+ weight = "light",
+ width = "condensed",
+ },
+ .....
+ }
+ }
+}
+\stoptyping
+
+Internally this will become a lookup tree so that we can have a predictable
+specifier:
+
+\starttyping
+\definefont[MyFontA][antykwapoltawskiego-bold-italic]
+\definefont[MyFontB][antykwapoltawskiego-normal-italic-condensed]
+\definefont[MyFontC][antykwapoltawskiego-light-regular-semicondensed]
+\stoptyping
+
+Of course one needs to load the goodies. One way to force that is:
+
+\starttyping
+\loadfontgoodies[antykwapoltawskiego]
+\stoptyping
+
+The Antykwa Poltawskiego family is rather large and provides all kind of
+combinations.
+
+\startbuffer
+\usemodule[fonts-goodies]
+\showfontgoodiesfiles[name=antykwapoltawskiego]
+\stopbuffer
+
+\startpacked
+\getbuffer
+\stoppacked
+
+This list is generated with:
+
+\typebuffer
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/hybrid/hybrid-grouping.tex b/doc/context/sources/general/manuals/hybrid/hybrid-grouping.tex
new file mode 100644
index 000000000..44018e746
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/hybrid-grouping.tex
@@ -0,0 +1,545 @@
+\startcomponent hybrid-grouping
+
+\startbuffer[MyAbstract]
+\StartAbstract
+ In this article I will discuss a few things that are hard to do in
+ traditional \TEX, but reasonable well in \LUATEX.
+\StopAbstract
+\stopbuffer
+
+\doifmodeelse {tugboat} {
+ \usemodule[tug-01,abr-01]
+ \setvariables
+ [tugboat]
+ [columns=yes]
+ \setvariables
+ [tugboat]
+ [year=2010,
+ volume=99,
+ number=9,
+ page=99]
+ \setvariables
+ [tugboat]
+ [title=Grouping,
+ subtitle=A few things you can do with LUATEX,
+ keywords=,
+ author=Hans Hagen,
+ address=PRAGMA ADE\\Ridderstraat 27\\8061GH Hasselt NL,
+ email=pragma@wxs.nl]
+ %
+ % we use a buffer as abstract themselves are buffers and
+ % inside macros we loose line endings and such
+ \getbuffer[MyAbstract]
+ %
+ \StartArticle
+} {
+ \environment hybrid-environment
+ \startchapter[title={Grouping}]
+}
+
+\setupbars[rulethickness=.15] % nicer
+
+\startsection [title={Variants}]
+
+After using \TEX\ for a while you get accustomed to one of its interesting
+concepts: grouping. Programming languages like \PASCAL\ and \MODULA\ have
+keywords \type {begin} and \type {end}. So, one can say:
+
+\starttyping
+if test then begin
+ print_bold("test 1")
+ print_bold("test 2")
+end
+\stoptyping
+
+Other languages provide a syntax like:
+
+\starttyping
+if test {
+ print_bold("test 1")
+ print_bold("test 2")
+}
+\stoptyping
+
+So, in those languages the \type {begin} and \type {end} and|/|or the curly
+braces define a \quote {group} of statements. In \TEX\ on the other hand we have:
+
+\starttyping
+test \begingroup \bf test \endgroup test
+\stoptyping
+
+Here the second \type {test} comes out in a bold font and the switch to bold
+(basically a different font is selected) is reverted after the group is closed.
+So, in \TEX\ grouping deals with scope and not with grouping things together.
+
+In other languages it depends on the language of locally defined variables are
+visible afterwards but in \TEX\ they're really local unless a \type {\global}
+prefix (or one of the shortcuts) is used.
+
+In languages like \LUA\ we have constructs like:
+
+\starttyping
+for i=1,100 do
+ local j = i + 20
+ ...
+end
+\stoptyping
+
+Here \type {j} is visible after the loop ends unless prefixed by \type {local}.
+Yet another example is \METAPOST:
+
+\starttyping
+begingroup ;
+ save n ; numeric n ; n := 10 ;
+ ...
+endgroup ;
+\stoptyping
+
+Here all variables are global unless they are explicitly saved inside a group.
+This makes perfect sense as the resulting graphic also has a global (accumulated)
+property. In practice one rarely needs grouping, contrary to \TEX\ where one
+really wants to keep changes local, if only because document content is so
+unpredictable that one never knows when some change in state happens.
+
+In principle it is possible to carry over information across a group boundary.
+Consider this somewhat unrealistic example:
+
+\starttyping
+\begingroup
+ \leftskip 10pt
+ \begingroup
+ ....
+ \advance\leftskip 10pt
+ ....
+ \endgroup
+\endgroup
+\stoptyping
+
+How do we carry the advanced leftskip over the group boundary without using a
+global assignment which could have more drastic side effects? Here is the trick:
+
+\starttyping
+\begingroup
+ \leftskip 10pt
+ \begingroup
+ ....
+ \advance\leftskip 10pt
+ ....
+ \expandafter
+ \endgroup
+ \expandafter \leftskip \the\leftskip
+\endgroup
+\stoptyping
+
+This is typical the kind of code that gives new users the creeps but normally
+they never have to do that kind of coding. Also, that kind of tricks assumes that
+one knows how many groups are involved.
+
+\stopsection
+
+\startsection [title={Implication}]
+
+What does this all have to do with \LUATEX\ and \MKIV ? The user interface of
+\CONTEXT\ provide lots of commands like:
+
+\starttyping
+\setupthis[style=bold]
+\setupthat[color=green]
+\stoptyping
+
+Most of them obey grouping. However, consider a situation where we use \LUA\ code
+to deal with some aspect of typesetting, for instance numbering lines or adding
+ornamental elements to the text. In \CONTEXT\ we flag such actions with
+attributes and often the real action takes place a bit later, for instance when a
+paragraph or page becomes available.
+
+A comparable pure \TEX\ example is the following:
+
+\starttyping
+{test test \bf test \leftskip10pt test}
+\stoptyping
+
+Here the switch to bold happens as expected but no leftskip of 10pt is applied.
+This is because the set value is already forgotten when the paragraph is actually
+typeset. So in fact we'd need:
+
+\starttyping
+{test test \bf test \leftskip10pt test \par}
+\stoptyping
+
+Now, say that we have:
+
+\starttyping
+{test test test \setupflag[option=1] \flagnexttext test}
+\stoptyping
+
+We flag some text (using an attribute) and expect it to get a treatment where
+option~1 is used. However, the real action might take place when \TEX\ deals with
+the paragraph or page and by that time the specific option is already forgotten
+or it might have gotten another value. So, the rather natural \TEX\ grouping does
+not work out that well in a hybrid situation.
+
+As the user interface assumes a consistent behaviour we cannot simply make these
+settings global even if this makes much sense in practice. One solution is to
+carry the information with the flagged text i.e.\ associate it somehow in the
+attribute's value. Of course, as we never know in advance when this information
+is used, this might result in quite some states being stored persistently.
+
+A side effect of this \quote {problem} is that new commands might get suboptimal
+user interfaces (especially inheritance or cloning of constructs) that are
+somewhat driven by these \quote {limitations}. Of course we may wonder if the end
+user will notice this.
+
+To summarize this far, we have three sorts of grouping to deal with:
+
+\startitemize[item]
+
+\startitem
+ \TEX's normal grouping model limits its scope to the local situation and
+ normally has only direct and local consequences. We cannot carry information
+ over groups.
+\stopitem
+
+\startitem
+ Some of \TEX's properties are applied later, for instance when a paragraph or
+ page is typeset and in order to make \quote {local} changes effective, the
+ user needs to add explicit paragraph ending commands (like \type {\par} or
+ \type {\page}).
+\stopitem
+
+\startitem
+ Features dealt with asynchronously by \LUA\ are at that time unaware of
+ grouping and variables set that were active at the time the feature was
+ triggered so there we need to make sure that our settings travel with the
+ feature. There is not much that a user can do about it as this kind of
+ management has to be done by the feature itself.
+\stopitem
+
+\stopitemize
+
+\stopsection
+
+It is the third case that we will give an example of in the next section. We
+leave it up to the user if it gets noticed on the user interface.
+
+\startsection [title={An example}]
+
+A group of commands that has been reimplemented using a hybrid solution is
+underlining or more generic: bars. Just take a look at the following examples and
+try to get an idea on how to deal with grouping. Keep in mind that:
+
+\startitemize[packed]
+\startitem
+ Colors are attributes and are resolved in the backend, so way after the
+ paragraph has been typeset.
+\stopitem
+\startitem
+ Overstrike is also handled by an attribute and gets applied in the backend as
+ well, before colors are applied.
+\stopitem
+\startitem
+ Nested overstrikes might have different settings.
+\stopitem
+\startitem
+ An overstrike rule either inherits from the text or has its own color
+ setting.
+\stopitem
+\stopitemize
+
+First an example where we inherit color from the text:
+
+\startbuffer
+\definecolor[myblue][b=.75]
+\definebar[myoverstrike][overstrike][color=]
+
+Test \myoverstrike{%
+ Test \myoverstrike{\myblue
+ Test \myoverstrike{Test}
+ Test}
+ Test}
+Test
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Because color is also implemented using attributes and processed later on we can
+access that information when we deal with the bar.
+
+The following example has its own color setting:
+
+\startbuffer
+\definecolor[myblue][b=.75]
+\definecolor[myred] [r=.75]
+\definebar[myoverstrike][overstrike][color=myred]
+
+Test \myoverstrike{%
+ Test \myoverstrike{\myblue
+ Test \myoverstrike{Test}
+ Test}
+ Test}
+Test
+\stopbuffer
+
+\typebuffer \getbuffer
+
+See how we can color the levels differently:
+
+\startbuffer
+\definecolor[myblue] [b=.75]
+\definecolor[myred] [r=.75]
+\definecolor[mygreen][g=.75]
+
+\definebar[myoverstrike:1][overstrike][color=myblue]
+\definebar[myoverstrike:2][overstrike][color=myred]
+\definebar[myoverstrike:3][overstrike][color=mygreen]
+
+Test \myoverstrike{%
+ Test \myoverstrike{%
+ Test \myoverstrike{Test}
+ Test}
+ Test}
+Test
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Watch this:
+
+\startbuffer
+\definecolor[myblue] [b=.75]
+\definecolor[myred] [r=.75]
+\definecolor[mygreen][g=.75]
+
+\definebar[myoverstrike][overstrike][max=1,dy=0,offset=.5]
+\definebar[myoverstrike:1][myoverstrike][color=myblue]
+\definebar[myoverstrike:2][myoverstrike][color=myred]
+\definebar[myoverstrike:3][myoverstrike][color=mygreen]
+
+Test \myoverstrike{%
+ Test \myoverstrike{%
+ Test \myoverstrike{Test}
+ Test}
+ Test}
+Test
+\stopbuffer
+
+\typebuffer \getbuffer
+
+It this the perfect user interface? Probably not, but at least it keeps the
+implementation quite simple.
+
+The behaviour of the \MKIV\ implementation is roughly the same as in \MKII,
+although now we specify the dimensions and placement in terms of the ratio of the
+x-height of the current font.
+
+\startbuffer
+Test \overstrike{Test \overstrike{Test \overstrike{Test} Test} Test} Test \blank
+Test \underbar {Test \underbar {Test \underbar {Test} Test} Test} Test \blank
+Test \overbar {Test \overbar {Test \overbar {Test} Test} Test} Test \blank
+Test \underbar {Test \overbar {Test \overstrike{Test} Test} Test} Test \blank
+\stopbuffer
+
+\typebuffer \getbuffer
+
+As an extra this mechanism can also provide simple backgrounds. The normal
+background mechanism uses \METAPOST\ and the advantage is that we can use
+arbitrary shapes but it also carries some limitations. When the development of
+\LUATEX\ is a bit further along the road I will add the possibility to use
+\METAPOST\ shapes in this mechanism.
+
+Before we come to backgrounds, first take a look at these examples:
+
+\startbuffer
+\startbar[underbar] \input zapf \stopbar \blank
+\startbar[underbars] \input zapf \stopbar \blank
+\stopbuffer
+
+\typebuffer \getbuffer
+
+First notice that it is no problem to span multiple lines and that hyphenation is
+not influenced at all. Second you can see that continuous rules are also
+possible. From such a continuous rule to a background is a small step:
+
+\startbuffer
+\definebar
+ [backbar]
+ [offset=1.5,rulethickness=2.8,color=blue,
+ continue=yes,order=background]
+
+\definebar
+ [forebar]
+ [offset=1.5,rulethickness=2.8,color=blue,
+ continue=yes,order=foreground]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+The following example code looks messy but this has to do with the fact that we
+want properly spaced sample injection.
+
+\startbuffer
+from here
+ \startcolor[white]%
+ \startbar[backbar]%
+ \input zapf
+ \removeunwantedspaces
+ \stopbar
+ \stopcolor
+\space till here
+\blank
+from here
+ \startbar[forebar]%
+ \input zapf
+ \removeunwantedspaces
+ \stopbar
+\space till here
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Watch how we can use the order to hide content. By default rules are drawn on top
+of the text.
+
+Nice effects can be accomplished with transparencies:
+
+\startbuffer
+\definecolor [tblue] [b=.5,t=.25,a=1]
+\setupbars [backbar] [color=tblue]
+\setupbars [forebar] [color=tblue]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+We use as example:
+
+\startbuffer[sample]
+from here {\white \backbar{test test}
+ \backbar {nested nested} \backbar{also also}} till here
+from here {\white \backbar{test test
+ \backbar {nested nested} also also}} till here
+from here {\white \backbar{test test
+ \backbar {nested nested} also also}} till here
+\stopbuffer
+
+\typebuffer[sample] \getbuffer[sample]
+
+The darker nested variant is just the result of two transparent bars on top of
+each other. We can limit stacking, for instance:
+
+\startbuffer
+\setupbars[backbar][max=1]
+\setupbars[forebar][max=1]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+This gives
+
+\getbuffer[sample]
+
+There are currently some limitations that are mostly due to the fact that we use
+only one attribute for this feature and a change in value triggers another
+handling. So, we have no real nesting here.
+
+The default commands are defined as follows:
+
+\starttyping
+\definebar[overstrike] [method=0,dy= 0.4,offset= 0.5]
+\definebar[underbar] [method=1,dy=-0.4,offset=-0.3]
+\definebar[overbar] [method=1,dy= 0.4,offset= 1.8]
+
+\definebar[overstrikes] [overstrike] [continue=yes]
+\definebar[underbars] [underbar] [continue=yes]
+\definebar[overbars] [overbar] [continue=yes]
+\stoptyping
+
+As the implementation is rather non|-|intrusive you can use bars
+almost everywhere. You can underbar a whole document but equally
+well you can stick to fooling around with for instance formulas.
+
+\startbuffer
+\definecolor [tred] [r=.5,t=.25,a=1]
+\definecolor [tgreen] [g=.5,t=.25,a=1]
+\definecolor [tblue] [b=.5,t=.25,a=1]
+
+\definebar [mathred] [backbar] [color=tred]
+\definebar [mathgreen] [backbar] [color=tgreen]
+\definebar [mathblue] [backbar] [color=tblue]
+
+\startformula
+ \mathred{e} = \mathgreen{\white mc} ^ {\mathblue{\white e}}
+\stopformula
+\stopbuffer
+
+\typebuffer
+
+We get:
+
+\getbuffer
+
+We started this chapter with some words on grouping. In the examples you see no
+difference between adding bars and for instance applying color. However you need
+to keep in mind that this is only because behind the screens we keep the current
+settings along with the attribute. In practice this is only noticeable when you
+do lots of (local) changes to the settings. Take:
+
+\starttyping
+{test test test \setupbars[color=red] \underbar{test} test}
+\stoptyping
+
+This results in a local change in settings, which in turn will associate a new
+attribute to \type {\underbar}. So, in fact the following underbar becomes a
+different one than previous underbars. When the page is prepared, the unique
+attribute value will relate to those settings. Of course there are more
+mechanisms where such associations take place.
+
+\stopsection
+
+\startsection [title={More to come}]
+
+Is this all there is? No, as usual the underlying mechanisms can be used for
+other purposes as well. Take for instance inline notes:
+
+\startbuffer
+According to the wikipedia this is the longest English word:
+pneumonoultramicroscopicsilicovolcanoconiosis~\shiftup {other long
+words are pseudopseudohypoparathyroidism and
+flocci­nauci­nihili­pili­fication}. Of course in languages like Dutch and
+German we can make arbitrary long words by pasting words together.
+\stopbuffer
+
+\typebuffer
+
+This will produce:
+
+\getbuffer
+
+I wonder when users really start using such features.
+
+\stopsection
+
+\startsection [title={Summary}]
+
+Although under the hood the \MKIV\ bar commands are quite different from their
+\MKII\ counterparts users probably won't notice much difference at first sight.
+However, the new implementation does not interfere with the par builder and other
+mechanisms. Plus, it is configurable and it offers more functionality. However,
+as it is processed rather delayed, side effects might occur that are not
+foreseen.
+
+So, if you ever notice such unexpected side effects, you know where it might
+result from: what you asked for is processed much later and by then the
+circumstances might have changed. If you suspect that it relates to grouping
+there is a simple remedy: define a new bar command in the document preamble
+instead of changing properties mid|-|document. After all, you are supposed to
+separate rendering and content in the first place.
+
+\stopsection
+
+\doifmodeelse {tugboat} {
+ \StopArticle
+} {
+ \stopchapter
+}
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/hybrid/hybrid-inserts.tex b/doc/context/sources/general/manuals/hybrid/hybrid-inserts.tex
new file mode 100644
index 000000000..d483f1305
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/hybrid-inserts.tex
@@ -0,0 +1,506 @@
+% language=uk
+
+\startcomponent hybrid-inserts
+
+\environment hybrid-environment
+
+\startchapter[title={Deeply nested notes}]
+
+\startsection [title={Introduction}]
+
+One of the mechanisms that is not on a users retina when he or she starts using
+\TEX\ is \quote {inserts}. An insert is material that is entered at one point but
+will appear somewhere else in the output. Footnotes for instance can be
+implemented using inserts. You create a reference symbol in the running text and
+put note text at the bottom of the page or at the end of a chapter or document.
+But as you don't want to do that moving around of notes yourself \TEX\ provides
+macro writers with the inserts mechanism that will do some of the housekeeping.
+Inserts are quite clever in the sense that they are taken into account when \TEX\
+splits off a page. A single insert can even be split over two or more pages.
+
+Other examples of inserts are floats that move to the top or bottom of the page
+depending on requirements and|/|or available space. Of course the macro package
+is responsible for packaging such a float (for instance an image) but by finally
+putting it in an insert \TEX\ itself will attempt to deal with accumulated floats
+and help you move kept over floats to following pages. When the page is finally
+assembled (in the output routine) the inserts for that page become available and
+can be put at the spot where they belong. In the process \TEX\ has made sure that
+we have the right amount of space available.
+
+However, let's get back to notes. In \CONTEXT\ we can have many variants of them,
+each taken care of by its own class of inserts. This works quite well, as long as
+a note is visible for \TEX\ which means as much as: ends up in the main page
+flow. Consider the following situation:
+
+\starttyping
+before \footnote{the note} after
+\stoptyping
+
+When the text is typeset, a symbol is placed directly after the word \quote
+{before} and the note itself ends up at the bottom of the page. It also works
+when we wrap the text in an horizontal box:
+
+\starttyping
+\hbox{before \footnote{the note} after}
+\stoptyping
+
+But it fails as soon as we go further:
+
+\starttyping
+\hbox{\hbox{before \footnote{the note} after}}
+\stoptyping
+
+Here we get the reference but no note. This also fails:
+
+\starttyping
+\vbox{before \footnote{the note} after}
+\stoptyping
+
+Can you imagine what happens if we do the following?
+
+\starttyping
+\starttabulate
+\NC knuth \NC test \footnote{knuth} \input knuth \NC \NR
+\NC tufte \NC test \footnote{tufte} \input tufte \NC \NR
+\NC ward \NC test \footnote{ward} \input ward \NC \NR
+\stoptabulate
+\stoptyping
+
+This mechanism uses alignments as well as quite some boxes. The paragraphs are
+nicely split over pages but still appear as boxes to \TEX\ which make inserts
+invisible. Only the three symbols would remain visible. But because in \CONTEXT\
+we know when notes tend to disappear, we take some provisions, and contrary to
+what you might expect the notes actually do show up. However, they are flushed in
+such a way that they end up on the page where the table ends. Normally this is no
+big deal as we will often use local notes that end up at the end of the table
+instead of the bottom of the page, but still.
+
+The mechanism to deal with notes in \CONTEXT\ is somewhat complex at the source
+code level. To mention a few properties we have to deal with:
+
+\startitemize[packed]
+\startitem Notes are collected and can be accessed any time. \stopitem
+\startitem Notes are flushed either directly or delayed. \stopitem
+\startitem Notes can be placed anywhere, any time, perhaps in subsets. \stopitem
+\startitem Notes can be associated to lines in paragraphs. \stopitem
+\startitem Notes can be placed several times with different layouts. \stopitem
+\stopitemize
+
+So, we have some control over flushing and placement, but real synchronization
+between for instance table entries having notes and the note content ending up on
+the same page is impossible.
+
+In the \LUATEX\ team we have been discussing more control over inserts and we
+will definitely deal with that in upcoming releases as more control is needed for
+complex multi|-|column document layouts. But as we have some other priorities
+these extensions have to wait.
+
+As a prelude to them I experimented a bit with making these deeply buried inserts
+visible. Of course I use \LUA\ for this as \TEX\ itself does not provide the kind
+of access we need for this kind of of manipulations.
+
+\stopsection
+
+\startsection [title={Deep down inside}]
+
+Say that we have the following boxed footnote. How does that end up in \LUATEX ?
+
+\starttyping
+\vbox{a\footnote{b}c}
+\stoptyping
+
+Actually it depends on the macro package but the principles remain the same. In
+\LUATEX\ 0.50 and the \CONTEXT\ version used at the time of this writing we get
+(nested) linked list that prints as follows:
+
+\starttyping
+<node 26 < 862 > nil : vlist 0>
+ <node 401 < 838 > 507 : hlist 1>
+ <node 30 < 611 > 580 : whatsit 6>
+ <node 611 < 580 > 493 : hlist 0>
+ <node 580 < 493 > 653 : glyph 256>
+ <node 493 < 653 > 797 : penalty 0>
+ <node 653 < 797 > 424 : kern 1>
+ <node 797 < 424 > 826 : hlist 2>
+ <node 445 < 563 > nil : hlist 2>
+ <node 420 < 817 > 821 : whatsit 35>
+ <node 817 < 821 > nil : glyph 256>
+ <node 507 < 826 > 1272 : kern 1>
+ <node 826 < 1272 > 1333 : glyph 256>
+ <node 1272 < 1333 > 830 : penalty 0>
+ <node 1333 < 830 > 888 : glue 15>
+ <node 830 < 888 > nil : glue 9>
+ <node 838 < 507 > nil : ins 131>
+\stoptyping
+
+The numbers are internal references to the node memory pool. Each line represents
+a node:
+
+\starttyping
+<node prev_index < index > next_index : type subtype>
+\stoptyping
+
+The whatsits carry directional information and the deeply nested hlist is the
+note symbol. If we forget about whatsits, kerns and penalties, we can simplify
+this listing to:
+
+\starttyping
+<node 26 < 862 > nil : vlist 0>
+ <node 401 < 838 > 507 : hlist 1>
+ <node 580 < 493 > 653 : glyph 256>
+ <node 797 < 424 > 826 : hlist 2>
+ <node 445 < 563 > nil : hlist 2>
+ <node 817 < 821 > nil : glyph 256>
+ <node 826 < 1272 > 1333 : glyph 256>
+ <node 838 < 507 > nil : ins 131>
+\stoptyping
+
+So, we have a vlist (the \type {\vbox}), which has one line being a hlist. Inside
+we have a glyph (the \quote{a}) followed by the raised symbol (the
+\quote{\high{1}}) and next comes the second glyph (the \quote{b}). But watch how
+the insert ends up at the end of the line. Although the insert will not show up
+in the document, it sits there waiting to be used. So we have:
+
+\starttyping
+<node 26 < 862 > nil : vlist 0>
+ <node 401 < 838 > 507 : hlist 1>
+ <node 838 < 507 > nil : ins 131>
+\stoptyping
+
+but we need:
+
+\starttyping
+<node 26 < 862 > nil : vlist 0>
+ <node 401 < 838 > 507 : hlist 1>
+<node 838 < 507 > nil : ins 131>
+\stoptyping
+
+Now, we could use the fact that inserts end up at the end of the line, but as we
+need to recursively identify them anyway, we cannot actually use this fact to
+optimize the code.
+
+In case you wonder how multiple inserts look like, here is an example:
+
+\starttyping
+\vbox{a\footnote{b}\footnote{c}d}
+\stoptyping
+
+This boils down to:
+
+\starttyping
+<node 26 < 1324 > nil : vlist 0>
+ <node 401 < 1348 > 507 : hlist 1>
+ <node 1348 < 507 > 457 : ins 131>
+ <node 507 < 457 > nil : ins 131>
+\stoptyping
+
+In case you wonder what more can end up at the end, vertically adjusted material
+(\type {\vadjust}) as well as marks (\type {\mark}) also get that treatment.
+
+\starttyping
+\vbox{a\footnote{b}\vadjust{c}\footnote{d}e\mark{f}}
+\stoptyping
+
+As you see, we start with the line itself, followed by a mixture of inserts and
+vertically adjusted content (that will be placed before that line). This trace
+also shows the list 2~levels deep.
+
+\starttyping
+<node 26 < 1324 > nil : vlist 0>
+ <node 401 < 1348 > 507 : hlist 1>
+ <node 1348 < 507 > 862 : ins 131>
+ <node 507 < 862 > 240 : hlist 1>
+ <node 862 < 240 > 2288 : ins 131>
+ <node 240 < 2288 > nil : mark 0>
+\stoptyping
+
+Currently vadjust nodes have the same subtype as an ordinary hlist but in
+\LUATEX\ versions beyond 0.50 they will have a dedicated subtype.
+
+We can summarize the pattern of one \quote {line} in a vertical list as:
+
+\starttyping
+[hlist][insert|mark|vadjust]*[penalty|glue]+
+\stoptyping
+
+In case you wonder what happens with for instance specials, literals (and other
+whatits): these end up in the hlist that holds the line. Only inserts, marks and
+vadjusts migrate to the outer level, but as they stay inside the vlist, they are
+not visible to the page builder unless we're dealing with the main vertical list.
+Compare:
+
+\starttyping
+this is a regular paragraph possibly with inserts and they
+will be visible as the lines are appended to the main
+vertical list \par
+\stoptyping
+
+with:
+
+\starttyping
+but \vbox {this is a nested paragraph where inserts will
+stay with the box} and not migrate here \par
+\stoptyping
+
+So much for the details; let's move on the how we can get
+around this phenomenon.
+
+\stopsection
+
+\startsection [title={Some \LUATEX\ magic}]
+
+The following code is just the first variant I made and \CONTEXT\ ships with a
+more extensive variant. Also, in \CONTEXT\ this is part of a larger suite of
+manipulative actions but it does not make much sense (at least not now) to
+discuss this framework here.
+
+We start with defining a couple of convenient shortcuts.
+
+\starttyping
+local hlist = node.id('hlist')
+local vlist = node.id('vlist')
+local ins = node.id('ins')
+\stoptyping
+
+We can write a more compact solution but splitting up the functionality better
+shows what we're doing. The main migration function hooks into the callback \type
+{build_page}. Contrary to other callbacks that do phases in building lists and
+pages this callback does not expect the head of a list as argument. Instead, we
+operate directly on the additions to the main vertical list which is accessible
+as \type {tex.lists.contrib_head}.
+
+\starttyping
+local deal_with_inserts -- forward reference
+
+local function migrate_inserts(where)
+ local current = tex.lists.contrib_head
+ while current do
+ local id = current.id
+ if id == vlist or id == hlist then
+ current = deal_with_inserts(current)
+ end
+ current = current.next
+ end
+end
+
+callback.register('buildpage_filter',migrate_inserts)
+\stoptyping
+
+So, effectively we scan for vertical and horizontal lists and deal with embedded
+inserts when we find them. In \CONTEXT\ the migratory function is just one of the
+functions that is applied to this filter.
+
+We locate inserts and collect them in a list with \type {first} and \type {last}
+as head and tail and do so recursively. When we have run into inserts we insert
+them after the horizontal or vertical list that had embedded them.
+
+\starttyping
+local locate -- forward reference
+
+deal_with_inserts = function(head)
+ local h, first, last = head.list, nil, nil
+ while h do
+ local id = h.id
+ if id == vlist or id == hlist then
+ h, first, last = locate(h,first,last)
+ end
+ h = h.next
+ end
+ if first then
+ local n = head.next
+ head.next = first
+ first.prev = head
+ if n then
+ last.next = n
+ n.prev = last
+ end
+ return last
+ else
+ return head
+ end
+end
+\stoptyping
+
+The \type {locate} function removes inserts and adds them to a new list, that is
+passed on down in recursive calls and eventually is returned back to the caller.
+
+\starttyping
+locate = function(head,first,last)
+ local current = head
+ while current do
+ local id = current.id
+ if id == vlist or id == hlist then
+ current.list, first, last = locate(current.list,first,last)
+ current = current.next
+ elseif id == ins then
+ local insert = current
+ head, current = node.remove(head,current)
+ insert.next = nil
+ if first then
+ insert.prev = last
+ last.next = insert
+ else
+ insert.prev = nil
+ first = insert
+ end
+ last = insert
+ else
+ current = current.next
+ end
+ end
+ return head, first, last
+end
+\stoptyping
+
+As we can encounter the content several times in a row, it makes sense to mark
+already processed inserts. This can for instance be done by setting an attribute.
+Of course one has to make sure that this attribute is not used elsewhere.
+
+\starttyping
+if not node.has_attribute(current,8061) then
+ node.set_attribute(current,8061,1)
+ current = deal_with_inserts(current)
+end
+\stoptyping
+
+or integrated:
+
+\starttyping
+local has_attribute = node.has_attribute
+local set_attribute = node.set_attribute
+
+local function migrate_inserts(where)
+ local current = tex.lists.contrib_head
+ while current do
+ local id = current.id
+ if id == vlist or id == hlist then
+ if has_attribute(current,8061) then
+ -- maybe some tracing message
+ else
+ set_attribute(current,8061,1)
+ current = deal_with_inserts(current)
+ end
+ end
+ current = current.next
+ end
+end
+
+callback.register('buildpage_filter',migrate_inserts)
+\stoptyping
+
+\stopsection
+
+\startsection [title={A few remarks}]
+
+Surprisingly, the amount of code needed for insert migration is not that large.
+This makes one wonder why \TEX\ does not provide this feature itself as it could
+have saved macro writers quite some time and headaches. Performance can be a
+reason, unpredictable usage and side effects might be another. Only one person
+knows the answer.
+
+In \CONTEXT\ this mechanism is built in and it can be enabled by saying:
+
+\starttyping
+\automigrateinserts
+\automigratemarks
+\stoptyping
+
+As you can see here, we can also migrate marks. Future versions of \CONTEXT\ will
+do this automatically and also provide some control over what classes of inserts
+are moved around. We will probably overhaul the note handling mechanism a few
+more times anyway as \LUATEX\ evolves and the demands from critical editions that
+use many kind of notes raise.
+
+\stopsection
+
+\startsection [title={Summary of code}]
+
+The following code should work in plain \TEX:
+
+\starttyping
+\directlua 0 {
+local hlist = node.id('hlist')
+local vlist = node.id('vlist')
+local ins = node.id('ins')
+local has_attribute = node.has_attribute
+local set_attribute = node.set_attribute
+
+local status = 8061
+
+local function locate(head,first,last)
+ local current = head
+ while current do
+ local id = current.id
+ if id == vlist or id == hlist then
+ current.list, first, last = locate(current.list,first,last)
+ current = current.next
+ elseif id == ins then
+ local insert = current
+ head, current = node.remove(head,current)
+ insert.next = nil
+ if first then
+ insert.prev, last.next = last, insert
+ else
+ insert.prev, first = nil, insert
+ end
+ last = insert
+ else
+ current = current.next
+ end
+ end
+ return head, first, last
+end
+
+local function migrate_inserts(where)
+ local current = tex.lists.contrib_head
+ while current do
+ local id = current.id
+ if id == vlist or id == hlist and
+ not has_attribute(current,status) then
+ set_attribute(current,status,1)
+ local h, first, last = current.list, nil, nil
+ while h do
+ local id = h.id
+ if id == vlist or id == hlist then
+ h, first, last = locate(h,first,last)
+ end
+ h = h.next
+ end
+ if first then
+ local n = current.next
+ if n then
+ last.next, n.prev = n, last
+ end
+ current.next, first.prev = first, current
+ current = last
+ end
+ end
+ current = current.next
+ end
+end
+
+callback.register('buildpage_filter', migrate_inserts)
+}
+\stoptyping
+
+Alternatively you can put the code in a file and load that with:
+
+\starttyping
+\directlua {require "luatex-inserts.lua"}
+\stoptyping
+
+A simple plain test is:
+
+\starttyping
+\vbox{a\footnote{1}{1}b}
+\hbox{a\footnote{2}{2}b}
+\stoptyping
+
+The first footnote only shows up when we have hooked our migrator into the
+callback. A not that bad result for 60 lines of \LUA\ code.
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/hybrid/hybrid-intermezzo.tex b/doc/context/sources/general/manuals/hybrid/hybrid-intermezzo.tex
new file mode 100644
index 000000000..cad7b3dbe
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/hybrid-intermezzo.tex
@@ -0,0 +1,21 @@
+% engine=luatex language=uk
+
+\startcomponent hybrid-intermezzo
+
+\environment hybrid-environment
+
+\startchapter[title={The team}]
+
+\startlinecorrection
+ %externalfigure[luatex-co.jpg][width=\textwidth]
+ \externalfigure[luatex-co-acceptablelowres.jpg][width=\textwidth]
+\stoplinecorrection
+
+The \LUATEX\ project started in 2005 as a follow up on some experiments. The core
+team consists of Taco Hoekwater, Hartmut Henkel and Hans Hagen, here pictured at
+work by Duane Bibby. The machine they work on is inspired by the Paige Typesetter
+(\type {http://www.twainquotes.com/paige.html}).
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/hybrid/hybrid-introduction.tex b/doc/context/sources/general/manuals/hybrid/hybrid-introduction.tex
new file mode 100644
index 000000000..c40544582
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/hybrid-introduction.tex
@@ -0,0 +1,152 @@
+% language=uk
+
+\startcomponent hybrid-languages
+
+\environment hybrid-environment
+
+\startchapter[title={Introduction}]
+
+We're halfway the development of \LUATEX\ (mid 2009) and substantial parts of
+\CONTEXT\ have been rewritten using a mixture of \LUA\ and \TEX. In another
+document, \quotation {\CONTEXT\ \MKII--\MKIV, the history of \LUATEX\
+2006--2009}, we have kept track of how both systems evolved so far\footnote
+{Parts of this have been published in usergroup magazines like the \MAPS,
+\TUGBOAT, and conference proceedings of \EUROTEX\ and \TUG.}. Here we continue
+that story which eventually will end with both systems being stable and more of
+less complete in their basic features.
+
+The title of this document needs some explanation, although the symbols on the
+cover might give a clue already. In \CONTEXT\ \MKIV, as it is now, we mix several
+languages:
+
+\startitemize[packed]
+\startitem
+ good old \TEX: here you will see \type {{}} all over the place
+\stopitem
+\startitem
+ fancy \METAPOST: there we use quite some \type {()}
+\stopitem
+\startitem
+ lean and mean \LUA: both \type{{}} and \type {()} show up a lot there
+\stopitem
+\startitem
+ unreadable but handy \XML: immediately recognizable by the use of \type {<>}
+\stopitem
+\stopitemize
+
+As we use all of them mixed, you can consider \MKIV\ to be a hybrid system and
+just as with hybrid cars, efficiency is part of the concept.
+
+% copied from chrt-xml.tex
+
+\startFLOWchart[conversion 10]
+ \startFLOWcell
+ \name {TEX}
+ \location {2,1}
+ \shape {action}
+ \text {\TEX}
+ \connection [b+l] {CONTEXT}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {XML}
+ \location {1,2}
+ \shape {action}
+ \text {XML}
+ \connection [rl] {CONTEXT}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {METAPOST}
+ \location {2,3}
+ \shape {action}
+ \text {\METAPOST}
+ \connection [t-l] {CONTEXT}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {CONTEXT}
+ \location {3,2}
+ \shape {action}
+ \text {\ConTeXt}
+ \connection [rl] {PDF}
+ \connection [-b-t] {UTILITIES}
+ \connection [-t-b] {LUA}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {PDF}
+ \location {4,2}
+ \shape {action}
+ \text {PDF}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {UTILITIES}
+ \location {3,3}
+ \shape {action}
+ \text {UTILITIES}
+ \connection [+t+b] {CONTEXT}
+ \stopFLOWcell
+ \startFLOWcell
+ \name {LUA}
+ \location {3,1}
+ \shape {action}
+ \text {LUA}
+ \connection [+b+t] {CONTEXT}
+ \stopFLOWcell
+\stopFLOWchart
+
+\startlinecorrection[big]
+\FLOWchart[conversion 10]
+\stoplinecorrection
+
+In this graphic we've given \LUA\ a somewhat different place than the other three
+languages. First of all we have \LUA\ inside \TEX, which is kind of hidden, but
+at the same time we can use \LUA\ to provide whatever extra features we need,
+especially when we've reached the state where we can load libraries. In a similar
+fashion we have utilities (now all written in \LUA) that can manage your workflow
+or aspects of a run (the \type {mtxrun} script plays a central role in this).
+
+The mentioned history document was (and still is) a rather good testcase for
+\LUATEX\ and \MKIV. We explore some new features and load a lot of fonts, some
+really large. This document will also serve that purpose. This is one of the
+reasons why we have turned on grid snapping (and occasionally some tracing).
+
+Keeping track of the history of \LUATEX\ and \MKIV\ in a document serves several
+purposes. Of course it shows what has been done. It also serves as a reminder of
+why it was done that way. As mentioned it serves as test, both in functionality
+and performance, and as such it's always one of the first documents we run after
+a change in the code. Most of all this document serves as an extension to my
+limited memory. When I look at my source code I often can remember when and why
+it was done that way at that time. However, writing it down more explicitly helps
+me to remember more and might help users to get some insight in the developments
+and decisions made. \footnote {I read a lot and regret that I forget most of what
+I read so fast. I might as well forget what I wrote so have some patience with me
+as I repeat myself occasionally.}
+
+A couple of new features were added to \LUATEX\ in 2010 but the years 2011 and
+2012 were mostly spent on fixing issues and reaching a stable state. In parallel
+parts of \CONTEXT\ were rewritten using \LUA\ and new possibilities have been
+explored. Indeed \LUATEX\ had become pretty stable, especially because we used it
+in production. There are still a lot of things on the agenda but with \LUATEX\
+0.75 we have reached yet another milestone: integration of \LUA\ 5.2, exploration
+of \LUAJIT, and the move forward to a version of \METAPOST\ that supports doubles
+as numeric type. Luigi Scarso and I also started the SwigLib project that will
+make the use of external libraries more easy.
+
+Of course, although I wrote most of the text, this document is as much a
+reflection of what Taco Hoekwater and Hartmut Henkel come up with, but all errors
+you find here are definitely mine. Some chapters have been published in \TUGBOAT,
+the \MAPS\ and other usergroup journals. Some chapters have become manuals, like
+the one on spreadsheets. I also owe thanks to the \CONTEXT\ community and those
+active on the mailing list: it's a real pleasure to see how fast new features are
+picked up and how willing to test users are when new betas show up.
+
+\blank
+
+Hans Hagen, Hasselt NL,\crlf September 2009 \emdash\ December 2012
+
+\blank
+
+\type {http://www.luatex.org}\crlf
+\type {http://www.pragma-ade.com}
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/hybrid/hybrid-italics.tex b/doc/context/sources/general/manuals/hybrid/hybrid-italics.tex
new file mode 100644
index 000000000..65eeccde3
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/hybrid-italics.tex
@@ -0,0 +1,378 @@
+% language=uk
+
+% \enabletrackers[typesetters.italics]
+
+% We need to make sure that this works ok, also in future versions
+% so we add some more (re)settings than needed.
+
+\startcomponent hybrid-italics
+
+\environment hybrid-environment
+
+\ctxcommand{pushitaliccorrection()}
+
+\startchapter[title={Italic correction}]
+
+\component hybrid-note
+
+\startsection [title={Introduction}]
+
+During the 2011 \CONTEXT\ conference there were presentations by Thomas Schmitz
+and Jano Kula where they demonstrated advanced rendering of document source
+encoded in \XML. When looking at the examples on screen using many fonts I
+realized that (also given my own workflows) it was about time to look into
+automated italic correction in the perspective of \MKIV.
+
+In the Lucida Math project it already became clear that italics in \OPENTYPE\
+math fonts are to be ignored. And, as in regular \OPENTYPE\ fonts italic
+correction is basically non|-|existent some alternative approach is needed there
+as well. In \CONTEXT\ you can already for quite a while enable the \type {itlc}
+feature which adds italic correction to shapes using some heuristics. However, in
+\TEX\ this kind of correction is never applied automatically but is triggered by
+the \type {\/} command. Commands like \type {\em} deal with italic correction
+automatically but otherwise you need to take care of it yourself. In a time when
+you not always have control over the source code or when you are coding in a
+format that has no provisions for it (for instance \XML) some further automatism
+makes sense. You might even wonder if explicit corrections still make sense.
+
+In this chapter we discuss an alternative approach in \MKIV. This is a typical
+example of an experimental feature that might need further discussion (probably
+at a next conference). One of our mottos is that the document source should be as
+clean as possible and this is one way to go.
+
+\stopsection
+
+\startsection [title={Some preparations}]
+
+Adding italic correction to a font is easy: you just add the right feature
+directive. You can do this for all italic (or oblique) fonts in one go:
+
+\starttyping
+\definefontfeature[default][default][itlc=yes]
+\stoptyping
+
+At some point this might become the default in \CONTEXT. After that the \type
+{\/} command can do the job, but as mentioned, we don't really want to do this
+each time it's needed. If you never plan to use that command you can disable
+\TEX's built|-|in mechanism completely by setting the \type {textitalics}
+parameter.
+
+\starttyping
+\definefontfeature[default][default][itlc=yes,textitalics=yes]
+\stoptyping
+
+It even makes sense then to redefine the the \type {\/} command:
+
+\starttyping
+\let\/=/
+\stoptyping
+
+so that we have a nice escape in tune with the other escapes.
+
+\stopsection
+
+\startsection [title={Controlling correction}]
+
+In the following examples we will use Cambria as an example as it shows the
+effect rather prominently.
+
+\startbuffer[setups]
+\definefontfeature[itclyes][default][itlc=yes,textitalics=no]
+
+\definefont[itlcregular] [name:cambria*itclyes sa 4]
+\definefont[itlcbold] [name:cambriabold*itclyes sa 4]
+\definefont[itlcitalic] [name:cambriaitalic*itclyes sa 4]
+\definefont[itlcbolditalic][name:cambriabolditalic*itclyes sa 4]
+\stopbuffer
+
+\getbuffer[setups]
+
+\let\/=\italiccorrection % to be sure
+
+\defineframed[ITLCexampleA][frame=off,foregroundcolor=white,background=color,backgroundcolor=red]
+\defineframed[ITLCexampleB][frame=off,foregroundcolor=white,background=color,backgroundcolor=blue]
+\defineframed[ITLCexampleC][frame=off,foregroundcolor=white,background=color,backgroundcolor=green]
+\defineframed[ITLCexampleD][frame=off,foregroundcolor=white,background=color,backgroundcolor=yellow]
+\defineframed[ITLCexampleE][frame=off,foregroundcolor=white,background=color,backgroundcolor=gray]
+
+We start with a simple case: just an emphasized word in a small
+line:
+
+\starttyping
+\setupitaliccorrection[none]\tf test {\it test} test
+\setupitaliccorrection[none]\tf test {\it test\/} test}
+\setupitaliccorrection[text]\tf test {\it test} test}
+\stoptyping
+
+Decorated for the purpose of this demonstration this comes out as follows:
+
+\startlinecorrection[blank] \vbox \bgroup \offinterlineskip
+ \ITLCexampleA{\setupitaliccorrection[none]\itlcregular test {\itlcitalic test} test} \par
+ \ITLCexampleB{\setupitaliccorrection[none]\itlcregular test {\itlcitalic test\/} test} \par
+ \ITLCexampleC{\setupitaliccorrection[text]\itlcregular test {\itlcitalic test} test} \par
+\egroup \stoplinecorrection
+
+In the first line no correction is applied. The second line shows \TEX\ in action
+and the third line demonstrates the automatically applied correction. The
+explicit directive in the second lines of course gives most control but is also a
+no|-|go when you have lots of them.
+
+Actually, \TEX\ is clever enough to ignore multiple corrections: it will only
+apply one after a glyph.
+
+\starttyping
+\setupitaliccorrection[none]\tf test {\it test} test}
+\setupitaliccorrection[none]\tf test {\it test\/} test}
+\setupitaliccorrection[none]\tf test {\it test\/\/\/\/} test}
+\stoptyping
+
+So we get this:
+
+\startlinecorrection[blank] \vbox \bgroup \offinterlineskip
+ \ITLCexampleA{\setupitaliccorrection[none]\itlcregular test {\itlcitalic test} test} \par
+ \ITLCexampleB{\setupitaliccorrection[none]\itlcregular test {\itlcitalic test\/} test} \par
+ \ITLCexampleC{\setupitaliccorrection[none]\itlcregular test {\itlcitalic test\/\/\/\/} test} \par
+\egroup \stoplinecorrection
+
+It can be argued that in a decent usage of \CONTEXT\ you will never switch to
+another font this way. Instead you will do this:
+
+\starttyping
+\definehighlight[important][style=\it]
+
+test \important{test} test
+\stoptyping
+
+However, this will not correct at all, so in fact you have to use an environment
+that takes care of automatically adding the \type {\/} at the end. Quite from the
+start the \type {\em} command does this, with the added benefit of dealing with
+bold and nested emphasizing.
+
+Which brings us to cases where you don't want to apply correction, like:
+
+\starttyping
+\setupitaliccorrection[none]\tf test {\it test}{\bi test}
+\setupitaliccorrection[none]\tf test {\it test\/}{\bi test}
+\setupitaliccorrection[text]\tf test {\it test}{\bi test}
+\stoptyping
+
+Now we get:
+
+\startlinecorrection[blank] \vbox \bgroup \offinterlineskip
+ \ITLCexampleA{\setupitaliccorrection[none]\itlcregular test {\itlcitalic test}{\itlcbolditalic test}} \par
+ \ITLCexampleB{\setupitaliccorrection[none]\itlcregular test {\itlcitalic test\/}{\itlcbolditalic test}} \par
+ \ITLCexampleC{\setupitaliccorrection[text]\itlcregular test {\itlcitalic test}{\itlcbolditalic test}} \par
+\egroup \stoplinecorrection
+
+A variant on this is:
+
+\starttyping
+\setupitaliccorrection[none]\tf test {\it test \bi test}
+\setupitaliccorrection[none]\tf test {\it test\/ \bi test}
+\setupitaliccorrection[text]\tf test {\it test \bi test}
+\stoptyping
+
+which gives:
+
+\startlinecorrection[blank] \vbox \bgroup \offinterlineskip
+ \ITLCexampleA{\setupitaliccorrection[none]\itlcregular test {\itlcitalic test \itlcbolditalic test}} \par
+ \ITLCexampleB{\setupitaliccorrection[none]\itlcregular test {\itlcitalic test\/ \itlcbolditalic test}} \par
+ \ITLCexampleC{\setupitaliccorrection[text]\itlcregular test {\itlcitalic test \itlcbolditalic test}} \par
+\egroup \stoplinecorrection
+
+So, no italic correction is added between italic shapes of different fonts.
+Ideally we should have some inter|-|character kerning, but that is currently
+beyond this mechanism.
+
+What does the \type {text} mean in the setup command? The following table tells
+what keywords can be passed:
+
+\starttabulate
+\NC \type {text} \NC only apply correction to running text \NC \NR
+\NC \type {always} \NC also apply correction to end end of a list \NC \NR
+\NC \type {global} \NC enable this mechanism globally (more efficient) \NC \NR
+\NC \type {none} \NC disable this mechanism \NC \NR
+\stoptabulate
+
+The difference between \type {text} and \type {always} is best demonstrated with
+an example:
+
+\starttyping
+\setupitaliccorrection[none]\tf test {\it test}}
+\setupitaliccorrection[always]\tf test {\it test}}
+\setupitaliccorrection[text]\tf test {\it test}}
+\stoptyping
+
+This gives:
+
+\startlinecorrection[blank] \vbox \bgroup \offinterlineskip
+ \ITLCexampleA{\setupitaliccorrection[none]\itlcregular test {\itlcitalic test}} \par
+ \ITLCexampleD{\setupitaliccorrection[always]\itlcregular test {\itlcitalic test}} \par
+ \ITLCexampleC{\setupitaliccorrection[text]\itlcregular test {\itlcitalic test}} \par
+\egroup \stoplinecorrection
+
+The \type {always} option will flush pending corrections at a boundary, like the
+edge of a box (or line). Contrary to \TEX's italic corrections, the \MKIV\
+variants are glue and they will disappear whenever \TEX\ likes to get rid of
+glue, for instance at line breaks. \footnote {There is some room for improvement
+here, for instance we can take penalties into account.}
+
+While writing this, we're still talking of an experimental setup so there might
+be extensions or changes to this mechanism. \footnote {For instance, I'm
+considering extending this mechanism to provide kerning between fonts, something
+for a rainy afternoon.}
+
+As it's just a guess you can influence the amount of automatic correction by
+specifying a factor. We show an exmaple of this.
+
+\startbuffer
+\definefontfeature[itclyes] [default][itlc=yes,textitalics=delay]
+\definefontfeature[itclyesten] [default][itlc=10, textitalics=delay]
+\definefontfeature[itclyeshundred][default][itlc=100,textitalics=delay]
+
+\definefont[itlcitalicyes] [name:cambriaitalic*itclyes sa 4]
+\definefont[itlcitalicten] [name:cambriaitalic*itclyesten sa 4]
+\definefont[itlcitalichundred] [name:cambriaitalic*itclyeshundred sa 4]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+We show all three variants:
+
+\starttyping
+\setupitaliccorrection[text]\itlcregular test {\itlcitalicyes test} test\par
+\setupitaliccorrection[text]\itlcregular test {\itlcitalicten test} test\par
+\setupitaliccorrection[text]\itlcregular test {\itlcitalichundred test} test\par
+\stoptyping
+
+This becomes:
+
+\startlinecorrection[blank] \vbox \bgroup \offinterlineskip
+ \ITLCexampleA{\setupitaliccorrection[text]\itlcregular test {\itlcitalicyes test} test}\par
+ \ITLCexampleB{\setupitaliccorrection[text]\itlcregular test {\itlcitalicten test} test}\par
+ \ITLCexampleC{\setupitaliccorrection[text]\itlcregular test {\itlcitalichundred test} test}\par
+\egroup \stoplinecorrection
+
+\stopsection
+
+\startsection [title={Saving resources}]
+
+You can keep track of what gets done by enabling a tracker:
+
+\starttyping
+\enabletrackers[typesetters.italics]
+\stoptyping
+
+You will notice that there are occasional reports about correction being
+inserted, ignored and removed. As node lists are parsed there is some extra
+overhead, but not that much. The \TEX\ solution (using \type {\/}) is quit
+efficient because that command directly injects a kern without too much analysis.
+You can gain some efficiency for the automated variant by using the \type
+{global} option:
+
+\starttyping
+\setupitaliccorrection[always,global]
+\stoptyping
+
+Also, you can disable \TEX's mechanism effectively by not passing the italic
+information to the font machinery at all:
+
+\starttyping
+\definefontfeature[italics][default][itlc=yes,textitalics=yes]
+\stoptyping
+
+The \type {itlc} feature will tag the font for italic corrections but the \type
+{textitalics} option will make sure that this information is not passed to the
+\TEX\ font handler but kept private.
+
+As adding the italic corrections to a font takes memory and a little bit of extra
+load time, we can delay this process till it is really needed.
+
+\starttyping
+\definefontfeature[italics][default][itlc=yes,textitalics=delay]
+\stoptyping
+
+In this case the correction will be calculated when needed and cached for later
+usage. At some point this might become the default \CONTEXT\ behaviour.
+
+\stopsection
+
+\startsection [title={Math}]
+
+Italic correction in math plays a role when dealing with traditional \TEX\ fonts,
+where glyph dimensions can have a special meaning. However, in \OPENTYPE\ math
+the correction is mostly ignored. You can disable it altogether and let an
+alternative mechanism deal with it. This mechanism is still somewhat experimental
+but is controlled as follows:
+
+\starttyping
+\switchtobodyfont[xits]
+\setupmathematics[italics=no] test $a;b;a; b; f;$ test}
+\setupmathematics[italics=1] test $a;b;a; b; f;$ test}
+\setupmathematics[italics=2] test $a;b;a; b; f;$ test}
+\setupmathematics[italics=3] test $a;b;a; b; f;$ test}
+\setupmathematics[italics=4] test $a;b;a; b; f;$ test}
+\stoptyping
+
+This gives:
+
+\start \switchtobodyfont[xits,42pt] \stop
+
+\startlinecorrection[blank] \vbox \bgroup \offinterlineskip \enabletrackers[math.italics]
+ \ITLCexampleE{\switchtobodyfont[xits,42pt]\setupmathematics[italics=no] test $a;b;a; b; f;$ test}\par
+ \ITLCexampleA{\switchtobodyfont[xits,42pt]\setupmathematics[italics=1] test $a;b;a; b; f;$ test}\par
+ \ITLCexampleB{\switchtobodyfont[xits,42pt]\setupmathematics[italics=2] test $a;b;a; b; f;$ test}\par
+ \ITLCexampleC{\switchtobodyfont[xits,42pt]\setupmathematics[italics=3] test $a;b;a; b; f;$ test}\par
+ \ITLCexampleD{\switchtobodyfont[xits,42pt]\setupmathematics[italics=4] test $a;b;a; b; f;$ test}\par
+\egroup \stoplinecorrection \disabletrackers[math.italics]
+
+The actual rendering can depend on the settings in the goodies file, for
+instance:
+
+\starttyping
+local italics = {
+ defaultfactor = 0.025,
+ disableengine = true, % feature: mathitalics=yes
+ corrections = {
+ -- [0x1D44E] = 0.99, -- a (fraction of quad)
+ -- [0x1D44F] = 100, -- b (font points)
+ [0x1D453] = -0.0375, -- f
+ }
+}
+
+return {
+ name = "xits-math",
+ version = "1.00",
+ comment = "Goodies that complement xits (by Khaled Hosny).",
+ author = "Hans Hagen",
+ copyright = "ConTeXt development team",
+ mathematics = {
+ italics = {
+ ["xits-math"] = italics,
+ },
+ }
+}
+\stoptyping
+
+Corrections can be specified in the font's units or as a fraction (smaller than
+1) in which case it will be multiplied by \type {1em}. You can set the font
+feature \type {mathitalics} to \type {yes} to inhibit the engine's built|-|in
+mechanism completely and rely on the alternative approach but as users will
+seldom define math feature sets themselves, there is also the possibility to
+disable the engine in the goodies file.
+
+The process can be watched by setting a tracker:
+
+\starttyping
+\enabletrackers[math.italics]
+\stoptyping
+
+\stopsection
+
+\stopchapter
+
+\ctxcommand{popitaliccorrection()}
+
+\disabletrackers[typesetters.italics]
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/hybrid/hybrid-jit.tex b/doc/context/sources/general/manuals/hybrid/hybrid-jit.tex
new file mode 100644
index 000000000..d769ccf80
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/hybrid-jit.tex
@@ -0,0 +1,653 @@
+% language=uk engine=luatex
+
+\startcomponent hybrid-backends
+
+\environment hybrid-environment
+
+\logo[SWIGLIB] {SwigLib}
+\logo[LUAJIT] {LuaJIT}
+\logo[LUAJITTEX]{Luajit\TeX}
+\logo[JIT] {jit}
+
+\startchapter[title={Just in time}]
+
+\startsection [title={Introduction}]
+
+Reading occasional announcements about \LUAJIT,\footnote {\LUAJIT\ is written by
+Mike Pall and more information about it and the technology it uses is at \type
+{http://luajit.org}, a site also worth visiting for its clean design.} one starts
+wondering if just||in||time compilation can speed up \LUATEX. As a side track of
+the \SWIGLIB\ project and after some discussion, Luigi Scarso decided to compile
+a version of \LUATEX\ that had the \JIT\ compiler as the \LUA\ engine. That's
+when our journey into \JIT\ began.
+
+We started with \LINUX\ 32-bit as this is what Luigi used at that time. Some
+quick first tests indicated that the \LUAJIT\ compiler made \CONTEXT\ \MKIV\ run
+faster but not that much. Because \LUAJIT\ claims to be much faster than stock
+\LUA, Luigi then played a bit with \type {ffi}, i.e.\ mixing \CCODE\ and \LUA,
+especially data structures. There is indeed quite some speed to gain here;
+unfortunately, we would have to mess up the \CONTEXT\ code base so much that one
+might wonder why \LUA\ was used in the first place. I could confirm these
+observations in a Xubuntu virtual machine in \VMWARE\ running under 32-bit
+Windows 8. So, we decided to conduct some more experiments.
+
+A next step was to create a 64-bit binary because the servers at \PRAGMA\ are
+\KVM\ virtual machines running a 64-bit OpenSuse 12.1 and 12.2. It took a bit of
+effort to get a \JIT\ version compiled because Luigi didn't want to mess up the
+regular codebase too much. This time we observed a speedup of about 40\% on some
+runs so we decided to move on to \WINDOWS\ to see if we could observe a similar
+effect there. And indeed, when we adapted Akira Kakuto's \WINDOWS\ setup a bit we
+could compile a version for \WINDOWS\ using the native \MICROSOFT\ compiler. On
+my laptop a similar speedup was observed, although by then we saw that in
+practice a 25\% speedup was about what we could expect. A bonus is that making
+formats and identifying fonts is also faster.
+
+So, in that stage, we could safely conclude that \LUATEX\ combined with \LUAJIT\
+made sense if you want a somewhat faster version. But where does the speedup come
+from? The easiest way to see if jitting has effect is to turn it on and off.
+
+\starttyping
+jit.on()
+jit.off()
+\stoptyping
+
+To our surprise \CONTEXT\ runs are not much influenced by turning the jitter on
+or off. \footnote {We also tweaked some of the fine|-|tuning parameters of
+\LUAJIT\ but didn't notice any differences. In due time more tests will
+be done.} This means that the improvement comes from other places:
+
+\startitemize[packed,n]
+\startitem The virtual machine is a different one, and targets the platforms that
+it runs on. This means that regular bytecode also runs faster. \stopitem
+\startitem The garbage collector is the one from \LUA\ 5.2, so that can make a
+difference. It looks like memory consumption is somewhat lower. \stopitem
+\startitem Some standard library functions are recognized and supported in a more
+efficient way. Think of \type {math.sin}. \stopitem
+\startitem Some built-in functions like \type {type} are probably dealt with in
+a more efficient way. \stopitem
+\stopitemize
+
+The third item is an important one. We don't use that many standard functions.
+For instance, if we need to go from characters to bytes and vice versa, we have
+to do that for \UTF\ so we use some dedicated functions or \LPEG. If in \CONTEXT\
+we parse strings, we often use \LPEG\ instead of string functions anyway. And if
+we still do use string functions, for instance when dealing with simple strings,
+it only happens a few times.
+
+The more demanding \CONTEXT\ code deals with node lists, which means frequent
+calls to core \LUATEX\ functions. Alas, jitting doesn't help much there unless we
+start messing with \type {ffi} which is not on the agenda. \footnote {If we want
+to improve these mechanisms it makes much more sense to make more helpers.
+However, profiling has shown us that the most demanding code is already quite
+optimized.}
+
+\stopsection
+
+\startsection[title=Benchmarks]
+
+Let's look at some of the benchmarks. The first one uses \METAPOST\ and because
+we want to see if calculations are faster, we draw a path with a special pen so
+that some transformations have to be done in the code that generates the \PDF\
+output. We only show the \MSWINDOWS\ and 64-bit \LINUX\ tests here. The 32-bit
+tests are consistent with those on \MSWINDOWS\ so we didn't add those timings
+here (also because in the meantime Luigi's machine broke down and he moved on
+to 64 bits).
+
+\typefile{benchmark-1.tex}
+
+The following times are measured in seconds. They are averages of 5~runs. There
+is a significant speedup but jitting doesn't do much.
+
+% mingw crosscompiled 5.2 / new mp : 25.5
+
+\starttabulate[|l|r|r|r|]
+\HL
+\NC \NC traditional \NC \JIT\ on \NC \JIT\ off \NC \NR
+\HL
+\NC \bf Windows 8 \NC 26.0 \NC 20.6 \NC 20.8 \NC \NR
+\NC \bf Linux 64 \NC 34.2 \NC 14.9 \NC 14.1 \NC \NR
+\HL
+\stoptabulate
+
+Our second example uses multiple fonts in a paragraph and adds color as well.
+Although well optimized, font||related code involves node list parsing and a
+bit of calculation. Color again deals with node lists and the backend
+code involves calculations but not that many. The traditional run on \LINUX\ is
+somewhat odd, but might have to do with the fact that the \METAPOST\ library
+suffers from the 64 bits. It is at least an indication that optimizations make
+less sense if there is a different dominant weak spot. We have to look into this
+some time.
+
+\typefile{benchmark-2.tex}
+
+Again jitting has no real benefits here, but the overall gain in speed is quite
+nice. It could be that the garbage collector plays a role here.
+
+% mingw crosscompiled 5.2 / new mp : 64.3
+
+\starttabulate[|l|r|r|r|]
+\HL
+\NC \NC traditional \NC \JIT\ on \NC \JIT\ off \NC \NR
+\HL
+\NC \bf Windows 8 \NC 54.6 \NC 36.0 \NC 35.9 \NC \NR
+\NC \bf Linux 64 \NC 46.5 \NC 32.0 \NC 31.7 \NC \NR
+\HL
+\stoptabulate
+
+This benchmark writes quite a lot of data to the console, which can have impact on
+performance as \TEX\ flushes on a per||character basis. When one runs \TEX\ as a
+service this has less impact because in that case the output goes into the void.
+There is a lot of file reading going on here, but normally the operating system
+will cache data, so after a first run this effect disappears. \footnote {On \MSWINDOWS\
+it makes sense to use \type {console2} because due to some clever buffering
+tricks it has a much better performance than the default console.}
+
+The third benchmark is one that we often use for testing regression in speed of
+the \CONTEXT\ core code. It measures the overhead in the page builder without
+special tricks being used, like backgrounds. The document has some 1000 pages.
+
+\typefile{benchmark-3.tex}
+
+These numbers are already quite okay for the normal version but the speedup of
+the \LUAJIT\ version is consistent with the expectations we have by now.
+
+% mingw crosscompiled 5.2 / new mp : 6.8
+
+\starttabulate[|l|r|r|r|]
+\HL
+\NC \NC traditional \NC \JIT\ on \NC \JIT\ off \NC \NR
+\HL
+\NC \bf Windows 8 \NC 4.5 \NC 3.6 \NC 3.6 \NC \NR
+\NC \bf Linux 64 \NC 4.8 \NC 3.9 \NC 4.0 \NC \NR
+\HL
+\stoptabulate
+
+The fourth benchmark uses some structuring, which involved \LUA\ tables and
+housekeeping, an itemize, which involves numbering and conversions, and a table
+mechanism that uses more \LUA\ than \TEX.
+
+\typefile{benchmark-4.tex}
+
+Here it looks like \JIT\ slows down the process, but of course we shouldn't take the last
+digit too seriously.
+
+% mingw crosscompiled 5.2 / new mp : 27.4
+
+\starttabulate[|l|r|r|r|]
+\HL
+\NC \NC traditional \NC \JIT\ on \NC \JIT\ off \NC \NR
+\HL
+\NC \bf Windows 8 \NC 20.9 \NC 16.8 \NC 16.5 \NC \NR
+\NC \bf Linux 64 \NC 20.4 \NC 16.0 \NC 16.1 \NC \NR
+\HL
+\stoptabulate
+
+Again, this example does a bit of logging, but not that much reading from file as
+buffers are kept in memory.
+
+We should start wondering when \JIT\ does kick in. This is what the fifth
+benchmark does.
+
+\typefile{benchmark-5.tex}
+
+Here we see \JIT\ having an effect! First of all the \LUAJIT\ versions are now 4~times
+faster. Making the \type {sin} a \type {local} function (the numbers after /) does not
+make much of a difference because the math functions are optimized anyway.. See how
+we're still faster when \JIT\ is disabled:
+
+% mingw crosscompiled 5.2 / new mp : 2.5/2.1
+
+\starttabulate[|l|r|r|r|]
+\HL
+\NC \NC traditional \NC \JIT\ on \NC \JIT\ off \NC \NR
+\HL
+\NC \bf Windows 8 \NC 1.97 / 1.54 \NC 0.46 / 0.45 \NC 0.73 / 0.61 \NC \NR
+\NC \bf Linux 64 \NC 1.62 / 1.27 \NC 0.41 / 0.42 \NC 0.67 / 0.52 \NC \NR
+\HL
+\stoptabulate
+
+Unfortunately this kind of calculation (in these amounts) doesn't happen that
+often but maybe some users can benefit.
+
+\stopsection
+
+\startsection[title=Conclusions]
+
+So, does it make sense to complicate the \LUATEX\ build with \LUAJIT ? It does
+when speed matters, for instance when \CONTEXT\ is run as a service. Some 25\% gain
+in speed means less waiting time, better use of \CPU\ cycles, less energy
+consumption, etc. On the other hand, computers are still becoming faster and compared
+to those speed|-|ups the 25\% is not that much. Also, as \TEX\ deals with files,
+the advance of \SSD\ disks and larger and faster memory helps too. Faster and
+larger \CPU\ caches contributes too. On the other hand, multiple cores don't help that
+much on a system that only runs \TEX. Interesting is that multi|-|core
+architectures tend to run at slower speeds than single cores where more heat can
+be dissipated and in that respect servers mostly running \TEX\ are better off with
+fewer cores that can run at higher frequencies. But anyhow, 25\% is still better
+than nothing and it makes my old laptop feel faster. It prolongs the lifetime
+of machines!
+
+Now, say that we cannot speed up \TEX\ itself that much, but that there is still
+something to gain at the \LUA\ end \emdash\ what can we reasonably expect? First of all
+we need to take into account that only part of the runtime is due to \LUA. Say
+that this is 25\% for a document of average complexity.
+
+\startnarrower
+runtime\low{tex} + runtime\low{lua} = 100
+\stopnarrower
+
+We can consider the time needed by \TEX\ to be constant; so if that is
+75\% of the total time (say 100 seconds) to begin with, we have:
+
+\startnarrower
+75 + runtime\low{lua} = 100
+\stopnarrower
+
+It will be clear that if we bring down the runtime to 80\% (80 seconds) of the
+original we end up with:
+
+\startnarrower
+75 + runtime\low{lua} = 80
+\stopnarrower
+
+And the 25 seconds spent in \LUA\ went down to 5, meaning that \LUA\ processing
+got 5 times faster! It is also clear that getting much more out of \LUA\
+becomes hard. Of course we can squeeze more out of it, but \TEX\ still needs its
+time. It is hard to measure how much time is actually spent in \LUA. We do keep
+track of some times but it is not that accurate. These experiments and the gain
+in speed indicate that we probably spend more time in \LUA\ than we first
+guessed. If you look in the \CONTEXT\ source it's not that hard to imagine that
+indeed we might well spend 50\% or more of our time in \LUA\ and|/|or in
+transferring control between \TEX\ and \LUA. So, in the end there still might
+be something to gain.
+
+Let's take benchmark 4 as an example. At some point we measured for a regular
+\LUATEX\ 0.74 run 27.0 seconds and for a \LUAJITTEX\ run 23.3 seconds. If we
+assume that the \LUAJIT\ virtual machine is twice as fast as the normal one, some
+juggling with numbers makes us conclude that \TEX\ takes some 19.6 seconds of
+this. An interesting border case is \type {\directlua}: we sometimes pass quite
+a lot of data and that gets tokenized first (a \TEX\ activity) and the resulting
+token list is converted into a string (also a \TEX\ activity) and then converted
+to bytecode (a \LUA\ task) and when okay executed by \LUA. The time involved in
+conversion to byte code is probably the same for stock \LUA\ and \LUAJIT.
+
+In the \LUATEX\ case, 30\% of the runtime for benchmark 4 is on \LUA's tab, and
+in \LUAJITTEX\ it's 15\%. We can try to bring down the \LUA\ part even more, but
+it makes more sense to gain something at the \TEX\ end. There macro expansion
+can be improved (read: \CONTEXT\ core code) but that is already rather
+optimized.
+
+Just for the sake of completeness Luigi compiled a stock \LUATEX\ binary for 64-bit
+\LINUX\ with the \type {-o3} option (which forces more inlining of functions
+as well as a different switch mechanism). We did a few tests and this is the result:
+
+\starttabulate[|lTB|r|r|]
+\HL
+\NC \NC \LUATEX\ 0.74 -o2 \NC \LUATEX\ 0.74 - o3 \NC \NR
+\HL
+\NC benchmark-1 \NC 15.5 \NC 15.0 \NC \NR
+\NC benchmark-2 \NC 35.8 \NC 34.0 \NC \NR
+\NC benchmark-3 \NC 4.0 \NC 3.9 \NC \NR
+\NC benchmark-4 \NC 16.0 \NC 15.8 \NC \NR
+\HL
+\stoptabulate
+
+This time we used \type {--batch} and \type {--silent} to eliminate terminal
+output. So, if you really want to squeeze out the maximum performance you need
+to compile with \type {-o3}, use \LUAJITTEX\ (with the faster virtual machine)
+but disable \JIT\ (disabled by default anyway).
+
+% tex + jit = 23.3
+% tex + lua = 27.0
+% lua = 2*jit % cf roberto
+%
+% so:
+%
+% 2*tex + 2*jit = 46.6
+% tex + 2*jit = 27.0
+% -------------------- -
+% tex = 19.6
+%
+% ratios:
+%
+% tex : lua = 70 : 30
+% tex : jit = 85 : 15
+
+We have no reason to abandon stock \LUA. Also, because during these experiments
+we were still using \LUA\ 5.1 we started wondering what the move to 5.2 would
+bring. Such a move forward also means that \CONTEXT\ \MKIV\ will not depend on
+specific \LUAJIT\ features, although it is aware of it (this is needed because we
+store bytecodes). But we will definitely explore the possibilities and see where
+we can benefit. In that respect there will be a way to enable and
+disable jitting. So, users have the choice to use either stock \LUATEX\ or the
+\JIT||aware version but we default to the regular binary.
+
+As we use stock \LUA\ as benchmark, we will use the \type {bit32} library, while
+\LUAJIT\ has its own bit library. Some functions can be aliased so that is no big
+deal. In \CONTEXT\ we use wrappers anyway. More problematic is that we want to
+move on to \LUA\ 5.2 and not all 5.2 features are supported (yet) in \LUAJIT. So,
+if \LUAJIT\ is mandatory in a workflow, then users had better make sure that the
+\LUA\ code is compatible. We don't expect too many problems in \CONTEXT\ \MKIV.
+
+\stopsection
+
+\startsection[title=About speed]
+
+It is worth mentioning that the \LUA\ version in \LUATEX\ has a patch for
+converting floats into strings. Instead of some \type {INF#} result we just
+return zero, simply because \TEX\ is integer||based and intercepting incredibly
+small numbers is too cumbersome. We had to apply the same patch in the \JIT\
+version.
+
+The benchmarks only indicate a trend. In a real document much more happens than
+in the above tests. So what are measurements worth? Say that we compile the \TEX
+book. This grandparent of all documents coded in \TEX\ is rather plainly coded
+(using of course plain \TEX) and compiles pretty fast. Processing does not suffer
+from complex expansions, there is no color, hardly any text manipulation, it's
+all 8 bit, the pagebuilder is straightforward as is all spacing. Although on my
+old machine I can get \CONTEXT\ to run at over 200 pages per second, this quickly
+drops to 10\% of that speed when we add some color, backgrounds, headers and
+footers, font switches, etc.
+
+So, running documents like the \TEX book for comparing the speed of, say,
+\PDFTEX, \XETEX, \LUATEX\ and now \LUAJITTEX\ makes no sense. The first one is
+still eight bit, the rest are \UNICODE. Also, the \TEX book uses traditional
+fonts with traditional features so effectively that it doesn't rely on anything
+that the new engines provide, not even \ETEX\ extensions. On the other hand, a
+recent document uses advanced fonts, properties like color and|/|or
+transparencies, hyperlinks, backgrounds, complex cover pages or chapter openings,
+embeds graphics, etc. Such a document might not even process in \PDFTEX\ or
+\XETEX, and if it does, it's still comparing different technologies: eight bit
+input and fast fonts in \PDFTEX, frozen \UNICODE\ and wide font support in
+\XETEX, instead of additional trickery and control, written in \LUA. So, when we
+investigate speed, we need to take into account what (font and input)
+technologies are used as well as what complicating layout and rendering features
+play a role. In practice speed only matters in an edit|-|view cycle and services
+where users wait for some result.
+
+It's rather hard to find a recent document that can be used to compare these
+engines. The best we could come up with was the rendering of the user interface
+documentation.
+
+\starttabulate[|T|T|T|T||]
+\NC texexec \NC --engine=pdftex \NC --global \NC x-set-12.mkii \NC 5.9 seconds \NC \NR
+\NC texexec \NC --engine=xetex \NC --global \NC x-set-12.mkii \NC 6.2 seconds \NC \NR
+\NC context \NC --engine=luatex \NC --global \NC x-set-12.mkiv \NC 6.2 seconds \NC \NR
+\NC context \NC --engine=luajittex \NC --global \NC x-set-12.mkiv \NC 4.6 seconds \NC \NR
+\stoptabulate
+
+Keep in mind that \type{texexec} is a \RUBY\ script and uses \type {kpsewhich}
+while \type {context} uses \LUA\ and its own (\TDS||compatible) file manager. But
+still, it is interesting to see that there is not that much difference if we keep
+\JIT\ out of the picture. This is because in \MKIV\ we have somewhat more clever
+\XML\ processing, although earlier measurements have demonstrated that in this
+case not that much speedup can be assigned to that.
+
+And so recent versions of \MKIV\ already keep up rather well with the older eight
+bit world. We do way more in \MKIV\ and the interfacing macros are nicer but
+potentially somewhat slower. Some mechanisms might be more efficient because of
+using \LUA, but some actually have more overhead because we keep track of more
+data. Font feature processing is done in \LUA, but somehow can keep up with the
+libraries used in \XETEX, or at least is not that significant a difference,
+although I can think of more demanding tasks. Of course in \LUATEX\ we can go
+beyond what libraries provide.
+
+No matter what one takes into account, performance is not that much worse in
+\LUATEX, and if we enable \JIT\ and so remove some of the traditional \LUA\
+virtual machine overhead, we're even better off. Of course we need to add a
+disclaimer here: don't force us to prove that the relative speed ratios are the
+same for all cases. In fact, it being so hard to measure and compare, performance
+can be considered to be something taken for granted as there is not that much we
+can do about getting nicer numbers, apart from maybe parallelizing which brings
+other complexities into the picture. On our servers, a few other virtual machines
+running \TEX\ services kicking in at the same time, using \CPU\ cycles, network
+bandwidth (as all data lives someplace else) and asking for disk access have much
+more impact than the 25\% we gain. Of course if all processes run faster then
+we've gained something.
+
+For what it's worth: processing this text takes some 2.3 seconds on my laptop for
+regular \LUATEX\ and 1.8 seconds with \LUAJITTEX, including the extra overhead of
+restarting. As this is a rather average example it fits earlier measurements.
+
+Processing a font manual (work in progress) takes \LUAJITTEX\ 15 seconds for 112
+pages compared to 18.4 seconds for \LUATEX. The not yet finished manual loads 20
+different fonts (each with multiple instances), uses colors, has some \METAPOST\
+graphics and does some font juggling. The gain in speed sounds familiar.
+
+\stopsection
+
+\startsection[title=The future]
+
+At the 2012 \LUA\ conference Roberto Ierusalimschy mentioned that the virtual
+machine of \LUAJIT\ is about twice as fast due to it being partly done in
+assembler while the regular machinery is written in standard \CCODE\ and keeps
+portability in mind.
+
+He also presented some plans for future versions of \LUA. There will be some
+lightweight helpers for \UTF. Our experiences so far are that only a handful of
+functions are actually needed: byte to character conversions and vice versa,
+iterators for \UTF\ characters and \UTF\ values and maybe a simple substring
+function is probably enough. Currently \LUATEX\ has some extra string iterators
+and it will provide the converters as well.
+
+There is a good chance that \LPEG\ will become a standard library (which it
+already is in \LUATEX), which is also nice. It's interesting that, especially on
+longer sequences, \LPEG\ can beat the string matchers and replacers, although
+when in a substitution no match and therefore no replacements happen, the regular
+gsub wins. We're talking small numbers here, in daily usage \LPEG\ is about as
+efficient as you can wish. In \CONTEXT\ we have a \type {lpeg.UR} and \type
+{lpeg.US} and it would be nice to have these as native \UTF\ related methods, but
+I must admit that I seldom need them.
+
+This and other extensions coming to the language also have some impact on a \JIT\
+version: the current \LUAJIT\ is already not entirely compatible with \LUA\ 5.2
+so you need to keep that into account if you want to use this version of \LUATEX.
+So, unless \LUAJIT\ follows the mainstream development, as \CONTEXT\ \MKIV\ user
+you should not depend on it. But at the moment it's nice to have this choice.
+
+The yet experimental code will end up in the main \LUATEX\ repository in time
+before the \TEX\ Live 2013 code freeze. In order to make it easier to run both
+versions alongside, we have added the \LUA\ 5.2 built|-|in library \type {bit32}
+to \LUAJITTEX. We found out that it's too much trouble to add that library to
+\LUA~5.1 but \LUATEX\ has moved on to 5.2 anyway.
+
+\stopsection
+
+\startsection[title=Running]
+
+So, as we will definitely stick to stock \LUA, one might wonder if it makes sense
+to officially support jitting in \CONTEXT. First of all, \LUATEX\ is not
+influenced that much by the low level changes in the \API\ between 5.1 and 5.2.
+Also \LUAJIT\ does support the most important new 5.2 features, so at the moment
+we're mostly okay. We expect that eventually \LUAJIT\ will catch up but if not,
+we are not in big trouble: the performance of stock \LUA\ is quite okay and above
+all, it's portable! \footnote {Stability and portability are important properties
+of \TEX\ engines, which is yet another reason for using \LUA. For those doing
+number crunching in a document, \JIT\ can come in handy.} For the moment you can
+consider \LUAJITTEX\ to be an experiment and research tool, but we will do our
+best to keep it production ready.
+
+So how do we choose between the two engines? After some experimenting with
+alternative startup scenarios and dedicated caches, the following solution was
+reached:
+
+\starttyping
+context --engine=luajittex ...
+\stoptyping
+
+The usual preamble line also works:
+
+\starttyping
+% engine=luajittex
+\stoptyping
+
+As the main infrastructure uses the \type {luatex} and related binaries, this
+will result in a relaunch: the \type {context} script will be restarted using
+\type {luajittex}. This is a simple solution and the overhead is rather minimal,
+especially compared to the somewhat faster run. Alternatively you can copy \type
+{luajittex} over \type {luatex} but that is more drastic. Keep in mind that \type
+{luatex} is the benchmark for development of \CONTEXT, so the \JIT\ aware version
+might fall behind sometimes.
+
+Yet another approach is adapting the configuration file, or better, provide (or
+adapt) your own \type {texmfcnf.lua} in for instance \type {texmf-local/web2c}
+path:
+
+\starttyping
+return {
+ type = "configuration",
+ version = "1.2.3",
+ date = "2012-12-12",
+ time = "12:12:12",
+ comment = "Local overloads",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ content = {
+ directives = {
+ ["system.engine"] = "luajittex",
+ },
+ },
+}
+\stoptyping
+
+This has the same effect as always providing \type {--engine=luajittex} but only
+makes sense in well controlled situations as you might easily forget that it's
+the default. Of course one could have that file and just comment out the
+directive unless in test mode.
+
+Because the bytecode of \LUAJIT\ differs from the one used by \LUA\ itself we
+have a dedicated format as well as dedicated bytecode compiled resources (for
+instance \type {tmb} instead of \type {tmc}). For most users this is not
+something they should bother about as it happens automatically.
+
+Based on experiments, by default we have disabled \JIT\, so we only benefit from
+the faster virtual machine. Future versions of \CONTEXT\ might provide some
+control over that but first we want to conduct more experiments.
+
+\stopsection
+
+\startsection[title=Addendum]
+
+These developments and experiments took place in November and December 2012. At
+the time of this writing we also made the move to \LUA\ 5.2 in stock \LUATEX; the
+first version to provide this was 0.74. Here are some measurements on Taco
+Hoekwater's 64-bit \LINUX\ machine:
+
+\starttabulate[|lTB|r|r|l|]
+\HL
+\NC \NC \LUATEX\ 0.70 \NC \LUATEX\ 0.74 \NC \NC \NR
+\HL
+\NC benchmark-1 \NC 23.67 \NC 19.57 \NC faster \NC \NR
+\NC benchmark-2 \NC 65.41 \NC 62.88 \NC faster \NC \NR
+\NC benchmark-3 \NC 4.88 \NC 4.67 \NC faster \NC \NR
+\NC benchmark-4 \NC 23.09 \NC 22.71 \NC faster \NC \NR
+\NC benchmark-5 \NC 2.56/2.06 \NC 2.66/2.29 \NC slower \NC \NR
+\HL
+\stoptabulate
+
+There is a good chance that this is due to improvements of the garbage collector,
+virtual machine and string handling. It also looks like memory consumption is a
+bit less. Some speed optimizations in reading files have been removed (at least
+for now) and some patches to the \type {format} function (in the \type {string}
+namespace) that dealt with (for \TEX) unfortunate number conversions have not
+been ported. The code base is somewhat cleaner and we expect to be able to split
+up the binary in a core program plus some libraries that are loaded on demand.
+\footnote {Of course this poses some constraints on stability as components get
+decoupled, but this is one of the issues that we hope to deal with properly in
+the library project.} In general, we don't expect too many issues in the
+transition to \LUA\ 5.2, and \CONTEXT\ is already adapted to support \LUATEX\
+with 5.2 as well as \LUAJITTEX\ with an older version.
+
+Running the same tests on a 32-bit \MSWINDOWS\ machine gives this:
+
+\starttabulate[|lTB|r|r|r|]
+\HL
+\NC \NC \LUATEX\ 0.70 \NC \LUATEX\ 0.74 \NC \NC \NR
+\HL
+\NC benchmark-1 \NC 26.4 \NC 25.5 \NC faster \NC \NR
+\NC benchmark-2 \NC 64.2 \NC 63.6 \NC faster \NC \NR
+\NC benchmark-3 \NC 7.1 \NC 6.9 \NC faster \NC \NR
+\NC benchmark-4 \NC 28.3 \NC 27.0 \NC faster \NC \NR
+\NC benchmark-5 \NC 1.95/1.50 \NC 1.84/1.48 \NC faster \NC \NR
+\HL
+\stoptabulate
+
+The gain is less impressive but the machine is rather old and we can benefit less
+from modern \CPU\ properties (cache, memory bandwidth, etc.). I tend to conclude
+that there is no significant improvement here but it also doesn't get worse.
+However we need to keep in mind that file \IO\ is less optimal in 0.74 so this
+might play a role. As usual, runtime is negatively influenced by the relatively
+slow speed of displaying messages on the console (even when we use \type
+{console2}).
+
+A few days before the end of 2012, Akira Kakuto compiled native \MSWINDOWS\
+binaries for both engines. This time I decided to run a comparison inside the
+\SCITE\ editor, that has very fast console output. \footnote {Most of my personal
+\TEX\ runs are from within \SCITE, while most runs on the servers are in batch
+mode, so normally the overhead of the console is acceptable or even neglectable.}
+
+\starttabulate[|lTB|r|r|r|]
+\HL
+\NC \NC \LUATEX\ 0.74 (5.2) \NC \LUAJITTEX\ 0.72 (5.1) \NC \NC \NR
+\HL
+\NC benchmark-1 \NC 25.4 \NC 25.4 \NC similar \NC \NR
+\NC benchmark-2 \NC 54.7 \NC 36.3 \NC faster \NC \NR
+\NC benchmark-3 \NC 4.3 \NC 3.6 \NC faster \NC \NR
+\NC benchmark-4 \NC 20.0 \NC 16.3 \NC faster \NC \NR
+\NC benchmark-5 \NC 1.93/1.48 \NC 0.74/0.61 \NC faster \NC \NR
+\HL
+\stoptabulate
+
+Only the \METAPOST\ library and conversion benchmark didn't show a speedup. The
+regular \TEX\ tests 1||3 gain some 15||35\%. Enabling \JIT\ (off by default)
+slowed down processing. For the sake of completeness I also timed \LUAJITTEX\
+on the console, so here you see the improvement of both engines.
+
+\starttabulate[|lTB|r|r|r|]
+\HL
+\NC \NC \LUATEX\ 0.70 \NC \LUATEX\ 0.74 \NC \LUAJITTEX\ 0.72 \NC \NR
+\HL
+\NC benchmark-1 \NC 26.4 \NC 25.5 \NC 25.9 \NC \NR
+\NC benchmark-2 \NC 64.2 \NC 63.6 \NC 45.5 \NC \NR
+\NC benchmark-3 \NC 7.1 \NC 6.9 \NC 6.0 \NC \NR
+\NC benchmark-4 \NC 28.3 \NC 27.0 \NC 23.3 \NC \NR
+\NC benchmark-5 \NC 1.95/1.50 \NC 1.84/1.48 \NC 0.73/0.60 \NC \NR
+\HL
+\stoptabulate
+
+In this text, the term \JIT\ has come up a lot but you might rightfully wonder if
+the observations here relate to \JIT\ at all. For the moment I tend to conclude
+that the implementation of the virtual machine and garbage collection have more
+impact than the actual just||in||time compilation. More exploration of \JIT\ is
+needed to see if we can really benefit from that. Of course the fact that we use
+a bit less memory is also nice. In case you wonder why I bother about speed at
+all: we happen to run \LUATEX\ mostly as a (remote) service and generating a
+bunch of (related) documents takes a bit of time. Bringing the waiting down from
+15 to 10 seconds might not sound impressive but it makes a difference when it is
+someone's job to generate these sets.
+
+In summary: just before we entered 2013, we saw two rather fundamental updates of
+\LUATEX\ show up: an improved traditional one with \LUA\ 5.2 as well as the
+somewhat faster \LUAJITTEX\ with a mixture between 5.1 and 5.2. And in 2013 we
+will of course try to make them both even more attractive.
+
+\stopsection
+
+\stopchapter
+
+% benchmark-4:
+%
+% tex + jit = 23.3
+% tex + lua = 27.0
+% lua = 2*jit % cf roberto
+%
+% so:
+%
+% 2*tex + 2*jit = 46.6
+% tex + 2*jit = 27.0
+% -------------------- -
+% tex = 19.6
+%
+% ratios:
+%
+% tex : lua = 70 : 30
+% tex : jit = 85 : 15
diff --git a/doc/context/sources/general/manuals/hybrid/hybrid-languages.tex b/doc/context/sources/general/manuals/hybrid/hybrid-languages.tex
new file mode 100644
index 000000000..403b1188f
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/hybrid-languages.tex
@@ -0,0 +1,496 @@
+% engine=luatex language=uk
+
+\startcomponent hybrid-languages
+
+\environment hybrid-environment
+
+\startchapter[title={The language mix}]
+
+During the third \CONTEXT\ conference that ran in parallel to Euro\TEX\ 2009 in
+The Hague we had several sessions where \MKIV\ was discussed and a few upcoming
+features were demonstrated. The next sections summarize some of that. It's hard
+to predict the future, especially because new possibilities show up once \LUATEX\
+is opened up more, so remarks about the future are not definitive.
+
+\startsection[title={\TEX}]
+
+From now on, if I refer to \TEX\ in the perspective of \LUATEX\ I mean \quotation
+{Good Old \TEX}, the language as well as the functionality. Although \LUATEX\
+provides a couple of extensions it remains pretty close to compatible to its
+ancestor, certainly from the perspective of the end user.
+
+As most \CONTEXT\ users code their documents in the \TEX\ language, this will
+remain the focus of \MKIV. After all, there is no real reason to abandon it.
+However, although \CONTEXT\ already stimulates users to use structure where
+possible and not to use low level \TEX\ commands in the document source, we will
+add a few more structural variants. For instance, we already introduced \type
+{\startchapter} and \type {\startitem} in addition to \type {\chapter} and \type
+{\item}.
+
+We even go further, by using key|/|value pairs for defining section titles,
+bookmarks, running headers, references, bookmarks and list entries at the start
+of a chapter. And, as we carry around much more information in the (for \TEX\ so
+typical) auxiliary data files, we provide extensive control over rendering the
+numbers of these elements when they are recalled (like in tables of contents).
+So, if you really want to use different texts for all references to a chapter
+header, it can be done:
+
+\starttyping
+\startchapter
+ [label=emcsquare,
+ title={About $e=mc^2$},
+ bookmark={einstein},
+ list={About $e=mc^2$ (Einstein)},
+ reference={$e=mc^2$}]
+
+ ... content ...
+
+\stopchapter
+\stoptyping
+
+Under the hood, the \MKIV\ code base is becoming quite a mix and once we have a
+more clear picture of where we're heading, it might become even more of a hybrid.
+Already for some time most of the font handling is done by \LUA, and a bit more
+logic and management might move to \LUA\ as well. However, as we want to be
+downward compatible we cannot go as far as we want (yet). This might change as
+soon as more of the primitives have associated \LUA\ functions. Even then it will
+be a trade off: calling \LUA\ takes some time and it might not pay off at all.
+
+Some of the more tricky components, like vertical spacing, grid snapping,
+balancing columns, etc.\ are already in the process of being \LUA fied and their
+hybrid form might turn into complete \LUA\ driven solutions eventually. Again,
+the compatibility issue forces us to follow a stepwise approach, but at the cost
+of (quite some) extra development time. But whatever happens, the \TEX\ input
+language as well as machinery will be there.
+
+\stopsection
+
+\startsection[title={\METAPOST}]
+
+I never regret integrating \METAPOST\ support in \CONTEXT\ and a dream came true
+when \MPLIB\ became part of \LUATEX. Apart from a few minor changes in the way
+text integrates into \METAPOST\ graphics the user interface in \MKIV\ is the same
+as in \MKII. Insofar as \LUA\ is involved, this is hidden from the user. We use
+\LUA\ for managing runs and conversion of the result to \PDF. Currently
+generating \METAPOST\ code by \LUA\ is limited to assisting in the typesetting of
+chemical structure formulas which is now part of the core.
+
+When defining graphics we use the \METAPOST\ language and not some \TEX|-|like
+variant of it. Information can be passed to \METAPOST\ using special macros (like
+\type {\MPcolor}), but most relevant status information is passed automatically
+anyway.
+
+You should not be surprised if at some point we can request information from
+\TEX\ directly, because after all this information is accessible. Think of
+something \type {w := texdimen(0) ;} being expanded at the \METAPOST\ end instead
+of \type {w := \the\dimen0 ;} being passed to \METAPOST\ from the \TEX\ end.
+
+\stopsection
+
+\startsection[title={\LUA}]
+
+What will the user see of \LUA ? First of all he or she can use this scripting
+language to generate content. But when making a format or by looking at the
+statistics printed at the end of a run, it will be clear that \LUA\ is used all
+over the place.
+
+So how about \LUA\ as a replacement for the \TEX\ input language? Actually, it is
+already possible to make such \quotation {\CONTEXT\ \LUA\ Documents} using
+\MKIV's built in functions. Each \CONTEXT\ command is also available as a \LUA\
+function.
+
+\startbuffer
+\startluacode
+ context.bTABLE {
+ framecolor = "blue",
+ align= "middle",
+ style = "type",
+ offset=".5ex",
+ }
+ for i=1,10 do
+ context.bTR()
+ for i=1,20 do
+ local r= math.random(99)
+ if r < 50 then
+ context.bTD {
+ background = "color",
+ backgroundcolor = "blue"
+ }
+ context(context.white("%#2i",r))
+ else
+ context.bTD()
+ context("%#2i",r)
+ end
+ context.eTD()
+ end
+ context.eTR()
+ end
+ context.eTABLE()
+\stopluacode
+\stopbuffer
+
+\typebuffer
+
+Of course it helps if you know \CONTEXT\ a bit. For instance we can as well say:
+
+\starttyping
+if r < 50 then
+ context.bTD {
+ background = "color",
+ backgroundcolor = "blue",
+ foregroundcolor = "white",
+ }
+else
+ context.bTD()
+end
+context("%#2i",r)
+context.eTD()
+\stoptyping
+
+And, knowing \LUA\ helps as well, since the following is more efficient:
+
+\startbuffer
+\startluacode
+ local colored = {
+ background = "color",
+ backgroundcolor = "blue",
+ foregroundcolor = "white",
+ }
+ local basespec = {
+ framecolor = "blue",
+ align= "middle",
+ style = "type",
+ offset=".5ex",
+ }
+ local bTR, eTR = context.bTR, context.eTR
+ local bTD, eTD = context.bTD, context.eTD
+ context.bTABLE(basespec)
+ for i=1,10 do
+ bTR()
+ for i=1,20 do
+ local r= math.random(99)
+ bTD((r < 50 and colored) or nil)
+ context("%#2i",r)
+ eTD()
+ end
+ eTR()
+ end
+ context.eTABLE()
+\stopluacode
+\stopbuffer
+
+\typebuffer
+
+Since in practice the speedup is negligible and the memory footprint is about the
+same, such optimization seldom make sense.
+
+At some point this interface will be extended, for instance when we can use
+\TEX's main (scanning, parsing and processing) loop as a so-called coroutine and
+when we have opened up more of \TEX's internals. Of course, instead of putting
+this in your \TEX\ source, you can as well keep the code at the \LUA\ end.
+
+\placefigure
+ {The result of the shown \LUA\ code.}
+ {\getbuffer}
+
+The script that manages a \CONTEXT\ run (also called \type {context}) will
+process files with the \type {cld} suffix automatically. You can also force
+processing as \LUA\ with the flag \type {--forcecld}. \footnote {Similar methods
+exist for processing \XML\ files.} The \type {mtxrun} script also recognizes
+\type {cld} files and delegate the call to the \type {context} script.
+
+\starttyping
+context yourfile.cld
+\stoptyping
+
+But will this replace \TEX\ as an input language? This is quite unlikely because
+coding documents in \TEX\ is so convenient and there is not much to gain here. Of
+course in a pure \LUA\ based workflow (for instance publishing information from
+databases) it would be nice to code in \LUA, but even then it's mostly syntactic
+sugar, as \TEX\ has to do the job anyway. However, eventually we will have a
+quite mature \LUA\ counterpart.
+
+\stopsection
+
+\startsection[title={\XML}]
+
+This is not so much a programming language but more a method of tagging your
+document content (or data). As structure is rather dominant in \XML, it is quite
+handy for situations where we need different output formats and multiple tools
+need to process the same data. It's also a standard, although this does not mean
+that all documents you see are properly structured. This in turn means that we
+need some manipulative power in \CONTEXT, and that happens to be easier to do in
+\MKIV\ than in \MKII.
+
+In \CONTEXT\ we have been supporting \XML\ for a long time, and in \MKIV\ we made
+the switch from stream based to tree based processing. The current implementation
+is mostly driven by what has been possible so far but as \LUATEX\ becomes more
+mature, bits and pieces will be reimplemented (or at least cleaned up and brought
+up to date with developments in \LUATEX).
+
+One could argue that it makes more sense to use \XSLT\ for converting \XML\ into
+something \TEX, but in most of the cases that I have to deal with much effort
+goes into mapping structure onto a given layout specification. Adding a bit of
+\XML\ to \TEX\ mapping to that directly is quite convenient. The total amount of
+code is probably smaller and it saves a processing step.
+
+We're mostly dealing with education|-|related documents and these tend to have a
+more complex structure than the final typeset result shows. Also, readability of
+code is not served with such a split as most mappings look messy anyway (or
+evolve that way) due to the way the content is organized or elements get abused.
+
+There is a dedicated manual for dealing with \XML\ in \MKIV, so we only show a
+simple example here. The documents to be processed are loaded in memory and
+serialized using setups that are associated to elements. We keep track of
+documents and nodes in a way that permits multipass data handling (rather usual
+in \TEX). Say that we have a document that contains questions. The following
+definitions will flush the (root element) \type {questions}:
+
+\starttyping
+\startxmlsetups xml:mysetups
+ \xmlsetsetup{#1}{questions}{xml:questions}
+\stopxmlsetups
+
+\xmlregistersetup{xml:mysetups}
+
+\startxmlsetups xml:questions
+ \xmlflush{#1}
+\stopxmlsetups
+
+\xmlprocessfile{main}{somefile.xml}{}
+\stoptyping
+
+Here the \type {#1} represents the current \XML\ element. Of course we need more
+associations in order to get something meaningful. If we just serialize then we
+have mappings like:
+
+\starttyping
+\xmlsetsetup{#1}{question|answer}{xml:*}
+\stoptyping
+
+So, questions and answers are mapped onto their own setup which flushes them,
+probably with some numbering done at the spot.
+
+In this mechanism \LUA\ is sort of invisible but quite busy as it is responsible
+for loading, filtering, accessing and serializing the tree. In this case \TEX\
+and \LUA\ hand over control in rapid succession.
+
+You can hook in your own functions, like:
+
+\starttyping
+\xmlfilter{#1}{(wording|feedback|choice)/function(cleanup)}
+\stoptyping
+
+In this case the function \type {cleanup} is applied to elements with names that
+match one of the three given. \footnote {This example is inspired by one of our
+projects where the cleanup involves sanitizing (highly invalid) \HTML\ data that
+is embedded as a \type {CDATA} stream, a trick to prevent the \XML\ file to be
+invalid.}
+
+Of course, once you start mixing in \LUA\ in this way, you need to know how we
+deal with \XML\ at the \LUA\ end. The following function show how we calculate
+scores:
+
+\starttyping
+\startluacode
+function xml.functions.totalscore(root)
+ local n = 0
+ for e in xml.collected(root,"/outcome") do
+ if xml.filter(e,"action[text()='add']") then
+ local m = xml.filter(e,"xml:///score/text()")
+ n = n + (tonumber(m or 0) or 0)
+ end
+ end
+ tex.write(n)
+end
+\stopluacode
+\stoptyping
+
+You can either use such a function in a filter or just use it as
+a \TEX\ macro:
+
+\starttyping
+\startxmlsetups xml:question
+ \blank
+ \xmlfirst{#1}{wording}
+ \startitemize
+ \xmlfilter{#1}{/answer/choice/command(xml:answer:choice)}
+ \stopitemize
+ \endgraf
+ score: \xmlfunction{#1}{totalscore}
+ \blank
+\stopxmlsetups
+
+\startxmlsetups xml:answer:choice
+ \startitem
+ \xmlflush{#1}
+ \stopitem
+\stopxmlsetups
+\stoptyping
+
+The filter variant is like this:
+
+\starttyping
+\xmlfilter{#1}{./function('totalscore')}
+\stoptyping
+
+So you can take your choice and make your source look more \XML|-|ish,
+\LUA|-|like or \TEX|-|wise. A careful reader might have noticed the peculiar
+\type {xml://} in the function code. When used inside \MKIV, the serializer
+defaults to \TEX\ so results are piped back into \TEX. This prefix forced the
+regular serializer which keeps the result at the \LUA\ end.
+
+Currently some of the \XML\ related modules, like \MATHML\ and handling of
+tables, are really a mix of \TEX\ code and \LUA\ calls, but it makes sense to
+move them completely to \LUA. One reason is that their input (formulas and table
+content) is restricted to non|-|\TEX\ anyway. On the other hand, in order to be
+able to share the implementation with \TEX\ input, it also makes sense to stick
+to some hybrid approach. In any case, more of the calculations and logic will
+move to \LUA, while \TEX\ will deal with the content.
+
+A somewhat strange animal here is \XSLFO. We do support it, but the \MKII\
+implementation was always somewhat limited and the code was quite complex. So,
+this needs a proper rewrite in \MKIV, which will happen indeed. It's mostly a
+nice exercise of hybrid technology but until now I never really needed it. Other
+bits and pieces of the current \XML\ goodies might also get an upgrade.
+
+There is already a bunch of functions and macros to filter and manipulate \XML\
+content and currently the code involved is being cleaned up. What direction we go
+also depends on users' demands. So, with respect to \XML\ you can expect more
+support, a better integration and an upgrade of some supported \XML\ related
+standards.
+
+\startsection [title={Tools}]
+
+Some of the tools that ship with \CONTEXT\ are also examples of hybrid usage.
+
+Take this:
+
+\starttyping
+mtxrun --script server --auto
+\stoptyping
+
+On my machine this reports:
+
+\starttyping
+MTXrun | running at port: 31415
+MTXrun | document root: c:/data/develop/context/lua
+MTXrun | main index file: unknown
+MTXrun | scripts subpath: c:/data/develop/context/lua
+MTXrun | context services: http://localhost:31415/mtx-server-ctx-startup.lua
+\stoptyping
+
+The \type {mtxrun} script is a \LUA\ script that acts as a controller for other
+scripts, in this case \type {mtx-server.lua} that is part of the regular
+distribution. As we use \LUATEX\ as a \LUA\ interpreter and since \LUATEX\ has a
+socket library built in, it can act as a web server, limited but quite right for
+our purpose. \footnote {This application is not intentional but just a side
+effect.}
+
+The web page that pops up when you enter the given address lets you currently
+choose between the \CONTEXT\ help system and a font testing tool. In \in {figure}
+[fig:fonttest] you seen an example of what the font testing tool does.
+
+\placefigure
+ [here]
+ [fig:fonttest]
+ {An example of using the font tester.}
+ {\externalfigure[mtx-server-ctx-fonttest.png][width=\textwidth]}
+
+Here we have \LUATEX\ running a simple web server but it's not aware of having
+\TEX\ on board. When you click on one of the buttons at the bottom of the screen,
+the server will load and execute a script related to the request and in this case
+that script will create a \TEX\ file and call \LUATEX\ with \CONTEXT\ to process
+that file. The result is piped back to the browser.
+
+You can use this tool to investigate fonts (their bad and good habits) as well as
+to test the currently available \OPENTYPE\ functionality in \MKIV\ (bugs as well
+as goodies).
+
+So again we have a hybrid usage although in this case the user is not confronted
+with \LUA\ and|/|or \TEX\ at all. The same is true for the other goodie, shown in
+\in {figure} [fig:help]. Actually, such a goodie has always been part of the
+\CONTEXT\ distribution but it has been rewritten in \LUA.
+
+\placefigure
+ [here]
+ [fig:help]
+ {An example of a help screen for a command.}
+ {\externalfigure[mtx-server-ctx-help.png][width=\textwidth]}
+
+The \CONTEXT\ user interface is defined in an \XML\ file, and this file is used
+for several purposes: initializing the user interfaces at format generation time,
+typesetting the formal command references (for all relevant interface languages),
+for the wiki, and for the mentioned help goodie.
+
+Using the mix of languages permits us to provide convenient processing of
+documents that otherwise would demand more from the user than it does now. For
+instance, imagine that we want to process a series of documents in the
+so|-|called \EPUB\ format. Such a document is a zipped file that has a
+description and resources. As the content of this archive is prescribed it's
+quite easy to process it:
+
+\starttyping
+context --ctx=x-epub.ctx yourfile.epub
+\stoptyping
+
+This is equivalent to:
+
+\starttyping
+texlua mtxrun.lua --script context --ctx=x-epub.ctx yourfile.epub
+\stoptyping
+
+So, here we have \LUATEX\ running a script that itself (locates and) runs a
+script \type {context}. That script loads a \CONTEXT\ job description file (with
+suffix \type {ctx}). This file tells what styles to load and might have
+additional directives but none of that has to bother the end user. In the
+automatically loaded style we take care of reading the \XML\ files from the
+zipped file and eventually map the embedded \HTML\ like files onto style elements
+and produce a \PDF\ file. So, we have \LUA\ managing a run and \MKIV\ managing
+with help of \LUA\ reading from zip files and converting \XML\ into something
+that \TEX\ is happy with. As there is no standard with respect to the content
+itself, i.e.\ the rendering is driven by whatever kind of structure is used and
+whatever the \CSS\ file is able to map it onto, in practice we need an additional
+style for this class of documents. But anyway it's a good example of integration.
+
+\stopsection
+
+\startsection [title={The future}]
+
+Apart from these language related issues, what more is on the agenda? To mention
+a few integration related thoughts:
+
+\startitemize[packed]
+
+\startitem
+ At some point I want to explore the possibility to limit processing to just
+ one run, for instance by doing trial runs without outputting anything but
+ still collecting multipass information. This might save some runtime in
+ demanding workflows especially when we keep extensive font loading and image
+ handling in mind.
+\stopitem
+
+\startitem
+ Related to this is the ability to run \MKIV\ as a service but that demands
+ that we can reset the state of \LUATEX\ and actually it might not be worth
+ the trouble at all given faster processors and disks. Also, it might not save
+ much runtime on larger jobs.
+\stopitem
+
+\startitem
+ More interesting can be to continue experimenting with isolating parts of
+ \CONTEXT\ in such a way that one can construct a specialized subset of
+ functionality. Of course the main body of code will always be loaded as one
+ needs basic typesetting anyway.
+\stopitem
+
+\stopitemize
+
+Of course we keep improving existing mechanisms and improve solutions using a mix
+of \TEX\ and \LUA, using each language (and system) for what it can do best.
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/hybrid/hybrid-math.tex b/doc/context/sources/general/manuals/hybrid/hybrid-math.tex
new file mode 100644
index 000000000..de10a1b9c
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/hybrid-math.tex
@@ -0,0 +1,347 @@
+% language=uk
+
+\startcomponent hybrid-math
+
+\environment hybrid-environment
+
+\startchapter[title={Handling math: A retrospective}]
+
+{This is \TUGBOAT\ article .. reference needed.}
+
+% In this article I will reflect on how the plain \TEX\ approach to math
+% fonts influenced the way math has been dealt with in \CONTEXT\ \MKII\
+% and why (and how) we divert from it in its follow up \MKIV, now that
+% \LUATEX\ and \OPENTYPE\ math have come around.
+
+When you start using \TEX, you cannot help but notice that math plays an
+important role in this system. As soon as you dive into the code you will see
+that there is a concept of families that is closely related to math typesetting.
+A family is a set of three sizes: text, script and scriptscript.
+
+\startformula
+a^{b^{c}} = \frac{d}{e}
+\stopformula
+
+The smaller sizes are used in superscripts and subscripts and in more complex
+formulas where information is put on top of each other.
+
+It is no secret that the latest math font technology is not driven by the \TEX\
+community but by Microsoft. They have taken a good look at \TEX\ and extended the
+\OPENTYPE\ font model with the information that is needed to do things similar to
+\TEX\ and beyond. It is a firm proof of \TEX's abilities that after some 30 years
+it is still seen as the benchmark for math typesetting. One can only speculate
+what Don Knuth would have come up with if today's desktop hardware and printing
+technology had been available in those days.
+
+As a reference implementation of a font Microsoft provides Cambria Math. In the
+specification the three sizes are there too: a font can provide specifically
+designed script and scriptscript variants for text glyphs where that is relevant.
+Control is exercised with the \type {ssty} feature.
+
+Another inheritance from \TEX\ and its fonts is the fact that larger symbols can
+be made out of snippets and these snippets are available as glyphs in the font,
+so no special additional (extension) fonts are needed to get for instance really
+large parentheses. The information of when to move up one step in size (given
+that there is a larger shape available) or when and how to construct larger
+symbols out of snippets is there as well. Placement of accents is made easy by
+information in the font and there are a whole lot of parameters that control the
+typesetting process. Of course you still need machinery comparable to \TEX's math
+subsystem but Microsoft Word has such capabilities.
+
+I'm not going to discuss the nasty details of providing math support in \TEX, but
+rather pay some attention to an (at least for me) interesting side effect of
+\TEX's math machinery. There are excellent articles by Bogus\l{}aw Jackowski and
+Ulrik Vieth about how \TEX\ constructs math and of course Knuth's publications
+are the ultimate source of information as well.
+
+Even if you only glance at the implementation of traditional \TEX\ font support,
+the previously mentioned families are quite evident. You can have 16 of them but
+4 already have a special role: the upright roman font, math italic, math symbol
+and math extension. These give us access to some 1000 glyphs in theory, but when
+\TEX\ showed up it was mostly a 7-bit engine and input of text was often also
+7-bit based, so in practice many fewer shapes are available, and subtracting the
+snippets that make up the large symbols brings down the number again.
+
+Now, say that in a formula you want to have a bold character. This character is
+definitely not in the 4 mentioned families. Instead you enable another one, one
+that is linked to a bold font. And, of course there is also a family for bold
+italic, slanted, bold slanted, monospaced, maybe smallcaps, sans serif, etc. To
+complicate things even more, there are quite a few symbols that are not covered
+in the foursome so we need another 2 or 3 families just for those. And yes, bold
+math symbols will demand even more families.
+
+\startformula
+a + \bf b + \bi c = \tt d + \ss e + \cal f
+\stopformula
+
+Try to imagine what this means for implementing a font system. When (in for
+instance \CONTEXT) you choose a specific body font at a certain size, you not
+only switch the regular text fonts, you also initialize math. When dealing with
+text and a font switch there, it is no big deal to delay font loading and
+initialization till you really need the font. But for math it is different. In
+order to set up the math subsystem, the families need to be known and set up and
+as each one can have three members you can imagine that you easily initialize
+some 30 to 40 fonts. And, when you use several math setups in a document,
+switching between them involves at least some re-initialization of those
+families.
+
+When Taco Hoekwater and I were discussing \LUATEX\ and especially what was needed
+for math, it was sort of natural to extend the number of families to 256. After
+all, years of traditional usage had demonstrated that it was pretty hard to come
+up with math font support where you could freely mix a whole regular and a whole
+bold set of characters simply because you ran out of families. This is a side
+effect of math processing happening in several passes: you can change a family
+definition within a formula, but as \TEX\ remembers only the family number, a
+later definition overloads a previous one. The previous example in a traditional
+\TEX\ approach can result in:
+
+\starttyping
+a + \fam7 b + \fam8 c = \fam9 d + \fam10 e + \fam11 f
+\stoptyping
+
+Here the \type{a} comes from the family that reflects math italic (most likely
+family~1) and \type {+} and \type {=} can come from whatever family is told to
+provide them (this is driven by their math code properties). As family numbers
+are stored in the identification pass, and in the typesetting pass resolve to
+real fonts you can imagine that overloading a family in the middle of a
+definition is not an option: it's the number that gets stored and not what it is
+bound to. As it is unlikely that we actually use more than 16 families we could
+have come up with a pool approach where families are initialized on demand but
+that does not work too well with grouping (or at least it complicates matters).
+
+So, when I started thinking of rewriting the math font support for \CONTEXT\
+\MKIV, I still had this nicely increased upper limit in mind, if only because I
+was still thinking of support for the traditional \TEX\ fonts. However, I soon
+realized that it made no sense at all to stick to that approach: \OPENTYPE\ math
+was on its way and in the meantime we had started the math font project. But
+given that this would easily take some five years to finish, an intermediate
+solution was needed. As we can make virtual fonts in \LUATEX, I decided to go
+that route and for several years already it has worked quite well. For the moment
+the traditional \TEX\ math fonts (Computer Modern, px, tx, Lucida, etc) are
+virtualized into a pseudo|-|\OPENTYPE\ font that follows the \UNICODE\ math
+standard. So instead of needing more families, in \CONTEXT\ we could do with
+less. In fact, we can do with only two: one for regular and one for bold,
+although, thinking of it, there is nothing that prevents us from mixing different
+font designs (or preferences) in one formula but even then a mere four families
+would still be fine.
+
+To summarize this, in \CONTEXT\ \MKIV\ the previous example now becomes:
+
+\starttyping
+U+1D44E + U+1D41B + 0x1D484 = U+1D68D + U+1D5BE + U+1D4BB
+\stoptyping
+
+For a long time I have been puzzled by the fact that one needs so many fonts for
+a traditional setup. It was only after implementing the \CONTEXT\ \MKIV\ math
+subsystem that I realized that all of this was only needed in order to support
+alphabets, i.e.\ just a small subset of a font. In \UNICODE\ we have quite a few
+math alphabets and in \CONTEXT\ we have ways to map a regular keyed-in (say)
+\quote{a} onto a bold or monospaced one. When writing that code I hadn't even
+linked the \UNICODE\ math alphabets to the family approach for traditional \TEX.
+Not being a mathematician myself I had no real concept of systematic usage of
+alternative alphabets (apart from the occasional different shape for an
+occasional physics entity).
+
+Just to give an idea of what \UNICODE\ defines: there are alphabets in regular
+(upright), bold, italic, bold italic, script, bold script, fraktur, bold fraktur,
+double|-|struck, sans|-|serif, sans|-|serif bold, sans|-|serif italic,
+sans|-|serif bold italic and monospace. These are regular alphabets with upper-
+and lowercase characters complemented by digits and occasionally Greek.
+
+It was a few years later (somewhere near the end of 2010) that I realized that a
+lot of the complications in (and load on) a traditional font system were simply
+due to the fact that in order to get one bold character, a whole font had to be
+loaded in order for families to express themselves. And that in order to have
+several fonts being rendered, one needed lots of initialization for just a few
+cases. Instead of wasting one font and family for an alphabet, one could as well
+have combined 9 (upper and lowercase) alphabets into one font and use an offset
+to access them (in practice we have to handle the digits too). Of course that
+would have meant extending the \TEX\ math machinery with some offset or
+alternative to some extensive mathcode juggling but that also has some overhead.
+
+If you look at the plain \TEX\ definitions for the family related matters, you
+can learn a few things. First of all, there are the regular four families
+defined:
+
+\starttyping
+\textfont0=\tenrm \scriptfont0=\sevenrm \scriptscriptfont0=\fiverm
+\textfont1=\teni \scriptfont1=\seveni \scriptscriptfont1=\fivei
+\textfont2=\tensy \scriptfont2=\sevensy \scriptscriptfont2=\fivesy
+\textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex
+\stoptyping
+
+Each family has three members. There are some related definitions
+as well:
+
+\starttyping
+\def\rm {\fam0\tenrm}
+\def\mit {\fam1}
+\def\oldstyle{\fam1\teni}
+\def\cal {\fam2}
+\stoptyping
+
+So, with \type {\rm} you not only switch to a family (in math mode) but you also
+enable a font. The same is true for \type {\oldstyle} and this actually brings us
+to another interesting side effect. The fact that oldstyle numerals come from a
+math font has implications for the way this rendering is supported in macro
+packages. As naturally all development started when \TEX\ came around, package
+design decisions were driven by the basic fact that there was only one math font
+available. And, as a consequence most users used the Computer Modern fonts and
+therefore there was never a real problem in getting those oldstyle characters in
+your document.
+
+However, oldstyle figures are a property of a font design (like table digits) and
+as such not specially related to math. And, why should one tag each number then?
+Of course it's good practice to tag extensively (and tagging makes switching
+fonts easy) but to tag each number is somewhat over the top. When more fonts
+(usable in \TEX) became available it became more natural to use a proper oldstyle
+font for text and the \type {\oldstyle} more definitely ended up as a math
+command. This was not always easy to understand for users who primarily used
+\TEX\ for anything but math.
+
+Another interesting aspect is that with \OPENTYPE\ fonts oldstyle figures are
+again an optional feature, but now at a different level. There are a few more
+such traditional issues: bullets often come from a math font as well (which works
+out ok as they have nice, not so tiny bullets). But the same is true for
+triangles, squares, small circles and other symbols. And, to make things worse,
+some come from the regular \TEX\ math fonts, and others from additional ones,
+like the \AMS\ symbols. Again, \OPENTYPE\ and \UNICODE\ will change this as now
+these symbols are quite likely to be found in fonts as they have a larger
+repertoire of shapes.
+
+From the perspective of going from \MKII\ to \MKIV\ it boils down to changing old
+mechanisms that need to handle all this (dependent on the availability of fonts)
+to cleaner setups. Of course, as fonts are never completely consistent, or
+complete for that matter, and features can be implemented incorrectly or
+incompletely we still end up with issues, but (at least in \CONTEXT) dealing with
+that has been moved to runtime manipulation of the fonts themselves (as part of
+the so-called font goodies).
+
+Back to the plain definitions, we now arrive at some new families:
+
+\starttyping
+\newfam\itfam \def\it{\fam\itfam\tenit}
+\newfam\slfam \def\sl{\fam\slfam\tensl}
+\newfam\bffam \def\bf{\fam\bffam\tenbf}
+\newfam\ttfam \def\tt{\fam\ttfam\tentt}
+\stoptyping
+
+The plain \TEX\ format was never meant as a generic solution but instead was an
+example of a macro set and serves as a basis for styles used by Don Knuth for his
+books. Nevertheless, in spite of the fact that \TEX\ was made to be extended,
+pretty soon it became frozen and the macros and font definitions that came with
+it became the benchmark. This might be the reason why \UNICODE\ now has a
+monospaced alphabet. Once you've added monospaced you might as well add more
+alphabets as for sure in some countries they have their own preferences.
+\footnote {At the Dante 2011 meeting we had interesting discussions during dinner
+about the advantages of using Sütterlinschrift for vector algebra and the
+possibilities for providing it in the upcoming \TeX\ Gyre math fonts.}
+
+As with \type {\rm}, the related commands are meant to be used in text as well.
+More interesting is to see what follows now:
+
+\starttyping
+\textfont \itfam=\tenit
+\textfont \slfam=\tensl
+
+\textfont \bffam=\tenbf
+\scriptfont \bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+
+\textfont \ttfam=\tentt
+\stoptyping
+
+Only the bold definition has all members. This means that (regular) italic,
+slanted, and monospaced are not actually that much math at all. You will probably
+only see them in text inside a math formula. From this you can deduce that
+contrary to what I said before, these variants were not really meant for
+alphabets, but for text in which case we need complete fonts. So why do I still
+conclude that we don't need all these families? In practice text inside math is
+not always done this way but with a special set of text commands. This is a
+consequence of the fact that when we add text, we want to be able to do so in
+each language with even language|-|specific properties supported. And, although a
+family switch like the above might do well for English, as soon as you want
+Polish (extended Latin), Cyrillic or Greek you definitely need more than a family
+switch, if only because encodings come into play. In that respect it is
+interesting that we do have a family for monospaced, but that \type {\Im} and
+\type {\Re} have symbolic names, although a more extensive setup can have a
+blackboard family switch.
+
+By the way, the fact that \TEX\ came with italic alongside slanted also has some
+implications. Normally a font design has either italic or something slanted (then
+called oblique). But, Computer Modern came with both, which is no surprise as
+there is a metadesign behind it. And therefore macro packages provide ways to
+deal with those variants alongside. I wonder what would have happened if this had
+not been the case. Nowadays there is always this regular, italic (or oblique),
+bold and bold italic set to deal with, and the whole set can become lighter or
+bolder.
+
+In \CONTEXT\ \MKII, however, the set is larger as we also have slanted and bold
+slanted and even smallcaps, so most definition sets have 7~definitions instead
+of~4. By the way, smallcaps is also special. if Computer Modern had had smallcaps
+for all variants, support for them in \CONTEXT\ undoubtedly would have been kept
+out of the mentioned~7 but always been a new typeface definition (i.e.\ another
+fontclass for insiders). So, when something would have to be smallcaps, one would
+simply switch the whole lot to smallcaps (bold smallcaps, etc.). Of course this
+is what normally happens, at least in my setups, but nevertheless one can still
+find traces of this original Computer Modern|-|driven approach. And now we are at
+it: the whole font system still has the ability to use design sizes and combine
+different ones in sets, if only because in Computer Modern you don't have all
+sizes. The above definitions use ten, seven and five, but for instance for an
+eleven point set up you need to creatively choose the proper originals and scale
+them to the right family size. Nowadays only a few fonts ship with multiple
+design sizes, and although some can be compensated with clever hinting it is a
+pity that we can apply this mechanism only to the traditional \TEX\ fonts.
+
+Concerning the slanting we can remark that \TEX ies are so fond of this that they
+even extended the \TEX\ engines to support slanting in the core machinery (or
+more precisely in the backend while the frontend then uses adapted metrics). So,
+slanting is available for all fonts.
+
+This brings me to another complication in writing a math font subsystem: bold.
+During the development of \CONTEXT\ \MKII\ I was puzzled by the fact that user
+demands with respect to bold were so inconsistent. This is again related to the
+way a somewhat simple setup looks: explicitly switching to bold characters or
+symbols using a \type {\bf} (alike) switch. This works quite well in most cases,
+but what if you use math in a section title? Then the whole lot should be in bold
+and an embedded bold symbol should be heavy (i.e.\ more bold than bold). As a
+consequence (and due to limited availability of complete bold math fonts) in
+\MKII\ there are several bold strategies implemented.
+
+However, in a \UNICODE\ universe things become surprisingly easy as \UNICODE\
+defines those symbols that have bold companions (whatever you want to call them,
+mostly math alphanumerics) so a proper math font has them already. This limited
+subset is often available in a font collection and font designers can stick to
+that subset. So, eventually we get one regular font (with some bold glyphs
+according to the \UNICODE\ specification) and a bold companion that has heavy
+variants for those regular bold shapes.
+
+The simple fact that \UNICODE\ distinguishes regular and bold simplifies an
+implementation as it's easier to take that as a starting point than users who for
+all their goodwill see only their small domain of boldness.
+
+It might sound like \UNICODE\ solves all our problems but this is not entirely
+true. For instance, the \UNICODE\ principle that no character should be there
+more than once has resulted in holes in the \UNICODE\ alphabets, especially
+Greek, blackboard, fraktur and script. As exceptions were made for non|-|math I
+see no reason why the few math characters that now put holes in an alphabet could
+not have been there. As with more standards, following some principles too
+strictly eventually results in all applications that follow the standard having
+to implement the same ugly exceptions explicitly. As some standards aim for
+longevity I wonder how many programming hours will be wasted this way.
+
+This brings me to the conclusion that in practice 16 families are more than
+enough in a \UNICODE|-|aware \TEX\ engine especially when you consider that for a
+specific document one can define a nice set of families, just as in plain \TEX.
+It's simply the fact that we want to make a macro package that does it all and
+therefore has to provide all possible math demands into one mechanism that
+complicates life. And the fact that \UNICODE\ clearly demonstrates that we're
+only talking about alphabets has brought (at least) \CONTEXT\ back to its basics:
+a relatively simple, few|-|family approach combined with a dedicated alphabet
+selection system. Of course eventually users may come up with new demands and we
+might again end up with a mess. After all, it's the fact that \TEX\ gives us
+control that makes it so much fun.
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/hybrid/hybrid-mathml.tex b/doc/context/sources/general/manuals/hybrid/hybrid-mathml.tex
new file mode 100644
index 000000000..3510f5321
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/hybrid-mathml.tex
@@ -0,0 +1,915 @@
+% language=uk
+
+% \enabletrackers[structures.export]
+% \setupbackend[export=yes]
+
+\usemodule[mathml] % also loads calcmath
+
+\startcomponent hybrid-mathml
+
+\environment hybrid-environment
+
+\startchapter[title={Exporting math}]
+
+\startsection [title={Introduction}]
+
+As \CONTEXT\ has an \XML\ export feature and because \TEX\ is often strongly
+associated with math typesetting, it makes sense to take a look at coding and
+exporting math. In the next sections some aspects are discussed. The examples
+shown are a snaphot of the possibilities around June 2011.
+
+\stopsection
+
+\startsection [title={Encoding the math}]
+
+In \CONTEXT\ there are several ways to input math. In the following example we
+will use some bogus math with enough structure to get some interesting results.
+
+The most natural way to key in math is using the \TEX\ syntax. Of course you need
+to know the right commands for accessing special symbols, but if you're familiar
+with a certain domain, this is not that hard.
+
+\startbuffer
+\startformula
+ \frac { x \geq 2 } { y \leq 4 }
+\stopformula
+\stopbuffer
+
+\typebuffer \getbuffer
+
+When you have an editor that can show more than \ASCII\ the following also works
+out well.
+
+\starttyping
+\startformula
+ \frac { x ≥ 2 } { y ≤ 4 }
+\stopformula
+\stoptyping
+
+One can go a step further and use the proper math italic alphabet but there are
+hardly any (monospaced) fonts out there that can visualize it.
+
+\starttyping[escape=yes]
+\startformula
+ \frac { /BTEX\it x/ETEX ≥ 2 } { /BTEX\it y/ETEX ≤ 4 }
+\stopformula
+\stoptyping
+
+Anyhow, \CONTEXT\ is quite capable of remapping the regular alphabets onto the
+real math ones, so you can stick to \type {x} and \type {y}.
+
+Another way to enter the same formula is by using what we call calculator math.
+We came up with this format many years ago when \CONTEXT\ had to process student
+input using a syntax similar to what the calculators they use at school accept.
+
+\startbuffer
+\startformula
+ \calcmath{(x >= 2)/(y <= 4)}
+\stopformula
+\stopbuffer
+
+\typebuffer \getbuffer
+
+As \CONTEXT\ is used in a free and open school math project, and because some of
+our projects mix \MATHML\ into \XML\ encoded sources, we can also consider using
+\MATHML. The conceptually nicest way is to use content markup, where the focus is
+on meaning and interchangability and not on rendering. However, we can render it
+quite well. OpenMath, now present in \MATHML~3 is also supported.
+
+\startbuffer
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <divide/>
+ <apply> <geq/> <ci> x </ci> <cn> 2 </cn> </apply>
+ <apply> <leq/> <ci> y </ci> <cn> 4 </cn> </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\typebuffer \processxmlbuffer
+
+In practice \MATHML\ will be coded using the presentational variant. In many
+aspects this way of coding is not much different from what \TEX\ does.
+
+\startbuffer
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <mfrac>
+ <mrow> <mi> x </mi> <mo> &geq; </mo> <mn> 2 </mn> </mrow>
+ <mrow> <mi> y </mi> <mo> &leq; </mo> <mn> 4 </mn> </mrow>
+ </mfrac>
+</math>
+\stopbuffer
+
+\typebuffer \processxmlbuffer
+
+When we enable \XML\ export in the backend of \CONTEXT, all of the above variants
+are converted into the following:
+
+% <m:math display="block">
+% <m:mrow>
+% <m:mfrac>
+% <m:mrow>
+% <m:mi>𝑥</m:mi>
+% <m:mo>≥</m:mo>
+% <m:mn>2</m:mn>
+% </m:mrow>
+% <m:mrow>
+% <m:mi>𝑦</m:mi>
+% <m:mo>≤</m:mo>
+% <m:mn>4</m:mn>
+% </m:mrow>
+% </m:mfrac>
+% </m:mrow>
+% </m:math>
+
+\starttyping[escape=yes]
+<m:math display="block">
+ <m:mrow>
+ <m:mfrac>
+ <m:mrow>
+ <m:mi>/BTEX\it x/ETEX</m:mi>
+ <m:mo>≥</m:mo>
+ <m:mn>2</m:mn>
+ </m:mrow>
+ <m:mrow>
+ <m:mi>/BTEX\it y/ETEX</m:mi>
+ <m:mo>≤</m:mo>
+ <m:mn>4</m:mn>
+ </m:mrow>
+ </m:mfrac>
+ </m:mrow>
+</m:math>
+\stoptyping
+
+This is pretty close to what we have entered as presentation \MATHML. The main
+difference is that the (display or inline) mode is registered as attribute and
+that entities have been resolved to \UTF. Of course one could use \UTF\ directly
+in the input.
+
+\stopsection
+
+\startsection [title={Parsing the input}]
+
+In \TEX\ typesetting math happens in two stages. First the input is parsed and
+converted into a so called math list. In the following case it's a rather linear
+list, but in the case of a fraction it is a tree.
+
+\startbuffer
+\startformula
+ x = - 1.23
+\stopformula
+\stopbuffer
+
+\typebuffer \getbuffer
+
+A naive export looks as follows. The sequence becomes an \type {mrow}:
+
+\starttyping[escape=yes]
+<m:math display="block">
+ <m:mrow>
+ <m:mi>/BTEX\it x/ETEX</m:mi>
+ <m:mo>=</m:mo>
+ <m:mo>−</m:mo>
+ <m:mn>1</m:mn>
+ <m:mo>.</m:mo>
+ <m:mn>2</m:mn>
+ <m:mn>3</m:mn>
+ </m:mrow>
+</m:math>
+\stoptyping
+
+However, we can clean this up without too much danger of getting invalid output:
+
+\starttyping[escape=yes]
+<m:math display="block">
+ <m:mrow>
+ <m:mi>/BTEX\it x/ETEX</m:mi>
+ <m:mo>=</m:mo>
+ <m:mo>−</m:mo>
+ <m:mn>1.23</m:mn>
+ </m:mrow>
+</m:math>
+\stoptyping
+
+This is still not optimal, as one can argue that the minus sign is part of the
+number. This can be taken care of at the input end:
+
+\startbuffer
+\startformula
+ x = \mn{- 1.23}
+\stopformula
+\stopbuffer
+
+\typebuffer
+
+Now we get:
+
+\starttyping[escape=yes]
+<m:math display="block">
+ <m:mrow>
+ <m:mi>/BTEX\it x/ETEX</m:mi>
+ <m:mo>=</m:mo>
+ <m:mn>−1.23</m:mn>
+ </m:mrow>
+</m:math>
+\stoptyping
+
+Tagging a number makes sense anyway, for instance when we use different numbering
+schemes:
+
+\startbuffer
+\startformula
+ x = \mn{0x20DF} = 0x20DF
+\stopformula
+\stopbuffer
+
+\typebuffer
+
+We get the first number nicely typeset in an upright font but the second one
+becomes a mix of numbers and identifiers:
+
+\getbuffer
+
+This is nicely reflected in the export:
+
+\starttyping[escape=yes]
+<m:math display="block">
+ <m:mrow>
+ <m:mi>/BTEX\it x/ETEX</m:mi>
+ <m:mo>=</m:mo>
+ <m:mn>0x20DF</m:mn>
+ <m:mo>=</m:mo>
+ <m:mn>0</m:mn>
+ <m:mi>/BTEX\it x/ETEX</m:mi>
+ <m:mn>20</m:mn>
+ <m:mi>/BTEX\it D/ETEX</m:mi>
+ <m:mi>/BTEX\it F/ETEX</m:mi>
+ </m:mrow>
+</m:math>
+\stoptyping
+
+In a similar fashion we can use \type {\mo} and \type {\mi} although these are
+seldom needed, if only because characters and symbols already carry these
+properties with them.
+
+\stopsection
+
+\startsection [title={Enhancing the math list}]
+
+When the input is parsed into a math list the individual elements are called
+noads. The most basic noad has pointers to a nucleus, a superscript and a
+subscript and each of them can be the start of a sublist. All lists (with more
+than one character) are quite similar to \type {mrow} in \MATHML. In the export
+we do some flattening because otherwise we would get too many redundant \type
+{mrow}s, not that it hurts but it saves bytes.
+
+\startbuffer
+\startformula
+ x_n^2
+\stopformula
+\stopbuffer
+
+\typebuffer
+
+This renders as:
+
+\getbuffer
+
+And it gets exported as:
+
+\starttyping[escape=yes]
+<m:math display="block">
+ <m:mrow>
+ <m:msubsup>
+ <m:mi>/BTEX\it x/ETEX</m:mi>
+ <m:mi>/BTEX\it n/ETEX</m:mi>
+ <m:mn>2</m:mn>
+ </m:msubsup>
+ </m:mrow>
+</m:math>
+\stoptyping
+
+As said, in the math list this looks more or less the same: we have a noad with a
+nucleus pointing to a math character (\type {x}) and two additional pointers to
+the sub- and superscripts.
+
+After this math list is typeset, we will end up with horizontal and vertical
+lists with glyphs, kerns, glue and other nodes. In fact we end up with what can
+be considered regular references to slots in a font mixed with positioning
+information. In the process the math properties gets lost. This happens between
+step~3 and~4 in the next overview.
+
+\starttabulate[|l|l|l|]
+\NC 1 \NC \XML \NC optional alternative input \NC \NR
+\NC 2 \NC \TEX \NC native math coding \NC \NR
+\NC 3 \NC noads \NC intermediate linked list / tree \NC \NR
+\NC 4 \NC nodes \NC linked list with processed (typeset) math \NC \NR
+\NC 5a \NC \PDF \NC page description suitable for rendering \NC \NR
+\NC 5b \NC \XML \NC export reflecting the final document content \NC \NR
+\stoptabulate
+
+In \CONTEXT\ \MKIV\ we intercept the math list (with noads) and apply a couple of
+manipulations to it, most noticeably relocation of characters. Last in the
+(currently some 10) manipulation passes over the math list comes tagging. This
+only happens when the export is active or when we produce tagged pdf. \footnote
+{Currently the export is the benchmark and the tagged \PDF\ implementation
+follows, so there can be temporary incompatibilities.}
+
+By tagging the recognizable math snippets we can later use those persistent
+properties to reverse engineer the \MATHML\ from the input.
+
+\stopsection
+
+\startsection [title={Intercepting the typeset content}]
+
+When a page gets shipped out, we also convert the typeset content to an
+intermediate form, ready for export later on. Version 0.22 of the exporter has a
+rather verbose tracing mechanism and the simple example with sub- and superscript
+is reported as follows:
+
+\starttyping[escape=yes]
+<math-8 trigger='268' index='1'>
+ <mrow-20 trigger='268' index='1'>
+ <msubsup-1 trigger='268' index='1'>
+ <mi-15 trigger='268' index='1'>
+ <!-- processing glyph 2 (tag 270) -->
+ <!-- moving from depth 11 to 11 (mi-15) -->
+ <!-- staying at depth 11 (mi-15) -->
+ <!-- start content with length 4 -->
+ /BTEX\it x/ETEX
+ <!-- stop content -->
+ <!-- moving from depth 11 to 11 (mn-13) -->
+ </mi-15>
+ <mn-13 trigger='270' index='2'>
+ <!-- processing kern > threshold (tag 270 => 267)
+ <!-- moving from depth 11 to 11 (mn-13) -->
+ <!-- staying at depth 11 (mn-13) -->
+ <!-- start content with length 1 -->
+ 2
+ <!-- stop content -->
+ <!-- injecting spacing 9 -->
+ <!-- moving from depth 11 to 10 (msubsup-1) -->
+ </mn-13>
+ </msubsup-1>
+ <!-- processing glyph 𝑛 (tag 269) -->
+ <!-- moving from depth 9 to 10 (msubsup-1) -->
+ <msubsup-1 trigger='267' index='2'>
+ <!-- start content with length 1 -->
+
+ <!-- stop content -->
+ </msubsup-1>
+ <!-- moving from depth 9 to 11 (mi-16) -->
+ <msubsup-1 trigger='269' index='3'>
+ <mi-16 trigger='269' index='1'>
+ <!-- processing glue > threshold (tag 269 => 262) -->
+ <!-- moving from depth 11 to 11 (mi-16) -->
+ <!-- staying at depth 11 (mi-16) -->
+ <!-- start content with length 4 -->
+ /BTEX\it n/ETEX
+ <!-- stop content -->
+ <!-- injecting spacing 6 -->
+ <!-- moving from depth 11 to 6 (formula-8) -->
+ </mi-16>
+ </msubsup-1>
+ </mrow-20>
+</math-8>
+\stoptyping
+
+This is not yet what we want so some more effort is needed in order to get proper
+\MATHML.
+
+\stopsection
+
+\startsection [title={Exporting the result}]
+
+The report that we showed before representing the simple example with super- and
+subscripts is strongly related to the visual rendering. It happens that \TEX\
+first typesets the superscript and then deals with the subscript. Some spacing is
+involved which shows up in the report between the two scripts.
+
+In \MATHML\ we need to swap the order of the scripts, so effectively we need:
+
+\starttyping[escape=yes]
+<math-8 trigger='268' index='1'>
+ <mrow-20 trigger='268' index='1'>
+ <msubsup-1 trigger='268' index='1'>
+ <mi-15 trigger='268' index='1'>
+ /BTEX\it x/ETEX
+ </mi-15>
+ <mi-16 trigger='269' index='2'>
+ /BTEX\it n/ETEX
+ </mi-16>
+ <mn-13 trigger='270' index='3'>
+ 2
+ </mn-13>
+ </msubsup-1>
+ </mrow-20>
+</math-8>
+\stoptyping
+
+This swapping (and some further cleanup) is done before the final tree is written
+to a file. There we get:
+
+\starttyping[escape=yes]
+<m:math display="block">
+ <m:mrow>
+ <m:msubsup>
+ <m:mi>/BTEX\it x/ETEX</m:mi>
+ <m:mi>/BTEX\it n/ETEX</m:mi>
+ <m:mn>2</m:mn>
+ </m:msubsup>
+ </m:mrow>
+</m:math>
+\stoptyping
+
+This looks pretty close to the intermediate format. In case you wonder with how
+much intermediate data we end up, the answer is: quite some. The reason will be
+clear: we intercept typeset output and reconstruct the input from that, which
+means that we have additional information travelling with the content. Also, we
+need to take crossing pages into account and we need to reconstruct paragraphs.
+There is also some overhead in making the \XML\ look acceptable but that is
+neglectable. In terms of runtime, the overhead of an export (including tagging)
+is some 10\% which is not that bad, and there is some room for optimization.
+
+\stopsection
+
+\startsection[title={Special treatments}]
+
+In content \MATHML\ the \type {apply} tag is the cornerstone of the definition.
+Because there is enough information the rendering mechanism can deduce when a
+function is applied and act accordingly when it comes to figuring out the right
+amount of spacing. In presentation \MATHML\ there is no such information and
+there the signal is given by putting a character with code \type {U+2061} between
+the function identifier and the argument. In \TEX\ input all this is dealt with
+in the macro that specifies a function but some ambiguity is left.
+
+Compare the following two formulas:
+
+\startbuffer
+\startformula
+ \tan = \frac { \sin } { \cos }
+\stopformula
+\stopbuffer
+
+\typebuffer \getbuffer
+
+In the export this shows up as follows:
+
+\starttyping
+<m:math display="block">
+ <m:mrow>
+ <!-- begin function -->
+ <m:mi>tan</m:mi>
+ <!-- end function -->
+ <m:mo>=</m:mo>
+ <m:mrow>
+ <m:mfrac>
+ <m:mrow>
+ <!-- begin function -->
+ <m:mi>sin</m:mi>
+ <!-- end function -->
+ </m:mrow>
+ <m:mrow>
+ <!-- begin function -->
+ <m:mi>cos</m:mi>
+ <!-- end function -->
+ </m:mrow>
+ </m:mfrac>
+ </m:mrow>
+ </m:mrow>
+</m:math>
+\stoptyping
+
+Watch how we know that \type {tan} is a function and not a multiplication of the
+variables \type {t}, \type{a} and~\type {n}.
+
+In most cases functions will get an argument, as in:
+
+\startbuffer
+\startformula
+ \tan (x) = \frac { \sin (x) } { \cos (x) }
+\stopformula
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\starttyping[escape=yes]
+<m:math display="block">
+ <m:mrow>
+ <!-- begin function -->
+ <m:mi>tan</m:mi>
+ <!-- end function -->
+ <m:mo>(</m:mo>
+ <m:mi>/BTEX\it x/ETEX</m:mi>
+ <m:mo>)</m:mo>
+ <m:mo>=</m:mo>
+ <m:mrow>
+ <m:mfrac>
+ <m:mrow>
+ <!-- begin function -->
+ <m:mi>sin</m:mi>
+ <!-- end function -->
+ <m:mo>(</m:mo>
+ <m:mi>/BTEX\it x/ETEX</m:mi>
+ <m:mo>)</m:mo>
+ </m:mrow>
+ <m:mrow>
+ <!-- begin function -->
+ <m:mi>cos</m:mi>
+ <!-- end function -->
+ <m:mo>(</m:mo>
+ <m:mi>/BTEX\it x/ETEX</m:mi>
+ <m:mo>)</m:mo>
+ </m:mrow>
+ </m:mfrac>
+ </m:mrow>
+ </m:mrow>
+</m:math>
+\stoptyping
+
+As expected we now see the arguments but it is still not clear that the function
+has to be applied.
+
+\startbuffer
+\startformula
+ \apply \tan {(x)} = \frac {
+ \apply \sin {(x)}
+ } {
+ \apply \cos {(x)}
+ }
+\stopformula
+\stopbuffer
+
+\typebuffer \getbuffer
+
+This time we get the function application signal in the output. We could add it
+automatically in some cases but for the moment we don't do so. Because this
+trigger has no visual rendering and no width it will not be visible in an editor.
+Therefore we output an entity.
+
+\starttyping[escape=yes]
+<m:math display="block">
+ <m:mrow>
+ <m:mi>tan</m:mi>
+ <m:mo>&#x2061;</m:mo>
+ <m:mo>(</m:mo>
+ <m:mi>/BTEX\it x/ETEX</m:mi>
+ <m:mo>)</m:mo>
+ <m:mo>=</m:mo>
+ <m:mrow>
+ <m:mfrac>
+ <m:mrow>
+ <m:mi>sin</m:mi>
+ <m:mo>&#x2061;</m:mo>
+ <m:mo>(</m:mo>
+ <m:mi>/BTEX\it x/ETEX</m:mi>
+ <m:mo>)</m:mo>
+ </m:mrow>
+ <m:mrow>
+ <m:mi>cos</m:mi>
+ <m:mo>&#x2061;</m:mo>
+ <m:mo>(</m:mo>
+ <m:mi>/BTEX\it x/ETEX</m:mi>
+ <m:mo>)</m:mo>
+ </m:mrow>
+ </m:mfrac>
+ </m:mrow>
+ </m:mrow>
+</m:math>
+\stoptyping
+
+In the future, we will extend the \type {\apply} macro to also deal with
+automatically managed fences. Talking of those, fences are actually supported
+when explicitly coded:
+
+\startbuffer
+\startformula
+ \apply \tan {\left(x\right)} = \frac {
+ \apply \sin {\left(x\right)}
+ } {
+ \apply \cos {\left(x\right)}
+ }
+\stopformula
+\stopbuffer
+
+\typebuffer \getbuffer
+
+This time we get a bit more structure because delimiters in \TEX\ can be
+recognized easily. Of course it helps that in \CONTEXT\ we already have the
+infrastructure in place.
+
+\starttyping[escape=yes]
+<m:math display="block">
+ <m:mrow>
+ <m:mi>tan</m:mi>
+ <m:mo>&#x2061;</m:mo>
+ <m:mrow>
+ <m:mfenced left="(" right=")">
+ <m:mi>/BTEX\it x/ETEX</m:mi>
+ </m:mfenced>
+ </m:mrow>
+ <m:mo>=</m:mo>
+ <m:mrow>
+ <m:mfrac>
+ <m:mrow>
+ <m:mi>sin</m:mi>
+ <m:mo>&#x2061;</m:mo>
+ <m:mfenced left="(" right=")">
+ <m:mi>/BTEX\it x/ETEX</m:mi>
+ </m:mfenced>
+ </m:mrow>
+ <m:mrow>
+ <m:mi>cos</m:mi>
+ <m:mo>&#x2061;</m:mo>
+ <m:mfenced left="(" right=")">
+ <m:mi>/BTEX\it x/ETEX</m:mi>
+ </m:mfenced>
+ </m:mrow>
+ </m:mfrac>
+ </m:mrow>
+ </m:mrow>
+</m:math>
+\stoptyping
+
+Yet another special treatment is needed for alignments. We use the next example
+to show some radicals as well.
+
+\startbuffer
+\startformula
+ \startalign
+ \NC a^2 \EQ \sqrt{b} \NR
+ \NC c \EQ \frac{d}{e} \NR
+ \NC \EQ f \NR
+ \stopalign
+\stopformula
+\stopbuffer
+
+\typebuffer
+
+It helps that in \CONTEXT\ we use a bit of structure in math alignments. In fact,
+a math alignment is just a regular alignment, with math in its cells. As with
+other math, eventually we end up with boxes so we need to make sure that enough
+information is passed along to reconstuct the original.
+
+\getbuffer
+
+\starttyping[escape=yes]
+<m:math display="inline">
+ <m:mtable detail='align'>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:msup>
+ <m:mi>/BTEX\it a/ETEX</m:mi>
+ <m:mn>2</m:mn>
+ </m:msup>
+ </m:mrow>
+ </m:mtd>
+ <m:mtd>
+ <m:mrow>
+ <m:mo>=</m:mo>
+ <m:mroot>
+ <m:mi>/BTEX\it b/ETEX</m:mi>
+ </m:mroot>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mi>/BTEX\it c/ETEX</m:mi>
+ </m:mrow>
+ </m:mtd>
+ <m:mtd>
+ <m:mrow>
+ <m:mo>=</m:mo>
+ <m:mfrac>
+ <m:mrow>
+ <m:mi>/BTEX\it d/ETEX</m:mi>
+ </m:mrow>
+ <m:mrow>
+ <m:mi>/BTEX\it e/ETEX</m:mi>
+ </m:mrow>
+ </m:mfrac>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo>=</m:mo>
+ <m:mi>/BTEX\it f/ETEX</m:mi>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+</m:math>
+\stoptyping
+
+Watch how the equal sign ends up in the cell. Contrary to what you might expect,
+the relation symbols (currently) don't end up in their own column. Keep in mind
+that these tables look structured but that presentational \MATHML\ does not
+assume that much structure. \footnote {The spacing could be improved here but
+it's just an example, not something real.}
+
+\stopsection
+
+\startsection[title=Units]
+
+Rather early in the history of \CONTEXT\ we had support for units and the main
+reason for this was that we wanted consistent spacing. The input of the old
+method looks as follows:
+
+\starttyping
+10 \Cubic \Meter \Per \Second
+\stoptyping
+
+This worked in regular text as well as in math and we even have an \XML\ variant.
+A few years ago I played with a different method and the \LUA\ code has been
+laying around for a while but never made it into the \CONTEXT\ core. However,
+when playing with the export, I decided to pick up that thread. The verbose
+variant can now be coded as:
+
+\starttyping
+10 \unit{cubic meter per second}
+\stoptyping
+
+but equally valid is:
+
+\starttyping
+10 \unit{m2/s}
+\stoptyping
+
+and also
+
+\starttyping
+\unit{10 m2/s}
+\stoptyping
+
+is okay. So, one can use the short (often official) symbols as well as more
+verbose names. In order to see what gets output we cook up some bogus units.
+
+\startbuffer
+30 \unit{kilo pascal square meter / kelvin second}
+\stopbuffer
+
+\typebuffer
+
+This gets rendered as: \getbuffer. The export looks as follows:
+
+\starttyping
+30 <unit>kPa⋅m<sup>2</sup>/K⋅s</unit>
+\stoptyping
+
+\startbuffer
+\unit{30 kilo pascal square meter / kelvin second}
+\stopbuffer
+
+You can also say:
+
+\typebuffer
+
+and get: \getbuffer. This time the export looks like this:
+
+\starttyping
+<quantity>
+ <number>30</number>
+ <unit>kPa⋅m<sup>2</sup>/K⋅s</unit>
+</quantity>
+\stoptyping
+
+\startbuffer
+$30 \unit{kilo pascal square meter / kelvin second }$
+\stopbuffer
+
+When we use units in math, the rendering is mostly the same. So,
+
+\typebuffer
+
+Gives: \getbuffer, but the export now looks different:
+
+\starttyping
+<m:math display="inline">
+ <m:mrow>
+ <m:mn>30</m:mn>
+ <m:maction actiontype="unit">
+ <m:mrow>
+ <m:mi mathvariant="normal">k</m:mi>
+ <m:mi mathvariant="normal">P</m:mi>
+ <m:mi mathvariant="normal">a</m:mi>
+ <m:mo>⋅</m:mo>
+ <m:msup>
+ <m:mi mathvariant="normal">m</m:mi>
+ <m:mn>2</m:mn>
+ </m:msup>
+ <m:mo>/</m:mo>
+ <m:mi mathvariant="normal">K</m:mi>
+ <m:mo>⋅</m:mo>
+ <m:mi mathvariant="normal">s</m:mi>
+ </m:mrow>
+ </m:maction>
+ </m:mrow>
+</m:math>
+\stoptyping
+
+Watch how we provide some extra information about it being a unit and how the
+rendering is controlled as by default a renderer could turn the \type {K} and
+other identifiers into math italic. Of course the subtle spacing is lost as we
+assume a clever renderer that can use the information provided in the \type
+{maction}.
+
+\stopsection
+
+\startsection[title=Conclusion]
+
+So far the results of the export look quite acceptable. It is to be seen to what
+extent typographic detail will be added. Thanks to \UNICODE\ math we don't need
+to add style directives. Because we carry information with special spaces, we
+could add these details if needed but for the moment the focus is on getting the
+export robust on the one end, and extending \CONTEXT's math support with some
+additional structure.
+
+The export shows in the previous sections was not entirely honest: we didn't show
+the wrapper. Say that we have this:
+
+\startbuffer
+\startformula
+ e = mc^2
+\stopformula
+\stopbuffer
+
+\typebuffer
+
+This shows up as:
+
+\getbuffer
+
+and exports as:
+
+\starttyping[escape=yes]
+<formula>
+ <formulacontent>
+ <m:math display="block">
+ <m:mrow>
+ <m:mi>/BTEX\it e/ETEX</m:mi>
+ <m:mo>=</m:mo>
+ <m:mi>/BTEX\it m/ETEX</m:mi>
+ <m:msup>
+ <m:mi>/BTEX\it c/ETEX</m:mi>
+ <m:mn>2</m:mn>
+ </m:msup>
+ </m:mrow>
+ </m:math>
+ </formulacontent>
+</formula>
+\stoptyping
+
+\startbuffer
+\placeformula
+ \startformula
+ e = mc^2
+ \stopformula
+\stopbuffer
+
+\typebuffer
+
+This becomes:
+
+\getbuffer
+
+and exports as:
+
+\starttyping[escape=yes]
+<formula>
+ <formulacontent>
+ <m:math display="block">
+ <m:mrow>
+ <m:mi>/BTEX\it e/ETEX</m:mi>
+ <m:mo>=</m:mo>
+ <m:mi>/BTEX\it m/ETEX</m:mi>
+ <m:msup>
+ <m:mi>/BTEX\it c/ETEX</m:mi>
+ <m:mn>2</m:mn>
+ </m:msup>
+ </m:mrow>
+ </m:math>
+ </formulacontent>
+ <formulacaption>
+ (<formulanumber detail='formula'>1.1</formulanumber>)
+ </formulacaption>
+</formula>
+\stoptyping
+
+The caption can also have a label in front of the number. The best way to deal
+with this still under consideration. I leave it to the reader to wonder how we
+get the caption at the same level as the content while in practice the number is
+part of the formula.
+
+Anyway, the previous pages have demonstrated that with version 0.22 of the
+exporter we can already get a quite acceptable math export. Of course more will
+follow.
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/hybrid/hybrid-merge.tex b/doc/context/sources/general/manuals/hybrid/hybrid-merge.tex
new file mode 100644
index 000000000..2e5b96ed8
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/hybrid-merge.tex
@@ -0,0 +1,225 @@
+% language=uk
+
+\startcomponent hybrid-merge
+
+\environment hybrid-environment
+
+\startchapter[title={Including pages}]
+
+\startsection [title={Introduction}]
+
+It is tempting to add more and more features to the backend code
+of the engine but it is not really needed. Of course there are
+features that can best be supported natively, like including
+images. In order to include \PDF\ images in \LUATEX\ the backend
+uses a library (xpdf or poppler) that can load an page from a file
+and embed that page into the final \PDF, including all relevant
+(indirect) objects needed for rendering. In \LUATEX\ an
+experimental interface to this library is included, tagged as
+\type {epdf}. In this chapter I will spend a few words on my first
+attempt to use this new library.
+
+\stopsection
+
+\startsection [title={The library}]
+
+The interface is rather low level. I got the following example
+from Hartmut (who is responsible for the \LUATEX\ backend code and
+this library).
+
+\starttyping
+local doc = epdf.open("luatexref-t.pdf")
+local cat = doc:getCatalog()
+local pag = cat:getPage(3)
+local box = pag:getMediaBox()
+
+local w = pag:getMediaWidth()
+local h = pag:getMediaHeight()
+local n = cat:getNumPages()
+local m = cat:readMetadata()
+
+print("nofpages: ", n)
+print("metadata: ", m)
+print("pagesize: ", w .. " * " .. h)
+print("mediabox: ", box.x1, box.x2, box.y1, box.y2)
+\stoptyping
+
+As you see, there are accessors for each interesting property
+of the file. Of course such an interface needs to be extended
+when the \PDF\ standard evolves. However, once we have access to
+the so called catalog, we can use regular accessors to the
+dictionaries, arrays and other data structures. So, in fact we
+don't need a full interface and can draw the line somewhere.
+
+There are a couple of things that you normally do not want to
+deal with. A \PDF\ file is in fact just a collection of objects
+that form a tree and each object can be reached by an index using
+a table that links the index to a position in the file. You don't
+want to be bothered with that kind of housekeeping indeed. Some data
+in the file, like page objects and annotations are organized in a
+tree form that one does not want to access in that form, so again
+we have something that benefits from an interface. But the
+majority of the objects are simple dictionaries and arrays.
+Streams (these hold the document content, image data, etc.) are
+normally not of much interest, but the library provides an
+interface as you can bet on needing it someday. The library also
+provides ways to extend the loaded \PDF\ file. I will not discuss
+that here.
+
+Because in \CONTEXT\ we already have the \type {lpdf} library for
+creating \PDF\ structures, it makes sense to define a similar
+interface for accessing \PDF. For that I wrote a wrapper that will
+be extended in due time (read: depending on needs). The previous
+code now looks as follows:
+
+\starttyping
+local doc = epdf.open("luatexref-t.pdf")
+local cat = doc.Catalog
+local pag = cat.Pages[3]
+local box = pag.MediaBox
+
+local llx, lly, urx, ury = box[1], box[2] box[3], box[4]
+
+local w = urx - llx -- or: box.width
+local h = ury - lly -- or: box.height
+local n = cat.Pages.size
+local m = cat.Metadata.stream
+
+print("nofpages: ", n)
+print("metadata: ", m)
+print("pagesize: ", w .. " * " .. h)
+print("mediabox: ", llx, lly, urx, ury)
+\stoptyping
+
+If we write code this way we are less dependent on the exact \API,
+especially because the \type {epdf} library uses methods to access
+the data and we cannot easily overload method names in there. When
+you look at the \type {box}, you will see that the natural way to
+access entries is using a number. As a bonus we also provide the
+\type {width} and \type {height} entries.
+
+\stopsection
+
+\startsection [title={Merging links}]
+
+It has always been on my agenda to add the possibility to carry
+the (link) annotations with an included page from a document. This
+is not that much needed in a regular document, but it can be handy
+when you use \CONTEXT\ to assemble documents. In any case, such a
+merge has to happen in such a way that it does not interfere with
+other links in the parent document. Supporting this in the engine
+is no option as each macro package follows its own approach to
+referencing and interactivity. Also, demands might differ and one
+would end up with a lot of (error prone) configurability. Of course
+we want scaled pages to behave well too.
+
+Implementing the merge took about a day and most of that time was
+spent on experimenting with the \type {epdf} library and making
+the first version of the wrapper. I definitely had expected to
+waste more time on it. So, this is yet another example of
+extensions that are quite doable in the \LUA|-|\TEX\ mix. Of
+course it helps that the \CONTEXT\ graphic inclusion code provides
+enough information to integrate such a feature. The merge is
+controlled by the interaction key, as shown here:
+
+\starttyping
+\externalfigure[somefile.pdf][page=1,scale=700,interaction=yes]
+\externalfigure[somefile.pdf][page=2,scale=600,interaction=yes]
+\externalfigure[somefile.pdf][page=3,scale=500,interaction=yes]
+\stoptyping
+
+You can finetune the merge by providing a list of options to the
+interaction key but that's still somewhat experimental. As a start
+the following links are supported.
+
+\startitemize[packed]
+\startitem internal references by name (often structure related) \stopitem
+\startitem internal references by page (e.g.\ table of contents) \stopitem
+\startitem external references by file (optionally by name and page) \stopitem
+\startitem references to uri's (normally used for webpages) \stopitem
+\stopitemize
+
+When users like this functionality (or when I really need it
+myself) more types of annotations can be added although support
+for \JAVASCRIPT\ and widgets doesn't make much sense. On the other
+hand, support for destinations is currently somewhat simplified
+but at some point we will support the relevant zoom options.
+
+The implementation is not that complex:
+
+\startitemize[packed]
+\startitem check if the included page has annotations \stopitem
+\startitem loop over the list of annotations and determine if
+ an annotation is supported (currently links) \stopitem
+\startitem analyze the annotation and overlay a button using the
+ destination that belongs to the annotation \stopitem
+\stopitemize
+
+Now, the reason why we can keep the implementation so simple is that
+we just map onto existing \CONTEXT\ functionality. And, as we have
+a rather integrated support for interactive actions, only a few
+basic commands are involved. Although we could do that all in
+\LUA, we delegate this to \TEX. We create a layer which we put on top
+of the image. Links are put onto this layer using the equivalent of:
+
+\starttyping
+\setlayer
+ [epdflinks]
+ [x=...,y=...,preset=leftbottom]
+ {\button
+ [width=...,height=...,offset=overlay,frame=off]
+ {}% no content
+ [...]}}
+\stoptyping
+
+The \type {\button} command is one of those interaction related
+commands that accepts any action related directive. In this first
+implementation we see the following destinations show up:
+
+\starttyping
+somelocation
+url(http://www.pragma-ade.com)
+file(somefile)
+somefile::somelocation
+somefile::page(10)
+\stoptyping
+
+References to pages become named destinations and are later
+resolved to page destinations again, depending on the
+configuration of the main document. The links within an included
+file get their own namespace so (hopefully) they will not clash
+with other links.
+
+We could use lower level code which is faster but we're not
+talking of time critical code here. At some point I might optimize
+the code a bit but for the moment this variant gives us some
+tracing options for free. Now, the nice thing about using this
+approach is that the already existing cross referencing mechanisms
+deal with the details. Each included page gets a unique reference
+so references to not included pages are ignored simply because
+they cannot be resolved. We can even consider overloading certain
+types of links or ignoring named destinations that match a
+specific pattern. Nothing is hard coded in the engine so we have
+complete freedom of doing that.
+
+\stopsection
+
+\startsection [title={Merging layers}]
+
+When including graphics from other applications it might be that
+they have their content organized in layers (that then can be
+turned on or off). So it will be no surprise that on the agenda is
+merging layer information: first a straightforward inclusion of
+optional content dictionaries, but it might make sense to parse
+the content stream and replace references to layers by those that
+are relevant in the main document. Especially when graphics come
+from different sources and layer names are inconsistent some
+manipulation might be needed so maybe we need more detailed
+control. Implementing this is is no big deal and mostly a matter
+of figuring out a clean and simple user interface.
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/hybrid/hybrid-mkvi.tex b/doc/context/sources/general/manuals/hybrid/hybrid-mkvi.tex
new file mode 100644
index 000000000..5cb43838f
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/hybrid-mkvi.tex
@@ -0,0 +1,275 @@
+% language=uk
+
+\startcomponent hybrid-mkvi
+
+\environment hybrid-environment
+
+\startchapter[title={Upto \ConTeXt\ MkVI}]
+
+\startsection [title={Introduction}]
+
+No, this is not a typo: \MKVI\ is the name of upcoming functionality but with an
+experimental character. It is also a playground. Therefore this is not the final
+story.
+
+\stopsection
+
+\startsection [title={Defining macros}]
+
+When you define macros in \TEX, you use the \type {#} to indicate variables. So,
+you code can end up with the following:
+
+\startbuffer
+\def\MyTest#1#2#3#4%
+ {\dontleavehmode
+ \dostepwiserecurse{#1}{#2}{#3}
+ {\ifnum\recurselevel>#1 \space,\fi
+ \recurselevel: #4\space}%
+ .\par}
+\stopbuffer
+
+\typebuffer
+
+This macro is called with 4 arguments:
+
+\starttyping
+\MyTest{3}{8}{1}{Hi}
+\stoptyping
+
+However, using numbers as variable identifiers might not have your preference. It
+makes perfect sense if you keep in mind that \TEX\ supports delimited arguments
+using arbitrary characters. But in practice, and especially in \CONTEXT\ we use
+only a few well defined variants. \ This is why you can also imagine:
+
+\startbuffer
+\def\MyTest#first#last#step#text%
+ {\dontleavehmode
+ \dostepwiserecurse{#first}{#last}{#step}
+ {\ifnum\recurselevel>#first \space,\fi
+ \recurselevel: #text}%
+ .\par}
+\stopbuffer
+
+\typebuffer
+
+In order for this to work, you need to give your file the suffix \type {mkvi} or
+you need to put a directive on the first line:
+
+\starttyping
+% macros=mkvi
+\stoptyping
+
+You can of course use delimited arguments as well, given that
+the delimiters are not letters.
+
+\startbuffer
+\def\TestOne[#1]%
+ {this is: #1}
+
+\def\TestTwo#some%
+ {this is: #some}
+
+\def\TestThree[#whatever][#more]%
+ {this is: #more and #whatever}
+
+\def\TestFour[#one]#two%
+ {\def\TestFive[#alpha][#one]%
+ {#one, #two, #alpha}}
+\stopbuffer
+
+\typebuffer \mkvibuffer
+
+You can also use the following variant which is already present for a while but
+not that much advertised. This method ignores all spaces in definitions so if you
+need one, you have to use \type {\space}.
+
+\startbuffer
+\starttexdefinition TestSix #oeps
+
+ here: #oeps
+
+\stoptexdefinition
+\stopbuffer
+
+\typebuffer \mkvibuffer
+
+These commands work as expected:
+
+\startbuffer
+\startlines
+ \TestOne [one]
+ \TestTwo {one}
+ \TestThree[one][two]
+ \TestFour [one]{two}
+ \TestFive [one][two]
+ \TestSix {one}
+\stoplines
+\stopbuffer
+
+\typebuffer
+
+% We need to obey catcode changes (we can use \getbuffer
+% instead).
+
+\getbuffer
+
+You can use buffers to collect definitions. In that case you can force
+preprocessing of the buffer with \type {\mkvibuffer[name]}.
+
+\stopsection
+
+\startsection[title={Implementation}]
+
+This functionality is not hard codes in the \LUATEX\ engine as this is not needed
+at all. We just preprocess the file before it gets loaded and this is something
+that is relatively easy to implement. Already early in the development of
+\LUATEX\ we have decided that instead of hard coding solutions, opening up makes
+more sense.
+
+One of the first mechanisms that were opened up was file IO. This means that when
+a file is opened, you can decide to intercept lines and process them before
+passing them to the traditional built in input parser. The user can be completely
+unaware of this. In fact, as \LUATEX\ only accepts \UTF-8 preprocessing will
+likely happen already when other input encodings are used.
+
+The following helper functions are available:
+
+\starttyping
+local result = resolvers.macros.preprocessed(str)
+\stoptyping
+
+This function returns a string with all named parameters
+replaced.
+
+\starttyping
+resolvers.macros.convertfile(oldname,newname)
+\stoptyping
+
+This function converts a file into a new one.
+
+\starttyping
+local result = resolvers.macros.processmkvi(str,filename)
+\stoptyping
+
+This function converts the string but only if the suffix of the filename is \type
+{mkvi} or when the first line of the string is a comment line containing \type
+{macros=mkvi}. Otherwise the original string is returned. The filename is
+optional.
+
+\stopsection
+
+\startsection[title=A few details]
+
+Imagine that you want to do this:
+
+\starttyping
+\def\test#1{before#1after}
+\stoptyping
+
+When we use names this could look like:
+
+\starttyping
+\def\test#inbetween{before#inbetweenafter}
+\stoptyping
+
+and that is not going to work out well. We could be more liberal with spaces,
+like
+
+\starttyping
+\def\test #inbetween {before #inbetween after}
+\stoptyping
+
+but then getting spaces in the output before or after variables would get more
+complex. However, there is a way out:
+
+\starttyping
+\def\test#inbetween{before#{inbetween}after}
+\stoptyping
+
+As the sequence \type +#{+ has a rather low probablility of showing up in a \TEX\
+source file, this kind of escaping is part of the game. So, all the following
+cases are valid:
+
+\starttyping
+\def\test#oeps{... #oeps ...}
+\def\test#oeps{... #{oeps} ...}
+\def\test#{main:oeps}{... #{main:oeps} ...}
+\def\test#{oeps:1}{... #{oeps:1} ...}
+\def\test#{oeps}{... #oeps ...}
+\stoptyping
+
+When you use the braced variant, all characters except braces are acceptable as
+name, optherwise only lowercase and uppercase characters are permitted.
+
+Normally \TEX\ uses a couple of special tokens like \type {^} and \type {_}. In a
+macro definition file you can avoid these by using primitives:
+
+\starttabulate[|cT|lT|]
+\NC \letterampersand \NC \tex{aligntab} \NC \NR
+\NC \letterhash \NC \tex{alignmark} \NC \NR
+\NC \letterhat \NC \tex{Usuperscript} \NC \NR
+\NC \letterunderscore \NC \tex{Usubscript} \NC \NR
+\NC \letterdollar \NC \tex{Ustartmath} \NC \NR
+\NC \letterdollar \NC \tex{Ustopmath} \NC \NR
+\NC \letterdollar\letterdollar \NC \tex{Ustartdisplaymath} \NC \NR
+\NC \letterdollar\letterdollar \NC \tex{Ustopdisplaymath} \NC \NR
+\stoptabulate
+
+Especially the \type {aligntab} is worth noticing: using that one directly in a
+macro definition can result in unwanted replacements, depending whether a match
+can be found. In practice the following works out well
+
+\starttyping
+\def\test#oeps{test:#oeps \halign{##\cr #oeps\cr}}
+\stoptyping
+
+You can use \UTF-8\ characters as well. For practical reasons this is only
+possible with the braced variant.
+
+\starttyping
+\def\blä#{blá}{blà:#{blá}}
+\stoptyping
+
+There will probably be more features in future versions but each of them needs
+careful consideration in order to prevent interferences.
+
+\stopsection
+
+\startsection[title=Utilities]
+
+There is currently one utility (or in fact an option to an existing utility):
+
+\starttyping
+mtxrun --script interface --preprocess whatever.mkvi
+\stoptyping
+
+This will convert the given file(s) to new ones, with the default suffix
+\type{tex}. Existing files will not be overwritten unless \type {---force} is
+given. You can also force another suffix:
+
+\starttyping
+mtxrun --script interface --preprocess whatever.mkvi --suffix=mkiv
+\stoptyping
+
+A rather plain module \type {luatex-preprocessor.lua} is provided for other
+usage. That variant provides a somewhat simplified version.
+
+Given that you have a \type {luatex-plain} format you can run:
+
+\starttyping
+luatex --fmt=luatex-plain luatex-preprocessor-test.tex
+\stoptyping
+
+Such a plain format can be made with:
+
+\starttyping
+luatex --ini luatex-plain
+\stoptyping
+
+You probably need to move the format to a proper location in your \TEX\ tree.
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/hybrid/hybrid-optimize.tex b/doc/context/sources/general/manuals/hybrid/hybrid-optimize.tex
new file mode 100644
index 000000000..00772ee4b
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/hybrid-optimize.tex
@@ -0,0 +1,501 @@
+% language=uk
+
+\startcomponent hybrid-optimize
+
+\environment hybrid-environment
+
+\startchapter[title={Optimizations again}]
+
+\startsection [title={Introduction}]
+
+Occasionally we do some timing on new functionality in either
+\LUATEX\ or \MKIV, so here's another wrapup.
+
+\stopsection
+
+\startsection [title={Font loading}]
+
+In \CONTEXT\ we cache font data in a certain way. Loading a font from the cache
+takes hardly any time. However, preparation takes more time as well memory as we
+need to go from the fontforge ordering to one we can use. In \MKIV\ we have
+several font tables:
+
+\startitemize[packed]
+\startitem
+ The original fontforge table: this one is only loaded once and converted to
+ another representation that is cached.
+\stopitem
+\startitem
+ The cached font representation that is the basis for further manipulations.
+\stopitem
+\startitem
+ In base mode this table is converted to a (optionally cached) scaled \TFM\
+ table that is passed to \TEX.
+\stopitem
+\startitem
+ In node mode a limited scaled version is passed to \TEX. As with base mode,
+ this table is kept in memory so that we can access the data.
+\stopitem
+\startitem
+ When processing features in node mode additional (shared) subtables are
+ created that extend the memorized catched table.
+\stopitem
+\stopitemize
+
+This model is already quite old and dates from the beginning of \MKIV. Future
+versions might use different derived tables but for the moment we need all this
+data if only because it helps us with the development.
+
+The regular method to construct a font suitable for \TEX, either or not using
+base mode or node mode in \MKIV, is to load the font as table using \type
+{to_table}, a \type {fontloader} method. This means that all information is
+available (and can be manipulated). In \MKIV\ this table is converted to another
+one and in the process new entries are added and existing ones are freed. Quite
+some garbage collection and table resizing takes place in the process. In the
+cached instance we share identical tables so there we can gain a lot of memory
+and avoid garbage collection.
+
+The difference in usage is as follows:
+
+\starttyping
+do
+ local f = fontloader.open("somefont.otf") -- allocates font object
+ local t = fontloader.to_table(f) -- allocates table
+ fontloader.close(f) -- frees font object
+ for index, glyph in pairs(t) do
+ local width = glyph.width -- accesses table value
+ end
+end -- frees table
+\stoptyping
+
+Here \type {t} is a complete \LUA\ table and it can get quite large: script fonts
+like Zapfino (for latin) or Husayni (for arabic) have lots of alternate shapes
+and much features related information, fonts meant for \CJK\ usage have tens of
+thousands of glyphs, and math fonts like Cambria have many glyphs and math
+specific information.
+
+\starttyping
+do
+ local f = fontloader.open("somefont.otf") -- allocates font object
+ for index=0, t.glyphmax-1 do
+ local glyph = f.glyphs[index] -- assigns user data object
+ if glyph then
+ local width = glyph.width -- calls virtual table value
+ end
+ end
+ fontloader.close(f) -- frees font object
+end
+\stoptyping
+
+In this case there is no big table, and \type {glyph} is a so called userdata
+object. Its entries are created when asked for. So, where in the first example
+the \type {width} of a glyph is a number, in the second case it is a function
+disguised as virtual key that will return a number. In the first case you can
+change the width, in the second case you can't.
+
+This means that if you want to keep the data around you need to copy it into
+another table but you can do that stepwise and selectively. Alternatively you can
+keep the font object in memory. As some glyphs can have much data you can imagine
+that when you only need to access the width, the userdata method is more
+efficient. On the other hand, if you need access to all information, the first
+method is more interesting as less overhead is involved.
+
+In the userdata variant only the parent table and its glyph subtable are
+virtualized, as are entries in an optional subfonts table. So, if you ask for the
+kerns table of a glyph you will get a real table as it makes no sense to
+virtualize it. A way in between would have been to request tabls per glyph but as
+we will see there is no real benefit in that while it would further complicate
+the code.
+
+When in \LUATEX\ 0.63 the loaded font object became partially virtual it was time
+to revision the loading code to see if we could benefit from this.
+
+In the following tables we distinguish three cases: the original but adapted
+loading code \footnote {For practical reasons we share as much odd as possible
+between the methods so some reorganization was needed.}, already a few years old,
+the new sparse loading code, using the userdata approach and no longer a raw
+table, and a mixed approach where we still use the raw table but instead of
+manipulating that one, construct a new one from it. It must be noticed that in
+the process of integrating the new method the traditional method suffered.
+
+First we tested Oriental \TEX's Husayni font. This one has lots of features, many
+of lookups, and quite some glyphs. Keep in mind that the times concern the
+preparation and not the reload from the cache, which is more of less neglectable.
+The memory consumption is a snapshot of the current run just after the font has
+been loaded. Peak memory is what bothers most users. Later we will explain what
+the values between parenthesis refer to.
+
+\starttabulate[|l|c|c|c|]
+\FL
+\NC \NC \bf used memory \NC \bf peak memory \NC \bf font loading time \NC \NR
+\TL
+\NC \bf table \NC 113 MB (102) \NC 118 MB (117) \NC 1.8 sec (1.9) \NC \NR
+\NC \bf mixed \NC 114 MB (103) \NC 119 MB (117) \NC 1.9 sec (1.9) \NC \NR
+\NC \bf sparse \NC 117 MB (104) \NC 121 MB (120) \NC 1.9 sec (2.0) \NC \NR
+\NC \bf cached \NC ~75 MB \NC ~80 MB \NC 0.4 sec \NC \NR
+\NC \bf baseline \NC ~67 MB \NC ~71 MB \NC 0.3 sec \NC \NR
+\LL
+\stoptabulate
+
+So, here the new method is not offering any advantages. As this is a font we use
+quite a lot during development, any loading variant will do the job with similar
+efficiency.
+
+Next comes Cambria, a font that carries lots of glyphs and has extensive support
+for math. In order to provide a complete bodyfont setup some six instances are
+loaded. Interesting is that the original module needs 3.9 seconds instead if 6.4
+which is probably due to a different ordering of code which might influence the
+garbage collector and it looks like in the reorganized code the garbage collector
+kicks in a few times during the font loading. Already long ago we found out that
+this is also somewhat platform dependent.
+
+\starttabulate[|l|c|c|c|]
+\FL
+\NC \NC \bf used memory \NC \bf peak memory \NC \bf font loading time \NC \NR
+\TL
+\NC \bf table \NC 155 MB (126) \NC 210 MB (160) \NC 6.4 sec (6.8) \NC \NR
+\NC \bf mixed \NC 154 MB (130) \NC 210 MB (160) \NC 6.3 sec (6.7) \NC \NR
+\NC \bf sparse \NC 140 MB (123) \NC 199 MB (144) \NC 6.4 sec (6.8) \NC \NR
+\NC \bf cached \NC ~90 MB \NC ~94 MB \NC 0.6 sec \NC \NR
+\NC \bf baseline \NC ~67 MB \NC ~71 MB \NC 0.3 sec \NC \NR
+\LL
+\stoptabulate
+
+Here the sparse method reports less memory usage. There is no other gain as there
+is a lot of access to glyph data due to the fact that this font is rather
+advanced. More virtualization would probably work against us here.
+
+Being a \CJK\ font, the somewhat feature|-|dumb but large AdobeSongStd-Light has
+lots of glyphs. In previous tables we already saw values between parenthesis:
+these are values measured with implicit calls to the garbage collector before
+writing the font to the cache. For this font much more memory is used but garbage
+collection has a positive impact on memory consumption but drastic consequences
+for runtime. Eventually it's the cached timing that matters and that is a
+constant factor but even then it can disturb users if a first run after an update
+takes so much time.
+
+\starttabulate[|l|c|c|c|]
+\FL
+\NC \NC \bf used memory \NC \bf peak memory \NC \bf font loading time \NC \NR
+\TL
+\NC \bf table \NC 180 MB (125) \NC 185 MB (172) \NC 4.4 sec (4.5) \NC \NR
+\NC \bf mixed \NC 190 MB (144) \NC 194 MB (181) \NC 4.4 sec (4.7) \NC \NR
+\NC \bf sparse \NC 153 MB (119) \NC 232 MB (232) \NC 8.7 sec (8.9) \NC \NR
+\NC \bf cached \NC ~96 MB \NC 100 MB \NC 0.7 sec \NC \NR
+\NC \bf baseline \NC ~67 MB \NC ~71 MB \NC 0.3 sec \NC \NR
+\LL
+\stoptabulate
+
+Peak memory is quite high for the sparse method which is due to the fact that we
+have only glyphs (but many) so we have lots of access and small tables being
+created and collected. I suspect that in a regular run the loading time is much
+lower for the sparse case because this is just too much of a difference.
+
+The last test loaded 40 variants of Latin Modern. Each font has reasonable number
+of glyphs (covering the latin script takes some 400--600 glyphs), the normal
+amount of kerning, but hardly any features. Reloading these 40 fonts takes about
+a second.
+
+\starttabulate[|l|c|c|c|]
+\FL
+\NC \NC \bf used memory \NC \bf peak memory \NC \bf font loading time \NC \NR
+\TL
+\NC \bf table \NC 204 MB (175) \NC 213 MB (181) \NC 13.1 sec (16.4) \NC \NR
+\NC \bf mixed \NC 195 MB (168) \NC 205 MB (174) \NC 13.4 sec (16.5) \NC \NR
+\NC \bf sparse \NC 198 MB (165) \NC 202 MB (170) \NC 13.4 sec (16.6) \NC \NR
+\NC \bf cached \NC 147 MB \NC 151 MB \NC ~1.7 sec \NC \NR
+\NC \bf baseline \NC ~67 MB \NC ~71 MB \NC ~0.3 sec \NC \NR
+\LL
+\stoptabulate
+
+The old method wins in runtime and this makes it hard to decide which strategy to
+follow. Again the numbers between parenthesis show what happens when we do an
+extra garbage collection sweep after packaging the font instance. A few more
+sweeps in other spots will bring down memory a few megabytes but at the cost of
+quite some runtime. The original module that uses the table approach is 3~seconds
+faster that the current one. As the code is essentially the same but organized
+differently again we suspect the garbage collector to be the culprit.
+
+So when we came this far, Taco and I did some further tests and on his machine
+Taco ran a profiler on some of the tests. He posted the following conclusion to
+the \LUATEX\ mailing list:
+
+\startnarrower
+It seems that the userdata access is useful if {\em but only if} you are very low
+on memory. In other cases, it just adds extra objects to be garbage collected,
+which makes the collector slower. That is on top of extra time spent on the
+actual calls, and even worse: those extra gc objects tend to be scattered around
+in memory, resulting in extra minor page faults (cpu cache misses) and all that
+has a noticeable effect on run speed: the metatable based access is 20--30\%
+slower than the old massive \type {to_table}.
+
+Therefore, there seems little point in expanding the metadata functionality any
+further. What is there will stay, but adding more metadata objects appears to be
+a waste of time on all sides.
+\stopnarrower
+
+This leaves us with a question: should we replace the old module by the
+experimental one? It makes sense to do this as in practice users will not be
+harmed much. Fonts are cached and loading a cached font is not influenced. The
+new module leaves the choice to the user. He or she can decide to limit memory
+usage (for cache building) by using directives:
+
+\starttyping
+\enabledirectives[fonts.otf.loader.method=table]
+\enabledirectives[fonts.otf.loader.method=mixed]
+\enabledirectives[fonts.otf.loader.method=sparse]
+
+\enabledirectives[fonts.otf.loader.cleanup]
+\enabledirectives[fonts.otf.loader.cleanup=1]
+\enabledirectives[fonts.otf.loader.cleanup=2]
+\enabledirectives[fonts.otf.loader.cleanup=3]
+\stoptyping
+
+The cleanup has three levels and each level adds a garbage collection sweep (in a
+different spot). Of course three sweeps per font that is prepared for caching has
+quite some impact on performance. If your computer has enough memory it makes no
+sense to use any of these directives. For the record: these directives are not
+available in the generic (plain \TEX) variant, at least not in the short term. As
+Taco mentions, cache misses can have drastic consequences and we've ran into that
+years ago already when support for \OPENTYPE\ math was added to \LUATEX: out of a
+sudden and without no reason passing a font table to \TEX\ became twice as slow
+on my machine. This is comparable with the new, reorganized table loader being
+slower than the old one. Eventually I'll get back that time, which is unlikely to
+happen with the unserdata variant where there is no way to bring down the number
+of function calls and intermediate table creation.
+
+The previously shown values that concern all fonts including creating, caching,
+reloading, creating a scaled instance and passing the data to \TEX. In that
+process quite some garbage collection can happen and that obscures the real
+values. However, in \MKIV\ we report the conversion time when a font gets cached
+so that the user at least sees something happening. These timings are on a per
+font base. Watch the following values:
+
+\starttabulate[|l|l|l|]
+\FL
+\NC \NC \bf table \NC \bf sparse \NC \NR
+\TL
+\NC \bf song \NC 3.2 \NC 3.6 \NC \NR
+\NC \bf cambria \NC 4.9 (0.9 1.0 0.9 1.1 0.5 0.5) \NC 5.6 (1.1 1.1 1.0 1.2 0.6 0.6) \NC \NR
+\NC \bf husayni \NC 1.2 \NC 1.3 \NC \NR
+\LL
+\stoptabulate
+
+In the case of Cambria several fonts are loaded including subfonts from
+\TRUETYPE\ containers. This shows that the table variant is definitely faster. It
+might be that later this is compensated by additional garbage collection but that
+would even worsen the sparse case were more extensive userdata be used. These
+values more reflect what Taco measured in the profiler. Improvements to the
+garbage collector are more likely to happen than a drastic speed up in function
+calls so the table variant is still a safe bet.
+
+There are a few places where the renewed code can be optimized so these numbers
+are not definitive. Also, the loader code was not the only code adapted. As we
+cannot manipulate the main table in the userdata variant, the code related to
+patches and extra features like \type {tlig}, \type {trep} and \type {anum} had
+to be rewritten as well: more code and a bit more close to the final table
+format.
+
+\starttabulate[|l|c|c|]
+\FL
+\NC \NC \bf table \NC \bf sparse \NC \NR
+\TL
+\NC \bf hybrid \NC 310 MB / 10.3 sec \NC 285 MB / 10.5 sec \NC \NR
+\NC \bf mk \NC 884 MB / 47.5 sec \NC 878 MB / 48.7 sec \NC \NR
+\LL
+\stoptabulate
+
+The timings in the previous table concern runs of a few documents where the \type
+{mk} loads quite some large and complex fonts. The runs are times with an empty
+cache so all fonts are preprocessed. The memory consumption is the peak load as
+reported by the task manager and we need to keep in mind that \LUA\ allocates
+more than it needs. Keep in mind that these values are so high because fonts are
+created. A regular run takes less memory. Interesting is that for \type {mk} the
+original implementation performs better but the difference is about a second
+which again indicates that the garbage collector is a major factor. Timing only
+the total runtime gives:
+
+\starttabulate[|l|c|c|c|c|]
+\FL
+\NC \NC \bf cached \NC \bf original \NC \bf table \NC \bf sparse \NC \NR
+\TL
+\NC \bf mk \NC 38.1 sec \NC 75.5 sec \NC 77.2 sec \NC 80.8 sec \NC \NR
+\LL
+\stoptabulate
+
+Here we used the system timer while in previous tables we used the values as
+reported by the timers built in \MKIV\ (and only reported the font loading
+times).
+
+The timings above are taken on my laptop running Windows 7 and this is not that
+good a platform for precise timings. Tacos measurements were done with
+specialized tools and should be trusted more. It looks indeed that the current
+level of userdata support is about the best compromise one can get.
+
+{\em In the process I also experimented with virtualizing the final \TFM\ table,
+thereby simulating the upcoming virtualization of that table in \LUATEX.
+Interesting is that for (for instance) \type {mk.pdf} memory consumption went
+down with 20\% but that document is non|-|typical and loades many fonts,
+including vitual punk fonts. However, as access to that tables happens
+infrequently virtualization makes muich sense there, again only at the toplevel
+of the characters subtable.}
+
+\stopsection
+
+\startsection [title={Hyperlinks}]
+
+At \PRAGMA\ we have a long tradition of creating highly interactive documents. I
+still remember the days that processing a 20.000 page document with numerous
+menus and buttons on each page took a while to get finished, especially if each
+page has a \METAPOST\ graphic as well.
+
+On a regular computer a document with so many links is no real problem. After
+all, the \PDF\ format is designed in such a way that only the partial content has
+to be loaded. However, half a million hyperlinks do demand some memory.
+
+Recently I had to make a document that targets at one of these tablets and it is
+no secret that tablets (and e-readers) don't have that much memory. As in
+\CONTEXT\ \MKIV\ we have a bit more control over the backend, it will be no
+surprise that we are able to deal with such issues more comfortable than in
+\MKII.
+
+That specific document (part of a series) contained 1100 pages and each page has
+a navigation menu as well as an alphabetic index into the register. There is a
+table of contents refering to about 200 chapters and these are backlinked to the
+table of contents. There are some also 200 images and tables that end up
+elsewhere and again are crosslinked. Of course there is the usual bunch of inline
+hyperlinks. So, in total this document has some 32.000 hyperlinks. The input is a
+3.03 MB \XML\ file.
+
+\starttabulate[|l|c|c|]
+\FL
+\NC \NC \bf size \NC \bf one run \NC \NR
+\TL
+\NC \bf don't optimize \NC 5.76 MB \NC 59.4 sec \NC \NR
+\NC \bf prefer page references over named ones \NC 5.66 MB \NC 56.2 sec \NC \NR
+\NC \bf agressively share similar references \NC 5.19 MB \NC 60.2 sec \NC \NR
+\NC \bf optimize page as well as similar references \NC 5.11 MB \NC 56.5 sec \NC \NR
+\NC \bf disable all interactive features \NC 4.19 MB \NC 42.7 sec \NC \NR
+\LL
+\stoptabulate
+
+So, by aggressively sharing hyperlinks and turning all internal named
+destinations into page destinations we bring down the size noticeably and even
+have a faster run. It is for this reason that aggressive sharing is enabled by
+default. I you don't want it, you can disable it with:
+
+\starttyping
+\disabledirectives[refences.sharelinks]
+\stoptyping
+
+Currently we use names for internal (automatically generated) links. We can force
+page links for them but still use names for explicit references so that we can
+reach them from external documents; this is called mixed mode. When no references
+from outside are needed, you can force pagelinks. At some point mixed mode can
+become the default.
+
+\starttyping
+\enabledirectives[references.linkmethod=page]
+\stoptyping
+
+With values: \type {page}, \type {mixed}, \type {names} and \type {yes} being
+equivalent to \type {page}. The \MKII\ way of setting this is still supported:
+
+\starttyping
+\setupinteraction[page=yes]
+\stoptyping
+
+We could probably gain quite some more bytes by turning all repetitive elements
+into shared graphical objects but it only makes sense to spend time on that when
+a project really needs it (and pays for it). There is upto one megabyte of
+(compressed) data related to menus and other screen real estate that qualifies
+for this but it might not be worth the trouble.
+
+The reason for trying to minimize the amount of hyperlink related metadata (in
+\PDF\ terminology annotations) is that on tablets with not that much memory (and
+no virtual memory) we don't want to keep too much of that (redundant) data in
+memory. And indeed, the optimized document feels more responsive than the dirty
+version, but that could as well be related to the viewing applications.
+
+\stopsection
+
+\startsection[title=Constants]
+
+Not every optimization saves memory of runtime. They are more optimizations due
+to changes in circumstances. When \TEX\ had only 256 registers one had to find
+ways to get round this. For instance counters are quite handy and you could
+quickly run out of them. In \CONTEXT\ there are two ways to deal with this.
+Instead of a real count register you can use a macro:
+
+\starttyping
+\newcounter \somecounter
+\increment \somecounter
+\decrement (\somecounter,4)
+\stoptyping
+
+In \MKIV\ many such pseudo counters have been replaced by real ones which is
+somewhat faster in usage.
+
+Often one needs a constant and a convenient way to define such a frozen counter
+is:
+
+\starttyping
+\chardef \myconstant 10
+\ifnum \myvariable = \myconstant ....
+\ifcase \myconstant ...
+\stoptyping
+
+This is both efficient and fast and works out well because \TEX\ treats them as
+numbers in comparisons. However, it is somewhat clumsy, as constants have nothing
+to do with characters. This is why all such definitions have been replaced by:
+
+\starttyping
+\newconstant \myconstant 10
+\setconstant \myconstant 12
+\ifnum \myvariable = \myconstant ....
+\ifcase \myconstant ...
+\stoptyping
+
+We use count registers which means that when you set a constant, you can just
+assign the new value directly or use the \type {\setcounter} macro.
+
+We already had an alternative for conditionals:
+
+\starttyping
+\newconditional \mycondition
+\settrue \mycondition
+\setfalse \mycondition
+\ifconditional \mycondition
+\stoptyping
+
+These will also be adapted to counts but first we need a new primitive.
+
+The advantage of these changes is that at the \LUA\ end we can consult as well as
+change these values. This means that in the end much more code will be adapted.
+Especially changing the constants resulted in quite some cosmetic changes in the
+core code.
+
+\stopsection
+
+\startsection[title=Definitions]
+
+Another recent optimization was possible when at the \LUA end settings lccodes
+cum suis and some math definitions became possible. As all these initializations
+take place at the \LUA\ end till then we were just writing \TEX\ code back to
+\TEX, but now we stay at the \LUA end. This not only looks nicer, but also
+results in a slightly less memory usage during format generation (a few percent).
+Making a format also takes a few tenths of a second less (again a few percent).
+The reason why less memory is needed is that instead of writing tens of thousands
+\type {\lccode} related commands to \TEX\ we now set the value directly. As
+writes to \TEX\ are collected, quite an amount of tokens get cached.
+
+All such small improvements makes that \CONTEXT\ \MKIV\ runs smoother with each
+advance of \LUATEX. We do have a wishlist for further improvements but so far we
+managed to improve stepwise instead of putting too much pressure on \LUATEX\
+development.
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/hybrid/hybrid-parbuilder.tex b/doc/context/sources/general/manuals/hybrid/hybrid-parbuilder.tex
new file mode 100644
index 000000000..06519b2fb
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/hybrid-parbuilder.tex
@@ -0,0 +1,340 @@
+% language=uk
+
+\startcomponent hybrid-parbuilder
+
+\startbuffer[MyAbstract]
+\StartAbstract
+ In this article I will summarize some experiences with converting the \TEX\
+ par builder to \LUA. In due time there will be a plugin mechanism in
+ \CONTEXT, and this is a prelude to that.
+\StopAbstract
+\stopbuffer
+
+\doifmodeelse {tugboat} {
+ \usemodule[tug-01,abr-01]
+ \setvariables
+ [tugboat]
+ [columns=yes]
+ \setvariables
+ [tugboat]
+ [year=2010,
+ volume=99,
+ number=9,
+ page=99]
+ \setvariables
+ [tugboat]
+ [title=Building paragraphs,
+ subtitle=,
+ keywords=,
+ author=Hans Hagen,
+ address=PRAGMA ADE\\Ridderstraat 27\\8061GH Hasselt NL,
+ email=pragma@wxs.nl]
+ %
+ % we use a buffer as abstract themselves are buffers and
+ % inside macros we loose line endings and such
+ \getbuffer[MyAbstract]
+ %
+ \StartArticle
+} {
+ \environment hybrid-environment
+ \startchapter[title={Building paragraphs}]
+}
+
+\startsection [title={Introduction}]
+
+You enter the den of the Lion when you start messing around with the parbuilder.
+Actually, as \TEX\ does a pretty good job on breaking paragraphs into lines I
+never really looked into the code that does it all. However, the Oriental \TEX\
+project kind of forced it upon me. In the chapter about font goodies an optimizer
+is described that works per line. This method is somewhat similar to expansion
+level~one support (hz) in the sense that it acts independent of the par builder:
+the split off (best) lines are postprocessed. Where expansion involves horizontal
+scaling, the goodies approach does with (Arabic) words what the original HZ
+approach does with glyphs.
+
+It would be quite some challenge (at least for me) to come up with solutions that
+look at the whole paragraph and as the per-line approach works quite well, there
+is no real need for an alternative. However, in September 2008, when we were
+exploring solutions for Arabic par building, Taco converted the parbuilder into
+\LUA\ code and stripped away all code related to hyphenation, protrusion,
+expansion, last line fitting, and some more. As we had enough on our plate at
+that time, we never came to really testing it. There was even less reason to
+explore this route because in the Oriental \TEX\ project we decided to follow the
+\quotation {use advanced \OPENTYPE\ features} route which in turn lead to the
+\quote {replace words in lines by narrower of wider variants} approach.
+
+However, as the code was laying around and as we want to explore further I
+decided to pick up the parbuilder thread. In this chapter some experiences will
+be discussed. The following story is as much Taco's as mine.
+
+\stopsection
+
+\startsection [title={Cleaning up}]
+
+In retrospect, we should not have been too surprised that the first approximation
+was broken in many places, and for good reason. The first version of the code was
+a conversion of the \CCODE\ code that in turn was a conversion from the original
+interwoven \PASCAL\ code. That first conversion still looked quite \CCODE||ish
+and carried interesting bit and pieces of \CCODE||macros, \CCODE||like pointer
+tests, interesting magic constants and more.
+
+When I took the code and \LUA-fied it nearly every line was changed and it took
+Taco and me a bit of reverse engineering to sort out all problems (thank you
+Skype). Why was it not an easy task? There are good reasons for this.
+
+\startitemize
+
+\startitem The parbuilder (and related hpacking) code is derived from traditional
+\TEX\ and has bits of \PDFTEX, \ALEPH\ (\OMEGA), and of course \LUATEX. \stopitem
+
+\startitem The advocated approach to extending \TEX\ has been to use change files
+which means that a coder does not see the whole picture. \stopitem
+
+\startitem Originally the code is programmed in the literate way which means that
+the resulting functions are build stepwise. However, the final functions can (and
+have) become quite large. Because \LUATEX\ uses the woven (merged) code indeed we
+have large functions. Of course this relates to the fact that succesive \TEX\
+engines have added functionality. Eventually the source will be webbed again, but
+in a more sequential way. \stopitem
+
+\startitem This is normally no big deal, but the \ALEPH\ (\OMEGA) code has added
+a level of complexity due to directional processing and additional begin and end
+related boxes. \stopitem
+
+\startitem Also the \ETEX\ extension that deals with last line fitting is
+interwoven and uses goto's for the control flow. Fortunately the extensions are
+driven by parameters which make the related code sections easy to recognize.
+\stopitem
+
+\startitem The \PDFTEX\ protrusion extension adds code to glyph handling and
+discretionary handling. The expansion feature does that too and in addition also
+messes around with kerns. Extra parameters are introduced (and adapted) that
+influence the decisions for breaking lines. There is also code originating in
+\PDFTEX\ which deals with poor mans grid snapping although that is quite isolated
+and not interwoven. \stopitem
+
+\startitem Because it uses a slightly different way to deal with hyphenation,
+\LUATEX\ itself also adds some code. \stopitem
+
+\startitem Tracing is sort of interwoven in the code. As it uses goto's to share
+code instead of functions, one needs to keep a good eye on what gets skipped or
+not. \stopitem
+
+\stopitemize
+
+I'm pretty sure that the code that we started with looks quite different from the
+original \TEX\ code if it had been translated into \CCODE. Actually in modern
+\TEX\ compiling involves a translation into \CCODE\ first but the intermediate
+form is not meant for human eyes. As the \LUATEX\ project started from that
+merged code, Taco and Hartmut already spent quite some time on making it more
+readable. Of course the original comments are still there.
+
+Cleaning up such code takes a while. Because both languages are similar but also
+quite different it took some time to get compatible output. Because the \CCODE\
+code uses macros, careful checking was needed. Of course \LUA's table model and
+local variables brought some work as well. And still the code looks a bit
+\CCODE||ish. We could not divert too much from the original model simply because
+it's well documented.
+
+When moving around code redundant tests and orphan code has been removed. Future
+versions (or variants) might as well look much different as I want more hooks,
+clearly split stages, and convert some linked list based mechanism to \LUA\
+tables. On the other hand, as already much code has been written for \CONTEXT\
+\MKIV, making it all reasonable fast was no big deal.
+
+\stopsection
+
+\startsection [title={Expansion}]
+
+The original \CCODE||code related to protrusion and expansion is not that
+efficient as many (redundant) function calls take place in the linebreaker and
+packer. As most work related to fonts is done in the backend, we can simply stick
+to width calculations here. Also, it is no problem at all that we use floating
+point calculations (as \LUA\ has only floats). The final result will look okay as
+the original hpack routine will nicely compensate for rounding errors as it will
+normally distribute the content well enough. We are currently compatible with the
+regular par builder and protrusion code, but expansion gives different results
+(actually not worse).
+
+The \LUA\ hpacker follows a different approach. And let's admit it: most \TEX ies
+won't see the difference anyway. As long as we're cross platform compatible it's
+fine.
+
+It is a well known fact that character expansion slows down the parbuilder. There
+are good reasons for this in the \PDFTEX\ approach. Each glyph and intercharacter
+kern is checked a few times for stretch or shrink using a function call. Also
+each font reference is checked. This is a side effect of the way \PDFTEX\ backend
+works as there each variant has its own font. However, in \LUATEX, we scale
+inline and therefore don't really need the fonts. Even better, we can get rid of
+all that testing and only need to pass the eventual \type {expansion_ratio} so
+that the backend can do the right scaling. We will prototype this in the \LUA\
+version \footnote {For this Hartmuts has adapted the backend code has to honour
+this field in the glyph and kern nodes.} and we feel confident about this
+approach it will be backported into the \CCODE\ code base. So eventually the
+\CCODE\ might become a bit more readable and efficient.
+
+Intercharacter kerning is dealt with in a somewhat strange way. If a kern of
+subtype zero is seen, and if it's neighbours are glyphs from the same font, the
+kern gets replaced by a scaled one looked up in the font's kerning table. In the
+parbuilder no real replacement takes place but as each line ends up in the hpack
+routine (where all work is simply duplicated and done again) it really gets
+replaced there. When discussing the current aproach we decided, that manipulating
+intercharacter kerns while leaving regular spacing untouched, is not really a
+good idea so there will be an extra level of configuration added to \LUATEX:
+\footnote {As I more and more run into books typeset (not by \TEX) with a
+combination of character expansion and additional intercharacter kerning I've
+been seriously thinking of removing support for expansion from \CONTEXT\ \MKIV.
+Not all is progress especially if it can be abused.}
+
+\starttabulate
+\NC 0 \NC no character and kern expansion \NC \NR
+\NC 1 \NC character and kern expansion applied to complete lines \NC \NR
+\NC 2 \NC character and kern expansion as part of the par builder \NC \NR
+\NC 3 \NC only character expansion as part of the par builder (new) \NC \NR
+\stoptabulate
+
+You might wonder what happens when you unbox such a list: the original font
+references have been replaced as were the kerns. However, when repackaged again,
+the kerns are replaced again. In traditional \TEX, indeed rekerning might happen
+when a paragraph is repackaged (as different hyphenation points might be chosen
+and ligature rebuilding etc.\ has taken place) but in \LUATEX\ we have clearly
+separated stages. An interesting side effect of the conversion is that we really
+have to wonder what certain code does and if it's still needed.
+
+\stopsection
+
+\startsection [title={Performance}]
+
+% timeit context ...
+
+We had already noticed that the \LUA\ variant was not that slow. So after the
+first cleanup it was time to do some tests. We used our regular \type {tufte.tex}
+test file. This happens to be a worst case example because each broken line ends
+with a comma or hyphen and these will hang into the margin when protruding is
+enabled. So the solution space is rather large (an example will be shown later).
+
+Here are some timings of the March 26, 2010 version. The test is typeset in a box
+so no shipout takes place. We're talking of 1000 typeset paragraphs. The times
+are in seconds an between parentheses the speed relative to the regular
+parbuilder is mentioned.
+
+\startmode[mkiv]
+
+\startluacode
+ local times = {
+ { 1.6, 8.4, 9.8 }, -- 6.7 reported in statistics
+ { 1.7, 14.2, 15.6 }, -- 13.4
+ { 2.3, 11.4, 13.3 }, -- 9.5
+ { 2.9, 19.1, 21.5 }, -- 18.2
+ }
+
+ local NC, NR, b, format = context.NC, context.NR, context.bold, string.format
+
+ local function v(i,j)
+ if times[i][j]<10 then -- This is a hack. The font that we use has no table
+ context.dummydigit() -- digits (tnum) so we need this hack. Not nice anyway.
+ end
+ context.equaldigits(format("%0.01f",times[i][j]))
+ if j > 1 then
+ context.enspace()
+ context.equaldigits(format("(%0.01f)",times[i][j]/times[i][1]))
+ end
+ end
+
+ context.starttabulate { "|l|c|c|c|" }
+ NC() NC() b("native") NC() b("lua") NC() b("lua + hpack") NC() NR()
+ NC() b("normal") NC() v(1,1) NC() v(1,2) NC() v(1,3) NC() NR()
+ NC() b("protruding") NC() v(2,1) NC() v(2,2) NC() v(2,3) NC() NR()
+ NC() b("expansion") NC() v(3,1) NC() v(3,2) NC() v(3,3) NC() NR()
+ NC() b("both") NC() v(4,1) NC() v(4,2) NC() v(4,3) NC() NR()
+ context.stoptabulate()
+\stopluacode
+
+\stopmode
+
+\startnotmode[mkiv]
+
+% for the tugboat article
+
+\starttabulate[|l|c|c|c|]
+\NC \NC \bf native \NC \bf lua \NC \bf lua + hpack \NC \NR
+\NC \bf normal \NC 1.6 \NC 8.4 (5.3) \NC 9.8 (6.1) \NC \NR
+\NC \bf protruding \NC 1.7 \NC 14.2 (8.4) \NC 15.6 (9.2) \NC \NR
+\NC \bf expansion \NC 2.3 \NC 11.4 (5.0) \NC 13.3 (5.8) \NC \NR
+\NC \bf both \NC 2.9 \NC 19.1 (6.6) \NC 21.5 (7.4) \NC \NR
+\stoptabulate
+
+\stopnotmode
+
+For a regular paragraph the \LUA\ variant (currently) is 5~times slower and about
+6~times when we use the \LUA\ hpacker, which is not that bad given that it's
+interpreted code and that each access to a field in a node involves a function
+call. Actually, we can make a dedicated hpacker as some code can be omitted, The
+reason why the protruding is relatively slow is, that we have quite some
+protruding characters in the test text (many commas and potential hyphens) and
+therefore we have quite some lookups and calculations. In the \CCODE\ variant
+much of that is inlined by macros.
+
+Will things get faster? I'm sure that I can boost the protrusion code and
+probably the rest as well but it will always be slower than the built in
+function. This is no problem as we will only use the \LUA\ variant for
+experiments and special purposes. For that reason more \MKIV\ like tracing will
+be added (some is already present) and more hooks will be provided once the
+builder is more compartimized. Also, future versions of \LUATEX\ will pass around
+paragrapgh related parameters differently so that will have impact on the code as
+well.
+
+\stopsection
+
+\startsection[title=Usage]
+
+The basic parbuilder is enabled and disabled as follows:\footnote {I'm not
+sure yet if the parbuilder has to do automatic grouping.}
+
+\startbuffer[example]
+\definefontfeature[example][default][protrusion=pure]
+\definedfont[Serif*example]
+\setupalign[hanging]
+
+\startparbuilder[basic]
+ \startcolor[blue]
+ \input tufte
+ \stopcolor
+\stopparbuilder
+
+\stopbuffer
+
+\typebuffer[example]
+
+\startmode[mkiv]
+ This results in: \par \getbuffer[example]
+\stopmode
+
+There are a few tracing options in the \type {parbuilders} namespace but these
+are not stable yet.
+
+\stopsection
+
+\startsection[title=Conclusion]
+
+The module started working quite well around the time that Peter Gabriels
+\quotation {Scratch My Back} ended up in my Squeezecenter: modern classical
+interpretations of some of his favourite songs. I must admit that I scratched the
+back of my head a couple of times when looking at the code below. It made me
+realize that a new implementation of a known problem indeed can come out quite
+different but at the same time has much in common. As with music it's a matter of
+taste which variant a user likes most.
+
+At the time of this writing there is still work to be done. For instance the
+large functions need to be broken into smaller steps. And of course more testing
+is needed.
+
+\stopsection
+
+\doifmodeelse {tugboat} {
+ \StopArticle
+} {
+ \stopchapter
+}
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/hybrid/hybrid-partests.tex b/doc/context/sources/general/manuals/hybrid/hybrid-partests.tex
new file mode 100644
index 000000000..4466ba389
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/hybrid-partests.tex
@@ -0,0 +1,313 @@
+% language=uk
+
+% green -> more
+% yellow -> less
+
+\environment hybrid-environment
+
+\definecombination
+ [whatever]
+ [location=top]
+
+\startcomponent hybrid-partests
+
+\startchapter[title={Optical optimization}]
+
+One of the objectives of the oriental \TEX\ project has always been to play with
+paragraph optimization. The original assumption was that we needed an advanced
+non|-|standard paragraph builder to Arabic done right but in the end we found out
+that a more straightforward approach is to use a sophisticated \OPENTYPE\ font in
+combination with a paragraph postprocessor that uses the advanced font
+capabilities. This solution is somewhat easier to imagine that a complex
+paragraph builder but still involves quite some juggling.
+
+At the June 2012 meeting of the \NTG\ there was a talk about typesetting
+Devanagari and as fonts are always a nice topic (if only because there is
+something to show) it made sense to tell a bit more about optimizing Arabic at
+the same time. In fact, that presentation was already a few years too late
+because a couple of years back, when the oriental \TEX\ project was presented at
+TUG and Dante meetings, the optimizer was already part of the \CONTEXT\ core
+code. The main reason for not advocating is was the simple fact that no font
+other than the (not yet finished) Husayni font provided the relevant feature set.
+
+The lack of advanced fonts does not prevent us from showing what we're dealing
+with. This is because the \CONTEXT\ mechanisms are generic in the sense that they
+can also be used with regular Latin fonts, although it does not make that much
+sense. Of course only \MKIV\ is supported. In this chapter we will stick to
+Latin. A more extensive article is published by Idris Samawi Hamid and myself in
+the proceedings of the combined euro\TEX and \CONTEXT\ conference.
+
+When discussing optical optimization of a paragraph, a few alternatives come to
+mind:
+
+\startitemize
+
+\startitem One can get rid of extensive spaces by adding additional kerns between
+glyphs. This is often used by poor mans typesetting programns (or routines) and
+can be applied to non|-|connecting scripts. It just looks bad. \stopitem
+
+\startitem Glyphs can be widened a few percent and this is an option that
+\LUATEX\ inherits from its predecessor \PDFTEX. Normally this goes unnoticed
+although excessive scaling makes things worse, and yes, one can run into such
+examples. This strategy goes under the name hz|-|optimization (the hz refers to
+Hermann Zaph, who first came with this solution). \stopitem
+
+\startitem A real nice solution is to replace glyphs by narrower or wider
+variants. This is in fact the ideal hz solution but for it to happen one not only
+needs needs fonts with alternative shapes, but also a machinery that can deal
+with them. \stopitem
+
+\startitem An already old variant is the one first used by Gutenberg, who used
+alternative cuts for certain combinations of characters. This is comparable with
+ligatures. However, to make the look and feel optimal, one needs to analyze the
+text and make decisions on what to replace without loosing consistency. \stopitem
+
+\stopitemize
+
+The solution described here does a bit of everything. As it is mostly meant for a
+connective script, the starting point is how a scribe works when filling up a
+line nicely. Depending on how well he or she can see it coming, the writing can
+be adapted to widen or narrow following words. And it happens that in Arabic
+scripts there are quite some ways to squeeze more characters in a small area
+and|/|or expand some to the extreme to fill up the available space. Shapes can be
+wider or narrower, they can be stacked and they can get replaced by ligatures. Of
+course there is some interference with the optional marks on top and below but
+even there we have some freedom. The only condition is that the characters in a
+word stay connected.
+
+So, given enough alternative glyphs, one can imagine that excessive interword
+spacing can be avoided. However, it is non|-|trivial to check all possible
+combinations. Actually, it is not needed either, as esthetic rules put some
+bounds on what can be done. One should more think in terms of alternative
+strategies or solutions and this is the terminology that we will therefore use.
+
+Easiest is to demonstrate this with Latin, if only because it's more intuitive to
+see what happens. This is not the place to discuss all the gory details so you
+have to take some of the configuration options on face value. Once this mechanism
+is stable and used, the options can be described. For now we stick to presenting
+the idea.
+
+Let's assume that you know what font features are. The idea is to work with
+combinations of such features and figure out what combination suits best. In
+order not to clutter a document style, these sets are defined in so called goodie
+files. Here is an except of \type {demo.lfg}:
+
+\starttyping
+return {
+ name = "demo",
+ version = "1.01",
+ comment = "An example of goodies.",
+ author = "Hans Hagen",
+ featuresets = {
+ simple = {
+ mode = "node",
+ script = "latn"
+ },
+ default = {
+ mode = "node",
+ script = "latn",
+ kern = "yes",
+ },
+ ligatures = {
+ mode = "node",
+ script = "latn",
+ kern = "yes",
+ liga = "yes",
+ },
+ smallcaps = {
+ mode = "node",
+ script = "latn",
+ kern = "yes",
+ smcp = "yes",
+ },
+ },
+ solutions = {
+ experimental = {
+ less = {
+ "ligatures", "simple",
+ },
+ more = {
+ "smallcaps",
+ },
+ },
+ },
+}
+\stoptyping
+
+We see four sets of features here. You can use these sets in a \CONTEXT\
+feature definition, like:
+
+\startbuffer
+\definefontfeature
+ [solution-demo]
+ [goodies=demo,
+ featureset=default]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+You can use a set as follows:
+
+\startbuffer
+\definefont
+ [SomeTestFont]
+ [texgyrepagellaregular*solution-demo at 10pt]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+So far, there is nothing special and new, but we can go a step further.
+
+\startbuffer[solution-a-b]
+\definefontsolution
+ [solution-a]
+ [goodies=demo,
+ solution=experimental,
+ method={normal,preroll},
+ criterium=1]
+
+\definefontsolution
+ [solution-b]
+ [goodies=demo,
+ solution=experimental,
+ method={normal,preroll,split},
+ criterium=1]
+\stopbuffer
+
+\typebuffer[solution-a-b] \getbuffer[solution-a-b]
+
+Here we have defined two solutions. They refer to the \type {experimental}
+solution in the goodie file \type {demo.lfg}. A solution has a \type {less}
+and a \type {more} entry. The featuresets mentioned there reflect ways to
+make a word narrower of wider. There can be more than one way to do that,
+although it comes at a performance price. Before we see how this works out
+we turn on a tracing option:
+
+\startbuffer
+\enabletrackers
+ [builders.paragraphs.solutions.splitters.colors]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+This will color the words in the result according to what has happened. When a
+featureset out of the \type {more} category has been applied, the words turn
+green, when \type {less} is applied, the word becomes yellow. The \type
+{preroll} option in the \type {method} list makes sure that we do a more
+extensive test beforehand.
+
+% \enabletrackers[builders.paragraphs.solutions.splitters.optimizer]
+% \enabletrackers[builders.paragraphs.solutions.splitters.splitter]
+
+\startbuffer[normal]
+\SomeTestFont
+\input zapf \par
+\stopbuffer
+
+\startbuffer[solution-a]
+\SomeTestFont \startfontsolution[solution-a]
+\input zapf \par
+\stopfontsolution
+\stopbuffer
+
+\typebuffer[solution-a]
+
+In \in {figure} [solution-a] we see what happens. In each already split line
+words get wider or narrower until we're satisfied. A criterium of~1 is pretty
+strict \footnote {This number reflects the maximum badness and future versions
+might have a different measure with more granularity.}. Keep in mind that we use
+some arbitrary features here. We try removing kerns to get narrower although
+there is nothing that guarantees that kerns are positive. On the other hand,
+using ligatures might help. In order to get wider we use smallcaps. Okay, the
+result will look somewhat strange but so does much typesetting nowadays.
+
+There is one pitfall here. This mechanism is made for a connective script where
+hyphenation is not used. As a result a word here is actually split up when it has
+discretionaries and of course this text fragment has. It goes unnoticed in the
+rendering but is of course far from optimal.
+
+\startbuffer[solution-b]
+\SomeTestFont \startfontsolution[solution-b]
+\input zapf \par
+\stopfontsolution
+\stopbuffer
+
+\typebuffer[solution-b]
+
+In this example (\in {figure} [solution-b]) we keep words as a whole but as a
+side effect we skip words that are broken across a line. This is mostly because
+it makes not much sense to implement it as Latin is not our target. Future
+versions of \CONTEXT\ might get more sophisticated font machinery so then things
+might look better.
+
+We show two more methods:
+
+\startbuffer[solution-c-d]
+\definefontsolution
+ [solution-c]
+ [goodies=demo,
+ solution=experimental,
+ method={reverse,preroll},
+ criterium=1]
+
+\definefontsolution
+ [solution-d]
+ [goodies=demo,
+ solution=experimental,
+ method={random,preroll,split},
+ criterium=1]
+\stopbuffer
+
+\typebuffer[solution-c-d] \getbuffer[solution-c-d]
+
+In \in {figure} [solution-c] we start at the other end of a line. As we sort of
+mimick a scribe, we can be one who plays safe at the start of corrects at the
+end.
+
+\startbuffer[solution-c]
+\SomeTestFont \startfontsolution[solution-c]
+\input zapf \par
+\stopfontsolution
+\stopbuffer
+
+In \in {figure} [solution-d] we add some randomness but to what extent this works
+well depends on how many words we need to retypeset before we get the badness of
+the line within the constraints.
+
+\startbuffer[solution-d]
+\SomeTestFont \startfontsolution[solution-d]
+\input zapf \par
+\stopfontsolution
+\stopbuffer
+
+\startplacefigure[title={Solution a.},reference=solution-a]
+ \startcombination[whatever]
+ {\framed[strut=no,align={normal,verytolerant},width=.45\textwidth]{\showfontkerns\getbuffer[normal]}} {normal}
+ {\framed[strut=no,align={normal,verytolerant},width=.45\textwidth]{\showfontkerns\getbuffer[solution-a]}} {solution}
+ \stopcombination
+\stopplacefigure
+
+\startplacefigure[title={Solution b.},reference=solution-b]
+ \startcombination[whatever]
+ {\framed[strut=no,align={normal,verytolerant},width=.45\textwidth]{\showfontkerns\getbuffer[normal]}} {normal}
+ {\framed[strut=no,align={normal,verytolerant},width=.45\textwidth]{\showfontkerns\getbuffer[solution-b]}} {solution}
+ \stopcombination
+\stopplacefigure
+
+\startplacefigure[title={Solution c.},reference=solution-c]
+ \startcombination[whatever]
+ {\framed[strut=no,align={normal,verytolerant},width=.45\textwidth]{\showfontkerns\getbuffer[normal]}} {normal}
+ {\framed[strut=no,align={normal,verytolerant},width=.45\textwidth]{\showfontkerns\getbuffer[solution-c]}} {solution}
+ \stopcombination
+\stopplacefigure
+
+\startplacefigure[title={Solution d.},reference=solution-d]
+ \startcombination[whatever]
+ {\framed[strut=no,align={normal,verytolerant},width=.45\textwidth]{\showfontkerns\getbuffer[normal]}} {normal}
+ {\framed[strut=no,align={normal,verytolerant},width=.45\textwidth]{\showfontkerns\getbuffer[solution-d]}} {solution}
+ \stopcombination
+\stopplacefigure
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/hybrid/hybrid-tags.tex b/doc/context/sources/general/manuals/hybrid/hybrid-tags.tex
new file mode 100644
index 000000000..447e3d26f
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/hybrid-tags.tex
@@ -0,0 +1,361 @@
+% language=uk
+
+\startcomponent hybrid-tags
+
+\environment hybrid-environment
+
+\startchapter[title={Tagged PDF}]
+
+\startsection [title={Introduction}]
+
+Occasionally users asked me if \CONTEXT\ can produce tagged \PDF\ and the answer
+to that has been: I'll implement it when I need it. However, users tell me that
+publishers more and more demand tagged \PDF\ files, although one might wonder
+what for, except maybe for accessibility. Another reason for not having spent too
+much time on it before is that the specification was not that inviting.
+
+At any rate, when I saw Ross Moore\footnote {He is often exploring the boundaries
+of \PDF, \UNICODE\ and evolving techniques related to math publishing so you'd
+best not miss his presentations when you are around.} presenting tagged math at
+TUG 2010, I decided to look up the spec once more and see if I could get into the
+mood to implement tagging. Before I started it was already clear that there were
+a couple of boundary conditions:
+
+\startitemize[packed]
+\startitem Tagging should not put a burden on the user but users
+ should be able to tag themselves. \stopitem
+\startitem Tagging should not slow down a run too much; this is
+ no big deal as one can postpone tagging till the last
+ run. \stopitem
+\startitem Tagging should in no way interfere with typesetting, so
+ no funny nodes should be injected. \stopitem
+\startitem Tagging should not make the code
+ look worse, neither the document source, nor the low
+ level \CONTEXT\ code. \stopitem
+\stopitemize
+
+And of course implementing it should not take more than a few days' work,
+certainly not in an exceptionally hot summer.
+
+You can \quote {google} for one of Ross's documents (like \type
+{DML_002-2009-1_12.pdf}) to see how a document source looks at his end using a
+special version of \PDFTEX. However, the version on my machine didn't support the
+shown primitives, so I could not see what was happening under the hood.
+Unfortunately it is quite hard to find a properly tagged document so we have only
+the reference manual as starting point. As the \PDFTEX\ approach didn't look that
+pleasing anyway, I just started from scratch.
+
+Tags can help Acrobat Reader when reading out the text aloud. But you cannot
+browse the structure in the no|-|cost version of Acrobat and as not all users
+have the professional version of Acrobat, the fact that a document has structure
+can go unnoticed. Add to that the fact that the overhead in terms of bytes is
+quite large as many more objects are generated, and you will understand why this
+feature is not enabled by default.
+
+\stopsection
+
+\startsection [title={Implementation}]
+
+So, what does tagging boil down to? We can best look at how tagged information is
+shown in Acrobat. \in {Figure} [fig:tagged-list] shows the content tree that has
+been added (automatically) to a document while \in {figure} [fig:tagged-order]
+shows a different view.
+
+\placefigure
+ [page]
+ [fig:tagged-list]
+ {A tag list in Acrobat.}
+ {\externalfigure[tagged-001.png][maxheight=\textheight]}
+
+\placefigure
+ [here]
+ [fig:tagged-order]
+ {Acrobat showing the tag order.}
+ {\externalfigure[tagged-004.png][maxwidth=\textwidth]}
+
+In order to get that far, we have to do the following:
+
+\startitemize[packed]
+\startitem Carry information with (typeset) text. \stopitem
+\startitem Analyse this information when shipping out pages. \stopitem
+\startitem Add a structure tree to the page. \stopitem
+\startitem Add relevant information to the document. \stopitem
+\stopitemize
+
+That first activity is rather independent of the other three and we can use that
+information for other purposes as well, like identifying where we are in the
+document. We carry the information around using attributes. The last three
+activities took a bit of experimenting mostly using the \quotation {Example of
+Logical Structure} from the \PDF\ standard 32000-1:2008.
+
+This resulted in a tagging framework that uses explicit tags, meaning the user is
+responsible for the tagging:
+
+\starttyping
+\setupstructure[state=start,method=none]
+
+\starttext
+
+\startelement[document]
+
+ \startelement[chapter]
+ \startelement[p] \input davis \stopelement \par
+ \stopelement
+
+ \startelement[chapter]
+ \startelement[p] \input zapf \stopelement \par
+ \startelement[whatever]
+ \startelement[p] \input tufte \stopelement \par
+ \startelement[p] \input knuth \stopelement \par
+ \stopelement
+ \stopelement
+
+ \startelement[chapter]
+ oeps
+ \startelement[p] \input ward \stopelement \par
+ \stopelement
+
+\stopelement
+
+\stoptext
+\stoptyping
+
+Since this is not much fun, we also provide an automated
+variant. In the previous example we explicitly turned off automated
+tagging by setting \type {method} to \type {none}. By default it has
+the value \type {auto}.
+
+\starttyping
+\setupstructure[state=start] % default is method=auto
+
+\definedescription[whatever]
+
+\starttext
+
+\startfrontmatter
+ \startchapter[title=One]
+ \startparagraph \input tufte \stopparagraph
+ \startitemize
+ \startitem first \stopitem
+ \startitem second \stopitem
+ \stopitemize
+ \startparagraph \input ward \stopparagraph
+ \startwhatever {Herman Zapf} \input zapf \stopwhatever
+ \stopchapter
+
+\stopfrontmatter
+
+\startbodymatter
+ ..................
+\stoptyping
+
+If you use commands like \type {\chapter} you will not get the desired results.
+Of course these can be supported but there is no real reason for it, as in \MKIV\
+we advise using the \type {start}|-|\type {stop} variant.
+
+It will be clear that this kind of automated tagging brings with it a couple of
+extra commands deep down in \CONTEXT\ and there (of course) we use symbolic names
+for tags, so that one can overload the built|-|in mapping.
+
+\starttyping
+\setuptaglabeltext[en][document=text]
+\stoptyping
+
+As with other features inspired by viewer functionality, the implementation of
+tagging is independent of the backend. For instance, we can tag a document and
+access the tagging information at the \TEX\ end. The backend driver code maps
+tags to relevant \PDF\ constructs. First of all, we just map the tags used at the
+\CONTEXT\ end onto themselves. But, as validators expect certain names, we use
+the \PDF\ rolemap feature to map them to (less interesting) names. The next list
+shows the currently used internal names, with the \PDF\ ones between parentheses.
+
+\blank \startalignment[flushleft,nothyphenated]
+\startluacode
+local done = false
+for k, v in table.sortedpairs(structures.tags.properties) do
+ if v.pdf then
+ if done then
+ context(", %s (%s)",k,v.pdf)
+ else
+ context("%s (%s)",k,v.pdf)
+ done = true
+ end
+ end
+end
+context(".")
+\stopluacode \par \stopalignment \blank
+
+So, the internal ones show up in the tag trees as shown in the examples but
+applications might use the rolemap which normally has less detail.
+
+Because we keep track of where we are, we can also use that information for
+making decisions.
+
+\starttyping
+\doifinelementelse{structure:section} {yes} {no}
+\doifinelementelse{structure:chapter} {yes} {no}
+\doifinelementelse{division:*-structure:chapter} {yes} {no}
+\doifinelementelse{division:*-structure:*} {yes} {no}
+\stoptyping
+
+As shown, you can use \type {*} as a wildcard. The elements are separated by
+\type {-}. If you don't know what tags are used, you can always enable the tag
+related tracker:
+
+\starttyping
+\enabletrackers[structure.tags]
+\stoptyping
+
+This tracker reports the identified element chains to the console
+and log.
+
+\stopsection
+
+\startsection[title={Special care}]
+
+Of course there are a few complications. First of all the tagging model sort of
+contradicts the concept of a nicely typeset document where structure and outcome
+are not always related. Most \TEX\ users are aware of the fact that \TEX\ does
+not have space characters and does a great job on kerning and hyphenation. The
+tagging machinery on the other hand uses a rather dumb model of strings separated
+by spaces. \footnote {The search engine on the other hand is rather clever on
+recognizing words.} But we can trick \TEX\ into providing the right information
+to the backend so that words get nicely separated. The non|-|optimized function
+that does this looks as follows:
+
+\starttyping
+function injectspaces(head)
+ local p
+ for n in node.traverse(head) do
+ local id = n.id
+ if id == node.id("glue") then
+ if p and p.id == node.id("glyph") then
+ local g = node.copy(p)
+ local s = node.copy(n.spec)
+ g.char, n.spec = 32, s
+ p.next, g.prev = g, p
+ g.next, n.prev = n, g
+ s.width = s.width - g.width
+ end
+ elseif id == node.id("hlist") or id == node.id("vlist") then
+ injectspaces(n.list,attribute)
+ end
+ p = n
+ end
+end
+\stoptyping
+
+Here we squeeze in a space (given that it is in the font which it normally is
+when you use \CONTEXT) and make a compensation in the glue. Given that your page
+sits in box 255, you can do this just before shipping the page out:
+
+\starttyping
+injectspaces(tex.box[255].list)
+\stoptyping
+
+Then there are the so|-|called suspects: things on the page that are not related
+to structure at all. One is supposed to tag these specially so that the
+built|-|in reading equipment is not confused. So far we could get around them
+simply because they don't get tagged at all and therefore are not seen anyway.
+This might well be enough of a precaution.
+
+Of course we need to deal with mathematics. Fortunately the presentation \MATHML\
+model is rather close to \TEX\ and so we can map onto that. After all we don't
+need to care too much about back|-|mapping here. The currently present code is
+rather experimental and might get extended or thrown out in favour of inline
+\MATHML. \in {Figure} [fig:tagged-math] demonstrates that a first approach does
+not even look that bad. In future versions we might deal with table|-|like math
+constructs, like matrices.
+
+\placefigure
+ [here]
+ [fig:tagged-math]
+ {Experimental math tagging.}
+ {\externalfigure[tagged-005.png][maxwidth=\textwidth]}
+
+This is a typical case where more energy has to be spent on driving the voice of
+Acrobat but I will do that when we find a good reason.
+
+As mentioned, it will take a while before all relevant constructs in \CONTEXT\
+support tagging, but support is already quite complete. Some screen dumps are
+included as examples at the end.
+
+\stopsection
+
+\startsection[title={Conclusion}]
+
+Surprisingly, implementing all this didn't take that much work. Of course
+detailed automated structure support from the complete \CONTEXT\ kernel will take
+some time to get completed, but that will be done on demand and when we run into
+missing bits and pieces. It's still not decided to what extent alternate
+representations and alternate texts will be supported. Experiments with the
+reading|-|aloud machinery are not satisfying yet but maybe it just can't get any
+better. It would be nice if we could get some tags being announced without
+overloading the content, that is: without using ugly hacks.
+
+And of course, code like this is never really finished if only because \PDF\
+evolves. Also, it is yet another nice test case and torture test for \LUATEX\ and
+it helps us to find buglets and oversights.
+
+\stopsection
+
+\startsection [title=Some more examples]
+
+In \CONTEXT\ we have user definable verbatim environments. As with other user
+definable environments we show the specific instance as comment next to the
+structure component. See \in {figure} [fig:tagged-verbatim]. Some examples of
+tables are shown in \in {figure} [fig:tagged-tables]. Future versions will have a
+bit more structure. Tables of contents (see \in {figure} [fig:tagged-contents])
+and registers (see \in {figure} [fig:tagged-register]) are also tagged. (One
+might wonder what the use is of this.) In \in {figure} [fig:tagged-floats] we see
+some examples of floats. External images as well as \METAPOST\ graphics are
+tagged as such. This example also shows an example of a user environment, in this
+case:
+
+\starttyping
+\definestartstop[notabene][style=\bf]
+\stoptyping
+
+In a similar fashion, footnotes (\in {figure} [fig:tagged-footnotes]) end up in
+the structure tree, but in the typeset document they move around (normally
+forward when there is no room).
+
+\placefigure
+ [here]
+ [fig:tagged-verbatim]
+ {Verbatim, including dedicated instances.}
+ {\externalfigure[tagged-006.png][maxwidth=\textwidth]}
+
+\placefigure
+ [here]
+ [fig:tagged-tables]
+ {Natural tables as well as the tabulate mechanism is supported.}
+ {\externalfigure[tagged-008.png][maxwidth=\textwidth]}
+
+\placefigure
+ [here]
+ [fig:tagged-contents]
+ {Tables of content with specific entries tagged.}
+ {\externalfigure[tagged-007.png][maxwidth=\textwidth]}
+
+\placefigure
+ [here]
+ [fig:tagged-register]
+ {A detailed view of registered is provided.}
+ {\externalfigure[tagged-009.png][maxwidth=\textwidth]}
+
+\placefigure
+ [here]
+ [fig:tagged-floats]
+ {Floats tags end up in text stream. Watch the user defined construct.}
+ {\externalfigure[tagged-011.png][maxwidth=\textwidth]}
+
+\placefigure
+ [here]
+ [fig:tagged-footnotes]
+ {Footnotes are shown at the place in the input (flow).}
+ {\externalfigure[tagged-010.png][maxwidth=\textwidth]}
+
+\stopsection
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/hybrid/hybrid-titlepage.tex b/doc/context/sources/general/manuals/hybrid/hybrid-titlepage.tex
new file mode 100644
index 000000000..3f9dfdc47
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/hybrid-titlepage.tex
@@ -0,0 +1,63 @@
+% language=uk
+
+\startcomponent hybrid-titlepage
+
+\environment hybrid-environment
+
+% \start \setuptype [color=gray] \startMPpage
+% StartPage ;
+% numeric o, w, h, d ; o := 4mm ;
+% picture p[], q, t ;
+% t := textext("\white\definedfont[LMTypewriterVarWd10-Dark*default]MkIV Hybrid Technology") ;
+% t := ((t rotated 90) ysized (PaperHeight - 2o)) ;
+% p[1] := textext("\type{{ }}") ;
+% p[2] := textext("\type{( )}") ;
+% p[3] := textext("\type{< >}") ;
+% d := bbwidth(t) + 2o ;
+% q := image ( for i=1 upto 200 :
+% for j=1 upto 3 :
+% q := p[j] scaled (1 + uniformdeviate 4) ;
+% w := uniformdeviate (PaperWidth - d) ;
+% h := uniformdeviate (PaperHeight) ;
+% draw q shifted (w,h) ;
+% endfor ;
+% endfor ; ) ;
+% q := (q shifted -llcorner q) xysized (PaperWidth - d - 2o, PaperHeight - 2o) shifted (o,o) ;
+% fill Page enlarged (o/2) withcolor \MPcolor{yellow} ;
+% draw thelabel.ulft(t,lrcorner Page shifted (-o,o)) ;
+% draw q ;
+% StopPage ;
+% \stopMPpage \stop
+
+\definefont[TitlePageFontA][file:lmmonoproplt10-bold*default]
+\definefont[TitlePageFontB][file:lmmonolt10-bold*none]
+
+\start \startMPpage
+ StartPage ;
+ numeric o, w, h, d ; o := 4mm ;
+ picture p[], q, t ;
+ t := textext("\white\TitlePageFontA MkIV Hybrid Technology") ;
+ t := ((t rotated 90) ysized (PaperHeight - 2o)) ;
+ p[1] := textext("\gray\TitlePageFontB\char123\char125") ;
+ p[2] := textext("\gray\TitlePageFontB()") ;
+ p[3] := textext("\gray\TitlePageFontB<>") ;
+ d := bbwidth(t) + 2o ;
+ q := image ( for i=1 upto 8 :
+ for j=1 upto 20 :
+ q := p[1+floor(uniformdeviate 3)] xysized (PaperWidth/20 + uniformdeviate PaperWidth/40, PaperHeight/15 + uniformdeviate PaperHeight/30) ;
+ w := i * (PaperWidth - d)/10 ;
+ h := j * PaperHeight/10 ;
+ q := q shifted (w,h) ;
+ draw q;
+ endfor ;
+ endfor ; ) ;
+ q := (q shifted -llcorner q) xysized (PaperWidth - d - 2o, PaperHeight - 2o) shifted (o,o) ;
+ fill Page enlarged (o/2) withcolor \MPcolor{yellow} ;
+ draw thelabel.ulft(t,lrcorner Page shifted (-o,o)) ;
+ draw q ;
+ StopPage ;
+\stopMPpage \stop
+
+\setuppagenumber[state=stop] \page[empty] \setuppagenumber[state=start]
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/hybrid/hybrid-weird.tex b/doc/context/sources/general/manuals/hybrid/hybrid-weird.tex
new file mode 100644
index 000000000..48529f76d
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/hybrid-weird.tex
@@ -0,0 +1,129 @@
+% language=uk
+
+\startcomponent hybrid-backends
+
+\environment hybrid-environment
+
+\startchapter[title={Weird examples}]
+
+\startsection[title={Introduction}]
+
+In this chapter I will collect a couple of weird examples.
+
+\stopsection
+
+\startsection[title=Inter-character spacing]
+
+There was a discussion on the \LUATEX\ (dev) list about inter character spacing
+and ligatures. The discussion involved a mechanism inherited from \PDFTEX\ but in
+\CONTEXT\ we don't use that at all. Actually, support for inter character spacing
+was added in an early stage of \MKIV\ development as an alternative for the
+\MKII\ variant, which used parsing at the \TEX\ end. Personally I never use this
+spacing, unless a design in a project demands it.
+
+In the \MKIV\ method we split ligatures when its components are known. This works
+quite well. It's anyway a good idea to disable ligatures, so it's more a
+fallback. Actually we should create components for hard coded characters like
+\ae\ but as no one ever complained I leave that for a later moment.
+
+As we already had the mechanisms in place, support for selective spacing of
+ligatures was a rather trivial extension. If there is ever a real need for it, I
+will provide control via the normal user interface, but for now using a few hooks
+will do. The following code shows an example of an implementation. \footnote {The
+examples have been adapted to the latest \CONTEXT\ where we use \type
+{\getchar(n)} instead of \type {n.char}.}
+
+\startbuffer
+local utfbyte = utf.byte
+local getchar = nodes.nuts.getchar
+
+local keep = {
+ [0x0132] = true, [0x0133] = true, -- IJ ij
+ [0x00C6] = true, [0x00E6] = true, -- AE ae
+ [0x0152] = true, [0x0153] = true, -- OE oe
+}
+
+function typesetters.kerns.keepligature(n)
+ return keep[getchar(n)]
+end
+
+local together = {
+ [utfbyte("c")] = { [utfbyte("k")] = true },
+ [utfbyte("i")] = { [utfbyte("j")] = true },
+ [utfbyte("I")] = { [utfbyte("J")] = true },
+}
+
+function typesetters.kerns.keeptogether(n1,n2)
+ local k = together[getchar(n1)]
+ return k and k[getchar(n2)]
+end
+\stopbuffer
+
+\ctxluabuffer
+
+\typebuffer
+
+The following also works:
+
+\starttyping
+local lpegmatch = lpeg.match
+local fontdata = fonts.identifiers
+local getchar = nodes.nuts.getchar
+local getfont = nodes.nuts.getfont
+
+local keep = -- start of name
+ lpeg.P("i_j")
+ + lpeg.P("I_J")
+ + lpeg.P("aeligature")
+ + lpeg.P("AEligature")
+ + lpeg.P("oeligature")
+ + lpeg.P("OEligature")
+
+function typesetters.kerns.keepligature(n)
+ local d = fontdata[getfont(n)].descriptions
+ local c = d and d[getchar(n)]
+ local n = c and c.name
+ return n and lpegmatch(keep,n)
+end
+\stoptyping
+
+A more generic solution would be to use the \type {tounicode} information, but it
+would be overkill as we're dealing with a rather predictable set of characters
+that have gotten \UNICODE\ slots assigned. When using basemode most fonts will
+work anyway.
+
+So, is this really worth the effort? Take a look at the following example.
+
+\startbuffer
+\definecharacterkerning [KernMe] [factor=0.25]
+
+\start
+ \setcharacterkerning[KernMe]
+ \definedfont[Serif*default]
+ Ach kijk effe, \ae sop draagt een knickerbocker! \par
+ \definedfont[Serif*smallcaps]
+ Ach kijk effe, \ae sop draagt een knickerbocker! \par
+\stop
+\stopbuffer
+
+\typebuffer
+
+Typeset this (Dutch text) looks like:
+
+\getbuffer
+
+You might wonder why I decided to look into it. Right at the moment when it was
+discussed, I was implementing a style that needed the Calibri font that comes
+with \MSWINDOWS, and I visited the FontShop website to have a look at the font.
+To my surprise it had quite some ligatures, way more than one would expect.
+
+\placefigure
+ {Some of the ligatures in Calibri Regular. Just wonder what
+ intercharacter spacing will do here.}
+ {\externalfigure[calibri-fontshop.png]}
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/hybrid/hybrid.tex b/doc/context/sources/general/manuals/hybrid/hybrid.tex
new file mode 100644
index 000000000..e15d7c31c
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/hybrid.tex
@@ -0,0 +1,63 @@
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
+%
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+%
+% comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt
+% Group journal or otherwise. Thanks to the editors for corrections. Also thanks
+% to users for testing, feedback and corrections.
+
+\environment hybrid-environment
+
+\startproduct hybrid
+
+\component hybrid-titlepage
+
+\startfrontmatter
+ \component hybrid-contents
+ \component hybrid-introduction
+\stopfrontmatter
+
+\startbodymatter
+ \component hybrid-languages
+ \component hybrid-goodies
+ \component hybrid-grouping
+ \component hybrid-fontnames
+ \component hybrid-bidi
+ \component hybrid-inserts
+ \component hybrid-mkvi
+ \component hybrid-backend
+ \component hybrid-callbacks
+ %component hybrid-bibtex % we have a new module, this was about the xml interface and sorting
+ \component hybrid-parbuilder
+ \component hybrid-tags
+ \component hybrid-merge
+ \component hybrid-export
+ \component hybrid-optimize
+ \component hybrid-characters
+ \component hybrid-weird
+ \component hybrid-glocal
+ \component hybrid-math
+ \component hybrid-mathml
+ \component hybrid-ebooks
+ \component hybrid-italics
+ \component hybrid-partests
+ \component hybrid-codebase
+ %component hybrid-musings % only as article, style too different after corrections
+ \component hybrid-jit
+\stopbodymatter
+
+\startbackmatter
+ \component hybrid-intermezzo
+\stopbackmatter
+
+\stopproduct
+
diff --git a/doc/context/sources/general/manuals/hybrid/luatex-co-acceptablelowres.jpg b/doc/context/sources/general/manuals/hybrid/luatex-co-acceptablelowres.jpg
new file mode 100644
index 000000000..8ba060aa9
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/luatex-co-acceptablelowres.jpg
Binary files differ
diff --git a/doc/context/sources/general/manuals/hybrid/mtx-server-ctx-fonttest.png b/doc/context/sources/general/manuals/hybrid/mtx-server-ctx-fonttest.png
new file mode 100644
index 000000000..949a66ee5
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/mtx-server-ctx-fonttest.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/hybrid/tagged-001.png b/doc/context/sources/general/manuals/hybrid/tagged-001.png
new file mode 100644
index 000000000..4b261c4ad
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/tagged-001.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/hybrid/tagged-002.png b/doc/context/sources/general/manuals/hybrid/tagged-002.png
new file mode 100644
index 000000000..70c3e33fa
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/tagged-002.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/hybrid/tagged-003.png b/doc/context/sources/general/manuals/hybrid/tagged-003.png
new file mode 100644
index 000000000..fbcc221ec
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/tagged-003.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/hybrid/tagged-004.png b/doc/context/sources/general/manuals/hybrid/tagged-004.png
new file mode 100644
index 000000000..1fccca251
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/tagged-004.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/hybrid/tagged-005.png b/doc/context/sources/general/manuals/hybrid/tagged-005.png
new file mode 100644
index 000000000..4f98733bc
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/tagged-005.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/hybrid/tagged-006.png b/doc/context/sources/general/manuals/hybrid/tagged-006.png
new file mode 100644
index 000000000..4375297d4
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/tagged-006.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/hybrid/tagged-007.png b/doc/context/sources/general/manuals/hybrid/tagged-007.png
new file mode 100644
index 000000000..338e0bdb1
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/tagged-007.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/hybrid/tagged-008.png b/doc/context/sources/general/manuals/hybrid/tagged-008.png
new file mode 100644
index 000000000..8f95af4f7
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/tagged-008.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/hybrid/tagged-009.png b/doc/context/sources/general/manuals/hybrid/tagged-009.png
new file mode 100644
index 000000000..be9ff238e
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/tagged-009.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/hybrid/tagged-010.png b/doc/context/sources/general/manuals/hybrid/tagged-010.png
new file mode 100644
index 000000000..81722e7f9
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/tagged-010.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/hybrid/tagged-011.png b/doc/context/sources/general/manuals/hybrid/tagged-011.png
new file mode 100644
index 000000000..45012384f
--- /dev/null
+++ b/doc/context/sources/general/manuals/hybrid/tagged-011.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/languages/languages-basics.tex b/doc/context/sources/general/manuals/languages/languages-basics.tex
index 39ce840f3..840897096 100644
--- a/doc/context/sources/general/manuals/languages/languages-basics.tex
+++ b/doc/context/sources/general/manuals/languages/languages-basics.tex
@@ -1,9 +1,9 @@
% language=uk
-\environment languages-environment
-
\startcomponent languages-basics
+\environment languages-environment
+
\startchapter[title=Some basics][color=darkyellow]
\startsection[title={Introduction}]
@@ -35,11 +35,11 @@ up to users to provide the information.}
\getbuffer
-\noindentation You can call up such a table with the following commands:
+You can call up such a table with the following commands:
\typebuffer
-\noindentation Instead you can run \type {context --global languages-system.mkiv}.
+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
@@ -107,7 +107,7 @@ 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
+\blank \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
@@ -122,7 +122,7 @@ a language. It is insensitive for capitalization as the following text shows:
\blank
-\startnarrower \noindentation
+\startnarrower
\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
@@ -139,7 +139,7 @@ are of course many more fantastic musicians.}
\blank
-\noindentation Of course, names are often short and don't need to be hyphenated
+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).
@@ -315,9 +315,9 @@ are several ways to do this:
\typebuffer
-\noindentation This typesets:
+This typesets:
-\blank \start \setupindenting[no] \getbuffer \stop \blank
+\blank \startpacked \setupindenting[no] \getbuffer \stoppacked \blank
When you use setups you can use the following trick:
@@ -337,7 +337,7 @@ When you use setups you can use the following trick:
\typebuffer
-\noindentation As expected we get:
+As expected we get:
\blank \start \setupindenting[no] \getbuffer \stop \blank
diff --git a/doc/context/sources/general/manuals/languages/languages-environment.tex b/doc/context/sources/general/manuals/languages/languages-environment.tex
index ff529a8d1..2669fe0c5 100644
--- a/doc/context/sources/general/manuals/languages/languages-environment.tex
+++ b/doc/context/sources/general/manuals/languages/languages-environment.tex
@@ -1,347 +1,15 @@
\startenvironment languages-environment
-\usemodule[visual]
-\usemodule[simulate]
+ \environment manuals-explaining-environment
+ \environment manuals-explaining-cover
-\dontcomplain
+ \usemodule [s] [languages-hyphenation]
+ \usemodule [s] [languages-frequencies]
+ \usemodule [s] [languages-sorting]
+ \usemodule [s] [languages-counters]
+ \usemodule [s] [languages-system]
-\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]
+ \usemodule [s] [math-extensibles]
\stopenvironment
+
diff --git a/doc/context/sources/general/manuals/languages/languages-goodies.tex b/doc/context/sources/general/manuals/languages/languages-goodies.tex
index fbbfafc34..32de54db3 100644
--- a/doc/context/sources/general/manuals/languages/languages-goodies.tex
+++ b/doc/context/sources/general/manuals/languages/languages-goodies.tex
@@ -1,9 +1,9 @@
% language=uk
-\environment languages-environment
-
\startcomponent languages-goodies
+\environment languages-environment
+
\startchapter[title=Goodies][color=darkorange]
\startsection[title=Introduction]
diff --git a/doc/context/sources/general/manuals/languages/languages-hyphenation.tex b/doc/context/sources/general/manuals/languages/languages-hyphenation.tex
index 48e6eb385..96271d1aa 100644
--- a/doc/context/sources/general/manuals/languages/languages-hyphenation.tex
+++ b/doc/context/sources/general/manuals/languages/languages-hyphenation.tex
@@ -1,9 +1,9 @@
% language=uk
-\environment languages-environment
-
\startcomponent languages-hyphenation
+\environment languages-environment
+
\startchapter[title=Hyphenation][color=darkmagenta]
\startsection[title=How it works]
@@ -339,7 +339,7 @@ aaaaabbbbb \par
\typebuffer
-\noindentation This code is self explaining and results in:
+This code is self explaining and results in:
\blank
@@ -347,8 +347,7 @@ aaaaabbbbb \par
\setupindenting[no]\hsize 1mm \lefthyphenmin 1 \righthyphenmin 1 \getbuffer
\stophyphenation
-\noindentation There can be multiple hyphens and even multiple words in such a
-specification:
+There can be multiple hyphens and even multiple words in such a specification:
\startbuffer
\registerhyphenationexception[aaaaa-bbbbb cc-ccc-ddd-dd]
@@ -358,7 +357,7 @@ cccccddddd \par
\typebuffer
-\noindentation We get:
+We get:
\blank
@@ -385,8 +384,8 @@ whatever-whatever \par
\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.
+insert penalties and|/|or glue to get around it unless you instruct \LUATEX\ to
+be more. In the \LUA\ variant we can enable that limitation.
\startbuffer
\definehyphenationfeatures
@@ -446,7 +445,7 @@ 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
+(for instance) have no spaces but split on words or syllables. A more tight
integration with the hyphenator can have advantages so I will explore these
options when there is demand.
@@ -520,7 +519,7 @@ When applied to one the tufte example we get:
\starthyphenation[traditional]
\setuptolerance[tolerant]
\sethyphenationfeatures[demo]
- \noindentation % \dontleavehmode
+ \dontleavehmode
\input tufte\relax
\stophyphenation
\stopbuffer
@@ -626,7 +625,7 @@ So, we only break a line after symbols.
\stophyphenation
\stoplinecorrection
-\noindentation A quick test can look as follows:
+A quick test can look as follows:
\startbuffer
\starthyphenation[traditional]
@@ -663,7 +662,7 @@ superef\zwnj fective
\typebuffer[sample]
-\noindentation and define two featuresets:
+and define two featuresets:
\startbuffer
\definehyphenationfeatures
@@ -678,7 +677,7 @@ superef\zwnj fective
\typebuffer \getbuffer
-\noindentation We limit the width to 1mm and get:
+We limit the width to 1mm and get:
\startlinecorrection[blank]
\bTABLE[option=stretch,offset=.5ex]
@@ -748,7 +747,7 @@ same as the breakpoints mechanism (compounds).
\starthyphenation[traditional]
\sethyphenationfeatures[demo-3]
\dontcomplain
- \hsize 1mm \noindentation
+ \hsize 1mm
we use (super)special(ized) patterns
\stophyphenation
\stopbuffer
@@ -764,11 +763,11 @@ We can make this more clever by adding patterns:
\typebuffer \blank \getbuffer \blank
-\noindentation This gives:
+This gives:
\blank \getbuffer[demo] \blank
-\noindentation A detailed trace shows that these patterns get applied:
+A detailed trace shows that these patterns get applied:
\starthyphenation[traditional]
\ttx
@@ -778,8 +777,75 @@ We can make this more clever by adding patterns:
\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.
+The somewhat weird hyphens at the edges will in practice not show up because
+there is always one regular character there.
+
+\stopsection
+
+\startsection[title=Counting]
+
+There is not much you can do about patterns. It's a craft to make them and so
+they are shipped with the distribution. In order to hyphenate well, \TEX\ looks
+at some character properties. In \CONTEXT\ only the characters used in the
+patterns of a language get tagged as valid in a word.
+
+The following example illustrates that there can be corner cases. In fact, this
+example might render differently depending on the patterns available. First we
+define an extra language, based on French.
+
+\startbuffer
+\installlanguage[frf][default=fr,patterns=fr,factor=yes]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Here we set the \type {factor} parameter which tells the loader that it should
+look at the characters used in a special way: some count for none, and some count
+for more than one when determining the min values used to determine if and where
+hyphenation is to be applied.
+
+\startbuffer
+\startmixedcolumns[n=3,balance=yes]
+ \hsize 1mm \dontcomplain
+ \language[fr] aesop oedipus æsop œdipus \column
+ \hsize 1mm \dontcomplain
+ \language[frf] aesop oedipus æsop œdipus \column
+ \startexceptions æ-sop \stopexceptions
+ \hsize 1mm \dontcomplain
+ \language[frf] aesop oedipus æsop œdipus
+\stopmixedcolumns
+\stopbuffer
+
+\typebuffer
+
+We get three (when writing this manual) different columns:
+
+\getbuffer
+
+The trick is in the \type {factor}: when set to \type {yes} an \type {æ} is
+counted as two characters. Combining marks count as zero but you will not
+find them being used as we already resolve them in an earlier stage.
+
+\startluacode
+context.startcolumns { n = 2 }
+context.starttabulate { "|Tc|c|c|l|" }
+for u, data in table.sortedhash(languages.hjcounts) do
+ if data.category ~= "combining" then
+ context.NC() context("%05U",u)
+ context.NC() context("%c",u)
+ context.NC() context(data.count)
+ context.NC() context(data.category)
+ context.NC() context.NR()
+ end
+end
+context.stoptabulate()
+context.stopcolumns()
+\stopluacode
+
+It is very unlikely to find an \type {ffi} in the input and even an \type {ij} is
+rare. The \type {æ} is marked as character and the \type {œ} a ligatyure in
+\UNICODE. Maybe all the characters here are dubious but al least we provide a
+way to experiment with them.
\stopsection
diff --git a/doc/context/sources/general/manuals/languages/languages-labels.tex b/doc/context/sources/general/manuals/languages/languages-labels.tex
index 3d1c00c04..6c806ab1c 100644
--- a/doc/context/sources/general/manuals/languages/languages-labels.tex
+++ b/doc/context/sources/general/manuals/languages/languages-labels.tex
@@ -1,9 +1,9 @@
% language=uk
-\environment languages-environment
-
\startcomponent languages-labels
+\environment languages-environment
+
\startchapter[title=Labels][color=darkcyan]
\startsection[title=Introduction]
diff --git a/doc/context/sources/general/manuals/languages/languages-mkiv.tex b/doc/context/sources/general/manuals/languages/languages-mkiv.tex
index dbf9875e1..a65c6d532 100644
--- a/doc/context/sources/general/manuals/languages/languages-mkiv.tex
+++ b/doc/context/sources/general/manuals/languages/languages-mkiv.tex
@@ -1,38 +1,65 @@
-\enablemode[simple] % ,oversized
-
-\startproduct languages-mkiv
+% language=uk
-\environment languages-environment
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
+%
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+%
+% comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt
+% Group journal or otherwise. Thanks to the editors for corrections. Also thanks
+% to users for testing, feedback and corrections.
-\setupbackgrounds[page][background=]
+\enablemode[simple] % ,oversized
-\component languages-cover
+\startbuffer[abstract]
-% \startcovermatter
+ 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.
-\page[dummy] \setupbackgrounds[page][background=page] \resetuserpagenumber
+\stopbuffer
-% \stopcovermatter
+\environment languages-environment
-\startfrontmatter
- \component languages-contents
- \component languages-introduction
-\stopfrontmatter
+\startdocument
+ [author=Hans Hagen,
+ title=Languages in \ConTeXt,
+ subtitle=explaining luatex and mkiv,
+ affiliation=PRAGMA ADE,
+ comment=work in progress,
+ cover:color:1=darkmagenta,
+ cover:color:2=darkorange,
+ cover:color:3=darkyellow,
+ cover:color:4=darkcyan,
+ cover:color:5=darkgray]
-\startbodymatter
- \component languages-basics
- \component languages-hyphenation
- \component languages-labels
- \component languages-numbering
- \component languages-typesetting
- \component languages-goodies
- \component languages-sorting
-\stopbodymatter
+ \startfrontmatter
+ \component manuals-explaining-contents
+ \component languages-introduction
+ \stopfrontmatter
-\startappendices
- \component languages-appendix
-\stopappendices
+ \startbodymatter
+ \component languages-basics
+ \component languages-hyphenation
+ \component languages-labels
+ \component languages-numbering
+ \component languages-typesetting
+ \component languages-goodies
+ \component languages-sorting
+ \stopbodymatter
-\component languages-back
+ \startappendices
+ \component languages-appendix
+ \stopappendices
-\stopproduct
+\stopdocument
diff --git a/doc/context/sources/general/manuals/languages/languages-numbering.tex b/doc/context/sources/general/manuals/languages/languages-numbering.tex
index 510f51034..3464826df 100644
--- a/doc/context/sources/general/manuals/languages/languages-numbering.tex
+++ b/doc/context/sources/general/manuals/languages/languages-numbering.tex
@@ -1,9 +1,9 @@
% language=uk
-\environment languages-environment
-
\startcomponent languages-numbering
+\environment languages-environment
+
\startchapter[title=Numbering][color=darkgreen]
\startsection[title=Introduction]
@@ -19,13 +19,13 @@ how English, Spanish and Slovenian numbers:
\blank
\startpacked
\startcolor[maincolor]
-\noindentation\dontleavehmode
+\dontleavehmode
{\ttbf\mainlanguage[en]\dorecurse{28}
{\hbox to 1.5em{\convertnumber{alphabetic}{#1}\hss}}}\par
-\noindentation\dontleavehmode
+\dontleavehmode
{\ttbf\mainlanguage[es]\dorecurse{28}
{\hbox to 1.5em{\convertnumber{alphabetic}{#1}\hss}}}\par
-\noindentation\dontleavehmode
+\dontleavehmode
{\ttbf\mainlanguage[sl]\dorecurse{28}
{\hbox to 1.5em{\convertnumber{alphabetic}{#1}\hss}}}\par
\stopcolor
@@ -153,7 +153,7 @@ application:
\typebuffer
-\noindentation What renders as:
+What renders as:
\startlines[color=maincolor]
\getbuffer
@@ -170,7 +170,7 @@ a label text depending on the valu ebeing non|-|zero.
\typebuffer
-\noindentation This gives:
+This gives:
\startlines[color=maincolor]
\getbuffer
@@ -190,7 +190,7 @@ So,
\typebuffer
-\noindentation Gives:
+Gives:
\startlines[color=maincolor]
\getbuffer
@@ -200,17 +200,17 @@ 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
+\type {set 0}: \startcolor[maincolor]\dorecurse{20}{\convertnumber{set 0}{#1} }\stopcolor\par
+\type {set 1}: \startcolor[maincolor]\dorecurse{20}{\convertnumber{set 1}{#1} }\stopcolor\par
+\type {set 2}: \startcolor[maincolor]\dorecurse{20}{\convertnumber{set 2}{#1} }\stopcolor\par
+\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}.
+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:
%
@@ -250,7 +250,7 @@ specific date with \type {\date}, for instance:
\getbuffer
\stoplines
-\noindentation Possible elements of the specification are:
+Possible elements of the specification are:
\starttabulate
\FL
@@ -284,6 +284,18 @@ specific date with \type {\date}, for instance:
\LL
\stoptabulate
+There are also some converters built in (more can be added), for instance:
+
+\startbuffer
+The current {\em gregorian} date \currentdate [month, day, {, }, year] is
+in {\em jalali} \currentdate [jalali:to, month, day, {, }, year] but we
+can also as a specific one, so {\em jalali} \date [y=1395, m=4, d=18]
+[month, day, {, }, year] is {\em gregorian} \date [y=1395, m=4, d=18]
+[jalali:from, month, day, {, }, year].
+\stopbuffer
+
+\typebuffer \startnarrower \getbuffer \stopnarrower
+
\stopsection
% \startsection[title=Counters]
diff --git a/doc/context/sources/general/manuals/languages/languages-sorting.tex b/doc/context/sources/general/manuals/languages/languages-sorting.tex
index abf7b292c..ce24f385c 100644
--- a/doc/context/sources/general/manuals/languages/languages-sorting.tex
+++ b/doc/context/sources/general/manuals/languages/languages-sorting.tex
@@ -1,9 +1,9 @@
% language=uk
-\environment languages-environment
-
\startcomponent languages-sorting
+\environment languages-environment
+
\startchapter[title=Sorting][color=darkblue]
\startsection[title=Introduction]
diff --git a/doc/context/sources/general/manuals/lua/lua-mkiv.tex b/doc/context/sources/general/manuals/lua/lua-mkiv.tex
index 40e885eac..25a3d1786 100644
--- a/doc/context/sources/general/manuals/lua/lua-mkiv.tex
+++ b/doc/context/sources/general/manuals/lua/lua-mkiv.tex
@@ -12,6 +12,10 @@
% with existing functionality and we cannot be held responsible for that. Many of
% the manuals contain characteristic graphics and personal notes or examples that
% make no sense when used out-of-context.
+%
+% comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt
+% Group journal or otherwise. Thanks to the editors for corrections. Also thanks
+% to users for testing, feedback and corrections.
\usemodule[art-01,abr-02]
diff --git a/doc/context/sources/general/manuals/luatex/luatex-enhancements.tex b/doc/context/sources/general/manuals/luatex/luatex-enhancements.tex
index 35c27cfb6..19f88234a 100644
--- a/doc/context/sources/general/manuals/luatex/luatex-enhancements.tex
+++ b/doc/context/sources/general/manuals/luatex/luatex-enhancements.tex
@@ -736,7 +736,7 @@ This primitive is still experimental but can be used to assign a meaning to an a
character, as in:
\starttyping
-\def\foo{bar} \letcharcode123\foo
+\def\foo{bar} \letcharcode123=\foo
\stoptyping
This can be a bit nicer that using the uppercase tricks (using the property of
@@ -759,6 +759,13 @@ the acceptable range is from 0 to 65535.
These three primitives are like \type {\vbox}, \type {\hbox} and \type {\vtop}
but don't apply the related callbacks.
+\subsection{\type {\vsplit}}
+
+The \type {\vsplit} primitive has to be followed by a specification of the
+required height. As alternative for the \type {to} keyword you can use \type
+{upto} to get a split of the given size but result has the natural dimensions
+then.
+
\subsection{Images and Forms}
These two concepts are now core concepts and no longer whatsits. They are in fact
@@ -794,6 +801,12 @@ optional parameters are not implemented for \type {\saveboxresource}.
\useboxresource width 20mm height 10mm depth 5mm \lastsavedboxresourceindex
\stoptyping
+The box resources are of course implemented in the backend and therefore we do
+support the \type {attr} and \type {resources} keys that accept a token list. New
+is the \type {type} key. When set to non|-|zero the \type {/Type} entry is
+omitted. A value of 1 or 3 still writes a \type {/BBox}, while 2 or 3 will write
+a \type {/Matrix}.
+
\subsection{\type {\nohrule} and \type {\novrule}}
Because introducing a new keyword can cause incompatibilities, two new primitives
diff --git a/doc/context/sources/general/manuals/luatex/luatex-fonts.tex b/doc/context/sources/general/manuals/luatex/luatex-fonts.tex
index 7384f3b3e..221c0ce85 100644
--- a/doc/context/sources/general/manuals/luatex/luatex-fonts.tex
+++ b/doc/context/sources/general/manuals/luatex/luatex-fonts.tex
@@ -36,7 +36,9 @@ The top|-|level keys in the table are as follows:
\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
+ output. This has to be a valid string, e.g.\ no spaces
+ and such, as the backend will not do a cleanup. This gives
+ complete control to the loader. \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
@@ -75,6 +77,8 @@ The top|-|level keys in the table are as follows:
\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 oldmath \NC no \NC no \NC yes \NC boolean\NC This key flags a font as representing an old school \TEX\
+ math font and disables the \OPENTYPE\ code path. \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}
diff --git a/doc/context/sources/general/manuals/luatex/luatex-introduction.tex b/doc/context/sources/general/manuals/luatex/luatex-introduction.tex
index 8ab8b4463..196a9af4f 100644
--- a/doc/context/sources/general/manuals/luatex/luatex-introduction.tex
+++ b/doc/context/sources/general/manuals/luatex/luatex-introduction.tex
@@ -98,6 +98,14 @@ code in \TEX\ engines (especially code that is not needed any longer).
\stopitem
\stopitemize
+We try to keep upcoming versions compatible but intermediate releases can contain
+experimental features. A general rule is that versions that end up on \TEX live
+and|/|or are released around \CONTEXT\ meetings are stable. Future versions will
+probably become a bit leaner and meaner. Some libraries might become external as
+we don't want to bloat the binary and also don't want to add more hard coded
+solutions. After all, with \LUA\ you can extend the core functionality. The less
+dependencies, the better.
+
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
@@ -112,8 +120,10 @@ Taco Hoekwater \& Luigi Scarso
\starttabulate
\NC Version \EQ \currentdate \NC \NR
-\NC \LUATEX \EQ Snapshot \number\luatexversion.\luatexrevision \NC \NR
-\NC \CONTEXT \EQ \contextversion \NC \NR
+\NC \LUATEX \EQ version \cldcontext{status.luatex_version/100},
+ revision \cldcontext{status.luatex_revision},
+ number \cldcontext{environment.luatexversion} \NC \NR
+\NC \CONTEXT \EQ MkIV \contextversion \NC \NR
\stoptabulate
\stopchapter
diff --git a/doc/context/sources/general/manuals/luatex/luatex-languages.tex b/doc/context/sources/general/manuals/luatex/luatex-languages.tex
index 19e3f7b14..54a7b390d 100644
--- a/doc/context/sources/general/manuals/luatex/luatex-languages.tex
+++ b/doc/context/sources/general/manuals/luatex/luatex-languages.tex
@@ -147,6 +147,38 @@ 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.
+When a \type {\hjcode} is larger than $0$ but smaller than $32$ is indicates the
+to be used length. In the following example we map a character (\type {x}) onto
+another one in the patterns and tell the engine that \type {œ} counts as one
+character. Because traditionally zero itself is reserved for inhibiting
+hyphenation, a value of $32$ counts as zero.
+
+\starttyping
+% assuming french patterns:
+foobar % foo-bar
+
+\hjcode`x=`o
+
+fxxbar % fxx-bar
+
+\lefthyphenmin3
+
+œdipus % œdi-pus
+
+\lefthyphenmin4
+
+œdipus % œdipus
+
+\hjcode`œ=2
+
+œdipus % œdi-pus
+
+\hjcode`i=32
+\hjcode`d=32
+
+œdipus % œdipus
+\stoptyping
+
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
@@ -180,6 +212,134 @@ as trigger. Here are a few examples of usage:
\stopbuffer
\typebuffer \start \dontcomplain \hsize 1pt \getbuffer \par \stop
+We only accept an explicit hyphen when there is a preceding glyph and we skip a
+sequence of explicit hyphens as that normally indicates a \type {--} or \type
+{---} ligature in which case we can in a worse case usage get bad node lists
+later on due to messed up ligature building as these dashes are ligatures in base
+fonts. This is a side effect of the separating the hyphenation, ligaturing and
+kerning steps.
+
+The start and end of a characters is signalled by a glue, penalty, kern or boundary
+node. But by default also a hlist, vlist, rule, dir, whatsit, ins, and adjust node
+indicate a start or end. You can omit the last set from the test by setting
+\type {\hyphenationbounds} to a non|-|zero value:
+
+\starttabulate[|Tl|l|]
+\NC 0 \NC not strict \NC \NR
+\NC 1 \NC strict start \NC \NR
+\NC 2 \NC strict end \NC \NR
+\NC 3 \NC strict start and strict end \NC \NR
+\stoptabulate
+
+The word start is determined as follows:
+
+\starttabulate[|Bl|l|]
+\NC boundary \NC yes when wordboundary \NC \NR
+\NC hlist \NC when hyphenationbounds 1 or 3 \NC \NR
+\NC vlist \NC when hyphenationbounds 1 or 3 \NC \NR
+\NC rule \NC when hyphenationbounds 1 or 3 \NC \NR
+\NC dir \NC when hyphenationbounds 1 or 3 \NC \NR
+\NC whatsit \NC when hyphenationbounds 1 or 3 \NC \NR
+\NC glue \NC yes \NC \NR
+\NC math \NC skipped \NC \NR
+\NC glyph \NC exhyphenchar (one only) : yes (so no -- ---) \NC \NR
+\NC otherwise \NC yes \NC \NR
+\stoptabulate
+
+The word end is determined as follows:
+
+\starttabulate[|Bl|l|]
+\NC boundary \NC yes \NC \NR
+\NC glyph \NC yes when different language \NC \NR
+\NC glue \NC yes \NC \NR
+\NC penalty \NC yes \NC \NR
+\NC kern \NC yes when not italic (for some historic reason) \NC \NR
+\NC hlist \NC when hyphenationbounds 2 or 3 \NC \NR
+\NC vlist \NC when hyphenationbounds 2 or 3 \NC \NR
+\NC rule \NC when hyphenationbounds 2 or 3 \NC \NR
+\NC dir \NC when hyphenationbounds 2 or 3 \NC \NR
+\NC whatsit \NC when hyphenationbounds 2 or 3 \NC \NR
+\NC ins \NC when hyphenationbounds 2 or 3 \NC \NR
+\NC adjust \NC when hyphenationbounds 2 or 3 \NC \NR
+\stoptabulate
+
+% (Future versions of \LUATEX\ might provide more granularity.)
+
+In traditional \TEX\ ligature building and hyphenation are interwoven with the
+line break mechanism. In \LUATEX\ these phases are isolated. As a consequence we
+deal differently with (a sequence of) explicit hyphens. We already have added
+some control over aspects of the hyphenation and yet another one concerns
+automatic hyphens (e.g.\ \type {-} characters in the input).
+
+When \type {\automatichyphenmode} has a value of 0, a hyphen will be turned into
+an automatic discretionary. The snippets before and after it will not be
+hyphenated. A side effect is that a leading hyphen can lead to a split but one
+will seldom run into that situation. Setting a pre and post character makes this
+more prominent. A value of 1 will prevent this side effect and a value of 2 will
+not turn the hyphen into a discretionary. Experiments with other options, like
+permitting hyphenation, of the words on both sides were discarded.
+
+\startbuffer[a]
+before-after \par
+before--after \par
+before---after \par
+\stopbuffer
+
+\startbuffer[b]
+-before \par
+after- \par
+--before \par
+after-- \par
+---before \par
+after--- \par
+\stopbuffer
+
+\startbuffer[c]
+before-after \par
+before--after \par
+before---after \par
+\stopbuffer
+
+We show three samples:
+
+Input A: \typebuffer[a]
+Input B: \typebuffer[b]
+Input C: \typebuffer[c]
+
+\startbuffer[demo]
+\startcombination[nx=4,ny=3,location=top]
+ {\framed[align=normal,strut=no,top=\vskip.5ex,bottom=\vskip.5ex]{\automatichyphenmode\zerocount \hsize6em \getbuffer[a]}} {A~0~6em}
+ {\framed[align=normal,strut=no,top=\vskip.5ex,bottom=\vskip.5ex]{\automatichyphenmode\zerocount \hsize2pt \getbuffer[a]}} {A~0~2pt}
+ {\framed[align=normal,strut=no,top=\vskip.5ex,bottom=\vskip.5ex]{\automatichyphenmode\plusone \hsize2pt \getbuffer[a]}} {A~1~2pt}
+ {\framed[align=normal,strut=no,top=\vskip.5ex,bottom=\vskip.5ex]{\automatichyphenmode\plustwo \hsize2pt \getbuffer[a]}} {A~2~2pt}
+ {\framed[align=normal,strut=no,top=\vskip.5ex,bottom=\vskip.5ex]{\automatichyphenmode\zerocount \hsize6em \getbuffer[b]}} {B~0~6em}
+ {\framed[align=normal,strut=no,top=\vskip.5ex,bottom=\vskip.5ex]{\automatichyphenmode\zerocount \hsize2pt \getbuffer[b]}} {B~0~2pt}
+ {\framed[align=normal,strut=no,top=\vskip.5ex,bottom=\vskip.5ex]{\automatichyphenmode\plusone \hsize2pt \getbuffer[b]}} {B~1~2pt}
+ {\framed[align=normal,strut=no,top=\vskip.5ex,bottom=\vskip.5ex]{\automatichyphenmode\plustwo \hsize2pt \getbuffer[b]}} {B~2~2pt}
+ {\framed[align=normal,strut=no,top=\vskip.5ex,bottom=\vskip.5ex]{\automatichyphenmode\zerocount \hsize6em \getbuffer[c]}} {C~0~6em}
+ {\framed[align=normal,strut=no,top=\vskip.5ex,bottom=\vskip.5ex]{\automatichyphenmode\zerocount \hsize2pt \getbuffer[c]}} {C~0~2pt}
+ {\framed[align=normal,strut=no,top=\vskip.5ex,bottom=\vskip.5ex]{\automatichyphenmode\plusone \hsize2pt \getbuffer[c]}} {C~1~2pt}
+ {\framed[align=normal,strut=no,top=\vskip.5ex,bottom=\vskip.5ex]{\automatichyphenmode\plustwo \hsize2pt \getbuffer[c]}} {C~2~2pt}
+\stopcombination
+\stopbuffer
+
+\startplacefigure[reference=automatic:1,title={The automatic modes \type {0} (default), \type {1} and \type {2}, with a \type {\hsize}
+of 6em and 2pt (which triggers a linebreak).}]
+ \dontcomplain \tt \getbuffer[demo]
+\stopplacefigure
+
+\startplacefigure[reference=automatic:2,title={The automatic modes \type {0} (default), \type {1} and \type {2}, with \type
+{\preexhyphenchar} and \type {\postexhyphenchar} set to characters \type {A} and \type {B}.}]
+ \postexhyphenchar`A\relax
+ \preexhyphenchar `B\relax
+ \dontcomplain \tt \getbuffer[demo]
+\stopplacefigure
+
+As with primitive companions of other single character commands, the \type {\-}
+command has a more verbose primitive version in \type {\explicitdiscretionary}
+and the normally intercepted in the hyphenator character \type {-} (or whatever
+is configured) is available as \type {\automaticdiscretionary}.
+
\section{The main control loop}
In \LUATEX's main loop, almost all input characters that are to be typeset are
@@ -260,6 +420,34 @@ 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.
+Because we tend to make hard codes behaviour configurable a few new primitives
+have been added:
+
+\starttyping
+\hyphenpenaltymode
+\automatichyphenpenalty
+\explicithyphenpenalty
+\stoptyping
+
+The first parameter has the following consequences for automatic discs (the ones
+resulting from an \type {\exhyphenchar}:
+
+\starttabulate[|Tc|l|l|]
+\BC mode \BC automatic disc \type{-} \BC explicit disc \type{\-} \NC \NR
+\HL
+\NC 0 \NC \type {\exhyphenpenalty} \NC \type {\exhyphenpenalty} \NC \NR
+\NC 1 \NC \type {\hyphenpenalty} \NC \type {\hyphenpenalty} \NC \NR
+\NC 2 \NC \type {\exhyphenpenalty} \NC \type {\hyphenpenalty} \NC \NR
+\NC 3 \NC \type {\hyphenpenalty} \NC \type {\exhyphenpenalty} \NC \NR
+\NC 4 \NC \type {\automatichyphenpenalty} \NC \type {\explicithyphenpenalty} \NC \NR
+\NC 5 \NC \type {\exhyphenpenalty} \NC \type {\explicithyphenpenalty} \NC \NR
+\NC 6 \NC \type {\hyphenpenalty} \NC \type {\explicithyphenpenalty} \NC \NR
+\NC 7 \NC \type {\automatichyphenpenalty} \NC \type {\exhyphenpenalty} \NC \NR
+\NC 8 \NC \type {\automatichyphenpenalty} \NC \type {\hyphenpenalty} \NC \NR
+\stoptabulate
+
+other values do what we always did in \LUATEX: insert \type {\exhyphenpenalty}.
+
\section[patternsexceptions]{Loading patterns and exceptions}
The hyphenation algorithm in \LUATEX\ is quite different from the one in \TEX82,
@@ -703,3 +891,17 @@ initialized due to \type {\savinghyphcodes} being larger than zero.
\stopchapter
\stopcomponent
+
+% \parindent0pt \hsize=1.1cm
+% 12-34-56 \par
+% 12-34-\hbox{56} \par
+% 12-34-\vrule width 1em height 1.5ex \par
+% 12-\hbox{34}-56 \par
+% 12-\vrule width 1em height 1.5ex-56 \par
+% \hjcode`\1=`\1 \hjcode`\2=`\2 \hjcode`\3=`\3 \hjcode`\4=`\4 \vskip.5cm
+% 12-34-56 \par
+% 12-34-\hbox{56} \par
+% 12-34-\vrule width 1em height 1.5ex \par
+% 12-\hbox{34}-56 \par
+% 12-\vrule width 1em height 1.5ex-56 \par
+
diff --git a/doc/context/sources/general/manuals/luatex/luatex-math.tex b/doc/context/sources/general/manuals/luatex/luatex-math.tex
index cb8d198b1..3c29d9609 100644
--- a/doc/context/sources/general/manuals/luatex/luatex-math.tex
+++ b/doc/context/sources/general/manuals/luatex/luatex-math.tex
@@ -38,6 +38,99 @@ be used as numeric values, so you can write code like this:
\fi \fi
\stoptyping
+Sometimes you won't get what you expect so a bit of explanation might help to
+understand what happens. When math is parsed and expanded it gets turned into a
+linked list. In a second pass the formula will be build. This has to do with the
+fact that in order to determine the automatically chosen sizes (in for instance
+fractions) following content can influence preceding sizes. A side effect of this
+is for instance that one cannot change the definition of a font family (and
+thereby reusing numbers) because the number that got used is stored and used in
+the second pass (so changing \type {\fam 12} mid|-|formula spoils over to
+preceding use of that family).
+
+The style switching primitives like \type {\textstyle} are turned into nodes so
+the styles set there are frozen. The \type {\mathchoice} primitive results in
+four lists being constructed of which one is used in the second pass. The fact
+that some automatic styles are not yet known also means that the \type
+{\mathstyle} primitive expands to the current style which can of course be
+different from the one really used. It's a snapshot of the first pass state. As a
+consequence in the following example you get a style number (first pass) typeset
+that can actually differ from the used style (second pass). In the case of a math
+choice used ungrouped, the chosen style is used after the choice too, unless you
+group.
+
+\startbuffer[1]
+ [a:\mathstyle]\quad
+ \bgroup
+ \mathchoice
+ {\bf \scriptstyle (x:d :\mathstyle)}
+ {\bf \scriptscriptstyle (x:t :\mathstyle)}
+ {\bf \scriptscriptstyle (x:s :\mathstyle)}
+ {\bf \scriptscriptstyle (x:ss:\mathstyle)}
+ \egroup
+ \quad[b:\mathstyle]\quad
+ \mathchoice
+ {\bf \scriptstyle (y:d :\mathstyle)}
+ {\bf \scriptscriptstyle (y:t :\mathstyle)}
+ {\bf \scriptscriptstyle (y:s :\mathstyle)}
+ {\bf \scriptscriptstyle (y:ss:\mathstyle)}
+ \quad[c:\mathstyle]\quad
+ \bgroup
+ \mathchoice
+ {\bf \scriptstyle (z:d :\mathstyle)}
+ {\bf \scriptscriptstyle (z:t :\mathstyle)}
+ {\bf \scriptscriptstyle (z:s :\mathstyle)}
+ {\bf \scriptscriptstyle (z:ss:\mathstyle)}
+ \egroup
+ \quad[d:\mathstyle]
+\stopbuffer
+
+\startbuffer[2]
+ [a:\mathstyle]\quad
+ \begingroup
+ \mathchoice
+ {\bf \scriptstyle (x:d :\mathstyle)}
+ {\bf \scriptscriptstyle (x:t :\mathstyle)}
+ {\bf \scriptscriptstyle (x:s :\mathstyle)}
+ {\bf \scriptscriptstyle (x:ss:\mathstyle)}
+ \endgroup
+ \quad[b:\mathstyle]\quad
+ \mathchoice
+ {\bf \scriptstyle (y:d :\mathstyle)}
+ {\bf \scriptscriptstyle (y:t :\mathstyle)}
+ {\bf \scriptscriptstyle (y:s :\mathstyle)}
+ {\bf \scriptscriptstyle (y:ss:\mathstyle)}
+ \quad[c:\mathstyle]\quad
+ \begingroup
+ \mathchoice
+ {\bf \scriptstyle (z:d :\mathstyle)}
+ {\bf \scriptscriptstyle (z:t :\mathstyle)}
+ {\bf \scriptscriptstyle (z:s :\mathstyle)}
+ {\bf \scriptscriptstyle (z:ss:\mathstyle)}
+ \endgroup
+ \quad[d:\mathstyle]
+\stopbuffer
+
+\typebuffer[1]
+
+% \typebuffer[2]
+
+This gives:
+
+\blank $\displaystyle \getbuffer[1]$ \blank
+\blank $\textstyle \getbuffer[1]$ \blank
+
+Using \type {\begingroup} \unknown\ \type {\endgroup} instead gives:
+
+\blank $\displaystyle \getbuffer[2]$ \blank
+\blank $\textstyle \getbuffer[2]$ \blank
+
+This might look wrong but it's just a side effect of \type {\mathstyle} expanding
+to the current (first pass) style and the number being injected in the list that
+gets converted in the second pass. It all makes sense and it illustrates the
+importance of grouping. In fact, the math choice style being effective afterwards
+has advantages. It would be hard to get it otherwise.
+
\subsection{\type {\Ustack}}
There are a few math commands in \TEX\ where the style that will be used is not
@@ -174,7 +267,7 @@ 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.
+ Exception: in display style they are in script style.
\stopitem
\startitem
Subscripts are always in the cramped variant of the style; superscripts are only
@@ -314,7 +407,7 @@ needed.
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
+only inserted when larger than zero. Especially the later makes it sometimes hard
to fully control spacing. Therefore \LUATEX\ comes with a new directive: \type
{\mathdisplayskipmode}. The following values apply:
@@ -464,6 +557,86 @@ 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{Nolimit correction}
+
+There are two extra math parameters \type {\Umathnolimitsupfactor} and \type
+{\Umathnolimitsubfactor} that were added to provide some control over how limits
+are spaced (for example the position of super and subscripts after integral
+operators). They relate to an extra parameter \type {\mathnolimitsmode}. The half
+corrections are what happens when scripts are placed on above and below. The
+problem with italic corrections is that officially that correction italic is used
+for above|/|below placement while advanced kerns are used for placement at the
+right end. The question is: how often is this implemented, and if so, does the
+kerns assume correction too. Anyway, with this parameter one can control it.
+
+\starttabulate[|l|ck1|ck1|ck1|ck1|ck1|ck1|]
+ \NC
+ \NC \mathnolimitsmode0 $\displaystyle\int\nolimits^0_1$
+ \NC \mathnolimitsmode1 $\displaystyle\int\nolimits^0_1$
+ \NC \mathnolimitsmode2 $\displaystyle\int\nolimits^0_1$
+ \NC \mathnolimitsmode3 $\displaystyle\int\nolimits^0_1$
+ \NC \mathnolimitsmode4 $\displaystyle\int\nolimits^0_1$
+ \NC \mathnolimitsmode8000 $\displaystyle\int\nolimits^0_1$
+ \NC \NR
+ \TB
+ \NC \bf mode
+ \NC \tttf 0
+ \NC \tttf 1
+ \NC \tttf 2
+ \NC \tttf 3
+ \NC \tttf 4
+ \NC \tttf 8000
+ \NC \NR
+ \NC \bf superscript
+ \NC 0
+ \NC font
+ \NC 0
+ \NC 0
+ \NC +ic/2
+ \NC 0
+ \NC \NR
+ \NC \bf subscript
+ \NC -ic
+ \NC font
+ \NC 0
+ \NC -ic/2
+ \NC -ic/2
+ \NC 8000ic/1000
+ \NC \NR
+\stoptabulate
+
+When the mode is set to one, the math parameters are used. This way a macro
+package writer can decide what looks best. Given the current state of fonts in
+\CONTEXT\ we currently use mode 1 with factor 0 for the superscript and 750 for
+the subscripts. Positive values are used for both parameters but the subscript
+shifts to the left. A \type {\mathnolimitsmode} larger that 15 is considered to
+be a factor for the subscript correction. This feature can be handy when
+experimenting.
+
+\section{Math italic mess}
+
+The \type {\mathitalicsmode} parameter can be set to~1 to force italic correction
+before noads that represent some more complex structure (read: everything
+that is not an ord, bin, rel, open, close, punct or inner).
+
+\starttexdefinition Whatever #1
+ \NC \type{\mathitalicsmode=#1}
+ \NC \mathitalicsmode#1\ruledhbox{$\left|T^1\right|$}
+ \NC \mathitalicsmode#1\ruledhbox{$\left|T\right|$}
+ \NC \mathitalicsmode#1\ruledhbox{$T+1$}
+ \NC \mathitalicsmode#1\ruledhbox{$T{1\over2}$}
+ \NC \mathitalicsmode#1\ruledhbox{$T\sqrt{1}$}
+ \NR \NR
+\stoptexdefinition
+
+\starttabulate[|c|c|c|c|c|c|]
+ \Whatever0
+ \Whatever1
+\stoptabulate
+
+This kind of parameters relate to the fact that italic correction in \OPENTYPE\
+math is bound to fuzzy rules. So, control is the solution.
+
\section{Math spacing setting}
Besides the parameters mentioned in the previous sections, there are also 64 new
@@ -603,7 +776,7 @@ 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
+instance 1200 means that the criterium is 1.2 times the width of the nucleus. 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.
@@ -831,12 +1004,34 @@ For Latin Modern The result looks as follows:
\stoptabulate
\stop
+\section {Last lines}
+
+There is a new primitive to control the overshoot in the calculation of the
+previous line in mid|-|paragraph display math. The default value is 2 times
+the em width of the current font:
+
+\starttyping
+\predisplaygapfactor=2000
+\stoptyping
+
+If you want to have the length of the last line independent of math i.e.\ you don't
+want to revert to a hack where you insert a fake display math formula in order to
+get the length of the last line, the following will often work too:
+
+\starttyping
+\def\lastlinelength{\dimexpr
+ \directlua {tex.sprint (
+ (nodes.dimensions(node.tail(tex.lists.page_head).list))
+ )}sp
+\relax}
+\stoptyping
+
\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 {$$}: %$
+\type {^}, \type {_}, \type {$}, and \type {$$}:
\starttabulate[|l|l|l|l|]
\NC \bf primitive \NC \bf explanation \NC \NR
@@ -869,7 +1064,57 @@ Inline math is surrounded by (optional) \type {\mathsurround} spacing but that i
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.
+of \type {\mathsurround}, we can remain compatible. In the meantime a bit more
+control has been added via \type {\mathsurroundmode}. This directive can take 6 values
+with zero being the default behaviour.
+
+\start
+
+\def\OneLiner#1#2%
+ {\NC #1
+% \NC \ruledhbox{\mathsurroundmode#1\relax\hsize 100pt x$x$x}
+% \NC \ruledhbox{\mathsurroundmode#1\relax\hsize 100pt x $x$ x}
+ \NC \dontleavehmode\inframed[align=normal,offset=0pt,frame=off]{\mathsurroundmode#1\relax\hsize 100pt x$x$x}
+ \NC \dontleavehmode\inframed[align=normal,offset=0pt,frame=off]{\mathsurroundmode#1\relax\hsize 100pt x $x$ x}
+ \NC #2
+ \NC \NR}
+
+\startbuffer
+\mathsurround 10pt
+\mathsurroundskip20pt
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\starttabulate[|Tc|c|c|pl|]
+\HL
+\BC mode \BC \type {x$x$x} \BC \type {x $x$ x} \BC effect \NC \NR
+\HL
+\OneLiner{0}{obey \type {\mathsurround} when \type {\mathsurroundskip} is 0pt}
+\OneLiner{1}{only add skip to the left}
+\OneLiner{2}{only add skip to the right}
+\OneLiner{3}{add skip to the left and right}
+\OneLiner{4}{ignore the skip setting, obey \type {\mathsurround}}
+\OneLiner{5}{disable all spacing around math}
+\OneLiner{6}{only apply \type {\mathsurroundskip} when also spacing}
+\OneLiner{7}{only apply \type {\mathsurroundskip} when no spacing}
+\HL
+\stoptabulate
+
+\stop
+
+Method six omits the surround glue when there is (x)spacing glue present while
+method seven does the opposite, the glue is only applied when there is (x)space
+glue present too. Anything more fance, like checking the begining or end of a
+paragraph (or edges of a box) would not be robust anyway. If you want that you
+can write a callback that runs over a list and analyzes a paragraph. Actually, in
+that case you could also inject glue (or set the properties of a math node)
+explicitly. So, these modes are in practice mostly useful for special purposes
+and experiments (they originate in a tracker item). Keep in mind that this glue
+is part of the math node and not always treated as normal glue: it travels with
+the begin and end math nodes. Also, method 6 and 7 will zero the skip related
+fields in a node when applicable in the first occasion that checks them
+(linebreaking or packaging).
% \section{Math todo}
%
@@ -980,6 +1225,21 @@ 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 old}}
+
+This option was introduced for testing purposes when the math engine got split
+code paths and it forces the engine to treat new fonts as old ones with respect
+to italic correction etc. There are no guarantees given with respect to the final
+result and unexpected side effects are not seens as bugs as they relate to font
+properties.
+
+\startbuffer
+\mathoption old 1
+\stopbuffer
+
+The \type {oldmath} boolean flag in the \LUA\ font table is the official way to
+force old treatment as it's bound to fonts.
+
\subsubsection {\type {\mathoption noitaliccompensation}}
This option compensates placement for characters with a built|-|in italic
diff --git a/doc/context/sources/general/manuals/luatex/luatex-modifications.tex b/doc/context/sources/general/manuals/luatex/luatex-modifications.tex
index 0507a56e0..2857603ea 100644
--- a/doc/context/sources/general/manuals/luatex/luatex-modifications.tex
+++ b/doc/context/sources/general/manuals/luatex/luatex-modifications.tex
@@ -67,7 +67,19 @@ most still comes from the original. But we divert a bit.
\stopitem
\startitem
- Magnification (\type {\mag}) is only supported in \DVI\ output mode.
+ Magnification (\type {\mag}) is only supported in \DVI\ output mode. You can
+ set this parameter and it even works with \type {true} units till you switch
+ to \PDF\ output mode. When you use \PDF\ output you can best not touch the
+ \type {\mag} variable. This fuzzy behaviour is not much different from using
+ \PDF\ backend related functionality while eventually \DVI\ output is
+ required.
+
+ After the output mode has been frozen (normally that happens when the first
+ page is shipped out) or when \PDF\ output is enabled, the \type {true}
+ specification is ignored. When you preload a plain format adapted to
+ \LUATEX\ it can be that the \type {\mag} parameter already has been set.
+\stopitem
+
\stopitemize
\stopsubsection
@@ -514,7 +526,9 @@ different:
\stopsubsection
-\startsubsection[reference=backendprimitives,title=The backend primitives \type {\pdf*}]
+\stopsection
+
+\startsection[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
@@ -603,6 +617,7 @@ The configuration related registers have become:
\edef\pdfinclusionerrorlevel {\pdfvariable inclusionerrorlevel}
\edef\pdfignoreunknownimages {\pdfvariable ignoreunknownimages}
\edef\pdfgentounicode {\pdfvariable gentounicode}
+\edef\pdfomitcidset {\pdfvariable omitcidset}
\edef\pdfpagebox {\pdfvariable pagebox}
\edef\pdfminorversion {\pdfvariable minorversion}
\edef\pdfuniqueresname {\pdfvariable uniqueresname}
@@ -662,6 +677,7 @@ the defaults; these are:
\pdfinclusionerrorlevel 0
\pdfignoreunknownimages 0
\pdfgentounicode 0
+\pdfomitcidset 0
\pdfpagebox 0
\pdfminorversion 4
\pdfuniqueresname 0
@@ -765,7 +781,348 @@ normally generated by the engine:
So, you even need to include the brackets!
-\stopsubsection
+Although we started from a merge of \PDFTEX\ and \ALEPH, by now the code base as
+well as functionality has diverted from those parents. Here we show the options
+that can be passed to the extensions.
+
+\starttexsyntax
+\pdfextension literal
+ [ direct | page | raw ] { tokens }
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension dest
+ num integer | name { tokens }!crlf
+ [ fitbh | fitbv | fitb | fith| fitv | fit |
+ fitr <rule spec> | xyz [ zoom <integer> ]
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension annot
+ reserveobjnum | useobjnum <integer>
+ { tokens }
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension save
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension restore
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension setmatrix
+ { tokens }
+\stoptexsyntax
+
+\starttexsyntax
+[ \immediate ] \pdfextension obj
+ reserveobjnum
+\stoptexsyntax
+
+\starttexsyntax
+[ \immediate ] \pdfextension obj
+ [ useobjnum <integer> ]
+ [ uncompressed ]
+ [ stream [ attr { tokens } ] ]
+ [ file ]
+ { tokens }
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension refobj
+ <integer>
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension colorstack
+ <integer>
+ set { tokens } | push { tokens } | pop | current
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension startlink
+ [ attr { tokens } ]
+ user { tokens } | goto | thread
+ [ file { tokens } ]
+ [ page <integer> { tokens } | name { tokens } | num integer ]
+ [ newwindow | nonewwindow ]
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension endlink
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension startthread
+ num <integer> | name { tokens }
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension endthread
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension thread
+ num <integer> | name { tokens }
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension outline
+ [ attr { tokens } ]
+ [ useobjnum <integer> ]
+ [ count <integer> ]
+ { tokens }
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension glyphtounicode
+ { tokens }
+ { tokens }
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension catalog
+ { tokens }
+ [ openaction
+ user { tokens } | goto | thread
+ [ file { tokens } ]
+ [ page <integer> { tokens } | name { tokens } | num <integer> ]
+ [ newwindow | nonewwindow ] ]
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension fontattr
+ <integer>
+ {tokens}
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension mapfile
+ {tokens}
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension mapline
+ {tokens}
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension includechars
+ {tokens}
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension info
+ {tokens}
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension names
+ {tokens}
+\stoptexsyntax
+
+\starttexsyntax
+\pdfextension trailer
+ {tokens}
+\stoptexsyntax
+
+\stopsection
+
+\startsection[title=Directions]
+
+The directional model in \LUATEX\ is inherited from \OMEGA|/|\ALEPH\ but we tried
+to improve it a bit. At some point we played with recovery of modes but that was
+disabled later on when we found that it interfered with nested directions. That
+itself had as side effect that the node list was no longer balanced with respect
+to directional nodes which in turn can give side effects when a series of dir
+changes happens without grouping.
+
+The current (0.97 onward) approach is that we again make the list balanced but
+try to avoid some side effects. What happens is quite intuitive if we forget
+about spaces (turned into glue) but even there what happens makes sense if you
+look at it in detail. However that logic makes in|-|group switching kind of
+useless when no proper nested grouping is used: switching from right to left
+several times nested, results in spacing ending up after each other due to nested
+mirroring. Of course a sane macro package will manage this for the user but here
+we are discussing the low level dir injection.
+
+This is what happens:
+
+\starttyping
+\textdir TRT nur {\textdir TLT run \textdir TRT NUR} nur
+\stoptyping
+
+This becomes stepwise:
+
+\startnarrower
+\starttyping
+injected: [+TRT]nur {[+TLT]run [+TRT]NUR} nur
+balanced: [+TRT]nur {[+TLT]run [-TLT][+TRT]NUR[-TRT]} nur[-TRT]
+result : run {RUNrun } run
+\stoptyping
+\stopnarrower
+
+And this:
+
+\starttyping
+\textdir TRT nur {nur \textdir TLT run \textdir TRT NUR} nur
+\stoptyping
+
+becomes:
+
+\startnarrower
+\starttyping
+injected: [+TRT]nur {nur [+TLT]run [+TRT]NUR} nur
+balanced: [+TRT]nur {nur [+TLT]run [-TLT][+TRT]NUR[-TRT]} nur[-TRT]
+result : run {run RUNrun } run
+\stoptyping
+\stopnarrower
+
+Now, in the following examples watch where we put the braces:
+
+\startbuffer
+\textdir TRT nur {{\textdir TLT run} {\textdir TRT NUR}} nur
+\stopbuffer
+
+\typebuffer
+
+This becomes:
+
+\startnarrower
+\getbuffer
+\stopnarrower
+
+Compare this to:
+
+\startbuffer
+\textdir TRT nur {{\textdir TLT run }{\textdir TRT NUR}} nur
+\stopbuffer
+
+\typebuffer
+
+Which renders as:
+
+\startnarrower
+\getbuffer
+\stopnarrower
+
+So how do we deal with the next?
+
+\startbuffer
+\def\ltr{\textdir TLT\relax}
+\def\rtl{\textdir TRT\relax}
+
+run {\rtl nur {\ltr run \rtl NUR \ltr run \rtl NUR} nur}
+run {\ltr run {\rtl nur \ltr RUN \rtl nur \ltr RUN} run}
+\stopbuffer
+
+\typebuffer
+
+It gets typeset as:
+
+\startnarrower
+\startlines
+\getbuffer
+\stoplines
+\stopnarrower
+
+We could define the two helpers to look back, pick up a skip, remove it and
+inject it after the dir node. But that way we loose the subtype information that
+for some applications can be handy to be kept as|-|is. This is why we now have a
+variant of \type {\textdir} which injects the balanced node before the skip.
+Instead of the previous definition we can use:
+
+\startbuffer[def]
+\def\ltr{\linedir TLT\relax}
+\def\rtl{\linedir TRT\relax}
+\stopbuffer
+
+\typebuffer[def]
+
+and this time:
+
+\startbuffer[txt]
+run {\rtl nur {\ltr run \rtl NUR \ltr run \rtl NUR} nur}
+run {\ltr run {\rtl nur \ltr RUN \rtl nur \ltr RUN} run}
+\stopbuffer
+
+\typebuffer[txt]
+
+comes out as a properly spaced:
+
+\startnarrower
+\startlines
+\getbuffer[def,txt]
+\stoplines
+\stopnarrower
+
+Anything more complex that this, like combination of skips and penalties, or
+kerns, should be handled in the input or macro package because there is no way we
+can predict the expected behaviour. In fact, the \type {\linedir} is just a
+convenience extra which could also have been implemented using node list parsing.
+
+Another adaptation to the \ALEPH\ directional model is control over shapes driven
+by \type {\hangindent} and \type {\parshape}. This is controlled by a new parameter
+\type {\shapemode}:
+
+\starttabulate[|cTB|c|]
+\NC \NC \bf \type {\hangindent} \NC \bf \type {\parshape} \NC \NR
+\NC 0 \NC normal \NC normal \NC \NR
+\NC 1 \NC mirrored \NC normal \NC \NR
+\NC 2 \NC normal \NC mirrored \NC \NR
+\NC 3 \NC mirrored \NC mirrored \NC \NR
+\stoptabulate
+
+The value is reset to zero (like \type {\hangindent} and \type {\parshape})
+after the paragraph is done with. You can use negative values to preven t
+this.
+
+In \in {figure} [fig:shapemode] a few examples are given.
+
+\startplacefigure[reference=fig:shapemode,title={The effect of \type {shapemode}.}]
+ \startcombination[2*3]
+ {\ruledvbox \bgroup \setuptolerance[verytolerant]
+ \hsize .45\textwidth \switchtobodyfont[6pt]
+ \pardir TLT \textdir TLT
+ \hangindent 40pt \hangafter -3
+ \leftskip10pt \input tufte \par
+ \egroup} {TLT: hangindent}
+ {\ruledvbox \bgroup \setuptolerance[verytolerant]
+ \hsize .45\textwidth \switchtobodyfont[6pt]
+ \pardir TLT \textdir TLT
+ \parshape 4 0pt .8\hsize 10pt .8\hsize 20pt .8\hsize 0pt \hsize
+ \input tufte \par
+ \egroup} {TLT: parshape}
+ {\ruledvbox \bgroup \setuptolerance[verytolerant]
+ \hsize .45\textwidth \switchtobodyfont[6pt]
+ \pardir TRT \textdir TRT
+ \hangindent 40pt \hangafter -3
+ \leftskip10pt \input tufte \par
+ \egroup} {TRT: hangindent mode 0}
+ {\ruledvbox \bgroup \setuptolerance[verytolerant]
+ \hsize .45\textwidth \switchtobodyfont[6pt]
+ \pardir TRT \textdir TRT
+ \parshape 4 0pt .8\hsize 10pt .8\hsize 20pt .8\hsize 0pt \hsize
+ \input tufte \par
+ \egroup} {TRT: parshape mode 0}
+ {\ruledvbox \bgroup \setuptolerance[verytolerant]
+ \hsize .45\textwidth \switchtobodyfont[6pt]
+ \shapemode=3
+ \pardir TRT \textdir TRT
+ \hangindent 40pt \hangafter -3
+ \leftskip10pt \input tufte \par
+ \egroup} {TRT: hangindent mode 1 & 3}
+ {\ruledvbox \bgroup \setuptolerance[verytolerant]
+ \hsize .45\textwidth \switchtobodyfont[6pt]
+ \shapemode=3
+ \pardir TRT \textdir TRT
+ \parshape 4 0pt .8\hsize 10pt .8\hsize 20pt .8\hsize 0pt \hsize
+ \input tufte \par
+ \egroup} {TRT: parshape mode 2 & 3}
+ \stopcombination
+\stopplacefigure
\stopsection
diff --git a/doc/context/sources/general/manuals/luatex/luatex-nodes.tex b/doc/context/sources/general/manuals/luatex/luatex-nodes.tex
index b7b81b5a6..d3c2c06da 100644
--- a/doc/context/sources/general/manuals/luatex/luatex-nodes.tex
+++ b/doc/context/sources/general/manuals/luatex/luatex-nodes.tex
@@ -201,6 +201,26 @@ its internal link structure is correct, otherwise an error may be result.
The subtype numbers~4 and~5 belong to the \quote {of-f-ice} explanation given
elsewhere.
+These disc nodes are kind of special as at some point they also keep information
+about breakpoints and nested ligatures. The \type {pre}, \type {post} and \type
+{replace} fields at the \LUA\ end are in fact indirectly accessed and have a
+\type {prev} pointer that is not \type {nil}. This means that when you mess
+around with the head of these (three) lists, you also need to reassign them
+because that will restore the proper \type {prev} pointer, so:
+
+\starttyping
+pre = d.pre
+-- change the list starting with pre
+d.pre = pre
+\stoptyping
+
+Otherwise you can end up with an invalid internal perception of reality and
+\LUATEX\ might even decide to crash on you. It also means that running forward
+over for instance \type {pre} is ok but backward you need to stop at \type {pre}.
+And you definitely must not mess with the node that \type {prev} points to, if
+only because it is not really an node but part of the disc data structure (so
+freeing it again might crash \LUATEX).
+
\subsubsection{math nodes}
\starttabulate[|lT|l|p|]
@@ -281,11 +301,15 @@ a \type {userskip} with subtype zero).
\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 subtype \NC number \NC \showsubtypes{penalty} \NC \NR
\NC attr \NC node \NC list of attributes \NC \NR
\NC penalty \NC number \NC the penalty value \NC \NR
\stoptabulate
+The subtypes are just informative and \TEX\ itself doesn't use them. When you
+run into an \type {linebreakpenalty} you need to keep in mind that it's a
+accumulation of \type {club}, \type{widow} and other relevant penalties.
+
\subsubsection[glyphnodes]{glyph nodes}
\starttabulate[|lT|l|p|]
@@ -512,6 +536,7 @@ into a single node type with separate subtypes for differentiation.
\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
+\NC fraction \NC number \NC larger step criterium (divided by 1000) \NC \NR
\stoptabulate
\subsubsubsection{style nodes}
@@ -536,9 +561,9 @@ a trailing \type {'} to signify \quote {cramped} styles.
\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.
+Warning: never assign a node list to the \type {display}, \type {text}, \type
+{script}, or \type {scriptscript} field unless you are sure its internal link
+structure is correct, otherwise an error may be result.
\subsubsubsection{radical nodes}
@@ -551,11 +576,13 @@ correct, otherwise an error may be result.
\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
+\NC width \NC number \NC required width \NC \NR
+\NC options \NC number \NC bitset of rendering options \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.
+Warning: never assign a node list to the \type {nucleus}, \type {sub}, \type
+{sup}, \type {left}, or \type {degree} field unless you are sure its internal
+link structure is correct, otherwise an error may be result.
\subsubsubsection{fraction nodes}
@@ -566,11 +593,14 @@ error may be result.
\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
+\NC right \NC delimiter node \NC right side symbol \NC \NR
+\NC middle \NC delimiter node \NC middle symbol \NC \NR
+\NC options \NC number \NC bitset of rendering options \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.
+Warning: never assign a node list to the \type {num}, or \type {denom} field
+unless you are sure its internal link structure is correct, otherwise an error
+may be result.
\subsubsubsection{fence nodes}
@@ -579,8 +609,16 @@ sure its internal link structure is correct, otherwise an error may be result.
\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
+\NC italic \NC number \NC italic correction \NC \NR
+\NC height \NC number \NC required height \NC \NR
+\NC depth \NC number \NC required depth \NC \NR
+\NC options \NC number \NC bitset of rendering options \NC \NR
+\NC class \NC number \NC spacing related class \NC \NR
\stoptabulate
+Warning: some of these fields are used by the renderer and might get adapted in
+the process.
+
\subsection{whatsit nodes}
Whatsit nodes come in many subtypes that you can ask for by running
@@ -595,7 +633,7 @@ Whatsit nodes come in many subtypes that you can ask for by running
\stopluacode
. % period
-\subsubsection{front|-|end whatits}
+\subsubsection{front|-|end whatsits}
\subsubsubsection{open whatsits}
@@ -625,7 +663,7 @@ Whatsit nodes come in many subtypes that you can ask for by running
\NC stream \NC number \NC \TEX's stream id number \NC \NR
\stoptabulate
-\subsubsubsection{user_defined whatits}
+\subsubsubsection{user_defined whatsits}
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
@@ -677,9 +715,9 @@ The difference between \type {data} and \type {string} is that on assignment, th
\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{\DVI\ backend whatsits}
-\subsubsection{special whatits}
+\subsubsection{special whatsits}
\starttabulate[|lT|l|p|]
\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
@@ -687,9 +725,9 @@ The difference between \type {data} and \type {string} is that on assignment, th
\NC data \NC string \NC the \type {\special} information \NC \NR
\stoptabulate
-\subsubsection{\PDF\ backend whatits}
+\subsubsection{\PDF\ backend whatsits}
-\subsubsubsection{pdf_literal whatits}
+\subsubsubsection{pdf_literal whatsits}
\starttabulate[|lT|l|p|]
\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
@@ -705,9 +743,14 @@ Possible mode values are:
\NC 0 \NC setorigin \NC \NR
\NC 1 \NC page \NC \NR
\NC 2 \NC direct \NC \NR
+\NC 3 \NC raw \NC \NR
\stoptabulate
-\subsubsubsection{pdf_refobj whatits}
+The higher the number, the less checking and the more you can run into troubles.
+Especially the \type {raw} variant can produce bad \PDF\ so you can best check
+what you generate.
+
+\subsubsubsection{pdf_refobj whatsits}
\starttabulate[|lT|l|p|]
\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
@@ -715,7 +758,7 @@ Possible mode values are:
\NC objnum \NC number \NC the referenced \PDF\ object number \NC \NR
\stoptabulate
-\subsubsubsection{pdf_annot whatits}
+\subsubsubsection{pdf_annot whatsits}
\starttabulate[|lT|l|p|]
\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
@@ -727,7 +770,7 @@ Possible mode values are:
\NC data \NC string \NC the annotation data \NC \NR
\stoptabulate
-\subsubsubsection{pdf_start_link whatits}
+\subsubsubsection{pdf_start_link whatsits}
\starttabulate[|lT|l|p|]
\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
@@ -740,14 +783,14 @@ Possible mode values are:
\NC action \NC node \NC the action to perform \NC \NR
\stoptabulate
-\subsubsubsection{pdf_end_link whatits}
+\subsubsubsection{pdf_end_link whatsits}
\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}
+\subsubsubsection{pdf_dest whatsits}
\starttabulate[|lT|l|p|]
\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
@@ -763,7 +806,7 @@ Possible mode values are:
\NC objnum \NC number \NC the \PDF\ object number \NC \NR
\stoptabulate
-\subsubsubsection{pdf_action whatits}
+\subsubsubsection{pdf_action whatsits}
These are a special kind of item that only appears inside \PDF\ start link
objects.
@@ -795,7 +838,7 @@ Valid window types are:
\NC 2 \NC nonew \NC \NR
\stoptabulate
-\subsubsubsection{pdf_thread whatits}
+\subsubsubsection{pdf_thread whatsits}
\starttabulate[|lT|l|p|]
\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
@@ -809,7 +852,7 @@ Valid window types are:
\NC thread_attr \NC number \NC extra thread information \NC \NR
\stoptabulate
-\subsubsubsection{pdf_start_thread whatits}
+\subsubsubsection{pdf_start_thread whatsits}
\starttabulate[|lT|l|p|]
\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
@@ -823,14 +866,14 @@ Valid window types are:
\NC thread_attr \NC number \NC extra thread information \NC \NR
\stoptabulate
-\subsubsubsection{pdf_end_thread whatits}
+\subsubsubsection{pdf_end_thread whatsits}
\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}
+\subsubsubsection{pdf_colorstack whatsits}
\starttabulate[|lT|l|p|]
\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
@@ -840,7 +883,7 @@ Valid window types are:
\NC data \NC string \NC data \NC \NR
\stoptabulate
-\subsubsubsection{pdf_setmatrix whatits}
+\subsubsubsection{pdf_setmatrix whatsits}
\starttabulate[|lT|l|p|]
\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
@@ -848,226 +891,20 @@ Valid window types are:
\NC data \NC string \NC data \NC \NR
\stoptabulate
-\subsubsubsection{pdf_save whatits}
+\subsubsubsection{pdf_save 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{pdf_restore whatits}
+\subsubsubsection{pdf_restore 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
-\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 {get_attribute} \NC \yes \NC \yes \NC \NR
-\NC \type {find_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
@@ -1234,16 +1071,21 @@ the \TEX\ level.
This function accepts string \type {id} and \type {subtype} values as well.
-\subsubsection{\type {node.free}}
+\subsubsection{\type {node.free} and \type {node.flush_node}}
\startfunctioncall
-node.free(<node> n)
+<node> next =
+ node.free(<node> n)
+flush_node(<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.
+The \type {free} function returns the next field of the freed node, while the
+\type {flush_node} alternative returns nothing.
+
\subsubsection{\type {node.flush_list}}
\startfunctioncall
@@ -1385,7 +1227,7 @@ 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}}
+\subsubsection{\type {node.dimensions}, \type {node.rangedimensions}}
\startfunctioncall
<number> w, <number> h, <number> d =
@@ -1438,7 +1280,17 @@ example in code like this, which prints the width of the space in between the
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}.
+compare the width reported by \type {hpack} with \type {dimensions}.
+
+The second alternative saves a few lookups and can be more convenient in some
+cases:
+
+\startfunctioncall
+<number> w, <number> h, <number> d =
+ node.rangedimensions(<node> parent, <node> first)
+<number> w, <number> h, <number> d =
+ node.rangedimensions(<node> parent, <node> first, <node> last)
+\stopfunctioncall
\subsubsection{\type {node.mlist_to_hlist}}
@@ -1574,6 +1426,25 @@ See the previous section for details. The change is in the local function \type
end
\stoptyping
+\subsubsection{\type {node.traverse_char}}
+
+This iterators loops over the glyph nodes in a list. Only nodes with a subtype
+less than 256 are seen.
+
+\startfunctioncall
+<node> n =
+ node.traverse_char(<node> n)
+\stopfunctioncall
+
+\subsubsection{\type {node.has_glyph}}
+
+This function returns the first glyph or disc node in the given list:
+
+\startfunctioncall
+<node> n =
+ node.has_glyph(<node> n)
+\stopfunctioncall
+
\subsubsection{\type {node.end_of_math}}
\startfunctioncall
@@ -1680,7 +1551,7 @@ 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}}
+\subsubsection{\type {node.protect_glyphs} and \type {node.protect_glyph}}
\startfunctioncall
node.protect_glyphs(<node> n)
@@ -1688,7 +1559,8 @@ node.protect_glyphs(<node> n)
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.
+that \type {characters} will become \type {glyphs} after subtraction of 256. A
+single character can be marked by the singular call.
\subsubsection{\type {node.last_node}}
@@ -1750,6 +1622,9 @@ The next call will return 5 values (or northing when no glue is passed).
<integer> shrink_order = node.getglue(<node> n)
\stopfunctioncall
+When the second argument is false, only the width is returned (this is consistent
+with \type {tex.get}).
+
\subsubsection{\type {node.is_zero_glue}}
This function returns \type {true} when the width, stretch and shrink properties
@@ -1824,6 +1699,306 @@ attributes or attribute|-|value pairs are ignored.
If the attribute was actually deleted, returns its old value. Otherwise, returns
\type {nil}.
+\subsubsection{\type {node.slide}}
+
+This helper makes sure that the node lists is double linked and returns the found
+tail node.
+
+\startfunctioncall
+<node> tail =
+ node.slide(<node> n)
+\stopfunctioncall
+
+After some callbacks automatic sliding takes place. This feature can be turned
+off with \type {node.fix_node_lists(false)} but you better make sure then that
+you don't mess up lists. In most cases \TEX\ itself only uses \type {next}
+pointers but your other callbacks might expect proper \type {prev} pointers too.
+Future versions of \LUATEX\ can add more checking but this will not influence
+usage.
+
+\subsubsection{\type {node.check_discretionary} and \type {node.check_discretionaries}}
+
+When you fool around with disc nodes you need to be aware of the fact that they
+have a special internal data structure. As long as you reassign the fields when
+you have extended the lists it's ok because then the tail pointers get updated,
+but when you add to list without reassigning you might end up in troubles when
+the linebreak routien kicks in. You can call this function to check the list for
+issues with disc nodes.
+
+\startfunctioncall
+node.check_discretionary(<node> n)
+node.check_discretionaries(<node> head)
+\stopfunctioncall
+
+The plural variant runs over all disc nodes in a list, the singular variant
+checks one node only (it also checks if the node is a disc node).
+
+\subsubsection{\type {node.family_font}}
+
+When you pass it a proper family identifier the next helper will return the font
+currently associated with it. You can normally also access the font with the normal
+font field or getter because it will resolve the family automatically for noads.
+
+\startfunctioncall
+<integer> id =
+ node.family_font(<integer> fam)
+\stopfunctioncall
+
+\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
+
+Some accessors are used frequently and for these we provide more efficient helpers:
+
+\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 getwhd \NC returns the \type {width}, \type {height} and \type {depth} of a list, rule or
+ (unexpanded) glyph as well as glue (its spec is looked at) and unset nodes\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 \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
+\NC getbox \NC gets the given box (a list node) \NC \NR
+\stoptabulate
+
+In the direct namespace there are more such helpers and most of them are
+accompanied by setters. The getters and setters are clever enough to see what
+node is meant. We don't deal with whatsit nodes: their fields are always accessed
+by name. It doesn't make sense to add getters for all fields, we just identifier
+the most likely candidates. In complex documents, many node and fields types
+never get seen, or seen only a few times, but for instance glyphs are candidates
+for such optimization. The \type {node.direct} interface has some more helpers.
+\footnote {We can define the helpers in the node namespace with \type {getfield}
+which is about as efficient, so at some point we might provide that as module.}
+
+The \type {setdisc} helper takes three (optional) arguments plus an optional
+fourth indicating the subtype. Its \type {getdisc} takes an optional boolean;
+when its value is \type {true} the tail nodes will also be returned. The \type
+{setfont} helper takes an optional second argument, it being the character. The
+directmode setter \type {setlink} takes a list of nodes and will link them,
+thereby ignoring \type {nil} entries. The first valid node is returned (beware:
+for good reason it assumes single nodes). For rarely used fields no helpers are
+provided and there are a few that probably are used seldom too but were added for
+consistency. You can of course always define additional accessor using \type
+{getfield} and \type {setfield} with little overhead.
+
+% \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 {do_ligature_n} \NC \yes \NC \yes \NC \NR % was never documented and experimental
+\NC \type {check_discretionaries}\NC \yes \NC \yes \NC \NR
+\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 {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 {find_attribute} \NC \yes \NC \yes \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 {get_attribute} \NC \yes \NC \yes \NC \NR
+\NC \type {getattributelist} \NC \nop \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 {getcomponents} \NC \nop \NC \yes \NC \NR
+\NC \type {getdepth} \NC \nop \NC \yes \NC \NR
+\NC \type {getdir} \NC \nop \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 {getglue} \NC \yes \NC \yes \NC \NR
+\NC \type {getheight} \NC \nop \NC \yes \NC \NR
+\NC \type {getid} \NC \yes \NC \yes \NC \NR
+\NC \type {getkern} \NC \nop \NC \yes \NC \NR
+\NC \type {getlang} \NC \nop \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 {getnucleus} \NC \nop \NC \yes \NC \NR
+\NC \type {getoffsets} \NC \nop \NC \yes \NC \NR
+\NC \type {getpenalty} \NC \nop \NC \yes \NC \NR
+\NC \type {getprev} \NC \yes \NC \yes \NC \NR
+\NC \type {getproperty} \NC \yes \NC \yes \NC \NR
+\NC \type {getshift} \NC \nop \NC \yes \NC \NR
+\NC \type {getwidth} \NC \nop \NC \yes \NC \NR
+\NC \type {getwhd} \NC \nop \NC \yes \NC \NR
+\NC \type {getsub} \NC \nop \NC \yes \NC \NR
+\NC \type {getsubtype} \NC \yes \NC \yes \NC \NR
+\NC \type {getsup} \NC \nop \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_direct} \NC \nop \NC \yes \NC \NR
+\NC \type {is_glue_zero} \NC \yes \NC \yes \NC \NR
+\NC \type {is_glyph} \NC \yes \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_glyphs} \NC \yes \NC \yes \NC \NR
+\NC \type {protect_glyph} \NC \yes \NC \yes \NC \NR
+\NC \type {protrusion_skippable} \NC \yes \NC \yes \NC \NR
+\NC \type {rangedimensions} \NC \yes \NC \yes \NC \NR
+\NC \type {remove} \NC \yes \NC \yes \NC \NR
+\NC \type {set_attribute} \NC \nop \NC \yes \NC \NR
+\NC \type {setattributelist} \NC \nop \NC \yes \NC \NR
+\NC \type {setboth} \NC \nop \NC \yes \NC \NR
+\NC \type {setbox} \NC \nop \NC \yes \NC \NR
+\NC \type {setchar} \NC \nop \NC \yes \NC \NR
+\NC \type {setcomponents} \NC \nop \NC \yes \NC \NR
+\NC \type {setdepth} \NC \nop \NC \yes \NC \NR
+\NC \type {setdir} \NC \nop \NC \yes \NC \NR
+\NC \type {setdisc} \NC \nop \NC \yes \NC \NR
+\NC \type {setfield} \NC \yes \NC \yes \NC \NR
+\NC \type {setfont} \NC \nop \NC \yes \NC \NR
+\NC \type {setglue} \NC \yes \NC \yes \NC \NR
+\NC \type {setheight} \NC \nop \NC \yes \NC \NR
+\NC \type {setid} \NC \nop \NC \yes \NC \NR
+\NC \type {setkern} \NC \nop \NC \yes \NC \NR
+\NC \type {setlang} \NC \nop \NC \yes \NC \NR
+\NC \type {setleader} \NC \nop \NC \yes \NC \NR
+\NC \type {setlist} \NC \nop \NC \yes \NC \NR
+\NC \type {setnext} \NC \nop \NC \yes \NC \NR
+\NC \type {setnucleus} \NC \nop \NC \yes \NC \NR
+\NC \type {setoffsets} \NC \nop \NC \yes \NC \NR
+\NC \type {setpenalty} \NC \nop \NC \yes \NC \NR
+\NC \type {setprev} \NC \nop \NC \yes \NC \NR
+\NC \type {setproperty} \NC \nop \NC \yes \NC \NR
+\NC \type {setshift} \NC \nop \NC \yes \NC \NR
+\NC \type {setwidth} \NC \nop \NC \yes \NC \NR
+\NC \type {setwhd} \NC \nop \NC \yes \NC \NR
+\NC \type {setsub} \NC \nop \NC \yes \NC \NR
+\NC \type {setsubtype} \NC \nop \NC \yes \NC \NR
+\NC \type {setsup} \NC \nop \NC \yes \NC \NR
+\NC \type {slide} \NC \yes \NC \yes \NC \NR
+\NC \type {subtypes} \NC \yes \NC \nop \NC \NR
+\NC \type {subtype} \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_char} \NC \yes \NC \yes \NC \NR
+\NC \type {traverse_id} \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 {whatsitsubtypes} \NC \yes \NC \nop \NC \NR
+\NC \type {whatsits} \NC \yes \NC \nop \NC \NR
+\NC \type {write} \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.
+
\stopchapter
\stopcomponent
diff --git a/doc/context/sources/general/manuals/luatex/luatex-style.tex b/doc/context/sources/general/manuals/luatex/luatex-style.tex
index 26688abaf..c07dc3b76 100644
--- a/doc/context/sources/general/manuals/luatex/luatex-style.tex
+++ b/doc/context/sources/general/manuals/luatex/luatex-style.tex
@@ -286,7 +286,7 @@
\unexpanded\def\nonterminal#1>{\mathematics{\langle\hbox{\rm #1}\rangle}}
-% taco's brainwave -)
+% taco's brainwave -) .. todo: create a typing variant so that we can avoid the !crlf
\newcatcodetable\syntaxcodetable
@@ -323,6 +323,10 @@
!egroup
+\definetyping
+ [texsyntax]
+ [color=maincolor]
+
% end of wave
\setupinteraction
diff --git a/doc/context/sources/general/manuals/luatex/luatex.tex b/doc/context/sources/general/manuals/luatex/luatex.tex
index 59a969396..1613b920b 100644
--- a/doc/context/sources/general/manuals/luatex/luatex.tex
+++ b/doc/context/sources/general/manuals/luatex/luatex.tex
@@ -1,9 +1,27 @@
% macros=mkvi
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
+%
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+%
+% comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt
+% Group journal or otherwise. Thanks to the editors for corrections. Also thanks
+% to users for testing, feedback and corrections.
+
% \tex vs \type vs \syntax vs. \luatex
% \em \it \/
-% "context --nodates --nocompression luatex" can be used for comparison runs
+% "context --nodates --nocompression luatex" can be used for comparison
+% runs, not that we do it
\environment luatex-style
\environment luatex-logos
@@ -11,8 +29,8 @@
\dontcomplain
\startdocument
- [version=0.95.0,
- status=Pre-release]
+ [status=release,
+ version=1.0.5]
\component luatex-titlepage
diff --git a/doc/context/sources/general/manuals/manuals-explaining-contents.tex b/doc/context/sources/general/manuals/manuals-explaining-contents.tex
new file mode 100644
index 000000000..3e1fadabc
--- /dev/null
+++ b/doc/context/sources/general/manuals/manuals-explaining-contents.tex
@@ -0,0 +1,11 @@
+% language=uk
+
+\startcomponent manuals-explaining-contents
+
+ \starttitle[title=Contents][color=darkgray]
+
+ \placelist[chapter][criterium=text]
+
+ \stoptitle
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/manuals-explaining-cover.tex b/doc/context/sources/general/manuals/manuals-explaining-cover.tex
new file mode 100644
index 000000000..8b4f3e891
--- /dev/null
+++ b/doc/context/sources/general/manuals/manuals-explaining-cover.tex
@@ -0,0 +1,199 @@
+% language=uk
+
+% Please try to be original and don't just copy this cover page as I don't want
+% confusion and be associated with (or responsibility for the look of) similar
+% looking documents.
+
+\startenvironment manuals-explaining-cover
+
+\startsetups document:abstract
+ \framed [
+ foregroundstyle=bold,
+ foregroundcolor=white,
+ width=7.5cm,
+ align={normal,tolerant},
+ frame=off,
+ strut=no,
+ ] {
+ \getbuffer[abstract]
+ }
+\stopsetups
+
+\startMPinclusions
+
+ def DrawCoverPage (expr what) =
+
+ numeric variant ; variant := 1 ;
+
+ StartCover ;
+
+ save width, height, size, anchor, offset, colors ;
+
+ numeric width, height, size ; pair anchor, offset ; string colors[] ;
+
+ colors[1] := "\documentvariable{cover:color:1}" ;
+ colors[2] := "\documentvariable{cover:color:2}" ;
+ colors[3] := "\documentvariable{cover:color:3}" ;
+ colors[4] := "\documentvariable{cover:color:4}" ;
+ colors[5] := "\documentvariable{cover:color:5}" ;
+
+ fill CoverPage enlarged PaperBleed withcolor colors[5] ;
+
+ fill Spine bottomenlarged -.5PaperHeight withcolor colors[3] ;
+ fill Spine topenlarged -.5PaperHeight withcolor colors[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 colors[1] ;
+ fill anchored.urt (urtriangle scaled size, llcorner FrontPage) withcolor colors[2] ;
+ fill anchored.lrt (lrtriangle scaled size, ulcorner FrontPage) withcolor colors[3] ;
+ fill anchored.ulft(ultriangle scaled size, lrcorner FrontPage) withcolor colors[4] ;
+
+ fill anchored.lrt (lrtriangle scaled size, ulcorner BackPage) withcolor colors[1] ;
+ fill anchored.llft(lltriangle scaled size, urcorner BackPage) withcolor colors[3] ;
+ fill anchored.ulft(ultriangle scaled size, lrcorner BackPage) withcolor colors[2] ;
+ fill anchored.urt (urtriangle scaled size, llcorner BackPage) withcolor colors[4] ;
+
+ draw thetextext.llft(
+ textext("\bf \documentvariable{title}\hskip-.1em")
+ rotated 45 ysized .350height,
+ anchor shifted (6*offset+offset)
+ ) withcolor white ;
+ draw thetextext.llft(
+ textext("\bf \documentvariable{subtitle}")
+ rotated 45 ysized .275height,
+ anchor shifted (5*offset+offset)
+ ) withcolor white ;
+ draw thetextext.llft(
+ textext("\bf \documentvariable{author}")
+ rotated 45 ysized .200height,
+ anchor shifted (2*offset+offset)
+ ) withcolor white ;
+ draw thetextext.llft(
+ textext("\bf \documentvariable{affiliation}")
+ rotated 45 ysized .200height,
+ anchor shifted (1*offset+offset)
+ ) withcolor white ;
+
+ % for the moment
+
+ if (what = "back") or (what = "cover") :
+
+ draw
+ thetextext.top(
+ textext("\bf \documentvariable{comment}")
+ xsized 4cm,
+ lrcorner Page shifted (-3cm,1cm)
+ ) withcolor white ;
+
+ fi ;
+
+ % till here
+
+ width := BackPageWidth ;
+
+ if (what = "back") or (what = "cover") :
+
+ draw thetextext(
+ textext("\bf\setups[document:abstract]")
+ xsized .65width rotated 45,
+ center BackPage
+ ) withcolor white ;
+
+ fi ;
+
+ if what = "cover" :
+
+ draw thetextext.bot(
+ textext("\bf \documentvariable{title}\hskip-.1em")
+ rotated 90 xsized .8SpineWidth,
+ .5[ulcorner Spine,urcorner Spine] shifted (0,-1cm)
+ ) withcolor white ;
+
+ draw thetextext.top(
+ textext("\bf \documentvariable{author}")
+ rotated 90 xsized .8SpineWidth,
+ .5[llcorner Spine,lrcorner Spine] shifted (0,1cm)
+ ) withcolor white ;
+
+ fi ;
+
+ StopCover ;
+
+ if what = "front" :
+ clip currentpicture to FrontPage ;
+ elseif what = "back" :
+ clip currentpicture to BackPage ;
+ else :
+ drawboundary CoverPage ;
+ fi ;
+
+ enddef ;
+
+\stopMPinclusions
+
+\startsetups document:start
+
+ % \startcovermatter[front]
+
+ \setupbackgrounds[page][background=]
+
+ \doifmodeelse {simple} {
+
+ \startMPpage
+ DrawCoverPage("front") ;
+ \stopMPpage
+
+ } {
+
+ \startMPpage
+ DrawCoverPage("cover") ;
+ \stopMPpage
+
+ }
+
+ \page[dummy]
+
+ \setupbackgrounds[page][background=page]
+
+ \resetuserpagenumber
+
+ % \stopcovermatter
+
+\stopsetups
+
+\startsetups document:stop
+
+ \doifmodeelse {simple} {
+
+ % \startcovermatter[back]
+
+ \page
+
+ \setuppagenumbering[page=]
+
+ \setupbackgrounds[page][background=]
+
+ \page[empty,left]
+
+ \setupmakeup[doublesided=no,page=no]
+
+ \startMPpage
+ DrawCoverPage("back") ;
+ \stopMPpage
+
+ % \stopcovermatter
+
+ } {
+
+ % not needed as it's part of the cover page
+
+ }
+
+\stopsetups
+
+\stopenvironment
diff --git a/doc/context/sources/general/manuals/manuals-explaining-environment.tex b/doc/context/sources/general/manuals/manuals-explaining-environment.tex
new file mode 100644
index 000000000..f896c219b
--- /dev/null
+++ b/doc/context/sources/general/manuals/manuals-explaining-environment.tex
@@ -0,0 +1,325 @@
+\startenvironment manuals-explaining-environment
+
+\usemodule[abr-01]
+\usemodule[visual]
+\usemodule[simulate]
+\usemodule[chart]
+\usemodule[nodechart]
+
+% done
+
+\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=\directsetup{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 "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 "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 "\namedstructureuservariable{chapter}{color}" ;
+
+ 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[maincolor] [darkgray]
+
+\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]
+
+% modules
+
+\setupsorting
+ [logo]
+ [style=]
+
+\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=]
+
+% whatever
+
+\definestartstop
+ [notabene]
+ [before=\blank,
+ after=\blank,
+ style=\em]
+
+\setuphyphenation
+ [method=default]
+
+
+\startbuffer[underconstruction]
+\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
+\stopbuffer
+
+\stopenvironment
diff --git a/doc/context/sources/general/manuals/manuals-xml-environment.tex b/doc/context/sources/general/manuals/manuals-xml-environment.tex
new file mode 100644
index 000000000..5a5d9a92d
--- /dev/null
+++ b/doc/context/sources/general/manuals/manuals-xml-environment.tex
@@ -0,0 +1,385 @@
+% language=uk
+%
+% author : Hans Hagen, PRAGMA ADE, NL
+% license : Creative Commons, Attribution-NonCommercial-ShareAlike 3.0 Unported
+
+\usemodule[abr-01]
+
+\startmode[booklet]
+
+ \setuppapersize [A4][oversized]
+
+\stopmode
+
+% \setuppapersize[A4][doubleoversized,landscape]
+% \setuparranging[2UP]
+% \setuppagenumbering[alternative={singlesided,doublesided}]
+
+\setuplayout
+ [location=middle,
+ marking=on]
+
+% \logo [EXAMPLE] {eXaMpLe}
+
+\setuptabulate
+ [rulethickness=1pt,
+ rulecolor=darkgreen]
+
+\setuptables
+ [rulethickness=1pt,
+ rulecolor=darkgreen]
+
+% \usesymbols
+% [cc]
+
+\setuplayout
+ [width=middle,
+ topspace=2cm,
+ top=1cm,
+ cutspace=1.5cm, % 2.0cm
+ backspace=3.5cm,
+ header=1cm,
+ footer=1.5cm,
+ bottom=1cm,
+ leftmargin=2.5cm,
+ rightmargin=1cm,
+ margindistance=.5cm,
+ height=middle]
+
+\definelayout
+ [titlepage]
+ [topspace=2cm,
+ backspace=1.5cm,
+ bottomspace=1.5cm]
+
+\startmode[screen]
+
+ \setuppapersize
+ [S6][S6]
+
+ \setuplayout
+ [topspace=1cm,
+ bottomspace=1.5cm,
+ top=1cm,
+ header=0cm,
+ footer=.5cm,
+ bottom=1cm]
+
+ \setupinteraction
+ [state=start,
+ color=,
+ contrastcolor=,
+ style=,
+ menu=on]
+
+ \setupinteractionmenu
+ [bottom]
+ [left=\hfill,
+ middle=\hskip.25cm,
+ background=color,
+ backgroundcolor=darkgray,
+ color=lightgray,
+ contrastcolor=lightgray,
+ style=\bfb\setstrut\strut,
+ offset=2pt,
+ height=fit,
+ frame=off]
+
+ \startinteractionmenu[bottom]
+ \startbut [PreviousJump] GoBack \stopbut
+ \startbut [previouspage] Previous \stopbut
+ \startbut [nextpage] Next \stopbut
+ \startbut [CloseDocument] Exit \stopbut
+ \stopinteractionmenu
+
+\stopmode
+
+\setupbodyfont[dejavu,11pt]
+
+\definecolor [cyan] [g=.4,b=.4]
+\definecolor [magenta] [r=.4,b=.4]
+\definecolor [yellow] [r=.4,g=.4]
+\definecolor [red] [r=.4]
+\definecolor [green] [g=.4]
+\definecolor [blue] [b=.4]
+\definecolor [gray] [s=.4]
+
+\definecolor [lightgray] [s=.8]
+
+\definecolor [FillColor] [gray]
+
+\definecolor [NumberColor] [red]
+\definecolor [BannerColor] [green]
+\definecolor [AspectColor] [blue]
+
+% *rgb *rgy *rby *gby *rgc *rbc *gbc rgm rbm gbm
+% *cmy cmr cyr myr cmg cyr myg cmb cyb myb
+
+\definepalet[steps] [NumberColor=red, BannerColor=green, AspectColor=blue]
+\definepalet[mathml] [NumberColor=cyan, BannerColor=magenta,AspectColor=yellow]
+\definepalet[chemml] [NumberColor=red, BannerColor=green, AspectColor=yellow]
+\definepalet[physml] [NumberColor=red, BannerColor=blue, AspectColor=yellow]
+\definepalet[figures][NumberColor=green,BannerColor=blue, AspectColor=yellow]
+\definepalet[charts] [NumberColor=red, BannerColor=green, AspectColor=cyan]
+\definepalet[examns] [NumberColor=red, BannerColor=green, AspectColor=cyan]
+\definepalet[general][NumberColor=red, BannerColor=blue, AspectColor=cyan]
+\definepalet[tables] [NumberColor=green,BannerColor=blue, AspectColor=cyan]
+
+\setupindenting
+ [medium]
+
+\indenting
+ [yes]
+
+\defineoverlay
+ [nextpage]
+ [\overlaybutton{nextpage}]
+
+\startusableMPgraphic{cover}
+ path p, q ; color maincolor[], fillcolor ; numeric r, w, h ;
+ numeric cellwidth, cellspread, linewidth ;
+ maincolor[0] := \MPcolor{BannerColor} ;
+ maincolor[1] := \MPcolor{AspectColor} ;
+ maincolor[2] := \MPcolor{NumberColor} ;
+ fillcolor := \MPcolor{FillColor} ;
+ cellwidth := 75pt ;
+ cellspread := 50pt ;
+ linewidth := 1/10pt ;
+ w := OverlayWidth + cellwidth ;
+ h := OverlayHeight + cellwidth ;
+ q := unitsquare xyscaled (OverlayWidth,OverlayHeight) ;
+ fill unitsquare xyscaled (w,h) withcolor fillcolor ;
+ set_grid (w,h,cellwidth-cellspread,cellwidth-cellspread) ;
+ forever :
+ if new_on_grid(uniformdeviate w, uniformdeviate h) :
+ draw image (
+ p := unitsquare ;
+ r := floor(uniformdeviate 3) ;
+ fill p enlarged linewidth withcolor fillcolor ;
+ fill p withcolor maincolor[r] ;
+ draw
+ if r = 0 :
+ urcorner p -- .5[llcorner p,ulcorner p] -- lrcorner p
+ elseif r = 1 :
+ ulcorner p -- .5[lrcorner p,urcorner p] -- llcorner p
+ else :
+ urcorner p -- llcorner p
+ fi
+ withpen pencircle scaled linewidth withcolor fillcolor ;
+ )
+ scaled (cellwidth randomized cellspread)
+ shifted (dx,dy) ;
+ fi ;
+ exitif grid_full ;
+ endfor ;
+ % currentpicture := currentpicture shifted -(cellwidth,cellwidth) ;
+ % clip currentpicture to q ;
+\stopusableMPgraphic
+
+\defineoverlay
+ [cover]
+ [\useMPgraphic{cover}]
+
+\setupbackgrounds
+ [page]
+ [offset=3mm]
+
+\defineoverlay
+ [page]
+ [\reuseMPgraphic{page}]
+
+\startreusableMPgraphic{page}
+ StartPage ;
+ path p ; p :=
+ ulcorner Page --
+ llcorner Page --
+ llcorner Page shifted (BackSpace-LeftMarginDistance,0) --
+ ulcorner Page shifted (BackSpace-LeftMarginDistance,0) -- cycle ;
+ fill
+ (p enlarged PageOffset) rightenlarged -PageOffset
+ withcolor \MPcolor{FillColor} ;
+ picture t ; t := textext("\bfb \lightgray \ConTeXt\ XML") rotated 90 ;
+ setbounds t to boundingbox t enlarged ExHeight ;
+ t := image ( label.llft(t,urcorner Page )) ;
+ fill boundingbox t topenlarged PageOffset rightenlarged PageOffset withcolor \MPcolor{FillColor} ;
+ draw t ;
+ StopPage ;
+ setbounds currentpicture to boundingbox currentpicture enlarged PageOffset ;
+\stopreusableMPgraphic
+
+\setuphead
+ [section]
+ [command=\texdefinition{document:head:section},
+ color=lightgray,
+ style=\bfb,
+ before={\blank[2*big]},
+ after={\blank[2*big]},]
+
+\starttexdefinition document:head:section #1#2
+ \hbox {
+ \hskip-\marginwidth
+ \hskip-\margindistance
+ \framed [
+ width=.5\textwidth,
+ offset=2pt,
+ frame=off,
+ background=color,
+ backgroundcolor=AspectColor
+ ] {
+ \hskip.25cm
+ #2
+ \hfill
+ }
+ }
+\stoptexdefinition
+
+\setupheadertexts
+ []
+
+\setupbottom
+ [margin]
+ [color=lightgray,
+ style=\bfb]
+
+\setuptyping
+ [color=green]
+
+\setuptype
+ [color=green]
+
+\doifmodeelse {booklet} {
+
+ \setupbottomtexts
+ [margin]
+ [\setup{document:pagenumber}] []
+ [\setup{document:pagenumber}] []
+
+} {
+
+ \setupbottomtexts
+ [margin]
+ [\setup{document:pagenumber}] []
+
+}
+
+\setvariables
+ [document]
+ [title=No Title,
+ author=No Author]
+
+\startmode[atpragma]
+
+ \setvariables
+ [document]
+ [line:1=Con\TeX t XML,
+ line:2=Pragma ADE / Hasselt NL,
+ line:3=MkIV]
+
+\stopmode
+
+\startsetups document:pagenumber
+ \hbox to \marginwidth {
+ \framed [
+ width=.25\textwidth,
+ offset=2pt,
+ frame=off,
+ background=color,
+ backgroundcolor=NumberColor
+ ] {
+ \hskip.25cm
+ \documentvariable{title}
+ \hfill
+ \pagenumber
+ \hskip.25cm
+ }
+ }
+\stopsetups
+
+\startsetups document:start
+
+ \doifsomething {\documentvariable{palet}} {
+ \setuppalet[\documentvariable{palet}]
+ }
+
+ \setupbackgrounds
+ [page]
+ [background={cover,nextpage}]
+
+ \setuplayout
+ [titlepage]
+
+ \startstandardmakeup[bottomstate=stop]
+ \raggedcenter
+ \lightgray
+ \start
+ \definedfont[SansBold at 100pt]
+ \setupinterlinespace
+ \WORD{\documentvariable{title}}
+ \par
+ \stop
+ \vfilll
+ \doifsomething {\documentvariable{line:1}} {
+ \dontleavehmode\hbox{\definedfont[SansBold at 50pt]\setstrut\strut\documentvariable{line:1}}
+ }
+ \doifsomething {\documentvariable{line:2}} {
+ \vskip25pt
+ \dontleavehmode\hbox{\definedfont[SansBold at 25pt]\setstrut\strut\documentvariable{line:2}}
+ }
+ \doifsomething {\documentvariable{line:3}} {
+ \vskip25pt
+ \dontleavehmode\hbox{\definedfont[SansBold at 25pt]\setstrut\strut\documentvariable{line:3}}
+ }
+ \stopstandardmakeup
+
+ \setuplayout
+
+ \setupbackgrounds
+ [page]
+ [background={page,banner}]
+
+\stopsetups
+
+\startsetups document:stop
+
+ \definecolor[AspectColor][green]
+
+ \startsubject[title=Colofon]
+
+ This manual is part of the \CONTEXT\ distribution, and is authored and maintained by \space
+ \documentvariable{author}. \CONTEXT\ is developed at \PRAGMA, Hasselt, The Netherlands.\space
+ This manual is produced on \currentdate.
+
+ \stopsubject
+
+\stopsetups
+
+% \usemodule[set-11]
+
+% \setupframedtexts
+% [setuptext]
+% [rulethickness=1pt,
+% framecolor=green,
+% background=color,
+% backgroundcolor=lightgray]
+
+% titles:
+
+% Description
+% Structure
+% Usage
+% XML example
+% \TeX\ example
+% Configuring
+% Documentation
+
+\continueifinputfile{s-man-10.mkiv}
+
+\startdocument[title=Title,author=Author,palet=steps]
+
+ \startsection[title=Test]
+
+ \input knuth
+
+ \stopsection
+
+\stopdocument
diff --git a/doc/context/sources/general/manuals/math/math-combining.tex b/doc/context/sources/general/manuals/math/math-combining.tex
new file mode 100644
index 000000000..5cd2ccb9b
--- /dev/null
+++ b/doc/context/sources/general/manuals/math/math-combining.tex
@@ -0,0 +1,58 @@
+\environment math-layout
+
+\startcomponent math-combining
+
+\startchapter[title=Combining formulas]
+
+Multiple formulas can be combined by wrapping them:
+
+\startbuffer
+
+\fakewords{20}{30}
+
+\startformula
+ a + b = c
+\stopformula
+
+\fakewords{20}{30}
+
+\startformulas
+ \startformula
+ a + b = c
+ \stopformula
+ \startformula
+ d - e = f
+ \stopformula
+\stopformulas
+
+\fakewords{20}{30}
+
+\startformulas
+ \startformula
+ \frac{\frac{x}{y}}{b} = c
+ \stopformula
+ \startformula
+ d - e = f
+ \stopformula
+\stopformulas
+
+\fakewords{20}{30}
+\stopbuffer
+
+\typebuffer
+
+When we bump the space around formulas to \type {big} we get this:
+
+\start
+ \setupformulas[spacebefore=big,spaceafter=big]
+ \appendtoks\showmakeup[reset]\to\everymath
+ \showboxes
+ \getbuffer
+\stop
+
+The formulas get aligned on the baselline which in turn relates to the
+math axis of the formula.
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/math/math-contents.tex b/doc/context/sources/general/manuals/math/math-contents.tex
new file mode 100644
index 000000000..7d8fb05c7
--- /dev/null
+++ b/doc/context/sources/general/manuals/math/math-contents.tex
@@ -0,0 +1,11 @@
+\environment math-layout
+
+\startcomponent math-contents
+
+\starttitle[title=Contents]
+
+\placelist[chapter]
+
+\stoptitle
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/math/math-features.tex b/doc/context/sources/general/manuals/math/math-features.tex
new file mode 100644
index 000000000..3869c575e
--- /dev/null
+++ b/doc/context/sources/general/manuals/math/math-features.tex
@@ -0,0 +1,127 @@
+\environment math-layout
+
+\usemodule[fonts-features]
+
+\startcomponent math-features
+
+\startchapter[title=Features]
+
+\startsection[title=Default features]
+
+Math fonts are loaded in so called basemode, which gives them a traditional
+treatment in the engine. However, we do support features in basemode too, so
+setting them can influence what gets passed to \TEX. Also, in math mode, some
+font features (like \type {dtls} and stylistic alternates) are applied
+dynamically.
+
+The default \type {mathematics} feature set is as follows:
+
+\showfeatureset[name=mathematics]
+
+We don't discuss the exact meaning of these options here because normally you
+don't have to deal with them. If a math font demands something special, the place
+to deal with it is the related font goodie file.
+
+This feature set is the parent of two other sets: \type {mathematics-l2r} and
+\type {mathematics-r2l}:
+
+\showfeatureset[name=mathematics-l2r]
+
+This one is the same as the parent but the right|-|to|-|left variant is
+different:
+
+\showfeatureset[name=mathematics-r2l]
+
+Eventually we need size related feature sets and again we define a parent and
+direction specific ones: \type {math-text}, \type {math-script} and \type
+{math-scriptscript}.
+
+\showfeatureset[name=math-text]
+\showfeatureset[name=math-script]
+\showfeatureset[name=math-scriptscript]
+
+The left|-|to|-|right sets \type {math-*-l2r} are:
+
+\showfeatureset[name=math-text-l2r]
+\showfeatureset[name=math-script-l2r]
+\showfeatureset[name=math-scriptscript-l2r]
+
+The right|-|to|-|left sets \type {math-*-r2l} are:
+
+\showfeatureset[name=math-text-r2l]
+\showfeatureset[name=math-script-r2l]
+\showfeatureset[name=math-scriptscript-r2l]
+
+There are a few extra sets defined but these are meant for testing or virtual
+math fonts. The reason for showing these sets is to make clear that the number of
+features is minimal and that math is a real script indeed.
+
+The \type {kern} features is questionable. In traditional \TEX\ there are kerns
+indeed but in \OPENTYPE\ math kerns are not used that way because a more advanced
+kerning feature is present (and that one is currently always enabled). We used to
+set the following but these make no sense.
+
+\starttyping
+liga=yes, % (traditional) ligatures
+tlig=yes, % tex ligatures, like -- and ---
+trep=yes, % tex replacements, like the ' quote
+\stoptyping
+
+Math fonts normally have no ligatures and supporting the \TEX\ specific ones can
+actually be annoying. So, in todays \CONTEXT\ these are no longer enabled. Just
+consider the following:
+
+\startbuffer
+$- \kern0pt - \kern 0pt \mathchar"2D$
+$- \kern0pt -- \kern 0pt \mathchar"2D \mathchar"2D$
+$- \kern0pt --- \kern 0pt \mathchar"2D \mathchar"2D \mathchar"2D$
+\stopbuffer
+
+\typebuffer
+
+The \type {-} is mapped onto a minus sign and therefore several in succession
+become multiple minus signs. The \type {\mathchar"2D} will remain the character
+with that slot in the font so there we will see a hyphen. If we would enable the
+\type {tlig} feature several such characters would be combined into an endash or
+emdash. So how do we get these than? Because getting a hyphen directly involves a
+command, the same is true for its longer relatives: \type {\endash} and \type
+{\emdash}.
+
+\startlines
+\getbuffer
+\stoplines
+
+As convenience we have defined a special \type {\mathhyphen} command. Watch the
+fact that a text hyphen in math mode is a minus in math! As comparison we also
+show the plus sign.
+
+\starttabulate[||c|c|]
+\BC command \BC math \BC text \NC \NR
+\TB
+\NC \type{\mathhyphen} \NC $\mathhyphen$ \NC \mathhyphen \NC \NR
+\NC \type{\texthyphen} \NC $\texthyphen$ \NC \texthyphen \NC \NR
+\NC \type{-} \NC $-$ \NC - \NC \NR
+\NC \type{+} \NC $+$ \NC + \NC \NR
+\NC \type{\endash} \NC $\endash$ \NC \endash \NC \NR
+\NC \type{\emdash} \NC $\emdash$ \NC \emdash \NC \NR
+\stoptabulate
+
+\stoptabulate
+
+\stopsection
+
+\startsection[title=Stylistic alternates]
+
+ {\em todo}
+
+\stopsection
+
+\startsection[title=Dotless variants]
+
+ {\em todo}
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/math/math-framing-001.tex b/doc/context/sources/general/manuals/math/math-framing-001.tex
new file mode 100644
index 000000000..5081b8ad2
--- /dev/null
+++ b/doc/context/sources/general/manuals/math/math-framing-001.tex
@@ -0,0 +1,113 @@
+\setuplayout[topspace=5mm,bottomspace=5mm,height=middle,header=1cm,footer=0cm]
+
+\starttext
+
+\startbuffer[sample]
+ \enabletrackers[formulas.framed] \showboxes
+ \startformula
+ e = mc^2
+ \stopformula
+ \par
+ \startformula
+ e = mc^2
+ \stopformula
+ \startformula
+ e = mc^2
+ \stopformula
+ \startformula
+ e \dorecurse{12} { = mc^2 }
+ \stopformula
+ \startplaceformula
+ \startformula
+ e = mc^2
+ \stopformula
+ \stopplaceformula
+ \startplaceformula
+ \startformula
+ e \dorecurse{12} { = mc^2 }
+ \stopformula
+ \stopplaceformula
+\stopbuffer
+
+\startbuffer[setup-b]
+\setupformula
+ [option=frame]
+\stopbuffer
+
+\startbuffer[setup-d]
+\setupformulaframed
+ [frame=on,
+ %toffset=10pt,
+ %boffset=10pt,
+ foregroundcolor=white,
+ background=color,
+ backgroundcolor=gray]
+\stopbuffer
+
+\startbuffer[setup-c]
+\setupformula
+ [frame=number]
+\stopbuffer
+
+\startbuffer[all]
+\start
+ \typebuffer[setup-a]
+ \getbuffer[setup-a]
+ \getbuffer[sample]
+ \typebuffer[setup-b]
+ \typebuffer[setup-d]
+ \getbuffer[setup-b]
+ \getbuffer[setup-d]
+ \getbuffer[sample]
+ \typebuffer[setup-c]
+ \getbuffer[setup-c]
+ \getbuffer[sample]
+ \page
+\stop
+\stopbuffer
+
+\startbuffer
+ \startbuffer[setup-a]
+ \setupformula
+ [align=flushleft]
+ \stopbuffer
+ \getbuffer[all]
+ \startbuffer[setup-a]
+ \setupformula
+ [align=flushleft,location=left]
+ \stopbuffer
+ \getbuffer[all]
+
+ \startbuffer[setup-a]
+ \setupformula
+ [align=middle]
+ \stopbuffer
+ \getbuffer[all]
+ \startbuffer[setup-a]
+ \setupformula
+ [align=middle,location=left]
+ \stopbuffer
+ \getbuffer[all]
+
+ \startbuffer[setup-a]
+ \setupformula
+ [align=flushright]
+ \stopbuffer
+ \getbuffer[all]
+ \startbuffer[setup-a]
+ \setupformula
+ [align=flushright,location=left]
+ \stopbuffer
+ \getbuffer[all]
+\stopbuffer
+
+\getbuffer
+
+\startbuffer[setup-b]
+\setupformula
+ [option={tight,frame}]
+\stopbuffer
+
+\getbuffer
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/math/math-framing.tex b/doc/context/sources/general/manuals/math/math-framing.tex
new file mode 100644
index 000000000..b93d57f49
--- /dev/null
+++ b/doc/context/sources/general/manuals/math/math-framing.tex
@@ -0,0 +1,232 @@
+\environment math-layout
+
+\startcomponent math-framing
+
+\startchapter[title=Framing]
+
+The \type {\framed} macro is one of the core constructors in \CONTEXT\ and it's
+used all over the place. This macro is unlikely to change its behaviour and as it
+has evolved over years it comes with quite some options and some can interfere
+with the expectations one has. In general using this macro works out well but you
+need to keep an eye on using struts and alignment.
+
+\startbuffer
+\framed{$e=mc^2$}
+\stopbuffer
+
+\typebuffer
+
+The outcome of this is:
+
+\startlinecorrection \getbuffer \stoplinecorrection
+
+There is a bit of offset (that you can set) but also struts are added as can be
+seen when we visualize them:
+
+\startlinecorrection \showstruts \getbuffer \stoplinecorrection
+
+These struts can be disabled:
+
+\startbuffer
+\framed[strut=no]{$e=mc^2$}
+\stopbuffer
+
+\typebuffer
+
+Now the result is more tight.
+
+\startlinecorrection \showstruts \getbuffer \stoplinecorrection
+
+These struts are the way to get a consistent look and feel and are used
+frequently in \CONTEXT. We mention these struts because they get in the way when
+we frame a display formula. Let's first look at what happens when we
+just package a formula in a box:
+
+\startbuffer
+\vbox\bgroup
+ \startformula
+ e = mc^2
+ \stopformula
+\egroup
+\stopbuffer
+
+\typebuffer
+
+We get:
+
+\startlinecorrection \start \showmakeup \getbuffer \stop \stoplinecorrection
+
+Now there are a few properties of displaymath that one needs to keep in mind when
+messing around with them this way. First of all display math is meant to be used
+as part of the page stream. This means that spacing above and below is adapted to
+what comes before and after. It also means that, because formulas can be numbered,
+we have some settings that relate to horizontal placement.
+
+The default vertical spacing is easy to get rid of:
+
+\startbuffer
+\vbox\bgroup
+ \startformula[packed]
+ e = mc^2
+ \stopformula
+\egroup
+\stopbuffer
+
+\typebuffer
+
+This gives:
+
+\startlinecorrection \start \showmakeup \getbuffer \stop \stoplinecorrection
+
+Another handy keyword is \type {tight}:
+
+\startbuffer
+\vbox\bgroup
+ \startformula[tight]
+ e = mc^2
+ \stopformula
+\egroup
+\stopbuffer
+
+\typebuffer
+
+This gives:
+
+\startlinecorrection \start \showmakeup \getbuffer \stop \stoplinecorrection
+
+We can combine these two:
+
+\startbuffer
+\vbox\bgroup
+ \startformula[packed,tight]
+ e = mc^2
+ \stopformula
+\egroup
+\stopbuffer
+
+\typebuffer
+
+This gives:
+
+\startlinecorrection \start \showmakeup \getbuffer \stop \stoplinecorrection
+
+Just in case you wonder why we need to go through these troubles: keep in mind
+that we are wrapping something (math) that normally goes in a vertical list with
+text above and below.
+
+The \type {packed} and \type {tight} options can help when we want to wrap
+a formula in a frame:
+
+\startbuffer
+\framed
+ [strut=no]
+ {
+ \startformula[packed,tight]
+ e = mc^2
+ \stopformula
+ }
+\stopbuffer
+
+\typebuffer
+
+which renders as:
+
+\startlinecorrection \getbuffer \stoplinecorrection
+
+There is a dedicated math framed instance that is tuned to give better results
+and automatically switches to math mode:
+
+\startbuffer
+\mframed {
+ e = mc^2
+}
+\stopbuffer
+
+\typebuffer
+
+becomes:
+
+\startlinecorrection \getbuffer \stoplinecorrection
+
+Framing a formula is also supported as a option, where the full power of framed can
+be applied to the formula. We will illustrate this in detail on the next pages. For this
+we use the following sample:
+
+\typefile{math-framing-001.tex}
+
+In \in {figure} [framing-flushleft], \in [framing-middle] \in {and}
+[framing-flushright] you see some combinations. You can run this example on your
+machine and see the details.
+
+\startplacefigure[location=page,reference=framing-flushleft,title={Framed formulas flushed left.}]
+ \startcombination[2*2]
+ {\typesetfile[math-framing-001.tex][page=01,height=.45\textheight]} {\tttf right + flushleft}
+ {\typesetfile[math-framing-001.tex][page=02,height=.45\textheight]} {\tttf right + flushleft}
+ {\typesetfile[math-framing-001.tex][page=07,height=.45\textheight]} {\tttf left + flushleft + tight}
+ {\typesetfile[math-framing-001.tex][page=08,height=.45\textheight]} {\tttf left + flushleft + tight}
+ \stopcombination
+\stopplacefigure
+
+\startplacefigure[location=page,reference=framing-middle,title={Framed formulas centered.}]
+ \startcombination[2*2]
+ {\typesetfile[math-framing-001.tex][page=03,height=.45\textheight]} {\tttf right + middle}
+ {\typesetfile[math-framing-001.tex][page=04,height=.45\textheight]} {\tttf right + middle}
+ {\typesetfile[math-framing-001.tex][page=09,height=.45\textheight]} {\tttf left + middle + tight}
+ {\typesetfile[math-framing-001.tex][page=10,height=.45\textheight]} {\tttf left + middle + tight}
+ \stopcombination
+\stopplacefigure
+
+\startplacefigure[location=page,reference=framing-flushright,title={Framed formulas flushed right.}]
+ \startcombination[2*2]
+ {\typesetfile[math-framing-001.tex][page=05,height=.45\textheight]} {\tttf right + flushright}
+ {\typesetfile[math-framing-001.tex][page=06,height=.45\textheight]} {\tttf right + flushright}
+ {\typesetfile[math-framing-001.tex][page=11,height=.45\textheight]} {\tttf left + flushright + tight}
+ {\typesetfile[math-framing-001.tex][page=12,height=.45\textheight]} {\tttf left + flushright + tight}
+ \stopcombination
+\stopplacefigure
+
+With each formula class a framed variants is automatically created:
+
+\startbuffer
+\defineformula
+ [foo]
+
+\setupformulaframed
+ [foo]
+ [frame=on,
+ framecolor=red]
+
+\startfooformula[frame]
+ e=mc^2
+\stopfooformula
+\stopbuffer
+
+\typebuffer
+
+This time you get a red frame:
+
+\getbuffer
+
+You can also frame the number, as in:
+
+\startbuffer
+\setupformulaframed[framecolor=red,frame=on,offset=1ex]
+\setupformula[option=frame,color=blue]
+\setupformula[numbercommand={\inframed[framecolor=green]}]
+
+\startplaceformula
+ \startformula
+ 2 + 2 = 2x
+ \stopformula
+\stopplaceformula
+\stopbuffer
+
+\typebuffer
+
+The boxes get properly aligned:
+
+\start \showboxes \getbuffer \stop
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/math/math-introduction.tex b/doc/context/sources/general/manuals/math/math-introduction.tex
new file mode 100644
index 000000000..f5d241004
--- /dev/null
+++ b/doc/context/sources/general/manuals/math/math-introduction.tex
@@ -0,0 +1,20 @@
+\environment math-layout
+
+\startcomponent math-introduction
+
+\startchapter[title=Introduction]
+
+This manual is not a systematic discussion about math in \CONTEXT\ but more a
+collection of wrap|-|ups. The file also serves as testcase. The content can
+change over time and can also serve as a trigger for discussions on the mailing
+list. Suggestions are welcome.
+
+\startlines
+Hans Hagen
+Hasselt NL
+% May 2016
+\stoplines
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/math/math-layout.tex b/doc/context/sources/general/manuals/math/math-layout.tex
new file mode 100644
index 000000000..92ced8f22
--- /dev/null
+++ b/doc/context/sources/general/manuals/math/math-layout.tex
@@ -0,0 +1,59 @@
+\startenvironment math-layout
+
+\switchtobodyfont [modern]
+\switchtobodyfont [dejavu]
+\switchtobodyfont [cambria]
+\switchtobodyfont[lucidaot]
+\switchtobodyfont [xits]
+
+\setupbodyfont
+ [pagella]
+
+\setupwhitespace
+ [big]
+
+\setuppagenumbering
+ [alternative=doublesided]
+
+\setuplayout
+ [backspace=2cm,
+ width=middle,
+ cutspace=2cm,
+ topspace=2cm,
+ header=2cm,
+ height=middle,
+ footer=0pt,
+ bottomspace=2cm]
+
+\setuplayout
+ [backspace=2cm,
+ topspace=2cm,
+ header=2cm,
+ height=middle,
+ width=middle]
+
+\setuphead
+ [chapter]
+ [header=high,
+ style=\bfc,
+ color=darkmagenta]
+
+\setuphead
+ [section]
+ [style=\bfb,
+ color=darkmagenta]
+
+\setuphead
+ [subsection]
+ [style=\bfa,
+ color=darkmagenta]
+
+\usemodule[abr-02]
+
+\usemodule[x][setups-basics]
+
+\usemodule[visual]
+
+\loadsetups[i-context]
+
+\stopenvironment
diff --git a/doc/context/sources/general/manuals/math/math-mkiv.tex b/doc/context/sources/general/manuals/math/math-mkiv.tex
new file mode 100644
index 000000000..f36b1032d
--- /dev/null
+++ b/doc/context/sources/general/manuals/math/math-mkiv.tex
@@ -0,0 +1,64 @@
+% language=uk
+
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
+%
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+%
+% comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt
+% Group journal or otherwise. Thanks to the editors for corrections. Also thanks
+% to users for testing, feedback and corrections.
+
+\environment math-layout
+
+\startproduct math-mkiv
+
+\startdocument
+
+\component math-titlepage
+
+\startfrontmatter
+ \component math-contents
+ \component math-introduction
+\stopfrontmatter
+
+\startbodymatter
+ \component math-spacing
+ \component math-framing
+ \component math-numbering
+ \component math-combining
+ \component math-features
+ \component math-tricks
+\stopbodymatter
+
+\stopdocument
+
+\stopproduct
+
+% when we compare these tables with the one that the ff loader produces we notice
+% some differences: this is because (deduced from source) that ff does some kind
+% of interpolation for missing heights for the last kern (for n=2 adding 100 and
+% for adding 1 the max height) ... this is probably a side effect if missing specs
+% here we don't do that
+% \enabledirectives[fontgoodies.mathkerning]
+
+% \startTEXpage[offset=2mm]
+% \startcombination[4*2]
+% {\hbox to 50pt{\hss\showboxes\switchtobodyfont [modern]$V_i^i = W_i^i$\hss}} {\infofont modern}
+% {\hbox to 50pt{\hss\showboxes\switchtobodyfont [cambria]$V_i^i = W_i^i$\hss}} {\infofont cambria}
+% {\hbox to 50pt{\hss\showboxes\switchtobodyfont[lucidaot]$V_i^i = W_i^i$\hss}} {\infofont lucida}
+% {\hbox to 50pt{\hss\showboxes\switchtobodyfont [dejavu]$V_i^i = W_i^i$\hss}} {\infofont dejavu}
+% {\hbox to 50pt{\hss\showboxes\switchtobodyfont [pagella]$V_i^i = W_i^i$\hss}} {\infofont pagella}
+% {\hbox to 50pt{\hss\showboxes\switchtobodyfont [termes]$V_i^i = W_i^i$\hss}} {\infofont termes}
+% {\hbox to 50pt{\hss\showboxes\switchtobodyfont [bonum]$V_i^i = W_i^i$\hss}} {\infofont bonum}
+% {\hbox to 50pt{\hss\showboxes\switchtobodyfont [schola]$V_i^i = W_i^i$\hss}} {\infofont schola}
+% \stopcombination
+% \stopTEXpage
diff --git a/doc/context/sources/general/manuals/math/math-numbering.tex b/doc/context/sources/general/manuals/math/math-numbering.tex
new file mode 100644
index 000000000..64f766628
--- /dev/null
+++ b/doc/context/sources/general/manuals/math/math-numbering.tex
@@ -0,0 +1,74 @@
+\environment math-layout
+
+\startcomponent math-numbering
+
+\startchapter[title=Numbering]
+
+Numbering equations can be a bit of a mess. Formuals can be unnumbers, numbered,
+numbered with an associated reference. Numbers can go on the while formula and on
+the rows in an alignment. Combine that with positioning left or right and left or
+righ taligned formulas and the picture gets complicated. When something turns out
+wrong, just let me know and the respective branch in the code can be adapted. Here
+are some examples:
+
+\startbuffer
+\startplaceformula[a]
+ \startformula
+ (1)
+ \stopformula
+\stopplaceformula
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer
+\startplaceformula[b]
+ \startformula
+ \startalignment
+ \NC 1 \NC = \NR
+ \NC 2 \NC = (2) \NR
+ \NC 3 \NC = \NR
+ \stopalignment
+ \stopformula
+\stopplaceformula
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer
+\startplaceformula[c]
+ \startformula
+ \startalignment
+ \NC 1 \NC = (3) \NR[x]
+ \NC 2 \NC = \NR
+ \NC 3 \NC = (4) \NR[y]
+ \stopalignment
+ \stopformula
+\stopplaceformula
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer
+\startplaceformula[d]
+ \startformula
+ (5)
+ \stopformula
+\stopplaceformula
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer
+\startplaceformula[e]
+ \startformula
+ (6)
+ \stopformula
+\stopplaceformula
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/math/math-spacing-001.tex b/doc/context/sources/general/manuals/math/math-spacing-001.tex
new file mode 100644
index 000000000..a0ccda449
--- /dev/null
+++ b/doc/context/sources/general/manuals/math/math-spacing-001.tex
@@ -0,0 +1,73 @@
+\doifmodeelse {with-struts} {
+ \def\Line{\dontleavehmode{\showstruts\dorecurse{18}{x \strut x }}}
+} {
+ \def\Line{\dontleavehmode{\showstruts\dorecurse{18}{x x }}}
+}
+
+\setuplayout
+ [width=middle,
+ height=middle,
+ backspace=1mm,
+ topspace=1cm]
+
+\setupbodyfont
+ [17.3pt]
+
+\starttext
+
+\Line
+
+\startformula
+ x
+\stopformula
+
+\Line
+
+\startformula
+ y
+\stopformula
+
+\Line
+
+\startformula
+ \strut x
+\stopformula
+
+\Line
+
+\startformula \startalign
+ \NC c - a = \NC b \NR
+ \NC d + c - b = \NC a \NR
+\stopalign \stopformula
+
+\Line
+
+\startformula \startalign
+ \NC c - a = \NC b \NR
+ \NC d + c - b = \NC a \NR
+\stopalign \stopformula
+
+\Line
+
+\startformula
+\mframed
+ [offset=1mm,loffset=3mm,roffset=3mm] {
+ a + b = c
+ }
+\stopformula
+
+\Line
+
+\startformula
+\mframed
+ [offset=1mm,loffset=3mm,roffset=3mm] {
+ \startalign
+ \NC c - a = \NC b \NR
+ \NC d + c - b = \NC a \NR
+ \stopalign
+ }
+\stopformula
+
+\Line
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/math/math-spacing.tex b/doc/context/sources/general/manuals/math/math-spacing.tex
new file mode 100644
index 000000000..3412a3abc
--- /dev/null
+++ b/doc/context/sources/general/manuals/math/math-spacing.tex
@@ -0,0 +1,397 @@
+\environment math-layout
+
+\startcomponent math-spacing
+
+\startchapter[title=Vertical spacing]
+
+The low level way to input inline math in \TEX\ is
+
+\starttyping
+$ e = mc^2 $
+\stoptyping
+
+while display math can be entered like:
+
+\starttyping
+$$ e = mc^2 $$
+\stoptyping
+
+The inline method is still valid, but for display math the \type {$$} method
+should not be used. This has to do with the fact that we want to control spacing
+in a consistent way. In \CONTEXT\ the vertical spacing model is rather stable
+although in \MKIV\ the implementation is quite different. It has always been a
+challenge to let this mechanism work well with space round display formulas. This
+has to do with the fact that (in the kind of documents that we have to produce)
+interaction with already present spacing is somewhat tricky.
+
+Of course much can be achieved in \TEX\ but in \CONTEXT\ we need to have control
+over the many mechanisms that can interact. Given the way \TEX\ handles space
+around display math there is no real robust solution possible that gives visually
+consistent space in all cases so that is why we basically disable the existing
+spacing model. Disabling is easier in \LUATEX\ and recent versions of \MKIV\ have
+been adapted to that.
+
+In pure \TEX\ what happens is this:
+
+\startbuffer
+$$ x $$
+\stopbuffer
+
+\typebuffer \par \start \showboxes \getbuffer \par \stop
+
+A horizontal box (visualized by the thin rule on its baseline) get added which
+triggers a baselineskip. Then the formula is put below it. We can get rid of that
+box with \type {\noindent}:
+
+\startbuffer
+\noindent $$ x $$
+\stopbuffer
+
+\typebuffer \par \start \showboxes \getbuffer \par \stop
+
+In addition (not shown here) vertical space is added before and after the formula
+and left- and rightskip on the edges. In fact typesetting display math goes like this:
+
+\startitemize[packed]
+ \startitem
+ typeset the formula using display mode and wrap it in a box
+ \stopitem
+ \startitem
+ add an equation number, if possible in the same line, otherwise on a line
+ below
+ \stopitem
+ \startitem
+ in the process center the formula using the available display width and
+ required display indentation
+ \stopitem
+ \startitem
+ add vertical space above and below (depending also in displays being
+ short in relation to the previous line
+ \stopitem
+ \startitem
+ at the same time also add penalties that determine the break across
+ pages
+ \stopitem
+\stopitemize
+
+Apart from the spacing around the formula and the equation number, typesetting is
+not different from:
+
+\starttyping
+\hbox {$ \displaystyle x $}
+\stoptyping
+
+So this is what we will use by default in \CONTEXT\ in order to better control
+spacing as spacing around math is a sensitive issue. Because math itself can have
+a narrow band, for instance a lone $x$, or relative much depth, as with $y$, or
+both depth and height as in $(1,2)$ and $x^2 + y_2$ and because a preceding line
+can have no or little depth and a following line little height, the visual
+appearance can become inconsistent. The default approach is to force consistent
+spacing, but when needed we can implement variants.
+
+Spacing around display math is set up with \type {\setupformulas}:
+
+\starttyping
+ \setupformulas
+ [spacebefore=big,
+ spaceafter=big]
+\stoptyping
+
+When the whitespace is larger that setting wins because as usual the larger
+of blanks or whitespace wins.
+
+% \showdefinition[setupformula]
+% \showdefinition[setupmathematics]
+
+In \in {figures} [whitespace-no], \in {figures} [whitespace-medium] \in {and}
+[whitespace-big] we see how things interact. We show lines with and without
+maximum line height and depth (enforced by struts) alongside.
+
+% no whitespace
+
+\startbuffer[demo-1]
+\disablemode[with-struts]
+\showmakeup
+\setupformulas[spacebefore=none,spaceafter=none]
+\setupwhitespace[none]
+\input math-spacing-001.tex
+\stopbuffer
+
+\startbuffer[demo-2]
+\enablemode[with-struts]
+\showmakeup
+\setupformulas[spacebefore=none,spaceafter=none]
+\setupwhitespace[none]
+\input math-spacing-001.tex
+\stopbuffer
+
+\startbuffer[demo-3]
+\disablemode[with-struts]
+\showmakeup
+\setupformulas[spacebefore=medium,spaceafter=medium]
+\setupwhitespace[none]
+\input math-spacing-001.tex
+\stopbuffer
+
+\startbuffer[demo-4]
+\enablemode[with-struts]
+\showmakeup
+\setupformulas[spacebefore=medium,spaceafter=medium]
+\setupwhitespace[none]
+\input math-spacing-001.tex
+\stopbuffer
+
+\startplacefigure[location=page,reference=whitespace-no,title={No whitespace.}]
+ \startcombination[2*2]
+ {\typesetbuffer[demo-1][height=.45\textheight]} {\tttf natural + none + ws none}
+ {\typesetbuffer[demo-2][height=.45\textheight]} {\tttf strut + none + ws none}
+ {\typesetbuffer[demo-3][height=.45\textheight]} {\tttf natural + medium + ws none}
+ {\typesetbuffer[demo-4][height=.45\textheight]} {\tttf strut + medium + ws none}
+ \stopcombination
+\stopplacefigure
+
+% whitespace medium same as medium spacing around math
+
+\startbuffer[demo-1]
+\disablemode[with-struts]
+\showmakeup
+\setupformulas[spacebefore=none,spaceafter=none]
+\setupwhitespace[medium]
+\input math-spacing-001.tex
+\stopbuffer
+
+\startbuffer[demo-2]
+\enablemode[with-struts]
+\showmakeup
+\setupformulas[spacebefore=none,spaceafter=none]
+\setupwhitespace[medium]
+\input math-spacing-001.tex
+\stopbuffer
+
+\startbuffer[demo-3]
+\disablemode[with-struts]
+\showmakeup
+\setupformulas[spacebefore=medium,spaceafter=medium]
+\setupwhitespace[medium]
+\input math-spacing-001.tex
+\stopbuffer
+
+\startbuffer[demo-4]
+\enablemode[with-struts]
+\showmakeup
+\setupformulas[spacebefore=medium,spaceafter=medium]
+\setupwhitespace[medium]
+\input math-spacing-001.tex
+\stopbuffer
+
+\startplacefigure[location=page,reference=whitespace-medium,title={Whitespace the same as display spacing.}]
+ \startcombination[2*2]
+ {\typesetbuffer[demo-1][height=.45\textheight]} {\tttf natural + none + ws medium}
+ {\typesetbuffer[demo-2][height=.45\textheight]} {\tttf strut + none + ws medium}
+ {\typesetbuffer[demo-3][height=.45\textheight]} {\tttf natural + medium + ws medium}
+ {\typesetbuffer[demo-4][height=.45\textheight]} {\tttf strut + medium + ws medium}
+ \stopcombination
+\stopplacefigure
+
+% whitespace big wins from medium spacing around math
+
+\startbuffer[demo-1]
+\disablemode[with-struts]
+\showmakeup
+\setupformulas[spacebefore=none,spaceafter=none]
+\setupwhitespace[big]
+\input math-spacing-001.tex
+\stopbuffer
+
+\startbuffer[demo-2]
+\enablemode[with-struts]
+\showmakeup
+\setupformulas[spacebefore=none,spaceafter=none]
+\setupwhitespace[big]
+\input math-spacing-001.tex
+\stopbuffer
+
+\startbuffer[demo-3]
+\disablemode[with-struts]
+\showmakeup
+\setupformulas[spacebefore=medium,spaceafter=medium]
+\setupwhitespace[big]
+\input math-spacing-001.tex
+\stopbuffer
+
+\startbuffer[demo-4]
+\enablemode[with-struts]
+\showmakeup
+\setupformulas[spacebefore=medium,spaceafter=medium]
+\setupwhitespace[big]
+\input math-spacing-001.tex
+\stopbuffer
+
+\startplacefigure[location=page,reference=whitespace-big,title={Whitespace larger than display spacing.}]
+ \startcombination[2*2]
+ {\typesetbuffer[demo-1][height=.45\textheight]} {\tttf natural + none + ws big}
+ {\typesetbuffer[demo-2][height=.45\textheight]} {\tttf strut + none + ws big}
+ {\typesetbuffer[demo-3][height=.45\textheight]} {\tttf natural + medium + ws big}
+ {\typesetbuffer[demo-4][height=.45\textheight]} {\tttf strut + medium + ws big}
+ \stopcombination
+\stopplacefigure
+
+Because we want to have control over the placement of the formula number but also
+want to be able to align the formula with the left or right edge of the text
+area, we don't use the native display handler by default. We still have a way to
+force this, but this is only for testing purposes. By default a formula is placed
+centered relative to the current text, including left and right margins.
+
+\startbuffer
+\fakewords{20}{40}
+
+\startitemize
+ \startitem
+ \fakewords{20}{40}
+ \placeformula
+ \startformula
+ \fakeformula
+ \stopformula
+ \stopitem
+ \startitem
+ \fakewords{20}{40}
+ \stopitem
+\stopitemize
+
+\fakewords{20}{40}\epar
+\stopbuffer
+
+\typebuffer
+
+\start \getbuffer \stop
+
+In the next examples we explicitly align formulas to the left (\type
+{flushleft}), center (\type {middle}) and right (\type {flushright}):
+
+\startbuffer[demo]
+\setupformulas[align=flushleft]
+\startformula\fakeformula\stopformula
+\setupformulas[align=middle]
+\startformula\fakeformula\stopformula
+\setupformulas[align=flushright]
+\startformula\fakeformula\stopformula
+\stopbuffer
+
+\typebuffer[demo]
+
+The three cases show up as:
+
+\start \getbuffer[demo] \stop
+
+You can also set a left and|/|or right margin:
+
+\startbuffer[setting]
+\setupformulas
+ [leftmargin=3cm,
+ rightmargin=3cm]
+\stopbuffer
+
+\start \getbuffer[setting] \getbuffer[demo] \stop
+
+With formula numbers these formulas look as follows:
+
+\startbuffer[demo]
+\setupformulas[align=flushleft]
+\placeformula \startformula\fakeformula\stopformula
+\setupformulas[align=middle]
+\placeformula \startformula\fakeformula\stopformula
+\setupformulas[align=flushright]
+\placeformula \startformula\fakeformula\stopformula
+\stopbuffer
+
+\start \getbuffer[demo] \stop
+
+and the same with margins:
+
+\start \getbuffer[setting] \getbuffer[demo] \stop
+
+\page
+
+When the \type {margin} option is set to \type {standard} or \type {yes} the
+current indentation (when set) or left skip is added to the left side.
+
+\startbuffer
+\setupformulas[align=flushleft]
+\startformula \fakeformula \stopformula
+\placeformula \startformula \fakeformula \stopformula
+\stopbuffer
+
+\typebuffer \start \getbuffer \stop
+
+\startbuffer
+\setupformulas[align=flushleft,margin=standard]
+\startformula \fakeformula \stopformula
+\placeformula \startformula \fakeformula \stopformula
+\stopbuffer
+
+\typebuffer \start \getbuffer \stop
+
+The distance between the formula and the number is only applied when the formula
+is left or right aligned.
+
+\startbuffer
+\setupformulas[align=flushright,distance=0pt]
+\startformula \fakeformula \stopformula
+\placeformula \startformula \fakeformula \stopformula
+\stopbuffer
+
+\typebuffer \start \getbuffer \stop
+
+\startbuffer
+\setupformulas[align=flushright,distance=2em]
+\startformula \fakeformula \stopformula
+\placeformula \startformula \fakeformula \stopformula
+\stopbuffer
+
+\typebuffer \start \getbuffer \stop
+
+\stopsection
+
+\startsection[title=Scripts]
+
+Spacing is a trade off because there is no way to predict all usage. Of course a
+font can be very detailed in where italic correction is to be applied and how
+advanced stepwise kerns are used, but not many fonts have extensive information.
+Here are some differences in rendering. In \OPENTYPE\ the super- and subscript of
+an integral are moved right and left half of the italic correction.
+
+\startlinecorrection
+ \startcombination[6*1]
+ {\switchtobodyfont [modern]\math{F_j = \int\nolimits _a^b}} {Latin Modern}
+ {\switchtobodyfont [pagella]\math{F_j = \int\nolimits _a^b}} {Pagella}
+ {\switchtobodyfont [dejavu]\math{F_j = \int\nolimits _a^b}} {Dejavu}
+ {\switchtobodyfont [cambria]\math{F_j = \int\nolimits _a^b}} {Cambria}
+ {\switchtobodyfont[lucidaot]\math{F_j = \int\nolimits _a^b}} {Lucida OT}
+ {\switchtobodyfont [xits]\math{F_j = \int\nolimits _a^b}} {Xits}
+ \stopcombination
+\stoplinecorrection
+
+\stopsection
+
+\startsection[title=Bad fonts]
+
+There might be fonts out there where the italic correction is supposed to be
+added to the width of a glyph. In that case the following trick can be tried:
+
+\starttyping
+\definefontfeature[mathextra][italicwidths=yes] % fix latin modern
+\stoptyping
+
+in which case the following might look better:
+
+\starttyping
+$\left|V\right| = \left|W\right|$
+\stoptyping
+
+Of course better is to fix the font.
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/math/math-titlepage.tex b/doc/context/sources/general/manuals/math/math-titlepage.tex
new file mode 100644
index 000000000..1d1ac306a
--- /dev/null
+++ b/doc/context/sources/general/manuals/math/math-titlepage.tex
@@ -0,0 +1,29 @@
+\startcomponent math-titlepage
+
+\startMPpage
+
+ StartPage;
+ fill Page withcolor .35magenta ;
+ picture p ; p := image ( draw outlinetext.b
+ ("\textdollar")
+ (withcolor .35green)
+ (withcolor .5yellow withpen pencircle scaled .1) ;
+ ) ;
+ p := p xysized(PaperWidth - 20pt,PaperHeight - 20pt ) ;
+ p := p shifted - llcorner p shifted (10pt,10pt) ;
+ draw p ;
+ picture p ; p := image ( draw outlinetext.b
+ ("math")
+ (withcolor .35green)
+ (withcolor .5yellow withpen pencircle scaled .2) ;
+ ) ;
+ p := p xsized(PaperWidth/2 - 40pt) ;
+ p := p shifted - llcorner p shifted (10pt,10pt) ;
+ draw p shifted (PaperWidth/2 + 20pt,20pt);
+ StopPage;
+
+\stopMPpage
+
+\page[empty] \setuppagenumber[number=1]
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/mathml/envexamp.tex b/doc/context/sources/general/manuals/mathml/envexamp.tex
new file mode 100644
index 000000000..99bc72b8a
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/envexamp.tex
@@ -0,0 +1,291 @@
+\startenvironment envexamp
+
+% this is an old style. only slightly updated to mkiv
+
+\usemodule[abr-02,mathml]
+
+\setupdocument % defaults
+ [color=darkred,
+ columns=2,
+ title=MathML in \ConTeXt]
+
+\startmode[atpragma]
+ \setupbodyfont[lucidanova]
+\stopmode
+
+\startnotmode[atpragma]
+ \setupbodyfont[palatino]
+\stopnotmode
+
+\setupbodyfont
+ [10pt]
+
+\definepapersize
+ [mml]
+ [width=20cm,
+ height=20cm]
+
+\setuppapersize
+ [mml]
+ [mml]
+
+\definecolor[lightgray] [s=.85]
+\definecolor[pagegray] [s=.8]
+\definecolor[mediumgray][s=.5]
+\definecolor[darkgray] [s=.4]
+\definecolor[darkred] [r=.65]
+\definecolor[darkgreen] [g=.65]
+\definecolor[darkblue] [b=.65]
+\definecolor[darkyellow][r=.65,g=.65]
+
+\definepalet
+ [XMLcolorpretty]
+ [ prettyone=darkred,
+ prettytwo=darkgreen,
+ prettythree=darkblue,
+ prettyfour=darkgray]
+
+\definecolor
+ [maincolor]
+ [\documentvariable{color}]
+
+\setuptyping
+ [option=XML]
+
+\setupwhitespace
+ [big]
+
+\setupinteraction
+ [state=start,
+ menu=on,
+ color=maincolor,
+ contrastcolor=maincolor]
+
+\setuplayout
+ [backspace=1cm,
+ topspace=1cm,
+ bottomspace=7.5mm,
+ header=0pt,
+ footer=0pt,
+ bottomdistance=.5cm,
+ bottom=1cm,
+ height=17cm,
+ width=middle]
+
+\defineoverlay [mmlpage] [\uniqueMPgraphic{mmlpage}]
+\defineoverlay [mmltitle] [\uniqueMPgraphic{mmltitle}]
+\defineoverlay [formula] [\uniqueMPgraphic{formula}]
+
+\startuseMPgraphic{mml}
+ z1 = llcorner Page ;
+ z2 = .5[lrcorner Page,urcorner Page] ;
+ z3 = ulcorner Page ;
+ fill
+ Page
+ withcolor \MPcolor{lightgray} ;
+ fill
+ z1 shifted (1cm,0) --
+ z2 shifted (0,-.5cm) --
+ lrcorner Page -- cycle
+ withcolor \MPcolor{pagegray} ;
+ fill
+ z3 shifted (1cm,0) --
+ z2 shifted (0,+.5cm) --
+ urcorner Page -- cycle
+ withcolor \MPcolor{pagegray} ;
+\stopuseMPgraphic
+
+\startuniqueMPgraphic{mmlpage}
+ StartPage ;
+ \includeMPgraphic{mml}
+ fill
+ llcorner Page --
+ .5[lrcorner Page,urcorner Page] --
+ ulcorner Page -- cycle
+ withcolor \MPcolor{pagegray} ;
+ Page := Page enlarged -.5cm ;
+ StopPage ;
+\stopuniqueMPgraphic
+
+\startuniqueMPgraphic{mmltitle}
+ StartPage ;
+ \includeMPgraphic{mml}
+ fill z1--z2--z3--cycle withcolor \MPcolor{maincolor} ;
+ picture p ;
+ p := textext("\documentvariable{title}") ;
+ p := p xsized (.75length(z2-z1)) ;
+ p := p rotatedaround(center p, angle z2) ;
+ p := p shifted -center p shifted .5[z1,z2] ;
+ p := p shifted ((unitvector(.5[z1,z2]) rotated 90)*1cm) ;
+ draw p withcolor \MPcolor{lightgray} ;
+ Page := Page enlarged -.5cm ;
+ StopPage ;
+\stopuniqueMPgraphic
+
+\startuniqueMPgraphic{formula}
+ draw
+ OverlayBox
+ withpen pensquare scaled 2mm
+ withcolor \MPcolor{lightgray} ;
+ fill
+ OverlayBox
+ withcolor \MPcolor{mediumgray} ;
+\stopuniqueMPgraphic
+
+\setupbottom
+ [style=bold,
+ color=darkgray]
+
+\setuplist
+ [section]
+ [alternative=a,
+ interaction=all,
+ pagenumber=no,
+ width=0pt,
+ style=\bfb,
+ color=darkgray,
+ contrastcolor=darkgray,
+ before={\blank[2*big]},
+ after={\blank\startcolumns[n=5]\placelist[subsection]\stopcolumns}]
+
+\setuplist
+ [subsection]
+ [alternative=f,
+ interaction=all]
+
+\setuphead
+ [section]
+ [page=yes,
+ style=\bfd,
+ color=darkgray,
+ number=no,
+ after={\blank[2*big]\startcolumns[n=5]\placelist[subsection]\stopcolumns\page}]
+
+\setuphead
+ [subsection]
+ [after=,
+ placehead=empty]
+
+\setuphead
+ [subject]
+ [style=\bfb,
+ color=darkgray,
+ after={\blank[2*big]}]
+
+\setupinteractionmenu
+ [bottom]
+ [state=start,
+ frame=off,
+ left=\hskip3cm,
+ middle=\quad]
+
+\startinteractionmenu[bottom]
+ \startbut [content] content \stopbut
+ \startbut [colofon] colofon \stopbut
+ \startbut [index] index \stopbut
+ \startbut [PreviousJump] go back \stopbut
+ \startbut [previouspage] \bfa-- \stopbut
+ \startbut [nextpage] \bfa+ \stopbut
+ \hfill
+ \starttxt
+ \color[darkgray]{\markcontent{\getmarking[section]: }\getmarking[subsection]\removemarkedcontent}
+ \stoptxt
+\stopinteractionmenu
+
+\starttexdefinition unexpanded ShowFormula #1#2#3
+ \showXMLformula{\rawstructurelistuservariable{filename}.xml}
+\stoptexdefinition
+
+\starttexdefinition unexpanded showXMLformula #1
+ \framed [
+ strut=no,
+ background=formula,
+ foregroundcolor=white,
+ frame=off,align=normal,
+ width=\hsize
+ ] {
+ \vbox {
+ \processXMLfile{#1}\endgraf
+ }
+ }
+\stoptexdefinition
+
+\starttexdefinition unexpanded showXMLsample #1
+ \page
+ \bgroup
+ \startbaselinecorrection
+ \showXMLformula{#1.xml}
+ \stopbaselinecorrection
+ \startsubsection[reference=#1,title=#1,marking=#1][filename=#1]
+ \switchtobodyfont
+ [8pt]
+ \startcolumns[balance=no,n=\getvariable{document}{columns}]
+ \typefile{#1.xml}
+ \stopcolumns
+ \vfill
+ \page
+ \stopsubsection
+ \egroup
+\stoptexdefinition
+
+\startsetups[document:start]
+
+ \setupbackgrounds
+ [page]
+ [background=mmltitle]
+
+ \startstandardmakeup
+ \setupalign[left]
+ \bgroup
+ \darkgray \bfd \setupinterlinespace
+ Examples \vfill
+ Hans Hagen\par
+ PRAGMA ADE\par
+ \vskip-\dp\strutbox
+ \vskip-1cm
+ \egroup
+ \vskip\dp\strutbox
+ \vskip1pt
+ \stopstandardmakeup
+
+ \setupbackgrounds
+ [page]
+ [background=mmlpage]
+
+ \startsubject[reference=content,title={Content}]
+ \placelist[section]
+ \stopsubject
+
+ \startsubject[reference=colofon,titlr={Colofon}]
+ \getbuffer[colofon]
+ \stopsubject
+
+\stopsetups
+
+\startsetups[document:stop]
+
+ \page
+
+ \pagereference[index]
+
+ \setuplist
+ [section]
+ [alternative=a,
+ before={\testpage[5]},
+ after={\blank[medium]\placelist[subsection]}]
+
+ \setuplist
+ [subsection]
+ [alternative=vertical,
+ before=\startbaselinecorrection,
+ after=\stopbaselinecorrection\blank,
+ color=,
+ contrastcolor=,
+ command=\ShowFormula,
+ interaction=all]
+
+ \placelist[section][criterium=text]
+
+\stopsetups
+
+\stopenvironment
diff --git a/doc/context/sources/general/manuals/mathml/mmlexamp.tex b/doc/context/sources/general/manuals/mathml/mmlexamp.tex
new file mode 100644
index 000000000..0beb211ad
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/mmlexamp.tex
@@ -0,0 +1,124 @@
+% language=uk
+
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
+%
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+%
+% comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt
+% Group journal or otherwise. Thanks to the editors for corrections. Also thanks
+% to users for testing, feedback and corrections.
+
+\environment envexamp
+
+\startbuffer[colofon]
+
+This document shows a few formulas coded in \MATHML\ and typeset by \CONTEXT. The
+examples are taken from an old copy of \quote {Handbook of Chemistry and Physics}
+as well as \quote {Wiskunde voor het HBO (R.~van Asselt et al.)}. We assume no
+responsibility for the coding being 100\% all correct.
+
+These examples are typeset using the default settings. There are several ways to
+influence the look and feel of a formula. Details on how to process \MATHML\ can
+be found in the \XML\ related documentation that comes with \CONTEXT.
+
+You can get more information on \CONTEXT\ at our website, in \TEX\ usergroup
+publications and in (the archives of) the \CONTEXT\ mailing list.
+
+\blank[2*big]
+
+\startlines
+Hans Hagen
+Hasselt, January 2001 / June 2008 / June 2015
+\goto{www.pragma-ade.com}[url(http://www.pragma-ade.com)]
+\stoplines
+
+\stopbuffer
+
+\startdocument
+ [color=darkred,
+ columns=2,
+ title=MathML in \ConTeXt]
+
+\section{Derivatives}
+
+\showXMLsample {pc-d-001}
+\showXMLsample {pc-d-002}
+\showXMLsample {pc-d-003}
+\showXMLsample {pc-d-004}
+\showXMLsample {pc-d-005}
+\showXMLsample {pc-d-006}
+\showXMLsample {pc-d-007}
+\showXMLsample {pc-d-008}
+\showXMLsample {pc-d-009}
+\showXMLsample {pc-d-010}
+\showXMLsample {pc-d-011}
+\showXMLsample {pc-d-043}
+\showXMLsample {pc-d-051}
+
+\section{Integrals}
+
+\showXMLsample {pc-i-022}
+\showXMLsample {pc-i-380}
+
+\section{Series}
+
+\showXMLsample {pc-s-001}
+\showXMLsample {pc-s-002}
+\showXMLsample {pc-s-003}
+\showXMLsample {wh-s-001}
+\showXMLsample {wh-s-002}
+
+\section{Logs}
+
+\showXMLsample {wh-l-001}
+\showXMLsample {wh-l-002}
+\showXMLsample {wh-l-003}
+\showXMLsample {wh-l-004}
+
+\section{Goniometrics}
+
+\showXMLsample {wh-g-001}
+\showXMLsample {wh-g-002}
+\showXMLsample {wh-g-003}
+\showXMLsample {wh-g-004}
+\showXMLsample {wh-g-005}
+\showXMLsample {wh-g-006}
+\showXMLsample {wh-g-007}
+\showXMLsample {wh-g-008}
+\showXMLsample {wh-g-009}
+\showXMLsample {wh-g-010}
+\showXMLsample {wh-g-011}
+\showXMLsample {wh-g-012}
+\showXMLsample {wh-g-013}
+\showXMLsample {wh-g-014}
+\showXMLsample {wh-g-015}
+\showXMLsample {wh-g-016}
+
+% \section{Openmath}
+
+% \showXMLsample {openmath-1001}
+% \showXMLsample {openmath-1002}
+% \showXMLsample {openmath-1003}
+% \showXMLsample {openmath-1004}
+% \showXMLsample {openmath-1005}
+% \showXMLsample {openmath-1006}
+
+% \showXMLsample {openmath-2001}
+% \showXMLsample {openmath-2002}
+% \showXMLsample {openmath-2003}
+% \showXMLsample {openmath-2004}
+% \showXMLsample {openmath-2005}
+% \showXMLsample {openmath-2006}
+% \showXMLsample {openmath-2007}
+% \showXMLsample {openmath-2008}
+
+\stopdocument
diff --git a/doc/context/sources/general/manuals/mathml/mmlprime.tex b/doc/context/sources/general/manuals/mathml/mmlprime.tex
new file mode 100644
index 000000000..811ba376b
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/mmlprime.tex
@@ -0,0 +1,6053 @@
+% language=uk
+
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
+%
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+%
+% comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt
+% Group journal or otherwise. Thanks to the editors for corrections. Also thanks
+% to users for testing, feedback and corrections.
+
+% \setupbackend[export=yes]
+
+\usemodule[abr-02,mathml,math-coverage,asciimath]
+
+% \enabletrackers[xml.entities]
+
+% \showframe
+
+\setupindenting
+ [medium,next,yes]
+
+\setupinteraction
+ [state=start,
+ color=,
+ style=]
+
+\placebookmarks
+ [chapter,section]
+
+% was: \doifelsemode {atpragma} { } { }
+
+\doifelsefontpresent {LucidaBrightOT.otf} {
+ \setupbodyfont[lucidaot,10pt]
+ \definefontsynonym[NiceBold][Handwriting]
+} {
+ \setupbodyfont[pagella,11pt]
+ \definefontsynonym[NiceBold][SerifBold]
+}
+
+\definefont[ChapterFont][NiceBold*default at 32pt]
+\definefont[SectionFont][NiceBold*default sa 1.2]
+\definefont[FormulaFont][NiceBold*default sa 1.0]
+
+\setuplayout
+ [topspace=15mm,
+ backspace=15mm,
+ header=10mm,
+ headerdistance=5mm,
+ footer=10mm,
+ footerdistance=5mm,
+ width=middle,
+ height=middle]
+
+\setuppagenumbering
+ [alternative=doublesided]
+
+\setuphead
+ [chapter]
+ [alternative=middle,
+ number=no,
+ style=ChapterFont,
+ color=darkred,
+ after={\blank[3*big]},
+ header=high,
+ footer=startofchapter]
+
+\setuphead
+ [section]
+ [command=\SectionCommand,
+ style=SectionFont,
+ textcolor=darkred,
+ after={\blank[big]}]
+
+\setuphead
+ [subsection]
+ [command=\SubSectionCommand,
+ style=SectionFont,
+ textcolor=darkred,
+ after={\blank[big]}]
+
+\unexpanded\def\SectionCommand#1#2%
+ {\darkblue<--\enspace\ifconditional\headshownumber\enspace#1\quad\fi#2\enspace-->}
+
+\unexpanded\def\SubSectionCommand#1#2%
+ {\darkblue<?\enspace\ifconditional\headshownumber#1\quad\fi#2\enspace ?>}
+
+\setuplayout
+ [style=\hw]
+
+\setuppagenumbering
+ [color=darkblue]
+
+\setupheader
+ [color=darkblue]
+
+\setupfooter
+ [color=darkblue]
+
+\setuplinewidth
+ [1pt]
+
+\setuptabulate
+ [rulecolor=darkblue]
+
+\setuptables
+ [rulecolor=darkblue]
+
+\setupfootertexts
+ [chapter]
+
+\definetext
+ [startofchapter]
+ [footer][pagenumber]
+
+\definestartstop
+ [mmlelement]
+ [style=\it]
+
+\definestartstop
+ [attvalue]
+ [style=\it]
+
+\definestartstop
+ [entity]
+ [style=\it,
+ left=\textampersand,
+ right=;]
+
+\setuplist
+ [chapter]
+ [interaction=all,
+ alternative=b,
+ aligntitle=yes,
+ textstyle=bold,
+ numberstyle=bold,
+ textcolor=darkblue,
+ numbercolor=darkblue,
+ after=\blank]
+
+\setuplist
+ [section]
+ [interaction=all,
+ alternative=b,
+ maxwidth=.8\hsize,
+ aligntitle=yes]
+
+\definetabulate
+ [directives]
+ [| T l | T l | T l | l |]
+
+\definetabulate
+ [attributes]
+ [| T l | T l | l | l |]
+
+\definetabulate
+ [mathmlattributes]
+ [| B l w(2.5cm) T CT{darkred} | T l | c | p |]
+
+\starttabulatehead[mathmlattributes]
+ \FL
+\stoptabulatehead
+
+\starttabulatetail[mathmlattributes]
+ \LL
+\stoptabulatetail
+
+\starttexdefinition unexpanded ExampleLine #1
+ \noindentation % \dontleavehmode
+ \type[color=darkblue]{#1}\quad\quad\asciimath{#1}
+ \blank[big]
+\stoptexdefinition
+
+
+\setupformulas
+ [way=bytext]
+
+% isolated content
+
+\startbuffer[derivates]
+ \showXMLfile {derivate}{pc-d-001}
+ \showXMLfile {derivate}{pc-d-002}
+ \showXMLfile {derivate}{pc-d-003}
+ \showXMLfile {derivate}{pc-d-004}
+ \showXMLfile {derivate}{pc-d-005}
+ \showXMLfile {derivate}{pc-d-006}
+ \showXMLfile {derivate}{pc-d-007}
+ \showXMLfile {derivate}{pc-d-008}
+ \showXMLfile {derivate}{pc-d-009}
+ \showXMLfile {derivate}{pc-d-010}
+ \showXMLfile {derivate}{pc-d-011}
+ \showXMLfile {derivate}{pc-d-043}
+ %showXMLfile {derivate}{pc-d-051}
+\stopbuffer
+
+\startbuffer[integrals]
+ \showXMLfile {integral}{pc-i-022}
+ \showXMLfile {integral}{pc-i-061}
+ \showXMLfile {integral}{pc-i-380}
+\stopbuffer
+
+\startbuffer[series]
+ \showXMLfile {serie}{pc-s-001}
+ \showXMLfile {serie}{pc-s-002}
+ \showXMLfile {serie}{pc-s-003}
+ \showXMLfile {serie}{wh-s-001}
+ \showXMLfile {serie}{wh-s-002}
+\stopbuffer
+
+\startbuffer[logs]
+ \showXMLfile {log}{wh-l-001}
+ \showXMLfile {log}{wh-l-002}
+ \showXMLfile {log}{wh-l-003}
+ \showXMLfile {log}{wh-l-004}
+\stopbuffer
+
+\startbuffer[goniometrics]
+ \showXMLfile {gonio}{wh-g-001}
+ \showXMLfile {gonio}{wh-g-002}
+ \showXMLfile {gonio}{wh-g-003}
+ \showXMLfile {gonio}{wh-g-004}
+ \showXMLfile {gonio}{wh-g-005}
+ \showXMLfile {gonio}{wh-g-006}
+ \showXMLfile {gonio}{wh-g-007}
+ \showXMLfile {gonio}{wh-g-008}
+ \showXMLfile {gonio}{wh-g-009}
+ \showXMLfile {gonio}{wh-g-010}
+ \showXMLfile {gonio}{wh-g-011}
+ \showXMLfile {gonio}{wh-g-012}
+ \showXMLfile {gonio}{wh-g-013}
+ \showXMLfile {gonio}{wh-g-014}
+ \showXMLfile {gonio}{wh-g-015}
+ \showXMLfile {gonio}{wh-g-016}
+\stopbuffer
+
+\startbuffer[statistics]
+ \showXMLfile {statistic}{wh-o-001}
+ \showXMLfile {statistic}{wh-o-002}
+ \showXMLfile {statistic}{wh-o-003}
+\stopbuffer
+
+\startbuffer[matrices]
+ \showXMLfile {matrix}{wh-m-001}
+ \showXMLfile {matrix}{wh-m-002}
+\stopbuffer
+
+% buffers voor de presentational MathML attributes
+
+\startbuffer[mi-mn]
+ \startmathmlattributes
+ \NC mi, mn \NC class, id, style \NC -- \NC \NC\NR
+ \NC \NC dir \NC -- \NC \NC\NR
+ \NC \NC href \NC -- \NC \NC\NR
+ \NC \NC mathbackground \NC -- \NC \NC\NR
+ \NC \NC mathcolor \NC -- \NC \NC\NR
+ \NC \NC mathsize \NC -- \NC \NC\NR
+ \NC \NC mathvariant \NC -- \NC \NC\NR
+ \stopmathmlattributes
+\stopbuffer
+
+\startbuffer[mo]
+ \startmathmlattributes
+ \NC mo \NC accent \NC -- \NC \NC\NR
+ \NC \NC class, id, style \NC -- \NC \NC\NR
+ \NC \NC dir \NC -- \NC \NC\NR
+ \NC \NC fence \NC -- \NC \NC\NR
+ \NC \NC form \NC -- \NC \NC\NR
+ \NC \NC href \NC -- \NC \NC\NR
+ \NC \NC largeop \NC -- \NC \NC\NR
+ \NC \NC lspace \NC -- \NC \NC\NR
+ \NC \NC mathbackground \NC -- \NC \NC\NR
+ \NC \NC mathcolor \NC -- \NC \NC\NR
+ \NC \NC mathsize \NC -- \NC \NC\NR
+ \NC \NC mathvariant \NC -- \NC \NC\NR
+ \NC \NC maxsize \NC + \NC If stretchy is true, this attribute specifies the maximum size of the operator. Allowed values are: \quote{infinity} or an arbitrary length. \NC\NR
+ \NC \NC minsize \NC -- \NC \NC\NR
+ \NC \NC movablelimits \NC -- \NC \NC\NR
+ \NC \NC rspace \NC -- \NC \NC\NR
+ \NC \NC separator \NC -- \NC \NC\NR
+ \NC \NC stretchy \NC -- \NC \NC\NR
+ \NC \NC symmetric \NC -- \NC \NC\NR
+ \stopmathmlattributes
+\stopbuffer
+
+\startbuffer[mrow]
+ \startmathmlattributes
+ \NC mrow \NC class, id, style \NC -- \NC \NC\NR
+ \NC \NC dir \NC -- \NC \NC\NR
+ \NC \NC href \NC -- \NC \NC\NR
+ \NC \NC mathbackground \NC -- \NC \NC\NR
+ \NC \NC mathcolor \NC -- \NC \NC\NR
+ \stopmathmlattributes
+\stopbuffer
+
+\startbuffer[msub]
+ \startmathmlattributes
+ \NC msub \NC class, id, style \NC -- \NC \NC\NR
+ \NC \NC href \NC -- \NC \NC\NR
+ \NC \NC mathbackground \NC -- \NC \NC\NR
+ \NC \NC mathcolor \NC -- \NC \NC\NR
+ \NC \NC subscriptshift \NC -- \NC \NC\NR
+ \stopmathmlattributes
+\stopbuffer
+
+\startbuffer[msup]
+ \startmathmlattributes
+ \NC msup \NC class, id, style \NC -- \NC \NC\NR
+ \NC \NC href \NC -- \NC \NC\NR
+ \NC \NC mathbackground \NC -- \NC \NC\NR
+ \NC \NC mathcolor \NC -- \NC \NC\NR
+ \NC \NC superscriptshift \NC -- \NC \NC\NR
+ \stopmathmlattributes
+\stopbuffer
+
+\startbuffer[msubsup]
+ \startmathmlattributes
+ \NC msubsup \NC class, id, style \NC -- \NC \NC\NR
+ \NC \NC href \NC -- \NC \NC\NR
+ \NC \NC mathbackground \NC -- \NC \NC\NR
+ \NC \NC mathcolor \NC -- \NC \NC\NR
+ \NC \NC subscriptshift \NC -- \NC \NC\NR
+ \NC \NC superscriptshift \NC -- \NC \NC\NR
+ \stopmathmlattributes
+\stopbuffer
+
+\startbuffer[mfrac]
+ \startmathmlattributes
+ \NC mfrac \NC bevelled \NC + \NC Specifies the way the fraction is displayed. If true, the fraction line is bevelled, which means that numerator and denominator are displayed side by side and separated by a slash (/). \NC\NR
+ \NC \NC class, id, style \NC -- \NC \NC\NR
+ \NC \NC denomalign \NC -- \NC \NC\NR
+ \NC \NC href \NC -- \NC \NC\NR
+ \NC \NC linethickness \NC + \NC The thickness of the horizontal fraction line. The default value is medium, but thin, thick, and other values can be set. \NC\NR
+ \NC \NC mathbackground \NC -- \NC \NC\NR
+ \NC \NC mathcolor \NC -- \NC \NC\NR
+ \NC \NC numalign \NC -- \NC \NC\NR
+ \stopmathmlattributes
+\stopbuffer
+
+\startbuffer[mfenced]
+ \startmathmlattributes
+ \NC mfenced \NC class, id, style \NC -- \NC \NC\NR
+ \NC \NC close \NC + \NC A string for the closing delimiter. The default value is \quote{)} and any white space is trimmed. \NC\NR
+ \NC \NC href \NC -- \NC \NC\NR
+ \NC \NC mathbackground \NC -- \NC \NC\NR
+ \NC \NC mathcolor \NC -- \NC \NC\NR
+ \NC \NC open \NC + \NC A string for the opening delimiter. The default value is \quote{(} and any white space is trimmed. \NC\NR
+ \NC \NC separators \NC + \NC A sequence of zero or more characters to be used for different separators, optionally divided by white space, which is ignored. The default value is \quote{,}. \NC\NR
+ \stopmathmlattributes
+\stopbuffer
+
+\startbuffer[msqrt-mroot]
+ \startmathmlattributes
+ \NC msqrt, mroot \NC class, id, style \NC -- \NC \NC\NR
+ \NC \NC href \NC -- \NC \NC\NR
+ \NC \NC mathbackground \NC -- \NC \NC\NR
+ \NC \NC mathcolor \NC -- \NC \NC\NR
+ \stopmathmlattributes
+\stopbuffer
+
+\startbuffer[mtext]
+ \startmathmlattributes
+ \NC mtext \NC class, id, style \NC -- \NC \NC\NR
+ \NC \NC dir \NC -- \NC \NC\NR
+ \NC \NC href \NC -- \NC \NC\NR
+ \NC \NC mathbackground \NC -- \NC \NC\NR
+ \NC \NC mathcolor \NC -- \NC \NC\NR
+ \NC \NC mathsize \NC -- \NC \NC\NR
+ \NC \NC mathvariant \NC -- \NC \NC\NR
+ \stopmathmlattributes
+\stopbuffer
+
+\startbuffer[mover]
+ \startmathmlattributes
+ \NC mover \NC accent \NC -- \NC \NC\NR
+ \NC \NC align \NC -- \NC \NC\NR
+ \NC \NC class, id, style \NC -- \NC \NC\NR
+ \NC \NC href \NC -- \NC \NC\NR
+ \NC \NC mathbackground \NC -- \NC \NC\NR
+ \NC \NC mathcolor \NC -- \NC \NC\NR
+ \stopmathmlattributes
+\stopbuffer
+
+\startbuffer[munder]
+ \startmathmlattributes
+ \NC munder \NC accentunder \NC -- \NC \NC\NR
+ \NC \NC align \NC -- \NC \NC\NR
+ \NC \NC class, id, style \NC -- \NC \NC\NR
+ \NC \NC href \NC -- \NC \NC\NR
+ \NC \NC mathbackground \NC -- \NC \NC\NR
+ \NC \NC mathcolor \NC -- \NC \NC\NR
+ \stopmathmlattributes
+\stopbuffer
+
+\startbuffer[munderover]
+ \startmathmlattributes
+ \NC munderover \NC accent \NC -- \NC \NC\NR
+ \NC \NC accentunder \NC -- \NC \NC\NR
+ \NC \NC align \NC -- \NC \NC\NR
+ \NC \NC class, id, style \NC -- \NC \NC\NR
+ \NC \NC href \NC -- \NC \NC\NR
+ \NC \NC mathbackground \NC -- \NC \NC\NR
+ \NC \NC mathcolor \NC -- \NC \NC\NR
+ \stopmathmlattributes
+\stopbuffer
+
+\startbuffer[ms]
+ \startmathmlattributes
+ \NC ms \NC class, id, style \NC -- \NC \NC\NR
+ \NC \NC dir \NC -- \NC \NC\NR
+ \NC \NC lquote \NC + \NC The opening quote character (depends on dir) to enclose the content. The default value is \type{"}. \NC\NR
+ \NC \NC href \NC -- \NC \NC\NR
+ \NC \NC mathbackground \NC -- \NC \NC\NR
+ \NC \NC mathcolor \NC -- \NC \NC\NR
+ \NC \NC mathsize \NC -- \NC \NC\NR
+ \NC \NC mathvariant \NC -- \NC \NC\NR
+ \NC \NC rquote \NC + \NC The closing quote mark (depends on dir) to enclose the content. The default value is \type{"}. \NC\NR
+ \stopmathmlattributes
+\stopbuffer
+
+\startbuffer[menclose]
+ \startmathmlattributes
+ \NC menclose \NC class, id, style \NC -- \NC \NC\NR
+ \NC \NC href \NC -- \NC \NC\NR
+ \NC \NC mathbackground \NC -- \NC \NC\NR
+ \NC \NC mathcolor \NC -- \NC \NC\NR
+ \NC \NC notation \NC + \NC A list of notations, separated by white space, to apply to the child elements. The symbols are each drawn as if the others are not present, and therefore may overlap. Supported values are:
+ longdiv, actuarial, radiacal, rule ({\em private}), box downdiagonalstrike, roundedbox updiagonalstrike, circle verticalstrike horizontalstrike, right bottom horizontalstrike, etc. \NC\NR
+ \stopmathmlattributes
+\stopbuffer
+
+\startbuffer[merror]
+ \startmathmlattributes
+ \NC merror \NC class, id, style \NC -- \NC \NC\NR
+ \NC \NC href \NC -- \NC \NC\NR
+ \NC \NC mathbackground \NC -- \NC \NC\NR
+ \NC \NC mathcolor \NC -- \NC \NC\NR
+ \stopmathmlattributes
+\stopbuffer
+
+\startbuffer[mmultiscripts]
+ \startmathmlattributes
+ \NC mmultiscripts \NC class, id, style \NC -- \NC \NC\NR
+ \NC \NC href \NC -- \NC \NC\NR
+ \NC \NC mathbackground \NC -- \NC \NC\NR
+ \NC \NC mathcolor \NC -- \NC \NC\NR
+ \NC \NC subscriptshift \NC -- \NC \NC\NR
+ \NC \NC superscriptshift \NC -- \NC \NC\NR
+ \stopmathmlattributes
+\stopbuffer
+
+\startbuffer[mspace]
+ \startmathmlattributes
+ \NC mspace \NC class, id, style \NC -- \NC \NC\NR
+ \NC \NC depth \NC -- \NC \NC\NR
+ \NC \NC height \NC -- \NC \NC\NR
+ \NC \NC linebreak \NC -- \NC \NC\NR
+ \NC \NC mathbackground \NC -- \NC \NC\NR
+ \NC \NC spacing \NC -- \NC The desired width of the space. \NC\NR % AFO: bestaat attribuut echt?
+ \NC \NC width \NC -- \NC The desired width of the space. \NC\NR
+ \stopmathmlattributes
+\stopbuffer
+
+\startbuffer[mphantom]
+ \startmathmlattributes
+ \NC mphantom \NC class, id, style \NC -- \NC \NC\NR
+ \NC \NC mathbackground \NC -- \NC \NC\NR
+ \stopmathmlattributes
+\stopbuffer
+
+\startbuffer[mpadded]
+ \startmathmlattributes
+ \NC mpadded \NC class, id, style \NC -- \NC \NC\NR
+ \NC \NC depth \NC -- \NC \NC\NR
+ \NC \NC height \NC -- \NC \NC\NR
+ \NC \NC href \NC -- \NC \NC\NR
+ \NC \NC lspace \NC -- \NC \NC\NR
+ \NC \NC mathbackground \NC -- \NC \NC\NR
+ \NC \NC mathcolor \NC -- \NC \NC\NR
+ \NC \NC voffset \NC -- \NC \NC\NR
+ \NC \NC width \NC -- \NC \NC\NR
+ \stopmathmlattributes
+\stopbuffer
+
+\startbuffer[mtable]
+ \startmathmlattributes
+ \NC mtable \NC align \NC -- \NC \NC\NR
+ \NC \NC alignmentscope \NC -- \NC \NC\NR
+ \NC \NC class, id, style \NC -- \NC \NC\NR
+ \NC \NC columnalign \NC + \NC Specifies the horizontal alignment of the cells. Multiple values separated by space are allowed and apply to the corresponding columns (e.g. \type{columnalign="left right center"}). Possible values are: left, center (default) and right. \NC\NR
+ \NC \NC columnlines \NC -- \NC \NC\NR
+ \NC \NC columnspacing \NC + \NC Specifies the space between table columns. \NC\NR
+ \NC \NC columnwidth \NC -- \NC \NC\NR
+ \NC \NC displaystyle \NC -- \NC \NC\NR
+ \NC \NC equalcolumns \NC -- \NC \NC\NR
+ \NC \NC equalrows \NC -- \NC \NC\NR
+ \NC \NC frame \NC -- \NC \NC\NR
+ \NC \NC framespacing \NC -- \NC \NC\NR
+ \NC \NC groupalign \NC -- \NC \NC\NR
+ \NC \NC href \NC -- \NC \NC\NR
+ \NC \NC mathbackground \NC + \NC The background color. \NC\NR
+ \NC \NC mathcolor \NC + \NC The text color. \NC\NR
+ \NC \NC minlabelspacing \NC -- \NC \NC\NR
+ \NC \NC rowalign \NC -- \NC \NC\NR
+ \NC \NC rowlines \NC -- \NC \NC\NR
+ \NC \NC rowspacing \NC + \NC Specifies the space between table rows. \NC\NR
+ \NC \NC side \NC -- \NC \NC\NR
+ \NC \NC width \NC -- \NC \NC\NR
+ \stopmathmlattributes
+\stopbuffer
+
+\startbuffer[mtr-mlabeledtr]
+ \startmathmlattributes
+ \NC mtr, labeledtr \NC class, id, style \NC -- \NC \NC\NR
+ \NC \NC columnalign \NC + \NC Overrides the horizontal alignment of cells specified by <mtable> for this row. \NC\NR
+ \NC \NC groupalign \NC -- \NC \NC\NR
+ \NC \NC href \NC -- \NC \NC\NR
+ \NC \NC mathbackground \NC + \NC The background color. \NC\NR
+ \NC \NC mathcolor \NC + \NC The text color. \NC\NR
+ \NC \NC rowalign \NC -- \NC \NC\NR
+ \stopmathmlattributes
+\stopbuffer
+
+\startbuffer[mtd]
+ \startmathmlattributes
+ \NC mtd \NC class, id, style \NC -- \NC \NC\NR
+ \NC \NC columnalign \NC -- \NC \NC\NR
+ \NC \NC columnspan \NC -- \NC \NC\NR
+ \NC \NC frame \NC -- \NC Specifies whether the cell gets a frame. \NC\NR % AFO: wordt niet genoemd in Mozilla overview
+ \NC \NC groupalign \NC -- \NC \NC\NR
+ \NC \NC href \NC -- \NC \NC\NR
+ \NC \NC mathbackground \NC -- \NC \NC\NR
+ \NC \NC mathcolor \NC -- \NC \NC\NR
+ \NC \NC rowalign \NC -- \NC \NC\NR
+ \NC \NC rowspan \NC -- \NC \NC\NR
+ \stopmathmlattributes
+\stopbuffer
+
+\startbuffer[malignmark]
+ \startmathmlattributes
+ \NC malignmark \NC class, id, style \NC -- \NC \NC\NR
+ \NC \NC edge \NC -- \NC \NC\NR
+ \stopmathmlattributes
+\stopbuffer
+
+\startbuffer[mglyph]
+ \startmathmlattributes
+ \NC mglyph \NC alt \NC + \NC This attribute defines the alternative text describing the image. \NC\NR
+ \NC \NC class, id, style \NC -- \NC \NC\NR
+ \NC \NC height \NC -- \NC \NC\NR
+ \NC \NC href \NC -- \NC \NC\NR
+ \NC \NC mathbackground \NC -- \NC \NC\NR
+ \NC \NC src \NC -- \NC \NC\NR
+ \NC \NC valign \NC -- \NC \NC\NR
+ \NC \NC width \NC -- \NC \NC\NR
+ \stopmathmlattributes
+\stopbuffer
+
+\startbuffer[mstyle]
+ \startmathmlattributes
+ \NC mstyle \NC dir \NC -- \NC \NC\NR
+ \NC \NC decimalpoint \NC -- \NC \NC\NR
+ \NC \NC displaystyle \NC -- \NC \NC\NR
+ \NC \NC infixlinebreakstyle \NC -- \NC \NC\NR
+ \NC \NC scriptlevel \NC + \NC Controls mostly the font-size. The higher the scriptlevel, the smaller the font size. This attribute accepts a non-negative integer, as well as a \quote{+} or a \quote{--} sign, which increments or decrements the current value. \NC\NR
+ \NC \NC scriptminsize \NC -- \NC \NC\NR
+ \NC \NC scriptsizemultiplier \NC -- \NC \NC\NR
+ \stopmathmlattributes
+\stopbuffer
+
+% some helpers
+
+\startxmlsetups xml:mmlprime
+ \xmlsetsetup {\xmldocument} {document} {xml:mmlprime:document}
+ \xmlsetsetup {\xmldocument} {textref} {xml:mmlprime:textref}
+\stopxmlsetups
+
+\xmlregistersetup{xml:mmlprime}
+
+\startxmlsetups xml:mmlprime:document
+ \blank \start
+ \xmlflush{#1}
+ \stop \blank
+\stopxmlsetups
+
+\startxmlsetups xml:mmlprime:textref
+ \in {\xmlflush{#1}} [\xmlatt{#1}{label}]
+\stopxmlsetups
+
+% redefine to use lua and mkiv xml instead of slower mkii
+
+\startluacode
+ local gsub = string.gsub
+ local mapping = {
+ [";"] = "{{\\darkblue\\string;}}",
+ ["&"] = "{{\\ttsl\\darkblue\\string&}}", -- otherwise "et"
+ ["/"] = "{{\\darkblue\\string/}}",
+ ["<"] = "{{\\darkblue\\string<}}",
+ [">"] = "{{\\darkblue\\string>}}",
+ }
+ function document.filterxmltitlestuff(name)
+ local data = io.loaddata(name) or ""
+ data = gsub(data,"<math[^>]*>","<math>")
+ data = gsub(data,"[%s ]+"," ")
+ data = gsub(data,"(.)",mapping)
+ context(data)
+ end
+\stopluacode
+
+\starttexdefinition unexpanded showXMLfileA #1#2
+ \ignorespaces
+ \ctxlua{document.filterxmltitlestuff("#2.xml")}
+ \removeunwantedspaces
+ \space
+ \ignorespaces
+\stoptexdefinition
+
+\startluacode
+ function document.filenumber(str)
+ context(string.match(str,"([1-9][0-9]*)$"))
+ end
+\stopluacode
+
+\starttexdefinition unexpanded showXMLfileB #1#2
+ \bgroup
+ \setuplabeltext[formula=#1\space]
+ \setnumber[formula][\ctxlua{document.filenumber("#2")}]
+ \decrementnumber[formula]
+ \placeformula
+ \startformula
+ \processxmlfile{#2.xml}
+ \stopformula
+ \egroup
+ \typefile{#2.xml}
+ \page[bigpreference]
+\stoptexdefinition
+
+\startsetups showexamples
+
+ \setupformulas
+ [left=,
+ right=,
+ location=left,
+ numberstyle=FormulaFont,
+ numbercolor=darkblue]
+
+ \resetnumber[formula]
+
+ \let\showXMLfile\showXMLfileB
+
+\stopsetups
+
+\startsetups TitlePageBackground
+ \setbox\scratchbox=\vbox to \paperheight {
+ \hsize\paperwidth
+ \definedfont[NiceBold*default at 7pt]
+ \setupinterlinespace
+ \let\showXMLfile\showXMLfileA
+ \baselineskip=1\baselineskip plus 1pt
+ \getbuffer[derivates]
+ \getbuffer[integrals]
+ \getbuffer[series]
+ \getbuffer[logs]
+ \getbuffer[goniometrics]
+ \getbuffer[statistics]
+ \getbuffer[matrices]
+ }
+ \setbox\scratchbox=\vsplit\scratchbox to \paperheight
+ \vbox to \paperheight {
+ \unvbox\scratchbox
+ \vskip-.2ex
+ }
+\stopsetups
+
+\defineoverlay
+ [titlepage]
+ [\directsetup{TitlePageBackground}]
+
+\settaggedmetadata
+ [title={MathML},
+ author={Hans Hagen},
+ version={January 2001 / June 2008 / June 2011},
+ copyright={PRAGMA ADE, Hasselt, NL},
+ url={www.pragma-ade.com / www.pragma-ade.nl}]
+
+\starttext
+
+\setupbackgrounds
+ [page]
+ [background={foreground,titlepage}]
+
+\startelement[ignore]
+
+ \startstandardmakeup[footerstate=none,doublesided=no,page=]
+ \setupalign[left]
+ \definefont[BigFont][RegularBold at 108pt]
+ \definefont[MedFont][RegularBold at 48pt]
+ \vfill
+ \BigFont \darkred MathML \par
+ \vskip6pt
+ \MedFont \darkred HANS HAGEN \par
+ \stopstandardmakeup
+
+\stopelement
+
+\setupbackgrounds
+ [page]
+ [background=]
+
+\startelement[ignore]
+
+ \startstandardmakeup[footerstate=none,doublesided=no,page=]
+ \startpacked
+ Hans Hagen \par
+ Hassel NL \par
+ \goto{www.pragma-ade.com}[url(http://www.pragma-ade.com)] \par
+ January 2001 /
+ June 2008 /
+ June 2011 /
+ February 2015\par
+ \stoppacked
+ \vfill
+ % More changes and additions can be expected when there is a definitive
+ % version of the \MATHML~3 specification and more correct testsuite. One
+ % thing we need to look into is the nesting model dealing with ()
+ % discussed in the spec.
+ \blank
+ \start
+ \starttabulate
+ \NC \color[darkblue]{copyright} \EQ PRAGMA ADE, Hasselt, NL \NC \NR
+ \NC \color[darkblue]{version} \EQ \currentdate \NC \NR
+ \NC \color[darkblue]{renderer} \EQ \doifmodeelse{mkiv}{version 1 / mkiv}{\doifsetupselse{mmc:apply:start}{version 2}{version 3} / mkii} \NC \NR
+ \stoptabulate
+ \stop
+ \stopstandardmakeup
+
+\stopelement
+
+\startfrontmatter
+
+\starttitle[title={Table of Contents}]
+
+\startmixedcolumns[n=3,separator=rule,rulecolor=darkblue,rulethickness=1pt,blank={line,fixed},balance=no]
+ \placelist[chapter,section]
+\stopmixedcolumns
+
+\stoptitle
+
+\startchapter[title={introduction}]
+
+It is a well known fact that \TEX\ can do a pretty good job on typesetting math.
+This is one reason why many scientific articles, papers and books are typeset
+using \TEX. However, in these days of triumphing angle brackets, coding in \TEX\
+looks more and more out of place.
+
+From the point of view of an author, coding in \TEX\ is quite natural, given that
+some time is spent on reading the manuals. This is because not only the natural
+flow of the definition suits the way mathematicians think, but also because the
+author has quite some control over the way his thoughts end up on paper. It will
+be no surprise that switching to a more restricted way of coding, which also
+demands more keystrokes, is not beforehand considered to be better.
+
+There are however circumstances that one wants to share formulas (or
+formula||like specifications) between several applications, one of which is a
+typesetting engine. In that case, a bit more work now, later saves you some
+headaches due to keeping the different source documents in sync.
+
+The moment coding math in \XML\ is discussed, those in favour stress that coding
+can be eased by using appropriate editors. Here we encounter a dilemma. For
+optimal usage, one should code in terms of content, that is, the principles that
+are expressed in a formula. Editors are not that strong in this area, and if they
+would be, editing would be not that much different from traditionally editing
+formulas: just keying in ideas using code that at first sight looks obscure. A
+more graphical oriented editor can help authors to compose formulas, but the
+underlaying coding will mainly be in terms of placing glyphs and boxes, and as a
+result the code will hardly be usable in other applications.
+
+So either we code in terms of concepts, which permits sharing code among
+applications, and poses strong limitations on the influence of authors on the
+visual appearance. Or we use an interactive editor to fine tune the appearance of
+a formula and take for granted that reuse will be minimal or suboptimal.
+
+In the following chapters we will discuss the mathematical language \MATHML\ in
+the perspective of typography. As a typesetting vehicle, we have used \CONTEXT.
+However, the principles introduced here and the examples that we provide are
+independent of \CONTEXT. For a more formal exploration we recommend the \MATHML\
+specification.
+
+This document is dedicated to all those \CONTEXT\ users who like typesetting
+math. I'm sure that my father, who was a math teacher, would have liked
+proofreading this document. His absence was compensated by Tobias Burnus, Wang
+Lei, Ton Otten, and later members of the \CONTEXT\ mailing list who carefully
+read the text, corrected the errors in my math, tested the functionality, and
+made suggestions. Any remaining errors are mine.
+
+When we started supporting \MATHML\ we were under the impression that it would be
+accepted and take of fast, but we were wrong. It toke much more than a decade for
+instance to see browsers support rendering. Being involved in typesetting
+educational content from \XML\ files, we could use this subsystem ourselves, and
+this was useful in the sense that we ran into lots of contradicting and
+suboptimal \MATHML\ code. However, the most interesting application has always
+been in the math4all project, where we went from \TEX\ math, via content \MATHML\
+and open math to presentational \MATHML. Nowadays web usage drives the coding and
+limitations in other programs (and rendering) are sometimes compensated by coding
+and our renderer then has to be able to recover nicely. Thanks to the enormous
+productivity of the main math4all author Frits Spijkers and the careful checking
+by my collegue Ton Otten, we could always keep op well. Development and support
+of the \CONTEXT\ typesetting system is mostly done without any commercial
+benefits and the amount of free time that we spend on it and especially its more
+obscure properties like \MATHML\ is compensated by flexible and tolerant users
+like them.
+
+One problem is that our own usage of \MATHML\ changes over time. Some of our
+projects demand the use of this standard but at the same time the used sources
+need to satisfy other needs, for instance rendering on the web. For some 15 years
+now the changing demands and quality have made us oscillate between (often
+suboptimal) solutions that deal with the suboptimal code that comes from
+compromises. For instance the mentioned project is now using a mixture of
+\MATHML\ and so called \ASCII math because that is the only way the enormous
+amount of math code can be rendered on the web. And even there we need to bend
+the rules, for instance to compensate for missing features or cultural
+differences. Eventually I will rewrite the rendering from scratch but I need time
+and a very good reason for that.
+
+This version of the manual is produced by \CONTEXT\ \MKIV\ and is also used as
+testcase. The version rendered at \PRAGMA\ uses the Lucida Bright fonts. These
+can be bought at \goto {www.tug.org} [url(http://{www.tug.org})] for a reasonable
+low price and are really worth the money.
+
+\startlines
+Hans Hagen
+PRAGMA ADE
+Hasselt NL
+2001 \emdash\ \currentdate[year]
+\stoplines
+
+\stopchapter
+
+\stopfrontmatter
+
+\startbodymatter
+
+\startchapter[title={What is \MATHML}]
+
+\startsection[title={backgrounds}]
+
+\MATHML\ showed up in the evolving vacuum between structural \SGML\ markup and
+presentational \HTML. Both \SGML\ and \HTML\ can be recognized by angle brackets.
+The disadvantage of \SGML\ was that it was so open ended, that general tools
+could hardly be developed. \HTML\ on the other hand was easy to use and became
+extremely popular and users as well as software vendors quickly spoiled the
+original ideas and created a mess. \SGML\ never became really popular, but thanks
+to \HTML\ people became accustomed to that kind of notation. So, when \XML\ came
+around as a more restricted cousin of \SGML, the world was kind of ready for it.
+It cannot be denied that by some clever marketing many of today's users think
+that they use something new and modern, while we are actually dealing with
+something from the early days of computing. A main benefit of \XML\ is that it
+brought the ideas behind \SGML\ (and medium neutral coding in general) to the
+users and at the same time made a major cleanup of \HTML\ possible.
+
+About the same time, \MATHML\ was defined, both to bring math to the \WWW, and to
+provide a way of coding math that will stimulate sharing the same code between
+different applications. At the end of 2000, the \MATHML\ version~2 draft became a
+recommendation. In the process of rewriting the interpreter for \CONTEXT\ \MKIV\
+mid 2008 a draft of \MATHML\ version~3 has been used.
+
+Now, imagine that we want to present a document on the internet using a format
+like \HTML, either for viewing or for being spoken. Converting text and graphics
+is, given proper source coding, seldom a problem, but converting formulas into
+some angle bracket representation is more tricky. A way out of this is \MATHML's
+presentational markup.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mrow>
+ <mi> a </mi>
+ <mo> + </mo>
+ <mi> b </mi>
+ <mo> = </mo>
+ <mi> c </mi>
+ </mrow>
+</math>
+\stopbuffer
+
+\processxmlbuffer
+
+This simple formula, when coded in \TEX, looks like:
+
+\starttyping
+$$ a + b = c $$
+\stoptyping
+
+In presentational \MATHML\ we get:
+
+\typebuffer
+
+In presentational \MATHML, we use mostly begintags (\type {<mi>}) and end tags
+(\type {</mi>}). The \mmlelement {mrow} element is the basic building block of a
+formula. The \mmlelement {mi} element specifies a math identifier and \mmlelement
+{mo} is used for operators. In the process of typesetting, both are subjected to
+interpretation in order to get the best visualization.
+
+Converting \TEX\ code directly or indirectly, using printable output or even
+in||memory produced math lists, has been one of the driving forces behind
+presentational \MATHML\ and other math related \DTD's like \EUROMATH. One may
+wonder if there are sound and valid reasons for going the opposite way. You can
+imagine that a converter from \TEX\ to \MATHML\ produces \mmlelement {menclose},
+\mmlelement {mspace}, \mmlelement {mstyle} and other elements that can have many
+spacing related attributes, but I wonder if any author is willing to think in
+those quantities. Visual editors of course are good candidates for producing
+presentational \MATHML.
+
+But wouldn't it be more efficient if we could express ideas and concepts in such
+a way that they could be handled by a broad range of applications, including a
+typesetting engine? This is why, in addition to presentational \MATHML, there is
+also content \MATHML. The previous formula, when coded in such a way, looks like:
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <eq/>
+ <apply> <plus/>
+ <ci> a </ci>
+ <ci> b </ci>
+ </apply>
+ <ci> c </ci>
+ </apply>
+</math>
+\stopbuffer
+
+\typebuffer
+
+This way of defining a formula resembles the so called polish (or stackwise)
+notation. Opposite to presentational markup, here a typesetting engine has to
+find out in what order and what way the content has to be presented. This may
+seem a disadvantage, but in practice implementing content markup is not that
+complicated. The big advantage is that, once we know how to typeset a concept,
+\TEX\ can do a good job, while in presentational markup much hard coded spacing
+can spoil everything. One can of course ignore specific elements, but it is more
+safe to start from less and enhance, than to leave away something with unknown
+quantities.
+
+Instead of using hard coded operators as in presentational \MATHML, content
+markup uses empty elements like \type {<plus/>}. Many operators and functions are
+predefined but one can also define his own; in \MATHML~3 this is further extended
+by adopting \OPENMATH\ as variant.
+
+Of course the main question to be answered now is to what extent the author can
+influence the appearance of a formula defined in content markup. Content markup
+has the advantage that the results can be more consistent, but taking away all
+control is counterproductive. The \MATHML\ level~2 draft mentions that this level
+covers most of the pre university math. If so, that is a proper starting point,
+but especially educational math often has to be typeset in such ways that it
+serves its purpose. Also, (re|)|using the formulas in other applications
+(simulators and alike) is useful in an educational setting, so content markup is
+quite suitable.
+
+How do we combine the advantages of content markup with the wish of an author to
+control the visual output and at the same time get an as high as possible typeset
+result. There are several ways to accomplish this. One is to include in the
+document source both the content markup and the \TEX\ specific code.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <semantics>
+ <apply> <eq/>
+ <apply> <plus/>
+ <ci> a </ci>
+ <ci> b </ci>
+ </apply>
+ </apply>
+ <ci> c </ci>
+ <annotation encoding="TeX">a+b=c</annotation>
+ </semantics>
+</math>
+\stopbuffer
+
+\typebuffer
+
+The \mmlelement {annotation} element is one of the few that is permitted inside
+the \mmlelement {math} element. In this example, we embed pure \TEX\ code, which,
+when enabled is typeset in math mode. It will be clear that for a simple formula
+like this one, such redundant coding is not needed, but one can imagine more
+complicated formulas. Because we want to limit the amount of work, we prefer just
+content markup. \blank {\it Remark: Some characters, fillers or whatever may not
+show up. This is due to the fact that the relevant tables for \CONTEXT\ \MKIV\
+are defined stepwise. In due time most relevant symbols will be accessible.}
+
+\stopsection
+
+\startsection[title={two methods}]
+
+The best way to learn \MATHML\ is to key in formulas, so that is what we did as
+soon as we started adding \MATHML\ support to \CONTEXT. In some areas, \MATHML\
+provides much detail (many functions are represented by elements) while in other
+areas one has to fall back on the more generic function element or a full
+description. Compare the following definitions:
+
+\startbuffer[a]
+<document>
+ <math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <sin/> <ci> x </ci> </apply>
+ </math>
+ <math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mrow> <mi> sin </mi> <mi> x </mi> </mrow>
+ </math>
+</document>
+\stopbuffer
+
+\typebuffer[a]
+
+We prefer the first definition because it is more structured and gives more
+control over the result. There is only one \quote {unknown} quantity, $x$, and
+from the encapsulating element \mmlelement {ci} we know that it is an identifier.
+
+\processxmlbuffer[a]
+
+In the content example, from the \mmlelement {apply} \mmlelement {sin} we can
+deduce that the following argument is an operand, either an \mmlelement {apply},
+or a \mmlelement {ci} or \mmlelement {cn}. In the presentational alternative, the
+following elements can be braces, a math identifier, a row, a sequence of
+identifiers and operators, etc. There, the look and feel is hard coded.
+
+\startbuffer[b]
+<?context-mathml-directive function reduction no ?>
+\stopbuffer
+
+\typebuffer[b]
+
+This directive, either issued in the \XML\ file, or set in the style file,
+changes the appearance of the function, but only in content markup. It is because
+of this feature, that we favour content markup.
+
+\processxmlbuffer[b,a]
+
+Does this mean that we can cover everything with content markup? The answer to
+this is still unclear. Consider the following definition.
+
+\processxmlfile {pc-i-380.xml}
+
+Here we combine several cases in one formula by using $\pm$ and $\mp$ symbols.
+Because we only have \mmlelement {plus} and \mmlelement {minus} elements, we have
+to revert to the generic function element \mmlelement {fn}. We show the complete
+definition of this formula.
+
+\typefile {pc-i-380.xml}
+
+The \MATHML\ parser and typesetting engine have to know how to handle these
+special cases, because the visualization depends on the function (or operator).
+Here both composed signs are treated like the plus and minus signs, but in other
+cases an embraced argument may be needed.
+
+\stopsection
+
+\stopchapter
+
+\startchapter[title={Presentational markup}]
+
+\startsection[title=Introduction]
+
+If a document contains presentational \MATHML, there is a good chance that the
+code is output by an editor. Here we will discuss the presentation elements that
+make sense for users when they want to manually code presentational \MATHML. In
+this chapter we show the default rendering, later we will discuss options.
+
+Although much is permitted, we advise to keep the code as simple as possible,
+because then \TEX\ can do a rather good job on interpreting and typesetting it.
+Just let \TEX\ take care of the spacing.
+
+\stopsection
+
+\startsection[title={mi, mn, mo}]
+
+Presentational markup comes down to pasting boxes together in math specific ways.
+The basic building blocks are these three character elements.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mrow>
+ <mi> x </mi> <mo> = </mo> <mn> 5 </mn>
+ </mrow>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\starttabulate[||||]
+\HL
+\NC \mmlelement {mi} \NC identifier \NC normally typeset in an italic font \NC \NR
+\NC \mmlelement {mn} \NC number \NC normally typeset in a normal font \NC \NR
+\NC \mmlelement {mo} \NC operator \NC surrounded by specific spacing \NC \NR
+\HL
+\stoptabulate
+
+Because numbers are taken from an upright font, special numbers are taken care of
+automatically. Here are some from the \MATHML\ specification:
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mrow>
+ <mn> 2 </mn> <mtext>&nbsp;&nbsp;</mtext>
+ <mn> 0.123 </mn> <mtext>&nbsp;&nbsp;</mtext>
+ <mn> 0,000,000 </mn> <mtext>&nbsp;&nbsp;</mtext>
+ <mn> 2.1e10 </mn> <mtext>&nbsp;&nbsp;</mtext>
+ <mn> 0xFFeF </mn> <mtext>&nbsp;&nbsp;</mtext>
+ <mn> MCMLXIX </mn> <mtext>&nbsp;&nbsp;</mtext>
+ <mn> twenty one </mn> <mtext>&nbsp;&nbsp;</mtext>
+ </mrow>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+Special characters can be accessed by their \UNICODE\ point or by a corresponding
+entity. For some reason there is quite some duplication in entities, but we don't
+bother too much about it because after all \UNICODE\ math (which has its own
+peculiarities) is the way to go. The specification has this somewhat strange
+formula definition:
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mrow>
+ <mn> 2 </mn>
+ <mo> + </mo>
+ <mrow>
+ <mn> 3</mn>
+ <mo> &InvisibleTimes; </mo>
+ <mi> &ImaginaryI; </mi>
+ </mrow>
+ </mrow>
+ <mfrac>
+ <mn> 1 </mn>
+ <mn> 2 </mn>
+ </mfrac>
+ <mi> &pi; </mi>
+ <mi> &ExponentialE; </mi>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+And:
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mfrac>
+ <mo> &DifferentialD; </mo>
+ <mrow>
+ <mo> &DifferentialD; </mo>
+ <mi> x </mi>
+ </mrow>
+ </mfrac>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+Visualizing the \mmlelement {mo} element involved some heuristics. For instance
+the size of fences depends on what they fence. In the following case you see how
+we can influence this. For practical pusposes we only support size~1.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mrow>
+ <mo> ( </mo> <mi> x </mi> <mo> ) </mo>
+ </mrow>
+ <mtext> or </mtext>
+ <mrow>
+ <mo maxsize="1"> ( </mo> <mi> x </mi> <mo> ) </mo>
+ </mrow>
+ <mtext> or </mtext>
+ <mrow>
+ <mo maxsize="1" > ( </mo>
+ <mfrac> <mn> 1 </mn> <mn> 2 </mn> </mfrac>
+ <mo stretchy="false"> ) </mo>
+ </mrow>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\getbuffer[mi-mn]
+
+\getbuffer[mo]
+
+\stopsection
+
+\startsection[title={mrow}]
+
+The previous example demonstrated the use of \mmlelement {mrow}, the element that
+is used to communicate the larger building blocks. Although this element from the
+perspective of typesetting is not always needed, by using it, the structure of
+the formula in the document source is more clear. There is some messy magic going
+on when we try to fake fenced expressions.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mrow> <mi> x </mi> <mo> &geq; </mo> <mn> 2 </mn> </mrow>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mrow>
+ <mi> y </mi> <mo> &gt; </mo> <mn> 4 </mn>
+ </mrow>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mrow>
+ <mo> &lt; </mo> <mi> x </mi> <mo> &gt; </mo>
+ </mrow>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mrow>
+ <mi> a </mi> <mo> &lt; </mo> <mi> b </mi> <mo> &lt; </mo> <mi> c </mi>
+ </mrow>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+Spacing between a sign and the following token is taken care of automatically by
+\TEX:
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mrow>
+ <mo> - </mo>
+ <mn> 1 </mn>
+ <mo> - </mo>
+ <mn> 1 </mn>
+ </mrow>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\getbuffer[mrow]
+
+\stopsection
+
+\startsection[title={msup, msub, msubsup}]
+
+Where in content markup super and subscript are absent and derived from the
+context, in presentational markup they are quite present.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <msup>
+ <msub> <mi> x </mi> <mn> 1 </mn> </msub>
+ <mn> 2 </mn>
+ </msup>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <msubsup>
+ <mi> x </mi>
+ <mn> 1 </mn>
+ <mn> 2 </mn>
+ </msubsup>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+Watch the difference between both definitions and appearances. You can influence
+the default behaviour with processing instructions.
+
+\getbuffer[msub]
+
+\getbuffer[msup]
+
+\getbuffer[msubsup]
+
+\stopsection
+
+\startsection[title={mfrac}]
+
+Addition, subtraction and multiplication is hard coded using the \mmlelement {mo}
+element with $+$, $-$, and $\times$ (or nothing). You can use $/$ for division,
+but for more complicated formulas you have to fall back on fraction building.
+This is why \MATHML\ provides the \mmlelement {mfrac}.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mfrac>
+ <mrow> <mi> x </mi> <mo> + </mo> <mn> 1 </mn> </mrow>
+ <mrow> <mi> y </mi> <mo> + </mo> <mn> 1 </mn> </mrow>
+ </mfrac>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+You can change the width of the rule, but this is generally a bad idea. For
+special purposes you can set the line thickness to zero.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mfrac linethickness="0">
+ <mrow> <mi> x </mi> <mo> &geq; </mo> <mn> 2 </mn> </mrow>
+ <mrow> <mi> y </mi> <mo> &leq; </mo> <mn> 4 </mn> </mrow>
+ </mfrac>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+A different kind of rendering is also possible, as shown in the following
+example.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mfrac bevelled="true">
+ <mfrac>
+ <mi> x </mi> <mn> 2 </mn>
+ <mi> y </mi> <mn> 4 </mn>
+ </mfrac>
+ <mfrac>
+ <mi> x </mi> <mn> 2 </mn>
+ <mi> y </mi> <mn> 4 </mn>
+ </mfrac>
+ </mfrac>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\getbuffer[mfrac]
+
+\stopsection
+
+\startsection[title={mfenced}]
+
+Braces are used to visually group sub||expressions. In presentational \MATHML\
+you can either hard code braces, or use the \mmlelement {mfenced} element to
+generate delimiters automatically. In \CONTEXT, as much as possible, the
+operators and identifiers are interpreted, and when recognized treated according
+to their nature.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mfenced> <mi> a </mi> <mi> b </mi> <mn> 1 </mn> </mfenced>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+The fencing symbols adapt their size to the content. Their dimensions also depend
+on the way math fonts are defined. The standard \TEX\ fonts will give the same
+height of braces around $x$ and $y$, but in other fonts the $y$ may invoke
+slightly larger ones.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mfenced open="[" close=")" separators=",">
+ <mn> 0 </mn> <mn> 1 </mn>
+ </mfenced>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+The separators adapt their size to the fenced content too, just like the fences.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mfenced open="[" close="]" separators="|">
+ <mfrac> <mn> 1 </mn> <mi> x </mi> </mfrac>
+ <mfrac> <mn> 1 </mn> <mi> y </mi> </mfrac>
+ <mfrac> <mn> 1 </mn> <mi> z </mi> </mfrac>
+ </mfenced>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mfenced>
+ <mrow> <mn> 1 </mn> <mo> + </mo> <mi> x </mi> </mrow>
+ </mfenced>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mfenced open="{" close="" separators="|+-">
+ <mn> 1 </mn> <mn> 2 </mn> <mn> 3 </mn> <mn> 4 </mn>
+ </mfenced>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mfenced open="a" close="e" separators="bcd">
+ <mn> 1 </mn> <mn> 2 </mn> <mn> 3 </mn> <mn> 4 </mn>
+ </mfenced>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\getbuffer[mfenced]
+
+\stopsection
+
+\startsection[title={msqrt, mroot}]
+
+The shape and size of roots, integrals, sums and products can depend on the size
+of the content.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <msqrt>
+ <mi> b </mi>
+ </msqrt>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mroot>
+ <mi> b </mi>
+ <mn> 2 </mn>
+ </mroot>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mroot>
+ <mfrac> <mn> 1 </mn> <mi> b </mi> </mfrac>
+ <mn> 2 </mn>
+ </mroot>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mroot>
+ <mfrac>
+ <mn> 1 </mn>
+ <mrow> <mi> a </mi> <mo> + </mo> <mi> b </mi> </mrow>
+ </mfrac>
+ <mn> 3 </mn>
+ </mroot>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\getbuffer[msqrt-mroot]
+
+\stopsection
+
+\startsection[title={mtext}]
+
+If you put text in a \mmlelement {mi} element, it will come out rather ugly. This
+is due to the fact that identifiers are (at least in \TEX) not subjected to the
+kerning that is normally used in text. Therefore, when you want to add some text
+to a formula, you should use the \mmlelement {mtext} element.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mfrac>
+ <mi> Some Text </mi>
+ <mtext> Some Text </mtext>
+ </mfrac>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+As with all elements, leading and trailing spaces are ignored. If you really want
+a space in front or at the end, you should use one of the space tokens other than
+the ascii spacing tokens. You can also use entities like \type {&nbsp;}.
+
+\getbuffer[mtext]
+
+\stopsection
+
+\startsection[title={mover, munder, munderover}]
+
+Not all formulas are math and spacing and font rules may differ per discipline.
+The following formula reflects a chemical reaction.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mrow>
+ <mrow>
+ <mn> 2 </mn>
+ <msub> <mtext> H </mtext> <mn> 2 </mn> </msub>
+ </mrow>
+ <mo> + </mo>
+ <msub> <mtext> O </mtext> <mn> 2 </mn> </msub>
+ <munder>
+ <mo> &RightArrow; </mo>
+ <mtext> explosion </mtext>
+ </munder>
+ <mrow>
+ <mn> 2 </mn>
+ <msub> <mtext> H </mtext> <mn> 2 </mn> </msub>
+ <mtext> O </mtext>
+ </mrow>
+ </mrow>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+The \mmlelement {munder}, \mmlelement {mover} and \mmlelement {munderover}
+elements can be used to put symbols and text or formulas on top of each other.
+When applicable, the symbols will stretch themselves to span the natural size of
+the text or formula.
+
+The following examples demonstrate how the relevant components of this threesome
+are defined.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mrow>
+ <mi> x </mi>
+ <munder>
+ <mo> &RightArrow; </mo>
+ <mtext> maps to </mtext>
+ </munder>
+ <mi> y </mi>
+ </mrow>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mrow>
+ <mi> x </mi>
+ <munder>
+ <mtext> maps to </mtext>
+ <mo> &RightArrow; </mo>
+ </munder>
+ <mi> y </mi>
+ </mrow>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mrow>
+ <mi> x </mi>
+ <mover>
+ <mtext> maps to </mtext>
+ <mo> &RightArrow; </mo>
+ </mover>
+ <mi> y </mi>
+ </mrow>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mrow>
+ <mi> x </mi>
+ <mover>
+ <mo> &RightArrow; </mo>
+ <mtext> maps to </mtext>
+ </mover>
+ <mi> y </mi>
+ </mrow>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mrow>
+ <munderover>
+ <mi> &int; </mi>
+ <mn> 1 </mn>
+ <mi> &infin; </mi>
+ </munderover>
+ </mrow>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mrow>
+ <mover> <mi> x </mi> <mo> &#x2C6; </mo> </mover> <mo>+</mo>
+ <mover> <mi> x </mi> <mo> &#x5E; </mo> </mover> <mo>+</mo>
+ <mover> <mi> x </mi> <mo> &Hat; </mo> </mover>
+ </mrow>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\getbuffer[munder]
+
+\getbuffer[mover]
+
+\getbuffer[munderover]
+
+\stopsection
+
+\startsection[title={ms}]
+
+This is a bit weird element. It behaves like \mmlelement {mtext} but puts quotes
+around the text.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mfrac>
+ <ms> Some Text </ms>
+ <mtext> Some Text </mtext>
+ </mfrac>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+You can specify the left and right boundary characters, either directly or
+(preferably) using entities like \type {&quot;}.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <ms lquote="+" rquote="+"> A Famous Quotation </ms>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\getbuffer[ms]
+
+\stopsection
+
+\startsection[title={menclose}]
+
+This element is implemented but it is such a weird element that it's probably
+seldom used.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <menclose notation="longdiv"><mn>123</mn></menclose>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <menclose notation="actuarial"><mn>123</mn></menclose>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <menclose notation="radical"><mn>123</mn></menclose>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+A bit more complex example (taken from the specification) demonstrates where
+those somewhat strange rendering options are good for:
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mtable columnspacing="0pt" rowspacing="0pt">
+ <mtr>
+ <mtd></mtd>
+ <mtd columnalign="right"><mn>10</mn></mtd>
+ </mtr>
+ <mtr>
+ <mtd columnalign="right"><mn>131</mn></mtd>
+ <mtd columnalign="right">
+ <menclose notation="longdiv"><mn>1413</mn></menclose>
+ </mtd>
+ </mtr>
+ <mtr>
+ <mtd></mtd>
+ <mtd columnalign="right">
+ <mrow>
+ <munder>
+ <mn>131</mn>
+ <mo>&UnderBar;</mo>
+ </munder>
+ <mphantom><mn>3</mn></mphantom>
+ </mrow>
+ </mtd>
+ </mtr>
+ <mtr>
+ <mtd></mtd>
+ <mtd columnalign="right"><mn>103</mn></mtd>
+ </mtr>
+ </mtable>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+In \MATHML~3 a few more notations showed up and to some extend we support them.
+We assume that the previously mentioned variants are always applied to the
+content first.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <menclose notation="box downdiagonalstrike">
+ <mtext>whatever</mtext>
+ </menclose>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <menclose notation="roundedbox updiagonalstrike">
+ <mtext>whatever</mtext>
+ </menclose>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <menclose notation="circle verticalstrike horizontalstrike">
+ <mtext>whatever</mtext>
+ </menclose>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <menclose notation="left top verticalstrike">
+ <mtext>whatever</mtext>
+ </menclose>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <menclose notation="right bottom horizontalstrike">
+ <mtext>whatever</mtext>
+ </menclose>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <menclose notation="radical right bottom horizontalstrike">
+ <mtext>whatever</mtext>
+ </menclose>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <menclose notation="right bottom horizontalstrike radical">
+ <mtext>whatever</mtext>
+ </menclose>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+The graphics are drawn at runtime by \METAPOST. Currently we don't combine them
+into one which would be more efficient in terms of output (not so much in
+runtime). You can define additional variants; as an example we show one of the
+solutions:
+
+\startbuffer
+\startuseMPgraphic{mml:enclose:box}
+ draw OverlayBox
+ withpen pencircle scaled (ExHeight/10) ;
+\stopuseMPgraphic
+
+\defineoverlay [mml:enclose:box] [\useMPgraphic{mml:enclose:box}]
+\stopbuffer
+
+\getbuffer \typebuffer
+
+You can roll out your own:
+
+\startbuffer
+\startuseMPgraphic{mml:enclose:mybox}
+ draw OverlayBox enlarged (ExHeight/5)
+ withpen pencircle scaled (ExHeight/10) ;
+\stopuseMPgraphic
+
+\defineoverlay [mml:enclose:mybox] [\useMPgraphic{mml:enclose:mybox}]
+\stopbuffer
+
+\getbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <menclose notation="mybox">
+ <mtext>whatever</mtext>
+ </menclose>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\getbuffer[menclose]
+
+\stopsection
+
+\startsection[title={merror}]
+
+There is not much chance that this element will end up in a math textbook, unless
+the typeset output of programs is part of the story.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <merror>
+ <mtext> Are you kidding? &ThickSpace; </mtext>
+ <mfrac>
+ <mrow> <mn> 1 </mn> <mo> + </mo> <mi> x </mi> </mrow>
+ <mn> 0 </mn>
+ </mfrac>
+ </merror>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\getbuffer[merror]
+
+\stopsection
+
+\startsection[title={mmultiscripts, mprescripts}]
+
+This element is one of the less obvious ones. The next two examples are taken
+from the specification. The \mmlelement {multiscripts} element takes an odd
+number of arguments. The second and successive child elements alternate between
+sub- and superscript. The empty element \mmlelement {none} |<|a dedicated element
+\mmlelement {mnone} would have been a better choice|>| serves as a placeholder.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mmultiscripts>
+ <mi> R </mi>
+ <mi> i </mi>
+ <none/>
+ <none/>
+ <mi> j </mi>
+ <mi> k </mi>
+ <none/>
+ <mi> l </mi>
+ <none/>
+ </mmultiscripts>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+The \mmlelement {mmultiscripts} element can also be used to attach prescripts to
+a symbol. The next example demonstrates this. The empty \mmlelement {prescripts}
+element signals the start of the prescripts section.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mmultiscripts>
+ <mi> Qb </mi>
+ <mn> 4 </mn>
+ <none/>
+ <mprescripts/>
+ <mn> 427 </mn>
+ <none/>
+ </mmultiscripts>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\getbuffer[mmultiscripts]
+
+\stopsection
+
+\startsection[title={mspace}]
+
+Currently not all functionality of the \mmlelement {mspace} element is
+implemented. Over time we will see what support is needed and makes sense,
+especially since this command can spoil things. We only support the units that
+make sense, so units in terms of pixels |<|a rather persistent oversight in
+drafts|>| are kindly ignored.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <?context-mathml-directive mspace option test ?>
+ <mrow>
+ <mtext> use </mtext> <mspace width="1em" />
+ <mtext> me </mtext> <mspace width="1ex" />
+ <mtext> with </mtext> <mspace width="10pt"/>
+ <mtext> care </mtext>
+ </mrow>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+As you can see here, spaces inside a \type {mtext} matter too! The next example
+is more tight.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <?context-mathml-directive mspace option test ?>
+ <mrow>
+ <mtext>use</mtext> <mspace width="1em" />
+ <mtext>me</mtext> <mspace width="1ex" />
+ <mtext>with</mtext> <mspace width="10pt"/>
+ <mtext>care</mtext>
+ </mrow>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+You can also pass a sample text:
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mfrac>
+ <mi> 44 </mi>
+ <mfrac>
+ <mrow>
+ <mn> 11 </mn> <mn> 22 </mn> <mn> 33 </mn>
+ </mrow>
+ <mrow>
+ <mn> 11 </mn> <mspace spacing="22"/> <mn> 33 </mn>
+ </mrow>
+ </mfrac>
+ </mfrac>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\getbuffer[mspace]
+
+\stopsection
+
+\startsection[title={mphantom}]
+
+A phantom element hides its content but still takes its space. A phantom element
+can contain other elements.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mrow>
+ <mtext> who is afraid of </mtext> <mspace width=".5em" />
+ <mphantom> phantom </mphantom> <mspace width=".5em" />
+ <mtext> elements </mtext>
+ </mrow>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\getbuffer[mphantom]
+
+\stopsection
+
+\startsection[title={mpadded}]
+
+As with a few other elements, we first have to see some practical usage for this,
+before we could implement the functionality needed.
+
+\getbuffer[mpadded]
+
+\stopsection
+
+\startsection[title={mtable, mtr, mtd, mlabeledtr}]
+
+As soon as you want to represent a matrix or other more complicated composed
+constructs, you end up with spacing problems. This is when tables come into view.
+Because presentational elements have no deep knowledge about their content,
+tables made with presentational \MATHML\ will in most cases look worse than those
+that result from content markup.
+
+We have implemented tables on top of the normal \XML\ (\HTML) based table support
+in \CONTEXT, also known as natural tables. Depending on the needs, support for
+the \mmlelement {mtable} element will be extended.
+
+The \mmlelement {mtable} element takes a lot of attributes. When no attributes
+are given, we assume that a matrix is wanted, and typeset the content
+accordingly.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mrow>
+ <mo> ( </mo>
+ <mtable>
+ <mtr>
+ <mtd> <msub> <mi> x </mi> <mn> 1,1 </mn> </msub> </mtd>
+ <mtd> <mn> 1 </mn> </mtd>
+ <mtd> <mn> 0 </mn> </mtd>
+ </mtr>
+ <mtr>
+ <mtd> <mn> 0 </mn> </mtd>
+ <mtd> <msub> <mi> x </mi> <mn> 2,2 </mn> </msub> </mtd>
+ <mtd> <mn> 1 </mn> </mtd>
+ </mtr>
+ <mtr>
+ <mtd> <mn> 0 </mn> </mtd>
+ <mtd> <mn> 1 </mn> </mtd>
+ <mtd> <msub> <mi> x </mi> <mn> 3,3 </mn> </msub> </mtd>
+ </mtr>
+ </mtable>
+ <mo> ) </mo>
+ </mrow>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mtable columnalign="left center right">
+ <mtr>
+ <mtd frame="solid"> <mn> 100 </mn> </mtd>
+ <mtd > <mn> 100 </mn> </mtd>
+ <mtd > <mn> 100 </mn> </mtd>
+ </mtr>
+ <mtr>
+ <mtd > <mn> 10 </mn> </mtd>
+ <mtd frame="solid"> <mn> 10 </mn> </mtd>
+ <mtd > <mn> 10 </mn> </mtd>
+ </mtr>
+ <mtr>
+ <mtd > <mn> 1 </mn> </mtd>
+ <mtd > <mn> 1 </mn> </mtd>
+ <mtd frame="solid"> <mn> 1 </mn> </mtd>
+ </mtr>
+ </mtable>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+A special case is the labeled row \mmlelement {mlabeledtr}. This one is meant for
+numbering equations. However, in a properly formatted document there is probably
+some encapsulating structure that takes care of this. Therefore we discard the
+first child element. We show an example taken from the specification.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mtable>
+ <mlabeledtr>
+ <mtd>crap</mtd>
+ <mtd>
+ <mrow>
+ <mi>E</mi>
+ <mo>=</mo>
+ <mrow>
+ <mi>m</mi>
+ <mi>&it;</mi>
+ <msup>
+ <mi>c</mi>
+ <mn>2</mn>
+ </msup>
+ </mrow>
+ </mrow>
+ </mtd>
+ </mlabeledtr>
+ </mtable>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+Although the underlying table mechanism can provide all the support needed (and
+even more), not all attributes are yet implemented. We will make a useful
+selection.
+
+\starttabulate[|l|l|]
+\HL
+\NC columnalign \NC keyword: left center (middle) right \NC \NR
+\NC columnspacing \NC a meaningful dimension \NC \NR
+\NC rowspacing \NC a meaningful dimension \NC \NR
+\NC frame \NC keyword: none (off) solid (on) \NC \NR
+\NC color \NC a named color identifier \NC \NR
+\NC background \NC a named color identifier \NC \NR
+\HL
+\stoptabulate
+
+We only support properly named colors as back- and foreground colors. The normal
+\CONTEXT\ color mapping mechanism can be used to remap colors. This permits
+(read: forces) a consistent usage of colors. If you use named backgrounds
+\unknown\ the sky is the limit.
+
+\getbuffer[mtable]
+
+\getbuffer[mtd]
+
+\getbuffer[mtr-mlabeledtr]
+
+\stopsection
+
+\startsection[title={mcolumn}]
+
+This element is new in \MATHML~3 and is kind of special in the sense that the
+content is analyzed. It would have made more sense just to provide some proper
+structure instead since it's intended use is rather well defined.
+
+Because it is not much fun to implement such a messy element we only support it
+partially and add what comes on our way. Here are a few examples (more or less
+taken from the reference).
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mcolumn>
+ <mn>12</mn>
+ <mrow> <mo>&times;</mo> <mn>12</mn> </mrow>
+ <mline spacing="000"/>
+ <mn>24</mn>
+ <mrow> <mn>12</mn> <mspace spacing="0"/> </mrow>
+ <mline spacing="000"/>
+ <mn>144</mn>
+ </mcolumn>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mcolumn>
+ <mn>123</mn>
+ <mrow> <mn>456</mn> <mo>+</mo> </mrow>
+ <mline spacing="000+"/>
+ <mn>579</mn>
+ </mcolumn>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mcolumn>
+ <mn>1,23</mn>
+ <mrow> <mn>4,56</mn> <mo>+</mo> </mrow>
+ <mline spacing="0,00+"/>
+ <mn>5,79</mn>
+ </mcolumn>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mcolumn>
+ <mstyle mathsize="71%">
+ <menclose notation="bottom"> <mn>10</mn> </menclose>
+ </mstyle>
+ <mn>52</mn>
+ <mrow> <mo>&minus;</mo> <mn>7</mn> </mrow>
+ <mline spacing="45"/>
+ <mn>45</mn>
+ </mcolumn>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+Similar effects can be accomplished with the \mmlelement {mtable}
+element.
+
+\stopsection
+
+\startsection[title={malignmark, maligngroup}]
+
+This element is used in tables and is not yet implemented, first because I still
+have to unravel its exact usage, but second, because it is about the ugliest
+piece of \MATHML\ markup you will encounter.
+
+% AFO: http://www.w3.org/TR/2007/WD-MathML3-20071005/chapter3.html#presm.malign
+
+\getbuffer[malignmark]
+
+\stopsection
+
+\startsection[title={mglyph}]
+
+This element is for those who want to violate the ideas of general markup by
+popping in his or her own glyphs. Of course one should use entities, even if they
+have to be defined.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <mrow>
+ <mi> <mglyph fontfamily="Serif" index="65" alt="The Letter A"/></mi>
+ <mo> + </mo>
+ <mi> <mglyph fontfamily="Serif" index="66" alt="The Letter B"/></mi>
+ <mo> = </mo>
+ <mi> <mglyph fontfamily="Serif" index="67" alt="The Letter C"/></mi>
+ </mrow>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\getbuffer[mglyph]
+
+\stopsection
+
+\startsection[title={mstyle}]
+
+This element is implemented but not yet discussed since we want more control over
+its misuse.
+
+\getbuffer[mstyle]
+
+\stopsection
+
+\startsection[title={afterword}]
+
+You may have noticed that we prefer content \MATHML\ over presentational \MATHML.
+So, unless you're already tired of any math coded in angle brackets, we invite
+you to read the next chapter too.
+
+\stopsection
+
+\stopchapter
+
+\startchapter[title={Content markup}]
+
+\startsection[title={introduction}]
+
+In this chapter we will discuss the \MATHML\ elements from the point of view of
+typesetting. We will not pay attention to other rendering techniques, like speech
+generation. Some elements take attributes and those often make more sense for
+other applications than for a typesetting engine like \TEX, which has a strong
+math engine that knows how to handle math.
+
+One of the most prominent changes in \MATHML~3 is support for an \OPENMATH\ like
+coding. Here the \mmlelement {csymbol} takes the place of the empty element as
+first argument of an \mmlelement {apply}. There are more symbols in \OPENMATH\
+then we supported in the interpreter, but in due time (depending on demand) we
+will add more. At the time of writing this the draft was really a draft which
+made it hard to grasp all the implications for rendering so we probably need to
+overhaul the code sometime in the future.
+
+Another change is the usage of \mmlelement {apply} that has been delegated to
+\mmlelement {bind}. One may wonder why this hadn't happen before. For the moment
+we treat the \mmlelement {bind} as if it were an \mmlelement {apply}.
+
+\stopsection
+
+\startsection[title={apply}]
+
+If you are dealing with rather ordinary math, you will only need a subset of
+content \MATHML. For this reason we will start with the most common elements.
+When you key in \XML\ directly, you will encounter the \mmlelement {apply}
+element quite often, even in a relatively short formula like the following.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <minus/>
+ <cn> 1 </cn>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+In most cases the \mmlelement {apply} element is followed by a specification
+disguised as an empty element.
+
+Later we will see more complex examples but here we already show the different
+ways of encoding. First we show the traditional \MATHML~2 method:
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <forall/>
+ <bvar> <ci>x</ci> </bvar>
+ <apply> <geq/>
+ <ci>x</ci>
+ <cn>4</cn>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+This is now called \quote {pragmatic} \MATHML. Using symbols and \mmlelement
+{bind} this becomes \quote {strict} \MATHML:
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="3.0">
+ <bind> <csymbol cd="quant1">forall</csymbol>
+ <bvar> <ci>x</ci> </bvar>
+ <apply> <csymbol cd="relation1">geq</csymbol>
+ <ci>x</ci>
+ <cn>4</cn>
+ </apply>
+ </bind>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\stopsection
+
+\startsection[title={ci, cn, sep}]
+
+These elements are used to specify identifiers and numbers. Both elements can
+be made more explicit by using attributes.
+
+\startattributes
+\HL
+\NC type \NC set \NC use a representation appropriate for sets \NC \NR
+\NC \NC vector \NC mark this element as vector \NC \NR
+\NC \NC function \NC consider this element to be a function \NC \NR
+\NC \NC fn \NC idem \NC \NR
+\HL
+\stopattributes
+
+When \attvalue {set} is specified, a blackboard symbol is used when available.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <in/>
+ <ci> x </ci>
+ <ci type="set"> N </ci>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+The \attvalue {function} specification makes sense when the \mmlelement {ci}
+element is used in for instance a differential equation.
+
+\startattributes
+\HL
+\NC type \NC integer \NC a whole number with an optional base \NC \NR
+\NC \NC logical \NC a boolean constant \NC \NR
+\NC \NC rational \NC a real number \NC \NR
+\NC \NC complex-cartesian \NC a complex number in $x+iy$ notation \NC \NR
+\NC \NC complex \NC idem \NC \NR
+\NC \NC complex-polar \NC a complex number in polar notation \unknown \NC \NR
+\HL
+\stopattributes
+
+You're lucky when your document uses decimal notation, otherwise you will end up
+with long specs if you want to be clear in what numbers are used.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <eq/>
+ <apply> <plus/>
+ <cn type="integer" base="16"> 1A2C </cn>
+ <cn type="integer" base="16"> 0101 </cn>
+ </apply>
+ <cn type="integer" base="16"> 1B2D </cn>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+Complex numbers have two components. These are separated by the \mmlelement {sep}
+element. In the following example we see that instead of using a \mmlelement {ci}
+with set specifier, the empty element \mmlelement {complexes} can be used. We
+will see some more of those later.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <in/>
+ <cn type="complex"> 2 <sep/> 5 </cn>
+ <complexes/>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\stopsection
+
+\startsection[title={eq, neq, gt, lt, geq, leq}]
+
+Expressions, and especially those with \mmlelement {eq} are typical for math.
+Because such expressions can be quite large, there are provisions for proper
+alignment.
+
+\starttabulate[||c||c|] % we want inline math
+\HL
+\NC lt \NC \xmldata{<math xmlns="http://www.w3c.org/mathml" version="2.0"><apply><lt/> <ci>a</ci><ci>b</ci></apply></math>} \NC
+ leq \NC \xmldata{<math xmlns="http://www.w3c.org/mathml" version="2.0"><apply><leq/><ci>a</ci><ci>b</ci></apply></math>} \NC \NR
+\NC eq \NC \xmldata{<math xmlns="http://www.w3c.org/mathml" version="2.0"><apply><eq/> <ci>a</ci><ci>b</ci></apply></math>} \NC
+ neq \NC \xmldata{<math xmlns="http://www.w3c.org/mathml" version="2.0"><apply><neq/><ci>a</ci><ci>b</ci></apply></math>} \NC \NR
+\NC gt \NC \xmldata{<math xmlns="http://www.w3c.org/mathml" version="2.0"><apply><gt/> <ci>a</ci><ci>b</ci></apply></math>} \NC
+ geq \NC \xmldata{<math xmlns="http://www.w3c.org/mathml" version="2.0"><apply><geq/><ci>a</ci><ci>b</ci></apply></math>} \NC \NR
+\HL
+\stoptabulate
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <leq/>
+ <ci> a </ci>
+ <ci> b </ci>
+ <ci> c </ci>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\stopsection
+
+\startsection[title={equivalent, approx, implies}]
+
+Equivalence, approximations, and implications are handled like \mmlelement {eq}
+and alike and have their own symbols.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <equivalent/>
+ <apply> <plus/> <ci> a </ci> <ci> b </ci> </apply>
+ <apply> <plus/> <ci> b </ci> <ci> a </ci> </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+This document is typeset with \LUATEX\ built upon \TEX\ version $3.14159$, and
+given that \TEX\ is written by a mathematician, it will be no surprise that:
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <approx/>
+ <cn> 3.14159 </cn>
+ <pi/>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <implies/>
+ <apply> <eq/>
+ <apply> <plus/>
+ <ci> x </ci>
+ <cn> 4 </cn>
+ </apply>
+ <cn> 9 </cn>
+ </apply>
+ <apply> <eq/>
+ <ci> x </ci>
+ <cn> 5 </cn>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\stopsection
+
+\startsection[title={minus, plus}]
+
+Addition and subtraction are main building blocks of math so you will meet them
+often.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <minus/>
+ <cn> 37 </cn>
+ <ci> x </ci>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+In most cases there will be more than one argument to take care of, but
+especially \mmlelement {minus} will be used with one argument too. Although \typ
+{<cn> -37 </cn>} is valid, using \mmlelement {minus} is sometimes more clear.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <minus/>
+ <cn> 37 </cn>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+You should pay attention to combinations of \mmlelement {plus} and \mmlelement
+{minus}. Opposite to presentational \MATHML, in content markup you don't think
+and code sequential.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <plus/>
+ <apply> <minus/>
+ <ci> x </ci>
+ </apply>
+ <cn> 37 </cn>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+In \MATHML~3 we can also be more vebose:
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="3.0">
+ <apply> <csymbol cd="arith1">plus</csymbol>
+ <ci>a</ci>
+ <ci>x</ci>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\stopsection
+
+\startsection[title={times}]
+
+Multiplication is another top ten element. Although \type {3p} as content of the
+\mmlelement {ci} element would have rendered the next example as well, you really
+should split off the number and mark it as \mmlelement {cn}. When this is done
+consistently, we can comfortably change the font of numbers independent of the
+font used for displaying identifiers.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <times/>
+ <cn> 3 </cn>
+ <ci> p </ci>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+In a following chapter we will see how we can add multiplication signs between
+variables and constants.
+
+\stopsection
+
+\startsection[title={divide}]
+
+When typeset, a division is characterized by a horizontal rule. Some elements,
+like the differential element \mmlelement {diff}, generate their own division.
+
+\processxmlfile{pc-s-001.xml}
+
+This example also demonstrates how to mix \mmlelement {plus} and \mmlelement
+{minus}.
+
+\typefile{pc-s-001.xml}
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply><divide/>
+ <apply><minus/>
+ <apply><minus/><ci>b</ci></apply>
+ <apply><minus/><ci>b</ci></apply>
+ <apply><root/> <ci>a</ci></apply>
+ </apply>
+ <apply><minus/>
+ <apply><minus/><ci>b</ci><ci>b</ci></apply>
+ <apply><minus/><ci>b</ci></apply>
+ <apply><root/> <ci>a</ci></apply>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\stopsection
+
+\startsection[title={power}]
+
+In presentational \MATHML\ you think in super- and subscripts, but in content
+\MATHML\ these elements are not available. There you need to think in terms of
+\mmlelement {power}.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <plus/>
+ <apply> <power/>
+ <ci> x </ci>
+ <cn> 2 </cn>
+ </apply>
+ <apply> <power/>
+ <apply> <sin/>
+ <ci> x </ci>
+ </apply>
+ <cn> 2 </cn>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+The \mmlelement {power} element is clever enough to determine where the
+superscript should go. In the case of the sinus function, by default it will go
+after the function identifier.
+
+\stopsection
+
+\startsection[title={root, degree}]
+
+If you study math related \DTD's |<|these are the formal descriptions for \SGML\
+or \XML\ element collections|>| you will notice that there are not that many
+elements that demand a special kind of typography: differential equations,
+limits, integrals and roots are the most distinctive ones.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <eq/>
+ <apply> <root/>
+ <degree> 3 </degree>
+ <ci> 64 </ci>
+ </apply>
+ <cn> 4 </cn>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+Contrary to \mmlelement {power}, the \mmlelement {root} element uses a
+specialized child element to denote the degree. The positive consequence of this
+is that there cannot be a misunderstanding about what role the child element
+plays, while in for instance \mmlelement {power} you need to know that the second
+child element denotes the degree.
+
+\stopsection
+
+\startsection[title={sin, cos, tan, cot, scs, sec, \unknown}]
+
+All members of the family of goniometric functions are available as empty
+element. When needed, their argument is surrounded by braces. They all behave the
+same.
+
+\starttabulate[|||||]
+\HL
+\NC sin \NC arcsin \NC sinh \NC arcsinh \NC \NR
+\NC cos \NC arccos \NC cosh \NC arccosh \NC \NR
+\NC tan \NC arctan \NC tanh \NC arctanh \NC \NR
+\NC cot \NC arccot \NC coth \NC arccoth \NC \NR
+\NC csc \NC arccsc \NC csch \NC arccsch \NC \NR
+\NC sec \NC arcsec \NC sech \NC arcsech \NC \NR
+\HL
+\stoptabulate
+
+These functions are normally typeset in a non italic (often roman) font shape.
+
+\processxmlfile{wh-g-001.xml}
+
+By default the typesetting engine will minimize the number of braces that
+surrounds the argument of a function.
+
+\typefile{wh-g-001.xml}
+
+You can specify $\pi$ as an entity \type {&pi;} or as empty element \mmlelement
+{pi}. In many cases it is up to your taste which one you use. There are many
+symbols that are only available as entity, so in some respect there is no real
+reason to treat $\pi$ different.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <eq/>
+ <apply> <cos/>
+ <pi/>
+ </apply>
+ <apply> <minus/>
+ <cn> 1 </cn>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\stopsection
+
+\startsection[title={log, ln, exp}]
+
+The \mmlelement {log} and \mmlelement {ln} are typeset similar to the previously
+discussed goniometric functions. The \mmlelement {exp} element is a special case
+of \mmlelement {power}. The constant $e$ can be specified with \mmlelement
+{exponentiale}.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <approx/>
+ <apply> <ln/>
+ <apply> <plus/>
+ <exponentiale/>
+ <cn> 2 </cn>
+ </apply>
+ </apply>
+ <cn> 1.55 </cn>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <eq/>
+ <apply> <exp/>
+ <cn> 2 </cn>
+ </apply>
+ <cn> 7.3890560989307 </cn>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\stopsection
+
+\startsection[title={quotient, rem}]
+
+The result of a division can be a rational number, so $\frac{5}{4}$ is equivalent
+to $1.25$ and $1.25 \times 4$ gives~$5$. An integer division will give~$1$ with a
+remainder~$2$. Many computer languages provide a \type {div} and \type {mod}
+function, and since \MATHML\ is also meant for computation, it provides similar
+concepts, represented by the elements \mmlelement {quotient} and \mmlelement
+{rem}. The representation of \mmlelement {quotient} is rather undefined, but the
+next one is among the recommended alternatives.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <quotient/>
+ <ci> a </ci>
+ <ci> b </ci>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\stopsection
+
+\startsection[title={factorial}]
+
+Showing the representation of a factorial is rather dull, so we will use a few
+more elements as well as a processing instruction to illustrate the usage of
+\mmlelement {factorial}.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <?context-mathml-directive times symbol yes ?>
+ <apply> <eq/>
+ <apply> <factorial/>
+ <ci> n </ci>
+ </apply>
+ <apply> <times/>
+ <ci> n </ci>
+ <apply> <minus/> <ci> n </ci> <cn> 1 </cn> </apply>
+ <apply> <minus/> <ci> n </ci> <cn> 2 </cn> </apply>
+ <csymbol definitionUrl="cdots"/>
+ <cn> 1 </cn>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+The processing instruction is responsible for the placement of the $\times$
+symbols.
+
+\stopsection
+
+\startsection[title={min, max, gcd, lcm}]
+
+These functions can handle more than two arguments. When typeset, these are
+separated by commas.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <eq/>
+ <ci> z </ci>
+ <apply> <min/>
+ <apply> <plus/> <ci> x </ci> <ci> y </ci> </apply>
+ <apply> <times/> <cn> 2 </cn> <ci> x </ci> </apply>
+ <apply> <divide/> <cn> 1 </cn> <ci> y </ci> </apply>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\stopsection
+
+\startsection[title={and, or, xor, not}]
+
+Logical expressions can be defined using these elements. The operations are
+represented by symbols and braces are applied when needed.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <eq/>
+ <apply> <and/>
+ <cn type="integer" base="2"> 1001 </cn>
+ <cn type="integer" base="2"> 0101 </cn>
+ </apply>
+ <cn type="integer" base="2"> 0001 </cn>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\stopsection
+
+\startsection[title={set, bvar}]
+
+The appearance of a \mmlelement {set} depends on the presence of the child
+element \mmlelement {bvar}. In its simplest form, a set is represented as a list.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <neq/>
+ <set>
+ <cn> 1 </cn>
+ <cn> 4 </cn>
+ <cn> 8 </cn>
+ </set>
+ <emptyset/>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+A set can be distinguished from a vector by its curly braces. The simplest case
+is just a comma separated list. The next example demonstrates the declarative
+case. Without doubt, there will be other alternatives.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <set>
+ <bvar><ci> x </ci></bvar>
+ <condition>
+ <apply> <lt/>
+ <cn> 2 </cn>
+ <ci> x </ci>
+ <cn> 8 </cn>
+ </apply>
+ </condition>
+ </set>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\stopsection
+
+\startsection[title={list}]
+
+This element is used in different contexts. When used as a top level element, a
+list is typeset as follows.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <list>
+ <cn> 1 </cn>
+ <cn> 1 </cn>
+ <cn> 3 </cn>
+ </list>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+When used in a context like \mmlelement {partialdiff}, the list specification
+becomes a subscript.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <partialdiff/>
+ <list>
+ <cn> 1 </cn>
+ <cn> 1 </cn>
+ <cn> 3 </cn>
+ </list>
+ <ci type="fn"> f </ci>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+The function specification in this formula (which is taken from the specs) can
+also be specified as \typ {<fn> <ci> f </ci> </fn>} (which is more clear).
+
+\stopsection
+
+\startsection[title={union, intersect, \unknown}]
+
+There is a large number of set operators, each represented by a distinctive
+symbol.
+
+\starttabulate[||c||c|] % we want in line math
+\HL
+\NC union \NC \xmldata{<math xmlns="http://www.w3c.org/mathml" version="2.0"><apply><union/> <ci>U</ci><ci>V</ci></apply></math>} \NC
+ \NC \NC \NR
+\NC intersect \NC \xmldata{<math xmlns="http://www.w3c.org/mathml" version="2.0"><apply><intersect/> <ci>U</ci><ci>V</ci></apply></math>} \NC
+ \NC \NC \NR
+\NC in \NC \xmldata{<math xmlns="http://www.w3c.org/mathml" version="2.0"><apply><in/> <ci>U</ci><ci>V</ci></apply></math>} \NC
+ notin \NC \xmldata{<math xmlns="http://www.w3c.org/mathml" version="2.0"><apply><notin/> <ci>U</ci><ci>V</ci></apply></math>} \NC \NR
+\NC subset \NC \xmldata{<math xmlns="http://www.w3c.org/mathml" version="2.0"><apply><subset/> <ci>U</ci><ci>V</ci></apply></math>} \NC
+ notsubset \NC \xmldata{<math xmlns="http://www.w3c.org/mathml" version="2.0"><apply><notsubset/> <ci>U</ci><ci>V</ci></apply></math>} \NC \NR
+\NC prsubset \NC \xmldata{<math xmlns="http://www.w3c.org/mathml" version="2.0"><apply><prsubset/> <ci>U</ci><ci>V</ci></apply></math>} \NC
+ notprsubset \NC \xmldata{<math xmlns="http://www.w3c.org/mathml" version="2.0"><apply><notprsubset/><ci>U</ci><ci>V</ci></apply></math>} \NC \NR
+\NC setdiff \NC \xmldata{<math xmlns="http://www.w3c.org/mathml" version="2.0"><apply><setdiff/> <ci>U</ci><ci>V</ci></apply></math>} \NC
+ \NC \NC \NR
+\HL
+\stoptabulate
+
+These operators are applied as follows:
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <union/>
+ <ci> U </ci>
+ <ci> V </ci>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\stopsection
+
+\startsection[title={conjugate, arg, real, imaginary}]
+
+The visual representation of \mmlelement {conjugate} is a horizontal bar with a
+width matching the width of the expression.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <conjugate/>
+ <apply> <plus/>
+ <ci> x </ci>
+ <apply> <times/>
+ <cn> &ImaginaryI; </cn>
+ <ci> y </ci>
+ </apply>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+The \mmlelement {arg}, \mmlelement {real} and \mmlelement {imaginary} elements
+trigger the following appearance.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <arg/>
+ <apply> <plus/>
+ <ci> x </ci>
+ <apply> <times/>
+ <cn> &ImaginaryI; </cn>
+ <ci> y </ci>
+ </apply>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <real/>
+ <apply> <plus/>
+ <ci> x </ci>
+ <apply> <times/>
+ <cn> &ImaginaryI; </cn>
+ <ci> y </ci>
+ </apply>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <imaginaryi/>
+ <apply> <plus/>
+ <ci> x </ci>
+ <apply> <times/>
+ <cn> &ImaginaryI; </cn>
+ <ci> y </ci>
+ </apply>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer
+
+\stopsection
+
+\startsection[title={abs, floor, ceiling}]
+
+There are a couple of functions that turn numbers into positive or rounded ones.
+In computer languages names are used, but in math we use special boundary
+characters.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <eq/>
+ <apply> <abs/> <cn> -5 </cn> </apply>
+ <cn> 5 </cn>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <eq/>
+ <apply> <floor/> <cn> 5.5 </cn> </apply>
+ <cn> 5 </cn>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <eq/>
+ <apply> <ceiling/> <cn> 5.5 </cn> </apply>
+ <cn> 6 </cn>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\stopsection
+
+\startsection[title={interval}]
+
+An interval is visualized as: \xmldata {<math xmlns="http://www.w3c.org/mathml"
+version="2.0"> <interval> <cn> 1 </cn> <cn> 10 </cn> </interval> </math>}. The
+\mmlelement {interval} element is a container element and has a begin and endtag.
+You can specify the closure as attribute:
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <interval closure="open-closed">
+ <ci> a </ci>
+ <ci> b </ci>
+ </interval>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+The following closures are supported:
+
+\starttabulate[|||]
+\HL
+\NC open \NC \xmldata {<math xmlns="http://www.w3c.org/mathml" version="2.0"> <interval closure="open"> <ci>
+ a </ci> <ci> b </ci> </interval> </math>} \NC \NR
+\NC closed \NC \xmldata {<math xmlns="http://www.w3c.org/mathml" version="2.0"> <interval closure="closed"> <ci>
+ a </ci> <ci> b </ci> </interval> </math>} \NC \NR
+\NC open-closed \NC \xmldata {<math xmlns="http://www.w3c.org/mathml" version="2.0"> <interval closure="open-closed"> <ci>
+ a </ci> <ci> b </ci> </interval> </math>} \NC \NR
+\NC closed-open \NC \xmldata {<math xmlns="http://www.w3c.org/mathml" version="2.0"> <interval closure="closed-open"> <ci>
+ a </ci> <ci> b </ci> </interval> </math>} \NC \NR
+\HL
+\stoptabulate
+
+In strict \MATHML\ we use symbols instead of attributes to define the openess:
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="3.0">
+ <apply> <csymbol cd="interval1">interval_oo</csymbol>
+ <ci>a</ci>
+ <ci>x</ci>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="3.0">
+ <apply> <csymbol cd="interval1">interval_cc</csymbol>
+ <ci>a</ci>
+ <ci>x</ci>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\stopsection
+
+\startsection[title={inverse}]
+
+This operator is applied to a function. The following example demonstrates that
+this is one of the few cases (if not the only one) where the first element
+following an \mmlelement {apply} begintag is an \mmlelement {apply} itself.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply>
+ <apply> <inverse/> <sin/> </apply>
+ <ci> x </ci>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\stopsection
+
+\startsection[title={reln}]
+
+This element is a left||over from the first \MATHML\ specification and its usage
+is no longer advocated. Its current functionality matches the functionality of
+\mmlelement {apply}.
+
+\stopsection
+
+\startsection[title={cartesianproduct, vectorproduct, scalarproduct, outerproduct}]
+
+The context of the formula will often provide information of what kind of
+multiplication is meant, but using different symbols to represent the kind of
+product certainly helps.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <cartesianproduct/>
+ <ci> a </ci>
+ <ci> b </ci>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+We have:
+
+\starttabulate[|||]
+\HL
+\NC cartesian \NC \xmldata {<math xmlns="http://www.w3c.org/mathml" version="2.0"> <apply> <cartesianproduct/> <ci>
+ a </ci> <ci> b </ci> </apply> </math>} \NC \NR
+\NC vector \NC \xmldata {<math xmlns="http://www.w3c.org/mathml" version="2.0"> <apply> <vectorproduct/> <ci>
+ a </ci> <ci> b </ci> </apply> </math>} \NC \NR
+\NC scalar \NC \xmldata {<math xmlns="http://www.w3c.org/mathml" version="2.0"> <apply> <scalarproduct/> <ci>
+ a </ci> <ci> b </ci> </apply> </math>} \NC \NR
+\NC outer \NC \xmldata {<math xmlns="http://www.w3c.org/mathml" version="2.0"> <apply> <outerproduct/> <ci>
+ a </ci> <ci> b </ci> </apply> </math>} \NC \NR
+\HL
+\stoptabulate
+
+\stopsection
+
+\startsection[title={sum, product, limit, lowlimit, uplimit, bvar}]
+
+Sums, products and limits have a distinctive look, especially when they have
+upper and lower limits attached. Unfortunately there is no way to specify the
+$x_i$ in content \MATHML. In the next chapter we will see how we can handle that.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <sum/>
+ <bvar> <ci> i </ci> </bvar>
+ <lowlimit> <cn> 1 </cn> </lowlimit>
+ <uplimit> <ci> n </ci> </uplimit>
+ <apply> <divide/>
+ <cn> 1 </cn>
+ <ci> x </ci>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+When we omit the limits, the \mmlelement {bvar} is still typeset.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <product/>
+ <bvar>
+ <ci> i </ci>
+ </bvar>
+ <apply> <divide/>
+ <cn> 1 </cn>
+ <ci> x </ci>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+You can specify the condition under which the function is applied.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <product/>
+ <bvar>
+ <ci> x </ci>
+ </bvar>
+ <condition>
+ <apply> <in/>
+ <ci> x </ci>
+ <ci type="set"> R </ci>
+ </apply>
+ </condition>
+ <apply> <ci type="fn"> f </ci>
+ <ci> x </ci>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <limit/>
+ <bvar>
+ <ci> x </ci>
+ </bvar>
+ <lowlimit>
+ <cn> 0 </cn>
+ </lowlimit>
+ <apply> <sin/>
+ <ci> x </ci>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\stopsection
+
+\startsection[title={int, diff, partialdiff, bvar, degree}]
+
+These elements reach a high level of abstraction. The best way to learn how to
+use them is to carefully study some examples.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <diff/>
+ <bvar> <ci> a </ci> </bvar>
+ <apply> <int/>
+ <lowlimit> <ci> p </ci> </lowlimit>
+ <uplimit> <ci> q </ci> </uplimit>
+ <bvar> <ci> x </ci> </bvar>
+ <apply>
+ <fn> <ci> f </ci> </fn>
+ <ci> x </ci>
+ <ci> a </ci>
+ </apply>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+The \mmlelement {bvar} element is essential, since it is used to automatically
+generate some of the components that make up the visual appearance of the
+formula. If you look at the formal specification of these elements, you will
+notice that the appearance may depend on your definition. How the formula shows
+up, depends not only on the \mmlelement {bvar} element, but also on the optional
+\mmlelement {degree} element within.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <diff/>
+ <ci> f </ci>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <diff/>
+ <bvar>
+ <ci> x </ci>
+ <degree> <cn> 2 </cn> </degree>
+ </bvar>
+ <apply> <fn> <ci> f </ci> </fn>
+ <ci> x </ci>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <partialdiff/>
+ <bvar>
+ <degree> <cn> 2 </cn> </degree>
+ <ci> x </ci>
+ </bvar>
+ <bvar> <ci> y </ci> </bvar>
+ <bvar> <ci> x </ci> </bvar>
+ <degree> <cn> 4 </cn> </degree>
+ <ci type="fn"> f </ci>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <partialdiff/>
+ <bvar>
+ <ci> x </ci> <degree> <ci> m </ci> </degree>
+ </bvar>
+ <bvar>
+ <ci> y </ci> <degree> <ci> n </ci> </degree>
+ </bvar>
+ <degree> <ci> k </ci> </degree>
+ <apply> <ci type="fn"> f </ci>
+ <ci> x </ci>
+ <ci> y </ci>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <partialdiff/>
+ <bvar>
+ <ci> x </ci> <degree> <ci> m </ci> </degree>
+ </bvar>
+ <bvar>
+ <ci> y </ci> <degree> <ci> n </ci> </degree>
+ </bvar>
+ <apply> <ci type="fn"> f </ci>
+ <ci> x </ci>
+ <ci> y </ci>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+When a degree is not specified, it is deduced from the context, but since this is
+not 100\% robust, you can best be complete in your specification.
+
+These examples are taken from the \MATHML\ specification. In the example document
+that comes with this manual you can find a couple more.
+
+\stopsection
+
+\startsection[title={fn}]
+
+There are a lot of predefined functions and operators. If you want to introduce a
+new one, the \mmlelement {fn} element can be used. In the following example we
+have turned the $\pm$ and $\mp$ symbols into (coupled) operators.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <eq/>
+ <apply> <times/>
+ <apply> <fn> <ci> &plusminus; </ci> </fn>
+ <ci> x </ci>
+ <cn> 1 </cn>
+ </apply>
+ <apply> <fn> <ci> &minusplus; </ci> </fn>
+ <ci> x </ci>
+ <cn> 1 </cn>
+ </apply>
+ </apply>
+ <apply> <minus/>
+ <apply> <power/>
+ <ci> x </ci>
+ <cn> 2 </cn>
+ </apply>
+ <cn> 1 </cn>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+The typeset result depends on the presence of a handler, which in this case
+happens to be true.
+
+\stopsection
+
+\startsection[title={matrix, matrixrow}]
+
+A matrix is one of the building blocks of linear algebra and therefore both
+presentational and content \MATHML\ have dedicated elements for defining it.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <matrix>
+ <matrixrow> <cn> 23 </cn> <cn> 87 </cn> <ci> c </ci> </matrixrow>
+ <matrixrow> <cn> 41 </cn> <ci> b </ci> <cn> 33 </cn> </matrixrow>
+ <matrixrow> <ci> a </ci> <cn> 65 </cn> <cn> 16 </cn> </matrixrow>
+ </matrix>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\stopsection
+
+\startsection[title={vector}]
+
+We make a difference between a vector specification and a vector variable. A
+specification is presented as a list:
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <vector>
+ <ci> x </ci>
+ <ci> y </ci>
+ </vector>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+When the \mmlelement {vector} element has one child element, we use a right arrow
+to identify the variable as vector.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <vectorproduct/>
+ <vector> <ci> A </ci> </vector>
+ <vector> <ci> B </ci> </vector>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\stopsection
+
+\startsection[title={grad, curl, ident, divergence}]
+
+These elements expand into named functions, but we can imagine that in the future
+a more appropriate visualization will be provided as an option.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <neq/>
+ <apply> <grad/> <ci> A </ci> </apply>
+ <apply> <curl/> <ci> B </ci> </apply>
+ <apply> <ident/> <ci> C </ci> </apply>
+ <apply> <divergence/> <ci> D </ci> </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\stopsection
+
+\startsection[title={lambda, bvar}]
+
+The lambda specification of a function needs a \mmlelement {bvar} element. The
+visualization can be influenced with processing instructions as described in a
+later chapter.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <lambda>
+ <bvar> <ci> x </ci> </bvar>
+ <apply> <sin/>
+ <apply> <minus/>
+ <ci> x </ci>
+ <apply> <divide/>
+ <ci> x </ci>
+ <cn> 2 </cn>
+ </apply>
+ </apply>
+ </apply>
+ </lambda>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\stopsection
+
+\startsection[title={piecewise, piece, otherwise}]
+
+There are not so many elements that deal with combinations of formulas or
+conditions. The \mmlelement {piecewise} is the only real selector available. The
+following example defines how the state of~$n$ depends on the state of~$x$.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <eq/>
+ <ci> n </ci>
+ <piecewise>
+ <piece>
+ <apply> <minus/>
+ <cn> 1 </cn>
+ </apply>
+ <apply> <lt/>
+ <ci> x </ci>
+ <cn> 0 </cn>
+ </apply>
+ </piece>
+ <piece>
+ <cn> 1 </cn>
+ <apply> <gt/>
+ <ci> x </ci>
+ <cn> 0 </cn>
+ </apply>
+ </piece>
+ <otherwise>
+ <cn> 0 </cn>
+ </otherwise>
+ </piecewise>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+We could have used a third \mmlelement {piece} instead of (optional) \mmlelement
+{otherwise}.
+
+\stopsection
+
+\startsection[title={forall, exists, condition}]
+
+Conditions are often used in combination with elements like \mmlelement {forall}.
+There are several ways to convert and combine them in formulas and environments,
+so you may expect more alternatives in the future.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <forall/>
+ <bvar> <ci> x </ci> </bvar>
+ <condition>
+ <apply> <lt/>
+ <ci> x </ci>
+ <cn> 9 </cn>
+ </apply>
+ </condition>
+ <apply> <lt/>
+ <ci> x </ci>
+ <cn> 10 </cn>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+The next example is taken from the specifications with a few small changes.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <forall/>
+ <bvar> <ci> x </ci> </bvar>
+ <condition>
+ <apply> <in/>
+ <ci> x </ci>
+ <ci type="set"> N </ci>
+ </apply>
+ </condition>
+ <apply> <exists/>
+ <bvar> <ci> p </ci> </bvar>
+ <bvar> <ci> q </ci> </bvar>
+ <condition>
+ <apply> <and/>
+ <apply> <in/>
+ <ci> p </ci>
+ <ci type="set"> P </ci>
+ </apply>
+ <apply> <in/>
+ <ci> q </ci>
+ <ci type="set"> P </ci>
+ </apply>
+ <apply> <eq/>
+ <apply> <plus/> <ci> p </ci> <ci> q </ci> </apply>
+ <apply> <times/> <cn> 2 </cn> <ci> x </ci> </apply>
+ </apply>
+ </apply>
+ </condition>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\stopsection
+
+\startsection[title={factorof, tendsto}]
+
+The \mmlelement {factorof} element is applied to its two child elements and
+contrary to most functions, the symbol is placed between the elements instead of
+in front.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <factorof/>
+ <ci> a </ci>
+ <ci> b </ci>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+The same is true for the \mmlelement {tendsto} element.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <tendsto/>
+ <ci> a </ci>
+ <ci> b </ci>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\stopsection
+
+\startsection[title={compose}]
+
+This is a nasty element since it has to take care of braces in special ways and
+therefore has to analyse its child elements.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <compose/>
+ <ci type="fn"> f </ci>
+ <ci type="fn"> g </ci>
+ <ci type="fn"> h </ci>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply>
+ <apply> <compose/>
+ <fn> <ci> f </ci> </fn>
+ <fn> <ci> g </ci> </fn>
+ </apply>
+ <ci> x </ci>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\stopsection
+
+\startsection[title={laplacian}]
+
+A laplacian function is typeset using a $\nabla$ (nabla) symbol.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <laplacian/>
+ <ci> x </ci>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\stopsection
+
+\startsection[title={mean, sdev, variance, median, mode}]
+
+When statistics shows up in math text books, the \mmlelement {sum} element is
+likely to show up, probably in combination with the for statistics meaningful
+symbolic representation of variables. The mean value of a series of observations
+is defined as:
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <eq/>
+ <apply> <mean/>
+ <ci> x </ci>
+ </apply>
+ <apply> <divide/>
+ <apply> <sum/>
+ <ci> x </ci>
+ </apply>
+ <ci> n </ci>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+or more beautiful:
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <eq/>
+ <apply> <mean/>
+ <ci> x </ci>
+ </apply>
+ <apply> <times/>
+ <apply> <divide/>
+ <cn> 1 </cn>
+ <ci> n </ci>
+ </apply>
+ <apply> <sum/>
+ <ci> x </ci>
+ </apply>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+Of course this definition is not that perfect, but we will present a better
+alternative in the chapter on combined markup. The definition of the standard
+deviation is more complicated:
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <approx/>
+ <apply> <sdev/>
+ <ci> x </ci>
+ </apply>
+ <apply> <root/>
+ <apply> <divide/>
+ <apply> <sum/>
+ <apply> <power/>
+ <apply> <minus/>
+ <ci> x </ci>
+ <apply> <mean/>
+ <ci> x </ci>
+ </apply>
+ </apply>
+ <cn> 2 </cn>
+ </apply>
+ </apply>
+ <apply> <minus/>
+ <ci> n </ci>
+ <cn> 1 </cn>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+The next example demonstrates the usage of the \mmlelement {variance} in its own
+definition.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <eq/>
+ <apply> <variance/>
+ <ci> x </ci>
+ </apply>
+ <apply> <approx/>
+ <apply> <mean/>
+ <apply> <power/>
+ <apply> <minus/>
+ <ci> x </ci>
+ <apply> <mean/>
+ <ci> x </ci>
+ </apply>
+ </apply>
+ <cn> 2 </cn>
+ </apply>
+ </apply>
+ <apply> <times/>
+ <apply> <divide/>
+ <cn> 1 </cn>
+ <apply> <minus/>
+ <ci> n </ci>
+ <cn> 1 </cn>
+ </apply>
+ </apply>
+ <apply> <sum/>
+ <apply> <power/>
+ <apply> <minus/>
+ <ci> x </ci>
+ <apply> <mean/>
+ <ci> x </ci>
+ </apply>
+ </apply>
+ <cn> 2 </cn>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+The \mmlelement {median} and \mmlelement {mode} of a series of observations have
+no special symbols and are presented as is.
+
+\stopsection
+
+\startsection[title={moment, momentabout, degree}]
+
+Because \MATHML\ is used for a wide range of applications, there can be
+information in a definition that does not end up in print but is only used in
+some cases. This is illustrated in the next example.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <moment/>
+ <degree>
+ <cn> 3 </cn>
+ </degree>
+ <momentabout>
+ <ci> p </ci>
+ </momentabout>
+ <ci> X </ci>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\stopsection
+
+\startsection[title={determinant, transpose}]
+
+These two (and the following) are used to manipulate matrices, either or not in a
+symbolic way. A simple determinant or transpose looks like:
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <determinant/>
+ <ci type="matrix"> A </ci>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <transpose/>
+ <ci type="matrix"> A </ci>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+When the \mmlelement {determinant} element is applied to a full blown matrix, the
+braces are omitted and replaced by the vertical bars.
+
+\processxmlfile{wh-m-002.xml} \typefile{wh-m-002.xml}
+
+\stopsection
+
+\startsection[title={selector}]
+
+The \mmlelement {selector} element can be used to index a matrix cell or
+variable. This element honors the braces.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <selector/>
+ <matrix>
+ <matrixrow> <cn> 1 </cn> <cn> 2 </cn> </matrixrow>
+ <matrixrow> <cn> 3 </cn> <cn> 4 </cn> </matrixrow>
+ </matrix>
+ <cn> 1 </cn>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+A more common usage of the selector is the following:
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <selector/>
+ <ci> x </ci>
+ <ci> i </ci>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+It is possible to pass a comma separated list of indices:
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <selector/>
+ <ci> x </ci> <cn> 1,2 </cn>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+If you want to have a more verbose index, you can use the \mmlelement {csymbol}
+element, flagged with text encoding.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <selector/>
+ <ci> x </ci>
+ <csymbol encoding="text"> max </csymbol>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\stopsection
+
+\startsection[title={card}]
+
+A cardinality is visualized using vertical bars.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <eq/>
+ <apply> <card/>
+ <ci> A </ci>
+ </apply>
+ <ci> 5 </ci>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\stopsection
+
+\startsection[title={domain, codomain, image}]
+
+The next couple of examples are taken from the \MATHML\ specification and
+demonstrate the usage of the not that spectacular domain related elements.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <eq/>
+ <apply> <domain/>
+ <fn> <ci> f </ci> </fn>
+ </apply>
+ <reals/>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+These are typically situations where the \mmlelement {fn} element may show up.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <eq/>
+ <apply> <codomain/>
+ <fn> <ci> f </ci> </fn>
+ </apply>
+ <rationals/>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+This example from the \MATHML\ specification demonstrates a typical usage of the
+\mmlelement {image} element. As with the previous two, it is applied to a
+function, in this case the predefined \mmlelement {sin}.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <eq/>
+ <apply> <image/>
+ <sin/>
+ </apply>
+ <interval>
+ <cn> -1 </cn>
+ <cn> 1 </cn>
+ </interval>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\stopsection
+
+\startsection[title={domainofapplication}]
+
+This is another seldom used element. Actually, this element is a further
+specification of the outer level applied function.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <int/>
+ <domainofapplication>
+ <ci> C </ci>
+ </domainofapplication>
+ <ci> f </ci>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\stopsection
+
+\startsection[title={semantics, annotation, annotation-xml}]
+
+We will never know what Albert Einstein would have thought about \MATHML. But we
+do know for sure that coding one of his famous findings in \XML\ takes much more
+tokens that it takes in \TEX.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <semantics>
+ <apply> <eq/>
+ <ci> e </ci>
+ <apply> <times/>
+ <ci> m </ci>
+ <apply> <power/>
+ <ci> c </ci>
+ <cn> 2 </cn>
+ </apply>
+ </apply>
+ </apply>
+ <annotation encoding="tex">
+ e = m c^2
+ </annotation>
+ </semantics>
+</math>
+\stopbuffer
+
+Within a \mmlelement {semantics} element there can be many \mmlelement
+{annotation} elements. When using \CONTEXT, the elements that can be identified
+as being encoded in \TEX\ will be treated as such. Currently, the related
+\mmlelement {annotation-xml} element is ignored.
+
+\processxmlbuffer \typebuffer
+
+Another variant that we support is called \quote {calcmath} which is an efficient
+way to enter school math. The syntax resembles the one used in advanced
+calculators.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <semantics>
+ <annotation encoding="calcmath">
+ x = sqrt(sin(x) + cos(c))
+ </annotation>
+ </semantics>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\stopsection
+
+\startsection[title={integers, reals, ...}]
+
+Sets of numbers are characterized with special (often blackboard) symbols. These
+symbols are not always available.
+
+\starttabulate[|||] % we want in line math
+\HL
+\NC integers \NC \xmldata{<math xmlns="http://www.w3c.org/mathml" version="2.0"><integers/> </math>} \NC \NR
+\NC reals \NC \xmldata{<math xmlns="http://www.w3c.org/mathml" version="2.0"><reals/> </math>} \NC \NR
+\NC rationals \NC \xmldata{<math xmlns="http://www.w3c.org/mathml" version="2.0"><rationals/> </math>} \NC \NR
+\NC naturalnumbers \NC \xmldata{<math xmlns="http://www.w3c.org/mathml" version="2.0"><naturalnumbers/></math>} \NC \NR
+\NC complexes \NC \xmldata{<math xmlns="http://www.w3c.org/mathml" version="2.0"><complexes/> </math>} \NC \NR
+\NC primes \NC \xmldata{<math xmlns="http://www.w3c.org/mathml" version="2.0"><primes/> </math>} \NC \NR
+\HL
+\stoptabulate
+
+\stopsection
+
+\startsection[title={pi, imaginaryi, exponentiale}]
+
+Being a greek character, $\pi$ is a distinctive character. In most math documents
+the imaginary~$i$ and exponential~$e$ are typeset as any math identifier.
+
+\starttabulate[|||] % we want in line math
+\HL
+\NC pi \NC \xmldata{<math xmlns="http://www.w3c.org/mathml" version="2.0"><pi/> </math>} \NC \NR
+\NC imaginaryi \NC \xmldata{<math xmlns="http://www.w3c.org/mathml" version="2.0"><imaginaryi/> </math>} \NC \NR
+\NC exponentiale \NC \xmldata{<math xmlns="http://www.w3c.org/mathml" version="2.0"><exponentiale/></math>} \NC \NR
+\HL
+\stoptabulate
+
+\stopsection
+
+\startsection[title={eulergamma, infinity, emptyset}]
+
+There are a couple of more special tokens. As with the other ones, they can be
+changed by reassigning the corresponding entities.
+
+\starttabulate[|||] % we want in line math
+\HL
+\NC eulergamma \NC \xmldata{<math xmlns="http://www.w3c.org/mathml" version="2.0"><eulergamma/></math>} \NC \NR
+\NC infinity \NC \xmldata{<math xmlns="http://www.w3c.org/mathml" version="2.0"><infinity/> </math>} \NC \NR
+\NC emptyset \NC \xmldata{<math xmlns="http://www.w3c.org/mathml" version="2.0"><emptyset/> </math>} \NC \NR
+\HL
+\stoptabulate
+
+\stopsection
+
+\startsection[title={notanumber}]
+
+Because \MATHML\ is used for more purposes than typesetting, there are a couple
+of elements that do not make much sense in print. One of these is \mmlelement
+{notanumber}, which is issued by programs as error code or string.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <eq/>
+ <apply> <divide/>
+ <ci> x </ci>
+ <cn> 0 </cn>
+ </apply>
+ <notanumber/>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\stopsection
+
+\startsection[title={true, false}]
+
+When assigning to a boolean variable, or in boolean expressions one can use~$0$
+or~$1$ to identify the states, but if you want to be more verbose, you can use
+these elements.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <equivalent/>
+ <cn type="integer" base="2"> 1 </cn>
+ <true/>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\stopsection
+
+\startsection[title={declare}]
+
+Reusing definitions would be a nice feature, but for the moment the formal
+specification of this element does not give us the freedom to use it the way we
+want.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <declare>
+ <ci> A </ci>
+ <vector>
+ <ci> a </ci>
+ <ci> b </ci>
+ <ci> c </ci>
+ </vector>
+ </declare>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\stopsection
+
+\startsection[title={csymbol}]
+
+This element will be implemented as soon as we have an application for it.
+
+\stopsection
+
+\stopchapter
+
+\startchapter[title={Mixed markup}]
+
+\startsection[title={introduction}]
+
+The advantage of presentational markup is that you can build complicated formulas
+using super- and subscripts and other elements. The drawback is that the look and
+feel is rather fixed and cannot easily be adapted to the purpose that the
+document serves. Take for instance the difference between
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <log/>
+ <logbase> <cn> 2 </cn> </logbase>
+ <ci> x </ci>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer
+
+and
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <?context-mathml-directive log location left ?>
+ <apply> <log/>
+ <logbase> <cn> 2 </cn> </logbase>
+ <ci> x </ci>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer
+
+Both formulas were defined in content \MATHML, so no explicit super- and
+subscripts were used. In the next chapter we will see how to achieve such
+different appearances.
+
+There are situations where content \MATHML\ is not rich enough to achieve the
+desired output. This omission in content \MATHML\ forces us to fall back on
+presentational markup.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <eq/>
+ <ci> <msub> <mi> P </mi> <mi> 1 </mi> </msub> </ci>
+ <ci> <msub> <mi> P </mi> <mi> 2 </mi> </msub> </ci>
+ <apply> <approx/>
+ <cn> 1.01 </cn>
+ <cn> 1 </cn>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer
+
+Here we used presentational elements inside a content \mmlelement {ci} element.
+We could have omitted the outer \mmlelement {ci} element, but since the content
+\MATHML\ parser may base its decisions on the content elements it finds, it is
+best to keep the outer element there.
+
+\typebuffer
+
+The lack of an index element can be quite prominent. For instance, when in an
+expose about rendering we want to explore the mapping from coordinates in user
+space to those in device space, we use the following formula.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <eq/>
+ <vector>
+ <ci> <msub> <mi> D </mi> <mi> x </mi> </msub> </ci>
+ <ci> <msub> <mi> D </mi> <mi> y </mi> </msub> </ci>
+ <cn> 1 </cn>
+ </vector>
+ <apply> <times/>
+ <vector>
+ <ci> <msub> <mi> U </mi> <mi> x </mi> </msub> </ci>
+ <ci> <msub> <mi> U </mi> <mi> y </mi> </msub> </ci>
+ <cn> 1 </cn>
+ </vector>
+ <matrix>
+ <matrixrow>
+ <ci> <msub> <mi> s </mi> <mi> x </mi> </msub> </ci>
+ <ci> <msub> <mi> r </mi> <mi> x </mi> </msub> </ci>
+ <cn> 0 </cn>
+ </matrixrow>
+ <matrixrow>
+ <ci> <msub> <mi> r </mi> <mi> y </mi> </msub> </ci>
+ <ci> <msub> <mi> s </mi> <mi> y </mi> </msub> </ci>
+ <cn> 0 </cn>
+ </matrixrow>
+ <matrixrow>
+ <ci> <msub> <mi> t </mi> <mi> x </mi> </msub> </ci>
+ <ci> <msub> <mi> t </mi> <mi> y </mi> </msub> </ci>
+ <cn> 1 </cn>
+ </matrixrow>
+ </matrix>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+Again, the \mmlelement {msub} element provides a way out, as in the next
+examples, which are adapted versions of formulas we used when demonstrating the
+statistics related elements.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <eq/>
+ <apply> <mean/>
+ <ci> x </ci>
+ </apply>
+ <apply> <times/>
+ <apply> <divide/>
+ <cn> 1 </cn>
+ <ci> n </ci>
+ </apply>
+ <apply> <sum/>
+ <bvar> <ci> i </ci> </bvar>
+ <ci> x </ci>
+ </apply>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <eq/>
+ <apply> <mean/>
+ <ci> x </ci>
+ </apply>
+ <apply> <times/>
+ <apply> <divide/>
+ <cn> 1 </cn>
+ <ci> n </ci>
+ </apply>
+ <apply> <sum/>
+ <bvar> <ci> i </ci> </bvar>
+ <lowlimit> <cn> 1 </cn> </lowlimit>
+ <uplimit> <cn> n </cn> </uplimit>
+ <ci> x </ci>
+ </apply>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <eq/>
+ <apply> <mean/>
+ <ci> x </ci>
+ </apply>
+ <apply> <times/>
+ <apply> <divide/>
+ <cn> 1 </cn>
+ <ci> n </ci>
+ </apply>
+ <apply> <sum/>
+ <bvar> <ci> i </ci> </bvar>
+ <lowlimit> <cn> 1 </cn> </lowlimit>
+ <uplimit> <cn> n </cn> </uplimit>
+ <ci> <msub> <mi> x </mi> <mi> i </mi> </msub> </ci>
+ </apply>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+You can also use a selector for indexing, so in practice we can avoid the mixed
+mode:
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <eq/>
+ <vector>
+ <apply> <selector/> <ci> D </ci> <ci> x </ci> </apply>
+ <apply> <selector/> <ci> D </ci> <ci> y </ci> </apply>
+ <cn> 1 </cn>
+ </vector>
+ <apply> <times/>
+ <vector>
+ <apply> <selector/> <ci> U </ci> <ci> x </ci> </apply>
+ <apply> <selector/> <ci> U </ci> <ci> y </ci> </apply>
+ <cn> 1 </cn>
+ </vector>
+ <matrix>
+ <matrixrow>
+ <apply> <selector/> <ci> s </ci> <ci> x </ci> </apply>
+ <apply> <selector/> <ci> r </ci> <ci> x </ci> </apply>
+ <cn> 0 </cn>
+ </matrixrow>
+ <matrixrow>
+ <apply> <selector/> <ci> s </ci> <ci> y </ci> </apply>
+ <apply> <selector/> <ci> r </ci> <ci> y </ci> </apply>
+ <cn> 0 </cn>
+ </matrixrow>
+ <matrixrow>
+ <apply> <selector/> <ci> t </ci> <ci> x </ci> </apply>
+ <apply> <selector/> <ci> t </ci> <ci> y </ci> </apply>
+ <cn> 1 </cn>
+ </matrixrow>
+ </matrix>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\stopsection
+
+\stopchapter
+
+\startchapter[title={Directives}]
+
+Some elements can be tuned by changing their attributes. Especially when formulas
+are defined by a team of people or when they are taken from a repository, there
+is a good chance that inconsistencies will show up.
+
+In \CONTEXT, you can influence the appearance by setting the typesetting
+parameters of (classes of) elements. You can do this either by adding processing
+instructions, or by using the \CONTEXT\ command \type {\setupMMLappearance}.
+Although the first method is more in the spirit of \XML, the second method is
+more efficient and consistent. As a processing instruction, a directive looks
+like:
+
+\starttyping
+<?context-mathml-directive element key value ?>
+\stoptyping
+
+This is equivalent to the \CONTEXT\ command:
+
+\starttyping
+\setupMMLappearance [element] [key=value]
+\stoptyping
+
+Some settings concern a group of elements, in which case a group classification
+(like \type {sign}) is used.
+
+\startsection[title={scripts}]
+
+By default, nested super- and subscripts are kind of isolated from each other. If
+you want a combined script, there is the \mmlelement {msubsup}. You can however
+force combinations with a directive.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <msup>
+ <msub> <mi> x </mi> <mn> 1 </mn> </msub>
+ <mn> 2 </mn>
+ </msup>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<?context-mathml-directive scripts alternative b ?>
+
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <msup>
+ <msub> <mi> x </mi> <mn> 1 </mn> </msub>
+ <mn> 2 </mn>
+ </msup>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\stopsection
+
+\startsection[title={sign}]
+
+The core element of \MATHML\ is \mmlelement {apply}. Even simple formulas will
+often have more than one (nested) \mmlelement {apply}. The most robust way to
+handle nested formulas is to use braces around each sub formula. No matter how
+robust this is, when presented in print we want to use as less braces as
+possible. The next example shows addition as well as subtraction.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <plus/>
+ <cn> 7 </cn>
+ <cn> 5 </cn>
+ <apply> <minus/>
+ <cn> 3 </cn>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+In principle subtraction is adding negated numbers, so it would have been natural
+to have just an addition (\mmlelement {plus}) and negation operator. However,
+\MATHML\ provides both a \mmlelement {plus} and \mmlelement {minus} operator,
+where the latter can be used as a negation. So in fact we have:
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <?context-mathml-directive sign reduction no ?>
+ <apply> <plus/>
+ <cn> 7 </cn>
+ <cn> 5 </cn>
+ <apply> <minus/>
+ <cn> 3 </cn>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer
+
+Now imagine that a teacher wants to stress this negation in the way presented
+here, using parentheses. Since all the examples shown here are typeset directly
+from the \MATHML\ source, you may expect a solution, so here it is:
+
+\typebuffer
+
+By default signs are reduced, but one can disable that at the document and|/|or
+formula level using a processing instruction at the top of the formula. There are
+of course circumstances where the parentheses cannot be left out.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <plus/>
+ <ci> a </ci>
+ <apply> <plus/> <ci> b </ci> <ci> c </ci> </apply>
+ <ci> d </ci>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <minus/>
+ <ci> a </ci>
+ <apply> <minus/> <ci> b </ci> <ci> c </ci> </apply>
+ <ci> d </ci>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <plus/>
+ <ci> a </ci>
+ <apply> <minus/> <ci> b </ci> <ci> c </ci> </apply>
+ <ci> d </ci>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <minus/>
+ <ci> a </ci>
+ <apply> <plus/> <ci> b </ci> <ci> c </ci> </apply>
+ <ci> d </ci>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+Another place where parentheses are not needed is the following:
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <minus/>
+ <apply> <exp/>
+ <cn> 3 </cn>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\typebuffer
+
+This means that the interpreter of this kind of \MATHML\ has to analyze child
+elements in order to choose the right way to typeset the formula. The output will
+look like:
+
+\processxmlbuffer
+
+By default, as less braces as possible are used. As demonstrated, a special case
+is when \mmlelement {plus} and \mmlelement {minus} have one sub element to deal
+with. If you really want many braces there, you can turn off sign reduction.
+
+\startdirectives
+\HL
+\NC sign \NC reduction \NC yes \NC use as less braces as possible \NC \NR
+\NC \NC \NC no \NC always use braces \NC \NR
+\HL
+\stopdirectives
+
+We will demonstrate these alternatives with an example.
+
+\startbuffer[a]
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <plus/>
+ <ci> a </ci>
+ <apply> <sin/>
+ <ci> b </ci>
+ </apply>
+ <apply> <power/>
+ <ci> c </ci>
+ <cn> 5 </cn>
+ </apply>
+ <apply> <power/>
+ <apply> <sin/>
+ <ci> d </ci>
+ </apply>
+ <cn> 2 </cn>
+ </apply>
+ <ci> e </ci>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer[a]
+
+We need quite some code to encode this formula.
+
+\typebuffer[a]
+
+\startbuffer[b]
+<?context-mathml-directive power reduction no ?>
+\stopbuffer
+
+With power reduction turned off, we get:
+
+\processxmlbuffer[b,a]
+
+As directive we used:
+
+\typebuffer[b]
+
+The following example illustrates that we should be careful in coding such
+formulas; here the \mmlelement {power} is applied to the argument of \mmlelement
+{sin}.
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <plus/>
+ <ci> a </ci>
+ <apply> <sin/>
+ <ci> b </ci>
+ </apply>
+ <apply> <power/>
+ <ci> c </ci>
+ <cn> 5 </cn>
+ </apply>
+ <apply> <sin/>
+ <apply> <power/>
+ <ci> d </ci>
+ <cn> 2 </cn>
+ </apply>
+ </apply>
+ <ci> e </ci>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+\stopsection
+
+\startsection[title={divide}]
+
+Divisions can be very space consuming but there is a way out: using a forward
+slash symbol. You can set the level at which this will take place. By default,
+fractions are typeset in the traditional way.
+
+\startbuffer[a]
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <divide/>
+ <cn> 1 </cn>
+ <apply> <plus/>
+ <cn> 1 </cn>
+ <apply> <divide/>
+ <cn> 1 </cn>
+ <ci> x </ci>
+ </apply>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\startbuffer[b]
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <divide/>
+ <cn> 1 </cn>
+ <apply> <plus/>
+ <cn> 1 </cn>
+ <apply> <divide/>
+ <cn> 1 </cn>
+ <apply> <plus/>
+ <cn> 1 </cn>
+ <apply> <divide/>
+ <cn> 1 </cn>
+ <ci> x </ci>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer[a] \typebuffer[a]
+\processxmlbuffer[b] \typebuffer[b]
+
+\startbuffer[c]
+<?context-mathml-directive divide level 1 ?>
+\stopbuffer
+
+\processxmlbuffer[c,a] \processxmlbuffer[c,b] \typebuffer[c]
+
+\startbuffer[c]
+<?context-mathml-directive divide level 2 ?>
+\stopbuffer
+
+\processxmlbuffer[c,a] \processxmlbuffer[c,b] \typebuffer[c]
+
+\stopsection
+
+\startsection[title={relation}]
+
+You should keep in mind that (at least level 2) content \MATHML\ is not that rich
+in terms of presenting your ideas in a visually attractive way. On the other
+hand, because the content is highly structured, some intelligence can be applied
+when typesetting them. By default, a relation is not vertically aligned but
+typeset horizontally.
+
+If an application just needs raw formulas, definitions like the following are all
+right.
+
+\startbuffer[a]
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <eq/>
+ <apply> <plus/>
+ <ci> a </ci>
+ <ci> b </ci>
+ <ci> c </ci>
+ </apply>
+ <apply> <plus/>
+ <ci> d </ci>
+ <ci> e </ci>
+ </apply>
+ <apply> <plus/>
+ <ci> f </ci>
+ <ci> g </ci>
+ <ci> h </ci>
+ <ci> i </ci>
+ </apply>
+ <cn> 123 </cn>
+ </apply>
+</math>
+\stopbuffer
+
+\typebuffer[a]
+
+The typeset result will bring no surprises:
+
+\processxmlbuffer[a]
+
+But, do we want to show a formula that way? And what happens with much longer
+formulas? You can influence the appearance with processing instructions.
+
+\startdirectives
+\HL
+\NC relation \NC align \NC no \NC don't align relations \NC \NR
+\NC \NC \NC left \NC align all relations left \NC \NR
+\NC \NC \NC right \NC align all relations right \NC \NR
+\NC \NC \NC first \NC place the leftmost relation left \NC \NR
+\NC \NC \NC last \NC place the rightmost relation right \NC \NR
+\HL
+\stopdirectives
+
+The next couple of formulas demonstrate in what way the previously defined
+formula is influenced by the processing instructions.
+
+\startbuffer[b]
+<?context-mathml-directive relation align left ?>
+\stopbuffer
+
+\processxmlbuffer[b,a] \typebuffer[b]
+
+\startbuffer[b]
+<?context-mathml-directive relation align right ?>
+\stopbuffer
+
+\processxmlbuffer[b,a] \typebuffer[b]
+
+\startbuffer[b]
+<?context-mathml-directive relation align first ?>
+\stopbuffer
+
+\processxmlbuffer[b,a] \typebuffer[b]
+
+\startbuffer[b]
+<?context-mathml-directive relation align last ?>
+\stopbuffer
+
+\processxmlbuffer[b,a] \typebuffer[b]
+
+\stopsection
+
+\startsection[title={base}]
+
+When in a document several number systems are used, it can make sense to mention
+the base of the number. There are several ways to identify the base.
+
+\startdirectives
+\HL
+\NC base \NC symbol \NC numbers \NC a (decimal) number \NC \NR
+\NC \NC \NC characters \NC one character \NC \NR
+\NC \NC \NC text \NC a mnemonic \NC \NR
+\NC \NC \NC no \NC no symbol \NC \NR
+\HL
+\stopdirectives
+
+By default, when specified, a base is identified as number.
+
+\startbuffer[a]
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <cn type="integer" base="8"> 1427 </cn>
+</math>
+\stopbuffer
+
+\typebuffer[a]
+
+\startbuffer[b]
+<?context-mathml-directive base symbol numbers ?>
+\stopbuffer
+
+\processxmlbuffer[b,a] \typebuffer[b]
+
+\startbuffer[b]
+<?context-mathml-directive base symbol characters ?>
+\stopbuffer
+
+\processxmlbuffer[b,a] \typebuffer[b]
+
+\startbuffer[b]
+<?context-mathml-directive base symbol text ?>
+\stopbuffer
+
+\processxmlbuffer[b,a] \typebuffer[b]
+
+\stopsection
+
+\startsection[title={function}]
+
+There is a whole bunch of functions available as empty element, like \mmlelement
+{sin} and \mmlelement {log}. When a function is applied to a function, braces
+make not much sense and placement is therefore disabled.
+
+\startdirectives
+\HL
+\NC function \NC reduction \NC yes \NC chain functions without braces \NC \NR
+\NC \NC \NC no \NC put braces around nested functions \NC \NR
+\HL
+\stopdirectives
+
+\startbuffer[a]
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <sin/> <ci> x </ci> </apply>
+</math>
+\stopbuffer
+
+\typebuffer[a]
+
+\startbuffer[b]
+<?context-mathml-directive function reduction yes ?>
+\stopbuffer
+
+\processxmlbuffer[b,a] \typebuffer[b]
+
+\startbuffer[b]
+<?context-mathml-directive function reduction no ?>
+\stopbuffer
+
+\processxmlbuffer[b,a] \typebuffer[b]
+
+\stopsection
+
+\startsection[title={limits}]
+
+When limits are placed on top of the limitation symbol, this generally looks
+better than when they are placed alongside. You can also influence limit
+placement per element. This feature is available for \mmlelement{int},
+\mmlelement {sum}, \mmlelement {product} and \mmlelement {limit}.
+
+\startdirectives
+\HL
+\NC limit \NC location \NC top \NC place limits on top of the symbols \NC \NR
+\NC \NC \NC right \NC attached limits as super/subscripts \NC \NR
+\HL
+\stopdirectives
+
+\startbuffer[a]
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <int/>
+ <bvar> <ci> x </ci> </bvar>
+ <lowlimit> <cn> 0 </cn> </lowlimit>
+ <uplimit> <cn> 1 </cn> </uplimit>
+ </apply>
+</math>
+\stopbuffer
+
+\typebuffer[a]
+
+\startbuffer[b]
+<?context-mathml-directive int location top ?>
+\stopbuffer
+
+\processxmlbuffer[b,a] \typebuffer[b]
+
+\startbuffer[b]
+<?context-mathml-directive int location right ?>
+\stopbuffer
+
+\processxmlbuffer[b,a] \typebuffer[b]
+
+\stopsection
+
+\startsection[title={declare}]
+
+Currently declarations are not supposed to end up in print. By default we typeset
+a message, but you can as well completely hide declarations.
+
+\startdirectives
+\HL
+\NC declare \NC state \NC start \NC show declarations \NC \NR
+\NC \NC \NC stop \NC ignore (hide) declarations \NC \NR
+\HL
+\stopdirectives
+
+\stopsection
+
+\startsection[title={lambda}]
+
+There is more than one way to visualize a lambda function. As with some other
+settings, changing the appearance can best take place at the document level.
+
+\startdirectives
+\HL
+\NC lambda \NC alternative \NC b \NC show lambda as arrow \NC \NR
+\NC \NC \NC a \NC show lambda as set \NC \NR
+\HL
+\stopdirectives
+
+\startbuffer[a]
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <lambda>
+ <bvar> <ci> x </ci> </bvar>
+ <apply> <log/>
+ <ci> x </ci>
+ </apply>
+ </lambda>
+</math>
+\stopbuffer
+
+\typebuffer[a]
+
+\startbuffer[b]
+<?context-mathml-directive lambda alternative a ?>
+\stopbuffer
+
+\processxmlbuffer[b,a] \typebuffer[b]
+
+\startbuffer[b]
+<?context-mathml-directive lambda alternative b ?>
+\stopbuffer
+
+\processxmlbuffer[b,a] \typebuffer[b]
+
+\stopsection
+
+\startsection[title={power}]
+
+Taking the power of a function looks clumsy when braces are put around the
+function. Therefore, by default, the power is applied to the function symbol
+instead of the whole function.
+
+\startdirectives
+\HL
+\NC power \NC reduction \NC yes \NC attach symbol to function symbol \NC \NR
+\NC \NC \NC no \NC attach symbol to function argument \NC \NR
+\HL
+\stopdirectives
+
+\startbuffer[a]
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <power/>
+ <apply> <ln/>
+ <ci> x </ci>
+ </apply>
+ <cn> 3 </cn>
+ </apply>
+</math>
+\stopbuffer
+
+\typebuffer[a]
+
+\startbuffer[b]
+<?context-mathml-directive power reduction yes ?>
+\stopbuffer
+
+\processxmlbuffer[b,a] \typebuffer[b]
+
+\startbuffer[b]
+<?context-mathml-directive power reduction no ?>
+\stopbuffer
+
+\processxmlbuffer[b,a] \typebuffer[b]
+
+\stopsection
+
+\startsection[title={diff}]
+
+Covering all kind of differential formulas is not trivial. Currently we support
+two locations for the operand (function). By default the operand is placed above
+the division line.
+
+\startdirectives
+\HL
+\NC diff \NC location \NC top \NC put the operand in the fraction \NC \NR
+\NC \NC \NC right \NC put the operand after the fraction \NC \NR
+\HL
+\stopdirectives
+
+\startbuffer[a]
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <diff/>
+ <bvar>
+ <ci> x </ci>
+ <degree> <cn> 2 </cn> </degree>
+ </bvar>
+ <apply> <fn> <ci> f </ci> </fn>
+ <apply> <plus/>
+ <apply> <times/>
+ <cn> 2 </cn>
+ <ci> x </ci>
+ </apply>
+ <cn> 1 </cn>
+ </apply>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\typebuffer[a]
+
+\startbuffer[b]
+<?context-mathml-directive diff location top ?>
+\stopbuffer
+
+\processxmlbuffer[b,a] \typebuffer[b]
+
+\startbuffer[b]
+<?context-mathml-directive diff location right ?>
+\stopbuffer
+
+\processxmlbuffer[b,a] \typebuffer[b]
+
+\stopsection
+
+\startsection[title={vector}]
+
+Depending on the complication of a vector or on the available space, you may wish
+to typeset a vector horizontally or vertically. By default a vector is typeset
+horizontally.
+
+\startdirectives
+\HL
+\NC vector \NC direction \NC horizontal \NC put vector elements alongside \NC \NR
+\NC \NC \NC vertical \NC stack vector elements \NC \NR
+\HL
+\stopdirectives
+
+\startbuffer[a]
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <eq/>
+ <vector>
+ <ci> x </ci>
+ <ci> y </ci>
+ <ci> z </ci>
+ </vector>
+ <vector>
+ <cn> 1 </cn>
+ <cn> 0 </cn>
+ <cn> 1 </cn>
+ </vector>
+ </apply>
+</math>
+\stopbuffer
+
+\typebuffer[a]
+
+\startbuffer[b]
+<?context-mathml-directive vector direction horizontal ?>
+\stopbuffer
+
+\processxmlbuffer[b,a] \typebuffer[b]
+
+\startbuffer[b]
+<?context-mathml-directive vector direction vertical ?>
+\stopbuffer
+
+\processxmlbuffer[b,a] \typebuffer[b]
+
+\stopsection
+
+\startsection[title={times}]
+
+Depending on the audience, a multiplication sign is implicit (absent) or
+represented by a regular times symbol or a dot.
+
+\startdirectives
+\HL
+\NC times \NC symbol \NC no \NC don't add a symbol \NC \NR
+\NC \NC \NC yes \NC separate operands by a times ($\times$) \NC \NR
+\NC \NC \NC dot \NC separate operands by a dot ($\cdot$)\NC \NR
+\NC auto \NC symbol \NC no \NC don't check for succesive numbers \NC \NR
+\NC \NC \NC yes \NC separate succesive numbers by a times ($\times$) \NC \NR
+\NC \NC \NC dot \NC separate succesive numbers by a dot ($\cdot$)\NC \NR
+\HL
+\stopdirectives
+
+\startbuffer[a]
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <plus/>
+ <ci> x </ci>
+ <apply> <times/>
+ <cn> 2 </cn>
+ <ci> x </ci>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\typebuffer[a]
+
+\startbuffer[b]
+<?context-mathml-directive times symbol no ?>
+\stopbuffer
+
+\processxmlbuffer[b,a] \typebuffer[b]
+
+\startbuffer[b]
+<?context-mathml-directive times symbol yes ?>
+\stopbuffer
+
+\processxmlbuffer[b,a] \typebuffer[b]
+
+\startbuffer[b]
+<?context-mathml-directive times symbol dot ?>
+\stopbuffer
+
+\processxmlbuffer[b,a] \typebuffer[b]
+
+\stopsection
+
+\startsection[title={log}]
+
+The location of a logbase depends on tradition and|/|or preference, which is why
+we offer a few alternatives: as pre superscript (in the right top corner before
+the symbol) or as post subscript (in the lower left corner after the symbol).
+
+\startdirectives
+\HL
+\NC log \NC location \NC right \NC place logbase at the right top \NC \NR
+\NC \NC \NC left \NC place logbase at the lower left \NC \NR
+\HL
+\stopdirectives
+
+\startbuffer[a]
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <log/>
+ <logbase>
+ <ci> 3 </ci>
+ </logbase>
+ <apply> <plus/>
+ <ci> x </ci>
+ <cn> 1 </cn>
+ </apply>
+ </apply>
+</math>
+\stopbuffer
+
+\typebuffer[a]
+
+\startbuffer[b]
+<?context-mathml-directive log location right ?>
+\stopbuffer
+
+\processxmlbuffer[b,a] \typebuffer[b]
+
+\startbuffer[b]
+<?context-mathml-directive log location left ?>
+\stopbuffer
+
+\processxmlbuffer[b,a] \typebuffer[b]
+
+\stopsection
+
+\startsection[title={polar}]
+
+For polar notation we provide several renderings:
+
+\startdirectives
+\HL
+\NC polar \NC alternative \NC a \NC explicit polar notation \NC \NR
+\NC \NC \NC b \NC exponential power notation \NC \NR
+\NC \NC \NC c \NC exponential function notation \NC \NR
+\HL
+\stopdirectives
+
+\startbuffer[a]
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <cn type="polar"> 2 <sep/> <pi/> </cn>
+</math>
+\stopbuffer
+
+\typebuffer[a]
+
+\startbuffer[b]
+<?context-mathml-directive polar alternative a ?>
+\stopbuffer
+
+\processxmlbuffer[b,a] \typebuffer[b]
+
+\startbuffer[b]
+<?context-mathml-directive polar alternative b ?>
+\stopbuffer
+
+\processxmlbuffer[b,a] \typebuffer[b]
+
+\startbuffer[b]
+<?context-mathml-directive polar alternative c ?>
+\stopbuffer
+
+\processxmlbuffer[b,a] \typebuffer[b]
+
+\stopsection
+
+\startsection[title={e-notation}]
+
+Depending on the context, you may want to typeset the number \type {1.23e4} not
+as this sequence, but using a multiplier construct. As with the \mmlelement
+{times}, we support both multiplication symbols.
+
+\startdirectives
+\HL
+\NC enotation \NC symbol \NC no \NC no interpretation \NC \NR
+\NC \NC \NC yes \NC split exponent, using $\times$ \NC \NR
+\NC \NC \NC dot \NC split exponent, using $\cdot$ \NC \NR
+\HL
+\stopdirectives
+
+\startbuffer[a]
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <cn type="e-notation">10<sep/>23</cn>
+</math>
+\stopbuffer
+
+\typebuffer[a]
+
+\startbuffer[b]
+<?context-mathml-directive enotation symbol no ?>
+\stopbuffer
+
+\processxmlbuffer[b,a] \typebuffer[b]
+
+\startbuffer[b]
+<?context-mathml-directive enotation symbol yes ?>
+\stopbuffer
+
+\processxmlbuffer[b,a] \typebuffer[b]
+
+\startbuffer[b]
+<?context-mathml-directive enotation symbol dot ?>
+\stopbuffer
+
+\processxmlbuffer[b,a] \typebuffer[b]
+
+\stopsection
+
+\stopchapter
+
+\startchapter[title={Typesetting modes}]
+
+Math can be typeset inline or display. In order not to widen up the text of a
+paragraph too much, inline math is typeset more cramped. Since \MATHML\ does
+provide just a general purpose \mmlelement {math} element we have to provide the
+information needed using other elements. Consider the following text.
+
+\startbuffer
+<document>
+To what extent is math supposed to reflect the truth and nothing but
+the truth? Consider the simple expression
+ <math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <eq/>
+ <cn> 10 </cn>
+ <apply> <plus/>
+ <cn> 3 </cn>
+ <cn> 7 </cn>
+ </apply>
+ </apply>
+ </math>. Many readers will consider this the truth, but then,
+can we assume that the decimal notation is used?
+
+<formula>
+ <math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <eq/>
+ <cn> 10 </cn>
+ <apply> <plus/>
+ <cn> 3 </cn>
+ <ci> x </ci>
+ </apply>
+ </apply>
+ </math>
+</formula>
+
+In many elementary math books, you can find expressions like the
+previous. Because in our daily life we use the decimal numbering system,
+we can safely assume that
+ <math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <eq/>
+ <ci> x </ci>
+ <cn> 7 </cn>
+ </apply>
+ </math>. But, without explicitly mentioning this boundary condition,
+more solutions are correct.
+
+<formula label="octal" sublabel="a">
+ <math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <eq/>
+ <cn> 10 </cn>
+ <apply> <plus/>
+ <cn> 3 </cn>
+ <cn> 5 </cn>
+ </apply>
+ </apply>
+ </math>
+</formula>
+
+In <textref label="octal">formula</textref> we see an at first sight
+wrong formula. But, if we tell you that octal numbers are used, your
+opinion may change instantly. A rather clean way out of this confusion
+is to extend the notation of numbers by explicitly mentioning the base.
+
+<subformula label="octal base" sublabel="b">
+ <math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <eq/>
+ <cn type="integer" base="8"> 10 </cn>
+ <apply> <plus/>
+ <cn type="integer" base="8"> 3 </cn>
+ <cn type="integer" base="8"> 5 </cn>
+ </apply>
+ </apply>
+ </math>
+</subformula>
+
+Of course, when a whole document is in octal notation, a proper
+introduction is better than annotated numbers as used in <textref
+label="octal base">formula</textref>.
+</document>
+\stopbuffer
+
+\blank \startnarrower \processxmlbuffer \stopnarrower \blank
+
+In terms of \XML\ this can look like:
+
+\typebuffer
+
+Math that is part of the text flow is automatically handled as inline math. If
+needed you can encapsulate the code in an \mmlelement {imath} environment.
+Display math is recognized as such when it is a separate paragraph, but since
+this is more a \TEX\ feature than an \XML\ one, you should encapsulate display
+math either in a \mmlelement {dmath} element or in a \mmlelement {formula} or
+\mmlelement {subformula} element.
+
+For a while you can use attribute \type {mode} with values \type {display} or
+\type {inline}. Recent \MATHML\ specifications provide the \type {display}
+attribute with values \type {block} or \type {inline}. We support both.
+
+\stopchapter
+
+\startchapter[title={Getting started}]
+
+A comfortable way to get accustomed to \MATHML\ is to make small documents of the
+following form:
+
+\starttyping
+\usemodule[mathml]
+
+\starttext
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <cos/>
+ <ci> x </ci>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer
+
+\stoptext
+\stoptyping
+
+As you see, we can mix \MATHML\ with normal \TEX\ code. A document like this is
+processed in the normal way using the \type {context} command. If you also want
+to see the original code, you can say:
+
+\starttyping
+\usemodule[mathml]
+
+\starttext
+
+\startbuffer
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <cos/>
+ <ci> x </ci>
+ </apply>
+</math>
+\stopbuffer
+
+\processxmlbuffer
+
+\typebuffer
+
+\stoptext
+\stoptyping
+
+Like \TEX\ and \METAPOST\ code, buffers can contain \MATHML\ code. The advantage
+of this method is that we only have to key in the data once. It also permits you
+to experiment with processing instructions.
+
+\starttyping
+\startbuffer[mml]
+<math xmlns="http://www.w3c.org/mathml" version="2.0">
+ <apply> <log/>
+ <logbase> <cn> 3.5 </cn> </logbase>
+ <ci> x </ci>
+ </apply>
+</math>
+\stopbuffer
+
+\startbuffer[pi]
+ <?context-mathml-directive log location right ?>
+\stopbuffer
+
+\processxmlbuffer[pi,mml]
+
+\startbuffer[pi]
+ <?context-mathml-directive log location left ?>
+\stopbuffer
+
+\processxmlbuffer[pi,mml]
+\stoptyping
+
+If you like coding your documents in \TEX\ but want to experiment with \MATHML,
+combining both languages in the way demonstrated here may be an option. When you
+provide enough structure in your \TEX\ code, converting a document to \XML\ is
+then not that hard to do. Where coding directly in \XML\ is kind of annoying,
+coding \MATHML\ is less cumbersome, because you can structure your formulas
+pretty well, especially since the fragments are small so that proper indentation
+is possible.
+
+\stopchapter
+
+\startchapter[title={Bidi}]
+
+Support for bidirectional math is not entirely trivial as it demands a font that
+supports it. When they were released, the stix fonts were not that useable and
+Khaled Hosny turned them into the xits fonts that are now quite complete and
+useable in an \OPENTYPE\ and \UNICODE\ environment. He also added support for
+right to left math.
+
+Normally you will only use that in a right to left typeset document, in which
+case you have a setup like this:
+
+\starttyping
+\setuptobodyfont
+ [xitsbidi]
+
+\setupalign
+ [r2l]
+
+\setupmathematics
+ [align=r2l]
+
+\starttext
+
+Some text.
+
+\startformula \sqrt{ف^2\over 4ب} \stopformula
+
+Some more text
+
+\stoptext
+\stoptyping
+
+As \MATHML\ has no global settings you need to control it specifically. At some
+point we might decide to provide some global flags but that depends on how the
+general bidi layout machinery evolves. Here we just stick to an example:
+
+\startbuffer[test]
+<math xmlns="http://www.w3.org/1998/Math/MathML" dir="rtl">
+ <msqrt>
+ <mfrac>
+ <msup><mi>ف</mi><mn>2</mn></sup>
+ <mrow><mn>4</mn><mi>ب</mi></mrow>
+ </mfrac>
+ </msqrt>
+</math>
+\stopbuffer
+
+\typebuffer[test]
+
+\start
+ \switchtobodyfont[xitsbidi]
+ \xmlprocessbuffer{main}{test}{}
+ \par
+\stop
+
+The order of input is still rather left to right which makes sense as we're sort
+of structuring the math input.
+
+\stopchapter
+
+\startchapter[title={OpenMath}]
+
+Because \OPENMATH\ is now a subset of \MATHML\ we can to some extend also support
+this coding. We do a straightforward remapping to content \MATHML\ so any
+rendering that is supported there is also supported in the equivalent \OPENMATH\
+code.
+
+\startbuffer
+<OMOBJ xmlns="http://www.openmath.org/OpenMath" version="2.0">
+ <OMA> <OMS cd="relation1" name="eq"/>
+ <OMV name="y"/>
+ <OMA> <OMS cd="arith1" name="minus"/>
+ <OMA> <OMV name="f"/>
+ <OMV name="x"/>
+ </OMA>
+ <OMA> <OMV name="f"/>
+ <OMA> <OMS cd="arith1" name="minus"/>
+ <OMV name="x"/>
+ <OMI>1</OMI>
+ </OMA>
+ </OMA>
+ </OMA>
+ </OMA>
+</OMOBJ>
+\stopbuffer
+
+\processxmlbuffer \typebuffer
+
+Because in practice we may use a mixture of math encodings this can come in handy
+because it saves conversion of the \XML\ source.
+
+\stopchapter
+
+\startchapter[title={CalcMath}]
+
+We support two types of annotation markup: \TEX\ (\type {tex}) and what we call
+\quote {calculator math} (\type {calcmath}). The second type is also available
+directly. Inline calcmath is coded using the \mmlelement{icm} element.
+
+\startbuffer
+<document>
+ This is an inline formula <icm>sin(x^2+1/x)</icm> just to demonstrate
+ the idea of calculator math.
+</document>
+\stopbuffer
+
+\blank \noindentation \processxmlbuffer \typebuffer
+
+If one edits the \XML\ file directly this can type quite some coding. For more
+complex formulas one can revert to content \MATHML, or when interactivity is
+needed to \OPENMATH.
+
+The argument that one should use a dedicated editor for math instead is not that
+convincing for authors who have to key on lots of small snippets of math. And one
+can always transform this code in its more bloated variant. The calcmath
+converter is dedicated to Frits Spijkers, author of Dutch math schoolbooks and
+fluent in all those math encodings methods we force upon him. The code resembles
+that used in the calculators at schools and we used it in projects with computer
+aided feedback where students had to key in math. When there is demand for this
+input method we will provide more details.
+
+\stopchapter
+
+\startchapter[title={AsciiMath}]
+
+A few years back we included some basic support for \ASCIIMATH\ as a proof of
+concept not knowing that one day we were forced to fully support it in a project.
+In one of our projects \CONTEXT\ is the backend for generating math books for
+high school math. Input is \XML\ and math is coded in presentational \MATHML. We
+should say \quotation {was coded}, because in the Spring of 2014 another party in
+the project (the one responsible for the web part) converted the \MATHML\ into
+\ASCIIMATH\ on behalve of their web authoring tool.
+
+Where we would have chosen to use the \MATHML\ annotation attribute, they had
+chosen to flatten the structured \MATHML\ into less structured \ASCIIMATH. And
+there was no way back. We're talking of tens of thousands of files here.
+\footnote {Around the same time Google decided to drop native \MATHML\ support
+from Chrome so one might wonder why \MATHML\ was developed in the first place.}
+
+On the web \ASCIIMATH\ is mostly interpreted by MathJax's \JAVASCRIPT\ in
+combination with \CSS. Since we didn't want to depend on a \JAVASCRIPT\
+conversion in \CONTEXT\ we started to completely rewrite our \ASCIIMATH\ module.
+We also needed a bit more control in order to meet specific demands of the
+publisher, like formatting numbers, support for characters not in the normal
+repertoire, checking and tracing, and the speed of rendering had not to be
+affected.
+
+If you invoke the \ASCIIMATH\ module with \typ {\usemodule [asciimath]} the
+command \type {\asciimath{...}} is available for testing purposes. Within the
+curly brackets you can type an \ASCIIMATH\ expression.
+
+Normally an \ASCIIMATH\ expression in \XML|/|\HTML\ is enclosed by back-quotes:
+
+\startbuffer
+`x^2`
+\stopbuffer
+
+\typebuffer
+
+But we rather stick to the \XML\ like coding:
+
+\startbuffer
+<am>x^2</am>
+\stopbuffer
+
+\typebuffer
+
+This is equivalent to the \TEX\ command:
+
+\asciimath{x^2}
+
+The interpretation of such a formula is no problem. But let's give a few examples
+where \ASCIIMATH\ lacks structure or needs a (sometimes bizar) interpretation to
+obtain adequate rendering:
+
+\noindentation Behaviour of superscripts and subscripts depends on operator that
+preceeds a number or variable:
+
+\starttabulate
+\FL
+\NC \type{`sin^-1(x)`} \NC \asciimath{sin^-1(x)} \NC \NR
+\NC \type{`sin^+1(x)`} \NC \asciimath{sin^+1(x)} \NC \NR
+\LL
+\stoptabulate
+
+\noindentation A script can be either one character or a number made from more
+characters:
+
+\starttabulate
+\FL
+\NC \type{`int_a^b f(x)`} \NC \asciimath{int_a^b f(x)} \NC \NR
+\NC \type{`int_aa^bb f(x)`} \NC \asciimath{int_aa^bb f(x)} \NC \NR
+\NC \type{`int_1000^2000 f(x)`} \NC \asciimath{int_1000^2000 f(x)} \NC \NR
+\LL
+\stoptabulate
+
+\noindentation Behaviour of operator depends on character, where some characters
+have special meaning:
+
+\starttabulate
+\FL
+\NC \type{`d/dx`} \NC \asciimath{d/dx} \NC \NR
+\NC \type{`q/qx`} \NC \asciimath{q/qx} \NC \NR
+\LL
+\stoptabulate
+
+\noindentation Behaviour of the curly brackets is somewhat peculiar because at
+times they are not used for grouping anymore:
+
+\starttabulate
+\FL
+\NC \type{`{a/b}/{d/c}`} \NC \asciimath{{a/b}/{d/c}} \NC \NR
+\NC \type{`{a/b}//{d/c}`} \NC \asciimath{{a/b}//{d/c}} \NC \NR
+\LL
+\stoptabulate
+
+\noindentation Behaviour depends on sequence of scripts (solved in \CONTEXT):
+
+\starttabulate
+\FL
+\NC \type{`int_0^1 f(x)dx`} \NC \asciimath{int_0^1 f(x)dx} \NC \NR
+\NC \type{`int^1_0 f(x)dx`} \NC \asciimath{int^1 text(_)0 f(x)dx} \NC \NR
+\LL
+\stoptabulate
+
+During the development of the \ASCIIMATH\ support we used the MathJax interpretor
+as a reference since that is available on the web. At the time of writing
+documentation was limited so some trial and error was involved in writing the
+parser. As usual we started from examples. Below we give a number of those
+examples so you can familiarize yourself with \ASCIIMATH. Note that you can use
+\TEX||like math coding and even use the backslash, but be warned for unexpected
+behaviour. In a webpage backticks are used to indicate \ASCIIMATH.
+
+\startlines
+\ExampleLine{sqrt-3ax}
+\ExampleLine{sqrt(-3ax)}
+\ExampleLine{root(3)(ax)}
+\ExampleLine{x^2+y_1+z_12^3}
+\ExampleLine{sin^-1(x)}
+\ExampleLine{d/dx f(x)=lim_(h->0) (f(x+h)-f(x))/h}
+\ExampleLine{f(x)=sum_(n=0)^oo(f^((n))(a))/(n!)(x-a)^n}
+\ExampleLine{int_0^1 f(x)dx}
+\ExampleLine{int^1_0 f(x)dx}
+\ExampleLine{a//b}
+\ExampleLine{a//\alpha}
+\ExampleLine{(a/b)/(d/c)}
+\ExampleLine{((a*b))/(d/c)}
+\ExampleLine{(a/b)/(c/d)={:(ad)/(bd):}/{:(bc)/(bd):}=(ad)/(bc)=(ad)/(bc)}
+\ExampleLine{a/b//c/d=(ad)/(bd)//(bc)/(bd)=ad//bc=(ad)/(bc)}
+\ExampleLine{[[a,b],[c,d]]((n),(k))}
+\ExampleLine{1/x={(1,text{if } x!=0),(text(undefined), text(if ) x=0):}}
+\ExampleLine{<<a,b>> text{ and } [ (x,y),(u,v) ] }
+\ExampleLine{(a,b] = {x in RR | a < x <= b}}
+\ExampleLine{langle larr ; 0,4]}
+\ExampleLine{〈← ; 0,4]}
+\ExampleLine{[0 , rarr rangle}
+\ExampleLine{[0 , →〉}
+\ExampleLine{5/|CD|=8/5}
+\ExampleLine{|MD|/|CD|=|AD|/|MD|}
+\ExampleLine{x lt 4 vv x gt 1}
+\ExampleLine{x \lt 4 vv x \gt 1}
+\ExampleLine{x &lt; 4 vv x &gt; 1} % Hans: werkt niet goed; wel op http://www.wjagray.co.uk/maths/ASCIIMathTutorial.html
+\ExampleLine{lim_(x→∞)1/x=0}
+\ExampleLine{text(D)_(f)}
+\ExampleLine{p _|_ q}
+\ExampleLine{g·g· stackrel (text(n times) ) (...·g)}
+\ExampleLine{stackrel(+)(\rightarrow)}
+\ExampleLine{stackrel(+)(rightarrow)} % Hans: werkt niet goed; wel op http://www.wjagray.co.uk/maths/ASCIIMathTutorial.html
+\ExampleLine{((a_(11),cdots,a_(1n)),(vdots,ddots,vdots),(a_(m1),cdots,a_(mn)))}
+\stoplines
+
+Unfortunately \ASCIIMATH\ can be unpredictable which is a side effect of the fact that a
+high degree of tolerance is built in. We strongly advice to use spaces to make your
+results predictable.
+
+\startlines
+\ExampleLine{o ox x = xo}
+\ExampleLine{a ax x = xa}
+\ExampleLine{ooxx=xo}
+\ExampleLine{aaxx=xa}
+\stoplines
+
+One of the properties is that \TEX\ commands are supported, that is,. with a few
+exceptions: \type {P} and \type {S} don't produce $\P$ and $\S$. Also, don't
+confuse these symbols with the entities supported by \MATHML: in \ASCIIMATH\
+\type{circ} is circle and not a circumflex. Also, \type {&lt;}, \type {&gt;} are
+converted into \asciimath {&lt;} and \asciimath {&gt;} while \type {&amp;}
+becomes \asciimath{&amp;}. As usual with input formats that start out simple, in
+the end they become so complex that one can wonder why to use them. It is the
+usual problem of using one system for everything.
+
+The following examples are similar to the once shown elsewhere in this document.
+
+\startsubsubject[title=derivatives]
+
+\ExampleLine{(da)/(dx) = 0}
+\ExampleLine{dx/dx = 0}
+\ExampleLine{(d(au))/(dx) = a (du)/(dx)}
+\ExampleLine{(d(u+v+w))/(dx) = (du)/(dx) + (dv)/(dx) + (dw)/(dx)}
+\ExampleLine{(d(uv))/(dx) = u (du)/(dx) + v (dv)/(dx)}
+\ExampleLine{(d(uvw))/(dx) = vw(du)/(dx) + uw(dv)/(dx) + uv(dw)/(dx)}
+\ExampleLine{(d(u/v))/(dx) = (v(du)/(dx) - u(dv)/(dx) ) / (v^2) = 1/v (du)/(dx) - u/v^2 (dv)/(dx)}
+\ExampleLine{(d(u^n))/(dx) = n(u)^(n-1) (dv)/(dx)}
+\ExampleLine{(d sqrt(u))/(dx) = 1/(2 sqrt(u)) (du)/(dx) }
+\ExampleLine{(d(1/u))/(dx) = - 1/u^2 (du)/(dx)}
+\ExampleLine{(d(1/(u^n)))/(dx) = - n/u^(n+1) (du)/(dx)}
+\ExampleLine{(d log (u + sqrt(u^2+1)))/(dx) = 1/(sqrt(u^2 + 1)) (du)/(dx) }
+
+\stopsubsubject
+
+\startsubsubject[title=integral]
+
+\ExampleLine{int (1 / (x sqrt(a^2 +- x^2) ) ) dx = - 1/a log (a + sqrt(a^2 +- x^2)) / x}
+\ExampleLine{int (1 / ( a + bx^2) ) = 1 / (2 sqrt(-ab)) log (a + x sqrt(-ab) ) / (a - x sqrt(-ab) ) vv 1 / sqrt(-ab) tanh^(-1) (x sqrt (-ab)) / a}
+\ExampleLine{int ( 1 / (cos(ax) (1 +- sin(ax)) ) ) dx = ( 1 / (2a( 1 +- sin(ax) )) ) + 1 / (2a) log tan(pi/4 + (ax)/2)}
+
+\stopsubsubject
+
+\startsubsubject[title=series]
+
+\ExampleLine{1 - 1/3 + 1/5 - 1/7 + cdots = pi/4}
+\ExampleLine{1 + 1/2^2 + 1/3^2 + 1/4^2 + cdots = pi^2/6}
+\ExampleLine{1 - 1/2^2 + 1/3^2 - 1/4^2 + cdots = pi^2/12}
+\ExampleLine{AA x in RR | e^x = 1 + x + x^2/(2!) + x^3/(3!) + cdots + x^n/(n!)}
+\ExampleLine{AA x in RR | e^(text(-)x) = 1 - x + x^2/(2!) - x^3/(3!) + cdots + (text(-)1^n)x^n/(n!)}
+
+\stopsubsubject
+
+\startsubsubject[title=logs]
+
+\ExampleLine{AA a > 0 ^^ b > 0 | {:log_g:} a + {:log_g:} b}
+\ExampleLine{AA a > 0 ^^ b > 0 | {:log_g:} a/b = {:log_g:} a - {:log_g:} b}
+\ExampleLine{AA b in RR ^^ a > 0 | {:log_g:} a^b = b {:log_g:} a}
+\ExampleLine{AA a > 0 | {:log_g:} a = ({:log_p:} a) / ({:log_p:} g)}
+
+\stopsubsubject
+
+\startsubsubject[title=goniometrics]
+
+\ExampleLine{sin(x+y) = sinx cosy + cosx siny}
+\ExampleLine{sin(x-y) = sinx cosy - cosx siny}
+\ExampleLine{sin(x+y) = cosx cosy - sinx siny}
+\ExampleLine{sin(x-y) = cosx cosy + sinx siny}
+\ExampleLine{tan(x+y) = (tanx + tany) / (1 - tanx tany)}
+\ExampleLine{tan(x-y) = (tanx - tany) / (1 + tanx tany)}
+\ExampleLine{sinp + sinq = 2 sin (p+q)/2 cos (p-q)/2}
+\ExampleLine{sinp - sinq = 2 cos (p+q)/2 sin (p-q)/2}
+\ExampleLine{cosp + cosq = 2 cos (p+q)/2 cos (p-q)/2}
+\ExampleLine{2 cos alpha cos beta = cos(alpha + beta) + cos(alpha - beta)}
+\ExampleLine{-2 sin alpha cos beta = sin(alpha + beta) - sin(alpha - beta)}
+\ExampleLine{AA ∆ ABC | a / (sin alpha) + b / (sin beta) + c / (sin gamma)}
+\ExampleLine{AA ∆ ABC | {:(a^2 = b^2 + c^2 - 2bc cos alpha),(b^2 = a^2 + c^2 - 2ac cos beta),(c^2 = a^2 + b^2 - 2ab cos gamma):}}
+
+\stopsubsubject
+
+\startsubsubject[title=statistics]
+
+\ExampleLine{bar x = 1/n sum x_i}
+\ExampleLine{sigma (x) ~~ sqrt ((x_i - (bar x)^2) / (n-1) )}
+\ExampleLine{sigma (x)^2 ~~ bar ((x_i - bar x)^2) = 1/(n-1) sum (x_i - bar x)^2}
+
+\stopsubsubject
+
+\startsubsubject[title=matrices]
+
+\ExampleLine{|{:(sin alpha,cos alpha),(sin beta,cos beta):}| = sin (alpha - beta)}
+\ExampleLine{|I| = | {: (1,0),(0,1):}| = 1}
+
+\stopsubsubject
+
+\stopchapter
+
+\startchapter[title={A few examples}]
+
+\setups[showexamples]
+
+\startsection[title={derivatives}] \getbuffer[derivates] \stopsection
+\startsection[title={integrals}] \getbuffer[integrals] \stopsection
+\startsection[title={series}] \getbuffer[series] \stopsection
+\startsection[title={logs}] \getbuffer[logs] \stopsection
+\startsection[title={goniometrics}] \getbuffer[goniometrics] \stopsection
+\startsection[title={statistics}] \getbuffer[statistics] \stopsection
+\startsection[title={matrices}] \getbuffer[matrices] \stopsection
+
+\stopchapter
+
+\startchapter[title={Unicode Math}]
+
+\startsection[title={entities}]
+
+Support for \MATHML\ showed up in \CONTEXT\ by the end of second millenium. The
+first more or less complete version of this manual dates from the end of 1999. At
+that time \UNICODE\ math was no fact yet and entities were the way to get special
+symbols done. Mapping the names of symbols onto something that could be rendered
+was up to the \XML\ processors and typesetting engine.
+
+Nowadays we can use \UNICODE\ directly although it has the drawback that not all
+editing applications show the corresponding shapes. It is for this reason that
+entities will have their use for a while. In the next table we see the official
+ones. The table is actually larger, but we only show the shapes that have a math
+property in the \CONTEXT\ character database. The full list is supported and can
+be found in the following documents:
+
+\starttyping
+http://www.w3.org/2003/entities/2007/w3centities-f.ent
+http://www.w3.org/2003/entities/2007/htmlmathml-f.ent
+\stoptyping
+
+\blank \showmathentities
+
+\stopsection
+
+\startsection[title={properties}]
+
+\noindentation A different way to look at this is \UNICODE\ itself. Here's the
+list of characters that have a math related property in \CONTEXT.
+
+\blank \showmathcharacters
+
+\stopsection
+
+\startsection[title={alphabets}]
+
+Traditionally (in \TEX) one enters \ASCII\ characters to represent identifiers
+and use a font switch to get for instance a bold rendering. In \UNICODE\ it is
+more natural to use code points that represent the meaning. So, instead if
+enterinf
+
+So instead of keying in byte \type {U+0058} for a bold \type {x} one will use an
+\UTF\ sequence representing \type {U+1D431}. Because there are not than many
+editors that show all those \UNICODE\ characters it still makes sense to use
+regular latin and greek alphabets combined with directives that tell what real
+alphabet is used. For \CONTEXT\ it does not matter what approach is chosen: both
+work ok and internally characters are mapped onto the right slot. When a font
+does not provide a shape a fallback is chosen. Technically one can construct a
+complete math font by combining all kind of fonts, but this is normally not
+needed.
+
+Here we show the combinations of styles and alternatives. Not all combinations
+are present in \UNICODE. Actually, as \UNICODE\ math is rather agnostic of
+cultural determined math rendering, at some point \CONTEXT\ could provide more.
+\footnote {An example is the German handwriting style Suetterlin that is still
+used for vectors.} Also, modern \OPENTYPE\ fonts can have alternatives, for
+instance variants of script, blackboard or fraktur. This is not related to
+\UNICODE\ and it makes no sense to encode that in \MATHML, but a setup of the
+rendering.
+
+\blank \showmathalphabets
+
+\stopsection
+
+\startsection[title={scripts}]
+
+Glyphs (traditionally) come in three sizes. The script and scriptscript sizes can
+be downscaled from text size but most math fonts have additional glyphs tuned for
+smaller sizes. The next table shows some of this.
+
+\blank \showmathscripts
+
+\stopsection
+
+\startsection[title={bold}]
+
+There are two ways to look at bold math. First there are bold alphabets and bold
+symbols and these have some meaning. Then there is what we can best call boldened
+math that is used in section titles and such. The normal bold then becomes heavy.
+The next table shows (for the font used here) what bold shapes are available.
+
+\blank \showmathbold
+
+\stopsection
+
+\stopchapter
+
+\stopbodymatter
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/mathml/pc-d-001.xml b/doc/context/sources/general/manuals/mathml/pc-d-001.xml
new file mode 100644
index 000000000..d7997f5fd
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/pc-d-001.xml
@@ -0,0 +1,9 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <eq/>
+ <apply> <diff/>
+ <bvar> <ci> x </ci> </bvar>
+ <ci> a </ci>
+ </apply>
+ <ci> 0 </ci>
+ </apply>
+</math> \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mathml/pc-d-002.xml b/doc/context/sources/general/manuals/mathml/pc-d-002.xml
new file mode 100644
index 000000000..1d93d97bc
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/pc-d-002.xml
@@ -0,0 +1,9 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <eq/>
+ <apply> <diff/>
+ <bvar> <ci> x </ci> </bvar>
+ <ci> x </ci>
+ </apply>
+ <cn> 1 </cn>
+ </apply>
+</math> \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mathml/pc-d-003.xml b/doc/context/sources/general/manuals/mathml/pc-d-003.xml
new file mode 100644
index 000000000..9e2b391fe
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/pc-d-003.xml
@@ -0,0 +1,18 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <eq/>
+ <apply> <diff/>
+ <bvar> <ci> x </ci> </bvar>
+ <apply> <times/>
+ <ci> a </ci>
+ <ci> u </ci>
+ </apply>
+ </apply>
+ <apply> <times/>
+ <ci> a </ci>
+ <apply> <diff/>
+ <bvar> <ci> x </ci> </bvar>
+ <ci> u </ci>
+ </apply>
+ </apply>
+ </apply>
+</math> \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mathml/pc-d-004.xml b/doc/context/sources/general/manuals/mathml/pc-d-004.xml
new file mode 100644
index 000000000..ef2d5490e
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/pc-d-004.xml
@@ -0,0 +1,26 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <eq/>
+ <apply> <diff/>
+ <bvar> <ci> x </ci> </bvar>
+ <apply> <plus/>
+ <ci> u </ci>
+ <ci> v </ci>
+ <ci> w </ci>
+ </apply>
+ </apply>
+ <apply> <plus/>
+ <apply> <diff/>
+ <bvar> <ci> x </ci> </bvar>
+ <ci> u </ci>
+ </apply>
+ <apply> <diff/>
+ <bvar> <ci> x </ci> </bvar>
+ <ci> v </ci>
+ </apply>
+ <apply> <diff/>
+ <bvar> <ci> x </ci> </bvar>
+ <ci> w </ci>
+ </apply>
+ </apply>
+ </apply>
+</math> \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mathml/pc-d-005.xml b/doc/context/sources/general/manuals/mathml/pc-d-005.xml
new file mode 100644
index 000000000..1e1fc90ca
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/pc-d-005.xml
@@ -0,0 +1,27 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <eq/>
+ <apply> <diff/>
+ <bvar> <ci> x </ci> </bvar>
+ <apply> <times/>
+ <ci> u </ci>
+ <ci> v </ci>
+ </apply>
+ </apply>
+ <apply> <plus/>
+ <apply> <times/>
+ <ci> u </ci>
+ <apply> <diff/>
+ <bvar> <ci> x </ci> </bvar>
+ <ci> u </ci>
+ </apply>
+ </apply>
+ <apply> <times/>
+ <ci> v </ci>
+ <apply> <diff/>
+ <bvar> <ci> x </ci> </bvar>
+ <ci> v </ci>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+</math>
diff --git a/doc/context/sources/general/manuals/mathml/pc-d-006.xml b/doc/context/sources/general/manuals/mathml/pc-d-006.xml
new file mode 100644
index 000000000..aaaf2c082
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/pc-d-006.xml
@@ -0,0 +1,38 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <eq/>
+ <apply> <diff/>
+ <bvar> <ci> x </ci> </bvar>
+ <apply> <times/>
+ <ci> u </ci>
+ <ci> v </ci>
+ <ci> w </ci>
+ </apply>
+ </apply>
+ <apply> <plus/>
+ <apply> <times/>
+ <ci> v </ci>
+ <ci> w </ci>
+ <apply> <diff/>
+ <bvar> <ci> x </ci> </bvar>
+ <ci> u </ci>
+ </apply>
+ </apply>
+ <apply> <times/>
+ <ci> u </ci>
+ <ci> w </ci>
+ <apply> <diff/>
+ <bvar> <ci> x </ci> </bvar>
+ <ci> v </ci>
+ </apply>
+ </apply>
+ <apply> <times/>
+ <ci> u </ci>
+ <ci> v </ci>
+ <apply> <diff/>
+ <bvar> <ci> x </ci> </bvar>
+ <ci> w </ci>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+</math>
diff --git a/doc/context/sources/general/manuals/mathml/pc-d-007.xml b/doc/context/sources/general/manuals/mathml/pc-d-007.xml
new file mode 100644
index 000000000..b1b3617e1
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/pc-d-007.xml
@@ -0,0 +1,58 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <eq/>
+ <apply> <diff/>
+ <bvar> <ci> x </ci> </bvar>
+ <apply> <divide/>
+ <ci> u </ci>
+ <ci> v </ci>
+ </apply>
+ </apply>
+ <apply> <divide/>
+ <apply> <minus/>
+ <apply> <times/>
+ <ci> v </ci>
+ <apply> <diff/>
+ <bvar> <ci> x </ci> </bvar>
+ <ci> u </ci>
+ </apply>
+ </apply>
+ <apply> <times/>
+ <ci> u </ci>
+ <apply> <diff/>
+ <bvar> <ci> x </ci> </bvar>
+ <ci> v </ci>
+ </apply>
+ </apply>
+ </apply>
+ <apply> <power/>
+ <ci> v </ci>
+ <cn> 2 </cn>
+ </apply>
+ </apply>
+ <apply> <minus/>
+ <apply> <times/>
+ <apply> <divide/>
+ <cn> 1 </cn>
+ <ci> v </ci>
+ </apply>
+ <apply> <diff/>
+ <bvar> <ci> x </ci> </bvar>
+ <ci> u </ci>
+ </apply>
+ </apply>
+ <apply> <times/>
+ <apply> <divide/>
+ <cn> u </cn>
+ <apply> <power/>
+ <ci> v </ci>
+ <cn> 2 </cn>
+ </apply>
+ </apply>
+ <apply> <diff/>
+ <bvar> <ci> x </ci> </bvar>
+ <ci> v </ci>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+</math> \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mathml/pc-d-008.xml b/doc/context/sources/general/manuals/mathml/pc-d-008.xml
new file mode 100644
index 000000000..9c0b36aed
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/pc-d-008.xml
@@ -0,0 +1,25 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <eq/>
+ <apply> <diff/>
+ <bvar> <ci> x </ci> </bvar>
+ <apply> <power/>
+ <ci> u </ci>
+ <ci> n </ci>
+ </apply>
+ </apply>
+ <apply> <times/>
+ <ci> n </ci>
+ <apply> <power/>
+ <ci> u </ci>
+ <apply> <minus/>
+ <ci> n </ci>
+ <cn> 1 </cn>
+ </apply>
+ </apply>
+ <apply> <diff/>
+ <bvar> <ci> x </ci> </bvar>
+ <ci> u </ci>
+ </apply>
+ </apply>
+ </apply>
+</math> \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mathml/pc-d-009.xml b/doc/context/sources/general/manuals/mathml/pc-d-009.xml
new file mode 100644
index 000000000..63fcc3c09
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/pc-d-009.xml
@@ -0,0 +1,25 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <eq/>
+ <apply> <diff/>
+ <bvar> <ci> x </ci> </bvar>
+ <apply> <root/>
+ <ci> u </ci>
+ </apply>
+ </apply>
+ <apply> <times/>
+ <apply> <divide/>
+ <cn> 1 </cn>
+ <apply> <times/>
+ <cn> 2 </cn>
+ <apply> <root/>
+ <ci> u </ci>
+ </apply>
+ </apply>
+ </apply>
+ <apply> <diff/>
+ <bvar> <ci> x </ci> </bvar>
+ <ci> u </ci>
+ </apply>
+ </apply>
+ </apply>
+</math> \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mathml/pc-d-010.xml b/doc/context/sources/general/manuals/mathml/pc-d-010.xml
new file mode 100644
index 000000000..b4d50b2ae
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/pc-d-010.xml
@@ -0,0 +1,26 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <eq/>
+ <apply> <diff/>
+ <bvar> <ci> x </ci> </bvar>
+ <apply> <divide/>
+ <cn> 1 </cn>
+ <ci> u </ci>
+ </apply>
+ </apply>
+ <apply> <times/>
+ <apply> <minus/>
+ <apply> <divide/>
+ <cn> 1 </cn>
+ <apply> <power/>
+ <ci> u </ci>
+ <cn> 2 </cn>
+ </apply>
+ </apply>
+ </apply>
+ <apply> <diff/>
+ <bvar> <ci> x </ci> </bvar>
+ <ci> u </ci>
+ </apply>
+ </apply>
+ </apply>
+</math> \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mathml/pc-d-011.xml b/doc/context/sources/general/manuals/mathml/pc-d-011.xml
new file mode 100644
index 000000000..9b1b99068
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/pc-d-011.xml
@@ -0,0 +1,32 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <eq/>
+ <apply> <diff/>
+ <bvar> <ci> x </ci> </bvar>
+ <apply> <divide/>
+ <cn> 1 </cn>
+ <apply> <power/>
+ <ci> u </ci>
+ <cn> n </cn>
+ </apply>
+ </apply>
+ </apply>
+ <apply> <times/>
+ <apply> <minus/>
+ <apply> <divide/>
+ <ci> n </ci>
+ <apply> <power/>
+ <ci> u </ci>
+ <apply> <plus/>
+ <ci> n </ci>
+ <cn> 1 </cn>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+ <apply> <diff/>
+ <bvar> <ci> x </ci> </bvar>
+ <ci> u </ci>
+ </apply>
+ </apply>
+ </apply>
+</math> \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mathml/pc-d-043.xml b/doc/context/sources/general/manuals/mathml/pc-d-043.xml
new file mode 100644
index 000000000..4e9920ad3
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/pc-d-043.xml
@@ -0,0 +1,47 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <eq/>
+ <apply> <diff/>
+ <bvar> <ci> x </ci> </bvar>
+ <apply> <inverse/>
+ <apply> <sinh/>
+ <ci> u </ci>
+ </apply>
+ </apply>
+ </apply>
+ <apply> <diff/>
+ <bvar> <ci> x </ci> </bvar>
+ <apply> <log/>
+ <apply> <plus/>
+ <ci> u </ci>
+ <apply> <root/>
+ <apply> <plus/>
+ <apply> <power/>
+ <ci> u </ci>
+ <cn> 2 </cn>
+ </apply>
+ <cn> 1 </cn>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+ <apply> <times/>
+ <apply> <divide/>
+ <cn> 1 </cn>
+ <apply> <root/>
+ <apply> <plus/>
+ <apply> <power/>
+ <ci> u </ci>
+ <cn> 2 </cn>
+ </apply>
+ <cn> 1 </cn>
+ </apply>
+ </apply>
+ </apply>
+ <apply> <diff/>
+ <bvar> <ci> x </ci> </bvar>
+ <ci> u </ci>
+ </apply>
+ </apply>
+ </apply>
+</math> \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mathml/pc-d-051.xml b/doc/context/sources/general/manuals/mathml/pc-d-051.xml
new file mode 100644
index 000000000..e7cc25f1b
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/pc-d-051.xml
@@ -0,0 +1,17 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <eq/>
+ <apply> <diff/>
+ <bvar> <ci> a </ci> </bvar>
+ <apply> <int/>
+ <lowlimit> <ci> p </ci> </lowlimit>
+ <uplimit> <ci> q </ci> </uplimit>
+ <bvar> <ci> x </ci> </bvar>
+ <apply>
+ <fn> <ci> f </ci> </fn>
+ <ci> x </ci>
+ <ci> a </ci>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+</math> \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mathml/pc-i-022.xml b/doc/context/sources/general/manuals/mathml/pc-i-022.xml
new file mode 100644
index 000000000..115d8ddc8
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/pc-i-022.xml
@@ -0,0 +1,52 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <eq/>
+ <apply> <int/>
+ <bvar> <ci> x </ci> </bvar>
+ <apply> <divide/>
+ <cn> 1 </cn>
+ <apply> <times/>
+ <ci> x </ci>
+ <apply> <root/>
+ <apply> <fn> <ci> &plusminus; </ci> </fn>
+ <apply> <power/>
+ <ci> a </ci>
+ <cn> 2 </cn>
+ </apply>
+ <apply> <power/>
+ <ci> x </ci>
+ <cn> 2 </cn>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+ <apply> <minus/>
+ <apply> <times/>
+ <apply> <divide/>
+ <cn> 1 </cn> <ci> a </ci>
+ </apply>
+ <apply> <log/>
+ <apply> <divide/>
+ <apply> <plus/>
+ <ci> a </ci>
+ <apply> <root/>
+ <apply> <fn> <ci> &plusminus; </ci> </fn>
+ <apply> <power/>
+ <ci> a </ci>
+ <cn> 2 </cn>
+ </apply>
+ <apply> <power/>
+ <ci> x </ci>
+ <cn> 2 </cn>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+ <ci> x </ci>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+</math> \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mathml/pc-i-380.xml b/doc/context/sources/general/manuals/mathml/pc-i-380.xml
new file mode 100644
index 000000000..ae6493b9c
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/pc-i-380.xml
@@ -0,0 +1,73 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <eq/>
+ <apply> <int/>
+ <bvar> <ci> x </ci> </bvar>
+ <apply> <divide/>
+ <cn> 1 </cn>
+ <apply> <times/>
+ <apply> <cos/>
+ <apply> <times/>
+ <ci> a </ci>
+ <ci> x </ci>
+ </apply>
+ </apply>
+ <apply> <fn> <ci> &plusminus; </ci> </fn>
+ <cn> 1 </cn>
+ <apply> <sin/>
+ <apply> <times/>
+ <ci> a </ci>
+ <ci> x </ci>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+ <apply> <plus/>
+ <apply> <fn> <ci> &minusplus; </ci> </fn>
+ <apply> <divide/>
+ <cn> 1 </cn>
+ <apply> <times/>
+ <cn> 2 </cn>
+ <ci> a </ci>
+ <apply> <fn> <ci> &plusminus; </ci> </fn>
+ <cn> 1 </cn>
+ <apply> <sin/>
+ <apply> <times/>
+ <ci> a </ci>
+ <ci> x </ci>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+ <apply> <times/>
+ <apply> <divide/>
+ <cn> 1 </cn>
+ <apply> <times/>
+ <cn> 2 </cn>
+ <ci> a </ci>
+ </apply>
+ </apply>
+ <apply> <log/>
+ <apply> <tan/>
+ <apply> <plus/>
+ <apply> <divide/>
+ <ci> &pi; </ci>
+ <cn> 4 </cn>
+ </apply>
+ <apply> <divide/>
+ <apply> <times/>
+ <ci> a </ci>
+ <ci> x </ci>
+ </apply>
+ <cn> 2 </cn>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+</math> \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mathml/pc-s-001.xml b/doc/context/sources/general/manuals/mathml/pc-s-001.xml
new file mode 100644
index 000000000..ec4f890f0
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/pc-s-001.xml
@@ -0,0 +1,28 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <eq/>
+ <apply> <plus/>
+ <cn> 1 </cn>
+ <apply> <minus/>
+ <apply> <divide/>
+ <cn> 1 </cn>
+ <cn> 3 </cn>
+ </apply>
+ </apply>
+ <apply> <divide/>
+ <cn> 1 </cn>
+ <cn> 5 </cn>
+ </apply>
+ <apply> <minus/>
+ <apply> <divide/>
+ <cn> 1 </cn>
+ <cn> 7 </cn>
+ </apply>
+ </apply>
+ <ci> &cdots; </ci>
+ </apply>
+ <apply> <divide/>
+ <ci> &pi; </ci>
+ <cn> 4 </cn>
+ </apply>
+ </apply>
+</math> \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mathml/pc-s-002.xml b/doc/context/sources/general/manuals/mathml/pc-s-002.xml
new file mode 100644
index 000000000..86c2368b9
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/pc-s-002.xml
@@ -0,0 +1,36 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <eq/>
+ <apply> <plus/>
+ <cn> 1 </cn>
+ <apply> <divide/>
+ <cn> 1 </cn>
+ <apply> <power/>
+ <cn> 2 </cn>
+ <cn> 2 </cn>
+ </apply>
+ </apply>
+ <apply> <divide/>
+ <cn> 1 </cn>
+ <apply> <power/>
+ <cn> 3 </cn>
+ <cn> 2 </cn>
+ </apply>
+ </apply>
+ <apply> <divide/>
+ <cn> 1 </cn>
+ <apply> <power/>
+ <cn> 4 </cn>
+ <cn> 2 </cn>
+ </apply>
+ </apply>
+ <ci> &cdots; </ci>
+ </apply>
+ <apply> <divide/>
+ <apply> <power/>
+ <ci> &pi; </ci>
+ <cn> 2 </cn>
+ </apply>
+ <cn> 6 </cn>
+ </apply>
+ </apply>
+</math> \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mathml/pc-s-003.xml b/doc/context/sources/general/manuals/mathml/pc-s-003.xml
new file mode 100644
index 000000000..fbe38e40f
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/pc-s-003.xml
@@ -0,0 +1,40 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <eq/>
+ <apply> <plus/>
+ <cn> 1 </cn>
+ <apply> <minus/>
+ <apply> <divide/>
+ <cn> 1 </cn>
+ <apply> <power/>
+ <cn> 2 </cn>
+ <cn> 2 </cn>
+ </apply>
+ </apply>
+ </apply>
+ <apply> <divide/>
+ <cn> 1 </cn>
+ <apply> <power/>
+ <cn> 3 </cn>
+ <cn> 2 </cn>
+ </apply>
+ </apply>
+ <apply> <minus/>
+ <apply> <divide/>
+ <cn> 1 </cn>
+ <apply> <power/>
+ <cn> 4 </cn>
+ <cn> 2 </cn>
+ </apply>
+ </apply>
+ </apply>
+ <ci> &cdots; </ci>
+ </apply>
+ <apply> <divide/>
+ <apply> <power/>
+ <ci> &pi; </ci>
+ <cn> 2 </cn>
+ </apply>
+ <cn> 12 </cn>
+ </apply>
+ </apply>
+</math> \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mathml/wh-g-001.xml b/doc/context/sources/general/manuals/mathml/wh-g-001.xml
new file mode 100644
index 000000000..bd8935150
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/wh-g-001.xml
@@ -0,0 +1,28 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <eq/>
+ <apply> <sin/>
+ <apply> <plus/>
+ <ci> x </ci>
+ <ci> y </ci>
+ </apply>
+ </apply>
+ <apply> <plus/>
+ <apply> <times/>
+ <apply> <sin/>
+ <ci> x </ci>
+ </apply>
+ <apply> <cos/>
+ <ci> y </ci>
+ </apply>
+ </apply>
+ <apply> <times/>
+ <apply> <cos/>
+ <ci> x </ci>
+ </apply>
+ <apply> <sin/>
+ <ci> y </ci>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+</math> \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mathml/wh-g-002.xml b/doc/context/sources/general/manuals/mathml/wh-g-002.xml
new file mode 100644
index 000000000..cfa3cf1a8
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/wh-g-002.xml
@@ -0,0 +1,28 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <eq/>
+ <apply> <sin/>
+ <apply> <minus/>
+ <ci> x </ci>
+ <ci> y </ci>
+ </apply>
+ </apply>
+ <apply> <minus/>
+ <apply> <times/>
+ <apply> <sin/>
+ <ci> x </ci>
+ </apply>
+ <apply> <cos/>
+ <ci> y </ci>
+ </apply>
+ </apply>
+ <apply> <times/>
+ <apply> <cos/>
+ <ci> x </ci>
+ </apply>
+ <apply> <sin/>
+ <ci> y </ci>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+</math> \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mathml/wh-g-003.xml b/doc/context/sources/general/manuals/mathml/wh-g-003.xml
new file mode 100644
index 000000000..4ed5bdddf
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/wh-g-003.xml
@@ -0,0 +1,28 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <eq/>
+ <apply> <cos/>
+ <apply> <plus/>
+ <ci> x </ci>
+ <ci> y </ci>
+ </apply>
+ </apply>
+ <apply> <minus/>
+ <apply> <times/>
+ <apply> <cos/>
+ <ci> x </ci>
+ </apply>
+ <apply> <cos/>
+ <ci> y </ci>
+ </apply>
+ </apply>
+ <apply> <times/>
+ <apply> <sin/>
+ <ci> x </ci>
+ </apply>
+ <apply> <sin/>
+ <ci> y </ci>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+</math> \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mathml/wh-g-004.xml b/doc/context/sources/general/manuals/mathml/wh-g-004.xml
new file mode 100644
index 000000000..a981decdb
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/wh-g-004.xml
@@ -0,0 +1,28 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <eq/>
+ <apply> <cos/>
+ <apply> <minus/>
+ <ci> x </ci>
+ <ci> y </ci>
+ </apply>
+ </apply>
+ <apply> <plus/>
+ <apply> <times/>
+ <apply> <cos/>
+ <ci> x </ci>
+ </apply>
+ <apply> <cos/>
+ <ci> y </ci>
+ </apply>
+ </apply>
+ <apply> <times/>
+ <apply> <sin/>
+ <ci> x </ci>
+ </apply>
+ <apply> <sin/>
+ <ci> y </ci>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+</math> \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mathml/wh-g-005.xml b/doc/context/sources/general/manuals/mathml/wh-g-005.xml
new file mode 100644
index 000000000..3618ae4fe
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/wh-g-005.xml
@@ -0,0 +1,31 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <eq/>
+ <apply> <tan/>
+ <apply> <plus/>
+ <ci> x </ci>
+ <ci> y </ci>
+ </apply>
+ </apply>
+ <apply> <divide/>
+ <apply> <plus/>
+ <apply> <tan/>
+ <ci> x </ci>
+ </apply>
+ <apply> <tan/>
+ <ci> y </ci>
+ </apply>
+ </apply>
+ <apply> <minus/>
+ <cn> 1 </cn>
+ <apply> <times/>
+ <apply> <tan/>
+ <ci> x </ci>
+ </apply>
+ <apply> <tan/>
+ <ci> y </ci>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+</math> \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mathml/wh-g-006.xml b/doc/context/sources/general/manuals/mathml/wh-g-006.xml
new file mode 100644
index 000000000..7438cc96d
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/wh-g-006.xml
@@ -0,0 +1,31 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <eq/>
+ <apply> <tan/>
+ <apply> <minus/>
+ <ci> x </ci>
+ <ci> y </ci>
+ </apply>
+ </apply>
+ <apply> <divide/>
+ <apply> <minus/>
+ <apply> <tan/>
+ <ci> x </ci>
+ </apply>
+ <apply> <tan/>
+ <ci> y </ci>
+ </apply>
+ </apply>
+ <apply> <plus/>
+ <cn> 1 </cn>
+ <apply> <times/>
+ <apply> <tan/>
+ <ci> x </ci>
+ </apply>
+ <apply> <tan/>
+ <ci> y </ci>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+</math> \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mathml/wh-g-007.xml b/doc/context/sources/general/manuals/mathml/wh-g-007.xml
new file mode 100644
index 000000000..98050709f
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/wh-g-007.xml
@@ -0,0 +1,33 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <eq/>
+ <apply> <plus/>
+ <apply> <sin/>
+ <ci> p </ci>
+ </apply>
+ <apply> <sin/>
+ <ci> q </ci>
+ </apply>
+ </apply>
+ <apply> <times/>
+ <cn> 2 </cn>
+ <apply> <sin/>
+ <apply> <divide/>
+ <apply> <plus/>
+ <ci> p </ci>
+ <ci> q </ci>
+ </apply>
+ <cn> 2 </cn>
+ </apply>
+ </apply>
+ <apply> <cos/>
+ <apply> <divide/>
+ <apply> <minus/>
+ <ci> p </ci>
+ <ci> q </ci>
+ </apply>
+ <cn> 2 </cn>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+</math> \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mathml/wh-g-008.xml b/doc/context/sources/general/manuals/mathml/wh-g-008.xml
new file mode 100644
index 000000000..3696b239b
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/wh-g-008.xml
@@ -0,0 +1,33 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <eq/>
+ <apply> <minus/>
+ <apply> <sin/>
+ <ci> p </ci>
+ </apply>
+ <apply> <sin/>
+ <ci> q </ci>
+ </apply>
+ </apply>
+ <apply> <times/>
+ <cn> 2 </cn>
+ <apply> <cos/>
+ <apply> <divide/>
+ <apply> <plus/>
+ <ci> p </ci>
+ <ci> q </ci>
+ </apply>
+ <cn> 2 </cn>
+ </apply>
+ </apply>
+ <apply> <sin/>
+ <apply> <divide/>
+ <apply> <minus/>
+ <ci> p </ci>
+ <ci> q </ci>
+ </apply>
+ <cn> 2 </cn>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+</math> \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mathml/wh-g-009.xml b/doc/context/sources/general/manuals/mathml/wh-g-009.xml
new file mode 100644
index 000000000..a27329902
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/wh-g-009.xml
@@ -0,0 +1,33 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <eq/>
+ <apply> <plus/>
+ <apply> <cos/>
+ <ci> p </ci>
+ </apply>
+ <apply> <cos/>
+ <ci> q </ci>
+ </apply>
+ </apply>
+ <apply> <times/>
+ <cn> 2 </cn>
+ <apply> <cos/>
+ <apply> <divide/>
+ <apply> <plus/>
+ <ci> p </ci>
+ <ci> q </ci>
+ </apply>
+ <cn> 2 </cn>
+ </apply>
+ </apply>
+ <apply> <cos/>
+ <apply> <divide/>
+ <apply> <minus/>
+ <ci> p </ci>
+ <ci> q </ci>
+ </apply>
+ <cn> 2 </cn>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+</math> \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mathml/wh-g-010.xml b/doc/context/sources/general/manuals/mathml/wh-g-010.xml
new file mode 100644
index 000000000..4860ed243
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/wh-g-010.xml
@@ -0,0 +1,35 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <eq/>
+ <apply> <minus/>
+ <apply> <cos/>
+ <ci> p </ci>
+ </apply>
+ <apply> <cos/>
+ <ci> q </ci>
+ </apply>
+ </apply>
+ <apply> <minus/>
+ <apply> <times/>
+ <cn> 2 </cn>
+ <apply> <sin/>
+ <apply> <divide/>
+ <apply> <plus/>
+ <ci> p </ci>
+ <ci> q </ci>
+ </apply>
+ <cn> 2 </cn>
+ </apply>
+ </apply>
+ <apply> <sin/>
+ <apply> <divide/>
+ <apply> <minus/>
+ <ci> p </ci>
+ <ci> q </ci>
+ </apply>
+ <cn> 2 </cn>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+</math> \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mathml/wh-g-011.xml b/doc/context/sources/general/manuals/mathml/wh-g-011.xml
new file mode 100644
index 000000000..d3452b32a
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/wh-g-011.xml
@@ -0,0 +1,27 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <eq/>
+ <apply> <times/>
+ <cn> 2 </cn>
+ <apply> <sin/>
+ <ci> &alpha; </ci>
+ </apply>
+ <apply> <cos/>
+ <ci> &beta; </ci>
+ </apply>
+ </apply>
+ <apply> <plus/>
+ <apply> <sin/>
+ <apply> <plus/>
+ <ci> &alpha; </ci>
+ <ci> &beta; </ci>
+ </apply>
+ </apply>
+ <apply> <sin/>
+ <apply> <minus/>
+ <ci> &alpha; </ci>
+ <ci> &beta; </ci>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+</math> \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mathml/wh-g-012.xml b/doc/context/sources/general/manuals/mathml/wh-g-012.xml
new file mode 100644
index 000000000..55b1be31e
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/wh-g-012.xml
@@ -0,0 +1,27 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <eq/>
+ <apply> <times/>
+ <cn> 2 </cn>
+ <apply> <cos/>
+ <ci> &alpha; </ci>
+ </apply>
+ <apply> <sin/>
+ <ci> &beta; </ci>
+ </apply>
+ </apply>
+ <apply> <minus/>
+ <apply> <sin/>
+ <apply> <plus/>
+ <ci> &alpha; </ci>
+ <ci> &beta; </ci>
+ </apply>
+ </apply>
+ <apply> <sin/>
+ <apply> <minus/>
+ <ci> &alpha; </ci>
+ <ci> &beta; </ci>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+</math> \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mathml/wh-g-013.xml b/doc/context/sources/general/manuals/mathml/wh-g-013.xml
new file mode 100644
index 000000000..25048092b
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/wh-g-013.xml
@@ -0,0 +1,27 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <eq/>
+ <apply> <times/>
+ <cn> 2 </cn>
+ <apply> <cos/>
+ <ci> &alpha; </ci>
+ </apply>
+ <apply> <cos/>
+ <ci> &beta; </ci>
+ </apply>
+ </apply>
+ <apply> <plus/>
+ <apply> <cos/>
+ <apply> <plus/>
+ <ci> &alpha; </ci>
+ <ci> &beta; </ci>
+ </apply>
+ </apply>
+ <apply> <cos/>
+ <apply> <minus/>
+ <ci> &alpha; </ci>
+ <ci> &beta; </ci>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+</math> \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mathml/wh-g-014.xml b/doc/context/sources/general/manuals/mathml/wh-g-014.xml
new file mode 100644
index 000000000..196271fbe
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/wh-g-014.xml
@@ -0,0 +1,29 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <eq/>
+ <apply> <minus/>
+ <apply> <times/>
+ <cn> 2 </cn>
+ <apply> <sin/>
+ <ci> &alpha; </ci>
+ </apply>
+ <apply> <cos/>
+ <ci> &beta; </ci>
+ </apply>
+ </apply>
+ </apply>
+ <apply> <minus/>
+ <apply> <sin/>
+ <apply> <plus/>
+ <ci> &alpha; </ci>
+ <ci> &beta; </ci>
+ </apply>
+ </apply>
+ <apply> <sin/>
+ <apply> <minus/>
+ <ci> &alpha; </ci>
+ <ci> &beta; </ci>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+</math> \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mathml/wh-g-015.xml b/doc/context/sources/general/manuals/mathml/wh-g-015.xml
new file mode 100644
index 000000000..1b146e640
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/wh-g-015.xml
@@ -0,0 +1,32 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <forall/>
+ <condition>
+ <mrow>
+ <mi> &bigtriangleup; </mi>
+ <mi> A </mi>
+ <mi> B </mi>
+ <mi> C </mi>
+ </mrow>
+ </condition>
+ <apply> <plus/>
+ <apply> <divide/>
+ <ci> a </ci>
+ <apply> <sin/>
+ <ci> &alpha; </ci>
+ </apply>
+ </apply>
+ <apply> <divide/>
+ <ci> b </ci>
+ <apply> <sin/>
+ <ci> &beta; </ci>
+ </apply>
+ </apply>
+ <apply> <divide/>
+ <ci> c </ci>
+ <apply> <sin/>
+ <ci> &gamma; </ci>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+</math>
diff --git a/doc/context/sources/general/manuals/mathml/wh-g-016.xml b/doc/context/sources/general/manuals/mathml/wh-g-016.xml
new file mode 100644
index 000000000..deae671b5
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/wh-g-016.xml
@@ -0,0 +1,90 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <forall/>
+ <condition>
+ <mrow>
+ <mi> &bigtriangleup; </mi>
+ <mi> A </mi>
+ <mi> B </mi>
+ <mi> C </mi>
+ </mrow>
+ </condition>
+ <apply> <eq/>
+ <apply> <power/>
+ <ci> a </ci>
+ <cn> 2 </cn>
+ </apply>
+ <apply> <plus/>
+ <apply> <power/>
+ <ci> b </ci>
+ <cn> 2 </cn>
+ </apply>
+ <apply> <power/>
+ <ci> c </ci>
+ <cn> 2 </cn>
+ </apply>
+ <apply> <minus/>
+ <apply> <times/>
+ <cn> 2 </cn>
+ <ci> b </ci>
+ <ci> c </ci>
+ <apply> <cos/>
+ <ci> &alpha; </ci>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+ <apply> <eq/>
+ <apply> <power/>
+ <ci> b </ci>
+ <cn> 2 </cn>
+ </apply>
+ <apply> <plus/>
+ <apply> <power/>
+ <ci> a </ci>
+ <cn> 2 </cn>
+ </apply>
+ <apply> <power/>
+ <ci> c </ci>
+ <cn> 2 </cn>
+ </apply>
+ <apply> <minus/>
+ <apply> <times/>
+ <cn> 2 </cn>
+ <ci> a </ci>
+ <ci> c </ci>
+ <apply> <cos/>
+ <ci> &beta; </ci>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+ <apply> <eq/>
+ <apply> <power/>
+ <ci> c </ci>
+ <cn> 2 </cn>
+ </apply>
+ <apply> <plus/>
+ <apply> <power/>
+ <ci> a </ci>
+ <cn> 2 </cn>
+ </apply>
+ <apply> <power/>
+ <ci> b </ci>
+ <cn> 2 </cn>
+ </apply>
+ <apply> <minus/>
+ <apply> <times/>
+ <cn> 2 </cn>
+ <ci> a </ci>
+ <ci> b </ci>
+ <apply> <cos/>
+ <ci> &gamma; </ci>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+</math>
diff --git a/doc/context/sources/general/manuals/mathml/wh-l-001.xml b/doc/context/sources/general/manuals/mathml/wh-l-001.xml
new file mode 100644
index 000000000..00ea756c6
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/wh-l-001.xml
@@ -0,0 +1,35 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <forall/>
+ <condition>
+ <apply> <and/>
+ <apply> <gt/>
+ <ci> a </ci>
+ <cn> 0 </cn>
+ </apply>
+ <apply> <gt/>
+ <ci> b </ci>
+ <cn> 0 </cn>
+ </apply>
+ </apply>
+ </condition>
+ <apply> <eq/>
+ <apply> <log/>
+ <logbase> <ci> g </ci> </logbase>
+ <apply> <times/>
+ <ci> a </ci>
+ <ci> b </ci>
+ </apply>
+ </apply>
+ <apply> <plus/>
+ <apply> <log/>
+ <logbase> <ci> g </ci> </logbase>
+ <ci> a </ci>
+ </apply>
+ <apply> <log/>
+ <logbase> <ci> g </ci> </logbase>
+ <ci> b </ci>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+</math> \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mathml/wh-l-002.xml b/doc/context/sources/general/manuals/mathml/wh-l-002.xml
new file mode 100644
index 000000000..5afc5f164
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/wh-l-002.xml
@@ -0,0 +1,35 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <forall/>
+ <condition>
+ <apply> <and/>
+ <apply> <gt/>
+ <ci> a </ci>
+ <cn> 0 </cn>
+ </apply>
+ <apply> <gt/>
+ <ci> b </ci>
+ <cn> 0 </cn>
+ </apply>
+ </apply>
+ </condition>
+ <apply> <eq/>
+ <apply> <log/>
+ <logbase> <ci> g </ci> </logbase>
+ <apply> <divide/>
+ <ci> a </ci>
+ <ci> b </ci>
+ </apply>
+ </apply>
+ <apply> <minus/>
+ <apply> <log/>
+ <logbase> <ci> g </ci> </logbase>
+ <ci> a </ci>
+ </apply>
+ <apply> <log/>
+ <logbase> <ci> g </ci> </logbase>
+ <ci> b </ci>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+</math> \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mathml/wh-l-003.xml b/doc/context/sources/general/manuals/mathml/wh-l-003.xml
new file mode 100644
index 000000000..673ca36aa
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/wh-l-003.xml
@@ -0,0 +1,32 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <forall/>
+ <condition>
+ <apply> <and/>
+ <apply> <in/>
+ <ci> b </ci>
+ <ci> &reals; </ci>
+ </apply>
+ <apply> <gt/>
+ <ci> a </ci>
+ <cn> 0 </cn>
+ </apply>
+ </apply>
+ </condition>
+ <apply> <eq/>
+ <apply> <log/>
+ <logbase> <ci> g </ci> </logbase>
+ <apply> <power/>
+ <ci> a </ci>
+ <ci> b </ci>
+ </apply>
+ </apply>
+ <apply> <times/>
+ <ci> b </ci>
+ <apply> <log/>
+ <logbase> <ci> g </ci> </logbase>
+ <ci> a </ci>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+</math> \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mathml/wh-l-004.xml b/doc/context/sources/general/manuals/mathml/wh-l-004.xml
new file mode 100644
index 000000000..bf4e51c0c
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/wh-l-004.xml
@@ -0,0 +1,28 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <forall/>
+ <condition>
+ <apply> <and/>
+ <apply> <gt/>
+ <ci> a </ci>
+ <cn> 0 </cn>
+ </apply>
+ </apply>
+ </condition>
+ <apply> <eq/>
+ <apply> <log/>
+ <logbase> <ci> g </ci> </logbase>
+ <ci> a </ci>
+ </apply>
+ <apply> <divide/>
+ <apply> <log/>
+ <logbase> <ci> p </ci> </logbase>
+ <ci> a </ci>
+ </apply>
+ <apply> <log/>
+ <logbase> <ci> p </ci> </logbase>
+ <ci> g </ci>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+</math> \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mathml/wh-s-001.xml b/doc/context/sources/general/manuals/mathml/wh-s-001.xml
new file mode 100644
index 000000000..b149c7079
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/wh-s-001.xml
@@ -0,0 +1,49 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <forall/>
+ <condition>
+ <apply> <in/>
+ <ci> x </ci>
+ <ci> &reals; </ci>
+ </apply>
+ </condition>
+ <apply> <eq/>
+ <apply> <power/>
+ <ci> &exponentiale; </ci>
+ <ci> x </ci>
+ </apply>
+ <apply> <plus/>
+ <cn> 1 </cn>
+ <ci> x </ci>
+ <apply> <divide/>
+ <apply> <power/>
+ <ci> x </ci>
+ <cn> 2 </cn>
+ </apply>
+ <apply> <factorial/>
+ <cn> 2 </cn>
+ </apply>
+ </apply>
+ <apply> <divide/>
+ <apply> <power/>
+ <ci> x </ci>
+ <cn> 3 </cn>
+ </apply>
+ <apply> <factorial/>
+ <cn> 3 </cn>
+ </apply>
+ </apply>
+ <ci> &cdots; </ci>
+ <apply> <divide/>
+ <apply> <power/>
+ <ci> x </ci>
+ <ci> n </ci>
+ </apply>
+ <apply> <factorial/>
+ <ci> n </ci>
+ </apply>
+ </apply>
+ <ci> &cdots; </ci>
+ </apply>
+ </apply>
+ </apply>
+</math> \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mathml/wh-s-002.xml b/doc/context/sources/general/manuals/mathml/wh-s-002.xml
new file mode 100644
index 000000000..ca8583753
--- /dev/null
+++ b/doc/context/sources/general/manuals/mathml/wh-s-002.xml
@@ -0,0 +1,63 @@
+<math xmlns='http://www.w3c.org/mathml' version='2.0'>
+ <apply> <forall/>
+ <condition>
+ <apply> <in/>
+ <ci> x </ci>
+ <ci> &reals; </ci>
+ </apply>
+ </condition>
+ <apply> <eq/>
+ <apply> <power/>
+ <ci> &exponentiale; </ci>
+ <apply> <minus/>
+ <ci> x </ci>
+ </apply>
+ </apply>
+ <apply> <plus/>
+ <cn> 1 </cn>
+ <apply> <minus/>
+ <ci> x </ci>
+ </apply>
+ <apply> <divide/>
+ <apply> <power/>
+ <ci> x </ci>
+ <cn> 2 </cn>
+ </apply>
+ <apply> <factorial/>
+ <cn> 2 </cn>
+ </apply>
+ </apply>
+ <apply> <minus/>
+ <apply> <divide/>
+ <apply> <power/>
+ <ci> x </ci>
+ <cn> 3 </cn>
+ </apply>
+ <apply> <factorial/>
+ <cn> 3 </cn>
+ </apply>
+ </apply>
+ </apply>
+ <ci> &cdots; </ci>
+ <apply> <times/>
+ <apply> <power/>
+ <apply> <minus/>
+ <cn> 1 </cn>
+ </apply>
+ <ci> n </ci>
+ </apply>
+ <apply> <divide/>
+ <apply> <power/>
+ <ci> x </ci>
+ <ci> n </ci>
+ </apply>
+ <apply> <factorial/>
+ <ci> n </ci>
+ </apply>
+ </apply>
+ <ci> &cdots; </ci>
+ </apply>
+ </apply>
+ </apply>
+ </apply>
+</math> \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mcommon.tex b/doc/context/sources/general/manuals/mcommon.tex
index 94b5f9bf5..d4c2acb53 100644
--- a/doc/context/sources/general/manuals/mcommon.tex
+++ b/doc/context/sources/general/manuals/mcommon.tex
@@ -33,7 +33,7 @@
\definetypeface [mainface] [rm] [serif] [pagella] [default]
\definetypeface [mainface] [ss] [sans] [heros] [default] % [rscale=1.1]
-\definetypeface [mainface] [tt] [mono] [heros] [default] % [rscale=1.1]
+\definetypeface [mainface] [tt] [mono] [cursor] [default] % [rscale=1.1]
\definetypeface [mainface] [mm] [math] [pagella] [default]
\setupbodyfont[mainface,12pt]
diff --git a/doc/context/sources/general/manuals/mk/luatexref-t-luatex-progress-intermediate.lut b/doc/context/sources/general/manuals/mk/luatexref-t-luatex-progress-intermediate.lut
new file mode 100644
index 000000000..bd373d413
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/luatexref-t-luatex-progress-intermediate.lut
@@ -0,0 +1,3927 @@
+return {
+ {
+ ["cs_count"]=40670,
+ ["dyn_used"]=636455,
+ ["elapsed_time"]=1.1339998245239,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59690749,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="16",
+ ["attribute_list"]="8",
+ ["dir"]="2",
+ ["disc"]="1",
+ ["glue"]="1",
+ ["glue_spec"]="18",
+ ["hlist"]="3",
+ ["kern"]="1",
+ ["pdf_literal"]="35",
+ ["penalty"]="3",
+ ["rule"]="2",
+ ["vlist"]="5",
+ },
+ ["obj_ptr"]=445,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=711749,
+ ["str_ptr"]=2139635,
+ },
+ {
+ ["cs_count"]=40850,
+ ["dyn_used"]=646472,
+ ["elapsed_time"]=0.49200010299683,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81899167,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="321",
+ ["attribute_list"]="128",
+ ["dir"]="5",
+ ["disc"]="3",
+ ["glue"]="233",
+ ["glue_spec"]="148",
+ ["glyph"]="27",
+ ["hlist"]="111",
+ ["if_stack"]="9",
+ ["kern"]="22",
+ ["local_par"]="16",
+ ["pdf_literal"]="77",
+ ["penalty"]="19",
+ ["rule"]="11",
+ ["temp"]="5",
+ ["vlist"]="67",
+ },
+ ["obj_ptr"]=445,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=716825,
+ ["str_ptr"]=2139884,
+ },
+ {
+ ["cs_count"]=40854,
+ ["dyn_used"]=643764,
+ ["elapsed_time"]=0.0049998760223389,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81913802,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="72",
+ ["attribute_list"]="34",
+ ["dir"]="5",
+ ["disc"]="1",
+ ["glue"]="77",
+ ["glue_spec"]="90",
+ ["hlist"]="22",
+ ["if_stack"]="12",
+ ["kern"]="1",
+ ["local_par"]="8",
+ ["pdf_literal"]="44",
+ ["penalty"]="6",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="20",
+ },
+ ["obj_ptr"]=450,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=716884,
+ ["str_ptr"]=2139888,
+ },
+ {
+ ["cs_count"]=40855,
+ ["dyn_used"]=643711,
+ ["elapsed_time"]=0.069000005722046,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83659152,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="198",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="11",
+ ["glue"]="226",
+ ["glue_spec"]="129",
+ ["glyph"]="108",
+ ["hlist"]="77",
+ ["if_stack"]="9",
+ ["kern"]="8",
+ ["local_par"]="16",
+ ["pdf_literal"]="47",
+ ["penalty"]="15",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="43",
+ },
+ ["obj_ptr"]=453,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=716970,
+ ["str_ptr"]=2139892,
+ },
+ {
+ ["cs_count"]=40855,
+ ["dyn_used"]=643756,
+ ["elapsed_time"]=0.005000114440918,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83661195,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="72",
+ ["attribute_list"]="34",
+ ["dir"]="5",
+ ["disc"]="1",
+ ["glue"]="77",
+ ["glue_spec"]="90",
+ ["hlist"]="22",
+ ["if_stack"]="12",
+ ["kern"]="1",
+ ["local_par"]="8",
+ ["pdf_literal"]="44",
+ ["penalty"]="6",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="20",
+ },
+ ["obj_ptr"]=457,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=716970,
+ ["str_ptr"]=2139892,
+ },
+ {
+ ["cs_count"]=40978,
+ ["dyn_used"]=654719,
+ ["elapsed_time"]=0.27900004386902,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=90862258,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="2354",
+ ["attribute_list"]="827",
+ ["dir"]="5",
+ ["disc"]="87",
+ ["glue"]="865",
+ ["glue_spec"]="414",
+ ["glyph"]="994",
+ ["hlist"]="759",
+ ["if_stack"]="4",
+ ["kern"]="17",
+ ["local_par"]="100",
+ ["mark"]="4",
+ ["math"]="2",
+ ["pdf_annot"]="41",
+ ["pdf_literal"]="152",
+ ["penalty"]="267",
+ ["rule"]="174",
+ ["temp"]="5",
+ ["vlist"]="115",
+ },
+ ["obj_ptr"]=501,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=721093,
+ ["str_ptr"]=2140061,
+ },
+ {
+ ["cs_count"]=40982,
+ ["dyn_used"]=657240,
+ ["elapsed_time"]=0.10199999809265,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=91415423,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="2465",
+ ["attribute_list"]="864",
+ ["dir"]="5",
+ ["disc"]="62",
+ ["glue"]="930",
+ ["glue_spec"]="452",
+ ["glyph"]="1116",
+ ["hlist"]="808",
+ ["if_stack"]="4",
+ ["kern"]="6",
+ ["local_par"]="106",
+ ["pdf_annot"]="45",
+ ["pdf_literal"]="212",
+ ["penalty"]="311",
+ ["rule"]="214",
+ ["temp"]="5",
+ ["vlist"]="118",
+ },
+ ["obj_ptr"]=551,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=721186,
+ ["str_ptr"]=2140065,
+ },
+ {
+ ["cs_count"]=40986,
+ ["dyn_used"]=659350,
+ ["elapsed_time"]=0.087999820709229,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=91930731,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="2348",
+ ["attribute_list"]="825",
+ ["dir"]="5",
+ ["disc"]="89",
+ ["glue"]="937",
+ ["glue_spec"]="432",
+ ["glyph"]="1166",
+ ["hlist"]="781",
+ ["if_stack"]="4",
+ ["kern"]="15",
+ ["local_par"]="102",
+ ["math"]="2",
+ ["pdf_annot"]="43",
+ ["pdf_literal"]="156",
+ ["penalty"]="282",
+ ["rule"]="187",
+ ["temp"]="5",
+ ["vlist"]="116",
+ },
+ ["obj_ptr"]=596,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=721264,
+ ["str_ptr"]=2140069,
+ },
+ {
+ ["cs_count"]=40988,
+ ["dyn_used"]=658040,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=92030871,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="404",
+ ["attribute_list"]="177",
+ ["dir"]="5",
+ ["disc"]="6",
+ ["glue"]="313",
+ ["glue_spec"]="174",
+ ["glyph"]="66",
+ ["hlist"]="178",
+ ["if_stack"]="11",
+ ["kern"]="6",
+ ["local_par"]="22",
+ ["pdf_annot"]="3",
+ ["pdf_literal"]="76",
+ ["penalty"]="33",
+ ["rule"]="19",
+ ["temp"]="5",
+ ["vlist"]="76",
+ },
+ ["obj_ptr"]=601,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=721290,
+ ["str_ptr"]=2140071,
+ },
+ {
+ ["cs_count"]=41030,
+ ["dyn_used"]=660523,
+ ["elapsed_time"]=0.10099983215332,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=95611811,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="701",
+ ["attribute_list"]="276",
+ ["dir"]="5",
+ ["disc"]="112",
+ ["glue"]="605",
+ ["glue_spec"]="239",
+ ["glyph"]="1278",
+ ["hlist"]="219",
+ ["if_stack"]="11",
+ ["kern"]="41",
+ ["local_par"]="36",
+ ["mark"]="4",
+ ["math"]="16",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="74",
+ ["penalty"]="75",
+ ["rule"]="25",
+ ["temp"]="5",
+ ["vlist"]="86",
+ ["write"]="2",
+ },
+ ["obj_ptr"]=604,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=722160,
+ ["str_ptr"]=2140116,
+ },
+ {
+ ["cs_count"]=41033,
+ ["dyn_used"]=662674,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=95695201,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="266",
+ ["attribute_list"]="131",
+ ["dir"]="5",
+ ["disc"]="1",
+ ["glue"]="271",
+ ["glue_spec"]="155",
+ ["glyph"]="2",
+ ["hlist"]="136",
+ ["if_stack"]="13",
+ ["kern"]="6",
+ ["local_par"]="17",
+ ["pdf_literal"]="70",
+ ["penalty"]="16",
+ ["rule"]="7",
+ ["temp"]="5",
+ ["vlist"]="73",
+ },
+ ["obj_ptr"]=610,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=722216,
+ ["str_ptr"]=2140120,
+ },
+ {
+ ["cs_count"]=41140,
+ ["dyn_used"]=668242,
+ ["elapsed_time"]=0.28099989891052,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=103965740,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1326",
+ ["attribute_list"]="486",
+ ["dir"]="5",
+ ["disc"]="181",
+ ["glue"]="1199",
+ ["glue_spec"]="398",
+ ["glyph"]="2375",
+ ["hlist"]="395",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="37",
+ ["mark"]="12",
+ ["math"]="16",
+ ["pdf_dest"]="3",
+ ["pdf_literal"]="88",
+ ["penalty"]="109",
+ ["rule"]="52",
+ ["temp"]="5",
+ ["vlist"]="84",
+ ["write"]="3",
+ },
+ ["obj_ptr"]=613,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=725995,
+ ["str_ptr"]=2140272,
+ },
+ {
+ ["cs_count"]=41166,
+ ["dyn_used"]=672097,
+ ["elapsed_time"]=0.12400007247925,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=104498597,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1870",
+ ["attribute_list"]="626",
+ ["dir"]="5",
+ ["disc"]="102",
+ ["glue"]="1374",
+ ["glue_spec"]="491",
+ ["glyph"]="1848",
+ ["hlist"]="518",
+ ["if_stack"]="3",
+ ["kern"]="23",
+ ["local_par"]="43",
+ ["mark"]="8",
+ ["math"]="34",
+ ["pdf_annot"]="1",
+ ["pdf_dest"]="2",
+ ["pdf_literal"]="122",
+ ["penalty"]="153",
+ ["rule"]="72",
+ ["temp"]="5",
+ ["vlist"]="83",
+ ["write"]="2",
+ },
+ ["obj_ptr"]=620,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=726296,
+ ["str_ptr"]=2140301,
+ },
+ {
+ ["cs_count"]=41271,
+ ["dyn_used"]=676336,
+ ["elapsed_time"]=0.26099991798401,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=112679370,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="991",
+ ["attribute_list"]="333",
+ ["dir"]="5",
+ ["disc"]="190",
+ ["glue"]="908",
+ ["glue_spec"]="335",
+ ["glyph"]="2510",
+ ["hlist"]="244",
+ ["if_stack"]="4",
+ ["kern"]="25",
+ ["local_par"]="45",
+ ["mark"]="8",
+ ["math"]="18",
+ ["pdf_annot"]="1",
+ ["pdf_dest"]="2",
+ ["pdf_literal"]="125",
+ ["penalty"]="116",
+ ["rule"]="50",
+ ["temp"]="6",
+ ["vlist"]="81",
+ ["write"]="2",
+ },
+ ["obj_ptr"]=625,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=730142,
+ ["str_ptr"]=2140454,
+ },
+ {
+ ["cs_count"]=41287,
+ ["dyn_used"]=679077,
+ ["elapsed_time"]=0.16900014877319,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=114064466,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1039",
+ ["attribute_list"]="349",
+ ["dir"]="5",
+ ["disc"]="182",
+ ["glue"]="917",
+ ["glue_spec"]="332",
+ ["glyph"]="2616",
+ ["hlist"]="227",
+ ["if_stack"]="4",
+ ["kern"]="26",
+ ["local_par"]="39",
+ ["mark"]="16",
+ ["math"]="21",
+ ["pdf_dest"]="4",
+ ["pdf_literal"]="110",
+ ["penalty"]="99",
+ ["rule"]="36",
+ ["temp"]="5",
+ ["vlist"]="77",
+ ["write"]="4",
+ },
+ ["obj_ptr"]=631,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=730499,
+ ["str_ptr"]=2140474,
+ },
+ {
+ ["cs_count"]=41288,
+ ["dyn_used"]=681718,
+ ["elapsed_time"]=0.1710000038147,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=114413831,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1066",
+ ["attribute_list"]="358",
+ ["dir"]="5",
+ ["disc"]="114",
+ ["glue"]="760",
+ ["glue_spec"]="319",
+ ["glyph"]="1784",
+ ["hlist"]="231",
+ ["if_stack"]="4",
+ ["kern"]="22",
+ ["local_par"]="45",
+ ["mark"]="24",
+ ["math"]="16",
+ ["pdf_dest"]="6",
+ ["pdf_literal"]="104",
+ ["penalty"]="104",
+ ["rule"]="39",
+ ["temp"]="6",
+ ["vlist"]="79",
+ ["write"]="6",
+ },
+ ["obj_ptr"]=636,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=730534,
+ ["str_ptr"]=2140478,
+ },
+ {
+ ["cs_count"]=41394,
+ ["dyn_used"]=688608,
+ ["elapsed_time"]=0.30399990081787,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=123046912,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="2149",
+ ["attribute_list"]="719",
+ ["dir"]="5",
+ ["disc"]="128",
+ ["glue"]="1435",
+ ["glue_spec"]="469",
+ ["glyph"]="1822",
+ ["hlist"]="550",
+ ["if_stack"]="4",
+ ["kern"]="22",
+ ["local_par"]="41",
+ ["mark"]="20",
+ ["math"]="16",
+ ["pdf_dest"]="5",
+ ["pdf_literal"]="90",
+ ["penalty"]="119",
+ ["rule"]="71",
+ ["temp"]="5",
+ ["vlist"]="79",
+ ["write"]="6",
+ },
+ ["obj_ptr"]=644,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=734476,
+ ["str_ptr"]=2140636,
+ },
+ {
+ ["cs_count"]=41397,
+ ["dyn_used"]=689967,
+ ["elapsed_time"]=0.12899994850159,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=123359723,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1216",
+ ["attribute_list"]="408",
+ ["dir"]="5",
+ ["disc"]="77",
+ ["glue"]="878",
+ ["glue_spec"]="325",
+ ["glyph"]="1293",
+ ["hlist"]="317",
+ ["if_stack"]="11",
+ ["kern"]="16",
+ ["local_par"]="34",
+ ["mark"]="16",
+ ["math"]="2",
+ ["pdf_dest"]="4",
+ ["pdf_literal"]="92",
+ ["penalty"]="78",
+ ["rule"]="40",
+ ["temp"]="5",
+ ["vlist"]="77",
+ ["write"]="4",
+ },
+ ["obj_ptr"]=651,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=734569,
+ ["str_ptr"]=2140644,
+ },
+ {
+ ["cs_count"]=41398,
+ ["dyn_used"]=691906,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=123443425,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="409",
+ ["attribute_list"]="139",
+ ["dir"]="5",
+ ["disc"]="1",
+ ["glue"]="271",
+ ["glue_spec"]="158",
+ ["glyph"]="3",
+ ["hlist"]="136",
+ ["if_stack"]="13",
+ ["kern"]="6",
+ ["local_par"]="17",
+ ["pdf_literal"]="76",
+ ["penalty"]="16",
+ ["rule"]="7",
+ ["temp"]="5",
+ ["vlist"]="73",
+ },
+ ["obj_ptr"]=657,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=734611,
+ ["str_ptr"]=2140649,
+ },
+ {
+ ["cs_count"]=41399,
+ ["dyn_used"]=695008,
+ ["elapsed_time"]=0.15999984741211,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=123869231,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1273",
+ ["attribute_list"]="427",
+ ["dir"]="5",
+ ["disc"]="168",
+ ["glue"]="921",
+ ["glue_spec"]="341",
+ ["glyph"]="2020",
+ ["hlist"]="294",
+ ["if_stack"]="6",
+ ["kern"]="24",
+ ["local_par"]="48",
+ ["mark"]="20",
+ ["math"]="10",
+ ["pdf_dest"]="6",
+ ["pdf_literal"]="112",
+ ["penalty"]="123",
+ ["rule"]="60",
+ ["temp"]="5",
+ ["vlist"]="86",
+ ["write"]="8",
+ },
+ ["obj_ptr"]=660,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=734629,
+ ["str_ptr"]=2140650,
+ },
+ {
+ ["cs_count"]=41400,
+ ["dyn_used"]=697078,
+ ["elapsed_time"]=0.084000110626221,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=124346644,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1279",
+ ["attribute_list"]="429",
+ ["dir"]="5",
+ ["disc"]="204",
+ ["glue"]="1091",
+ ["glue_spec"]="351",
+ ["glyph"]="2803",
+ ["hlist"]="294",
+ ["if_stack"]="4",
+ ["kern"]="23",
+ ["local_par"]="29",
+ ["mark"]="4",
+ ["pdf_annot"]="1",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="132",
+ ["penalty"]="110",
+ ["rule"]="60",
+ ["temp"]="5",
+ ["vlist"]="74",
+ ["write"]="1",
+ },
+ ["obj_ptr"]=670,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=734681,
+ ["str_ptr"]=2140657,
+ },
+ {
+ ["cs_count"]=41403,
+ ["dyn_used"]=699640,
+ ["elapsed_time"]=0.095999956130981,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=127222121,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="988",
+ ["attribute_list"]="332",
+ ["dir"]="5",
+ ["disc"]="209",
+ ["glue"]="1052",
+ ["glue_spec"]="322",
+ ["glyph"]="3212",
+ ["hlist"]="241",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="38",
+ ["math"]="24",
+ ["pdf_literal"]="156",
+ ["penalty"]="145",
+ ["rule"]="67",
+ ["temp"]="5",
+ ["vlist"]="73",
+ ["write"]="1",
+ },
+ ["obj_ptr"]=673,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=734783,
+ ["str_ptr"]=2140662,
+ },
+ {
+ ["cs_count"]=41404,
+ ["dyn_used"]=701874,
+ ["elapsed_time"]=0.078000068664551,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=127567611,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="991",
+ ["attribute_list"]="333",
+ ["dir"]="5",
+ ["disc"]="146",
+ ["glue"]="822",
+ ["glue_spec"]="381",
+ ["glyph"]="2012",
+ ["hlist"]="230",
+ ["if_stack"]="11",
+ ["kern"]="14",
+ ["local_par"]="33",
+ ["mark"]="4",
+ ["math"]="16",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="126",
+ ["penalty"]="177",
+ ["rule"]="42",
+ ["temp"]="5",
+ ["vlist"]="74",
+ ["write"]="3",
+ },
+ ["obj_ptr"]=677,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=734801,
+ ["str_ptr"]=2140663,
+ },
+ {
+ ["cs_count"]=41409,
+ ["dyn_used"]=705864,
+ ["elapsed_time"]=0.13399982452393,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=128424457,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1039",
+ ["attribute_list"]="349",
+ ["dir"]="5",
+ ["disc"]="104",
+ ["glue"]="699",
+ ["glue_spec"]="298",
+ ["glyph"]="1643",
+ ["hlist"]="267",
+ ["if_stack"]="3",
+ ["kern"]="25",
+ ["local_par"]="63",
+ ["mark"]="12",
+ ["math"]="4",
+ ["pdf_dest"]="4",
+ ["pdf_literal"]="142",
+ ["penalty"]="127",
+ ["rule"]="62",
+ ["temp"]="5",
+ ["vlist"]="82",
+ ["write"]="5",
+ },
+ ["obj_ptr"]=680,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=734986,
+ ["str_ptr"]=2140671,
+ },
+ {
+ ["cs_count"]=41410,
+ ["dyn_used"]=707665,
+ ["elapsed_time"]=0.051000118255615,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=128675531,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="682",
+ ["attribute_list"]="230",
+ ["dir"]="5",
+ ["disc"]="2",
+ ["glue"]="530",
+ ["glue_spec"]="243",
+ ["glyph"]="1097",
+ ["hlist"]="267",
+ ["if_stack"]="3",
+ ["kern"]="8",
+ ["local_par"]="78",
+ ["pdf_literal"]="202",
+ ["penalty"]="139",
+ ["rule"]="71",
+ ["temp"]="5",
+ ["vlist"]="77",
+ },
+ ["obj_ptr"]=686,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=735031,
+ ["str_ptr"]=2140676,
+ },
+ {
+ ["cs_count"]=41411,
+ ["dyn_used"]=710562,
+ ["elapsed_time"]=0.18400001525879,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=129019030,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1306",
+ ["attribute_list"]="438",
+ ["dir"]="5",
+ ["disc"]="40",
+ ["glue"]="782",
+ ["glue_spec"]="383",
+ ["glyph"]="1446",
+ ["hlist"]="366",
+ ["if_stack"]="3",
+ ["kern"]="8",
+ ["local_par"]="103",
+ ["mark"]="12",
+ ["pdf_dest"]="3",
+ ["pdf_literal"]="228",
+ ["penalty"]="211",
+ ["rule"]="101",
+ ["temp"]="5",
+ ["vlist"]="107",
+ ["write"]="3",
+ },
+ ["obj_ptr"]=689,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=735049,
+ ["str_ptr"]=2140677,
+ },
+ {
+ ["cs_count"]=41412,
+ ["dyn_used"]=711958,
+ ["elapsed_time"]=0.19099998474121,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=129324216,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1402",
+ ["attribute_list"]="470",
+ ["dir"]="5",
+ ["disc"]="89",
+ ["glue"]="839",
+ ["glue_spec"]="384",
+ ["glyph"]="1655",
+ ["hlist"]="319",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="78",
+ ["mark"]="16",
+ ["pdf_dest"]="4",
+ ["pdf_literal"]="175",
+ ["penalty"]="179",
+ ["rule"]="79",
+ ["temp"]="6",
+ ["vlist"]="106",
+ ["write"]="4",
+ },
+ ["obj_ptr"]=695,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=735085,
+ ["str_ptr"]=2140681,
+ },
+ {
+ ["cs_count"]=41418,
+ ["dyn_used"]=714543,
+ ["elapsed_time"]=0.068000078201294,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=129547329,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="721",
+ ["attribute_list"]="243",
+ ["dir"]="5",
+ ["disc"]="105",
+ ["glue"]="698",
+ ["glue_spec"]="309",
+ ["glyph"]="1662",
+ ["hlist"]="215",
+ ["if_stack"]="5",
+ ["kern"]="16",
+ ["local_par"]="52",
+ ["mark"]="4",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="135",
+ ["penalty"]="94",
+ ["rule"]="40",
+ ["temp"]="5",
+ ["vlist"]="74",
+ ["write"]="1",
+ },
+ ["obj_ptr"]=701,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=735236,
+ ["str_ptr"]=2140691,
+ },
+ {
+ ["cs_count"]=41419,
+ ["dyn_used"]=717105,
+ ["elapsed_time"]=0.11699986457825,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=129546084,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="919",
+ ["attribute_list"]="309",
+ ["dir"]="5",
+ ["disc"]="86",
+ ["glue"]="712",
+ ["glue_spec"]="309",
+ ["glyph"]="1550",
+ ["hlist"]="214",
+ ["if_stack"]="5",
+ ["kern"]="22",
+ ["local_par"]="45",
+ ["mark"]="12",
+ ["pdf_dest"]="3",
+ ["pdf_literal"]="123",
+ ["penalty"]="97",
+ ["rule"]="39",
+ ["temp"]="5",
+ ["vlist"]="76",
+ ["write"]="3",
+ },
+ ["obj_ptr"]=704,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=735260,
+ ["str_ptr"]=2140693,
+ },
+ {
+ ["cs_count"]=41420,
+ ["dyn_used"]=719375,
+ ["elapsed_time"]=0.16400003433228,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=128597778,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1252",
+ ["attribute_list"]="420",
+ ["dir"]="5",
+ ["disc"]="101",
+ ["glue"]="863",
+ ["glue_spec"]="396",
+ ["glyph"]="1770",
+ ["hlist"]="247",
+ ["if_stack"]="4",
+ ["kern"]="32",
+ ["local_par"]="47",
+ ["mark"]="24",
+ ["math"]="10",
+ ["pdf_dest"]="6",
+ ["pdf_literal"]="109",
+ ["penalty"]="154",
+ ["rule"]="74",
+ ["temp"]="5",
+ ["vlist"]="79",
+ ["write"]="8",
+ },
+ ["obj_ptr"]=708,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=735290,
+ ["str_ptr"]=2140696,
+ },
+ {
+ ["cs_count"]=41421,
+ ["dyn_used"]=722423,
+ ["elapsed_time"]=0.16599988937378,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=127551865,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1258",
+ ["attribute_list"]="422",
+ ["dir"]="5",
+ ["disc"]="106",
+ ["glue"]="867",
+ ["glue_spec"]="374",
+ ["glyph"]="1500",
+ ["hlist"]="288",
+ ["if_stack"]="5",
+ ["kern"]="16",
+ ["local_par"]="47",
+ ["mark"]="24",
+ ["math"]="8",
+ ["pdf_dest"]="6",
+ ["pdf_literal"]="106",
+ ["penalty"]="128",
+ ["rule"]="65",
+ ["temp"]="5",
+ ["vlist"]="87",
+ ["write"]="6",
+ },
+ ["obj_ptr"]=715,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=735338,
+ ["str_ptr"]=2140702,
+ },
+ {
+ ["cs_count"]=41422,
+ ["dyn_used"]=724513,
+ ["elapsed_time"]=0.13900017738342,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=127914724,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="976",
+ ["attribute_list"]="328",
+ ["dir"]="5",
+ ["disc"]="164",
+ ["glue"]="812",
+ ["glue_spec"]="353",
+ ["glyph"]="2038",
+ ["hlist"]="215",
+ ["if_stack"]="4",
+ ["kern"]="17",
+ ["local_par"]="41",
+ ["mark"]="20",
+ ["pdf_dest"]="5",
+ ["pdf_literal"]="102",
+ ["penalty"]="125",
+ ["rule"]="54",
+ ["temp"]="5",
+ ["vlist"]="78",
+ ["write"]="5",
+ },
+ ["obj_ptr"]=722,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=735386,
+ ["str_ptr"]=2140708,
+ },
+ {
+ ["cs_count"]=41423,
+ ["dyn_used"]=727092,
+ ["elapsed_time"]=0.11999988555908,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=128314957,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1057",
+ ["attribute_list"]="355",
+ ["dir"]="5",
+ ["disc"]="147",
+ ["glue"]="897",
+ ["glue_spec"]="348",
+ ["glyph"]="2251",
+ ["hlist"]="229",
+ ["if_stack"]="4",
+ ["kern"]="22",
+ ["local_par"]="37",
+ ["mark"]="16",
+ ["math"]="6",
+ ["pdf_annot"]="1",
+ ["pdf_dest"]="4",
+ ["pdf_literal"]="116",
+ ["penalty"]="129",
+ ["rule"]="59",
+ ["temp"]="5",
+ ["vlist"]="77",
+ ["write"]="5",
+ },
+ ["obj_ptr"]=731,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=735428,
+ ["str_ptr"]=2140713,
+ },
+ {
+ ["cs_count"]=41424,
+ ["dyn_used"]=729870,
+ ["elapsed_time"]=0.18700003623962,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=128670288,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1141",
+ ["attribute_list"]="383",
+ ["dir"]="5",
+ ["disc"]="88",
+ ["glue"]="724",
+ ["glue_spec"]="375",
+ ["glyph"]="1314",
+ ["hlist"]="227",
+ ["if_stack"]="13",
+ ["kern"]="12",
+ ["local_par"]="48",
+ ["mark"]="32",
+ ["pdf_dest"]="8",
+ ["pdf_literal"]="120",
+ ["penalty"]="140",
+ ["rule"]="69",
+ ["temp"]="5",
+ ["vlist"]="81",
+ ["write"]="8",
+ },
+ ["obj_ptr"]=735,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=735458,
+ ["str_ptr"]=2140716,
+ },
+ {
+ ["cs_count"]=41425,
+ ["dyn_used"]=732553,
+ ["elapsed_time"]=0.18900012969971,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=129035522,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1096",
+ ["attribute_list"]="368",
+ ["dir"]="5",
+ ["disc"]="55",
+ ["glue"]="765",
+ ["glue_spec"]="363",
+ ["glyph"]="1426",
+ ["hlist"]="226",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="46",
+ ["mark"]="28",
+ ["pdf_dest"]="7",
+ ["pdf_literal"]="125",
+ ["penalty"]="128",
+ ["rule"]="64",
+ ["temp"]="5",
+ ["vlist"]="80",
+ ["write"]="7",
+ },
+ ["obj_ptr"]=744,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=735518,
+ ["str_ptr"]=2140724,
+ },
+ {
+ ["cs_count"]=41426,
+ ["dyn_used"]=735186,
+ ["elapsed_time"]=0.16999983787537,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=129098362,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1084",
+ ["attribute_list"]="364",
+ ["dir"]="5",
+ ["disc"]="69",
+ ["glue"]="797",
+ ["glue_spec"]="377",
+ ["glyph"]="1537",
+ ["hlist"]="219",
+ ["if_stack"]="13",
+ ["kern"]="8",
+ ["local_par"]="46",
+ ["mark"]="24",
+ ["pdf_dest"]="6",
+ ["pdf_literal"]="148",
+ ["penalty"]="137",
+ ["rule"]="71",
+ ["temp"]="5",
+ ["vlist"]="79",
+ ["write"]="6",
+ },
+ ["obj_ptr"]=753,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=735572,
+ ["str_ptr"]=2140731,
+ },
+ {
+ ["cs_count"]=41427,
+ ["dyn_used"]=737876,
+ ["elapsed_time"]=0.17900013923645,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=127292546,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1138",
+ ["attribute_list"]="382",
+ ["dir"]="5",
+ ["disc"]="88",
+ ["glue"]="838",
+ ["glue_spec"]="399",
+ ["glyph"]="1892",
+ ["hlist"]="217",
+ ["if_stack"]="13",
+ ["kern"]="10",
+ ["local_par"]="42",
+ ["mark"]="24",
+ ["pdf_dest"]="6",
+ ["pdf_literal"]="162",
+ ["penalty"]="142",
+ ["rule"]="82",
+ ["temp"]="5",
+ ["vlist"]="79",
+ ["write"]="6",
+ },
+ ["obj_ptr"]=761,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=735620,
+ ["str_ptr"]=2140737,
+ },
+ {
+ ["cs_count"]=41428,
+ ["dyn_used"]=740658,
+ ["elapsed_time"]=0.18699979782104,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=125638667,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1087",
+ ["attribute_list"]="365",
+ ["dir"]="5",
+ ["disc"]="84",
+ ["glue"]="766",
+ ["glue_spec"]="384",
+ ["glyph"]="1676",
+ ["hlist"]="224",
+ ["if_stack"]="4",
+ ["kern"]="12",
+ ["local_par"]="45",
+ ["mark"]="28",
+ ["pdf_dest"]="7",
+ ["pdf_literal"]="131",
+ ["penalty"]="132",
+ ["rule"]="67",
+ ["temp"]="5",
+ ["vlist"]="80",
+ ["write"]="7",
+ },
+ ["obj_ptr"]=769,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=735668,
+ ["str_ptr"]=2140743,
+ },
+ {
+ ["cs_count"]=41429,
+ ["dyn_used"]=743203,
+ ["elapsed_time"]=0.18100023269653,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=124756057,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1090",
+ ["attribute_list"]="366",
+ ["dir"]="5",
+ ["disc"]="95",
+ ["glue"]="790",
+ ["glue_spec"]="374",
+ ["glyph"]="1709",
+ ["hlist"]="225",
+ ["if_stack"]="4",
+ ["kern"]="10",
+ ["local_par"]="47",
+ ["mark"]="28",
+ ["pdf_dest"]="7",
+ ["pdf_literal"]="129",
+ ["penalty"]="135",
+ ["rule"]="65",
+ ["temp"]="5",
+ ["vlist"]="80",
+ ["write"]="7",
+ },
+ ["obj_ptr"]=778,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=735722,
+ ["str_ptr"]=2140750,
+ },
+ {
+ ["cs_count"]=41435,
+ ["dyn_used"]=745303,
+ ["elapsed_time"]=0.07699990272522,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=125052881,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="841",
+ ["attribute_list"]="283",
+ ["dir"]="5",
+ ["disc"]="100",
+ ["glue"]="705",
+ ["glue_spec"]="299",
+ ["glyph"]="1547",
+ ["hlist"]="208",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="44",
+ ["mark"]="12",
+ ["pdf_dest"]="2",
+ ["pdf_literal"]="132",
+ ["penalty"]="96",
+ ["rule"]="43",
+ ["temp"]="5",
+ ["vlist"]="76",
+ ["write"]="2",
+ },
+ ["obj_ptr"]=786,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=735901,
+ ["str_ptr"]=2140762,
+ },
+ {
+ ["cs_count"]=41436,
+ ["dyn_used"]=748278,
+ ["elapsed_time"]=0.1399998664856,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=125389232,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="991",
+ ["attribute_list"]="333",
+ ["dir"]="5",
+ ["disc"]="84",
+ ["glue"]="738",
+ ["glue_spec"]="318",
+ ["glyph"]="1513",
+ ["hlist"]="225",
+ ["if_stack"]="4",
+ ["kern"]="22",
+ ["local_par"]="46",
+ ["mark"]="16",
+ ["pdf_dest"]="4",
+ ["pdf_literal"]="114",
+ ["penalty"]="103",
+ ["rule"]="43",
+ ["temp"]="5",
+ ["vlist"]="77",
+ ["write"]="6",
+ },
+ ["obj_ptr"]=790,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=735931,
+ ["str_ptr"]=2140765,
+ },
+ {
+ ["cs_count"]=41437,
+ ["dyn_used"]=751447,
+ ["elapsed_time"]=0.23200011253357,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=125731274,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1186",
+ ["attribute_list"]="398",
+ ["dir"]="5",
+ ["disc"]="50",
+ ["glue"]="681",
+ ["glue_spec"]="354",
+ ["glyph"]="1155",
+ ["hlist"]="233",
+ ["if_stack"]="13",
+ ["kern"]="15",
+ ["local_par"]="50",
+ ["mark"]="36",
+ ["pdf_dest"]="9",
+ ["pdf_literal"]="114",
+ ["penalty"]="144",
+ ["rule"]="70",
+ ["temp"]="5",
+ ["vlist"]="82",
+ ["write"]="9",
+ },
+ ["obj_ptr"]=795,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=735969,
+ ["str_ptr"]=2140769,
+ },
+ {
+ ["cs_count"]=41438,
+ ["dyn_used"]=754461,
+ ["elapsed_time"]=0.15499997138977,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=126057768,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1084",
+ ["attribute_list"]="364",
+ ["dir"]="5",
+ ["disc"]="68",
+ ["glue"]="713",
+ ["glue_spec"]="349",
+ ["glyph"]="1422",
+ ["hlist"]="227",
+ ["if_stack"]="10",
+ ["kern"]="19",
+ ["local_par"]="47",
+ ["mark"]="28",
+ ["pdf_dest"]="8",
+ ["pdf_literal"]="120",
+ ["penalty"]="127",
+ ["rule"]="61",
+ ["temp"]="5",
+ ["vlist"]="80",
+ ["write"]="9",
+ },
+ ["obj_ptr"]=805,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=736036,
+ ["str_ptr"]=2140777,
+ },
+ {
+ ["cs_count"]=41451,
+ ["dyn_used"]=756863,
+ ["elapsed_time"]=0.10800004005432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=126365411,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="925",
+ ["attribute_list"]="311",
+ ["dir"]="5",
+ ["disc"]="78",
+ ["glue"]="743",
+ ["glue_spec"]="305",
+ ["glyph"]="1432",
+ ["hlist"]="231",
+ ["if_stack"]="4",
+ ["kern"]="24",
+ ["local_par"]="50",
+ ["mark"]="12",
+ ["pdf_dest"]="3",
+ ["pdf_literal"]="123",
+ ["penalty"]="103",
+ ["rule"]="44",
+ ["temp"]="6",
+ ["vlist"]="76",
+ ["write"]="5",
+ },
+ ["obj_ptr"]=815,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=736446,
+ ["str_ptr"]=2140798,
+ },
+ {
+ ["cs_count"]=41454,
+ ["dyn_used"]=759072,
+ ["elapsed_time"]=0.12999987602234,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=126803016,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1435",
+ ["attribute_list"]="481",
+ ["dir"]="5",
+ ["disc"]="84",
+ ["glue"]="1005",
+ ["glue_spec"]="377",
+ ["glyph"]="1502",
+ ["hlist"]="387",
+ ["if_stack"]="4",
+ ["kern"]="20",
+ ["local_par"]="63",
+ ["mark"]="12",
+ ["pdf_dest"]="3",
+ ["pdf_literal"]="124",
+ ["penalty"]="135",
+ ["rule"]="80",
+ ["temp"]="5",
+ ["vlist"]="98",
+ ["write"]="4",
+ },
+ ["obj_ptr"]=822,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=736536,
+ ["str_ptr"]=2140804,
+ },
+ {
+ ["cs_count"]=41457,
+ ["dyn_used"]=761761,
+ ["elapsed_time"]=0.13100004196167,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=127506568,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1450",
+ ["attribute_list"]="486",
+ ["dir"]="5",
+ ["disc"]="174",
+ ["glue"]="1132",
+ ["glue_spec"]="406",
+ ["glyph"]="2272",
+ ["hlist"]="379",
+ ["if_stack"]="4",
+ ["kern"]="22",
+ ["local_par"]="59",
+ ["mark"]="12",
+ ["math"]="6",
+ ["pdf_annot"]="1",
+ ["pdf_dest"]="3",
+ ["pdf_literal"]="108",
+ ["penalty"]="140",
+ ["rule"]="77",
+ ["temp"]="5",
+ ["vlist"]="96",
+ ["write"]="4",
+ },
+ ["obj_ptr"]=828,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=736652,
+ ["str_ptr"]=2140811,
+ },
+ {
+ ["cs_count"]=41458,
+ ["dyn_used"]=764073,
+ ["elapsed_time"]=0.1100001335144,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=127936424,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1651",
+ ["attribute_list"]="553",
+ ["dir"]="5",
+ ["disc"]="89",
+ ["glue"]="1082",
+ ["glue_spec"]="433",
+ ["glyph"]="1426",
+ ["hlist"]="447",
+ ["if_stack"]="4",
+ ["kern"]="22",
+ ["local_par"]="67",
+ ["mark"]="12",
+ ["pdf_dest"]="3",
+ ["pdf_literal"]="106",
+ ["penalty"]="123",
+ ["rule"]="83",
+ ["temp"]="5",
+ ["vlist"]="108",
+ ["write"]="3",
+ },
+ ["obj_ptr"]=833,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=736684,
+ ["str_ptr"]=2140814,
+ },
+ {
+ ["cs_count"]=41459,
+ ["dyn_used"]=766638,
+ ["elapsed_time"]=0.13899993896484,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=128283940,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="952",
+ ["attribute_list"]="320",
+ ["dir"]="5",
+ ["disc"]="115",
+ ["glue"]="770",
+ ["glue_spec"]="356",
+ ["glyph"]="1725",
+ ["hlist"]="220",
+ ["if_stack"]="4",
+ ["kern"]="18",
+ ["local_par"]="46",
+ ["mark"]="16",
+ ["pdf_dest"]="4",
+ ["pdf_literal"]="134",
+ ["penalty"]="111",
+ ["rule"]="53",
+ ["temp"]="5",
+ ["vlist"]="77",
+ ["write"]="4",
+ },
+ ["obj_ptr"]=840,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=736723,
+ ["str_ptr"]=2140818,
+ },
+ {
+ ["cs_count"]=41460,
+ ["dyn_used"]=769595,
+ ["elapsed_time"]=0.20700001716614,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=128627641,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1126",
+ ["attribute_list"]="378",
+ ["dir"]="5",
+ ["disc"]="94",
+ ["glue"]="720",
+ ["glue_spec"]="331",
+ ["glyph"]="1336",
+ ["hlist"]="228",
+ ["if_stack"]="4",
+ ["kern"]="17",
+ ["local_par"]="46",
+ ["mark"]="28",
+ ["pdf_dest"]="7",
+ ["pdf_literal"]="112",
+ ["penalty"]="128",
+ ["rule"]="60",
+ ["temp"]="5",
+ ["vlist"]="80",
+ ["write"]="7",
+ },
+ ["obj_ptr"]=847,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=736769,
+ ["str_ptr"]=2140823,
+ },
+ {
+ ["cs_count"]=41461,
+ ["dyn_used"]=772051,
+ ["elapsed_time"]=0.13199996948242,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=128965073,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1090",
+ ["attribute_list"]="366",
+ ["dir"]="5",
+ ["disc"]="112",
+ ["glue"]="782",
+ ["glue_spec"]="331",
+ ["glyph"]="1502",
+ ["hlist"]="244",
+ ["if_stack"]="4",
+ ["kern"]="22",
+ ["local_par"]="47",
+ ["mark"]="20",
+ ["math"]="4",
+ ["pdf_annot"]="1",
+ ["pdf_dest"]="5",
+ ["pdf_literal"]="104",
+ ["penalty"]="122",
+ ["rule"]="52",
+ ["temp"]="5",
+ ["vlist"]="78",
+ ["write"]="7",
+ },
+ ["obj_ptr"]=856,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=736829,
+ ["str_ptr"]=2140830,
+ },
+ {
+ ["cs_count"]=41462,
+ ["dyn_used"]=774545,
+ ["elapsed_time"]=0.10999989509583,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=129292085,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="919",
+ ["attribute_list"]="309",
+ ["dir"]="5",
+ ["disc"]="130",
+ ["glue"]="720",
+ ["glue_spec"]="317",
+ ["glyph"]="1727",
+ ["hlist"]="219",
+ ["if_stack"]="4",
+ ["kern"]="22",
+ ["local_par"]="43",
+ ["mark"]="16",
+ ["pdf_annot"]="1",
+ ["pdf_dest"]="4",
+ ["pdf_literal"]="116",
+ ["penalty"]="94",
+ ["rule"]="38",
+ ["temp"]="5",
+ ["vlist"]="77",
+ ["write"]="4",
+ },
+ ["obj_ptr"]=864,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=736875,
+ ["str_ptr"]=2140835,
+ },
+ {
+ ["cs_count"]=41463,
+ ["dyn_used"]=777195,
+ ["elapsed_time"]=0.067000150680542,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=129592733,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="943",
+ ["attribute_list"]="317",
+ ["dir"]="5",
+ ["disc"]="72",
+ ["glue"]="764",
+ ["glue_spec"]="351",
+ ["glyph"]="1494",
+ ["hlist"]="300",
+ ["if_stack"]="4",
+ ["kern"]="15",
+ ["local_par"]="88",
+ ["mark"]="8",
+ ["pdf_annot"]="1",
+ ["pdf_dest"]="2",
+ ["pdf_literal"]="110",
+ ["penalty"]="177",
+ ["rule"]="85",
+ ["temp"]="6",
+ ["vlist"]="78",
+ ["write"]="2",
+ },
+ ["obj_ptr"]=869,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=736914,
+ ["str_ptr"]=2140839,
+ },
+ {
+ ["cs_count"]=41464,
+ ["dyn_used"]=779238,
+ ["elapsed_time"]=0.080999851226807,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=129865143,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="910",
+ ["attribute_list"]="306",
+ ["dir"]="5",
+ ["disc"]="61",
+ ["glue"]="737",
+ ["glue_spec"]="330",
+ ["glyph"]="1272",
+ ["hlist"]="283",
+ ["if_stack"]="4",
+ ["kern"]="12",
+ ["local_par"]="82",
+ ["mark"]="8",
+ ["pdf_dest"]="2",
+ ["pdf_literal"]="206",
+ ["penalty"]="170",
+ ["rule"]="81",
+ ["temp"]="5",
+ ["vlist"]="78",
+ ["write"]="3",
+ },
+ ["obj_ptr"]=873,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=736946,
+ ["str_ptr"]=2140842,
+ },
+ {
+ ["cs_count"]=41465,
+ ["dyn_used"]=784791,
+ ["elapsed_time"]=0.21500015258789,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=130654749,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="5530",
+ ["attribute_list"]="1846",
+ ["dir"]="5",
+ ["disc"]="204",
+ ["glue"]="3710",
+ ["glue_spec"]="1013",
+ ["glyph"]="3641",
+ ["hlist"]="1694",
+ ["if_stack"]="4",
+ ["kern"]="15",
+ ["local_par"]="149",
+ ["mark"]="20",
+ ["pdf_dest"]="5",
+ ["pdf_literal"]="132",
+ ["penalty"]="324",
+ ["rule"]="316",
+ ["temp"]="5",
+ ["vlist"]="185",
+ ["write"]="5",
+ },
+ ["obj_ptr"]=877,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=736978,
+ ["str_ptr"]=2140845,
+ },
+ {
+ ["cs_count"]=41466,
+ ["dyn_used"]=786778,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=130966845,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="5038",
+ ["attribute_list"]="1682",
+ ["dir"]="5",
+ ["disc"]="151",
+ ["glue"]="3331",
+ ["glue_spec"]="859",
+ ["glyph"]="2526",
+ ["hlist"]="1623",
+ ["if_stack"]="4",
+ ["kern"]="12",
+ ["local_par"]="123",
+ ["pdf_literal"]="76",
+ ["penalty"]="232",
+ ["rule"]="274",
+ ["temp"]="5",
+ ["vlist"]="180",
+ },
+ ["obj_ptr"]=884,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=737031,
+ ["str_ptr"]=2140851,
+ },
+ {
+ ["cs_count"]=41467,
+ ["dyn_used"]=789132,
+ ["elapsed_time"]=0.096000194549561,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=131767685,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="5527",
+ ["attribute_list"]="1845",
+ ["dir"]="5",
+ ["disc"]="161",
+ ["glue"]="3678",
+ ["glue_spec"]="1017",
+ ["glyph"]="3131",
+ ["hlist"]="1634",
+ ["if_stack"]="4",
+ ["kern"]="11",
+ ["local_par"]="105",
+ ["mark"]="4",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="84",
+ ["penalty"]="212",
+ ["rule"]="212",
+ ["temp"]="5",
+ ["vlist"]="161",
+ ["write"]="1",
+ },
+ ["obj_ptr"]=887,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=737049,
+ ["str_ptr"]=2140852,
+ },
+ {
+ ["cs_count"]=41468,
+ ["dyn_used"]=789099,
+ ["elapsed_time"]=0.13599991798401,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=132137129,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1645",
+ ["attribute_list"]="551",
+ ["dir"]="5",
+ ["disc"]="116",
+ ["glue"]="1119",
+ ["glue_spec"]="438",
+ ["glyph"]="1737",
+ ["hlist"]="414",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="55",
+ ["mark"]="16",
+ ["math"]="4",
+ ["pdf_annot"]="2",
+ ["pdf_dest"]="4",
+ ["pdf_literal"]="103",
+ ["penalty"]="131",
+ ["rule"]="69",
+ ["temp"]="5",
+ ["vlist"]="95",
+ ["write"]="5",
+ },
+ ["obj_ptr"]=893,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=737074,
+ ["str_ptr"]=2140854,
+ },
+ {
+ ["cs_count"]=41469,
+ ["dyn_used"]=791857,
+ ["elapsed_time"]=0.15899991989136,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=132469183,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="982",
+ ["attribute_list"]="330",
+ ["dir"]="5",
+ ["disc"]="90",
+ ["glue"]="745",
+ ["glue_spec"]="337",
+ ["glyph"]="1517",
+ ["hlist"]="229",
+ ["if_stack"]="13",
+ ["kern"]="17",
+ ["local_par"]="46",
+ ["mark"]="20",
+ ["pdf_annot"]="2",
+ ["pdf_dest"]="5",
+ ["pdf_literal"]="118",
+ ["penalty"]="105",
+ ["rule"]="44",
+ ["temp"]="5",
+ ["vlist"]="78",
+ ["write"]="5",
+ },
+ ["obj_ptr"]=900,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=737120,
+ ["str_ptr"]=2140859,
+ },
+ {
+ ["cs_count"]=41470,
+ ["dyn_used"]=794610,
+ ["elapsed_time"]=0.11700010299683,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=132866271,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1276",
+ ["attribute_list"]="428",
+ ["dir"]="5",
+ ["disc"]="106",
+ ["glue"]="946",
+ ["glue_spec"]="395",
+ ["glyph"]="1487",
+ ["hlist"]="339",
+ ["if_stack"]="5",
+ ["kern"]="11",
+ ["local_par"]="56",
+ ["mark"]="16",
+ ["pdf_dest"]="4",
+ ["pdf_literal"]="116",
+ ["penalty"]="119",
+ ["rule"]="66",
+ ["temp"]="5",
+ ["vlist"]="91",
+ ["write"]="4",
+ },
+ ["obj_ptr"]=906,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=737166,
+ ["str_ptr"]=2140864,
+ },
+ {
+ ["cs_count"]=41473,
+ ["dyn_used"]=796628,
+ ["elapsed_time"]=0.099999904632568,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=133240617,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1102",
+ ["attribute_list"]="370",
+ ["dir"]="5",
+ ["disc"]="168",
+ ["glue"]="896",
+ ["glue_spec"]="387",
+ ["glyph"]="2273",
+ ["hlist"]="234",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="42",
+ ["mark"]="8",
+ ["math"]="8",
+ ["pdf_dest"]="2",
+ ["pdf_literal"]="108",
+ ["penalty"]="183",
+ ["rule"]="53",
+ ["temp"]="5",
+ ["vlist"]="75",
+ ["write"]="3",
+ },
+ ["obj_ptr"]=912,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=737289,
+ ["str_ptr"]=2140872,
+ },
+ {
+ ["cs_count"]=41474,
+ ["dyn_used"]=801309,
+ ["elapsed_time"]=0.11500000953674,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=134111739,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="7012",
+ ["attribute_list"]="2340",
+ ["dir"]="5",
+ ["disc"]="221",
+ ["glue"]="4438",
+ ["glue_spec"]="1212",
+ ["glyph"]="2956",
+ ["hlist"]="2054",
+ ["if_stack"]="4",
+ ["kern"]="9",
+ ["local_par"]="98",
+ ["mark"]="4",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="114",
+ ["penalty"]="268",
+ ["rule"]="322",
+ ["temp"]="5",
+ ["vlist"]="191",
+ ["write"]="1",
+ },
+ ["obj_ptr"]=916,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=737321,
+ ["str_ptr"]=2140875,
+ },
+ {
+ ["cs_count"]=41475,
+ ["dyn_used"]=802606,
+ ["elapsed_time"]=0.071000099182129,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=134603195,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="4363",
+ ["attribute_list"]="1457",
+ ["dir"]="5",
+ ["disc"]="115",
+ ["glue"]="2712",
+ ["glue_spec"]="787",
+ ["glyph"]="1536",
+ ["hlist"]="1284",
+ ["if_stack"]="4",
+ ["kern"]="8",
+ ["local_par"]="86",
+ ["mark"]="4",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="80",
+ ["penalty"]="162",
+ ["rule"]="195",
+ ["temp"]="5",
+ ["vlist"]="171",
+ ["write"]="1",
+ },
+ ["obj_ptr"]=919,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=737346,
+ ["str_ptr"]=2140877,
+ },
+ {
+ ["cs_count"]=41476,
+ ["dyn_used"]=803251,
+ ["elapsed_time"]=0.092000007629395,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=135197304,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="2635",
+ ["attribute_list"]="881",
+ ["dir"]="5",
+ ["disc"]="146",
+ ["glue"]="1662",
+ ["glue_spec"]="581",
+ ["glyph"]="1685",
+ ["hlist"]="695",
+ ["if_stack"]="6",
+ ["kern"]="8",
+ ["local_par"]="69",
+ ["pdf_literal"]="154",
+ ["penalty"]="144",
+ ["rule"]="129",
+ ["temp"]="5",
+ ["vlist"]="133",
+ },
+ ["obj_ptr"]=924,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=737371,
+ ["str_ptr"]=2140879,
+ },
+ {
+ ["cs_count"]=41477,
+ ["dyn_used"]=806546,
+ ["elapsed_time"]=0.07699990272522,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=135672439,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="2305",
+ ["attribute_list"]="771",
+ ["dir"]="5",
+ ["disc"]="111",
+ ["glue"]="1604",
+ ["glue_spec"]="580",
+ ["glyph"]="1460",
+ ["hlist"]="669",
+ ["if_stack"]="4",
+ ["kern"]="10",
+ ["local_par"]="72",
+ ["mark"]="4",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="112",
+ ["penalty"]="130",
+ ["rule"]="101",
+ ["temp"]="5",
+ ["vlist"]="117",
+ ["write"]="1",
+ },
+ ["obj_ptr"]=927,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=737389,
+ ["str_ptr"]=2140880,
+ },
+ {
+ ["cs_count"]=41478,
+ ["dyn_used"]=808832,
+ ["elapsed_time"]=0.10500001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=136277266,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="3247",
+ ["attribute_list"]="1085",
+ ["dir"]="5",
+ ["disc"]="78",
+ ["glue"]="1929",
+ ["glue_spec"]="624",
+ ["glyph"]="1122",
+ ["hlist"]="908",
+ ["if_stack"]="4",
+ ["kern"]="8",
+ ["local_par"]="77",
+ ["mark"]="8",
+ ["pdf_dest"]="2",
+ ["pdf_literal"]="82",
+ ["penalty"]="138",
+ ["rule"]="142",
+ ["temp"]="5",
+ ["vlist"]="152",
+ ["write"]="2",
+ },
+ ["obj_ptr"]=931,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=737414,
+ ["str_ptr"]=2140882,
+ },
+ {
+ ["cs_count"]=41479,
+ ["dyn_used"]=812144,
+ ["elapsed_time"]=0.084000110626221,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=136948193,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="5944",
+ ["attribute_list"]="1984",
+ ["dir"]="5",
+ ["disc"]="148",
+ ["glue"]="3581",
+ ["glue_spec"]="978",
+ ["glyph"]="1901",
+ ["hlist"]="1712",
+ ["if_stack"]="4",
+ ["kern"]="8",
+ ["local_par"]="74",
+ ["mark"]="8",
+ ["pdf_dest"]="2",
+ ["pdf_literal"]="82",
+ ["penalty"]="183",
+ ["rule"]="262",
+ ["temp"]="5",
+ ["vlist"]="178",
+ ["write"]="2",
+ },
+ ["obj_ptr"]=935,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=737439,
+ ["str_ptr"]=2140884,
+ },
+ {
+ ["cs_count"]=41480,
+ ["dyn_used"]=813541,
+ ["elapsed_time"]=0.087999820709229,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=137522521,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="4252",
+ ["attribute_list"]="1420",
+ ["dir"]="5",
+ ["disc"]="129",
+ ["glue"]="2513",
+ ["glue_spec"]="749",
+ ["glyph"]="1358",
+ ["hlist"]="1225",
+ ["if_stack"]="4",
+ ["kern"]="8",
+ ["local_par"]="85",
+ ["mark"]="4",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="94",
+ ["penalty"]="172",
+ ["rule"]="214",
+ ["temp"]="5",
+ ["vlist"]="175",
+ ["write"]="1",
+ },
+ ["obj_ptr"]=940,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=737471,
+ ["str_ptr"]=2140887,
+ },
+ {
+ ["cs_count"]=41481,
+ ["dyn_used"]=814933,
+ ["elapsed_time"]=0.090000152587891,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=137935019,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="2452",
+ ["attribute_list"]="820",
+ ["dir"]="5",
+ ["disc"]="68",
+ ["glue"]="1387",
+ ["glue_spec"]="483",
+ ["glyph"]="869",
+ ["hlist"]="662",
+ ["if_stack"]="6",
+ ["kern"]="8",
+ ["local_par"]="62",
+ ["mark"]="8",
+ ["pdf_dest"]="2",
+ ["pdf_literal"]="80",
+ ["penalty"]="106",
+ ["rule"]="111",
+ ["temp"]="5",
+ ["vlist"]="139",
+ ["write"]="2",
+ },
+ ["obj_ptr"]=944,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=737496,
+ ["str_ptr"]=2140889,
+ },
+ {
+ ["cs_count"]=41482,
+ ["dyn_used"]=817354,
+ ["elapsed_time"]=0.12299990653992,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=138462464,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="2485",
+ ["attribute_list"]="831",
+ ["dir"]="5",
+ ["disc"]="68",
+ ["glue"]="1424",
+ ["glue_spec"]="520",
+ ["glyph"]="961",
+ ["hlist"]="653",
+ ["if_stack"]="13",
+ ["kern"]="8",
+ ["local_par"]="68",
+ ["mark"]="12",
+ ["pdf_dest"]="3",
+ ["pdf_literal"]="82",
+ ["penalty"]="118",
+ ["rule"]="101",
+ ["temp"]="5",
+ ["vlist"]="130",
+ ["write"]="3",
+ },
+ ["obj_ptr"]=951,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=737528,
+ ["str_ptr"]=2140892,
+ },
+ {
+ ["cs_count"]=41483,
+ ["dyn_used"]=820704,
+ ["elapsed_time"]=0.12899994850159,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=139021554,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="2863",
+ ["attribute_list"]="957",
+ ["dir"]="5",
+ ["disc"]="98",
+ ["glue"]="1643",
+ ["glue_spec"]="595",
+ ["glyph"]="1168",
+ ["hlist"]="729",
+ ["if_stack"]="4",
+ ["kern"]="12",
+ ["local_par"]="74",
+ ["mark"]="16",
+ ["pdf_dest"]="4",
+ ["pdf_literal"]="94",
+ ["penalty"]="159",
+ ["rule"]="130",
+ ["temp"]="5",
+ ["vlist"]="132",
+ ["write"]="4",
+ },
+ ["obj_ptr"]=956,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=737560,
+ ["str_ptr"]=2140895,
+ },
+ {
+ ["cs_count"]=41484,
+ ["dyn_used"]=822121,
+ ["elapsed_time"]=0.069000005722046,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=139399738,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1792",
+ ["attribute_list"]="600",
+ ["dir"]="5",
+ ["disc"]="104",
+ ["glue"]="1113",
+ ["glue_spec"]="420",
+ ["glyph"]="1323",
+ ["hlist"]="462",
+ ["if_stack"]="4",
+ ["kern"]="18",
+ ["local_par"]="60",
+ ["mark"]="4",
+ ["pdf_annot"]="1",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="97",
+ ["penalty"]="96",
+ ["rule"]="65",
+ ["temp"]="5",
+ ["vlist"]="104",
+ ["write"]="1",
+ },
+ ["obj_ptr"]=964,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=737606,
+ ["str_ptr"]=2140900,
+ },
+ {
+ ["cs_count"]=41485,
+ ["dyn_used"]=824644,
+ ["elapsed_time"]=0.037000179290771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=139672206,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="925",
+ ["attribute_list"]="311",
+ ["dir"]="5",
+ ["disc"]="80",
+ ["glue"]="611",
+ ["glue_spec"]="287",
+ ["glyph"]="1442",
+ ["hlist"]="196",
+ ["if_stack"]="11",
+ ["kern"]="22",
+ ["local_par"]="35",
+ ["pdf_annot"]="3",
+ ["pdf_literal"]="126",
+ ["penalty"]="69",
+ ["rule"]="28",
+ ["temp"]="5",
+ ["vlist"]="73",
+ },
+ ["obj_ptr"]=969,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=737631,
+ ["str_ptr"]=2140902,
+ },
+ {
+ ["cs_count"]=41486,
+ ["dyn_used"]=826597,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=139754820,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="661",
+ ["attribute_list"]="223",
+ ["dir"]="5",
+ ["disc"]="1",
+ ["glue"]="271",
+ ["glue_spec"]="158",
+ ["glyph"]="3",
+ ["hlist"]="136",
+ ["if_stack"]="13",
+ ["kern"]="6",
+ ["local_par"]="17",
+ ["pdf_literal"]="76",
+ ["penalty"]="16",
+ ["rule"]="7",
+ ["temp"]="5",
+ ["vlist"]="73",
+ },
+ ["obj_ptr"]=972,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=737649,
+ ["str_ptr"]=2140903,
+ },
+ {
+ ["cs_count"]=41493,
+ ["dyn_used"]=829570,
+ ["elapsed_time"]=0.092999935150146,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=140199192,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1315",
+ ["attribute_list"]="441",
+ ["dir"]="5",
+ ["disc"]="221",
+ ["glue"]="958",
+ ["glue_spec"]="353",
+ ["glyph"]="2865",
+ ["hlist"]="231",
+ ["if_stack"]="4",
+ ["kern"]="40",
+ ["local_par"]="36",
+ ["mark"]="8",
+ ["math"]="10",
+ ["pdf_annot"]="1",
+ ["pdf_dest"]="4",
+ ["pdf_literal"]="100",
+ ["penalty"]="133",
+ ["rule"]="65",
+ ["temp"]="6",
+ ["vlist"]="75",
+ ["write"]="5",
+ },
+ ["obj_ptr"]=976,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=737789,
+ ["str_ptr"]=2140910,
+ },
+ {
+ ["cs_count"]=41494,
+ ["dyn_used"]=831564,
+ ["elapsed_time"]=0.081000089645386,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=140649277,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1447",
+ ["attribute_list"]="485",
+ ["dir"]="5",
+ ["disc"]="233",
+ ["glue"]="1063",
+ ["glue_spec"]="376",
+ ["glyph"]="3250",
+ ["hlist"]="237",
+ ["if_stack"]="4",
+ ["kern"]="47",
+ ["local_par"]="37",
+ ["mark"]="4",
+ ["math"]="14",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="86",
+ ["penalty"]="138",
+ ["rule"]="67",
+ ["temp"]="5",
+ ["vlist"]="74",
+ ["write"]="4",
+ },
+ ["obj_ptr"]=983,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=737844,
+ ["str_ptr"]=2140915,
+ },
+ {
+ ["cs_count"]=41495,
+ ["dyn_used"]=834096,
+ ["elapsed_time"]=0.078999996185303,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=141063252,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1111",
+ ["attribute_list"]="373",
+ ["dir"]="5",
+ ["disc"]="236",
+ ["glue"]="963",
+ ["glue_spec"]="295",
+ ["glyph"]="3193",
+ ["hlist"]="215",
+ ["if_stack"]="4",
+ ["kern"]="23",
+ ["local_par"]="31",
+ ["mark"]="4",
+ ["pdf_dest"]="2",
+ ["pdf_literal"]="94",
+ ["penalty"]="89",
+ ["rule"]="32",
+ ["temp"]="5",
+ ["vlist"]="74",
+ ["write"]="3",
+ },
+ ["obj_ptr"]=986,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=737869,
+ ["str_ptr"]=2140917,
+ },
+ {
+ ["cs_count"]=41496,
+ ["dyn_used"]=836282,
+ ["elapsed_time"]=0.083999872207642,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=141514873,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1360",
+ ["attribute_list"]="456",
+ ["dir"]="5",
+ ["disc"]="228",
+ ["glue"]="1089",
+ ["glue_spec"]="321",
+ ["glyph"]="3312",
+ ["hlist"]="269",
+ ["if_stack"]="4",
+ ["kern"]="38",
+ ["local_par"]="31",
+ ["mark"]="4",
+ ["math"]="14",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="96",
+ ["penalty"]="95",
+ ["rule"]="40",
+ ["temp"]="5",
+ ["vlist"]="74",
+ ["write"]="2",
+ },
+ ["obj_ptr"]=990,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=737912,
+ ["str_ptr"]=2140920,
+ },
+ {
+ ["cs_count"]=41497,
+ ["dyn_used"]=838669,
+ ["elapsed_time"]=0.075000047683716,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=141941936,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1174",
+ ["attribute_list"]="394",
+ ["dir"]="5",
+ ["disc"]="216",
+ ["glue"]="1030",
+ ["glue_spec"]="340",
+ ["glyph"]="3249",
+ ["hlist"]="202",
+ ["if_stack"]="4",
+ ["kern"]="32",
+ ["local_par"]="30",
+ ["mark"]="4",
+ ["math"]="2",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="88",
+ ["penalty"]="112",
+ ["rule"]="53",
+ ["temp"]="5",
+ ["vlist"]="74",
+ ["write"]="2",
+ },
+ ["obj_ptr"]=993,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=737937,
+ ["str_ptr"]=2140922,
+ },
+ {
+ ["cs_count"]=41498,
+ ["dyn_used"]=841011,
+ ["elapsed_time"]=0.075000047683716,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=142282246,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1111",
+ ["attribute_list"]="373",
+ ["dir"]="5",
+ ["disc"]="123",
+ ["glue"]="786",
+ ["glue_spec"]="310",
+ ["glyph"]="1697",
+ ["hlist"]="234",
+ ["if_stack"]="11",
+ ["kern"]="23",
+ ["local_par"]="32",
+ ["mark"]="4",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="118",
+ ["penalty"]="75",
+ ["rule"]="41",
+ ["temp"]="5",
+ ["vlist"]="74",
+ ["write"]="1",
+ },
+ ["obj_ptr"]=996,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=737962,
+ ["str_ptr"]=2140924,
+ },
+ {
+ ["cs_count"]=41501,
+ ["dyn_used"]=844151,
+ ["elapsed_time"]=0.10199999809265,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=143154779,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="4210",
+ ["attribute_list"]="1406",
+ ["dir"]="5",
+ ["disc"]="132",
+ ["glue"]="2754",
+ ["glue_spec"]="765",
+ ["glyph"]="2078",
+ ["hlist"]="1102",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="68",
+ ["mark"]="4",
+ ["pdf_dest"]="2",
+ ["pdf_literal"]="94",
+ ["penalty"]="149",
+ ["rule"]="133",
+ ["temp"]="5",
+ ["vlist"]="119",
+ ["write"]="2",
+ },
+ ["obj_ptr"]=999,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=738013,
+ ["str_ptr"]=2140928,
+ },
+ {
+ ["cs_count"]=41502,
+ ["dyn_used"]=845787,
+ ["elapsed_time"]=0.049000024795532,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=143507194,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1678",
+ ["attribute_list"]="562",
+ ["dir"]="5",
+ ["disc"]="86",
+ ["glue"]="1160",
+ ["glue_spec"]="406",
+ ["glyph"]="1320",
+ ["hlist"]="402",
+ ["if_stack"]="5",
+ ["kern"]="14",
+ ["local_par"]="35",
+ ["pdf_literal"]="112",
+ ["penalty"]="95",
+ ["rule"]="69",
+ ["temp"]="5",
+ ["vlist"]="73",
+ },
+ ["obj_ptr"]=1004,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=738043,
+ ["str_ptr"]=2140931,
+ },
+ {
+ ["cs_count"]=41503,
+ ["dyn_used"]=847517,
+ ["elapsed_time"]=0.058000087738037,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=144086951,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="2260",
+ ["attribute_list"]="756",
+ ["dir"]="5",
+ ["disc"]="115",
+ ["glue"]="1600",
+ ["glue_spec"]="572",
+ ["glyph"]="1700",
+ ["hlist"]="580",
+ ["if_stack"]="4",
+ ["kern"]="13",
+ ["local_par"]="66",
+ ["pdf_literal"]="130",
+ ["penalty"]="116",
+ ["rule"]="81",
+ ["temp"]="5",
+ ["vlist"]="101",
+ },
+ ["obj_ptr"]=1007,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=738061,
+ ["str_ptr"]=2140932,
+ },
+ {
+ ["cs_count"]=41504,
+ ["dyn_used"]=849892,
+ ["elapsed_time"]=0.09499979019165,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=144656260,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="2233",
+ ["attribute_list"]="747",
+ ["dir"]="5",
+ ["disc"]="165",
+ ["glue"]="1470",
+ ["glue_spec"]="483",
+ ["glyph"]="2040",
+ ["hlist"]="488",
+ ["if_stack"]="4",
+ ["kern"]="22",
+ ["local_par"]="43",
+ ["mark"]="4",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="118",
+ ["penalty"]="147",
+ ["rule"]="106",
+ ["temp"]="5",
+ ["vlist"]="90",
+ ["write"]="1",
+ },
+ ["obj_ptr"]=1010,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=738079,
+ ["str_ptr"]=2140933,
+ },
+ {
+ ["cs_count"]=41505,
+ ["dyn_used"]=852206,
+ ["elapsed_time"]=0.05400013923645,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=145074509,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1726",
+ ["attribute_list"]="578",
+ ["dir"]="5",
+ ["disc"]="129",
+ ["glue"]="1118",
+ ["glue_spec"]="375",
+ ["glyph"]="1914",
+ ["hlist"]="387",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="59",
+ ["mark"]="4",
+ ["math"]="6",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="106",
+ ["penalty"]="124",
+ ["rule"]="70",
+ ["temp"]="6",
+ ["vlist"]="98",
+ ["write"]="2",
+ },
+ ["obj_ptr"]=1013,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=738097,
+ ["str_ptr"]=2140934,
+ },
+ {
+ ["cs_count"]=41506,
+ ["dyn_used"]=854578,
+ ["elapsed_time"]=0.07699990272522,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=145470013,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1318",
+ ["attribute_list"]="442",
+ ["dir"]="5",
+ ["disc"]="182",
+ ["glue"]="1046",
+ ["glue_spec"]="354",
+ ["glyph"]="2664",
+ ["hlist"]="244",
+ ["if_stack"]="4",
+ ["kern"]="20",
+ ["local_par"]="40",
+ ["mark"]="4",
+ ["math"]="6",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="131",
+ ["penalty"]="121",
+ ["rule"]="55",
+ ["temp"]="5",
+ ["vlist"]="78",
+ ["write"]="2",
+ },
+ ["obj_ptr"]=1016,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=738122,
+ ["str_ptr"]=2140936,
+ },
+ {
+ ["cs_count"]=41507,
+ ["dyn_used"]=856721,
+ ["elapsed_time"]=0.055999994277954,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=145966433,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1882",
+ ["attribute_list"]="630",
+ ["dir"]="5",
+ ["disc"]="138",
+ ["glue"]="1465",
+ ["glue_spec"]="586",
+ ["glyph"]="2031",
+ ["hlist"]="471",
+ ["if_stack"]="4",
+ ["kern"]="13",
+ ["local_par"]="62",
+ ["math"]="2",
+ ["pdf_literal"]="116",
+ ["penalty"]="118",
+ ["rule"]="76",
+ ["temp"]="5",
+ ["vlist"]="99",
+ },
+ ["obj_ptr"]=1019,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=738147,
+ ["str_ptr"]=2140938,
+ },
+ {
+ ["cs_count"]=41508,
+ ["dyn_used"]=859660,
+ ["elapsed_time"]=0.085000038146973,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=146299257,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1081",
+ ["attribute_list"]="363",
+ ["dir"]="5",
+ ["disc"]="97",
+ ["glue"]="924",
+ ["glue_spec"]="523",
+ ["glyph"]="1631",
+ ["hlist"]="216",
+ ["if_stack"]="6",
+ ["kern"]="17",
+ ["local_par"]="49",
+ ["mark"]="8",
+ ["pdf_dest"]="2",
+ ["pdf_literal"]="138",
+ ["penalty"]="115",
+ ["rule"]="57",
+ ["temp"]="5",
+ ["vlist"]="75",
+ ["write"]="2",
+ },
+ ["obj_ptr"]=1023,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=738165,
+ ["str_ptr"]=2140939,
+ },
+ {
+ ["cs_count"]=41509,
+ ["dyn_used"]=861435,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=146401861,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="763",
+ ["attribute_list"]="257",
+ ["dir"]="5",
+ ["disc"]="4",
+ ["glue"]="331",
+ ["glue_spec"]="200",
+ ["glyph"]="146",
+ ["hlist"]="147",
+ ["if_stack"]="11",
+ ["kern"]="6",
+ ["local_par"]="23",
+ ["pdf_literal"]="91",
+ ["penalty"]="28",
+ ["rule"]="14",
+ ["temp"]="5",
+ ["vlist"]="73",
+ },
+ ["obj_ptr"]=1027,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=738197,
+ ["str_ptr"]=2140942,
+ },
+ {
+ ["cs_count"]=41510,
+ ["dyn_used"]=863544,
+ ["elapsed_time"]=0.015999794006348,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=146484283,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="739",
+ ["attribute_list"]="249",
+ ["dir"]="5",
+ ["disc"]="1",
+ ["glue"]="271",
+ ["glue_spec"]="158",
+ ["glyph"]="3",
+ ["hlist"]="136",
+ ["if_stack"]="13",
+ ["kern"]="6",
+ ["local_par"]="17",
+ ["pdf_literal"]="76",
+ ["penalty"]="16",
+ ["rule"]="7",
+ ["temp"]="5",
+ ["vlist"]="73",
+ },
+ ["obj_ptr"]=1030,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=738215,
+ ["str_ptr"]=2140943,
+ },
+ {
+ ["cs_count"]=41511,
+ ["dyn_used"]=866608,
+ ["elapsed_time"]=0.18099999427795,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=146987299,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1846",
+ ["attribute_list"]="618",
+ ["dir"]="5",
+ ["disc"]="134",
+ ["glue"]="1037",
+ ["glue_spec"]="452",
+ ["glyph"]="2136",
+ ["hlist"]="307",
+ ["if_stack"]="4",
+ ["kern"]="11",
+ ["local_par"]="40",
+ ["mark"]="20",
+ ["math"]="2",
+ ["pdf_dest"]="6",
+ ["pdf_literal"]="202",
+ ["penalty"]="162",
+ ["rule"]="107",
+ ["temp"]="5",
+ ["vlist"]="90",
+ ["write"]="6",
+ },
+ ["obj_ptr"]=1033,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=738233,
+ ["str_ptr"]=2140944,
+ },
+ {
+ ["cs_count"]=41512,
+ ["dyn_used"]=868779,
+ ["elapsed_time"]=0.11199998855591,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=147493641,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="2236",
+ ["attribute_list"]="748",
+ ["dir"]="5",
+ ["disc"]="121",
+ ["glue"]="1318",
+ ["glue_spec"]="476",
+ ["glyph"]="1677",
+ ["hlist"]="509",
+ ["if_stack"]="4",
+ ["kern"]="8",
+ ["local_par"]="61",
+ ["mark"]="12",
+ ["pdf_dest"]="3",
+ ["pdf_literal"]="114",
+ ["penalty"]="137",
+ ["rule"]="98",
+ ["temp"]="5",
+ ["vlist"]="112",
+ ["write"]="3",
+ },
+ ["obj_ptr"]=1040,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=738284,
+ ["str_ptr"]=2140950,
+ },
+ {
+ ["cs_count"]=41513,
+ ["dyn_used"]=871358,
+ ["elapsed_time"]=0.15400004386902,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=148075975,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="2518",
+ ["attribute_list"]="842",
+ ["dir"]="5",
+ ["disc"]="99",
+ ["glue"]="1407",
+ ["glue_spec"]="531",
+ ["glyph"]="1527",
+ ["hlist"]="568",
+ ["if_stack"]="6",
+ ["kern"]="8",
+ ["local_par"]="67",
+ ["mark"]="16",
+ ["math"]="2",
+ ["pdf_dest"]="4",
+ ["pdf_literal"]="138",
+ ["penalty"]="158",
+ ["rule"]="123",
+ ["temp"]="5",
+ ["vlist"]="119",
+ ["write"]="4",
+ },
+ ["obj_ptr"]=1045,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=738323,
+ ["str_ptr"]=2140954,
+ },
+ {
+ ["cs_count"]=41514,
+ ["dyn_used"]=873905,
+ ["elapsed_time"]=0.1560001373291,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=148650339,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="2674",
+ ["attribute_list"]="894",
+ ["dir"]="5",
+ ["disc"]="62",
+ ["glue"]="1374",
+ ["glue_spec"]="543",
+ ["glyph"]="992",
+ ["hlist"]="605",
+ ["if_stack"]="6",
+ ["kern"]="7",
+ ["local_par"]="71",
+ ["mark"]="20",
+ ["pdf_dest"]="5",
+ ["pdf_literal"]="136",
+ ["penalty"]="154",
+ ["rule"]="117",
+ ["temp"]="5",
+ ["vlist"]="124",
+ ["write"]="5",
+ },
+ ["obj_ptr"]=1052,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=738362,
+ ["str_ptr"]=2140958,
+ },
+ {
+ ["cs_count"]=41516,
+ ["dyn_used"]=877570,
+ ["elapsed_time"]=0.16999983787537,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=149284286,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="3916",
+ ["attribute_list"]="1308",
+ ["dir"]="5",
+ ["disc"]="78",
+ ["glue"]="2266",
+ ["glue_spec"]="718",
+ ["glyph"]="1246",
+ ["hlist"]="1028",
+ ["if_stack"]="4",
+ ["kern"]="8",
+ ["local_par"]="74",
+ ["mark"]="20",
+ ["pdf_dest"]="6",
+ ["pdf_literal"]="135",
+ ["penalty"]="188",
+ ["rule"]="189",
+ ["temp"]="5",
+ ["vlist"]="139",
+ ["write"]="6",
+ },
+ ["obj_ptr"]=1059,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=738413,
+ ["str_ptr"]=2140964,
+ },
+ {
+ ["cs_count"]=41517,
+ ["dyn_used"]=879879,
+ ["elapsed_time"]=0.12900018692017,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=149746173,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="3226",
+ ["attribute_list"]="1078",
+ ["dir"]="5",
+ ["disc"]="56",
+ ["glue"]="1848",
+ ["glue_spec"]="604",
+ ["glyph"]="1325",
+ ["hlist"]="824",
+ ["if_stack"]="4",
+ ["kern"]="8",
+ ["local_par"]="59",
+ ["mark"]="12",
+ ["pdf_annot"]="1",
+ ["pdf_dest"]="3",
+ ["pdf_literal"]="158",
+ ["penalty"]="163",
+ ["rule"]="165",
+ ["temp"]="5",
+ ["vlist"]="125",
+ ["write"]="3",
+ },
+ ["obj_ptr"]=1070,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=738476,
+ ["str_ptr"]=2140971,
+ },
+ {
+ ["cs_count"]=41518,
+ ["dyn_used"]=882706,
+ ["elapsed_time"]=0.17699980735779,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=150277643,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="3634",
+ ["attribute_list"]="1214",
+ ["dir"]="5",
+ ["disc"]="68",
+ ["glue"]="1907",
+ ["glue_spec"]="670",
+ ["glyph"]="1353",
+ ["hlist"]="867",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="79",
+ ["mark"]="24",
+ ["pdf_dest"]="6",
+ ["pdf_literal"]="135",
+ ["penalty"]="180",
+ ["rule"]="157",
+ ["temp"]="5",
+ ["vlist"]="131",
+ ["write"]="6",
+ },
+ ["obj_ptr"]=1074,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=738508,
+ ["str_ptr"]=2140974,
+ },
+ {
+ ["cs_count"]=41519,
+ ["dyn_used"]=884966,
+ ["elapsed_time"]=0.15200018882751,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=150803948,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="3511",
+ ["attribute_list"]="1173",
+ ["dir"]="5",
+ ["disc"]="71",
+ ["glue"]="1847",
+ ["glue_spec"]="640",
+ ["glyph"]="1129",
+ ["hlist"]="849",
+ ["if_stack"]="4",
+ ["kern"]="7",
+ ["local_par"]="76",
+ ["mark"]="16",
+ ["pdf_dest"]="4",
+ ["pdf_literal"]="128",
+ ["penalty"]="161",
+ ["rule"]="150",
+ ["temp"]="5",
+ ["vlist"]="135",
+ ["write"]="4",
+ },
+ ["obj_ptr"]=1083,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=738568,
+ ["str_ptr"]=2140981,
+ },
+ {
+ ["cs_count"]=41520,
+ ["dyn_used"]=886648,
+ ["elapsed_time"]=0.15399980545044,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=151346747,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="3088",
+ ["attribute_list"]="1032",
+ ["dir"]="5",
+ ["disc"]="67",
+ ["glue"]="1531",
+ ["glue_spec"]="552",
+ ["glyph"]="1004",
+ ["hlist"]="693",
+ ["if_stack"]="6",
+ ["kern"]="10",
+ ["local_par"]="65",
+ ["mark"]="16",
+ ["pdf_dest"]="4",
+ ["pdf_literal"]="130",
+ ["penalty"]="143",
+ ["rule"]="131",
+ ["temp"]="5",
+ ["vlist"]="128",
+ ["write"]="4",
+ },
+ ["obj_ptr"]=1090,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=738614,
+ ["str_ptr"]=2140986,
+ },
+ {
+ ["cs_count"]=41521,
+ ["dyn_used"]=889245,
+ ["elapsed_time"]=0.16100001335144,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=151959282,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="3316",
+ ["attribute_list"]="1108",
+ ["dir"]="5",
+ ["disc"]="55",
+ ["glue"]="1665",
+ ["glue_spec"]="611",
+ ["glyph"]="1086",
+ ["hlist"]="755",
+ ["if_stack"]="6",
+ ["kern"]="6",
+ ["local_par"]="73",
+ ["mark"]="20",
+ ["pdf_dest"]="5",
+ ["pdf_literal"]="140",
+ ["penalty"]="164",
+ ["rule"]="148",
+ ["temp"]="5",
+ ["vlist"]="135",
+ ["write"]="5",
+ },
+ ["obj_ptr"]=1097,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=738653,
+ ["str_ptr"]=2140990,
+ },
+ {
+ ["cs_count"]=41522,
+ ["dyn_used"]=892699,
+ ["elapsed_time"]=0.17300009727478,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=152452617,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="3145",
+ ["attribute_list"]="1051",
+ ["dir"]="5",
+ ["disc"]="43",
+ ["glue"]="1553",
+ ["glue_spec"]="587",
+ ["glyph"]="862",
+ ["hlist"]="712",
+ ["if_stack"]="4",
+ ["kern"]="6",
+ ["local_par"]="72",
+ ["mark"]="24",
+ ["pdf_dest"]="6",
+ ["pdf_literal"]="118",
+ ["penalty"]="156",
+ ["rule"]="129",
+ ["temp"]="5",
+ ["vlist"]="125",
+ ["write"]="6",
+ },
+ ["obj_ptr"]=1104,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=738699,
+ ["str_ptr"]=2140995,
+ },
+ {
+ ["cs_count"]=41523,
+ ["dyn_used"]=895228,
+ ["elapsed_time"]=0.11899995803833,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=152887302,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="3136",
+ ["attribute_list"]="1048",
+ ["dir"]="5",
+ ["disc"]="58",
+ ["glue"]="1633",
+ ["glue_spec"]="568",
+ ["glyph"]="1104",
+ ["hlist"]="713",
+ ["if_stack"]="4",
+ ["kern"]="8",
+ ["local_par"]="62",
+ ["mark"]="16",
+ ["pdf_dest"]="4",
+ ["pdf_literal"]="112",
+ ["penalty"]="134",
+ ["rule"]="114",
+ ["temp"]="5",
+ ["vlist"]="125",
+ ["write"]="4",
+ },
+ ["obj_ptr"]=1112,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=738753,
+ ["str_ptr"]=2141001,
+ },
+ {
+ ["cs_count"]=41524,
+ ["dyn_used"]=896308,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=152999043,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1549",
+ ["attribute_list"]="519",
+ ["dir"]="5",
+ ["disc"]="13",
+ ["glue"]="631",
+ ["glue_spec"]="243",
+ ["glyph"]="240",
+ ["hlist"]="290",
+ ["if_stack"]="11",
+ ["kern"]="6",
+ ["local_par"]="22",
+ ["pdf_literal"]="76",
+ ["penalty"]="33",
+ ["rule"]="31",
+ ["temp"]="5",
+ ["vlist"]="86",
+ },
+ ["obj_ptr"]=1119,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=738800,
+ ["str_ptr"]=2141006,
+ },
+ {
+ ["cs_count"]=41525,
+ ["dyn_used"]=898362,
+ ["elapsed_time"]=0.014999866485596,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=153082656,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1243",
+ ["attribute_list"]="417",
+ ["dir"]="5",
+ ["disc"]="5",
+ ["glue"]="430",
+ ["glue_spec"]="192",
+ ["glyph"]="67",
+ ["hlist"]="209",
+ ["if_stack"]="13",
+ ["kern"]="6",
+ ["local_par"]="17",
+ ["pdf_literal"]="76",
+ ["penalty"]="22",
+ ["rule"]="19",
+ ["temp"]="5",
+ ["vlist"]="74",
+ },
+ ["obj_ptr"]=1122,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=738819,
+ ["str_ptr"]=2141007,
+ },
+ {
+ ["cs_count"]=41526,
+ ["dyn_used"]=901952,
+ ["elapsed_time"]=0.13499999046326,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=153467853,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1993",
+ ["attribute_list"]="667",
+ ["dir"]="5",
+ ["disc"]="131",
+ ["glue"]="954",
+ ["glue_spec"]="374",
+ ["glyph"]="1742",
+ ["hlist"]="341",
+ ["if_stack"]="8",
+ ["kern"]="32",
+ ["local_par"]="43",
+ ["mark"]="16",
+ ["math"]="32",
+ ["pdf_annot"]="2",
+ ["pdf_dest"]="4",
+ ["pdf_literal"]="108",
+ ["penalty"]="149",
+ ["rule"]="62",
+ ["temp"]="5",
+ ["vlist"]="78",
+ ["write"]="6",
+ },
+ ["obj_ptr"]=1127,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=738838,
+ ["str_ptr"]=2141008,
+ },
+ {
+ ["cs_count"]=41527,
+ ["dyn_used"]=903706,
+ ["elapsed_time"]=0.13300013542175,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=153901100,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1990",
+ ["attribute_list"]="666",
+ ["dir"]="5",
+ ["disc"]="94",
+ ["glue"]="1056",
+ ["glue_spec"]="379",
+ ["glyph"]="1945",
+ ["hlist"]="399",
+ ["if_stack"]="17",
+ ["kern"]="6",
+ ["local_par"]="71",
+ ["mark"]="8",
+ ["math"]="30",
+ ["pdf_dest"]="2",
+ ["pdf_literal"]="164",
+ ["penalty"]="192",
+ ["rule"]="87",
+ ["temp"]="5",
+ ["vlist"]="92",
+ ["write"]="4",
+ },
+ ["obj_ptr"]=1134,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=738885,
+ ["str_ptr"]=2141013,
+ },
+ {
+ ["cs_count"]=41528,
+ ["dyn_used"]=905790,
+ ["elapsed_time"]=0.030999898910522,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=154069466,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1462",
+ ["attribute_list"]="490",
+ ["dir"]="5",
+ ["disc"]="35",
+ ["glue"]="620",
+ ["glue_spec"]="253",
+ ["glyph"]="590",
+ ["hlist"]="251",
+ ["if_stack"]="11",
+ ["kern"]="6",
+ ["local_par"]="28",
+ ["mark"]="4",
+ ["math"]="10",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="100",
+ ["penalty"]="72",
+ ["rule"]="38",
+ ["temp"]="5",
+ ["vlist"]="75",
+ ["write"]="2",
+ },
+ ["obj_ptr"]=1137,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=738911,
+ ["str_ptr"]=2141015,
+ },
+ {
+ ["cs_count"]=41529,
+ ["dyn_used"]=907920,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=154153113,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1243",
+ ["attribute_list"]="417",
+ ["dir"]="5",
+ ["disc"]="5",
+ ["glue"]="430",
+ ["glue_spec"]="192",
+ ["glyph"]="68",
+ ["hlist"]="209",
+ ["if_stack"]="13",
+ ["kern"]="6",
+ ["local_par"]="17",
+ ["pdf_literal"]="76",
+ ["penalty"]="22",
+ ["rule"]="19",
+ ["temp"]="5",
+ ["vlist"]="74",
+ },
+ ["obj_ptr"]=1140,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=738937,
+ ["str_ptr"]=2141017,
+ },
+ {
+ ["cs_count"]=41530,
+ ["dyn_used"]=910517,
+ ["elapsed_time"]=0.14000010490417,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=154563062,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1972",
+ ["attribute_list"]="660",
+ ["dir"]="5",
+ ["disc"]="141",
+ ["glue"]="1041",
+ ["glue_spec"]="353",
+ ["glyph"]="2014",
+ ["hlist"]="344",
+ ["if_stack"]="4",
+ ["kern"]="12",
+ ["local_par"]="36",
+ ["mark"]="16",
+ ["pdf_dest"]="4",
+ ["pdf_literal"]="112",
+ ["penalty"]="109",
+ ["rule"]="67",
+ ["temp"]="6",
+ ["vlist"]="78",
+ ["write"]="4",
+ },
+ ["obj_ptr"]=1143,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=738956,
+ ["str_ptr"]=2141018,
+ },
+ {
+ ["cs_count"]=41531,
+ ["dyn_used"]=913106,
+ ["elapsed_time"]=0.098999977111816,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=154838507,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1510",
+ ["attribute_list"]="506",
+ ["dir"]="5",
+ ["disc"]="94",
+ ["glue"]="793",
+ ["glue_spec"]="276",
+ ["glyph"]="1460",
+ ["hlist"]="255",
+ ["if_stack"]="11",
+ ["kern"]="6",
+ ["local_par"]="30",
+ ["mark"]="12",
+ ["math"]="2",
+ ["pdf_dest"]="3",
+ ["pdf_literal"]="90",
+ ["penalty"]="77",
+ ["rule"]="35",
+ ["temp"]="5",
+ ["vlist"]="77",
+ ["write"]="3",
+ },
+ ["obj_ptr"]=1149,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=739003,
+ ["str_ptr"]=2141023,
+ },
+ {
+ ["cs_count"]=41532,
+ ["dyn_used"]=915277,
+ ["elapsed_time"]=0.07099986076355,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=155238726,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1648",
+ ["attribute_list"]="552",
+ ["dir"]="5",
+ ["disc"]="188",
+ ["glue"]="1052",
+ ["glue_spec"]="321",
+ ["glyph"]="2532",
+ ["hlist"]="302",
+ ["if_stack"]="11",
+ ["kern"]="14",
+ ["local_par"]="34",
+ ["mark"]="4",
+ ["math"]="24",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="100",
+ ["penalty"]="120",
+ ["rule"]="51",
+ ["temp"]="5",
+ ["vlist"]="75",
+ ["write"]="2",
+ },
+ ["obj_ptr"]=1154,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=739043,
+ ["str_ptr"]=2141027,
+ },
+ {
+ ["cs_count"]=41533,
+ ["dyn_used"]=917429,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=155322219,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1249",
+ ["attribute_list"]="419",
+ ["dir"]="5",
+ ["disc"]="5",
+ ["glue"]="430",
+ ["glue_spec"]="192",
+ ["glyph"]="68",
+ ["hlist"]="209",
+ ["if_stack"]="13",
+ ["kern"]="6",
+ ["local_par"]="17",
+ ["pdf_literal"]="76",
+ ["penalty"]="22",
+ ["rule"]="19",
+ ["temp"]="5",
+ ["vlist"]="74",
+ },
+ ["obj_ptr"]=1158,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=739069,
+ ["str_ptr"]=2141029,
+ },
+ {
+ ["cs_count"]=41534,
+ ["dyn_used"]=919988,
+ ["elapsed_time"]=0.056999921798706,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=155595296,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1624",
+ ["attribute_list"]="544",
+ ["dir"]="5",
+ ["disc"]="94",
+ ["glue"]="795",
+ ["glue_spec"]="271",
+ ["glyph"]="1288",
+ ["hlist"]="297",
+ ["if_stack"]="7",
+ ["kern"]="15",
+ ["local_par"]="34",
+ ["mark"]="4",
+ ["math"]="30",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="84",
+ ["penalty"]="104",
+ ["rule"]="44",
+ ["temp"]="5",
+ ["vlist"]="75",
+ ["write"]="2",
+ },
+ ["obj_ptr"]=1161,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=739088,
+ ["str_ptr"]=2141030,
+ },
+ {
+ ["cs_count"]=41535,
+ ["dyn_used"]=922257,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=155669371,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1192",
+ ["attribute_list"]="400",
+ ["dir"]="5",
+ ["disc"]="5",
+ ["glue"]="388",
+ ["glue_spec"]="176",
+ ["glyph"]="72",
+ ["hlist"]="181",
+ ["if_stack"]="9",
+ ["kern"]="4",
+ ["local_par"]="15",
+ ["pdf_literal"]="76",
+ ["penalty"]="20",
+ ["rule"]="19",
+ ["temp"]="5",
+ ["vlist"]="66",
+ },
+ ["obj_ptr"]=1164,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=739114,
+ ["str_ptr"]=2141032,
+ },
+} \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mk/luatexref-t-luatex-progress-runtime.lut b/doc/context/sources/general/manuals/mk/luatexref-t-luatex-progress-runtime.lut
new file mode 100644
index 000000000..c822ecc57
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/luatexref-t-luatex-progress-runtime.lut
@@ -0,0 +1,3927 @@
+return {
+ {
+ ["cs_count"]=40670,
+ ["dyn_used"]=636455,
+ ["elapsed_time"]=1.1459999084473,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59690872,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="16",
+ ["attribute_list"]="8",
+ ["dir"]="2",
+ ["disc"]="1",
+ ["glue"]="1",
+ ["glue_spec"]="18",
+ ["hlist"]="3",
+ ["kern"]="1",
+ ["pdf_literal"]="35",
+ ["penalty"]="3",
+ ["rule"]="2",
+ ["vlist"]="5",
+ },
+ ["obj_ptr"]=445,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=711749,
+ ["str_ptr"]=2139635,
+ },
+ {
+ ["cs_count"]=40851,
+ ["dyn_used"]=646506,
+ ["elapsed_time"]=0.76399993896484,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81899708,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="321",
+ ["attribute_list"]="128",
+ ["dir"]="5",
+ ["disc"]="3",
+ ["glue"]="233",
+ ["glue_spec"]="148",
+ ["glyph"]="27",
+ ["hlist"]="111",
+ ["if_stack"]="9",
+ ["kern"]="22",
+ ["local_par"]="16",
+ ["pdf_literal"]="77",
+ ["penalty"]="19",
+ ["rule"]="11",
+ ["temp"]="5",
+ ["vlist"]="67",
+ },
+ ["obj_ptr"]=445,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=716828,
+ ["str_ptr"]=2139885,
+ },
+ {
+ ["cs_count"]=40855,
+ ["dyn_used"]=643798,
+ ["elapsed_time"]=0.005000114440918,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81914343,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="72",
+ ["attribute_list"]="34",
+ ["dir"]="5",
+ ["disc"]="1",
+ ["glue"]="77",
+ ["glue_spec"]="90",
+ ["hlist"]="22",
+ ["if_stack"]="12",
+ ["kern"]="1",
+ ["local_par"]="8",
+ ["pdf_literal"]="44",
+ ["penalty"]="6",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="20",
+ },
+ ["obj_ptr"]=450,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=716887,
+ ["str_ptr"]=2139889,
+ },
+ {
+ ["cs_count"]=40856,
+ ["dyn_used"]=643745,
+ ["elapsed_time"]=0.067999839782715,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83658984,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="198",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="11",
+ ["glue"]="226",
+ ["glue_spec"]="129",
+ ["glyph"]="108",
+ ["hlist"]="77",
+ ["if_stack"]="9",
+ ["kern"]="8",
+ ["local_par"]="16",
+ ["pdf_literal"]="47",
+ ["penalty"]="15",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="43",
+ },
+ ["obj_ptr"]=453,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=716973,
+ ["str_ptr"]=2139893,
+ },
+ {
+ ["cs_count"]=40856,
+ ["dyn_used"]=643790,
+ ["elapsed_time"]=0.005000114440918,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83661283,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="72",
+ ["attribute_list"]="34",
+ ["dir"]="5",
+ ["disc"]="1",
+ ["glue"]="77",
+ ["glue_spec"]="90",
+ ["hlist"]="22",
+ ["if_stack"]="12",
+ ["kern"]="1",
+ ["local_par"]="8",
+ ["pdf_literal"]="44",
+ ["penalty"]="6",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="20",
+ },
+ ["obj_ptr"]=457,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=716973,
+ ["str_ptr"]=2139893,
+ },
+ {
+ ["cs_count"]=40979,
+ ["dyn_used"]=655912,
+ ["elapsed_time"]=0.56200003623962,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=90862365,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="2354",
+ ["attribute_list"]="827",
+ ["dir"]="5",
+ ["disc"]="87",
+ ["glue"]="865",
+ ["glue_spec"]="414",
+ ["glyph"]="994",
+ ["hlist"]="759",
+ ["if_stack"]="4",
+ ["kern"]="17",
+ ["local_par"]="100",
+ ["mark"]="4",
+ ["math"]="2",
+ ["pdf_annot"]="41",
+ ["pdf_literal"]="152",
+ ["penalty"]="267",
+ ["rule"]="174",
+ ["temp"]="5",
+ ["vlist"]="115",
+ },
+ ["obj_ptr"]=501,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=721096,
+ ["str_ptr"]=2140062,
+ },
+ {
+ ["cs_count"]=40983,
+ ["dyn_used"]=659598,
+ ["elapsed_time"]=0.3769998550415,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=91415318,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="2465",
+ ["attribute_list"]="864",
+ ["dir"]="5",
+ ["disc"]="62",
+ ["glue"]="930",
+ ["glue_spec"]="452",
+ ["glyph"]="1116",
+ ["hlist"]="808",
+ ["if_stack"]="4",
+ ["kern"]="6",
+ ["local_par"]="106",
+ ["pdf_annot"]="45",
+ ["pdf_literal"]="212",
+ ["penalty"]="311",
+ ["rule"]="214",
+ ["temp"]="5",
+ ["vlist"]="118",
+ },
+ ["obj_ptr"]=551,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=721189,
+ ["str_ptr"]=2140066,
+ },
+ {
+ ["cs_count"]=40987,
+ ["dyn_used"]=662873,
+ ["elapsed_time"]=0.36700010299683,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=91930414,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="2348",
+ ["attribute_list"]="825",
+ ["dir"]="5",
+ ["disc"]="89",
+ ["glue"]="937",
+ ["glue_spec"]="432",
+ ["glyph"]="1166",
+ ["hlist"]="781",
+ ["if_stack"]="4",
+ ["kern"]="15",
+ ["local_par"]="102",
+ ["math"]="2",
+ ["pdf_annot"]="43",
+ ["pdf_literal"]="156",
+ ["penalty"]="282",
+ ["rule"]="187",
+ ["temp"]="5",
+ ["vlist"]="116",
+ },
+ ["obj_ptr"]=596,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=721267,
+ ["str_ptr"]=2140070,
+ },
+ {
+ ["cs_count"]=40989,
+ ["dyn_used"]=662728,
+ ["elapsed_time"]=0.2960000038147,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=92030342,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="404",
+ ["attribute_list"]="177",
+ ["dir"]="5",
+ ["disc"]="6",
+ ["glue"]="313",
+ ["glue_spec"]="174",
+ ["glyph"]="66",
+ ["hlist"]="178",
+ ["if_stack"]="11",
+ ["kern"]="6",
+ ["local_par"]="22",
+ ["pdf_annot"]="3",
+ ["pdf_literal"]="76",
+ ["penalty"]="33",
+ ["rule"]="19",
+ ["temp"]="5",
+ ["vlist"]="76",
+ },
+ ["obj_ptr"]=601,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=721293,
+ ["str_ptr"]=2140072,
+ },
+ {
+ ["cs_count"]=41031,
+ ["dyn_used"]=666376,
+ ["elapsed_time"]=0.37700009346008,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=95611070,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="701",
+ ["attribute_list"]="276",
+ ["dir"]="5",
+ ["disc"]="112",
+ ["glue"]="605",
+ ["glue_spec"]="239",
+ ["glyph"]="1278",
+ ["hlist"]="219",
+ ["if_stack"]="11",
+ ["kern"]="41",
+ ["local_par"]="36",
+ ["mark"]="4",
+ ["math"]="16",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="74",
+ ["penalty"]="75",
+ ["rule"]="25",
+ ["temp"]="5",
+ ["vlist"]="86",
+ ["write"]="2",
+ },
+ ["obj_ptr"]=604,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=722163,
+ ["str_ptr"]=2140117,
+ },
+ {
+ ["cs_count"]=41034,
+ ["dyn_used"]=669693,
+ ["elapsed_time"]=0.2979998588562,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=95694248,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="266",
+ ["attribute_list"]="131",
+ ["dir"]="5",
+ ["disc"]="1",
+ ["glue"]="271",
+ ["glue_spec"]="155",
+ ["glyph"]="2",
+ ["hlist"]="136",
+ ["if_stack"]="13",
+ ["kern"]="6",
+ ["local_par"]="17",
+ ["pdf_literal"]="70",
+ ["penalty"]="16",
+ ["rule"]="7",
+ ["temp"]="5",
+ ["vlist"]="73",
+ },
+ ["obj_ptr"]=610,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=722219,
+ ["str_ptr"]=2140121,
+ },
+ {
+ ["cs_count"]=41141,
+ ["dyn_used"]=676427,
+ ["elapsed_time"]=0.55999994277954,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=103964575,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1326",
+ ["attribute_list"]="486",
+ ["dir"]="5",
+ ["disc"]="181",
+ ["glue"]="1199",
+ ["glue_spec"]="398",
+ ["glyph"]="2375",
+ ["hlist"]="395",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="37",
+ ["mark"]="12",
+ ["math"]="16",
+ ["pdf_dest"]="3",
+ ["pdf_literal"]="88",
+ ["penalty"]="109",
+ ["rule"]="52",
+ ["temp"]="5",
+ ["vlist"]="84",
+ ["write"]="3",
+ },
+ ["obj_ptr"]=613,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=725998,
+ ["str_ptr"]=2140273,
+ },
+ {
+ ["cs_count"]=41167,
+ ["dyn_used"]=681448,
+ ["elapsed_time"]=0.39800000190735,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=104497220,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1870",
+ ["attribute_list"]="626",
+ ["dir"]="5",
+ ["disc"]="102",
+ ["glue"]="1374",
+ ["glue_spec"]="491",
+ ["glyph"]="1848",
+ ["hlist"]="518",
+ ["if_stack"]="3",
+ ["kern"]="23",
+ ["local_par"]="43",
+ ["mark"]="8",
+ ["math"]="34",
+ ["pdf_annot"]="1",
+ ["pdf_dest"]="2",
+ ["pdf_literal"]="122",
+ ["penalty"]="153",
+ ["rule"]="72",
+ ["temp"]="5",
+ ["vlist"]="83",
+ ["write"]="2",
+ },
+ ["obj_ptr"]=620,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=726299,
+ ["str_ptr"]=2140302,
+ },
+ {
+ ["cs_count"]=41272,
+ ["dyn_used"]=686853,
+ ["elapsed_time"]=0.54100012779236,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=112677781,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="991",
+ ["attribute_list"]="333",
+ ["dir"]="5",
+ ["disc"]="190",
+ ["glue"]="908",
+ ["glue_spec"]="335",
+ ["glyph"]="2510",
+ ["hlist"]="244",
+ ["if_stack"]="4",
+ ["kern"]="25",
+ ["local_par"]="45",
+ ["mark"]="8",
+ ["math"]="18",
+ ["pdf_annot"]="1",
+ ["pdf_dest"]="2",
+ ["pdf_literal"]="125",
+ ["penalty"]="116",
+ ["rule"]="50",
+ ["temp"]="6",
+ ["vlist"]="81",
+ ["write"]="2",
+ },
+ ["obj_ptr"]=625,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=730145,
+ ["str_ptr"]=2140455,
+ },
+ {
+ ["cs_count"]=41288,
+ ["dyn_used"]=690760,
+ ["elapsed_time"]=0.44700002670288,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=114062665,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1039",
+ ["attribute_list"]="349",
+ ["dir"]="5",
+ ["disc"]="182",
+ ["glue"]="917",
+ ["glue_spec"]="332",
+ ["glyph"]="2616",
+ ["hlist"]="227",
+ ["if_stack"]="4",
+ ["kern"]="26",
+ ["local_par"]="39",
+ ["mark"]="16",
+ ["math"]="21",
+ ["pdf_dest"]="4",
+ ["pdf_literal"]="110",
+ ["penalty"]="99",
+ ["rule"]="36",
+ ["temp"]="5",
+ ["vlist"]="77",
+ ["write"]="4",
+ },
+ ["obj_ptr"]=631,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=730502,
+ ["str_ptr"]=2140475,
+ },
+ {
+ ["cs_count"]=41289,
+ ["dyn_used"]=694567,
+ ["elapsed_time"]=0.45199990272522,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=114411818,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1066",
+ ["attribute_list"]="358",
+ ["dir"]="5",
+ ["disc"]="114",
+ ["glue"]="760",
+ ["glue_spec"]="319",
+ ["glyph"]="1784",
+ ["hlist"]="231",
+ ["if_stack"]="4",
+ ["kern"]="22",
+ ["local_par"]="45",
+ ["mark"]="24",
+ ["math"]="16",
+ ["pdf_dest"]="6",
+ ["pdf_literal"]="104",
+ ["penalty"]="104",
+ ["rule"]="39",
+ ["temp"]="6",
+ ["vlist"]="79",
+ ["write"]="6",
+ },
+ ["obj_ptr"]=636,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=730537,
+ ["str_ptr"]=2140479,
+ },
+ {
+ ["cs_count"]=41395,
+ ["dyn_used"]=702623,
+ ["elapsed_time"]=0.58899998664856,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=123044687,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="2149",
+ ["attribute_list"]="719",
+ ["dir"]="5",
+ ["disc"]="128",
+ ["glue"]="1435",
+ ["glue_spec"]="469",
+ ["glyph"]="1822",
+ ["hlist"]="550",
+ ["if_stack"]="4",
+ ["kern"]="22",
+ ["local_par"]="41",
+ ["mark"]="20",
+ ["math"]="16",
+ ["pdf_dest"]="5",
+ ["pdf_literal"]="90",
+ ["penalty"]="119",
+ ["rule"]="71",
+ ["temp"]="5",
+ ["vlist"]="79",
+ ["write"]="6",
+ },
+ ["obj_ptr"]=644,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=734479,
+ ["str_ptr"]=2140637,
+ },
+ {
+ ["cs_count"]=41398,
+ ["dyn_used"]=705148,
+ ["elapsed_time"]=0.41600012779236,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=123357286,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1216",
+ ["attribute_list"]="408",
+ ["dir"]="5",
+ ["disc"]="77",
+ ["glue"]="878",
+ ["glue_spec"]="325",
+ ["glyph"]="1293",
+ ["hlist"]="317",
+ ["if_stack"]="11",
+ ["kern"]="16",
+ ["local_par"]="34",
+ ["mark"]="16",
+ ["math"]="2",
+ ["pdf_dest"]="4",
+ ["pdf_literal"]="92",
+ ["penalty"]="78",
+ ["rule"]="40",
+ ["temp"]="5",
+ ["vlist"]="77",
+ ["write"]="4",
+ },
+ ["obj_ptr"]=651,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=734572,
+ ["str_ptr"]=2140645,
+ },
+ {
+ ["cs_count"]=41399,
+ ["dyn_used"]=708253,
+ ["elapsed_time"]=0.2960000038147,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=123440776,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="409",
+ ["attribute_list"]="139",
+ ["dir"]="5",
+ ["disc"]="1",
+ ["glue"]="271",
+ ["glue_spec"]="158",
+ ["glyph"]="3",
+ ["hlist"]="136",
+ ["if_stack"]="13",
+ ["kern"]="6",
+ ["local_par"]="17",
+ ["pdf_literal"]="76",
+ ["penalty"]="16",
+ ["rule"]="7",
+ ["temp"]="5",
+ ["vlist"]="73",
+ },
+ ["obj_ptr"]=657,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=734614,
+ ["str_ptr"]=2140650,
+ },
+ {
+ ["cs_count"]=41400,
+ ["dyn_used"]=712521,
+ ["elapsed_time"]=0.45599985122681,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=123866370,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1273",
+ ["attribute_list"]="427",
+ ["dir"]="5",
+ ["disc"]="168",
+ ["glue"]="921",
+ ["glue_spec"]="341",
+ ["glyph"]="2020",
+ ["hlist"]="294",
+ ["if_stack"]="6",
+ ["kern"]="24",
+ ["local_par"]="48",
+ ["mark"]="20",
+ ["math"]="10",
+ ["pdf_dest"]="6",
+ ["pdf_literal"]="112",
+ ["penalty"]="123",
+ ["rule"]="60",
+ ["temp"]="5",
+ ["vlist"]="86",
+ ["write"]="8",
+ },
+ ["obj_ptr"]=660,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=734632,
+ ["str_ptr"]=2140651,
+ },
+ {
+ ["cs_count"]=41401,
+ ["dyn_used"]=715757,
+ ["elapsed_time"]=0.36600017547607,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=124343571,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1279",
+ ["attribute_list"]="429",
+ ["dir"]="5",
+ ["disc"]="204",
+ ["glue"]="1091",
+ ["glue_spec"]="351",
+ ["glyph"]="2803",
+ ["hlist"]="294",
+ ["if_stack"]="4",
+ ["kern"]="23",
+ ["local_par"]="29",
+ ["mark"]="4",
+ ["pdf_annot"]="1",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="132",
+ ["penalty"]="110",
+ ["rule"]="60",
+ ["temp"]="5",
+ ["vlist"]="74",
+ ["write"]="1",
+ },
+ ["obj_ptr"]=670,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=734684,
+ ["str_ptr"]=2140658,
+ },
+ {
+ ["cs_count"]=41404,
+ ["dyn_used"]=719485,
+ ["elapsed_time"]=0.375,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=127218836,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="988",
+ ["attribute_list"]="332",
+ ["dir"]="5",
+ ["disc"]="209",
+ ["glue"]="1052",
+ ["glue_spec"]="322",
+ ["glyph"]="3212",
+ ["hlist"]="241",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="38",
+ ["math"]="24",
+ ["pdf_literal"]="156",
+ ["penalty"]="145",
+ ["rule"]="67",
+ ["temp"]="5",
+ ["vlist"]="73",
+ ["write"]="1",
+ },
+ ["obj_ptr"]=673,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=734786,
+ ["str_ptr"]=2140663,
+ },
+ {
+ ["cs_count"]=41405,
+ ["dyn_used"]=722885,
+ ["elapsed_time"]=0.35799980163574,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=127564114,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="991",
+ ["attribute_list"]="333",
+ ["dir"]="5",
+ ["disc"]="146",
+ ["glue"]="822",
+ ["glue_spec"]="381",
+ ["glyph"]="2012",
+ ["hlist"]="230",
+ ["if_stack"]="11",
+ ["kern"]="14",
+ ["local_par"]="33",
+ ["mark"]="4",
+ ["math"]="16",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="126",
+ ["penalty"]="177",
+ ["rule"]="42",
+ ["temp"]="5",
+ ["vlist"]="74",
+ ["write"]="3",
+ },
+ ["obj_ptr"]=677,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=734804,
+ ["str_ptr"]=2140664,
+ },
+ {
+ ["cs_count"]=41410,
+ ["dyn_used"]=728041,
+ ["elapsed_time"]=0.42200016975403,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=128420748,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1039",
+ ["attribute_list"]="349",
+ ["dir"]="5",
+ ["disc"]="104",
+ ["glue"]="699",
+ ["glue_spec"]="298",
+ ["glyph"]="1643",
+ ["hlist"]="267",
+ ["if_stack"]="3",
+ ["kern"]="25",
+ ["local_par"]="63",
+ ["mark"]="12",
+ ["math"]="4",
+ ["pdf_dest"]="4",
+ ["pdf_literal"]="142",
+ ["penalty"]="127",
+ ["rule"]="62",
+ ["temp"]="5",
+ ["vlist"]="82",
+ ["write"]="5",
+ },
+ ["obj_ptr"]=680,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=734989,
+ ["str_ptr"]=2140672,
+ },
+ {
+ ["cs_count"]=41411,
+ ["dyn_used"]=731008,
+ ["elapsed_time"]=0.33200001716614,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=128671610,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="682",
+ ["attribute_list"]="230",
+ ["dir"]="5",
+ ["disc"]="2",
+ ["glue"]="530",
+ ["glue_spec"]="243",
+ ["glyph"]="1097",
+ ["hlist"]="267",
+ ["if_stack"]="3",
+ ["kern"]="8",
+ ["local_par"]="78",
+ ["pdf_literal"]="202",
+ ["penalty"]="139",
+ ["rule"]="71",
+ ["temp"]="5",
+ ["vlist"]="77",
+ },
+ ["obj_ptr"]=686,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=735034,
+ ["str_ptr"]=2140677,
+ },
+ {
+ ["cs_count"]=41412,
+ ["dyn_used"]=735071,
+ ["elapsed_time"]=0.47299981117249,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=129015859,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1306",
+ ["attribute_list"]="438",
+ ["dir"]="5",
+ ["disc"]="40",
+ ["glue"]="782",
+ ["glue_spec"]="383",
+ ["glyph"]="1446",
+ ["hlist"]="366",
+ ["if_stack"]="3",
+ ["kern"]="8",
+ ["local_par"]="103",
+ ["mark"]="12",
+ ["pdf_dest"]="3",
+ ["pdf_literal"]="228",
+ ["penalty"]="211",
+ ["rule"]="101",
+ ["temp"]="5",
+ ["vlist"]="107",
+ ["write"]="3",
+ },
+ ["obj_ptr"]=689,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=735052,
+ ["str_ptr"]=2140678,
+ },
+ {
+ ["cs_count"]=41413,
+ ["dyn_used"]=737633,
+ ["elapsed_time"]=0.49400019645691,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=129322047,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1402",
+ ["attribute_list"]="470",
+ ["dir"]="5",
+ ["disc"]="89",
+ ["glue"]="839",
+ ["glue_spec"]="384",
+ ["glyph"]="1655",
+ ["hlist"]="319",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="78",
+ ["mark"]="16",
+ ["pdf_dest"]="4",
+ ["pdf_literal"]="175",
+ ["penalty"]="179",
+ ["rule"]="79",
+ ["temp"]="6",
+ ["vlist"]="106",
+ ["write"]="4",
+ },
+ ["obj_ptr"]=695,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=735088,
+ ["str_ptr"]=2140682,
+ },
+ {
+ ["cs_count"]=41419,
+ ["dyn_used"]=741384,
+ ["elapsed_time"]=0.3529999256134,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=129547026,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="721",
+ ["attribute_list"]="243",
+ ["dir"]="5",
+ ["disc"]="105",
+ ["glue"]="698",
+ ["glue_spec"]="309",
+ ["glyph"]="1662",
+ ["hlist"]="215",
+ ["if_stack"]="5",
+ ["kern"]="16",
+ ["local_par"]="52",
+ ["mark"]="4",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="135",
+ ["penalty"]="94",
+ ["rule"]="40",
+ ["temp"]="5",
+ ["vlist"]="74",
+ ["write"]="1",
+ },
+ ["obj_ptr"]=701,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=735239,
+ ["str_ptr"]=2140692,
+ },
+ {
+ ["cs_count"]=41420,
+ ["dyn_used"]=745112,
+ ["elapsed_time"]=0.40499997138977,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=129107866,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="919",
+ ["attribute_list"]="309",
+ ["dir"]="5",
+ ["disc"]="86",
+ ["glue"]="712",
+ ["glue_spec"]="309",
+ ["glyph"]="1550",
+ ["hlist"]="214",
+ ["if_stack"]="5",
+ ["kern"]="22",
+ ["local_par"]="45",
+ ["mark"]="12",
+ ["pdf_dest"]="3",
+ ["pdf_literal"]="123",
+ ["penalty"]="97",
+ ["rule"]="39",
+ ["temp"]="5",
+ ["vlist"]="76",
+ ["write"]="3",
+ },
+ ["obj_ptr"]=704,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=735263,
+ ["str_ptr"]=2140694,
+ },
+ {
+ ["cs_count"]=41421,
+ ["dyn_used"]=748548,
+ ["elapsed_time"]=0.45600008964539,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=128596484,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1252",
+ ["attribute_list"]="420",
+ ["dir"]="5",
+ ["disc"]="101",
+ ["glue"]="863",
+ ["glue_spec"]="396",
+ ["glyph"]="1770",
+ ["hlist"]="247",
+ ["if_stack"]="4",
+ ["kern"]="32",
+ ["local_par"]="47",
+ ["mark"]="24",
+ ["math"]="10",
+ ["pdf_dest"]="6",
+ ["pdf_literal"]="109",
+ ["penalty"]="154",
+ ["rule"]="74",
+ ["temp"]="5",
+ ["vlist"]="79",
+ ["write"]="8",
+ },
+ ["obj_ptr"]=708,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=735293,
+ ["str_ptr"]=2140697,
+ },
+ {
+ ["cs_count"]=41422,
+ ["dyn_used"]=752762,
+ ["elapsed_time"]=0.45899987220764,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=127551151,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1258",
+ ["attribute_list"]="422",
+ ["dir"]="5",
+ ["disc"]="106",
+ ["glue"]="867",
+ ["glue_spec"]="374",
+ ["glyph"]="1500",
+ ["hlist"]="288",
+ ["if_stack"]="5",
+ ["kern"]="16",
+ ["local_par"]="47",
+ ["mark"]="24",
+ ["math"]="8",
+ ["pdf_dest"]="6",
+ ["pdf_literal"]="106",
+ ["penalty"]="128",
+ ["rule"]="65",
+ ["temp"]="5",
+ ["vlist"]="87",
+ ["write"]="6",
+ },
+ ["obj_ptr"]=715,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=735341,
+ ["str_ptr"]=2140703,
+ },
+ {
+ ["cs_count"]=41423,
+ ["dyn_used"]=756018,
+ ["elapsed_time"]=0.42000007629395,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=127913798,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="976",
+ ["attribute_list"]="328",
+ ["dir"]="5",
+ ["disc"]="164",
+ ["glue"]="812",
+ ["glue_spec"]="353",
+ ["glyph"]="2038",
+ ["hlist"]="215",
+ ["if_stack"]="4",
+ ["kern"]="17",
+ ["local_par"]="41",
+ ["mark"]="20",
+ ["pdf_dest"]="5",
+ ["pdf_literal"]="102",
+ ["penalty"]="125",
+ ["rule"]="54",
+ ["temp"]="5",
+ ["vlist"]="78",
+ ["write"]="5",
+ },
+ ["obj_ptr"]=722,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=735389,
+ ["str_ptr"]=2140709,
+ },
+ {
+ ["cs_count"]=41424,
+ ["dyn_used"]=759763,
+ ["elapsed_time"]=0.37899994850159,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=128313819,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1057",
+ ["attribute_list"]="355",
+ ["dir"]="5",
+ ["disc"]="147",
+ ["glue"]="897",
+ ["glue_spec"]="348",
+ ["glyph"]="2251",
+ ["hlist"]="229",
+ ["if_stack"]="4",
+ ["kern"]="22",
+ ["local_par"]="37",
+ ["mark"]="16",
+ ["math"]="6",
+ ["pdf_annot"]="1",
+ ["pdf_dest"]="4",
+ ["pdf_literal"]="116",
+ ["penalty"]="129",
+ ["rule"]="59",
+ ["temp"]="5",
+ ["vlist"]="77",
+ ["write"]="5",
+ },
+ ["obj_ptr"]=731,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=735431,
+ ["str_ptr"]=2140714,
+ },
+ {
+ ["cs_count"]=41425,
+ ["dyn_used"]=763707,
+ ["elapsed_time"]=0.44099998474121,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=128668938,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1141",
+ ["attribute_list"]="383",
+ ["dir"]="5",
+ ["disc"]="88",
+ ["glue"]="724",
+ ["glue_spec"]="375",
+ ["glyph"]="1314",
+ ["hlist"]="227",
+ ["if_stack"]="13",
+ ["kern"]="12",
+ ["local_par"]="48",
+ ["mark"]="32",
+ ["pdf_dest"]="8",
+ ["pdf_literal"]="120",
+ ["penalty"]="140",
+ ["rule"]="69",
+ ["temp"]="5",
+ ["vlist"]="81",
+ ["write"]="8",
+ },
+ ["obj_ptr"]=735,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=735461,
+ ["str_ptr"]=2140717,
+ },
+ {
+ ["cs_count"]=41426,
+ ["dyn_used"]=767556,
+ ["elapsed_time"]=0.44099998474121,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=129033960,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1096",
+ ["attribute_list"]="368",
+ ["dir"]="5",
+ ["disc"]="55",
+ ["glue"]="765",
+ ["glue_spec"]="363",
+ ["glyph"]="1426",
+ ["hlist"]="226",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="46",
+ ["mark"]="28",
+ ["pdf_dest"]="7",
+ ["pdf_literal"]="125",
+ ["penalty"]="128",
+ ["rule"]="64",
+ ["temp"]="5",
+ ["vlist"]="80",
+ ["write"]="7",
+ },
+ ["obj_ptr"]=744,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=735521,
+ ["str_ptr"]=2140725,
+ },
+ {
+ ["cs_count"]=41427,
+ ["dyn_used"]=771355,
+ ["elapsed_time"]=0.4300000667572,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=129054784,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1084",
+ ["attribute_list"]="364",
+ ["dir"]="5",
+ ["disc"]="69",
+ ["glue"]="797",
+ ["glue_spec"]="377",
+ ["glyph"]="1537",
+ ["hlist"]="219",
+ ["if_stack"]="13",
+ ["kern"]="8",
+ ["local_par"]="46",
+ ["mark"]="24",
+ ["pdf_dest"]="6",
+ ["pdf_literal"]="148",
+ ["penalty"]="137",
+ ["rule"]="71",
+ ["temp"]="5",
+ ["vlist"]="79",
+ ["write"]="6",
+ },
+ ["obj_ptr"]=753,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=735575,
+ ["str_ptr"]=2140732,
+ },
+ {
+ ["cs_count"]=41428,
+ ["dyn_used"]=775211,
+ ["elapsed_time"]=0.44199991226196,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=127248756,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1138",
+ ["attribute_list"]="382",
+ ["dir"]="5",
+ ["disc"]="88",
+ ["glue"]="838",
+ ["glue_spec"]="399",
+ ["glyph"]="1892",
+ ["hlist"]="217",
+ ["if_stack"]="13",
+ ["kern"]="10",
+ ["local_par"]="42",
+ ["mark"]="24",
+ ["pdf_dest"]="6",
+ ["pdf_literal"]="162",
+ ["penalty"]="142",
+ ["rule"]="82",
+ ["temp"]="5",
+ ["vlist"]="79",
+ ["write"]="6",
+ },
+ ["obj_ptr"]=761,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=735623,
+ ["str_ptr"]=2140738,
+ },
+ {
+ ["cs_count"]=41429,
+ ["dyn_used"]=779159,
+ ["elapsed_time"]=0.44799995422363,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=125594665,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1087",
+ ["attribute_list"]="365",
+ ["dir"]="5",
+ ["disc"]="84",
+ ["glue"]="766",
+ ["glue_spec"]="384",
+ ["glyph"]="1676",
+ ["hlist"]="224",
+ ["if_stack"]="4",
+ ["kern"]="12",
+ ["local_par"]="45",
+ ["mark"]="28",
+ ["pdf_dest"]="7",
+ ["pdf_literal"]="131",
+ ["penalty"]="132",
+ ["rule"]="67",
+ ["temp"]="5",
+ ["vlist"]="80",
+ ["write"]="7",
+ },
+ ["obj_ptr"]=769,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=735671,
+ ["str_ptr"]=2140744,
+ },
+ {
+ ["cs_count"]=41430,
+ ["dyn_used"]=782870,
+ ["elapsed_time"]=0.44400000572205,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=124753647,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1090",
+ ["attribute_list"]="366",
+ ["dir"]="5",
+ ["disc"]="95",
+ ["glue"]="790",
+ ["glue_spec"]="374",
+ ["glyph"]="1709",
+ ["hlist"]="225",
+ ["if_stack"]="4",
+ ["kern"]="10",
+ ["local_par"]="47",
+ ["mark"]="28",
+ ["pdf_dest"]="7",
+ ["pdf_literal"]="129",
+ ["penalty"]="135",
+ ["rule"]="65",
+ ["temp"]="5",
+ ["vlist"]="80",
+ ["write"]="7",
+ },
+ ["obj_ptr"]=778,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=735725,
+ ["str_ptr"]=2140751,
+ },
+ {
+ ["cs_count"]=41436,
+ ["dyn_used"]=786136,
+ ["elapsed_time"]=0.35199999809265,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=125050259,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="841",
+ ["attribute_list"]="283",
+ ["dir"]="5",
+ ["disc"]="100",
+ ["glue"]="705",
+ ["glue_spec"]="299",
+ ["glyph"]="1547",
+ ["hlist"]="208",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="44",
+ ["mark"]="12",
+ ["pdf_dest"]="2",
+ ["pdf_literal"]="132",
+ ["penalty"]="96",
+ ["rule"]="43",
+ ["temp"]="5",
+ ["vlist"]="76",
+ ["write"]="2",
+ },
+ ["obj_ptr"]=786,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=735904,
+ ["str_ptr"]=2140763,
+ },
+ {
+ ["cs_count"]=41437,
+ ["dyn_used"]=790277,
+ ["elapsed_time"]=0.40400004386902,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=125386398,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="991",
+ ["attribute_list"]="333",
+ ["dir"]="5",
+ ["disc"]="84",
+ ["glue"]="738",
+ ["glue_spec"]="318",
+ ["glyph"]="1513",
+ ["hlist"]="225",
+ ["if_stack"]="4",
+ ["kern"]="22",
+ ["local_par"]="46",
+ ["mark"]="16",
+ ["pdf_dest"]="4",
+ ["pdf_literal"]="114",
+ ["penalty"]="103",
+ ["rule"]="43",
+ ["temp"]="5",
+ ["vlist"]="77",
+ ["write"]="6",
+ },
+ ["obj_ptr"]=790,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=735934,
+ ["str_ptr"]=2140766,
+ },
+ {
+ ["cs_count"]=41438,
+ ["dyn_used"]=794612,
+ ["elapsed_time"]=0.49399995803833,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=125728228,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1186",
+ ["attribute_list"]="398",
+ ["dir"]="5",
+ ["disc"]="50",
+ ["glue"]="681",
+ ["glue_spec"]="354",
+ ["glyph"]="1155",
+ ["hlist"]="233",
+ ["if_stack"]="13",
+ ["kern"]="15",
+ ["local_par"]="50",
+ ["mark"]="36",
+ ["pdf_dest"]="9",
+ ["pdf_literal"]="114",
+ ["penalty"]="144",
+ ["rule"]="70",
+ ["temp"]="5",
+ ["vlist"]="82",
+ ["write"]="9",
+ },
+ ["obj_ptr"]=795,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=735972,
+ ["str_ptr"]=2140770,
+ },
+ {
+ ["cs_count"]=41439,
+ ["dyn_used"]=798792,
+ ["elapsed_time"]=0.42300009727478,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=126054510,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1084",
+ ["attribute_list"]="364",
+ ["dir"]="5",
+ ["disc"]="68",
+ ["glue"]="713",
+ ["glue_spec"]="349",
+ ["glyph"]="1422",
+ ["hlist"]="227",
+ ["if_stack"]="10",
+ ["kern"]="19",
+ ["local_par"]="47",
+ ["mark"]="28",
+ ["pdf_dest"]="8",
+ ["pdf_literal"]="120",
+ ["penalty"]="127",
+ ["rule"]="61",
+ ["temp"]="5",
+ ["vlist"]="80",
+ ["write"]="9",
+ },
+ ["obj_ptr"]=805,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=736039,
+ ["str_ptr"]=2140778,
+ },
+ {
+ ["cs_count"]=41452,
+ ["dyn_used"]=802360,
+ ["elapsed_time"]=0.37700009346008,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=126361941,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="925",
+ ["attribute_list"]="311",
+ ["dir"]="5",
+ ["disc"]="78",
+ ["glue"]="743",
+ ["glue_spec"]="305",
+ ["glyph"]="1432",
+ ["hlist"]="231",
+ ["if_stack"]="4",
+ ["kern"]="24",
+ ["local_par"]="50",
+ ["mark"]="12",
+ ["pdf_dest"]="3",
+ ["pdf_literal"]="123",
+ ["penalty"]="103",
+ ["rule"]="44",
+ ["temp"]="6",
+ ["vlist"]="76",
+ ["write"]="5",
+ },
+ ["obj_ptr"]=815,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=736449,
+ ["str_ptr"]=2140799,
+ },
+ {
+ ["cs_count"]=41455,
+ ["dyn_used"]=805735,
+ ["elapsed_time"]=0.39399981498718,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=126799334,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1435",
+ ["attribute_list"]="481",
+ ["dir"]="5",
+ ["disc"]="84",
+ ["glue"]="1005",
+ ["glue_spec"]="377",
+ ["glyph"]="1502",
+ ["hlist"]="387",
+ ["if_stack"]="4",
+ ["kern"]="20",
+ ["local_par"]="63",
+ ["mark"]="12",
+ ["pdf_dest"]="3",
+ ["pdf_literal"]="124",
+ ["penalty"]="135",
+ ["rule"]="80",
+ ["temp"]="5",
+ ["vlist"]="98",
+ ["write"]="4",
+ },
+ ["obj_ptr"]=822,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=736539,
+ ["str_ptr"]=2140805,
+ },
+ {
+ ["cs_count"]=41458,
+ ["dyn_used"]=809590,
+ ["elapsed_time"]=0.39800000190735,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=127502674,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1450",
+ ["attribute_list"]="486",
+ ["dir"]="5",
+ ["disc"]="174",
+ ["glue"]="1132",
+ ["glue_spec"]="406",
+ ["glyph"]="2272",
+ ["hlist"]="379",
+ ["if_stack"]="4",
+ ["kern"]="22",
+ ["local_par"]="59",
+ ["mark"]="12",
+ ["math"]="6",
+ ["pdf_annot"]="1",
+ ["pdf_dest"]="3",
+ ["pdf_literal"]="108",
+ ["penalty"]="140",
+ ["rule"]="77",
+ ["temp"]="5",
+ ["vlist"]="96",
+ ["write"]="4",
+ },
+ ["obj_ptr"]=828,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=736655,
+ ["str_ptr"]=2140812,
+ },
+ {
+ ["cs_count"]=41459,
+ ["dyn_used"]=813068,
+ ["elapsed_time"]=0.37400007247925,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=127932318,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1651",
+ ["attribute_list"]="553",
+ ["dir"]="5",
+ ["disc"]="89",
+ ["glue"]="1082",
+ ["glue_spec"]="433",
+ ["glyph"]="1426",
+ ["hlist"]="447",
+ ["if_stack"]="4",
+ ["kern"]="22",
+ ["local_par"]="67",
+ ["mark"]="12",
+ ["pdf_dest"]="3",
+ ["pdf_literal"]="106",
+ ["penalty"]="123",
+ ["rule"]="83",
+ ["temp"]="5",
+ ["vlist"]="108",
+ ["write"]="3",
+ },
+ ["obj_ptr"]=833,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=736687,
+ ["str_ptr"]=2140815,
+ },
+ {
+ ["cs_count"]=41460,
+ ["dyn_used"]=816799,
+ ["elapsed_time"]=0.40899991989136,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=128279622,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="952",
+ ["attribute_list"]="320",
+ ["dir"]="5",
+ ["disc"]="115",
+ ["glue"]="770",
+ ["glue_spec"]="356",
+ ["glyph"]="1725",
+ ["hlist"]="220",
+ ["if_stack"]="4",
+ ["kern"]="18",
+ ["local_par"]="46",
+ ["mark"]="16",
+ ["pdf_dest"]="4",
+ ["pdf_literal"]="134",
+ ["penalty"]="111",
+ ["rule"]="53",
+ ["temp"]="5",
+ ["vlist"]="77",
+ ["write"]="4",
+ },
+ ["obj_ptr"]=840,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=736726,
+ ["str_ptr"]=2140819,
+ },
+ {
+ ["cs_count"]=41461,
+ ["dyn_used"]=820922,
+ ["elapsed_time"]=0.46400022506714,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=128623111,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1126",
+ ["attribute_list"]="378",
+ ["dir"]="5",
+ ["disc"]="94",
+ ["glue"]="720",
+ ["glue_spec"]="331",
+ ["glyph"]="1336",
+ ["hlist"]="228",
+ ["if_stack"]="4",
+ ["kern"]="17",
+ ["local_par"]="46",
+ ["mark"]="28",
+ ["pdf_dest"]="7",
+ ["pdf_literal"]="112",
+ ["penalty"]="128",
+ ["rule"]="60",
+ ["temp"]="5",
+ ["vlist"]="80",
+ ["write"]="7",
+ },
+ ["obj_ptr"]=847,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=736772,
+ ["str_ptr"]=2140824,
+ },
+ {
+ ["cs_count"]=41462,
+ ["dyn_used"]=824544,
+ ["elapsed_time"]=0.39499998092651,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=128960331,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1090",
+ ["attribute_list"]="366",
+ ["dir"]="5",
+ ["disc"]="112",
+ ["glue"]="782",
+ ["glue_spec"]="331",
+ ["glyph"]="1502",
+ ["hlist"]="244",
+ ["if_stack"]="4",
+ ["kern"]="22",
+ ["local_par"]="47",
+ ["mark"]="20",
+ ["math"]="4",
+ ["pdf_annot"]="1",
+ ["pdf_dest"]="5",
+ ["pdf_literal"]="104",
+ ["penalty"]="122",
+ ["rule"]="52",
+ ["temp"]="5",
+ ["vlist"]="78",
+ ["write"]="7",
+ },
+ ["obj_ptr"]=856,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=736832,
+ ["str_ptr"]=2140831,
+ },
+ {
+ ["cs_count"]=41463,
+ ["dyn_used"]=828204,
+ ["elapsed_time"]=0.36999988555908,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=129287131,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="919",
+ ["attribute_list"]="309",
+ ["dir"]="5",
+ ["disc"]="130",
+ ["glue"]="720",
+ ["glue_spec"]="317",
+ ["glyph"]="1727",
+ ["hlist"]="219",
+ ["if_stack"]="4",
+ ["kern"]="22",
+ ["local_par"]="43",
+ ["mark"]="16",
+ ["pdf_annot"]="1",
+ ["pdf_dest"]="4",
+ ["pdf_literal"]="116",
+ ["penalty"]="94",
+ ["rule"]="38",
+ ["temp"]="5",
+ ["vlist"]="77",
+ ["write"]="4",
+ },
+ ["obj_ptr"]=864,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=736878,
+ ["str_ptr"]=2140836,
+ },
+ {
+ ["cs_count"]=41464,
+ ["dyn_used"]=832020,
+ ["elapsed_time"]=0.32999992370605,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=129587180,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="943",
+ ["attribute_list"]="317",
+ ["dir"]="5",
+ ["disc"]="72",
+ ["glue"]="764",
+ ["glue_spec"]="351",
+ ["glyph"]="1494",
+ ["hlist"]="300",
+ ["if_stack"]="4",
+ ["kern"]="15",
+ ["local_par"]="88",
+ ["mark"]="8",
+ ["pdf_annot"]="1",
+ ["pdf_dest"]="2",
+ ["pdf_literal"]="110",
+ ["penalty"]="177",
+ ["rule"]="85",
+ ["temp"]="6",
+ ["vlist"]="78",
+ ["write"]="2",
+ },
+ ["obj_ptr"]=869,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=736917,
+ ["str_ptr"]=2140840,
+ },
+ {
+ ["cs_count"]=41465,
+ ["dyn_used"]=835229,
+ ["elapsed_time"]=0.33800005912781,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=129859378,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="910",
+ ["attribute_list"]="306",
+ ["dir"]="5",
+ ["disc"]="61",
+ ["glue"]="737",
+ ["glue_spec"]="330",
+ ["glyph"]="1272",
+ ["hlist"]="283",
+ ["if_stack"]="4",
+ ["kern"]="12",
+ ["local_par"]="82",
+ ["mark"]="8",
+ ["pdf_dest"]="2",
+ ["pdf_literal"]="206",
+ ["penalty"]="170",
+ ["rule"]="81",
+ ["temp"]="5",
+ ["vlist"]="78",
+ ["write"]="3",
+ },
+ ["obj_ptr"]=873,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=736949,
+ ["str_ptr"]=2140843,
+ },
+ {
+ ["cs_count"]=41466,
+ ["dyn_used"]=841948,
+ ["elapsed_time"]=0.46399998664856,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=130648772,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="5530",
+ ["attribute_list"]="1846",
+ ["dir"]="5",
+ ["disc"]="204",
+ ["glue"]="3710",
+ ["glue_spec"]="1013",
+ ["glyph"]="3641",
+ ["hlist"]="1694",
+ ["if_stack"]="4",
+ ["kern"]="15",
+ ["local_par"]="149",
+ ["mark"]="20",
+ ["pdf_dest"]="5",
+ ["pdf_literal"]="132",
+ ["penalty"]="324",
+ ["rule"]="316",
+ ["temp"]="5",
+ ["vlist"]="185",
+ ["write"]="5",
+ },
+ ["obj_ptr"]=877,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=736981,
+ ["str_ptr"]=2140846,
+ },
+ {
+ ["cs_count"]=41467,
+ ["dyn_used"]=845101,
+ ["elapsed_time"]=0.28999996185303,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=130960656,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="5038",
+ ["attribute_list"]="1682",
+ ["dir"]="5",
+ ["disc"]="151",
+ ["glue"]="3331",
+ ["glue_spec"]="859",
+ ["glyph"]="2526",
+ ["hlist"]="1623",
+ ["if_stack"]="4",
+ ["kern"]="12",
+ ["local_par"]="123",
+ ["pdf_literal"]="76",
+ ["penalty"]="232",
+ ["rule"]="274",
+ ["temp"]="5",
+ ["vlist"]="180",
+ },
+ ["obj_ptr"]=884,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=737034,
+ ["str_ptr"]=2140852,
+ },
+ {
+ ["cs_count"]=41468,
+ ["dyn_used"]=848621,
+ ["elapsed_time"]=0.35899996757507,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=131761284,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="5527",
+ ["attribute_list"]="1845",
+ ["dir"]="5",
+ ["disc"]="161",
+ ["glue"]="3678",
+ ["glue_spec"]="1017",
+ ["glyph"]="3131",
+ ["hlist"]="1634",
+ ["if_stack"]="4",
+ ["kern"]="11",
+ ["local_par"]="105",
+ ["mark"]="4",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="84",
+ ["penalty"]="212",
+ ["rule"]="212",
+ ["temp"]="5",
+ ["vlist"]="161",
+ ["write"]="1",
+ },
+ ["obj_ptr"]=887,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=737052,
+ ["str_ptr"]=2140853,
+ },
+ {
+ ["cs_count"]=41469,
+ ["dyn_used"]=849754,
+ ["elapsed_time"]=0.39400005340576,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=132130516,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1645",
+ ["attribute_list"]="551",
+ ["dir"]="5",
+ ["disc"]="116",
+ ["glue"]="1119",
+ ["glue_spec"]="438",
+ ["glyph"]="1737",
+ ["hlist"]="414",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="55",
+ ["mark"]="16",
+ ["math"]="4",
+ ["pdf_annot"]="2",
+ ["pdf_dest"]="4",
+ ["pdf_literal"]="103",
+ ["penalty"]="131",
+ ["rule"]="69",
+ ["temp"]="5",
+ ["vlist"]="95",
+ ["write"]="5",
+ },
+ ["obj_ptr"]=893,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=737077,
+ ["str_ptr"]=2140855,
+ },
+ {
+ ["cs_count"]=41470,
+ ["dyn_used"]=853678,
+ ["elapsed_time"]=0.41499996185303,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=132462358,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="982",
+ ["attribute_list"]="330",
+ ["dir"]="5",
+ ["disc"]="90",
+ ["glue"]="745",
+ ["glue_spec"]="337",
+ ["glyph"]="1517",
+ ["hlist"]="229",
+ ["if_stack"]="13",
+ ["kern"]="17",
+ ["local_par"]="46",
+ ["mark"]="20",
+ ["pdf_annot"]="2",
+ ["pdf_dest"]="5",
+ ["pdf_literal"]="118",
+ ["penalty"]="105",
+ ["rule"]="44",
+ ["temp"]="5",
+ ["vlist"]="78",
+ ["write"]="5",
+ },
+ ["obj_ptr"]=900,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=737123,
+ ["str_ptr"]=2140860,
+ },
+ {
+ ["cs_count"]=41471,
+ ["dyn_used"]=857597,
+ ["elapsed_time"]=0.37800002098083,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=132859234,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1276",
+ ["attribute_list"]="428",
+ ["dir"]="5",
+ ["disc"]="106",
+ ["glue"]="946",
+ ["glue_spec"]="395",
+ ["glyph"]="1487",
+ ["hlist"]="339",
+ ["if_stack"]="5",
+ ["kern"]="11",
+ ["local_par"]="56",
+ ["mark"]="16",
+ ["pdf_dest"]="4",
+ ["pdf_literal"]="116",
+ ["penalty"]="119",
+ ["rule"]="66",
+ ["temp"]="5",
+ ["vlist"]="91",
+ ["write"]="4",
+ },
+ ["obj_ptr"]=906,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=737169,
+ ["str_ptr"]=2140865,
+ },
+ {
+ ["cs_count"]=41474,
+ ["dyn_used"]=860781,
+ ["elapsed_time"]=0.36199998855591,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=133233368,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1102",
+ ["attribute_list"]="370",
+ ["dir"]="5",
+ ["disc"]="168",
+ ["glue"]="896",
+ ["glue_spec"]="387",
+ ["glyph"]="2273",
+ ["hlist"]="234",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="42",
+ ["mark"]="8",
+ ["math"]="8",
+ ["pdf_dest"]="2",
+ ["pdf_literal"]="108",
+ ["penalty"]="183",
+ ["rule"]="53",
+ ["temp"]="5",
+ ["vlist"]="75",
+ ["write"]="3",
+ },
+ ["obj_ptr"]=912,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=737292,
+ ["str_ptr"]=2140873,
+ },
+ {
+ ["cs_count"]=41475,
+ ["dyn_used"]=866628,
+ ["elapsed_time"]=0.37199997901917,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=134104278,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="7012",
+ ["attribute_list"]="2340",
+ ["dir"]="5",
+ ["disc"]="221",
+ ["glue"]="4438",
+ ["glue_spec"]="1212",
+ ["glyph"]="2956",
+ ["hlist"]="2054",
+ ["if_stack"]="4",
+ ["kern"]="9",
+ ["local_par"]="98",
+ ["mark"]="4",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="114",
+ ["penalty"]="268",
+ ["rule"]="322",
+ ["temp"]="5",
+ ["vlist"]="191",
+ ["write"]="1",
+ },
+ ["obj_ptr"]=916,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=737324,
+ ["str_ptr"]=2140876,
+ },
+ {
+ ["cs_count"]=41476,
+ ["dyn_used"]=869091,
+ ["elapsed_time"]=0.33700013160706,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=134595522,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="4363",
+ ["attribute_list"]="1457",
+ ["dir"]="5",
+ ["disc"]="115",
+ ["glue"]="2712",
+ ["glue_spec"]="787",
+ ["glyph"]="1536",
+ ["hlist"]="1284",
+ ["if_stack"]="4",
+ ["kern"]="8",
+ ["local_par"]="86",
+ ["mark"]="4",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="80",
+ ["penalty"]="162",
+ ["rule"]="195",
+ ["temp"]="5",
+ ["vlist"]="171",
+ ["write"]="1",
+ },
+ ["obj_ptr"]=919,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=737349,
+ ["str_ptr"]=2140878,
+ },
+ {
+ ["cs_count"]=41477,
+ ["dyn_used"]=870902,
+ ["elapsed_time"]=0.35599994659424,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=135189419,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="2635",
+ ["attribute_list"]="881",
+ ["dir"]="5",
+ ["disc"]="146",
+ ["glue"]="1662",
+ ["glue_spec"]="581",
+ ["glyph"]="1685",
+ ["hlist"]="695",
+ ["if_stack"]="6",
+ ["kern"]="8",
+ ["local_par"]="69",
+ ["pdf_literal"]="154",
+ ["penalty"]="144",
+ ["rule"]="129",
+ ["temp"]="5",
+ ["vlist"]="133",
+ },
+ ["obj_ptr"]=924,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=737374,
+ ["str_ptr"]=2140880,
+ },
+ {
+ ["cs_count"]=41478,
+ ["dyn_used"]=875363,
+ ["elapsed_time"]=0.33500003814697,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=135664342,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="2305",
+ ["attribute_list"]="771",
+ ["dir"]="5",
+ ["disc"]="111",
+ ["glue"]="1604",
+ ["glue_spec"]="580",
+ ["glyph"]="1460",
+ ["hlist"]="669",
+ ["if_stack"]="4",
+ ["kern"]="10",
+ ["local_par"]="72",
+ ["mark"]="4",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="112",
+ ["penalty"]="130",
+ ["rule"]="101",
+ ["temp"]="5",
+ ["vlist"]="117",
+ ["write"]="1",
+ },
+ ["obj_ptr"]=927,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=737392,
+ ["str_ptr"]=2140881,
+ },
+ {
+ ["cs_count"]=41479,
+ ["dyn_used"]=878815,
+ ["elapsed_time"]=0.36800003051758,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=136268957,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="3247",
+ ["attribute_list"]="1085",
+ ["dir"]="5",
+ ["disc"]="78",
+ ["glue"]="1929",
+ ["glue_spec"]="624",
+ ["glyph"]="1122",
+ ["hlist"]="908",
+ ["if_stack"]="4",
+ ["kern"]="8",
+ ["local_par"]="77",
+ ["mark"]="8",
+ ["pdf_dest"]="2",
+ ["pdf_literal"]="82",
+ ["penalty"]="138",
+ ["rule"]="142",
+ ["temp"]="5",
+ ["vlist"]="152",
+ ["write"]="2",
+ },
+ ["obj_ptr"]=931,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=737417,
+ ["str_ptr"]=2140883,
+ },
+ {
+ ["cs_count"]=41480,
+ ["dyn_used"]=883293,
+ ["elapsed_time"]=0.34899997711182,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=136939672,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="5944",
+ ["attribute_list"]="1984",
+ ["dir"]="5",
+ ["disc"]="148",
+ ["glue"]="3581",
+ ["glue_spec"]="978",
+ ["glyph"]="1901",
+ ["hlist"]="1712",
+ ["if_stack"]="4",
+ ["kern"]="8",
+ ["local_par"]="74",
+ ["mark"]="8",
+ ["pdf_dest"]="2",
+ ["pdf_literal"]="82",
+ ["penalty"]="183",
+ ["rule"]="262",
+ ["temp"]="5",
+ ["vlist"]="178",
+ ["write"]="2",
+ },
+ ["obj_ptr"]=935,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=737442,
+ ["str_ptr"]=2140885,
+ },
+ {
+ ["cs_count"]=41481,
+ ["dyn_used"]=885856,
+ ["elapsed_time"]=0.34500002861023,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=137513788,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="4252",
+ ["attribute_list"]="1420",
+ ["dir"]="5",
+ ["disc"]="129",
+ ["glue"]="2513",
+ ["glue_spec"]="749",
+ ["glyph"]="1358",
+ ["hlist"]="1225",
+ ["if_stack"]="4",
+ ["kern"]="8",
+ ["local_par"]="85",
+ ["mark"]="4",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="94",
+ ["penalty"]="172",
+ ["rule"]="214",
+ ["temp"]="5",
+ ["vlist"]="175",
+ ["write"]="1",
+ },
+ ["obj_ptr"]=940,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=737474,
+ ["str_ptr"]=2140888,
+ },
+ {
+ ["cs_count"]=41482,
+ ["dyn_used"]=888414,
+ ["elapsed_time"]=0.3510000705719,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=137926074,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="2452",
+ ["attribute_list"]="820",
+ ["dir"]="5",
+ ["disc"]="68",
+ ["glue"]="1387",
+ ["glue_spec"]="483",
+ ["glyph"]="869",
+ ["hlist"]="662",
+ ["if_stack"]="6",
+ ["kern"]="8",
+ ["local_par"]="62",
+ ["mark"]="8",
+ ["pdf_dest"]="2",
+ ["pdf_literal"]="80",
+ ["penalty"]="106",
+ ["rule"]="111",
+ ["temp"]="5",
+ ["vlist"]="139",
+ ["write"]="2",
+ },
+ ["obj_ptr"]=944,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=737499,
+ ["str_ptr"]=2140890,
+ },
+ {
+ ["cs_count"]=41483,
+ ["dyn_used"]=892001,
+ ["elapsed_time"]=0.38099980354309,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=138453307,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="2485",
+ ["attribute_list"]="831",
+ ["dir"]="5",
+ ["disc"]="68",
+ ["glue"]="1424",
+ ["glue_spec"]="520",
+ ["glyph"]="961",
+ ["hlist"]="653",
+ ["if_stack"]="13",
+ ["kern"]="8",
+ ["local_par"]="68",
+ ["mark"]="12",
+ ["pdf_dest"]="3",
+ ["pdf_literal"]="82",
+ ["penalty"]="118",
+ ["rule"]="101",
+ ["temp"]="5",
+ ["vlist"]="130",
+ ["write"]="3",
+ },
+ ["obj_ptr"]=951,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=737531,
+ ["str_ptr"]=2140893,
+ },
+ {
+ ["cs_count"]=41484,
+ ["dyn_used"]=896517,
+ ["elapsed_time"]=0.38700008392334,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=139012185,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="2863",
+ ["attribute_list"]="957",
+ ["dir"]="5",
+ ["disc"]="98",
+ ["glue"]="1643",
+ ["glue_spec"]="595",
+ ["glyph"]="1168",
+ ["hlist"]="729",
+ ["if_stack"]="4",
+ ["kern"]="12",
+ ["local_par"]="74",
+ ["mark"]="16",
+ ["pdf_dest"]="4",
+ ["pdf_literal"]="94",
+ ["penalty"]="159",
+ ["rule"]="130",
+ ["temp"]="5",
+ ["vlist"]="132",
+ ["write"]="4",
+ },
+ ["obj_ptr"]=956,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=737563,
+ ["str_ptr"]=2140896,
+ },
+ {
+ ["cs_count"]=41485,
+ ["dyn_used"]=899100,
+ ["elapsed_time"]=0.32999992370605,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=139390157,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1792",
+ ["attribute_list"]="600",
+ ["dir"]="5",
+ ["disc"]="104",
+ ["glue"]="1113",
+ ["glue_spec"]="420",
+ ["glyph"]="1323",
+ ["hlist"]="462",
+ ["if_stack"]="4",
+ ["kern"]="18",
+ ["local_par"]="60",
+ ["mark"]="4",
+ ["pdf_annot"]="1",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="97",
+ ["penalty"]="96",
+ ["rule"]="65",
+ ["temp"]="5",
+ ["vlist"]="104",
+ ["write"]="1",
+ },
+ ["obj_ptr"]=964,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=737609,
+ ["str_ptr"]=2140901,
+ },
+ {
+ ["cs_count"]=41486,
+ ["dyn_used"]=902789,
+ ["elapsed_time"]=0.29700016975403,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=139662413,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="925",
+ ["attribute_list"]="311",
+ ["dir"]="5",
+ ["disc"]="80",
+ ["glue"]="611",
+ ["glue_spec"]="287",
+ ["glyph"]="1442",
+ ["hlist"]="196",
+ ["if_stack"]="11",
+ ["kern"]="22",
+ ["local_par"]="35",
+ ["pdf_annot"]="3",
+ ["pdf_literal"]="126",
+ ["penalty"]="69",
+ ["rule"]="28",
+ ["temp"]="5",
+ ["vlist"]="73",
+ },
+ ["obj_ptr"]=969,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=737634,
+ ["str_ptr"]=2140903,
+ },
+ {
+ ["cs_count"]=41487,
+ ["dyn_used"]=905908,
+ ["elapsed_time"]=0.27999997138977,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=139744815,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="661",
+ ["attribute_list"]="223",
+ ["dir"]="5",
+ ["disc"]="1",
+ ["glue"]="271",
+ ["glue_spec"]="158",
+ ["glyph"]="3",
+ ["hlist"]="136",
+ ["if_stack"]="13",
+ ["kern"]="6",
+ ["local_par"]="17",
+ ["pdf_literal"]="76",
+ ["penalty"]="16",
+ ["rule"]="7",
+ ["temp"]="5",
+ ["vlist"]="73",
+ },
+ ["obj_ptr"]=972,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=737652,
+ ["str_ptr"]=2140904,
+ },
+ {
+ ["cs_count"]=41494,
+ ["dyn_used"]=910047,
+ ["elapsed_time"]=0.35500001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=140188975,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1315",
+ ["attribute_list"]="441",
+ ["dir"]="5",
+ ["disc"]="221",
+ ["glue"]="958",
+ ["glue_spec"]="353",
+ ["glyph"]="2865",
+ ["hlist"]="231",
+ ["if_stack"]="4",
+ ["kern"]="40",
+ ["local_par"]="36",
+ ["mark"]="8",
+ ["math"]="10",
+ ["pdf_annot"]="1",
+ ["pdf_dest"]="4",
+ ["pdf_literal"]="100",
+ ["penalty"]="133",
+ ["rule"]="65",
+ ["temp"]="6",
+ ["vlist"]="75",
+ ["write"]="5",
+ },
+ ["obj_ptr"]=976,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=737792,
+ ["str_ptr"]=2140911,
+ },
+ {
+ ["cs_count"]=41495,
+ ["dyn_used"]=913207,
+ ["elapsed_time"]=0.34899997711182,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=140638848,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1447",
+ ["attribute_list"]="485",
+ ["dir"]="5",
+ ["disc"]="233",
+ ["glue"]="1063",
+ ["glue_spec"]="376",
+ ["glyph"]="3250",
+ ["hlist"]="237",
+ ["if_stack"]="4",
+ ["kern"]="47",
+ ["local_par"]="37",
+ ["mark"]="4",
+ ["math"]="14",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="86",
+ ["penalty"]="138",
+ ["rule"]="67",
+ ["temp"]="5",
+ ["vlist"]="74",
+ ["write"]="4",
+ },
+ ["obj_ptr"]=983,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=737847,
+ ["str_ptr"]=2140916,
+ },
+ {
+ ["cs_count"]=41496,
+ ["dyn_used"]=916905,
+ ["elapsed_time"]=0.34800004959106,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=141052611,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1111",
+ ["attribute_list"]="373",
+ ["dir"]="5",
+ ["disc"]="236",
+ ["glue"]="963",
+ ["glue_spec"]="295",
+ ["glyph"]="3193",
+ ["hlist"]="215",
+ ["if_stack"]="4",
+ ["kern"]="23",
+ ["local_par"]="31",
+ ["mark"]="4",
+ ["pdf_dest"]="2",
+ ["pdf_literal"]="94",
+ ["penalty"]="89",
+ ["rule"]="32",
+ ["temp"]="5",
+ ["vlist"]="74",
+ ["write"]="3",
+ },
+ ["obj_ptr"]=986,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=737872,
+ ["str_ptr"]=2140918,
+ },
+ {
+ ["cs_count"]=41497,
+ ["dyn_used"]=920257,
+ ["elapsed_time"]=0.34899997711182,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=141504020,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1360",
+ ["attribute_list"]="456",
+ ["dir"]="5",
+ ["disc"]="228",
+ ["glue"]="1089",
+ ["glue_spec"]="321",
+ ["glyph"]="3312",
+ ["hlist"]="269",
+ ["if_stack"]="4",
+ ["kern"]="38",
+ ["local_par"]="31",
+ ["mark"]="4",
+ ["math"]="14",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="96",
+ ["penalty"]="95",
+ ["rule"]="40",
+ ["temp"]="5",
+ ["vlist"]="74",
+ ["write"]="2",
+ },
+ ["obj_ptr"]=990,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=737915,
+ ["str_ptr"]=2140921,
+ },
+ {
+ ["cs_count"]=41498,
+ ["dyn_used"]=923810,
+ ["elapsed_time"]=0.33499979972839,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=141930871,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1174",
+ ["attribute_list"]="394",
+ ["dir"]="5",
+ ["disc"]="216",
+ ["glue"]="1030",
+ ["glue_spec"]="340",
+ ["glyph"]="3249",
+ ["hlist"]="202",
+ ["if_stack"]="4",
+ ["kern"]="32",
+ ["local_par"]="30",
+ ["mark"]="4",
+ ["math"]="2",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="88",
+ ["penalty"]="112",
+ ["rule"]="53",
+ ["temp"]="5",
+ ["vlist"]="74",
+ ["write"]="2",
+ },
+ ["obj_ptr"]=993,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=737940,
+ ["str_ptr"]=2140923,
+ },
+ {
+ ["cs_count"]=41499,
+ ["dyn_used"]=927318,
+ ["elapsed_time"]=0.33800005912781,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=142270969,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1111",
+ ["attribute_list"]="373",
+ ["dir"]="5",
+ ["disc"]="123",
+ ["glue"]="786",
+ ["glue_spec"]="310",
+ ["glyph"]="1697",
+ ["hlist"]="234",
+ ["if_stack"]="11",
+ ["kern"]="23",
+ ["local_par"]="32",
+ ["mark"]="4",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="118",
+ ["penalty"]="75",
+ ["rule"]="41",
+ ["temp"]="5",
+ ["vlist"]="74",
+ ["write"]="1",
+ },
+ ["obj_ptr"]=996,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=737965,
+ ["str_ptr"]=2140925,
+ },
+ {
+ ["cs_count"]=41502,
+ ["dyn_used"]=931624,
+ ["elapsed_time"]=0.37100005149841,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=143143290,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="4210",
+ ["attribute_list"]="1406",
+ ["dir"]="5",
+ ["disc"]="132",
+ ["glue"]="2754",
+ ["glue_spec"]="765",
+ ["glyph"]="2078",
+ ["hlist"]="1102",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="68",
+ ["mark"]="4",
+ ["pdf_dest"]="2",
+ ["pdf_literal"]="94",
+ ["penalty"]="149",
+ ["rule"]="133",
+ ["temp"]="5",
+ ["vlist"]="119",
+ ["write"]="2",
+ },
+ ["obj_ptr"]=999,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=738016,
+ ["str_ptr"]=2140929,
+ },
+ {
+ ["cs_count"]=41503,
+ ["dyn_used"]=934426,
+ ["elapsed_time"]=0.30999994277954,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=143495493,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1678",
+ ["attribute_list"]="562",
+ ["dir"]="5",
+ ["disc"]="86",
+ ["glue"]="1160",
+ ["glue_spec"]="406",
+ ["glyph"]="1320",
+ ["hlist"]="402",
+ ["if_stack"]="5",
+ ["kern"]="14",
+ ["local_par"]="35",
+ ["pdf_literal"]="112",
+ ["penalty"]="95",
+ ["rule"]="69",
+ ["temp"]="5",
+ ["vlist"]="73",
+ },
+ ["obj_ptr"]=1004,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=738046,
+ ["str_ptr"]=2140932,
+ },
+ {
+ ["cs_count"]=41504,
+ ["dyn_used"]=937322,
+ ["elapsed_time"]=0.31900000572205,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=144075038,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="2260",
+ ["attribute_list"]="756",
+ ["dir"]="5",
+ ["disc"]="115",
+ ["glue"]="1600",
+ ["glue_spec"]="572",
+ ["glyph"]="1700",
+ ["hlist"]="580",
+ ["if_stack"]="4",
+ ["kern"]="13",
+ ["local_par"]="66",
+ ["pdf_literal"]="130",
+ ["penalty"]="116",
+ ["rule"]="81",
+ ["temp"]="5",
+ ["vlist"]="101",
+ },
+ ["obj_ptr"]=1007,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=738064,
+ ["str_ptr"]=2140933,
+ },
+ {
+ ["cs_count"]=41505,
+ ["dyn_used"]=940863,
+ ["elapsed_time"]=0.35500001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=144644135,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="2233",
+ ["attribute_list"]="747",
+ ["dir"]="5",
+ ["disc"]="165",
+ ["glue"]="1470",
+ ["glue_spec"]="483",
+ ["glyph"]="2040",
+ ["hlist"]="488",
+ ["if_stack"]="4",
+ ["kern"]="22",
+ ["local_par"]="43",
+ ["mark"]="4",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="118",
+ ["penalty"]="147",
+ ["rule"]="106",
+ ["temp"]="5",
+ ["vlist"]="90",
+ ["write"]="1",
+ },
+ ["obj_ptr"]=1010,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=738082,
+ ["str_ptr"]=2140934,
+ },
+ {
+ ["cs_count"]=41506,
+ ["dyn_used"]=944343,
+ ["elapsed_time"]=0.32400012016296,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=145062172,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1726",
+ ["attribute_list"]="578",
+ ["dir"]="5",
+ ["disc"]="129",
+ ["glue"]="1118",
+ ["glue_spec"]="375",
+ ["glyph"]="1914",
+ ["hlist"]="387",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="59",
+ ["mark"]="4",
+ ["math"]="6",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="106",
+ ["penalty"]="124",
+ ["rule"]="70",
+ ["temp"]="6",
+ ["vlist"]="98",
+ ["write"]="2",
+ },
+ ["obj_ptr"]=1013,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=738100,
+ ["str_ptr"]=2140935,
+ },
+ {
+ ["cs_count"]=41507,
+ ["dyn_used"]=947881,
+ ["elapsed_time"]=0.33899998664856,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=145457464,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1318",
+ ["attribute_list"]="442",
+ ["dir"]="5",
+ ["disc"]="182",
+ ["glue"]="1046",
+ ["glue_spec"]="354",
+ ["glyph"]="2664",
+ ["hlist"]="244",
+ ["if_stack"]="4",
+ ["kern"]="20",
+ ["local_par"]="40",
+ ["mark"]="4",
+ ["math"]="6",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="131",
+ ["penalty"]="121",
+ ["rule"]="55",
+ ["temp"]="5",
+ ["vlist"]="78",
+ ["write"]="2",
+ },
+ ["obj_ptr"]=1016,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=738125,
+ ["str_ptr"]=2140937,
+ },
+ {
+ ["cs_count"]=41508,
+ ["dyn_used"]=951190,
+ ["elapsed_time"]=0.3199999332428,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=145953672,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1882",
+ ["attribute_list"]="630",
+ ["dir"]="5",
+ ["disc"]="138",
+ ["glue"]="1465",
+ ["glue_spec"]="586",
+ ["glyph"]="2031",
+ ["hlist"]="471",
+ ["if_stack"]="4",
+ ["kern"]="13",
+ ["local_par"]="62",
+ ["math"]="2",
+ ["pdf_literal"]="116",
+ ["penalty"]="118",
+ ["rule"]="76",
+ ["temp"]="5",
+ ["vlist"]="99",
+ },
+ ["obj_ptr"]=1019,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=738150,
+ ["str_ptr"]=2140939,
+ },
+ {
+ ["cs_count"]=41509,
+ ["dyn_used"]=955295,
+ ["elapsed_time"]=0.34800004959106,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=146286284,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1081",
+ ["attribute_list"]="363",
+ ["dir"]="5",
+ ["disc"]="97",
+ ["glue"]="924",
+ ["glue_spec"]="523",
+ ["glyph"]="1631",
+ ["hlist"]="216",
+ ["if_stack"]="6",
+ ["kern"]="17",
+ ["local_par"]="49",
+ ["mark"]="8",
+ ["pdf_dest"]="2",
+ ["pdf_literal"]="138",
+ ["penalty"]="115",
+ ["rule"]="57",
+ ["temp"]="5",
+ ["vlist"]="75",
+ ["write"]="2",
+ },
+ ["obj_ptr"]=1023,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=738168,
+ ["str_ptr"]=2140940,
+ },
+ {
+ ["cs_count"]=41510,
+ ["dyn_used"]=958236,
+ ["elapsed_time"]=0.28099989891052,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=146388676,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="763",
+ ["attribute_list"]="257",
+ ["dir"]="5",
+ ["disc"]="4",
+ ["glue"]="331",
+ ["glue_spec"]="200",
+ ["glyph"]="146",
+ ["hlist"]="147",
+ ["if_stack"]="11",
+ ["kern"]="6",
+ ["local_par"]="23",
+ ["pdf_literal"]="91",
+ ["penalty"]="28",
+ ["rule"]="14",
+ ["temp"]="5",
+ ["vlist"]="73",
+ },
+ ["obj_ptr"]=1027,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=738200,
+ ["str_ptr"]=2140943,
+ },
+ {
+ ["cs_count"]=41511,
+ ["dyn_used"]=961511,
+ ["elapsed_time"]=0.27900004386902,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=146470886,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="739",
+ ["attribute_list"]="249",
+ ["dir"]="5",
+ ["disc"]="1",
+ ["glue"]="271",
+ ["glue_spec"]="158",
+ ["glyph"]="3",
+ ["hlist"]="136",
+ ["if_stack"]="13",
+ ["kern"]="6",
+ ["local_par"]="17",
+ ["pdf_literal"]="76",
+ ["penalty"]="16",
+ ["rule"]="7",
+ ["temp"]="5",
+ ["vlist"]="73",
+ },
+ ["obj_ptr"]=1030,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=738218,
+ ["str_ptr"]=2140944,
+ },
+ {
+ ["cs_count"]=41512,
+ ["dyn_used"]=965741,
+ ["elapsed_time"]=0.45000004768372,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=146973690,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1846",
+ ["attribute_list"]="618",
+ ["dir"]="5",
+ ["disc"]="134",
+ ["glue"]="1037",
+ ["glue_spec"]="452",
+ ["glyph"]="2136",
+ ["hlist"]="307",
+ ["if_stack"]="4",
+ ["kern"]="11",
+ ["local_par"]="40",
+ ["mark"]="20",
+ ["math"]="2",
+ ["pdf_dest"]="6",
+ ["pdf_literal"]="202",
+ ["penalty"]="162",
+ ["rule"]="107",
+ ["temp"]="5",
+ ["vlist"]="90",
+ ["write"]="6",
+ },
+ ["obj_ptr"]=1033,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=738236,
+ ["str_ptr"]=2140945,
+ },
+ {
+ ["cs_count"]=41513,
+ ["dyn_used"]=969078,
+ ["elapsed_time"]=0.37400007247925,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=147480349,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="2236",
+ ["attribute_list"]="748",
+ ["dir"]="5",
+ ["disc"]="121",
+ ["glue"]="1318",
+ ["glue_spec"]="476",
+ ["glyph"]="1677",
+ ["hlist"]="509",
+ ["if_stack"]="4",
+ ["kern"]="8",
+ ["local_par"]="61",
+ ["mark"]="12",
+ ["pdf_dest"]="3",
+ ["pdf_literal"]="114",
+ ["penalty"]="137",
+ ["rule"]="98",
+ ["temp"]="5",
+ ["vlist"]="112",
+ ["write"]="3",
+ },
+ ["obj_ptr"]=1040,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=738287,
+ ["str_ptr"]=2140951,
+ },
+ {
+ ["cs_count"]=41514,
+ ["dyn_used"]=972823,
+ ["elapsed_time"]=0.42499995231628,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=148062471,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="2518",
+ ["attribute_list"]="842",
+ ["dir"]="5",
+ ["disc"]="99",
+ ["glue"]="1407",
+ ["glue_spec"]="531",
+ ["glyph"]="1527",
+ ["hlist"]="568",
+ ["if_stack"]="6",
+ ["kern"]="8",
+ ["local_par"]="67",
+ ["mark"]="16",
+ ["math"]="2",
+ ["pdf_dest"]="4",
+ ["pdf_literal"]="138",
+ ["penalty"]="158",
+ ["rule"]="123",
+ ["temp"]="5",
+ ["vlist"]="119",
+ ["write"]="4",
+ },
+ ["obj_ptr"]=1045,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=738326,
+ ["str_ptr"]=2140955,
+ },
+ {
+ ["cs_count"]=41515,
+ ["dyn_used"]=976536,
+ ["elapsed_time"]=0.41599988937378,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=148636623,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="2674",
+ ["attribute_list"]="894",
+ ["dir"]="5",
+ ["disc"]="62",
+ ["glue"]="1374",
+ ["glue_spec"]="543",
+ ["glyph"]="992",
+ ["hlist"]="605",
+ ["if_stack"]="6",
+ ["kern"]="7",
+ ["local_par"]="71",
+ ["mark"]="20",
+ ["pdf_dest"]="5",
+ ["pdf_literal"]="136",
+ ["penalty"]="154",
+ ["rule"]="117",
+ ["temp"]="5",
+ ["vlist"]="124",
+ ["write"]="5",
+ },
+ ["obj_ptr"]=1052,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=738365,
+ ["str_ptr"]=2140959,
+ },
+ {
+ ["cs_count"]=41517,
+ ["dyn_used"]=981367,
+ ["elapsed_time"]=0.4300000667572,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=149270358,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="3916",
+ ["attribute_list"]="1308",
+ ["dir"]="5",
+ ["disc"]="78",
+ ["glue"]="2266",
+ ["glue_spec"]="718",
+ ["glyph"]="1246",
+ ["hlist"]="1028",
+ ["if_stack"]="4",
+ ["kern"]="8",
+ ["local_par"]="74",
+ ["mark"]="20",
+ ["pdf_dest"]="6",
+ ["pdf_literal"]="135",
+ ["penalty"]="188",
+ ["rule"]="189",
+ ["temp"]="5",
+ ["vlist"]="139",
+ ["write"]="6",
+ },
+ ["obj_ptr"]=1059,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=738416,
+ ["str_ptr"]=2140965,
+ },
+ {
+ ["cs_count"]=41518,
+ ["dyn_used"]=984842,
+ ["elapsed_time"]=0.39299988746643,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=149732033,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="3226",
+ ["attribute_list"]="1078",
+ ["dir"]="5",
+ ["disc"]="56",
+ ["glue"]="1848",
+ ["glue_spec"]="604",
+ ["glyph"]="1325",
+ ["hlist"]="824",
+ ["if_stack"]="4",
+ ["kern"]="8",
+ ["local_par"]="59",
+ ["mark"]="12",
+ ["pdf_annot"]="1",
+ ["pdf_dest"]="3",
+ ["pdf_literal"]="158",
+ ["penalty"]="163",
+ ["rule"]="165",
+ ["temp"]="5",
+ ["vlist"]="125",
+ ["write"]="3",
+ },
+ ["obj_ptr"]=1070,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=738479,
+ ["str_ptr"]=2140972,
+ },
+ {
+ ["cs_count"]=41519,
+ ["dyn_used"]=988835,
+ ["elapsed_time"]=0.43099999427795,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=150263291,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="3634",
+ ["attribute_list"]="1214",
+ ["dir"]="5",
+ ["disc"]="68",
+ ["glue"]="1907",
+ ["glue_spec"]="670",
+ ["glyph"]="1353",
+ ["hlist"]="867",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="79",
+ ["mark"]="24",
+ ["pdf_dest"]="6",
+ ["pdf_literal"]="135",
+ ["penalty"]="180",
+ ["rule"]="157",
+ ["temp"]="5",
+ ["vlist"]="131",
+ ["write"]="6",
+ },
+ ["obj_ptr"]=1074,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=738511,
+ ["str_ptr"]=2140975,
+ },
+ {
+ ["cs_count"]=41520,
+ ["dyn_used"]=992261,
+ ["elapsed_time"]=0.41500020027161,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=150789384,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="3511",
+ ["attribute_list"]="1173",
+ ["dir"]="5",
+ ["disc"]="71",
+ ["glue"]="1847",
+ ["glue_spec"]="640",
+ ["glyph"]="1129",
+ ["hlist"]="849",
+ ["if_stack"]="4",
+ ["kern"]="7",
+ ["local_par"]="76",
+ ["mark"]="16",
+ ["pdf_dest"]="4",
+ ["pdf_literal"]="128",
+ ["penalty"]="161",
+ ["rule"]="150",
+ ["temp"]="5",
+ ["vlist"]="135",
+ ["write"]="4",
+ },
+ ["obj_ptr"]=1083,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=738571,
+ ["str_ptr"]=2140982,
+ },
+ {
+ ["cs_count"]=41521,
+ ["dyn_used"]=995109,
+ ["elapsed_time"]=0.41299986839294,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=151331971,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="3088",
+ ["attribute_list"]="1032",
+ ["dir"]="5",
+ ["disc"]="67",
+ ["glue"]="1531",
+ ["glue_spec"]="552",
+ ["glyph"]="1004",
+ ["hlist"]="693",
+ ["if_stack"]="6",
+ ["kern"]="10",
+ ["local_par"]="65",
+ ["mark"]="16",
+ ["pdf_dest"]="4",
+ ["pdf_literal"]="130",
+ ["penalty"]="143",
+ ["rule"]="131",
+ ["temp"]="5",
+ ["vlist"]="128",
+ ["write"]="4",
+ },
+ ["obj_ptr"]=1090,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=738617,
+ ["str_ptr"]=2140987,
+ },
+ {
+ ["cs_count"]=41522,
+ ["dyn_used"]=998872,
+ ["elapsed_time"]=0.42300009727478,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=151944294,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="3316",
+ ["attribute_list"]="1108",
+ ["dir"]="5",
+ ["disc"]="55",
+ ["glue"]="1665",
+ ["glue_spec"]="611",
+ ["glyph"]="1086",
+ ["hlist"]="755",
+ ["if_stack"]="6",
+ ["kern"]="6",
+ ["local_par"]="73",
+ ["mark"]="20",
+ ["pdf_dest"]="5",
+ ["pdf_literal"]="140",
+ ["penalty"]="164",
+ ["rule"]="148",
+ ["temp"]="5",
+ ["vlist"]="135",
+ ["write"]="5",
+ },
+ ["obj_ptr"]=1097,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=738656,
+ ["str_ptr"]=2140991,
+ },
+ {
+ ["cs_count"]=41523,
+ ["dyn_used"]=1003492,
+ ["elapsed_time"]=0.42899990081787,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=152437417,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="3145",
+ ["attribute_list"]="1051",
+ ["dir"]="5",
+ ["disc"]="43",
+ ["glue"]="1553",
+ ["glue_spec"]="587",
+ ["glyph"]="862",
+ ["hlist"]="712",
+ ["if_stack"]="4",
+ ["kern"]="6",
+ ["local_par"]="72",
+ ["mark"]="24",
+ ["pdf_dest"]="6",
+ ["pdf_literal"]="118",
+ ["penalty"]="156",
+ ["rule"]="129",
+ ["temp"]="5",
+ ["vlist"]="125",
+ ["write"]="6",
+ },
+ ["obj_ptr"]=1104,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=738702,
+ ["str_ptr"]=2140996,
+ },
+ {
+ ["cs_count"]=41524,
+ ["dyn_used"]=1007188,
+ ["elapsed_time"]=0.37199997901917,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=152871890,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="3136",
+ ["attribute_list"]="1048",
+ ["dir"]="5",
+ ["disc"]="58",
+ ["glue"]="1633",
+ ["glue_spec"]="568",
+ ["glyph"]="1104",
+ ["hlist"]="713",
+ ["if_stack"]="4",
+ ["kern"]="8",
+ ["local_par"]="62",
+ ["mark"]="16",
+ ["pdf_dest"]="4",
+ ["pdf_literal"]="112",
+ ["penalty"]="134",
+ ["rule"]="114",
+ ["temp"]="5",
+ ["vlist"]="125",
+ ["write"]="4",
+ },
+ ["obj_ptr"]=1112,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=738756,
+ ["str_ptr"]=2141002,
+ },
+ {
+ ["cs_count"]=41525,
+ ["dyn_used"]=1009435,
+ ["elapsed_time"]=0.28299999237061,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=152983419,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1549",
+ ["attribute_list"]="519",
+ ["dir"]="5",
+ ["disc"]="13",
+ ["glue"]="631",
+ ["glue_spec"]="243",
+ ["glyph"]="240",
+ ["hlist"]="290",
+ ["if_stack"]="11",
+ ["kern"]="6",
+ ["local_par"]="22",
+ ["pdf_literal"]="76",
+ ["penalty"]="33",
+ ["rule"]="31",
+ ["temp"]="5",
+ ["vlist"]="86",
+ },
+ ["obj_ptr"]=1119,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=738803,
+ ["str_ptr"]=2141007,
+ },
+ {
+ ["cs_count"]=41526,
+ ["dyn_used"]=1012656,
+ ["elapsed_time"]=0.27500009536743,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=153066820,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1243",
+ ["attribute_list"]="417",
+ ["dir"]="5",
+ ["disc"]="5",
+ ["glue"]="430",
+ ["glue_spec"]="192",
+ ["glyph"]="67",
+ ["hlist"]="209",
+ ["if_stack"]="13",
+ ["kern"]="6",
+ ["local_par"]="17",
+ ["pdf_literal"]="76",
+ ["penalty"]="22",
+ ["rule"]="19",
+ ["temp"]="5",
+ ["vlist"]="74",
+ },
+ ["obj_ptr"]=1122,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=738822,
+ ["str_ptr"]=2141008,
+ },
+ {
+ ["cs_count"]=41527,
+ ["dyn_used"]=1017413,
+ ["elapsed_time"]=0.3970000743866,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=153451805,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1993",
+ ["attribute_list"]="667",
+ ["dir"]="5",
+ ["disc"]="131",
+ ["glue"]="954",
+ ["glue_spec"]="374",
+ ["glyph"]="1742",
+ ["hlist"]="341",
+ ["if_stack"]="8",
+ ["kern"]="32",
+ ["local_par"]="43",
+ ["mark"]="16",
+ ["math"]="32",
+ ["pdf_annot"]="2",
+ ["pdf_dest"]="4",
+ ["pdf_literal"]="108",
+ ["penalty"]="149",
+ ["rule"]="62",
+ ["temp"]="5",
+ ["vlist"]="78",
+ ["write"]="6",
+ },
+ ["obj_ptr"]=1127,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=738841,
+ ["str_ptr"]=2141009,
+ },
+ {
+ ["cs_count"]=41528,
+ ["dyn_used"]=1020334,
+ ["elapsed_time"]=0.3989999294281,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=153884840,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1990",
+ ["attribute_list"]="666",
+ ["dir"]="5",
+ ["disc"]="94",
+ ["glue"]="1056",
+ ["glue_spec"]="379",
+ ["glyph"]="1945",
+ ["hlist"]="399",
+ ["if_stack"]="17",
+ ["kern"]="6",
+ ["local_par"]="71",
+ ["mark"]="8",
+ ["math"]="30",
+ ["pdf_dest"]="2",
+ ["pdf_literal"]="164",
+ ["penalty"]="192",
+ ["rule"]="87",
+ ["temp"]="5",
+ ["vlist"]="92",
+ ["write"]="4",
+ },
+ ["obj_ptr"]=1134,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=738888,
+ ["str_ptr"]=2141014,
+ },
+ {
+ ["cs_count"]=41529,
+ ["dyn_used"]=1023585,
+ ["elapsed_time"]=0.29499983787537,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=154052994,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1462",
+ ["attribute_list"]="490",
+ ["dir"]="5",
+ ["disc"]="35",
+ ["glue"]="620",
+ ["glue_spec"]="253",
+ ["glyph"]="590",
+ ["hlist"]="251",
+ ["if_stack"]="11",
+ ["kern"]="6",
+ ["local_par"]="28",
+ ["mark"]="4",
+ ["math"]="10",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="100",
+ ["penalty"]="72",
+ ["rule"]="38",
+ ["temp"]="5",
+ ["vlist"]="75",
+ ["write"]="2",
+ },
+ ["obj_ptr"]=1137,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=738914,
+ ["str_ptr"]=2141016,
+ },
+ {
+ ["cs_count"]=41530,
+ ["dyn_used"]=1026882,
+ ["elapsed_time"]=0.27300000190735,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=154136429,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1243",
+ ["attribute_list"]="417",
+ ["dir"]="5",
+ ["disc"]="5",
+ ["glue"]="430",
+ ["glue_spec"]="192",
+ ["glyph"]="68",
+ ["hlist"]="209",
+ ["if_stack"]="13",
+ ["kern"]="6",
+ ["local_par"]="17",
+ ["pdf_literal"]="76",
+ ["penalty"]="22",
+ ["rule"]="19",
+ ["temp"]="5",
+ ["vlist"]="74",
+ },
+ ["obj_ptr"]=1140,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=738940,
+ ["str_ptr"]=2141018,
+ },
+ {
+ ["cs_count"]=41531,
+ ["dyn_used"]=1030646,
+ ["elapsed_time"]=0.40400004386902,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=154546166,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1972",
+ ["attribute_list"]="660",
+ ["dir"]="5",
+ ["disc"]="141",
+ ["glue"]="1041",
+ ["glue_spec"]="353",
+ ["glyph"]="2014",
+ ["hlist"]="344",
+ ["if_stack"]="4",
+ ["kern"]="12",
+ ["local_par"]="36",
+ ["mark"]="16",
+ ["pdf_dest"]="4",
+ ["pdf_literal"]="112",
+ ["penalty"]="109",
+ ["rule"]="67",
+ ["temp"]="6",
+ ["vlist"]="78",
+ ["write"]="4",
+ },
+ ["obj_ptr"]=1143,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=738959,
+ ["str_ptr"]=2141019,
+ },
+ {
+ ["cs_count"]=41532,
+ ["dyn_used"]=1034402,
+ ["elapsed_time"]=0.36100006103516,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=154821399,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1510",
+ ["attribute_list"]="506",
+ ["dir"]="5",
+ ["disc"]="94",
+ ["glue"]="793",
+ ["glue_spec"]="276",
+ ["glyph"]="1460",
+ ["hlist"]="255",
+ ["if_stack"]="11",
+ ["kern"]="6",
+ ["local_par"]="30",
+ ["mark"]="12",
+ ["math"]="2",
+ ["pdf_dest"]="3",
+ ["pdf_literal"]="90",
+ ["penalty"]="77",
+ ["rule"]="35",
+ ["temp"]="5",
+ ["vlist"]="77",
+ ["write"]="3",
+ },
+ ["obj_ptr"]=1149,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=739006,
+ ["str_ptr"]=2141024,
+ },
+ {
+ ["cs_count"]=41533,
+ ["dyn_used"]=1037740,
+ ["elapsed_time"]=0.33500003814697,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=155221406,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1648",
+ ["attribute_list"]="552",
+ ["dir"]="5",
+ ["disc"]="188",
+ ["glue"]="1052",
+ ["glue_spec"]="321",
+ ["glyph"]="2532",
+ ["hlist"]="302",
+ ["if_stack"]="11",
+ ["kern"]="14",
+ ["local_par"]="34",
+ ["mark"]="4",
+ ["math"]="24",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="100",
+ ["penalty"]="120",
+ ["rule"]="51",
+ ["temp"]="5",
+ ["vlist"]="75",
+ ["write"]="2",
+ },
+ ["obj_ptr"]=1154,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=739046,
+ ["str_ptr"]=2141028,
+ },
+ {
+ ["cs_count"]=41534,
+ ["dyn_used"]=1041059,
+ ["elapsed_time"]=0.28600001335144,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=155304687,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1249",
+ ["attribute_list"]="419",
+ ["dir"]="5",
+ ["disc"]="5",
+ ["glue"]="430",
+ ["glue_spec"]="192",
+ ["glyph"]="68",
+ ["hlist"]="209",
+ ["if_stack"]="13",
+ ["kern"]="6",
+ ["local_par"]="17",
+ ["pdf_literal"]="76",
+ ["penalty"]="22",
+ ["rule"]="19",
+ ["temp"]="5",
+ ["vlist"]="74",
+ },
+ ["obj_ptr"]=1158,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=739072,
+ ["str_ptr"]=2141030,
+ },
+ {
+ ["cs_count"]=41535,
+ ["dyn_used"]=1044785,
+ ["elapsed_time"]=0.31900000572205,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=155577552,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1624",
+ ["attribute_list"]="544",
+ ["dir"]="5",
+ ["disc"]="94",
+ ["glue"]="795",
+ ["glue_spec"]="271",
+ ["glyph"]="1288",
+ ["hlist"]="297",
+ ["if_stack"]="7",
+ ["kern"]="15",
+ ["local_par"]="34",
+ ["mark"]="4",
+ ["math"]="30",
+ ["pdf_dest"]="1",
+ ["pdf_literal"]="84",
+ ["penalty"]="104",
+ ["rule"]="44",
+ ["temp"]="5",
+ ["vlist"]="75",
+ ["write"]="2",
+ },
+ ["obj_ptr"]=1161,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=739091,
+ ["str_ptr"]=2141031,
+ },
+ {
+ ["cs_count"]=41536,
+ ["dyn_used"]=1048221,
+ ["elapsed_time"]=0.27900004386902,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=155651415,
+ ["max_buf_stack"]=284,
+ ["node_memory"]={
+ ["attribute"]="1192",
+ ["attribute_list"]="400",
+ ["dir"]="5",
+ ["disc"]="5",
+ ["glue"]="388",
+ ["glue_spec"]="176",
+ ["glyph"]="72",
+ ["hlist"]="181",
+ ["if_stack"]="9",
+ ["kern"]="4",
+ ["local_par"]="15",
+ ["pdf_literal"]="76",
+ ["penalty"]="20",
+ ["rule"]="19",
+ ["temp"]="5",
+ ["vlist"]="66",
+ },
+ ["obj_ptr"]=1164,
+ ["pdf_mem_ptr"]=1017,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=739117,
+ ["str_ptr"]=2141033,
+ },
+} \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mk/mk-arabic.tex b/doc/context/sources/general/manuals/mk/mk-arabic.tex
new file mode 100644
index 000000000..a9f9e52d9
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-arabic.tex
@@ -0,0 +1,324 @@
+% language=uk
+
+\startcomponent mk-arabic
+
+\environment mk-environment
+
+\disablemode[dynamic-arabic] % to be checked, we loose colors
+
+\definefontfeature
+ [arab-none]
+ [mode=node,language=dflt,script=arab]
+
+\definefontfeature
+ [arab-compose]
+ [mode=node,language=dflt,script=arab,
+ ccmp=yes]
+
+\definefontfeature
+ [arab-replace]
+ [mode=node,language=dflt,script=arab,
+ ccmp=yes,
+ init=yes,medi=yes,fina=yes,isol=yes]
+
+\definefontfeature
+ [arab-mark]
+ [mode=node,language=dflt,script=arab,
+ ccmp=yes,
+ init=yes,medi=yes,fina=yes,isol=yes,
+ mark=yes]
+
+\definefontfeature
+ [arab-mkmk]
+ [mode=node,language=dflt,script=arab,
+ ccmp=yes,
+ init=yes,medi=yes,fina=yes,isol=yes,
+ mark=yes,mkmk=yes]
+
+\definefontfeature
+ [arab-kern]
+ [mode=node,language=dflt,script=arab,
+ ccmp=yes,
+ init=yes,medi=yes,fina=yes,isol=yes,
+ mark=yes,mkmk=yes,
+ kern=yes]
+
+\definefontfeature[arab-context]
+ [mode=node,language=dflt,script=arab,
+ ccmp=yes,
+ init=yes,medi=yes,fina=yes,isol=yes,
+ mark=yes,mkmk=yes,
+ kern=yes,
+ calt=yes]
+
+\definefontfeature
+ [arab-ligs]
+ [mode=node,language=dflt,script=arab,
+ ccmp=yes,
+ init=yes,medi=yes,fina=yes,isol=yes,
+ liga=yes,dlig=yes,rlig=yes,clig=yes,
+ mkmk=yes,mark=yes,
+ kern=yes]
+
+\definefontfeature
+ [arab-curs]
+ [mode=node,language=dflt,script=arab,
+ ccmp=yes,
+ init=yes,medi=yes,fina=yes,isol=yes,
+ liga=yes,dlig=yes,rlig=yes,clig=yes,
+ mark=yes,mkmk=yes,
+ kern=yes,curs=yes]
+
+\definefontfeature
+ [arab-urdu]
+ [mode=node,language=urd,script=arab,
+ ccmp=yes,
+ init=yes,medi=yes,fina=yes,isol=yes,
+ liga=yes,dlig=yes,rlig=yes,clig=yes,
+ mark=yes,mkmk=yes,
+ kern=yes,curs=yes]
+
+\definefontfeature
+ [arab-default]
+ [mode=node,language=dflt,script=arab,
+ ccmp=yes,
+ init=yes,medi=yes,fina=yes,isol=yes,
+ liga=yes,dlig=yes,rlig=yes,clig=yes,
+ mark=yes,mkmk=yes,kern=yes,curs=yes]
+
+% \font \ArabNone = arabtype*arab-none at 48pt
+% \font \ArabCompose = arabtype*arab-compose at 48pt
+% \font \ArabReplace = arabtype*arab-replace at 48pt
+% \font \ArabMark = arabtype*arab-mark at 48pt
+% \font \ArabMkmk = arabtype*arab-mkmk at 48pt
+% \font \ArabKern = arabtype*arab-kern at 48pt
+% \font \ArabContext = arabtype*arab-context at 48pt
+% \font \ArabLigs = arabtype*arab-ligs at 48pt
+% \font \ArabCurs = arabtype*arab-curs at 48pt
+% \font \ArabUrdu = arabtype*arab-urdu at 48pt
+
+% \startbuffer[word]
+% \char1604\char1616\char1604\char1617\char1648\char1607\char1616 % لِلّٰهِ
+% \stopbuffer
+
+\startbuffer[split-word]
+ \def\somechar #1{ \char#1\relax}%
+ \def\somevowel#1{ \char#1\relax}%
+ \dontleavehmode\ignorespaces\getbuffer[word]\removeunwantedspaces
+\stopbuffer
+
+\startbuffer[normal-word]
+ \def\somechar #1{\char#1\relax}%
+ \def\somevowel#1{\char#1\relax}%
+ \ignorespaces\getbuffer[word]\removeunwantedspaces
+\stopbuffer
+
+\startbuffer[word]
+ \somechar {1604}%
+ \somevowel{1616}%
+ \somechar {1604}%
+ \somevowel{1617}%
+ \somevowel{1648}%
+ \somechar {1607}%
+ \somevowel{1616}%
+ % لِلّٰهِ
+\stopbuffer
+
+\startbuffer[word]
+ \somechar {"644}%
+ \somevowel{"650}%
+ \somechar {"644}%
+ \somevowel{"651}%
+ \somevowel{"670}%
+ \somechar {"647}%
+ \somevowel{"650}%
+ % لِلّٰهِ
+\stopbuffer
+
+\startbuffer[paragraph]
+اَلْحَمْدُ لِلّٰهِ حَمْدَ مُعْتَرِفٍ بِحَمْدِهٖ، مُغْتَرِفٌ مِنْ بِحَارِ مَجْدِهٖ، بِلِسَانِ
+الثَّنَاۤءِ شَاكِرًا، وَلِحُسْنِ اٰلاۤئِهٖ نَاشِرًا؛ اَلَّذِيْ خَلَقَ الْمَوْتَ وَالْحَيٰوةَ، وَالْخَيْرَ
+وَالشَّرَّ، وَالنَّفْعَ وَالضَّرَّ، وَالسُّكُوْنَ وَالْحَرَكَةَ، وَالْأَرْوَاحَ
+وَالْأَجْسَامَ، وَالذِّكْرَ وَالنِّسْيَانَ.
+\stopbuffer
+
+\def\ArabSampleFont{arabtype}
+
+\def\ShowArabSample#1%
+ {\begingroup
+ \blank
+ \enabletrackers[otf.analyzing]
+ \doifmodeelse{dynamic-arabic}{
+ \font\ArabFont = \ArabSampleFont\space at 48pt
+ }{
+ \font\ArabFont = \ArabSampleFont*#1 at 48pt
+ }
+ \font\ArabFontX = \ArabSampleFont\space at 24pt
+ \startlinecorrection
+ \bTABLE[framecolor=red,rulethickness=1pt,offset=1ex]
+ \bTR
+ \bTD[width=.8\textwidth] % [ny=2]
+ \tttf\fontfeatureslist[#1][, ]%
+ \eTD
+ \bTD[width=.2\textwidth,align={lohi,middle},offset=0pt]%
+ \ArabFont\doifmode{dynamic-arabic}{\setfontfeature{#1}}\textdir TRT\relax
+ \getbuffer[normal-word]%
+ \eTD
+ \eTR
+% \bTR
+% \bTD[width=9em,align={lohi,middle},offset=0pt]%
+% \ArabFontX\textdir TRT\relax
+% \getbuffer[split-word]%
+% \eTD
+% \eTR
+ \eTABLE
+ \stoplinecorrection
+ \blank
+ \doifmodeelse{dynamic-arabic}{
+ \font\ArabFont = \ArabSampleFont\space at 24pt
+ \setfontfeature{#1}%
+ }{
+ \font\ArabFont = \ArabSampleFont*#1 at 24pt
+ }
+ \ArabFont
+ \pardir TRT\relax\textdir TRT\relax\getbuffer[paragraph]\endgraf
+ \disabletrackers[otf.analyzing]
+ \pardir TRT\relax\textdir TRT\relax\getbuffer[paragraph]\endgraf
+ \endgroup}
+
+\chapter{Arabic}
+
+Let's start with admitting that I don't speak or read Arabic, and the sample
+texts used here are part of what we use in the Oriental \TEX\ project for
+exploring advanced Arabic typesetting. This chapter will not discuss arab
+typesetting in much detail, but should be seen as complementing the \quote
+{Onthology on Arabic Typesetting} written by Idris. Here I will only show what
+the consequences are of applying features. Because we see glyphs but often still
+deal with characters when analyzing what to do, we will use these terms mixed.
+
+The font that we use here is the \quote {arabtype} font by MicroSoft. This font
+covers Latin scripts and Arabic and has a rich set of features. It's also a rather
+big font, so it is a nice torture test for \LUATEX.
+
+First we show what \MKIV\ does with a sequence of characters when no features
+are enabled by the user. We have turn on color tracing. This gives us some
+feedback about the how the analyze worked out. Analyzing for Arabic boils down
+to marking the initial, mid, final and isolated forms. We don't need to
+explicitly enable analyzing, it's on by default. The \type {mode} flag is set
+to \type {node} because we cannot use \TEX's default mechanism. When \LUATEX\
+and \MKIV\ are beyond beta stage, we will use that mode by default.
+
+\ShowArabSample {arab-none}
+
+Once these forms are identified, the \type {init}, \type {medi}, \type {fina}
+and \type {isol} features can be applied since they need this information. As
+you can see, different shapes show up. The vowels (marks in \OPENTYPE\ speak)
+are not affected. It may not be entirely clear here, but these vowels don't have
+width.
+
+\ShowArabSample {arab-compose}
+
+We start with some preparations with regards to combinations of marks. This
+is really needed in order to get the right output.
+
+\ShowArabSample {arab-replace}
+
+The order in which features are applied is dictated by the font and users don't
+need to bother about it. In the next example we enable the \type {mark} and
+\type {mkmk} features. As with other positioning related features, these are
+normally applied late in the feature chain.
+
+\ShowArabSample {arab-mark}
+
+The \type {mark} feature positions marks (vowels) relative to characters, also
+known as mark to base. The \type {mkmk} feature positions marks to basemarks.
+
+\ShowArabSample {arab-mkmk}
+
+Kerning depends on the font. Some fonts don't need kerning, others may need
+extensive relative positioning of characters (by now glyphs).
+
+\ShowArabSample {arab-kern}
+
+So far we only had rather straightforward replacements. More sophisticated
+replacements are those driven by the context. In principle all replacements
+can be context driven, but the \type {calt} and \type {clig} features are
+normally dedicated to the real complex ones that take preceding and following
+characters into account.
+
+\ShowArabSample {arab-context}
+
+Ligatures are often used to beautify Arabic typeset documents. Here we enable the
+whole lot.
+
+\ShowArabSample {arab-ligs}
+
+Kerning deals with horizontal displacements, but \type {curs} (cursive) goes one
+step further. As with marks, positioning is based on anchor points and resolving
+them involves a bit of trickery because one needs to take into account that
+characters may have vowels attached to them.
+
+\ShowArabSample {arab-curs}
+
+One script can serve multiple languages so let's see what happens when we switch to
+Urdu.
+
+\ShowArabSample {arab-urdu}
+
+In practice one will enable most of the features. In \MKIV\ one can define feature
+sets as follows:
+
+\starttyping
+\definefontfeature
+ [arab-default]
+ [mode=node,language=dflt,script=arab,
+ init=yes,medi=yes,fina=yes,isol=yes,
+ liga=yes,dlig=yes,rlig=yes,clig=yes,
+ mark=yes,mkmk=yes,kern=yes,curs=yes]
+\stoptyping
+
+Applying these features to fonts can be done in several ways, with as most basic
+one:
+
+\starttyping
+\font\ArabFont=arabtype*arab-default at 18pt
+\stoptyping
+
+Normally one will do something like
+
+\starttyping
+\definefont[ArabFont][arabtype*arab-default at 18pt]
+\stoptyping
+
+or use typescripts to set up ap proper font collection, in which case we end
+up with definitions that look like:
+
+\starttyping
+\definefontsynonym[ArabType][name:arabtype][features=arab-default]
+\definefontsynonym[Serif][ArabType]
+\stoptyping
+
+More information about typescripts can be found in manuals and on the
+\CONTEXT\ wiki.
+
+We end this chapter with showing two arabic fonts so that you can get a taste
+if the differences: arabtype by MicroSoft and Palatino which is designed by
+Herman Zapf for Linotype.
+
+\def\ArabSampleFont{arabtype} \ShowArabSample {arab-default}
+
+\def\ArabSampleFont{name:palatinoltarabic} \ShowArabSample {arab-default}
+
+These fonts are quite different in designsize:
+
+\def\Test{test} % (\the\dimexpr1em\relax)}
+
+\starttabulate[|r|c|c|c|]
+\NC \NC \bf arabtype \NC \bf palatino \NC \NR
+\NC \bf 10pt \NC \definedfont[arabtype at 10pt]\Test \NC \definedfont[name:palatinoltarabic at 10pt]\Test \NC \NR
+\NC \bf 12pt \NC \definedfont[arabtype at 12pt]\Test \NC \definedfont[name:palatinoltarabic at 12pt]\Test \NC \NR
+\NC \bf 18pt \NC \definedfont[arabtype at 18pt]\Test \NC \definedfont[name:palatinoltarabic at 18pt]\Test \NC \NR
+\NC \bf 24pt \NC \definedfont[arabtype at 24pt]\Test \NC \definedfont[name:palatinoltarabic at 24pt]\Test \NC \NR
+\stoptabulate
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/mk/mk-breakingapart.tex b/doc/context/sources/general/manuals/mk/mk-breakingapart.tex
new file mode 100644
index 000000000..7bb74fa2a
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-breakingapart.tex
@@ -0,0 +1,287 @@
+% language=uk
+
+\startcomponent mk-breakingapart
+
+\environment mk-environment
+
+\chapter{Breaking apart}
+
+[todo: mention changes to hyphenchar etc]
+
+Because the long term objective is to have control over all aspects of the
+typesetting, quite some effort went into opening up one of the cornerstones
+of \TEX: breaking paragraphs into lines. And because this is closely related
+to hyphenating words, this effort also meant that we had to deal with ligature
+building and kerning.
+
+This is best explained with an example. Imagine that we have the following
+sentence \footnote {The World Without Us, Alan Weisman; a quote from Richard
+Thomson in chapter: Polymers are Forever.}
+
+\startnarrower \setupalign[nothyphenated]
+We imagined it was being ground down smaller and smaller, into a kind of
+powder. And we realized that smaller and smaller could lead to bigger and
+bigger problems.
+\stopnarrower
+
+With the current language settings for US English this can be hyphenated
+as follows:
+
+\startnarrower
+{\forgetall \hyphenatedpar{We imagined it was being ground down smaller and
+smaller, into a kind of powder. And we realized that smaller and smaller
+could lead to bigger and bigger problems.}}
+\stopnarrower
+
+So, when breaking a paragraph into lines, \TEX\ has a few options, but here
+actually not that many. If we permits two character snippets, we can get:
+
+\startnarrower \lefthyphenmin=2 \righthyphenmin=2
+{\forgetall \hyphenatedpar{We imagined it was being ground down smaller and
+smaller, into a kind of powder. And we realized that smaller and smaller
+could lead to bigger and bigger problems.}}
+\stopnarrower
+
+If we revert to UK English, we get:
+
+\startnarrower
+{\forgetall \uk \hyphenatedpar{We imagined it was being ground down smaller and
+smaller, into a kind of powder. And we realized that smaller and smaller
+could lead to bigger and bigger problems.}}
+\stopnarrower
+
+or, more tolerant,
+
+\startnarrower \lefthyphenmin=2 \righthyphenmin=2
+{\forgetall \uk \hyphenatedpar{We imagined it was being ground down smaller and
+smaller, into a kind of powder. And we realized that smaller and smaller
+could lead to bigger and bigger problems.}}
+\stopnarrower
+
+or with Dutch patterns:
+
+\startnarrower
+{\forgetall \nl \hyphenatedpar{We imagined it was being ground down smaller and
+smaller, into a kind of powder. And we realized that smaller and smaller
+could lead to bigger and bigger problems.}}
+\stopnarrower
+
+The code in traditional \TEX\ that deals with hyphenation and linebreaks is rather
+interwoven. There is a relationship between the font encoding and the way patterns
+are encodes. A few years after \TEX\ was written, support for multiple languages was
+added, which resulted in a mix of (kind of global) language settings (no nodes) and
+language nodes in the node lists. Traditionally it roughly works as follows:
+
+\startitemize
+
+\item The input \type {We imagined it} is tokenized and turned into glyph nodes. If
+non \ASCII\ characters are used (like pre composed accented characters) there may be
+a translation step: macros or active characters can insert \type {\char} commands or
+map onto other characters, for instance input byte 123 can become byte 198 which in
+turn ends up as a reference in a glyph node to a font slot. Whatever method is used to
+go from input to glyph node, eventually we have a reference to a position in a font.
+Unfortunately we had only 256 such slots per font.
+
+\item When it's time to break a paragraph into lines, traditional \TEX\ walks over
+the list, reconstruct words and inserts hyphenation points. In the process,
+inter|-|character kerns that are already injected need to be removed and reinserted,
+and ligatures have to be decomposed and recomposed. The magic of hyphenation is
+controlled by discretionary nodes. These specify what to do when a word is hyphenated.
+Take for instance the Dutch word \type {effe} which hyphenated becomes \type {ef-fe}
+so the \type {ff} either stays, or is split into \type {f-} and \type {f}.
+
+\item Because a glyph node is bound to a font, there is a relationship with the
+font encoding. Because there is no one 8-bit encoding that suits all languages, we
+may end up with several instances of a font in one document (used for different
+languages) and each when we switch language and|/|or font, we also have to enable
+a suitable set of patterns (in a matching encoding).
+
+\stopitemize
+
+You can imagine that this may lead to moderately complex mechanisms in macro packages.
+For instance, in \CONTEXT, to each language multiple font encodings can be bound and
+a switch of fonts (with related encoding) also results in a switch to a suitable set
+of patterns. But in \MKIV\ things are done different.
+
+First of all, we got rid of font encodings by exclusively using \UNICODE. We already
+were using \UTF\ encoded patterns (so that we could load them under different font
+encodings) so less patterns had to be loaded per language. That happened even before
+the \LUATEX\ development arrived at hyphenation.
+
+Before that effort started, Taco and I already played a bit with alternative
+hyphenation methods. For instance, we took large word lists with hyphenation points
+inserted. Taco wrote a loader (\LUA\ could not handle the large tables as function
+return value) and I made some hyphenation code in \LUA. Surprisingly we found out that
+it was pretty efficient, although we didn't have the weighted hyphenation points
+that patterns may provide. Basically we simulated the \type {\hyphenation} command.
+
+While we went back to fonts, Taco's college Nanning wrote the first version of a new
+hyphenation storage mechanism, so when about half a year later we were ready to deal with the
+linebreak mechanisms, one of the key components was more or less ready. Where fonts forced me to
+write quite some \LUA\ code (still not finished), the new hyphenation
+mechanisms could be supported rather easy, if only because the framework was already
+kind of present (written during the experiments). Even better, when splitting the old
+code into \MKII\ and new \MKIV\ code, I could do most housekeeping in \LUA, and only
+needed a minimal amount of \TEX\ interfacing (partly redundant because of the shared
+interface). The new mechanism also was no longer bound to the format, which means
+that we could postpone loading of the patterns to runtime. Instead of the still
+supported traditional loading of patterns and exceptions, we load them under \LUA\
+control. This gave me yet another nice excercise in using \type {lpeg} (\LUA's string
+parser).
+
+With a new pattern loader in place, Taco started separating the hyphenation, ligature
+building and kerning. Each stage now has its own callback and each stage has an
+associated \LUA\ function, so that one can create a different order of execution or
+integrate it in other node parsing activities, most noticeably the handling of
+\OPENTYPE\ features.
+
+When I was trying to integrate this into the already existing node processing sequences,
+some nasty tricks were needed in order to feed the hyphenation function. At that
+moment it was still partly modelled after the traditional \TEX\ way, which boiled down
+to the following. As soon as the hyphenation function is invoked, it needs to know what
+the current language is. This information is not stored in the node list, only mid
+paragraph language switched are stored. Due to the fact that much information in \TEX\
+is global (well, in \LUATEX\ less and less) this complicates matters. Because in \MKIV\
+hyphenation, ligature building and kerning are done differently (dus to \OPENTYPE) we
+used the hyphenation callback to collect the language parameters so that we could use
+them when we called the hyphenation function later. This can definetely be qualified as
+an ugly hack.
+
+Before we discuss how this was solved, we summarize the state of affairs. In \LUATEX\
+we now have a sequence of callbacks related to paragraph building and in between not
+much happens any more.
+
+\startitemize[packed]
+\item hyphenation
+\item ligaturing
+\item kerning
+\item preparing linebreaking
+\item linebreaking
+\item finishing linebreaking
+\stopitemize
+
+Before we only had:
+
+\startitemize[packed]
+\item preparing linebreaking
+\stopitemize
+
+and this is where \MKIV\ hooks in ist code. The first three are disabled by
+associating them with dummy functions. I'm still not sure how the last two will
+fit it, especially because there is some interplay between \OPENTYPE\ features
+and linebreaking, like alternative glyphs at the end of the line. Because the
+\HZ\ and protruding mechanisms also will be supported we may as well end up with
+a mechanism for alternative glyphs built into the linebreak algorithm.
+
+Back to the current situation. What made matters even more complicated was the
+fact that we need to manipulate node lists while building horizontal material
+(hpacking) as well as for paragraphs (pre|-|linebreaking). Compare the following
+two situations. In the first case the hbox is packaged and hyphenation is not
+needed.
+
+\starttyping
+text \hbox {text} text
+\stoptyping
+
+However, when we unbox the content, hyphenation needs to be applied.
+
+\starttyping
+\setbox0=\hbox{text} text \unhbox0\ text
+\stoptyping
+
+[I need to check the next]
+
+Traditional \TEX\ does not look at all potential hyphenation points, but only around
+places that have a high probability as line|-|end. \LUATEX\ just hyphenates the whole
+list, although the function can be used selectively over a range, in \MKIV\ we see no
+reason for this and hyphenate whole lists.
+
+The new hyphenation routine not only operates on the whole list, but also can be made
+transparent for uppercase characters. Because we assume \UNICODE\ lowercase codes are
+no longer stored with the patterns (an \ETEX\ extension). The usual left- and
+righthyphenmin control is still there. The first word of a paragraph is no longer
+ignored in the process.
+
+Because the stages are separated now, the opportunity was there to separate between
+characters and glyphs. As with traditional \TEX, only characters are taken into
+account when hyphenating, so how do we distinguish between the two? The subtype (a
+property of each node) already registered if we were dealing with a ligature or not.
+Taco and Nanning had decided to treat the subtype as a bitset and after a bit of
+testing ans skyping we came to the conclusion that we needed an easy way to tag a
+glyph node as being \quote {already processed}. Keep in mind that as in the unhboxed
+example, the unhboxed content is already treated (hpack callback). If you wonder why
+we have these two moments of treatment think of this: if you put something in a box
+and want to know its dimensions, all font related features need to be applied. If the
+box is inserted as is, it can be recognized (a hlist or vlist node) and safely skipped
+in the prelinebreak handling. However, when it is unhboxed, we want to avoid
+reprocessing. Normally reprocessing will be prevented because the glyph nodes are
+mixed with kerns and ligatures are already built, but we can best play safe.
+Once we're done with processing a list (which can involve many passes, depending on
+what treatment is needed) we can tag the glyphs nodes as \quote {done} by adding 256
+to the subtype. We can then test on this property in callbacks while at the same time
+built-in functions like those responsible for hyphenation ignore this high bit.
+
+The transition from character to glyph is also done by changing bits in the subtype.
+At some point we need to set the subtype so that it reflects the node being a glyph,
+ligature or other special type (there are a few more types inherited from omega). I
+know that this all sounds complicated, but in \MKIV\ we now roughly do the following
+(of course this may and probably will change):
+
+\startitemize[packed]
+\item attribute driven manipulations (for instance case change)
+\item language driven manipulations (spell checking, hyphenation)
+\item font driven treatments, mostly features (ligature building, kerning)
+\item turn characters into glyphs (so that they will not be hyphenated again)
+\item normal ligaturing routine (currently still needed for not open type fonts, may
+ become obsolete)
+\item normal kerning routine (currently still needed for not open type fonts, may
+ become obsolete)
+\item attribute driven manipulations (special spacing and kerning)
+\stopitemize
+
+When no callbacks are used, turning characters into glyphs happens automatically behind
+the screens. When using callbacks (as in \MKIV) this needs to be done explicitly
+(but there is a helper function for this).
+
+So, by now \LUATEX\ can determine which glyph nodes play a role in hyphenation but still
+we have this \quote {what language are we in} problem. As usual in the development of
+\LUATEX, these fundamental changes took place in a setting where Taco and I are in a
+persistent state of Skyping, and it did not take much time to decide that in order to
+make the callbacks usable, it made much sense to moving the language related information
+to the glyph node as well, i.e.\ the number of the language object (patterns and
+exceptions), the left and right min values, and the boolean that tells how to treat
+uppercase characters. Each is now accessible in the usual way (by key). The penalty in
+additional memory is zero because it's stored along with the subtype bitset. By going this
+route, the ugly hack mentioned before could be removed as well.
+
+In the process of finalizing the code, discretionary nodes got a slightly different
+implementation. Originally they were organized as follows (ff is a ligature):
+
+\starttyping
+con-text == [c][o](pre=n-,post=,replace=1)[n][t][e][x][t]
+effe == [e](pre=f-,post=f,replace=1)[ff][e]
+\stoptyping
+
+So, a discretionaty node contained information about what to put at the end of the broken
+line and what to put in front of the next line, as well as the number of following nodes
+in the list to skip when such a linebreak occured. Because this leads to rather messy code
+especially when ligatures are involved, so the decision was made to change the replacement
+counter into a node list holding those (optionally) to be replaced nodes.
+
+\starttyping
+con-text == [c][o](pre=n-,post=,replace=n)[t][e][x][t]
+effe == [e](pre=f-,post=f,replace=ff)[e]
+\stoptyping
+
+This is much cleaner, but a consequence of this change was that all \MKIV\ node manipulation
+code written so far had to be reviewed.
+
+Of course we need to spend a few words on performance. We keep doing performance tests
+but currently we only remove bottlenecks that bother us. Later in the development
+optimization will tke place in the code. One reason is that the code changes, another
+reason is that large portions of \PASCAL\ code is turned into \CCODE. Because
+integrating these changes (apart from preparations) took place within a few weeks, we
+could reasonably well compare the old and the new hyphenation mechanisms using our
+(evolving) manuals and surprisingly the performance was certainly not worse than before.
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/mk/mk-calcmath.tex b/doc/context/sources/general/manuals/mk/mk-calcmath.tex
new file mode 100644
index 000000000..716731182
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-calcmath.tex
@@ -0,0 +1,130 @@
+% language=uk
+
+\startcomponent mk-calcmath
+
+\environment mk-environment
+
+\chapter{An example: CalcMath}
+
+\usemodule[calcmath]
+
+\subject{introduction}
+
+For a long time \TEX's way of coding math has dominated the
+typesetting world. However, this kind of coding is not that well
+suited for non academics, like schoolkids. Often kids do know how
+to key in math because they use advanced calculators. So, when a
+couple of years ago we were implementing a workflow where kids
+could fill in their math workbooks (with exercises) on||line, it
+made sense to support so called Texas Instruments math input.
+Because we had to parse the form data anyway, we could use a \type
+{[[} and \type {]]} as math delimiters instead of \type {$}. The
+conversion too place right after the form was received by the web
+server.
+
+\start
+
+\def\test#1%
+ {\NC \vrule height 2ex depth 2ex width 0pt\type{#1}
+ \NC \calcmath{#1}
+ \NC \NR}
+
+\setupinterlinespace[1.5]
+
+\starttabulate
+\test{sin(x) + x^2 + x^(1+x) + 1/x^2}
+\test{mean(x+mean(y))}
+\test{int(a,b,c)}
+\test{(1+x)/(1+x) + (1+x)/(1+(1+x)/(1+x))}
+\test{10E-2}
+\test{(1+x)/x}
+\test{(1+x)/12}
+\test{(1+x)/-12}
+\test{1/-12}
+\test{12x/(1+x)}
+\test{exp(x+exp(x+1))}
+\test{abs(x+abs(x+1)) + pi + inf}
+\test{Dx Dy}
+\test{D(x+D(y))}
+\test{Df(x)}
+\test{g(x)}
+\test{sqrt(sin^2(x)+cos^2(x))}
+\stoptabulate
+
+\stop
+
+By combining \LUA\ with \TEX, we can do the conversion from
+calculator math to \TEX\ immediately, without auxiliary programs
+or complex parsing using \TEX\ macros.
+
+\subject{tex}
+
+In a \CONTEXT\ source one can use the \type {\calcmath} command, as
+in:
+
+\starttyping
+The strange formula \calcmath {sqrt(sin^2(x)+cos^2(x))} boils
+down to ...
+\stoptyping
+
+One needs to load the module first, using:
+
+\starttyping
+\usemodule[calcmath]
+\stoptyping
+
+Because the amount of code involved is rather small, eventually we
+may decide to add this support to the \MKIV\ kernel.
+
+\subject{xml}
+
+Coding math in \TEX\ is rather efficient. In \XML\ one needs way
+more code. Presentation \MATHML\ provides a few basic constructs
+and boils down to combining those building blocks. Content \MATHML\
+is better, especially from the perspective of applications that
+need to do interpret the formulas. It permits for instance the
+\CONTEXT\ content \MATHML\ handler to adapt the rendering to
+cultural driven needs. The \OPENMATH\ way of coding is like
+content \MATHML, but more verbose with less tags. Calculator math
+is more restrictive than \TEX\ math and less verbose than any of
+the \XML\ variants. It looks like:
+
+\starttyping
+<icm>sqrt(sin^2(x)+cos^2(x))</icm> test
+\stoptyping
+
+And in display mode:
+
+\starttyping
+<dcm>sqrt(sin^2(x)+cos^2(x))</dcm> test
+\stoptyping
+
+\subject{speed}
+
+This script (which you can find in the \CONTEXT\ distribution as
+soon as the \MKIV\ code variants are added) is the first real
+\TEX\ related \LUA\ code that I wrote; so far I had only written
+some wrapping and spell checking code for the \SCITE\ editor. It
+also made a nice demo for a couple of talks that I held at
+usergroup meetings. The script has a lot of expressions. These
+convert one string into another. They are less powerful than
+regular expressions, but pretty fast and adequate. The feature I
+miss most is alternation like \type {(l|st)uck} but it's a small
+price to pay. As the \LUA\ manual explains: adding a \POSIX\
+compliant regexp parser would take more lines of code than \LUA\
+currently does.
+
+On my machine, running this first version took 3.5 seconds for 2500
+times typesetting the previously shown square root of sine and
+cosine. Of this, 2.1 seconds were spent on typesetting and 1.4 seconds
+on converting. After optimizing the code, 0.8 seconds were used for
+conversion. A stand alone \LUA\ takes .65 seconds, which includes loading
+the interpreter. On a test of 25.000 sample conversions, we could gain
+some 20\% conversion time using the \LUAJIT\ just in time compiler.
+
+% \usemodule[narrowtt] \typefile[ntyping]{m-calcmath.lua} % narrow, no color
+
+% \def\inlinecalcmath #1{\mathematics{\ctxlua{calcmath.tex("#1",1)}}}
+% \def\displaycalcmath #1{\startformula\ctxlua{calcmath.tex("#1",2)}\stopformula}
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/mk/mk-cjk.tex b/doc/context/sources/general/manuals/mk/mk-cjk.tex
new file mode 100644
index 000000000..dfe17a29c
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-cjk.tex
@@ -0,0 +1,320 @@
+% language=uk
+
+\usemodule[fnt-24]
+
+\startcomponent mk-cjk
+
+\environment mk-environment
+
+\definefontfallback [FullTyping] [adobemyungjostd-medium] [0x3000-0xFFFF] [check=yes,force=no]
+\definefontfallback [FullTyping] [adobesongstd-light] [0x3000-0xFFFF] [check=yes,force=no]
+
+\definefontsynonym [MyTyping] [lmmono10-regular] [fallbacks=FullTyping]
+\definefont[MyTypingFont][MyTyping sa 1]
+
+\nonknuthmode
+
+\chapter{Chinese, Japanese and Korean, aka CJK}
+
+\start \setuptyping[style=\MyTypingFont] % begin of typing hackery
+
+{\em This aspect of \MKIV\ is under construction. We use non-realistic examples.
+We need to reimplement chinese numbering in \LUA, etc.\ etc.}
+
+{\em todo: There is no need for checkinf the width if the halfwidth feature is turned on.}
+
+\subject{introduction}
+
+In \CONTEXT\ \MKII\ we support \CJK\ languages. Intercharacter spacing as
+well as linebreaks are taken care of. Chinese numbering is dealt with and
+labels and other language specific aspects are supported too. The implementation
+uses active characters and some special encoding subsystem. Although it works
+quite okay, in \MKIV\ we follow a different route.
+
+The current implementation is an intermediate one and is used to explore the
+possibilities and identify needs. One handicap in implementing \CJK\ support is
+that the wishlist of features and behaviour is somewhat dependent on who you talk
+to. This means that the implementation will have some default behaviour but can be
+tuned to specific needs. The current implementation uses the script related
+analyser and is triggered by fonts but at some point I may decide to provide
+analysing independent of fonts.
+
+As will all things \TEX, we need to find a proper font to get our document typeset
+and because \CJK\ fonts are normally quite large they are not always available on
+your system by default.
+
+\subject{scripts and languages}
+
+I'm no expert on \CJK\ and will never be one so don't expect much insight in the
+scripts and languages here. Here we only look at the way a sequence of characters
+in the input turns into a typeset paragraph. For that it is important to keep in
+mind that in a Korean or Japanese text we might find Chinese characters and that
+the spacing rules become somewhat fuzzed by that. For instance Korean has spaces
+between words and words can be broken at any point, while Chinese has no spaces.
+
+Officially Chinese runs from top to bottom but here we focus on the horizontal
+variant. When turned into glyphs the characters normally are of equal width
+and in principle we could expect them all to be vertically aligned. However, a
+font can have characters that take half that space: so called halfwidth
+characters. And, of course, in practice a font might have shapes that fall into
+this categrory but happen to have their own width which deviates from this.
+
+This means that a mechanism that deals with \CJK\ has to take care of a few
+things:
+
+\startitemize[packed]
+\item Spaces at the end of the line (or actually anywhere in the input stream)
+ need to be removed but only for Chinese.
+\item Opening and closing symbols as well as punctuation needs special treatment
+ especially when they are halfwidth.
+\item Korean uses proportially spaces punctuation and mixes with other latin fonts,
+ while Chinese often uses built in latin shapes.
+\item We may break anywhere but not after an opening symbol like~( or and not
+ before a closing symbol like~).
+\item We need to deal with mixed Chinese and Korean spacing rules.
+\stopitemize
+
+Let's start with showing some Korean. We use one of the fonts shipped
+by Adobe as part of Acrobat but first we define a Korean featureset and
+a font.
+
+\startbuffer
+\definefontfeature
+ [korean]
+ [script=hang,language=kor,mode=node,analyze=yes]
+
+\definefont[KoreanSample][adobemyungjostd-medium*korean]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Korean looks like this:
+
+\startbuffer
+\KoreanSample \setscript[hangul]
+
+모든 인간은 태어날 때부터 자유로우며 그 존엄과 권리에 있어 동등하다.
+인간은 천부적으로 이성과 양심을 부여받았으며 서로 형제애의 정신으로
+행동하여야 한다.
+\stopbuffer
+
+\typebuffer \start \getbuffer \stop
+
+The Korean script reflect syllabes and is very structured.
+Although modern fonts contain prebuilt syllabes one can also use
+the jamo alphabet to build them from components. The following
+example is provided by Dohyun Kim:
+
+\startbuffer
+\definefontfeature [medievalkorean] [mode=node,script=hang,lang=kor,ccmp=yes,ljmo=yes,vjmo=yes,tjmo=yes]
+\definefontfeature [modernkorean] [mode=node,script=hang,lang=kor]
+
+\enabletrackers[scripts.analyzing]
+\setscript[hangul]
+\definedfont [UnBatang*medievalkorean at 20pt] ᄒᆞᆫ글 \ruledhbox{ᄒᆞᆫ글} \ruledhbox{ᄒᆞᆫ} \ruledhbox{글}\blank
+\definedfont [UnBatang*modernkorean at 20pt] ᄒᆞᆫ글 \ruledhbox{ᄒᆞᆫ글} \ruledhbox{ᄒᆞᆫ} \ruledhbox{글}\blank
+\disabletrackers[scripts.analyzing]
+\stopbuffer
+
+\typebuffer \start \getbuffer \stop
+
+There are subtle differences between the medieval and modern
+shapes. It was this example that lead to more advanced \type
+{tounicode} support in \MKIV\ so that copy and paste works out
+well now for such input.
+
+For Chinese we define a couple of features
+
+\startbuffer
+\definefontfeature
+ [chinese-traditional]
+ [mode=node,script=hang,lang=zht]
+\definefontfeature
+ [chinese-simple]
+ [mode=node,script=hang,lang=zhs]
+\definefontfeature
+ [chinese-traditional-hw]
+ [mode=node,script=hang,lang=zht,hwid=yes]
+\definefontfeature
+ [chinese-simple-hw]
+ [mode=node,script=hang,lang=zhs,hwid=yes]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer
+\definefont[ChineseSampleFW][adobesongstd-light*chinese-traditional]
+\definefont[ChineseSampleHW][adobesongstd-light*chinese-traditional-hw]
+\setscript[hanzi]
+
+\ChineseSampleFW
+兡也包因沘氓侷柵苗孫孫財崧淫設弼琶跑愍窟榜蒸奭稽
+霄瓢館縲擻鼕〈孃魔釁〉佉沎岠狋垚柛胅娭涘罞偟惈牻荺
+傒焱菏酡廅滘絺赩塴榗箂踃嬁澕蓴醊獧螗餟燱螬駸礑鎞
+瀧鄿瀯騬醹躕鱕。
+
+\ChineseSampleHW
+兡也包因沘氓侷柵苗孫孫財崧淫設弼琶跑愍窟榜蒸奭稽
+霄瓢館縲擻鼕〈孃魔釁〉佉沎岠狋垚柛胅娭涘罞偟惈牻荺
+傒焱菏酡廅滘絺赩塴榗箂踃嬁澕蓴醊獧螗餟燱螬駸礑鎞
+瀧鄿瀯騬醹躕鱕。
+\stopbuffer
+
+\typebuffer \start \getbuffer \stop
+
+A few more samples:
+
+\startbuffer
+\definefont[ChFntAT][name:adobesongstd-light*chinese-traditional-hw at 16pt]
+\definefont[ChFntBT][name:songti*chinese-traditional at 16pt]
+\definefont[ChFntCT][name:fangsong*chinese-traditional at 16pt]
+
+\definefont[ChFntAS][name:adobesongstd-light*chinese-simple-hw at 16pt]
+\definefont[ChFntBS][name:songti*chinese-simple at 16pt]
+\definefont[ChFntCS][name:fangsong*chinese-simple at 16pt]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+In these fonts traditional comes out as follows:
+
+\start \setscript[hanzi]
+\startlines
+\ChFntAT 我〈能吞下玻璃而不傷身〉體。
+\ChFntBT 我〈能吞下玻璃而不傷身〉體。
+\ChFntCT 我〈能吞下玻璃而不傷身〉體。
+\stoplines
+\stop
+
+And simple as:
+
+\start \setscript[hanzi]
+\startlines
+\ChFntAS 我〈能吞下玻璃而不伤身〉体。
+\ChFntBS 我〈能吞下玻璃而不伤身〉体。
+\ChFntCS 我〈能吞下玻璃而不伤身〉体。
+\stoplines
+\stop
+
+\subject {tracing}
+
+As usual in \CONTEXT, we have some tracing built in. When you say
+
+\startbuffer
+\enabletrackers[scripts.analyzing]
+\stopbuffer
+
+You will get the output colored according to the category that the
+analyser put them in. When you say
+
+\startbuffer
+\enabletrackers[scripts.injections]
+\stopbuffer
+
+some rudimentary information will be written to the log about whet gets
+inserted in the nodelist.
+
+Analyzed input looks like:
+
+\startbuffer
+아아, 나는 이제야 도(道)를 알았도다. 마음이 어두운 자는 이목이
+누(累)가 되지 않는다. 이목만을 믿는 자는 보고 듣는 것이
+더욱 밝혀져서 병이 되는 것이다. 이제 내 마부가 발을 말굽에
+밟혀서 뒷차에 실리었으므로, 나는 드디어 혼자 고삐를 늦추어
+강에 띄우고, 무릎을 구부려 발을 모으고 안장 위에 앉았다.
+한번 떨어지면 강이나 물로 땅을 삼고, 물로 옷을 삼으며,
+물로 몸을 삼고, 물로 성정을 삼을 것이다. 이제야 내 마음은
+한번 떨어질 것을 판단한 터이므로, 내 귓속에 강물 소리가 없어졌다.
+무릇 아홉 번 건너는데도 걱정이 없어 의자 위에서 좌와(坐臥)하고
+기거(起居)하는 것 같았다.
+\stopbuffer
+
+\typebuffer \start \enabletrackers[scripts.analyzing] \KoreanSample \setscript[hangul] \getbuffer \disabletrackers[scripts.analyzing] \stop
+
+For developers (and those who provide them with input) we have another tracing
+
+\startbuffer
+\definedfont[arialuni*korean at 10pt] \setscript[hangul] \ShowCombinationsKorean
+\stopbuffer
+
+\typebuffer
+
+We need to use a font that supports Chinese as well as Korean. This gives quite some output.
+
+\start \getbuffer \stop
+
+% 안녕하세요? (Hello)
+% 감사합니다. (Thank you)
+
+\page \stop % end of typing hackery
+
+\stopcomponent
+
+% \font\JapaneseFontA=name:kozminprovi-regular
+%
+% \startlines
+% Hankaku : {\JapaneseFontA アイウエオカキクケコサシスセソタチツテ}
+% Romanj digits : {\JapaneseFontA 0123456789}
+% Romanj lowercase : {\JapaneseFontA abcdefghi}
+% Romanj uppercase : {\JapaneseFontA ABCDEFGHI}
+% \stoplines
+%
+% \enabletrackers[scripts.analyzing]
+%
+% \start \raggedright \dontleavehmode
+% \ruledhbox\bgroup \ChFntBS ,\egroup \quad
+% \ruledhbox\bgroup \ChFntBS 〉\egroup \quad
+% \ruledhbox\bgroup \ChFntBS 〈\egroup \par
+% \stop
+%
+% \def\DoChineseSample#1#2#3%
+% {\ruledvtop{#1\hsize#2\relax#3}}
+%
+% \def\ChineseSampleA#1#2{%
+% \blank
+% \subsubject{hsize #2, fullwidth}
+% \dontleavehmode
+% \DoChineseSample{#1}{#2}{吞吞吞,吞吞吞吞。}\quad
+% \DoChineseSample{#1}{#2}{吞吞吞,,吞吞吞吞。}\quad
+% \DoChineseSample{#1}{#2}{吞吞吞〉吞吞吞吞。}\quad
+% \DoChineseSample{#1}{#2}{吞吞吞〉,吞吞吞吞。}
+% \blank[small]
+% \dontleavehmode
+% \DoChineseSample{#1}{#2}{吞吞吞〉〉吞吞吞吞。}\quad
+% \DoChineseSample{#1}{#2}{吞吞吞〉〉吞吞吞吞。}\quad
+% \DoChineseSample{#1}{#2}{〈吞吞吞吞吞吞吞。}\quad
+% \DoChineseSample{#1}{#2}{〈〈吞吞吞吞吞吞吞。}
+% \blank[small]
+% \dontleavehmode
+% \DoChineseSample{#1}{#2}{吞吞吞…吞吞吞吞。}\quad
+% \DoChineseSample{#1}{#2}{吞吞吞……吞吞吞吞。}
+% \dontleavehmode
+% \blank
+% }
+%
+% \ChineseSampleA\ChFntBS{4.25em}
+% \ChineseSampleA\ChFntBS{4.00em}
+% \ChineseSampleA\ChFntBS{3.75em}
+% \ChineseSampleA\ChFntBS{3.50em}
+% \ChineseSampleA\ChFntBS{3.25em}
+% \ChineseSampleA\ChFntBS{3.00em}
+%
+% \def\ChineseSampleB#1#2{%
+% \blank
+% \subsubject{hsize #2, halfwidth}
+% \dontleavehmode
+% \DoChineseSample{#1}{#2}{吞吞吞,吞吞吞吞。}\quad
+% \DoChineseSample{#1}{#2}{吞吞吞‘吞吞吞吞。}\quad
+% \DoChineseSample{#1}{#2}{吞吞吞’吞吞吞吞。}\quad
+% \blank
+% }
+%
+% \ChineseSampleB\ChFntBS{4.25em}
+% \ChineseSampleB\ChFntBS{4.00em}
+% \ChineseSampleB\ChFntBS{3.75em}
+% \ChineseSampleB\ChFntBS{3.50em}
+% \ChineseSampleB\ChFntBS{3.25em}
+% \ChineseSampleB\ChFntBS{3.00em}
+%
+% \disabletrackers[scripts.analyzing]
+
diff --git a/doc/context/sources/general/manuals/mk/mk-code.tex b/doc/context/sources/general/manuals/mk/mk-code.tex
new file mode 100644
index 000000000..e150531eb
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-code.tex
@@ -0,0 +1,219 @@
+% language=uk
+
+\startcomponent mk-code
+
+\environment mk-environment
+
+\chapter{User code}
+
+Previous versions of \LUATEX\ had multiple \LUA\ instances but in
+practice this was not that useful and therefore we decided to
+remove that feature and stick to one instance. One reason is that
+all activities take place in the zero instance anyway and other
+instance could not access variables defined there. Another reason
+was that every \type {\directlua} call is in fact a function call
+(and as such a closure) and \LUATEX\ catches errors nicely.
+
+The formal \type {\directlua} primitive originally can be called
+in two ways:
+
+\starttyping
+\directlua <instance> {lua code}
+\directlua name {some text} <instance> {lua code}
+\stoptyping
+
+The optional text is then part of the error message when one is
+issued. The new approach is that the number is used for the error
+message in case no \type {name} is specified. The exact string is
+set in \LUA. This means that in principle the command is backward
+compatible. Old usage will basically ignore the number and use
+the one and only instance, while new usage will use the number for
+an eventual message:
+
+\starttyping
+\directlua <message id> {lua code}
+\directlua name {some text} <message id> {lua code}
+\stoptyping
+
+In the second case the id is ignored. The advantage of the first
+call is that it saves tokens at the \TEX\ end and can be
+configured at the \LUA\ end. In \CONTEXT\ \MKIV\ we have adapted
+the code that invokes multiple instances by compatible code that
+provides a modest form of isolation. We don't want to enforce too
+many constraints, first of all because users will often use high
+level interfaces anyway, and also because we assume that users have
+no bad intentions.
+
+The main \LUA\ instance in \CONTEXT\ is accessible by: \footnote {Note
+2016: you can of course also use \type {context("lua")} here.}
+
+\startbuffer
+\startluacode
+global.tex.print("lua")
+\stopluacode
+\stopbuffer
+
+\typebuffer
+
+This gives: \quote {\getbuffer}.
+
+However, sometimes you don't want user code to interfere too much
+with the main code but still provide access to useful data. This
+is why we also provide:
+
+\startbuffer
+\startusercode
+global.tex.print("user 1")
+global.tex.print("user 2")
+if characters then
+ global.tex.print("access")
+else
+ global.tex.print("no access")
+end
+global.tex.print(global.characters.data[0xA9].contextname)
+\stopusercode
+\stopbuffer
+
+\typebuffer
+
+This gives: \quote {\getbuffer}.
+
+If you're writing a module, you might want to reserve a private
+namespace. This is done with:
+
+\startbuffer
+\definenamedlua[mymodule][my interesting module]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Now we can say:
+
+\startbuffer
+\startmymodulecode
+help = { "help" }
+global.tex.print(help[1])
+\stopmymodulecode
+\stopbuffer
+
+\typebuffer
+
+This gives: \quote {\getbuffer}. The information is remembered:
+
+\startbuffer
+\startmymodulecode
+global.tex.print(help[1])
+\stopmymodulecode
+\stopbuffer
+
+\typebuffer
+
+Indeed we get: \quote {\getbuffer}.
+
+Just to check the isolation we try:
+
+\startbuffer
+\startusercode
+global.tex.print(help and help[1] or "no help")
+\stopusercode
+\stopbuffer
+
+\typebuffer
+
+As expected this gives: \quote {\getbuffer} but when we do the
+following we will get an error message:
+
+\startbuffer
+\startusercode
+global.tex.print(help[1])
+\stopusercode
+\stopbuffer
+
+\typebuffer
+
+% {\batchmode \getbuffer} % somehow quits in context but not in texexec
+
+\starttyping
+! LuaTeX error <private user instance>:2: attempt to index global
+'help' (a nil value)
+stack traceback:
+ <private user instance>:2: in main chunk.
+<inserted text> ...userdata")
+global.tex.print(help[1])
+}
+\stoptyping
+
+An even more isolated variant is:
+
+\startbuffer
+\startisolatedcode
+help = { "help" }
+global.tex.print(help and help[1] or "no help")
+\stopisolatedcode
+\stopbuffer
+
+\typebuffer
+
+We get: \quote {\getbuffer}, while
+
+
+\startbuffer
+\startisolatedcode
+global.tex.print(help and help[1] or "no help")
+\stopisolatedcode
+\stopbuffer
+
+\typebuffer
+
+gives: \quote {\getbuffer}.
+
+You can get access to the global data of other named code blocks
+by using the \type {global} prefix. At that level you have also
+access to the instances, but this time we append \type {data}, so
+\type {user} has a table \type {userdata}:
+
+\startbuffer
+\startmymodulecode
+global.userdata.whatever = "be careful!"
+\stopmymodulecode
+\stopbuffer
+
+For convenience we have made \type {tex} as well as some \LUA\ tables
+directly accessible within an instance. However, we recommend not to
+extend these yourself (even if we do it in the core of \MKIV).
+
+% not yet ok:
+%
+% The next example is inspired by a question of Wolfgang Schuster who
+% wanted to write a module. Say that we have a file \type {demo.lua}:
+%
+% \starttyping
+% local demo = { }
+%
+% function demo.whow(str)
+% global.tex.print("[" .. string.reverse(str) .. "]")
+% end
+%
+% return demo
+% \stoptyping
+%
+% The module can be \type {demo.tex}:
+%
+% \starttyping
+% \definenamedlua[demo][demo module example]
+%
+% \startdemocode
+% demo = global.require("demo.lua")
+% \stopdemocode
+%
+% \def\whow#1{\democode{demo.whow("#1"}}
+% \stoptyping
+%
+% We can now use this module:
+%
+% \starttyping
+% \usemodule[demo]
+% \whow{123}
+% \stoptyping
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/mk/mk-colors.tex b/doc/context/sources/general/manuals/mk/mk-colors.tex
new file mode 100644
index 000000000..0d12c976e
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-colors.tex
@@ -0,0 +1,467 @@
+% language=uk
+
+\startcomponent mk-colors
+
+\environment mk-environment
+
+\chapter{Colors redone}
+
+\subject{introduction}
+
+Color support has been present in \CONTEXT\ right from the start and
+support has been gradualy extended, for instance with transparency
+and spot colors. About 10 years later we have the first major rewrite
+of this mechanism using attributes as implemented in \LUATEX.
+
+Because I needed a test file to check if all things still work as
+expected, I decided to recap the most important commands in this
+chapter.
+
+\subject{color support}
+
+The core command is \type {\definecolor}, so let's define a few
+colors:
+
+\startbuffer
+\definecolor [red] [r=1]
+\definecolor [green] [g=1]
+\definecolor [blue] [b=1]
+\definecolor [yellow] [y=1]
+\definecolor [magenta] [m=1]
+\definecolor [cyan] [c=1]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+This gives us the following colors:
+
+\showcolorcomponents[red,green,blue,,yellow,magenta,cyan]
+
+As you can see in this table, transparency is part of a color
+specification, so let's define a few transparent colors:
+
+\startbuffer
+\definecolor [t-red] [r=1,a=1,t=.5]
+\definecolor [t-green] [g=1,a=1,t=.5]
+\definecolor [t-blue] [b=1,a=1,t=.5]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\showcolorcomponents[t-red,t-green,t-blue]
+
+Because transparency is now separated from color, we can define
+transparent behaviour as follows:
+
+\startbuffer
+\definecolor[half-transparent] [a=1,t=.5]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Implementing process color spaces was not that complex, but spot and multitone
+colors took a bit more code.
+
+\startbuffer
+\definecolor [parentspot] [r=.5,g=.2,b=.8]
+\definespotcolor [childspot-1] [parentspot] [p=.7]
+\definespotcolor [childspot-2] [parentspot] [p=.4]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+The three colors, two of them are spot colors, show up as follows:
+
+\showcolorcomponents[parentspot,childspot-1,childspot-2]
+
+Multitone colors can also be defined:
+
+\startbuffer
+\definespotcolor [spotone] [red] [p=1]
+\definespotcolor [spottwo] [green] [p=1]
+
+\definespotcolor [spotone-t] [red] [a=1,t=.5]
+\definespotcolor [spottwo-t] [green] [a=1,t=.5]
+
+\definemultitonecolor
+ [whatever]
+ [spotone=.5,spottwo=.5]
+ [b=.5]
+\definemultitonecolor
+ [whatever-t]
+ [spotone=.5,spottwo=.5]
+ [b=.5]
+ [a=1,t=.5]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Transparencies don't carry over:
+
+\showcolorcomponents[spotone,spottwo,spotone-t,spottwo-t,whatever,whatever-t]
+
+Transparencies combine as follows:
+
+\startbuffer
+\blackrule[width=3cm,height=1cm,color=spotone-t]\hskip-1.5cm
+\blackrule[width=3cm,height=1cm,color=spotone-t]
+\stopbuffer
+
+\typebuffer
+
+\startlinecorrection
+\dontleavehmode\getbuffer
+\stoplinecorrection
+
+We can still clone colors and overload color dynamically. I used the following
+test code for the \MKIV\ code:
+
+\startbuffer
+{\green green->red}
+\definecolor[green] [g=1]
+{\green green->green}
+\definecolor[green] [blue]
+{\green green->blue}
+\definecolor[blue] [red]
+{\green green->red}
+\setupcolors[expansion=yes]%
+\definecolor[blue] [red]
+\definecolor[green] [blue]
+\definecolor[blue] [r=1]
+{\green green->blue}
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Of course palets and color groups are supported too. We seldom use
+colorgroups, but here is an example:
+
+\startbuffer
+\definecolorgroup
+ [redish]
+ [1.00:0.90:0.90,1.00:0.80:0.80,1.00:0.70:0.70,1.00:0.55:0.55,
+ 1.00:0.40:0.40,1.00:0.25:0.25,1.00:0.15:0.15,0.90:0.00:0.00]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+The redish color is called by number:
+
+\startbuffer
+\blackrule[width=3cm,height=1cm,depth=0pt,color=redish:1]\quad
+\blackrule[width=3cm,height=1cm,depth=0pt,color=redish:2]\quad
+\blackrule[width=3cm,height=1cm,depth=0pt,color=redish:3]
+\stopbuffer
+
+\typebuffer
+
+\startlinecorrection
+\dontleavehmode\getbuffer
+\stoplinecorrection
+
+Palets work with names:
+
+\startbuffer
+\definepalet
+ [complement]
+ [red=cyan,green=magenta,blue=yellow]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+This is used as:
+
+\startbuffer
+\blackrule[width=1cm,height=1cm,depth=0pt,color=red]\quad
+\blackrule[width=1cm,height=1cm,depth=0pt,color=green]\quad
+\blackrule[width=1cm,height=1cm,depth=0pt,color=blue]\quad
+\setuppalet[complement]%
+\blackrule[width=1cm,height=1cm,depth=0pt,color=red]\quad
+\blackrule[width=1cm,height=1cm,depth=0pt,color=green]\quad
+\blackrule[width=1cm,height=1cm,depth=0pt,color=blue]
+\stopbuffer
+
+\typebuffer
+
+\startlinecorrection
+\dontleavehmode\getbuffer
+\stoplinecorrection
+
+% Rasters are still supported but normally one will use colors:
+%
+% \startbuffer
+% \raster[.5]{\blackrule[width=3cm,height=1cm]}\quad
+% \raster[.8]{\blackrule[width=3cm,height=1cm]}
+% \stopbuffer
+%
+% \typebuffer
+%
+% \startlinecorrection
+% \dontleavehmode\getbuffer
+% \stoplinecorrection
+
+Of course the real torture test is \METAPOST\ inclusion:
+
+\startbuffer
+\startMPcode
+ path p ; p := fullcircle scaled 4cm ;
+ fill p withcolor \MPcolor{spotone-t} ;
+ fill p shifted(2cm,0cm) withcolor \MPcolor{spottwo-t} ;
+\stopMPcode
+\stopbuffer
+
+\typebuffer
+
+These transparent color circles up as:
+
+\startlinecorrection
+\dontleavehmode\getbuffer
+\stoplinecorrection
+
+Multitone colors also work:
+
+\startbuffer
+\startMPcode
+ path p ; p := fullcircle scaled 2cm ;
+ fill p withcolor \MPcolor{spotone} ;
+ fill p shifted(2cm,0cm) withcolor \MPcolor{spottwo} ;
+ fill p shifted(4cm,0cm) withcolor \MPcolor{whatever} ;
+\stopMPcode
+\stopbuffer
+
+\typebuffer
+
+This gives:
+
+\startlinecorrection
+\dontleavehmode\getbuffer
+\stoplinecorrection
+
+\subject{implementation}
+
+The implementation of colors using attributes if quite different
+from the traditional method. In \MKII\ color support works okay but
+the associated code is not that clean, if only because:
+
+\startitemize[packed]
+\item we need to keep track of grouped color usage
+\item and we do that using dedicated marks (using \TEX's mark mechanism)
+\item since this has limitations, we have quite some optimizations
+\item like local (no marks) and global colors (marks)
+\item and real dirty code to push and pop color states around pages
+\item and some messy code to deal with document colors
+\item and quite some conversion macros (think of \TEX\ not having floats)
+\stopitemize
+
+Although recent versions of \PDFTEX\ have a color stack mechanism, this
+is not adequate for our usage, if only because we support more colorspaces
+than this mechanism is supposed to deal with. (The color stack mechanism is
+written with a particular macro packag ein mind.)
+
+In \MKIV\ attributes behave like colors and therefore we no longer
+need to care about what happens at pageboundaries. Also, we no
+longer have to deal with the limitations of marks. Here:
+
+\startitemize[packed]
+\item we have distributed color spaces, color itself and transparency
+\item all injection of backend code is postponed to shipout time
+\item definition and conversion is delegated to \LUA
+\stopitemize
+
+Of course the current implementation is not as nice as we would like it
+to be. This because:
+
+\startitemize[packed]
+\item support mechanism are under construction
+\item we need to support both \MKII\ and \MKIV\ in one interface
+\item backend support is yet limited
+\stopitemize
+
+Although in principle a mechanism based on attributes is much faster than
+using marks cum suis, the new implementation is slower. The main reason is
+that we need to finalize the to be shipped out box. However, since this
+task involved more than just color, we will gain back some runtime when other
+mechanisms also use attributes.
+
+\subject{complications}
+
+This paragraph is somewhat complex, so skip it when you don't feel comfortable with
+the subject of when you've never seen low level \CONTEXT\ code.
+
+Attributes behave like fonts. This means that they are kind of frozen once
+material is boxed. Consider that we define a box as follows:
+
+\starttyping
+\setbox0\hbox{default {\red red \green green} default}
+\stoptyping
+
+What do you expect to come out the next code? In \MKII\ the \quote
+{default} inside the box will be colored yellow but the internal
+red and and green words will keep their color.
+
+\starttyping
+default {\yellow yellow \box0\ yellow} default
+\stoptyping
+
+When we use fonts switches we don't expect the content of the
+box to change. So, in the following the \quote {default} texts will
+{\em not} become bold.
+
+\starttyping
+\setbox0\hbox{default {\sl slanted \bi bold italic} default}
+default {\bf bold \box0\ bold} default
+\stoptyping
+
+Future versions of \LUATEX\ will provide more control over how attributes
+are applied to boxes, but for the moment we need to fallback on a solution
+built in \MKIV:
+
+\starttyping
+default {\yellow yellow \attributedbox0\ yellow} default
+\stoptyping
+
+There is also a \type {\attributedcopy} macro. These macros signal the
+attribute resolver (that kicks in just before shipout) that this box is to
+be treated special.
+
+In \MKII\ we had a similar situation which is why we had the option (only used
+deep down in \CONTEXT) to encapsulate a bunch of code with
+
+\starttyping
+\startregistercolor[foregroundcolor]
+some macro code ... here foregroundcolor is applied ... more code
+\stopregisteringcode
+\stoptyping
+
+This is for instance used in the \type {\framed} macro. First we package the content,
+foregroundcolor is not yet applied because the injected specials of literals can interfere
+badly, but by registering the colors the nested color calls are tricked into thinking that
+preceding and following content is colored. When packaged, we apply backgrounds, frames,
+and foregroundcolor to the whole result. Because nested colors were aware of the
+foregroundcolor they have properly reverted to this color when needed.
+
+In \MKIV\ the situation is reversed. Here we definitely need to set the foregroundcolor
+because otherwise attributes are not set and here they don't interfere at all (no extra nodes).
+For this we use the same registration macros. When the lot is packaged, applying foregroundcolor
+is ineffective because the attributes are already applied. Instead of registering we could
+have flushed the framed content using \type {\attributedbox}, but this way we can keep the
+\MKII\ and \MKIV\ code base the same.
+
+To summarize, first the na\"ive approach. Here the nested colors know how to revert, but
+the color switch can interfere with the content (since color commands inject nodes).
+
+\starttyping
+\setbox\framed\vbox
+ {\color[foregroundcolor]{packaged framed content, can have color switches}}
+\stoptyping
+
+The \MKII\ approach registers the foreground color so the nested colors
+know what to do. There is no interfering code:
+
+\starttyping
+\startregistercolor[foregroundcolor]
+\setbox\framed
+\stopregisteringcode
+\setbox\framed{\color[foregroundcolor]{\box\framed}}
+\stoptyping
+
+The registration actually sets the color, so in fact the final coloring is not
+needed (does nothing). An alternative \MKIV\ approach is the following:
+
+\starttyping
+\color
+ [foregroundcolor]
+ {\setbox\framed{packaged framed content, can have color switches}}
+\stoptyping
+
+This works ok because attributes are applied to the whole content, i.e.\
+the box. In \MKII\ this would be quite ineffective and actually result
+in weird side effects.
+
+\starttyping
+< color stack is pushed and marks are set (unless local) >
+< color special or literal sets color to foregroundcolor >
+\setbox\framed{packaged framed content, can have color switches}
+< color special or literal sets color to foregroundcolor >
+< color stack is popped and marks are set (unless local) >
+\stoptyping
+
+So, effectively we set a box, and end up with:
+
+\starttyping
+< whatsits (special, literal and.or mark) >
+< whatsits (special, literal and.or mark) >
+\stoptyping
+
+in the main vertical lost and that will interfere badly with spacing
+and friends.
+
+In \MKIV\ however, a color switch, like a font switch does not leave any
+traces, it just sets a state. Anyway, keep in mind that there are some
+rather fundamental conceptual differences between the two appoaches.
+
+Let's end with an example that demonstrates the problem. We fill two boxes:
+
+% in previous examples we may have messed up colors
+
+\definecolor[red] [darkred]
+\definecolor[green] [darkgreen]
+\definecolor[blue] [darkblue]
+\definecolor[yellow][darkyellow]
+
+\startbuffer
+\setbox0\hbox{RED {\blue blue} RED}
+\setbox2\hbox{RED {\blue blue} {\attributedcopy0} RED}
+\stopbuffer
+
+\typebuffer \getbuffer
+
+We will flush these in the following lines:
+
+\startbuffer
+{unset \color[red]{red \CopyMe} unset
+ \color[red]{red \hbox{red \CopyMe}} unset}
+{unset \color[red]{red \CopyMe} unset
+ {\red red \hbox{red \CopyMe}} unset}
+{unset \color[red]{red \CopyMe} unset
+ {\red red \setbox0\hbox{red \CopyMe}\box0} unset}
+{unset \color[red]{red \CopyMe} unset
+ {\hbox{\red red \CopyMe}} unset}
+{\blue blue \color[red]{red \CopyMe} blue
+ \color[red]{red \hbox{red \CopyMe}} blue}
+\stopbuffer
+
+\typebuffer
+
+\startbuffer[yes]
+\def\CopyMe{\attributedcopy2\ \copy4}
+\stopbuffer
+
+\startbuffer[no]
+\def\CopyMe{\copy2\ \copy4}
+\stopbuffer
+
+First we define \type {\CopyMe} as follows:
+
+\typebuffer[yes]
+
+This gives:
+
+\start \enableattributeinheritance \getbuffer[yes] \getbuffer \stop
+
+Compare this with:
+
+\typebuffer[no]
+
+This gives:
+
+\getbuffer[no] \getbuffer
+
+You get the picture? At least in early version of \MKIV\ you need to
+enable support for inheritance with:
+
+\starttyping
+\enableattributeinheritance
+\stoptyping
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/mk/mk-contents.tex b/doc/context/sources/general/manuals/mk/mk-contents.tex
new file mode 100644
index 000000000..cc5eac2d9
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-contents.tex
@@ -0,0 +1,11 @@
+% language=uk
+
+\startcomponent mk-contents
+
+\environment mk-environment
+
+\title{Contents}
+
+\placelist[chapter][aligntitle=yes]
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/mk/mk-debug.png b/doc/context/sources/general/manuals/mk/mk-debug.png
new file mode 100644
index 000000000..153af68c4
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-debug.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/mk/mk-dirtytricks.tex b/doc/context/sources/general/manuals/mk/mk-dirtytricks.tex
new file mode 100644
index 000000000..30f9ff648
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-dirtytricks.tex
@@ -0,0 +1,144 @@
+% language=uk
+
+\startcomponent mk-dirtytricks
+
+\environment mk-environment
+
+\chapter {Dirty tricks}
+
+If you ever laid your hands on the \TeX book, the words \quote {dirty tricks} will
+forever be associated with an appendix of that book. There is no doubt that you need
+to know a bit of the internals of \TEX\ in order to master this kind of trickyness.
+
+In this chaper I will show a few dirty \LUATEX\ tricks. It also gives an impression
+of what kind of discussions Taco and I had when discussing what kind of support should
+be build in the interface.
+
+\subject{afterlua}
+
+When we look at \LUA\ from the \TEX\ end, we can do things like:
+
+\startbuffer
+\def\test#1{%
+ \setbox0=\hbox{\directlua0{tex.sprint(math.pi*#1)}}%
+ pi: \the\wd0\space\the\ht0\space\the\dp0\par
+}
+\stopbuffer
+
+\typebuffer \blank \getbuffer \blank
+
+But what if we are at the \LUA\ end and want to let \TEX\ handle things? Imagine
+the following call:
+
+\startbuffer
+\setbox0\hbox{} \dimen0=0pt \ctxlua {
+ tex.sprint("\string\\setbox0=\string\\hbox{123}")
+ tex.sprint("\string\\the\string\\wd0")
+}
+\stopbuffer
+
+\typebuffer
+
+This gives: \ignorespaces \getbuffer. This may give you the impression that \TEX\
+kicks in immediately, but the following example demonstrates otherwise:
+
+\startbuffer
+\setbox0\hbox{} \dimen0=0pt \ctxlua {
+ tex.sprint("\string\\setbox0=\string\\hbox{123}")
+ tex.dimen[0] = tex.box[0].width
+ tex.sprint("\string\\the\string\\dimen0")
+}
+\stopbuffer
+
+\typebuffer
+
+This gives: \getbuffer. When still in \LUA, we never get to see the width
+of the box.
+
+A way out of this is the following rather straightforward approach:
+
+\starttyping
+function test(n)
+ function follow_up()
+ tex.sprint(tex.box[0].width)
+ end
+ tex.sprint("\\setbox0=\\hbox{123}\\directlua 0 {follow_up()}")
+end
+\stoptyping
+
+We can provide a more convenient solution for this:
+
+\starttyping
+after_lua = { } -- could also be done with closures
+
+function the_afterlua(...)
+ for _, fun in ipairs(after_lua) do
+ fun(...)
+ end
+ after_lua = { }
+end
+
+function afterlua(f)
+ after_lua[#after_lua+1] = f
+end
+
+function theafterlua(...)
+ tex.sprint("\\directlua 0 {the_afterlua("
+ .. table.concat({...},',') .. ")}")
+end
+\stoptyping
+
+If you look closely, you will see that we can (optionally) pass arguments
+to the function \type {theafterlua}. Usage now becomes:
+
+\starttyping
+function test(n)
+ afterlua(function(...)
+ tex.sprint(string.format("pi: %s %s %s\\par",... ))
+ end)
+ afterlua(function(wd,ht,dp)
+ tex.sprint(string.format("ip: %s %s %s\\par",dp,ht,wd))
+ end)
+ tex.sprint(string.format("\\setbox0=\\hbox{%s}",math.pi*n))
+ local box_0 = tex.box[0]
+ theafterlua(box_0.width,box_0.height,box_0.depth)
+end
+\stoptyping
+
+The last call may confuse you but since it does a print to \TEX, it is
+in fact a delayed action. A cleaner implementation is the following:
+
+\starttyping
+local delayed = { }
+
+local function flushdelayed(...)
+ delayed = { }
+ for i=1, #t do
+ t[i](...)
+ end
+end
+
+function lua.delay(f)
+ delayed[#delayed+1] = f
+end
+
+function lua.flush(...)
+ tex.sprint("\\directlua{flushdelayed(" ..
+ table.concat({...},',') .. ")}")
+end
+\stoptyping
+
+Usage is similar:
+
+\starttyping
+function test(n)
+ lua.delay(function(...)
+ tex.sprint(string.format("pi: %s %s %s\\par",...))
+ end)
+ tex.sprint(string.format("\\setbox0=\\hbox{%s}",math.pi*n))
+ local box_0 = tex.box[0]
+ lua.flush(box_0.width,box_0.height,box_0.depth)
+end
+\stoptyping
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/mk/mk-environment.tex b/doc/context/sources/general/manuals/mk/mk-environment.tex
new file mode 100644
index 000000000..3472f3b04
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-environment.tex
@@ -0,0 +1,209 @@
+% language=uk
+
+\startenvironment mk-environment
+
+\enablemode[dynamic-arabic] % to be checked, we loose colors
+
+\usemodule[abr-02]
+
+\usemodule[timing]
+
+\useMPlibrary[dum]
+
+\dontcomplain
+
+\logo [METAPOST] {MetaPost}
+
+\setupsorting[logo][style=\sc]
+
+\startsetups ShowCollect
+ \blank
+ \flushtokens[demo]
+ \blank
+ \showtokens[demo]
+ \blank
+\stopsetups
+
+\startsetups CollapseCollectA
+ \blank
+ \testtokens[demo]
+ \flushtokens[demo]
+ \blank
+ \showtokens[demo]
+ \blank
+\stopsetups
+
+\startsetups CollapseCollectB
+ \blank
+ \flushtokens[demo]
+ \blank
+ \testtokens[demo]
+ \showtokens[demo]
+ \blank
+\stopsetups
+
+% \startmode[atpragma]
+% \usetypescriptfile[type-ghz]
+% \usetypescript[optima-nova-os][texnansi]
+% \setupbodyfont[optima-os,sans,12pt]
+% \stopmode
+
+% \startnotmode[atpragma]
+% \usetypescript[palatino][ec]
+% \setupbodyfont[12pt,palatino]
+% \stopnotmode
+
+% \starttypescript [sans] [optima,optima-nova] [afm]
+% \definefontsynonym [OptimaLT] [lte50019] [encoding=\typescriptthree,features=complete]
+% \definefontsynonym [OptimaLT-Italic] [lte52401] [encoding=\typescriptthree,features=complete]
+% \definefontsynonym [OptimaLT-Bold] [lte50021] [encoding=\typescriptthree,features=complete]
+% \definefontsynonym [OptimaLT-BoldItalic] [lte54379] [encoding=\typescriptthree,features=complete]
+% \definefontsynonym [OptimaLT-Medium] [lte53505] [encoding=\typescriptthree,features=complete]
+% \definefontsynonym [OptimaLT-MediumItalic] [lte53506] [encoding=\typescriptthree,features=complete]
+% \definefontsynonym [OptimaLT-DemiBold] [lte53507] [encoding=\typescriptthree,features=complete]
+% \definefontsynonym [OptimaLT-DemiBoldItalic] [lte53508] [encoding=\typescriptthree,features=complete]
+% \definefontsynonym [OptimaLT-Black] [lte53509] [encoding=\typescriptthree,features=complete]
+% \definefontsynonym [OptimaLT-BlackItalic] [lte53510] [encoding=\typescriptthree,features=complete]
+% \definefontsynonym [OptimaLT-ExtraBlack] [lte53511] [encoding=\typescriptthree,features=complete]
+% \definefontsynonym [OptimaLT-ExtraBlackItalic] [lte53512] [encoding=\typescriptthree,features=complete]
+% \stoptypescript
+
+% \starttypescript [sans] [optima-nova-os] [name]
+% \definefontsynonym [Sans] [OptimaNova-RegularOsF] [features=complete]
+% \definefontsynonym [SansItalic] [OptimaNova-ItalicOsF] [features=complete]
+% \definefontsynonym [SansBold] [OptimaNova-BoldOsF] [features=complete]
+% \definefontsynonym [SansBoldItalic] [OptimaNova-BoldItalicOsF] [features=complete]
+% \definefontsynonym [SansSlanted] [OptimaNova-ItalicOsF] [features=complete]
+% \definefontsynonym [SansBoldSlanted] [OptimaNova-BoldItalicOsF] [features=complete]
+% \definefontsynonym [SansCaps] [OptimaNova-RegularSC] [features=complete]
+% \stoptypescript
+
+\starttypescript[optima-nova-os]
+ \definetypeface[optima-os][ss][sans][optima-nova-os] [default][features=complete]
+ \definetypeface[optima-os][rm][sans][optima-nova-os] [default][features=complete]
+ \definetypeface[optima-os][tt][mono][latin-modern] [default][features=default,rscale=1.1]
+ \definetypeface[optima-os][mm][math][latin-modern] [default][features=default,rscale=1.1]
+ \quittypescriptscanning
+\stoptypescript
+
+% \startmode[atpragma]
+% \usetypescriptfile[type-ghz]
+% \usetypescript[optima-nova-os][afm]
+% \setupbodyfont[optima-os,sans,12pt]
+% \stopmode
+
+\startmode[atpragma]
+ \usetypescriptfile[type-hgz]
+ \usetypescript[optima-nova-os] % [afm]
+ \setupbodyfont[optima-os,sans,12pt]
+\stopmode
+
+\startnotmode[atpragma]
+ \startsetups normalbodyfont
+ \setupbodyfont[12pt,palatino]
+ \stopsetups
+\stopnotmode
+
+\setups[normalbodyfont]
+
+\definelayer
+ [page]
+ [width=\paperwidth,
+ height=\paperheight]
+
+\setuplayout
+ [location=middle,
+ marking=on,
+ width=middle,
+ height=middle,
+ footer=1.5cm,
+ header=1.5cm,
+ topspace=1.5cm]
+
+\startmode[book]
+
+% \definepapersize
+% [mine]
+% [width=21cm,
+% height=24cm]
+
+% \setuppapersize
+% [mine]
+% [mine] % [oversized]
+
+% \setuplayout % width = 15cm
+% [topspace=1.25cm,
+% backspace=2.5cm,
+% cutspace=3.5cm]
+
+% \setuplayout
+% [scale=.80]
+
+ \setuplayout
+ [marking=on,
+ scale=\luaexpr{24/28}]
+
+\stopmode
+
+\stopmode
+
+\setupcolors
+ [state=start]
+
+\setupwhitespace
+ [big]
+
+\setuplist[chapter,section][width=5em]
+
+\definecolor[mktransparentred] [r=.8,a=1,t=.5]
+\definecolor[mktransparentgreen] [g=.8,a=1,t=.5]
+\definecolor[mktransparentblue] [b=.8,a=1,t=.5]
+\definecolor[mktransparentyellow][r=.8,g=.8,a=1,t=.5]
+\definecolor[mktransparentgray] [s=.8,a=1,t=.5]
+
+\definecolor[mkcolor] [r=.8]
+\definecolor[mkred] [r=.8]
+\definecolor[mkgreen] [g=.8]
+\definecolor[mkblue] [b=.8]
+\definecolor[mktransparent] [mktransparentred]
+
+\setuptype
+ [color=mkcolor]
+
+\setuptyping
+ [color=mkcolor]
+
+\definestartstop
+ [notabene]
+ [color=mkcolor]
+
+\setupitemgroup
+ [itemize]
+ [each]
+ [color=mkcolor,headcolor=mkcolor]
+
+\setuppagenumbering
+ [alternative=doublesided,
+ location=]
+
+\setupsection
+ [chapter]
+ [conversion=R]
+
+\setupsection
+ [section]
+ [conversion=R]
+
+\setupcaptions
+ [conversion=R]
+
+\setupfootertexts
+ []
+ [{\getmarking[chapter]\quad\pagenumber}]
+ [{\pagenumber\quad\getmarking[chapter]}]
+ []
+
+\setuphead[chapter][style=\bfc,color=mkcolor]
+\setuphead[section][style=\bfa,color=mkcolor]
+
+\stopenvironment
diff --git a/doc/context/sources/general/manuals/mk/mk-error.png b/doc/context/sources/general/manuals/mk/mk-error.png
new file mode 100644
index 000000000..e0598af05
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-error.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/mk/mk-fallback.tex b/doc/context/sources/general/manuals/mk/mk-fallback.tex
new file mode 100644
index 000000000..5ded10b72
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-fallback.tex
@@ -0,0 +1,176 @@
+% language=uk
+
+\startcomponent mk-fallback
+
+\environment mk-environment
+
+\chapter {Virtual Reality}
+
+When a font lacks glyphs we can add new ones by making the font
+virtual. A virtual font has virtual glyphs: instead of a reference
+to a slot in the current font, such a glyph refers to a slot in
+another font, or it combines several glyphs into one, or it just
+contains code that ends up in the result (for instance a sequence
+of \PDF\ commands that describes the shape). For \TEX\ a character
+and its dimensions are what matters and what ends up in the result
+is mostly a matter for the backend. In \LUATEX\ the backend is
+integrated but even then during the typesetting process only the
+characteristics of a glyph are used and not the shape.
+
+In \CONTEXT\ we have a feature called \quote {compose} which
+extends the font with extra characters and constructs its
+representation from those of other characters.
+
+\starttyping
+\definefontfeature
+ [composes]
+ [kern=yes,ligatures=yes,compose=yes]
+\stoptyping
+
+When this feature is applied, \CONTEXT\ will try to fill in the
+gaps in the \UNICODE\ vector of the font based on for instance
+(de)composition information. Of course this has some limitations.
+For instance \OPENTYPE\ fonts can ships with features, like
+smallcaps. Currently we ignore this property when we add composed
+characters. Technically it is no big deal to add variants but we
+simply didn't do it yet at the time of this writing. After all,
+such fallbacks can best be avoided by using proper fonts.
+
+Our \CONTEXT\ \MKIV\ wishlist mentions a mechanism for combining
+fonts into one font. For this we can use virtual fonts and the
+machinery for that is in available in \LUA\ code. However such a
+mechanism will be used for more drastic completion of a font than
+the compose feature. For instance, often Chinese fonts lack proper
+Latin glyphs and vise versa. But when we combine such fonts we
+really do want to keep \OPENTYPE\ features working and so we
+cannot use virtual fonts (unless we start merging features which
+can become really messy and runtime consuming).
+
+There is a relative simple solution using real fonts that kind of
+behave like virtual ones: virtual real fonts. The trick is in the
+fact that \TEX\ permits access to characters not present in the
+font. Say that we have
+
+\starttyping
+<char 123><char 124><char 125>
+\stoptyping
+
+and that slot~124 has no glyph. In that case \TEX\ just inserts a
+glyph node with a reference to the current font and this
+character. Of course, when we let \TEX\ carry on, at some point it
+will need glyph properties like the width, height and/or depth.
+And in the backend, when writing the result to file, \TEX\ wants
+to insert the glyph data in the file. In both cases we end up with
+a message in the log file and a result file with missing data.
+
+In \CONTEXT\ \MKIV\ we intercept the node lists at several points
+and one of those is directly after the construction. So let's
+consider the previous example again.
+
+\starttyping
+<font 32 char 123><font 32 char 124><font 32 char 125>
+\stoptyping
+
+Because the font has no character 124 we need a way to substitute
+it with another character. All we have to do is to change the font
+identifier~32 into one that makes sense. Such a replacement loop
+is kind of trivial.
+
+\starttyping
+for n in traverse_id(glyph,head) do
+ local v = vectors[n.font]
+ if v then
+ local id = v[n.char]
+ if id then
+ n.font = id
+ end
+ end
+end
+\stoptyping
+
+We have a table (\type{vectors}) that can have a subtable (\type
+{v}) for font with id (\type {n.font}) in which there can be a
+reference from the current character (\type {n.char}) to another
+font (\type {id}) that we use to replace the font reference (\type
+{n.font}).
+
+Filling the table is relatively easy but an explanation is beyond
+this chapter. We only show the high level interface, one that
+certainly will evolve.
+
+\starttyping
+\definefontfallback
+ [SerifFallback]
+ [Mono]
+ [0x000-0x3FF]
+ [check=yes,force=no]
+\stoptyping
+
+This command registers an entry in the \type {SerifFallback}
+namespace. There can be multiple replacement in row (by just using
+more of these commands), but here we have only one. The range
+0x000--0x3FF will be checked and if the main font lacks a glyph in
+that range, it will be taken from the font with the symbolic name
+\type {Mono}. That name will be resolved when the fallback is
+associated with a font. The \type {check} option tells the
+machinery that we need to check for existence and because we don't
+\type {force}, we will only replace missing glyphs. There is also
+an \type {rscale} option, that permits relative scaling of the
+fallback font to the main font, something that may be needed when
+fonts come from different sources.
+
+\starttyping
+\definefontsynonym
+ [SerifPlus]
+ [Serif]
+ [fallbacks=SerifFallback]
+\stoptyping
+
+This command associates a fallback with a font. There is always a
+parent font and that is the font that triggers the checking of the
+node list.
+
+\starttyping
+\definefont [MySerif] [SerifPlus at 10pt]
+\stoptyping
+
+Here we defines a font called \type {\MySerif} that refers to a
+symbolic name \type {SerifPlus} which in turn refers to the
+current \type {Serif} font (these symbolic names are resolved in
+typescripts, one of the building blocks of \CONTEXT s font
+system). The mentioned fallbacks will be initialized when the font
+is defined. This examples demonstrates that there is a clean
+separation between font definitions and fallbacks. This makes it
+possible to share fallback definitions.
+
+So, let's summarize what happens:
+
+\startitemize[packed]
+\item a font is defined in the normal way but has falbacks
+\item the associated fallback fonts are defined too
+\item the main font gets a table with fallback id's
+\item the main font is used in the document stream
+\item the node list is intercepted and parsed for this font
+\item references to fallback fonts take care of missing glyphs
+\stopitemize
+
+We end with an example.
+
+\startbuffer
+\definefontfallback [Demo] [Mono] [0x30-0x39] [force=yes]
+\definefontsynonym [DemoSerif] [Serif] [fallbacks=Demo]
+
+\definefont [MyDemoSerif] [DemoSerif at 20pt]
+
+\MyDemoSerif Here the digits, like 13579, are replaced.
+\stopbuffer
+
+\typebuffer
+
+\start \blank[3*medium] \getbuffer \blank[3*medium] \stop
+
+Beware: the fallback definitions are global, but this is hardly a
+problem because normal such trickery is taking place at the document
+level.
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/mk/mk-fonts.tex b/doc/context/sources/general/manuals/mk/mk-fonts.tex
new file mode 100644
index 000000000..b5e945923
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-fonts.tex
@@ -0,0 +1,841 @@
+% language=uk
+
+\usemodule[virtual]
+
+\startcomponent mk-fonts
+
+\environment mk-environment
+
+\chapter{A fresh look at fonts}
+
+\subject{readers}
+
+Now that we have the file system, \LUA\ script integration, input
+encoding and basic logging in place, we have arrived at fonts.
+Although today \OPENTYPE\ fonts are the fashion, we still need to
+deal with \TEX's native font machinery. Although Latin Modern and
+the \TEX\ Gyre collection will bring us many free \OPENTYPE\
+fonts, we can be sure that for a long time \TYPEONE\ variants will
+be used as well, and when one has lots of bought fonts, replacing
+them with \OPENTYPE\ updates is not always an option. And so,
+reimplementing the readers for \TEX\ Font Metrics (\type {tfm}
+files) and Virtual Fonts (\type {vf} files), was the first step.
+
+Because \ALEPH\ font handling was integrated already, Taco decided
+to combine the \TFM\ and \OFM\ readers into a new one. The
+combined loader is written in C and produces tables that are
+accessible from within \LUA. A problem is that once a font is
+used, one cannot simply change its metrics. So, we have to make
+sure that we apply changes before a font is actually used:
+
+\starttyping
+\font\test=texnansi-lmr at 31.415 pt
+\test Yet another nice Kate Bush song: Pi
+\stoptyping
+
+In this example, any change to the fontmetrics has to be done before
+\type {test} is invoked. For this purpose the \type {define_font}
+callback is provided. Below you see an experimental overload:
+
+\starttyping
+callback.register("define_font", function (name,area,size)
+ return fonts.patches.process(font.read_tfm(name,size))
+end )
+\stoptyping
+
+The \type {fonts.patched.process} function (currently in \CONTEXT\
+\MKIV) implements a mechanism for tweaking the font parameters in
+between. In order to get an idea of further features we played a
+bit with ligature replacement, character spacing, kern tweaking
+etc. Think of such a function (or a chain of functions) doing
+things similar to:
+
+\starttyping
+callback.register("define_font", function (name,area,size)
+ local tfmblob = font.read_tfm(name,size) -- build in loader
+ tfmblob.characters[string.byte("f")].ligatures = nil
+ return tfmblob -- datastructure that TeX will use internally
+end )
+\stoptyping
+
+Of course the above definition is not complete, if only because we
+need to handle chained ligatures as well (fl followed by i).
+
+In practice we prefer a more abstract interface (at the macro
+level) but the idea stays the same. Interesting is that having
+access to the internals this way already makes our \TEX\ Live more
+interesting. (We cannot demonstrate this trickery here because
+when this document is processed you cannot be sure if the
+experimental interface is still in place.)
+
+When playing with this we ran into problems with file searching.
+When performing the backend role, \LUATEX\ will look in the \TEX\
+tree if there is a corresponding virtual file. It took a while and
+a bit of tracing (which is not that hard in the \LUA\ based
+reader) to figure out that the omega related path definitions in
+\type {texmf.cnf} files were not correct, something that went
+unnoticed because omega never had a backend integrated and the
+\DVI\ processors did multiple searches to get around this.
+
+Currently, if you want to enable extensive tracing of file
+searching and loading, you can set an environment variable:
+
+\starttyping
+MTX.INPUT.TRACE=3
+\stoptyping
+
+This will produce a lot of information about what file is asked
+for, what types (tex, font, etc) determines the search, along what
+paths is being searched, what readers and locators are used (file,
+zip, protocol), etc.
+
+\subject{AFM}
+
+While Taco implemented the virtual font reader |<|eventually its
+data will be merged with the \TFM\ table|>| I started playing with
+constructing \TFM\ tables directly. Because \CONTEXT\ has a rather
+systematic naming scheme, we can rather easily see which encoding
+we are dealing with. This means that in principle we can throw all
+encoded \TFM\ files out of our tree and construct the tables using
+the \AFM\ file and an encoding vector.
+
+It took us a good day to figure out the details, but in the end we
+were able to trick \LUATEX\ into using \AFM\ files. With a bit of
+internal caching it was even reasonable fast. When the basic
+conversion mechanism was written we tried to compare the results
+with existing \TFM\ metrics as generated by \type {afm2tfm} and
+\type {afm2pl}. Doing so was less trivial than we first thought.
+To mention a few aspects:
+
+\startitemize[packed]
+\item heights and depths have a limited number of values in \TEX
+\item we need to convert to \TEX's scaled points
+\item rounding errors of one scaled point occur
+\item \type {afm2tfm} can only add kerns when virtual fonts are used
+\item \type {afm2tfm} adds some extra ligatures and also does some
+ kern magic
+\item \type {afm2pl} adds even more kerns
+\item the tools remove kern pars between digits
+\stopitemize
+
+In this perspective we need not be too picky on what exactly a
+ligature is. An example of a ligature is \type {fi} and such a
+character can be in the font. In the \TFM\ file, the definition of
+\type {f} contains information about what to do when it's followed
+by an \type {i}: it has to insert a reference (character number)
+pointing to the fi glyph.
+
+However, because \TEX\ was written in \ASCII\ time space, there
+was a problem of how to get access to for instance the Spanish
+quotation and exclamation marks. Here the ligature mechanism
+available in the \TFM\ format was misused in the sense that a
+combination of \type {exclam} and \type {quoteleft} becomes \type
+{exclamdown}. In a similar fashion will two single quotes become a
+double quote. And every \TEX ie knows that multiple hyphens
+combine into -- (endash) and --- (emdash), where the later one is
+achieved by defining a ligature between an endash and a hyphen.
+
+Of course we have to deal with conversions from \AFM\ units (1000
+per em) to \TEX's scaled points. Such conversions may be sensitive
+for rounding errors. Because we noticed differences of one scaled
+point, I tried several strategies to get the results consistent
+but so far I didn't manage to find out where these differences
+come from. Rounding errors seem to be rather random and I have no
+clue what strategy the regular converters follow. Another fuzzy
+area are the font parameters (visible as font dimensions for
+users): I wonder how many users really know what values are used
+and why.
+
+You may wonder to what extend this rounding problem will influence
+consistent typesetting. We have no reason to assume that the
+rounding error is operating system dependent. This leaves the
+different methods used and personally I have no problems with the
+direct reader being not 100\% compatible with the regular tools.
+First of all it's an illusion to think that \TEX\ distributions
+are stable over the years. Fonts and conversion tools are being
+updated every now and then, and metrics change over time (apart
+from Computer Modern which is stable by definition). Also, pattern
+file are updated, so paragraphs may be broken into lines different
+anyway. If you really want stability, then you need to store the
+fonts and patterns with your document.
+
+As we already mentioned, the regular converter programs add kerns
+as well. Treating common glyph shapes similar is not uncommon in
+\CONTEXT\ so I decided to provide methods for adding \quote
+{missing} kerns. For example, with regards to kerning, we can
+treat \type {eacute} the same way as an~\type {e}. Some ligatures,
+like \type {ae} or \type {fi}, need to be seen from two sides:
+when looked at from the left side they resemble an \type {a} and
+\type {f}, but when kerned at their right, they are to be treated
+as \type {e} and \type {i}.
+
+So, when all this is taken care of, we will have a reasonable
+robust and compatible way to deal with \AFM\ files and when this
+variant is enabled, we can prune our \TEX\ trees pretty well.
+Also, now that we have font related tables, we can start moving
+tables built out of \TEX\ macros (think of protruding and hz) to
+\LUA, which will not only save us much hash entries but also
+permits us faster implementations.
+
+The question may arise why there is no hard coded \AFM\ reader.
+Although some speed up can be achieved by reading the table with
+\AFM\ data directly, there would still be the issue of making that
+table accessible for manipulations as described (costs time too).
+The \AFM\ format is human readable contrary to the \TFM\ format
+and therefore they can conveniently be processed by \LUA. Also,
+the possible manipulations may differ per macro package, user, and
+even documents. The changes of users and developers reaching an
+agreement about such issues is near zero. By writing the reader in
+\LUA, a macro package writer can also implement caching mechanisms
+that suits the package. Also, keep in mind that we often only need
+to load about four \AFM\ files or a few more when we mix fonts.
+
+In my main tree (regular distributions) there are some 350 files
+in \type {texnansi} encoding that take over 2~MByte. My personal
+font tree has over a thousand such entries which means that we can
+prune the tree considerably when we use the \AFM\ loader. Why
+bother about \TFM\ when \AFM\ can do the job.
+
+In order to reduce the overhead in reading the \AFM\ file, we now
+use external caching, which (in \CONTEXT\ \MKIV) boils down to
+serializing the internal \AFM\ tables and compiling them to
+bytecode. As a result, the runtime becomes comparable to a run
+using regular \TFM\ files. On this document usign the \AFM\ reader
+(cached) takes some .3 seconds more on 8 seconds total (28 pages
+in Optima Nova with a couple of graphics).
+
+While we were playing with this, Hermann Zapf surprised me by
+sending me a \CD\ with his marvelous new Palatino Sans. So,
+instead of generating \TFM\ metrics, I decided to use \type
+{ttf2afm} to generate me an \AFM\ file from the \TRUETYPE\ files
+and use these metrics. It worked right out of the box which means
+that one can copy a set of font files directly from the source to
+the tree. In a demo document the Palatino Sans came out quite well
+and so we will use this font to explore the upcoming Open Type
+features.
+
+Because we now have less font resources (only two files per font)
+we decided to get away from the spread||all||over||the||tree
+paradigm. For this we introduced
+
+\starttyping
+../fonts/data/vendor/collection
+\stoptyping
+
+like:
+
+\starttyping
+../fonts/data/tex/latin-modern
+../fonts/data/tex-gyre/bonum
+../fonts/data/linotype/optima-nova
+../fonts/data/linotype/palatino-nova
+../fonts/data/linotype/palatino-sans
+\stoptyping
+
+Of course one needs to adapt the related font paths in the
+configuration files but getting that done in tex distributions is
+another story.
+
+\subject{map files}
+
+Reading an \AFM\ file is only part of the game. Because we bypass
+the regular \TFM\ reader we may internally end up with different
+names of fonts (and|/|or files). This also means that the map
+files that map an internal name onto an font (outline) file may be
+of no use. The map file also specifies the encoding file which
+maps character numbers onto names used in font files.
+
+The map file maps a font name to a (preferable outline) font
+resource file. This can be a file with suffix \type {pfb}, \type
+{ttf}, \type {otf} or alike. When we convert am \AFM\ file into a
+more suitable format, we also store the associated (outline)
+filename, that we use later when we assemble the map line data (we
+use \type {\pdfmapline} to tell \LUATEX\ how to prepare and embed
+a file.
+
+Eventually \LUATEX\ will take care of all these issues itself
+thereby rendering map files and encoding files kind of useless.
+When loading an \AFM\ file we already have to read encoding files,
+so we have all the information available that normally goes into
+the map file. While conducting experiments with reading \AFM\
+files, we therefore could use the \type {\pdfmapline} primitive to
+push the right entries into font inclusion machinery. Because
+\CONTEXT\ already handles map data itself we could easily hook
+this into the normal handlers for that. (There are some nasty
+synchronization issues involved in handling map entries in general
+but we will not bother you with that now).
+
+Although eventually we may get rid of map files, we also used the
+general map file handling in \CONTEXT\ as a playground for the
+\XML\ handler that we wrote in \LUA. Playing with many map files
+(a few KBytes) coded in \XML\ format, or with one big map file
+(easily 800 MBytes) makes a good test case for loading and dumping
+
+But why bother too much about map files in \LUATEX\ \unknown\ they
+will go away anyway.
+
+\subject{OTF \& TTF}
+
+One of the reasons for starting the \LUATEX\ development was that we wanted to
+be able to use \OPENTYPE\ (and \TRUETYPE) fonts in \PDFTEX. As a prelude (and kind of
+transition) we first dealt with \TYPEONE\ using either \TFM\ or \AFM. For \TEX\ it does
+not really matter what font is used, it only deals with dimensions and generic
+characteristics. Of course, when fonts offer more advanced possibilities, we may
+need more features in the \TEX\ kernel, but think of \HZ\ or protruding as provided
+by \PDFTEX: it's not part of the font (specification) but of the engine. The same
+is actually true for kerning and ligature building, although here the font (data) may
+provide the information needed to deal with it properly.
+
+\OPENTYPE\ fonts come with features. Examples of features are using oldstyle figures or
+tabular digits instead of the default ones. Dealing with such issues boils down to
+replacing one character representation by another or treating combinations of character
+in the input differently depending on the circumstances. There can be relationships
+between languages and scripts, but, as \TEX ies know, other relationships exist as well,
+for instance between content and visualization.
+
+Therefore, it will be no surprise that \LUATEX\ does not simply implement the \OPENTYPE\
+specification as such. On the one hand it implements a way to load information stored
+in the font, on the other hand it implements mechanisms to fullfil the demands of such
+fonts and more. The glue between both is done with \LUA. In the simple case of ligatures
+and kerns this goes as follows. A user (or macropackage) specified a font, and this
+call can be intercepted using a callback. This callback can use a built in function that
+loads an \OTF\ or \TTF\ font. From this table, a font table is constructed that is passed
+on to \TEX. The construction
+may involve building ligature and kerning tables using the information present
+in the font file, but it may as well mean more. So, given a bare \LUATEX\ system,
+\OPENTYPE\ font support is not giving you automatically handling of features, or more
+precisely, there is no hard coded support for features.
+
+This may sound as a disadvantage
+but as soon as you start looking at how \TEX\ users use their system (in most cases
+by using a macro package) you may understand that flexibility is larger this way. Instead
+of adding more and more control and exceptions, and thereby making the kernel more
+instable and complex, we delegate control to the macro package. The advantage is that
+there are no (everlasting) discussions on how to deal with things and in the end the
+user will use a high level interface anyway. Of course the macro package needs proper
+access to the font's internals, but this is provided: the code used for reading in the
+data comes from FontForge (an advanced font editor) and is presented via \LUA\ tables
+in a well organized way.
+
+Given that users expect \OPENTYPE\ features to be supported, how do we provide an
+interface. In \CONTEXT\ the user interface has always be an important aspect and
+consistency is a priority. On the other hand, there has been the tradition of specifying
+the size explicity and a new custom introduced by \XETEX\ to enhance fontname
+with directives. Traditional \TEX\ provides:
+
+\starttyping
+\font \name filename [optional size]
+\stoptyping
+
+\XETEX\ accepts
+
+\starttyping
+\font \name "fontname[:optional features]" [optional size]
+\font \name fontname[:optional features] [optional size]
+\stoptyping
+
+Instead of a fontname one can pass a filename between square brackets. \LUATEX\
+handles:
+
+\starttyping
+\font \name anything [optional size]
+\font \name {anything} [optional size]
+\stoptyping
+
+where anything as well as the size are passed on to the callback.
+
+This permits us to implement a traditional specification, support \XETEX\ like
+definitions, and easily pass information from a macro package down to the
+callback as well. Interpreting anything is done in \LUA.
+
+While implementing the \LUA\ side of the loader we took a similar approach
+as the \AFM\ reader and cached intermediate tables as well as keep track
+of font names (in addition to filenames). In order to be able to quickly
+determine the (internal) font name of an \OPENTYPE\ font, special loader
+functions are provided.
+
+The size is kind of special, because we can have specifications like
+
+\starttyping
+at 10pt
+at 3ex
+at \dimexpr\bodyfontsize+1pt\relax
+\stoptyping
+
+This means that we need to handle that on the \TEX\ side and pass the
+calculated value to the callback.
+
+Virtual fonts have a rather special nature. They permit you to define variations
+of fonts using other fonts and special (\DVI\ related) operators. However, from the
+perspective of \TEX\ itself they don't exist at all. When you create a virtual font
+you also end up with a \TFM\ file and \TEX\ only needs this file, which defined
+characters in terms of a width, height, depth and italic correction as well as
+associates characters with kerning pairs and ligatures. \TEX\ leaves it to the
+backend to deal the actual glyphs and therefore the backend will be confronted
+by the internals of a virtual font. Because \PDFTEX\ and therefore \LUATEX\ has the
+backend built in, it is capable of handling virtual fonts information.
+
+In \LUATEX\ you can build your own virtual font and this will suit us well. It
+permits us for instance to complete fonts that lack certain characters (glyphs) and
+thereby let us get rid of ugly macro based fallback trickery. Although in \CONTEXT\
+we will provide a high level interface, we will give you a taste of \LUA\ here.
+
+\starttyping
+callback.register("define_font", function(name,size)
+ if name == "demo" then
+ local f = font.read_tfm('texnansi-lmr10',size)
+ if f then
+ local capscale, digscale = 0.85, 0.75
+ f.name, f.type = name, 'virtual'
+ f.fonts = {
+ { name="texnansi-lmr10" , size=size },
+ { name="texnansi-lmss10", size=size*capscale },
+ { name="texnansi-lmtt10", size=size*digscale }
+ }
+ for k,v in pairs(f.characters) do
+ local chr = utf.char(k)
+ if chr:find("[A-Z]") then
+ v.width = capscale*v.width
+ v.commands = {
+ {"special","pdf: 1 0 0 rg"},
+ {"font",2}, {"char",k},
+ {"special","pdf: 0 g"}
+ }
+ elseif chr:find("[0-9]") then
+ v.width = digscale*v.width
+ v.commands = {
+ {"special","pdf: 0 0 1 rg"},
+ {"font",3}, {"char",k},
+ {"special","pdf: 0 g"}
+ }
+ else
+ v.commands = {
+ {"font",1}, {"char",k}
+ }
+ end
+ end
+ return f
+ end
+ end
+ return font.read_tfm(name,size)
+end)
+\stoptyping
+
+Here we define a virtual font that uses three real fonts and
+which font is used depends on the kind of character we're
+dealing with (inreal world situations we can best use the \MKIV\ function
+that tells what class a character belongs to). The \type {commands}
+table determines what glyphs comes out in what way. We use a bit of
+literal pdf code to color the special characters but generally color is
+not handled at the font level.
+
+This example can be used like:
+
+\starttyping
+\font\test=demo \test
+Hi there, this is the first (number 1) example of playing with
+Virtual Fonts, some neat feature of \TeX, once you have access
+to it. For instance, we can misuse it to fill in gaps in fonts.
+\stoptyping
+
+During development of this mechanism, we decided to save some redundant
+loading by permitting id's in the fonts array:
+
+\starttyping
+callback.register("define_font", function(name,size)
+ if name == "demo" then
+ local f = font.read_tfm('texnansi-lmr10',size)
+ if f then
+ local id = font.define(f)
+ local capscale, digscale = 0.85, 0.75
+ f.name, f.type = name, 'virtual'
+ f.fonts = {
+ { id=id },
+ { name="texnansi-lmss10", size=size*capscale },
+ { name="texnansi-lmtt10", size=size*digscale }
+ }
+ for k,v in pairs(f.characters) do
+ local chr = utf.char(k)
+ if chr:find("[A-Z]") then
+ v.width = capscale*v.width
+ v.commands = {
+ {"special","pdf: 1 0 0 rg"},
+ {"slot",2,k},
+ {"special","pdf: 0 g"}
+ }
+ elseif chr:find("[0-9]") then
+ v.width = digscale*v.width
+ v.commands = {
+ {"special","pdf: 0 0 1 rg"},
+ {"slot",3,k},
+ {"special","pdf: 0 g"}
+ }
+ else
+ v.commands = {
+ {"slot",1,k}
+ }
+ end
+ end
+ return f
+ end
+ end
+ return font.read_tfm(name,size)
+end)
+\stoptyping
+
+Hardwiring fontnames in callbacks this way does not deserve a price and
+when possible we will provide better extension interfaces. Anyhow,
+in the experimental \CONTEXT\ code we used calls like this, where
+\type {demo} is an installed feature.
+
+\startbuffer
+\font\myfont = special@demo-1 at 12pt \myfont
+Hi there, this is the first (number 1) example of playing with Virtual Fonts,
+some neat feature of \TeX, once you have access to it. For instance, we can
+misuse it to fill in gaps in fonts.
+\stopbuffer
+
+\typebuffer \start \getbuffer \par \stop
+
+Keep in mind that this is just an example. In practice we will not do such things
+at the font level but by manipulating \TEX's internals.
+
+While developing this functionality and especially when Taco was
+programming the backend functionality, we used more sane \MKIV\ code. Think
+of (still \LUA) definitions like:
+
+\startbuffer
+\ctxlua {
+ fonts.definers.methods.install("weird", {
+ { "copy-range", "lmroman10-regular" } ,
+ { "copy-char", "lmroman10-regular", 65, 66 } ,
+ { "copy-range", "lmsans10-regular", 0x0100, 0x01FF } ,
+ { "copy-range", "lmtypewriter10-regular", 0x0200, 0xFF00 } ,
+ { "fallback-range", "lmtypewriter10-regular", 0x0000, 0x0200 }
+ })
+}
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Again, this is not the final user interface, but it shows the
+direction we're heading. The result looks like:
+
+\startbuffer
+\font\test={myfont@weird} at 12pt \test
+\eacute \rcaron \adoublegrave \char65
+\stopbuffer
+
+\typebuffer
+
+This shows up as:
+
+\start \getbuffer \stop
+
+Here the \type {@} tells the (new) \CONTEXT\ font handler what constructor
+should be used.
+
+Because some testers already have \XETEX\ font support files, we
+also support a \XETEX\ like definition syntax.
+
+\startbuffer
+\font\test={lmroman10-regular:dlig;liga}\test
+f i fi ffi \crlf
+f i f\kern0pti f\kern0ptf\kern0pti \crlf
+\char64259 \space\char64256 \char105 \space \char102\char102\char105
+\stopbuffer
+
+\typebuffer
+
+This gives:
+
+\start \getbuffer \stop
+
+We are quite tolerant with regards to this specification and will provide less
+dense methods as well. Of course we need to implement a whole bunch of
+features but we will do this in such a way that we give users full control.
+
+\subject{encodings}
+
+By now we've reached a stage where we can get rid of font encodings. We now
+have the full unicode range available and no longer depend on the font
+encoding when we hyphenate. In a previous chapter we discussed the difference
+in size between formats.
+
+\starttabulate[|c|c|c|c|c|]
+\NC \bf date \NC \bf luatex \NC \bf pdftex \NC \NR
+\NC 2006-10-23 \NC 3 135 568 \NC 7 095 775 \NC \NR
+\NC 2007-02-18 \NC 3 373 206 \NC 7 426 451 \NC \NR
+\NC 2007-02-19 \NC 3 060 103 \NC 7 426 451 \NC \NR
+\stoptabulate
+
+The size of the formats has grown a bit due to a few more
+patterns and a extra preloaded encoding. But the \LUATEX\
+format shrinks some 10\% now that we can get rid of encoding
+support. Some support for encodings is still present, so that
+one can keep using the metric files that are installed (for
+instance in project related trees that have special fonts)
+although \AFM/\TYPEONE\ files or \OPENTYPE\ fonts will be used when
+available.
+
+A couple of years from now, we may throw away some \LUA\ code
+related to encodings.
+
+\subject{files}
+
+\TEX\ distributions tend to be rather large, both in terms of
+files and bytes. Fonts take most of the space. The merged
+\TEX Live 2007 trees contain some 60.000 files that take
+1.123 MBytes. Of this, 25.000 files concern fonts totaling
+to 431 MBytes. A recent \CONTEXT\ distribution spans 1200 files and
+20 MBytes and a bit more when third party modules are taken into
+account. The fonts in \TEX Live are distributed as follows:
+
+\starttabulate[|l|r|r|r|r|]
+\HL
+\NC \bf format \NC \bf files \NC \bf bytes \NC \NC \NC \NR
+\HL
+\NC AFM \NC 1.769 \NC 123.068.970 \NC 443 \NC 22.290.132 \NC \NR
+\NC TFM \NC 10.613 \NC 44.915.448 \NC 2.346 \NC 8.028.920 \NC \NR
+\NC VF \NC 3.798 \NC 6.322.343 \NC 861 \NC 1.391.684 \NC \NR
+\NC TYPE1 \NC 2.904 \NC 180.567.337 \NC 456 \NC 18.375.045 \NC \NR
+\NC TRUETYPE \NC 22 \NC 1.494.943 \NC \NC \NC \NR
+\NC OPENTYPE \NC 144 \NC 17.571.732 \NC \NC \NC \NR
+\NC ENC \NC 268 \NC 782.680 \NC \NC \NC \NR
+\NC MAP \NC 406 \NC 6.098.982 \NC 110 \NC 129.135 \NC \NR
+\NC OFM \NC 39 \NC 10.309.792 \NC \NC \NC \NR
+\NC OVF \NC 39 \NC 413.352 \NC \NC \NC \NR
+\NC OVP \NC 22 \NC 2.698.027 \NC \NC \NC \NR
+\NC SOURCE \NC 4.736 \NC 25.932.413 \NC \NC \NC \NR
+\HL
+\stoptabulate
+
+We omitted the more obscure file types. The last two columns show the
+numbers for one of my local font trees.
+
+In due time we will see a shift from \TYPEONE\ to \OPENTYPE\ and \TRUETYPE\
+files and because these fonts are more
+complete, they may take some more space. More important is that the \TEX\ specific
+font metric files will phase out and the less \TYPEONE\ fonts we have, the less \AFM\
+companions we need (\AFM\ files are not compressed and therefore relatively
+large). Mapping and encoding files can also go away.
+
+In \LUATEX\ we can do with less files, but the number of bytes may grow a bit
+depending on how much is catched (especially fonts). Anyhow, we can safely
+assume that a \LUATEX\ based distributions will carry less files and less
+bytes around.
+
+\subject{fallbacks}
+
+Do we need virtual fonts? Currently in \CONTEXT, when a font encoding is chosen, a
+fallback mechanism steps in as soon as a character is not in the encoding. So far,
+so good. But occasionally we run into a font that does not (completely) fits an
+encoding and we end up with defining a non standard one. In traditional \TEX\
+a side effects of font encodings is that they relate to hyphenation. \CONTEXT\ can
+deal with that comfortably and multiple instances of the same set of hyphenation
+patterns can be loaded, but for custom encodings this is kind of cumbersome.
+
+In \LUATEX\ we have just one font encoding: \UNICODE. When \OPENTYPE\ fonts are used,
+we don't expect many problems related to missing glyphs, but you can bet on it that
+they will occur. This is where in \CONTEXT\ \MKIV\ fallbacks will be used and this
+will be implemented using vitual fonts. The advantage of using virtual fonts is that
+we still deal with proper characters and hyphenation will take place as expected. And
+since virtual fonts can be defined on the fly, we can be flexible in our implementation.
+We can think of generic fallbacks, not much different than macro based representations,
+or font specific ones, where we even may rely on \METAPOST\ for generating the glyph
+data.
+
+How do we define a fall back character. When building this mechanism I used the
+\quote {\textcent} as an example. A cent symbol is roughly defined as follows:
+
+\starttyping
+local t = table.fastcopy(g.characters[0x0063]) -- mkiv function
+local s = fonts.constructors.scaled(g.fonts[1].size) -- mkiv function
+t.commands = {
+ {"push"},
+ {"slot", 1, c},
+ {"pop"},
+ {"right", .5*t.width},
+ {"down", .2*t.height},
+ {"rule", 1.4*t.height, .02*s}
+}
+t.height = 1.2*t.height
+t.depth = 0.2*t.height
+\stoptyping
+
+Here, \type {g} is a loaded font (table) which has type \type {virtual}. The
+first font in the \type {fonts} array is the main font. What happens here
+is the following: we assign the characteristics of \quote {c} to the cent
+symbol (this includes kerning and dimensions) and then define a command
+sequence that draws the \quote {c} and a vertical rule through it.
+
+The real code is slightly more complicated because we need to take care of
+italic properties when applicable and because we have added some tracing too.
+While playing with this kind of things, it becomes clear what features are
+handy, and the reason that we now have a virtual command \type {comment} is
+that it permits us to implement tracing (using for instance color specials).
+
+\def\TestLine#1%
+ {\start
+ \font\test=#1\relax
+ \test
+ c\quad
+ \textcent\quad
+ \ruledhbox{c}\quad
+ \ruledhbox{\textcent}\quad
+ \scaron\quad
+ \eacute\quad
+ \adiaeresis\quad
+ \udiaeresis\quad
+ \char 465\quad
+ \char 463\quad
+ \char7685\quad
+ \stop
+ \blank}
+
+\TestLine {lmroman10-regular@demo-2 at 24pt}
+\TestLine {lmroman10-italic@demo-2 at 24pt}
+
+The previous lines are typeset using a similar specification as mentioned
+before:
+
+\starttyping
+\font\test=lmroman10-regular@demo-2
+\stoptyping
+
+Without the fallbacks we get:
+
+\TestLine {lmroman10-regular at 24pt}
+\TestLine {lmroman10-italic at 24pt}
+
+And with normal (non forced fallbacks) it looks as follows. As it happens,
+this font has a cent symbol so no fallback is needed.
+
+\TestLine {lmroman10-regular@demo-3 at 24pt}
+\TestLine {lmroman10-italic@demo-3 at 24pt}
+
+The font definition callback intercepts the \type {demo-2} and a couple of
+chained lua functions make sure that characters missing in the font are
+replaced by fallbacks. In the case of missing composed characters, they are
+constructed from their components. In this particular example we have told
+the handler to assume that all composed characters are missing.
+
+\subject{memory}
+
+Traditional \TEX\ has been designed for speed and a small memory footprint. Todays
+implementations are considerably more generous with the amount of memory that
+you can use (hash, fonts, main memory, patterns, backend, etc). Depending
+on how complicated a document layout it, memory may run into tens of megabytes.
+
+Because \LUATEX\ is not only suitable for wide fonts, but also does away with some of
+the optimizations in the \TEX\ code that complicate extensions, it has a larger
+footprint that \PDFTEX. When implementing the \OPENTYPE\ font basics, we did quite
+some tests with respect to memory usage. Getting the numbers right is non trivial
+because the \LUA\ garbage collector is interfering. For instance, on my machine a
+test file with the regular \CONTEXT\ setup of of Latin Modern fonts made \LUA\
+allocate 130 MB, while the same run on Taco's machine took 100 MB.
+
+When a font data table is constructed, it is handled over to \TEX, and turned into
+the internal font data structures. During the construction of that \TABLE\ at the
+\LUA\ end, \CONTEXT\ \MKIV\ disables the garbage collector. By doing this, the time
+needed to construct and scale a font can be halved. Curious to the amount of memory
+involved in passing such a table, I added the following piece of code:
+
+\starttyping
+if type(fontdata) == "table" then
+ local s = statistics.luastate_bytes
+ local t = table.copy(fontdata)
+ local d = statistics.luastate_bytes-s
+ texio.write_nl(string.format("table memory footprint: %s",d))
+end
+\stoptyping
+
+It turned out that a Regular Latin Modern font (\OPENTYPE) takes around
+800 KB. However, more interesting was that by adding this snippet of testcode
+which duplicted the table in order to measure its size, the total memory footprint
+dropped to 100 MB (about the amount used on Taco's machine). This demonstrates
+that one should be very careful with drawing conclusions.
+
+Because fonts are rather important in \TEX\ and because there can be lots of
+them used, it makes sense to keep an eye on memory as well as performance.
+Because many manipulations now take place in \LUA, it no longer makes sense
+to let \TEX\ buffer fonts. In plain \TEX\ one finds these magic
+
+\starttyping
+\font\preloaded=cmr10
+\font\preloaded=cmr12
+\stoptyping
+
+lines. The second definitions obscures the first, but the \type {cmr10} stays
+loaded.
+
+\starttyping
+\font\one=cmr10 at 10pt
+\font\two=cmr10 at 10pt
+\stoptyping
+
+These two definitions make \TEX\ load the font only once. However, since
+we can now delegate loading to \LUA, \TEX\ no longer helps us there. For instance,
+\TEX\ has no knowledge to what extend this \type {cmr10} font has been manipulated
+and therefore both instances may actually differ.
+
+When you use a callback to define the font, \TEX\ passes a font id number. You can
+use this number as a reference to a loaded font (that is, passed to \TEX). If
+instead of a table, you return a number, \TEX\ will reuse the already loaded font.
+This feature can save you a lot of time, especially when a macro package (like
+\CONTEXT) defines fonts dynamically which means that when grouping is used, fonts
+get (re)defined a lot. Of course additional caching can take place at the \LUA\ end,
+but there one needs to take into account more than just the scaled instance. Think of
+\OPENTYPE\ features or virtual font properties. The following are quite certainly
+different setups, in spite of the common size.
+
+\starttyping
+\font\one=lmr10@demo-1 at 10pt
+\font\two=lmr10@demo-2 at 10pt
+\stoptyping
+
+When scaling a font, one not only needs to handle the regular glyph dimensions, but also the
+kerning tables. We found out that dealing with such issues takes some 25\% of the time
+spent on loading Latin Modern fonts that have rather extensive kerning tables.
+When creating a virtual font, copying glyph tables may happen a lot. Deep copying
+tables takes a bit of time. This is one of the reasons why we discussed (and consider)
+some dedicated support functions so that copying and recalculating tables happens faster
+(less costly hash lookups and such). On the other hand, the time wasted on calculations
+(including rounding to scaled points) can be neglected.
+
+The following table shows what happens when we enforce a different
+garbage collecting scheme. This test was triggered by another experiment
+where at regular time, for instance after a pag eis shipped out, say
+
+\starttyping
+collectgarbage("collect")
+\stoptyping
+
+However, such a complete sweep has drastic consequences for the runtime.
+But, since the memory footprint becomes 10--15\% less by doing so, we
+played a bit with
+
+\starttyping
+collectgarbage("setstepmul", somenumber)
+\stoptyping
+
+When processing a not so large file but one that loads a bunch of open type
+fonts, we get the following values. The left set is on linux (Taco's machine)
+and the right set in mine.
+
+\starttabulate[|r|r|r|r|r|]
+\NC \bf stepmul \NC \bf run (s) \NC \bf mem (MB) \NC \bf run (s) \NC \bf mem (MB) \NC \NR
+\HL
+\NC 200 \NC 1.58 \NC 69.14 \NC 5.6 \NC 84.17 \NC \NR
+\NC 1000 \NC 1.63 \NC 69.14 \NC 6.5 \NC 72.32 \NC \NR
+\NC 2000 \NC 1.64 \NC 60.66 \NC 6.8 \NC 73.53 \NC \NR
+\NC 10000 \NC 1.71 \NC 59.94 \NC 7.0 \NC 72.30 \NC \NR
+\stoptabulate
+
+Since I use an old laptop running Windows with a probably
+different \TEX\ configuration (fonts), and under some load, both columns
+don't compare well, but the general idea is the same. For practical usage
+a value of 1000 is probably best, especially because memory intensive font
+and script loading only happens at the first couple of pages.
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/mk/mk-goingbeta.tex b/doc/context/sources/general/manuals/mk/mk-goingbeta.tex
new file mode 100644
index 000000000..9937a373d
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-goingbeta.tex
@@ -0,0 +1,343 @@
+% language=uk
+
+\startcomponent mk-goingbeta
+
+\environment mk-environment
+
+\doifmodeelse {tug} {
+
+ \title {Lua\TeX\ going beta}
+
+ \subject{by Hans Hagen \& Taco Hoekwater}
+
+ This is Chapter~XI from \notabene {\CONTEXT, from \MKII\ to \MKIV}, a document
+ that describes our explorations, experiments and decisions made while
+ we develop \LUATEX.
+
+ \blank[3*big]
+
+} {
+
+ \chapter {Going beta}
+
+}
+
+\subject{introduction}
+
+We're closing in on the day that we will go beta with \LUATEX\ (end of July
+2007). By now we have a rather good picture of its potential and to what
+extend \LUATEX\ will solve some of our persistent problems. Let's first
+summarize our reasons for and objectives with \LUATEX.
+
+\startitemize
+
+\item The world has moved from 8~bits to 32~bits and more, and this is
+quite noticeable in the arena of fonts. Although \TYPEONE\ fonts could host
+more than 256 glyphs, the associated technology was limited to 256. The advent
+of \OPENTYPE\ fonts will make it easier to support multiple languages at the
+same time without the need to switch fonts at awkward times.
+
+\item At the same time \UNICODE\ is replacing 8~bit based encoding vectors and
+code pages (input regimes). The most popular and rather efficient \UTF8 encoding
+has become a de factor standard in document encoding and interchange.
+
+\item Although we can do real neat tricks with \TEX, given some nasty programming,
+we are touching the limits of its possibilities. In order for it to survive we
+need to extend the engine but not at the cost of base compatibility.
+
+\item Coding solutions in a macro language is fine, but sometimes you long to a more
+procedural approach. Manipulating text, handling \IO, interfacing \unknown\ the
+technology moves on and we need to move along too.
+
+\stopitemize
+
+Hence \LUATEX: a merge of the mainstream traditional \TEX\ engines, stripped from
+broken or incomplete features and opened up to an embedded \LUA\ scripting engine.
+
+We will describe the impact of this new engine by starting from its core components
+reflected in the specific \LUA\ interface libraries. Missing here is embedded support
+for \METAPOST, because it's not yet there (apart from the fact that we use \LUA\ to
+convert \METAPOST\ graphics into \TEX). Also missing is the interfacing to the \PDF\
+backend, which is also on the agenda for later. Special extensions, for instance those
+dealing with runtime statistics are also not discussed. Since we use \CONTEXT\ as
+testbed, we will refer to the \LUATEX\ aware version of this macro package, \MKIV, but
+most conclusions are rather generic.
+
+\subject{tex internals}
+
+In order to manipulate \TEX's data structures, we need access to all those registers.
+Already early in the development, dimension and counters were accessible and when
+token and node interfaces were implemented, those registers also were interfaced.
+
+Those who read the previous chapters will have noticed that we hardly discussed this
+option. The reason is that we didn't yet needed that access much in order to implement
+font support and list processing. After all, most of the data that we need to access and
+manipulate is not in the registers at all. Information meant for \LUA\ can be stored
+in \LUA\ data structures. In fact, the basic call
+
+\starttyping
+\directlua 0 {some lua code}
+\stoptyping
+
+has shown to be a pretty good starting point and the fact that one can print back to
+the \TEX\ engine overcomes the need to store results in shared variables.
+
+\starttyping
+\def\valueofpi{\directlua0{tex.sprint(math.pi()}}
+\stoptyping
+
+The number of such direct calls is not that large anyway. More often a call to \LUA\
+will be initiated by a callback, i.e.\ a hook into the \TEX\ machinery.
+
+What will be the impact of access on \CONTEXT\ \MKIV ? This is yet hard to tell. In a
+later stage of the development, when parts of the \TEX\ machinery will be rewritten in
+order to get rid of the current global nature of many variables, we will gain more
+control and access to \TEX's internals. Core functionality will be isolated, can be
+extended and|/|or overloaded and at that moment access to internals is much more
+needed. But certainly that will be beyond the current registers and variables.
+
+\subject{callbacks}
+
+These are the spine of \LUATEX: here both worlds communicate with each other. A callback
+is a place in the \TEX\ kernel where some information is passed to \LUA\ and some result
+is returned that is then used along the road. The reference manual mentions them all and
+we will not repeat them here. Interesting is that in \MKIV\ most of them are used and for
+tasks that are rather natural to their place and function.
+
+\starttyping
+callback.register("tex_wants_to_do_this",
+ function but_use_lua_to_do_it_instead(a,b,c)
+ -- do whatever you like with a, b and c
+ return a, b, c
+ end
+)
+\stoptyping
+
+The impact of callbacks on \MKIV\ is big. It provides us a way to solve persistent
+problems or reimplement existing solutions in more convenient ways. Because we tested
+realistic functionality on real (moderately complex) documents using a pretty large
+macro package, we can safely conclude that callbacks are quite efficient. Stepwise
+\LUA\ kicks in in order to:
+
+\startitemize[packed]
+\item influence the input medium so that it provides a sequence of \UTF\ characters
+\item manipulate the stream of characters that will be turned into a list of tokens
+\item convert the list of tokens into another list of tokens
+\item enhance the list of nodes that will be turned into a typeset paragraph
+\item tweak the mechanisms that come into play when lines are constructed
+\item finalize the result that will end up in the output medium
+\stopitemize
+
+Interesting is that manipulating tokens is less useful than it may look at first
+sight. This has to do with the fact that it's (mostly) an expanded stream and at that
+time we've lost some information or need to do quite some coding in order to analyze
+the information and act upon it.
+
+Will \CONTEXT\ users see any of this? Chances are small that they will, although we
+will provide hooks so that they can add special code themselves. Users activating
+a callback has some danger, since it may overload already existing functionality.
+Chaining functionality in a callback also has drawbacks, if only that one may be
+confronted with already processed results and|/|or may destroy this result in
+unpredictable ways. So, as with most low level \TEX\ features, \CONTEXT\ users will
+work with more abstract interfaces.
+
+\subject{in- and output}
+
+In \MKIV\ we will no longer use the \KPSE\ library directly. Instead we use a
+reimplementation in \LUA\ that not only is more efficient, but also more powerful:
+it can read from \ZIP\ files, use protocols, be more clever in searching, reencodes
+the input streams when needed, etc. The impact on \MKIV\ is large. Most \TEX\ code
+that deals with input reencoding has gone away and is replaced by \LUA\ code.
+
+Although it is not directly related with reading from the input medium, in that stage
+we also replaced verbatim handling code. Such (often messy) catcode related situations
+are now handled more flexible, thanks to fast catcode table switching (a new
+\LUATEX\ feature) and features like syntax highlighting can be made more neat.
+
+Buffers, a quite old but frequently used feature of \CONTEXT, are now kept in
+memory instead of files. This speeds up runs. Auxiliary data, aka multi||pass
+information, will no longer be stored in \TEX\ files but in \LUA\ files. In
+\CONTEXT\ we have one such auxiliary file and in \MKII\ this file is selectively
+filtered, but in \MKIV\ we will be less careful with memory and load all that
+data once. Such speed improvements compensate the fact that \LUATEX\ is somewhat
+slower than it's ancestor \PDFTEX. (Actually, the fact that \LUATEX\ is a bit
+slower that \PDFTEX\ is mostly due to the fact that it has \ALEPH\ code on
+board.)
+
+Users often wonder why there are so many temporary files, but these mostly relate
+to \METAPOST\ support. These will go away once we have \METAPOST\ as a library.
+
+In a similar way support for \XML\ will be enriched. We already have experimental
+loaders, filters and other code, and integration is on the agenda. Since \CONTEXT\ uses
+\XML\ for some sub systems, this may have some impact.
+
+Other \IO\ related improvements involve debugging, error handling and logging. We can pop
+up helpers and debug screens (\MKIV\ can produce \XHTML\ output and then launch a
+browser). Users can choose more verbose logging of \IO\ and ask for log data to be
+formatted in \XML. These parts need some additional work, because in the end we will
+also reimplement and extend \TEX's error handling.
+
+Another consequence of this will be that we will be able to package \TEX\ more
+conveniently. We can put all the files that are needed into a \ZIP\ file so that we only
+need to ship that \ZIP\ file and a binary.
+
+
+\subject{font readers}
+
+Handling \OPENTYPE\ involves more that just loading yet another font format. Of course
+loading an \OPENTYPE\ file is a necessity but we need to do more. Such fonts come with
+features. Features can involve replacing one representation of a character by another
+one of combining sequences into other sequences and finaly resolving them to one or more
+glyphs.
+
+Given the numerous options we will have to spend quite some time on extending \CONTEXT\
+with new features. Instead of defining more and more font instances (the traditional \TEX\ way
+of doing things) we will will provides feature switching. In the end this will make
+the often confusing font mechanisms less complex for the user to understand. Instead of
+for instance loading an extra font (set) that provides old style numerals, we will
+decouple this completely from fonts and provide it as yet another property of a piece
+of text. The good news is that much of the most important machinery is alresady in
+place (ligature building and such). Here we also have to decide what we let \TEX\ do
+and what we do by processing node lists. For instance kerning and ligature building
+can either be done by \TEX\ or by \LUA. Given the fact that \TEX\ does some juggling
+with character kerning while determining hyphenation points, we can as well disable
+\TEX's kerning and let \LUA\ handle it. Thereby \TEX\ only has to deal with paragraph
+building. (After all, we need to leave \TEX\ some core functionality to deal with.)
+
+Another everlasting burden on macro writers and users is dealing with character
+representations missing from a font. Of course, since we use named glyphs in
+\CONTEXT\ \MKII\ already much of this can be hidden, but in \MKIV\ we can
+create virtual fonts on the fly and keep thinking in terms of characters and
+glyphs instead of dealing with boxes and other structures that don't go well with
+for instance hyphenating words.
+
+This brings us to hyphenation, historically bound to fonts in traditional \TEX. This
+dependency will go away. In \MKII\ we already ship \UTF8\ based patterns fore some time
+and these can be conveniently used in \MKIV\ too. We experimented with using hyphenated
+word lists and this looks promising. You may expect more advanced ways of dealing with
+words, hyphenation and paragraph building in the near future. When we presented the
+first version of \LUATEX\ a few years ago, we only had the basic \type {\directlua} call
+available and could do a bit of string manipulation on the input. A fancy demo was to
+color wrongly spelled words. Now we can do that more robustly on the node lists.
+
+Loading and preparing fonts for usage in \LUATEX\ or actually \MKIV\ because this depends
+on the macro package takes some runtime. For this reason we introduces caching
+into \MKIV: data that is used frequently is written to a cache and converted to \LUA\
+bytecode. Loading the converted files is incredibly fast. Of course there is aprice to
+pay: disk space, but that comes cheap these days. Also, it may as well be compensated
+by the fact that we can kick out many redundant files from the core \TEX\ distributions
+(metric files for instance).
+
+\subject{tokens handlers}
+
+Do we need to handle tokens? So far in experimental \MKIV\ code we only used these hooks
+to demonstrate what \TEX\ does with your characters. For a while we also constructed
+token lists when we wanted to inject \type {\pdfliteral} code in node lists, but that
+became obsolete when automatic string to token conversion was introduced in the node
+conversion code. Now we inject literal whatsit nodes. It may be worth noticing that
+playing with token lists gave us some good insight in bottlenecks because quite some
+small table allocation and garbage collections goes on.
+
+\subject{nodes and attributes}
+
+These are the most promissing new features. In itself, nodes are not new, nor are
+attributes. In some sense when we use primitives like \type {\hbox}, \type {\vskip},
+\type {\lastpenalty} the result is a node, but we can only control and inspect their
+properties within hard coded bounds. We cannot really look into boxes, and the last
+penalty may be obscured by a whatsit (a mark, a special, a write, etc.). Attributes
+could be fakes with marks and macro bases stacks of states. Native attributes
+are more powerful and each node can cary a truckload of them.
+
+With \LUATEX, out of a sudden we can look into \TEX's internals and manipulate
+them. Although I don't claim to be a real expert on these internals, even after
+over a decade of \TEX\ programming, I'm sometimes surprised what I found there.
+When we are playing with these interfaces, we often run into situations
+where we need to add much print statements to the \LUA\ code in order to find
+out what \TEX\ is returning. It all has to do with the way \TEX\ collects
+information and when it decides to act. In regular \TEX\ much goes unnoticed, but
+when one has for instance a callback that deals with page building there are many
+places where this gets called and some of these places need special treatment.
+
+Undoubtely this will have a huge impact on \CONTEXT\ \MKIV. Instead of parsing
+an input stream, we can now manipulate node lists in order to achieve (slight)
+inter||character spacing which is often needed in sectioning titles. The nice
+thing about this new approach is that we no longer have interference from
+characters that need multiple tokens (input characters) in order to be
+constructed, which complicates parsing (needed to split glyphs in \MKII).
+
+Signaling where to letterspace is done with the mentioned attributes. There can be
+many of them and they behave like fonts: they obey grouping, travel with the nodes
+and are therefore insensitive for box and page splitting. They can be set at the
+\TEX\ end but needs to be handled at the \LUA\ side. One may wonder what kind
+of macro packages would be around when \TEX\ has attributes right from its start.
+
+In \MKII\ letterspacing is handled by parsing the input and injecting skips.
+Another approach would be to use a font where each character has more kerns or space
+around it (a virtual font can do that). But that would not only demand knowledge of
+what fonts need that that treatment, but also many more fonts and generating them is
+no fun for users. In \PDFTEX\ there is a letterspace feature, where virtual fonts
+are generated on the fly, and with such an approach one has to compensate for the
+first and last character in a line, in order to get rid of the left- and
+rightmost added space (being part of the glyph). The solution where nodes are
+manipulated does put that burden upon the user.
+
+Another example of node processing is adding specific kerns around some punctuation
+symbols, as is custom in French. You don't want to know what it takes to do that
+in traditional \TEX, but if I mention the fact that colons become active characters
+you can imagine the nightmare. Hours of hacking and maybe even days of dealing with
+mechanisms that make these active colons workable in places where colons are used
+for non text are now even more wasted time if you consider that it takes a few lines
+of code in \MKIV. Currently we let \CONTEXT\ support both good old \TEX\
+(represented by \PDFTEX), \XETEX\ (a \UNICODE\ and \OPENTYPE\ aware variant) and
+\LUATEX\ by shared and dedicated \MKII\ and \MKIV\ code.
+
+Vertical spacing can be a pain. Okay, currently \MKII\ has a rather sophisticated way to
+deal with vertical spacing in ways that give documents a consistent look and feel, but
+every now and then we run into border cases that cannot be dealt with simply because
+we cannot look back in time. This is needed because \TEX\ adds content to the main
+vertical list and then it's gone from our view. Take for instance section titles. We don't
+want them dangling at the bottom of a page. But at the same time we want itemized lists
+to look well, i.e.\ keep items together in some situations. Graphics that follow a section
+title pose similar problems. Adding penalties helps but these may come too late, or
+even worse, they may obscure previous skips which then cannot be dealt with by successive
+skips. To simplify the problem: take a skip of 12pt, followed by a penalty, followed by
+another skip of 24pt. In \CONTEXT\ this has to become a penalty followed by one skip
+of 24pt.
+
+Dealing with this in the page builder is rather easy. Ok, due to the way \TEX\ adds
+content to the page stream, we need to collect, treat and flush, but currently this
+works all right. In \CONTEXT\ \MKIV\ we will have skips with three additional properties:
+priority over other skips, penalties, and a category (think of: ignore, force,
+replace, add).
+
+When we experimented with this kind of things we quickly decided that additional
+experiments with grid snapping also made sense. These mechanisms are among the more
+complex ones on \CONTEXT. A simple snap feature took a few lines of \LUA\ code and
+hooking it into \MKIV\ was not that complex either. Eventually we will reimplement
+all vertical spacing and grid snapping code of \MKII\ in \LUA. Because one of
+\CONTEXT\ column mechanism is grid aware, we may as well adath that and|/|or implement
+an additional mechanism.
+
+A side effect of being able to do this in \LUATEX\ is that the code taken from \PDFTEX\
+is cleaned up: all (recently added) static kerning code is removed (inter||character
+spacing, pre- and post character kerning, experimental code that can fix the heights
+and depths of lines, etc.). The core engine will only deal with dynamic features,
+like \HZ\ and protruding.
+
+So, the impact on \MKIV\ of nodes and attributes is pretty big! Horizontal spacing isues,
+vertical spacing, grid snapping are just a few of the things we will reimplement. Other
+things are line numbering, multiple content streams with synchronization, both are
+already present in \MKII\ but we can do a better job in \MKIV.
+
+\subject{generic code}
+
+In the previous text \MKIV\ was mentioned often, but some of the features are rather
+generic in nature. So, how generic can interfaces be implemented? When the \MKIV\ code
+has matured, much of the \LUA\ and glue||to||\TEX\ code will be generic in nature.
+Eventually \CONTEXT\ will become a top layer on what we internally call \METATEX, a
+collection of kernel modules that one can use to build specialized macro packages.
+To some extent \METATEX\ can be for \LUATEX\ what plain is for \TEX. But if and how
+fast this will be reality depends on the amount of time that we (and other members of
+the \CONTEXT\ development team) can allocate to this.
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/mk/mk-goingutf.tex b/doc/context/sources/general/manuals/mk/mk-goingutf.tex
new file mode 100644
index 000000000..1d81cc999
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-goingutf.tex
@@ -0,0 +1,187 @@
+% language=uk
+
+\startcomponent mk-gointutf
+
+\environment mk-environment
+
+\chapter{Going \UTF}
+
+\LUATEX\ only understands input codes in the Universal Character
+Set Transformation Format, aka \UCS\ Transformation Format, better
+known as: \UTF. There is a good reason for this universal view
+on characters: whatever support gets hard coded into the programs,
+it's never enough, as 25 years of \TEX\ history have clearly
+demonstrated. Macro packages often support more or less standard
+input encodings, as well as local standards, user adapted ones,
+etc.
+
+There is enough information on the Internet and in books about what
+exactly is \UTF. If you don't know the details yet: \UTF\ is a
+multi||byte encoding. The characters with a bytecode up to 127 map
+onto their normal \ASCII\ representation. A larger number indicates
+that the following bytes are part of the character code. Up to 4~bytes
+make an \UTF-8 code, while \UTF-16 always uses two pairs of bytes.
+
+\starttabulate[|c|c|c|c|c|]
+\NC \bf byte 1 \NC \bf byte 2 \NC \bf byte 3 \NC \bf byte 4 \NC \bf unicode \NC \NR
+\NC 192--223 \NC 128--191 \NC \NC \NC 0x80--0x7f{}f \NC \NR
+\NC 224--239 \NC 128--191 \NC 128--191 \NC \NC 0x800--0xf{}f{}f{}f \NC \NR
+\NC 240--247 \NC 128--191 \NC 128--191 \NC 128--191 \NC 0x10000--0x1f{}f{}f{}f \NC \NR
+\stoptabulate
+
+In \UTF-8 the characters in the range $128$--$191$ are illegal
+as first characters. The characters 254 and 255 are
+completely illegal and should not appear at all since they are
+related to \UTF-16.
+
+Instead of providing a never|-|complete truckload of other input
+formats, \LUATEX\ sticks to one input encoding but at the same
+time provides hooks that permits users to write filters that
+preprocess their input into \UTF.
+
+While writing the \LUATEX\ code as well as the \CONTEXT\ input
+handling, we experimented a lot. Right from the beginning we had
+a pretty clear picture of what we wanted to achieve and how it
+could be done, but in the end arrived at solutions that permitted
+fast and efficient \LUA\ scripting as well as a simple interface.
+
+What is involved in handling any input encoding and especially
+\UTF?. First of all, we wanted to support \UTF-8 as well as
+\UTF-16. \LUATEX\ implements \UTF-8 rather straightforward: it
+just assumes that the input is usable \UTF. This means that
+it does not combine characters. There is a good reason for this:
+any automation needs to be configurable (on|/|off) and the more
+is done in the core, the slower it gets.
+
+In \UNICODE, when a character is followed by an \quote
+{accent}, the standard may prescribe that these two characters are
+replaced by one. Of course, when characters turn into glyphs, and
+when no matching glyph is present, we may need to decompose any
+character into components and paste them together from glyphs in
+fonts. Therefore, as a first step, a collapser was written. In the
+(pre|)|loaded \LUA\ tables we have stored information about
+what combination of characters need to be combined into another
+character.
+
+So, an \type {a} followed by an \type {`} becomes \type {à} and
+an \type {e} followed by \type {"} becomes \type {ë}. This
+process is repeated till no more sequences combine. After a few
+alternatives we arrived at a solution that is acceptably fast:
+mere milliseconds per average page. Experiments demonstrated that
+we can not gain much by implementing this in pure~C, but we did
+gain some speed by using a dedicated loop||over||utf||string
+function.
+
+A second \UTF\ related issue is \UTF-16. This coding scheme comes
+in two endian variants. We wanted to do the conversion in \LUA,
+but decided to play a bit with a multi||byte file read function.
+After some experiments we quickly learned that hard coding such
+methods in \TEX\ was doomed to be complex, and the whole idea
+behind \LUATEX\ is to make things less complex. The complexity has
+to do with the fact that we need some control over the different
+linebreak triggers, that is, (combinations of) character 10 and/or 13. In
+the end, the multi||byte readers were removed from the code and we
+ended up with a pure \LUA\ solution, which could be sped up by
+using a multi||byte loop||over||string function.
+
+Instead of hard coding solutions in \LUATEX\ a couple of fast
+loop||over||string functions were added to the \LUA\ string
+function repertoire and the solutions were coded in \LUA. We did
+extensive timing with huge \UTF-16 encoded files, and are
+confident that fast solutions can be found. Keep in mind that
+reading files is never the bottleneck anyway. The only drawback
+of an efficient \UTF-16 reader is that the file is loaded into
+memory, but this is hardly a problem.
+
+Concerning arbitrary input encodings, we can be brief. It's rather
+easy to loop over a string and replace characters in the $0$--$255$
+range by their \UTF\ counterparts. All one needs is to maintain
+conversion tables and \TEX\ macro packages have always done that.
+
+Yet another (more obscure) kind of remapping concerns those special
+\TEX\ characters. If we use a traditional \TEX\ auxiliary file, then
+we must make sure that for instance percent signs, hashes, dollars
+and other characters are handled right. If we set the catcode of
+the percent sign to \quote {letter}, then we get into trouble when
+such a percent sign ends up in the table of contents and is read in
+under a different catcode regime (and becomes for instance a comment
+symbol). One way to deal with such situations is to temporarily move
+the problematic characters into a private \UNICODE\ area and deal
+with them accordingly. In that case they no longer can interfere.
+
+Where do we handle such conversions? There are two places where
+we can hook converters into the input.
+
+\startitemize[n,packed]
+\item each time when we read a line from a file, i.e.\ we can hook
+ conversion code into the read callbacks
+\item using the special \type {process_input_buffer} callback which
+ is called whenever \TEX\ needs a new line of input
+\stopitemize
+
+Because we can overload the standard file open and read functions,
+we can easily hook the \UTF\ collapse function into the readers.
+The same is true for the \UTF-16\ handler. In \CONTEXT, for
+performance reasons we load such files into memory, which means
+that we also need to provide a special reader to \TEX. When
+handling \UTF-16, we don't need to combine characters so that stage
+is skipped then.
+
+So, to summarize this, here is what we do in \CONTEXT. Keep in
+mind that we overload the standard input methods and therefore
+have complete control over how \LUATEX\ locates and opens files.
+
+\startitemize[n]
+
+\item When we have a \UTF\ file, we will read from that file line
+ by line, and combine characters when collapsing is enabled.
+
+\item When \LUATEX\ wants to open a file, we look into the first
+ bytes to see if it is a \UTF-16\ file, in either big or
+ little endian format. When this is the case, we load the
+ file into memory, convert the data to \UTF-8, identify
+ lines, and provide a reader that will give back the file
+ linewise.
+
+\item When we have been told to recode the input (i.e.\ when we have
+ enabled an input regime) we use the normal line||by||line
+ reader and convert those lines on the fly into valid \UTF.
+ No collapsing is needed.
+
+\stopitemize
+
+Because we conduct our experiments in \CONTEXT\ \MKIV\ the code that
+we provide may look a bit messy and more complex than the previous
+description may suggest. But keep in mind that a mature macro
+package needs to adapt to what users are accustomed to. The fact
+that \LUATEX\ moved on to \UTF\ input does not mean that all the
+tools that users use and the files that they have produced over
+decades automagically convert as well.
+
+Because we are now living in a \UTF\ world, we need to keep that
+in mind when we do tricky things with sequences of characters, for
+instance in processing verbatim. When we implement verbatim in
+pure \TEX\ we can do as before, but when we let \LUA\ kick in, we
+need to use string methods that are \UTF-aware. In addition to
+the linked-in \UNICODE\ library, there are dedicated iterator
+functions added to the \type {string} namespace; think of:
+
+\starttyping
+for c in string.utfcharacters(str) do
+ something_with(c)
+end
+\stoptyping
+
+Occasionally we need to output raw 8-bit code, for instance
+to \DVI\ or \PDF\ backends (specials and literals). Of course
+we could have cooked up a truckload of conversion functions
+for this, but during one of our travels to a \TEX\ conference,
+we came up with the following trick.
+
+We reserve the top 256 values of the \UNICODE\ range, starting at
+hexadecimal value 0x110000, for byte output. When writing to an
+output stream, that offset will be subtracted. So, 0x1100A9 is written
+out as hexadecimal byte value A9, which is the decimal value 169, which
+in the Latin~1 encoding is the slot for the copyright sign.
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/mk/mk-halfway.tex b/doc/context/sources/general/manuals/mk/mk-halfway.tex
new file mode 100644
index 000000000..badb5d428
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-halfway.tex
@@ -0,0 +1,377 @@
+% language=uk
+
+\environment mk-environment
+
+\startcomponent mk-halfway
+
+\chapter{Halfway}
+
+\subject{introduction}
+
+We are about halfway into the \LUATEX\ project now. At the time of
+writing this document we are only a few days away from version
+0.40 (the Bacho\TEX\ cq.\ \TEX Live version) and around euro\TEX\
+2009 we will release version 0.50. Starting with version 0.30
+(which we released around the conference of the Korean \TEX\ User
+group meeting) all one-decimal releases are supported and usable
+for (controlled) production work. We have always stated that all
+interfaces may change until they are documented to be stable, and
+we expect to document the first stable parts in version 0.50.
+Currently we plan to release version 1.00 sometime in 2012, 30
+years after \TEX82, with 0.60 and 0.70 in 2010, 0.80 and 0.90 in
+2011. But of course it might turn out different.
+
+In this update we assume that the reader knows what \LUATEX\ is and
+what it does.
+
+\subject{design principles}
+
+We started this project because we wanted an extensible engine.
+We chose \LUA\ as the glue language. We do not regret this choice as it
+permitted us to open up \TEX's internals reasonably well. There have been
+a few extensions to \TEX\ itself, and there will be a few more, but none
+of them are fundamental in the sense that they influence
+
+typesetting. Extending \TEX\ in that area is up to the macro package
+writer, who can use the \LUA\ language combined with \TEX\ macros. In a
+similar fashion we made some decisions about \LUA\ libraries that are
+included. What we have now is what you will get. Future versions of
+\LUATEX\ will have the ability to load additional libraries but these
+will not be part of the core distribution. There is simply too much
+choice and we do not want to enter endless discussions about what is
+best. More flexibility would also add a burden on maintenance that we
+do not want. Portability has always been a virtue of \TEX\ and we want
+to keep it that way.
+
+\subject{lua scripting}
+
+Before 0.40 there could be multiple instances of the \LUA\ interpreter
+active at the same time, but we have now decided to limit the number of
+instances to just one. The reason is simple: sharing all functionality
+among multiple \LUA\ interpreter instances does more bad than good and
+\LUA\ has enough possibilities to create namespaces anyway. The new
+limit also simplifies the internal source code, which is a good
+thing. While the \type {\directlua} command is now sort of frozen, we
+might extend the functionality of \type {\latelua}, especially in
+relation to what is possible in the backend. Both commands still
+accept a number but this now refers to an index in a user||definable
+name table that will be shown when an error occurs.
+
+\subject {input and output}
+
+The current \LUATEX\ release permits multiple instances of \KPSE\
+which can be handy if you mix, for instance, a macro package and
+\MPLIB, as both have their own \quote{progname} (and engine) namespace.
+However, right from the start it has been possible to bring most input
+under \LUA\ control and one can overload the usual \KPSE\
+mechanisms. This is what we do in \CONTEXT\ (and probably only there).
+
+Logging, etc., is also under \LUA\ control. There is no support for
+writing to \TEX's opened output channels except for the log and the
+terminal. We are investigating limited write control to numbered
+channels but this has a very low priority.
+
+Reading from zip files and sockets has been available
+for a while now.
+
+Among the first things that have been implemented is a mechanism for
+managing category codes (\type{\catcode}) although this is not really
+needed for practical usage as we aim at full compatibility. It just
+makes printing back to \TEX\ from \LUA\ a bit more comfortable.
+
+\subject {interface to tex}
+
+Registers can always be accessed from \LUA\ by number and (when
+defined at the \TEX\ end) also by name. When writing to a register
+grouping is honored. Most internal registers can be accessed
+(mostly read-only). Box registers can be manipulated but users
+need to be aware of potential memory management issues.
+
+There will be provisions to use the primitives related to setting
+codes (lowercase codes and such). Some of this functionality will be
+available in version 0.50.
+
+\subject {fonts}
+
+The internal font model has been extended to the full \UNICODE\
+range. There are readers for \OPENTYPE, \TYPEONE, and traditional
+\TEX\ fonts. Users can create virtual fonts on the fly and have
+complete control over what goes into \TEX. Font specific features
+can either be mapped onto the traditional ligature and kerning
+mechanisms or be implemented in \LUA.
+
+We use code from \FONTFORGE\ that has been stripped to get a
+smaller code base. Using the \FONTFORGE\ code has the advantage
+that we get a similar view on the fonts in \LUATEX\ as in this
+editor which makes debugging easier and developing fonts more
+convenient.
+
+The interface is already rather stable but some of the keys in loaded
+tables might change. Almost all of the font interface will be stable
+in version 0.50.
+
+\subject {tokens}
+
+It is possible to intercept tokenization. Once intercepted, a token
+table can be manipulated before being piped back into \LUATEX. We
+still support \OMEGA's translation processes but that might become
+obsolete at some point.
+
+Future versions of \LUATEX\ might use \LUA's so-called \quote {user data}
+concept but the interface will mostly be the same. Therefore this
+subsystem will not be frozen yet in version 0.50.
+
+\subject {nodes}
+
+Users have access to the node lists in various stages. This interface
+has already been quite stable for some time but some cleanup might
+still take place. Currently the node memory maintenance is still
+explicit, but eventually we will make releasing unused nodes automatic.
+
+We have plans for keeping more extensive information within
+a paragraph (initial whatsit) so that one can build alternative
+paragraph builders in \LUA. There will be a vertical packer (in
+addition to the horizontal packer) and we will open up the page
+builder (inserts etc.). The basic interface will be stable in version
+0.50.
+
+\subject {attributes}
+
+This new kid on the block is now available for most subsystems but
+we might change some of its default behaviour. As of 0.40 you can
+also use negative values for attributes. The original idea of
+using negative values for special purposes has been abandoned as
+we consider a secondary (faster and more efficient) limited
+variant. The basic principles will be stable around version 0.50,
+but we reserve the freedom to change some aspects of attributes
+until we reach version 1.00.
+
+\subject {hyphenation}
+
+In \LUATEX\ we have clearly separated hyphenation, ligature
+building and kerning. Managing patterns as well as hyphenation is
+reimplemented from scratch but uses the same principles as
+traditional \TEX. Patterns can be loaded at run time and exceptions
+are quite efficient now. There are a few extensions, like embedded
+discretionaries in exceptions and pre- as well as posthyphens.
+
+On the agenda is fixing some \quote{hyphenchar} related issues and future
+releases might deal with compound words as well. There are some
+known limitations that we hope to have solved in version 0.50.
+
+\subject {images}
+
+Image handling is part of the backend. This part of the \PDFTEX\
+code has been rewritten and can now be controlled from \LUA. There
+are already a few more options than in \PDFTEX\ (simple
+transformations). The image code will also be integrated in the
+virtual font handler.
+
+\subject {paragraph building}
+
+The paragraph builder has been rewritten in \CCODE\ (soon to be
+converted back to \CWEB). There is a callback related to the builder
+so it is possible to overload the default line breaker by one written
+in \LUA.
+
+There are no further short|-|term revisions on the agenda, apart from
+writing an advanced (third order) Arabic routine for the Oriental
+\TEX\ project.
+
+Future releases may provide a bit more control over \type{\parshape}s
+and multiple paragraph shapes.
+
+\subject {metapost}
+
+The closely related \MPLIB\ project has resulted in a \METAPOST\
+library that is included in \LUATEX. There can be multiple
+instances active at the same time and \METAPOST\ processing is
+very fast. Conversion to \PDF\ is to be done with \LUA.
+
+On the to-do list is a bit more interoperability (pre- and
+postscript tables) and this will make it into release 0.50
+(maybe even in version 0.40 already).
+
+\subject {mathematics}
+
+Version 0.50 will have a stable version of \UNICODE\
+math support. Math is backward compatible but provides solutions
+for dealing with \OPENTYPE\ math fonts. We provide math lists in
+their intermediate form (noads) so that it is possible to
+manipulate math in great detail.
+
+The relevant math parameters are reorganized according to what
+\OPENTYPE\ math provides (we use the Cambria font as our reference). Parameters
+are grouped by style. Future versions of \LUATEX\ will build upon
+this base to provide a simple mechanism for switching style sets
+and font families in-formula.
+
+There are new primitives for placing accents (top and bottom
+variants and extensible characters), creating radicals, and making
+delimiters. Math characters are permitted in text mode.
+
+There will be an additional alignment mechanism analogous to
+what \MATHML\ provides. Expect more.
+
+\subject {page building}
+
+Not much work has been done on opening up the page builder
+although we do have access to the intermediate lists. This
+is unlikely to happen before 0.50.
+
+\subject {going cweb}
+
+After releasing version 0.50 around Euro\TEX\ 2009 there will be a
+period of relative silence. Apart from bug fixes and (private)
+experiments there will be no release for a while. At the time of the
+0.50 release the \LUATEX\ source code will probably be in plain C
+completely. After that is done, we will concentrate hard on
+consolidating and upgrading the code base back into \CWEB.
+
+\subject {cleanup}
+
+Cleanup of code is a continuous process. Cleanup is needed because
+we deal with a merge of traditional \TEX, \ETEX\ extensions,
+\PDFTEX\ functionality and some \OMEGA\ (\ALEPH) code.
+
+Compatibility is a prerequisite, with the exception of logging and
+rather special ligature reconstruction code.
+
+We also use the opportunity to slowly move away from all the global
+variables that are used in the \PASCAL\ version.
+
+\subject {alignments}
+
+We do have some ideas about opening up alignments, but it has a
+low priority and it will not happen before the 0.50 release.
+
+\subject {error handling}
+
+Once all code is converted to \CWEB, we will look into error
+handling and recovery. It has no high priority as it is easier to
+deal with after the conversion to \CWEB.
+
+\subject {backend}
+
+The backend code will be rewritten stepwise. The image related
+code has already been redone, and currently everything related to
+positioning and directions is redesigned and made more consistent.
+Some bugs in the \ALEPH\ code (inherited from \OMEGA) have been
+removed and we are trying to come up with a consistent way of dealing
+with directions. Conceptually this is somewhat messy because much
+directionality is delegated to the backend.
+
+We are experimenting with positioning (preroll) and better literal
+injection. Currently we still use the somewhat fuzzy \PDFTEX\ methods
+that evolved over time (direct, page and normal injection) but we
+will come up with a clearer model.
+
+Accuracy of the output (\PDF) will be improved and character
+extension (hz) will be done more efficiently. Experimental code
+seems to work okay. This will become available from release 0.40
+and onwards and further cleanup will take place when the \CWEB\
+code is there, as much of the \PDF\ backend code is already \CCODE.
+
+\subject{context mkiv}
+
+When we started with \LUATEX\ we decided to use a branch of
+\CONTEXT\ for testing as it involves quite drastic changes, many
+rewrites, a tight connection with binary versions, etc.
+
+As a result for some time we now have two versions of \CONTEXT: \MKII\
+and \MKIV, where the former targets \PDFTEX\ and \XETEX, and
+the latter exclusively uses \LUATEX. Although the user interface
+is downward compatible the code base starts to diverge more and
+more. Therefore at the last \CONTEXT\ meeting it was decided to
+freeze the current version of \MKII\ and only apply bug fixes
+and an occasional simple extension.
+
+This policy change opened the road to rather drastic splitting of the
+code, also because full compatibility between \MKII\ and \MKIV\ is not
+required. Around \LUATEX\ version 0.40 the new, currently still
+experimental, document structure related code will be merged into the
+regular \MKIV\ version. This might have some impact as it opens up new
+possibilities.
+
+\subject {the future}
+
+In the future, \MKIV\ will try to create (more) clearly separated
+layers of functionality so that it will become possible to make
+subsets of \CONTEXT\ for special purposes. This is done under the name
+\METATEX. Think of layering like:
+
+\startitemize[packed]
+\item \IO, catcodes, callback management, helpers
+\item input regimes, characters, filtering
+\item nodes, attributes and noads
+\item user interface
+\item languages, scripts, fonts and math
+\item spacing, par building and page construction
+\item \XML, graphics, \METAPOST, job management, and structure (huge impact)
+\item modules, styles, specific features
+\item tools
+\stopitemize
+
+\subject{fonts}
+
+At this moment \MKIV\ is already quite capable of dealing with
+\OPENTYPE\ fonts. The driving force behind this is the Oriental
+\TEX\ project which brings along some very complex and feature
+rich Arabic font technology. Much time has gone into reverse
+engineering the specification and behaviour of how these fonts
+behave in Uniscribe (which we use as our reference for Arabic).
+
+Dealing with the huge \CJK\ fonts is less a font issue and more
+a matter of node list processing. Around the annual meeting of
+the Korean User Group we got much of the machinery working, thanks
+to discussions on the spot and on the mailing list.
+
+\subject {math}
+
+Between \LUATEX\ versions 0.30 and 0.40 the math machinery was opened
+up (stage one). In order to test this new functionality, \MKIV's math
+subsystem (that was then already partially \UNICODE\ aware) had to be
+adapted.
+
+First of all \UNICODE\ permits us to use only one math family and so
+\MKIV\ now does that. The implementation uses Microsoft's Cambria
+Math font as a benchmark. It creates virtual fonts from the other (old
+and new) math fonts so they appear to match up to Cambria
+Math. Because the \TEX\ Gyre math project is not yet up to speed \MKIV\
+currently uses virtual variants of these fonts that are created at
+run time. The missing pieces in for instance Latin Modern and friends
+are compensated for by means of virtual characters.
+
+Because it is now possible to parse the intermediate noad lists \MKIV\ can
+do some manipulations before the formula is typeset. This is for
+instance used for alphabet remapping, forcing sizes, and spacing
+around punctuation.
+
+Although \MKIV\ already supports most of the math that users expect
+there is still room for improvement once there is even more control
+over the machinery. This is possible because \MKIV\ is not bound to
+downward compatibility.
+
+As with all other \LUATEX\ related \MKIV\ code, it is expected that we
+will have to rewrite most of the current code a few times as we
+proceed, so \MKIV\ math support is not yet stable either. We can take
+such drastic measures because \MKIV\ is still experimental and because
+users are willing to do frequent synchronous updating of macros and
+engine. In the process we hope to get away from all ad||hoc boxing and
+kerning and whatever solutions for creating constructs, by using
+the new accent, delimiter, and radical primitives.
+
+\subject {tracing and testing}
+
+Whenever possible we add tracing and visualization features to
+\CONTEXT\ because the progress reports and articles need them. Recent
+extensions concerned tracing math and tracing \OPENTYPE\ processing.
+
+The \OPENTYPE\ tracing options are a great help in stepwise
+reaching the goals of the Oriental \TEX\ project. This project
+gave the \LUATEX\ project its initial boost and aims at high
+quality right|-|to|-|left typesetting. In the process complex (test)
+fonts are made which, combined with the tracing mentioned, help us
+to reveal the secrets of \OPENTYPE.
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/mk/mk-iitoiv.tex b/doc/context/sources/general/manuals/mk/mk-iitoiv.tex
new file mode 100644
index 000000000..276693704
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-iitoiv.tex
@@ -0,0 +1,118 @@
+% language=uk
+
+\startcomponent mk-iitoiv
+
+\environment mk-environment
+
+\chapter{From \MKII\ to \MKIV}
+
+Sometime in 2005 the development of \LUATEX\ started, a further
+development of \PDFTEX\ and a precursor to \PDFTEX\ version~2. This
+\TEX\ variant will provide:
+
+\startitemize[packed]
+\item 21--32 bit internals plus a code cleanup
+\item flexible support for \OPENTYPE\ fonts
+\item an internal \UTF\ data flow
+\item the bidirectional typesetting of \ALEPH
+\item \LUA\ callbacks to the most relevant \TEX\ internals
+\item some extensions to \TEX\ (for instance math)
+\item an efficient way to communicate with \METAPOST
+\stopitemize
+
+In the tradition of \TEX\ this successor will be downward
+compatible in most essential parts and in the end, there is
+still \PDFTEX\ version~1 as fall back.
+
+In the mean time we have seen another unicode variant show up,
+\XETEX\ which is under active development, uses external
+libraries, provides access to the fonts on the operating system,
+etc.
+
+From the beginning, \CONTEXT\ always worked with all engines. This
+was achieved by conditional code blocks: depending on what engine
+was used, different code was put in the format and|/|or used at
+runtime. Users normally were unaware of this. Examples of engines
+are \ETEX, \ALEPH, and \XETEX. Because nowadays all engines
+provide the \ETEX\ features, in August 2006 we decided to consider
+those features to be present and drop providing the standard \TEX\
+compatible variants. This is a small effort because all code that
+is sensitive for optimization already has \ETEX\ code branches for
+many years.
+
+However, with the arrival of \LUATEX, we need a more drastic approach.
+Quite some existing code can go away and will be replaced by different
+solutions. Where \TEX\ code ends up in the format file, along with
+its state, \LUA\ code will be initiated at run time, after a \LUA\
+instance is started. \CONTEXT\ reserves its own instance of \LUA.
+
+Most of this will go unnoticed for the users because the user
+interface will not change. For developers however, we need to
+provide a mechanism to deal with these issues. This is why, for the
+first time in \CONTEXT's history we will officially use a kind of
+version tag. When we changed the low level interface from Dutch to
+English we jokingly talked of version~2. So, it makes sense to
+follow this lead.
+
+\startitemize[packed]
+
+\item \notabene {\CONTEXT\ \MKI}\quad At that moment we still had a
+low level Dutch interface, invisible for users but not for developers.
+
+\item \notabene {\CONTEXT\ \MKII}\quad We now have a low level English
+interface, which (as we indeed saw happen) triggers more development by
+users.
+
+\item \notabene {\CONTEXT\ \MKIV}\quad This is the next generation of
+\CONTEXT, with parts re||implemented. It's an at some points drastic
+system overhaul.
+
+\stopitemize
+
+Keep in mind that the functionality does not change, although in
+some places, for instance fonts, \MKIV\ may provide additional
+functionality. The reason why most users will not notice the
+difference (maybe apart from performance and convenience) is that at
+the user interface level nothing changes (most of it deals with
+typesetting, not with low level details).
+
+The hole in the numbering permits us to provide a \MKIII\ version
+as well. Once \XETEX\ is stable, we may use that slot for \XETEX\
+specific implementations.
+
+As per August 2006 the banner is adapted to this distinction:
+
+\starttyping
+... ver: 2006.09.06 22:46 MK II fmt: 2006.9.6 ...
+... ver: 2006.09.06 22:47 MK IV fmt: 2006.9.6 ...
+\stoptyping
+
+This numbering system is reflected at the file level in such a way
+that we can keep developing the way we do, i.e.\ no files all over
+the place, in subdirectories, etc.
+
+Most of the system's core files are not affected, but some may be, like
+those dealing with fonts, input- and output encodings, file handling,
+etc. Those files may come with different suffixes:
+
+\startitemize
+
+\item \type {somefile.tex}: the main file, implementing the interface
+and common code
+
+\item \type {somefile.mkii}: mostly existing code, suitable for good
+old \TEX\ (\ETEX, \PDFTEX, \ALEPH).
+
+\item \type {somefile.mkiv}: code optimized for use with \LUATEX, which
+could follow completely different approaches
+
+\item \type {somefile.lua}: \LUA\ code, loaded at format generation time
+and|/|or runtime
+
+\stopitemize
+
+As said, some day \type {somefile.mkiii} code may show up. Which
+variant is loaded is determined automatically at format generation
+time as well as at run time.
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/mk/mk-initialization.tex b/doc/context/sources/general/manuals/mk/mk-initialization.tex
new file mode 100644
index 000000000..1b2fd4704
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-initialization.tex
@@ -0,0 +1,214 @@
+% language=uk
+
+\startcomponent mk-initialization
+
+\environment mk-environment
+
+\chapter{Initialization revised}
+
+Initializing \LUATEX\ in such a way that it does what you want it
+to do your way can be tricky. This has to do with the fact that
+if we want to overload certain features (using callbacks) we need
+to do that before the orginals start doing their work. For
+instance, if we want to install our own file handling, we must
+make sure that the built||in file searching does not get
+initialized. This is particularly important when the built in
+search engine is based on the \KPSE\ library. In that case the
+first serious file access will result in loading the \type {ls-R}
+filename databases, which will take an amount of time more or less
+linear with the size of the \TEX\ trees. Among the reasons why we
+want to replace \KPSE\ are the facts that we want to access \ZIP\
+files, do more specific file searches, use \HTTP, \FTP\ and whatever
+comes around, integrate \CONTEXT\ specific methods, etc.
+
+Although modern operating systems will cache files in memory,
+creating the internal data structures (hashes) from the rather
+dumb files take some time. On the machine where I was developing
+the first experimental \LUATEX\ code, we're talking about 0.3
+seconds for \PDFTEX. One would expect a \LUA\ based alternative to
+be slower, but it is not. This may be due to the different
+implementation, but for sure the more efficient file cache plays a
+role as well. So, by completely disabling \KPSE, we can have more
+advanced \IO\ related features (like reading from \ZIP\ files) at
+about the same speed (or even faster). In due time we will also
+support progname (and format) specific caches, which speeds up
+loading. In case one wonders why we bother about a mere few
+hundreds of milliseconds: imagine frequent runs from an editor or
+sub||runs during a job. In such situation every speed up matters.
+
+So, back to initialization: how do we initialize \LUATEX. The
+method described here is developed for \CONTEXT\ but is not
+limited to this macro package; when one tells \TEXEXEC\ to
+generate formats using the \type {--luatex} directive, it will
+generate the \CONTEXT\ formats as well as \MPTOPDF\ using this
+engine.
+
+For practical reasons, the Lua based \IO\ handler is \KPSE\
+compliant. This means that the normal \type {texmf.cnf} and \type
+{ls-R} files can be used. However, their content is converted in a
+more \LUA\ friendly way. Although this can be done at runtime, it
+makes more sense to to this in advance using \LUATOOLS. The files
+involved are:
+
+\starttabulate[|l|l|l|l|]
+\NC \bold{input} \NC \bold{raw input} \NC \bold{runtime input} \NC \bold{runtime fallback} \NC \NR
+\NC \NC \type{ls-R} \NC \type{files.luc} \NC \type{files.lua} \NC \NR
+\NC \type{texmf.lua} \NC \type{temxf.cnf} \NC \type{configuration.luc} \NC \type{configuration.lua} \NC \NR
+\stoptabulate
+
+In due time \LUATOOLS\ will generate the directory listing itself
+(for this some extra libraries need to be linked in). The
+configuration file(s) eventually will move to a \LUA\ table
+format, and when a \type {texmf.lua} file is present, that one
+will be used.
+
+\starttyping
+luatools --generate
+\stoptyping
+
+This command will generate the relevant databases. Optionally you can
+provide \type {--minimize} which will generate a leaner database, which
+in turn will bring down loading time to (on my machine) about 0.1 sec
+instead of 0.2 seconds. The \type {--sort} option will give nicer
+intermediate (\type {.lua}) files that are more handy for debugging.
+
+When done, you can use \LUATOOLS\ roughly in the same manner as
+\KPSEWHICH, for instance to locate files:
+
+\starttyping
+luatools texnansi-lmr10.tfm
+luatools --all tufte.tex
+\stoptyping
+
+You can also inspect its internal state, for instance with:
+
+\starttyping
+luatools --variables --pattern=TEXMF
+luatools --expansions --pattern=context
+\stoptyping
+
+This will show you the (expanded) variables from the configuration
+files. Normally you don't need to go that deep into the belly.
+
+The \LUATOOLS\ script can also generate a format and run \LUATEX.
+For \CONTEXT\ this is normally done with the \TEXEXEC\ wrapper,
+for instance:
+
+\starttyping
+texexec --make --all --luatex
+\stoptyping
+
+When dealing with this process we need to keep several things in
+mind:
+
+\startitemize[packed]
+\item \LUATEX\ needs a \LUA\ startup file in both ini and runtime mode
+\item these files may be the same but may also be different
+\item here we use the same files but a compiled one in runtime mode
+\item we cannot yet use a file location mechanism
+\stopitemize
+
+A \type {.luc} file is a precompiled \LUA\ chunk. In order to
+guard consistency between \LUA\ code and tex code, \CONTEXT\ will
+preload all \LUA\ code and store them in the bytecode table
+provided by \LUATEX. How this is done, is another story. Contrary
+to these tables, the initialization code can not be put into the
+format, if only because at that stage we still need to set up
+memory and other parameters.
+
+In our case, especially because we want to overload the \IO\
+handler, we want to store the startup file in the same path as the
+format file. This means that scripts that deal with format
+generation also need to take care of (relocating) the startup
+file. Normally we will use \TEXEXEC\ but we can also use \LUATOOLS.
+
+Say that we want to make a plain format. We can call \LUATOOLS\
+as follows:
+
+\starttyping
+luatools --ini plain
+\stoptyping
+
+This will give us (in the current path):
+
+\starttyping
+120,808 plain.fmt
+ 2,650 plain.log
+ 80,767 plain.lua
+ 64,807 plain.luc
+\stoptyping
+
+From now on, only the \type {plain.fmt} and \type {plain.luc} file
+are important. Processing a file
+
+\starttyping
+test \end
+\stoptyping
+
+can be done with:
+
+\starttyping
+luatools --fmt=./plain.fmt test
+\stoptyping
+
+This returns:
+
+\starttyping
+This is luaTeX, Version 3.141592-0.1-alpha-20061018 (Web2C 7.5.5)
+(./test.tex [1] )
+Output written on test.dvi (1 page, 260 bytes).
+Transcript written on test.log.
+\stoptyping
+
+which looks rather familiar. Keep in mind that at this stage we
+still run good old Plain \TEX. In due time we will provide a few
+files that will making work with \LUA\ more convenient in Plain
+\TEX, but at this moment you can already use for instance \type
+{\directlua}.
+
+In case you wonder how this is related to \CONTEXT, well only to
+the extend that it uses a couple of rather generic \CONTEXT\
+related \LUA\ files.
+
+\CONTEXT\ users can best use \TEXEXEC\ which will relocate the
+format related files to the regular engine path. In \LUATOOLS\
+terms we have two choices:
+
+\starttyping
+luatools --ini cont-en
+luatools --ini --compile cont-en
+\stoptyping
+
+The difference is that in the first case \type {context.lua} is
+used as startup file. This \LUA\ file creates the \type
+{cont-en.luc} runtime file. In the second call \LUATOOLS\ will
+create a \type {cont-en.lua} file and compile that one. An even
+more specific call would be:
+
+\starttyping
+luatools --ini --compile --luafile=blabla.lua cont-en
+luatools --ini --compile --lualibs=bla-1.lua,bla-2.lua cont-en
+\stoptyping
+
+This call does not make much sense for \CONTEXT. Keep in mind
+that \LUATOOLS\ does not set up user specific configurations, for
+instance the \type {--all} switch in \TEXEXEC\ will set up all
+patterns.
+
+I know that it sounds a bit messy, but till we have a more clear
+picture of where \LUATEX\ is heading this is the way to proceed.
+The average \CONTEXT\ user won't notice those details, because
+\TEXEXEC\ will take care of things.
+
+Currently we follow the \TDS\ and \WEBC\ conventions, but in the
+future we may follow different or additional approaches. This may
+as well be driven by more complex \IO\ models. For the moment
+extensions still fit in. For instance, in order to support access
+to remote resources and related caching, we have added to the
+configuration file the variable:
+
+\starttyping
+TEXMFCACHE = $TMP;$TEMP;$TMPDIR;$HOME;$TEXMFVAR;$VARTEXMF;.
+\stoptyping
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/mk/mk-introduction.tex b/doc/context/sources/general/manuals/mk/mk-introduction.tex
new file mode 100644
index 000000000..c9d1e129a
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-introduction.tex
@@ -0,0 +1,61 @@
+% language=uk
+
+\startcomponent introduction
+
+\environment mk-environment
+
+\chapter{Introduction}
+
+In this document I will keep track of the transition of \CONTEXT\
+from \MKII\ to \MKIV, the latter being the \LUA\ aware version.
+
+The development of \LUATEX\ started with a few email exchanges
+between me and Hartmut Henkel. I had played a bit with \LUA\ in
+\SCITE\ and somehow felt that it would fit into \TEX\ quite well.
+Hartmut made me a version of \PDFTEX\ which provided a \type
+{\lua} command. After exploring this road a bit Taco Hoek\-water
+took over and we quickly reached a point where the \PDFTEX\
+development team could agree on following this road to the future.
+
+The development was boosted by a substantial grant from Colorado
+State University in the context of the Oriental \TEX\ Project of
+Idris Samawi Hamid. This project aims at bringing features into
+\TEX\ that will permit \CONTEXT\ to do high quality Arabic
+typesetting. Due to this grant Taco could spent substantial time
+on development, which in turn meant that I could start playing
+with more advanced features.
+
+This document is not so much a users manual as a history
+of the development. Consider it a collection of articles, and some
+chapters indeed have ended up in the journals of user groups. Things
+may evolve and the way things are done may change, but it felt right
+to keep track of the process this way. Keep in mind that some features
+may have changed while \LUATEX\ matured.
+
+Just for the record: development in the \LUATEX\ project is done
+by Taco Hoekwater, Hartmut Henkel and Hans Hagen. Eventually, the
+stable versions will become \PDFTEX\ version~2 and other members
+of the \PDFTEX\ team will be involved in development and
+maintenance. In order to prevent problems due to new and maybe
+even slightly incompatible features, \PDFTEX\ version~1 will be kept
+around as well, but no fundamentally new features will be added to
+it. For practical reasons we use \LUATEX\ as the name of the
+development version but also for \PDFTEX~2. That way we can use
+both engines side by side.
+
+This document is also one of our test cases. Here we use traditional
+\TEX\ fonts (for math), \TYPEONE\ and \OPENTYPE\ fonts. We use color
+and include test code. Taco and I always test new versions of
+\LUATEX\ (the program) and \MKIV\ (the macros and \LUA\ code) with
+this document before a new version is released. It also means that
+there can be temporary flaws in the rendering. Keep tuned,
+
+\blank
+
+Hans Hagen, Hasselt NL,\crlf August 2006\endash\currentdate[year]
+
+\blank
+
+\type {http://www.luatex.org}
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/mk/mk-itworks.tex b/doc/context/sources/general/manuals/mk/mk-itworks.tex
new file mode 100644
index 000000000..0a9d5fce8
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-itworks.tex
@@ -0,0 +1,142 @@
+% language=uk
+
+\environment mk-environment
+
+\startcomponent mk-itworks
+
+\chapter{It works!}
+
+One of the more powerful commands in \CONTEXT\ is \type {\framed}.
+You can pass quite some parameters that control the spacing,
+alignment, backgrounds and more. This command is used all over the
+place (although often hidden for the user) which means that it also has
+to be quite stable. However, there is one nasty bit of code that
+is hard to get right. Calculating the height of a box is not that
+complex: the height that \TEX\ reports is indeed the height.
+However, the width of box is determined by the value of \type
+{\hsize} at the time of typesetting. The actual content can be
+smaller. In the \type {\framed} macro by default the width is
+calculated automatically.
+
+\startbuffer
+\framed
+ [align=middle,width=fit]
+ {Out beyond the ethernet the spectrum spreads \unknown}
+\stopbuffer
+
+\typebuffer
+
+this shows up as:\footnote{Taken from \quote {Casino Nation} by Jackson Browne.}
+
+\startlinecorrection
+\getbuffer
+\stoplinecorrection
+
+Or take this quote:\footnote{Taken from \quote {A World Without Us} by Alan Weisman.}
+
+\startbuffer
+\hsize=.6\hsize \framed [align=middle,width=fit] {\input weisman }
+\stopbuffer
+
+\typebuffer
+
+This gives a multi|-|line paragraph:
+
+\startlinecorrection
+\getbuffer
+\stoplinecorrection
+
+Here the outer \type {\hsize} was made a bit smaller. As you can
+see the frame is determined by the widest line. Because it was one
+of the first features we needed, the code in \CONTEXT\ that is
+involved in determining the maximum natural width is pretty old.
+It boils down to unboxing a \type {\vbox} and stepwise grabbing
+the last box, penalty, kern and skip. You unwind the box
+backwards. However, you cannot grab everything or in \TEX\ speak:
+there is only a limited number of \type {\lastsomething} commands.
+Special nodes, like whatsits cannot be grabbed and they make the
+analyzer abort its analysis. There is no way that we can solve
+this in traditional \TEX\ and in \CONTEXT\ \MKII.
+
+So how about \LUATEX\ and \CONTEXT\ \MKIV ? The macro used in the
+\type {\framed} commands is:
+
+\starttyping
+\doreshapeframedbox{do something with \box\framebox}
+\stoptyping
+
+In \LUATEX\ we can manipulate box content at the \LUA\ level. Instead
+of providing a truckload of extra primitives (which would also introduce
+new data types at the \TEX\ end) we just delegate the job to \LUA.
+
+\starttyping
+\def\doreshapeframedbox
+ {\ctxlua{commands.doreshapeframedbox(\number\framebox)}}
+\stoptyping
+
+Here \type {\ctxlua} is our reserved instance and \type {commands}
+provides the namespace for commands that we delegate to \LUA\ (so,
+there are more of them). The amount of \LUA\ code is way less than
+the \TEX\ code which we will not show here; it's in \type
+{supp-box.tex} if you really want to see it.
+
+\starttyping
+function commands.doreshapeframedbox(n)
+ local box_n = tex.box[n]
+ if box_n.width ~= 0 then
+ local hpack = node.hpack
+ local free = node.free
+ local copy = node.copy_list
+ local noflines, lastlinelength, width = 0, 0, 0
+ local list = box_n.list
+ local done = false
+ for h in node.traverse_id('hlist',list) do
+ done = true
+ local p = hpack(copy(h.list))
+ lastlinelength = p.width
+ if lastlinelength > width then
+ width = lastlinelength
+ end
+ free(p)
+ end
+ if done then
+ if width ~= 0 then
+ for h in node.traverse_id('hlist',list) do
+ if h.width ~= width then
+ h.list = hpack(h.list,width,'exactly')
+ h.width = width
+ end
+ end
+ end
+ box_n.width = width
+ end
+ -- we can also do something with lastlinelength
+ end
+end
+\stoptyping
+
+In the first loop we inspect all lines (nodes with type \type
+{hlist}) and repack them to their natural width with \type
+{node.hpack}. In the process we keep track of the maximum natural
+width. In the second loop we repack the content again, but this
+time permanently. Now we use the maximum encountered width which
+is forced by the keyword \type {exactly}. Because all glue is
+still present we automatically get the desired alignment. We
+create local shortcuts to some node functions which makes it run
+faster; keep in mind that this is a core function called many
+times in a regular \CONTEXT\ job.
+
+In \CONTEXT\ \MKIV\ you will find quite some \LUA\ code and often
+it looks rather complex, especially if you have no clue why it's
+needed. Think of \OPENTYPE\ font handling which involves locating
+fonts, loading and caching them, storing features and later on
+applying them to node lists, etc. However, once we are beyond the
+stage of developing all the code that is needed to support the
+basics, we will start doing the things that more relate to the
+typesetting process itself, like the previous code. One of the
+candidates for a similar \LUA\ based solution is for instance
+column balancing. From the previous example code you can deduce
+that manipulating the node lists from \LUA\ can make that easier.
+Of course we're a few more years down the road then.
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/mk/mk-last-state.pdf b/doc/context/sources/general/manuals/mk/mk-last-state.pdf
new file mode 100644
index 000000000..5c4f954f8
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-last-state.pdf
Binary files differ
diff --git a/doc/context/sources/general/manuals/mk/mk-last.tex b/doc/context/sources/general/manuals/mk/mk-last.tex
new file mode 100644
index 000000000..b2d3dc519
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-last.tex
@@ -0,0 +1,404 @@
+% language=uk
+
+\startcomponent mk-arabic
+
+\environment mk-environment
+
+\chapter{Where do we stand}
+
+In the previous chapter we discussed the state of \LUATEX\ in the
+beginning of 2009, the prelude to version 0.50. We consider the
+release of the 0.50 version to be a really important, both for
+\LUATEX\ and for \MKIV\ so here I will reflect on the state
+around this release. I will do this from the perspective of
+processing documents because useability is an important measure.
+
+There are several reasons why \LUATEX\ 0.50 is an important release,
+both for \LUATEX\ and for \MKIV. Let's start with \LUATEX.
+
+\startitemize
+
+\startitem Apart from a couple of bug fixes, the current version
+is pretty usable and stable. Details of what we've reached so far
+have been presented previously. \stopitem
+
+\startitem The code base has been converted from \PASCAL\ to
+\CCODE, and as a result the source tree has become simpler (being
+\CWEB\ compliant happens around 0.60). This transition also opens
+up the possibility to start looking into some of the more tricky
+internals, like page building. \stopitem
+
+\startitem Most of the front end has been opened up and the new
+backend code is getting into shape. As the backend was partly already done in
+\CCODE\ the moment has come to do a real cleanup. Keep in mind that
+we started with \PDFTEX\ and that much of its extra functionality is
+rather interwoven with traditional \TEX\ code. \stopitem
+
+\stopitemize
+
+If we look at \CONTEXT, we've also reached a crucial point in the
+upgrade.
+
+\startitemize
+
+\startitem The code base is now divided into \MKII\ and \MKIV. This
+permits us not only to reimplement bits and pieces (something that
+was already in progress) but also to clean up the code (only
+\MKIV). \stopitem
+
+\startitem If you kept up with the development you already know
+the kind of tasks we can (and do) delegate to \LUA. Just to
+mention a few: file handling, font loading and \OPENTYPE\
+processing, casing and some spacing issues, everything related to
+graphics and \METAPOST, language support, color and other
+attributes, input regimes, \XML, multi|-|pass data, etc. \stopitem
+
+\startitem Recently all backend related code was moved to
+\LUA\ and the code dealing with hyperlinks, widgets and alike is
+now mostly moved away from \TEX. The related cleanup was possible
+because we no longer have to deal with a mix of \DVI\ drivers too.
+\stopitem
+
+\startitem Everything related to structure (which includes
+numbering and multi-pass data like tables of contents and
+registers) is now delegated to \LUA. We move around way more
+information and will extend these mechanisms in the near future.
+\stopitem
+
+\stopitemize
+
+Tracing on Taco's machine has shown that when processing the
+\LUATEX\ reference manual the engine spends about 10\%
+of the time on getting tokens, 15\% on macro expansion, and some
+50\% on \LUA\ (callback interfacing included). Especially the time
+spent by \LUA\ differs per document and garbage collections seems
+to be a bottleneck here. So, let's wrap up how \LUATEX\ performs
+around the time of 0.50.
+
+We use three documents for testing (intermediate) \LUATEX\
+binaries: the reference manual, the history document \quote{mk},
+and the revised metafun manual. The reference manual has a
+\METAPOST\ graphic on each page which is positioned using the
+\CONTEXT\ background layering mechanism. This mechanism is active
+only when backgrounds are defined and has some performance
+consequences for the page builder. However, most time is spent on
+constructing the tables (tabulate) and because these can contain
+paragraphs that can run over multiple pages, constructing a table
+takes a few analysis passes per table plus some so-called
+vsplitting. We load some fonts (including narrow variants) but for
+the rest this document is not that complex. Of course colors are
+used as well as hyperlinks.
+
+The report at the end of the runs looks as follows:
+
+\start \switchtobodyfont[small]
+\starttyping
+input load time - 0.109 seconds
+stored bytecode data - 184 modules, 45 tables, 229 chunks
+node list callback tasks - 4 unique tasks, 4 created, 20980 calls
+cleaned up reserved nodes - 29 nodes, 10 lists of 1427
+node memory usage - 19 glue_spec, 2 dir
+h-node processing time - 0.312 seconds including kernel
+attribute processing time - 1.154 seconds
+used backend - pdf (backend for directly generating pdf output)
+loaded patterns - en:us:pat:exc:2
+jobdata time - 0.078 seconds saving, 0.047 seconds loading
+callbacks - direct: 86692, indirect: 13364, total: 100056
+interactive elements - 178 references, 356 destinations
+v-node processing time - 0.062 seconds
+loaded fonts - 43 files: ....
+fonts load time - 1.030 seconds
+metapost processing time - 0.281 seconds, loading: 0.016 seconds,
+ execution: 0.156 seconds, n: 161
+result saved in file - luatexref-t.pdf
+luatex banner - this is luatex, version beta-0.42.0
+control sequences - 31880 of 147189
+current memory usage - 106 MB (ctx: 108 MB)
+runtime - 12.433 seconds, 164 processed pages,
+ 164 shipped pages, 13.191 pages/second
+\stoptyping
+\stop
+
+The runtime is influenced by the fact that some startup time and
+font loading takes place. The more pages your document has, the
+less the runtime is influenced by this.
+
+More demanding is the \quote {mk} document (figure~\ref{fig.mk}). Here
+we have many fonts, including some really huge \CJK\ and Arabic ones (and these are
+loaded at several sizes and with different features). The reported
+font load time is large but this is partly due to the fact that on
+my machine for some reason passing the tables to \TEX\ involved a
+lot of pagefaults (we think that the cpu cache is the culprit).
+Older versions of \LUATEX\ didn't have that performance penalty,
+so probably half of the reported font loading time is kind of
+wasted.
+
+The hnode processing time refers mostly to \OPENTYPE\ font
+processing and attribute processing time has to do with backend
+issues (like injecting color directives). The more features you
+enable, the larger these numbers get. The \METAPOST\ font loading
+refers to the punk font instances.
+
+\start \switchtobodyfont[small]
+\starttyping
+input load time - 0.125 seconds
+stored bytecode data - 184 modules, 45 tables, 229 chunks
+node list callback tasks - 4 unique tasks, 4 created, 24295 calls
+cleaned up reserved nodes - 116 nodes, 29 lists of 1411
+node memory usage - 21 attribute, 23 glue_spec, 7 attribute_list,
+ 7 local_par, 2 dir
+h-node processing time - 1.763 seconds including kernel
+attribute processing time - 2.231 seconds
+used backend - pdf (backend for directly generating pdf output)
+loaded patterns - en:us:pat:exc:2 en-gb:gb:pat:exc:3 nl:nl:pat:exc:4
+language load time - 0.094 seconds, n=4
+jobdata time - 0.062 seconds saving, 0.031 seconds loading
+callbacks - direct: 98199, indirect: 20257, total: 118456
+xml load time - 0.000 seconds, lpath calls: 46, cached calls: 31
+v-node processing time - 0.234 seconds
+loaded fonts - 69 files: ....
+fonts load time - 28.205 seconds
+metapost processing time - 0.421 seconds, loading: 0.016 seconds,
+ execution: 0.203 seconds, n: 65
+graphics processing time - 0.125 seconds including tex, n=7
+result saved in file - mk.pdf
+metapost font generation - 0 glyphs, 0.000 seconds runtime
+metapost font loading - 0.187 seconds, 40 instances,
+ 213.904 instances/second
+luatex banner - this is luatex, version beta-0.42.0
+control sequences - 34449 of 147189
+current memory usage - 454 MB (ctx: 465 MB)
+runtime - 50.326 seconds, 316 processed pages,
+ 316 shipped pages, 6.279 pages/second
+\stoptyping
+\stop
+
+Looking at the Metafun manual one might expect that one needs
+even more time per page but this is not true. We use \OPENTYPE\
+fonts in base mode as we don't use fancy font features (base mode
+uses traditional \TEX\ methods). Most interesting here is the time
+involved in processing \METAPOST\ graphics. There are a lot of
+them (1772) and in addition we have 7 calls to independent
+\CONTEXT\ runs that take one third of the total runtime. About
+half of the runtime involves graphics.
+
+\start \switchtobodyfont[small]
+\starttyping
+input load time - 0.109 seconds
+stored bytecode data - 184 modules, 45 tables, 229 chunks
+node list callback tasks - 4 unique tasks, 4 created, 33510 calls
+cleaned up reserved nodes - 39 nodes, 93 lists of 1432
+node memory usage - 249 attribute, 19 glue_spec, 82 attribute_list,
+ 85 local_par, 2 dir
+h-node processing time - 0.562 seconds including kernel
+attribute processing time - 2.512 seconds
+used backend - pdf (backend for directly generating pdf output)
+loaded patterns - en:us:pat:exc:2
+jobdata time - 0.094 seconds saving, 0.031 seconds loading
+callbacks - direct: 143950, indirect: 28492, total: 172442
+interactive elements - 214 references, 371 destinations
+v-node processing time - 0.250 seconds
+loaded fonts - 45 files: l.....
+fonts load time - 1.794 seconds
+metapost processing time - 5.585 seconds, loading: 0.047 seconds,
+ execution: 2.371 seconds, n: 1772,
+ external: 15.475 seconds (7 calls)
+mps conversion time - 0.000 seconds, 1 conversions
+graphics processing time - 0.499 seconds including tex, n=74
+result saved in file - metafun.pdf
+luatex banner - this is luatex, version beta-0.42.0
+control sequences - 32587 of 147189
+current memory usage - 113 MB (ctx: 115 MB)
+runtime - 43.368 seconds, 362 processed pages,
+ 362 shipped pages, 8.347 pages/second
+\stoptyping
+\stop
+
+By now it will be clear that processing a document takes a bit of
+time. However, keep in mind that these documents are a bit
+atypical. Although \unknown\ thee average \CONTEXT\ document
+probably uses color (including color spaces that involve resource
+management), and has multiple layers, which involves some testing of
+the about 30 areas that make up the page. And there is the
+user interface that comes with a price.
+
+It might be good to say a bit more about fonts. In \CONTEXT\ we
+use symbolic names and often a chain of them, so the abstract
+\type {SerifBold} resolves to \type {MyNiceFontSerif-Bold} which
+in turn resolves to \type {mnfs-bold.otf}. As \XETEX\ introduced
+lookup by internal (or system) fontname instead of filename,
+\MKII\ also provides that method but \MKIV\ adds some heuristics
+to it. Users can specify font sizes in traditional \TEX\ units but
+also relative to the body font. All this involves a bit of
+expansion (resolving the chain) and parsing (of the
+specification). At each of the levels of name abstraction we can
+have associated parameters, like features, fallbacks and more.
+Although these mechanisms are quite optimized this still comes at a
+performance price.
+
+Also, in the default \MKIV\ font setup we use a couple more
+font variants (as they are available in Latin Modern). We've kept
+definitions sort of dynamic so you can change them and combine
+them in many ways. Definitions are collected in typescripts which
+are filtered. We support multiple mixed font sets which takes a bit
+of time to define but switching is generally fast. Compared to \MKII\
+the model lacks the (font) encoding and case handling code (here
+we gain speed) but it now offers fallback fonts (replaced ranges
+within fonts) and dynamic \OPENTYPE\ font feature switching. When
+used we might lose a bit of processing speed although fewer
+definitions are needed which gets us some back. The font subsystem
+is anyway a factor in the performance, if only because more
+complex scripts or font features demand extensive node list
+parsing.
+
+Processing the \TEX book with \LUATEX\ on Taco's machine takes some
+3.5 seconds in \PDFTEX\ and 5.5 seconds in \LUATEX. This is
+because \LUATEX\ internally is \UNICODE\ and has a larger memory
+space. The few seconds more runtime are consistent with this. One
+of the reasons that The \TEX\ Book processes fast is that the font
+system is not that complex and has hardly any overhead, and an
+efficient output routine is used. The format file is small and the
+macro set is optimal for the task. The coding is rather low level
+so to say (no layers of interfacing). Anyway, 100 pages per second
+is not bad at all and we don't come close with \CONTEXT\ and the
+kind of documents that we produce there.
+
+This made me curious as to how fast really dumb documents could be
+processed. It does not make sense to compare plain \TEX\ and
+\CONTEXT\ because they do different things. Instead I decided to
+look at differences in engines and compare runs with different
+numbers of pages. That way we get an idea of how startup time
+influences overall performance. We look at \PDFTEX, which is
+basically an 8-bit system, \XETEX, which uses external libraries and is
+\UNICODE, and \LUATEX\ which is also \UNICODE, but stays closer to
+traditional \TEX\ but has to check for callbacks.
+
+In our measurement we use a really simple test document as we only
+want to see how the baseline performs. As not much content is
+processed, we focus on loading (startup), the output routine and
+page building, and some basic \PDF\ generation. After all, it's
+often a quick and dirty test that gives users their first
+impression. When looking at the times you need to keep in mind
+that \XETEX\ pipes to \DVIPDFMX\ and can benefit from multiple
+cpu cores. All systems have different memory management and garbage
+collection might influence performance (as demonstrated in an
+earlier chapter of the \quote{mk} document we can trace in detail
+how the runtime is distributed). As terminal output is a significant
+slowdown for \TEX\ we run in batchmode. The test is as follows:
+
+\starttyping
+\starttext
+ \dorecurse{2000}{test\page}
+\stoptext
+\stoptyping
+
+On my laptop (Dell M90 with 2.3Ghz T76000 Core 2 and 4MB memory
+running Vista) I get the following results. The test script ran
+each test set 5~times and we show the fastest run so we kind of
+avoid interference with other processes that take time. In
+practice runtime differs quite a bit for similar runs, depending
+on the system load. The time is in seconds and between parentheses
+the number of pages per seconds is mentioned.
+
+% \starttabulate[||||||]
+% \NC \bf engine \NC 30 \NC 300 \NC 2000 \NC 10000 \NC \NR
+% \HL
+% \NC \bf xetex \NC 1.84 (16) 1.81 (16) \NC 2.51 (119) 2.45 (122) \NC 7.38 (270) 6.97 (286) \NC 38.53 (259) 29.20 (342) \NC \NR
+% \NC \bf pdftex \NC 1.32 (22) 1.28 (23) \NC 2.16 (138) 2.07 (144) \NC 7.34 (272) 6.96 (287) \NC 43.73 (228) 30.94 (323) \NC \NR
+% \NC \bf luatex \NC 1.53 (19) 1.48 (20) \NC 2.41 (124) 2.36 (127) \NC 8.16 (245) 7.85 (254) \NC 44.67 (223) 34.34 (291) \NC \NR
+% \stoptabulate
+
+\starttabulate[||||||]
+\NC \bf engine \NC 30 \NC 300 \NC 2000 \NC 10000 \NC \NR
+\HL
+\NC \bf xetex \NC 1.81 (16) \NC 2.45 (122) \NC 6.97 (286) \NC 29.20 (342) \NC \NR
+\NC \bf pdftex \NC 1.28 (23) \NC 2.07 (144) \NC 6.96 (287) \NC 30.94 (323) \NC \NR
+\NC \bf luatex \NC 1.48 (20) \NC 2.36 (127) \NC 7.85 (254) \NC 34.34 (291) \NC \NR
+\stoptabulate
+
+The next table shows the same test but this time on a 2.5Ghz E5420
+quad core server with 16GB memory running Linux, but with 6
+virtual machines idling in the background. All binaries are 64 bit.
+
+% \starttabulate[||||||]
+% \NC \bf engine \NC 30 \NC 300 \NC 2000 \NC 10000 \NC \NR
+% \HL
+% \NC \bf xetex \NC 0.94 (31) 0.92 (32) \NC 2.00 (150) 1.89 (158) \NC 9.02 (221) 8.74 (228) \NC 42.41 (235) 42.19 (237) \NC \NR
+% \NC \bf pdftex \NC 0.51 (58) 0.49 (61) \NC 1.19 (251) 1.14 (262) \NC 5.34 (374) 5.23 (382) \NC 25.16 (397) 24.66 (405) \NC \NR
+% \NC \bf luatex \NC 1.09 (27) 1.07 (27) \NC 2.06 (145) 1.99 (150) \NC 8.72 (229) 8.32 (240) \NC 40.10 (249) 38.22 (261) \NC \NR
+% \stoptabulate
+
+\starttabulate[||||||]
+\NC \bf engine \NC 30 \NC 300 \NC 2000 \NC 10000 \NC \NR
+\HL
+\NC \bf xetex \NC 0.92 (32) \NC 1.89 (158) \NC 8.74 (228) \NC 42.19 (237) \NC \NR
+\NC \bf pdftex \NC 0.49 (61) \NC 1.14 (262) \NC 5.23 (382) \NC 24.66 (405) \NC \NR
+\NC \bf luatex \NC 1.07 (27) \NC 1.99 (150) \NC 8.32 (240) \NC 38.22 (261) \NC \NR
+\stoptabulate
+
+A test demonstrated that for \LUATEX\ the 30 and 300 page runs
+take 70\% more runtime with 32 bit binaries (recent binaries for
+these engines are available on the \CONTEXT\ wiki \type
+{contextgarden.net}).
+
+When you compare both tables it will be clear that it is
+non|-|trivial to come to conclusions about performances. But one thing
+is clear: \LUATEX\ with \CONTEXT\ \MKIV\ is not performing that
+badly compared to its cousins. The \UNICODE\ engines perform about
+the same and \PDFTEX\ beats them significantly. Okay, I have to
+admit that in the meantime some cleanup of code in \MKIV\ has
+happened and the \LUATEX\ runs benefit from this, but on the other
+hand, the other engines are not hindered by callbacks. As I expect
+to use \MKII\ less frequently optimizing the older code makes no
+sense.
+
+There is not much chance of \LUATEX\ itself becoming faster,
+although a few days before writing this Taco managed to speed up
+font inclusion in the backend code significantly (we're talking
+about half a second to a second for the three documents used
+here). On the contrary, when we open up more mechanisms and have
+upgraded backend code it might actually be a bit slower. On the
+other hand, I expect to be able to clean up some more \CONTEXT\
+code, although we already got rid of some subsystems (like the
+rather flexible (mixed) font encoding, where each language could
+have multiple hyphenation patters, etc.). Also, although initial
+loading of math fonts might take a bit more time (as long as we
+use virtual Latin Modern math), font switching is more efficient
+now due to fewer families. But speedups in the \CONTEXT\ code might
+be compensated for by more advanced mechanisms that call out to \LUA.
+You will be surprised by how much speed can be improved by proper
+document encoding and proper styles. I can try to gain a couple
+more pages per second by more efficient code, but a user's style
+that does an inefficient massive font switch for some 10 words per
+page easily compensates for that.
+
+When processing this 10 page chapter in an editor (Scite) it takes
+some 2.7 seconds between hitting the processing key and the result
+showing up in Acrobat. I can live with that, especially when I
+keep in mind that my next computer will be faster.
+
+This is where we stand now. The three reports shown before give
+you an impression of the impact of \LUATEX\ on \CONTEXT. To what
+extent is this reflected in the code base? We end this chapter
+with showing four tables. The first table shows the number of
+files that make up the core of \CONTEXT\ (modules are excluded).
+The second table shows the accumulated size of these files
+(comments and spacing stripped). The third and fourth table show
+the same information in a different way, just to give you a better
+impression of the relative number of files and sizes. The four
+character tags represent the file groups, so the files have
+names like \type {node-ini.mkiv}, \type {font-otf.lua} and
+\type {supp-box.tex}.
+
+Eventually most \MKII\ files (with the \type {mkii} suffix) and
+\MKIV\ files (with suffix \type {mkiv}) will differ and the number
+of files with the \type {tex} suffix will be fewer. Because they
+are and will be mostly downward compatible, styles and modules
+will be shared as much as possible.
+
+\placefigure[none,90,page]{}{\externalfigure[mk-last-state.pdf][page=1,width=\the\textheight]}
+\placefigure[none,90,page]{}{\externalfigure[mk-last-state.pdf][page=2,width=\the\textheight]}
+\placefigure[none,90,page]{}{\externalfigure[mk-last-state.pdf][page=3,width=\the\textheight]}
+\placefigure[none,90,page]{}{\externalfigure[mk-last-state.pdf][page=4,width=\the\textheight]}
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/mk/mk-luafitsin.tex b/doc/context/sources/general/manuals/mk/mk-luafitsin.tex
new file mode 100644
index 000000000..9391b63c2
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-luafitsin.tex
@@ -0,0 +1,556 @@
+% language=uk
+
+\startcomponent mk-luafitsin
+
+\environment mk-environment
+
+\chapter{How \LUA\ fits in}
+
+\subject{introduction}
+
+Here I will discuss a few of the experiments that drove the
+development of \LUATEX. It describes the state of affairs around
+the time that we were preparing for \TUG\ 2006. This development
+was pretty demanding for Taco and me but also much fun. We were in
+a kind of permanent Skype chat session, with binaries flowing in
+one direction and \TEX\ and \LUA\ code the other way. By gradually
+replacing (even critical) components of \CONTEXT\ we had a real
+test bed and torture tests helped us to explore and debug at the
+same time. Because Taco uses \LINUX\ as platform and I mostly use
+\MSWINDOWS, we could investigate platform dependent issues
+conveniently. While reading this text, keep in mind that this is
+just the beginning of the game.
+
+I will not provide sample code here. When possible, the \MKIV\
+code transparantly replaces \MKII\ code and users will seldom
+notices that something happens in different way. Of course the
+potential is there and future extensions may be unique to \MKIV.
+
+\subject{compatibility}
+
+The first experiments, already conducted with the experimental
+versions involved runtime conversion of one type of input into
+another. An example of this is the (TI) calculator math input
+handler that converts a rather natural math sequence into \TEX\
+and feeds that back into \TEX. This mechanism eventually will
+evolve into a configurable math input handler. Such applications
+are unique to \MKIV\ code and will not be backported to \MKII. The
+question is where downward compatibility will become a problem. We
+don't expect many problems, apart from occasional bugs that result
+from splitting the code base, mostly because new features will not
+affect older functionality. Because we have to reorganize the code
+base a bit, we also use this opportunity to start making a variant
+of \CONTEXT\ which consists of building blocks: \METATEX. This is
+less interesting for the average user, but may be of interest for
+those using \CONTEXT\ in workflows where only part of the
+functionality is needed.
+
+\subject{metapost}
+
+Of course, when I experiment with such new things, I cannot let
+\METAPOST\ leave untouched. And so, in the early stage of \LUATEX\
+development I decided to play with two \METAPOST\ related
+features: conversion and runtime processing.
+
+Conversion from \METAPOST\ output to \PDF\ is currently done in
+pure \TEX\ code. Apart from convenience, this has the advantage
+that we can let \TEX\ take care of font inclusions. The tricky
+part of this conversion is that \METAPOST\ output has some weird
+aspects, like \DVIPS\ specific linewidth snapping. Another nasty
+element in the conversion is that we need to transform paths when
+pens are used. Anyhow, the converter has reached a rather stable
+state by now.
+
+One of the ideas with \METAPOST\ version 1\high{+} is that we will
+have an alternative output mode. In the perspective of \LUATEX\ it
+makes sense to have a \LUA\ output mode. Whatever converter we
+use, it needs to deal with \METAFUN\ specials. These are
+responsible for special features like transparency, graphic
+inclusion, shading, and more. Currently we misuse colors to signal
+such features, but the new pre|/|post path hooks permit more
+advanced implementations. Experimenting with such new features is
+easier in \LUA\ than in \TEX.
+
+The \MKIV\ converter is a multi||pass converter. First we clean up the
+\METAPOST\ output, next we convert the \POSTSCRIPT\ code into \LUA\
+calls. We assume that this \LUA\ code eventually can be output directly
+from \METAPOST. We then evaluate this converted \LUA\ blob, which results
+in \TEX\ commands. Think of:
+
+\starttyping
+1.2 setlinejoin
+\stoptyping
+
+turned into:
+
+\starttyping
+mp.setlinejoin(1.2)
+\stoptyping
+
+becoming:
+
+\starttyping
+\PDFcode{1.2 j}
+\stoptyping
+
+which is, when the \PDFTEX\ driver is active, equivalent to:
+
+\starttyping
+\pdfliteral{1.2 j}
+\stoptyping
+
+Of course, when paths are involved, more things happen behind the
+scenes, but in the end an \type {mp.path} enters the \LUA\
+machinery.
+
+When the \MKIV\ converter reached a stable state, tests
+demonstrated then the code was upto 20\% slower that the pure
+\TEX\ alternative on average graphics, and but faster when many
+complex path transformations (due to penshapes) need to be done.
+This slowdown was due to the cleanup (using expressions) and
+intermediate conversion. Because Taco develops \LUATEX\ as well as
+maintains and extends \METAPOST, we conducted experiments that
+combine features of these programs. As a result of this, shortcuts
+found their way into the \METAPOST\ output.
+
+\useMPlibrary[mis]
+
+\placefigure
+ []
+ [fig:mptopdf]
+ {converter test figure}
+ {\scale[width=\hsize]{\useMPgraphic{mptopdf-test}}}
+
+Cleaning up the \METAPOST\ output using \LUA\ expressions takes
+relatively much time. However, starting with version 0.970
+\METAPOST\ uses a preamble, which permits not only short commands,
+but also gets rid of the weird linewidth and filldraw related
+\POSTSCRIPT\ constructs. The moderately complex graphic that we
+use for testing (\in {figure} [fig:mptopdf]) takes over 16 seconds
+when converted 250 times. When we enable shortcuts we can avoid
+part of the cleanup and runtime goes down to under 7.5 seconds.
+This is significantly faster than the \MKII\ code. We did experiments
+with simulated \LUA\ output from \METAPOST\ and then the \MKIV\
+converter really flies. The values on Taco's system are given
+between parenthesis.
+
+\starttabulate[|||||]
+\HL
+\NC \bf prologues/mpprocset \NC \bf 1/0 \NC \bf 1/1 \NC \bf 2/0 \NC \bf 2/1 \NC \NR
+\HL
+\NC \MKII \NC ~8.5 (~5.7) \NC ~8.0 (5.5) \NC ~8.8 \NC ~8.5 \NC \NR
+\NC \MKIV \NC 16.1 (10.6) \NC ~7.2 (4.5) \NC 16.3 \NC ~7.4 \NC \NR
+\HL
+\stoptabulate
+
+The main reason for the huge difference in the \MKIV\ times is
+that we do a rigourous cleanup of the older \METAPOST\ output
+in order avoid messy the messy (but fast) code that we use in
+the \MKII\ converter. Think of:
+
+\starttyping
+0 0.5 dtransform truncate idtransform setlinewidth pop
+closepath gsave fill grestore stroke
+\stoptyping
+
+In the \MKII\ converter, we push every number or keyword on a
+stack and use keywords as trigger points. In the \MKIV\ code
+we convert the stack based \POSTSCRIPT\ calls to \LUA\
+function calls. Lines as shown are converted to single calls
+first. When \type {prologues} is set to~2, such line no longer
+show up and are replaced by simple calls accompanied by
+definitions in the preamble. Not only that, instead of verbose
+keywords, one or two character shortcuts are used. This means
+that the \MKII\ code can be faster when procsets are used
+because shorter strings end up in the stack and comparison
+happens faster. On the other hand, when no procsets are used,
+the runtime is longer because of the larger preamble.
+
+Because the converter is used outside \CONTEXT\ as well, we
+support all combinations in order not to get error messages, but
+the converter is supposed to work with the following settings:
+
+\starttyping
+prologues := 1 ;
+mpprocset := 1 ;
+\stoptyping
+
+We don't need to set \type {prologues} to~2 (font encodings
+in file) or~3 (also font resources in file). So, in the end, the
+comparison in speed comes down to 8.0 seconds for \MKII\ code and
+7.2 seconds for the \MKIV\ code when using the latest greatest
+\METAPOST. When we simulate \LUA\ output from \METAPOST, we end
+up with 4.2 seconds runtime and when \METAPOST\ could produce the
+converter's \TEX\ commands, we need only 0.3 seconds for embedding
+the 250 instances. This includes \TEX\ taking care of handling the
+specials, some of which demand building moderately complex \PDF\
+data structures.
+
+But, conversion is not the only factor in convenient \METAPOST\
+usage. First of all, runtime \METAPOST\ processing takes time. The
+actual time spent on handling embedded \METAPOST\ graphics is also
+dependent on the speed of starting up \METAPOST, which in turn
+depends on the size of the \TEX\ trees used: the bigger these are,
+the more time \KPSE\ spends on loading the \type {ls-R} databases.
+Eventually this bottleneck may go away when we have \METAPOST\ as
+a library. (In \CONTEXT\ one can also run \METAPOST\ between runs.
+Which method is faster, depends on the amount and complexity of
+the graphics.)
+
+Another factor in dealing with \METAPOST, is the usage of text in
+a graphic (\type {btex}, \type {textext}, etc.). Taco Hoekwater,
+Fabrice Popineau and I did some experiments with a persistent
+\METAPOST\ session in the background in order to simulate a
+library. The results look very promising: the overhead of embedded
+\METAPOST\ graphics goes to nearly zero, especially when we also
+let the parent \TEX\ job handle the typesetting of texts. A side
+effect of these experiments was a new mechanism in \CONTEXT\ (and
+\METAFUN) where \TEX\ did all typesetting of labels, and
+\METAPOST\ only worked with an abstract representation of the
+result. This way we can completely avoid nested \TEX\ runs (the
+ones triggered by \METAPOST). This also works ok in \MKII\ mode.
+
+Using a persistent \METAPOST\ run and piping data into it is not
+the final solution if only because the terminal log becomes messed
+up too much, and also because intercepting errors is real messy.
+In the end we need a proper library approach, but the experiments
+demonstrated that we needed to go this way: handling hundreds of
+complex graphics that hold typeset paragraphs (being slanted and
+rotated and more by \METAPOST), tooks mere seconds compared to
+minutes when using independent \METAPOST\ runs for each job.
+
+\subject{characters}
+
+Because \LUATEX\ is \UTF\ based, we need a different way to deal with
+input encoding. For this purpose there are callbacks that intercept
+the input and convert it as needed. For context this means that the
+regime related modules get a \LUA\ based counterparts. As a prelude to
+advanced character manipulations, we already load extensive unicode
+and conversion tables, with the benefit of being able to handle case
+handling with \LUA.
+
+The character tables are derived from unicode tables and \MKII\
+\CONTEXT\ data files and generated using \MTXTOOLS. The main
+character table is pretty large, and this made us experiment a bit
+with efficiency. It was in this stage that we realized that it
+made sense to use precompiled \LUA\ code (using \type {luac}).
+During format generation we let \CONTEXT\ keep track of used \LUA\
+files and compiled them on the fly. For a production run, the
+compiled files were loaded instead.
+
+Because at that stage \LUATEX\ was already a merge between
+\PDFTEX\ and \ALEPH, we had to deal with pretty large format
+files. About that moment the \CONTEXT\ format with the english
+user interface amounted to:
+
+\starttabulate[|c|c|c|c|c|]
+\NC \bf date \NC \bf luatex \NC \bf pdftex \NC \bf xetex \NC \bf aleph \NC \NR
+\NC 2006-09-18 \NC 9 552 042 \NC 7 068 643 \NC 8 374 996 \NC 7 942 044 \NC \NR
+\stoptabulate
+
+One reason for the large size of the format file is that the
+memory footprint of a 32 bit \TEX\ is larger than that of good old
+\TEX, even with some of the clever memory allocation techniques as
+used in \LUATEX. After some experiments where size and speed were
+measured Taco decided to compress the format using a level~3 \ZIP\
+compression. This brilliant move lead to the following size:
+
+\starttabulate[|c|c|c|c|c|]
+\NC \bf date \NC \bf luatex \NC \bf pdftex \NC \bf xetex \NC \bf aleph \NC \NR
+\NC 2006-10-23 \NC 3 135 568 \NC 7 095 775 \NC 8 405 764 \NC 7 973 940 \NC \NR
+\stoptabulate
+
+The first zipped versions were smaller (around 2.3 meg), but in
+the meantime we moved the \LUA\ code into the format and the
+character related tables take some space.
+
+\start \it How stable are the mentioned numbers? Ten months after writing the
+previous text we get the following numbers: \stop
+
+\starttabulate[|c|c|c|c|c|]
+\NC \bf date \NC \bf luatex \NC \bf pdftex \NC \bf xetex \NC \bf aleph \NC \NR
+\NC 2007-08-16 \NC 5 603 676 \NC 7 505 925 \NC 8 838 538 \NC 8 369 206 \NC \NR
+\stoptabulate
+
+They are all some 400K larger, which is probably the result of changes in
+hyphenation patterns (we now load them all, some several times depending on the
+font encodings used). Also, some extra math support has been brought in the kernel
+and we predefine a few more things. However, \LUATEX's format has become much
+larger! Partly this is the result of more \LUA\ code, especially \OPENTYPE\ font
+handling and attributes related code. The extra \TEX\ code is probably compensated
+by the removal of obsolete (at least for \MKIV) code. However, the significantly
+larger number is mostly there because a different compression algorithm is used:
+speed is now favoured over efficiency.
+
+\subject{debugging}
+
+In the process of experimenting with callbacks I played a bit with
+handling \TEX\ error information. An option is to generate an
+\HTML\ page instead of spitting out the usual blob of into on the
+terminal. In \in {figure} [fig:error] and \in {figure} [fig:debug]
+you can see an example of this.
+
+\placefigure[][fig:error]{An example error screen.}{\externalfigure[mk-error.png][width=\textwidth]}
+\placefigure[][fig:debug]{An example debug screen.}{\externalfigure[mk-debug.png][width=\textwidth]}
+
+Playing with such features gives us an impression of what kind of
+access we need to \TEX's internals. It also formed a starting
+point for conversion routines and a mechanism for embedding \LUA\
+code in \HTML\ pages generated by \CONTEXT.
+
+\subject{file io}
+
+Replacing \TEX's in- and output handling is non||trival. Not only
+is the code quite interwoven in the \WEBC\ source, but there is also
+the \KPSE\ library to deal with. This means that quite some callbacks
+are needed to handle the different types of files. Also, there is output
+to the log and terminal to take care of.
+
+Getting this done took us quite some time and testing and
+debugging was good for some headaches. The mechanisms changed a
+few times, and \TEX\ and \LUA\ code was thrown away as soon as
+better solutions came around. Because we were testing on real
+documents, using a fully loaded \CONTEXT\ we could converge to a
+stable version after a while.
+
+Getting this \IO\ stuff done is tightly related to generating the
+format and starting up \LUATEX. If you want to overload the file
+searching and \IO\ handling, you need overload as soon as possible.
+Because \LUATEX\ is also supposed to work with the existing \KPSE\
+library, we still have that as fallback, but in principle one
+could think of a \KPSE\ free version, in which case the default
+file searching is limited to the local path and memory
+initialization also reverts to the hard coded defaults. A
+complication is that the soure code has \KPSE\ calls and
+references to \KPSE\ variables all over the place, so occasionally
+we run into interesting bugs.
+
+Anyhow, while Taco hacked his way around the code, I converted my
+existing \RUBY\ based \KPSE\ variant into \LUA\ and started working
+from that point. The advantage of having our own \IO\ handler is
+that we can go beyond \KPSE. For instance, since \LUATEX\ has,
+among a few others, the \ZIP\ libraries linked in, we can read from
+\ZIP\ files, and keep all \TEX\ related files in \TDS\ compliant \ZIP\
+files as well. This means that one can say:
+
+\starttyping
+\input zip:///somezipfile.zip?name=/somepath/somefile.tex
+\stoptyping
+
+and use similar references to access files. Of course we had to make
+sure that \KPSE\ like searching in the \TDS\ (standardized \TEX\ trees)
+works smoothly. There are plans to link the curl library into \LUATEX,
+so that we can go beyong this and access repositories.
+
+Of course, in order to be more or less \KPSE\ and \WEBC\
+compliant, we also need to support this paranoid file handling, so
+we provide mechanisms for that as well. In addition, we provide
+ways to create sandboxes for system calls.
+
+Getting to intercept all log output (well, most log output) was
+a problem in itself. For this I used a (preliminary) \XML\ based
+log format, which will make log parsing easier. Because we have
+full control over file searching, opening and closing, we can
+also provide more information about what files are loaded. For
+instance we can now easily trace what \TFM\ files \TEX\ reads.
+
+Implementing additional methods for locating and opening files is
+not that complex because the library that ships with \CONTEXT\
+is already prepared for this. For instance, implementing support
+for:
+
+\starttyping
+\input http://www.someplace.org/somepath/somefile.tex
+\stoptyping
+
+involved a few lines of code, most of which deals with caching the
+files. Because we overload the whole \IO\ handling, this means that
+the following works ok:
+
+% \bgroup \loggingall
+
+\startbuffer
+\placefigure
+ [][]
+ {http handling}
+ {\externalfigure
+ [http://www.pragma-ade.com/show-gra.pdf]
+ [page=1,width=\textwidth]}
+\stopbuffer
+
+\typebuffer \ifx\ctxlua \undefined \else \getbuffer \fi
+
+% \egroup
+
+Other protocols, like \FTP\ are also supported, so one can say:
+
+\starttyping
+\typefile {ftp://anonymous:@ctan.org/tex-archive/systems\
+ /knuth/lib/plain.tex}
+\stoptyping
+
+On the agenda is playing with database, but by the time that we enter
+that stage linking the \type {curl} libraries into \LUATEX\ should
+have taken place.
+
+\subject{verbatim}
+
+The advance of \LUATEX\ also permitted us to play with a long
+standing wish of catcode tables, a mechanism to quickly switch
+between different ways of treating input characters. An example of
+a place where such changes take place is verbatim (and in \CONTEXT\
+also when dealing with \XML\ input).
+
+We already had encountered the phenomena that when piping back
+results from \LUA\ to \TEX, we needed to take care of catcodes so
+that \TEX\ would see the input as we wished. Earlier experiments
+with applying \type {\scantokens} to a result and thereby
+interpreting the result conforming the current catcode regime was
+not sufficient or at least not handy enough, especially in the
+perspective of fully expandable \LUA\ results. To be honest, the \type
+{\scantokens} command was rather useless for this purposes due to its
+pseudo file nature and its end||of||file handling but in \LUATEX\
+we now have a convenient \type {\scantextokens} which has no side
+effects.
+
+Once catcode tables were in place, and the relevant \CONTEXT\ code
+adapted, I could start playing with one of the trickier parts of
+\TEX\ programming: typesetting \TEX\ using \TEX, or verbatim.
+Because in \CONTEXT\ verbatim is also related to buffering and
+pretty printing, all these mechanism were handled at once. It
+proved to be a pretty good testcase for writing \LUA\ results back
+to \TEX, because anything you can imagine can and will interfere
+(line endings, catcode changes, looking ahead for arguments, etc).
+This is one of the areas where \MKIV\ code will make things look
+more clean and understandable, especially because we could move
+all kind of postprocessing (needed for pretty printing, i.e.\
+syntax highlighting) to \LUA. Interesting is that the resulting
+code is not beforehand faster.
+
+Pretty printing 1000 small (one line) buffers and 5000 simple
+\type {\type} commands perform as follows:
+
+\starttabulate[|l|c|c|c|c|]
+\NC \NC \TEX\ normal \NC \TEX\ pretty \NC \LUA\ normal \NC \LUA\ pretty \NC \NR
+\NC buffer \NC 2.5 (2.35) \NC ~4.5 (3.05) \NC 2.2 (1.8) \NC ~2.5 (2.0) \NC \NR
+\NC inline \NC 7.7 (4.90) \NC 11.5 (7.25) \NC 9.1 (6.3) \NC 10.9 (7.5) \NC \NR
+\stoptabulate
+
+Between braces the runtime on Taco's more modern machine is shown.
+It's not that easy to draw conclusions from this because \TEX\
+uses files for buffers and with \LUA\ we store buffers in memory.
+For inline verbatim, \LUA\ call's bring some overhead, but with
+more complex content, this becomes less noticable. Also, the \LUA\
+code is probably less optimized than the \TEX\ code, and we don't
+know yet what benefits a Just In Time \LUA\ compiler will bring.
+
+\subject{xml}
+
+Interesting is that the first experiments with \XML\ processing
+don't show the expected gain in speed. This is due to the fact
+that the \CONTEXT\ \XML\ parser is highly optimized. However, if
+we want to load a whole \XML\ file, for instance the formal
+\CONTEXT\ interface specification \type {cont-en.xml}, then we can
+bring down loading time (as well as \TEX\ memory usage) down from
+multiple seconds to a blink of the eyes. Experiments with internal
+mappings and manipulations demonstrated that we may not so much
+need an alternative for the current parser, but can add additional,
+special purpose ones.
+
+We may consider linking \XSLTPROC\ into \LUATEX, but this is yet
+undecided. After all, the problem of typesetting does not really
+change, so we may as well keep the process of manipulating and
+typesetting separated.
+
+\subject{multipass data}
+
+Those who know \CONTEXT\ a bit will know that it may need multiple
+passes to typeset a document. \CONTEXT\ not only keeps track of
+index entries, list entries, cross references, but also optimizes
+some of the output based on information gathered in previous
+passes. Especially so called two||pass data and positional
+information puts some demands on memory and runtime. Two||pass
+data is collapsed in lists because otherwise we would run out of
+memory (at least this was true years ago when these mechanisms
+were introduced). Positional information is stored in hashes and
+has always put a bit of a burden on the size of a so called
+utility file (\CONTEXT\ stores all information in one auxiliary
+file).
+
+These two datatypes were the first we moved to a \LUA\ auxiliary
+file and eventually all information will move there. The advantage
+is that we can use efficient hashes (without limitations) and only
+need to run over the file once. And \LUA\ is incredibly fast in
+loading the tables where we keep track of these things. For
+instance, a test file storing and reading 10.000 complex positions
+takes 3.2 seconds runtime with \LUATEX\ but 8.7 seconds with
+traditional \PDFTEX. Imagine what this will save when dealing with
+huge files (400 page 300 Meg files) that need three or more passes
+to be typeset. And, now we can without problems bump position
+tracking to milions of positions.
+
+\subject{resources}
+
+Finding files is somewhat tricky and has a history in the \TEX\
+community and its distributions. For reasons of packaging and
+searching files are organized in a tree and there are rules for
+locating files of given types in this tree. When we say
+
+\starttyping
+\input blabla.tex
+\stoptyping
+
+\TEX\ will look for this file by consulting the path specification
+associated with the filetype. When we say
+
+\starttyping
+\input blabla
+\stoptyping
+
+\TEX\ will add the \type {.tex} suffix itself. Most other filetypes
+are not seen by users but are dealt with in a similar way internally.
+
+As mentioned before, we support reading from other resources than
+the standard file system, for instance we can input files from
+websites or read from \ZIP\ archives. Although this works quite well,
+we need to keep in mind that there are some conflicting interests:
+structured search based on type related specifications versus more
+or less explicit requests.
+
+\starttyping
+\input zip:///archive.zip?name=blabla.tex
+\input zip:///archive.zip?name=/somepath/blabla.tex
+\stoptyping
+
+Here we need to be rather precise in defining the file location. We can
+of course build rather complex mechanisms for locating files here, but
+at some point that may backfire and result in unwanted matches.
+
+If you want to treat a \ZIP\ archive as a \TEX\ tree, then you need
+to register the file:
+
+\starttyping
+\usezipfile[archive.zip]
+\usezipfile[tex.zip][texmf-local]
+\usezipfile[tex.zip?tree=texmf-local]
+\stoptyping
+
+The first variant registers all files in the archive, but the
+next two are equivalent and only register a subtree. The registered
+tree is prepended to the \type {TEXMF} specification and thereby
+may overload existing trees.
+
+If an acrhive is not a real \TEX\ tree, you can access files anywhere
+in the tree by using wildcards
+
+\starttyping
+\input */blabla.tex
+\input */somepath/blabla.tex
+\stoptyping
+
+These mechanisms evolve over time and it may take a while before they
+stabelize. For instance, the syntax for the \ZIP\ inclusion has been
+adapted more than a year after this chapter was written (which is
+why this section is added).
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/mk/mk-luatex-progress.lut b/doc/context/sources/general/manuals/mk/mk-luatex-progress.lut
new file mode 100644
index 000000000..e5b8b82bd
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-luatex-progress.lut
@@ -0,0 +1,12907 @@
+return {
+ {
+ ["cs_count"]=44952,
+ ["dyn_used"]=632849,
+ ["elapsed_time"]=0.39016199111938,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=81209122,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="33",
+ ["attribute_list"]="13",
+ ["boundary"]="2",
+ ["dir"]="2",
+ ["disc"]="1",
+ ["glue"]="15",
+ ["glue_spec"]="38",
+ ["glyph"]="2",
+ ["hlist"]="5",
+ ["kern"]="4",
+ ["late_lua"]="2",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="8",
+ ["pdf_restore"]="1",
+ ["pdf_save"]="1",
+ ["pdf_setmatrix"]="1",
+ ["penalty"]="1",
+ ["rule"]="4",
+ ["special"]="1",
+ ["temp"]="3",
+ ["user_defined"]="7",
+ ["vlist"]="6",
+ },
+ ["obj_ptr"]=6,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=0,
+ ["str_ptr"]=2145596,
+ },
+ {
+ ["cs_count"]=45030,
+ ["dyn_used"]=636636,
+ ["elapsed_time"]=0.074120044708252,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=87490559,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="559",
+ ["attribute_list"]="187",
+ ["boundary"]="6",
+ ["dir"]="19",
+ ["disc"]="3",
+ ["glue"]="217",
+ ["glue_spec"]="66",
+ ["glyph"]="68",
+ ["hlist"]="226",
+ ["if_stack"]="8",
+ ["kern"]="91",
+ ["late_lua"]="4",
+ ["local_par"]="16",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="46",
+ ["pdf_restore"]="16",
+ ["pdf_save"]="16",
+ ["pdf_setmatrix"]="27",
+ ["penalty"]="23",
+ ["rule"]="54",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="77",
+ },
+ ["obj_ptr"]=9,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145687,
+ },
+ {
+ ["cs_count"]=45031,
+ ["dyn_used"]=636774,
+ ["elapsed_time"]=0.0060100555419922,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=87713025,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="243",
+ ["attribute_list"]="82",
+ ["boundary"]="2",
+ ["dir"]="6",
+ ["disc"]="1",
+ ["glue"]="97",
+ ["glue_spec"]="67",
+ ["glyph"]="14",
+ ["hlist"]="71",
+ ["if_stack"]="10",
+ ["kern"]="65",
+ ["late_lua"]="2",
+ ["local_par"]="5",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="35",
+ ["pdf_restore"]="9",
+ ["pdf_save"]="9",
+ ["pdf_setmatrix"]="13",
+ ["penalty"]="7",
+ ["rule"]="21",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="32",
+ },
+ ["obj_ptr"]=15,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145689,
+ },
+ {
+ ["cs_count"]=45043,
+ ["dyn_used"]=640482,
+ ["elapsed_time"]=0.059628963470459,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=89940771,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="1530",
+ ["attribute_list"]="384",
+ ["boundary"]="58",
+ ["dir"]="6",
+ ["disc"]="40",
+ ["glue"]="636",
+ ["glue_spec"]="116",
+ ["glyph"]="612",
+ ["hlist"]="429",
+ ["if_stack"]="6",
+ ["kern"]="121",
+ ["late_lua"]="32",
+ ["local_par"]="62",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="37",
+ ["pdf_restore"]="9",
+ ["pdf_save"]="9",
+ ["pdf_setmatrix"]="13",
+ ["penalty"]="202",
+ ["rule"]="21",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="68",
+ },
+ ["obj_ptr"]=18,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145709,
+ },
+ {
+ ["cs_count"]=45044,
+ ["dyn_used"]=641915,
+ ["elapsed_time"]=0.015023946762085,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=90120233,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="1068",
+ ["attribute_list"]="270",
+ ["boundary"]="28",
+ ["dir"]="6",
+ ["disc"]="10",
+ ["glue"]="483",
+ ["glue_spec"]="135",
+ ["glyph"]="309",
+ ["hlist"]="265",
+ ["if_stack"]="14",
+ ["kern"]="109",
+ ["late_lua"]="17",
+ ["local_par"]="34",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="35",
+ ["pdf_restore"]="9",
+ ["pdf_save"]="9",
+ ["pdf_setmatrix"]="13",
+ ["penalty"]="100",
+ ["rule"]="21",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="58",
+ },
+ ["obj_ptr"]=23,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145716,
+ },
+ {
+ ["cs_count"]=45047,
+ ["dyn_used"]=643260,
+ ["elapsed_time"]=0.029546976089478,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=91465093,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="1091",
+ ["attribute_list"]="277",
+ ["boundary"]="6",
+ ["dir"]="6",
+ ["disc"]="140",
+ ["glue"]="813",
+ ["glue_spec"]="146",
+ ["glyph"]="2136",
+ ["hlist"]="175",
+ ["if_stack"]="9",
+ ["kern"]="276",
+ ["late_lua"]="14",
+ ["local_par"]="18",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="41",
+ ["pdf_restore"]="9",
+ ["pdf_save"]="9",
+ ["pdf_setmatrix"]="13",
+ ["penalty"]="46",
+ ["rule"]="21",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="46",
+ },
+ ["obj_ptr"]=26,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145721,
+ },
+ {
+ ["cs_count"]=45047,
+ ["dyn_used"]=643905,
+ ["elapsed_time"]=0.0065109729766846,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=91526796,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="681",
+ ["attribute_list"]="176",
+ ["boundary"]="2",
+ ["dir"]="6",
+ ["disc"]="4",
+ ["glue"]="346",
+ ["glue_spec"]="148",
+ ["glyph"]="47",
+ ["hlist"]="110",
+ ["if_stack"]="10",
+ ["kern"]="85",
+ ["late_lua"]="5",
+ ["local_par"]="9",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="35",
+ ["pdf_restore"]="9",
+ ["pdf_save"]="9",
+ ["pdf_setmatrix"]="13",
+ ["penalty"]="11",
+ ["rule"]="21",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="45",
+ },
+ ["obj_ptr"]=30,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145722,
+ },
+ {
+ ["cs_count"]=45060,
+ ["dyn_used"]=646100,
+ ["elapsed_time"]=0.044574022293091,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=92439305,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="1647",
+ ["attribute_list"]="409",
+ ["boundary"]="6",
+ ["dir"]="16",
+ ["disc"]="211",
+ ["glue"]="1034",
+ ["glue_spec"]="168",
+ ["glyph"]="2645",
+ ["hlist"]="260",
+ ["if_stack"]="4",
+ ["kern"]="316",
+ ["late_lua"]="23",
+ ["local_par"]="27",
+ ["margin_kern"]="2",
+ ["math"]="26",
+ ["noad"]="1",
+ ["pdf_literal"]="57",
+ ["pdf_restore"]="9",
+ ["pdf_save"]="9",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="83",
+ ["rule"]="21",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="46",
+ },
+ ["obj_ptr"]=33,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145742,
+ },
+ {
+ ["cs_count"]=45061,
+ ["dyn_used"]=647471,
+ ["elapsed_time"]=0.018562078475952,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=92828167,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="1139",
+ ["attribute_list"]="286",
+ ["boundary"]="2",
+ ["dir"]="10",
+ ["disc"]="96",
+ ["glue"]="782",
+ ["glue_spec"]="180",
+ ["glyph"]="1435",
+ ["hlist"]="175",
+ ["if_stack"]="14",
+ ["kern"]="173",
+ ["late_lua"]="16",
+ ["local_par"]="20",
+ ["margin_kern"]="2",
+ ["math"]="10",
+ ["noad"]="1",
+ ["pdf_literal"]="47",
+ ["pdf_restore"]="9",
+ ["pdf_save"]="9",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="42",
+ ["rule"]="21",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="45",
+ },
+ ["obj_ptr"]=37,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145749,
+ },
+ {
+ ["cs_count"]=45064,
+ ["dyn_used"]=649271,
+ ["elapsed_time"]=0.040566921234131,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=93607770,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="1380",
+ ["attribute_list"]="348",
+ ["boundary"]="18",
+ ["dir"]="6",
+ ["disc"]="203",
+ ["glue"]="1017",
+ ["glue_spec"]="194",
+ ["glyph"]="2510",
+ ["hlist"]="195",
+ ["if_stack"]="4",
+ ["kern"]="302",
+ ["late_lua"]="17",
+ ["local_par"]="21",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="41",
+ ["pdf_restore"]="9",
+ ["pdf_save"]="9",
+ ["pdf_setmatrix"]="13",
+ ["penalty"]="64",
+ ["rule"]="21",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="49",
+ },
+ ["obj_ptr"]=40,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145754,
+ },
+ {
+ ["cs_count"]=45089,
+ ["dyn_used"]=655901,
+ ["elapsed_time"]=0.052585124969482,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=95224833,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="1381",
+ ["attribute_list"]="346",
+ ["boundary"]="6",
+ ["dir"]="9",
+ ["disc"]="131",
+ ["glue"]="925",
+ ["glue_spec"]="208",
+ ["glyph"]="1844",
+ ["hlist"]="194",
+ ["if_stack"]="15",
+ ["kern"]="256",
+ ["late_lua"]="17",
+ ["local_par"]="21",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="50",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="18",
+ ["penalty"]="43",
+ ["rule"]="28",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="55",
+ },
+ ["obj_ptr"]=49,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145789,
+ },
+ {
+ ["cs_count"]=45094,
+ ["dyn_used"]=656841,
+ ["elapsed_time"]=0.02103590965271,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=95416363,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="1709",
+ ["attribute_list"]="425",
+ ["boundary"]="6",
+ ["dir"]="9",
+ ["disc"]="118",
+ ["glue"]="1048",
+ ["glue_spec"]="217",
+ ["glyph"]="1894",
+ ["hlist"]="239",
+ ["if_stack"]="4",
+ ["kern"]="264",
+ ["late_lua"]="15",
+ ["local_par"]="16",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="46",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="18",
+ ["penalty"]="46",
+ ["rule"]="32",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="55",
+ },
+ ["obj_ptr"]=52,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145795,
+ },
+ {
+ ["cs_count"]=45094,
+ ["dyn_used"]=658261,
+ ["elapsed_time"]=0.027043104171753,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=95629207,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="1518",
+ ["attribute_list"]="382",
+ ["boundary"]="6",
+ ["dir"]="6",
+ ["disc"]="222",
+ ["glue"]="1171",
+ ["glue_spec"]="227",
+ ["glyph"]="2854",
+ ["hlist"]="175",
+ ["if_stack"]="4",
+ ["kern"]="345",
+ ["late_lua"]="14",
+ ["local_par"]="18",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="48",
+ ["pdf_restore"]="9",
+ ["pdf_save"]="9",
+ ["pdf_setmatrix"]="13",
+ ["penalty"]="43",
+ ["rule"]="21",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="46",
+ },
+ ["obj_ptr"]=56,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145796,
+ },
+ {
+ ["cs_count"]=45096,
+ ["dyn_used"]=659726,
+ ["elapsed_time"]=0.045573949813843,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=96810177,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="2112",
+ ["attribute_list"]="529",
+ ["boundary"]="6",
+ ["dir"]="6",
+ ["disc"]="196",
+ ["glue"]="1348",
+ ["glue_spec"]="237",
+ ["glyph"]="2591",
+ ["hlist"]="305",
+ ["if_stack"]="4",
+ ["kern"]="362",
+ ["late_lua"]="19",
+ ["local_par"]="17",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="38",
+ ["pdf_restore"]="9",
+ ["pdf_save"]="9",
+ ["pdf_setmatrix"]="13",
+ ["penalty"]="48",
+ ["rule"]="21",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="46",
+ },
+ ["obj_ptr"]=59,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145800,
+ },
+ {
+ ["cs_count"]=45106,
+ ["dyn_used"]=662858,
+ ["elapsed_time"]=0.027546882629395,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=96993121,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="1792",
+ ["attribute_list"]="446",
+ ["boundary"]="22",
+ ["dir"]="21",
+ ["disc"]="133",
+ ["glue"]="1122",
+ ["glue_spec"]="248",
+ ["glyph"]="1825",
+ ["hlist"]="249",
+ ["if_stack"]="4",
+ ["kern"]="246",
+ ["late_lua"]="22",
+ ["local_par"]="23",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="40",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="63",
+ ["rule"]="36",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="85",
+ },
+ ["obj_ptr"]=65,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145811,
+ },
+ {
+ ["cs_count"]=45106,
+ ["dyn_used"]=663705,
+ ["elapsed_time"]=0.011518001556396,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=97103083,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="1588",
+ ["attribute_list"]="398",
+ ["boundary"]="10",
+ ["dir"]="16",
+ ["disc"]="98",
+ ["glue"]="1031",
+ ["glue_spec"]="252",
+ ["glyph"]="1566",
+ ["hlist"]="196",
+ ["if_stack"]="4",
+ ["kern"]="217",
+ ["late_lua"]="14",
+ ["local_par"]="17",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="38",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="33",
+ ["rule"]="31",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="71",
+ },
+ ["obj_ptr"]=68,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145812,
+ },
+ {
+ ["cs_count"]=45108,
+ ["dyn_used"]=666239,
+ ["elapsed_time"]=0.03056001663208,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=97386310,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="1915",
+ ["attribute_list"]="476",
+ ["boundary"]="18",
+ ["dir"]="21",
+ ["disc"]="166",
+ ["glue"]="1339",
+ ["glue_spec"]="274",
+ ["glyph"]="2566",
+ ["hlist"]="276",
+ ["if_stack"]="4",
+ ["kern"]="284",
+ ["late_lua"]="33",
+ ["local_par"]="34",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="46",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="71",
+ ["rule"]="36",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="83",
+ },
+ ["obj_ptr"]=72,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145821,
+ },
+ {
+ ["cs_count"]=45108,
+ ["dyn_used"]=667788,
+ ["elapsed_time"]=0.017028093338013,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=97527225,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="2190",
+ ["attribute_list"]="546",
+ ["boundary"]="14",
+ ["dir"]="21",
+ ["disc"]="119",
+ ["glue"]="1236",
+ ["glue_spec"]="290",
+ ["glyph"]="1713",
+ ["hlist"]="306",
+ ["if_stack"]="4",
+ ["kern"]="277",
+ ["late_lua"]="19",
+ ["local_par"]="18",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="42",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="44",
+ ["rule"]="36",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="83",
+ },
+ ["obj_ptr"]=75,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145822,
+ },
+ {
+ ["cs_count"]=45108,
+ ["dyn_used"]=668529,
+ ["elapsed_time"]=0.027544975280762,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=97702650,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="2408",
+ ["attribute_list"]="599",
+ ["boundary"]="18",
+ ["dir"]="16",
+ ["disc"]="203",
+ ["glue"]="1475",
+ ["glue_spec"]="287",
+ ["glyph"]="2797",
+ ["hlist"]="313",
+ ["if_stack"]="4",
+ ["kern"]="323",
+ ["late_lua"]="23",
+ ["local_par"]="22",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="44",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="66",
+ ["rule"]="31",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="71",
+ },
+ ["obj_ptr"]=90,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145823,
+ },
+ {
+ ["cs_count"]=45108,
+ ["dyn_used"]=670037,
+ ["elapsed_time"]=0.022036075592041,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=97921024,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="1909",
+ ["attribute_list"]="473",
+ ["boundary"]="14",
+ ["dir"]="16",
+ ["disc"]="132",
+ ["glue"]="1350",
+ ["glue_spec"]="308",
+ ["glyph"]="2261",
+ ["hlist"]="232",
+ ["if_stack"]="4",
+ ["kern"]="237",
+ ["late_lua"]="30",
+ ["local_par"]="32",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="50",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="62",
+ ["rule"]="31",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="70",
+ },
+ ["obj_ptr"]=93,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145824,
+ },
+ {
+ ["cs_count"]=45108,
+ ["dyn_used"]=670924,
+ ["elapsed_time"]=0.0080130100250244,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=98058659,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="1708",
+ ["attribute_list"]="425",
+ ["boundary"]="10",
+ ["dir"]="16",
+ ["disc"]="20",
+ ["glue"]="961",
+ ["glue_spec"]="309",
+ ["glyph"]="460",
+ ["hlist"]="169",
+ ["if_stack"]="14",
+ ["kern"]="106",
+ ["late_lua"]="13",
+ ["local_par"]="15",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="38",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="26",
+ ["rule"]="31",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="69",
+ },
+ ["obj_ptr"]=96,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145830,
+ },
+ {
+ ["cs_count"]=45108,
+ ["dyn_used"]=672664,
+ ["elapsed_time"]=0.029047966003418,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=98384114,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="2461",
+ ["attribute_list"]="612",
+ ["boundary"]="14",
+ ["dir"]="16",
+ ["disc"]="206",
+ ["glue"]="1597",
+ ["glue_spec"]="319",
+ ["glyph"]="3033",
+ ["hlist"]="293",
+ ["if_stack"]="4",
+ ["kern"]="330",
+ ["late_lua"]="22",
+ ["local_par"]="21",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="50",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="56",
+ ["rule"]="31",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="70",
+ },
+ ["obj_ptr"]=99,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145831,
+ },
+ {
+ ["cs_count"]=45108,
+ ["dyn_used"]=674532,
+ ["elapsed_time"]=0.021034955978394,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=98593557,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="2189",
+ ["attribute_list"]="542",
+ ["boundary"]="10",
+ ["dir"]="20",
+ ["disc"]="128",
+ ["glue"]="1487",
+ ["glue_spec"]="345",
+ ["glyph"]="2103",
+ ["hlist"]="247",
+ ["if_stack"]="4",
+ ["kern"]="223",
+ ["late_lua"]="33",
+ ["local_par"]="35",
+ ["margin_kern"]="2",
+ ["math"]="8",
+ ["noad"]="1",
+ ["pdf_literal"]="60",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="62",
+ ["rule"]="31",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="69",
+ },
+ ["obj_ptr"]=103,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145832,
+ },
+ {
+ ["cs_count"]=45108,
+ ["dyn_used"]=676099,
+ ["elapsed_time"]=0.021034002304077,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=98862829,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="2323",
+ ["attribute_list"]="575",
+ ["boundary"]="10",
+ ["dir"]="16",
+ ["disc"]="117",
+ ["glue"]="1575",
+ ["glue_spec"]="364",
+ ["glyph"]="2174",
+ ["hlist"]="237",
+ ["if_stack"]="4",
+ ["kern"]="231",
+ ["late_lua"]="36",
+ ["local_par"]="38",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="64",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="58",
+ ["rule"]="31",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="69",
+ },
+ ["obj_ptr"]=106,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145833,
+ },
+ {
+ ["cs_count"]=45108,
+ ["dyn_used"]=677030,
+ ["elapsed_time"]=0.0085129737854004,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=98989198,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="2036",
+ ["attribute_list"]="506",
+ ["boundary"]="10",
+ ["dir"]="16",
+ ["disc"]="49",
+ ["glue"]="1240",
+ ["glue_spec"]="366",
+ ["glyph"]="825",
+ ["hlist"]="175",
+ ["if_stack"]="14",
+ ["kern"]="143",
+ ["late_lua"]="13",
+ ["local_par"]="15",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="38",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="28",
+ ["rule"]="31",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="69",
+ },
+ ["obj_ptr"]=109,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145839,
+ },
+ {
+ ["cs_count"]=45122,
+ ["dyn_used"]=680457,
+ ["elapsed_time"]=0.043071031570435,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=99678450,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="5047",
+ ["attribute_list"]="1056",
+ ["boundary"]="22",
+ ["dir"]="16",
+ ["disc"]="72",
+ ["glue"]="1837",
+ ["glue_spec"]="415",
+ ["glyph"]="1462",
+ ["hlist"]="623",
+ ["if_stack"]="4",
+ ["kern"]="230",
+ ["late_lua"]="37",
+ ["local_par"]="39",
+ ["margin_kern"]="2",
+ ["math"]="34",
+ ["noad"]="1",
+ ["pdf_literal"]="78",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="96",
+ ["rule"]="90",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="106",
+ },
+ ["obj_ptr"]=112,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145860,
+ },
+ {
+ ["cs_count"]=45122,
+ ["dyn_used"]=682119,
+ ["elapsed_time"]=0.024554014205933,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=99959674,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="2685",
+ ["attribute_list"]="649",
+ ["boundary"]="22",
+ ["dir"]="16",
+ ["disc"]="137",
+ ["glue"]="1743",
+ ["glue_spec"]="426",
+ ["glyph"]="2228",
+ ["hlist"]="240",
+ ["if_stack"]="14",
+ ["kern"]="248",
+ ["late_lua"]="28",
+ ["local_par"]="30",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="52",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="67",
+ ["rule"]="31",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="72",
+ },
+ ["obj_ptr"]=117,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145866,
+ },
+ {
+ ["cs_count"]=45122,
+ ["dyn_used"]=682665,
+ ["elapsed_time"]=0.0060100555419922,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=100020898,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="2273",
+ ["attribute_list"]="549",
+ ["boundary"]="10",
+ ["dir"]="16",
+ ["disc"]="24",
+ ["glue"]="1334",
+ ["glue_spec"]="427",
+ ["glyph"]="471",
+ ["hlist"]="164",
+ ["if_stack"]="14",
+ ["kern"]="109",
+ ["late_lua"]="10",
+ ["local_par"]="12",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="36",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="23",
+ ["rule"]="31",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="69",
+ },
+ ["obj_ptr"]=120,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145867,
+ },
+ {
+ ["cs_count"]=45122,
+ ["dyn_used"]=683361,
+ ["elapsed_time"]=0.0050079822540283,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=100091057,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="2282",
+ ["attribute_list"]="551",
+ ["boundary"]="10",
+ ["dir"]="16",
+ ["disc"]="10",
+ ["glue"]="1305",
+ ["glue_spec"]="429",
+ ["glyph"]="285",
+ ["hlist"]="164",
+ ["if_stack"]="15",
+ ["kern"]="96",
+ ["late_lua"]="11",
+ ["local_par"]="13",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="36",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="23",
+ ["rule"]="31",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="69",
+ },
+ ["obj_ptr"]=123,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145868,
+ },
+ {
+ ["cs_count"]=45128,
+ ["dyn_used"]=684717,
+ ["elapsed_time"]=0.028546810150146,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=100345283,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="3273",
+ ["attribute_list"]="789",
+ ["boundary"]="14",
+ ["dir"]="16",
+ ["disc"]="226",
+ ["glue"]="2055",
+ ["glue_spec"]="440",
+ ["glyph"]="3057",
+ ["hlist"]="341",
+ ["if_stack"]="4",
+ ["kern"]="359",
+ ["late_lua"]="24",
+ ["local_par"]="22",
+ ["margin_kern"]="2",
+ ["math"]="4",
+ ["noad"]="1",
+ ["pdf_literal"]="38",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="81",
+ ["rule"]="31",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="70",
+ },
+ ["obj_ptr"]=126,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145875,
+ },
+ {
+ ["cs_count"]=45142,
+ ["dyn_used"]=686285,
+ ["elapsed_time"]=0.027043104171753,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=100520507,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="3015",
+ ["attribute_list"]="727",
+ ["boundary"]="10",
+ ["dir"]="18",
+ ["disc"]="226",
+ ["glue"]="2060",
+ ["glue_spec"]="449",
+ ["glyph"]="3300",
+ ["hlist"]="286",
+ ["if_stack"]="4",
+ ["kern"]="359",
+ ["late_lua"]="19",
+ ["local_par"]="21",
+ ["margin_kern"]="2",
+ ["math"]="4",
+ ["noad"]="1",
+ ["pdf_literal"]="50",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="79",
+ ["rule"]="31",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="69",
+ },
+ ["obj_ptr"]=129,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145890,
+ },
+ {
+ ["cs_count"]=45142,
+ ["dyn_used"]=688208,
+ ["elapsed_time"]=0.025042057037354,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=100681718,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="2913",
+ ["attribute_list"]="706",
+ ["boundary"]="10",
+ ["dir"]="20",
+ ["disc"]="160",
+ ["glue"]="2026",
+ ["glue_spec"]="461",
+ ["glyph"]="2779",
+ ["hlist"]="254",
+ ["if_stack"]="4",
+ ["kern"]="260",
+ ["late_lua"]="23",
+ ["local_par"]="25",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="50",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="65",
+ ["rule"]="31",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="69",
+ },
+ ["obj_ptr"]=132,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145891,
+ },
+ {
+ ["cs_count"]=45142,
+ ["dyn_used"]=689090,
+ ["elapsed_time"]=0.011018991470337,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=101089476,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="2503",
+ ["attribute_list"]="605",
+ ["boundary"]="10",
+ ["dir"]="16",
+ ["disc"]="29",
+ ["glue"]="1488",
+ ["glue_spec"]="462",
+ ["glyph"]="598",
+ ["hlist"]="166",
+ ["if_stack"]="14",
+ ["kern"]="114",
+ ["late_lua"]="11",
+ ["local_par"]="13",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="36",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="25",
+ ["rule"]="31",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="69",
+ },
+ ["obj_ptr"]=136,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145903,
+ },
+ {
+ ["cs_count"]=45142,
+ ["dyn_used"]=690715,
+ ["elapsed_time"]=0.023092985153198,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=101357677,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="2856",
+ ["attribute_list"]="691",
+ ["boundary"]="18",
+ ["dir"]="16",
+ ["disc"]="142",
+ ["glue"]="1978",
+ ["glue_spec"]="483",
+ ["glyph"]="2516",
+ ["hlist"]="236",
+ ["if_stack"]="4",
+ ["kern"]="243",
+ ["late_lua"]="30",
+ ["local_par"]="32",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="54",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="65",
+ ["rule"]="31",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="71",
+ },
+ ["obj_ptr"]=139,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145904,
+ },
+ {
+ ["cs_count"]=45142,
+ ["dyn_used"]=692395,
+ ["elapsed_time"]=0.029547929763794,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=101627585,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="3130",
+ ["attribute_list"]="760",
+ ["boundary"]="14",
+ ["dir"]="23",
+ ["disc"]="222",
+ ["glue"]="2235",
+ ["glue_spec"]="501",
+ ["glyph"]="3228",
+ ["hlist"]="275",
+ ["if_stack"]="4",
+ ["kern"]="326",
+ ["late_lua"]="28",
+ ["local_par"]="30",
+ ["margin_kern"]="2",
+ ["math"]="14",
+ ["noad"]="1",
+ ["pdf_literal"]="60",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="80",
+ ["rule"]="31",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="70",
+ },
+ ["obj_ptr"]=142,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145905,
+ },
+ {
+ ["cs_count"]=45142,
+ ["dyn_used"]=693283,
+ ["elapsed_time"]=0.025039911270142,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=101816162,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="2991",
+ ["attribute_list"]="726",
+ ["boundary"]="10",
+ ["dir"]="16",
+ ["disc"]="272",
+ ["glue"]="2324",
+ ["glue_spec"]="507",
+ ["glyph"]="3789",
+ ["hlist"]="225",
+ ["if_stack"]="4",
+ ["kern"]="363",
+ ["late_lua"]="17",
+ ["local_par"]="19",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="64",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="53",
+ ["rule"]="31",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="69",
+ },
+ ["obj_ptr"]=145,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145906,
+ },
+ {
+ ["cs_count"]=45142,
+ ["dyn_used"]=694587,
+ ["elapsed_time"]=0.025042057037354,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=101965491,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="3077",
+ ["attribute_list"]="746",
+ ["boundary"]="14",
+ ["dir"]="16",
+ ["disc"]="165",
+ ["glue"]="2193",
+ ["glue_spec"]="523",
+ ["glyph"]="2911",
+ ["hlist"]="248",
+ ["if_stack"]="4",
+ ["kern"]="283",
+ ["late_lua"]="26",
+ ["local_par"]="28",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="44",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="67",
+ ["rule"]="31",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="70",
+ },
+ ["obj_ptr"]=148,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145907,
+ },
+ {
+ ["cs_count"]=45142,
+ ["dyn_used"]=695825,
+ ["elapsed_time"]=0.027044057846069,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=102030766,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="3207",
+ ["attribute_list"]="779",
+ ["boundary"]="18",
+ ["dir"]="16",
+ ["disc"]="202",
+ ["glue"]="2252",
+ ["glue_spec"]="532",
+ ["glyph"]="3049",
+ ["hlist"]="242",
+ ["if_stack"]="4",
+ ["kern"]="299",
+ ["late_lua"]="21",
+ ["local_par"]="23",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="50",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="64",
+ ["rule"]="31",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="71",
+ },
+ ["obj_ptr"]=151,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145908,
+ },
+ {
+ ["cs_count"]=45142,
+ ["dyn_used"]=697029,
+ ["elapsed_time"]=0.026043891906738,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=102064029,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="3106",
+ ["attribute_list"]="753",
+ ["boundary"]="10",
+ ["dir"]="16",
+ ["disc"]="220",
+ ["glue"]="2255",
+ ["glue_spec"]="545",
+ ["glyph"]="3037",
+ ["hlist"]="233",
+ ["if_stack"]="4",
+ ["kern"]="312",
+ ["late_lua"]="22",
+ ["local_par"]="24",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="42",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="23",
+ ["penalty"]="45",
+ ["rule"]="31",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="69",
+ },
+ ["obj_ptr"]=154,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145909,
+ },
+ {
+ ["cs_count"]=45142,
+ ["dyn_used"]=698192,
+ ["elapsed_time"]=0.022536039352417,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=102268914,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="3097",
+ ["attribute_list"]="751",
+ ["boundary"]="10",
+ ["dir"]="16",
+ ["disc"]="129",
+ ["glue"]="2389",
+ ["glue_spec"]="572",
+ ["glyph"]="2399",
+ ["hlist"]="237",
+ ["if_stack"]="4",
+ ["kern"]="238",
+ ["late_lua"]="34",
+ ["local_par"]="36",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="40",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="54",
+ ["rule"]="31",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="69",
+ },
+ ["obj_ptr"]=157,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145910,
+ },
+ {
+ ["cs_count"]=45142,
+ ["dyn_used"]=699136,
+ ["elapsed_time"]=0.017028093338013,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=102504440,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="2950",
+ ["attribute_list"]="714",
+ ["boundary"]="10",
+ ["dir"]="16",
+ ["disc"]="46",
+ ["glue"]="2693",
+ ["glue_spec"]="607",
+ ["glyph"]="1567",
+ ["hlist"]="240",
+ ["if_stack"]="4",
+ ["kern"]="136",
+ ["late_lua"]="47",
+ ["local_par"]="49",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="42",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="60",
+ ["rule"]="31",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="69",
+ },
+ ["obj_ptr"]=160,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145911,
+ },
+ {
+ ["cs_count"]=45142,
+ ["dyn_used"]=699925,
+ ["elapsed_time"]=0.014023065567017,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=102629013,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="3002",
+ ["attribute_list"]="727",
+ ["boundary"]="10",
+ ["dir"]="16",
+ ["disc"]="27",
+ ["glue"]="2917",
+ ["glue_spec"]="647",
+ ["glyph"]="1379",
+ ["hlist"]="249",
+ ["if_stack"]="6",
+ ["kern"]="115",
+ ["late_lua"]="52",
+ ["local_par"]="54",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="40",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="65",
+ ["rule"]="31",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="69",
+ },
+ ["obj_ptr"]=163,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145912,
+ },
+ {
+ ["cs_count"]=45143,
+ ["dyn_used"]=701091,
+ ["elapsed_time"]=0.090649843215942,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=76543469,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="3163",
+ ["attribute_list"]="766",
+ ["boundary"]="10",
+ ["dir"]="16",
+ ["disc"]="65",
+ ["glue"]="2590",
+ ["glue_spec"]="671",
+ ["glyph"]="1740",
+ ["hlist"]="235",
+ ["if_stack"]="6",
+ ["kern"]="147",
+ ["late_lua"]="35",
+ ["local_par"]="37",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="44",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="21",
+ ["penalty"]="58",
+ ["rule"]="31",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="69",
+ },
+ ["obj_ptr"]=167,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145934,
+ },
+ {
+ ["cs_count"]=45143,
+ ["dyn_used"]=703150,
+ ["elapsed_time"]=0.033555030822754,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=77305383,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="4727",
+ ["attribute_list"]="1155",
+ ["boundary"]="18",
+ ["dir"]="16",
+ ["disc"]="90",
+ ["glue"]="3074",
+ ["glue_spec"]="694",
+ ["glyph"]="2220",
+ ["hlist"]="588",
+ ["if_stack"]="4",
+ ["kern"]="330",
+ ["late_lua"]="42",
+ ["local_par"]="27",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="42",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="83",
+ ["rule"]="35",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="71",
+ },
+ ["obj_ptr"]=173,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["str_ptr"]=2145942,
+ },
+ {
+ ["cs_count"]=45143,
+ ["dyn_used"]=703295,
+ ["elapsed_time"]=0.02153491973877,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=77453484,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="4460",
+ ["attribute_list"]="1090",
+ ["boundary"]="14",
+ ["dir"]="16",
+ ["disc"]="135",
+ ["glue"]="3045",
+ ["glue_spec"]="690",
+ ["glyph"]="2575",
+ ["hlist"]="491",
+ ["if_stack"]="4",
+ ["kern"]="344",
+ ["late_lua"]="30",
+ ["local_par"]="20",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="38",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="65",
+ ["rule"]="33",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="70",
+ },
+ ["obj_ptr"]=177,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2145943,
+ },
+ {
+ ["cs_count"]=45144,
+ ["dyn_used"]=704427,
+ ["elapsed_time"]=0.099662065505981,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=84470571,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="3617",
+ ["attribute_list"]="916",
+ ["boundary"]="10",
+ ["dir"]="16",
+ ["disc"]="93",
+ ["glue"]="2863",
+ ["glue_spec"]="715",
+ ["glyph"]="1903",
+ ["hlist"]="276",
+ ["if_stack"]="5",
+ ["kern"]="193",
+ ["late_lua"]="35",
+ ["local_par"]="37",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="107",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="68",
+ ["rule"]="72",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="69",
+ },
+ ["obj_ptr"]=183,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2145951,
+ },
+ {
+ ["cs_count"]=45144,
+ ["dyn_used"]=705657,
+ ["elapsed_time"]=0.025604963302612,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=84681957,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="3748",
+ ["attribute_list"]="929",
+ ["boundary"]="14",
+ ["dir"]="16",
+ ["disc"]="163",
+ ["glue"]="3007",
+ ["glue_spec"]="730",
+ ["glyph"]="2777",
+ ["hlist"]="258",
+ ["if_stack"]="4",
+ ["kern"]="253",
+ ["late_lua"]="27",
+ ["local_par"]="29",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="73",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="60",
+ ["rule"]="52",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="70",
+ },
+ ["obj_ptr"]=187,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2145952,
+ },
+ {
+ ["cs_count"]=45144,
+ ["dyn_used"]=706920,
+ ["elapsed_time"]=0.021536111831665,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=84870410,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="3666",
+ ["attribute_list"]="888",
+ ["boundary"]="10",
+ ["dir"]="16",
+ ["disc"]="163",
+ ["glue"]="3006",
+ ["glue_spec"]="744",
+ ["glyph"]="2807",
+ ["hlist"]="225",
+ ["if_stack"]="4",
+ ["kern"]="245",
+ ["late_lua"]="24",
+ ["local_par"]="26",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="49",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="49",
+ ["rule"]="32",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="69",
+ },
+ ["obj_ptr"]=190,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2145953,
+ },
+ {
+ ["cs_count"]=45144,
+ ["dyn_used"]=707979,
+ ["elapsed_time"]=0.016526937484741,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=85083646,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="3932",
+ ["attribute_list"]="954",
+ ["boundary"]="10",
+ ["dir"]="16",
+ ["disc"]="53",
+ ["glue"]="2816",
+ ["glue_spec"]="748",
+ ["glyph"]="1231",
+ ["hlist"]="293",
+ ["if_stack"]="14",
+ ["kern"]="164",
+ ["late_lua"]="20",
+ ["local_par"]="17",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="43",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="36",
+ ["rule"]="34",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="69",
+ },
+ ["obj_ptr"]=193,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2145959,
+ },
+ {
+ ["cs_count"]=45145,
+ ["dyn_used"]=710279,
+ ["elapsed_time"]=0.036059141159058,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=86438108,
+ ["max_buf_stack"]=302,
+ ["node_memory"]={
+ ["attribute"]="4675",
+ ["attribute_list"]="1139",
+ ["boundary"]="22",
+ ["dir"]="19",
+ ["disc"]="140",
+ ["glue"]="3278",
+ ["glue_spec"]="777",
+ ["glyph"]="2288",
+ ["hlist"]="437",
+ ["if_stack"]="4",
+ ["kern"]="294",
+ ["late_lua"]="35",
+ ["local_par"]="27",
+ ["margin_kern"]="2",
+ ["math"]="6",
+ ["noad"]="1",
+ ["pdf_literal"]="51",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="108",
+ ["rule"]="34",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="72",
+ },
+ ["obj_ptr"]=196,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2145962,
+ },
+ {
+ ["cs_count"]=45145,
+ ["dyn_used"]=711415,
+ ["elapsed_time"]=0.029547929763794,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=86694925,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="7306",
+ ["attribute_list"]="1796",
+ ["boundary"]="10",
+ ["dir"]="16",
+ ["disc"]="81",
+ ["glue"]="3983",
+ ["glue_spec"]="782",
+ ["glyph"]="1473",
+ ["hlist"]="1066",
+ ["if_stack"]="4",
+ ["kern"]="355",
+ ["late_lua"]="66",
+ ["local_par"]="16",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="43",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="93",
+ ["rule"]="36",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="69",
+ },
+ ["obj_ptr"]=200,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2145963,
+ },
+ {
+ ["cs_count"]=45145,
+ ["dyn_used"]=712340,
+ ["elapsed_time"]=0.019031047821045,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=86863170,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="6913",
+ ["attribute_list"]="1698",
+ ["boundary"]="10",
+ ["dir"]="16",
+ ["disc"]="56",
+ ["glue"]="3858",
+ ["glue_spec"]="785",
+ ["glyph"]="1103",
+ ["hlist"]="935",
+ ["if_stack"]="4",
+ ["kern"]="284",
+ ["late_lua"]="58",
+ ["local_par"]="15",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="45",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="71",
+ ["rule"]="36",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="69",
+ },
+ ["obj_ptr"]=203,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2145964,
+ },
+ {
+ ["cs_count"]=45145,
+ ["dyn_used"]=713385,
+ ["elapsed_time"]=0.022035837173462,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=87060005,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="7113",
+ ["attribute_list"]="1749",
+ ["boundary"]="10",
+ ["dir"]="16",
+ ["disc"]="66",
+ ["glue"]="4020",
+ ["glue_spec"]="788",
+ ["glyph"]="1059",
+ ["hlist"]="950",
+ ["if_stack"]="4",
+ ["kern"]="293",
+ ["late_lua"]="58",
+ ["local_par"]="14",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="41",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="71",
+ ["rule"]="34",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="69",
+ },
+ ["obj_ptr"]=207,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2145965,
+ },
+ {
+ ["cs_count"]=45145,
+ ["dyn_used"]=714495,
+ ["elapsed_time"]=0.029047966003418,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=87335638,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="8520",
+ ["attribute_list"]="2099",
+ ["boundary"]="10",
+ ["dir"]="16",
+ ["disc"]="91",
+ ["glue"]="4638",
+ ["glue_spec"]="793",
+ ["glyph"]="1405",
+ ["hlist"]="1245",
+ ["if_stack"]="4",
+ ["kern"]="380",
+ ["late_lua"]="77",
+ ["local_par"]="16",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="43",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="92",
+ ["rule"]="36",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="69",
+ },
+ ["obj_ptr"]=210,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2145966,
+ },
+ {
+ ["cs_count"]=45145,
+ ["dyn_used"]=715166,
+ ["elapsed_time"]=0.018086194992065,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=87488688,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="8210",
+ ["attribute_list"]="2023",
+ ["boundary"]="10",
+ ["dir"]="16",
+ ["disc"]="64",
+ ["glue"]="4601",
+ ["glue_spec"]="796",
+ ["glyph"]="1246",
+ ["hlist"]="1142",
+ ["if_stack"]="4",
+ ["kern"]="345",
+ ["late_lua"]="69",
+ ["local_par"]="14",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="39",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="83",
+ ["rule"]="34",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="69",
+ },
+ ["obj_ptr"]=213,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2145967,
+ },
+ {
+ ["cs_count"]=45146,
+ ["dyn_used"]=715355,
+ ["elapsed_time"]=0.013521909713745,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=87865911,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="5923",
+ ["attribute_list"]="1451",
+ ["boundary"]="10",
+ ["dir"]="16",
+ ["disc"]="49",
+ ["glue"]="4056",
+ ["glue_spec"]="804",
+ ["glyph"]="1387",
+ ["hlist"]="554",
+ ["if_stack"]="4",
+ ["kern"]="211",
+ ["late_lua"]="47",
+ ["local_par"]="28",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="39",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="61",
+ ["rule"]="32",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="69",
+ },
+ ["obj_ptr"]=216,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2145969,
+ },
+ {
+ ["cs_count"]=45146,
+ ["dyn_used"]=716086,
+ ["elapsed_time"]=0.010518074035645,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=88025474,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="4634",
+ ["attribute_list"]="1128",
+ ["boundary"]="10",
+ ["dir"]="16",
+ ["disc"]="8",
+ ["glue"]="3910",
+ ["glue_spec"]="841",
+ ["glyph"]="1273",
+ ["hlist"]="240",
+ ["if_stack"]="4",
+ ["kern"]="96",
+ ["late_lua"]="49",
+ ["local_par"]="51",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="39",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="59",
+ ["rule"]="32",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="69",
+ },
+ ["obj_ptr"]=219,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2145970,
+ },
+ {
+ ["cs_count"]=45146,
+ ["dyn_used"]=716832,
+ ["elapsed_time"]=0.010519027709961,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=88182815,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="4714",
+ ["attribute_list"]="1147",
+ ["boundary"]="10",
+ ["dir"]="16",
+ ["disc"]="8",
+ ["glue"]="4022",
+ ["glue_spec"]="876",
+ ["glyph"]="1325",
+ ["hlist"]="236",
+ ["if_stack"]="4",
+ ["kern"]="96",
+ ["late_lua"]="47",
+ ["local_par"]="49",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="39",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="57",
+ ["rule"]="32",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="69",
+ },
+ ["obj_ptr"]=222,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2145971,
+ },
+ {
+ ["cs_count"]=45146,
+ ["dyn_used"]=717648,
+ ["elapsed_time"]=0.010013818740845,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=88439438,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="4736",
+ ["attribute_list"]="1154",
+ ["boundary"]="10",
+ ["dir"]="16",
+ ["disc"]="16",
+ ["glue"]="4011",
+ ["glue_spec"]="886",
+ ["glyph"]="995",
+ ["hlist"]="197",
+ ["if_stack"]="14",
+ ["kern"]="106",
+ ["late_lua"]="27",
+ ["local_par"]="29",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="43",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="39",
+ ["rule"]="32",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="69",
+ },
+ ["obj_ptr"]=225,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2145977,
+ },
+ {
+ ["cs_count"]=45146,
+ ["dyn_used"]=719390,
+ ["elapsed_time"]=0.025541067123413,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=88697086,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="5153",
+ ["attribute_list"]="1256",
+ ["boundary"]="22",
+ ["dir"]="16",
+ ["disc"]="147",
+ ["glue"]="4409",
+ ["glue_spec"]="911",
+ ["glyph"]="2559",
+ ["hlist"]="257",
+ ["if_stack"]="4",
+ ["kern"]="278",
+ ["late_lua"]="34",
+ ["local_par"]="36",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="47",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="78",
+ ["rule"]="32",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="72",
+ },
+ ["obj_ptr"]=228,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2145978,
+ },
+ {
+ ["cs_count"]=45146,
+ ["dyn_used"]=720608,
+ ["elapsed_time"]=0.022037029266357,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=88895062,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="5365",
+ ["attribute_list"]="1308",
+ ["boundary"]="10",
+ ["dir"]="16",
+ ["disc"]="141",
+ ["glue"]="4480",
+ ["glue_spec"]="924",
+ ["glyph"]="2637",
+ ["hlist"]="263",
+ ["if_stack"]="4",
+ ["kern"]="305",
+ ["late_lua"]="27",
+ ["local_par"]="26",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="57",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="53",
+ ["rule"]="36",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="69",
+ },
+ ["obj_ptr"]=231,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2145979,
+ },
+ {
+ ["cs_count"]=45146,
+ ["dyn_used"]=722010,
+ ["elapsed_time"]=0.026544094085693,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=89125445,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="5426",
+ ["attribute_list"]="1323",
+ ["boundary"]="14",
+ ["dir"]="16",
+ ["disc"]="192",
+ ["glue"]="4580",
+ ["glue_spec"]="939",
+ ["glyph"]="3061",
+ ["hlist"]="272",
+ ["if_stack"]="4",
+ ["kern"]="307",
+ ["late_lua"]="23",
+ ["local_par"]="23",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="57",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="67",
+ ["rule"]="34",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="70",
+ },
+ ["obj_ptr"]=234,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2145980,
+ },
+ {
+ ["cs_count"]=45146,
+ ["dyn_used"]=722832,
+ ["elapsed_time"]=0.023037910461426,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=89289200,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="5065",
+ ["attribute_list"]="1234",
+ ["boundary"]="14",
+ ["dir"]="16",
+ ["disc"]="151",
+ ["glue"]="4549",
+ ["glue_spec"]="951",
+ ["glyph"]="2723",
+ ["hlist"]="234",
+ ["if_stack"]="4",
+ ["kern"]="249",
+ ["late_lua"]="28",
+ ["local_par"]="30",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="45",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="55",
+ ["rule"]="32",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="70",
+ },
+ ["obj_ptr"]=238,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2145981,
+ },
+ {
+ ["cs_count"]=45146,
+ ["dyn_used"]=723699,
+ ["elapsed_time"]=0.025039911270142,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=89484629,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="5669",
+ ["attribute_list"]="1384",
+ ["boundary"]="10",
+ ["dir"]="16",
+ ["disc"]="231",
+ ["glue"]="4759",
+ ["glue_spec"]="959",
+ ["glyph"]="3149",
+ ["hlist"]="354",
+ ["if_stack"]="4",
+ ["kern"]="313",
+ ["late_lua"]="25",
+ ["local_par"]="19",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="43",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="61",
+ ["rule"]="36",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="69",
+ },
+ ["obj_ptr"]=241,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2145982,
+ },
+ {
+ ["cs_count"]=45146,
+ ["dyn_used"]=725038,
+ ["elapsed_time"]=0.020533084869385,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=89752361,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="5186",
+ ["attribute_list"]="1263",
+ ["boundary"]="10",
+ ["dir"]="16",
+ ["disc"]="139",
+ ["glue"]="4612",
+ ["glue_spec"]="986",
+ ["glyph"]="2367",
+ ["hlist"]="228",
+ ["if_stack"]="4",
+ ["kern"]="205",
+ ["late_lua"]="34",
+ ["local_par"]="36",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="51",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="61",
+ ["rule"]="32",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="69",
+ },
+ ["obj_ptr"]=244,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2145983,
+ },
+ {
+ ["cs_count"]=45146,
+ ["dyn_used"]=726059,
+ ["elapsed_time"]=0.016026020050049,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=89970105,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="5249",
+ ["attribute_list"]="1279",
+ ["boundary"]="10",
+ ["dir"]="16",
+ ["disc"]="67",
+ ["glue"]="4664",
+ ["glue_spec"]="1010",
+ ["glyph"]="1817",
+ ["hlist"]="236",
+ ["if_stack"]="4",
+ ["kern"]="149",
+ ["late_lua"]="41",
+ ["local_par"]="43",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="49",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="59",
+ ["rule"]="32",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="69",
+ },
+ ["obj_ptr"]=247,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2145984,
+ },
+ {
+ ["cs_count"]=45146,
+ ["dyn_used"]=727088,
+ ["elapsed_time"]=0.015024900436401,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=90245268,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="6101",
+ ["attribute_list"]="1492",
+ ["boundary"]="10",
+ ["dir"]="16",
+ ["disc"]="47",
+ ["glue"]="4670",
+ ["glue_spec"]="1013",
+ ["glyph"]="1086",
+ ["hlist"]="395",
+ ["if_stack"]="14",
+ ["kern"]="174",
+ ["late_lua"]="27",
+ ["local_par"]="16",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="41",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="42",
+ ["rule"]="34",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="69",
+ },
+ ["obj_ptr"]=250,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2145990,
+ },
+ {
+ ["cs_count"]=45146,
+ ["dyn_used"]=728584,
+ ["elapsed_time"]=0.022036075592041,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=90506506,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="5497",
+ ["attribute_list"]="1340",
+ ["boundary"]="22",
+ ["dir"]="16",
+ ["disc"]="114",
+ ["glue"]="4910",
+ ["glue_spec"]="1042",
+ ["glyph"]="2085",
+ ["hlist"]="253",
+ ["if_stack"]="4",
+ ["kern"]="202",
+ ["late_lua"]="38",
+ ["local_par"]="40",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="47",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="79",
+ ["rule"]="32",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="72",
+ },
+ ["obj_ptr"]=253,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2145991,
+ },
+ {
+ ["cs_count"]=45146,
+ ["dyn_used"]=729709,
+ ["elapsed_time"]=0.022536993026733,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=90732169,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="5538",
+ ["attribute_list"]="1352",
+ ["boundary"]="10",
+ ["dir"]="16",
+ ["disc"]="165",
+ ["glue"]="5029",
+ ["glue_spec"]="1061",
+ ["glyph"]="2958",
+ ["hlist"]="226",
+ ["if_stack"]="4",
+ ["kern"]="276",
+ ["late_lua"]="24",
+ ["local_par"]="26",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="51",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="49",
+ ["rule"]="32",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="69",
+ },
+ ["obj_ptr"]=256,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2145992,
+ },
+ {
+ ["cs_count"]=45146,
+ ["dyn_used"]=730625,
+ ["elapsed_time"]=0.020033121109009,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=90929947,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="5470",
+ ["attribute_list"]="1334",
+ ["boundary"]="14",
+ ["dir"]="16",
+ ["disc"]="144",
+ ["glue"]="5121",
+ ["glue_spec"]="1075",
+ ["glyph"]="2579",
+ ["hlist"]="235",
+ ["if_stack"]="4",
+ ["kern"]="226",
+ ["late_lua"]="30",
+ ["local_par"]="32",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="45",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="61",
+ ["rule"]="32",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="70",
+ },
+ ["obj_ptr"]=259,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2145993,
+ },
+ {
+ ["cs_count"]=45146,
+ ["dyn_used"]=731813,
+ ["elapsed_time"]=0.018529891967773,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=91189574,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="5522",
+ ["attribute_list"]="1347",
+ ["boundary"]="10",
+ ["dir"]="16",
+ ["disc"]="125",
+ ["glue"]="5115",
+ ["glue_spec"]="1102",
+ ["glyph"]="2428",
+ ["hlist"]="233",
+ ["if_stack"]="4",
+ ["kern"]="213",
+ ["late_lua"]="33",
+ ["local_par"]="35",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="45",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="55",
+ ["rule"]="32",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="69",
+ },
+ ["obj_ptr"]=262,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2145994,
+ },
+ {
+ ["cs_count"]=45146,
+ ["dyn_used"]=732789,
+ ["elapsed_time"]=0.015526056289673,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=91464507,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="5535",
+ ["attribute_list"]="1350",
+ ["boundary"]="14",
+ ["dir"]="16",
+ ["disc"]="42",
+ ["glue"]="5330",
+ ["glue_spec"]="1143",
+ ["glyph"]="1600",
+ ["hlist"]="251",
+ ["if_stack"]="7",
+ ["kern"]="136",
+ ["late_lua"]="46",
+ ["local_par"]="50",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="45",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="68",
+ ["rule"]="32",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="70",
+ },
+ ["obj_ptr"]=265,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2145995,
+ },
+ {
+ ["cs_count"]=45146,
+ ["dyn_used"]=734243,
+ ["elapsed_time"]=0.022035837173462,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=91675464,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="5749",
+ ["attribute_list"]="1401",
+ ["boundary"]="14",
+ ["dir"]="16",
+ ["disc"]="143",
+ ["glue"]="5338",
+ ["glue_spec"]="1155",
+ ["glyph"]="2757",
+ ["hlist"]="230",
+ ["if_stack"]="4",
+ ["kern"]="253",
+ ["late_lua"]="28",
+ ["local_par"]="30",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="49",
+ ["pdf_restore"]="11",
+ ["pdf_save"]="11",
+ ["pdf_setmatrix"]="17",
+ ["penalty"]="56",
+ ["rule"]="32",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="70",
+ },
+ ["obj_ptr"]=269,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2145996,
+ },
+ {
+ ["cs_count"]=45170,
+ ["dyn_used"]=737963,
+ ["elapsed_time"]=0.096158027648926,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=100443598,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="5885",
+ ["attribute_list"]="1434",
+ ["boundary"]="22",
+ ["dir"]="24",
+ ["disc"]="64",
+ ["glue"]="6754",
+ ["glue_spec"]="1292",
+ ["glyph"]="4436",
+ ["hlist"]="726",
+ ["if_stack"]="4",
+ ["kern"]="188",
+ ["late_lua"]="45",
+ ["local_par"]="259",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="55",
+ ["pdf_restore"]="13",
+ ["pdf_save"]="13",
+ ["pdf_setmatrix"]="21",
+ ["penalty"]="288",
+ ["rule"]="48",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="93",
+ },
+ ["obj_ptr"]=272,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2146035,
+ },
+ {
+ ["cs_count"]=45170,
+ ["dyn_used"]=738699,
+ ["elapsed_time"]=0.0095160007476807,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=100502759,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="5743",
+ ["attribute_list"]="1401",
+ ["boundary"]="18",
+ ["dir"]="24",
+ ["disc"]="11",
+ ["glue"]="6376",
+ ["glue_spec"]="1293",
+ ["glyph"]="3418",
+ ["hlist"]="656",
+ ["if_stack"]="4",
+ ["kern"]="119",
+ ["late_lua"]="18",
+ ["local_par"]="232",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="42",
+ ["pdf_restore"]="13",
+ ["pdf_save"]="13",
+ ["pdf_setmatrix"]="21",
+ ["penalty"]="249",
+ ["rule"]="48",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="93",
+ },
+ ["obj_ptr"]=275,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2146036,
+ },
+ {
+ ["cs_count"]=45170,
+ ["dyn_used"]=739638,
+ ["elapsed_time"]=0.022536039352417,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=100690960,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="5941",
+ ["attribute_list"]="1449",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="173",
+ ["glue"]="6228",
+ ["glue_spec"]="1304",
+ ["glyph"]="4418",
+ ["hlist"]="472",
+ ["if_stack"]="4",
+ ["kern"]="257",
+ ["late_lua"]="30",
+ ["local_par"]="138",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="47",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="165",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=278,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2146037,
+ },
+ {
+ ["cs_count"]=45170,
+ ["dyn_used"]=740567,
+ ["elapsed_time"]=0.016547918319702,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=100844585,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="5909",
+ ["attribute_list"]="1442",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="129",
+ ["glue"]="6036",
+ ["glue_spec"]="1309",
+ ["glyph"]="3589",
+ ["hlist"]="437",
+ ["if_stack"]="14",
+ ["kern"]="237",
+ ["late_lua"]="17",
+ ["local_par"]="125",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="39",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="149",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=281,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2146043,
+ },
+ {
+ ["cs_count"]=45170,
+ ["dyn_used"]=742451,
+ ["elapsed_time"]=0.021536111831665,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=101153287,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="6179",
+ ["attribute_list"]="1506",
+ ["boundary"]="22",
+ ["dir"]="20",
+ ["disc"]="56",
+ ["glue"]="6188",
+ ["glue_spec"]="1346",
+ ["glyph"]="3407",
+ ["hlist"]="496",
+ ["if_stack"]="4",
+ ["kern"]="179",
+ ["late_lua"]="44",
+ ["local_par"]="152",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="51",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="190",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="82",
+ },
+ ["obj_ptr"]=284,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2146062,
+ },
+ {
+ ["cs_count"]=45170,
+ ["dyn_used"]=743337,
+ ["elapsed_time"]=0.012521028518677,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=101383169,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="6025",
+ ["attribute_list"]="1468",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="28",
+ ["glue"]="6276",
+ ["glue_spec"]="1379",
+ ["glyph"]="3022",
+ ["hlist"]="481",
+ ["if_stack"]="4",
+ ["kern"]="120",
+ ["late_lua"]="48",
+ ["local_par"]="156",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="49",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="170",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=287,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2146063,
+ },
+ {
+ ["cs_count"]=45170,
+ ["dyn_used"]=744414,
+ ["elapsed_time"]=0.010516881942749,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=101689606,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="6017",
+ ["attribute_list"]="1467",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="10",
+ ["glue"]="6163",
+ ["glue_spec"]="1393",
+ ["glyph"]="2454",
+ ["hlist"]="448",
+ ["if_stack"]="14",
+ ["kern"]="107",
+ ["late_lua"]="33",
+ ["local_par"]="141",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="43",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="154",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=290,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2146069,
+ },
+ {
+ ["cs_count"]=45170,
+ ["dyn_used"]=745110,
+ ["elapsed_time"]=0.0055091381072998,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=101755609,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="6021",
+ ["attribute_list"]="1469",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="8",
+ ["glue"]="6019",
+ ["glue_spec"]="1395",
+ ["glyph"]="2052",
+ ["hlist"]="409",
+ ["if_stack"]="15",
+ ["kern"]="107",
+ ["late_lua"]="13",
+ ["local_par"]="121",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="39",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="135",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=293,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2146070,
+ },
+ {
+ ["cs_count"]=45170,
+ ["dyn_used"]=746548,
+ ["elapsed_time"]=0.030048847198486,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=101968524,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="6563",
+ ["attribute_list"]="1601",
+ ["boundary"]="26",
+ ["dir"]="24",
+ ["disc"]="205",
+ ["glue"]="6637",
+ ["glue_spec"]="1411",
+ ["glyph"]="4526",
+ ["hlist"]="512",
+ ["if_stack"]="4",
+ ["kern"]="323",
+ ["late_lua"]="27",
+ ["local_par"]="135",
+ ["margin_kern"]="2",
+ ["math"]="8",
+ ["noad"]="1",
+ ["pdf_literal"]="51",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="199",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="83",
+ },
+ ["obj_ptr"]=296,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2146071,
+ },
+ {
+ ["cs_count"]=45170,
+ ["dyn_used"]=748187,
+ ["elapsed_time"]=0.025041103363037,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=102190902,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="6492",
+ ["attribute_list"]="1584",
+ ["boundary"]="18",
+ ["dir"]="24",
+ ["disc"]="158",
+ ["glue"]="6667",
+ ["glue_spec"]="1435",
+ ["glyph"]="4272",
+ ["hlist"]="500",
+ ["if_stack"]="5",
+ ["kern"]="290",
+ ["late_lua"]="32",
+ ["local_par"]="140",
+ ["margin_kern"]="2",
+ ["math"]="8",
+ ["noad"]="1",
+ ["pdf_literal"]="47",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="181",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="81",
+ },
+ ["obj_ptr"]=300,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2146072,
+ },
+ {
+ ["cs_count"]=45170,
+ ["dyn_used"]=749347,
+ ["elapsed_time"]=0.030550003051758,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=102378569,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="6800",
+ ["attribute_list"]="1662",
+ ["boundary"]="18",
+ ["dir"]="26",
+ ["disc"]="220",
+ ["glue"]="6843",
+ ["glue_spec"]="1444",
+ ["glyph"]="5046",
+ ["hlist"]="523",
+ ["if_stack"]="4",
+ ["kern"]="345",
+ ["late_lua"]="28",
+ ["local_par"]="136",
+ ["margin_kern"]="2",
+ ["math"]="12",
+ ["noad"]="1",
+ ["pdf_literal"]="53",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="190",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="81",
+ },
+ ["obj_ptr"]=303,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2146073,
+ },
+ {
+ ["cs_count"]=45170,
+ ["dyn_used"]=750471,
+ ["elapsed_time"]=0.026544094085693,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=102540154,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="6659",
+ ["attribute_list"]="1627",
+ ["boundary"]="18",
+ ["dir"]="20",
+ ["disc"]="222",
+ ["glue"]="6832",
+ ["glue_spec"]="1452",
+ ["glyph"]="5074",
+ ["hlist"]="479",
+ ["if_stack"]="4",
+ ["kern"]="334",
+ ["late_lua"]="21",
+ ["local_par"]="129",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="41",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="163",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="81",
+ },
+ ["obj_ptr"]=306,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2146074,
+ },
+ {
+ ["cs_count"]=45170,
+ ["dyn_used"]=751808,
+ ["elapsed_time"]=0.02704381942749,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=102724766,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="6666",
+ ["attribute_list"]="1628",
+ ["boundary"]="22",
+ ["dir"]="20",
+ ["disc"]="212",
+ ["glue"]="6847",
+ ["glue_spec"]="1462",
+ ["glyph"]="5037",
+ ["hlist"]="487",
+ ["if_stack"]="4",
+ ["kern"]="318",
+ ["late_lua"]="21",
+ ["local_par"]="129",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="53",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="173",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="82",
+ },
+ ["obj_ptr"]=309,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2146075,
+ },
+ {
+ ["cs_count"]=45170,
+ ["dyn_used"]=752680,
+ ["elapsed_time"]=0.027044057846069,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=102880187,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="6675",
+ ["attribute_list"]="1631",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="209",
+ ["glue"]="6903",
+ ["glue_spec"]="1468",
+ ["glyph"]="5219",
+ ["hlist"]="476",
+ ["if_stack"]="4",
+ ["kern"]="353",
+ ["late_lua"]="18",
+ ["local_par"]="126",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="39",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="21",
+ ["penalty"]="154",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=312,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2146076,
+ },
+ {
+ ["cs_count"]=45173,
+ ["dyn_used"]=754354,
+ ["elapsed_time"]=0.046075105667114,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=110095891,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="6814",
+ ["attribute_list"]="1665",
+ ["boundary"]="18",
+ ["dir"]="20",
+ ["disc"]="151",
+ ["glue"]="6670",
+ ["glue_spec"]="1475",
+ ["glyph"]="4053",
+ ["hlist"]="478",
+ ["if_stack"]="14",
+ ["kern"]="275",
+ ["late_lua"]="19",
+ ["local_par"]="127",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="41",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="170",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="81",
+ },
+ ["obj_ptr"]=315,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2146086,
+ },
+ {
+ ["cs_count"]=45173,
+ ["dyn_used"]=754999,
+ ["elapsed_time"]=0.0075139999389648,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=110152489,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="6389",
+ ["attribute_list"]="1559",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="9",
+ ["glue"]="6243",
+ ["glue_spec"]="1477",
+ ["glyph"]="2115",
+ ["hlist"]="409",
+ ["if_stack"]="15",
+ ["kern"]="105",
+ ["late_lua"]="13",
+ ["local_par"]="121",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="39",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="135",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=318,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2146087,
+ },
+ {
+ ["cs_count"]=45173,
+ ["dyn_used"]=756177,
+ ["elapsed_time"]=0.031253814697266,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=110367446,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="6843",
+ ["attribute_list"]="1671",
+ ["boundary"]="26",
+ ["dir"]="20",
+ ["disc"]="235",
+ ["glue"]="6836",
+ ["glue_spec"]="1491",
+ ["glyph"]="4825",
+ ["hlist"]="492",
+ ["if_stack"]="4",
+ ["kern"]="320",
+ ["late_lua"]="25",
+ ["local_par"]="133",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="47",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="190",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="83",
+ },
+ ["obj_ptr"]=321,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2146088,
+ },
+ {
+ ["cs_count"]=45177,
+ ["dyn_used"]=757545,
+ ["elapsed_time"]=0.10026717185974,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=112255694,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="6696",
+ ["attribute_list"]="1634",
+ ["boundary"]="18",
+ ["dir"]="20",
+ ["disc"]="118",
+ ["glue"]="6737",
+ ["glue_spec"]="1512",
+ ["glyph"]="4281",
+ ["hlist"]="476",
+ ["if_stack"]="4",
+ ["kern"]="211",
+ ["late_lua"]="28",
+ ["local_par"]="136",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="47",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="169",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="81",
+ },
+ ["obj_ptr"]=324,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2146104,
+ },
+ {
+ ["cs_count"]=45182,
+ ["dyn_used"]=758447,
+ ["elapsed_time"]=0.089548826217651,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=112867694,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="6543",
+ ["attribute_list"]="1596",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="69",
+ ["glue"]="6580",
+ ["glue_spec"]="1524",
+ ["glyph"]="3565",
+ ["hlist"]="447",
+ ["if_stack"]="4",
+ ["kern"]="175",
+ ["late_lua"]="23",
+ ["local_par"]="131",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="41",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="152",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=328,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2146121,
+ },
+ {
+ ["cs_count"]=45182,
+ ["dyn_used"]=759673,
+ ["elapsed_time"]=0.018530130386353,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=113162585,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="6761",
+ ["attribute_list"]="1649",
+ ["boundary"]="18",
+ ["dir"]="23",
+ ["disc"]="84",
+ ["glue"]="7046",
+ ["glue_spec"]="1551",
+ ["glyph"]="3446",
+ ["hlist"]="500",
+ ["if_stack"]="4",
+ ["kern"]="180",
+ ["late_lua"]="39",
+ ["local_par"]="147",
+ ["margin_kern"]="2",
+ ["math"]="6",
+ ["noad"]="1",
+ ["pdf_literal"]="57",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="183",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="81",
+ },
+ ["obj_ptr"]=332,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2146122,
+ },
+ {
+ ["cs_count"]=45182,
+ ["dyn_used"]=760556,
+ ["elapsed_time"]=0.021034002304077,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=113397448,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="6748",
+ ["attribute_list"]="1646",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="130",
+ ["glue"]="7105",
+ ["glue_spec"]="1566",
+ ["glyph"]="4298",
+ ["hlist"]="475",
+ ["if_stack"]="4",
+ ["kern"]="248",
+ ["late_lua"]="33",
+ ["local_par"]="141",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="61",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="165",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=335,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["str_ptr"]=2146123,
+ },
+ {
+ ["cs_count"]=45182,
+ ["dyn_used"]=762310,
+ ["elapsed_time"]=0.025542020797729,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=113715225,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="7362",
+ ["attribute_list"]="1799",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="110",
+ ["glue"]="7198",
+ ["glue_spec"]="1588",
+ ["glyph"]="3875",
+ ["hlist"]="609",
+ ["if_stack"]="4",
+ ["kern"]="217",
+ ["late_lua"]="37",
+ ["local_par"]="137",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="65",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="170",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=339,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2146124,
+ },
+ {
+ ["cs_count"]=45182,
+ ["dyn_used"]=763248,
+ ["elapsed_time"]=0.017027854919434,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=113962457,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="6804",
+ ["attribute_list"]="1660",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="59",
+ ["glue"]="7149",
+ ["glue_spec"]="1620",
+ ["glyph"]="3132",
+ ["hlist"]="485",
+ ["if_stack"]="4",
+ ["kern"]="151",
+ ["late_lua"]="47",
+ ["local_par"]="155",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="49",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="171",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=342,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2146125,
+ },
+ {
+ ["cs_count"]=45182,
+ ["dyn_used"]=764448,
+ ["elapsed_time"]=0.020536184310913,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=114195855,
+ ["max_buf_stack"]=314,
+ ["node_memory"]={
+ ["attribute"]="6896",
+ ["attribute_list"]="1682",
+ ["boundary"]="18",
+ ["dir"]="23",
+ ["disc"]="131",
+ ["glue"]="7259",
+ ["glue_spec"]="1646",
+ ["glyph"]="3781",
+ ["hlist"]="496",
+ ["if_stack"]="6",
+ ["kern"]="207",
+ ["late_lua"]="40",
+ ["local_par"]="148",
+ ["margin_kern"]="2",
+ ["math"]="6",
+ ["noad"]="1",
+ ["pdf_literal"]="49",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="179",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="81",
+ },
+ ["obj_ptr"]=345,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2146126,
+ },
+ {
+ ["cs_count"]=45184,
+ ["dyn_used"]=768450,
+ ["elapsed_time"]=0.074119806289673,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=120002680,
+ ["max_buf_stack"]=326,
+ ["node_memory"]={
+ ["attribute"]="7272",
+ ["attribute_list"]="1776",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="100",
+ ["glue"]="7392",
+ ["glue_spec"]="1664",
+ ["glyph"]="3931",
+ ["hlist"]="556",
+ ["if_stack"]="6",
+ ["kern"]="214",
+ ["late_lua"]="37",
+ ["local_par"]="140",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="61",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="170",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=348,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2146162,
+ },
+ {
+ ["cs_count"]=45184,
+ ["dyn_used"]=769295,
+ ["elapsed_time"]=0.044573068618774,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=120423746,
+ ["max_buf_stack"]=326,
+ ["node_memory"]={
+ ["attribute"]="7099",
+ ["attribute_list"]="1760",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="56",
+ ["glue"]="7294",
+ ["glue_spec"]="1679",
+ ["glyph"]="3409",
+ ["hlist"]="482",
+ ["if_stack"]="4",
+ ["kern"]="169",
+ ["late_lua"]="32",
+ ["local_par"]="140",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="93",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="158",
+ ["rule"]="70",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=351,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2146187,
+ },
+ {
+ ["cs_count"]=45184,
+ ["dyn_used"]=770779,
+ ["elapsed_time"]=0.044072151184082,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=120939227,
+ ["max_buf_stack"]=326,
+ ["node_memory"]={
+ ["attribute"]="7702",
+ ["attribute_list"]="1880",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="40",
+ ["glue"]="7503",
+ ["glue_spec"]="1716",
+ ["glyph"]="3183",
+ ["hlist"]="620",
+ ["if_stack"]="4",
+ ["kern"]="176",
+ ["late_lua"]="42",
+ ["local_par"]="150",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="71",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="172",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="89",
+ },
+ ["obj_ptr"]=354,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2146206,
+ },
+ {
+ ["cs_count"]=45188,
+ ["dyn_used"]=773911,
+ ["elapsed_time"]=0.038062810897827,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=122411633,
+ ["max_buf_stack"]=326,
+ ["node_memory"]={
+ ["attribute"]="7149",
+ ["attribute_list"]="1743",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="42",
+ ["glue"]="7375",
+ ["glue_spec"]="1726",
+ ["glyph"]="3060",
+ ["hlist"]="438",
+ ["if_stack"]="14",
+ ["kern"]="161",
+ ["late_lua"]="25",
+ ["local_par"]="133",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="47",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="150",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=357,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2146223,
+ },
+ {
+ ["cs_count"]=45238,
+ ["dyn_used"]=775885,
+ ["elapsed_time"]=0.1467399597168,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=137423954,
+ ["max_buf_stack"]=326,
+ ["node_memory"]={
+ ["attribute"]="10044",
+ ["attribute_list"]="2459",
+ ["boundary"]="26",
+ ["dir"]="77",
+ ["disc"]="126",
+ ["glue"]="7699",
+ ["glue_spec"]="1752",
+ ["glyph"]="4828",
+ ["hlist"]="522",
+ ["if_stack"]="4",
+ ["kern"]="266",
+ ["late_lua"]="25",
+ ["local_par"]="137",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="364",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="194",
+ ["rule"]="60",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="97",
+ },
+ ["obj_ptr"]=360,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2146370,
+ },
+ {
+ ["cs_count"]=45242,
+ ["dyn_used"]=777442,
+ ["elapsed_time"]=0.082135200500488,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=144610930,
+ ["max_buf_stack"]=344,
+ ["node_memory"]={
+ ["attribute"]="11247",
+ ["attribute_list"]="2756",
+ ["boundary"]="26",
+ ["dir"]="115",
+ ["disc"]="76",
+ ["glue"]="7607",
+ ["glue_spec"]="1775",
+ ["glyph"]="4728",
+ ["hlist"]="528",
+ ["if_stack"]="4",
+ ["kern"]="204",
+ ["late_lua"]="25",
+ ["local_par"]="139",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="644",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="182",
+ ["rule"]="70",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="104",
+ },
+ ["obj_ptr"]=365,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2146477,
+ },
+ {
+ ["cs_count"]=45242,
+ ["dyn_used"]=779019,
+ ["elapsed_time"]=0.08914589881897,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=151953738,
+ ["max_buf_stack"]=365,
+ ["node_memory"]={
+ ["attribute"]="11304",
+ ["attribute_list"]="2770",
+ ["boundary"]="26",
+ ["dir"]="119",
+ ["disc"]="76",
+ ["glue"]="7632",
+ ["glue_spec"]="1798",
+ ["glyph"]="4737",
+ ["hlist"]="529",
+ ["if_stack"]="4",
+ ["kern"]="216",
+ ["late_lua"]="25",
+ ["local_par"]="139",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="644",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="181",
+ ["rule"]="70",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="104",
+ },
+ ["obj_ptr"]=368,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2146580,
+ },
+ {
+ ["cs_count"]=45242,
+ ["dyn_used"]=780197,
+ ["elapsed_time"]=0.067610025405884,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=155792118,
+ ["max_buf_stack"]=380,
+ ["node_memory"]={
+ ["attribute"]="10009",
+ ["attribute_list"]="2450",
+ ["boundary"]="22",
+ ["dir"]="96",
+ ["disc"]="75",
+ ["glue"]="7609",
+ ["glue_spec"]="1812",
+ ["glyph"]="4364",
+ ["hlist"]="496",
+ ["if_stack"]="4",
+ ["kern"]="268",
+ ["late_lua"]="22",
+ ["local_par"]="134",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="643",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="170",
+ ["rule"]="60",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="96",
+ },
+ ["obj_ptr"]=371,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2146638,
+ },
+ {
+ ["cs_count"]=45242,
+ ["dyn_used"]=781794,
+ ["elapsed_time"]=0.099163055419922,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=163208634,
+ ["max_buf_stack"]=415,
+ ["node_memory"]={
+ ["attribute"]="10054",
+ ["attribute_list"]="2461",
+ ["boundary"]="22",
+ ["dir"]="105",
+ ["disc"]="68",
+ ["glue"]="7658",
+ ["glue_spec"]="1834",
+ ["glyph"]="4593",
+ ["hlist"]="499",
+ ["if_stack"]="4",
+ ["kern"]="267",
+ ["late_lua"]="22",
+ ["local_par"]="134",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="540",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="171",
+ ["rule"]="60",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="96",
+ },
+ ["obj_ptr"]=374,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2146741,
+ },
+ {
+ ["cs_count"]=45242,
+ ["dyn_used"]=783367,
+ ["elapsed_time"]=0.05809497833252,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=167020640,
+ ["max_buf_stack"]=415,
+ ["node_memory"]={
+ ["attribute"]="9020",
+ ["attribute_list"]="2205",
+ ["boundary"]="18",
+ ["dir"]="76",
+ ["disc"]="40",
+ ["glue"]="7683",
+ ["glue_spec"]="1861",
+ ["glyph"]="4190",
+ ["hlist"]="479",
+ ["if_stack"]="4",
+ ["kern"]="214",
+ ["late_lua"]="29",
+ ["local_par"]="139",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="371",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="167",
+ ["rule"]="50",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="88",
+ },
+ ["obj_ptr"]=377,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2146793,
+ },
+ {
+ ["cs_count"]=45242,
+ ["dyn_used"]=784959,
+ ["elapsed_time"]=0.064605951309204,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=171578241,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="10222",
+ ["attribute_list"]="2501",
+ ["boundary"]="22",
+ ["dir"]="93",
+ ["disc"]="64",
+ ["glue"]="7772",
+ ["glue_spec"]="1882",
+ ["glyph"]="4481",
+ ["hlist"]="507",
+ ["if_stack"]="4",
+ ["kern"]="218",
+ ["late_lua"]="27",
+ ["local_par"]="139",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="328",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="172",
+ ["rule"]="60",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="96",
+ },
+ ["obj_ptr"]=380,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2146890,
+ },
+ {
+ ["cs_count"]=45243,
+ ["dyn_used"]=787508,
+ ["elapsed_time"]=0.057594060897827,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=177566905,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="9207",
+ ["attribute_list"]="2252",
+ ["boundary"]="18",
+ ["dir"]="68",
+ ["disc"]="29",
+ ["glue"]="7727",
+ ["glue_spec"]="1885",
+ ["glyph"]="3444",
+ ["hlist"]="532",
+ ["if_stack"]="14",
+ ["kern"]="172",
+ ["late_lua"]="22",
+ ["local_par"]="127",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="296",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="155",
+ ["rule"]="50",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="88",
+ },
+ ["obj_ptr"]=383,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2146919,
+ },
+ {
+ ["cs_count"]=45286,
+ ["dyn_used"]=790683,
+ ["elapsed_time"]=0.029547929763794,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=177859146,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="9075",
+ ["attribute_list"]="2219",
+ ["boundary"]="26",
+ ["dir"]="20",
+ ["disc"]="80",
+ ["glue"]="8127",
+ ["glue_spec"]="1907",
+ ["glyph"]="3780",
+ ["hlist"]="742",
+ ["if_stack"]="4",
+ ["kern"]="264",
+ ["late_lua"]="45",
+ ["local_par"]="141",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="110",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="191",
+ ["rule"]="50",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="83",
+ },
+ ["obj_ptr"]=387,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2146981,
+ },
+ {
+ ["cs_count"]=45344,
+ ["dyn_used"]=793330,
+ ["elapsed_time"]=0.021536111831665,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=178156450,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="9138",
+ ["attribute_list"]="2234",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="55",
+ ["glue"]="8242",
+ ["glue_spec"]="1942",
+ ["glyph"]="3609",
+ ["hlist"]="746",
+ ["if_stack"]="4",
+ ["kern"]="237",
+ ["late_lua"]="47",
+ ["local_par"]="142",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="109",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="170",
+ ["rule"]="51",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=400,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2147058,
+ },
+ {
+ ["cs_count"]=45381,
+ ["dyn_used"]=794681,
+ ["elapsed_time"]=0.01752781867981,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=178394656,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="8484",
+ ["attribute_list"]="2071",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="38",
+ ["glue"]="8150",
+ ["glue_spec"]="1961",
+ ["glyph"]="3558",
+ ["hlist"]="588",
+ ["if_stack"]="4",
+ ["kern"]="180",
+ ["late_lua"]="48",
+ ["local_par"]="151",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="119",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="171",
+ ["rule"]="50",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="82",
+ },
+ ["obj_ptr"]=403,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2147120,
+ },
+ {
+ ["cs_count"]=45396,
+ ["dyn_used"]=796573,
+ ["elapsed_time"]=0.013523101806641,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=178675222,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="8067",
+ ["attribute_list"]="1967",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="20",
+ ["glue"]="8216",
+ ["glue_spec"]="1993",
+ ["glyph"]="3267",
+ ["hlist"]="482",
+ ["if_stack"]="4",
+ ["kern"]="125",
+ ["late_lua"]="45",
+ ["local_par"]="154",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="113",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="166",
+ ["rule"]="50",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="85",
+ },
+ ["obj_ptr"]=407,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2147154,
+ },
+ {
+ ["cs_count"]=45396,
+ ["dyn_used"]=798615,
+ ["elapsed_time"]=0.027714014053345,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=178908186,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="8406",
+ ["attribute_list"]="2052",
+ ["boundary"]="18",
+ ["dir"]="33",
+ ["disc"]="138",
+ ["glue"]="8522",
+ ["glue_spec"]="2017",
+ ["glyph"]="4119",
+ ["hlist"]="546",
+ ["if_stack"]="4",
+ ["kern"]="202",
+ ["late_lua"]="38",
+ ["local_par"]="147",
+ ["margin_kern"]="2",
+ ["math"]="26",
+ ["noad"]="1",
+ ["pdf_literal"]="125",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="203",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="84",
+ },
+ ["obj_ptr"]=410,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2147161,
+ },
+ {
+ ["cs_count"]=45397,
+ ["dyn_used"]=800321,
+ ["elapsed_time"]=0.025542020797729,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=179151075,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="8374",
+ ["attribute_list"]="2043",
+ ["boundary"]="18",
+ ["dir"]="20",
+ ["disc"]="163",
+ ["glue"]="8665",
+ ["glue_spec"]="2037",
+ ["glyph"]="4865",
+ ["hlist"]="481",
+ ["if_stack"]="4",
+ ["kern"]="261",
+ ["late_lua"]="32",
+ ["local_par"]="140",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="108",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="186",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="81",
+ },
+ ["obj_ptr"]=413,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2147164,
+ },
+ {
+ ["cs_count"]=45397,
+ ["dyn_used"]=801608,
+ ["elapsed_time"]=0.018029928207397,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=179376456,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="8276",
+ ["attribute_list"]="2019",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="126",
+ ["glue"]="8657",
+ ["glue_spec"]="2061",
+ ["glyph"]="4526",
+ ["hlist"]="469",
+ ["if_stack"]="4",
+ ["kern"]="213",
+ ["late_lua"]="36",
+ ["local_par"]="144",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="104",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="170",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=416,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2147165,
+ },
+ {
+ ["cs_count"]=45398,
+ ["dyn_used"]=802900,
+ ["elapsed_time"]=0.017529010772705,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=179604095,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="8606",
+ ["attribute_list"]="2099",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="65",
+ ["glue"]="8774",
+ ["glue_spec"]="2085",
+ ["glyph"]="4158",
+ ["hlist"]="521",
+ ["if_stack"]="4",
+ ["kern"]="174",
+ ["late_lua"]="38",
+ ["local_par"]="146",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="196",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="167",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=419,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2147197,
+ },
+ {
+ ["cs_count"]=45409,
+ ["dyn_used"]=804492,
+ ["elapsed_time"]=0.013521909713745,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=179870179,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="8362",
+ ["attribute_list"]="2042",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="22",
+ ["glue"]="8406",
+ ["glue_spec"]="2087",
+ ["glyph"]="2764",
+ ["hlist"]="431",
+ ["if_stack"]="14",
+ ["kern"]="123",
+ ["late_lua"]="14",
+ ["local_par"]="122",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="140",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="139",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=422,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2147220,
+ },
+ {
+ ["cs_count"]=45409,
+ ["dyn_used"]=805190,
+ ["elapsed_time"]=0.0055091381072998,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=179936088,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="8305",
+ ["attribute_list"]="2028",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="9",
+ ["glue"]="8324",
+ ["glue_spec"]="2089",
+ ["glyph"]="2466",
+ ["hlist"]="411",
+ ["if_stack"]="15",
+ ["kern"]="107",
+ ["late_lua"]="13",
+ ["local_par"]="121",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="98",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="135",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=425,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2147221,
+ },
+ {
+ ["cs_count"]=45409,
+ ["dyn_used"]=806856,
+ ["elapsed_time"]=0.026542901992798,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=180132753,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="8649",
+ ["attribute_list"]="2112",
+ ["boundary"]="26",
+ ["dir"]="22",
+ ["disc"]="187",
+ ["glue"]="8905",
+ ["glue_spec"]="2110",
+ ["glyph"]="4826",
+ ["hlist"]="492",
+ ["if_stack"]="5",
+ ["kern"]="272",
+ ["late_lua"]="28",
+ ["local_par"]="136",
+ ["margin_kern"]="2",
+ ["math"]="4",
+ ["noad"]="1",
+ ["pdf_literal"]="104",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="187",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="83",
+ },
+ ["obj_ptr"]=428,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2147222,
+ },
+ {
+ ["cs_count"]=45414,
+ ["dyn_used"]=809160,
+ ["elapsed_time"]=0.80848097801208,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=302132993,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="9309",
+ ["attribute_list"]="2217",
+ ["boundary"]="14",
+ ["dir"]="25",
+ ["disc"]="75",
+ ["glue"]="8853",
+ ["glue_spec"]="2132",
+ ["glyph"]="4293",
+ ["hlist"]="505",
+ ["if_stack"]="4",
+ ["kern"]="187",
+ ["late_lua"]="39",
+ ["local_par"]="147",
+ ["margin_kern"]="2",
+ ["math"]="10",
+ ["noad"]="1",
+ ["pdf_literal"]="114",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="236",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=431,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2147254,
+ },
+ {
+ ["cs_count"]=45418,
+ ["dyn_used"]=811170,
+ ["elapsed_time"]=0.34156918525696,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=339366404,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="9889",
+ ["attribute_list"]="2346",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="33",
+ ["glue"]="8950",
+ ["glue_spec"]="2167",
+ ["glyph"]="3675",
+ ["hlist"]="510",
+ ["if_stack"]="6",
+ ["kern"]="142",
+ ["late_lua"]="45",
+ ["local_par"]="153",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="184",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="183",
+ ["rule"]="70",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=435,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2147276,
+ },
+ {
+ ["cs_count"]=45433,
+ ["dyn_used"]=813524,
+ ["elapsed_time"]=0.81056189537048,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=455038366,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="11209",
+ ["attribute_list"]="2538",
+ ["boundary"]="18",
+ ["dir"]="20",
+ ["disc"]="38",
+ ["glue"]="9301",
+ ["glue_spec"]="2194",
+ ["glyph"]="3910",
+ ["hlist"]="492",
+ ["if_stack"]="4",
+ ["kern"]="130",
+ ["late_lua"]="45",
+ ["local_par"]="153",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="113",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="361",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="81",
+ },
+ ["obj_ptr"]=441,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2147312,
+ },
+ {
+ ["cs_count"]=45433,
+ ["dyn_used"]=815980,
+ ["elapsed_time"]=0.39820909500122,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=518428306,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="14395",
+ ["attribute_list"]="3720",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="20",
+ ["glue"]="9856",
+ ["glue_spec"]="2279",
+ ["glyph"]="3738",
+ ["hlist"]="1016",
+ ["if_stack"]="5",
+ ["kern"]="393",
+ ["late_lua"]="99",
+ ["local_par"]="207",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="923",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="439",
+ ["rule"]="543",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="194",
+ },
+ ["obj_ptr"]=448,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2147321,
+ },
+ {
+ ["cs_count"]=45433,
+ ["dyn_used"]=819064,
+ ["elapsed_time"]=0.049580812454224,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=519641505,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="18303",
+ ["attribute_list"]="5137",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="10",
+ ["glue"]="10930",
+ ["glue_spec"]="2436",
+ ["glyph"]="4026",
+ ["hlist"]="1598",
+ ["if_stack"]="5",
+ ["kern"]="691",
+ ["late_lua"]="176",
+ ["local_par"]="284",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="1864",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="406",
+ ["rule"]="1124",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="320",
+ },
+ ["obj_ptr"]=452,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2147322,
+ },
+ {
+ ["cs_count"]=45433,
+ ["dyn_used"]=820869,
+ ["elapsed_time"]=0.03656005859375,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=520344167,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="16849",
+ ["attribute_list"]="4371",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="10",
+ ["glue"]="10778",
+ ["glue_spec"]="2524",
+ ["glyph"]="3377",
+ ["hlist"]="1120",
+ ["if_stack"]="8",
+ ["kern"]="456",
+ ["late_lua"]="108",
+ ["local_par"]="216",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="1189",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="271",
+ ["rule"]="699",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="224",
+ },
+ ["obj_ptr"]=455,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2147323,
+ },
+ {
+ ["cs_count"]=45433,
+ ["dyn_used"]=821325,
+ ["elapsed_time"]=0.012020111083984,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=520521230,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="13260",
+ ["attribute_list"]="2936",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="10",
+ ["glue"]="10013",
+ ["glue_spec"]="2526",
+ ["glyph"]="2583",
+ ["hlist"]="411",
+ ["if_stack"]="15",
+ ["kern"]="108",
+ ["late_lua"]="13",
+ ["local_par"]="121",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="109",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="136",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=458,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2147329,
+ },
+ {
+ ["cs_count"]=45433,
+ ["dyn_used"]=823094,
+ ["elapsed_time"]=0.020532846450806,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=520773863,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="13588",
+ ["attribute_list"]="3014",
+ ["boundary"]="26",
+ ["dir"]="20",
+ ["disc"]="79",
+ ["glue"]="10473",
+ ["glue_spec"]="2562",
+ ["glyph"]="3866",
+ ["hlist"]="490",
+ ["if_stack"]="7",
+ ["kern"]="162",
+ ["late_lua"]="37",
+ ["local_par"]="147",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="123",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="185",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="83",
+ },
+ ["obj_ptr"]=461,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2147330,
+ },
+ {
+ ["cs_count"]=45433,
+ ["dyn_used"]=823866,
+ ["elapsed_time"]=0.024039030075073,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=521007316,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="13993",
+ ["attribute_list"]="3116",
+ ["boundary"]="18",
+ ["dir"]="20",
+ ["disc"]="144",
+ ["glue"]="10780",
+ ["glue_spec"]="2567",
+ ["glyph"]="4582",
+ ["hlist"]="590",
+ ["if_stack"]="4",
+ ["kern"]="241",
+ ["late_lua"]="38",
+ ["local_par"]="137",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="119",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="173",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="81",
+ },
+ ["obj_ptr"]=464,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2147331,
+ },
+ {
+ ["cs_count"]=45433,
+ ["dyn_used"]=824932,
+ ["elapsed_time"]=0.024057149887085,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=521168799,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="13639",
+ ["attribute_list"]="3029",
+ ["boundary"]="18",
+ ["dir"]="20",
+ ["disc"]="207",
+ ["glue"]="10803",
+ ["glue_spec"]="2580",
+ ["glyph"]="5191",
+ ["hlist"]="478",
+ ["if_stack"]="4",
+ ["kern"]="257",
+ ["late_lua"]="24",
+ ["local_par"]="132",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="113",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="180",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="81",
+ },
+ ["obj_ptr"]=467,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2147332,
+ },
+ {
+ ["cs_count"]=45433,
+ ["dyn_used"]=826840,
+ ["elapsed_time"]=0.028046846389771,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=521563445,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="14716",
+ ["attribute_list"]="3296",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="97",
+ ["glue"]="11314",
+ ["glue_spec"]="2616",
+ ["glyph"]="4261",
+ ["hlist"]="773",
+ ["if_stack"]="4",
+ ["kern"]="266",
+ ["late_lua"]="54",
+ ["local_par"]="144",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="119",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="181",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=470,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2147333,
+ },
+ {
+ ["cs_count"]=45433,
+ ["dyn_used"]=827073,
+ ["elapsed_time"]=0.018028974533081,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=521930125,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="14351",
+ ["attribute_list"]="3206",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="76",
+ ["glue"]="10982",
+ ["glue_spec"]="2621",
+ ["glyph"]="4058",
+ ["hlist"]="643",
+ ["if_stack"]="14",
+ ["kern"]="219",
+ ["late_lua"]="41",
+ ["local_par"]="138",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="111",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="167",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=473,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2147339,
+ },
+ {
+ ["cs_count"]=45433,
+ ["dyn_used"]=827770,
+ ["elapsed_time"]=0.0075130462646484,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=521995854,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="13670",
+ ["attribute_list"]="3037",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="11",
+ ["glue"]="10450",
+ ["glue_spec"]="2623",
+ ["glyph"]="2636",
+ ["hlist"]="411",
+ ["if_stack"]="15",
+ ["kern"]="105",
+ ["late_lua"]="13",
+ ["local_par"]="121",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="109",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="135",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=477,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2147340,
+ },
+ {
+ ["cs_count"]=45433,
+ ["dyn_used"]=829721,
+ ["elapsed_time"]=0.020533084869385,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=522323849,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="13989",
+ ["attribute_list"]="3114",
+ ["boundary"]="22",
+ ["dir"]="20",
+ ["disc"]="72",
+ ["glue"]="10958",
+ ["glue_spec"]="2659",
+ ["glyph"]="3933",
+ ["hlist"]="492",
+ ["if_stack"]="4",
+ ["kern"]="173",
+ ["late_lua"]="43",
+ ["local_par"]="151",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="123",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="184",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="82",
+ },
+ ["obj_ptr"]=480,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2147353,
+ },
+ {
+ ["cs_count"]=45433,
+ ["dyn_used"]=830363,
+ ["elapsed_time"]=0.018529891967773,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=522554601,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="13923",
+ ["attribute_list"]="3098",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="82",
+ ["glue"]="11110",
+ ["glue_spec"]="2684",
+ ["glyph"]="4143",
+ ["hlist"]="486",
+ ["if_stack"]="4",
+ ["kern"]="181",
+ ["late_lua"]="44",
+ ["local_par"]="152",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="119",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="171",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=483,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2147360,
+ },
+ {
+ ["cs_count"]=45433,
+ ["dyn_used"]=831985,
+ ["elapsed_time"]=0.018030166625977,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=522837833,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="14038",
+ ["attribute_list"]="3125",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="72",
+ ["glue"]="11083",
+ ["glue_spec"]="2717",
+ ["glyph"]="4133",
+ ["hlist"]="478",
+ ["if_stack"]="6",
+ ["kern"]="154",
+ ["late_lua"]="41",
+ ["local_par"]="149",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="121",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="172",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=486,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2147397,
+ },
+ {
+ ["cs_count"]=45433,
+ ["dyn_used"]=837105,
+ ["elapsed_time"]=0.052085876464844,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=523745848,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="17767",
+ ["attribute_list"]="4057",
+ ["boundary"]="22",
+ ["dir"]="20",
+ ["disc"]="191",
+ ["glue"]="12496",
+ ["glue_spec"]="2738",
+ ["glyph"]="5636",
+ ["hlist"]="1339",
+ ["if_stack"]="4",
+ ["kern"]="470",
+ ["late_lua"]="77",
+ ["local_par"]="134",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="119",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="225",
+ ["rule"]="42",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="82",
+ },
+ ["obj_ptr"]=489,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2147404,
+ },
+ {
+ ["cs_count"]=45433,
+ ["dyn_used"]=837703,
+ ["elapsed_time"]=0.011018037796021,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=523804712,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="17489",
+ ["attribute_list"]="3990",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="47",
+ ["glue"]="12036",
+ ["glue_spec"]="2739",
+ ["glyph"]="3705",
+ ["hlist"]="1242",
+ ["if_stack"]="4",
+ ["kern"]="339",
+ ["late_lua"]="61",
+ ["local_par"]="120",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="191",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="182",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=492,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2147405,
+ },
+ {
+ ["cs_count"]=45433,
+ ["dyn_used"]=837292,
+ ["elapsed_time"]=0.018028974533081,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=524046700,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="14911",
+ ["attribute_list"]="3343",
+ ["boundary"]="18",
+ ["dir"]="20",
+ ["disc"]="61",
+ ["glue"]="11525",
+ ["glue_spec"]="2757",
+ ["glyph"]="3992",
+ ["hlist"]="610",
+ ["if_stack"]="6",
+ ["kern"]="180",
+ ["late_lua"]="46",
+ ["local_par"]="146",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="141",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="184",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="81",
+ },
+ ["obj_ptr"]=495,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2147424,
+ },
+ {
+ ["cs_count"]=45433,
+ ["dyn_used"]=838522,
+ ["elapsed_time"]=0.01856803894043,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=524331491,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="14376",
+ ["attribute_list"]="3209",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="52",
+ ["glue"]="11530",
+ ["glue_spec"]="2788",
+ ["glyph"]="4078",
+ ["hlist"]="492",
+ ["if_stack"]="4",
+ ["kern"]="145",
+ ["late_lua"]="50",
+ ["local_par"]="158",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="121",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="179",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=498,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2147443,
+ },
+ {
+ ["cs_count"]=45433,
+ ["dyn_used"]=840405,
+ ["elapsed_time"]=0.025542020797729,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=524629962,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="14868",
+ ["attribute_list"]="3332",
+ ["boundary"]="18",
+ ["dir"]="20",
+ ["disc"]="161",
+ ["glue"]="11805",
+ ["glue_spec"]="2806",
+ ["glyph"]="4864",
+ ["hlist"]="543",
+ ["if_stack"]="4",
+ ["kern"]="258",
+ ["late_lua"]="33",
+ ["local_par"]="137",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="123",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="171",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="81",
+ },
+ ["obj_ptr"]=501,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["str_ptr"]=2147450,
+ },
+ {
+ ["cs_count"]=45433,
+ ["dyn_used"]=841397,
+ ["elapsed_time"]=0.018529891967773,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=524852312,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="14556",
+ ["attribute_list"]="3253",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="93",
+ ["glue"]="11811",
+ ["glue_spec"]="2832",
+ ["glyph"]="4427",
+ ["hlist"]="487",
+ ["if_stack"]="4",
+ ["kern"]="171",
+ ["late_lua"]="45",
+ ["local_par"]="153",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="121",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="172",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=505,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147451,
+ },
+ {
+ ["cs_count"]=45433,
+ ["dyn_used"]=842502,
+ ["elapsed_time"]=0.013523101806641,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=525105329,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="14600",
+ ["attribute_list"]="3264",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="77",
+ ["glue"]="11879",
+ ["glue_spec"]="2861",
+ ["glyph"]="4354",
+ ["hlist"]="472",
+ ["if_stack"]="4",
+ ["kern"]="161",
+ ["late_lua"]="38",
+ ["local_par"]="146",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="115",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="164",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=509,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147452,
+ },
+ {
+ ["cs_count"]=45454,
+ ["dyn_used"]=844392,
+ ["elapsed_time"]=0.018028020858765,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=525351285,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="14735",
+ ["attribute_list"]="3298",
+ ["boundary"]="26",
+ ["dir"]="20",
+ ["disc"]="32",
+ ["glue"]="11985",
+ ["glue_spec"]="2892",
+ ["glyph"]="3847",
+ ["hlist"]="506",
+ ["if_stack"]="4",
+ ["kern"]="131",
+ ["late_lua"]="49",
+ ["local_par"]="157",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="117",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="195",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="83",
+ },
+ ["obj_ptr"]=512,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147474,
+ },
+ {
+ ["cs_count"]=45454,
+ ["dyn_used"]=846619,
+ ["elapsed_time"]=0.02253794670105,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=525601067,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="15024",
+ ["attribute_list"]="3368",
+ ["boundary"]="50",
+ ["dir"]="20",
+ ["disc"]="10",
+ ["glue"]="11924",
+ ["glue_spec"]="2933",
+ ["glyph"]="3219",
+ ["hlist"]="550",
+ ["if_stack"]="4",
+ ["kern"]="106",
+ ["late_lua"]="56",
+ ["local_par"]="164",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="125",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="239",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="89",
+ },
+ ["obj_ptr"]=515,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147475,
+ },
+ {
+ ["cs_count"]=45454,
+ ["dyn_used"]=849391,
+ ["elapsed_time"]=0.026043891906738,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=525906514,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="15288",
+ ["attribute_list"]="3432",
+ ["boundary"]="66",
+ ["dir"]="20",
+ ["disc"]="10",
+ ["glue"]="12024",
+ ["glue_spec"]="2982",
+ ["glyph"]="3207",
+ ["hlist"]="581",
+ ["if_stack"]="7",
+ ["kern"]="106",
+ ["late_lua"]="57",
+ ["local_par"]="167",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="129",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="268",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="93",
+ },
+ ["obj_ptr"]=518,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147476,
+ },
+ {
+ ["cs_count"]=45454,
+ ["dyn_used"]=849997,
+ ["elapsed_time"]=0.010014057159424,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=526141790,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="14876",
+ ["attribute_list"]="3333",
+ ["boundary"]="30",
+ ["dir"]="20",
+ ["disc"]="10",
+ ["glue"]="11860",
+ ["glue_spec"]="2979",
+ ["glyph"]="2873",
+ ["hlist"]="456",
+ ["if_stack"]="14",
+ ["kern"]="106",
+ ["late_lua"]="24",
+ ["local_par"]="132",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="117",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="173",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="84",
+ },
+ ["obj_ptr"]=521,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147482,
+ },
+ {
+ ["cs_count"]=45483,
+ ["dyn_used"]=852854,
+ ["elapsed_time"]=0.12772512435913,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=532687780,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="15067",
+ ["attribute_list"]="3380",
+ ["boundary"]="27",
+ ["dir"]="22",
+ ["disc"]="186",
+ ["glue"]="12459",
+ ["glue_spec"]="3012",
+ ["glyph"]="5321",
+ ["hlist"]="512",
+ ["if_stack"]="4",
+ ["kern"]="303",
+ ["late_lua"]="26",
+ ["local_par"]="141",
+ ["margin_kern"]="2",
+ ["math"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="111",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="244",
+ ["rule"]="42",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="86",
+ },
+ ["obj_ptr"]=524,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147521,
+ },
+ {
+ ["cs_count"]=45483,
+ ["dyn_used"]=853756,
+ ["elapsed_time"]=0.029047966003418,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=532877376,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="15119",
+ ["attribute_list"]="3394",
+ ["boundary"]="14",
+ ["dir"]="23",
+ ["disc"]="260",
+ ["glue"]="12607",
+ ["glue_spec"]="3016",
+ ["glyph"]="6201",
+ ["hlist"]="488",
+ ["if_stack"]="4",
+ ["kern"]="363",
+ ["late_lua"]="19",
+ ["local_par"]="127",
+ ["margin_kern"]="2",
+ ["math"]="6",
+ ["noad"]="1",
+ ["pdf_literal"]="131",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="169",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=527,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147522,
+ },
+ {
+ ["cs_count"]=45483,
+ ["dyn_used"]=854998,
+ ["elapsed_time"]=0.024539947509766,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=533030622,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="15156",
+ ["attribute_list"]="3403",
+ ["boundary"]="14",
+ ["dir"]="27",
+ ["disc"]="218",
+ ["glue"]="12477",
+ ["glue_spec"]="3029",
+ ["glyph"]="5426",
+ ["hlist"]="501",
+ ["if_stack"]="4",
+ ["kern"]="318",
+ ["late_lua"]="24",
+ ["local_par"]="132",
+ ["margin_kern"]="2",
+ ["math"]="14",
+ ["noad"]="1",
+ ["pdf_literal"]="125",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="173",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=530,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147523,
+ },
+ {
+ ["cs_count"]=45483,
+ ["dyn_used"]=856013,
+ ["elapsed_time"]=0.027544975280762,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=533201683,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="15126",
+ ["attribute_list"]="3393",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="236",
+ ["glue"]="12629",
+ ["glue_spec"]="3039",
+ ["glyph"]="5937",
+ ["hlist"]="478",
+ ["if_stack"]="4",
+ ["kern"]="334",
+ ["late_lua"]="22",
+ ["local_par"]="130",
+ ["margin_kern"]="2",
+ ["math"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="113",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="175",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=533,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147524,
+ },
+ {
+ ["cs_count"]=45483,
+ ["dyn_used"]=857435,
+ ["elapsed_time"]=0.026044130325317,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=533383527,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="15191",
+ ["attribute_list"]="3411",
+ ["boundary"]="14",
+ ["dir"]="27",
+ ["disc"]="202",
+ ["glue"]="12602",
+ ["glue_spec"]="3059",
+ ["glyph"]="5506",
+ ["hlist"]="504",
+ ["if_stack"]="4",
+ ["kern"]="263",
+ ["late_lua"]="28",
+ ["local_par"]="136",
+ ["margin_kern"]="2",
+ ["math"]="14",
+ ["noad"]="1",
+ ["pdf_literal"]="125",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="182",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=536,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147525,
+ },
+ {
+ ["cs_count"]=45483,
+ ["dyn_used"]=858179,
+ ["elapsed_time"]=0.014521837234497,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=533531882,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="15053",
+ ["attribute_list"]="3377",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="60",
+ ["glue"]="12170",
+ ["glue_spec"]="3058",
+ ["glyph"]="3611",
+ ["hlist"]="423",
+ ["if_stack"]="14",
+ ["kern"]="153",
+ ["late_lua"]="16",
+ ["local_par"]="124",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="111",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="140",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=540,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147531,
+ },
+ {
+ ["cs_count"]=45483,
+ ["dyn_used"]=945216,
+ ["elapsed_time"]=0.33054208755493,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=507544504,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="15349",
+ ["attribute_list"]="3449",
+ ["boundary"]="18",
+ ["dir"]="20",
+ ["disc"]="127",
+ ["glue"]="12466",
+ ["glue_spec"]="3072",
+ ["glyph"]="4709",
+ ["hlist"]="469",
+ ["if_stack"]="4",
+ ["kern"]="223",
+ ["late_lua"]="23",
+ ["local_par"]="133",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="125",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="167",
+ ["rule"]="42",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="89",
+ },
+ ["obj_ptr"]=543,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147532,
+ },
+ {
+ ["cs_count"]=45483,
+ ["dyn_used"]=1053271,
+ ["elapsed_time"]=0.26343107223511,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=620133171,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="15384",
+ ["attribute_list"]="3456",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="159",
+ ["glue"]="12559",
+ ["glue_spec"]="3090",
+ ["glyph"]="5042",
+ ["hlist"]="473",
+ ["if_stack"]="4",
+ ["kern"]="247",
+ ["late_lua"]="27",
+ ["local_par"]="138",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="124",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="162",
+ ["rule"]="43",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="92",
+ },
+ ["obj_ptr"]=546,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147533,
+ },
+ {
+ ["cs_count"]=45483,
+ ["dyn_used"]=1082023,
+ ["elapsed_time"]=0.040066003799438,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=626310480,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="15513",
+ ["attribute_list"]="3488",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="129",
+ ["glue"]="12469",
+ ["glue_spec"]="3099",
+ ["glyph"]="4564",
+ ["hlist"]="465",
+ ["if_stack"]="6",
+ ["kern"]="215",
+ ["late_lua"]="20",
+ ["local_par"]="132",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="127",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="153",
+ ["rule"]="44",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="96",
+ },
+ ["obj_ptr"]=549,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147534,
+ },
+ {
+ ["cs_count"]=45483,
+ ["dyn_used"]=1141018,
+ ["elapsed_time"]=0.036559820175171,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=628394087,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="15519",
+ ["attribute_list"]="3488",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="14",
+ ["glue"]="12238",
+ ["glue_spec"]="3110",
+ ["glyph"]="3216",
+ ["hlist"]="460",
+ ["if_stack"]="6",
+ ["kern"]="114",
+ ["late_lua"]="19",
+ ["local_par"]="134",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="130",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="146",
+ ["rule"]="47",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="108",
+ },
+ ["obj_ptr"]=552,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147535,
+ },
+ {
+ ["cs_count"]=45483,
+ ["dyn_used"]=1188865,
+ ["elapsed_time"]=0.028546094894409,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=630174947,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="15560",
+ ["attribute_list"]="3497",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="33",
+ ["glue"]="12295",
+ ["glue_spec"]="3120",
+ ["glyph"]="3408",
+ ["hlist"]="456",
+ ["if_stack"]="4",
+ ["kern"]="133",
+ ["late_lua"]="19",
+ ["local_par"]="133",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="127",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="147",
+ ["rule"]="46",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="104",
+ },
+ ["obj_ptr"]=555,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147536,
+ },
+ {
+ ["cs_count"]=45483,
+ ["dyn_used"]=1248505,
+ ["elapsed_time"]=0.03255295753479,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=632507337,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="15630",
+ ["attribute_list"]="3513",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="36",
+ ["glue"]="12316",
+ ["glue_spec"]="3131",
+ ["glyph"]="3405",
+ ["hlist"]="459",
+ ["if_stack"]="6",
+ ["kern"]="133",
+ ["late_lua"]="19",
+ ["local_par"]="133",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="127",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="147",
+ ["rule"]="46",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="104",
+ },
+ ["obj_ptr"]=558,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147537,
+ },
+ {
+ ["cs_count"]=45483,
+ ["dyn_used"]=1308184,
+ ["elapsed_time"]=0.033055067062378,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=634847706,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="15712",
+ ["attribute_list"]="3532",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="10",
+ ["glue"]="12298",
+ ["glue_spec"]="3142",
+ ["glyph"]="3169",
+ ["hlist"]="460",
+ ["if_stack"]="6",
+ ["kern"]="114",
+ ["late_lua"]="19",
+ ["local_par"]="134",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="130",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="146",
+ ["rule"]="47",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="108",
+ },
+ ["obj_ptr"]=561,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147538,
+ },
+ {
+ ["cs_count"]=45483,
+ ["dyn_used"]=1367197,
+ ["elapsed_time"]=0.036058902740479,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=637057388,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="15778",
+ ["attribute_list"]="3547",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="12",
+ ["glue"]="12318",
+ ["glue_spec"]="3153",
+ ["glyph"]="3183",
+ ["hlist"]="460",
+ ["if_stack"]="6",
+ ["kern"]="114",
+ ["late_lua"]="19",
+ ["local_par"]="134",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="130",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="146",
+ ["rule"]="47",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="108",
+ },
+ ["obj_ptr"]=564,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147539,
+ },
+ {
+ ["cs_count"]=45483,
+ ["dyn_used"]=1426047,
+ ["elapsed_time"]=0.033054113388062,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=639248258,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="15844",
+ ["attribute_list"]="3562",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="14",
+ ["glue"]="12338",
+ ["glue_spec"]="3164",
+ ["glyph"]="3206",
+ ["hlist"]="460",
+ ["if_stack"]="6",
+ ["kern"]="114",
+ ["late_lua"]="19",
+ ["local_par"]="134",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="130",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="146",
+ ["rule"]="47",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="108",
+ },
+ ["obj_ptr"]=567,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147540,
+ },
+ {
+ ["cs_count"]=45483,
+ ["dyn_used"]=1485474,
+ ["elapsed_time"]=0.032052993774414,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=641455407,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="15910",
+ ["attribute_list"]="3577",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="14",
+ ["glue"]="12358",
+ ["glue_spec"]="3175",
+ ["glyph"]="3213",
+ ["hlist"]="460",
+ ["if_stack"]="6",
+ ["kern"]="114",
+ ["late_lua"]="19",
+ ["local_par"]="134",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="130",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="146",
+ ["rule"]="47",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="108",
+ },
+ ["obj_ptr"]=571,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147541,
+ },
+ {
+ ["cs_count"]=45483,
+ ["dyn_used"]=1509561,
+ ["elapsed_time"]=0.021034002304077,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=642394907,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="15881",
+ ["attribute_list"]="3569",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="48",
+ ["glue"]="12480",
+ ["glue_spec"]="3184",
+ ["glyph"]="3689",
+ ["hlist"]="449",
+ ["if_stack"]="4",
+ ["kern"]="147",
+ ["late_lua"]="20",
+ ["local_par"]="132",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="121",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="146",
+ ["rule"]="44",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="96",
+ },
+ ["obj_ptr"]=574,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147542,
+ },
+ {
+ ["cs_count"]=45483,
+ ["dyn_used"]=1510542,
+ ["elapsed_time"]=0.010516881942749,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=642530585,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="15779",
+ ["attribute_list"]="3544",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="15",
+ ["glue"]="12366",
+ ["glue_spec"]="3190",
+ ["glyph"]="3269",
+ ["hlist"]="422",
+ ["if_stack"]="14",
+ ["kern"]="113",
+ ["late_lua"]="19",
+ ["local_par"]="127",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="113",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="140",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=577,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147548,
+ },
+ {
+ ["cs_count"]=45487,
+ ["dyn_used"]=1512400,
+ ["elapsed_time"]=0.025544166564941,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=643284471,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="16043",
+ ["attribute_list"]="3608",
+ ["boundary"]="26",
+ ["dir"]="20",
+ ["disc"]="76",
+ ["glue"]="12781",
+ ["glue_spec"]="3221",
+ ["glyph"]="4584",
+ ["hlist"]="494",
+ ["if_stack"]="6",
+ ["kern"]="180",
+ ["late_lua"]="38",
+ ["local_par"]="146",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="115",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="194",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="83",
+ },
+ ["obj_ptr"]=580,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147560,
+ },
+ {
+ ["cs_count"]=45497,
+ ["dyn_used"]=1513476,
+ ["elapsed_time"]=0.028045892715454,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=644911327,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="15912",
+ ["attribute_list"]="3576",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="12",
+ ["glue"]="12512",
+ ["glue_spec"]="3228",
+ ["glyph"]="3556",
+ ["hlist"]="439",
+ ["if_stack"]="14",
+ ["kern"]="111",
+ ["late_lua"]="26",
+ ["local_par"]="134",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="111",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="147",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=583,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147585,
+ },
+ {
+ ["cs_count"]=45497,
+ ["dyn_used"]=1515425,
+ ["elapsed_time"]=0.032051086425781,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=645156056,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="16655",
+ ["attribute_list"]="3762",
+ ["boundary"]="22",
+ ["dir"]="26",
+ ["disc"]="177",
+ ["glue"]="13113",
+ ["glue_spec"]="3245",
+ ["glyph"]="5638",
+ ["hlist"]="534",
+ ["if_stack"]="4",
+ ["kern"]="349",
+ ["late_lua"]="28",
+ ["local_par"]="136",
+ ["margin_kern"]="2",
+ ["math"]="12",
+ ["noad"]="1",
+ ["pdf_literal"]="127",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="21",
+ ["penalty"]="185",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="82",
+ },
+ ["obj_ptr"]=587,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147586,
+ },
+ {
+ ["cs_count"]=45497,
+ ["dyn_used"]=1516861,
+ ["elapsed_time"]=0.032969951629639,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=645358274,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="16743",
+ ["attribute_list"]="3784",
+ ["boundary"]="22",
+ ["dir"]="20",
+ ["disc"]="202",
+ ["glue"]="13243",
+ ["glue_spec"]="3256",
+ ["glyph"]="6264",
+ ["hlist"]="510",
+ ["if_stack"]="4",
+ ["kern"]="391",
+ ["late_lua"]="23",
+ ["local_par"]="131",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="111",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="21",
+ ["penalty"]="175",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="82",
+ },
+ ["obj_ptr"]=590,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147587,
+ },
+ {
+ ["cs_count"]=45497,
+ ["dyn_used"]=1518074,
+ ["elapsed_time"]=0.022035837173462,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=645643244,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="16376",
+ ["attribute_list"]="3691",
+ ["boundary"]="18",
+ ["dir"]="23",
+ ["disc"]="142",
+ ["glue"]="13156",
+ ["glue_spec"]="3283",
+ ["glyph"]="5178",
+ ["hlist"]="505",
+ ["if_stack"]="4",
+ ["kern"]="240",
+ ["late_lua"]="37",
+ ["local_par"]="145",
+ ["margin_kern"]="2",
+ ["math"]="6",
+ ["noad"]="1",
+ ["pdf_literal"]="121",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="184",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="81",
+ },
+ ["obj_ptr"]=593,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147588,
+ },
+ {
+ ["cs_count"]=45497,
+ ["dyn_used"]=1519433,
+ ["elapsed_time"]=0.027053117752075,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=646055607,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="16636",
+ ["attribute_list"]="3756",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="126",
+ ["glue"]="13309",
+ ["glue_spec"]="3310",
+ ["glyph"]="4968",
+ ["hlist"]="537",
+ ["if_stack"]="4",
+ ["kern"]="220",
+ ["late_lua"]="39",
+ ["local_par"]="146",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="125",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="172",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="83",
+ },
+ ["obj_ptr"]=596,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147589,
+ },
+ {
+ ["cs_count"]=45497,
+ ["dyn_used"]=1520521,
+ ["elapsed_time"]=0.018019914627075,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=646273417,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="16308",
+ ["attribute_list"]="3673",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="82",
+ ["glue"]="13406",
+ ["glue_spec"]="3339",
+ ["glyph"]="4947",
+ ["hlist"]="480",
+ ["if_stack"]="4",
+ ["kern"]="157",
+ ["late_lua"]="44",
+ ["local_par"]="152",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="119",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="168",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=599,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147590,
+ },
+ {
+ ["cs_count"]=45497,
+ ["dyn_used"]=1521939,
+ ["elapsed_time"]=0.023539066314697,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=646578140,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="16616",
+ ["attribute_list"]="3750",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="119",
+ ["glue"]="13417",
+ ["glue_spec"]="3352",
+ ["glyph"]="5266",
+ ["hlist"]="481",
+ ["if_stack"]="4",
+ ["kern"]="227",
+ ["late_lua"]="32",
+ ["local_par"]="140",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="141",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="21",
+ ["penalty"]="165",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=603,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147591,
+ },
+ {
+ ["cs_count"]=45498,
+ ["dyn_used"]=1523392,
+ ["elapsed_time"]=0.044572114944458,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=647384160,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="17424",
+ ["attribute_list"]="3953",
+ ["boundary"]="18",
+ ["dir"]="20",
+ ["disc"]="198",
+ ["glue"]="13603",
+ ["glue_spec"]="3381",
+ ["glyph"]="5587",
+ ["hlist"]="642",
+ ["if_stack"]="4",
+ ["kern"]="321",
+ ["late_lua"]="30",
+ ["local_par"]="138",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="119",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="21",
+ ["penalty"]="183",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="91",
+ },
+ ["obj_ptr"]=606,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147594,
+ },
+ {
+ ["cs_count"]=45498,
+ ["dyn_used"]=1524703,
+ ["elapsed_time"]=0.02704381942749,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=647596084,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="16731",
+ ["attribute_list"]="3777",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="188",
+ ["glue"]="13594",
+ ["glue_spec"]="3396",
+ ["glyph"]="5920",
+ ["hlist"]="482",
+ ["if_stack"]="4",
+ ["kern"]="300",
+ ["late_lua"]="26",
+ ["local_par"]="134",
+ ["margin_kern"]="2",
+ ["math"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="121",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="168",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=609,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147595,
+ },
+ {
+ ["cs_count"]=45498,
+ ["dyn_used"]=1525732,
+ ["elapsed_time"]=0.028548002243042,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=647759957,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="16854",
+ ["attribute_list"]="3809",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="246",
+ ["glue"]="13707",
+ ["glue_spec"]="3403",
+ ["glyph"]="6362",
+ ["hlist"]="481",
+ ["if_stack"]="4",
+ ["kern"]="381",
+ ["late_lua"]="18",
+ ["local_par"]="126",
+ ["margin_kern"]="2",
+ ["math"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="109",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="161",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=612,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147596,
+ },
+ {
+ ["cs_count"]=45498,
+ ["dyn_used"]=1526815,
+ ["elapsed_time"]=0.029546976089478,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=647931465,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="16836",
+ ["attribute_list"]="3806",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="236",
+ ["glue"]="13723",
+ ["glue_spec"]="3409",
+ ["glyph"]="6400",
+ ["hlist"]="474",
+ ["if_stack"]="4",
+ ["kern"]="372",
+ ["late_lua"]="17",
+ ["local_par"]="125",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="115",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="21",
+ ["penalty"]="155",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=615,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147597,
+ },
+ {
+ ["cs_count"]=45498,
+ ["dyn_used"]=1527876,
+ ["elapsed_time"]=0.029571056365967,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=648098737,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="16884",
+ ["attribute_list"]="3818",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="212",
+ ["glue"]="13760",
+ ["glue_spec"]="3415",
+ ["glyph"]="6333",
+ ["hlist"]="477",
+ ["if_stack"]="4",
+ ["kern"]="389",
+ ["late_lua"]="17",
+ ["local_par"]="125",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="111",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="157",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=618,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147598,
+ },
+ {
+ ["cs_count"]=45498,
+ ["dyn_used"]=1529512,
+ ["elapsed_time"]=0.030049085617065,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=648282291,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="17179",
+ ["attribute_list"]="3888",
+ ["boundary"]="18",
+ ["dir"]="22",
+ ["disc"]="206",
+ ["glue"]="13708",
+ ["glue_spec"]="3429",
+ ["glyph"]="5933",
+ ["hlist"]="505",
+ ["if_stack"]="4",
+ ["kern"]="334",
+ ["late_lua"]="23",
+ ["local_par"]="131",
+ ["margin_kern"]="2",
+ ["math"]="6",
+ ["noad"]="1",
+ ["pdf_literal"]="113",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="184",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="81",
+ },
+ ["obj_ptr"]=621,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147599,
+ },
+ {
+ ["cs_count"]=45498,
+ ["dyn_used"]=1530892,
+ ["elapsed_time"]=0.024040937423706,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=648447953,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="17250",
+ ["attribute_list"]="3902",
+ ["boundary"]="14",
+ ["dir"]="30",
+ ["disc"]="178",
+ ["glue"]="13627",
+ ["glue_spec"]="3446",
+ ["glyph"]="5049",
+ ["hlist"]="521",
+ ["if_stack"]="4",
+ ["kern"]="262",
+ ["late_lua"]="32",
+ ["local_par"]="140",
+ ["margin_kern"]="2",
+ ["math"]="22",
+ ["noad"]="1",
+ ["pdf_literal"]="125",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="197",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=624,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147600,
+ },
+ {
+ ["cs_count"]=45507,
+ ["dyn_used"]=1532348,
+ ["elapsed_time"]=0.022035121917725,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=648859210,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="17197",
+ ["attribute_list"]="3893",
+ ["boundary"]="14",
+ ["dir"]="24",
+ ["disc"]="133",
+ ["glue"]="13587",
+ ["glue_spec"]="3450",
+ ["glyph"]="4892",
+ ["hlist"]="482",
+ ["if_stack"]="14",
+ ["kern"]="247",
+ ["late_lua"]="22",
+ ["local_par"]="130",
+ ["margin_kern"]="2",
+ ["math"]="8",
+ ["noad"]="1",
+ ["pdf_literal"]="117",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="168",
+ ["rule"]="40",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="80",
+ },
+ ["obj_ptr"]=627,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147615,
+ },
+ {
+ ["cs_count"]=45522,
+ ["dyn_used"]=1543138,
+ ["elapsed_time"]=0.040066957473755,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=649371286,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="17708",
+ ["attribute_list"]="4019",
+ ["boundary"]="22",
+ ["dir"]="23",
+ ["disc"]="199",
+ ["glue"]="13915",
+ ["glue_spec"]="3472",
+ ["glyph"]="5598",
+ ["hlist"]="622",
+ ["if_stack"]="4",
+ ["kern"]="340",
+ ["late_lua"]="30",
+ ["local_par"]="142",
+ ["margin_kern"]="2",
+ ["math"]="6",
+ ["noad"]="1",
+ ["pdf_literal"]="147",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="193",
+ ["rule"]="49",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="120",
+ },
+ ["obj_ptr"]=630,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147631,
+ },
+ {
+ ["cs_count"]=45522,
+ ["dyn_used"]=1546119,
+ ["elapsed_time"]=0.024039030075073,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=649737310,
+ ["max_buf_stack"]=463,
+ ["node_memory"]={
+ ["attribute"]="17464",
+ ["attribute_list"]="3958",
+ ["boundary"]="20",
+ ["dir"]="25",
+ ["disc"]="86",
+ ["glue"]="13863",
+ ["glue_spec"]="3513",
+ ["glyph"]="4903",
+ ["hlist"]="609",
+ ["if_stack"]="4",
+ ["kern"]="227",
+ ["late_lua"]="49",
+ ["local_par"]="157",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="118",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="189",
+ ["rule"]="43",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="118",
+ },
+ ["obj_ptr"]=634,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147638,
+ },
+ {
+ ["cs_count"]=45522,
+ ["dyn_used"]=1547326,
+ ["elapsed_time"]=0.025039911270142,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=650259855,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="17438",
+ ["attribute_list"]="3952",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="83",
+ ["glue"]="13961",
+ ["glue_spec"]="3543",
+ ["glyph"]="4832",
+ ["hlist"]="576",
+ ["if_stack"]="4",
+ ["kern"]="218",
+ ["late_lua"]="46",
+ ["local_par"]="152",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="123",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="171",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=637,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147651,
+ },
+ {
+ ["cs_count"]=45522,
+ ["dyn_used"]=1548068,
+ ["elapsed_time"]=0.015525102615356,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=650438931,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="17264",
+ ["attribute_list"]="3909",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="10",
+ ["glue"]="14080",
+ ["glue_spec"]="3585",
+ ["glyph"]="4131",
+ ["hlist"]="587",
+ ["if_stack"]="4",
+ ["kern"]="129",
+ ["late_lua"]="58",
+ ["local_par"]="164",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="111",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="176",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=640,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147652,
+ },
+ {
+ ["cs_count"]=45522,
+ ["dyn_used"]=1548293,
+ ["elapsed_time"]=0.014022827148438,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=650715618,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="17315",
+ ["attribute_list"]="3921",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="20",
+ ["glue"]="14245",
+ ["glue_spec"]="3626",
+ ["glyph"]="4110",
+ ["hlist"]="584",
+ ["if_stack"]="4",
+ ["kern"]="143",
+ ["late_lua"]="56",
+ ["local_par"]="162",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="113",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="175",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=643,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147653,
+ },
+ {
+ ["cs_count"]=45522,
+ ["dyn_used"]=1549648,
+ ["elapsed_time"]=0.023539066314697,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=651067400,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="17546",
+ ["attribute_list"]="3978",
+ ["boundary"]="14",
+ ["dir"]="23",
+ ["disc"]="89",
+ ["glue"]="14553",
+ ["glue_spec"]="3655",
+ ["glyph"]="4724",
+ ["hlist"]="586",
+ ["if_stack"]="4",
+ ["kern"]="216",
+ ["late_lua"]="44",
+ ["local_par"]="150",
+ ["margin_kern"]="2",
+ ["math"]="6",
+ ["noad"]="1",
+ ["pdf_literal"]="135",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="177",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=646,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147654,
+ },
+ {
+ ["cs_count"]=45522,
+ ["dyn_used"]=1550557,
+ ["elapsed_time"]=0.025542020797729,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=651271639,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="17588",
+ ["attribute_list"]="3989",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="145",
+ ["glue"]="14789",
+ ["glue_spec"]="3681",
+ ["glyph"]="5685",
+ ["hlist"]="587",
+ ["if_stack"]="4",
+ ["kern"]="295",
+ ["late_lua"]="46",
+ ["local_par"]="152",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="115",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="173",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=649,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147655,
+ },
+ {
+ ["cs_count"]=45522,
+ ["dyn_used"]=1552066,
+ ["elapsed_time"]=0.025039911270142,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=651445373,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="17822",
+ ["attribute_list"]="4046",
+ ["boundary"]="18",
+ ["dir"]="25",
+ ["disc"]="209",
+ ["glue"]="14694",
+ ["glue_spec"]="3695",
+ ["glyph"]="5756",
+ ["hlist"]="589",
+ ["if_stack"]="4",
+ ["kern"]="333",
+ ["late_lua"]="28",
+ ["local_par"]="134",
+ ["margin_kern"]="2",
+ ["math"]="10",
+ ["noad"]="1",
+ ["pdf_literal"]="127",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="177",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="106",
+ },
+ ["obj_ptr"]=652,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147656,
+ },
+ {
+ ["cs_count"]=45522,
+ ["dyn_used"]=1553608,
+ ["elapsed_time"]=0.022539138793945,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=651703707,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="17767",
+ ["attribute_list"]="4031",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="106",
+ ["glue"]="14694",
+ ["glue_spec"]="3723",
+ ["glyph"]="5094",
+ ["hlist"]="570",
+ ["if_stack"]="4",
+ ["kern"]="219",
+ ["late_lua"]="38",
+ ["local_par"]="144",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="121",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="172",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=655,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147657,
+ },
+ {
+ ["cs_count"]=45522,
+ ["dyn_used"]=1554507,
+ ["elapsed_time"]=0.016024827957153,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=651961538,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="17635",
+ ["attribute_list"]="3998",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="50",
+ ["glue"]="14759",
+ ["glue_spec"]="3754",
+ ["glyph"]="4479",
+ ["hlist"]="570",
+ ["if_stack"]="4",
+ ["kern"]="168",
+ ["late_lua"]="47",
+ ["local_par"]="153",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="113",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="169",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=658,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["str_ptr"]=2147658,
+ },
+ {
+ ["cs_count"]=45522,
+ ["dyn_used"]=1555859,
+ ["elapsed_time"]=0.018531084060669,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=652243939,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="17764",
+ ["attribute_list"]="4030",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="47",
+ ["glue"]="14883",
+ ["glue_spec"]="3786",
+ ["glyph"]="4686",
+ ["hlist"]="573",
+ ["if_stack"]="4",
+ ["kern"]="180",
+ ["late_lua"]="47",
+ ["local_par"]="153",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="131",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="172",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=662,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2147659,
+ },
+ {
+ ["cs_count"]=45522,
+ ["dyn_used"]=1557119,
+ ["elapsed_time"]=0.019030094146729,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=652567529,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="17847",
+ ["attribute_list"]="4051",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="50",
+ ["glue"]="15090",
+ ["glue_spec"]="3817",
+ ["glyph"]="4812",
+ ["hlist"]="574",
+ ["if_stack"]="4",
+ ["kern"]="194",
+ ["late_lua"]="46",
+ ["local_par"]="152",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="123",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="171",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=666,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2147660,
+ },
+ {
+ ["cs_count"]=45522,
+ ["dyn_used"]=1558643,
+ ["elapsed_time"]=0.023538827896118,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=652912733,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="18026",
+ ["attribute_list"]="4094",
+ ["boundary"]="14",
+ ["dir"]="29",
+ ["disc"]="78",
+ ["glue"]="15169",
+ ["glue_spec"]="3845",
+ ["glyph"]="5067",
+ ["hlist"]="612",
+ ["if_stack"]="4",
+ ["kern"]="232",
+ ["late_lua"]="44",
+ ["local_par"]="150",
+ ["margin_kern"]="2",
+ ["math"]="18",
+ ["noad"]="1",
+ ["pdf_literal"]="133",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="186",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=669,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2147661,
+ },
+ {
+ ["cs_count"]=45522,
+ ["dyn_used"]=1559511,
+ ["elapsed_time"]=0.015525102615356,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=653157583,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="17842",
+ ["attribute_list"]="4050",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="16",
+ ["glue"]="15388",
+ ["glue_spec"]="3884",
+ ["glyph"]="4291",
+ ["hlist"]="583",
+ ["if_stack"]="4",
+ ["kern"]="134",
+ ["late_lua"]="56",
+ ["local_par"]="162",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="113",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="174",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=672,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2147662,
+ },
+ {
+ ["cs_count"]=45522,
+ ["dyn_used"]=1560609,
+ ["elapsed_time"]=0.020534992218018,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=653424665,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="18116",
+ ["attribute_list"]="4118",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="85",
+ ["glue"]="15542",
+ ["glue_spec"]="3910",
+ ["glyph"]="4928",
+ ["hlist"]="581",
+ ["if_stack"]="4",
+ ["kern"]="247",
+ ["late_lua"]="45",
+ ["local_par"]="151",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="119",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="175",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=675,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2147663,
+ },
+ {
+ ["cs_count"]=45522,
+ ["dyn_used"]=1564379,
+ ["elapsed_time"]=0.031049966812134,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=654143716,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="18377",
+ ["attribute_list"]="4181",
+ ["boundary"]="18",
+ ["dir"]="20",
+ ["disc"]="156",
+ ["glue"]="15534",
+ ["glue_spec"]="3934",
+ ["glyph"]="5390",
+ ["hlist"]="583",
+ ["if_stack"]="4",
+ ["kern"]="309",
+ ["late_lua"]="30",
+ ["local_par"]="141",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="140",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="178",
+ ["rule"]="46",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="117",
+ },
+ ["obj_ptr"]=678,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2147664,
+ },
+ {
+ ["cs_count"]=45533,
+ ["dyn_used"]=1569104,
+ ["elapsed_time"]=0.054088115692139,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=656735610,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="18479",
+ ["attribute_list"]="4202",
+ ["boundary"]="14",
+ ["dir"]="28",
+ ["disc"]="88",
+ ["glue"]="15423",
+ ["glue_spec"]="3949",
+ ["glyph"]="4705",
+ ["hlist"]="601",
+ ["if_stack"]="14",
+ ["kern"]="238",
+ ["late_lua"]="27",
+ ["local_par"]="141",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="131",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="161",
+ ["rule"]="49",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="134",
+ },
+ ["obj_ptr"]=681,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2147685,
+ },
+ {
+ ["cs_count"]=45533,
+ ["dyn_used"]=1569848,
+ ["elapsed_time"]=0.011518955230713,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=656804293,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="18067",
+ ["attribute_list"]="4104",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="10",
+ ["glue"]="15100",
+ ["glue_spec"]="3951",
+ ["glyph"]="3433",
+ ["hlist"]="502",
+ ["if_stack"]="15",
+ ["kern"]="129",
+ ["late_lua"]="15",
+ ["local_par"]="121",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="109",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="135",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=684,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2147686,
+ },
+ {
+ ["cs_count"]=45533,
+ ["dyn_used"]=1571484,
+ ["elapsed_time"]=0.037060976028442,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=657056761,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="18713",
+ ["attribute_list"]="4264",
+ ["boundary"]="26",
+ ["dir"]="20",
+ ["disc"]="277",
+ ["glue"]="15786",
+ ["glue_spec"]="3966",
+ ["glyph"]="6599",
+ ["hlist"]="604",
+ ["if_stack"]="4",
+ ["kern"]="431",
+ ["late_lua"]="28",
+ ["local_par"]="134",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="113",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="190",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="108",
+ },
+ ["obj_ptr"]=687,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2147687,
+ },
+ {
+ ["cs_count"]=45533,
+ ["dyn_used"]=1572670,
+ ["elapsed_time"]=0.022036075592041,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=657264871,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="18413",
+ ["attribute_list"]="4188",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="182",
+ ["glue"]="15709",
+ ["glue_spec"]="3985",
+ ["glyph"]="5930",
+ ["hlist"]="571",
+ ["if_stack"]="4",
+ ["kern"]="298",
+ ["late_lua"]="33",
+ ["local_par"]="139",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="115",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="166",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=690,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2147688,
+ },
+ {
+ ["cs_count"]=45533,
+ ["dyn_used"]=1574013,
+ ["elapsed_time"]=0.023038864135742,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=657476064,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="18444",
+ ["attribute_list"]="4195",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="135",
+ ["glue"]="15754",
+ ["glue_spec"]="4006",
+ ["glyph"]="5386",
+ ["hlist"]="567",
+ ["if_stack"]="4",
+ ["kern"]="283",
+ ["late_lua"]="36",
+ ["local_par"]="142",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="119",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="164",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=693,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2147689,
+ },
+ {
+ ["cs_count"]=45533,
+ ["dyn_used"]=1575668,
+ ["elapsed_time"]=0.018528938293457,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=657762196,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="18491",
+ ["attribute_list"]="4206",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="58",
+ ["glue"]="15796",
+ ["glue_spec"]="4040",
+ ["glyph"]="4562",
+ ["hlist"]="575",
+ ["if_stack"]="4",
+ ["kern"]="204",
+ ["late_lua"]="47",
+ ["local_par"]="153",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="121",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="170",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=697,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2147690,
+ },
+ {
+ ["cs_count"]=45533,
+ ["dyn_used"]=1576531,
+ ["elapsed_time"]=0.017529010772705,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=658055868,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="18509",
+ ["attribute_list"]="4212",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="43",
+ ["glue"]="16137",
+ ["glue_spec"]="4070",
+ ["glyph"]="4638",
+ ["hlist"]="582",
+ ["if_stack"]="4",
+ ["kern"]="197",
+ ["late_lua"]="50",
+ ["local_par"]="156",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="119",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="173",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=700,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2147691,
+ },
+ {
+ ["cs_count"]=45533,
+ ["dyn_used"]=1577807,
+ ["elapsed_time"]=0.021034002304077,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=658291592,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="18638",
+ ["attribute_list"]="4243",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="118",
+ ["glue"]="16032",
+ ["glue_spec"]="4093",
+ ["glyph"]="5466",
+ ["hlist"]="561",
+ ["if_stack"]="4",
+ ["kern"]="265",
+ ["late_lua"]="33",
+ ["local_par"]="139",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="121",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="162",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=703,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2147692,
+ },
+ {
+ ["cs_count"]=45533,
+ ["dyn_used"]=1578842,
+ ["elapsed_time"]=0.021536111831665,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=658602476,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="18595",
+ ["attribute_list"]="4233",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="78",
+ ["glue"]="16250",
+ ["glue_spec"]="4120",
+ ["glyph"]="5111",
+ ["hlist"]="575",
+ ["if_stack"]="4",
+ ["kern"]="220",
+ ["late_lua"]="43",
+ ["local_par"]="149",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="115",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="169",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=706,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2147693,
+ },
+ {
+ ["cs_count"]=45533,
+ ["dyn_used"]=1580163,
+ ["elapsed_time"]=0.020031929016113,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=658873516,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="18648",
+ ["attribute_list"]="4245",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="74",
+ ["glue"]="16275",
+ ["glue_spec"]="4149",
+ ["glyph"]="5085",
+ ["hlist"]="570",
+ ["if_stack"]="4",
+ ["kern"]="198",
+ ["late_lua"]="44",
+ ["local_par"]="150",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="127",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="170",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=709,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2147694,
+ },
+ {
+ ["cs_count"]=45533,
+ ["dyn_used"]=1581246,
+ ["elapsed_time"]=0.027546167373657,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=659091661,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="18972",
+ ["attribute_list"]="4327",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="130",
+ ["glue"]="16453",
+ ["glue_spec"]="4159",
+ ["glyph"]="5819",
+ ["hlist"]="576",
+ ["if_stack"]="4",
+ ["kern"]="304",
+ ["late_lua"]="31",
+ ["local_par"]="137",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="123",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="158",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=712,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2147695,
+ },
+ {
+ ["cs_count"]=45533,
+ ["dyn_used"]=1582937,
+ ["elapsed_time"]=0.021533966064453,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=659326597,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="18884",
+ ["attribute_list"]="4302",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="96",
+ ["glue"]="16393",
+ ["glue_spec"]="4181",
+ ["glyph"]="5253",
+ ["hlist"]="563",
+ ["if_stack"]="4",
+ ["kern"]="241",
+ ["late_lua"]="35",
+ ["local_par"]="141",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="121",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="165",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=715,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2147696,
+ },
+ {
+ ["cs_count"]=45533,
+ ["dyn_used"]=1584625,
+ ["elapsed_time"]=0.025041818618774,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=659563781,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="19061",
+ ["attribute_list"]="4347",
+ ["boundary"]="18",
+ ["dir"]="20",
+ ["disc"]="122",
+ ["glue"]="16514",
+ ["glue_spec"]="4207",
+ ["glyph"]="5524",
+ ["hlist"]="579",
+ ["if_stack"]="4",
+ ["kern"]="258",
+ ["late_lua"]="37",
+ ["local_par"]="143",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="123",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="21",
+ ["penalty"]="173",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="106",
+ },
+ ["obj_ptr"]=718,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2147697,
+ },
+ {
+ ["cs_count"]=45533,
+ ["dyn_used"]=1585833,
+ ["elapsed_time"]=0.024540185928345,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=659800727,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="18984",
+ ["attribute_list"]="4328",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="101",
+ ["glue"]="16574",
+ ["glue_spec"]="4226",
+ ["glyph"]="5554",
+ ["hlist"]="569",
+ ["if_stack"]="4",
+ ["kern"]="229",
+ ["late_lua"]="39",
+ ["local_par"]="145",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="123",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="170",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=721,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2147698,
+ },
+ {
+ ["cs_count"]=45533,
+ ["dyn_used"]=1587493,
+ ["elapsed_time"]=0.024540901184082,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=660048356,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="19121",
+ ["attribute_list"]="4362",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="132",
+ ["glue"]="16632",
+ ["glue_spec"]="4251",
+ ["glyph"]="5522",
+ ["hlist"]="566",
+ ["if_stack"]="4",
+ ["kern"]="247",
+ ["late_lua"]="36",
+ ["local_par"]="142",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="127",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="169",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=724,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2147699,
+ },
+ {
+ ["cs_count"]=45533,
+ ["dyn_used"]=1588844,
+ ["elapsed_time"]=0.025541067123413,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=660307405,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="19232",
+ ["attribute_list"]="4389",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="131",
+ ["glue"]="16698",
+ ["glue_spec"]="4265",
+ ["glyph"]="5634",
+ ["hlist"]="565",
+ ["if_stack"]="4",
+ ["kern"]="251",
+ ["late_lua"]="34",
+ ["local_par"]="140",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="145",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="166",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=728,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2147700,
+ },
+ {
+ ["cs_count"]=45533,
+ ["dyn_used"]=1590168,
+ ["elapsed_time"]=0.022036075592041,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=660543523,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="19166",
+ ["attribute_list"]="4373",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="98",
+ ["glue"]="16820",
+ ["glue_spec"]="4290",
+ ["glyph"]="5503",
+ ["hlist"]="574",
+ ["if_stack"]="4",
+ ["kern"]="241",
+ ["late_lua"]="39",
+ ["local_par"]="145",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="121",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="168",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=731,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2147701,
+ },
+ {
+ ["cs_count"]=45548,
+ ["dyn_used"]=1591849,
+ ["elapsed_time"]=0.029047966003418,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=660781375,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="19692",
+ ["attribute_list"]="4503",
+ ["boundary"]="18",
+ ["dir"]="30",
+ ["disc"]="156",
+ ["glue"]="16944",
+ ["glue_spec"]="4306",
+ ["glyph"]="5721",
+ ["hlist"]="623",
+ ["if_stack"]="4",
+ ["kern"]="321",
+ ["late_lua"]="30",
+ ["local_par"]="136",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="149",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="186",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="106",
+ },
+ ["obj_ptr"]=734,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2147717,
+ },
+ {
+ ["cs_count"]=45548,
+ ["dyn_used"]=1594195,
+ ["elapsed_time"]=0.032051801681519,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=661105245,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="19646",
+ ["attribute_list"]="4492",
+ ["boundary"]="18",
+ ["dir"]="24",
+ ["disc"]="236",
+ ["glue"]="16993",
+ ["glue_spec"]="4314",
+ ["glyph"]="6160",
+ ["hlist"]="591",
+ ["if_stack"]="8",
+ ["kern"]="374",
+ ["late_lua"]="24",
+ ["local_par"]="130",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="121",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="176",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="106",
+ },
+ ["obj_ptr"]=737,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2147723,
+ },
+ {
+ ["cs_count"]=45548,
+ ["dyn_used"]=1594887,
+ ["elapsed_time"]=0.009519100189209,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=661169680,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="19157",
+ ["attribute_list"]="4372",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="8",
+ ["glue"]="16448",
+ ["glue_spec"]="4316",
+ ["glyph"]="3641",
+ ["hlist"]="503",
+ ["if_stack"]="9",
+ ["kern"]="131",
+ ["late_lua"]="15",
+ ["local_par"]="121",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="109",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="135",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=740,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2147724,
+ },
+ {
+ ["cs_count"]=46071,
+ ["dyn_used"]=1622060,
+ ["elapsed_time"]=0.46627807617188,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=703190954,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="32726",
+ ["attribute_list"]="7083",
+ ["boundary"]="16",
+ ["dir"]="25",
+ ["disc"]="182",
+ ["glue"]="17249",
+ ["glue_spec"]="4346",
+ ["glyph"]="6411",
+ ["hlist"]="626",
+ ["if_stack"]="4",
+ ["kern"]="159",
+ ["late_lua"]="38",
+ ["local_par"]="144",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="129",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="205",
+ ["rule"]="44",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="106",
+ },
+ ["obj_ptr"]=743,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2148263,
+ },
+ {
+ ["cs_count"]=46071,
+ ["dyn_used"]=1623671,
+ ["elapsed_time"]=0.11118292808533,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=703591391,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="33851",
+ ["attribute_list"]="7309",
+ ["boundary"]="14",
+ ["dir"]="23",
+ ["disc"]="200",
+ ["glue"]="17303",
+ ["glue_spec"]="4364",
+ ["glyph"]="6688",
+ ["hlist"]="583",
+ ["if_stack"]="4",
+ ["kern"]="148",
+ ["late_lua"]="31",
+ ["local_par"]="137",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="131",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="175",
+ ["rule"]="42",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=747,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2148264,
+ },
+ {
+ ["cs_count"]=46071,
+ ["dyn_used"]=1625299,
+ ["elapsed_time"]=0.12923908233643,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=704088248,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="31588",
+ ["attribute_list"]="6857",
+ ["boundary"]="14",
+ ["dir"]="25",
+ ["disc"]="158",
+ ["glue"]="17331",
+ ["glue_spec"]="4386",
+ ["glyph"]="6216",
+ ["hlist"]="589",
+ ["if_stack"]="4",
+ ["kern"]="135",
+ ["late_lua"]="35",
+ ["local_par"]="141",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="135",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="179",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=750,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2148265,
+ },
+ {
+ ["cs_count"]=46071,
+ ["dyn_used"]=1626282,
+ ["elapsed_time"]=0.11568784713745,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=704625701,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="27708",
+ ["attribute_list"]="6084",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="80",
+ ["glue"]="17485",
+ ["glue_spec"]="4423",
+ ["glyph"]="5411",
+ ["hlist"]="589",
+ ["if_stack"]="4",
+ ["kern"]="133",
+ ["late_lua"]="54",
+ ["local_par"]="160",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="119",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="176",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=753,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2148266,
+ },
+ {
+ ["cs_count"]=46071,
+ ["dyn_used"]=1627044,
+ ["elapsed_time"]=0.081634998321533,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=704951451,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="26082",
+ ["attribute_list"]="5760",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="42",
+ ["glue"]="17913",
+ ["glue_spec"]="4461",
+ ["glyph"]="5057",
+ ["hlist"]="596",
+ ["if_stack"]="4",
+ ["kern"]="134",
+ ["late_lua"]="58",
+ ["local_par"]="164",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="113",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="179",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=756,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2148267,
+ },
+ {
+ ["cs_count"]=46071,
+ ["dyn_used"]=1628328,
+ ["elapsed_time"]=0.064105987548828,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=705379112,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="27466",
+ ["attribute_list"]="6036",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="59",
+ ["glue"]="17621",
+ ["glue_spec"]="4497",
+ ["glyph"]="5336",
+ ["hlist"]="582",
+ ["if_stack"]="4",
+ ["kern"]="135",
+ ["late_lua"]="50",
+ ["local_par"]="156",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="125",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="175",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=760,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2148268,
+ },
+ {
+ ["cs_count"]=46075,
+ ["dyn_used"]=1629781,
+ ["elapsed_time"]=0.30302000045776,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=725883395,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="24317",
+ ["attribute_list"]="5412",
+ ["boundary"]="23",
+ ["dir"]="21",
+ ["disc"]="79",
+ ["glue"]="17368",
+ ["glue_spec"]="4509",
+ ["glyph"]="4789",
+ ["hlist"]="558",
+ ["if_stack"]="8",
+ ["kern"]="174",
+ ["late_lua"]="21",
+ ["local_par"]="129",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="121",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="154",
+ ["rule"]="43",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="111",
+ },
+ ["obj_ptr"]=763,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2148275,
+ },
+ {
+ ["cs_count"]=46075,
+ ["dyn_used"]=1630511,
+ ["elapsed_time"]=0.045575141906738,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=725954500,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="19660",
+ ["attribute_list"]="4479",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="10",
+ ["glue"]="17152",
+ ["glue_spec"]="4511",
+ ["glyph"]="3764",
+ ["hlist"]="504",
+ ["if_stack"]="9",
+ ["kern"]="131",
+ ["late_lua"]="15",
+ ["local_par"]="121",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="109",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="135",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=766,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2148276,
+ },
+ {
+ ["cs_count"]=46075,
+ ["dyn_used"]=1622378,
+ ["elapsed_time"]=0.033555030822754,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=726353154,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="20363",
+ ["attribute_list"]="4652",
+ ["boundary"]="18",
+ ["dir"]="27",
+ ["disc"]="139",
+ ["glue"]="17817",
+ ["glue_spec"]="4521",
+ ["glyph"]="6221",
+ ["hlist"]="611",
+ ["if_stack"]="4",
+ ["kern"]="290",
+ ["late_lua"]="28",
+ ["local_par"]="134",
+ ["margin_kern"]="2",
+ ["math"]="14",
+ ["noad"]="1",
+ ["pdf_literal"]="145",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="21",
+ ["penalty"]="191",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="106",
+ },
+ ["obj_ptr"]=769,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2148282,
+ },
+ {
+ ["cs_count"]=46075,
+ ["dyn_used"]=1623324,
+ ["elapsed_time"]=0.030048847198486,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=726521563,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="20066",
+ ["attribute_list"]="4579",
+ ["boundary"]="14",
+ ["dir"]="23",
+ ["disc"]="263",
+ ["glue"]="17937",
+ ["glue_spec"]="4532",
+ ["glyph"]="6966",
+ ["hlist"]="587",
+ ["if_stack"]="4",
+ ["kern"]="366",
+ ["late_lua"]="25",
+ ["local_par"]="131",
+ ["margin_kern"]="2",
+ ["math"]="6",
+ ["noad"]="1",
+ ["pdf_literal"]="121",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="188",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=772,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2148283,
+ },
+ {
+ ["cs_count"]=46075,
+ ["dyn_used"]=1624525,
+ ["elapsed_time"]=0.026043176651001,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=726670303,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="20037",
+ ["attribute_list"]="4571",
+ ["boundary"]="14",
+ ["dir"]="26",
+ ["disc"]="215",
+ ["glue"]="17919",
+ ["glue_spec"]="4544",
+ ["glyph"]="6577",
+ ["hlist"]="586",
+ ["if_stack"]="4",
+ ["kern"]="327",
+ ["late_lua"]="23",
+ ["local_par"]="129",
+ ["margin_kern"]="2",
+ ["math"]="12",
+ ["noad"]="1",
+ ["pdf_literal"]="119",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="178",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=775,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2148284,
+ },
+ {
+ ["cs_count"]=46075,
+ ["dyn_used"]=1625374,
+ ["elapsed_time"]=0.032051801681519,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=726825284,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="20103",
+ ["attribute_list"]="4588",
+ ["boundary"]="14",
+ ["dir"]="22",
+ ["disc"]="258",
+ ["glue"]="17972",
+ ["glue_spec"]="4547",
+ ["glyph"]="7069",
+ ["hlist"]="575",
+ ["if_stack"]="4",
+ ["kern"]="353",
+ ["late_lua"]="20",
+ ["local_par"]="126",
+ ["margin_kern"]="2",
+ ["math"]="4",
+ ["noad"]="1",
+ ["pdf_literal"]="113",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="162",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=778,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2148285,
+ },
+ {
+ ["cs_count"]=46075,
+ ["dyn_used"]=1626404,
+ ["elapsed_time"]=0.019532203674316,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=726985977,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="20065",
+ ["attribute_list"]="4579",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="127",
+ ["glue"]="17594",
+ ["glue_spec"]="4550",
+ ["glyph"]="5341",
+ ["hlist"]="528",
+ ["if_stack"]="14",
+ ["kern"]="252",
+ ["late_lua"]="16",
+ ["local_par"]="122",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="109",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="144",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=781,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2148291,
+ },
+ {
+ ["cs_count"]=46075,
+ ["dyn_used"]=1627162,
+ ["elapsed_time"]=0.0085139274597168,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=727044535,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="19934",
+ ["attribute_list"]="4546",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="8",
+ ["glue"]="17296",
+ ["glue_spec"]="4552",
+ ["glyph"]="3814",
+ ["hlist"]="502",
+ ["if_stack"]="15",
+ ["kern"]="127",
+ ["late_lua"]="15",
+ ["local_par"]="121",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="109",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="135",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=784,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2148292,
+ },
+ {
+ ["cs_count"]=46078,
+ ["dyn_used"]=1629829,
+ ["elapsed_time"]=0.03355598449707,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=727363835,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="20653",
+ ["attribute_list"]="4719",
+ ["boundary"]="40",
+ ["dir"]="39",
+ ["disc"]="116",
+ ["glue"]="17847",
+ ["glue_spec"]="4590",
+ ["glyph"]="5736",
+ ["hlist"]="638",
+ ["if_stack"]="4",
+ ["kern"]="297",
+ ["late_lua"]="31",
+ ["local_par"]="142",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="127",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="200",
+ ["rule"]="53",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="120",
+ },
+ ["obj_ptr"]=787,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2148312,
+ },
+ {
+ ["cs_count"]=46078,
+ ["dyn_used"]=1630839,
+ ["elapsed_time"]=0.018531084060669,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=727740694,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="20277",
+ ["attribute_list"]="4630",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="40",
+ ["glue"]="18116",
+ ["glue_spec"]="4623",
+ ["glyph"]="5088",
+ ["hlist"]="581",
+ ["if_stack"]="4",
+ ["kern"]="186",
+ ["late_lua"]="48",
+ ["local_par"]="154",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="123",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="172",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=791,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2148313,
+ },
+ {
+ ["cs_count"]=46078,
+ ["dyn_used"]=1631775,
+ ["elapsed_time"]=0.019531011581421,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=727938876,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="20198",
+ ["attribute_list"]="4611",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="85",
+ ["glue"]="17840",
+ ["glue_spec"]="4626",
+ ["glyph"]="5081",
+ ["hlist"]="533",
+ ["if_stack"]="14",
+ ["kern"]="215",
+ ["late_lua"]="23",
+ ["local_par"]="129",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="117",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="147",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=794,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2148319,
+ },
+ {
+ ["cs_count"]=46078,
+ ["dyn_used"]=1632518,
+ ["elapsed_time"]=0.0085129737854004,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=728007495,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="20106",
+ ["attribute_list"]="4588",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="8",
+ ["glue"]="17507",
+ ["glue_spec"]="4628",
+ ["glyph"]="3853",
+ ["hlist"]="502",
+ ["if_stack"]="15",
+ ["kern"]="127",
+ ["late_lua"]="15",
+ ["local_par"]="121",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="109",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="135",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=797,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2148320,
+ },
+ {
+ ["cs_count"]=46078,
+ ["dyn_used"]=1633877,
+ ["elapsed_time"]=0.029551029205322,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=728221660,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="20498",
+ ["attribute_list"]="4684",
+ ["boundary"]="18",
+ ["dir"]="20",
+ ["disc"]="169",
+ ["glue"]="18114",
+ ["glue_spec"]="4642",
+ ["glyph"]="6336",
+ ["hlist"]="569",
+ ["if_stack"]="4",
+ ["kern"]="327",
+ ["late_lua"]="27",
+ ["local_par"]="133",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="115",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="171",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="106",
+ },
+ ["obj_ptr"]=800,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2148321,
+ },
+ {
+ ["cs_count"]=46078,
+ ["dyn_used"]=1635227,
+ ["elapsed_time"]=0.022032976150513,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=728489801,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="20385",
+ ["attribute_list"]="4655",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="101",
+ ["glue"]="18113",
+ ["glue_spec"]="4667",
+ ["glyph"]="5571",
+ ["hlist"]="565",
+ ["if_stack"]="4",
+ ["kern"]="216",
+ ["late_lua"]="39",
+ ["local_par"]="145",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="139",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="169",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=803,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2148322,
+ },
+ {
+ ["cs_count"]=46706,
+ ["dyn_used"]=1651297,
+ ["elapsed_time"]=0.038218021392822,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=729514393,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="20495",
+ ["attribute_list"]="4682",
+ ["boundary"]="14",
+ ["dir"]="26",
+ ["disc"]="92",
+ ["glue"]="18016",
+ ["glue_spec"]="4684",
+ ["glyph"]="5202",
+ ["hlist"]="573",
+ ["if_stack"]="14",
+ ["kern"]="193",
+ ["late_lua"]="32",
+ ["local_par"]="138",
+ ["margin_kern"]="2",
+ ["math"]="12",
+ ["noad"]="1",
+ ["pdf_literal"]="133",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="169",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=806,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2148970,
+ },
+ {
+ ["cs_count"]=46706,
+ ["dyn_used"]=1652040,
+ ["elapsed_time"]=0.0090148448944092,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=729583559,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="20330",
+ ["attribute_list"]="4643",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="10",
+ ["glue"]="17716",
+ ["glue_spec"]="4686",
+ ["glyph"]="3909",
+ ["hlist"]="502",
+ ["if_stack"]="15",
+ ["kern"]="130",
+ ["late_lua"]="15",
+ ["local_par"]="121",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="109",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="135",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=809,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2148971,
+ },
+ {
+ ["cs_count"]=46711,
+ ["dyn_used"]=1653908,
+ ["elapsed_time"]=0.096158027648926,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=738884948,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="20673",
+ ["attribute_list"]="4727",
+ ["boundary"]="18",
+ ["dir"]="23",
+ ["disc"]="103",
+ ["glue"]="18467",
+ ["glue_spec"]="4714",
+ ["glyph"]="6136",
+ ["hlist"]="594",
+ ["if_stack"]="4",
+ ["kern"]="238",
+ ["late_lua"]="41",
+ ["local_par"]="147",
+ ["margin_kern"]="2",
+ ["math"]="6",
+ ["noad"]="1",
+ ["pdf_literal"]="123",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="182",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="106",
+ },
+ ["obj_ptr"]=812,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2148981,
+ },
+ {
+ ["cs_count"]=46711,
+ ["dyn_used"]=1655574,
+ ["elapsed_time"]=0.032051086425781,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=739094364,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="20957",
+ ["attribute_list"]="4798",
+ ["boundary"]="14",
+ ["dir"]="31",
+ ["disc"]="209",
+ ["glue"]="18479",
+ ["glue_spec"]="4736",
+ ["glyph"]="6429",
+ ["hlist"]="624",
+ ["if_stack"]="5",
+ ["kern"]="346",
+ ["late_lua"]="31",
+ ["local_par"]="137",
+ ["margin_kern"]="2",
+ ["math"]="22",
+ ["noad"]="1",
+ ["pdf_literal"]="121",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="190",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=816,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["str_ptr"]=2148982,
+ },
+ {
+ ["cs_count"]=46711,
+ ["dyn_used"]=1656470,
+ ["elapsed_time"]=0.028548955917358,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=739192330,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="20871",
+ ["attribute_list"]="4775",
+ ["boundary"]="14",
+ ["dir"]="27",
+ ["disc"]="204",
+ ["glue"]="18541",
+ ["glue_spec"]="4741",
+ ["glyph"]="6688",
+ ["hlist"]="598",
+ ["if_stack"]="4",
+ ["kern"]="319",
+ ["late_lua"]="27",
+ ["local_par"]="133",
+ ["margin_kern"]="2",
+ ["math"]="16",
+ ["noad"]="1",
+ ["pdf_literal"]="123",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="174",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=820,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2148983,
+ },
+ {
+ ["cs_count"]=46717,
+ ["dyn_used"]=1657876,
+ ["elapsed_time"]=0.048076868057251,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=739486098,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="22913",
+ ["attribute_list"]="5278",
+ ["boundary"]="14",
+ ["dir"]="51",
+ ["disc"]="160",
+ ["glue"]="18745",
+ ["glue_spec"]="4760",
+ ["glyph"]="5794",
+ ["hlist"]="1205",
+ ["if_stack"]="4",
+ ["kern"]="439",
+ ["late_lua"]="43",
+ ["local_par"]="134",
+ ["margin_kern"]="2",
+ ["math"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="249",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="174",
+ ["rule"]="103",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="177",
+ },
+ ["obj_ptr"]=824,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2148990,
+ },
+ {
+ ["cs_count"]=46717,
+ ["dyn_used"]=1659063,
+ ["elapsed_time"]=0.017530202865601,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=739767799,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="20831",
+ ["attribute_list"]="4766",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="70",
+ ["glue"]="18470",
+ ["glue_spec"]="4796",
+ ["glyph"]="5030",
+ ["hlist"]="582",
+ ["if_stack"]="4",
+ ["kern"]="159",
+ ["late_lua"]="50",
+ ["local_par"]="156",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="123",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="180",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=827,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2148991,
+ },
+ {
+ ["cs_count"]=46717,
+ ["dyn_used"]=1660254,
+ ["elapsed_time"]=0.024038791656494,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=739970678,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="20940",
+ ["attribute_list"]="4793",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="211",
+ ["glue"]="18743",
+ ["glue_spec"]="4816",
+ ["glyph"]="6691",
+ ["hlist"]="563",
+ ["if_stack"]="4",
+ ["kern"]="290",
+ ["late_lua"]="30",
+ ["local_par"]="136",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="143",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="172",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=830,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2148992,
+ },
+ {
+ ["cs_count"]=46717,
+ ["dyn_used"]=1661535,
+ ["elapsed_time"]=0.029048204421997,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=740283600,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="21720",
+ ["attribute_list"]="4986",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="149",
+ ["glue"]="18906",
+ ["glue_spec"]="4848",
+ ["glyph"]="6026",
+ ["hlist"]="748",
+ ["if_stack"]="4",
+ ["kern"]="289",
+ ["late_lua"]="40",
+ ["local_par"]="146",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="135",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="178",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="117",
+ },
+ ["obj_ptr"]=833,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2148993,
+ },
+ {
+ ["cs_count"]=46718,
+ ["dyn_used"]=1664361,
+ ["elapsed_time"]=0.035080909729004,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=741163037,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="21143",
+ ["attribute_list"]="4842",
+ ["boundary"]="23",
+ ["dir"]="21",
+ ["disc"]="108",
+ ["glue"]="18591",
+ ["glue_spec"]="4860",
+ ["glyph"]="5255",
+ ["hlist"]="554",
+ ["if_stack"]="14",
+ ["kern"]="259",
+ ["late_lua"]="20",
+ ["local_par"]="128",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="123",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="156",
+ ["rule"]="43",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="110",
+ },
+ ["obj_ptr"]=836,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2149019,
+ },
+ {
+ ["cs_count"]=46718,
+ ["dyn_used"]=1665557,
+ ["elapsed_time"]=0.03004789352417,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=741340317,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="21145",
+ ["attribute_list"]="4843",
+ ["boundary"]="18",
+ ["dir"]="22",
+ ["disc"]="220",
+ ["glue"]="18982",
+ ["glue_spec"]="4875",
+ ["glyph"]="6752",
+ ["hlist"]="570",
+ ["if_stack"]="4",
+ ["kern"]="358",
+ ["late_lua"]="25",
+ ["local_par"]="131",
+ ["margin_kern"]="2",
+ ["math"]="4",
+ ["noad"]="1",
+ ["pdf_literal"]="123",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="176",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="106",
+ },
+ ["obj_ptr"]=839,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2149020,
+ },
+ {
+ ["cs_count"]=46718,
+ ["dyn_used"]=1666298,
+ ["elapsed_time"]=0.027546167373657,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=741486287,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="21088",
+ ["attribute_list"]="4829",
+ ["boundary"]="14",
+ ["dir"]="23",
+ ["disc"]="226",
+ ["glue"]="19076",
+ ["glue_spec"]="4879",
+ ["glyph"]="7068",
+ ["hlist"]="566",
+ ["if_stack"]="4",
+ ["kern"]="331",
+ ["late_lua"]="21",
+ ["local_par"]="127",
+ ["margin_kern"]="2",
+ ["math"]="6",
+ ["noad"]="1",
+ ["pdf_literal"]="125",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="167",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=842,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2149021,
+ },
+ {
+ ["cs_count"]=46718,
+ ["dyn_used"]=1669936,
+ ["elapsed_time"]=0.034555912017822,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=741948852,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="22436",
+ ["attribute_list"]="5165",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="137",
+ ["glue"]="19215",
+ ["glue_spec"]="4941",
+ ["glyph"]="6078",
+ ["hlist"]="881",
+ ["if_stack"]="4",
+ ["kern"]="278",
+ ["late_lua"]="44",
+ ["local_par"]="149",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="161",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="188",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="126",
+ },
+ ["obj_ptr"]=845,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2149022,
+ },
+ {
+ ["cs_count"]=46721,
+ ["dyn_used"]=1670246,
+ ["elapsed_time"]=0.03656005859375,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=743736012,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="22285",
+ ["attribute_list"]="5195",
+ ["boundary"]="14",
+ ["dir"]="49",
+ ["disc"]="76",
+ ["glue"]="19123",
+ ["glue_spec"]="4972",
+ ["glyph"]="5977",
+ ["hlist"]="750",
+ ["if_stack"]="4",
+ ["kern"]="253",
+ ["late_lua"]="33",
+ ["local_par"]="145",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="215",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="178",
+ ["rule"]="103",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="116",
+ },
+ ["obj_ptr"]=848,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2149033,
+ },
+ {
+ ["cs_count"]=46723,
+ ["dyn_used"]=1671322,
+ ["elapsed_time"]=0.039064884185791,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=746101104,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="22459",
+ ["attribute_list"]="5353",
+ ["boundary"]="14",
+ ["dir"]="82",
+ ["disc"]="18",
+ ["glue"]="19022",
+ ["glue_spec"]="4995",
+ ["glyph"]="5558",
+ ["hlist"]="740",
+ ["if_stack"]="4",
+ ["kern"]="230",
+ ["late_lua"]="26",
+ ["local_par"]="146",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="330",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="174",
+ ["rule"]="207",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="111",
+ },
+ ["obj_ptr"]=852,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2149043,
+ },
+ {
+ ["cs_count"]=46723,
+ ["dyn_used"]=1672135,
+ ["elapsed_time"]=0.016525983810425,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=746263112,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="22520",
+ ["attribute_list"]="5324",
+ ["boundary"]="14",
+ ["dir"]="96",
+ ["disc"]="9",
+ ["glue"]="18971",
+ ["glue_spec"]="5009",
+ ["glyph"]="5058",
+ ["hlist"]="692",
+ ["if_stack"]="4",
+ ["kern"]="215",
+ ["late_lua"]="14",
+ ["local_par"]="136",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="284",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="163",
+ ["rule"]="177",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="110",
+ },
+ ["obj_ptr"]=856,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2149044,
+ },
+ {
+ ["cs_count"]=46723,
+ ["dyn_used"]=1673207,
+ ["elapsed_time"]=0.021047115325928,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=746528945,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="22582",
+ ["attribute_list"]="5272",
+ ["boundary"]="14",
+ ["dir"]="92",
+ ["disc"]="11",
+ ["glue"]="19015",
+ ["glue_spec"]="5028",
+ ["glyph"]="5384",
+ ["hlist"]="643",
+ ["if_stack"]="4",
+ ["kern"]="171",
+ ["late_lua"]="18",
+ ["local_par"]="139",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="200",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="167",
+ ["rule"]="107",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="111",
+ },
+ ["obj_ptr"]=859,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2149052,
+ },
+ {
+ ["cs_count"]=46723,
+ ["dyn_used"]=1674133,
+ ["elapsed_time"]=0.017529010772705,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=746704256,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="22897",
+ ["attribute_list"]="5399",
+ ["boundary"]="14",
+ ["dir"]="106",
+ ["disc"]="9",
+ ["glue"]="19020",
+ ["glue_spec"]="5044",
+ ["glyph"]="5232",
+ ["hlist"]="667",
+ ["if_stack"]="4",
+ ["kern"]="195",
+ ["late_lua"]="14",
+ ["local_par"]="138",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="259",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="167",
+ ["rule"]="147",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="111",
+ },
+ ["obj_ptr"]=862,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2149053,
+ },
+ {
+ ["cs_count"]=46723,
+ ["dyn_used"]=1675052,
+ ["elapsed_time"]=0.017041921615601,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=746930027,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="22544",
+ ["attribute_list"]="5234",
+ ["boundary"]="14",
+ ["dir"]="54",
+ ["disc"]="34",
+ ["glue"]="19102",
+ ["glue_spec"]="5057",
+ ["glyph"]="5772",
+ ["hlist"]="596",
+ ["if_stack"]="6",
+ ["kern"]="167",
+ ["late_lua"]="35",
+ ["local_par"]="148",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="151",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="167",
+ ["rule"]="67",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="107",
+ },
+ ["obj_ptr"]=865,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2149060,
+ },
+ {
+ ["cs_count"]=46723,
+ ["dyn_used"]=1676727,
+ ["elapsed_time"]=0.035557985305786,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=747412972,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="22965",
+ ["attribute_list"]="5298",
+ ["boundary"]="14",
+ ["dir"]="48",
+ ["disc"]="20",
+ ["glue"]="19076",
+ ["glue_spec"]="5089",
+ ["glyph"]="5652",
+ ["hlist"]="621",
+ ["if_stack"]="4",
+ ["kern"]="129",
+ ["late_lua"]="19",
+ ["local_par"]="147",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="129",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="171",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="122",
+ },
+ ["obj_ptr"]=868,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2149067,
+ },
+ {
+ ["cs_count"]=46723,
+ ["dyn_used"]=1678189,
+ ["elapsed_time"]=0.036059141159058,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=748879289,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="23222",
+ ["attribute_list"]="5373",
+ ["boundary"]="14",
+ ["dir"]="53",
+ ["disc"]="27",
+ ["glue"]="19205",
+ ["glue_spec"]="5115",
+ ["glyph"]="5662",
+ ["hlist"]="635",
+ ["if_stack"]="5",
+ ["kern"]="139",
+ ["late_lua"]="25",
+ ["local_par"]="149",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="129",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="171",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="118",
+ },
+ ["obj_ptr"]=871,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2149075,
+ },
+ {
+ ["cs_count"]=46723,
+ ["dyn_used"]=1679153,
+ ["elapsed_time"]=0.013021945953369,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=749006169,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="23582",
+ ["attribute_list"]="5696",
+ ["boundary"]="14",
+ ["dir"]="63",
+ ["disc"]="10",
+ ["glue"]="19242",
+ ["glue_spec"]="5126",
+ ["glyph"]="5164",
+ ["hlist"]="750",
+ ["if_stack"]="4",
+ ["kern"]="255",
+ ["late_lua"]="14",
+ ["local_par"]="128",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="358",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="152",
+ ["rule"]="251",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="108",
+ },
+ ["obj_ptr"]=874,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2149076,
+ },
+ {
+ ["cs_count"]=46723,
+ ["dyn_used"]=1679945,
+ ["elapsed_time"]=0.017027854919434,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=749206229,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="24037",
+ ["attribute_list"]="5815",
+ ["boundary"]="14",
+ ["dir"]="83",
+ ["disc"]="9",
+ ["glue"]="19319",
+ ["glue_spec"]="5136",
+ ["glyph"]="5253",
+ ["hlist"]="767",
+ ["if_stack"]="4",
+ ["kern"]="249",
+ ["late_lua"]="14",
+ ["local_par"]="130",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="345",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="158",
+ ["rule"]="241",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="108",
+ },
+ ["obj_ptr"]=877,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2149077,
+ },
+ {
+ ["cs_count"]=46723,
+ ["dyn_used"]=1680610,
+ ["elapsed_time"]=0.016026020050049,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=749333177,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="24072",
+ ["attribute_list"]="5823",
+ ["boundary"]="14",
+ ["dir"]="62",
+ ["disc"]="22",
+ ["glue"]="19296",
+ ["glue_spec"]="5131",
+ ["glyph"]="5066",
+ ["hlist"]="740",
+ ["if_stack"]="4",
+ ["kern"]="263",
+ ["late_lua"]="17",
+ ["local_par"]="130",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="345",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="154",
+ ["rule"]="241",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="107",
+ },
+ ["obj_ptr"]=880,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2149078,
+ },
+ {
+ ["cs_count"]=46723,
+ ["dyn_used"]=1681387,
+ ["elapsed_time"]=0.012020111083984,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=749543487,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="23263",
+ ["attribute_list"]="5419",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="16",
+ ["glue"]="19004",
+ ["glue_spec"]="5129",
+ ["glyph"]="4317",
+ ["hlist"]="506",
+ ["if_stack"]="14",
+ ["kern"]="139",
+ ["late_lua"]="17",
+ ["local_par"]="123",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="121",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="137",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=883,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2149084,
+ },
+ {
+ ["cs_count"]=46723,
+ ["dyn_used"]=1682130,
+ ["elapsed_time"]=0.0080130100250244,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=749612507,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="23278",
+ ["attribute_list"]="5423",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="9",
+ ["glue"]="18987",
+ ["glue_spec"]="5131",
+ ["glyph"]="4190",
+ ["hlist"]="502",
+ ["if_stack"]="15",
+ ["kern"]="129",
+ ["late_lua"]="15",
+ ["local_par"]="121",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="119",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="135",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=887,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2149085,
+ },
+ {
+ ["cs_count"]=46723,
+ ["dyn_used"]=1683717,
+ ["elapsed_time"]=0.032052993774414,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=749832276,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="23660",
+ ["attribute_list"]="5517",
+ ["boundary"]="18",
+ ["dir"]="28",
+ ["disc"]="220",
+ ["glue"]="19618",
+ ["glue_spec"]="5152",
+ ["glyph"]="6739",
+ ["hlist"]="612",
+ ["if_stack"]="5",
+ ["kern"]="358",
+ ["late_lua"]="30",
+ ["local_par"]="136",
+ ["margin_kern"]="2",
+ ["math"]="16",
+ ["noad"]="1",
+ ["pdf_literal"]="131",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="194",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="106",
+ },
+ ["obj_ptr"]=890,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2149086,
+ },
+ {
+ ["cs_count"]=46723,
+ ["dyn_used"]=1684623,
+ ["elapsed_time"]=0.025541067123413,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=750067803,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="23675",
+ ["attribute_list"]="5520",
+ ["boundary"]="14",
+ ["dir"]="24",
+ ["disc"]="138",
+ ["glue"]="19631",
+ ["glue_spec"]="5166",
+ ["glyph"]="6447",
+ ["hlist"]="593",
+ ["if_stack"]="4",
+ ["kern"]="271",
+ ["late_lua"]="36",
+ ["local_par"]="142",
+ ["margin_kern"]="2",
+ ["math"]="8",
+ ["noad"]="1",
+ ["pdf_literal"]="135",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="177",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=893,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2149087,
+ },
+ {
+ ["cs_count"]=46723,
+ ["dyn_used"]=1686337,
+ ["elapsed_time"]=0.03255295753479,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=750287819,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="24314",
+ ["attribute_list"]="5679",
+ ["boundary"]="14",
+ ["dir"]="23",
+ ["disc"]="212",
+ ["glue"]="19848",
+ ["glue_spec"]="5202",
+ ["glyph"]="6763",
+ ["hlist"]="711",
+ ["if_stack"]="4",
+ ["kern"]="363",
+ ["late_lua"]="31",
+ ["local_par"]="137",
+ ["margin_kern"]="2",
+ ["math"]="6",
+ ["noad"]="1",
+ ["pdf_literal"]="133",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="190",
+ ["rule"]="43",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="113",
+ },
+ ["obj_ptr"]=896,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2149088,
+ },
+ {
+ ["cs_count"]=46723,
+ ["dyn_used"]=1686698,
+ ["elapsed_time"]=0.037060976028442,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=750505065,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="24484",
+ ["attribute_list"]="5722",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="300",
+ ["glue"]="20033",
+ ["glue_spec"]="5206",
+ ["glyph"]="7525",
+ ["hlist"]="754",
+ ["if_stack"]="4",
+ ["kern"]="437",
+ ["late_lua"]="31",
+ ["local_par"]="137",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="119",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="198",
+ ["rule"]="43",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="116",
+ },
+ ["obj_ptr"]=899,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2149089,
+ },
+ {
+ ["cs_count"]=46723,
+ ["dyn_used"]=1687703,
+ ["elapsed_time"]=0.017529010772705,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=750769722,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="23697",
+ ["attribute_list"]="5525",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="76",
+ ["glue"]="19775",
+ ["glue_spec"]="5238",
+ ["glyph"]="5757",
+ ["hlist"]="568",
+ ["if_stack"]="4",
+ ["kern"]="200",
+ ["late_lua"]="42",
+ ["local_par"]="148",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="127",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="166",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=902,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2149090,
+ },
+ {
+ ["cs_count"]=46723,
+ ["dyn_used"]=1688625,
+ ["elapsed_time"]=0.016026020050049,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=751138833,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="23757",
+ ["attribute_list"]="5539",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="29",
+ ["glue"]="19770",
+ ["glue_spec"]="5271",
+ ["glyph"]="5339",
+ ["hlist"]="578",
+ ["if_stack"]="4",
+ ["kern"]="152",
+ ["late_lua"]="49",
+ ["local_par"]="155",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="127",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="172",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=905,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2149091,
+ },
+ {
+ ["cs_count"]=46767,
+ ["dyn_used"]=1690724,
+ ["elapsed_time"]=0.026042938232422,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=751933457,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="23779",
+ ["attribute_list"]="5545",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="20",
+ ["glue"]="19895",
+ ["glue_spec"]="5298",
+ ["glyph"]="5098",
+ ["hlist"]="568",
+ ["if_stack"]="14",
+ ["kern"]="136",
+ ["late_lua"]="47",
+ ["local_par"]="153",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="121",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="168",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=908,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2149153,
+ },
+ {
+ ["cs_count"]=46767,
+ ["dyn_used"]=1691468,
+ ["elapsed_time"]=0.0090141296386719,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=752002482,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="23750",
+ ["attribute_list"]="5539",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="9",
+ ["glue"]="19581",
+ ["glue_spec"]="5300",
+ ["glyph"]="4294",
+ ["hlist"]="502",
+ ["if_stack"]="15",
+ ["kern"]="129",
+ ["late_lua"]="15",
+ ["local_par"]="121",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="119",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="135",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=911,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2149154,
+ },
+ {
+ ["cs_count"]=46767,
+ ["dyn_used"]=1693750,
+ ["elapsed_time"]=0.041568994522095,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=752262532,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="24545",
+ ["attribute_list"]="5733",
+ ["boundary"]="35",
+ ["dir"]="25",
+ ["disc"]="253",
+ ["glue"]="20339",
+ ["glue_spec"]="5324",
+ ["glyph"]="7336",
+ ["hlist"]="652",
+ ["if_stack"]="4",
+ ["kern"]="344",
+ ["late_lua"]="30",
+ ["local_par"]="138",
+ ["margin_kern"]="2",
+ ["math"]="8",
+ ["noad"]="1",
+ ["pdf_literal"]="131",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="216",
+ ["rule"]="43",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="113",
+ },
+ ["obj_ptr"]=914,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2149155,
+ },
+ {
+ ["cs_count"]=46767,
+ ["dyn_used"]=1695422,
+ ["elapsed_time"]=0.02704381942749,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=752478087,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="24336",
+ ["attribute_list"]="5684",
+ ["boundary"]="18",
+ ["dir"]="20",
+ ["disc"]="212",
+ ["glue"]="20326",
+ ["glue_spec"]="5343",
+ ["glyph"]="7165",
+ ["hlist"]="620",
+ ["if_stack"]="4",
+ ["kern"]="320",
+ ["late_lua"]="25",
+ ["local_par"]="128",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="123",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="170",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="106",
+ },
+ ["obj_ptr"]=918,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2149156,
+ },
+ {
+ ["cs_count"]=46770,
+ ["dyn_used"]=1697058,
+ ["elapsed_time"]=0.15725708007813,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=773137226,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="24333",
+ ["attribute_list"]="5681",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="34",
+ ["glue"]="20096",
+ ["glue_spec"]="5357",
+ ["glyph"]="5457",
+ ["hlist"]="619",
+ ["if_stack"]="6",
+ ["kern"]="169",
+ ["late_lua"]="39",
+ ["local_par"]="142",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="137",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="160",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="113",
+ },
+ ["obj_ptr"]=921,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2149184,
+ },
+ {
+ ["cs_count"]=49235,
+ ["dyn_used"]=1783374,
+ ["elapsed_time"]=0.24351906776428,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=799746262,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="25103",
+ ["attribute_list"]="5781",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="63",
+ ["glue"]="20183",
+ ["glue_spec"]="5374",
+ ["glyph"]="5530",
+ ["hlist"]="645",
+ ["if_stack"]="4",
+ ["kern"]="206",
+ ["late_lua"]="37",
+ ["local_par"]="143",
+ ["margin_kern"]="2",
+ ["math"]="20",
+ ["noad"]="1",
+ ["pdf_literal"]="135",
+ ["pdf_restore"]="13",
+ ["pdf_save"]="13",
+ ["pdf_setmatrix"]="21",
+ ["penalty"]="160",
+ ["rule"]="44",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="134",
+ },
+ ["obj_ptr"]=927,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2151706,
+ },
+ {
+ ["cs_count"]=49235,
+ ["dyn_used"]=1784517,
+ ["elapsed_time"]=0.02103590965271,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=800003535,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="25067",
+ ["attribute_list"]="5773",
+ ["boundary"]="18",
+ ["dir"]="20",
+ ["disc"]="70",
+ ["glue"]="20354",
+ ["glue_spec"]="5401",
+ ["glyph"]="6131",
+ ["hlist"]="647",
+ ["if_stack"]="4",
+ ["kern"]="215",
+ ["late_lua"]="42",
+ ["local_par"]="148",
+ ["margin_kern"]="2",
+ ["math"]="20",
+ ["noad"]="1",
+ ["pdf_literal"]="138",
+ ["pdf_restore"]="13",
+ ["pdf_save"]="13",
+ ["pdf_setmatrix"]="21",
+ ["penalty"]="175",
+ ["rule"]="44",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="127",
+ },
+ ["obj_ptr"]=931,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2151707,
+ },
+ {
+ ["cs_count"]=49235,
+ ["dyn_used"]=1786605,
+ ["elapsed_time"]=0.033052921295166,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=800241599,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="24596",
+ ["attribute_list"]="5746",
+ ["boundary"]="27",
+ ["dir"]="23",
+ ["disc"]="164",
+ ["glue"]="20542",
+ ["glue_spec"]="5428",
+ ["glyph"]="6759",
+ ["hlist"]="615",
+ ["if_stack"]="5",
+ ["kern"]="282",
+ ["late_lua"]="30",
+ ["local_par"]="138",
+ ["margin_kern"]="2",
+ ["math"]="4",
+ ["noad"]="1",
+ ["pdf_literal"]="126",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="204",
+ ["rule"]="43",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="111",
+ },
+ ["obj_ptr"]=936,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2151708,
+ },
+ {
+ ["cs_count"]=49239,
+ ["dyn_used"]=1787932,
+ ["elapsed_time"]=0.045575141906738,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=802816968,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="24982",
+ ["attribute_list"]="5853",
+ ["boundary"]="18",
+ ["dir"]="23",
+ ["disc"]="133",
+ ["glue"]="20540",
+ ["glue_spec"]="5442",
+ ["glyph"]="6353",
+ ["hlist"]="646",
+ ["if_stack"]="4",
+ ["kern"]="264",
+ ["late_lua"]="33",
+ ["local_par"]="139",
+ ["margin_kern"]="2",
+ ["math"]="8",
+ ["noad"]="1",
+ ["pdf_literal"]="213",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="200",
+ ["rule"]="88",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="109",
+ },
+ ["obj_ptr"]=939,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2151726,
+ },
+ {
+ ["cs_count"]=49246,
+ ["dyn_used"]=1802677,
+ ["elapsed_time"]=0.084638833999634,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=810876168,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="26352",
+ ["attribute_list"]="5966",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="54",
+ ["glue"]="20417",
+ ["glue_spec"]="5479",
+ ["glyph"]="5871",
+ ["hlist"]="586",
+ ["if_stack"]="4",
+ ["kern"]="223",
+ ["late_lua"]="48",
+ ["local_par"]="154",
+ ["margin_kern"]="2",
+ ["math"]="10",
+ ["noad"]="1",
+ ["pdf_literal"]="171",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="175",
+ ["rule"]="61",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=942,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2151747,
+ },
+ {
+ ["cs_count"]=51156,
+ ["dyn_used"]=1855943,
+ ["elapsed_time"]=0.099162101745605,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=818695804,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="26518",
+ ["attribute_list"]="5985",
+ ["boundary"]="18",
+ ["dir"]="20",
+ ["disc"]="77",
+ ["glue"]="20745",
+ ["glue_spec"]="5507",
+ ["glyph"]="6066",
+ ["hlist"]="583",
+ ["if_stack"]="4",
+ ["kern"]="248",
+ ["late_lua"]="45",
+ ["local_par"]="151",
+ ["margin_kern"]="2",
+ ["math"]="12",
+ ["noad"]="1",
+ ["pdf_literal"]="140",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="180",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="106",
+ },
+ ["obj_ptr"]=945,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2153671,
+ },
+ {
+ ["cs_count"]=51156,
+ ["dyn_used"]=1857800,
+ ["elapsed_time"]=0.029547929763794,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=818964498,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="24902",
+ ["attribute_list"]="5807",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="169",
+ ["glue"]="20881",
+ ["glue_spec"]="5523",
+ ["glyph"]="6596",
+ ["hlist"]="570",
+ ["if_stack"]="4",
+ ["kern"]="272",
+ ["late_lua"]="32",
+ ["local_par"]="138",
+ ["margin_kern"]="2",
+ ["math"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="148",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="166",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=948,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2153679,
+ },
+ {
+ ["cs_count"]=51156,
+ ["dyn_used"]=1858634,
+ ["elapsed_time"]=0.023115158081055,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=819169494,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="25197",
+ ["attribute_list"]="5875",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="95",
+ ["glue"]="20784",
+ ["glue_spec"]="5542",
+ ["glyph"]="5950",
+ ["hlist"]="593",
+ ["if_stack"]="4",
+ ["kern"]="207",
+ ["late_lua"]="39",
+ ["local_par"]="145",
+ ["margin_kern"]="2",
+ ["math"]="4",
+ ["noad"]="1",
+ ["pdf_literal"]="182",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="177",
+ ["rule"]="78",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=951,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2153692,
+ },
+ {
+ ["cs_count"]=51156,
+ ["dyn_used"]=1860561,
+ ["elapsed_time"]=0.020514011383057,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=819413526,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="25110",
+ ["attribute_list"]="5889",
+ ["boundary"]="18",
+ ["dir"]="20",
+ ["disc"]="101",
+ ["glue"]="20924",
+ ["glue_spec"]="5576",
+ ["glyph"]="5844",
+ ["hlist"]="613",
+ ["if_stack"]="4",
+ ["kern"]="198",
+ ["late_lua"]="44",
+ ["local_par"]="150",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="193",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="183",
+ ["rule"]="83",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="106",
+ },
+ ["obj_ptr"]=955,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2153695,
+ },
+ {
+ ["cs_count"]=51156,
+ ["dyn_used"]=1861278,
+ ["elapsed_time"]=0.017026901245117,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=819663304,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="25294",
+ ["attribute_list"]="5954",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="46",
+ ["glue"]="20970",
+ ["glue_spec"]="5600",
+ ["glyph"]="5333",
+ ["hlist"]="632",
+ ["if_stack"]="4",
+ ["kern"]="187",
+ ["late_lua"]="41",
+ ["local_par"]="147",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="226",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="177",
+ ["rule"]="116",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=958,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2153697,
+ },
+ {
+ ["cs_count"]=51156,
+ ["dyn_used"]=1862994,
+ ["elapsed_time"]=0.026544094085693,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=819872854,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="25208",
+ ["attribute_list"]="5866",
+ ["boundary"]="18",
+ ["dir"]="20",
+ ["disc"]="158",
+ ["glue"]="21205",
+ ["glue_spec"]="5625",
+ ["glyph"]="6530",
+ ["hlist"]="579",
+ ["if_stack"]="4",
+ ["kern"]="264",
+ ["late_lua"]="35",
+ ["local_par"]="141",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="128",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="178",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="106",
+ },
+ ["obj_ptr"]=961,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2153699,
+ },
+ {
+ ["cs_count"]=51163,
+ ["dyn_used"]=1865029,
+ ["elapsed_time"]=0.09315299987793,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=827507183,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="28785",
+ ["attribute_list"]="6640",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="65",
+ ["glue"]="21986",
+ ["glue_spec"]="5629",
+ ["glyph"]="6334",
+ ["hlist"]="1705",
+ ["if_stack"]="4",
+ ["kern"]="276",
+ ["late_lua"]="28",
+ ["local_par"]="134",
+ ["margin_kern"]="2",
+ ["math"]="112",
+ ["noad"]="1",
+ ["pdf_literal"]="483",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="174",
+ ["rule"]="278",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="327",
+ },
+ ["obj_ptr"]=964,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2153715,
+ },
+ {
+ ["cs_count"]=51166,
+ ["dyn_used"]=1866484,
+ ["elapsed_time"]=0.062112808227539,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=831424793,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="27101",
+ ["attribute_list"]="6191",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="89",
+ ["glue"]="21668",
+ ["glue_spec"]="5649",
+ ["glyph"]="6530",
+ ["hlist"]="1149",
+ ["if_stack"]="4",
+ ["kern"]="248",
+ ["late_lua"]="34",
+ ["local_par"]="140",
+ ["margin_kern"]="2",
+ ["math"]="68",
+ ["noad"]="1",
+ ["pdf_literal"]="223",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="159",
+ ["rule"]="95",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="201",
+ },
+ ["obj_ptr"]=967,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2153733,
+ },
+ {
+ ["cs_count"]=51170,
+ ["dyn_used"]=1876194,
+ ["elapsed_time"]=0.047075033187866,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=832080347,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="26437",
+ ["attribute_list"]="6150",
+ ["boundary"]="31",
+ ["dir"]="24",
+ ["disc"]="197",
+ ["glue"]="21561",
+ ["glue_spec"]="5675",
+ ["glyph"]="7079",
+ ["hlist"]="758",
+ ["if_stack"]="4",
+ ["ins"]="1",
+ ["kern"]="334",
+ ["late_lua"]="30",
+ ["local_par"]="141",
+ ["margin_kern"]="2",
+ ["math"]="8",
+ ["noad"]="1",
+ ["pdf_literal"]="198",
+ ["pdf_restore"]="42",
+ ["pdf_save"]="42",
+ ["pdf_setmatrix"]="64",
+ ["penalty"]="202",
+ ["rule"]="96",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="132",
+ },
+ ["obj_ptr"]=970,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2153753,
+ },
+ {
+ ["cs_count"]=52366,
+ ["dyn_used"]=1914867,
+ ["elapsed_time"]=0.15375304222107,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=846654197,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="28446",
+ ["attribute_list"]="6366",
+ ["boundary"]="36",
+ ["dir"]="45",
+ ["disc"]="107",
+ ["glue"]="21379",
+ ["glue_spec"]="5714",
+ ["glyph"]="6503",
+ ["hlist"]="812",
+ ["if_stack"]="4",
+ ["kern"]="345",
+ ["late_lua"]="36",
+ ["local_par"]="159",
+ ["margin_kern"]="2",
+ ["math"]="24",
+ ["noad"]="1",
+ ["pdf_literal"]="125",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="202",
+ ["rule"]="58",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="164",
+ },
+ ["obj_ptr"]=973,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2154988,
+ },
+ {
+ ["cs_count"]=52382,
+ ["dyn_used"]=1916864,
+ ["elapsed_time"]=0.075160980224609,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=854231167,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="26863",
+ ["attribute_list"]="6282",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="41",
+ ["glue"]="21195",
+ ["glue_spec"]="5718",
+ ["glyph"]="5299",
+ ["hlist"]="655",
+ ["if_stack"]="14",
+ ["kern"]="257",
+ ["late_lua"]="23",
+ ["local_par"]="129",
+ ["margin_kern"]="2",
+ ["math"]="40",
+ ["noad"]="1",
+ ["pdf_literal"]="309",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="145",
+ ["rule"]="151",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="126",
+ },
+ ["obj_ptr"]=978,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2155017,
+ },
+ {
+ ["cs_count"]=52382,
+ ["dyn_used"]=1917608,
+ ["elapsed_time"]=0.0085141658782959,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=854299604,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="25974",
+ ["attribute_list"]="6006",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="9",
+ ["glue"]="20985",
+ ["glue_spec"]="5720",
+ ["glyph"]="4634",
+ ["hlist"]="502",
+ ["if_stack"]="15",
+ ["kern"]="127",
+ ["late_lua"]="15",
+ ["local_par"]="121",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="123",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="135",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=981,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["str_ptr"]=2155018,
+ },
+ {
+ ["cs_count"]=52383,
+ ["dyn_used"]=1919841,
+ ["elapsed_time"]=0.032051801681519,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=854922403,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="26422",
+ ["attribute_list"]="6114",
+ ["boundary"]="27",
+ ["dir"]="21",
+ ["disc"]="111",
+ ["glue"]="21498",
+ ["glue_spec"]="5755",
+ ["glyph"]="6431",
+ ["hlist"]="599",
+ ["if_stack"]="6",
+ ["kern"]="240",
+ ["late_lua"]="37",
+ ["local_par"]="145",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="141",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="185",
+ ["rule"]="43",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="111",
+ },
+ ["obj_ptr"]=985,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["str_ptr"]=2155027,
+ },
+ {
+ ["cs_count"]=52389,
+ ["dyn_used"]=1921393,
+ ["elapsed_time"]=0.021034002304077,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=855188348,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="26267",
+ ["attribute_list"]="6076",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="33",
+ ["glue"]="21425",
+ ["glue_spec"]="5785",
+ ["glyph"]="5794",
+ ["hlist"]="581",
+ ["if_stack"]="4",
+ ["kern"]="167",
+ ["late_lua"]="47",
+ ["local_par"]="153",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="135",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="189",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=989,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["str_ptr"]=2155064,
+ },
+ {
+ ["cs_count"]=52389,
+ ["dyn_used"]=1922536,
+ ["elapsed_time"]=0.017529010772705,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=855476400,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="26319",
+ ["attribute_list"]="6090",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="30",
+ ["glue"]="21448",
+ ["glue_spec"]="5797",
+ ["glyph"]="5521",
+ ["hlist"]="547",
+ ["if_stack"]="14",
+ ["kern"]="158",
+ ["late_lua"]="33",
+ ["local_par"]="139",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="139",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="166",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=992,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["str_ptr"]=2155082,
+ },
+ {
+ ["cs_count"]=52389,
+ ["dyn_used"]=1923281,
+ ["elapsed_time"]=0.0085141658782959,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=855544842,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="26230",
+ ["attribute_list"]="6069",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="8",
+ ["glue"]="21254",
+ ["glue_spec"]="5799",
+ ["glyph"]="4678",
+ ["hlist"]="502",
+ ["if_stack"]="15",
+ ["kern"]="127",
+ ["late_lua"]="15",
+ ["local_par"]="121",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="123",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="135",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=995,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["str_ptr"]=2155083,
+ },
+ {
+ ["cs_count"]=52389,
+ ["dyn_used"]=1925409,
+ ["elapsed_time"]=0.033053874969482,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=855824019,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="26938",
+ ["attribute_list"]="6243",
+ ["boundary"]="26",
+ ["dir"]="20",
+ ["disc"]="157",
+ ["glue"]="21829",
+ ["glue_spec"]="5818",
+ ["glyph"]="6963",
+ ["hlist"]="598",
+ ["if_stack"]="4",
+ ["kern"]="296",
+ ["late_lua"]="32",
+ ["local_par"]="138",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="145",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="23",
+ ["penalty"]="186",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="108",
+ },
+ ["obj_ptr"]=998,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["str_ptr"]=2155084,
+ },
+ {
+ ["cs_count"]=52389,
+ ["dyn_used"]=1926500,
+ ["elapsed_time"]=0.021034955978394,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=856069322,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="26638",
+ ["attribute_list"]="6168",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="72",
+ ["glue"]="21776",
+ ["glue_spec"]="5844",
+ ["glyph"]="6522",
+ ["hlist"]="574",
+ ["if_stack"]="4",
+ ["kern"]="221",
+ ["late_lua"]="40",
+ ["local_par"]="146",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="135",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="21",
+ ["penalty"]="168",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=1001,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["str_ptr"]=2155085,
+ },
+ {
+ ["cs_count"]=52389,
+ ["dyn_used"]=1928309,
+ ["elapsed_time"]=0.033555030822754,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=856312493,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="27150",
+ ["attribute_list"]="6295",
+ ["boundary"]="18",
+ ["dir"]="29",
+ ["disc"]="149",
+ ["glue"]="22070",
+ ["glue_spec"]="5860",
+ ["glyph"]="7133",
+ ["hlist"]="620",
+ ["if_stack"]="4",
+ ["kern"]="322",
+ ["late_lua"]="29",
+ ["local_par"]="135",
+ ["margin_kern"]="2",
+ ["math"]="18",
+ ["noad"]="1",
+ ["pdf_literal"]="145",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="191",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="106",
+ },
+ ["obj_ptr"]=1004,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["str_ptr"]=2155086,
+ },
+ {
+ ["cs_count"]=52389,
+ ["dyn_used"]=1929714,
+ ["elapsed_time"]=0.025541067123413,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=856546696,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="26882",
+ ["attribute_list"]="6228",
+ ["boundary"]="18",
+ ["dir"]="24",
+ ["disc"]="119",
+ ["glue"]="21992",
+ ["glue_spec"]="5883",
+ ["glyph"]="6644",
+ ["hlist"]="595",
+ ["if_stack"]="4",
+ ["kern"]="251",
+ ["late_lua"]="36",
+ ["local_par"]="142",
+ ["margin_kern"]="2",
+ ["math"]="8",
+ ["noad"]="1",
+ ["pdf_literal"]="149",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="184",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="106",
+ },
+ ["obj_ptr"]=1007,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["str_ptr"]=2155087,
+ },
+ {
+ ["cs_count"]=52389,
+ ["dyn_used"]=1930972,
+ ["elapsed_time"]=0.020534038543701,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=856895230,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="26666",
+ ["attribute_list"]="6174",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="51",
+ ["glue"]="21868",
+ ["glue_spec"]="5898",
+ ["glyph"]="5648",
+ ["hlist"]="547",
+ ["if_stack"]="14",
+ ["kern"]="175",
+ ["late_lua"]="36",
+ ["local_par"]="142",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="133",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="157",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=1010,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["str_ptr"]=2155093,
+ },
+ {
+ ["cs_count"]=52389,
+ ["dyn_used"]=1931717,
+ ["elapsed_time"]=0.0080130100250244,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=856963672,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="26580",
+ ["attribute_list"]="6155",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="8",
+ ["glue"]="21594",
+ ["glue_spec"]="5900",
+ ["glyph"]="4751",
+ ["hlist"]="502",
+ ["if_stack"]="15",
+ ["kern"]="127",
+ ["late_lua"]="15",
+ ["local_par"]="121",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="123",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="135",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=1013,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["str_ptr"]=2155094,
+ },
+ {
+ ["cs_count"]=52389,
+ ["dyn_used"]=1933747,
+ ["elapsed_time"]=0.036559820175171,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=857209444,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="27226",
+ ["attribute_list"]="6314",
+ ["boundary"]="34",
+ ["dir"]="20",
+ ["disc"]="196",
+ ["glue"]="22241",
+ ["glue_spec"]="5917",
+ ["glyph"]="7407",
+ ["hlist"]="613",
+ ["if_stack"]="4",
+ ["kern"]="358",
+ ["late_lua"]="30",
+ ["local_par"]="136",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="133",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="201",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="110",
+ },
+ ["obj_ptr"]=1016,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["str_ptr"]=2155095,
+ },
+ {
+ ["cs_count"]=52389,
+ ["dyn_used"]=1935075,
+ ["elapsed_time"]=0.029549121856689,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=857393158,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="27146",
+ ["attribute_list"]="6294",
+ ["boundary"]="30",
+ ["dir"]="20",
+ ["disc"]="198",
+ ["glue"]="22187",
+ ["glue_spec"]="5933",
+ ["glyph"]="7097",
+ ["hlist"]="598",
+ ["if_stack"]="4",
+ ["kern"]="319",
+ ["late_lua"]="32",
+ ["local_par"]="138",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="131",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="203",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="109",
+ },
+ ["obj_ptr"]=1020,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["str_ptr"]=2155096,
+ },
+ {
+ ["cs_count"]=52389,
+ ["dyn_used"]=1936557,
+ ["elapsed_time"]=0.030049085617065,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=857579466,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="27117",
+ ["attribute_list"]="6286",
+ ["boundary"]="34",
+ ["dir"]="20",
+ ["disc"]="189",
+ ["glue"]="22176",
+ ["glue_spec"]="5949",
+ ["glyph"]="6951",
+ ["hlist"]="600",
+ ["if_stack"]="4",
+ ["kern"]="308",
+ ["late_lua"]="32",
+ ["local_par"]="138",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="131",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="210",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="110",
+ },
+ ["obj_ptr"]=1023,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["str_ptr"]=2155097,
+ },
+ {
+ ["cs_count"]=52389,
+ ["dyn_used"]=1938127,
+ ["elapsed_time"]=0.030048847198486,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=857778193,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="27206",
+ ["attribute_list"]="6308",
+ ["boundary"]="34",
+ ["dir"]="20",
+ ["disc"]="176",
+ ["glue"]="22181",
+ ["glue_spec"]="5968",
+ ["glyph"]="6773",
+ ["hlist"]="599",
+ ["if_stack"]="4",
+ ["kern"]="326",
+ ["late_lua"]="35",
+ ["local_par"]="141",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="133",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="207",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="110",
+ },
+ ["obj_ptr"]=1026,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["str_ptr"]=2155098,
+ },
+ {
+ ["cs_count"]=52389,
+ ["dyn_used"]=1939842,
+ ["elapsed_time"]=0.029047966003418,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=857974180,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="27293",
+ ["attribute_list"]="6327",
+ ["boundary"]="38",
+ ["dir"]="20",
+ ["disc"]="166",
+ ["glue"]="22201",
+ ["glue_spec"]="5987",
+ ["glyph"]="6686",
+ ["hlist"]="604",
+ ["if_stack"]="4",
+ ["kern"]="283",
+ ["late_lua"]="36",
+ ["local_par"]="142",
+ ["margin_kern"]="2",
+ ["math"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="135",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="210",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="111",
+ },
+ ["obj_ptr"]=1029,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["str_ptr"]=2155099,
+ },
+ {
+ ["cs_count"]=52389,
+ ["dyn_used"]=1941570,
+ ["elapsed_time"]=0.030049085617065,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=858183874,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="27463",
+ ["attribute_list"]="6373",
+ ["boundary"]="22",
+ ["dir"]="29",
+ ["disc"]="183",
+ ["glue"]="22307",
+ ["glue_spec"]="6010",
+ ["glyph"]="6952",
+ ["hlist"]="629",
+ ["if_stack"]="5",
+ ["kern"]="329",
+ ["late_lua"]="33",
+ ["local_par"]="139",
+ ["margin_kern"]="2",
+ ["math"]="18",
+ ["noad"]="1",
+ ["pdf_literal"]="137",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="21",
+ ["penalty"]="197",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="107",
+ },
+ ["obj_ptr"]=1032,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["str_ptr"]=2155100,
+ },
+ {
+ ["cs_count"]=52389,
+ ["dyn_used"]=1942887,
+ ["elapsed_time"]=0.03255295753479,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=858368957,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="27397",
+ ["attribute_list"]="6356",
+ ["boundary"]="26",
+ ["dir"]="24",
+ ["disc"]="203",
+ ["glue"]="22401",
+ ["glue_spec"]="6021",
+ ["glyph"]="7284",
+ ["hlist"]="607",
+ ["if_stack"]="4",
+ ["kern"]="326",
+ ["late_lua"]="32",
+ ["local_par"]="138",
+ ["margin_kern"]="2",
+ ["math"]="8",
+ ["noad"]="1",
+ ["pdf_literal"]="135",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="199",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="108",
+ },
+ ["obj_ptr"]=1035,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["str_ptr"]=2155101,
+ },
+ {
+ ["cs_count"]=52389,
+ ["dyn_used"]=1943733,
+ ["elapsed_time"]=0.014523983001709,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=858614449,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="27178",
+ ["attribute_list"]="6302",
+ ["boundary"]="18",
+ ["dir"]="20",
+ ["disc"]="67",
+ ["glue"]="21988",
+ ["glue_spec"]="6023",
+ ["glyph"]="5529",
+ ["hlist"]="534",
+ ["if_stack"]="14",
+ ["kern"]="204",
+ ["late_lua"]="18",
+ ["local_par"]="124",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="125",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="156",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="106",
+ },
+ ["obj_ptr"]=1038,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["str_ptr"]=2155107,
+ },
+ {
+ ["cs_count"]=52389,
+ ["dyn_used"]=1945296,
+ ["elapsed_time"]=0.03255295753479,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=858824425,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="27560",
+ ["attribute_list"]="6395",
+ ["boundary"]="18",
+ ["dir"]="27",
+ ["disc"]="173",
+ ["glue"]="22490",
+ ["glue_spec"]="6037",
+ ["glyph"]="7279",
+ ["hlist"]="605",
+ ["if_stack"]="4",
+ ["kern"]="369",
+ ["late_lua"]="27",
+ ["local_par"]="133",
+ ["margin_kern"]="2",
+ ["math"]="14",
+ ["noad"]="1",
+ ["pdf_literal"]="139",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="190",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="106",
+ },
+ ["obj_ptr"]=1041,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["str_ptr"]=2155108,
+ },
+ {
+ ["cs_count"]=52389,
+ ["dyn_used"]=1946174,
+ ["elapsed_time"]=0.028046131134033,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=859341605,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="27302",
+ ["attribute_list"]="6332",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="142",
+ ["glue"]="22804",
+ ["glue_spec"]="6065",
+ ["glyph"]="7520",
+ ["hlist"]="586",
+ ["if_stack"]="4",
+ ["kern"]="276",
+ ["late_lua"]="42",
+ ["local_par"]="148",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="125",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="180",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=1044,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["str_ptr"]=2155109,
+ },
+ {
+ ["cs_count"]=52389,
+ ["dyn_used"]=1947459,
+ ["elapsed_time"]=0.026042938232422,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=860042399,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="27271",
+ ["attribute_list"]="6324",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="69",
+ ["glue"]="23005",
+ ["glue_spec"]="6111",
+ ["glyph"]="7207",
+ ["hlist"]="588",
+ ["if_stack"]="4",
+ ["kern"]="205",
+ ["late_lua"]="50",
+ ["local_par"]="156",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="127",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="175",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=1047,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["str_ptr"]=2155110,
+ },
+ {
+ ["cs_count"]=52389,
+ ["dyn_used"]=1948017,
+ ["elapsed_time"]=0.028046131134033,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=860316207,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="27347",
+ ["attribute_list"]="6343",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="141",
+ ["glue"]="23120",
+ ["glue_spec"]="6128",
+ ["glyph"]="7700",
+ ["hlist"]="587",
+ ["if_stack"]="4",
+ ["kern"]="235",
+ ["late_lua"]="42",
+ ["local_par"]="148",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="131",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="21",
+ ["penalty"]="170",
+ ["rule"]="41",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=1051,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["str_ptr"]=2155111,
+ },
+ {
+ ["cs_count"]=52389,
+ ["dyn_used"]=1949882,
+ ["elapsed_time"]=0.03255295753479,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=860456590,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="28003",
+ ["attribute_list"]="6505",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="188",
+ ["glue"]="22966",
+ ["glue_spec"]="6149",
+ ["glyph"]="7551",
+ ["hlist"]="659",
+ ["if_stack"]="4",
+ ["kern"]="365",
+ ["late_lua"]="25",
+ ["local_par"]="127",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="125",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="23",
+ ["penalty"]="164",
+ ["rule"]="43",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=1054,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["str_ptr"]=2155112,
+ },
+ {
+ ["cs_count"]=52389,
+ ["dyn_used"]=1950260,
+ ["elapsed_time"]=0.036058902740479,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=860678493,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="28259",
+ ["attribute_list"]="6569",
+ ["boundary"]="14",
+ ["dir"]="20",
+ ["disc"]="193",
+ ["glue"]="23112",
+ ["glue_spec"]="6143",
+ ["glyph"]="7901",
+ ["hlist"]="696",
+ ["if_stack"]="4",
+ ["kern"]="397",
+ ["late_lua"]="26",
+ ["local_par"]="126",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="125",
+ ["pdf_restore"]="12",
+ ["pdf_save"]="12",
+ ["pdf_setmatrix"]="19",
+ ["penalty"]="162",
+ ["rule"]="43",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="105",
+ },
+ ["obj_ptr"]=1057,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["str_ptr"]=2155113,
+ },
+ {
+ ["cs_count"]=52391,
+ ["dyn_used"]=1955738,
+ ["elapsed_time"]=0.023038148880005,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=860838099,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="27924",
+ ["attribute_list"]="6485",
+ ["boundary"]="14",
+ ["dir"]="52",
+ ["disc"]="62",
+ ["glue"]="22663",
+ ["glue_spec"]="6154",
+ ["glyph"]="5789",
+ ["hlist"]="743",
+ ["if_stack"]="11",
+ ["kern"]="239",
+ ["late_lua"]="32",
+ ["local_par"]="138",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="135",
+ ["pdf_restore"]="28",
+ ["pdf_save"]="28",
+ ["pdf_setmatrix"]="51",
+ ["penalty"]="154",
+ ["rule"]="113",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="245",
+ },
+ ["obj_ptr"]=1064,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["str_ptr"]=2155116,
+ },
+ {
+ ["cs_count"]=52391,
+ ["dyn_used"]=1956506,
+ ["elapsed_time"]=0.0080130100250244,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=860935461,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="27834",
+ ["attribute_list"]="6462",
+ ["boundary"]="14",
+ ["dir"]="52",
+ ["disc"]="8",
+ ["glue"]="22486",
+ ["glue_spec"]="6155",
+ ["glyph"]="4947",
+ ["hlist"]="729",
+ ["if_stack"]="11",
+ ["kern"]="168",
+ ["late_lua"]="30",
+ ["local_par"]="136",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="123",
+ ["pdf_restore"]="28",
+ ["pdf_save"]="28",
+ ["pdf_setmatrix"]="51",
+ ["penalty"]="148",
+ ["rule"]="113",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="245",
+ },
+ ["obj_ptr"]=1067,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["str_ptr"]=2155117,
+ },
+ {
+ ["cs_count"]=52391,
+ ["dyn_used"]=1957275,
+ ["elapsed_time"]=0.0075118541717529,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=861006446,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="27851",
+ ["attribute_list"]="6466",
+ ["boundary"]="14",
+ ["dir"]="48",
+ ["disc"]="8",
+ ["glue"]="22468",
+ ["glue_spec"]="6156",
+ ["glyph"]="4959",
+ ["hlist"]="701",
+ ["if_stack"]="11",
+ ["kern"]="163",
+ ["late_lua"]="28",
+ ["local_par"]="134",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="123",
+ ["pdf_restore"]="26",
+ ["pdf_save"]="26",
+ ["pdf_setmatrix"]="47",
+ ["penalty"]="146",
+ ["rule"]="104",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="227",
+ },
+ ["obj_ptr"]=1077,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["str_ptr"]=2155118,
+ },
+ {
+ ["cs_count"]=52391,
+ ["dyn_used"]=1958011,
+ ["elapsed_time"]=0.0070121288299561,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=861077204,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="27860",
+ ["attribute_list"]="6468",
+ ["boundary"]="14",
+ ["dir"]="44",
+ ["disc"]="8",
+ ["glue"]="22448",
+ ["glue_spec"]="6157",
+ ["glyph"]="4971",
+ ["hlist"]="671",
+ ["if_stack"]="9",
+ ["kern"]="158",
+ ["late_lua"]="26",
+ ["local_par"]="132",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="123",
+ ["pdf_restore"]="24",
+ ["pdf_save"]="24",
+ ["pdf_setmatrix"]="43",
+ ["penalty"]="145",
+ ["rule"]="95",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="209",
+ },
+ ["obj_ptr"]=1081,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["str_ptr"]=2155119,
+ },
+ {
+ ["cs_count"]=52391,
+ ["dyn_used"]=1958756,
+ ["elapsed_time"]=0.0070109367370605,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=861147079,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="27864",
+ ["attribute_list"]="6469",
+ ["boundary"]="14",
+ ["dir"]="40",
+ ["disc"]="8",
+ ["glue"]="22427",
+ ["glue_spec"]="6158",
+ ["glyph"]="4983",
+ ["hlist"]="641",
+ ["if_stack"]="9",
+ ["kern"]="153",
+ ["late_lua"]="24",
+ ["local_par"]="130",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="123",
+ ["pdf_restore"]="22",
+ ["pdf_save"]="22",
+ ["pdf_setmatrix"]="39",
+ ["penalty"]="143",
+ ["rule"]="86",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="191",
+ },
+ ["obj_ptr"]=1085,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["str_ptr"]=2155120,
+ },
+ {
+ ["cs_count"]=52391,
+ ["dyn_used"]=1959501,
+ ["elapsed_time"]=0.007011890411377,
+ ["luabytecode_bytes"]=21552,
+ ["luastate_bytes"]=861221607,
+ ["max_buf_stack"]=2306,
+ ["node_memory"]={
+ ["attribute"]="27872",
+ ["attribute_list"]="6471",
+ ["boundary"]="14",
+ ["dir"]="36",
+ ["disc"]="8",
+ ["glue"]="22417",
+ ["glue_spec"]="6160",
+ ["glyph"]="4996",
+ ["hlist"]="614",
+ ["if_stack"]="10",
+ ["kern"]="148",
+ ["late_lua"]="23",
+ ["local_par"]="129",
+ ["margin_kern"]="2",
+ ["noad"]="1",
+ ["pdf_literal"]="123",
+ ["pdf_restore"]="20",
+ ["pdf_save"]="20",
+ ["pdf_setmatrix"]="35",
+ ["penalty"]="143",
+ ["rule"]="77",
+ ["special"]="1",
+ ["temp"]="8",
+ ["user_defined"]="7",
+ ["vlist"]="173",
+ },
+ ["obj_ptr"]=1089,
+ ["pdf_mem_ptr"]=10,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["str_ptr"]=2155121,
+ },
+} \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mk/mk-math.tex b/doc/context/sources/general/manuals/mk/mk-math.tex
new file mode 100644
index 000000000..9fddd4f27
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-math.tex
@@ -0,0 +1,1024 @@
+% language=uk
+
+\usemodule[fnt-23]
+\usemodule[fnt-25]
+
+\startcomponent mk-math
+
+\environment mk-environment
+
+\chapter{Unicode math}
+
+{\em I assume that the reader is somewhat familiar with math in
+\TEX. Although in \CONTEXT\ we try to support the concepts and
+symbols used in the \TEX\ community we have our own way of
+implementing math. The fact that \CONTEXT\ is not used extensively
+for conventional math journals permits us to rigourously
+re|-|implement mechanisms. Of course the user interfaces mostly
+remain the same.}
+
+\subject{introduction}
+
+The \LUATEX\ project entered a new stage when end of 2008 and
+beginning of 2009 math got opened up. Although \TEX\ can handle
+math pretty good we had a few wishes that we hoped to fulfill in
+the process. That \TEX's math machinery is a rather independent
+subsystem is reflected in the fact that after parsing there is an
+intermediate list of so called noads (math elements), which then
+gets converted into a node list (glyphs, kerns, penalties, glue and
+more). This conversion can be intercepted by a callback and a
+macro package can do whatever it likes with the list of noads as
+long as it returns a proper list.
+
+Of course \CONTEXT\ does support math and that is visible in its
+code base:
+
+\startitemize
+
+\item Due to the fact that we need to be able to switch to
+alternative styles the font system is quite complex and in
+\CONTEXT\ \MKII\ math font definitions (and changes) are good for
+50\% of the time involved. In \MKIV\ we can use a more efficient
+model.
+
+\item Because some usage of \CONTEXT\ demands the mix of several
+completely different encoded math fonts there is a dedicated math
+encoding subsystem in \MKII. In \MKIV\ we will use \UNICODE\
+exclusively.
+
+\item Some constructs (and symbols) are implemented in a way that
+we find suboptimal. In the perspective of \UNICODE\ in \MKIV\ we
+aim at all symbols being real characters. This is possible because
+all important constructs (like roots, accents and delimiters) are
+supported by the engine.
+
+\item In order to fit vertical spacing around math (think for
+instance of typesetting on a grid) in \MKII\ we have ended up with
+rather messy and suboptimal code. \footnote {This is because
+spacing before and after formulas has to cooperate with spacing of
+structural components that surround it.} The expectation is that
+we can improve that.
+
+\stopitemize
+
+In the following sections I will discuss a few of the
+implementation details of the font related issues in \MKIV. Of
+course a few years from now the actual solutions we implemented
+might look different but the principles remain the same. Also, as
+with other components of \LUATEX\ Taco and I worked in parallel on
+the code and its usage, which made both our tasks easier.
+
+\subject{transition}
+
+In \TEX, math typesetting uses a special concept called families.
+Each math component (number, letter, symbol, etc) is member of a
+family. Because we have three sizes (text, script and
+scriptscript) this results in a family||size matrix of defined
+fonts. Because the number of glyphs in a font was limited to 256,
+in practice it meant that we had quite some font definitions. The
+minimum number of families was~4 (roman, italic, symbol, and
+extension) but in practice several more could be active (sans,
+bold, mono|-|spaced, more symbols, etc.) for specific alphabets or
+extra symbols (for instance \AMS\ set A and B). The total number
+of families in traditional \TEX\ is limited to 16, and one easily
+hits this maximum. In that case, some 16 times 3 fonts are defined
+for one size of which in practice only a few are really used in the
+typesetting.
+
+A potential source of confusion is bold math. Bold in math can
+either mean having some bold letters, or having the whole formula
+in bold. In practice this means that for a complete bold formula
+one has to define the whole lot using bold fonts. A complication
+is that the math symbols (etc) are kind of bound to families and
+so we end up with either redefining symbols, or reusing the
+families (which is easier and faster). In any case there is a
+performance issue involved due to the rather massive switch from
+normal to bold.
+
+In \UNICODE\ all alphabets that make sense as well as all math
+symbols are part of the definition although unfortunately some
+alphabets have their letters spread over the \UNICODE\ vector and
+not in a range (like blackboard). This forces all applications
+that want to support math to implement similar hacks to deal with
+it.
+
+In \MKIV\ we will assume that we have \UNICODE\ aware math fonts,
+like \OPENTYPE. The font that sets the standard is Microsoft
+Cambria. The upcoming (I'm writing this in January 2009) \TEX Gyre
+fonts will be compliant to this standard but they're not yet there
+and so we have a problem. The way out is to define virtual fonts
+and now that \LUATEX\ math is extended to cover all of \UNICODE\
+as well as provides access to the (intermediate) math lists this
+has become feasible. This also permits us to test \LUATEX\
+with both Cambria and Latin Modern Virtual Math.
+
+The advantage is that we can stick to just one family for all
+shapes which simplifies the underlying \TEX\ code enormously.
+First of all we need to define way less fonts (which is partially
+compensated by loading them as part of the virtual font) and all
+math aspects can now be dealt with using the character data
+tables.
+
+One tricky aspect of the new approach is that the Latin Modern
+fonts have design sizes, so we have to define several virtual
+fonts. On the other hand, fonts like Cambria have alternative
+script and scriptscript shapes which is controlled by the \type
+{ssty} feature, a gsub alternate that provides some alternative
+sizes for a couple of hundred characters that matter.
+
+\starttabulate[|l|l|l|]
+\NC text \NC \type {lmmi12 at 12pt} \NC \type {cambria at 12pt with ssty=no} \NC \NR
+\NC script \NC \type {lmmi8 at 8pt} \NC \type {cambria at 8pt with ssty=1} \NC \NR
+\NC scriptscript \NC \type {lmmi6 at 6pt} \NC \type {cambria at 6pt with ssty=2} \NC \NR
+\stoptabulate
+
+So Cambria not so much has design sizes but shapes optimized
+relative to the text variant: in the following example we see text
+in red, script in green and scriptscript in blue.
+
+\startbuffer
+\definefontfeature[math][analyze=false,script=math,language=dflt]
+
+\definefontfeature[text] [math][ssty=no]
+\definefontfeature[script] [math][ssty=1]
+\definefontfeature[scriptscript][math][ssty=2]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Let us first look at Cambria:
+
+\startbuffer
+\startoverlay
+ {\definedfont[name:cambriamath*scriptscript at 150pt]\mkblue X}
+ {\definedfont[name:cambriamath*script at 150pt]\mkgreen X}
+ {\definedfont[name:cambriamath*text at 150pt]\mkred X}
+\stopoverlay
+\stopbuffer
+
+\typebuffer \startlinecorrection \getbuffer \stoplinecorrection
+
+When we compare them scaled down as happens in real script and
+scriptscript we get:
+
+\startbuffer
+\startoverlay
+ {\definedfont[name:cambriamath*scriptscript at 120pt]\mkblue X}
+ {\definedfont[name:cambriamath*script at 80pt]\mkgreen X}
+ {\definedfont[name:cambriamath*text at 60pt]\mkred X}
+\stopoverlay
+\stopbuffer
+
+\typebuffer \startlinecorrection \getbuffer \stoplinecorrection
+
+Next we see (scaled) Latin Modern:
+
+\startbuffer
+\startoverlay
+ {\definedfont[LMRoman8-Regular at 150pt]\mkblue X}
+ {\definedfont[LMRoman10-Regular at 150pt]\mkgreen X}
+ {\definedfont[LMRoman12-Regular at 150pt]\mkred X}
+\stopoverlay
+\stopbuffer
+
+\typebuffer \startlinecorrection \getbuffer \stoplinecorrection
+
+In practice we will see:
+
+\startbuffer
+\startoverlay
+ {\definedfont[LMRoman8-Regular at 120pt]\mkblue X}
+ {\definedfont[LMRoman10-Regular at 80pt]\mkgreen X}
+ {\definedfont[LMRoman12-Regular at 60pt]\mkred X}
+\stopoverlay
+\stopbuffer
+
+\typebuffer \startlinecorrection \getbuffer \stoplinecorrection
+
+Both methods probably work out well although you need to keep in
+mind that the \OPENTYPE\ \type {ssty} feature is not so much a
+design size related feature.
+
+An \OPENTYPE\ font can have a specification for the script and
+scriptscript size. By default we listen to this specification instead
+of the one imposed by the bodyfont environment. When you turn on
+tracing
+
+\starttyping
+\enabletrackers[otf.math]
+\stoptyping
+
+you will get messages like:
+
+\starttyping
+asked scriptscript size: 458752, used: 471859.2 (102.86 %)
+asked script size: 589824, used: 574095.36 (97.33 %)
+\stoptyping
+
+The differences between the defaults and the font recommendations
+are not that large so by default we listen to the font specification.
+
+\usetypescript[cambria] \start \setupbodyfont[cambria] \stop
+
+\definefontfeature[math-script] [math-script] [mathsize=no]
+\definefontfeature[math-scriptscript][math-scriptscript][mathsize=no]
+
+\definetypeface [cambria-ns] [rm] [serif] [cambria] [default]
+\definetypeface [cambria-ns] [tt] [mono] [modern] [default]
+\definetypeface [cambria-ns] [mm] [math] [cambria] [default]
+
+\usetypescript[cambria-ns] \start \setupbodyfont[cambria-ns] \stop
+
+\startlinecorrection
+\scale
+ [width=\textwidth]
+ {\backgroundline
+ [darkgray]
+ {\startoverlay
+ {\white\switchtobodyfont [cambria]$\sum_{i=0}^n$}
+ {\mkred\switchtobodyfont[cambria-ns]$\sum_{i=0}^n$}
+ \stopoverlay
+ \startoverlay
+ {\white\switchtobodyfont [cambria]$\int_{i=0}^n$}
+ {\mkred\switchtobodyfont[cambria-ns]$\int_{i=0}^n$}
+ \stopoverlay
+ \startoverlay
+ {\white\switchtobodyfont [cambria]$\log_{i=0}^n$}
+ {\mkred\switchtobodyfont[cambria-ns]$\log_{i=0}^n$}
+ \stopoverlay
+ \startoverlay
+ {\white\switchtobodyfont [cambria]$\cos_{i=0}^n$}
+ {\mkred\switchtobodyfont[cambria-ns]$\cos_{i=0}^n$}
+ \stopoverlay
+ \startoverlay
+ {\white\switchtobodyfont [cambria]$\prod_{i=0}^n$}
+ {\mkred\switchtobodyfont[cambria-ns]$\prod_{i=0}^n$}
+ \stopoverlay}}
+\stoplinecorrection
+
+\definefontfeature[math-script] [math-script] [mathsize=yes]
+\definefontfeature[math-scriptscript][math-scriptscript][mathsize=yes]
+
+In this overlay the white text is scaled according to the
+specification in the font, while the red text is scaled according
+to the bodyfont environment (12/7/5 points).
+
+\subject{going virtual}
+
+The number of math fonts (used) in the \TEX\ community is
+relatively small and of those only Latin Modern (which builds upon
+Computer Modern) has design sizes. This means that the amount of
+\UNICODE\ compliant virtual math fonts that we have to make is not
+that large. We could have used an already present virtual
+composition mechanism but instead we made a handy helper function
+that does a more efficient job. This means that a definition looks
+(a bit simplified) as follows:
+
+\starttyping
+mathematics.make_font ( "lmroman10-math", {
+ { name="lmroman10-regular", features="virtualmath", main=true },
+ { name="lmmi10", vector="tex-mi", skewchar=0x7F },
+ { name="lmsy10", vector="tex-sy", skewchar=0x30, parameters=true } ,
+ { name="lmex10", vector="tex-ex", extension=true } ,
+ { name="msam10", vector="tex-ma" },
+ { name="msbm10", vector="tex-mb" },
+ { name="lmroman10-bold", "tex-bf" } ,
+ { name="lmmib10", vector="tex-bi", skewchar=0x7F } ,
+ { name="lmsans10-regular", vector="tex-ss", optional=true },
+ { name="lmmono10-regular", vector="tex-tt", optional=true },
+} )
+\stoptyping
+
+For the \TEX Gyre Pagella it looks this way:
+
+\starttyping
+mathematics.make_font ( "px-math", {
+ { name="texgyrepagella-regular", features="virtualmath", main=true },
+ { name="pxr", vector="tex-mr" } ,
+ { name="pxmi", vector="tex-mi", skewchar=0x7F },
+ { name="pxsy", vector="tex-sy", skewchar=0x30, parameters=true } ,
+ { name="pxex", vector="tex-ex", extension=true } ,
+ { name="pxsya", vector="tex-ma" },
+ { name="pxsyb", vector="tex-mb" },
+} )
+\stoptyping
+
+As you can see, it is possible to add alphabets, given that there is
+a suitable vector that maps glyph indices onto \UNICODE s. It is good
+to know that this function only defines the way such a font is
+constructed. The actual construction is delayed till the font is
+needed.
+
+Such a virtual font is used in typescripts (the building blocks of
+typeface definitions in \CONTEXT) as follows:
+
+\starttyping
+\starttypescript [math] [palatino] [name]
+ \definefontsynonym [MathRoman] [pxmath@px-math]
+ \loadmapfile[original-youngryu-px.map]
+\stoptypescript
+\stoptyping
+
+If you're familiar with the way fonts are defined in \CONTEXT, you will
+notice that we no longer need to define MathItalic, MathSymbol and
+additional symbol fonts. Of course users don't have to deal with
+these issues themselves. The \type {@} triggers the virtual
+font builder.
+
+You can imagine that in \MKII\ switching to another font style or size
+involves initializing (or at least checking) involves some 30 to 40
+font definitions when it comes to math (the number of used
+families times 3, the number o fmath sizes.). And even if we take
+into account that fonts are loaded only once, this checking and
+enabling takes time. Keep in mind that in \CONTEXT\ we can have
+several math font sets active in one document which comes at a
+price.
+
+In \MKIV\ we use one family (at three sizes). Of course we need to
+load the font (and more than one in the case of virtual variants)
+but when switching bodyfont sizes we only need to enable one
+(already defined) math font. And that really saves time. This is
+one of the areas where we gain back time that we loose elsewhere
+by extending core functionality using \LUA\ (like \OPENTYPE\
+support).
+
+\subject{dimensions}
+
+By setting font related dimensions you can control the way \TEX\
+positions math elements relative to each other. Math fonts have a
+few more dimensions than regular text fonts. But \OPENTYPE\ math
+fonts like Cambria have quite some more. There is a nice booklet
+published by Microsoft, \quote {Mathematical Typesetting}, where
+dealing with math is discussed in the perspective of their word
+processor and \TEX. In the booklet some of the parameters are
+discussed and since many of them are rather special it makes no
+sense (yet) to elaborate on them here. \footnote {Googling on
+\quote {Ulrich Vieth}, \quote {TeX} and \quote {conferences} might
+give you some hits on articles on these matters.} Figuring out
+their meaning was quite a challenge.
+
+I am the first to admit that the current code in \MKIV\ that deals
+with math parameters is somewhat messy. There are several reasons
+for this:
+
+\startitemize[packed]
+\item We can pass parameters as \type {MathConstants} table in the
+ \TFM\ table that we pass to the core engine.
+\item We can use some named parameters, like \type {x_height} and
+ pass those in the \type {parameters} table.
+\item We can use the traditional font dimension numbers in the
+ \type {parameters} table, but since they overlap for symbol and
+ extensible fonts, that is asking for troubles.
+\stopitemize
+
+Because in \MKIV\ we create virtual fonts at run|-|time and use just
+one family, we fill the \type {MathConstants} table for
+traditional fonts as well. Future versions may use the upcoming
+mechanisms of font parameter sets at the macro level. These can be
+defined for each of the sizes (display, text, script and
+scriptscript, and the last three in cramped form as well) but
+since a font only carries one set, we currently use a compromise.
+
+\subject{tracing}
+
+One of the nice aspects of the opened up math machinery is that it
+permits us to get a more detailed look at what happens. It also
+fits nicely in the way we always want to visualize things in
+\CONTEXT\ using color, although most users are probably unaware of
+many such features because they don't need them as I do.
+
+\startbuffer
+\enabletrackers[math.analyzing]
+\ruledhbox{$a = \sqrt{b^2 + \sin{c} - {1 \over \gamma}}$}
+\disabletrackers[math.analyzing]
+\stopbuffer
+
+\typebuffer \startbaselinecorrection \getbuffer \stopbaselinecorrection
+
+This tracker option colors characters depending on their nature and the
+fact that they are remapped. The tracker also was handy during development
+of \LUATEX\ especially for checking if attributes migrated right in
+constructed symbols.
+
+For over a year I had been using a partial \UNICODE\ math
+implementation in some projects but for serious math the vectors
+needed to be completed. In order to help the \quote {math
+department} of the \CONTEXT\ development team (Aditya Mahajan,
+Mojca Miklavec, Taco Hoekwater and myself) we have some extra
+tracing options, like
+
+\startbuffer
+\showmathfontcharacters[list=0x0007B]
+\stopbuffer
+
+\typebuffer
+
+\start \blank \getbuffer \blank \stop
+
+The simple variant with no arguments would have extended this
+document with many pages of such descriptions.
+
+Another handy command (defined in module \type{fnt-25}) is the following:
+
+\starttyping
+\ShowCompleteFont{name:cambria}{9pt}{1}
+\ShowCompleteFont{dummy@lmroman10-math}{10pt}{1}
+\stoptyping
+
+This will for instance for Cambria generate between 50 and 100
+pages of character tables.
+
+\startbuffer[mathtest]
+$abc \bf abc \bi abc$
+$\mathscript abcdefghijklmnopqrstuvwxyz %
+ 1234567890 ABCDEFGHIJKLMNOPQRSTUVWXYZ$
+$\mathfraktur abcdefghijklmnopqrstuvwxyz %
+ 1234567890 ABCDEFGHIJKLMNOPQRSTUVWXYZ$
+$\mathblackboard abcdefghijklmnopqrstuvwxyz %
+ 1234567890 ABCDEFGHIJKLMNOPQRSTUVWXYZ$
+$\mathscript abc IRZ \mathfraktur abc IRZ %
+ \mathblackboard abc IRZ \ss abc IRZ 123$
+\stopbuffer
+
+If you look at the following samples you can imagine how coloring
+the characters and replacements helped figuring out the alphabets
+We use the following input (stored in a buffer):
+
+\typebuffer [mathtest]
+
+For testing Cambria we say:
+
+\starttyping
+\usetypescript[cambria]
+\switchtobodyfont[cambria,11pt]
+\enabletrackers[math.analyzing]
+\getbuffer[mathtest] % the input shown before
+\disabletrackers[math.analyzing]
+\stoptyping
+
+And we get:
+
+\usetypescript[cambria] % global
+
+\startlines
+\switchtobodyfont[cambria,10pt]
+\enabletrackers[math.analyzing]
+\getbuffer[mathtest] % the input shown before
+\disabletrackers[math.analyzing]
+\stoplines
+
+For the virtualized Latin Modern we say:
+
+\starttyping
+\usetypescript[modern]
+\switchtobodyfont[modern,11pt]
+\enabletrackers[math.analyzing]
+\getbuffer[mathtest] % the input shown before
+\disabletrackers[math.analyzing]
+\stoptyping
+
+This gives:
+
+\usetypescript[modern] % global
+
+\startlines
+\switchtobodyfont[modern,11pt]
+\enabletrackers[math.analyzing]
+\getbuffer[mathtest]
+\disabletrackers[math.analyzing]
+\stoplines
+
+These two samples demonstrate that Cambria has a rather complete
+repertoire of shapes which is no surprise because it is a recent
+font that also serves as a showcase for \UNICODE\ and \OPENTYPE\
+driven math.
+
+Commands like \type {\mathscript} sets an attribute. When we post|-|process
+the noad list and encounter this attribute, we remap the characters to
+the desired variant. Of course this happens selectively. So, a capital~A
+(\type {0x0041}) becomes a capital script~A (\type {0x1D49C}). Of course
+this solution is rather \CONTEXT\ specific and there are other ways to
+achieve the same goal (like using more families and switching family).
+
+\subject{special cases}
+
+Because we now are operating in the \UNICODE\ domain, we run into
+problems if we keep defining some of the math symbols in the
+traditional \TEX\ way. Even with the \AMS\ fonts available we
+still end up with some characters that are represented by
+combining others. Take for instance $\neq$ which is composed of
+two characters. Because in \MKIV\ we want to have all
+characters in their pure form we use a virtual replacement for
+them. In \MKIV\ speak it looks like this:
+
+\starttyping
+local function negate(main,unicode,basecode)
+ local characters = main.characters
+ local basechar = characters[basecode]
+ local ht, wd = basechar.height, basechar.width
+ characters[unicode] = {
+ width = wd,
+ height = ht,
+ depth = basechar.depth,
+ italic = basechar.italic,
+ kerns = basechar.kerns,
+ commands = {
+ { "slot", 1, basecode },
+ { "push" },
+ { "down", ht/5},
+ { "right", - wd/2},
+ { "slot", 1, 0x2215 },
+ { "pop" },
+ }
+ }
+end
+\stoptyping
+
+In case you're curious, there are indeed kerns, in this case the
+kerns with the Greek Delta.
+
+Another thing we need to handle is positioning of accents on top
+of slanted (italic) shapes. For this \TEX\ uses a special
+character in its fonts (set with \type{\skewchar}). Any character
+can have in its kerning table a kern towards this special
+character. From this kern we
+can calculate the \type {top_accent} variable that we can pass for
+each character. This variable lives at the same level as \type
+{width}, \type {height}, \type {depth} and \type {italic} and is
+calculated as: $w/2 + k$, so it defines the horizontal anchor. A
+nice side effect is that (in the \CONTEXT\ font management
+subsystem) this saves us passing information associated with
+specific fonts such as the skew character.
+
+A couple of concepts are unique to \TEX, like having \type {\hat}
+and \type {\widehat} where the wide one has sizes. In \OPENTYPE\ and
+\UNICODE\ we don't have this distinction so we need special
+trickery to simulate this. We do so by adding extra code points in
+a private \UNICODE\ space which in return results in them being
+defined automatically and the relevant first size variant being
+used for \type {\hat}. For some users this might still be too wide
+but at least it's better than a wrongly positioned \ASCII\ variant.
+In the future we might use this private space for similar cases.
+
+Arrows, horizontal extenders and radicals also fall in the
+category \quote {troublesome} if only because they use special
+dimensions to get the desired effect. Fortunately \OPENTYPE\ math
+is modeled after \TEX, so in \LUATEX\ we introduce a couple
+of new constructs to deal with this. One such simplification at
+the macro level is in the definition of \type {\root}. Here we use
+the new \type {\Uroot} primitive. The placement related parameters
+are those used by traditional \TEX, but when they are available the
+\OPENTYPE\ parameters are applied. The simplified
+plain definitions are now:
+
+\starttyping
+\def\rootradical{\Uroot 0 "221A }
+
+\def\root#1\of{\rootradical{#1}}
+
+\def\sqrt{\rootradical{}}
+\stoptyping
+
+The successive sizes of the root will be taken from the font in the
+same way as traditional \TEX\ does it. In that sense \LUATEX\ is no
+doing anything differently, it only has more parameters to control
+the process. The definition of \type {\sqrt} in \CONTEXT\ permits
+an optional first argument that sets the degree.
+
+\startbuffer
+\showmathfontcharacters[list=0x221A]
+\stopbuffer
+
+\start \blank \getbuffer \blank \stop
+
+Note that we've collected all characters in family~0 (simply
+because that is what \TEX\ defaults characters to) and that we use
+the formal \UNICODE\ slots. When we use the Latin Modern fonts we
+just remap traditional slots to the right ones.
+
+Another neat trick is used when users choose among the bigger variants
+of some characters. The traditional approach is to create a box of a
+certain size and create a fake delimited variant which is then used.
+
+\starttyping
+\definemathcommand [big] {\choosemathbig\plusone }
+\definemathcommand [Big] {\choosemathbig\plustwo }
+\definemathcommand [bigg] {\choosemathbig\plusthree}
+\definemathcommand [Bigg] {\choosemathbig\plusfour }
+\stoptyping
+
+Of course this can become a primitive operation and we might decide
+to add such a primitive later on so we won't bother you with more
+details.
+
+Attributes are also used to make live easier for authors who have
+to enter lots of pairs. Compare:
+
+\startbuffer
+\setupmathematics[autopunctuation=no]
+
+$ (a,b) = (1.20,3.40) $
+\stopbuffer
+
+\typebuffer \begingroup \getbuffer \endgroup
+
+with:
+
+\startbuffer
+\setupmathematics[autopunctuation=yes]
+
+$ (a,b) = (1.20,3.40) $
+\stopbuffer
+
+\typebuffer \begingroup \getbuffer \endgroup
+
+So we don't need to use this any more:
+
+\starttyping
+$ (a{,}b) = (1{.}20{,}3{.}40) $
+\stoptyping
+
+Features like this are implemented on top of an experimental math
+manipulation framework that is part of \MKIV. When the math
+font system is stable we will rework the rest of math support
+and implement additional manipulating frameworks.
+
+\subject{control}
+
+As with all other character related issues, in \MKIV\ everything
+is driven by a character table (consider it a database).
+Quite some effort went into getting that one right and although by
+now math is represented well, more data will be added in due time.
+
+In \MKIV\ we no longer have huge lists of \TEX\ definitions for
+math related symbols. Everything is initialized using the mentioned
+table: normal symbols, delimiters, radicals, whether or not with name.
+Take for instance the square root:
+
+\start \blank \showmathfontcharacters[list=0x221A] \blank \stop
+
+
+Its entry is:
+
+\starttyping
+[0x221A] = {
+ adobename = "radical",
+ category = "sm",
+ cjkwd = "a",
+ description = "SQUARE ROOT",
+ direction = "on",
+ linebreak = "ai",
+ mathclass = "radical",
+ mathname = "surd",
+ unicodeslot = 0x221A,
+}
+\stoptyping
+
+The fraction symbol also comes in sizes. This symbol is not to be
+confused with the negation symbol \type {0x2215}, which in \TEX\ is
+known as \type {\not}).
+
+\start \blank \showmathfontcharacters[list=0x2044] \blank \stop
+
+\starttyping
+[0x2044] = {
+ adobename = "fraction",
+ category = "sm",
+ contextname = "textfraction",
+ description = "FRACTION SLASH",
+ direction = "cs",
+ linebreak = "is",
+ mathspec = {
+ { class = "binary", name = "slash" },
+ { class = "close", name = "solidus" },
+ },
+ unicodeslot = 0x2044,
+}
+\stoptyping
+
+However, since most users don't have this symbol visualized in
+their word processor, they expect the same behaviour from the
+regular slash. This is why we find a reference to the real symbol
+in its definition.
+
+\start \blank \showmathfontcharacters[list=0x002F] \blank \stop
+
+The definition is:
+
+\starttyping
+[0x002F] = {
+ adobename = "slash",
+ category = "po",
+ cjkwd = "na",
+ contextname = "textslash",
+ description = "SOLIDUS",
+ direction = "cs",
+ linebreak = "sy",
+ mathsymbol = 0x2044,
+ unicodeslot = 0x002F,
+}
+\stoptyping
+
+One problem left is that currently we have only one class per
+character (apart from the delimiter and radical usage which have
+their own definitions). Future releases of \CONTEXT\ will provide
+support for math dictionaries (as in \OPENMATH\ and \MATHML~3). At
+that point we will also have a \type {mathdict} entry.
+
+There is another issue with character mappings, one that will
+seldom reveal itself to the user, but might confuse macro writers
+when they see an error message.
+
+In traditional \TEX, and therefore also in the Latin Modern fonts,
+a chain from small to large character goes in two steps: the
+normal size is taken from one family and the larger variants from
+another. The larger variant then has a pointer to an even larger
+one and so on, until there is no larger variant or an extensible
+recipe is found. The default family is number~0. It is for this
+reason that some of the definition primitives expect a small and
+large family part.
+
+However, in order to support \OPENTYPE\ in \LUATEX\ the
+alternative method no longer assumes this split. After all, we no
+longer have a situation where the 256 limit forces us to take the
+smaller variant from one font and the larger sequence from another
+(so we need two family||slot pairs where each family eventually
+resolves to a font).
+
+It is for that reason that the new \type {\U...} primitives expect
+only one family specification: the small symbol, which then has a
+pointer to a larger variant when applicable. However deep down in
+the engine, there is still support for the multiple family
+solution (after all, we don't want to drop compatibility). As a
+result, in error messages you can still find references
+(defaulting to~0) to large specifications, even if you don't use
+them. In that case you can simply ignore the large symbol (0,0),
+since it is not used when the small symbol provides a link.
+
+\subject{extensibles}
+
+In \TEX\ fences can be told to become larger automatically. In
+traditional \TEX\ a character can have a linked list of next
+larger shapes ending in a description of how to compose even
+larger variants.
+
+A parenthesis in Cambria has the following list:
+
+\start
+ \switchtobodyfont[cambria,10pt]
+ \showmathfontcharacters[list=0x00028]
+\stop
+
+In Latin Modern we have:
+
+\start
+ \switchtobodyfont[modern,10pt]
+ \showmathfontcharacters[list=0x00028]
+\stop
+
+Of course \LUATEX\ is downward compatible with respect to this
+feature, but the internal representation is now closer to what
+\OPENTYPE\ math provides (which is not that far from how \TEX\
+works simply because it's inspired by \TEX). Because Cambria has
+different parameters we get slightly different results. In the
+following list of pairs, you see Cambria on the left and Latin
+Modern on the right.
+Both start with stepwise larger shapes, followed by a more gradual
+growth. The thresholds for a next step are driven by parameters
+set in the \OPENTYPE\ font or by \TEX's default.
+
+\start
+\lineskip1ex
+\dostepwiserecurse{5}{140}{5} {
+ \dontleavehmode \ruledhbox \bgroup
+ \setbox0=\vbox{\vss\hbox{\switchtobodyfont[cambria,10pt]$\left\{ \vcenter{\hbox{\darkgray\vrule height \recurselevel pt width 5pt}} \right\}$}\vss}%
+ \setbox2=\vbox{\vss\hbox{\switchtobodyfont[modern, 10pt]$\left\{ \vcenter{\hbox{\darkgray\vrule height \recurselevel pt width 5pt}} \right\}$}\vss}%
+ \ifdim\ht0>\ht2
+ \setbox2\vbox to \htdp0{\vss\box2\vss}%
+ \else
+ \setbox0\vbox to \htdp2{\vss\box0\vss}%
+ \fi
+ \box0\box2
+ \egroup \quad
+}
+\par \stop
+
+In traditional \TEX\ horizontal extensibles are not really present. Accents
+are chosen from a linked list of variants and don't have an extensible
+specification. This is because most such accents grow in two dimensions and
+the only extensible like accents are rules and braces. However, in \UNICODE\
+we have a few more and also because of symmetry we decided to add horizontal
+extensibles too. Take:
+
+\startbuffer
+$ \overbrace {a+1} \underbrace {b+2} \doublebrace {c+3} $ \par
+$ \overparent{a+1} \underparent{b+2} \doubleparent{c+3} $ \par
+\stopbuffer
+
+\typebuffer
+
+This gives:
+
+\getbuffer
+
+Contrary to Cambria, Latin Modern Math, which is just like
+Computer Modern Math, has no ready overbrace glyphs. Keep in mind
+that in that we're dealing with fonts that have only 256 slots and
+that the traditional font mechanism has the same limitation. For
+this reason, the (extensible) braces are traditionally made from
+snippets as is demonstrated below.
+
+\startbuffer
+\hbox\bgroup
+ \ruledhbox{\getglyph{lmex10}{\char"7A}}
+ \ruledhbox{\getglyph{lmex10}{\char"7B}}
+ \ruledhbox{\getglyph{lmex10}{\char"7C}}
+ \ruledhbox{\getglyph{lmex10}{\char"7D}}
+ \ruledhbox{\getglyph{lmex10}{\char"7A\char"7D\char"7C\char"7B}}
+ \ruledhbox{\getglyph{name:cambriamath}{\char"23DE}}
+ \ruledhbox{\getglyph{lmex10}{\char"7C\char"7B\char"7A\char"7D}}
+ \ruledhbox{\getglyph{name:cambriamath}{\char"23DF}}
+\egroup
+\stopbuffer
+
+\typebuffer
+
+This gives:
+
+\startlinecorrection
+\getbuffer
+\stoplinecorrection
+
+The four snippets have the height and depth of the rule that will
+connect them. Since we want a single interface for all fonts we no
+longer will use macro based solutions. First of all fonts like
+Cambria don't have the snippets, and using active character
+trickery (so that we can adapt the meaning to the font) has no
+preference either. This leaves virtual glyphs.
+
+It took us a bit of experimenting to get the right virtual definition because
+it is a multi||step process:
+
+\startitemize[packed]
+\item The right \UNICODE\ character (\type {0x23DE}) points to a character that has
+ no glyph itself but only horizontal extensibles.
+\item The snippets that make up the extensible don't have the right dimensions
+ (as they define the size of the connecting rule), so we need to make them
+ virtual themselves and give them a size that matches \LUATEX's expectations.
+\item Each virtual snippet contains a reference to the physical snippet and moves
+ it up or down as well as fixes its size.
+\item The second and fifth snippet are actually not real glyphs but rules. The
+ dimensions are derived from the snippets and it is shifted up or down too.
+\stopitemize
+
+You might wonder if this is worth the trouble. Well, it is if you take into
+account that all upcoming math fonts will be organized like Cambria.
+
+\subject{math kerning}
+
+While reading Microsofts orange booklet, it became clear that
+\OPENTYPE\ provides advanced kerning possibilities and we decided
+to put it on the agenda for \LUATEX.
+
+It is possible to define a ladder||like boundary for each corner
+of a character where the ladder more or less follows the shape of
+a character. In theory this means that when we attach a
+superscript to a base character we can use two such ladders to
+determine the optimal spacing between them.
+
+Let's have a look at a few characters, the upright~f and its
+italic cousin.
+
+\startcombination[2*1]
+ {\ShowGlyphShape{name:cambria-math}{40bp}{0x66}} {U+00066}
+ {\ShowGlyphShape{name:cambria-math}{40bp}{0x1D453}} {0x1D453}
+\stopcombination
+
+The ladders on the right can be used to position a super or
+subscript, that is, they are positioned in the normal way but the
+ladder, as well as the boundingbox and/or left ladders of the
+scripts can be used to fine tune the positioning.
+
+Should we use this information? I made this visualizer for
+checking some Arabic fonts anchoring and cursive features and then
+it made sense to add some of the information related to math as
+well. \footnote {Taco extended the visualizer for his presentation
+at Bachotek 2009 so you might run into variants.} The orange
+booklet shows quite advanced ladders, and when looking at the 3500
+shapes in Cambria, it quickly becomes clear that in practice there
+is not that much detail in the specification. Nevertheless,
+because without this feature the result is not acceptable \LUATEX\
+gracefully supports it.
+
+\usetypescript[cambria-y]
+
+\startbuffer
+$V^a_a V^a V_a V^1_2 V^1 V_2 f^a f_a f^a_a$\par
+$V^f_f V^f V_f V^1_2 V^1 V_2 f^f f_f f^f_f$\par
+$T^a_a T^a T_a T^1_2 T^1 T_2 f^a f_f f^a_f$\par
+$T^f_f T^f T_f T^1_2 T^1 T_2 f^f f_a f^f_a$\par
+\stopbuffer
+
+\startlinecorrection
+\startcombination[3*1]
+ {\framed[align=normal]{\switchtobodyfont[modern]\getbuffer}} {latin modern}
+ {\framed[align=normal]{\switchtobodyfont[cambria-y]\getbuffer}} {cambria without kerning}
+ {\framed[align=normal]{\switchtobodyfont[cambria]\getbuffer}} {cambria with kerning}
+\stopcombination
+\stoplinecorrection
+
+% \ShowGlyphShape{name:cambria-math} {40bp}{0x1D43F}
+% \ShowGlyphShape{name:cambria-math}{100bp}{0x1D444}
+% \ShowGlyphShape{name:cambria-math}{100bp}{0x1D447}
+% \ShowGlyphShape{name:cambria-math}{100bp}{0x2112}
+% \ShowGlyphShape{name:cambria-math}{100bp}{0x1D432}
+% \ShowGlyphShape{name:cambria-math}{100bp}{0x1D43D}
+% \ShowGlyphShape{name:cambria-math}{100bp}{0x1D44A}
+% \ShowGlyphShape{name:cambria-math}{100bp}{0x1D45D}
+
+\subject{faking glyphs}
+
+A previous section already discussed virtual shapes. In the
+process of replacing all shapes that lack in Latin Modern and are
+composed from snippets instead we ran into the dots. As they are a
+nice demonstration of something that, although somewhat of a hack,
+survived 30 years without problems we show the definition used in
+\CONTEXT\ \MKII:
+
+% ldots = 2026
+% vdots = 22EE
+% cdots = 22EF
+% ddots = 22F1
+% udots = 22F0
+
+\startbuffer
+\def\PLAINldots{\ldotp\ldotp\ldotp}
+\def\PLAINcdots{\cdotp\cdotp\cdotp}
+
+\def\PLAINvdots
+ {\vbox{\forgetall\baselineskip.4\bodyfontsize\lineskiplimit\zeropoint\kern.6\bodyfontsize\hbox{.}\hbox{.}\hbox{.}}}
+
+\def\PLAINddots
+ {\mkern1mu%
+ \raise.7\bodyfontsize\ruledvbox{\kern.7\bodyfontsize\hbox{.}}%
+ \mkern2mu%
+ \raise.4\bodyfontsize\relax\ruledhbox{.}%
+ \mkern2mu%
+ \raise.1\bodyfontsize\ruledhbox{.}%
+ \mkern1mu}
+\stopbuffer
+
+\getbuffer \typebuffer
+
+This permitted us to say:
+
+\starttyping
+\definemathcommand [ldots] [inner] {\PLAINldots}
+\definemathcommand [cdots] [inner] {\PLAINcdots}
+\definemathcommand [vdots] [nothing] {\PLAINvdots}
+\definemathcommand [ddots] [inner] {\PLAINddots}
+\stoptyping
+
+However, in \MKIV\ we use virtual shapes instead.
+
+\definemathcommand [xldots] [inner] {\PLAINldots}
+\definemathcommand [xcdots] [inner] {\PLAINcdots}
+\definemathcommand [xvdots] [nothing] {\PLAINvdots}
+\definemathcommand [xddots] [inner] {\PLAINddots}
+
+The following lines show the virtual shapes in red. In each
+triplet we see the original, the virtual and the overlaid
+character.
+
+\startlinecorrection
+\switchtobodyfont[modern,17.3pt]%
+\dontleavehmode
+\ruledhbox{$\xldots$}%
+\ruledhbox{$\ldots$}%
+\ruledhbox{\startoverlay{$\xldots$}{$\red\ldots$}\stopoverlay}%
+\quad
+\ruledhbox{$\xcdots$}%
+\ruledhbox{$\cdots$}%
+\ruledhbox{\startoverlay{$\xcdots$}{$\red\cdots$}\stopoverlay}%
+\quad
+\ruledhbox{$\xvdots$}%
+\ruledhbox{$\vdots$}%
+\ruledhbox{\startoverlay{$\xvdots$}{$\red\vdots$}\stopoverlay}%
+\quad
+\ruledhbox{$\xddots$}%
+\ruledhbox{$\ddots$}%
+\ruledhbox{\startoverlay{$\xddots$}{$\red\ddots$}\stopoverlay}%
+\quad
+\ruledhbox{$\xddots$}%
+\ruledhbox{$\udots$}%
+\ruledhbox{\startoverlay{$\xddots$}{$\red\udots$}\stopoverlay}%
+\stoplinecorrection
+
+As you can see here, the virtual variants are rather close to the
+originals. At 12pt there are no real differences but (somehow) at
+other sizes we get slightly different results but it is hardly
+visible. Watch the special spacing above the shapes. It is
+probably needed for getting the spacing right in matrices (where
+they are used).
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/mk/mk-memory.tex b/doc/context/sources/general/manuals/mk/mk-memory.tex
new file mode 100644
index 000000000..4c16e613e
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-memory.tex
@@ -0,0 +1,142 @@
+% language=uk
+
+\environment mk-environment
+
+\usemodule[timing]
+
+\startcomponent mk-memory
+
+\chapter{Collecting garbage}
+
+We use the \type {mk.tex} document for testing and because it keeps track of
+how \LUATEX\ evolves. As a result it has some uncommon characteristics. For
+instance, you can see increments in memory usage at points where we
+load fonts: the chapters on Zapfino, Arabic and CJK (unfinished). This memory
+is not freed because the font memory is used permanently. In the following
+graphic, the red line is the memory consumption of \LUATEX\ for the current
+version of \type {mk.tex}. The blue line is the runtime per page.
+
+\ShowNamedUsage{mk-luatex-progress}{luastate_bytes}{elapsed_time}
+
+At the moment of writing this Taco has optimized the \LUATEX\ code base and
+I have added dynamic feature support to the \MKIV\ and optimized much of the
+critical \LUA\ code. At the time of writing this (December 23, 2007),
+\type {mk.tex} counted 142 pages. Our rather aggressive optimizations brought
+down runtime from about 29 seconds to under 16 seconds. By sharing as much font
+data as possible at the \LUA\ end (at the cost of a more complex implementation)
+the memory consumption of huge fonts was brought down to a level where
+a somewhat \quote {older} computer with 512 MB memory could also cope with
+\MKIV. Keep in mind that some fonts are just real big. Eventually we may decide
+to use a more compact table model for passing \OPENTYPE\ fonts to \LUA, but this
+will not happen in 2007.
+
+The following tests show when \LUA's garbage collector becomes active. The blue
+spike shows that some extra time is spent on this initially. After that garbage
+more garbage is collected, which makes the time spent per page slightly higher.
+
+\starttyping
+\usemodule[timing] \starttext \dorecurse{2000}{
+ \input tufte \par \input tufte \par \input tufte \page
+} \stoptext
+\stoptyping
+
+\ShowNamedUsage{mk-timing-1-luatex-progress}{luastate_bytes}{elapsed_time}
+
+The maximum memory footprint is somewhat misleading because \LUA\ reserves more
+than needed. As discussed in an earlier chapter, it is possible to tweak to control
+memory management somewhat, but eventually we decided that it does not make much sense
+to divert from the default settings.
+
+\starttyping
+\usemodule[timing] \starttext \dorecurse{2000}{
+ \input tufte \par \input tufte \par \input tufte \par
+} \stoptext
+\stoptyping
+
+\ShowNamedUsage{mk-timing-2-luatex-progress}{luastate_bytes}{elapsed_time}
+
+The last example of this set does not load files, but stores the text in
+a macro. This is faster, although not that mich because the operating system
+caches the file and there is not \UTF\ collapsing needed for this file.
+
+\starttyping
+\usemodule[timing] \starttext \dorecurse{2000}{
+ \tufte \par \tufte \par \tufte \par
+} \stoptext
+\stoptyping
+
+\ShowNamedUsage{mk-timing-3-luatex-progress}{luastate_bytes}{elapsed_time}
+
+There are subtle differences in memory usage between the examples and eventually
+test like these will permit us to optimize the code even further. For the record:
+the first test runs in 39.5 seconds, the second on in 36.5 seconds and the last one
+only takes 31.5 seconds (all in batch mode).
+
+Keep in mind that these quotes in \type {tufte.tex} are just test samples, and
+not that realistic in everyday documents. On the other hand, these tests involve
+the usual font loading, node processing, attribute handling etc. They provide a
+decent baseline.
+
+Another document that we use for testing functionality and performance is the
+reference manual. The preliminary beta~2 version gives the following statistics.
+
+\ShowNamedUsage{luatexref-t-luatex-progress-runtime}{luastate_bytes}{elapsed_time}
+
+The previous graphic shows the statistics of a run with runtime \METAPOST\ graphics
+enabled. This means that, because each pagenumber comes with a graphic, for each
+page \METAPOST\ is called. The speed of this call is heavily influenced by the
+\METAPOST\ startup time, which in turn (in a windows platform) is influences by the
+initialization time of the \KPSE\ library. Technically the call time can near zero
+but this demands sharing libraries and databases. Anyhow, we're moving towards an
+embedded \METAPOST\ library anyway, and the next graphic shows what will happen then.
+Here we run \CONTEXT\ in delayed \METAPOST\ mode: graphics are collected and processed
+between runs. Where the runtime variant takes some 45 seconds processing time, the
+intermediate versions takes 15.
+
+\ShowNamedUsage{luatexref-t-luatex-progress-intermediate}{luastate_bytes}{elapsed_time}
+
+In the \type {mk.tex} document we use \TYPEONE\ fonts for the main body of the text and
+load some (huge) \OPENTYPE\ fonts later on. Here we use \OPENTYPE\ fonts exclusively and
+since \CONTEXT\ loads fonts only when needed, you see several spikes in the time per page
+bars and memory consumption quickly becomes stable. Interesting is that contrary to the
+\type {tufte.tex} samples, memory usage is quite stable. Here we don't have a memory
+sawtooth and no garbage collection spikes.
+
+The previous graphics combine \LUA\ memory consumption with time spent per page. The
+following graphics show variants of this. The graphics concern this document
+(\type{mk.tex}). Again, the blue lines represent the runtime per page.
+
+\ShowMemoryUsage{mk-luatex-progress}
+
+In \LUATEX\ node memory management is rewritten. Contrary to what you may expect, node memory
+consumption is not that large. Pages seldom contain more than 5000 nodes, although
+extensive use of attributes can easily duplicate this. Node usage in this documents is
+as follows.
+
+\ShowNodeUsage{mk-luatex-progress}
+
+If node memory usage stays high, i.e.\ is not reclaimed, this can be an indication of
+a memory leak. In the December 2007 beta version there is such a leak in math subformulas,
+something that will be resolved when math node processing is opened up. The current \MKIV\
+code cleans up most of its temporary data. We do so, because it permits us to keep an eye
+on unwanted memory leaks. When writing this chapter, some of the peaks in the graphics
+coincided with peaks in the runtime per page, which is no surprise.
+
+If you want to run such tests yourself, you need to load a module at startup:
+
+\starttyping
+\usemodule[timing]
+\stoptyping
+
+The graphics can be generated with:
+
+\starttyping
+\def\ShowUsage {optional filename}
+\def\ShowNamedUsage {optional filename}{red graphic}{blue graphic}
+\def\ShowMemoryUsage{optional filename}
+\def\ShowNodeUsage {optional filename}
+\stoptyping
+
+(This interface may change.)
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/mk/mk-mix.tex b/doc/context/sources/general/manuals/mk/mk-mix.tex
new file mode 100644
index 000000000..dd2c72d5b
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-mix.tex
@@ -0,0 +1,1014 @@
+% language=uk
+
+\startcomponent mk-mix
+
+\environment mk-environment
+
+\chapter{The \luaTeX\ Mix}
+
+\subject{introduction}
+
+The idea of embedding \LUA\ into \TEX\ originates in some
+experiments with \LUA\ embedded in the \SCITE\ editor. You can add
+functionality to this editor by loading \LUA\ scripts. This is
+accomplished by a library that gives access to the internals of
+the editing component.
+
+The first integration of \LUA\ in \PDFTEX\ was relatively simple:
+from \TEX\ one could call out to \LUA\ and from \LUA\ one could
+print to \TEX. My first application was converting math encoded a
+calculator syntax to \TEX. Following experiments dealt with
+\METAPOST. At this point integration meant as little as: having some
+scripting language as addition to the macro language. But, even in
+this early stage further possibilities were explored, for instance
+in manipulating the final output (i.e.\ the \PDF\ code). The first
+versions of what by then was already called \LUATEX\ provided
+access to some internals, like counter and dimension registers and
+the dimensions of boxes.
+
+Boosted by the oriental \TeX\ project, the team started exploring
+more fundamental possibilities: hooks in the input|/|output,
+tokenization, fonts and nodelists. This was followed by opening up
+hyphenation, breaking lines into paragraphs and building
+ligatures. At that point we not only had access to some internals
+but also could influence the way \TEX\ operates.
+
+After that, an excursion was made to \MPLIB, which fulfilled a
+long standing wish for a more natural integration of \METAPOST\
+into \TEX. At that point we ended up with mixtures of \TEX, \LUA\
+and \METAPOST\ code.
+
+Medio 2008 we still need to open up more of \TEX, like page
+building, math, alignments and the backend. Eventually \LUATEX\
+will be nicely split up in components, rewritten in \CCODE, and we may
+even end up with \LUA\ glueing together the components that make
+up the \TEX\ engine. At that point the interoperation between
+\TEX\ and \LUA\ may be more rich that it is now.
+
+In the next sections I will discuss some of the ideas behind
+\LUATEX\ and the relationship between \LUA\ and \TEX\ and how it
+presents itself to users. I will not discuss the interface itself,
+which consists of quite some functions (organized in pseudo
+libraries) and the mechanisms used to access and replace internals
+(we call them callbacks).
+
+\subject {tex vs. lua}
+
+\TEX\ is a macro language. Everything boils down to either allowing
+stepwise expansion or explicitly preventing it. There are no real
+control features, like loops; tail recursion is a key concept.
+There are few accessible data|-|structures like numbers, dimensions,
+glue, token lists and boxes. What happens inside \TEX\ is
+controlled by variables, mostly hidden from view, and optimized
+within the constraints of 30 years ago.
+
+The original idea behind \TEX\ was that an author would write a
+specific collection of macros for each publication, but increasing
+popularity among non-programmers quickly resulted in distributed
+collections of macros, called macro packages. They started small
+but grew and grew and by now have become pretty large. In these
+packages there are macros dealing with fonts, structure, page
+layout, graphic inclusion, etc. There is also code dealing with
+user interfaces, process control, conversion and much of that code
+looks out of place: the lack of control features and string
+manipulation is solved by mimicking other languages, the
+unavailability of a float datatype is compensated by misusing
+dimension registers, and you can find provisions to force or
+inhibit expansion all over the place.
+
+\TEX\ is a powerful typographical programming language but
+lacks some of the handy features of scripting languages. Handy in the
+sense that you will need them when you want to go beyond the
+original purpose of the system. \LUA\ is a powerful scripting
+language, but knows nothing of typesetting. To some extent it
+resembles the language that \TEX\ was written in: \PASCAL. And,
+since \LUA\ is meant for embedding and extending existing systems,
+it makes sense to bring \LUA\ into \TEX. How do they compare?
+Let's give some examples.
+
+About the simplest example of using \LUA\ in \TEX\ is the following:
+
+\starttyping
+\directlua { tex.print(math.sqrt(10)) }
+\stoptyping
+
+This kind of application is probably what most users will want and
+use, if they use \LUA\ at all. However, we can go further than that.
+
+In \TEX\ a loop can be implemented as in the plain format
+(copied with comment):
+
+\starttyping
+\def\loop#1\repeat{\def\body{#1}\iterate}
+\def\iterate{\body\let\next\iterate\else\let\next\relax\fi\next}
+\let\repeat=\fi % this makes \loop...\if...\repeat skippable
+\stoptyping
+
+This is then used as:
+
+\starttyping
+\newcount \mycounter \mycounter=1
+\loop
+ ...
+ \advance\mycounter 1
+ \ifnum\mycounter < 11
+\repeat
+\stoptyping
+
+The definition shows a bit how \TEX\ programming works. Of course
+such definitions can be wrapped in macros, like:
+
+\starttyping
+\forloop{1}{10}{1}{some action}
+\stoptyping
+
+and this is what often happens in more complex macro packages. In
+order to use such control loops without side effects, the macro
+writer needs to take measures that permit for instance nested
+usage and avoids clashes between local variables (counters or
+macros) and user defined ones. Here we use a counter in the
+condition, but in practice expressions will be more complex
+and this is not that trivial to implement.
+
+The original definition of the iterator can be written a bit
+more efficient:
+
+\starttyping
+\def\iterate{\body \expandafter\iterate \fi}
+\stoptyping
+
+And indeed, in macro packages you will find many such expansion
+control primitives being used, which does not make reading macros
+easier.
+
+Now, get me right, this does not make \TEX\ less powerful, it's
+just that the language is focused on typesetting and not on
+general purpose programming, and in principle users can do
+without: documents can be preprocessed using another language, and
+document specific styles can be used.
+
+We have to keep in mind that \TEX\ was written in a time when
+resources in terms of memory and \CPU\ cycles weres less abundant
+than they are now. The 255 registers per class and the about 3000
+hash slots in original \TEX\ were more than enough for typesetting
+a book, but in huge collections of macros they are not all that much. For
+that reason many macropackages use obscure names to hide their
+private registers from users and instead of allocating new ones
+with meaningful names, existing ones are shared. It is therefore
+not completely fair to compare \TEX\ code with \LUA\ code: in \LUA\
+we have plenty of memory and the only limitations are those
+imposed by modern computers.
+
+In \LUA, a loop looks like this:
+
+\starttyping
+for i=1,10 do
+ ...
+end
+\stoptyping
+
+But while in the \TEX\ example, the content directly ends up in
+the input stream, in \LUA\ we need to do that explicitly, so in
+fact we will have:
+
+\starttyping
+for i=1,10 do
+ tex.print("...")
+end
+\stoptyping
+
+And, in order to execute this code snippet, in \LUATEX\ we will do:
+
+\starttyping
+\directlua 0 {
+ for i=1,10 do
+ tex.print("...")
+ end
+}
+\stoptyping
+
+So, eventually we will end up with more code than just \LUA\ code,
+but still the loop itself looks quite readable and more complex loops
+are possible:
+
+\starttyping
+\directlua 0 {
+ local t, n = { }, 0
+ while true do
+ local r = math.random(1,10)
+ if not t[r] then
+ t[r], n = true, n+1
+ tex.print(r)
+ if n == 10 then break end
+ end
+ end
+}
+\stoptyping
+
+This will typeset the numbers 1 to 10 in randomized order.
+Implementing a random number generator in pure \TEX\ takes some bit of
+code and keeping track of already defined numbers in macros can be
+done with macros, but both are not very efficient.
+
+I already stressed that \TEX\ is a typographical programming
+language and as such some things in \TEX\ are easier than in \LUA,
+given some access to internals:
+
+\starttyping
+\setbox0=\hbox{x} \the\wd0
+\stoptyping
+
+In \LUA\ we can do this as follows:
+
+\starttyping
+\directlua 0 {
+ local n = node.new('glyph')
+ n.font = font.current()
+ n.char = string.byte('x')
+ tex.box[0] = node.hpack(n)
+ tex.print(tex.box[0].width/65536 .. "pt")
+}
+\stoptyping
+
+One pitfall here is that \TEX\ rounds the number differently than
+\LUA. Both implementations can be wrapped in a macro cq. function:
+
+\starttyping
+\def\measured#1{\setbox0=\hbox{#1}\the\wd0\relax}
+\stoptyping
+
+Now we get:
+
+\starttyping
+\measured{x}
+\stoptyping
+
+The same macro using \LUA\ looks as follows:
+
+\starttyping
+\directlua 0 {
+ function measure(chr)
+ local n = node.new('glyph')
+ n.font = font.current()
+ n.char = string.byte(chr)
+ tex.box[0] = node.hpack(n)
+ tex.print(tex.box[0].width/65536 .. "pt")
+ end
+}
+\def\measured#1{\directlua0{measure("#1")}}
+\stoptyping
+
+In both cases, special tricks are needed if you want to pass for
+instance a \type {#} to \TEX's variant, or a \type {"} to \LUA. In
+both cases we can use shortcuts like \type {\#} and in the second
+case we can pass strings as long strings using double square
+brackets to \LUA.
+
+This example is somewhat misleading. Imagine that we want to
+pass more than one character. The \TEX\ variant is already suited
+for that, but the function will now look like:
+
+\starttyping
+\directlua 0 {
+ function measure(str)
+ if str == "" then
+ tex.print("0pt")
+ else
+ local head, tail = nil, nil
+ for chr in str:gmatch(".") do
+ local n = node.new('glyph')
+ n.font = font.current()
+ n.char = string.byte(chr)
+ if not head then
+ head = n
+ else
+ tail.next = n
+ end
+ tail = n
+ end
+ tex.box[0] = node.hpack(head)
+ tex.print(tex.box[0].width/65536 .. "pt")
+ end
+ end
+}
+\stoptyping
+
+And still it's not okay, since \TEX\ inserts kerns between
+characters (depending on the font) and glue between words, and
+doing that all in \LUA\ takes more code. So, it will be clear that
+although we will use \LUA\ to implement advanced features, \TEX\
+itself still has quite some work to do.
+
+In the following example we show code, but this is not of
+production quality. It just demonstrates a new way of dealing
+with text in \TEX.
+
+Occasionally a design demands that at some place the first
+character of each word should be uppercase, or that the first word
+of a paragraph should be in small caps, or that each first line of a
+paragraph has to be in dark blue. When using traditional \TEX\ the user
+then has to fall back on parsing the data stream, and preferably
+you should then start such a sentence with a command that can pick
+up the text. For accentless languages like English this is quite
+doable but as soon as commands (for instance dealing with accents)
+enter the stream this process becomes quite hairy.
+
+The next code shows how \CONTEXT\ \MKII\ defines the \type {\Word}
+and \type {\Words} macros that capitalize the first characters of
+word(s). The spaces are really important here because they signal
+the end of a word.
+
+\starttyping
+\def\doWord#1%
+ {\bgroup\the\everyuppercase\uppercase{#1}\egroup}
+
+\def\Word#1%
+ {\doWord#1}
+
+\def\doprocesswords#1 #2\od
+ {\doifsomething{#1}{\processword{#1} \doprocesswords#2 \od}}
+
+\def\processwords#1%
+ {\doprocesswords#1 \od\unskip}
+
+\let\processword\relax
+
+\def\Words
+ {\let\processword\Word \processwords}
+\stoptyping
+
+Actually, the code is not that complex. We split of words and feed
+them to a macro that picks up the first token (hopefully a character)
+which is then fed into the \type {\uppercase} primitive. This assumes that
+for each character a corresponding uppercase variant is defined using the
+\type {\uccode} primitive. Exceptions can be dealt with by assigning relevant
+code to the token register \type {\everyuppercase}.
+However, such macros are far from robust. What happens if the text
+is generated and not input as-is? What happens with commands in
+the stream that do something with the following tokens?
+
+A \LUA\ based solution can look as follows:
+
+\starttyping
+\def\Words#1{\directlua 0
+ for s in unicode.utf8.gmatch("#1", "([^ ])") do
+ tex.sprint(string.upper(s:sub(1,1)) .. s:sub(2))
+ end
+}
+\stoptyping
+
+But there is no real advantage here, apart from the fact that less code
+is needed. We still operate on the input and therefore we need to look
+to a different kind of solution: operating on the node list.
+
+\starttyping
+function CapitalizeWords(head)
+ local done = false
+ local glyph = node.id("glyph")
+ for start in node.traverse_id(glyph,head) do
+ local prev, next = start.prev, start.next
+ if prev and prev.id == kern and prev.subtype == 0 then
+ prev = prev.prev
+ end
+ if next and next.id == kern and next.subtype == 0 then
+ next = next.next
+ end
+ if (not prev or prev.id ~= glyph) and
+ next and next.id == glyph then
+ done = upper(start)
+ end
+ end
+ return head, done
+end
+\stoptyping
+
+A node list is a forward|-|linked list. With a helper
+function in the \type {node} library we can loop over such lists. Instead
+of traversing we can use a regular while loop, but it is probably less
+efficient in this case. But how to apply this function to the relevant
+part of the input? In \LUATEX\ there are several callbacks that operate
+on the horizontal lists and we can use one of them to plug in this
+function. However, in that case the function is applied to probably
+more text than we want.
+
+The solution for this is to assign attributes to the range of text
+that such a function has to take care of. These attributes (there
+can be many) travel with the nodes. This is also a reason why such
+code normally is not written by end users, but by macropackage
+writers: they need to provide the frameworks where you can plug in
+code. In \CONTEXT\ we have several such mechanisms and therefore
+in \MKIV\ this function looks (slightly stripped) as follows:
+
+\starttyping
+function cases.process(namespace,attribute,head)
+ local done, actions = false, cases.actions
+ for start in node.traverse_id(glyph,head) do
+ local attr = has_attribute(start,attribute)
+ if attr and attr > 0 then
+ unset_attribute(start,attribute)
+ local action = actions[attr]
+ if action then
+ local _, ok = action(start)
+ done = done and ok
+ end
+ end
+ end
+ return head, done
+end
+\stoptyping
+
+Here we check attributes (these are set at the \TEX\ end) and we have
+all kind of actions that can be applied, depending on the value of the
+attribute. Here the function that does the actual uppercasing
+is defined somewhere else. The \type {cases} table provides us a
+namespace; such namespaces needs to be coordinated by macro package
+writers.
+
+This approach means that the macro code looks completely different; in
+pseudo code we get:
+
+\starttyping
+\def\Words#1{{<setattribute><cases><somevalue>#1}}
+\stoptyping
+
+Or alternatively:
+
+\starttyping
+\def\StartWords{\begingroup<setattribute><cases><somevalue>}
+\def\StopWords {\endgroup}
+\stoptyping
+
+Because starting a paragraph with a group can have unwanted side
+effects (like \type {\everypar} being expanded inside a group) a
+variant is:
+
+\starttyping
+\def\StartWords{<setattribute><cases><somevalue>}
+\def\StopWords {<resetattribute><cases>}
+\stoptyping
+
+So, what happens here is that the users sets an attribute using some high
+level command, and at some point during the transformation of the input into
+node lists, some action takes place. At that point commands, expansion and
+whatever no longer can interfere.
+
+In addition to some infrastructure, macro packages need to carry some
+knowledge, just as with the \type {\uccode} used in \type {\uppercase}.
+The \type {upper} function in the first example looks as follows:
+
+\starttyping
+local function upper(start)
+ local data, char = characters.data, start.char
+ if data[char] then
+ local uc = data[char].uccode
+ if uc and fonts.ids[start.font].characters[uc] then
+ start.char = uc
+ return true
+ end
+ end
+ return false
+end
+\stoptyping
+
+Such code is really macro package dependent: \LUATEX\ only
+provides the means, not the solutions. In \CONTEXT\ we have
+collected information about characters in a \type {data} table
+in the \type {characters} namespace. There we have stored the
+uppercase codes (\type {uccode}). The, again \CONTEXT\ specific,
+\type {fonts} table keeps track of all defined fonts and before
+we change the case, we make sure that this character is present
+in the font. Here \type {id} is the number by which
+\LUATEX\ keeps track of the used fonts. Each glyph node carries
+such a reference.
+
+In this example, eventually we end up with more code than in \TEX,
+but the solution is much more robust. Just imagine what would happen
+when in the \TEX\ solution we would have:
+
+\starttyping
+\Words{\framed[offset=3pt]{hello world}}
+\stoptyping
+
+It simply does not work. On the other hand, the \LUA\ code never
+sees \TEX\ commands, it only sees the two words represented by
+glyphs nodes and separated by glue.
+
+Of course, there is a danger when we start opening \TEX's core
+features. Currently macro packages know what to expect, they know
+what \TEX\ can and cannot do. Of course macro writers have
+exploited every corner of \TEX, even the dark ones. Where dirty
+tricks in the \TEX book had an educational purpose, those of users
+sometimes have obscene traits. If we just stick to the trickery
+introduced for parsing input, converting this into that, doing
+some calculations, and alike, it will be clear that \LUA\ is more
+than welcome. It may hurt to throw away thousands of lines of
+impressive code and replace it by a few lines of \LUA\ but that's
+the price the user pays for abusing \TEX. Eventually \CONTEXT\ \MKIV\
+will be a decent mix of \LUA\ and \TEX\ code, and hopefully the
+solutions programmed in those languages are as clean as possible.
+
+Of course we can discuss until eternity whether \LUA\ is the best
+choice. Taco, Hartmut and I are pretty confident that it is, and
+in the couple of years that we are working on \LUATEX\ nothing has proved
+us wrong yet. We can fantasize about concepts, only to find out that
+they are impossible to implement or hard to agree on; we just go
+ahead using trial and error. We can talk over and over how opening up
+should be done, which is what the team does in a nicely
+closed and efficient loop, but at some points decisions have to be
+made. Nothing is perfect, neither is \LUATEX, but most users won't
+notice it as long as it extends \TEX's live and makes usage more
+convenient.
+
+Users of \TEX\ and \METAPOST\ will have noticed that both
+languages have their own grouping (scope) model. In \TEX\ grouping
+is focused on content: by grouping the macro writer (or author)
+can limit the scope to a specific part of the text or keep certain
+macros live within their own world.
+
+\starttyping
+.1. \bgroup .2. \egroup .1.
+\stoptyping
+
+Everything done at 2 is local unless explicitly told otherwise.
+This means that users can write (and share) macros with a small
+chance of clashes. In \METAPOST\ grouping is available too, but
+variables explicitly need to be saved.
+
+\starttyping
+.1. begingroup ; save p ; path p ; .2. endgroup .1.
+\stoptyping
+
+After using \METAPOST\ for a while this feels quite natural
+because an enforced local scope demands multiple return values
+which is not part of the macro language. Actually, this is another
+fundamental difference between the languages: \METAPOST\ has (a
+kind of) functions, which \TEX\ lacks. In \METAPOST\ you can write
+
+\starttyping
+draw origin for i=1 upto 10 : .. (i,sin(i)) endfor ;
+\stoptyping
+
+but also:
+
+\starttyping
+draw some(0) for i=1 upto 10 : .. some(i) endfor ;
+\stoptyping
+
+with
+
+\starttyping
+vardef some (expr i) =
+ if i > 4 : i = i - 4 fi ;
+ (i,sin(i))
+enddef ;
+\stoptyping
+
+The condition and assignment in no way interfere with the loop where
+this function is called, as long as some value is returned (a pair in
+this case).
+
+In \TEX\ things work differently. Take this:
+
+\starttyping
+\count0=1
+\message{\advance\count0 by 1 \the\count0}
+\the\count0
+\stoptyping
+
+The terminal wil show:
+
+\starttyping
+\advance \count 0 by 1 1
+\stoptyping
+
+At the end the counter still has the value~1. There are quite some
+situations like this, for instance when data like a table of
+contents has to be written to a file. You cannot write macros where
+such calculations are done and hidden and only the result is seen.
+
+The nice thing about the way \LUA\ is presented to the user is that it
+permits the following:
+
+\starttyping
+\count0=1
+\message{\directlua0{tex.count[0] = tex.count[0] + 1}\the\count0}
+\the\count0
+\stoptyping
+
+This will report~2 to the terminal and typeset a 2 in the
+document. Of course this does not solve everything, but it is a
+step forward. Also, compared to \TEX\ and \METAPOST, grouping is
+done differently: there is a \type {local} prefix that makes
+variables (and functions are variables too) local in modules,
+functions, conditions, loops etc. The \LUA\ code in this story
+contains such locals.
+
+In practice most users will use a macro package and so, if a user
+sees \TEX, he or she sees a user interface, not the code behind
+it. As such, they will also not encounter the code written in
+\LUA\ that deals with for instance fonts or node list
+manipulations. If a user sees \LUA, it will most probably be in
+processing actual data. Therefore, in the next section I will give an
+example of two ways to deal with \XML: one more suitable for
+traditional \TEX, and one inspired by \LUA. It demonstrates how
+the availability of \LUA\ can result in different solutions for
+the same problem.
+
+\subject {an example: xml}
+
+In \CONTEXT\ \MKII, the version that deals with \PDFTEX\ and \XETEX,
+we use a stream based \XML\ parser, written in \TEX. Each \type {<}
+and \type {&} triggers a macro that then parses the tag and/or entity.
+This method is quite efficient in terms of memory but the associated
+code is not simple because it has to deal with attributes, namespaces
+and nesting.
+
+The user interface is not that complex, but involves quite some
+commands. Take for instance the following \XML\ snippet:
+
+\starttyping
+<document>
+ <section>
+ <title>Whatever</title>
+ <p>some text</p>
+ <p>some more</p>
+ </section>
+</document>
+\stoptyping
+
+When using \CONTEXT\ commands, we can imagine the following definitions:
+
+\starttyping
+\defineXMLenvironment[document]{\starttext} {\stoptext}
+\defineXMLargument [title] {\section}
+\defineXMLenvironment[p] {\ignorespaces}{\par}
+\stoptyping
+
+When attributes have to be dealt with, for instance a reference to
+this section, things quickly start looking more complex. Also,
+users need to know what definitions to use in situations like this:
+
+\starttyping
+<table>
+ <tr><td>first</td><td>...</td> <td>last</td></tr>
+ <tr><td>left</td><td>...</td> <td>right</td></tr>
+</table>
+\stoptyping
+
+Here we cannot be sure if a cell does not contain a nested table,
+which is why we need to define the mapping as follows:
+
+\starttyping
+\defineXMLnested[table]{\bTABLE} {\eTABLE}
+\defineXMLnested[tr] {\bTR} {\eTR}
+\defineXMLnested[td] {\bTD} {\eTD}
+\stoptyping
+
+The \type {\defineXMLnested} macro is rather messy because it has
+to collect snippets and keep track of the nesting level, but users
+don't see that code, they just need to know when to use what
+macro. Once it works, it keeps working.
+
+Unfortunately mappings from source to style are never that simple
+in real life. We usually need to collect, filter and relocate
+data. Of course this can be done before feeding the source to
+\TEX, but \MKII\ provides a few mechanisms for that too. If for
+instance you want to reverse the order you can do this:
+
+\starttyping
+<article>
+ <title>Whatever</title>
+ <author>Someone</author>
+ <p>some text</p>
+</article>
+\stoptyping
+
+\starttyping
+\defineXMLenvironment[article]
+ {\defineXMLsave[author]}
+ {\blank author: \XMLflush{author}}
+\stoptyping
+
+This will save the content of the \type {author} element and flush
+it when the end tag \type {article} is seen. So, given previous
+definitions, we will get the title, some text and then the author.
+You may argue that instead we should use for instance \XSLT\ but
+even then a mapping is needed from the \XML\ to \TEX, and it's a
+matter of taste where the burden is put.
+
+Because \CONTEXT\ also wants to support standards like
+\MATHML, there are some more mechanisms but these are hidden from
+the user. And although these do a good job in most cases, the code
+associated with the solutions has never been satisfying.
+
+Supporting \XML\ this way is doable, and \CONTEXT\ has used this method
+for many years in fairly complex situations. However, now that we
+have \LUA\ available, it is possible to see if some things can be done
+simpler (or differently).
+
+After some experimenting I decided to write a full blown \XML\
+parser in \LUA, but contrary to the stream based approach, this
+time the whole tree is loaded in memory. Although this uses more
+memory than a streaming solution, in practice the difference is
+not significant because often in \MKII\ we also needed to store
+whole chunks.
+
+Loading \XML\ files in memory is real fast and once it is done we
+can have access to the elements in a way similar to \XPATH. We can
+selectively pipe data to \TEX\ and manipulate content using \TEX\
+or \LUA. In most cases this is faster than the stream|-|based
+method. Interesting is that we can do this without linking to
+existing \XML\ libraries, and as a result we are pretty
+independent.
+
+So how does this look from the perspective of the user? Say that
+we have the simple article definition stored in \type {demo.xml}.
+
+\starttyping
+<?xml version ='1.0'?>
+<article>
+ <title>Whatever</title>
+ <author>Someone</author>
+ <p>some text</p>
+</article>
+\stoptyping
+
+This time we associate so called setups with the elements. Each
+element can have its own setup, and we can use expressions to
+assign them. Here we have just one such setup:
+
+\starttyping
+\startxmlsetups xml:document
+ \xmlsetsetup{main}{article}{xml:article}
+\stopxmlsetups
+\stoptyping
+
+When loading the document it will automatically be associated with the tag \type
+{main}. The previous rule associates setup \type {xml:article}
+with the \type {article} element in tree \type {main}. We need to
+register this setup so that it will be applied to the document
+after loading:
+
+\starttyping
+\xmlregistersetup{xml:document}
+\stoptyping
+
+and the document itself is processed with:
+
+\starttyping
+\xmlprocessfile{main}{demo.xml}{} % optional setup
+\stoptyping
+
+The setup \type {xml:article} can look as follows:
+
+\starttyping
+\startxmlsetups xml:article
+ \section{\xmltext{#1}{/title}}
+ \xmlall{#1}{!(title|author)}
+ \blank author: \xmltext{#1}{/author}
+\stopxmlsetups
+\stoptyping
+
+Here \type {#1} refers to the current node in the \XML\ tree, in
+this case the root element, \type {article}. The second argument
+of \type {\xmltext} and \type {\xmlall} is a path expression,
+comparable with \XPATH: \type {/title} means: the \type {title}
+element anchored to the current root (\type{#1}), and \type
+{!(title|author)} is the negation of (complement to) \type{title}
+or \type {author}. Such expressions can be more complex that the
+one above, like:
+
+\starttyping
+\xmlfirst{#1}{/one/(alpha|beta)/two/text()}
+\stoptyping
+
+which returns the content of the first element that satisfies one of
+the paths (nested tree):
+
+\starttyping
+/one/alpha/two
+/one/beta/two
+\stoptyping
+
+There is a whole bunch of commands like \type {\xmltext} that
+filter content and pipe it into \TEX. These are calling \LUA\
+functions. This is no manual, so we will not discuss them here.
+However, it is important to realize that we have to associate
+setups (consider them free formatted macros) to at least one
+element in order to get started. Also, \XML\ inclusions have to be
+dealt with before assigning the setups. These are simple
+one|-|line commands. You can also assign defaults to elements,
+which saves some work.
+
+Because we can use \LUA\ to access the tree and manipulate
+content, we can now implement parts of \XML\ handling in \LUA. An
+example of this is dealing with so|-|called Cals tables. This is
+done in approximately 150 lines of \LUA\ code, loaded at runtime in a
+module. This time the association uses functions instead of setups and those
+functions will pipe data back to \TEX. In the module you will find:
+
+\starttyping
+\startxmlsetups xml:cals:process
+ \xmlsetfunction {\xmldocument} {cals:table} {lxml.cals.table}
+\stopxmlsetups
+
+\xmlregistersetup{xml:cals:process}
+
+\xmlregisterns{cals}{cals}
+\stoptyping
+
+These commands tell \MKIV\ that elements with a namespace
+specification that contains \type {cals} will be remapped to the
+internal namespace \type {cals} and the setup associates a
+function with this internal namespace.
+
+By now it will be clear that from the perspective of the user
+hardly any \LUA\ is visible. Sure, he or she can deduce that deep
+down some magic takes place, especially when you run into more
+complex expressions like this (the \type {@} denotes an
+attribute):
+
+\starttyping
+\xmlsetsetup
+ {main} {item[@type='mpctext' or @type='mrtext']}
+ {questions:multiple:text}
+\stoptyping
+
+Such expressions resemble \XPATH, but can go much further than
+that, just by adding more functions to the library.
+
+\starttyping
+b[position() > 2 and position() < 5 and text() == 'ok']
+b[position() > 2 and position() < 5 and text() == upper('ok')]
+b[@n=='03' or @n=='08']
+b[number(@n)>2 and number(@n)<6]
+b[find(text(),'ALSO')]
+\stoptyping
+
+Just to give you an idea \unknown\ in the module that implements
+the parser you will find definitions that match the function calls
+in the above expressions.
+
+\starttyping
+xml.functions.find = string.find
+xml.functions.upper = string.upper
+xml.functions.number = tonumber
+\stoptyping
+
+So much for the different approaches. It's up to the user what
+method to use: stream based \MKII, tree based \MKIV, or a mixture.
+
+The main reason for taking \XML\ as an example of mixing \TEX\ and
+\LUA\ is in that it can be a bit mind boggling if you start
+thinking of what happens behind the screens. Say that we have
+
+\starttyping
+<?xml version ='1.0'?>
+<article>
+ <title>Whatever</title>
+ <author>Someone</author>
+ <p>some <b>bold</b> text</p>
+</article>
+\stoptyping
+
+and that we use the setup shown before with \type {article}.
+
+At some point, we are done with defining setups and load the
+document. The first thing that happens is that the list of
+manipulations is applied: file inclusions are processed first,
+setups and functions are assigned next, maybe some elements are
+deleted or added, etc. When that is done we serialize the tree to
+\TEX, starting with the root element. When piping data to \TEX\ we
+use the current catcode regime; linebreaks and spaces are honored
+as usual.
+
+Each element can have a function (command) associated and when
+this is the case, control is given to that function. In our case
+the root element has such a command, one that will trigger a
+setup. And so, instead of piping content to \TEX, a function is
+called that lets \TEX\ expand the macro that deals with this
+setup.
+
+However, that setup itself calls \LUA\ code that filters the title
+and feeds it into the \type {\section} command, next it flushes
+everything except the title and author, which again involves
+calling \LUA. Last it flushes the author. The nested sequence
+of events is as follows:
+
+\startitemize[2*broad]
+
+ \sym{lua:} Load the document and apply setups and alike.
+
+ \sym{lua:} Serialize the \type {article} element, but since
+ there is an associated setup, tell \TEX\ do expand that one
+ instead.
+
+ \startitemize[2*broad]
+
+ \sym{tex:} Execute the setup, first expand the \type {\section}
+ macro, but its argument is a call to \LUA.
+
+ \startitemize[2*broad]
+
+ \sym{lua:} Filter \type {title} from the subtree under
+ \type {article}, print the content to \TEX\ and return
+ control to \TEX.
+
+ \stopitemize
+
+ \sym{tex:} Tell \LUA\ to filter the paragraphs i.e.\ skip \type
+ {title} and \type {author}; since the \type {b} element has
+ no associated setup (or whatever) it is just serialized.
+
+ \startitemize[2*broad]
+
+ \sym{lua:} Filter the requested elements and return control
+ to \TEX.
+
+ \stopitemize
+
+ \sym{tex:} Ask \LUA\ to filter \type {author}.
+
+ \startitemize[2*broad]
+ \sym{lua:} Pipe \type {author}'s content to \TEX.
+ \stopitemize
+
+ \sym{tex:} We're done.
+
+ \stopitemize
+
+ \sym{lua:} We're done.
+
+\stopitemize
+
+This is a really simple case. In my daily work I am dealing
+with rather extensive and complex educational documents where in
+one source there is text, math, graphics, all kind of fancy stuff,
+questions and answers in several categories and of different kinds,
+either or not to be reshuffled, omitted or combined. So there
+we are talking about many more levels of \TEX\ calling \LUA\ and \LUA\
+piping to \TEX\ etc. To stay in \TEX\ speak: we're dealing with
+one big ongoing nested expansion (because \LUA calls expand), and
+you can imagine that this somewhat stresses \TEX's input stack, but
+so far I have not encountered any problems.
+
+\subject{some remarks}
+
+Here I discussed several possible applications of \LUA\ in \TEX. I
+didn't mention yet that because \LUATEX\ contains a scripting engine
+plus some extra libraries, it can also be used purely for that.
+This means that support programs can now be written in \LUA\ and
+that there are no longer dependencies of other scripting engines
+being present on the system. Consider this a bonus.
+
+Usage in \TEX\ can be organized in four categories:
+
+\startitemize[n]
+\item Users can use \LUA\ for generating data, do all kind of
+ data manipulations, maybe read data from file, etc. The
+ only link with \TEX\ is the print function.
+\item Users can use information provided by \TEX\ and use this
+ when making decisions. An example is collecting data in
+ boxes and use \LUA\ to do calculations with the dimensions.
+ Another example is a converter from \METAPOST\ output to
+ \PDF\ literals. No real knowledge of \TEX's internals is
+ needed. The \MKIV\ \XML\ functionality discussed before
+ demonstrates this: it's mostly data processing and piping
+ to \TEX. Other examples are dealing with buffers, defining
+ character mappings, and handling error messages, verbatim
+ \unknown\ the list is long.
+\item Users can extend \TEX's core functionality. An example is
+ support for \OPENTYPE\ fonts: \LUATEX\ itself does not
+ support this format directly, but provides ways to feed
+ \TEX\ with the relevant information. Support for \OPENTYPE\
+ features demands manipulating node lists. Knowledge of
+ internals is a requirement. Advanced spacing and language
+ specific features are made possible by node list
+ manipulations and attributes. The alternative \type {\Words}
+ macro is an example of this.
+\item Users can replace existing \TEX\ functionality. In \MKIV\
+ there are numerous example of this, for instance all file
+ \IO\ is written in \LUA, including reading from \ZIP\ files
+ and remote locations. Loading and defining fonts is also
+ under \LUA\ control. At some point \MKIV\ will provide
+ dedicated splitters for multicolumn typesetting and
+ probably also better display spacing and display
+ math splitting.
+\stopitemize
+
+The boundaries between these categories are not frozen. For
+instance, support for image inclusion and \MPLIB\ in \CONTEXT\
+\MKIV\ sits between category 3 and~4. Category 3 and~4, and
+probably also~2 are normally the domain of macro package writers
+and more advanced users who contribute to macro packages. Because
+a macropackage has to provide some stability it is not a good idea
+to let users mess around with all those internals, because of
+potential interference. On the other hand, normally users operate
+on top of a kernel using some kind of \API\ and history has
+proved that macro packages are stable enough for this.
+
+Sometime around 2010 the team expects \LUATEX\ to be feature
+complete and stable. By that time I can probably provide a more
+detailed categorization.
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/mk/mk-mplib.tex b/doc/context/sources/general/manuals/mk/mk-mplib.tex
new file mode 100644
index 000000000..78e7b8f97
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-mplib.tex
@@ -0,0 +1,924 @@
+% language=uk
+
+\useMPlibrary[dum]
+
+\startcomponent mk-mplib
+
+\environment mk-environment
+
+\definetextbackground
+ [sideline]
+ [mp=mpos:par:sideline,
+ framecolor=mkcolor,
+ frameoffset=5mm]
+
+\startuseMPgraphic{mpos:par:sideline}{linecolor,lineoffset}
+ for i=1 upto nofmultipars :
+ fill leftboundary multipars[i]
+ shifted (-\MPvar{lineoffset},0)
+ rightenlarged 1mm withcolor \MPvar{linecolor} ;
+ endfor ;
+\stopuseMPgraphic
+
+\chapter{The MetaPost Library}
+
+% \subject{Hans Hagen \& Taco Hoekwater} \blank[3*big]
+
+This chapter is written by Taco and Hans around the time
+that \MPLIB\ was integrated into \LUATEX.
+It is part of our torture test.
+
+\subject{introduction}
+
+If \METAPOST\ support had not been as tightly integrated into
+\CONTEXT\ as it is, at least half of the projects \PRAGMA\ has
+been doing in the last decade could not have been done at all.
+\starttextbackground[sideline]Take for instance
+backgrounds behind text or graphic markers alongside text. These are
+probably the most complex mechanisms in \CONTEXT: positions are
+stored, and positional information is passed on to
+\METAPOST, where intersections between the text areas and the running
+text are converted into graphics that are then positioned in the
+background of the text.\stoptextbackground{} Underlining of text
+(sometimes used in the educational documents that we typeset) and
+change bars (in the margins) are implemented using the same
+mechanism because those are basically a background with only one of the
+frame sides drawn.
+
+You can probably imagine that a 300 page document with several such
+graphics per page takes a while to process. A nice example of such
+integrated graphics is the \LUATEX\ reference manual, that has an
+unique graphic at each page: a stylized image of a revolving moon.
+
+\startuseMPgraphic{lualogo-x}{angle}
+color luaplanetcolor ; luaplanetcolor := .5blue ;
+color luaholecolor ; luaholecolor := white ;
+numeric luaextraangle ; luaextraangle := \MPvar{angle} ;
+
+vardef lualogo = image (
+ % Graphic design by A. Nakonechnyj. Copyright (c) 1998, All rights reserved.
+ save luaorbitcolor, d, r, p ; color luaorbitcolor ; numeric d, r, p ;
+ luaorbitcolor := .5luaholecolor ; 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 luaorbitcolor ;
+ 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 ;
+ setbounds currentpicture to fullsquare scaled 1.3;
+) enddef ;
+
+draw lualogo scaled 1cm ;
+\stopuseMPgraphic
+
+\startlinecorrection[blank]
+\hbox to \hsize
+ {\hss\dostepwiserecurse{0}{360}{60}{\useMPgraphic{lualogo-x}{angle=\recurselevel}\hss}}
+\stoplinecorrection
+
+Most of the running time integrating such graphics seemed to be
+caused by the mechanics of the process: starting the separate
+\METAPOST\ interpreter and having to deal with a number of
+temporary files. Therefore our expectations were high with regards
+to integrating \METAPOST\ more tightly into \LUATEX. Besides the
+speed gain, it also true that the simpler the process of using
+such use of graphics becomes, the more modern a \TEX\ runs looks
+and the less problems new users will have with understanding how
+all the processes cooperate.
+
+This article will not discuss the application interface of the
+\MPLIB\ library in detail, for that there is the \LUATEX\ manual. In short,
+using the embedded \METAPOST\ interpreter in \LUATEX\ boils
+down to the following:
+
+\startitemize[packed]
+\item Open an instance using \type {mplib.new}, either to process
+ images with a format to be loaded, or to create such a format.
+ This function returns a library object.
+\item Execute sequences of \METAPOST\ commands, using the object's
+ \type{execute} method. This returns a result.
+\item Check if the result is valid and (if it is okay) request the list
+ of objects. Do whatever you want with them, most probably
+ convert them to some output format. You can also request a
+ string representation of a graphic in \POSTSCRIPT\ format.
+\stopitemize
+
+There is no need to close the library object. As long as you didn't make
+any fatal errors, the library recovers well and can stay alive during
+the entire \LUATEX\ run.
+
+Support for \MPLIB\ depends on a few components: integration,
+conversion and extensions. This article shows some of the code
+involved in supporting the library. Let's start with the conversion.
+
+\subject{conversion}
+
+The result of a \METAPOST\ run traditionally is a \POSTSCRIPT\
+language description of the generated graphic(s). When
+\PDF\ is needed, that \POSTSCRIPT\ code has to be converted to the target
+format. This includes embedded text as well as penshapes used for
+drawing. To demonstrate, here is a simple example graphic:
+
+\startluacode
+document.sample_mp_graphic = [[
+ draw fullcircle
+ scaled 2cm
+ withpen pencircle xscaled 1mm yscaled .5mm rotated 30
+ withcolor .75red ;
+]]
+\stopluacode
+
+\startbuffer[mpexample]
+draw fullcircle
+ scaled 2cm
+ withpen pencircle xscaled 1mm yscaled .5mm rotated 30
+ withcolor .75red ;
+\stopbuffer
+
+\placefigure
+ [left]
+ {}
+ {\startMPcode \ctxlua{tex.sprint(document.sample_mp_graphic)}\stopMPcode}
+
+\typebuffer[mpexample]
+
+Notice how the pen is not a circle but a rotated ellipse. Later on it
+will become clear what the consequences of that are for the conversion.
+
+How does this output look in \POSTSCRIPT ? If the preamble is left out
+it looks like this:
+
+\startbuffer
+\startluacode
+do
+ local mpx = metapost.format("metafun")
+ local result = mpx:execute(string.format("beginfig(0);%s;endfig;",document.sample_mp_graphic))
+ local str = result.fig[1]:postscript()
+ str = str:gsub("%%BeginProlog.-%%EndProlog","%% <<stripped preamble was here>>")
+ tex.sprint(tex.ctxcatcodes,"\\starttyping\n")
+ tex.sprint((str:gsub("[\n\r]$","")))
+ tex.sprint("\\stoptyping")
+end
+\stopluacode
+\stopbuffer
+
+\getbuffer
+
+The most prominent code here concerns the path. The numbers in brackets define
+the transformation matrix for the pen we used. The \PDF\ variant looks as follows:
+
+\startbuffer
+\startluacode
+do
+ local mpx = metapost.format("metafun")
+ local result = mpx:execute(string.format("beginfig(0);%s;endfig;",document.sample_mp_graphic))
+ local list = metapost.pdfliterals(result)
+ tex.sprint(tex.ctxcatcodes,"\\starttyping")
+ tex.sprint(table.concat(list,"\n"))
+ tex.sprint("\\stoptyping")
+end
+\stopluacode
+\stopbuffer
+
+\getbuffer
+
+The operators don't look much different from the \POSTSCRIPT, which is
+mostly due to the fact that in the \POSTSCRIPT\ code, the preamble
+defines shortcuts like \type {c} for \type {curveto}. Again, most code
+involves the path. However, this time the numbers are different and
+the transformation comes before the path.
+
+In the case of \PDF\ output, we could use \TEX\ itself to do the
+conversion: a generic converter is implemented in \type
+{supp-pdf.tex}, while a converter optimized for \CONTEXT\ \MKII\ is
+defined in the files whose names start with \type {meta-pdf}. But in
+\CONTEXT\ \MKIV\ we use \LUA\ code for the conversion instead. Thanks to
+\LUA's powerful \LPEG\ parsing library, this gives cleaner code and is
+also faster. This converter currently lives in \type {mlib-pdf.lua}.
+
+Now, with the embedded \METAPOST\ library, conversion goes different
+still because now it is possible to request the drawn result and
+associated information in the form of \LUA\ tables.
+
+\startbuffer
+\startluacode
+do
+ local mpx = metapost.format("metafun")
+ local result = mpx:execute(string.format("beginfig(0);%s;endfig;",document.sample_mp_graphic))
+ local str = table.serialize(metapost.totable(result), "figure")
+ tex.sprint(tex.ctxcatcodes,"\\starttyping")
+ tex.sprint((str:gsub("[\n\r]$","")))
+ tex.sprint("\\stoptyping")
+end
+\stopluacode
+\stopbuffer % $<-emacs font-lock
+
+% \startsimplecolumns[n=3,width=18.5cm]
+% \getbuffer
+% \stopsimplecolumns
+
+\getbuffer
+
+This means that instead of parsing \POSTSCRIPT\ output, we now can operate on
+a proper datastructure and get code like the following:
+
+\starttyping
+function convertgraphic(result)
+ if result then
+ local figures = result.fig
+ if figures then
+ for fig in ipairs(figures) do
+ local llx, lly, urx, ury = unpack(fig:boundingbox())
+ if urx > llx then
+ startgraphic(llx, lly, urx, ury)
+ for object in ipairs(fig:objects()) do
+ if object.type == "..." then
+ ...
+ flushgraphic(...)
+ ...
+ else
+ ...
+ end
+ end
+ finishgraphic()
+ end
+ end
+ end
+ end
+end
+\stoptyping
+
+Here \type {result} is what the library returns when one or more
+graphics are processed. As you can deduce from this snippet, a
+result can contain multiple figures. Each figure corresponds with a
+\type {beginfig} \type {...} \type {endfig}. The graphic operators that
+the converter generates (so called \PDF\ literals) have to be
+encapsulated in a proper box so this is why we have:
+
+\startitemize[packed]
+\item \type {startgraphic}: start packaging the graphic
+\item \type {flushgraphic}: pipe literals to \TEX
+\item \type {finishgraphic}: finish packaging the graphic
+\stopitemize
+
+It does not matter what number you passed to \type {beginfig}, the
+graphics come out in the natural order.
+
+Little over half a dozen different object types are possible. The example
+\METAPOST\ \type{draw} command from above results in an \type {outline} object.
+This object contains not only path information but also carries
+rendering data, like the color and the pen. So, in the end we will
+flush code like \type {1 M} which sets the \type {miterlimit} to one
+or \type {.5 g} which sets the color to 50\% gray, in addition to a
+path.
+
+Because objects are returned in a way that closely resembles a
+\METAPOST's internals, some extra work needs to be done in order to
+calculate paths with elliptical pens. An example of a helper function
+in somewhat simplified form is shown next:
+
+\starttyping
+function pen_characteristics(object)
+ local p = object.pen[1]
+ local wx, wy, width
+ if p.right_x == p.x_coord and p.left_y == p.y_coord then
+ wx = abs(p.left_x - p.x_coord)
+ wy = abs(p.right_y - p.y_coord)
+ else -- pyth: sqrt(a^2 +b^2)
+ wx = pyth(p.left_x - p.x_coord, p.right_x - p.x_coord)
+ wy = pyth(p.left_y - p.y_coord, p.right_y - p.y_coord)
+ end
+ if wy/coord_range_x(object.path, wx) >=
+ wx/coord_range_y(object.path, wy) then
+ width = wy
+ else
+ width = wx
+ end
+ local sx, sy = p.left_x, p.right_y
+ local rx, ry = p.left_y, p.right_x
+ local tx, ty = p.x_coord, p.y_coord
+ if width ~= 1 then
+ if width == 0 then
+ sx, sy = 1, 1
+ else
+ rx, ry, sx, sy = rx/width, ry/width, sx/width, sy/width
+ end
+ end
+ if abs(sx) < eps then sx = eps end
+ if abs(sy) < eps then sy = eps end
+ return sx, rx, ry, sy, tx, ty, width
+end
+\stoptyping
+
+If \type {sx} and \type {sy} are 1, there is no need to transform
+the path, otherwise a suitable transformation matrix is calculated
+and returned. The function itself uses a few helpers that make the
+calculations even more obscure. This kind of code does not fall in
+the category trivial and as already mentioned, these basic
+algorithms were derived from the \METAPOST\ sources. Even so,
+these snippets demonstrate that interfacing using \LUA\ does not
+look that bad.
+
+In the actual \MKIV\ code things look a bit different because it does
+a bit more and uses optimized code. There you will also find the code
+dealing with the actual transformation, of which these helpers are
+just a portion.
+
+If you compare the \POSTSCRIPT\ and the \PDF\ code you will notice
+that the paths looks different. This is because the use and
+application of a transformation matrix in \PDF\ is different from how
+it is handled in \POSTSCRIPT. In \PDF\ more work is assumed to be
+done by the \PDF\ generating application. This is why in both the
+\TEX\ and the \LUA\ based converters you will find transformation code
+and the library follows the same pattern. In that respect \PDF\
+differs fundamentally from \POSTSCRIPT.
+
+Within the \TEX\ based converter there was the problem of keeping the
+needed calculations within \TEX's accuracy, which fortunately permits
+larger values that \METAPOST\ can produce. This plus the parsing code
+resulted in a not-that-easy to follow bunch of \TEX\ code. The \LUA\
+based parser is more readable, but since it also operates on
+\POSTSCRIPT\ code it is kind of unnatural too, but at least there are
+less problems with keeping the calculations sane. The \MPLIB\ based
+converter is definitely the cleanest and least sensitive to future
+changes in the \POSTSCRIPT\ output. Does this mean that there is no
+ugly code left? Alas, as we will see in the next section, dealing with
+extensions is still somewhat messy. In practice users will not be
+bothered with such issues, because writing a converter is a one time
+job by macro package writers.
+
+\subject{extensions}
+
+In \METAFUN, which is the \METAPOST\ format used with \CONTEXT,
+a few extensions are provided, like:
+
+\startitemize[packed]
+\item cmyk, spot and multitone colors
+\item including external graphics
+\item lineair and circulair shades
+\item texts converted to outlines
+\item inserting arbitrary texts
+\stopitemize
+
+Until now, most of these extensions have been implemented by using
+specially coded colors and by injecting so called specials (think of
+them as comments) into the output. On one of our trips to a \TEX\
+conference, we discussed ways to pass information along with
+paths and eventually we arrived at associating text strings with paths
+as a simple and efficient solution. As a result, recently \METAPOST\
+was extended by \type {withprescript} and \type {withpostscript}
+directives. For those who are unfamiliar with these new scripts,
+they are used as follows:
+
+\starttyping
+draw fullcircle withprescript "hello" withpostscript "world" ;
+\stoptyping
+
+In the \POSTSCRIPT\ output these scripts end up before and after the
+path, but in the \PDF\ converter they can be overloaded to implement
+extensions, and that works reasonably well. However, at the moment
+there cannot be multiple pre- and postscripts associated with a single
+path inside the \METAPOST\ internals. This means that for the moment,
+the scripts mechanism is only used for a few of the extensions.
+Future versions of \MPLIB\ may provide more sophisticated methods
+for carrying information around.
+
+The \MKIV\ conversion mechanism uses scripts for graphic inclusion,
+shading and text processing but unfortunately cannot use them for
+more advanced color support.
+
+A nasty complication is that the color spaces in \METAPOST\ don't
+cast, which means that one cannot assign any color to a color
+variables: each colorspace has it's own type of variable.
+
+\starttyping
+color one ; one := (1,1,0) ; % correct
+cmykcolor two ; two := (1,0,0,1) ; % correct
+one := two ; % error
+fill fullcircle scaled 1cm withcolor .5[one,two] ; % error
+\stoptyping
+
+In \CONTEXT\ we use constructs like this:
+
+\starttyping
+\startreusableMPgraphic{test}
+ fill fullcircle scaled 1cm withcolor \MPcolor{mycolor} ;
+\stopreusableMPgraphic
+
+\reuseMPgraphic{test}
+\stoptyping
+
+Because \type {withcolor} is clever enough to understand what color
+type it receives, this is ok, but how about:
+
+\starttyping
+\startreusableMPgraphic{test}
+ color c ; c := \MPcolor{mycolor} ;
+ fill fullcircle scaled 1cm withcolor c ;
+\stopreusableMPgraphic
+\stoptyping
+
+Here the color variable only accepts an \RGB\ color and because in
+\CONTEXT\ there is mixed color space support combined with
+automatic colorspace conversions, it doesn't know in advance what type
+it is going to get. By implementing color spaces other than \RGB\
+using special colors (as before) such type mismatches can be avoided.
+
+The two techniques (coding specials in colors and pre|/|postscripts)
+cannot be combined because a script is associated with a path and
+cannot be bound to a variable like \type{c}. So this again is an argument
+for using special colors that remap onto \CMYK\, spot or
+multi|-|tone colors.
+
+Another area of extensions is text. In previous versions of
+\CONTEXT\ the text processing was already isolated: text ended
+up in a separate file and was processed in an separate run. More
+recent versions of \CONTEXT\ use a more abstract model of boxes that
+are preprocessed before a run, which avoids the external run(s). In
+the new approach everything can be kept internal. The conversion
+even permits constructs like:
+
+\starttyping
+for i=1 upto 100 :
+ draw btex oeps etex rotated i ;
+endfor ;
+\stoptyping
+
+but since this construct is kind of obsolete (at least in the library
+version of \METAPOST) it is better to use:
+
+\starttyping
+for i=1 upto 100 :
+ draw textext("cycle " & decimal i) rotated i ;
+endfor ;
+\stoptyping
+
+Internally a trial pass is done so that indeed 100 different texts will
+be drawn. The throughput of texts is so high that in practice one will
+not even notice that this happens.
+
+Dealing with text is yet another example of using \LPEG. The following
+snippet of code sheds some light on how text in graphics is dealt with.
+Actually this is a variation on a previous implementation. That one
+was slightly faster but looked more complex. It was also not robust for
+complex texts defined in macros in a format.
+
+\starttyping
+local P, S, V, Cs = lpeg.P, lpeg.S, lpeg.V, lpeg.Cs
+
+local btex = P("btex")
+local etex = P(" etex")
+local vtex = P("verbatimtex")
+local ttex = P("textext")
+local gtex = P("graphictext")
+local spacing = S(" \n\r\t\v")^0
+local dquote = P('"')
+
+local found = false
+
+local function convert(str)
+ found = true
+ return "textext(\"" .. str .. "\")"
+end
+local function ditto(str)
+ return "\" & ditto & \""
+end
+local function register()
+ found = true
+end
+
+local parser = P {
+ [1] = Cs((V(2)/register + V(3)/convert + 1)^0),
+ [2] = ttex + gtex,
+ [3] = (btex + vtex) * spacing *
+ Cs((dquote/ditto + (1-etex))^0) * etex,
+}
+
+function metapost.check_texts(str)
+ found = false
+ return parser:match(str), found
+end
+\stoptyping
+
+If you are unfamiliar with \LPEG\ it may take a while to see what
+happens here: we replace the text between \type {btex} and \type {etex}
+by a call to \type {textext}, a macro. Special care is given to
+embedded double quotes.
+
+When text is found, the graphic is processed two times. The definition
+of \type {textext} is different for each run. The first run we have:
+
+\starttyping
+vardef textext(expr str) =
+ image (
+ draw unitsquare
+ withprescript "tf"
+ withpostscript str ;
+ )
+enddef ;
+\stoptyping
+
+After the first run the result is not really converted, but just
+the outlines with the \type {tf} prescript are filtered. In the
+loop over the object there is code like:
+
+\starttyping
+local prescript = object.prescript
+if prescript then
+ local special = metapost.specials[prescript]
+ if special then
+ special(object.postscript,object)
+ end
+end
+\stoptyping
+
+Here, \type {metapost} is just the namespace used by the
+converter. The prescript tag \type {tf} triggers a function:
+
+\starttyping
+function metapost.specials.tf(specification,object)
+ tex.sprint(tex.ctxcatcodes,format("\\MPLIBsettext{%s}{%s}",
+ metapost.textext_current,specification))
+ if metapost.textext_current < metapost.textext_last then
+ metapost.textext_current = metapost.textext_current + 1
+ end
+ ...
+end
+\stoptyping
+
+Again, you can forget about the details of this function. Important is
+that there is a call out to \TEX\ that will process the text. Each snippet
+gets the number of the box that holds the content. The macro that is
+called just puts stuff in a box:
+
+\starttyping
+\def\MPLIBsettext#1#2%
+ {\global\setbox#1\hbox{#2}}
+\stoptyping
+
+In the next processing cycle of the \METAPOST\ code, the \type {textext}
+macro does something different :
+
+\starttyping
+vardef textext(expr str) =
+ image (
+ _tt_n_ := _tt_n_ + 1 ;
+ draw unitsquare
+ xscaled _tt_w_[_tt_n_]
+ yscaled (_tt_h_[_tt_n_] + _tt_d_[_tt_n_])
+ withprescript "ts"
+ withpostscript decimal _tt_n_ ;
+ )
+enddef ;
+\stoptyping
+
+This time the by then known dimensions of the box that is used to
+store the snippet are used. These are stored in the \type {_tt_w_},
+\type {_tt_h_} and \type {_tt_d_} arrays. The arrays are defined by
+\LUA\ using information about the boxes, and passed to the library
+before the second run. The result from the second \METAPOST\ run
+is converted, and again the prescript is used as trigger:
+
+\starttyping
+function metapost.specials.ts(specification,object,result)
+ local op = object.path
+ local first, second, fourth = op[1], op[2], op[4]
+ local tx, ty = first.x_coord , first.y_coord
+ local sx, sy = second.x_coord - tx, fourth.y_coord - ty
+ local rx, ry = second.y_coord - ty, fourth.x_coord - tx
+ if sx == 0 then sx = 0.00001 end
+ if sy == 0 then sy = 0.00001 end
+ metapost.flushfigure(result)
+ tex.sprint(tex.ctxcatcodes,format(
+ "\\MPLIBgettext{%f}{%f}{%f}{%f}{%f}{%f}{%s}",
+ sx,rx,ry,sy,tx,ty,metapost.textext_current))
+ ...
+end
+\stoptyping
+
+At this point the converter is actually converting the graphic and
+passing \PDF\ literals to \TEX. As soon as it encounters a text,
+it flushes the \PDF\ code collected so far and injects some \TEX\
+code. The \TEX\ macro looks like:
+
+\starttyping
+\def\MPLIBgettext#1#2#3#4#5#6#7%
+ {\ctxlua{metapost.sxsy(\number\wd#7,\number\ht#7,\number\dp#7)}%
+ \pdfliteral{q #1 #2 #3 #4 #5 #6 cm}%
+ \vbox to \zeropoint{\vss\hbox to \zeropoint
+ {\scale[sx=\sx,sy=\sy]{\raise\dp#7\box#7}\hss}}%
+ \pdfliteral{Q}}
+\stoptyping
+
+Because text can be transformed, it needs to be scale back to the right
+dimensions, using both the original box dimensions and the transformation
+of the unitquare associated with the text.
+
+\starttyping
+local factor = 65536*(7200/7227)
+
+function metapost.sxsy(wd,ht,dp) -- helper for text
+ commands.edef("sx",(wd ~= 0 and 1/( wd /(factor))) or 0)
+ commands.edef("sy",(wd ~= 0 and 1/((ht+dp)/(factor))) or 0)
+end
+\stoptyping
+
+So, in fact there are the following two processing alternatives:
+
+\startitemize[packed]
+\item tex: calls a \LUA\ function that processed the graphic
+\item lua: parse the \METAPOST\ code for texts and decide if two
+ runs are needed
+\stopitemize
+
+Now, if there was no text to be found, the continuation is:
+
+\startitemize[packed]
+\item lua: process the code using the library
+\item lua: convert the resulting graphic (if needed) and check
+ if texts are used
+\stopitemize
+
+Otherwise, the next steps are:
+
+\startitemize[packed]
+\item lua: process the code using the library
+\item lua: parse the resulting graphic for texts (in the postscripts)
+ and signal \TEX\ to process these texts afterwards
+\item tex: process the collected text and put the result in boxes
+\item lua: process the code again using the library but this time let
+ the unitsquare be transformed using the text dimensions
+\item lua: convert the resulting graphic and replace the transformed
+ unitsquare by the boxes with text
+\stopitemize
+
+The processor itself is used in the \MKIV\ graphic function that takes
+care of the multiple passes mentioned before. To give you an idea of
+how it works, here is how the main graphic processing function roughly
+looks.
+
+\starttyping
+local current_format, current_graphic
+
+function metapost.graphic_base_pass(mpsformat,str,preamble)
+ local prepared, done = metapost.check_texts(str)
+ metapost.textext_current = metapost.first_box
+ if done then
+ current_format, current_graphic = mpsformat, prepared
+ metapost.process(mpsformat, {
+ preamble or "",
+ "beginfig(1); ",
+ "_trial_run_ := true ;",
+ prepared,
+ "endfig ;"
+ }, true ) -- true means: trialrun
+ tex.sprint(tex.ctxcatcodes,
+ "\\ctxlua{metapost.graphic_extra_pass()}")
+ else
+ metapost.process(mpsformat, {
+ preamble or "",
+ "beginfig(1); ",
+ "_trial_run_ := false ;",
+ str,
+ "endfig ;"
+ } )
+ end
+end
+
+function metapost.graphic_extra_pass()
+ metapost.textext_current = metapost.first_box
+ metapost.process(current_format, {
+ "beginfig(0); ",
+ "_trial_run_ := false ;",
+ table.concat(metapost.texttextsdata()," ;\n"),
+ current_graphic,
+ "endfig ;"
+ })
+end
+\stoptyping
+
+The box information is generated as follows:
+
+\starttyping
+function metapost.texttextsdata()
+ local t, n = { }, 0
+ for i = metapost.first_box, metapost.last_box do
+ n = n + 1
+ local box_i = tex.box[i]
+ if box_i then
+ t[#t+1] = format(
+ "_tt_w_[%i]:=%f;_tt_h_[%i]:=%f;_tt_d_[%i]:=%f;",
+ n, box_i.width /factor,
+ n, box_i.height/factor,
+ n, box_i.depth /factor
+ )
+ else
+ break
+ end
+ end
+ return t
+end
+\stoptyping
+
+This is a typical example of accessing information available inside
+\TEX\ from \LUA, in this case information about boxes.
+
+The \type {trial_run} flag is used at the \METAPOST\ end, in fact the
+\type {textext} macro looks as follows:
+
+\starttyping
+vardef textext(expr str) =
+ if _trial_run_ :
+ % see first variant above
+ else :
+ % see second variant above
+ fi
+enddef ;
+\stoptyping
+
+This trickery is not new. We used it already in \CONTEXT\ for some
+time, but until now the multiple runs took way more time and from
+the perspective of the user this all looked much more complex.
+
+It may not be that obvious, but: in the case of a trial run (for
+instance when texts are found), after the first processing stage,
+and during the parsing of the result, the commands that typeset the
+content will be printed to \TEX. After processing, the command to do
+an extra pass is printed to \TEX\ also. So, once control is passed
+back to \TEX, at some point \TEX\ itself will pass control back to
+\LUA\ and do the extra pass.
+
+The base function is called in:
+
+\starttyping
+function metapost.graphic(mpsformat,str,preamble)
+ local mpx = metapost.format(mpsformat or "metafun")
+ metapost.graphic_base_pass(mpx,str,preamble)
+end
+\stoptyping
+
+The \type {metapost.format} function is part of \type {mlib-run}.
+It loads the \type{metafun} format, possibly after (re|)|generating it.
+
+Now, admittedly all this looks a bit messy, but in pure \TEX\ macros
+it would be even more so. Sometime in the future, the postponed calls to
+\tex{ctxlua} and the explicit \tex{pdfliteral}s can and will be
+replaced by using direct node generation, but that requires a rewrite
+of the internal \LUATEX\ support for \PDF\ literals.
+
+The snippets are part of the \type {mlib-*} files of \MKIV. These files are
+tagged as experimental and will stay that way for a while yet. This is
+proved by the fact that by now we use a slightly different approach.
+
+Summarizing the impact of \MPLIB\ on extensions, we can conclude that
+some are done better and some more or less the same. There are some
+conceptual problems that prohibit using pre- and postscripts for
+everything (at least currently).
+
+\subject{integrating}
+
+The largest impact of \MPLIB\ is processing graphics at runtime.
+In \MKII\ there are two methods: real runtime processing (each
+graphic triggered a call to \METAPOST) and collective processing
+(between \TEX\ runs). The first method slows down the \TEX\ run,
+the second method generates a whole lot of intermediate \POSTSCRIPT\
+files. In both cases there is a lot of file \IO\ involved.
+
+In \MKIV, the integrated library is capable of processing
+thousands of graphics per second, including conversion. The
+preliminary tests (which involved no extensions) involved graphics
+with 10 random circles drawn with penshapes in random colors, and
+the thoughput was around 2000 such graphics per second on a
+2.3 MHz Core Duo:
+
+\startlinecorrection[blank]
+\hbox to \textwidth{\strut\dorecurse{5}{\startMPcode
+numeric w ; w := \the\textwidth/6 ;
+for k:=1 upto 10 :
+ draw fullcircle
+ scaled uniformdeviate(w)
+ withpen pencircle xscaled (w/20) yscaled (w/40) rotated 30
+ withcolor (red/(k/4)) ;
+endfor ;
+setbounds currentpicture to fullsquare scaled w ;
+\stopMPcode\hss}\unskip}
+\stoplinecorrection
+
+In practice there will be some more overhead involved than in the
+tests. For instance, in \CONTEXT\ information about the current state
+of \TEX\ has to be passed on also: page dimensions, font information,
+typesetting related parameters, preamble code, etc.
+
+The whole \TEX\ interface is written around one process function:
+
+\starttyping
+metapost.graphic(metapost.format("metafun"),"mp code")
+\stoptyping
+
+optionally a preamble can be passed as the third argument.
+This one function is used in several other macros, like:
+
+\starttyping
+\startMPcode ... \stopMPcode
+\startMPpage ... \stopMPpage
+\startuseMPgraphic {name} ... \stopuseMPgraphic
+\startreusableMPgraphic{name} ... \stopreusableMPgraphic
+\startuniqueMPgraphic {name} ... \stopuniqueMPgraphic
+
+\useMPgraphic{name}
+\reuseMPgraphic{name}
+\uniqueMPgraphic{name}
+\stoptyping
+
+The user interface is downward compatible: in \MKIV\ the same
+top-level commands are provided as in \MKII. However, the
+(previously required) configuration macros and flags are obsolete.
+
+This time, the conclusion is that the impact on \CONTEXT\ is immense:
+The code for embedding graphics is very clean, and the running time
+for graphics inclusion is now negligible. Support for text in graphics is
+more natural now, and takes no runtime either (in \MKII\ some
+parsing in \TEX\ takes place, and if needed long lines are split;
+all this takes time).
+
+In the styles that \PRAGMA\ uses internally, there is support for the
+generation of placeholders for missing graphics. These placeholders
+are \METAPOST\ graphics that have some 60 randomly scaled circles with randomized
+colors. The time involved in generating 50 such graphics is (on Hans'
+machine) some 14 seconds, while in \LUATEX\ only half a second is needed.
+
+\startlinecorrection[blank]
+\hbox to \textwidth \bgroup
+\hss\dorecurse{4}{\externalfigure[dummy][width=.2\textwidth]\hss}%
+\egroup
+\stoplinecorrection
+
+Because \LUATEX\ needs more startup time and deals with larger fonts
+resources, \PDFTEX\ is generally faster, but now that we have \MPLIB,
+\LUATEX\ suddenly is the winner.
+
+% We end this article by showing a few graphics. \CONTEXT\ ships with a module
+% that permits tracking of resource usage. Users can add the following line
+% to their document:
+
+% \starttyping
+% \usemodule[timing]
+% \stoptyping
+
+% After that one can use commands like
+
+% \starttyping
+% \ShowNamedUsage{\jobname-luatex-progress}{luastate_bytes}{elapsed_time}
+% \ShowNamedUsage{\jobname-luatex-progress}{dyn_used}{elapsed_time}
+% \ShowNamedUsage{\jobname-luatex-progress}{str_ptr}{elapsed_time}
+% \ShowNamedUsage{\jobname-luatex-progress}{pdf_literal}{elapsed_time}
+% \ShowNamedUsage{\jobname-luatex-progress}{glyph}{elapsed_time}
+% \stoptyping
+
+% In this document, \LUA\ memory usage is as follows. The blue lines
+% represent runtime, on Hans' machine some 3.5 seconds, including
+% startuptime, which clearly shows in the graphic. Keep in mind that
+% garbage collection only happens at certain moment, so \LUA\ memory
+% usage is normally a sawtooth graphic. The horizontal axis reflects the
+% number of pages.
+
+% \startlinecorrection[blank]
+% \ShowNamedUsage{\jobname-luatex-progress}{luastate_bytes}{elapsed_time}
+% \stoplinecorrection
+
+% Dynamic memory usage of \TEX\ grows a bit because at the \TEX\ end we need
+% to store data as well.
+
+% \startlinecorrection[blank]
+% \ShowNamedUsage{\jobname-luatex-progress}{dyn_used}{elapsed_time}
+% \stoplinecorrection
+
+% Currently we use \type {\pdfliteral}, which means that all
+% literals go through \TEX's tokenizer and string pool. With large
+% graphics this can be a real memory hog.
+
+% Unfortunately not all this memory is freed, so eventually Hartmut
+% Henkel (the third member of the \LUATEX\ team) will reimplement
+% this part of the backend.
+
+% \startlinecorrection[blank]
+% \ShowNamedUsage{\jobname-luatex-progress}{str_ptr}{elapsed_time}
+% \stoplinecorrection
+
+% Just to complete this picture, we show the usage of literals next. Although
+% the converter collects as much data as possible before flushing, we see
+% some peaks.
+
+% \startlinecorrection[blank]
+% \ShowNamedUsage{\jobname-luatex-progress}{pdf_literal}{elapsed_time}
+% \stoplinecorrection
+
+% Compare this to the glyph usage. Indeed: the more graphics we use, the
+% less glyphs we encounter.
+
+% \startlinecorrection[blank]
+% \ShowNamedUsage{\jobname-luatex-progress}{glyph}{elapsed_time}
+% \stoplinecorrection
+
+% Of course these graphics were integrated, generated and converted
+% using \MPLIB.
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/mk/mk-nicetoknow.tex b/doc/context/sources/general/manuals/mk/mk-nicetoknow.tex
new file mode 100644
index 000000000..2c0d4967f
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-nicetoknow.tex
@@ -0,0 +1,77 @@
+% language=uk
+
+\environment mk-environment
+
+\startcomponent mk-nicetoknow
+
+\chapter{Nice to know}
+
+\section{Tricky ligatures}
+
+Getting the 1.06 release of Latin Modern out in the wild took some discussion and
+testing. Not only were the names (internal names as well as file names) changed in
+such a way that multiple paplications could deal with it, but also some more
+advanced ligature trickery was added.
+
+\startbuffer
+\definefontfeature
+ [ijtest]
+ [mode=node,
+ script=latn,language=nld,strategy=3,
+ liga=yes,kern=yes]
+
+\definefont
+ [ijfont]
+ [name:lmroman10regular*ijtest at 36pt]
+
+\start \ijfont \setstrut fijn ijsje fiets flink effe\stop
+\stopbuffer
+
+\typebuffer
+
+This bit of Dutch shows up as:
+
+\getbuffer
+
+Do you see the trick? There are both an ij and an fi ligature, but we need to prevent
+the ij ligature in fijn. Of course not all fonts have this feature, which indicated
+that you can never depend on it.
+
+\section {Herds}
+
+A while ago, Duane, Taco and I published the Cow Font. It's non||trivial to
+cook up a font made of cows, but of course Mojca Miklavec (who else) wants
+to typeset something Slovenian in this font. Now, the problem is that in
+\MKIV\ we don't have fallback characters, or more precisely, we don't make
+\UTF\ characters active and accent composing commands are mapped onto \UTF.
+
+This means that nothing will show up when we have no characters in the
+defined fonts. For the moment we stick to simple virtual fonts but
+because we can use node lists in virtual fonts, in the near future we will
+cook up a way to create arbitrary fallback characters.
+
+The following example demonstrates how to \quote {complete} a font that misses
+glyphs.
+
+\startbuffer
+\definefontfeature[coward] [kern=yes,ligatures=yes]
+\definefontfeature[cowgirl][kern=yes,ligatures=yes,compose=yes]
+
+\definefontsynonym [cows] [koeieletters.afm*coward]
+\definefontsynonym [herd] [koeieletters.afm*cowgirl]
+
+\blank[3*medium]
+\dontleavehmode\hbox{\definedfont[cows sa 5](č)(š)(ž)}
+\blank[3*medium]
+\dontleavehmode\hbox{\definedfont[herd sa 5](č)(š)(ž)}
+\blank[3*medium]
+\dontleavehmode\hbox{\definedfont[herd sa 5](\v{c})(\v{s})(\v{z})}
+\stopbuffer
+
+\typebuffer
+
+As expected (at least by me) the first line has no compose characters.
+
+\getbuffer
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/mk/mk-nodes.tex b/doc/context/sources/general/manuals/mk/mk-nodes.tex
new file mode 100644
index 000000000..fb59ec05c
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-nodes.tex
@@ -0,0 +1,462 @@
+% language=uk
+
+\startcomponent mk-nodes
+
+\environment mk-environment
+
+\chapter {Nodes and attributes}
+
+\subject{introduction}
+
+Here we will tell a bit about the development of node access in \LUATEX. We
+will also introduce attributes, a feature closely related to nodes. We assume
+that you are somewhat familiar with \TEX's nodes: glyphs, kerns, glue, penalties,
+whatsits and friends.
+
+\subject{tables}
+
+Access to node lists has been implemented rather early in the development because
+we needed it to fulfil the objectives of the Oriental \TEX\ project. The first
+implementation used nested tables, indexed by number. In that approach, the first
+entry in each node indicated the type in string format. At that time a horizontal
+list looked as follows:
+
+\starttyping
+list = {
+ [1] = "hlist",
+ [2] = 0,
+ ...
+ [8] = {
+ [1] = {
+ [1] = "glyph",
+ ...
+ },
+ [2] = {
+ ...
+ }
+}
+\stoptyping
+
+Processing such lists is rather convenient since we can use the normal table
+iterators. Because in practice only a few entries of a node are accessed, working
+with numbers is no real problem: in slot~1 we have the type, en in the
+case of a horizontal or vertical list, we know that slot~8 is either empty or
+a table. Looping over the list is done with:
+
+\starttyping
+for i, node in ipairs(list) do
+ if node[1] == "glyph" then
+ list[i][5] = string.byte(string.upper(string.char(node[5])))
+ end
+end
+\stoptyping
+
+Node processing code hooks into the box packagers and paragraph builder and
+a few more places. This means that when using the table approach a lot of
+callbacks take place where \TEX\ has to convert to and from \LUA. Apart from
+processing time, we also have to deal with garbage collection then and on an older
+machine with insufficient memory interesting bottlenecks show up. Therefore some
+following optimizations were implemented at the \TEX\ end of the game.
+
+Side note concerning speed: when memory of processing speed is low, runtime can
+increase five to tenfold compared to \PDFTEX\ when one does intensive node
+manipulations. This is due to garbage collection at the \LUA\ end and memory
+(de)allocation at the \TEX\ end. There is not much we can do about that. Interfacing
+has a price and hardware is more powerful than when \TEX\ was written. Processing
+the \TEX\ book using no callbacks is not that much slower than using a traditional
+\TEX\ engine. However, nowadays fonts are more extensive, demands for special
+features more pressing and that comes at a price.
+
+When the list is not changed, the callback function can return the value \type
+{true}. This signals \TEX\ that it can keep the original list. When the list is
+empty, the callback function can return the value \type {false}. This signals
+\TEX\ that the list can be discarded.
+
+In order to minimize conversions and redundant processing, nested lists were
+not passed as table but as a reference. One could expand such a list when
+needed. For instance, when one hooks the same function in the \type
+{hpack_filter} and \type {pre_linebreak_filter} callbacks, this way one can be
+pretty sure that each node is only processed once. Boxed material that is part
+of the paragraph stream first enters the box packers and then already is
+processed before it enters the paragraph callback. Of course one can decide the
+expand the referred sublist and process it again. Keep in mind that we're still
+talking of a table approach, but we're slowly moving away from big conversions.
+
+In principle one can insert and delete nodes in such a list but given that
+the average length of a list representing a page is around 4000, you can
+imagine that moving around a large amount of data is not that efficient. In order
+to cope with this, we experimented a lot and came to solutions which will be
+discussed later on.
+
+At the \LUA\ end some tricks were used to avoid the mentioned insertion and
+deletion penalty. When a node was deleted, we simply set its value to \type
+{false}. Deleting all glyphs then became:
+
+\starttyping
+for i, node in ipairs(list) do
+ if node[1] == "glyph" then
+ list[i] = false
+ end
+end
+\stoptyping
+
+When \TEX\ converted a \LUA\ table back into its internal representation, it
+ignored such false nodes.
+
+For insertion a dummy node was introduced at the \LUA\ end. The next code
+duplicates the glyphs.
+
+\starttyping
+for i, node in ipairs(list) do
+ if node[1] == "glyph" then
+ list[i] = { 'inline', 0, nil, { node, node } }
+ end
+end
+\stoptyping
+
+Just before we passed the resulting list back to \TEX\ we collapsed these
+inline pseudo nodes. This was a rather fast operation.
+
+So far so good. But then we introduced attributes and keeping track of them
+as well as processing them takes quite some processing power. Nodes with
+attributes then looked like:
+
+\starttyping
+someglyph = {
+ [1] = "glyph", -- type
+ [2] = 0, -- subtype
+ [3] = { [1] = 5, [4] = 10 }, -- attributes
+ [4] = 88, -- slot
+ [5] = 32 -- font
+}
+\stoptyping
+
+Constructing attribute tables for each node is costly in terms of memory usage
+and processing time and we found out that the garbage collector was becoming
+a bottleneck, especially when resources are thin. We will go into more detail
+about attributes elsewhere.
+
+\subject{lists}
+
+At the same time that we discussed these issues, new Dutch word lists (adapted
+spelling) were published and we started wondering if we could use such lists
+directly for hyphenation purposes instead of relying on traditional patterns. Here
+the first observation was that handling these really huge lists is no problem at
+all. Okay, it costs some memory but we only need to load one of maybe a few of
+these lists. Hyphenating a paragraph using tables with hyphenated words and
+processing the paragraph related node list is not only fast, it also gives us the
+opportunity to cross font boundaries. Of course there are kerns and ligatures to
+deal with but this is no big deal. At least it can be an alternative or addendum
+to the current hyphenator. Some languages have very small pattern files or a very
+systematic approach to hyphenation so there is no reason to abandon the traditional
+ways in all cases. Take your choice.
+
+When experimenting with the new implementation we tested the performance by letting
+\LUA\ take care of hyphenation, spell checking (marking words) and adding
+inter||character kerns. When playing with big lists of words we found out that the
+caching mechanism could not be used due to some limitations in the \LUA\ byte code
+interpreter, so eventually we ended up with a dedicated loader.
+
+However, again we ran into performance problems when lists became more complex. And so,
+instead of converting \TEX\ datastructures into \LUA\ tables userdata types came into
+view. Taco already had reimplemented the node memory management, so a logical next step
+was to reimplement the callbacks and box related code to deal with nodes as linked lists.
+Since this is now the fashion in \LUATEX, you may forget the previous examples, although
+it is not that hard to introduce table representations again once we need them.
+
+Of course this resulted in an adaption to the regular \TEX\ code but a nice side effect
+was that we could now use fields instead of indexes into the node data structure. There
+is a small price to pay in terms of performance, but this can be compensated by clever
+programming.
+
+\starttyping
+someglyph = {
+ type = 41,
+ subtype = 0,
+ attributes = <attributes>,
+ char = 88,
+ font = 32
+}
+\stoptyping
+
+Attributes themselves are userdata. The same is true for components that are present
+when we're for instance dealing with ligatures.
+
+As you can see, in the field variant, a type is a number. In practice, because \LUA\
+hashes strings, working with strings is as fast when comparing, but since we now have
+the more abstract type indicator, we stick with the numbers, which saves a few conversions.
+When dealing with tables we get code like:
+
+\starttyping
+function loop_over_nodes(list)
+ for i, n in ipairs(list)
+ local kind = n[1]
+ if kind == "hlist" or kind == "vlist" then
+ ...
+ end
+ end
+end
+\stoptyping
+
+But now that we have linked lists, we get the following. Node related methods
+are available in the \type {node} namespace.
+
+\starttyping
+function loop_over_nodes(head)
+ local hlist, vlist = node.id('hlist'), node.id('vlist')
+ while head do
+ local kind = head.type
+ if kind == hlist or kind == vlist then
+ ...
+ end
+ head = head.next
+ end
+end
+\stoptyping
+
+Using an abstraction (i.e.\ a constant representing \type {hlist} looks
+nice here, which is why numbers instead of strings are used. The indexed
+variant is still supported and there we have strings.
+
+Going from a node list (head node) to a table is not that complex. Sometimes
+this can be handy because manipulating tables is more convenient that messing
+around with userdata when it comes down to debugging or tracing.
+
+\starttyping
+function nodes.totable(n)
+ function totable(n)
+ local f, tt = node.fields(n.id,n.subtype), { }
+ for _,v in ipairs(f) do
+ local nv = n[v]
+ if nv then
+ local tnv = type(nv)
+ if tnv == "string" or tnv == "number" then
+ tt[v] = nv
+ else -- userdata
+ tt[v] = nodes.totable(nv)
+ end
+ end
+ end
+ return tt
+ end
+ local t = { }
+ while n do
+ t[#t+1] = totable(n)
+ n = n.next
+ end
+ return t
+end
+\stoptyping
+
+It will be clear that here we collect data in \LUA\ while treating nodes
+as userdata keeps most of it at the \TEX\ side and this is where the gain in
+speed comes from.
+
+\subject{side effects}
+
+While experimenting with node lists Taco and I ran into a peculiar side effect.
+One of the tests involved adding kerns between glyphs (inter character spacing
+as sometimes uses in titles in a large print). When applied to a whole document
+we noticed that at some places (words) the added kerning was gone. We used
+the subtype zero kern (which is most efficient) and in the process of hyphenating
+\TEX\ removes these kerns and inserts them later (but then based on the
+information stored in the font.
+
+The reason why \TEX\ removes the font related kerns, is the following. Consider
+the code:
+
+\starttyping
+\setbox0=\hbox{some text} the text \unhcopy0 has width \the\wd0
+\stoptyping
+
+While constructing the \type {\hbox}, \TEX\ will apply kerning as dictated
+by the font. Otherwise the width of the box would not be correct. This means
+that the node list entering the linebreak machinery contains such kerns.
+Because hyphenating works on words \TEX\ will remove these kerns in the
+process of identifying the words. It creates a string, removes the original
+sequence of nodes, determines hyphenation points, and add the result to
+the node list. For efficiency reasons \TEX\ will only look at places
+where hyphenation makes sense.
+
+Now, imagine that we add those kerns in the callback. This time, all characters
+are surrounded by kerns (which we gave subtype zero). When \TEX\ is determining
+feasable breakpoints (hyphenation), it will remove those kerns, but only at
+certain places. Because our kerns are way larger than the normal interglyph
+kerns, we suddenly end up with an intercharacter spaced paragraph that has
+some words without such spacing but the font dictated kerns.
+
+\blank
+m o s t\quad w o r d s\quad a r e\quad s p a c e d\quad b u t\quad
+some words\quad a r e\quad n o t
+\blank
+
+Of course a solution is to use a different kern, but at least this shows that
+the moment of processing nodes as well as the kind of manipulations need
+to be chosen with care.
+
+Kerning is a nasty business anyway. Imagine the following word:
+
+\starttyping
+effe
+\stoptyping
+
+When typeset this turns into three characters, one of them being a ligature.
+
+\starttyping
+[char e] [liga ff (components f f)] [char e]
+\stoptyping
+
+However, in Dutch, such a word hyphenates as:
+
+\starttyping
+ef-fe
+\stoptyping
+
+This means that in the node list we eventually find something:
+
+\starttyping
+[char e] [disc (f-) (f) (skip 1)] [liga ff (components f f)] [char e]
+\stoptyping
+
+So, eventually we need to kern between the character sequences [e,f-],
+[e,ff], [ff,e] and [f,e].
+
+\subject {attributes}
+
+We now arrive at attributes, a new property of nodes. Before we explain a
+bit more what can be done with them, we show how to define a new attribute
+and toggle it. In the following example the \type {\visualizenextnodes} macro
+is part of \CONTEXT\ \MKIV.
+
+\startbuffer
+\newattribute\aa
+\newattribute\ab
+\visualizenextnodes \hbox {\aa1 T{\ab3\aa2 E}X}
+\stopbuffer
+
+\typebuffer
+
+\placefigure
+ [page]
+ []
+ {\type{\hbox {\aa1 T{\ab3\aa2 E}X \ab 4}}}
+ {\switchtobodyfont[7pt]%
+ \scale[width=.9\textwidth]{\framed
+ [offset=2ex,foregroundcolor=red]
+ {\startsimplecolumns[n=2]
+ \resetglobalattributes
+ \resetlocalattributes
+ \getbuffer
+ \stopsimplecolumns}}}
+
+For the sake of this example, we start the allocation at 2000 because we don't
+want to interfere with attributes already defined in \CONTEXT. The node list
+resulting from the box is shown at the next page. As you can see here, internally
+attributes become a linked list assigned to the \type {attr} field. This means
+that one has to do some work in order to inspect attributes.
+
+\starttyping
+function has_attribute(n,a)
+ if n and n.attr then
+ n = n.attr.next
+ while n do
+ if n.number == a then
+ return n.value
+ end
+ n = n.next
+ end
+ else
+ return false
+ end
+end
+\stoptyping
+
+The previous function can be used in tests like:
+
+\starttyping
+local total = 0
+while n do
+ if has_attribute(n,2000) then
+ total = total + 1
+ end
+ n = n.next
+end
+texio.write_nl(string.format(
+ "attribute 2000 has been seen % times", total
+))
+\stoptyping
+
+When implementing nodes and attributes we did rather extensive tests and
+one of the test documents implemented some preliminary color mechanism
+based on attributes. When handling the colors the previous function was
+called some 300.000 times and the total node processing time (which also
+involved font handling) was some 2.9 seconds. Implementing this function
+as a helper brought down node processing time to 2.4 seconds. Of course
+the gain depends on the complexity of the list (nesting) and the number
+of attributes that are set (upto 5 per node in this test). A few more helper
+functions are available, some are for convenience, some gain us some speed.
+
+The nice thing about attributes is that they obey grouping. This means that
+in the following sequence:
+
+\starttyping
+x {\aa1 x \ab2 x} x
+\stoptyping
+
+the attributes are assigned like:
+
+\starttyping
+x x(201=1) x(201=1,202=2) x
+\stoptyping
+
+Internally \LUATEX\ does some optimizations with respect to assigning
+a sequence of similar attributes, but you should keep in mind that in practice
+the memory usage will be larger when using many attributes.
+
+We played with color and other properties, hyphenation based on word lists
+(and tracking languages with attributes) and or special algorithms (url
+hyphenation), spell checking (marking words as being spelled wrongly), and
+a few more things. This involved handling attributes in several callbacks
+resulting in the insertion or deletion of nodes.
+
+When using attributes for color support, we have to insert \type {pdfliteral} whatsit
+nodes at some point depending on the current color. This also means that the
+time spent with color support at the \TEX\ end will be compensated by
+time spent at the \LUA\ side. It also means that because housekeeping to do
+with colors spanning pages and columns is gone because from now on color
+information travels with the nodes. This saves quite some ugly code.
+
+Because most of the things that we want to do with attributes (and we have
+quite an agenda) are already nicely isolated in \CONTEXT, attributes will
+find their way rather soon in \CONTEXT\ \MKIV.
+
+Let's end with an observation. Attributes themselves are not something
+revolutionary. However, if you had to deal with them in \TEX, i.e.\
+associate them with for instance actions in during shipout, quite some
+time would have been spent on getting things right. Even worse: it would
+have lead to never ending discussions in the \TEX\ community and as
+such it's no surprise that something like this never showed up. The fact that
+we can use \LUA\ and manipulate node lists in many ways frees us from
+much discussion.
+
+We are even considering in future versions of \LUATEX\ to turn font, language
+and direction related information into attributes (in some private range) so this
+story is far from finished. As a teaser, consider the following line of thinking.
+
+Currently when a character enters the machinery, it becomes a glyph node. Among
+other characteristics, this node contains information about the font and the
+slot in that font which is used to represent that character. In a similar fashion,
+a space becomes glue with a measure probably related to the current font.
+
+However, with access to nodes and attributes, you can imagine the following
+scenario. Instead of a font (internally represented by a font id), you use an
+attribute referring to a font. At that time, the font field us just pointing to
+\TEX's null font. In a pass over the node list, you resolve the character and their
+attributes to a fonts and (maybe) other characters. Spacing can be postponed as well
+and instead of real glue values we can use multipliers and again attributes point
+the way to resolve them.
+
+Of course the question is if this is worth the trouble. After all typesetting is
+about fonts and there is no real reason not to give them a special place.
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/mk/mk-open.tex b/doc/context/sources/general/manuals/mk/mk-open.tex
new file mode 100644
index 000000000..648c03bf3
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-open.tex
@@ -0,0 +1,276 @@
+% language=uk
+
+\startcomponent mk-open
+
+\environment mk-environment
+
+\chapter {\OPENTYPE: too open?}
+
+In this chapter I will reflect on \OPENTYPE\ from within my
+limited scope and experience. What I'm writing next is my personal
+opinion and I may be wrong in many ways.
+
+Until recently installing fonts in a \TEX\ system was not
+something that a novice user could do easily. First of all, the
+number of files involved is large:
+
+\startitemize
+
+\item If it is a bitmap font, then for each size used there is a
+\PK\ file, and this is reflected in the suffix, for instance \type
+{pk300}.
+
+\item If it is an outline font, then there is a \TYPEONE\ file
+with suffix \type {pfb} or sometimes glyphs are taken from
+\OPENTYPE\ fonts (with \type {ttf} or \type {otf} as suffix). In
+the worst case such wide fonts have to be split into smaller ones.
+
+\item Because \TEX\ needs information about the dimensions of the
+glyphs, a metric file is needed; it has the suffix \type {tfm}. There
+is limit of 256 characters per font.
+
+\item If the font lacks glyphs it can be turned into a virtual
+font and borrow glyphs from other fonts; this time the suffix is
+\type {vf}.
+
+\item If no such metric file is present, one can make one from a
+file that ships with the fonts; it has the suffix \type {afm}.
+
+\item In order to include the font in the final file, the backend
+to \TEX\ has to match glyph references to the glyph slots in the
+font file, and for that it needs an encoding vector, for
+historical reasons this is a \POSTSCRIPT\ blob in a file with
+suffix \type {enc}.
+
+\item This whole lot is associated in a map file, with suffix
+\type {map}, which couples metric files to encodings and
+to font files.
+
+\stopitemize
+
+Of course the user also needs \TEX\ code that defines the font,
+but this differs per macro package. If the user is lucky the
+distributions ships with files and definitions of his/her
+favourite fonts, but otherwise work is needed. Font support in
+\TEX\ systems has been complicated by the facts that the first
+\TEX\ fonts were not \ASCII\ complete, that a 256 limit does not
+go well with multilingual typesetting and that most fonts lacked
+glyphs and demanded drop|-|ins. Users of \CONTEXT\ could use
+the \type {texfont} program to generate metrics and map file
+for traditional \TEX\ but this didn't limit the number of files.
+
+In modern \TEX\ engines, like \XETEX\ and \LUATEX, less files are
+needed, but even then some expertise is needed to use \TYPEONE\
+fonts. However, when \OPENTYPE\ fonts are used in combination with
+\UNICODE, things become easy. The (one) fontfile needs to be
+put in a location that the \TEX\ engine knows and things
+should work.
+
+In \LUATEX\ with \CONTEXT\ \MKIV\ support for traditional
+\TYPEONE\ fonts is also simplified: only the \type {pfb} and \type
+{afm} files are needed. Currently we only need \type {tfm} files
+for math fonts but that will change too. Virtual fonts can be
+built at runtime and we are experimenting with real time font
+generation. Of course filenames are still just as messy and
+inconsistent as ever, so other tools are still needed to figure
+out the real names of fonts.
+
+So, what is this \OPENTYPE\ and will it really make \TEX ies life
+easier? The qualification \quote {open} in \OPENTYPE\ carries
+several suggestions:
+
+\startitemize
+
+\item the format is defined in an open way, everybody can read the
+specification and what is said there is clear
+
+\item the format is open in the sense that one can add additional
+features, so there are no limits and/or limits can be shifted
+
+\item there is an open community responsible for the advance of this
+specification and commercial objectives don't interfere and/or lead
+to conflicts
+
+\stopitemize
+
+Is this true or not? Indeed the format is defined in the open
+although the formal specification is an expensive document. A free
+variant is available at the Microsoft website but it takes some
+effort to turn that into a nicely printable document. What is said
+there is quite certainly clear for the developers, but it takes quite
+some efforts to get the picture. The format is binary so one
+cannot look into the file and see what happens.
+
+The key concept is \quote {features}, which boils down to a
+collection of manipulations of the text stream based on rules laid
+down in the font. These can be simple rules, like \quote {replace
+this character by its smallcaps variant} or more complex, like
+\quote {if this character is followed by that character, replace
+both by yet another}. There are currently two classes of features:
+substitutions and (relative) positioning. One can indeed add
+features so there seem to be no limits.
+
+The specification is a hybrid of technologies developed by
+Microsoft and Adobe with some influence by Apple. These
+companies may have conflicting interests and therefore this may
+influence the openness.
+
+So, in practice we're dealing with a semi-open format, crippled by
+a lack of documentation and mostly controlled by some large
+companies. These characteristics make that developing support for
+\OPENTYPE\ is not that trivial. Maybe we should keep in mind that
+this font format is used for word processors (no focus on
+typography), desk top publishing (which permits in-situ tweaking)
+and rendering text in graphical user interfaces (where script and
+language specific rendering is more important than glyph
+variants). Depending on the use features can be ignored, or
+applied selectively, of even compensated.
+
+Anyhow, a font specification is only part of the picture. In
+order to render it useful we need support in programs that display
+and typeset text and of course we need fonts. And in order to make
+fonts, we need programs dedicated to that task too.
+
+Let's go back for a moment to traditional \TEX. A letter can be
+represented by its standard glyph or by a smallcaps variant. A
+digit can be represented by a shape that sits on the baseline, or
+one that may go below: an oldstyle numeral. Digits can have the
+same width, or be spaced proportionally. There can be special small
+shapes for super- and subscripts. In traditional \TEX\ each such
+variant demanded a font. So, say that one wants normal shapes,
+smallcaps and oldstyle, three fonts were needed and this for each
+of the styles normal, bold, italic, etc. Also a font switch is
+needed in order to get the desired shapes.
+
+In an \OPENTYPE\ universe normal, smallcaps and oldstyle shapes
+can be included in one font and they are organized in features. It
+will be clear that this will make things easier for users: if one
+buys a font, there is no longer a need to sort out what file has
+what shapes, there is no longer a reason for reencodings because
+there is no 256 limit, map files are therefore obsolete, etc.
+Only the \TEX\ definition part remains, and even that is easier
+because one file can be used in different combinations of
+features.
+
+One of the side effects of the already mentioned semi|-|open
+character of the standard is that we cannot be completely sure
+about how features are implemented. Of course one can argue that
+the specification defines what a feature is and how a font should
+obey it, but in practice it does not work out that way.
+
+\startitemize
+
+\item Nobody forces a font designer (or foundry) to implement
+features. And if a designer provides variants, they may be
+incomplete. In the transition from \TYPEONE\ to \OPENTYPE\ fonts
+may even have no features at all.
+
+\item Some advanced features, like fractions, demand extensive
+substitution rules in the font. The completeness may depend on the
+core application the font was made for, or the ambition of the
+programmer who assists the designer, or on the program that is
+used to produce the font.
+
+\item Many of the features are kind of generic, in the sense that
+they don't depend on heuristics in the typesetting program: it's
+just rules that need to be applied. However, the typesetting
+program may be written in such a way that it only recognized
+certain features.
+
+\item Some features make assumptions, for instance in the sense
+that they expect the program to figure out what the first character
+of a word is. Other features only work well if the program implements
+the dedicated machinery for it.
+
+\item Features can originate from different vendors and as a
+result programs may interpret them differently. Developers of
+programs may decide only to support certain features, even if
+similar features can be supported out of the box. In the worst
+case a symbiosis between bugs in programs and bugs in fonts
+from the same vendor can lead to pseudo standards.
+
+\item Designers (or programmers) may assume that features are
+applied selectively on a range of input, but in automated
+workflows this may not be applicable. Style designers may come up with
+specifications that cannot be matched due to fonts that have only
+quick and dirty rules.
+
+\item Features can be specific for languages and scripts. There are
+many languages and many scripts and only a few are supported. Some
+features cover similar aspects (for instance ligatures) and where
+a specific rendering ends up in the language, script, feature
+matrix is not beforehand clear.
+
+\stopitemize
+
+In some sense \OPENTYPE\ fonts are intelligent, but they are not
+programs. Take for instance the frac feature. When enabled, and
+when supported in the font, it {\em may} result in 1/2 being
+typeset with small symbols. But what about a/b? or this/that? In
+principle one can have rules that limit this feature to numerals
+only or to a simple cases with a few characters. But I have seen
+fonts that produce garbage when such a feature is applied to the
+whole text. Okay, so one should apply it selectively. But, if
+that's the way to go, we could as well have let the typesetting
+program deal with it and select superior and inferior glyphs from
+the font. In that case the program can deal with fuzzy situations
+and we're not dependent on the completeness of rules. In practice,
+at least for the kind of applications that I have for \TEX, I
+cannot rely on features being implemented correctly.
+
+For ages \TEX ies have been claiming that their documents can be
+reprocessed for years and years. Of course there are dependencies
+on fonts and hyphenation patterns, but these are relatively
+stable. However, in the case of \OPENTYPE\ we have not only
+shapes, but also rules built in. And rules can have bugs.
+Because fonts vendors don't provide automated updating as with
+programs, your own system can be quite stable. However, chances
+are that different machines have variants with better or worse
+rules, or maybe even with variants with features deleted.
+
+I'm sure that at some time Idris Samawi Hamid of the Oriental
+\TEX\ project (related to \LUATEX) will report on his experiences
+with font editors, feature editors, and typesetting engines in the
+process of making an Arabic font that performs the same way in all
+systems. Trial and error, rereading the specifications again and
+again, participating in discussions on forums, making special
+test fonts \unknown\ it's a pretty complex process. If you want to
+make a font that works okay in many applications you need to test
+your font with each of them, as the Latin Modern and \TEX\ Gyre
+font developers can tell you.
+
+This brings me to the main message of this chapter. On the one
+hand we're better of with \OPENTYPE\ fonts: installation is
+trivial, definitions are easy, and multi|-|lingual documents are
+no problem due to the fact that fonts are relatively complete.
+However, in traditional \TEX\ the user just used what came with
+the system and most decisions were already made by package
+writers. Now, with \OPENTYPE, users can choose features and this
+demands some knowledge about what they are, when they are supposed
+to be used (!), and what limitations they carry. In traditional
+\TEX\ the options were limited, but now there are many under user
+control. This demands some discipline. So, what we see is a shift
+from technology (installing, defining) to application (typography,
+quality). In \CONTEXT\ this has resulted in additional
+interfaces, like for instance dynamic feature switching, which
+decouples features from font definitions.
+
+It is already clear that \OPENTYPE\ fonts combined with \UNICODE\
+input will simplify \TEX\ usage considerably. Also, for macro
+writers things become easier, but they should be prepared to deal
+with the shortcomings on both \UNICODE\ and \OPENTYPE. For instance
+characters that belong together are not always organized
+logically in \UNICODE, which results for instance in math characters
+being (sort of) all over the place, which in turn means that in \TEX\
+characters can be either math or text, which in turn relates to the fonts
+being used, formatting etc. Als, macro package writers now need to take
+more languages and related interferences into account, but that's mostly
+a good thing, because it improves the quality of the output.
+
+It will be interesting to see how ten years from now \TEX\ macro
+packages deal with all the subtleties, exceptions, errors, and
+user demands. Maybe we will end up with as complex font support as
+for \TYPEONE\ with its many encodings. On the other hand, as with all
+technology, \OPENTYPE\ is not the last word on fonts.
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/mk/mk-optimization.tex b/doc/context/sources/general/manuals/mk/mk-optimization.tex
new file mode 100644
index 000000000..f398faf24
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-optimization.tex
@@ -0,0 +1,265 @@
+% language=uk
+
+\startcomponent mk-arabic
+
+\environment mk-environment
+
+\chapter{Optimization}
+
+\subject{quality of code}
+
+How good is the \MKIV\ code? Well, as good as I can make it. When you browse
+the code you will probably notice differences in coding style and this is a
+related to the learning curve. For instance the \type {luat-inp} module needs
+some cleanup, for instance hiding local function from users.
+
+Since benchmarking has been done right from the start there is probably not
+that much to gain, but who knows. When coding in \LUA\ you should be careful
+with defining global variables, since they may override something. In \MKIV\
+we don't guarantee that the name you use for variable will not be used at
+some point. Therefore, best operate in a dedicated \LUA\ instance, or operate
+in userspace.
+
+\starttyping
+do
+ -- your code
+end
+\stoptyping
+
+If you want to use your data later on, think of working this way (the example
+is somewhat silly):
+
+\starttyping
+userdata['your.name'] = userdata['your.name'] or { }
+
+do
+ local mydata = userdata['your.name']
+
+ mydata.data = {}
+
+ local function foo() return 'bar' end
+
+ function mydata.dothis()
+ mydata[foo] = foo()
+ end
+
+
+end
+\stoptyping
+
+In this case you can always access your user data while temporary
+variables are hidden. The \type {userdata} table is predefined. As is
+\type {thirddata} for modules that you may write. Of course this
+assumes that you create a namespace within these global tables.
+
+A nice test for checking global cluttering is the following:
+
+\starttyping
+for k, v in pairs(_G) do
+ print(k, v)
+end
+\stoptyping
+
+When you incidentally define global variables like \type {n} or \type {str}
+they will show up here.
+
+\subject{clean or dirty}
+
+Processing the first 120 pages of this document (16 chapters) takes some 23.5
+seconds on a dell M90 (2.3GHZ, 4GB mem, Windows Vista Ultimate). A rough estimate
+of where \LUA\ spends its time is:
+
+\starttabulate[|l|c|]
+\NC \bf acticvity \NC \bf sec \NC \NR
+\NC input load time \NC 0.114 \NC \NR
+\NC fonts load time \NC 6.692 \NC \NR
+\NC mps conversion time \NC 0.004 \NC \NR
+\NC node processing time \NC 0.832 \NC \NR
+\NC attribute processing time \NC 3.376 \NC \NR
+\stoptabulate
+
+Font loading takes some time, which is nu surprise because we load huge Zapfino, Arabic
+and \CJK\ fonts and define many instances of them. Some tracing learns that there
+are some 14.254.041 function calls, of which 13.339.226 concern functions that are
+called more than 5.000 times. A total of 62.434 function is counted, which is
+a result of locally defined ones.
+
+A rough indication of this overhead is given by the following test code:
+
+\starttyping
+local a,b,c,d,e,f = 1,2,3,4,5,6
+
+function one (a) local n = 1 end
+function three(a,b,c) local n = 1 end
+function six (a,b,c,d,e,f) local n = 1 end
+
+for i=1,14254041 do one (a) end
+for i=1,14254041 do three(a,b,c) end
+for i=1,14254041 do six (a,b,c,d,e,f) end
+\stoptyping
+
+The runtime for these tests (excluding startup) is:
+
+\starttabulate[|l|l|]
+\NC one argument \NC 1.8 seconds \NC \NR
+\NC three arguments \NC 2.0 seconds \NC \NR
+\NC six arguments \NC 2.3 seconds \NC \NR
+\stoptabulate
+
+So, the of the total runtime for this document we easily spend a couple
+of seconds on function calls, especially in node processing and attribute
+resolving. Does this mean that we need to change the code and follow a more
+inline approach? Eventually we may optimize some code, but for the moment
+we keep things as readable as possible, and even then much code is still
+quite complex. Font loading is often constant for a document anyway, and
+independent of the number of pages. Time spent on node processing depends on
+the script, and often processing intense scripts are typeset in a larger font and
+since they are less verbose than latin, this does not really influence
+the average time spent on typesetting a page. Attribute handling is probably
+the most time consuming activity, and for large documents the time spent on this
+is large compared to font loading and node processing. But then, after a few
+\MKIV\ development cycles the picture may be different.
+
+When we turned on tracing of function calls, if becomes clear where currently
+the time is spent in a document like this which demands complex Zapfino
+contextual analysis as well as Arabic analysis and feature application (both
+fonts demand node insertion and deletion). Of course using color also has a
+price. Handling weighted and conditional spacing (new in \MKIV) involves
+just over 10.000 calls to the main handler for 120 pages of this document.
+Glyph related processing of node lists needs 42.000 calls, and contextual
+analysis of \OPENTYPE\ fonts is good for 11.000 calls. Timing \LUA\ related
+tasks involves 2 times 37.000 calls to the stopwatch. Collapsing \UTF\ in
+the input lines equals the number of lines: 7700.
+
+However, at the the top of the charts we find calls to attribute related
+functions. 97.000 calls for handling special effects, overprint, transparency
+and alike, and another 24.000 calls for combined color and colorspace handling.
+These calls result in over 6.000 insertions of \PDF\ literals (this number is
+large because we show Arabic samples with color based tracing enabled). In
+case you wonder if the attribute handler can be made more efficient (we're
+talking seconds here), the answer is \quotation {possibly not}. This action
+is needed for each shipped out object and each shipped out page. If we divide
+the 24.000 (calls) by 120 (pages) we get 200 calls per page for color processing
+which is okay if you keep in mind that we need to recurse in nested horizontal
+and vertical lists of the completely made op page.
+
+\subject{serialization}
+
+When serializing tables, we can end up with very large tables, especially
+when dealing with big fonts like \quote{arabtype} or \quote {zapfino}. When
+serializing tables one has to find a compromise between speed of writing,
+effeciency of loading and readability. First we had (sub)tables like:
+
+\starttyping
+boundingbox = {
+ [1] = 0,
+ [2] = 0,
+ [3] = 100,
+ [4] = 200
+}
+\stoptyping
+
+I mistakingly assumed that this would generate an indexed table, but at \TUG\ 2007
+Roberto Ierusalimschy explained to me that this was not that efficient, since this
+variant boils down to the following byte code:
+
+\starttyping
+1 [1] NEWTABLE 0 0 4
+2 [2] SETTABLE 0 -2 -3 ; 1 0
+3 [3] SETTABLE 0 -4 -3 ; 2 0
+4 [4] SETTABLE 0 -5 -6 ; 3 100
+5 [5] SETTABLE 0 -7 -8 ; 4 200
+6 [6] SETGLOBAL 0 -1 ; boundingbox
+7 [6] RETURN 0 1
+\stoptyping
+
+This creates a hashed table. The following variant is better:
+
+\starttyping
+boundingbox = { 0, 0, 100, 200 }
+\stoptyping
+
+This results in:
+
+\starttyping
+1 [1] NEWTABLE 0 4 0
+2 [2] LOADK 1 -2 ; 0
+3 [3] LOADK 2 -2 ; 0
+4 [4] LOADK 3 -3 ; 100
+5 [6] LOADK 4 -4 ; 200
+6 [6] SETLIST 0 4 1 ; 1
+7 [6] SETGLOBAL 0 -1 ; boundingbox
+8 [6] RETURN 0 1
+\stoptyping
+
+The resulting tables are not only smaller in terms of bytes, but also
+are less memory hungry when loaded. For readability we write tables with
+only numbers, strings or boolean values in an inline||format:
+
+\starttyping
+boundingbox = { 0, 0, 100, 200 }
+\stoptyping
+
+The serialized tables are somewhat smaller, depending on how
+many subtables are indexed (boundary boxes, lookup sequences, etc.)
+
+\starttabulate[|r|r|l|]
+\NC \bf normal \NC \bf compact \NC \bf filename \NC \NR
+\NC 34.055.092 \NC 32.403.326 \NC arabtype.tma \NC \NR
+\NC 1.620.614 \NC 1.513.863 \NC lmroman10-italic.tma \NC \NR
+\NC 1.325.585 \NC 1.233.044 \NC lmroman10-regular.tma \NC \NR
+\NC 1.248.157 \NC 1.158.903 \NC lmsans10-regular.tma \NC \NR
+\NC 194.646 \NC 153.120 \NC lmtypewriter10-regular.tma \NC \NR
+\NC 1.771.678 \NC 1.658.461 \NC palatinosanscom-bold.tma \NC \NR
+\NC 1.695.251 \NC 1.584.491 \NC palatinosanscom-regular.tma \NC \NR
+\NC 13.736.534 \NC 13.409.446 \NC zapfinoextraltpro.tma \NC \NR
+\stoptabulate
+
+Since we compile the tables to bytecode, the effects are more
+spectacular there.
+
+\starttabulate[|r|r|l|]
+\NC \bf normal \NC \bf compact \NC \bf filename \NC \NR
+\NC 13.679.038 \NC 11.774.106 \NC arabtype.tmc \NC \NR
+\NC 886.248 \NC 754.944 \NC lmroman10-italic.tmc \NC \NR
+\NC 729.828 \NC 466.864 \NC lmroman10-regular.tmc \NC \NR
+\NC 688.482 \NC 441.962 \NC lmsans10-regular.tmc \NC \NR
+\NC 128.685 \NC 95.853 \NC lmtypewriter10-regular.tmc \NC \NR
+\NC 715.929 \NC 582.985 \NC palatinosanscom-bold.tmc \NC \NR
+\NC 669.942 \NC 540.126 \NC palatinosanscom-regular.tmc \NC \NR
+\NC 1.560.588 \NC 1.317.000 \NC zapfinoextraltpro.tmc \NC \NR
+\stoptabulate
+
+Especially when a table is partially indexed and hashed, readability is a bit
+less than normal but in practice one will seldom consult such tables in its verbose
+form.
+
+After going beta, users reported problems with scaling of the the Latin Modern and
+\TeX-Gyre fonts. The troubles originate in the fact that the \OPENTYPE\ versions of
+these fonts lack a design size specification and it happens that the Latin Modern
+fonts do have design sizes other than 10 points. Here the power of a flexible
+\TEX\ engine shows \unknown\ we can repair this when we load the font. In \MKIV\
+we can now define patches:
+
+\starttyping
+do
+ local function patch(data,filename)
+ if data.design_size == 0 then
+ local ds = (file.basename(filename)):match("(%d+)")
+ if ds then
+ logs.report("load otf",string.format("patching design size (%s)",ds))
+ data.design_size = tonumber(ds) * 10
+ end
+ end
+ end
+
+ fonts.otf.enhance.patches["^lmroman"] = patch
+ fonts.otf.enhance.patches["^lmsans"] = patch
+ fonts.otf.enhance.patches["^lmmono"] = patch
+end
+\stoptyping
+
+Eventually such code will move to typescripts instead of in the kernel code.
+
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/mk/mk-order.tex b/doc/context/sources/general/manuals/mk/mk-order.tex
new file mode 100644
index 000000000..1e6306c45
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-order.tex
@@ -0,0 +1,375 @@
+% language=uk
+
+\environment mk-environment
+
+\startcomponent mk-order
+
+\chapter{The order of things}
+
+Normally the text that makes up a paragraph comes directly from
+the input stream or macro expansions (think of labels). When \TEX\
+has collected enough content to make a paragraph, for instance
+because a \type {\par} token signals it \TEX\ will try to create
+one. The raw material available for making such a paragraph is
+linked in a list nodes: references to glyphs in a font, kerns
+(fixed spacing), glue (flexible spacing), penalties (consider them
+to be directives), whatsits (can be anything, e.g.\ \PDF\ literals
+or hyperlinks). The result is a list of horizontal boxes (wrappers with
+lists that represent \quote {lines}) and this is either wrapped in
+vertical box of added to the main vertical list that keeps the
+page stream.
+
+The treatment consists of four activities:
+
+\startitemize[packed]
+\item construction of ligatures (an f plus an i can become fi)
+\item hyphenation of words that cross a line boundary
+\item kerning of characters based on information in the font
+\item breaking the list in lines in the most optimal way
+\stopitemize
+
+The process of breaking into lines is also influenced by
+protrusion (like hanging punctuation) and expansion
+(hz-optimization) but here we will not take these processes
+into account. There are numerous variables that control
+the process and the quality.
+
+These activities are rather interwoven and optimized. For
+instance, in order to hyphenate, ligatures are to be decomposed
+and|/|or constructed. Hyphenation happens when needed. Decisions
+about optimal breakpoints in lines can be influenced by penalties
+(like: not to many hyphenated words in a row) and permitting extra
+stretch between words. Because a paragraph can be boxed and
+unboxed, decomposed and fed into the machinery again, information
+is kept around. Just imagine the following: you want to measure
+the width of a word and therefore you box it. In order to get the
+right dimensions, \TEX\ has to construct the ligatures and add
+kerns. However, when we unbox that word and feed it into the
+paragraph builder, potential hyphenation points have to be
+consulted and at such a point might lay between the characters
+that resulted in the ligature. You can imagine that adding (and
+removing) inter|-|character kerns complicates the process even
+more.
+
+At the cost of some extra runtime and memory usage, in \LUATEX\
+these steps are more isolated. There is a function that builts
+ligatures, one that kerns characters, and another one that
+hyphenates all words in a list, not just the ones that are
+candidate for breaking. The potential breakpoints (called
+discretionaries) can contain ligature information as well. The
+linebreak process is also a separate function.
+
+The order in which this happens now is:
+
+\startitemize[packed,intro]
+\item hyphenation of words
+\item building of ligatures from sequences of glyphs
+\item kerning of glyphs
+\item breaking all this into lines
+\stopitemize
+
+One can discuss endless about the terminology here: are we dealing
+with characters or with glyphs. When a glyph node is made, it
+contains a reference to a slot in a font. Because in traditional
+\TEX\ the number of slots is limited to 256 the relationship
+between characters in the input and the shape in the font, called
+glyph, is kind of indirect (the input encoding versus font
+encoding issue) while in \LUATEX\ we can keep the font in
+\UNICODE\ encoding if we want. In traditional \TEX, hyphenation is
+based on the font encoding and therefore glyphs, and although in
+\LUATEX\ this is still the case, there we can more safely talk of
+characters till we start mapping then to shapes that have no
+\UNICODE\ point. This is of course macro package dependent but in
+\CONTEXT\ \MKIV\ we normalize all input to \UNICODE\ exclusively.
+
+The last step is now really isolated and for that reason we can
+best talk in terms of preparation of the to-be paragraph when
+we refer to the first three activities. In \LUATEX\ these three
+are available as functions that operate on a node list. They each
+have their own callback so we can disable them by replacing the
+default functions by dummies. Then we can hook in a new function
+in the two places that matter: \type {hpack_filter} and \type
+{pre_linebreak_filter} and move the preparation to there.
+
+A simple overload is shown below. Because the first node is always
+a whatsit that holds directional information (and at some point in
+the future maybe even more paragraph related state info), we can
+safely assume that \type {head} does not change. Of course this
+situation might change when you start adding your own
+functionality.
+
+\starttyping
+local function my_preparation(head)
+ local tail = node.slide(head) -- also add prev pointers
+ tail = lang.hyphenate(head,tail)
+ tail = node.ligaturing(head,tail)
+ tail = node.kerning(head,tail)
+ return head
+end
+
+callback.register("pre_linebreak_filter", my_preparation)
+callback.register("hpack_filter", my_preparation)
+
+local dummy = function(head,tail) return tail end
+
+callback.register("hyphenate", dummy)
+callback.register("ligaturing", dummy)
+callback.register("kerning", dummy)
+\stoptyping
+
+It might be clear that the order of actions matter. It might also
+be clear that you are responsible for that order yourself. There
+is no pre||cooked mechanism for guarding your actions and there are
+several reasons for this:
+
+\startitemize
+
+\item Each macro package does things its own way so any hard-coded
+mechanism would be replaced and overloaded anyway. Compare this to
+the usage of catcodes, font systems, auxiliary files, user
+interfaces, handling of inserts etc. The combination of callbacks,
+the three mentioned functions and the availability of \LUA\ makes
+it possible to implement any system you like.
+
+\item Macro packages might want to provide hooks for specialized
+node list processing, and since there are many places where code
+can be hooked in, some kind of oversight is needed (real people
+who keep track of interference of user supplied features, no
+program can do that).
+
+\item User functions can mess up the node list and successive
+actions then might make the wrong assumptions. In order to guard
+this, macro packages might add tracing options and again there are
+too many ways to communicate with users. Debugging and tracing has
+to be embedded in the bigger system in a natural way.
+
+\stopitemize
+
+In \CONTEXT\ \MKIV\ there are already a few places where users can
+hook code into the task list, but so far we haven't really
+encouraged that. The interfaces are simply not stable enough yet.
+On the other hand, there are already quite some node list
+manipulators at work. The most prominent one is the \OPENTYPE\
+feature handler. That one replaces the ligature and kerning
+functions (at least for some fonts). It also means that we need to
+keep an eye on possible interferences between \CONTEXT\ \MKIV\
+mechanisms and those provided by \LUATEX.
+
+For fonts, that is actually quite simple: the \LUATEX\ functions
+use ligature and kerning information stored in the \TFM\ table,
+and for \OPENTYPE\ fonts we simply don't provide that information
+when we define a font, so in that case \LUATEX\ will not ligature
+and kern. Users can influence this process to some extend by
+setting the \type {mode} for a specific instance of a font to
+\type {base} or \type {node}. Because \TYPEONE\ fonts have no
+features like \OPENTYPE\ such fonts are (at least currently)
+always are processed in base mode.
+
+Deep down in \CONTEXT\ we call a sequence of actions a \quote
+{task}. One such task is \quote {processors} and the actions
+discussed so far are in this category. Within this category we
+have subcategories:
+
+\starttabulate[|l|p|]
+\NC \bf subcategory \NC \bf intended usage \NC \NR
+\HL
+\NC before \NC experimental (or module) plugins \NC \NR
+\NC normalizers \NC cleanup and preparation handlers \NC \NR
+\NC characters \NC operations on individual characters \NC \NR
+\NC words \NC operations on words \NC \NR
+\NC fonts \NC font related manipulations \NC \NR
+\NC lists \NC manipulations on the list as a whole \NC \NR
+\NC after \NC experimental (or module) plugins \NC \NR
+\stoptabulate
+
+Here \quote {plugins} are experimental handlers or specialized
+ones provided in modules that are not part of the kernel. The categories
+are not that distinctive and only provide a convenient way to group
+actions.
+
+Examples of normalizers are: checking for missing characters and
+replacing character references by fallbacks. Character processors
+are for instance directional analysers (for right to left
+typesetting), case swapping, and specialized character triggered
+hyphenation (like compound words). Word processors deal with
+hyphenation (here we use the default function provided by \LUATEX)
+and spell checking. The font processors deal with \OPENTYPE\ as
+well as the ligature building and kerning of other font types.
+Finally, the list processors are responsible for tasks like special
+spacing (french punctuation) and kerning (additional
+inter||character kerning). Of course, this all is rather \CONTEXT\
+specific and we expect to add quite some more less trivial handlers
+the upcoming years.
+
+Many of these handlers are triggered by attributes. Nodes can have
+many attributes and each can have many values. Traditionally \TEX\
+had only a few attributes: language and font, where the first is
+not even a real attribute and the second is only bound to glyph
+nodes. In \LUATEX\ language is also a glyph property. The nice
+thing about attributes is that they can be set at the \TEX\ end
+and obey grouping. This makes them for instance perfect for
+implementing color mechanims. Because attributes are part of the
+nodes, and not nodes themselves, they don't influence or interfere
+processing unless one explicitly tests for them and acts
+accordingly.
+
+In addition to the mentioned task \quote {processors} we also have
+a task \quote {shipouts} and there will be more tasks in future
+versions of \CONTEXT. Again we have subcategories, currently:
+
+\starttabulate[|l|p|]
+\NC \bf subcategory \NC \bf intended usage \NC \NR
+\HL
+\NC before \NC experimental (or module) plugins \NC \NR
+\NC normalizers \NC cleanup and preparation handlers \NC \NR
+\NC finishers \NC manipulations on the list as a whole \NC \NR
+\NC after \NC experimental (or module) plugins \NC \NR
+\stoptabulate
+
+An example of a normalizer is cleanup of the \quote {to be shipped
+out} list. Finishers deal with color, transparency, overprint,
+negated content (sometimes used in page imposition), special
+effects effect (like outline fonts) and viewer layers (something
+\PDF). Quite possible hyperlink support will also be handled there
+but not before the backend code is rewritten.
+
+The previous description is far from complete. For instance, not
+all handlers use the same interface: some work \type {head}
+onwards, some need a \type {tail} pointer too. Some report back
+success or failure. So the task handler needs to normalize their
+usage. Also, some effort goes into optimizing the task in such a
+way that processing the document is still reasonable fast. Keep in
+mind that each construction of a box invokes a callback, and there
+are many boxes used for constructing a page. Even a nilled
+callback is one, so for a simple one word paragraph four callbacks
+are triggered: the (nilled) hyphenate, ligature and kern callbacks
+as well as the one called \type {pre_linebreak_filter}. The task
+handler that we plug in the filter callbacks calls many functions
+and each of them does one of more passes over the node list, and
+in turn might do many call to functions. You can imagine that
+we're quite happy that \TEX\ as well as \LUA\ is so efficient.
+
+As I already mentioned, implementing a task handler as well as
+deciding what actions within tasks to perform in what order is
+specific for the way a macro package is set up. The following code
+can serve as a starting point
+
+\starttyping
+filters = { } -- global namespace
+
+local list = { }
+
+function filters.add(fnc,n)
+ if not n or n > #list + 1 then
+ table.insert(list,#list+1)
+ elseif n < 0 then
+ table.insert(list,1)
+ else
+ table.insert(list,n)
+ end
+end
+
+function filters.remove(fnc,n)
+ if n and n > 0 and n <= #list then
+ table.remove(list,n)
+ end
+end
+
+local function run_filters(head,...)
+ local tail = node.slide(head)
+ for _, fnc in ipairs(list) do
+ head, tail = fnc(head,tail,...)
+ end
+ return head
+end
+
+local function hyphenation(head,tail)
+ return head, tail, lang.hyphenate(head,tail) -- returns done
+end
+local function ligaturing(head,tail)
+ return node.ligaturing(head,tail) -- returns head,tail,done
+end
+local function kerning(head,tail)
+ return node.kerning(head,tail) -- returns head,tail,done
+end
+
+filters.add(hyphenation)
+filters.add(ligaturing)
+filters.add(kerning)
+
+callback.register("pre_linebreak_filter", run_filters)
+callback.register("hpack_filter", run_filters)
+\stoptyping
+
+Although one can inject extra filters by using the \type {add}
+function it may be clear that this can be dangerous due to
+interference. Therefore a slightly more secure variant is the
+following, where \type {main} is reserved for macro package
+actions and the others can be used by add||ons.
+
+\starttyping
+filters = { } -- global namespace
+
+local list = {
+ pre = { }, main = { }, post = { },
+}
+
+local order = {
+ "pre", "main", "post"
+}
+
+local function somewhere(where)
+ if not where then
+ texio.write_nl("error: invalid filter category")
+ elseif not list[where] then
+ texio.write_nl(string.format("error: invalid filter category '%s'",where))
+ else
+ return list[where]
+ end
+ return false
+end
+
+function filters.add(where,fnc,n)
+ local list = somewhere(where)
+ if not list then
+ -- error
+ elseif not n or n > #list + 1 then
+ table.insert(list,#list+1)
+ elseif n < 0 then
+ table.insert(list,1)
+ else
+ table.insert(list,n)
+ end
+end
+
+function filters.remove(where,fnc,n)
+ local list = somewhere(where)
+ if list and n and n > 0 and n <= #list then
+ table.remove(list,n)
+ end
+end
+
+local function run_filters(head,...)
+ local tail = node.slide(head)
+ for _, lst in pairs(order) do
+ for _, fnc in ipairs(list[lst]) do
+ head, tail = fnc(head,tail,...)
+ end
+ end
+ return head
+end
+
+filters.add("main",hyphenation)
+filters.add("main",ligaturing)
+filters.add("main",kerning)
+
+callback.register("pre_linebreak_filter", run_filters)
+callback.register("hpack_filter", run_filters)
+\stoptyping
+
+Of course, \CONTEXT\ users who try to use this code will
+be punished by loosing much of the functionality already
+present, simply because we use yet another variant of the
+above code.
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/mk/mk-performance.tex b/doc/context/sources/general/manuals/mk/mk-performance.tex
new file mode 100644
index 000000000..c0bb13efb
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-performance.tex
@@ -0,0 +1,410 @@
+% language=uk
+
+\startcomponent mk-performance
+
+\environment mk-environment
+
+\chapter{How about performance}
+
+\subject{remark}
+
+The previous chapters already spent some words on performance
+and memory usage. By the time that Taco and I were implementing,
+discussing and testing the callbacks related to node lists, we were
+already convinced that in all areas covered so far (file management,
+handling input characters, dealing with fonts, conversion to tokens,
+string and table manipulation, enz.) the \TEX||\LUA\ pair was up to
+the task And so we were quite confident that processing nodes was
+not only an important aspect of \LUATEX\ but also quite feasable
+in terms of performance (after all we needed it in order to deal
+with advanced typesetting of Arab). When Taco was dealing with the
+\TEX\ side of the story, I was experimenting with possible
+mechanisms at the \LUA\ end.
+
+At the same time I got the opportunity to speed up the \METAPOST\
+to \PDF\ converter and both activities involved some timing. Here
+I report some of the observations that we made in this process.
+
+\subject{parsing}
+
+Expressions in \LUA\ are powerful and definitely faster than regular
+expressions found in other languages, but they have some limits. Most
+noticeably is the lack of alternation. In \RUBY\ one can say:
+
+\starttyping
+str = "there is no gamma in here, just an beta"
+
+if str =~ /(alph|bet|delt)a/ then
+ print($1)
+end
+\stoptyping
+
+but in \LUA\ you need a few more lines:
+
+\starttyping
+str = "there is no gamma in here, just an beta"
+
+for _, v in pairs({'alpha','beta','delta'}) do
+ local s = str:match(v)
+ if s then
+ print(s)
+ break
+ end
+end
+\stoptyping
+
+Interesting is that upto now I didn't really miss alternation but
+it may as well be that the lack of it drove me to come up with
+different solutions. For \CONTEXT\ \MKIV\ the \METAPOST\ to \PDF\
+converter has been rewritten in \LUA. This is a prelude to direct
+\LUA\ output from \METAPOST\ but I needed the exercise. It was
+among the first \LUA\ code in \MKIV.
+
+Progressive (sequential) parsing of the data is an option, and is
+done in \MKII\ using pure \TEX. We collect words and compare them
+to \POSTSCRIPT\ directives and act accordingly. The messy parts
+are scanning the preamble, which has specials to be dealt with as
+well as lots of unpredictable code to skip, and the \type
+{fshow} command which adds text to a graphic. But real dirty are
+the code fragments that deal with setting the line width and
+penshapes so the cleanup of this takes some time.
+
+In \LUA\ a different approach is taken. There is an \type {mp} table
+which collects a lot of functions that more or less reflect the
+output of \METAPOST. The functions take care of generating the right
+\PDF\ code and also handle the transformations needed because of
+the differences between \POSTSCRIPT\ and \PDF.
+
+The sequential \POSTSCRIPT\ that comes from \METAPOST\ is
+collected in one string and converted using \type {gsub} into a
+sequence of \LUA\ function calls. Before this can be done, some
+cleanup takes place. The resulting string is then executed as
+\LUA\ code.
+
+As an example:
+
+\starttyping
+1 0 0 2 0 0 curveto
+\stoptyping
+
+becomes
+
+\starttyping
+mp.curveto(1,0,0,2,0,0)
+\stoptyping
+
+which results in:
+
+\starttyping
+\pdfliteral{1 0 0 2 0 0 c}
+\stoptyping
+
+In between, the path is stored and transformed which is needed in
+the case of penshapes, where some \POSTSCRIPT\ feature is used that
+is not available in \PDF.
+
+During the development of \LUATEX\ a new feature was added to
+\LUA: \type {lpeg}. With \type {lpeg} you can define text scanners. In
+fact, you can build parsers for languages quite conveniently so
+without doubt we will see it show up all over \MKIV.
+
+Since I needed an exercise to get accustomed with \type {lpeg}, I
+rewrote the mentioned converter. I'm sure that a better implementation
+is possible than I did (after all, \POSTSCRIPT\ is a language) but
+I went for a speedy solution. The following table shows some timings.
+
+\starttabulate[|c|c|l|]
+\HL
+\NC \tt gsub \NC \tt lpeg \NC \NC \NR
+\HL
+\NC 2.5 \NC 0.5 \NC 100 times test graphic \NC \NR
+\NC 9.2 \NC 1.9 \NC 100 times big graphic \NC \NR
+\HL
+\stoptabulate
+
+The test graphic has about everything that \METAPOST\ can output,
+including special tricks that deal with transparency and shading. The
+big one is just four copies of the test graphic.
+
+So, the \type {lpeg} based variant is about 5~times faster than the
+original variant. I'm not saying that the original implementation is
+that brilliant, but a 5~time improvement is rather nice especially
+when you consider that \type {lpeg} is still experimental and each
+version performs better. The tests were done with \type {lpeg}
+version 0.5 which performs slightly faster than its predecessor.
+
+It's worth mentioning that the original \type {gsub} based variant
+was already a bit improved compared to its first implementation.
+There we collected the \TEX\ (\PDF) code in a table and passed it
+in its concatenated form to \TEX. Because the \LUA\ to \TEX\
+interface is by now quite efficient we can just pass the
+intermediate results directly to \TEX.
+
+\subject{file io}
+
+The repertore of functions that deal with individual characters
+in \LUA\ is small. This does not bother us too much because the
+individual character is not what \TEX\ is mostly dealing with. A
+character or sequence of characters becomes a token (internally
+represented by a table) and tokens result in nodes (again
+tables, but larger). There are many more tokens involved than
+nodes: in \CONTEXT\ a ratio of 200~tokens on 1~node are not
+uncommon. A letter like \type {x} become a token, but the control
+sequence \type {\command} also ends up as one token. Later on,
+this \type {x} may become a character node, possibly surrounded
+by some kerning. The input characters \type {width} result in
+5~tokens, but may not end up as nodes at all, for instance when
+they are part of a key|/|value pair in the argument to a command.
+
+Just as there is no guaranteed one||to||one relationship between
+input characters and tokens, there is no straight relation between
+tokens and nodes. When dealing with input it is good to keep in mind
+that because of these interpretation stages one can never say that
+1~megabyte of input characters ends up as 1~million something in
+memory. Just think of how many megabytes of macros get stored in a
+format file much smaller than the sum of bytes.
+
+We only deal with characters or sequences of bytes when reading
+from an input medium. There are many ways to deal with the input.
+For instance one can process the input lines as \TEX\ sees them,
+in which case \TEX\ takes care of the \UTF\ input. When we're
+dealing with other input encodings we can hook code into the file
+openers and readers and convert the raw data ourselves. We can for
+instance read in a file as a whole, convert it using the normal
+expression handlers or the byte(pair) iterators that \LUATEX\
+provides, or we can go real low level using native \LUA\ code,
+as in:
+
+\starttyping
+do
+ local function nextbyte(f)
+ return f:read(1)
+ end
+
+ function io.bytes(f)
+ return nextbyte, f
+ end
+end
+
+f = io.open("somefile.dat")
+for b in io.bytes(f) do
+ do_something(b)
+end
+f:close()
+\stoptyping
+
+Of course in practice one will need to integrate this into one of the
+reader callback, but the principle stays the same. In case you wonder
+if calling functions for each byte is fast enough \unknown\ it's more than
+fast enough for normal purposes, especially if we keep in mind that other
+tasks like reading of, preparing of and dealing with fonts of processing
+token lists take way more time. You can be sore that when half a second
+runtime is spent on reading a file, processing may take minutes. If one
+wants to sqeeze more performance out of this part, it's always an option
+to write special libraries for that, but this is beyond standard \LUATEX.
+We found out that the speed of loading data from files in \LUA\ is
+mostly related to the small size of \LUA's file buffer. Reading data stored
+in tables is extremely fast, and even faster when precompiled into bytecode.
+
+\subject{tables}
+
+When Taco and I were experimenting with the callbacks that intercept
+tokens and nodes, we wondered what the impact would be on performance.
+Although in \MKIV\ we allocate quite some memory due to font handling,
+we were pretty sure that handling \TEX's internal lists also could
+have their impact. Data related to fonts is not always subjected to
+garbage collection, simply because it's to be available permanently.
+List processing on the other hand involves a lot of temporary allocated
+tables. During a run a real huge amount of tokens passes the machinery.
+When digested, they become nodes. For testing we normally use this
+document (with the name \type {mk.tex}) and at the time of writing
+this, it has some 48 pages.
+
+This document is of moderately complexity, but not as complex as
+the documents that I normally process; they have with lots of graphics,
+layers, structural elements, maybe a bit of \XML\ parsing, etc.
+Nevertheless, we're talking of some 24~million tokens entering the engine
+for 50 pages of text. Contrary to this the number of nodes is small:
+only 120~thousand but the tables making up the nodes are more complex than
+token tables (with three numbers per token). When all tokens are intercepted
+and returned unchanged, on my machine the run is progressively slow and
+memory usage grows from 75M to 112M. There is room for improvement there,
+especially in the garbage collector.
+
+Side note: quite some of these tokens result from macro expansion. Also,
+when in the input a \type {\command} is used, the callback passes it as one
+token. A command stores in a format is already tokenized, but a command read
+from the input is tokenized when read, so behind each token reported there
+can be a few more input characters, but their number can be neglected compared
+to tokens originating from the macro package.
+
+The token callback is rather slow when used for a whole document. However,
+this is typically a callback that will only be used in very special
+situations and for a controlled number of tokens. The node callback on the
+other hand can be set permanently. Fortunately the number of nodes is
+relatively small. The overhead of a simple token handler that just counts
+nodes is around 5\% but most common manipulations with token lists don't
+take much more time. For instance, experiments with adding kerns around
+punctuation (a French speciality) hardly takes time, resolving ligatures is
+not really noticeable and applying inter||character spacing to a whole document
+is not that slow either. Actually, the last example is kind of special
+because it more than doubles the size of the node lists. Inserting or removing
+table elements in relatively slow when tables are large but there are some
+ways around this.
+
+One of the reasons of whole||document token handling being slow is that
+each token is a three||element table and so the garbage collector has to work
+rather hard. The efficiency of this process is also platform dependent (or
+maybe compiler specific). Manipulating the garbage collector parameters
+does not improve performance, unless this forces the collector to be inefficient
+at the cost of a lot of memory.
+
+However, when we started dealing with nodes, I gave tuning the collector
+another try and on the mentioned test document the following observations
+were made when manipulating the step multiplier:
+
+\starttabulate[|c|c|c|]
+\HL
+\NC \bf step \NC \bf runtime \NC \bf memory \NC \NR
+\HL
+\NC 200 \NC 24.0 \NC 80.5M \NC \NR
+\NC 175 \NC 21.0 \NC 78.2M \NC \NR
+\NC 150 \NC 22.0 \NC 74.6M \NC \NR
+\NC 160 \NC 22.0 \NC 74.6M \NC \NR
+\NC 165 \NC 21.0 \NC 77.6M \NC \NR
+\NC 125 \NC 21.5 \NC 89.2M \NC \NR
+\NC 100 \NC 21.5 \NC 88.4M \NC \NR
+\HL
+\stoptabulate
+
+As a result, I decided to set the \type {stepmul} variable to~165.
+
+\starttyping
+\ctxlua{collectgarbage("setstepmul", 165)}
+\stoptyping
+
+However, when we were testing thenew \type {lpeg} based \METAPOST\ converter, we ran
+into problems. For table intensive operations, temporary disabling the
+garbage collector gave a significant boost in speed. While testing
+performance we used the following loop:
+
+\starttyping
+\dorecurse {2000} {
+ \setbox \scratchbox \hbox \bgroup
+ \convertMPtoPDF{test-mps-procset.mps}{1}{1}
+ \egroup
+}
+\stoptyping
+
+In such a loop, turning the garbage collector on and off is disasterous. Because
+no other \LUA\ calls happen between these calls, the garbage collector is never
+invoked at all. As a result, memory growed from the baseline of 45M to 120MB and
+processing became incrementally slow. I found out that restarting the collector
+before each conversion kept memory usage low and the speed also remained okay.
+
+\starttyping
+\ctxlua{collectgarbage("restart")}
+\stoptyping
+
+Further experiments learned that it makes sense to restart the collector at
+each shipout and before table intense operations. On \type {mk.tex} this
+results in a memory usage of 74M (at the end of the run) and a runtime of
+21~seconds.
+
+Concerning nodes and speed|/|allocation issues, we need to be aware of
+the fact that this was still somewhat experimental and in the final version
+of \LUATEX\ callbacks may occur at different places and lists may be subjected
+to parsing multiple times at different moments and locations (for instance when
+we start dealing with attributes, an upcoming new feature).
+
+Back to tokens. The reason why applying the callback to every token takes a
+while has to do with the fact that each token goes through the associated
+function. If you want to have an idea of what this means for 24~million
+tokens, just run the following \LUA\ code:
+
+\starttyping
+for i=1,24 do
+ print(i)
+ for j=1,1000*1000 do
+ local t = { 1, 2, 3 }
+ end
+end
+print(os.clock())
+\stoptyping
+
+This takes some 60 seconds on my machine. The following code
+runs about three times faster because the table has not to
+be allocated each time.
+
+\starttyping
+t = { 1, 2, 3 }
+for i=1,24 do
+ print(i)
+ for j=1,1000*1000 do
+ t[1]=4 t[2]=5 t[3]=6
+ end
+end
+print(os.clock())
+\stoptyping
+
+Imagine this code to be interwoven with other code and \TEX\ doing
+things with the tokens it gets back. The memory pool will be
+scattered and garbage collecting will become more difficult.
+
+However, in practice one will only apply token handling
+to a marked piece of the input data. It is for this reason
+that the callback is not:
+
+\starttyping
+callback.register('token_filter', function(t)
+ return t
+end )
+\stoptyping
+
+but instead
+
+\starttyping
+callback.register('token_filter', function()
+ return token.get_next()
+end )
+\stoptyping
+
+This gives the opportunity to fetch more than one token and
+keep fetching till a criterium is met (for instance a sentinel).
+
+Because \type {token.get_next} is not bound to the callback you
+can fetch tokens anytime you want and only use the callback to
+feed back tokens into \TEX. In \CONTEXT\ \MKIV\ there is some
+collect and flush tokens present. Here is a trivial example:
+
+\starttyping
+\def\SwapChars{\directlua 0 {
+ do
+ local t = { token.get_next(), token.get_next() }
+ callback.register('token_filter', function()
+ callback.register('token_filter', nil)
+ return { t[2], t[1] }
+ end )
+ end
+}}
+
+\SwapChars HH \SwapChars TH
+\stoptyping
+
+Collecting tokens can take place inside the callback but also
+outside. This also gives you the opportunity to collect them
+in efficient ways and keep an eye on the memory demands.
+
+Of course using \TEX\ directly takes less code:
+
+\starttyping
+\def\SwapChars#1#2{#2#1}
+\stoptyping
+
+The example shown here involves so little tokens that running
+it takes no noticeable time. Here we show this definition in
+tokenized form:
+
+\starttokens[demo]\def\SwapChars#1#2{#2#1}\stoptokens \setups{ShowCollect}
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/mk/mk-plain.tex b/doc/context/sources/general/manuals/mk/mk-plain.tex
new file mode 100644
index 000000000..67c5a3463
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-plain.tex
@@ -0,0 +1,285 @@
+% language=uk
+
+\environment mk-environment
+
+\startcomponent mk-plain
+
+\chapter {Just plain}
+
+\subject{running}
+
+For testing basic \LUATEX\ functionality it makes sense to have a
+minimal system, and traditionally plain \TEX\ has been the most
+natural candidate. It is for this reason that it had been on the
+agenda for a while to provide basic \OPENTYPE\ font support for
+plain \TEX\ as well. Although the \MKIV\ node mode subsystem is
+not yet perfect, the time was right to start experimenting with a
+subset of the \MKIV\ code.
+
+Using plain roughly comes down to the following. First you need
+to generate a format:
+
+\starttyping
+luatex --ini --fmt=luatex.fmt luatex-plain.tex
+\stoptyping
+
+This format has to be moved to a place where it can be found by
+the \KPSE\ library. Since this can differ per distribution there
+is no clear recipe for it, but for \TEXLIVE\ some path ending in
+\type {web2c/luatex} is probably the right spot. After that you
+can run
+
+\starttyping
+luatex luatex-test.tex
+\stoptyping
+
+This file lives under \type {generic/context}. When it
+is run it is quite likely that you will get an error message
+because the font name database cannot be found. You
+can generate one with the following command (which assumes that
+you have \CONTEXT\ installed):
+
+\starttyping
+mtxrun --usekpse --script fonts --names
+\stoptyping
+
+The resulting file \type {luatex-fonts-names.lua} has to be placed
+somewhere in your \TEX\ tree so that it can be found anytime.
+Beware: the \type {--usekpse} flag is only used outside \CONTEXT\
+and provides very limited functionality, just enough for this
+task. Again this is a distribution specific issue so we will not
+dwell upon it here.
+
+The way fonts are defined is modelled after \XETEX, as it makes no
+sense to support the somewhat more fancy \CONTEXT\ way of doing
+things. Keep in mind that although \CONTEXT\ \MKIV\ does support
+the \XETEX\ syntax too, the preferred way there is to use a more
+symbolic feature definition approach.
+
+As this is an experimental setup, it might not always work out as
+expected. Around \LUATEX\ version 0.50 we expect the code to be
+more or less okay.
+
+\subject{implementation}
+
+The \type {luatex-fonts.lua} file is the first in a series of
+basic functionality enhancements for \LUATEX\ derived from the
+\CONTEXT\ \MKIV\ code base. Please don't pollute the \type
+{luatex-*} namespace with code not coming from the \CONTEXT\
+development team as we may add more files.
+
+This file implements a basic font system for a bare \LUATEX\
+system. By default \LUATEX\ only knows about the classic \TFM\
+fonts but it can read other font formats and pass them to \LUA.
+With some glue code one can then construct a suitable \TFM\
+representation that \LUATEX\ can work with. For more advanced font
+support a bit more code is needed that needs to be hooked
+into the callback mechanism.
+
+This file is currently rather simple: it just loads the \LUA\ file
+with the same name. An example of a \type {luatex.tex} file that is
+just the plain \TEX\ format:
+
+\starttyping
+\catcode`\{=1 % left brace is begin-group character
+\catcode`\}=2 % right brace is end-group character
+
+\input plain
+
+\everyjob\expandafter{\the\everyjob\input luatex-fonts\relax}
+
+\dump
+\stoptyping
+
+We could load the \LUA\ file in \type {\everyjob} but maybe some
+day we will need more here.
+
+When defining a font, in addition to the \XETEX\ way, you can use
+two prefixes. A \type {file:}\ prefix forces a file search, while
+a \type {name:}\ prefix will result in consulting the names
+database. The font definitions shown in figure~1 are all valid.
+
+\starttyping
+\font\testa=file:lmroman10-regular at 12pt
+\font\testb=file:lmroman12-regular:+liga; at 24pt
+\font\testc=file:lmroman12-regular:mode=node;+liga; at 24pt
+\font\testd=name:lmroman10bold at 12pt
+\font\testh=cmr10
+\font\testi=ptmr8t
+\font\teste=[lmroman12-regular]:+liga at 30pt
+\font\testf=[lmroman12-regular] at 40pt
+\font\testj=adobesongstd-light % cid font
+\font\testk=cambria(math) {\mathtest 123}
+\font\testl=file:IranNastaliq.ttf:mode=node;script=arab;\
+ language=dflt;+calt;+ccmp;+init;+isol;+medi;+fina;+liga;\
+ +rlig;+kern;+mark;+mkmk at 14pt
+\stoptyping
+
+You can load maths fonts but as Plain \TEX\ is set up for Computer
+Modern (and as we don't adapt Plain \TEX) loading Cambria does
+not give you support for its math features automatically.
+
+If you want access by name you need to generate a font
+database, using:
+
+\starttyping
+mtxrun --script font --names
+\stoptyping
+
+and put the resulting file in a spot where \LUATEX\ can find it.
+
+\subject {remarks}
+
+The code loaded in \type {luatex-fonts.lua} does not come out of
+thin air, but is mostly shared with \CONTEXT; however, in that
+macro package we go beyond what is provided in the plain variant.
+When using this code you need to keep a few things in mind:
+
+\startitemize
+
+\item This subsystem will be extended, improved etc.\ at about the
+same pace as \CONTEXT\ \MKIV. However, because \CONTEXT\ provides a
+rather high level of integration not all features will be supported
+in the same quality. Use \CONTEXT\ if you want more goodies.
+
+\item There is no official \API\ yet, which means that using
+functions implemented here is at your own risk, in the sense that
+names and namespaces might change. There will be a minimal \API\
+defined once \LUATEX\ version 1.0 is out. Instead of patching the
+files it's better to overload functions if needed.
+
+\item The modules are not stripped too much, which makes it
+possible to benefit from improvements in the code that take place
+in the perspective of \CONTEXT\ development. They might be split a
+bit more in due time so the baseline might become smaller.
+
+\item The code is maintained and tested by the \CONTEXT\
+development team. As such it might be better suited for this macro
+package and integration in other systems might demand some
+additional wrapping. The plain version discussed here is the
+benchmark and should be treated as a kind of black box.
+
+\item Problems can be reported to the team but as we use \CONTEXT\
+\MKIV\ as our baseline, you'd better check if the problem is a general
+\CONTEXT\ problem too.
+
+\item The more high level support for features that is provided in
+\CONTEXT\ is not part of the code loaded here as it makes no sense
+elsewhere. Some experimental features are not part of this code
+either but some might show up later.
+
+\item Math font support will be added but only in its basic form
+once the Latin Modern and \TEX\ Gyre math fonts are
+available. Currently traditional and \OPENTYPE\ math fonts can
+be loaded.
+
+\item At this moment the more nifty speedups are not enabled
+because they work in tandem with the alternative file handling
+that \CONTEXT\ uses. Maybe around \LUATEX\ 1.0 we will bring some
+speedup into this code too (if it pays off at all).
+
+\item The code defines a few global tables. If this code is used
+in a larger perspective then you can best make sure that no
+conflicts occur. The \CONTEXT\ package expects users to work in
+their own namespace (\type {userdata}, \type {thirddata}, \type
+{moduledata} or \type {document}). We give ourselves the freedom to
+use any table at the global level but will not use tables that are
+named after macro packages. Later, \CONTEXT\ might operate in
+a more controlled namespace but it has a low priority.
+
+\item There is some tracing code present but this is not enabled
+and not supported as it integrates quite tightly into \CONTEXT. In
+case of problems you can use \CONTEXT\ for tracking down problems.
+
+\item Patching the original code in distributions is dangerous as
+it might fix your problem but introduce new ones for \CONTEXT. So,
+best keep the original code as it is and overload functions and
+callbacks when needed. This is trivial in \LUA.
+
+\item Attributes are (automatically) taken from the range 127||255 so
+you'd best not use these yourself. Don't count on an attribute number
+staying the same and don't mess with these attributes.
+
+\stopitemize
+
+If this all sounds a bit strict, keep in mind that it makes no sense
+for us to maintain multiple code bases and we happen to use \CONTEXT.
+
+\subject{advanced features}
+
+The latest versions now also support font extending, slanting,
+protrusion and expansion. Here are a few examples:
+
+\starttyping
+\pdfprotrudechars2 \pdfadjustspacing2
+
+\font\testa=file:lmroman12-regular:+liga;extend=1.5 at 12pt
+\font\testb=file:lmroman12-regular:+liga;slant=0.8 at 12pt
+\font\testc=file:lmroman12-regular:+liga;protrusion=default at 12pt
+\font\testd=file:lmroman12-regular:+liga;expansion=default at 12pt
+\stoptyping
+
+The extend and slant options are similar to those used in
+map files. The extend is limited to 10 and the slant to 1.
+
+In the protrusion and expansion specification the keyword \type
+{default} is an entry in a definition table. You can find an
+example at the end of \type {font-dum.lua}.
+
+A setup for expansion looks as follows:
+
+\starttyping
+fonts.expansions.setups['default'] = {
+ stretch = 2, shrink = 2, step = .5, factor = 1,
+
+ [byte('A')] = 0.5, [byte('B')] = 0.7,
+ ...........
+ [byte('8')] = 0.7, [byte('9')] = 0.7,
+}
+\stoptyping
+
+The stretch, shrink and steps become font properties
+and characters gets a value assigned. In pseudo code
+it looks like:
+
+\starttyping
+chr(A).expansion_factor = 0.5 * factor
+\stoptyping
+
+The protrusion table has left and right protrusion
+factors for each relevant character.
+
+\starttyping
+fonts.protrusions.setups['default'] = {
+ factor = 1, left = 1, right = 1,
+
+ [0x002C] = { 0, 1 }, -- comma
+ [0x002E] = { 0, 1 }, -- period
+ [0x003A] = { 0, 1 }, -- colon
+ ........
+ [0x061B] = { 0, 1 }, -- arabic semicolon
+ [0x06D4] = { 0, 1 }, -- arabic full stop
+}
+\stoptyping
+
+So, the comma will stick out in the right margin:
+
+\starttyping
+chr(comma).right_protruding = right * 1 * factor
+\stoptyping
+
+As we prefer measures relative to the width (precentages) we
+actualy use:
+
+\starttyping
+chr(comma).right_protruding = right * 1 * factor * (width/quad)
+\stoptyping
+
+You can add additional tables and access them by keyword in the
+font specification.
+
+The model used in the plain variant is a simplification of the
+\CONTEXT\ model so \CONTEXT\ users should not take this as
+starting point.
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/mk/mk-punk.tex b/doc/context/sources/general/manuals/mk/mk-punk.tex
new file mode 100644
index 000000000..3502736de
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-punk.tex
@@ -0,0 +1,456 @@
+% language=uk
+
+\environment mk-environment
+
+\startcomponent mk-punk
+
+\page[right] \start
+
+% the opentype one:
+%
+% \setupbodyfont[punknova]
+
+% the mp based runtime one:
+
+
+\usemodule[m][punk]
+\usetypescript[punk]
+\switchtobodyfont[punk,12pt]
+
+\StartRandomPunk
+
+\definesymbol[1][--]
+\setupsorting[logo][style=]
+\setupcapitals[title=no]
+\setuptype[style=\tf]
+\setuptyping[style=\tf]
+\logo[METAPOST] {MetaPost}
+\logo[METAFONT] {MetaFont}
+
+\chapter{How to convince Don and Hermann to use \LUATEX}
+
+{\em The code shown here should look a bit different in versions
+of \MKIV\ after March 2011. This is because the font system was
+cleaned up and upgraded. The prinicples remain the same. You can
+have a look at \type {m-punk.mkiv} in the \CONTEXT\ distribution.}
+
+Odds are pretty low that Don Knuth will use \LUATEX\ for
+typesetting the next update of his opus magnum, and odds are even
+lower that Hermann Zapf will use \MPLIB\ for Melior Nova. However,
+the next example of combining \METAFONT\ and \TEX\ may draw their
+interest in this new variant: \METATEX.
+
+The font used here is called \quote {punk} and is designed by
+Donald Knuth. There is a note in the file that says: \quotation
+{Font inspired by Gerard and Marjan Unger's lectures, February
+1985}. If you didn't notice it yet: punk is a random font.
+
+You may wonder why we started looking into this masterpiece of
+font design. Well, there are a few reasons:
+
+\startitemize
+
+\item We always liked this font, but after the rise of outline
+ fonts it was not a natural candidate for using in
+ documents. Fun is always a good motive.
+
+\item For many years we have been suggesting that special glyphs
+ and/or aspects of typesetting could be realized by runtime
+ generation of graphics, and we need this testbed for the
+ Oriental \TEX\ project: Idris needs stretchable inter|-|glyph
+ connections.
+
+\item Taco likes using tricky \METAPOST\ backgrounds for his
+ presentations that demonstrate this programming language.
+
+\item Hartmut loves to tweak the backend and runtime font generation
+ will demand some extensions to the font inclusion and literal
+ handlers.
+
+\item Because Hans attends many \TEX\ conferences together with Volker
+ Schaa, he has promised him to avoid repeating talk and
+ presentation layouts, and so a new presentation style was needed.
+
+\stopitemize
+
+To this we can add an already mentioned motivation: convince Don and
+Hermann to use \LUATEX\ \unknown\ who knows. And, if that fails, maybe
+they can team up for an extensions to this font: more style variants,
+proper math and the full range of \UNICODE\ glyphs.
+
+The punk font is written in \METAFONT\ and there are multiple
+sources. These are merged into one file which is to be processed
+using the \type {mfplain} format. Definitions of characters in
+this font look like:
+
+\starttyping
+beginpunkchar ("A",13,1,2) ;
+ z1 = pp(1.5u,0) ; z2 = (.5w,1.1h) ; z3 = pp(w-1.5u,0) ;
+ pd z1 ; pd z3 ; draw z1 -- z2 -- z3 ;
+ z4 = pp .3[z1,z2] ; z5 = pp .3[z3,z2] ;
+ pd z4 ; pd z5 ; draw z4 -- z5;
+endchar ;
+\stoptyping
+
+When \TEX\ needs a font, i.e.\ when we have something like this:
+
+\starttyping
+\font\somefont=whatever at 12pt
+\stoptyping
+
+in \CONTEXT\ control is delegated to a font loader written in
+\LUA\ that is hooked into \TEX. This loader interprets the name
+and if needed filters the specification from it. Think of this:
+
+\starttyping
+\font\somefont=whatever*smallcaps at 16pt
+\stoptyping
+
+This means: load font \type {whatever} and enable the smallcaps features.
+However this mechanism is mostly geared towards \TYPEONE\ and \OPENTYPE\
+fonts. But punk is neither: it's a \METAFONT, and we need to treat it as
+such. We will use \LUATEX's powerful virtual font technology
+because that way we can smuggle the proper shapes in the final
+file. And \unknown\ no bitmaps and no funny encoding.
+
+In \CONTEXT\ \MKIV\ there is a preliminary virtual font definition
+mechanism. There is no advanced \TEX\ interface yet so we need to do it in
+\LUA. Fortunately we do have access to this from the font mechanism:
+
+\starttyping
+\font\somefont=mypunk@punk at 20pt
+\stoptyping
+
+This is a rather valid directive to create a font that internally
+will be called \type {mypunk}. For this the virtual font creation
+command \type {punk} will be used, and in a moment we will see what
+this triggers.
+
+Of course, users will never see such low level definitions. They will
+use proper typescript, which set up a whole font system. For instance,
+in this document we use:
+
+\typebuffer[fontdefinition]
+
+Now, using punk in inself is not that much of a challenge, but how about
+using multiple instances of this font and then typeset the text chosing
+variants of a glyph at random. Of course this will have some trade-off in
+terms of runtime. In this document we use punk as the bodyfont and
+therefore it comes in several sizes. On Hans's laptop generating the
+glyphs takes a while:
+
+\starttyping
+7500 glyphs, 12.887 seconds runtime, 581 glyphs/second
+\stoptyping
+
+Fortunately \MKIV\ provides a caching mechanism so once the fonts
+are generated, a next run will be more comfortable. This time we
+get reported:
+
+\starttyping
+0.187 seconds, 60 instances, 320.856 instances/second
+\stoptyping
+
+which is not that bad for loading 60 files of 5 megabytes \PDF\
+literals each. The reason why the files are large is that although
+these glyphs look simple, in fact they are rather complex: each
+glyph at least one paths and several knots, and since a special
+pen is used, conversion results in a larger than normal description
+of a shape.
+
+Since we use the standard converter from \METAPOST\ to \PDF, we
+can gain some generation time by using a dedicated converter for
+glyphs. Eventually the \MPLIB\ library may even provide a proper
+charstring generator so that we can construct real fonts at
+runtime.
+
+So, how does this work behind the screens? Because we can use some
+of the mechanisms already present in \CONTEXT\ it is not even that complex.
+
+\startitemize
+
+\item The \type {punk} directive tells \CONTEXT\ to create a virtual
+ font. Such a font can be made out of real fonts; we use this
+ for instance in the font feature \type {combine}, where we
+ add virtually composed characters that are missing by combining
+ characters present. However, here we have no real font.
+
+\item And so this virtual font is not build on top of an existing font, but
+ spawns a \MPLIB\ process that will build the font, unless it is
+ present in the cache on disk. The shapes are converted to \PDF\ literals
+ and for each character a proper definition table is made.
+
+\item In total 10 such fonts are made, but only one is returned to the
+ font callback that asked us to provide the font. The list of
+ the alternatives is stored in the \LUA\ table that represents
+ the font and kept at the \LUA\ end. So, for each size used,
+ a unique set of 10 variants is generated.
+
+\item The randomizer operates on the node list. Instead of using a
+ dedicated mechanism for this, we hijack one of the attribute values
+ of the case swapper already present in \MKIV. After that we can selectively
+ turn on and off the randomizer.
+
+\item At some point \TEX\ will hand over the node lists to \CONTEXT. At
+ that moment a lot of things can happen to the list, and one of
+ them is a sequence of character handlers, of which the mentioned case
+ handler is one. The handler sweeps over the nodelist
+ and for each glyph node triggers a function that is bound to the
+ attribute value.
+
+\item This function is rather trivial: it looks at the font id of the
+ glyph, and resolves it to the font table. If that table has a
+ list of alternatives, it will randomly choose one and assign it to
+ the font attribute of the glyph. That's all.
+
+\item Eventually the backend routines will inject the \PDF\ literals that
+ were collected in the commands table of the virtual glyph.
+
+\stopitemize
+
+It will not come as a surprise that our resulting file is larger
+than what we get when using traditional outline fonts or just one
+instance of punk. However, this is just an experiment, and
+eventually a proper font constructor will be provided, so that the
+glyph drawing is delegated to the font renderer. An intermediate
+optimization can be to use so called \PDF\ xforms, but a properly
+runtime generated font is best because then we can search in the
+file too.
+
+Because by now reading the punk font should go fluently we can now
+move on to the code. We already have a \type {fonts} namespace,
+which we now extend with an \METAPOST\ sub namespace:
+
+\starttyping
+fonts.mp = fonts.mp or { }
+\stoptyping
+
+We set a version number and define a cache on disk. When the number changes
+fonts stored in the cache will be regenerated when needed. The
+\type {containers} module provides the relevant function.
+
+\starttyping
+fonts.mp.version = 1.01
+fonts.mp.cache = containers.define("fonts", "mp", fonts.mp.version, true)
+\stoptyping
+
+We already have a \type {metapost} namespace, and within it we define a
+sub namespace:
+
+\starttyping
+metapost.characters = metapost.characters or { }
+\stoptyping
+
+Now we're ready for the real action: we define a dedicated flusher
+that will be passed to the \METAPOST\ converter. A next version of
+\MPLIB\ will provide the \TFM\ font information which gives better
+glyph dimensions, plus additional kerning information. All this code
+is defined in a closure (\type {do ... end}) which
+nicely hides the local variables.
+
+\starttyping
+local characters, descriptions = { }, { }
+local factor, total, variants = 100, 0, 0
+local l, n, w, h, d = { }, 0, 0, 0, 0
+
+local flusher = {
+ startfigure = function(chrnum,llx,lly,urx,ury)
+ l, n = { }, chrnum
+ w, h, d = urx - llx, ury, -lly
+ total = total + 1
+ end,
+ flushfigure = function(t)
+ for i=1, #t do
+ l[#l+1] = t[i]
+ end
+ end,
+ stopfigure = function()
+ local cd = characters.data[n]
+ descriptions[n] = {
+ unicode = n,
+ name = cd and cd.adobename,
+ width = w*100,
+ height = h*100,
+ depth = d*100,
+ }
+ characters[i] = {
+ commands = {
+ { "special", "pdf: " .. table.concat(l," ") },
+ }
+ }
+ end
+}
+\stoptyping
+
+In the normal converter, the start and stop function do the
+packaging in a box. The flush function is called when literals
+need to be flushed. This threesome does as much as collecting
+glyph information in the \type {list} table. Intermediate literals
+are stored in the \type {l} table. Each glyph has a description and
+(in this case) one command that defines the virtual shape. The name
+is picked up from the character data table that is present in \MKIV.
+
+As told before we generate multiple instances per requested font
+and here is how it happens. We initialize the \type {mfplain}
+format and reset it afterwards. The punk definition file is
+adapted for multiple runs. Scaling happens here because later on
+the scaler has no knowledge about what is present in the commands.
+We use a few helpers for processing the \METAPOST\ code and format
+the final font table in a way \CONTEXT\ \MKIV\ likes. Currently
+the parameters (font dimensions) are rather hard coded, but this
+will change when \MPLIB\ can provide them.
+
+\starttyping
+function metapost.characters.process(mpxformat, name, instances, scalefactor)
+ statistics.starttiming(metapost.characters)
+ scalefactor = scalefactor or 1
+ instances = instances or 10
+ local fontname = file.removesuffix(file.basename(name))
+ local hash = file.robustname(string.format(
+ "%s %04i %04i", fontname, scalefactor*1000, instances))
+ local lists = containers.read(fonts.mp.cache, hash)
+ if not lists then
+ statistics.starttiming(flusher)
+ local data = io.loaddata(resolvers.findfile(name))
+ metapost.reset(mpxformat)
+ lists = { }
+ for i=1,instances do
+ characters, descriptions = { }
+ metapost.process(
+ mpxformat,
+ {
+ "randomseed := " .. i*10 .. ";",
+ "scale_factor := " .. scalefactor .. " ;",
+ data
+ },
+ false,
+ flusher
+ )
+ lists[#lists+1] = {
+ designsize = 655360,
+ name = string.format("%s-%03i",hash,i),
+ parameters = {
+ slant = 0,
+ space = 333 * scalefactor,
+ space_stretch = 166.5 * scalefactor,
+ space_shrink = 111 * scalefactor,
+ x_height = 431 * scalefactor,
+ quad = 1000 * scalefactor,
+ extra_space = 0
+ },
+ ["type"] = "virtual",
+ characters = characters,
+ descriptions = descriptions,
+ }
+ end
+ metapost.reset(mpxformat) -- saves memory
+ lists = containers.write(fonts.mp.cache, hash, lists)
+ statistics.stoptiming(flusher)
+ end
+ variants = variants + #lists
+ statistics.stoptiming(metapost.characters)
+ return lists
+end
+\stoptyping
+
+We're not yet there. This was just a font generator that returns
+a list of fonts defined in a format liked by \MKIV\ and not that
+far from what \TEX\ wants back from us. Next we define the
+main definition function, the one that is called when the font
+is defined as virtual font. The special number \type {-1000}
+tells the scaler to honour the designsize, which boils down to
+no scaling, but just copying to the final table that is passed
+to \TEX. The \type {define} function returns an id which we will
+use later.
+
+The scaler uses the \type {descriptions} to add dimensions (and other data
+needed) in the \type {characters} table. This is something \MKIV\ specific.
+
+\starttyping
+function fonts.handlers.vf.combiner.commands.metafont(g,v)
+ local size = g.specification.size
+ local data = metapost.characters.process(v[2],v[3],v[4],size/655360)
+ local list, t = { }, { }
+ for d=1,#data do
+ t = data[d]
+ t = fonts.constructors.scale(t, -1000)
+ t.id = font.define(t)
+ list[#list+1] = t.id
+ end
+ for k, v in pairs(t) do
+ g[k] = v -- kind of replace, when not present, make nil
+ end
+ g.variants = list
+end
+\stoptyping
+
+We hook this into the \CONTEXT\ font handler and from now on
+the \type {@punk} is recognized:
+
+\starttyping
+fonts.definers.methods.install( "punk", { { "metafont", "mfplain", "punkfont.mp", 10 } } )
+\stoptyping
+
+Now that we can define the font, we need to deal with
+the randomizer. This is optional fun. The mentioned case swappers
+are implemented in the \type {cases} namespace:
+
+\starttyping
+local fontdata = fonts.hashes.identifiers
+
+cases.actions[99] = function(current)
+ local c = current.char
+ local used = fontdata[current.font].variants
+ if used then
+ local f = math.random(1,#used)
+ current.font = used[f]
+ return current, true
+ else
+ return current, false
+ end
+end
+\stoptyping
+
+This function is called in one of the passes over the node
+list. Thanks to this framework we don't need that much code.
+We didn't show two statistics functions. They are the reason why
+we keep track of the total number of glyphs defined.
+
+This leaves us defining the interface, so here we go:
+
+\starttyping
+\def\StartRandomPunk{\begingroup\setcharactercasing[99]}
+\def\StopRandomPunk {\endgroup}
+\stoptyping
+
+The set command just sets the attribute that we associated
+with casing (one of the many attributes). The number 99 is
+rather arbitrary.
+
+If you follow the development of \LUATEX\ and \MKIV\ (we do talks at
+conferences, keep track of the development history in \type {mk.pdf},
+and report on the \CONTEXT\ mailing list) you will have noticed that
+we often use somewhat extreme examples to explore and test the
+functionality and this is no exception. As usual it helped us to improve
+the code and extend our todo list. Can the previous code convince
+the grand wizards to start using \LUATEX ? Probably not. Let's
+anyway hope that they will put the addition of punk math to their todo
+list. In the meantime we've already started adding missing characters:
+
+\startlinecorrection[blank]
+ \hbox to \hsize \bgroup \hss % { ' \ " }
+ \dorecurse{6}{\hbox{\char123\enspace\char39\enspace\char92\enspace\char34\enspace\char125}\quad}\unskip
+ \hss \egroup
+\stoplinecorrection
+
+Also, because we can be sure that Mojca Miklavec's first test will
+be if her favourite characters \color [mkcolor] {\ccaron}, \color
+[mkcolor] {\scaron} and \color [mkcolor] {\zcaron} are supported,
+we made sure that we composed those accented characters as well.
+\footnote {This is accomplished by adding \type
+{composecharacters(t)} at an undisclosed location in
+the previous code.}
+
+\StopRandomPunk \page[right] \stop
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/mk/mk-reflection.tex b/doc/context/sources/general/manuals/mk/mk-reflection.tex
new file mode 100644
index 000000000..f9a22650c
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-reflection.tex
@@ -0,0 +1,782 @@
+% language=uk
+
+\startcomponent mk-reflection
+
+\environment mk-environment
+
+\chapter {The luafication of \TEX\ and \CONTEXT}
+
+% (Previously published in \TUGBOAT, ask Karl for reference.)
+
+\subject {introduction}
+
+Here I will present the current stage of \LUATEX\ around beta
+stage 2, and discuss the impact so far on \CONTEXT\ \MKIV\
+that we use as our testbed. I'm writing this at the end of February
+2008 as part of the series of regular updates on \LUATEX. As such,
+this report is part of our more or less standard test document
+(\type{mk.tex}). More technical details can be found in the reference
+manual that comes with \LUATEX. More information on \MKIV\ is
+available in the \CONTEXT\ mailing lists, \WIKI, and
+\type{mk.pdf}.
+
+For those who never heard of \LUATEX: this is a new variant of
+\TEX\ where several long pending wishes are fulfilled:
+
+\startitemize[packed]
+\item combine the best of all \TEX\ engines
+\item add scripting capabilities
+\item open up the internals to the scripting engine
+\item enhance font support to \OPENTYPE
+\item move on to \UNICODE
+\item integrate \METAPOST
+\stopitemize
+
+There are a few more wishes, like converting the code base to
+\CCODE\ but these are long term goals.
+
+The project started a few years ago and is conducted by Taco
+Hoekwater (\PASCAL\ and \CCODE\ coding, code base management,
+reference manual), Hartmut Henkel (\PDF\ backend, experimental
+features) and Hans Hagen (general overview, \LUA\ and \TEX\
+coding, website). The code development got a boost by a grant of
+the Oriental \TEX\ project (project lead: Idris Samawi Hamid) and
+funding via the \TUG. The related \MPLIB\ project by the same team
+is also sponsored by several user groups. The very much needed
+\OPENTYPE\ fonts are also a user group funded effort: the Latin
+Modern and \TEX\ Gyre projects (project leads: Jerzy Ludwichowski,
+Volker RW\ Schaa and Hans Hagen), with development (the real
+work) by: Bogus\l{}aw Jackowski and Janusz Nowacki.
+
+One of our leading principles is that we focus on opening up. This
+means that we don't implement solutions (which also saves us many
+unpleasant and everlasting discussions). Implementing solutions is
+up to the user, or more precisely: the macro package writer, and
+since there are many solutions possible, each can do it his or her
+way. In that sense we follow the footsteps of Don Knuth: we make
+an extensible tool, you are free to like it or not, you can take
+it and extend it where needed, and there is no need to bother us
+(unless of course you find bugs or weird side effects). So far
+this has worked out quite well and we're confident that we can keep
+our schedule.
+
+We do our tests of a variant of \CONTEXT\ tagged \MKIV, especially
+meant for \LUATEX, but \LUATEX\ itself is in no way limited to or
+tuned for \CONTEXT. Large chunks of the code written for \MKIV\
+are rather generic and may eventually be packaged as a base system
+(especially font handling) so that one can use \LUATEX\ in rather
+plain mode. To a large extent \MKIV\ will be functionally compatible
+with \MKII, the version meant for traditional \TEX, although it
+knows how to profit from \XETEX. Of course the expectation is that
+certain things can be done better in \MKIV\ than in \MKII.
+
+\subject{status}
+
+By the end of 2007 the second major beta release of \LUATEX\ was
+published. In the first quarter of 2008 Taco would concentrate on
+\MPLIB, Hartmut would come up with the first version of the image
+library while I could continue working on \MKIV\ and start using
+\LUATEX\ in real projects. Of course there is some risk involved
+in that, but since we have a rather close loop for critical bug
+fixes, and because I know how to avoid some dark corners, the
+risk was worth taking.
+
+What did we accomplish so far? I can best describe this in relation
+to how \CONTEXT\ \MKIV\ evolved and will evolve. Before we do this,
+it makes sense to spend some words on why we started working on \MKIV\
+in the first place.
+
+When the \LUATEX\ project started, \CONTEXT\ was about 10 years in
+the field. I can safely say that we were still surprised by the
+fact that what at first sight seems unsolvable in \TEX\ somehow
+could always be dealt with. However, some of the solutions were
+rather tricky. The code evolved towards a more or less stable
+state, but sometimes depended on controlled processing. Take for
+instance backgrounds that can span pages and columns, can be
+nested and can have arbitrary shapes. This feature has been
+present in \CONTEXT\ for quite a while, but it involves an
+interplay between \TEX\ and \METAPOST. It depends on information
+collected in a previous run as well as (at runtime or not)
+processing of graphics.
+
+This means that by now \CONTEXT\ is not just a bunch of \TEX\ macros,
+but also closely related to \METAPOST. It also means that
+processing itself is by now rather controlled by a wrapper, in the
+case of \MKII\ called \TEXEXEC. It may sound complicated, but the
+fact that we have implemented workflows that run unattended for
+many years and involve pretty complex layouts and graphic
+manipulations demonstrates that in practice it's not as bad as it
+may sound.
+
+With the arrival of \LUATEX\ we not only have a rigourously
+updated \TEX\ engine, but also get \METAPOST\ integrated. Even
+better, the scripting language \LUA\ is not only used for opening
+up \TEX, but is also used for all kind of management tasks. As
+a result, the development of \MKIV\ not only concerns rewriting
+whole chunks of \CONTEXT, but also results in a set of new
+utilities and a rewrite of existing ones. Since dealing with
+\MKIV\ will demand some changes in the way users deal with
+\CONTEXT\ I will discuss some of them first. It also demonstrates
+that \LUATEX\ is more than just \TEX.
+
+\subject{utilities}
+
+There are two main scripts: \LUATOOLS\ and \MTXRUN. The first one
+started as a replacement for \KPSEWHICH\ but evolved into a base
+tool for generating (\TDS) file databases and generating formats.
+In \MKIV\ we replace the regular file searching, and therefore we
+use a different database model. That's the easy part. More
+tricky is that we need to bootstrap \MKIV\ into this alternative
+mode and when doing so we don't want to use the \type {kpse} library
+because that would trigger loading of its databases. To discuss
+the gory details here might cause users to refrain from using \LUATEX\ so
+we stick to a general description.
+
+\startitemize
+\item When generating a format, we also generate a bootstrap \LUA\
+ file. This file is compiled to bytecode and is put alongside
+ the format file. The libraries of this bootstrap file are
+ also embedded in the format.
+\item When we process a document, we instruct \LUATEX\ to load
+ this bootstrap file before loading the format. After the
+ format is loaded, we re-initialize the embedded libraries.
+ This is needed because at that point more information may be
+ available than at loading time. For instance, some
+ functionality is available only after the format is loaded
+ and \LUATEX\ enters the \TEX\ state.
+\item File databases, formats, bootstrap files, and
+ runtime|-|generated cached data is kept in a \TDS\ tree specific cache
+ directory. For instance, \OPENTYPE\ font tables are stored
+ on disk so that next time loading them is faster.
+\stopitemize
+
+Starting \LUATEX\ and \MKIV\ is done by \LUATOOLS. This tool
+is generic enough to handle other formats as well, like \MPTOPDF\
+or \PLAIN. When you run this script without argument, you will
+see:
+
+\starttyping
+version 1.1.1 - 2006+ - PRAGMA ADE / CONTEXT
+
+--generate generate file database
+--variables show configuration variables
+--expansions show expanded variables
+--configurations show configuration order
+--expand-braces expand complex variable
+--expand-path expand variable (resolve paths)
+--expand-var expand variable (resolve references)
+--show-path show path expansion of ...
+--var-value report value of variable
+--find-file report file location
+--find-path report path of file
+--make or --ini make luatex format
+--run or --fmt= run luatex format
+--luafile=str lua inifile (default is <progname>.lua)
+--lualibs=list libraries to assemble (optional)
+--compile assemble and compile lua inifile
+--verbose give a bit more info
+--minimize optimize lists for format
+--all show all found files
+--sort sort cached data
+--engine=str target engine
+--progname=str format or backend
+--pattern=str filter variables
+--lsr use lsr and cnf directly
+\stoptyping
+
+For the \LUA\ based file searching, \LUATOOLS\ can be seen as a
+replacement for \MKTEXLSR\ and \KPSEWHICH\ and as such it also
+recognizes some of the \KPSEWHICH\ flags. The script is self
+contained in the sense that all needed libraries are embedded. As
+a result no library paths need to be set and packaged. Of course
+the script has to be run using \LUATEX\ itself. The following
+commands generate the file databases, generate a \CONTEXT\ \MKIV\
+format, and process a file:
+
+\starttyping
+luatools --generate
+luatools --make --compile cont-en
+luatools --fmt=cont-en somefile.tex
+\stoptyping
+
+There is no need to install \LUA in order to run this script. This
+is because \LUATEX\ can act as such with the advantage that the
+built-in libraries are available too, for instance the \LUA\ file
+system \type {lfs}, the \ZIP\ file manager \type {zip}, the
+\UNICODE\ libary \type {unicode}, \type {md5}, and of course some of
+our own.
+
+\starttabulate
+\NC luatex \NC a \LUA||enhanced \TEX\ engine \NC \NR
+\NC texlua \NC a \LUA\ engine enhanced with some libraries \NC \NR
+\NC texluac \NC a \LUA\ bytecode compiler enhanced with some libraries \NC \NR\NC \NR
+\stoptabulate
+
+In principle \type {luatex} can perform all tasks but because we
+need to be downward compatible with respect to the command line
+and because we want \LUA\ compatible variants, you can copy or
+symlink the two extra variants to the main binary.
+
+The second script, \MTXRUN, can be seen as a replacement for the
+\RUBY\ script \TEXMFSTART, a utility whose main task is to launch
+scripts (or documents or whatever) in a \TDS\ tree. The \MTXRUN\
+script makes it possible to get away from installing \RUBY\ and as
+a result a regular \TEX\ installation can be made independent of
+scripting tools.
+
+\starttyping
+version 1.0.2 - 2007+ - PRAGMA ADE / CONTEXT
+
+--script run an mtx script
+--execute run a script or program
+--resolve resolve prefixed arguments
+--ctxlua run internally (using preloaded libs)
+--locate locate given filename
+
+--autotree use texmf tree cf.\ environment settings
+--tree=pathtotree use given texmf tree (def: 'setuptex.tmf')
+--environment=name use given (tmf) environment file
+--path=runpath go to given path before execution
+--ifchanged=filename only execute when given file has changed
+--iftouched=old,new only execute when given file has changed
+
+--make create stubs for (context related) scripts
+--remove remove stubs (context related) scripts
+--stubpath=binpath paths where stubs wil be written
+--windows create windows (mswin) stubs
+--unix create unix (linux) stubs
+
+--verbose give a bit more info
+--engine=str target engine
+--progname=str format or backend
+
+--edit launch editor with found file
+--launch (--all) launch files (assume os support)
+
+--intern run script using built-in libraries
+\stoptyping
+
+This help information gives an impression of what the script does:
+running other scripts, either within a certain \TDS\ tree or not,
+and either conditionally or not. Users of \CONTEXT\ will probably
+recognize most of the flags. As with \TEXMFSTART, arguments with
+prefixes like \type{file:} will be resolved before being
+passed to the child process.
+
+The first option, \type {--script} is the most important one and
+is used like:
+
+\starttyping
+mtxrun --script fonts --reload
+mtxrun --script fonts --pattern=lm
+\stoptyping
+
+In \MKIV\ you can access fonts by filename or by font name, and
+because we provide several names per font you can use this command
+to see what is possible. Patterns can be \LUA\ expressions, as
+demonstrated here:
+
+\starttyping
+mtxrun --script font --list --pattern=lmtype.*regular
+
+lmtypewriter10-capsregular LMTypewriter10-CapsRegular lmtypewriter10-capsregular.otf
+lmtypewriter10-regular LMTypewriter10-Regular lmtypewriter10-regular.otf
+lmtypewriter12-regular LMTypewriter12-Regular lmtypewriter12-regular.otf
+lmtypewriter8-regular LMTypewriter8-Regular lmtypewriter8-regular.otf
+lmtypewriter9-regular LMTypewriter9-Regular lmtypewriter9-regular.otf
+lmtypewritervarwd10-regular LMTypewriterVarWd10-Regular lmtypewritervarwd10-regular.otf
+\stoptyping
+
+A simple
+
+\starttyping
+mtxrun --script fonts
+\stoptyping
+
+gives:
+
+\starttyping
+version 1.0.2 - 2007+ - PRAGMA ADE / CONTEXT | font tools
+
+--reload generate new font database
+--list list installed fonts
+--save save open type font in raw table
+
+--pattern=str filter files
+--all provide alternatives
+\stoptyping
+
+In \MKIV\ font names can be prefixed by \type {file:} or \type
+{name:} and when they are resolved, several attempts are made, for
+instance non|-|characters are ignored. The \type {--all} flag shows
+more variants.
+
+Another example is:
+
+\starttyping
+mtxrun --script context --ctx=somesetup somefile.tex
+\stoptyping
+
+Again, users of \TEXEXEC\ may recognize part of this and indeed this is
+its replacement. Instead of \TEXEXEC\ we use a script named \type
+{mtx-context.lua}. Currently we have the following scripts and
+more will follow:
+
+The \type {babel} script is made in cooperation with Thomas
+Schmitz and can be used to convert babelized Greek files into
+proper \UTF. More of such conversions may follow. With \type
+{cache} you can inspect the content of the \MKIV\ cache and do
+some cleanup. The \type {chars} script is used to construct some
+tables that we need in the process of development. As its name
+says, \type {check} is a script that does some checks, and in
+particular it tries to figure out if \TEX\ files are correct. The
+already mentioned \type {context} script is the \MKIV\ replacement
+of \TEXEXEC, and takes care of multiple runs, preloading project
+specific files, etc. The \type {convert} script will replace the
+\RUBY\ script \type {pstopdf}.
+
+A rather important script is the already mentioned \type {fonts}.
+Use this one for generating font name databases (which then
+permits a more liberal access to fonts) or identifying installed
+fonts. The \type {unzip} script indeed unzips archives. The \type
+{update} script is still somewhat experimental and is one of the
+building blocks of the \CONTEXT\ minimal installer system by
+Mojca Miklavec and Arthur Reutenauer. This update script
+synchronizes a local tree with a repository and keeps an
+installation as small as possible, which for instance means: no
+\OPENTYPE\ fonts for \PDFTEX, and no redundant \TYPEONE\ fonts for
+\LUATEX\ and \XETEX.
+
+The (for the moment) last two scripts are \type {watch} and \type
+{web}. We use them in (either automated or not) remote publishing
+workflows. They evolved out of the \EXAMPLE\ framework which is
+currently being reimplemented in \LUA.
+
+As you can see, the \LUATEX\ project and its \CONTEXT\ companion
+\MKIV\ project not only deal with \TEX\ itself but also
+facilitates managing the workflows. And the next list is
+just a start.
+
+\starttabulate
+\NC context \NC controls processing of files by \MKIV \NC \NR
+\NC babel \NC conversion tools for \LATEX\ files \NC \NR
+\NC cache \NC utilities for managing the cache \NC \NR
+\NC chars \NC utilities used for \MKIV\ development \NC \NR
+\NC check \NC \TEX\ syntax checker \NC \NR
+\NC convert \NC helper for some basic graphic conversion \NC \NR
+\NC fonts \NC utilities for managing font databases \NC \NR
+\NC update \NC tool for installing minimal \CONTEXT\ trees \NC \NR
+\NC watch \NC hot folder processing tool \NC \NR
+\NC web \NC utilities related to automate workflows \NC \NR
+\stoptabulate
+
+There will be more scripts. These scripts are normally rather small
+because they hook into \MTXRUN\ which provides the libraries. Of course
+existing tools remain part of the toolkit. Take for instance \CTXTOOLS,
+a \RUBY\ script that converts font encoded pattern files to generic
+\UTF\ encoded files.
+
+Those who have followed the development of \CONTEXT\ will notice that we moved
+from utilities written in \MODULA\ to tools written in \PERL. These were later
+replaced by \RUBY\ scripts and eventually most of them will be rewritten in
+\LUA.
+
+\subject{macros}
+
+I will not repeat what is said already in the \MKIV\ related
+documents, but stick to a summary of what the impact on \CONTEXT\
+is and will be. From this you can deduce what the possible influence
+on other macro packages can be.
+
+Opening up \TEX\ started with rewriting all \IO\ related activities.
+Because we wanted to be able to read from \ZIP\ files, the web and
+more, we moved away from the traditional \KPSE\ based file
+handling. Instead \MKIV\ uses an extensible variant written in
+\LUA. Because we need to be downward compatible, the code is
+somewhat messy, but it does the job, and pretty quickly and efficiently
+too. Some alternative input media are implemented and many more
+can be added. In the beginning I permitted several ways to specify
+a resource but recently a more restrictive \URL\ syntax was
+imposed. Of course the file locating mechanisms provide the same
+control as provided by the file readers in \MKII.
+
+An example of reading from a \ZIP\ file is:
+
+\starttyping
+\input zip:///archive.zip?name=blabla.tex
+\input zip:///archive.zip?name=/somepath/blabla.tex
+\stoptyping
+
+In addition one can register files, like:
+
+\starttyping
+\usezipfile[archive.zip]
+\usezipfile[tex.zip][texmf-local]
+\usezipfile[tex.zip?tree=texmf-local]
+\stoptyping
+
+The last two variants register a zip file in the \TDS\ structure
+where more specific lookup rules apply. The files in a
+registered file are known to the file searching mechanism so one
+can give specifications like the following:
+
+\starttyping
+\input */blabla.tex
+\input */somepath/blabla.tex
+\stoptyping
+
+In a similar fashion one can use the \type {http}, \type {ftp} and
+other protocols. For this we use independent fetchers that cache
+data in the \MKIV\ cache. Of course, in more structured projects,
+one will seldom use the \type {\input} command but use a project
+structure instead.
+
+Handling of files rather quickly reached a stable state, and we seldom need
+to visit the code for fixes. Already after a few years of developing the first
+code for \LUATEX\ we reached a state of \quote {Hm, when did I write
+this?}. When we have reached a stable state I foresee that much of the
+older code will need a cleanup.
+
+Related to reading files is the sometimes messy area of input
+regimes (file encoding) and font encoding, which itself relates to
+dealing with languages. Since \LUATEX\ is \UTF-8 based, we need to
+deal with file encoding issues in the frontend, and this is what
+\LUA\ based file handling does. In practice users of \LUATEX\ will
+swiftly switch to \UTF\ anyway but we provide regime control for
+historic reasons. This time the recoding tables are \LUA\ based
+and as a result \MKIV\ has no regime files. In a similar fashion
+font encoding is gone: there is still some old code that deals
+with default fallback characters, but most of the files are gone.
+The same will be true for math encoding. All information is now
+stored in a character table which is the central point in many
+subsystems now.
+
+It is interesting to notice that until now users have never asked
+for support with regards to input encoding. We can safely assume
+that they just switched to \UTF\ and recoded older documents. It
+is good to know that \LUATEX\ is mostly \PDFTEX\ but also
+incorporates some features of \OMEGA. The main reason for this is
+that the Oriental \TEX\ project needed bidirectional typesetting
+and there was a preference for this implementation over the one provided by
+\ETEX. As a side effect input translation is also present, but
+since no one seems to use it, that may as well go away. In \MKIV\
+we refrain from input processing as much as possible and focus on
+processing the node lists. That way there is no interference
+between user data, macro expansion and whatever may lead to the
+final data that ends up in the to|-|be|-|typeset stream. As said, users
+seem to be happy to use \UTF\ as input, and so there is hardly any need
+for manipulations.
+
+Related to processing input is verbatim: a feature that is always
+somewhat complicated by the fact that one wants to typeset a
+manual about \TEX\ in \TEX\ and therefore needs flexible escapes
+from illustrative as well as real \TEX\ code. In \MKIV\ verbatim
+as well as all buffering of data is dealt with in \LUA. It took a
+while to figure out how \LUATEX\ should deal with the concept of a
+line ending, but we got there. Right from the start we made sure
+that \LUATEX\ could deal with collections of catcode settings
+(those magic states that characters can have). This means that one
+has complete control at both the \TEX\ and \LUA\ end over the way
+characters are dealt with.
+
+In \MKIV\ we also have some pretty printing features, but many
+languages are still missing. Cleaning up the premature verbatim code
+and extending pretty printing is on the agenda for the end of 2008.
+
+Languages also are handled differently. A major change is that
+pattern files are no longer preloaded but read in at runtime.
+There is still some relation between fonts and languages, no
+longer in the encoding but in dealing with \OPENTYPE\ features.
+Later we will do a more drastic overhaul (with multiple name
+schemes and such). There are a few experimental features, like
+spell checking.
+
+Because we have been using \UTF\ encoded hyphenation patterns for
+quite some time now, and because \CONTEXT\ ships with its own files,
+this transition probably went unnoticed, apart maybe from a faster
+format generation and less startup time.
+
+Most of these features started out as an experiment and provided a
+convenient way to test the \LUATEX\ extensions. In \MKIV\ we go
+quite far in replacing \TEX\ code by \LUA, and how far one goes is
+a matter of taste and ambition. An example of a recent replacement
+is graphic inclusion. This is one of the oldest mechanisms in
+\CONTEXT\ and it has been extended many times, for instance by
+plugins that deal with figure databases (selective filtering from
+\PDF\ files made for this purpose), efficient runtime conversion,
+color conversion, downsampling and product dependent alternatives.
+
+One can question if a properly working mechanism should be
+replaced. Not only is there hardly any speed to gain (after all,
+not that many graphics are included in documents), a \LUA--\TEX\
+mix may even look more complex. However, when an opened-up \TEX\
+keeps evolving at the current pace, this last argument becomes
+invalid because we can no longer give that \TeX ie code to \LUA. Also,
+because most of the graphic inclusion code deals with locating
+files and figuring out the best quality variant, we can benefit
+much from \LUA: file handling is more robust, the code looks
+cleaner, complex searches are faster, and eventually we can
+provide way more clever lookup schemes. So, after all, switching
+to \LUA\ here makes sense. A nice side effect is that some of the
+mentioned plugins now take a few lines of extra code instead of
+many lines of \TEX. At the time of writing this, the beta version
+of \MKIV\ has \LUA\ based graphic inclusion.
+
+A disputable area for Luafication is multipass data. Most of that has
+already been moved to \LUA\ files instead of \TEX\ files, and the
+rest will follow: only tables of contents still use a \TEX\
+auxiliary file. Because at some point we will reimplement the
+whole section numbering and cross referencing, we postponed that
+till later. The move is disputable because in the end, most data
+ends up in \TEX\ again, which involves some conversion. However, in
+\LUA\ we can store and manipulate information much more easily and so
+we decided to follow that route. As a start, index information is
+now kept in \LUA\ tables, sorted on demand, depending on language
+needs and such. Positional information used to take up much hash
+space which could deplete the memory pool, but now we can have
+millions of tracking points at hardly any cost.
+
+Because it is a quite independent task, we could rewrite the
+\METAPOST\ conversion code in \LUA\ quite early in the
+development. We got smaller and cleaner code, more flexibility, and
+also gained some speed. The code involved in this may change as
+soon as we start experimenting with \MPLIB. Our expectations
+are high because in a bit more modern designs a graphic engine
+cannot be missed. For instance, in educational material,
+backgrounds and special shapes are all over the place, and we're
+talking about many \METAPOST\ runs then. We expect to bring down the
+processing time of such documents considerably, if only because
+the \METAPOST\ runtime will be close to zero (as experiments have
+shown us).
+
+While writing the code involved in the \METAPOST\ conversion a new
+feature showed up in \LUA: \type {lpeg}, a parsing library. From
+that moment on \type {lpeg} was being used all over the place,
+most noticeably in the code that deals with processing \XML. Right
+from the start I had the feeling that \LUA\ could provide a more
+convenient way to deal with this input format. Some experiments
+with rewriting the \MKII\ mechanisms did not show the expected
+speedup and were abandoned quickly.
+
+Challenged by \type {lpeg} I then wrote a parser and started
+playing with a mixture of a tree based and stream approach to
+\XML\ (\MKII\ is mostly stream based). Not only is loading \XML\
+code extremely fast (we used 40~megaByte files for testing),
+dealing with the tree is also convenient. The additional \MKIV\
+methods are currently being tested in real projects and so far
+they result in an acceptable and pleasant mix of \TEX\ and \XML. For
+instance, we can now selectively process parts of the tree using
+path expressions, hook in code, manipulate data, etc.
+
+The biggest impact of \LUATEX\ on the \CONTEXT\ code base is not
+the previously mentioned mechanisms but one not yet mentioned:
+fonts. Contrary to \XETEX, which uses third party libraries,
+\LUATEX\ does not implement dealing with font specific issues at
+all. It can load several font formats and accepts font data in a
+well|-|defined table format. It only processes character nodes into
+glyph nodes and it's up to the user to provide more by
+manipulating the node lists. Of course there is still basic
+ligature building and kerning available but one can bypass that with
+other code.
+
+In \MKIV, when we deal with \TYPEONE\ fonts, we try to get away
+from traditional \TFM\ files and use \AFM\ files instead (indeed,
+we parse them using \type {lpeg}). The fonts are mapped onto
+\UNICODE. Awaiting extensions of math we only use \TFM\ files for
+math fonts. Of course \OPENTYPE\ fonts are dealt with and this is
+where we find most \LUA\ code in \MKIV: implementing features.
+Much of that is a grey area but as part of the Oriental \TEX\
+project we're forced to deal with complex feature support, so that
+provides a good test bed as well as some pressure for getting it
+done. Of course there is always the question to what extent we
+should follow the (maybe faulty) other programs that deal with
+font features. We're lucky that the Latin Modern and \TEX\ Gyre
+projects provide real fonts as well as room for discussion and
+exploring these grey areas.
+
+In parallel to writing this, I made a tracing feature for Oriental
+\TEX er Idris so that he could trace what happened with the Arabic
+fonts that he is making. This was relatively easy because already
+in an early stage of \MKIV\ some debugging mechanisms were built.
+One of its nice features is that on an error, or when one
+traces something, the results will be shown in a web browser.
+Unfortunately I have not enough time to explore such aspects in
+more detail, but at least it demonstrates that we can change some
+aspects of the traditional interaction with \TEX\ in more radical
+ways.
+
+Many users may be aware of the existence of so|-|called virtual
+fonts, if only because it can be a cause of problems (related to
+map files and such). Virtual fonts have a lot of potential but
+because they were related to \TEX's own font data format they never got
+very popular. In \LUATEX\ we can make virtual fonts at runtime. In
+\MKIV\ for instance we have a feature (we provide features beyond
+what \OPENTYPE\ does) that completes a font by composing missing
+glyphs on the fly. More of this trickery can be expected as soon
+as we have time and reason to implement it.
+
+In \PDFTEX\ we have a couple of font related goodies, like
+character expansion (inspired by Hermann Zapf) and character
+protruding. There are a few more but these had limitations and
+were suboptimal and therefore have been removed from \LUATEX.
+After all, they can be implemented more robustly in \LUA. The two
+mentioned extensions have been (of course) kept and have been partially
+reimplemented so that they are now uniquely bound to fonts
+(instead of being common to fonts that traditional \TEX\ shares in
+memory). The character related tables can be filled with \LUA\ and
+this is what \MKIV\ now does. As a result much \TEX\ code could go
+away. We still use shape related vectors to set up the values, but
+we also use information stored in our main character database.
+
+A likely area of change is math and not only as a result of the
+\TEX\ gyre math project which will result in a bunch of \UNICODE\
+compliant math fonts. Currently in \MKIV\ the initialization
+already partly takes place using the character database, and so
+again we will end up with less \TEX\ code. A side effect of
+removing encoding constraints (i.e.\ moving to \UNICODE) is that
+things get faster. Later this year math will be opened up.
+
+One of the biggest impacts of opening up is the arrival of
+attributes. In traditional \TEX\ only glyph nodes have an
+attribute, namely the font id. Now all nodes can have attributes,
+many of them. We use them to implement a variety of features that
+already were present in \MKII, but used marks instead: color (of
+course including color spaces and transparency), inter|-|character
+spacing, character case manipulation, language dependent pre and
+post character spacing (for instance after colons in French),
+special font rendering such as outlines, and much more. An
+experimental application is a more advanced glue|/|penalty model
+with look|-|back and look|-|ahead as well as relative weights. This
+is inspired by the one good thing that \XML\ formatting objects
+provide: a spacing and pagebreak model.
+
+It does not take much imagination to see that features demanding
+processing of node lists come with a price: many of the
+callbacks that \LUATEX\ provides are indeed used and as a result
+quite some time is spent in \LUA. You can add to that the time
+needed for handling font features, which also boils down to
+processing node lists. The second half of 2007 Taco and I spent
+much time on benchmarking and by now the interface between \TEX\
+and \LUA\ (passing information and manipulating nodes) has been
+optimized quite well. Of course there's always a price for
+flexibility and \LUATEX\ will never be as fast as \PDFTEX, but
+then, \PDFTEX\ does not deal with \OPENTYPE\ and such.
+
+We can safely conclude that the impact of \LUATEX\ on \CONTEXT\ is
+huge and that fundamental changes take place in all key
+components: files, fonts, languages, graphics, \METAPOST\, \XML,
+verbatim and color to start with, but more will follow. Of course
+there are also less prominent areas where we use \LUA\ based
+approaches: handling \URL's, conversions, alternative math
+input to mention a few. Sometime in 2009 we expect to start
+working on more fundamental typesetting related issues.
+
+\subject{roadmap}
+
+On the \LUATEX\ website \type {www.luatex.org} you can find a
+roadmap. This roadmap is just an indication of what happened and
+will happen and it will be updated when we feel the need. Here is
+a summary.
+
+\startitemize
+
+\head merging engines
+
+Merge some of the \ALEPH\ codebase into \PDFTEX\ (which already has
+\ETEX) so that \LUATEX\ in \DVI\ mode behaves like \ALEPH, and in
+\PDF\ mode like \PDFTEX. There will be \LUA\ callbacks for file
+searching. This stage is mostly finished.
+
+\head \OPENTYPE\ fonts
+
+Provide \PDF\ output for \ALEPH\ bidirectional functionality and add
+support for \OPENTYPE\ fonts. Allow \LUA\ scripts to control all
+aspects of font loading, font definition and manipulation. Most of
+this is finished.
+
+\head tokenizing and node lists
+
+Use \LUA\ callbacks for various internals, complete access to
+tokenizer and provide access to node lists at moments that make
+sense. This stage is completed.
+
+\head paragraph building
+
+Provide control over various aspects of paragraph building
+(hyphenation, kerning, ligature building), dynamic loading loading
+of hyphenation patterns. Apart from some small details these
+objectives are met.
+
+\head \METAPOST\ (\MPLIB)
+
+Incorporate a \METAPOST\ library and investigate options for runtime
+font generation and manipulation. This activity is on schedule and
+integration will take place before summer 2008.
+
+\head image handling
+
+Image identification and loading in \LUA\ including scaling and
+object management. This is nicely on schedule, the first version of the
+image library showed up in the 0.22 beta and some more features
+are planned.
+
+\head special features
+
+Cleaning up of \HZ\ optimization and protruding and getting rid of
+remaining global font properties. This includes some cleanup of
+the backend. Most of this stage is finished.
+
+\head page building
+
+Control over page building and access to internals that matter.
+Access to inserts. This is on the agenda for late 2008.
+
+\head \TEX\ primitives
+
+Access to and control over most \TEX\ primitives (and related
+mechanisms) as well as all registers. Especially box handling
+has to be reinvented. This is an ongoing effort.
+
+\head \PDF\ backend
+
+Open up most backend related features, like annotations and
+object management. The first code will show up at the end of 2008.
+
+\head math
+
+Open up the math engine parallel to the development of
+the \TEX\ Gyre math fonts. Work on this will start during 2008 and
+we hope that it will be finished by early 2009.
+
+\head \CWEB
+
+Convert the \TEX\ Pascal source into \CWEB\ and start using \LUA\
+as glue language for components. This will be tested on \MPLIB\
+first. This is on the long term agenda, so maybe around 2010 you
+will see the first signs.
+
+\stopitemize
+
+In addition to the mentioned functionality we have a couple of
+ideas that we will implement along the road. The first formal beta
+was released at \TUG\ 2007 in San Diego (\USA). The first
+formal release will be at \TUG\ 2008 in Cork (Ireland). The
+production version will be released at Euro\TEX\ in the
+Netherlands (2009).
+
+
+Eventually \LUATEX\ will be the successor to \PDFTEX\ (informally
+we talk of \PDFTEX\ version~2). It can already be used as a
+drop|-|in for \ALEPH\ (the stable variant of \OMEGA). It provides a
+scripting engine without the need to install a specific scripting
+environment. These factors are among the reasons why distributors
+have added the binaries to the collections. Norbert Preining
+maintains the \LINUX\ packages, Akira Kakuto provides \WINDOWS\
+binaries as part of his distribution, Arthur Reutenauer takes care
+of \MACOSX\ and Christian Schenk recently added \LUATEX\ to \MIKTEX.
+The \LUATEX\ and \MPLIB\ projects are hosted at Supelec by Fabrice
+Popineau (one of our technical consultants). And with Karl Berry
+being one of our motivating supporters, you can be sure that the
+binaries will end up someplace in \TEXLIVE\ this year.
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/mk/mk-structure.tex b/doc/context/sources/general/manuals/mk/mk-structure.tex
new file mode 100644
index 000000000..f199feb7b
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-structure.tex
@@ -0,0 +1,437 @@
+% language=uk
+
+\usemodule[narrowtt]
+
+\environment mk-environment
+
+\startcomponent mk-structure
+
+\chapter{Everything structure}
+
+At the time of this writing, \CONTEXT\ \MKIV\ spends some 50\% of
+its time in \LUA. There are several reasons for this.
+
+\startitemize[packed]
+\item All \IO\ goes via \LUA, including messages and logging. This includes
+ file searching which happened to be done by the \KPSE\ library.
+\item Much font handling is done by \LUA\ too, for instance \OPENTYPE\ features
+ are completely handled by \LUA.
+\item Because \TEX\ is highy optimized, its influence on runtime is less
+ prominent. Even if we delegate some tasks to \LUA, \TEX\ still has
+ work to do.
+\stopitemize
+
+Among the reported statistics of a 242 page version of \type
+{mk.pdf} (not containing this chapter) we find the following:
+
+\startntyping
+input load time - 0.094 seconds
+startup time - 0.905 seconds (including runtime option file processing)
+jobdata time - 0.140 seconds saving, 0.062 seconds loading
+fonts load time - 5.413 seconds
+xml load time - 0.000 seconds, lpath calls: 46, cached calls: 31
+lxml load time - 0.000 seconds preparation, backreferences: 0
+mps conversion time - 0.000 seconds
+node processing time - 1.747 seconds including kernel
+kernel processing time - 0.343 seconds
+attribute processing time - 2.075 seconds
+language load time - 0.109 seconds, n=4
+graphics processing time - 0.109 seconds including tex, n=7
+metapost processing time - 0.484 seconds, loading: 0.016 seconds, execution: 0.203 seconds, n: 65
+current memory usage - 332 MB
+loaded patterns - gb:gb:pat:exc:3 nl:nl:pat:exc:4 us:us:pat:exc:2
+control sequences - 34245 of 165536
+callbacks - direct: 235579, indirect: 18665, total: 254244 (1050 per page)
+runtime - 25.818 seconds, 242 processed pages, 242 shipped pages, 9.373 pages/second
+\stopntyping
+
+The startup time includes initial font loading (we don't store fonts
+in the format). Jobdata time involves loading and saving multipass data
+used for tables of contents, references, positioning, etc. The time needed
+for loading fonts is over 5 seconds due to the fact that we load a couple of
+real large and complex fonts. Node processing time mostly is related to
+\OPENTYPE\ feature support. The kernel processing time refers to hyphenation
+and line breaking, for which (of course) we use \TEX. Direct callbacks are
+implicit calls to \LUA, using \type {\directlua} while the indirect calls
+concern overloaded \TEX\ functions and callbacks triggered by \TEX\ itself.
+
+Depending on the system load on my laptop, the throughput is around
+10 pages per second for this document, which is due to the fact
+that some font trickery takes place using a few arabic fonts, some
+chinese, a bunch of metapost punk instances, Zapfino, etc.
+
+The times reported are accumulated times and contain quite some
+accumulated rounding errors so assuming that the operating system
+rounds up the times, the totals in practice might be higher. So,
+looking at the numbers, you might wonder if the load on \LUA\ will
+become even larger. This is not necessary. Some tasks can be done
+better in \LUA\ but not always with less code, especially when we
+want to extend functionality and to provide more robust solutions.
+Also, even if we win some processing time we might as well waste
+it in interfacing between \TEX\ and \LUA. For instance, we can
+delegate pretty printing to \LUA, but most documents don't contain
+verbatim at all. We can handle section management by \LUA, but how
+many section headers does a document have?
+
+When the future of \TEX\ is discussed, among the ideas presented
+is to let \TEX\ stick to typesetting and implement it as a
+component (or library) on top of a (maybe dedicated) language.
+This might sound like a nice idea, but eventually we will end up
+with some kind of user interface and a substantial amount of code
+dedicated to dealing with fonts, structure, character management,
+math etc.
+
+In the process of converting \CONTEXT\ to \MKIV\ we try to use
+each language (\TEX, \LUA, \METAPOST) for what it is best suited
+for. Instead of starting from scratch, we start with existing code
+and functionality, because we need a running system. Eventually we
+might find \TEX's role as language being reduced to (or maybe we can
+better talk of \quote {focused on}) mostly aspects of
+typesetting, but \CONTEXT\ as a whole will not be much different
+from the perspective of the user.
+
+So, this is how the transition of \CONTEXT\ takes place:
+
+\startitemize[packed]
+\item We started with replacing isolated bits and pieces of code
+ where \LUA\ is a more natural candidate, like file \IO, encoding
+ issues.
+\item We implement new functionality, for instance \OPENTYPE\
+ and \TYPEONE\ support.
+\item We reimplement mechanisms that are not efficient as we want them
+ to be, like buffers and verbatim.
+\item We add new features, for instance tree based \XML\ processing.
+\item After evaluating we reimplement again when needed (or when \LUATEX\
+ evolves).
+\stopitemize
+
+Yet another transition is the one we will discuss next:
+
+\startitemize[packed]
+\item We replace complex mechanisms by new ones where we separate
+ management and typesetting.
+\stopitemize
+
+This not so trivial effort because it affects many aspects of \CONTEXT\ and
+as such we need to adapt a lot of code at the same time: all things
+related to structure:
+
+\startitemize[packed]
+\item sectioning (chapters, sections, etc)
+\item numbering (pages, itemize, enumeration, floats, etc)
+\item marks (used for headers and footers)
+\item lists (tables of contents, lists of floats, sorted lists)
+\item registers (including collapsing of page ranges)
+\item cross referencing (to text as well as pages)
+\item notes (footnotes, endnotes, etc)
+\stopitemize
+
+All these mechanisms are somehow related. A section head can occur
+in a list, can be cross referenced, might be shows in a header and
+of course can have a number. Such a number can have multiple
+components (1.A.3) where each component can have its own
+conversion, rendering (fonts, colors) and selectively have less
+components. In tables of contents either or not we want to see all
+components, separators etc. Such a table can be generated at each
+level, which demands filtering mechanisms. The same is true for
+registers. There we have page numbers too, and these may be
+prefixed by section numbers, possibly rendered differently than
+the original section number.
+
+Much if this is possible in \CONTEXT\ \MKII, but the code that
+deals with this is not always nice and clean and right from the start
+of the \LUATEX\ project it has been on the agenda to clean it up. The code
+evolved over time and
+functionality was added when needed. But, the projects
+that we deal with demand more (often local) control over the
+components of a number.
+
+What makes structure related data complex is that we need to keep
+track of each aspect in order to be able to reproduce the
+rendering in for instance a table of contents, where we also may
+want to change some of the aspects (for instance separators in a
+different color). Another pending issue is \XML\ and although we
+could normally deal with this quite well, it started making sense
+to make all multi|-|pass data (registers, tables of content,
+sorted lists, references, etc.) more \XML\ aware. This is a
+somewhat hairy task, if only because we need to switch between
+\TEX\ mode and \XML\ mode when needed and at the same time keep an
+eye on unwanted expansion: do we keep structure in the content or
+not?
+
+Rewriting the code that deals with these aspects of typesetting is
+the first step in a separation of code in \MKII\ and \MKIV. Until
+now we tried to share much code, but this no longer makes sense.
+Also, at the \CONTEXT\ conference in Bohinj (2008) it was decided
+that given the development of \MKIV, it made sense to freeze
+\MKII\ (apart from bug fixes and minor extensions). This decision
+opens the road to more drastic changes. We will roll back some of
+the splits in code that made sharing code possible and just
+replace whole components of \CONTEXT\ as a whole. This also gives
+us the opportunity to review code more drastically than until now
+in the perspective of \ETEX.
+
+Because this stage in the rewrite of \CONTEXT\ might bring some
+compatibility issues with it (especially for users who use the
+more obscure tuning options), I will discuss some of the changes
+here. A bit of understanding might make users more tolerant.
+
+The core data structure that we need to deal with is a number, which
+can be constructed in several ways.
+
+\def\NotaBeneR{\inframed[frame=off,background=color,backgroundcolor=mktransparentred]}
+\def\NotaBeneG{\inframed[frame=off,background=color,backgroundcolor=mktransparentgreen]}
+\def\NotaBeneB{\inframed[frame=off,background=color,backgroundcolor=mktransparentblue]}
+\def\NotaBeneY{\inframed[frame=off,background=color,backgroundcolor=mktransparentyellow]}
+\def\NotaBeneS{\inframed[frame=off,background=color,backgroundcolor=mktransparentgray]}
+
+\starttabulate[|l|l|]
+\NC sectioning \NC \NotaBeneR{1.A.2.II} some title \NC \NR
+\NC pagenumber \NC page \NotaBeneR{1.A}\NotaBeneG{--}\NotaBeneB{23} \NC \NR
+\NC reference \NC in chapter \NotaBeneR{2.II} \NC \NR
+\NC marking \NC \NotaBeneR{A}: some title with preceding number \NC \NR
+\NC contents \NC \NotaBeneR{2.II} some title with some page number \NotaBeneR{1.A}\NotaBeneG{--}\NotaBeneB{23} \NC \NR
+\NC index \NC some word \NotaBeneB{23}, \NotaBeneR{A}\NotaBeneG{--}\NotaBeneB{42}---\NotaBeneR{B}\NotaBeneG{--}\NotaBeneB{48} \NC \NR
+\NC itemize \NC \NotaBeneY{a} first item \NotaBeneY{a.1} subitem item \NC \NR
+\NC enumerate \NC example \NotaBeneR{1.A.2.II}\NotaBeneG{.}\NotaBeneY{a} \NC \NR
+\NC floatcaption \NC figure \NotaBeneR{1}\NotaBeneG{--}\NotaBeneB{2} \NC \NR
+\NC footnotes \NC note \NotaBeneS{\symbol[3]} \NC \NR
+\stoptabulate
+
+In this table we see how numbers are composed:
+
+\starttabulate[|l|p|]
+\NC \NotaBeneR{section number} \NC It has several components, separated by symbols
+ and with an optional final symbol \NC \NR
+\NC \NotaBeneG{separator} \NC This can be different for each level and can
+ have dedicated rendering options \NC \NR
+\NC \NotaBeneB{page number} \NC That can be preceded by a (partial) sectionnumber
+ and separated from the page number by another symbol \NC \NR
+\NC \NotaBeneY{counter} \NC It can be preceded by a (partial) sectionnumber and
+ can also have subnumbers with its own separation
+ properties \NC \NR
+\NC \NotaBeneS{symbol} \NC Sometimes numbers get represented by symbols in which
+ case we use pagewise restarting symbol sets \NC \NR
+\stoptabulate
+
+Say that at some point we store a section number and/or page
+number. With the number we need to store information about the
+conversion (number, character, roman numeral, etc) and the
+separators, including their rendering. However, when we reuse that
+stored information we might want to discard some components and/or
+use a different rendering. In traditional \CONTEXT\ we have
+control over some aspects but due to the way numbers are stored
+for later reuse this control is limited.
+
+Say that we have cloned a subsection head as follows:
+
+\starttyping
+\definehead[MyHead][section]
+\stoptyping
+
+This is used as:
+
+\starttyping
+\MyHead[example]{Example}
+\stoptyping
+
+In \MKII\ we save a list entry (which has the number, the title
+and a reference to the page) and a reference to the the number,
+the title and the page (tagged \type {example}). Page numbers are
+stored in such a way that we can filter at specific section
+levels. This permits local tables of contents.
+
+The entry in the multi pass data file looks as follows (we collect all
+multi pass data in one file):
+
+\starttyping
+\mainreference{}{example}{2--0-1-1-0-0-0-0--1}{1}{{I.I}{Example}}%
+\listentry{MyHead}{2}{I.I}{Example}{2--0-1-1-0-0-0-0--1}{1}%
+\stoptyping
+
+In \MKIV\ we store more information and use tables for that. Currently
+the entry looks as follows:
+
+\starttyping
+structure.lists.collected={
+ {
+ ...
+ },
+ {
+ metadata={
+ catcodes=4,
+ coding="tex",
+ internal=2,
+ kind="section",
+ name="MyHead",
+ reference="example",
+ },
+ pagenumber={
+ numbers={ 1, 1, 0 },
+ },
+ sectionnumber={
+ conversion="R",
+ conversionset="default",
+ numbers={ 0, 2 },
+ separatorset="default",
+ },
+ sectiontitle={
+ label="MyHead",
+ title="Example",
+ },
+ },
+ {
+ ...
+ },
+}
+\stoptyping
+
+There can be much more information in each of the subtables. For
+instance, the \type {pagenumber} and \type {sectionnumber}
+subtables can have \type {prefix}, \type {separatorset},
+\type{conversion}, \type {conversionset}, \type {stopper}, \type
+{segments} and \type {connector} fields, and the \type {metadata}
+table can contain information about the \XML\ root document so
+that associated filtering and handling can be reconstructed. With the
+section title we store information about the preceding label text
+(seldom used, think of \quote{Part B}).
+
+This entry is used for lists as well as cross referencing.
+Actually, the stored information is also used for markings
+(running heads). This means that these mechanisms must be able to
+distinguish between where and how information is stored.
+
+These tables look rather verbose and indeed they are. We end up
+with much larger multi|-|pass data files but fortunately loading them
+is quite efficient. Serializing on the other hand might cost some time
+which is compensated by the fact that we no longer store
+information in token lists associated with nodes in \TEX's lists
+and in the future we might even move more data handling to the
+\LUA\ end. Also, in future versions we will share similar data
+(like page number information) more efficiently.
+
+Storing date at the \LUA\ end also has consequences for the
+typesetting. When specific data is needed a call to \LUA\ is
+necessary. In the future we might offer both push and pull methods
+(\LUA\ pushing information to the typesetting code versus \LUA\
+triggering typesetting code). For lists we pull, and for registers
+we currently push. Depending on our experiences we might change
+these strategies.
+
+A side effect of the rewrite is that we force more consistency.
+For instance, you see a \type {conversion} field in the list. This
+is the old way of defining the way a number gets converted. The
+modern approach is to use sets. Because we now have a more
+stringent inheritance model at the user interface level, this
+might lead to incompatible conversions at lower levels (when
+unset). Instead of cooking up some nasty compatibility hacks, we
+accept some incompatibility, if only because users have to adapt
+their styles to new font technology anyway. And for older
+documents there is still \MKII.
+
+Instead of introducing many extra configuration variables (for each
+level of sectioning) we introduce sets. These replace some of the
+existing parameters and are the follow up on some (undocumented)
+precursor of sets. Examples of sets are:
+
+\starttyping
+\definestructureseparatorset [default][][.]
+\definestructureconversionset[default][][numbers]
+\definestructureresetset [default][][0]
+\definestructureprefixset [default][section-2,section-3][]
+\definestructureseparatorset [appendix][][.]
+\definestructureconversionset[appendix][Romannumerals,Characters][]
+\definestructureresetset [appendix][][0]
+\stoptyping
+
+The third parameter is the default value. The sets that relate to typesetting
+can have a rendering specification:
+
+\starttyping
+\definestructureseparatorset
+ [demosep]
+ [demo->!,demo->?,demo->*,demo->@]
+ [demo->/]
+\stoptyping
+
+Here we apply \type{demo} to each of the separators as well as to the
+default. The renderer is defined with:
+
+\starttyping
+\defineprocessor[demo][style=\bfb,color=red]
+\stoptyping
+
+You can imagine that, although this is quite possible in \TEX,
+dealing with sets, splitting them, handling the rendering, etc.\
+is easier in \LUA\ that in \TEX. Of course the code still looks
+somewhat messy, if only because the problem is messy. Part if this
+mess is related to the fact that we might have to specify all
+components that make up a number.
+
+\starttabulate
+\NC section \NC section number as part of head \NC \NR
+\NC list \NC section number as part of list entry \NC \NR
+\NC \NC section number as part of page number prefix \NC \NR
+\NC \NC (optionally prefixed) page number \NC \NR
+\NC counter \NC section number as part of counter prefix \NC \NR
+\NC \NC (optionally prefixed) counter value(s) \NC \NR
+\NC pagenumber \NC section number as part of page number \NC \NR
+\NC \NC pagenumber components (realpage, page, subpage) \NC \NR
+\stoptabulate
+
+As a result we have upto 3 sets of parameters:
+
+\starttabulate
+\NC section \NC \type{section*} \NC \NR
+\NC list \NC \type{section*} \type{prefix*} \type{page*} \NC \NR
+\NC counter \NC \type{section*} \type{number*} \NC \NR
+\NC pagenumber \NC \type{prefix*} \type{page*} \NC \NR
+\stoptabulate
+
+When reimplementing the structure related commands, we also have
+to take mechanisms into account that relate to them. For instance,
+index sorter code is also used for sorted lists, so when we adapt
+one mechanism we also have to adapt the other. The same is true
+for cross references, that are used all over the place. It helps
+that for the moment we can omit the more obscure interaction
+related mechanism, if only because users will seldom use them.
+Such mechanisms are also related to the backend and we're not yet
+in the stage where we upgrade the backend code. In case you wonder
+why references can be such a problematic areas think of the
+following:
+
+\starttyping
+\goto{here}[page(10),StartSound{ping},StartVideo{demo}]
+\goto{there}[page(10),VideLayer{example},JS(SomeScript{hi world})]
+\goto{anywhere}[url(mypreviouslydefinedurl)]
+\stoptyping
+
+The \CONTEXT\ cross reference mechanism permits mixed usage of simple
+hyperlinks (jump to some page) and more advanced viewer actions like
+showing widgets and runnign \JAVASCRIPT\ code. And even a simple
+reference like:
+
+\starttyping
+\at{here and there}[somefile::sometarget]
+\stoptyping
+
+involves some code because we need to handle the three words as
+well as the outer reference. \footnote {Currently \CONTEXT\ does
+its own splitting of multiword references, and does so by reusing
+hyperlink resources in the backend format. This might change in
+the future.} The reason why we need to reimplement referencing
+along with structure lays in the fact that for some structure
+components (like section headers and float references) we no
+longer store cross reference information separately but filter it
+from the data stored in the list (see example before).
+
+The \LUA\ code involved in dealing with the more complex
+references shown here is much more flexible and robust than the
+original \TEX\ code. This is a typical example of where the
+accumulated time spent on the \TEX\ based solution is large
+compared to the time spent on the \LUA\ variant. It's like driving
+200 km by car through hilly terrain and wondering how one did that
+in earlier times. Just like today scenery is not by definition better
+than yestedays, \MKIV\ code is not always better than \MKII\ code.
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/mk/mk-timing-1-luatex-progress.lut b/doc/context/sources/general/manuals/mk/mk-timing-1-luatex-progress.lut
new file mode 100644
index 000000000..63d4774a3
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-timing-1-luatex-progress.lut
@@ -0,0 +1,64030 @@
+return {
+ {
+ ["cs_count"]=37996,
+ ["dyn_used"]=513785,
+ ["elapsed_time"]=0.0049998760223389,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=38475954,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="16",
+ ["attribute_list"]="8",
+ ["dir"]="2",
+ ["disc"]="1",
+ ["glue"]="1",
+ ["glue_spec"]="18",
+ ["hlist"]="3",
+ ["kern"]="1",
+ ["pdf_literal"]="29",
+ ["penalty"]="3",
+ ["rule"]="2",
+ ["vlist"]="5",
+ },
+ ["obj_ptr"]=0,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=0,
+ ["pool_ptr"]=647320,
+ ["str_ptr"]=2136866,
+ },
+ {
+ ["cs_count"]=38008,
+ ["dyn_used"]=514617,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=37794887,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2011",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=0,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=0,
+ ["pool_ptr"]=647798,
+ ["str_ptr"]=2136894,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514399,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=37009927,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2011",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514399,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=37236483,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2011",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=9,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514399,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=37457372,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2011",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=12,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514399,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=37683960,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2011",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=15,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514399,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=37910484,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2011",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=18,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514399,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=38137008,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2011",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=21,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514401,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=38363532,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2011",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=25,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514407,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=38590184,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2011",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=28,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514411,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=38816987,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=31,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=39043567,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=34,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=39270147,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=37,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=39496727,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=40,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=39723307,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=44,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=39949887,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=47,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=40176467,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=50,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=40403303,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=53,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=40629883,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=56,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=40856463,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=59,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=41083043,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=63,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=41309623,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=66,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=41536203,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=69,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=41762783,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=72,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=41989363,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=75,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=42215943,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=78,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=42442523,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=82,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=42669103,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=85,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=42895683,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=88,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=43122263,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=91,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=43348843,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=94,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=43575423,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=97,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=43802003,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=101,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=44029095,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=104,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=44255675,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=107,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=44482255,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=110,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=44708835,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=113,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=44935415,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=116,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=45161995,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=120,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=45388575,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=123,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=45615155,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=126,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=45841735,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=129,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=46068315,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=132,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=46294895,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=135,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=46521475,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=139,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=46748055,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=142,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=46974635,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=145,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47201215,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=148,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47427795,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=151,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47654375,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=154,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47880955,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=158,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48107535,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=161,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48334115,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=164,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48560695,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=168,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48787275,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=171,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49013855,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=174,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49240435,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=178,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49467015,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=181,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49693595,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=184,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49920175,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=187,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50146755,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=190,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50373335,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=193,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50599915,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=197,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50826495,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=200,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51053075,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=203,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51280679,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=206,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51507259,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=209,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51733839,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=212,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51960419,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=216,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52186999,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=219,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52413579,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=222,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52640159,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=225,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52866739,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=228,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53093319,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=231,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53319899,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=235,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53546479,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=238,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53773059,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=241,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53999639,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=244,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54226219,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=247,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54452799,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=250,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54679379,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=254,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54905959,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=257,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55132539,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=260,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55359119,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=263,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55585699,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=266,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55812279,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=269,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56038859,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=273,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56265439,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=276,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56492019,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=279,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56718599,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=282,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56945179,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=285,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57171759,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=288,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57398339,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=292,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57624919,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=295,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57851499,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=298,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58078079,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=301,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58304659,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=304,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514414,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58531239,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=307,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58757819,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=311,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514422,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58984399,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2012",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=314,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514426,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59211258,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=317,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59437894,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=320,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59664530,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=323,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59891166,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=327,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60117802,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=331,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60344438,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=334,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60571074,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=337,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60797710,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=340,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61024346,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=343,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61250982,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=346,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61477618,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=350,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61704254,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=353,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61930890,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=356,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62157526,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=359,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62384162,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=362,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62610798,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=365,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62837434,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=369,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63064070,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=372,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63290706,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=375,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63517342,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=378,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63743978,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=381,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63970614,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=384,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64197250,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=388,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64423886,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=391,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64650522,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=394,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64877158,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=397,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65103794,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=400,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65330430,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=403,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65557066,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=407,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65785750,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=410,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66012386,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=413,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66239022,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=416,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66465658,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=419,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66692294,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=422,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66918930,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=426,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67145566,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=429,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67372202,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=432,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67598838,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=435,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67825474,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=438,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68052110,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=441,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68278746,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=445,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68505382,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=448,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68732018,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=451,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68958654,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=454,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69185290,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=457,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69411926,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=460,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69638562,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=464,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69865198,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=467,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70091834,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=470,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70318470,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=473,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70545106,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=476,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70771742,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=479,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70998378,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=484,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71225014,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=487,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71451650,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=490,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71678286,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=493,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71904922,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=496,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72131558,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=499,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72358194,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=503,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72584830,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=506,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72811466,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=509,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73038102,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=512,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73264738,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=515,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73491374,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=518,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73718010,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=522,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73944646,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=525,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74171282,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=528,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74397918,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=531,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74624554,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=534,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74851190,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=537,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75077826,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=541,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75304462,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=544,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75531098,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=547,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75757734,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=550,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75984370,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=553,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76211006,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=556,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76437642,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=560,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76664278,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=563,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76890914,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=566,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77117550,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=569,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77344186,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=572,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77570822,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=575,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77797458,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=579,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78024094,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=582,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78250730,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=585,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78477366,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=588,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78704002,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=591,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78930638,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=594,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79157274,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=598,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79383910,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=601,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79610546,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=604,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79837182,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=607,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80063818,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=610,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80290454,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=613,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80517090,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=617,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80743726,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=620,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80970362,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=623,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.068000078201294,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81144667,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=626,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81319964,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=629,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81505665,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=632,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81686819,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=636,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81858637,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=639,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82036489,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=642,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79997865,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=646,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79501729,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=649,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79728365,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=652,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79954937,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=656,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80181573,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=659,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79708629,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=662,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78697665,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=665,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77681101,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=668,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76670137,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=671,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75659173,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=675,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74642609,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=678,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73631645,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=681,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72620681,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=684,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71604117,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=687,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70593153,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=690,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69582189,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=694,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68565625,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=697,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67554661,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=700,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66543697,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=703,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65532733,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=706,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64516169,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=709,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63505205,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=713,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62494241,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=716,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61477677,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=719,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60466713,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=722,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59455749,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=725,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58439185,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=728,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57428221,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=732,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56417257,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=735,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55400693,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=738,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54389729,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=741,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53378765,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=744,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52362201,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=747,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51351237,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=751,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50340273,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=754,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49323709,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=757,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48312745,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=760,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47301781,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=763,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=46285301,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=766,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=46416160,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=770,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=46642796,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=773,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=46869432,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=776,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47096068,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=779,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47322704,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=782,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47549340,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=785,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47775976,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=789,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48002612,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=792,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48229248,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=795,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48455884,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=798,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48682520,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=801,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48909156,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=805,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49135792,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=809,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49362428,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=812,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49589064,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=815,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49819796,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=818,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50046432,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=821,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50273068,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=824,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50499704,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=828,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50726340,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=831,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50952976,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=834,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51179612,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=837,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51406248,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=840,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51632884,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=843,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51859520,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=847,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52086156,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=850,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52312792,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=853,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52539428,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=856,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52766064,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=859,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52992700,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=862,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53219336,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=866,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53445972,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=869,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53672608,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=872,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53899244,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=875,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54125880,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=878,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54352516,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=881,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54579152,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=885,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54805788,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=888,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016000032424927,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55032424,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=891,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55259060,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=894,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55485696,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=897,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55712332,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=900,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55938968,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=904,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56165604,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=907,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56392240,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=910,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56618876,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=913,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56845512,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=916,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57072148,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=919,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57298784,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=923,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57525420,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=926,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57752056,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=929,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57978692,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=932,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58205328,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=935,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58431964,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=938,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58658600,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=942,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58885236,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=945,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59111872,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=948,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59338508,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=951,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59565144,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=954,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59791780,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=957,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60018416,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=962,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60245052,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=965,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60471688,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=968,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60698324,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=971,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60924960,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=974,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61151596,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=977,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61378232,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=981,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61604868,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=984,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61831504,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=987,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62058140,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=990,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62284776,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=993,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62511412,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=996,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62738048,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1000,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62964684,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1003,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63191320,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1006,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63417956,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1009,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63644592,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1012,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63871228,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1015,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64097864,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1019,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64324500,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1022,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64551136,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1025,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64777772,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1028,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65004408,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1031,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65231044,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1034,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65457680,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1038,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65684316,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1041,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65910952,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1044,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66137588,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1047,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66364224,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1050,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66590860,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1053,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66817496,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1057,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67044132,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1060,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67270768,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1063,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67497404,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1066,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67724040,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1069,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67950676,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1072,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68177312,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1076,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68403948,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1079,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68630584,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1082,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68857220,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1085,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69083856,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1088,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69310492,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1091,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69537128,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1095,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69763764,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1098,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69990400,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1101,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70217036,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1104,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70443672,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1107,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70670308,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1110,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70896944,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1114,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71123580,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1117,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71350216,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1120,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71576852,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1124,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71803488,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1127,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72030124,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1130,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72256760,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1134,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72483396,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1137,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72710032,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1140,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72936668,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1143,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73163304,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1146,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73389940,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1149,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73616576,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1153,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73843212,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1156,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74069848,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1159,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74296484,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1162,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74523120,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1165,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74749756,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1168,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74976392,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1172,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75203028,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1175,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75429664,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1178,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75656300,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1181,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75882936,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1184,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76109572,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1187,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76336208,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1191,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76562844,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1194,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76789480,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1197,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77016116,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1200,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77242752,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1203,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77469388,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1206,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77696024,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1210,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77922660,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1213,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78149296,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1216,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78375932,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1219,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78602568,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1222,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78829204,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1225,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79055840,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1229,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79282476,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1232,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79509112,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1235,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79735748,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1238,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79962384,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1241,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80189020,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1244,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80415656,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1248,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80642292,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1251,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80868928,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1254,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81095564,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1257,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81322200,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1260,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81548836,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1263,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81775472,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1267,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82002108,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1270,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82228744,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1273,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82455380,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1276,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.069000005722046,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82682534,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1279,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82909516,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1283,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83136152,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1287,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83362788,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1290,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83589424,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1293,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83816060,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1296,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81978696,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1299,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81624884,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1302,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81851520,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1306,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82078156,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1309,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82304792,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1312,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81688320,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1315,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80677356,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1318,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79660792,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1321,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78649828,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1325,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77638864,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1328,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76622300,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1331,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75611336,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1334,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74600372,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1337,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73583808,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1340,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72572844,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1344,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71561880,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1347,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70545316,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1350,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69534352,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1353,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68523388,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1356,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67506824,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1359,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66495860,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1363,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65484896,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1366,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64468332,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1369,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63457368,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1372,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62446404,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1375,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61429840,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1378,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60418876,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1382,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59407912,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1385,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58391348,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1388,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57380384,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1391,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56369420,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1394,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55352856,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1397,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54341892,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1401,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53330928,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1404,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52314364,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1407,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51303400,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1410,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50292436,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1413,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49275872,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1416,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48264908,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1420,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47253944,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1423,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=46847939,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1426,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47074575,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1429,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47301211,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1432,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47527847,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1435,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47754483,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1440,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47981119,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1443,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48207755,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1446,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48434391,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1449,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48661027,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1452,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48887663,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1455,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49114299,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1459,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49340935,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1462,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49567571,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1465,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49794207,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1468,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50020843,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1471,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50247479,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1474,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50474115,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1478,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50700751,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1481,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50927387,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1484,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51154023,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1487,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51380659,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1490,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51607295,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1493,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51833931,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1497,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52060567,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1500,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52287203,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1503,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52513839,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1506,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52740475,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1509,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52967111,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1512,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53193747,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1516,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53420383,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1519,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53647019,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1522,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53873655,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1525,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54100291,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1528,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54326927,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1531,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54553563,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1535,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54780199,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1538,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55006835,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1541,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55233471,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1544,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55460107,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1547,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55686743,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1550,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55913379,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1554,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56140015,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1557,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56366651,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1560,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56593287,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1563,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56819923,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1566,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57046559,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1569,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57273195,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1573,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57499831,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1576,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57726467,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1579,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57953103,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1582,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58179739,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1585,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58406375,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1588,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58633011,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1592,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58859647,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1595,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59086283,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1598,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59312919,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1602,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59539555,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1605,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59766191,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1608,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59992827,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1612,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60219463,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1615,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60446099,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1618,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60672735,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1621,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60899371,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1624,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61126007,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1627,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61352643,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1631,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61587471,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1634,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61814107,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1637,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62040743,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1640,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62267379,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1643,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62494015,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1646,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62720651,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1650,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62947287,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1653,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63173923,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1656,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63400559,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1659,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63627195,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1662,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63853831,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1665,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64080467,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1669,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64307103,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1672,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64533739,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1675,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64760375,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1678,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64987011,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1681,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65213647,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1684,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65440283,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1688,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65666919,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1691,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65893555,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1694,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66120191,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1697,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66346827,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1700,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66573463,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1703,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66800099,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1707,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67026735,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1710,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67253371,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1713,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67480007,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1716,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67706643,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1719,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67933279,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1722,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68159915,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1726,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68386551,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1729,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68613187,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1732,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68839823,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1735,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69066459,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1738,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69293095,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1741,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69519731,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1745,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69746367,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1748,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69973003,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1751,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70199639,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1754,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70426275,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1757,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70652911,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1761,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70879547,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1765,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71106183,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1768,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71332819,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1771,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71559455,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1774,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71786091,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1777,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72012727,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1780,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72239363,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1784,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72465999,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1787,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72692635,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1790,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72919271,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1793,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73145907,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1796,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73372543,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1799,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73599179,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1803,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73825815,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1806,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74052451,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1809,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74279087,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1812,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74505723,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1815,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74732359,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1818,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74958995,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1822,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75185631,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1825,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75412267,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1828,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75638903,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1831,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75865539,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1834,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76092175,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1837,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76318811,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1841,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76545447,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1844,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76772083,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1847,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76998719,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1850,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77225355,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1853,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77451991,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1856,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77678627,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1860,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77905263,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1863,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78131899,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1866,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78358535,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1869,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78585171,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1872,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78811807,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1875,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79038443,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1879,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79265079,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1882,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79491715,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1885,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79718351,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1888,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79944987,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1891,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80171623,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1894,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80398259,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1898,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80624895,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1901,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80851531,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1904,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81078167,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1907,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81304803,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1910,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81531439,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1913,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81758075,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1918,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81984711,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1921,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82211347,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1924,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82437983,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1927,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82664619,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1930,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82891255,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1933,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.072999954223633,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83117781,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1937,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83344527,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1940,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83571163,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1943,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83797799,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1946,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84024435,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1949,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84251071,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1952,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83789627,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1956,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82044687,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1959,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82271323,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1962,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82497959,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1965,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82724595,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1968,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82795075,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1971,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81784111,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1975,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80767547,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1978,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79756583,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1981,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78745619,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1984,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77729055,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1987,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76718091,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1990,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75707127,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1994,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74696163,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1997,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73679599,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2000,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72668635,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2003,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71657671,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2006,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70641107,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2009,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69630143,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2013,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68619179,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2016,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67602615,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2019,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66591651,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2022,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65580687,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2025,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64564123,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2028,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63553159,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2032,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62542195,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2035,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61525631,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2038,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60514667,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2041,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59503703,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2044,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58487139,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2047,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57476175,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2051,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56465211,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2054,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55448647,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2057,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54437683,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2060,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53426719,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2063,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52410155,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2066,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51399191,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2070,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50388227,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2073,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49371663,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2076,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48360699,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2080,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47349735,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2083,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47192907,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2086,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47419543,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2090,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47646179,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2093,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47872815,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2096,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48099451,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2099,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48326087,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2102,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48552723,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2105,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48779359,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2109,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49005995,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2112,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49232631,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2115,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49459267,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2118,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49685903,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2121,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49912539,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2124,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50139175,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2128,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50365811,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2131,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50592447,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2134,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50819083,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2137,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51045719,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2140,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51272355,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2143,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51498991,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2147,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51725627,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2150,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51952263,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2153,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52178899,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2156,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52405535,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2159,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52632171,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2162,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52858807,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2166,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53085443,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2169,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53312079,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2172,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53538715,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2175,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53765351,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2178,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53991987,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2181,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54218623,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2185,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54445259,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2188,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54671895,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2191,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54898531,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2194,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55125167,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2197,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55351803,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2200,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55578439,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2204,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55805075,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2207,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56031711,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2210,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56258347,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2213,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56484983,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2216,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56711619,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2219,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56938255,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2223,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57164891,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2226,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57391527,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2229,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57618163,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2232,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57844799,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2235,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58071435,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2239,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58298071,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2243,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58524707,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2246,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58751343,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2249,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58977979,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2252,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59204615,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2255,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59431251,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2258,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59657887,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2262,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59884523,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2265,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60111159,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2268,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60337795,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2271,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60564431,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2274,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60791067,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2277,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61017703,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2281,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61244339,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2284,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61470975,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2287,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61697611,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2290,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61924247,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2293,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62150883,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2296,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62377519,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2300,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62604155,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2303,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62830791,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2306,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63057427,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2309,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63284063,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2312,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63510699,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2315,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63737335,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2319,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63963971,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2322,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64190607,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2325,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64417243,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2328,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64643879,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2331,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64870515,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2334,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65097151,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2338,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65323787,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2341,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65550423,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2344,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65777059,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2347,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66003695,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2350,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66230331,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2353,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66456967,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2357,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66683603,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2360,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66910239,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2363,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67136875,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2366,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67363511,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2369,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67590147,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2372,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67816783,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2376,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68043419,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2379,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68270055,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2382,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68496691,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2385,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68723327,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2388,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68949963,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2391,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69176599,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2396,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69403235,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2399,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69629871,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2402,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69856507,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2405,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70083143,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2408,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70309779,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2411,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70536415,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2415,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70763051,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2418,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70989687,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2421,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71216323,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2424,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71442959,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2427,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71669595,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2430,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71896231,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2434,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72122867,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2437,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72349503,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2440,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72576139,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2443,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72802775,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2446,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73029411,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2449,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73256047,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2453,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73482683,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2456,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73709319,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2459,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73935955,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2462,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74162591,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2465,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74389227,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2468,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74615863,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2472,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74842499,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2475,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75069135,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2478,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75295771,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2481,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75522407,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2484,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75749043,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2487,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75975679,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2491,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76202315,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2494,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76428951,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2497,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76655587,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2500,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76882223,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2503,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77108859,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2506,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77335495,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2510,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77562131,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2513,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77788767,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2516,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78015403,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2519,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78242039,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2522,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78468675,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2525,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78695311,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2529,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78921947,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2532,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79148583,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2535,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79375219,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2538,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79601855,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2541,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79828491,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2544,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80055127,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2548,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80281763,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2551,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80508399,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2554,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80735035,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2558,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80961671,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2561,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81188307,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2564,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81414943,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2568,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81641579,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2571,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81868215,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2574,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82094851,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2577,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82321487,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2580,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82548123,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2583,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82774759,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2587,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83001395,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2590,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83228031,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2593,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83454667,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2596,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.075000047683716,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83681219,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2599,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83907939,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2602,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84134575,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2606,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84361211,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2609,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84587847,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2612,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84814483,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2615,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84608415,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2618,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82587051,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2621,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82813687,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2625,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83040323,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2628,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83266959,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2631,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83482227,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2634,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82472131,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2637,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81455567,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2640,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80444603,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2644,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79433639,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2647,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78417075,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2650,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77406111,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2653,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76395147,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2656,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75378583,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2659,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74367619,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2663,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73356655,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2666,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72340091,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2669,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71329127,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2672,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70318163,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2675,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69301599,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2678,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68290635,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2682,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67279671,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2685,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66263107,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2688,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65252143,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2691,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64241179,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2694,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63224615,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2697,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62213651,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2701,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61202687,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2704,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60186123,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2707,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59175159,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2710,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58164195,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2713,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57147631,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2717,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56136667,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2721,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55125703,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2724,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54114739,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2727,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53098175,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2730,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52087211,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2733,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51076247,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2736,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50059683,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2740,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49048719,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2743,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48037755,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2746,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47397327,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2749,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47623963,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2752,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47850599,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2755,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48077235,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2759,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48303871,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2762,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48530507,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2765,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48757143,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2768,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48983779,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2771,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49210415,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2774,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49437051,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2778,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49663687,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2781,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49890323,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2784,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50116959,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2787,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50343595,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2790,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50570231,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2793,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50796867,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2797,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51023503,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2800,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51250139,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2803,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51476775,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2806,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51703411,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2809,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51930047,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2812,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52156683,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2816,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52383319,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2819,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52609955,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2822,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52836591,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2825,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53063227,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2828,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53289863,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2831,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53516499,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2835,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53743135,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2838,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53969771,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2841,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54196407,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2844,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54423043,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2847,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54649679,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2850,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54876315,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2854,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55102951,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2857,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55329587,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2860,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55556223,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2863,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55782859,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2866,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56009495,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2869,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56236131,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2874,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56462767,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2877,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56689403,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2880,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56916039,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2883,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57142675,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2886,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57369311,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2889,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57595947,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2893,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57822583,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2896,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58049219,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2899,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58275855,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2902,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58502491,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2905,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58729127,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2908,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58955763,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2912,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59182399,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2915,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59409035,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2918,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59635671,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2921,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59862307,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2924,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60088943,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2927,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60315579,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2931,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60542215,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2934,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60768851,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2937,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60995487,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2940,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61222123,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2943,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61448759,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2946,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61675395,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2950,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61902031,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2953,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62128667,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2956,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62355303,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2959,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62581939,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2962,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62808575,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2965,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63035211,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2969,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63261847,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2972,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63488483,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2975,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63715119,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2978,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63941755,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2981,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64168391,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2984,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64395027,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2988,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64621663,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2991,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64848299,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2994,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65074935,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2997,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65301571,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3000,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65528207,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3003,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65754843,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3007,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65981479,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3010,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66208115,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3013,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66434751,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3016,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66661387,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3019,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66888023,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3022,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67114659,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3026,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67341295,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3029,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67567931,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3032,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67794567,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3036,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68021203,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3039,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68247839,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3042,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68474475,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3046,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68701111,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3049,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68927747,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3052,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69154383,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3055,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69381019,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3058,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69607655,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3061,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69834291,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3065,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70060927,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3068,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70287563,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3071,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70514199,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3074,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70740835,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3077,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70967471,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3080,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71194107,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3084,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71420743,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3087,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71647379,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3090,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71874015,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3093,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72100651,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3096,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72327287,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3099,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72553923,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3103,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72780559,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3106,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73007195,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3109,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73233831,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3112,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73460467,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3115,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73687103,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3118,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73913739,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3122,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74140375,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3125,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74367011,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3128,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74593647,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3131,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74820283,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3134,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75046919,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3137,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75273555,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3141,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75500191,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3144,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75726827,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3147,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75953463,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3150,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76180099,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3153,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76406735,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3156,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76633371,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3160,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76860007,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3163,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77086643,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3166,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77313279,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3169,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77539915,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3172,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514429,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77766551,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3175,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514431,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77993187,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3179,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514437,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78219823,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2013",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3182,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514441,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78446738,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3185,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78673430,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3188,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78900122,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3191,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79126814,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3195,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79353506,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3199,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79580198,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3202,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79806890,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3205,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80033582,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3208,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80260274,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3211,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80486966,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3214,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80713658,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3218,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80940350,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3221,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81167042,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3224,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81393734,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3227,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81620426,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3230,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81847118,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3233,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82073810,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3237,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82300502,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3240,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82527194,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3243,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82753886,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3246,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82980578,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3249,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83207270,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3252,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83433962,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3256,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83660654,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3259,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83887346,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3262,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84130422,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3265,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.075000047683716,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84356768,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3268,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84583604,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3271,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84810296,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3275,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85036988,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3278,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85263680,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3281,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85490372,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3284,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83917960,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3287,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83237372,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3290,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83464064,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3294,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83690756,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3297,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83917448,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3300,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83518424,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3303,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82501916,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3306,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81491008,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3309,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80474500,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3313,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79463592,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3316,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78452684,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3319,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77436176,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3322,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76425268,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3325,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75408760,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3328,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74397852,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3332,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73386944,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3335,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72370436,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3338,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71359528,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3341,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70348620,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3344,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69332112,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3347,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68321204,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3352,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67304696,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3355,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66293788,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3358,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65282880,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3361,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64266372,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3364,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63255464,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3367,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62244556,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3371,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61228048,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3374,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60217140,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3377,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59200632,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3380,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58189724,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3383,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57178816,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3386,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56162308,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3390,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55151400,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3393,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54140492,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3396,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53123984,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3399,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52113076,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3402,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51096568,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3405,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50085660,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3409,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49074752,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3412,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48058244,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3415,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47763568,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3418,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47990260,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3421,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48216952,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3424,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48443644,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3428,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48670336,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3431,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48897028,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3434,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49123720,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3437,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49350412,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3440,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49577104,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3443,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49803796,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3447,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50030488,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3450,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50257180,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3453,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50483872,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3456,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50710564,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3459,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50937256,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3462,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51163948,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3466,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51390640,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3469,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51617332,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3472,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51844024,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3475,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52070716,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3478,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52297408,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3481,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52524100,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3485,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52750792,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3488,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52977484,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3491,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53204176,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3494,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53430868,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3497,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53657560,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3500,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53884252,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3504,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54110944,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3507,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54337636,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3510,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54564328,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3514,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54791020,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3517,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55017712,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3520,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55244404,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3524,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55471096,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3527,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55697788,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3530,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55924480,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3533,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56151172,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3536,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56377864,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3539,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56604556,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3543,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56831248,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3546,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57057940,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3549,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57284632,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3552,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57511324,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3555,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57738016,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3558,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57964708,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3562,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58191400,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3565,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58418092,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3568,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58644784,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3571,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58871476,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3574,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59098168,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3577,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59324860,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3581,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59551552,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3584,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59778244,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3587,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60004936,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3590,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60231628,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3593,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60458320,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3596,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60685012,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3600,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60911704,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3603,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61138396,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3606,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61365088,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3609,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61591780,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3612,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61818472,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3615,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62045164,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3619,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62271856,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3622,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62498548,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3625,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62725240,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3628,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62951932,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3631,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63178624,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3634,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63405316,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3638,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63632008,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3641,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63858700,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3644,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64085392,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3647,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64312084,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3650,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64538776,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3653,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64765468,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3657,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64992160,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3660,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65218852,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3663,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65445544,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3666,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65672236,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3669,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65898928,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3673,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66125620,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3677,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66352312,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3680,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66579004,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3683,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66805696,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3686,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67032388,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3689,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67259080,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3692,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67485772,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3696,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67712464,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3699,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67939156,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3702,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68165848,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3705,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68392540,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3708,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68619232,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3711,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68845924,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3715,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69072616,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3718,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69299308,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3721,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69526000,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3724,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69752692,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3727,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69979384,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3730,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70206076,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3734,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70432768,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3737,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70659460,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3740,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70886152,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3743,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71112844,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3746,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71339536,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3749,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71566228,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3753,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71792920,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3756,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72019612,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3759,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72246304,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3762,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72472996,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3765,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72699688,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3768,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72926380,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3772,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73153072,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3775,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73379764,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3778,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73606456,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3781,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73833148,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3784,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74059840,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3787,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74286532,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3791,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74513224,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3794,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74739916,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3797,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74966608,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3800,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75193300,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3803,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75419992,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3806,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75646684,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3810,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75873376,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3813,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76100068,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3816,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76326760,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3819,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76553452,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3822,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76780144,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3825,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77006836,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3830,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77233528,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3833,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77460220,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3836,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77686912,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3839,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77913604,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3842,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78140296,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3845,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78366988,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3849,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78593680,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3852,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78820372,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3855,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79047064,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3858,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79273756,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3861,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79500448,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3864,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79727140,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3868,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79953832,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3871,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80180524,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3874,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80407216,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3877,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80633908,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3880,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80860600,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3883,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81087292,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3887,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81313984,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3890,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81540676,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3893,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81767368,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3896,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81994060,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3899,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82220752,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3902,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82447444,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3906,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82674136,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3909,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82900828,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3912,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83127520,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3915,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83354212,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3918,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83580904,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3921,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83807596,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3925,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84034288,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3928,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84260980,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3931,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84487672,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3934,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84714364,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3937,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.078999996185303,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84940710,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3940,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85167748,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3944,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85394440,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3947,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85621132,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3950,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85847824,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3953,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=86074516,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3956,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84642648,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3959,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83808532,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3963,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84035224,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3966,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84261916,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3969,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84488608,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3972,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84174452,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3975,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83163544,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3978,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82152636,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3982,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81136128,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3985,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80125220,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3988,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79114312,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3992,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78097804,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3995,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77086896,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3998,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76070388,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4002,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75059480,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4005,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74048572,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4008,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73032064,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4011,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72021156,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4014,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71010248,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4017,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69993740,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4021,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68982832,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4024,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67966324,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4027,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66955416,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4030,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65944508,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4033,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64928000,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4036,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63917092,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4040,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62900584,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4043,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61889676,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4046,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60878768,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4049,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59862260,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4052,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58851352,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4055,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57840444,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4059,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56823936,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4062,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55813028,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4065,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54796520,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4068,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53785612,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4071,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52774704,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4074,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51758196,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4078,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50747288,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4081,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49736380,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4084,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48719872,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4087,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47981120,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4090,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48207826,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4093,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48434518,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4097,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48661210,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4100,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48887902,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4103,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49114594,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4106,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49341286,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4109,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49567978,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4112,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49794670,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4116,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50021362,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4119,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50248054,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4122,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50474746,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4125,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50701438,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4128,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50928130,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4131,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51154822,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4135,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51381514,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4138,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51608206,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4141,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51834898,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4144,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52061590,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4147,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52288282,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4151,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52514974,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4155,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52741666,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4158,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52968358,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4161,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53195050,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4164,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53421742,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4167,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53648434,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4170,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53875126,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4174,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54101818,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4177,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54328510,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4180,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54555202,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4183,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54781894,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4186,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55008586,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4189,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55235278,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4193,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55461970,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4196,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55688662,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4199,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55915354,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4202,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56142046,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4205,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56368738,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4208,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56595430,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4212,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56822122,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4215,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57048814,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4218,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57275506,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4221,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57502198,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4224,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57728890,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4227,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57955582,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4231,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58182274,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4234,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58408966,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4237,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58635658,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4240,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58862350,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4243,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59089042,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4246,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59315734,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4250,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59542426,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4253,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59769118,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4256,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59995810,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4259,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60222502,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4262,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60449194,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4265,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60675886,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4269,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60902578,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4272,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61129270,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4275,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61355962,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4278,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61582654,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4281,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61809346,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4284,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62036038,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4288,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62262730,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4291,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62489422,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4294,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62716114,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4297,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62942806,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4300,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63169498,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4303,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63396190,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4308,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63622882,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4311,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63849574,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4314,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64076266,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4317,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64302958,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4320,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64529650,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4323,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64756342,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4327,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64983034,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4330,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65209726,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4333,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65436418,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4336,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65663110,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4339,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65889802,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4342,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66116494,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4346,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66343186,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4349,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66569878,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4352,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66796570,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4355,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67023262,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4358,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67249954,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4361,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67476646,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4365,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67703338,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4368,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67930030,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4371,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68156722,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4374,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68383414,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4377,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68610106,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4380,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68836798,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4384,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69063490,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4387,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69290182,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4390,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69516874,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4393,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69743566,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4396,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69970258,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4399,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70196950,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4403,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70423642,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4406,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70650334,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4409,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70877026,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4412,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71103718,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4415,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71330410,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4418,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71557102,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4422,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71783794,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4425,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72010486,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4428,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72237178,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4431,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72463870,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4434,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72690562,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4437,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72917254,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4441,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73143946,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4444,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73370638,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4447,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73597330,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4450,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73824022,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4453,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74050714,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4456,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74277406,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4460,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74504098,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4463,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74730790,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4466,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74957482,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4470,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75184174,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4473,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75410866,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4476,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75637558,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4480,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75864250,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4483,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76090942,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4486,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76317634,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4489,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76544326,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4492,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76771018,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4495,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76997710,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4499,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77224402,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4502,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77451094,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4505,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77677786,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4508,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77904478,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4511,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78131170,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4514,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78357862,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4518,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78584554,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4521,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78811246,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4524,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79037938,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4527,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79264630,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4530,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79491322,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4533,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79718014,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4537,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79944706,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4540,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80171398,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4543,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80398090,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4546,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80624782,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4549,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80851474,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4552,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81078166,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4556,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81304858,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4559,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81531550,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4562,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81758242,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4565,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81984934,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4568,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82211626,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4571,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82438318,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4575,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82665010,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4578,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82891702,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4581,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83118394,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4584,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83345086,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4587,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83571778,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4590,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83798470,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4594,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84025162,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4597,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84251854,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4600,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84478546,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4603,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84705238,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4606,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84931930,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4609,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85158622,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4613,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.078999996185303,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85385259,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4616,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85612006,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4619,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85838698,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4622,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=29,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=86065390,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4625,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=86292082,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4629,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=86518774,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4633,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=86496266,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4636,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84239806,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4639,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84466498,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4642,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84693190,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4645,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84919882,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4648,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85146574,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4652,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84285858,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4655,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83274950,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4658,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82258442,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4661,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81247534,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4664,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80231026,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4667,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79220118,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4671,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78209210,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4674,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77192702,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4677,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76181794,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4680,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75170886,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4683,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74154378,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4686,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73143470,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4690,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72126962,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4693,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71116054,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4696,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70105146,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4699,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69088638,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4702,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68077730,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4705,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67061222,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4709,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66050314,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4712,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65039406,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4715,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64022898,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4718,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63011990,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4721,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62001082,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4724,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60984574,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4728,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59973666,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4731,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58957158,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4734,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57946250,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4737,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56935342,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4740,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55918834,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4743,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54907926,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4747,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53897018,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4750,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52880510,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4753,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51869602,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4756,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50853094,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4759,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49842186,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4762,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48831278,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4766,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48314155,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4769,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48540898,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4772,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48767590,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4775,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48994282,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4778,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49220974,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4781,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=30,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49447666,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4786,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49674358,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4789,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49901050,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4792,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50127742,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4795,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50354434,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4798,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50581126,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4801,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50807818,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4805,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51034510,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4808,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51261202,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4811,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51487894,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4814,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51714586,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4817,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51941278,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4820,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52167970,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4824,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52394662,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4827,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52621354,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4830,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52848046,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4833,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53074738,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4836,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53301430,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4839,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53528122,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4843,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53754814,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4846,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53981506,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4849,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54208198,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4852,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54434890,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4855,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54661582,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4858,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54888274,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4862,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55114966,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4865,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55341658,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4868,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55568350,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4871,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55795042,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4874,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56021734,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4877,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56248426,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4881,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56475118,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4884,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56701810,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4887,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56928502,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4890,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57155194,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4893,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57381886,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4896,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57608578,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4900,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57835270,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4903,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58061962,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4906,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58288654,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4909,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58515346,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4912,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58742038,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4915,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58968730,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4919,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59195422,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4922,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59422114,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4925,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59648806,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4928,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59875498,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4931,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60102190,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4934,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60328882,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4938,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60555574,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4941,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=31,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60782266,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4944,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61008958,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4948,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61235650,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4951,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61462342,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4954,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61689034,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4958,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61915726,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4961,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62142418,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4964,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62369110,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4967,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62595802,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4970,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62822494,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4973,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63049186,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4977,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63275878,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4980,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63502570,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4983,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63729262,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4986,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63955954,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4989,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64182646,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4992,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64409338,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4996,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64636030,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4999,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64862722,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5002,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65089414,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5005,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65316106,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5008,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65542798,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5011,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65769490,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5015,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65996182,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5018,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66222874,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5021,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66449566,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5024,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66676258,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5027,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66902950,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5030,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67129642,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5034,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67356334,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5037,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67583026,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5040,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67809718,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5043,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68036410,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5046,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68263102,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5049,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68489794,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5053,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68716486,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5056,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68943178,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5059,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69169870,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5062,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69396562,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5065,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69623254,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5068,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69849946,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5072,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70076638,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5075,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70303330,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5078,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70530022,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5081,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70756714,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5084,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70983406,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5087,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71210098,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5091,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71436790,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5094,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71663482,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5097,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71890174,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5100,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=32,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72116866,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5103,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72343558,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5107,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72570250,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5111,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72796942,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5114,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73023634,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5117,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73250326,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5120,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73477018,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5123,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73703710,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5126,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73930402,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5130,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74157094,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5133,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74383786,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5136,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74610478,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5139,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74837170,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5142,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75063862,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5145,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75290554,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5149,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75517246,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5152,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75743938,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5155,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75970630,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5158,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76197322,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5161,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76424014,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5164,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76650706,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5168,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76877398,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5171,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77104090,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5174,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77330782,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5177,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77557474,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5180,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77784166,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5183,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78010858,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5187,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78237550,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5190,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78464242,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5193,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78690934,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5196,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78917626,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5199,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79144318,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5202,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79371010,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5206,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79597702,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5209,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79824394,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5212,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80051086,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5215,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80277778,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5218,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80504470,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5221,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80731162,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5225,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80957854,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5228,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81184546,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5231,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81411238,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5234,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81637930,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5237,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81864622,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5240,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82091314,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5244,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82318006,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5247,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82544698,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5250,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82771390,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5253,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82998082,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5256,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83224774,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5259,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=33,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83451466,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5264,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83678158,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5267,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83904850,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5270,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84131542,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5273,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84358234,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5276,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84584926,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5279,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84811618,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5283,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85038310,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5286,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85265002,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5289,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85491694,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5292,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85718386,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5295,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.080000162124634,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85938559,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5298,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=86172602,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5302,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=86399294,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5305,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=86625986,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5308,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=86852678,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5311,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=87079370,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5314,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=87078614,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5317,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.027000188827515,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84774138,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5321,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85000830,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5324,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85227522,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5327,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85454214,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5330,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85680906,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5333,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84851578,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5336,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83835070,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5340,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82824162,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5343,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81807654,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5346,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80796746,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5349,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79785838,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5352,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78769330,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5355,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77758422,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5359,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76747514,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5362,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75731006,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5365,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74720098,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5368,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73703590,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5371,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72692682,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5374,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71681774,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5378,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70665266,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5381,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69654358,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5384,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68643450,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5387,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67626942,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5390,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66616034,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5393,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65599526,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5397,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64588618,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5400,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63577710,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5403,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62561202,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5406,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61550294,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5409,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60533786,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5412,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59522878,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5416,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58511970,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5419,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=34,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57495462,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5422,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56484554,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5426,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55473646,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5429,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54457138,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5432,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53446230,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5436,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52429722,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5439,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51418814,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5442,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50407906,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5445,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49391398,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5448,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48538163,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5451,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48764906,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5455,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48991598,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5458,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49218290,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5461,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49444982,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5464,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49671674,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5467,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49898366,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5470,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50125058,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5474,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50351750,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5477,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50578442,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5480,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50805134,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5483,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51031826,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5486,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51258518,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5489,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51485210,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5493,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51711902,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5496,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51938594,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5499,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52165286,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5502,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52391978,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5505,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52618670,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5508,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52845362,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5512,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53072054,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5515,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53298746,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5518,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53525438,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5521,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53752130,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5524,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53978822,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5527,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54205514,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5531,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54432206,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5534,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54658898,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5537,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54885590,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5540,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55112282,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5543,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55338974,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5546,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55565666,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5550,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55792358,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5553,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56019050,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5556,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56245742,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5559,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56472434,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5562,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56699126,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5565,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56925818,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5569,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57152510,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5572,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57379202,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5575,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57605894,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5578,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=35,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57832586,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5581,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58059278,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5585,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58285970,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5589,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58512662,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5592,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58739354,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5595,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58966046,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5598,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59192738,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5601,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59419430,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5604,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59646122,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5608,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59872814,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5611,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60099506,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5614,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60326198,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5617,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60552890,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5620,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60779582,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5623,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61006274,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5627,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61232966,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5630,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61459658,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5633,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61686350,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5636,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61913042,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5639,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62139734,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5642,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62366426,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5646,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62593118,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5649,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62819810,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5652,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63046502,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5655,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63273194,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5658,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63499886,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5661,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63726578,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5665,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63953270,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5668,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64179962,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5671,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64406654,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5674,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64633346,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5677,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64860038,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5680,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65086730,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5684,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65313422,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5687,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65540114,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5690,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65766806,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5693,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65993498,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5696,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66220190,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5699,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66446882,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5703,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66673574,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5706,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66900266,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5709,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67126958,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5712,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67353650,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5715,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67580342,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5718,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67807034,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5722,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68033726,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5725,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68260418,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5728,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68487110,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5731,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68713802,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5734,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68940494,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5737,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=36,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69167186,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5742,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69393878,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5745,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69620570,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5748,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69847262,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5751,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70073954,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5754,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70300646,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5757,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70527338,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5761,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70754030,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5764,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70980722,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5767,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71207414,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5770,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71434106,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5773,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71660798,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5776,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71887490,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5780,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72114182,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5783,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72340874,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5786,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72567566,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5789,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72794258,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5792,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73020950,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5795,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73247642,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5799,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73474334,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5802,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73701026,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5805,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73927718,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5808,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74154410,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5811,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74381102,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5814,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74607794,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5818,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74834486,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5821,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75061178,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5824,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75287870,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5827,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75514562,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5830,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75741254,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5833,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75967946,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5837,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76194638,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5840,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76421330,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5843,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76648022,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5846,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76874714,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5849,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77101406,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5852,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77328098,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5856,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77554790,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5859,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77781482,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5862,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78008174,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5865,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78234866,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5868,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78461558,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5871,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78688250,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5875,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78914942,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5878,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79141634,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5881,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79368326,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5884,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79595018,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5887,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79821710,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5890,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80048402,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5894,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80275094,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5897,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=37,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80501786,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5900,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80728478,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5904,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80955170,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5907,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81181862,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5910,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81408554,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5914,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81635246,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5917,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81861938,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5920,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82088630,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5923,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82315322,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5926,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82542014,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5929,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82768706,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5933,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82995398,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5936,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83222090,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5939,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83448782,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5942,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83675474,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5945,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83902166,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5948,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84128858,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5952,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84355550,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5955,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84582242,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5958,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84808934,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5961,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85035626,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5964,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85262318,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5967,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85489010,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5971,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85715702,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5974,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85942394,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5977,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=86169086,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5980,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=86395778,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5983,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.083999872207642,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=86622150,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5986,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=86849162,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5990,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=87075854,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5993,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=87302546,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5996,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=87529238,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=5999,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=87755930,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6002,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=86485322,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6005,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85426186,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6009,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85652878,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6012,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85879570,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6015,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=86106262,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6018,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85950642,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6021,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84934134,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6024,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83923226,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6028,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82906718,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6031,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81895810,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6034,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80884902,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6037,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79868394,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6040,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78857486,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6043,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77846578,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6047,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76830070,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6050,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75819162,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6053,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74802654,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6056,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=38,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73791746,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6059,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72780838,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6063,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71764330,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6067,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70753422,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6070,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69736914,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6073,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68726006,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6076,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67715098,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6079,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66698590,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6082,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65687682,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6086,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64676774,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6089,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63660266,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6092,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62649358,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6095,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61632850,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6098,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60621942,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6101,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59611034,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6105,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58594526,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6108,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57583618,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6111,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56572710,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6114,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55556202,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6117,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54545294,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6120,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53528786,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6124,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52517878,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6127,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51506970,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6130,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50490462,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6133,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49479554,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6136,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48893019,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6139,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49119762,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6143,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49346454,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6146,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49573146,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6149,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49799838,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6152,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50026530,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6155,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50253222,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6158,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50479914,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6162,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50706606,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6165,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50933298,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6168,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51159990,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6171,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51386682,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6174,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51613374,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6177,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51840066,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6181,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52066758,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6184,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52293450,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6187,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52520142,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6190,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52746834,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6193,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52973526,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6196,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53200218,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6200,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53426910,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6203,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53653602,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6206,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53880294,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6209,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54106986,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6212,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54333678,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6215,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=39,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54560370,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6220,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54787062,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6223,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55013754,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6226,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55240446,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6229,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55467138,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6232,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55693830,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6235,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55920522,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6239,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56147214,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6242,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56373906,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6245,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56600598,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6248,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56827290,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6251,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57053982,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6254,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57280674,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6258,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57507366,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6261,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57734058,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6264,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57960750,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6267,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58187442,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6270,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58414134,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6273,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58640826,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6277,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58867518,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6280,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59094210,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6283,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59320902,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6286,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59547594,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6289,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59774286,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6292,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60000978,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6296,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60227670,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6299,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60454362,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6302,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60681054,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6305,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60907746,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6308,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61134438,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6311,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61361130,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6315,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61587822,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6318,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61814514,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6321,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62041206,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6324,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62267898,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6327,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62494590,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6330,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62721282,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6334,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62947974,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6337,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63174666,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6340,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63401358,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6343,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63628050,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6346,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.01800012588501,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63854742,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6349,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64081434,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6353,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64308126,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6356,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64534818,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6359,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64761510,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6362,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017000198364258,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64988202,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6365,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514444,
+ ["elapsed_time"]=0.017999887466431,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65214894,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6368,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+ {
+ ["cs_count"]=38012,
+ ["dyn_used"]=514432,
+ ["elapsed_time"]=0.016999959945679,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65441586,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="171",
+ ["attribute_list"]="77",
+ ["dir"]="5",
+ ["disc"]="196",
+ ["glue"]="449",
+ ["glue_spec"]="281",
+ ["glyph"]="2014",
+ ["hlist"]="98",
+ ["if_stack"]="7",
+ ["kern"]="14",
+ ["local_par"]="15",
+ ["pdf_literal"]="33",
+ ["penalty"]="35",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6372,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=40,
+ ["pool_ptr"]=647904,
+ ["str_ptr"]=2136899,
+ },
+} \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mk/mk-timing-1.tex b/doc/context/sources/general/manuals/mk/mk-timing-1.tex
new file mode 100644
index 000000000..bd1815ec9
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-timing-1.tex
@@ -0,0 +1,3 @@
+\usemodule[timing] \starttext \dorecurse{2000}{
+ \input tufte \par \input tufte \par \input tufte \page
+} \stoptext
diff --git a/doc/context/sources/general/manuals/mk/mk-timing-2-luatex-progress.lut b/doc/context/sources/general/manuals/mk/mk-timing-2-luatex-progress.lut
new file mode 100644
index 000000000..d5a198c8f
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-timing-2-luatex-progress.lut
@@ -0,0 +1,44350 @@
+return {
+ {
+ ["cs_count"]=37995,
+ ["dyn_used"]=513786,
+ ["elapsed_time"]=0.0060000419616699,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=38475955,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="16",
+ ["attribute_list"]="8",
+ ["dir"]="2",
+ ["disc"]="1",
+ ["glue"]="1",
+ ["glue_spec"]="18",
+ ["hlist"]="3",
+ ["kern"]="1",
+ ["pdf_literal"]="29",
+ ["penalty"]="3",
+ ["rule"]="2",
+ ["vlist"]="5",
+ },
+ ["obj_ptr"]=0,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=0,
+ ["pool_ptr"]=647310,
+ ["str_ptr"]=2136865,
+ },
+ {
+ ["cs_count"]=38007,
+ ["dyn_used"]=514600,
+ ["elapsed_time"]=0.040999889373779,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=36884954,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="198",
+ ["attribute_list"]="86",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3351",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=0,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=0,
+ ["pool_ptr"]=647788,
+ ["str_ptr"]=2136893,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514382,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=37193514,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3110",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514382,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=37512119,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3522",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=9,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514382,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=37820006,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3351",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=12,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514382,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=38128258,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3110",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=15,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514383,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=38452142,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3522",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=18,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514386,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=38759826,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3351",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=21,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514388,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=39068014,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3110",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=25,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514393,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=39392026,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3522",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=28,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514394,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=39699990,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=31,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=40008458,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=34,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=40332622,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=37,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=40640362,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=40,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=40948606,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=44,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=41272546,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=47,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=41580286,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=50,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=41888786,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=53,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=42212726,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=56,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=42520466,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=59,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=42828710,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=63,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=43152650,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=66,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=43460390,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=69,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=43768634,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=72,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=44092574,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=75,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=44400314,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=78,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=44708558,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=82,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=45032498,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=85,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=45340238,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=88,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=45648482,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=91,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=45972422,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=94,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=46280162,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=97,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=46588406,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=101,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=46912858,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=104,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47220598,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=107,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47528842,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=110,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47852782,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=113,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48160522,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=116,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48468766,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=120,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48792706,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=123,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49100446,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=126,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49408690,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=129,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49732630,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=132,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50040370,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=135,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50348614,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=139,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50672554,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=142,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50980294,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=145,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51288538,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=148,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51612478,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=151,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51920218,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=154,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52228462,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=158,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52552402,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=161,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52860142,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=164,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53168386,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=168,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53492326,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=171,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53800066,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=174,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54108310,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=178,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54432250,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=181,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54739990,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=184,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55048234,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=187,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55372174,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=190,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55679914,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=193,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55988158,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=197,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56312098,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=200,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56619838,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=203,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56929106,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=206,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57253046,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=209,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514397,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57560786,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=212,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514398,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57869030,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=216,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514401,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58192970,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=219,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514401,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58500710,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=222,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514401,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58808954,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=225,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514401,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59132894,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=228,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514401,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59440634,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=231,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514401,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59748878,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=235,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514401,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60072818,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=238,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514401,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60380558,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=241,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514401,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60688802,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=244,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514401,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61012742,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=247,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514401,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61320482,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=250,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514401,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61628726,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=254,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514401,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61952666,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=257,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514401,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62260406,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=260,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514401,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62568650,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=263,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514401,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62892590,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=266,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514401,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63200330,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=269,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514401,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63508574,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=273,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514401,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63832514,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=276,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514401,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64140254,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=279,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514401,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64448498,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=282,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514401,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64772438,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=285,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514401,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65080178,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=288,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514401,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65388422,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=292,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514401,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65712362,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=295,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514401,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66020102,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=298,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514401,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66328346,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=301,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514401,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66652286,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=304,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514401,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66960026,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=307,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514403,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67268270,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=311,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514408,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67592210,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=314,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514409,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67900230,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=317,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68208754,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=320,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68532974,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=323,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68840770,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=327,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69149070,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=331,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69473066,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=334,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69780862,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=337,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70089162,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=340,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70413158,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=343,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70720954,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=346,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71029254,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=350,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71353250,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=353,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71661046,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=356,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71969346,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=359,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72293342,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=362,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72601138,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=365,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72909438,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=369,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73233434,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=372,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73541230,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=375,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73849530,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=378,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74173526,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=381,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74481322,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=384,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74789622,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=388,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75113618,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=391,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75421414,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=394,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75729714,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=397,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76053710,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=400,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76361506,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=403,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76669806,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=407,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76995850,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=410,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77303646,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=413,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77611946,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=416,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77935942,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=419,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78243738,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=422,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78552038,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=426,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78876034,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=429,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79183830,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=432,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79492130,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=435,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79816126,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=438,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80123922,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=441,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80432222,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=445,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80756218,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=448,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.075999975204468,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81046008,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=451,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81282234,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=454,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81546244,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=457,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81780879,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=460,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82023792,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=464,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.033999919891357,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79643806,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=467,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79951602,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=470,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80259838,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=473,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80349950,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=476,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78977746,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=479,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77600446,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=484,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.030999898910522,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76149242,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=487,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74771438,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=490,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73399738,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=493,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71948534,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=496,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.035000085830688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70570730,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=499,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69199030,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=503,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67747826,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=506,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66370022,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=509,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64998322,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=512,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63541518,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=515,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.027000188827515,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62169314,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=518,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60792014,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=522,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59340810,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=525,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57968606,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=528,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56591306,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=531,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.032000064849854,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55140102,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=534,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53767898,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=537,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52390598,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=541,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50939394,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=544,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49567190,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=547,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48189890,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=550,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=46738686,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=553,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=46399105,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=556,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=46707405,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=560,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47031401,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=563,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47339197,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=566,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47647497,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=569,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47971493,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=572,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48279289,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=575,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48587589,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=579,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48911585,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=582,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49219381,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=585,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49527681,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=588,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49851677,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=591,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50159473,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=594,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50467773,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=598,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50791769,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=601,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51099565,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=604,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51407865,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=607,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51731861,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=610,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52039657,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=613,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52347957,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=617,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52671953,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=620,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52979749,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=623,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53288049,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=626,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53612045,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=629,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53919841,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=632,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54228141,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=636,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54552137,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=639,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54859933,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=642,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55168233,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=646,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55492229,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=649,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55800025,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=652,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56108325,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=656,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56432321,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=659,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56740117,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=662,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57048417,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=665,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57372413,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=668,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57680209,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=671,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57988509,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=675,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58312505,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=678,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58620301,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=681,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58928601,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=684,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59252597,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=687,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59560393,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=690,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59868693,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=694,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60192689,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=697,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60500485,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=700,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60808785,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=703,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61132781,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=706,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61440577,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=709,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61748877,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=713,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62072873,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=716,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62380669,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=719,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62688969,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=722,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63012965,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=725,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63320761,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=728,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63629061,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=732,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63953057,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=735,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64260853,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=738,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64569153,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=741,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64893149,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=744,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65200945,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=747,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65509245,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=751,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65833241,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=754,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66141037,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=757,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66449337,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=760,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66773333,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=763,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67081129,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=766,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67389429,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=770,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67713425,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=773,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68021221,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=776,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68329521,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=779,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68653517,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=782,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68961313,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=785,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69269613,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=789,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69593609,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=792,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69901405,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=795,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70209705,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=798,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70533701,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=801,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70841497,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=805,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71149797,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=809,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71473793,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=812,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71781589,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=815,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72093985,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=818,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72417981,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=821,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72725777,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=824,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73034077,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=828,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73358073,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=831,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73665869,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=834,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73974169,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=837,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74298165,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=840,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74605961,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=843,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74914261,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=847,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75238257,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=850,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75546053,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=853,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75854353,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=856,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76178349,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=859,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76486145,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=862,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76794445,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=866,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77118441,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=869,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77426237,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=872,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.02299976348877,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77734537,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=875,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78058533,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=878,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78366329,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=881,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78674629,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=885,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78998625,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=888,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79306421,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=891,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79614721,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=894,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79938717,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=897,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80246513,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=900,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80554813,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=904,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80878809,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=907,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81186605,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=910,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81494905,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=913,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81818901,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=916,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82126697,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=919,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.075999975204468,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82434837,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=923,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82758993,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=926,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025999784469604,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83066789,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=929,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83375089,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=932,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83699085,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=935,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.032000064849854,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81666057,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=938,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81974357,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=942,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82298353,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=945,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82133677,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=948,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80756377,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=951,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79305173,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=954,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77932969,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=957,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76555669,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=962,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75104465,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=965,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73732261,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=968,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72354961,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=971,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.028999805450439,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70903757,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=974,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69531553,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=977,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68154253,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=981,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.031000137329102,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66703049,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=984,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65330845,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=987,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63953545,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=990,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.030999898910522,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62502341,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=993,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61130137,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=996,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59752837,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1000,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58301633,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1003,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56929429,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1006,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55552129,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1009,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.031000137329102,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54100925,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1012,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.028999805450439,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52728721,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1015,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51351421,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1019,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49900217,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1022,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48528013,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1025,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47150713,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1028,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=46884348,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1031,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47192144,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1034,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47500444,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1038,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47824440,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1041,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48132236,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1044,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48440536,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1047,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48764532,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1050,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49072328,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1053,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49380628,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1057,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49704624,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1060,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50012420,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1063,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50320720,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1066,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50644716,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1069,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50952512,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1072,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51260812,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1076,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51584808,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1079,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51892604,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1082,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52200904,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1085,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52524900,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1088,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52832696,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1091,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53140996,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1095,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53464992,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1098,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53772788,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1101,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54081088,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1104,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54405084,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1107,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54712880,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1110,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55021180,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1114,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55345176,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1117,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55652972,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1120,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55961272,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1124,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56285268,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1127,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56593064,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1130,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56901364,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1134,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57225360,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1137,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57533156,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1140,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57841456,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1143,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58165452,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1146,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58473248,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1149,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58781548,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1153,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59105544,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1156,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59413340,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1159,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59721640,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1162,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60045636,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1165,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60353432,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1168,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60661732,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1172,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60985728,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1175,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61293524,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1178,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61601824,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1181,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61925820,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1184,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62233616,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1187,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62541916,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1191,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62865912,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1194,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63173708,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1197,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63482008,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1200,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63806004,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1203,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64113800,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1206,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64422100,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1210,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64746096,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1213,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65053892,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1216,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65362192,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1219,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65686188,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1222,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65993984,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1225,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66302284,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1229,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66626280,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1232,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66934076,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1235,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67242376,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1238,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67566372,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1241,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67874168,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1244,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68182468,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1248,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68506464,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1251,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68814260,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1254,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69122560,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1257,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69446556,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1260,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69754352,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1263,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70062652,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1267,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70386648,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1270,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70694444,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1273,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71002744,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1276,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71326740,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1279,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71634536,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1283,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71942836,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1287,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72266832,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1290,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72574628,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1293,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72882928,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1296,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73206924,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1299,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73514720,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1302,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73823020,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1306,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74147016,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1309,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74454812,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1312,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74763112,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1315,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75087108,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1318,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75394904,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1321,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75703204,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1325,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76027200,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1328,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76334996,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1331,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76643296,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1334,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76967292,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1337,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.031000137329102,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77275088,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1340,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77583388,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1344,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025999784469604,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77907384,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1347,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78215180,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1350,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78523480,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1353,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78847476,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1356,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79155272,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1359,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.031000137329102,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79463572,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1363,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025999784469604,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79787568,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1366,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80095364,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1369,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80403664,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1372,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80727660,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1375,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81035456,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1378,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81343756,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1382,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81667752,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1385,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81975548,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1388,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82283848,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1391,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82607844,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1394,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.079999923706055,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82915091,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1397,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83223737,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1401,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83547936,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1404,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025999784469604,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83855732,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1407,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83626488,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1410,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.032000064849854,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82130028,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1413,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82437824,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1416,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82746124,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1420,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82196828,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1423,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80824624,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1426,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79447324,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1429,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.032000064849854,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77996120,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1432,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76618316,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1435,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75246616,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1440,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73795412,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1443,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72417608,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1446,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71045908,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1449,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69589104,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1452,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68216900,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1455,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66845200,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1459,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65388396,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1462,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64016192,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1465,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62638892,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1468,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.031000137329102,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61187688,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1471,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59815484,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1474,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58438184,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1478,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.032000064849854,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56986980,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1481,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55614776,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1484,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54237476,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1487,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.030999898910522,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52786272,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1490,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51414068,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1493,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50036768,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1497,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.032000064849854,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48585564,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1500,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47213360,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1503,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47106472,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1506,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47430468,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1509,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47738264,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1512,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48046564,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1516,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48370560,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1519,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48678356,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1522,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48986656,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1525,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49310652,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1528,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49618448,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1531,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49926748,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1535,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50250744,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1538,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50558540,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1541,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50866840,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1544,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51190836,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1547,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51498632,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1550,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51806932,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1554,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52130928,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1557,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52438724,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1560,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52747024,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1563,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53071020,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1566,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53378816,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1569,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53687116,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1573,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54011112,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1576,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54318908,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1579,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54627208,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1582,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54951204,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1585,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55259000,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1588,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55567300,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1592,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55891296,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1595,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56199092,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1598,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56507392,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1602,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56831388,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1605,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57139184,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1608,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57447484,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1612,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57771480,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1615,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58079276,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1618,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58387576,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1621,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58711572,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1624,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59019368,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1627,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59327668,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1631,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59659856,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1634,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59967652,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1637,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60275952,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1640,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60599948,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1643,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60907744,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1646,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61216044,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1650,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61540040,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1653,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61847836,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1656,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62156136,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1659,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62480132,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1662,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62787928,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1665,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63096228,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1669,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63420224,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1672,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63728020,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1675,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64036320,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1678,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64360316,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1681,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64668112,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1684,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64976412,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1688,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65300408,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1691,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65608204,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1694,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65916504,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1697,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66240500,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1700,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66548296,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1703,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66856596,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1707,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67180592,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1710,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67488388,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1713,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67796688,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1716,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68120684,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1719,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68428480,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1722,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68736780,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1726,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69060776,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1729,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69368572,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1732,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69676872,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1735,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70000868,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1738,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70308664,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1741,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70616964,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1745,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70940960,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1748,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71248756,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1751,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71557056,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1754,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71881052,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1757,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72188848,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1761,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72497148,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1765,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72821144,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1768,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73128940,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1771,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73437240,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1774,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73761236,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1777,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74069032,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1780,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74377332,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1784,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74701328,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1787,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75009124,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1790,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75317424,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1793,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75641420,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1796,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75949216,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1799,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76257516,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1803,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76581512,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1806,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76889308,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1809,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77197608,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1812,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77521604,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1815,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77829400,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1818,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78137700,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1822,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78461696,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1825,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78769492,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1828,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79077792,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1831,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79401788,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1834,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79709584,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1837,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80017884,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1841,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80341880,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1844,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80649676,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1847,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80957976,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1850,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81281972,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1853,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81589768,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1856,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81898068,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1860,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82222064,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1863,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82529860,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1866,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82838160,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1869,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.081999778747559,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83155141,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1872,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.027000188827515,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83462789,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1875,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83771292,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1879,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84095288,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1882,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84403084,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1885,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.032999992370605,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82520656,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1888,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82677076,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1891,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82984872,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1894,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025999784469604,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83293172,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1898,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.03000020980835,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81888112,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1901,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80515908,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1904,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79138608,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1907,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.031999826431274,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77687404,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1910,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76315200,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1913,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74937900,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1918,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73486696,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1921,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72114492,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1924,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.028999805450439,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70737192,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1927,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69285988,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1930,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67913784,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1933,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66536484,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1937,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.031000137329102,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65085280,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1940,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63713076,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1943,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62335776,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1946,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.030999898910522,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60884572,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1949,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59506768,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1952,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58135068,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1956,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.030999898910522,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56683864,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1959,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55306060,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1962,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53934360,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1965,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.031000137329102,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52477556,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1968,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.028999805450439,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51105352,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1971,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49733652,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1975,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.031000137329102,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48276848,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1978,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.028999805450439,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47120368,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1981,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47428668,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1984,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47752664,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1987,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48060460,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1990,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48368760,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1994,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48692756,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1997,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49000552,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2000,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49308852,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2003,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49632848,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2006,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49940644,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2009,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50248944,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2013,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50572940,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2016,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50880736,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2019,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51189036,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2022,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51513032,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2025,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51820828,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2028,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52129128,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2032,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52453124,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2035,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52760920,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2038,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53069220,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2041,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53393216,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2044,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53701012,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2047,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54009312,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2051,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54333308,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2054,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54641104,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2057,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54949404,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2060,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55273400,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2063,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55581196,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2066,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55889496,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2070,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56213492,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2073,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56521288,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2076,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56829588,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2080,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57153584,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2083,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57461380,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2086,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57769680,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2090,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58093676,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2093,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58401472,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2096,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58709772,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2099,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59033768,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2102,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59341564,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2105,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59649864,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2109,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59973860,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2112,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60281656,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2115,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60589956,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2118,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60913952,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2121,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61221748,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2124,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61530048,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2128,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61854044,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2131,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62161840,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2134,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62470140,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2137,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62794136,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2140,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63101932,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2143,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63410232,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2147,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63734228,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2150,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64042024,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2153,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64350324,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2156,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64674320,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2159,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64982116,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2162,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65290416,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2166,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65614412,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2169,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65922208,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2172,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66230508,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2175,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66554504,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2178,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66862300,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2181,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67170600,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2185,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67494596,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2188,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67802392,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2191,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68110692,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2194,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514412,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68434688,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2197,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514413,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68742484,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2200,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69050784,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2204,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69374780,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2207,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69682576,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2210,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69990876,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2213,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70314872,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2216,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70622668,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2219,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70930968,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2223,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71254964,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2226,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71562760,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2229,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71871060,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2232,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72195056,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2235,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72502852,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2239,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72811152,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2243,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73135148,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2246,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73442944,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2249,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73751244,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2252,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74075240,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2255,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74383036,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2258,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74691336,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2262,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75015332,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2265,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75323128,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2268,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75631428,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2271,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75955424,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2274,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76263220,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2277,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76571520,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2281,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76895516,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2284,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77203312,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2287,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77511612,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2290,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77835608,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2293,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78143404,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2296,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78451704,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2300,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78775700,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2303,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79083496,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2306,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79391796,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2309,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79715792,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2312,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80023588,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2315,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80331888,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2319,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80655884,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2322,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80963680,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2325,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81271980,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2328,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81595976,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2331,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81903772,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2334,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82212072,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2338,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82536068,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2341,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82843864,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2344,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83152164,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2347,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83476160,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2350,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.083999872207642,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83784172,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2353,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84092869,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2357,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.027000188827515,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84417068,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2360,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84724864,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2363,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83716580,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2366,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82972280,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2369,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83280076,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2372,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.027000188827515,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83588376,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2376,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.028999805450439,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82666316,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2379,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81288512,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2382,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79916812,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2385,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.031000137329102,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78465608,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2388,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77087804,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2391,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75716104,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2396,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74259300,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2399,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72887096,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2402,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71509796,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2405,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70058592,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2408,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68686388,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2411,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67309088,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2415,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.03600001335144,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65857884,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2418,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64485680,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2421,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63108380,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2424,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61657176,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2427,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60284972,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2430,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.028999805450439,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58907672,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2434,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.032000064849854,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57456468,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2437,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56084264,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2440,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.028999805450439,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54706964,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2443,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.032000064849854,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53255760,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2446,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.031000137329102,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51883556,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2449,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.028999805450439,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50506256,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2453,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.031000137329102,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49055052,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2456,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47682848,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2459,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47501756,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2462,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47825752,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2465,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48133548,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2468,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48441848,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2472,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48765844,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2475,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49073640,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2478,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49381940,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2481,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49705936,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2484,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50013732,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2487,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50322032,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2491,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50646028,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2494,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50953824,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2497,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51262124,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2500,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51586120,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2503,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51893916,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2506,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52202216,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2510,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52526212,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2513,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52834008,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2516,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53142308,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2519,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53466304,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2522,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53774100,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2525,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54082400,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2529,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54406396,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2532,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54714192,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2535,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55022492,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2538,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55346488,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2541,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55654284,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2544,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55962584,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2548,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56286580,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2551,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56594376,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2554,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56902676,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2558,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57226672,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2561,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57534468,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2564,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57842768,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2568,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58166764,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2571,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58474560,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2574,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58782860,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2577,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59106856,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2580,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59414652,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2583,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59722952,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2587,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60046948,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2590,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60354744,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2593,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60663044,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2596,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60987040,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2599,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61294836,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2602,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61603136,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2606,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61927132,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2609,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62234928,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2612,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62543228,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2615,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62867224,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2618,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63175020,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2621,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63483320,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2625,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63807316,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2628,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64115112,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2631,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64423412,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2634,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64747408,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2637,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65055204,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2640,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65363504,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2644,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65687500,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2647,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65995296,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2650,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66303596,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2653,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66627592,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2656,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66935388,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2659,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67243688,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2663,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67567684,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2666,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67875480,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2669,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68183780,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2672,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68507776,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2675,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68815572,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2678,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69123872,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2682,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69447868,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2685,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69755664,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2688,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70063964,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2691,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70387960,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2694,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70695756,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2697,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71004056,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2701,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71328052,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2704,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71635848,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2707,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71944148,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2710,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72268144,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2713,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72575940,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2717,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72884240,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2721,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73208236,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2724,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73516032,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2727,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73824332,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2730,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74148328,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2733,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74456124,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2736,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74764424,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2740,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75088420,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2743,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75396216,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2746,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75704516,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2749,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76028512,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2752,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76336308,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2755,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76644608,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2759,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76968604,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2762,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77276400,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2765,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77584700,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2768,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77908696,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2771,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78216492,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2774,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78524792,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2778,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78848788,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2781,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79156584,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2784,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79464884,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2787,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79788880,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2790,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.02299976348877,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80096676,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2793,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80404976,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2797,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80728972,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2800,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81036768,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2803,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81345068,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2806,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81669064,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2809,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81976860,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2812,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82285160,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2816,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82609156,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2819,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82916952,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2822,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83225252,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2825,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83549248,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2828,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83857044,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2831,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.085999965667725,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84165779,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2835,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84490172,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2838,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84797968,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2841,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85106268,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2844,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.034999847412109,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83999160,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2847,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.03000020980835,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83347156,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2850,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83655456,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2854,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83979452,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2857,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.027000188827515,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83089660,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2860,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.028999805450439,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81712360,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2863,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.031000137329102,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80261156,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2866,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78888952,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2869,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77511652,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2874,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.030999898910522,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76060448,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2877,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74688244,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2880,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73310944,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2883,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71859740,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2886,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70487536,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2889,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69110236,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2893,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67659032,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2896,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66286828,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2899,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64909528,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2902,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.030999898910522,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63458324,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2905,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62086120,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2908,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60708820,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2912,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59257616,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2915,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57885412,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2918,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56508112,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2921,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.032000064849854,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55056908,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2924,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53684704,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2927,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52307404,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2931,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.030999898910522,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50856200,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2934,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49478396,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2937,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48106696,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2940,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.027000188827515,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47675668,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2943,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47983478,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2946,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48291778,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2950,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48615774,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2953,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48923570,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2956,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49231870,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2959,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49555866,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2962,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49863662,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2965,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50171962,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2969,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50495958,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2972,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50803754,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2975,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51112054,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2978,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51436050,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2981,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51743846,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2984,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52052146,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2988,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52376142,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2991,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52683938,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2994,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52992238,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2997,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53316234,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3000,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53624030,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3003,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53932330,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3007,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54256326,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3010,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54564122,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3013,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54872422,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3016,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55196418,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3019,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55504214,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3022,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55812514,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3026,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56136510,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3029,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56444306,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3032,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56752606,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3036,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57076602,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3039,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57384398,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3042,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57692698,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3046,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58016694,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3049,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58324490,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3052,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58632790,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3055,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58956786,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3058,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59264582,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3061,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59572882,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3065,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59896878,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3068,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60204674,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3071,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60512974,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3074,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60836970,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3077,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61144766,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3080,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61453066,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3084,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61777062,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3087,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62084858,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3090,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62393158,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3093,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62717154,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3096,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63024950,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3099,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63333250,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3103,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63657246,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3106,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63965042,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3109,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64273342,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3112,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64597338,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3115,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64905134,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3118,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65213434,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3122,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65537430,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3125,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65845226,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3128,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66153526,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3131,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66477522,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3134,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66785318,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3137,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67093618,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3141,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67417614,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3144,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67725410,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3147,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68033710,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3150,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68357706,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3153,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68665502,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3156,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68973802,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3160,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69297798,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3163,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69605594,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3166,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69913894,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3169,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70237890,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3172,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514416,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70545686,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3175,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514418,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70853986,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3179,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514423,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71177982,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3182,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514424,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71486058,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3185,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71794638,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3188,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72118914,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3191,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72426766,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3195,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72735122,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3199,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73059174,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3202,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73367026,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3205,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73675382,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3208,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73999434,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3211,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74307286,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3214,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74615642,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3218,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74939694,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3221,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75247546,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3224,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75555902,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3227,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75879954,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3230,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76187806,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3233,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76496162,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3237,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.025999784469604,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76820214,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3240,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77128066,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3243,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77436422,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3246,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77760474,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3249,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78068326,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3252,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78376682,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3256,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78700734,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3259,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79008586,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3262,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79333326,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3265,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79657378,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3268,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79965230,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3271,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80273586,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3275,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80597638,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3278,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80905490,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3281,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81213846,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3284,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81537898,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3287,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81845750,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3290,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82154106,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3294,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82478158,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3297,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82786010,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3300,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83094366,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3303,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83418418,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3306,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83726270,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3309,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84034626,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3313,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84351830,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3316,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.084000110626221,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84666956,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3319,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84975109,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3322,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85299161,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3325,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85607013,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3328,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.032999992370605,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83664253,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3332,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83847325,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3335,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84155177,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3338,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84463533,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3341,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83071549,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3344,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81699401,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3347,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80322157,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3352,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.032999992370605,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78871009,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3355,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77498861,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3358,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76121617,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3361,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.030999898910522,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74670469,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3364,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73298321,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3367,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71921077,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3371,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.032000064849854,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70469929,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3374,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69097781,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3377,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67720537,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3380,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66269389,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3383,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64891641,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3386,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63514397,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3390,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.03000020980835,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62063249,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3393,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.028999805450439,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60691101,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3396,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59313857,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3399,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.031000137329102,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57862709,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3402,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56490561,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3405,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55113317,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3409,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.032000064849854,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53662169,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3412,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52290021,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3415,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50912777,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3418,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.031999826431274,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49461629,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3421,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48083881,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3424,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47940014,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3428,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48264117,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3431,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48571969,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3434,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48880325,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3437,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49204377,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3440,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49512229,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3443,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49820585,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3447,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50144637,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3450,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50452489,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3453,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50760845,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3456,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51084897,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3459,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51392749,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3462,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51701105,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3466,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52025157,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3469,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52333009,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3472,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52641365,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3475,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52965417,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3478,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53273269,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3481,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53581625,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3485,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53905677,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3488,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54213529,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3491,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54521885,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3494,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54845937,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3497,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55153789,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3500,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55462145,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3504,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55786197,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3507,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56094049,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3510,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56402405,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3514,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56726457,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3517,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57034309,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3520,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57342665,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3524,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57666717,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3527,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57974569,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3530,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58282925,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3533,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58606977,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3536,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58914829,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3539,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59223185,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3543,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59547237,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3546,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59855089,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3549,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60163445,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3552,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60487497,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3555,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60795349,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3558,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61103705,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3562,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61427757,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3565,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61735609,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3568,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62043965,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3571,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62368017,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3574,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62675869,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3577,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62984225,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3581,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63308277,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3584,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63616129,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3587,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63924485,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3590,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64248537,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3593,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64556389,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3596,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64864745,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3600,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65188797,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3603,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65496649,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3606,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65805005,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3609,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66129057,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3612,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66436909,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3615,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66745265,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3619,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67069317,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3622,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67377169,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3625,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67685525,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3628,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68009577,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3631,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68317429,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3634,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68625785,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3638,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68949837,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3641,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69257689,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3644,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69566045,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3647,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69890097,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3650,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70197949,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3653,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70506305,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3657,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70830357,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3660,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71138209,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3663,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71446565,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3666,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71770617,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3669,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72078469,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3673,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72386825,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3677,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72710877,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3680,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73018729,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3683,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73327085,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3686,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73651137,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3689,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73958989,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3692,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74267345,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3696,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74591397,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3699,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74899249,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3702,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75207605,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3705,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75531657,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3708,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75839509,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3711,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76147865,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3715,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76471917,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3718,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76779769,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3721,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77088125,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3724,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77412177,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3727,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77720029,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3730,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78028385,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3734,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78352437,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3737,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78660289,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3740,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78968645,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3743,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79292697,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3746,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79600549,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3749,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79908905,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3753,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80232957,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3756,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80540809,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3759,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80849165,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3762,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81173217,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3765,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81481069,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3768,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81789425,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3772,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82113477,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3775,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82421329,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3778,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82729685,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3781,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83053737,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3784,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83361589,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3787,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83669945,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3791,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83993997,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3794,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84301849,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3797,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84610205,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3800,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.08899998664856,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84933708,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3803,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85241906,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3806,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85550465,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3810,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85874517,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3813,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85846289,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3816,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.032000064849854,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84071069,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3819,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84395121,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3822,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84702973,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3825,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84423049,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3830,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82977501,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3833,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81599753,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3836,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80222509,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3839,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.030999898910522,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78771361,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3842,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77399213,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3845,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76021969,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3849,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.031000137329102,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74570821,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3852,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.028999805450439,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73198673,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3855,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71821429,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3858,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.032999992370605,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70370281,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3861,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68998133,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3864,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67620889,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3868,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.030999898910522,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66169741,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3871,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64791993,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3874,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63420349,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3877,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61963601,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3880,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60591453,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3883,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59214209,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3887,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57763061,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3890,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56390913,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3893,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.030999898910522,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55013669,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3896,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.032000064849854,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53562521,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3899,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52190373,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3902,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50813129,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3906,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.031999826431274,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49361981,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3909,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47989833,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3912,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48237709,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3915,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48561761,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3918,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48869613,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3921,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49177969,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3925,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49502021,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3928,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49809873,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3931,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50118229,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3934,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50442281,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3937,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50750133,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3940,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51058489,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3944,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51382541,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3947,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51690393,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3950,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51998749,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3953,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52322801,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3956,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52630653,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3959,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52939009,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3963,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53263061,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3966,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53570913,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3969,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53879269,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3972,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54203321,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3975,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54511173,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3978,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54819529,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3982,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55143581,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3985,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55451433,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3988,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55759789,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3992,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56083841,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3995,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56391693,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3998,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56700049,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4002,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57024101,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4005,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57331953,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4008,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57640309,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4011,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57964361,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4014,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58272213,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4017,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58580569,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4021,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58904621,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4024,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59212473,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4027,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59520829,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4030,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59844881,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4033,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60152733,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4036,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60461089,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4040,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60785141,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4043,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61092993,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4046,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61401349,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4049,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61725401,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4052,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62033253,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4055,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62341609,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4059,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62665661,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4062,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62973513,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4065,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63281869,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4068,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63605921,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4071,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63913773,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4074,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64222129,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4078,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64546181,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4081,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64854033,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4084,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65162389,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4087,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65486441,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4090,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65794293,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4093,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66102649,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4097,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66426701,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4100,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66734553,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4103,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67042909,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4106,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67366961,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4109,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67674813,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4112,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67983169,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4116,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68307221,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4119,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68615073,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4122,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68923429,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4125,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69247481,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4128,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69555333,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4131,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69863689,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4135,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70187741,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4138,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70495593,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4141,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70803949,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4144,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71128001,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4147,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71435853,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4151,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71744209,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4155,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72068261,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4158,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72376113,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4161,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72684469,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4164,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73008521,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4167,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73316373,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4170,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73624729,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4174,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73948781,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4177,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74256633,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4180,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74564989,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4183,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74889041,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4186,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75196893,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4189,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75505249,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4193,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75829301,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4196,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76137153,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4199,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76445509,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4202,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76769561,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4205,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77077413,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4208,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77385769,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4212,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77709821,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4215,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78017673,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4218,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78326029,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4221,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78650081,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4224,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78957933,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4227,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79266289,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4231,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79590341,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4234,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79898193,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4237,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80206549,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4240,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80530601,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4243,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80838453,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4246,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81146809,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4250,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81470861,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4253,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81778713,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4256,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82087069,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4259,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82411121,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4262,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82718973,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4265,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83027329,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4269,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83351381,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4272,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83659233,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4275,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83967589,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4278,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84291641,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4281,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84599493,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4284,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84907849,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4288,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.088000059127808,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85231846,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4291,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85539550,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4294,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85848109,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4297,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=86172161,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4300,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=86480013,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4303,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.035000085830688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84554093,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4308,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84691565,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4311,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84999417,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4314,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.025999784469604,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85307773,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4317,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.03000020980835,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83975065,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4320,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82597317,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4323,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81225673,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4327,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79768925,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4330,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78396777,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4333,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.034000158309937,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77019533,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4336,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.032000064849854,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75568385,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4339,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.028999805450439,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74196237,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4342,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72818993,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4346,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.032000064849854,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71367845,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4349,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69995697,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4352,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68618453,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4355,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67167305,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4358,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65795157,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4361,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64417913,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4365,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.031999826431274,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62966765,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4368,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61589017,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4371,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60211773,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4374,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58760625,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4377,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57388477,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4380,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56011233,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4384,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.032000064849854,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54560085,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4387,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.029999971389771,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53187937,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4390,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.028999805450439,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51810693,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4393,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.032000064849854,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50359545,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4396,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.031000137329102,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48987397,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4399,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48278798,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4403,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48602901,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4406,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514427,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48910753,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4409,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=514699,
+ ["elapsed_time"]=0.016000032424927,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49101887,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="159",
+ ["attribute_list"]="73",
+ ["dir"]="5",
+ ["disc"]="170",
+ ["glue"]="410",
+ ["glue_spec"]="260",
+ ["glyph"]="1773",
+ ["hlist"]="92",
+ ["if_stack"]="7",
+ ["kern"]="12",
+ ["local_par"]="14",
+ ["pdf_literal"]="33",
+ ["penalty"]="31",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4412,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647894,
+ ["str_ptr"]=2136898,
+ },
+} \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mk/mk-timing-2.tex b/doc/context/sources/general/manuals/mk/mk-timing-2.tex
new file mode 100644
index 000000000..eff998e29
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-timing-2.tex
@@ -0,0 +1,4 @@
+\usemodule[timing] \starttext \dorecurse{2000}{
+ \input tufte \par \input tufte \par \input tufte \par
+} \stoptext
+
diff --git a/doc/context/sources/general/manuals/mk/mk-timing-3-luatex-progress.lut b/doc/context/sources/general/manuals/mk/mk-timing-3-luatex-progress.lut
new file mode 100644
index 000000000..0fea5b7b7
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-timing-3-luatex-progress.lut
@@ -0,0 +1,44350 @@
+return {
+ {
+ ["cs_count"]=37999,
+ ["dyn_used"]=514593,
+ ["elapsed_time"]=0.005000114440918,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=38478622,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="16",
+ ["attribute_list"]="8",
+ ["dir"]="2",
+ ["disc"]="1",
+ ["glue"]="1",
+ ["glue_spec"]="18",
+ ["hlist"]="3",
+ ["kern"]="1",
+ ["pdf_literal"]="29",
+ ["penalty"]="3",
+ ["rule"]="2",
+ ["vlist"]="5",
+ },
+ ["obj_ptr"]=0,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=0,
+ ["pool_ptr"]=647353,
+ ["str_ptr"]=2136869,
+ },
+ {
+ ["cs_count"]=38011,
+ ["dyn_used"]=515389,
+ ["elapsed_time"]=0.031999826431274,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=36876892,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="198",
+ ["attribute_list"]="86",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3351",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=0,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=0,
+ ["pool_ptr"]=647785,
+ ["str_ptr"]=2136895,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515171,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=37178556,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3110",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=6,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515171,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=37488541,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3522",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=9,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515171,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=37789532,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3351",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=12,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515171,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=38090888,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3110",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=15,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515172,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=38406152,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3522",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=18,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515175,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=38706940,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3351",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=21,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515177,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=39008232,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3110",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=25,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515182,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=39323624,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3522",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=28,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515183,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=39624692,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=31,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=39926264,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=34,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=40241808,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=37,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=40542652,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=40,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=40844000,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=44,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=41159320,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=47,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=41460164,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=50,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=41761768,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=53,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=42077088,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=56,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=42377932,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=59,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=42679280,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=63,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=42994600,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=66,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=43295444,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=69,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=43596792,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=72,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=43912112,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=75,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=44212956,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=78,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=44514304,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=82,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=44829624,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=85,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=45130468,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=88,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=45431816,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=91,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=45747136,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=94,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=46047980,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=97,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=46349328,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=101,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=46665160,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=104,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=46966004,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=107,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47267352,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=110,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47582672,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=113,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47883516,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=116,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48184864,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=120,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48500184,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=123,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48801028,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=126,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49102376,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=129,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49417696,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=132,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49718540,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=135,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50019888,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=139,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50335208,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=142,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50636052,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=145,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50937400,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=148,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51252720,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=151,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51553564,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=154,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51854912,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=158,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52170232,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=161,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=1,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52471076,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=164,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52772424,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=168,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53087744,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=171,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53388588,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=174,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53689936,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=178,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54005256,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=181,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54306100,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=184,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54607448,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=187,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54922768,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=190,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55223612,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=193,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55524960,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=197,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55840280,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=200,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56141124,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=203,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56443496,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=206,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56758816,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=209,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515186,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57059660,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=212,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515187,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57361008,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=216,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515190,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57676328,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=219,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515190,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57977172,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=222,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515190,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58278520,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=225,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515190,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58593840,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=228,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515190,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58894684,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=231,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515190,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59196032,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=235,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515190,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59511352,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=238,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515190,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59812196,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=241,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515190,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60113544,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=244,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515190,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60428864,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=247,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515190,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60729708,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=250,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515190,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61031056,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=254,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515190,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61346376,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=257,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515190,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61647220,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=260,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515190,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61948568,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=263,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515190,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62263888,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=266,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515190,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62564732,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=269,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515190,
+ ["elapsed_time"]=0.030999898910522,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62866080,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=273,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515190,
+ ["elapsed_time"]=0.032000064849854,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63181400,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=276,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515190,
+ ["elapsed_time"]=0.030999898910522,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63482244,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=279,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515190,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63783592,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=282,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515190,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64098912,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=285,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515190,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64399756,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=288,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515190,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64701104,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=292,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515190,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65016424,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=295,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515190,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65317268,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=298,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515190,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65618616,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=301,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515190,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65933936,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=304,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515190,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66234780,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3352",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=307,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515192,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66536128,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3111",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=311,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515197,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66851448,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3523",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=314,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515198,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67152572,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=317,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67454200,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=320,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=2,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67769800,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=323,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68070700,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=327,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68372104,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=331,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68687480,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=334,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68988380,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=337,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69289784,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=340,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69605160,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=343,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69906060,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=346,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70207464,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=350,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70522840,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=353,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70823740,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=356,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71125144,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=359,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71440520,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=362,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71741420,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=365,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72042824,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=369,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72358200,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=372,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72659100,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=375,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72960504,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=378,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73275880,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=381,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73576780,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=384,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73878184,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=388,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74193560,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=391,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74494460,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=394,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74795864,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=397,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75111240,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=400,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75412140,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=403,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75713544,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=407,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76030968,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=410,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76331868,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=413,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76633272,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=416,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76948648,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=419,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77249548,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=422,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77550952,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=426,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77866328,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=429,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78167228,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=432,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78468632,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=435,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78784008,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=438,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79084908,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=441,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79386312,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=445,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79701688,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=448,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80002588,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=451,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80303992,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=454,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80619368,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=457,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80920268,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=460,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.069999933242798,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81155692,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=464,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81407745,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=467,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81649665,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=470,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81876567,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=473,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.031000137329102,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80601070,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=476,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80770178,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=479,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=3,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.029000043869019,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81071518,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=484,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81386894,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=487,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80131106,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=490,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78780510,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=493,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77376686,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=496,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76031186,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=499,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74680590,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=503,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73271166,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=506,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71931266,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=509,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70580670,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=512,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69171246,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=515,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67825746,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=518,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66480750,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=522,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65071326,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=525,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63725826,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=528,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62380830,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=531,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60971406,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=534,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59625906,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=537,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58275310,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=541,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56871486,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=544,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55525986,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=547,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54175390,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=550,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52771566,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=553,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51426066,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=556,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50075470,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=560,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48666046,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=563,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47326146,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=566,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=46288181,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=569,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=46603557,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=572,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=46904457,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=575,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47205861,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=579,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47521237,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=582,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47822137,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=585,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48123541,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=588,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48438917,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=591,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48739817,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=594,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49041221,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=598,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49356597,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=601,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49657497,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=604,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49958901,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=607,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50274277,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=610,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50575177,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=613,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50876581,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=617,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51191957,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=620,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51492857,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=623,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51794261,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=626,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52109637,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=629,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52410537,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=632,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52711941,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=636,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53027317,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=639,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=4,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53328217,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=642,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53629621,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=646,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53944997,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=649,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54245897,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=652,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54547301,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=656,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54862677,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=659,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55163577,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=662,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55464981,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=665,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55780357,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=668,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56081257,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=671,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56382661,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=675,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56698037,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=678,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56998937,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=681,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57300341,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=684,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57615717,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=687,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57916617,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=690,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58218021,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=694,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58533397,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=697,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58834297,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=700,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59135701,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=703,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59451077,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=706,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59751977,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=709,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60053381,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=713,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60368757,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=716,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60669657,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=719,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60971061,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=722,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61286437,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=725,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61587337,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=728,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61888741,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=732,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62204117,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=735,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62505017,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=738,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62806421,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=741,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63121797,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=744,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63422697,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=747,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63724101,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=751,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64039477,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=754,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64340377,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=757,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64641781,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=760,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64957157,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=763,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65258057,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=766,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65559461,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=770,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65874837,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=773,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66175737,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=776,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66477141,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=779,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66792517,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=782,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67093417,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=785,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67394821,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=789,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67710197,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=792,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68011097,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=795,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68312501,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=798,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=5,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68627877,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=801,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68928777,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=805,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69230181,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=809,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69545557,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=812,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69846457,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=815,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70151957,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=818,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70467333,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=821,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70768233,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=824,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71069637,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=828,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71385013,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=831,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71685913,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=834,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71987317,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=837,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72302693,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=840,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72603593,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=843,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72904997,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=847,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73220373,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=850,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73521273,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=853,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73822677,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=856,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74138053,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=859,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74438953,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=862,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74740357,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=866,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75055733,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=869,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75356633,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=872,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75658037,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=875,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75973413,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=878,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76274313,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=881,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76575717,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=885,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76891093,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=888,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77191993,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=891,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77493397,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=894,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77808773,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=897,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78109673,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=900,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78411077,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=904,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78726453,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=907,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79027353,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=910,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79328757,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=913,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79644133,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=916,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79945033,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=919,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80246437,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=923,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80561813,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=926,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80862713,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=929,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81164117,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=932,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81479493,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=935,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81780393,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=938,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82081797,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=942,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82397173,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=945,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.075000047683716,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82698527,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=948,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83000138,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=951,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83315717,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=954,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83616617,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=957,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=6,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82630109,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=962,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82945485,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=965,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83246385,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=968,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83454381,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=971,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82044957,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=974,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80699457,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=977,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79348861,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=981,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77945037,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=984,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76599537,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=987,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75248941,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=990,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73845117,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=993,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72499617,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=996,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71149021,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1000,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69745197,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1003,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68399697,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1006,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67049101,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1009,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65639677,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1012,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64294177,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1015,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.025999784469604,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62949181,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1019,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61539757,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1022,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60194257,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1025,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58849261,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1028,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.025999784469604,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57439837,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1031,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56094337,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1034,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54743741,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1038,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53339917,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1041,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51994417,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1044,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50643821,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1047,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.027000188827515,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49239997,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1050,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.025999784469604,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47894497,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1053,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=46749328,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1057,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47064704,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1060,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47365604,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1063,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47667008,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1066,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47982384,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1069,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48283284,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1072,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48584688,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1076,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48900064,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1079,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49200964,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1082,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49502368,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1085,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49817744,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1088,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50118644,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1091,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50420048,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1095,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50735424,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1098,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51036324,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1101,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51337728,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1104,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51653104,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1107,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51954004,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1110,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52255408,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1114,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52570784,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1117,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=7,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52871684,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1120,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53173088,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1124,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53488464,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1127,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53789364,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1130,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54090768,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1134,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54406144,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1137,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54707044,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1140,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55008448,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1143,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55323824,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1146,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55624724,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1149,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55926128,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1153,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56241504,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1156,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56542404,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1159,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56843808,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1162,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57159184,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1165,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57460084,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1168,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57761488,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1172,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58076864,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1175,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58377764,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1178,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58679168,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1181,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58994544,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1184,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59295444,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1187,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59596848,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1191,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59912224,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1194,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60213124,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1197,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60514528,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1200,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60829904,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1203,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61130804,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1206,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61432208,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1210,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61747584,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1213,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62048484,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1216,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62349888,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1219,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62665264,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1222,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62966164,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1225,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63267568,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1229,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63582944,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1232,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63883844,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1235,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64185248,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1238,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64500624,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1241,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64801524,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1244,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65102928,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1248,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65418304,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1251,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65719204,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1254,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66020608,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1257,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66335984,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1260,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66636884,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1263,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66938288,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1267,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67253664,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1270,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67554564,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1273,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67855968,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1276,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=8,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68171344,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1279,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68472244,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1283,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68773648,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1287,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69089024,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1290,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69389924,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1293,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69691328,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1296,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70006704,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1299,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70307604,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1302,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70609008,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1306,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70924384,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1309,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71225284,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1312,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71526688,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1315,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71842064,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1318,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72142964,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1321,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72444368,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1325,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72759744,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1328,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73060644,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1331,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73362048,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1334,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73677424,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1337,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73978324,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1340,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74279728,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1344,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74595104,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1347,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74896004,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1350,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75197408,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1353,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75512784,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1356,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75813684,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1359,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76115088,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1363,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76430464,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1366,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.02299976348877,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76731364,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1369,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77032768,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1372,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77348144,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1375,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77649044,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1378,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77950448,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1382,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78265824,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1385,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78566724,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1388,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78868128,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1391,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79183504,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1394,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79484404,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1397,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79785808,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1401,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80101184,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1404,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80402084,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1407,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80703488,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1410,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81018864,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1413,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81319764,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1416,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81621168,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1420,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81936544,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1423,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82237444,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1426,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82538848,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1429,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82854224,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1432,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.075999975204468,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83155753,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1435,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=9,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83457157,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1440,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83772736,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1443,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84073636,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1446,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.027000188827515,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83079864,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1449,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83395240,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1452,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83696140,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1455,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83665212,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1459,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.027000188827515,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82255788,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1462,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80910288,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1465,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79559692,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1468,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78155868,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1471,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76810368,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1474,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75459772,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1478,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74055948,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1481,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72710448,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1484,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71359852,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1487,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.025999784469604,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69950428,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1490,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68610528,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1493,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67259932,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1497,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.028999805450439,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65850508,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1500,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64505008,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1503,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63160012,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1506,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61750588,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1509,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60405088,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1512,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59060092,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1516,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57650668,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1519,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56305168,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1522,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54954572,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1525,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53550748,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1528,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52205248,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1531,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50854652,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1535,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49450828,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1538,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48105328,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1541,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=46961564,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1544,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47276940,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1547,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47577840,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1550,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47879244,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1554,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48194620,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1557,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48495520,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1560,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48796924,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1563,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49112300,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1566,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49413200,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1569,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49714604,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1573,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50029980,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1576,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50330880,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1579,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50632284,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1582,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50947660,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1585,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51248560,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1588,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51549964,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1592,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51865340,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1595,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=10,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52166240,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1598,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52467644,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1602,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52783020,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1605,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53083920,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1608,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53385324,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1612,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53700700,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1615,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54001600,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1618,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54303004,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1621,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54618380,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1624,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54919280,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1627,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55220684,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1631,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55544252,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1634,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55845152,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1637,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56146556,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1640,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56461932,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1643,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56762832,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1646,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57064236,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1650,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57379612,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1653,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57680512,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1656,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57981916,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1659,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58297292,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1662,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58598192,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1665,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58899596,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1669,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59214972,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1672,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59515872,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1675,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59817276,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1678,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60132652,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1681,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60433552,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1684,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60734956,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1688,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61050332,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1691,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61351232,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1694,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61652636,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1697,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61968012,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1700,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62268912,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1703,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62570316,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1707,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62885692,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1710,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63186592,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1713,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63487996,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1716,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63803372,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1719,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64104272,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1722,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64405676,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1726,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64721052,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1729,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65021952,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1732,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65323356,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1735,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65638732,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1738,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65939632,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1741,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66241036,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1745,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66556412,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1748,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66857312,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1751,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67158716,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1754,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=11,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67474092,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1757,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67774992,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1761,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68076396,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1765,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68391772,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1768,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68692672,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1771,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68994076,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1774,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69309452,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1777,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69610352,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1780,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69911756,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1784,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70227132,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1787,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70528032,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1790,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70829436,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1793,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71144812,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1796,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71445712,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1799,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71747116,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1803,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72062492,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1806,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72363392,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1809,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72664796,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1812,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72980172,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1815,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73281072,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1818,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73582476,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1822,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73897852,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1825,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74198752,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1828,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74500156,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1831,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74815532,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1834,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75116432,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1837,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75417836,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1841,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75733212,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1844,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76034112,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1847,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76335516,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1850,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76650892,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1853,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76951792,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1856,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77253196,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1860,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77568572,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1863,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77869472,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1866,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78170876,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1869,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78486252,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1872,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78787152,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1875,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79088556,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1879,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79403932,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1882,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79704832,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1885,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80006236,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1888,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80321612,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1891,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80622512,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1894,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80923916,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1898,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81239292,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1901,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81540192,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1904,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81841596,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1907,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82156972,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1910,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82457872,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1913,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=12,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82759276,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1918,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83074652,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1921,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.078000068664551,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83375447,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1924,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83676956,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1927,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83992332,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1930,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84293232,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1933,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84594636,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1937,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83607900,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1940,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83908800,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1943,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84210204,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1946,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83569408,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1949,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82229508,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1952,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80878912,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1956,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79469488,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1959,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.025999784469604,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78123988,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1962,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76778992,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1965,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75369568,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1968,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74024068,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1971,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72673472,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1975,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.027000188827515,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71269648,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1978,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69924148,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1981,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68573552,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1984,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67169728,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1987,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65824228,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1990,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64473632,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1994,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63069808,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=1997,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61724308,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2000,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60373712,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2003,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58964288,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2006,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57624388,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2009,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56273792,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2013,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54864368,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2016,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53518868,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2019,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52173872,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2022,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50764448,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2025,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49418948,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2028,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48068352,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2032,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47261640,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2035,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47562540,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2038,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47863944,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2041,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48179320,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2044,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48480220,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2047,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48781624,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2051,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49097000,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2054,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49397900,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2057,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49699304,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2060,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50014680,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2063,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50315580,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2066,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50616984,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2070,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50932360,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2073,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=13,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51233260,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2076,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51534664,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2080,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51850040,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2083,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52150940,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2086,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52452344,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2090,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52767720,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2093,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53068620,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2096,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53370024,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2099,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53685400,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2102,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53986300,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2105,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54287704,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2109,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54603080,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2112,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54903980,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2115,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55205384,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2118,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55520760,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2121,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55821660,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2124,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56123064,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2128,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56438440,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2131,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56739340,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2134,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57040744,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2137,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57356120,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2140,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57657020,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2143,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57958424,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2147,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58273800,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2150,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58574700,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2153,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58876104,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2156,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59191480,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2159,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59492380,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2162,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59793784,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2166,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60109160,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2169,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60410060,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2172,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60711464,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2175,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61026840,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2178,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61327740,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2181,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61629144,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2185,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61944520,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2188,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62245420,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2191,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62546824,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2194,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515201,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62862200,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2197,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515202,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63163100,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2200,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63464504,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2204,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63779880,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2207,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64080780,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2210,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64382184,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2213,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64697560,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2216,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64998460,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2219,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65299864,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2223,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.03600001335144,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65615240,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2226,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65916140,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2229,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66217544,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2232,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=14,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66532920,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2235,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66833820,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2239,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67135224,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2243,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67450600,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2246,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67751500,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2249,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68052904,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2252,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68368280,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2255,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68669180,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2258,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68970584,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2262,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69285960,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2265,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69586860,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2268,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69888264,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2271,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70203640,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2274,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70504540,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2277,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70805944,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2281,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71121320,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2284,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71422220,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2287,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71723624,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2290,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72039000,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2293,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72339900,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2296,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72641304,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2300,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72956680,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2303,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73257580,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2306,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73558984,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2309,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73874360,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2312,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74175260,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2315,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74476664,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2319,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74792040,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2322,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75092940,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2325,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75394344,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2328,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75709720,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2331,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76010620,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2334,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76312024,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2338,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76627400,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2341,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76928300,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2344,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77229704,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2347,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77545080,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2350,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77845980,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2353,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78147384,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2357,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78462760,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2360,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78763660,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2363,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79065064,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2366,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79380440,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2369,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79681340,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2372,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79982744,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2376,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80298120,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2379,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80599020,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2382,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80900424,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2385,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81215800,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2388,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81516700,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2391,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=15,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81818104,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2396,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82133480,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2399,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82434380,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2402,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82735784,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2405,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83051160,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2408,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83352060,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2411,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83653464,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2415,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.08299994468689,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83969262,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2418,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84270369,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2421,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84571976,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2424,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84887352,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2427,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83879748,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2430,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84181152,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2434,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84496528,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2437,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84722388,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2440,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83377392,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2443,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81967968,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2446,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80622468,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2449,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79277472,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2453,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77868048,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2456,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76522548,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2459,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75171952,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2462,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.028999805450439,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73768128,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2465,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72422628,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2468,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71072032,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2472,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69668208,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2475,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.025999784469604,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68322708,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2478,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66972112,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2481,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65562688,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2484,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64222788,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2487,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.025999784469604,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62872192,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2491,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.027000188827515,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61462768,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2494,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60117268,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2497,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58772272,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2500,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57362848,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2503,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56017348,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2506,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54672352,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2510,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53262928,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2513,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51917428,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2516,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.028999805450439,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50566832,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2519,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.027000188827515,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49163008,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2522,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47817508,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2525,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47564196,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2529,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47879572,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2532,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48180472,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2535,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48481876,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2538,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48797252,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2541,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49098152,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2544,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49399556,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2548,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49714932,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2551,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=16,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50015832,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2554,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50317236,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2558,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50632612,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2561,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50933512,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2564,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51234916,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2568,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51550292,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2571,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51851192,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2574,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52152596,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2577,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52467972,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2580,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52768872,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2583,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53070276,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2587,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53385652,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2590,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53686552,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2593,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53987956,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2596,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54303332,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2599,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54604232,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2602,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54905636,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2606,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55221012,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2609,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55521912,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2612,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55823316,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2615,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56138692,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2618,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56439592,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2621,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56740996,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2625,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57056372,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2628,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57357272,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2631,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57658676,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2634,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57974052,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2637,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58274952,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2640,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58576356,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2644,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58891732,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2647,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59192632,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2650,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59494036,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2653,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59809412,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2656,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60110312,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2659,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60411716,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2663,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60727092,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2666,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61027992,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2669,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61329396,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2672,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61644772,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2675,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61945672,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2678,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62247076,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2682,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62562452,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2685,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62863352,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2688,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63164756,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2691,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63480132,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2694,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63781032,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2697,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64082436,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2701,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64397812,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2704,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64698712,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2707,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65000116,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2710,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=17,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65315492,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2713,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65616392,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2717,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65917796,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2721,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66233172,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2724,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66534072,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2727,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66835476,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2730,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67150852,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2733,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67451752,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2736,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67753156,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2740,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68068532,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2743,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68369432,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2746,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68670836,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2749,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68986212,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2752,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69287112,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2755,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69588516,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2759,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69903892,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2762,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70204792,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2765,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70506196,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2768,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70821572,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2771,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71122472,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2774,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71423876,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2778,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71739252,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2781,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72040152,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2784,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72341556,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2787,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72656932,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2790,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72957832,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2793,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73259236,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2797,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73574612,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2800,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73875512,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2803,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74176916,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2806,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74492292,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2809,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74793192,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2812,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75094596,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2816,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75409972,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2819,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75710872,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2822,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76012276,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2825,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76327652,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2828,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76628552,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2831,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76929956,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2835,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77245332,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2838,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77546232,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2841,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77847636,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2844,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78163012,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2847,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78463912,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2850,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78765316,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2854,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79080692,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2857,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79381592,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2860,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79682996,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2863,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79998372,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2866,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80299272,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2869,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=18,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80600676,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2874,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80916052,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2877,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81216952,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2880,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81518356,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2883,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81833732,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2886,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82134632,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2889,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82436036,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2893,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82751412,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2896,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83052312,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2899,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83353716,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2902,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83669092,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2905,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83969992,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2908,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.082000017166138,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84271240,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2912,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84586772,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2915,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84887672,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2918,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85189076,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2921,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85233820,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2924,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84487768,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2927,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84789172,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2931,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85104548,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2934,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84209708,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2937,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82859112,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2940,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81449688,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2943,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80109788,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2946,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78759192,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2950,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77349768,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2953,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76004268,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2956,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74659272,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2959,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.027000188827515,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73249848,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2962,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71904348,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2965,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70553752,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2969,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69149928,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2972,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67804428,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2975,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66453832,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2978,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65050008,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2981,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63704508,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2984,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62353912,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2988,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60950088,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2991,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59604588,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2994,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58253992,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=2997,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56844568,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3000,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55499068,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3003,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54154072,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3007,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52744648,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3010,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51399148,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3013,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50054152,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3016,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48644728,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3019,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47649168,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3022,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47950572,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3026,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48265948,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3029,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=19,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48566848,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3032,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48868252,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3036,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49183628,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3039,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49484528,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3042,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49785932,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3046,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50101308,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3049,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50402208,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3052,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50703612,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3055,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51018988,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3058,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51319888,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3061,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51621292,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3065,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51936668,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3068,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52237568,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3071,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52538972,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3074,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52854348,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3077,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53155248,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3080,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53456652,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3084,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53772028,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3087,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54072928,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3090,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54374332,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3093,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54689708,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3096,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54990608,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3099,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55292012,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3103,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55607388,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3106,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55908288,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3109,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56209692,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3112,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56525068,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3115,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56825968,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3118,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57127372,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3122,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57442748,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3125,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57743648,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3128,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58045052,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3131,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58360428,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3134,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58661328,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3137,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58962732,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3141,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59278108,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3144,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59579008,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3147,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59880412,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3150,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60195788,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3153,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60496688,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3156,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60798092,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3160,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61113468,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3163,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61414368,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3166,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61715772,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3169,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62031148,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3172,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515205,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62332048,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3353",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3175,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515207,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62633452,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3112",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3179,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515212,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62948828,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3524",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3182,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515213,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63250008,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3185,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63551692,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3188,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=20,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63867348,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3191,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64168304,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3195,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64469764,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3199,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64785196,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3202,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65086152,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3205,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65387612,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3208,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65703044,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3211,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66004000,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3214,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66305460,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3218,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66620892,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3221,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66921848,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3224,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67223308,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3227,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67538740,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3230,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67839696,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3233,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68141156,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3237,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68456588,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3240,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68757544,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3243,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69059004,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3246,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69374436,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3249,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69675392,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3252,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69976852,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3256,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70292284,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3259,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70593240,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3262,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70911084,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3265,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71226516,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3268,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71527472,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3271,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71828932,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3275,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72144364,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3278,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72445320,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3281,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72746780,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3284,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73062212,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3287,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73363168,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3290,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73664628,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3294,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73980060,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3297,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74281016,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3300,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74582476,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3303,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74897908,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3306,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75198864,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3309,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75500324,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3313,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75815756,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3316,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76116712,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3319,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76418172,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3322,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76733604,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3325,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77034560,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3328,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77336020,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3332,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77651452,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3335,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77952408,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3338,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78253868,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3341,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78569300,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3344,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78870256,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3347,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=21,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79171716,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3352,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79487148,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3355,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79788104,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3358,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80089564,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3361,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80404996,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3364,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80705952,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3367,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81007412,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3371,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81322844,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3374,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81623800,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3377,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81925260,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3380,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82240692,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3383,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82541648,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3386,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82843108,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3390,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83158540,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3393,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83459496,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3396,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83760956,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3399,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84076388,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3402,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84377344,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3405,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.08299994468689,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84678471,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3409,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84994033,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3412,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85294786,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3415,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85596043,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3418,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85911475,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3421,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84890735,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3424,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85192195,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3428,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85507627,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3431,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84771911,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3434,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83426971,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3437,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82012003,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3440,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80666559,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3443,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79327219,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3447,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77912251,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3450,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76566807,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3453,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75221867,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3456,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73812499,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3459,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72467055,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3462,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71122115,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3466,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69707147,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3469,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68361703,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3472,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67022363,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3475,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65612995,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3478,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64267551,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3481,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62917011,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3485,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61507643,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3488,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60162199,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3491,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58817259,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3494,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57407891,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3497,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56062447,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3500,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54711907,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3504,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53308139,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3507,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=22,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51962695,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3510,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.027000188827515,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50612155,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3514,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49202787,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3517,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=47857343,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3520,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48111607,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3524,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48427039,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3527,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48727995,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3530,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49029455,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3533,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49344887,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3536,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49645843,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3539,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49947303,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3543,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50262735,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3546,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50563691,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3549,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50865151,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3552,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51180583,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3555,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51481539,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3558,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51782999,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3562,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52098431,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3565,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52399387,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3568,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52700847,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3571,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53016279,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3574,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53317235,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3577,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53618695,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3581,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53934127,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3584,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54235083,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3587,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54536543,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3590,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54851975,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3593,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55152931,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3596,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55454391,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3600,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55769823,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3603,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56070779,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3606,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56372239,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3609,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56687671,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3612,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56988627,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3615,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57290087,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3619,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57605519,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3622,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57906475,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3625,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58207935,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3628,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58523367,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3631,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58824323,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3634,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59125783,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3638,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59441215,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3641,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59742171,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3644,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60043631,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3647,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60359063,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3650,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60660019,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3653,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60961479,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3657,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61276911,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3660,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61577867,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3663,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61879327,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3666,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=23,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62194759,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3669,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62495715,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3673,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62797175,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3677,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63112607,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3680,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63413563,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3683,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63715023,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3686,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64030455,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3689,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64331411,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3692,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64632871,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3696,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64948303,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3699,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65249259,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3702,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65550719,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3705,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65866151,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3708,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66167107,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3711,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66468567,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3715,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66783999,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3718,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67084955,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3721,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67386415,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3724,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67701847,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3727,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68002803,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3730,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68304263,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3734,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68619695,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3737,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68920651,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3740,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69222111,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3743,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69537543,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3746,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69838499,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3749,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70139959,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3753,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70455391,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3756,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70756347,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3759,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71057807,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3762,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71373239,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3765,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71674195,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3768,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71975655,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3772,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72291087,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3775,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72592043,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3778,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72893503,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3781,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73208935,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3784,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73509891,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3787,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73811351,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3791,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74126783,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3794,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74427739,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3797,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74729199,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3800,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75044631,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3803,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75345587,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3806,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75647047,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3810,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75962479,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3813,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76263435,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3816,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76564895,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3819,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76880327,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3822,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77181283,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3825,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=24,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77482743,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3830,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77798175,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3833,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78099131,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3836,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78400591,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3839,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78716023,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3842,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79016979,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3845,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79318439,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3849,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79633871,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3852,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79934827,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3855,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80236287,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3858,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80551719,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3861,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80852675,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3864,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81154135,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3868,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81469567,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3871,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81770523,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3874,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82071983,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3877,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82387415,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3880,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82688371,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3883,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82989831,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3887,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83305263,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3890,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83606219,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3893,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83907679,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3896,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84223111,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3899,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84524067,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3902,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84825527,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3906,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.085000038146973,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85140626,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3909,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85441712,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3912,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85743375,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3915,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=86058807,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3918,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=86359763,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3921,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85330847,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3925,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85646279,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3928,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85947235,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3931,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.023999929428101,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85255647,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3934,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83846279,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3937,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82500835,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3940,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81150295,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3944,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79746527,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3947,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78401083,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3950,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77050543,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3953,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75641175,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3956,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74295731,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3959,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.027000188827515,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72950791,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3963,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71541423,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3966,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70195979,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3969,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.024999856948853,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68845439,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3972,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67441671,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3975,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66096227,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3978,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64745687,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3982,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.027999877929688,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63336319,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3985,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=25,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61990875,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3988,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60645935,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3992,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59236567,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3995,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.025000095367432,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57891123,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=3998,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56540583,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4002,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55136815,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4005,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53791371,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4008,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52440831,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4011,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.028000116348267,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51031463,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4014,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.026000022888184,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49686019,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4017,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.026999950408936,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48341079,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4021,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48291279,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4024,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48592235,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4027,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=48893695,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4030,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49209127,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4033,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49510083,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4036,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=49811543,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4040,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50126975,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4043,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50427931,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4046,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=50729391,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4049,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51044823,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4052,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51345779,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4055,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51647239,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4059,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=51962671,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4062,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52263627,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4065,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52565087,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4068,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=52880519,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4071,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53181475,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4074,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53482935,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4078,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=53798367,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4081,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54099323,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4084,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54400783,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4087,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=54716215,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4090,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55017171,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4093,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55318631,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4097,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55634063,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4100,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=55935019,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4103,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56236479,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4106,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56551911,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4109,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=56852867,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4112,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57154327,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4116,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57469759,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4119,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=57770715,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4122,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58072175,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4125,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58387607,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4128,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58688563,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4131,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=58990023,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4135,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59305455,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4138,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59606411,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4141,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=59907871,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4144,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=26,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60223303,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4147,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60524259,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4151,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=60825719,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4155,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61141151,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4158,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61442107,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4161,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=61743567,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4164,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62058999,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4167,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62359955,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4170,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62661415,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4174,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=62976847,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4177,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63277803,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4180,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63579263,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4183,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=63894695,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4186,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64195651,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4189,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64497111,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4193,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=64812543,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4196,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65113499,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4199,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65414959,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4202,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=65730391,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4205,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66031347,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4208,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66332807,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4212,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66648239,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4215,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=66949195,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4218,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67250655,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4221,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67566087,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4224,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=67867043,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4227,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68168503,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4231,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68483935,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4234,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=68784891,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4237,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69086351,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4240,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69401783,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4243,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=69702739,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4246,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70004199,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4250,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70319631,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4253,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70620587,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4256,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=70922047,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4259,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71237479,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4262,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71538435,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4265,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=71839895,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4269,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72155327,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4272,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72456283,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4275,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=72757743,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4278,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73073175,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4281,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73374131,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4284,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019000053405762,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73675591,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4288,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=73991023,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4291,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.018999814987183,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74291979,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4294,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74593439,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4297,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.02400016784668,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=74908871,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4300,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75209827,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4303,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=27,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75511287,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4308,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=75826719,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4311,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76127675,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4314,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76429135,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4317,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=76744567,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4320,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77045523,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4323,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77346983,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4327,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77662415,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4330,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=77963371,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4333,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78264831,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4336,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78580263,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4339,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=78881219,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4342,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79182679,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4346,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79498111,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4349,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=79799067,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4352,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80100527,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4355,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.021000146865845,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80415959,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4358,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=80716915,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4361,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81018375,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4365,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81333807,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4368,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81634763,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4371,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=81936223,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4374,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82251655,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4377,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82552611,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4380,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=82854071,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4384,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.021999835968018,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83169503,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4387,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83470459,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4390,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020000219345093,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=83771919,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4393,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.020999908447266,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84087351,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4396,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.022000074386597,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84388307,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4399,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=84689767,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="186",
+ ["attribute_list"]="82",
+ ["dir"]="5",
+ ["disc"]="300",
+ ["glue"]="625",
+ ["glue_spec"]="390",
+ ["glyph"]="3113",
+ ["hlist"]="116",
+ ["if_stack"]="4",
+ ["kern"]="14",
+ ["local_par"]="16",
+ ["pdf_literal"]="33",
+ ["penalty"]="46",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4403,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.023000001907349,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85005199,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="336",
+ ["glue"]="699",
+ ["glue_spec"]="426",
+ ["glyph"]="3525",
+ ["hlist"]="125",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="53",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4406,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515216,
+ ["elapsed_time"]=0.019999980926514,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85306155,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="201",
+ ["attribute_list"]="87",
+ ["dir"]="5",
+ ["disc"]="326",
+ ["glue"]="664",
+ ["glue_spec"]="411",
+ ["glyph"]="3354",
+ ["hlist"]="122",
+ ["if_stack"]="4",
+ ["kern"]="16",
+ ["local_par"]="17",
+ ["pdf_literal"]="33",
+ ["penalty"]="50",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4409,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+ {
+ ["cs_count"]=38015,
+ ["dyn_used"]=515488,
+ ["elapsed_time"]=0.079999923706055,
+ ["luabytecode_bytes"]=9200,
+ ["luastate_bytes"]=85493698,
+ ["max_buf_stack"]=251,
+ ["node_memory"]={
+ ["attribute"]="159",
+ ["attribute_list"]="73",
+ ["dir"]="5",
+ ["disc"]="170",
+ ["glue"]="410",
+ ["glue_spec"]="260",
+ ["glyph"]="1773",
+ ["hlist"]="92",
+ ["if_stack"]="7",
+ ["kern"]="12",
+ ["local_par"]="14",
+ ["pdf_literal"]="33",
+ ["penalty"]="31",
+ ["rule"]="4",
+ ["temp"]="5",
+ ["vlist"]="31",
+ },
+ ["obj_ptr"]=4412,
+ ["pdf_mem_ptr"]=1,
+ ["pdf_mem_size"]=10000,
+ ["pdf_os_cntr"]=28,
+ ["pool_ptr"]=647891,
+ ["str_ptr"]=2136900,
+ },
+} \ No newline at end of file
diff --git a/doc/context/sources/general/manuals/mk/mk-timing-3.tex b/doc/context/sources/general/manuals/mk/mk-timing-3.tex
new file mode 100644
index 000000000..14e7bf95a
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-timing-3.tex
@@ -0,0 +1,19 @@
+\def\tufte{%
+ We thrive in information||thick worlds because of our
+ marvelous and everyday capacity to select, edit,
+ single out, structure, highlight, group, pair, merge,
+ harmonize, synthesize, focus, organize, condense,
+ reduce, boil down, choose, categorize, catalog, classify,
+ list, abstract, scan, look into, idealize, isolate,
+ discriminate, distinguish, screen, pigeonhole, pick over,
+ sort, integrate, blend, inspect, filter, lump, skip,
+ smooth, chunk, average, approximate, cluster, aggregate,
+ outline, summarize, itemize, review, dip into,
+ flip through, browse, glance into, leaf through, skim,
+ refine, enumerate, glean, synopsize, winnow the wheat
+ from the chaff and separate the sheep from the goats.%
+}
+
+\usemodule[timing] \starttext \dorecurse{2000}{
+ \tufte \par \tufte \par \tufte \par
+} \stoptext
diff --git a/doc/context/sources/general/manuals/mk/mk-titlepage.tex b/doc/context/sources/general/manuals/mk/mk-titlepage.tex
new file mode 100644
index 000000000..78f8154f1
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-titlepage.tex
@@ -0,0 +1,64 @@
+% language=uk
+
+\startcomponent mk-titlepage
+
+\environment mk-environment
+
+\setupbackgrounds[page][background=page]
+
+\startstandardmakeup
+
+\definefont[MyFont][Normal*default]
+
+\setlayerframed
+ [page]
+ [preset=lefttop]
+ [frame=off,
+ width=\paperwidth,
+ height=\paperheight,
+ backgroundoffset=5mm,
+ background=color,
+ backgroundcolor=mkcolor]
+ {}
+
+\setlayerframed
+ [page]
+ [preset=lefttop,offset=7.5mm]
+ [offset=overlay,frame=off,foregroundcolor=white]
+ {\scale[height=.15\paperwidth]{\MyFont MKII}}
+
+\setlayerframed
+ [page]
+ [preset=rightbottom,offset=7.5mm]
+ [offset=overlay,frame=off,foregroundcolor=white]
+ {\scale[height=.15\paperwidth]{\MyFont MKIV}}
+
+\setlayerframed
+ [page]
+ [preset=righttop,offset=7.5mm,rotation=90]
+ [offset=overlay,frame=off,foregroundcolor=white]
+ {\scale[height=.10\paperwidth]{\MyFont CONTEXT}}
+
+\setlayerframed
+ [page]
+ [preset=leftbottom,offset=7.5mm,rotation=90]
+ [offset=overlay,frame=off,foregroundcolor=white]
+ {\scale[height=.10\paperwidth]{\MyFont CONTEXT}}
+
+\setlayerframed
+ [page]
+ [preset=rightbottom,offset=7.5mm,y=4cm]
+ [offset=overlay,frame=off]
+ {\scale[height=.10\paperwidth]{\MyFont
+ \framed
+ [align=normal,offset=0pt,frame=off,foregroundcolor=white]
+ {The history of lua\TeX\par
+ 2006--2009 / v 0.50}}}
+
+% \tightlayer[page]
+
+\stopstandardmakeup
+
+\setupbackgrounds[page][background=]
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/mk/mk-tokenspeak.tex b/doc/context/sources/general/manuals/mk/mk-tokenspeak.tex
new file mode 100644
index 000000000..590dbba43
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-tokenspeak.tex
@@ -0,0 +1,266 @@
+% language=uk
+
+\startcomponent mk-tokenspeak
+
+\environment mk-environment
+
+\chapter {Token speak}
+
+\subject{tokenization}
+
+Most \TEX\ users only deal with (keyed in) characters and (produced) output. Some
+will play with boxes, skips and kerns or maybe even leaders (repeated sequences
+of the former). Others will be grateful that macro package writers take care of
+such things.
+
+Macro writers on the other hand deal properties of characters, like catcodes and
+a truckload of other codes, with lists made out of boxes, skips, kerns and
+penalties but even they cannot look much deeper into \TEX's internals. Their
+deeper understanding comes from reading the \TEX book or even looking at the
+source code.
+
+When someone enters the magic world of \TEX\ and starts asking around on a bit,
+he or she will at some point get confronted with the concept of \quote {tokens}.
+A token is what ends up in \TEX\ after characters have entered its machinery.
+Sometimes it even seems that one is only considered a qualified macro writer if
+one can talk the right token||speak. So what are those magic tokens and how can
+\LUATEX\ shed light on this.
+
+In a moment we will show examples of how \LUATEX\ turns characters into tokens,
+but when looking at those sequences, you need to keep a few things in mind:
+
+\startitemize[packed]
+\startitem
+ A sequence of characters that starts with an escape symbol (normally this is
+ the backslash) is looked up in the hash table (which relates those names to
+ meanings) and replaced by its reference. Such a reference is much faster than
+ looking up the sequence each time.
+\stopitem
+\startitem
+ Characters can have special meanings, for instance a dollar is often used to
+ enter and exit math mode, and a percent symbol starts a comment and hides
+ everything following it on the same line. These meanings are determined by
+ the character's catcode.
+\stopitem
+\startitem
+ All the characters that will end up actually typeset have catcode \quote
+ {letter} or \quote {other} assigned. A sequence of items with catcode
+ \quote{letter} is considered a word and can potentially become hyphenated.
+\stopitem
+\stopitemize
+
+\subject{examples}
+
+We will now provide a few examples of how \TEX\ sees your input.
+
+\starttyping
+Hi there!
+\stoptyping
+
+\starttokens[demo]Hi there!\stoptokens \setups{ShowCollect}
+
+Here we see three kind ot tokens. At this stage a space is still recognizable as
+such but later this will become a skip. In our current setup, the exclamation
+mark is not a letter.
+
+\starttyping
+Hans \& Taco use Lua\TeX \char 33\relax
+\stoptyping
+
+\starttokens[demo]Hans \& Taco use Lua\TeX \char 33\relax\stoptokens \setups{ShowCollect}
+
+Here we see a few new tokens, a \quote {char\_given} and a \quote {call}. The
+first represents a \type {\chardef} i.e.\ a reference to a character slot in a
+font, and the second one a macro that will expand to the \TEX\ logo. Watch how
+the space after a control sequence is eaten up. The exclamation mark is a direct
+reference to character slot~33.
+
+\starttyping
+\noindent {\bf Hans} \par \hbox{Taco} \endgraf
+\stoptyping
+
+\starttokens[demo]\noindent {\bf Hans} \par \hbox{Taco} \endgraf\stoptokens \setups{ShowCollect}
+
+As you can see, some primitives and macro's that are bound to them (like \type
+{\endgraf}) have an internal representation on top of their name.
+
+\starttyping
+before \dimen2=10pt after \the\dimen2
+\stoptyping
+
+\starttokens[demo]before \dimen2=10pt after \the\dimen2\stoptokens \setups{ShowCollect}
+
+As you can see, registers are not explicitly named, one needs the associated
+register code to determine it's character (a dimension in our case).
+
+\starttyping
+before \inframed[width=3cm]{whatever} after
+\stoptyping
+
+\starttokens[demo]before \inframed[width=3cm]{whatever} after\stoptokens \setups{ShowCollect}
+
+As you can see, even when control sequences are collapsed into a reference, we
+still end up with many tokens, and because each token has three properties (cmd,
+chr and id) in practice we end up with more memory used after tokenization.
+
+\starttyping
+compound|-|word
+\stoptyping
+
+\starttokens[demo]compound|-|word\stoptokens \setups{ShowCollect}
+
+This example uses an active character to handle compound words (a \CONTEXT\
+feature).
+
+\starttyping
+hm, \directlua 0 { tex.sprint("Hello World") }
+\stoptyping
+
+\starttokens[demo]hm, \directlua 0 { tex.sprint("Hello World!") }\stoptokens \setups{ShowCollect}
+
+The previous example shows what happens when we include a bit of \LUA\ code
+\unknown\ it is just seen as regular input, but when the string is passed to
+\LUA, only the chr property is passed, so we no longer can distinguish between
+letters and other characters.
+
+A macro definition converts to tokens as follows.
+
+\starttokens[demo]\def\Test#1#2{[#2][#1]} \Test{A}{B}\stoptokens \setups{ShowCollect}
+
+As we already mentioned, a token has three properties. More details can be found
+in the reference manual so we will not go into much detail here.
+
+{\bf The original interceptor for tokens but that one has been replaced by a more
+powerful scanning mechanism. The following text is no longer applicable but kept
+as historic reference. The new token scanner is discussed in later articles.}
+
+% keep text formatted as it is now:
+
+\starttyping[color=]
+
+A most simple callback is:
+
+\starttyping
+callback.register('token_filter', token.get_next)
+\stoptyping
+
+In principle you can call \type {token.get_next} anytime you want
+to intercept a token. In that case you can feed back tokens into
+\TEX\ by using a trick like:
+
+\starttyping
+function tex.printlist(data)
+ callback.register('token_filter', function ()
+ callback.register('token_filter', nil)
+ return data
+ end)
+end
+\stoptyping
+
+Another example of usage is:
+
+\starttyping
+callback.register('token_filter', function ()
+ local t = token.get_next
+ local cmd, chr, id = t[1], t[2], t[3]
+ -- do something with cmd, chr, id
+ return { cmd, chr, id }
+end)
+\stoptyping
+
+There is a whole repertoire of related functions, one is \type
+{token.create}, which can be used as:
+
+\starttyping
+tex.printlist{
+ token.create("hbox"),
+ token.create(utf.byte("{"), 1),
+ token.create(utf.byte("?"), 12),
+ token.create(utf.byte("}"), 2),
+}
+\stoptyping
+
+This results in: \ctxlua {
+ tex.printlist{
+ token.create("hbox"),
+ token.create(utf.byte("{"), 1),
+ token.create(utf.byte("?"), 12),
+ token.create(utf.byte("}"), 2),
+ }
+}
+
+While playing with this we made a few auxiliary functions that
+permit things like:
+
+\starttyping
+tex.printlist ( table.unnest ( {
+ tokens.hbox,
+ tokens.bgroup,
+ tokens.letters("12345"),
+ tokens.egroup,
+} ) )
+\stoptyping
+
+Unnesting is needed because the result of the \type {letters} call
+is a table, and the \type {printlist} function wants a flattened
+table.
+
+The result looks like: \ctxlua {
+ local t = table.unnest {
+ tokens.hbox,
+ tokens.bgroup,
+ tokens.letters("12345"),
+ tokens.egroup,
+ }
+ tex.printlist (t)
+ tokens.collectors.show(t)
+}
+
+In practice, manipulating tokens or constructing lists of tokens
+this way is rather cumbersome, but at least we now have some
+kind of access, if only for illustrative purposes.
+
+\starttyping
+\hbox{12345\hbox{54321}}
+\stoptyping
+
+can also be done by saying:
+
+\starttyping
+tex.sprint("\\hbox{12345\\hbox{54321}}")
+\stoptyping
+
+or under \CONTEXT's basic catcode regime:
+
+\starttyping
+tex.sprint(tex.ctxcatcodes, "\\hbox{12345\\hbox{54321}}")
+\stoptyping
+
+If you like it the hard way:
+
+\starttyping
+tex.printlist ( table.unnest ( {
+ tokens.hbox,
+ tokens.bgroup,
+ tokens.letters("12345"),
+ tokens.hbox,
+ tokens.bgroup,
+ tokens.letters(string.reverse("12345")),
+ tokens.egroup,
+ tokens.egroup
+} ) )
+\stoptyping
+
+This method may attract those who dislike the traditional \TEX\
+syntax for doing the same thing. Okay, a careful reader will
+notice that reversing the string in \TEX\ takes a bit more
+trickery, so \unknown
+
+\stoptyping
+
+% end of verbose text
+
+{\bf The \type {tokens} etc.\ examples shows here make no sense anyway as we have
+a more extensive interface to the macro language: \type {context}.}
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/mk/mk-tracking.tex b/doc/context/sources/general/manuals/mk/mk-tracking.tex
new file mode 100644
index 000000000..e24653e3b
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-tracking.tex
@@ -0,0 +1,341 @@
+% language=uk
+
+% \enabletrackers[otf.loading]
+% \enabletrackers[otf.lookups]
+
+\startcomponent mk-track
+
+\environment mk-environment
+
+\startbuffer[latin-default-features]
+\definefontfeature
+ [latin-default]
+ [mode=node,language=dflt,script=latn,
+ liga=yes,calt=yes,clig=yes,
+ kern=yes]
+\stopbuffer
+
+\startbuffer[arabtype-default-features]
+\definefontfeature
+ [arabtype-default]
+ [mode=node,language=dflt,script=arab,
+ init=yes,medi=yes,fina=yes,isol=yes,
+ ccmp=yes,locl=yes,calt=yes,
+ liga=yes,clig=yes,dlig=yes,rlig=yes,
+ mark=yes,mkmk=yes,kern=yes,curs=yes]
+\stopbuffer
+
+\startbuffer[zapfino-default-features]
+\definefontfeature
+ [zapfino-default]
+ [mode=node,language=dflt,script=latn,
+ calt=yes,clig=yes,rlig=yes,tlig=yes,
+ kern=yes,curs=yes]
+\stopbuffer
+
+\getbuffer[latin-default-features]
+\getbuffer[arabtype-default-features]
+\getbuffer[zapfino-default-features]
+
+\chapter{Tracking}
+
+We entered 2009 with a partial reimplementation of the \OPENTYPE\
+feature handler. One of the reasons was an upgrade of the
+\FONTFORGE\ libraries that \LUATEX\ uses.
+
+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.
+
+Because there is so much possible, fonts might contain bugs and/or
+be made to work with certain renderers. These may evolve over time
+which may have the side effect that suddenly fonts behave
+differently.
+
+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
+optimization 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 \CONTEXT\ users ask
+for it.
+
+The data provided by the \FONTFORGE\ library has organized lookups
+(which relate to features) in a certain way. A first
+implementation of this code was organized featurewise: information
+related to features was collected and processing boiled down to a
+run over the features. The current implementation honours the order
+in the main feature table. Since we can reorder this table as we
+want, we can eventually support several models of processing. We
+kept the static as well as dynamic feature processing, because it
+had proved to be rather useful. The formerly three loop variants
+have been discarded but might reappear at some time.
+
+One reason for this change is that the interactive version of
+\FONTFORGE\ now provides a more detailed overview of the way
+lookups are supposed to be handled. When you consult the
+information of a font and in particular a glyph in a font, you now
+get quite some information about what features can be applied and
+in what order this takes place.
+
+In \CONTEXT\ \MKIV\ we deal with this as follows. Keep in mind
+that we start with characters but stepwise these can become more
+abstract representation, named glyphs. For instance a letter~a can
+be represented by a shape (glyph) that is similar to an uppercase~A.
+
+\startitemize
+
+\item We loop over all lookups. Normally there are only a few
+lookups but fonts that deal with scripts that resemble
+handwriting, like arabic of Zapfino, might have hundreds of them.
+Each lookup has a detailed specification of what language and/or
+scripts it applies to.
+
+\item For each lookup we do a run over the list of glyphs. So, if
+we have 50 lookups, and a paragraph has 500 glyphs, we do some
+25000 loops. Keep in mind that for arab we start with a sequence
+of characters and vowels, and during a run, these might be
+replaced by for instance ligatures and combined vowels, so the 500
+stepwise becomes less.
+
+\item We only process the features that are enabled. Normally the
+lookups are organized in such a way that features take place in a
+similar way: (de)composition, replacement of initial, medial,
+final and isolated forms, specific replacements by one or more
+variant, composition of ligatures, mark positioning, cursive
+corrections and kerning. The font itself does not contain
+information about what features are to be enabled by default. Some
+applications have built in presets, others might extend their
+repertoire over time.
+
+\item A lookup can be a contextual lookup, which means that
+treatment takes place on a match of a sequence of characters
+(glyphs), either of not preceded or followed by specific other
+characters (glyphs). We we loop over all contexts till we have a
+match. Some fonts have lots of contextual lookups, which in turn
+might increase the number of loops over the list of characters
+(glyphs). If we have a match, we process the associated list of
+sublookups. Technically it is possible to replace (say) five
+characters by first a ligature (that replaces the first two by
+one), then a multiple substitution (resulting in an extra three
+glyphs replacing one) and then discarding the other rest (being
+two characters). Because by that time characters (say, unicode
+points) might have been replaced by glyphs (an index in the font)
+a contextual lookup can involve quite some match points.
+
+\stopitemize
+
+In \CONTEXT\ we do this for each font that is used in a list, so
+in practice we have quite some nested loops. Each font can have
+its own set of features enables of features might be applied
+dynamically, independent of font related settings. So, around the
+mentioned loops there is another one: a loop over the fonts used
+in a list (paragraph).
+
+We process the whole list and then consult the glyph nodes. An
+alternative approach is to collect strings of characters using the
+same font including spaces (because some lookups involve spaces).
+However, we then need to reconstruct the list which is no fun.
+Also, we need to carry quite some information, like attributes, so
+eventually we don't gain much (if we gain something at all).
+
+Another consideration has been to operate on sublists of font
+usage (using a subhead and subtail) but again this would
+complicate matters as we then neext to keep track of a changing
+subhead and subtail. On the other hand, this might save some
+runtime. The number of changes in the code needed to do this is
+not that large but it only makes sense when we have many fonts
+in a list and don't change fonts to frequently.
+
+This whole treatment is rather extensively optimized and so the
+process is reasonable fast (you really don't want to know how much
+time was spent on figuring out fast methods, testing and
+reimplementing this). While I was implementing the \LUA\ code,
+Taco made sure that access to the information in nodes was as fast
+as possible and in our usual chat sessions we compared the output
+with the one produced by the \FONTFORGE\ preview.
+
+It was for this reason that more and more debugging code was added
+but even that made tracking of what really happened cumbersome.
+Therefore a more visual method was written, which will be shown
+laster on.
+
+You can enable tracing using the designated commands:
+
+\starttyping
+\enabletracker[otf.ligatures,otf.singles]
+\stoptyping
+
+and disable them for instance with:
+
+\starttyping
+\disabletracker[otf.*]
+\stoptyping
+
+Or you can pass directives to the command line:
+
+\starttyping
+context --track=otf.ligatures myfile.tex
+\stoptyping
+
+With regards to \OPENTYPE\ handling we have the following tracker
+keys available:
+
+\starttabulate
+\NC \type{otf.actions} \NC show all replacements and positioning \NC \NR
+\NC \type{otf.alternatives} \NC show what glyph is replaced by what alternative \NC \NR
+\NC \type{otf.analyzing} \NC color glyphs according to script specific analysis \NC \NR
+\NC \type{otf.applied} \NC applied features per font instance \NC \NR
+\NC \type{otf.bugs} \NC show diagnostic information \NC \NR
+\NC \type{otf.contexts} \NC show what contextual lookups take place \NC \NR
+\NC \type{otf.cursive} \NC show cursive anchoring when applied \NC \NR
+\NC \type{otf.details} \NC show more details about lookup handling \NC \NR
+\NC \type{otf.dynamics} \NC show dynamic feature definitions \NC \NR
+\NC \type{otf.features} \NC show what features are a applied \NC \NR
+\NC \type{otf.kerns} \NC show kerning between glyphs when applied \NC \NR
+\NC \type{otf.ligatures} \NC show what glyphs are replaced by one other \NC \NR
+\NC \type{otf.loading} \NC show more information when loading (caching) a font \NC \NR
+\NC \type{otf.lookups} \NC keep track of what lookups are consulted \NC \NR
+\NC \type{otf.marks} \NC show mark anchoring when applied \NC \NR
+\NC \type{otf.multiples} \NC show what glyph is replaced by multiple others \NC \NR
+%NC \type{otf.normal_chain} \NC \NC \NR
+\NC \type{otf.positions} \NC show what glyphs are positioned (combines other trackers) \NC \NR
+\NC \type{otf.preparing} \NC show what information is collected for later usage in lookups \NC \NR
+\NC \type{otf.replacements} \NC show what glyphs are replaced (combines other trackers) \NC \NR
+\NC \type{otf.sequences} \NC \NC \NR
+\NC \type{otf.singles} \NC show what glyph is replaced by one other \NC \NR
+%NC \type{otf.steps} \NC \NC \NR
+%NC \type{otf.verbose_chain} \NC \NC \NR
+\stoptabulate
+
+Some other trackers might also come in handy:
+
+\starttabulate
+%NC \type{fonts.collecting} \NC \NC \NR
+\NC \type{fonts.combining} \NC show what extra characters are added when forcing combined shapes \NC \NR
+\NC \type{fonts.defining} \NC show what fonts are defined \NC \NR
+\NC \type{fonts.loading} \NC show more details when a font is loaded (and cached) for the first time \NC \NR
+%NC \type{fonts.names} \NC \NC \NR
+%NC \type{fonts.scaling} \NC \NC \NR
+\stoptabulate
+
+We now show another way to track what happens with your text.
+Because this is rather verbose, you should only apply it to words.
+The second argument can be \type {-1} (right to left), \type {0}
+(default) or \type {1} (left to right). The third argument can
+be invisible in the code because the font used for verbatim might
+lack the shapes. A font has a different ordering than \UNICODE\
+because after all one character can have multiple
+representations, one shape can be used for multiple characters,
+or shapes might not have a \UNICODE\ point at all. In \MKIV\ we
+push all shapes that have no direct relationship with \UNICODE\ to
+the private area so that \TEX\ still sees them (hence the large
+numbers in the following examples).
+
+The next example uses Latin Modern. Here we apply the following
+features:
+
+\typebuffer[latin-default-features]
+
+\startbuffer
+\showotfcomposition
+ {name:lmroman12regular*latin-default at 24pt}
+ {0}
+ {flinke fietser}
+\stopbuffer
+
+\typebuffer \start \veryraggedright \getbuffer \stop
+
+The next example uses Arabtype. Here we apply the following features:
+
+\typebuffer[arabtype-default-features]
+
+\startbuffer
+\showotfcomposition
+ {arabtype*arabtype-default at 48pt}
+ {-1}
+ {الضَّرَّ}
+\stopbuffer
+
+\typebuffer \start \veryraggedright \getbuffer \stop
+
+\startbuffer
+\showotfcomposition
+ {arabtype*arabtype-default at 48pt}
+ {-1}
+ {لِلّٰهِ}
+\stopbuffer
+
+\typebuffer \start \veryraggedright \getbuffer \stop
+
+Another arabic example (after all, fonts that support arabic have
+lots of nice features) is the following. First we define a bunch
+of feature collections
+
+\startbuffer
+\definefontfeature
+ [salt-n]
+ [analyze=yes,mode=node,
+ language=dflt,script=arab,
+ init=yes,medi=yes,fina=yes,isol=yes,
+ liga=yes,calt=yes,ccmp=yes,
+ kern=yes,curs=yes,mark=yes,mkmk=yes]
+
+\definefontfeature[salt-y][salt-n][salt=yes]
+\definefontfeature[salt-1][salt-n][salt=1]
+\definefontfeature[salt-2][salt-n][salt=2]
+\definefontfeature[salt-3][salt-n][salt=3]
+\definefontfeature[salt-r][salt-n][salt=random]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Next we show a few traced examples. Watch the reported alternatives.
+
+\startbuffer
+\showotfcomposition{scheherazaderegot*salt-n at 36pt}{-1}{\char"6DD}
+\showotfcomposition{scheherazaderegot*salt-y at 36pt}{-1}{\char"6DD}
+\showotfcomposition{scheherazaderegot*salt-1 at 36pt}{-1}{\char"6DD}
+\showotfcomposition{scheherazaderegot*salt-2 at 36pt}{-1}{\char"6DD}
+\showotfcomposition{scheherazaderegot*salt-3 at 36pt}{-1}{\char"6DD}
+\showotfcomposition{scheherazaderegot*salt-r at 36pt}{-1}{\char"6DD}
+\showotfcomposition{scheherazaderegot*salt-r at 36pt}{-1}{\char"6DD}
+\showotfcomposition{scheherazaderegot*salt-r at 36pt}{-1}{\char"6DD}
+\stopbuffer
+
+\typebuffer \start \veryraggedright \getbuffer \stop
+
+The font that we use here can be downloaded from the website of
+Sil International.
+
+For a Zapfino example we use the following feature set:
+
+\typebuffer[zapfino-default-features]
+
+\startbuffer
+\showotfcomposition
+ {zapfinoextraltpro*zapfino-default at 48pt}
+ {0}
+ {Prof. Dr. Donald E. Knuth}
+\stopbuffer
+
+\typebuffer \start \veryraggedright \getbuffer \stop
+
+When dealing with features, we may run into problems due to
+characters that are in the input stream but have no associated
+glyph in the font. Although we test for this a user might want to
+intercept side effect.
+
+\starttyping
+\checkcharactersinfont
+\removemissingcharacters
+\stoptyping
+
+The first command only checks and reports missing characters,
+while the second one also removes them.
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/mk/mk-xml.tex b/doc/context/sources/general/manuals/mk/mk-xml.tex
new file mode 100644
index 000000000..41398a365
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-xml.tex
@@ -0,0 +1,613 @@
+% language=uk
+
+% \startluacode
+% xml.trace_lpath = true
+% \stopluacode
+
+\startcomponent mk-xml
+
+\environment mk-environment
+
+\chapter{XML revisioned}
+
+{\em The code dealing with \XML\ is evolving and the following
+text might be outdated. So, in case of doubt, check the manual.}
+
+\subject{the parser}
+
+For quite a while \CONTEXT\ has built-in support for \XML\ processing and
+at \PRAGMA\ we use this extensively. One of the first things I tried to deal
+with in \LUA\ was \XML, and now that we have \LUATEX\ up and running it's
+time to investigate this a bit more. First we'll have a look at the basic
+functions, the \LUA\ side of the game.
+
+We load an \XML\ file as follows (the \type {document} namespace
+is predefined in \CONTEXT):
+
+\startbuffer
+\startluacode
+ document.xml = document.xml or { } -- define namespace
+ document.xml = xml.load("mk-xml.xml") -- load the file
+\stopluacode
+\stopbuffer
+
+\typebuffer \getbuffer
+
+The loader constructs a table representing the document structure, including
+whitespace, so let's serialize the code and see what shows up:
+
+\startbuffer
+\startluacode
+ local prn = xml.newhandlers { handle = tex.sprint }
+ tex.sprint("\\starttyping")
+ xml.serialize(document.xml, prn)
+ tex.sprint("\\stoptyping")
+\stopluacode
+\stopbuffer
+
+\typebuffer
+
+In the first version of the serializer, we could pass extra function
+arguments that controlled the way content was processed. This method
+has now been replaced by handlers. In this example we create a
+simple handler where the \type {handle} function is responsible
+for the final print.
+
+\getbuffer
+
+This already gives us a rather basic way to manipulate documents and
+this method is even not that slow because we bypass \TEX\ reading from
+file.
+
+\startbuffer
+\startluacode
+ local str = "<l> <w>hello</w> <w>world</w> </l>"
+ local prn = xml.newhandlers { handle = tex.sprint }
+ tex.sprint("\\starttyping")
+ xml.serialize(xml.convert(str),prn)
+ tex.sprint("\\stoptyping")
+\stopluacode
+\stopbuffer
+
+\typebuffer
+
+Watch the extra print argument, we need this because otherwise the
+verbatim mode will not work out well.
+
+\getbuffer
+
+You need to keep in mind that in these examples we print to \TEX\ under
+the current catcode regime.
+
+You can save a \XML\ table with the command:
+
+\starttyping
+\startluacode
+ xml.save(document.xml,"newfile.xml")
+\stopluacode
+\stoptyping
+
+These examples show that you have access to \XML\ files from
+within your document. If you want to convert the table to just a
+string, you can use \type {xml.tostring}. Actually, this method is
+automatically used for occasions where \LUA\ wants to print an
+\XML\ table or wants to join string snippets. However, as we are
+inside \TEX, we need to print to \TEX\ instead of the console or
+file. For this we use specialized handlers.
+
+The reason why I wrote the \XML\ parser is that we need it in the
+utilities (so it has to provide access to the content of elements)
+as well as in the text processing (so it needs to provide some
+manipulation features). To serve both we have implemented a subset
+of what standard \XML\ tools qualify as path based searching.
+
+\startbuffer
+\startluacode
+ xml.sprint(xml.first(document.xml, "/one/three/some"))
+\stopluacode
+\stopbuffer
+
+\typebuffer
+
+The result of this snippet is the content of the first element
+that matches the specification: \quote{\getbuffer}. As you can
+see, this comes out rather verbose. The reason for this is that we
+need to enter \XML\ mode in order to get such a snippet
+interpreted.
+
+Below we give a few more variants, this time
+we use a generic filter:
+
+\startbuffer
+\startluacode
+ xml.sprint(xml.filter(document.xml, "/one/three/some"))
+\stopluacode
+\stopbuffer
+
+\typebuffer result: \astype{\getbuffer}
+
+\startbuffer
+\startluacode
+ xml.sprint(xml.filter(document.xml, "/one/three/some/first()"))
+\stopluacode
+\stopbuffer
+
+\typebuffer result: \astype{\getbuffer}
+
+\startbuffer
+\startluacode
+ xml.sprint(xml.filter(document.xml, "/one/three/some[1]"))
+\stopluacode
+\stopbuffer
+
+\typebuffer result: \astype{\getbuffer}
+
+\startbuffer
+\startluacode
+ xml.sprint(xml.filter(document.xml, "/one/three/some[-1]"))
+\stopluacode
+\stopbuffer
+
+\typebuffer result: \astype{\getbuffer}
+
+\startbuffer
+\startluacode
+ xml.sprint(xml.filter(document.xml, "/one/three/some/texts()"))
+\stopluacode
+\stopbuffer
+
+\typebuffer result: \astype{\getbuffer}
+
+\startbuffer
+\startluacode
+ xml.sprint(xml.filter(document.xml, "/one/three/some[2]/text()"))
+\stopluacode
+\stopbuffer
+
+\typebuffer result: \astype{\getbuffer}
+
+The next lines shows some more variants. There are more than these and
+we will extend the repertoire over time. If needed you can define
+additional handlers.
+
+\subject{performance}
+
+Before we continue with more examples, a few remarks about the
+performance. The first version of the parser was an enhanced
+version of the one presented in the \LUA\ book: support for
+namespaces, processing instructions, comments, cdata and doctype,
+remapping and a few more things. When playing with the parser I
+was quite satisfied about the performance. However, when I started
+experimenting with 40~megabyte files, the preprocessing (needed
+for the special elements) started to become more noticeable. For
+smaller files its 40\% overhead is not that disturbing, but for
+large files \unknown\
+
+The current version uses \LPEG. We follow the same approach as
+before, stack and top and such but this time parsing is about
+twice as fast which is mostly due to the fact that we don't have
+to prepare the stream for cdata, doctype etc. Loading the
+mentioned large file took 12.5 seconds (1.5 for file io and the
+rest for tree building) on my laptop (a 2.3 Ghz Core Duo running
+Windows Vista). With the \LPEG\ implementation we got that down to
+less 7.3 seconds. Loading the 14 interface definition files (2.6
+meg) went down from 1.05 seconds to 0.55 seconds. Namespace
+related issues take some 10\% of this.
+
+Of course these numbers might change over time. For instance, we
+now have the second implementation of the filter mechanism which
+is more advanced and maybe somewhat slower on some tasks.
+
+\subject{patterns}
+
+We will not implement complete \XPATH\ functionality, but only the
+features that make sense for documents that are well structured
+and needs to be typeset. In addition we (will) implement text
+manipulation functions. Of course speed is also a consideration
+when implementing such mechanisms.
+
+The following list is not complete (after all here we only give an
+impression of the development) but it gives a good impression.
+
+\nonknuthmode
+
+\starttabulate[|l|c|l|]
+\NC \bf pattern \NC \bf supported \NC \bf comment \NC \NR
+\HL
+\NC \type{a} \NC \star \NC not anchored \NC \NR
+\NC \type{!a} \NC \star \NC not anchored,negated \NC \NR
+\NC \type{a/b} \NC \star \NC anchored on preceding \NC \NR
+\NC \type{/a/b} \NC \star \NC anchored (current root) \NC \NR
+\NC \type{^a/c} \NC \star \NC anchored (current root) \NC \NR
+\NC \type{^^/a/c} \NC todo \NC anchored (document root) \NC \NR
+\NC \type{a/*/b} \NC \star \NC one wildcard \NC \NR
+\NC \type{a//b} \NC \star \NC many wildcards \NC \NR
+\NC \type{a/**/b} \NC \star \NC many wildcards \NC \NR
+\NC \type{.} \NC \star \NC ignored self \NC \NR
+\NC \type{..} \NC \star \NC parent \NC \NR
+\NC \type{a[5]} \NC \star \NC index upwards \NC \NR
+\NC \type{a[-5]} \NC \star \NC index downwards \NC \NR
+\NC \type{a[position()=5]} \NC maybe \NC \NC \NR
+\NC \type{a[first()]} \NC maybe \NC \NC \NR
+\NC \type{a[last()]} \NC maybe \NC \NC \NR
+\NC \type{(b|c|d)} \NC \star \NC alternates (one of) \NC \NR
+\NC \type{b|c|d} \NC \star \NC alternates (one of) \NC \NR
+\NC \type{!(b|c|d)} \NC \star \NC not one of \NC \NR
+\NC \type{a/(b|c|d)/e/f} \NC \star \NC anchored alternates \NC \NR
+\NC \type{(c/d|e)} \NC not likely \NC nested subpaths \NC \NR
+\NC \type{a/b[@bla]} \NC \star \NC any value of \NC \NR
+\NC \type{a/b/@bla} \NC \star \NC any value of \NC \NR
+\NC \type{a/b[@bla='oeps']} \NC \star \NC equals value \NC \NR
+\NC \type{a/b[@bla=='oeps']} \NC \star \NC equals value \NC \NR
+\NC \type{a/b[@bla<>'oeps']} \NC \star \NC different value \NC \NR
+\NC \type{a/b[@bla!='oeps']} \NC \star \NC different value \NC \NR
+\TB
+\NC \type{...../attribute(id)} \NC \star \NC \NC \NR
+\NC \type{...../attributes()} \NC \star \NC \NC \NR
+\NC \type{...../text()} \NC \star \NC \NC \NR
+\NC \type{...../texts()} \NC \star \NC \NC \NR
+\NC \type{...../first()} \NC \star \NC \NC \NR
+\NC \type{...../last()} \NC \star \NC \NC \NR
+\NC \type{...../index(n)} \NC \star \NC \NC \NR
+\NC \type{...../position(n)} \NC \star \NC \NC \NR
+\TB
+\NC \type{root::} \NC \star \NC \NC \NR
+\NC \type{parent::} \NC \star \NC \NC \NR
+\NC \type{child::} \NC \star \NC \NC \NR
+\NC \type{ancestor::} \NC \star \NC \NC \NR
+\NC \type{preceding-sibling::} \NC not soon \NC \NC \NR
+\NC \type{following-sibling::} \NC not soon \NC \NC \NR
+\NC \type{preceding-sibling-of-self::} \NC not soon \NC \NC \NR
+\NC \type{following-sibling-or-self::} \NC not soon \NC \NC \NR
+\NC \type{descendent::} \NC \star \NC \NC \NR
+\NC \type{descendent-or-self::} \NC \star \NC \NC \NR
+\NC \type{preceding::} \NC not soon \NC \NC \NR
+\NC \type{following::} \NC not soon \NC \NC \NR
+\NC \type{self::node()} \NC not soon \NC \NC \NR
+\NC \type{id("tag")} \NC not soon \NC \NC \NR
+\NC \type{node()} \NC not soon \NC \NC \NR
+\stoptabulate
+
+This list shows that it is also possible to ask for more matches at
+once. Namespaces are supported (including a wildcard) and there are
+mechanisms for namespace remapping.
+
+\startbuffer
+\startluacode
+ lxml.concat(document.xml,"/one/(three|five)/some",", "," and ")
+\stopluacode
+\stopbuffer
+
+\typebuffer
+
+We get: \astype{\getbuffer} and if we say:
+
+\startbuffer
+\startluacode
+ lxml.concat(document.xml,"/one/(three|five)/some",", "," and ",
+ true)
+\stopluacode
+\stopbuffer
+
+\typebuffer
+
+We get: \quote {\getbuffer}.
+
+Watch how we use the \type {lxml} namespace here! Here live the
+functions that pipe the result to \TEX.
+
+\startbuffer
+\startluacode
+ lxml.count(document.xml,"/one/(three|five)/some")
+\stopluacode
+\stopbuffer
+
+There a several helper functions, like \type {xml.count} which in this case
+returns~\getbuffer.
+
+\typebuffer
+
+Functions like this gives the opportunity to loop over lists of elements
+by index.
+
+\subject{manipulations}
+
+We can manipulate elements too. The next code will add some elements
+at specific locations.
+
+\startbuffer
+\startluacode
+ xml.before(document.xml,"xml:///one/three/some","<be>ok</be>")
+ xml.after (document.xml,"xml:///one/three/some","<af>ok</af>")
+ tex.sprint("\\starttyping")
+ xml.sprint(lxml.filter(document.xml,"/one/three"))
+ tex.sprint("\\stoptyping")
+\stopluacode
+\stopbuffer
+
+\typebuffer
+
+And indeed, we suddenly have a couple of \quote {ok}'s there:
+
+\getbuffer
+
+Of course wel can also delete elements:
+
+\startbuffer
+\startluacode
+ xml.delete(document.xml,"/one/three/some")
+ xml.delete(document.xml,"/one/three/af")
+ tex.sprint("\\starttyping")
+ xml.sprint(lxml.filter(document.xml,"/one/three"))
+ tex.sprint("\\stoptyping")
+\stopluacode
+\stopbuffer
+
+\typebuffer
+
+Now we have:
+
+\getbuffer
+
+Replacing an element is also possible. The replacement can be a
+table (representing elements) or a string which is then converted
+into a table first.
+
+\startbuffer
+\startluacode
+ xml.replace(document.xml,"/one/three/be","<mid>done</mid>")
+ tex.sprint("\\starttyping")
+ xml.sprint(lxml.filter(document.xml,"/one/three"))
+ tex.sprint("\\stoptyping")
+\stopluacode
+\stopbuffer
+
+\typebuffer
+
+And indeed we get:
+
+\getbuffer
+
+These are just a few features of the library. I will add some more (rather) generic
+manipulaters and extend the functionality of the existing ones. Also, there will
+be a few manipulation functions that come in handy when preparing texts for
+processing with \TEX\ (most of the \XML\ that I deal with is rather dirty and needs
+some cleanup).
+
+\subject{streaming trees}
+
+Eventually we will provies series of convenient macros that will provide an
+alternative for most of the \MKII\ code. In \MKII\ we have a streaming parser, which
+boils down to attaching macros to elements. This includes a mechanism for saving
+an restoring data, but this is not always convenient because one also has to
+intercept elements that needs to be hidden.
+
+In \MKIV\ we do things different. First we load the complete document in memory (a
+\LUA\ table). Then we flush the elements that we want to process. We can associate
+setups with elements using the filters mentioned before. We can either use \TEX\ or
+use \LUA\ to manipulate content. Instead if a streaming parser we now have a mixture
+of streaming and tree manipulation available. Interesting is that the \XML\ loader
+is pretty fast and piping data to \TEX\ is also efficient. Since we no longer need to
+manipulate the elements in \TEX\ we gain processing time too, so in practice we have
+now much faster \XML\ processing available.
+
+To give you an idea we show a few commands:
+
+\startbuffer
+\xmlload {main}{mk-xml.xml}
+\stopbuffer
+
+\typebuffer \getbuffer
+
+So that we can do things like (there are and will be a few more):
+
+\starttabulate[|l|l|l|]
+\NC \bf command \NC \bf arguments \NC \bf result \NC \NR
+\NC \type {\xmlfirst} \NC \type {{main} {/one/three/some}} \NC \xmlfirst{main}{/one/three/some} \NC \NR
+\NC \type {\xmllast } \NC \type {{main} {/one/three/some}} \NC \xmllast {main}{/one/three/some} \NC \NR
+\NC \type {\xmlindex} \NC \type {{main} {/one/three/some} {2}} \NC \xmlindex{main}{/one/three/some}{2} \NC \NR
+\stoptabulate
+
+There is a set of about 30 commands that operates on the tree: loading, flushing,
+filtering, associating setups and code in modules to elements. For instance when
+one uses so called cals||tables, the processing is automatically activates when the
+namespace can be resolved. Processing is collected in setups and those registered
+are these are processed after loading the tree. In the following example we register
+a handler for content that needs to end up bold.
+
+\starttyping
+\startxmlsetups xml:mysetups
+ \xmlsetsetup{\xmldocument}{bold|bf}{xml:handlebold}
+\stopxmlsetups
+
+\xmlregistersetup{xml:mysetups}
+
+\startxmlsetups xml:handlebold
+ \dontleavehmode
+ \bgroup
+ \bf
+ \xmlflush{#1}
+ \egroup
+\stopxmlsetups
+\stoptyping
+
+In this example \type {#1} represents the root of the subtree. Say that we
+want to process an index entry which is coded as follows:
+
+\starttyping
+<index>
+ <entry>whatever</entry>
+ <key>whatever</key>
+</index>
+\stoptyping
+
+We register an additional handler (here the \type {*} is a shortcut for
+using the element's tag as setup name):
+
+\starttyping
+\startxmlsetups xml:mysetups
+ \xmlsetsetup{\xmldocument}{bold|bf}{xml:handlebold}
+ \xmlsetsetup{\xmldocument}{index}{*}
+\stopxmlsetups
+
+\xmlregistersetup{xml:mysetups}
+
+\startxmlsetups index
+ \index[\xmlfirst{#1}{key}]{\xmlfirst{#1}{entry}}
+\stopxmlsetups
+\stoptyping
+
+In practice \MKIV\ definitions are more compact than the comparable
+\MKII\ ones, especially for more complex constructs (tables and such).
+
+\starttyping
+\defineXMLenvironment
+ [index]
+ {\bgroup
+ \defineXMLsave[key]%
+ \defineXMLsave[entry]}
+ {\index[\XMLflush{key}]{\XMLflush{entry}}%
+ \egroup}
+\stoptyping
+
+This looks compact, but keep in mind that we also need to get rid of
+spurry spaces and when the code grows, we usually use setups to separate
+the definition from the code. In any case, the \MKII\ solution involves
+a few definitions as well as saving the content of elements. This is often
+much more costly than the \MKIV\ method where we only locate and flush
+content. Of course the document is stored in memory, but that happens
+pretty fast: storing the 14~files (2~per interface) that define the \CONTEXT\
+user interface takes .85 seconds on a 2.3 Ghz Core Duo (Windows Vista) which
+is not that bad if you take into account that we're talking of 2.7 megabytes
+of highly structured data (many elements and attributes, not that much text).
+Loading one of these files using \MKII\ code (for storing elements) takes
+many more seconds.
+
+I didn't do extensive speed tests yet but for normal streamed
+processing of simple documents the penalty of loading the tree can be
+neglected. When comparing traditional \MKII\ code like:
+
+\starttyping
+\defineXMLargument [title][id=] {\subject[\XMLop{at}]}
+\defineXMLenvironment[p] {} {\par}
+
+\starttext
+ \processXMLfilegrouped{testspeed.xml}
+\stoptext
+\stoptyping
+
+with its \MKIV\ counterpart:
+
+\starttyping
+\startxmlsetups document
+ \xmlsetsetup\xmldocument{title|p}{*}
+\stopxmlsetups
+
+\xmlregistersetup{document}
+
+\startxmlsetups title
+ \section[\xmlatt{#1}{id}]{\xmlcontent{#1}{/}}
+\stopxmlsetups
+
+\startxmlsetups p
+ \xmlflush{#1}\endgraf
+\stopxmlsetups
+
+\starttext
+ \processXMLfilegrouped{testspeed.xml}
+\stoptext
+
+I found that processing a one megabyte file with some 400 sections
+takes the same runtime for both approaches. However, as soon as more
+complex manipulations enter the game the \MKIV\ method starts taking
+less time. Think of the manipulations needed for \MATHML\ or converting
+tables into something that \CONTEXT\ can handle. Also, when we deal
+with documents where we need to ignore large portions of shuffle content
+around, the traditional method also has to store data in memory and in
+that case \MKII\ code always loses from \MKIV\ code. Of course any speed
+we gain in handling \XML\ is lost on processing complex fonts and
+attributes but there we gain in quality.
+
+\stoptyping
+
+Another advantage of the \MKIV\ mechanisms is that we suddenly have so called
+fully expandable \XML\ handling. All manipulations take place in \LUA\ and
+there is no interfering code at the \TEX\ end.
+
+\subject{examples}
+
+For the path freaks we now show what patterns lead to. For this we will
+use the following \XML\ data:
+
+\startbuffer[xml]
+<?xml version='1.0' ?>
+<a>
+ <?what is this?>
+ <b>
+ <c n='x'>c1</c><d>d1</d>
+ </b>
+ <b>
+ <c n='y'>c2</c><d>d2</d>
+ </b>
+ <?what is that?>
+ <c><d>d3</d></c>
+ <c n='y'><d>d4</d></c>
+ <c><d>d5</d></c>
+</a>
+\stopbuffer
+
+\typebuffer[xml]
+
+\xmlloadbuffer{xml}{xml}
+
+\startluacode
+ function document.ShowResultOfPattern(root,pattern)
+ local ok = false
+ for r,d,k in xml.elements(lxml.id(root),pattern) do
+ tex.print(xml.tostring(d[k]))
+ tex.sprint(tex.ctxcatcodes,"\\par")
+ ok = true
+ end
+ if not ok then
+ tex.sprint("no match")
+ tex.sprint(tex.ctxcatcodes,"\\par")
+ end
+ end
+\stopluacode
+
+Here come the examples:
+
+\definehead[example][subsubject]
+\setuphead[example][style=\tt,before=\blank,after=\nowhitespace]
+
+\def\ShowResultOfPattern#1#2%
+ {\example{#2}
+ \startpacked \tttf
+ \ctxlua{document.ShowResultOfPattern("#1","#2")}
+ \stoppacked}
+
+\ShowResultOfPattern{xml}{a/b/c}
+\ShowResultOfPattern{xml}{/a/b/c}
+\ShowResultOfPattern{xml}{b/c}
+\ShowResultOfPattern{xml}{c}
+\ShowResultOfPattern{xml}{a/*/c}
+\ShowResultOfPattern{xml}{a/**/c}
+\ShowResultOfPattern{xml}{a//c}
+\ShowResultOfPattern{xml}{a/*/*/c}
+\ShowResultOfPattern{xml}{*/c}
+\ShowResultOfPattern{xml}{**/c}
+\ShowResultOfPattern{xml}{a/../*/c}
+\ShowResultOfPattern{xml}{a/../c}
+\ShowResultOfPattern{xml}{c[@n='x']}
+\ShowResultOfPattern{xml}{c[@n]}
+\ShowResultOfPattern{xml}{c[@n='y']}
+\ShowResultOfPattern{xml}{c[1]}
+\ShowResultOfPattern{xml}{b/c[1]}
+\ShowResultOfPattern{xml}{a/c[1]}
+\ShowResultOfPattern{xml}{a/c[-1]}
+\ShowResultOfPattern{xml}{c[1]}
+\ShowResultOfPattern{xml}{c[-1]}
+\ShowResultOfPattern{xml}{pi::}
+\ShowResultOfPattern{xml}{pi::what}
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/mk/mk-xml.xml b/doc/context/sources/general/manuals/mk/mk-xml.xml
new file mode 100644
index 000000000..bceb002f6
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-xml.xml
@@ -0,0 +1,24 @@
+<?xml version='1.0 standalone='yes' ?>
+
+<one>
+ <two>
+ <a>alpha</a>
+ <b/>
+ <c>gamma</c>
+ <d/>
+ <e>epsilon</e>
+ </two>
+ <three>
+ <some>pdftex</some>
+ <some>luatex</some>
+ <some>xetex</some>
+ </three>
+ <four>
+ <more:some name="hans"/>
+ <more:some name="taco"/>
+ <more:some name="hartmut"/>
+ </four>
+ <five>
+ <some>metapost</some>
+ </five>
+</one>
diff --git a/doc/context/sources/general/manuals/mk/mk-zapfino.tex b/doc/context/sources/general/manuals/mk/mk-zapfino.tex
new file mode 100644
index 000000000..f427f13a1
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk-zapfino.tex
@@ -0,0 +1,561 @@
+% language=uk
+
+\startcomponent mk-zapfino
+
+\environment mk-environment
+
+\nonknuthmode
+
+\definefontfeature
+ [SampleFont]
+ [language=dflt,
+ script=latn,
+ calt=yes,
+ clig=yes,
+ rlig=yes,
+ tlig=yes,
+ mode=node]
+
+\font\Sample=ZapfinoExtraLTPro*SampleFont at 24pt
+
+\def\SampleChar#1{\dontleavehmode\struttedbox{\Sample\fontchar{#1}}}
+\def\SampleText#1{\dontleavehmode\struttedbox{\Sample#1}}
+
+\doifmodeelse {tug} {
+
+ \title{Zapfing fonts}
+
+ \subject{by Hans Hagen \& Taco Hoekwater}
+
+ This is Chapter~XII from \notabene {\CONTEXT, from \MKII\ to \MKIV}, a document
+ that describes our explorations, experiments and decisions made while
+ we develop \LUATEX. This text has not been copy-edited.
+
+ \blank[3*big]
+
+} {
+
+ \chapter{Zapfing fonts}
+
+}
+
+\subject {remark}
+
+{\it The actual form of the tables shown here might have changed
+in the meantime. However, since this document describes the
+stepwise development of \LUATEX\ and \CONTEXT\ \MKIV\ we don't
+update the following information. The rendering might differ from
+earlier rendering simply because the code used to process this
+chapter evolves.}
+
+\subject {features}
+
+In previous chapters we've seen support for \OPENTYPE\ features creep into \LUATEX\ and
+\CONTEXT\ \MKIV. However, it may not have been clear that so far we were just feeding
+the traditional \TEX\ machinery with the right data: ligatures and kerns. Here we will
+show what so called features can do for you. Not much \LUA\ code will be shown, if
+only because relatively complex code is needed to handle this kind of trickery with
+acceptable performance.
+
+In order to support features in their full glory more is needed than \TEX's ligature
+and kern mechanisms: we need to manipulate the node list. As a result, we have now a
+second mechanism built into \MKIV\ and users can choose what method they like most. The
+first method, called \type {base}, is less powerful and less complete
+than the one named \type {node}. Eventually \CONTEXT\ will use the node method by
+default.
+
+There are two variants of features: substitutions and positioning. Here we
+concentrate on substitutions of which there are several. Positioning is for instance
+used for specialized kerning as needed in for instance typesetting Arab.
+
+One character representation can be replaced by one or more fixed alternatives or alternatives
+chosen from a list of alternatives (substitutions or alternates). Multiple characters
+can be replaces by one character (substitutions, alternates or a ligature). The
+replacements can depend on preceding and|/|or following glyphs in which case we say that
+the replacement is driven by rules. Rules can deal with single glyphs, combinations of
+glyphs, classes (defined in the font) of glyphs and|/|or ranges of glyphs.
+
+Because the available documentation of \OPENTYPE\ is rather minimalistic and because
+most fonts are relatively simple, you can imagine that figuring out how to
+implement support for fonts with advanced features is not entirely trivial
+and involves some trial and error. What also complicate things is that features can
+interfere. Yet another complicating factor is that in the order of applying a rule may
+obscure a later rule. Such fonts don't ship with manuals and examples of correct output
+are not part of the buy.
+
+We like testing \LUATEX's open type support with Palatino Regular and Palatino Sans and
+good old \TYPEONE\ support with Optima Nova. So it makes sense to test advanced
+features with Zapfino Pro. This font has many features, which happen to be
+implemented by Adam Twardoch, a well known font expert and familiar with the \TEX\
+community. We had the feeling that when \LUATEX\ can support Zapfino Pro, designed by
+Hermann Zapf and enhanced by Adam, we have reached a crucial point in the development.
+
+The first thing that you will observe when using this font is that the files are larger
+than normal, especially the cached versions in \MKIV. This made me extend some of the
+serialization code that we use for caching font data so that it could handle huge
+tables better but at the cost of some speed. Once we could handle the data conveniently
+and as a side effect look into the font data with an editor, it became clear that
+implementing for the \type {calt} and \type {clig} features would take a bit
+of coding.
+
+\subject{example}
+
+Before some details will be discussed, we will show two of the test texts that \CONTEXT\
+users normally use when testing layouts or new features, a quote from E.R.\ Tufte and
+one from Hermann Zapf. The \TEX\ code shows how features are set in \CONTEXT.
+
+\startbuffer
+\definefontfeature
+ [zapfino]
+ [language=nld,script=latn,mode=node,
+ calt=yes,clig=yes,liga=yes,rlig=yes,tlig=yes]
+
+\definefont
+ [Zapfino]
+ [ZapfinoExtraLTPro*zapfino at 24pt]
+ [line=40pt]
+\Zapfino
+\input tufte \par
+\stopbuffer
+
+\typebuffer \blank[disable] \start \getbuffer \stop
+
+You don't even have to look too closely in order to notice that characters are
+represented by different glyphs, depending on the context in which they appear.
+
+\startbuffer
+\definefontsynonym
+ [Zapfino]
+ [ZapfinoExtraLTPro]
+ [features=zapfino]
+\definedfont
+ [Zapfino at 24pt]
+\setupinterlinespace
+ [line=40pt]
+\input zapf \par
+\stopbuffer
+
+\typebuffer \blank[disable] \start \getbuffer \stop
+
+\subject{obeying rules}
+
+When we were testing node based feature support, the only way to check this was to
+identify the rules that lead to certain glyphs. The more unique glyphs are good
+candidates for this. For instance
+
+\startitemize[packed]
+\item there is s special glyph representing \SampleChar{c_slash_o}
+\item in the input stream this is the character sequence \type{c/o}
+\item so there most be a rule that tells us that this sequence becomes that ligature
+\stopitemize
+
+As said, in this case, the replacement glyph is supposed to be a ligature and indeed
+there is such a ligature: \type {c_slash_o}. Of course, this replacement will only
+take place when the sequence is surrounded by spaces.
+
+However, when testing this, we were not looking at this rule but at the (randomly
+chosen) rule that was meant to intercept the alternative \type {h.2} followed
+by \type {z.4}. Interesting was that this resolved to a ligature indeed, but
+the shape associated with this ligature was an~\type {h}, which is not right.
+Actually, a few more of such rules turned out to be wrong. It took a bit of
+an effort to reach this conclusion because of the mentioned interferences
+of features and rules. At that time, the rule entry (in raw \LUATEX\ table
+format) looks as follows:
+
+\starttyping
+[44] = {
+ ["format"] = "coverage",
+ ["rules"] = {
+ [1] = {
+ ["coverage"] = {
+ ["ncovers"] = {
+ [1] = "h.2",
+ [2] = "z.4",
+ }
+ },
+ ["lookups"] = {
+ [1] = {
+ ["lookup_tag"] = "L084",
+ ["seq"] = 0,
+ }
+ }
+ }
+ }
+ ["script_lang_index"] = 1,
+ ["tag"] = "calt",
+ ["type"] = "chainsub"
+}
+\stoptyping
+
+Instead of reinventing the wheel, we used the \FONTFORGE\ libraries for reading the
+\OPENTYPE\ font files. Therefore the \LUATEX\ table is resembling the internal \FONTFORGE\
+data structures. Currently we show the version~1 format.
+
+Here \type {ncovers} means that when the current character has shape \SampleChar
+{h.2} (\type{h.2}) and the next one is \SampleChar{z.4} (\type{z.4}) (a sequence)
+then we need to apply the lookup internally tagged \type {L084}. Such a rule
+can be more extensive, for instance instead of \type {h.2} one can have a list of
+characters, and there can be \type {bcovers} and \type {fcovers} as well, which means
+that preceding or following character need to be taken into account.
+
+When this rule matches, it resolves to a specification like:
+
+\starttyping
+[6] = {
+ ["flags"] = 0,
+ ["lig"] = {
+ ["char"] = "h",
+ ["components"] = "h.2 z.4",
+ },
+ ["script_lang_index"] = 65535,
+ ["tag"] = "L084",
+ ["type"] = "ligature",
+}
+\stoptyping
+
+Here \type {tag} and \type {script_lang_index} are kind of special and
+are part of an private feature system, i.e.\ they make up the cross reference
+between rules and glyphs. Watch how the components don't match the character,
+which is even more peculiar when we realize that these are the initials of the
+author of the font. It took a couple of Skype sessions and mails before
+we came to the conclusion that this was probably a glitch in the font. So,
+what to do when a font has bugs like this? Should one disable the feature?
+That would be a pitty because a font like Zapfino depends on it. On the other
+hand, given the number of rules and given the fact that there are different
+rule sets for some languages, you can imagine that making up the rules and
+checking them is not trivial.
+
+We should realize that Zapfino is an extraordinary case, because it used
+the \OPENTYPE\ features extensively. We can also be sure that the problems will
+be fixed once they are known, if only because Adam Twardoch (who did the job)
+has exceptionally high standards but it may take a while before the fix reached
+the user (who then has to update his or her font). As said, it also takes some
+effort to run into the situation described here so the likelihood of running
+into this rule is small. This also brings to our attention the fact that fonts
+can now contain bugs and updating them makes sense but can break existing
+documents. Since such fonts are copyrighted and not available on line, font
+vendors need to find ways to communicate these fixes to their customers.
+
+Can we add some additional checks for problems like this? For a while I
+thought that it was possible by assuming that ligatures have names like
+\type {h.2_z.4} but alas, sequences of glyphs are mapped onto ligatures
+using mappings like the following:
+
+\starttabulate[||||]
+\NC \type{three fraction four.2} \NC \type{threequarters} \NC \SampleChar{threequarters} \NC\NR
+\NC \type{three fraction four} \NC \type{threequarters} \NC \SampleChar{threequarters} \NC\NR
+\NC \type{d r} \NC \type{d_r} \NC \SampleChar{d_r} \NC\NR
+\NC \type{e period} \NC \type{e_period} \NC \SampleChar{e_period} \NC\NR
+\NC \type{f i} \NC \type{fi} \NC \SampleChar{fi} \NC\NR
+\NC \type{f l} \NC \type{fl} \NC \SampleChar{fl} \NC\NR
+\NC \type{f f i} \NC \type{f_f_i} \NC \SampleChar{f_f_i} \NC\NR
+\NC \type{f t} \NC \type{f_t} \NC \SampleChar{f_t} \NC\NR
+\stoptabulate
+
+Some ligature have no \type {_} in their names and there are also some
+inconsistencies, compare the \type {fl} and \type {f_f_i}. Here font
+history is painfully reflected in inconsistency and no solution can be
+found here.
+
+So, in order to get rid of this problem, \MKIV\ implements a method to ignore
+certain rules but then, this only makes sense if one knows how the rules
+are tagged internally. So, in practice this is no solution. However, you can
+imagine that at some point \CONTEXT\ ships with a database of fixes that
+are applied to known fonts with certain version numbers.
+
+We also found out that the font table that we used was not good enough for our
+purpose because the exact order in what rules have to be applies was not
+available. Then we noticed that in the meantime \FONTFORGE\ had moved on
+to version~2 and after consulting the author we quickly came to the conclusion
+that it made sense to use the updated representation.
+
+In version~2 the snippet with the previously mentioned rule looks as follows:
+
+\starttyping
+["ks_latn_l_66_c_19"]={
+ ["format"]="coverage",
+ ["rules"]={
+ [1]={
+ ["coverage"]={
+ ["current"]={
+ [1]="h.2",
+ [2]="z.4",
+ }
+ },
+ ["lookups"]={
+ [1]={
+ ["lookup"]="ls_l_84",
+ ["seq"]=0,
+ }
+ }
+ }
+ },
+ ["type"]="chainsub",
+},
+\stoptyping
+
+The main rule table is now indexed by name which is possible because the order
+of rules is specified somewhere else. The key \type {ncovers} has been replaced
+by \type {current}. As long as \LUATEX\ is in beta stage, we have the freedom to
+change such labels as some of them are rather \FONTFORGE\ specific.
+
+This rule is mentioned in a feature specification table. Here specific features are
+associated with languages and scripts. This is just one of the entries concerning
+\type {calt}. You can imagine that it took a while to figure out how best to
+deal with this, but eventually the \MKIV\ code could do the trick. The cryptic
+names are replacements for pointers in the \FONTFORGE\ datastructure. In order to be
+able to use \FONTFORGE\ for font development and analysis, the decision was made to
+stick closely to its idiom.
+
+\starttyping
+ ["gsub"]={
+ ...
+ [67]={
+ ["features"]={
+ [1]={
+ ["scripts"]={
+ [1]={
+ ["langs"]={
+ [1]="AFK ",
+ [2]="DEU ",
+ [3]="NLD ",
+ [4]="ROM ",
+ [5]="TRK ",
+ [6]="dflt",
+ },
+ ["script"]="latn",
+ }
+ },
+ ["tag"]="calt",
+ }
+ },
+ ["name"]="ks_latn_l_66",
+ ["subtables"]={
+ [1]={
+ ["name"]="ks_latn_l_66_c_0",
+ },
+ ...
+ [20]={
+ ["name"]="ks_latn_l_66_c_19",
+ },
+ ...
+ },
+ ["type"]="gsub_context_chain",
+ },
+\stoptyping
+
+\subject{practice}
+
+The few snapshots of the font table probably don't make much sense if you
+haven't seen the whole table. Well, it certainly helps to see the whole picture,
+but we're talking of a 14 MB file (1.5 MB bytecode). When resolving ligatures,
+we can follow a straightforward approach:
+
+\startitemize[packed]
+\item walk over the nodelist and at each character (glyph node) call a function
+\item this function inspects the character and takes a look at the following ones
+\item when a ligature is identified, the sequence of nodes is replaced
+\stopitemize
+
+Substitutions are not much different but there we look at just one character.
+However, contextual substitutions (and ligatures) are more complex. Here we need
+to loop over a list of rules (dependent on script and language) and this involves
+a sequence as well as preceding and following characters. When we have a hit, the
+sequence will be replaced by another one, determined by a lookup in the character
+table. Since this is a rather time consuming operation, especially because many
+surrounding characters need to be taken into account, you can imagine that we need
+a bit of trickery to get an acceptable performance. Fortunately \LUA\ is pretty fast
+when it comes down to manipulating strings and tables, so we can prepare some handy
+datastructures in advance.
+
+When testing the implementation of features one need to be aware of the fact that
+some appearance are also implemented using the regular ligature mechanisms. Take the
+following definitions:
+
+\startbuffer[a]
+\definefontfeature
+ [none]
+ [language=dflt,script=latn,mode=node,liga=no]
+\definefontfeature
+ [calt]
+ [language=dflt,script=latn,mode=node,liga=no,calt=yes]
+\definefontfeature
+ [clig]
+ [language=dflt,script=latn,mode=node,liga=no,clig=yes]
+\definefontfeature
+ [dlig]
+ [language=dflt,script=latn,mode=node,liga=no,dlig=yes]
+\definefontfeature
+ [liga]
+ [language=dflt,script=latn,mode=node]
+\stopbuffer
+
+\startbuffer[b]
+\starttabulate[||||]
+\NC \type{none } \NC \definedfont[ZapfinoExtraLTPro*none at 24pt]\hbox{on the synthesis}\NC\definedfont[ZapfinoExtraLTPro*none at 24pt]\hbox{winnow the wheat}\NC \NR
+\NC \type{calt } \NC \definedfont[ZapfinoExtraLTPro*calt at 24pt]\hbox{on the synthesis}\NC\definedfont[ZapfinoExtraLTPro*calt at 24pt]\hbox{winnow the wheat}\NC \NR
+\NC \type{clig } \NC \definedfont[ZapfinoExtraLTPro*clig at 24pt]\hbox{on the synthesis}\NC\definedfont[ZapfinoExtraLTPro*clig at 24pt]\hbox{winnow the wheat}\NC \NR
+\NC \type{dlig } \NC \definedfont[ZapfinoExtraLTPro*dlig at 24pt]\hbox{on the synthesis}\NC\definedfont[ZapfinoExtraLTPro*dlig at 24pt]\hbox{winnow the wheat}\NC \NR
+\NC \type{liga } \NC \definedfont[ZapfinoExtraLTPro*liga at 24pt]\hbox{on the synthesis}\NC\definedfont[ZapfinoExtraLTPro*liga at 24pt]\hbox{winnow the wheat}\NC \NR
+\stoptabulate
+\stopbuffer
+
+\typebuffer[a]
+
+This gives:
+
+\start \getbuffer[a] \getbuffer[b] \stop
+
+Here are Adam's recommendations with regards to the \type {dlig} feature:
+\quotation {The \type{dlig} feature is supposed to by use only upon user's
+discretion, usually on single runs, words or even pairs. It makes little
+sense to enable \type {dlig} for an entire sentence or paragraph. That's
+how the \OPENTYPE\ specification envisions it.}
+
+When testing features it helps to use words that look similar so next we will
+show some examples that used. When we look at these examples, we need to
+understand that when a specific character representation is analyzed, the
+rules can take preceding and following characters into account. The rules
+take characters as well as their shapes, or more precisely: one of their
+shapes since Zapfino has many variants, into account. Since different rules
+are used for languages (okay, this is limited to only a subset of languages
+that use the latin script) not only shapes but also the way words are
+constructed are taken into account. Designing te rules is definitely non trivial.
+
+When testing the implementation we ran into cases where the initial \type
+{t} showed up wrong, for instance in the the Dutch word \type {troef}.
+Because space can be part of the rules, we need to handle the
+cases where words end and start and boxes are then kind of special.
+
+\definefontfeature
+ [zapfing]
+ [language=dflt,
+ script=latn,
+ calt=yes,
+ clig=yes,
+ rlig=yes,
+ tlig=yes,
+ mode=node]
+
+\font\Zapfing=ZapfinoExtraLTPro*zapfing at 24pt
+
+\startbuffer
+troef troef troef troeftroef troef \par
+\ruledhbox{troef troef troef troeftroef troef} \par
+\ruledhbox{troef 123} \par
+\ruledhbox{troef} \ruledhbox{troef } \ruledhbox{ troef} \ruledhbox { troef } \par
+\stopbuffer
+
+\typebuffer \start \Zapfing \getbuffer \stop
+
+Unfortunately, this does not work well with punctuation, which is less
+prominent in the rules than space. In our favourite test quote of Tufte, we have
+lots of commas and there it shows up:
+
+\startbuffer
+review review review, review \par
+itemize, review \par
+itemize, review, \par
+\stopbuffer
+
+\typebuffer \start \Zapfing \getbuffer \stop
+
+Of course we can decide to extend the rule base at runtime and this may
+well happen when we experiment more with this font.
+
+The next one was one of our first test lines, Watch the initial and the
+Zapfino ligature.
+
+\startbuffer
+Welcome to Zapfino
+\stopbuffer
+
+\typebuffer \start \Zapfing \getbuffer \stop
+
+For a while there was a bug in the rule handler that resulted in the variant of
+the \type {y} that has a very large descender. Incidentally the word \type
+{synthesize} is also a good test case for the \type {the} pattern which gets
+special treatment because there is a ligature available.
+
+\startbuffer
+synopsize versus synthesize versus
+synthase versus sympathy versus synonym
+\stopbuffer
+
+\typebuffer \start \Zapfing \getbuffer \stop
+
+Here are some examples that use the \type {g}, \type {d} and \type {f} in
+several places.
+
+\startbuffer
+eggen groet ogen hagen \par
+dieren druiven onder aard donder modder \par
+fiets effe flater triest troef \par
+\stopbuffer
+
+\typebuffer \start \Zapfing \getbuffer \stop
+
+Let's see how well Hermann has taken care of the \type {h}'s
+representations. There are quite some variants of the lowercase one:
+
+\starttabulate
+\NC \type {h} \NC \SampleChar{h} \NC \NR
+\NC \type {h.2} \NC \SampleChar{h.2} \NC \NR
+\NC \type {h.3} \NC \SampleChar{h.3} \NC \NR
+\NC \type {h.4} \NC \SampleChar{h.4} \NC \NR
+\NC \type {h.5} \NC \SampleChar{h.5} \NC \NR
+\NC \type {h.init} \NC \SampleChar{h.init} \NC \NR
+\NC \type {h.sups} \NC \SampleChar{h.sups} \NC \NR
+\NC \type {h.sc} \NC \SampleChar{h.sc} \NC \NR
+\NC \type {orn.73} \NC \SampleChar{orn.73} \NC \NR
+\stoptabulate
+
+How about the uppercase variant, as used in his name:
+
+\startbuffer
+M Mr Mr. H He Her Herm Herma Herman Hermann Z Za Zap Zapf \par
+Mr. Hermann Zapf
+\stopbuffer
+
+\typebuffer \start \Zapfing \getbuffer \stop
+
+Of course we have to test another famous name:
+
+\startbuffer
+D Do Don Dona Donal Donald K Kn Knu Knut Knuth \par
+Don Knuth Donald Knuth Donald E. Knuth DEK \par
+Prof. Dr. Donald E. Knuth \par
+\stopbuffer
+
+\typebuffer \start \Zapfing \getbuffer \stop
+
+Unfortunately the \LUA\ and \TEX\ logos don't come out that well:
+
+\startbuffer
+L Lu Lua l lu lua t te tex TeX luatex luaTeX LuaTeX
+\stopbuffer
+
+\typebuffer \start \Zapfing \getbuffer \stop
+
+This font has quite some ornaments and there is an \type {ornm} feature
+that can be applied. We're still not sure about its usage, but when one
+keys in text in lowercase, \type {hermann} comes out as follows:
+
+\definefontfeature
+ [gebarentaal]
+ [language=dflt,
+ script=latn,
+ mode=node,
+ ornm=yes,
+ liga=no]
+
+{\font\Sample=ZapfinoExtraLTPro*gebarentaal at 24pt \Sample hermann}
+
+As said in the beginning, dirty implementation details will be kept away from
+the reader. Also, you should not be surprised if the current code had some
+bugs or does some things wrong. Also, if spacing looks a bit weird to you,
+keep in mind that we're still in the middle of sorting things out.
+
+\start \Zapfing Taco Hoekwater \& Hans Hagen \stop
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/mk/mk.tex b/doc/context/sources/general/manuals/mk/mk.tex
new file mode 100644
index 000000000..430a19892
--- /dev/null
+++ b/doc/context/sources/general/manuals/mk/mk.tex
@@ -0,0 +1,70 @@
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
+%
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+%
+% comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt
+% Group journal or otherwise. Thanks to the editors for corrections. Also thanks
+% to users for testing, feedback and corrections.
+
+\environment mk-environment
+
+\startproduct mk
+
+\component mk-titlepage
+
+\startfrontmatter
+ \component mk-contents
+ \component mk-introduction
+\stopfrontmatter
+
+\startbodymatter
+ \component mk-iitoiv
+ \component mk-luafitsin
+ \component mk-initialization
+ \component mk-calcmath
+ \component mk-goingutf
+ \component mk-fonts
+ \component mk-tokenspeak
+ \component mk-performance
+ \component mk-nodes
+ \component mk-dirtytricks
+ \component mk-goingbeta
+ \component mk-zapfino
+ \component mk-arabic
+ \component mk-colors
+ \component mk-cjk
+ \component mk-optimization
+ \component mk-xml
+ \component mk-breakingapart
+ \component mk-memory
+ \component mk-nicetoknow
+ \component mk-reflection
+ \component mk-mplib
+ \component mk-mix
+ \component mk-punk
+ \component mk-open
+ \component mk-itworks
+ \component mk-fallback
+ %component mk-bidi % unfinished
+ %component mk-dynamics % unfinished
+ %component mk-easier % unfinished
+ \component mk-structure
+ \component mk-tracking
+ \component mk-order
+ \component mk-math
+ \component mk-code
+ \component mk-plain
+ \component mk-halfway
+ \component mk-last
+\stopbodymatter
+
+\stopproduct
diff --git a/doc/context/sources/general/manuals/readme/mreadme.tex b/doc/context/sources/general/manuals/readme/mreadme.tex
index 32c1684d9..950f4a64c 100644
--- a/doc/context/sources/general/manuals/readme/mreadme.tex
+++ b/doc/context/sources/general/manuals/readme/mreadme.tex
@@ -1,4 +1,4 @@
-% interface=en engine=luatex language=uk
+% interface=en language=uk
% author : Hans Hagen
% copyright : PRAGMA ADE & ConTeXt Development Team
@@ -12,6 +12,10 @@
% with existing functionality and we cannot be held responsible for that. Many of
% the manuals contain characteristic graphics and personal notes or examples that
% make no sense when used out-of-context.
+%
+% comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt
+% Group journal or otherwise. Thanks to the editors for corrections. Also thanks
+% to users for testing, feedback and corrections.
\environment mcommon
diff --git a/doc/context/sources/general/manuals/rules/rules-mkiv.tex b/doc/context/sources/general/manuals/rules/rules-mkiv.tex
new file mode 100644
index 000000000..536a37aea
--- /dev/null
+++ b/doc/context/sources/general/manuals/rules/rules-mkiv.tex
@@ -0,0 +1,821 @@
+% interface=en engine=luatex language=uk
+
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
+%
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+%
+% comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt
+% Group journal or otherwise. Thanks to the editors for corrections. Also thanks
+% to users for testing, feedback and corrections.
+
+\setupbodyfont
+ [dejavu,10pt]
+
+\setuphead
+ [section]
+ [style=\bfb]
+
+\setupwhitespace
+ [big]
+
+\setuplayout
+ [header=15mm,
+ topspace=15mm,
+ footer=0mm,
+ bottomspace=20mm,
+ height=middle,
+ backspace=20mm,
+ cutspace=20mm,
+ width=middle]
+
+\usemodule[x][setups-basics]
+
+\loadsetups[context-en]
+\loadsetups[i-linefiller]
+
+\startdocument
+
+\startMPpage
+
+ StartPage ;
+
+ linecap := butt ;
+
+ fill Page withcolor .25[yellow/4,green/2] ;
+
+ path p ; p := (ulcorner Page .. urcorner Page .. lrcorner Page) ;
+
+ draw image (
+ for i=1/200 step 1/200 until 1 :
+ draw p scaled i dashed dashpattern (on 4 randomized 2 off 4 randomized 2) ;
+ endfor ;
+ ) withcolor white ;
+
+ draw anchored.urt(
+ textext("\ss RULES") xsized .5PaperWidth,
+ urcorner Page shifted(-15mm,-20mm)
+ ) withcolor white ;
+
+ draw anchored.urt(
+ textext("\ss HANS HAGEN") xsized .5PaperWidth,
+ lrcorner Page shifted(-15mm,40mm)
+ ) withcolor white ;
+
+ draw anchored.urt(
+ textext("\ss A CONTEXT MKIV MANUAL") xsized .5PaperWidth,
+ lrcorner Page shifted(-15mm,20mm)
+ ) withcolor white ;
+
+ setbounds currentpicture to Page ;
+
+ StopPage ;
+
+\stopMPpage
+
+\startsubject[title=Introduction]
+
+This manual describes just one type of rules: those that somehow magically are
+bound to the typeset text. We will mention a few mechanisms that relate to this
+in the sense that they share some of the underlaying code and logic. The term
+\quotation {rules} should be interpreted liberally as we can kick in some
+\METAPOST\ which then can get us away from straight rules.
+
+This manual will not be that extensive, after all these mechanisms are not that
+complex to configure.
+
+\stopsubject
+
+\startsubject[title=Underlining and overstriking]
+
+Already in \CONTEXT\ \MKII\ we had underlining available but with some
+limitations. We could handle more than one word but at some point you hit the
+limits of the engine. The \MKIV\ implementation is more flexible. In fact you can
+underline a whole document (which was actually a request from a user). This
+feature was also used by a collegue who was experimenting with texts for
+dyslectic readers.
+
+This mechanism is generic in the sense that a framework is provided to define
+rules that run alongside text. Take this:
+
+\setupbars[foregroundcolor=darkyellow,color=darkred]
+
+\startbuffer
+\underbars {drawing \underbar{bars} under words is a typewriter leftover}
+\overstrikes {striking words makes them \overstrike {unreadable} but
+sometimes even \overbar {top lines} come into view.}
+\stopbuffer
+
+\typebuffer
+
+This shows up as:
+
+\getbuffer
+
+We can best explain what happens by looking at how these commands are
+defined:
+
+\starttyping
+\definebar[overbar] [method=1,dy=0.4, offset=1.8, continue=yes]
+\definebar[underbar] [method=1,dy=-0.4,offset=-0.3,continue=yes]
+\definebar[overstrike][method=0,dy=0.4, offset=0.5, continue=yes]
+
+\definebar
+ [understrike]
+ [method=0,
+ offset=1.375,
+ rulethickness=2.5,
+ continue=yes,
+ order=background]
+
+\definebar[overbars] [overbar] [continue=no]
+\definebar[underbars] [underbar] [continue=no]
+\definebar[overstrikes] [overstrike] [continue=no]
+\definebar[understrikes][understrike][continue=no]
+\stoptyping
+
+The formal definitions of the commands are show in \definition [definebar, setupbar].
+
+\showdefinition{definebar}
+\showdefinition{setupbar}
+
+The \type {dy} parameter specifies the shift up or down. The offset defines how
+nested bars are shifted. The \type {method} determines centering of the bar: we
+set it to zero when we want an overstrike. The \type {continue} parameter is
+responsible for drawing over spaces and the \type {order} determines the layering.
+
+The units are either hard coded values like points or relate to the font at the spot
+of the bar. Here are some examples:
+
+\startbuffer
+\setupbars[unit=mm,rulethickness=1] bar \underbar{foo} bar\quad
+\setupbars[unit=ex,rulethickness=1] bar \underbar{foo} bar\quad
+\setupbars[unit=pt,rulethickness=1] bar \underbar{foo} bar\quad
+\setupbars[unit=pt,rulethickness=10pt] bar \underbar{foo} bar
+\stopbuffer
+
+\typebuffer \blank \start \getbuffer \stop \blank
+
+As if underlining wasn't already bad enough, of course at some point there came a
+request for dashed lines.
+
+\startbuffer
+test \underrandoms{test me} and \underrandom{test} or \underrandom{grep}
+test \underdashes {test me} and \underdash {test} or \underdash {grep}
+test \underdots {test me} and \underdot {test} or \underdot {grep}
+\stopbuffer
+
+\typebuffer
+
+The above variants are predefined and render as:
+
+\startlines
+\tfb \getbuffer
+\stoplines
+
+A graphic is defined as follows. It boils down to drawing one or more shapes. In
+this example we also force a specific boundingbox so that the result gets
+positioned right.
+
+\starttyping
+\startuseMPgraphic{rules:under:...}
+ draw
+ ((0,RuleDepth) -- (RuleWidth,RuleDepth))
+ shifted (0,RuleFactor*RuleOffset)
+ withpen pencircle scaled RuleThickness
+ withcolor RuleColor ;
+ setbounds currentpicture to unitsquare xysized(RuleWidth,RuleHeight) ;
+\stopuseMPgraphic
+\stoptyping
+
+The following variables are available:
+
+\starttabulate[|T|||]
+\BC variable \BC type \BC meaning \NC \NR
+\ML
+\NC RuleDirection \NC string \NC the direction of the line \NC \NR
+\NC RuleOption \NC string \NC whatever the caller finds useful \NC \NR
+\NC RuleWidth \NC number \NC the requested width of the rule \NC \NR
+\NC RuleHeight \NC number \NC the requested height of the rule \NC \NR
+\NC RuleDepth \NC number \NC the requested depth of the rule \NC \NR
+\NC RuleThickness \NC number \NC the linewidth \NC \NR
+\NC RuleFactor \NC number \NC the set factor (e.g. an \type {ex}) \NC \NR
+\NC RuleOffset \NC number \NC an (optional) offset in case of nesting \NC \NR
+\NC RuleColor \NC color \NC the color \NC \NR
+\stoptabulate
+
+The \type {RuleFactor} can be used as multiplier for the \type {RuleOffset}.
+Later we will see an example of how to use the \type {RuleDirection} and \type
+{RuleOption}.
+
+The extra under commands are defined as follows. Watch the \type {mp} parameter:
+it refers to a graphic.
+
+\starttyping
+\definebar
+ [undergraphic]
+ [mp=rules:under:dash,
+ offset=-.2,
+ order=background]
+
+\definebar[underrandom] [undergraphic][mp=rules:under:random]
+\definebar[underrandoms][underrandom] [continue=yes]
+
+\definebar[underdash] [undergraphic][mp=rules:under:dash]
+\definebar[underdashes] [underdash] [continue=yes]
+
+\definebar[underdot] [undergraphic][mp=rules:under:dots]
+\definebar[underdots] [underdot] [continue=yes]
+\stoptyping
+
+A nasty side effect of the implementation is that because we look mostly at glyphs,
+optionally separated by glue or kern some text might get unseen and therefore not
+treated.
+
+\startbuffer
+\underbars{We see this \high{\tfxx ®} symbol \runninghbox to 1cm{\hss} often.}
+\underbar {We see this \high{\tfxx ®} symbol \runninghbox to 1cm{\hss} often.}
+\stopbuffer
+
+\typebuffer
+
+This gives:
+
+\startlines
+\getbuffer
+\stoplines
+
+A running box is seen as text. As you (probably) expect, a nested ornamental
+rule is supported as well:
+
+\startbuffer
+\underbars{We see this \high{\tfxx\underdot{®}} symbol \runninghbox to 1cm{\hss} often.}
+\underbar {We see this \high{\tfxx\underdot{®}} symbol \runninghbox to 1cm{\hss} often.}
+\stopbuffer
+
+\typebuffer
+
+This time we get (you might need a magnifier to see it):
+
+\startlines
+\getbuffer
+\stoplines
+
+\stopsubject
+
+\startsubject[title=Shifting]
+
+We mention shifting here because it shares code with the bars. There are two
+shifts defined but you can define more:
+
+\starttyping
+\defineshift
+ [shiftup]
+ [method=0,
+ dy=-1,
+ unit=ex,
+ continue=yes,
+ style=\txx]
+
+\defineshift
+ [shiftdown]
+ [method=1,
+ dy=.3,
+ unit=ex,
+ continue=yes,
+ style=\txx,
+ color=]
+\stoptyping
+
+An example of using the commands defined this way is:
+
+\startbuffer
+Let's go \shiftup{up} and \shiftdown{down} a bit!
+\stopbuffer
+
+\typebuffer
+
+or: \inlinebuffer\ Here we just shift words but you can shift more than that
+although I haven't yet seen a useful example of that:
+
+\startbuffer
+We can \shiftup {\input{tufte}} whole paragraphs if we really want.
+\stopbuffer
+
+\typebuffer
+
+\getbuffer
+
+The formal definitions are given in \definition[defineshift, setupshift,
+startshift]. The \type {align} switch is there for directional (and testing)
+purposes and is normally not used (or even useful in a line). The \type {dy}
+is multiplied by the \type {factor} that itself can depend on the used font.
+
+\showdefinition{defineshift}
+\showdefinition{setupshift}
+\showdefinition{startshift}
+
+\stopsubject
+
+\startsubject[title=Fillers]
+
+The possibility of line fillers was mentioned by Mojca on the \CONTEXT\ mailing
+list and it's actually not that hard to implement them. The only need I ever had
+for it was to fill out lines on some legal form and that was actually just some
+fun challenge in \MKII\ times. The code got lost and never made it into \CONTEXT.
+This time it was added as a side effect of a thread at the tenth \CONTEXT\
+meeting.
+
+The ideas is to fill the rest of a line with some kind of (ornamental) rule. I'm
+not sure what sense it makes, even in legal documents. If it is to prevent
+additions then one should wonder if additions at the end of a (kind of arbitrary)
+broken line is what we should be afraid of most. So, for now, let's consider it
+an educational feature.
+
+\startbuffer
+\definelinefiller
+ [filler-1]
+ [height=.75\exheight,
+ distance=.25\emwidth,
+ rulethickness=.25\exheight,
+ textcolor=darkyellow,
+ before=\blank,
+ after=\blank,
+ color=darkred]
+
+\startlinefiller[filler-1]
+ \input ward
+\stoplinefiller
+\stopbuffer
+
+\typebuffer
+
+Here we define a filler. As you can see, a rule gets added at the end of a
+paragraph.
+
+\getbuffer
+
+\startbuffer
+\startalign[flushleft,broad]
+ \startlinefiller[filler-1]
+ \input ward
+ \stoplinefiller
+\stopalign
+\stopbuffer
+
+This time we don't justify:
+
+\typebuffer
+
+Now more lines get a rule appended:
+
+\getbuffer
+
+Before we continue it must be noted that the environment creates a paragraph. If
+you don't want that you need to use \type {\setlinefiller} instead. Next we show
+a \type {middle} alignment:
+
+\startbuffer
+\startalign[middle]
+ \startlinefiller[filler-1]
+ \input ward
+ \stoplinefiller
+\stopalign
+\stopbuffer
+
+\getbuffer
+
+\startbuffer
+\startalign[middle]
+ \startnarrower
+ \startlinefiller[filler-1]
+ \input ward
+ \stoplinefiller
+ \stopnarrower
+\stopalign
+\stopbuffer
+
+Let's add another level of complexity, left- and right skips:
+
+\typebuffer
+
+Here we get:
+
+\getbuffer
+
+The lines stay within the narrower boundaries but you can extend them
+to the margins if you like:
+
+\startbuffer
+\startalign[middle]
+ \startnarrower
+ \startlinefiller[filler-1][scope=global]
+ \input ward
+ \stoplinefiller
+ \stopnarrower
+\stopalign
+\stopbuffer
+
+\typebuffer
+
+This looks like:
+
+\getbuffer
+
+You can also use a \type {left} or \type {right} scope, as in:
+
+\startbuffer
+\startalign[middle]
+ \startnarrower
+ \startlinefiller[filler-1][scope=right]
+ \input ward
+ \stoplinefiller
+ \stopnarrower
+\stopalign
+\stopbuffer
+
+\typebuffer
+
+Only the right rules extend into the margins.
+
+\getbuffer
+
+\startbuffer
+\startalign[middle]
+ \startnarrower
+ \startlinefiller[filler-1][scope=right,location=right]
+ \input ward
+ \stoplinefiller
+ \stopnarrower
+\stopalign
+\stopbuffer
+
+You can get rid of the left rules:
+
+\typebuffer
+
+So:
+
+\getbuffer
+
+Of course these rules are somewhat boring so let's now kick in some \METAPOST.
+
+\startbuffer[mp]
+\setuplinefiller
+ [filler-1]
+ [mp=rules:filler:demo,
+ %threshold=.25\emwidth,
+ color=darkred]
+
+\startuseMPgraphic{rules:filler:demo}
+ drawarrow
+ if RuleDirection == "TRT" : reverse fi
+ ((0,RuleHeight) -- (RuleWidth,RuleHeight))
+ withpen
+ pencircle scaled RuleThickness
+ withcolor
+ if RuleOption == "left" : complemented fi RuleColor ;
+ setbounds currentpicture to
+ unitsquare xysized(RuleWidth,RuleHeight) ;
+\stopuseMPgraphic
+\stopbuffer
+
+\typebuffer[mp] \getbuffer[mp]
+
+The previous example now looks like:
+
+\getbuffer
+
+\startbuffer
+\startalign[middle,r2l]
+ \startnarrower[4*middle]
+ \startlinefiller[filler-1] [scope=global]
+ \input ward
+ \stoplinefiller
+ \stopnarrower
+\stopalign
+\stopbuffer
+
+This time we also change the direction and we can let the \METAPOST\ graphic
+adapt to that by reverting the arrows.
+
+\typebuffer
+
+The direction \type {TRT} is \TEX\ speak for a right|-|to|-|left direction. We
+use a latin script example for convenience.
+
+\getbuffer
+
+\startbuffer[mp]
+\startuseMPgraphic{rules:filler:demo}
+ drawarrow
+ if RuleDirection == "TRT" : reverse fi
+ if RuleOption == "right" : reverse fi
+ ((0,RuleHeight) -- (RuleWidth,RuleHeight))
+ withpen
+ pencircle scaled RuleThickness
+ withcolor
+ if RuleOption == "left" : complemented fi RuleColor ;
+ setbounds currentpicture to
+ unitsquare xysized(RuleWidth,RuleHeight) ;
+\stopuseMPgraphic
+\stopbuffer
+
+% \startbuffer
+% \startnarrower[4*middle]
+% \startlinefiller[filler-1] [scope=global,align=middle]
+% \parindent 100pt
+% \parfillskip 100pt
+% \input ward
+% \stoplinefiller
+% \stopnarrower
+% \stopbuffer
+
+\startbuffer
+\startnarrower[4*middle]
+ \startlinefiller[filler-1] [scope=global,align={middle,r2l}]
+ \parindent 100pt
+ \parfillskip 100pt
+ \input ward
+ \stoplinefiller
+\stopnarrower
+\stopbuffer
+
+The next rendering shows what happens when we set \type {\parindent} and \type
+{\parfillskip} to an excessive have a \type {100pt}.
+
+\getbuffer[mp] \getbuffer
+
+Here we have adapted the graphic a bit:
+
+\starttyping
+if RuleDirection == "TRT" : reverse fi
+ if RuleOption == "right" : reverse fi
+ ((0,RuleHeight) -- (RuleWidth,RuleHeight))
+\stoptyping
+
+\showdefinition{definelinefiller}
+\showdefinition{setuplinefiller}
+
+\stopsubject
+
+% \startsubject[title=Backgrounds]
+% \stopsubject
+
+\startsubject[title=User rules]
+
+Characters and rules are the only graphical elements that \TEX\ really knows
+about. Even if you see images in a document, you should realize that they are
+just blobs with dimensions and that the backend replaces such blobs by real
+images.
+
+The primitive operations for rules are \type {\hrule} and \type {\vrule} and the
+main difference is to what way they adapt to their situation when no dimensions
+are given and the mode change they trigger.
+
+\startbuffer
+hrule{\darkred \hrule width 10cm height 3mm depth 2mm}\par
+vrule{\darkyellow\vrule width 10cm height 3mm depth 2mm}\par
+hrule{\darkred \hrule width 10cm }\par
+vrule{\darkyellow\vrule height 3mm depth 2mm}\par
+
+hrule{\darkred \leaders\hrule height 1mm\relax\hfill}hrule\par
+\stopbuffer
+
+\typebuffer
+
+When more text is to follow you should end a specification with \type {\relax} to
+make sure that the scanner stops looking for more arguments. With \type {\leaders}
+you can create flexible rules.
+
+\startlinecorrection
+\getbuffer
+\stoplinecorrection
+
+In \CONTEXT\ we also have so called frame rules:
+
+\startbuffer
+\color[darkred]{\frule
+ width 10cm
+ height 1cm
+ line 1mm
+\relax}
+\stopbuffer
+
+\typebuffer
+
+This will produce a rectangle:
+
+\startlinecorrection
+\getbuffer
+\stoplinecorrection
+
+There are a few more keywords. Keep in mind that we actually have a new kind of
+primitive here, so we follow the \TEX\ conventions of keywords.
+
+\startbuffer
+\ruledhbox\bgroup
+ \darkgray \frule width 100mm height 10mm depth 8mm radius 2mm line 2pt type fill\relax
+ \hskip-100mm
+ \darkred \frule width 100mm height 10mm depth 8mm radius 2mm line 2pt\relax
+ \hskip-100mm
+ \hbox to 100mm{\white \bold \hfill some handy word with frames\hfill}
+\egroup
+\stopbuffer
+
+\typebuffer
+
+Of course this is a rather low level way of doing frames and such, but when you
+like that kind of low level programming you get the possibility here.
+
+\startlinecorrection
+\getbuffer
+\stoplinecorrection
+
+You can combine this with existing mechanisms. Take the following:
+
+\startbuffer
+\defineoverlay[normalframe]
+ [\frule
+ width \overlaywidth
+ height\overlayheight
+ line \overlaylinewidth
+ ]
+
+\defineoverlay[ovalframe]
+ [\frule
+ width \overlaywidth
+ height \overlayheight
+ line \overlaylinewidth
+ radius \overlayradius
+ ]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer
+\hbox \bgroup
+ \framed {test}\quad
+ \framed[frame=off] {test}\quad
+ \framed[background=normalframe,frame=off]{test}\quad
+ \framed[background=normalframe,frame=off]{test}\quad
+ \framed[corner=round] {test}\quad
+ \framed[corner=round] {test}\quad
+ \framed[background=ovalframe,frame=off] {test}\quad
+ \framed[background=ovalframe,frame=off] {test}\quad
+ \framed[background=ovalframe,frame=on] {test}\quad
+ \framed[background=ovalframe,frame=on] {test}\quad
+\egroup
+\stopbuffer
+
+This is a variant on the already available round corners:
+
+\startlinecorrection
+\getbuffer
+\stoplinecorrection
+
+The above result is accomplished with:
+
+\typebuffer
+
+Given the examples in the previous sections it will be no surprise that we
+can also use \METAPOST.
+
+\startbuffer
+\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 4RuleThickness ;
+\stopuseMPgraphic
+
+\hbox\bgroup
+ \darkgray \frule width 100mm height 10mm depth 8mm type mp line 2pt
+ data {\includeMPgraphic{demoshape:back}}
+ \relax
+ \hskip-100mm
+ \darkred \frule width 100mm height 10mm depth 8mm type mp line 2pt
+ data {\includeMPgraphic{demoshape:fore}}
+ \relax
+ \hskip-100mm
+ \hbox to 100mm{\white \bold \hfill some handy word with frames\hfill}
+\egroup
+\stopbuffer
+
+\typebuffer
+
+Or rendered:
+
+\startlinecorrection
+\getbuffer
+\stoplinecorrection
+
+The \type {\blackrule} command is the more high level way to inject a rule.
+
+\startbuffer
+\blackrule
+ [width=10cm,
+ height=1cm,
+ depth=1cm,
+ color=darkred]
+\stopbuffer
+
+\typebuffer
+
+This produces a boring rule:
+
+\startlinecorrection
+\getbuffer
+\stoplinecorrection
+
+Again we can revert to \METAPOST:
+
+\startbuffer
+\blackrule
+ [width=10cm,
+ height=1cm,
+ depth=1cm,
+ color=darkred,
+ type=mp,
+ mp=demoshape:back]
+\stopbuffer
+
+\typebuffer
+
+or:
+
+\startlinecorrection
+\getbuffer
+\stoplinecorrection
+
+The formal definition of this command is shown in \definition [setupblackrules,
+blackrule].
+
+\showdefinition{setupblackrules}
+\showdefinition{blackrule}
+
+\stopsubject
+
+\startsubject[title=Hiding]
+
+In education a to be filled in text is often represented by a gap in the running text
+and the bar drawing mechanism supports this. THere is a predefined \type {\hiddenbar}
+command:
+
+\starttyping
+\definebar
+ [hiddenbar] [underbar]
+ [continue=yes,empty=yes,
+ left=\zwj,right=\zwj]
+\stoptyping
+
+\startbuffer
+\input ward \hiddenbar {\color[red]{invisible}}
+\input ward \hiddenbar {\quad\color[red]{invisible}\quad}
+\input ward \hiddenbar{\quad\quad\quad\color[red]{invisible}\quad\quad\quad}
+\input ward \hiddenbar {\color[red]{invisible}\quad\quad\quad\quad\quad\quad}
+\input ward
+\stopbuffer
+
+\getbuffer
+
+The previous text is generated with:
+
+\typebuffer
+
+Here is a variant that inserts spacing at the left and right edges. In this case
+the spacing is kept at a linebreak:
+
+\startbuffer
+\definebar
+ [widehiddenbar]
+ [hiddenbar]
+ [left={\quads[3]},
+ right={\quads[3]}]
+
+\widehiddenbar{invisible} \input weisman
+\widehiddenbar{invisible} \input weisman
+\widehiddenbar{invisible}
+\stopbuffer
+
+\typebuffer
+
+\getbuffer
+
+\stopsubject
+
+\stopdocument
diff --git a/doc/context/sources/general/manuals/spacing/spacing-mkiv.tex b/doc/context/sources/general/manuals/spacing/spacing-mkiv.tex
index 4261a3884..375f4e2a8 100644
--- a/doc/context/sources/general/manuals/spacing/spacing-mkiv.tex
+++ b/doc/context/sources/general/manuals/spacing/spacing-mkiv.tex
@@ -1,3 +1,20 @@
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
+%
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+%
+% comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt
+% Group journal or otherwise. Thanks to the editors for corrections. Also thanks
+% to users for testing, feedback and corrections.
+
\environment spacing-style
\startdocument
diff --git a/doc/context/sources/general/manuals/spreadsheets/spreadsheets-mkiv.tex b/doc/context/sources/general/manuals/spreadsheets/spreadsheets-mkiv.tex
new file mode 100644
index 000000000..c5c99e97d
--- /dev/null
+++ b/doc/context/sources/general/manuals/spreadsheets/spreadsheets-mkiv.tex
@@ -0,0 +1,760 @@
+% language=uk
+
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
+%
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+%
+% comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt
+% Group journal or otherwise. Thanks to the editors for corrections. Also thanks
+% to users for testing, feedback and corrections.
+
+\usemodule[spreadsheet]
+\usemodule[art-01,abr-02]
+
+\definecolor[darkred] [r=.4]
+\definecolor[darkgreen][g=.4]
+\definecolor[darkblue] [b=.4]
+
+\definecolor[maincolor] [darkred]
+\definecolor[extracolor][darkblue]
+
+\setuptyping
+ [color=extracolor]
+
+\setuptype
+ [color=extracolor]
+
+\setuphead
+ [section]
+ [color=maincolor]
+
+\setupbodyfont
+ [10pt]
+
+\setupinteraction
+ [hidden]
+
+% \setupnumbering
+% [alternative=doublesided]
+
+\startdocument
+ [metadata:author=Hans Hagen,
+ metadata:title=Simple Spreadsheets,
+ author=Hans Hagen,
+ affiliation=PRAGMA ADE,
+ location=Hasselt NL,
+ title=Simple Spreadsheets,
+ extra=ConTeXt MkIV,
+ 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 ;
+
+ for i=1 upto n :
+ for j=1 upto m :
+ fill
+ unitsquare
+ xysized (w,h)
+ shifted ((i-1)*w,(j-1)*h)
+ withcolor .5[i*red/n,j*blue/m]
+ ;
+ endfor ;
+ endfor ;
+
+ for i=1 upto n :
+ for j=1 upto m :
+ draw
+ textext("\tt" & char(64+i) & if j < 10 : "0" else : "" fi & decimal j)
+ xysized (.7*w,.7*h)
+ shifted (i*w-.5w,(m+1-j)*h-.5h)
+ withcolor .5[(n+1-i)*green/n,(m+1-j)*yellow/m]
+ ;
+ endfor ;
+ endfor ;
+
+ draw
+ textext.llft("\ssbf{\documentvariable{title}}")
+ xsized (PaperHeight-h)
+ rotated 90
+ shifted (PaperWidth-1.75w,PaperHeight-h/2)
+ withcolor white
+ ;
+
+ draw
+ textext.llft("\ssbf{\documentvariable{extra}}")
+ ysized (h/2)
+ shifted (PaperWidth-2.5w,3.75h)
+ withcolor white
+ ;
+
+
+ draw
+ textext.llft("\ssbf{\documentvariable{author}}")
+ ysized (h/2)
+ shifted (PaperWidth-2.5w,2.75h)
+ withcolor white
+ ;
+
+ draw
+ textext.llft("\ssbf \currentdate")
+ ysized (h/2)
+ shifted (PaperWidth-2.5w,1.75h)
+ withcolor white
+ ;
+
+ StopPage;
+
+\stopMPpage
+
+% \page[empty] \setuppagenumber[start=1]
+
+\startsubject[title={Contents}]
+
+\placelist[section][criterium=all,interaction=all]
+
+\stopsubject
+
+\startsection [title={Introduction}]
+
+Occasionally a question pops up on the \CONTEXT\ mailing list and answering it
+becomes a nice distraction from a boring task at hand. The spreadsheet module is
+the result of such a diversion. As with more support code in \CONTEXT, this is
+not a replacement for \quote {the real thing} but just a nice feature for simple
+cases. The module is loaded with
+
+\starttyping
+\usemodule[spreadsheet]
+\stoptyping
+
+So this is (at least currently) not one of the core functionalities but an
+add||on. Of course some useful extensions might appear in the future.
+
+\stopsection
+
+\startsection [title={Spreadsheet tables}]
+
+We can use \LUA\ in each cell, because under the hood it is all \LUA. There is
+some basic parsing applied so that we can use the usual \type {A..Z} variables to
+access cells.
+
+\startbuffer[demo]
+\startspreadsheettable[test]
+ \startrow
+ \startcell 1.1 \stopcell
+ \startcell 2.1 \stopcell
+ \startcell A[1] + B[1] \stopcell
+ \stoprow
+ \startrow
+ \startcell 2.1 \stopcell
+ \startcell 2.2 \stopcell
+ \startcell A[2] + B[2] \stopcell
+ \stoprow
+ \startrow
+ \startcell A[1] + B[1] \stopcell
+ \startcell A[2] + B[2] \stopcell
+ \startcell A[3] + B[3] \stopcell
+ \stoprow
+\stopspreadsheettable
+\stopbuffer
+
+\typebuffer[demo]
+
+The rendering is shown in \in {figure} [spreadsheet:1]. Keep in mind that in
+\LUA\ all calculations are done using floats, at least in \LUA\ versions with
+version numbers preceding 5.3.
+
+\placefigure
+ [here]
+ [spreadsheet:1]
+ {A simple spreadsheet.}
+ {\getbuffer[demo]}
+
+The last cell can also look like this:
+
+\starttyping
+\startcell
+function()
+ local s = 0
+ for i=1,2 do
+ for j=1,2 do
+ s = s + dat[i][j]
+ end
+ end
+ return s
+end
+\stopcell
+\stoptyping
+
+The content of a cell is either a number or a function. In this example
+we just loop over the (already set) cells and calculate their sum. The
+\type {dat} variable accesses the grid of cells.
+
+\starttyping
+\startcell
+function()
+ local s = 0
+ for i=1,2 do
+ for j=1,2 do
+ s = s + dat[i][j]
+ end
+ end
+ tmp.total = s
+end
+\stopcell
+\stoptyping
+
+In this variant we store the sum in the table \type {tmp} which is local to the
+current sheet. Another table is \type {fnc} where we can store functions. This
+table is shared between all sheets. There are two predefined functions:
+
+\starttyping
+sum(columnname,firstrow,lastrow)
+fmt(specification,n)
+\stoptyping
+
+The \type {sum} function works top||down in columns, and roughly looks like
+this:
+
+\starttyping
+function sum(currentcolumn,firstrow,lastrow)
+ local r = 0
+ for i = firstrow, lastrow do
+ r = r + cells[currentcolumn][i]
+ end
+ return r
+end
+\stoptyping
+
+The last two arguments are optional:
+
+\starttyping
+sum(columnname,lastrow)
+\stoptyping
+
+This is equivalent to:
+
+\starttyping
+function sum(currentcolumn,lastrow)
+ local r = 0
+ for i = 1, lastrow do
+ r = r + cells[currentcolumn][i]
+ end
+ return r
+end
+\stoptyping
+
+While:
+
+\starttyping
+sum(columnname)
+\stoptyping
+
+boils down to:
+
+\starttyping
+function sum(currentcolumn)
+ local r = 0
+ for i = 1, currentrow do
+ r = r + cells[currentcolumn][i]
+ end
+ return r
+end
+\stoptyping
+
+Empty cells or cells that have no numbers are skipped. Let's now see these
+functions in action:
+
+\startbuffer[demo]
+\startspreadsheettable[test]
+ \startrow
+ \startcell 1.1 \stopcell \startcell 2.1 \stopcell
+ \stoprow
+ \startrow
+ \startcell 2.1 \stopcell \startcell 2.2 \stopcell
+ \stoprow
+ \startrow
+ \startcell
+ function()
+ local s = 0
+ for i=1,2 do
+ for j=1,2 do
+ s = s + dat[i][j]
+ end
+ end
+ context.bold(s)
+ end
+ \stopcell
+ \startcell
+ function()
+ local s = 1
+ for i=1,2 do
+ for j=1,2 do
+ s = s * dat[i][j]
+ end
+ end
+ context.bold(fmt("@.1f",s))
+ end
+ \stopcell
+ \stoprow
+\stopspreadsheettable
+\stopbuffer
+
+\typebuffer[demo]
+
+The result is shown in \in {figure} [spreadsheet:2]. Watch the \type {fmt} call:
+we use an at sign instead of a percent to please \TEX.
+
+\placefigure
+ [here]
+ [spreadsheet:2]
+ {Cells can be (complex) functions.}
+ {\getbuffer[demo]}
+
+Keep in mind that we're typesetting and that doing complex calculations is not
+our main objective. A typical application of this module is in making bills, for
+which you can combine it with the correspondence modules. We leave that as an
+exercise for the reader and stick to a simple example.
+
+\startbuffer[demo]
+\startspreadsheettable[test]
+ \startrow
+ \startcell[align=flushleft,width=8cm] "item one" \stopcell
+ \startcell[align=flushright,width=3cm] @ "0.2f EUR" 3.50 \stopcell
+ \stoprow
+ \startrow
+ \startcell[align=flushleft] "item two" \stopcell
+ \startcell[align=flushright] @ "0.2f EUR" 8.45 \stopcell
+ \stoprow
+ \startrow
+ \startcell[align=flushleft] "tax 19\percent" \stopcell
+ \startcell[align=flushright] @ "0.2f EUR" 0.19 * (B[1]+B[2]) \stopcell
+ \stoprow
+ \startrow
+ \startcell[align=flushleft] "total 1" \stopcell
+ \startcell[align=flushright] @ "0.2f EUR" sum(B,1,3) \stopcell
+ \stoprow
+ \startrow
+ \startcell[align=flushleft] "total 2" \stopcell
+ \startcell[align=flushright] @ "0.2f EUR" B[1] + B[2] + B[3] \stopcell
+ \stoprow
+ \startrow
+ \startcell[align=flushleft] "total 3" \stopcell
+ \startcell[align=flushright] @ "0.2f EUR" sum(B) \stopcell
+ \stoprow
+\stopspreadsheettable
+\stopbuffer
+
+\typebuffer[demo]
+
+Here (and in \in {figure} [spreadsheet:8]) you see a quick and more
+readable way to format cell content. The \type {@} in the template is
+optional, but needed in cases like this:
+
+\starttyping
+@ "(@0.2f) EUR" 8.45
+\stoptyping
+
+A \type {@} is only prepended when no \type {@} is given in the template.
+
+\placefigure
+ [here]
+ [spreadsheet:8]
+ {Cells can be formatted by using \type {@} directives.}
+ {\getbuffer[demo]}
+
+In practice this table we can be less specific and let \type {\sum} behave more
+automatical. That way the coding can be simplified (see \in {figure}
+[spreadsheet:7]) and also look nicer.
+
+\startbuffer[demo]
+\startspreadsheettable[test][frame=off]
+ \startrow
+ \startcell[align=flushleft,width=8cm] "The first item" \stopcell
+ \startcell[align=flushright,width=3cm] @ "0.2f EUR" 3.50 \stopcell
+ \stoprow
+ \startrow
+ \startcell[align=flushleft] "The second item" \stopcell
+ \startcell[align=flushright] @ "0.2f EUR" 8.45 \stopcell
+ \stoprow
+ \startrow
+ \startcell[align=flushleft] "The third item" \stopcell
+ \startcell[align=flushright] @ "0.2f EUR" 5.90 \stopcell
+ \stoprow
+ \startrow[topframe=on]
+ \startcell[align=flushleft] "VAT 19\percent" \stopcell
+ \startcell[align=flushright] @ "0.2f EUR" 0.19 * sum(B) \stopcell
+ \stoprow
+ \startrow[topframe=on]
+ \startcell[align=flushleft] "\bf Grand total" \stopcell
+ \startcell[align=flushright] @ "0.2f EUR" sum(B) \stopcell
+ \stoprow
+\stopspreadsheettable
+\stopbuffer
+
+\typebuffer[demo]
+
+\placefigure
+ [here]
+ [spreadsheet:7]
+ {The \type {sum} function accumulates stepwise.}
+ {\getbuffer[demo]}
+
+There are a few more special start characters. This is demonstrated in \in
+{figure} [spreadsheet:9]. An \type {=} character is ignored. \footnote {Taco
+suggested to support this because some spreadsheet programs use that character to
+flush a value.} When we start with an \type {!}, the content is not typeset.
+Strings can be surrounded by single or double quotes and are not really
+processed.
+
+\startbuffer[demo]
+\startspreadsheettable[test][offset=1ex]
+ \startrow
+ \startcell[align=flushleft] "first" \stopcell
+ \startcell[align=flushleft] '\type{@ "[@i]" 1}' \stopcell
+ \startcell[align=flushright,width=3cm] @ "[@i]" 1 \stopcell
+ \stoprow
+ \startrow
+ \startcell[align=flushleft] "second" \stopcell
+ \startcell[align=flushleft] '\type{= 2}' \stopcell
+ \startcell[align=flushright] = 2 \stopcell
+ \stoprow
+ \startrow
+ \startcell[align=flushleft] "third" \stopcell
+ \startcell[align=flushleft] '\type{! 3}' \stopcell
+ \startcell[align=flushright] ! 3 \stopcell
+ \stoprow
+ \startrow
+ \startcell[align=flushleft] "fourth" \stopcell
+ \startcell[align=flushleft] '\type{4}' \stopcell
+ \startcell[align=flushright] 4 \stopcell
+ \stoprow
+ \startrow
+ \startcell[align=flushleft] "\bf total one" \stopcell
+ \startcell[align=flushleft] '\type{sum(C)}' \stopcell
+ \startcell[align=flushright] sum(C) \stopcell
+ \stoprow
+ \startrow
+ \startcell[align=flushleft] "\bf total two" \stopcell
+ \startcell[align=flushleft] '\type{= sum(C)}' \stopcell
+ \startcell[align=flushright] = sum(C) \stopcell
+ \stoprow
+\stopspreadsheettable
+\stopbuffer
+
+\typebuffer[demo]
+
+The \type {sum} function is clever enough not to include itself in the
+summation. Only preceding cells are taken into account, given that they
+represent a number.
+
+\placefigure
+ [here]
+ [spreadsheet:9]
+ {Cells can be hidden by \type {!} and can contain strings only.}
+ {\getbuffer[demo]}
+
+\stopsection
+
+\startsection [title={Normal tables}]
+
+In the previous examples we used \TEX\ commands for structuring the sheet but
+the content of cells is \LUA\ code. It is also possible to stick to a regular
+table and use specific commands to set and get cell data.
+
+\startbuffer[demo]
+\bTABLE[align=middle]
+ \bTR
+ \bTD \getspr{100} \eTD \bTD test \setspr{30} \eTD
+ \eTR
+ \bTR
+ \bTD \getspr{20} \eTD \bTD \getspr{4+3} \eTD
+ \eTR
+ \bTR
+ \bTD \getspr{A[1] + A[2]} \eTD
+ \bTD \getspr{B1 + B2} \eTD
+ \eTR
+ \bTR
+ \bTD[nx=2] \bf \getspr{(A[3] + B[3]) /100} \eTD
+ \eTR
+ \bTR
+ \bTD[nx=2] \bf \getspr{fmt("@0.3f",(A[3] + B[3]) /100)} \eTD
+ \eTR
+ \bTR
+ \bTD[nx=2] \bf \getspr{fmt("@0.3f",(sum(A,1,2)) / 10)} \eTD
+ \eTR
+\eTABLE
+\stopbuffer
+
+\typebuffer[demo]
+
+The method to use depends on the complexity of the table. If there is
+more text than data then this method is probably more comfortable.
+
+\placefigure
+ [here]
+ [spreadsheet:3]
+ {A sheet can be filled and accessed from regular tables.}
+ {\getbuffer[demo]}
+
+% \setupspreadsheet[mysheet]
+%
+% \startspreadsheet[mysheet]
+%
+% \bTABLE[align=middle]
+% \bTR
+% \bTD \getspr{100} \eTD \bTD test \setspr{30} \eTD
+% \eTR
+% \bTR
+% \bTD \getspr{20} \eTD \bTD \getspr{4+3.5} \eTD
+% \eTR
+% \bTR
+% \bTD \getspr{A[1] + A[2]} \eTD
+% \bTD \getspr{B[1] + B[2]} \eTD
+% \eTR
+% \bTR
+% \bTD[nx=2] \bf \getspr{A[3] + B[3]} \eTD
+% \eTR
+% \eTABLE
+%
+% \stopspreadsheet
+
+\stopsection
+
+\startsection[title={A few settings}]
+
+It's possible to influence the rendering. The following example demonstrates
+this. We don't use any formatting directives.
+
+\startbuffer[demo]
+\startspreadsheettable[test]
+ \startrow
+ \startcell 123456.78 \stopcell
+ \stoprow
+ \startrow
+ \startcell 1234567.89 \stopcell
+ \stoprow
+ \startrow
+ \startcell A[1] + A[2] \stopcell
+ \stoprow
+\stopspreadsheettable
+\stopbuffer
+
+\typebuffer[demo]
+
+\placefigure
+ [here]
+ [spreadsheet:4]
+ {Formatting (large) numbers.}
+ {\getbuffer[demo]}
+
+\in {Figure} [spreadsheet:4] demonstrates how this gets rendered by
+default. However, often you want numbers to be split in parts separated by
+periods and commas. This can be done as follows:
+
+\startbuffer[setup]
+\definehighlight[BoldAndRed] [style=bold,color=darkred]
+\definehighlight[BoldAndGreen][style=bold,color=darkgreen]
+
+\setupspreadsheet
+ [test]
+ [period={\BoldAndRed{.}},
+ comma={\BoldAndGreen{,}},
+ split=yes]
+\stopbuffer
+
+\typebuffer[setup] \getbuffer[setup]
+
+\placefigure
+ [here]
+ [spreadsheet:5]
+ {Formatting (large) numbers with style and color.}
+ {\getbuffer[setup,demo]}
+
+\stopsection
+
+\startsection[title={The \LUA\ end}]
+
+You can also use spreadsheets from within \LUA. The following example is
+rather straightforward:
+
+\startbuffer[demo-a]
+\startluacode
+context.startspreadsheettable { "test" }
+ context.startrow()
+ context.startcell() context("123456.78") context.stopcell()
+ context.stoprow()
+ context.startrow()
+ context.startcell() context("1234567.89") context.stopcell()
+ context.stoprow()
+ context.startrow()
+ context.startcell() context("A[1] + A[2]") context.stopcell()
+ context.stoprow()
+context.stopspreadsheettable()
+\stopluacode
+\stopbuffer
+
+\typebuffer[demo-a]
+
+However, even more \LUA|-|ish is the next variant:
+
+\startbuffer[demo-b]
+\startluacode
+ local set = moduledata.spreadsheets.set
+ local get = moduledata.spreadsheets.get
+
+ moduledata.spreadsheets.start("test")
+ set("test",1,1,"123456.78")
+ set("test",2,1,"1234567.89")
+ set("test",3,1,"A[1] + A[2]")
+ moduledata.spreadsheets.stop()
+
+ context.bTABLE()
+ context.bTR()
+ context.bTD() context(get("test",1,1)) context.eTD()
+ context.eTR()
+ context.bTR()
+ context.bTD() context(get("test",2,1)) context.eTD()
+ context.eTR()
+ context.bTR()
+ context.bTD() context(get("test",3,1)) context.eTD()
+ context.eTR()
+ context.eTABLE()
+\stopluacode
+\stopbuffer
+
+\typebuffer[demo-b]
+
+Of course the second variant does not make much sense as we can do this way
+more efficient by not using a spreadsheet at all:
+
+\startbuffer[demo-c]
+\startluacode
+ local A1, A2 = 123456.78, 1234567.89
+ context.bTABLE()
+ context.bTR()
+ context.bTD() context(A1) context.eTD()
+ context.eTR()
+ context.bTR()
+ context.bTD() context(A2) context.eTD()
+ context.eTR()
+ context.bTR()
+ context.bTD() context(A1+A2) context.eTD()
+ context.eTR()
+ context.eTABLE()
+\stopluacode
+\stopbuffer
+
+\typebuffer[demo-c]
+
+You can of course use format explicitly. Here we use the normal percent
+directives because we're in \LUA, and not in \TEX, where percentage
+signs are a bit of an issue.
+
+\startbuffer[demo-d]
+\startluacode
+ local A1, A2 = 123456.78, 1234567.89
+ local options = { align = "flushright" }
+ context.bTABLE()
+ context.bTR()
+ context.bTD(options)
+ context("%0.2f",A1)
+ context.eTD()
+ context.eTR()
+ context.bTR()
+ context.bTD(options)
+ context("%0.2f",A2)
+ context.eTD()
+ context.eTR()
+ context.bTR()
+ context.bTD(options)
+ context("%0.2f",A1+A2)
+ context.eTD()
+ context.eTR()
+ context.eTABLE()
+\stopluacode
+\stopbuffer
+
+\typebuffer[demo-d]
+
+As expected and shown in \in {figure} [spreadsheet:6], only the first and last
+variant gets the numbers typeset nicely.
+
+\placefigure
+ [here]
+ [spreadsheet:6]
+ {Spreadsheets purely done as \CONTEXT\ \LUA\ Document.}
+ {\startcombination[4*1]
+ {\getbuffer[demo-a]} {}
+ {\getbuffer[demo-b]} {}
+ {\getbuffer[demo-c]} {}
+ {\getbuffer[demo-d]} {}
+ \stopcombination}
+
+\stopsection
+
+\startsection[title={Helper macros}]
+
+There are two helper macros that you can use to see what is stored in a
+spreadsheet:
+
+\starttyping
+\inspectspreadsheet[test]
+\showspreadsheet [test]
+\stoptyping
+
+The first command reports the content of \type {test} to the console, and
+the second one typesets it in the running text:
+
+\blank
+\showspreadsheet[test]
+\blank
+
+Another helper function is \type {\doifelsespreadsheetcell}, You can use this
+one to check if a cell is set.
+
+\startbuffer[demo]
+(1,1): \doifelsespreadsheetcell[test]{1}{1}{set}{unset}
+(2,2): \doifelsespreadsheetcell[test]{2}{2}{set}{unset}
+(9,9): \doifelsespreadsheetcell[test]{9}{9}{set}{unset}
+\stopbuffer
+
+\typebuffer[demo]
+
+This gives:
+
+\startlines
+\getbuffer[demo]
+\stoplines
+
+There is not much more to say about this module, apart from that it is a
+nice example of a \TEX\ and \LUA\ mix. Maybe some more (basic) functionality
+will be added in the future but it all depends on usage.
+
+\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/doc/context/sources/general/manuals/sql/sql-mkiv.tex b/doc/context/sources/general/manuals/sql/sql-mkiv.tex
index ec2c999aa..dabb0a34f 100644
--- a/doc/context/sources/general/manuals/sql/sql-mkiv.tex
+++ b/doc/context/sources/general/manuals/sql/sql-mkiv.tex
@@ -12,6 +12,10 @@
% with existing functionality and we cannot be held responsible for that. Many of
% the manuals contain characteristic graphics and personal notes or examples that
% make no sense when used out-of-context.
+%
+% comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt
+% Group journal or otherwise. Thanks to the editors for corrections. Also thanks
+% to users for testing, feedback and corrections.
\usemodule[art-01,abr-02]
@@ -93,7 +97,7 @@ 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.}
+change, if only because we use it in production.}
\stopsection
@@ -135,6 +139,15 @@ and then load it as follows:
local presets = table.load("presets.lua")
\stoptyping
+A \type {sqlite} database has a much simpler preset. The default suffix of the
+file is \type {db}. The other fields are just ignored.
+
+\starttyping
+return {
+ database = "test",
+}
+\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
@@ -232,7 +245,7 @@ local data, keys = utilities.sql.execute {
presets = presets,
template = template,
variables = {
- artist = "Dream Theater",
+ artist = "Porcupine Tree",
},
}
\stoptyping
@@ -478,6 +491,94 @@ context --extra=sql-tables --help
\stopsection
+\startsection[title=Example]
+
+The distribution has a few examples, for instance a logger. The following code shows
+a bit of this (we assume that the swiglib sqlite module is present):
+
+\startbuffer
+require("util-sql")
+utilities.sql.setmethod("sqlite")
+require("util-sql-loggers")
+
+local loggers = utilities.sql.loggers
+
+local presets = {
+ -- method = "sqlite",
+ database = "loggertest",
+ datatable = "loggers",
+ id = "loggers",
+}
+
+os.remove("loggertest.db") -- start fresh
+
+local db = loggers.createdb(presets)
+
+loggers.save(db, { -- variant 1: data subtable
+ type = "error",
+ action = "process",
+ data = { filename = "test-1", message = "whatever a" }
+} )
+
+loggers.save(db, { -- variant 2: flat table
+ type = "warning",
+ action = "process",
+ filename = "test-2",
+ message = "whatever b"
+} )
+
+
+local result = loggers.collect(db, {
+ start = {
+ day = 1,
+ month = 1,
+ year = 2016,
+ },
+ stop = {
+ day = 31,
+ month = 12,
+ year = 2116,
+ },
+ limit = 1000000,
+ -- type = "error",
+ action = "process"
+})
+
+context.starttabulate { "||||||" }
+for i=1,#result do
+ local r = result[i]
+ context.NC() context(r.time)
+ context.NC() context(r.type)
+ context.NC() context(r.action)
+ if r.data then
+ context.NC() context(r.data.filename)
+ context.NC() context(r.data.message)
+ else
+ context.NC()
+ context.NC()
+ end
+ context.NC() context.NR()
+end
+context.stoptabulate()
+
+-- local result = loggers.cleanup(db, {
+-- before = {
+-- day = 1,
+-- month = 1,
+-- year = 2117,
+-- },
+-- })
+\stopbuffer
+
+\typebuffer
+
+In this example we typeset the (small) table):
+
+\ctxluabuffer
+
+
+\stopsection
+
\startsection[title=Colofon]
\starttabulate[|B|p|]
diff --git a/doc/context/sources/general/manuals/steps/steps-mkiv.tex b/doc/context/sources/general/manuals/steps/steps-mkiv.tex
new file mode 100644
index 000000000..f0ca51613
--- /dev/null
+++ b/doc/context/sources/general/manuals/steps/steps-mkiv.tex
@@ -0,0 +1,760 @@
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
+%
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+%
+% comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt
+% Group journal or otherwise. Thanks to the editors for corrections. Also thanks
+% to users for testing, feedback and corrections.
+
+\environment manuals-xml-environment.tex
+
+\useMPlibrary [ove]
+
+\usemodule[x][mathml]
+\usemodule[m][steps]
+
+\startdocument[title=Steps,author=Hans Hagen,palet=steps]
+
+\startbuffer
+\startSTEPchart
+\cell {A}
+\cell {one} \text{+2}
+\cell {two} \text{+3}
+\cell {three} \text{+4}
+\cell {four} \text{+5}
+\cell {five}
+\stopSTEPchart
+\stopbuffer
+
+\startsection[title=Description]
+
+This module is written in the process of defining a couple of styles for an
+educational math book. The macros provide you a way to visualize steps in for
+instance solving equations.
+
+The horizontal visualization is called stepchart, while the vertical alternative
+carries the name steptable. The vertical alternative has a special case that
+permits alignment on a mid symbol (in most cases a relation).
+
+The implementation uses a combination of \TEX\ and \METAPOST, and is set up in
+such a way that hyperlinks and alike will work okay.
+
+\stopsection
+
+\startsection[title=Structure]
+
+The horizontal stepcharts have at most four rows: two rows of cells with each an
+associated row of texts. The plural elements \type {cells} and \type {texts} each
+have two subelements. The \type {texts} elements are put between \type {cells}.
+
+\startbuffer
+<stepchart>
+ <cells> <top> some text </top> <bot> some text </bot> </cells>
+ <texts> <top> text </top> <bot> text </bot> </texts>
+ <cells> <top> some text </top> <bot> some text </bot> </cells>
+</stepchart>
+\stopbuffer
+
+\typebuffer \processxmlbuffer
+
+When a singular \type {cell} element is used in combination with the plural \type
+{texts}, we get one row of step cells with both top and bottom texts.
+
+\startbuffer
+<stepchart>
+ <cell> some text </cell>
+ <texts> <top> text </top> <bot> text </bot> </texts>
+ <cell> some text </cell>
+</stepchart>
+\stopbuffer
+
+\typebuffer \processxmlbuffer
+
+The third horizontal alternative only has singular elements, and as a result the
+texts are put above the step cells.
+
+\startbuffer
+<stepchart>
+ <cell> some cell </cell>
+ <cell> another cell </cell> <text> a bit of text </text>
+ <cell> third cell </cell> <text> more text </text>
+ <cell> last cell </cell>
+</stepchart>
+\stopbuffer
+
+\typebuffer \processxmlbuffer
+
+Normally, the lines go from cell to cell via a text. When you let the \type
+{cell} element follow by more than one \type {text} element (or their plural
+forms), all lines will start at the same point.
+
+\startbuffer
+<stepchart>
+ <cell> some text </cell>
+ <cell> some text </cell> <text> text 1 </text> <text> text 2 </text>
+ <cell> some text </cell>
+ <cell> some text </cell> <text> text 3 </text>
+ <cell> some text </cell>
+</stepchart>
+\stopbuffer
+
+\typebuffer \processxmlbuffer
+
+The vertical alternative (of course) looks different and permits pretty long
+explanations.
+
+\startbuffer
+<steptable>
+ <cell> cell 1 </cell>
+ <text> text 1 </text>
+ <cell> cell 2 </cell>
+ <text> text 2 </text>
+ <cell> cell 3 </cell>
+</steptable>
+\stopbuffer
+
+\typebuffer \processxmlbuffer
+
+When the plural element \type {cells} is used, three sub||elements are expected.
+These align around the mid element \type {c2}.
+
+\startbuffer
+<stepaligntable>
+ <cells> <c1> left </c1> <c2> center </c2> <c3> right </c3> </cells>
+ <text> text </text>
+ <cells> <c1> lft </c1> <c2> ctr </c2> <c3> rgt </c3> </cells>
+ <text> text </text>
+ <cells> <c1> l </c1> <c2> c </c2> <c3> r </c3> </cells>
+</stepaligntable>
+\stopbuffer
+
+\typebuffer \processxmlbuffer
+
+\stopsection
+
+\startsection[title=Lines]
+
+You can draw lines normally or dashes and with or without arrows in both
+directions. This is controlled by the \type {alternative} option of \type
+{\setupSTEPaligntable}. As an example we use this table:
+
+\startbuffer[table]
+\startSTEPaligntable
+ \cells {$2c$} {$=$} {$2a+3b$}
+ \text {with $a=5$}
+ \cells {$2c$}{$=$} {$10+3b$}
+ \text {and $b=6$}
+ \cells {$2c$} {$=$} {$10+18$}
+ \text {we get}
+\stopSTEPaligntable
+\stopbuffer
+
+\typebuffer[table]
+
+Next we show the (currently) 9 alternatives. The zero alternative draws no lines
+so there we can make the distance smaller.
+
+\startbuffer
+\setupSTEPlines
+ [alternative=0,
+ width=.5em]
+\stopbuffer
+
+\typebuffer \startlinecorrection \getbuffer \getbuffer[table] \stoplinecorrection
+
+\startbuffer
+\setupSTEPlines
+ [alternative=1]
+\stopbuffer
+
+\typebuffer \startlinecorrection \getbuffer \getbuffer[table] \stoplinecorrection
+
+\startbuffer
+\setupSTEPlines
+ [alternative=2]
+\stopbuffer
+
+\typebuffer \startlinecorrection \getbuffer \getbuffer[table] \stoplinecorrection
+
+\startbuffer
+\setupSTEPlines
+ [alternative=3]
+\stopbuffer
+
+\typebuffer \startlinecorrection \getbuffer \getbuffer[table] \stoplinecorrection
+
+\startbuffer
+\setupSTEPlines
+ [alternative=4]
+\stopbuffer
+
+\typebuffer \startlinecorrection \getbuffer \getbuffer[table] \stoplinecorrection
+
+\startbuffer
+\setupSTEPlines
+ [alternative=5]
+\stopbuffer
+
+\typebuffer \startlinecorrection \getbuffer \getbuffer[table] \stoplinecorrection
+
+\startbuffer
+\setupSTEPlines
+ [alternative=6]
+\stopbuffer
+
+\typebuffer \startlinecorrection \getbuffer \getbuffer[table] \stoplinecorrection
+
+\startbuffer
+\setupSTEPlines
+ [alternative=7]
+\stopbuffer
+
+\typebuffer \startlinecorrection \getbuffer \getbuffer[table] \stoplinecorrection
+
+\startbuffer
+\setupSTEPlines
+ [alternative=8]
+\stopbuffer
+
+\typebuffer \startlinecorrection \getbuffer \getbuffer[table] \stoplinecorrection
+
+\stopsection
+
+\startsection[title=Usage]
+
+The step chart module is loaded with:
+
+\starttyping
+\usemodule[cell] % was step
+\stoptyping
+
+\noindentation but in the case of embedded math, you should also load the \MATHML\ module:
+
+\starttyping
+\usemodule[cell,mathml]
+\stoptyping
+
+\stopsection
+
+\startsection[title=\XML\ example]
+
+Because we don't want to clutter the examples with \MATHML\ we stick to a simple
+mapping:
+
+\startbuffer
+\startxmlsetups xml:math:simple
+ \xmlsetsetup {#1} {m} {xml:math:simple:tex}
+\stopxmlsetups
+
+\startxmlsetups xml:math:simple:tex
+ \mathematics{\xmlflush{#1}}
+\stopxmlsetups
+
+\xmlregistersetup{xml:math:simple}
+\stopbuffer
+
+\typebuffer \getbuffer
+
+So, in the next examples the \type {m} element contains \TEX\ math.
+
+\startbuffer
+<stepchart>
+ <cells> <top> A </top> <bot> B </bot> </cells>
+ <cells> <top> one </top> <bot> five </bot> </cells>
+ <texts> <top> <m> +2 </m> </top> <bot> <m> -2 </m> </bot> </texts>
+ <cells> <top> two </top> <bot> four </bot> </cells>
+ <texts> <top> <m> +3 </m> </top> <bot> <m> -3 </m> </bot> </texts>
+ <cells> <top> three </top> <bot> three </bot> </cells>
+ <texts> <top> <m> +4 </m> </top> <bot> <m> -4 </m> </bot> </texts>
+ <cells> <top> four </top> <bot> two </bot> </cells>
+ <texts> <top> <m> +5 </m> </top> <bot> <m> -5 </m> </bot> </texts>
+ <cells> <top> five </top> <bot> one </bot> </cells>
+</stepchart>
+\stopbuffer
+
+\typebuffer \processxmlbuffer
+
+\startbuffer
+<stepchart>
+ <cell> A </cell>
+ <cell> one </cell> <text> <m> +2 </m> </text>
+ <cell> two </cell> <text> <m> +3 </m> </text>
+ <cell> three </cell> <text> <m> +4 </m> </text>
+ <cell> four </cell> <text> <m> +5 </m> </text>
+ <cell> five </cell>
+</stepchart>
+\stopbuffer
+
+\typebuffer \processxmlbuffer
+
+\startbuffer
+<steptable>
+ <cell>
+ <math xmlns="mathml">
+ <apply> <eq/> <ci> c </ci>
+ <apply> <plus/>
+ <apply> <times/> <cn> 2 </cn> <ci> a </ci> </apply>
+ <apply> <times/> <cn> 3 </cn> <ci> b </ci> </apply>
+ </apply>
+ </apply>
+ </math>
+ </cell>
+ <text> with
+ <math xmlns="mathml">
+ <apply> <eq/> <ci> a </ci> <cn> 5 </cn> </apply>
+ </math>
+ </text>
+ <cell>
+ <math xmlns="mathml">
+ <apply> <eq/> <ci> c </ci>
+ <apply> <plus/> <cn> 10 </cn>
+ <apply> <times/> <cn> 3 </cn> <ci> b </ci> </apply>
+ </apply>
+ </apply>
+ </math>
+ </cell>
+ <text> and
+ <math xmlns="mathml">
+ <apply> <eq/> <ci> b </ci> <cn> 6 </cn> </apply>
+ </math>
+ </text>
+ <cell>
+ <math xmlns="mathml">
+ <apply> <eq/> <ci> c </ci>
+ <apply> <plus/> <cn> 10 </cn> <cn> 18 </cn> </apply>
+ </apply>
+ </math>
+ </cell>
+ <text>
+ we get
+ </text>
+ <cell>
+ <math xmlns="mathml">
+ <apply> <eq/> <ci> c </ci> <cn> 28 </cn> </apply>
+ </math>
+ </cell>
+</steptable>
+\stopbuffer
+
+\typebuffer \processxmlbuffer
+
+\startbuffer
+<stepaligntable>
+ <cells>
+ <c1> <m>c</m> </c1> <c2> <m>=</m> </c2> <c3> <m>2a+3b</m> </c3>
+ </cells>
+ <text>
+ with <m>a=5</m>
+ </text>
+ <cells>
+ <c1> <m>c</m> </c1> <c2> <m>=</m> </c2> <c3> <m>10+3b</m> </c3>
+ </cells>
+ <text>
+ and <m>b=6</m>
+ </text>
+ <cells>
+ <c1> <m>c</m> </c1> <c2> <m>=</m> </c2> <c3> <m>10+18</m> </c3>
+ </cells>
+ <text>
+ we get
+ </text>
+ <cells>
+ <c1> <m>c</m> </c1> <c2> <m>=</m> </c2> <c3> <m>28</m> </c3>
+ </cells>
+</stepaligntable>
+\stopbuffer
+
+\typebuffer \processxmlbuffer
+
+\stopsection
+
+\startsection[title=\TEX\ example]
+
+\startbuffer
+\startSTEPchart
+\cells {A} {B}
+\cells {one} {five or more} \texts{$+2$}{$-2$}
+\cells {two} {four} \texts{$+3$}{$-3$}
+\cells {three} {three} \texts{$+4$}{$-4$}
+\cells {four} {two} \texts{$+5$}{$-5$}
+\cells {five or more} {one}
+\stopSTEPchart
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer
+\startSTEPchart
+\cell {A}
+\cell {one} \texts{$+2$}{$-2$}
+\cell {two} \texts{$+3$}{$-3$}
+\cell {three} \texts{$+4$}{$-4$}
+\cell {four} \texts{$+5$}{$-5$}
+\cell {five or more}
+\stopSTEPchart
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer
+\startSTEPchart
+\cells {A} {B}
+\cells {one} {five or more} \texts{$+2$}{}
+\cells {two} {four} \texts{}{$-3$}
+\cells {three} {three} \texts{$+4$}{}
+\cells {four} {two} \texts{}{$-5$}
+\cells {five or more} {one}
+\stopSTEPchart
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer
+\startSTEPchart
+\cell {A}
+\cell {one} \text{+2} \text{+3} \text{+4} \text{+5}
+\cell {two}
+\cell {three}
+\cell {four}
+\cell {five}
+\stopSTEPchart
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer
+\startSTEPchart
+\cell {A}
+\cell {one} \texts{}{+2} \texts{}{+3}
+\cell {two}
+\cell {three} \texts{+4}{} \texts{+5}{}
+\cell {four}
+\cell {five}
+\stopSTEPchart
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer
+\startSTEPchart
+\cell {A}
+\cell {one} \text{+2}
+\cell {two} \text{+3}
+\cell {three} \text{+4}
+\cell {four} \text{+5}
+\cell {five}
+\stopSTEPchart
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer
+\startSTEPtable
+\cell {$c=2a+3b$}
+\text {with $a=5$}
+\cell {$c=10+3b$}
+\text {and $b=6$}
+\cell {$c=10+18$}
+\text {we get}
+\cell {$c=28$}
+\stopSTEPtable
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer
+\startSTEPaligntable
+\cells {$2c$} {$=$} {$2a+3b$}
+\text {with $a=5$}
+\cells {$2c$}{$=$} {$10+3b$}
+\text {and $b=6$}
+\cells {$2c$} {$=$} {$10+18$}
+\text {we get}
+\cells {$2c$} {$=$} {$28$}
+\text {and therefore}
+\cells {$c$} {$=$} {$28/2$}
+\text {which reduces to}
+\cells {$c$} {$=$} {$14$}
+\stopSTEPaligntable
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer
+\startSTEPchart
+ \cells {A} {B}
+ \cells {one} {five} \texts{$+2$}{$-2$}
+ \cells {two} {four} \texts{$+3$}{$-3$}
+ \cells {three} {three} \texts{$+4$}{$-4$}
+ \cells {four} {two} \texts{$+5$}{$-5$}
+ \cells {five} {one}
+\stopSTEPchart
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\stopsection
+
+\startsection[title=Configuring]
+
+The charts and tables can have their own spacing set. Quite certainly the
+distances between cells will differ.
+
+\starttabulate[|Tl|l|]
+\HL
+\NC \rlap{\tex{setupSTEPcharts} \tex{setupSTEPtables}} \NC \NC \NR
+\HL
+\NC after \NC hook for commands to execute after the table \NC \NR
+\NC before \NC hook for commands to execute before the table \NC \NR
+% \NC method \NC line drawing method\NC \NR
+% \NC height \NC height of the connecting line \NC \NR
+% \NC offset \NC the distance between lines and cells and texts \NC \NR
+% \NC hoffset \NC the horizontal distance between cells \NC \NR
+% \NC voffset \NC the vertical distance between cells \NC \NR
+\HL
+\stoptabulate
+
+Both charts and tables have common settings with respect to the cells, texts and
+lines.
+
+\starttabulate[|Tl|l|]
+\HL
+\NC \rlap{\tex{setupSTEPcells} \tex{setupSTEPtexts}} \NC \NC \NR
+\HL
+\NC alternative \NC the kind of shape to be drawn \NC \NR
+\NC backgroundcolor \NC the background color identified by name \NC \NR
+\NC rulethickness \NC the width of frame around cells \NC \NR
+\NC framecolor \NC the frame color identified by name \NC \NR
+\NC offset \NC the space between content and frame \NC \NR
+\NC style \NC a (preferable named) style \NC \NR
+\NC color \NC the color of the content \NC \NR
+\HL
+\stoptabulate
+
+\starttabulate[|Tl|l|]
+\HL
+\NC \rlap{\tex{setupSTEPlines}} \NC \NC \NR
+\HL
+\NC alternative \NC the kind of line to draw between cells \NC \NR
+\NC distance \NC the distance between lines and text \NC \NR
+\NC offset \NC the shift to the right of the start of the line \NC \NR
+\NC height \NC the height of the (curved) line \NC \NR
+\NC rulethickness \NC the width of the lines between cells \NC \NR
+\NC color \NC the line color identified by name \NC \NR
+\HL
+\stoptabulate
+
+In \TEX, some of the settings, like \type {style} and \type {color} can be set
+between elements. In \XML, the settings are passed as processing instructions.
+
+\startbuffer
+\startSTEPchart
+\cell {A}
+\cell {one} \text{+2}
+\cell {two} \text{+3}
+\start
+ \setupSTEPcells[color=darkred,style=bold]
+ \cell {three} \text{+4}
+ \cell {four} \text{+5}
+\stop
+\cell {five}
+\stopSTEPchart
+\stopbuffer
+
+\typebuffer \getbuffer
+
+There are a couple of alternative shapes available. The most relevant ones are:
+\removeunwantedspaces \dostepwiserecurse {5} {9} {1} { \TestShape {\recurselevel}}
+\removeunwantedspaces \dostepwiserecurse {12} {19} {1} { \TestShape {\recurselevel}}
+\removeunwantedspaces \dostepwiserecurse {22} {29} {1} { \TestShape {\recurselevel}}.
+
+Although it is not too wise to set up the layout in the middle of a document, for
+graphics one can seldom get by some local fine||tuning. Here we encounter a
+rather fundamental difference between \TEX\ and \XML. In \TEX, you can easily
+change settings on a temporary basis by using groups. In \XML\ on the other hand,
+settings are bound to a category. So, in \TEX\ you can do this:
+
+\startbuffer
+\setupSTEPcells
+ [important]
+ [color=darkgreen,
+ style=bold]
+
+\startSTEPchart
+\cell {A}
+\cell {one} \text{+2}
+\cell {two} \text{+3}
+\cell [important] {three} \text{+4}
+\cell [important] {four} \text{+5}
+\cell {five}
+\stopSTEPchart
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\noindentation An \XML\ example is:
+
+\startbuffer
+\setupSTEPcells[demo-1][alternative=5]
+\setupSTEPcells[demo-1][framecolor=darkred]
+\setupSTEPtexts[demo-1][framecolor=darkgreen]
+\setupSTEPlines[demo-1][alternative=4]
+\setupSTEPtexts[demo-2][style=bold]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\noindentation This will be applied to:
+
+\startbuffer
+<steptable class="demo-1">
+ <cell> type 5 </cell>
+ <text> type 6 </text>
+ <cell> type 7 </cell>
+ <text class="demo-2"> type 8 </text>
+ <cell> type 9 </cell>
+</steptable>
+\stopbuffer
+
+\typebuffer
+
+\noindentation so that we get:
+
+\processxmlbuffer
+
+You can also use processing instructions:
+
+\startbuffer
+<stepchart>
+ <cells> <top> some text 1 </top> <bot> some text 2 </bot> </cells>
+ <?context-stepchart-directive text color darkred ?>
+ <texts> <top> text 3 </top> <bot> text 4 </bot> </texts>
+ <cells> <top> some text 5 </top> <bot> some text 6 </bot> </cells>
+ <?context-stepchart-directive text color darkblue ?>
+ <texts> <top> text 7t </top> </texts>
+ <cells> <top> some text 8 </top> </cells>
+</stepchart>
+\stopbuffer
+
+\typebuffer \processxmlbuffer
+
+\startbuffer
+<steptable>
+ <?context-stepchart-directive cell alternative 12 ?>
+ <cell> cell 12 </cell> <text> 12 to 13 </text>
+ <?context-stepchart-directive cell alternative 13 ?>
+ <cell> cell 13 </cell> <text> 13 to 14 </text>
+ <?context-stepchart-directive cell alternative 14 ?>
+ <cell> cell 14 </cell> <text> 14 to 15 </text>
+ <?context-stepchart-directive cell alternative 15 ?>
+ <cell> cell 15 </cell>
+</steptable>
+\stopbuffer
+
+\typebuffer \processxmlbuffer
+
+Some settings apply to the whole chart. In \TEX\ this is easy since we
+can group the whole chart including settings but in \XML\ this is somewhat
+problematic. We can however fall back on basic tex commands but it's
+probably better to use as category (class), like:
+
+\startbuffer
+\setupSTEPtexts[demo-5][distance=3em]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\noindentation So, the following works as expected:
+
+\startbuffer
+<document>
+ <?context-tex-directive start ?>
+ <?context-stepchart-directive text distance 1em ?>
+ <stepaligntable>
+ <cells> <c1>a</c1> <c2>b</c2> <c3>c</c3> </cells>
+ <text> test 1 </text>
+ <cells> <c1>aa</c1> <c2>b</c2> <c3>ccc</c3> </cells>
+ </stepaligntable>
+ <?context-tex-directive stop ?>
+ <stepaligntable>
+ <cells> <c1>a</c1> <c2>b</c2> <c3>c</c3> </cells>
+ <text> test 2 </text>
+ <cells> <c1>aa</c1> <c2>b</c2> <c3>ccc</c3> </cells>
+ </stepaligntable>
+ <stepaligntable class="demo-5">
+ <cells> <c1>a</c1> <c2>b</c2> <c3>c</c3> </cells>
+ <text> test 3 </text>
+ <cells> <c1>aa</c1> <c2>b</c2> <c3>ccc</c3> </cells>
+ </stepaligntable>
+</document>
+\stopbuffer
+
+\typebuffer \processxmlbuffer
+
+\startbuffer
+<document>
+ <?context-tex-directive start ?>
+ <?context-stepchart-directive cell dx 10ex ?>
+ <stepchart>
+ <cells> <top> from here </top> <bot> there </bot> </cells>
+ <texts> <top> to </top> <bot> to </bot> </texts>
+ <cells> <top> and here </top> <bot> there </bot> </cells>
+ </stepchart>
+ <?context-tex-directive stop ?>
+</document>
+\stopbuffer
+
+\typebuffer \processxmlbuffer
+
+\startbuffer
+<document>
+ <?context-tex-directive start ?>
+ <?context-stepchart-directive line height 30pt ?>
+ <?context-stepchart-directive line offset 5pt ?>
+ <steptable>
+ <cell> some cell </cell>
+ <cell> another cell </cell> <text> a bit of text </text>
+ <cell> third cell </cell> <text> more text </text>
+ <cell> last cell </cell>
+ </steptable>
+ <?context-tex-directive stop ?>
+</document>
+\stopbuffer
+
+\typebuffer \processxmlbuffer
+
+\startbuffer
+<document>
+ <?context-tex-directive start ?>
+ <?context-stepchart-directive line height 30pt ?>
+ <?context-stepchart-directive line offset 15pt ?>
+ <stepchart>
+ <cell> some cell </cell>
+ <cell> another cell </cell> <text> a bit of text </text>
+ <cell> third cell </cell> <text> more text </text>
+ <cell> last cell </cell>
+ </stepchart>
+ <?context-tex-directive stop ?>
+</document>
+\stopbuffer
+
+\typebuffer \processxmlbuffer
+
+\stopsection
+
+\startsection[title=Documentation]
+
+There is no additional documentation on this module.
+
+\stopsection
+
+\stopdocument
diff --git a/doc/context/sources/general/manuals/still/still-acrobat-math.png b/doc/context/sources/general/manuals/still/still-acrobat-math.png
new file mode 100644
index 000000000..e2f842a36
--- /dev/null
+++ b/doc/context/sources/general/manuals/still/still-acrobat-math.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/still/still-acrobat-text.png b/doc/context/sources/general/manuals/still/still-acrobat-text.png
new file mode 100644
index 000000000..1c0d97e91
--- /dev/null
+++ b/doc/context/sources/general/manuals/still/still-acrobat-text.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/still/still-backend.tex b/doc/context/sources/general/manuals/still/still-backend.tex
new file mode 100644
index 000000000..d3e5e14d1
--- /dev/null
+++ b/doc/context/sources/general/manuals/still/still-backend.tex
@@ -0,0 +1,474 @@
+% language=uk
+
+\environment still-environment
+
+\starttext
+
+\startchapter[title=The \LUATEX\ \PDF\ backend]
+
+\startsection[title=Introduction]
+
+The original design of \TEX\ has a clear separation between the frontend and
+backend code. In principle, shipping out a page boils down to traversing the
+to|-|be|-|shipped|-|out box and translating the glyph, rule, glue, kern and list
+nodes into positioning just glyphs and rules on a canvas. The \DVI\ backend is
+therefore relatively simple, as the \DVI\ output format delegates to other
+programs the details of font inclusion and such into the final format; it just
+describes the pages.
+
+Because we eventually want color and images as well, there is a mechanism to pass
+additional information to post|-|processing programs. One can insert \type
+{\special}s with directives like \type {insert image named foo.jpg}. The frontend
+as well as the backend are not concerned with what goes into a special; the \DVI\
+post|-|processor of course is.
+
+The \PDF\ backend, on the other hand, is more complex as it immediately produces
+the final typeset result and, as such, offers possibilities to insert verbatim
+code (\type {\pdfliteral}), images (\type {\pdfximage} cum suis), annotations,
+destinations, threads and all kinds of objects, reuse typeset content (\type
+{\pdfxform} cum suis); in the end, there are all kinds of \type {\pdf...}
+commands. The way these were implemented in \LUATEX\ prior to 0.82 violates the
+separation between frontend and backend, an inheritance from \PDFTEX. Additional
+features such as protrusion and expansion add to that entanglement. However,
+because \PDF\ is an evolving standard, occasionally we need to adapt the related
+code. A separation of code makes sure that the frontend can become stable (and
+hopefully frozen) at some point. \footnote {In practice nowadays, the backend
+code changes little, because the \PDF\ produced by \LUATEX\ is rather simple and
+is easily adapted to the changing standard.}
+
+In \LUATEX\ we had already started making this separation of specialized code,
+such as a cleaner implementation of font expansion, but all these \type {\pdf...}
+commands were still pervasive, leading to fuzzy dependencies, checks for backend
+modes, etc.\ so a logical step was to straighten all this out. That way we give
+\LUATEX\ a cleaner core constructed from traditional \TEX, extended with \ETEX,
+\ALEPH|/|\OMEGA, and \LUATEX\ functionality.
+
+\stopsection
+
+\startsection[title=Extensions]
+
+A first step, then, was to transform generic (i.e.\ independent from the backend)
+functionality which was still (sort of) bound to \ALEPH\ and \PDFTEX, into core
+functionality. A second step was to reorganize the backend specific \PDF\ code,
+i.e.\ move it out of the core and into the group of extension commands. This
+extension group is somewhat special and originates in traditional \TEX; it is the
+way to add your own functionality to \TEX, the program.
+
+As an example for future programmers, Don Knuth added four (connected) primitives
+as extensions: \type {\openout}, \type {\closeout}, \type {\write} and \type
+{\special}. The \ALEPH\ and \PDFTEX\ engines, on the other hand, put some
+functionality in extensions and some in the core. This arose from the fact that
+dealing with variables in extensions is often inconvenient, as they are then seen
+as (unexpandable) commands instead of integers, token lists, etc. That the
+write|-|related commands are there is almost entirely due to being the
+demonstration of the mechanism; everything related to {\em reading} files is in
+the core. There is one property that perhaps forces us to keep the writers there,
+and that's the \type {\immediate} prefix. \footnote {Unfortunately we're stuck
+with \type {\immediate} in the backend; a \type {deferred} keyword would have
+been handier, especially since other backend|-|related commands can also be
+immediate.}
+
+In the process of separating, we reshuffled the code base a bit; the current use
+of the extensions mechanism still suits as an example and also gives us backward
+compatibility. However, new backend primitives will not be added there but rather
+in specific plugins (if needed at all).
+
+\stopsection
+
+\startsection[title=From whatsits to nodes]
+
+The \PDF\ backend introduced two new concepts into the core: (reusable) images
+and (reusable) content (wrapped in boxes). In keeping with good \TEX\ practice,
+these were implemented as whatsits (a node type for extensions); but this
+created, as a side effect, an anomaly in the handling of such nodes. Consider
+looping over a node list where we need to check dimensions of nodes; in \LUA, we
+can write something like this:
+
+\starttyping
+while n do
+ if n.id == glyph then
+ -- wd ht dp
+ elseif n.id == rule then
+ -- wd ht dp
+ elseif n.id == kern then
+ -- wd
+ elseif n.id == glue then
+ -- size stretch shrink
+ elseif n.id == whatsits then
+ if n.subtype == pdfxform then
+ -- wd ht dp
+ elseif n.subtype == pdfximage then
+ -- wd ht dp
+ end
+ end
+ n = n.next
+end
+\stoptyping
+
+So for each node in the list, we need to check these two whatsit subtypes. But as
+these two concepts are rather generic, there is no evident need to implement it
+this way. Of course the backend has to provide the inclusion and reuse, but the
+frontend can be agnostic about this. That is, at the input end, in specifying
+these two injects, we only have to make sure we pass the right information (so
+the scanner might differentiate between backends).
+
+Thus, in \LUATEX\ these two concepts have been promoted to core features:
+
+\starttabulate[|l|l|]
+\NC \type {\pdfxform} \NC \type {\saveboxresource} \NC \NR
+\NC \type {\pdfximage} \NC \type {\saveimageresource} \NC \NR
+\NC \type {\pdfrefxform} \NC \type {\useboxresource} \NC \NR
+\NC \type {\pdfrefximage} \NC \type {\useimageresource} \NC \NR
+\NC \type {\pdflastxform} \NC \type {\lastsavedboxresourceindex} \NC \NR
+\NC \type {\pdflastximage} \NC \type {\lastsavedimageresourceindex} \NC \NR
+\NC \type {\pdflastximagepages} \NC \type {\lastsavedimageresourcepages} \NC \NR
+\stoptabulate
+
+The index should be considered an arbitrary number set to whatever the backend
+plugin decides to use as an identifier. These are no longer whatsits, but a
+special type of rule; after all, \TEX\ is only interested in dimensions. Given
+this change, the previous code can be simplified to:
+
+\starttyping
+while n do
+ if n.id == glyph then
+ -- wd ht dp
+ elseif n.id == rule then
+ -- wd ht dp
+ elseif n.id == kern then
+ -- wd
+ elseif n.id == glue then
+ -- size stretch shrink
+ end
+ n = n.next
+end
+\stoptyping
+
+The only consequence for the previously existing rule type (which, in fact, is
+also something that needs to be dealt with in the backend, depending on the
+target format) is that a normal rule now has subtype~0 while the box resource has
+subtype~1 and the image subtype~2.
+
+If a package writer wants to retain the \PDFTEX\ names, the previous table can be
+used; just prefix \type{\let}. For example, the first line would be (spaces
+optional, of course):
+
+\starttyping
+\let\pdfxform\saveboxresource
+\stoptyping
+
+\stopsection
+
+\startsection[title=Direction nodes]
+
+A similar change has been made for ``direction'' nodes, which were also
+previously whatsits. These are now normal nodes so again, instead of consulting
+whatsit subtypes, we can now just check the id of a node.
+
+It should be apparent that all of these changes from whatsits to normal nodes
+already greatly simplify the code base.
+
+\stopsection
+
+\startsection[title=Promoted commands]
+
+Many more commands have been promoted to the core. Here is an additional list of
+original \PDFTEX\ commands and their new counterparts (this time with the \type
+{\let} included):
+
+\starttyping
+\let\pdfpagewidth \pagewidth
+\let\pdfpageheight \pageheight
+
+\let\pdfadjustspacing \adjustspacing
+\let\pdfprotrudechars \protrudechars
+\let\pdfnoligatures \ignoreligaturesinfont
+\let\pdffontexpand \expandglyphsinfont
+\let\pdfcopyfont \copyfont
+
+\let\pdfnormaldeviate \normaldeviate
+\let\pdfuniformdeviate \uniformdeviate
+\let\pdfsetrandomseed \setrandomseed
+\let\pdfrandomseed \randomseed
+
+\let\ifpdfabsnum \ifabsnum
+\let\ifpdfabsdim \ifabsdim
+\let\ifpdfprimitive \ifprimitive
+
+\let\pdfprimitive \primitive
+
+\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
+\stoptyping
+
+\stopsection
+
+\startsection[title=Backend commands]
+
+There are many commands that start with \type {\pdf} and, over the history of
+development of \PDFTEX\ and \LUATEX, some have been added, some have been
+renamed, others removed. Instead of the many, we now have just one: \type
+{\pdfextension}. A couple of usage examples:
+
+\starttyping
+\pdfextension literal {1 0 0 2 0 0 cm}
+\pdfextension obj {/foo (bar)}
+\stoptyping
+
+Here, we pass a keyword that tells for what to scan and what to do with it. A
+backward|-|compatible interface is easy to write. Although it delegates a bit
+more management of these \type {\pdf} commands to the macro package, the
+responsibility for dealing with such low|-|level, error|-|prone calls is there
+anyway. The full list of \type {\pdfextension}s is given here. The scanning after
+the keyword is the same as for \PDFTEX.
+
+\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
+
+\stopsection
+
+\startsection[title=Backend variables]
+
+As with commands, there are many variables that can influence the \PDF\ backend.
+The most important one was, of course, that which set the output mode
+(\type{\pdfoutput}). Well, that one is gone and has been replaced by \type
+{\outputmode}. A value of~1 means that we produce \PDF.
+
+One complication of variables is that (if we want to be compatible), we need to
+have them as real \TEX\ registers. However, as most of them are optional, an easy
+way out is simply not to define them in the engine. In order to be able to still
+deal with them as registers (which is backward compatible), we define them as
+follows:
+
+\starttyping
+\edef\pdfminorversion {\pdfvariable minorversion}
+\edef\pdfcompresslevel {\pdfvariable compresslevel}
+\edef\pdfobjcompresslevel {\pdfvariable objcompresslevel}
+\edef\pdfdecimaldigits {\pdfvariable decimaldigits}
+
+\edef\pdfhorigin {\pdfvariable horigin}
+\edef\pdfvorigin {\pdfvariable vorigin}
+
+\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\pdfignoreunknownimages {\pdfvariable ignoreunknownimages}
+
+\edef\pdfinclusioncopyfonts {\pdfvariable inclusioncopyfonts}
+\edef\pdfinclusionerrorlevel {\pdfvariable inclusionerrorlevel}
+\edef\pdfpkmode {\pdfvariable pkmode}
+\edef\pdfpkresolution {\pdfvariable pkresolution}
+\edef\pdfgentounicode {\pdfvariable gentounicode}
+
+\edef\pdflinkmargin {\pdfvariable linkmargin}
+\edef\pdfdestmargin {\pdfvariable destmargin}
+\edef\pdfthreadmargin {\pdfvariable threadmargin}
+\edef\pdfformmargin {\pdfvariable formmargin}
+
+\edef\pdfuniqueresname {\pdfvariable uniqueresname}
+\edef\pdfpagebox {\pdfvariable pagebox}
+\edef\pdfpagesattr {\pdfvariable pagesattr}
+\edef\pdfpageattr {\pdfvariable pageattr}
+\edef\pdfpageresources {\pdfvariable pageresources}
+\edef\pdfxformattr {\pdfvariable xformattr}
+\edef\pdfxformresources {\pdfvariable xformresources}
+\stoptyping
+
+You can set them as follows (the values shown here are the initial values):
+
+\starttyping
+\pdfcompresslevel 9
+\pdfobjcompresslevel 1
+\pdfdecimaldigits 3
+\pdfgamma 1000
+\pdfimageresolution 71
+\pdfimageapplygamma 0
+\pdfimagegamma 2200
+\pdfimagehicolor 1
+\pdfimageaddfilename 1
+\pdfpkresolution 72
+\pdfinclusioncopyfonts 0
+\pdfinclusionerrorlevel 0
+\pdfignoreunknownimages 0
+\pdfreplacefont 0
+\pdfgentounicode 0
+\pdfpagebox 0
+\pdfminorversion 4
+\pdfuniqueresname 0
+
+\pdfhorigin 1in
+\pdfvorigin 1in
+\pdflinkmargin 0pt
+\pdfdestmargin 0pt
+\pdfthreadmargin 0pt
+\stoptyping
+
+Their removal from the frontend has helped again to clean up the code and, by
+making them registers, their use is still compatible. A call to \type
+{\pdfvariable} defines an internal register that keeps the value (of course this
+value can also be influenced by the backend itself). Although they are real
+registers, they live in a protected namespace:
+
+\startbuffer
+\meaning\pdfcompresslevel
+\stopbuffer
+
+\typebuffer
+
+which gives:
+
+{\tt\getbuffer}
+
+It's perhaps unfortunate that we have to remain compatible because a setter and
+getter would be much nicer. I am still considering writing the extension
+primitive in \LUA\ using the token scanner, but it might not be possible to
+remain compatible then. This is not so much an issue for \CONTEXT\ that always
+has had backend drivers, but, rather, for other macro packages that have users
+expecting the primitives (or counterparts) to be available.
+
+\startsection[title=Backend feedback]
+
+The backend can report on some properties that were also accessible via \type
+{\pdf...} primitives. Because these are read|-|only variables, another primitive
+now handles them: \type {\pdffeedback}. This primitive can be used to define
+compatible alternatives:
+
+\starttyping
+\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 variables are internal, so they are anonymous. When we ask for the meaning of
+some that were previously defined:
+
+\starttyping
+\meaning\pdfhorigin
+\meaning\pdfcompresslevel
+\meaning\pdfpageattr
+\stoptyping
+
+we will get, similar to the above:
+
+\starttyping
+macro:->[internal backend dimension]
+macro:->[internal backend integer]
+macro:->[internal backend tokenlist]
+\stoptyping
+
+\stopsection
+
+\startsection[title=Removed primitives]
+
+Finally, here is the list of primitives that have been removed, with no
+\TEX|-|level equivalent available. Many were experimental, and they can be easily
+be provided to \TEX\ using \LUA.
+
+\startcolumns[n=2]
+\starttyping
+\knaccode
+\knbccode
+\knbscode
+\pdfadjustinterwordglue
+\pdfappendkern
+\pdfeachlinedepth
+\pdfeachlineheight
+\pdfelapsedtime
+\pdfescapehex
+\pdfescapename
+\pdfescapestring
+\pdffiledump
+\pdffilemoddate
+\pdffilesize
+\pdffirstlineheight
+\pdfforcepagebox
+\pdfignoreddimen
+\pdflastlinedepth
+\pdflastmatch
+\pdflastximagecolordepth
+\pdfmatch
+\pdfmdfivesum
+\pdfmovechars
+\pdfoptionalwaysusepdfpagebox
+\pdfoptionpdfinclusionerrorlevel
+\pdfprependkern
+\pdfresettimer
+\pdfshellescape
+\pdfsnaprefpoint
+\pdfsnapy
+\pdfsnapycomp
+\pdfstrcmp
+\pdfunescapehex
+\pdfximagebbox
+\shbscode
+\stbscode
+\stoptyping
+\stopcolumns
+
+\stopsection
+
+\startsection[title=Conclusion]
+
+The advantage of a clean backend separation, supported by just the three
+primitives \type {\pdfextension}, \type {\pdfvariable} and \type {\pdffeedback},
+as well as a collection of registers, is that we can now further clean the code
+base, which remains a curious mix of combined engine code, sometimes and
+sometimes not converted to C from \PASCAL. A clean separation also means that if
+someone wants to tune the backend for a special purpose, the frontend can be left
+untouched. We will get there eventually.
+
+All the definitions shown here are available in the file \type {luatex-pdf.tex},
+which is part of the \CONTEXT\ distribution.
+
+\stopsection
+
+\stopchapter
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/still/still-contents.tex b/doc/context/sources/general/manuals/still/still-contents.tex
new file mode 100644
index 000000000..37f5f5caa
--- /dev/null
+++ b/doc/context/sources/general/manuals/still/still-contents.tex
@@ -0,0 +1,7 @@
+\startcomponent still-contents
+
+\starttitle[title=Content]
+ \placecontent
+\stoptitle
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/still/still-environment.tex b/doc/context/sources/general/manuals/still/still-environment.tex
new file mode 100644
index 000000000..05bf6d4cf
--- /dev/null
+++ b/doc/context/sources/general/manuals/still/still-environment.tex
@@ -0,0 +1,71 @@
+\startenvironment still-environment
+
+% \enabletrackers[fonts.usage,graphics.usage]
+
+\usemodule[abr-02]
+
+\setupbodyfont[modern]
+\setupbodyfont[xits]
+\setupbodyfont[pagella]
+\setupbodyfont[cambria]
+\setupbodyfont[lucidaot]
+
+\setupbodyfont
+ [dejavu]
+
+\setuplayout
+ [topspace=2cm,
+ header=0pt,
+ footer=1.5cm,
+ bottomspace=1cm,
+ width=middle,
+ height=middle]
+
+\definecolor[maincolor][darkblue]
+
+\setuptype
+ [color=maincolor]
+
+\setuptyping
+ [color=maincolor]
+
+\setuphead
+ [color=maincolor]
+
+\setuphead
+ [chapter]
+ [style=\bfc]
+
+\setuphead
+ [section]
+ [style=\bfb]
+
+\setuphead
+ [subsection]
+ [style=\bf]
+
+\setuppagenumbering
+ [alternative=doublesided]
+
+\setupfootertexts
+ [][{\getmarking[chapter]\hbox to 2em{\hss\pagenumber}}]
+ [{\hbox to 2em{\pagenumber\hss}\getmarking[chapter]}][]
+
+\setupwhitespace
+ [big]
+
+\setuplist
+ [chapter]
+ [width=3em,
+ before={\testpage[3]\blank},
+ after={\blank[samepage]},
+ color=maincolor,
+ style=bold]
+
+\setuplist
+ [section]
+ [width=3em,
+ before={\blank[nowhite]},
+ after={\blank[nowhite]}]
+
+\stopenvironment
diff --git a/doc/context/sources/general/manuals/still/still-expanding.tex b/doc/context/sources/general/manuals/still/still-expanding.tex
new file mode 100644
index 000000000..4b21a22cb
--- /dev/null
+++ b/doc/context/sources/general/manuals/still/still-expanding.tex
@@ -0,0 +1,987 @@
+% language=uk
+
+\environment still-environment
+
+\starttext
+
+\startchapter[title=Possibly useful extensions]
+
+\startsection[title=Introduction]
+
+While working on \LUATEX, it is tempting to introduce all kinds of new fancy
+programming features. Arguments for doing this can be characterized by
+descriptions like \quote {handy}, \quote {speedup}, \quote {less code}, \quote
+{necessity}. It must be stated that traditional \TEX\ is rather complete, and one
+can do quite a lot of macro magic to achieve many goals. So let us look a bit
+more at the validity of these arguments.
+
+The \quote {handy} argument is in fact a valid one. Of course, one can always
+wrap clumsy code in a macro to hide the dirty tricks, but, still, it would be
+nicer to avoid needing to employ extremely dirty tricks. I found myself looking
+at old code wondering why something has to be done in such a complex way, only to
+realize, after a while, that it comes with the concept; one can get accustomed to
+it. After all, every programming language has its stronger and weaker aspects.
+
+The \quote {speedup} argument is theoretically a good one too, but, in practice,
+it's hard to prove that a speedup really occurs. Say we save 5\% on a job. This
+is nice for multipass on a server where many jobs run at the same time or after
+each other, but a little bit of clever macro coding will easily gain much more.
+Or, as we often see: sloppy macro or style writing will easily negate those
+gains. Another pitfall is that you can measure (say) half a million calls to a
+macro can indeed be brought down to a fraction of its runtime thanks to some
+helper, but, in practice, you will not see that gain because saving 0.1 seconds
+on a 10 second run can be neglected. Furthermore, adding a single page to the
+document will already make such a gain invisible to the user as that will itself
+increase the runtime. Of course, many small speedups can eventually accumulate to
+yield a significant overall gain, but, if the macro package is already quite
+optimized, it might not be easy to squeeze out much more. At least in \CONTEXT, I
+find it hard to locate bottlenecks that could benefit from extensions, unless one
+adds very specific features, which is not what we want.
+
+Of course one can create \quote {less} code by using more wrappers. But this can
+definitely have a speed penalty, so this argument should be used with care. An
+appropriate extra helper can make wrappers fast and the fewer helpers the better.
+The danger is in choosing what helpers. A good criterion is that it should be
+hard otherwise in \TEX. Adding more primitives (and overhead) merely because some
+macro package would like it would be bad practice. I'm confident that helpers for
+\CONTEXT\ would not be that useful for plain \TEX, \LATEX, etc., and vice versa.
+
+The \quote {necessity} argument is a strong one. Many already present extensions
+from \ETEX\ fall into this category: fully expandable expressions (although the
+implementation is somewhat restricted), better macro protection, expansion
+control, and the ability to test for a so|-|called csname (control sequence name)
+are examples.
+
+In the end, the only valid argument is \quote {it can't be done otherwise}, which
+is a combination of all these arguments with \quote {necessity} being dominant.
+This is why in \LUATEX\ there are not that many extensions to the language (nor
+will there be). I must admit that even after years of working with \TEX, the
+number of wishes for more facilities is not that large.
+
+The extensions in \LUATEX, compared to traditional \TEX, can be summarized as
+follows:
+
+\startitemize
+ \startitem
+ Of course we have the \ETEX\ extensions, and these already have
+ a long tradition of proven usage. We did remove the limited directional
+ support.
+ \stopitem
+ \startitem
+ From \ALEPH\ (follow-up on \OMEGA), part of the directional support and
+ some font support was inherited.
+ \stopitem
+ \startitem
+ From \PDFTEX, we took most of the backend code, but it has been improved
+ in the meantime. We also took the protrusion and expansion code, but
+ especially the latter has been implemented a bit differently (in the
+ frontend as well as in the backend).
+ \stopitem
+ \startitem
+ Some handy extensions from \PDFTEX\ have been generalized; other
+ obscure or specialized ones have been removed. So we now have
+ frontend support for position tracking, resources (images) and reusable
+ content in the core. The backend code has been separated a bit better and
+ only a few backend|-|related primitives remain.
+ \stopitem
+ \startitem
+ The input encoding is now \UTF-8, exclusively, but one can easily hook in
+ code to preprocess data that enters \TEX's parser using \LUA. The
+ characteristic catcode settings for \TEX\ can be grouped and switched
+ efficiently.
+ \stopitem
+ \startitem
+ The font machinery has been opened wide so that we can use the embedded
+ \LUA\ interpreter to implement any technology that we might want, with
+ the usual control that \TEX ies like. Some further limitations have been
+ lifted. One interesting point is that one can now construct virtual fonts
+ at runtime.
+ \stopitem
+ \startitem
+ Ligature construction, kerning and paragraph building have been separated
+ as a side effect of \LUA\ control. There are some extensions in that
+ area. For instance, we store the language and min|/|max values in the
+ glyph nodes, and we also store penalties with discretionaries. Patterns
+ can be loaded at runtime, and character codes that influence
+ hyphenation can be manipulated.
+ \stopitem
+ \startitem
+ The math renderer has been upgraded to support \OPENTYPE\ math. This has
+ resulted in many new primitives and extensions, not only to define
+ characters and spacing, but also to control placement of superscripts and
+ subscripts and generally to influence the way things are constructed. A
+ couple of mechanisms have gained control options.
+ \stopitem
+ \startitem
+ Several \LUA\ interfaces are available making it possible to manipulate the
+ (intermediate) results. One can pipe text to \TEX, write parsers, mess
+ with node lists, inspect attributes assigned at the \TEX\ end, etc.
+ \stopitem
+\stopitemize
+
+Some of the features mentioned above are rather \LUATEX\ specific, such as
+catcode tables and attributes. They are present as they permit more advanced
+\LUA\ interfacing. Other features, such as \UTF-8\ and \OPENTYPE\ math, are a
+side effect of more modern techniques. Bidirectional support is there because it
+was one of the original reasons for going forward with \LUATEX. The removal of
+backend primitives and thereby separating the code in a better way (see companion
+article) comes from the desire to get closer to the traditional core, so that
+most documentation by Don Knuth still applies. It's also the reason why we still
+speak of \quote {tokens}, \quote {nodes} and \quote {noads}.
+
+In the following sections I will discuss a few new low|-|level primitives. This
+is not a complete description (after all, we have reported on much already), and
+one can consult the \LUATEX\ manual to get the complete picture. The extensions
+described below are also relatively new and date from around version 0.85, the
+prelude to the stable version~1 release.
+
+\stopsection
+
+\startsection[title=Rules]
+
+For insiders, it is no secret that \TEX\ has no graphic capabilities, apart from
+the ability to draw rules. But with rules you can do quite a lot already. Add to
+that the possibility to insert arbitrary graphics or even backend drawing
+directives, and the average user won't notice that it's not true core
+functionality.
+
+When we started with \LUATEX, we used code from \PDFTEX\ and \OMEGA\ (\ALEPH),
+and, as a consequence, we ended up with many whatsits. Normal running text has
+characters, kerns, some glue, maybe boxes, all represented by a limited set of
+so|-|called nodes. A whatsit is a kind of escape as it can be anything an
+extension to \TEX\ needs to wrap up and put in the current list. Examples are (in
+traditional \TEX\ already) whatsits that write to file (using \type {\write}) and
+whatsits that inject code into the backend (using \type {\special}). The
+directional mechanism of \OMEGA\ uses whatsits to indicate direction changes.
+
+For a long time images were also included using whatsits, and basically one had
+to reserve the right amount of space and inject a whatsit with a directive for
+the backend to inject something there with given dimensions or scale. Of course,
+one then needs methods to figure out the image properties, but, in the end, all
+of this could be done rather easily.
+
+In \PDFTEX, two new whatsits were introduced: images and reusable so|-|called
+forms, and, contrary to other whatsits, these do have dimensions. As a result,
+suddenly the \TEX\ code base could no longer just ignore whatsits, but it had to
+check for these two when dimensions were important, for instance in the paragraph
+builder, packager, and backend.
+
+So what has this to do with rules? Well, in \LUATEX\ all the whatsits are now
+back to where they belong, in the backend extension code. Directions are now
+first|-|class nodes, and we have native resources and reusable boxes. These
+resources and boxes are an abstraction of the \PDFTEX\ images and forms, and,
+internally, they are a special kind of rule (i.e.\ a blob with dimensions).
+Because checking for rules is part of the (traditional) \TEX\ kernel, we could
+simply remove the special whatsit code and let existing rule|-|related code do
+the job. This simplified the code a lot.
+
+Because we suddenly had two more types of rules, we took the opportunity to add a
+few more.
+
+\starttyping
+\nohrule width 10cm height 2cm depth 0cm
+\novrule width 10cm height 2cm depth 0cm
+\stoptyping
+
+This is a way to reserve space, and it's nearly equivalent to the following
+(respectively):
+
+\starttyping
+{\setbox0\hbox{}\wd0=10cm\ht0=2cm\dp0=0cm\box0\relax}
+{\setbox0\vbox{}\wd0=10cm\ht0=2cm\dp0=0cm\box0\relax}
+\stoptyping
+
+There is no real gain in efficiency because keywords also take time to parse, but
+the advantage is that no \LUA\ callbacks are triggered. \footnote {I still am
+considering adding variants of \type {\hbox} and \type {\vbox} where no callback
+would be triggered.} Of course, this variant would not have been introduced had
+we still had just rules and no further subtypes; it was just a rather trivial
+extension that fit in the repertoire. \footnote {This is one of the things I
+wanted to have for a long time but seems less useful today.}
+
+So, while we were at it, yet another rule type was introduced, but this one has
+been made available only in \LUA. As this text is about \LUATEX, a bit of \LUA\
+code does fit into the discussion, so here we go. The code shown here is rather
+generic and looks somewhat different in \CONTEXT, but it does the job.
+
+First, let's create a straightforward rectangle drawing routine. We initialize
+some variables first, then scan properties using the token scanner, and, finally,
+we construct the rectangle using four rules. The packaged (so|-|called) hlist is
+written to \TEX.
+
+\startbuffer
+\startluacode
+function FramedRule()
+ local width = 0
+ local height = 0
+ local depth = 0
+ local linewidth = 0
+ --
+ while true do
+ if token.scan_keyword("width") then
+ width = token.scan_dimen()
+ elseif token.scan_keyword("height") then
+ height = token.scan_dimen()
+ elseif token.scan_keyword("depth") then
+ depth = token.scan_dimen()
+ elseif token.scan_keyword("line") then
+ linewidth = token.scan_dimen()
+ else
+ break
+ end
+ end
+ local doublelinewidth = 2*linewidth
+ --
+ local left = node.new("rule")
+ local bottom = node.new("rule")
+ local right = node.new("rule")
+ local top = node.new("rule")
+ local back = node.new("kern")
+ local list = node.new("hlist")
+ --
+ left.width = linewidth
+ bottom.width = width - doublelinewidth
+ bottom.height = -depth + linewidth
+ bottom.depth = depth
+ right.width = linewidth
+ top.width = width - doublelinewidth
+ top.height = height
+ top.depth = -height + linewidth
+ back.kern = -width + linewidth
+ list.list = left
+ list.width = width
+ list.height = height
+ list.depth = depth
+ list.dir = "TLT"
+ --
+ node.insert_after(left,left,bottom)
+ node.insert_after(left,bottom,right)
+ node.insert_after(left,right,back)
+ node.insert_after(left,back,top)
+ --
+ node.write(list)
+ end
+\stopluacode
+\stopbuffer
+
+\typebuffer \getbuffer
+
+This function can be wrapped in a macro:
+
+\startbuffer
+\def\FrameRule{\directlua{FramedRule()}}
+\stopbuffer
+
+\typebuffer \getbuffer
+
+and the macro can be used as follows:
+
+\startbuffer
+\FrameRule width 3cm height 1cm depth 1cm line 2pt
+\stopbuffer
+
+\typebuffer
+
+The result is: \inlinebuffer
+
+A different approach follows. Again, we define a rule, but, this time we only set
+dimensions and assign some attributes to it. Normally, one would reserve some
+attribute numbers for this purpose, but, for our example here, high numbers are
+safe enough. Now there is no need to wrap the rule in a box.
+
+\startbuffer
+\startluacode
+function FramedRule()
+ local width = 0
+ local height = 0
+ local depth = 0
+ local linewidth = 0
+ local radius = 0
+ local type = 0
+ --
+ while true do
+ if token.scan_keyword("width") then
+ width = token.scan_dimen()
+ elseif token.scan_keyword("height") then
+ height = token.scan_dimen()
+ elseif token.scan_keyword("depth") then
+ depth = token.scan_dimen()
+ elseif token.scan_keyword("line") then
+ linewidth = token.scan_dimen()
+ elseif token.scan_keyword("type") then
+ type = token.scan_int()
+ elseif token.scan_keyword("radius") then
+ radius = token.scan_dimen()
+ else
+ break
+ end
+ end
+ --
+ local r = node.new("rule")
+ r.width = width
+ r.height = height
+ r.depth = depth
+ r.subtype = 4 -- user rule
+ r[20000] = type
+ r[20001] = linewidth
+ r[20002] = radius or 0
+ node.write(r)
+end
+\stopluacode
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Nodes with subtype~4 (user) are intercepted and passed to a callback function,
+when set. Here we show a possible implementation:
+
+\startbuffer
+\startluacode
+local bpfactor = (7200/7227)/65536
+
+local f_rectangle = "%f w 0 0 %f %f re %s"
+
+local f_radtangle = [[
+ %f w %f 0 m
+ %f 0 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
+]]
+
+callback.register("process_rule",function(n,h,v)
+ local t = n[20000] == 0 and "f" or "s"
+ local l = n[20001] * bpfactor -- linewidth
+ local r = n[20002] * bpfactor -- radius
+ local w = h * bpfactor
+ local h = v * bpfactor
+ if r > 0 then
+ p = string.format(f_radtangle,
+ l, r, w-r, w,0,w,r, w,h-r, w,h,w-r,h,
+ r,h, 0,h,0,h-r, 0,r, 0,0,r,0, t)
+ else
+ p = string.format(f_rectangle, l, w, h, t)
+ end
+ pdf.print("direct",p)
+end)
+\stopluacode
+\stopbuffer
+
+\typebuffer \getbuffer
+
+We can now also specify a radius and type, where \type {0} is a filled and \type
+{1} a stroked shape.
+
+\startbuffer
+\FrameRule
+ type 1
+ width 3cm
+ height 1cm
+ depth 5mm
+ line 0.2mm
+ radius 2.5mm
+\stopbuffer
+
+\typebuffer
+
+Since we specified a radius we get round corners: \inlinebuffer
+
+The nice thing about these extensions to rules is that the internals of \TEX\ are
+not affected much. Rules are just blobs with dimensions and the par builder, for
+instance, doesn't care what they are. There is no need for further inspection.
+Maybe future versions of \LUATEX\ will provide more useful subtypes.
+
+\stopsection
+
+\startsection[title=Spaces]
+
+Multiple successive spaces in \TEX\ are normally collapsed into one. But, what if
+you don't want any spaces at all? It turns out this is rather hard to achieve.
+You can, of course, change the catcodes, but that won't work well if you pass
+text around as macro arguments. Also, you would not want spaces that separate
+macros and text to be ignored, but only those in the typeset text. For such use,
+\LUATEX\ introduces \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}
+specifies no injection, a value of \type{2} results in injection of a zero skip,
+and the default \type{0} gets the standard behavior. Below we see the results for
+four characters separated by spaces.
+
+\startlinecorrection \dontcomplain
+\startcombination[nx=3,ny=2,distance=1cm]
+ {\ruledhbox to 4cm{\vtop{\hsize 10mm\nospaces=0\relax x x x x \par}\hss}} {\type {0 / hsize 10mm}}
+ {\ruledhbox to 4cm{\vtop{\hsize 10mm\nospaces=1\relax x x x x \par}\hss}} {\type {1 / hsize 10mm}}
+ {\ruledhbox to 4cm{\vtop{\hsize 10mm\nospaces=2\relax x x x x \par}\hss}} {\type {2 / hsize 10mm}}
+ {\ruledhbox to 4cm{\vtop{\hsize 1mm\nospaces=0\relax x x x x \par}\hss}} {\type {0 / hsize 1mm}}
+ {\ruledhbox to 4cm{\vtop{\hsize 1mm\nospaces=1\relax x x x x \par}\hss}} {\type {1 / hsize 1mm}}
+ {\ruledhbox to 4cm{\vtop{\hsize 1mm\nospaces=2\relax x x x x \par}\hss}} {\type {2 / hsize 1mm}}
+\stopcombination
+\stoplinecorrection
+
+In case you wonder why setting the space related skips to zero is not enough:
+even when it is set to zero you will always get something. What gets inserted
+depends on \type {\spaceskip}, \type {\xspaceskip}, \type {\spacefactor} and font
+dimensions. I must admit that I always have to look up the details, as, normally,
+it's wrapped up in a spacing system that you implement once then forget about. In
+any case, with \type {\nospaces}, you can completely get rid of even an inserted
+zero space.
+
+\stopsection
+
+\startsection[title=Token lists]
+
+The following four primitives are provided because they are more efficient than
+macro|-|based variants: \type {\toksapp}, \type {\tokspre}, and \type {\e...}
+(expanding) versions of both. They can be used to append or prepend tokens to a
+token register.
+
+However, don't overestimate the gain that can be brought in simple situations
+with not that many tokens involved (read: there is no need to instantly change
+all code that does it the traditional way). The new method avoids saving tokens
+in a temporary register. Then, when you combine registers (which is also
+possible), the source gets appended to the target and, afterwards, the source is
+emptied: we don't copy but combine!
+
+Their use can best be demonstrated by examples. We employ a scratch register
+\type {\ToksA}. The examples here show the effects of grouping; in fact, they
+were written for testing this effect. Because we don't use the normal assignment
+code, we need to initialize a local copy in order to get the original content
+outside the group.
+
+\newtoks\ToksA
+\newtoks\ToksB
+
+\startbuffer
+\ToksA{}
+\bgroup
+ \ToksA{}
+ \bgroup \toksapp\ToksA{!!} [\the\ToksA=!!] \egroup
+ [\the\ToksA=]
+\egroup
+[\the\ToksA=]
+\stopbuffer
+
+\typebuffer result: {\nospacing\start\tttf\inlinebuffer\stop}
+
+\startbuffer
+\ToksA{}
+\bgroup
+ \ToksA{A}
+ \bgroup \toksapp\ToksA{!!} [\the\ToksA=A!!] \egroup
+ [\the\ToksA=A]
+\egroup
+[\the\ToksA=]
+\stopbuffer
+
+\typebuffer result: {\nospacing\start\tttf\inlinebuffer\stop}
+
+\startbuffer
+\ToksA{}
+\bgroup
+ \ToksA{}
+ \bgroup
+ \ToksA{A} \toksapp\ToksA{!!} [\the\ToksA=A!!]
+ \egroup
+ [\the\ToksA=]
+\egroup
+[\the\ToksA=]
+\stopbuffer
+
+\typebuffer result: {\nospacing\start\tttf\inlinebuffer\stop}
+
+\startbuffer
+\ToksA{}
+\bgroup
+ \ToksA{A}
+ \bgroup
+ \ToksA{} \toksapp\ToksA{!!} [\the\ToksA=!!]
+ \egroup
+ [\the\ToksA=A]
+\egroup
+[\the\ToksA=]
+\stopbuffer
+
+\typebuffer result: {\nospacing\start\tttf\inlinebuffer\stop}
+
+
+\startbuffer
+\ToksA{}
+\bgroup
+ \ToksA{}
+ \bgroup
+ \tokspre\ToksA{!!} [\the\ToksA=!!]
+ \egroup
+ [\the\ToksA=]
+\egroup
+[\the\ToksA=]
+\stopbuffer
+
+\typebuffer result: {\nospacing\start\tttf\inlinebuffer\stop}
+
+\startbuffer
+\ToksA{}
+\bgroup
+ \ToksA{A}
+ \bgroup
+ \tokspre\ToksA{!!} [\the\ToksA=!!A]
+ \egroup
+ [\the\ToksA=A]
+\egroup
+[\the\ToksA=]
+\stopbuffer
+
+\typebuffer result: {\nospacing\start\tttf\inlinebuffer\stop}
+
+\startbuffer
+\ToksA{}
+\bgroup
+ \ToksA{}
+ \bgroup
+ \ToksA{A} \tokspre\ToksA{!!} [\the\ToksA=!!A]
+ \egroup
+ [\the\ToksA=]
+\egroup
+[\the\ToksA=]
+\stopbuffer
+
+\typebuffer result: {\nospacing\start\tttf\inlinebuffer\stop}
+
+\startbuffer
+\ToksA{}
+\bgroup
+ \ToksA{A}
+ \bgroup
+ \ToksA{} \tokspre\ToksA{!!} [\the\ToksA=!!]
+ \egroup
+ [\the\ToksA=A]
+\egroup
+[\the\ToksA=]
+\stopbuffer
+
+\typebuffer result: {\nospacing\start\tttf\inlinebuffer\stop}
+
+Here we used \type {\toksapp} and \type {\tokspre}, but there are two more
+primitives, \type {\etoksapp} and \type {\etokspre}; these expand the given
+content while it gets added.
+
+The next example demonstrates that you can also append another token list. In
+this case the original content is gone after an append or prepend.
+
+\startbuffer
+\ToksA{A}
+\ToksB{B}
+\toksapp\ToksA\ToksB
+\toksapp\ToksA\ToksB
+[\the\ToksA=AB]
+\stopbuffer
+
+\typebuffer result: {\nospacing\start\tttf\inlinebuffer\stop}
+
+This is intended behaviour! The original content of the source is not copied but
+really appended or prepended. Of course, grouping works well.
+
+\startbuffer
+\ToksA{A}
+\ToksB{B}
+\bgroup
+ \toksapp\ToksA\ToksB
+ \toksapp\ToksA\ToksB
+ [\the\ToksA=AB]
+\egroup
+[\the\ToksA=AB]
+\stopbuffer
+
+\typebuffer result: {\nospacing\start\tttf\inlinebuffer\stop}
+
+\stopsection
+
+\startsection[title=Active characters]
+
+We now enter an area of very dirty tricks. If you have read the \TEX\ book or
+listened to talks by \TEX\ experts, you will, for sure, have run into the term
+\quote {active} characters. In short, it boils down to this: each character has a
+catcode and there are 16 possible values. For instance, the backslash normally
+has catcode zero, braces have values one and two, and normal characters can be 11
+or 12. Very special are characters with code 13 as they are \quote {active} and
+behave like macros. In Plain \TEX, the tilde is one such active character, and
+it's defined to be a \quote {non|-|breakable space}. In \CONTEXT, the vertical
+bar is active and used to indicate compound and fence constructs.
+
+Below is an example of a definition:
+
+\starttyping
+\catcode`A=13
+\def A{B}
+\stoptyping
+
+This will make the \type {A} into an active character that will typeset a \type
+{B}. Of course, such an example is asking for problems since any \type {A} is
+seen that way, so a macro name that uses one will not work. Speaking of macros:
+
+\starttyping
+\def\whatever
+ {\catcode`A=13
+ \def A{B}}
+\stoptyping
+
+This won't work out well. When the macro is read it gets tokenized and stored and
+at that time the catcode change is not yet done so when this macro is called the
+A is frozen with catcode letter (11) and the \type {\def} will not work as
+expected (it gives an error). The solution is this:
+
+\starttyping
+\bgroup
+\catcode`A=13
+\gdef\whatever
+ {\catcode`A=13
+ \def A{B}}
+\egroup
+\stoptyping
+
+Here we make the \type {A} active before the definition and we use grouping
+because we don't want that to be permanent. But still we have a hard|-|coded
+solution, while we might want a more general one that can be used like this:
+
+\starttyping
+\whatever{A}{B}
+\whatever{=}{{\bf =}}
+\stoptyping
+
+Here is the definition of \type {whatever}:
+
+\starttyping
+\bgroup
+\catcode`~=13
+\gdef\whatever#1#2%
+ {\uccode`~=`#1\relax
+ \catcode`#1=13
+ \uppercase{\def\tempwhatever{~}}%
+ \expandafter\gdef\tempwhatever{#2}}
+\egroup
+\stoptyping
+
+If you read backwards, you can imagine that \type {\tempwhatever} expands into an
+active \type {A} (the first argument). So how did it become one? The trick is in
+the \type {\uppercase} (a \type {\lowercase} variant will also work). When casing
+an active character, \TEX\ applies the (here) uppercase and makes the result
+active too.
+
+We can argue about the beauty of this trick or its weirdness, but it is a fact
+that for a novice user this indeed looks more than a little strange. And so, a
+new primitive \type {\letcharcode} has been introduced, not so much out of
+necessity but simply driven by the fact that, in my opinion, it looks more
+natural. Normally the meaning of the active character can be put in its own
+macro, say:
+
+\starttyping
+\def\MyActiveA{B}
+\stoptyping
+
+We can now directly assign this meaning to the active character:
+
+\starttyping
+\letcharcode`A=\MyActiveA
+\stoptyping
+
+Now, when \type {A} is made active this meaning kicks in.
+
+\starttyping
+\def\whatever#1#2%
+ {\def\tempwhatever{#2}%
+ \letcharcode`#1\tempwhatever
+ \catcode`#1=13\relax}
+\stoptyping
+
+We end up with less code but, more important, it is easier to explain to a user
+and, in my eyes, it looks less obscure, too. Of course, the educational gain here
+wins over any practical gain because a macro package hides such details and only
+implements such an active character installer once.
+
+\stopsection
+
+\startsection[title=\type {\csname} and friends]
+
+You can check for a macro being defined as follows:
+
+\starttyping
+\ifdefined\foo
+ do something
+\else
+ do nothing
+\fi
+\stoptyping
+
+which, of course, can be obscured to:
+
+\starttyping
+do \ifdefined\foo some\else no\fi thing
+\stoptyping
+
+A bit more work is needed when a macro is defined using \type {\csname}, in which
+case arbitrary characters (like spaces) can be used:
+
+\starttyping
+\ifcsname something or nothing\endcsname
+ do something
+\else
+ do nothing
+\fi
+\stoptyping
+
+Before \ETEX, this was done as follows:
+
+\starttyping
+\expandafter\ifx\csname something or nothing\endcsname\relax
+ do nothing
+\else
+ do something
+\fi
+\stoptyping
+
+The \type {\csname} primitive will do a lookup and create an entry in the hash
+for an undefined name that then defaults to \type {\relax}. This can result in
+many unwanted entries when checking potential macro names. Thus, \ETEX's \type
+{\ifcsname} test primitive can be qualified as a \quote {necessity}.
+
+Now take the following example:
+
+\starttyping
+\ifcsname do this\endcsname
+ \csname do this\endcsname
+\else\ifcsname do that\endcsname
+ \csname do that\endcsname
+\else
+ \csname do nothing\endcsname
+\fi\fi
+\stoptyping
+
+If \type {do this} is defined, we have two lookups. If it is undefined and \type
+{do that} is defined, we have three lookups. So there is always one redundant
+lookup. Also, when no match is found, \TEX\ has to skip to the \type {\else} or
+\type {\fi}. One can save a bit by uglifying this to:
+
+\starttyping
+\csname do%
+ \ifcsname do this\endcsname this\else
+ \ifcsname do that\endcsname that\else
+ nothing\fi\fi
+\endcsname
+\stoptyping
+
+This, of course, assumes that there is always a final branch. So let's get back
+to:
+
+\starttyping
+\ifcsname do this\endcsname
+ \csname do this\endcsname
+\else\ifcsname do that\endcsname
+ \csname do that\endcsname
+\fi\fi
+\stoptyping
+
+As said, when there is some match, there is always one test too many. In case you
+think this might be slowing down \TEX, be warned: it's hard to measure. But as
+there can be (m)any character(s) involved, including multi|-|byte \UTF-8\
+characters or embedded macros, there is a bit of penalty in terms of parsing
+token lists and converting to \UTF\ strings used for the lookup. And, because
+\TEX\ has to give an error message in case of troubles, the already|-|seen tokens
+are stored too.
+
+So, in order to avoid this somewhat redundant operation of parsing, memory
+allocation (for the lookup string) and storing tokens, the new primitive \type
+{\lastnamedcs} is now provided:
+
+\starttyping
+\ifcsname do this\endcsname
+ \lastnamedcs
+\else\ifcsname do that\endcsname
+ \lastnamedcs
+\fi\fi
+\stoptyping
+
+In addition to the (in practice, often negligible) speed gain, there are other
+advantages: \TEX\ has less to skip, and although skipping is fast, it still isn't
+a nice side effect (also useful when tracing). Another benefit is that we don't
+have to type the to|-|be|-|looked|-|up text twice. This reduces the chance of
+errors. In our example we also save 16 tokens (taking 64 bytes) in the format
+file. So, there are enough benefits to gain from this primitive, which is not a
+specific feature, but just an extension to an existing mechanism.
+
+It also works in this basic case:
+
+\starttyping
+\csname do this\endcsname
+\lastnamedcs
+\stoptyping
+
+And even this works:
+
+\starttyping
+\csname do this\endcsname
+\expandafter\let\expandafter\dothis\lastnamedcs
+\stoptyping
+
+And after:
+
+\starttyping
+\bgroup
+\expandafter\def\csname do this\endcsname{or that}
+\global\expandafter\let\expandafter\dothis\lastnamedcs
+\expandafter\def\csname do that\endcsname{or this}
+\global\expandafter\let\expandafter\dothat\lastnamedcs
+\egroup
+\stoptyping
+
+We can use \type {\dothis} that gives \type {or that} and \type {\dothat} that
+gives \type {or this}, so we have the usual freedom to be able to use something
+meant to make code clean for the creation of obscure code. % Amen!
+
+A variation on this is the following:
+
+\starttyping
+\begincsname do this\endcsname
+\stoptyping
+
+This call will check if \type {\do this} is defined, and, if so, will expand it.
+However, when \type {\do this} is not found, it does not create a hash entry. It
+is equivalent to:
+
+\starttyping
+\ifcsname do this\endcsname\lastnamedcs\fi
+\stoptyping
+
+but it avoids the \type {\ifcsname}, which is sometimes handy as these tests can
+interfere.
+
+I played with variations like \type {\ifbegincsname}, but we then quickly end up
+with dirty code due to the fact that we first expand something and then need to
+deal with the following \type {\else} and \type {\fi}. The two above|-|mentioned
+primitives are non|-|intrusive in the sense that they were relatively easy to add
+without obscuring the code base.
+
+As a bonus, \LUATEX\ also provides a variant of \type {\string} that doesn't add
+the escape character: \type {\csstring}. There is not much to explain to this:
+
+\starttyping
+\string\whatever<>\csstring\whatever
+\stoptyping
+
+This gives: \expanded{\type{\string\whatever<>\csstring\whatever}}.
+
+The main advantage of these several new primitives is that a bit less code is
+needed and (at least for \CONTEXT) leads to a bit less tracing output. When you
+enable \type {\tracingall} for a larger document or example, which is sometimes
+needed to figure out a problem, it's not much fun to work with the resulting
+megabyte (or sometimes even gigabyte) of output so the more we can get rid of,
+the better. This consequence is just an unfortunate side effect of the \CONTEXT\
+user interface with its many parameters. As said, there is no real gain in speed.
+
+\stopsection
+
+\startsection[title=Packing]
+
+Deep down in \TEX, horizontal and vertical lists eventually get packed. Packing
+of an \type {\hbox} involves:
+
+\startitemize[n,packed]
+\startitem ligature building (for traditional \TEX\ fonts), \stopitem
+\startitem kerning (for traditional \TEX\ fonts), \stopitem
+\startitem calling out to \LUA\ (when enabled) and \stopitem
+\startitem wrapping the list in a box and calculating the width. \stopitem
+\stopitemize
+
+When a \LUA\ function is called, in most cases, the location where it happens
+(group code) is also passed. But say that you try the following:
+
+\starttyping
+\hbox{\hbox{\hbox{\hbox foo}}}
+\stoptyping
+
+Here we do all four steps, while for the three outer boxes, only the last step
+makes any sense. And it's not trivial to avoid the application of the \LUA\
+function here. Of course, one can assign an attribute to the boxes and use that
+to intercept, but it's kind of clumsy. This is why we now can say:
+
+\starttyping
+\hpack{\hpack{\hpack{\hbox foo}}}
+\stoptyping
+
+There are also \type {\vpack} for a \type {\vbox} and \type {\tpack} for a \type
+{\vtop}. There can be a small gain in speed when many complex manipulations are
+done, although in, for instance, \CONTEXT, we already have provisions for that.
+It's just that the new primitives are a cleaner way out of a conceptually nasty
+problem. Similar functions are available on the \LUA\ side.
+
+\stopsection
+
+\startsection[title=Errors]
+
+We end with a few options that can be convenient to use if you don't care about
+exact compatibility.
+
+\starttyping
+\suppresslongerror
+\suppressmathparerror
+\suppressoutererror
+\suppressifcsnameerror
+\stoptyping
+
+When entering your document on a paper teletype terminal, starting \TEX, and then
+going home in order to have a look at the result the next day, it does make sense
+to catch runaway cases, like premature ending of a paragraph (using \type {\par}
+or equivalent empty lines), or potentially missing \type {$$}s. Nowadays, it's
+less important to catch such coding issues (and be more tolerant) because editing
+takes place on screen and running (and restarting) \TEX\ is very fast.
+
+The first two flags given above deal with this. If you set the first to any value
+greater than zero, macros not defined as \type {\long} (not accepting paragraph
+endings) will not complain about \cs{par} tokens in arguments. The second setting
+permits and ignores empty lines (also pars) in math without reverting to dirty
+tricks. Both are handy when your content comes from places that are outside of
+your control. The job will not be aborted (or hang) because of an empty line.
+
+The third setting suppresses the \type {\outer} directive so that macros that
+originally can only be used at the outer level can now be used anywhere. It's
+hard to explain the concept of outer (and the related error message) to a user
+anyway.
+
+The last one is a bit special. Normally, when you use \type {\ifcsname} you will
+get an error when \TEX\ sees something unexpandable or that can't be part of a
+name. But sometimes you might find it to be quite acceptable and can just
+consider the condition as false. When the fourth variable is set to non|-|zero,
+\TEX\ will ignore this issue and try to finish the check properly, so basically
+you then have an \type {\iffalse}.
+
+\stopsection
+
+\startsection[title=Final remarks]
+
+I mentioned performance a number of times, and it's good to notice that most
+changes discussed here will potentially be faster than the alternatives, but this
+is not always noticeable, in practice. There are several reasons.
+
+For one thing, \TEX\ is already highly optimized. It has speedy memory management
+of tokens and nodes and unnecessary code paths are avoided. However, due to
+extensions to the original code, a bit more happens in the engine than in decades
+past. For instance, \UNICODE\ fonts demand sparse arrays instead of fixed|-|size,
+256|-|slot data structures. Handling \UTF\ involves more testing and construction
+of more complex strings. Directional typesetting leads to more testing and
+housekeeping in the frontend as well as the backend. More keywords to handle, for
+instance \type {\hbox}, result in more parsing and pushing back unmatched tokens.
+Some of the penalty has been compensated for through the changing of whatsits
+into regular nodes. In recent versions of \LUATEX, scanning of \type {\hbox}
+arguments is somewhat more efficient, too.
+
+In any case, any speedup we manage to achieve, as said before, can easily become
+noise through inefficient macro coding or user's writing bad styles. And we're
+pretty sure that not much more speed can be squeezed out. To achieve higher
+performance, it's time to buy a machine with a faster \CPU\ (and a huge cache),
+faster memory (lanes), an \SSD, and regularly check your coding.
+
+\stopsection
+
+\stopchapter
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/still/still-introduction.tex b/doc/context/sources/general/manuals/still/still-introduction.tex
new file mode 100644
index 000000000..c8f1b4d76
--- /dev/null
+++ b/doc/context/sources/general/manuals/still/still-introduction.tex
@@ -0,0 +1,28 @@
+\startcomponent still-introduction
+
+\environment still-environment
+
+\startchapter[title=Introduction]
+
+This document is a follow up on \quote {mk}, \quote {hybrid} and \quote {about}.
+The first one is written when \LUATEX\ evolved to version 0.50, the second one
+stops around version 0.70 while the last one goes on after that. The title of
+this document refers to the fact that we're still working towards version 1.00.
+In the meantime we have done a lot of testing and the engine has become quite
+stable. The \LUAJITTEX\ variant has become part of the standard distribution and
+we're working on a library support framework. At the same time we keep
+experimenting and here we will report on some issues that we run into as well as
+discuss the way \CONTEXT\ \MKIV\ keeps adapting itself.
+
+\startlines
+Hans Hagen
+Hasselt NL
+2013\endash2016
+\blank
+\type {http://www.luatex.org}
+\type {http://www.pragma-ade.com}
+\stoplines
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/still/still-math-stripe.png b/doc/context/sources/general/manuals/still/still-math-stripe.png
new file mode 100644
index 000000000..606ea7961
--- /dev/null
+++ b/doc/context/sources/general/manuals/still/still-math-stripe.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/still/still-math.tex b/doc/context/sources/general/manuals/still/still-math.tex
new file mode 100644
index 000000000..9918b5c79
--- /dev/null
+++ b/doc/context/sources/general/manuals/still/still-math.tex
@@ -0,0 +1,2880 @@
+% language=uk
+
+\environment still-environment
+
+\starttext
+
+\startchapter[title=Math new style: are we better off?]
+
+\startsection[title=Introduction]
+
+In this article I will summarize the state of upgrading math support in \CONTEXT\
+per mid 2013 in the perspective of demand, usability, font development and
+\LUATEX. There will be some examples, but don't consider this a manual: there are
+enough articles in the \type {mkiv}, \type {hybrid} and \type {about} series
+about specific topics; after all, we started with this many years ago. Where
+possible I will draw some conclusions with respect to the engine. Some comments
+might sound like criticism, but you should keep in mind that I wouldn't spend so
+much time on \TEX\ if I would not like it that much. It's just that the
+environment wherein \TEX\ is and can be used is not always as perfect as one
+likes it to be, i.e.\ bad habits and decisions once made can be pretty persistent
+and haunt us forever. I'm not referring to \TEX\ the language and program here,
+but more to its use in scientific publishing: in an early stage standards were
+set and habits were nurtured which meant that to some extent the coding resembles
+the early days of computing and the look and feel got frozen in time, in spite of
+developments in coding and evolving typographic needs. I think that the community
+has missed some opportunities to influence and improve matters which means that
+we're stuck with suboptimal situations and, although they are an improvement,
+\UNICODE\ math and \OPENTYPE\ math have their flaws.
+
+This is not a manual. Some aspects will be explained with examples, others are
+just mentioned. I've written down enough details in the documents that describe
+the history of \LUATEX\ and \MKIV\ and dedicated manuals and repeating myself
+makes not much sense. Even if you think that I talk nonsense, some of the
+examples might set you thinking. This article was written for the \TUG\ 2013
+conference in Japan. Many thanks to Barbara Beeton for proofreading and providing
+feedback.
+
+\stopsection
+
+\startsection[title=Some basic questions]
+
+Is there still a need for a program like \TEX ? Those who typeset math will argue
+that there is. After all, one of the reasons why \TEX\ showed up is typesetting
+math. In this perspective we should ask ourselves a few questions:
+
+\startitemize[packed]
+\startitem Is \TEX\ still the most adequate tool? \stopitem
+\startitem Does it make sense to invest in better machinery? \stopitem
+\startitem Have we learned from the past and improved matters? \stopitem
+\startitem What drives development and choices to be made? \stopitem
+\stopitemize
+
+The first question is not that easy to answer, unless you see proof in the fact
+that \TEX\ is still popular for typesetting a wide range of complex content (with
+critical editions being among the most complex). Indeed the program still
+attracts new users and developers. But we need to be realistic. First of all,
+there is some bias involved: if you have used a tool for many years, it becomes
+the one and only and best tool. But that doesn't necessarily make it the best
+tool for everyone.
+
+In this internet world finding a few thousand fellow users gives the impression
+that there is a wide audience but there can be of course thousandfold more users
+of other systems that don't fall into your scope. This is fine: I always wonder
+why there is not more diversity; for instance, we have only a few operating
+systems to choose from, and in communities around computer languages there is a
+tendency to evangelize (sometimes quite extreme). We should also take into
+account that a small audience can have a large impact so size doesn't matter
+much.
+
+As \TEX\ is still popular among mathematicians, we can assume that it hasn't lost
+its charm yet and often it is their only option. We have a somewhat curious
+situation that scientific publishers still want to receive \TEX\ documents |<|a
+demand that is not much different from organizations demanding \MSWORD\
+documents|>| but at the same time don't care too much about \TEX\ at all. Their
+involvement in user groups has started degrading long ago, compared to their
+profits; they don't invest in development; they are mostly profit driven, i.e.\
+those who submit their articles don't even own their sources any more, etc.\
+
+On the other hand, we have users who make their own books (self|-|publishing) and
+who go, certainly in coding and style, beyond what publishers do: they want to
+use all kinds of fonts (and mixtures), color, nicely integrated graphics, more
+interesting layouts, experiment with alternative presentations. But especially
+for documents that contain math that also brings a price: you have to spend more
+time on thinking about presenting the content and coding of the source. This all
+means that if we look at the user side, alternative input is an option,
+especially if they want to publish on different media. I know that there are
+\CONTEXT\ users who make documents (or articles) with \CONTEXT, using whatever
+coding suits best, and do some conversion when it has to be submitted to a
+journal. Personally I think that the lack of interest of (commercial) publishers,
+and their rather minimal role in development, no longer qualifies them to come up
+with requirements for the input, if only because in the end all gets redone
+anyway (in Far Far Away).
+
+It means that, as long as \TEX\ is feasible, we are relatively free to move on
+and experiment with alternative input. Therefore the other two questions become
+relevant. The \TEX\ engines are adapted to new font technology and a couple of
+math fonts are being developed (funded by the user groups). Although the \TEX\
+community didn't take the lead in math font technology we are catching up. At the
+same time we're investing much time in new tools, but given the fact that much
+math is produced for publishers it doesn't get much exposure. Scientific
+publishing is quite traditional and like other publishing lags behind and
+eventually will disappear in its current form. It could happen that one morning
+we find out that all that \quote {publishers want it this or that way} gets
+replaced by ways of publishing where authors do all themselves. A publisher (or
+his supplier) can keep using a 20-year old \TEX\ ecosystem without problems and
+no one will notice, but users can go on and come up with more modern designs and
+output formats and in that perspective the availability of modern engines and
+fonts is good. I've said it before: for \CONTEXT\ user demand drives development.
+
+In the next sections I will focus on different aspects of math and how we went
+from \MKII\ to \MKIV. I will also discuss some (pending) issues. For each aspect
+I will try to answer the third question: did matters improve and if not, and how
+do we cope with it (in \CONTEXT).
+
+\stopsection
+
+\startsection[title=The math script]
+
+All math starts with symbols and|/|or characters that have some symbolic meaning
+and in \TEX\ speak this can be entered in a rather natural way:
+
+\startbuffer
+$ y = 2x + b $
+\stopbuffer
+
+\typebuffer
+
+In order to let \TEX\ know it's math (the equivalent of) two dollar signs are
+used as triggers. The output of this input is: \inlinebuffer. But not all is that
+simple, for instance if we want to square the x, we need to use a superscript
+signal:
+
+\startbuffer
+$ y = x^2 + ax + b $
+\stopbuffer
+
+\typebuffer
+
+The \type {^} symbol results in a smaller \type {2} raised after the \type {x} as
+in \inlinebuffer. Ok, this \type {^} and its cousin \type {_} are well known
+conventions so we stick to this kind of input.
+
+\startbuffer
+$ y = \sqrt { x^2 + ax + b } $
+\stopbuffer
+
+A next level of complexity introduces special commands, for instance a command
+that will wrap its argument in a square root symbol: \inlinebuffer.
+
+\typebuffer
+
+It is no big deal to avoid the backslash and use this kind of coding:
+
+\startbuffer
+\asciimath { y = sqrt ( x^2 + ax + b ) }
+\stopbuffer
+
+\typebuffer
+
+In fact, we have been supporting scientific calculator input for over a decade in
+projects where relatively simple math had to be typeset. In one of our
+longest|-|running math related projects the input went from \TEX, to content
+\MATHML\ to \OPENMATH\ and via presentation \MATHML\ ended up as a combination of
+some kind of encoding that web browsers can deal with. This brings us to reality:
+it's web technology that drives (and will drive math) coding. Unfortunately
+content driven coding (like content \MATHML) does not seem to be the winner here,
+even if it renders easier and is more robust.
+
+Later I will discuss fences, like parentheses. Take this dummy formula:
+
+\starttyping
+$ (x + 1) / a = (x - 1) / b $
+\stoptyping
+
+In a sequential (inline) rendering this will come out okay. A more display mode
+friendly variant can be:
+
+\starttyping
+$ \frac{x + 1}{a} = \frac{x - 1}{b} $
+\stoptyping
+
+which in pure \TEX\ would have been:
+
+\starttyping
+$ {x + 1} \over {a} = {x - 1} \over {b} $
+\stoptyping
+
+The main difference between these two ways of coding is that in the second
+(plain) variant the parser doesn't know in advance what it is dealing with. There
+are a few cases in \TEX\ where this kind of parsing is needed and it complicates
+not only the parser but also is not too handy at the macro level. This is why the
+\type {\frac} macro is often used instead. In \LUATEX\ we didn't dare to get rid
+of \type {\over} and friends, even if we're sure they are not used that often by
+users.
+
+In inline or in more complex display math, the use of fences is quite normal.
+
+\startbuffer
+$ ( \frac{x + 1}{a} + 1 )^2 = \frac{x - 1}{b} $
+\stopbuffer
+
+\typebuffer
+
+Here we have a problem. The parentheses don't come out well.
+
+\blank \noindentation \getbuffer \blank
+
+We have to do this:
+
+\startbuffer
+$ \left( \frac{x + 1}{a} + 1 \right)^2 = \frac{x - 1}{b} $
+\stopbuffer
+
+\typebuffer
+
+in order to get:
+
+\blank \noindentation \getbuffer \blank
+
+Doing that \type{\left}|-|\type{\right} trick automatically is hard, although in
+\MATHML, where we have to interpret operators anyway it is somewhat easier. The
+biggest issue here is that these two directives need to be paired. In \ETEX\ a
+\type {\middle} primitive was added to provide a way to have bars adapt their
+height to the surroundings. Interesting is that where at the character level a
+\type {(} has a math property \type {open} and \type {)} has \type {close}. The
+bar, as we will see later, can also act as separator but this property does not
+exist. Because properties (classes in \TEX\ speak) determine spacing we have a
+problem here. So far we didn't extend the repertoire of properties in \LUATEX\ to
+suit our needs (although in \CONTEXT\ we do have more properties).
+
+If you are a \TEX\ user typesetting math, you can without doubt come up with more
+cases of source coding that have the potential of introducing complexities. But
+you will also have noticed that in most cases \TEX\ does a pretty good job on
+rendering math out of the box. And macro packages can provide additional
+constructs that help to hide the details of fine tuning (because there is a lot
+that {\em can} be fine tuned).
+
+In \TEX\ there are a couple of special cases that we can reconsider in the
+perspective of (for instance) faster machines. Normally a macro cannot have a
+\type {\par} in one of its arguments. By defining them as \type {\long} this
+limitation goes away. This default limitation was handy in times when a run was
+relatively slow and grabbing a whole document source as argument due to a missing
+brace had a price. Nowadays this is no real issue which is why in \LUATEX\ we can
+disable \type {\long} which indeed we do in \CONTEXT. On the agenda is to also
+permit \type {\par} in a math formula, as currently \TEX\ complains loudly.
+Permitting a bit more spacy formula definitions (by using empty lines) would be a
+good thing.
+
+Another catch is that in traditional \TEX\ math characters cannot be used outside
+math. That restriction has been lifted. Of course users need to be aware of the
+fact that a mix of math and text symbols can be visually incompatible.
+
+In the examples we used \type {^} and \type {_} and in math mode these have
+special meanings. Traditionally in text mode they trigger an error message. In
+\CONTEXT\ \MKIV\ we have made these characters regular characters but in math
+mode they still behave as expected. \footnote {In an intermediate version \type
+{\nonknuthmode} and \type {\donknuthmode} controlled this.} In a similar fashion
+the \type {&} is an ampersand and when you enable \type {\asciimode} the dollar
+and percent signs also become regular. \footnote {Double percent signs act as
+comments then which is comparable to comments in some programming languages.} In
+\LUATEX\ we have introduced primitives for all characters (or more precisely:
+catcodes) that \TEX\ uses for special purposes like opening and closing math
+mode, scripts, table alignment, etc.
+
+In projects that involve \XML\ we use \MATHML. In \TEX\ many characters can be
+inserted using commands that are tuned for some purpose. The same character can
+be associated with several commands. In \MATHML\ entities and \UNICODE\
+characters are used instead of commands. Interesting is that whenever we get math
+coded that way, there is a good chance that the coding is inconsistent. Of course
+there are ways in \MATHML\ to make sure that a character gets interpreted in the
+right way. For instance, the \type {mfenced} element drives the process of
+(matching) parenthesis, brackets, etc.\ and a renderer can use this property to
+make sure these symbols stretch vertically when needed. However, using \type {mo}
+in an \type {mrow} for a fence is also an option, but that demands some more
+(fuzzy) analysis. I will not go into details here, but some of the more obscure
+options and flags in \CONTEXT\ relate to overcoming issues with such cases.
+
+I have no experience with how \MSWORD\ handles math input, apart from seeing some
+demos. But I know that there is some input parsing involved that is a mixture
+between \TEX\ and analysis. Just as word processing has driven math font
+technology it might be that at some point users expect more clever processing of
+input. To a large extent \TEX\ users already expect that. Where till now \TEX\
+could inspire the way word processers do math, word processors can inspire \TEX
+ies way of inputting text.
+
+So, we have \MATHML, which, in spite of being structured, is still providing
+users a lot of freedom. Then there are word processors, where mouse clicks and
+interpretation does the job. And of course we have \TEX, with its familiar
+backslashes. Let us consider math, when seen in print, as a script to express the
+math language. And indeed, in \OPENTYPE, math is one of the official scripts
+although one where a rather specific kind of machinery is needed in order to get
+output.
+
+I could show more complex math formulas but no matter what notation is used,
+coding will always be somewhat cumbersome and handywork. Math formula coding and
+typesetting remains a craft in itself and \TEX\ notation will keep its place for
+a while. So, with that aspect settled we can continue to discuss rendering.
+
+% So what drives development? I tend to forget about publishers, who, if \TEX\ is
+% known at all in the organization, outsource anyway, and focus on users. One of
+% these users is me, and we do some work for publishers, but they seldom know or
+% care what tools we use. Users also contribute to development: for instance user
+% groups spend considerable money on font development. Interesting is that given
+% the substantial profits of publishers who indirectly still benefit from this it
+% are the users who invest in the tools. In my opinion this also puts them in
+% charge. And of course, developments with respect to input, output and fonts are a
+% driving force behind engine development. There are some more factors: control, as
+% \TEX\ is a programming language, and joy, as manipulating look and feel can be
+% fun. In the future these two will probably dominate over the others, when
+% typesetting and print become more specialized.
+
+\stopsection
+
+\startsection[title=Alphabets]
+
+I have written about math alphabets before so let's keep it simple here. I think
+we can safely say that most math support mechanisms in macro packages are
+inspired by plain \TEX. In traditional \TEX\ we have fonts with a limited number
+of glyphs and an eight|-|bit engine, so in order to get the thousands of possible
+characters mapped onto glyphs the right one has to be picked from some font. In
+addition to characters that you find in \UNICODE, there are also variants,
+additional sizes and bits and pieces that are used in constructing large
+characters, so in practice a math font is quite large. But it is unlikely that we
+will ever run into a situation where fonts pose limits.
+
+The easiest way is of course a direct mapping: an \quote {a} entered in math mode
+becomes an \quote{$a$} simply because the current font at that time has an italic
+shape in the slot referenced by the character. If we want a bold shape instead,
+we can switch to another font and still input an \quote {a}. The 16 families
+available are normally enough for the alphabets that we need. Because symbols can
+be collected in any font, they are normally accessed by name, like \type {\oplus}
+or $\oplus$.
+
+In \UNICODE\ math the math italic \quote {$a$} has slot \type {U+1D44E} and
+directly entering this character in a \UNICODE\ aware \TEX\ engine also has to
+give that \quote {$a$}. In fact, it is the only official way to get that
+character and the fact that we can enter the traditional \ASCII\ characters and
+get an italic shape is a side effect of the macro package, for instance the way
+it defines math fonts and families. \footnote {Our experience is that even when
+for instance \MATHML\ permits coding of math in \XML, copy editors have no
+problem with abusing regular italic font switches to simulate math. This can
+result is a weird mix of math rendering.}
+
+\definefont[mathdemo][file:texgyrepagellamath*mathematics]
+
+Before we move on, let's stress a limitation in \UNICODE\ with respect to math
+alphabets. It has always been a principle of \UNICODE\ committees to never
+duplicate entries. So, thanks to the availability of some characters in
+traditional (font) encodings, we ended up with some symbols that are used for
+math in the older regions of \UNICODE. As a consequence some alphabets have gaps.
+The only real reason I can come up with for accepting these gaps is that old
+documents using these symbols would be not compatible with gapfull \UNICODE\ math
+but I could argue that a document that uses those old codepoints uses commands
+(and needs some special fonts) to get the other symbols anyway, so it's unlikely
+to be a real math document. On the other hand, once we start using \UNICODE\ math
+we could benefit from gapless alphabets simply because otherwise each application
+would have to deal with the exceptions. One can come up with arguments like
+\quotation {just use this or that library} but that assumes persistence, and also
+forces everyone to use the same approach. In fact, if we hide behind a library we
+could as well have hidden the vectors (alphabets) as well. But as they are
+exposed, the gaps stand out as an anomaly. \footnote {One good reason for not
+having the gaps is that when users cut and paste there is no way to know if \type
+{U+210E} is used as Planck constant or variable of some sort, i.e.\ the not
+existing \type {0x1D455}. There is no official way to tag it as something math,
+and even then, as it has no code point it so has lost it's meaning, contrary to a
+copied $i$.} Let's illustrate this with an example. Say that we load the \TEX
+Gyre Pagella math font and call up a few characters:
+
+\startbuffer
+\definefont[mathdemo][file:texgyrepagellamath*mathematics]
+\mathdemo \char"0211C \char"1D507 \char"1D515
+\stopbuffer
+
+\typebuffer
+
+The \UNICODE\ fraktur math alphabet is continuous but the \quote {MATHEMATICAL
+FRAKTUR CAPITAL R} is missing as we already have the \type {BLACK-LETTER CAPITAL
+R} instead. So, this is why we only see two characters show up. It means that in
+the input we cannot have a \type {U+1D515}.
+
+\blank \start \getbuffer \stop \blank
+
+Of course we can cheat and fill in the gap:
+
+\startbuffer
+\definefontfeature
+ [mymathematics]
+ [mathematics]
+ [mathgaps=yes]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+This feature will help us cheat:
+
+\startbuffer
+\definefont[mathdemo][file:texgyrepagellamath*mymathematics]
+\mathdemo \char"0211C \char"1D507 \char"1D515
+\stopbuffer
+
+\typebuffer
+
+This time we can use the character. I wonder what would happen if the \TEX\
+community would simply state that slot \type {U+1D515} is valid. I bet that math
+related applications would support it, as they also support more obscure
+properties of \TEX\ input encoding.
+
+\blank \start \getbuffer \stop \blank
+
+If you still wonder why I bother about this, here is a practical example. The
+\SCITE\ editor that I use is rather flexible and permits me to implement advanced
+lexers for \CONTEXT\ (and especially hybrid usage). It also permits to hook in
+\LUA\ code and that way the editor can (within bounds) be extended. As an example
+I've added some button bars that permit entering math alphabets. Of course the
+appearance depends on the font used but operating systems tend to consult
+multiple fonts when the core font of the editor doesn't provide a glyph.
+
+\startlinecorrection
+ \externalfigure[still-math-stripe.png][width=\textwidth]
+\stoplinecorrection
+
+Here I show a small portion of the stripe with buttons that inject the shown
+characters. What happens in the rendering is that first the used font is
+consulted and that one has a couple of \quote {BLACK LETTER CAPITAL}s so they get
+used. The others are \quote {MATHEMATICAL FRAKTUR CAPITAL}s and since the font is
+not a math font the renderer takes them from (in this case) Cambria Math, which
+is why they look so different, especially in proportion. Of course we could start
+out with Cambria but it has no monospace (which I want for editing) and is a less
+complete text font, so we have a chicken||egg problem here. It is one reason why
+as part of the math font project we extend the Dejavu Sans Mono with proper
+(consistent) math symbols. Anyhow, it illustrates why gaps are kind of evil from
+the application point of view.
+
+\startluacode
+local data = characters.data
+
+local bold = context.bold
+local verbatim = context.formatted.type
+local small = context.small
+local normal = context
+
+local NC, NR, HL = context.NC, context.NR, context.HL
+
+context.start()
+
+context.definefont(
+ { "mathdemo"},
+ { "file:texgyrepagellamath*mymathematics" }
+)
+
+context.starttabulate { "||c||||" }
+ NC() bold("gap")
+ NC() bold("char")
+ NC() bold("meant")
+ NC() bold("unicode")
+ NC() bold("used")
+ NR() HL()
+ for k, v in table.sortedhash(mathematics.gaps) do
+ local description = data[v].description
+ local surrogate = string.match(description,".- (.)$")
+ if not surrogate then
+ surrogate = "H"
+ end
+ for i=k-1,1,-1 do
+ local d = data[i].description
+ if d ~= "PRIVATE SLOT" then
+ surrogate = string.gsub(d,"(.)$",surrogate)
+ break
+ end
+ end
+ NC() verbatim("%U",k)
+ NC() normal ("\\mathdemo %c",k)
+ NC() small (surrogate)
+ NC() verbatim("%U",v)
+ NC() small (description)
+ NR()
+ end
+context.stoptabulate()
+
+context.stop()
+\stopluacode
+
+Barbara Beeton told me that, although it took some convincing arguments in the
+discussions about math in \UNICODE, we have at least one hole less than to be
+expected: slot \type {U+1D4C1} has not been seen as already covered by \type
+{U+02113}. So is there really this distinction between a \typ {MATHEMATICAL
+SCRIPT SMALL L} and \typ {SCRIPT SMALL L} (usually \type {\ell} in macro
+packages? Indeed there is, although at the time of this writing interestingly
+Latin Modern fonts lacked the mathematical one (which in \CONTEXT\ math mode
+normally results in an upright drop||in). Such details become important when math
+is edited by someone not familiar with the distinction between a variable (or
+whatever) represented by a script shape and the length operator. There seems not
+to be agreement by font designers about the shapes being upright or italic, so
+some confusion will remain, although this does not matter as long as within the
+font they differ.
+
+\definefont[SampleMathLatinModern][file:latinmodern-math]
+\definefont[SampleMathStixXits] [file:xits-math]
+\definefont[SampleMathBonum] [file:texgyrebonum-math]
+\definefont[SampleMathTermes] [file:texgyretermes-math]
+\definefont[SampleMathPagella] [file:texgyrepagella-math]
+\definefont[SampleMathLucida] [file:lucidabrightmathot]
+
+\starttabulate[||||]
+ \NC \bf font \NC \bf \type {U+1D4C1} \NC \bf \type {U+02113} \NC \NR
+ \HL
+ \NC latin modern \NC \SampleMathLatinModern \char"1D4C1 \NC \SampleMathLatinModern \char"02113 \NC \NR
+ \NC stix/xits \NC \SampleMathStixXits \char"1D4C1 \NC \SampleMathStixXits \char"02113 \NC \NR
+ \NC bonum \NC \SampleMathBonum \char"1D4C1 \NC \SampleMathBonum \char"02113 \NC \NR
+ \NC termes \NC \SampleMathTermes \char"1D4C1 \NC \SampleMathTermes \char"02113 \NC \NR
+ \NC pagella \NC \SampleMathPagella \char"1D4C1 \NC \SampleMathPagella \char"02113 \NC \NR
+ \NC lucida \NC \SampleMathLucida \char"1D4C1 \NC \SampleMathLucida \char"02113 \NC \NR
+\stoptabulate
+
+As math uses greek and because greek was already present in \UNICODE\ when math
+was recognized as script and got its entries, you can imagine that there are some
+issues there too, but let us move on to using alphabets.
+
+In addition to a one||to||one mapping from a font slot onto a glyph, you can
+assign properties to characters that map them onto a slot in some family (which
+itself relates to a font). This means that in a traditional approach you can
+choose among two methods:
+
+\startitemize[packed]
+
+ \startitem
+ You define several fonts (or instances of the same font) where the
+ positions of regular characters point to the relevant shape. So, when an
+ italic family is active the related font maps character \type {U+61} as
+ well as \type {U+1D44E} to the same italic shape \quote {$ \utfchar
+ {0x1D44E} $}. A switch from italic to bold italic is then a switch in
+ family and in that family the \type {U+61} as well as \type {U+1D482}
+ become bold italic \quote {$ \utfchar {0x1D482} $}.
+ \stopitem
+
+ \startitem
+ You define just one font. The alphabet (uppercase, lowercase and sometimes
+ digits and a few symbols) gets codes that point to the right shape. When we
+ switch from italic to bold italic, these codes get reassigned.
+ \stopitem
+
+\stopitemize
+
+The first method has some additional overhead in defining fonts (you can use
+copies but need to make sure that the regular \ASCII\ slots are overloaded) but
+the switch from italic to bold italic is fast, while in the second variant there
+is less overhead in fonts but reassigning the codes with a style switch has some
+overhead (although in practice this overhead is can be neglected because not that
+many alphabet switches take place). In fact, many \TEX\ users will probably stick
+to traditional approaches where verbose names are used and these can directly
+point to the right shape.
+
+In \CONTEXT, when we started with \MKIV, we immediately decided to follow another
+approach. We only have one family and we assume \UNICODE\ math input. Ok, we do
+have a few more families, but these relate to a full bold math switch and
+right||to||left math. We cannot expect users to enter \UNICODE\ math, if only
+because support in editors is not that advanced, so we need to support the
+\ASCII\ input method as well.
+
+We have one family and don't redefine character codes, but set properties
+instead. We don't switch fonts, but properties. These properties (often a
+combination) translates into the remapping of a specific character in the input
+onto a \UNICODE\ math code point that then directly maps onto a shape. This
+approach is quite clean and efficient at the \TEX\ end but carries quite a lot of
+overhead at the \LUA\ end. So far users never complained about it, maybe because
+\CONTEXT\ math support is rather optimized. Also, dealing with characters is only
+part of math typesetting and we have subsystems that use far more processing
+power.
+
+Because math characters are organized in classes, we need to set them up. Because
+for several reasons we collect character properties in a database we also define
+these character properties in \LUA. This means that the \type {math-*} files are
+relatively small. So we have much less code at the \TEX\ end, but quite a lot at
+the \LUA\ end. This assumes a well managed \LUA\ subsystem because as soon as
+users start plugging in their code, we have to make sure that the core system
+still functions well. The amount of code involved in virtual math fonts is also
+relatively large but most of that is becoming sort of obsolete.
+
+Relatively new in \CONTEXT\ is the possibility in some mathematical constructs to
+configure the math style (text, script, etc.) and in some cases math classes can
+be influenced. Control over styles is somewhat more convenient in \LUATEX,
+because we can consult the current style in some cases. I expect more of this
+kind of control in \CONTEXT, although most users probably never need it. These
+kinds of features are meant for users like Aditya Mahajan, who likes to explore
+such features and also takes advantage of the freedom to experiment with the look
+and feel of math.
+
+The font code that relates to math is not the easiest to understand but this is
+because it has to deal with bold as well as bidirectional math in efficient ways.
+Because in \CONTEXT\ we have additional sizes (\type {x}, \type {xx}, \type {a},
+\type {b}, \type {c}, \type {d}, \unknown) we also have some delayed additional
+defining going on. This all might sound slower to set up but in the end we win
+some back by the fact that we have fewer fonts to load. The price that a
+\CONTEXT\ user pays in terms of runtime is more influenced by the by now large
+sequence of math list manipulators than by loading a font.
+
+An unfortunate shortcoming of \UNICODE\ math is that some alphabets have gaps.
+This is because characters can only end up once in the standard. Given the number
+of weird characters showing up in recent versions, I think this condition is
+somewhat over the top. It forces applications that deal with \UNICODE\ math to
+implement exceptions over and over again. In \CONTEXT\ we assume no gaps and
+compensate for that.
+
+There are several ways that characters can become glyphs. An \quote {a} can
+become an italic, bold, bold italic but also end up sans serif or monospace.
+Because there are several artistic interpretations possible, some fonts provide a
+so|-|called alternate. In the case of for instance greek we can also distinguish
+upright or slanted (italic). A less well known transformation is variants driven
+by \UNICODE\ modified directives. If we forget about bidirectional math and full
+bold (heavy) math we can (currently) identify 6 axes:
+
+\starttabulate[|c|l|l|]
+\HL
+\NC \bf axis \NC \bf use \NC \bf choices \NC \NR
+\HL
+\NC 1 \NC type \NC digits, lowercase \& uppercase latin \& greek, symbols \NC \NR
+\NC 2 \NC alphabet \NC regular, sans serif, monospace, blackboard, fraktur, script \NC \NR
+\NC 3 \NC style \NC upright, italic, bold, bolditalic \NC \NR
+\NC 4 \NC variant \NC alternative rendering provided by font \NC \NR
+\NC 5 \NC shape \NC unchanged, upright, italic \NC \NR
+\NC 6 \NC \UNICODE \NC alternative rendering driven by \UNICODE\ modifier \NC \NR
+\HL
+\stoptabulate
+
+Apart from the last one, this is not new, but it is somewhat easier to support
+this consistently. It's one of the areas where \UNICODE\ shines, although the
+gaps in vectors are a bad thing. One thing that I decided early in the \MKIV\
+math development is that all should fit into the same model: it makes no sense to
+cripple a whole system because of a few exceptions.
+
+Users expect their digits to be rendered upright and letters to be rendered with
+italic shapes, but use regular \ASCII\ input. This means that we need to relocate
+the letters to the relevant alphabet in \UNICODE. In \CONTEXT\ this happens as
+part of several analysis steps that more or less are the same as the axis
+mentioned. In addition there is collapsing, remapping, italic correction,
+boldening, checking, intercepting of special input, and more going on. Currently
+there are (depending on what gets enabled) some 10 to 15 manipulation passes over
+the list and there will be more.
+
+So how does the situation compare to the old one? I think we can safely say that
+we're better off now and that \LUATEX\ behaves quite okay. There is not much that
+can be improved, apart from more complete fonts (especially bold). A nice bonus
+of \LUATEX\ is that math characters can be used in text mode as well (given that
+the current font provides them).
+
+It will be clear that by following this route we moved far away from the \MKII\
+approach and the dependency on \LUA\ has become rather large in this case. The
+benefit is that we have rather clean code with hardly any exceptions. It came at
+the price of lots of experiments and (re)coding but I think it pays off for
+users.
+
+\stopsection
+
+\startsection[title=Bold]
+
+Bold is sort of special. There are bold symbols and some bold alphabets and that
+{\em is} basically what bold math is: just a different rendering. In a proper
+\OPENTYPE\ math fonts these bold characters are covered.
+
+Section titles or captions are often typeset bolder and when they contain math
+all of it needs to be bolder too. So, a regular italic shape becomes a bold
+italic shape but a bold shape becomes heavy. This means that we need a full blown
+bold font for that purpose. And although some are on the agenda of the font team,
+often we need to fake it. This is seldom an issue as (at least in the documents
+that I deal with) section titles are not that loaded with math.
+
+A proper implementation of such a mechanism involves two aspects: first there
+needs to be a complete bold math font with heavy bold included, and second the
+macro package must switch to bold math in a bold context. When no real bold font
+is available, some automatic mapping can take place, but that might give
+interpretation issues if bold is used in a formula. For the average highschool
+math that we render this is not an issue. Currently there are no full bold math
+fonts that have enough coverage. (The \XITS\ font, derived from \STIX, has a bold
+companion that does provide for instance bold radicals but lacks many bolder
+alphabets and symbols.)
+
+\startbuffer
+\startimath
+ \sqrt{x^2\over 4x} \qquad
+ {\bf \sqrt{x^2\over 4x}} \qquad
+ {\mb \sqrt{x^2\over 4x}} \qquad
+ \sqrt{x^2 + 4x} \qquad
+ {\bf \sqrt{x^2 + 4x}} \qquad
+ {\mb \sqrt{x^2 + 4x}}
+\stopimath
+\stopbuffer
+
+\typebuffer
+
+This gives:
+
+\blank \getbuffer \blank
+
+Here it is always a bit of a guess if bold extensibles are (already) supported so
+it's dangerous to go wild with full bold/heavy combinations unless you check
+carefully what results you get. Another aspect you need to be aware of is that
+there is an extensive fallback mechanism present. When possible a proper alphabet
+will be used, but when one is not present there is a fallback on another. This
+ensures that we get at least something.
+
+There is not much that an engine can do about it, apart from providing enough
+families to implement it. In a \TYPEONE\ universe indeed we need lots of families
+already so the traditional 16-family pool is drained soon. In \LUATEX\ we can
+have 256 families which means that additional \TYPEONE\ bases family sets are no
+issue any longer. But as in \MKIV\ we no longer follow that route, bold math can
+be set up relatively easy, given that we have a bold font. If we don't have such
+a font, we have an intermediate mode where a bold font is simulated. Keep in mind
+that this always will need checking, at least as long as don't have complete
+enough bold fonts with heavy bold included.
+
+\stopsection
+
+\startsection[title=Radicals]
+
+In most cases a \TEX\ user is not that aware of what happens in order to get a
+nicely wrapped up root on paper. In traditional \TEX\ this is an interplay
+between rather special font properties and macros. In \LUATEX\ it has become a
+bit more simple because we introduced a primitive for it. Also, in \OPENTYPE\
+fonts, the radical is provided in a somewhat more convenient way. In an
+\OPENTYPE\ math font there are some variables that control the rendering:
+
+\starttyping
+RadicalExtraAscender
+RadicalRuleThickness
+RadicalVerticalGap
+RadicalDisplayStyleVerticalGap
+\stoptyping
+
+The engine will use these to construct the symbol. The root symbols can grow in two
+dimensions: the left bit grows vertically but due to the fact that there is a slope
+involved it happens in steps using different symbols.
+
+\blank
+$ \dorecurse{10}{\rootradical{}{\blackrule[height=#1ex,depth=0pt,width=0pt]}} $
+\blank
+
+Compare this to for instance how a bracket grows:
+
+\blank
+$ \dorecurse{10}{\left[\blackrule[height=#1ex,depth=0pt,width=0pt]\right.} $
+\blank
+
+The bracket is a so|-|called vertical extensible character. It grows in steps
+using different glyphs and when we run out of variants a last resort kicks in: a
+symbol gets constructed from three pieces, a top and bottom piece and in between
+a repeated middle segment. The root symbol is also vertically extensible but
+there the change to the stretched variant is visually rather distinct. This has a
+reason: the specification cannot deal with slopes. So, in order to stretch the
+last resort, as with the bracket, goes vertical and provides a middle segment.
+
+The root can also grow horizontally; just watch this:
+
+\blank
+$ \dorecurse{10}{\rootradical{}{\blackrule[height=#1ex,depth=0pt,width=#1ex,color=gray]}} $
+\blank
+
+The font specification can handle vertical as well as horizontal extensibles but
+surprise: it cannot handle a combination. Maybe the reason is that there is only
+one such symbol: the radical. So, instead of expecting a symmetrical engine, an
+exception is made that is controlled by the mentioned variables. So, while we go
+upwards with a proper middle glyph, we go horizontal using a rule.
+
+One can argue that the traditional \TEX\ machinery is complex because it uses
+special font properties and macros, but once you start looking into the modern
+variant it becomes clear that although we can have a somewhat cleaner
+implementation, it still is a kludge. And, because rendering on paper no longer
+drives development it is not to be expected that this will change. The \TEX\
+community didn't come up with a better approach and there is no reason to believe
+that it will in the future.
+
+One of the reasons for users to use \TEX\ is control over the output: instead of
+some quick and dirty job authors can spend time on making their documents look
+the way they want. Even in these internet times with dynamic rendering, there is
+still a place for a more frozen rendering, explicitly driven by the author. But,
+that only makes sense when the author can influence the rendering, maybe even
+without bounds.
+
+So, because in \CONTEXT\ I really want to provide control, as one of the last
+components, math radicals were made configurable too. In fact, the code involved
+is not that complex because most was already in place. What is interesting is
+that when I rewrapped radicals once again I realized that instead of delegating
+something to the engine and font one could as well forget about it and do all in
+dedicated code. After all, what is a root symbol more that a variation of a
+framed bit of text. Here are some examples.
+
+\startbuffer[demo]
+$
+ y = \sqrt { x^2 + ax + b } \quad
+ y = \sqrt[2]{ x^2 + ax + b } \quad
+ y = \sqrt[3]{ \frac{x^2 + ax + b }{c} }
+$
+\stopbuffer
+
+\typebuffer[demo]
+
+By default this gets rendered as follows:
+
+\blank \start \getbuffer[demo] \stop \blank
+
+We can change the rendering alternative to one that permits some additional
+properties (like color):
+
+\startbuffer[setup]
+\setupmathradical[sqrt][alternative=normal,color=maincolor]
+\stopbuffer
+
+\typebuffer[setup]
+
+This looks more or less the same:
+
+\blank \start \getbuffer[setup,demo] \stop \blank
+
+\startbuffer[setup]
+\setupmathradical
+ [sqrt]
+ [alternative=mp,
+ color=darkgreen]
+\stopbuffer
+
+We can go a step further and instead of a font use a symbol that adapts itself:
+
+\typebuffer[setup]
+
+Now we get this:
+
+\blank \start \getbuffer[setup,demo] \stop \blank
+
+Such a variant can be more subtle, as we not only can adapt the slope
+dynamically, but also add a nice finishing touch to the end of the horizontal
+line. Take this variant:
+
+\startbuffer
+\startuniqueMPgraphic{math:radical:extra}
+ draw
+ math_radical_simple(OverlayWidth,OverlayHeight,OverlayDepth,OverlayOffset)
+ withpen pencircle
+ xscaled (2OverlayLineWidth)
+ yscaled (3OverlayLineWidth/4)
+ rotated 30
+ dashed evenly
+ withcolor OverlayLineColor ;
+\stopuniqueMPgraphic
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer[setup-extra]
+\setupmathradical
+ [sqrt]
+ [alternative=mp,
+ mp=math:radical:extra,
+ color=darkred]
+\stopbuffer
+
+We hook this graphic into the macro:
+
+\typebuffer[setup-extra]
+
+And this time we see a dashed line:
+
+\blank \start \getbuffer[setup-extra,demo] \stop \blank
+
+Of course one can argue about esthetics but let's face it: much ends up in print,
+also by publishers, that doesn't look pretty at all, so I tend to provide the
+author the freedom to make what he or she likes most. If someone is willing to
+spend time on typesetting (using \TEX), let's at least make it a pleasant
+experience.
+
+\blank
+$ \getbuffer[setup]\dostepwiserecurse{1}{13}{2}{\sqrt{\blackrule[height=#1ex,depth=0pt,width=#1ex,color=gray]}\quad} $
+\blank
+
+Here we see the symbol adapt. We can think of alternative symbols, for instance
+the first part becomes wider dependent on the height, but this can be made less
+prominent. Depending on user input I will provide some more variants as it's
+relatively easy to implement.
+
+Before I wrap up, let's see what exactly we have in stock deep down.
+Traditionally \TEX\ provides a \type {\surd} command which is just the root
+symbol. Then there is a macro \type {\root..\of..} that wraps the last argument
+in a root and typesets a degree as well (of given). In \CONTEXT\ we now provide
+this:
+
+\startbuffer
+$\surd x \quad \surdradical x \quad \rootradical{3}{x} \quad \sqrt[3]{x}$
+\stopbuffer
+
+\typebuffer
+
+I don't remember ever having used the \type {\surd} command, but this is what
+it renders:
+
+\blank \noindentation \getbuffer \blank
+
+Only the last command, \type {\sqrt} is a macro defined in one of the math
+modules, the others are automatically defined from the database:
+
+\starttyping
+[0x221A] = { -- there are a few more properties set
+ unicodeslot = 0x221A,
+ description = "SQUARE ROOT",
+ adobename = "radical",
+ category = "sm",
+ mathspec = {
+ { class = "root", name = "rootradical" },
+ { class = "radical", name = "surdradical" },
+ { class = "ordinary", name = "surd" },
+ },
+}
+\stoptyping
+
+So we get the following definitions:
+
+\testpage[4]
+
+\starttabulate[||||]
+\FL
+\NC \bf command \NC \bf meaning \NC \bf usage \NC \SR
+\FL
+\NC \type{\surd} \NC \tttf \meaning\surd \NC \type{\surd} \NC \FR
+\NC \type{\surdradical} \NC \tttf \meaning\surdradical \NC \type{\surdradical {body}} \NC \MR
+\NC \type{\rootradical} \NC \tttf \meaning\rootradical \NC \type{\rootradical {degree} {body}} \NC \LR
+\LL
+\stoptabulate
+
+So, are we better off? Given that a font sticks to how Cambria does it, we only
+need a minimal amount of code to implement roots. This is definitely an
+improvement at the engine level. However, in the font there are no fundamental
+differences between the traditional and more modern approach, but we've lost the
+opportunity to make a proper two||dimensional extensible. Eventually the user
+won't care as long as the macro package wraps it all up in useable macros.
+
+\stopsection
+
+\startsection[title=Primes]
+
+Another rather disturbing issue is with primes. A prime is an accent|-|like
+symbol that as a kind of superscript is attached to a variable or function. In
+good old \TEX\ tradition this is entered as follows:
+
+\startbuffer
+$ f'(x) $ and $ f''(x) $
+\stopbuffer
+
+\typebuffer
+
+which produces: \inlinebuffer. The upright quote symbols are never used for
+anything else than primes and magically get remapped onto a prime symbol. This
+might look trivial, but there are several aspects to deal with, especially when
+using traditional fonts. In the eight|-|bit \type {lmsy10} math symbol font,
+which is derived from the original \type {cmsy10} the prime symbol looks like
+this:
+
+\startlinecorrection
+\ruledhbox{\definedfont[file:lmsy10.afm]\getnamedglyphdirect{file:lmsy10.afm}{prime}}
+\stoplinecorrection
+
+The bounding box is rather tight and the reason for this becomes clear when we put
+it alongside another character:
+
+\startlinecorrection
+$x\ruledhbox{\definedfont[file:lmsy10.afm]\getnamedglyphdirect{file:lmsy10.afm}{prime}}$
+\stoplinecorrection
+
+The prime is not only pretty large, it also sits on the baseline. It means that
+in order to make it a real prime (basically an operator pointing back to the
+preceding symbol), we need to raise it. Of course we can define a \type {\prime}
+command that takes care of this, and indeed that is what happens in plain \TEX\
+and derived formats. The more direct \type {'} input is supported by making that
+character an active character in math mode. Active characters behave like
+commands and in this case the \type {\prime} command.
+
+In the \OPENTYPE\ latin modern fonts the prime (\type{U+2032}) looks like this:
+
+\startlinecorrection
+$x\ruledhbox{\definedfont[file:latin-modernmath]\utfchar{0x2032}}$
+\stoplinecorrection
+
+So here we have an already raised and also smaller prime symbol. And, because we
+also have double (\type{U+2033}) and triple primes (\type{U+2034}) a few more
+characters are available
+
+\startlinecorrection
+$x\ruledhbox{\definedfont[file:latin-modernmath]\utfchar{0x2032}}$
+$x\ruledhbox{\definedfont[file:latin-modernmath]\utfchar{0x2033}}$
+$x\ruledhbox{\definedfont[file:latin-modernmath]\utfchar{0x2034}}$
+\stoplinecorrection
+
+In the traditional approach these second and third order primes are built from
+the first order primes. And this introduces, in addition to the raising, another
+complexity: the \type {\prime} command has to look ahead and intercept future
+primes. And as there can also be a following raised symbol (or number) it needs
+to take a superscript trigger into account as well. So, let's look at some
+possible input:
+
+\def\ShowPrime#1{\NC \type{$#1$} \NC $#1$ \NC \NR}
+
+\starttabulate[|||]
+\ShowPrime{f'(x)}
+\ShowPrime{f''(x)}
+\ShowPrime{f'''(x)}
+\ShowPrime{f\prime^2}
+\ShowPrime{f\prime\prime^2}
+\ShowPrime{f\prime\prime\prime^2}
+\ShowPrime{f'\prime'^2}
+\ShowPrime{f^'(x)}
+\ShowPrime{f'^2}
+\ShowPrime{f{\prime}^2}
+\stoptabulate
+
+Now imagine that you have this big prime character sitting on the baseline and
+you need to turn \type {'''} into a a triple prime, but don't want \type {^'} to
+be double raised, while on the other hand \type {^2} should be. This is of course
+doable with some macro juggling but how about supporting traditional fonts in
+combination with \OPENTYPE, where the primes are already raised.
+
+When we started with \LUATEX\ and \CONTEXT\ \MKIV, one of the first decisions I
+made was to go \UNICODE\ math and drop eight|-|bit. In order to compensate for
+the lack of fonts, a mechanism was provided to construct virtual \UNICODE\ math
+fonts, as a prelude to the lm/gyre \OPENTYPE\ math fonts. In the meantime we have
+these fonts and the virtual variants are only kept as historic reference and for
+further experiments.
+
+As a starter I wrote a variant of the traditional \CONTEXT\ \type {\prime}
+command that could recognize somehow if it was dealing with a \TYPEONE\ or
+\OPENTYPE\ font. As a consequence it also had the traditional raise and look
+ahead mess on board. However, there was also some delegation to the \LUA\
+enhanced math support code, so the macro was not that complex. When the real
+\OPENTYPE\ math fonts showed up the macro was dropped and the virtual fonts were
+adapted to the raised|-|by|-|default situation, which in itself was somewhat
+complicated by the fact that a smaller symbol had to be used, i.e.\ some more
+information about the current set of defined math sizes has to be passed around.
+\footnote {The actual solution for this qualifies as a dirty trick so we are not
+freed from tricks yet.}
+
+Anyhow, the current implementation is rather clean and supports collapsing of
+combinations rather well. There are four prime symbols but only three reverse
+prime symbols. If needed I can provide a virtual \typ {REVERSED TRIPLE PRIME} if
+needed, but I guess it's not needed.
+
+\def\Nsprime{\ruledmbox{\prime}}
+\def\Ndprime{\ruledmbox{\doubleprime}}
+\def\Ntprime{\ruledmbox{\tripleprime}}
+\def\Nqprime{\ruledmbox{\quadrupleprime}}
+
+\def\Rsprime{\ruledmbox{\reversedprime}}
+\def\Rdprime{\ruledmbox{\reverseddoubleprime}}
+\def\Rtprime{\ruledmbox{\reversedtripleprime}}
+
+\starttabulate[|lT|lT|lM|lM|]
+\NC U+2032 \NC \chardescription{"2032} \NC \prime \NC \Nsprime \NC \NR
+\NC U+2033 \NC \chardescription{"2033} \NC \doubleprime \NC \Nsprime \Nsprime \quad
+ \Ndprime \NC \NR
+\NC U+2034 \NC \chardescription{"2034} \NC \tripleprime \NC \Nsprime \Nsprime \Nsprime \quad
+ \Nsprime \Ndprime \quad
+ \Ndprime \Nsprime \quad
+ \Ntprime \NC \NR
+\NC U+2057 \NC \chardescription{"2057} \NC \quadrupleprime \NC \Nsprime \Nsprime \Nsprime \Nsprime \quad
+ \Nsprime \Nsprime \Ndprime \quad
+ \Nsprime \Ndprime \Nsprime \quad
+ \Ndprime \Nsprime \Nsprime \quad
+ \Ndprime \Ndprime \quad
+ \Ntprime \Nsprime \quad
+ \Nsprime \Ntprime \quad
+ \Nqprime \NC \NR
+\NC U+2035 \NC \chardescription{"2035} \NC \reversedprime \NC \Rsprime \NC \NR
+\NC U+2036 \NC \chardescription{"2036} \NC \reverseddoubleprime \NC \Rsprime \Rsprime \quad
+ \Rdprime \NC \NR
+\NC U+2037 \NC \chardescription{"2037} \NC \reversedtripleprime \NC \Rsprime \Rsprime \Rsprime \quad
+ \Rsprime \Rdprime \quad
+ \Rdprime \Rsprime \quad
+ \Rtprime \NC \NR
+\stoptabulate
+
+Of course no one will use this ligature approach but I've learned to be prepared
+as it wouldn't be the first time when we encounter input that is cut and paste
+from someplace or clicked|-|till|-|it|-|looks|-|okay.
+
+There is one big complication and that is that where in \TEX\ there is only one
+big prime that gets raised and repeated in case of multiple primes, in \OPENTYPE\
+the primes are already raised. They are in fact not supposed to be superscripted,
+as they are already. In plain \TEX\ the prime is entered using an upright single
+quote and that one is made active: it is in fact a macro. That macro looks ahead
+and intercepts following primes as well as subscripts. In the end, a superscript
+(the prime) and optional subscripts are attached to the preceding symbol. If we
+want to benefit from the \UNICODE\ primes as well as support collapsing, such a
+macro quickly becomes messy. Therefore, in \MKIV\ the optional subscript is
+handled in the collapser. We cheat a bit by relocating super- and subscripts and
+at the same time remap the primes to virtual characters that are smashed to a
+smaller height, lowered to the baseline, and eventually superscripted. Indeed, it
+sounds somewhat complex and it is. In a next version I will also provide ways to
+influence the size as one might want larger of smaller primes to show up. This is
+one case where the traditional \TEX\ fonts have a benefit as the primes are
+superscriptable characters, but we have to admit that the \UNICODE\ and
+\OPENTYPE\ approach is conceptually more correct. The only way out of this is to
+have a primitive operation for primes just as we have for radicals but that also
+has some drawbacks. Eventually I might come up with a cleaner solution for this
+dilemma.
+
+Let us summarize the situation and solution used in \MKIV\ now:
+
+\startitemize[packed]
+ \startitem
+ When (still) using the virtual \UNICODE\ math fonts, we construct a
+ virtual glyph that has properties similar to proper \OPENTYPE\ math
+ fonts.
+ \stopitem
+ \startitem
+ We collapse a sequence of primes into proper double and triple
+ primes.
+ \stopitem
+ \startitem
+ We unraise primes so that users who (for some reason) superscript them
+ (maybe because they still assume big ones sitting on the baseline) get
+ the desired outcome.
+ \stopitem
+ \startitem
+ We accept mixtures of \type {'} and \type {\prime}.
+ \stopitem
+\stopitemize
+
+We can do this because in \CONTEXT\ \MKIV\ we don't care too much about exact
+visual compatibility as long as we can make users happy with clean mechanisms.
+So, this is one of the situations where the new situation is better, thanks to on
+the one hand the way primes are provided in fonts, and on the other hand the
+enhanced math machinery in \MKIV.
+
+\stopsection
+
+\startsection[title=Accents]
+
+There are a few special character types in math and accents are one of them.
+Personally I think that the term accent is somewhat debatable but as they are
+symbols drawn on top of or below something we can stick to that description for
+the moment. In addition to some regular fixed width variants, we have adaptive
+versions: \type {\hat} as well as \type {\widehat} and more.
+
+\startlinecorrection
+\dorecurse{6}{$\widehat{\blackrule[width=#1ex,color=gray]}$ }
+\stoplinecorrection
+
+I have no clue if wider variants are needed but such a partial coverage
+definitely looks weird. So, as an escape users can kick in their own code. After
+all, who says that a user cannot come up with a new kind of math. The following
+example demonstrates how this is done:
+
+\startbuffer
+\startMPextensions
+ vardef math_ornament_hat(expr w,h,d,o,l) text t =
+ image (
+ fill
+ (w/2,10l) -- (w + o/2,o/2) --
+ (w/2, 7l) -- ( - o/2,o/2) --
+ cycle shifted (0,h-o) t ;
+ setbounds
+ currentpicture
+ to
+ unitsquare xysized(w,h) enlarged (o/2,0)
+ )
+ enddef ;
+\stopMPextensions
+\stopbuffer
+
+\typebuffer \getbuffer
+
+This defines a hat|-|like symbol. Once the sources of the math font project are
+published I can imagine that an ambitious user defines a whole set of proper
+shapes. Next we define an adaptive instance:
+
+\startbuffer
+\startuniqueMPgraphic{math:ornament:hat}
+ draw
+ math_ornament_hat(
+ OverlayWidth,
+ OverlayHeight,
+ OverlayDepth,
+ OverlayOffset,
+ OverlayLineWidth
+ )
+ withpen
+ pencircle
+ xscaled (2OverlayLineWidth)
+ yscaled (3OverlayLineWidth/4)
+ rotated 30
+ withcolor
+ OverlayLineColor ;
+\stopuniqueMPgraphic
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Last we define a symbol:
+
+\startbuffer
+\definemathornament [mathhat] [mp=math:ornament:hat,color=darkred]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+And use it as \type {\mathhat{...}}:
+
+\startlinecorrection
+\dorecurse{8}{$\mathhat{\blackrule[width=#1ex,color=gray]}$ }
+\stoplinecorrection
+
+Of course this completely bypasses the accent handler and in fact even writing
+the normal stepwise one is not that hard to do in macros. But, there is a
+built||in mechanism that helps us for those cases and it can even deal with font
+based stretched alternatives of which there are a few: curly braces, brackets and
+parentheses. The reason that these can stretch is that they don't have slopes and
+therefore can be constructed out of pieces: in the case of a curly brace we have
+4 snippets: begin, end, middle and repeated rules, and in the case of braces and
+brackets 3 snippets will do. But, if we really want we can use \METAPOST\ code
+similar to the code shown above to get a nicer outcome.
+
+There are in good \TEX\ tradition four accents that can also stretch
+horizontally: bar, brace, parenthesis and bracket. When using fonts such an
+accent looks like this:
+
+% \setupmathstackers[vfenced][color=darkyellow]
+
+\startbuffer
+$ \overbrace{a+b+c+d} \quad \underbrace{a+b+c+d} \quad \doublebrace{a+b+c+d} $
+\stopbuffer
+
+\blank \start \setupmathstackers[vfenced][color=darkyellow] \getbuffer \stop \blank
+
+this is coded like:
+
+\typebuffer
+
+As with radicals, for more fancy math you can plug in \METAPOST\ variants. Of
+course this kind of rendering should fit into the layout of the document but I
+can imagine that for schoolbooks this makes sense.
+
+\startbuffer[setup]
+\useMPlibrary[mat]
+
+\setupmathstackers
+ [vfenced]
+ [color=darkred,
+ alternative=mp]
+\stopbuffer
+
+\typebuffer[setup]
+
+Applied in an example we get:
+
+\startbuffer[demo]
+$\overbracket{a+b+c+d} \quad \underbracket{a+b+c+d} \quad \doublebracket{a+b+c+d}$ \blank
+$\overparent {a+b+c+d} \quad \underparent {a+b+c+d} \quad \doubleparent {a+b+c+d}$ \blank
+$\overbrace {a+b+c+d} \quad \underbrace {a+b+c+d} \quad \doublebrace {a+b+c+d}$ \blank
+$\overbar {a+b+c+d} \quad \underbar {a+b+c+d} \quad \doublebar {a+b+c+d}$ \blank
+\stopbuffer
+
+\start \getbuffer[setup] \startlines\getbuffer[demo]\stoplines \stop
+
+This kind of magic is partly possible because in \LUATEX\ (and therefore \MKIV)
+we can control matters a bit better. And of course the fact that we have
+\METAPOST\ embedded means that the impact of using graphics is not that large.
+
+We used the term \quote {stackers} in the setup command so although these are
+officially accents, in \CONTEXT\ we implement them as instances of a more generic
+mechanism: things stacked on top of each other. We will discuss these in the next
+section.
+
+\stopsection
+
+\startsection[title=Stackers]
+
+In plain \TEX\ and derived work you will find lots of arrow builders. In most
+cases we're talking of a combination of one or more single or double arrow heads
+combined with a rule. In any case it is something that is not so much font driven
+but macro magic. Optionally there can be text before and|/|or after as well as
+text above and|/|or below them. The later is for instance the case in chemistry.
+This text is either math or upright properly kerned and spaced non||mathematical
+text so we're talking of some mixed math and text usage. The size is normally
+somewhat smaller.
+
+Arrows can also go on top or below regular math so in the end we end up with
+several cases:
+
+\startitemize[packed]
+ \startitem
+ Something stretchable on top of or centered around the baseline, optionally
+ with text above or below.
+ \stopitem
+ \startitem
+ Something stretchable on top of a running (piece of) text or math.
+ \stopitem
+ \startitem
+ Something stretchable below a running (piece of) text or math.
+ \stopitem
+ \startitem
+ Something stretchable on top as well as below a running (piece of) text
+ or math.
+ \stopitem
+\stopitemize
+
+These have in common that the symbol gets stretched. In fact the last three cases
+are quite similar to accents but in traditional \TEX\ and its fonts arrows and
+alike never made it to accents. One reason is probably that because a macro
+language was available and because fonts were limited, it was rather easy to use
+rules to extend an arrowhead.
+
+In \CONTEXT\ this kind of vertically stacked stretchable material is implemented
+as stackers. In the chapter \type {mathstackers} of \type {about.pdf} you can
+read more about the details so here I stick to a short summary to illustrate what
+we're dealing with. Say that you want an arrow that stretches over a given width.
+
+\starttyping
+\hbox to 4cm{\leftarrowfill}
+\stoptyping
+
+In traditional \TEX\ with traditional fonts the definition of this arrow
+looks as follows:
+
+\starttyping
+\def\leftarrowfill {$
+ \mathsurround=0pt
+ \mathord{\mathchar"2190}
+ \mkern-7mu
+ \cleaders
+ \hbox {$
+ \mkern-2mu
+ \mathchoice
+ {\setbox0\hbox{$\displaystyle -$}\ht0=0pt\dp0=0pt\box0}
+ {\setbox0\hbox{$\textstyle -$}\ht0=0pt\dp0=0pt\box0}
+ {\setbox0\hbox{$\scriptstyle -$}\ht0=0pt\dp0=0pt\box0}
+ {\setbox0\hbox{$\scriptscriptstyle-$}\ht0=0pt\dp0=0pt\box0}
+ \mkern-2mu
+ $}
+ \hfill
+ \mkern-7mu
+ \mathchoice
+ {\setbox0\hbox{$\displaystyle -$}\ht0=0pt\dp0=0pt\box0}
+ {\setbox0\hbox{$\textstyle -$}\ht0=0pt\dp0=0pt\box0}
+ {\setbox0\hbox{$\scriptstyle -$}\ht0=0pt\dp0=0pt\box0}
+ {\setbox0\hbox{$\scriptscriptstyle-$}\ht0=0pt\dp0=0pt\box0}
+$}
+\stoptyping
+
+When using \TYPEONE\ fonts we don't use a \type {\mathchar} but
+more something like this:
+
+\starttyping
+\leftarrow = \mathchardef\leftarrow="3220
+\stoptyping
+
+What we see in this macro is a left arrow head at the start and as minus sign at
+the end. In between the \type {\cleaders} will take care of filling up the
+available hsize with more minus signs. The overlap is needed in order to avoid
+gaps due to rounding in the renderer and also obscures the rounded caps of the
+used minus sign.
+
+The minus sign is used because it magically connects well to the arrow head. This
+is of course a property of the design but even then you can consider it a dirty
+trick. We don't specify a width here as this macro adapts itself to the current
+width due to the leader. But if we do know the width an easier approach becomes
+possible. Take this combination of a left and right arrow on top of each other:
+
+\starttyping
+\mathstylehbox{\Umathaccent\fam\zerocount"21C4{\hskip4cm}}
+\stoptyping
+
+The \type {\mathstylehbox} macro is a \CONTEXT\ helper. When we take a closer
+look at the result (scaled up a bit) we see again snippets being used: \footnote
+{We cheat a bit here: as we use \XITS\ in this document, and that font doesn't
+yet provide this magic we switch temporarily to the Pagella font}.
+
+\startlinecorrection
+\showglyphs \switchtobodyfont[pagella]
+\scale[width=\textwidth]{\mathstylehbox{\Umathaccent\fam\zerocount"21C4{\hskip4cm}}}
+\stoplinecorrection
+
+But this time the engine itself deals with the filling. Unfortunately for the
+accent approach to work we need to specify the width. Given how these arrows are
+used, this is no problem: because we often put text on top and|/|or below, we
+need to do some packaging and therefore know the dimensions, but a generic
+alternative would be nice. This is why for \LUATEX\ we have on the low priority
+agenda:
+
+\starttyping
+\leaders"2190\hfill
+\stoptyping
+
+or a similar primitive. This way we can let the engine do some work and keep
+macros simple. Normally \type {\leaders} delegate part of repeating to the
+backend but in the case of math it has to be part of constructing the formula
+because the extensible constructor has to be used.
+
+If you've looked into the \LUATEX\ manual you might have noticed that there is a
+new primitive that permits this:
+
+\starttyping
+\mathstylehbox{\Uoverdelimiter\fam"21C4{\hskip4cm}}
+\stoptyping
+
+However, it is hardly useable for our purpose for several reasons. First of all,
+when the argument is narrower than the smallest possible delimiter both get left
+aligned, so the delimiter sticks out (this can be considered a bug). But also,
+the placement is influenced by a couple of parameters that we then need to force
+to zero values, which might interfere. Another property of this mechanism is that
+the style is influenced and so we need to mess more with that. These are enough
+reasons to ignore this extension for a while. Maybe at some point, when really
+needed, I will write a proper wrapper for this primitive.
+
+When we started with \MKIV\ we stuck with the leaders approach for a while if
+only because there was no real need to redefine the old macros. But after a while
+one starts wondering if this is still the way to go, especially when
+reimplementing the chemistry macros didn't lead to nicer looking code. Part of
+the problem was that putting two arrows on top of each other where each one goes
+into another direction gave issues due to the fact that we don't have the right
+snippets to do it nicely. A way out was to create virtual characters for
+combinations of begin and end snippets as well as middle pieces, construct a
+proper virtual extensible and use the \LUATEX\ extensible constructor. Although
+we still have a character that gets built out of snippets, at least the begin and
+end snippet indicate that we have to do with one codepoint, contrary to two
+independent stacked arrows.
+
+This was also the moment that I realized that it was somewhat weird that
+\OPENTYPE\ math fonts didn't have that kind of support. After discussing this
+with Bogus{\l}aw Jackowski of the math font project we decided that it made sense
+to add proper native extensibles to the upcoming math fonts. Of course I still
+had to support other math fonts but at least we had a conceptually clean example
+font now. So, from that moment on the implementation used extensibles when
+possible and falls back on the fake approach when needed.
+
+In \CONTEXT\ all these vertically stacked items are now handled by the math
+stacker subsystem, including a decent set of configuration options. As said, the
+symbols that need to stretch currently use the accent primitives which is okay
+but somewhat messy because that mechanism is hard to control (after all it wants
+to put stuff on top or below something). For (mostly) chemistry we can put text
+on top or below arrows and control offsets of the text as well as the axis of the
+arrows. We can use color and set the style. In addition there are constructs
+where there is text in the middle and arrows (or other symbols that need to
+adapt) on top or at the bottom.
+
+Many arrows come in sizes. For instance there are two sizes of right pointing
+arrows as well as stretched variants, and use as top and bottom accents.
+
+\starttabulate[|T||]
+\NC \detokenize {$\rightarrow \quad \char"2192$} \NC $\rightarrow \quad \char"2192$ \NC \NR
+\NC \detokenize {$\longrightarrow \quad \char"27F6$} \NC $\longrightarrow \quad \char"27F6$ \NC \NR
+\TB
+\NC \detokenize {\hbox to 2cm{$\rightarrowfill$}} \NC \hbox to 2cm{$\rightarrowfill$} \NC \NR
+\NC \detokenize {\hbox to 4cm{$\rightarrowfill$}} \NC \hbox to 4cm{$\rightarrowfill$} \NC \NR
+\TB
+\NC \detokenize {$\overrightarrow{a+b+c}$} \NC $\overrightarrow{a+b+c}$ \NC \NR
+\NC \detokenize {$\underrightarrow{a+b+c}$} \NC $\underrightarrow{a+b+c}$ \NC \NR
+\stoptabulate
+
+The first two arrows are just characters. The boxed ones are extensibles using
+leaders that build the arrow from snippets (a hack till we have proper character
+leaders) and the last two are implemented by abusing the accent mechanism and
+thereby use the native extensibles of the first character.
+
+The problem here is in names and standards. The first characters have a fixed
+size while the later are composed. The short ones have the extensibles and can
+therefore be used as accents (or when supported as character leader). However
+from the user's perspective, the distinction between the two \UNICODE\ characters
+might be less clear, not so much when they are used as character, but when used
+on top of or below something. As a coincidence, while writing this section, a
+colleague dropped a snippet of \MATHML\ on my desk:
+
+\starttyping
+<m:math>
+ <m:mrow>
+ <m:mover accent='true'>
+ <m:mrow>
+ <m:mi>A</m:mi>
+ <m:mi>S</m:mi>
+ </m:mrow>
+ <m:mo stretchy='true'>→</m:mo>
+ </m:mover>
+ </m:mrow>
+</m:math>
+\stoptyping
+
+However, instead of {<m:mo>→</m:mo>} there was used \type
+{<m:mo>&xrarr;</m:mo>} and that entity is the long arrow. As is often the case in
+\MATHML\ the rendering is supposed to be quite tolerant and here both should
+stretch over the row. When a \TEX\ user renders his or her source and sees
+something wrong, the search for what character or command should be used instead
+starts. A \MATHML\ user probably just expects things to work. This means that in
+a system like \CONTEXT\ there will always be hacks and kludges to deal with such
+matters. It is again one of these areas where optimally the \TEX\ community could
+have influenced proper and systematic coding, but it didn't happen. So, no matter
+now good we make an engine or macro package, we always need to be prepared to
+adapt to what users expect. Let's face it: it's not that trivial to explain why
+one should favor one or the other arrow as accent: the more it has to cover, the
+longer it gets and the more we think of long arrows, but adding a whole bunch of
+\type {\longrightarrow...} commands to \CONTEXT\ makes no sense.
+
+Nevertheless, we might eventually provide more \MATHML\ compliant commands at the
+\TEX\ end. Just consider the following \MATHML\ snippets: \footnote {These
+examples are variations on what we run into in Dutch school math (age 14\endash
+16).}
+
+\startbuffer[mathml]
+<m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ <m:mrow>
+ <m:mi>a</m:mi>
+ <m:mover>
+ <m:mo>&xrarr;</m:mo>
+ <m:ms>arrow + text</m:ms>
+ </m:mover>
+ <m:mi>b</m:mi>
+ <m:mover>
+ <m:ms>text + arrow</m:ms>
+ <m:mo>&xrarr;</m:mo>
+ </m:mover>
+ <m:mi>c</m:mi>
+ </m:mrow>
+</m:math>
+\stopbuffer
+
+\typebuffer[mathml]
+
+This renders as:
+
+\blank \xmlprocessbuffer{main}{mathml}{} \blank
+
+Here the same construct is being used for two purposes: put an arrow on top of
+content that sits on the math axis or put text on an arrow that sits on the math
+axis. In \TEX\ we have different commands for these:
+
+\startbuffer[tex]
+$ a \overrightarrow{b+c} d $ and $ a \mrightarrow{b+c} d $
+\stopbuffer
+
+\typebuffer[tex]
+
+or
+
+\blank \getbuffer[tex] \blank
+
+The same is the case for:
+
+\startbuffer[mathml]
+<m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ <m:mrow>
+ <m:mi>a</m:mi>
+ <m:munder>
+ <m:mo>&xrarr;</m:mo>
+ <m:ms>arrow + text</m:ms>
+ </m:munder>
+ <m:mi>b</m:mi>
+ <m:munder>
+ <m:ms>text + arrow</m:ms>
+ <m:mo>&xrarr;</m:mo>
+ </m:munder>
+ <m:mi>c</m:mi>
+ </m:mrow>
+</m:math>
+\stopbuffer
+
+\typebuffer[mathml]
+
+or:
+
+\blank \xmlprocessbuffer{main}{mathml}{} \blank
+
+When no arrow (or other stretchable character) is used, we still need to put one
+on top of the other, but in any case we need to recognize the two cases that need
+the special stretch treatment. There is also a combination of over and under:
+
+\startbuffer[mathml]
+<m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ <m:mrow>
+ <m:mi>a</m:mi>
+ <m:munderover>
+ <m:mo>&xrarr;</m:mo>
+ <m:ms>text 1</m:ms>
+ <m:ms>text 2</m:ms>
+ </m:munderover>
+ <m:mi>b</m:mi>
+ </m:mrow>
+</m:math>
+\stopbuffer
+
+\typebuffer[mathml]
+
+\blank \xmlprocessbuffer{main}{mathml}{} \blank
+
+And again we need to identify the special stretchable characters from anything
+otherwise.
+
+\startbuffer[mathml]
+<m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ <m:mrow>
+ <m:mi>a</m:mi>
+ <m:munderover>
+ <m:ms>text 1</m:ms>
+ <m:ms>text 2</m:ms>
+ <m:ms>text 3</m:ms>
+ </m:munderover>
+ <m:mi>b</m:mi>
+ </m:mrow>
+</m:math>
+\stopbuffer
+
+\typebuffer[mathml]
+
+or:
+
+\blank \xmlprocessbuffer{main}{mathml}{} \blank
+
+And we even can have this:
+
+\startbuffer[mathml]
+<m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ <m:mrow>
+ <m:mi>a</m:mi>
+ <m:munderover>
+ <m:ms>text 1</m:ms>
+ <m:mo>&xrarr;</m:mo>
+ <m:ms>text 2</m:ms>
+ </m:munderover>
+ <m:mi>b</m:mi>
+ </m:mrow>
+</m:math>
+\stopbuffer
+
+\typebuffer[mathml]
+
+\blank \xmlprocessbuffer{main}{mathml}{} \blank
+
+We have been supporting \MATHML\ in \CONTEXT\ for a long time and will continue
+doing it. I will probably reimplement the converter (given a good reason) using
+more recent subsystems. It doesn't change the fact that in order to support it,
+we need to have some robust analytical support macros (functions) to deal with
+situations as mentioned. The \TEX\ engine is not made for that but in the
+meantime it has become more easy thanks to a combination of \TEX, \LUA\ and data
+tables. Consistent availability of extensibles (either or not virtual) helps too.
+
+Among the conclusions we can draw is that quite a lot of development (font as
+well as engine) is driven by what we have had for many years. A generic
+multi||dimensional glyph handler could have covered all odd cases that used to be
+done with macros but for historic reasons we could still be stuck with several
+slightly different and overlapping mechanisms. Nevertheless we can help macro
+writers by providing for instance leaders that accept characters as well in which
+case in math mode extensibles can be used.
+
+\stopsection
+
+\startsection[title=Fences]
+
+Fences are symbols that are put left and|/|or right of a formula. They adapt
+their height and depth to the content they surround, so they are vertical
+extensibles. Users tend to minimize their coding but this is probably not a good
+idea with fences as there is some magic involved. For instance, \TEX\ always
+wants a matching left and right fence, even if one is a phantom. So you will
+normally have something like this:
+
+\starttyping
+\left\lparent x \right\rparent
+\stoptyping
+
+and when you don't want one of them you use a period:
+
+\starttyping
+\left\lparent x \right.
+\stoptyping
+
+The question is, can we make the users live easier by magically turning braces,
+brackets and parentheses etc.\ into growing ones. As with much in \MKIV, it could
+be that \LUA\ can be of help. However, look at the following cases:
+
+\startbuffer
+\startformula (x) \stopformula
+\stopbuffer
+
+\typebuffer \getbuffer
+
+This internally becomes something like this:
+
+\starttyping
+open noad : nucleus : mathchar : U+00028
+ord noad : nucleus : mathchar : U+00078
+close noad : nucleus : mathchar : U+00029
+\stoptyping
+
+We get a linked list of three so|-|called noads where each nucleus is a math
+character. In addition to a nucleus there can be super- and subscripts.
+
+\startbuffer
+\startformula \mathinner { (x) } \stopformula
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\starttyping
+inner noad : nucleus : submlist :
+ open noad : nucleus : mathchar : U+00028
+ ord noad : nucleus : mathchar : U+00078
+ close noad : nucleus : mathchar : U+00029
+\stoptyping
+
+This is still simple, although the inner primitive results in three extra levels.
+
+\startbuffer
+\startformula \left( x \right) \stopformula
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Now it becomes more complex, although we can still quite well recognize the
+input. The question is: how easily can we translate the previous examples into
+this structure.
+
+\starttyping
+inner noad : nucleus : submlist :
+ left fence : delim : U+00028
+ ord noad : nucleus : mathchar U+00078
+ right fence : delim : U+00029
+\stoptyping
+
+\startbuffer
+\startformula ||x|| \stopformula
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Again, we can recognize the sequence in the input:
+
+\starttyping
+ord noad : nucleus : mathchar : U+0007C
+ord noad : nucleus : mathchar : U+0007C
+ord noad : nucleus : mathchar : U+00078
+ord noad : nucleus : mathchar : U+0007C
+ord noad : nucleus : mathchar : U+0007C
+\stoptyping
+
+Here we would have to collapse the two bars into one. Now, say that we manage to
+do this, even if it will cost a lot of code to check all border cases, then how
+about this?
+
+\startbuffer
+\startformula \left|| x \right|| \stopformula
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\starttyping
+inner noad : nucleus : submlist noad :
+ left fence : delim : U+00028
+ ord noad : nucleus : mathchar : U+0007C
+ ord noad : nucleus : mathchar : U+00078
+ right fence : delim : U+00029
+ord noad : nucleus : mathchar : U+0007C
+\stoptyping
+
+This time we have to look over the sublist and compare the last fence with the
+character following the sublist. If you keep in mind that there can be all kind
+of nodes in between, like glue, and that we can have multiple nested fences, it
+will be clear that this is a no|-|go. Maybe for simple cases it could work out
+but for a bit more complex math one ends up in constantly fighting asymmetrical
+input at the \LUA\ end and occasionally fighting the heuristics at the \TEX\ end.
+
+It is for this reason that we provide a mechanism that users can use to avoid the
+primitives \type {\left} and \type {\right}.
+
+\startbuffer
+\setupmathfences
+ [color=red]
+
+\definemathfence
+ [fancybracket]
+ [bracket]
+ [command=yes,
+ color=blue]
+
+\startformula
+ a \fenced[bar] {\frac{1}{b}} c \qquad
+ a \fenced[doublebar]{\frac{1}{b}} c \qquad
+ a \fenced[triplebar]{\frac{1}{b}} c \qquad
+ a \fenced[bracket] {\frac{1}{b}} c \qquad
+ a \fancybracket {\frac{1}{b}} c
+\stopformula
+\stopbuffer
+
+\typebuffer
+
+So, you can either use a generic instance of fences (\type {\fenced}) or you
+can define your own commands. There can be several classes of fences and they
+can inherit and be cloned.
+
+\getbuffer
+
+As a bonus \CONTEXT\ provides a few wrappers:
+
+\startbuffer
+\startformula
+\Lparent \frac{1}{a} \Rparent \quad
+\Lbracket \frac{1}{b} \Rbracket \quad
+\Lbrace \frac{1}{c} \Rbrace \quad
+\Langle \frac{1}{d} \Rangle \quad
+\Lbar \frac{1}{e} \Rbar \quad
+\Ldoublebar \frac{1}{f} \Rdoublebar \quad
+\Ltriplebar \frac{1}{f} \Rtriplebar \quad
+\Lbracket \frac{1}{g} \Rparent \quad
+\Langle \frac{1}{h} \Rnothing
+\stopformula
+\stopbuffer
+
+\typebuffer
+
+which gives:
+
+\getbuffer
+
+For bars, the same applies as for primes: we collapse them into proper \UNICODE\
+characters when applicable:
+
+\def\Nsbar{\ruledmbox{\singleverticalbar}}
+\def\Ndbar{\ruledmbox{\doubleverticalbar}}
+\def\Ntbar{\ruledmbox{\tripleverticalbar}}
+
+\starttabulate[|lT|lT|lM|lM|]
+\NC U+007C \NC \chardescription{"007C} \NC \singleverticalbar \NC \Nsbar \NC \NR
+\NC U+2016 \NC \chardescription{"2016} \NC \doubleverticalbar \NC \Nsbar \Nsbar \quad
+ \Ndbar \NC \NR
+\NC U+2980 \NC \chardescription{"2980} \NC \tripleverticalbar \NC \Nsbar \Nsbar \Nsbar \quad
+ \Nsbar \Ndbar \quad
+ \Ndbar \Nsbar \quad
+ \Ntbar \NC \NR
+\stoptabulate
+
+The question is always: to what extent do users want to structure their input.
+For instance, you can define this:
+
+\startbuffer
+\definemathfence [weirdrange] [left="0028,right="005D]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+and use it as:
+
+\startbuffer
+$ (a,b] = \fenced[weirdrange]{a,b}$
+\stopbuffer
+
+\typebuffer
+
+This gives \inlinebuffer\ and unless you want to apply color or use specific
+features there is nothing wrong with the direct way. Interesting is that the
+complications are seldom in regular \TEX\ input, but \MATHML\ is a different
+story. There is an \type {mfenced} element but as users can also use the more
+direct route, a bit more checking is needed in order to make sure that we have
+matching open and close symbols. For reasons mentioned before we cannot delegate
+this to \LUA\ but have to use special versions of the \type {\left} and \type
+{\right} commands.
+
+One complication of making a nice mechanism for this is that we cannot use the
+direct characters. For instance curly braces are also used for grouping and the
+less and equal signs serve different purposes. So, no matter what we come up
+with, these cases remain special. However, in \CONTEXT\ the following is valid:
+
+\startbuffer
+\setupmathfences[color=darkgreen]
+\setupmathfences[mirrored][color=darkred]
+
+\startformula
+\left { \frac{1}{a} \right } \quad
+\left [ \frac{1}{b} \right ] \quad
+\left ( \frac{1}{c} \right ) \quad
+\left < \frac{1}{d} \right > \quad
+\left ⟨ \frac{1}{d} \right ⟩ \quad
+\left | \frac{1}{e} \right | \quad
+\left ⟪ \frac{1}{e} \right ⟫ \quad
+\left ⟫ \frac{1}{e} \right ⟪ \quad
+\left [ \frac{1}{d} \right [ \quad
+\left ] \frac{1}{d} \right [ \quad
+\stopformula
+\stopbuffer
+
+\typebuffer
+
+In the background mapping onto the mentioned left and right commands happens so
+we do get color support as well. And, it doesn't look that bad in your document
+source either. Of course other combinations are also possible.
+
+\start \getbuffer \stop
+
+As there are many ways to get fences and users can come from other macro packages
+(or use them mixed) we support them all as well as possible.
+
+\startbuffer
+\left ( \frac{1}{x} \right ) =
+ ( \frac{1}{x} ) =
+\left\( \frac{1}{x} \right\) =
+ \( \frac{1}{x} \) =
+\left\lparent \frac{1}{x} \right\rparent =
+ \lparent \frac{1}{x} \rparent =
+ \Lparent \frac{1}{x} \Rparent
+\stopbuffer
+
+\typebuffer
+
+\blank \noindentation $\getbuffer$ \blank
+
+Unfortunately \UNICODE\ math doesn't free us from some annoyances with respect to
+paired fences. On the one hand coding math is a symbolic, abstract matter: a left
+parenthesis opens something and a right one closes something. The same is true
+for brackets and braces. However, the bar is used for left and right fencing as
+well as separating pieces of a formula (e.g.\ in conditions). Because
+traditionally these left and right bars were purely vertical with no slope, or
+hooks, or other thingies attached, in \UNICODE\ there is only one slot for it.
+Where paired fences can play a role in analyzing content, bars are rather useless
+for that. It also means that when coding a formula one cannot rely on the bar
+symbol to determine a left or right property. Normally this is no problem as we
+can use symbolic names (that include the \type {\left} or \type {\right}
+directive) but for instance in rendering \MATHML\ it demands some fuzzy logic to
+be applied. It would have been nice to have code points for the three cases.
+
+\startbuffer
+\ruledhbox{$\left|x\right|$}
+\ruledhbox{$\left(x\middle|x\right)$}
+\ruledhbox{$\startcheckedfences\left(x\leftorright|x\right)\stopcheckedfences$}
+\ruledhbox{$\startcheckedfences\leftorright|x\leftorright|\stopcheckedfences$}
+\ruledhbox{$\startcheckedfences\leftorright|x\stopcheckedfences$}
+\ruledhbox{$\startcheckedfences\left(x\leftorright|\stopcheckedfences$}
+\stopbuffer
+
+\typebuffer
+
+Believe me: we run into any combination of these bars and parentheses. And we're
+no longer surprised to see code like this (generated from applications):
+
+\starttyping
+<math>
+ <mrow>
+ <mo>(</mo>
+ <mi>y</mi>
+ <mrow>
+ <mo>|</mo>
+ </mrow>
+ <mi>y</mi>
+ <mo>)</mo>
+ </mrow>
+</math>
+\stoptyping
+
+Here the bar sits in its own group, so what is it? A lone left, right or middle
+symbol, meant to stretch with the surroundings or not?
+
+To summarize: there is no real difference (or progress) with respect to fences in
+\LUATEX\ compared to traditional \TEX. We still need matching \type {\left} and
+\type {\right} usage and catching mismatches automatically is hard. By adding
+some hooks at the \TEX\ end we can easily check for a missing \type {\right} but
+a missing \type {\left} needs a two|-|pass approach. Maybe some day in \CONTEXT\
+we will end up with multipass math processing and then I'll look into this again.
+
+\stopsection
+
+\startsection[title=Directions]
+
+The first time I saw right|-|to|-|left math was at a Dante and later at a TUG
+meeting hosted in Morocco where Azzeddine Lazrek again demonstrated
+right|-|to|-|left math. It was only after Khaled Hosny added some support to the
+\XITS\ font that I came to supporting it in \CONTEXT. Apart from some
+housekeeping nothing special is needed: the engine is ready for it. Of course it
+would be nice to extend the lm and gyre fonts as well but currently it's not on
+the agenda. I expect to add some more control and features in the future, if only
+because it is a nice visual experience. And writing code for such features is
+kind of fun.
+
+As this is about as complex as it can gets, it makes a nice example of how we
+control math font definitions, so let's see how we can define a \XITS\ use case.
+Because we have a bold (heavy) font too, we define that as well. First we define
+the two fonts.
+
+\starttyping
+\starttypescript [math] [xits,xitsbidi] [name]
+ \loadfontgoodies [xits-math]
+ \definefontsynonym
+ [MathRoman]
+ [file:xits-math.otf]
+ [features=math\mathsizesuffix,goodies=xits-math]
+ \definefontsynonym
+ [MathRomanBold]
+ [file:xits-mathbold.otf]
+ [features=math\mathsizesuffix,goodies=xits-math]
+\stoptypescript
+\stoptyping
+
+Discussing font goodies is beyond this article so I stick to a simple
+explanation. We use so|-|called goodie files for setting special properties of
+fonts, but also for defining special treatment, for instance runtime patches. The
+current \type {xits-math} goodie file looks as follows:
+
+\starttyping
+return {
+ name = "xits-math",
+ version = "1.00",
+ comment = "Goodies that complement xits (by Khaled Hosny).",
+ author = "Hans Hagen",
+ copyright = "ConTeXt development team",
+ mathematics = {
+ italics = {
+ ["xits-math"] = {
+ defaultfactor = 0.025,
+ disableengine = true,
+ corrections = {
+ [0x1D453] = -0.0375, -- f
+ },
+ },
+ },
+ alternates = {
+ cal = { feature = 'ss01', value = 1,
+ comment = "Mathematical Calligraphic Alphabet" },
+ greekssup = { feature = 'ss02', value = 1,
+ comment = "Mathematical Greek Sans Serif Alphabet" },
+ greekssit = { feature = 'ss03', value = 1,
+ comment = "Mathematical Italic Sans Serif Digits" },
+ monobfnum = { feature = 'ss04', value = 1,
+ comment = "Mathematical Bold Monospace Digits" },
+ mathbbbf = { feature = 'ss05', value = 1,
+ comment = "Mathematical Bold Double-Struck Alphabet" },
+ mathbbit = { feature = 'ss06', value = 1,
+ comment = "Mathematical Italic Double-Struck Alphabet" },
+ mathbbbi = { feature = 'ss07', value = 1,
+ comment = "Mathematical Bold Italic Double-Struck Alphabet" },
+ upint = { feature = 'ss08', value = 1,
+ comment = "Upright Integrals" },
+ vertnot = { feature = 'ss09', value = 1,
+ comment = "Negated Symbols With Vertical Stroke" },
+ },
+ }
+}
+\stoptyping
+
+There can be many more entries but here the most important one is the \type
+{alternates} table. It defines the additional styles available in the font.
+Alternaties are chosen using commands like
+
+\starttyping
+\mathalternate{cal}\cal
+\stoptyping
+
+and of course shortcuts for this can be defined.
+
+Of course there is more than math, so we define a serif collection too:
+
+\starttyping
+\starttypescript [serif] [xits] [name]
+ \setups[font:fallback:serif]
+ \definefontsynonym[Serif] [xits-regular.otf] [features=default]
+ \definefontsynonym[SerifBold] [xits-bold.otf] [features=default]
+ \definefontsynonym[SerifItalic] [xits-italic.otf] [features=default]
+ \definefontsynonym[SerifBoldItalic][xits-bolditalic.otf] [features=default]
+\stoptypescript
+\stoptyping
+
+If needed you can redefine the \type {default} feature before this typescript is
+used. Once we have the fonts defined we can start building a typeface:
+
+\starttyping
+\starttypescript[xits]
+ \definetypeface [xits] [rm] [serif] [xits] [default]
+ \definetypeface [xits] [ss] [sans] [heros] [default] [rscale=0.9]
+ \definetypeface [xits] [tt] [mono] [modern] [default] [rscale=1.05]
+ \definetypeface [xits] [mm] [math] [xits] [default]
+\stoptypescript
+\stoptyping
+
+We can now switch to this typeface with:
+
+\starttyping
+\setupbodyfont[xits]
+\stoptyping
+
+But, as we wanted bidirectional math, something more is needed. Instead of the
+two fonts we define six. We could have a more abstract reference to the \XITS\
+fonts but in cases like this we prefer file names because then at least we can be
+sure that we get what we ask for.
+
+\starttypescript [math] [xits,xitsbidi] [name]
+ \loadfontgoodies[xits-math]
+ \definefontsynonym[MathRoman] [xits-math.otf] [features=math\mathsizesuffix,goodies=xits-math]
+ \definefontsynonym[MathRomanL2R] [xits-math.otf] [features=math\mathsizesuffix-l2r,goodies=xits-math]
+ \definefontsynonym[MathRomanR2L] [xits-math.otf] [features=math\mathsizesuffix-r2l,goodies=xits-math]
+ \definefontsynonym[MathRomanBold] [xits-mathbold.otf][features=math\mathsizesuffix,goodies=xits-math]
+ \definefontsynonym[MathRomanBoldL2R][xits-mathbold.otf][features=math\mathsizesuffix-l2r,goodies=xits-math]
+ \definefontsynonym[MathRomanBoldR2L][xits-mathbold.otf][features=math\mathsizesuffix-r2l,goodies=xits-math]
+\stoptypescript
+
+So, we use the same fonts several times but apply different features to them.
+This time the typeface definition explicitly turns on both directions. When we
+don't do that we get only left to right support, which is of course more
+efficient in terms of font usage.
+
+\starttypescript[xitsbidi]
+ \definetypeface [xitsbidi] [rm] [serif] [xits] [default]
+ \definetypeface [xitsbidi] [ss] [sans] [heros] [default] [rscale=0.9]
+ \definetypeface [xitsbidi] [tt] [mono] [modern] [default] [rscale=1.05]
+ \definetypeface [xitsbidi] [mm] [math] [xitsbidi] [default] [direction=both]
+\stoptypescript
+
+We can now switch to the bidirectional typeface with:
+
+\starttyping
+\setupbodyfont[xitsbidi]
+\stoptyping
+
+However, in order to get bidirectional math indeed, we need to turn it on.
+
+\starttyping
+\setupmathematics[align=r2l]
+\stoptyping
+
+You might have wondered what this special way of defining the features using
+\type {\mathsizesuffix} means? The value of this macro is set at font definition
+time, and can be one of three values: \type {text}, \type {script} and \type
+{scriptscript}. At this moment the features are defined as follows:
+
+\starttyping
+\definefontfeature
+ [mathematics]
+ [mode=base,
+ liga=yes,
+ kern=yes,
+ tlig=yes,
+ trep=yes,
+ mathalternates=yes,
+ mathitalics=yes,
+ % nomathitalics=yes, % don't pass to tex
+ language=dflt,
+ script=math]
+\stoptyping
+
+From this we clone:
+
+\starttyping
+\definefontfeature
+ [mathematics-l2r]
+ [mathematics]
+ []
+
+\definefontfeature
+ [mathematics-r2l]
+ [mathematics]
+ [language=ara,
+ rtlm=yes,
+ locl=yes]
+\stoptyping
+
+Watch how we enable two specific features, where \type {rtlm} is a \XITS|-|specific
+one. The eventually used features are defined as follows.
+
+\starttyping
+\definefontfeature[math-text] [mathematics] [ssty=no]
+\definefontfeature[math-script] [mathematics] [ssty=1,mathsize=yes]
+\definefontfeature[math-scriptscript] [mathematics] [ssty=2,mathsize=yes]
+
+\definefontfeature[math-text-l2r] [mathematics-l2r][ssty=no]
+\definefontfeature[math-script-l2r] [mathematics-l2r][ssty=1,mathsize=yes]
+\definefontfeature[math-scriptscript-l2r][mathematics-l2r][ssty=2,mathsize=yes]
+
+\definefontfeature[math-text-r2l] [mathematics-r2l][ssty=no]
+\definefontfeature[math-script-r2l] [mathematics-r2l][ssty=1,mathsize=yes]
+\definefontfeature[math-scriptscript-r2l][mathematics-r2l][ssty=2,mathsize=yes]
+\stoptyping
+
+Even if it is relatively simple to do, it makes no sense to build complex mixed
+mode system, so currently we have to decide before we typeset a formula:
+
+\startbuffer
+\setupmathematics[align=l2r]
+\startformula
+ \sqrt{x^2\over 4x} \qquad
+ {\bf \sqrt{x^2\over 4x}} \qquad
+ {\mb \sqrt{x^2\over 4x}}
+\stopformula
+\stopbuffer
+
+\typebuffer
+
+This gives a left to right formula:
+
+\getbuffer
+
+\startbuffer
+\setupmathematics[align=r2l]
+\startformula
+ \sqrt{ف^2\over 4ب} \qquad
+ {\bf \sqrt{ف^2\over 4ب}} \qquad
+ {\mb \sqrt{ف^2\over 4ب}}
+\stopformula
+\stopbuffer
+
+\typebuffer
+
+And here we get an Arabic formula, where the quality of course is determined
+by the completeness of the font.
+
+\start
+\switchtobodyfont[xitsbidi]
+\getbuffer
+\stop
+
+The bold font has a partial bold implementation so unless I implement a more
+complex pseudo|-|bold mechanism you should not expect results. Because we have no
+official Arabic math alphabets they are not seen by the \CONTEXT\ \MKIV\
+analyzers that normally take care of this. It's all a matter of demand and supply
+(combined with a dose of motivation). For instance while a base size might be
+covered, the extensibles might be missing.
+
+About the time of writing this another variation was requested at the mailing
+list. For Persian math we keep the direction from left to right but the digits
+have to be in an Arabic font. We cannot use the bidirectional handler for this so
+we need to swap regular and bold digits in another way. We can use the fallback
+mechanism for this and a definition roughly boils down to this:
+
+\starttyping
+\definefontfallback
+ [mathdigits]
+ [dejavusansmono]
+ [digitsarabicindic]
+ [check=yes,
+ force=yes,
+ offset=digitsnormal]
+\stoptyping
+
+This is used in:
+
+\starttyping
+\definefontsynonym
+ [MathRoman]
+ [file:xits-math.otf]
+ [features=math\mathsizesuffix,
+ goodies=xits-math,
+ fallbacks=mathdigits]
+\stoptyping
+
+The problem with this kind of feature is not so much in the implementation,
+because by now in \CONTEXT\ we have plenty of ways to deal with such issues in a
+convenient way. The biggest challenge is to come up with an interface that
+somehow fits in the model of typescripts and with a couple of predefined
+typescripts we now have:
+
+\starttyping
+\usetypescriptfile[mathdigits]
+\usetypescript [mathdigits] [xits-dejavu] [arabicindic]
+\setupbodyfont[dejavu]
+\stoptyping
+
+\startbuffer[pefama]
+\definefontfeature [persian-fake-math] [arabic] [anum=yes]
+
+\definefont[persianfakemath][dejavusans*persian-fake-math]
+\stopbuffer
+
+\getbuffer[pefama]
+
+\def\PeFaMa#1{\mathord{\hbox{\persianfakemath#1}}}
+
+After that a formula like \type {$2 + 3 = 5$} comes out as $ \PeFaMa2 + \PeFaMa3
+= \PeFaMa5 $. In fact, if you want that in text mode, you can just use the
+\CONTEXT\ \MKIV\ font feature \type {anum}:
+
+\typebuffer[pefama]
+
+But of course you won't have proper math then. But as right|-|to|-|left math is
+still under construction, in due time we might end up with more advanced
+rendering. Currently you can exercise a little control. For instance by using the
+\type {align} parameter in combination with the \type {bidi} parameter. Of course
+support for special symbols like square roots depends on the font as well. We
+probably need to mirror a few more characters.
+
+\startbuffer
+ \m{ ( 1 = 1) }\quad
+ \m{ (123 = 123) }\quad
+ \m{ a ( 1 = 1) b }\quad
+ \m{ a (123 = 123) b }\quad
+ \m{ x = 123 y + (1 / \sqrt {x}) }
+\stopbuffer
+
+\typebuffer
+
+As in math we can assume sane usage of fences, we don't need extensive tests on
+pairing.
+
+\starttabulate[|T|T||]
+\HL
+\NC \rm\bf align \NC \rm\bf bidi \NC \NC \NR
+\HL
+\NC l2r \NC no \NC \setupmathematics [bidi=no]\getbuffer \NC \NR
+\NC l2r \NC yes \NC \setupmathematics [bidi=yes]\getbuffer \NC \NR
+\NC r2l \NC no \NC \setupmathematics[align=r2l,bidi=no]\getbuffer \NC \NR
+\NC r2l \NC yes \NC \setupmathematics[align=r2l,bidi=yes]\getbuffer \NC \NR
+\HL
+\stoptabulate
+
+\stopsection
+
+\startsection[title=Structure]
+
+At some point publishers started asking for tagged \PDF\ and as a consequence a
+typeset math formula suddenly becomes more than a blob of ink. There are several
+arguments for tagging content. One is accessibility and another is reflow.
+Personally I think that both arguments are not that relevant. For instance, if
+you want to help a visually impaired reader, it's far better to start from a well
+structured original and ship that along with the typeset version. And, if you
+want reflow, you can better provide a (probably) simplified version in for
+instance \HTML\ format.
+
+We are surrounded by all kinds of visualizations, and text on paper or some
+medium is one. We don't make a painting accessible either. If accessibility is a
+demand, it should be done as best as can be, and the source is then the starting
+point. Of course publishers don't like that because when a source is available,
+it's one step closer to reuse by others. But that problem can simply be ignored
+as we consider publishers to be some kind of facilitating organization that
+deliver content from others. Alas publishers don't play that humble role so as
+long as they're around they can demand from their suppliers tagging of something
+visual.
+
+Of course when you use \TEX\ tagging is no real issue as you can make the input
+as verbose and structured as you like. But authors don't always want to be
+verbose, take this:
+
+\startbuffer
+$ f(x) = x^2 + 3x + 7 $
+\stopbuffer
+
+\typebuffer
+
+This enters \TEX\ as a sequence of characters: \enabletrackers [math.classes]
+\inlinebuffer \disabletrackers[math.classes]. These characters can have
+properties, for instance they can represent a relation or be an opening or
+closing symbol, but in most cases they are just classified as ordinary. These
+properties to some extent control spacing and interplay between math elements.
+They are not structure. If you have seen presentation \MATHML\ you have noticed
+that there are operators (\type {mo}), identifiers (\type {mi}) and numbers
+(\type {mn}), as well as some structural elements like fences (\type {mfenced}),
+superscripts (\type {msup}), subscripts (\type {msub}). Because it is a
+presentational encoding, there is no guarantee about the quality of the input as
+well as the rendering, but it somehow made it into a standard that is also used
+for tagging \PDF\ content.
+
+Going from mostly unstructured \TEX\ math input to more structured output is
+complicated by the fact that the intermediate somewhat structured math lists
+eventually become regular boxes, glyphs, kerns, glue etc. In \CONTEXT\ we carry
+some persistent information around so that we can still reverse engineer the
+output to structured input but this can be improved by more explicit tagging. We
+plan to add some more of that to future versions but here is an example:
+
+\starttyping
+$ \apply{f}{(x)} = x^2 + 3x + 7 $
+\stoptyping
+
+You can go over the top too:
+
+\starttyping
+$ \apply{f}{(x)} = \mi{x}^\mi{2} + \mi{3}\mi{x} + \mi{7} $
+\stoptyping
+
+The trick is to find an optimal mix of structure and readability. For instance,
+in \type {\sin} we already have the apply done by default, so often extra tagging
+is only needed in situations where there are several ways to interpret the text.
+Of course we're not enforcing this, but by providing some structure related
+features, at least we hope to make users aware of the issue. Directly inputting
+\MATHML\ is also an option but has never become popular.
+
+All this is mostly a macro package issue, and \CONTEXT\ has the basics on board.
+Because there is no need to adapt \LUATEX\ the most we will do is add a bit more
+consistency in building the lists (two way pointers) and carrying over properties
+(like attributes). We also have on the agenda a math table model that suits
+\MATHML, because some of those tables are somewhat hard to deal with.
+
+How the export and tagging evolves depends on demand. I must admit that I
+implemented it as an exercise mostly because these are features I don't need
+myself (and no one really asked for it anyway).
+
+\stopsection
+
+\startsection[title=Italic correction]
+
+Here we face a special situation. In regular \OPENTYPE\ italic correction is not
+part of the game, although one can cook up some positioning feature that does a
+similar job. In \OPENTYPE\ math there is italic correction, but also a more
+powerful sharpe|-|related kerning which is to be preferred. In traditional \TEX\
+the italic correction was present but since it is a font specific feature there
+is no way to make it work across fonts, and \TYPEONE\ based math has lots of
+them.
+
+At some point we have discussed throwing italic correction out of the engine, if
+only because it was unclear how and when to apply it. In the meantime there is
+some compromise reached. Because \CONTEXT\ is always in sync with the latest
+\LUATEX, we oscillated between solutions and this was complicated by the fact
+that we had to support a mix of \OPENTYPE\ math fonts and virtualized \TYPEONE\
+legacy fonts.
+
+The italic correction related code is still somewhat experimental, but we have
+several options. \footnote {In text mode we also have an advanced mechanism for
+italic correction but this operates independent from math.} In most cases we
+insert the italic correction ourselves and as the engine then sees a kern already
+it will not add another one. This has the advantage that we can be more
+consistent if only because not all fonts have these corrections and not all cases
+are considered by the engine.
+
+\startitemize[n]
+ \startitem
+ A math font can have italic correction per glyph. The engine gets
+ this passed but before it can apply them we already inject them into
+ the mathlist where needed.
+ \stopitem
+ \startitem
+ This is a variant of the first one, but is always applied, and not
+ controlled by the font. This makes it possible to add additional
+ corrections. This method is kind of obsolete as we no longer generate
+ missing corrections at font definition time. \footnote {Because the
+ font loader is also used for the generic code, we don't want to add
+ such features there.}
+ \stopitem
+ \startitem
+ This variant looks at the shape and if it is italic (or bolditalic) then
+ correction is applied. Here the correction is related to the emwidth
+ and controlled by a factor. We use this method by default.
+ \stopitem
+ \startitem
+ The fourth variant is a mixture of the first (font driven) and the third
+ (emwidth driven).
+ \stopitem
+\stopitemize
+
+Are we better off? I honestly don't know. It is a bit of a mess and will always
+be, simply because the reference font (cambria) and reference implementation
+(msword) is not clear about it and we follow them. In that respect I consider it
+a macro package issue mostly. In \CONTEXT\ at least we can offer some options.
+
+\startsection[title=Big]
+
+When migrating math to \MKIV\ I couldn't resist looking into some functionality
+that currently uses macro magic. An example is big delimiters.
+
+\startbuffer[bigs]
+$ ( \big( \Big( \bigg( \Bigg( x $
+\stopbuffer
+
+\typebuffer[bigs]
+
+\blank \getbuffer[bigs] \blank
+
+Personally I never use these, I just trust \type {\left} and \type {\right} to do
+the right job, but I'm no reference at all when it comes to math. The reason for
+looking into the bigs is that in plain \TEX\ there are some magic numbers
+involved. The macros, when translated to \CONTEXT\ boil down to this:
+
+\starttyping
+\left<delimiter>\vbox to 0.85\bodyfontsize{}\right.
+\left<delimiter>\vbox to 1.15\bodyfontsize{}\right.
+\left<delimiter>\vbox to 1.45\bodyfontsize{}\right.
+\left<delimiter>\vbox to 1.75\bodyfontsize{}\right.
+\stoptyping
+
+Knowing that we have a chain of sizes in the font, I was tempted to go for a
+solution where a specific size is chosen from the linked list of next sizes.
+There are several strategies possible when we delegate this to \LUA\ but we don't
+provide a high level interface yet. Personally I'd like to set the low level
+configuration options as:
+
+\starttyping
+\setconstant\bigmathdelimitermethod \plusone
+\setconstant\bigmathdelimitervariant\plusthree
+\stoptyping
+
+But as users might expect plain||like behaviour, \CONTEXT\ also provides the command
+
+\starttyping
+\plainbigdelimiters
+\stoptyping
+
+which sets the method to~2. Currently that is the default. When method~1 is
+chosen there are four variants and the reason for keeping them all is that they
+are part of experiments and explorations.
+
+\starttabulate[|||]
+\NC 1 \NC choose size $ \tf n $ from the available sizes \NC \NR
+\NC 2 \NC choose size $ \tf 2n $ from the available sizes \NC \NR
+\NC 3 \NC choose the first variant that has $ \tf 1.33^n \times (ht + dp) > size $\NC \NR
+\NC 4 \NC choose the first variant that has $ \tf 1.33^n \times bodyfontsize > size $\NC \NR
+\stoptabulate
+
+The last three variants give similar results but they are not always the same as
+the plain method. This is because not all fonts provide the same range.
+
+\def\SetBig#1#2%
+ {\setnewconstant\bigmathdelimitermethod#1\relax
+ \setnewconstant\bigmathdelimitervariant#2\relax
+ \getbuffer[bigs]}
+
+\starttabulate[|l|l|l|l|]
+\HL
+\NC \NC pagella \NC \switchtobodyfont[modern] latin modern \NC \switchtobodyfont[cambria] cambria \NC \NR
+\HL
+\NC plain \NC \SetBig{2}{0} \NC \switchtobodyfont[modern] \SetBig{2}{0} \NC \switchtobodyfont[cambria] \SetBig{2}{0} \NC \NR
+\NC variant 1 \NC \SetBig{1}{1} \NC \switchtobodyfont[modern] \SetBig{1}{1} \NC \switchtobodyfont[cambria] \SetBig{1}{1} \NC \NR
+\NC variant 2 \NC \SetBig{1}{2} \NC \switchtobodyfont[modern] \SetBig{1}{2} \NC \switchtobodyfont[cambria] \SetBig{1}{2} \NC \NR
+\NC variant 3 \NC \SetBig{1}{3} \NC \switchtobodyfont[modern] \SetBig{1}{3} \NC \switchtobodyfont[cambria] \SetBig{1}{3} \NC \NR
+\NC variant 4 \NC \SetBig{1}{4} \NC \switchtobodyfont[modern] \SetBig{1}{4} \NC \switchtobodyfont[cambria] \SetBig{1}{4} \NC \NR
+\HL
+\stoptabulate
+
+So, we are somewhat unpredictable but at least we have several ways to control
+the situation and better solutions might show up.
+
+% \dontleavehmode\dostepwiserecurse{0}{6}{1}{\ruledhbox{$\mathdelimiterstep{#1}($} }
+
+\stopsection
+
+\startsection[title=Macros]
+
+I already discussed roots and the traditional \type {\root} command is a nice
+example of one that can be simplified in \LUATEX\ thanks to a new primitive. A
+macro package often has quite a lot of macros related to math that deal with
+tables and \LUATEX\ doesn't change that. But there is a category of commands that
+became obsolete: the ones that are used to construct characters that are not in
+the fonts. Keep in mind that the number of fonts as well as their size was
+limited at the time \TEX\ was written, so by providing building blocks additional
+characters could be made. Think of for instance the negated symbols: a new symbol
+could be made by overlaying a slash. The same is true for arrows: by prepending
+or appending minus signs, arrows of arbitrary length could be constructed.
+
+Here I will stick to another example: dots. In plain \TEX\ we have this definition:
+
+\starttyping
+\def\vdots
+ {\vbox
+ {\baselineskip4pt
+ \lineskiplimit0pt
+ \kern6pt
+ \hbox{.}%
+ \hbox{.}%
+ \hbox{.}}}
+\stoptyping
+
+This will typeset vertical dots, while the next does them diagonally:
+
+\starttyping
+\def\ddots
+ {\mathinner
+ {\mkern1mu
+ \raise7pt\vbox{\kern7pt\hbox{.}}%
+ \mkern2mu
+ \raise4pt\hbox{.}%
+ \mkern2mu
+ \raise1pt\hbox{.}%
+ \mkern1mu}}
+\stoptyping
+
+Of course these dimensions relate to the font size of plain \TEX\ so in \CONTEXT\
+\MKII\ we have something like this:
+
+\startbuffer
+\def\vdots
+ {\vbox
+ {\baselineskip4\points
+ \lineskiplimit\zeropoint
+ \kern6\points
+ \hbox{$\mathsurround\zeropoint.$}%
+ \hbox{$\mathsurround\zeropoint.$}%
+ \hbox{$\mathsurround\zeropoint.$}}}
+
+\def\ddots
+ {\mathinner
+ {\mkern1mu
+ \raise7\points\vbox{\kern 7\points\hbox{$\mathsurround\zeropoint.$}}%
+ \mkern2mu
+ \raise4\points\hbox{$\mathsurround\zeropoint.$}%
+ \mkern2mu
+ \raise \points\hbox{$\mathsurround\zeropoint.$}%
+ \mkern1mu}}
+\stopbuffer
+
+\typebuffer
+
+These two symbols are rendered (in \MKII) as follows:
+
+\start \getbuffer
+
+\startlinecorrection[blank]
+\dontleavehmode \quad \ruledhbox{$\vdots$} \quad \ruledhbox{$\ddots$}
+\stoplinecorrection
+
+\stop
+
+I must admit that I only noticed the rather special height when I turned these
+macros into virtual characters for the initial virtual \UNICODE\ math that we
+needed in the first versions of \MKIV. This is a side effect of their use in
+matrices. However, in \MKIV\ we just use the characters in the font and get:
+
+\startlinecorrection[blank]
+\dontleavehmode \quad \ruledhbox{$\vdots$} \quad \ruledhbox{$\ddots$}
+\stoplinecorrection
+
+These characters look different because instead of three text periods a real
+symbol is used. The fact that we have more complete fonts and rely less on
+special font properties to achieve effects is a good thing, and in this respect
+it cannot be denied that \LUATEX\ triggered the development of more complete
+fonts. Of course from the user's perspective the outcome is often the same,
+although \unknown\ using a single character instead of three has the advantage of
+smaller files (neglectable), less runtime (really neglectable) and cleaner output
+files (undeniable) from where such characters can now be copied as one.
+
+\stopsection
+
+\startsection[title=Unscripting]
+
+If you ever looked into plain \TEX\ you might have noticed this following
+section. The symbols are more related to programming languages than to math.
+
+\starttyping
+% The following changes define internal codes as recommended
+% in Appendix C of The TeXbook:
+\mathcode`\^^@="2201 % \cdot
+\mathcode`\^^A="3223 % \downarrow
+\mathcode`\^^B="010B % \alpha
+\mathcode`\^^C="010C % \beta
+\mathcode`\^^D="225E % \land
+\mathcode`\^^E="023A % \lnot
+\mathcode`\^^F="3232 % \in
+\mathcode`\^^G="0119 % \pi
+\mathcode`\^^H="0115 % \lambda
+\mathcode`\^^I="010D % \gamma
+\mathcode`\^^J="010E % \delta
+\mathcode`\^^K="3222 % \uparrow
+\mathcode`\^^L="2206 % \pm
+\mathcode`\^^M="2208 % \oplus
+\mathcode`\^^N="0231 % \infty
+\mathcode`\^^O="0140 % \partial
+\mathcode`\^^P="321A % \subset
+\mathcode`\^^Q="321B % \supset
+\mathcode`\^^R="225C % \cap
+\mathcode`\^^S="225B % \cup
+\mathcode`\^^T="0238 % \forall
+\mathcode`\^^U="0239 % \exists
+\mathcode`\^^V="220A % \otimes
+\mathcode`\^^W="3224 % \leftrightarrow
+\mathcode`\^^X="3220 % \leftarrow
+\mathcode`\^^Y="3221 % \rightarrow
+\mathcode`\^^Z="8000 % \ne
+\mathcode`\^^[="2205 % \diamond
+\mathcode`\^^\="3214 % \le
+\mathcode`\^^]="3215 % \ge
+\mathcode`\^^^="3211 % \equiv
+\mathcode`\^^_="225F % \lor
+\stoptyping
+
+This means as much as: when I hit \type {Ctrl-Z} on my keyboard and my editor
+honors that by injecting character \type {U+1A} into the input then \TEX\ will
+turn that into $\ne$, given that you're in math mode. I'm not sure how many
+keyboards and editors there are around that still do that but it illustrates that
+inputting in some kind of \WYSIWYG\ is not alien to \TEX. \footnote {There are
+more such hidden features, for instance, in some fonts special ligatures can be
+implemented that no one ever uses.}
+
+One of the subprojects of the ongoing \TEX\ user group font project is to extend
+the already extensive Dejavu font with all relevant math characters so that we
+can edit a document in a more \UNICODE\ savvy way. So, after more than three
+decades we might arrive where Don Knuth started: you see what you input and a
+similar shape will end up on paper.
+
+Does this mean that all such input is good? Definitely not, because in \UNICODE\
+we find all kinds of characters that somehow ended up there as a result of
+merging existing encodings. At work we're accustomed to getting input that is a
+mix of everything a word processor can produce and often we run into characters
+that users find normal but are not that handy from a \TEX\ perspective. It's the
+main reason why in math mode we intercept some of them, for instance in:
+
+\startbuffer
+$ y = x² + x³ + x²³ + x²ᵃ $ % not all characters are in monospace
+\stopbuffer
+
+\typebuffer
+
+These superscripts are an inconsistent bunch so they will never be real
+substitutes for the \type {^} syntax, simply because a mix like above looks bad.
+But fortunately it comes out well: \inlinebuffer. This is because \CONTEXT\ will
+transform such super- and subscripts into real ones and in the process also
+collapse multiple scripts into a group. This is typically one of the features
+that already showed up early in \MKIV.
+
+Here we have a feature that doesn't relate to fonts, the math machinery or the
+engine, but is just a macro package goodie. It's a way to respond to the
+variation in input, although probably hardly any \TEX\ math user will need it.
+It's one of those features that comes in handy when you use \TEX\ as invisible
+backend where the input is never seen by humans.
+
+\stopsection
+
+\startsection[title=Combining fonts]
+
+I already mentioned that we started out with virtual math fonts. Defining them is
+not that hard and boils down to defining what fonts make up the desired math
+font. Normally one starts out with a decent complete \OPENTYPE\ math font
+followed by mapping \TYPEONE\ fonts onto specific alphabets and symbols. On top
+of this there are additional virtual characters constructed (including
+extensibles). However, this method will become kind of obsolete (read: not used)
+when all relevant \OPENTYPE\ math fonts are available.
+
+Does this mean that we have only simple font setups? In practice yes: you can set
+up a math font in a few lines in a regular typescript. There are of course a few
+more lines needed when defining bold and|/|or right|-|to|-|left math but users
+don't need to bother about it. All is predefined. There are signals that users
+want to combine fonts so the already present fallback mechanism for text fonts
+has been made to work with math fonts as well. This permits for instance to
+complement the not|-|yet|-|finished \OPENTYPE\ Euler math fonts with Pagella. Of
+course you always need to keep consistency into account, but in principle you can
+overload for instance specific alphabets, something that can make sense when
+simple math is mixed with a font that has no math companion. In that case using
+the text italic in math mode might look better. For the at the time of this
+writing incomplete Euler font we can add characters like this:
+
+\starttyping
+\loadtypescriptfile[texgyre]
+\loadtypescriptfile[dejavu]
+
+\resetfontfallback [euler]
+
+\definefontfallback [euler] [texgyrepagella-math] [0x02100-0x02BFF]
+\definefontfallback [euler] [texgyrepagella-math] [0x1D400-0x1D7FF]
+
+\starttypescript [serif] [euler] [name]
+ \setups[font:fallback:serif]
+ \definefontsynonym [Serif] [euler] [features=default]
+\stoptypescript
+
+\starttypescript [math] [euler] [name]
+ \definefontsynonym [MathRoman] [euler] [features=math\mathsizesuffix,fallbacks=euler]
+\stoptypescript
+
+\starttypescript [euler]
+ \definetypeface [\typescriptone] [rm] [serif] [euler] [default]
+ \definetypeface [\typescriptone] [tt] [mono] [dejavu] [default] [rscale=0.9]
+ \definetypeface [\typescriptone] [mm] [math] [euler] [default]
+\stoptypescript
+\stoptyping
+
+If needed one can use names instead of code ranges (like \type {uppercasescript})
+as well as map one range onto another. This last option is handy for merging a
+regular text font into an alphabet (in which case the \UNICODE's don't match).
+
+We expect math fonts to be rather complete because after all, a font designer has
+a large repertoire of free alphabets to choose from. So, in practice combining
+math fonts will happen seldom. In text mode this is more common, especially when
+multiple scripts are mixed. There is a whole bunch of modules that can generate
+all kind of tables and overviews for testing.
+
+\stopsection
+
+\startsection[title=Experiments]
+
+I won't describe all experiments here. An example of an experiment is a better
+way of dealing with punctuation, especially the cultural determined
+period|/|comma treatment. I still have the code somewhere but the heuristics are
+too messy to keep around.
+
+There are also some planned experiments, like breaking and aligning display math,
+but they have a low priority. It's not that hard to do, but I need a good reason.
+The same is true for equation number placement where primitives are used that can
+sometimes interfere or not be used in all cases. Currently that placement in
+combination with alignments is implemented with quite a lot of fuzzy macro code.
+
+One of the areas where experimenting will continue is with fonts. Early in the
+development of \MKIV\ font goodies showed up. A font (or collection of fonts) can
+have a file (or more files) that control functionality and can have fixes. There
+are some in place for math fonts. It is a convenient way to use the latest
+greatest fonts as we have ways to circumvent issues, for instance with math
+parameters. The virtual math fonts are also defined as goodies.
+
+Some mechanisms will probably be made accessible from the \TEX\ end so that users
+can exercise more control. And because we're not done yet, additional features
+will show up for sure. There are some math related subsystems like physics and
+chemistry and these already demanded some extensions and might need more.
+Introducing math symbol (and property) dictionaries as in \OPENMATH\ is probably
+a next step.
+
+I already mentioned that typesetting and rendering related technology is driven
+by the web. This also reflects on \UNICODE\ and \OPENTYPE. For instance, we find
+not only emoticons like \type {U+1F632} (ASTONISHED FACE) in the standard but
+also \quote {MOUNT FUJI}, \type {TOKYO TOWER}, \type {STATUE OF LIBERTY}, \type
+{SILHOUETTE OF JAPAN}. On the other hand, in one of our older projects we still
+have to provide some tweak for the unary minus (as when discussing scientific
+calculators used in math lessons) a distinction has to be made with a regular
+minus sign. And there are no symbols to refer to use of media (simulation,
+applet, etc.) and there is as far as I know no emoticon for a student asking a
+question. Somehow it's hard to defend that the Planck constant is as different
+from a math italic~h as a \quote {GRINNING FACE} is from a \quote {GRINNING FACE
+WITH SMILING EYES}, but the last both got a code point. I wonder with an \type
+{UNAMUSED FACE}.
+
+Of course we can argue that this is all too visual to end up in \UNICODE, but the
+main point that I want to make is that as a \TEX\ community (which is also
+related to education) we are of not that much importance and influence. Maybe it
+is because we always had a programmable system at hand, and folks who could make
+fonts, and were already extending and exploring before the web became a factor.
+Anyhow, in \CONTEXT\ we solve these issues by making mechanisms extensible. For
+instance we can extend fonts with virtual glyphs and add features to existing
+fonts on the fly. Simple examples are adding some glyphs and properties to math
+fonts or adding color properties to whatever font. More complex examples are
+implementing paragraph optimizers using feature sets of fonts (most noticeably
+the upcoming Husayni font for advanced arabic typesetting). And, math typesetting
+is a speciality anyway.
+
+Upcoming extensions to \UNICODE\ and \OPENTYPE\ will demonstrate that the \TEX\
+community could have been a bit more demanding and innovative, given that it had
+known what to demand. Interesting is that some innovation already happened by
+providing special fonts and macros and engines, but I guess much gets unnoticed.
+On the other hand, I must admit that experimenting and providing solutions
+independent of evolving technology also has benefits: it made (and makes) some
+user group meetings interesting to go to and creates interesting niches of users.
+Without this experimental playground I for sure would not be around.
+
+\stopsection
+
+\startsection[title=Tracing]
+
+Tracing is available for nearly all mechanisms and math is no exception. Most
+tracing happens at the \LUA\ end and can be enabled with the tracker mechanism.
+Users will seldom use this, but for development the situation is definitely more
+comfortable in \MKIV. Of course it helps that the penalty of tracing and logging
+has become less in recent times because memory as well as runtime is hardly
+influenced.
+
+We provide several styles (modules) for generating lists and tables of characters
+and extensibles, visualizing features and comparing fonts. Here we benefit from
+\LUA\ because we can use the database embedded in \CONTEXT\ and looping and
+testing is more convenient in this language. Of course the rendering is done by
+\TEX, so this is a typical example of hybrid usage.
+
+\stopsection
+
+\startsection[title=Conclusion]
+
+It is somewhat ironic that while \CONTEXT\ is sometimes tagged as \quote {not to
+be used when you need to do math typesetting} it is this macro package that
+drives the development of \LUATEX\ with its updated math engine, which in turn
+influences the updated math engine in \XETEX, that is used by other macro
+packages. In a similar fashion the possibility to process \OPENTYPE\ math fonts
+in \LUATEX\ triggered the development of such fonts as follow up on the Latin
+Modern and \TEX\ Gyre projects. So, the fact that in \CONTEXT\ we have a bit more
+freedom in experimenting with math (and engines) has some generic benefits as
+well.
+
+I think that overall we're better off. The implementation at the \TEX\ end is
+much cleaner because we no longer have to deal with different math encodings and
+multiple families. Because in \CONTEXT\ we're less bound to traditional
+approaches and don't need to be code compatible with other engines we can follow
+different routes than usual. After all, that was also one of the main motivations
+behind starting the \LUATEX\ project: clean (better understandable code), less
+mean (no more hacks at the \TEX\ end), even if that means to be less lean (quite
+a lot of \LUA\ code). Between the lines above you can read that I think that
+we've missed some opportunities but that's a side effect of the community not
+being that innovative which in turn is probably driven by more or less standard
+expectations of publishers, as they are more served by good old stability instead
+of progress. Therefore, we're probably stuck for a while, if not forever, with
+what we have now. And a decent \CONTEXT\ math implementation is not going to
+change that. What matters is that we can (still) keep up with developments
+outside our sphere of influence.
+
+I don't claim that the current implementation of math in \MKIV\ is flawless, but
+eventually we will get there.
+
+\stopsection
+
+% \blank[2*big,samepage]
+
+% \startlines
+% Hans Hagen
+% PRAGMA ADE
+% Hasselt NL
+% June-August 2013
+% \stoplines
+
+\stopchapter
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/still/still-one.tex b/doc/context/sources/general/manuals/still/still-one.tex
new file mode 100644
index 000000000..7d0c392c7
--- /dev/null
+++ b/doc/context/sources/general/manuals/still/still-one.tex
@@ -0,0 +1,234 @@
+% language=uk
+
+\usemodule[art-01,abr-02] \setupbodyfont[11pt]
+
+\starttext
+
+\startchapter[title=\LUATEX\ going stable]
+
+\startsection[title=Introduction]
+
+We're closing in on version 1.0 of \LUATEX\ and at the time of this writing (mid
+April 2016) we're at version 0.95. The last decade we've reported on a regular
+basis about progress in user group journals, \CONTEXT\ related documents and the
+\LUATEX\ manual and it makes no sense to repeat ourselves.
+
+So where do we stand now? I will not go into details about what is available in
+\LUATEX, for that you consult the manual but will stick to the larger picture
+instead.
+
+\stopsection
+
+\startsection[title=What is it]
+
+First of all, as the name suggests, \LUATEX\ has the \LUA\ scripting engine on
+board. Currently we're still at version 5.2 and the reason for not going 5.3 is
+mainly because it has a different implementation of numbers and we cannot foresee
+side effects. We will test this when we move on to \LUATEX\ version 2.0.
+
+The second part of the name indicates that we have some kind of \TEX\ and we
+think we managed to remain largely compatible with the traditional engine. We
+took most of \ETEX, much of \PDFTEX\ and some from \ALEPH\ (\OMEGA). On top of
+that we added a few new primitives and extended others.
+
+If you look at the building blocks of \TEX, you can roughly recognize these:
+
+\startitemize
+\startitem
+ an input parser (tokenizer) that includes macro expansion; its working is
+ well described, of course in the \TEX\ book, but more than three decades of
+ availability has made \TEX's behaviour rather well documented
+\stopitem
+\startitem
+ a list builder that links basic elements like characters (tagged with font
+ information), rules, boxes, glue and kerns together in a double linked
+ list of so called nodes (and noads in intermediate math lists)
+\stopitem
+\startitem
+ a language subsystem that is responsible for hyphenating words using so called
+ patterns and exceptions
+\stopitem
+\startitem
+ a font subsystem that provides information about glyphs properties, and that
+ also makes it possible to construct math symbols from snippets; it also makes
+ sure that the backend knows what to embed
+\stopitem
+\startitem
+ a paragraph builder that breaks a long list into lines and a page builder
+ that splits of chunks that can be wrapped into pages; this is all done within
+ given constraints using a model of rewards and penalties
+\stopitem
+\startitem
+ a first class math renderer that set the standard and has inspired modern
+ math font technology
+\stopitem
+\startitem
+ mechanisms for dealing with floating data, marking page related info, wrapping
+ stuff in boxes, adding glue, penalties and special information
+\stopitem
+\startitem
+ a backend that is responsible for wrapping everything typeset in a format that
+ can be printed and viewed
+\stopitem
+\stopitemize
+
+So far we're still talking of a rather generic variant of \TEX\ with \LUA\ as
+extension language. Next we zoom in on some details.
+
+\stopsection
+
+\startsection[title=Where it differs]
+
+Given experiences with discussing extensions to the engine and given the fact
+that there is never really an agreement about what makes sense or not, the
+decission was made to not extend the engine any more than really needed but to
+provide hooks to do that in \LUA. And, time has proven that this is a feasible
+approach. On the one hand we are as good as possible faithful to the original,
+and at the same time we can deal with todays and near future demands.
+
+Tokenization still happens as before but we can also write input parsers
+ourselves. You can intercept the raw input when it gets read from file, but you
+can also create scanners that you can sort of plug into the parser. Both are a
+compromise between convenience and speed but powerful enough. At the input end we
+now can group catcode changes (catcodes are properties of characters that control
+how they are interpreted) into tables so that switching between regimes is fast.
+
+You can in great detail influence how data gets read from files because the \IO\
+subsystem is opened up. In fact, you have the full power of \LUA\ available when
+doing so. At the same time you can print back from \LUA\ into the input stream.
+
+The input that makes in into \TEX, either or not intercepted and manipulated
+beforehand, is to be in \UTF8. What comes out to the terminal and log is also
+\UTF8, and internally all codepaths work with wide characters. Some memory
+constraints have been lifted, and character related commands accept large
+numbers. This comes at a price, which means that in practice the \LUATEX\ engine
+can be several times slower than the 8|-|bit \PDFTEX, but of course in practice
+performance is mostly determined by the efficiency of macro package, so it might
+actually be faster in situations that would stress its ancestors.
+
+Node lists travel through \TEX\ and can be intercepted at many points. That way
+you can add additional manipulations. You can for instance rely on \TEX\ for
+hyphenation, ligature building and kerning but you can also plug in alternatives.
+For this purpose these stages are clearly separated and less integrated (deep
+down) than in traditional \TEX. There are helpers for accessing lists of nodes,
+individual nodes and you can box those lists too (this is called packing). You
+can adapt, create and destroy node lists at will, as long as you make sure you
+feed back into \TEX\ something that makes sense.
+
+In order to control (or communicate with) nodes from the \TEX\ end, an attribute
+mechanism was added that makes it possible to bind properties to nodes when they
+get added to lists. At the \TEX\ end you can set an attribute that then gets
+assigned to the currently injected nodes, while at the \LUA\ end you can query
+the node for these attributes and their values.
+
+The language subsystem is re|-|implemented and behaves mostly the same as in the
+original \TEX\ program. It has a few extensions and permits runtime loading of
+patterns. In addition to language support we also have basic script support, that
+is: directional information is now part of the stream and contrary to \ALEPH\
+that wraps this into extension whatsits, in \LUATEX\ we have directional nodes as
+core nodes.
+
+The font subsystem is opened up in such a way that you can pass your own fonts to
+the core. You can even construct virtual fonts. This open approach makes it
+possible to support \OPENTYPE\ fonts and whatever format will show up in the
+future. Of course the backend needs to embed the right data in the result file
+but by then the hard work is already done. This approach fits into the always
+present wish of users (and package writers) to be able to implement whatever
+crazy thought one comes up with.
+
+The paragraph builder is a somewhat cleaned up variant of the \PDFTEX\ one,
+combined with directional and boundary support from \ALEPH. The protrusion and
+expansion mechanism have been redone in such a way that the front- and backend
+code is better separated and is somewhat more efficient now. As one can intercept
+the paragraph builder, additional functionality can be injected before, after or
+at some stages in the process.
+
+Of course we have kept the math engine but, because we now need to support
+\OPENTYPE\ math, alternative code paths have been added to deal with the kind of
+information that such fonts provide. We also took the opportunity to open up the
+math machinery a bit so that one can control rendering of some more complex
+elements and set the spacing between elements. Because \TEX\ users are quite
+traditional we had to stop somewhere, simply because legacy code has to be dealt
+with.
+
+Most mentioned auxiliary mechanisms can be accessed via the node lists, for
+instance you can locate inserts and marks in them. The backend related whatsit
+nodes can be recognized as well. At any time one can query and set \TEX\
+registers and intercept boxed material. Of course some knowledge of the inner
+working of \TEX\ helps here.
+
+The backend code is as much as possible separated from the frontend code (but
+there is still some work to do there). As in \PDFTEX\ you can of course inject
+arbitrary \PDF\ code and make feature rich documents. This flexibility keeps
+\TEX\ current.
+
+\stopsection
+
+\startsection[title=Extras]
+
+Is that all? No, apart from some minor extensions that might help to make
+programming somewhat easier \TEX, there are a few more fundamental additions.
+
+Images and reusable content (boxes) are now part of the core instead of them
+being wrapped into backend specific whatsits, although of course the backend has
+to provide support for it. This is more natural in the frontend (and user
+interface) and also more consistent in the engine itself. All backend
+functionality is now collected in three primitives that take arguments. This
+permits a cleaner separation between front- and backend.
+
+Then there is the \METAPOST\ library, a feature already present for many years
+now. It provides \TEX\ with some graphic capabilities that, given the origin,
+fits nicely into the whole. The \LUATEX\ and \MPLIB\ project started about the
+same time and right from the start it was our plan to combine both.
+
+One of the extras is of course \LUA. It not only permits us to interface to the
+internals of \TEX, but it also provides the user with a way to manipulate data.
+Even if you never use \LUA\ to access internals, it might still be found useful
+for occasionally doing things that are hard to accomplish using the macro
+langage.
+
+In addition to stock \LUA\ we include the \LPEG\ library, an image reading
+library (related to the backend) including read access to \PDF\ files via the
+used poppler library, parsing of \PDF\ content streams, zip compression, access
+to the file system, the ability to run commands and socket support. Some of this
+might become external libraries at some point, as we want to keep the expected
+core functionality lean and mean. A nice extra is that we provide \LUAJITTEX, a
+compatible variant that has a faster \LUA\ virtual machine on board.
+
+\stopsection
+
+\startsection[title=Follow up]
+
+The interfaces that we have now have to a large extent evolved to what we had in
+mind. We started with simple experiments: just \LUA\ plus a bit of access to
+registers. Then the Oriental \TEX\ project (with Idris Samawi Hamid) made it
+possible to speed up development and conversion to \CCODE\ and opening up took
+off. After that we gradually moved forward.
+
+That doesn't mean that we're done yet. The \LUATEX\ 1.0 engine will not change
+much. We might add a few things, and for sure we will keep working on the code
+base. The move from \PASCAL\ to \CCODE\ \WEB\ (an impressive job by itself), as
+well as merging functionality of engines (kind of a challenge when you want to
+remain compatible), opening up via \LUA\ (which possibilities even surprised us),
+and experimenting (\CONTEXT\ users paid the price for that) took quite some time,
+also because we played with proofs of concept. It helped that we used the engine
+exclusively for real typesetting related work ourselves.
+
+We will continue to clean up and document the source and stepwise improve the
+manual. If you followed the development of \CONTEXT, you will have noticed that
+\MKIV\ is heavily relying on the \LUA\ interface so stability is important
+(although we can relatively easy adapt to future developments as we did in the
+past). However, the fact that other packages support \LUATEX\ means that we also
+need to keep the 1.0 engine stable. Our challenge is to provide stability on the
+one hand, but not limit ourselves to much on the other. We'll keep you posted on
+what comes next.
+
+\blank
+
+Hans, Hartmut, Luigi, Taco
+
+\stopsection
+
+\stopchapter
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/still/still-opentypemath.tex b/doc/context/sources/general/manuals/still/still-opentypemath.tex
new file mode 100644
index 000000000..43a340866
--- /dev/null
+++ b/doc/context/sources/general/manuals/still/still-opentypemath.tex
@@ -0,0 +1,921 @@
+% language=uk
+
+\environment still-environment
+
+\starttext
+
+\startchapter[title=Opentype math]
+
+\startsection[title=Introduction]
+
+When \TEX\ typesets mathematics it makes some assumptions about the properties of
+fonts and dimensions of glyphs. Due to practical limitations in the traditional
+eight|-|bit fonts, such as the number of available characters in a font and a
+limited number of heights and depths, some juggling takes place. For instance,
+\TEX\ sometimes uses dimensions as a signal to treat some characters as special.
+This is not a problem as long as one knows how to make a font and in practice
+that was done by looking at the properties of Computer Modern to implement
+similar shapes. After all, there are not that many math fonts around and
+basically there is only one engine that can deal with them properly.
+
+However, when Microsoft set the standard for \OPENTYPE\ math fonts it also
+steered the direction of their use in rendering mathematics. This means that the
+\LUATEX\ engine, which handles \OPENTYPE\ fonts, has to implement some
+alternative code paths. At the start, this involved a bit of gambling because
+there was no real specification; since then we now have a better picture. One of
+the more complex changes that took place is in the way italic correction is
+applied. A dirty way out of this dilemma would be to turn the math fonts into
+virtual ones that match traditional \TEX\ properties, but this would not be a
+nice solution.
+
+It must be noted that in the process of implementing support for the new fonts,
+Taco (Hoekwater) turned some noad types (see below) into a generic noad with a subtype. This
+simplified the transition. At the same time, a lot of detailed control was added
+in the way successive characters are spaced.
+
+In \LUATEX\ before 0.85, the italic correction was always added when a character got
+boxed (a frequently used preparation in the math builder). Now this is only done
+for the traditional fonts because, concerning italic correction, the \OPENTYPE\
+standard states: \footnote {Recently version 1.8 has been published on the Microsoft
+website.}
+
+\startitemize[n]
+ \startitem
+ When a run of slanted characters is followed by a straight character
+ (such as an operator or a delimiter), the italics correction of the last
+ glyph is added to its advance width.
+ \stopitem
+ \startitem
+ When positioning limits on an N-ary operator (e.g., integral sign), the
+ horizontal position of the upper limit is moved to the right by half of the
+ italics correction, while the position of the lower limit is moved to the
+ left by the same distance.
+ \stopitem
+ \startitem
+ When positioning superscripts and subscripts, their default horizontal
+ positions are also different by the amount of the italics correction of
+ the preceding glyph.
+ \stopitem
+\stopitemize
+
+And, with respect to kerning:
+
+\startitemize[continue]
+ \startitem
+ Set the default horizontal position for the superscript as shifted
+ relative to the position of the subscript by the italics correction of
+ the base glyph.
+ \stopitem
+\stopitemize
+
+I must admit that when the first implementation showed up, my natural reaction to
+unexpected behaviour was just to compensate for it. One such solution was simply not
+to pass the italic correction to the engine and deal with it in \LUA. In
+practice, that didn't work well for all cases; one reason was that the engine
+saw the combination of old fonts as a new one and followed a mixed code path.
+\footnote {\CONTEXT\ employed \UNICODE\ math right from the start of \LUATEX.}
+Another approach I tried was a mix of manipulated italic values and \LUA, but
+finally, as specifications settled I decided to leave it to the engine completely,
+if only because successive versions of \LUATEX\ behaved much better.
+
+So, as we were closing in on the first stable release of \LUATEX\ (1.0.0
+was released on September~27, 2016; this note was mostly written in the
+early part of 2016), I decided to fix the
+pending issues and sat down to look at the math|-|related code. I must admit that I
+had never looked in depth into that part of the machinery. In the next sections I
+will discuss some of the outcomes of this exercise.
+
+I will also discuss some extensions that have been on the agenda for years. They
+are rather generic and handy, but I must also admit that the \MKIV\ code related
+to math has so many options to control rendering that I'm not sure if they will
+ever be used in \CONTEXT. Nevertheless, these generic extensions fit well into
+the set of basic features of \LUATEX.
+
+\stopsection
+
+\startsection[title=Italic correction]
+
+As stated above, the normal code path included italic correction in all the math
+boxes made. This meant that, in some places, the correction had to be
+removed and/or moved to another place in the chain. This is a natural side effect
+of the fact that \TEX\ runs over the intermediate list of math nodes (noads) and
+turns them into regular nodes, mostly glyphs, kerns, glue and boxes.
+
+The complication is not so much the italic corrections themselves, because we
+could just continue to do the same, but the fact that these corrections are to be
+interpreted differently in case of integrals. There, the problem is that we have
+to (kind of) look backward at what is done in order to determine what italic
+corrections are to be applied.
+
+The original solution was to keep track of the applied correction via variables
+but that still made some analysis necessary. In the new implementation, more
+information is stored in the processed noads. This is a logical choice given that
+we have already added other information. It also makes it possible to fix cases
+that will (for sure) show up in the future.
+
+\startbuffer[ic-1]
+\ruledhbox\bgroup
+ \showglyphs\showboxes
+ \hbox{$\int ^2 $}\quad
+ \hbox{$\int _2$}\quad
+ \hbox{$\int ^2_2$}\quad
+ \hbox{$f ^2 $}\quad
+ \hbox{$f _2$}\quad
+ \hbox{$f ^2_2$}%
+\egroup
+\stopbuffer
+
+\startbuffer[ic-2]
+\ruledhbox\bgroup
+ \showglyphs\showboxes
+ \hbox{$\normalint ^2 $}\quad
+ \hbox{$\normalint _2$}\quad
+ \hbox{$\normalint ^2_2$}\quad
+ \hbox{$\int ^2 $}\quad
+ \hbox{$\int _2$}\quad
+ \hbox{$\int ^2_2$}%
+\egroup
+\stopbuffer
+
+\placefigure
+ [here]
+ [fig:italic-correction-1]
+ {Italic correction examples (1): superscripts shifted right and subscripts left.}
+ {\scale[width=\textwidth]{\getbuffer[ic-1]}}
+
+In \in {figure} [fig:italic-correction-1] we show two examples of inline italic
+correction. The superscripts are shifted to the right and the subscripts to the
+left. In the case of an integral sign, we need to move half the correction. This
+is triggered by the \type {\nolimits} primitive. In \in {figure}
+[fig:italic-correction-2] we show the difference between just an integral
+character and one tagged as having limits. \footnote {We show some boxes so that
+you can get an idea what \TEX\ is doing. Essentially, \TEX\ puts superscripts and
+subscripts on top of each other with some kern in between and then corrects the
+dimensions.}
+
+\placefigure
+ [here]
+ [fig:italic-correction-2]
+ {Italic correction examples (2): plain integral vs.\ integral with limits}
+ {\scale[width=\textwidth]{\getbuffer[ic-2]}}
+
+The amount of correction, if present at all, depends on the font, and in this
+document we use DejaVu math. \in {Figure} [fig:italic-correction-3] shows a few
+variants. As you can see, the amount of correction is highly font dependent.
+
+\placefigure
+ [here]
+ [fig:italic-correction-3]
+ {Italic correction examples (3): correction amounts are font-dependent.}
+ {\startcombination[1*4]
+ {\switchtobodyfont [pagella]\scale[width=\textwidth]{\getbuffer[ic-1]}} {cambria}
+ {\switchtobodyfont [cambria]\scale[width=\textwidth]{\getbuffer[ic-1]}} {pagella}
+ {\switchtobodyfont [modern]\scale[width=\textwidth]{\getbuffer[ic-1]}} {latin modern}
+ {\switchtobodyfont[lucidaot]\scale[width=\textwidth]{\getbuffer[ic-1]}} {lucida ot}
+ \stopcombination}
+
+\startsection[title=Vertical delimiters]
+
+When we go into display math, there is a good chance that an integral has to be
+enlarged. The integral sign in \UNICODE\ has slot \type {0x222B}, so we can
+define a bigger one as follows:
+
+\startbuffer[nocontext]
+\let\int\normalint
+\stopbuffer
+
+\startbuffer[cambria]
+\switchtobodyfont[cambria]%
+\stopbuffer
+
+\startbuffer[pagella]
+\switchtobodyfont[pagella]%
+\stopbuffer
+
+\startbuffer[modern]
+\switchtobodyfont[modern]%
+\stopbuffer
+
+\startbuffer[lucidaot]
+\switchtobodyfont[lucidaot]%
+\stopbuffer
+
+\startbuffer[xits]
+\switchtobodyfont[xits]%
+\stopbuffer
+
+\startbuffer[largerint]
+\def\standardint{
+ \Umathchar "1 "0 "222B
+}
+\def\wrappedint{\mathop{
+ \Umathchar "1 "0 "222B
+}}
+\def\biggerint{\mathop{
+ \Uleft height 3ex depth 3ex axis \Udelimiter "0 "0 "222B
+ \Uright .
+}}
+\def\evenbiggerint{\mathop{
+ \Uleft height 6ex depth 6ex axis \Udelimiter "0 "0 "222B
+ \Uright .
+}}
+\stopbuffer
+
+\typebuffer[largerint]
+
+\startbuffer[demoint]
+$
+\displaystyle\standardint ^a_b\enspace
+\displaystyle\wrappedint ^a_b\enspace
+\displaystyle\biggerint ^a_b\enspace
+\displaystyle\evenbiggerint^a_b\enspace
+$
+\stopbuffer
+
+The \type {axis} keyword will apply a shift up over the size of the current
+styles math axis. We use this in some examples as:
+
+\typebuffer[demoint]
+
+In \in {figure} [fig:demoint] you can see some subtle differences. The wrapped
+version doesn't shift the superscript and subscript. The reason is that the
+operator is hidden in its own wrapper and the scripts attach at an outer level.
+So, unless we start analyzing the innermost noad and apply that to the outer, we
+cannot know the shift. Such analyzing is asking for problems: where do we stop
+and what slight variations do we take into account? It's better to be
+predictable.
+
+\startbuffer
+ \ruledhbox \bgroup
+ \showglyphs \showboxes
+ \getbuffer[nocontext,pagella, largerint,demoint]
+ \getbuffer[nocontext,cambria, largerint,demoint]
+ \getbuffer[nocontext,modern, largerint,demoint]
+ \getbuffer[nocontext,lucidaot,largerint,demoint]
+ \egroup
+\stopbuffer
+
+\placefigure
+ [here]
+ [fig:demoint]
+ {Comparison of integral variants (standard, wrapped, bigger, even
+ bigger) among fonts: \TeX\ Gyre Pagella, Cambria, Latin Modern, and
+ Lucida OT.}
+ {\scale[width=\textwidth]{\getbuffer}}
+
+Another observation is that Latin Modern does not provide (at least not yet)
+large integrals at all.
+
+The following four cases are equivalent:
+
+\starttyping
+\Uleft height 3ex depth 3ex axis \Udelimiter "0 "0 "222B
+\Uright .
+
+\Uleft .
+\Uright height 3ex depth 3ex axis \Udelimiter "0 "0 "222B
+
+\Uleft .
+\Umiddle height 3ex depth 3ex axis \Udelimiter "0 "0 "222B
+\Uright .
+
+\Uleft .
+\Umiddle height 3ex depth 3ex axis \Udelimiter "0 "0 "222B
+\Uright .
+\stoptyping
+
+However, because this all looks a bit clumsy, we now provide a new
+primitive:
+
+\starttyping
+\Uvextensible
+ height <dimension>
+ depth <dimension>
+ axis
+ exact
+ <delimiter>
+\stoptyping
+
+The symbol to be constructed will have size \type {height} plus \type {depth}.
+When an \type {axis} is specified, the symbol will be shifted up, which is
+normally the case for such symbols. The keyword \type {exact} will correct the
+dimensions when no exact match is made, and this can be the case as long as we
+use the stepwise larger glyphs and before we end up using the composed shapes.
+When no dimensions are specified, the normal construction takes place and the
+only keyword that can be used then is \type {noaxis} which keeps the axis out of
+the calculations. After about a week of experimenting and exploring options, this
+combination made most sense, read: no fuzzy heuristics but predictable behaviour.
+After all, one might need different solutions for different fonts or
+circumstances and the applied logic (and expectations) can (and will, for sure)
+differ per macro package.
+
+\def\SampleRule#1#2%
+ {\blackrule[height=#1,depth=#2,width=1mm,color=maincolor]}
+
+% \def\SampleDelimiterSpec#1#2%
+% {\ruledhbox \bgroup
+% \SampleRule{20mm}{20mm}\enspace
+% \ruledhbox{$\maincolor\char"#1$}\enspace
+% \ruledhbox{$\Uleft height 1mm depth 1mm #2 \Udelimiter 0 0 "#1\Uright .$}\enspace
+% \ruledhbox{$\Uleft height 2mm depth 2mm #2 \Udelimiter 0 0 "#1\Uright .$}\enspace
+% \ruledhbox{$\Uleft height 5mm depth 5mm #2 \Udelimiter 0 0 "#1\Uright .$}\enspace
+% \ruledhbox{$\Uleft height 20mm depth 20mm #2 \Udelimiter 0 0 "#1\Uright .$}\enspace
+% \ruledhbox{$\Uleft height 20mm depth 10mm #2 \Udelimiter 0 0 "#1\Uright .$}%
+% \egroup}
+
+\def\SampleDelimiterSpec#1#2%
+ {\ruledhbox \bgroup
+ \SampleRule{20mm}{20mm}\enspace
+ \ruledhbox{$\maincolor\char"#1$}\enspace
+ \ruledhbox{$\Uvextensible height 1mm depth 1mm #2 \Udelimiter 0 0 "#1$}\enspace
+ \ruledhbox{$\Uvextensible height 2mm depth 2mm #2 \Udelimiter 0 0 "#1$}\enspace
+ \ruledhbox{$\Uvextensible height 5mm depth 5mm #2 \Udelimiter 0 0 "#1$}\enspace
+ \ruledhbox{$\Uvextensible height 20mm depth 20mm #2 \Udelimiter 0 0 "#1$}\enspace
+ \ruledhbox{$\Uvextensible height 20mm depth 10mm #2 \Udelimiter 0 0 "#1$}%
+ \egroup}
+
+\startbuffer[delimiter-integral-spec]
+\startcombination[4*1]
+ {\SampleDelimiterSpec{222B}{}} {}
+ {\SampleDelimiterSpec{222B}{axis}} {axis}
+ {\SampleDelimiterSpec{222B}{exact}} {exact}
+ {\SampleDelimiterSpec{222B}{axis exact}} {axis exact}
+\stopcombination
+\stopbuffer
+
+\startbuffer[delimiter-leftparent-spec]
+\startcombination[4*1]
+ {\SampleDelimiterSpec{0028}{}} {}
+ {\SampleDelimiterSpec{0028}{axis}} {axis}
+ {\SampleDelimiterSpec{0028}{exact}} {exact}
+ {\SampleDelimiterSpec{0028}{axis exact}} {axis exact}
+\stopcombination
+\stopbuffer
+
+\placefigure
+ [here]
+ [fig:integral-spec]
+ {Cambria integrals, with dimensions.}
+ {\getbuffer[nocontext,cambria,delimiter-integral-spec]}
+
+\placefigure
+ [here]
+ [fig:leftparent-spec]
+ {Cambria left parenthesis, with dimensions.}
+ {\getbuffer[nocontext,cambria,delimiter-leftparent-spec]}
+
+\def\SampleDelimiterAuto#1#2%
+ {\ruledhbox \bgroup
+ \ruledhbox{$\maincolor\char"#1$}\enspace
+ \ruledhbox{$\Uleft #2 \Udelimiter 0 0 "#1\SampleRule{ 1mm}{ 1mm}\Uright .$}\enspace
+ \ruledhbox{$\Uleft #2 \Udelimiter 0 0 "#1\SampleRule{ 2mm}{ 2mm}\Uright .$}\enspace
+ \ruledhbox{$\Uleft #2 \Udelimiter 0 0 "#1\SampleRule{ 5mm}{ 5mm}\Uright .$}\enspace
+ \ruledhbox{$\Uleft #2 \Udelimiter 0 0 "#1\SampleRule{10mm}{10mm}\Uright .$}\enspace
+ \ruledhbox{$\Uleft #2 \Udelimiter 0 0 "#1\SampleRule{15mm}{15mm}\Uright .$}\enspace
+ \ruledhbox{$\Uleft #2 \Udelimiter 0 0 "#1\SampleRule{20mm}{20mm}\Uright .$}\enspace
+ \ruledhbox{$\Uleft #2 \Udelimiter 0 0 "#1\SampleRule{20mm}{10mm}\Uright .$}%
+ \egroup}
+
+\startbuffer[delimiter-integral-auto]
+\startcombination[2*1]
+ {\SampleDelimiterAuto{222B}{}} {}
+ {\SampleDelimiterAuto{222B}{noaxis}} {noaxis}
+\stopcombination
+\stopbuffer
+
+\startbuffer[delimiter-leftparent-auto]
+\startcombination[4*1]
+ {\SampleDelimiterAuto{0028}{}} {}
+ {\SampleDelimiterAuto{0028}{noaxis}} {noaxis}
+\stopcombination
+\stopbuffer
+
+\placefigure
+ [here]
+ [fig:integral]
+ {Cambria integrals, adaptive: \type {axis} left and \type {noaxis} right.}
+ {\getbuffer[nocontext,cambria,delimiter-integral-auto]}
+
+\placefigure
+ [here]
+ [fig:leftparent]
+ {Cambria left parenthesis, adaptive: \type {axis} left and \type {noaxis} right.}
+ {\getbuffer[nocontext,cambria,delimiter-leftparent-auto]}
+\stopsection
+
+\startsection[title=Horizontal delimiters]
+
+Horizontal extenders also have some new options. Although one can achieve similar
+results with macros, the following might look a bit more natural. Also, some
+properties are lost once the delimiter is constructed, so macros can become
+complex when trying to determine the original dimensions involved.
+
+We start with the new \type {\Uhextensible} primitive that accepts a dimension.
+It's just a variant of the over and under delimiters with no content part.
+
+\starttyping
+\Uhextensible
+ height <dimension>
+ depth <dimension>
+ left | middle | right
+ <family>
+ <slot>
+\stoptyping
+
+So for example you can say:
+
+\starttyping
+$\Uhextensible width 30pt 0 "2194$
+\stoptyping
+
+The \type {left}, \type {middle} and \type {right} keywords are only interpreted
+when the requested size can't be met due to stepwise larger glyph selection
+(i.e., before we start using arbitrary sizes made of snippets). \in {Figure}
+[fig:hextensible] shows what we get when we step from 2--20 points by
+increments of 2 points in Cambria.
+
+\unexpanded\def\ExtensibleFunA#1%
+ {\switchtobodyfont[cambria,17.3pt]%
+ \hbox\bgroup
+ \dostepwiserecurse{2}{20}{2}
+ {\backgroundline
+ [maincolor]
+ {\white$\Uhextensible width \recurselevel pt #1 0 "2194$}%
+ \quad}%
+ \unskip
+ \egroup}
+
+\unexpanded\def\ExtensibleFunB#1%
+ {\switchtobodyfont[cambria,17.3pt]%
+ \hbox\bgroup
+ \dostepwiserecurse{2}{20}{2}
+ {\ruledhbox
+ {$\Uhextensible width \recurselevel pt #1 0 "2194$}%
+ \quad}%
+ \unskip
+ \egroup}
+
+\startbuffer
+\starttabulate[|l|p|]
+ \NC (default) \NC \ExtensibleFunA{} \par \ExtensibleFunB{} \NC \NR
+ \NC \type{left} \NC \ExtensibleFunA{left} \par \ExtensibleFunB{left} \NC \NR
+ \NC \type{middle} \NC \ExtensibleFunA{middle} \par \ExtensibleFunB{middle} \NC \NR
+ \NC \type{right} \NC \ExtensibleFunA{right} \par \ExtensibleFunB{right} \NC \NR
+\stoptabulate
+\stopbuffer
+
+\placefigure
+ [here]
+ [fig:hextensible]
+ {Stepwise wider \type {\Uhextensible} with options (cambria).}
+ {\getbuffer}
+
+The dimensions and options can also be given to the four primitives \type {\Uoverdelimiter},
+\type {\Uunderdelimiter}, \type {\Udelimiterover} and \type {\Udelimiterunder}. \in {Figure} [fig:delimiterunder] shows what happens when the
+delimiter is smaller than requested. The samples look like this:
+
+\starttyping
+$\Udelimiterunder width 1pt 0 "2194 {\hbox{\strut !}}
+\stoptyping
+
+When no dimension is given the keywords are ignored as it makes no sense to
+mess with the extensible in that case.
+
+\unexpanded\def\DelimiterFunA#1%
+ {\switchtobodyfont[cambria,20.7pt]%
+ \hbox\bgroup
+ \dostepwiserecurse{1}{10}{1}
+ {\backgroundline
+ [maincolor]
+ {\white$\Udelimiterunder width ##1pt #1 0 "2194 {\hbox{\strut !}}$}%
+ \quad}%
+ \unskip
+ \egroup}
+
+\unexpanded\def\DelimiterFunB#1%
+ {\switchtobodyfont[cambria,20.7pt]%
+ \hbox\bgroup
+ \dostepwiserecurse{1}{10}{1}
+ {\ruledhbox
+ {$\Udelimiterunder width ##1pt #1 0 "2194 {\hbox{\strut !}}$}%
+ \quad}%
+ \unskip
+ \egroup}
+
+\startbuffer
+\starttabulate[|l|p|]
+ \NC (default) \NC \DelimiterFunA{} \par \DelimiterFunB{} \NC \NR
+ \NC \type{left} \NC \DelimiterFunA{left} \par \DelimiterFunB{left} \NC \NR
+ \NC \type{middle} \NC \DelimiterFunA{middle} \par \DelimiterFunB{middle} \NC \NR
+ \NC \type{right} \NC \DelimiterFunA{right} \par \DelimiterFunB{right} \NC \NR
+ \NC \NR
+\stoptabulate
+\stopbuffer
+
+\placefigure
+ [here]
+ [fig:delimiterunder]
+ {Stepwise wider \type {\Udelimiterunder} with options (cambria).}
+ {\getbuffer}
+
+\stopsection
+
+\startsection[title=Accents]
+
+Many years ago, I observed that overlaying characters (which happens when
+we negate an operator which has no composed negation glyph) didn't always give nice results
+and, therefore, a tracker item was created. When going over the todo list, I ran
+across a suggested patch by Khaled Hosny that added an overlay accent type. As
+the suggested solution fits in with the other extensions, a variant has been
+implemented.
+
+The results definitely depend on the quality and completeness of the font, so here we
+will show \type {xits}. The placement of an \type {overlay} also depends on the top
+accent shift as specified in the font for the used glyph. Instead of a fixed
+criterion for trying to find the best match, an additional \type {fraction}
+(numerator) parameter can be specified. A value of $800$ means that the target
+width is $800/1000$.
+
+The \type {\Umathaccent} command now has the following syntax:
+
+\starttyping
+\Umathaccent
+ [top|bottom|overlay]
+ [fixed]
+ [fraction <number>]
+ <delimiter>
+ {content}
+\stoptyping
+
+When we have an overlay, the fraction concerns the height; otherwise it concerns
+the width of the nucleus. In both cases, it is only applied when searching for
+stepwise larger glyphs, as extensibles are not influenced. An example of a
+specification is:
+
+\starttyping
+\Umathaccent
+ overlay "0 "0 "0338
+ fraction 950
+ {\Umathchar"1"0"2211}
+\stoptyping
+
+\in {Figure} [fig:accent-1] shows what we get when we use different fractions
+(from 800 up to 1500 with a step of 100). We see that \type {\overlay} is not
+always useful.
+
+\startbuffer[accents-1]
+\dostepwiserecurse{800}{1500}{100}{%
+$\Umathaccent
+ overlay "0 "0 "0338
+ fraction #1
+ {\Umathchar"1"0"2211} #1
+$\quad
+}\unskip
+\stopbuffer
+
+\startbuffer
+\startcombination[1*3]
+ {\getbuffer[xits,accents-1]} {xits \endash\ has variants}
+ {\getbuffer[cambria,accents-1]} {cambria \endash\ lacks variants}
+ {\getbuffer[pagella,accents-1]} {pagella \endash\ lacks variants}
+\stopcombination
+\stopbuffer
+
+\placefigure
+ [here]
+ [fig:accent-1]
+ {Using \type {overlay} in \type {\Umathaccent}.}
+ {\getbuffer}
+
+\startbuffer[accents-2]
+$\Umathaccent overlay "0 "0 "0338 {x}$
+$\Umathaccent overlay "0 "0 "0338 {\tf x}$
+$\Umathaccent overlay "0 "0 "0338 {\tf xxx}$
+\stopbuffer
+
+Normally you can forget about the factor because overlays make most sense for
+inline math, which uses relatively small glyphs, so we can get \getbuffer
+[accents-2] with the following code:
+
+\typebuffer[accents-2]
+
+A normal accent can also be influenced by \type {fraction}:
+
+\startbuffer[accents-4]
+\dostepwiserecurse{500}{1500}{250}{%
+$
+ \Umathaccent
+ top "0 "0 "23DE
+ fraction #1
+ {a\times b}
+$\quad
+}\unskip
+\stopbuffer
+
+\blank \start \getbuffer[accents-4] \stop \blank
+
+\stopsection
+
+\startsection[title=Fractions]
+
+A normal fraction has a reasonable thick rule but as soon as you make it bigger you
+will notice a peculiar effect:
+
+\startlinecorrection
+\startcombination[5*1]
+ {$\displaystyle x + {{a} \abovewithdelims() 1pt {b}}$} {1pt}
+ {$\displaystyle x + {{a} \abovewithdelims() 2pt {b}}$} {2pt}
+ {$\displaystyle x + {{a} \abovewithdelims() 3pt {b}}$} {3pt}
+ {$\displaystyle x + {{a} \abovewithdelims() 4pt {b}}$} {4pt}
+ {$\displaystyle x + {{a} \abovewithdelims() 5pt {b}}$} {5pt}
+\stopcombination
+\stoplinecorrection
+
+Such a fraction is specified as:
+
+\starttyping
+x + { {a} \abovewithdelims () 5pt {b} }
+\stoptyping
+
+A new keyword \type {exact} avoids the excessive spacing:
+
+\starttyping
+x + { {a} \abovewithdelims () exact 5pt {b} }
+\stoptyping
+
+Now we get:
+
+\startlinecorrection
+\startcombination[5*1]
+ {$\displaystyle x + {{a} \abovewithdelims() exact 1pt {b}}$} {1pt}
+ {$\displaystyle x + {{a} \abovewithdelims() exact 2pt {b}}$} {2pt}
+ {$\displaystyle x + {{a} \abovewithdelims() exact 3pt {b}}$} {3pt}
+ {$\displaystyle x + {{a} \abovewithdelims() exact 4pt {b}}$} {4pt}
+ {$\displaystyle x + {{a} \abovewithdelims() exact 5pt {b}}$} {5pt}
+\stopcombination
+\stoplinecorrection
+
+One way to get consistent spacing in such fractions is to use struts:
+
+\starttyping
+x + { {\strut a} \abovewithdelims () exact 5pt {\strut b} }
+\stoptyping
+
+Now we get:
+
+\startlinecorrection
+\startcombination[5*1]
+ {$\displaystyle x + {{\strut a} \abovewithdelims() exact 1pt {\strut b}}$} {1pt}
+ {$\displaystyle x + {{\strut a} \abovewithdelims() exact 2pt {\strut b}}$} {2pt}
+ {$\displaystyle x + {{\strut a} \abovewithdelims() exact 3pt {\strut b}}$} {3pt}
+ {$\displaystyle x + {{\strut a} \abovewithdelims() exact 4pt {\strut b}}$} {4pt}
+ {$\displaystyle x + {{\strut a} \abovewithdelims() exact 5pt {\strut b}}$} {5pt}
+\stopcombination
+\stoplinecorrection
+
+Yet another way to increase the distance between the rule and text a bit is:
+
+\starttyping
+\Umathfractionnumvgap \displaystyle4pt
+\Umathfractiondenomvgap\displaystyle4pt
+\stoptyping
+
+This looks quite consistent:
+
+\startlinecorrection
+\Umathfractionnumvgap \displaystyle4pt
+\Umathfractiondenomvgap\displaystyle4pt
+\startcombination[5*1]
+ {$\displaystyle x + {{a} \abovewithdelims() exact 1pt {b}}$} {1pt}
+ {$\displaystyle x + {{a} \abovewithdelims() exact 2pt {b}}$} {2pt}
+ {$\displaystyle x + {{a} \abovewithdelims() exact 3pt {b}}$} {3pt}
+ {$\displaystyle x + {{a} \abovewithdelims() exact 4pt {b}}$} {4pt}
+ {$\displaystyle x + {{a} \abovewithdelims() exact 5pt {b}}$} {5pt}
+\stopcombination
+\stoplinecorrection
+
+Here we use code like:
+
+\starttyping
+$\displaystyle x + {{a} \abovewithdelims() exact 2pt {b}}$
+\stoptyping
+
+Using struts, it is best to zero the gap:
+
+\startlinecorrection
+\Umathfractionnumvgap \displaystyle0pt
+\Umathfractiondenomvgap\displaystyle0pt
+\startcombination[5*1]
+ {$\displaystyle x + {{\strut a} \abovewithdelims() exact 1pt {\strut b}}$} {1pt}
+ {$\displaystyle x + {{\strut a} \abovewithdelims() exact 2pt {\strut b}}$} {2pt}
+ {$\displaystyle x + {{\strut a} \abovewithdelims() exact 3pt {\strut b}}$} {3pt}
+ {$\displaystyle x + {{\strut a} \abovewithdelims() exact 4pt {\strut b}}$} {4pt}
+ {$\displaystyle x + {{\strut a} \abovewithdelims() exact 5pt {\strut b}}$} {5pt}
+\stopcombination
+\stoplinecorrection
+
+Here we use code like:
+
+\starttyping
+$\displaystyle x + {{\strut a} \abovewithdelims() exact 2pt {\strut b}}$
+\stoptyping
+
+\stopsection
+
+\startsection[title=Skewed fractions]
+
+The math parameter table contains values specifying horizontal and
+vertical gaps for skewed fractions. Some guessing is needed in order to implement
+something that uses them, so we now provide a primitive similar to the other
+fraction related ones but with a few options that one can use to influence the
+rendering. Of course, a user can mess around directly with the parameters \type
+{\Umathskewedfractionhgap} and \type {\Umathskewedfractionvgap}.
+
+The syntax used here is:
+
+\starttyping
+{ {1} \Uskewed / <options> {2} }
+{ {1} \Uskewedwithdelims / () <options> {2} }
+\stoptyping
+
+The options can be \type {noaxis} and \type {exact}, a combination of them or
+just nothing. By default we add half the axis to the shifts and also 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
+
+\stopsection
+
+\startsection[title=Side effects]
+
+Not all bugs reported as such are really bugs. Here is one that came from a
+misunderstanding: In Eijkhout's \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 the following (all render the same):
+
+\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]
+
+This is coded like:
+
+\starttyping
+$b_{x=xx}^{x=xx}$
+$b_{\scriptstyle x=xx}^{\scriptstyle x=xx}$
+$b_{\crampedscriptstyle x=xx}^{\crampedscriptstyle x=xx}$
+\stoptyping
+
+Now we set the following parameters:
+
+\startbuffer[setup]
+\Umathordrelspacing\scriptstyle=30mu
+\Umathordordspacing\scriptstyle=30mu
+\stopbuffer
+
+\typebuffer[setup]
+
+This gives:
+
+\start\getbuffer[setup,demo]\stop
+
+Since the result 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
+
+\stopsection
+
+\startsection[title=Fixed scripts]
+
+We have three parameters that are used for anchoring superscripts and subscripts,
+alone or in combinations.
+
+\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 in, for
+instance, chemical equations. You can manipulate the mentioned variables to
+achieve different effects, and the specifications are shown in the following table. In
+order to see the differences in more detail, they are enlarged in \in {figure}
+[fig:mathscriptsmode].
+
+\def\SampleMath#1%
+ {\ruledhbox{$\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
+
+\placefigure
+ [here]
+ [fig:mathscriptsmode]
+ {The effect of setting \type {\mathscriptsmode}.}
+ {\startcombination[nx=3,ny=2,distance=1em]
+ {\scale[width=\dimexpr(\textwidth-2em)/3\relax]{\SampleMath{0}}} {0}
+ {\scale[width=\dimexpr(\textwidth-2em)/3\relax]{\SampleMath{1}}} {1}
+ {\scale[width=\dimexpr(\textwidth-2em)/3\relax]{\SampleMath{2}}} {2}
+ {\scale[width=\dimexpr(\textwidth-2em)/3\relax]{\SampleMath{3}}} {3}
+ {\scale[width=\dimexpr(\textwidth-2em)/3\relax]{\SampleMath{4}}} {4}
+ {\scale[width=\dimexpr(\textwidth-2em)/3\relax]{\SampleMath{5}}} {5}
+ \stopcombination}
+
+\stopsection
+
+\startsection[title=Remark]
+
+The changes that we have made are hopefully not too intrusive. Instead of
+extending existing commands, new ones were introduced so that compatibility
+should not be a significant problem. To some extent, these extensions violate the
+principle that extensions should be done in \LUA, but \TEX\ being a math renderer
+and \OPENTYPE\ replacing old font technology, we felt that we should make an
+exception here. Hopefully, not too many bugs were introduced.
+
+\stopsection
+
+\stopchapter
+
+\stoptext
diff --git a/doc/context/sources/general/manuals/still/still-profiling.tex b/doc/context/sources/general/manuals/still/still-profiling.tex
new file mode 100644
index 000000000..8950864d6
--- /dev/null
+++ b/doc/context/sources/general/manuals/still/still-profiling.tex
@@ -0,0 +1,802 @@
+% language=uk
+
+\environment still-environment
+
+\enabledirectives[visualizers.fraction=2.5]
+
+\startcomponent still-profiling
+
+\startchapter[title=Profiling lines]
+
+\startsection[title=Introduction]
+
+Although \TEX\ is pretty good at typesetting simple texts like novels, in
+practice it's often used for getting more complex stuff on paper (or screen).
+Math is of course the first thing that comes to mind. If for instance you look at
+the books typeset by Don Knuth you will see a rendering that is rather consistent
+in spacing. This is no surprise as the author pays a lot of attention to detail
+and uses inline versus display math properly. No publisher will complain about
+the result.
+
+In the documents that I have to write styles for, the content is rather mixed,
+and in particular inline math can have display math properties. In a one-column
+layout this is not a real problem especially because lots of short sentences and
+white space is used: we're talking of secondary|-|school educational math where
+arguments for formatting something this or that way is not always rational and
+consistent but more based on \quotation {this is what the student expects},
+\quotation {the competitor also does it that way} or just \quotation {we like
+this more}. For instance in a recent project, the books with answers to questions
+had to be typeset in a multicolumn layout and because math was involved, we end
+up with lines with more height and depth than normal. That can not only result in
+more pages but also can make the result look a bit messy.
+
+\blank \dontleavehmode \start \showboxes This paragraph demonstrates how lines
+are handled: when a paragraph is broken into lines each line becomes a horizontal
+box with a height and depth determined by the size of the characters that make up
+the line. There is a minimal distance between baselines (\type {baselineskip})
+and when lines touch there can optionally be a \type {\lineskip}. In the end we
+get a vertical list of boxes and glue (either of not flexible) mixed with
+penalties that determine optimal paragraph breaks. This paragraph shows that
+there is normally enough space available to do the job. \par \stop \blank
+
+We already have some ways to control this. For instance the dimensions of math
+can be limited a bit and lines can be made to snap on a grid (which is what
+publishers often want anyway). However, another alternative is to look at the
+line and decide if successive lines can be moved closer, of course within the
+constraints of the height and and depth of the lines. There is no real way to see
+if some ugly clash can happen simply because when we run into boxed material
+there can be anything inside and the dimensions can be set on purpose. This means
+that we have to honour all dimensions and only can mess around with dimensions
+when we're reasonably confident. In \CONTEXT\ this messing is called profiling
+and that is what we will discuss next.
+
+\stopsection
+
+\startsection[title=Line heights and depths]
+
+\startbuffer[example-1]
+Regelmatig kom je procenten tegen. ‘Pro centum’ is Latijn en betekent per
+honderd, dus één van elke honderd, dus \math {\frac {1} {100}} deel. Met
+procenten rekenen is daarom rekenen met honderdsten: \math {45 \procent = \frac
+{45} {100} = 0,45}. Dus \math {45 \procent} van een geheel is het \math {\frac
+{45} {100}} deel ervan en dat kun je berekenen door te vermenigvuldigen met \math
+{0,45}.
+\stopbuffer
+
+\startbuffer[example-2]
+Je gaat uit van de bekende eigenschappen van machten. Bijvoorbeeld: \math {g^r *
+g^s = g^{(r+s)}}. Neem je hierin \math {r = ^{g}\log(a)} en \math {s = ^{g}\log
+b}, dan vind je: \math {g^{^{g}\log(a) + ^{g}\log(b)} = g^{^{g}\log a} \times
+g^{^{g}\log b} = a \times b}. Hierbij gebruik je de definitieformules.
+\stopbuffer
+
+\startbuffer[example-3]
+Omdat volgens de eigenschappen van machten en exponenten geldt \math {\frac {1}
+{x^4} = x^{-4} } is ook hier sprake van een machtsfunctie, namelijk \math {f(x) =
+\frac {6} {x^4} = 6 \times \frac {1} {x^4} = 6x^{-4}}.
+\stopbuffer
+
+In this section we will use some (Dutch) examples from documents that we've
+processed. We show unprofiled versions, with two different paragraph widths, in
+\in {figure} [fig:profiling:unprofiled-examples-widths]. All three examples shown
+demonstrate that as soon as we use something more complex than a number or
+variable in a subscript we exceed the normal line height, and thus the line
+spacing becomes somewhat irregular.
+
+\starttexdefinition ExampleRunUnprofiled #1
+ \vbox \bgroup
+ \switchtobodyfont[dejavu,10pt]
+ \raggedright
+ \hsize12cm
+ \inleft[scope=local]{\ttx hsize 12cm\\unprofiled}
+ \nl \vbox{\getbuffer[example-#1]}
+ \blank
+ \hsize10cm
+ \inleft[scope=local]{\ttx hsize 10cm\\unprofiled}
+ \nl \vbox{\getbuffer[example-#1]}
+ \egroup
+\stoptexdefinition
+
+\startplacefigure[reference=fig:profiling:unprofiled-examples-widths,title={Unprofiled examples.}]
+ \enabletrackers[profiling.show]
+ \startcombination[nx=1,ny=3]
+ \startcontent
+ \ExampleRunUnprofiled{1}
+ \stopcontent
+ \startcaption
+ example 1
+ \stopcaption
+ \startcontent
+ \ExampleRunUnprofiled{2}
+ \stopcontent
+ \startcaption
+ example 2
+ \stopcaption
+ \startcontent
+ \ExampleRunUnprofiled{3}
+ \stopcontent
+ \startcaption
+ example 3
+ \stopcaption
+ \stopcombination
+ \disabletrackers[profiling.show]
+\stopplacefigure
+
+The profiled rendering of the same examples are shown in \in {figure}
+[fig:profiling:profiled-examples-widths]. Here we use the minimal heights and
+depths plus a minimum distance of 1pt. This default method is called \type
+{strict}.
+
+\starttexdefinition ExampleRunProfiled #1
+ \vbox \bgroup
+ \switchtobodyfont[dejavu,10pt]
+ \raggedright
+ \hsize12cm
+ \inleft[scope=local]{\ttx hsize 12cm\\profiled}
+ \nl \profiledbox{\getbuffer[example-#1]}
+ \blank
+ \hsize10cm
+ \inleft[scope=local]{\ttx hsize 10cm\\profiled}
+ \nl \profiledbox{\getbuffer[example-#1]}
+ \egroup
+\stoptexdefinition
+
+\startplacefigure[reference=fig:profiling:profiled-examples-widths,title={Profiled examples.}]
+ \enabletrackers[profiling.show]
+ \startcombination[nx=1,ny=3]
+ \startcontent
+ \ExampleRunProfiled{1}
+ \stopcontent
+ \startcaption
+ example 1
+ \stopcaption
+ \startcontent
+ \ExampleRunProfiled{2}
+ \stopcontent
+ \startcaption
+ example 2
+ \stopcaption
+ \startcontent
+ \ExampleRunProfiled{3}
+ \stopcontent
+ \startcaption
+ example 3
+ \stopcaption
+ \stopcombination
+ \disabletrackers[profiling.show]
+\stopplacefigure
+
+In the first and last example there are some lines where the depth of one line
+combined with the height of the following exceeds the standard line height. This
+forces \TEX\ to insert \type {\lineskip} (mentioned in the demonstration
+paragraph above), a dimension that is normally set to a fraction of the line
+spacing (for instance 1pt for a 10pt body font and 12pt line spacing). When we
+are profiling, \type{\lineskip} is ignored and we use a settable distance
+instead. The second example (with superscripts) normally comes out fine as the
+math stays within limits and we make sure that smaller fractions and scripts stay
+within the natural limits of the line, but nested scripts can be an issue.
+
+% \unexpanded\def\fakeinmargin#1%
+% {\dontleavehmode{\resetvisualizers\smash{\llap{#1}}}}
+
+% \unexpanded\def\fakestrut#1%
+% {\fakeinmargin{\showstruts\strut\kern\dimexpr.5em+#1em/2\relax}}
+
+In \in {figure} [fig:profiling:zapf] we see the profile of a regular text with no
+math. The average text stays well within the limits of height and depth. If this
+doesn't happen for prose then you need to adapt the height|/|depth ratio to the
+ascender|/|descender ratio of the bodyfont. For regular text it makes no sense to
+use the profiler, it only slows down typesetting.
+
+\startplacefigure[reference=fig:profiling:zapf,title={Normal lines profiled (quote by Hermann Zapf)}]
+ \enabletrackers[profiling.show]
+ \switchtobodyfont[dejavu,10pt]
+ \profiledbox{\input{zapf}}
+ \disabletrackers[profiling.show]
+\stopplacefigure
+
+\stopsection
+
+\startsection[title=When lines exceed boundaries]
+
+Let's now take a more detailed look at what happens when lines get too high or
+low. First we'll zoom in on a simple example: in \in {figure}
+[fig:profiling:simple-text], we compare a sample text rendered using the variants
+of profiling currently implemented. (This is still experimental code so there
+might be more in the future). Seeing profiles helps to get a picture of the
+complications we have to deal with. In addition to the normal \type {vbox}
+variant (used in the previous examples), we show \type {none} which only
+analyzes, \type {strict} that uses the natural dimensions of lines and \type
+{fixed} that is supposed to cooperate with grid snapping.
+
+% \startbuffer[fake-1]
+% \hsize 2cm
+% \fakestrut2 first x \par \fakestrut1 first y \blank
+% \fakestrut2 second x \par \fakestrut1 second y \blank[2*big]
+% \fakestrut2 third x \par \fakestrut1 third y \par
+% \stopbuffer
+
+% \startbuffer[fake-2]
+% \hsize 2cm
+% \fakestrut2 line 1 \lower2ex\hbox{xxx}\par
+% \fakestrut1 line 2 \raise2ex\hbox{xxx}\par
+% \fakestrut2 line 3 \par
+% \stopbuffer
+
+% \startplacefigure[reference=fig:profiling:simple-text,title={Just a simple two line text.}]
+% \switchtobodyfont[10pt]
+% \enabletrackers[profiling.show]
+% \startcombination[nx=1,ny=3]
+% \startcontent
+% \startcombination[nx=4,ny=1,distance=10mm,style=\tt]
+% {\kern1.5em\showboxes\vbox {\getbuffer[fake-1]}} {vbox}
+% {\kern1.5em\showboxes\profiledbox[none] {\getbuffer[fake-1]}} {none}
+% {\kern1.5em\showboxes\profiledbox[strict]{\getbuffer[fake-1]}} {strict}
+% {\kern1.5em\showboxes\profiledbox[fixed] {\getbuffer[fake-1]}} {fixed}
+% \stopcombination
+% \stopcontent
+% \startcaption
+% no excessive height and depth
+% \stopcaption
+% \startcontent
+% \startcombination[nx=4,ny=1,distance=10mm,style=\tt]
+% {\kern1.5em\showboxes\vbox {\getbuffer[fake-2]}} {vbox}
+% {\kern1.5em\showboxes\profiledbox[none] [distance=0pt]{\getbuffer[fake-2]}} {none}
+% {\kern1.5em\showboxes\profiledbox[strict][distance=0pt]{\getbuffer[fake-2]}} {strict}
+% {\kern1.5em\showboxes\profiledbox[fixed] [distance=0pt]{\getbuffer[fake-2]}} {fixed}
+% \stopcombination
+% \stopcontent
+% \startcaption
+% some excessive height and depth (distance=0pt)
+% \stopcaption
+% \startcontent
+% \startcombination[nx=4,ny=1,distance=10mm,style=\tt]
+% {\kern1.5em\showboxes\vbox {\getbuffer[fake-2]}} {vbox}
+% {\kern1.5em\showboxes\profiledbox[none] [distance=2pt]{\getbuffer[fake-2]}} {none}
+% {\kern1.5em\showboxes\profiledbox[strict][distance=2pt]{\getbuffer[fake-2]}} {strict}
+% {\kern1.5em\showboxes\profiledbox[fixed] [distance=2pt]{\getbuffer[fake-2]}} {fixed}
+% \stopcombination
+% \stopcontent
+% \startcaption
+% some excessive height and depth (distance=2pt)
+% \stopcaption
+% \stopcombination
+% \disabletrackers[profiling.show]
+% \stopplacefigure
+
+\startbuffer[fake-1]
+\hsize 2cm \dontleavehmode
+line 1 \par
+line 2 \par
+line 3 \par
+\stopbuffer
+
+\startbuffer[fake-2]
+\hsize 2cm \dontleavehmode
+line 1 x\lower2ex\hbox{xxx}\par
+line 2 x\raise2ex\hbox{xxx}\par
+line 3 \par
+\stopbuffer
+
+\startbuffer[fake-3]
+\hsize 2cm \dontleavehmode
+x\lower2ex\hbox{xxx} line 1 \par
+line 2 x\raise2ex\hbox{xxx}\par
+line 3 \par
+\stopbuffer
+
+\startplacefigure[reference=fig:profiling:simple-text,title={Variants of profiling, using a constructed two-line text.}]
+ \switchtobodyfont[10pt]
+ \enabletrackers[profiling.show]
+ \startcombination[nx=1,ny=3]
+ \startcontent
+ \startcombination[nx=5,ny=1,distance=10mm,style=\tt]
+ {\showboxes\profiledbox[none] [distance=0pt]{\getbuffer[fake-1]}} {none}
+ {\showboxes\profiledbox[strict][distance=0pt]{\getbuffer[fake-1]}} {strict/0pt}
+ {\showboxes\profiledbox[strict][distance=1pt]{\getbuffer[fake-1]}} {strict/1pt}
+ {\showboxes\profiledbox[fixed] [distance=0pt]{\getbuffer[fake-1]}} {fixed/0pt}
+ {\showboxes\profiledbox[fixed] [distance=1pt]{\getbuffer[fake-1]}} {fixed/1pt}
+ \stopcombination
+ \stopcontent
+ \startcaption
+ no excessive height and depth
+ \stopcaption
+ \startcontent
+ \startcombination[nx=5,ny=1,distance=10mm,style=\tt]
+ {\showboxes\profiledbox[none] [distance=0pt]{\getbuffer[fake-2]}} {none}
+ {\showboxes\profiledbox[strict][distance=0pt]{\getbuffer[fake-2]}} {strict/0pt}
+ {\showboxes\profiledbox[strict][distance=1pt]{\getbuffer[fake-2]}} {strict/1pt}
+ {\showboxes\profiledbox[fixed] [distance=0pt]{\getbuffer[fake-2]}} {fixed/0pt}
+ {\showboxes\profiledbox[fixed] [distance=1pt]{\getbuffer[fake-2]}} {fixed/1pt}
+ \stopcombination
+ \stopcontent
+ \startcaption
+ some excessive height and depth (overlapping)
+ \stopcaption
+ \startcontent
+ \startcombination[nx=5,ny=1,distance=10mm,style=\tt]
+ {\showboxes\profiledbox[none] [distance=0pt]{\getbuffer[fake-3]}} {none}
+ {\showboxes\profiledbox[strict][distance=0pt]{\getbuffer[fake-3]}} {strict/0pt}
+ {\showboxes\profiledbox[strict][distance=1pt]{\getbuffer[fake-3]}} {strict/1pt}
+ {\showboxes\profiledbox[fixed] [distance=0pt]{\getbuffer[fake-3]}} {fixed/0pt}
+ {\showboxes\profiledbox[fixed] [distance=1pt]{\getbuffer[fake-3]}} {fixed/1pt}
+ \stopcombination
+ \stopcontent
+ \startcaption
+ some excessive height and depth (out of touch)
+ \stopcaption
+ \stopcombination
+ \disabletrackers[profiling.show]
+\stopplacefigure
+
+\in {Figure} [fig:profiling:simple-text] we show what happens when we add some
+more excessive height and depth to lines. The samples are:
+
+\starttyping
+line 1 x\lower2ex\hbox{xxx}\par
+line 2 x\raise2ex\hbox{xxx}\par
+line 3 \par
+\stoptyping
+
+and:
+
+\starttyping
+x\lower2ex\hbox{xxx} line 1 \par
+line 2 x\raise2ex\hbox{xxx}\par
+line 3 \par
+\stoptyping
+
+Here the \type {strict} variant has some effect while \type {fixed} only has some
+influence on the height and depth of lines. Later we will see that \type {fixed}
+operates in steps and the default step is large so here we never meet the
+criteria for closing up. \footnote {In \CONTEXT\ we normally use \type {\high}
+and \type {\low} and both ensure that we don't exceed the natural height and
+depth.}
+
+A profiled box is typeset with \type {\profiledbox}. There is some control
+possible but the options are not yet set in stone so we won't use them all here.
+Profiling can be turned on for the whole document with \type {\setprofile} but
+I'm sure that will seldom happen, and these examples show why: one cannot
+beforehand say if the result looks good. Let's now apply profiling to a real
+text. If you play with this yourself you can show profiles in gray with a
+tracker:
+
+\starttyping
+\enabletrackers[profiling.show]
+\stoptyping
+
+\newbox\myprofiledbox
+
+\startbuffer[raw-1]
+\profiledbox
+ [strict]
+ [distance=0pt]
+ {\nl\getbuffer[example-1]}
+\stopbuffer
+
+\startbuffer[raw-2]
+\profiledbox
+ [strict]
+ [distance=1pt]
+ {\nl\getbuffer[example-1]}
+\stopbuffer
+
+\startbuffer[raw-3]
+\profiledbox
+ [strict]
+ [height=2\strutht,
+ depth=2\strutdp,
+ distance=1pt]
+ {\nl\getbuffer[example-1]}
+\stopbuffer
+
+\startplacefigure[reference=fig:profiling:distances,title={Examples width different dimensions.}]
+ \enabletrackers[profiling.show]
+ \startcombination[nx=1,ny=3]
+ \startcontent
+ \setbox\myprofiledbox\rawbuffer{raw-1}
+ \xdef\LastProfiledHeight{\the\htdp\myprofiledbox}
+ \box\myprofiledbox
+ \stopcontent
+ \startcaption
+ zero distance, resulting height \LastProfiledHeight
+ \stopcaption
+ \startcontent
+ \setbox\myprofiledbox\rawbuffer{raw-2}
+ \xdef\LastProfiledHeight{\the\htdp\myprofiledbox}
+ \box\myprofiledbox
+ \stopcontent
+ \startcaption
+ distance, resulting height \LastProfiledHeight
+ \stopcaption
+ \startcontent
+ \setbox\myprofiledbox\rawbuffer{raw-3}
+ \xdef\LastProfiledHeight{\the\htdp\myprofiledbox}
+ \box\myprofiledbox
+ \stopcontent
+ \startcaption
+ distance, double height and depth, resulting height \LastProfiledHeight
+ \stopcaption
+ \stopcombination
+ \disabletrackers[profiling.show]
+\stopplacefigure
+
+We show the effects of setting distances in \in {figure}
+[fig:profiling:distances]. We start with a zero distance:
+
+\typebuffer[raw-1]
+
+Because we don't want lines to touch we then set the minimum distance to a
+reasonable value (1pt).
+
+\typebuffer[raw-2]
+
+Finally we also double the height and depth of lines, something that normally will
+not be done. The defaults are the standard height and depth (the ones you get
+when you inject a so-called \type{\strut}).
+
+\typebuffer[raw-3]
+
+The problem with this kind of analysis is that deciding when and how to use this
+information to improve spacing is non|-|trivial. One of the characteristics of
+user demand is that it nearly always concerns rather specific situations and that
+suggested solutions could work only in those cases. But as soon as we have one
+exceptional situation, intervention is needed which in turn means that a
+mechanism has to be under complete user control. That itself assumes that the
+user still has control, which is not the case in automated workflows. In fact, as
+soon as one is in control over the source and rendering, there are often easier
+ways to deal with the few cases that need treatment. Possible interference can
+come from, for instance:
+
+\startitemize[packed]
+\startitem whitespace between paragraphs \stopitem
+\startitem section titles (using different fonts and spacing) \stopitem
+\startitem descriptions and other intermezzos \stopitem
+\startitem images that interrupt the flow, or end up next to text \stopitem
+\startitem ornaments like margin words (we catch some) \stopitem
+\startitem text backgrounds making spacing assumptions \stopitem
+\stopitemize
+
+After a few decades of using \TEX\ and writing solutions, it has become pretty
+clear that fully automated typesetting is a dream, if only because the input can
+be pretty weird and inconsistent and demands (from those who are accustomed to
+tweaking manually in a desktop publishing application) can be pretty weird and
+inconsistent too. So, the only real solution is to use some kind of artificial
+intelligence that one can feed with demands and constraints and that hopefully is
+clever enough to deal with the inconsistencies. As this kind of computing is
+unlikely to happen in my lifetime, poor man explicit solutions have to do the job
+for now. One can add all kinds of heuristics to the profiler but this can
+backfire when control is needed. Alternatively one can end up with many options
+like we have in grid snapping.
+
+\stopsection
+
+\startsection[title=Where to use profiling]
+
+In \CONTEXT\ there are four places (maybe a few more eventually) where this kind
+of control over spacing makes sense:
+
+\startitemize[packed]
+\startitem the main text flow in single column mode \stopitem
+\startitem multi|-|column mode, especially mixed columns \stopitem
+\startitem framed texts, used for all kinds of content \stopitem
+\startitem explicitly (balanced) split boxes \stopitem
+\stopitemize
+
+Because framed texts are used all over, for instance in tables, it means that if
+we provide control over spacing using profiles, many \CONTEXT\ mechanisms can use
+it. However, enabling this for all packaging has a significant overhead so it has
+to be used with care so that there is no performance hit when it is not used.
+Here is an easy example using \type {\framed}:
+
+\starttyping
+\framed
+ [align=normal,
+ profile=fixed,
+ frame=off]
+ {some text ...}
+\stoptyping
+
+For the following examples we define this helper:
+
+\startbuffer
+\starttexdefinition demo-profile-1 #1
+ \framed
+ [align=normal,profile=#1]
+ {xxx$\frac{1}{\frac{1}{\frac{1}{2}}}$
+ \par
+ $\frac{\frac{1}{\frac{1}{2}}}{2}$xxx}
+\stoptexdefinition
+\stopbuffer
+
+\typebuffer \getbuffer
+
+We apply this to predefined profiles. The macro is called like this:
+
+\starttyping
+\texdefinition{demo-profile-1}{fixed}
+\stoptyping
+
+\starttexdefinition unexpanded ProfileSteps #1
+ \startcombination[nx=5,ny=1]
+ {#1\hbox to 6em{\hss\texdefinition{demo-profile-1} {}\hss}} {\small vbox}
+ {#1\hbox to 6em{\hss\texdefinition{demo-profile-1} {fixed}\hss}} {\small\type{fixed}}
+ {#1\hbox to 6em{\hss\texdefinition{demo-profile-1} {halffixed}\hss}} {\small\type{halffixed}}
+ {#1\hbox to 6em{\hss\texdefinition{demo-profile-1}{quarterfixed}\hss}} {\small\type{quarterfixed}}
+ {#1\hbox to 6em{\hss\texdefinition{demo-profile-1} {eightsfixed}\hss}} {\small\type{eightsfixed}}
+ \stopcombination
+\stoptexdefinition
+
+The outcome can depend on the font used: in \in {figure}
+[fig:profiling:profiles-fonts] we show Latin Modern, \TEX\ Gyre Pagella and
+Dejavu. Because in \CONTEXT\ the line height depends on the bodyfont; each case
+is different.
+
+\startplacefigure[reference=fig:profiling:profiles-fonts,title=A few fonts compared.]
+ \enabletrackers[profiling.show]
+ \startcombination[nx=1,ny=3]
+ \startcontent
+ \ProfileSteps{\switchtobodyfont[modern]}
+ \stopcontent
+ \startcaption
+ Latin Modern
+ \stopcaption
+ \startcontent
+ \ProfileSteps{\switchtobodyfont[pagella]}
+ \stopcontent
+ \startcaption
+ Pagella
+ \stopcaption
+ \startcontent
+ \ProfileSteps{\switchtobodyfont[dejavu]}
+ \stopcontent
+ \startcaption
+ Dejavu
+ \stopcaption
+ \stopcombination
+ \disabletrackers[profiling.show]
+\stopplacefigure
+
+\startplacefigure[reference=fig:profiling:profiles-boxedcolumns,title={Boxed columns without profile.}]
+ \enabletrackers[profiling.show]
+ \startcombination[nx=1,ny=3]
+ \startcontent
+ \startboxedcolumns[distance=2.2em,grid=yes,profile=none,frame=on]
+ \nl\getbuffer[example-1]
+ \stopboxedcolumns
+ \stopcontent
+ \startcaption
+ none on grid
+ \stopcaption
+ \startcontent
+ \startboxedcolumns[distance=2.2em,grid=yes,profile=strict,frame=on]
+ \nl\getbuffer[example-1]
+ \stopboxedcolumns
+ \stopcontent
+ \startcaption
+ strict on grid
+ \stopcaption
+ \startcontent
+ \startboxedcolumns[distance=2.2em,grid=yes,profile=fixed,frame=on]
+ \nl\getbuffer[example-1]
+ \stopboxedcolumns
+ \stopcontent
+ \startcaption
+ fixed on grid
+ \stopcaption
+ \stopcombination
+ \disabletrackers[profiling.show]
+\stopplacefigure
+
+As mentioned, we need this kind of profiling in multi|-|column typesetting, so
+let us have a look at that now. Columns are processed in grid mode but this is
+taken into account. We can simulate this by using boxed columns; see \in {figure}
+[fig:profiling:profiles-boxedcolumns]. One of the biggest problems is what to do
+with the bottom and top of a page or column. This will probably take a bit more
+to get right, and likely we will end up with different strategies. We can also
+think of special handlers but that will come with a high speed penalty. In the
+\type {strict} variant we don't mess with the dimension of a line too much, but
+the \type {fixed} alternative will get some more control.
+
+Although using this feature looks promising it is also dangerous. For instance a
+side effect can be that interline spacing becomes inconsistent and even ugly. It
+really depends on the content. Also, as soon as some grid snapping is used, the
+gain becomes less, simply because the solution space is smaller. Then of course
+there is the matter of overall look and feel: most documents that need this kind
+of magic look bad anyway, so why bother. In this respect it is comparable to
+applying protrusion and expansion. There are hardly any combinations of design
+and content where micro|-|typography makes sense to use: in prose perhaps, but
+not in mixed content. On the other hand, profiling makes more sense in mixed
+content than in prose.
+
+Not everything that is possible should be used. In \in {figure}
+[fig:profiling:fake-examples-1] we show some fake paragraphs with profiles
+applied, the first series (random range~2) has a few excessive snippets, the last
+one (random range~5) has many. In \in {figure} [fig:profiling:fake-examples-2] we
+show them in a different arrangement. Although there are differences it is hard
+to say if the results look better. We scaled down the results and used gray fake
+blurs instead of real text in order to get a better impression of the so-called
+(overall) grayness of a text.
+
+% \starttexdefinition profile-sample-set #1#2#3
+% \startuseMPgraphic{random-thing}
+% if round(uniformdeviate(10)) = 5 :
+% fill unitsquare enlarged ((1mm,#2mm) randomized(1mm,#1mm)) withcolor \MPcolor{#3} ;
+% else :
+% fill unitsquare enlarged ((1mm,1mm) randomized(1mm,1mm)) withcolor \MPcolor{darkgray} ;
+% fi ;
+% draw origin withpen pencircle scaled 1mm ;
+% \stopuseMPgraphic
+% \setbox#1\hbox\bgroup
+% \dorecurse {500} {%
+% \dontleavehmode
+% \bgroup
+% \obeyMPboxdepth
+% \useMPgraphic{random-thing}%
+% \egroup
+% \hskip 3mm plus 3mm minus 1mm\relax
+% }%
+% \egroup
+% \stoptexdefinition
+
+% \starttexdefinition profile-sample-get #1#2
+% \scale
+% [width=\dimexpr(\textwidth-2em)/4\relax]
+% {\framed
+% [offset=overlay,align=normal,profile=#2]
+% {\unhcopy#1}}
+% \stoptexdefinition
+
+% \texdefinition{profile-sample-set}{0}{2}{darkred}
+% \texdefinition{profile-sample-set}{2}{3}{darkgreen}
+% \texdefinition{profile-sample-set}{4}{4}{darkblue}
+% \texdefinition{profile-sample-set}{6}{5}{darkyellow}
+
+\startMPdefinitions
+ color FakeRed ; FakeRed := \MPcolor{darkred} ;
+ color FakeGreen ; FakeGreen := \MPcolor{darkgreen} ;
+ color FakeBlue ; FakeBlue := \MPcolor{darkblue} ;
+ color FakeYellow ; FakeYellow := \MPcolor{darkyellow} ;
+ color FakeGray ; FakeGray := \MPcolor{darkgray} ;
+ def FakeInColor(expr h,c) =
+ if round(uniformdeviate(10)) = 5 :
+ fill unitsquare enlarged ((1mm,h*mm) randomized(1mm,h*mm)) withcolor c ;
+ else :
+ fill unitsquare enlarged ((1mm,1 mm) randomized(1mm,1 mm)) withcolor FakeGray ;
+ fi ;
+ draw origin withpen pencircle scaled 1mm ;
+ enddef ;
+\stopMPdefinitions
+
+\starttexdefinition profile-sample-set #1#2#3
+ \setbox#1\hbox\bgroup
+ \dorecurse {500} {%
+ \dontleavehmode
+ \bgroup
+ \obeyMPboxdepth
+ \startMPcode FakeInColor(#2,#3)\stopMPcode
+ \egroup
+ \hskip 3mm plus 3mm minus 1mm\relax
+ }%
+ \egroup
+\stoptexdefinition
+
+\starttexdefinition profile-sample-get #1#2
+ \scale
+ [width=\dimexpr(\textwidth-2em)/4\relax]
+ {\framed
+ [offset=overlay,align=normal,profile=#2]
+ {\unhcopy#1}}
+\stoptexdefinition
+
+\texdefinition{profile-sample-set}{0}{2}{FakeRed}
+\texdefinition{profile-sample-set}{2}{3}{FakeGreen}
+\texdefinition{profile-sample-set}{4}{4}{FakeBlue}
+\texdefinition{profile-sample-set}{6}{5}{FakeYellow}
+
+\startplacefigure
+ [reference=fig:profiling:fake-examples-1,
+ title={Some examples, each row has progressively more excessive snippets.}]
+ \startcombination[location=top,nx=4,ny=4]
+ {\texdefinition{profile-sample-get}{0}{none}} {\tttf none / 2}
+ {\texdefinition{profile-sample-get}{0}{strict}} {\tttf strict / 2}
+ {\texdefinition{profile-sample-get}{0}{fixed}} {\tttf fixed / 2}
+ {\texdefinition{profile-sample-get}{0}{halffixed}} {\tttf halffixed / 2}
+ {\texdefinition{profile-sample-get}{2}{none}} {\tttf none / 3}
+ {\texdefinition{profile-sample-get}{2}{strict}} {\tttf strict / 3}
+ {\texdefinition{profile-sample-get}{2}{fixed}} {\tttf fixed / 3}
+ {\texdefinition{profile-sample-get}{2}{halffixed}} {\tttf halffixed / 3}
+ {\texdefinition{profile-sample-get}{4}{none}} {\tttf none / 4}
+ {\texdefinition{profile-sample-get}{4}{strict}} {\tttf strict / 4}
+ {\texdefinition{profile-sample-get}{4}{fixed}} {\tttf fixed / 4}
+ {\texdefinition{profile-sample-get}{4}{halffixed}} {\tttf halffixed / 4}
+ {\texdefinition{profile-sample-get}{6}{none}} {\tttf none / 5}
+ {\texdefinition{profile-sample-get}{6}{strict}} {\tttf strict / 5}
+ {\texdefinition{profile-sample-get}{6}{fixed}} {\tttf fixed / 5}
+ {\texdefinition{profile-sample-get}{6}{halffixed}} {\tttf halffixed / 5}
+ \stopcombination
+\stopplacefigure
+
+\startplacefigure
+ [reference=fig:profiling:fake-examples-2,
+ title={The same examples, rearranged such that each row has a different profiling variant.}]
+ \startcombination[location=top,nx=4,ny=4]
+ {\texdefinition{profile-sample-get}{0}{none}} {\tttf none / 2}
+ {\texdefinition{profile-sample-get}{2}{none}} {\tttf none / 3}
+ {\texdefinition{profile-sample-get}{4}{none}} {\tttf none / 4}
+ {\texdefinition{profile-sample-get}{6}{none}} {\tttf none / 5}
+ {\texdefinition{profile-sample-get}{0}{strict}} {\tttf strict / 2}
+ {\texdefinition{profile-sample-get}{2}{strict}} {\tttf strict / 3}
+ {\texdefinition{profile-sample-get}{4}{strict}} {\tttf strict / 4}
+ {\texdefinition{profile-sample-get}{6}{strict}} {\tttf strict / 5}
+ {\texdefinition{profile-sample-get}{0}{fixed}} {\tttf fixed / 2}
+ {\texdefinition{profile-sample-get}{2}{fixed}} {\tttf fixed / 3}
+ {\texdefinition{profile-sample-get}{4}{fixed}} {\tttf fixed / 4}
+ {\texdefinition{profile-sample-get}{6}{fixed}} {\tttf fixed / 5}
+ {\texdefinition{profile-sample-get}{0}{halffixed}} {\tttf halffixed / 2}
+ {\texdefinition{profile-sample-get}{2}{halffixed}} {\tttf halffixed / 3}
+ {\texdefinition{profile-sample-get}{4}{halffixed}} {\tttf halffixed / 4}
+ {\texdefinition{profile-sample-get}{6}{halffixed}} {\tttf halffixed / 5}
+ \stopcombination
+\stopplacefigure
+
+\stopsection
+
+\startsection[title=Conclusion]
+
+Although profiling seems interesting, in practice it does not have much value in
+an automated flow. Ultimately, in the project for which I investigated this
+trickery, only in the final stage was some last minute optimization of the
+rendering done. We did that by injecting directives. Think of page breaks that
+make the result look more balanced. Optimizing image placement happens in an
+earlier stage because the text can refer to images like \quotation {in the
+picture on the left, we see \unknown}. Controlling profiles is much harder. In
+fact, the more clever we are, the harder it gets to beat it when we want an
+exception. All these mechanisms: spacing, snapping, profiling, breaking pages,
+image placement, to mention a few, have to work together. For projects that
+depend on such placement, it might be better to write dedicated mechanisms than
+to try to fight with clever built|-|in features.
+
+In practice, probably only the \type {fixed} alternative makes sense and as that
+one has a boundary condition similar to (or equal, depending on other settings)
+snapping on gridsteps, the end result might not be that different from doing
+nothing. In \in {figure} [fig:profiling:fake-examples-3] you see that the vbox
+variant is not that bad. And extremely difficult content is unlikely to ever look
+perfect unless some manual intervention happens. Therefore, from the perspective
+of \quotation {fine points of text typesetting} some local (manual) control might
+be more interesting and relevant.
+
+\texdefinition{profile-sample-set}{0}{3}{FakeGreen}
+\texdefinition{profile-sample-set}{2}{3}{FakeGreen}
+\texdefinition{profile-sample-set}{4}{3}{FakeGreen}
+
+In the end, I didn't need this profiling feature at all: because there are
+expectations with respect to how many pages a book should have, typesetting in
+columns was not needed. It didn't save that many pages, and the result would
+never look that much better, simply because of the type of content. Large images
+were also spoiling the game. Nevertheless we will keep profiles in the core and
+it might even get extended. One question remains: at what point do we stop adding
+such features? The answer would be easier if \TEX\ wasn't so flexible.
+
+\startplacefigure[location=top,reference=fig:profiling:fake-examples-3,title=Three similar random cases.]
+ \startcombination[location=top,nx=3,ny=3]
+ {\texdefinition{profile-sample-get}{0}{}} {\tttf vbox 1}
+ {\texdefinition{profile-sample-get}{0}{strict}} {\tttf strict 1}
+ {\texdefinition{profile-sample-get}{0}{fixed}} {\tttf fixed 1}
+ {\texdefinition{profile-sample-get}{2}{}} {\tttf vbox 2}
+ {\texdefinition{profile-sample-get}{2}{strict}} {\tttf strict 2}
+ {\texdefinition{profile-sample-get}{2}{fixed}} {\tttf fixed 2}
+ {\texdefinition{profile-sample-get}{4}{}} {\tttf vbox 3}
+ {\texdefinition{profile-sample-get}{4}{strict}} {\tttf strict 3}
+ {\texdefinition{profile-sample-get}{4}{fixed}} {\tttf fixed 3}
+ \stopcombination
+\stopplacefigure
+
+\stopsection
+
+\stopchapter
+
+\page \enabledirectives[visualizers.fraction=default]
+
+\stopcomponent
+
diff --git a/doc/context/sources/general/manuals/still/still-simple.tex b/doc/context/sources/general/manuals/still/still-simple.tex
new file mode 100644
index 000000000..9416dd028
--- /dev/null
+++ b/doc/context/sources/general/manuals/still/still-simple.tex
@@ -0,0 +1,330 @@
+% language=uk
+
+\environment still-environment
+
+\startcomponent still-simple
+
+\startchapter[title=Removing something (typeset)]
+
+\startsection[title=Introduction]
+
+The primitive \type {\unskip} often comes in handy when you want to remove a
+space (or more precisely: a glue item) but sometimes you want to remove more.
+Consider for instance the case where a sentence is built up stepwise from data.
+At some point you need to insert some punctuation but as you cannot look ahead it
+needs to be delayed. Keeping track of accumulated content is no fun, and a quick
+and dirty solution is to just inject it and remove it when needed. One way to
+achieve this is to wrap this optional content in a box with special dimensions.
+Just before the next snippet is injected we can look back for that box (that can
+then be recognized by those special dimensions) and either remove it or unbox it
+back into the stream.
+
+To be honest, one seldom needs this feature. In fact I never needed it until
+Alan Braslau and I were messing around with (indeed messy) bibliographic
+rendering and we thought it would be handy to have a helper that could remove
+punctuation. Think of situations like this:
+
+\starttyping
+John Foo, Mary Bar and others.
+John Foo, Mary Bar, and others.
+\stoptyping
+
+One can imagine this list to be constructed programmatically, in which case the
+comma before the \type {and} can be superfluous. So, the \type {and others} can
+be done like this:
+
+\startbuffer
+\def\InjectOthers
+ {\removeunwantedspaces
+ \removepunctuation
+ \space and others}
+
+John Foo, Mary Bar, \InjectOthers.
+\stopbuffer
+
+\typebuffer
+
+Notice that we first remove spaces. This will give:
+
+\blank {\bf \getbuffer} \blank
+
+where the commas after the names are coming from some not|-|too|-|clever automatism
+or are the side effect of lazy programming. In the sections below I will describe
+a bit more generic mechanism and also present a solution for non|-|\CONTEXT\ users.
+
+\stopsection
+
+\startsection[title=Marked content]
+
+The example above can be rewritten in a more general way. We define a
+couple macros (using \CONTEXT\ functionality):
+
+\startbuffer
+\def\InjectComma
+ {\markcontent
+ [punctuation]
+ {\removeunwantedspaces,\space}}
+
+\def\InjectOthers
+ {\removemarkedcontent[punctuation]%
+ \space and others}
+\stopbuffer
+
+\typebuffer \getbuffer
+
+These can be used as:
+
+\startbuffer
+John Foo\InjectComma Mary Bar\InjectComma \InjectOthers.
+\stopbuffer
+
+\typebuffer
+
+Which gives us:
+
+\blank {\bf \getbuffer} \blank
+
+Normally one doesn't need this kind of magic for lists because the length of the
+list is known and injection can be done using the index in the list. Here is a more
+practical example:
+
+\startbuffer
+\def\SomeTitle {Just a title}
+\def\SomeAuthor{Just an author}
+\def\SomeYear {2015}
+\stopbuffer
+
+\typebuffer \getbuffer
+
+We paste the three snippets together:
+
+\startbuffer
+\SomeTitle,\space \SomeAuthor\space (\SomeYear).
+\stopbuffer
+
+\typebuffer \blank {\bf \getbuffer} \blank
+
+But to get even more abstract, we can do this:
+
+\startbuffer
+\def\PlaceTitle
+ {\SomeTitle
+ \markcontent[punctuation]{.}}
+
+\def\PlaceAuthor
+ {\removemarkedcontent[punctuation]%
+ \markcontent[punctuation]{,\space}%
+ \SomeAuthor
+ \markcontent[punctuation]{,\space}}
+
+\def\PlaceYear
+ {\removemarkedcontent[punctuation]%
+ \space(\SomeYear)%
+ \markcontent[punctuation]{.}}
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Used as:
+
+\startbuffer
+\PlaceTitle\PlaceAuthor\PlaceYear
+\stopbuffer
+
+\typebuffer
+
+we get the output:
+
+\blank {\bf \getbuffer} \blank
+
+but when we have no author,
+
+\startbuffer
+\def\SomeAuthor{}
+
+\PlaceTitle\PlaceAuthor\PlaceYear
+\stopbuffer
+
+\typebuffer
+
+Now we get:
+
+\blank {\bf \getbuffer} \blank
+
+Even more clever is this:
+
+\def\PlaceYear
+ {\removemarkedcontent[punctuation]%
+ \markcontent[punctuation]{\space(\SomeYear).}}
+
+\startbuffer
+\def\SomeAuthor{}
+\def\SomeYear{}
+\def\SomePeriod{\removemarkedcontent[punctuation].}
+
+\PlaceTitle\PlaceAuthor\PlaceYear\SomePeriod
+\stopbuffer
+
+\typebuffer
+
+The output is:
+
+\blank {\bf \getbuffer} \blank
+
+Of course we can just test for a variable like \type {\SomeAuthor} being empty
+before we place punctuation, but there are cases where a period becomes a comma
+or a comma becomes a semicolon. Especially with bibliographies your worst
+typographical nightmares come true, so it is handy to have such a mechanism
+available when it's needed.
+
+\stopsection
+
+\startsection[title=A plain solution]
+
+For users of \LUATEX\ who don't want to use \CONTEXT\ I will now present an
+alternative implementation. Of course more clever variants are possible but the
+principle remains. The trick is simple enough to show here as an example of \LUA\
+coding as it doesn't need much help from the infrastructure that the macro
+package provides. The only pitfall is the used signal (attribute number) but you
+can set another one if needed. We use the \type {gadgets} namespace to isolate
+the code.
+
+\startbuffer
+\directlua {
+ gadgets = gadgets or { }
+ local marking = { }
+ gadgets.marking = marking
+
+ local marksignal = 5001
+ 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
+}
+\stopbuffer
+\stopluacode
+
+\typebuffer \getbuffer
+
+These functions are called from macros. We use symbolic names for the marked
+snippets. We could have used numbers but meaningful tags can be supported with
+negligible overhead. The remover starts at the end of the current list and
+goes backwards till no matching attribute value is seen. When a valid range is
+found it gets removed.
+
+\startbuffer
+\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")}}
+\stopbuffer
+
+\typebuffer \getbuffer
+
+The working of these macros can best be shown from a few examples:
+
+\startbuffer
+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
+\stopbuffer
+
+\typebuffer
+
+This renders as: \blank \startlines\bf\getbuffer\stoplines
+
+The remover needs to look at the beginning of a paragraph marked by a local par
+whatsit. If we removed that, \LUATEX\ would crash because the list head
+(currently) cannot be set to nil. This is no big deal because this macro is not
+meant to clean up across paragraphs.
+
+A close look at the definition of \type {\marksomething} will reveal
+an extra grouping in the definition. This is needed to make content that uses
+\type {\aftergroup} trickery work correctly. Here is another example:
+
+\startbuffer
+\def\SnippetOne {first\marksomething{punctuation}{, }}
+\def\SnippetTwo {second\marksomething{punctuation}{, }}
+\def\SnippetThree{\unsomething{punctuation} and third.}
+\stopbuffer
+
+\typebuffer \getbuffer
+
+We can paste these snippets together and make the last one use \type {and}
+instead of a comma.
+
+\startbuffer
+\SnippetOne \SnippetTwo \SnippetThree\par
+\SnippetOne \SnippetThree\par
+\stopbuffer
+
+\typebuffer
+
+We get: \blank {\bf \getbuffer} \blank
+
+Of course in practice one probably knows how many snippets there are and using a
+counter to keep track of the state is more efficient than first typesetting
+something and removing it afterwards. But still it looks like a cool feature and
+it can come in handy at some point, as with the title|-|author|-|year example given
+before.
+
+The plain code shown here is in the distribution in the file \type
+{luatex-gadgets} and gets preloaded in the \type {luatex-plain} format.
+
+\stopsection
+
+\stopchapter
diff --git a/doc/context/sources/general/manuals/still/still-sumatra-math.png b/doc/context/sources/general/manuals/still/still-sumatra-math.png
new file mode 100644
index 000000000..0eb1417dc
--- /dev/null
+++ b/doc/context/sources/general/manuals/still/still-sumatra-math.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/still/still-sumatra-text.png b/doc/context/sources/general/manuals/still/still-sumatra-text.png
new file mode 100644
index 000000000..191c1a0ef
--- /dev/null
+++ b/doc/context/sources/general/manuals/still/still-sumatra-text.png
Binary files differ
diff --git a/doc/context/sources/general/manuals/still/still-titlepage.tex b/doc/context/sources/general/manuals/still/still-titlepage.tex
new file mode 100644
index 000000000..3d7c9a928
--- /dev/null
+++ b/doc/context/sources/general/manuals/still/still-titlepage.tex
@@ -0,0 +1,38 @@
+\startcomponent still-titlepage
+
+\startMPpage
+
+ picture p ; p := image (
+ numeric i ; i := 1cm ;
+ numeric j ; j := 1cm ;
+ forever :
+ j := 1.1 * j ;
+ i := 1cm ;
+ forever :
+ i := 1.1 * i ;
+ draw (i,j) withpen pencircle xscaled (i/10) yscaled (j/10) withcolor .5white ; % withtransparency (1,.5) ;
+ if i > 21cm : break fi ;
+ endfor ;
+ if j > 30cm : break fi ;
+ endfor ;
+ ) ;
+
+ p := p xysized(PaperWidth,PaperHeight) ;
+
+ fill boundingbox p withcolor "maincolor" ;
+
+ draw p ;
+
+ currentpicture := currentpicture shifted - llcorner currentpicture ;
+
+ draw textext.llft("Still") xsized .75PaperWidth shifted (.95PaperWidth,.950PaperHeight) withcolor white ;
+ draw textext.llft("going on") xsized .50PaperWidth shifted (.95PaperWidth,.725PaperHeight) withcolor white ;
+ draw textext.llft("Hans Hagen") xsized .50PaperWidth shifted (.95PaperWidth,.125PaperHeight) withcolor white ;
+
+ setbounds currentpicture to Page ;
+
+\stopMPpage
+
+\page[empty] \setupcounter[userpage][start=1]
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/still/still-tokens.tex b/doc/context/sources/general/manuals/still/still-tokens.tex
new file mode 100644
index 000000000..34784cdf3
--- /dev/null
+++ b/doc/context/sources/general/manuals/still/still-tokens.tex
@@ -0,0 +1,903 @@
+% language=uk
+
+\environment still-environment
+
+\starttext
+
+\startchapter[title=Scanning input]
+
+\startsection[title=Introduction]
+
+Tokens are the building blocks of the input for \TEX\ and they drive the process
+of expansion which in turn results in typesetting. If you want to manipulate the
+input, intercepting tokens is one approach. Other solutions are preprocessing or
+writing macros that do something with their picked|-|up arguments. In \CONTEXT\
+\MKIV\ we often forget about manipulating the input but manipulate the
+intermediate typesetting results instead. The advantage is that only at that
+moment do you know what you're truly dealing with, but a disadvantage is that
+parsing the so-called node lists is not always efficient and it can even be
+rather complex, for instance in math. It remains a fact that until \LUATEX\
+version 0.80 \CONTEXT\ hardly used the token interface.
+
+In version 0.80 a new scanner interface was introduced, demonstrated by Taco
+Hoekwater at the \CONTEXT\ conference 2014. Luigi Scarso and I integrated that
+code and I added a few more functions. Eventually the team will kick out the old
+token library and overhaul the input|-|related code in \LUATEX, because no
+callback is needed any more (and also because the current code still has traces
+of multiple \LUA\ instances). This will happen stepwise to give users who use the
+old mechanism an opportunity to adapt.
+
+Here I will show a bit of the new token scanners and explain how they can be used
+in \CONTEXT. Some of the additional scanners written on top of the built|-|in ones
+will probably end up in the generic \LUATEX\ code that ships with \CONTEXT.
+
+\stopsection
+
+\startsection[title=The \TEX\ scanner]
+
+The new token scanner library of \LUATEX\ provides a way to hook \LUA\ into \TEX\
+in a rather natural way. I have to admit that I never had any real demand for
+such a feature but now that we have it, it is worth exploring.
+
+The \TEX\ scanner roughly provides the following sub-scanners that are used to
+implement primitives: keyword, token, token list, dimension, glue and integer.
+Deep down there are specific variants for scanning, for instance, font dimensions
+and special numbers.
+
+A token is a unit of input, and one or more characters are turned into a token.
+How a character is interpreted is determined by its current catcode. For instance
+a backslash is normally tagged as `escape character' which means that it starts a
+control sequence: a macro name or primitive. This means that once it is scanned a
+macro name travels as one token through the system. Take this:
+
+\starttyping
+\def\foo#1{\scratchcounter=123#1\relax}
+\stoptyping
+
+Here \TEX\ scans \type {\def} and turns it into a token. This particular token
+triggers a specific branch in the scanner. First a name is scanned with
+optionally an argument specification. Then the body is scanned and the macro is
+stored in memory. Because \type {\scratchcounter}, \type
+{\relax} and \type {#1} are
+turned into tokens, this body has 7~tokens.
+
+When the macro \type {\foo} is referenced the body gets expanded which here means
+that the scanner will scan for an argument first and uses that in the
+replacement. So, the scanner switches between different states. Sometimes tokens
+are just collected and stored, in other cases they get expanded immediately into
+some action.
+
+\stopsection
+
+\startsection[title=Scanning from \LUA]
+
+The basic building blocks of the scanner are available at the \LUA\ end, for
+instance:
+
+\starttyping
+\directlua{print(token.scan_int())} 123
+\stoptyping
+
+This will print \type {123} to the console. Or, you can store the number and
+use it later:
+
+\starttyping
+\directlua{SavedNumber = token.scan_int())} 123
+
+We saved: \directlua{tex.print(SavedNumber)}
+\stoptyping
+
+The number of scanner functions is (on purpose) limited but you can use them to
+write additional ones as you can just grab tokens, interpret them and act
+accordingly.
+
+The \type {scan_int} function picks up a number. This can also be a counter, a
+named (math) character or a numeric expression. In \TEX, numbers are integers;
+floating|-|point is not supported naturally. With \type {scan_dimen} a dimension
+is grabbed, where a dimen is either a number (float) followed by a unit, a dimen
+register or a dimen expression (internally, all become integers). Of course
+internal quantities are also okay. There are two optional arguments, the first
+indicating that we accept a filler as unit, while the second indicates that math
+units are expected. When an integer or dimension is scanned, tokens are expanded
+till the input is a valid number or dimension. The \type {scan_glue} function
+takes one optional argument: a boolean indicating if the units are math.
+
+The \type {scan_toks} function picks up a (normally) brace|-|delimited sequence of
+tokens and (\LUATEX\ 0.80) returns them as a table of tokens. The function \type
+{get_token} returns one (unexpanded) token while \type {scan_token} returns
+an expanded one.
+
+Because strings are natural to \LUA\ we also have \type {scan_string}. This one
+converts a following brace|-|delimited sequence of tokens into a proper string.
+
+The function \type {scan_keyword} looks for the given keyword and when found skips
+over it and returns \type {true}. Here is an example of usage: \footnote {In
+\LUATEX\ 0.80 you should use \type {newtoken} instead of \type {token}.}
+
+\starttyping
+function ScanPair()
+ local one = 0
+ local two = ""
+ while true do
+ if token.scan_keyword("one") then
+ one = token.scan_int()
+ elseif token.scan_keyword("two") then
+ two = token.scan_string()
+ else
+ break
+ end
+ end
+ tex.print("one: ",one,"\\par")
+ tex.print("two: ",two,"\\par")
+end
+\stoptyping
+
+This can be used as:
+
+\starttyping
+\directlua{ScanPair()}
+\stoptyping
+
+You can scan for an explicit character (class) with \type {scan_code}. This
+function takes a positive number as argument and returns a character or \type
+{nil}.
+
+\starttabulate[|r|r|l|]
+\NC \cldcontext{tokens.bits.escape } \NC 0 \NC \type{escape} \NC \NR
+\NC \cldcontext{tokens.bits.begingroup } \NC 1 \NC \type{begingroup} \NC \NR
+\NC \cldcontext{tokens.bits.endgroup } \NC 2 \NC \type{endgroup} \NC \NR
+\NC \cldcontext{tokens.bits.mathshift } \NC 3 \NC \type{mathshift} \NC \NR
+\NC \cldcontext{tokens.bits.alignment } \NC 4 \NC \type{alignment} \NC \NR
+\NC \cldcontext{tokens.bits.endofline } \NC 5 \NC \type{endofline} \NC \NR
+\NC \cldcontext{tokens.bits.parameter } \NC 6 \NC \type{parameter} \NC \NR
+\NC \cldcontext{tokens.bits.superscript} \NC 7 \NC \type{superscript} \NC \NR
+\NC \cldcontext{tokens.bits.subscript } \NC 8 \NC \type{subscript} \NC \NR
+\NC \cldcontext{tokens.bits.ignore } \NC 9 \NC \type{ignore} \NC \NR
+\NC \cldcontext{tokens.bits.space } \NC 10 \NC \type{space} \NC \NR
+\NC \cldcontext{tokens.bits.letter } \NC 11 \NC \type{letter} \NC \NR
+\NC \cldcontext{tokens.bits.other } \NC 12 \NC \type{other} \NC \NR
+\NC \cldcontext{tokens.bits.active } \NC 13 \NC \type{active} \NC \NR
+\NC \cldcontext{tokens.bits.comment } \NC 14 \NC \type{comment} \NC \NR
+\NC \cldcontext{tokens.bits.invalid } \NC 15 \NC \type{invalid} \NC \NR
+\stoptabulate
+
+So, if you want to grab the character you can say:
+
+\starttyping
+local c = token.scan_code(2^10 + 2^11 + 2^12)
+\stoptyping
+
+In \CONTEXT\ you can say:
+
+\starttyping
+local c = tokens.scanners.code(
+ tokens.bits.space +
+ tokens.bits.letter +
+ tokens.bits.other
+)
+\stoptyping
+
+When no argument is given, the next character with catcode letter or other is
+returned (if found).
+
+In \CONTEXT\ we use the \type {tokens} namespace which has additional scanners
+available. That way we can remain compatible. I can add more scanners when
+needed, although it is not expected that users will use this mechanism directly.
+
+\starttabulate[||||]
+\NC \type {(new)token} \NC \type {tokens} \NC arguments \NC \NR
+\HL
+\NC \NC \type {scanners.boolean} \NC \NC \NR
+\NC \type {scan_code} \NC \type {scanners.code} \NC \type {(bits)} \NC \NR
+\NC \type {scan_dimen} \NC \type {scanners.dimension} \NC \type {(fill,math)} \NC \NR
+\NC \type {scan_glue} \NC \type {scanners.glue} \NC \type {(math)} \NC \NR
+\NC \type {scan_int} \NC \type {scanners.integer} \NC \NC \NR
+\NC \type {scan_keyword} \NC \type {scanners.keyword} \NC \NC \NR
+\NC \NC \type {scanners.number} \NC \NC \NR
+\NC \type {scan_token} \NC \type {scanners.token} \NC \NC \NR
+\NC \type {scan_tokens} \NC \type {scanners.tokens} \NC \NC \NR
+\NC \type {scan_string} \NC \type {scanners.string} \NC \NC \NR
+\NC \type {scan_word} \NC \type {scanners.word} \NC \NC \NR
+\NC \type {get_token} \NC \type {getters.token} \NC \NC \NR
+\NC \type {set_macro} \NC \type {setters.macro} \NC \type {(catcodes,cs,str,global)} \NC \NR
+\stoptabulate
+
+All except \type {get_token} (or its alias \type {getters.token}) expand tokens
+in order to satisfy the demands.
+
+Here are some examples of how we can use the scanners. When we would call
+\type {Foo} with regular arguments we do this:
+
+\starttyping
+\def\foo#1{%
+ \directlua {
+ Foo("whatever","#1",{n = 1})
+ }
+}
+\stoptyping
+
+but when \type {Foo} uses the scanners it becomes:
+
+\starttyping
+\def\foo#1{%
+ \directlua{Foo()} {whatever} {#1} n {1}\relax
+}
+\stoptyping
+
+In the first case we have a function \type {Foo} like this:
+
+\starttyping
+function Foo(what,str,n)
+ --
+ -- do something with these three parameters
+ --
+end
+\stoptyping
+
+and in the second variant we have (using the \type {tokens} namespace):
+
+\starttyping
+function Foo()
+ local what = tokens.scanners.string()
+ local str = tokens.scanners.string()
+ local n = tokens.scanners.keyword("n") and
+ tokens.scanners.integer() or 0
+ --
+ -- do something with these three parameters
+ --
+end
+\stoptyping
+
+The string scanned is kind of special as the result depends ok what is seen.
+Given the following definition:
+
+\startbuffer
+ \def\bar {bar}
+\unexpanded\def\ubar {ubar} % \protected in plain etc
+ \def\foo {foo-\bar-\ubar}
+ \def\wrap {{foo-\bar}}
+ \def\uwrap{{foo-\ubar}}
+\stopbuffer
+
+\typebuffer
+
+\getbuffer
+
+We get:
+
+\def\TokTest{\ctxlua{
+ local s = tokens.scanners.string()
+ context("\\bgroup\\red\\tt")
+ context.verbatim(s)
+ context("\\egroup")
+}}
+
+\starttabulate[|l|Tl|]
+\NC \type{{foo}} \NC \TokTest {foo} \NC \NR
+\NC \type{{foo-\bar}} \NC \TokTest {foo-\bar} \NC \NR
+\NC \type{{foo-\ubar}} \NC \TokTest {foo-\ubar} \NC \NR
+\NC \type{foo-\bar} \NC \TokTest foo-\bar \NC \NR
+\NC \type{foo-\ubar} \NC \TokTest foo-\ubar \NC \NR
+\NC \type{foo$bar$} \NC \TokTest foo$bar$ \NC \NR
+\NC \type{\foo} \NC \TokTest \foo \NC \NR
+\NC \type{\wrap} \NC \TokTest \wrap \NC \NR
+\NC \type{\uwrap} \NC \TokTest \uwrap \NC \NR
+\stoptabulate
+
+Because scanners look ahead the following happens: when an open brace is seen (or
+any character marked as left brace) the scanner picks up tokens and expands them
+unless they are protected; so, effectively, it scans as if the body of an \type
+{\edef} is scanned. However, when the next token is a control sequence it will be
+expanded first to see if there is a left brace, so there we get the full
+expansion. In practice this is convenient behaviour because the braced variant
+permits us to pick up meanings honouring protection. Of course this is all a side
+effect of how \TEX\ scans.\footnote {This lookahead expansion can sometimes give
+unexpected side effects because often \TEX\ pushes back a token when a condition
+is not met. For instance when it scans a number, scanning stops when no digits
+are seen but the scanner has to look at the next (expanded) token in order to
+come to that conclusion. In the process it will, for instance, expand
+conditionals. This means that intermediate catcode changes will not be effective
+(or applied) to already-seen tokens that were pushed back into the input. This
+also happens with, for instance, \cs {futurelet}.}
+
+With the braced variant one can of course use primitives like \type {\detokenize}
+and \type {\unexpanded} (in \CONTEXT: \type {\normalunexpanded}, as we already
+had this mechanism before it was added to the engine).
+
+\stopsection
+
+\startsection[title=Considerations]
+
+Performance|-|wise there is not much difference between these methods. With some
+effort you can make the second approach faster than the first but in practice you
+will not notice much gain. So, the main motivation for using the scanner is that
+it provides a more \TEX|-|ified interface. When playing with the initial version
+of the scanners I did some tests with performance|-|sensitive \CONTEXT\ calls and
+the difference was measurable (positive) but deciding if and when to use the
+scanner approach was not easy. Sometimes embedded \LUA\ code looks better, and
+sometimes \TEX\ code. Eventually we will end up with a mix. Here are some
+considerations:
+
+\startitemize
+\startitem
+ In both cases there is the overhead of a \LUA\ call.
+\stopitem
+\startitem
+ In the pure \LUA\ case the whole argument is tokenized by \TEX\ and then
+ converted to a string that gets compiled by \LUA\ and executed.
+\stopitem
+\startitem
+ When the scan happens in \LUA\ there are extra calls to functions but
+ scanning still happens in \TEX; some token to string conversion is avoided
+ and compilation can be more efficient.
+\stopitem
+\startitem
+ When data comes from external files, parsing with \LUA\ is in most cases more
+ efficient than parsing by \TEX .
+\stopitem
+\startitem
+ A macro package like \CONTEXT\ wraps functionality in macros and is
+ controlled by key|/|value specifications. There is often no benefit in terms
+ of performance when delegating to the mentioned scanners.
+\stopitem
+\stopitemize
+
+Another consideration is that when using macros, parameters are often passed
+between \type {{}}:
+
+\starttyping
+\def\foo#1#2#3%
+ {...}
+\foo {a}{123}{b}
+\stoptyping
+
+and suddenly changing that to
+
+\starttyping
+\def\foo{\directlua{Foo()}}
+\stoptyping
+
+and using that as:
+
+\starttyping
+\foo {a} {b} n 123
+\stoptyping
+
+means that \type {{123}} will fail. So, eventually you will end up with something:
+
+\starttyping
+\def\myfakeprimitive{\directlua{Foo()}}
+\def\foo#1#2#3{\myfakeprimitive {#1} {#2} n #3 }
+\stoptyping
+
+and:
+
+\starttyping
+\foo {a} {b} {123}
+\stoptyping
+
+So in the end you don't gain much here apart from the fact that the fake
+primitive can be made more clever and accept optional arguments. But such new
+features are often hidden for the user who uses more high|-|level wrappers.
+
+When you code in pure \TEX\ and want to grab a number directly you need to test
+for the braced case; when you use the \LUA\ scanner method you still need to test
+for braces. The scanners are consistent with the way \TEX\ works. Of course you
+can write helpers that do some checking for braces in \LUA, so there are no real
+limitations, but it adds some overhead (and maybe also confusion).
+
+One way to speed up the call is to use the \type {\luafunction} primitive in
+combinations with predefined functions and although both mechanisms can benefit
+from this, the scanner approach gets more out of that as this method cannot be
+used with regular function calls that get arguments. In (rather low level) \LUA\
+it looks like this:
+
+\starttyping
+luafunctions[1] = function()
+ local a token.scan_string()
+ local n token.scan_int()
+ local b token.scan_string()
+ -- whatever --
+end
+\stoptyping
+
+And in \TEX:
+
+\starttyping
+\luafunction1 {a} 123 {b}
+\stoptyping
+
+This can of course be wrapped as:
+
+\starttyping
+\def\myprimitive{\luafunction1 }
+\stoptyping
+
+\stopsection
+
+\startsection[title=Applications]
+
+The question now pops up: where can this be used? Can you really make new
+primitives? The answer is yes. You can write code that exclusively stays on the
+\LUA\ side but you can also do some magic and then print back something to \TEX.
+Here we use the basic token interface, not \CONTEXT:
+
+\startbuffer
+\directlua {
+local token = newtoken or token
+function ColoredRule()
+ local w, h, d, c, t
+ while true do
+ if token.scan_keyword("width") then
+ w = token.scan_dimen()
+ elseif token.scan_keyword("height") then
+ h = token.scan_dimen()
+ elseif token.scan_keyword("depth") then
+ d = token.scan_dimen()
+ elseif token.scan_keyword("color") then
+ c = token.scan_string()
+ elseif token.scan_keyword("type") then
+ t = token.scan_string()
+ else
+ break
+ end
+ end
+ if c then
+ tex.sprint("\\color[",c,"]{")
+ end
+ if t == "vertical" then
+ tex.sprint("\\vrule")
+ else
+ tex.sprint("\\hrule")
+ end
+ if w then
+ tex.sprint("width ",w,"sp")
+ end
+ if h then
+ tex.sprint("height ",h,"sp")
+ end
+ if d then
+ tex.sprint("depth ",d,"sp")
+ end
+ if c then
+ tex.sprint("\\relax}")
+ end
+end
+}
+\stopbuffer
+
+\typebuffer \getbuffer
+
+This can be given a \TeX\ interface like:
+
+\startbuffer
+\def\myhrule{\directlua{ColoredRule()} type {horizontal} }
+\def\myvrule{\directlua{ColoredRule()} type {vertical} }
+\stopbuffer
+
+\typebuffer \getbuffer
+
+And used as:
+
+\startbuffer
+\myhrule width \hsize height 1cm color {darkred}
+\stopbuffer
+
+\typebuffer
+
+giving:
+
+% when no newtokens:
+%
+% \startbuffer
+% \blackrule[width=\hsize,height=1cm,color=darkred]
+% \stopbuffer
+
+\startlinecorrection \getbuffer \stoplinecorrection
+
+Of course \CONTEXT\ users can use the following commands to color an
+otherwise-black rule (likewise):
+
+\startbuffer
+\blackrule[width=\hsize,height=1cm,color=darkgreen]
+\stopbuffer
+
+\typebuffer \startlinecorrection \getbuffer \stoplinecorrection
+
+The official \CONTEXT\ way to define such a new command is the following. The
+conversion back to verbose dimensions is needed because we pass back to \TEX.
+
+\startbuffer
+\startluacode
+local myrule = tokens.compile {
+ {
+ { "width", "dimension", "todimen" },
+ { "height", "dimension", "todimen" },
+ { "depth", "dimension", "todimen" },
+ { "color", "string" },
+ { "type", "string" },
+ }
+}
+
+interfaces.scanners.ColoredRule = function()
+ local t = myrule()
+ context.blackrule {
+ color = t.color,
+ width = t.width,
+ height = t.height,
+ depth = t.depth,
+ }
+end
+\stopluacode
+\stopbuffer
+
+\typebuffer \getbuffer
+
+With:
+
+\startbuffer
+\unprotect \let\myrule\clf_ColoredRule \protect
+\stopbuffer
+
+\typebuffer \getbuffer
+
+and
+
+\startbuffer
+\myrule width \textwidth height 1cm color {maincolor} \relax
+\stopbuffer
+
+\typebuffer
+
+we get:
+
+% when no newtokens:
+%
+% \startbuffer
+% \blackrule[width=\hsize,height=1cm,color=maincolor]
+% \stopbuffer
+
+\startlinecorrection \getbuffer \stoplinecorrection
+
+There are many ways to use the scanners and each has its charm. We will look at
+some alternatives from the perspective of performance. The timings are more meant
+as relative measures than absolute ones. After all it depends on the hardware. We
+assume the following shortcuts:
+
+\starttyping
+local scannumber = tokens.scanners.number
+local scankeyword = tokens.scanners.keyword
+local scanword = tokens.scanners.word
+\stoptyping
+
+We will scan for four different keys and values. The number is scanned using a
+helper \type {scannumber} that scans for a number that is acceptable for \LUA.
+Thus, \type {1.23} is valid, as are \type {0x1234} and \type {12.12E4}.
+
+% interfaces.scanners.test_scaling_a
+
+\starttyping
+function getmatrix()
+ local sx, sy = 1, 1
+ local rx, ry = 0, 0
+ 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
+ end
+ -- action --
+end
+\stoptyping
+
+Scanning the following specification 100000 times takes 1.00 seconds:
+
+\starttyping
+sx 1.23 sy 4.5 rx 1.23 ry 4.5
+\stoptyping
+
+The \quote {tight} case takes 0.94 seconds:
+
+\starttyping
+sx1.23 sy4.5 rx1.23 ry4.5
+\stoptyping
+
+% interfaces.scanners.test_scaling_b
+
+We can compare this to scanning without keywords. In that case there have to be
+exactly four arguments. These have to be given in the right order which is no big
+deal as often such helpers are encapsulated in a user|-|friendly macro.
+
+\starttyping
+function getmatrix()
+ local sx, sy = scannumber(), scannumber()
+ local rx, ry = scannumber(), scannumber()
+ -- action --
+end
+\stoptyping
+
+As expected, this is more efficient than the previous examples. It takes 0.80
+seconds to scan this 100000 times:
+
+\starttyping
+1.23 4.5 1.23 4.5
+\stoptyping
+
+A third alternative is the following:
+
+\starttyping
+function getmatrix()
+ local sx, sy = 1, 1
+ local rx, ry = 0, 0
+ while true do
+ local kw = scanword()
+ if kw == "sx" then
+ sx = scannumber()
+ elseif kw == "sy" then
+ sy = scannumber()
+ elseif kw == "rx" then
+ rx = scannumber()
+ elseif kw == "ry" then
+ ry = scannumber()
+ else
+ break
+ end
+ end
+ -- action --
+end
+\stoptyping
+
+Here we scan for a keyword and assign a number to the right variable. This one
+call happens to be less efficient than calling \type {scan_keyword} 10 times
+($4+3+2+1$) for the explicit scan. This run takes 1.11 seconds for the next line.
+The spaces are really needed as words can be anything that has no space.
+\footnote {Hard|-|coding the word scan in a \CCODE\ helper makes little sense, as
+different macro packages can have different assumptions about what a word is. And
+we don't extend \LUATEX\ for specific macro packages.}
+
+\starttyping
+sx 1.23 sy 4.5 rx 1.23 ry 4.5
+\stoptyping
+
+Of course these numbers need to be compared to a baseline of no scanning (i.e.\
+the overhead of a \LUA\ call which here amounts to 0.10 seconds. This brings
+us to the following table.
+
+\starttabulate[|l|l|]
+\NC keyword checks \NC 0.9 sec\NC \NR
+\NC no keywords \NC 0.7 sec\NC \NR
+\NC word checks \NC 1.0 sec\NC \NR
+\stoptabulate
+
+The differences are not that impressive given the number of calls. Even in a
+complex document the overhead of scanning can be negligible compared to the
+actions involved in typesetting the document. In fact, there will always be some
+kind of scanning for such macros so we're talking about even less impact. So you
+can just use the method you like most. In practice, the extra overhead of using
+keywords in combination with explicit checks (the first case) is rather
+convenient.
+
+If you don't want to have many tests you can do something like this:
+
+\starttyping
+local keys = {
+ sx = scannumber, sy = scannumber,
+ rx = scannumber, ry = scannumber,
+}
+
+function getmatrix()
+ local values = { }
+ while true do
+ for key, scan in next, keys do
+ if scankeyword(key) then
+ values[key] = scan()
+ else
+ break
+ end
+ end
+ end
+ -- action --
+end
+\stoptyping
+
+This is still quite fast although one now has to access the values in a table.
+Working with specifications like this is clean anyway so in \CONTEXT\ we have a
+way to abstract the previous definition.
+
+\starttyping
+local specification = tokens.compile {
+ {
+ { "sx", "number" }, { "sy", "number" },
+ { "rx", "number" }, { "ry", "number" },
+ },
+}
+
+function getmatrix()
+ local values = specification()
+ -- action using values.sx etc --
+end
+\stoptyping
+
+Although one can make complex definitions this way, the question remains if it
+is a better approach than passing \LUA\ tables. The standard \CONTEXT\ way for
+controlling features is:
+
+\starttyping
+\getmatrix[sx=1.2,sy=3.4]
+\stoptyping
+
+So it doesn't matter much if deep down we see:
+
+\starttyping
+\def\getmatrix[#1]%
+ {\getparameters[@@matrix][sx=1,sy=1,rx=1,ry=1,#1]%
+ \domatrix
+ \@@matrixsx
+ \@@matrixsy
+ \@@matrixrx
+ \@@matrixry
+ \relax}
+\stoptyping
+
+or:
+
+\starttyping
+\def\getmatrix[#1]%
+ {\getparameters[@@matrix][sx=1,sy=1,rx=1,ry=1,#1]%
+ \domatrix
+ sx \@@matrixsx
+ sy \@@matrixsy
+ rx \@@matrixrx
+ ry \@@matrixry
+ \relax}
+\stoptyping
+
+In the second variant (with keywords) can be a scanner like we defined before:
+
+\starttyping
+\def\domatrix#1#2#3#4%
+ {\directlua{getmatrix()}}
+\stoptyping
+
+but also:
+
+\starttyping
+\def\domatrix#1#2#3#4%
+ {\directlua{getmatrix(#1,#2,#3,#4)}}
+\stoptyping
+
+given:
+
+\starttyping
+function getmatrix(sx,sy,rx,ry)
+ -- action using sx etc --
+end
+\stoptyping
+
+or maybe nicer:
+
+\starttyping
+\def\domatrix#1#2#3#4%
+ {\directlua{domatrix{
+ sx = #1,
+ sy = #2,
+ rx = #3,
+ ry = #4
+ }}}
+\stoptyping
+
+assuming:
+
+\starttyping
+function getmatrix(values)
+ -- action using values.sx etc --
+end
+\stoptyping
+
+If you go for speed the scanner variant without keywords is the most efficient
+one. For readability the scanner variant with keywords or the last shown example
+where a table is passed is better. For flexibility the table variant is best as
+it makes no assumptions about the scanner \emdash\ the token scanner can quit on
+unknown keys, unless that is intercepted of course. But as mentioned before, even
+the advantage of the fast one should not be overestimated. When you trace usage
+it can be that the (in this case matrix) macro is called only a few thousand
+times and that doesn't really add up. Of course many different sped-up calls can
+make a difference but then one really needs to optimize consistently the whole
+code base and that can conflict with readability. The token library presents us
+with a nice chicken||egg problem but nevertheless is fun to play with.
+
+\stopsection
+
+\startsection[title=Assigning meanings]
+
+The token library also provides a way to create tokens and access properties but
+that interface can change with upcoming versions when the old library is replaced
+by the new one and the input handling is cleaned up. One experimental function is
+worth mentioning:
+
+\starttyping
+token.set_macro("foo","the meaning of bar")
+\stoptyping
+
+This will turn the given string into tokens that get assigned to \type {\foo}.
+Here are some alternative calls:
+
+\starttabulate
+\NC \type {set_macro("foo")} \NC \type { \def \foo {}} \NC \NR
+\NC \type {set_macro("foo","meaning")} \NC \type { \def \foo {meaning}} \NC \NR
+\NC \type {set_macro("foo","meaning","global")} \NC \type {\gdef \foo {meaning}} \NC \NR
+\stoptabulate
+
+The conversion to tokens happens under the current catcode regime. You can
+enforce a different regime by passing a number of an allocated catcode table as
+the first argument, as with \type {tex.print}. As we mentioned performance
+before: setting at the \LUA\ end like this:
+
+\starttyping
+token.set_macro("foo","meaning")
+\stoptyping
+
+is about two times as fast as:
+
+\starttyping
+tex.sprint("\\def\\foo{meaning}")
+\stoptyping
+
+or (with slightly more overhead) in \CONTEXT\ terms:
+
+\starttyping
+context("\\def\\foo{meaning}")
+\stoptyping
+
+The next variant is actually slower (even when we alias \type {setvalue}):
+
+\starttyping
+context.setvalue("foo","meaning")
+\stoptyping
+
+but although 0.4 versus 0.8 seconds looks like a lot on a \TEX\ run I need a
+million calls to see such a difference, and a million macro definitions during a
+run is a lot. The different assignments involved in, for instance, 3000 entries
+in a bibliography (with an average of 5 assignments per entry) can hardly be
+measured as we're talking about milliseconds. So again, it's mostly a matter of
+convenience when using this function, not a necessity.
+
+\stopsection
+
+\startsection[title=Conclusion]
+
+For sure we will see usage of the new scanner code in \CONTEXT, but to what
+extent remains to be seen. The performance gain is not impressive enough to
+justify many changes to the code but as the low|-|level interfacing can sometimes
+become a bit cleaner it will be used in specific places, even if we sacrifice
+some speed (which then probably will be compensated for by a little gain
+elsewhere).
+
+The scanners will probably never be used by users directly simply because there
+are no such low level interfaces in \CONTEXT\ and because manipulating input is
+easier in \LUA. Even deep down in the internals of \CONTEXT\ we will use wrappers
+and additional helpers around the scanner code. Of course there is the fun-factor
+and playing with these scanners is fun indeed. The macro setters have as their
+main benefit that using them can be nicer in the \LUA\ source, and of course
+setting a macro this way is also conceptually cleaner (just like we can set
+registers).
+
+Of course there are some challenges left, like determining if we are scanning
+input of already converted tokens (for instance in a macro body or token\-list
+expansion). Once we can properly feed back tokens we can also look ahead like
+\type {\futurelet} does. But for that to happen we will first clean up the
+\LUATEX\ input scanner code and error handler.
+
+\stopsection
+
+\stopchapter
+
+\stoptext
+
diff --git a/doc/context/sources/general/manuals/still/still.tex b/doc/context/sources/general/manuals/still/still.tex
new file mode 100644
index 000000000..d7a7ff447
--- /dev/null
+++ b/doc/context/sources/general/manuals/still/still.tex
@@ -0,0 +1,46 @@
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
+%
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+%
+% comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt
+% Group journal or otherwise. Thanks to the editors for corrections. Also thanks
+% to users for testing, feedback and corrections.
+
+\environment still-environment
+
+\startproduct still
+
+\component still-titlepage
+
+\startfrontmatter
+ \component still-contents
+ \component still-introduction
+\stopfrontmatter
+
+\startbodymatter
+ \component still-math
+ \component still-simple
+ \component still-tokens
+ %component still-snippets % unfinished
+ %component still-typesetting % unfinished
+ \component still-profiling
+ %component still-fonts.tex % unfinished
+ %component still-newlines.tex % unfinished
+ \component still-viewing
+ %component still-plain
+ \component still-opentypemath
+ \component still-expanding
+ \component still-backend
+ \component still-one.tex
+\stopbodymatter
+
+\stopproduct
diff --git a/doc/context/sources/general/manuals/swiglib/swiglib-mkiv-gm-1.pdf b/doc/context/sources/general/manuals/swiglib/swiglib-mkiv-gm-1.pdf
index d576c7d91..4f3213154 100644
--- a/doc/context/sources/general/manuals/swiglib/swiglib-mkiv-gm-1.pdf
+++ b/doc/context/sources/general/manuals/swiglib/swiglib-mkiv-gm-1.pdf
Binary files differ
diff --git a/doc/context/sources/general/manuals/swiglib/swiglib-mkiv.tex b/doc/context/sources/general/manuals/swiglib/swiglib-mkiv.tex
index c24be76bf..7360c73fa 100644
--- a/doc/context/sources/general/manuals/swiglib/swiglib-mkiv.tex
+++ b/doc/context/sources/general/manuals/swiglib/swiglib-mkiv.tex
@@ -12,6 +12,10 @@
% with existing functionality and we cannot be held responsible for that. Many of
% the manuals contain characteristic graphics and personal notes or examples that
% make no sense when used out-of-context.
+%
+% comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt
+% Group journal or otherwise. Thanks to the editors for corrections. Also thanks
+% to users for testing, feedback and corrections.
\usemodule[art-01,abr-02]
@@ -109,14 +113,19 @@ have different demands. It also fits in the spirit of \TEX\ and \LUA\ to minimiz
the core components.
The technical setup is by Luigi Scarso and documentation about how to build the
-libraries is part of the \SWIGLIB\ repository. Testing happens with help of the
-\CONTEXT\ (garden) infrastructure. This short document only deals with usage in
-\CONTEXT\ but also covers rather plain usage.
+libraries is (will be) part of the \SWIGLIB\ repository. Testing happens with
+help of the \CONTEXT\ (garden) infrastructure. This short document only deals
+with usage in \CONTEXT\ but also covers rather plain usage.
-\blank \start \em todo: reference to Luigi's manual \stop \blank
+The set of supported libraries in the \SWIGLIB\ subversion trunk is just a subset
+of what is possible and we don't see it as the responsibility of the \LUATEX\
+team to support all that is around. The subset also serves as an example for
+other libraries. We also don't ship wrappers (other that those used in \CONTEXT)
+as this is delegated to the macro packages.
\stopsection
+
\startsection[title=Inside \CONTEXT]
The recommended way to load a library in \CONTEXT\ is by using the
@@ -338,6 +347,172 @@ while \type {luatex} is used.
\stopsection
+\startsection[title=Compiling]
+
+Normally you will take the binaries from the \CONTEXT\ garden but if you ever want
+to compile yourself, it's not that hard to do. For \LINUX\ you need to install the
+compilers:
+
+\starttyping
+apt-get install gcc
+apt-get install g++
+\stoptyping
+
+Then you need to make sure you have a copy of the \LUATEX\ sources (you need to use
+your own paths):
+
+\starttyping
+cd /data
+svn checkout https://foundry.supelec.fr/svn/luatex/trunk luatex-trunk
+\stoptyping
+
+or update with:
+
+\starttyping
+cd /data
+svn update luatex-trunk
+\stoptyping
+
+and then export with:
+
+\starttyping
+cd /data
+svn export --force /data/luatex-trunk /data/luatex-trunk-export
+\stoptyping
+
+We go to the export directory and compile \LUATEX:
+
+\starttyping
+cd /data/luatex-trunk-export
+./build.sh --jit
+\stoptyping
+
+The binaries are already stripped (i.e.\ symbols get removed) which makes them
+much smaller.
+
+% strip -s /data/luatex-trunk-export/build/texk/web2c/luatex
+% strip -s /data/luatex-trunk-export/build/texk/web2c/luajittex
+
+\starttyping
+cp data/luatex/luatex-trunk-export/build/texk/web2c/luatex \
+ /data/context/tex/texmf-linux-64/bin
+cp data/luatex/luatex-trunk-export/build/texk/web2c/luajittex \
+ /data/context/tex/texmf-linux-64/bin
+\stoptyping
+
+The native windows binaries are kept very up|-|to|-|date but you can cross compile
+your own if needed. You need to make sure that the cross compiler is installed.
+
+\starttyping
+apt-get install gcc-mingw-w64-x86-64
+apt-get install g++-mingw-w64-x86-64
+apt-get install binutils-mingw-w64
+\stoptyping
+
+Given that you have exported the sources you can now run:
+
+\starttyping
+./build.sh --jit --mingw64
+\stoptyping
+
+Of course we assume a recent \LINUX\ installation here but on \WINDOWS\ you can
+the \quote {\LINUX\ subsystem for \WINDOWS} too. The files can be found in a dedicated
+build directory:
+
+% strip -s /data/luatex-trunk-export/build-windows64/texk/web2c/luatex.exe
+% strip -s /data/luatex-trunk-export/build-windows64/texk/web2c/luajittex.exe
+
+\starttyping
+cp data/luatex/luatex-trunk-export/build-windows64/texk/web2c/luatex.exe \
+ /data/context/tex/tex-context/tex/texmf-linux-64/bin
+cp data/luatex/luatex-trunk-export/build-windows64/texk/web2c/luajittex.exe \
+ /data/context/tex/tex-context/tex/texmf-linux-64/bin
+\stoptyping
+
+You need to wipe out old traces of binaries, because these can confuse the \type {mtxrun}
+stub that checks for them, so we do:
+
+\starttyping
+rm /data/context/tex/tex-context/tex/texmf-win64/bin/luajittex.dll
+rm /data/context/tex/tex-context/tex/texmf-win64/bin/luatex.dll
+\stoptyping
+
+The libraries are compiled in a similar way. This time we get the sources from another
+repository:
+
+\starttyping
+cd /data
+svn checkout https://foundry.supelec.fr/svn/swiglib/trunk swiglib-trunk
+\stoptyping
+
+or update with:
+
+\starttyping
+cd /data
+svn update swiglib-trunk
+\stoptyping
+
+and then export with:
+
+\starttyping
+cd /data
+svn export --force /data/swiglib-trunk /data/swiglib-trunk-export
+\stoptyping
+
+This time you need to be quite explicit with respect to the libraries you want to
+compile :
+
+\starttyping
+cd /data/swiglib-trunk-export
+./build.sh --library=helpers --version=1.0.3
+\stoptyping
+
+You can save yourself some work with:
+
+\starttyping
+mtxrun --script --svnroot=/data/swiglib-trunk-export --make
+\stoptyping
+
+which will create a shell script \type {swiglib-make.sh} with commands that make
+all available libraries. After running that script you can update your tree
+with:
+
+\starttyping
+mtxrun --script --svnroot=/data/swiglib-trunk-export --update
+\stoptyping
+
+For \WINDOWS\ a similar route is followed but first you need to make sure that
+your binaries are able to deal with shared libraries:
+
+\starttyping
+./build-shared.sh --jit --mingw64 --shared
+\stoptyping
+
+Compiling is done as with \LINUX\ but you need to provide the \type {--mingw64}
+flag. Copying is done with:
+
+\starttyping
+cp /data/luatex/luatex-trunk-export/build-windows64-shared\
+ /texk/web2c/.libs/luatex.exe /data/context/tex/texmf-win64/bin
+cp /data/luatex/luatex-trunk-export/build-windows64-shared\
+ /texk/web2c/.libs/luajittex.exe /data/context/tex/texmf-win64/bin
+
+cp /data/luatex/luatex-trunk-export/build-windows64-shared\
+ /libs/lua*/.libs/texlua*dll /data/context/tex/texmf-win64/bin
+cp /data/luatex/luatex-trunk-export/build-windows64-shared\
+ /libs/luajit/.libs/texluajit*dll /data/context/tex/texmf-win64/bin
+cp /data/luatex/luatex-trunk-export/build-windows64-shared\
+ /texk/kpathsea/.libs/libkpathsea*dll /data/context/tex/texmf-win64/bin
+
+rm /data/context/tex/texmf-win64/bin/luajittex.dll
+rm /data/context/tex/texmf-win64/bin/luatex.dll
+\stoptyping
+
+If you're recompiling \type {--make} can save you some time. If your machine can
+handle it \type {--parallel} can speed up the process.
+
+\stopsection
+
\startsection[title=Colofon]
\starttabulate[|B|p|]
diff --git a/doc/context/sources/general/manuals/templates/templates-mkiv.tex b/doc/context/sources/general/manuals/templates/templates-mkiv.tex
index 01f2c429e..07dd041c3 100644
--- a/doc/context/sources/general/manuals/templates/templates-mkiv.tex
+++ b/doc/context/sources/general/manuals/templates/templates-mkiv.tex
@@ -12,6 +12,10 @@
% with existing functionality and we cannot be held responsible for that. Many of
% the manuals contain characteristic graphics and personal notes or examples that
% make no sense when used out-of-context.
+%
+% comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt
+% Group journal or otherwise. Thanks to the editors for corrections. Also thanks
+% to users for testing, feedback and corrections.
\usemodule[art-01,abr-02]
diff --git a/doc/context/sources/general/manuals/tiptrick/tiptrick.tex b/doc/context/sources/general/manuals/tiptrick/tiptrick.tex
index 54a785134..03af8e806 100644
--- a/doc/context/sources/general/manuals/tiptrick/tiptrick.tex
+++ b/doc/context/sources/general/manuals/tiptrick/tiptrick.tex
@@ -1,6 +1,19 @@
-% interface=en
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
%
-% author: Hans Hagen - Pragma ADE - www.pragma-ade.com
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+%
+% comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt
+% Group journal or otherwise. Thanks to the editors for corrections. Also thanks
+% to users for testing, feedback and corrections.
\setupbodyfont
[dejavu]
diff --git a/doc/context/sources/general/manuals/tools/tools-mkiv.tex b/doc/context/sources/general/manuals/tools/tools-mkiv.tex
index 2ac1e15f4..481426756 100644
--- a/doc/context/sources/general/manuals/tools/tools-mkiv.tex
+++ b/doc/context/sources/general/manuals/tools/tools-mkiv.tex
@@ -12,6 +12,10 @@
% with existing functionality and we cannot be held responsible for that. Many of
% the manuals contain characteristic graphics and personal notes or examples that
% make no sense when used out-of-context.
+%
+% comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt
+% Group journal or otherwise. Thanks to the editors for corrections. Also thanks
+% to users for testing, feedback and corrections.
\usemodule[abr-02]
diff --git a/doc/context/sources/general/manuals/units/units-mkiv.tex b/doc/context/sources/general/manuals/units/units-mkiv.tex
index 0d91c67df..ba4f12787 100644
--- a/doc/context/sources/general/manuals/units/units-mkiv.tex
+++ b/doc/context/sources/general/manuals/units/units-mkiv.tex
@@ -1,5 +1,22 @@
% language=uk
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
+%
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+%
+% comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt
+% Group journal or otherwise. Thanks to the editors for corrections. Also thanks
+% to users for testing, feedback and corrections.
+
\usemodule[art-01,abr-02,physics-units]
\definecolor[red] [darkred]
diff --git a/doc/context/sources/general/manuals/workflows/workflows-injectors.tex b/doc/context/sources/general/manuals/workflows/workflows-injectors.tex
index daae11c82..5bd9bf057 100644
--- a/doc/context/sources/general/manuals/workflows/workflows-injectors.tex
+++ b/doc/context/sources/general/manuals/workflows/workflows-injectors.tex
@@ -81,22 +81,49 @@ and
\blank \startpacked \bf \getbuffer[two] \stoppacked \blank
+The next example is one you can run for your own. The \type {\showinjector}
+command is of course only enabled when the right injection points are to be
+identified. Normally setting injectors happens as last resort. We use it in
+automated \XML\ workflows where last minute control is needed.
+
+\starttyping
+\showinjector
+
+\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
+\stoptyping
+
\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
+% some day to be described:
+%
+% \showinjector
+%
+% \xmlmapvalue{xml:injector}{column}{\setinjector[\AskedInjectorGroup][\AskedInjectorNumber][\column]}
+% \xmlmapvalue{xml:injector}{page} {\setinjector[\AskedInjectorGroup][\AskedInjectorNumber][\page]}
+%
+% \startxmlsetups xml:injector
+% \edef\AskedInjectorGroup {\xmlatt{#1}{group}}
+% \edef\AskedInjectorNumber{\xmlatt{#1}{number}}
+% \xmlvalue{xml:injector}{\xmlatt{#1}{type}}{}
+% \stopxmlsetups
+%
+% \xmlfilter {#1} {/metadata/injectors/injector/command(xml:injector)}
+%
+% \xmlsetinjectors[\xmlattribute{#1}{/metadata/state}{version}]
+%
+% <?context-directive injector list 123 page ?>
+
diff --git a/doc/context/sources/general/manuals/workflows/workflows-mkiv.tex b/doc/context/sources/general/manuals/workflows/workflows-mkiv.tex
index 3820e04fa..c742b94e1 100644
--- a/doc/context/sources/general/manuals/workflows/workflows-mkiv.tex
+++ b/doc/context/sources/general/manuals/workflows/workflows-mkiv.tex
@@ -1,3 +1,20 @@
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
+%
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+%
+% comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt
+% Group journal or otherwise. Thanks to the editors for corrections. Also thanks
+% to users for testing, feedback and corrections.
+
\setupbackend[export=yes]
\environment workflows-style
diff --git a/doc/context/sources/general/manuals/xml/xml-mkiv.tex b/doc/context/sources/general/manuals/xml/xml-mkiv.tex
index 42ec7df9a..80d51532f 100644
--- a/doc/context/sources/general/manuals/xml/xml-mkiv.tex
+++ b/doc/context/sources/general/manuals/xml/xml-mkiv.tex
@@ -1,5 +1,22 @@
% language=uk
+% author : Hans Hagen
+% copyright : PRAGMA ADE & ConTeXt Development Team
+% license : Creative Commons Attribution ShareAlike 4.0 International
+% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions
+% origin : the ConTeXt distribution
+%
+% comment : Because this manual is distributed with TeX distributions it comes with a rather
+% liberal license. We try to adapt these documents to upgrades in the (sub)systems
+% that they describe. Using parts of the content otherwise can therefore conflict
+% with existing functionality and we cannot be held responsible for that. Many of
+% the manuals contain characteristic graphics and personal notes or examples that
+% make no sense when used out-of-context.
+%
+% comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt
+% Group journal or otherwise. Thanks to the editors for corrections. Also thanks
+% to users for testing, feedback and corrections.
+
% to be checked:
%
% \Ux in index
@@ -21,7 +38,7 @@
\usemodule[set-11]
-\loadsetups[i-en-xml.xml]
+\loadsetups[i-context]
% \definehspace[squad][1em plus .25em minus .25em]
@@ -67,18 +84,21 @@
\starttexdefinition unexpanded section:chapter:number #1
\doifmode{*sectionnumber} {
+ \bf
\llap{<\enspace}#1\enspace>
}
\stoptexdefinition
\starttexdefinition unexpanded section:section:number #1
\doifmode{*sectionnumber} {
+ \bf
\llap{<<\enspace}#1\enspace>>
}
\stoptexdefinition
\starttexdefinition unexpanded section:subsection:number #1
\doifmode{*sectionnumber} {
+ \bf
\llap{<<<\enspace}#1\enspace>>>
}
\stoptexdefinition
@@ -1759,6 +1779,222 @@ In addition, \type {=} equals \type {==} and \type {!=} is the same as \type
\stopsection
+
+\startsection[title={css selectors}]
+
+\startbuffer[selector-001]
+<?xml version="1.0" ?>
+
+<a>
+ <b class="one">b.one</b>
+ <b class="two">b.two</b>
+ <b class="one two">b.one.two</b>
+ <b class="three">b.three</b>
+ <b id="first">b#first</b>
+ <c>c</c>
+ <d>d e</d>
+ <e>d e</e>
+ <e>d e e</e>
+ <d>d f</d>
+ <f foo="bar">@foo = bar</f>
+ <f bar="foo">@bar = foo</f>
+ <f bar="foo1">@bar = foo1</f>
+ <f bar="foo2">@bar = foo2</f>
+ <f bar="foo3">@bar = foo3</f>
+ <f bar="foo+4">@bar = foo+4</f>
+ <g>g</g>
+ <g><gg><d>g gg d</d></gg></g>
+ <g><gg><f>g gg f</f></gg></g>
+ <g><gg><f class="one">g gg f.one</f></gg></g>
+ <g>g</g>
+ <g><gg><f class="two">g gg f.two</f></gg></g>
+ <g><gg><f class="three">g gg f.three</f></gg></g>
+ <g><f class="one">g f.one</f></g>
+ <g><f class="three">g f.three</f></g>
+ <h whatever="four five six">@whatever = four five six</h>
+</a>
+\stopbuffer
+
+\xmlloadbuffer{selector-001}{selector-001}
+
+\startxmlsetups xml:selector:demo
+ \advance\scratchcounter\plusone
+ \inleftmargin{\the\scratchcounter}\ignorespaces\xmlverbatim{#1}\par
+\stopxmlsetups
+
+\unexpanded\def\showCSSdemo#1#2%
+ {\blank
+ \textrule{\tttf#2}
+ \startlines
+ \dontcomplain
+ \tttf \obeyspaces
+ \scratchcounter\zerocount
+ \xmlcommand{#1}{#2}{xml:selector:demo}
+ \stoplines
+ \blank}
+
+The \CSS\ approach to filtering is a bit different from the path based one and is
+supported too. In fact, you can combine both methods. Depending on what you
+select, the \CSS\ one can be a little bit faster too. It has the advantage that
+one can select more in one go but at the same time looks a bit less attractive.
+This method was added just to show that it can be done but might be useful too. A
+selector is gogen between curly braces (after all \CSS\ uses them and they have no
+function yet in the parser.
+
+\starttyping
+\xmlall{#1}{{foo bar .whatever, bar foo .whatever}}
+\stoptyping
+
+The following methods are supported:
+
+\starttabulate[|T||]
+\NC element \NC all tags element \NC \NR
+\NC element-1 > element-2 \NC all tags element-2 with parent tag element-1 \NC \NR
+\NC element-1 + element-2 \NC all tags element-2 preceded by tag element-1 \NC \NR
+\NC element-1 ~ element-2 \NC all tags element-2 preceded by tag element-1 \NC \NR
+\NC element-1 element-2 \NC all tags element-2 inside tag element-1 \NC \NR
+\NC [attribute] \NC has attribute \NC \NR
+\NC [attribute=value] \NC attribute equals value\NC \NR
+\NC [attribute\lettertilde =value] \NC attribute contains value (space is separator) \NC \NR
+\NC [attribute\letterhat ="value"] \NC attribute starts with value \NC \NR
+\NC [attribute\letterdollar="value"] \NC attribute ends with value \NC \NR
+\NC [attribute*="value"] \NC attribute contains value \NC \NR
+\NC .class \NC has class \NC \NR
+\NC \letterhash id \NC has id \NC \NR
+\NC :nth-child(n) \NC the child at index n \NC \NR
+\NC :nth-last-child(n) \NC the child at index n from the end \NC \NR
+\NC :first-child \NC the first child \NC \NR
+\NC :last-child \NC the last child \NC \NR
+\NC :nth-of-type(n) \NC the match at index n \NC \NR
+\NC :nth-last-of-type(n) \NC the match at index n from the end \NC \NR
+\NC :first-of-type \NC the first match \NC \NR
+\NC :last-of-type \NC the last match \NC \NR
+\NC :only-of-type \NC the only match or nothing \NC \NR
+\NC :only-child \NC the only child or nothing \NC \NR
+\NC :empty \NC only when empty \NC \NR
+\NC :root \NC the whole tree \NC \NR
+\stoptabulate
+
+The next pages show some examples. For that we use the demo file:
+
+\typebuffer[selector-001]
+
+The class and id selectors often only make sense in \HTML\ like documents but they
+are supported nevertheless. They are after all just shortcuts for filtering by
+attribute. The class filtering is special in the sense that it checks for a class
+in a list of classes given in an attribute.
+
+\showCSSdemo{selector-001}{{.one}}
+\showCSSdemo{selector-001}{{.one, .two}}
+\showCSSdemo{selector-001}{{.one, .two, \letterhash first}}
+
+Attributes can be filtered by presence, value, partial value and such. Quotes are
+optional but we advice to use them.
+
+\showCSSdemo{selector-001}{{[foo], [bar=foo]}}
+\showCSSdemo{selector-001}{{[bar\lettertilde=foo]}}
+\showCSSdemo{selector-001}{{[bar\letterhat="foo"]}}
+\showCSSdemo{selector-001}{{[whatever\lettertilde="five"]}}
+
+You can of course combine the methods as in:
+
+\showCSSdemo{selector-001}{{g f .one, g f .three}}
+\showCSSdemo{selector-001}{{g > f .one, g > f .three}}
+\showCSSdemo{selector-001}{{d + e}}
+\showCSSdemo{selector-001}{{d ~ e}}
+\showCSSdemo{selector-001}{{d ~ e, g f .one, g f .three}}
+
+You can also negate the result by using \type {:not} on a simple expression:
+
+\showCSSdemo{selector-001}{{:not([whatever\lettertilde="five"])}}
+\showCSSdemo{selector-001}{{:not(d)}}
+
+The child and match selectors are also supported:
+
+\showCSSdemo{selector-001}{{a:nth-child(3)}}
+\showCSSdemo{selector-001}{{a:nth-last-child(3)}}
+\showCSSdemo{selector-001}{{g:nth-of-type(3)}}
+\showCSSdemo{selector-001}{{g:nth-last-of-type(3)}}
+\showCSSdemo{selector-001}{{a:first-child}}
+\showCSSdemo{selector-001}{{a:last-child}}
+\showCSSdemo{selector-001}{{e:first-of-type}}
+\showCSSdemo{selector-001}{{gg d:only-of-type}}
+
+Instead of numbers you can also give the \type {an} and \type {an+b} formulas
+as well as the \type {odd} and \type {even} keywords:
+
+\showCSSdemo{selector-001}{{a:nth-child(even)}}
+\showCSSdemo{selector-001}{{a:nth-child(odd)}}
+\showCSSdemo{selector-001}{{a:nth-child(3n+1)}}
+\showCSSdemo{selector-001}{{a:nth-child(2n+3)}}
+
+There are a few special cases:
+
+\showCSSdemo{selector-001}{{g:empty}}
+\showCSSdemo{selector-001}{{g:root}}
+\showCSSdemo{selector-001}{{*}}
+
+Combining the \CSS\ methods with the regular ones is possible:
+
+\showCSSdemo{selector-001}{{g gg f .one}}
+\showCSSdemo{selector-001}{g/gg/f[@class='one']}
+\showCSSdemo{selector-001}{g/{gg f .one}}
+
+\startbuffer[selector-002]
+<?xml version="1.0" ?>
+
+<document>
+ <title class="one" >title 1</title>
+ <title class="two" >title 2</title>
+ <title class="one" >title 3</title>
+ <title class="three">title 4</title>
+</document>
+\stopbuffer
+
+The next examples we use this file:
+
+\typebuffer[selector-002]
+
+\xmlloadbuffer{selector-002}{selector-002}
+
+When we filter from this (not too well structured) tree we can use both
+methods to achieve the same:
+
+\showCSSdemo{selector-002}{{document title .one, document title .three}}
+
+\showCSSdemo{selector-002}{/document/title[(@class='one') or (@class='three')]}
+
+However, imagine this file:
+
+\startbuffer[selector-003]
+<?xml version="1.0" ?>
+
+<document>
+ <title class="one">title 1</title>
+ <subtitle class="sub">title 1.1</subtitle>
+ <title class="two">title 2</title>
+ <subtitle class="sub">title 2.1</subtitle>
+ <title class="one">title 3</title>
+ <subtitle class="sub">title 3.1</subtitle>
+ <title class="two">title 4</title>
+ <subtitle class="sub">title 4.1</subtitle>
+</document>
+\stopbuffer
+
+\typebuffer[selector-003]
+
+\xmlloadbuffer{selector-003}{selector-003}
+
+The next filter in easier with the \CSS\ selector methods because these accumulate
+independent (simple) expressions:
+
+\showCSSdemo{selector-003}{{document title .one + subtitle, document title .two + subtitle}}
+
+Watch how we get an output in the document order. Because we render a sequential document
+a combined filter will trigger a sorting pass.
+
+\stopsection
+
\startsection[title={functions as filters}]
At the \LUA\ end a whole \cmdinternal {cd:lpath} expression results in a (set of) node(s)
@@ -2747,6 +2983,83 @@ Tags like \type {t7}, \type {t8} etc.\ can represent versions.
\stopsection
+\startsection[title=preprocessing]
+
+% local match = lpeg.match
+% local replacer = lpeg.replacer("BAD TITLE:","<bold>BAD TITLE:</bold>")
+%
+% function lxml.preprocessor(data,settings)
+% return match(replacer,data)
+% end
+
+\startbuffer[pre-code]
+\startluacode
+ function lxml.preprocessor(data,settings)
+ return string.find(data,"BAD TITLE:")
+ and string.gsub(data,"BAD TITLE:","<bold>BAD TITLE:</bold>")
+ or data
+ end
+\stopluacode
+\stopbuffer
+
+\startbuffer[pre-xml]
+\startxmlsetups pre:demo:initialize
+ \xmlsetsetup{#1}{*}{pre:demo:*}
+\stopxmlsetups
+
+\xmlregisterdocumentsetup{pre:demo}{pre:demo:initialize}
+
+\startxmlsetups pre:demo:root
+ \xmlflush{#1}
+\stopxmlsetups
+
+\startxmlsetups pre:demo:bold
+ \begingroup\bf\xmlflush{#1}\endgroup
+\stopxmlsetups
+
+\starttext
+ \xmlprocessbuffer{pre:demo}{demo}{}
+\stoptext
+\stopbuffer
+
+Say that you have the following \XML\ setup:
+
+\typebuffer[pre-xml]
+
+and that (such things happen) the input looks like this:
+
+\startbuffer[demo]
+<root>
+BAD TITLE: crap crap crap ...
+
+BAD TITLE: crap crap crap ...
+</root>
+\stopbuffer
+
+\typebuffer[demo]
+
+You can then clean up these \type {BAD TITLE}'s as follows:
+
+\typebuffer[pre-code]
+
+and get as result:
+
+\start \getbuffer[pre-code,pre-xml] \stop
+
+The preprocessor function gets as second argument the current settings, an d
+the field \type {currentresource} can be used to limit the actions to
+specific resources, in our case it's \type {buffer: demo}. Afterwards you can
+reset the proprocessor with:
+
+\startluacode
+lxml.preprocessor = nil
+\stopluacode
+
+Future versions might give some more control over preprocessors. For now consider
+it to be a quick hack.
+
+\stopsection
+
\stopchapter
\startchapter[title={Lookups using lpaths}]
@@ -2900,8 +3213,108 @@ visualizer to show the steps. Some are shown more than once as part of a set.
\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.
+This can save some run time when you do lots of tests combined with a same check
+afterwards. There is however one pitfall: you never know what is done with that
+last match in the setup that gets called nested. Take the following example:
+
+\starttyping
+\startbuffer[test]
+<something>
+ <crap> <crapa> <crapb> <crapc> <crapd>
+ <crape>
+ done 1
+ </crape>
+ </crapd> </crapc> </crapb> </crapa>
+ <crap> <crapa> <crapb> <crapc> <crapd>
+ <crape>
+ done 2
+ </crape>
+ </crapd> </crapc> </crapb> </crapa>
+ <crap> <crapa> <crapb> <crapc> <crapd>
+ <crape>
+ done 3
+ </crape>
+ </crapd> </crapc> </crapb> </crapa>
+</something>
+\stopbuffer
+\stoptyping
+
+One way to filter the content is this:
+
+\starttyping
+\xmldoif {#1} {/crap/crapa/crapb/crapc/crapd/crape} {
+ some action
+}
+\stoptyping
+
+It is not unlikely that you will do something like this:
+
+\starttyping
+\xmlfirst {#1} {/crap/crapa/crapb/crapc/crapd/crape} {
+ \xmlfirst{#1}{/crap/crapa/crapb/crapc/crapd/crape}
+}
+\stoptyping
+
+This means that the path is resolved twice but that can be avoided as
+follows:
+
+\starttyping
+\xmldoif{#1}{/crap/crapa/crapb/crapc/crapd/crape}{
+ \xmlfirst{#1}{last-match::}
+}
+\stoptyping
+
+But the next is now guaranteed to work:
+
+\starttyping
+\xmldoif{#1}{/crap/crapa/crapb/crapc/crapd/crape}{
+ \xmlfirst{#1}{last-match::}
+ \xmllast{#1}{last-match::}
+}
+\stoptyping
+
+Because the first one can have done some lookup the last match can be replaced
+and the second call will give unexpected results. You can overcome this with:
+
+\starttyping
+\xmldoif{#1}{/crap/crapa/crapb/crapc/crapd/crape}{
+ \xmlpushmatch
+ \xmlfirst{#1}{last-match::}
+ \xmlpopmatch
+}
+\stoptyping
+
+Does it pay off? Here are some timings of a 10.000 times text and lookup
+like the previous (on a decent Januari 2016 laptop):
+
+\starttabulate[|r|l|]
+\NC 0.239 \NC \type {\xmldoif {...} {...}} \NC \NR
+\NC 0.292 \NC \type {\xmlfirst {...} {...}} \NC \NR
+\NC 0.538 \NC \type {\xmldoif {...} {...} + \xmlfirst {...} {...}} \NC \NR
+\NC 0.338 \NC \type {\xmldoif {...} {...} + \xmlfirst {...} {last-match::}} \NC \NR
+\NC 0.349 \NC \type {+ \xmldoif {...} {...} + \xmlfirst {...} {last-match::}-} \NC \NR
+\stoptabulate
+
+So, pushing and popping (the last row) is a bit slower than not doing that but it
+is still much faster than not using \type {last-match::} at all. As a shortcut
+you can use \type {=}, as in:
+
+\starttyping
+\xmlfirst{#1}{=}
+\stoptyping
+
+You can even do this:
+
+\starttyping
+\xmlall{#1}{last-match::/text()}
+\stoptyping
+
+or
+
+\starttyping
+\xmlall{#1}{=/text()}
+\stoptyping
+
\stopsection
@@ -3728,6 +4141,175 @@ typesetting often takes relatively more time than the lookup.
\stopsection
+\startsection[title=Finalizers]
+
+The \XML\ parser is also available outside \TEX. Here is an example of its usage.
+We pipe the result to \TEX\ but you can do with \type {t} whatever you like.
+
+\startbuffer
+local x = xml.load("manual-demo-1.xml")
+local t = { }
+
+for c in xml.collected(x,"//*") do
+ if not c.special and not t[c.tg] then
+ t[c.tg] = true
+ end
+end
+
+context.tocontext(table.sortedkeys(t))
+\stopbuffer
+
+\typebuffer
+
+This returns:
+
+\ctxluabuffer
+
+We can wrap this in a finalizer:
+
+\startbuffer
+xml.finalizers.taglist = function(collected)
+ local t = { }
+ for i=1,#collected do
+ local c = collected[i]
+ if not c.special then
+ local tg = c.tg
+ if tg and not t[tg] then
+ t[tg] = true
+ end
+ end
+ end
+ return table.sortedkeys(t)
+end
+\stopbuffer
+
+\typebuffer
+
+Or in a more extensive one:
+
+\startbuffer
+xml.finalizers.taglist = function(collected,parenttoo)
+ local t = { }
+ for i=1,#collected do
+ local c = collected[i]
+ if not c.special then
+ local tg = c.tg
+ if tg and not t[tg] then
+ t[tg] = true
+ end
+ if parenttoo then
+ local p = c.__p__
+ if p and not p.special then
+ local tg = p.tg .. ":" .. tg
+ if tg and not t[tg] then
+ t[tg] = true
+ end
+ end
+ end
+ end
+ end
+ return table.sortedkeys(t)
+end
+\stopbuffer
+
+\typebuffer \ctxluabuffer
+
+Usage is as follows:
+
+\startbuffer
+local x = xml.load("manual-demo-1.xml")
+local t = xml.applylpath(x,"//*/taglist()")
+
+context.tocontext(t)
+\stopbuffer
+
+\typebuffer
+
+And indeed we get:
+
+\ctxluabuffer
+
+But we can also say:
+
+\startbuffer
+local x = xml.load("manual-demo-1.xml")
+local t = xml.applylpath(x,"//*/taglist(true)")
+
+context.tocontext(t)
+\stopbuffer
+
+\typebuffer
+
+Now we get:
+
+\ctxluabuffer
+
+\startsection[title=Pure xml]
+
+One might wonder how a \TEX\ macro package would look like when backslashes,
+dollars and percent signs would have no special meaning. In fact, it would be
+rather useless as interpreting commands are triggered by such characters. Any
+formatting or coding system needs such characters. Take \XML: angle brackets and
+ampersands are really special. So, no matter what system we use, we do have to
+deal with the (common) case where these characters need to be sees as they are.
+Normally escaping is the solution.
+
+The \CONTEXT\ interface for \XML\ suffers from this as well. You really don't
+want to know how many tricks are used for dealing with special characters and
+entities: there are several ways these travel through the system and it is
+possible to adapt and cheat. Especially roundtripped data (via tuc file) puts
+some demands on the system because when ts \XML\ can become \TEX\ and vise versa.
+The next example (derived from a mail on the list) demonstrates this:
+
+\starttyping
+\startbuffer[demo]
+<doc>
+ <pre><code>\ConTeXt\ is great</code></pre>
+
+ <pre><code>but you need to know some tricks</code></pre>
+</doc>
+\stopbuffer
+
+\startxmlsetups xml:initialize
+ \xmlsetsetup{#1}{doc|p|code}{xml:*}
+ \xmlsetsetup{#1}{pre/code}{xml:pre:code}
+\stopxmlsetups
+
+\xmlregistersetup{xml:initialize}
+
+\startxmlsetups xml:doc
+ \xmlflush{#1}
+\stopxmlsetups
+
+\startxmlsetups xml:pre:code
+ no solution
+ \comment[symbol=Key, location=inmargin,color=yellow]{\xmlflush{#1}}
+ \par
+ solution one \begingroup
+ \expandUx
+ \comment[symbol=Key, location=inmargin,color=yellow]{\xmlflush{#1}}
+ \endgroup
+ \par
+ solution two
+ \comment[symbol=Key, location=inmargin,color=yellow]{\xmlpure{#1}}
+ \par
+ \xmlprettyprint{#1}{tex}
+\stopxmlsetups
+
+\xmlprocessbuffer{main}{demo}{}
+\stoptyping
+
+The first comment (an interactive feature of \PDF\ comes out as:
+
+\starttyping
+\Ux {5C}ConTeXt\Ux {5C} is great
+\stoptyping
+
+The second and third comment are okay. It's one of the reasons why we have \type
+{\xmlpure}.
+
+\stopsection
+
\stopchapter
\stopbodymatter
diff --git a/doc/context/sources/general/manuals/xtables/xtables-mkiv.tex b/doc/context/sources/general/manuals/xtables/xtables-mkiv.tex
index a41282622..d4316b479 100644
--- a/doc/context/sources/general/manuals/xtables/xtables-mkiv.tex
+++ b/doc/context/sources/general/manuals/xtables/xtables-mkiv.tex
@@ -12,6 +12,10 @@
% with existing functionality and we cannot be held responsible for that. Many of
% the manuals contain characteristic graphics and personal notes or examples that
% make no sense when used out-of-context.
+%
+% comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt
+% Group journal or otherwise. Thanks to the editors for corrections. Also thanks
+% to users for testing, feedback and corrections.
\usemodule[art-01,abr-02]
diff --git a/doc/fonts/hoekwater/koeieletters/koeieletters.rme b/doc/fonts/hoekwater/koeieletters/koeieletters.rme
index 4be11cce8..fdb2128bf 100644
--- a/doc/fonts/hoekwater/koeieletters/koeieletters.rme
+++ b/doc/fonts/hoekwater/koeieletters/koeieletters.rme
@@ -1,21 +1,27 @@
Remarks
-The Koeieletters font is copyrighted (2006) by Hans Hagen
-and Taco Hoekwater. The font is based on original drawings
-by Duane Bibby.
+The Koeieletters font is copyrighted by Hans Hagen and Taco Hoekwater. The
+font is based on original drawings by Duane Bibby. There are two versions:
-The Koeieletters font is distributed under the Creative
-Commons Attribution No Derivative Works licence. A summary
-of this licence can be found at the bottom of this file. The
-complete version of the licence can be found at:
+Type1 : 2006 koeie*.afm koeie*.tfm koeie*.pfb
+TrueType : 2016 koeieletterso.ttf
+
+Because the shapes are in fact artistic drawings the Koeieletters font is
+distributed under the Creative Commons Attribution No Derivative Works
+licence. A summary of this licence can be found at the bottom of this file.
+The complete version of the licence can be found at:
http://creativecommons.org/licenses/by-nd/2.5/legalcode
-The font is supported by ConTeXt and more information about
-its history, evolution and usage can be found in the manual
-at www.pragma-ade.com.
+The font is supported by ConTeXt and more information about its history,
+evolution and usage can be found in articles in the NTG Maps, the ConTeXt
+Group Journal and in manual distributed with Context.
+
+www.pragma-ade.com
+contextgarden.net
+
-==== http://creativecommons.org/licenses/by-nd/2.5/ ====
+============= http://creativecommons.org/licenses/by-nd/2.5/ ==============
Attribution-NoDerivs 2.5
@@ -26,20 +32,22 @@ You are free:
Under the following conditions:
- Attribution: You must attribute the work in the manner
- specified by the author or licensor.
+ Attribution: You must attribute the work in the manner specified by the
+ author or licensor.
- Derivative Works: You may not alter, transform, or
- build upon this work.
+ Derivative Works: You may not alter, transform, or build upon this work.
- * For any reuse or distribution, you must make clear
- to others the license terms of this work.
- * Any of these conditions can be waived if you get
- permission from the copyright holder.
+ * For any reuse or distribution, you must make clear to others the
+ license terms of this work.
+ * Any of these conditions can be waived if you get permission from the
+ copyright holder.
-Your fair use and other rights are in no way affected
-by the above.
+Your fair use and other rights are in no way affected by the above.
-==== end of copy =======================================
+============= end of copy =================================================
+If you think this sounds a bit strict, keep in mind that we use this font
+for predictable demonstration and explorative purposes in ConTeXt and that
+the font is based on original artwork. Feel free to use the font any way
+you want. Just don't mess with the design.
diff --git a/fonts/truetype/hoekwater/koeieletters/koeielettersot.ttf b/fonts/truetype/hoekwater/koeieletters/koeielettersot.ttf
new file mode 100644
index 000000000..8a1295d14
--- /dev/null
+++ b/fonts/truetype/hoekwater/koeieletters/koeielettersot.ttf
Binary files differ
diff --git a/metapost/context/base/mpii/mp-core.mpii b/metapost/context/base/mpii/mp-core.mpii
index 33e9b386e..79b5d2ab7 100644
--- a/metapost/context/base/mpii/mp-core.mpii
+++ b/metapost/context/base/mpii/mp-core.mpii
@@ -897,7 +897,7 @@ enddef ;
save_multipar (i,3,multipar) ;
- elseif multi_column_first_page_hack and ((nxy[fpos]=RealPageNumber) and (nxy[tpos]>=RealPageNumber) : % and (NOfTextColumns>1)) :
+ elseif multi_column_first_page_hack and ((nxy[fpos]=RealPageNumber) and (nxy[tpos]>=RealPageNumber)) : % and (NOfTextColumns>1)) :
save_multipar (i,2,multipar) ;
diff --git a/metapost/context/base/mpii/mp-symb.mpii b/metapost/context/base/mpii/mp-symb.mpii
new file mode 100644
index 000000000..40681adf1
--- /dev/null
+++ b/metapost/context/base/mpii/mp-symb.mpii
@@ -0,0 +1,351 @@
+%D \module
+%D [ file=mp-symb.mp,
+%D version=very old,
+%D title=\CONTEXT\ \METAPOST\ graphics,
+%D subtitle=navigation symbol macros,
+%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 Instead of these symbols, you can use the \type {contnav}
+%D font by Taco Hoekwater that is derived form this file.
+
+u := 3;
+h := 5u;
+wt := 5u;
+wb := .25wt;
+o := .1u;
+pw := .5u;
+
+drawoptions (withpen pencircle scaled pw);
+
+path lefttriangle, righttriangle, sublefttriangle, subrighttriangle;
+
+pair s ; s = (2wb,0) ;
+
+x1t = x2t = 0;
+x3t = wt;
+y3t = .5h;
+z1t-z2t = (z3t-z2t) rotated 60;
+
+z4t = (z2t--z3t) intersectionpoint ((z1t--z2t) shifted s) ;
+z5t = (z3t--z1t) intersectionpoint ((z1t--z2t) shifted s) ;
+
+righttriangle = z1t--z2t--z3t--cycle;
+lefttriangle = righttriangle rotatedaround((0,.5h), 180) shifted (wt,0);
+
+subrighttriangle = z4t--((z2t--z3t--z1t) shifted s)--z5t ;
+sublefttriangle = subrighttriangle rotatedaround((0,.5h), 180) shifted (wt,0);
+
+path sidebar;
+
+x1b = x4b = 0;
+x2b = x3b = wb;
+y1b = y2b = y1t;
+y3b = y4b = y2t;
+
+sidebar = z1b--z2b--z3b--z4b--cycle;
+
+path midbar, onebar, twobar;
+
+hh = abs(y1t-y2t);
+
+%midbar := unitsquare scaled 2hh/3;
+midbar := unitsquare scaled hh;
+onebar := unitsquare xscaled (hh/3) yscaled hh;
+twobar := onebar;
+
+def prepareglyph =
+ drawoptions (withpen pencircle scaled .5u);
+enddef;
+
+def finishglyph =
+ set_outer_boundingbox currentpicture;
+ bboxmargin := o;
+ setbounds currentpicture to bbox currentpicture;
+% draw boundingbox currentpicture withcolor red withpen pencircle scaled 1;
+enddef;
+
+beginfig (1);
+ prepareglyph;
+ fill lefttriangle;
+ draw lefttriangle; % draw gets the bbox right, filldraw doesn't
+ finishglyph;
+endfig;
+
+beginfig (2);
+ prepareglyph;
+ fill righttriangle;
+ draw righttriangle;
+ finishglyph;
+endfig;
+
+beginfig (3);
+ prepareglyph;
+ fill sidebar;
+ draw sidebar;
+ fill lefttriangle shifted (.5s);
+ draw lefttriangle shifted (.5s);
+ finishglyph;
+endfig;
+
+beginfig (4);
+ prepareglyph;
+ fill righttriangle;
+ draw righttriangle;
+ fill sidebar shifted (wt,0);
+ draw sidebar shifted (wt,0);
+ finishglyph;
+endfig;
+
+beginfig (5);
+ prepareglyph;
+ fill lefttriangle;
+ draw lefttriangle;
+ fill lefttriangle shifted s;
+ draw lefttriangle shifted s;
+ finishglyph;
+endfig;
+
+beginfig (6);
+ prepareglyph;
+ fill righttriangle;
+ draw righttriangle;
+ fill righttriangle shifted s;
+ draw righttriangle shifted s;
+ finishglyph;
+endfig;
+
+beginfig (7);
+ prepareglyph;
+ fill midbar;
+ draw midbar;
+ finishglyph;
+endfig;
+
+beginfig (8);
+ prepareglyph;
+ fill onebar;
+ draw onebar;
+ finishglyph;
+endfig;
+
+beginfig (9);
+ prepareglyph;
+ fill twobar;
+ draw twobar;
+ fill twobar shifted (pw+hh/2,0);
+ draw twobar shifted (pw+hh/2,0);
+ finishglyph;
+endfig;
+
+beginfig(101);
+ prepareglyph;
+ draw lefttriangle;
+ finishglyph;
+endfig;
+
+beginfig(102);
+ prepareglyph;
+ draw righttriangle;
+ finishglyph;
+endfig;
+
+beginfig(103);
+ prepareglyph;
+ draw sidebar;
+ draw lefttriangle shifted (.5s);
+ finishglyph;
+endfig;
+
+beginfig(104);
+ prepareglyph;
+ draw righttriangle;
+ draw sidebar shifted (wt,0);
+ finishglyph;
+endfig;
+
+beginfig(105);
+ prepareglyph;
+ draw lefttriangle;
+ draw lefttriangle shifted s;
+ finishglyph;
+endfig;
+
+beginfig(106);
+ prepareglyph;
+ draw righttriangle;
+ draw righttriangle shifted s;
+ finishglyph;
+endfig;
+
+beginfig(107);
+ prepareglyph;
+ draw midbar;
+ finishglyph;
+endfig;
+
+beginfig(108);
+ prepareglyph;
+ draw onebar;
+ finishglyph;
+endfig;
+
+beginfig(109);
+ prepareglyph;
+ draw twobar;
+ draw twobar shifted (pw+hh/2,0);
+ finishglyph;
+endfig;
+
+beginfig(201);
+ prepareglyph;
+ draw lefttriangle;
+ finishglyph;
+endfig;
+
+beginfig(202);
+ prepareglyph;
+ draw righttriangle;
+ finishglyph;
+endfig;
+
+beginfig(203);
+ prepareglyph;
+ draw sidebar;
+ draw lefttriangle shifted (.5s);
+ finishglyph;
+endfig;
+
+beginfig(204);
+ prepareglyph;
+ draw righttriangle;
+ draw sidebar shifted (wt,0);
+ finishglyph;
+endfig;
+
+beginfig(205);
+ prepareglyph;
+ draw sublefttriangle shifted s;
+ draw lefttriangle shifted s;
+ finishglyph;
+endfig;
+
+beginfig(206);
+ prepareglyph;
+ draw subrighttriangle;
+ draw righttriangle;
+ finishglyph;
+endfig;
+
+beginfig(207);
+ prepareglyph;
+ draw midbar;
+ finishglyph;
+endfig;
+
+beginfig(208);
+ prepareglyph;
+ draw onebar;
+ finishglyph;
+endfig;
+
+beginfig(209);
+ prepareglyph;
+ draw twobar;
+ draw twobar shifted (pw+hh/2,0);
+ finishglyph;
+endfig;
+
+
+beginfig(999);
+
+picture collection [] ;
+
+prepareglyph ;
+draw lefttriangle ;
+finishglyph ;
+collection[201] := currentpicture ;
+currentpicture := nullpicture ;
+
+prepareglyph ;
+draw righttriangle ;
+finishglyph ;
+collection[202] := currentpicture ;
+currentpicture := nullpicture ;
+
+prepareglyph ;
+draw sidebar ;
+draw lefttriangle shifted (.5s) ;
+finishglyph ;
+collection[203] := currentpicture ;
+currentpicture := nullpicture ;
+
+prepareglyph ;
+draw righttriangle ;
+draw sidebar shifted (wt,0) ;
+finishglyph ;
+collection[204] := currentpicture ;
+currentpicture := nullpicture ;
+
+prepareglyph ;
+draw sublefttriangle shifted s ;
+draw lefttriangle shifted s ;
+finishglyph ;
+collection[205] := currentpicture ;
+currentpicture := nullpicture ;
+
+prepareglyph ;
+draw subrighttriangle ;
+draw righttriangle ;
+finishglyph ;
+collection[206] := currentpicture ;
+currentpicture := nullpicture ;
+
+prepareglyph ;
+draw midbar ;
+finishglyph ;
+collection[207] := currentpicture ;
+currentpicture := nullpicture ;
+
+prepareglyph ;
+draw onebar ;
+finishglyph ;
+collection[208] := currentpicture ;
+currentpicture := nullpicture ;
+
+prepareglyph ;
+draw twobar ;
+draw twobar shifted (pw+hh/2,0) ;
+finishglyph ;
+collection[209] := currentpicture ;
+currentpicture := nullpicture ;
+
+for i=201 upto 209 :
+ collection[i] := collection[i] shifted - center collection[i] ;
+endfor ;
+
+addto currentpicture also collection[205] shifted ( 0, 0)
+ withcolor (.3,.4,.5) ;
+addto currentpicture also collection[202] shifted ( 0,1.5h)
+ withcolor (.5,.6,.7) ;
+addto currentpicture also collection[201] shifted (1.5h, 0)
+ withcolor (.6,.7,.8) ;
+addto currentpicture also collection[206] shifted (1.5h,1.5h)
+ withcolor (.4,.5,.6) ;
+
+collection[210] := currentpicture ;
+currentpicture := nullpicture ;
+
+bboxmargin := .25u;
+
+fill bbox collection[210] withcolor .95(1,1,0);
+addto currentpicture also collection[210] ;
+
+endfig ;
+
+end
diff --git a/metapost/context/base/mpii/mp-tool.mpii b/metapost/context/base/mpii/mp-tool.mpii
index f476361c7..a3300f5bb 100644
--- a/metapost/context/base/mpii/mp-tool.mpii
+++ b/metapost/context/base/mpii/mp-tool.mpii
@@ -28,7 +28,9 @@ let @## = @# ;
if not known mpversion : string mpversion ; mpversion := "0.641" ; fi ;
-newinternal metapostversion ; metapostversion := scantokens(mpversion) ;
+% newinternal metapostversion ; metapostversion := scantokens(mpversion) ;
+
+newinternal metapostversion ; metapostversion := 2.0 ;
% vardef mpversiongt(expr s) =
% scantokens (mpversion & " > " & if numeric s : decimal s else : s fi)
@@ -2661,41 +2663,41 @@ vardef undecorated (text imagedata) text decoration =
enddef ;
-if metapostversion < 1.770 :
-
- vardef decorated (text imagedata) text decoration =
- save mfun_decorated_path, currentpicture ;
- picture mfun_decorated_path, currentpicture ;
- currentpicture := nullpicture ;
- imagedata ;
- mfun_decorated_path := currentpicture ;
- currentpicture := nullpicture ;
- for i within mfun_decorated_path :
- addto currentpicture
- if stroked i :
- doublepath pathpart i
- dashed dashpart i
- withpen penpart i
- withcolor colorpart i
- decoration
- elseif filled i :
- contour pathpart i
- withpen penpart i
- withcolor colorpart i
- decoration
- elseif textual i :
- also i
- withcolor colorpart i
- decoration
- else :
- also i
- fi
- ;
- endfor ;
- currentpicture
- enddef ;
-
-else:
+% if metapostversion < 1.770 :
+%
+% vardef decorated (text imagedata) text decoration =
+% save mfun_decorated_path, currentpicture ;
+% picture mfun_decorated_path, currentpicture ;
+% currentpicture := nullpicture ;
+% imagedata ;
+% mfun_decorated_path := currentpicture ;
+% currentpicture := nullpicture ;
+% for i within mfun_decorated_path :
+% addto currentpicture
+% if stroked i :
+% doublepath pathpart i
+% dashed dashpart i
+% withpen penpart i
+% withcolor colorpart i
+% decoration
+% elseif filled i :
+% contour pathpart i
+% withpen penpart i
+% withcolor colorpart i
+% decoration
+% elseif textual i :
+% also i
+% withcolor colorpart i
+% decoration
+% else :
+% also i
+% fi
+% ;
+% endfor ;
+% currentpicture
+% enddef ;
+%
+% else:
vardef decorated (text imagedata) text decoration =
save mfun_decorated_path, currentpicture ;
@@ -2735,7 +2737,7 @@ else:
currentpicture
enddef ;
-fi ;
+% fi ;
vardef redecorated (text imagedata) text decoration =
save mfun_decorated_path, currentpicture ;
diff --git a/metapost/context/base/mpiv/metafun.mpiv b/metapost/context/base/mpiv/metafun.mpiv
index b1d4f32e7..ab3fa8638 100644
--- a/metapost/context/base/mpiv/metafun.mpiv
+++ b/metapost/context/base/mpiv/metafun.mpiv
@@ -35,6 +35,8 @@ input "mp-func.mpiv" ; % under construction
% "mp-char.mpiv" ; % loaded on demand
% "mp-step.mpiv" ; % loaded on demand
% "mp-chem.mpiv" ; % loaded on demand
+input "mp-apos.mpiv" ;
+input "mp-abck.mpiv" ;
string metafunversion ; metafunversion =
"metafun iv" & " " &
diff --git a/metapost/context/base/mpiv/mp-abck.mpiv b/metapost/context/base/mpiv/mp-abck.mpiv
index abd7d8848..57c8f226b 100644
--- a/metapost/context/base/mpiv/mp-abck.mpiv
+++ b/metapost/context/base/mpiv/mp-abck.mpiv
@@ -50,17 +50,6 @@ numeric boxfilloffset ; boxfilloffset := 0 ;
numeric boxgriddistance ; boxgriddistance := .5cm ;
numeric boxgridshift ; boxgridshift := 0 ;
-def abck_show_path(expr p, r, c) =
- draw p withpen pencircle scaled .5pt withcolor c ;
- if length(p) > 2 :
- begingroup ; save _c_ ; path _c_ ; _c_ := fullcircle scaled r ;
- for i=0 upto length(p) if cycle p : -1 fi :
- fill _c_ shifted point i of p withcolor white ;
- draw _c_ shifted point i of p withpen pencircle scaled .5pt withcolor c ;
- endfor ;
- fi ;
-enddef ;
-
vardef abck_draw_path(expr p) =
if (length p > 2) and (bbwidth(p) > 1) and (bbheight(p) > 1) :
save pp ; path pp ;
@@ -160,7 +149,7 @@ enddef ;
def show_multi_pars =
for i=1 upto nofmultipars :
- abck_show_path(multipars[i], 6pt, .5blue) ;
+ drawpathwithpoints multipars[i] withcolor .5blue ;
endfor ;
enddef ;
@@ -267,3 +256,43 @@ enddef ;
def anchor_box (expr n,x,y,w,h,d) =
currentpicture := currentpicture shifted (-x,-y) ;
enddef ;
+
+def draw_box = % for old times sake
+ draw pxy boxlineoptions withpen pencircle scaled boxlinewidth ;
+ draw lxy -- rxy boxlineoptions withpen pencircle scaled boxgridwidth ;
+enddef ;
+
+def draw_free_region(expr width, height, depth, loffset, roffset, toffset, boffset) =
+
+ begingroup ; save b, o, l ; path b, o, l[] ; save d ;
+
+ b := fullsquare
+ xysized(width,height+depth) ;
+ o := b
+ topenlarged toffset
+ bottomenlarged boffset
+ leftenlarged loffset
+ rightenlarged roffset ;
+ d := max(PaperWidth,PaperHeight) ;
+
+ fill o withcolor .5white ;
+ fill b withcolor .7white ;
+
+ interim linecap := butt ;
+
+ l[1] := topboundary (topboundary o leftenlarged d rightenlarged d) ;
+ l[2] := bottomboundary (bottomboundary o leftenlarged d rightenlarged d) ;
+ l[3] := leftboundary (leftboundary o topenlarged d bottomenlarged d) ;
+ l[4] := rightboundary (rightboundary o topenlarged d bottomenlarged d) ;
+
+ for i=1 upto 4 :
+ draw l[i] withpen pencircle scaled 1bp withcolor white ;
+ draw l[i] withpen pencircle scaled 1bp dashed (evenly scaled 1bp) withcolor black ;
+ endfor ;
+
+ setbounds currentpicture to b ;
+
+ endgroup ;
+
+enddef ;
+
diff --git a/metapost/context/base/mpiv/mp-asnc.mpiv b/metapost/context/base/mpiv/mp-asnc.mpiv
index 2626e4d58..fba182a64 100644
--- a/metapost/context/base/mpiv/mp-asnc.mpiv
+++ b/metapost/context/base/mpiv/mp-asnc.mpiv
@@ -13,7 +13,7 @@
if known context_asnc : endinput ; fi ;
-boolean context_av ; context_asnc := true ;
+boolean context_asnc ; context_asnc := true ;
% will be replaced
diff --git a/metapost/context/base/mpiv/mp-base.mpiv b/metapost/context/base/mpiv/mp-base.mpiv
index 28eb57fb8..0cc209302 100644
--- a/metapost/context/base/mpiv/mp-base.mpiv
+++ b/metapost/context/base/mpiv/mp-base.mpiv
@@ -66,8 +66,8 @@ def stop expr s =
gobble readstring
enddef ;
-warningcheck :=1 ;
-tracinglostchars :=1 ;
+warningcheck := 1 ;
+tracinglostchars := 1 ;
def interact = % sets up to make "show" commands stop
hide (
@@ -458,8 +458,8 @@ enddef ;
% special operators
-vardef incr suffix $ = $:=$+1; $ enddef ;
-vardef decr suffix $ = $:=$-1; $ enddef ;
+vardef incr suffix $ = $ := $ + 1 ; $ enddef ;
+vardef decr suffix $ = $ := $ - 1 ; $ enddef ;
def reflectedabout(expr w,z) = % reflects about the line w..z
transformed
diff --git a/metapost/context/base/mpiv/mp-char.mpiv b/metapost/context/base/mpiv/mp-char.mpiv
index f604accd8..e878c2d16 100644
--- a/metapost/context/base/mpiv/mp-char.mpiv
+++ b/metapost/context/base/mpiv/mp-char.mpiv
@@ -678,14 +678,14 @@ vardef flow_valid_connection (expr xfrom, yfrom, xto, yto) =
flow_xypoints[flow_xypoint] := flow_xylast ;
for i=1 upto flow_max_x :
for j=1 upto flow_max_y : % was bug: xfrom,yto
- if not ( ( (i,j)=(xfrom,yfrom) ) or ( (i,j)=(xto,yto) ) ) :
+% if not ( ( (i,j)=(xfrom,yfrom) ) or ( (i,j)=(xto,yto) ) ) :
if not flow_xyfree[i][j] :
vc := pp intersection_point flow_xypath[i][j] ;
if intersection_found :
ok := false
fi ;
fi ;
- fi ;
+% fi ;
endfor ;
endfor ;
% if not ok: message("crossing") ; fi ;
@@ -944,20 +944,27 @@ def flow_connect_bottom_right (expr n) (expr xfrom,yfrom,zfrom) (expr xto,yto,zt
enddef ;
def flow_draw_test_shape(expr x, y) =
- flow_draw_shape(x,y,fullcircle, .7, .7) ;
+ flow_draw_shape(x,y,fullcircle,flow_shape_width/flow_grid_width,flow_shape_height/flow_grid_height) ;
enddef ;
def flow_draw_test_shapes =
+ flow_draw_test_area ;
for i=1 upto flow_max_x :
for j=1 upto flow_max_y :
flow_draw_test_shape(i,j) ;
+ flow_chart_draw_label(i,j,"",textext("\ttx(" & decimal i & "," & decimal j & ")"))
endfor ;
endfor ;
enddef;
def flow_draw_test_area =
pickup pencircle scaled .5flow_shape_line_width ;
- draw (unitsquare xscaled flow_max_x yscaled flow_max_y shifted (1,1)) flow_scaled_to_grid withcolor blue ;
+ for i=1 upto flow_max_x + 1 :
+ draw ((i,1) -- (i,flow_max_y+1)) flow_scaled_to_grid withcolor white/2 ;
+ endfor ;
+ for i=1 upto flow_max_y + 1 :
+ draw ((1,i) -- (flow_max_x+1,i)) flow_scaled_to_grid withcolor white/2 ;
+ endfor ;
enddef ;
def flow_show_connection(expr n, m) =
diff --git a/metapost/context/base/mpiv/mp-chem.mpiv b/metapost/context/base/mpiv/mp-chem.mpiv
index b861d3f12..4ed9eaa8f 100644
--- a/metapost/context/base/mpiv/mp-chem.mpiv
+++ b/metapost/context/base/mpiv/mp-chem.mpiv
@@ -48,26 +48,34 @@ path
pair
chem_origin, chem_mirror,
chem_pair[], % scratch
- chem_sb_pair, chem_sb_pair.m, chem_sb_pair.p, chem_sb_pair.b ;
+ chem_sb_pair, chem_sb_pair.m, chem_sb_pair.mm, chem_sb_pair.p, chem_sb_pair.pp, chem_sb_pair.b ;
picture
- chem_pic, % scratch
+ chem_pic; % scratch
% The use of dashpattern is found to dot the starting point with chem_sb_dash.m...
%chem_sb_dash, chem_sb_dash.m, chem_sb_dash.p, chem_sb_dash.b,
+
+% nice hack but now redone
+%
+% picture chem_axis_color ;
+%
+% chem_axis_color := image(draw origin withcolor axiscolor) ; % so we handle all color models
+%
+% withpen pencircle scaled chem_axis_rulethickness withcolor colorpart(chem_axis_color) ;
+
+string
chem_axis_color ;
transform
chem_t ; % scratch
-color lightblue ; lightblue := (173/255,216/255,230/255) ;
-
% debugging
boolean chem_trace_nesting ; chem_trace_nesting := false ;
boolean chem_trace_text ; chem_trace_text := false ;
boolean chem_trace_boundingbox ; chem_trace_boundingbox := false ;
-chem_axis_color := image(draw origin withcolor lightblue) ;
+chem_axis_color := "lightblue" ;
chem_setting_axis := false ;
chem_axis_rulethickness := 1pt ;
chem_emwidth := 10pt ; % EmWidth or \the\emwidth does not work...
@@ -81,7 +89,9 @@ chem_text_max := 1.25 ;
chem_dot_factor := 2 ; % *linewidth
chem_sb_pair := (0.25,0.75) ; %chem_sb_dash := dashpattern(off 0.25 on 0.5 off 0.25) ;
chem_sb_pair.m := (0.25,1 ) ; %chem_sb_dash.m := dashpattern(off 0.25 on 0.75) ;
+chem_sb_pair.mm := (0.50,1 ) ; %chem_sb_dash.m := dashpattern(off 0.25 on 0.75) ;
chem_sb_pair.p := (0 ,0.75) ; %chem_sb_dash.p := dashpattern(on 0.75 off 0.25) ;
+chem_sb_pair.pp := (0 ,0.50) ; %chem_sb_dash.p := dashpattern(on 0.75 off 0.25) ;
chem_sb_pair.b := (0 ,1 ) ; %chem_sb_dash.b := dashpattern(on 1) ;
chem_bd_wedge := true ; % according to IUPAC 2005
@@ -333,7 +343,7 @@ def chem_start_structure(expr i, l, r, t, b, rotation, unit, bond, scale, offset
chem_setting_offset := offset ;
chem_setting_axis := if boolean axis : axis else : (axis<>0) fi ;
chem_axis_rulethickness := .75*(rulethickness) ; % axis 50% thinner than frame and bonds.
- chem_axis_color := image(draw origin withcolor axiscolor) ; % so we handle all color models
+ chem_axis_color := axiscolor ;
chem_reset ;
enddef ;
@@ -367,24 +377,24 @@ vardef chem_stop_structure =
% draw the axes to the bounding box of the entire structure,
% not necessarily the bounding box of the final figure
draw (l,0) -- (r,0)
- withpen pencircle scaled chem_axis_rulethickness withcolor colorpart(chem_axis_color) ;
+ withpen pencircle scaled chem_axis_rulethickness withcolor chem_axis_color ;
draw (0,b) -- (0,t)
- withpen pencircle scaled chem_axis_rulethickness withcolor colorpart(chem_axis_color) ;
+ withpen pencircle scaled chem_axis_rulethickness withcolor chem_axis_color ;
for i = 0 step chem_num0 until r :
draw (i,-chem_num1) -- (i,chem_num1)
- withpen pencircle scaled chem_axis_rulethickness withcolor colorpart(chem_axis_color) ;
+ withpen pencircle scaled chem_axis_rulethickness withcolor chem_axis_color ;
endfor
for i = 0 step -chem_num0 until l :
draw (i,-chem_num1) -- (i,chem_num1)
- withpen pencircle scaled chem_axis_rulethickness withcolor colorpart(chem_axis_color) ;
+ withpen pencircle scaled chem_axis_rulethickness withcolor chem_axis_color ;
endfor
for i = 0 step chem_num0 until t :
draw (-chem_num1,i) -- (chem_num1,i)
- withpen pencircle scaled chem_axis_rulethickness withcolor colorpart(chem_axis_color) ;
+ withpen pencircle scaled chem_axis_rulethickness withcolor chem_axis_color ;
endfor
for i = 0 step -chem_num0 until b :
draw (-chem_num1,i) -- (chem_num1,i)
- withpen pencircle scaled chem_axis_rulethickness withcolor colorpart(chem_axis_color) ;
+ withpen pencircle scaled chem_axis_rulethickness withcolor chem_axis_color ;
endfor
addto currentpicture also chem_pic ;
fi ;
@@ -406,9 +416,8 @@ vardef chem_stop_component = enddef ;
vardef chem_pb = % PB :
if chem_trace_nesting :
- draw boundingbox currentpicture
- withpen pencircle scaled 1mm withcolor colorpart(chem_axis_color) ;
- draw origin withpen pencircle scaled 2mm withcolor colorpart(chem_axis_color) ;
+ draw boundingbox currentpicture withpen pencircle scaled 1mm withcolor chem_axis_color ;
+ draw origin withpen pencircle scaled 2mm withcolor chem_axis_color ;
fi ;
chem_doing_pb := true ;
enddef ;
@@ -507,21 +516,21 @@ enddef ;
vardef chem_draw (expr what, r, c) (text extra) =
draw what
withpen pencircle scaled r
- withcolor c %\MPcolor{c}
+ withcolor c
extra ;
enddef ;
vardef chem_fill (expr what, r, c) (text extra) =
fill what
withpen pencircle scaled r
- withcolor c %\MPcolor{c}
+ withcolor c
extra ;
enddef ;
vardef chem_drawarrow (expr what, r, c) (text extra) =
drawarrow what
withpen pencircle scaled r
- withcolor c %\MPcolor{c}
+ withcolor c
extra ;
enddef ;
@@ -1372,7 +1381,7 @@ vardef chem_bw@# (suffix $) (expr f, t, r, c) = % BW
enddef ;
vardef chem_bd@# (suffix $) (expr f, t, r, c) = % BD
- if chem_star[$] : chem_rbd#@($,f,t,r,c) ; fi
+ if chem_star[$] : chem_rbd@#($,f,t,r,c) ; fi
enddef ;
vardef chem_rbd@# (suffix $) (expr f, t, r, c) = % RBD
@@ -1691,14 +1700,14 @@ vardef chem_line (suffix $) (expr f, t, r, c) = % LINE
draw if f=t : origin else : chem_marked(f) fi -- chem_marked(t)
% no chem_transformed
withpen pencircle scaled r
- withcolor c %\MPcolor{c}
+ withcolor c
enddef ;
vardef chem_dash (suffix $) (expr f, t, r, c) = % DASH
draw if f=t : origin else : chem_marked(f) fi -- chem_marked(t)
% no chem_transformed
withpen pencircle scaled r
- withcolor c %\MPcolor{c}
+ withcolor c
dashed evenly ;
enddef ;
@@ -1706,7 +1715,7 @@ vardef chem_arrow (suffix $) (expr f, t, r, c) = % ARROW
drawarrow if f=t : origin else : chem_marked(f) fi -- chem_marked(t)
% no chem_transformed
withpen pencircle scaled r
- withcolor c %\MPcolor{c}
+ withcolor c
enddef ;
diff --git a/metapost/context/base/mpiv/mp-core.mpiv b/metapost/context/base/mpiv/mp-core.mpiv
index 9b7182908..0ef24e57e 100644
--- a/metapost/context/base/mpiv/mp-core.mpiv
+++ b/metapost/context/base/mpiv/mp-core.mpiv
@@ -513,9 +513,6 @@ def do_initialize_par (expr fpos, tpos, mpos, ppos, rw,rl,rr,rh,ra,ri) =
enddef ;
-TopSkip := 0 ; % will move
-StrutHeight := 0 ; % will move
-
pair last_multi_par_shift ; last_multi_par_shift := origin ;
def relocate_multipars (expr xy) =
@@ -1187,10 +1184,10 @@ numeric boxfilloffset ; boxfilloffset := 0pt ;
numeric boxgriddistance ; boxgriddistance := .5cm ;
numeric boxgridshift ; boxgridshift := 0pt ;
-def draw_box =
- draw pxy boxlineoptions withpen pencircle scaled boxlinewidth ;
- draw lxy -- rxy boxlineoptions withpen pencircle scaled boxgridwidth ;
-enddef ;
+% def draw_box =
+% draw pxy boxlineoptions withpen pencircle scaled boxlinewidth ;
+% draw lxy -- rxy boxlineoptions withpen pencircle scaled boxgridwidth ;
+% enddef ;
def draw_par = % 1 2 3 11 12
do_draw_par(pxy) ; do_draw_par(txy) ; do_draw_par(bxy) ;
diff --git a/metapost/context/base/mpiv/mp-grap.mpiv b/metapost/context/base/mpiv/mp-grap.mpiv
index 4fd8ee5bd..3a1d7742a 100644
--- a/metapost/context/base/mpiv/mp-grap.mpiv
+++ b/metapost/context/base/mpiv/mp-grap.mpiv
@@ -17,9 +17,8 @@ boolean context_grap ; context_grap := true ;
% Below is a modified graph.mp
-show numbersystem, numberprecision ;
+message ("using number system " & numbersystem & " with precision " & decimal numberprecision) ;
-%if epsilon/4 = 0 :
if numbersystem <> "double" :
errmessage "The graph macros require the double precision number system." ;
endinput ;
@@ -161,7 +160,6 @@ enddef ;
% New :
save graph_background ; color graph_background ; % if defined, fill the frame.
-save graph_close_file ; boolean graph_close_file ; graph_close_file = false ;
def begingraph(expr w, h) =
begingroup
@@ -475,9 +473,9 @@ enddef ;
% String manipulation routines for MetaPost
% It is harmless to input this file more than once.
-vardef isdigit primary d =
- ("0"<=d)and(d<="9")
-enddef ;
+% vardef isdigit primary d =
+% ("0"<=d)and(d<="9")
+% enddef ;
% Number of initial characters of string s where `c <character>' is true
@@ -527,15 +525,18 @@ enddef ;
% line with no data. Commands c can use line number i and tokens $1, $2, ...
% and j is the number of fields.
+% def gdata(expr f)(suffix $)(text c) =
+% for i=1 upto largestmantissa :
+% exitunless graph_read_line$(f) ;
+% c
+% endfor ;
+% enddef ;
+
def gdata(expr f)(suffix $)(text c) =
- %boolean flag ; % not used?
for i=1 upto largestmantissa :
exitunless graph_read_line$(f) ;
c
endfor
- if graph_close_file :
- closefrom f ;
- fi
enddef ;
% Read a path from file f. The path is terminated by blank line or EOF.
@@ -1259,7 +1260,6 @@ def plotsymbol(expr n, f) text t =
fg := if known graph_foreground : graph_foreground else : black fi ;
save p ; path p ; p = graph_shape[n] scaled graph_shapesize ;
draw p withcolor bg withpen currentpen scaled 2 ; % halo
- currentpen := currentpen scaled .5 ;
if cycle p :
fill p withcolor
if known f :
diff --git a/metapost/context/base/mpiv/mp-idea.mpiv b/metapost/context/base/mpiv/mp-idea.mpiv
index 462d97553..d417ab51f 100644
--- a/metapost/context/base/mpiv/mp-idea.mpiv
+++ b/metapost/context/base/mpiv/mp-idea.mpiv
@@ -28,3 +28,17 @@ vardef somecolor = (1,1,0,0) enddef ;
fill OverlayBox withcolor (rcomponent somecolor,gcomponent somecolor,bcomponent somecolor) ;
fill OverlayBox withcolor (ccomponent somecolor,mcomponent somecolor,ycomponent somecolor,bcomponent somecolor) ;
+
+% def newcolor text v = forsuffixes i=v : save i ; color i ; endfor ; enddef ;
+% def newnumeric text v = forsuffixes i=v : save i ; numeric i ; endfor ; enddef ;
+% def newboolean text v = forsuffixes i=v : save i ; boolean i ; endfor ; enddef ;
+% def newtransform text v = forsuffixes i=v : save i ; transform i ; endfor ; enddef ;
+% def newpath text v = forsuffixes i=v : save i ; path i ; endfor ; enddef ;
+% def newpicture text v = forsuffixes i=v : save i ; picture i ; endfor ; enddef ;
+% def newstring text v = forsuffixes i=v : save i ; string i ; endfor ; enddef ;
+
+% width := 10 ;
+% beginfig(1) ;
+% newpath width, height ; width := origin -- cycle ;
+% endfig ;
+% width := 10 ;
diff --git a/metapost/context/base/mpiv/mp-luas.mpiv b/metapost/context/base/mpiv/mp-luas.mpiv
index c30798247..76d28f7f9 100644
--- a/metapost/context/base/mpiv/mp-luas.mpiv
+++ b/metapost/context/base/mpiv/mp-luas.mpiv
@@ -57,6 +57,8 @@ vardef mlib_luas_luacall(text t) =
& decimal s
elseif boolean s :
& if s : "true" else : "false" fi
+ else :
+ & ditto & tostring(s) & ditto
fi endfor
)
enddef ;
@@ -75,6 +77,8 @@ vardef mlib_luas_lualist(expr c)(text t) =
& decimal s
elseif boolean s :
& if s : "true" else : "false" fi
+ else :
+ & ditto & tostring(s) & ditto
fi endfor & ")"
)
enddef ;
@@ -97,3 +101,65 @@ enddef ;
vardef MP@#(text t) =
mlib_luas_lualist("MP." & str @#,t)
enddef ;
+
+def message expr t =
+ if t <> "" : lua.mp.report(t) fi ;
+enddef ;
+
+% a few helpers
+
+% A few helpers:
+
+vardef isarray suffix a =
+ lua.mp.isarray(str a)
+enddef ;
+
+vardef prefix suffix a =
+ lua.mp.prefix(str a)
+enddef ;
+
+vardef dimensions suffix a =
+ lua.mp.dimensions(str a)
+enddef ;
+
+% More access
+
+def getdimen(expr k) = lua.mp._get_dimen_(k) enddef ;
+def getcount(expr k) = lua.mp._get_count_(k) enddef ;
+def gettoks (expr k) = lua.mp._get_toks_ (k) enddef ;
+def setdimen(expr k, v) = lua.mp._set_dimen_(k,v) enddef ;
+def setcount(expr k, v) = lua.mp._set_count_(k,v) enddef ;
+def settoks (expr k, v) = lua.mp._set_toks_ (k,v) enddef ;
+
+% vardef getdimen(expr k) = save getdimen ; lua.mp.getdimen(k) enddef ;
+% vardef getcount(expr k) = save getcount ; lua.mp.getcount(k) enddef ;
+% vardef gettoks (expr k) = save gettoks ; lua.mp.gettoks (k) enddef ;
+% vardef setdimen(expr k,v) = save setdimen ; lua.mp.setdimen(k,v) enddef ;
+% vardef setcount(expr k,v) = save setcount ; lua.mp.setcount(k,v) enddef ;
+% vardef settoks (expr k,v) = save settoks ; lua.mp.settoks (k,v) enddef ;
+
+vardef positionpath (expr name) = lua.mp.positionpath (name) enddef ;
+vardef positioncurve (expr name) = lua.mp.positioncurve (name) enddef ;
+vardef positionxy (expr name) = lua.mp.positionxy (name) enddef ;
+vardef positionpxy (expr name) = lua.mp.positionpxy (name) enddef ;
+vardef positionwhd (expr name) = lua.mp.positionwhd (name) enddef ;
+vardef positionpage (expr name) = lua.mp.positionpage (name) enddef ;
+vardef positionregion(expr name) = lua.mp.positionregion(name) enddef ;
+vardef positionbox (expr name) = lua.mp.positionbox (name) enddef ;
+vardef positionanchor = lua.mp.positionanchor() enddef ;
+
+let wdpart = redpart ;
+let htpart = greenpart ;
+let dppart = bluepart ;
+
+vardef positioninregion =
+ currentpicture := currentpicture shifted - positionxy(positionanchor) ;
+enddef ;
+
+vardef positionatanchor(expr name) =
+ currentpicture := currentpicture shifted - positionxy(name) ;
+enddef ;
+
+
+vardef texvar(expr name) = lua.mp.texvar(name) enddef ;
+vardef texstr(expr name) = lua.mp.texstr(name) enddef ;
diff --git a/metapost/context/base/mpiv/mp-mlib.mpiv b/metapost/context/base/mpiv/mp-mlib.mpiv
index 326342b70..0638ee3e1 100644
--- a/metapost/context/base/mpiv/mp-mlib.mpiv
+++ b/metapost/context/base/mpiv/mp-mlib.mpiv
@@ -54,8 +54,8 @@ vardef transparency_alternative_to_number(expr name) =
fi
enddef ;
-def namedcolor (expr n) =
- 1
+def namedcolor expr n =
+ (1)
withprescript "sp_type=named"
withprescript "sp_name=" & n
enddef ;
@@ -76,22 +76,22 @@ enddef ;
% withprescript "sp_value=" & value
% enddef ;
-def spotcolor(expr n, v) =
- 1
+def spotcolor(expr name, v) =
+ (1)
withprescript "sp_type=spot"
- withprescript "sp_name=" & n
+ withprescript "sp_name=" & name
withprescript "sp_value=" & colordecimals v
enddef ;
def multitonecolor(expr name)(text t) =
- 1
+ (1)
withprescript "sp_type=multitone"
withprescript "sp_name=" & name
withprescript "sp_value=" & colordecimalslist(t)
enddef ;
def transparent(expr a, t)(text c) = % use withtransparency instead
- 1 % this permits withcolor x intoshade y
+ (1) % this permits withcolor x intoshade y
withprescript "tr_alternative=" & decimal transparency_alternative_to_number(a)
withprescript "tr_transparency=" & decimal t
withcolor c
@@ -240,6 +240,32 @@ vardef rawtextext(expr s) = % todo: avoid currentpicture
fi
enddef ;
+vardef validtexbox(expr category, name) =
+ if category == "" :
+ false
+ elseif string name :
+ name <> ""
+ elseif numeric name :
+ name > 0
+ else :
+ true
+ fi
+enddef ;
+
+vardef rawtexbox(expr category, name) =
+ mfun_tt_c := nullpicture ;
+ if validtexbox(category,name) :
+ mfun_tt_b := lua.mp.tb_dimensions(category, name) ;
+ addto mfun_tt_c doublepath unitsquare
+ xscaled redpart mfun_tt_b
+ yscaled (greenpart mfun_tt_b + bluepart mfun_tt_b)
+ shifted (0,- bluepart mfun_tt_b)
+ withprescript "bx_category=" & if numeric category : decimal fi category
+ withprescript "bx_name=" & if numeric name : decimal fi name ;
+ fi
+ mfun_tt_c
+enddef ;
+
% More text
defaultfont := "Mono" ;
@@ -403,6 +429,88 @@ vardef onetimetextext@#(expr p) = % no draw here
thetextext@#(p,origin)
enddef ;
+% formatted text
+
+pair mfun_tt_z ;
+
+vardef rawfmttext(text t) = % todo: avoid currentpicture
+ mfun_tt_n := mfun_tt_n + 1 ;
+ mfun_tt_c := nullpicture ;
+ if mfun_trial_run :
+ mfun_tt_o := nullpicture ;
+ addto mfun_tt_o doublepath origin _op_ ; % save drawoptions
+ addto mfun_tt_c doublepath unitsquare
+ withprescript "tx_number=" & decimal mfun_tt_n
+ withprescript "tx_stage=trial"
+ withprescript "tx_color=" & colordecimals colorpart mfun_tt_o
+ % begin of fmt specific
+ withprescript "tx_type=format"
+ for s = t :
+ if string s : withpostscript "s:" & s
+ elseif numeric s : withpostscript "n:" & decimal s
+ elseif boolean s : withpostscript "b:" & if s : "true" else : "false" fi
+ elseif pair s : hide(mfun_tt_z := s ; )
+ fi
+ endfor ;
+ % end of fmt specific
+ 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
+ xscaled redpart mfun_tt_b
+ yscaled (greenpart mfun_tt_b + bluepart mfun_tt_b)
+ shifted (0,- bluepart mfun_tt_b)
+ withprescript "tx_number=" & decimal mfun_tt_n
+ withprescript "tx_stage=final" ;
+ % begin of fmt specific
+ for s = t :
+ if pair s : mfun_tt_z := s ; fi
+ endfor ;
+ % end of fmt specific
+ fi ;
+ mfun_onetime_textext := false ;
+ mfun_tt_c
+enddef ;
+
+vardef thefmttext@#(text t) =
+ mfun_tt_z := origin ;
+ save p ; picture p ; p := rawfmttext(t) ;
+ p
+ if (mfun_labtype@# >= 10) :
+ shifted (0,ypart center p)
+ fi
+ shifted (mfun_tt_z + textextoffset*mfun_laboff@# - (mfun_labxf@#*lrcorner p + mfun_labyf@#*ulcorner p + (1-mfun_labxf@#-mfun_labyf@#)*llcorner p))
+enddef ;
+
+vardef fmttext@#(text t) = % no draw here
+ thefmttext@#(t,origin)
+enddef ;
+
+% or just: def fmttext = thefmttext enddef ;
+
+vardef onetimefmttext@#(text t) = % no draw here
+ mfun_onetime_textext := true ;
+ thefmttext@#(t,origin)
+enddef ;
+
+% so much for formatted text
+
+vardef thetexbox@#(expr category, name, z) =
+ save p ; picture p ; p := rawtexbox(category,name) ;
+ p
+ if (mfun_labtype@# >= 10) :
+ shifted (0,ypart center p)
+ fi
+ shifted (z + textextoffset*mfun_laboff@# - (mfun_labxf@#*lrcorner p + mfun_labyf@#*ulcorner p + (1-mfun_labxf@#-mfun_labyf@#)*llcorner p))
+enddef ;
+
+vardef texbox@#(expr category, name) = % no draw here
+ thetexbox@#(category,name,origin)
+enddef ;
+
vardef thelabel@#(expr p,z) =
if string p :
thelabel@#(rawtextext("\definedfont[" & defaultfont & "]" & p) scaled defaultscale,z)
@@ -507,16 +615,52 @@ def mfun_withshadestep (text t) =
t
enddef ;
+numeric mfun_shade_fx, mfun_shade_fy ;
+numeric mfun_shade_lx, mfun_shade_ly ;
+numeric mfun_shade_nx, mfun_shade_ny ;
+numeric mfun_shade_dx, mfun_shade_dy ;
+numeric mfun_shade_tx, mfun_shade_ty ;
+
+% first
+
+def mfun_with_shade_method_analyze(expr p) =
+ mfun_shade_path := p ;
+ mfun_shade_step := 1 ;
+ mfun_shade_fx := xpart point 0 of p ;
+ mfun_shade_fy := ypart point 0 of p ;
+ mfun_shade_lx := mfun_shade_fx ;
+ mfun_shade_ly := mfun_shade_fy ;
+ mfun_shade_nx := 0 ;
+ mfun_shade_ny := 0 ;
+ mfun_shade_dx := abs(mfun_shade_fx - mfun_shade_lx) ;
+ mfun_shade_dy := abs(mfun_shade_fy - mfun_shade_ly) ;
+ for i=1 upto length(p) :
+ mfun_shade_tx := abs(mfun_shade_fx - xpart point i of p) ;
+ mfun_shade_ty := abs(mfun_shade_fy - ypart point i of p) ;
+ if mfun_shade_tx > mfun_shade_dx :
+ mfun_shade_nx := i + 1 ;
+ mfun_shade_lx := xpart point i of p ;
+ mfun_shade_dx := mfun_shade_tx ;
+ fi ;
+ if mfun_shade_ty > mfun_shade_dy :
+ mfun_shade_ny := i + 1 ;
+ mfun_shade_ly := ypart point i of p ;
+ mfun_shade_dy := mfun_shade_ty ;
+ fi ;
+ endfor ;
+enddef ;
+
primarydef p withshademethod m =
- hide(
- mfun_shade_path := p ;
- mfun_shade_step := 1 ;
- )
+ hide(mfun_with_shade_method_analyze(p))
p
withprescript "sh_domain=0 1"
+ withprescript "sh_transform=yes"
withprescript "sh_color=into"
withprescript "sh_color_a=" & colordecimals white
withprescript "sh_color_b=" & colordecimals black
+ withprescript "sh_first=" & ddecimal point 0 of p % used for support scaling
+ withprescript "sh_set_x=" & ddecimal (mfun_shade_nx,mfun_shade_lx) %
+ withprescript "sh_set_y=" & ddecimal (mfun_shade_ny,mfun_shade_ly) %
if m = "linear" :
withprescript "sh_type=linear"
withprescript "sh_factor=1"
@@ -537,6 +681,16 @@ primarydef p withshademethod m =
fi
enddef ;
+def withshaderadius expr a =
+ withprescript "sh_radius_a=" & decimal (xpart a)
+ withprescript "sh_radius_b=" & decimal (ypart a)
+enddef ;
+
+def withshadeorigin expr a =
+ withprescript "sh_center_a=" & ddecimal a
+ withprescript "sh_center_b=" & ddecimal a
+enddef ;
+
def withshadevector expr a =
withprescript "sh_center_a=" & ddecimal (point xpart a of mfun_shade_path)
withprescript "sh_center_b=" & ddecimal (point ypart a of mfun_shade_path)
@@ -547,6 +701,10 @@ def withshadedirection expr a =
withprescript "sh_center_b=" & ddecimal (point ypart a of boundingbox(mfun_shade_path))
enddef ;
+def withshadetransform expr a = % yes | no
+ withprescript "sh_transform=" & a
+enddef ;
+
pair shadedup ; shadedup := (0.5,2.5) ;
pair shadeddown ; shadeddown := (2.5,0.5) ;
pair shadedleft ; shadedleft := (1.5,3.5) ;
@@ -616,10 +774,47 @@ def shaded text s =
s
enddef ;
+% For me.
+
+primarydef p shownshadevector v =
+ image (
+ drawarrow (point xpart v of p) -- (point ypart v of p) ;
+ fill fullcircle scaled 2 shifted point xpart v of p ;
+ setbounds currentpicture to center currentpicture -- cycle ;
+ )
+enddef ;
+
+primarydef p shownshadedirection v =
+ image (
+ drawarrow (point xpart v of boundingbox p) -- (point ypart v of boundingbox p) ;
+ fill fullcircle scaled 2 shifted (point xpart v of boundingbox p) ;
+ setbounds currentpicture to center currentpicture -- cycle ;
+ )
+enddef ;
+
+primarydef p shownshadecenter v =
+ image (
+ fill fullcircle scaled 2
+ shifted center p shifted (
+ xpart v * bbwidth (p)/2,
+ ypart v * bbheight(p)/2
+ ) ;
+ setbounds currentpicture to center currentpicture -- cycle ;
+ )
+enddef ;
+
+primarydef p shownshadeorigin v =
+ image (
+ fill fullcircle scaled 2 shifted v ;
+ setbounds currentpicture to center currentpicture -- cycle ;
+ )
+enddef ;
+
% Old macros:
def withcircularshade (expr a, b, ra, rb, ca, cb) =
withprescript "sh_type=circular"
+ withprescript "sh_transform=yes"
withprescript "sh_domain=0 1"
withprescript "sh_factor=1"
withprescript "sh_color_a=" & colordecimals ca
@@ -632,6 +827,7 @@ enddef ;
def withlinearshade (expr a, b, ca, cb) =
withprescript "sh_type=linear"
+ withprescript "sh_transform=yes"
withprescript "sh_domain=0 1"
withprescript "sh_factor=1"
withprescript "sh_color_a=" & colordecimals ca
@@ -830,11 +1026,17 @@ vardef mfun_do_outline_text_flush (expr kind, n, x, y) (text t) =
mfun_do_outline_text_r (n, x, y) (t)
elseif kind = "p" :
mfun_do_outline_text_p (n, x, y) (t)
+ elseif kind = "u" :
+ mfun_do_outline_text_u (n, x, y) (t)
else :
mfun_do_outline_text_n (n, x, y) (t)
fi ;
enddef ;
+vardef mfun_do_outline_rule_flush (expr kind, x, y, w, h) =
+ mfun_do_outline_text_flush (kind, 1, x, y) (fullsquare xyscaled(w,h))
+enddef ;
+
numeric mfun_do_outline_n ; mfun_do_outline_n := 0 ;
vardef mfun_do_outline_text_f (expr n, x, y) (text t) =
@@ -842,7 +1044,19 @@ vardef mfun_do_outline_text_f (expr n, x, y) (text t) =
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
+ fill i shifted(x,y) mfun_do_outline_options_f withpen pencircle scaled 0
+ else :
+ nofill i shifted(x,y)
+ fi ;
+ endfor ;
+enddef ;
+
+vardef mfun_do_outline_text_u (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 :
+ fillup i shifted(x,y) mfun_do_outline_options_f
else :
nofill i shifted(x,y)
fi ;
@@ -935,6 +1149,9 @@ def mfun_do_outline_options_r = enddef ;
vardef outlinetext@# (expr t) text rest =
save kind ; string kind ; kind := str @# ;
currentoutlinetext := currentoutlinetext + 1 ;
+ def mfun_do_outline_options_d = enddef ;
+ def mfun_do_outline_options_f = enddef ;
+ def mfun_do_outline_options_r = enddef ;
image ( normaldraw image (
if mfun_trial_run :
% lua.mp.report("set outline text",currentoutlinetext);
@@ -951,6 +1168,8 @@ vardef outlinetext@# (expr t) text rest =
mfun_do_outline_text_set_d rest ;
elseif kind = "b" :
mfun_do_outline_text_set_b rest ;
+ elseif kind = "u" :
+ mfun_do_outline_text_set_f rest ;
elseif kind = "r" :
mfun_do_outline_text_set_r rest ;
elseif kind = "p" :
@@ -1026,19 +1245,19 @@ vardef properties(text t) =
image(draw unitcircle t)
enddef ;
-if metapostversion < 1.770 :
-
- def withproperties expr p =
- if colormodel p = 3 :
- withcolor greypart p
- elseif colormodel p = 5 :
- withcolor (redpart p,greenpart p,bluepart p)
- elseif colormodel p = 7 :
- withcolor (cyanpart p,magentapart p,yellowpart p,blackpart p)
- fi
- enddef ;
-
-else :
+% if metapostversion < 1.770 :
+%
+% def withproperties expr p =
+% if colormodel p = 3 :
+% withcolor greypart p
+% elseif colormodel p = 5 :
+% withcolor (redpart p,greenpart p,bluepart p)
+% elseif colormodel p = 7 :
+% withcolor (cyanpart p,magentapart p,yellowpart p,blackpart p)
+% fi
+% enddef ;
+%
+% else :
def withproperties expr p =
if colormodel p = 3 :
@@ -1052,7 +1271,7 @@ else :
withpostscript postscriptpart p
enddef ;
-fi ;
+% fi ;
% Experimental:
@@ -1065,11 +1284,7 @@ primarydef t asgroup s = % s = isolated|knockout
wrappedpicture:= nullpicture ;
addto wrappedpicture contour groupbounds
withprescript "gr_state=start"
- withprescript "gr_type=" & s
- withprescript "gr_llx=" & decimal xpart llcorner groupbounds
- withprescript "gr_lly=" & decimal ypart llcorner groupbounds
- withprescript "gr_urx=" & decimal xpart urcorner groupbounds
- withprescript "gr_ury=" & decimal ypart urcorner groupbounds ;
+ withprescript "gr_type=" & s ;
addto wrappedpicture also grouppicture ;
addto wrappedpicture contour groupbounds
withprescript "gr_state=stop" ;
@@ -1166,32 +1381,31 @@ vardef mfun_boolean_to_string(expr b) =
if b : "true" else : "false" fi
enddef ;
-% def passvariable(expr key, value) =
-% special
-% if numeric value : "1:" & key & "=" & mfun_numeric_to_string(value)
-% elseif pair value : "4:" & key & "=" & mfun_pair_to_string(value)
-% elseif rgbcolor value : "5:" & key & "=" & mfun_rgbcolor_to_string(value)
-% elseif cmykcolor value : "6:" & key & "=" & mfun_cmykcolor_to_string(value)
-% elseif boolean value : "3:" & key & "=" & mfun_boolean_to_string(value)
-% elseif path value : "7:" & key & "=" & mfun_path_to_string(value)
-% elseif transform value : "8:" & key & "=" & mfun_transform_to_string(value)
-% else : "2:" & key & "=" & value
-% fi ;
-% enddef ;
-
-vardef tostring(expr value) =
- if numeric value : mfun_numeric_to_string(value)
- elseif pair value : mfun_pair_to_string(value)
- elseif rgbcolor value : mfun_rgbcolor_to_string(value)
- elseif cmykcolor value : mfun_cmykcolor_to_string(value)
- elseif greycolor value : mfun_greycolor_to_string(value)
- elseif boolean value : mfun_boolean_to_string(value)
- elseif path value : mfun_path_to_string(value)
- elseif transform value : mfun_transform_to_string(value)
- else : value
+vardef tostring primary v =
+ if numeric v : mfun_numeric_to_string(v)
+ elseif pair v : mfun_pair_to_string(v)
+ elseif rgbcolor v : mfun_rgbcolor_to_string(v)
+ elseif cmykcolor v : mfun_cmykcolor_to_string(v)
+ elseif greycolor v : mfun_greycolor_to_string(v)
+ elseif boolean v : mfun_boolean_to_string(v)
+ elseif path v : mfun_path_to_string(v)
+ elseif transform v : mfun_transform_to_string(v)
+ else : v
fi
enddef ;
+vardef topair primary p =
+ if pair p : "(" & decimal xpart p & "," & decimal ypart p & ")"
+ elseif numeric p : "(" & decimal p & "," & decimal p & ")"
+ else : "" fi
+enddef ;
+
+string dq ; dq := char 92 & char 34 ;
+string sq ; sq := char 92 & char 39 ;
+
+vardef quote primary s = sq & tostring(s) & sq enddef;
+vardef quotation primary s = dq & tostring(s) & dq enddef;
+
vardef mfun_tagged_string(expr value) =
if numeric value : "1:" & mfun_numeric_to_string(value)
elseif pair value : "4:" & mfun_pair_to_string(value)
@@ -1204,178 +1418,106 @@ vardef mfun_tagged_string(expr value) =
fi
enddef ;
-% amore flexible variant for passing data to context
+% A more flexible variant for passing data to context. We used to construct strings
+% but running lua is fast enough so we can gain on string construction in metapost
+% which is also not that efficient.
-vardef mfun_point_to_lua(expr p,i) =
- "{" &
- decimal xpart (point i of p) & "," &
- decimal ypart (point i of p) & "," &
- decimal xpart (precontrol i of p) & "," &
- decimal ypart (precontrol i of p) & "," &
- decimal xpart (postcontrol i of p) & "," &
- decimal ypart (postcontrol i of p)
- & "}"
+vardef mfun_key_to_lua(expr k) =
+ if numeric k : decimal k else : "'" & k & "'" fi
enddef ;
-vardef mfun_transform_to_lua(expr t) =
- "{" &
- decimal xxpart t & "," & % rx
- decimal xypart t & "," & % sx
- decimal yxpart t & "," & % sy
- decimal yypart t & "," & % ry
- decimal xpart t & "," & % tx
- decimal ypart t % ty
- & "}"
+vardef mfun_point_to_lua(expr k,p,i) =
+ runscript( "metapost.setvariable(" & mfun_key_to_lua(k) & ",{" &
+ decimal xpart (point i of p) & "," &
+ decimal ypart (point i of p) & "," &
+ decimal xpart (precontrol i of p) & "," &
+ decimal ypart (precontrol i of p) & "," &
+ decimal xpart (postcontrol i of p) & "," &
+ decimal ypart (postcontrol i of p)
+ & "})" ) ;
enddef ;
-vardef mfun_numeric_to_lua(expr n) =
- decimal n
+vardef mfun_transform_to_lua(expr k,t) =
+ runscript( "metapost.setvariable(" & mfun_key_to_lua(k) & ",{" &
+ decimal xxpart t & "," & % rx
+ decimal xypart t & "," & % sx
+ decimal yxpart t & "," & % sy
+ decimal yypart t & "," & % ry
+ decimal xpart t & "," & % tx
+ decimal ypart t % ty
+ & "})" ) ;
enddef ;
-vardef mfun_pair_to_lua(expr p) =
- "{" &
- decimal xpart p & "," &
- decimal ypart p
- & "}"
+vardef mfun_numeric_to_lua(expr k,n) =
+ runscript( "metapost.setvariable(" & mfun_key_to_lua(k) & "," & decimal n & ")" ) ;
enddef ;
-vardef mfun_rgbcolor_to_lua(expr c) =
- "{" &
- decimal redpart c & "," &
- decimal greenpart c & "," &
- decimal bluepart c
- & "}"
+vardef mfun_pair_to_lua(expr k,p) =
+ runscript( "metapost.setvariable(" & mfun_key_to_lua(k) & ",{" &
+ decimal xpart p & "," &
+ decimal ypart p
+ & "})" ) ;
enddef ;
-vardef mfun_cmykcolor_to_lua(expr c) =
- "{" &
- decimal cyanpart c & "," &
- decimal magentapart c & "," &
- decimal yellowpart c & "," &
- decimal blackpart c
- & "}"
+vardef mfun_rgbcolor_to_lua(expr k,c) =
+ runscript( "metapost.setvariable(" & mfun_key_to_lua(k) & ",{" &
+ decimal redpart c & "," &
+ decimal greenpart c & "," &
+ decimal bluepart c
+ & "})" ) ;
enddef ;
-vardef mfun_path_to_lua(expr p) =
- "{" &
- mfun_point_to_lua(p,0) for i=1 upto length(p) : & "," & mfun_point_to_lua(p,i) endfor
- & "}"
+vardef mfun_cmykcolor_to_lua(expr k,c) =
+ runscript( "metapost.setvariable(" & mfun_key_to_lua(k) & ",{" &
+ decimal cyanpart c & "," &
+ decimal magentapart c & "," &
+ decimal yellowpart c & "," &
+ decimal blackpart c
+ & "})" ) ;
enddef ;
-vardef mfun_boolean_to_lua(expr b) =
- if b : "true" else : "false" fi
-enddef ;
-
-vardef mfun_string_to_lua(expr s) =
- "[==[" & s & "]==]"
+vardef mfun_path_to_lua(expr k,p) =
+ runscript("metapost.pushvariable(" & mfun_key_to_lua(k) & ")") ;
+ for i=0 upto length(p) :
+ mfun_point_to_lua(i+1,p,i) ;
+ endfor ;
+ runscript("metapost.popvariable()") ;
enddef ;
-def mfun_to_lua(expr key)(expr value)(text t) =
- special "metapost.variables['" & key & "']=" & t(value) ;
+vardef mfun_boolean_to_lua(expr k,b) =
+ runscript( "metapost.setvariable(" & mfun_key_to_lua(k) & if b : ",true)" else : ",false)" fi ) ;
enddef ;
-def mfun_array_to_lua(expr key)(suffix value)(expr first, last, stp)(text t) =
- special
- "metapost.variables['" & key & "']={"
- for i=first step stp until last :
- & "[" & decimal i & "]=" & t(value[i]) & ","
- endfor
- & "}" ;
+vardef mfun_string_to_lua(expr k,s) =
+ runscript( "metapost.setvariable(" & mfun_key_to_lua(k) & ",[==[" & s & "]==])" ) ;
enddef ;
def passvariable(expr key, value) =
- if numeric value : mfun_to_lua(key,value,mfun_numeric_to_lua)
- elseif pair value : mfun_to_lua(key,value,mfun_pair_to_lua)
- elseif string value : mfun_to_lua(key,value,mfun_string_to_lua)
- elseif boolean value : mfun_to_lua(key,value,mfun_boolean_to_lua)
- elseif path value : mfun_to_lua(key,value,mfun_path_to_lua)
- elseif rgbcolor value : mfun_to_lua(key,value,mfun_rgbcolor_to_lua)
- elseif cmykcolor value : mfun_to_lua(key,value,mfun_cmykcolor_to_lua)
- elseif transform value : mfun_to_lua(key,value,mfun_transform_to_lua)
+ if numeric value : mfun_numeric_to_lua (key,value) ;
+ elseif pair value : mfun_pair_to_lua (key,value) ;
+ elseif string value : mfun_string_to_lua (key,value) ;
+ elseif boolean value : mfun_boolean_to_lua (key,value) ;
+ elseif path value : mfun_path_to_lua (key,value) ;
+ elseif rgbcolor value : mfun_rgbcolor_to_lua (key,value) ;
+ elseif cmykcolor value : mfun_cmykcolor_to_lua(key,value) ;
+ elseif transform value : mfun_transform_to_lua(key,value) ;
fi ;
enddef ;
def passarrayvariable(expr key)(suffix values)(expr first, last, stp) =
- if numeric values[first] : mfun_array_to_lua(key,values,first,last,stp,mfun_numeric_to_lua)
- elseif pair values[first] : mfun_array_to_lua(key,values,first,last,stp,mfun_pair_to_lua)
- elseif string values[first] : mfun_array_to_lua(key,values,first,last,stp,mfun_string_to_lua)
- elseif boolean values[first] : mfun_array_to_lua(key,values,first,last,stp,mfun_boolean_to_lua)
- elseif path values[first] : mfun_array_to_lua(key,values,first,last,stp,mfun_path_to_lua)
- elseif rgbcolor values[first] : mfun_array_to_lua(key,values,first,last,stp,mfun_rgbcolor_to_lua)
- elseif cmykcolor values[first] : mfun_array_to_lua(key,values,first,last,stp,mfun_cmykcolor_to_lua)
- elseif transform values[first] : mfun_array_to_lua(key,values,first,last,stp,mfun_transform_to_lua)
- fi ;
+ runscript("metapost.pushvariable(" & mfun_key_to_lua(key) & ")") ;
+ for i=first step stp until last :
+ passvariable(i, values[i]) ;
+ endfor
+ runscript("metapost.popvariable()") ;
enddef ;
def startpassingvariable(expr k) =
- begingroup ;
- save stoppassingvariable, startarray, stoparray, starthash, stophash, index, key, value, slot, entry ;
- let stoppassingvariable = mfun_stop_lua_variable ;
- let startarray = mfun_start_lua_array ;
- let stoparray = mfun_stop_lua_array ;
- let starthash = mfun_start_lua_hash ;
- let stophash = mfun_stop_lua_hash ;
- let index = mfun_lua_index ;
- let key = mfun_lua_key ;
- let value = mfun_lua_value ;
- let slot = mfun_lua_slot ;
- let entry = mfun_lua_entry ;
- save s ; string s ;
- s := "metapost.variables['" & k & "']="
-enddef ;
-
-def mfun_stop_lua_variable =
- ;
- special substring(0,length(s)-1) of s ;
- endgroup ;
+ runscript("metapost.pushvariable(" & mfun_key_to_lua(k) & ")") ;
enddef ;
-% currently there is no difference between array and hash
-
-def mfun_start_lua_array =
- & "{"
-enddef ;
-
-def mfun_stop_lua_array =
- & "},"
-enddef ;
-
-def mfun_start_lua_hash =
- & "{"
-enddef ;
-
-def mfun_stop_lua_hash =
- & "},"
-enddef ;
-
-def mfun_lua_key(expr k) =
- & "['" & k & "']="
-enddef ;
-
-def mfun_lua_index(expr k) =
- & "[" & decimal k & "]="
-enddef ;
-
-def mfun_lua_value(expr v) =
- if numeric v : & mfun_numeric_to_lua(v) & ","
- elseif pair v : & mfun_pair_to_lua(v) & ","
- elseif string v : & mfun_string_to_lua(v) & ","
- elseif boolean v : & mfun_boolean_to_lua(v) & ","
- elseif path v : & mfun_path_to_lua(v) & ","
- elseif rgbcolor v : & mfun_rgbcolor_to_lua(v) & ","
- elseif cmykcolor v : & mfun_cmykcolor_to_lua(v) & ","
- elseif transform v : & mfun_transform_to_lua(v) & ","
- fi
-enddef ;
-
-def mfun_lua_entry(expr k, v) =
- mfun_lua_key(k)
- mfun_lua_value(v)
-enddef ;
-
-def mfun_lua_slot(expr k, v) =
- mfun_lua_index(k)
- mfun_lua_value(v)
+def stoppassingvariable =
+ runscript("metapost.popvariable()") ;
enddef ;
% moved here from mp-grap.mpiv
@@ -1449,6 +1591,9 @@ vardef formatted(expr f, x) = textext(varfmt(f, x)) enddef ;
% def strfmt = format enddef ; % old
% def varfmt = formatted enddef ; % old
+
+% def fmttext = lua.mp.formatted enddef ;
+
% new
def fillup text t = draw t withpostscript "both" enddef ; % we use draw because we need the proper boundingbox
@@ -1460,3 +1605,52 @@ def nofill text t = fill t withpostscript "collect" enddef ;
% def withrule expr r =
% if (t = "even-odd") or (t = "evenodd") : withpostscript "evenodd" fi
% enddef ;
+
+% so we can do: withcolor "red"
+
+vardef resolvedcolor primary s =
+ % lua.mp.namedcolor(s) % conflicts with macro namedcolor
+ % lua.mp.NamedColor(s) % okay but, can also be
+ % lua.mp("NamedColor",s) % which gives expansion mess
+ if string s :
+ runscript("mp.NamedColor('" & s & "')") % faster anyway
+ else :
+ s
+ fi
+enddef ;
+
+% A comment will end up on top of the graphic in the output. This can be handy for
+% locating a graphic: comment("test graphic").
+
+def comment expr str =
+ special "metapost.comment[[" & str & "]]" ;
+enddef ;
+
+% This overloads a dummy:
+
+vardef uniquelist(suffix list) =
+ % this can be optimized by passing all values at once and returning
+ % a result but for now this is ok .. we need an undef foo
+ save i, j, h ;
+ if known lis[0] :
+ i := 0 ;
+ j := -1 ;
+ else :
+ i := 1 ;
+ j := 0 ;
+ fi ;
+ h := lua.mp.newhash() ;
+ forever :
+ exitif unknown list[i] ;
+ if not lua.mp.inhash(h,list[i]) :
+ j := j + 1 ;
+ list[j] := list[i] ;
+ lua.mp.tohash(h,list[i]) ;
+ fi ;
+ i := i + 1 ;
+ endfor ;
+ for n = j+1 step 1 until i-1 :
+ dispose(list[n])
+ endfor ;
+ lua.mp.disposehash(h) ;
+enddef ;
diff --git a/metapost/context/base/mpiv/mp-node.mpiv b/metapost/context/base/mpiv/mp-node.mpiv
new file mode 100644
index 000000000..fdd308ad1
--- /dev/null
+++ b/metapost/context/base/mpiv/mp-node.mpiv
@@ -0,0 +1,182 @@
+%D \module
+%D [ file=mp-node.mpiv,
+%D version=1998.02.15,
+%D title=\CONTEXT\ \METAPOST\ graphics,
+%D subtitle=Node Based Graphics,
+%D author=Alan Braslau,
+%D date=\currentdate,
+%D copyright={Alan Braslau & \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 Ths crossing macros were written as part of this module but as they
+%D can be of use elsewhere they are defined in mp-tool.
+
+if known context_node : endinput ; fi ;
+
+boolean context_node ; context_node := true ;
+
+% returns a pair suffix if the path is unknown
+
+vardef makenode@#(suffix p)(text t) =
+ save i, b ; numeric i ; string b ;
+ for a = t :
+ if unknown i : % first argument is the index
+ i = a ;
+ if isarray p :
+ %
+ % note that one needs to declare "path p[] ; picture p[]pic[] ;"
+ % before calling node() if one is to use a pseudo-array for p
+ % because "picture p1.pic[] ;" is not a valid syntax!
+ %
+ % The following works, but is a bit awkward...
+ %
+ b := prefix p ;
+ if not picture p.pic[i] : scantokens("picture " & b & "[]pic[] ;") ; fi
+ if not pair p.pos[i] : scantokens("pair " & b & "[]pos[] ;") ; fi
+ else :
+ if not picture p.pic[i] : picture p.pic[] ; fi
+ if not pair p.pos[i] : pair p.pos[] ; fi
+ fi
+ else :
+ if known p.pic[i] :
+ addto p.pic[i] also
+ else :
+ p.pic[i] :=
+ fi
+ if picture a : a
+ elseif string a : textext@#(a)
+ elseif numeric a : textext@#(decimal a)
+ elseif ((boolean a) and a) : image(draw origin)
+ else : nullpicture
+ fi ;
+ fi
+ endfor
+ p.pos[i] if known p : := point i of p ; fi
+enddef ;
+
+% returns a picture
+
+vardef node@#(suffix p)(text t) =
+ if pair makenode@#(p)(t) :
+ % nop: gobble the function return.
+ fi
+ for a = t :
+ if (unknown p) and (known p.pos[a]) :
+ makenodepath(p) ;
+ fi
+ if known p.pic[a] :
+ p.pic[a] if known p : shifted point a of p fi
+ else :
+ nullpicture
+ fi
+ exitif true ;
+ endfor
+enddef ;
+
+% returns a path
+
+vardef fromto@#(expr d)(suffix p)(expr f)(suffix q)(text s) =
+ save r, t, l ;
+ path r[] ; numeric t ; picture l ;
+ for a = s :
+ if unknown t :
+ t = a ;
+ if (unknown p) and (known p.pos[f]) :
+ makenodepath(p) ;
+ fi
+ if (unknown q) and (known q.pos[t]) :
+ makenodepath(q) ;
+ fi
+ r0 = if ((not numeric d) and
+ (point f of p = point f of q) and
+ (point t of p = point t of q)) :
+ subpath (f,t) of p
+ else :
+ point f of p -- point t of q
+ fi ;
+ save deviation ; numeric deviation ;
+ deviation := if numeric d: d else: 0 fi ;
+ r1 = if deviation=0 : r0
+ else :
+ point 0 of r0 ..
+ unitvector direction .5length r0 of r0 rotated 90
+ scaled deviation * arclength r0
+ shifted point .5length r0 of r0 ..
+ point length r0 of r0
+ fi ;
+ else :
+ if known l :
+ addto l also
+ else :
+ l :=
+ fi
+ if picture a : a
+ elseif string a : textext@#(a)
+ elseif numeric a : textext@#(decimal a)
+ elseif ((boolean a) and a) : image(draw origin withpen currentpen scaled 4)
+ else : nullpicture
+ fi ;
+ fi
+ endfor
+ r2 = r1
+ if known p.pic[f if cycle p: mod length p fi] :
+ cutbefore boundingbox (p.pic[f if cycle p: mod length p fi] shifted point f of p)
+ fi
+ if known q.pic[t if cycle q: mod length q fi] :
+ cutafter boundingbox (q.pic[t if cycle q: mod length q fi] shifted point t of q)
+ fi
+ ;
+ if known l :
+ l := l shifted point .5length r2 of r2 ;
+ draw l ;
+ (r2 if str @# = "" : crossingunder l fi)
+ else :
+ r2
+ fi
+enddef ;
+
+% returns pair: bounding point of the node picture
+
+vardef nodeboundingpoint@#(suffix p)(expr i) =
+ if known p.pic[i] :
+ boundingpoint@#(p.pic[i])
+ else :
+ origin
+ fi
+enddef ;
+
+% returns pair: scaled laboff direction
+
+vardef relative@#(expr s) =
+ (mfun_laboff@# scaled s)
+enddef ;
+
+% returns pair: vector between nodes (+ optional scale)
+
+vardef betweennodes@#(suffix p)(expr f)(suffix q)(text s) =
+ save t ; numeric t ;
+ for a = s :
+ if unknown t :
+ t = a ;
+ nodeboundingpoint@#(q,t) + nodeboundingpoint@#(p,f)
+ else :
+ + relative@#(a)
+ fi
+ endfor
+enddef ;
+
+% build a path from the node positions.
+% Must be continuous in index starting at 0.
+
+vardef makenodepath(suffix p) =
+ if unknown p :
+ save i ; i = -1 ;
+ p = forever : exitif unknown p.pos[incr i] ;
+ p.pos[i] --
+ endfor cycle ;
+ fi
+enddef ;
+
diff --git a/metapost/context/base/mpiv/mp-page.mpiv b/metapost/context/base/mpiv/mp-page.mpiv
index 2e4a2b437..f32990677 100644
--- a/metapost/context/base/mpiv/mp-page.mpiv
+++ b/metapost/context/base/mpiv/mp-page.mpiv
@@ -290,16 +290,24 @@ vardef CutSpace = if mfun_swapped and not OnRightPage : PaperWidth -
vardef OuterMarginWidth = if not OnRightPage : lua.mp.LeftMarginWidth () else : lua.mp.RightMarginWidth () fi enddef ;
vardef InnerMarginWidth = if not OnRightPage : lua.mp.RightMarginWidth () else : lua.mp.LeftMarginWidth () fi enddef ;
vardef OuterMarginDistance = if not OnRightPage : lua.mp.LeftMarginDistance () else : lua.mp.RightMarginDistance() fi enddef ;
-vardef InnerMarginDistance = if not OnRightPage : lua.mp.RightMarginDistance() else : lua.mp.leftMarginDistance () fi enddef ;
+vardef InnerMarginDistance = if not OnRightPage : lua.mp.RightMarginDistance() else : lua.mp.LeftMarginDistance () fi enddef ;
vardef OuterEdgeWidth = if not OnRightPage : lua.mp.LeftEdgeWidth () else : lua.mp.RightEdgeWidth () fi enddef ;
vardef InnerEdgeWidth = if not OnRightPage : lua.mp.RightEdgeWidth () else : lua.mp.LeftEdgeWidth () fi enddef ;
vardef OuterEdgeDistance = if not OnRightPage : lua.mp.LeftEdgeDistance () else : lua.mp.RightEdgeDistance () fi enddef ;
-vardef InnerEdgeDistance = if not OnRightPage : lua.mp.RightEdgeDistance () else : lua.mp.leftEdgeDistance () fi enddef ;
+vardef InnerEdgeDistance = if not OnRightPage : lua.mp.RightEdgeDistance () else : lua.mp.LeftEdgeDistance () fi enddef ;
vardef OuterSpaceWidth = if not OnRightPage : lua.mp.BackSpace () else : lua.mp.CutSpace () fi enddef ;
vardef InnerSpaceWidth = if not OnRightPage : lua.mp.CutSpace () else : lua.mp.BackSpace () fi enddef ;
+% indices
+
+vardef OuterMargin = if not OnRightPage : LeftMargin else : RightMargin fi enddef ;
+vardef InnerMargin = if not OnRightPage : RightMargin else : LeftMargin fi enddef ;
+
+vardef OuterEdge = if not OnRightPage : LeftEdge else : RightEdge fi enddef ;
+vardef InnerEdge = if not OnRightPage : Rightedge else : LeftEdge fi enddef ;
+
% vardef CurrentLayout = lua.mp.CurrentLayout () enddef ;
vardef OverlayWidth = lua.mp.OverlayWidth () enddef ;
@@ -670,6 +678,8 @@ string RuleOption ; RuleOption := "" ;
numeric RuleWidth ; RuleWidth := 0 ;
numeric RuleHeight ; RuleHeight := 0 ;
numeric RuleDepth ; RuleDepth := 0 ;
+numeric RuleH ; RuleH := 0 ;
+numeric RuleV ; RuleV := 0 ;
numeric RuleThickness ; RuleThickness := 0 ;
numeric RuleFactor ; RuleFactor := 0 ;
numeric RuleOffset ; RuleOffset := 0 ;
diff --git a/metapost/context/base/mpiv/mp-shap.mpiv b/metapost/context/base/mpiv/mp-shap.mpiv
index 713656510..a511ef375 100644
--- a/metapost/context/base/mpiv/mp-shap.mpiv
+++ b/metapost/context/base/mpiv/mp-shap.mpiv
@@ -74,6 +74,8 @@ def stop_predefined_shape_definition =
enddef ;
+% this can be delayed
+
start_predefined_shape_definition ;
predefined_shapes[ 0] := (origin--cycle) ;
@@ -143,7 +145,7 @@ start_predefined_shape_definition ;
stop_predefined_shape_definition ;
vardef some_shape_path (expr type) =
- if known predefined_shapes[type] : predefined_shapes[type] else : predefined_shapes[0] fi
+ if known predefined_shapes[type] : predefined_shapes[type] else : predefined_shapes[24] fi
enddef ;
def some_shape (expr shape_type, shape_width, shape_height, shape_linewidth, shape_linecolor, shape_fillcolor) =
@@ -156,14 +158,22 @@ def some_shape (expr shape_type, shape_width, shape_height, shape_linewidth, sha
endgroup ;
enddef ;
+% maybe:
+%
+% if t>1 : % normal shape
+% path pp ; pp := some_shape_path(t) xyscaled(bbwidth(p), bbheight(p)) ;
+% pp := pp shifted - center pp shifted center p ;
+% fill pp withcolor fc ;
+% draw pp withpen pencircle scaled lw withcolor lc ;
+
vardef drawpredefinedshape (expr t, p, lw, lc, fc) =
save pp ;
- if t>1 : % normal shape
+ if t > 1 : % normal shape
path pp ;
pp := some_shape_path(t) xyscaled(bbwidth(p), bbheight(p)) shifted center p ;
fill pp withcolor fc ;
draw pp withpen pencircle scaled lw withcolor lc ;
- elseif t=1 : % background only
+ elseif t = 1 : % background only
path pp ;
pp := fullsquare xyscaled(bbwidth(p), bbheight(p)) shifted center p ;
fill pp withcolor fc ;
diff --git a/metapost/context/base/mpiv/mp-step.mpiv b/metapost/context/base/mpiv/mp-step.mpiv
index f7a7ba5de..16d6be3a7 100644
--- a/metapost/context/base/mpiv/mp-step.mpiv
+++ b/metapost/context/base/mpiv/mp-step.mpiv
@@ -11,11 +11,12 @@
%C therefore copyrighted by \PRAGMA. See licen-en.pdf for
%C details.
-% step prefixes .. no save needed
+% maybe todo: step prefixes .. no save needed
+% not todo : make it unreadable by lots of suffix compaction
-if known context_cell : endinput ; fi ;
+if known context_step : endinput ; fi ;
-boolean context_cell ; context_cell := true ;
+boolean context_step ; context_step := true ;
def initialize_step_variables =
save
@@ -23,14 +24,16 @@ def initialize_step_variables =
cell_fill_color, cell_line_color, cell_line_width, cell_offset,
line_line_color, line_line_width, line_alternative,
line_distance, cell_distance_y, cell_distance_x,
- nofcells, chart_vertical ;
+ nofcells, chart_vertical, chart_align, chart_category ;
- color text_line_color ; text_line_color := red ;
- color cell_line_color ; cell_line_color := blue ;
- color line_line_color ; line_line_color := green ;
+ string chart_category ; chart_category := "" ;
- color text_fill_color ; text_fill_color := white ;
- color cell_fill_color ; cell_fill_color := white ;
+ string text_line_color ; text_line_color := "red" ;
+ string cell_line_color ; cell_line_color := "blue" ;
+ string line_line_color ; line_line_color := "green" ;
+
+ string text_fill_color ; text_fill_color := "white" ;
+ string cell_fill_color ; cell_fill_color := "white" ;
numeric text_line_width ; text_line_width := 2pt ;
numeric cell_line_width ; cell_line_width := 2pt ;
@@ -49,6 +52,7 @@ def initialize_step_variables =
numeric text_distance_set ; text_distance_set := 4pt ;
boolean chart_vertical ; chart_vertical := false ;
+ boolean chart_align ; chart_align := false ;
numeric nofcells ; nofcells := 0 ;
@@ -56,17 +60,17 @@ enddef ;
def step_cells (expr t, b) =
nofcells := nofcells + 1 ;
- cells_t[nofcells] := textext.d(t) ;
- cells_b[nofcells] := textext.d(b) ;
+ cells_t[nofcells] := texbox.d(chart_category,t) ;
+ cells_b[nofcells] := texbox.d(chart_category,b) ;
texts_t[nofcells] := nullpicture ;
texts_m[nofcells] := nullpicture ;
texts_b[nofcells] := nullpicture ;
enddef ;
-def step_texts (expr t, b) =
- texts_t[nofcells] := textext.d(t) ;
- texts_m[nofcells] := textext.d(m) ;
- texts_b[nofcells] := textext.d(b) ;
+def step_texts (expr t, m, b) =
+ texts_t[nofcells] := texbox.d(chart_category,t) ;
+ texts_m[nofcells] := texbox.d(chart_category,m) ;
+ texts_b[nofcells] := texbox.d(chart_category,b) ;
enddef ;
def step_begin_cell =
@@ -81,11 +85,66 @@ enddef ;
def step_end_cell =
enddef ;
-def step_cell_top (expr t) = cells_t[nofcells] := textext.d(t) ; enddef ;
-def step_cell_bot (expr b) = cells_b[nofcells] := textext.d(b) ; enddef ;
-def step_text_top (expr t) = texts_t[nofcells] := textext.d(t) ; enddef ;
-def step_text_mid (expr m) = texts_m[nofcells] := textext.d(m) ; enddef ;
-def step_text_bot (expr b) = texts_b[nofcells] := textext.d(b) ; enddef ;
+% maybe: texbox.d
+
+def step_cell_top (expr t, c, f, l, s) =
+ cells_t[nofcells] := texbox.d(chart_category,t) ;
+ cell_top_colors[nofcells] := c ;
+ cell_top_fills [nofcells] := f ;
+ cell_top_lines [nofcells] := l ;
+ cell_top_shapes[nofcells] := s ;
+enddef ;
+
+def step_cell_bot (expr b, c, f, l, s) =
+ cells_b[nofcells] := texbox.d(chart_category,b) ;
+ cell_bot_colors[nofcells] := c ;
+ cell_bot_fills [nofcells] := f ;
+ cell_bot_lines [nofcells] := l ;
+ cell_bot_shapes[nofcells] := s ;
+enddef ;
+
+def step_cell_ali (expr ca, cb, cc, c, f, l, s) =
+ cells_a[nofcells][1] := texbox.d(chart_category,ca) ;
+ cells_a[nofcells][2] := texbox.d(chart_category,cb) ;
+ cells_a[nofcells][3] := texbox.d(chart_category,cc) ;
+ cell_top_colors[nofcells] := c ;
+ cell_top_fills [nofcells] := f ;
+ cell_top_lines [nofcells] := l ;
+ cell_top_shapes[nofcells] := s ;
+enddef ;
+
+def step_text_top (expr t, tc, tf, tl, ts, lc, ll, ls) =
+ texts_t[nofcells] := texbox.d(chart_category,t) ;
+ text_top_colors[nofcells] := tc ;
+ text_top_fills [nofcells] := tf ;
+ text_top_lines [nofcells] := tl ;
+ text_top_shapes[nofcells] := ts ;
+ line_top_colors[nofcells] := lc ;
+ line_top_lines [nofcells] := ll ;
+ line_top_shapes[nofcells] := ls ;
+enddef ;
+
+def step_text_mid (expr m, tc, tf, tl, ts, lc, ll, ls) =
+ texts_m[nofcells] := texbox.d(chart_category,m) ;
+ text_mid_colors[nofcells] := tc ;
+ text_mid_fills [nofcells] := tf ;
+ text_mid_lines [nofcells] := tl ;
+ text_mid_shapes[nofcells] := ts ;
+ line_mid_colors[nofcells] := lc ;
+ line_mid_lines [nofcells] := ll ;
+ line_mid_shapes[nofcells] := ls ;
+enddef ;
+
+def step_text_bot (expr b, tc, tf, tl, ts, lc, ll, ls) =
+ texts_b[nofcells] := texbox.d(chart_category,b) ;
+ text_bot_colors[nofcells] := tc ;
+ text_bot_fills [nofcells] := tf ;
+ text_bot_lines [nofcells] := tl ;
+ text_bot_shapes[nofcells] := ts ;
+ line_bot_colors[nofcells] := lc ;
+ line_bot_lines [nofcells] := ll ;
+ line_bot_shapes[nofcells] := ls ;
+enddef ;
def step_begin_chart =
begingroup ;
@@ -93,6 +152,44 @@ def step_begin_chart =
save nofcells ; numeric nofcells ; nofcells := 0 ;
save cells_t, cells_m, cells_b ; picture cells_t[], cells_m[], cells_b[] ;
save texts_t, texts_m, texts_b ; picture texts_t[], texts_m[], texts_b[] ;
+ save start_t, start_m, start_b ; numeric start_t[], start_m[], start_b[] ;
+ save cells_a ; picture cells_a[][] ;
+
+ save cell_top_colors ; string cell_top_colors[] ;
+ save cell_bot_colors ; string cell_bot_colors[] ;
+ save text_top_colors ; string text_top_colors[] ;
+ save text_mid_colors ; string text_mid_colors[] ;
+ save text_bot_colors ; string text_bot_colors[] ;
+
+ save cell_top_fills ; string cell_top_fills[] ;
+ save cell_bot_fills ; string cell_bot_fills[] ;
+ save text_top_fills ; string text_top_fills[] ;
+ save text_mid_fills ; string text_mid_fills[] ;
+ save text_bot_fills ; string text_bot_fills[] ;
+
+ save cell_top_lines ; numeric cell_top_lines[] ;
+ save cell_bot_lines ; numeric cell_bot_lines[] ;
+ save text_top_lines ; numeric text_top_lines[] ;
+ save text_mid_lines ; numeric text_mid_lines[] ;
+ save text_bot_lines ; numeric text_bot_lines[] ;
+
+ save cell_top_shapes ; numeric cell_top_shapes[] ;
+ save cell_bot_shapes ; numeric cell_bot_shapes[] ;
+ save text_top_shapes ; numeric text_top_shapes[] ;
+ save text_mid_shapes ; numeric text_mid_shapes[] ;
+ save text_bot_shapes ; numeric text_bot_shapes[] ;
+
+ save line_top_lines ; numeric line_top_lines[] ;
+ save line_mid_lines ; numeric line_mid_lines[] ;
+ save line_bot_lines ; numeric line_bot_lines[] ;
+
+ save line_top_colors ; string line_top_colors[] ;
+ save line_mid_colors ; string line_mid_colors[] ;
+ save line_bot_colors ; string line_bot_colors[] ;
+
+ save line_top_shapes ; numeric line_top_shapes[] ;
+ save line_mid_shapes ; numeric line_mid_shapes[] ;
+ save line_bot_shapes ; numeric line_bot_shapes[] ;
enddef ;
def step_end_chart =
@@ -106,6 +203,7 @@ def step_end_chart =
save height_t, width_t, max_height_t, max_width_t ; numeric height_t, width_t, max_height_t, max_width_t ;
save height_m, width_m, max_height_m, max_width_m ; numeric height_m, width_m, max_height_m, max_width_m ;
save height_b, width_b, max_height_b, max_width_b ; numeric height_b, width_b, max_height_b, max_width_b ;
+ save alternative ; numeric alternative ;
% check rows
one_row_only := true ;
for i=1 upto nofcells :
@@ -113,18 +211,43 @@ def step_end_chart =
one_row_only := false ;
fi ;
endfor ;
+ %
+ if chart_align :
+ save size, delta, width ; numeric size[], delta[], width[] ;
+ for i=1 upto 3:
+ size[i] = 0 ;
+ for c=1 upto nofcells :
+ size[i] := max(size[i],bbwidth(cells_a[c][i])) ;
+ endfor ;
+ endfor ;
+ for c=1 upto nofcells :
+ cells_t[c] := image (
+ for i=1 upto 3:
+ width[i] := bbwidth(cells_a[c][i]);
+ delta[i] := size[i] - width[i] ;
+ endfor;
+ setbounds cells_a[c][1] to boundingbox(cells_a[c][1]) leftenlarged (delta[1]) ;
+ setbounds cells_a[c][2] to boundingbox(cells_a[c][2]) leftenlarged (delta[2]/2)
+ rightenlarged(delta[2]/2) ;
+ setbounds cells_a[c][3] to boundingbox(cells_a[c][3]) rightenlarged(delta[3]) ;
+ cells_a[c][1] := cells_a[c][1] shifted (- width[1]/2 - size[2]/2 - text_distance_set,0) ;
+ cells_a[c][3] := cells_a[c][3] shifted ( width[3]/2 + size[2]/2 + text_distance_set,0) ;
+ for i=1 upto 3:
+ draw cells_a[c][i] ;
+ % draw boundingbox cells_a[c][i] ;
+ endfor ;
+ ) ;
+ endfor ;
+ fi ;
% swap and rotate
if chart_vertical :
if one_row_only :
% deal with mid_texts
max_width_t := max_width_m := max_width_b := 0 ;
for i=1 upto nofcells :
- width_t := bbwidth(texts_t[i]) ;
- width_m := bbwidth(texts_m[i]) ;
- width_b := bbwidth(texts_b[i]) ;
- if width_t > max_width_t : max_width_t := width_t fi ;
- if width_m > max_width_m : max_width_m := width_m fi ;
- if width_b > max_width_b : max_width_b := width_b fi ;
+ max_width_t := max(max_width_t,bbwidth(texts_t[i]));
+ max_width_m := max(max_width_m,bbwidth(texts_m[i]));
+ max_width_b := max(max_width_b,bbwidth(texts_b[i]));
endfor ;
if max_width_m > 0 :
for i=1 upto nofcells :
@@ -132,14 +255,17 @@ def step_end_chart =
text_m := texts_m[i] ; width_m := bbwidth(text_m) ;
text_b := texts_b[i] ; width_b := bbwidth(text_b) ;
if width_t < max_width_t :
- setbounds text_t to boundingbox text_t leftenlarged (max_width_t - width_t) ;
+ setbounds text_t to boundingbox text_t
+ leftenlarged (max_width_t - width_t) ;
fi ;
if width_m < max_width_m :
- setbounds text_m to boundingbox text_m leftenlarged ((max_width_m - width_m)/2) ;
- setbounds text_m to boundingbox text_m rightenlarged ((max_width_m - width_m)/2) ;
+ setbounds text_m to boundingbox text_m
+ leftenlarged ((max_width_m - width_m)/2)
+ rightenlarged ((max_width_m - width_m)/2) ;
fi ;
if width_b < max_width_b :
- setbounds text_b to boundingbox text_b rightenlarged (max_width_b - width_b) ;
+ setbounds text_b to boundingbox text_b
+ rightenlarged (max_width_b - width_b) ;
fi ;
text_t := text_t shifted (- xpart llcorner text_t, 0) ;
text_m := text_m shifted (- xpart llcorner text_m, 0) ;
@@ -161,6 +287,7 @@ def step_end_chart =
fi ;
else :
for i=1 upto nofcells :
+ % swaps so we need a scratch variable
cell_t := cells_t[i] ;
cell_b := cells_b[i] ;
cells_t[i] := cell_b rotated 90 ;
@@ -174,39 +301,31 @@ def step_end_chart =
fi ;
% align horizontal
for i=1 upto nofcells :
- cell_t := cells_t[i] ;
- cell_b := cells_b[i] ;
- width_t := bbwidth(cell_t) ;
- width_b := bbwidth(cell_b) ;
+ width_t := bbwidth(cells_t[i]) ;
+ width_b := bbwidth(cells_b[i]) ;
if (width_t = 0) and (width_b = 0) :
% skip
elseif (width_t > 0) and (width_t < width_b) :
delta := (width_b-width_t)/2 ;
- setbounds cell_t to boundingbox cell_t leftenlarged delta rightenlarged delta ;
- cells_t[i] := cell_t ;
+ setbounds cells_t[i] to boundingbox cells_t[i] leftenlarged delta rightenlarged delta ;
elseif (width_b > 0) and (width_t > width_b) :
delta := (width_t-width_b)/2 ;
- setbounds cell_b to boundingbox cell_b leftenlarged delta rightenlarged delta ;
- cells_b[i] := cell_b ;
+ setbounds cells_b[i] to boundingbox cells_b[i] leftenlarged delta rightenlarged delta ;
fi ;
endfor ;
% analyze vertical
max_height_t := 0 ;
max_height_b := 0 ;
for i=1 upto nofcells :
- cell_t := cells_t[i] ;
- cell_b := cells_b[i] ;
- height_t := bbheight(cell_t) ;
- height_b := bbheight(cell_b) ;
+ height_t := bbheight(cells_t[i]) ;
+ height_b := bbheight(cells_b[i]) ;
if height_t > 0 :
- setbounds cell_t to boundingbox cell_t enlarged cell_offset ;
+ setbounds cells_t[i] to boundingbox cells_t[i] enlarged cell_offset ;
height_t := height_t + 2 * cell_offset ;
- cells_t[i] := cell_t ;
fi ;
if height_b > 0 :
- setbounds cell_b to boundingbox cell_b enlarged cell_offset ;
+ setbounds cells_b[i] to boundingbox cells_b[i] enlarged cell_offset ;
height_b := height_b + 2 * cell_offset ;
- cells_b[i] := cell_b ;
fi ;
if height_t > max_height_t :
max_height_t := height_t ;
@@ -217,34 +336,24 @@ def step_end_chart =
endfor ;
% align vertical
for i=1 upto nofcells :
- cell_t := cells_t[i] ;
- cell_b := cells_b[i] ;
- height_t := bbheight(cell_t) ;
- height_b := bbheight(cell_b) ;
+ height_t := bbheight(cells_t[i]) ;
+ height_b := bbheight(cells_b[i]) ;
if height_t > 0 :
delta := (max_height_t-height_t)/2 ;
- setbounds cell_t to boundingbox cell_t topenlarged delta bottomenlarged delta ;
+ setbounds cells_t[i] to boundingbox cells_t[i] topenlarged delta bottomenlarged delta ;
fi ;
if height_b > 0 :
delta := (max_height_b-height_b)/2 ;
- setbounds cell_b to boundingbox cell_b topenlarged delta bottomenlarged delta ;
+ setbounds cells_b[i] to boundingbox cells_b[i] topenlarged delta bottomenlarged delta ;
fi ;
- cells_t[i] := cell_t ;
- cells_b[i] := cell_b ;
endfor ;
% position
dx := 0 ;
for i=1 upto nofcells :
- cell_t := cells_t[i] ;
- cell_b := cells_b[i] ;
- cell_t := cell_t shifted -llcorner cell_t ;
- cell_b := cell_b shifted -llcorner cell_b ;
- cell_t := cell_t shifted (dx, 0) ;
- cell_b := cell_b shifted (dx,-cell_distance_y-max_height_b) ;
- cells_t[i] := cell_t ;
- cells_b[i] := cell_b ;
- width_t := bbwidth(cell_t) ;
- width_b := bbwidth(cell_b) ;
+ cells_t[i] := cells_t[i] shifted -llcorner cells_t[i] shifted (dx, 0) ;
+ cells_b[i] := cells_b[i] shifted -llcorner cells_b[i] shifted (dx,-cell_distance_y-max_height_b) ;
+ width_t := bbwidth(cells_t[i]) ;
+ width_b := bbwidth(cells_b[i]) ;
if width_t > 0 :
dx := dx + cell_distance_x + width_t ;
elseif width_b > 0 :
@@ -253,19 +362,27 @@ def step_end_chart =
endfor ;
% flush
for i=1 upto nofcells :
- cell_t := cells_t[i] ;
- cell_b := cells_b[i] ;
- width_t := bbwidth(cell_t) ;
- width_b := bbwidth(cell_b) ;
+ width_t := bbwidth(cells_t[i]) ;
+ width_b := bbwidth(cells_b[i]) ;
if width_t > 0 :
- fill boundingbox cell_t withcolor cell_fill_color ;
- draw boundingbox cell_t withpen pencircle scaled cell_line_width withcolor cell_line_color ;
- draw cell_t ;
+ drawpredefinedshape (
+ if known cell_top_shapes[i] : cell_top_shapes[i] else : 24 fi,
+ cells_t[i],
+ if known cell_top_lines [i] : cell_top_lines [i] else : cell_line_width fi,
+ if known cell_top_colors[i] : cell_top_colors[i] else : cell_line_color fi,
+ if known cell_top_fills [i] : cell_top_fills [i] else : cell_fill_color fi
+ ) ;
+ draw cells_t[i] ;
fi ;
if width_b > 0 :
- fill boundingbox cell_b withcolor cell_fill_color ;
- draw boundingbox cell_b withpen pencircle scaled cell_line_width withcolor cell_line_color ;
- draw cell_b ;
+ drawpredefinedshape (
+ if known cell_bot_shapes[i] : cell_bot_shapes[i] else : 24 fi,
+ cells_b[i],
+ if known cell_bot_lines [i] : cell_bot_lines [i] else : cell_line_width fi,
+ if known cell_bot_colors[i] : cell_bot_colors[i] else : cell_line_color fi,
+ if known cell_bot_fills [i] : cell_bot_fills [i] else : cell_fill_color fi
+ ) ;
+ draw cells_b[i] ;
fi ;
endfor ;
%
@@ -273,55 +390,71 @@ def step_end_chart =
def midbottomboundary expr p = 0.5[llcorner boundingbox p, lrcorner boundingbox p] enddef ;
% draw top and bottom text boxes
for i=1 upto nofcells-1 :
- text_t := texts_t[i] ;
- text_b := texts_b[i] ;
- if bbwidth(text_t) > 0 :
- setbounds text_t to boundingbox text_t enlarged text_offset ;
- texts_t[i] := text_t ;
+ if bbwidth(texts_t[i]) > 0 :
+ setbounds texts_t[i] to boundingbox texts_t[i] enlarged text_offset ;
fi ;
- if bbwidth(text_b) > 0 :
- setbounds text_b to boundingbox text_b enlarged text_offset ;
- texts_b[i] := text_b ;
+ if bbwidth(texts_b[i]) > 0 :
+ setbounds texts_b[i] to boundingbox texts_b[i] enlarged text_offset ;
fi ;
endfor ;
% arrows
for i=1 upto nofcells-1 :
- cell_t := cells_t[i] ;
- cell_b := cells_b[i] ;
- next_t := cells_t[i+1] ;
- next_b := cells_b[i+1] ;
pair t_a, t_b, t_c, b_a, b_b, b_c ;
- t_a := midtopboundary cell_t ;
- t_b := midtopboundary next_t ;
- t_c := (xpart 0.5[t_a,t_b], ypart t_a+line_height+line_distance) ;
+ t_a := midtopboundary cells_t[i] ;
+ t_b := midtopboundary cells_t[i+1] ;
if one_row_only :
- b_a := midbottomboundary cell_t ;
- b_b := midbottomboundary next_t ;
+ b_a := midbottomboundary cells_t[i] ;
+ b_b := midbottomboundary cells_t[i+1] ;
else :
- b_a := midbottomboundary cell_b ;
- b_b := midbottomboundary next_b ;
+ b_a := midbottomboundary cells_b[i] ;
+ b_b := midbottomboundary cells_b[i+1] ;
fi ;
+ t_c := (xpart 0.5[t_a,t_b], ypart t_a+line_height+line_distance) ;
b_c := (xpart 0.5[b_a,b_b], ypart b_a-line_height-line_distance) ;
texts_t[i] := thelabel.top(texts_t[i],t_c) ;
texts_b[i] := thelabel.bot(texts_b[i],b_c) ;
endfor ;
%
for i=1 upto nofcells-1 : % todo arrows when empty text
- cell_t := cells_t[i] ;
- cell_b := cells_b[i] ;
- next_t := cells_t[i+1] ;
- next_b := cells_b[i+1] ;
text_t := texts_t[i] ;
text_b := texts_b[i] ;
+ cell_t := cells_t[start_t[i]] ;
+ cell_b := cells_b[start_b[i]] ;
+ next_t := cells_t[i+1] ;
+ next_b := cells_b[i+1] ;
if bbwidth(text_t) > 0 :
if bbwidth(cell_t) > 0 :
- drawarrow midtopboundary cell_t
- shifted (if i > 1 : line_offset else : 0 fi, cell_line_width) {up} ..
- midbottomboundary text_t shifted (0,-line_distance) ..
- {down} midtopboundary next_t shifted(if i < nofcells - 1 : -line_offset else : 0 fi,cell_line_width)
- withpen pencircle scaled line_line_width
- withcolor line_line_color ;
- else :
+ alternative := if known line_top_shapes[i] : line_top_shapes[i] else : 1 fi ;
+ if alternative <> 0 :
+ if (alternative = 1) or (alternative = 2) or (alternative = 5) or (alternative = 6) :
+ drawarrow
+ elseif (alternative = 3) or (alternative = 7):
+ drawdblarrow
+ else :
+ draw
+ fi
+ if (alternative = 2) or (alternative = 6) :
+ reverse
+ fi
+ (
+ midtopboundary cell_t
+ shifted (if i > 1 : line_offset else : 0 fi, cell_line_width) {up} ..
+ midbottomboundary text_t
+ shifted (0,-line_distance) ..
+ {down} midtopboundary next_t
+ shifted (if i < nofcells - 1 : -line_offset else : 0 fi,cell_line_width)
+ )
+ withpen pencircle scaled
+ if known line_top_lines [i] : line_top_lines [i] else : line_line_width fi
+ withcolor
+ if known line_top_colors[i] : line_top_colors[i] else : line_line_color fi
+ if (alternative >= 5) and (alternative <= 8) :
+ dashed evenly scaled (
+ if known line_top_lines [i] : line_top_lines [i] else : line_line_width fi
+ )
+ fi
+ ;
+ fi ;
fi ;
fi ;
if bbwidth(text_b) > 0 :
@@ -330,29 +463,61 @@ def step_end_chart =
next_b := next_t ;
fi ;
if bbwidth(cell_b) > 0 :
- drawarrow midbottomboundary cell_b
- shifted (if i > 1 : line_offset else : 0 fi, -cell_line_width) {down} ..
- midtopboundary text_b shifted (0, line_distance) ..
- {up} midbottomboundary next_b shifted (if i < nofcells - 1 : -line_offset else : 0 fi,-cell_line_width)
- withpen pencircle scaled line_line_width
- withcolor line_line_color ;
- else :
+ alternative := if known line_bot_shapes[i] : line_bot_shapes[i] else : 1 fi ;
+ if alternative <> 0 :
+ if (alternative = 1) or (alternative = 2) or (alternative = 5) or (alternative = 6) :
+ drawarrow
+ elseif (alternative = 3) or (alternative = 7):
+ drawdblarrow
+ else :
+ draw
+ fi
+ if (alternative = 2) or (alternative = 6) :
+ reverse
+ fi
+ (
+ midbottomboundary cell_b
+ shifted (if i > 1 : line_offset else : 0 fi, -cell_line_width) {down} ..
+ midtopboundary text_b
+ shifted (0, line_distance) ..
+ {up} midbottomboundary next_b
+ shifted (if i < nofcells - 1 : -line_offset else : 0 fi,-cell_line_width)
+ )
+ withpen pencircle scaled
+ if known line_bot_lines [i] : line_bot_lines [i] else : line_line_width fi
+ withcolor
+ if known line_bot_colors[i] : line_bot_colors[i] else : line_line_color fi
+ if (alternative >= 5) and (alternative <= 8) :
+ dashed evenly scaled (
+ if known line_top_lines [i] : line_top_lines [i] else : line_line_width fi
+ )
+ fi
+ ;
+ fi ;
fi ;
fi ;
endfor ;
% draw top and bottom text boxes
for i=1 upto nofcells-1 :
- text_t := texts_t[i] ;
- text_b := texts_b[i] ;
- if bbwidth(text_t) > 0 :
- fill boundingbox text_t withcolor text_fill_color ;
- draw boundingbox text_t withpen pencircle scaled text_line_width withcolor text_line_color ;
- draw text_t ;
+ if bbwidth(texts_t[i]) > 0 :
+ drawpredefinedshape (
+ if known text_top_shapes[i] : text_top_shapes[i] else : 24 fi,
+ texts_t[i],
+ if known text_top_lines [i] : text_top_lines [i] else : text_line_width fi,
+ if known text_top_colors[i] : text_top_colors[i] else : text_line_color fi,
+ if known text_top_fills [i] : text_top_fills [i] else : text_fill_color fi
+ ) ;
+ draw texts_t[i] ;
fi ;
- if bbwidth(text_b) > 0 :
- fill boundingbox text_b withcolor text_fill_color ;
- draw boundingbox text_b withpen pencircle scaled text_line_width withcolor text_line_color ;
- draw text_b ;
+ if bbwidth(texts_b[i]) > 0 :
+ drawpredefinedshape (
+ if known text_bot_shapes[i] : text_bot_shapes[i] else : 24 fi,
+ texts_b[i],
+ if known text_bot_lines [i] : text_bot_lines [i] else : text_line_width fi,
+ if known text_bot_colors[i] : text_bot_colors[i] else : text_line_color fi,
+ if known text_bot_fills [i] : text_bot_fills [i] else : text_fill_color fi
+ ) ;
+ draw texts_b[i] ;
fi ;
endfor ;
if chart_vertical :
@@ -362,6 +527,8 @@ def step_end_chart =
endgroup ;
enddef ;
+% no longer working .. will do someday
+%
% start_begin_step ;
% step_cells ("\strut test 0", "\strut test 0") ;
% step_cells ("\strut test 1", "\vbox{\hsize3cm \strut oeps 1\crlf oeps 1}") ;
diff --git a/metapost/context/base/mpiv/mp-symb.mpiv b/metapost/context/base/mpiv/mp-symb.mpiv
index a84c84e82..40681adf1 100644
--- a/metapost/context/base/mpiv/mp-symb.mpiv
+++ b/metapost/context/base/mpiv/mp-symb.mpiv
@@ -12,7 +12,7 @@
%C details.
%D Instead of these symbols, you can use the \type {contnav}
-%D font by Taco Hoekwater that is derived form this file.
+%D font by Taco Hoekwater that is derived form this file.
u := 3;
h := 5u;
@@ -264,88 +264,88 @@ endfig;
beginfig(999);
-picture collection [] ;
+picture collection [] ;
-prepareglyph ;
-draw lefttriangle ;
+prepareglyph ;
+draw lefttriangle ;
finishglyph ;
-collection[201] := currentpicture ;
-currentpicture := nullpicture ;
+collection[201] := currentpicture ;
+currentpicture := nullpicture ;
-prepareglyph ;
-draw righttriangle ;
+prepareglyph ;
+draw righttriangle ;
finishglyph ;
-collection[202] := currentpicture ;
-currentpicture := nullpicture ;
+collection[202] := currentpicture ;
+currentpicture := nullpicture ;
-prepareglyph ;
-draw sidebar ;
+prepareglyph ;
+draw sidebar ;
draw lefttriangle shifted (.5s) ;
finishglyph ;
-collection[203] := currentpicture ;
-currentpicture := nullpicture ;
+collection[203] := currentpicture ;
+currentpicture := nullpicture ;
-prepareglyph ;
-draw righttriangle ;
-draw sidebar shifted (wt,0) ;
+prepareglyph ;
+draw righttriangle ;
+draw sidebar shifted (wt,0) ;
finishglyph ;
-collection[204] := currentpicture ;
-currentpicture := nullpicture ;
+collection[204] := currentpicture ;
+currentpicture := nullpicture ;
-prepareglyph ;
-draw sublefttriangle shifted s ;
+prepareglyph ;
+draw sublefttriangle shifted s ;
draw lefttriangle shifted s ;
finishglyph ;
-collection[205] := currentpicture ;
-currentpicture := nullpicture ;
+collection[205] := currentpicture ;
+currentpicture := nullpicture ;
prepareglyph ;
draw subrighttriangle ;
draw righttriangle ;
finishglyph ;
-collection[206] := currentpicture ;
-currentpicture := nullpicture ;
+collection[206] := currentpicture ;
+currentpicture := nullpicture ;
prepareglyph ;
draw midbar ;
finishglyph ;
-collection[207] := currentpicture ;
-currentpicture := nullpicture ;
+collection[207] := currentpicture ;
+currentpicture := nullpicture ;
prepareglyph ;
draw onebar ;
finishglyph ;
-collection[208] := currentpicture ;
-currentpicture := nullpicture ;
+collection[208] := currentpicture ;
+currentpicture := nullpicture ;
prepareglyph ;
draw twobar ;
draw twobar shifted (pw+hh/2,0) ;
finishglyph ;
-collection[209] := currentpicture ;
-currentpicture := nullpicture ;
+collection[209] := currentpicture ;
+currentpicture := nullpicture ;
-for i=201 upto 209 :
+for i=201 upto 209 :
collection[i] := collection[i] shifted - center collection[i] ;
-endfor ;
+endfor ;
-addto currentpicture also collection[205] shifted ( 0, 0)
+addto currentpicture also collection[205] shifted ( 0, 0)
withcolor (.3,.4,.5) ;
-addto currentpicture also collection[202] shifted ( 0,1.5h)
+addto currentpicture also collection[202] shifted ( 0,1.5h)
withcolor (.5,.6,.7) ;
-addto currentpicture also collection[201] shifted (1.5h, 0)
+addto currentpicture also collection[201] shifted (1.5h, 0)
withcolor (.6,.7,.8) ;
-addto currentpicture also collection[206] shifted (1.5h,1.5h)
+addto currentpicture also collection[206] shifted (1.5h,1.5h)
withcolor (.4,.5,.6) ;
-collection[210] := currentpicture ;
-currentpicture := nullpicture ;
+collection[210] := currentpicture ;
+currentpicture := nullpicture ;
-bboxmargin := .25u;
+bboxmargin := .25u;
fill bbox collection[210] withcolor .95(1,1,0);
-addto currentpicture also collection[210] ;
+addto currentpicture also collection[210] ;
-endfig ;
+endfig ;
end
diff --git a/metapost/context/base/mpiv/mp-tool.mpiv b/metapost/context/base/mpiv/mp-tool.mpiv
index 76459d25c..cd04b8dcb 100644
--- a/metapost/context/base/mpiv/mp-tool.mpiv
+++ b/metapost/context/base/mpiv/mp-tool.mpiv
@@ -11,8 +11,6 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-% def loadfile(expr name) = scantokens("input " & name & ";") enddef ;
-
if known context_tool : endinput ; fi ;
boolean context_tool ; context_tool := true ;
@@ -28,7 +26,9 @@ let @## = @# ;
if not known mpversion : string mpversion ; mpversion := "0.641" ; fi ;
-newinternal metapostversion ; metapostversion := scantokens(mpversion) ;
+% newinternal metapostversion ; metapostversion := scantokens(mpversion) ;
+
+newinternal metapostversion ; metapostversion := 2.0 ;
%D We always want \EPS\ conforming output, so we say:
@@ -36,6 +36,10 @@ prologues := 1 ;
warningcheck := 0 ;
mpprocset := 1 ;
+%D Handy:
+
+def nothing = enddef ;
+
%D Namespace handling:
% let exclamationmark = ! ;
@@ -89,6 +93,47 @@ enddef ;
let triplet = rgbcolor ;
let quadruplet = cmykcolor ;
+%D Image redefined, for Alan:
+
+vardef image@#(text t) =
+ save currentpicture ;
+ picture currentpicture ;
+ currentpicture := nullpicture ;
+ t ;
+ currentpicture
+ if str @# <> "" :
+ shifted (
+ mfun_labxf@# * lrcorner p
+ + mfun_labyf@# * ulcorner p
+ + (1-mfun_labxf@#-mfun_labyf@#) * llcorner p
+ )
+ fi
+enddef ;
+
+%D Variables
+
+def dispose suffix s =
+ if known s :
+ begingroup ;
+ save ss ;
+ if numeric s : numeric ss
+ elseif boolean s : boolean ss
+ elseif pair s : pair ss
+ elseif path s : path ss
+ elseif picture s : picture ss
+ elseif string s : string ss
+ elseif transform s : transform ss
+ elseif color s : color ss
+ elseif rgbcolor s : rgbcolor ss
+ elseif cmykcolor s : cmykcolor ss
+ elseif pen s : pen ss
+ else s : numeric ss
+ fi ;
+ s := ss ;
+ endgroup ;
+ fi ;
+enddef ;
+
%D Colors:
newinternal nocolormodel ; nocolormodel := 1 ;
@@ -143,6 +188,8 @@ vardef colordecimals primary c =
decimal cyanpart c & ":" & decimal magentapart c & ":" & decimal yellowpart c & ":" & decimal blackpart c
elseif rgbcolor c :
decimal redpart c & ":" & decimal greenpart c & ":" & decimal bluepart c
+ elseif string c:
+ colordecimals resolvedcolor(c)
else :
decimal c
fi
@@ -335,6 +382,42 @@ enddef;
% mfun_a_b
% enddef ;
+%D Here are some special ones, cooked up in the process of Alan's mp-node
+%D module:
+
+vardef boundingradius primary p =
+ if picture p :
+ max(
+ abs((llcorner p) shifted -center p),
+ abs((lrcorner p) shifted -center p),
+ abs((urcorner p) shifted -center p),
+ abs((ulcorner p) shifted -center p)
+ )
+ elseif pen p :
+ boundingradius image(draw makepath p ;)
+ elseif path p :
+ boundingradius image(draw p ;)
+ fi
+enddef ;
+
+vardef boundingcircle primary p =
+ fullcircle scaled 2boundingradius p shifted center p
+enddef ;
+
+vardef boundingpoint@#(expr p) =
+ if picture p : % pen?
+ ( mfun_labxf@# *ulcorner p
+ + mfun_labyf@# *lrcorner p
+ +(1-mfun_labxf@#-mfun_labyf@#)*urcorner p)
+ elseif path p :
+ boundingpoint@#(image(draw p ;))
+ %elseif pair p :
+ % p
+ %else :
+ % origin
+ fi
+enddef ;
+
%D Some missing functions can be implemented rather straightforward (thanks to
%D Taco and others):
@@ -373,6 +456,7 @@ vardef asinh primary x = ln(x+(x++1)) enddef ;
vardef sinh primary x = save xx ; xx = exp x ; (xx-1/xx)/2 enddef ;
vardef cosh primary x = save xx ; xx = exp x ; (xx+1/xx)/2 enddef ;
+vardef tanh primary x = save xx ; xx = exp x ; (xx-1/xx)/(xx+1/xx) enddef ;
%D Like mod, but useful for anglesl it returns (-.5d,+.5d] and is used
%D in for instance mp-chem.
@@ -715,7 +799,7 @@ primarydef p xyscaled q = % secundarydef does not work out well
endgroup
enddef ;
-%D Some personal code that might move to another module
+%D Some personal code that might move to another module (todo: save).
def set_grid(expr w, h, nx, ny) =
boolean grid[][] ; boolean grid_full ;
@@ -789,7 +873,7 @@ secondarydef p intersection_point q =
begingroup
save x_, y_ ;
(x_,y_) = p intersectiontimes q ;
- if x_<0 :
+ if x_< 0 :
intersection_found := false ;
center p % origin
else :
@@ -817,36 +901,59 @@ enddef ;
%D Some colors.
-def colortype(expr c) =
- if cmykcolor c : cmykcolor elseif rgbcolor c : rgbcolor else : grayscale fi
+def resolvedcolor(expr s) =
+ .5white
+enddef ;
+
+let normalwithcolor = withcolor ;
+
+def withcolor expr c =
+ normalwithcolor if string c : resolvedcolor(c) else : c fi
enddef ;
-vardef whitecolor(expr c) =
- if cmykcolor c : (0,0,0,0) elseif rgbcolor c : (1,1,1) else : 1 fi
+vardef colortype expr c =
+ if cmykcolor c : cmykcolor
+ elseif rgbcolor c : rgbcolor
+ elseif numeric c : grayscale
+ fi
+enddef ;
+
+vardef whitecolor expr c =
+ if cmykcolor c : (0,0,0,0)
+ elseif rgbcolor c : (1,1,1)
+ elseif numeric c : 1
+ elseif string c : whitecolor resolvedcolor(c)
+ fi
enddef ;
vardef blackcolor expr c =
- if cmykcolor c : (0,0,0,1) elseif rgbcolor c : (0,0,0) else : 0 fi
+ if cmykcolor c : (0,0,0,1)
+ elseif rgbcolor c : (0,0,0)
+ elseif numeric c : 0
+ elseif string c : blackcolor resolvedcolor(c)
+ fi
enddef ;
-vardef complementary expr c = (
- if cmykcolor c : (1,1,1,1) -
- elseif rgbcolor c : (1,1,1) -
- elseif pair c : (1,1) -
- elseif numeric c : 1 -
- fi c
-) enddef ;
+vardef complementary expr c =
+ if cmykcolor c : (1,1,1,1) - c
+ elseif rgbcolor c : (1,1,1) - c
+ elseif pair c : (1,1) - c
+ elseif numeric c : 1 - c
+ elseif string c : complementary resolvedcolor(c)
+ fi
+enddef ;
vardef complemented expr c =
save m ;
if cmykcolor c : m := max(cyanpart c, magentapart c, yellowpart c, blackpart c) ;
- ( (m,m,m,m) -
+ (m,m,m,m) - c
elseif rgbcolor c : m := max(redpart c, greenpart c, bluepart c) ;
- ( (m,m,m) -
+ (m,m,m) - c
elseif pair c : m := max(xpart c, ypart c) ;
- ( (m,m) -
- elseif numeric c : ( m -
- fi c )
+ (m,m) - c
+ elseif numeric c : m - c
+ elseif string c : complemented resolvedcolor(c)
+ fi
enddef ;
%D Well, this is the dangerous and naive version:
@@ -971,6 +1078,56 @@ primarydef p randomshifted s =
endgroup
enddef ;
+vardef mfun_randomized_path(expr p,s) =
+ for i=0 upto length(p)-1 :
+ (point i of p) .. controls
+ ((postcontrol i of p) randomshifted s) and
+ ((precontrol (i+1) of p) randomshifted s) ..
+ endfor
+ if cycle p :
+ cycle
+ else :
+ (point length(p) of p)
+ fi
+enddef;
+
+vardef mfun_randomized_picture(expr p,s)(text rnd) =
+ save currentpicture ;
+ picture currentpicture ;
+ currentpicture := nullpicture ;
+ for i within p :
+ addto currentpicture
+ if stroked i :
+ doublepath pathpart i rnd s
+ dashed dashpart i
+ withpen penpart i
+ withcolor colorpart i
+ withprescript prescriptpart i
+ withpostscript postscriptpart i
+ elseif filled i :
+ contour pathpart i rnd s
+ withpen penpart i
+ withcolor colorpart i
+ withprescript prescriptpart i
+ withpostscript postscriptpart i
+ else :
+ also i
+ fi
+ ;
+ endfor ;
+ currentpicture
+enddef ;
+
+primarydef p randomizedcontrols s = (
+ if path p :
+ mfun_randomized_path(p,s)
+ elseif picture p :
+ mfun_randomized_picture(p,s)(randomizedcontrols)
+ else :
+ p randomized s
+ fi
+) enddef ;
+
primarydef p randomized s = (
if path p :
for i=0 upto length(p)-1 :
@@ -1014,7 +1171,12 @@ primarydef p randomized s = (
else :
((uniformdeviate s) * p)
fi
+ elseif string p :
+ (resolvedcolor(p)) randomized s
+ elseif picture p :
+ mfun_randomized_picture(p,s)(randomized)
else :
+ % p - s/2 + uniformdeviate s % would have been better but we want to be positive
p + uniformdeviate s
fi
) enddef ;
@@ -1165,6 +1327,15 @@ vardef arrowheadonpath (expr p, s) =
arrowhead p if s < 1 : cutafter (point (s*arclength(p) + (ahlength/2)) on p) fi
enddef ;
+def resetarrows =
+ hide (
+ ahlength := 4 ;
+ ahangle := 45 ;
+ ahvariant := 0 ;
+ ahdimple := 1/5 ;
+ )
+enddef ;
+
%D Points.
def drawpoint expr c =
@@ -1384,13 +1555,12 @@ extra_beginfig := extra_beginfig & " miterlimit := 10 ; " ; % restores
extra_beginfig := extra_beginfig & " linejoin := rounded ; " ; % restores
extra_beginfig := extra_beginfig & " linecap := rounded ; " ; % restores
-%D Normally, arrowheads don't scale well. So we provide a
-%D hack.
+%D Normally, arrowheads don't scale well. So we provide a hack.
boolean autoarrows ; autoarrows := false ;
numeric ahfactor ; ahfactor := 2.5 ;
-def set_ahlength (text t) =
+def set_ahlength (text t) = % called to often
% ahlength := (ahfactor*pen_size(_op_ t)) ; % _op_ added
% problem: _op_ can contain color so a no-go, we could apply the transform
% but i need to figure out the best way (fakepicture and take components).
@@ -1413,31 +1583,158 @@ vardef arrowpath expr p = % patch by Peter Rolf: supports squared pen and shifti
))
enddef;
-% def _finarr text t =
-% if autoarrows : set_ahlength (t) fi ;
-% draw arrowpath _apth t ; % arrowpath added
-% filldraw arrowhead _apth t ;
-% enddef;
+% New experimental extension: also handling pictures:
+%
+% drawarrow fullsquare scaled 2cm withcolor green ;
+% drawarrow fullcircle scaled 3cm withcolor green ;
+% drawarrow image (
+% draw fullsquare scaled 4cm withcolor red ;
+% draw fullcircle scaled 5cm withcolor blue ;
+% ) ;
+% currentpicture := currentpicture shifted (-bbwidth(currentpicture)-1cm,0) ;
+% drawdblarrow fullsquare scaled 2cm withcolor green ;
+% drawdblarrow fullcircle scaled 3cm withcolor green ;
+% drawdblarrow image (
+% draw fullsquare scaled 4cm withcolor red ;
+% draw fullcircle scaled 5cm withcolor blue ;
+% ) ;
+
+vardef stroked_paths(expr p) =
+ save n ; numeric n ; n := 0 ;
+ for i within p :
+ if stroked i :
+ n := n + 1 ;
+ fi
+ endfor ;
+ n
+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 mfun_decoration_i expr i =
+ withpen penpart i
+ withcolor colorpart i
+ withprescript prescriptpart i
+ withpostscript postscriptpart i
+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;
+% We could collapse all in one helper but in context we nowaways don't want
+% the added obscurity. Tokens come cheap.
-def _finarr text t =
- if autoarrows : set_ahlength (t) fi ;
- draw arrowpath _apth t ; % arrowpath added
- fillup arrowhead _apth t ;
-enddef;
+numeric mfun_arrow_snippets ;
+numeric mfun_arrow_count ;
+
+def drawarrow expr p =
+ begingroup ;
+ save mfun_arrow_path ;
+ path mfun_arrow_path ;
+ if path p :
+ mfun_arrow_path := p ;
+ expandafter mfun_draw_arrow_path
+ elseif picture p :
+ save mfun_arrow_picture ;
+ picture mfun_arrow_picture ;
+ mfun_arrow_picture := p ;
+ expandafter mfun_draw_arrow_picture
+ else :
+ expandafter mfun_draw_arrow_nothing
+ fi
+enddef ;
+
+def drawdblarrow expr p =
+ begingroup ;
+ save mfun_arrow_path ;
+ path mfun_arrow_path ;
+ if path p :
+ mfun_arrow_path := p ;
+ expandafter mfun_draw_arrow_path_double
+ elseif picture p :
+ save mfun_arrow_picture ;
+ picture mfun_arrow_picture ;
+ mfun_arrow_picture := p ;
+ expandafter mfun_draw_arrow_picture_double
+ else :
+ expandafter mfun_draw_arrow_nothing
+ fi
+enddef ;
+
+def mfun_draw_arrow_nothing text t =
+enddef ;
+
+% The path is shortened so that the arrow head extends it to the original
+% length. In case of a double arrow the path gets shortened twice.
+
+def mfun_draw_arrow_path text t =
+ if autoarrows :
+ set_ahlength(t) ;
+ fi
+ draw arrowpath mfun_arrow_path t ;
+ fillup arrowhead mfun_arrow_path t ;
+ endgroup ;
+enddef ;
+
+def mfun_draw_arrow_path_double text t =
+ if autoarrows :
+ set_ahlength(t) ;
+ fi
+ draw arrowpath (reverse arrowpath mfun_arrow_path) t ;
+ fillup arrowhead mfun_arrow_path t ;
+ fillup arrowhead reverse mfun_arrow_path t ;
+ endgroup ;
+enddef ;
+
+% The picture variant is not treating each path but only the first and
+% last path. This can be somewhat counterintuitive but is needed for Alan's
+% macros. So here the last and in case of a double path first paths in a
+% picture get the shortening.
+
+def mfun_with_arrow_picture (text t) =
+ mfun_arrow_count := 0 ;
+ mfun_arrow_snippets := stroked_paths(mfun_arrow_picture) ;
+ for i within mfun_arrow_picture :
+ if stroked i :
+ mfun_arrow_count := mfun_arrow_count + 1 ;
+ mfun_arrow_path := pathpart i ;
+ t
+ fi ;
+ endfor ;
+enddef ;
+
+def mfun_draw_arrow_picture text t =
+ if autoarrows :
+ set_ahlength(t) ;
+ fi
+ mfun_with_arrow_picture (
+ if mfun_arrow_count = mfun_arrow_snippets :
+ draw arrowpath mfun_arrow_path mfun_decoration_i i t ;
+ fillup arrowhead mfun_arrow_path mfun_decoration_i i t ;
+ else :
+ draw mfun_arrow_path mfun_decoration_i i t ;
+ fi ;
+ )
+ endgroup ;
+enddef ;
+
+def mfun_draw_arrow_picture_double text t =
+ if autoarrows :
+ set_ahlength(t) ;
+ fi
+ mfun_with_arrow_picture (
+ draw
+ if mfun_arrow_count = 1 :
+ arrowpath reverse
+ fi
+ if mfun_arrow_count = mfun_arrow_snippets :
+ arrowpath
+ fi
+ mfun_arrow_path mfun_decoration_i i t ;
+ if mfun_arrow_count = 1 :
+ fillup arrowhead reverse mfun_arrow_path mfun_decoration_i i t ;
+ fi
+ if mfun_arrow_count = mfun_arrow_snippets :
+ fillup arrowhead mfun_arrow_path mfun_decoration_i i t ;
+ fi
+ )
+ endgroup ;
+enddef ;
%D Handy too ......
@@ -1487,9 +1784,7 @@ enddef ;
%D To be documented.
-path freesquare ;
-
-freesquare := (
+path freesquare ; freesquare := (
(-1,0) -- (-1,-1) -- (0,-1) -- (+1,-1) --
(+1,0) -- (+1,+1) -- (0,+1) -- (-1,+1) -- cycle
) scaled .5 ;
@@ -1637,7 +1932,7 @@ enddef ;
% nice: currentpicture := inverted currentpicture ;
-primarydef p uncolored c =
+primarydef p uncolored c = % not complete ... needs text and scripts and ...
if color p :
c - p
else :
@@ -1699,6 +1994,8 @@ vardef grayed primary p =
tripled(.30*(1-cyanpart i)+.59*(1-magentapart i)+.11*(1-yellowpart i)+blackpart i)
elseif greycolor p :
p
+ elseif string p :
+ grayed resolvedcolor(p)
elseif picture p :
image (
for i within p :
@@ -1854,14 +2151,16 @@ inner end ;
% this will be redone (when needed) using scripts and backend handling
-let normalwithcolor = withcolor ;
+let mfun_remap_colors_normalwithcolor = normalwithcolor ;
def remapcolors =
- def withcolor primary c = normalwithcolor remappedcolor(c) enddef ;
+ def normalwithcolor primary c =
+ mfun_remap_colors_normalwithcolor remappedcolor(c)
+ enddef ;
enddef ;
def normalcolors =
- let withcolor = normalwithcolor ;
+ let normalwithcolor = mfun_remap_colors_normalwithcolor ;
enddef ;
def resetcolormap =
@@ -1912,7 +2211,7 @@ def reprocess suffix p = p := repathed (22,p) enddef ; % no attributes
vardef repathed (expr mode, p) text t =
begingroup ;
if mode = 0 :
- save withcolor ;
+ save normalwithcolor ;
remapcolors ;
fi ;
save _p_, _pp_, _ppp_, _f_, _b_, _t_ ;
@@ -2138,8 +2437,22 @@ vardef mfun_straightened(expr sign, p) =
_q_
enddef ;
+% vardef mfun_straightened(expr sign, p) =
+% save lp, lq, q ; path q ; q := p ;
+% lp := length(p) ;
+% forever :
+% q := mfun_do_straightened(sign,q) ;
+% lq := length(q) ;
+% exitif lp = lq ;
+% lp := lq ;
+% endfor ;
+% q
+% enddef ;
+
+% can be optimized:
+
vardef mfun_do_straightened(expr sign, p) =
- if length(p)>2 : % was 1, but straight lines are ok
+ if length(p) > 2 : % was 1, but straight lines are ok
save pp ; path pp ;
pp := point 0 of p ;
for i=1 upto length(p)-1 :
@@ -2149,10 +2462,10 @@ vardef mfun_do_straightened(expr sign, p) =
endfor ;
save n, ok ; numeric n ; boolean ok ;
n := length(pp) ; ok := false ;
- if n>2 :
- for i=0 upto n : % evt hier ook round
+ if n > 2 :
+ for i=0 upto n :
if unitvector(round(point i of pp - point if i=0 : n else : i-1 fi of pp)) <>
- sign * unitvector(round(point if i=n : 0 else : i+1 fi of pp - point i of pp)) :
+ sign * unitvector(round(point if i=n : 0 else : i+1 fi of pp - point i of pp)) :
if ok :
--
else :
@@ -2198,7 +2511,7 @@ vardef unspiked expr p = (
path originpath ; originpath := origin -- cycle ;
vardef unitvector primary z =
- if abs z = abs origin : z else : z/abs z fi
+ if abs z = abs origin : z else : z/abs z fi % hm, abs origin is just origin
enddef;
% also new
@@ -2523,41 +2836,41 @@ vardef undecorated (text imagedata) text decoration =
currentpicture
enddef ;
-if metapostversion < 1.770 :
-
- vardef decorated (text imagedata) text decoration =
- save mfun_decorated_path, currentpicture ;
- picture mfun_decorated_path, currentpicture ;
- currentpicture := nullpicture ;
- imagedata ;
- mfun_decorated_path := currentpicture ;
- currentpicture := nullpicture ;
- for i within mfun_decorated_path :
- addto currentpicture
- if stroked i :
- doublepath pathpart i
- dashed dashpart i
- withpen penpart i
- withcolor colorpart i
- decoration
- elseif filled i :
- contour pathpart i
- withpen penpart i
- withcolor colorpart i
- decoration
- elseif textual i :
- also i
- withcolor colorpart i
- decoration
- else :
- also i
- fi
- ;
- endfor ;
- currentpicture
- enddef ;
-
-else:
+% if metapostversion < 1.770 :
+%
+% vardef decorated (text imagedata) text decoration =
+% save mfun_decorated_path, currentpicture ;
+% picture mfun_decorated_path, currentpicture ;
+% currentpicture := nullpicture ;
+% imagedata ;
+% mfun_decorated_path := currentpicture ;
+% currentpicture := nullpicture ;
+% for i within mfun_decorated_path :
+% addto currentpicture
+% if stroked i :
+% doublepath pathpart i
+% dashed dashpart i
+% withpen penpart i
+% withcolor colorpart i
+% decoration
+% elseif filled i :
+% contour pathpart i
+% withpen penpart i
+% withcolor colorpart i
+% decoration
+% elseif textual i :
+% also i
+% withcolor colorpart i
+% decoration
+% else :
+% also i
+% fi
+% ;
+% endfor ;
+% currentpicture
+% enddef ;
+%
+% else:
vardef decorated (text imagedata) text decoration =
save mfun_decorated_path, currentpicture ;
@@ -2597,7 +2910,7 @@ else:
currentpicture
enddef ;
-fi ;
+% fi ;
vardef redecorated (text imagedata) text decoration =
save mfun_decorated_path, currentpicture ;
@@ -2726,4 +3039,431 @@ enddef;
extra_endfig := extra_endfig & "mfun_apply_max_dimensions ;" ;
+%D Bonus shapes (need along):
+
+path unittriangle, fulltriangle ; % not really units but circle based
+
+unittriangle := point 0 along unitcircle
+ -- point 1/3 along unitcircle
+ -- point 2/3 along unitcircle
+ -- cycle ;
+fulltriangle := point 0 along fullcircle
+ -- point 1/3 along fullcircle
+ -- point 2/3 along fullcircle
+ -- cycle ;
+
+%D Kind of special and undocumented. On Wikipedia one can find examples
+%D of quick sort routines. Here we have a variant that permits a
+%D method.
+
+% vardef listsize(suffix list) =
+% numeric len ; len := 0 ;
+% forever :
+% exitif unknown list[len+1] ;
+% len := len + 1 ;
+% endfor ;
+% len
+% enddef ;
+
+vardef listsize(suffix list) =
+ numeric len ; len := 1 ;
+ forever :
+ exitif unknown list[len] ;
+ len := len + 1 ;
+ endfor ;
+ len if unknown list[0] : - 1 fi
+enddef ;
+
+vardef listlast(suffix list) =
+ numeric len ; len := if known list[0] : 0 else : 1 fi ;
+ forever :
+ len := len + 1 ;
+ exitif unknown list[len] ;
+ endfor ;
+ len - 1
+enddef ;
+
+vardef mfun_quick_sort(suffix list)(expr _min_, _max_)(text what) =
+ save l, r, m ;
+ numeric l ; l := _min_ ;
+ numeric r ; r := _max_ ;
+ numeric m ; m := floor(.5[_min_,_max_]) ;
+ _mid_ := what list[m] ;
+ forever :
+ exitif l >= r ;
+ forever :
+ exitif l > _max_ ;
+ % exitif (what list[l]) >= (what list[m]) ;
+ exitif (what list[l]) >= _mid_ ;
+ l := l + 1 ;
+ endfor ;
+ forever :
+ exitif r < _min_ ;
+ % exitif (what list[m]) >= (what list[r]) ;
+ exitif _mid_ >= (what list[r]) ;
+ r := r - 1 ;
+ endfor ;
+ if l <= r :
+ temp := list[l] ;
+ list[l] := list[r] ;
+ list[r] := temp ;
+ l := l + 1 ;
+ r := r - 1 ;
+ fi ;
+ endfor ;
+ if _min_ < r :
+ mfun_quick_sort(list)(_min_,r)(what) ;
+ fi ;
+ if l < _max_ :
+ mfun_quick_sort(list)(l,_max_)(what) ;
+ fi ;
+enddef ;
+
+vardef sortlist(suffix list)(text what) =
+ save _max_ ; numeric _max_ ;
+ save _mid_ ; numeric _mid_ ;
+ save temp ;
+ % _max_ := listsize(list) ;
+ _max_ := listlast(list) ;
+ if pair list[_max_] :
+ pair temp ;
+ else :
+ numeric temp ;
+ fi ;
+ if pair what list[_max_] :
+ pair _mid_ ;
+ else :
+ numeric _mid_ ;
+ fi ;
+ if _max_ > 1 :
+ % mfun_quick_sort(list)(1,_max_)(what) ;
+ mfun_quick_sort(list)(if known list[0] : 0 else : 1 fi,_max_)(what) ;
+ fi ;
+enddef ;
+
+vardef uniquelist(suffix list) =
+ % this one will be defined later
+enddef ;
+
+vardef copylist(suffix list, target) =
+ save i ; i := 1 ;
+ forever :
+ exitif unknown list[i] ;
+ target[i] := list[i] ;
+ i := i + 1 ;
+ endfor ;
+enddef ;
+
+vardef listtolines(suffix list) =
+ list[1] for i=2 upto listsize(list) : -- list[i] endfor
+enddef ;
+
+vardef listtocurves(suffix list) =
+ list[1] for i=2 upto listsize(list) : .. list[i] endfor
+enddef ;
+
+%D The sorter is used in:
+
+% not yet ok
+
+vardef shapedlist(suffix p) = % takes a list of paths
+ save l ; pair l[] ;
+ save r ; pair r[] ;
+ save i ; i := 1 ;
+ save n ; n := 0 ;
+ forever :
+ exitif unknown p[i] ;
+ n := n + 1 ;
+ l[n] := ulcorner p[i] ;
+ r[n] := urcorner p[i] ;
+ n := n + 1 ;
+ l[n] := llcorner p[i] ;
+ r[n] := lrcorner p[i] ;
+ i := i + 1 ;
+ endfor ;
+ for i = 3 upto n :
+ if xpart r[i] < xpart r[i-1] :
+ r[i] := (xpart r[i],ypart r[i-1]) ;
+ elseif xpart r[i] > xpart r[i-1] :
+ r[i-1] := (xpart r[i-1],ypart r[i]) ;
+ fi ;
+ if xpart l[i] < xpart l[i-1] :
+ l[i-1] := (xpart l[i-1],ypart l[i]) ;
+ elseif xpart l[i] > xpart l[i-1] :
+ l[i] := (xpart l[i],ypart l[i-1]) ;
+ fi ;
+ endfor ;
+ if n > 0 :
+ simplified (
+ for i = 1 upto n : r[i] -- endfor
+ for i = n downto 1 : l[i] -- endfor
+ cycle
+ )
+ else :
+ origin -- cycle
+ fi
+enddef ;
+
+%D Dumping is fake anyway but let's keep this:
+
let dump = relax ;
+
+%D Loading modules can be done with:
+
+def loadmodule expr name = % no vardef
+ % input can't be used directly in a macro
+ if unknown scantokens("context_" & name) :
+ save s ; string s ;
+ % s := "mp-" & name & ".mpiv" ;
+ % message("loading module",s) ;
+ % s := "input " & s ;
+ s := "input " & "mp-" & name & ".mpiv" ;
+ expandafter scantokens expandafter s
+ fi ;
+enddef ;
+
+%D Handy for backgrounds:
+
+def drawpathwithpoints expr p =
+ do_drawpathwithpoints(p)
+enddef ;
+
+def do_drawpathwithpoints(expr p) text t =
+ draw p t ;
+ if length(p) > 2 :
+ begingroup ;
+ save _c_ ; path _c_ ;
+ save _p_; picture _p_ ;
+ _p_ := image (
+ _c_ := if cycle p : fullsquare else : fullcircle fi scaled 6pt ;
+ for i=0 upto length(p) if cycle p : -1 fi :
+ fill _c_ shifted point i of p withcolor white ;
+ draw _c_ shifted point i of p withcolor white/2 withpen pencircle scaled .5pt ;
+ if (i = 0) and cycle p :
+ _c_ := fullcircle scaled 6pt ;
+ fi ;
+ endfor ;
+ for i=0 upto length(p) if cycle p : -1 fi :
+ draw textext("\infofont " & decimal i) ysized 2pt shifted point i of p ;
+ endfor ;
+ ) ;
+ setbounds _p_ to boundingbox p ;
+ draw _p_ ;
+ fi ;
+enddef ;
+
+%D These new helpers are by Alan and are used in for instance the mp-node
+%D module.
+
+newinternal crossingdebug ; crossingdebug := 0 ;
+newinternal crossingscale ; crossingscale := 10 ;
+newinternal crossingnumbermax ; crossingnumbermax := 1000 ;
+
+% primary, secondary or tertiary? always hard to decide but primary makes sense
+
+vardef infotext@#(expr txt, ysize) =
+ textext@#("\infofont " & if numeric txt : decimal fi txt) ysized ysize
+enddef ;
+
+primarydef p crossingunder q =
+ begingroup
+ save pic ; picture pic ; pic := nullpicture ;
+ if picture p :
+ for i within p :
+ if stroked i :
+ addto pic also image(draw pathpart i crossingunder q) ;
+ fi
+ endfor
+ elseif path p :
+ save n, t, a, b, c, r, bcuttings, hold ;
+ numeric n, t[], hold ;
+ path a, b, c, r, bcuttings, hold[] ;
+ c := makepath(currentpen scaled crossingscale) ;
+ r := if picture q : boundingbox fi q ;
+ t[0] := n := hold := 0 ;
+ a := p ;
+ % The cutbefore/cutafter using c below prevents endless loops!
+ %forever : % find all intersections
+ for i=1 upto crossingnumbermax : % safeguard
+ clearxy ; z = a intersectiontimes r ;
+ if x < 0 :
+ exitif hold < 1 ;
+ a := hold[hold] ; hold := hold - 1 ;
+ clearxy ; z = a intersectiontimes r ;
+ fi
+ (t[incr n], whatever) = p intersectiontimes point x of a ;
+ if x = 0 :
+ a := a cutbefore c shifted point x of a ;
+ elseif x = length a :
+ a := a cutafter c shifted point x of a ;
+ else : % before or after?
+ b := subpath (0,x) of a cutafter c shifted point x of a ;
+ bcuttings := cuttings ;
+ a := subpath (x,length a) of a cutbefore c shifted point x of a ;
+ clearxy ; z = a intersectiontimes r ;
+ if x < 0 :
+ a := b ;
+ cuttings := bcuttings ;
+ else :
+ if length bcuttings > 0 :
+ clearxy ; z = b intersectiontimes r ;
+ if x >= 0 :
+ hold[incr hold] := b ;
+ fi
+ fi
+ fi
+ fi
+ if length cuttings = 0 : % a single point: nothing cut
+ exitif hold < 1 ;
+ a := hold[hold] ; hold := hold - 1 ;
+ fi
+ if i = crossingnumbermax :
+ message("crossingunder reached maximum " & decimal i &
+ " intersections.");
+ fi
+ endfor
+
+ if n = 0 : % No crossings, we return the PATH
+ save pic ; path pic ; pic := p ;
+ else : % n>0
+ sortlist(t,) ;
+ % we add too much, maybe a test is needed
+ t[incr n] = length p if cycle p : + t[1] fi ;
+% save tt[] ; numeric tt[] ; uniquelist(t,tt) ; t := tt ;
+ % Now, n>1 !
+ % t[0] is the first point of the path and t[n] is the last point
+ % (or the first intersection beyond the length if cyclic)
+ save m ; m := 0 ;
+ for i=if cycle p: 2 else: 1 fi upto n :
+ % skip the first segment if cyclic
+ % as it gets repeated (fully) at the end.
+ if crossingdebug > 0 :
+ if crossingdebug = 1 :
+ addto pic doublepath c shifted point t[i] of p
+ withpen currentpen withtransparency(1,.5) ;
+ elseif crossingdebug = 2 :
+ addto pic also
+ infotext (incr m,crossingscale/5)
+ shifted point t[i] of p ;
+ fi
+ fi
+ a := subpath (t[i-1],t[i]) of p
+ if i > 1 :
+ cutbefore (c shifted point t[i-1] of p)
+ fi
+ if (i < n) or (cycle p) :
+ cutafter (c shifted point t[i] of p)
+ fi ;
+ if (not picture q) or (a outsideof q) :
+ addto pic doublepath a withpen currentpen ;
+ fi
+ endfor
+ fi
+ fi
+ pic
+ endgroup
+enddef ;
+
+primarydef p insideof q =
+ begingroup
+ save pth, pic, t ;
+ path pth ; picture pic ;
+ pic := if path q : image(draw q;) else : q fi ;
+ pth := p -- center pic ;
+ (t, whatever) = pth intersectiontimes boundingbox pic ;
+ t < 0
+ endgroup
+enddef ;
+
+% primarydef p insideof q =
+% if (path q or picture q) :
+% if (path p or picture p) :
+% (xpart llcorner p > xpart llcorner q) and
+% (xpart urcorner p < xpart urcorner q) and
+% (ypart llcorner p > ypart llcorner q) and
+% (ypart urcorner p < ypart urcorner q)
+% elseif pair p :
+% (xpart p > xpart llcorner q) and
+% (xpart p < xpart urcorner q) and
+% (ypart p > ypart llcorner q) and
+% (ypart p < ypart urcorner q)
+% fi
+% elseif (numeric p and pair q) :
+% % range check
+% (p >= xpart q) and (p <= ypart q)
+% else : % maybe triplets and such
+% false
+% fi
+% enddef ;
+
+primarydef p outsideof q =
+ not (p insideof q)
+enddef ;
+
+%D Also handy:
+
+vardef circularpath primary n =
+ reverse (for i=0 step 2/n until 8-2/n+2eps: point i of fullcircle .. endfor cycle) rotated 90
+enddef ;
+
+vardef squarepath primary n =
+ for i=0 step 1/n until 4-1/n + 2eps: point i of fullsquare -- endfor cycle
+enddef ;
+
+vardef linearpath primary n =
+ origin for i=1/n step 1/n until 1-1/n + 2eps: -- point i of (origin--(1,0)) endfor
+enddef ;
+
+%D A nice tracing helper:
+
+color pensilcolor ; pensilcolor := .5red ;
+newinternal pensilstep ; pensilstep := 1/25 ;
+
+vardef pensilled(expr p, q) =
+ image (
+ draw p withcolor pensilcolor withpen q ;
+ for i = 0 step pensilstep until length(p) + eps:
+ draw point i of p withcolor white withtransparency (1,.5) withpen q ;
+ endfor ;
+ )
+enddef ;
+
+%D Easy to forget but handy for manuals:
+
+vardef tolist(suffix l)(text t) =
+ save n ; n := 1 ;
+ for p = t :
+ if numeric p :
+ n := p ;
+ dispose(l[n])
+ elseif pair p :
+ l[n] := p ;
+ n := n + 1 ;
+ elseif path p :
+ for i=0 step 1 until length(p) :
+ l[n] := point i of p ;
+ n := n + 1 ;
+ endfor ;
+ else :
+ % ignore
+ fi ;
+ endfor ;
+ forever :
+ exitif unknown l[n] ;
+ dispose(l[n])
+ n := n + 1 ;
+ endfor ;
+enddef ;
+
+vardef topath(suffix p)(text t) =
+ save i ; i := if known p[1] : 2 ; p[1] elseif known p[0] : 1 ; p[0] else : 0 ; origin fi
+ forever :
+ exitif unknown p[i] ;
+ t p[i]
+ hide(i := i + 1)
+ endfor
+enddef ;
+
+vardef tocycle(suffix p)(text t) =
+ topath(p,t) t cycle
+enddef ;
diff --git a/scripts/context/lua/mtx-cache.lua b/scripts/context/lua/mtx-cache.lua
index bff1cb496..56d3df188 100644
--- a/scripts/context/lua/mtx-cache.lua
+++ b/scripts/context/lua/mtx-cache.lua
@@ -11,7 +11,7 @@ local helpinfo = [[
<application>
<metadata>
<entry name="name">mtx-cache</entry>
- <entry name="detail">ConTeXt & MetaTeX Cache Management</entry>
+ <entry name="detail">ConTeXt &amp; MetaTeX Cache Management</entry>
<entry name="version">0.10</entry>
</metadata>
<flags>
@@ -22,13 +22,19 @@ local helpinfo = [[
<flag name="list"><short>show cache</short></flag>
</subcategory>
<subcategory>
- <flag name="all"><short>all (not yet implemented)</short></flag>
+ <flag name="fonts"><short>only wipe fonts</short></flag>
</subcategory>
</category>
</flags>
</application>
]]
+
+local find = string.find
+local filesuffix, replacesuffix = file.suffix, file.replacesuffix
+local isfile = lfs.isfile
+local remove = os.remove
+
local application = logs.application {
name = "mtx-cache",
banner = "ConTeXt & MetaTeX Cache Management 0.10",
@@ -45,7 +51,7 @@ local function collect(path)
local tmas, tmcs, rest = { }, { }, { }
for i=1,#all do
local name = all[i]
- local suffix = file.suffix(name)
+ local suffix = filesuffix(name)
if suffix == "tma" then
tmas[#tmas+1] = name
elseif suffix == "tmc" then
@@ -70,19 +76,22 @@ end
local function purge(banner,path,list,all)
report("%s: %s",banner,path)
report()
+ local fonts = environment.argument("fonts")
local n = 0
for i=1,#list do
local filename = list[i]
- if string.find(filename,"luatex%-cache") then -- safeguard
- if all then
- os.remove(filename)
+ if find(filename,"luatex%-cache") then -- safeguard
+ if fonts and not find(filename,"fonts") then
+ -- skip
+ elseif all then
+ remove(filename)
n = n + 1
- else
- local suffix = file.suffix(filename)
+ elseif not fonts or find(filename,"fonts") then
+ local suffix = filesuffix(filename)
if suffix == "tma" then
- local checkname = file.replacesuffix(filename,"tma","tmc")
- if lfs.isfile(checkname) then
- os.remove(filename)
+ local checkname = replacesuffix(filename,"tma","tmc")
+ if isfile(checkname) then
+ remove(filename)
n = n + 1
end
end
diff --git a/scripts/context/lua/mtx-context.lua b/scripts/context/lua/mtx-context.lua
index 84254d570..6863cffb2 100644
--- a/scripts/context/lua/mtx-context.lua
+++ b/scripts/context/lua/mtx-context.lua
@@ -1,4 +1,4 @@
-if not modules then modules = { } end modules ['mtx-context'] = {
+if not modules then modules = { } end modules['mtx-context'] = {
version = 1.001,
comment = "companion to mtxrun.lua",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
@@ -12,7 +12,7 @@ if not modules then modules = { } end modules ['mtx-context'] = {
local type, next, tostring, tonumber = type, next, tostring, tonumber
local format, gmatch, match, gsub, find = string.format, string.gmatch, string.match, string.gsub, string.find
local quote, validstring = string.quote, string.valid
-local concat = table.concat
+local sort, concat, insert, sortedhash = table.sort, table.concat, table.insert, table.sortedhash
local settings_to_array = utilities.parsers.settings_to_array
local appendtable = table.append
local lpegpatterns, lpegmatch, Cs, P = lpeg.patterns, lpeg.match, lpeg.Cs, lpeg.P
@@ -34,7 +34,7 @@ local formatters = string.formatters
local application = logs.application {
name = "mtx-context",
- banner = "ConTeXt Process Management 0.63",
+ banner = "ConTeXt Process Management 1.01",
-- helpinfo = helpinfo, -- table with { category_a = text_1, category_b = text_2 } or helpstring or xml_blob
helpinfo = "mtx-context.xml",
}
@@ -159,6 +159,67 @@ local defaultformats = {
"cont-nl",
}
+-- purging files (we should have an mkii and mkiv variants)
+
+local generic_files = {
+ "texexec.tex", "texexec.tui", "texexec.tuo",
+ "texexec.tuc", "texexec.tua",
+ "texexec.ps", "texexec.pdf", "texexec.dvi",
+ "cont-opt.tex", "cont-opt.bak"
+}
+
+local obsolete_results = {
+ "dvi",
+}
+
+local temporary_runfiles = {
+ "tui", -- mkii two pass file
+ "tua", -- mkiv obsolete
+ "tup", "ted", "tes", -- texexec
+ "top", -- mkii options file
+ "log", -- tex log file
+ "tmp", -- mkii buffer file
+ "run", -- mkii stub
+ "bck", -- backup (obsolete)
+ "rlg", -- resource log
+ "ctl", --
+ "mpt", "mpx", "mpd", "mpo", "mpb", -- metafun
+ "prep", -- context preprocessed
+ "pgf", -- tikz
+ "aux", "blg", -- bibtex
+}
+
+local temporary_suffixes = {
+ "prep", -- context preprocessed
+}
+local synctex_runfiles = {
+ "synctex", "synctex.gz", "syncctx" -- synctex
+}
+
+local persistent_runfiles = {
+ "tuo", -- mkii two pass file
+ "tub", -- mkii buffer file
+ "top", -- mkii options file
+ "tuc", -- mkiv two pass file
+ "bbl", -- bibtex
+}
+
+local special_runfiles = {
+ "%-mpgraph", "%-mprun", "%-temp%-"
+}
+
+local function purge_file(dfile,cfile)
+ if cfile and validfile(cfile) then
+ if removefile(dfile) then
+ return filebasename(dfile)
+ end
+ elseif dfile then
+ if removefile(dfile) then
+ return filebasename(dfile)
+ end
+ end
+end
+
-- process information
local ctxrunner = { } -- namespace will go
@@ -520,10 +581,15 @@ local function run_texexec(filename,a_purge,a_purgeall)
end
end
---
+-- context mode will become the only method some day
-local function check_synctex(a_synctex)
- return a_synctex and (tonumber(a_synctex) or (toboolean(a_synctex,true) and 1) or (a_synctex == "zipped" and 1) or (a_synctex == "unzipped" and -1)) or nil
+local function check_synctex(a_synctex) -- context is intercepted elsewhere
+ return a_synctex and (
+ tonumber(a_synctex) or
+ (toboolean(a_synctex,true) and 1) or
+ (a_synctex == "zipped" and 1) or
+ (a_synctex == "unzipped" and -1)
+ ) or nil
end
function scripts.context.run(ctxdata,filename)
@@ -583,7 +649,7 @@ function scripts.context.run(ctxdata,filename)
local a_nonstopmode = getargument("nonstopmode")
local a_scollmode = getargument("scrollmode")
local a_once = getargument("once")
- local a_synctex = getargument("synctex")
+ local a_synctex = getargument("syncctx") and "context" or getargument("synctex")
local a_backend = getargument("backend")
local a_arrange = getargument("arrange")
local a_noarrange = getargument("noarrange")
@@ -609,11 +675,17 @@ function scripts.context.run(ctxdata,filename)
--
a_batchmode = (a_batchmode and "batchmode") or (a_nonstopmode and "nonstopmode") or (a_scrollmode and "scrollmode") or nil
- a_synctex = check_synctex(a_synctex)
+ -- a_synctex = check_synctex(a_synctex)
--
for i=1,#filelist do
--
local filename = filelist[i]
+
+ if filename == "" then
+ report("warning: bad filename")
+ break
+ end
+
local basename = filebasename(filename) -- use splitter
local pathname = filepathpart(filename)
--
@@ -630,7 +702,7 @@ function scripts.context.run(ctxdata,filename)
--
local analysis = preamble_analyze(filename)
--
- a_synctex = a_synctex or check_synctex(analysis.synctex)
+ a_synctex = a_synctex or analysis.synctex
--
if a_mkii or analysis.engine == 'pdftex' or analysis.engine == 'xetex' then
run_texexec(filename,a_purge,a_purgeall)
@@ -738,9 +810,9 @@ function scripts.context.run(ctxdata,filename)
--
local l_flags = {
["interaction"] = a_batchmode,
- ["synctex"] = a_synctex,
- ["no-parse-first-line"] = true, -- obsolete
- ["safer"] = a_safer,
+ ["synctex"] = check_synctex(a_synctex), -- otherwise not working
+ ["no-parse-first-line"] = true, -- obsolete
+ ["safer"] = a_safer, -- better use --sandbox
-- ["no-mktex"] = true,
-- ["file-line-error-style"] = true,
["fmt"] = formatfile,
@@ -769,13 +841,16 @@ function scripts.context.run(ctxdata,filename)
end
--
if a_profile then
- directives[#directives+1] = "system.profile"
+ directives[#directives+1] = format("system.profile=%s",tonumber(a_profile) or 0)
end
--
+ for i=1,#synctex_runfiles do
+ removefile(fileaddsuffix(jobname,synctex_runfiles[i]))
+ end
if a_synctex then
- report("warning: synctex is enabled") -- can add upto 5% runtime
directives[#directives+1] = format("system.synctex=%s",a_synctex)
end
+ --
if #directives > 0 then
c_flags.directives = concat(directives,",")
end
@@ -790,6 +865,7 @@ function scripts.context.run(ctxdata,filename)
c_flags.forcedruns = multipass_forcedruns and multipass_forcedruns > 0 and multipass_forcedruns or nil
c_flags.currentrun = currentrun
c_flags.noarrange = a_noarrange or a_arrange or nil
+ c_flags.profile = a_profile and (tonumber(a_profile) or 0) or nil
--
local command = luatex_command(l_flags,c_flags,mainfile,a_engine)
--
@@ -829,6 +905,9 @@ function scripts.context.run(ctxdata,filename)
--
end
--
+ if a_synctex == "context" then
+ renamefile(fileaddsuffix(jobname,"syncctx"),fileaddsuffix(jobname,"synctex"))
+ end
if a_arrange then
--
c_flags.final = true
@@ -975,7 +1054,7 @@ function scripts.context.pipe() -- still used?
end
local function make_mkiv_format(name,engine)
- environment.make_format(name,environment.arguments.silent) -- jit is picked up later
+ environment.make_format(name) -- jit is picked up later
end
local make_mkii_format
@@ -990,7 +1069,7 @@ do -- more or less copied from mtx-plain.lua:
else
print("mktexlsr silent run") -- we use a basic print
end
- os.remove("temp.log")
+ removefile("temp.log")
else
report("running mktexlsr")
os.execute("mktexlsr")
@@ -998,7 +1077,7 @@ do -- more or less copied from mtx-plain.lua:
end
local function engine(texengine,texformat)
- local command = string.format('%s --ini --etex --8bit %s \\dump',texengine,file.addsuffix(texformat,"mkii"))
+ local command = string.format('%s --ini --etex --8bit %s \\dump',texengine,fileaddsuffix(texformat,"mkii"))
if environment.arguments.silent then
statistics.starttiming()
local command = format("%s > temp.log",command)
@@ -1009,7 +1088,7 @@ do -- more or less copied from mtx-plain.lua:
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")
+ removefile("temp.log")
else
report("running command: %s",command)
os.execute(command)
@@ -1073,7 +1152,7 @@ do -- more or less copied from mtx-plain.lua:
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)
+ execute('%s --fmt=%s %s "%s"',texengine,removesuffix(texformat),table.concat(t," "),filename)
end
make_mkii_format = function(name,engine)
@@ -1218,67 +1297,6 @@ function scripts.context.version()
end
end
--- purging files (we should have an mkii and mkiv variants)
-
-local generic_files = {
- "texexec.tex", "texexec.tui", "texexec.tuo",
- "texexec.tuc", "texexec.tua",
- "texexec.ps", "texexec.pdf", "texexec.dvi",
- "cont-opt.tex", "cont-opt.bak"
-}
-
-local obsolete_results = {
- "dvi",
-}
-
-local temporary_runfiles = {
- "tui", -- mkii two pass file
- "tua", -- mkiv obsolete
- "tup", "ted", "tes", -- texexec
- "top", -- mkii options file
- "log", -- tex log file
- "tmp", -- mkii buffer file
- "run", -- mkii stub
- "bck", -- backup (obsolete)
- "rlg", -- resource log
- "ctl", --
- "mpt", "mpx", "mpd", "mpo", "mpb", -- metafun
- "prep", -- context preprocessed
- "pgf", -- tikz
- "aux", "blg", -- bibtex
-}
-
-local temporary_suffixes = {
- "prep", -- context preprocessed
-}
-local synctex_runfiles = {
- "synctex", "synctex.gz", -- synctex
-}
-
-local persistent_runfiles = {
- "tuo", -- mkii two pass file
- "tub", -- mkii buffer file
- "top", -- mkii options file
- "tuc", -- mkiv two pass file
- "bbl", -- bibtex
-}
-
-local special_runfiles = {
- "-mpgraph", "-mprun", "-temp-"
-}
-
-local function purge_file(dfile,cfile)
- if cfile and validfile(cfile) then
- if removefile(dfile) then
- return filebasename(dfile)
- end
- elseif dfile then
- if removefile(dfile) then
- return filebasename(dfile)
- end
- end
-end
-
function scripts.context.purge_job(jobname,all,mkiitoo,fulljobname)
if jobname and jobname ~= "" then
jobname = filebasename(jobname)
@@ -1438,6 +1456,7 @@ function scripts.context.modules(pattern)
dir.glob(filejoinname(filepathpart(found,pattern)),list)
end
local done = { } -- todo : sort
+ local none = { x = { }, m = { }, s = { }, t = { } }
for i=1,#list do
local v = list[i]
local base = filebasename(v)
@@ -1445,7 +1464,7 @@ function scripts.context.modules(pattern)
done[base] = true
local suffix = filesuffix(base)
if suffix == "tex" or suffix == "mkiv" or suffix == "mkvi" or suffix == "mkix" or suffix == "mkxi" then
- local prefix = match(base,"^([xmst])%-")
+ local prefix, rest = match(base,"^([xmst])%-(.*)")
if prefix then
v = resolvers.findfile(base) -- so that files on my dev path are seen
local data = io.loaddata(v) or ""
@@ -1465,11 +1484,26 @@ function scripts.context.modules(pattern)
end
end
report()
+ else
+ insert(none[prefix],rest)
end
end
end
end
end
+
+ local function show(k,v)
+ sort(v)
+ if #v > 0 then
+ report()
+ for i=1,#v do
+ report("%s : %s",k,v[i])
+ end
+ end
+ end
+ for k, v in sortedhash(none) do
+ show(k,v)
+ end
end
-- extras
@@ -1693,6 +1727,10 @@ end
-- getting it done
+if getargument("timedlog") then
+ logs.settimedlog()
+end
+
if getargument("nostats") then
setargument("nostatistics",true)
setargument("nostat",nil)
@@ -1720,10 +1758,10 @@ do
end
if getargument("once") then
- multipass_nofruns = 1
+ multipass_nofruns = 1
else
if getargument("runs") then
- multipass_nofruns = tonumber(getargument("runs")) or nil
+ multipass_nofruns = tonumber(getargument("runs")) or nil
end
multipass_forcedruns = tonumber(getargument("forcedruns")) or nil
end
@@ -1747,9 +1785,9 @@ elseif getargument("update") then
scripts.context.update()
elseif getargument("expert") then
application.help("expert", "special")
-elseif getargument("modules") then
+elseif getargument("showmodules") or getargument("modules") then
scripts.context.modules()
-elseif getargument("extras") then
+elseif getargument("showextras") or getargument("extras") then
scripts.context.extras(environment.files[1] or getargument("extras"))
elseif getargument("extra") then
scripts.context.extra()
diff --git a/scripts/context/lua/mtx-context.xml b/scripts/context/lua/mtx-context.xml
index 2ba7ee59e..25e92d7a6 100644
--- a/scripts/context/lua/mtx-context.xml
+++ b/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.62</entry>
+ <entry name="version">1.01</entry>
<entry name="comment">external helpinfo file</entry>
</metadata>
<flags>
@@ -126,7 +126,10 @@
<short>run without stopping</short>
</flag>
<flag name="synctex">
- <short>run with synctex enabled (optional value: zipped, unzipped, 1, -1)</short>
+ <short>run with synctex enabled (optional value: zipped, unzipped, 1, -1, context)</short>
+ </flag>
+ <flag name="syncttx">
+ <short>a shortcut for --synctex=context</short>
</flag>
<flag name="nodates">
<short>omit runtime dates in pdf file (optional value: a number (this 1970 offset time) or string "YYYY-MM-DD HH:MM")</short>
diff --git a/scripts/context/lua/mtx-dvi.lua b/scripts/context/lua/mtx-dvi.lua
new file mode 100644
index 000000000..57f146ee6
--- /dev/null
+++ b/scripts/context/lua/mtx-dvi.lua
@@ -0,0 +1,411 @@
+if not modules then modules = { } end modules ['mtx-dvi'] = {
+ version = 1.001,
+ comment = "companion to mtxrun.lua",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- This is just a tool that I use for checking dvi issues in LuaTeX and it has
+-- no real use otherwise. When needed (or on request) I can extend this script.
+-- Speed is hardly an issue and I didn't spend much time on generalizing the
+-- code either.
+
+local formatters = string.formatters
+local byte = string.byte
+
+local P, R, S, C, Cc, Ct, Cmt = lpeg.P, lpeg.R, lpeg.S, lpeg.C, lpeg.Cc, lpeg.Ct, lpeg.Cmt
+local lpegmatch = lpeg.match
+
+local readbyte = utilities.files.readbyte
+local readcardinal1 = utilities.files.readcardinal1
+local readcardinal2 = utilities.files.readcardinal2
+local readcardinal3 = utilities.files.readcardinal3
+local readcardinal4 = utilities.files.readcardinal4
+local readinteger1 = utilities.files.readinteger1
+local readinteger2 = utilities.files.readinteger2
+local readinteger3 = utilities.files.readinteger3
+local readinteger4 = utilities.files.readinteger4
+local readstring = utilities.files.readstring
+
+local helpinfo = [[
+<?xml version="1.0"?>
+<application>
+ <metadata>
+ <entry name="name">mtx-dvi</entry>
+ <entry name="detail">ConTeXt DVI Helpers</entry>
+ <entry name="version">0.01</entry>
+ </metadata>
+ <flags>
+ <category name="basic">
+ <subcategory>
+ <flag name="list"><short>list dvi commands</short></flag>
+ </subcategory>
+ </category>
+ </flags>
+</application>
+]]
+
+local application = logs.application {
+ name = "mtx-dvi",
+ banner = "ConTeXt DVI Helpers 0.10",
+ helpinfo = helpinfo,
+}
+
+local report = application.report
+
+local f_set_char_fast = formatters["set char fast %C"]
+local f_set_char = formatters["set char %C"]
+local f_set_rule = formatters["set rule height=%p width=%p (%s %s)"]
+local f_put_char = formatters["put char %C"]
+local f_put_rule = formatters["put rule height=%p width=%p (%s %s)"]
+local f_set_font = formatters["set font %i"]
+local f_set_font_fast = formatters["set font fast %i"]
+local f_right = formatters["right %p (%s)"]
+local f_right_w = formatters["right w"]
+local f_right_x = formatters["right x"]
+local f_right_w_set = formatters["right set w %p (%s)"]
+local f_right_x_set = formatters["right set x %p (%s)"]
+local f_down = formatters["down %p (%s)"]
+local f_down_y = formatters["down y"]
+local f_down_z = formatters["down z"]
+local f_down_y_set = formatters["down set y %p (%s)"]
+local f_down_z_set = formatters["down set z %p (%s)"]
+local f_page_begin = formatters["page begin (% t) %i"]
+local f_page_end = formatters["page end"]
+local f_nop = formatters["nop"]
+local f_push = formatters["push %i"]
+local f_pop = formatters["pop %i"]
+local f_special = formatters["special %s"]
+local f_preamble = formatters["preamble version=%s numerator=%s denominator=%s mag=%s comment=%s"]
+local f_postamble_begin = formatters["postamble"]
+local f_postamble_end = formatters["postamble end offset=%s version=%s"]
+local f_define_font = formatters["define font k=%i checksum=%i scale=%p designsize=%p area=%s name=%s"]
+
+local currentdepth = 0
+local usedprinter = texio and texio.write_ln or print
+
+local handler = { } for i=0,255 do handler[i] = false end
+
+local function define_font(f,size)
+ local k = size == 1 and readcardinal1(f)
+ or size == 2 and readcardinal2(f)
+ or size == 3 and readcardinal3(f)
+ or readcardinal4(f)
+ local c = readcardinal4(f)
+ local s = readcardinal4(f)
+ local d = readcardinal4(f)
+ local a = readcardinal1(f)
+ local l = readcardinal1(f)
+ local a = readstring(f,a)
+ local l = readstring(f,l)
+ usedprinter(f_define_font(k,c,s,d,area,name))
+end
+
+handler[000] = function(f,b)
+ usedprinter(f_set_char_fast(b))
+end
+
+handler[128] = function(f)
+ usedprinter(f_set_char(readcardinal1(f)))
+end
+handler[129] = function(f)
+ usedprinter(f_set_char(readcardinal2(f)))
+end
+handler[130] = function(f)
+ usedprinter(f_set_char(readcardinal3(f)))
+end
+handler[131] = function(f)
+ usedprinter(f_set_char(readcardinal4(f)))
+end
+
+handler[132] = function(f)
+ usedprinter(f_set_rule(readinteger4(f),readinteger4(f)))
+end
+
+handler[133] = function(f)
+ usedprinter(f_put_char(readcardinal1(f)))
+end
+handler[134] = function(f)
+ usedprinter(f_put_char(readcardinal2(f)))
+end
+handler[135] = function(f)
+ usedprinter(f_put_char(readcardinal3(f)))
+end
+handler[136] = function(f)
+ usedprinter(f_put_char(readcardinal4(f)))
+end
+
+handler[137] = function(f)
+ usedprinter(f_put_rule(readinteger4(f),readinteger4(f)))
+end
+
+handler[138] = function(f)
+ usedprinter(f_nop())
+end
+
+handler[139] = function(f)
+ local pages = { }
+ for i=0,9 do
+ pages[i] = readinteger4(f)
+ end
+ usedprinter(f_page_begin(pages,readinteger4(f)))
+end
+handler[140] = function()
+ usedprinter(f_page_end())
+end
+
+handler[141] = function()
+ currentdepth = currentdepth + 1
+ usedprinter(f_push(currentdepth))
+end
+handler[142] = function()
+ usedprinter(f_pop(currentdepth))
+ currentdepth = currentdepth - 1
+end
+
+handler[143] = function(f)
+ local d = readinteger1(f)
+ usedprinter(f_right(d,d))
+end
+handler[144] = function(f)
+ local d = readinteger2(f)
+ usedprinter(f_right(d,d))
+end
+handler[145] = function(f)
+ local d = readinteger3(f)
+ usedprinter(f_right(d,d))
+end
+handler[146] = function(f)
+ local d = readinteger4(f)
+ usedprinter(f_right(d,d))
+end
+
+handler[147] = function()
+ usedprinter(f_right_w())
+end
+
+handler[148] = function(f)
+ local d = readinteger1(f)
+ usedprinter(f_right_w_set(d,d))
+end
+handler[149] = function(f)
+ local d = readinteger2(f)
+ usedprinter(f_right_w_set(d,d))
+end
+handler[150] = function(f)
+ local d = readinteger3(f)
+ usedprinter(f_right_w_set(d,d))
+end
+handler[151] = function(f)
+ local d = readinteger4(f)
+ usedprinter(f_right_w_set(d,d))
+end
+
+handler[152] = function()
+ handlers.right_x()
+end
+
+handler[153] = function(f)
+ local d = readinteger1(f)
+ usedprinter(f_right_x_set(d,d))
+end
+handler[154] = function(f)
+ local d = readinteger2(f)
+ usedprinter(f_right_x_set(d,d))
+end
+handler[155] = function(f)
+ local d = readinteger3(f)
+ usedprinter(f_right_x_set(d,d))
+end
+handler[156] = function(f)
+ local d = readinteger4(f)
+ usedprinter(f_right_x_set(d,d))
+end
+
+handler[157] = function(f)
+ local d = readinteger1(f)
+ usedprinter(f_down(d,d))
+end
+
+handler[158] = function(f)
+ local d = readinteger2(f)
+ usedprinter(f_down(d,d))
+end
+handler[159] = function(f)
+ local d = readinteger3(f)
+ usedprinter(f_down(d,d))
+end
+handler[160] = function(f)
+ local d = readinteger4(f)
+ usedprinter(f_down(d,d))
+end
+handler[161] = function()
+ usedprinter(f_down_y())
+end
+
+handler[162] = function(f)
+ local d = readinteger1(f)
+ usedprinter(f_down_y_set(d,d))
+end
+handler[163] = function(f)
+ local d = readinteger2(f)
+ usedprinter(f_down_y_set(d,d))
+end
+handler[164] = function(f)
+ local d = readinteger3(f)
+ usedprinter(f_down_y_set(d,d))
+end
+handler[165] = function(f)
+ local d = readinteger4(f)
+ usedprinter(f_down_y_set(d,d))
+end
+
+handler[166] = function()
+ handlers.down_z()
+end
+
+handler[167] = function(f)
+ local d = readinteger1(f)
+ usedprinter(f_down_z_set(d,d))
+end
+handler[168] = function(f)
+ local d = readinteger2(f)
+ usedprinter(f_down_z_set(d,d))
+end
+handler[169] = function(f)
+ local d = readinteger3(f)
+ usedprinter(f_down_z_set(d,d))
+end
+handler[170] = function(f)
+ local d = readinteger4(f)
+ usedprinter(f_down_z_set(d,d))
+end
+
+handler[171] = function(f,b)
+ usedprinter(f_set_font_fast(b))
+end
+
+handler[235] = function(f)
+ usedprinter(f_set_font(readcardinal1(f)))
+end
+handler[236] = function(f)
+ usedprinter(f_set_font(readcardinal2(f)))
+end
+handler[237] = function(f)
+ usedprinter(f_set_font(readcardinal3(f)))
+end
+handler[238] = function(f)
+ usedprinter(f_set_font(readcardinal4(f)))
+end
+
+handler[239] = function(f)
+ usedprinter(f_special(readstring(readcardinal1(f))))
+end
+handler[240] = function(f)
+ usedprinter(f_special(readstring(readcardinal2(f))))
+end
+handler[241] = function(f)
+ usedprinter(f_special(readstring(readcardinal3(f))))
+end
+handler[242] = function(f)
+ usedprinter(f_special(readstring(readcardinal4(f))))
+end
+
+handler[243] = function(f)
+ define_font(f,1)
+end
+handler[244] = function(f)
+ define_font(f,2)
+end
+handler[245] = function(f)
+ define_font(f,3)
+end
+handler[246] = function(f)
+ define_font(f,4)
+end
+
+handler[247] = function(f)
+ usedprinter(f_preamble(
+ readcardinal1(f),
+ readcardinal4(f),
+ readcardinal4(f),
+ readcardinal4(f),
+ readstring(f,readcardinal1(f))
+ ))
+end
+
+handler[248] = function(f)
+ usedprinter(f_postamble_begin(
+ readcardinal4(f), -- p
+ readcardinal4(f), -- num
+ readcardinal4(f), -- den
+ readcardinal4(f), -- mag
+ readcardinal4(f), -- l
+ readcardinal4(f), -- u
+ readcardinal2(f), -- s
+ readcardinal2(f) -- t
+ ))
+ while true do
+ local b = readbyte(f)
+ if b == 249 then
+ break
+ else
+ handler[b](f,b)
+ end
+ end
+ usedprinter(f_postamble_end(
+ readcardinal4(f),
+ readcardinal1(f)
+ ))
+ -- now 223's follow
+end
+
+handler[250] = function()
+end
+
+for i= 1,127 do handler[i] = handler[ 0] end
+for i= 172,234 do handler[i] = handler[171] end
+for i= 251,255 do handler[i] = handler[250] end
+
+scripts = scripts or { }
+scripts.dvi = scripts.dvi or { }
+
+function scripts.dvi.list(filename,printer)
+ currentdepth = 0
+ local f = io.open(filename)
+ if f then
+ local filesize = f:seek("end")
+ local position = 0
+ f:seek("set",position)
+ local format = formatters["%0" .. #tostring(filesize) .. "i : %s"]
+ local flush = printer or (texio and texio.write_ln) or print
+ usedprinter = function(str)
+ flush(format(position,str))
+ position = f:seek()
+ end
+ while true do
+ local b = readbyte(f)
+ if b == 223 then
+ return
+ else
+ handler[b](f,b)
+ end
+ end
+ f:close()
+ else
+ report("invalid filename %a",filename)
+ end
+end
+
+local filename = environment.files[1] or ""
+
+if filename == "" then
+ application.help()
+elseif environment.argument("list") then
+ scripts.dvi.list(filename)
+elseif environment.argument("exporthelp") then
+ application.export(environment.argument("exporthelp"),filename)
+else
+ application.help()
+end
diff --git a/scripts/context/lua/mtx-fonts.lua b/scripts/context/lua/mtx-fonts.lua
index 0c3224fe0..068d38a84 100644
--- a/scripts/context/lua/mtx-fonts.lua
+++ b/scripts/context/lua/mtx-fonts.lua
@@ -13,9 +13,11 @@ 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 concat = table.concat
+local write_nl = texio.write_nl
-local otfversion = 2.825
-local otlversion = 3.020
+local otfversion = 2.826
+local otlversion = 3.029
local helpinfo = [[
<?xml version="1.0"?>
@@ -118,8 +120,8 @@ 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
+loadmodule("font-dsp.lua")
+loadmodule("font-oup.lua")
loadmodule("font-onr.lua")
@@ -228,14 +230,6 @@ function scripts.fonts.reload()
end
end
-local function subfont(sf)
- if sf then
- return string.format("index: % 2s", sf)
- else
- return ""
- end
-end
-
local function fontweight(fw)
if fw then
return string.format("conflict: %s", fw)
@@ -262,9 +256,14 @@ local function showfeatures(tag,specification)
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("subfont : %s",specification.subfont or "")
indeed("fweight : %s",fontweight(specification.fontweight))
-- maybe more
+ local instancenames = specification.instancenames
+ if instancenames then
+ report()
+ indeed("instances : % t",instancenames)
+ end
local features = fonts.helpers.getfeatures(specification.filename,not getargument("nosave"))
if features then
for what, v in table.sortedhash(features) do
@@ -285,7 +284,7 @@ local function showfeatures(tag,specification)
else
done = true
end
- report("% -8s % -8s % -8s",f,s,table.concat(table.sortedkeys(ss), " ")) -- todo: padd 4
+ report("% -8s % -8s % -8s",f,s,concat(table.sortedkeys(ss), " ")) -- todo: padd 4
end
end
end
@@ -325,13 +324,15 @@ local function list_specifications(t,info)
entry.variant or "<novariant>",
entry.fontname,
entry.filename,
- subfont(entry.subfont),
+ entry.subfont or "",
fontweight(entry.fontweight),
}
end
+ table.insert(s,1,{"familyname","weight","style","width","variant","fontname","filename","subfont","fontweight"})
+ table.insert(s,2,{"","","","","","","","",""})
utilities.formatters.formatcolumns(s)
for k=1,#s do
- texio.write_nl(s[k])
+ write_nl(s[k])
end
end
end
@@ -339,7 +340,7 @@ end
local function list_matches(t,info)
if t then
- local s, w = table.sortedkeys(t), { 0, 0, 0 }
+ local s, w = table.sortedkeys(t), { 0, 0, 0, 0 }
if info then
for k=1,#s do
local v = s[k]
@@ -351,14 +352,18 @@ local function list_matches(t,info)
local entry = t[v]
s[k] = {
v,
+ entry.familyname,
entry.fontname,
entry.filename,
- subfont(entry.subfont)
+ tostring(entry.subfont or ""),
+ concat(entry.instancenames or { }, " "),
}
end
+ table.insert(s,1,{"identifier","familyname","fontname","filename","subfont","instances"})
+ table.insert(s,2,{"","","","","","",""})
utilities.formatters.formatcolumns(s)
for k=1,#s do
- texio.write_nl(s[k])
+ write_nl(s[k])
end
end
end
@@ -452,7 +457,7 @@ function scripts.fonts.unpack()
if data.creator == "context mkiv" then
fonts.handlers.otf.readers.unpack(data)
else
- fonts.handlers.otf.enhancers.unpack(data)
+ fonts.handlers.otf.unpackdata(data)
end
io.savedata(savename,table.serialize(data,true))
else
diff --git a/scripts/context/lua/mtx-grep.lua b/scripts/context/lua/mtx-grep.lua
index d0f33cb21..0c4364630 100644
--- a/scripts/context/lua/mtx-grep.lua
+++ b/scripts/context/lua/mtx-grep.lua
@@ -6,6 +6,9 @@ if not modules then modules = { } end modules ['mtx-babel'] = {
license = "see context related readme files"
}
+-- If needed this one can be optimized for speed as well as use some existing
+-- helpers. We can quit faster on max, and probably use lpeg instead of find.
+
local helpinfo = [[
<?xml version="1.0"?>
<application>
@@ -20,10 +23,26 @@ local helpinfo = [[
<flag name="pattern"><short>search for pattern (optional)</short></flag>
<flag name="count"><short>count matches only</short></flag>
<flag name="nocomment"><short>skip lines that start with %% or #</short></flag>
+ <flag name="n"><short>show at most n matches</short></flag>
+ <flag name="first"><short>only show first match</short></flag>
+ <flag name="match"><short>return the match (if it is one)</short></flag>
<flag name="xml"><short>pattern is lpath expression</short></flag>
</subcategory>
</category>
</flags>
+ <examples>
+ <category>
+ <title>Examples</title>
+ <subcategory>
+ <example><command>mtxrun --script grep --pattern=module *.mkiv</command></example>
+ <example><command>mtxrun --script grep --pattern="modules.-%['(.-)'%]" char-*.lua --first</command></example>
+ <example><command>mtxrun --script grep --pattern=module --count *.mkiv</command></example>
+ <example><command>mtxrun --script grep --pattern=module --first *.mkiv</command></example>
+ <example><command>mtxrun --script grep --pattern=module --nocomment *.mkiv</command></example>
+ <example><command>mtxrun --script grep --pattern=module --n=10 *.mkiv</command></example>
+ </subcategory>
+ </category>
+ </examples>
<comments>
<comment>patterns are lua patterns and need to be escaped accordingly</comment>
</comments>
@@ -41,7 +60,8 @@ local report = application.report
scripts = scripts or { }
scripts.grep = scripts.grep or { }
-local find, format = string.find, string.format
+local find, match, format = string.find, string.match, string.format
+local lpegmatch = lpeg.match
local cr = lpeg.P("\r")
local lf = lpeg.P("\n")
@@ -59,14 +79,17 @@ function scripts.grep.find(pattern, files, offset)
if pattern and pattern ~= "" then
statistics.starttiming(scripts.grep)
local nofmatches, noffiles, nofmatchedfiles = 0, 0, 0
- local n, m, name, check = 0, 0, "", nil
- local count, nocomment = environment.argument("count"), environment.argument("nocomment")
+ local n, m, check = 0, 0, nil
+ local name = ""
+ local count = environment.argument("count")
+ local nocomment = environment.argument("nocomment")
+ local max = tonumber(environment.argument("n")) or (environment.argument("first") and 1) or false
+ local domatch = environment.argument("match")
if environment.argument("xml") then
for i=offset or 1, #files do
local globbed = dir.glob(files[i])
for i=1,#globbed do
- local nam = globbed[i]
- name = nam
+ name = globbed[i]
local data = xml.load(name)
if data and not data.error then
n, m, noffiles = 0, 0, noffiles + 1
@@ -83,7 +106,9 @@ function scripts.grep.find(pattern, files, offset)
else
for c in xml.collected(data,pattern) do
m = m + 1
- write_nl(format("%s: %s",name,xml.tostring(c)))
+ if not max or m <= max then
+ write_nl(format("%s: %s",name,xml.tostring(c)))
+ end
end
end
end
@@ -107,8 +132,14 @@ function scripts.grep.find(pattern, files, offset)
-- skip
elseif find(line,pattern) then
m = m + 1
- write_nl(format("%s %6i: %s",name,n,line))
- io.flush()
+ if not max or m <= max then
+ if domatch then
+ write_nl(match(line,pattern))
+ else
+ write_nl(format("%s %6i: %s",name,n,line))
+ end
+ io.flush()
+ end
end
end
end
@@ -125,22 +156,27 @@ function scripts.grep.find(pattern, files, offset)
n = n + 1
if find(line,pattern) then
m = m + 1
- write_nl(format("%s %6i: %s",name,n,line))
- io.flush()
+ if not max or m <= max then
+ if domatch then
+ write_nl(match(line,pattern))
+ else
+ write_nl(format("%s %6i: %s",name,n,line))
+ end
+ io.flush()
+ end
end
end
end
end
- local capture = (content/check)^0
+ local capture = (content/check)^0 -- todo: break out when max
for i=offset or 1, #files do
local globbed = dir.glob(files[i])
for i=1,#globbed do
- local nam = globbed[i]
- name = nam
+ name = globbed[i]
local data = io.loaddata(name)
if data then
n, m, noffiles = 0, 0, noffiles + 1
- capture:match(data)
+ lpegmatch(capture,data)
if count and m > 0 then
nofmatches = nofmatches + m
nofmatchedfiles = nofmatchedfiles + 1
diff --git a/scripts/context/lua/mtx-interface.lua b/scripts/context/lua/mtx-interface.lua
index b82dd5abf..876a073e8 100644
--- a/scripts/context/lua/mtx-interface.lua
+++ b/scripts/context/lua/mtx-interface.lua
@@ -9,6 +9,7 @@ if not modules then modules = { } end modules ['mtx-cache'] = {
local concat, sort, insert = table.concat, table.sort, table.insert
local gsub, format, gmatch, find = string.gsub, string.format, string.gmatch, string.find
local utfchar, utfgsub = utf.char, utf.gsub
+local sortedkeys = table.sortedkeys
local helpinfo = [[
<?xml version="1.0"?>
@@ -226,167 +227,16 @@ 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
+-- we could instead load context-en.xml
function scripts.interface.editor(editor,split,forcedinterfaces)
- local interfaces= forcedinterfaces or environment.files
+ local interfaces = forcedinterfaces or environment.files
if #interfaces == 0 then
interfaces= userinterfaces
end
--
- local filename = "i-context.xml"
+-- local filename = "i-context.xml"
+ local filename = "context-en.xml"
local xmlfile = resolvers.findfile(filename) or ""
if xmlfile == "" then
report("unable to locate %a",filename)
@@ -414,14 +264,33 @@ function scripts.interface.editor(editor,split,forcedinterfaces)
report("generating files for %a",editor)
report("loading %a",xmlfile)
local xmlroot = xml.load(xmlfile)
- xml.include(xmlroot,"cd:interfacefile","filename",true,function(s)
- local fullname = resolvers.findfile(s)
- if fullname and fullname ~= "" then
- report("including %a",fullname)
- return io.loaddata(fullname)
- end
- end)
+-- xml.include(xmlroot,"cd:interfacefile","filename",true,function(s)
+-- local fullname = resolvers.findfile(s)
+-- if fullname and fullname ~= "" then
+-- report("including %a",fullname)
+-- return io.loaddata(fullname)
+-- end
+-- end)
+-- local definitions = { }
+-- for e in xml.collected(xmlroot,"cd:interface/cd:define") do
+-- definitions[e.at.name] = e.dt
+-- end
+-- local function resolve(root)
+-- for e in xml.collected(root,"*") do
+-- if e.tg == "resolve" then
+-- local resolved = definitions[e.at.name or ""]
+-- if resolved then
+-- -- use proper replace helper
+-- e.__p__.dt[e.ni] = resolved
+-- resolved.__p__ = e.__p__
+-- resolve(resolved)
+-- end
+-- end
+-- end
+-- end
+-- resolve(xmlroot)
--
+
for i=1,#interfaces do
local interface = interfaces[i]
local i_commands = { }
@@ -436,24 +305,37 @@ function scripts.interface.editor(editor,split,forcedinterfaces)
local c = commands[name]
local n = c and (c[interface] or c.en) or name
if at.generated == "yes" then
+ for e in xml.collected(e,"/cd:instances/cd:constant") do
+ local name = e.at.value
+ if name then
+ local c = variables[name]
+ local n = c and (c[interface] or c.en) or name
+ if type == "environment" then
+ i_commands[n] = true
+ elseif split then
+ i_environments[n] = true
+ else
+ i_commands[start..n] = true
+ i_commands[stop ..n] = true
+ end
+ end
+ end
-- skip (for now)
elseif type ~= "environment" then
- i_commands[#i_commands+1] = n
+ i_commands[n] = true
elseif split then
- i_environments[#i_environments+1] = n
+ i_environments[n] = true
else
-- variables ?
- i_commands[#i_commands+1] = start .. n
- i_commands[#i_commands+1] = stop .. n
+ i_commands[start..n] = true
+ i_commands[stop ..n] = true
end
end
end
- if #i_commands > 0 then
- sort(i_commands)
- sort(i_environments)
+ if next(i_commands) then
collected[interface] = {
- commands = i_commands,
- environments = i_environments,
+ commands = sortedkeys(i_commands),
+ environments = sortedkeys(i_environments),
}
end
end
@@ -500,7 +382,7 @@ function scripts.interface.mkii()
texresult[#texresult+1] = format("%% definitions for interface %s for language %s\n%%",what,language)
xmlresult[#xmlresult+1] = format("\t<!-- definitions for interface %s for language %s -->\n",what,language)
xmlresult[#xmlresult+1] = format("\t<cd:%s>",what)
- local sorted = table.sortedkeys(t)
+ local sorted = sortedkeys(t)
for i=1,#sorted do
local key = sorted[i]
local v = t[key]
diff --git a/scripts/context/lua/mtx-patterns.lua b/scripts/context/lua/mtx-patterns.lua
index e8d4d3e65..d16912e4f 100644
--- a/scripts/context/lua/mtx-patterns.lua
+++ b/scripts/context/lua/mtx-patterns.lua
@@ -694,16 +694,37 @@ end
--
-- use this call:
--
--- mtxrun --script pattern --convert --path=c:/data/develop/svn-hyphen/trunk/hyph-utf8/tex/generic/hyph-utf8/patterns/txt --destination=e:/tmp/patterns
-
--- copy /Y *.hyp e:\tex-context\tex\texmf-context\tex\context\patterns
--- copy /Y *.pat e:\tex-context\tex\texmf-context\tex\context\patterns
--- copy /Y *.rme e:\tex-context\tex\texmf-context\tex\context\patterns
--- copy /Y *.lua e:\tex-context\tex\texmf-context\tex\context\patterns
-
--- move /Y *.hyp e:\tex-context\tex\texmf-mine\tex\context\patterns
--- move /Y *.pat e:\tex-context\tex\texmf-mine\tex\context\patterns
--- move /Y *.rme e:\tex-context\tex\texmf-mine\tex\context\patterns
--- move /Y *.lua e:\tex-context\tex\texmf-mine\tex\context\patterns
-
+-- setlocal
+--
+-- rem tugsvn checkout:
+--
+-- set patternsroot=c:/data/develop/svn-hyphen/trunk
+--
+-- rem github checkout:
+--
+-- set patternsroot=c:/data/repositories/tex-hyphen
+--
+-- del /q c:\data\develop\tex-context\tex\texmf-local\tex\context\patterns\*
+-- del /q c:\data\develop\tex-context\tex\texmf-mine\tex\context\patterns\*
+-- del /q c:\data\develop\tex-context\tex\texmf-context\tex\context\patterns\*
+--
+-- mtxrun --script pattern --convert --path=%patternsroot%/hyph-utf8/tex/generic/hyph-utf8/patterns/txt --destination=c:/data/develop/tmp/patterns
+--
+-- copy /Y lang*.hyp c:\data\develop\tex-context\tex\texmf-context\tex\context\patterns
+-- copy /Y lang*.pat c:\data\develop\tex-context\tex\texmf-context\tex\context\patterns
+-- copy /Y lang*.rme c:\data\develop\tex-context\tex\texmf-context\tex\context\patterns
+-- copy /Y lang*.lua c:\data\develop\tex-context\tex\texmf-context\tex\context\patterns
+--
+-- move /Y lang*.hyp c:\data\develop\tex-context\tex\texmf-mine\tex\context\patterns
+-- move /Y lang*.pat c:\data\develop\tex-context\tex\texmf-mine\tex\context\patterns
+-- move /Y lang*.rme c:\data\develop\tex-context\tex\texmf-mine\tex\context\patterns
+-- move /Y lang*.lua c:\data\develop\tex-context\tex\texmf-mine\tex\context\patterns
+--
-- mtxrun --script pattern --words --update word-th.lua --compress
+--
+-- copy /Y word*.lua c:\data\develop\tex-context\tex\texmf-context\tex\context\patterns
+-- move /Y word*.lua c:\data\develop\tex-context\tex\texmf-mine\tex\context\patterns
+--
+-- mtxrun --generate
+--
+-- endlocal
diff --git a/scripts/context/lua/mtx-pdf.lua b/scripts/context/lua/mtx-pdf.lua
index 551aa5b37..0d3f37ad5 100644
--- a/scripts/context/lua/mtx-pdf.lua
+++ b/scripts/context/lua/mtx-pdf.lua
@@ -112,8 +112,12 @@ local function getfonts(pdffile)
for i=1,pdffile.pages.n do
local page = pdffile.pages[i]
local fontlist = page.Resources.Font
- for k, v in next, lpdf.epdf.expand(fontlist) do
- usedfonts[k] = lpdf.epdf.expand(v)
+ if fontlist then
+ for k, v in next, lpdf.epdf.expand(fontlist) do
+ usedfonts[k] = lpdf.epdf.expand(v)
+ end
+ else
+ report("no fonts")
end
end
return usedfonts
diff --git a/scripts/context/lua/mtx-server-ctx-fonttest.lua b/scripts/context/lua/mtx-server-ctx-fonttest.lua
index da87fe9e8..ab324d3cb 100644
--- a/scripts/context/lua/mtx-server-ctx-fonttest.lua
+++ b/scripts/context/lua/mtx-server-ctx-fonttest.lua
@@ -11,10 +11,15 @@ if not modules then modules = { } end modules ['mtx-server-ctx-fonttest'] = {
dofile(resolvers.findfile("trac-lmx.lua","tex"))
dofile(resolvers.findfile("font-ini.lua","tex"))
dofile(resolvers.findfile("font-con.lua","tex"))
-dofile(resolvers.findfile("font-oti.lua","tex"))
-dofile(resolvers.findfile("font-otf.lua","tex"))
-dofile(resolvers.findfile("font-otp.lua","tex"))
-dofile(resolvers.findfile("font-ott.lua","tex"))
+-- dofile(resolvers.findfile("font-oti.lua","tex"))
+-- dofile(resolvers.findfile("font-otf.lua","tex"))
+-- dofile(resolvers.findfile("font-otp.lua","tex"))
+dofile(resolvers.findfile("font-otr.lua","tex"))
+dofile(resolvers.findfile("font-cff.lua","tex"))
+-- dofile(resolvers.findfile("font-ttf.lua","tex"))
+-- dofile(resolvers.findfile("font-ott.lua","tex"))
+dofile(resolvers.findfile("font-dsp.lua","tex"))
+dofile(resolvers.findfile("font-onr.lua","tex"))
dofile(resolvers.findfile("font-syn.lua","tex"))
dofile(resolvers.findfile("font-mis.lua","tex"))
diff --git a/scripts/context/lua/mtx-server-ctx-help.lua b/scripts/context/lua/mtx-server-ctx-help.lua
index 04217dab9..2e8b87f32 100644
--- a/scripts/context/lua/mtx-server-ctx-help.lua
+++ b/scripts/context/lua/mtx-server-ctx-help.lua
@@ -245,6 +245,7 @@ local function getnames(root,interface)
local found = { }
local names = { }
local groups = { }
+ local extra = { }
for e in xmlcollected(root,'cd:interface/cd:interface') do
local category = match(e.at.file or "","^i%-(.*)%.xml$")
local list = { }
@@ -256,6 +257,7 @@ local function getnames(root,interface)
names[#names+1] = t
list[#list+1] = t
found[idname] = e
+ extra[csname] = e
else
-- variant
end
@@ -268,11 +270,11 @@ local function getnames(root,interface)
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
+ return names, groups, found, extra
end
local loaded = setmetatableindex(function(loaded,interface)
- local names, groups, found = getnames(usedsetuproot,interface)
+ local names, groups, found, extra = getnames(usedsetuproot,interface)
local current = {
interface = interface,
root = usedsetuproot,
@@ -280,13 +282,14 @@ local loaded = setmetatableindex(function(loaded,interface)
names = names,
groups = groups,
found = found,
+ extra = extra,
}
loaded[interface] = current
return current
end)
local function collect(current,name,interface,lastmode)
- local command = current.found[name]
+ local command = current.found[name] or current.extra[name]
if command then
local definitions = current.definitions
local attributes = command.at or { }
diff --git a/scripts/context/lua/mtx-unicode.lua b/scripts/context/lua/mtx-unicode.lua
index 673febc65..557e70b79 100644
--- a/scripts/context/lua/mtx-unicode.lua
+++ b/scripts/context/lua/mtx-unicode.lua
@@ -46,13 +46,15 @@ local application = logs.application {
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 gmatch, match, gsub, find, lower, upper, format = string.gmatch, string.match, string.gsub, string.find, string.lower, string.upper, string.format
+local concat, sort = table.concat, table.sort
+local split, splitlines, strip = string.split, string.splitlines, string.strip
local are_equal = table.are_equal
-local tonumber = tonumber
+local tonumber, tostring, rawget = tonumber, tostring, rawget
local lpegmatch = lpeg.match
+local P, C, S, R, Cs, Ct, Cg, Cf, Cc = lpeg.P, lpeg.C, lpeg.S, lpeg.R, lpeg.Cs, lpeg.Ct, lpeg.Cg, lpeg.Cf, lpeg.Cc
local formatters = string.formatters
+local utfchar = utf.char
local report = application.report
@@ -73,8 +75,7 @@ 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 split_colon_table = lpeg.tsplitat(P(" ")^0 * P(";") * P(" ")^0)
local skipped = {
[0x002C6] = true, -- MODIFIER LETTER CIRCUMFLEX ACCENT
@@ -91,6 +92,7 @@ function scripts.unicode.update()
local eastasianwidth = texttables.eastasianwidth
local standardizedvariants = texttables.standardizedvariants
local arabicshaping = texttables.arabicshaping
+ local index = texttables.index
local characterdata = characters.data
--
for unicode, ud in table.sortedpairs(unicodedata) do
@@ -331,7 +333,7 @@ function scripts.unicode.update()
end
for i=1,#standardizedvariants do
local si = standardizedvariants[i]
- local pair, addendum = si[1], string.strip(si[2])
+ local pair, addendum = si[1], strip(si[2])
local first, second = lpegmatch(split_space_two,pair) -- string.splitup(pair," ")
first = tonumber(first,16)
second = tonumber(second,16)
@@ -362,7 +364,7 @@ end
local preamble
local function splitdefinition(str,index)
- local l = string.splitlines(str)
+ local l = splitlines(str)
local t = { }
if index then
for i=1,#l do
@@ -401,6 +403,22 @@ local function splitdefinition(str,index)
return t
end
+local function splitindex(str)
+ -- ok, quick and dirty ... could be a nice lpeg instead
+ local l = splitlines(str)
+ local n = { }
+ for i=1,#l do
+ local a, b, c = match(l[i],"([^%,]+)%,?(.-)\t(.*)")
+ if a and b and c then
+ local name = b .. " " .. a
+ name = strip(name)
+ name = gsub(name,"%s+"," ")
+ n[name] = tonumber(c,16)
+ end
+ end
+ return n
+end
+
function scripts.unicode.load()
local fullname = resolvers.findfile("char-def.lua")
report("using: %s",fullname)
@@ -420,7 +438,7 @@ function scripts.unicode.load()
report("using: %s",fullname)
dofile(fullname)
--
- preamble = data:gsub("characters%.data%s*=%s*%{.*","")
+ preamble = gsub(data,"characters%.data%s*=%s*%{.*","")
--
textfiles = {
unicodedata = resolvers.findfile("unicodedata.txt") or "",
@@ -429,6 +447,7 @@ function scripts.unicode.load()
eastasianwidth = resolvers.findfile("eastasianwidth.txt") or "",
standardizedvariants = resolvers.findfile("standardizedvariants.txt") or "",
arabicshaping = resolvers.findfile("arabicshaping.txt") or "",
+ index = resolvers.findfile("index.txt") or "",
}
--
textdata = {
@@ -438,6 +457,7 @@ function scripts.unicode.load()
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 "",
+ index = textfiles.index ~= "" and io.loaddata(textfiles.index) or "",
}
texttables = {
unicodedata = splitdefinition(textdata.unicodedata,true),
@@ -446,6 +466,7 @@ function scripts.unicode.load()
eastasianwidth = splitdefinition(textdata.eastasianwidth,true),
standardizedvariants = splitdefinition(textdata.standardizedvariants,false),
arabicshaping = splitdefinition(textdata.arabicshaping,true),
+ index = splitindex(textdata.index),
}
return true
else
@@ -456,7 +477,9 @@ end
function scripts.unicode.save(filename)
if preamble then
- io.savedata(filename,preamble .. table.serialize(characters.data,"characters.data", { hexify = true, noquotes = true } ))
+ local data = table.serialize(characters.data,"characters.data", { hexify = true, noquotes = true })
+ data = gsub(data,"%{%s+%[0xFE0E%]=\"text style\",%s+%[0xFE0F%]=\"emoji style\",%s+%}","variants_emoji")
+ io.savedata(filename,preamble .. data)
end
end
@@ -469,7 +492,7 @@ function scripts.unicode.extras() -- old code
local fullname = resolvers.findfile("blocks.txt") or ""
if fullname ~= "" then
local data = io.loaddata(fullname)
- local lines = string.splitlines(data)
+ local lines = splitlines(data)
local map = { }
local blocks = characters.blocks
local result = { }
@@ -499,11 +522,11 @@ function scripts.unicode.extras() -- old code
end
end
end
- table.sort(result)
+ sort(result)
for i=1,#result do
report(result[i])
end
- table.sort(map)
+ sort(map)
for i=1,#map do
local m = map[i]
if not blocks[m] then
@@ -511,6 +534,128 @@ function scripts.unicode.extras() -- old code
end
end
end
+ --
+ local index = texttables.index
+ local blocks = characters.blocks
+ local data = characters.data
+ for k, v in next, index do
+ if k ~= lower(k) then
+ index[k] = nil
+ end
+ end
+ -- for k, v in next, data do
+ -- v.synonym = nil
+ -- v.synonyms = nil
+ -- end
+ for k, v in table.sortedhash(index) do
+ local d = data[v]
+ if d and d.description ~= upper(k) then
+ local synonyms = d.synonyms
+ if synonyms then
+ local n = #synonyms
+ local f = false
+ for i=1,n do
+ if synonyms[i] == k then
+ f = true
+ break
+ end
+ end
+ if not f then
+ synonyms[n+1] = k
+ end
+ -- synonyms = table.unique(synonyms)
+ -- d.synonyms = synonyms
+ sort(synonyms)
+ else
+ d.synonyms = { k }
+ end
+ end
+ end
+end
+
+do
+
+ local space = P(" ")
+ local spaces = space^0
+ local semicolon = P(";")
+ local hash = P("#")
+ local newline = S("\n\r")
+
+ local unicode = Cs(R("09","AF")^1)/function(n) return tonumber(n,16) end
+ * spaces
+ local components = Ct (unicode^1)
+
+ -- local rubish_a = semicolon
+ -- * spaces
+ -- * P("Emoji_ZWJ_Sequence")
+ -- * spaces
+ -- * semicolon
+ -- * spaces
+ -- local description = C((1 - (spaces * (hash+newline)))^1)
+ -- local rubish_b = (1-newline)^0
+ -- * newline^1
+ --
+ -- local pattern_1 = Ct ( (
+ -- Cf ( Ct("") *
+ -- Cg (Cc("components") * components)
+ -- * rubish_a
+ -- * Cg (Cc("description") * description )
+ -- * rubish_b
+ -- , rawset)
+ -- + P(1) )^1 )
+
+ local rubish_a = semicolon
+ * spaces
+ * P("non-")^0 * P("fully-qualified")
+ * spaces
+ * hash
+ * spaces
+ local textstring = C((1 - space)^1)
+ * spaces
+ local description = ((1 - (spaces * newline))^1) / string.lower
+ local rubish_b = (1-newline)^0
+ * newline^1
+
+ local pattern_2 = Ct ( (
+ Cf ( Ct("") *
+ Cg (Cc("components") * components)
+ * rubish_a
+ * Cg (Cc("textstring") * textstring)
+ * Cg (Cc("description") * description )
+ * rubish_b
+ , rawset)
+ + P(1) )^1 )
+
+ function scripts.unicode.emoji(filename)
+
+ local name = resolvers.findfile("emoji-test.txt") or ""
+ if name == "" then
+ return
+ end
+ local l = io.loaddata(name)
+ local t = lpegmatch(pattern_2,l)
+
+ local hash = { }
+
+ local replace = lpeg.replacer {
+ ["#"] = "hash",
+ ["*"] = "asterisk"
+ }
+
+ for i=1,#t do
+ local v = t[i]
+ local d = v.description
+ local k = lpegmatch(replace,d) or d
+ hash[k] = v.components
+ end
+ local new = table.serialize(hash,"return", { hexify = true })
+ local old = io.loaddata(resolvers.findfile("char-emj.lua"))
+ if old and old ~= "" then
+ new = gsub(old,"^(.-)return .*$","%1" .. new)
+ end
+ io.savedata(filename,new)
+ end
+
end
-- the action
@@ -525,6 +670,7 @@ else
scripts.unicode.update()
scripts.unicode.extras()
scripts.unicode.save("char-def-new.lua")
+ scripts.unicode.emoji("char-emj-new.lua")
else
report("nothing to do")
end
diff --git a/scripts/context/lua/mtxlibs.lua b/scripts/context/lua/mtxlibs.lua
index 6eee507ae..5e547cdee 100644
--- a/scripts/context/lua/mtxlibs.lua
+++ b/scripts/context/lua/mtxlibs.lua
@@ -68,6 +68,7 @@ local owntree = ownpath
local ownlibs = {
"l-lua.lua",
+ "l-sandbox.lua",
"l-package.lua",
"l-lpeg.lua",
"l-function.lua",
@@ -103,6 +104,7 @@ local ownlibs = {
"util-mrg.lua",
"util-tpl.lua",
+ "util-sbx.lua",
"util-env.lua",
-- "luat-env.lua", -- not relevant outside context
diff --git a/scripts/context/lua/mtxrun.lua b/scripts/context/lua/mtxrun.lua
index 7b711a88d..873770cac 100644
--- a/scripts/context/lua/mtxrun.lua
+++ b/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: 4734, stripped down to: 2626
+-- original size: 5125, stripped down to: 2881
if not modules then modules={} end modules ['l-lua']={
version=1.001,
@@ -162,6 +162,283 @@ if flush then
local spawn=os.spawn if spawn then function os.spawn (...) flush() return spawn (...) end end
local popen=io.popen if popen then function io.popen (...) flush() return popen (...) end end
end
+FFISUPPORTED=type(ffi)=="table" and ffi.os~="" and ffi.arch~="" and ffi.load
+if not FFISUPPORTED then
+ local okay;okay,ffi=pcall(require,"ffi")
+ FFISUPPORTED=type(ffi)=="table" and ffi.os~="" and ffi.arch~="" and ffi.load
+end
+if not FFISUPPORTED then
+ ffi=nil
+elseif not ffi.number then
+ ffi.number=tonumber
+end
+
+
+end -- of closure
+
+do -- create closure to overcome 200 locals limit
+
+package.loaded["l-sandbox"] = package.loaded["l-sandbox"] or true
+
+-- original size: 9667, stripped down to: 6678
+
+if not modules then modules={} end modules ['l-sandbox']={
+ 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 global=_G
+local next=next
+local unpack=unpack or table.unpack
+local type=type
+local tprint=texio.write_nl or print
+local tostring=tostring
+local format=string.format
+local concat=table.concat
+local sort=table.sort
+local gmatch=string.gmatch
+local gsub=string.gsub
+local requiem=require
+sandbox={}
+local sandboxed=false
+local overloads={}
+local skiploads={}
+local initializers={}
+local finalizers={}
+local originals={}
+local comments={}
+local trace=false
+local logger=false
+local blocked={}
+local function report(...)
+ tprint("sandbox ! "..format(...))
+end
+sandbox.report=report
+function sandbox.setreporter(r)
+ report=r
+ sandbox.report=r
+end
+function sandbox.settrace(v)
+ trace=v
+end
+function sandbox.setlogger(l)
+ logger=type(l)=="function" and l or false
+end
+local function register(func,overload,comment)
+ if type(func)=="function" then
+ if type(overload)=="string" then
+ comment=overload
+ overload=nil
+ end
+ local function f(...)
+ if sandboxed then
+ local overload=overloads[f]
+ if overload then
+ if logger then
+ local result={ overload(func,...) }
+ logger {
+ comment=comments[f] or tostring(f),
+ arguments={... },
+ result=result[1] and true or false,
+ }
+ return unpack(result)
+ else
+ return overload(func,...)
+ end
+ else
+ end
+ else
+ return func(...)
+ end
+ end
+ if comment then
+ comments[f]=comment
+ if trace then
+ report("registering function: %s",comment)
+ end
+ end
+ overloads[f]=overload or false
+ originals[f]=func
+ return f
+ end
+end
+local function redefine(func,comment)
+ if type(func)=="function" then
+ skiploads[func]=comment or comments[func] or "unknown"
+ if overloads[func]==false then
+ overloads[func]=nil
+ end
+ end
+end
+sandbox.register=register
+sandbox.redefine=redefine
+function sandbox.original(func)
+ return originals and originals[func] or func
+end
+function sandbox.overload(func,overload,comment)
+ comment=comment or comments[func] or "?"
+ if type(func)~="function" then
+ if trace then
+ report("overloading unknown function: %s",comment)
+ end
+ elseif type(overload)~="function" then
+ if trace then
+ report("overloading function with bad overload: %s",comment)
+ end
+ elseif overloads[func]==nil then
+ if trace then
+ report("function is not registered: %s",comment)
+ end
+ elseif skiploads[func] then
+ if trace then
+ report("function is not skipped: %s",comment)
+ end
+ else
+ if trace then
+ report("overloading function: %s",comment)
+ end
+ overloads[func]=overload
+ end
+ return func
+end
+local function whatever(specification,what,target)
+ if type(specification)~="table" then
+ report("%s needs a specification",what)
+ elseif type(specification.category)~="string" or type(specification.action)~="function" then
+ report("%s needs a category and action",what)
+ elseif not sandboxed then
+ target[#target+1]=specification
+ elseif trace then
+ report("already enabled, discarding %s",what)
+ end
+end
+function sandbox.initializer(specification)
+ whatever(specification,"initializer",initializers)
+end
+function sandbox.finalizer(specification)
+ whatever(specification,"finalizer",finalizers)
+end
+function require(name)
+ local n=gsub(name,"^.*[\\/]","")
+ local n=gsub(n,"[%.].*$","")
+ local b=blocked[n]
+ if b==false then
+ return nil
+ elseif b then
+ if trace then
+ report("using blocked: %s",n)
+ end
+ return b
+ else
+ if trace then
+ report("requiring: %s",name)
+ end
+ return requiem(name)
+ end
+end
+function blockrequire(name,lib)
+ if trace then
+ report("preventing reload of: %s",name)
+ end
+ blocked[name]=lib or _G[name] or false
+end
+function sandbox.enable()
+ if not sandboxed then
+ for i=1,#initializers do
+ initializers[i].action()
+ end
+ for i=1,#finalizers do
+ finalizers[i].action()
+ end
+ local nnot=0
+ local nyes=0
+ local cnot={}
+ local cyes={}
+ local skip={}
+ for k,v in next,overloads do
+ local c=comments[k]
+ if v then
+ if c then
+ cyes[#cyes+1]=c
+ else
+ nyes=nyes+1
+ end
+ else
+ if c then
+ cnot[#cnot+1]=c
+ else
+ nnot=nnot+1
+ end
+ end
+ end
+ for k,v in next,skiploads do
+ skip[#skip+1]=v
+ end
+ if #cyes>0 then
+ sort(cyes)
+ report("overloaded known: %s",concat(cyes," | "))
+ end
+ if nyes>0 then
+ report("overloaded unknown: %s",nyes)
+ end
+ if #cnot>0 then
+ sort(cnot)
+ report("not overloaded known: %s",concat(cnot," | "))
+ end
+ if nnot>0 then
+ report("not overloaded unknown: %s",nnot)
+ end
+ if #skip>0 then
+ sort(skip)
+ report("not overloaded redefined: %s",concat(skip," | "))
+ end
+ initializers=nil
+ finalizers=nil
+ originals=nil
+ sandboxed=true
+ end
+end
+blockrequire("lfs",lfs)
+blockrequire("io",io)
+blockrequire("os",os)
+blockrequire("ffi",ffi)
+local function supported(library)
+ local l=_G[library]
+ return l
+end
+loadfile=register(loadfile,"loadfile")
+if supported("io") then
+ io.open=register(io.open,"io.open")
+ io.popen=register(io.popen,"io.popen")
+ io.lines=register(io.lines,"io.lines")
+ io.output=register(io.output,"io.output")
+ io.input=register(io.input,"io.input")
+end
+if supported("os") then
+ os.execute=register(os.execute,"os.execute")
+ os.spawn=register(os.spawn,"os.spawn")
+ os.exec=register(os.exec,"os.exec")
+ os.rename=register(os.rename,"os.rename")
+ os.remove=register(os.remove,"os.remove")
+end
+if supported("lfs") then
+ lfs.chdir=register(lfs.chdir,"lfs.chdir")
+ lfs.mkdir=register(lfs.mkdir,"lfs.mkdir")
+ lfs.rmdir=register(lfs.rmdir,"lfs.rmdir")
+ lfs.isfile=register(lfs.isfile,"lfs.isfile")
+ lfs.isdir=register(lfs.isdir,"lfs.isdir")
+ lfs.attributes=register(lfs.attributes,"lfs.attributes")
+ lfs.dir=register(lfs.dir,"lfs.dir")
+ lfs.lock_dir=register(lfs.lock_dir,"lfs.lock_dir")
+ lfs.touch=register(lfs.touch,"lfs.touch")
+ lfs.link=register(lfs.link,"lfs.link")
+ lfs.setmode=register(lfs.setmode,"lfs.setmode")
+ lfs.readlink=register(lfs.readlink,"lfs.readlink")
+ lfs.shortname=register(lfs.shortname,"lfs.shortname")
+ lfs.symlinkattributes=register(lfs.symlinkattributes,"lfs.symlinkattributes")
+end
end -- of closure
@@ -170,7 +447,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-package"] = package.loaded["l-package"] or true
--- original size: 10949, stripped down to: 8037
+-- original size: 10587, stripped down to: 7815
if not modules then modules={} end modules ['l-package']={
version=1.001,
@@ -460,7 +737,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-lpeg"] = package.loaded["l-lpeg"] or true
--- original size: 38185, stripped down to: 20990
+-- original size: 37748, stripped down to: 20111
if not modules then modules={} end modules ['l-lpeg']={
version=1.001,
@@ -552,6 +829,7 @@ patterns.nonwhitespace=nonwhitespace
local stripper=spacer^0*C((spacer^0*nonspacer^1)^0)
local fullstripper=whitespace^0*C((whitespace^0*nonwhitespace^1)^0)
local collapser=Cs(spacer^0/""*nonspacer^0*((spacer^0/" "*nonspacer^1)^0))
+local nospacer=Cs((whitespace^1/""+nonwhitespace^1)^0)
local b_collapser=Cs(whitespace^0/""*(nonwhitespace^1+whitespace^1/" ")^0)
local e_collapser=Cs((whitespace^1*P(-1)/""+nonwhitespace^1+whitespace^1/" ")^0)
local m_collapser=Cs((nonwhitespace^1+whitespace^1/" ")^0)
@@ -561,6 +839,7 @@ local m_stripper=Cs((nonspacer^1+spacer^1/" ")^0)
patterns.stripper=stripper
patterns.fullstripper=fullstripper
patterns.collapser=collapser
+patterns.nospacer=nospacer
patterns.b_collapser=b_collapser
patterns.m_collapser=m_collapser
patterns.e_collapser=e_collapser
@@ -1027,27 +1306,7 @@ function lpeg.append(list,pp,delayed,checked)
end
local p_false=P(false)
local p_true=P(true)
-local function make(t)
- local function making(t)
- local p=p_false
- local keys=sortedkeys(t)
- for i=1,#keys do
- local k=keys[i]
- if k~="" then
- local v=t[k]
- if v==true then
- p=p+P(k)*p_true
- elseif v==false then
- else
- p=p+P(k)*making(v)
- end
- end
- end
- if t[""] then
- p=p+p_true
- end
- return p
- end
+local function make(t,rest)
local p=p_false
local keys=sortedkeys(t)
for i=1,#keys do
@@ -1058,10 +1317,13 @@ local function make(t)
p=p+P(k)*p_true
elseif v==false then
else
- p=p+P(k)*making(v)
+ p=p+P(k)*make(v,v[""])
end
end
end
+ if rest then
+ p=p+p_true
+ end
return p
end
local function collapse(t,x)
@@ -1264,7 +1526,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-function"] = package.loaded["l-function"] or true
--- original size: 372, stripped down to: 329
+-- original size: 361, stripped down to: 322
if not modules then modules={} end modules ['l-functions']={
version=1.001,
@@ -1283,7 +1545,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-string"] = package.loaded["l-string"] or true
--- original size: 5983, stripped down to: 2959
+-- original size: 6419, stripped down to: 3339
if not modules then modules={} end modules ['l-string']={
version=1.001,
@@ -1321,22 +1583,26 @@ end
local stripper=patterns.stripper
local fullstripper=patterns.fullstripper
local collapser=patterns.collapser
+local nospacer=patterns.nospacer
local longtostring=patterns.longtostring
function string.strip(str)
- return lpegmatch(stripper,str) or ""
+ return str and lpegmatch(stripper,str) or ""
end
function string.fullstrip(str)
- return lpegmatch(fullstripper,str) or ""
+ return str and lpegmatch(fullstripper,str) or ""
end
function string.collapsespaces(str)
- return lpegmatch(collapser,str) or ""
+ return str and lpegmatch(collapser,str) or ""
+end
+function string.nospaces(str)
+ return str and lpegmatch(nospacer,str) or ""
end
function string.longtostring(str)
- return lpegmatch(longtostring,str) or ""
+ return str and lpegmatch(longtostring,str) or ""
end
local pattern=P(" ")^0*P(-1)
function string.is_empty(str)
- if str=="" then
+ if not str or str=="" then
return true
else
return lpegmatch(pattern,str) and true or false
@@ -1381,6 +1647,21 @@ function string.tformat(fmt,...)
end
string.quote=string.quoted
string.unquote=string.unquoted
+if not string.bytetable then
+ local limit=5000
+ function string.bytetable(str)
+ local n=#str
+ if n>limit then
+ local t={ byte(str,1,limit) }
+ for i=limit+1,n do
+ t[i]=byte(str,i)
+ end
+ return t
+ else
+ return { byte(str,1,n) }
+ end
+ end
+end
end -- of closure
@@ -1389,7 +1670,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-table"] = package.loaded["l-table"] or true
--- original size: 36997, stripped down to: 22376
+-- original size: 39608, stripped down to: 23165
if not modules then modules={} end modules ['l-table']={
version=1.001,
@@ -1716,19 +1997,23 @@ function table.fromhash(t)
end
return hsh
end
-local noquotes,hexify,handle,compact,inline,functions
+local noquotes,hexify,handle,compact,inline,functions,metacheck
local reserved=table.tohash {
'and','break','do','else','elseif','end','false','for','function','if',
'in','local','nil','not','or','repeat','return','then','true','until','while',
'NaN','goto',
}
-local function simple_table(t)
+local function is_simple_table(t,hexify)
local nt=#t
if nt>0 then
local n=0
for _,v in next,t do
n=n+1
+ if type(v)=="table" then
+ return nil
+ end
end
+ local haszero=rawget(t,0)
if n==nt then
local tt={}
for i=1,nt do
@@ -1738,10 +2023,10 @@ local function simple_table(t)
if hexify then
tt[i]=format("0x%X",v)
else
- tt[i]=tostring(v)
+ tt[i]=v
end
elseif tv=="string" then
- tt[i]=format("%q",v)
+ tt[i]=format("%q",v)
elseif tv=="boolean" then
tt[i]=v and "true" or "false"
else
@@ -1749,10 +2034,32 @@ local function simple_table(t)
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
+ if hexify then
+ tt[i+1]=format("0x%X",v)
+ else
+ tt[i+1]=v
+ end
+ 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
end
+table.is_simple_table=is_simple_table
local propername=patterns.propername
local function dummy() end
local function do_serialize(root,name,depth,level,indexed)
@@ -1786,7 +2093,7 @@ local function do_serialize(root,name,depth,level,indexed)
if compact then
last=#root
for k=1,last do
- if root[k]==nil then
+ if rawget(root,k)==nil then
last=k-1
break
end
@@ -1814,7 +2121,7 @@ local function do_serialize(root,name,depth,level,indexed)
if next(v)==nil then
handle(format("%s {},",depth))
elseif inline then
- local st=simple_table(v)
+ local st=is_simple_table(v,hexify)
if st then
handle(format("%s { %s },",depth,concat(st,", ")))
else
@@ -1851,6 +2158,7 @@ local function do_serialize(root,name,depth,level,indexed)
else
handle(format("%s [%s]=%s,",depth,k and "true" or "false",v))
end
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
if hexify then
handle(format("%s %s=0x%X,",depth,k,v))
@@ -1873,6 +2181,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=%q,",depth,k and "true" or "false",v))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=%q,",depth,k,v))
else
@@ -1888,13 +2197,14 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]={},",depth,k and "true" or "false"))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s={},",depth,k))
else
handle(format("%s [%q]={},",depth,k))
end
elseif inline then
- local st=simple_table(v)
+ local st=is_simple_table(v,hexify)
if st then
if tk=="number" then
if hexify then
@@ -1904,6 +2214,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]={ %s },",depth,k and "true" or "false",concat(st,", ")))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s={ %s },",depth,k,concat(st,", ")))
else
@@ -1924,6 +2235,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=%s,",depth,tostring(k),v and "true" or "false"))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=%s,",depth,k,v and "true" or "false"))
else
@@ -1940,6 +2252,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=load(%q),",depth,k and "true" or "false",f))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=load(%q),",depth,k,f))
else
@@ -1955,6 +2268,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=%q,",depth,k and "true" or "false",tostring(v)))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=%q,",depth,k,tostring(v)))
else
@@ -1976,6 +2290,7 @@ local function serialize(_handle,root,name,specification)
functions=specification.functions
compact=specification.compact
inline=specification.inline and compact
+ metacheck=specification.metacheck
if functions==nil then
functions=true
end
@@ -1985,6 +2300,9 @@ local function serialize(_handle,root,name,specification)
if inline==nil then
inline=compact
end
+ if metacheck==nil then
+ metacheck=true
+ end
else
noquotes=false
hexify=false
@@ -1992,6 +2310,7 @@ local function serialize(_handle,root,name,specification)
compact=true
inline=true
functions=true
+ metacheck=true
end
if tname=="string" then
if name=="return" then
@@ -2015,7 +2334,7 @@ local function serialize(_handle,root,name,specification)
handle("t={")
end
if root then
- if getmetatable(root) then
+ if metacheck and getmetatable(root) then
local dummy=root._w_h_a_t_e_v_e_r_
root._w_h_a_t_e_v_e_r_=nil
end
@@ -2091,6 +2410,38 @@ local function flattened(t,f,depth)
return f
end
table.flattened=flattened
+local function collapsed(t,f,h)
+ if f==nil then
+ f={}
+ h={}
+ end
+ for k=1,#t do
+ local v=t[k]
+ if type(v)=="table" then
+ collapsed(v,f,h)
+ elseif not h[v] then
+ f[#f+1]=v
+ h[v]=true
+ end
+ end
+ return f
+end
+local function collapsedhash(t,h)
+ if h==nil then
+ h={}
+ end
+ for k=1,#t do
+ local v=t[k]
+ if type(v)=="table" then
+ collapsedhash(v,h)
+ else
+ h[v]=true
+ end
+ end
+ return h
+end
+table.collapsed=collapsed
+table.collapsedhash=collapsedhash
local function unnest(t,f)
if not f then
f={}
@@ -2197,6 +2548,12 @@ function table.swapped(t,s)
end
return n
end
+function table.hashed(t)
+ for i=1,#t do
+ t[t[i]]=i
+ end
+ return t
+end
function table.mirrored(t)
local n={}
for k,v in next,t do
@@ -2365,7 +2722,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-io"] = package.loaded["l-io"] or true
--- original size: 9001, stripped down to: 6512
+-- original size: 11790, stripped down to: 6961
if not modules then modules={} end modules ['l-io']={
version=1.001,
@@ -2375,6 +2732,7 @@ if not modules then modules={} end modules ['l-io']={
license="see context related readme files"
}
local io=io
+local open,flush,write,read=io.open,io.flush,io.write,io.read
local byte,find,gsub,format=string.byte,string.find,string.gsub,string.format
local concat=table.concat
local floor=math.floor
@@ -2384,50 +2742,56 @@ if string.find(os.getenv("PATH"),";",1,true) then
else
io.fileseparator,io.pathseparator="/",":"
end
-local function readall(f)
- return f:read("*all")
-end
+local large=2^24
+local medium=large/16
+local small=medium/8
local function readall(f)
local size=f:seek("end")
- if size==0 then
- return ""
- elseif size<1024*1024 then
+ if size>0 then
f:seek("set",0)
- return f:read('*all')
- else
- local done=f:seek("set",0)
- local step
- if size<1024*1024 then
- step=1024*1024
- elseif size>16*1024*1024 then
- step=16*1024*1024
- else
- step=floor(size/(1024*1024))*1024*1024/8
- end
- local data={}
- while true do
- local r=f:read(step)
- if not r then
- return concat(data)
- else
- data[#data+1]=r
- end
- end
+ return f:read(size)
+ else
+ return ""
end
end
io.readall=readall
function io.loaddata(filename,textmode)
- local f=io.open(filename,(textmode and 'r') or 'rb')
+ local f=open(filename,(textmode and 'r') or 'rb')
if f then
- local data=readall(f)
+ local size=f:seek("end")
+ local data=nil
+ if size>0 then
+ f:seek("set",0)
+ data=f:read(size)
+ end
f:close()
- if #data>0 then
- return data
+ return data
+ end
+end
+function io.copydata(source,target,action)
+ local f=open(source,"rb")
+ if f then
+ local g=open(target,"wb")
+ if g then
+ local size=f:seek("end")
+ if size>0 then
+ f:seek("set",0)
+ local data=f:read(size)
+ if action then
+ data=action(data)
+ end
+ if data then
+ g:write(data)
+ end
+ end
+ g:close()
end
+ f:close()
+ flush()
end
end
function io.savedata(filename,data,joiner)
- local f=io.open(filename,"wb")
+ local f=open(filename,"wb")
if f then
if type(data)=="table" then
f:write(concat(data,joiner or ""))
@@ -2437,40 +2801,70 @@ function io.savedata(filename,data,joiner)
f:write(data or "")
end
f:close()
- io.flush()
+ flush()
return true
else
return false
end
end
-function io.loadlines(filename,n)
- local f=io.open(filename,'r')
- if not f then
- elseif n then
- local lines={}
- for i=1,n do
- local line=f:read("*lines")
- if line then
- lines[#lines+1]=line
- else
- break
+if fio and fio.readline then
+ local readline=fio.readline
+ function io.loadlines(filename,n)
+ local f=open(filename,'r')
+ if not f then
+ elseif n then
+ local lines={}
+ for i=1,n do
+ local line=readline(f)
+ if line then
+ lines[i]=line
+ else
+ break
+ end
+ end
+ f:close()
+ lines=concat(lines,"\n")
+ if #lines>0 then
+ return lines
+ end
+ else
+ local line=readline(f)
+ f:close()
+ if line and #line>0 then
+ return line
end
end
- f:close()
- lines=concat(lines,"\n")
- if #lines>0 then
- return lines
- end
- else
- local line=f:read("*line") or ""
- f:close()
- if #line>0 then
- return line
+ end
+else
+ function io.loadlines(filename,n)
+ local f=open(filename,'r')
+ if not f then
+ elseif n then
+ local lines={}
+ for i=1,n do
+ local line=f:read("*lines")
+ if line then
+ lines[i]=line
+ else
+ break
+ end
+ end
+ f:close()
+ lines=concat(lines,"\n")
+ if #lines>0 then
+ return lines
+ end
+ else
+ local line=f:read("*line") or ""
+ f:close()
+ if #line>0 then
+ return line
+ end
end
end
end
function io.loadchunk(filename,n)
- local f=io.open(filename,'rb')
+ local f=open(filename,'rb')
if f then
local data=f:read(n or 1024)
f:close()
@@ -2480,7 +2874,7 @@ function io.loadchunk(filename,n)
end
end
function io.exists(filename)
- local f=io.open(filename)
+ local f=open(filename)
if f==nil then
return false
else
@@ -2489,7 +2883,7 @@ function io.exists(filename)
end
end
function io.size(filename)
- local f=io.open(filename)
+ local f=open(filename)
if f==nil then
return 0
else
@@ -2498,11 +2892,11 @@ function io.size(filename)
return s
end
end
-function io.noflines(f)
+local function noflines(f)
if type(f)=="string" then
- local f=io.open(filename)
+ local f=open(filename)
if f then
- local n=f and io.noflines(f) or 0
+ local n=f and noflines(f) or 0
f:close()
return n
else
@@ -2517,6 +2911,7 @@ function io.noflines(f)
return n
end
end
+io.noflines=noflines
local nextchar={
[ 4]=function(f)
return f:read(1,1,1,1)
@@ -2594,16 +2989,16 @@ function io.bytes(f,n)
end
function io.ask(question,default,options)
while true do
- io.write(question)
+ write(question)
if options then
- io.write(format(" [%s]",concat(options,"|")))
+ write(format(" [%s]",concat(options,"|")))
end
if default then
- io.write(format(" [%s]",default))
+ write(format(" [%s]",default))
end
- io.write(format(" "))
- io.flush()
- local answer=io.read()
+ write(format(" "))
+ flush()
+ local answer=read()
answer=gsub(answer,"^%s*(.*)%s*$","%1")
if answer=="" and default then
return default
@@ -2625,7 +3020,7 @@ function io.ask(question,default,options)
end
end
end
-local function readnumber(f,n,m)
+local function readnumber(f,n,m)
if m then
f:seek("set",n)
n=m
@@ -2634,31 +3029,31 @@ local function readnumber(f,n,m)
return byte(f:read(1))
elseif n==2 then
local a,b=byte(f:read(2),1,2)
- return 256*a+b
+ return 0x100*a+b
elseif n==3 then
local a,b,c=byte(f:read(3),1,3)
- return 256*256*a+256*b+c
+ return 0x10000*a+0x100*b+c
elseif n==4 then
local a,b,c,d=byte(f:read(4),1,4)
- return 256*256*256*a+256*256*b+256*c+d
+ return 0x1000000*a+0x10000*b+0x100*c+d
elseif n==8 then
local a,b=readnumber(f,4),readnumber(f,4)
- return 256*a+b
+ return 0x100*a+b
elseif n==12 then
local a,b,c=readnumber(f,4),readnumber(f,4),readnumber(f,4)
- return 256*256*a+256*b+c
+ return 0x10000*a+0x100*b+c
elseif n==-2 then
local b,a=byte(f:read(2),1,2)
- return 256*a+b
+ return 0x100*a+b
elseif n==-3 then
local c,b,a=byte(f:read(3),1,3)
- return 256*256*a+256*b+c
+ return 0x10000*a+0x100*b+c
elseif n==-4 then
local d,c,b,a=byte(f:read(4),1,4)
- return 256*256*256*a+256*256*b+256*c+d
+ return 0x1000000*a+0x10000*b+0x100*c+d
elseif n==-8 then
local h,g,f,e,d,c,b,a=byte(f:read(8),1,8)
- return 256*256*256*256*256*256*256*a+256*256*256*256*256*256*b+256*256*256*256*256*c+256*256*256*256*d+256*256*256*e+256*256*f+256*g+h
+ return 0x100000000000000*a+0x1000000000000*b+0x10000000000*c+0x100000000*d+0x1000000*e+0x10000*f+0x100*g+h
else
return 0
end
@@ -2680,7 +3075,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-number"] = package.loaded["l-number"] or true
--- original size: 5146, stripped down to: 2933
+-- original size: 5358, stripped down to: 3177
if not modules then modules={} end modules ['l-number']={
version=1.001,
@@ -2693,6 +3088,7 @@ local tostring,tonumber=tostring,tonumber
local format,floor,match,rep=string.format,math.floor,string.match,string.rep
local concat,insert=table.concat,table.insert
local lpegmatch=lpeg.match
+local floor=math.floor
number=number or {}
local number=number
if bit32 then
@@ -2817,6 +3213,26 @@ end
function number.bits(n)
return { bits(n,1) }
end
+function number.bytetodecimal(b)
+ local d=floor(b*100/255+0.5)
+ if d>100 then
+ return 100
+ elseif d<-100 then
+ return -100
+ else
+ return d
+ end
+end
+function number.decimaltobyte(d)
+ local b=floor(d*255/100+0.5)
+ if b>255 then
+ return 255
+ elseif b<-255 then
+ return -255
+ else
+ return b
+ end
+end
end -- of closure
@@ -2825,7 +3241,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-set"] = package.loaded["l-set"] or true
--- original size: 2010, stripped down to: 1186
+-- original size: 1923, stripped down to: 1133
if not modules then modules={} end modules ['l-set']={
version=1.001,
@@ -2898,7 +3314,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-os"] = package.loaded["l-os"] or true
--- original size: 16390, stripped down to: 9734
+-- original size: 16268, stripped down to: 9246
if not modules then modules={} end modules ['l-os']={
version=1.001,
@@ -2974,7 +3390,7 @@ if not os.__getenv__ then
end
local execute=os.execute
local iopopen=io.popen
-function os.resultof(command)
+local function resultof(command)
local handle=iopopen(command,"r")
if handle then
local result=handle:read("*all") or ""
@@ -2984,9 +3400,13 @@ function os.resultof(command)
return ""
end
end
+os.resultof=resultof
+function os.pipeto(command)
+ return iopopen(command,"w")
+end
if not io.fileseparator then
if find(os.getenv("PATH"),";",1,true) then
- io.fileseparator,io.pathseparator,os.type="\\",";",os.type or "mswin"
+ io.fileseparator,io.pathseparator,os.type="\\",";",os.type or "windows"
else
io.fileseparator,io.pathseparator,os.type="/",":",os.type or "unix"
end
@@ -3029,17 +3449,6 @@ setmetatable(os,{ __index=function(t,k)
return r and r(t,k) or nil
end })
local name,platform=os.name or "linux",os.getenv("MTX_PLATFORM") or ""
-local function guess()
- local architecture=os.resultof("uname -m") or ""
- if architecture~="" then
- return architecture
- end
- architecture=os.getenv("HOSTTYPE") or ""
- if architecture~="" then
- return architecture
- end
- return os.resultof("echo $HOSTTYPE") or ""
-end
if platform~="" then
os.platform=platform
elseif os.type=="windows" then
@@ -3056,7 +3465,7 @@ elseif os.type=="windows" then
end
elseif name=="linux" then
function resolvers.platform(t,k)
- local platform,architecture="",os.getenv("HOSTTYPE") or os.resultof("uname -m") or ""
+ local platform,architecture="",os.getenv("HOSTTYPE") or resultof("uname -m") or ""
if find(architecture,"x86_64",1,true) then
platform="linux-64"
elseif find(architecture,"ppc",1,true) then
@@ -3070,7 +3479,7 @@ elseif name=="linux" then
end
elseif name=="macosx" then
function resolvers.platform(t,k)
- local platform,architecture="",os.resultof("echo $HOSTTYPE") or ""
+ local platform,architecture="",resultof("echo $HOSTTYPE") or ""
if architecture=="" then
platform="osx-intel"
elseif find(architecture,"i386",1,true) then
@@ -3086,7 +3495,7 @@ elseif name=="macosx" then
end
elseif name=="sunos" then
function resolvers.platform(t,k)
- local platform,architecture="",os.resultof("uname -m") or ""
+ local platform,architecture="",resultof("uname -m") or ""
if find(architecture,"sparc",1,true) then
platform="solaris-sparc"
else
@@ -3098,7 +3507,7 @@ elseif name=="sunos" then
end
elseif name=="freebsd" then
function resolvers.platform(t,k)
- local platform,architecture="",os.resultof("uname -m") or ""
+ local platform,architecture="",resultof("uname -m") or ""
if find(architecture,"amd64",1,true) then
platform="freebsd-amd64"
else
@@ -3110,7 +3519,7 @@ elseif name=="freebsd" then
end
elseif name=="kfreebsd" then
function resolvers.platform(t,k)
- local platform,architecture="",os.getenv("HOSTTYPE") or os.resultof("uname -m") or ""
+ local platform,architecture="",os.getenv("HOSTTYPE") or resultof("uname -m") or ""
if find(architecture,"x86_64",1,true) then
platform="kfreebsd-amd64"
else
@@ -3241,7 +3650,7 @@ if not os.sleep then
end
end
local function isleapyear(year)
- return (year%400==0) or ((year%100~=0) and (year%4==0))
+ return (year%4==0) and (year%100~=0 or year%400==0)
end
os.isleapyear=isleapyear
local days={ 31,28,31,30,31,30,31,31,30,31,30,31 }
@@ -3280,7 +3689,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-file"] = package.loaded["l-file"] or true
--- original size: 21648, stripped down to: 10238
+-- original size: 20997, stripped down to: 9986
if not modules then modules={} end modules ['l-file']={
version=1.001,
@@ -3617,13 +4026,15 @@ function file.robustname(str,strict)
end
end
end
-file.readdata=io.loaddata
-file.savedata=io.savedata
+local loaddata=io.loaddata
+local savedata=io.savedata
+file.readdata=loaddata
+file.savedata=savedata
function file.copy(oldname,newname)
if oldname and newname then
- local data=io.loaddata(oldname)
+ local data=loaddata(oldname)
if data and data~="" then
- file.savedata(newname,data)
+ savedata(newname,data)
end
end
end
@@ -3660,7 +4071,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-gzip"] = package.loaded["l-gzip"] or true
--- original size: 1265, stripped down to: 1038
+-- original size: 1211, stripped down to: 1002
if not modules then modules={} end modules ['l-gzip']={
version=1.001,
@@ -3714,7 +4125,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-md5"] = package.loaded["l-md5"] or true
--- original size: 3355, stripped down to: 2321
+-- original size: 3309, stripped down to: 2314
if not modules then modules={} end modules ['l-md5']={
version=1.001,
@@ -3744,6 +4155,8 @@ do
if not md5.HEX then function md5.HEX(str) if str then return lpegmatch(bytestoHEX,md5sum(str)) end end end
if not md5.hex then function md5.hex(str) if str then return lpegmatch(bytestohex,md5sum(str)) end end end
if not md5.dec then function md5.dec(str) if str then return lpegmatch(bytestodec,md5sum(str)) end end end
+ md5.sumhexa=md5.hex
+ md5.sumHEXA=md5.HEX
end
end
function file.needsupdating(oldname,newname,threshold)
@@ -3802,7 +4215,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-url"] = package.loaded["l-url"] or true
--- original size: 12897, stripped down to: 5882
+-- original size: 12531, stripped down to: 5721
if not modules then modules={} end modules ['l-url']={
version=1.001,
@@ -4019,7 +4432,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-dir"] = package.loaded["l-dir"] or true
--- original size: 17358, stripped down to: 11378
+-- original size: 17703, stripped down to: 11691
if not modules then modules={} end modules ['l-dir']={
version=1.001,
@@ -4283,6 +4696,31 @@ local function globfiles(path,recurse,func,files)
return files
end
dir.globfiles=globfiles
+local function globdirs(path,recurse,func,files)
+ if type(func)=="string" then
+ local s=func
+ func=function(name) return find(name,s) end
+ end
+ files=files or {}
+ local noffiles=#files
+ for name in walkdir(path) do
+ if find(name,"^%.") then
+ else
+ local mode=attributes(name,'mode')
+ if mode=="directory" then
+ if not func or func(name) then
+ noffiles=noffiles+1
+ files[noffiles]=path.."/"..name
+ if recurse then
+ globdirs(path.."/"..name,recurse,func,files)
+ end
+ end
+ end
+ end
+ end
+ return files
+end
+dir.globdirs=globdirs
function dir.ls(pattern)
return concat(glob(pattern),"\n")
end
@@ -4447,9 +4885,13 @@ end
file.expandname=dir.expandname
local stack={}
function dir.push(newdir)
- insert(stack,currentdir())
+ local curdir=currentdir()
+ insert(stack,curdir)
if newdir and newdir~="" then
chdir(newdir)
+ return newdir
+ else
+ return curdir
end
end
function dir.pop()
@@ -4484,7 +4926,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-boolean"] = package.loaded["l-boolean"] or true
--- original size: 1919, stripped down to: 1621
+-- original size: 1850, stripped down to: 1568
if not modules then modules={} end modules ['l-boolean']={
version=1.001,
@@ -4556,7 +4998,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-unicode"] = package.loaded["l-unicode"] or true
--- original size: 38699, stripped down to: 16321
+-- original size: 38263, stripped down to: 16330
if not modules then modules={} end modules ['l-unicode']={
version=1.001,
@@ -5167,6 +5609,23 @@ function utf.chrlen(u)
(u<0xFC and 5) or
(u<0xFE and 6) or 0
end
+local extract=bit32.extract
+local char=string.char
+function unicode.toutf32string(n)
+ if n<=0xFF then
+ return
+ char(n).."\000\000\000"
+ elseif n<=0xFFFF then
+ return
+ char(extract(n,0,8))..char(extract(n,8,8)).."\000\000"
+ elseif n<=0xFFFFFF then
+ return
+ char(extract(n,0,8))..char(extract(n,8,8))..char(extract(n,16,8)).."\000"
+ else
+ return
+ char(extract(n,0,8))..char(extract(n,8,8))..char(extract(n,16,8))..char(extract(n,24,8))
+ end
+end
end -- of closure
@@ -5175,7 +5634,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-math"] = package.loaded["l-math"] or true
--- original size: 1012, stripped down to: 912
+-- original size: 974, stripped down to: 890
if not modules then modules={} end modules ['l-math']={
version=1.001,
@@ -5215,7 +5674,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-str"] = package.loaded["util-str"] or true
--- original size: 36053, stripped down to: 19685
+-- original size: 36148, stripped down to: 20179
if not modules then modules={} end modules ['util-str']={
version=1.001,
@@ -5227,7 +5686,7 @@ if not modules then modules={} end modules ['util-str']={
utilities=utilities or {}
utilities.strings=utilities.strings or {}
local strings=utilities.strings
-local format,gsub,rep,sub=string.format,string.gsub,string.rep,string.sub
+local format,gsub,rep,sub,find=string.format,string.gsub,string.rep,string.sub,string.find
local load,dump=load,string.dump
local tonumber,type,tostring=tonumber,type,tostring
local unpack,concat=table.unpack,table.concat
@@ -5410,6 +5869,25 @@ function number.signed(i)
return "-",-i
end
end
+local digit=patterns.digit
+local period=patterns.period
+local three=digit*digit*digit
+local splitter=Cs (
+ (((1-(three^1*period))^1+C(three))*(Carg(1)*three)^1+C((1-period)^1))*(P(1)/""*Carg(2))*C(2)
+)
+patterns.formattednumber=splitter
+function number.formatted(n,sep1,sep2)
+ local s=type(s)=="string" and n or format("%0.2f",n)
+ if sep1==true then
+ return lpegmatch(splitter,s,1,".",",")
+ elseif sep1=="." then
+ return lpegmatch(splitter,s,1,sep1,sep2 or ",")
+ elseif sep1=="," then
+ return lpegmatch(splitter,s,1,sep1,sep2 or ".")
+ else
+ return lpegmatch(splitter,s,1,sep1 or ",",sep2 or ".")
+ end
+end
local zero=P("0")^1/""
local plus=P("+")/""
local minus=P("-")
@@ -5435,6 +5913,27 @@ function number.sparseexponent(f,n)
end
return tostring(n)
end
+local hf={}
+local hs={}
+setmetatable(hf,{ __index=function(t,k)
+ local v="%."..k.."f"
+ t[k]=v
+ return v
+end } )
+setmetatable(hs,{ __index=function(t,k)
+ local v="%"..k.."s"
+ t[k]=v
+ return v
+end } )
+function number.formattedfloat(n,b,a)
+ local s=format(hf[a],n)
+ local l=(b or 0)+(a or 0)+1
+ if #s<l then
+ return format(hs[l],s)
+ else
+ return s
+ end
+end
local template=[[
%s
%s
@@ -5462,6 +5961,7 @@ local autodouble=string.autodouble
local sequenced=table.sequenced
local formattednumber=number.formatted
local sparseexponent=number.sparseexponent
+local formattedfloat=number.formattedfloat
]]
else
environment={
@@ -5485,6 +5985,7 @@ else
sequenced=table.sequenced,
formattednumber=number.formatted,
sparseexponent=number.sparseexponent,
+ formattedfloat=number.formattedfloat
}
end
local arguments={ "a1" }
@@ -5495,6 +5996,7 @@ setmetatable(arguments,{ __index=function(t,k)
end
})
local prefix_any=C((S("+- .")+R("09"))^0)
+local prefix_sub=(C((S("+-")+R("09"))^0)+Cc(0))*P(".")*(C((S("+-")+R("09"))^0)+Cc(0))
local prefix_tab=P("{")*C((1-P("}"))^0)*P("}")+C((1-R("az","AZ","09","%%"))^0)
local format_s=function(f)
n=n+1
@@ -5545,6 +6047,10 @@ local format_F=function(f)
return format("format((a%s %% 1 == 0) and '%%i' or '%%%sf',a%s)",n,f,n)
end
end
+local format_k=function(b,a)
+ n=n+1
+ return format("formattedfloat(a%s,%i,%i)",n,b or 0,a or 0)
+end
local format_g=function(f)
n=n+1
return format("format('%%%sg',a%s)",f,n)
@@ -5693,25 +6199,6 @@ end
local format_W=function(f)
return format("nspaces[%s]",tonumber(f) or 0)
end
-local digit=patterns.digit
-local period=patterns.period
-local three=digit*digit*digit
-local splitter=Cs (
- (((1-(three^1*period))^1+C(three))*(Carg(1)*three)^1+C((1-period)^1))*(P(1)/""*Carg(2))*C(2)
-)
-patterns.formattednumber=splitter
-function number.formatted(n,sep1,sep2)
- local s=type(s)=="string" and n or format("%0.2f",n)
- if sep1==true then
- return lpegmatch(splitter,s,1,".",",")
- elseif sep1=="." then
- return lpegmatch(splitter,s,1,sep1,sep2 or ",")
- elseif sep1=="," then
- return lpegmatch(splitter,s,1,sep1,sep2 or ".")
- else
- return lpegmatch(splitter,s,1,sep1 or ",",sep2 or ".")
- end
-end
local format_m=function(f)
n=n+1
if not f or f=="" then
@@ -5736,9 +6223,16 @@ end
local format_extension=function(extensions,f,name)
local extension=extensions[name] or "tostring(%s)"
local f=tonumber(f) or 1
+ local w=find(extension,"%.%.%.")
if f==0 then
+ if w then
+ extension=gsub(extension,"%.%.%.","")
+ end
return extension
elseif f==1 then
+ if w then
+ extension=gsub(extension,"%.%.%.","%%s")
+ end
n=n+1
local a="a"..n
return format(extension,a,a)
@@ -5746,10 +6240,13 @@ local format_extension=function(extensions,f,name)
local a="a"..(n+f+1)
return format(extension,a,a)
else
+ if w then
+ extension=gsub(extension,"%.%.%.",rep("%%s,",f-1).."%%s")
+ end
local t={}
for i=1,f do
n=n+1
- t[#t+1]="a"..n
+ t[i]="a"..n
end
return format(extension,unpack(t))
end
@@ -5762,7 +6259,8 @@ local builder=Cs { "start",
+V("s")+V("q")+V("i")+V("d")+V("f")+V("F")+V("g")+V("G")+V("e")+V("E")+V("x")+V("X")+V("o")
+V("c")+V("C")+V("S")
+V("Q")
-+V("N")
++V("N")
++V("k")
+V("r")+V("h")+V("H")+V("u")+V("U")+V("p")+V("b")+V("t")+V("T")+V("l")+V("L")+V("I")+V("w")
+V("W")
+V("a")
@@ -5789,6 +6287,7 @@ local builder=Cs { "start",
["S"]=(prefix_any*P("S"))/format_S,
["Q"]=(prefix_any*P("Q"))/format_S,
["N"]=(prefix_any*P("N"))/format_N,
+ ["k"]=(prefix_sub*P("k"))/format_k,
["c"]=(prefix_any*P("c"))/format_c,
["C"]=(prefix_any*P("C"))/format_C,
["r"]=(prefix_any*P("r"))/format_r,
@@ -5909,7 +6408,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-tab"] = package.loaded["util-tab"] or true
--- original size: 28680, stripped down to: 18636
+-- original size: 27407, stripped down to: 17116
if not modules then modules={} end modules ['util-tab']={
version=1.001,
@@ -5923,7 +6422,7 @@ utilities.tables=utilities.tables or {}
local tables=utilities.tables
local format,gmatch,gsub,sub=string.format,string.gmatch,string.gsub,string.sub
local concat,insert,remove,sort=table.concat,table.insert,table.remove,table.sort
-local setmetatable,getmetatable,tonumber,tostring=setmetatable,getmetatable,tonumber,tostring
+local setmetatable,getmetatable,tonumber,tostring,rawget=setmetatable,getmetatable,tonumber,tostring,rawget
local type,next,rawset,tonumber,tostring,load,select=type,next,rawset,tonumber,tostring,load,select
local lpegmatch,P,Cs,Cc=lpeg.match,lpeg.P,lpeg.Cs,lpeg.Cc
local sortedkeys,sortedpairs=table.sortedkeys,table.sortedpairs
@@ -6063,7 +6562,7 @@ function table.tocsv(t,specification)
r[f]=tostring(field)
end
end
- result[#result+1]=concat(r,separator)
+ result[i+1]=concat(r,separator)
end
return concat(result,"\n")
else
@@ -6295,11 +6794,12 @@ function table.autokey(t,k)
return v
end
local selfmapper={ __index=function(t,k) t[k]=k return k end }
-function table.twowaymapper(t)
- if not t then
- t={}
- else
- for i=0,#t do
+function table.twowaymapper(t)
+ if not t then
+ t={}
+ else
+ local zero=rawget(t,0)
+ for i=zero and 0 or 1,#t do
local ti=t[i]
if ti then
local i=tostring(i)
@@ -6307,7 +6807,6 @@ function table.twowaymapper(t)
t[ti]=i
end
end
- t[""]=t[0] or ""
end
setmetatable(t,selfmapper)
return t
@@ -6346,6 +6845,7 @@ local f_table_entry=formatters["[%q]={"]
local f_table_finish=formatters["}"]
local spaces=utilities.strings.newrepeater(" ")
local original_serialize=table.serialize
+local is_simple_table=table.is_simple_table
local function serialize(root,name,specification)
if type(specification)=="table" then
return original_serialize(root,name,specification)
@@ -6353,54 +6853,6 @@ local function serialize(root,name,specification)
local t
local n=1
local unknown=false
- local function simple_table(t)
- local nt=#t
- if nt>0 then
- local n=0
- for _,v in next,t do
- n=n+1
- if type(v)=="table" then
- return nil
- end
- end
- local haszero=t[0]
- if n==nt then
- local tt={}
- for i=1,nt do
- local v=t[i]
- local tv=type(v)
- if tv=="number" then
- tt[i]=v
- elseif tv=="string" then
- tt[i]=format("%q",v)
- elseif tv=="boolean" then
- tt[i]=v and "true" or "false"
- else
- return nil
- 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
- end
local function do_serialize(root,name,depth,level,indexed)
if level>0 then
n=n+1
@@ -6425,7 +6877,7 @@ local function serialize(root,name,specification)
local last=0
last=#root
for k=1,last do
- if root[k]==nil then
+ if rawget(root,k)==nil then
last=k-1
break
end
@@ -6448,7 +6900,7 @@ local function serialize(root,name,specification)
if next(v)==nil then
n=n+1 t[n]=f_val_not(depth)
else
- local st=simple_table(v)
+ local st=is_simple_table(v)
if st then
n=n+1 t[n]=f_val_seq(depth,st)
else
@@ -6492,7 +6944,7 @@ local function serialize(root,name,specification)
n=n+1 t[n]=f_key_str_value_not(depth,tostring(k))
end
else
- local st=simple_table(v)
+ local st=is_simple_table(v)
if not st then
do_serialize(v,k,depth,level+1)
elseif tk=="number" then
@@ -6552,11 +7004,11 @@ local function serialize(root,name,specification)
end
if root then
if getmetatable(root) then
- local dummy=root._w_h_a_t_e_v_e_r_
+ local dummy=root._w_h_a_t_e_v_e_r_
root._w_h_a_t_e_v_e_r_=nil
end
if next(root)~=nil then
- local st=simple_table(root)
+ local st=is_simple_table(root)
if st then
return t[1]..f_fin_seq(st)
else
@@ -6570,7 +7022,12 @@ local function serialize(root,name,specification)
end
table.serialize=serialize
if setinspector then
- setinspector("table",function(v) if type(v)=="table" then print(serialize(v,"table",{})) return true end end)
+ setinspector("table",function(v)
+ if type(v)=="table" then
+ print(serialize(v,"table",{ metacheck=false }))
+ return true
+ end
+ end)
end
@@ -6580,7 +7037,7 @@ 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
+-- original size: 7567, stripped down to: 5575
if not modules then modules={} end modules ['util-fil']={
version=1.001,
@@ -6590,7 +7047,9 @@ if not modules then modules={} end modules ['util-fil']={
license="see context related readme files"
}
local byte=string.byte
-local extract=bit32.extract
+local char=string.char
+local extract=bit32 and bit32.extract
+local floor=math.floor
utilities=utilities or {}
local files={}
utilities.files=files
@@ -6609,6 +7068,7 @@ end
function files.size(f)
return f:seek("end")
end
+files.getsize=files.size
function files.setposition(f,n)
if zerobased[f] then
f:seek("set",n)
@@ -6646,6 +7106,10 @@ end
function files.readbytes(f,n)
return byte(f:read(n),1,n)
end
+function files.readbytetable(f,n)
+ local s=f:read(n or 1)
+ return { byte(s,1,#s) }
+end
function files.readchar(f)
return f:read(1)
end
@@ -6655,7 +7119,7 @@ end
function files.readinteger1(f)
local n=byte(f:read(1))
if n>=0x80 then
- return n-0xFF-1
+ return n-0x100
else
return n
end
@@ -6663,55 +7127,107 @@ end
files.readcardinal1=files.readbyte
files.readcardinal=files.readcardinal1
files.readinteger=files.readinteger1
+files.readsignedbyte=files.readinteger1
function files.readcardinal2(f)
local a,b=byte(f:read(2),1,2)
return 0x100*a+b
end
+function files.readcardinal2le(f)
+ local b,a=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
+ if a>=0x80 then
+ return 0x100*a+b-0x10000
else
- return n
+ return 0x100*a+b
+ end
+end
+function files.readinteger2le(f)
+ local b,a=byte(f:read(2),1,2)
+ if a>=0x80 then
+ return 0x100*a+b-0x10000
+ else
+ return 0x100*a+b
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.readcardinal3le(f)
+ local c,b,a=byte(f:read(3),1,3)
+ return 0x10000*a+0x100*b+c
+end
+function files.readinteger3(f)
+ local a,b,c=byte(f:read(3),1,3)
+ if a>=0x80 then
+ return 0x10000*a+0x100*b+c-0x1000000
+ else
+ return 0x10000*a+0x100*b+c
+ end
+end
+function files.readinteger3le(f)
+ local c,b,a=byte(f:read(3),1,3)
+ if a>=0x80 then
+ return 0x10000*a+0x100*b+c-0x1000000
+ else
+ return 0x10000*a+0x100*b+c
+ end
+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.readcardinal4le(f)
+ local d,c,b,a=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
+ if a>=0x80 then
+ return 0x1000000*a+0x10000*b+0x100*c+d-0x100000000
else
- return n
+ return 0x1000000*a+0x10000*b+0x100*c+d
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
+function files.readinteger4le(f)
+ local d,c,b,a=byte(f:read(4),1,4)
+ if a>=0x80 then
+ return 0x1000000*a+0x10000*b+0x100*c+d-0x100000000
else
- return n+(0x100*c+d)/0xFFFF
+ return 0x1000000*a+0x10000*b+0x100*c+d
end
end
-function files.read2dot14(f)
+function files.readfixed2(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
+ if a>=0x80 then
+ return (a-0x100)+b/0x100
+ else
+ return (a )+b/0x100
+ end
+end
+function files.readfixed4(f)
+ local a,b,c,d=byte(f:read(4),1,4)
+ if a>=0x80 then
+ return (0x100*a+b-0x10000)+(0x100*c+d)/0x10000
else
- n=extract(n,30,2)
- return n+m/0x4000
+ return (0x100*a+b )+(0x100*c+d)/0x10000
+ end
+end
+if extract then
+ local extract=bit32.extract
+ local band=bit32.band
+ function files.read2dot14(f)
+ local a,b=byte(f:read(2),1,2)
+ if a>=0x80 then
+ local n=-(0x100*a+b)
+ return-(extract(n,14,2)+(band(n,0x3FFF)/16384.0))
+ else
+ local n=0x100*a+b
+ return (extract(n,14,2)+(band(n,0x3FFF)/16384.0))
+ end
end
end
function files.skipshort(f,n)
@@ -6720,6 +7236,55 @@ end
function files.skiplong(f,n)
f:read(4*(n or 1))
end
+function files.writecardinal2(f,n)
+ local a=char(n%256)
+ n=floor(n/256)
+ local b=char(n%256)
+ f:write(b,a)
+end
+function files.writecardinal4(f,n)
+ local a=char(n%256)
+ n=floor(n/256)
+ local b=char(n%256)
+ n=floor(n/256)
+ local c=char(n%256)
+ n=floor(n/256)
+ local d=char(n%256)
+ f:write(d,c,b,a)
+end
+function files.writestring(f,s)
+ f:write(char(byte(s,1,#s)))
+end
+function files.writebyte(f,b)
+ f:write(char(b))
+end
+if fio and fio.readcardinal1 then
+ files.readcardinal1=fio.readcardinal1
+ files.readcardinal2=fio.readcardinal2
+ files.readcardinal3=fio.readcardinal3
+ files.readcardinal4=fio.readcardinal4
+ files.readinteger1=fio.readinteger1
+ files.readinteger2=fio.readinteger2
+ files.readinteger3=fio.readinteger3
+ files.readinteger4=fio.readinteger4
+ files.read2dot14=fio.read2dot14
+ files.setposition=fio.setposition
+ files.getposition=fio.getposition
+ files.readbyte=files.readcardinal1
+ files.readsignedbyte=files.readinteger1
+ files.readcardinal=files.readcardinal1
+ files.readinteger=files.readinteger1
+ local skipposition=fio.skipposition
+ files.skipposition=skipposition
+ files.readbytes=fio.readbytes
+ files.readbytetable=fio.readbytetable
+ function files.skipshort(f,n)
+ skipposition(f,2*(n or 1))
+ end
+ function files.skiplong(f,n)
+ skipposition(f,4*(n or 1))
+ end
+end
end -- of closure
@@ -6728,7 +7293,7 @@ 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
+-- original size: 8716, stripped down to: 6754
if not modules then modules={} end modules ['util-sac']={
version=1.001,
@@ -6738,7 +7303,7 @@ if not modules then modules={} end modules ['util-sac']={
license="see context related readme files"
}
local byte,sub=string.byte,string.sub
-local extract=bit32.extract
+local extract=bit32 and bit32.extract
utilities=utilities or {}
local streams={}
utilities.streams=streams
@@ -6796,6 +7361,12 @@ function streams.readbytes(f,n)
f[2]=j
return byte(f[1],i,j-1)
end
+function streams.readbytetable(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
@@ -6815,7 +7386,7 @@ function streams.readinteger1(f)
f[2]=i+1
local n=byte(f[1],i)
if n>=0x80 then
- return n-0xFF-1
+ return n-0x100
else
return n
end
@@ -6830,16 +7401,33 @@ function streams.readcardinal2(f)
local a,b=byte(f[1],i,j)
return 0x100*a+b
end
+function streams.readcardinal2LE(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local b,a=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
+ if a>=0x80 then
+ return 0x100*a+b-0x10000
else
- return n
+ return 0x100*a+b
+ end
+end
+function streams.readinteger2le(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local b,a=byte(f[1],i,j)
+ if a>=0x80 then
+ return 0x100*a+b-0x10000
+ else
+ return 0x100*a+b
end
end
function streams.readcardinal3(f)
@@ -6849,6 +7437,35 @@ function streams.readcardinal3(f)
local a,b,c=byte(f[1],i,j)
return 0x10000*a+0x100*b+c
end
+function streams.readcardinal3le(f)
+ local i=f[2]
+ local j=i+2
+ f[2]=j+1
+ local c,b,a=byte(f[1],i,j)
+ return 0x10000*a+0x100*b+c
+end
+function streams.readinteger3(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local a,b,c=byte(f[1],i,j)
+ if a>=0x80 then
+ return 0x10000*a+0x100*b+c-0x1000000
+ else
+ return 0x10000*a+0x100*b+c
+ end
+end
+function streams.readinteger3le(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local c,b,a=byte(f[1],i,j)
+ if a>=0x80 then
+ return 0x10000*a+0x100*b+c-0x1000000
+ else
+ return 0x10000*a+0x100*b+c
+ end
+end
function streams.readcardinal4(f)
local i=f[2]
local j=i+3
@@ -6861,11 +7478,21 @@ function streams.readinteger4(f)
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
+ if a>=0x80 then
+ return 0x1000000*a+0x10000*b+0x100*c+d-0x100000000
else
- return n
+ return 0x1000000*a+0x10000*b+0x100*c+d
+ end
+end
+function streams.readinteger4le(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local d,c,b,a=byte(f[1],i,j)
+ if a>=0x80 then
+ return 0x1000000*a+0x10000*b+0x100*c+d-0x100000000
+ else
+ return 0x1000000*a+0x10000*b+0x100*c+d
end
end
function streams.readfixed4(f)
@@ -6873,26 +7500,38 @@ function streams.readfixed4(f)
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
+ if a>=0x80 then
+ return (0x100*a+b-0x10000)+(0x100*c+d)/0x10000
else
- return n+(0x100*c+d)/0xFFFF
+ return (0x100*a+b )+(0x100*c+d)/0x10000
end
end
-function streams.read2dot14(f)
+function streams.readfixed2(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
+ if a>=0x80 then
+ return (a-0x100)+b/0x100
+ else
+ return (a )+b/0x100
+ end
+end
+if extract then
+ local extract=bit32.extract
+ local band=bit32.band
+ function streams.read2dot14(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local a,b=byte(f[1],i,j)
+ if a>=0x80 then
+ local n=-(0x100*a+b)
+ return-(extract(n,14,2)+(band(n,0x3FFF)/16384.0))
+ else
+ local n=0x100*a+b
+ return (extract(n,14,2)+(band(n,0x3FFF)/16384.0))
+ end
end
end
function streams.skipshort(f,n)
@@ -6901,6 +7540,92 @@ end
function streams.skiplong(f,n)
f[2]=f[2]+4*(n or 1)
end
+if sio and sio.readcardinal2 then
+ local readcardinal1=sio.readcardinal1
+ local readcardinal2=sio.readcardinal2
+ local readcardinal3=sio.readcardinal3
+ local readcardinal4=sio.readcardinal4
+ local readinteger1=sio.readinteger1
+ local readinteger2=sio.readinteger2
+ local readinteger3=sio.readinteger3
+ local readinteger4=sio.readinteger4
+ local readfixed2=sio.readfixed2
+ local readfixed4=sio.readfixed4
+ local read2dot14=sio.read2dot14
+ local readbytes=sio.readbytes
+ local readbytetable=sio.readbytetable
+ function streams.readcardinal1(f)
+ local i=f[2]
+ f[2]=i+1
+ return readcardinal1(f[1],i)
+ end
+ function streams.readcardinal2(f)
+ local i=f[2]
+ f[2]=i+2
+ return readcardinal2(f[1],i)
+ end
+ function streams.readcardinal3(f)
+ local i=f[2]
+ f[2]=i+3
+ return readcardinal3(f[1],i)
+ end
+ function streams.readcardinal4(f)
+ local i=f[2]
+ f[2]=i+4
+ return readcardinal4(f[1],i)
+ end
+ function streams.readinteger1(f)
+ local i=f[2]
+ f[2]=i+1
+ return readinteger1(f[1],i)
+ end
+ function streams.readinteger2(f)
+ local i=f[2]
+ f[2]=i+2
+ return readinteger2(f[1],i)
+ end
+ function streams.readinteger3(f)
+ local i=f[2]
+ f[2]=i+3
+ return readinteger3(f[1],i)
+ end
+ function streams.readinteger4(f)
+ local i=f[2]
+ f[2]=i+4
+ return readinteger4(f[1],i)
+ end
+ function streams.read2dot4(f)
+ local i=f[2]
+ f[2]=i+2
+ return read2dot4(f[1],i)
+ end
+ function streams.readbytes(f,n)
+ local i=f[2]
+ local s=f[3]
+ local p=i+n
+ if p>s then
+ f[2]=s+1
+ else
+ f[2]=p
+ end
+ return readbytes(f[1],i,n)
+ end
+ function streams.readbytetable(f,n)
+ local i=f[2]
+ local s=f[3]
+ local p=i+n
+ if p>s then
+ f[2]=s+1
+ else
+ f[2]=p
+ end
+ return readbytetable(f[1],i,n)
+ end
+ streams.readbyte=streams.readcardinal1
+ streams.readsignedbyte=streams.readinteger1
+ streams.readcardinal=streams.readcardinal1
+ streams.readinteger=streams.readinteger1
+end
end -- of closure
@@ -6909,7 +7634,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-sto"] = package.loaded["util-sto"] or true
--- original size: 4100, stripped down to: 2852
+-- original size: 3926, stripped down to: 2742
if not modules then modules={} end modules ['util-sto']={
version=1.001,
@@ -7049,7 +7774,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-prs"] = package.loaded["util-prs"] or true
--- original size: 23411, stripped down to: 16177
+-- original size: 22883, stripped down to: 16045
if not modules then modules={} end modules ['util-prs']={
version=1.001,
@@ -7211,6 +7936,21 @@ function parsers.settings_to_array(str,strict)
return { str }
end
end
+function parsers.settings_to_numbers(str)
+ if not str or str=="" then
+ return {}
+ end
+ if type(str)=="table" then
+ elseif find(str,",",1,true) then
+ str=lpegmatch(pattern,str)
+ else
+ return { tonumber(str) }
+ end
+ for i=1,#str do
+ str[i]=tonumber(str[i])
+ end
+ return str
+end
local value=P(lbrace*C((nobrace+nestedbraces)^0)*rbrace)+C((nestedbraces+nestedbrackets+nestedparents+(1-comma))^0)
local pattern=spaces*Ct(value*(separator*value)^0)
function parsers.settings_to_array_obey_fences(str)
@@ -7587,7 +8327,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-fmt"] = package.loaded["util-fmt"] or true
--- original size: 2350, stripped down to: 1847
+-- original size: 2274, stripped down to: 1781
if not modules then modules={} end modules ['util-fmt']={
version=1.001,
@@ -7668,7 +8408,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-set"] = package.loaded["trac-set"] or true
--- original size: 12862, stripped down to: 9104
+-- original size: 12454, stripped down to: 8840
if not modules then modules={} end modules ['trac-set']={
version=1.001,
@@ -7854,7 +8594,6 @@ function setters.list(t)
return user,system
end
function setters.show(t)
- local category=t.name
local list=setters.list(t)
t.report()
for k=1,#list do
@@ -7981,7 +8720,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-log"] = package.loaded["trac-log"] or true
--- original size: 30767, stripped down to: 21355
+-- original size: 30007, stripped down to: 20818
if not modules then modules={} end modules ['trac-log']={
version=1.001,
@@ -8027,6 +8766,14 @@ if tex and (tex.jobname or tex.formatname) then
if texio.setescape then
texio.setescape(0)
end
+ if arg then
+ for k,v in next,arg do
+ if v=="--ansi" or v=="--c:ansi" then
+ variant="ansi"
+ break
+ end
+ end
+ end
local function useluawrites()
local texio_write_nl=texio.write_nl
local texio_write=texio.write
@@ -8612,7 +9359,6 @@ function logs.stop_page_number()
end
logs.flush()
end
-local report_files=logs.reporter("files")
local nesting=0
local verbose=false
local hasscheme=url.hasscheme
@@ -8774,7 +9520,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-inf"] = package.loaded["trac-inf"] or true
--- original size: 6917, stripped down to: 5484
+-- original size: 8036, stripped down to: 5567
if not modules then modules={} end modules ['trac-inf']={
version=1.001,
@@ -8806,11 +9552,13 @@ end
local function resettiming(instance)
timers[instance or "notimer"]={ timing=0,loadtime=0 }
end
+local ticks=clock
+local seconds=function(n) return n or 0 end
local function starttiming(instance)
local timer=timers[instance or "notimer"]
local it=timer.timing or 0
if it==0 then
- timer.starttime=clock()
+ timer.starttime=ticks()
if not timer.loadtime then
timer.loadtime=0
end
@@ -8824,12 +9572,13 @@ local function stoptiming(instance)
timer.timing=it-1
else
local starttime=timer.starttime
- if starttime then
- local stoptime=clock()
+ if starttime and starttime>0 then
+ local stoptime=ticks()
local loadtime=stoptime-starttime
timer.stoptime=stoptime
timer.loadtime=timer.loadtime+loadtime
timer.timing=0
+ timer.starttime=0
return loadtime
end
end
@@ -8840,7 +9589,7 @@ local function elapsed(instance)
return instance or 0
else
local timer=timers[instance or "notimer"]
- return timer and timer.loadtime or 0
+ return timer and seconds(timer.loadtime) or 0
end
end
local function elapsedtime(instance)
@@ -8888,10 +9637,13 @@ function statistics.show()
local total,indirect=status.callbacks or 0,status.indirect_callbacks or 0
return format("%s direct, %s indirect, %s total",total-indirect,indirect,total)
end)
- if jit then
- local jitstatus={ jit.status() }
- if jitstatus[1] then
- register("luajit options",concat(jitstatus," ",2))
+ if TEXENGINE=="luajittex" and JITSUPPORTED then
+ local jitstatus=jit.status
+ if jitstatus then
+ local jitstatus={ jitstatus() }
+ if jitstatus[1] then
+ register("luajit options",concat(jitstatus," ",2))
+ end
end
end
register("lua properties",function()
@@ -8955,7 +9707,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-pro"] = package.loaded["trac-pro"] or true
--- original size: 6039, stripped down to: 3616
+-- original size: 5829, stripped down to: 3501
if not modules then modules={} end modules ['trac-pro']={
version=1.001,
@@ -9102,7 +9854,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-lua"] = package.loaded["util-lua"] or true
--- original size: 5142, stripped down to: 3611
+-- original size: 5396, stripped down to: 3708
if not modules then modules={} end modules ['util-lua']={
version=1.001,
@@ -9224,6 +9976,17 @@ function luautilities.loadstripped(...)
return load(dump(l,true))
end
end
+local finalizers={}
+setmetatable(finalizers,{
+ __gc=function(t)
+ for i=1,#t do
+ pcall(t[i])
+ end
+ end
+} )
+function luautilities.registerfinalizer(f)
+ finalizers[#finalizers+1]=f
+end
end -- of closure
@@ -9232,7 +9995,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-deb"] = package.loaded["util-deb"] or true
--- original size: 4030, stripped down to: 2718
+-- original size: 8911, stripped down to: 6504
if not modules then modules={} end modules ['util-deb']={
version=1.001,
@@ -9242,75 +10005,230 @@ if not modules then modules={} end modules ['util-deb']={
license="see context related readme files"
}
local debug=require "debug"
-local getinfo=debug.getinfo
-local type,next,tostring=type,next,tostring
-local format,find=string.format,string.find
-local is_boolean=string.is_boolean
+local getinfo,sethook=debug.getinfo,debug.sethook
+local type,next,tostring,tonumber=type,next,tostring,tonumber
+local format,find,sub,gsub=string.format,string.find,string.sub,string.gsub
+local insert,remove,sort=table.insert,table.remove,table.sort
+local setmetatableindex=table.setmetatableindex
utilities=utilities or {}
local debugger=utilities.debugger or {}
utilities.debugger=debugger
-local counters={}
-local names={}
local report=logs.reporter("debugger")
-local function hook()
- local f=getinfo(2)
- if f then
- local n="unknown"
- if f.what=="C" then
- n=f.name or '<anonymous>'
- if not names[n] then
- names[n]=format("%42s",n)
+local ticks=os.gettimeofday or os.clock
+local seconds=function(n) return n or 0 end
+local overhead=0
+local dummycalls=10*1000
+local nesting=0
+local names={}
+local initialize=false
+if not (FFISUPPORTED and ffi) then
+elseif os.type=="windows" then
+ initialize=function()
+ local kernel=ffilib("kernel32","system")
+ if kernel then
+ local tonumber=ffi.number or tonumber
+ ffi.cdef[[
+ int QueryPerformanceFrequency(int64_t *lpFrequency);
+ int QueryPerformanceCounter(int64_t *lpPerformanceCount);
+ ]]
+ local target=ffi.new("__int64[1]")
+ ticks=function()
+ if kernel.QueryPerformanceCounter(target)==1 then
+ return tonumber(target[0])
+ else
+ return 0
+ end
end
- else
- n=f.name or f.namewhat or f.what
- if not n or n=="" then
- n="?"
+ local target=ffi.new("__int64[1]")
+ seconds=function(ticks)
+ if kernel.QueryPerformanceFrequency(target)==1 then
+ return ticks/tonumber(target[0])
+ else
+ return 0
+ end
+ end
+ end
+ initialize=false
+ end
+elseif os.type=="unix" then
+ initialize=function()
+ local C=ffi.C
+ local tonumber=ffi.number or tonumber
+ ffi.cdef [[
+ /* what a mess */
+ typedef int clk_id_t;
+ typedef enum { CLOCK_REALTIME, CLOCK_MONOTONIC, CLOCK_PROCESS_CPUTIME_ID } clk_id;
+ typedef struct timespec { long sec; long nsec; } ctx_timespec;
+ int clock_gettime(clk_id_t timerid, struct timespec *t);
+ ]]
+ local target=ffi.new("ctx_timespec[?]",1)
+ local clock=C.CLOCK_PROCESS_CPUTIME_ID
+ ticks=function ()
+ C.clock_gettime(clock,target)
+ return tonumber(target[0].sec*1000000000+target[0].nsec)
+ end
+ seconds=function(ticks)
+ return ticks/1000000000
+ end
+ initialize=false
+ end
+end
+setmetatableindex(names,function(t,name)
+ local v=setmetatableindex(function(t,source)
+ local v=setmetatableindex(function(t,line)
+ local v={ total=0,count=0 }
+ t[line]=v
+ return v
+ end)
+ t[source]=v
+ return v
+ end)
+ t[name]=v
+ return v
+end)
+local function hook(where)
+ local f=getinfo(2,"nSl")
+ if f then
+ local source=f.short_src
+ if not source then
+ return
+ end
+ local line=f.linedefined or 0
+ local name=f.name
+ if not name then
+ local what=f.what
+ if what=="C" then
+ name="<anonymous>"
+ else
+ name=f.namewhat or what or "<unknown>"
end
- if not names[n] then
- names[n]=format("%42s : % 5i : %s",n,f.linedefined or 0,f.short_src or "unknown source")
+ end
+ local data=names[name][source][line]
+ if where=="call" then
+ data.count=data.count+1
+ insert(data,ticks())
+ elseif where=="return" then
+ local t=remove(data)
+ if t then
+ data.total=data.total+ticks()-t
end
end
- counters[n]=(counters[n] or 0)+1
end
end
-function debugger.showstats(printer,threshold)
- printer=printer or report
- threshold=threshold or 0
- local total,grandtotal,functions=0,0,0
+function debugger.showstats(printer,threshold)
+ local printer=printer or report
+ local calls=0
+ local functions=0
local dataset={}
- for name,count in next,counters do
- dataset[#dataset+1]={ name,count }
+ local length=0
+ local wholetime=0
+ local threshold=threshold or 0
+ for name,sources in next,names do
+ for source,lines in next,sources do
+ for line,data in next,lines do
+ local count=data.count
+ if count>threshold then
+ if #name>length then
+ length=#name
+ end
+ local total=data.total
+ local real=total
+ if real>0 then
+ real=total-(count*overhead/dummycalls)
+ if real<0 then
+ real=0
+ end
+ wholetime=wholetime+real
+ end
+ if line<0 then
+ line=0
+ end
+ dataset[#dataset+1]={ real,total,count,name,source,line }
+ end
+ end
+ end
end
- table.sort(dataset,function(a,b) return a[2]==b[2] and b[1]>a[1] or a[2]>b[2] end)
+ sort(dataset,function(a,b)
+ if a[1]==b[1] then
+ if a[2]==b[2] then
+ if a[3]==b[3] then
+ if a[4]==b[4] then
+ if a[5]==b[5] then
+ return a[6]<b[6]
+ else
+ return a[5]<b[5]
+ end
+ else
+ return a[4]<b[4]
+ end
+ else
+ return b[3]<a[3]
+ end
+ else
+ return b[2]<a[2]
+ end
+ else
+ return b[1]<a[1]
+ end
+ end)
+ if length>50 then
+ length=50
+ end
+ local fmt=string.formatters["%4.9k %4.9k %3.3k %8i %-"..length.."s %4i %s"]
for i=1,#dataset do
- local d=dataset[i]
- local name=d[1]
- local count=d[2]
- if count>threshold and not find(name,"for generator") then
- printer(format("%8i %s\n",count,names[name]))
- total=total+count
- end
- grandtotal=grandtotal+count
+ local data=dataset[i]
+ local real=data[1]
+ local total=data[2]
+ local count=data[3]
+ local name=data[4]
+ local source=data[5]
+ local line=data[6]
+ local percent=real/wholetime
+ calls=calls+count
functions=functions+1
+ name=gsub(name,"%s+"," ")
+ if #name>length then
+ name=sub(name,1,length)
+ end
+ printer(fmt(seconds(total),seconds(real),percent,count,name,line,source))
end
- printer("\n")
- printer(format("functions : % 10i\n",functions))
- printer(format("total : % 10i\n",total))
- printer(format("grand total: % 10i\n",grandtotal))
- printer(format("threshold : % 10i\n",threshold))
+ printer("")
+ printer(format("functions : %i",functions))
+ printer(format("calls : %i",calls))
+ printer(format("overhead : %f",seconds(overhead/1000)))
end
function debugger.savestats(filename,threshold)
local f=io.open(filename,'w')
if f then
- debugger.showstats(function(str) f:write(str) end,threshold)
+ debugger.showstats(function(str) f:write(str,"\n") end,threshold)
f:close()
end
end
function debugger.enable()
- debug.sethook(hook,"c")
+ if nesting==0 then
+ running=true
+ if initialize then
+ initialize()
+ end
+ sethook(hook,"cr")
+ local function dummy() end
+ local t=ticks()
+ for i=1,dummycalls do
+ dummy()
+ end
+ overhead=ticks()-t
+ end
+ if nesting>0 then
+ nesting=nesting+1
+ end
end
function debugger.disable()
- debug.sethook()
+ if nesting>0 then
+ nesting=nesting-1
+ end
+ if nesting==0 then
+ sethook()
+ end
end
local function showtraceback(rep)
local level=2
@@ -9334,9 +10252,661 @@ end -- of closure
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
+
+if not modules then modules={} end modules ['util-tpl']={
+ 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"
+}
+utilities.templates=utilities.templates or {}
+local templates=utilities.templates
+local trace_template=false trackers.register("templates.trace",function(v) trace_template=v end)
+local report_template=logs.reporter("template")
+local tostring=tostring
+local format,sub,byte=string.format,string.sub,string.byte
+local P,C,R,Cs,Cc,Carg,lpegmatch,lpegpatterns=lpeg.P,lpeg.C,lpeg.R,lpeg.Cs,lpeg.Cc,lpeg.Carg,lpeg.match,lpeg.patterns
+local replacer
+local function replacekey(k,t,how,recursive)
+ local v=t[k]
+ if not v then
+ if trace_template then
+ report_template("unknown key %a",k)
+ end
+ return ""
+ else
+ v=tostring(v)
+ if trace_template then
+ report_template("setting key %a to value %a",k,v)
+ end
+ if recursive then
+ return lpegmatch(replacer,v,1,t,how,recursive)
+ else
+ return v
+ end
+ end
+end
+local sqlescape=lpeg.replacer {
+ { "'","''" },
+ { "\\","\\\\" },
+ { "\r\n","\\n" },
+ { "\r","\\n" },
+}
+local sqlquoted=Cs(Cc("'")*sqlescape*Cc("'"))
+lpegpatterns.sqlescape=sqlescape
+lpegpatterns.sqlquoted=sqlquoted
+local luaescape=lpegpatterns.luaescape
+local escapers={
+ lua=function(s)
+ return lpegmatch(luaescape,s)
+ end,
+ sql=function(s)
+ return lpegmatch(sqlescape,s)
+ end,
+}
+local quotedescapers={
+ lua=function(s)
+ return format("%q",s)
+ end,
+ sql=function(s)
+ return lpegmatch(sqlquoted,s)
+ end,
+}
+local luaescaper=escapers.lua
+local quotedluaescaper=quotedescapers.lua
+local function replacekeyunquoted(s,t,how,recurse)
+ if how==false then
+ return replacekey(s,t,how,recurse)
+ else
+ local escaper=how and escapers[how] or luaescaper
+ return escaper(replacekey(s,t,how,recurse))
+ end
+end
+local function replacekeyquoted(s,t,how,recurse)
+ if how==false then
+ return replacekey(s,t,how,recurse)
+ else
+ local escaper=how and quotedescapers[how] or quotedluaescaper
+ return escaper(replacekey(s,t,how,recurse))
+ end
+end
+local function replaceoptional(l,m,r,t,how,recurse)
+ local v=t[l]
+ return v and v~="" and lpegmatch(replacer,r,1,t,how or "lua",recurse or false) or ""
+end
+local single=P("%")
+local double=P("%%")
+local lquoted=P("%[")
+local rquoted=P("]%")
+local lquotedq=P("%(")
+local rquotedq=P(")%")
+local escape=double/'%%'
+local nosingle=single/''
+local nodouble=double/''
+local nolquoted=lquoted/''
+local norquoted=rquoted/''
+local nolquotedq=lquotedq/''
+local norquotedq=rquotedq/''
+local noloptional=P("%?")/''
+local noroptional=P("?%")/''
+local nomoptional=P(":")/''
+local args=Carg(1)*Carg(2)*Carg(3)
+local key=nosingle*((C((1-nosingle )^1)*args)/replacekey )*nosingle
+local quoted=nolquotedq*((C((1-norquotedq )^1)*args)/replacekeyquoted )*norquotedq
+local unquoted=nolquoted*((C((1-norquoted )^1)*args)/replacekeyunquoted)*norquoted
+local optional=noloptional*((C((1-nomoptional)^1)*nomoptional*C((1-noroptional)^1)*args)/replaceoptional)*noroptional
+local any=P(1)
+ replacer=Cs((unquoted+quoted+escape+optional+key+any)^0)
+local function replace(str,mapping,how,recurse)
+ if mapping and str then
+ return lpegmatch(replacer,str,1,mapping,how or "lua",recurse or false) or str
+ else
+ return str
+ end
+end
+templates.replace=replace
+function templates.replacer(str,how,recurse)
+ return function(mapping)
+ return lpegmatch(replacer,str,1,mapping,how or "lua",recurse or false) or str
+ end
+end
+function templates.load(filename,mapping,how,recurse)
+ local data=io.loaddata(filename) or ""
+ if mapping and next(mapping) then
+ return replace(data,mapping,how,recurse)
+ else
+ return data
+ end
+end
+function templates.resolve(t,mapping,how,recurse)
+ if not mapping then
+ mapping=t
+ end
+ for k,v in next,t do
+ t[k]=replace(v,mapping,how,recurse)
+ end
+ return t
+end
+
+
+end -- of closure
+
+do -- create closure to overcome 200 locals limit
+
+package.loaded["util-sbx"] = package.loaded["util-sbx"] or true
+
+-- original size: 20309, stripped down to: 13848
+
+if not modules then modules={} end modules ['util-sbx']={
+ 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"
+}
+if not sandbox then require("l-sandbox") end
+local next,type=next,type
+local replace=utilities.templates.replace
+local collapsepath=file.collapsepath
+local expandname=dir.expandname
+local sortedhash=table.sortedhash
+local lpegmatch=lpeg.match
+local platform=os.type
+local P,S,C=lpeg.P,lpeg.S,lpeg.C
+local gsub=string.gsub
+local lower=string.lower
+local find=string.find
+local concat=string.concat
+local unquoted=string.unquoted
+local optionalquoted=string.optionalquoted
+local basename=file.basename
+local sandbox=sandbox
+local validroots={}
+local validrunners={}
+local validbinaries=true
+local validlibraries=true
+local validators={}
+local finalized=nil
+local trace=false
+local p_validroot=nil
+local p_split=lpeg.firstofsplit(" ")
+local report=logs.reporter("sandbox")
+trackers.register("sandbox",function(v) trace=v end)
+sandbox.setreporter(report)
+sandbox.finalizer {
+ category="files",
+ action=function()
+ finalized=true
+ end
+}
+local function registerroot(root,what)
+ if finalized then
+ report("roots are already finalized")
+ else
+ if type(root)=="table" then
+ root,what=root[1],root[2]
+ end
+ if type(root)=="string" and root~="" then
+ root=collapsepath(expandname(root))
+ if what=="r" or what=="ro" or what=="readable" then
+ what="read"
+ elseif what=="w" or what=="wo" or what=="writable" then
+ what="write"
+ end
+ validroots[root]=what=="write" or false
+ end
+ end
+end
+sandbox.finalizer {
+ category="files",
+ action=function()
+ if p_validroot then
+ report("roots are already initialized")
+ else
+ sandbox.registerroot(".","write")
+ for name in sortedhash(validroots) do
+ if p_validroot then
+ p_validroot=P(name)+p_validroot
+ else
+ p_validroot=P(name)
+ end
+ end
+ p_validroot=p_validroot/validroots
+ end
+ end
+}
+local function registerbinary(name)
+ if finalized then
+ report("binaries are already finalized")
+ elseif type(name)=="string" and name~="" then
+ if not validbinaries then
+ return
+ end
+ if validbinaries==true then
+ validbinaries={ [name]=true }
+ else
+ validbinaries[name]=true
+ end
+ elseif name==true then
+ validbinaries={}
+ end
+end
+local function registerlibrary(name)
+ if finalized then
+ report("libraries are already finalized")
+ elseif type(name)=="string" and name~="" then
+ if not validlibraries then
+ return
+ end
+ if validlibraries==true then
+ validlibraries={ [name]=true }
+ else
+ validlibraries[name]=true
+ end
+ elseif name==true then
+ validlibraries={}
+ end
+end
+local p_write=S("wa") p_write=(1-p_write)^0*p_write
+local p_path=S("\\/~$%:") p_path=(1-p_path )^0*p_path
+local function normalized(name)
+ if platform=="windows" then
+ name=gsub(name,"/","\\")
+ end
+ return name
+end
+function sandbox.possiblepath(name)
+ return lpegmatch(p_path,name) and true or false
+end
+local filenamelogger=false
+function sandbox.setfilenamelogger(l)
+ filenamelogger=type(l)=="function" and l or false
+end
+local function validfilename(name,what)
+ if p_validroot and type(name)=="string" and lpegmatch(p_path,name) then
+ local asked=collapsepath(expandname(name))
+ local okay=lpegmatch(p_validroot,asked)
+ if okay==true then
+ if filenamelogger then
+ filenamelogger(name,"w",asked,true)
+ end
+ return name
+ elseif okay==false then
+ if not what then
+ if filenamelogger then
+ filenamelogger(name,"r",asked,true)
+ end
+ return name
+ elseif lpegmatch(p_write,what) then
+ if filenamelogger then
+ filenamelogger(name,"w",asked,false)
+ end
+ return
+ else
+ if filenamelogger then
+ filenamelogger(name,"r",asked,true)
+ end
+ return name
+ end
+ elseif filenamelogger then
+ filenamelogger(name,"*",name,false)
+ end
+ else
+ return name
+ end
+end
+local function readable(name,finalized)
+ return validfilename(name,"r")
+end
+local function normalizedreadable(name,finalized)
+ local valid=validfilename(name,"r")
+ if valid then
+ return normalized(valid)
+ end
+end
+local function writeable(name,finalized)
+ return validfilename(name,"w")
+end
+local function normalizedwriteable(name,finalized)
+ local valid=validfilename(name,"w")
+ if valid then
+ return normalized(valid)
+ end
+end
+validators.readable=readable
+validators.writeable=normalizedwriteable
+validators.normalizedreadable=normalizedreadable
+validators.normalizedwriteable=writeable
+validators.filename=readable
+table.setmetatableindex(validators,function(t,k)
+ if k then
+ t[k]=readable
+ end
+ return readable
+end)
+function validators.string(s,finalized)
+ if finalized and suspicious(s) then
+ return ""
+ else
+ return s
+ end
+end
+function validators.cache(s)
+ if finalized then
+ return basename(s)
+ else
+ return s
+ end
+end
+function validators.url(s)
+ if finalized and find("^file:") then
+ return ""
+ else
+ return s
+ end
+end
+local function filehandlerone(action,one,...)
+ local checkedone=validfilename(one)
+ if checkedone then
+ return action(one,...)
+ else
+ end
+end
+local function filehandlertwo(action,one,two,...)
+ local checkedone=validfilename(one)
+ if checkedone then
+ local checkedtwo=validfilename(two)
+ if checkedtwo then
+ return action(one,two,...)
+ else
+ end
+ else
+ end
+end
+local function iohandler(action,one,...)
+ if type(one)=="string" then
+ local checkedone=validfilename(one)
+ if checkedone then
+ return action(one,...)
+ end
+ elseif one then
+ return action(one,...)
+ else
+ return action()
+ end
+end
+local osexecute=sandbox.original(os.execute)
+local iopopen=sandbox.original(io.popen)
+local reported={}
+local function validcommand(name,program,template,checkers,defaults,variables,reporter,strict)
+ if validbinaries~=false and (validbinaries==true or validbinaries[program]) then
+ if variables then
+ for variable,value in next,variables do
+ local checker=validators[checkers[variable]]
+ if checker then
+ value=checker(unquoted(value),strict)
+ if value then
+ variables[variable]=optionalquoted(value)
+ else
+ report("variable %a with value %a fails the check",variable,value)
+ return
+ end
+ else
+ report("variable %a has no checker",variable)
+ return
+ end
+ end
+ for variable,default in next,defaults do
+ local value=variables[variable]
+ if not value or value=="" then
+ local checker=validators[checkers[variable]]
+ if checker then
+ default=checker(unquoted(default),strict)
+ if default then
+ variables[variable]=optionalquoted(default)
+ else
+ report("variable %a with default %a fails the check",variable,default)
+ return
+ end
+ end
+ end
+ end
+ end
+ local command=program.." "..replace(template,variables)
+ if reporter then
+ reporter("executing runner %a: %s",name,command)
+ elseif trace then
+ report("executing runner %a: %s",name,command)
+ end
+ return command
+ elseif not reported[name] then
+ report("executing program %a of runner %a is not permitted",program,name)
+ reported[name]=true
+ end
+end
+local runners={
+ resultof=function(...)
+ local command=validcommand(...)
+ if command then
+ if trace then
+ report("resultof: %s",command)
+ end
+ local handle=iopopen(command,"r")
+ if handle then
+ local result=handle:read("*all") or ""
+ handle:close()
+ return result
+ end
+ end
+ end,
+ execute=function(...)
+ local command=validcommand(...)
+ if command then
+ if trace then
+ report("execute: %s",command)
+ end
+ return osexecute(command)
+ end
+ end,
+ pipeto=function(...)
+ local command=validcommand(...)
+ if command then
+ if trace then
+ report("pipeto: %s",command)
+ end
+ return iopopen(command,"w")
+ end
+ end,
+}
+function sandbox.registerrunner(specification)
+ if type(specification)=="string" then
+ local wrapped=validrunners[specification]
+ inspect(table.sortedkeys(validrunners))
+ if wrapped then
+ return wrapped
+ else
+ report("unknown predefined runner %a",specification)
+ return
+ end
+ end
+ if type(specification)~="table" then
+ report("specification should be a table (or string)")
+ return
+ end
+ local name=specification.name
+ if type(name)~="string" then
+ report("invalid name, string expected",name)
+ return
+ end
+ if validrunners[name] then
+ report("invalid name, runner %a already defined")
+ return
+ end
+ local program=specification.program
+ if type(program)=="string" then
+ elseif type(program)=="table" then
+ program=program[platform] or program.default or program.unix
+ end
+ if type(program)~="string" or program=="" then
+ report("invalid runner %a specified for platform %a",name,platform)
+ return
+ end
+ local template=specification.template
+ if not template then
+ report("missing template for runner %a",name)
+ return
+ end
+ local method=specification.method or "execute"
+ local checkers=specification.checkers or {}
+ local defaults=specification.defaults or {}
+ local runner=runners[method]
+ if runner then
+ local finalized=finalized
+ local wrapped=function(variables)
+ return runner(name,program,template,checkers,defaults,variables,specification.reporter,finalized)
+ end
+ validrunners[name]=wrapped
+ return wrapped
+ else
+ validrunners[name]=nil
+ report("invalid method for runner %a",name)
+ end
+end
+function sandbox.getrunner(name)
+ return name and validrunners[name]
+end
+local function suspicious(str)
+ return (find(str,"[/\\]") or find(command,"%.%.")) and true or false
+end
+local function binaryrunner(action,command,...)
+ if validbinaries==false then
+ report("no binaries permitted, ignoring command: %s",command)
+ return
+ end
+ if type(command)~="string" then
+ report("command should be a string")
+ return
+ end
+ local program=lpegmatch(p_split,command)
+ if not program or program=="" then
+ report("unable to filter binary from command: %s",command)
+ return
+ end
+ if validbinaries==true then
+ elseif not validbinaries[program] then
+ report("binary not permitted, ignoring command: %s",command)
+ return
+ elseif suspicious(command) then
+ report("/ \\ or .. found, ignoring command (use sandbox.registerrunner): %s",command)
+ return
+ end
+ return action(command,...)
+end
+local function dummyrunner(action,command,...)
+ if type(command)=="table" then
+ command=concat(command," ",command[0] and 0 or 1)
+ end
+ report("ignoring command: %s",command)
+end
+sandbox.filehandlerone=filehandlerone
+sandbox.filehandlertwo=filehandlertwo
+sandbox.iohandler=iohandler
+function sandbox.disablerunners()
+ validbinaries=false
+end
+function sandbox.disablelibraries()
+ validlibraries=false
+end
+if FFISUPPORTED and ffi then
+ function sandbox.disablelibraries()
+ validlibraries=false
+ for k,v in next,ffi do
+ if k~="gc" then
+ ffi[k]=nil
+ end
+ end
+ end
+ local load=ffi.load
+ if load then
+ local reported={}
+ function ffi.load(name,...)
+ if validlibraries==false then
+ elseif validlibraries==true then
+ return load(name,...)
+ elseif validlibraries[name] then
+ return load(name,...)
+ else
+ end
+ if not reported[name] then
+ report("using library %a is not permitted",name)
+ reported[name]=true
+ end
+ return nil
+ end
+ end
+end
+local overload=sandbox.overload
+local register=sandbox.register
+ overload(loadfile,filehandlerone,"loadfile")
+if io then
+ overload(io.open,filehandlerone,"io.open")
+ overload(io.popen,binaryrunner,"io.popen")
+ overload(io.input,iohandler,"io.input")
+ overload(io.output,iohandler,"io.output")
+ overload(io.lines,filehandlerone,"io.lines")
+end
+if os then
+ overload(os.execute,binaryrunner,"os.execute")
+ overload(os.spawn,dummyrunner,"os.spawn")
+ overload(os.exec,dummyrunner,"os.exec")
+ overload(os.resultof,binaryrunner,"os.resultof")
+ overload(os.pipeto,binaryrunner,"os.pipeto")
+ overload(os.rename,filehandlertwo,"os.rename")
+ overload(os.remove,filehandlerone,"os.remove")
+end
+if lfs then
+ overload(lfs.chdir,filehandlerone,"lfs.chdir")
+ overload(lfs.mkdir,filehandlerone,"lfs.mkdir")
+ overload(lfs.rmdir,filehandlerone,"lfs.rmdir")
+ overload(lfs.isfile,filehandlerone,"lfs.isfile")
+ overload(lfs.isdir,filehandlerone,"lfs.isdir")
+ overload(lfs.attributes,filehandlerone,"lfs.attributes")
+ overload(lfs.dir,filehandlerone,"lfs.dir")
+ overload(lfs.lock_dir,filehandlerone,"lfs.lock_dir")
+ overload(lfs.touch,filehandlerone,"lfs.touch")
+ overload(lfs.link,filehandlertwo,"lfs.link")
+ overload(lfs.setmode,filehandlerone,"lfs.setmode")
+ overload(lfs.readlink,filehandlerone,"lfs.readlink")
+ overload(lfs.shortname,filehandlerone,"lfs.shortname")
+ overload(lfs.symlinkattributes,filehandlerone,"lfs.symlinkattributes")
+end
+if zip then
+ zip.open=register(zip.open,filehandlerone,"zip.open")
+end
+if fontloader then
+ fontloader.open=register(fontloader.open,filehandlerone,"fontloader.open")
+ fontloader.info=register(fontloader.info,filehandlerone,"fontloader.info")
+end
+if epdf then
+ epdf.open=register(epdf.open,filehandlerone,"epdf.open")
+end
+sandbox.registerroot=registerroot
+sandbox.registerbinary=registerbinary
+sandbox.registerlibrary=registerlibrary
+sandbox.validfilename=validfilename
+
+
+end -- of closure
+
+do -- create closure to overcome 200 locals limit
+
package.loaded["util-mrg"] = package.loaded["util-mrg"] or true
--- original size: 7985, stripped down to: 6153
+-- original size: 7757, stripped down to: 6015
if not modules then modules={} end modules ['util-mrg']={
version=1.001,
@@ -9511,154 +11081,9 @@ end -- of closure
do -- create closure to overcome 200 locals limit
-package.loaded["util-tpl"] = package.loaded["util-tpl"] or true
-
--- original size: 7313, stripped down to: 4076
-
-if not modules then modules={} end modules ['util-tpl']={
- 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"
-}
-utilities.templates=utilities.templates or {}
-local templates=utilities.templates
-local trace_template=false trackers.register("templates.trace",function(v) trace_template=v end)
-local report_template=logs.reporter("template")
-local tostring=tostring
-local format,sub,byte=string.format,string.sub,string.byte
-local P,C,R,Cs,Cc,Carg,lpegmatch,lpegpatterns=lpeg.P,lpeg.C,lpeg.R,lpeg.Cs,lpeg.Cc,lpeg.Carg,lpeg.match,lpeg.patterns
-local replacer
-local function replacekey(k,t,how,recursive)
- local v=t[k]
- if not v then
- if trace_template then
- report_template("unknown key %a",k)
- end
- return ""
- else
- v=tostring(v)
- if trace_template then
- report_template("setting key %a to value %a",k,v)
- end
- if recursive then
- return lpegmatch(replacer,v,1,t,how,recursive)
- else
- return v
- end
- end
-end
-local sqlescape=lpeg.replacer {
- { "'","''" },
- { "\\","\\\\" },
- { "\r\n","\\n" },
- { "\r","\\n" },
-}
-local sqlquoted=Cs(Cc("'")*sqlescape*Cc("'"))
-lpegpatterns.sqlescape=sqlescape
-lpegpatterns.sqlquoted=sqlquoted
-local luaescape=lpegpatterns.luaescape
-local escapers={
- lua=function(s)
- return lpegmatch(luaescape,s)
- end,
- sql=function(s)
- return lpegmatch(sqlescape,s)
- end,
-}
-local quotedescapers={
- lua=function(s)
- return format("%q",s)
- end,
- sql=function(s)
- return lpegmatch(sqlquoted,s)
- end,
-}
-local luaescaper=escapers.lua
-local quotedluaescaper=quotedescapers.lua
-local function replacekeyunquoted(s,t,how,recurse)
- if how==false then
- return replacekey(s,t,how,recurse)
- else
- local escaper=how and escapers[how] or luaescaper
- return escaper(replacekey(s,t,how,recurse))
- end
-end
-local function replacekeyquoted(s,t,how,recurse)
- if how==false then
- return replacekey(s,t,how,recurse)
- else
- local escaper=how and quotedescapers[how] or quotedluaescaper
- return escaper(replacekey(s,t,how,recurse))
- end
-end
-local function replaceoptional(l,m,r,t,how,recurse)
- local v=t[l]
- return v and v~="" and lpegmatch(replacer,r,1,t,how or "lua",recurse or false) or ""
-end
-local single=P("%")
-local double=P("%%")
-local lquoted=P("%[")
-local rquoted=P("]%")
-local lquotedq=P("%(")
-local rquotedq=P(")%")
-local escape=double/'%%'
-local nosingle=single/''
-local nodouble=double/''
-local nolquoted=lquoted/''
-local norquoted=rquoted/''
-local nolquotedq=lquotedq/''
-local norquotedq=rquotedq/''
-local noloptional=P("%?")/''
-local noroptional=P("?%")/''
-local nomoptional=P(":")/''
-local args=Carg(1)*Carg(2)*Carg(3)
-local key=nosingle*((C((1-nosingle )^1)*args)/replacekey )*nosingle
-local quoted=nolquotedq*((C((1-norquotedq )^1)*args)/replacekeyquoted )*norquotedq
-local unquoted=nolquoted*((C((1-norquoted )^1)*args)/replacekeyunquoted)*norquoted
-local optional=noloptional*((C((1-nomoptional)^1)*nomoptional*C((1-noroptional)^1)*args)/replaceoptional)*noroptional
-local any=P(1)
- replacer=Cs((unquoted+quoted+escape+optional+key+any)^0)
-local function replace(str,mapping,how,recurse)
- if mapping and str then
- return lpegmatch(replacer,str,1,mapping,how or "lua",recurse or false) or str
- else
- return str
- end
-end
-templates.replace=replace
-function templates.replacer(str,how,recurse)
- return function(mapping)
- return lpegmatch(replacer,str,1,mapping,how or "lua",recurse or false) or str
- end
-end
-function templates.load(filename,mapping,how,recurse)
- local data=io.loaddata(filename) or ""
- if mapping and next(mapping) then
- return replace(data,mapping,how,recurse)
- else
- return data
- end
-end
-function templates.resolve(t,mapping,how,recurse)
- if not mapping then
- mapping=t
- end
- for k,v in next,t do
- t[k]=replace(v,mapping,how,recurse)
- end
- return t
-end
-
-
-end -- of closure
-
-do -- create closure to overcome 200 locals limit
-
package.loaded["util-env"] = package.loaded["util-env"] or true
--- original size: 8284, stripped down to: 5176
+-- original size: 9246, stripped down to: 5038
if not modules then modules={} end modules ['util-env']={
version=1.001,
@@ -9845,7 +11270,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["luat-env"] = package.loaded["luat-env"] or true
--- original size: 6358, stripped down to: 4257
+-- original size: 6174, stripped down to: 4141
if not modules then modules={} end modules ['luat-env']={
version=1.001,
@@ -9998,7 +11423,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-tab"] = package.loaded["lxml-tab"] or true
--- original size: 56973, stripped down to: 35872
+-- original size: 57003, stripped down to: 35696
if not modules then modules={} end modules ['lxml-tab']={
version=1.001,
@@ -10013,7 +11438,7 @@ if lpeg.setmaxstack then lpeg.setmaxstack(1000) end
xml=xml or {}
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 type,next,setmetatable,getmetatable,tonumber,rawset,select=type,next,setmetatable,getmetatable,tonumber,rawset,select
local lower,find,match,gsub=string.lower,string.find,string.match,string.gsub
local sort=table.sort
local utfchar=utf.char
@@ -10140,6 +11565,7 @@ local function add_empty(spacing,namespace,tag)
tg=tag,
at=at,
dt={},
+ ni=nt,
__p__=top
}
dt[nt]=t
@@ -10161,6 +11587,7 @@ local function add_begin(spacing,namespace,tag)
tg=tag,
at=at,
dt={},
+ ni=nil,
__p__=stack[level]
}
setmetatable(top,mt)
@@ -10188,6 +11615,7 @@ local function add_end(spacing,namespace,tag)
dt=top.dt
nt=#dt+1
dt[nt]=toclose
+ toclose.ni=nt
if toclose.at.xmlns then
remove(xmlns)
end
@@ -10232,7 +11660,13 @@ local function add_special(what,spacing,text)
if strip and (what=="@cm@" or what=="@dt@") then
else
nt=nt+1
- dt[nt]={ special=true,ns="",tg=what,dt={ text } }
+ dt[nt]={
+ special=true,
+ ns="",
+ tg=what,
+ ni=nil,
+ dt={ text },
+ }
end
end
local function set_message(txt)
@@ -10285,7 +11719,6 @@ do
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={
@@ -10327,13 +11760,27 @@ do
[ [[}]] ]="&U+7D;",
[ [[~]] ]="&U+7E;",
}
+ local privates_x={
+ [ [["]] ]="&U+22;",
+ [ [[#]] ]="&U+23;",
+ [ [[$]] ]="&U+24;",
+ [ [[%]] ]="&U+25;",
+ [ [[']] ]="&U+27;",
+ [ [[\]] ]="&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")
+ local despecialized=utf.remapper(privates_x,"dynamic")
xml.unprivatized=unprivatized
xml.unspecialized=unspecialized
+ xml.despecialized=despecialized
xml.escaped=escaped
local function unescaped(s)
local p=privates_n[s]
@@ -10778,6 +12225,10 @@ local grammar_unparsed_text=P { "preamble",
local function _xmlconvert_(data,settings)
settings=settings or {}
preparexmlstate(settings)
+ local preprocessor=settings.preprocessor
+ if data and data~="" and type(preprocessor)=="function" then
+ data=preprocessor(data,settings) or data
+ end
if settings.parent_root then
mt=getmetatable(settings.parent_root)
else
@@ -10919,14 +12370,24 @@ function xml.toxml(data)
return data
end
end
-local function copy(old)
+local function copy(old,p)
if old then
local new={}
for k,v in next,old do
- if type(v)=="table" then
- new[k]=table.copy(v)
- else
+ local t=type(v)=="table"
+ if k=="at" then
+ local t={}
+ for k,v in next,v do
+ t[k]=v
+ end
+ new[k]=t
+ elseif k=="dt" then
+ v.__p__=nil
+ v=copy(v,new)
new[k]=v
+ v.__p__=p
+ else
+ new[k]=v
end
end
local mt=getmetatable(old)
@@ -11157,18 +12618,26 @@ local xmlfilehandler=newhandlers {
function xml.save(root,name)
serialize(root,xmlfilehandler,name)
end
-local result
+local result,r,threshold={},0,512
local xmlstringhandler=newhandlers {
name="string",
initialize=function()
- result={}
+ r=0
return result
end,
finalize=function()
- return concat(result)
+ local done=concat(result,"",1,r)
+ r=0
+ if r>threshold then
+ result={}
+ end
+ return done
end,
handle=function(...)
- result[#result+1]=concat {... }
+ for i=1,select("#",...) do
+ r=r+1
+ result[r]=select(i,...)
+ end
end,
}
local function xmltostring(root)
@@ -11320,7 +12789,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-lpt"] = package.loaded["lxml-lpt"] or true
--- original size: 53892, stripped down to: 32508
+-- original size: 53301, stripped down to: 32477
if not modules then modules={} end modules ['lxml-lpt']={
version=1.001,
@@ -11702,6 +13171,14 @@ local function apply_expression(list,expression,order)
end
return collected
end
+local function apply_selector(list,specification)
+ if xml.applyselector then
+ apply_selector=xml.applyselector
+ return apply_selector(list,specification)
+ else
+ return list
+ end
+end
local P,V,C,Cs,Cc,Ct,R,S,Cg,Cb=lpeg.P,lpeg.V,lpeg.C,lpeg.Cs,lpeg.Cc,lpeg.Ct,lpeg.R,lpeg.S,lpeg.Cg,lpeg.Cb
local spaces=S(" \n\r\t\f")^0
local lp_space=S(" \n\r\t\f")
@@ -11825,6 +13302,9 @@ end
local function register_nodes(nodetest,nodes)
return { kind="nodes",nodetest=nodetest,nodes=nodes }
end
+local function register_selector(specification)
+ return { kind="selector",specification=specification }
+end
local function register_expression(expression)
local converted=lpegmatch(converter,expression)
local runner=load(format(template_e,converted))
@@ -11865,34 +13345,36 @@ local pathparser=Ct { "patterns",
(V("special")*spaces*P(-1) )+(V("initial")*spaces*V("step")*spaces*(P("/")*spaces*V("step")*spaces)^0 )
),
protocol=Cg(V("letters"),"protocol")*P("://")+Cg(Cc(nil),"protocol"),
- step=((V("shortcuts")+P("/")+V("axis"))*spaces*V("nodes")^0+V("error"))*spaces*V("expressions")^0*spaces*V("finalizer")^0,
+ step=((V("shortcuts")+V("selector")+P("/")+V("axis"))*spaces*V("nodes")^0+V("error"))*spaces*V("expressions")^0*spaces*V("finalizer")^0,
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")+V("s_lastmatch"),
shortcuts=V("shortcuts_a")*(spaces*"/"*spaces*V("shortcuts_a"))^0,
s_descendant_or_self=(P("***/")+P("/"))*Cc(register_descendant_or_self),
s_descendant=P("**")*Cc(register_descendant),
- s_child=P("*")*no_nextcolon*Cc(register_child ),
- s_parent=P("..")*Cc(register_parent ),
- s_self=P("." )*Cc(register_self ),
- s_root=P("^^")*Cc(register_root ),
- s_ancestor=P("^")*Cc(register_ancestor ),
- descendant=P("descendant::")*Cc(register_descendant ),
- child=P("child::")*Cc(register_child ),
- parent=P("parent::")*Cc(register_parent ),
- self=P("self::")*Cc(register_self ),
- root=P('root::')*Cc(register_root ),
- ancestor=P('ancestor::')*Cc(register_ancestor ),
- descendant_or_self=P('descendant-or-self::')*Cc(register_descendant_or_self ),
- ancestor_or_self=P('ancestor-or-self::')*Cc(register_ancestor_or_self ),
- following=P('following::')*Cc(register_following ),
- following_sibling=P('following-sibling::')*Cc(register_following_sibling ),
- preceding=P('preceding::')*Cc(register_preceding ),
- preceding_sibling=P('preceding-sibling::')*Cc(register_preceding_sibling ),
- reverse_sibling=P('reverse-sibling::')*Cc(register_reverse_sibling ),
- last_match=P('last-match::')*Cc(register_last_match ),
+ s_child=P("*")*no_nextcolon*Cc(register_child),
+ s_parent=P("..")*Cc(register_parent),
+ s_self=P("." )*Cc(register_self),
+ s_root=P("^^")*Cc(register_root),
+ s_ancestor=P("^")*Cc(register_ancestor),
+ s_lastmatch=P("=")*Cc(register_last_match),
+ descendant=P("descendant::")*Cc(register_descendant),
+ child=P("child::")*Cc(register_child),
+ parent=P("parent::")*Cc(register_parent),
+ self=P("self::")*Cc(register_self),
+ root=P('root::')*Cc(register_root),
+ ancestor=P('ancestor::')*Cc(register_ancestor),
+ descendant_or_self=P('descendant-or-self::')*Cc(register_descendant_or_self),
+ ancestor_or_self=P('ancestor-or-self::')*Cc(register_ancestor_or_self),
+ following=P('following::')*Cc(register_following),
+ following_sibling=P('following-sibling::')*Cc(register_following_sibling),
+ preceding=P('preceding::')*Cc(register_preceding),
+ preceding_sibling=P('preceding-sibling::')*Cc(register_preceding_sibling),
+ reverse_sibling=P('reverse-sibling::')*Cc(register_reverse_sibling),
+ last_match=P('last-match::')*Cc(register_last_match),
+ selector=P("{")*C((1-P("}"))^1)*P("}")/register_selector,
nodes=(V("nodefunction")*spaces*P("(")*V("nodeset")*P(")")+V("nodetest")*V("nodeset"))/register_nodes,
expressions=expression/register_expression,
letters=R("az")^1,
@@ -12042,6 +13524,8 @@ do
collected=apply_nodes(collected,pi.nodetest,pi.nodes)
elseif kind=="expression" then
collected=apply_expression(collected,pi.evaluator,order)
+ elseif kind=="selector" then
+ collected=apply_selector(collected,pi.specification)
elseif kind=="finalizer" then
collected=pi.finalizer(collected)
p.matched=p.matched+1
@@ -12083,6 +13567,9 @@ do
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=="selector" then
+ collected=apply_selector(collected,pi.specification)
+ report_lpath("% 10i : se : %s ",(collected and #collected) or 0,pi.specification)
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 "")
@@ -12114,6 +13601,8 @@ do
collected=apply_nodes(collected,pi.nodetest,pi.nodes)
elseif kind=="expression" then
collected=apply_expression(collected,pi.evaluator,order)
+ elseif kind=="selector" then
+ collected=apply_selector(collected,pi.specification)
elseif kind=="finalizer" then
return pi.finalizer(collected)
end
@@ -12170,6 +13659,13 @@ do
function xml.lastmatch()
return lastmatch
end
+ local stack={}
+ function xml.pushmatch()
+ insert(stack,lastmatch)
+ end
+ function xml.popmatch()
+ lastmatch=remove(stack)
+ end
end
local applylpath=xml.applylpath
function xml.filter(root,pattern)
@@ -12449,7 +13945,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-mis"] = package.loaded["lxml-mis"] or true
--- original size: 3787, stripped down to: 2003
+-- original size: 3684, stripped down to: 1957
if not modules then modules={} end modules ['lxml-mis']={
version=1.001,
@@ -12518,7 +14014,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-aux"] = package.loaded["lxml-aux"] or true
--- original size: 30566, stripped down to: 21741
+-- original size: 29835, stripped down to: 21174
if not modules then modules={} end modules ['lxml-aux']={
version=1.001,
@@ -12534,7 +14030,6 @@ local xml=xml
local xmlcopy,xmlname=xml.copy,xml.name
local xmlinheritedconvert=xml.inheritedconvert
local xmlapplylpath=xml.applylpath
-local xmlfilter=xml.filter
local type,next,setmetatable,getmetatable=type,next,setmetatable,getmetatable
local insert,remove,fastcopy,concat=table.insert,table.remove,table.fastcopy,table.concat
local gmatch,gsub,format,find,strip=string.gmatch,string.gsub,string.format,string.find,string.strip
@@ -12738,7 +14233,17 @@ function xml.replace(root,pattern,whatever)
report('replacing',pattern,c,e)
end
local d=p.dt
- d[e.ni]=copiedelement(element,p)
+ local n=e.ni
+ local t=copiedelement(element,p)
+ if type(t)=="table" then
+ d[n]=t[1]
+ for i=2,#t do
+ n=n+1
+ insert(d,n,t[i])
+ end
+ else
+ d[n]=t
+ end
redo_ni(d)
end
end
@@ -13161,7 +14666,7 @@ local obsolete=xml.obsolete
xml.strip_whitespace=xml.strip obsolete.strip_whitespace=xml.strip
xml.collect_elements=xml.collect obsolete.collect_elements=xml.collect
xml.delete_element=xml.delete obsolete.delete_element=xml.delete
-xml.replace_element=xml.replace obsolete.replace_element=xml.replacet
+xml.replace_element=xml.replace obsolete.replace_element=xml.replace
xml.each_element=xml.each obsolete.each_element=xml.each
xml.process_elements=xml.process obsolete.process_elements=xml.process
xml.insert_element_after=xml.insertafter obsolete.insert_element_after=xml.insertafter
@@ -13379,7 +14884,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-xml"] = package.loaded["lxml-xml"] or true
--- original size: 10719, stripped down to: 7841
+-- original size: 10274, stripped down to: 7538
if not modules then modules={} end modules ['lxml-xml']={
version=1.001,
@@ -13757,7 +15262,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-xml"] = package.loaded["trac-xml"] or true
--- original size: 6534, stripped down to: 5072
+-- original size: 6407, stripped down to: 4965
if not modules then modules={} end modules ['trac-xml']={
version=1.001,
@@ -13907,6 +15412,7 @@ function reporters.export(t,methods,filename)
if filename then
local fullname=file.replacesuffix(filename,method)
t.report("saving export in %a",fullname)
+ dir.mkdirs(file.pathpart(fullname))
io.savedata(fullname,result)
else
reporters.lines(t,result)
@@ -13927,7 +15433,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-ini"] = package.loaded["data-ini"] or true
--- original size: 11444, stripped down to: 7830
+-- original size: 11099, stripped down to: 7516
if not modules then modules={} end modules ['data-ini']={
version=1.001,
@@ -14072,11 +15578,6 @@ if not texroot or texroot=="" then
ossetenv('TEXROOT',texroot)
end
environment.texroot=file.collapsepath(texroot)
-if type(profiler)=="table" and not jit then
- directives.register("system.profile",function()
- profiler.start("luatex-profile.log")
- end)
-end
local prefixes=utilities.storage.allocate()
resolvers.prefixes=prefixes
local resolved={}
@@ -14183,7 +15684,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-exp"] = package.loaded["data-exp"] or true
--- original size: 18619, stripped down to: 11042
+-- original size: 17958, stripped down to: 10705
if not modules then modules={} end modules ['data-exp']={
version=1.001,
@@ -14199,7 +15700,6 @@ 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
local isdir=lfs.isdir
-local ostype=os.type
local collapsepath,joinpath,basename=file.collapsepath,file.join,file.basename
local trace_locating=false trackers.register("resolvers.locating",function(v) trace_locating=v end)
local trace_expansions=false trackers.register("resolvers.expansions",function(v) trace_expansions=v end)
@@ -14568,7 +16068,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-env"] = package.loaded["data-env"] or true
--- original size: 9649, stripped down to: 7131
+-- original size: 9342, stripped down to: 6887
if not modules then modules={} end modules ['data-env']={
version=1.001,
@@ -14852,7 +16352,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-tmp"] = package.loaded["data-tmp"] or true
--- original size: 16066, stripped down to: 11938
+-- original size: 16088, stripped down to: 11435
if not modules then modules={} end modules ['data-tmp']={
version=1.100,
@@ -15056,18 +16556,6 @@ end
caches.getreadablepaths=getreadablepaths
caches.getwritablepath=getwritablepath
function caches.getfirstreadablefile(filename,...)
- local rd=getreadablepaths(...)
- for i=1,#rd do
- local path=rd[i]
- local fullname=file.join(path,filename)
- if is_readable(fullname) then
- usedreadables[i]=true
- return fullname,path
- end
- end
- return caches.setfirstwritablefile(filename,...)
-end
-function caches.getfirstreadablefile_TEST_ME_FIRST(filename,...)
local fullname,path=caches.setfirstwritablefile(filename,...)
if is_readable(fullname) then
return fullname,path
@@ -15096,18 +16584,22 @@ end
function caches.setluanames(path,name)
return format("%s/%s.%s",path,name,luasuffixes.tma),format("%s/%s.%s",path,name,luasuffixes.tmc)
end
-function caches.loaddata(readables,name)
+function caches.loaddata(readables,name,writable)
if type(readables)=="string" then
readables={ readables }
end
for i=1,#readables do
local path=readables[i]
- local tmaname,tmcname=caches.setluanames(path,name)
local loader=false
+ local tmaname,tmcname=caches.setluanames(path,name)
if isfile(tmcname) then
loader=loadfile(tmcname)
end
if not loader and isfile(tmaname) then
+ local tmacrap,tmcname=caches.setluanames(writable,name)
+ if isfile(tmcname) then
+ loader=loadfile(tmcname)
+ end
utilities.lua.compile(tmaname,tmcname)
if isfile(tmcname) then
loader=loadfile(tmcname)
@@ -15228,7 +16720,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-met"] = package.loaded["data-met"] or true
--- original size: 5488, stripped down to: 4101
+-- original size: 5310, stripped down to: 3980
if not modules then modules={} end modules ['data-met']={
version=1.100,
@@ -15240,7 +16732,6 @@ if not modules then modules={} end modules ['data-met']={
local find,format=string.find,string.format
local sequenced=table.sequenced
local addurlscheme,urlhashed=url.addscheme,url.hashed
-local getcurrentdir=lfs.currentdir
local trace_locating=false
local trace_methods=false
trackers.register("resolvers.locating",function(v) trace_methods=v end)
@@ -15347,7 +16838,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-res"] = package.loaded["data-res"] or true
--- original size: 67241, stripped down to: 46427
+-- original size: 67524, stripped down to: 46632
if not modules then modules={} end modules ['data-res']={
version=1.001,
@@ -15401,6 +16892,7 @@ resolvers.configbanner=""
resolvers.homedir=environment.homedir
resolvers.criticalvars=allocate { "SELFAUTOLOC","SELFAUTODIR","SELFAUTOPARENT","TEXMFCNF","TEXMF","TEXOS" }
resolvers.luacnfname="texmfcnf.lua"
+resolvers.luacnffallback="contextcnf.lua"
resolvers.luacnfstate="unknown"
if environment.default_texmfcnf then
resolvers.luacnfspec="home:texmf/web2c;"..environment.default_texmfcnf
@@ -15444,7 +16936,6 @@ local function resolvevariable(k)
end
local dollarstripper=lpeg.stripper("$")
local inhibitstripper=P("!")^0*Cs(P(1)^0)
-local backslashswapper=lpeg.replacer("\\","/")
local somevariable=P("$")/""
local somekey=C(R("az","AZ","09","__","--")^1)
local somethingelse=P(";")*((1-S("!{}/\\"))^1*P(";")/"")+P(";")*(P(";")/"")+P(1)
@@ -15590,23 +17081,29 @@ local function identify_configuration_files()
end
reportcriticalvariables(cnfspec)
local cnfpaths=expandedpathfromlist(resolvers.splitpath(cnfspec))
- local luacnfname=resolvers.luacnfname
- for i=1,#cnfpaths do
- local filepath=cnfpaths[i]
- local filename=collapsepath(filejoin(filepath,luacnfname))
- local realname=resolveprefix(filename)
- if trace_locating then
- local fullpath=gsub(resolveprefix(collapsepath(filepath)),"//","/")
- local weirdpath=find(fullpath,"/texmf.+/texmf") or not find(fullpath,"/web2c",1,true)
- report_resolving("looking for %a on %s path %a from specification %a",luacnfname,weirdpath and "weird" or "given",fullpath,filepath)
- end
- if isfile(realname) then
- specification[#specification+1]=filename
+ local function locatecnf(luacnfname,kind)
+ for i=1,#cnfpaths do
+ local filepath=cnfpaths[i]
+ local filename=collapsepath(filejoin(filepath,luacnfname))
+ local realname=resolveprefix(filename)
if trace_locating then
- report_resolving("found configuration file %a",realname)
+ local fullpath=gsub(resolveprefix(collapsepath(filepath)),"//","/")
+ local weirdpath=find(fullpath,"/texmf.+/texmf") or not find(fullpath,"/web2c",1,true)
+ report_resolving("looking for %s %a on %s path %a from specification %a",
+ kind,luacnfname,weirdpath and "weird" or "given",fullpath,filepath)
+ end
+ if isfile(realname) then
+ specification[#specification+1]=filename
+ if trace_locating then
+ report_resolving("found %s configuration file %a",kind,realname)
+ end
end
end
end
+ locatecnf(resolvers.luacnfname,"regular")
+ if #specification==0 then
+ locatecnf(resolvers.luacnffallback,"fallback")
+ end
if trace_locating then
report_resolving()
end
@@ -16903,7 +18400,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-pre"] = package.loaded["data-pre"] or true
--- original size: 4236, stripped down to: 3144
+-- original size: 4090, stripped down to: 3059
if not modules then modules={} end modules ['data-pre']={
version=1.001,
@@ -17025,7 +18522,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-inp"] = package.loaded["data-inp"] or true
--- original size: 935, stripped down to: 838
+-- original size: 910, stripped down to: 823
if not modules then modules={} end modules ['data-inp']={
version=1.001,
@@ -17055,7 +18552,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-out"] = package.loaded["data-out"] or true
--- original size: 548, stripped down to: 483
+-- original size: 530, stripped down to: 475
if not modules then modules={} end modules ['data-out']={
version=1.001,
@@ -17078,7 +18575,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-fil"] = package.loaded["data-fil"] or true
--- original size: 3976, stripped down to: 3391
+-- original size: 3863, stripped down to: 3310
if not modules then modules={} end modules ['data-fil']={
version=1.001,
@@ -17186,7 +18683,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-con"] = package.loaded["data-con"] or true
--- original size: 5148, stripped down to: 3680
+-- original size: 5029, stripped down to: 3607
if not modules then modules={} end modules ['data-con']={
version=1.100,
@@ -17256,7 +18753,7 @@ function containers.read(container,name)
local storage=container.storage
local stored=storage[name]
if not stored and container.enabled and caches and containers.usecache then
- stored=caches.loaddata(container.readables,name)
+ stored=caches.loaddata(container.readables,name,container.writable)
if stored and stored.cache_version==container.version then
if trace_cache or trace_containers then
report_containers("action %a, category %a, name %a","load",container.subcategory,name)
@@ -17305,7 +18802,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-use"] = package.loaded["data-use"] or true
--- original size: 4000, stripped down to: 3052
+-- original size: 4045, stripped down to: 3110
if not modules then modules={} end modules ['data-use']={
version=1.001,
@@ -17350,7 +18847,7 @@ function resolvers.automount(usecache)
end
statistics.register("used config file",function() return caches.configfiles() end)
statistics.register("used cache path",function() return caches.usedpaths() end)
-function statistics.savefmtstatus(texname,formatbanner,sourcefile)
+function statistics.savefmtstatus(texname,formatbanner,sourcefile,kind,banner)
local enginebanner=status.banner
if formatbanner and enginebanner and sourcefile then
local luvname=file.replacesuffix(texname,"luv")
@@ -17361,6 +18858,10 @@ function statistics.savefmtstatus(texname,formatbanner,sourcefile)
sourcefile=sourcefile,
}
io.savedata(luvname,table.serialize(luvdata,true))
+ lua.registerfinalizer(function()
+ logs.report("format banner","%s",banner)
+ logs.newline()
+ end)
end
end
function statistics.checkfmtstatus(texname)
@@ -17396,7 +18897,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-zip"] = package.loaded["data-zip"] or true
--- original size: 9036, stripped down to: 7041
+-- original size: 8772, stripped down to: 6841
if not modules then modules={} end modules ['data-zip']={
version=1.001,
@@ -17633,7 +19134,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-tre"] = package.loaded["data-tre"] or true
--- original size: 8712, stripped down to: 5726
+-- original size: 8479, stripped down to: 5580
if not modules then modules={} end modules ['data-tre']={
version=1.001,
@@ -17822,7 +19323,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-sch"] = package.loaded["data-sch"] or true
--- original size: 6779, stripped down to: 5444
+-- original size: 6653, stripped down to: 5467
if not modules then modules={} end modules ['data-sch']={
version=1.001,
@@ -17868,11 +19369,21 @@ function resolvers.schemes.cleanname(specification)
end
return hash
end
-local cached,loaded,reused,thresholds,handlers={},{},{},{},{}
-local function runcurl(name,cachename)
- local command="curl --silent --insecure --create-dirs --output "..cachename.." "..name
- os.execute(command)
-end
+local cached={}
+local loaded={}
+local reused={}
+local thresholds={}
+local handlers={}
+local runner=sandbox.registerrunner {
+ name="curl resolver",
+ method="execute",
+ program="curl",
+ template="--silent -- insecure --create-dirs --output %cachename% %original%",
+ checkers={
+ cachename="cache",
+ original="url",
+ }
+}
local function fetch(specification)
local original=specification.original
local scheme=specification.scheme
@@ -17894,7 +19405,10 @@ local function fetch(specification)
report_schemes("fetching %a, protocol %a, method %a",original,scheme,"curl")
end
logs.flush()
- runcurl(original,cachename)
+ runner {
+ original=original,
+ cachename=cachename,
+ }
end
end
if io.exists(cachename) then
@@ -18003,7 +19517,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-lua"] = package.loaded["data-lua"] or true
--- original size: 4447, stripped down to: 3302
+-- original size: 4207, stripped down to: 3137
if not modules then modules={} end modules ['data-lua']={
version=1.001,
@@ -18045,8 +19559,6 @@ function helpers.cleanpath(path)
return resolveprefix(lpegmatch(pattern,path))
end
local loadedaslib=helpers.loadedaslib
-local getextraluapaths=package.extraluapaths
-local getextralibpaths=package.extralibpaths
local registerpath=helpers.registerpath
local lualibfile=helpers.lualibfile
local luaformatpaths
@@ -18112,7 +19624,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-aux"] = package.loaded["data-aux"] or true
--- original size: 2494, stripped down to: 2047
+-- original size: 2431, stripped down to: 1996
if not modules then modules={} end modules ['data-aux']={
version=1.001,
@@ -18179,7 +19691,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-tmf"] = package.loaded["data-tmf"] or true
--- original size: 2674, stripped down to: 1658
+-- original size: 2601, stripped down to: 1627
if not modules then modules={} end modules ['data-tmf']={
version=1.001,
@@ -18235,7 +19747,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-lst"] = package.loaded["data-lst"] or true
--- original size: 2815, stripped down to: 2415
+-- original size: 2734, stripped down to: 2354
if not modules then modules={} end modules ['data-lst']={
version=1.001,
@@ -18315,7 +19827,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-lib"] = package.loaded["util-lib"] or true
--- original size: 11846, stripped down to: 6059
+-- original size: 13595, stripped down to: 7500
if not modules then modules={} end modules ['util-lib']={
version=1.001,
@@ -18324,35 +19836,51 @@ if not modules then modules={} end modules ['util-lib']={
copyright="PRAGMA ADE / ConTeXt Development Team",
license="see context related readme files",
}
-local gsub,find=string.gsub,string.find
-local pathpart,nameonly,joinfile=file.pathpart,file.nameonly,file.join
-local findfile,findfiles=resolvers and resolvers.findfile,resolvers and resolvers.findfiles
-local loaded=package.loaded
-local report_swiglib=logs.reporter("swiglib")
-local trace_swiglib=false trackers.register("resolvers.swiglib",function(v) trace_swiglib=v end)
+local type=type
+local next=next
+local pcall=pcall
+local gsub=string.gsub
+local find=string.find
+local sort=table.sort
+local pathpart=file.pathpart
+local nameonly=file.nameonly
+local joinfile=file.join
+local removesuffix=file.removesuffix
+local findfile=resolvers.findfile
+local findfiles=resolvers.findfiles
+local expandpaths=resolvers.expandedpathlistfromvariable
+local qualifiedpath=file.is_qualified_path
+local isfile=lfs.isfile
local done=false
-local function requireswiglib(required,version)
- local trace_swiglib=trace_swiglib or package.helpers.trace
- local library=loaded[required]
- if library==nil then
- if trace_swiglib then
- report_swiglib("requiring library %a with version %a",required,version or "any")
- end
- local required_full=gsub(required,"%.","/")
- local required_path=pathpart(required_full)
- local required_base=nameonly(required_full)
+local function locate(required,version,trace,report,action)
+ if type(required)~="string" then
+ report("provide a proper library name")
+ return
+ end
+ if trace then
+ report("requiring library %a with version %a",required,version or "any")
+ end
+ local found_library=nil
+ local required_full=gsub(required,"%.","/")
+ local required_path=pathpart(required_full)
+ local required_base=nameonly(required_full)
+ if qualifiedpath(required) then
+ if isfile(required) then
+ found_library=required
+ end
+ else
local required_name=required_base.."."..os.libsuffix
local version=type(version)=="string" and version~="" and version or false
local engine=environment.ownmain or false
- if trace_swiglib and not done then
- local list=resolvers.expandedpathlistfromvariable("lib")
+ if trace and not done then
+ local list=expandpaths("lib")
for i=1,#list do
- report_swiglib("tds path %i: %s",i,list[i])
+ report("tds path %i: %s",i,list[i])
end
end
local function found(locate,asked_library,how,...)
- if trace_swiglib then
- report_swiglib("checking %s: %a",how,asked_library)
+ if trace then
+ report("checking %s: %a",how,asked_library)
end
return locate(asked_library,...)
end
@@ -18360,45 +19888,45 @@ local function requireswiglib(required,version)
local found=nil
if version then
local asked_library=joinfile(required_path,version,required_name)
- if trace_swiglib then
- report_swiglib("checking %s: %a","with version",asked_library)
+ if trace then
+ report("checking %s: %a","with version",asked_library)
end
found=locate(asked_library,...)
end
if not found or found=="" then
local asked_library=joinfile(required_path,required_name)
- if trace_swiglib then
- report_swiglib("checking %s: %a","with version",asked_library)
+ if trace then
+ report("checking %s: %a","with version",asked_library)
end
found=locate(asked_library,...)
end
return found and found~="" and found or false
end
local function attempt(checkpattern)
- if trace_swiglib then
- report_swiglib("checking tds lib paths strictly")
+ if trace then
+ report("checking tds lib paths strictly")
end
local found=findfile and check(findfile,"lib")
if found and (not checkpattern or find(found,checkpattern)) then
return found
end
- if trace_swiglib then
- report_swiglib("checking tds lib paths with wildcard")
+ if trace then
+ report("checking tds lib paths with wildcard")
end
local asked_library=joinfile(required_path,".*",required_name)
- if trace_swiglib then
- report_swiglib("checking %s: %a","latest version",asked_library)
+ if trace then
+ report("checking %s: %a","latest version",asked_library)
end
local list=findfiles(asked_library,"lib",true)
if list and #list>0 then
- table.sort(list)
+ sort(list)
local found=list[#list]
if found and (not checkpattern or find(found,checkpattern)) then
return found
end
end
- if trace_swiglib then
- report_swiglib("checking lib paths")
+ if trace then
+ report("checking lib paths")
end
package.extralibpath(environment.ownpath)
local paths=package.libpaths()
@@ -18410,89 +19938,143 @@ local function requireswiglib(required,version)
end
return false
end
- local found_library=nil
if engine then
- if trace_swiglib then
- report_swiglib("attemp 1, engine %a",engine)
+ if trace then
+ report("attemp 1, engine %a",engine)
end
found_library=attempt("/"..engine.."/")
if not found_library then
- if trace_swiglib then
- report_swiglib("attemp 2, no engine",asked_library)
+ if trace then
+ report("attemp 2, no engine",asked_library)
end
found_library=attempt()
end
else
found_library=attempt()
end
- if not found_library then
- if trace_swiglib then
- report_swiglib("not found: %a",required)
- end
+ end
+ if not found_library then
+ if trace then
+ report("not found: %a",required)
+ end
+ library=false
+ else
+ if trace then
+ report("found: %a",found_library)
+ end
+ local message,result=action(found_library,required_base)
+ if result then
+ library=result
+ else
library=false
+ report("load error: message %a, library %a",tostring(message),found_library or "no library")
+ end
+ end
+ if not library then
+ report("unknown: %a",required)
+ elseif trace then
+ report("stored: %a",required)
+ end
+ return library
+end
+do
+ local report_swiglib=logs.reporter("swiglib")
+ local trace_swiglib=false
+ local savedrequire=require
+ local loadedlibs={}
+ local loadlib=package.loadlib
+ local pushdir=dir.push
+ local popdir=dir.pop
+ trackers.register("resolvers.swiglib",function(v) trace_swiglib=v end)
+ function requireswiglib(required,version)
+ local library=loadedlibs[library]
+ if library==nil then
+ local trace_swiglib=trace_swiglib or package.helpers.trace
+ library=locate(required,version,trace_swiglib,report_swiglib,function(name,base)
+ pushdir(pathpart(name))
+ local opener="luaopen_"..base
+ if trace_swiglib then
+ report_swiglib("opening: %a with %a",name,opener)
+ end
+ local library,message=loadlib(name,opener)
+ local libtype=type(library)
+ if libtype=="function" then
+ library=library()
+ message=true
+ else
+ report_swiglib("load error: %a returns %a, message %a, library %a",opener,libtype,(string.gsub(message or "no message","[%s]+$","")),found_library or "no library")
+ library=false
+ end
+ popdir()
+ return message,library
+ end)
+ loadedlibs[required]=library or false
+ end
+ return library
+ end
+ function require(name,version)
+ if find(name,"^swiglib%.") then
+ return requireswiglib(name,version)
else
- local path=pathpart(found_library)
- local base=nameonly(found_library)
- dir.push(path)
+ return savedrequire(name)
+ end
+ end
+ local swiglibs={}
+ local initializer="core"
+ function swiglib(name,version)
+ local library=swiglibs[name]
+ if not library then
+ statistics.starttiming(swiglibs)
if trace_swiglib then
- report_swiglib("found: %a",found_library)
- end
- local message=nil
- local opener="luaopen_"..required_base
- library,message=package.loadlib(found_library,opener)
- local libtype=type(library)
- if libtype=="function" then
- library=library()
+ report_swiglib("loading %a",name)
+ end
+ if not find(name,"%."..initializer.."$") then
+ fullname="swiglib."..name.."."..initializer
else
- report_swiglib("load error: %a returns %a, message %a, library %a",opener,libtype,(string.gsub(message or "no message","[%s]+$","")),found_library or "no library")
- library=false
+ fullname="swiglib."..name
end
- dir.pop()
+ library=requireswiglib(fullname,version)
+ swiglibs[name]=library
+ statistics.stoptiming(swiglibs)
end
- if not library then
- report_swiglib("unknown: %a",required)
- elseif trace_swiglib then
- report_swiglib("stored: %a",required)
- end
- loaded[required]=library
- else
- report_swiglib("reused: %a",required)
+ return library
end
- return library
+ statistics.register("used swiglibs",function()
+ if next(swiglibs) then
+ return string.format("%s, initial load time %s seconds",table.concat(table.sortedkeys(swiglibs)," "),statistics.elapsedtime(swiglibs))
+ end
+ end)
end
-local savedrequire=require
-function require(name,version)
- if find(name,"^swiglib%.") then
- return requireswiglib(name,version)
- else
- return savedrequire(name)
+if FFISUPPORTED and ffi and ffi.load then
+ local report_ffilib=logs.reporter("ffilib")
+ local trace_ffilib=false
+ local savedffiload=ffi.load
+ trackers.register("resolvers.ffilib",function(v) trace_ffilib=v end)
+ local function locateindeed(name)
+ local message,library=pcall(savedffiload,removesuffix(name))
+ if type(library)=="userdata" then
+ return library
+ else
+ return false
+ end
end
-end
-local swiglibs={}
-local initializer="core"
-function swiglib(name,version)
- local library=swiglibs[name]
- if not library then
- statistics.starttiming(swiglibs)
- if trace_swiglib then
- report_swiglib("loading %a",name)
+ function ffilib(required,version)
+ if version=="system" then
+ return locateindeed(name)
+ else
+ return locate(required,version,trace_ffilib,report_ffilib,locateindeed)
end
- if not find(name,"%."..initializer.."$") then
- fullname="swiglib."..name.."."..initializer
+ end
+ function ffi.load(name)
+ local library=ffilib(name)
+ if type(library)=="userdata" then
+ return library
else
- fullname="swiglib."..name
+ report_ffilib("trying to load %a using normal loader",name)
+ return savedffiload(name)
end
- library=requireswiglib(fullname,version)
- swiglibs[name]=library
- statistics.stoptiming(swiglibs)
end
- return library
end
-statistics.register("used swiglibs",function()
- if next(swiglibs) then
- return string.format("%s, initial load time %s seconds",table.concat(table.sortedkeys(swiglibs)," "),statistics.elapsedtime(swiglibs))
- end
-end)
end -- of closure
@@ -18501,7 +20083,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["luat-sta"] = package.loaded["luat-sta"] or true
--- original size: 5914, stripped down to: 2584
+-- original size: 5703, stripped down to: 2507
if not modules then modules={} end modules ['luat-sta']={
version=1.001,
@@ -18604,7 +20186,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["luat-fmt"] = package.loaded["luat-fmt"] or true
--- original size: 6967, stripped down to: 5631
+-- original size: 9144, stripped down to: 7291
if not modules then modules={} end modules ['luat-fmt']={
version=1.001,
@@ -18618,23 +20200,67 @@ local concat=table.concat
local quoted=string.quoted
local luasuffixes=utilities.lua.suffixes
local report_format=logs.reporter("resolvers","formats")
-local function primaryflags()
- local trackers=environment.argument("trackers")
- local directives=environment.argument("directives")
+local function primaryflags()
+ local arguments=environment.arguments
+ local flags={}
+ if arguments.silent then
+ flags[#flags+1]="--interaction=batchmode"
+ end
+ if arguments.jit then
+ flags[#flags+1]="--jiton"
+ end
+ return concat(flags," ")
+end
+local function secondaryflags()
+ local arguments=environment.arguments
+ local trackers=arguments.trackers
+ local directives=arguments.directives
local flags={}
if trackers and trackers~="" then
- flags={ "--trackers="..quoted(trackers) }
+ flags[#flags+1]="--c:trackers="..quoted(trackers)
end
if directives and directives~="" then
- flags={ "--directives="..quoted(directives) }
+ flags[#flags+1]="--c:directives="..quoted(directives)
+ end
+ if arguments.silent then
+ flags[#flags+1]="--c:silent"
end
- if environment.argument("jit") then
- flags={ "--jiton" }
+ if arguments.jit then
+ flags[#flags+1]="--c:jiton"
+ end
+ if arguments.ansi then
+ flags[#flags+1]="--c:ansi"
end
return concat(flags," ")
end
-function environment.make_format(name,silent)
+local template=[[--ini %primaryflags% --lua=%luafile% %texfile% %secondaryflags% %dump% %redirect%]]
+local checkers={
+ primaryflags="string",
+ secondaryflags="string",
+ luafile="readable",
+ texfile="readable",
+ redirect="string",
+ dump="string",
+}
+local runners={
+ luatex=sandbox.registerrunner {
+ name="make luatex format",
+ program="luatex",
+ template=template,
+ checkers=checkers,
+ reporter=report_format,
+ },
+ luajittex=sandbox.registerrunner {
+ name="make luajittex format",
+ program="luajittex",
+ template=template,
+ checkers=checkers,
+ reporter=report_format,
+ },
+}
+function environment.make_format(name,arguments)
local engine=environment.ownmain or "luatex"
+ local silent=environment.arguments.silent
local olddir=dir.current()
local path=caches.getwritablepath("formats",engine) or ""
if path~="" then
@@ -18690,11 +20316,20 @@ function environment.make_format(name,silent)
lfs.chdir(olddir)
return
end
- local dump=os.platform=="unix" and "\\\\dump" or "\\dump"
- if silent then
+ local specification={
+ primaryflags=primaryflags(),
+ secondaryflags=secondaryflags(),
+ luafile=quoted(usedluastub),
+ texfile=quoted(fulltexsourcename),
+ dump=os.platform=="unix" and "\\\\dump" or "\\dump",
+ }
+ local runner=runners[engine]
+ if not runner then
+ report_format("format %a cannot be generated, no runner available for engine %a",name,engine)
+ elseif 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)
+ specification.redirect="> temp.log"
+ local result=runner(specification)
local runtime=statistics.stoptiming()
if result~=0 then
print(format("%s silent make > fatal error when making format %q",engine,name))
@@ -18703,9 +20338,7 @@ function environment.make_format(name,silent)
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)
+ runner(specification)
end
local pattern=file.removesuffix(file.basename(usedluastub)).."-*.mem"
local mp=dir.glob(pattern)
@@ -18718,6 +20351,30 @@ function environment.make_format(name,silent)
end
lfs.chdir(olddir)
end
+local template=[[%flags% --fmt=%fmtfile% --lua=%luafile% %texfile% %more%]]
+local checkers={
+ flags="string",
+ more="string",
+ fmtfile="readable",
+ luafile="readable",
+ texfile="readable",
+}
+local runners={
+ luatex=sandbox.registerrunner {
+ name="run luatex format",
+ program="luatex",
+ template=template,
+ checkers=checkers,
+ reporter=report_format,
+ },
+ luajittex=sandbox.registerrunner {
+ name="run luajittex format",
+ program="luajittex",
+ template=template,
+ checkers=checkers,
+ reporter=report_format,
+ },
+}
function environment.run_format(name,data,more)
if name and name~="" then
local engine=environment.ownmain or "luatex"
@@ -18739,9 +20396,18 @@ function environment.run_format(name,data,more)
report_format("using format name %a",fmtname)
report_format("no luc/lua file with name %a",barename)
else
- local command=format("%s %s --fmt=%s --lua=%s %s %s",engine,primaryflags(),quoted(barename),quoted(luaname),quoted(data),more~="" and quoted(more) or "")
- report_format("running command: %s",command)
- os.execute(command)
+ local runner=runners[engine]
+ if not runner then
+ report_format("format %a cannot be run, no runner available for engine %a",name,engine)
+ else
+ runner {
+ flags=primaryflags(),
+ fmtfile=quoted(barename),
+ luafile=quoted(luaname),
+ texfile=quoted(data),
+ more=more,
+ }
+ end
end
end
end
@@ -18750,10 +20416,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-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
+-- used libraries : l-lua.lua l-sandbox.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-tpl.lua util-sbx.lua util-mrg.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 : 797557
--- stripped bytes : 289197
+-- original bytes : 842443
+-- stripped bytes : 306317
-- end library merge
@@ -18777,6 +20443,7 @@ local owntree = environment and environment.ownpath or ownpath
local ownlibs = { -- order can be made better
'l-lua.lua',
+ 'l-sandbox.lua',
'l-package.lua',
'l-lpeg.lua',
'l-function.lua',
@@ -18810,8 +20477,9 @@ local ownlibs = { -- order can be made better
'util-lua.lua', -- indeed here?
'util-deb.lua',
- 'util-mrg.lua',
'util-tpl.lua',
+ 'util-sbx.lua',
+ 'util-mrg.lua',
'util-env.lua',
'luat-env.lua', -- can come before inf (as in mkiv)
@@ -18983,7 +20651,7 @@ local helpinfo = [[
<metadata>
<entry name="name">mtxrun</entry>
<entry name="detail">ConTeXt TDS Runner Tool</entry>
- <entry name="version">1.31</entry>
+ <entry name="version">1.32</entry>
</metadata>
<flags>
<category name="basic">
@@ -19046,6 +20714,7 @@ local helpinfo = [[
</subcategory>
<subcategory>
<flag name="expand-braces"><short>expand complex variable</short></flag>
+ <flag name="resolve-path"><short>expand variable (completely resolve paths)</short></flag>
<flag name="expand-path"><short>expand variable (resolve paths)</short></flag>
<flag name="expand-var"><short>expand variable (resolve references)</short></flag>
<flag name="show-path"><short>show path expansion of ...</short></flag>
@@ -19063,7 +20732,7 @@ local helpinfo = [[
local application = logs.application {
name = "mtxrun",
- banner = "ConTeXt TDS Runner Tool 1.31",
+ banner = "ConTeXt TDS Runner Tool 1.32",
helpinfo = helpinfo,
}
@@ -20029,6 +21698,13 @@ elseif e_argument("expand-path") then
environment.initializearguments(environment.arguments_after)
resolvers.dowithfilesandreport(resolvers.expandpath, environment.files)
+elseif e_argument("resolve-path") then
+
+ resolvers.load("nofiles")
+ runners.register_arguments(filename)
+ environment.initializearguments(environment.arguments_after)
+ resolvers.dowithfilesandreport(resolvers.cleanedpathlist, environment.files)
+
elseif e_argument("expand-var") or e_argument("expand-variable") then
-- luatools: runners.execute_ctx_script("mtx-base","--expand-var",filename)
diff --git a/scripts/context/ruby/rslb/base.rb b/scripts/context/ruby/rslb/base.rb
new file mode 100644
index 000000000..66ce3a19e
--- /dev/null
+++ b/scripts/context/ruby/rslb/base.rb
@@ -0,0 +1,270 @@
+# hans hagen, pragma-ade, hasselt nl
+# experimental code, don't touch it
+
+require 'rexml/document.rb'
+
+class Array
+
+ def downcase
+ self.collect do |l|
+ l.to_s.downcase
+ end
+ end
+
+end
+
+class Resource
+
+ @@rslburl = 'http://www.pragma-ade.com/rng/rslb.rng'
+ @@rslbns = 'rl'
+ @@rslbtmp = 'rslbtool-tmp.xml'
+
+ def initialize (filename='',namespace=@@rslbns)
+ @ns = if namespace then @@rslbns + ':' else '' end
+ set_filename(filename)
+ @library = REXML::Document.new(skeleton,
+ {:ignore_whitespace_nodes => :all,
+ :compress_whitespace => :all})
+ @lastindex = 0
+ @texexec = 'texexec'
+ @downcaselabels = true
+ @downcasefilenames = true
+ end
+
+ def keeplabelcase
+ @downcaselabels = false
+ end
+
+ def keepfilenamecase
+ @downcasefilenames = false
+ end
+
+ def outer_skeleton (str)
+ tmp = if @ns.empty? then '' else " xmlns:#{@ns.sub(':','')}='#{@@rslburl}'" end
+ "<?xml version='1.0'?>\n" + "<#{@ns}library#{tmp}>\n" + str + "\n</#{@ns}library>"
+ end
+
+ def skeleton
+ outer_skeleton("<#{@ns}description>" +
+ "<#{@ns}organization>unknown</#{@ns}organization>" +
+ "<#{@ns}project>unknown</#{@ns}project>" +
+ "<#{@ns}product>unknown</#{@ns}product>" +
+ "<#{@ns}comment>unknown</#{@ns}comment>" +
+ "</#{@ns}description>")
+ end
+
+ def set_filename (filename)
+ @filename = if filename.empty? then 'unknown' else filename end
+ @fullname = @filename
+ @filename = File.basename(@filename).sub(/\..*$/,'')
+ end
+
+ def set_texexec (filename)
+ print "setting texexec binary to: #{filename}\n"
+ @texexec = filename
+ end
+
+ def load (filename='')
+ set_filename(filename)
+ if not filename.empty? and FileTest.file?(filename) # todo: test op valide fig base
+ @library = REXML::Document.new(File.new(filename),
+ {:ignore_whitespace_nodes => :all,
+ :compress_whitespace => :all})
+ unless @library.root.prefix.empty?
+ @ns = @library.root.prefix + ':'
+ end
+ else
+ initialize(filename,!@ns.empty?)
+ end
+ end
+
+ def save (filename)
+ filename += '.xml' unless filename =~ /\..*?$/
+ if not filename.empty? and f = open(filename,'w')
+ @library.write(f,0)
+ f.close
+ end
+ end
+
+ def figure_labels
+ REXML::XPath.match(@library.root,"/#{@ns}library/#{@ns}figure/#{@ns}label/text()")
+ end
+
+ def figure_records
+ @library.elements.to_a("/#{@ns}library/#{@ns}figure")
+ end
+
+ def figure_files
+ REXML::XPath.match(@library.root,"/#{@ns}library/#{@ns}figure/#{@ns}file/text()")
+ end
+
+ def delete_figure (label='')
+ return if label.empty?
+ labels = figure_labels
+ labels.each_index do |i|
+ if labels[i].to_s.downcase == label.downcase
+ @library.elements.delete_all("/#{@ns}library/#{@ns}figure[#{i+1}]")
+ end
+ end
+ end
+
+ def add_figure (file='',label='',prefix='')
+ return if file.empty? or file.match(/^#{@filename}\..*$/i)
+ labels = figure_labels
+ prefix = @filename if prefix.empty?
+ if label.empty?
+ i = @lastindex
+ loop do
+ i += 1
+ label = prefix + ' ' + i.to_s
+ break unless labels.include?(label)
+ end
+ else
+ delete_figure(label) unless label.empty?
+ end
+ e = REXML::Element.new("#{@ns}figure")
+ l = REXML::Element.new("#{@ns}label")
+ f = REXML::Element.new("#{@ns}file")
+ l.text, f.text = label, file
+ e.add_element(l)
+ e.add_element(f)
+ @library.root.add_element(e)
+ end
+
+ def add_figures (list='',prefix='')
+ if @downcasefilenames then
+ files = figure_files.downcase
+ [list].flatten.downcase.each do |f|
+ next unless FileTest.file?(f)
+ add_figure(f,'',prefix) unless files.include?(f)
+ end
+ else
+ files = figure_files
+ [list].flatten.each do |f|
+ next unless FileTest.file?(f)
+ add_figure(f,'',prefix) unless files.include?(f)
+ end
+ end
+ end
+
+ def delete_figures (list='')
+ [list].flatten.downcase.each do |l|
+ delete_figure(l)
+ end
+ end
+
+ def sort_figures
+ if @downcaselabels then
+ labels = figure_labels.downcase
+ else
+ labels = figure_labels
+ end
+ return unless labels
+ figures = figure_records
+ @library.elements.delete_all("/#{@ns}library/#{@ns}figure")
+ labels = labels.collect do |l| # prepare numbers
+ l.gsub(/(\d+)/) do |d| sprintf('%05d', d) end
+ end
+ labels.sort.each do |s|
+ @library.root.add_element(figures[labels.index(s)])
+ end
+ end
+
+ def purge_figures
+ REXML::XPath.each(@library.root,"/#{@ns}library/#{@ns}figure") do |e|
+ filename = REXML::XPath.match(e,"#{@ns}file/text()").to_s
+ e.parent.delete(e) unless FileTest.file?(filename)
+ end
+ end
+
+ def run_command(command)
+ print "calling #{command}\n"
+ print "\n"
+ begin
+ system(command)
+ rescue
+ # sorry again
+ end
+ print "\n"
+ end
+
+ def create_dummies(process=false,result='',zipalso='')
+ result = @filename if result.empty?
+ list = REXML::XPath.match(@library.root,"/#{@ns}library/#{@ns}usage")
+ begin
+ File.delete(result+'.pdf')
+ rescue
+ # no way
+ end
+ return unless list && list.length>0
+ done = Array.new
+ list.each do |e|
+ t = REXML::XPath.match(e,"#{@ns}type/text()")
+ s = REXML::XPath.match(e,"#{@ns}state/text()")
+ if t && (t.to_s == 'figure') && s && (s.to_s == 'missing')
+ begin
+ f = REXML::XPath.match(e,"#{@ns}file/text()").to_s
+ if done.index(f)
+ print "skipping dummy figure: " + f + "\n"
+ elsif f =~ /\s/o
+ print "skipping crappy fname: " + f + "\n"
+ elsif f == 'dummy'
+ print "skipping dummy figure: " + f + "\n"
+ else
+ print "creating dummy figure: " + f + "\n"
+ if process && (x = open(@@rslbtmp,'w'))
+ x.puts(outer_skeleton(e.to_s))
+ x.close
+ run_command ("#{@texexec} --pdf --once --batch --silent --random --use=res-10 --xml --result=#{f} #{@@rslbtmp}")
+ end
+ done.push(f+'.pdf')
+ begin
+ File.delete(@@rslbtmp)
+ rescue
+ # sorry once more
+ end
+ end
+ rescue
+ # sorry, skip 'm
+ end
+ end
+ end
+ if process && (done.length>0)
+ begin
+ File.delete(result + '.zip')
+ rescue
+ # ok
+ end
+ run_command("zip #{result+'.zip'} #{@fullname}")
+ unless zipalso.empty?
+ begin
+ zipalso.split(',').each do |name|
+ run_command("zip #{result+'.zip'} #{name}")
+ end
+ end
+ end
+ done.each do |name|
+ run_command("zip #{result+'.zip'} #{name}")
+ end
+ run_command("#{@texexec} --pdf --batch --silent --use=res-11 --xml --result=#{result} #{@fullname}")
+ done.each do |name|
+ begin
+ File.delete(name)
+ rescue
+ # sorry
+ end
+ end
+ end
+ end
+
+end
+
+# reslib = Resource.new
+# reslib.load('f.xml') # reslib.load('figbase.xml')
+# reslib.delete_figure('figbase 5')
+# reslib.delete_figure('figbase 5')
+# reslib.add_figure('a.pdf')
+# reslib.add_figure('b.pdf','something')
+# reslib.add_figure('c.pdf')
+# reslib.add_files('x.pdf')
+# reslib.save('figbase.tmp')
diff --git a/scripts/context/stubs/install/first-setup.sh b/scripts/context/stubs/install/first-setup.sh
index 9249fd2e0..ea72d55d4 100644
--- a/scripts/context/stubs/install/first-setup.sh
+++ b/scripts/context/stubs/install/first-setup.sh
@@ -5,14 +5,11 @@
# you may change this if you want ...
CONTEXTROOT="$PWD/tex"
-# suggested by Tobias Florek to check for ruby & rsync
+# suggested by Tobias Florek to check for rsync
if [ ! -x "`which rsync`" ]; then
echo "You need to install rsync first."
exit 1
fi
-if [ ! -x "`which ruby`" ]; then
- echo "You might want to install Ruby first if you want to use pdfTeX or XeTeX."
-fi
system=`uname -s`
cpu=`uname -m`
@@ -23,11 +20,32 @@ case "$system" in
case "$cpu" in
i*86) platform="linux" ;;
x86_64|ia64) platform="linux-64" ;;
+
# a little bit of cheating with ppc64 (won't work on Gentoo)
ppc|ppc64) platform="linux-ppc" ;;
+
# we currently support just mipsel, but Debian is lying (reports mips64)
# we need more hacks to fix the situation, this is just a temporary solution
mips|mips64|mipsel|mips64el) platform="linux-mipsel" ;;
+
+ armv7l) platform="linux-armhf"
+ # machine id output by uname(1) is insufficent to determine whether this
+ # is a soft or hard float system so we check ourselves.
+ # a) binutils, this should work almost everywhere
+ if $(which readelf >/dev/null 2>&1); then
+ readelf -A /proc/self/exe | grep -q '^ \+Tag_ABI_VFP_args'
+ if [ ! $? ]; then
+ platform="linux-armel"
+ fi
+ # b) debian-specific fallback
+ elif $(which dpkg >/dev/null 2>&1); then
+ if [ "$(dpkg --print-architecture)" = armel ]; then
+ platform="linux-armel"
+ fi
+ fi
+ # else go with hard fp
+ ;;
+
*) platform="unknown" ;;
esac ;;
# Mac OS X
@@ -49,15 +67,29 @@ case "$system" in
# kFreeBSD (debian)
GNU/kFreeBSD)
case "$cpu" in
- i*86) platform="kfreebsd-i386" ;;
- x86_64|amd64) platform="kfreebsd-amd64" ;;
+ #i*86) platform="kfreebsd-i386" ;;
+ #x86_64|amd64) platform="kfreebsd-amd64" ;;
*) platform="unknown" ;;
esac ;;
# cygwin
+ # OpenBSD
+ OpenBSD|freebsd)
+ case "$cpu" in
+ i*86) platform="openbsd" ;;
+ x86_64) platform="openbsd" ;; # no special binaries are available yet
+ amd64) platform="openbsd-amd64" ;;
+ *) platform="unknown" ;;
+ esac ;;
CYGWIN*)
case "$cpu" in
i*86) platform="cygwin" ;;
- x86_64|ia64) platform="cygwin-64" ;;
+ x86_64|ia64) platform="cygwin" ;;
+ *) platform="unknown" ;;
+ esac ;;
+ # UWIN
+ UWIN*)
+ case "$cpu" in
+ i*86) platform="mswin" ;;
*) platform="unknown" ;;
esac ;;
# SunOS/Solaris
@@ -87,6 +119,10 @@ if test "$platform" = "unknown" ; then
echo "Error: your system \"$system $cpu\" is not supported yet."
echo "Please report to the ConTeXt mailing-list (ntg-context@ntg.nl)"
exit
+elif test "$platform" = "linux-ppc" ; then
+ echo "Error: support for your system \"$platform\" has been dropped."
+ echo "Please ask on to the ConTeXt mailing-list if you still need it (ntg-context@ntg.nl)"
+ exit
fi
# if you want to enforce some specific platform
@@ -96,11 +132,16 @@ fi
# download or rsync the latest scripts first
rsync -rlptv rsync://contextgarden.net/minimals/setup/$platform/bin .
+# use native windows binaries on cygwin
+if test "$platform" = "cygwin" ; then
+ platform=mswin
+fi
+
# download or update the distribution
# you may remove the --context=beta switch if you want to use "current"
# you can use --engine=luatex if you want just mkiv
env PATH="$PWD/bin:$CONTEXTROOT/texmf-$platform/bin:$PATH" \
-mtxrun --script ./bin/mtx-update.lua --force --update --make --context=beta --platform=$platform --texroot="$CONTEXTROOT" $@
+./bin/mtxrun --script ./bin/mtx-update.lua --force --update --make --context=beta --platform=$platform --texroot="$CONTEXTROOT" $@
echo
echo "When you want to use context, you need to initialize the tree by typing:"
@@ -113,8 +154,3 @@ echo "to PATH variable if you want to set it permanently."
echo "This can usually be done in .bashrc, .bash_profile"
echo "(or whatever file is used to initialize your shell)."
echo
-
-if [ ! -x "`which ruby`" ]; then
- echo "You might want to install Ruby first if you want to use pdfTeX or XeTeX."
- echo
-fi
diff --git a/scripts/context/stubs/mswin/mtxrun.lua b/scripts/context/stubs/mswin/mtxrun.lua
index 7b711a88d..873770cac 100644
--- a/scripts/context/stubs/mswin/mtxrun.lua
+++ b/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: 4734, stripped down to: 2626
+-- original size: 5125, stripped down to: 2881
if not modules then modules={} end modules ['l-lua']={
version=1.001,
@@ -162,6 +162,283 @@ if flush then
local spawn=os.spawn if spawn then function os.spawn (...) flush() return spawn (...) end end
local popen=io.popen if popen then function io.popen (...) flush() return popen (...) end end
end
+FFISUPPORTED=type(ffi)=="table" and ffi.os~="" and ffi.arch~="" and ffi.load
+if not FFISUPPORTED then
+ local okay;okay,ffi=pcall(require,"ffi")
+ FFISUPPORTED=type(ffi)=="table" and ffi.os~="" and ffi.arch~="" and ffi.load
+end
+if not FFISUPPORTED then
+ ffi=nil
+elseif not ffi.number then
+ ffi.number=tonumber
+end
+
+
+end -- of closure
+
+do -- create closure to overcome 200 locals limit
+
+package.loaded["l-sandbox"] = package.loaded["l-sandbox"] or true
+
+-- original size: 9667, stripped down to: 6678
+
+if not modules then modules={} end modules ['l-sandbox']={
+ 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 global=_G
+local next=next
+local unpack=unpack or table.unpack
+local type=type
+local tprint=texio.write_nl or print
+local tostring=tostring
+local format=string.format
+local concat=table.concat
+local sort=table.sort
+local gmatch=string.gmatch
+local gsub=string.gsub
+local requiem=require
+sandbox={}
+local sandboxed=false
+local overloads={}
+local skiploads={}
+local initializers={}
+local finalizers={}
+local originals={}
+local comments={}
+local trace=false
+local logger=false
+local blocked={}
+local function report(...)
+ tprint("sandbox ! "..format(...))
+end
+sandbox.report=report
+function sandbox.setreporter(r)
+ report=r
+ sandbox.report=r
+end
+function sandbox.settrace(v)
+ trace=v
+end
+function sandbox.setlogger(l)
+ logger=type(l)=="function" and l or false
+end
+local function register(func,overload,comment)
+ if type(func)=="function" then
+ if type(overload)=="string" then
+ comment=overload
+ overload=nil
+ end
+ local function f(...)
+ if sandboxed then
+ local overload=overloads[f]
+ if overload then
+ if logger then
+ local result={ overload(func,...) }
+ logger {
+ comment=comments[f] or tostring(f),
+ arguments={... },
+ result=result[1] and true or false,
+ }
+ return unpack(result)
+ else
+ return overload(func,...)
+ end
+ else
+ end
+ else
+ return func(...)
+ end
+ end
+ if comment then
+ comments[f]=comment
+ if trace then
+ report("registering function: %s",comment)
+ end
+ end
+ overloads[f]=overload or false
+ originals[f]=func
+ return f
+ end
+end
+local function redefine(func,comment)
+ if type(func)=="function" then
+ skiploads[func]=comment or comments[func] or "unknown"
+ if overloads[func]==false then
+ overloads[func]=nil
+ end
+ end
+end
+sandbox.register=register
+sandbox.redefine=redefine
+function sandbox.original(func)
+ return originals and originals[func] or func
+end
+function sandbox.overload(func,overload,comment)
+ comment=comment or comments[func] or "?"
+ if type(func)~="function" then
+ if trace then
+ report("overloading unknown function: %s",comment)
+ end
+ elseif type(overload)~="function" then
+ if trace then
+ report("overloading function with bad overload: %s",comment)
+ end
+ elseif overloads[func]==nil then
+ if trace then
+ report("function is not registered: %s",comment)
+ end
+ elseif skiploads[func] then
+ if trace then
+ report("function is not skipped: %s",comment)
+ end
+ else
+ if trace then
+ report("overloading function: %s",comment)
+ end
+ overloads[func]=overload
+ end
+ return func
+end
+local function whatever(specification,what,target)
+ if type(specification)~="table" then
+ report("%s needs a specification",what)
+ elseif type(specification.category)~="string" or type(specification.action)~="function" then
+ report("%s needs a category and action",what)
+ elseif not sandboxed then
+ target[#target+1]=specification
+ elseif trace then
+ report("already enabled, discarding %s",what)
+ end
+end
+function sandbox.initializer(specification)
+ whatever(specification,"initializer",initializers)
+end
+function sandbox.finalizer(specification)
+ whatever(specification,"finalizer",finalizers)
+end
+function require(name)
+ local n=gsub(name,"^.*[\\/]","")
+ local n=gsub(n,"[%.].*$","")
+ local b=blocked[n]
+ if b==false then
+ return nil
+ elseif b then
+ if trace then
+ report("using blocked: %s",n)
+ end
+ return b
+ else
+ if trace then
+ report("requiring: %s",name)
+ end
+ return requiem(name)
+ end
+end
+function blockrequire(name,lib)
+ if trace then
+ report("preventing reload of: %s",name)
+ end
+ blocked[name]=lib or _G[name] or false
+end
+function sandbox.enable()
+ if not sandboxed then
+ for i=1,#initializers do
+ initializers[i].action()
+ end
+ for i=1,#finalizers do
+ finalizers[i].action()
+ end
+ local nnot=0
+ local nyes=0
+ local cnot={}
+ local cyes={}
+ local skip={}
+ for k,v in next,overloads do
+ local c=comments[k]
+ if v then
+ if c then
+ cyes[#cyes+1]=c
+ else
+ nyes=nyes+1
+ end
+ else
+ if c then
+ cnot[#cnot+1]=c
+ else
+ nnot=nnot+1
+ end
+ end
+ end
+ for k,v in next,skiploads do
+ skip[#skip+1]=v
+ end
+ if #cyes>0 then
+ sort(cyes)
+ report("overloaded known: %s",concat(cyes," | "))
+ end
+ if nyes>0 then
+ report("overloaded unknown: %s",nyes)
+ end
+ if #cnot>0 then
+ sort(cnot)
+ report("not overloaded known: %s",concat(cnot," | "))
+ end
+ if nnot>0 then
+ report("not overloaded unknown: %s",nnot)
+ end
+ if #skip>0 then
+ sort(skip)
+ report("not overloaded redefined: %s",concat(skip," | "))
+ end
+ initializers=nil
+ finalizers=nil
+ originals=nil
+ sandboxed=true
+ end
+end
+blockrequire("lfs",lfs)
+blockrequire("io",io)
+blockrequire("os",os)
+blockrequire("ffi",ffi)
+local function supported(library)
+ local l=_G[library]
+ return l
+end
+loadfile=register(loadfile,"loadfile")
+if supported("io") then
+ io.open=register(io.open,"io.open")
+ io.popen=register(io.popen,"io.popen")
+ io.lines=register(io.lines,"io.lines")
+ io.output=register(io.output,"io.output")
+ io.input=register(io.input,"io.input")
+end
+if supported("os") then
+ os.execute=register(os.execute,"os.execute")
+ os.spawn=register(os.spawn,"os.spawn")
+ os.exec=register(os.exec,"os.exec")
+ os.rename=register(os.rename,"os.rename")
+ os.remove=register(os.remove,"os.remove")
+end
+if supported("lfs") then
+ lfs.chdir=register(lfs.chdir,"lfs.chdir")
+ lfs.mkdir=register(lfs.mkdir,"lfs.mkdir")
+ lfs.rmdir=register(lfs.rmdir,"lfs.rmdir")
+ lfs.isfile=register(lfs.isfile,"lfs.isfile")
+ lfs.isdir=register(lfs.isdir,"lfs.isdir")
+ lfs.attributes=register(lfs.attributes,"lfs.attributes")
+ lfs.dir=register(lfs.dir,"lfs.dir")
+ lfs.lock_dir=register(lfs.lock_dir,"lfs.lock_dir")
+ lfs.touch=register(lfs.touch,"lfs.touch")
+ lfs.link=register(lfs.link,"lfs.link")
+ lfs.setmode=register(lfs.setmode,"lfs.setmode")
+ lfs.readlink=register(lfs.readlink,"lfs.readlink")
+ lfs.shortname=register(lfs.shortname,"lfs.shortname")
+ lfs.symlinkattributes=register(lfs.symlinkattributes,"lfs.symlinkattributes")
+end
end -- of closure
@@ -170,7 +447,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-package"] = package.loaded["l-package"] or true
--- original size: 10949, stripped down to: 8037
+-- original size: 10587, stripped down to: 7815
if not modules then modules={} end modules ['l-package']={
version=1.001,
@@ -460,7 +737,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-lpeg"] = package.loaded["l-lpeg"] or true
--- original size: 38185, stripped down to: 20990
+-- original size: 37748, stripped down to: 20111
if not modules then modules={} end modules ['l-lpeg']={
version=1.001,
@@ -552,6 +829,7 @@ patterns.nonwhitespace=nonwhitespace
local stripper=spacer^0*C((spacer^0*nonspacer^1)^0)
local fullstripper=whitespace^0*C((whitespace^0*nonwhitespace^1)^0)
local collapser=Cs(spacer^0/""*nonspacer^0*((spacer^0/" "*nonspacer^1)^0))
+local nospacer=Cs((whitespace^1/""+nonwhitespace^1)^0)
local b_collapser=Cs(whitespace^0/""*(nonwhitespace^1+whitespace^1/" ")^0)
local e_collapser=Cs((whitespace^1*P(-1)/""+nonwhitespace^1+whitespace^1/" ")^0)
local m_collapser=Cs((nonwhitespace^1+whitespace^1/" ")^0)
@@ -561,6 +839,7 @@ local m_stripper=Cs((nonspacer^1+spacer^1/" ")^0)
patterns.stripper=stripper
patterns.fullstripper=fullstripper
patterns.collapser=collapser
+patterns.nospacer=nospacer
patterns.b_collapser=b_collapser
patterns.m_collapser=m_collapser
patterns.e_collapser=e_collapser
@@ -1027,27 +1306,7 @@ function lpeg.append(list,pp,delayed,checked)
end
local p_false=P(false)
local p_true=P(true)
-local function make(t)
- local function making(t)
- local p=p_false
- local keys=sortedkeys(t)
- for i=1,#keys do
- local k=keys[i]
- if k~="" then
- local v=t[k]
- if v==true then
- p=p+P(k)*p_true
- elseif v==false then
- else
- p=p+P(k)*making(v)
- end
- end
- end
- if t[""] then
- p=p+p_true
- end
- return p
- end
+local function make(t,rest)
local p=p_false
local keys=sortedkeys(t)
for i=1,#keys do
@@ -1058,10 +1317,13 @@ local function make(t)
p=p+P(k)*p_true
elseif v==false then
else
- p=p+P(k)*making(v)
+ p=p+P(k)*make(v,v[""])
end
end
end
+ if rest then
+ p=p+p_true
+ end
return p
end
local function collapse(t,x)
@@ -1264,7 +1526,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-function"] = package.loaded["l-function"] or true
--- original size: 372, stripped down to: 329
+-- original size: 361, stripped down to: 322
if not modules then modules={} end modules ['l-functions']={
version=1.001,
@@ -1283,7 +1545,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-string"] = package.loaded["l-string"] or true
--- original size: 5983, stripped down to: 2959
+-- original size: 6419, stripped down to: 3339
if not modules then modules={} end modules ['l-string']={
version=1.001,
@@ -1321,22 +1583,26 @@ end
local stripper=patterns.stripper
local fullstripper=patterns.fullstripper
local collapser=patterns.collapser
+local nospacer=patterns.nospacer
local longtostring=patterns.longtostring
function string.strip(str)
- return lpegmatch(stripper,str) or ""
+ return str and lpegmatch(stripper,str) or ""
end
function string.fullstrip(str)
- return lpegmatch(fullstripper,str) or ""
+ return str and lpegmatch(fullstripper,str) or ""
end
function string.collapsespaces(str)
- return lpegmatch(collapser,str) or ""
+ return str and lpegmatch(collapser,str) or ""
+end
+function string.nospaces(str)
+ return str and lpegmatch(nospacer,str) or ""
end
function string.longtostring(str)
- return lpegmatch(longtostring,str) or ""
+ return str and lpegmatch(longtostring,str) or ""
end
local pattern=P(" ")^0*P(-1)
function string.is_empty(str)
- if str=="" then
+ if not str or str=="" then
return true
else
return lpegmatch(pattern,str) and true or false
@@ -1381,6 +1647,21 @@ function string.tformat(fmt,...)
end
string.quote=string.quoted
string.unquote=string.unquoted
+if not string.bytetable then
+ local limit=5000
+ function string.bytetable(str)
+ local n=#str
+ if n>limit then
+ local t={ byte(str,1,limit) }
+ for i=limit+1,n do
+ t[i]=byte(str,i)
+ end
+ return t
+ else
+ return { byte(str,1,n) }
+ end
+ end
+end
end -- of closure
@@ -1389,7 +1670,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-table"] = package.loaded["l-table"] or true
--- original size: 36997, stripped down to: 22376
+-- original size: 39608, stripped down to: 23165
if not modules then modules={} end modules ['l-table']={
version=1.001,
@@ -1716,19 +1997,23 @@ function table.fromhash(t)
end
return hsh
end
-local noquotes,hexify,handle,compact,inline,functions
+local noquotes,hexify,handle,compact,inline,functions,metacheck
local reserved=table.tohash {
'and','break','do','else','elseif','end','false','for','function','if',
'in','local','nil','not','or','repeat','return','then','true','until','while',
'NaN','goto',
}
-local function simple_table(t)
+local function is_simple_table(t,hexify)
local nt=#t
if nt>0 then
local n=0
for _,v in next,t do
n=n+1
+ if type(v)=="table" then
+ return nil
+ end
end
+ local haszero=rawget(t,0)
if n==nt then
local tt={}
for i=1,nt do
@@ -1738,10 +2023,10 @@ local function simple_table(t)
if hexify then
tt[i]=format("0x%X",v)
else
- tt[i]=tostring(v)
+ tt[i]=v
end
elseif tv=="string" then
- tt[i]=format("%q",v)
+ tt[i]=format("%q",v)
elseif tv=="boolean" then
tt[i]=v and "true" or "false"
else
@@ -1749,10 +2034,32 @@ local function simple_table(t)
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
+ if hexify then
+ tt[i+1]=format("0x%X",v)
+ else
+ tt[i+1]=v
+ end
+ 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
end
+table.is_simple_table=is_simple_table
local propername=patterns.propername
local function dummy() end
local function do_serialize(root,name,depth,level,indexed)
@@ -1786,7 +2093,7 @@ local function do_serialize(root,name,depth,level,indexed)
if compact then
last=#root
for k=1,last do
- if root[k]==nil then
+ if rawget(root,k)==nil then
last=k-1
break
end
@@ -1814,7 +2121,7 @@ local function do_serialize(root,name,depth,level,indexed)
if next(v)==nil then
handle(format("%s {},",depth))
elseif inline then
- local st=simple_table(v)
+ local st=is_simple_table(v,hexify)
if st then
handle(format("%s { %s },",depth,concat(st,", ")))
else
@@ -1851,6 +2158,7 @@ local function do_serialize(root,name,depth,level,indexed)
else
handle(format("%s [%s]=%s,",depth,k and "true" or "false",v))
end
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
if hexify then
handle(format("%s %s=0x%X,",depth,k,v))
@@ -1873,6 +2181,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=%q,",depth,k and "true" or "false",v))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=%q,",depth,k,v))
else
@@ -1888,13 +2197,14 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]={},",depth,k and "true" or "false"))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s={},",depth,k))
else
handle(format("%s [%q]={},",depth,k))
end
elseif inline then
- local st=simple_table(v)
+ local st=is_simple_table(v,hexify)
if st then
if tk=="number" then
if hexify then
@@ -1904,6 +2214,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]={ %s },",depth,k and "true" or "false",concat(st,", ")))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s={ %s },",depth,k,concat(st,", ")))
else
@@ -1924,6 +2235,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=%s,",depth,tostring(k),v and "true" or "false"))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=%s,",depth,k,v and "true" or "false"))
else
@@ -1940,6 +2252,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=load(%q),",depth,k and "true" or "false",f))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=load(%q),",depth,k,f))
else
@@ -1955,6 +2268,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=%q,",depth,k and "true" or "false",tostring(v)))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=%q,",depth,k,tostring(v)))
else
@@ -1976,6 +2290,7 @@ local function serialize(_handle,root,name,specification)
functions=specification.functions
compact=specification.compact
inline=specification.inline and compact
+ metacheck=specification.metacheck
if functions==nil then
functions=true
end
@@ -1985,6 +2300,9 @@ local function serialize(_handle,root,name,specification)
if inline==nil then
inline=compact
end
+ if metacheck==nil then
+ metacheck=true
+ end
else
noquotes=false
hexify=false
@@ -1992,6 +2310,7 @@ local function serialize(_handle,root,name,specification)
compact=true
inline=true
functions=true
+ metacheck=true
end
if tname=="string" then
if name=="return" then
@@ -2015,7 +2334,7 @@ local function serialize(_handle,root,name,specification)
handle("t={")
end
if root then
- if getmetatable(root) then
+ if metacheck and getmetatable(root) then
local dummy=root._w_h_a_t_e_v_e_r_
root._w_h_a_t_e_v_e_r_=nil
end
@@ -2091,6 +2410,38 @@ local function flattened(t,f,depth)
return f
end
table.flattened=flattened
+local function collapsed(t,f,h)
+ if f==nil then
+ f={}
+ h={}
+ end
+ for k=1,#t do
+ local v=t[k]
+ if type(v)=="table" then
+ collapsed(v,f,h)
+ elseif not h[v] then
+ f[#f+1]=v
+ h[v]=true
+ end
+ end
+ return f
+end
+local function collapsedhash(t,h)
+ if h==nil then
+ h={}
+ end
+ for k=1,#t do
+ local v=t[k]
+ if type(v)=="table" then
+ collapsedhash(v,h)
+ else
+ h[v]=true
+ end
+ end
+ return h
+end
+table.collapsed=collapsed
+table.collapsedhash=collapsedhash
local function unnest(t,f)
if not f then
f={}
@@ -2197,6 +2548,12 @@ function table.swapped(t,s)
end
return n
end
+function table.hashed(t)
+ for i=1,#t do
+ t[t[i]]=i
+ end
+ return t
+end
function table.mirrored(t)
local n={}
for k,v in next,t do
@@ -2365,7 +2722,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-io"] = package.loaded["l-io"] or true
--- original size: 9001, stripped down to: 6512
+-- original size: 11790, stripped down to: 6961
if not modules then modules={} end modules ['l-io']={
version=1.001,
@@ -2375,6 +2732,7 @@ if not modules then modules={} end modules ['l-io']={
license="see context related readme files"
}
local io=io
+local open,flush,write,read=io.open,io.flush,io.write,io.read
local byte,find,gsub,format=string.byte,string.find,string.gsub,string.format
local concat=table.concat
local floor=math.floor
@@ -2384,50 +2742,56 @@ if string.find(os.getenv("PATH"),";",1,true) then
else
io.fileseparator,io.pathseparator="/",":"
end
-local function readall(f)
- return f:read("*all")
-end
+local large=2^24
+local medium=large/16
+local small=medium/8
local function readall(f)
local size=f:seek("end")
- if size==0 then
- return ""
- elseif size<1024*1024 then
+ if size>0 then
f:seek("set",0)
- return f:read('*all')
- else
- local done=f:seek("set",0)
- local step
- if size<1024*1024 then
- step=1024*1024
- elseif size>16*1024*1024 then
- step=16*1024*1024
- else
- step=floor(size/(1024*1024))*1024*1024/8
- end
- local data={}
- while true do
- local r=f:read(step)
- if not r then
- return concat(data)
- else
- data[#data+1]=r
- end
- end
+ return f:read(size)
+ else
+ return ""
end
end
io.readall=readall
function io.loaddata(filename,textmode)
- local f=io.open(filename,(textmode and 'r') or 'rb')
+ local f=open(filename,(textmode and 'r') or 'rb')
if f then
- local data=readall(f)
+ local size=f:seek("end")
+ local data=nil
+ if size>0 then
+ f:seek("set",0)
+ data=f:read(size)
+ end
f:close()
- if #data>0 then
- return data
+ return data
+ end
+end
+function io.copydata(source,target,action)
+ local f=open(source,"rb")
+ if f then
+ local g=open(target,"wb")
+ if g then
+ local size=f:seek("end")
+ if size>0 then
+ f:seek("set",0)
+ local data=f:read(size)
+ if action then
+ data=action(data)
+ end
+ if data then
+ g:write(data)
+ end
+ end
+ g:close()
end
+ f:close()
+ flush()
end
end
function io.savedata(filename,data,joiner)
- local f=io.open(filename,"wb")
+ local f=open(filename,"wb")
if f then
if type(data)=="table" then
f:write(concat(data,joiner or ""))
@@ -2437,40 +2801,70 @@ function io.savedata(filename,data,joiner)
f:write(data or "")
end
f:close()
- io.flush()
+ flush()
return true
else
return false
end
end
-function io.loadlines(filename,n)
- local f=io.open(filename,'r')
- if not f then
- elseif n then
- local lines={}
- for i=1,n do
- local line=f:read("*lines")
- if line then
- lines[#lines+1]=line
- else
- break
+if fio and fio.readline then
+ local readline=fio.readline
+ function io.loadlines(filename,n)
+ local f=open(filename,'r')
+ if not f then
+ elseif n then
+ local lines={}
+ for i=1,n do
+ local line=readline(f)
+ if line then
+ lines[i]=line
+ else
+ break
+ end
+ end
+ f:close()
+ lines=concat(lines,"\n")
+ if #lines>0 then
+ return lines
+ end
+ else
+ local line=readline(f)
+ f:close()
+ if line and #line>0 then
+ return line
end
end
- f:close()
- lines=concat(lines,"\n")
- if #lines>0 then
- return lines
- end
- else
- local line=f:read("*line") or ""
- f:close()
- if #line>0 then
- return line
+ end
+else
+ function io.loadlines(filename,n)
+ local f=open(filename,'r')
+ if not f then
+ elseif n then
+ local lines={}
+ for i=1,n do
+ local line=f:read("*lines")
+ if line then
+ lines[i]=line
+ else
+ break
+ end
+ end
+ f:close()
+ lines=concat(lines,"\n")
+ if #lines>0 then
+ return lines
+ end
+ else
+ local line=f:read("*line") or ""
+ f:close()
+ if #line>0 then
+ return line
+ end
end
end
end
function io.loadchunk(filename,n)
- local f=io.open(filename,'rb')
+ local f=open(filename,'rb')
if f then
local data=f:read(n or 1024)
f:close()
@@ -2480,7 +2874,7 @@ function io.loadchunk(filename,n)
end
end
function io.exists(filename)
- local f=io.open(filename)
+ local f=open(filename)
if f==nil then
return false
else
@@ -2489,7 +2883,7 @@ function io.exists(filename)
end
end
function io.size(filename)
- local f=io.open(filename)
+ local f=open(filename)
if f==nil then
return 0
else
@@ -2498,11 +2892,11 @@ function io.size(filename)
return s
end
end
-function io.noflines(f)
+local function noflines(f)
if type(f)=="string" then
- local f=io.open(filename)
+ local f=open(filename)
if f then
- local n=f and io.noflines(f) or 0
+ local n=f and noflines(f) or 0
f:close()
return n
else
@@ -2517,6 +2911,7 @@ function io.noflines(f)
return n
end
end
+io.noflines=noflines
local nextchar={
[ 4]=function(f)
return f:read(1,1,1,1)
@@ -2594,16 +2989,16 @@ function io.bytes(f,n)
end
function io.ask(question,default,options)
while true do
- io.write(question)
+ write(question)
if options then
- io.write(format(" [%s]",concat(options,"|")))
+ write(format(" [%s]",concat(options,"|")))
end
if default then
- io.write(format(" [%s]",default))
+ write(format(" [%s]",default))
end
- io.write(format(" "))
- io.flush()
- local answer=io.read()
+ write(format(" "))
+ flush()
+ local answer=read()
answer=gsub(answer,"^%s*(.*)%s*$","%1")
if answer=="" and default then
return default
@@ -2625,7 +3020,7 @@ function io.ask(question,default,options)
end
end
end
-local function readnumber(f,n,m)
+local function readnumber(f,n,m)
if m then
f:seek("set",n)
n=m
@@ -2634,31 +3029,31 @@ local function readnumber(f,n,m)
return byte(f:read(1))
elseif n==2 then
local a,b=byte(f:read(2),1,2)
- return 256*a+b
+ return 0x100*a+b
elseif n==3 then
local a,b,c=byte(f:read(3),1,3)
- return 256*256*a+256*b+c
+ return 0x10000*a+0x100*b+c
elseif n==4 then
local a,b,c,d=byte(f:read(4),1,4)
- return 256*256*256*a+256*256*b+256*c+d
+ return 0x1000000*a+0x10000*b+0x100*c+d
elseif n==8 then
local a,b=readnumber(f,4),readnumber(f,4)
- return 256*a+b
+ return 0x100*a+b
elseif n==12 then
local a,b,c=readnumber(f,4),readnumber(f,4),readnumber(f,4)
- return 256*256*a+256*b+c
+ return 0x10000*a+0x100*b+c
elseif n==-2 then
local b,a=byte(f:read(2),1,2)
- return 256*a+b
+ return 0x100*a+b
elseif n==-3 then
local c,b,a=byte(f:read(3),1,3)
- return 256*256*a+256*b+c
+ return 0x10000*a+0x100*b+c
elseif n==-4 then
local d,c,b,a=byte(f:read(4),1,4)
- return 256*256*256*a+256*256*b+256*c+d
+ return 0x1000000*a+0x10000*b+0x100*c+d
elseif n==-8 then
local h,g,f,e,d,c,b,a=byte(f:read(8),1,8)
- return 256*256*256*256*256*256*256*a+256*256*256*256*256*256*b+256*256*256*256*256*c+256*256*256*256*d+256*256*256*e+256*256*f+256*g+h
+ return 0x100000000000000*a+0x1000000000000*b+0x10000000000*c+0x100000000*d+0x1000000*e+0x10000*f+0x100*g+h
else
return 0
end
@@ -2680,7 +3075,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-number"] = package.loaded["l-number"] or true
--- original size: 5146, stripped down to: 2933
+-- original size: 5358, stripped down to: 3177
if not modules then modules={} end modules ['l-number']={
version=1.001,
@@ -2693,6 +3088,7 @@ local tostring,tonumber=tostring,tonumber
local format,floor,match,rep=string.format,math.floor,string.match,string.rep
local concat,insert=table.concat,table.insert
local lpegmatch=lpeg.match
+local floor=math.floor
number=number or {}
local number=number
if bit32 then
@@ -2817,6 +3213,26 @@ end
function number.bits(n)
return { bits(n,1) }
end
+function number.bytetodecimal(b)
+ local d=floor(b*100/255+0.5)
+ if d>100 then
+ return 100
+ elseif d<-100 then
+ return -100
+ else
+ return d
+ end
+end
+function number.decimaltobyte(d)
+ local b=floor(d*255/100+0.5)
+ if b>255 then
+ return 255
+ elseif b<-255 then
+ return -255
+ else
+ return b
+ end
+end
end -- of closure
@@ -2825,7 +3241,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-set"] = package.loaded["l-set"] or true
--- original size: 2010, stripped down to: 1186
+-- original size: 1923, stripped down to: 1133
if not modules then modules={} end modules ['l-set']={
version=1.001,
@@ -2898,7 +3314,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-os"] = package.loaded["l-os"] or true
--- original size: 16390, stripped down to: 9734
+-- original size: 16268, stripped down to: 9246
if not modules then modules={} end modules ['l-os']={
version=1.001,
@@ -2974,7 +3390,7 @@ if not os.__getenv__ then
end
local execute=os.execute
local iopopen=io.popen
-function os.resultof(command)
+local function resultof(command)
local handle=iopopen(command,"r")
if handle then
local result=handle:read("*all") or ""
@@ -2984,9 +3400,13 @@ function os.resultof(command)
return ""
end
end
+os.resultof=resultof
+function os.pipeto(command)
+ return iopopen(command,"w")
+end
if not io.fileseparator then
if find(os.getenv("PATH"),";",1,true) then
- io.fileseparator,io.pathseparator,os.type="\\",";",os.type or "mswin"
+ io.fileseparator,io.pathseparator,os.type="\\",";",os.type or "windows"
else
io.fileseparator,io.pathseparator,os.type="/",":",os.type or "unix"
end
@@ -3029,17 +3449,6 @@ setmetatable(os,{ __index=function(t,k)
return r and r(t,k) or nil
end })
local name,platform=os.name or "linux",os.getenv("MTX_PLATFORM") or ""
-local function guess()
- local architecture=os.resultof("uname -m") or ""
- if architecture~="" then
- return architecture
- end
- architecture=os.getenv("HOSTTYPE") or ""
- if architecture~="" then
- return architecture
- end
- return os.resultof("echo $HOSTTYPE") or ""
-end
if platform~="" then
os.platform=platform
elseif os.type=="windows" then
@@ -3056,7 +3465,7 @@ elseif os.type=="windows" then
end
elseif name=="linux" then
function resolvers.platform(t,k)
- local platform,architecture="",os.getenv("HOSTTYPE") or os.resultof("uname -m") or ""
+ local platform,architecture="",os.getenv("HOSTTYPE") or resultof("uname -m") or ""
if find(architecture,"x86_64",1,true) then
platform="linux-64"
elseif find(architecture,"ppc",1,true) then
@@ -3070,7 +3479,7 @@ elseif name=="linux" then
end
elseif name=="macosx" then
function resolvers.platform(t,k)
- local platform,architecture="",os.resultof("echo $HOSTTYPE") or ""
+ local platform,architecture="",resultof("echo $HOSTTYPE") or ""
if architecture=="" then
platform="osx-intel"
elseif find(architecture,"i386",1,true) then
@@ -3086,7 +3495,7 @@ elseif name=="macosx" then
end
elseif name=="sunos" then
function resolvers.platform(t,k)
- local platform,architecture="",os.resultof("uname -m") or ""
+ local platform,architecture="",resultof("uname -m") or ""
if find(architecture,"sparc",1,true) then
platform="solaris-sparc"
else
@@ -3098,7 +3507,7 @@ elseif name=="sunos" then
end
elseif name=="freebsd" then
function resolvers.platform(t,k)
- local platform,architecture="",os.resultof("uname -m") or ""
+ local platform,architecture="",resultof("uname -m") or ""
if find(architecture,"amd64",1,true) then
platform="freebsd-amd64"
else
@@ -3110,7 +3519,7 @@ elseif name=="freebsd" then
end
elseif name=="kfreebsd" then
function resolvers.platform(t,k)
- local platform,architecture="",os.getenv("HOSTTYPE") or os.resultof("uname -m") or ""
+ local platform,architecture="",os.getenv("HOSTTYPE") or resultof("uname -m") or ""
if find(architecture,"x86_64",1,true) then
platform="kfreebsd-amd64"
else
@@ -3241,7 +3650,7 @@ if not os.sleep then
end
end
local function isleapyear(year)
- return (year%400==0) or ((year%100~=0) and (year%4==0))
+ return (year%4==0) and (year%100~=0 or year%400==0)
end
os.isleapyear=isleapyear
local days={ 31,28,31,30,31,30,31,31,30,31,30,31 }
@@ -3280,7 +3689,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-file"] = package.loaded["l-file"] or true
--- original size: 21648, stripped down to: 10238
+-- original size: 20997, stripped down to: 9986
if not modules then modules={} end modules ['l-file']={
version=1.001,
@@ -3617,13 +4026,15 @@ function file.robustname(str,strict)
end
end
end
-file.readdata=io.loaddata
-file.savedata=io.savedata
+local loaddata=io.loaddata
+local savedata=io.savedata
+file.readdata=loaddata
+file.savedata=savedata
function file.copy(oldname,newname)
if oldname and newname then
- local data=io.loaddata(oldname)
+ local data=loaddata(oldname)
if data and data~="" then
- file.savedata(newname,data)
+ savedata(newname,data)
end
end
end
@@ -3660,7 +4071,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-gzip"] = package.loaded["l-gzip"] or true
--- original size: 1265, stripped down to: 1038
+-- original size: 1211, stripped down to: 1002
if not modules then modules={} end modules ['l-gzip']={
version=1.001,
@@ -3714,7 +4125,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-md5"] = package.loaded["l-md5"] or true
--- original size: 3355, stripped down to: 2321
+-- original size: 3309, stripped down to: 2314
if not modules then modules={} end modules ['l-md5']={
version=1.001,
@@ -3744,6 +4155,8 @@ do
if not md5.HEX then function md5.HEX(str) if str then return lpegmatch(bytestoHEX,md5sum(str)) end end end
if not md5.hex then function md5.hex(str) if str then return lpegmatch(bytestohex,md5sum(str)) end end end
if not md5.dec then function md5.dec(str) if str then return lpegmatch(bytestodec,md5sum(str)) end end end
+ md5.sumhexa=md5.hex
+ md5.sumHEXA=md5.HEX
end
end
function file.needsupdating(oldname,newname,threshold)
@@ -3802,7 +4215,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-url"] = package.loaded["l-url"] or true
--- original size: 12897, stripped down to: 5882
+-- original size: 12531, stripped down to: 5721
if not modules then modules={} end modules ['l-url']={
version=1.001,
@@ -4019,7 +4432,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-dir"] = package.loaded["l-dir"] or true
--- original size: 17358, stripped down to: 11378
+-- original size: 17703, stripped down to: 11691
if not modules then modules={} end modules ['l-dir']={
version=1.001,
@@ -4283,6 +4696,31 @@ local function globfiles(path,recurse,func,files)
return files
end
dir.globfiles=globfiles
+local function globdirs(path,recurse,func,files)
+ if type(func)=="string" then
+ local s=func
+ func=function(name) return find(name,s) end
+ end
+ files=files or {}
+ local noffiles=#files
+ for name in walkdir(path) do
+ if find(name,"^%.") then
+ else
+ local mode=attributes(name,'mode')
+ if mode=="directory" then
+ if not func or func(name) then
+ noffiles=noffiles+1
+ files[noffiles]=path.."/"..name
+ if recurse then
+ globdirs(path.."/"..name,recurse,func,files)
+ end
+ end
+ end
+ end
+ end
+ return files
+end
+dir.globdirs=globdirs
function dir.ls(pattern)
return concat(glob(pattern),"\n")
end
@@ -4447,9 +4885,13 @@ end
file.expandname=dir.expandname
local stack={}
function dir.push(newdir)
- insert(stack,currentdir())
+ local curdir=currentdir()
+ insert(stack,curdir)
if newdir and newdir~="" then
chdir(newdir)
+ return newdir
+ else
+ return curdir
end
end
function dir.pop()
@@ -4484,7 +4926,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-boolean"] = package.loaded["l-boolean"] or true
--- original size: 1919, stripped down to: 1621
+-- original size: 1850, stripped down to: 1568
if not modules then modules={} end modules ['l-boolean']={
version=1.001,
@@ -4556,7 +4998,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-unicode"] = package.loaded["l-unicode"] or true
--- original size: 38699, stripped down to: 16321
+-- original size: 38263, stripped down to: 16330
if not modules then modules={} end modules ['l-unicode']={
version=1.001,
@@ -5167,6 +5609,23 @@ function utf.chrlen(u)
(u<0xFC and 5) or
(u<0xFE and 6) or 0
end
+local extract=bit32.extract
+local char=string.char
+function unicode.toutf32string(n)
+ if n<=0xFF then
+ return
+ char(n).."\000\000\000"
+ elseif n<=0xFFFF then
+ return
+ char(extract(n,0,8))..char(extract(n,8,8)).."\000\000"
+ elseif n<=0xFFFFFF then
+ return
+ char(extract(n,0,8))..char(extract(n,8,8))..char(extract(n,16,8)).."\000"
+ else
+ return
+ char(extract(n,0,8))..char(extract(n,8,8))..char(extract(n,16,8))..char(extract(n,24,8))
+ end
+end
end -- of closure
@@ -5175,7 +5634,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-math"] = package.loaded["l-math"] or true
--- original size: 1012, stripped down to: 912
+-- original size: 974, stripped down to: 890
if not modules then modules={} end modules ['l-math']={
version=1.001,
@@ -5215,7 +5674,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-str"] = package.loaded["util-str"] or true
--- original size: 36053, stripped down to: 19685
+-- original size: 36148, stripped down to: 20179
if not modules then modules={} end modules ['util-str']={
version=1.001,
@@ -5227,7 +5686,7 @@ if not modules then modules={} end modules ['util-str']={
utilities=utilities or {}
utilities.strings=utilities.strings or {}
local strings=utilities.strings
-local format,gsub,rep,sub=string.format,string.gsub,string.rep,string.sub
+local format,gsub,rep,sub,find=string.format,string.gsub,string.rep,string.sub,string.find
local load,dump=load,string.dump
local tonumber,type,tostring=tonumber,type,tostring
local unpack,concat=table.unpack,table.concat
@@ -5410,6 +5869,25 @@ function number.signed(i)
return "-",-i
end
end
+local digit=patterns.digit
+local period=patterns.period
+local three=digit*digit*digit
+local splitter=Cs (
+ (((1-(three^1*period))^1+C(three))*(Carg(1)*three)^1+C((1-period)^1))*(P(1)/""*Carg(2))*C(2)
+)
+patterns.formattednumber=splitter
+function number.formatted(n,sep1,sep2)
+ local s=type(s)=="string" and n or format("%0.2f",n)
+ if sep1==true then
+ return lpegmatch(splitter,s,1,".",",")
+ elseif sep1=="." then
+ return lpegmatch(splitter,s,1,sep1,sep2 or ",")
+ elseif sep1=="," then
+ return lpegmatch(splitter,s,1,sep1,sep2 or ".")
+ else
+ return lpegmatch(splitter,s,1,sep1 or ",",sep2 or ".")
+ end
+end
local zero=P("0")^1/""
local plus=P("+")/""
local minus=P("-")
@@ -5435,6 +5913,27 @@ function number.sparseexponent(f,n)
end
return tostring(n)
end
+local hf={}
+local hs={}
+setmetatable(hf,{ __index=function(t,k)
+ local v="%."..k.."f"
+ t[k]=v
+ return v
+end } )
+setmetatable(hs,{ __index=function(t,k)
+ local v="%"..k.."s"
+ t[k]=v
+ return v
+end } )
+function number.formattedfloat(n,b,a)
+ local s=format(hf[a],n)
+ local l=(b or 0)+(a or 0)+1
+ if #s<l then
+ return format(hs[l],s)
+ else
+ return s
+ end
+end
local template=[[
%s
%s
@@ -5462,6 +5961,7 @@ local autodouble=string.autodouble
local sequenced=table.sequenced
local formattednumber=number.formatted
local sparseexponent=number.sparseexponent
+local formattedfloat=number.formattedfloat
]]
else
environment={
@@ -5485,6 +5985,7 @@ else
sequenced=table.sequenced,
formattednumber=number.formatted,
sparseexponent=number.sparseexponent,
+ formattedfloat=number.formattedfloat
}
end
local arguments={ "a1" }
@@ -5495,6 +5996,7 @@ setmetatable(arguments,{ __index=function(t,k)
end
})
local prefix_any=C((S("+- .")+R("09"))^0)
+local prefix_sub=(C((S("+-")+R("09"))^0)+Cc(0))*P(".")*(C((S("+-")+R("09"))^0)+Cc(0))
local prefix_tab=P("{")*C((1-P("}"))^0)*P("}")+C((1-R("az","AZ","09","%%"))^0)
local format_s=function(f)
n=n+1
@@ -5545,6 +6047,10 @@ local format_F=function(f)
return format("format((a%s %% 1 == 0) and '%%i' or '%%%sf',a%s)",n,f,n)
end
end
+local format_k=function(b,a)
+ n=n+1
+ return format("formattedfloat(a%s,%i,%i)",n,b or 0,a or 0)
+end
local format_g=function(f)
n=n+1
return format("format('%%%sg',a%s)",f,n)
@@ -5693,25 +6199,6 @@ end
local format_W=function(f)
return format("nspaces[%s]",tonumber(f) or 0)
end
-local digit=patterns.digit
-local period=patterns.period
-local three=digit*digit*digit
-local splitter=Cs (
- (((1-(three^1*period))^1+C(three))*(Carg(1)*three)^1+C((1-period)^1))*(P(1)/""*Carg(2))*C(2)
-)
-patterns.formattednumber=splitter
-function number.formatted(n,sep1,sep2)
- local s=type(s)=="string" and n or format("%0.2f",n)
- if sep1==true then
- return lpegmatch(splitter,s,1,".",",")
- elseif sep1=="." then
- return lpegmatch(splitter,s,1,sep1,sep2 or ",")
- elseif sep1=="," then
- return lpegmatch(splitter,s,1,sep1,sep2 or ".")
- else
- return lpegmatch(splitter,s,1,sep1 or ",",sep2 or ".")
- end
-end
local format_m=function(f)
n=n+1
if not f or f=="" then
@@ -5736,9 +6223,16 @@ end
local format_extension=function(extensions,f,name)
local extension=extensions[name] or "tostring(%s)"
local f=tonumber(f) or 1
+ local w=find(extension,"%.%.%.")
if f==0 then
+ if w then
+ extension=gsub(extension,"%.%.%.","")
+ end
return extension
elseif f==1 then
+ if w then
+ extension=gsub(extension,"%.%.%.","%%s")
+ end
n=n+1
local a="a"..n
return format(extension,a,a)
@@ -5746,10 +6240,13 @@ local format_extension=function(extensions,f,name)
local a="a"..(n+f+1)
return format(extension,a,a)
else
+ if w then
+ extension=gsub(extension,"%.%.%.",rep("%%s,",f-1).."%%s")
+ end
local t={}
for i=1,f do
n=n+1
- t[#t+1]="a"..n
+ t[i]="a"..n
end
return format(extension,unpack(t))
end
@@ -5762,7 +6259,8 @@ local builder=Cs { "start",
+V("s")+V("q")+V("i")+V("d")+V("f")+V("F")+V("g")+V("G")+V("e")+V("E")+V("x")+V("X")+V("o")
+V("c")+V("C")+V("S")
+V("Q")
-+V("N")
++V("N")
++V("k")
+V("r")+V("h")+V("H")+V("u")+V("U")+V("p")+V("b")+V("t")+V("T")+V("l")+V("L")+V("I")+V("w")
+V("W")
+V("a")
@@ -5789,6 +6287,7 @@ local builder=Cs { "start",
["S"]=(prefix_any*P("S"))/format_S,
["Q"]=(prefix_any*P("Q"))/format_S,
["N"]=(prefix_any*P("N"))/format_N,
+ ["k"]=(prefix_sub*P("k"))/format_k,
["c"]=(prefix_any*P("c"))/format_c,
["C"]=(prefix_any*P("C"))/format_C,
["r"]=(prefix_any*P("r"))/format_r,
@@ -5909,7 +6408,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-tab"] = package.loaded["util-tab"] or true
--- original size: 28680, stripped down to: 18636
+-- original size: 27407, stripped down to: 17116
if not modules then modules={} end modules ['util-tab']={
version=1.001,
@@ -5923,7 +6422,7 @@ utilities.tables=utilities.tables or {}
local tables=utilities.tables
local format,gmatch,gsub,sub=string.format,string.gmatch,string.gsub,string.sub
local concat,insert,remove,sort=table.concat,table.insert,table.remove,table.sort
-local setmetatable,getmetatable,tonumber,tostring=setmetatable,getmetatable,tonumber,tostring
+local setmetatable,getmetatable,tonumber,tostring,rawget=setmetatable,getmetatable,tonumber,tostring,rawget
local type,next,rawset,tonumber,tostring,load,select=type,next,rawset,tonumber,tostring,load,select
local lpegmatch,P,Cs,Cc=lpeg.match,lpeg.P,lpeg.Cs,lpeg.Cc
local sortedkeys,sortedpairs=table.sortedkeys,table.sortedpairs
@@ -6063,7 +6562,7 @@ function table.tocsv(t,specification)
r[f]=tostring(field)
end
end
- result[#result+1]=concat(r,separator)
+ result[i+1]=concat(r,separator)
end
return concat(result,"\n")
else
@@ -6295,11 +6794,12 @@ function table.autokey(t,k)
return v
end
local selfmapper={ __index=function(t,k) t[k]=k return k end }
-function table.twowaymapper(t)
- if not t then
- t={}
- else
- for i=0,#t do
+function table.twowaymapper(t)
+ if not t then
+ t={}
+ else
+ local zero=rawget(t,0)
+ for i=zero and 0 or 1,#t do
local ti=t[i]
if ti then
local i=tostring(i)
@@ -6307,7 +6807,6 @@ function table.twowaymapper(t)
t[ti]=i
end
end
- t[""]=t[0] or ""
end
setmetatable(t,selfmapper)
return t
@@ -6346,6 +6845,7 @@ local f_table_entry=formatters["[%q]={"]
local f_table_finish=formatters["}"]
local spaces=utilities.strings.newrepeater(" ")
local original_serialize=table.serialize
+local is_simple_table=table.is_simple_table
local function serialize(root,name,specification)
if type(specification)=="table" then
return original_serialize(root,name,specification)
@@ -6353,54 +6853,6 @@ local function serialize(root,name,specification)
local t
local n=1
local unknown=false
- local function simple_table(t)
- local nt=#t
- if nt>0 then
- local n=0
- for _,v in next,t do
- n=n+1
- if type(v)=="table" then
- return nil
- end
- end
- local haszero=t[0]
- if n==nt then
- local tt={}
- for i=1,nt do
- local v=t[i]
- local tv=type(v)
- if tv=="number" then
- tt[i]=v
- elseif tv=="string" then
- tt[i]=format("%q",v)
- elseif tv=="boolean" then
- tt[i]=v and "true" or "false"
- else
- return nil
- 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
- end
local function do_serialize(root,name,depth,level,indexed)
if level>0 then
n=n+1
@@ -6425,7 +6877,7 @@ local function serialize(root,name,specification)
local last=0
last=#root
for k=1,last do
- if root[k]==nil then
+ if rawget(root,k)==nil then
last=k-1
break
end
@@ -6448,7 +6900,7 @@ local function serialize(root,name,specification)
if next(v)==nil then
n=n+1 t[n]=f_val_not(depth)
else
- local st=simple_table(v)
+ local st=is_simple_table(v)
if st then
n=n+1 t[n]=f_val_seq(depth,st)
else
@@ -6492,7 +6944,7 @@ local function serialize(root,name,specification)
n=n+1 t[n]=f_key_str_value_not(depth,tostring(k))
end
else
- local st=simple_table(v)
+ local st=is_simple_table(v)
if not st then
do_serialize(v,k,depth,level+1)
elseif tk=="number" then
@@ -6552,11 +7004,11 @@ local function serialize(root,name,specification)
end
if root then
if getmetatable(root) then
- local dummy=root._w_h_a_t_e_v_e_r_
+ local dummy=root._w_h_a_t_e_v_e_r_
root._w_h_a_t_e_v_e_r_=nil
end
if next(root)~=nil then
- local st=simple_table(root)
+ local st=is_simple_table(root)
if st then
return t[1]..f_fin_seq(st)
else
@@ -6570,7 +7022,12 @@ local function serialize(root,name,specification)
end
table.serialize=serialize
if setinspector then
- setinspector("table",function(v) if type(v)=="table" then print(serialize(v,"table",{})) return true end end)
+ setinspector("table",function(v)
+ if type(v)=="table" then
+ print(serialize(v,"table",{ metacheck=false }))
+ return true
+ end
+ end)
end
@@ -6580,7 +7037,7 @@ 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
+-- original size: 7567, stripped down to: 5575
if not modules then modules={} end modules ['util-fil']={
version=1.001,
@@ -6590,7 +7047,9 @@ if not modules then modules={} end modules ['util-fil']={
license="see context related readme files"
}
local byte=string.byte
-local extract=bit32.extract
+local char=string.char
+local extract=bit32 and bit32.extract
+local floor=math.floor
utilities=utilities or {}
local files={}
utilities.files=files
@@ -6609,6 +7068,7 @@ end
function files.size(f)
return f:seek("end")
end
+files.getsize=files.size
function files.setposition(f,n)
if zerobased[f] then
f:seek("set",n)
@@ -6646,6 +7106,10 @@ end
function files.readbytes(f,n)
return byte(f:read(n),1,n)
end
+function files.readbytetable(f,n)
+ local s=f:read(n or 1)
+ return { byte(s,1,#s) }
+end
function files.readchar(f)
return f:read(1)
end
@@ -6655,7 +7119,7 @@ end
function files.readinteger1(f)
local n=byte(f:read(1))
if n>=0x80 then
- return n-0xFF-1
+ return n-0x100
else
return n
end
@@ -6663,55 +7127,107 @@ end
files.readcardinal1=files.readbyte
files.readcardinal=files.readcardinal1
files.readinteger=files.readinteger1
+files.readsignedbyte=files.readinteger1
function files.readcardinal2(f)
local a,b=byte(f:read(2),1,2)
return 0x100*a+b
end
+function files.readcardinal2le(f)
+ local b,a=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
+ if a>=0x80 then
+ return 0x100*a+b-0x10000
else
- return n
+ return 0x100*a+b
+ end
+end
+function files.readinteger2le(f)
+ local b,a=byte(f:read(2),1,2)
+ if a>=0x80 then
+ return 0x100*a+b-0x10000
+ else
+ return 0x100*a+b
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.readcardinal3le(f)
+ local c,b,a=byte(f:read(3),1,3)
+ return 0x10000*a+0x100*b+c
+end
+function files.readinteger3(f)
+ local a,b,c=byte(f:read(3),1,3)
+ if a>=0x80 then
+ return 0x10000*a+0x100*b+c-0x1000000
+ else
+ return 0x10000*a+0x100*b+c
+ end
+end
+function files.readinteger3le(f)
+ local c,b,a=byte(f:read(3),1,3)
+ if a>=0x80 then
+ return 0x10000*a+0x100*b+c-0x1000000
+ else
+ return 0x10000*a+0x100*b+c
+ end
+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.readcardinal4le(f)
+ local d,c,b,a=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
+ if a>=0x80 then
+ return 0x1000000*a+0x10000*b+0x100*c+d-0x100000000
else
- return n
+ return 0x1000000*a+0x10000*b+0x100*c+d
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
+function files.readinteger4le(f)
+ local d,c,b,a=byte(f:read(4),1,4)
+ if a>=0x80 then
+ return 0x1000000*a+0x10000*b+0x100*c+d-0x100000000
else
- return n+(0x100*c+d)/0xFFFF
+ return 0x1000000*a+0x10000*b+0x100*c+d
end
end
-function files.read2dot14(f)
+function files.readfixed2(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
+ if a>=0x80 then
+ return (a-0x100)+b/0x100
+ else
+ return (a )+b/0x100
+ end
+end
+function files.readfixed4(f)
+ local a,b,c,d=byte(f:read(4),1,4)
+ if a>=0x80 then
+ return (0x100*a+b-0x10000)+(0x100*c+d)/0x10000
else
- n=extract(n,30,2)
- return n+m/0x4000
+ return (0x100*a+b )+(0x100*c+d)/0x10000
+ end
+end
+if extract then
+ local extract=bit32.extract
+ local band=bit32.band
+ function files.read2dot14(f)
+ local a,b=byte(f:read(2),1,2)
+ if a>=0x80 then
+ local n=-(0x100*a+b)
+ return-(extract(n,14,2)+(band(n,0x3FFF)/16384.0))
+ else
+ local n=0x100*a+b
+ return (extract(n,14,2)+(band(n,0x3FFF)/16384.0))
+ end
end
end
function files.skipshort(f,n)
@@ -6720,6 +7236,55 @@ end
function files.skiplong(f,n)
f:read(4*(n or 1))
end
+function files.writecardinal2(f,n)
+ local a=char(n%256)
+ n=floor(n/256)
+ local b=char(n%256)
+ f:write(b,a)
+end
+function files.writecardinal4(f,n)
+ local a=char(n%256)
+ n=floor(n/256)
+ local b=char(n%256)
+ n=floor(n/256)
+ local c=char(n%256)
+ n=floor(n/256)
+ local d=char(n%256)
+ f:write(d,c,b,a)
+end
+function files.writestring(f,s)
+ f:write(char(byte(s,1,#s)))
+end
+function files.writebyte(f,b)
+ f:write(char(b))
+end
+if fio and fio.readcardinal1 then
+ files.readcardinal1=fio.readcardinal1
+ files.readcardinal2=fio.readcardinal2
+ files.readcardinal3=fio.readcardinal3
+ files.readcardinal4=fio.readcardinal4
+ files.readinteger1=fio.readinteger1
+ files.readinteger2=fio.readinteger2
+ files.readinteger3=fio.readinteger3
+ files.readinteger4=fio.readinteger4
+ files.read2dot14=fio.read2dot14
+ files.setposition=fio.setposition
+ files.getposition=fio.getposition
+ files.readbyte=files.readcardinal1
+ files.readsignedbyte=files.readinteger1
+ files.readcardinal=files.readcardinal1
+ files.readinteger=files.readinteger1
+ local skipposition=fio.skipposition
+ files.skipposition=skipposition
+ files.readbytes=fio.readbytes
+ files.readbytetable=fio.readbytetable
+ function files.skipshort(f,n)
+ skipposition(f,2*(n or 1))
+ end
+ function files.skiplong(f,n)
+ skipposition(f,4*(n or 1))
+ end
+end
end -- of closure
@@ -6728,7 +7293,7 @@ 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
+-- original size: 8716, stripped down to: 6754
if not modules then modules={} end modules ['util-sac']={
version=1.001,
@@ -6738,7 +7303,7 @@ if not modules then modules={} end modules ['util-sac']={
license="see context related readme files"
}
local byte,sub=string.byte,string.sub
-local extract=bit32.extract
+local extract=bit32 and bit32.extract
utilities=utilities or {}
local streams={}
utilities.streams=streams
@@ -6796,6 +7361,12 @@ function streams.readbytes(f,n)
f[2]=j
return byte(f[1],i,j-1)
end
+function streams.readbytetable(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
@@ -6815,7 +7386,7 @@ function streams.readinteger1(f)
f[2]=i+1
local n=byte(f[1],i)
if n>=0x80 then
- return n-0xFF-1
+ return n-0x100
else
return n
end
@@ -6830,16 +7401,33 @@ function streams.readcardinal2(f)
local a,b=byte(f[1],i,j)
return 0x100*a+b
end
+function streams.readcardinal2LE(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local b,a=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
+ if a>=0x80 then
+ return 0x100*a+b-0x10000
else
- return n
+ return 0x100*a+b
+ end
+end
+function streams.readinteger2le(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local b,a=byte(f[1],i,j)
+ if a>=0x80 then
+ return 0x100*a+b-0x10000
+ else
+ return 0x100*a+b
end
end
function streams.readcardinal3(f)
@@ -6849,6 +7437,35 @@ function streams.readcardinal3(f)
local a,b,c=byte(f[1],i,j)
return 0x10000*a+0x100*b+c
end
+function streams.readcardinal3le(f)
+ local i=f[2]
+ local j=i+2
+ f[2]=j+1
+ local c,b,a=byte(f[1],i,j)
+ return 0x10000*a+0x100*b+c
+end
+function streams.readinteger3(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local a,b,c=byte(f[1],i,j)
+ if a>=0x80 then
+ return 0x10000*a+0x100*b+c-0x1000000
+ else
+ return 0x10000*a+0x100*b+c
+ end
+end
+function streams.readinteger3le(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local c,b,a=byte(f[1],i,j)
+ if a>=0x80 then
+ return 0x10000*a+0x100*b+c-0x1000000
+ else
+ return 0x10000*a+0x100*b+c
+ end
+end
function streams.readcardinal4(f)
local i=f[2]
local j=i+3
@@ -6861,11 +7478,21 @@ function streams.readinteger4(f)
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
+ if a>=0x80 then
+ return 0x1000000*a+0x10000*b+0x100*c+d-0x100000000
else
- return n
+ return 0x1000000*a+0x10000*b+0x100*c+d
+ end
+end
+function streams.readinteger4le(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local d,c,b,a=byte(f[1],i,j)
+ if a>=0x80 then
+ return 0x1000000*a+0x10000*b+0x100*c+d-0x100000000
+ else
+ return 0x1000000*a+0x10000*b+0x100*c+d
end
end
function streams.readfixed4(f)
@@ -6873,26 +7500,38 @@ function streams.readfixed4(f)
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
+ if a>=0x80 then
+ return (0x100*a+b-0x10000)+(0x100*c+d)/0x10000
else
- return n+(0x100*c+d)/0xFFFF
+ return (0x100*a+b )+(0x100*c+d)/0x10000
end
end
-function streams.read2dot14(f)
+function streams.readfixed2(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
+ if a>=0x80 then
+ return (a-0x100)+b/0x100
+ else
+ return (a )+b/0x100
+ end
+end
+if extract then
+ local extract=bit32.extract
+ local band=bit32.band
+ function streams.read2dot14(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local a,b=byte(f[1],i,j)
+ if a>=0x80 then
+ local n=-(0x100*a+b)
+ return-(extract(n,14,2)+(band(n,0x3FFF)/16384.0))
+ else
+ local n=0x100*a+b
+ return (extract(n,14,2)+(band(n,0x3FFF)/16384.0))
+ end
end
end
function streams.skipshort(f,n)
@@ -6901,6 +7540,92 @@ end
function streams.skiplong(f,n)
f[2]=f[2]+4*(n or 1)
end
+if sio and sio.readcardinal2 then
+ local readcardinal1=sio.readcardinal1
+ local readcardinal2=sio.readcardinal2
+ local readcardinal3=sio.readcardinal3
+ local readcardinal4=sio.readcardinal4
+ local readinteger1=sio.readinteger1
+ local readinteger2=sio.readinteger2
+ local readinteger3=sio.readinteger3
+ local readinteger4=sio.readinteger4
+ local readfixed2=sio.readfixed2
+ local readfixed4=sio.readfixed4
+ local read2dot14=sio.read2dot14
+ local readbytes=sio.readbytes
+ local readbytetable=sio.readbytetable
+ function streams.readcardinal1(f)
+ local i=f[2]
+ f[2]=i+1
+ return readcardinal1(f[1],i)
+ end
+ function streams.readcardinal2(f)
+ local i=f[2]
+ f[2]=i+2
+ return readcardinal2(f[1],i)
+ end
+ function streams.readcardinal3(f)
+ local i=f[2]
+ f[2]=i+3
+ return readcardinal3(f[1],i)
+ end
+ function streams.readcardinal4(f)
+ local i=f[2]
+ f[2]=i+4
+ return readcardinal4(f[1],i)
+ end
+ function streams.readinteger1(f)
+ local i=f[2]
+ f[2]=i+1
+ return readinteger1(f[1],i)
+ end
+ function streams.readinteger2(f)
+ local i=f[2]
+ f[2]=i+2
+ return readinteger2(f[1],i)
+ end
+ function streams.readinteger3(f)
+ local i=f[2]
+ f[2]=i+3
+ return readinteger3(f[1],i)
+ end
+ function streams.readinteger4(f)
+ local i=f[2]
+ f[2]=i+4
+ return readinteger4(f[1],i)
+ end
+ function streams.read2dot4(f)
+ local i=f[2]
+ f[2]=i+2
+ return read2dot4(f[1],i)
+ end
+ function streams.readbytes(f,n)
+ local i=f[2]
+ local s=f[3]
+ local p=i+n
+ if p>s then
+ f[2]=s+1
+ else
+ f[2]=p
+ end
+ return readbytes(f[1],i,n)
+ end
+ function streams.readbytetable(f,n)
+ local i=f[2]
+ local s=f[3]
+ local p=i+n
+ if p>s then
+ f[2]=s+1
+ else
+ f[2]=p
+ end
+ return readbytetable(f[1],i,n)
+ end
+ streams.readbyte=streams.readcardinal1
+ streams.readsignedbyte=streams.readinteger1
+ streams.readcardinal=streams.readcardinal1
+ streams.readinteger=streams.readinteger1
+end
end -- of closure
@@ -6909,7 +7634,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-sto"] = package.loaded["util-sto"] or true
--- original size: 4100, stripped down to: 2852
+-- original size: 3926, stripped down to: 2742
if not modules then modules={} end modules ['util-sto']={
version=1.001,
@@ -7049,7 +7774,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-prs"] = package.loaded["util-prs"] or true
--- original size: 23411, stripped down to: 16177
+-- original size: 22883, stripped down to: 16045
if not modules then modules={} end modules ['util-prs']={
version=1.001,
@@ -7211,6 +7936,21 @@ function parsers.settings_to_array(str,strict)
return { str }
end
end
+function parsers.settings_to_numbers(str)
+ if not str or str=="" then
+ return {}
+ end
+ if type(str)=="table" then
+ elseif find(str,",",1,true) then
+ str=lpegmatch(pattern,str)
+ else
+ return { tonumber(str) }
+ end
+ for i=1,#str do
+ str[i]=tonumber(str[i])
+ end
+ return str
+end
local value=P(lbrace*C((nobrace+nestedbraces)^0)*rbrace)+C((nestedbraces+nestedbrackets+nestedparents+(1-comma))^0)
local pattern=spaces*Ct(value*(separator*value)^0)
function parsers.settings_to_array_obey_fences(str)
@@ -7587,7 +8327,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-fmt"] = package.loaded["util-fmt"] or true
--- original size: 2350, stripped down to: 1847
+-- original size: 2274, stripped down to: 1781
if not modules then modules={} end modules ['util-fmt']={
version=1.001,
@@ -7668,7 +8408,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-set"] = package.loaded["trac-set"] or true
--- original size: 12862, stripped down to: 9104
+-- original size: 12454, stripped down to: 8840
if not modules then modules={} end modules ['trac-set']={
version=1.001,
@@ -7854,7 +8594,6 @@ function setters.list(t)
return user,system
end
function setters.show(t)
- local category=t.name
local list=setters.list(t)
t.report()
for k=1,#list do
@@ -7981,7 +8720,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-log"] = package.loaded["trac-log"] or true
--- original size: 30767, stripped down to: 21355
+-- original size: 30007, stripped down to: 20818
if not modules then modules={} end modules ['trac-log']={
version=1.001,
@@ -8027,6 +8766,14 @@ if tex and (tex.jobname or tex.formatname) then
if texio.setescape then
texio.setescape(0)
end
+ if arg then
+ for k,v in next,arg do
+ if v=="--ansi" or v=="--c:ansi" then
+ variant="ansi"
+ break
+ end
+ end
+ end
local function useluawrites()
local texio_write_nl=texio.write_nl
local texio_write=texio.write
@@ -8612,7 +9359,6 @@ function logs.stop_page_number()
end
logs.flush()
end
-local report_files=logs.reporter("files")
local nesting=0
local verbose=false
local hasscheme=url.hasscheme
@@ -8774,7 +9520,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-inf"] = package.loaded["trac-inf"] or true
--- original size: 6917, stripped down to: 5484
+-- original size: 8036, stripped down to: 5567
if not modules then modules={} end modules ['trac-inf']={
version=1.001,
@@ -8806,11 +9552,13 @@ end
local function resettiming(instance)
timers[instance or "notimer"]={ timing=0,loadtime=0 }
end
+local ticks=clock
+local seconds=function(n) return n or 0 end
local function starttiming(instance)
local timer=timers[instance or "notimer"]
local it=timer.timing or 0
if it==0 then
- timer.starttime=clock()
+ timer.starttime=ticks()
if not timer.loadtime then
timer.loadtime=0
end
@@ -8824,12 +9572,13 @@ local function stoptiming(instance)
timer.timing=it-1
else
local starttime=timer.starttime
- if starttime then
- local stoptime=clock()
+ if starttime and starttime>0 then
+ local stoptime=ticks()
local loadtime=stoptime-starttime
timer.stoptime=stoptime
timer.loadtime=timer.loadtime+loadtime
timer.timing=0
+ timer.starttime=0
return loadtime
end
end
@@ -8840,7 +9589,7 @@ local function elapsed(instance)
return instance or 0
else
local timer=timers[instance or "notimer"]
- return timer and timer.loadtime or 0
+ return timer and seconds(timer.loadtime) or 0
end
end
local function elapsedtime(instance)
@@ -8888,10 +9637,13 @@ function statistics.show()
local total,indirect=status.callbacks or 0,status.indirect_callbacks or 0
return format("%s direct, %s indirect, %s total",total-indirect,indirect,total)
end)
- if jit then
- local jitstatus={ jit.status() }
- if jitstatus[1] then
- register("luajit options",concat(jitstatus," ",2))
+ if TEXENGINE=="luajittex" and JITSUPPORTED then
+ local jitstatus=jit.status
+ if jitstatus then
+ local jitstatus={ jitstatus() }
+ if jitstatus[1] then
+ register("luajit options",concat(jitstatus," ",2))
+ end
end
end
register("lua properties",function()
@@ -8955,7 +9707,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-pro"] = package.loaded["trac-pro"] or true
--- original size: 6039, stripped down to: 3616
+-- original size: 5829, stripped down to: 3501
if not modules then modules={} end modules ['trac-pro']={
version=1.001,
@@ -9102,7 +9854,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-lua"] = package.loaded["util-lua"] or true
--- original size: 5142, stripped down to: 3611
+-- original size: 5396, stripped down to: 3708
if not modules then modules={} end modules ['util-lua']={
version=1.001,
@@ -9224,6 +9976,17 @@ function luautilities.loadstripped(...)
return load(dump(l,true))
end
end
+local finalizers={}
+setmetatable(finalizers,{
+ __gc=function(t)
+ for i=1,#t do
+ pcall(t[i])
+ end
+ end
+} )
+function luautilities.registerfinalizer(f)
+ finalizers[#finalizers+1]=f
+end
end -- of closure
@@ -9232,7 +9995,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-deb"] = package.loaded["util-deb"] or true
--- original size: 4030, stripped down to: 2718
+-- original size: 8911, stripped down to: 6504
if not modules then modules={} end modules ['util-deb']={
version=1.001,
@@ -9242,75 +10005,230 @@ if not modules then modules={} end modules ['util-deb']={
license="see context related readme files"
}
local debug=require "debug"
-local getinfo=debug.getinfo
-local type,next,tostring=type,next,tostring
-local format,find=string.format,string.find
-local is_boolean=string.is_boolean
+local getinfo,sethook=debug.getinfo,debug.sethook
+local type,next,tostring,tonumber=type,next,tostring,tonumber
+local format,find,sub,gsub=string.format,string.find,string.sub,string.gsub
+local insert,remove,sort=table.insert,table.remove,table.sort
+local setmetatableindex=table.setmetatableindex
utilities=utilities or {}
local debugger=utilities.debugger or {}
utilities.debugger=debugger
-local counters={}
-local names={}
local report=logs.reporter("debugger")
-local function hook()
- local f=getinfo(2)
- if f then
- local n="unknown"
- if f.what=="C" then
- n=f.name or '<anonymous>'
- if not names[n] then
- names[n]=format("%42s",n)
+local ticks=os.gettimeofday or os.clock
+local seconds=function(n) return n or 0 end
+local overhead=0
+local dummycalls=10*1000
+local nesting=0
+local names={}
+local initialize=false
+if not (FFISUPPORTED and ffi) then
+elseif os.type=="windows" then
+ initialize=function()
+ local kernel=ffilib("kernel32","system")
+ if kernel then
+ local tonumber=ffi.number or tonumber
+ ffi.cdef[[
+ int QueryPerformanceFrequency(int64_t *lpFrequency);
+ int QueryPerformanceCounter(int64_t *lpPerformanceCount);
+ ]]
+ local target=ffi.new("__int64[1]")
+ ticks=function()
+ if kernel.QueryPerformanceCounter(target)==1 then
+ return tonumber(target[0])
+ else
+ return 0
+ end
end
- else
- n=f.name or f.namewhat or f.what
- if not n or n=="" then
- n="?"
+ local target=ffi.new("__int64[1]")
+ seconds=function(ticks)
+ if kernel.QueryPerformanceFrequency(target)==1 then
+ return ticks/tonumber(target[0])
+ else
+ return 0
+ end
+ end
+ end
+ initialize=false
+ end
+elseif os.type=="unix" then
+ initialize=function()
+ local C=ffi.C
+ local tonumber=ffi.number or tonumber
+ ffi.cdef [[
+ /* what a mess */
+ typedef int clk_id_t;
+ typedef enum { CLOCK_REALTIME, CLOCK_MONOTONIC, CLOCK_PROCESS_CPUTIME_ID } clk_id;
+ typedef struct timespec { long sec; long nsec; } ctx_timespec;
+ int clock_gettime(clk_id_t timerid, struct timespec *t);
+ ]]
+ local target=ffi.new("ctx_timespec[?]",1)
+ local clock=C.CLOCK_PROCESS_CPUTIME_ID
+ ticks=function ()
+ C.clock_gettime(clock,target)
+ return tonumber(target[0].sec*1000000000+target[0].nsec)
+ end
+ seconds=function(ticks)
+ return ticks/1000000000
+ end
+ initialize=false
+ end
+end
+setmetatableindex(names,function(t,name)
+ local v=setmetatableindex(function(t,source)
+ local v=setmetatableindex(function(t,line)
+ local v={ total=0,count=0 }
+ t[line]=v
+ return v
+ end)
+ t[source]=v
+ return v
+ end)
+ t[name]=v
+ return v
+end)
+local function hook(where)
+ local f=getinfo(2,"nSl")
+ if f then
+ local source=f.short_src
+ if not source then
+ return
+ end
+ local line=f.linedefined or 0
+ local name=f.name
+ if not name then
+ local what=f.what
+ if what=="C" then
+ name="<anonymous>"
+ else
+ name=f.namewhat or what or "<unknown>"
end
- if not names[n] then
- names[n]=format("%42s : % 5i : %s",n,f.linedefined or 0,f.short_src or "unknown source")
+ end
+ local data=names[name][source][line]
+ if where=="call" then
+ data.count=data.count+1
+ insert(data,ticks())
+ elseif where=="return" then
+ local t=remove(data)
+ if t then
+ data.total=data.total+ticks()-t
end
end
- counters[n]=(counters[n] or 0)+1
end
end
-function debugger.showstats(printer,threshold)
- printer=printer or report
- threshold=threshold or 0
- local total,grandtotal,functions=0,0,0
+function debugger.showstats(printer,threshold)
+ local printer=printer or report
+ local calls=0
+ local functions=0
local dataset={}
- for name,count in next,counters do
- dataset[#dataset+1]={ name,count }
+ local length=0
+ local wholetime=0
+ local threshold=threshold or 0
+ for name,sources in next,names do
+ for source,lines in next,sources do
+ for line,data in next,lines do
+ local count=data.count
+ if count>threshold then
+ if #name>length then
+ length=#name
+ end
+ local total=data.total
+ local real=total
+ if real>0 then
+ real=total-(count*overhead/dummycalls)
+ if real<0 then
+ real=0
+ end
+ wholetime=wholetime+real
+ end
+ if line<0 then
+ line=0
+ end
+ dataset[#dataset+1]={ real,total,count,name,source,line }
+ end
+ end
+ end
end
- table.sort(dataset,function(a,b) return a[2]==b[2] and b[1]>a[1] or a[2]>b[2] end)
+ sort(dataset,function(a,b)
+ if a[1]==b[1] then
+ if a[2]==b[2] then
+ if a[3]==b[3] then
+ if a[4]==b[4] then
+ if a[5]==b[5] then
+ return a[6]<b[6]
+ else
+ return a[5]<b[5]
+ end
+ else
+ return a[4]<b[4]
+ end
+ else
+ return b[3]<a[3]
+ end
+ else
+ return b[2]<a[2]
+ end
+ else
+ return b[1]<a[1]
+ end
+ end)
+ if length>50 then
+ length=50
+ end
+ local fmt=string.formatters["%4.9k %4.9k %3.3k %8i %-"..length.."s %4i %s"]
for i=1,#dataset do
- local d=dataset[i]
- local name=d[1]
- local count=d[2]
- if count>threshold and not find(name,"for generator") then
- printer(format("%8i %s\n",count,names[name]))
- total=total+count
- end
- grandtotal=grandtotal+count
+ local data=dataset[i]
+ local real=data[1]
+ local total=data[2]
+ local count=data[3]
+ local name=data[4]
+ local source=data[5]
+ local line=data[6]
+ local percent=real/wholetime
+ calls=calls+count
functions=functions+1
+ name=gsub(name,"%s+"," ")
+ if #name>length then
+ name=sub(name,1,length)
+ end
+ printer(fmt(seconds(total),seconds(real),percent,count,name,line,source))
end
- printer("\n")
- printer(format("functions : % 10i\n",functions))
- printer(format("total : % 10i\n",total))
- printer(format("grand total: % 10i\n",grandtotal))
- printer(format("threshold : % 10i\n",threshold))
+ printer("")
+ printer(format("functions : %i",functions))
+ printer(format("calls : %i",calls))
+ printer(format("overhead : %f",seconds(overhead/1000)))
end
function debugger.savestats(filename,threshold)
local f=io.open(filename,'w')
if f then
- debugger.showstats(function(str) f:write(str) end,threshold)
+ debugger.showstats(function(str) f:write(str,"\n") end,threshold)
f:close()
end
end
function debugger.enable()
- debug.sethook(hook,"c")
+ if nesting==0 then
+ running=true
+ if initialize then
+ initialize()
+ end
+ sethook(hook,"cr")
+ local function dummy() end
+ local t=ticks()
+ for i=1,dummycalls do
+ dummy()
+ end
+ overhead=ticks()-t
+ end
+ if nesting>0 then
+ nesting=nesting+1
+ end
end
function debugger.disable()
- debug.sethook()
+ if nesting>0 then
+ nesting=nesting-1
+ end
+ if nesting==0 then
+ sethook()
+ end
end
local function showtraceback(rep)
local level=2
@@ -9334,9 +10252,661 @@ end -- of closure
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
+
+if not modules then modules={} end modules ['util-tpl']={
+ 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"
+}
+utilities.templates=utilities.templates or {}
+local templates=utilities.templates
+local trace_template=false trackers.register("templates.trace",function(v) trace_template=v end)
+local report_template=logs.reporter("template")
+local tostring=tostring
+local format,sub,byte=string.format,string.sub,string.byte
+local P,C,R,Cs,Cc,Carg,lpegmatch,lpegpatterns=lpeg.P,lpeg.C,lpeg.R,lpeg.Cs,lpeg.Cc,lpeg.Carg,lpeg.match,lpeg.patterns
+local replacer
+local function replacekey(k,t,how,recursive)
+ local v=t[k]
+ if not v then
+ if trace_template then
+ report_template("unknown key %a",k)
+ end
+ return ""
+ else
+ v=tostring(v)
+ if trace_template then
+ report_template("setting key %a to value %a",k,v)
+ end
+ if recursive then
+ return lpegmatch(replacer,v,1,t,how,recursive)
+ else
+ return v
+ end
+ end
+end
+local sqlescape=lpeg.replacer {
+ { "'","''" },
+ { "\\","\\\\" },
+ { "\r\n","\\n" },
+ { "\r","\\n" },
+}
+local sqlquoted=Cs(Cc("'")*sqlescape*Cc("'"))
+lpegpatterns.sqlescape=sqlescape
+lpegpatterns.sqlquoted=sqlquoted
+local luaescape=lpegpatterns.luaescape
+local escapers={
+ lua=function(s)
+ return lpegmatch(luaescape,s)
+ end,
+ sql=function(s)
+ return lpegmatch(sqlescape,s)
+ end,
+}
+local quotedescapers={
+ lua=function(s)
+ return format("%q",s)
+ end,
+ sql=function(s)
+ return lpegmatch(sqlquoted,s)
+ end,
+}
+local luaescaper=escapers.lua
+local quotedluaescaper=quotedescapers.lua
+local function replacekeyunquoted(s,t,how,recurse)
+ if how==false then
+ return replacekey(s,t,how,recurse)
+ else
+ local escaper=how and escapers[how] or luaescaper
+ return escaper(replacekey(s,t,how,recurse))
+ end
+end
+local function replacekeyquoted(s,t,how,recurse)
+ if how==false then
+ return replacekey(s,t,how,recurse)
+ else
+ local escaper=how and quotedescapers[how] or quotedluaescaper
+ return escaper(replacekey(s,t,how,recurse))
+ end
+end
+local function replaceoptional(l,m,r,t,how,recurse)
+ local v=t[l]
+ return v and v~="" and lpegmatch(replacer,r,1,t,how or "lua",recurse or false) or ""
+end
+local single=P("%")
+local double=P("%%")
+local lquoted=P("%[")
+local rquoted=P("]%")
+local lquotedq=P("%(")
+local rquotedq=P(")%")
+local escape=double/'%%'
+local nosingle=single/''
+local nodouble=double/''
+local nolquoted=lquoted/''
+local norquoted=rquoted/''
+local nolquotedq=lquotedq/''
+local norquotedq=rquotedq/''
+local noloptional=P("%?")/''
+local noroptional=P("?%")/''
+local nomoptional=P(":")/''
+local args=Carg(1)*Carg(2)*Carg(3)
+local key=nosingle*((C((1-nosingle )^1)*args)/replacekey )*nosingle
+local quoted=nolquotedq*((C((1-norquotedq )^1)*args)/replacekeyquoted )*norquotedq
+local unquoted=nolquoted*((C((1-norquoted )^1)*args)/replacekeyunquoted)*norquoted
+local optional=noloptional*((C((1-nomoptional)^1)*nomoptional*C((1-noroptional)^1)*args)/replaceoptional)*noroptional
+local any=P(1)
+ replacer=Cs((unquoted+quoted+escape+optional+key+any)^0)
+local function replace(str,mapping,how,recurse)
+ if mapping and str then
+ return lpegmatch(replacer,str,1,mapping,how or "lua",recurse or false) or str
+ else
+ return str
+ end
+end
+templates.replace=replace
+function templates.replacer(str,how,recurse)
+ return function(mapping)
+ return lpegmatch(replacer,str,1,mapping,how or "lua",recurse or false) or str
+ end
+end
+function templates.load(filename,mapping,how,recurse)
+ local data=io.loaddata(filename) or ""
+ if mapping and next(mapping) then
+ return replace(data,mapping,how,recurse)
+ else
+ return data
+ end
+end
+function templates.resolve(t,mapping,how,recurse)
+ if not mapping then
+ mapping=t
+ end
+ for k,v in next,t do
+ t[k]=replace(v,mapping,how,recurse)
+ end
+ return t
+end
+
+
+end -- of closure
+
+do -- create closure to overcome 200 locals limit
+
+package.loaded["util-sbx"] = package.loaded["util-sbx"] or true
+
+-- original size: 20309, stripped down to: 13848
+
+if not modules then modules={} end modules ['util-sbx']={
+ 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"
+}
+if not sandbox then require("l-sandbox") end
+local next,type=next,type
+local replace=utilities.templates.replace
+local collapsepath=file.collapsepath
+local expandname=dir.expandname
+local sortedhash=table.sortedhash
+local lpegmatch=lpeg.match
+local platform=os.type
+local P,S,C=lpeg.P,lpeg.S,lpeg.C
+local gsub=string.gsub
+local lower=string.lower
+local find=string.find
+local concat=string.concat
+local unquoted=string.unquoted
+local optionalquoted=string.optionalquoted
+local basename=file.basename
+local sandbox=sandbox
+local validroots={}
+local validrunners={}
+local validbinaries=true
+local validlibraries=true
+local validators={}
+local finalized=nil
+local trace=false
+local p_validroot=nil
+local p_split=lpeg.firstofsplit(" ")
+local report=logs.reporter("sandbox")
+trackers.register("sandbox",function(v) trace=v end)
+sandbox.setreporter(report)
+sandbox.finalizer {
+ category="files",
+ action=function()
+ finalized=true
+ end
+}
+local function registerroot(root,what)
+ if finalized then
+ report("roots are already finalized")
+ else
+ if type(root)=="table" then
+ root,what=root[1],root[2]
+ end
+ if type(root)=="string" and root~="" then
+ root=collapsepath(expandname(root))
+ if what=="r" or what=="ro" or what=="readable" then
+ what="read"
+ elseif what=="w" or what=="wo" or what=="writable" then
+ what="write"
+ end
+ validroots[root]=what=="write" or false
+ end
+ end
+end
+sandbox.finalizer {
+ category="files",
+ action=function()
+ if p_validroot then
+ report("roots are already initialized")
+ else
+ sandbox.registerroot(".","write")
+ for name in sortedhash(validroots) do
+ if p_validroot then
+ p_validroot=P(name)+p_validroot
+ else
+ p_validroot=P(name)
+ end
+ end
+ p_validroot=p_validroot/validroots
+ end
+ end
+}
+local function registerbinary(name)
+ if finalized then
+ report("binaries are already finalized")
+ elseif type(name)=="string" and name~="" then
+ if not validbinaries then
+ return
+ end
+ if validbinaries==true then
+ validbinaries={ [name]=true }
+ else
+ validbinaries[name]=true
+ end
+ elseif name==true then
+ validbinaries={}
+ end
+end
+local function registerlibrary(name)
+ if finalized then
+ report("libraries are already finalized")
+ elseif type(name)=="string" and name~="" then
+ if not validlibraries then
+ return
+ end
+ if validlibraries==true then
+ validlibraries={ [name]=true }
+ else
+ validlibraries[name]=true
+ end
+ elseif name==true then
+ validlibraries={}
+ end
+end
+local p_write=S("wa") p_write=(1-p_write)^0*p_write
+local p_path=S("\\/~$%:") p_path=(1-p_path )^0*p_path
+local function normalized(name)
+ if platform=="windows" then
+ name=gsub(name,"/","\\")
+ end
+ return name
+end
+function sandbox.possiblepath(name)
+ return lpegmatch(p_path,name) and true or false
+end
+local filenamelogger=false
+function sandbox.setfilenamelogger(l)
+ filenamelogger=type(l)=="function" and l or false
+end
+local function validfilename(name,what)
+ if p_validroot and type(name)=="string" and lpegmatch(p_path,name) then
+ local asked=collapsepath(expandname(name))
+ local okay=lpegmatch(p_validroot,asked)
+ if okay==true then
+ if filenamelogger then
+ filenamelogger(name,"w",asked,true)
+ end
+ return name
+ elseif okay==false then
+ if not what then
+ if filenamelogger then
+ filenamelogger(name,"r",asked,true)
+ end
+ return name
+ elseif lpegmatch(p_write,what) then
+ if filenamelogger then
+ filenamelogger(name,"w",asked,false)
+ end
+ return
+ else
+ if filenamelogger then
+ filenamelogger(name,"r",asked,true)
+ end
+ return name
+ end
+ elseif filenamelogger then
+ filenamelogger(name,"*",name,false)
+ end
+ else
+ return name
+ end
+end
+local function readable(name,finalized)
+ return validfilename(name,"r")
+end
+local function normalizedreadable(name,finalized)
+ local valid=validfilename(name,"r")
+ if valid then
+ return normalized(valid)
+ end
+end
+local function writeable(name,finalized)
+ return validfilename(name,"w")
+end
+local function normalizedwriteable(name,finalized)
+ local valid=validfilename(name,"w")
+ if valid then
+ return normalized(valid)
+ end
+end
+validators.readable=readable
+validators.writeable=normalizedwriteable
+validators.normalizedreadable=normalizedreadable
+validators.normalizedwriteable=writeable
+validators.filename=readable
+table.setmetatableindex(validators,function(t,k)
+ if k then
+ t[k]=readable
+ end
+ return readable
+end)
+function validators.string(s,finalized)
+ if finalized and suspicious(s) then
+ return ""
+ else
+ return s
+ end
+end
+function validators.cache(s)
+ if finalized then
+ return basename(s)
+ else
+ return s
+ end
+end
+function validators.url(s)
+ if finalized and find("^file:") then
+ return ""
+ else
+ return s
+ end
+end
+local function filehandlerone(action,one,...)
+ local checkedone=validfilename(one)
+ if checkedone then
+ return action(one,...)
+ else
+ end
+end
+local function filehandlertwo(action,one,two,...)
+ local checkedone=validfilename(one)
+ if checkedone then
+ local checkedtwo=validfilename(two)
+ if checkedtwo then
+ return action(one,two,...)
+ else
+ end
+ else
+ end
+end
+local function iohandler(action,one,...)
+ if type(one)=="string" then
+ local checkedone=validfilename(one)
+ if checkedone then
+ return action(one,...)
+ end
+ elseif one then
+ return action(one,...)
+ else
+ return action()
+ end
+end
+local osexecute=sandbox.original(os.execute)
+local iopopen=sandbox.original(io.popen)
+local reported={}
+local function validcommand(name,program,template,checkers,defaults,variables,reporter,strict)
+ if validbinaries~=false and (validbinaries==true or validbinaries[program]) then
+ if variables then
+ for variable,value in next,variables do
+ local checker=validators[checkers[variable]]
+ if checker then
+ value=checker(unquoted(value),strict)
+ if value then
+ variables[variable]=optionalquoted(value)
+ else
+ report("variable %a with value %a fails the check",variable,value)
+ return
+ end
+ else
+ report("variable %a has no checker",variable)
+ return
+ end
+ end
+ for variable,default in next,defaults do
+ local value=variables[variable]
+ if not value or value=="" then
+ local checker=validators[checkers[variable]]
+ if checker then
+ default=checker(unquoted(default),strict)
+ if default then
+ variables[variable]=optionalquoted(default)
+ else
+ report("variable %a with default %a fails the check",variable,default)
+ return
+ end
+ end
+ end
+ end
+ end
+ local command=program.." "..replace(template,variables)
+ if reporter then
+ reporter("executing runner %a: %s",name,command)
+ elseif trace then
+ report("executing runner %a: %s",name,command)
+ end
+ return command
+ elseif not reported[name] then
+ report("executing program %a of runner %a is not permitted",program,name)
+ reported[name]=true
+ end
+end
+local runners={
+ resultof=function(...)
+ local command=validcommand(...)
+ if command then
+ if trace then
+ report("resultof: %s",command)
+ end
+ local handle=iopopen(command,"r")
+ if handle then
+ local result=handle:read("*all") or ""
+ handle:close()
+ return result
+ end
+ end
+ end,
+ execute=function(...)
+ local command=validcommand(...)
+ if command then
+ if trace then
+ report("execute: %s",command)
+ end
+ return osexecute(command)
+ end
+ end,
+ pipeto=function(...)
+ local command=validcommand(...)
+ if command then
+ if trace then
+ report("pipeto: %s",command)
+ end
+ return iopopen(command,"w")
+ end
+ end,
+}
+function sandbox.registerrunner(specification)
+ if type(specification)=="string" then
+ local wrapped=validrunners[specification]
+ inspect(table.sortedkeys(validrunners))
+ if wrapped then
+ return wrapped
+ else
+ report("unknown predefined runner %a",specification)
+ return
+ end
+ end
+ if type(specification)~="table" then
+ report("specification should be a table (or string)")
+ return
+ end
+ local name=specification.name
+ if type(name)~="string" then
+ report("invalid name, string expected",name)
+ return
+ end
+ if validrunners[name] then
+ report("invalid name, runner %a already defined")
+ return
+ end
+ local program=specification.program
+ if type(program)=="string" then
+ elseif type(program)=="table" then
+ program=program[platform] or program.default or program.unix
+ end
+ if type(program)~="string" or program=="" then
+ report("invalid runner %a specified for platform %a",name,platform)
+ return
+ end
+ local template=specification.template
+ if not template then
+ report("missing template for runner %a",name)
+ return
+ end
+ local method=specification.method or "execute"
+ local checkers=specification.checkers or {}
+ local defaults=specification.defaults or {}
+ local runner=runners[method]
+ if runner then
+ local finalized=finalized
+ local wrapped=function(variables)
+ return runner(name,program,template,checkers,defaults,variables,specification.reporter,finalized)
+ end
+ validrunners[name]=wrapped
+ return wrapped
+ else
+ validrunners[name]=nil
+ report("invalid method for runner %a",name)
+ end
+end
+function sandbox.getrunner(name)
+ return name and validrunners[name]
+end
+local function suspicious(str)
+ return (find(str,"[/\\]") or find(command,"%.%.")) and true or false
+end
+local function binaryrunner(action,command,...)
+ if validbinaries==false then
+ report("no binaries permitted, ignoring command: %s",command)
+ return
+ end
+ if type(command)~="string" then
+ report("command should be a string")
+ return
+ end
+ local program=lpegmatch(p_split,command)
+ if not program or program=="" then
+ report("unable to filter binary from command: %s",command)
+ return
+ end
+ if validbinaries==true then
+ elseif not validbinaries[program] then
+ report("binary not permitted, ignoring command: %s",command)
+ return
+ elseif suspicious(command) then
+ report("/ \\ or .. found, ignoring command (use sandbox.registerrunner): %s",command)
+ return
+ end
+ return action(command,...)
+end
+local function dummyrunner(action,command,...)
+ if type(command)=="table" then
+ command=concat(command," ",command[0] and 0 or 1)
+ end
+ report("ignoring command: %s",command)
+end
+sandbox.filehandlerone=filehandlerone
+sandbox.filehandlertwo=filehandlertwo
+sandbox.iohandler=iohandler
+function sandbox.disablerunners()
+ validbinaries=false
+end
+function sandbox.disablelibraries()
+ validlibraries=false
+end
+if FFISUPPORTED and ffi then
+ function sandbox.disablelibraries()
+ validlibraries=false
+ for k,v in next,ffi do
+ if k~="gc" then
+ ffi[k]=nil
+ end
+ end
+ end
+ local load=ffi.load
+ if load then
+ local reported={}
+ function ffi.load(name,...)
+ if validlibraries==false then
+ elseif validlibraries==true then
+ return load(name,...)
+ elseif validlibraries[name] then
+ return load(name,...)
+ else
+ end
+ if not reported[name] then
+ report("using library %a is not permitted",name)
+ reported[name]=true
+ end
+ return nil
+ end
+ end
+end
+local overload=sandbox.overload
+local register=sandbox.register
+ overload(loadfile,filehandlerone,"loadfile")
+if io then
+ overload(io.open,filehandlerone,"io.open")
+ overload(io.popen,binaryrunner,"io.popen")
+ overload(io.input,iohandler,"io.input")
+ overload(io.output,iohandler,"io.output")
+ overload(io.lines,filehandlerone,"io.lines")
+end
+if os then
+ overload(os.execute,binaryrunner,"os.execute")
+ overload(os.spawn,dummyrunner,"os.spawn")
+ overload(os.exec,dummyrunner,"os.exec")
+ overload(os.resultof,binaryrunner,"os.resultof")
+ overload(os.pipeto,binaryrunner,"os.pipeto")
+ overload(os.rename,filehandlertwo,"os.rename")
+ overload(os.remove,filehandlerone,"os.remove")
+end
+if lfs then
+ overload(lfs.chdir,filehandlerone,"lfs.chdir")
+ overload(lfs.mkdir,filehandlerone,"lfs.mkdir")
+ overload(lfs.rmdir,filehandlerone,"lfs.rmdir")
+ overload(lfs.isfile,filehandlerone,"lfs.isfile")
+ overload(lfs.isdir,filehandlerone,"lfs.isdir")
+ overload(lfs.attributes,filehandlerone,"lfs.attributes")
+ overload(lfs.dir,filehandlerone,"lfs.dir")
+ overload(lfs.lock_dir,filehandlerone,"lfs.lock_dir")
+ overload(lfs.touch,filehandlerone,"lfs.touch")
+ overload(lfs.link,filehandlertwo,"lfs.link")
+ overload(lfs.setmode,filehandlerone,"lfs.setmode")
+ overload(lfs.readlink,filehandlerone,"lfs.readlink")
+ overload(lfs.shortname,filehandlerone,"lfs.shortname")
+ overload(lfs.symlinkattributes,filehandlerone,"lfs.symlinkattributes")
+end
+if zip then
+ zip.open=register(zip.open,filehandlerone,"zip.open")
+end
+if fontloader then
+ fontloader.open=register(fontloader.open,filehandlerone,"fontloader.open")
+ fontloader.info=register(fontloader.info,filehandlerone,"fontloader.info")
+end
+if epdf then
+ epdf.open=register(epdf.open,filehandlerone,"epdf.open")
+end
+sandbox.registerroot=registerroot
+sandbox.registerbinary=registerbinary
+sandbox.registerlibrary=registerlibrary
+sandbox.validfilename=validfilename
+
+
+end -- of closure
+
+do -- create closure to overcome 200 locals limit
+
package.loaded["util-mrg"] = package.loaded["util-mrg"] or true
--- original size: 7985, stripped down to: 6153
+-- original size: 7757, stripped down to: 6015
if not modules then modules={} end modules ['util-mrg']={
version=1.001,
@@ -9511,154 +11081,9 @@ end -- of closure
do -- create closure to overcome 200 locals limit
-package.loaded["util-tpl"] = package.loaded["util-tpl"] or true
-
--- original size: 7313, stripped down to: 4076
-
-if not modules then modules={} end modules ['util-tpl']={
- 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"
-}
-utilities.templates=utilities.templates or {}
-local templates=utilities.templates
-local trace_template=false trackers.register("templates.trace",function(v) trace_template=v end)
-local report_template=logs.reporter("template")
-local tostring=tostring
-local format,sub,byte=string.format,string.sub,string.byte
-local P,C,R,Cs,Cc,Carg,lpegmatch,lpegpatterns=lpeg.P,lpeg.C,lpeg.R,lpeg.Cs,lpeg.Cc,lpeg.Carg,lpeg.match,lpeg.patterns
-local replacer
-local function replacekey(k,t,how,recursive)
- local v=t[k]
- if not v then
- if trace_template then
- report_template("unknown key %a",k)
- end
- return ""
- else
- v=tostring(v)
- if trace_template then
- report_template("setting key %a to value %a",k,v)
- end
- if recursive then
- return lpegmatch(replacer,v,1,t,how,recursive)
- else
- return v
- end
- end
-end
-local sqlescape=lpeg.replacer {
- { "'","''" },
- { "\\","\\\\" },
- { "\r\n","\\n" },
- { "\r","\\n" },
-}
-local sqlquoted=Cs(Cc("'")*sqlescape*Cc("'"))
-lpegpatterns.sqlescape=sqlescape
-lpegpatterns.sqlquoted=sqlquoted
-local luaescape=lpegpatterns.luaescape
-local escapers={
- lua=function(s)
- return lpegmatch(luaescape,s)
- end,
- sql=function(s)
- return lpegmatch(sqlescape,s)
- end,
-}
-local quotedescapers={
- lua=function(s)
- return format("%q",s)
- end,
- sql=function(s)
- return lpegmatch(sqlquoted,s)
- end,
-}
-local luaescaper=escapers.lua
-local quotedluaescaper=quotedescapers.lua
-local function replacekeyunquoted(s,t,how,recurse)
- if how==false then
- return replacekey(s,t,how,recurse)
- else
- local escaper=how and escapers[how] or luaescaper
- return escaper(replacekey(s,t,how,recurse))
- end
-end
-local function replacekeyquoted(s,t,how,recurse)
- if how==false then
- return replacekey(s,t,how,recurse)
- else
- local escaper=how and quotedescapers[how] or quotedluaescaper
- return escaper(replacekey(s,t,how,recurse))
- end
-end
-local function replaceoptional(l,m,r,t,how,recurse)
- local v=t[l]
- return v and v~="" and lpegmatch(replacer,r,1,t,how or "lua",recurse or false) or ""
-end
-local single=P("%")
-local double=P("%%")
-local lquoted=P("%[")
-local rquoted=P("]%")
-local lquotedq=P("%(")
-local rquotedq=P(")%")
-local escape=double/'%%'
-local nosingle=single/''
-local nodouble=double/''
-local nolquoted=lquoted/''
-local norquoted=rquoted/''
-local nolquotedq=lquotedq/''
-local norquotedq=rquotedq/''
-local noloptional=P("%?")/''
-local noroptional=P("?%")/''
-local nomoptional=P(":")/''
-local args=Carg(1)*Carg(2)*Carg(3)
-local key=nosingle*((C((1-nosingle )^1)*args)/replacekey )*nosingle
-local quoted=nolquotedq*((C((1-norquotedq )^1)*args)/replacekeyquoted )*norquotedq
-local unquoted=nolquoted*((C((1-norquoted )^1)*args)/replacekeyunquoted)*norquoted
-local optional=noloptional*((C((1-nomoptional)^1)*nomoptional*C((1-noroptional)^1)*args)/replaceoptional)*noroptional
-local any=P(1)
- replacer=Cs((unquoted+quoted+escape+optional+key+any)^0)
-local function replace(str,mapping,how,recurse)
- if mapping and str then
- return lpegmatch(replacer,str,1,mapping,how or "lua",recurse or false) or str
- else
- return str
- end
-end
-templates.replace=replace
-function templates.replacer(str,how,recurse)
- return function(mapping)
- return lpegmatch(replacer,str,1,mapping,how or "lua",recurse or false) or str
- end
-end
-function templates.load(filename,mapping,how,recurse)
- local data=io.loaddata(filename) or ""
- if mapping and next(mapping) then
- return replace(data,mapping,how,recurse)
- else
- return data
- end
-end
-function templates.resolve(t,mapping,how,recurse)
- if not mapping then
- mapping=t
- end
- for k,v in next,t do
- t[k]=replace(v,mapping,how,recurse)
- end
- return t
-end
-
-
-end -- of closure
-
-do -- create closure to overcome 200 locals limit
-
package.loaded["util-env"] = package.loaded["util-env"] or true
--- original size: 8284, stripped down to: 5176
+-- original size: 9246, stripped down to: 5038
if not modules then modules={} end modules ['util-env']={
version=1.001,
@@ -9845,7 +11270,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["luat-env"] = package.loaded["luat-env"] or true
--- original size: 6358, stripped down to: 4257
+-- original size: 6174, stripped down to: 4141
if not modules then modules={} end modules ['luat-env']={
version=1.001,
@@ -9998,7 +11423,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-tab"] = package.loaded["lxml-tab"] or true
--- original size: 56973, stripped down to: 35872
+-- original size: 57003, stripped down to: 35696
if not modules then modules={} end modules ['lxml-tab']={
version=1.001,
@@ -10013,7 +11438,7 @@ if lpeg.setmaxstack then lpeg.setmaxstack(1000) end
xml=xml or {}
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 type,next,setmetatable,getmetatable,tonumber,rawset,select=type,next,setmetatable,getmetatable,tonumber,rawset,select
local lower,find,match,gsub=string.lower,string.find,string.match,string.gsub
local sort=table.sort
local utfchar=utf.char
@@ -10140,6 +11565,7 @@ local function add_empty(spacing,namespace,tag)
tg=tag,
at=at,
dt={},
+ ni=nt,
__p__=top
}
dt[nt]=t
@@ -10161,6 +11587,7 @@ local function add_begin(spacing,namespace,tag)
tg=tag,
at=at,
dt={},
+ ni=nil,
__p__=stack[level]
}
setmetatable(top,mt)
@@ -10188,6 +11615,7 @@ local function add_end(spacing,namespace,tag)
dt=top.dt
nt=#dt+1
dt[nt]=toclose
+ toclose.ni=nt
if toclose.at.xmlns then
remove(xmlns)
end
@@ -10232,7 +11660,13 @@ local function add_special(what,spacing,text)
if strip and (what=="@cm@" or what=="@dt@") then
else
nt=nt+1
- dt[nt]={ special=true,ns="",tg=what,dt={ text } }
+ dt[nt]={
+ special=true,
+ ns="",
+ tg=what,
+ ni=nil,
+ dt={ text },
+ }
end
end
local function set_message(txt)
@@ -10285,7 +11719,6 @@ do
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={
@@ -10327,13 +11760,27 @@ do
[ [[}]] ]="&U+7D;",
[ [[~]] ]="&U+7E;",
}
+ local privates_x={
+ [ [["]] ]="&U+22;",
+ [ [[#]] ]="&U+23;",
+ [ [[$]] ]="&U+24;",
+ [ [[%]] ]="&U+25;",
+ [ [[']] ]="&U+27;",
+ [ [[\]] ]="&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")
+ local despecialized=utf.remapper(privates_x,"dynamic")
xml.unprivatized=unprivatized
xml.unspecialized=unspecialized
+ xml.despecialized=despecialized
xml.escaped=escaped
local function unescaped(s)
local p=privates_n[s]
@@ -10778,6 +12225,10 @@ local grammar_unparsed_text=P { "preamble",
local function _xmlconvert_(data,settings)
settings=settings or {}
preparexmlstate(settings)
+ local preprocessor=settings.preprocessor
+ if data and data~="" and type(preprocessor)=="function" then
+ data=preprocessor(data,settings) or data
+ end
if settings.parent_root then
mt=getmetatable(settings.parent_root)
else
@@ -10919,14 +12370,24 @@ function xml.toxml(data)
return data
end
end
-local function copy(old)
+local function copy(old,p)
if old then
local new={}
for k,v in next,old do
- if type(v)=="table" then
- new[k]=table.copy(v)
- else
+ local t=type(v)=="table"
+ if k=="at" then
+ local t={}
+ for k,v in next,v do
+ t[k]=v
+ end
+ new[k]=t
+ elseif k=="dt" then
+ v.__p__=nil
+ v=copy(v,new)
new[k]=v
+ v.__p__=p
+ else
+ new[k]=v
end
end
local mt=getmetatable(old)
@@ -11157,18 +12618,26 @@ local xmlfilehandler=newhandlers {
function xml.save(root,name)
serialize(root,xmlfilehandler,name)
end
-local result
+local result,r,threshold={},0,512
local xmlstringhandler=newhandlers {
name="string",
initialize=function()
- result={}
+ r=0
return result
end,
finalize=function()
- return concat(result)
+ local done=concat(result,"",1,r)
+ r=0
+ if r>threshold then
+ result={}
+ end
+ return done
end,
handle=function(...)
- result[#result+1]=concat {... }
+ for i=1,select("#",...) do
+ r=r+1
+ result[r]=select(i,...)
+ end
end,
}
local function xmltostring(root)
@@ -11320,7 +12789,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-lpt"] = package.loaded["lxml-lpt"] or true
--- original size: 53892, stripped down to: 32508
+-- original size: 53301, stripped down to: 32477
if not modules then modules={} end modules ['lxml-lpt']={
version=1.001,
@@ -11702,6 +13171,14 @@ local function apply_expression(list,expression,order)
end
return collected
end
+local function apply_selector(list,specification)
+ if xml.applyselector then
+ apply_selector=xml.applyselector
+ return apply_selector(list,specification)
+ else
+ return list
+ end
+end
local P,V,C,Cs,Cc,Ct,R,S,Cg,Cb=lpeg.P,lpeg.V,lpeg.C,lpeg.Cs,lpeg.Cc,lpeg.Ct,lpeg.R,lpeg.S,lpeg.Cg,lpeg.Cb
local spaces=S(" \n\r\t\f")^0
local lp_space=S(" \n\r\t\f")
@@ -11825,6 +13302,9 @@ end
local function register_nodes(nodetest,nodes)
return { kind="nodes",nodetest=nodetest,nodes=nodes }
end
+local function register_selector(specification)
+ return { kind="selector",specification=specification }
+end
local function register_expression(expression)
local converted=lpegmatch(converter,expression)
local runner=load(format(template_e,converted))
@@ -11865,34 +13345,36 @@ local pathparser=Ct { "patterns",
(V("special")*spaces*P(-1) )+(V("initial")*spaces*V("step")*spaces*(P("/")*spaces*V("step")*spaces)^0 )
),
protocol=Cg(V("letters"),"protocol")*P("://")+Cg(Cc(nil),"protocol"),
- step=((V("shortcuts")+P("/")+V("axis"))*spaces*V("nodes")^0+V("error"))*spaces*V("expressions")^0*spaces*V("finalizer")^0,
+ step=((V("shortcuts")+V("selector")+P("/")+V("axis"))*spaces*V("nodes")^0+V("error"))*spaces*V("expressions")^0*spaces*V("finalizer")^0,
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")+V("s_lastmatch"),
shortcuts=V("shortcuts_a")*(spaces*"/"*spaces*V("shortcuts_a"))^0,
s_descendant_or_self=(P("***/")+P("/"))*Cc(register_descendant_or_self),
s_descendant=P("**")*Cc(register_descendant),
- s_child=P("*")*no_nextcolon*Cc(register_child ),
- s_parent=P("..")*Cc(register_parent ),
- s_self=P("." )*Cc(register_self ),
- s_root=P("^^")*Cc(register_root ),
- s_ancestor=P("^")*Cc(register_ancestor ),
- descendant=P("descendant::")*Cc(register_descendant ),
- child=P("child::")*Cc(register_child ),
- parent=P("parent::")*Cc(register_parent ),
- self=P("self::")*Cc(register_self ),
- root=P('root::')*Cc(register_root ),
- ancestor=P('ancestor::')*Cc(register_ancestor ),
- descendant_or_self=P('descendant-or-self::')*Cc(register_descendant_or_self ),
- ancestor_or_self=P('ancestor-or-self::')*Cc(register_ancestor_or_self ),
- following=P('following::')*Cc(register_following ),
- following_sibling=P('following-sibling::')*Cc(register_following_sibling ),
- preceding=P('preceding::')*Cc(register_preceding ),
- preceding_sibling=P('preceding-sibling::')*Cc(register_preceding_sibling ),
- reverse_sibling=P('reverse-sibling::')*Cc(register_reverse_sibling ),
- last_match=P('last-match::')*Cc(register_last_match ),
+ s_child=P("*")*no_nextcolon*Cc(register_child),
+ s_parent=P("..")*Cc(register_parent),
+ s_self=P("." )*Cc(register_self),
+ s_root=P("^^")*Cc(register_root),
+ s_ancestor=P("^")*Cc(register_ancestor),
+ s_lastmatch=P("=")*Cc(register_last_match),
+ descendant=P("descendant::")*Cc(register_descendant),
+ child=P("child::")*Cc(register_child),
+ parent=P("parent::")*Cc(register_parent),
+ self=P("self::")*Cc(register_self),
+ root=P('root::')*Cc(register_root),
+ ancestor=P('ancestor::')*Cc(register_ancestor),
+ descendant_or_self=P('descendant-or-self::')*Cc(register_descendant_or_self),
+ ancestor_or_self=P('ancestor-or-self::')*Cc(register_ancestor_or_self),
+ following=P('following::')*Cc(register_following),
+ following_sibling=P('following-sibling::')*Cc(register_following_sibling),
+ preceding=P('preceding::')*Cc(register_preceding),
+ preceding_sibling=P('preceding-sibling::')*Cc(register_preceding_sibling),
+ reverse_sibling=P('reverse-sibling::')*Cc(register_reverse_sibling),
+ last_match=P('last-match::')*Cc(register_last_match),
+ selector=P("{")*C((1-P("}"))^1)*P("}")/register_selector,
nodes=(V("nodefunction")*spaces*P("(")*V("nodeset")*P(")")+V("nodetest")*V("nodeset"))/register_nodes,
expressions=expression/register_expression,
letters=R("az")^1,
@@ -12042,6 +13524,8 @@ do
collected=apply_nodes(collected,pi.nodetest,pi.nodes)
elseif kind=="expression" then
collected=apply_expression(collected,pi.evaluator,order)
+ elseif kind=="selector" then
+ collected=apply_selector(collected,pi.specification)
elseif kind=="finalizer" then
collected=pi.finalizer(collected)
p.matched=p.matched+1
@@ -12083,6 +13567,9 @@ do
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=="selector" then
+ collected=apply_selector(collected,pi.specification)
+ report_lpath("% 10i : se : %s ",(collected and #collected) or 0,pi.specification)
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 "")
@@ -12114,6 +13601,8 @@ do
collected=apply_nodes(collected,pi.nodetest,pi.nodes)
elseif kind=="expression" then
collected=apply_expression(collected,pi.evaluator,order)
+ elseif kind=="selector" then
+ collected=apply_selector(collected,pi.specification)
elseif kind=="finalizer" then
return pi.finalizer(collected)
end
@@ -12170,6 +13659,13 @@ do
function xml.lastmatch()
return lastmatch
end
+ local stack={}
+ function xml.pushmatch()
+ insert(stack,lastmatch)
+ end
+ function xml.popmatch()
+ lastmatch=remove(stack)
+ end
end
local applylpath=xml.applylpath
function xml.filter(root,pattern)
@@ -12449,7 +13945,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-mis"] = package.loaded["lxml-mis"] or true
--- original size: 3787, stripped down to: 2003
+-- original size: 3684, stripped down to: 1957
if not modules then modules={} end modules ['lxml-mis']={
version=1.001,
@@ -12518,7 +14014,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-aux"] = package.loaded["lxml-aux"] or true
--- original size: 30566, stripped down to: 21741
+-- original size: 29835, stripped down to: 21174
if not modules then modules={} end modules ['lxml-aux']={
version=1.001,
@@ -12534,7 +14030,6 @@ local xml=xml
local xmlcopy,xmlname=xml.copy,xml.name
local xmlinheritedconvert=xml.inheritedconvert
local xmlapplylpath=xml.applylpath
-local xmlfilter=xml.filter
local type,next,setmetatable,getmetatable=type,next,setmetatable,getmetatable
local insert,remove,fastcopy,concat=table.insert,table.remove,table.fastcopy,table.concat
local gmatch,gsub,format,find,strip=string.gmatch,string.gsub,string.format,string.find,string.strip
@@ -12738,7 +14233,17 @@ function xml.replace(root,pattern,whatever)
report('replacing',pattern,c,e)
end
local d=p.dt
- d[e.ni]=copiedelement(element,p)
+ local n=e.ni
+ local t=copiedelement(element,p)
+ if type(t)=="table" then
+ d[n]=t[1]
+ for i=2,#t do
+ n=n+1
+ insert(d,n,t[i])
+ end
+ else
+ d[n]=t
+ end
redo_ni(d)
end
end
@@ -13161,7 +14666,7 @@ local obsolete=xml.obsolete
xml.strip_whitespace=xml.strip obsolete.strip_whitespace=xml.strip
xml.collect_elements=xml.collect obsolete.collect_elements=xml.collect
xml.delete_element=xml.delete obsolete.delete_element=xml.delete
-xml.replace_element=xml.replace obsolete.replace_element=xml.replacet
+xml.replace_element=xml.replace obsolete.replace_element=xml.replace
xml.each_element=xml.each obsolete.each_element=xml.each
xml.process_elements=xml.process obsolete.process_elements=xml.process
xml.insert_element_after=xml.insertafter obsolete.insert_element_after=xml.insertafter
@@ -13379,7 +14884,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-xml"] = package.loaded["lxml-xml"] or true
--- original size: 10719, stripped down to: 7841
+-- original size: 10274, stripped down to: 7538
if not modules then modules={} end modules ['lxml-xml']={
version=1.001,
@@ -13757,7 +15262,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-xml"] = package.loaded["trac-xml"] or true
--- original size: 6534, stripped down to: 5072
+-- original size: 6407, stripped down to: 4965
if not modules then modules={} end modules ['trac-xml']={
version=1.001,
@@ -13907,6 +15412,7 @@ function reporters.export(t,methods,filename)
if filename then
local fullname=file.replacesuffix(filename,method)
t.report("saving export in %a",fullname)
+ dir.mkdirs(file.pathpart(fullname))
io.savedata(fullname,result)
else
reporters.lines(t,result)
@@ -13927,7 +15433,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-ini"] = package.loaded["data-ini"] or true
--- original size: 11444, stripped down to: 7830
+-- original size: 11099, stripped down to: 7516
if not modules then modules={} end modules ['data-ini']={
version=1.001,
@@ -14072,11 +15578,6 @@ if not texroot or texroot=="" then
ossetenv('TEXROOT',texroot)
end
environment.texroot=file.collapsepath(texroot)
-if type(profiler)=="table" and not jit then
- directives.register("system.profile",function()
- profiler.start("luatex-profile.log")
- end)
-end
local prefixes=utilities.storage.allocate()
resolvers.prefixes=prefixes
local resolved={}
@@ -14183,7 +15684,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-exp"] = package.loaded["data-exp"] or true
--- original size: 18619, stripped down to: 11042
+-- original size: 17958, stripped down to: 10705
if not modules then modules={} end modules ['data-exp']={
version=1.001,
@@ -14199,7 +15700,6 @@ 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
local isdir=lfs.isdir
-local ostype=os.type
local collapsepath,joinpath,basename=file.collapsepath,file.join,file.basename
local trace_locating=false trackers.register("resolvers.locating",function(v) trace_locating=v end)
local trace_expansions=false trackers.register("resolvers.expansions",function(v) trace_expansions=v end)
@@ -14568,7 +16068,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-env"] = package.loaded["data-env"] or true
--- original size: 9649, stripped down to: 7131
+-- original size: 9342, stripped down to: 6887
if not modules then modules={} end modules ['data-env']={
version=1.001,
@@ -14852,7 +16352,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-tmp"] = package.loaded["data-tmp"] or true
--- original size: 16066, stripped down to: 11938
+-- original size: 16088, stripped down to: 11435
if not modules then modules={} end modules ['data-tmp']={
version=1.100,
@@ -15056,18 +16556,6 @@ end
caches.getreadablepaths=getreadablepaths
caches.getwritablepath=getwritablepath
function caches.getfirstreadablefile(filename,...)
- local rd=getreadablepaths(...)
- for i=1,#rd do
- local path=rd[i]
- local fullname=file.join(path,filename)
- if is_readable(fullname) then
- usedreadables[i]=true
- return fullname,path
- end
- end
- return caches.setfirstwritablefile(filename,...)
-end
-function caches.getfirstreadablefile_TEST_ME_FIRST(filename,...)
local fullname,path=caches.setfirstwritablefile(filename,...)
if is_readable(fullname) then
return fullname,path
@@ -15096,18 +16584,22 @@ end
function caches.setluanames(path,name)
return format("%s/%s.%s",path,name,luasuffixes.tma),format("%s/%s.%s",path,name,luasuffixes.tmc)
end
-function caches.loaddata(readables,name)
+function caches.loaddata(readables,name,writable)
if type(readables)=="string" then
readables={ readables }
end
for i=1,#readables do
local path=readables[i]
- local tmaname,tmcname=caches.setluanames(path,name)
local loader=false
+ local tmaname,tmcname=caches.setluanames(path,name)
if isfile(tmcname) then
loader=loadfile(tmcname)
end
if not loader and isfile(tmaname) then
+ local tmacrap,tmcname=caches.setluanames(writable,name)
+ if isfile(tmcname) then
+ loader=loadfile(tmcname)
+ end
utilities.lua.compile(tmaname,tmcname)
if isfile(tmcname) then
loader=loadfile(tmcname)
@@ -15228,7 +16720,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-met"] = package.loaded["data-met"] or true
--- original size: 5488, stripped down to: 4101
+-- original size: 5310, stripped down to: 3980
if not modules then modules={} end modules ['data-met']={
version=1.100,
@@ -15240,7 +16732,6 @@ if not modules then modules={} end modules ['data-met']={
local find,format=string.find,string.format
local sequenced=table.sequenced
local addurlscheme,urlhashed=url.addscheme,url.hashed
-local getcurrentdir=lfs.currentdir
local trace_locating=false
local trace_methods=false
trackers.register("resolvers.locating",function(v) trace_methods=v end)
@@ -15347,7 +16838,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-res"] = package.loaded["data-res"] or true
--- original size: 67241, stripped down to: 46427
+-- original size: 67524, stripped down to: 46632
if not modules then modules={} end modules ['data-res']={
version=1.001,
@@ -15401,6 +16892,7 @@ resolvers.configbanner=""
resolvers.homedir=environment.homedir
resolvers.criticalvars=allocate { "SELFAUTOLOC","SELFAUTODIR","SELFAUTOPARENT","TEXMFCNF","TEXMF","TEXOS" }
resolvers.luacnfname="texmfcnf.lua"
+resolvers.luacnffallback="contextcnf.lua"
resolvers.luacnfstate="unknown"
if environment.default_texmfcnf then
resolvers.luacnfspec="home:texmf/web2c;"..environment.default_texmfcnf
@@ -15444,7 +16936,6 @@ local function resolvevariable(k)
end
local dollarstripper=lpeg.stripper("$")
local inhibitstripper=P("!")^0*Cs(P(1)^0)
-local backslashswapper=lpeg.replacer("\\","/")
local somevariable=P("$")/""
local somekey=C(R("az","AZ","09","__","--")^1)
local somethingelse=P(";")*((1-S("!{}/\\"))^1*P(";")/"")+P(";")*(P(";")/"")+P(1)
@@ -15590,23 +17081,29 @@ local function identify_configuration_files()
end
reportcriticalvariables(cnfspec)
local cnfpaths=expandedpathfromlist(resolvers.splitpath(cnfspec))
- local luacnfname=resolvers.luacnfname
- for i=1,#cnfpaths do
- local filepath=cnfpaths[i]
- local filename=collapsepath(filejoin(filepath,luacnfname))
- local realname=resolveprefix(filename)
- if trace_locating then
- local fullpath=gsub(resolveprefix(collapsepath(filepath)),"//","/")
- local weirdpath=find(fullpath,"/texmf.+/texmf") or not find(fullpath,"/web2c",1,true)
- report_resolving("looking for %a on %s path %a from specification %a",luacnfname,weirdpath and "weird" or "given",fullpath,filepath)
- end
- if isfile(realname) then
- specification[#specification+1]=filename
+ local function locatecnf(luacnfname,kind)
+ for i=1,#cnfpaths do
+ local filepath=cnfpaths[i]
+ local filename=collapsepath(filejoin(filepath,luacnfname))
+ local realname=resolveprefix(filename)
if trace_locating then
- report_resolving("found configuration file %a",realname)
+ local fullpath=gsub(resolveprefix(collapsepath(filepath)),"//","/")
+ local weirdpath=find(fullpath,"/texmf.+/texmf") or not find(fullpath,"/web2c",1,true)
+ report_resolving("looking for %s %a on %s path %a from specification %a",
+ kind,luacnfname,weirdpath and "weird" or "given",fullpath,filepath)
+ end
+ if isfile(realname) then
+ specification[#specification+1]=filename
+ if trace_locating then
+ report_resolving("found %s configuration file %a",kind,realname)
+ end
end
end
end
+ locatecnf(resolvers.luacnfname,"regular")
+ if #specification==0 then
+ locatecnf(resolvers.luacnffallback,"fallback")
+ end
if trace_locating then
report_resolving()
end
@@ -16903,7 +18400,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-pre"] = package.loaded["data-pre"] or true
--- original size: 4236, stripped down to: 3144
+-- original size: 4090, stripped down to: 3059
if not modules then modules={} end modules ['data-pre']={
version=1.001,
@@ -17025,7 +18522,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-inp"] = package.loaded["data-inp"] or true
--- original size: 935, stripped down to: 838
+-- original size: 910, stripped down to: 823
if not modules then modules={} end modules ['data-inp']={
version=1.001,
@@ -17055,7 +18552,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-out"] = package.loaded["data-out"] or true
--- original size: 548, stripped down to: 483
+-- original size: 530, stripped down to: 475
if not modules then modules={} end modules ['data-out']={
version=1.001,
@@ -17078,7 +18575,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-fil"] = package.loaded["data-fil"] or true
--- original size: 3976, stripped down to: 3391
+-- original size: 3863, stripped down to: 3310
if not modules then modules={} end modules ['data-fil']={
version=1.001,
@@ -17186,7 +18683,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-con"] = package.loaded["data-con"] or true
--- original size: 5148, stripped down to: 3680
+-- original size: 5029, stripped down to: 3607
if not modules then modules={} end modules ['data-con']={
version=1.100,
@@ -17256,7 +18753,7 @@ function containers.read(container,name)
local storage=container.storage
local stored=storage[name]
if not stored and container.enabled and caches and containers.usecache then
- stored=caches.loaddata(container.readables,name)
+ stored=caches.loaddata(container.readables,name,container.writable)
if stored and stored.cache_version==container.version then
if trace_cache or trace_containers then
report_containers("action %a, category %a, name %a","load",container.subcategory,name)
@@ -17305,7 +18802,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-use"] = package.loaded["data-use"] or true
--- original size: 4000, stripped down to: 3052
+-- original size: 4045, stripped down to: 3110
if not modules then modules={} end modules ['data-use']={
version=1.001,
@@ -17350,7 +18847,7 @@ function resolvers.automount(usecache)
end
statistics.register("used config file",function() return caches.configfiles() end)
statistics.register("used cache path",function() return caches.usedpaths() end)
-function statistics.savefmtstatus(texname,formatbanner,sourcefile)
+function statistics.savefmtstatus(texname,formatbanner,sourcefile,kind,banner)
local enginebanner=status.banner
if formatbanner and enginebanner and sourcefile then
local luvname=file.replacesuffix(texname,"luv")
@@ -17361,6 +18858,10 @@ function statistics.savefmtstatus(texname,formatbanner,sourcefile)
sourcefile=sourcefile,
}
io.savedata(luvname,table.serialize(luvdata,true))
+ lua.registerfinalizer(function()
+ logs.report("format banner","%s",banner)
+ logs.newline()
+ end)
end
end
function statistics.checkfmtstatus(texname)
@@ -17396,7 +18897,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-zip"] = package.loaded["data-zip"] or true
--- original size: 9036, stripped down to: 7041
+-- original size: 8772, stripped down to: 6841
if not modules then modules={} end modules ['data-zip']={
version=1.001,
@@ -17633,7 +19134,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-tre"] = package.loaded["data-tre"] or true
--- original size: 8712, stripped down to: 5726
+-- original size: 8479, stripped down to: 5580
if not modules then modules={} end modules ['data-tre']={
version=1.001,
@@ -17822,7 +19323,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-sch"] = package.loaded["data-sch"] or true
--- original size: 6779, stripped down to: 5444
+-- original size: 6653, stripped down to: 5467
if not modules then modules={} end modules ['data-sch']={
version=1.001,
@@ -17868,11 +19369,21 @@ function resolvers.schemes.cleanname(specification)
end
return hash
end
-local cached,loaded,reused,thresholds,handlers={},{},{},{},{}
-local function runcurl(name,cachename)
- local command="curl --silent --insecure --create-dirs --output "..cachename.." "..name
- os.execute(command)
-end
+local cached={}
+local loaded={}
+local reused={}
+local thresholds={}
+local handlers={}
+local runner=sandbox.registerrunner {
+ name="curl resolver",
+ method="execute",
+ program="curl",
+ template="--silent -- insecure --create-dirs --output %cachename% %original%",
+ checkers={
+ cachename="cache",
+ original="url",
+ }
+}
local function fetch(specification)
local original=specification.original
local scheme=specification.scheme
@@ -17894,7 +19405,10 @@ local function fetch(specification)
report_schemes("fetching %a, protocol %a, method %a",original,scheme,"curl")
end
logs.flush()
- runcurl(original,cachename)
+ runner {
+ original=original,
+ cachename=cachename,
+ }
end
end
if io.exists(cachename) then
@@ -18003,7 +19517,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-lua"] = package.loaded["data-lua"] or true
--- original size: 4447, stripped down to: 3302
+-- original size: 4207, stripped down to: 3137
if not modules then modules={} end modules ['data-lua']={
version=1.001,
@@ -18045,8 +19559,6 @@ function helpers.cleanpath(path)
return resolveprefix(lpegmatch(pattern,path))
end
local loadedaslib=helpers.loadedaslib
-local getextraluapaths=package.extraluapaths
-local getextralibpaths=package.extralibpaths
local registerpath=helpers.registerpath
local lualibfile=helpers.lualibfile
local luaformatpaths
@@ -18112,7 +19624,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-aux"] = package.loaded["data-aux"] or true
--- original size: 2494, stripped down to: 2047
+-- original size: 2431, stripped down to: 1996
if not modules then modules={} end modules ['data-aux']={
version=1.001,
@@ -18179,7 +19691,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-tmf"] = package.loaded["data-tmf"] or true
--- original size: 2674, stripped down to: 1658
+-- original size: 2601, stripped down to: 1627
if not modules then modules={} end modules ['data-tmf']={
version=1.001,
@@ -18235,7 +19747,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-lst"] = package.loaded["data-lst"] or true
--- original size: 2815, stripped down to: 2415
+-- original size: 2734, stripped down to: 2354
if not modules then modules={} end modules ['data-lst']={
version=1.001,
@@ -18315,7 +19827,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-lib"] = package.loaded["util-lib"] or true
--- original size: 11846, stripped down to: 6059
+-- original size: 13595, stripped down to: 7500
if not modules then modules={} end modules ['util-lib']={
version=1.001,
@@ -18324,35 +19836,51 @@ if not modules then modules={} end modules ['util-lib']={
copyright="PRAGMA ADE / ConTeXt Development Team",
license="see context related readme files",
}
-local gsub,find=string.gsub,string.find
-local pathpart,nameonly,joinfile=file.pathpart,file.nameonly,file.join
-local findfile,findfiles=resolvers and resolvers.findfile,resolvers and resolvers.findfiles
-local loaded=package.loaded
-local report_swiglib=logs.reporter("swiglib")
-local trace_swiglib=false trackers.register("resolvers.swiglib",function(v) trace_swiglib=v end)
+local type=type
+local next=next
+local pcall=pcall
+local gsub=string.gsub
+local find=string.find
+local sort=table.sort
+local pathpart=file.pathpart
+local nameonly=file.nameonly
+local joinfile=file.join
+local removesuffix=file.removesuffix
+local findfile=resolvers.findfile
+local findfiles=resolvers.findfiles
+local expandpaths=resolvers.expandedpathlistfromvariable
+local qualifiedpath=file.is_qualified_path
+local isfile=lfs.isfile
local done=false
-local function requireswiglib(required,version)
- local trace_swiglib=trace_swiglib or package.helpers.trace
- local library=loaded[required]
- if library==nil then
- if trace_swiglib then
- report_swiglib("requiring library %a with version %a",required,version or "any")
- end
- local required_full=gsub(required,"%.","/")
- local required_path=pathpart(required_full)
- local required_base=nameonly(required_full)
+local function locate(required,version,trace,report,action)
+ if type(required)~="string" then
+ report("provide a proper library name")
+ return
+ end
+ if trace then
+ report("requiring library %a with version %a",required,version or "any")
+ end
+ local found_library=nil
+ local required_full=gsub(required,"%.","/")
+ local required_path=pathpart(required_full)
+ local required_base=nameonly(required_full)
+ if qualifiedpath(required) then
+ if isfile(required) then
+ found_library=required
+ end
+ else
local required_name=required_base.."."..os.libsuffix
local version=type(version)=="string" and version~="" and version or false
local engine=environment.ownmain or false
- if trace_swiglib and not done then
- local list=resolvers.expandedpathlistfromvariable("lib")
+ if trace and not done then
+ local list=expandpaths("lib")
for i=1,#list do
- report_swiglib("tds path %i: %s",i,list[i])
+ report("tds path %i: %s",i,list[i])
end
end
local function found(locate,asked_library,how,...)
- if trace_swiglib then
- report_swiglib("checking %s: %a",how,asked_library)
+ if trace then
+ report("checking %s: %a",how,asked_library)
end
return locate(asked_library,...)
end
@@ -18360,45 +19888,45 @@ local function requireswiglib(required,version)
local found=nil
if version then
local asked_library=joinfile(required_path,version,required_name)
- if trace_swiglib then
- report_swiglib("checking %s: %a","with version",asked_library)
+ if trace then
+ report("checking %s: %a","with version",asked_library)
end
found=locate(asked_library,...)
end
if not found or found=="" then
local asked_library=joinfile(required_path,required_name)
- if trace_swiglib then
- report_swiglib("checking %s: %a","with version",asked_library)
+ if trace then
+ report("checking %s: %a","with version",asked_library)
end
found=locate(asked_library,...)
end
return found and found~="" and found or false
end
local function attempt(checkpattern)
- if trace_swiglib then
- report_swiglib("checking tds lib paths strictly")
+ if trace then
+ report("checking tds lib paths strictly")
end
local found=findfile and check(findfile,"lib")
if found and (not checkpattern or find(found,checkpattern)) then
return found
end
- if trace_swiglib then
- report_swiglib("checking tds lib paths with wildcard")
+ if trace then
+ report("checking tds lib paths with wildcard")
end
local asked_library=joinfile(required_path,".*",required_name)
- if trace_swiglib then
- report_swiglib("checking %s: %a","latest version",asked_library)
+ if trace then
+ report("checking %s: %a","latest version",asked_library)
end
local list=findfiles(asked_library,"lib",true)
if list and #list>0 then
- table.sort(list)
+ sort(list)
local found=list[#list]
if found and (not checkpattern or find(found,checkpattern)) then
return found
end
end
- if trace_swiglib then
- report_swiglib("checking lib paths")
+ if trace then
+ report("checking lib paths")
end
package.extralibpath(environment.ownpath)
local paths=package.libpaths()
@@ -18410,89 +19938,143 @@ local function requireswiglib(required,version)
end
return false
end
- local found_library=nil
if engine then
- if trace_swiglib then
- report_swiglib("attemp 1, engine %a",engine)
+ if trace then
+ report("attemp 1, engine %a",engine)
end
found_library=attempt("/"..engine.."/")
if not found_library then
- if trace_swiglib then
- report_swiglib("attemp 2, no engine",asked_library)
+ if trace then
+ report("attemp 2, no engine",asked_library)
end
found_library=attempt()
end
else
found_library=attempt()
end
- if not found_library then
- if trace_swiglib then
- report_swiglib("not found: %a",required)
- end
+ end
+ if not found_library then
+ if trace then
+ report("not found: %a",required)
+ end
+ library=false
+ else
+ if trace then
+ report("found: %a",found_library)
+ end
+ local message,result=action(found_library,required_base)
+ if result then
+ library=result
+ else
library=false
+ report("load error: message %a, library %a",tostring(message),found_library or "no library")
+ end
+ end
+ if not library then
+ report("unknown: %a",required)
+ elseif trace then
+ report("stored: %a",required)
+ end
+ return library
+end
+do
+ local report_swiglib=logs.reporter("swiglib")
+ local trace_swiglib=false
+ local savedrequire=require
+ local loadedlibs={}
+ local loadlib=package.loadlib
+ local pushdir=dir.push
+ local popdir=dir.pop
+ trackers.register("resolvers.swiglib",function(v) trace_swiglib=v end)
+ function requireswiglib(required,version)
+ local library=loadedlibs[library]
+ if library==nil then
+ local trace_swiglib=trace_swiglib or package.helpers.trace
+ library=locate(required,version,trace_swiglib,report_swiglib,function(name,base)
+ pushdir(pathpart(name))
+ local opener="luaopen_"..base
+ if trace_swiglib then
+ report_swiglib("opening: %a with %a",name,opener)
+ end
+ local library,message=loadlib(name,opener)
+ local libtype=type(library)
+ if libtype=="function" then
+ library=library()
+ message=true
+ else
+ report_swiglib("load error: %a returns %a, message %a, library %a",opener,libtype,(string.gsub(message or "no message","[%s]+$","")),found_library or "no library")
+ library=false
+ end
+ popdir()
+ return message,library
+ end)
+ loadedlibs[required]=library or false
+ end
+ return library
+ end
+ function require(name,version)
+ if find(name,"^swiglib%.") then
+ return requireswiglib(name,version)
else
- local path=pathpart(found_library)
- local base=nameonly(found_library)
- dir.push(path)
+ return savedrequire(name)
+ end
+ end
+ local swiglibs={}
+ local initializer="core"
+ function swiglib(name,version)
+ local library=swiglibs[name]
+ if not library then
+ statistics.starttiming(swiglibs)
if trace_swiglib then
- report_swiglib("found: %a",found_library)
- end
- local message=nil
- local opener="luaopen_"..required_base
- library,message=package.loadlib(found_library,opener)
- local libtype=type(library)
- if libtype=="function" then
- library=library()
+ report_swiglib("loading %a",name)
+ end
+ if not find(name,"%."..initializer.."$") then
+ fullname="swiglib."..name.."."..initializer
else
- report_swiglib("load error: %a returns %a, message %a, library %a",opener,libtype,(string.gsub(message or "no message","[%s]+$","")),found_library or "no library")
- library=false
+ fullname="swiglib."..name
end
- dir.pop()
+ library=requireswiglib(fullname,version)
+ swiglibs[name]=library
+ statistics.stoptiming(swiglibs)
end
- if not library then
- report_swiglib("unknown: %a",required)
- elseif trace_swiglib then
- report_swiglib("stored: %a",required)
- end
- loaded[required]=library
- else
- report_swiglib("reused: %a",required)
+ return library
end
- return library
+ statistics.register("used swiglibs",function()
+ if next(swiglibs) then
+ return string.format("%s, initial load time %s seconds",table.concat(table.sortedkeys(swiglibs)," "),statistics.elapsedtime(swiglibs))
+ end
+ end)
end
-local savedrequire=require
-function require(name,version)
- if find(name,"^swiglib%.") then
- return requireswiglib(name,version)
- else
- return savedrequire(name)
+if FFISUPPORTED and ffi and ffi.load then
+ local report_ffilib=logs.reporter("ffilib")
+ local trace_ffilib=false
+ local savedffiload=ffi.load
+ trackers.register("resolvers.ffilib",function(v) trace_ffilib=v end)
+ local function locateindeed(name)
+ local message,library=pcall(savedffiload,removesuffix(name))
+ if type(library)=="userdata" then
+ return library
+ else
+ return false
+ end
end
-end
-local swiglibs={}
-local initializer="core"
-function swiglib(name,version)
- local library=swiglibs[name]
- if not library then
- statistics.starttiming(swiglibs)
- if trace_swiglib then
- report_swiglib("loading %a",name)
+ function ffilib(required,version)
+ if version=="system" then
+ return locateindeed(name)
+ else
+ return locate(required,version,trace_ffilib,report_ffilib,locateindeed)
end
- if not find(name,"%."..initializer.."$") then
- fullname="swiglib."..name.."."..initializer
+ end
+ function ffi.load(name)
+ local library=ffilib(name)
+ if type(library)=="userdata" then
+ return library
else
- fullname="swiglib."..name
+ report_ffilib("trying to load %a using normal loader",name)
+ return savedffiload(name)
end
- library=requireswiglib(fullname,version)
- swiglibs[name]=library
- statistics.stoptiming(swiglibs)
end
- return library
end
-statistics.register("used swiglibs",function()
- if next(swiglibs) then
- return string.format("%s, initial load time %s seconds",table.concat(table.sortedkeys(swiglibs)," "),statistics.elapsedtime(swiglibs))
- end
-end)
end -- of closure
@@ -18501,7 +20083,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["luat-sta"] = package.loaded["luat-sta"] or true
--- original size: 5914, stripped down to: 2584
+-- original size: 5703, stripped down to: 2507
if not modules then modules={} end modules ['luat-sta']={
version=1.001,
@@ -18604,7 +20186,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["luat-fmt"] = package.loaded["luat-fmt"] or true
--- original size: 6967, stripped down to: 5631
+-- original size: 9144, stripped down to: 7291
if not modules then modules={} end modules ['luat-fmt']={
version=1.001,
@@ -18618,23 +20200,67 @@ local concat=table.concat
local quoted=string.quoted
local luasuffixes=utilities.lua.suffixes
local report_format=logs.reporter("resolvers","formats")
-local function primaryflags()
- local trackers=environment.argument("trackers")
- local directives=environment.argument("directives")
+local function primaryflags()
+ local arguments=environment.arguments
+ local flags={}
+ if arguments.silent then
+ flags[#flags+1]="--interaction=batchmode"
+ end
+ if arguments.jit then
+ flags[#flags+1]="--jiton"
+ end
+ return concat(flags," ")
+end
+local function secondaryflags()
+ local arguments=environment.arguments
+ local trackers=arguments.trackers
+ local directives=arguments.directives
local flags={}
if trackers and trackers~="" then
- flags={ "--trackers="..quoted(trackers) }
+ flags[#flags+1]="--c:trackers="..quoted(trackers)
end
if directives and directives~="" then
- flags={ "--directives="..quoted(directives) }
+ flags[#flags+1]="--c:directives="..quoted(directives)
+ end
+ if arguments.silent then
+ flags[#flags+1]="--c:silent"
end
- if environment.argument("jit") then
- flags={ "--jiton" }
+ if arguments.jit then
+ flags[#flags+1]="--c:jiton"
+ end
+ if arguments.ansi then
+ flags[#flags+1]="--c:ansi"
end
return concat(flags," ")
end
-function environment.make_format(name,silent)
+local template=[[--ini %primaryflags% --lua=%luafile% %texfile% %secondaryflags% %dump% %redirect%]]
+local checkers={
+ primaryflags="string",
+ secondaryflags="string",
+ luafile="readable",
+ texfile="readable",
+ redirect="string",
+ dump="string",
+}
+local runners={
+ luatex=sandbox.registerrunner {
+ name="make luatex format",
+ program="luatex",
+ template=template,
+ checkers=checkers,
+ reporter=report_format,
+ },
+ luajittex=sandbox.registerrunner {
+ name="make luajittex format",
+ program="luajittex",
+ template=template,
+ checkers=checkers,
+ reporter=report_format,
+ },
+}
+function environment.make_format(name,arguments)
local engine=environment.ownmain or "luatex"
+ local silent=environment.arguments.silent
local olddir=dir.current()
local path=caches.getwritablepath("formats",engine) or ""
if path~="" then
@@ -18690,11 +20316,20 @@ function environment.make_format(name,silent)
lfs.chdir(olddir)
return
end
- local dump=os.platform=="unix" and "\\\\dump" or "\\dump"
- if silent then
+ local specification={
+ primaryflags=primaryflags(),
+ secondaryflags=secondaryflags(),
+ luafile=quoted(usedluastub),
+ texfile=quoted(fulltexsourcename),
+ dump=os.platform=="unix" and "\\\\dump" or "\\dump",
+ }
+ local runner=runners[engine]
+ if not runner then
+ report_format("format %a cannot be generated, no runner available for engine %a",name,engine)
+ elseif 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)
+ specification.redirect="> temp.log"
+ local result=runner(specification)
local runtime=statistics.stoptiming()
if result~=0 then
print(format("%s silent make > fatal error when making format %q",engine,name))
@@ -18703,9 +20338,7 @@ function environment.make_format(name,silent)
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)
+ runner(specification)
end
local pattern=file.removesuffix(file.basename(usedluastub)).."-*.mem"
local mp=dir.glob(pattern)
@@ -18718,6 +20351,30 @@ function environment.make_format(name,silent)
end
lfs.chdir(olddir)
end
+local template=[[%flags% --fmt=%fmtfile% --lua=%luafile% %texfile% %more%]]
+local checkers={
+ flags="string",
+ more="string",
+ fmtfile="readable",
+ luafile="readable",
+ texfile="readable",
+}
+local runners={
+ luatex=sandbox.registerrunner {
+ name="run luatex format",
+ program="luatex",
+ template=template,
+ checkers=checkers,
+ reporter=report_format,
+ },
+ luajittex=sandbox.registerrunner {
+ name="run luajittex format",
+ program="luajittex",
+ template=template,
+ checkers=checkers,
+ reporter=report_format,
+ },
+}
function environment.run_format(name,data,more)
if name and name~="" then
local engine=environment.ownmain or "luatex"
@@ -18739,9 +20396,18 @@ function environment.run_format(name,data,more)
report_format("using format name %a",fmtname)
report_format("no luc/lua file with name %a",barename)
else
- local command=format("%s %s --fmt=%s --lua=%s %s %s",engine,primaryflags(),quoted(barename),quoted(luaname),quoted(data),more~="" and quoted(more) or "")
- report_format("running command: %s",command)
- os.execute(command)
+ local runner=runners[engine]
+ if not runner then
+ report_format("format %a cannot be run, no runner available for engine %a",name,engine)
+ else
+ runner {
+ flags=primaryflags(),
+ fmtfile=quoted(barename),
+ luafile=quoted(luaname),
+ texfile=quoted(data),
+ more=more,
+ }
+ end
end
end
end
@@ -18750,10 +20416,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-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
+-- used libraries : l-lua.lua l-sandbox.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-tpl.lua util-sbx.lua util-mrg.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 : 797557
--- stripped bytes : 289197
+-- original bytes : 842443
+-- stripped bytes : 306317
-- end library merge
@@ -18777,6 +20443,7 @@ local owntree = environment and environment.ownpath or ownpath
local ownlibs = { -- order can be made better
'l-lua.lua',
+ 'l-sandbox.lua',
'l-package.lua',
'l-lpeg.lua',
'l-function.lua',
@@ -18810,8 +20477,9 @@ local ownlibs = { -- order can be made better
'util-lua.lua', -- indeed here?
'util-deb.lua',
- 'util-mrg.lua',
'util-tpl.lua',
+ 'util-sbx.lua',
+ 'util-mrg.lua',
'util-env.lua',
'luat-env.lua', -- can come before inf (as in mkiv)
@@ -18983,7 +20651,7 @@ local helpinfo = [[
<metadata>
<entry name="name">mtxrun</entry>
<entry name="detail">ConTeXt TDS Runner Tool</entry>
- <entry name="version">1.31</entry>
+ <entry name="version">1.32</entry>
</metadata>
<flags>
<category name="basic">
@@ -19046,6 +20714,7 @@ local helpinfo = [[
</subcategory>
<subcategory>
<flag name="expand-braces"><short>expand complex variable</short></flag>
+ <flag name="resolve-path"><short>expand variable (completely resolve paths)</short></flag>
<flag name="expand-path"><short>expand variable (resolve paths)</short></flag>
<flag name="expand-var"><short>expand variable (resolve references)</short></flag>
<flag name="show-path"><short>show path expansion of ...</short></flag>
@@ -19063,7 +20732,7 @@ local helpinfo = [[
local application = logs.application {
name = "mtxrun",
- banner = "ConTeXt TDS Runner Tool 1.31",
+ banner = "ConTeXt TDS Runner Tool 1.32",
helpinfo = helpinfo,
}
@@ -20029,6 +21698,13 @@ elseif e_argument("expand-path") then
environment.initializearguments(environment.arguments_after)
resolvers.dowithfilesandreport(resolvers.expandpath, environment.files)
+elseif e_argument("resolve-path") then
+
+ resolvers.load("nofiles")
+ runners.register_arguments(filename)
+ environment.initializearguments(environment.arguments_after)
+ resolvers.dowithfilesandreport(resolvers.cleanedpathlist, environment.files)
+
elseif e_argument("expand-var") or e_argument("expand-variable") then
-- luatools: runners.execute_ctx_script("mtx-base","--expand-var",filename)
diff --git a/scripts/context/stubs/unix/ctxtools b/scripts/context/stubs/unix/ctxtools
new file mode 100644
index 000000000..2e6bd4afa
--- /dev/null
+++ b/scripts/context/stubs/unix/ctxtools
@@ -0,0 +1,2 @@
+#!/bin/sh
+mtxrun --script ctxtools "$@"
diff --git a/scripts/context/stubs/unix/mptopdf b/scripts/context/stubs/unix/mptopdf
new file mode 100644
index 000000000..147333740
--- /dev/null
+++ b/scripts/context/stubs/unix/mptopdf
@@ -0,0 +1,2 @@
+#!/bin/sh
+mtxrun --script mptopdf "$@"
diff --git a/scripts/context/stubs/unix/mtxrun b/scripts/context/stubs/unix/mtxrun
index 7b711a88d..873770cac 100644
--- a/scripts/context/stubs/unix/mtxrun
+++ b/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: 4734, stripped down to: 2626
+-- original size: 5125, stripped down to: 2881
if not modules then modules={} end modules ['l-lua']={
version=1.001,
@@ -162,6 +162,283 @@ if flush then
local spawn=os.spawn if spawn then function os.spawn (...) flush() return spawn (...) end end
local popen=io.popen if popen then function io.popen (...) flush() return popen (...) end end
end
+FFISUPPORTED=type(ffi)=="table" and ffi.os~="" and ffi.arch~="" and ffi.load
+if not FFISUPPORTED then
+ local okay;okay,ffi=pcall(require,"ffi")
+ FFISUPPORTED=type(ffi)=="table" and ffi.os~="" and ffi.arch~="" and ffi.load
+end
+if not FFISUPPORTED then
+ ffi=nil
+elseif not ffi.number then
+ ffi.number=tonumber
+end
+
+
+end -- of closure
+
+do -- create closure to overcome 200 locals limit
+
+package.loaded["l-sandbox"] = package.loaded["l-sandbox"] or true
+
+-- original size: 9667, stripped down to: 6678
+
+if not modules then modules={} end modules ['l-sandbox']={
+ 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 global=_G
+local next=next
+local unpack=unpack or table.unpack
+local type=type
+local tprint=texio.write_nl or print
+local tostring=tostring
+local format=string.format
+local concat=table.concat
+local sort=table.sort
+local gmatch=string.gmatch
+local gsub=string.gsub
+local requiem=require
+sandbox={}
+local sandboxed=false
+local overloads={}
+local skiploads={}
+local initializers={}
+local finalizers={}
+local originals={}
+local comments={}
+local trace=false
+local logger=false
+local blocked={}
+local function report(...)
+ tprint("sandbox ! "..format(...))
+end
+sandbox.report=report
+function sandbox.setreporter(r)
+ report=r
+ sandbox.report=r
+end
+function sandbox.settrace(v)
+ trace=v
+end
+function sandbox.setlogger(l)
+ logger=type(l)=="function" and l or false
+end
+local function register(func,overload,comment)
+ if type(func)=="function" then
+ if type(overload)=="string" then
+ comment=overload
+ overload=nil
+ end
+ local function f(...)
+ if sandboxed then
+ local overload=overloads[f]
+ if overload then
+ if logger then
+ local result={ overload(func,...) }
+ logger {
+ comment=comments[f] or tostring(f),
+ arguments={... },
+ result=result[1] and true or false,
+ }
+ return unpack(result)
+ else
+ return overload(func,...)
+ end
+ else
+ end
+ else
+ return func(...)
+ end
+ end
+ if comment then
+ comments[f]=comment
+ if trace then
+ report("registering function: %s",comment)
+ end
+ end
+ overloads[f]=overload or false
+ originals[f]=func
+ return f
+ end
+end
+local function redefine(func,comment)
+ if type(func)=="function" then
+ skiploads[func]=comment or comments[func] or "unknown"
+ if overloads[func]==false then
+ overloads[func]=nil
+ end
+ end
+end
+sandbox.register=register
+sandbox.redefine=redefine
+function sandbox.original(func)
+ return originals and originals[func] or func
+end
+function sandbox.overload(func,overload,comment)
+ comment=comment or comments[func] or "?"
+ if type(func)~="function" then
+ if trace then
+ report("overloading unknown function: %s",comment)
+ end
+ elseif type(overload)~="function" then
+ if trace then
+ report("overloading function with bad overload: %s",comment)
+ end
+ elseif overloads[func]==nil then
+ if trace then
+ report("function is not registered: %s",comment)
+ end
+ elseif skiploads[func] then
+ if trace then
+ report("function is not skipped: %s",comment)
+ end
+ else
+ if trace then
+ report("overloading function: %s",comment)
+ end
+ overloads[func]=overload
+ end
+ return func
+end
+local function whatever(specification,what,target)
+ if type(specification)~="table" then
+ report("%s needs a specification",what)
+ elseif type(specification.category)~="string" or type(specification.action)~="function" then
+ report("%s needs a category and action",what)
+ elseif not sandboxed then
+ target[#target+1]=specification
+ elseif trace then
+ report("already enabled, discarding %s",what)
+ end
+end
+function sandbox.initializer(specification)
+ whatever(specification,"initializer",initializers)
+end
+function sandbox.finalizer(specification)
+ whatever(specification,"finalizer",finalizers)
+end
+function require(name)
+ local n=gsub(name,"^.*[\\/]","")
+ local n=gsub(n,"[%.].*$","")
+ local b=blocked[n]
+ if b==false then
+ return nil
+ elseif b then
+ if trace then
+ report("using blocked: %s",n)
+ end
+ return b
+ else
+ if trace then
+ report("requiring: %s",name)
+ end
+ return requiem(name)
+ end
+end
+function blockrequire(name,lib)
+ if trace then
+ report("preventing reload of: %s",name)
+ end
+ blocked[name]=lib or _G[name] or false
+end
+function sandbox.enable()
+ if not sandboxed then
+ for i=1,#initializers do
+ initializers[i].action()
+ end
+ for i=1,#finalizers do
+ finalizers[i].action()
+ end
+ local nnot=0
+ local nyes=0
+ local cnot={}
+ local cyes={}
+ local skip={}
+ for k,v in next,overloads do
+ local c=comments[k]
+ if v then
+ if c then
+ cyes[#cyes+1]=c
+ else
+ nyes=nyes+1
+ end
+ else
+ if c then
+ cnot[#cnot+1]=c
+ else
+ nnot=nnot+1
+ end
+ end
+ end
+ for k,v in next,skiploads do
+ skip[#skip+1]=v
+ end
+ if #cyes>0 then
+ sort(cyes)
+ report("overloaded known: %s",concat(cyes," | "))
+ end
+ if nyes>0 then
+ report("overloaded unknown: %s",nyes)
+ end
+ if #cnot>0 then
+ sort(cnot)
+ report("not overloaded known: %s",concat(cnot," | "))
+ end
+ if nnot>0 then
+ report("not overloaded unknown: %s",nnot)
+ end
+ if #skip>0 then
+ sort(skip)
+ report("not overloaded redefined: %s",concat(skip," | "))
+ end
+ initializers=nil
+ finalizers=nil
+ originals=nil
+ sandboxed=true
+ end
+end
+blockrequire("lfs",lfs)
+blockrequire("io",io)
+blockrequire("os",os)
+blockrequire("ffi",ffi)
+local function supported(library)
+ local l=_G[library]
+ return l
+end
+loadfile=register(loadfile,"loadfile")
+if supported("io") then
+ io.open=register(io.open,"io.open")
+ io.popen=register(io.popen,"io.popen")
+ io.lines=register(io.lines,"io.lines")
+ io.output=register(io.output,"io.output")
+ io.input=register(io.input,"io.input")
+end
+if supported("os") then
+ os.execute=register(os.execute,"os.execute")
+ os.spawn=register(os.spawn,"os.spawn")
+ os.exec=register(os.exec,"os.exec")
+ os.rename=register(os.rename,"os.rename")
+ os.remove=register(os.remove,"os.remove")
+end
+if supported("lfs") then
+ lfs.chdir=register(lfs.chdir,"lfs.chdir")
+ lfs.mkdir=register(lfs.mkdir,"lfs.mkdir")
+ lfs.rmdir=register(lfs.rmdir,"lfs.rmdir")
+ lfs.isfile=register(lfs.isfile,"lfs.isfile")
+ lfs.isdir=register(lfs.isdir,"lfs.isdir")
+ lfs.attributes=register(lfs.attributes,"lfs.attributes")
+ lfs.dir=register(lfs.dir,"lfs.dir")
+ lfs.lock_dir=register(lfs.lock_dir,"lfs.lock_dir")
+ lfs.touch=register(lfs.touch,"lfs.touch")
+ lfs.link=register(lfs.link,"lfs.link")
+ lfs.setmode=register(lfs.setmode,"lfs.setmode")
+ lfs.readlink=register(lfs.readlink,"lfs.readlink")
+ lfs.shortname=register(lfs.shortname,"lfs.shortname")
+ lfs.symlinkattributes=register(lfs.symlinkattributes,"lfs.symlinkattributes")
+end
end -- of closure
@@ -170,7 +447,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-package"] = package.loaded["l-package"] or true
--- original size: 10949, stripped down to: 8037
+-- original size: 10587, stripped down to: 7815
if not modules then modules={} end modules ['l-package']={
version=1.001,
@@ -460,7 +737,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-lpeg"] = package.loaded["l-lpeg"] or true
--- original size: 38185, stripped down to: 20990
+-- original size: 37748, stripped down to: 20111
if not modules then modules={} end modules ['l-lpeg']={
version=1.001,
@@ -552,6 +829,7 @@ patterns.nonwhitespace=nonwhitespace
local stripper=spacer^0*C((spacer^0*nonspacer^1)^0)
local fullstripper=whitespace^0*C((whitespace^0*nonwhitespace^1)^0)
local collapser=Cs(spacer^0/""*nonspacer^0*((spacer^0/" "*nonspacer^1)^0))
+local nospacer=Cs((whitespace^1/""+nonwhitespace^1)^0)
local b_collapser=Cs(whitespace^0/""*(nonwhitespace^1+whitespace^1/" ")^0)
local e_collapser=Cs((whitespace^1*P(-1)/""+nonwhitespace^1+whitespace^1/" ")^0)
local m_collapser=Cs((nonwhitespace^1+whitespace^1/" ")^0)
@@ -561,6 +839,7 @@ local m_stripper=Cs((nonspacer^1+spacer^1/" ")^0)
patterns.stripper=stripper
patterns.fullstripper=fullstripper
patterns.collapser=collapser
+patterns.nospacer=nospacer
patterns.b_collapser=b_collapser
patterns.m_collapser=m_collapser
patterns.e_collapser=e_collapser
@@ -1027,27 +1306,7 @@ function lpeg.append(list,pp,delayed,checked)
end
local p_false=P(false)
local p_true=P(true)
-local function make(t)
- local function making(t)
- local p=p_false
- local keys=sortedkeys(t)
- for i=1,#keys do
- local k=keys[i]
- if k~="" then
- local v=t[k]
- if v==true then
- p=p+P(k)*p_true
- elseif v==false then
- else
- p=p+P(k)*making(v)
- end
- end
- end
- if t[""] then
- p=p+p_true
- end
- return p
- end
+local function make(t,rest)
local p=p_false
local keys=sortedkeys(t)
for i=1,#keys do
@@ -1058,10 +1317,13 @@ local function make(t)
p=p+P(k)*p_true
elseif v==false then
else
- p=p+P(k)*making(v)
+ p=p+P(k)*make(v,v[""])
end
end
end
+ if rest then
+ p=p+p_true
+ end
return p
end
local function collapse(t,x)
@@ -1264,7 +1526,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-function"] = package.loaded["l-function"] or true
--- original size: 372, stripped down to: 329
+-- original size: 361, stripped down to: 322
if not modules then modules={} end modules ['l-functions']={
version=1.001,
@@ -1283,7 +1545,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-string"] = package.loaded["l-string"] or true
--- original size: 5983, stripped down to: 2959
+-- original size: 6419, stripped down to: 3339
if not modules then modules={} end modules ['l-string']={
version=1.001,
@@ -1321,22 +1583,26 @@ end
local stripper=patterns.stripper
local fullstripper=patterns.fullstripper
local collapser=patterns.collapser
+local nospacer=patterns.nospacer
local longtostring=patterns.longtostring
function string.strip(str)
- return lpegmatch(stripper,str) or ""
+ return str and lpegmatch(stripper,str) or ""
end
function string.fullstrip(str)
- return lpegmatch(fullstripper,str) or ""
+ return str and lpegmatch(fullstripper,str) or ""
end
function string.collapsespaces(str)
- return lpegmatch(collapser,str) or ""
+ return str and lpegmatch(collapser,str) or ""
+end
+function string.nospaces(str)
+ return str and lpegmatch(nospacer,str) or ""
end
function string.longtostring(str)
- return lpegmatch(longtostring,str) or ""
+ return str and lpegmatch(longtostring,str) or ""
end
local pattern=P(" ")^0*P(-1)
function string.is_empty(str)
- if str=="" then
+ if not str or str=="" then
return true
else
return lpegmatch(pattern,str) and true or false
@@ -1381,6 +1647,21 @@ function string.tformat(fmt,...)
end
string.quote=string.quoted
string.unquote=string.unquoted
+if not string.bytetable then
+ local limit=5000
+ function string.bytetable(str)
+ local n=#str
+ if n>limit then
+ local t={ byte(str,1,limit) }
+ for i=limit+1,n do
+ t[i]=byte(str,i)
+ end
+ return t
+ else
+ return { byte(str,1,n) }
+ end
+ end
+end
end -- of closure
@@ -1389,7 +1670,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-table"] = package.loaded["l-table"] or true
--- original size: 36997, stripped down to: 22376
+-- original size: 39608, stripped down to: 23165
if not modules then modules={} end modules ['l-table']={
version=1.001,
@@ -1716,19 +1997,23 @@ function table.fromhash(t)
end
return hsh
end
-local noquotes,hexify,handle,compact,inline,functions
+local noquotes,hexify,handle,compact,inline,functions,metacheck
local reserved=table.tohash {
'and','break','do','else','elseif','end','false','for','function','if',
'in','local','nil','not','or','repeat','return','then','true','until','while',
'NaN','goto',
}
-local function simple_table(t)
+local function is_simple_table(t,hexify)
local nt=#t
if nt>0 then
local n=0
for _,v in next,t do
n=n+1
+ if type(v)=="table" then
+ return nil
+ end
end
+ local haszero=rawget(t,0)
if n==nt then
local tt={}
for i=1,nt do
@@ -1738,10 +2023,10 @@ local function simple_table(t)
if hexify then
tt[i]=format("0x%X",v)
else
- tt[i]=tostring(v)
+ tt[i]=v
end
elseif tv=="string" then
- tt[i]=format("%q",v)
+ tt[i]=format("%q",v)
elseif tv=="boolean" then
tt[i]=v and "true" or "false"
else
@@ -1749,10 +2034,32 @@ local function simple_table(t)
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
+ if hexify then
+ tt[i+1]=format("0x%X",v)
+ else
+ tt[i+1]=v
+ end
+ 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
end
+table.is_simple_table=is_simple_table
local propername=patterns.propername
local function dummy() end
local function do_serialize(root,name,depth,level,indexed)
@@ -1786,7 +2093,7 @@ local function do_serialize(root,name,depth,level,indexed)
if compact then
last=#root
for k=1,last do
- if root[k]==nil then
+ if rawget(root,k)==nil then
last=k-1
break
end
@@ -1814,7 +2121,7 @@ local function do_serialize(root,name,depth,level,indexed)
if next(v)==nil then
handle(format("%s {},",depth))
elseif inline then
- local st=simple_table(v)
+ local st=is_simple_table(v,hexify)
if st then
handle(format("%s { %s },",depth,concat(st,", ")))
else
@@ -1851,6 +2158,7 @@ local function do_serialize(root,name,depth,level,indexed)
else
handle(format("%s [%s]=%s,",depth,k and "true" or "false",v))
end
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
if hexify then
handle(format("%s %s=0x%X,",depth,k,v))
@@ -1873,6 +2181,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=%q,",depth,k and "true" or "false",v))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=%q,",depth,k,v))
else
@@ -1888,13 +2197,14 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]={},",depth,k and "true" or "false"))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s={},",depth,k))
else
handle(format("%s [%q]={},",depth,k))
end
elseif inline then
- local st=simple_table(v)
+ local st=is_simple_table(v,hexify)
if st then
if tk=="number" then
if hexify then
@@ -1904,6 +2214,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]={ %s },",depth,k and "true" or "false",concat(st,", ")))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s={ %s },",depth,k,concat(st,", ")))
else
@@ -1924,6 +2235,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=%s,",depth,tostring(k),v and "true" or "false"))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=%s,",depth,k,v and "true" or "false"))
else
@@ -1940,6 +2252,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=load(%q),",depth,k and "true" or "false",f))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=load(%q),",depth,k,f))
else
@@ -1955,6 +2268,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=%q,",depth,k and "true" or "false",tostring(v)))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=%q,",depth,k,tostring(v)))
else
@@ -1976,6 +2290,7 @@ local function serialize(_handle,root,name,specification)
functions=specification.functions
compact=specification.compact
inline=specification.inline and compact
+ metacheck=specification.metacheck
if functions==nil then
functions=true
end
@@ -1985,6 +2300,9 @@ local function serialize(_handle,root,name,specification)
if inline==nil then
inline=compact
end
+ if metacheck==nil then
+ metacheck=true
+ end
else
noquotes=false
hexify=false
@@ -1992,6 +2310,7 @@ local function serialize(_handle,root,name,specification)
compact=true
inline=true
functions=true
+ metacheck=true
end
if tname=="string" then
if name=="return" then
@@ -2015,7 +2334,7 @@ local function serialize(_handle,root,name,specification)
handle("t={")
end
if root then
- if getmetatable(root) then
+ if metacheck and getmetatable(root) then
local dummy=root._w_h_a_t_e_v_e_r_
root._w_h_a_t_e_v_e_r_=nil
end
@@ -2091,6 +2410,38 @@ local function flattened(t,f,depth)
return f
end
table.flattened=flattened
+local function collapsed(t,f,h)
+ if f==nil then
+ f={}
+ h={}
+ end
+ for k=1,#t do
+ local v=t[k]
+ if type(v)=="table" then
+ collapsed(v,f,h)
+ elseif not h[v] then
+ f[#f+1]=v
+ h[v]=true
+ end
+ end
+ return f
+end
+local function collapsedhash(t,h)
+ if h==nil then
+ h={}
+ end
+ for k=1,#t do
+ local v=t[k]
+ if type(v)=="table" then
+ collapsedhash(v,h)
+ else
+ h[v]=true
+ end
+ end
+ return h
+end
+table.collapsed=collapsed
+table.collapsedhash=collapsedhash
local function unnest(t,f)
if not f then
f={}
@@ -2197,6 +2548,12 @@ function table.swapped(t,s)
end
return n
end
+function table.hashed(t)
+ for i=1,#t do
+ t[t[i]]=i
+ end
+ return t
+end
function table.mirrored(t)
local n={}
for k,v in next,t do
@@ -2365,7 +2722,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-io"] = package.loaded["l-io"] or true
--- original size: 9001, stripped down to: 6512
+-- original size: 11790, stripped down to: 6961
if not modules then modules={} end modules ['l-io']={
version=1.001,
@@ -2375,6 +2732,7 @@ if not modules then modules={} end modules ['l-io']={
license="see context related readme files"
}
local io=io
+local open,flush,write,read=io.open,io.flush,io.write,io.read
local byte,find,gsub,format=string.byte,string.find,string.gsub,string.format
local concat=table.concat
local floor=math.floor
@@ -2384,50 +2742,56 @@ if string.find(os.getenv("PATH"),";",1,true) then
else
io.fileseparator,io.pathseparator="/",":"
end
-local function readall(f)
- return f:read("*all")
-end
+local large=2^24
+local medium=large/16
+local small=medium/8
local function readall(f)
local size=f:seek("end")
- if size==0 then
- return ""
- elseif size<1024*1024 then
+ if size>0 then
f:seek("set",0)
- return f:read('*all')
- else
- local done=f:seek("set",0)
- local step
- if size<1024*1024 then
- step=1024*1024
- elseif size>16*1024*1024 then
- step=16*1024*1024
- else
- step=floor(size/(1024*1024))*1024*1024/8
- end
- local data={}
- while true do
- local r=f:read(step)
- if not r then
- return concat(data)
- else
- data[#data+1]=r
- end
- end
+ return f:read(size)
+ else
+ return ""
end
end
io.readall=readall
function io.loaddata(filename,textmode)
- local f=io.open(filename,(textmode and 'r') or 'rb')
+ local f=open(filename,(textmode and 'r') or 'rb')
if f then
- local data=readall(f)
+ local size=f:seek("end")
+ local data=nil
+ if size>0 then
+ f:seek("set",0)
+ data=f:read(size)
+ end
f:close()
- if #data>0 then
- return data
+ return data
+ end
+end
+function io.copydata(source,target,action)
+ local f=open(source,"rb")
+ if f then
+ local g=open(target,"wb")
+ if g then
+ local size=f:seek("end")
+ if size>0 then
+ f:seek("set",0)
+ local data=f:read(size)
+ if action then
+ data=action(data)
+ end
+ if data then
+ g:write(data)
+ end
+ end
+ g:close()
end
+ f:close()
+ flush()
end
end
function io.savedata(filename,data,joiner)
- local f=io.open(filename,"wb")
+ local f=open(filename,"wb")
if f then
if type(data)=="table" then
f:write(concat(data,joiner or ""))
@@ -2437,40 +2801,70 @@ function io.savedata(filename,data,joiner)
f:write(data or "")
end
f:close()
- io.flush()
+ flush()
return true
else
return false
end
end
-function io.loadlines(filename,n)
- local f=io.open(filename,'r')
- if not f then
- elseif n then
- local lines={}
- for i=1,n do
- local line=f:read("*lines")
- if line then
- lines[#lines+1]=line
- else
- break
+if fio and fio.readline then
+ local readline=fio.readline
+ function io.loadlines(filename,n)
+ local f=open(filename,'r')
+ if not f then
+ elseif n then
+ local lines={}
+ for i=1,n do
+ local line=readline(f)
+ if line then
+ lines[i]=line
+ else
+ break
+ end
+ end
+ f:close()
+ lines=concat(lines,"\n")
+ if #lines>0 then
+ return lines
+ end
+ else
+ local line=readline(f)
+ f:close()
+ if line and #line>0 then
+ return line
end
end
- f:close()
- lines=concat(lines,"\n")
- if #lines>0 then
- return lines
- end
- else
- local line=f:read("*line") or ""
- f:close()
- if #line>0 then
- return line
+ end
+else
+ function io.loadlines(filename,n)
+ local f=open(filename,'r')
+ if not f then
+ elseif n then
+ local lines={}
+ for i=1,n do
+ local line=f:read("*lines")
+ if line then
+ lines[i]=line
+ else
+ break
+ end
+ end
+ f:close()
+ lines=concat(lines,"\n")
+ if #lines>0 then
+ return lines
+ end
+ else
+ local line=f:read("*line") or ""
+ f:close()
+ if #line>0 then
+ return line
+ end
end
end
end
function io.loadchunk(filename,n)
- local f=io.open(filename,'rb')
+ local f=open(filename,'rb')
if f then
local data=f:read(n or 1024)
f:close()
@@ -2480,7 +2874,7 @@ function io.loadchunk(filename,n)
end
end
function io.exists(filename)
- local f=io.open(filename)
+ local f=open(filename)
if f==nil then
return false
else
@@ -2489,7 +2883,7 @@ function io.exists(filename)
end
end
function io.size(filename)
- local f=io.open(filename)
+ local f=open(filename)
if f==nil then
return 0
else
@@ -2498,11 +2892,11 @@ function io.size(filename)
return s
end
end
-function io.noflines(f)
+local function noflines(f)
if type(f)=="string" then
- local f=io.open(filename)
+ local f=open(filename)
if f then
- local n=f and io.noflines(f) or 0
+ local n=f and noflines(f) or 0
f:close()
return n
else
@@ -2517,6 +2911,7 @@ function io.noflines(f)
return n
end
end
+io.noflines=noflines
local nextchar={
[ 4]=function(f)
return f:read(1,1,1,1)
@@ -2594,16 +2989,16 @@ function io.bytes(f,n)
end
function io.ask(question,default,options)
while true do
- io.write(question)
+ write(question)
if options then
- io.write(format(" [%s]",concat(options,"|")))
+ write(format(" [%s]",concat(options,"|")))
end
if default then
- io.write(format(" [%s]",default))
+ write(format(" [%s]",default))
end
- io.write(format(" "))
- io.flush()
- local answer=io.read()
+ write(format(" "))
+ flush()
+ local answer=read()
answer=gsub(answer,"^%s*(.*)%s*$","%1")
if answer=="" and default then
return default
@@ -2625,7 +3020,7 @@ function io.ask(question,default,options)
end
end
end
-local function readnumber(f,n,m)
+local function readnumber(f,n,m)
if m then
f:seek("set",n)
n=m
@@ -2634,31 +3029,31 @@ local function readnumber(f,n,m)
return byte(f:read(1))
elseif n==2 then
local a,b=byte(f:read(2),1,2)
- return 256*a+b
+ return 0x100*a+b
elseif n==3 then
local a,b,c=byte(f:read(3),1,3)
- return 256*256*a+256*b+c
+ return 0x10000*a+0x100*b+c
elseif n==4 then
local a,b,c,d=byte(f:read(4),1,4)
- return 256*256*256*a+256*256*b+256*c+d
+ return 0x1000000*a+0x10000*b+0x100*c+d
elseif n==8 then
local a,b=readnumber(f,4),readnumber(f,4)
- return 256*a+b
+ return 0x100*a+b
elseif n==12 then
local a,b,c=readnumber(f,4),readnumber(f,4),readnumber(f,4)
- return 256*256*a+256*b+c
+ return 0x10000*a+0x100*b+c
elseif n==-2 then
local b,a=byte(f:read(2),1,2)
- return 256*a+b
+ return 0x100*a+b
elseif n==-3 then
local c,b,a=byte(f:read(3),1,3)
- return 256*256*a+256*b+c
+ return 0x10000*a+0x100*b+c
elseif n==-4 then
local d,c,b,a=byte(f:read(4),1,4)
- return 256*256*256*a+256*256*b+256*c+d
+ return 0x1000000*a+0x10000*b+0x100*c+d
elseif n==-8 then
local h,g,f,e,d,c,b,a=byte(f:read(8),1,8)
- return 256*256*256*256*256*256*256*a+256*256*256*256*256*256*b+256*256*256*256*256*c+256*256*256*256*d+256*256*256*e+256*256*f+256*g+h
+ return 0x100000000000000*a+0x1000000000000*b+0x10000000000*c+0x100000000*d+0x1000000*e+0x10000*f+0x100*g+h
else
return 0
end
@@ -2680,7 +3075,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-number"] = package.loaded["l-number"] or true
--- original size: 5146, stripped down to: 2933
+-- original size: 5358, stripped down to: 3177
if not modules then modules={} end modules ['l-number']={
version=1.001,
@@ -2693,6 +3088,7 @@ local tostring,tonumber=tostring,tonumber
local format,floor,match,rep=string.format,math.floor,string.match,string.rep
local concat,insert=table.concat,table.insert
local lpegmatch=lpeg.match
+local floor=math.floor
number=number or {}
local number=number
if bit32 then
@@ -2817,6 +3213,26 @@ end
function number.bits(n)
return { bits(n,1) }
end
+function number.bytetodecimal(b)
+ local d=floor(b*100/255+0.5)
+ if d>100 then
+ return 100
+ elseif d<-100 then
+ return -100
+ else
+ return d
+ end
+end
+function number.decimaltobyte(d)
+ local b=floor(d*255/100+0.5)
+ if b>255 then
+ return 255
+ elseif b<-255 then
+ return -255
+ else
+ return b
+ end
+end
end -- of closure
@@ -2825,7 +3241,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-set"] = package.loaded["l-set"] or true
--- original size: 2010, stripped down to: 1186
+-- original size: 1923, stripped down to: 1133
if not modules then modules={} end modules ['l-set']={
version=1.001,
@@ -2898,7 +3314,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-os"] = package.loaded["l-os"] or true
--- original size: 16390, stripped down to: 9734
+-- original size: 16268, stripped down to: 9246
if not modules then modules={} end modules ['l-os']={
version=1.001,
@@ -2974,7 +3390,7 @@ if not os.__getenv__ then
end
local execute=os.execute
local iopopen=io.popen
-function os.resultof(command)
+local function resultof(command)
local handle=iopopen(command,"r")
if handle then
local result=handle:read("*all") or ""
@@ -2984,9 +3400,13 @@ function os.resultof(command)
return ""
end
end
+os.resultof=resultof
+function os.pipeto(command)
+ return iopopen(command,"w")
+end
if not io.fileseparator then
if find(os.getenv("PATH"),";",1,true) then
- io.fileseparator,io.pathseparator,os.type="\\",";",os.type or "mswin"
+ io.fileseparator,io.pathseparator,os.type="\\",";",os.type or "windows"
else
io.fileseparator,io.pathseparator,os.type="/",":",os.type or "unix"
end
@@ -3029,17 +3449,6 @@ setmetatable(os,{ __index=function(t,k)
return r and r(t,k) or nil
end })
local name,platform=os.name or "linux",os.getenv("MTX_PLATFORM") or ""
-local function guess()
- local architecture=os.resultof("uname -m") or ""
- if architecture~="" then
- return architecture
- end
- architecture=os.getenv("HOSTTYPE") or ""
- if architecture~="" then
- return architecture
- end
- return os.resultof("echo $HOSTTYPE") or ""
-end
if platform~="" then
os.platform=platform
elseif os.type=="windows" then
@@ -3056,7 +3465,7 @@ elseif os.type=="windows" then
end
elseif name=="linux" then
function resolvers.platform(t,k)
- local platform,architecture="",os.getenv("HOSTTYPE") or os.resultof("uname -m") or ""
+ local platform,architecture="",os.getenv("HOSTTYPE") or resultof("uname -m") or ""
if find(architecture,"x86_64",1,true) then
platform="linux-64"
elseif find(architecture,"ppc",1,true) then
@@ -3070,7 +3479,7 @@ elseif name=="linux" then
end
elseif name=="macosx" then
function resolvers.platform(t,k)
- local platform,architecture="",os.resultof("echo $HOSTTYPE") or ""
+ local platform,architecture="",resultof("echo $HOSTTYPE") or ""
if architecture=="" then
platform="osx-intel"
elseif find(architecture,"i386",1,true) then
@@ -3086,7 +3495,7 @@ elseif name=="macosx" then
end
elseif name=="sunos" then
function resolvers.platform(t,k)
- local platform,architecture="",os.resultof("uname -m") or ""
+ local platform,architecture="",resultof("uname -m") or ""
if find(architecture,"sparc",1,true) then
platform="solaris-sparc"
else
@@ -3098,7 +3507,7 @@ elseif name=="sunos" then
end
elseif name=="freebsd" then
function resolvers.platform(t,k)
- local platform,architecture="",os.resultof("uname -m") or ""
+ local platform,architecture="",resultof("uname -m") or ""
if find(architecture,"amd64",1,true) then
platform="freebsd-amd64"
else
@@ -3110,7 +3519,7 @@ elseif name=="freebsd" then
end
elseif name=="kfreebsd" then
function resolvers.platform(t,k)
- local platform,architecture="",os.getenv("HOSTTYPE") or os.resultof("uname -m") or ""
+ local platform,architecture="",os.getenv("HOSTTYPE") or resultof("uname -m") or ""
if find(architecture,"x86_64",1,true) then
platform="kfreebsd-amd64"
else
@@ -3241,7 +3650,7 @@ if not os.sleep then
end
end
local function isleapyear(year)
- return (year%400==0) or ((year%100~=0) and (year%4==0))
+ return (year%4==0) and (year%100~=0 or year%400==0)
end
os.isleapyear=isleapyear
local days={ 31,28,31,30,31,30,31,31,30,31,30,31 }
@@ -3280,7 +3689,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-file"] = package.loaded["l-file"] or true
--- original size: 21648, stripped down to: 10238
+-- original size: 20997, stripped down to: 9986
if not modules then modules={} end modules ['l-file']={
version=1.001,
@@ -3617,13 +4026,15 @@ function file.robustname(str,strict)
end
end
end
-file.readdata=io.loaddata
-file.savedata=io.savedata
+local loaddata=io.loaddata
+local savedata=io.savedata
+file.readdata=loaddata
+file.savedata=savedata
function file.copy(oldname,newname)
if oldname and newname then
- local data=io.loaddata(oldname)
+ local data=loaddata(oldname)
if data and data~="" then
- file.savedata(newname,data)
+ savedata(newname,data)
end
end
end
@@ -3660,7 +4071,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-gzip"] = package.loaded["l-gzip"] or true
--- original size: 1265, stripped down to: 1038
+-- original size: 1211, stripped down to: 1002
if not modules then modules={} end modules ['l-gzip']={
version=1.001,
@@ -3714,7 +4125,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-md5"] = package.loaded["l-md5"] or true
--- original size: 3355, stripped down to: 2321
+-- original size: 3309, stripped down to: 2314
if not modules then modules={} end modules ['l-md5']={
version=1.001,
@@ -3744,6 +4155,8 @@ do
if not md5.HEX then function md5.HEX(str) if str then return lpegmatch(bytestoHEX,md5sum(str)) end end end
if not md5.hex then function md5.hex(str) if str then return lpegmatch(bytestohex,md5sum(str)) end end end
if not md5.dec then function md5.dec(str) if str then return lpegmatch(bytestodec,md5sum(str)) end end end
+ md5.sumhexa=md5.hex
+ md5.sumHEXA=md5.HEX
end
end
function file.needsupdating(oldname,newname,threshold)
@@ -3802,7 +4215,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-url"] = package.loaded["l-url"] or true
--- original size: 12897, stripped down to: 5882
+-- original size: 12531, stripped down to: 5721
if not modules then modules={} end modules ['l-url']={
version=1.001,
@@ -4019,7 +4432,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-dir"] = package.loaded["l-dir"] or true
--- original size: 17358, stripped down to: 11378
+-- original size: 17703, stripped down to: 11691
if not modules then modules={} end modules ['l-dir']={
version=1.001,
@@ -4283,6 +4696,31 @@ local function globfiles(path,recurse,func,files)
return files
end
dir.globfiles=globfiles
+local function globdirs(path,recurse,func,files)
+ if type(func)=="string" then
+ local s=func
+ func=function(name) return find(name,s) end
+ end
+ files=files or {}
+ local noffiles=#files
+ for name in walkdir(path) do
+ if find(name,"^%.") then
+ else
+ local mode=attributes(name,'mode')
+ if mode=="directory" then
+ if not func or func(name) then
+ noffiles=noffiles+1
+ files[noffiles]=path.."/"..name
+ if recurse then
+ globdirs(path.."/"..name,recurse,func,files)
+ end
+ end
+ end
+ end
+ end
+ return files
+end
+dir.globdirs=globdirs
function dir.ls(pattern)
return concat(glob(pattern),"\n")
end
@@ -4447,9 +4885,13 @@ end
file.expandname=dir.expandname
local stack={}
function dir.push(newdir)
- insert(stack,currentdir())
+ local curdir=currentdir()
+ insert(stack,curdir)
if newdir and newdir~="" then
chdir(newdir)
+ return newdir
+ else
+ return curdir
end
end
function dir.pop()
@@ -4484,7 +4926,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-boolean"] = package.loaded["l-boolean"] or true
--- original size: 1919, stripped down to: 1621
+-- original size: 1850, stripped down to: 1568
if not modules then modules={} end modules ['l-boolean']={
version=1.001,
@@ -4556,7 +4998,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-unicode"] = package.loaded["l-unicode"] or true
--- original size: 38699, stripped down to: 16321
+-- original size: 38263, stripped down to: 16330
if not modules then modules={} end modules ['l-unicode']={
version=1.001,
@@ -5167,6 +5609,23 @@ function utf.chrlen(u)
(u<0xFC and 5) or
(u<0xFE and 6) or 0
end
+local extract=bit32.extract
+local char=string.char
+function unicode.toutf32string(n)
+ if n<=0xFF then
+ return
+ char(n).."\000\000\000"
+ elseif n<=0xFFFF then
+ return
+ char(extract(n,0,8))..char(extract(n,8,8)).."\000\000"
+ elseif n<=0xFFFFFF then
+ return
+ char(extract(n,0,8))..char(extract(n,8,8))..char(extract(n,16,8)).."\000"
+ else
+ return
+ char(extract(n,0,8))..char(extract(n,8,8))..char(extract(n,16,8))..char(extract(n,24,8))
+ end
+end
end -- of closure
@@ -5175,7 +5634,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-math"] = package.loaded["l-math"] or true
--- original size: 1012, stripped down to: 912
+-- original size: 974, stripped down to: 890
if not modules then modules={} end modules ['l-math']={
version=1.001,
@@ -5215,7 +5674,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-str"] = package.loaded["util-str"] or true
--- original size: 36053, stripped down to: 19685
+-- original size: 36148, stripped down to: 20179
if not modules then modules={} end modules ['util-str']={
version=1.001,
@@ -5227,7 +5686,7 @@ if not modules then modules={} end modules ['util-str']={
utilities=utilities or {}
utilities.strings=utilities.strings or {}
local strings=utilities.strings
-local format,gsub,rep,sub=string.format,string.gsub,string.rep,string.sub
+local format,gsub,rep,sub,find=string.format,string.gsub,string.rep,string.sub,string.find
local load,dump=load,string.dump
local tonumber,type,tostring=tonumber,type,tostring
local unpack,concat=table.unpack,table.concat
@@ -5410,6 +5869,25 @@ function number.signed(i)
return "-",-i
end
end
+local digit=patterns.digit
+local period=patterns.period
+local three=digit*digit*digit
+local splitter=Cs (
+ (((1-(three^1*period))^1+C(three))*(Carg(1)*three)^1+C((1-period)^1))*(P(1)/""*Carg(2))*C(2)
+)
+patterns.formattednumber=splitter
+function number.formatted(n,sep1,sep2)
+ local s=type(s)=="string" and n or format("%0.2f",n)
+ if sep1==true then
+ return lpegmatch(splitter,s,1,".",",")
+ elseif sep1=="." then
+ return lpegmatch(splitter,s,1,sep1,sep2 or ",")
+ elseif sep1=="," then
+ return lpegmatch(splitter,s,1,sep1,sep2 or ".")
+ else
+ return lpegmatch(splitter,s,1,sep1 or ",",sep2 or ".")
+ end
+end
local zero=P("0")^1/""
local plus=P("+")/""
local minus=P("-")
@@ -5435,6 +5913,27 @@ function number.sparseexponent(f,n)
end
return tostring(n)
end
+local hf={}
+local hs={}
+setmetatable(hf,{ __index=function(t,k)
+ local v="%."..k.."f"
+ t[k]=v
+ return v
+end } )
+setmetatable(hs,{ __index=function(t,k)
+ local v="%"..k.."s"
+ t[k]=v
+ return v
+end } )
+function number.formattedfloat(n,b,a)
+ local s=format(hf[a],n)
+ local l=(b or 0)+(a or 0)+1
+ if #s<l then
+ return format(hs[l],s)
+ else
+ return s
+ end
+end
local template=[[
%s
%s
@@ -5462,6 +5961,7 @@ local autodouble=string.autodouble
local sequenced=table.sequenced
local formattednumber=number.formatted
local sparseexponent=number.sparseexponent
+local formattedfloat=number.formattedfloat
]]
else
environment={
@@ -5485,6 +5985,7 @@ else
sequenced=table.sequenced,
formattednumber=number.formatted,
sparseexponent=number.sparseexponent,
+ formattedfloat=number.formattedfloat
}
end
local arguments={ "a1" }
@@ -5495,6 +5996,7 @@ setmetatable(arguments,{ __index=function(t,k)
end
})
local prefix_any=C((S("+- .")+R("09"))^0)
+local prefix_sub=(C((S("+-")+R("09"))^0)+Cc(0))*P(".")*(C((S("+-")+R("09"))^0)+Cc(0))
local prefix_tab=P("{")*C((1-P("}"))^0)*P("}")+C((1-R("az","AZ","09","%%"))^0)
local format_s=function(f)
n=n+1
@@ -5545,6 +6047,10 @@ local format_F=function(f)
return format("format((a%s %% 1 == 0) and '%%i' or '%%%sf',a%s)",n,f,n)
end
end
+local format_k=function(b,a)
+ n=n+1
+ return format("formattedfloat(a%s,%i,%i)",n,b or 0,a or 0)
+end
local format_g=function(f)
n=n+1
return format("format('%%%sg',a%s)",f,n)
@@ -5693,25 +6199,6 @@ end
local format_W=function(f)
return format("nspaces[%s]",tonumber(f) or 0)
end
-local digit=patterns.digit
-local period=patterns.period
-local three=digit*digit*digit
-local splitter=Cs (
- (((1-(three^1*period))^1+C(three))*(Carg(1)*three)^1+C((1-period)^1))*(P(1)/""*Carg(2))*C(2)
-)
-patterns.formattednumber=splitter
-function number.formatted(n,sep1,sep2)
- local s=type(s)=="string" and n or format("%0.2f",n)
- if sep1==true then
- return lpegmatch(splitter,s,1,".",",")
- elseif sep1=="." then
- return lpegmatch(splitter,s,1,sep1,sep2 or ",")
- elseif sep1=="," then
- return lpegmatch(splitter,s,1,sep1,sep2 or ".")
- else
- return lpegmatch(splitter,s,1,sep1 or ",",sep2 or ".")
- end
-end
local format_m=function(f)
n=n+1
if not f or f=="" then
@@ -5736,9 +6223,16 @@ end
local format_extension=function(extensions,f,name)
local extension=extensions[name] or "tostring(%s)"
local f=tonumber(f) or 1
+ local w=find(extension,"%.%.%.")
if f==0 then
+ if w then
+ extension=gsub(extension,"%.%.%.","")
+ end
return extension
elseif f==1 then
+ if w then
+ extension=gsub(extension,"%.%.%.","%%s")
+ end
n=n+1
local a="a"..n
return format(extension,a,a)
@@ -5746,10 +6240,13 @@ local format_extension=function(extensions,f,name)
local a="a"..(n+f+1)
return format(extension,a,a)
else
+ if w then
+ extension=gsub(extension,"%.%.%.",rep("%%s,",f-1).."%%s")
+ end
local t={}
for i=1,f do
n=n+1
- t[#t+1]="a"..n
+ t[i]="a"..n
end
return format(extension,unpack(t))
end
@@ -5762,7 +6259,8 @@ local builder=Cs { "start",
+V("s")+V("q")+V("i")+V("d")+V("f")+V("F")+V("g")+V("G")+V("e")+V("E")+V("x")+V("X")+V("o")
+V("c")+V("C")+V("S")
+V("Q")
-+V("N")
++V("N")
++V("k")
+V("r")+V("h")+V("H")+V("u")+V("U")+V("p")+V("b")+V("t")+V("T")+V("l")+V("L")+V("I")+V("w")
+V("W")
+V("a")
@@ -5789,6 +6287,7 @@ local builder=Cs { "start",
["S"]=(prefix_any*P("S"))/format_S,
["Q"]=(prefix_any*P("Q"))/format_S,
["N"]=(prefix_any*P("N"))/format_N,
+ ["k"]=(prefix_sub*P("k"))/format_k,
["c"]=(prefix_any*P("c"))/format_c,
["C"]=(prefix_any*P("C"))/format_C,
["r"]=(prefix_any*P("r"))/format_r,
@@ -5909,7 +6408,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-tab"] = package.loaded["util-tab"] or true
--- original size: 28680, stripped down to: 18636
+-- original size: 27407, stripped down to: 17116
if not modules then modules={} end modules ['util-tab']={
version=1.001,
@@ -5923,7 +6422,7 @@ utilities.tables=utilities.tables or {}
local tables=utilities.tables
local format,gmatch,gsub,sub=string.format,string.gmatch,string.gsub,string.sub
local concat,insert,remove,sort=table.concat,table.insert,table.remove,table.sort
-local setmetatable,getmetatable,tonumber,tostring=setmetatable,getmetatable,tonumber,tostring
+local setmetatable,getmetatable,tonumber,tostring,rawget=setmetatable,getmetatable,tonumber,tostring,rawget
local type,next,rawset,tonumber,tostring,load,select=type,next,rawset,tonumber,tostring,load,select
local lpegmatch,P,Cs,Cc=lpeg.match,lpeg.P,lpeg.Cs,lpeg.Cc
local sortedkeys,sortedpairs=table.sortedkeys,table.sortedpairs
@@ -6063,7 +6562,7 @@ function table.tocsv(t,specification)
r[f]=tostring(field)
end
end
- result[#result+1]=concat(r,separator)
+ result[i+1]=concat(r,separator)
end
return concat(result,"\n")
else
@@ -6295,11 +6794,12 @@ function table.autokey(t,k)
return v
end
local selfmapper={ __index=function(t,k) t[k]=k return k end }
-function table.twowaymapper(t)
- if not t then
- t={}
- else
- for i=0,#t do
+function table.twowaymapper(t)
+ if not t then
+ t={}
+ else
+ local zero=rawget(t,0)
+ for i=zero and 0 or 1,#t do
local ti=t[i]
if ti then
local i=tostring(i)
@@ -6307,7 +6807,6 @@ function table.twowaymapper(t)
t[ti]=i
end
end
- t[""]=t[0] or ""
end
setmetatable(t,selfmapper)
return t
@@ -6346,6 +6845,7 @@ local f_table_entry=formatters["[%q]={"]
local f_table_finish=formatters["}"]
local spaces=utilities.strings.newrepeater(" ")
local original_serialize=table.serialize
+local is_simple_table=table.is_simple_table
local function serialize(root,name,specification)
if type(specification)=="table" then
return original_serialize(root,name,specification)
@@ -6353,54 +6853,6 @@ local function serialize(root,name,specification)
local t
local n=1
local unknown=false
- local function simple_table(t)
- local nt=#t
- if nt>0 then
- local n=0
- for _,v in next,t do
- n=n+1
- if type(v)=="table" then
- return nil
- end
- end
- local haszero=t[0]
- if n==nt then
- local tt={}
- for i=1,nt do
- local v=t[i]
- local tv=type(v)
- if tv=="number" then
- tt[i]=v
- elseif tv=="string" then
- tt[i]=format("%q",v)
- elseif tv=="boolean" then
- tt[i]=v and "true" or "false"
- else
- return nil
- 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
- end
local function do_serialize(root,name,depth,level,indexed)
if level>0 then
n=n+1
@@ -6425,7 +6877,7 @@ local function serialize(root,name,specification)
local last=0
last=#root
for k=1,last do
- if root[k]==nil then
+ if rawget(root,k)==nil then
last=k-1
break
end
@@ -6448,7 +6900,7 @@ local function serialize(root,name,specification)
if next(v)==nil then
n=n+1 t[n]=f_val_not(depth)
else
- local st=simple_table(v)
+ local st=is_simple_table(v)
if st then
n=n+1 t[n]=f_val_seq(depth,st)
else
@@ -6492,7 +6944,7 @@ local function serialize(root,name,specification)
n=n+1 t[n]=f_key_str_value_not(depth,tostring(k))
end
else
- local st=simple_table(v)
+ local st=is_simple_table(v)
if not st then
do_serialize(v,k,depth,level+1)
elseif tk=="number" then
@@ -6552,11 +7004,11 @@ local function serialize(root,name,specification)
end
if root then
if getmetatable(root) then
- local dummy=root._w_h_a_t_e_v_e_r_
+ local dummy=root._w_h_a_t_e_v_e_r_
root._w_h_a_t_e_v_e_r_=nil
end
if next(root)~=nil then
- local st=simple_table(root)
+ local st=is_simple_table(root)
if st then
return t[1]..f_fin_seq(st)
else
@@ -6570,7 +7022,12 @@ local function serialize(root,name,specification)
end
table.serialize=serialize
if setinspector then
- setinspector("table",function(v) if type(v)=="table" then print(serialize(v,"table",{})) return true end end)
+ setinspector("table",function(v)
+ if type(v)=="table" then
+ print(serialize(v,"table",{ metacheck=false }))
+ return true
+ end
+ end)
end
@@ -6580,7 +7037,7 @@ 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
+-- original size: 7567, stripped down to: 5575
if not modules then modules={} end modules ['util-fil']={
version=1.001,
@@ -6590,7 +7047,9 @@ if not modules then modules={} end modules ['util-fil']={
license="see context related readme files"
}
local byte=string.byte
-local extract=bit32.extract
+local char=string.char
+local extract=bit32 and bit32.extract
+local floor=math.floor
utilities=utilities or {}
local files={}
utilities.files=files
@@ -6609,6 +7068,7 @@ end
function files.size(f)
return f:seek("end")
end
+files.getsize=files.size
function files.setposition(f,n)
if zerobased[f] then
f:seek("set",n)
@@ -6646,6 +7106,10 @@ end
function files.readbytes(f,n)
return byte(f:read(n),1,n)
end
+function files.readbytetable(f,n)
+ local s=f:read(n or 1)
+ return { byte(s,1,#s) }
+end
function files.readchar(f)
return f:read(1)
end
@@ -6655,7 +7119,7 @@ end
function files.readinteger1(f)
local n=byte(f:read(1))
if n>=0x80 then
- return n-0xFF-1
+ return n-0x100
else
return n
end
@@ -6663,55 +7127,107 @@ end
files.readcardinal1=files.readbyte
files.readcardinal=files.readcardinal1
files.readinteger=files.readinteger1
+files.readsignedbyte=files.readinteger1
function files.readcardinal2(f)
local a,b=byte(f:read(2),1,2)
return 0x100*a+b
end
+function files.readcardinal2le(f)
+ local b,a=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
+ if a>=0x80 then
+ return 0x100*a+b-0x10000
else
- return n
+ return 0x100*a+b
+ end
+end
+function files.readinteger2le(f)
+ local b,a=byte(f:read(2),1,2)
+ if a>=0x80 then
+ return 0x100*a+b-0x10000
+ else
+ return 0x100*a+b
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.readcardinal3le(f)
+ local c,b,a=byte(f:read(3),1,3)
+ return 0x10000*a+0x100*b+c
+end
+function files.readinteger3(f)
+ local a,b,c=byte(f:read(3),1,3)
+ if a>=0x80 then
+ return 0x10000*a+0x100*b+c-0x1000000
+ else
+ return 0x10000*a+0x100*b+c
+ end
+end
+function files.readinteger3le(f)
+ local c,b,a=byte(f:read(3),1,3)
+ if a>=0x80 then
+ return 0x10000*a+0x100*b+c-0x1000000
+ else
+ return 0x10000*a+0x100*b+c
+ end
+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.readcardinal4le(f)
+ local d,c,b,a=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
+ if a>=0x80 then
+ return 0x1000000*a+0x10000*b+0x100*c+d-0x100000000
else
- return n
+ return 0x1000000*a+0x10000*b+0x100*c+d
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
+function files.readinteger4le(f)
+ local d,c,b,a=byte(f:read(4),1,4)
+ if a>=0x80 then
+ return 0x1000000*a+0x10000*b+0x100*c+d-0x100000000
else
- return n+(0x100*c+d)/0xFFFF
+ return 0x1000000*a+0x10000*b+0x100*c+d
end
end
-function files.read2dot14(f)
+function files.readfixed2(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
+ if a>=0x80 then
+ return (a-0x100)+b/0x100
+ else
+ return (a )+b/0x100
+ end
+end
+function files.readfixed4(f)
+ local a,b,c,d=byte(f:read(4),1,4)
+ if a>=0x80 then
+ return (0x100*a+b-0x10000)+(0x100*c+d)/0x10000
else
- n=extract(n,30,2)
- return n+m/0x4000
+ return (0x100*a+b )+(0x100*c+d)/0x10000
+ end
+end
+if extract then
+ local extract=bit32.extract
+ local band=bit32.band
+ function files.read2dot14(f)
+ local a,b=byte(f:read(2),1,2)
+ if a>=0x80 then
+ local n=-(0x100*a+b)
+ return-(extract(n,14,2)+(band(n,0x3FFF)/16384.0))
+ else
+ local n=0x100*a+b
+ return (extract(n,14,2)+(band(n,0x3FFF)/16384.0))
+ end
end
end
function files.skipshort(f,n)
@@ -6720,6 +7236,55 @@ end
function files.skiplong(f,n)
f:read(4*(n or 1))
end
+function files.writecardinal2(f,n)
+ local a=char(n%256)
+ n=floor(n/256)
+ local b=char(n%256)
+ f:write(b,a)
+end
+function files.writecardinal4(f,n)
+ local a=char(n%256)
+ n=floor(n/256)
+ local b=char(n%256)
+ n=floor(n/256)
+ local c=char(n%256)
+ n=floor(n/256)
+ local d=char(n%256)
+ f:write(d,c,b,a)
+end
+function files.writestring(f,s)
+ f:write(char(byte(s,1,#s)))
+end
+function files.writebyte(f,b)
+ f:write(char(b))
+end
+if fio and fio.readcardinal1 then
+ files.readcardinal1=fio.readcardinal1
+ files.readcardinal2=fio.readcardinal2
+ files.readcardinal3=fio.readcardinal3
+ files.readcardinal4=fio.readcardinal4
+ files.readinteger1=fio.readinteger1
+ files.readinteger2=fio.readinteger2
+ files.readinteger3=fio.readinteger3
+ files.readinteger4=fio.readinteger4
+ files.read2dot14=fio.read2dot14
+ files.setposition=fio.setposition
+ files.getposition=fio.getposition
+ files.readbyte=files.readcardinal1
+ files.readsignedbyte=files.readinteger1
+ files.readcardinal=files.readcardinal1
+ files.readinteger=files.readinteger1
+ local skipposition=fio.skipposition
+ files.skipposition=skipposition
+ files.readbytes=fio.readbytes
+ files.readbytetable=fio.readbytetable
+ function files.skipshort(f,n)
+ skipposition(f,2*(n or 1))
+ end
+ function files.skiplong(f,n)
+ skipposition(f,4*(n or 1))
+ end
+end
end -- of closure
@@ -6728,7 +7293,7 @@ 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
+-- original size: 8716, stripped down to: 6754
if not modules then modules={} end modules ['util-sac']={
version=1.001,
@@ -6738,7 +7303,7 @@ if not modules then modules={} end modules ['util-sac']={
license="see context related readme files"
}
local byte,sub=string.byte,string.sub
-local extract=bit32.extract
+local extract=bit32 and bit32.extract
utilities=utilities or {}
local streams={}
utilities.streams=streams
@@ -6796,6 +7361,12 @@ function streams.readbytes(f,n)
f[2]=j
return byte(f[1],i,j-1)
end
+function streams.readbytetable(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
@@ -6815,7 +7386,7 @@ function streams.readinteger1(f)
f[2]=i+1
local n=byte(f[1],i)
if n>=0x80 then
- return n-0xFF-1
+ return n-0x100
else
return n
end
@@ -6830,16 +7401,33 @@ function streams.readcardinal2(f)
local a,b=byte(f[1],i,j)
return 0x100*a+b
end
+function streams.readcardinal2LE(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local b,a=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
+ if a>=0x80 then
+ return 0x100*a+b-0x10000
else
- return n
+ return 0x100*a+b
+ end
+end
+function streams.readinteger2le(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local b,a=byte(f[1],i,j)
+ if a>=0x80 then
+ return 0x100*a+b-0x10000
+ else
+ return 0x100*a+b
end
end
function streams.readcardinal3(f)
@@ -6849,6 +7437,35 @@ function streams.readcardinal3(f)
local a,b,c=byte(f[1],i,j)
return 0x10000*a+0x100*b+c
end
+function streams.readcardinal3le(f)
+ local i=f[2]
+ local j=i+2
+ f[2]=j+1
+ local c,b,a=byte(f[1],i,j)
+ return 0x10000*a+0x100*b+c
+end
+function streams.readinteger3(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local a,b,c=byte(f[1],i,j)
+ if a>=0x80 then
+ return 0x10000*a+0x100*b+c-0x1000000
+ else
+ return 0x10000*a+0x100*b+c
+ end
+end
+function streams.readinteger3le(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local c,b,a=byte(f[1],i,j)
+ if a>=0x80 then
+ return 0x10000*a+0x100*b+c-0x1000000
+ else
+ return 0x10000*a+0x100*b+c
+ end
+end
function streams.readcardinal4(f)
local i=f[2]
local j=i+3
@@ -6861,11 +7478,21 @@ function streams.readinteger4(f)
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
+ if a>=0x80 then
+ return 0x1000000*a+0x10000*b+0x100*c+d-0x100000000
else
- return n
+ return 0x1000000*a+0x10000*b+0x100*c+d
+ end
+end
+function streams.readinteger4le(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local d,c,b,a=byte(f[1],i,j)
+ if a>=0x80 then
+ return 0x1000000*a+0x10000*b+0x100*c+d-0x100000000
+ else
+ return 0x1000000*a+0x10000*b+0x100*c+d
end
end
function streams.readfixed4(f)
@@ -6873,26 +7500,38 @@ function streams.readfixed4(f)
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
+ if a>=0x80 then
+ return (0x100*a+b-0x10000)+(0x100*c+d)/0x10000
else
- return n+(0x100*c+d)/0xFFFF
+ return (0x100*a+b )+(0x100*c+d)/0x10000
end
end
-function streams.read2dot14(f)
+function streams.readfixed2(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
+ if a>=0x80 then
+ return (a-0x100)+b/0x100
+ else
+ return (a )+b/0x100
+ end
+end
+if extract then
+ local extract=bit32.extract
+ local band=bit32.band
+ function streams.read2dot14(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local a,b=byte(f[1],i,j)
+ if a>=0x80 then
+ local n=-(0x100*a+b)
+ return-(extract(n,14,2)+(band(n,0x3FFF)/16384.0))
+ else
+ local n=0x100*a+b
+ return (extract(n,14,2)+(band(n,0x3FFF)/16384.0))
+ end
end
end
function streams.skipshort(f,n)
@@ -6901,6 +7540,92 @@ end
function streams.skiplong(f,n)
f[2]=f[2]+4*(n or 1)
end
+if sio and sio.readcardinal2 then
+ local readcardinal1=sio.readcardinal1
+ local readcardinal2=sio.readcardinal2
+ local readcardinal3=sio.readcardinal3
+ local readcardinal4=sio.readcardinal4
+ local readinteger1=sio.readinteger1
+ local readinteger2=sio.readinteger2
+ local readinteger3=sio.readinteger3
+ local readinteger4=sio.readinteger4
+ local readfixed2=sio.readfixed2
+ local readfixed4=sio.readfixed4
+ local read2dot14=sio.read2dot14
+ local readbytes=sio.readbytes
+ local readbytetable=sio.readbytetable
+ function streams.readcardinal1(f)
+ local i=f[2]
+ f[2]=i+1
+ return readcardinal1(f[1],i)
+ end
+ function streams.readcardinal2(f)
+ local i=f[2]
+ f[2]=i+2
+ return readcardinal2(f[1],i)
+ end
+ function streams.readcardinal3(f)
+ local i=f[2]
+ f[2]=i+3
+ return readcardinal3(f[1],i)
+ end
+ function streams.readcardinal4(f)
+ local i=f[2]
+ f[2]=i+4
+ return readcardinal4(f[1],i)
+ end
+ function streams.readinteger1(f)
+ local i=f[2]
+ f[2]=i+1
+ return readinteger1(f[1],i)
+ end
+ function streams.readinteger2(f)
+ local i=f[2]
+ f[2]=i+2
+ return readinteger2(f[1],i)
+ end
+ function streams.readinteger3(f)
+ local i=f[2]
+ f[2]=i+3
+ return readinteger3(f[1],i)
+ end
+ function streams.readinteger4(f)
+ local i=f[2]
+ f[2]=i+4
+ return readinteger4(f[1],i)
+ end
+ function streams.read2dot4(f)
+ local i=f[2]
+ f[2]=i+2
+ return read2dot4(f[1],i)
+ end
+ function streams.readbytes(f,n)
+ local i=f[2]
+ local s=f[3]
+ local p=i+n
+ if p>s then
+ f[2]=s+1
+ else
+ f[2]=p
+ end
+ return readbytes(f[1],i,n)
+ end
+ function streams.readbytetable(f,n)
+ local i=f[2]
+ local s=f[3]
+ local p=i+n
+ if p>s then
+ f[2]=s+1
+ else
+ f[2]=p
+ end
+ return readbytetable(f[1],i,n)
+ end
+ streams.readbyte=streams.readcardinal1
+ streams.readsignedbyte=streams.readinteger1
+ streams.readcardinal=streams.readcardinal1
+ streams.readinteger=streams.readinteger1
+end
end -- of closure
@@ -6909,7 +7634,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-sto"] = package.loaded["util-sto"] or true
--- original size: 4100, stripped down to: 2852
+-- original size: 3926, stripped down to: 2742
if not modules then modules={} end modules ['util-sto']={
version=1.001,
@@ -7049,7 +7774,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-prs"] = package.loaded["util-prs"] or true
--- original size: 23411, stripped down to: 16177
+-- original size: 22883, stripped down to: 16045
if not modules then modules={} end modules ['util-prs']={
version=1.001,
@@ -7211,6 +7936,21 @@ function parsers.settings_to_array(str,strict)
return { str }
end
end
+function parsers.settings_to_numbers(str)
+ if not str or str=="" then
+ return {}
+ end
+ if type(str)=="table" then
+ elseif find(str,",",1,true) then
+ str=lpegmatch(pattern,str)
+ else
+ return { tonumber(str) }
+ end
+ for i=1,#str do
+ str[i]=tonumber(str[i])
+ end
+ return str
+end
local value=P(lbrace*C((nobrace+nestedbraces)^0)*rbrace)+C((nestedbraces+nestedbrackets+nestedparents+(1-comma))^0)
local pattern=spaces*Ct(value*(separator*value)^0)
function parsers.settings_to_array_obey_fences(str)
@@ -7587,7 +8327,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-fmt"] = package.loaded["util-fmt"] or true
--- original size: 2350, stripped down to: 1847
+-- original size: 2274, stripped down to: 1781
if not modules then modules={} end modules ['util-fmt']={
version=1.001,
@@ -7668,7 +8408,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-set"] = package.loaded["trac-set"] or true
--- original size: 12862, stripped down to: 9104
+-- original size: 12454, stripped down to: 8840
if not modules then modules={} end modules ['trac-set']={
version=1.001,
@@ -7854,7 +8594,6 @@ function setters.list(t)
return user,system
end
function setters.show(t)
- local category=t.name
local list=setters.list(t)
t.report()
for k=1,#list do
@@ -7981,7 +8720,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-log"] = package.loaded["trac-log"] or true
--- original size: 30767, stripped down to: 21355
+-- original size: 30007, stripped down to: 20818
if not modules then modules={} end modules ['trac-log']={
version=1.001,
@@ -8027,6 +8766,14 @@ if tex and (tex.jobname or tex.formatname) then
if texio.setescape then
texio.setescape(0)
end
+ if arg then
+ for k,v in next,arg do
+ if v=="--ansi" or v=="--c:ansi" then
+ variant="ansi"
+ break
+ end
+ end
+ end
local function useluawrites()
local texio_write_nl=texio.write_nl
local texio_write=texio.write
@@ -8612,7 +9359,6 @@ function logs.stop_page_number()
end
logs.flush()
end
-local report_files=logs.reporter("files")
local nesting=0
local verbose=false
local hasscheme=url.hasscheme
@@ -8774,7 +9520,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-inf"] = package.loaded["trac-inf"] or true
--- original size: 6917, stripped down to: 5484
+-- original size: 8036, stripped down to: 5567
if not modules then modules={} end modules ['trac-inf']={
version=1.001,
@@ -8806,11 +9552,13 @@ end
local function resettiming(instance)
timers[instance or "notimer"]={ timing=0,loadtime=0 }
end
+local ticks=clock
+local seconds=function(n) return n or 0 end
local function starttiming(instance)
local timer=timers[instance or "notimer"]
local it=timer.timing or 0
if it==0 then
- timer.starttime=clock()
+ timer.starttime=ticks()
if not timer.loadtime then
timer.loadtime=0
end
@@ -8824,12 +9572,13 @@ local function stoptiming(instance)
timer.timing=it-1
else
local starttime=timer.starttime
- if starttime then
- local stoptime=clock()
+ if starttime and starttime>0 then
+ local stoptime=ticks()
local loadtime=stoptime-starttime
timer.stoptime=stoptime
timer.loadtime=timer.loadtime+loadtime
timer.timing=0
+ timer.starttime=0
return loadtime
end
end
@@ -8840,7 +9589,7 @@ local function elapsed(instance)
return instance or 0
else
local timer=timers[instance or "notimer"]
- return timer and timer.loadtime or 0
+ return timer and seconds(timer.loadtime) or 0
end
end
local function elapsedtime(instance)
@@ -8888,10 +9637,13 @@ function statistics.show()
local total,indirect=status.callbacks or 0,status.indirect_callbacks or 0
return format("%s direct, %s indirect, %s total",total-indirect,indirect,total)
end)
- if jit then
- local jitstatus={ jit.status() }
- if jitstatus[1] then
- register("luajit options",concat(jitstatus," ",2))
+ if TEXENGINE=="luajittex" and JITSUPPORTED then
+ local jitstatus=jit.status
+ if jitstatus then
+ local jitstatus={ jitstatus() }
+ if jitstatus[1] then
+ register("luajit options",concat(jitstatus," ",2))
+ end
end
end
register("lua properties",function()
@@ -8955,7 +9707,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-pro"] = package.loaded["trac-pro"] or true
--- original size: 6039, stripped down to: 3616
+-- original size: 5829, stripped down to: 3501
if not modules then modules={} end modules ['trac-pro']={
version=1.001,
@@ -9102,7 +9854,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-lua"] = package.loaded["util-lua"] or true
--- original size: 5142, stripped down to: 3611
+-- original size: 5396, stripped down to: 3708
if not modules then modules={} end modules ['util-lua']={
version=1.001,
@@ -9224,6 +9976,17 @@ function luautilities.loadstripped(...)
return load(dump(l,true))
end
end
+local finalizers={}
+setmetatable(finalizers,{
+ __gc=function(t)
+ for i=1,#t do
+ pcall(t[i])
+ end
+ end
+} )
+function luautilities.registerfinalizer(f)
+ finalizers[#finalizers+1]=f
+end
end -- of closure
@@ -9232,7 +9995,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-deb"] = package.loaded["util-deb"] or true
--- original size: 4030, stripped down to: 2718
+-- original size: 8911, stripped down to: 6504
if not modules then modules={} end modules ['util-deb']={
version=1.001,
@@ -9242,75 +10005,230 @@ if not modules then modules={} end modules ['util-deb']={
license="see context related readme files"
}
local debug=require "debug"
-local getinfo=debug.getinfo
-local type,next,tostring=type,next,tostring
-local format,find=string.format,string.find
-local is_boolean=string.is_boolean
+local getinfo,sethook=debug.getinfo,debug.sethook
+local type,next,tostring,tonumber=type,next,tostring,tonumber
+local format,find,sub,gsub=string.format,string.find,string.sub,string.gsub
+local insert,remove,sort=table.insert,table.remove,table.sort
+local setmetatableindex=table.setmetatableindex
utilities=utilities or {}
local debugger=utilities.debugger or {}
utilities.debugger=debugger
-local counters={}
-local names={}
local report=logs.reporter("debugger")
-local function hook()
- local f=getinfo(2)
- if f then
- local n="unknown"
- if f.what=="C" then
- n=f.name or '<anonymous>'
- if not names[n] then
- names[n]=format("%42s",n)
+local ticks=os.gettimeofday or os.clock
+local seconds=function(n) return n or 0 end
+local overhead=0
+local dummycalls=10*1000
+local nesting=0
+local names={}
+local initialize=false
+if not (FFISUPPORTED and ffi) then
+elseif os.type=="windows" then
+ initialize=function()
+ local kernel=ffilib("kernel32","system")
+ if kernel then
+ local tonumber=ffi.number or tonumber
+ ffi.cdef[[
+ int QueryPerformanceFrequency(int64_t *lpFrequency);
+ int QueryPerformanceCounter(int64_t *lpPerformanceCount);
+ ]]
+ local target=ffi.new("__int64[1]")
+ ticks=function()
+ if kernel.QueryPerformanceCounter(target)==1 then
+ return tonumber(target[0])
+ else
+ return 0
+ end
end
- else
- n=f.name or f.namewhat or f.what
- if not n or n=="" then
- n="?"
+ local target=ffi.new("__int64[1]")
+ seconds=function(ticks)
+ if kernel.QueryPerformanceFrequency(target)==1 then
+ return ticks/tonumber(target[0])
+ else
+ return 0
+ end
+ end
+ end
+ initialize=false
+ end
+elseif os.type=="unix" then
+ initialize=function()
+ local C=ffi.C
+ local tonumber=ffi.number or tonumber
+ ffi.cdef [[
+ /* what a mess */
+ typedef int clk_id_t;
+ typedef enum { CLOCK_REALTIME, CLOCK_MONOTONIC, CLOCK_PROCESS_CPUTIME_ID } clk_id;
+ typedef struct timespec { long sec; long nsec; } ctx_timespec;
+ int clock_gettime(clk_id_t timerid, struct timespec *t);
+ ]]
+ local target=ffi.new("ctx_timespec[?]",1)
+ local clock=C.CLOCK_PROCESS_CPUTIME_ID
+ ticks=function ()
+ C.clock_gettime(clock,target)
+ return tonumber(target[0].sec*1000000000+target[0].nsec)
+ end
+ seconds=function(ticks)
+ return ticks/1000000000
+ end
+ initialize=false
+ end
+end
+setmetatableindex(names,function(t,name)
+ local v=setmetatableindex(function(t,source)
+ local v=setmetatableindex(function(t,line)
+ local v={ total=0,count=0 }
+ t[line]=v
+ return v
+ end)
+ t[source]=v
+ return v
+ end)
+ t[name]=v
+ return v
+end)
+local function hook(where)
+ local f=getinfo(2,"nSl")
+ if f then
+ local source=f.short_src
+ if not source then
+ return
+ end
+ local line=f.linedefined or 0
+ local name=f.name
+ if not name then
+ local what=f.what
+ if what=="C" then
+ name="<anonymous>"
+ else
+ name=f.namewhat or what or "<unknown>"
end
- if not names[n] then
- names[n]=format("%42s : % 5i : %s",n,f.linedefined or 0,f.short_src or "unknown source")
+ end
+ local data=names[name][source][line]
+ if where=="call" then
+ data.count=data.count+1
+ insert(data,ticks())
+ elseif where=="return" then
+ local t=remove(data)
+ if t then
+ data.total=data.total+ticks()-t
end
end
- counters[n]=(counters[n] or 0)+1
end
end
-function debugger.showstats(printer,threshold)
- printer=printer or report
- threshold=threshold or 0
- local total,grandtotal,functions=0,0,0
+function debugger.showstats(printer,threshold)
+ local printer=printer or report
+ local calls=0
+ local functions=0
local dataset={}
- for name,count in next,counters do
- dataset[#dataset+1]={ name,count }
+ local length=0
+ local wholetime=0
+ local threshold=threshold or 0
+ for name,sources in next,names do
+ for source,lines in next,sources do
+ for line,data in next,lines do
+ local count=data.count
+ if count>threshold then
+ if #name>length then
+ length=#name
+ end
+ local total=data.total
+ local real=total
+ if real>0 then
+ real=total-(count*overhead/dummycalls)
+ if real<0 then
+ real=0
+ end
+ wholetime=wholetime+real
+ end
+ if line<0 then
+ line=0
+ end
+ dataset[#dataset+1]={ real,total,count,name,source,line }
+ end
+ end
+ end
end
- table.sort(dataset,function(a,b) return a[2]==b[2] and b[1]>a[1] or a[2]>b[2] end)
+ sort(dataset,function(a,b)
+ if a[1]==b[1] then
+ if a[2]==b[2] then
+ if a[3]==b[3] then
+ if a[4]==b[4] then
+ if a[5]==b[5] then
+ return a[6]<b[6]
+ else
+ return a[5]<b[5]
+ end
+ else
+ return a[4]<b[4]
+ end
+ else
+ return b[3]<a[3]
+ end
+ else
+ return b[2]<a[2]
+ end
+ else
+ return b[1]<a[1]
+ end
+ end)
+ if length>50 then
+ length=50
+ end
+ local fmt=string.formatters["%4.9k %4.9k %3.3k %8i %-"..length.."s %4i %s"]
for i=1,#dataset do
- local d=dataset[i]
- local name=d[1]
- local count=d[2]
- if count>threshold and not find(name,"for generator") then
- printer(format("%8i %s\n",count,names[name]))
- total=total+count
- end
- grandtotal=grandtotal+count
+ local data=dataset[i]
+ local real=data[1]
+ local total=data[2]
+ local count=data[3]
+ local name=data[4]
+ local source=data[5]
+ local line=data[6]
+ local percent=real/wholetime
+ calls=calls+count
functions=functions+1
+ name=gsub(name,"%s+"," ")
+ if #name>length then
+ name=sub(name,1,length)
+ end
+ printer(fmt(seconds(total),seconds(real),percent,count,name,line,source))
end
- printer("\n")
- printer(format("functions : % 10i\n",functions))
- printer(format("total : % 10i\n",total))
- printer(format("grand total: % 10i\n",grandtotal))
- printer(format("threshold : % 10i\n",threshold))
+ printer("")
+ printer(format("functions : %i",functions))
+ printer(format("calls : %i",calls))
+ printer(format("overhead : %f",seconds(overhead/1000)))
end
function debugger.savestats(filename,threshold)
local f=io.open(filename,'w')
if f then
- debugger.showstats(function(str) f:write(str) end,threshold)
+ debugger.showstats(function(str) f:write(str,"\n") end,threshold)
f:close()
end
end
function debugger.enable()
- debug.sethook(hook,"c")
+ if nesting==0 then
+ running=true
+ if initialize then
+ initialize()
+ end
+ sethook(hook,"cr")
+ local function dummy() end
+ local t=ticks()
+ for i=1,dummycalls do
+ dummy()
+ end
+ overhead=ticks()-t
+ end
+ if nesting>0 then
+ nesting=nesting+1
+ end
end
function debugger.disable()
- debug.sethook()
+ if nesting>0 then
+ nesting=nesting-1
+ end
+ if nesting==0 then
+ sethook()
+ end
end
local function showtraceback(rep)
local level=2
@@ -9334,9 +10252,661 @@ end -- of closure
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
+
+if not modules then modules={} end modules ['util-tpl']={
+ 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"
+}
+utilities.templates=utilities.templates or {}
+local templates=utilities.templates
+local trace_template=false trackers.register("templates.trace",function(v) trace_template=v end)
+local report_template=logs.reporter("template")
+local tostring=tostring
+local format,sub,byte=string.format,string.sub,string.byte
+local P,C,R,Cs,Cc,Carg,lpegmatch,lpegpatterns=lpeg.P,lpeg.C,lpeg.R,lpeg.Cs,lpeg.Cc,lpeg.Carg,lpeg.match,lpeg.patterns
+local replacer
+local function replacekey(k,t,how,recursive)
+ local v=t[k]
+ if not v then
+ if trace_template then
+ report_template("unknown key %a",k)
+ end
+ return ""
+ else
+ v=tostring(v)
+ if trace_template then
+ report_template("setting key %a to value %a",k,v)
+ end
+ if recursive then
+ return lpegmatch(replacer,v,1,t,how,recursive)
+ else
+ return v
+ end
+ end
+end
+local sqlescape=lpeg.replacer {
+ { "'","''" },
+ { "\\","\\\\" },
+ { "\r\n","\\n" },
+ { "\r","\\n" },
+}
+local sqlquoted=Cs(Cc("'")*sqlescape*Cc("'"))
+lpegpatterns.sqlescape=sqlescape
+lpegpatterns.sqlquoted=sqlquoted
+local luaescape=lpegpatterns.luaescape
+local escapers={
+ lua=function(s)
+ return lpegmatch(luaescape,s)
+ end,
+ sql=function(s)
+ return lpegmatch(sqlescape,s)
+ end,
+}
+local quotedescapers={
+ lua=function(s)
+ return format("%q",s)
+ end,
+ sql=function(s)
+ return lpegmatch(sqlquoted,s)
+ end,
+}
+local luaescaper=escapers.lua
+local quotedluaescaper=quotedescapers.lua
+local function replacekeyunquoted(s,t,how,recurse)
+ if how==false then
+ return replacekey(s,t,how,recurse)
+ else
+ local escaper=how and escapers[how] or luaescaper
+ return escaper(replacekey(s,t,how,recurse))
+ end
+end
+local function replacekeyquoted(s,t,how,recurse)
+ if how==false then
+ return replacekey(s,t,how,recurse)
+ else
+ local escaper=how and quotedescapers[how] or quotedluaescaper
+ return escaper(replacekey(s,t,how,recurse))
+ end
+end
+local function replaceoptional(l,m,r,t,how,recurse)
+ local v=t[l]
+ return v and v~="" and lpegmatch(replacer,r,1,t,how or "lua",recurse or false) or ""
+end
+local single=P("%")
+local double=P("%%")
+local lquoted=P("%[")
+local rquoted=P("]%")
+local lquotedq=P("%(")
+local rquotedq=P(")%")
+local escape=double/'%%'
+local nosingle=single/''
+local nodouble=double/''
+local nolquoted=lquoted/''
+local norquoted=rquoted/''
+local nolquotedq=lquotedq/''
+local norquotedq=rquotedq/''
+local noloptional=P("%?")/''
+local noroptional=P("?%")/''
+local nomoptional=P(":")/''
+local args=Carg(1)*Carg(2)*Carg(3)
+local key=nosingle*((C((1-nosingle )^1)*args)/replacekey )*nosingle
+local quoted=nolquotedq*((C((1-norquotedq )^1)*args)/replacekeyquoted )*norquotedq
+local unquoted=nolquoted*((C((1-norquoted )^1)*args)/replacekeyunquoted)*norquoted
+local optional=noloptional*((C((1-nomoptional)^1)*nomoptional*C((1-noroptional)^1)*args)/replaceoptional)*noroptional
+local any=P(1)
+ replacer=Cs((unquoted+quoted+escape+optional+key+any)^0)
+local function replace(str,mapping,how,recurse)
+ if mapping and str then
+ return lpegmatch(replacer,str,1,mapping,how or "lua",recurse or false) or str
+ else
+ return str
+ end
+end
+templates.replace=replace
+function templates.replacer(str,how,recurse)
+ return function(mapping)
+ return lpegmatch(replacer,str,1,mapping,how or "lua",recurse or false) or str
+ end
+end
+function templates.load(filename,mapping,how,recurse)
+ local data=io.loaddata(filename) or ""
+ if mapping and next(mapping) then
+ return replace(data,mapping,how,recurse)
+ else
+ return data
+ end
+end
+function templates.resolve(t,mapping,how,recurse)
+ if not mapping then
+ mapping=t
+ end
+ for k,v in next,t do
+ t[k]=replace(v,mapping,how,recurse)
+ end
+ return t
+end
+
+
+end -- of closure
+
+do -- create closure to overcome 200 locals limit
+
+package.loaded["util-sbx"] = package.loaded["util-sbx"] or true
+
+-- original size: 20309, stripped down to: 13848
+
+if not modules then modules={} end modules ['util-sbx']={
+ 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"
+}
+if not sandbox then require("l-sandbox") end
+local next,type=next,type
+local replace=utilities.templates.replace
+local collapsepath=file.collapsepath
+local expandname=dir.expandname
+local sortedhash=table.sortedhash
+local lpegmatch=lpeg.match
+local platform=os.type
+local P,S,C=lpeg.P,lpeg.S,lpeg.C
+local gsub=string.gsub
+local lower=string.lower
+local find=string.find
+local concat=string.concat
+local unquoted=string.unquoted
+local optionalquoted=string.optionalquoted
+local basename=file.basename
+local sandbox=sandbox
+local validroots={}
+local validrunners={}
+local validbinaries=true
+local validlibraries=true
+local validators={}
+local finalized=nil
+local trace=false
+local p_validroot=nil
+local p_split=lpeg.firstofsplit(" ")
+local report=logs.reporter("sandbox")
+trackers.register("sandbox",function(v) trace=v end)
+sandbox.setreporter(report)
+sandbox.finalizer {
+ category="files",
+ action=function()
+ finalized=true
+ end
+}
+local function registerroot(root,what)
+ if finalized then
+ report("roots are already finalized")
+ else
+ if type(root)=="table" then
+ root,what=root[1],root[2]
+ end
+ if type(root)=="string" and root~="" then
+ root=collapsepath(expandname(root))
+ if what=="r" or what=="ro" or what=="readable" then
+ what="read"
+ elseif what=="w" or what=="wo" or what=="writable" then
+ what="write"
+ end
+ validroots[root]=what=="write" or false
+ end
+ end
+end
+sandbox.finalizer {
+ category="files",
+ action=function()
+ if p_validroot then
+ report("roots are already initialized")
+ else
+ sandbox.registerroot(".","write")
+ for name in sortedhash(validroots) do
+ if p_validroot then
+ p_validroot=P(name)+p_validroot
+ else
+ p_validroot=P(name)
+ end
+ end
+ p_validroot=p_validroot/validroots
+ end
+ end
+}
+local function registerbinary(name)
+ if finalized then
+ report("binaries are already finalized")
+ elseif type(name)=="string" and name~="" then
+ if not validbinaries then
+ return
+ end
+ if validbinaries==true then
+ validbinaries={ [name]=true }
+ else
+ validbinaries[name]=true
+ end
+ elseif name==true then
+ validbinaries={}
+ end
+end
+local function registerlibrary(name)
+ if finalized then
+ report("libraries are already finalized")
+ elseif type(name)=="string" and name~="" then
+ if not validlibraries then
+ return
+ end
+ if validlibraries==true then
+ validlibraries={ [name]=true }
+ else
+ validlibraries[name]=true
+ end
+ elseif name==true then
+ validlibraries={}
+ end
+end
+local p_write=S("wa") p_write=(1-p_write)^0*p_write
+local p_path=S("\\/~$%:") p_path=(1-p_path )^0*p_path
+local function normalized(name)
+ if platform=="windows" then
+ name=gsub(name,"/","\\")
+ end
+ return name
+end
+function sandbox.possiblepath(name)
+ return lpegmatch(p_path,name) and true or false
+end
+local filenamelogger=false
+function sandbox.setfilenamelogger(l)
+ filenamelogger=type(l)=="function" and l or false
+end
+local function validfilename(name,what)
+ if p_validroot and type(name)=="string" and lpegmatch(p_path,name) then
+ local asked=collapsepath(expandname(name))
+ local okay=lpegmatch(p_validroot,asked)
+ if okay==true then
+ if filenamelogger then
+ filenamelogger(name,"w",asked,true)
+ end
+ return name
+ elseif okay==false then
+ if not what then
+ if filenamelogger then
+ filenamelogger(name,"r",asked,true)
+ end
+ return name
+ elseif lpegmatch(p_write,what) then
+ if filenamelogger then
+ filenamelogger(name,"w",asked,false)
+ end
+ return
+ else
+ if filenamelogger then
+ filenamelogger(name,"r",asked,true)
+ end
+ return name
+ end
+ elseif filenamelogger then
+ filenamelogger(name,"*",name,false)
+ end
+ else
+ return name
+ end
+end
+local function readable(name,finalized)
+ return validfilename(name,"r")
+end
+local function normalizedreadable(name,finalized)
+ local valid=validfilename(name,"r")
+ if valid then
+ return normalized(valid)
+ end
+end
+local function writeable(name,finalized)
+ return validfilename(name,"w")
+end
+local function normalizedwriteable(name,finalized)
+ local valid=validfilename(name,"w")
+ if valid then
+ return normalized(valid)
+ end
+end
+validators.readable=readable
+validators.writeable=normalizedwriteable
+validators.normalizedreadable=normalizedreadable
+validators.normalizedwriteable=writeable
+validators.filename=readable
+table.setmetatableindex(validators,function(t,k)
+ if k then
+ t[k]=readable
+ end
+ return readable
+end)
+function validators.string(s,finalized)
+ if finalized and suspicious(s) then
+ return ""
+ else
+ return s
+ end
+end
+function validators.cache(s)
+ if finalized then
+ return basename(s)
+ else
+ return s
+ end
+end
+function validators.url(s)
+ if finalized and find("^file:") then
+ return ""
+ else
+ return s
+ end
+end
+local function filehandlerone(action,one,...)
+ local checkedone=validfilename(one)
+ if checkedone then
+ return action(one,...)
+ else
+ end
+end
+local function filehandlertwo(action,one,two,...)
+ local checkedone=validfilename(one)
+ if checkedone then
+ local checkedtwo=validfilename(two)
+ if checkedtwo then
+ return action(one,two,...)
+ else
+ end
+ else
+ end
+end
+local function iohandler(action,one,...)
+ if type(one)=="string" then
+ local checkedone=validfilename(one)
+ if checkedone then
+ return action(one,...)
+ end
+ elseif one then
+ return action(one,...)
+ else
+ return action()
+ end
+end
+local osexecute=sandbox.original(os.execute)
+local iopopen=sandbox.original(io.popen)
+local reported={}
+local function validcommand(name,program,template,checkers,defaults,variables,reporter,strict)
+ if validbinaries~=false and (validbinaries==true or validbinaries[program]) then
+ if variables then
+ for variable,value in next,variables do
+ local checker=validators[checkers[variable]]
+ if checker then
+ value=checker(unquoted(value),strict)
+ if value then
+ variables[variable]=optionalquoted(value)
+ else
+ report("variable %a with value %a fails the check",variable,value)
+ return
+ end
+ else
+ report("variable %a has no checker",variable)
+ return
+ end
+ end
+ for variable,default in next,defaults do
+ local value=variables[variable]
+ if not value or value=="" then
+ local checker=validators[checkers[variable]]
+ if checker then
+ default=checker(unquoted(default),strict)
+ if default then
+ variables[variable]=optionalquoted(default)
+ else
+ report("variable %a with default %a fails the check",variable,default)
+ return
+ end
+ end
+ end
+ end
+ end
+ local command=program.." "..replace(template,variables)
+ if reporter then
+ reporter("executing runner %a: %s",name,command)
+ elseif trace then
+ report("executing runner %a: %s",name,command)
+ end
+ return command
+ elseif not reported[name] then
+ report("executing program %a of runner %a is not permitted",program,name)
+ reported[name]=true
+ end
+end
+local runners={
+ resultof=function(...)
+ local command=validcommand(...)
+ if command then
+ if trace then
+ report("resultof: %s",command)
+ end
+ local handle=iopopen(command,"r")
+ if handle then
+ local result=handle:read("*all") or ""
+ handle:close()
+ return result
+ end
+ end
+ end,
+ execute=function(...)
+ local command=validcommand(...)
+ if command then
+ if trace then
+ report("execute: %s",command)
+ end
+ return osexecute(command)
+ end
+ end,
+ pipeto=function(...)
+ local command=validcommand(...)
+ if command then
+ if trace then
+ report("pipeto: %s",command)
+ end
+ return iopopen(command,"w")
+ end
+ end,
+}
+function sandbox.registerrunner(specification)
+ if type(specification)=="string" then
+ local wrapped=validrunners[specification]
+ inspect(table.sortedkeys(validrunners))
+ if wrapped then
+ return wrapped
+ else
+ report("unknown predefined runner %a",specification)
+ return
+ end
+ end
+ if type(specification)~="table" then
+ report("specification should be a table (or string)")
+ return
+ end
+ local name=specification.name
+ if type(name)~="string" then
+ report("invalid name, string expected",name)
+ return
+ end
+ if validrunners[name] then
+ report("invalid name, runner %a already defined")
+ return
+ end
+ local program=specification.program
+ if type(program)=="string" then
+ elseif type(program)=="table" then
+ program=program[platform] or program.default or program.unix
+ end
+ if type(program)~="string" or program=="" then
+ report("invalid runner %a specified for platform %a",name,platform)
+ return
+ end
+ local template=specification.template
+ if not template then
+ report("missing template for runner %a",name)
+ return
+ end
+ local method=specification.method or "execute"
+ local checkers=specification.checkers or {}
+ local defaults=specification.defaults or {}
+ local runner=runners[method]
+ if runner then
+ local finalized=finalized
+ local wrapped=function(variables)
+ return runner(name,program,template,checkers,defaults,variables,specification.reporter,finalized)
+ end
+ validrunners[name]=wrapped
+ return wrapped
+ else
+ validrunners[name]=nil
+ report("invalid method for runner %a",name)
+ end
+end
+function sandbox.getrunner(name)
+ return name and validrunners[name]
+end
+local function suspicious(str)
+ return (find(str,"[/\\]") or find(command,"%.%.")) and true or false
+end
+local function binaryrunner(action,command,...)
+ if validbinaries==false then
+ report("no binaries permitted, ignoring command: %s",command)
+ return
+ end
+ if type(command)~="string" then
+ report("command should be a string")
+ return
+ end
+ local program=lpegmatch(p_split,command)
+ if not program or program=="" then
+ report("unable to filter binary from command: %s",command)
+ return
+ end
+ if validbinaries==true then
+ elseif not validbinaries[program] then
+ report("binary not permitted, ignoring command: %s",command)
+ return
+ elseif suspicious(command) then
+ report("/ \\ or .. found, ignoring command (use sandbox.registerrunner): %s",command)
+ return
+ end
+ return action(command,...)
+end
+local function dummyrunner(action,command,...)
+ if type(command)=="table" then
+ command=concat(command," ",command[0] and 0 or 1)
+ end
+ report("ignoring command: %s",command)
+end
+sandbox.filehandlerone=filehandlerone
+sandbox.filehandlertwo=filehandlertwo
+sandbox.iohandler=iohandler
+function sandbox.disablerunners()
+ validbinaries=false
+end
+function sandbox.disablelibraries()
+ validlibraries=false
+end
+if FFISUPPORTED and ffi then
+ function sandbox.disablelibraries()
+ validlibraries=false
+ for k,v in next,ffi do
+ if k~="gc" then
+ ffi[k]=nil
+ end
+ end
+ end
+ local load=ffi.load
+ if load then
+ local reported={}
+ function ffi.load(name,...)
+ if validlibraries==false then
+ elseif validlibraries==true then
+ return load(name,...)
+ elseif validlibraries[name] then
+ return load(name,...)
+ else
+ end
+ if not reported[name] then
+ report("using library %a is not permitted",name)
+ reported[name]=true
+ end
+ return nil
+ end
+ end
+end
+local overload=sandbox.overload
+local register=sandbox.register
+ overload(loadfile,filehandlerone,"loadfile")
+if io then
+ overload(io.open,filehandlerone,"io.open")
+ overload(io.popen,binaryrunner,"io.popen")
+ overload(io.input,iohandler,"io.input")
+ overload(io.output,iohandler,"io.output")
+ overload(io.lines,filehandlerone,"io.lines")
+end
+if os then
+ overload(os.execute,binaryrunner,"os.execute")
+ overload(os.spawn,dummyrunner,"os.spawn")
+ overload(os.exec,dummyrunner,"os.exec")
+ overload(os.resultof,binaryrunner,"os.resultof")
+ overload(os.pipeto,binaryrunner,"os.pipeto")
+ overload(os.rename,filehandlertwo,"os.rename")
+ overload(os.remove,filehandlerone,"os.remove")
+end
+if lfs then
+ overload(lfs.chdir,filehandlerone,"lfs.chdir")
+ overload(lfs.mkdir,filehandlerone,"lfs.mkdir")
+ overload(lfs.rmdir,filehandlerone,"lfs.rmdir")
+ overload(lfs.isfile,filehandlerone,"lfs.isfile")
+ overload(lfs.isdir,filehandlerone,"lfs.isdir")
+ overload(lfs.attributes,filehandlerone,"lfs.attributes")
+ overload(lfs.dir,filehandlerone,"lfs.dir")
+ overload(lfs.lock_dir,filehandlerone,"lfs.lock_dir")
+ overload(lfs.touch,filehandlerone,"lfs.touch")
+ overload(lfs.link,filehandlertwo,"lfs.link")
+ overload(lfs.setmode,filehandlerone,"lfs.setmode")
+ overload(lfs.readlink,filehandlerone,"lfs.readlink")
+ overload(lfs.shortname,filehandlerone,"lfs.shortname")
+ overload(lfs.symlinkattributes,filehandlerone,"lfs.symlinkattributes")
+end
+if zip then
+ zip.open=register(zip.open,filehandlerone,"zip.open")
+end
+if fontloader then
+ fontloader.open=register(fontloader.open,filehandlerone,"fontloader.open")
+ fontloader.info=register(fontloader.info,filehandlerone,"fontloader.info")
+end
+if epdf then
+ epdf.open=register(epdf.open,filehandlerone,"epdf.open")
+end
+sandbox.registerroot=registerroot
+sandbox.registerbinary=registerbinary
+sandbox.registerlibrary=registerlibrary
+sandbox.validfilename=validfilename
+
+
+end -- of closure
+
+do -- create closure to overcome 200 locals limit
+
package.loaded["util-mrg"] = package.loaded["util-mrg"] or true
--- original size: 7985, stripped down to: 6153
+-- original size: 7757, stripped down to: 6015
if not modules then modules={} end modules ['util-mrg']={
version=1.001,
@@ -9511,154 +11081,9 @@ end -- of closure
do -- create closure to overcome 200 locals limit
-package.loaded["util-tpl"] = package.loaded["util-tpl"] or true
-
--- original size: 7313, stripped down to: 4076
-
-if not modules then modules={} end modules ['util-tpl']={
- 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"
-}
-utilities.templates=utilities.templates or {}
-local templates=utilities.templates
-local trace_template=false trackers.register("templates.trace",function(v) trace_template=v end)
-local report_template=logs.reporter("template")
-local tostring=tostring
-local format,sub,byte=string.format,string.sub,string.byte
-local P,C,R,Cs,Cc,Carg,lpegmatch,lpegpatterns=lpeg.P,lpeg.C,lpeg.R,lpeg.Cs,lpeg.Cc,lpeg.Carg,lpeg.match,lpeg.patterns
-local replacer
-local function replacekey(k,t,how,recursive)
- local v=t[k]
- if not v then
- if trace_template then
- report_template("unknown key %a",k)
- end
- return ""
- else
- v=tostring(v)
- if trace_template then
- report_template("setting key %a to value %a",k,v)
- end
- if recursive then
- return lpegmatch(replacer,v,1,t,how,recursive)
- else
- return v
- end
- end
-end
-local sqlescape=lpeg.replacer {
- { "'","''" },
- { "\\","\\\\" },
- { "\r\n","\\n" },
- { "\r","\\n" },
-}
-local sqlquoted=Cs(Cc("'")*sqlescape*Cc("'"))
-lpegpatterns.sqlescape=sqlescape
-lpegpatterns.sqlquoted=sqlquoted
-local luaescape=lpegpatterns.luaescape
-local escapers={
- lua=function(s)
- return lpegmatch(luaescape,s)
- end,
- sql=function(s)
- return lpegmatch(sqlescape,s)
- end,
-}
-local quotedescapers={
- lua=function(s)
- return format("%q",s)
- end,
- sql=function(s)
- return lpegmatch(sqlquoted,s)
- end,
-}
-local luaescaper=escapers.lua
-local quotedluaescaper=quotedescapers.lua
-local function replacekeyunquoted(s,t,how,recurse)
- if how==false then
- return replacekey(s,t,how,recurse)
- else
- local escaper=how and escapers[how] or luaescaper
- return escaper(replacekey(s,t,how,recurse))
- end
-end
-local function replacekeyquoted(s,t,how,recurse)
- if how==false then
- return replacekey(s,t,how,recurse)
- else
- local escaper=how and quotedescapers[how] or quotedluaescaper
- return escaper(replacekey(s,t,how,recurse))
- end
-end
-local function replaceoptional(l,m,r,t,how,recurse)
- local v=t[l]
- return v and v~="" and lpegmatch(replacer,r,1,t,how or "lua",recurse or false) or ""
-end
-local single=P("%")
-local double=P("%%")
-local lquoted=P("%[")
-local rquoted=P("]%")
-local lquotedq=P("%(")
-local rquotedq=P(")%")
-local escape=double/'%%'
-local nosingle=single/''
-local nodouble=double/''
-local nolquoted=lquoted/''
-local norquoted=rquoted/''
-local nolquotedq=lquotedq/''
-local norquotedq=rquotedq/''
-local noloptional=P("%?")/''
-local noroptional=P("?%")/''
-local nomoptional=P(":")/''
-local args=Carg(1)*Carg(2)*Carg(3)
-local key=nosingle*((C((1-nosingle )^1)*args)/replacekey )*nosingle
-local quoted=nolquotedq*((C((1-norquotedq )^1)*args)/replacekeyquoted )*norquotedq
-local unquoted=nolquoted*((C((1-norquoted )^1)*args)/replacekeyunquoted)*norquoted
-local optional=noloptional*((C((1-nomoptional)^1)*nomoptional*C((1-noroptional)^1)*args)/replaceoptional)*noroptional
-local any=P(1)
- replacer=Cs((unquoted+quoted+escape+optional+key+any)^0)
-local function replace(str,mapping,how,recurse)
- if mapping and str then
- return lpegmatch(replacer,str,1,mapping,how or "lua",recurse or false) or str
- else
- return str
- end
-end
-templates.replace=replace
-function templates.replacer(str,how,recurse)
- return function(mapping)
- return lpegmatch(replacer,str,1,mapping,how or "lua",recurse or false) or str
- end
-end
-function templates.load(filename,mapping,how,recurse)
- local data=io.loaddata(filename) or ""
- if mapping and next(mapping) then
- return replace(data,mapping,how,recurse)
- else
- return data
- end
-end
-function templates.resolve(t,mapping,how,recurse)
- if not mapping then
- mapping=t
- end
- for k,v in next,t do
- t[k]=replace(v,mapping,how,recurse)
- end
- return t
-end
-
-
-end -- of closure
-
-do -- create closure to overcome 200 locals limit
-
package.loaded["util-env"] = package.loaded["util-env"] or true
--- original size: 8284, stripped down to: 5176
+-- original size: 9246, stripped down to: 5038
if not modules then modules={} end modules ['util-env']={
version=1.001,
@@ -9845,7 +11270,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["luat-env"] = package.loaded["luat-env"] or true
--- original size: 6358, stripped down to: 4257
+-- original size: 6174, stripped down to: 4141
if not modules then modules={} end modules ['luat-env']={
version=1.001,
@@ -9998,7 +11423,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-tab"] = package.loaded["lxml-tab"] or true
--- original size: 56973, stripped down to: 35872
+-- original size: 57003, stripped down to: 35696
if not modules then modules={} end modules ['lxml-tab']={
version=1.001,
@@ -10013,7 +11438,7 @@ if lpeg.setmaxstack then lpeg.setmaxstack(1000) end
xml=xml or {}
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 type,next,setmetatable,getmetatable,tonumber,rawset,select=type,next,setmetatable,getmetatable,tonumber,rawset,select
local lower,find,match,gsub=string.lower,string.find,string.match,string.gsub
local sort=table.sort
local utfchar=utf.char
@@ -10140,6 +11565,7 @@ local function add_empty(spacing,namespace,tag)
tg=tag,
at=at,
dt={},
+ ni=nt,
__p__=top
}
dt[nt]=t
@@ -10161,6 +11587,7 @@ local function add_begin(spacing,namespace,tag)
tg=tag,
at=at,
dt={},
+ ni=nil,
__p__=stack[level]
}
setmetatable(top,mt)
@@ -10188,6 +11615,7 @@ local function add_end(spacing,namespace,tag)
dt=top.dt
nt=#dt+1
dt[nt]=toclose
+ toclose.ni=nt
if toclose.at.xmlns then
remove(xmlns)
end
@@ -10232,7 +11660,13 @@ local function add_special(what,spacing,text)
if strip and (what=="@cm@" or what=="@dt@") then
else
nt=nt+1
- dt[nt]={ special=true,ns="",tg=what,dt={ text } }
+ dt[nt]={
+ special=true,
+ ns="",
+ tg=what,
+ ni=nil,
+ dt={ text },
+ }
end
end
local function set_message(txt)
@@ -10285,7 +11719,6 @@ do
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={
@@ -10327,13 +11760,27 @@ do
[ [[}]] ]="&U+7D;",
[ [[~]] ]="&U+7E;",
}
+ local privates_x={
+ [ [["]] ]="&U+22;",
+ [ [[#]] ]="&U+23;",
+ [ [[$]] ]="&U+24;",
+ [ [[%]] ]="&U+25;",
+ [ [[']] ]="&U+27;",
+ [ [[\]] ]="&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")
+ local despecialized=utf.remapper(privates_x,"dynamic")
xml.unprivatized=unprivatized
xml.unspecialized=unspecialized
+ xml.despecialized=despecialized
xml.escaped=escaped
local function unescaped(s)
local p=privates_n[s]
@@ -10778,6 +12225,10 @@ local grammar_unparsed_text=P { "preamble",
local function _xmlconvert_(data,settings)
settings=settings or {}
preparexmlstate(settings)
+ local preprocessor=settings.preprocessor
+ if data and data~="" and type(preprocessor)=="function" then
+ data=preprocessor(data,settings) or data
+ end
if settings.parent_root then
mt=getmetatable(settings.parent_root)
else
@@ -10919,14 +12370,24 @@ function xml.toxml(data)
return data
end
end
-local function copy(old)
+local function copy(old,p)
if old then
local new={}
for k,v in next,old do
- if type(v)=="table" then
- new[k]=table.copy(v)
- else
+ local t=type(v)=="table"
+ if k=="at" then
+ local t={}
+ for k,v in next,v do
+ t[k]=v
+ end
+ new[k]=t
+ elseif k=="dt" then
+ v.__p__=nil
+ v=copy(v,new)
new[k]=v
+ v.__p__=p
+ else
+ new[k]=v
end
end
local mt=getmetatable(old)
@@ -11157,18 +12618,26 @@ local xmlfilehandler=newhandlers {
function xml.save(root,name)
serialize(root,xmlfilehandler,name)
end
-local result
+local result,r,threshold={},0,512
local xmlstringhandler=newhandlers {
name="string",
initialize=function()
- result={}
+ r=0
return result
end,
finalize=function()
- return concat(result)
+ local done=concat(result,"",1,r)
+ r=0
+ if r>threshold then
+ result={}
+ end
+ return done
end,
handle=function(...)
- result[#result+1]=concat {... }
+ for i=1,select("#",...) do
+ r=r+1
+ result[r]=select(i,...)
+ end
end,
}
local function xmltostring(root)
@@ -11320,7 +12789,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-lpt"] = package.loaded["lxml-lpt"] or true
--- original size: 53892, stripped down to: 32508
+-- original size: 53301, stripped down to: 32477
if not modules then modules={} end modules ['lxml-lpt']={
version=1.001,
@@ -11702,6 +13171,14 @@ local function apply_expression(list,expression,order)
end
return collected
end
+local function apply_selector(list,specification)
+ if xml.applyselector then
+ apply_selector=xml.applyselector
+ return apply_selector(list,specification)
+ else
+ return list
+ end
+end
local P,V,C,Cs,Cc,Ct,R,S,Cg,Cb=lpeg.P,lpeg.V,lpeg.C,lpeg.Cs,lpeg.Cc,lpeg.Ct,lpeg.R,lpeg.S,lpeg.Cg,lpeg.Cb
local spaces=S(" \n\r\t\f")^0
local lp_space=S(" \n\r\t\f")
@@ -11825,6 +13302,9 @@ end
local function register_nodes(nodetest,nodes)
return { kind="nodes",nodetest=nodetest,nodes=nodes }
end
+local function register_selector(specification)
+ return { kind="selector",specification=specification }
+end
local function register_expression(expression)
local converted=lpegmatch(converter,expression)
local runner=load(format(template_e,converted))
@@ -11865,34 +13345,36 @@ local pathparser=Ct { "patterns",
(V("special")*spaces*P(-1) )+(V("initial")*spaces*V("step")*spaces*(P("/")*spaces*V("step")*spaces)^0 )
),
protocol=Cg(V("letters"),"protocol")*P("://")+Cg(Cc(nil),"protocol"),
- step=((V("shortcuts")+P("/")+V("axis"))*spaces*V("nodes")^0+V("error"))*spaces*V("expressions")^0*spaces*V("finalizer")^0,
+ step=((V("shortcuts")+V("selector")+P("/")+V("axis"))*spaces*V("nodes")^0+V("error"))*spaces*V("expressions")^0*spaces*V("finalizer")^0,
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")+V("s_lastmatch"),
shortcuts=V("shortcuts_a")*(spaces*"/"*spaces*V("shortcuts_a"))^0,
s_descendant_or_self=(P("***/")+P("/"))*Cc(register_descendant_or_self),
s_descendant=P("**")*Cc(register_descendant),
- s_child=P("*")*no_nextcolon*Cc(register_child ),
- s_parent=P("..")*Cc(register_parent ),
- s_self=P("." )*Cc(register_self ),
- s_root=P("^^")*Cc(register_root ),
- s_ancestor=P("^")*Cc(register_ancestor ),
- descendant=P("descendant::")*Cc(register_descendant ),
- child=P("child::")*Cc(register_child ),
- parent=P("parent::")*Cc(register_parent ),
- self=P("self::")*Cc(register_self ),
- root=P('root::')*Cc(register_root ),
- ancestor=P('ancestor::')*Cc(register_ancestor ),
- descendant_or_self=P('descendant-or-self::')*Cc(register_descendant_or_self ),
- ancestor_or_self=P('ancestor-or-self::')*Cc(register_ancestor_or_self ),
- following=P('following::')*Cc(register_following ),
- following_sibling=P('following-sibling::')*Cc(register_following_sibling ),
- preceding=P('preceding::')*Cc(register_preceding ),
- preceding_sibling=P('preceding-sibling::')*Cc(register_preceding_sibling ),
- reverse_sibling=P('reverse-sibling::')*Cc(register_reverse_sibling ),
- last_match=P('last-match::')*Cc(register_last_match ),
+ s_child=P("*")*no_nextcolon*Cc(register_child),
+ s_parent=P("..")*Cc(register_parent),
+ s_self=P("." )*Cc(register_self),
+ s_root=P("^^")*Cc(register_root),
+ s_ancestor=P("^")*Cc(register_ancestor),
+ s_lastmatch=P("=")*Cc(register_last_match),
+ descendant=P("descendant::")*Cc(register_descendant),
+ child=P("child::")*Cc(register_child),
+ parent=P("parent::")*Cc(register_parent),
+ self=P("self::")*Cc(register_self),
+ root=P('root::')*Cc(register_root),
+ ancestor=P('ancestor::')*Cc(register_ancestor),
+ descendant_or_self=P('descendant-or-self::')*Cc(register_descendant_or_self),
+ ancestor_or_self=P('ancestor-or-self::')*Cc(register_ancestor_or_self),
+ following=P('following::')*Cc(register_following),
+ following_sibling=P('following-sibling::')*Cc(register_following_sibling),
+ preceding=P('preceding::')*Cc(register_preceding),
+ preceding_sibling=P('preceding-sibling::')*Cc(register_preceding_sibling),
+ reverse_sibling=P('reverse-sibling::')*Cc(register_reverse_sibling),
+ last_match=P('last-match::')*Cc(register_last_match),
+ selector=P("{")*C((1-P("}"))^1)*P("}")/register_selector,
nodes=(V("nodefunction")*spaces*P("(")*V("nodeset")*P(")")+V("nodetest")*V("nodeset"))/register_nodes,
expressions=expression/register_expression,
letters=R("az")^1,
@@ -12042,6 +13524,8 @@ do
collected=apply_nodes(collected,pi.nodetest,pi.nodes)
elseif kind=="expression" then
collected=apply_expression(collected,pi.evaluator,order)
+ elseif kind=="selector" then
+ collected=apply_selector(collected,pi.specification)
elseif kind=="finalizer" then
collected=pi.finalizer(collected)
p.matched=p.matched+1
@@ -12083,6 +13567,9 @@ do
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=="selector" then
+ collected=apply_selector(collected,pi.specification)
+ report_lpath("% 10i : se : %s ",(collected and #collected) or 0,pi.specification)
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 "")
@@ -12114,6 +13601,8 @@ do
collected=apply_nodes(collected,pi.nodetest,pi.nodes)
elseif kind=="expression" then
collected=apply_expression(collected,pi.evaluator,order)
+ elseif kind=="selector" then
+ collected=apply_selector(collected,pi.specification)
elseif kind=="finalizer" then
return pi.finalizer(collected)
end
@@ -12170,6 +13659,13 @@ do
function xml.lastmatch()
return lastmatch
end
+ local stack={}
+ function xml.pushmatch()
+ insert(stack,lastmatch)
+ end
+ function xml.popmatch()
+ lastmatch=remove(stack)
+ end
end
local applylpath=xml.applylpath
function xml.filter(root,pattern)
@@ -12449,7 +13945,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-mis"] = package.loaded["lxml-mis"] or true
--- original size: 3787, stripped down to: 2003
+-- original size: 3684, stripped down to: 1957
if not modules then modules={} end modules ['lxml-mis']={
version=1.001,
@@ -12518,7 +14014,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-aux"] = package.loaded["lxml-aux"] or true
--- original size: 30566, stripped down to: 21741
+-- original size: 29835, stripped down to: 21174
if not modules then modules={} end modules ['lxml-aux']={
version=1.001,
@@ -12534,7 +14030,6 @@ local xml=xml
local xmlcopy,xmlname=xml.copy,xml.name
local xmlinheritedconvert=xml.inheritedconvert
local xmlapplylpath=xml.applylpath
-local xmlfilter=xml.filter
local type,next,setmetatable,getmetatable=type,next,setmetatable,getmetatable
local insert,remove,fastcopy,concat=table.insert,table.remove,table.fastcopy,table.concat
local gmatch,gsub,format,find,strip=string.gmatch,string.gsub,string.format,string.find,string.strip
@@ -12738,7 +14233,17 @@ function xml.replace(root,pattern,whatever)
report('replacing',pattern,c,e)
end
local d=p.dt
- d[e.ni]=copiedelement(element,p)
+ local n=e.ni
+ local t=copiedelement(element,p)
+ if type(t)=="table" then
+ d[n]=t[1]
+ for i=2,#t do
+ n=n+1
+ insert(d,n,t[i])
+ end
+ else
+ d[n]=t
+ end
redo_ni(d)
end
end
@@ -13161,7 +14666,7 @@ local obsolete=xml.obsolete
xml.strip_whitespace=xml.strip obsolete.strip_whitespace=xml.strip
xml.collect_elements=xml.collect obsolete.collect_elements=xml.collect
xml.delete_element=xml.delete obsolete.delete_element=xml.delete
-xml.replace_element=xml.replace obsolete.replace_element=xml.replacet
+xml.replace_element=xml.replace obsolete.replace_element=xml.replace
xml.each_element=xml.each obsolete.each_element=xml.each
xml.process_elements=xml.process obsolete.process_elements=xml.process
xml.insert_element_after=xml.insertafter obsolete.insert_element_after=xml.insertafter
@@ -13379,7 +14884,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-xml"] = package.loaded["lxml-xml"] or true
--- original size: 10719, stripped down to: 7841
+-- original size: 10274, stripped down to: 7538
if not modules then modules={} end modules ['lxml-xml']={
version=1.001,
@@ -13757,7 +15262,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-xml"] = package.loaded["trac-xml"] or true
--- original size: 6534, stripped down to: 5072
+-- original size: 6407, stripped down to: 4965
if not modules then modules={} end modules ['trac-xml']={
version=1.001,
@@ -13907,6 +15412,7 @@ function reporters.export(t,methods,filename)
if filename then
local fullname=file.replacesuffix(filename,method)
t.report("saving export in %a",fullname)
+ dir.mkdirs(file.pathpart(fullname))
io.savedata(fullname,result)
else
reporters.lines(t,result)
@@ -13927,7 +15433,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-ini"] = package.loaded["data-ini"] or true
--- original size: 11444, stripped down to: 7830
+-- original size: 11099, stripped down to: 7516
if not modules then modules={} end modules ['data-ini']={
version=1.001,
@@ -14072,11 +15578,6 @@ if not texroot or texroot=="" then
ossetenv('TEXROOT',texroot)
end
environment.texroot=file.collapsepath(texroot)
-if type(profiler)=="table" and not jit then
- directives.register("system.profile",function()
- profiler.start("luatex-profile.log")
- end)
-end
local prefixes=utilities.storage.allocate()
resolvers.prefixes=prefixes
local resolved={}
@@ -14183,7 +15684,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-exp"] = package.loaded["data-exp"] or true
--- original size: 18619, stripped down to: 11042
+-- original size: 17958, stripped down to: 10705
if not modules then modules={} end modules ['data-exp']={
version=1.001,
@@ -14199,7 +15700,6 @@ 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
local isdir=lfs.isdir
-local ostype=os.type
local collapsepath,joinpath,basename=file.collapsepath,file.join,file.basename
local trace_locating=false trackers.register("resolvers.locating",function(v) trace_locating=v end)
local trace_expansions=false trackers.register("resolvers.expansions",function(v) trace_expansions=v end)
@@ -14568,7 +16068,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-env"] = package.loaded["data-env"] or true
--- original size: 9649, stripped down to: 7131
+-- original size: 9342, stripped down to: 6887
if not modules then modules={} end modules ['data-env']={
version=1.001,
@@ -14852,7 +16352,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-tmp"] = package.loaded["data-tmp"] or true
--- original size: 16066, stripped down to: 11938
+-- original size: 16088, stripped down to: 11435
if not modules then modules={} end modules ['data-tmp']={
version=1.100,
@@ -15056,18 +16556,6 @@ end
caches.getreadablepaths=getreadablepaths
caches.getwritablepath=getwritablepath
function caches.getfirstreadablefile(filename,...)
- local rd=getreadablepaths(...)
- for i=1,#rd do
- local path=rd[i]
- local fullname=file.join(path,filename)
- if is_readable(fullname) then
- usedreadables[i]=true
- return fullname,path
- end
- end
- return caches.setfirstwritablefile(filename,...)
-end
-function caches.getfirstreadablefile_TEST_ME_FIRST(filename,...)
local fullname,path=caches.setfirstwritablefile(filename,...)
if is_readable(fullname) then
return fullname,path
@@ -15096,18 +16584,22 @@ end
function caches.setluanames(path,name)
return format("%s/%s.%s",path,name,luasuffixes.tma),format("%s/%s.%s",path,name,luasuffixes.tmc)
end
-function caches.loaddata(readables,name)
+function caches.loaddata(readables,name,writable)
if type(readables)=="string" then
readables={ readables }
end
for i=1,#readables do
local path=readables[i]
- local tmaname,tmcname=caches.setluanames(path,name)
local loader=false
+ local tmaname,tmcname=caches.setluanames(path,name)
if isfile(tmcname) then
loader=loadfile(tmcname)
end
if not loader and isfile(tmaname) then
+ local tmacrap,tmcname=caches.setluanames(writable,name)
+ if isfile(tmcname) then
+ loader=loadfile(tmcname)
+ end
utilities.lua.compile(tmaname,tmcname)
if isfile(tmcname) then
loader=loadfile(tmcname)
@@ -15228,7 +16720,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-met"] = package.loaded["data-met"] or true
--- original size: 5488, stripped down to: 4101
+-- original size: 5310, stripped down to: 3980
if not modules then modules={} end modules ['data-met']={
version=1.100,
@@ -15240,7 +16732,6 @@ if not modules then modules={} end modules ['data-met']={
local find,format=string.find,string.format
local sequenced=table.sequenced
local addurlscheme,urlhashed=url.addscheme,url.hashed
-local getcurrentdir=lfs.currentdir
local trace_locating=false
local trace_methods=false
trackers.register("resolvers.locating",function(v) trace_methods=v end)
@@ -15347,7 +16838,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-res"] = package.loaded["data-res"] or true
--- original size: 67241, stripped down to: 46427
+-- original size: 67524, stripped down to: 46632
if not modules then modules={} end modules ['data-res']={
version=1.001,
@@ -15401,6 +16892,7 @@ resolvers.configbanner=""
resolvers.homedir=environment.homedir
resolvers.criticalvars=allocate { "SELFAUTOLOC","SELFAUTODIR","SELFAUTOPARENT","TEXMFCNF","TEXMF","TEXOS" }
resolvers.luacnfname="texmfcnf.lua"
+resolvers.luacnffallback="contextcnf.lua"
resolvers.luacnfstate="unknown"
if environment.default_texmfcnf then
resolvers.luacnfspec="home:texmf/web2c;"..environment.default_texmfcnf
@@ -15444,7 +16936,6 @@ local function resolvevariable(k)
end
local dollarstripper=lpeg.stripper("$")
local inhibitstripper=P("!")^0*Cs(P(1)^0)
-local backslashswapper=lpeg.replacer("\\","/")
local somevariable=P("$")/""
local somekey=C(R("az","AZ","09","__","--")^1)
local somethingelse=P(";")*((1-S("!{}/\\"))^1*P(";")/"")+P(";")*(P(";")/"")+P(1)
@@ -15590,23 +17081,29 @@ local function identify_configuration_files()
end
reportcriticalvariables(cnfspec)
local cnfpaths=expandedpathfromlist(resolvers.splitpath(cnfspec))
- local luacnfname=resolvers.luacnfname
- for i=1,#cnfpaths do
- local filepath=cnfpaths[i]
- local filename=collapsepath(filejoin(filepath,luacnfname))
- local realname=resolveprefix(filename)
- if trace_locating then
- local fullpath=gsub(resolveprefix(collapsepath(filepath)),"//","/")
- local weirdpath=find(fullpath,"/texmf.+/texmf") or not find(fullpath,"/web2c",1,true)
- report_resolving("looking for %a on %s path %a from specification %a",luacnfname,weirdpath and "weird" or "given",fullpath,filepath)
- end
- if isfile(realname) then
- specification[#specification+1]=filename
+ local function locatecnf(luacnfname,kind)
+ for i=1,#cnfpaths do
+ local filepath=cnfpaths[i]
+ local filename=collapsepath(filejoin(filepath,luacnfname))
+ local realname=resolveprefix(filename)
if trace_locating then
- report_resolving("found configuration file %a",realname)
+ local fullpath=gsub(resolveprefix(collapsepath(filepath)),"//","/")
+ local weirdpath=find(fullpath,"/texmf.+/texmf") or not find(fullpath,"/web2c",1,true)
+ report_resolving("looking for %s %a on %s path %a from specification %a",
+ kind,luacnfname,weirdpath and "weird" or "given",fullpath,filepath)
+ end
+ if isfile(realname) then
+ specification[#specification+1]=filename
+ if trace_locating then
+ report_resolving("found %s configuration file %a",kind,realname)
+ end
end
end
end
+ locatecnf(resolvers.luacnfname,"regular")
+ if #specification==0 then
+ locatecnf(resolvers.luacnffallback,"fallback")
+ end
if trace_locating then
report_resolving()
end
@@ -16903,7 +18400,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-pre"] = package.loaded["data-pre"] or true
--- original size: 4236, stripped down to: 3144
+-- original size: 4090, stripped down to: 3059
if not modules then modules={} end modules ['data-pre']={
version=1.001,
@@ -17025,7 +18522,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-inp"] = package.loaded["data-inp"] or true
--- original size: 935, stripped down to: 838
+-- original size: 910, stripped down to: 823
if not modules then modules={} end modules ['data-inp']={
version=1.001,
@@ -17055,7 +18552,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-out"] = package.loaded["data-out"] or true
--- original size: 548, stripped down to: 483
+-- original size: 530, stripped down to: 475
if not modules then modules={} end modules ['data-out']={
version=1.001,
@@ -17078,7 +18575,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-fil"] = package.loaded["data-fil"] or true
--- original size: 3976, stripped down to: 3391
+-- original size: 3863, stripped down to: 3310
if not modules then modules={} end modules ['data-fil']={
version=1.001,
@@ -17186,7 +18683,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-con"] = package.loaded["data-con"] or true
--- original size: 5148, stripped down to: 3680
+-- original size: 5029, stripped down to: 3607
if not modules then modules={} end modules ['data-con']={
version=1.100,
@@ -17256,7 +18753,7 @@ function containers.read(container,name)
local storage=container.storage
local stored=storage[name]
if not stored and container.enabled and caches and containers.usecache then
- stored=caches.loaddata(container.readables,name)
+ stored=caches.loaddata(container.readables,name,container.writable)
if stored and stored.cache_version==container.version then
if trace_cache or trace_containers then
report_containers("action %a, category %a, name %a","load",container.subcategory,name)
@@ -17305,7 +18802,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-use"] = package.loaded["data-use"] or true
--- original size: 4000, stripped down to: 3052
+-- original size: 4045, stripped down to: 3110
if not modules then modules={} end modules ['data-use']={
version=1.001,
@@ -17350,7 +18847,7 @@ function resolvers.automount(usecache)
end
statistics.register("used config file",function() return caches.configfiles() end)
statistics.register("used cache path",function() return caches.usedpaths() end)
-function statistics.savefmtstatus(texname,formatbanner,sourcefile)
+function statistics.savefmtstatus(texname,formatbanner,sourcefile,kind,banner)
local enginebanner=status.banner
if formatbanner and enginebanner and sourcefile then
local luvname=file.replacesuffix(texname,"luv")
@@ -17361,6 +18858,10 @@ function statistics.savefmtstatus(texname,formatbanner,sourcefile)
sourcefile=sourcefile,
}
io.savedata(luvname,table.serialize(luvdata,true))
+ lua.registerfinalizer(function()
+ logs.report("format banner","%s",banner)
+ logs.newline()
+ end)
end
end
function statistics.checkfmtstatus(texname)
@@ -17396,7 +18897,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-zip"] = package.loaded["data-zip"] or true
--- original size: 9036, stripped down to: 7041
+-- original size: 8772, stripped down to: 6841
if not modules then modules={} end modules ['data-zip']={
version=1.001,
@@ -17633,7 +19134,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-tre"] = package.loaded["data-tre"] or true
--- original size: 8712, stripped down to: 5726
+-- original size: 8479, stripped down to: 5580
if not modules then modules={} end modules ['data-tre']={
version=1.001,
@@ -17822,7 +19323,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-sch"] = package.loaded["data-sch"] or true
--- original size: 6779, stripped down to: 5444
+-- original size: 6653, stripped down to: 5467
if not modules then modules={} end modules ['data-sch']={
version=1.001,
@@ -17868,11 +19369,21 @@ function resolvers.schemes.cleanname(specification)
end
return hash
end
-local cached,loaded,reused,thresholds,handlers={},{},{},{},{}
-local function runcurl(name,cachename)
- local command="curl --silent --insecure --create-dirs --output "..cachename.." "..name
- os.execute(command)
-end
+local cached={}
+local loaded={}
+local reused={}
+local thresholds={}
+local handlers={}
+local runner=sandbox.registerrunner {
+ name="curl resolver",
+ method="execute",
+ program="curl",
+ template="--silent -- insecure --create-dirs --output %cachename% %original%",
+ checkers={
+ cachename="cache",
+ original="url",
+ }
+}
local function fetch(specification)
local original=specification.original
local scheme=specification.scheme
@@ -17894,7 +19405,10 @@ local function fetch(specification)
report_schemes("fetching %a, protocol %a, method %a",original,scheme,"curl")
end
logs.flush()
- runcurl(original,cachename)
+ runner {
+ original=original,
+ cachename=cachename,
+ }
end
end
if io.exists(cachename) then
@@ -18003,7 +19517,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-lua"] = package.loaded["data-lua"] or true
--- original size: 4447, stripped down to: 3302
+-- original size: 4207, stripped down to: 3137
if not modules then modules={} end modules ['data-lua']={
version=1.001,
@@ -18045,8 +19559,6 @@ function helpers.cleanpath(path)
return resolveprefix(lpegmatch(pattern,path))
end
local loadedaslib=helpers.loadedaslib
-local getextraluapaths=package.extraluapaths
-local getextralibpaths=package.extralibpaths
local registerpath=helpers.registerpath
local lualibfile=helpers.lualibfile
local luaformatpaths
@@ -18112,7 +19624,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-aux"] = package.loaded["data-aux"] or true
--- original size: 2494, stripped down to: 2047
+-- original size: 2431, stripped down to: 1996
if not modules then modules={} end modules ['data-aux']={
version=1.001,
@@ -18179,7 +19691,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-tmf"] = package.loaded["data-tmf"] or true
--- original size: 2674, stripped down to: 1658
+-- original size: 2601, stripped down to: 1627
if not modules then modules={} end modules ['data-tmf']={
version=1.001,
@@ -18235,7 +19747,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-lst"] = package.loaded["data-lst"] or true
--- original size: 2815, stripped down to: 2415
+-- original size: 2734, stripped down to: 2354
if not modules then modules={} end modules ['data-lst']={
version=1.001,
@@ -18315,7 +19827,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-lib"] = package.loaded["util-lib"] or true
--- original size: 11846, stripped down to: 6059
+-- original size: 13595, stripped down to: 7500
if not modules then modules={} end modules ['util-lib']={
version=1.001,
@@ -18324,35 +19836,51 @@ if not modules then modules={} end modules ['util-lib']={
copyright="PRAGMA ADE / ConTeXt Development Team",
license="see context related readme files",
}
-local gsub,find=string.gsub,string.find
-local pathpart,nameonly,joinfile=file.pathpart,file.nameonly,file.join
-local findfile,findfiles=resolvers and resolvers.findfile,resolvers and resolvers.findfiles
-local loaded=package.loaded
-local report_swiglib=logs.reporter("swiglib")
-local trace_swiglib=false trackers.register("resolvers.swiglib",function(v) trace_swiglib=v end)
+local type=type
+local next=next
+local pcall=pcall
+local gsub=string.gsub
+local find=string.find
+local sort=table.sort
+local pathpart=file.pathpart
+local nameonly=file.nameonly
+local joinfile=file.join
+local removesuffix=file.removesuffix
+local findfile=resolvers.findfile
+local findfiles=resolvers.findfiles
+local expandpaths=resolvers.expandedpathlistfromvariable
+local qualifiedpath=file.is_qualified_path
+local isfile=lfs.isfile
local done=false
-local function requireswiglib(required,version)
- local trace_swiglib=trace_swiglib or package.helpers.trace
- local library=loaded[required]
- if library==nil then
- if trace_swiglib then
- report_swiglib("requiring library %a with version %a",required,version or "any")
- end
- local required_full=gsub(required,"%.","/")
- local required_path=pathpart(required_full)
- local required_base=nameonly(required_full)
+local function locate(required,version,trace,report,action)
+ if type(required)~="string" then
+ report("provide a proper library name")
+ return
+ end
+ if trace then
+ report("requiring library %a with version %a",required,version or "any")
+ end
+ local found_library=nil
+ local required_full=gsub(required,"%.","/")
+ local required_path=pathpart(required_full)
+ local required_base=nameonly(required_full)
+ if qualifiedpath(required) then
+ if isfile(required) then
+ found_library=required
+ end
+ else
local required_name=required_base.."."..os.libsuffix
local version=type(version)=="string" and version~="" and version or false
local engine=environment.ownmain or false
- if trace_swiglib and not done then
- local list=resolvers.expandedpathlistfromvariable("lib")
+ if trace and not done then
+ local list=expandpaths("lib")
for i=1,#list do
- report_swiglib("tds path %i: %s",i,list[i])
+ report("tds path %i: %s",i,list[i])
end
end
local function found(locate,asked_library,how,...)
- if trace_swiglib then
- report_swiglib("checking %s: %a",how,asked_library)
+ if trace then
+ report("checking %s: %a",how,asked_library)
end
return locate(asked_library,...)
end
@@ -18360,45 +19888,45 @@ local function requireswiglib(required,version)
local found=nil
if version then
local asked_library=joinfile(required_path,version,required_name)
- if trace_swiglib then
- report_swiglib("checking %s: %a","with version",asked_library)
+ if trace then
+ report("checking %s: %a","with version",asked_library)
end
found=locate(asked_library,...)
end
if not found or found=="" then
local asked_library=joinfile(required_path,required_name)
- if trace_swiglib then
- report_swiglib("checking %s: %a","with version",asked_library)
+ if trace then
+ report("checking %s: %a","with version",asked_library)
end
found=locate(asked_library,...)
end
return found and found~="" and found or false
end
local function attempt(checkpattern)
- if trace_swiglib then
- report_swiglib("checking tds lib paths strictly")
+ if trace then
+ report("checking tds lib paths strictly")
end
local found=findfile and check(findfile,"lib")
if found and (not checkpattern or find(found,checkpattern)) then
return found
end
- if trace_swiglib then
- report_swiglib("checking tds lib paths with wildcard")
+ if trace then
+ report("checking tds lib paths with wildcard")
end
local asked_library=joinfile(required_path,".*",required_name)
- if trace_swiglib then
- report_swiglib("checking %s: %a","latest version",asked_library)
+ if trace then
+ report("checking %s: %a","latest version",asked_library)
end
local list=findfiles(asked_library,"lib",true)
if list and #list>0 then
- table.sort(list)
+ sort(list)
local found=list[#list]
if found and (not checkpattern or find(found,checkpattern)) then
return found
end
end
- if trace_swiglib then
- report_swiglib("checking lib paths")
+ if trace then
+ report("checking lib paths")
end
package.extralibpath(environment.ownpath)
local paths=package.libpaths()
@@ -18410,89 +19938,143 @@ local function requireswiglib(required,version)
end
return false
end
- local found_library=nil
if engine then
- if trace_swiglib then
- report_swiglib("attemp 1, engine %a",engine)
+ if trace then
+ report("attemp 1, engine %a",engine)
end
found_library=attempt("/"..engine.."/")
if not found_library then
- if trace_swiglib then
- report_swiglib("attemp 2, no engine",asked_library)
+ if trace then
+ report("attemp 2, no engine",asked_library)
end
found_library=attempt()
end
else
found_library=attempt()
end
- if not found_library then
- if trace_swiglib then
- report_swiglib("not found: %a",required)
- end
+ end
+ if not found_library then
+ if trace then
+ report("not found: %a",required)
+ end
+ library=false
+ else
+ if trace then
+ report("found: %a",found_library)
+ end
+ local message,result=action(found_library,required_base)
+ if result then
+ library=result
+ else
library=false
+ report("load error: message %a, library %a",tostring(message),found_library or "no library")
+ end
+ end
+ if not library then
+ report("unknown: %a",required)
+ elseif trace then
+ report("stored: %a",required)
+ end
+ return library
+end
+do
+ local report_swiglib=logs.reporter("swiglib")
+ local trace_swiglib=false
+ local savedrequire=require
+ local loadedlibs={}
+ local loadlib=package.loadlib
+ local pushdir=dir.push
+ local popdir=dir.pop
+ trackers.register("resolvers.swiglib",function(v) trace_swiglib=v end)
+ function requireswiglib(required,version)
+ local library=loadedlibs[library]
+ if library==nil then
+ local trace_swiglib=trace_swiglib or package.helpers.trace
+ library=locate(required,version,trace_swiglib,report_swiglib,function(name,base)
+ pushdir(pathpart(name))
+ local opener="luaopen_"..base
+ if trace_swiglib then
+ report_swiglib("opening: %a with %a",name,opener)
+ end
+ local library,message=loadlib(name,opener)
+ local libtype=type(library)
+ if libtype=="function" then
+ library=library()
+ message=true
+ else
+ report_swiglib("load error: %a returns %a, message %a, library %a",opener,libtype,(string.gsub(message or "no message","[%s]+$","")),found_library or "no library")
+ library=false
+ end
+ popdir()
+ return message,library
+ end)
+ loadedlibs[required]=library or false
+ end
+ return library
+ end
+ function require(name,version)
+ if find(name,"^swiglib%.") then
+ return requireswiglib(name,version)
else
- local path=pathpart(found_library)
- local base=nameonly(found_library)
- dir.push(path)
+ return savedrequire(name)
+ end
+ end
+ local swiglibs={}
+ local initializer="core"
+ function swiglib(name,version)
+ local library=swiglibs[name]
+ if not library then
+ statistics.starttiming(swiglibs)
if trace_swiglib then
- report_swiglib("found: %a",found_library)
- end
- local message=nil
- local opener="luaopen_"..required_base
- library,message=package.loadlib(found_library,opener)
- local libtype=type(library)
- if libtype=="function" then
- library=library()
+ report_swiglib("loading %a",name)
+ end
+ if not find(name,"%."..initializer.."$") then
+ fullname="swiglib."..name.."."..initializer
else
- report_swiglib("load error: %a returns %a, message %a, library %a",opener,libtype,(string.gsub(message or "no message","[%s]+$","")),found_library or "no library")
- library=false
+ fullname="swiglib."..name
end
- dir.pop()
+ library=requireswiglib(fullname,version)
+ swiglibs[name]=library
+ statistics.stoptiming(swiglibs)
end
- if not library then
- report_swiglib("unknown: %a",required)
- elseif trace_swiglib then
- report_swiglib("stored: %a",required)
- end
- loaded[required]=library
- else
- report_swiglib("reused: %a",required)
+ return library
end
- return library
+ statistics.register("used swiglibs",function()
+ if next(swiglibs) then
+ return string.format("%s, initial load time %s seconds",table.concat(table.sortedkeys(swiglibs)," "),statistics.elapsedtime(swiglibs))
+ end
+ end)
end
-local savedrequire=require
-function require(name,version)
- if find(name,"^swiglib%.") then
- return requireswiglib(name,version)
- else
- return savedrequire(name)
+if FFISUPPORTED and ffi and ffi.load then
+ local report_ffilib=logs.reporter("ffilib")
+ local trace_ffilib=false
+ local savedffiload=ffi.load
+ trackers.register("resolvers.ffilib",function(v) trace_ffilib=v end)
+ local function locateindeed(name)
+ local message,library=pcall(savedffiload,removesuffix(name))
+ if type(library)=="userdata" then
+ return library
+ else
+ return false
+ end
end
-end
-local swiglibs={}
-local initializer="core"
-function swiglib(name,version)
- local library=swiglibs[name]
- if not library then
- statistics.starttiming(swiglibs)
- if trace_swiglib then
- report_swiglib("loading %a",name)
+ function ffilib(required,version)
+ if version=="system" then
+ return locateindeed(name)
+ else
+ return locate(required,version,trace_ffilib,report_ffilib,locateindeed)
end
- if not find(name,"%."..initializer.."$") then
- fullname="swiglib."..name.."."..initializer
+ end
+ function ffi.load(name)
+ local library=ffilib(name)
+ if type(library)=="userdata" then
+ return library
else
- fullname="swiglib."..name
+ report_ffilib("trying to load %a using normal loader",name)
+ return savedffiload(name)
end
- library=requireswiglib(fullname,version)
- swiglibs[name]=library
- statistics.stoptiming(swiglibs)
end
- return library
end
-statistics.register("used swiglibs",function()
- if next(swiglibs) then
- return string.format("%s, initial load time %s seconds",table.concat(table.sortedkeys(swiglibs)," "),statistics.elapsedtime(swiglibs))
- end
-end)
end -- of closure
@@ -18501,7 +20083,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["luat-sta"] = package.loaded["luat-sta"] or true
--- original size: 5914, stripped down to: 2584
+-- original size: 5703, stripped down to: 2507
if not modules then modules={} end modules ['luat-sta']={
version=1.001,
@@ -18604,7 +20186,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["luat-fmt"] = package.loaded["luat-fmt"] or true
--- original size: 6967, stripped down to: 5631
+-- original size: 9144, stripped down to: 7291
if not modules then modules={} end modules ['luat-fmt']={
version=1.001,
@@ -18618,23 +20200,67 @@ local concat=table.concat
local quoted=string.quoted
local luasuffixes=utilities.lua.suffixes
local report_format=logs.reporter("resolvers","formats")
-local function primaryflags()
- local trackers=environment.argument("trackers")
- local directives=environment.argument("directives")
+local function primaryflags()
+ local arguments=environment.arguments
+ local flags={}
+ if arguments.silent then
+ flags[#flags+1]="--interaction=batchmode"
+ end
+ if arguments.jit then
+ flags[#flags+1]="--jiton"
+ end
+ return concat(flags," ")
+end
+local function secondaryflags()
+ local arguments=environment.arguments
+ local trackers=arguments.trackers
+ local directives=arguments.directives
local flags={}
if trackers and trackers~="" then
- flags={ "--trackers="..quoted(trackers) }
+ flags[#flags+1]="--c:trackers="..quoted(trackers)
end
if directives and directives~="" then
- flags={ "--directives="..quoted(directives) }
+ flags[#flags+1]="--c:directives="..quoted(directives)
+ end
+ if arguments.silent then
+ flags[#flags+1]="--c:silent"
end
- if environment.argument("jit") then
- flags={ "--jiton" }
+ if arguments.jit then
+ flags[#flags+1]="--c:jiton"
+ end
+ if arguments.ansi then
+ flags[#flags+1]="--c:ansi"
end
return concat(flags," ")
end
-function environment.make_format(name,silent)
+local template=[[--ini %primaryflags% --lua=%luafile% %texfile% %secondaryflags% %dump% %redirect%]]
+local checkers={
+ primaryflags="string",
+ secondaryflags="string",
+ luafile="readable",
+ texfile="readable",
+ redirect="string",
+ dump="string",
+}
+local runners={
+ luatex=sandbox.registerrunner {
+ name="make luatex format",
+ program="luatex",
+ template=template,
+ checkers=checkers,
+ reporter=report_format,
+ },
+ luajittex=sandbox.registerrunner {
+ name="make luajittex format",
+ program="luajittex",
+ template=template,
+ checkers=checkers,
+ reporter=report_format,
+ },
+}
+function environment.make_format(name,arguments)
local engine=environment.ownmain or "luatex"
+ local silent=environment.arguments.silent
local olddir=dir.current()
local path=caches.getwritablepath("formats",engine) or ""
if path~="" then
@@ -18690,11 +20316,20 @@ function environment.make_format(name,silent)
lfs.chdir(olddir)
return
end
- local dump=os.platform=="unix" and "\\\\dump" or "\\dump"
- if silent then
+ local specification={
+ primaryflags=primaryflags(),
+ secondaryflags=secondaryflags(),
+ luafile=quoted(usedluastub),
+ texfile=quoted(fulltexsourcename),
+ dump=os.platform=="unix" and "\\\\dump" or "\\dump",
+ }
+ local runner=runners[engine]
+ if not runner then
+ report_format("format %a cannot be generated, no runner available for engine %a",name,engine)
+ elseif 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)
+ specification.redirect="> temp.log"
+ local result=runner(specification)
local runtime=statistics.stoptiming()
if result~=0 then
print(format("%s silent make > fatal error when making format %q",engine,name))
@@ -18703,9 +20338,7 @@ function environment.make_format(name,silent)
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)
+ runner(specification)
end
local pattern=file.removesuffix(file.basename(usedluastub)).."-*.mem"
local mp=dir.glob(pattern)
@@ -18718,6 +20351,30 @@ function environment.make_format(name,silent)
end
lfs.chdir(olddir)
end
+local template=[[%flags% --fmt=%fmtfile% --lua=%luafile% %texfile% %more%]]
+local checkers={
+ flags="string",
+ more="string",
+ fmtfile="readable",
+ luafile="readable",
+ texfile="readable",
+}
+local runners={
+ luatex=sandbox.registerrunner {
+ name="run luatex format",
+ program="luatex",
+ template=template,
+ checkers=checkers,
+ reporter=report_format,
+ },
+ luajittex=sandbox.registerrunner {
+ name="run luajittex format",
+ program="luajittex",
+ template=template,
+ checkers=checkers,
+ reporter=report_format,
+ },
+}
function environment.run_format(name,data,more)
if name and name~="" then
local engine=environment.ownmain or "luatex"
@@ -18739,9 +20396,18 @@ function environment.run_format(name,data,more)
report_format("using format name %a",fmtname)
report_format("no luc/lua file with name %a",barename)
else
- local command=format("%s %s --fmt=%s --lua=%s %s %s",engine,primaryflags(),quoted(barename),quoted(luaname),quoted(data),more~="" and quoted(more) or "")
- report_format("running command: %s",command)
- os.execute(command)
+ local runner=runners[engine]
+ if not runner then
+ report_format("format %a cannot be run, no runner available for engine %a",name,engine)
+ else
+ runner {
+ flags=primaryflags(),
+ fmtfile=quoted(barename),
+ luafile=quoted(luaname),
+ texfile=quoted(data),
+ more=more,
+ }
+ end
end
end
end
@@ -18750,10 +20416,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-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
+-- used libraries : l-lua.lua l-sandbox.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-tpl.lua util-sbx.lua util-mrg.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 : 797557
--- stripped bytes : 289197
+-- original bytes : 842443
+-- stripped bytes : 306317
-- end library merge
@@ -18777,6 +20443,7 @@ local owntree = environment and environment.ownpath or ownpath
local ownlibs = { -- order can be made better
'l-lua.lua',
+ 'l-sandbox.lua',
'l-package.lua',
'l-lpeg.lua',
'l-function.lua',
@@ -18810,8 +20477,9 @@ local ownlibs = { -- order can be made better
'util-lua.lua', -- indeed here?
'util-deb.lua',
- 'util-mrg.lua',
'util-tpl.lua',
+ 'util-sbx.lua',
+ 'util-mrg.lua',
'util-env.lua',
'luat-env.lua', -- can come before inf (as in mkiv)
@@ -18983,7 +20651,7 @@ local helpinfo = [[
<metadata>
<entry name="name">mtxrun</entry>
<entry name="detail">ConTeXt TDS Runner Tool</entry>
- <entry name="version">1.31</entry>
+ <entry name="version">1.32</entry>
</metadata>
<flags>
<category name="basic">
@@ -19046,6 +20714,7 @@ local helpinfo = [[
</subcategory>
<subcategory>
<flag name="expand-braces"><short>expand complex variable</short></flag>
+ <flag name="resolve-path"><short>expand variable (completely resolve paths)</short></flag>
<flag name="expand-path"><short>expand variable (resolve paths)</short></flag>
<flag name="expand-var"><short>expand variable (resolve references)</short></flag>
<flag name="show-path"><short>show path expansion of ...</short></flag>
@@ -19063,7 +20732,7 @@ local helpinfo = [[
local application = logs.application {
name = "mtxrun",
- banner = "ConTeXt TDS Runner Tool 1.31",
+ banner = "ConTeXt TDS Runner Tool 1.32",
helpinfo = helpinfo,
}
@@ -20029,6 +21698,13 @@ elseif e_argument("expand-path") then
environment.initializearguments(environment.arguments_after)
resolvers.dowithfilesandreport(resolvers.expandpath, environment.files)
+elseif e_argument("resolve-path") then
+
+ resolvers.load("nofiles")
+ runners.register_arguments(filename)
+ environment.initializearguments(environment.arguments_after)
+ resolvers.dowithfilesandreport(resolvers.cleanedpathlist, environment.files)
+
elseif e_argument("expand-var") or e_argument("expand-variable") then
-- luatools: runners.execute_ctx_script("mtx-base","--expand-var",filename)
diff --git a/scripts/context/stubs/unix/pstopdf b/scripts/context/stubs/unix/pstopdf
new file mode 100644
index 000000000..116f5f4a3
--- /dev/null
+++ b/scripts/context/stubs/unix/pstopdf
@@ -0,0 +1,2 @@
+#!/bin/sh
+mtxrun --script pstopdf "$@"
diff --git a/scripts/context/stubs/win64/mtxrun.lua b/scripts/context/stubs/win64/mtxrun.lua
index 7b711a88d..873770cac 100644
--- a/scripts/context/stubs/win64/mtxrun.lua
+++ b/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: 4734, stripped down to: 2626
+-- original size: 5125, stripped down to: 2881
if not modules then modules={} end modules ['l-lua']={
version=1.001,
@@ -162,6 +162,283 @@ if flush then
local spawn=os.spawn if spawn then function os.spawn (...) flush() return spawn (...) end end
local popen=io.popen if popen then function io.popen (...) flush() return popen (...) end end
end
+FFISUPPORTED=type(ffi)=="table" and ffi.os~="" and ffi.arch~="" and ffi.load
+if not FFISUPPORTED then
+ local okay;okay,ffi=pcall(require,"ffi")
+ FFISUPPORTED=type(ffi)=="table" and ffi.os~="" and ffi.arch~="" and ffi.load
+end
+if not FFISUPPORTED then
+ ffi=nil
+elseif not ffi.number then
+ ffi.number=tonumber
+end
+
+
+end -- of closure
+
+do -- create closure to overcome 200 locals limit
+
+package.loaded["l-sandbox"] = package.loaded["l-sandbox"] or true
+
+-- original size: 9667, stripped down to: 6678
+
+if not modules then modules={} end modules ['l-sandbox']={
+ 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 global=_G
+local next=next
+local unpack=unpack or table.unpack
+local type=type
+local tprint=texio.write_nl or print
+local tostring=tostring
+local format=string.format
+local concat=table.concat
+local sort=table.sort
+local gmatch=string.gmatch
+local gsub=string.gsub
+local requiem=require
+sandbox={}
+local sandboxed=false
+local overloads={}
+local skiploads={}
+local initializers={}
+local finalizers={}
+local originals={}
+local comments={}
+local trace=false
+local logger=false
+local blocked={}
+local function report(...)
+ tprint("sandbox ! "..format(...))
+end
+sandbox.report=report
+function sandbox.setreporter(r)
+ report=r
+ sandbox.report=r
+end
+function sandbox.settrace(v)
+ trace=v
+end
+function sandbox.setlogger(l)
+ logger=type(l)=="function" and l or false
+end
+local function register(func,overload,comment)
+ if type(func)=="function" then
+ if type(overload)=="string" then
+ comment=overload
+ overload=nil
+ end
+ local function f(...)
+ if sandboxed then
+ local overload=overloads[f]
+ if overload then
+ if logger then
+ local result={ overload(func,...) }
+ logger {
+ comment=comments[f] or tostring(f),
+ arguments={... },
+ result=result[1] and true or false,
+ }
+ return unpack(result)
+ else
+ return overload(func,...)
+ end
+ else
+ end
+ else
+ return func(...)
+ end
+ end
+ if comment then
+ comments[f]=comment
+ if trace then
+ report("registering function: %s",comment)
+ end
+ end
+ overloads[f]=overload or false
+ originals[f]=func
+ return f
+ end
+end
+local function redefine(func,comment)
+ if type(func)=="function" then
+ skiploads[func]=comment or comments[func] or "unknown"
+ if overloads[func]==false then
+ overloads[func]=nil
+ end
+ end
+end
+sandbox.register=register
+sandbox.redefine=redefine
+function sandbox.original(func)
+ return originals and originals[func] or func
+end
+function sandbox.overload(func,overload,comment)
+ comment=comment or comments[func] or "?"
+ if type(func)~="function" then
+ if trace then
+ report("overloading unknown function: %s",comment)
+ end
+ elseif type(overload)~="function" then
+ if trace then
+ report("overloading function with bad overload: %s",comment)
+ end
+ elseif overloads[func]==nil then
+ if trace then
+ report("function is not registered: %s",comment)
+ end
+ elseif skiploads[func] then
+ if trace then
+ report("function is not skipped: %s",comment)
+ end
+ else
+ if trace then
+ report("overloading function: %s",comment)
+ end
+ overloads[func]=overload
+ end
+ return func
+end
+local function whatever(specification,what,target)
+ if type(specification)~="table" then
+ report("%s needs a specification",what)
+ elseif type(specification.category)~="string" or type(specification.action)~="function" then
+ report("%s needs a category and action",what)
+ elseif not sandboxed then
+ target[#target+1]=specification
+ elseif trace then
+ report("already enabled, discarding %s",what)
+ end
+end
+function sandbox.initializer(specification)
+ whatever(specification,"initializer",initializers)
+end
+function sandbox.finalizer(specification)
+ whatever(specification,"finalizer",finalizers)
+end
+function require(name)
+ local n=gsub(name,"^.*[\\/]","")
+ local n=gsub(n,"[%.].*$","")
+ local b=blocked[n]
+ if b==false then
+ return nil
+ elseif b then
+ if trace then
+ report("using blocked: %s",n)
+ end
+ return b
+ else
+ if trace then
+ report("requiring: %s",name)
+ end
+ return requiem(name)
+ end
+end
+function blockrequire(name,lib)
+ if trace then
+ report("preventing reload of: %s",name)
+ end
+ blocked[name]=lib or _G[name] or false
+end
+function sandbox.enable()
+ if not sandboxed then
+ for i=1,#initializers do
+ initializers[i].action()
+ end
+ for i=1,#finalizers do
+ finalizers[i].action()
+ end
+ local nnot=0
+ local nyes=0
+ local cnot={}
+ local cyes={}
+ local skip={}
+ for k,v in next,overloads do
+ local c=comments[k]
+ if v then
+ if c then
+ cyes[#cyes+1]=c
+ else
+ nyes=nyes+1
+ end
+ else
+ if c then
+ cnot[#cnot+1]=c
+ else
+ nnot=nnot+1
+ end
+ end
+ end
+ for k,v in next,skiploads do
+ skip[#skip+1]=v
+ end
+ if #cyes>0 then
+ sort(cyes)
+ report("overloaded known: %s",concat(cyes," | "))
+ end
+ if nyes>0 then
+ report("overloaded unknown: %s",nyes)
+ end
+ if #cnot>0 then
+ sort(cnot)
+ report("not overloaded known: %s",concat(cnot," | "))
+ end
+ if nnot>0 then
+ report("not overloaded unknown: %s",nnot)
+ end
+ if #skip>0 then
+ sort(skip)
+ report("not overloaded redefined: %s",concat(skip," | "))
+ end
+ initializers=nil
+ finalizers=nil
+ originals=nil
+ sandboxed=true
+ end
+end
+blockrequire("lfs",lfs)
+blockrequire("io",io)
+blockrequire("os",os)
+blockrequire("ffi",ffi)
+local function supported(library)
+ local l=_G[library]
+ return l
+end
+loadfile=register(loadfile,"loadfile")
+if supported("io") then
+ io.open=register(io.open,"io.open")
+ io.popen=register(io.popen,"io.popen")
+ io.lines=register(io.lines,"io.lines")
+ io.output=register(io.output,"io.output")
+ io.input=register(io.input,"io.input")
+end
+if supported("os") then
+ os.execute=register(os.execute,"os.execute")
+ os.spawn=register(os.spawn,"os.spawn")
+ os.exec=register(os.exec,"os.exec")
+ os.rename=register(os.rename,"os.rename")
+ os.remove=register(os.remove,"os.remove")
+end
+if supported("lfs") then
+ lfs.chdir=register(lfs.chdir,"lfs.chdir")
+ lfs.mkdir=register(lfs.mkdir,"lfs.mkdir")
+ lfs.rmdir=register(lfs.rmdir,"lfs.rmdir")
+ lfs.isfile=register(lfs.isfile,"lfs.isfile")
+ lfs.isdir=register(lfs.isdir,"lfs.isdir")
+ lfs.attributes=register(lfs.attributes,"lfs.attributes")
+ lfs.dir=register(lfs.dir,"lfs.dir")
+ lfs.lock_dir=register(lfs.lock_dir,"lfs.lock_dir")
+ lfs.touch=register(lfs.touch,"lfs.touch")
+ lfs.link=register(lfs.link,"lfs.link")
+ lfs.setmode=register(lfs.setmode,"lfs.setmode")
+ lfs.readlink=register(lfs.readlink,"lfs.readlink")
+ lfs.shortname=register(lfs.shortname,"lfs.shortname")
+ lfs.symlinkattributes=register(lfs.symlinkattributes,"lfs.symlinkattributes")
+end
end -- of closure
@@ -170,7 +447,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-package"] = package.loaded["l-package"] or true
--- original size: 10949, stripped down to: 8037
+-- original size: 10587, stripped down to: 7815
if not modules then modules={} end modules ['l-package']={
version=1.001,
@@ -460,7 +737,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-lpeg"] = package.loaded["l-lpeg"] or true
--- original size: 38185, stripped down to: 20990
+-- original size: 37748, stripped down to: 20111
if not modules then modules={} end modules ['l-lpeg']={
version=1.001,
@@ -552,6 +829,7 @@ patterns.nonwhitespace=nonwhitespace
local stripper=spacer^0*C((spacer^0*nonspacer^1)^0)
local fullstripper=whitespace^0*C((whitespace^0*nonwhitespace^1)^0)
local collapser=Cs(spacer^0/""*nonspacer^0*((spacer^0/" "*nonspacer^1)^0))
+local nospacer=Cs((whitespace^1/""+nonwhitespace^1)^0)
local b_collapser=Cs(whitespace^0/""*(nonwhitespace^1+whitespace^1/" ")^0)
local e_collapser=Cs((whitespace^1*P(-1)/""+nonwhitespace^1+whitespace^1/" ")^0)
local m_collapser=Cs((nonwhitespace^1+whitespace^1/" ")^0)
@@ -561,6 +839,7 @@ local m_stripper=Cs((nonspacer^1+spacer^1/" ")^0)
patterns.stripper=stripper
patterns.fullstripper=fullstripper
patterns.collapser=collapser
+patterns.nospacer=nospacer
patterns.b_collapser=b_collapser
patterns.m_collapser=m_collapser
patterns.e_collapser=e_collapser
@@ -1027,27 +1306,7 @@ function lpeg.append(list,pp,delayed,checked)
end
local p_false=P(false)
local p_true=P(true)
-local function make(t)
- local function making(t)
- local p=p_false
- local keys=sortedkeys(t)
- for i=1,#keys do
- local k=keys[i]
- if k~="" then
- local v=t[k]
- if v==true then
- p=p+P(k)*p_true
- elseif v==false then
- else
- p=p+P(k)*making(v)
- end
- end
- end
- if t[""] then
- p=p+p_true
- end
- return p
- end
+local function make(t,rest)
local p=p_false
local keys=sortedkeys(t)
for i=1,#keys do
@@ -1058,10 +1317,13 @@ local function make(t)
p=p+P(k)*p_true
elseif v==false then
else
- p=p+P(k)*making(v)
+ p=p+P(k)*make(v,v[""])
end
end
end
+ if rest then
+ p=p+p_true
+ end
return p
end
local function collapse(t,x)
@@ -1264,7 +1526,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-function"] = package.loaded["l-function"] or true
--- original size: 372, stripped down to: 329
+-- original size: 361, stripped down to: 322
if not modules then modules={} end modules ['l-functions']={
version=1.001,
@@ -1283,7 +1545,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-string"] = package.loaded["l-string"] or true
--- original size: 5983, stripped down to: 2959
+-- original size: 6419, stripped down to: 3339
if not modules then modules={} end modules ['l-string']={
version=1.001,
@@ -1321,22 +1583,26 @@ end
local stripper=patterns.stripper
local fullstripper=patterns.fullstripper
local collapser=patterns.collapser
+local nospacer=patterns.nospacer
local longtostring=patterns.longtostring
function string.strip(str)
- return lpegmatch(stripper,str) or ""
+ return str and lpegmatch(stripper,str) or ""
end
function string.fullstrip(str)
- return lpegmatch(fullstripper,str) or ""
+ return str and lpegmatch(fullstripper,str) or ""
end
function string.collapsespaces(str)
- return lpegmatch(collapser,str) or ""
+ return str and lpegmatch(collapser,str) or ""
+end
+function string.nospaces(str)
+ return str and lpegmatch(nospacer,str) or ""
end
function string.longtostring(str)
- return lpegmatch(longtostring,str) or ""
+ return str and lpegmatch(longtostring,str) or ""
end
local pattern=P(" ")^0*P(-1)
function string.is_empty(str)
- if str=="" then
+ if not str or str=="" then
return true
else
return lpegmatch(pattern,str) and true or false
@@ -1381,6 +1647,21 @@ function string.tformat(fmt,...)
end
string.quote=string.quoted
string.unquote=string.unquoted
+if not string.bytetable then
+ local limit=5000
+ function string.bytetable(str)
+ local n=#str
+ if n>limit then
+ local t={ byte(str,1,limit) }
+ for i=limit+1,n do
+ t[i]=byte(str,i)
+ end
+ return t
+ else
+ return { byte(str,1,n) }
+ end
+ end
+end
end -- of closure
@@ -1389,7 +1670,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-table"] = package.loaded["l-table"] or true
--- original size: 36997, stripped down to: 22376
+-- original size: 39608, stripped down to: 23165
if not modules then modules={} end modules ['l-table']={
version=1.001,
@@ -1716,19 +1997,23 @@ function table.fromhash(t)
end
return hsh
end
-local noquotes,hexify,handle,compact,inline,functions
+local noquotes,hexify,handle,compact,inline,functions,metacheck
local reserved=table.tohash {
'and','break','do','else','elseif','end','false','for','function','if',
'in','local','nil','not','or','repeat','return','then','true','until','while',
'NaN','goto',
}
-local function simple_table(t)
+local function is_simple_table(t,hexify)
local nt=#t
if nt>0 then
local n=0
for _,v in next,t do
n=n+1
+ if type(v)=="table" then
+ return nil
+ end
end
+ local haszero=rawget(t,0)
if n==nt then
local tt={}
for i=1,nt do
@@ -1738,10 +2023,10 @@ local function simple_table(t)
if hexify then
tt[i]=format("0x%X",v)
else
- tt[i]=tostring(v)
+ tt[i]=v
end
elseif tv=="string" then
- tt[i]=format("%q",v)
+ tt[i]=format("%q",v)
elseif tv=="boolean" then
tt[i]=v and "true" or "false"
else
@@ -1749,10 +2034,32 @@ local function simple_table(t)
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
+ if hexify then
+ tt[i+1]=format("0x%X",v)
+ else
+ tt[i+1]=v
+ end
+ 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
end
+table.is_simple_table=is_simple_table
local propername=patterns.propername
local function dummy() end
local function do_serialize(root,name,depth,level,indexed)
@@ -1786,7 +2093,7 @@ local function do_serialize(root,name,depth,level,indexed)
if compact then
last=#root
for k=1,last do
- if root[k]==nil then
+ if rawget(root,k)==nil then
last=k-1
break
end
@@ -1814,7 +2121,7 @@ local function do_serialize(root,name,depth,level,indexed)
if next(v)==nil then
handle(format("%s {},",depth))
elseif inline then
- local st=simple_table(v)
+ local st=is_simple_table(v,hexify)
if st then
handle(format("%s { %s },",depth,concat(st,", ")))
else
@@ -1851,6 +2158,7 @@ local function do_serialize(root,name,depth,level,indexed)
else
handle(format("%s [%s]=%s,",depth,k and "true" or "false",v))
end
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
if hexify then
handle(format("%s %s=0x%X,",depth,k,v))
@@ -1873,6 +2181,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=%q,",depth,k and "true" or "false",v))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=%q,",depth,k,v))
else
@@ -1888,13 +2197,14 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]={},",depth,k and "true" or "false"))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s={},",depth,k))
else
handle(format("%s [%q]={},",depth,k))
end
elseif inline then
- local st=simple_table(v)
+ local st=is_simple_table(v,hexify)
if st then
if tk=="number" then
if hexify then
@@ -1904,6 +2214,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]={ %s },",depth,k and "true" or "false",concat(st,", ")))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s={ %s },",depth,k,concat(st,", ")))
else
@@ -1924,6 +2235,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=%s,",depth,tostring(k),v and "true" or "false"))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=%s,",depth,k,v and "true" or "false"))
else
@@ -1940,6 +2252,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=load(%q),",depth,k and "true" or "false",f))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=load(%q),",depth,k,f))
else
@@ -1955,6 +2268,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=%q,",depth,k and "true" or "false",tostring(v)))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=%q,",depth,k,tostring(v)))
else
@@ -1976,6 +2290,7 @@ local function serialize(_handle,root,name,specification)
functions=specification.functions
compact=specification.compact
inline=specification.inline and compact
+ metacheck=specification.metacheck
if functions==nil then
functions=true
end
@@ -1985,6 +2300,9 @@ local function serialize(_handle,root,name,specification)
if inline==nil then
inline=compact
end
+ if metacheck==nil then
+ metacheck=true
+ end
else
noquotes=false
hexify=false
@@ -1992,6 +2310,7 @@ local function serialize(_handle,root,name,specification)
compact=true
inline=true
functions=true
+ metacheck=true
end
if tname=="string" then
if name=="return" then
@@ -2015,7 +2334,7 @@ local function serialize(_handle,root,name,specification)
handle("t={")
end
if root then
- if getmetatable(root) then
+ if metacheck and getmetatable(root) then
local dummy=root._w_h_a_t_e_v_e_r_
root._w_h_a_t_e_v_e_r_=nil
end
@@ -2091,6 +2410,38 @@ local function flattened(t,f,depth)
return f
end
table.flattened=flattened
+local function collapsed(t,f,h)
+ if f==nil then
+ f={}
+ h={}
+ end
+ for k=1,#t do
+ local v=t[k]
+ if type(v)=="table" then
+ collapsed(v,f,h)
+ elseif not h[v] then
+ f[#f+1]=v
+ h[v]=true
+ end
+ end
+ return f
+end
+local function collapsedhash(t,h)
+ if h==nil then
+ h={}
+ end
+ for k=1,#t do
+ local v=t[k]
+ if type(v)=="table" then
+ collapsedhash(v,h)
+ else
+ h[v]=true
+ end
+ end
+ return h
+end
+table.collapsed=collapsed
+table.collapsedhash=collapsedhash
local function unnest(t,f)
if not f then
f={}
@@ -2197,6 +2548,12 @@ function table.swapped(t,s)
end
return n
end
+function table.hashed(t)
+ for i=1,#t do
+ t[t[i]]=i
+ end
+ return t
+end
function table.mirrored(t)
local n={}
for k,v in next,t do
@@ -2365,7 +2722,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-io"] = package.loaded["l-io"] or true
--- original size: 9001, stripped down to: 6512
+-- original size: 11790, stripped down to: 6961
if not modules then modules={} end modules ['l-io']={
version=1.001,
@@ -2375,6 +2732,7 @@ if not modules then modules={} end modules ['l-io']={
license="see context related readme files"
}
local io=io
+local open,flush,write,read=io.open,io.flush,io.write,io.read
local byte,find,gsub,format=string.byte,string.find,string.gsub,string.format
local concat=table.concat
local floor=math.floor
@@ -2384,50 +2742,56 @@ if string.find(os.getenv("PATH"),";",1,true) then
else
io.fileseparator,io.pathseparator="/",":"
end
-local function readall(f)
- return f:read("*all")
-end
+local large=2^24
+local medium=large/16
+local small=medium/8
local function readall(f)
local size=f:seek("end")
- if size==0 then
- return ""
- elseif size<1024*1024 then
+ if size>0 then
f:seek("set",0)
- return f:read('*all')
- else
- local done=f:seek("set",0)
- local step
- if size<1024*1024 then
- step=1024*1024
- elseif size>16*1024*1024 then
- step=16*1024*1024
- else
- step=floor(size/(1024*1024))*1024*1024/8
- end
- local data={}
- while true do
- local r=f:read(step)
- if not r then
- return concat(data)
- else
- data[#data+1]=r
- end
- end
+ return f:read(size)
+ else
+ return ""
end
end
io.readall=readall
function io.loaddata(filename,textmode)
- local f=io.open(filename,(textmode and 'r') or 'rb')
+ local f=open(filename,(textmode and 'r') or 'rb')
if f then
- local data=readall(f)
+ local size=f:seek("end")
+ local data=nil
+ if size>0 then
+ f:seek("set",0)
+ data=f:read(size)
+ end
f:close()
- if #data>0 then
- return data
+ return data
+ end
+end
+function io.copydata(source,target,action)
+ local f=open(source,"rb")
+ if f then
+ local g=open(target,"wb")
+ if g then
+ local size=f:seek("end")
+ if size>0 then
+ f:seek("set",0)
+ local data=f:read(size)
+ if action then
+ data=action(data)
+ end
+ if data then
+ g:write(data)
+ end
+ end
+ g:close()
end
+ f:close()
+ flush()
end
end
function io.savedata(filename,data,joiner)
- local f=io.open(filename,"wb")
+ local f=open(filename,"wb")
if f then
if type(data)=="table" then
f:write(concat(data,joiner or ""))
@@ -2437,40 +2801,70 @@ function io.savedata(filename,data,joiner)
f:write(data or "")
end
f:close()
- io.flush()
+ flush()
return true
else
return false
end
end
-function io.loadlines(filename,n)
- local f=io.open(filename,'r')
- if not f then
- elseif n then
- local lines={}
- for i=1,n do
- local line=f:read("*lines")
- if line then
- lines[#lines+1]=line
- else
- break
+if fio and fio.readline then
+ local readline=fio.readline
+ function io.loadlines(filename,n)
+ local f=open(filename,'r')
+ if not f then
+ elseif n then
+ local lines={}
+ for i=1,n do
+ local line=readline(f)
+ if line then
+ lines[i]=line
+ else
+ break
+ end
+ end
+ f:close()
+ lines=concat(lines,"\n")
+ if #lines>0 then
+ return lines
+ end
+ else
+ local line=readline(f)
+ f:close()
+ if line and #line>0 then
+ return line
end
end
- f:close()
- lines=concat(lines,"\n")
- if #lines>0 then
- return lines
- end
- else
- local line=f:read("*line") or ""
- f:close()
- if #line>0 then
- return line
+ end
+else
+ function io.loadlines(filename,n)
+ local f=open(filename,'r')
+ if not f then
+ elseif n then
+ local lines={}
+ for i=1,n do
+ local line=f:read("*lines")
+ if line then
+ lines[i]=line
+ else
+ break
+ end
+ end
+ f:close()
+ lines=concat(lines,"\n")
+ if #lines>0 then
+ return lines
+ end
+ else
+ local line=f:read("*line") or ""
+ f:close()
+ if #line>0 then
+ return line
+ end
end
end
end
function io.loadchunk(filename,n)
- local f=io.open(filename,'rb')
+ local f=open(filename,'rb')
if f then
local data=f:read(n or 1024)
f:close()
@@ -2480,7 +2874,7 @@ function io.loadchunk(filename,n)
end
end
function io.exists(filename)
- local f=io.open(filename)
+ local f=open(filename)
if f==nil then
return false
else
@@ -2489,7 +2883,7 @@ function io.exists(filename)
end
end
function io.size(filename)
- local f=io.open(filename)
+ local f=open(filename)
if f==nil then
return 0
else
@@ -2498,11 +2892,11 @@ function io.size(filename)
return s
end
end
-function io.noflines(f)
+local function noflines(f)
if type(f)=="string" then
- local f=io.open(filename)
+ local f=open(filename)
if f then
- local n=f and io.noflines(f) or 0
+ local n=f and noflines(f) or 0
f:close()
return n
else
@@ -2517,6 +2911,7 @@ function io.noflines(f)
return n
end
end
+io.noflines=noflines
local nextchar={
[ 4]=function(f)
return f:read(1,1,1,1)
@@ -2594,16 +2989,16 @@ function io.bytes(f,n)
end
function io.ask(question,default,options)
while true do
- io.write(question)
+ write(question)
if options then
- io.write(format(" [%s]",concat(options,"|")))
+ write(format(" [%s]",concat(options,"|")))
end
if default then
- io.write(format(" [%s]",default))
+ write(format(" [%s]",default))
end
- io.write(format(" "))
- io.flush()
- local answer=io.read()
+ write(format(" "))
+ flush()
+ local answer=read()
answer=gsub(answer,"^%s*(.*)%s*$","%1")
if answer=="" and default then
return default
@@ -2625,7 +3020,7 @@ function io.ask(question,default,options)
end
end
end
-local function readnumber(f,n,m)
+local function readnumber(f,n,m)
if m then
f:seek("set",n)
n=m
@@ -2634,31 +3029,31 @@ local function readnumber(f,n,m)
return byte(f:read(1))
elseif n==2 then
local a,b=byte(f:read(2),1,2)
- return 256*a+b
+ return 0x100*a+b
elseif n==3 then
local a,b,c=byte(f:read(3),1,3)
- return 256*256*a+256*b+c
+ return 0x10000*a+0x100*b+c
elseif n==4 then
local a,b,c,d=byte(f:read(4),1,4)
- return 256*256*256*a+256*256*b+256*c+d
+ return 0x1000000*a+0x10000*b+0x100*c+d
elseif n==8 then
local a,b=readnumber(f,4),readnumber(f,4)
- return 256*a+b
+ return 0x100*a+b
elseif n==12 then
local a,b,c=readnumber(f,4),readnumber(f,4),readnumber(f,4)
- return 256*256*a+256*b+c
+ return 0x10000*a+0x100*b+c
elseif n==-2 then
local b,a=byte(f:read(2),1,2)
- return 256*a+b
+ return 0x100*a+b
elseif n==-3 then
local c,b,a=byte(f:read(3),1,3)
- return 256*256*a+256*b+c
+ return 0x10000*a+0x100*b+c
elseif n==-4 then
local d,c,b,a=byte(f:read(4),1,4)
- return 256*256*256*a+256*256*b+256*c+d
+ return 0x1000000*a+0x10000*b+0x100*c+d
elseif n==-8 then
local h,g,f,e,d,c,b,a=byte(f:read(8),1,8)
- return 256*256*256*256*256*256*256*a+256*256*256*256*256*256*b+256*256*256*256*256*c+256*256*256*256*d+256*256*256*e+256*256*f+256*g+h
+ return 0x100000000000000*a+0x1000000000000*b+0x10000000000*c+0x100000000*d+0x1000000*e+0x10000*f+0x100*g+h
else
return 0
end
@@ -2680,7 +3075,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-number"] = package.loaded["l-number"] or true
--- original size: 5146, stripped down to: 2933
+-- original size: 5358, stripped down to: 3177
if not modules then modules={} end modules ['l-number']={
version=1.001,
@@ -2693,6 +3088,7 @@ local tostring,tonumber=tostring,tonumber
local format,floor,match,rep=string.format,math.floor,string.match,string.rep
local concat,insert=table.concat,table.insert
local lpegmatch=lpeg.match
+local floor=math.floor
number=number or {}
local number=number
if bit32 then
@@ -2817,6 +3213,26 @@ end
function number.bits(n)
return { bits(n,1) }
end
+function number.bytetodecimal(b)
+ local d=floor(b*100/255+0.5)
+ if d>100 then
+ return 100
+ elseif d<-100 then
+ return -100
+ else
+ return d
+ end
+end
+function number.decimaltobyte(d)
+ local b=floor(d*255/100+0.5)
+ if b>255 then
+ return 255
+ elseif b<-255 then
+ return -255
+ else
+ return b
+ end
+end
end -- of closure
@@ -2825,7 +3241,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-set"] = package.loaded["l-set"] or true
--- original size: 2010, stripped down to: 1186
+-- original size: 1923, stripped down to: 1133
if not modules then modules={} end modules ['l-set']={
version=1.001,
@@ -2898,7 +3314,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-os"] = package.loaded["l-os"] or true
--- original size: 16390, stripped down to: 9734
+-- original size: 16268, stripped down to: 9246
if not modules then modules={} end modules ['l-os']={
version=1.001,
@@ -2974,7 +3390,7 @@ if not os.__getenv__ then
end
local execute=os.execute
local iopopen=io.popen
-function os.resultof(command)
+local function resultof(command)
local handle=iopopen(command,"r")
if handle then
local result=handle:read("*all") or ""
@@ -2984,9 +3400,13 @@ function os.resultof(command)
return ""
end
end
+os.resultof=resultof
+function os.pipeto(command)
+ return iopopen(command,"w")
+end
if not io.fileseparator then
if find(os.getenv("PATH"),";",1,true) then
- io.fileseparator,io.pathseparator,os.type="\\",";",os.type or "mswin"
+ io.fileseparator,io.pathseparator,os.type="\\",";",os.type or "windows"
else
io.fileseparator,io.pathseparator,os.type="/",":",os.type or "unix"
end
@@ -3029,17 +3449,6 @@ setmetatable(os,{ __index=function(t,k)
return r and r(t,k) or nil
end })
local name,platform=os.name or "linux",os.getenv("MTX_PLATFORM") or ""
-local function guess()
- local architecture=os.resultof("uname -m") or ""
- if architecture~="" then
- return architecture
- end
- architecture=os.getenv("HOSTTYPE") or ""
- if architecture~="" then
- return architecture
- end
- return os.resultof("echo $HOSTTYPE") or ""
-end
if platform~="" then
os.platform=platform
elseif os.type=="windows" then
@@ -3056,7 +3465,7 @@ elseif os.type=="windows" then
end
elseif name=="linux" then
function resolvers.platform(t,k)
- local platform,architecture="",os.getenv("HOSTTYPE") or os.resultof("uname -m") or ""
+ local platform,architecture="",os.getenv("HOSTTYPE") or resultof("uname -m") or ""
if find(architecture,"x86_64",1,true) then
platform="linux-64"
elseif find(architecture,"ppc",1,true) then
@@ -3070,7 +3479,7 @@ elseif name=="linux" then
end
elseif name=="macosx" then
function resolvers.platform(t,k)
- local platform,architecture="",os.resultof("echo $HOSTTYPE") or ""
+ local platform,architecture="",resultof("echo $HOSTTYPE") or ""
if architecture=="" then
platform="osx-intel"
elseif find(architecture,"i386",1,true) then
@@ -3086,7 +3495,7 @@ elseif name=="macosx" then
end
elseif name=="sunos" then
function resolvers.platform(t,k)
- local platform,architecture="",os.resultof("uname -m") or ""
+ local platform,architecture="",resultof("uname -m") or ""
if find(architecture,"sparc",1,true) then
platform="solaris-sparc"
else
@@ -3098,7 +3507,7 @@ elseif name=="sunos" then
end
elseif name=="freebsd" then
function resolvers.platform(t,k)
- local platform,architecture="",os.resultof("uname -m") or ""
+ local platform,architecture="",resultof("uname -m") or ""
if find(architecture,"amd64",1,true) then
platform="freebsd-amd64"
else
@@ -3110,7 +3519,7 @@ elseif name=="freebsd" then
end
elseif name=="kfreebsd" then
function resolvers.platform(t,k)
- local platform,architecture="",os.getenv("HOSTTYPE") or os.resultof("uname -m") or ""
+ local platform,architecture="",os.getenv("HOSTTYPE") or resultof("uname -m") or ""
if find(architecture,"x86_64",1,true) then
platform="kfreebsd-amd64"
else
@@ -3241,7 +3650,7 @@ if not os.sleep then
end
end
local function isleapyear(year)
- return (year%400==0) or ((year%100~=0) and (year%4==0))
+ return (year%4==0) and (year%100~=0 or year%400==0)
end
os.isleapyear=isleapyear
local days={ 31,28,31,30,31,30,31,31,30,31,30,31 }
@@ -3280,7 +3689,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-file"] = package.loaded["l-file"] or true
--- original size: 21648, stripped down to: 10238
+-- original size: 20997, stripped down to: 9986
if not modules then modules={} end modules ['l-file']={
version=1.001,
@@ -3617,13 +4026,15 @@ function file.robustname(str,strict)
end
end
end
-file.readdata=io.loaddata
-file.savedata=io.savedata
+local loaddata=io.loaddata
+local savedata=io.savedata
+file.readdata=loaddata
+file.savedata=savedata
function file.copy(oldname,newname)
if oldname and newname then
- local data=io.loaddata(oldname)
+ local data=loaddata(oldname)
if data and data~="" then
- file.savedata(newname,data)
+ savedata(newname,data)
end
end
end
@@ -3660,7 +4071,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-gzip"] = package.loaded["l-gzip"] or true
--- original size: 1265, stripped down to: 1038
+-- original size: 1211, stripped down to: 1002
if not modules then modules={} end modules ['l-gzip']={
version=1.001,
@@ -3714,7 +4125,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-md5"] = package.loaded["l-md5"] or true
--- original size: 3355, stripped down to: 2321
+-- original size: 3309, stripped down to: 2314
if not modules then modules={} end modules ['l-md5']={
version=1.001,
@@ -3744,6 +4155,8 @@ do
if not md5.HEX then function md5.HEX(str) if str then return lpegmatch(bytestoHEX,md5sum(str)) end end end
if not md5.hex then function md5.hex(str) if str then return lpegmatch(bytestohex,md5sum(str)) end end end
if not md5.dec then function md5.dec(str) if str then return lpegmatch(bytestodec,md5sum(str)) end end end
+ md5.sumhexa=md5.hex
+ md5.sumHEXA=md5.HEX
end
end
function file.needsupdating(oldname,newname,threshold)
@@ -3802,7 +4215,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-url"] = package.loaded["l-url"] or true
--- original size: 12897, stripped down to: 5882
+-- original size: 12531, stripped down to: 5721
if not modules then modules={} end modules ['l-url']={
version=1.001,
@@ -4019,7 +4432,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-dir"] = package.loaded["l-dir"] or true
--- original size: 17358, stripped down to: 11378
+-- original size: 17703, stripped down to: 11691
if not modules then modules={} end modules ['l-dir']={
version=1.001,
@@ -4283,6 +4696,31 @@ local function globfiles(path,recurse,func,files)
return files
end
dir.globfiles=globfiles
+local function globdirs(path,recurse,func,files)
+ if type(func)=="string" then
+ local s=func
+ func=function(name) return find(name,s) end
+ end
+ files=files or {}
+ local noffiles=#files
+ for name in walkdir(path) do
+ if find(name,"^%.") then
+ else
+ local mode=attributes(name,'mode')
+ if mode=="directory" then
+ if not func or func(name) then
+ noffiles=noffiles+1
+ files[noffiles]=path.."/"..name
+ if recurse then
+ globdirs(path.."/"..name,recurse,func,files)
+ end
+ end
+ end
+ end
+ end
+ return files
+end
+dir.globdirs=globdirs
function dir.ls(pattern)
return concat(glob(pattern),"\n")
end
@@ -4447,9 +4885,13 @@ end
file.expandname=dir.expandname
local stack={}
function dir.push(newdir)
- insert(stack,currentdir())
+ local curdir=currentdir()
+ insert(stack,curdir)
if newdir and newdir~="" then
chdir(newdir)
+ return newdir
+ else
+ return curdir
end
end
function dir.pop()
@@ -4484,7 +4926,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-boolean"] = package.loaded["l-boolean"] or true
--- original size: 1919, stripped down to: 1621
+-- original size: 1850, stripped down to: 1568
if not modules then modules={} end modules ['l-boolean']={
version=1.001,
@@ -4556,7 +4998,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-unicode"] = package.loaded["l-unicode"] or true
--- original size: 38699, stripped down to: 16321
+-- original size: 38263, stripped down to: 16330
if not modules then modules={} end modules ['l-unicode']={
version=1.001,
@@ -5167,6 +5609,23 @@ function utf.chrlen(u)
(u<0xFC and 5) or
(u<0xFE and 6) or 0
end
+local extract=bit32.extract
+local char=string.char
+function unicode.toutf32string(n)
+ if n<=0xFF then
+ return
+ char(n).."\000\000\000"
+ elseif n<=0xFFFF then
+ return
+ char(extract(n,0,8))..char(extract(n,8,8)).."\000\000"
+ elseif n<=0xFFFFFF then
+ return
+ char(extract(n,0,8))..char(extract(n,8,8))..char(extract(n,16,8)).."\000"
+ else
+ return
+ char(extract(n,0,8))..char(extract(n,8,8))..char(extract(n,16,8))..char(extract(n,24,8))
+ end
+end
end -- of closure
@@ -5175,7 +5634,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-math"] = package.loaded["l-math"] or true
--- original size: 1012, stripped down to: 912
+-- original size: 974, stripped down to: 890
if not modules then modules={} end modules ['l-math']={
version=1.001,
@@ -5215,7 +5674,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-str"] = package.loaded["util-str"] or true
--- original size: 36053, stripped down to: 19685
+-- original size: 36148, stripped down to: 20179
if not modules then modules={} end modules ['util-str']={
version=1.001,
@@ -5227,7 +5686,7 @@ if not modules then modules={} end modules ['util-str']={
utilities=utilities or {}
utilities.strings=utilities.strings or {}
local strings=utilities.strings
-local format,gsub,rep,sub=string.format,string.gsub,string.rep,string.sub
+local format,gsub,rep,sub,find=string.format,string.gsub,string.rep,string.sub,string.find
local load,dump=load,string.dump
local tonumber,type,tostring=tonumber,type,tostring
local unpack,concat=table.unpack,table.concat
@@ -5410,6 +5869,25 @@ function number.signed(i)
return "-",-i
end
end
+local digit=patterns.digit
+local period=patterns.period
+local three=digit*digit*digit
+local splitter=Cs (
+ (((1-(three^1*period))^1+C(three))*(Carg(1)*three)^1+C((1-period)^1))*(P(1)/""*Carg(2))*C(2)
+)
+patterns.formattednumber=splitter
+function number.formatted(n,sep1,sep2)
+ local s=type(s)=="string" and n or format("%0.2f",n)
+ if sep1==true then
+ return lpegmatch(splitter,s,1,".",",")
+ elseif sep1=="." then
+ return lpegmatch(splitter,s,1,sep1,sep2 or ",")
+ elseif sep1=="," then
+ return lpegmatch(splitter,s,1,sep1,sep2 or ".")
+ else
+ return lpegmatch(splitter,s,1,sep1 or ",",sep2 or ".")
+ end
+end
local zero=P("0")^1/""
local plus=P("+")/""
local minus=P("-")
@@ -5435,6 +5913,27 @@ function number.sparseexponent(f,n)
end
return tostring(n)
end
+local hf={}
+local hs={}
+setmetatable(hf,{ __index=function(t,k)
+ local v="%."..k.."f"
+ t[k]=v
+ return v
+end } )
+setmetatable(hs,{ __index=function(t,k)
+ local v="%"..k.."s"
+ t[k]=v
+ return v
+end } )
+function number.formattedfloat(n,b,a)
+ local s=format(hf[a],n)
+ local l=(b or 0)+(a or 0)+1
+ if #s<l then
+ return format(hs[l],s)
+ else
+ return s
+ end
+end
local template=[[
%s
%s
@@ -5462,6 +5961,7 @@ local autodouble=string.autodouble
local sequenced=table.sequenced
local formattednumber=number.formatted
local sparseexponent=number.sparseexponent
+local formattedfloat=number.formattedfloat
]]
else
environment={
@@ -5485,6 +5985,7 @@ else
sequenced=table.sequenced,
formattednumber=number.formatted,
sparseexponent=number.sparseexponent,
+ formattedfloat=number.formattedfloat
}
end
local arguments={ "a1" }
@@ -5495,6 +5996,7 @@ setmetatable(arguments,{ __index=function(t,k)
end
})
local prefix_any=C((S("+- .")+R("09"))^0)
+local prefix_sub=(C((S("+-")+R("09"))^0)+Cc(0))*P(".")*(C((S("+-")+R("09"))^0)+Cc(0))
local prefix_tab=P("{")*C((1-P("}"))^0)*P("}")+C((1-R("az","AZ","09","%%"))^0)
local format_s=function(f)
n=n+1
@@ -5545,6 +6047,10 @@ local format_F=function(f)
return format("format((a%s %% 1 == 0) and '%%i' or '%%%sf',a%s)",n,f,n)
end
end
+local format_k=function(b,a)
+ n=n+1
+ return format("formattedfloat(a%s,%i,%i)",n,b or 0,a or 0)
+end
local format_g=function(f)
n=n+1
return format("format('%%%sg',a%s)",f,n)
@@ -5693,25 +6199,6 @@ end
local format_W=function(f)
return format("nspaces[%s]",tonumber(f) or 0)
end
-local digit=patterns.digit
-local period=patterns.period
-local three=digit*digit*digit
-local splitter=Cs (
- (((1-(three^1*period))^1+C(three))*(Carg(1)*three)^1+C((1-period)^1))*(P(1)/""*Carg(2))*C(2)
-)
-patterns.formattednumber=splitter
-function number.formatted(n,sep1,sep2)
- local s=type(s)=="string" and n or format("%0.2f",n)
- if sep1==true then
- return lpegmatch(splitter,s,1,".",",")
- elseif sep1=="." then
- return lpegmatch(splitter,s,1,sep1,sep2 or ",")
- elseif sep1=="," then
- return lpegmatch(splitter,s,1,sep1,sep2 or ".")
- else
- return lpegmatch(splitter,s,1,sep1 or ",",sep2 or ".")
- end
-end
local format_m=function(f)
n=n+1
if not f or f=="" then
@@ -5736,9 +6223,16 @@ end
local format_extension=function(extensions,f,name)
local extension=extensions[name] or "tostring(%s)"
local f=tonumber(f) or 1
+ local w=find(extension,"%.%.%.")
if f==0 then
+ if w then
+ extension=gsub(extension,"%.%.%.","")
+ end
return extension
elseif f==1 then
+ if w then
+ extension=gsub(extension,"%.%.%.","%%s")
+ end
n=n+1
local a="a"..n
return format(extension,a,a)
@@ -5746,10 +6240,13 @@ local format_extension=function(extensions,f,name)
local a="a"..(n+f+1)
return format(extension,a,a)
else
+ if w then
+ extension=gsub(extension,"%.%.%.",rep("%%s,",f-1).."%%s")
+ end
local t={}
for i=1,f do
n=n+1
- t[#t+1]="a"..n
+ t[i]="a"..n
end
return format(extension,unpack(t))
end
@@ -5762,7 +6259,8 @@ local builder=Cs { "start",
+V("s")+V("q")+V("i")+V("d")+V("f")+V("F")+V("g")+V("G")+V("e")+V("E")+V("x")+V("X")+V("o")
+V("c")+V("C")+V("S")
+V("Q")
-+V("N")
++V("N")
++V("k")
+V("r")+V("h")+V("H")+V("u")+V("U")+V("p")+V("b")+V("t")+V("T")+V("l")+V("L")+V("I")+V("w")
+V("W")
+V("a")
@@ -5789,6 +6287,7 @@ local builder=Cs { "start",
["S"]=(prefix_any*P("S"))/format_S,
["Q"]=(prefix_any*P("Q"))/format_S,
["N"]=(prefix_any*P("N"))/format_N,
+ ["k"]=(prefix_sub*P("k"))/format_k,
["c"]=(prefix_any*P("c"))/format_c,
["C"]=(prefix_any*P("C"))/format_C,
["r"]=(prefix_any*P("r"))/format_r,
@@ -5909,7 +6408,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-tab"] = package.loaded["util-tab"] or true
--- original size: 28680, stripped down to: 18636
+-- original size: 27407, stripped down to: 17116
if not modules then modules={} end modules ['util-tab']={
version=1.001,
@@ -5923,7 +6422,7 @@ utilities.tables=utilities.tables or {}
local tables=utilities.tables
local format,gmatch,gsub,sub=string.format,string.gmatch,string.gsub,string.sub
local concat,insert,remove,sort=table.concat,table.insert,table.remove,table.sort
-local setmetatable,getmetatable,tonumber,tostring=setmetatable,getmetatable,tonumber,tostring
+local setmetatable,getmetatable,tonumber,tostring,rawget=setmetatable,getmetatable,tonumber,tostring,rawget
local type,next,rawset,tonumber,tostring,load,select=type,next,rawset,tonumber,tostring,load,select
local lpegmatch,P,Cs,Cc=lpeg.match,lpeg.P,lpeg.Cs,lpeg.Cc
local sortedkeys,sortedpairs=table.sortedkeys,table.sortedpairs
@@ -6063,7 +6562,7 @@ function table.tocsv(t,specification)
r[f]=tostring(field)
end
end
- result[#result+1]=concat(r,separator)
+ result[i+1]=concat(r,separator)
end
return concat(result,"\n")
else
@@ -6295,11 +6794,12 @@ function table.autokey(t,k)
return v
end
local selfmapper={ __index=function(t,k) t[k]=k return k end }
-function table.twowaymapper(t)
- if not t then
- t={}
- else
- for i=0,#t do
+function table.twowaymapper(t)
+ if not t then
+ t={}
+ else
+ local zero=rawget(t,0)
+ for i=zero and 0 or 1,#t do
local ti=t[i]
if ti then
local i=tostring(i)
@@ -6307,7 +6807,6 @@ function table.twowaymapper(t)
t[ti]=i
end
end
- t[""]=t[0] or ""
end
setmetatable(t,selfmapper)
return t
@@ -6346,6 +6845,7 @@ local f_table_entry=formatters["[%q]={"]
local f_table_finish=formatters["}"]
local spaces=utilities.strings.newrepeater(" ")
local original_serialize=table.serialize
+local is_simple_table=table.is_simple_table
local function serialize(root,name,specification)
if type(specification)=="table" then
return original_serialize(root,name,specification)
@@ -6353,54 +6853,6 @@ local function serialize(root,name,specification)
local t
local n=1
local unknown=false
- local function simple_table(t)
- local nt=#t
- if nt>0 then
- local n=0
- for _,v in next,t do
- n=n+1
- if type(v)=="table" then
- return nil
- end
- end
- local haszero=t[0]
- if n==nt then
- local tt={}
- for i=1,nt do
- local v=t[i]
- local tv=type(v)
- if tv=="number" then
- tt[i]=v
- elseif tv=="string" then
- tt[i]=format("%q",v)
- elseif tv=="boolean" then
- tt[i]=v and "true" or "false"
- else
- return nil
- 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
- end
local function do_serialize(root,name,depth,level,indexed)
if level>0 then
n=n+1
@@ -6425,7 +6877,7 @@ local function serialize(root,name,specification)
local last=0
last=#root
for k=1,last do
- if root[k]==nil then
+ if rawget(root,k)==nil then
last=k-1
break
end
@@ -6448,7 +6900,7 @@ local function serialize(root,name,specification)
if next(v)==nil then
n=n+1 t[n]=f_val_not(depth)
else
- local st=simple_table(v)
+ local st=is_simple_table(v)
if st then
n=n+1 t[n]=f_val_seq(depth,st)
else
@@ -6492,7 +6944,7 @@ local function serialize(root,name,specification)
n=n+1 t[n]=f_key_str_value_not(depth,tostring(k))
end
else
- local st=simple_table(v)
+ local st=is_simple_table(v)
if not st then
do_serialize(v,k,depth,level+1)
elseif tk=="number" then
@@ -6552,11 +7004,11 @@ local function serialize(root,name,specification)
end
if root then
if getmetatable(root) then
- local dummy=root._w_h_a_t_e_v_e_r_
+ local dummy=root._w_h_a_t_e_v_e_r_
root._w_h_a_t_e_v_e_r_=nil
end
if next(root)~=nil then
- local st=simple_table(root)
+ local st=is_simple_table(root)
if st then
return t[1]..f_fin_seq(st)
else
@@ -6570,7 +7022,12 @@ local function serialize(root,name,specification)
end
table.serialize=serialize
if setinspector then
- setinspector("table",function(v) if type(v)=="table" then print(serialize(v,"table",{})) return true end end)
+ setinspector("table",function(v)
+ if type(v)=="table" then
+ print(serialize(v,"table",{ metacheck=false }))
+ return true
+ end
+ end)
end
@@ -6580,7 +7037,7 @@ 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
+-- original size: 7567, stripped down to: 5575
if not modules then modules={} end modules ['util-fil']={
version=1.001,
@@ -6590,7 +7047,9 @@ if not modules then modules={} end modules ['util-fil']={
license="see context related readme files"
}
local byte=string.byte
-local extract=bit32.extract
+local char=string.char
+local extract=bit32 and bit32.extract
+local floor=math.floor
utilities=utilities or {}
local files={}
utilities.files=files
@@ -6609,6 +7068,7 @@ end
function files.size(f)
return f:seek("end")
end
+files.getsize=files.size
function files.setposition(f,n)
if zerobased[f] then
f:seek("set",n)
@@ -6646,6 +7106,10 @@ end
function files.readbytes(f,n)
return byte(f:read(n),1,n)
end
+function files.readbytetable(f,n)
+ local s=f:read(n or 1)
+ return { byte(s,1,#s) }
+end
function files.readchar(f)
return f:read(1)
end
@@ -6655,7 +7119,7 @@ end
function files.readinteger1(f)
local n=byte(f:read(1))
if n>=0x80 then
- return n-0xFF-1
+ return n-0x100
else
return n
end
@@ -6663,55 +7127,107 @@ end
files.readcardinal1=files.readbyte
files.readcardinal=files.readcardinal1
files.readinteger=files.readinteger1
+files.readsignedbyte=files.readinteger1
function files.readcardinal2(f)
local a,b=byte(f:read(2),1,2)
return 0x100*a+b
end
+function files.readcardinal2le(f)
+ local b,a=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
+ if a>=0x80 then
+ return 0x100*a+b-0x10000
else
- return n
+ return 0x100*a+b
+ end
+end
+function files.readinteger2le(f)
+ local b,a=byte(f:read(2),1,2)
+ if a>=0x80 then
+ return 0x100*a+b-0x10000
+ else
+ return 0x100*a+b
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.readcardinal3le(f)
+ local c,b,a=byte(f:read(3),1,3)
+ return 0x10000*a+0x100*b+c
+end
+function files.readinteger3(f)
+ local a,b,c=byte(f:read(3),1,3)
+ if a>=0x80 then
+ return 0x10000*a+0x100*b+c-0x1000000
+ else
+ return 0x10000*a+0x100*b+c
+ end
+end
+function files.readinteger3le(f)
+ local c,b,a=byte(f:read(3),1,3)
+ if a>=0x80 then
+ return 0x10000*a+0x100*b+c-0x1000000
+ else
+ return 0x10000*a+0x100*b+c
+ end
+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.readcardinal4le(f)
+ local d,c,b,a=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
+ if a>=0x80 then
+ return 0x1000000*a+0x10000*b+0x100*c+d-0x100000000
else
- return n
+ return 0x1000000*a+0x10000*b+0x100*c+d
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
+function files.readinteger4le(f)
+ local d,c,b,a=byte(f:read(4),1,4)
+ if a>=0x80 then
+ return 0x1000000*a+0x10000*b+0x100*c+d-0x100000000
else
- return n+(0x100*c+d)/0xFFFF
+ return 0x1000000*a+0x10000*b+0x100*c+d
end
end
-function files.read2dot14(f)
+function files.readfixed2(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
+ if a>=0x80 then
+ return (a-0x100)+b/0x100
+ else
+ return (a )+b/0x100
+ end
+end
+function files.readfixed4(f)
+ local a,b,c,d=byte(f:read(4),1,4)
+ if a>=0x80 then
+ return (0x100*a+b-0x10000)+(0x100*c+d)/0x10000
else
- n=extract(n,30,2)
- return n+m/0x4000
+ return (0x100*a+b )+(0x100*c+d)/0x10000
+ end
+end
+if extract then
+ local extract=bit32.extract
+ local band=bit32.band
+ function files.read2dot14(f)
+ local a,b=byte(f:read(2),1,2)
+ if a>=0x80 then
+ local n=-(0x100*a+b)
+ return-(extract(n,14,2)+(band(n,0x3FFF)/16384.0))
+ else
+ local n=0x100*a+b
+ return (extract(n,14,2)+(band(n,0x3FFF)/16384.0))
+ end
end
end
function files.skipshort(f,n)
@@ -6720,6 +7236,55 @@ end
function files.skiplong(f,n)
f:read(4*(n or 1))
end
+function files.writecardinal2(f,n)
+ local a=char(n%256)
+ n=floor(n/256)
+ local b=char(n%256)
+ f:write(b,a)
+end
+function files.writecardinal4(f,n)
+ local a=char(n%256)
+ n=floor(n/256)
+ local b=char(n%256)
+ n=floor(n/256)
+ local c=char(n%256)
+ n=floor(n/256)
+ local d=char(n%256)
+ f:write(d,c,b,a)
+end
+function files.writestring(f,s)
+ f:write(char(byte(s,1,#s)))
+end
+function files.writebyte(f,b)
+ f:write(char(b))
+end
+if fio and fio.readcardinal1 then
+ files.readcardinal1=fio.readcardinal1
+ files.readcardinal2=fio.readcardinal2
+ files.readcardinal3=fio.readcardinal3
+ files.readcardinal4=fio.readcardinal4
+ files.readinteger1=fio.readinteger1
+ files.readinteger2=fio.readinteger2
+ files.readinteger3=fio.readinteger3
+ files.readinteger4=fio.readinteger4
+ files.read2dot14=fio.read2dot14
+ files.setposition=fio.setposition
+ files.getposition=fio.getposition
+ files.readbyte=files.readcardinal1
+ files.readsignedbyte=files.readinteger1
+ files.readcardinal=files.readcardinal1
+ files.readinteger=files.readinteger1
+ local skipposition=fio.skipposition
+ files.skipposition=skipposition
+ files.readbytes=fio.readbytes
+ files.readbytetable=fio.readbytetable
+ function files.skipshort(f,n)
+ skipposition(f,2*(n or 1))
+ end
+ function files.skiplong(f,n)
+ skipposition(f,4*(n or 1))
+ end
+end
end -- of closure
@@ -6728,7 +7293,7 @@ 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
+-- original size: 8716, stripped down to: 6754
if not modules then modules={} end modules ['util-sac']={
version=1.001,
@@ -6738,7 +7303,7 @@ if not modules then modules={} end modules ['util-sac']={
license="see context related readme files"
}
local byte,sub=string.byte,string.sub
-local extract=bit32.extract
+local extract=bit32 and bit32.extract
utilities=utilities or {}
local streams={}
utilities.streams=streams
@@ -6796,6 +7361,12 @@ function streams.readbytes(f,n)
f[2]=j
return byte(f[1],i,j-1)
end
+function streams.readbytetable(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
@@ -6815,7 +7386,7 @@ function streams.readinteger1(f)
f[2]=i+1
local n=byte(f[1],i)
if n>=0x80 then
- return n-0xFF-1
+ return n-0x100
else
return n
end
@@ -6830,16 +7401,33 @@ function streams.readcardinal2(f)
local a,b=byte(f[1],i,j)
return 0x100*a+b
end
+function streams.readcardinal2LE(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local b,a=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
+ if a>=0x80 then
+ return 0x100*a+b-0x10000
else
- return n
+ return 0x100*a+b
+ end
+end
+function streams.readinteger2le(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local b,a=byte(f[1],i,j)
+ if a>=0x80 then
+ return 0x100*a+b-0x10000
+ else
+ return 0x100*a+b
end
end
function streams.readcardinal3(f)
@@ -6849,6 +7437,35 @@ function streams.readcardinal3(f)
local a,b,c=byte(f[1],i,j)
return 0x10000*a+0x100*b+c
end
+function streams.readcardinal3le(f)
+ local i=f[2]
+ local j=i+2
+ f[2]=j+1
+ local c,b,a=byte(f[1],i,j)
+ return 0x10000*a+0x100*b+c
+end
+function streams.readinteger3(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local a,b,c=byte(f[1],i,j)
+ if a>=0x80 then
+ return 0x10000*a+0x100*b+c-0x1000000
+ else
+ return 0x10000*a+0x100*b+c
+ end
+end
+function streams.readinteger3le(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local c,b,a=byte(f[1],i,j)
+ if a>=0x80 then
+ return 0x10000*a+0x100*b+c-0x1000000
+ else
+ return 0x10000*a+0x100*b+c
+ end
+end
function streams.readcardinal4(f)
local i=f[2]
local j=i+3
@@ -6861,11 +7478,21 @@ function streams.readinteger4(f)
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
+ if a>=0x80 then
+ return 0x1000000*a+0x10000*b+0x100*c+d-0x100000000
else
- return n
+ return 0x1000000*a+0x10000*b+0x100*c+d
+ end
+end
+function streams.readinteger4le(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local d,c,b,a=byte(f[1],i,j)
+ if a>=0x80 then
+ return 0x1000000*a+0x10000*b+0x100*c+d-0x100000000
+ else
+ return 0x1000000*a+0x10000*b+0x100*c+d
end
end
function streams.readfixed4(f)
@@ -6873,26 +7500,38 @@ function streams.readfixed4(f)
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
+ if a>=0x80 then
+ return (0x100*a+b-0x10000)+(0x100*c+d)/0x10000
else
- return n+(0x100*c+d)/0xFFFF
+ return (0x100*a+b )+(0x100*c+d)/0x10000
end
end
-function streams.read2dot14(f)
+function streams.readfixed2(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
+ if a>=0x80 then
+ return (a-0x100)+b/0x100
+ else
+ return (a )+b/0x100
+ end
+end
+if extract then
+ local extract=bit32.extract
+ local band=bit32.band
+ function streams.read2dot14(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local a,b=byte(f[1],i,j)
+ if a>=0x80 then
+ local n=-(0x100*a+b)
+ return-(extract(n,14,2)+(band(n,0x3FFF)/16384.0))
+ else
+ local n=0x100*a+b
+ return (extract(n,14,2)+(band(n,0x3FFF)/16384.0))
+ end
end
end
function streams.skipshort(f,n)
@@ -6901,6 +7540,92 @@ end
function streams.skiplong(f,n)
f[2]=f[2]+4*(n or 1)
end
+if sio and sio.readcardinal2 then
+ local readcardinal1=sio.readcardinal1
+ local readcardinal2=sio.readcardinal2
+ local readcardinal3=sio.readcardinal3
+ local readcardinal4=sio.readcardinal4
+ local readinteger1=sio.readinteger1
+ local readinteger2=sio.readinteger2
+ local readinteger3=sio.readinteger3
+ local readinteger4=sio.readinteger4
+ local readfixed2=sio.readfixed2
+ local readfixed4=sio.readfixed4
+ local read2dot14=sio.read2dot14
+ local readbytes=sio.readbytes
+ local readbytetable=sio.readbytetable
+ function streams.readcardinal1(f)
+ local i=f[2]
+ f[2]=i+1
+ return readcardinal1(f[1],i)
+ end
+ function streams.readcardinal2(f)
+ local i=f[2]
+ f[2]=i+2
+ return readcardinal2(f[1],i)
+ end
+ function streams.readcardinal3(f)
+ local i=f[2]
+ f[2]=i+3
+ return readcardinal3(f[1],i)
+ end
+ function streams.readcardinal4(f)
+ local i=f[2]
+ f[2]=i+4
+ return readcardinal4(f[1],i)
+ end
+ function streams.readinteger1(f)
+ local i=f[2]
+ f[2]=i+1
+ return readinteger1(f[1],i)
+ end
+ function streams.readinteger2(f)
+ local i=f[2]
+ f[2]=i+2
+ return readinteger2(f[1],i)
+ end
+ function streams.readinteger3(f)
+ local i=f[2]
+ f[2]=i+3
+ return readinteger3(f[1],i)
+ end
+ function streams.readinteger4(f)
+ local i=f[2]
+ f[2]=i+4
+ return readinteger4(f[1],i)
+ end
+ function streams.read2dot4(f)
+ local i=f[2]
+ f[2]=i+2
+ return read2dot4(f[1],i)
+ end
+ function streams.readbytes(f,n)
+ local i=f[2]
+ local s=f[3]
+ local p=i+n
+ if p>s then
+ f[2]=s+1
+ else
+ f[2]=p
+ end
+ return readbytes(f[1],i,n)
+ end
+ function streams.readbytetable(f,n)
+ local i=f[2]
+ local s=f[3]
+ local p=i+n
+ if p>s then
+ f[2]=s+1
+ else
+ f[2]=p
+ end
+ return readbytetable(f[1],i,n)
+ end
+ streams.readbyte=streams.readcardinal1
+ streams.readsignedbyte=streams.readinteger1
+ streams.readcardinal=streams.readcardinal1
+ streams.readinteger=streams.readinteger1
+end
end -- of closure
@@ -6909,7 +7634,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-sto"] = package.loaded["util-sto"] or true
--- original size: 4100, stripped down to: 2852
+-- original size: 3926, stripped down to: 2742
if not modules then modules={} end modules ['util-sto']={
version=1.001,
@@ -7049,7 +7774,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-prs"] = package.loaded["util-prs"] or true
--- original size: 23411, stripped down to: 16177
+-- original size: 22883, stripped down to: 16045
if not modules then modules={} end modules ['util-prs']={
version=1.001,
@@ -7211,6 +7936,21 @@ function parsers.settings_to_array(str,strict)
return { str }
end
end
+function parsers.settings_to_numbers(str)
+ if not str or str=="" then
+ return {}
+ end
+ if type(str)=="table" then
+ elseif find(str,",",1,true) then
+ str=lpegmatch(pattern,str)
+ else
+ return { tonumber(str) }
+ end
+ for i=1,#str do
+ str[i]=tonumber(str[i])
+ end
+ return str
+end
local value=P(lbrace*C((nobrace+nestedbraces)^0)*rbrace)+C((nestedbraces+nestedbrackets+nestedparents+(1-comma))^0)
local pattern=spaces*Ct(value*(separator*value)^0)
function parsers.settings_to_array_obey_fences(str)
@@ -7587,7 +8327,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-fmt"] = package.loaded["util-fmt"] or true
--- original size: 2350, stripped down to: 1847
+-- original size: 2274, stripped down to: 1781
if not modules then modules={} end modules ['util-fmt']={
version=1.001,
@@ -7668,7 +8408,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-set"] = package.loaded["trac-set"] or true
--- original size: 12862, stripped down to: 9104
+-- original size: 12454, stripped down to: 8840
if not modules then modules={} end modules ['trac-set']={
version=1.001,
@@ -7854,7 +8594,6 @@ function setters.list(t)
return user,system
end
function setters.show(t)
- local category=t.name
local list=setters.list(t)
t.report()
for k=1,#list do
@@ -7981,7 +8720,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-log"] = package.loaded["trac-log"] or true
--- original size: 30767, stripped down to: 21355
+-- original size: 30007, stripped down to: 20818
if not modules then modules={} end modules ['trac-log']={
version=1.001,
@@ -8027,6 +8766,14 @@ if tex and (tex.jobname or tex.formatname) then
if texio.setescape then
texio.setescape(0)
end
+ if arg then
+ for k,v in next,arg do
+ if v=="--ansi" or v=="--c:ansi" then
+ variant="ansi"
+ break
+ end
+ end
+ end
local function useluawrites()
local texio_write_nl=texio.write_nl
local texio_write=texio.write
@@ -8612,7 +9359,6 @@ function logs.stop_page_number()
end
logs.flush()
end
-local report_files=logs.reporter("files")
local nesting=0
local verbose=false
local hasscheme=url.hasscheme
@@ -8774,7 +9520,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-inf"] = package.loaded["trac-inf"] or true
--- original size: 6917, stripped down to: 5484
+-- original size: 8036, stripped down to: 5567
if not modules then modules={} end modules ['trac-inf']={
version=1.001,
@@ -8806,11 +9552,13 @@ end
local function resettiming(instance)
timers[instance or "notimer"]={ timing=0,loadtime=0 }
end
+local ticks=clock
+local seconds=function(n) return n or 0 end
local function starttiming(instance)
local timer=timers[instance or "notimer"]
local it=timer.timing or 0
if it==0 then
- timer.starttime=clock()
+ timer.starttime=ticks()
if not timer.loadtime then
timer.loadtime=0
end
@@ -8824,12 +9572,13 @@ local function stoptiming(instance)
timer.timing=it-1
else
local starttime=timer.starttime
- if starttime then
- local stoptime=clock()
+ if starttime and starttime>0 then
+ local stoptime=ticks()
local loadtime=stoptime-starttime
timer.stoptime=stoptime
timer.loadtime=timer.loadtime+loadtime
timer.timing=0
+ timer.starttime=0
return loadtime
end
end
@@ -8840,7 +9589,7 @@ local function elapsed(instance)
return instance or 0
else
local timer=timers[instance or "notimer"]
- return timer and timer.loadtime or 0
+ return timer and seconds(timer.loadtime) or 0
end
end
local function elapsedtime(instance)
@@ -8888,10 +9637,13 @@ function statistics.show()
local total,indirect=status.callbacks or 0,status.indirect_callbacks or 0
return format("%s direct, %s indirect, %s total",total-indirect,indirect,total)
end)
- if jit then
- local jitstatus={ jit.status() }
- if jitstatus[1] then
- register("luajit options",concat(jitstatus," ",2))
+ if TEXENGINE=="luajittex" and JITSUPPORTED then
+ local jitstatus=jit.status
+ if jitstatus then
+ local jitstatus={ jitstatus() }
+ if jitstatus[1] then
+ register("luajit options",concat(jitstatus," ",2))
+ end
end
end
register("lua properties",function()
@@ -8955,7 +9707,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-pro"] = package.loaded["trac-pro"] or true
--- original size: 6039, stripped down to: 3616
+-- original size: 5829, stripped down to: 3501
if not modules then modules={} end modules ['trac-pro']={
version=1.001,
@@ -9102,7 +9854,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-lua"] = package.loaded["util-lua"] or true
--- original size: 5142, stripped down to: 3611
+-- original size: 5396, stripped down to: 3708
if not modules then modules={} end modules ['util-lua']={
version=1.001,
@@ -9224,6 +9976,17 @@ function luautilities.loadstripped(...)
return load(dump(l,true))
end
end
+local finalizers={}
+setmetatable(finalizers,{
+ __gc=function(t)
+ for i=1,#t do
+ pcall(t[i])
+ end
+ end
+} )
+function luautilities.registerfinalizer(f)
+ finalizers[#finalizers+1]=f
+end
end -- of closure
@@ -9232,7 +9995,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-deb"] = package.loaded["util-deb"] or true
--- original size: 4030, stripped down to: 2718
+-- original size: 8911, stripped down to: 6504
if not modules then modules={} end modules ['util-deb']={
version=1.001,
@@ -9242,75 +10005,230 @@ if not modules then modules={} end modules ['util-deb']={
license="see context related readme files"
}
local debug=require "debug"
-local getinfo=debug.getinfo
-local type,next,tostring=type,next,tostring
-local format,find=string.format,string.find
-local is_boolean=string.is_boolean
+local getinfo,sethook=debug.getinfo,debug.sethook
+local type,next,tostring,tonumber=type,next,tostring,tonumber
+local format,find,sub,gsub=string.format,string.find,string.sub,string.gsub
+local insert,remove,sort=table.insert,table.remove,table.sort
+local setmetatableindex=table.setmetatableindex
utilities=utilities or {}
local debugger=utilities.debugger or {}
utilities.debugger=debugger
-local counters={}
-local names={}
local report=logs.reporter("debugger")
-local function hook()
- local f=getinfo(2)
- if f then
- local n="unknown"
- if f.what=="C" then
- n=f.name or '<anonymous>'
- if not names[n] then
- names[n]=format("%42s",n)
+local ticks=os.gettimeofday or os.clock
+local seconds=function(n) return n or 0 end
+local overhead=0
+local dummycalls=10*1000
+local nesting=0
+local names={}
+local initialize=false
+if not (FFISUPPORTED and ffi) then
+elseif os.type=="windows" then
+ initialize=function()
+ local kernel=ffilib("kernel32","system")
+ if kernel then
+ local tonumber=ffi.number or tonumber
+ ffi.cdef[[
+ int QueryPerformanceFrequency(int64_t *lpFrequency);
+ int QueryPerformanceCounter(int64_t *lpPerformanceCount);
+ ]]
+ local target=ffi.new("__int64[1]")
+ ticks=function()
+ if kernel.QueryPerformanceCounter(target)==1 then
+ return tonumber(target[0])
+ else
+ return 0
+ end
end
- else
- n=f.name or f.namewhat or f.what
- if not n or n=="" then
- n="?"
+ local target=ffi.new("__int64[1]")
+ seconds=function(ticks)
+ if kernel.QueryPerformanceFrequency(target)==1 then
+ return ticks/tonumber(target[0])
+ else
+ return 0
+ end
+ end
+ end
+ initialize=false
+ end
+elseif os.type=="unix" then
+ initialize=function()
+ local C=ffi.C
+ local tonumber=ffi.number or tonumber
+ ffi.cdef [[
+ /* what a mess */
+ typedef int clk_id_t;
+ typedef enum { CLOCK_REALTIME, CLOCK_MONOTONIC, CLOCK_PROCESS_CPUTIME_ID } clk_id;
+ typedef struct timespec { long sec; long nsec; } ctx_timespec;
+ int clock_gettime(clk_id_t timerid, struct timespec *t);
+ ]]
+ local target=ffi.new("ctx_timespec[?]",1)
+ local clock=C.CLOCK_PROCESS_CPUTIME_ID
+ ticks=function ()
+ C.clock_gettime(clock,target)
+ return tonumber(target[0].sec*1000000000+target[0].nsec)
+ end
+ seconds=function(ticks)
+ return ticks/1000000000
+ end
+ initialize=false
+ end
+end
+setmetatableindex(names,function(t,name)
+ local v=setmetatableindex(function(t,source)
+ local v=setmetatableindex(function(t,line)
+ local v={ total=0,count=0 }
+ t[line]=v
+ return v
+ end)
+ t[source]=v
+ return v
+ end)
+ t[name]=v
+ return v
+end)
+local function hook(where)
+ local f=getinfo(2,"nSl")
+ if f then
+ local source=f.short_src
+ if not source then
+ return
+ end
+ local line=f.linedefined or 0
+ local name=f.name
+ if not name then
+ local what=f.what
+ if what=="C" then
+ name="<anonymous>"
+ else
+ name=f.namewhat or what or "<unknown>"
end
- if not names[n] then
- names[n]=format("%42s : % 5i : %s",n,f.linedefined or 0,f.short_src or "unknown source")
+ end
+ local data=names[name][source][line]
+ if where=="call" then
+ data.count=data.count+1
+ insert(data,ticks())
+ elseif where=="return" then
+ local t=remove(data)
+ if t then
+ data.total=data.total+ticks()-t
end
end
- counters[n]=(counters[n] or 0)+1
end
end
-function debugger.showstats(printer,threshold)
- printer=printer or report
- threshold=threshold or 0
- local total,grandtotal,functions=0,0,0
+function debugger.showstats(printer,threshold)
+ local printer=printer or report
+ local calls=0
+ local functions=0
local dataset={}
- for name,count in next,counters do
- dataset[#dataset+1]={ name,count }
+ local length=0
+ local wholetime=0
+ local threshold=threshold or 0
+ for name,sources in next,names do
+ for source,lines in next,sources do
+ for line,data in next,lines do
+ local count=data.count
+ if count>threshold then
+ if #name>length then
+ length=#name
+ end
+ local total=data.total
+ local real=total
+ if real>0 then
+ real=total-(count*overhead/dummycalls)
+ if real<0 then
+ real=0
+ end
+ wholetime=wholetime+real
+ end
+ if line<0 then
+ line=0
+ end
+ dataset[#dataset+1]={ real,total,count,name,source,line }
+ end
+ end
+ end
end
- table.sort(dataset,function(a,b) return a[2]==b[2] and b[1]>a[1] or a[2]>b[2] end)
+ sort(dataset,function(a,b)
+ if a[1]==b[1] then
+ if a[2]==b[2] then
+ if a[3]==b[3] then
+ if a[4]==b[4] then
+ if a[5]==b[5] then
+ return a[6]<b[6]
+ else
+ return a[5]<b[5]
+ end
+ else
+ return a[4]<b[4]
+ end
+ else
+ return b[3]<a[3]
+ end
+ else
+ return b[2]<a[2]
+ end
+ else
+ return b[1]<a[1]
+ end
+ end)
+ if length>50 then
+ length=50
+ end
+ local fmt=string.formatters["%4.9k %4.9k %3.3k %8i %-"..length.."s %4i %s"]
for i=1,#dataset do
- local d=dataset[i]
- local name=d[1]
- local count=d[2]
- if count>threshold and not find(name,"for generator") then
- printer(format("%8i %s\n",count,names[name]))
- total=total+count
- end
- grandtotal=grandtotal+count
+ local data=dataset[i]
+ local real=data[1]
+ local total=data[2]
+ local count=data[3]
+ local name=data[4]
+ local source=data[5]
+ local line=data[6]
+ local percent=real/wholetime
+ calls=calls+count
functions=functions+1
+ name=gsub(name,"%s+"," ")
+ if #name>length then
+ name=sub(name,1,length)
+ end
+ printer(fmt(seconds(total),seconds(real),percent,count,name,line,source))
end
- printer("\n")
- printer(format("functions : % 10i\n",functions))
- printer(format("total : % 10i\n",total))
- printer(format("grand total: % 10i\n",grandtotal))
- printer(format("threshold : % 10i\n",threshold))
+ printer("")
+ printer(format("functions : %i",functions))
+ printer(format("calls : %i",calls))
+ printer(format("overhead : %f",seconds(overhead/1000)))
end
function debugger.savestats(filename,threshold)
local f=io.open(filename,'w')
if f then
- debugger.showstats(function(str) f:write(str) end,threshold)
+ debugger.showstats(function(str) f:write(str,"\n") end,threshold)
f:close()
end
end
function debugger.enable()
- debug.sethook(hook,"c")
+ if nesting==0 then
+ running=true
+ if initialize then
+ initialize()
+ end
+ sethook(hook,"cr")
+ local function dummy() end
+ local t=ticks()
+ for i=1,dummycalls do
+ dummy()
+ end
+ overhead=ticks()-t
+ end
+ if nesting>0 then
+ nesting=nesting+1
+ end
end
function debugger.disable()
- debug.sethook()
+ if nesting>0 then
+ nesting=nesting-1
+ end
+ if nesting==0 then
+ sethook()
+ end
end
local function showtraceback(rep)
local level=2
@@ -9334,9 +10252,661 @@ end -- of closure
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
+
+if not modules then modules={} end modules ['util-tpl']={
+ 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"
+}
+utilities.templates=utilities.templates or {}
+local templates=utilities.templates
+local trace_template=false trackers.register("templates.trace",function(v) trace_template=v end)
+local report_template=logs.reporter("template")
+local tostring=tostring
+local format,sub,byte=string.format,string.sub,string.byte
+local P,C,R,Cs,Cc,Carg,lpegmatch,lpegpatterns=lpeg.P,lpeg.C,lpeg.R,lpeg.Cs,lpeg.Cc,lpeg.Carg,lpeg.match,lpeg.patterns
+local replacer
+local function replacekey(k,t,how,recursive)
+ local v=t[k]
+ if not v then
+ if trace_template then
+ report_template("unknown key %a",k)
+ end
+ return ""
+ else
+ v=tostring(v)
+ if trace_template then
+ report_template("setting key %a to value %a",k,v)
+ end
+ if recursive then
+ return lpegmatch(replacer,v,1,t,how,recursive)
+ else
+ return v
+ end
+ end
+end
+local sqlescape=lpeg.replacer {
+ { "'","''" },
+ { "\\","\\\\" },
+ { "\r\n","\\n" },
+ { "\r","\\n" },
+}
+local sqlquoted=Cs(Cc("'")*sqlescape*Cc("'"))
+lpegpatterns.sqlescape=sqlescape
+lpegpatterns.sqlquoted=sqlquoted
+local luaescape=lpegpatterns.luaescape
+local escapers={
+ lua=function(s)
+ return lpegmatch(luaescape,s)
+ end,
+ sql=function(s)
+ return lpegmatch(sqlescape,s)
+ end,
+}
+local quotedescapers={
+ lua=function(s)
+ return format("%q",s)
+ end,
+ sql=function(s)
+ return lpegmatch(sqlquoted,s)
+ end,
+}
+local luaescaper=escapers.lua
+local quotedluaescaper=quotedescapers.lua
+local function replacekeyunquoted(s,t,how,recurse)
+ if how==false then
+ return replacekey(s,t,how,recurse)
+ else
+ local escaper=how and escapers[how] or luaescaper
+ return escaper(replacekey(s,t,how,recurse))
+ end
+end
+local function replacekeyquoted(s,t,how,recurse)
+ if how==false then
+ return replacekey(s,t,how,recurse)
+ else
+ local escaper=how and quotedescapers[how] or quotedluaescaper
+ return escaper(replacekey(s,t,how,recurse))
+ end
+end
+local function replaceoptional(l,m,r,t,how,recurse)
+ local v=t[l]
+ return v and v~="" and lpegmatch(replacer,r,1,t,how or "lua",recurse or false) or ""
+end
+local single=P("%")
+local double=P("%%")
+local lquoted=P("%[")
+local rquoted=P("]%")
+local lquotedq=P("%(")
+local rquotedq=P(")%")
+local escape=double/'%%'
+local nosingle=single/''
+local nodouble=double/''
+local nolquoted=lquoted/''
+local norquoted=rquoted/''
+local nolquotedq=lquotedq/''
+local norquotedq=rquotedq/''
+local noloptional=P("%?")/''
+local noroptional=P("?%")/''
+local nomoptional=P(":")/''
+local args=Carg(1)*Carg(2)*Carg(3)
+local key=nosingle*((C((1-nosingle )^1)*args)/replacekey )*nosingle
+local quoted=nolquotedq*((C((1-norquotedq )^1)*args)/replacekeyquoted )*norquotedq
+local unquoted=nolquoted*((C((1-norquoted )^1)*args)/replacekeyunquoted)*norquoted
+local optional=noloptional*((C((1-nomoptional)^1)*nomoptional*C((1-noroptional)^1)*args)/replaceoptional)*noroptional
+local any=P(1)
+ replacer=Cs((unquoted+quoted+escape+optional+key+any)^0)
+local function replace(str,mapping,how,recurse)
+ if mapping and str then
+ return lpegmatch(replacer,str,1,mapping,how or "lua",recurse or false) or str
+ else
+ return str
+ end
+end
+templates.replace=replace
+function templates.replacer(str,how,recurse)
+ return function(mapping)
+ return lpegmatch(replacer,str,1,mapping,how or "lua",recurse or false) or str
+ end
+end
+function templates.load(filename,mapping,how,recurse)
+ local data=io.loaddata(filename) or ""
+ if mapping and next(mapping) then
+ return replace(data,mapping,how,recurse)
+ else
+ return data
+ end
+end
+function templates.resolve(t,mapping,how,recurse)
+ if not mapping then
+ mapping=t
+ end
+ for k,v in next,t do
+ t[k]=replace(v,mapping,how,recurse)
+ end
+ return t
+end
+
+
+end -- of closure
+
+do -- create closure to overcome 200 locals limit
+
+package.loaded["util-sbx"] = package.loaded["util-sbx"] or true
+
+-- original size: 20309, stripped down to: 13848
+
+if not modules then modules={} end modules ['util-sbx']={
+ 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"
+}
+if not sandbox then require("l-sandbox") end
+local next,type=next,type
+local replace=utilities.templates.replace
+local collapsepath=file.collapsepath
+local expandname=dir.expandname
+local sortedhash=table.sortedhash
+local lpegmatch=lpeg.match
+local platform=os.type
+local P,S,C=lpeg.P,lpeg.S,lpeg.C
+local gsub=string.gsub
+local lower=string.lower
+local find=string.find
+local concat=string.concat
+local unquoted=string.unquoted
+local optionalquoted=string.optionalquoted
+local basename=file.basename
+local sandbox=sandbox
+local validroots={}
+local validrunners={}
+local validbinaries=true
+local validlibraries=true
+local validators={}
+local finalized=nil
+local trace=false
+local p_validroot=nil
+local p_split=lpeg.firstofsplit(" ")
+local report=logs.reporter("sandbox")
+trackers.register("sandbox",function(v) trace=v end)
+sandbox.setreporter(report)
+sandbox.finalizer {
+ category="files",
+ action=function()
+ finalized=true
+ end
+}
+local function registerroot(root,what)
+ if finalized then
+ report("roots are already finalized")
+ else
+ if type(root)=="table" then
+ root,what=root[1],root[2]
+ end
+ if type(root)=="string" and root~="" then
+ root=collapsepath(expandname(root))
+ if what=="r" or what=="ro" or what=="readable" then
+ what="read"
+ elseif what=="w" or what=="wo" or what=="writable" then
+ what="write"
+ end
+ validroots[root]=what=="write" or false
+ end
+ end
+end
+sandbox.finalizer {
+ category="files",
+ action=function()
+ if p_validroot then
+ report("roots are already initialized")
+ else
+ sandbox.registerroot(".","write")
+ for name in sortedhash(validroots) do
+ if p_validroot then
+ p_validroot=P(name)+p_validroot
+ else
+ p_validroot=P(name)
+ end
+ end
+ p_validroot=p_validroot/validroots
+ end
+ end
+}
+local function registerbinary(name)
+ if finalized then
+ report("binaries are already finalized")
+ elseif type(name)=="string" and name~="" then
+ if not validbinaries then
+ return
+ end
+ if validbinaries==true then
+ validbinaries={ [name]=true }
+ else
+ validbinaries[name]=true
+ end
+ elseif name==true then
+ validbinaries={}
+ end
+end
+local function registerlibrary(name)
+ if finalized then
+ report("libraries are already finalized")
+ elseif type(name)=="string" and name~="" then
+ if not validlibraries then
+ return
+ end
+ if validlibraries==true then
+ validlibraries={ [name]=true }
+ else
+ validlibraries[name]=true
+ end
+ elseif name==true then
+ validlibraries={}
+ end
+end
+local p_write=S("wa") p_write=(1-p_write)^0*p_write
+local p_path=S("\\/~$%:") p_path=(1-p_path )^0*p_path
+local function normalized(name)
+ if platform=="windows" then
+ name=gsub(name,"/","\\")
+ end
+ return name
+end
+function sandbox.possiblepath(name)
+ return lpegmatch(p_path,name) and true or false
+end
+local filenamelogger=false
+function sandbox.setfilenamelogger(l)
+ filenamelogger=type(l)=="function" and l or false
+end
+local function validfilename(name,what)
+ if p_validroot and type(name)=="string" and lpegmatch(p_path,name) then
+ local asked=collapsepath(expandname(name))
+ local okay=lpegmatch(p_validroot,asked)
+ if okay==true then
+ if filenamelogger then
+ filenamelogger(name,"w",asked,true)
+ end
+ return name
+ elseif okay==false then
+ if not what then
+ if filenamelogger then
+ filenamelogger(name,"r",asked,true)
+ end
+ return name
+ elseif lpegmatch(p_write,what) then
+ if filenamelogger then
+ filenamelogger(name,"w",asked,false)
+ end
+ return
+ else
+ if filenamelogger then
+ filenamelogger(name,"r",asked,true)
+ end
+ return name
+ end
+ elseif filenamelogger then
+ filenamelogger(name,"*",name,false)
+ end
+ else
+ return name
+ end
+end
+local function readable(name,finalized)
+ return validfilename(name,"r")
+end
+local function normalizedreadable(name,finalized)
+ local valid=validfilename(name,"r")
+ if valid then
+ return normalized(valid)
+ end
+end
+local function writeable(name,finalized)
+ return validfilename(name,"w")
+end
+local function normalizedwriteable(name,finalized)
+ local valid=validfilename(name,"w")
+ if valid then
+ return normalized(valid)
+ end
+end
+validators.readable=readable
+validators.writeable=normalizedwriteable
+validators.normalizedreadable=normalizedreadable
+validators.normalizedwriteable=writeable
+validators.filename=readable
+table.setmetatableindex(validators,function(t,k)
+ if k then
+ t[k]=readable
+ end
+ return readable
+end)
+function validators.string(s,finalized)
+ if finalized and suspicious(s) then
+ return ""
+ else
+ return s
+ end
+end
+function validators.cache(s)
+ if finalized then
+ return basename(s)
+ else
+ return s
+ end
+end
+function validators.url(s)
+ if finalized and find("^file:") then
+ return ""
+ else
+ return s
+ end
+end
+local function filehandlerone(action,one,...)
+ local checkedone=validfilename(one)
+ if checkedone then
+ return action(one,...)
+ else
+ end
+end
+local function filehandlertwo(action,one,two,...)
+ local checkedone=validfilename(one)
+ if checkedone then
+ local checkedtwo=validfilename(two)
+ if checkedtwo then
+ return action(one,two,...)
+ else
+ end
+ else
+ end
+end
+local function iohandler(action,one,...)
+ if type(one)=="string" then
+ local checkedone=validfilename(one)
+ if checkedone then
+ return action(one,...)
+ end
+ elseif one then
+ return action(one,...)
+ else
+ return action()
+ end
+end
+local osexecute=sandbox.original(os.execute)
+local iopopen=sandbox.original(io.popen)
+local reported={}
+local function validcommand(name,program,template,checkers,defaults,variables,reporter,strict)
+ if validbinaries~=false and (validbinaries==true or validbinaries[program]) then
+ if variables then
+ for variable,value in next,variables do
+ local checker=validators[checkers[variable]]
+ if checker then
+ value=checker(unquoted(value),strict)
+ if value then
+ variables[variable]=optionalquoted(value)
+ else
+ report("variable %a with value %a fails the check",variable,value)
+ return
+ end
+ else
+ report("variable %a has no checker",variable)
+ return
+ end
+ end
+ for variable,default in next,defaults do
+ local value=variables[variable]
+ if not value or value=="" then
+ local checker=validators[checkers[variable]]
+ if checker then
+ default=checker(unquoted(default),strict)
+ if default then
+ variables[variable]=optionalquoted(default)
+ else
+ report("variable %a with default %a fails the check",variable,default)
+ return
+ end
+ end
+ end
+ end
+ end
+ local command=program.." "..replace(template,variables)
+ if reporter then
+ reporter("executing runner %a: %s",name,command)
+ elseif trace then
+ report("executing runner %a: %s",name,command)
+ end
+ return command
+ elseif not reported[name] then
+ report("executing program %a of runner %a is not permitted",program,name)
+ reported[name]=true
+ end
+end
+local runners={
+ resultof=function(...)
+ local command=validcommand(...)
+ if command then
+ if trace then
+ report("resultof: %s",command)
+ end
+ local handle=iopopen(command,"r")
+ if handle then
+ local result=handle:read("*all") or ""
+ handle:close()
+ return result
+ end
+ end
+ end,
+ execute=function(...)
+ local command=validcommand(...)
+ if command then
+ if trace then
+ report("execute: %s",command)
+ end
+ return osexecute(command)
+ end
+ end,
+ pipeto=function(...)
+ local command=validcommand(...)
+ if command then
+ if trace then
+ report("pipeto: %s",command)
+ end
+ return iopopen(command,"w")
+ end
+ end,
+}
+function sandbox.registerrunner(specification)
+ if type(specification)=="string" then
+ local wrapped=validrunners[specification]
+ inspect(table.sortedkeys(validrunners))
+ if wrapped then
+ return wrapped
+ else
+ report("unknown predefined runner %a",specification)
+ return
+ end
+ end
+ if type(specification)~="table" then
+ report("specification should be a table (or string)")
+ return
+ end
+ local name=specification.name
+ if type(name)~="string" then
+ report("invalid name, string expected",name)
+ return
+ end
+ if validrunners[name] then
+ report("invalid name, runner %a already defined")
+ return
+ end
+ local program=specification.program
+ if type(program)=="string" then
+ elseif type(program)=="table" then
+ program=program[platform] or program.default or program.unix
+ end
+ if type(program)~="string" or program=="" then
+ report("invalid runner %a specified for platform %a",name,platform)
+ return
+ end
+ local template=specification.template
+ if not template then
+ report("missing template for runner %a",name)
+ return
+ end
+ local method=specification.method or "execute"
+ local checkers=specification.checkers or {}
+ local defaults=specification.defaults or {}
+ local runner=runners[method]
+ if runner then
+ local finalized=finalized
+ local wrapped=function(variables)
+ return runner(name,program,template,checkers,defaults,variables,specification.reporter,finalized)
+ end
+ validrunners[name]=wrapped
+ return wrapped
+ else
+ validrunners[name]=nil
+ report("invalid method for runner %a",name)
+ end
+end
+function sandbox.getrunner(name)
+ return name and validrunners[name]
+end
+local function suspicious(str)
+ return (find(str,"[/\\]") or find(command,"%.%.")) and true or false
+end
+local function binaryrunner(action,command,...)
+ if validbinaries==false then
+ report("no binaries permitted, ignoring command: %s",command)
+ return
+ end
+ if type(command)~="string" then
+ report("command should be a string")
+ return
+ end
+ local program=lpegmatch(p_split,command)
+ if not program or program=="" then
+ report("unable to filter binary from command: %s",command)
+ return
+ end
+ if validbinaries==true then
+ elseif not validbinaries[program] then
+ report("binary not permitted, ignoring command: %s",command)
+ return
+ elseif suspicious(command) then
+ report("/ \\ or .. found, ignoring command (use sandbox.registerrunner): %s",command)
+ return
+ end
+ return action(command,...)
+end
+local function dummyrunner(action,command,...)
+ if type(command)=="table" then
+ command=concat(command," ",command[0] and 0 or 1)
+ end
+ report("ignoring command: %s",command)
+end
+sandbox.filehandlerone=filehandlerone
+sandbox.filehandlertwo=filehandlertwo
+sandbox.iohandler=iohandler
+function sandbox.disablerunners()
+ validbinaries=false
+end
+function sandbox.disablelibraries()
+ validlibraries=false
+end
+if FFISUPPORTED and ffi then
+ function sandbox.disablelibraries()
+ validlibraries=false
+ for k,v in next,ffi do
+ if k~="gc" then
+ ffi[k]=nil
+ end
+ end
+ end
+ local load=ffi.load
+ if load then
+ local reported={}
+ function ffi.load(name,...)
+ if validlibraries==false then
+ elseif validlibraries==true then
+ return load(name,...)
+ elseif validlibraries[name] then
+ return load(name,...)
+ else
+ end
+ if not reported[name] then
+ report("using library %a is not permitted",name)
+ reported[name]=true
+ end
+ return nil
+ end
+ end
+end
+local overload=sandbox.overload
+local register=sandbox.register
+ overload(loadfile,filehandlerone,"loadfile")
+if io then
+ overload(io.open,filehandlerone,"io.open")
+ overload(io.popen,binaryrunner,"io.popen")
+ overload(io.input,iohandler,"io.input")
+ overload(io.output,iohandler,"io.output")
+ overload(io.lines,filehandlerone,"io.lines")
+end
+if os then
+ overload(os.execute,binaryrunner,"os.execute")
+ overload(os.spawn,dummyrunner,"os.spawn")
+ overload(os.exec,dummyrunner,"os.exec")
+ overload(os.resultof,binaryrunner,"os.resultof")
+ overload(os.pipeto,binaryrunner,"os.pipeto")
+ overload(os.rename,filehandlertwo,"os.rename")
+ overload(os.remove,filehandlerone,"os.remove")
+end
+if lfs then
+ overload(lfs.chdir,filehandlerone,"lfs.chdir")
+ overload(lfs.mkdir,filehandlerone,"lfs.mkdir")
+ overload(lfs.rmdir,filehandlerone,"lfs.rmdir")
+ overload(lfs.isfile,filehandlerone,"lfs.isfile")
+ overload(lfs.isdir,filehandlerone,"lfs.isdir")
+ overload(lfs.attributes,filehandlerone,"lfs.attributes")
+ overload(lfs.dir,filehandlerone,"lfs.dir")
+ overload(lfs.lock_dir,filehandlerone,"lfs.lock_dir")
+ overload(lfs.touch,filehandlerone,"lfs.touch")
+ overload(lfs.link,filehandlertwo,"lfs.link")
+ overload(lfs.setmode,filehandlerone,"lfs.setmode")
+ overload(lfs.readlink,filehandlerone,"lfs.readlink")
+ overload(lfs.shortname,filehandlerone,"lfs.shortname")
+ overload(lfs.symlinkattributes,filehandlerone,"lfs.symlinkattributes")
+end
+if zip then
+ zip.open=register(zip.open,filehandlerone,"zip.open")
+end
+if fontloader then
+ fontloader.open=register(fontloader.open,filehandlerone,"fontloader.open")
+ fontloader.info=register(fontloader.info,filehandlerone,"fontloader.info")
+end
+if epdf then
+ epdf.open=register(epdf.open,filehandlerone,"epdf.open")
+end
+sandbox.registerroot=registerroot
+sandbox.registerbinary=registerbinary
+sandbox.registerlibrary=registerlibrary
+sandbox.validfilename=validfilename
+
+
+end -- of closure
+
+do -- create closure to overcome 200 locals limit
+
package.loaded["util-mrg"] = package.loaded["util-mrg"] or true
--- original size: 7985, stripped down to: 6153
+-- original size: 7757, stripped down to: 6015
if not modules then modules={} end modules ['util-mrg']={
version=1.001,
@@ -9511,154 +11081,9 @@ end -- of closure
do -- create closure to overcome 200 locals limit
-package.loaded["util-tpl"] = package.loaded["util-tpl"] or true
-
--- original size: 7313, stripped down to: 4076
-
-if not modules then modules={} end modules ['util-tpl']={
- 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"
-}
-utilities.templates=utilities.templates or {}
-local templates=utilities.templates
-local trace_template=false trackers.register("templates.trace",function(v) trace_template=v end)
-local report_template=logs.reporter("template")
-local tostring=tostring
-local format,sub,byte=string.format,string.sub,string.byte
-local P,C,R,Cs,Cc,Carg,lpegmatch,lpegpatterns=lpeg.P,lpeg.C,lpeg.R,lpeg.Cs,lpeg.Cc,lpeg.Carg,lpeg.match,lpeg.patterns
-local replacer
-local function replacekey(k,t,how,recursive)
- local v=t[k]
- if not v then
- if trace_template then
- report_template("unknown key %a",k)
- end
- return ""
- else
- v=tostring(v)
- if trace_template then
- report_template("setting key %a to value %a",k,v)
- end
- if recursive then
- return lpegmatch(replacer,v,1,t,how,recursive)
- else
- return v
- end
- end
-end
-local sqlescape=lpeg.replacer {
- { "'","''" },
- { "\\","\\\\" },
- { "\r\n","\\n" },
- { "\r","\\n" },
-}
-local sqlquoted=Cs(Cc("'")*sqlescape*Cc("'"))
-lpegpatterns.sqlescape=sqlescape
-lpegpatterns.sqlquoted=sqlquoted
-local luaescape=lpegpatterns.luaescape
-local escapers={
- lua=function(s)
- return lpegmatch(luaescape,s)
- end,
- sql=function(s)
- return lpegmatch(sqlescape,s)
- end,
-}
-local quotedescapers={
- lua=function(s)
- return format("%q",s)
- end,
- sql=function(s)
- return lpegmatch(sqlquoted,s)
- end,
-}
-local luaescaper=escapers.lua
-local quotedluaescaper=quotedescapers.lua
-local function replacekeyunquoted(s,t,how,recurse)
- if how==false then
- return replacekey(s,t,how,recurse)
- else
- local escaper=how and escapers[how] or luaescaper
- return escaper(replacekey(s,t,how,recurse))
- end
-end
-local function replacekeyquoted(s,t,how,recurse)
- if how==false then
- return replacekey(s,t,how,recurse)
- else
- local escaper=how and quotedescapers[how] or quotedluaescaper
- return escaper(replacekey(s,t,how,recurse))
- end
-end
-local function replaceoptional(l,m,r,t,how,recurse)
- local v=t[l]
- return v and v~="" and lpegmatch(replacer,r,1,t,how or "lua",recurse or false) or ""
-end
-local single=P("%")
-local double=P("%%")
-local lquoted=P("%[")
-local rquoted=P("]%")
-local lquotedq=P("%(")
-local rquotedq=P(")%")
-local escape=double/'%%'
-local nosingle=single/''
-local nodouble=double/''
-local nolquoted=lquoted/''
-local norquoted=rquoted/''
-local nolquotedq=lquotedq/''
-local norquotedq=rquotedq/''
-local noloptional=P("%?")/''
-local noroptional=P("?%")/''
-local nomoptional=P(":")/''
-local args=Carg(1)*Carg(2)*Carg(3)
-local key=nosingle*((C((1-nosingle )^1)*args)/replacekey )*nosingle
-local quoted=nolquotedq*((C((1-norquotedq )^1)*args)/replacekeyquoted )*norquotedq
-local unquoted=nolquoted*((C((1-norquoted )^1)*args)/replacekeyunquoted)*norquoted
-local optional=noloptional*((C((1-nomoptional)^1)*nomoptional*C((1-noroptional)^1)*args)/replaceoptional)*noroptional
-local any=P(1)
- replacer=Cs((unquoted+quoted+escape+optional+key+any)^0)
-local function replace(str,mapping,how,recurse)
- if mapping and str then
- return lpegmatch(replacer,str,1,mapping,how or "lua",recurse or false) or str
- else
- return str
- end
-end
-templates.replace=replace
-function templates.replacer(str,how,recurse)
- return function(mapping)
- return lpegmatch(replacer,str,1,mapping,how or "lua",recurse or false) or str
- end
-end
-function templates.load(filename,mapping,how,recurse)
- local data=io.loaddata(filename) or ""
- if mapping and next(mapping) then
- return replace(data,mapping,how,recurse)
- else
- return data
- end
-end
-function templates.resolve(t,mapping,how,recurse)
- if not mapping then
- mapping=t
- end
- for k,v in next,t do
- t[k]=replace(v,mapping,how,recurse)
- end
- return t
-end
-
-
-end -- of closure
-
-do -- create closure to overcome 200 locals limit
-
package.loaded["util-env"] = package.loaded["util-env"] or true
--- original size: 8284, stripped down to: 5176
+-- original size: 9246, stripped down to: 5038
if not modules then modules={} end modules ['util-env']={
version=1.001,
@@ -9845,7 +11270,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["luat-env"] = package.loaded["luat-env"] or true
--- original size: 6358, stripped down to: 4257
+-- original size: 6174, stripped down to: 4141
if not modules then modules={} end modules ['luat-env']={
version=1.001,
@@ -9998,7 +11423,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-tab"] = package.loaded["lxml-tab"] or true
--- original size: 56973, stripped down to: 35872
+-- original size: 57003, stripped down to: 35696
if not modules then modules={} end modules ['lxml-tab']={
version=1.001,
@@ -10013,7 +11438,7 @@ if lpeg.setmaxstack then lpeg.setmaxstack(1000) end
xml=xml or {}
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 type,next,setmetatable,getmetatable,tonumber,rawset,select=type,next,setmetatable,getmetatable,tonumber,rawset,select
local lower,find,match,gsub=string.lower,string.find,string.match,string.gsub
local sort=table.sort
local utfchar=utf.char
@@ -10140,6 +11565,7 @@ local function add_empty(spacing,namespace,tag)
tg=tag,
at=at,
dt={},
+ ni=nt,
__p__=top
}
dt[nt]=t
@@ -10161,6 +11587,7 @@ local function add_begin(spacing,namespace,tag)
tg=tag,
at=at,
dt={},
+ ni=nil,
__p__=stack[level]
}
setmetatable(top,mt)
@@ -10188,6 +11615,7 @@ local function add_end(spacing,namespace,tag)
dt=top.dt
nt=#dt+1
dt[nt]=toclose
+ toclose.ni=nt
if toclose.at.xmlns then
remove(xmlns)
end
@@ -10232,7 +11660,13 @@ local function add_special(what,spacing,text)
if strip and (what=="@cm@" or what=="@dt@") then
else
nt=nt+1
- dt[nt]={ special=true,ns="",tg=what,dt={ text } }
+ dt[nt]={
+ special=true,
+ ns="",
+ tg=what,
+ ni=nil,
+ dt={ text },
+ }
end
end
local function set_message(txt)
@@ -10285,7 +11719,6 @@ do
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={
@@ -10327,13 +11760,27 @@ do
[ [[}]] ]="&U+7D;",
[ [[~]] ]="&U+7E;",
}
+ local privates_x={
+ [ [["]] ]="&U+22;",
+ [ [[#]] ]="&U+23;",
+ [ [[$]] ]="&U+24;",
+ [ [[%]] ]="&U+25;",
+ [ [[']] ]="&U+27;",
+ [ [[\]] ]="&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")
+ local despecialized=utf.remapper(privates_x,"dynamic")
xml.unprivatized=unprivatized
xml.unspecialized=unspecialized
+ xml.despecialized=despecialized
xml.escaped=escaped
local function unescaped(s)
local p=privates_n[s]
@@ -10778,6 +12225,10 @@ local grammar_unparsed_text=P { "preamble",
local function _xmlconvert_(data,settings)
settings=settings or {}
preparexmlstate(settings)
+ local preprocessor=settings.preprocessor
+ if data and data~="" and type(preprocessor)=="function" then
+ data=preprocessor(data,settings) or data
+ end
if settings.parent_root then
mt=getmetatable(settings.parent_root)
else
@@ -10919,14 +12370,24 @@ function xml.toxml(data)
return data
end
end
-local function copy(old)
+local function copy(old,p)
if old then
local new={}
for k,v in next,old do
- if type(v)=="table" then
- new[k]=table.copy(v)
- else
+ local t=type(v)=="table"
+ if k=="at" then
+ local t={}
+ for k,v in next,v do
+ t[k]=v
+ end
+ new[k]=t
+ elseif k=="dt" then
+ v.__p__=nil
+ v=copy(v,new)
new[k]=v
+ v.__p__=p
+ else
+ new[k]=v
end
end
local mt=getmetatable(old)
@@ -11157,18 +12618,26 @@ local xmlfilehandler=newhandlers {
function xml.save(root,name)
serialize(root,xmlfilehandler,name)
end
-local result
+local result,r,threshold={},0,512
local xmlstringhandler=newhandlers {
name="string",
initialize=function()
- result={}
+ r=0
return result
end,
finalize=function()
- return concat(result)
+ local done=concat(result,"",1,r)
+ r=0
+ if r>threshold then
+ result={}
+ end
+ return done
end,
handle=function(...)
- result[#result+1]=concat {... }
+ for i=1,select("#",...) do
+ r=r+1
+ result[r]=select(i,...)
+ end
end,
}
local function xmltostring(root)
@@ -11320,7 +12789,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-lpt"] = package.loaded["lxml-lpt"] or true
--- original size: 53892, stripped down to: 32508
+-- original size: 53301, stripped down to: 32477
if not modules then modules={} end modules ['lxml-lpt']={
version=1.001,
@@ -11702,6 +13171,14 @@ local function apply_expression(list,expression,order)
end
return collected
end
+local function apply_selector(list,specification)
+ if xml.applyselector then
+ apply_selector=xml.applyselector
+ return apply_selector(list,specification)
+ else
+ return list
+ end
+end
local P,V,C,Cs,Cc,Ct,R,S,Cg,Cb=lpeg.P,lpeg.V,lpeg.C,lpeg.Cs,lpeg.Cc,lpeg.Ct,lpeg.R,lpeg.S,lpeg.Cg,lpeg.Cb
local spaces=S(" \n\r\t\f")^0
local lp_space=S(" \n\r\t\f")
@@ -11825,6 +13302,9 @@ end
local function register_nodes(nodetest,nodes)
return { kind="nodes",nodetest=nodetest,nodes=nodes }
end
+local function register_selector(specification)
+ return { kind="selector",specification=specification }
+end
local function register_expression(expression)
local converted=lpegmatch(converter,expression)
local runner=load(format(template_e,converted))
@@ -11865,34 +13345,36 @@ local pathparser=Ct { "patterns",
(V("special")*spaces*P(-1) )+(V("initial")*spaces*V("step")*spaces*(P("/")*spaces*V("step")*spaces)^0 )
),
protocol=Cg(V("letters"),"protocol")*P("://")+Cg(Cc(nil),"protocol"),
- step=((V("shortcuts")+P("/")+V("axis"))*spaces*V("nodes")^0+V("error"))*spaces*V("expressions")^0*spaces*V("finalizer")^0,
+ step=((V("shortcuts")+V("selector")+P("/")+V("axis"))*spaces*V("nodes")^0+V("error"))*spaces*V("expressions")^0*spaces*V("finalizer")^0,
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")+V("s_lastmatch"),
shortcuts=V("shortcuts_a")*(spaces*"/"*spaces*V("shortcuts_a"))^0,
s_descendant_or_self=(P("***/")+P("/"))*Cc(register_descendant_or_self),
s_descendant=P("**")*Cc(register_descendant),
- s_child=P("*")*no_nextcolon*Cc(register_child ),
- s_parent=P("..")*Cc(register_parent ),
- s_self=P("." )*Cc(register_self ),
- s_root=P("^^")*Cc(register_root ),
- s_ancestor=P("^")*Cc(register_ancestor ),
- descendant=P("descendant::")*Cc(register_descendant ),
- child=P("child::")*Cc(register_child ),
- parent=P("parent::")*Cc(register_parent ),
- self=P("self::")*Cc(register_self ),
- root=P('root::')*Cc(register_root ),
- ancestor=P('ancestor::')*Cc(register_ancestor ),
- descendant_or_self=P('descendant-or-self::')*Cc(register_descendant_or_self ),
- ancestor_or_self=P('ancestor-or-self::')*Cc(register_ancestor_or_self ),
- following=P('following::')*Cc(register_following ),
- following_sibling=P('following-sibling::')*Cc(register_following_sibling ),
- preceding=P('preceding::')*Cc(register_preceding ),
- preceding_sibling=P('preceding-sibling::')*Cc(register_preceding_sibling ),
- reverse_sibling=P('reverse-sibling::')*Cc(register_reverse_sibling ),
- last_match=P('last-match::')*Cc(register_last_match ),
+ s_child=P("*")*no_nextcolon*Cc(register_child),
+ s_parent=P("..")*Cc(register_parent),
+ s_self=P("." )*Cc(register_self),
+ s_root=P("^^")*Cc(register_root),
+ s_ancestor=P("^")*Cc(register_ancestor),
+ s_lastmatch=P("=")*Cc(register_last_match),
+ descendant=P("descendant::")*Cc(register_descendant),
+ child=P("child::")*Cc(register_child),
+ parent=P("parent::")*Cc(register_parent),
+ self=P("self::")*Cc(register_self),
+ root=P('root::')*Cc(register_root),
+ ancestor=P('ancestor::')*Cc(register_ancestor),
+ descendant_or_self=P('descendant-or-self::')*Cc(register_descendant_or_self),
+ ancestor_or_self=P('ancestor-or-self::')*Cc(register_ancestor_or_self),
+ following=P('following::')*Cc(register_following),
+ following_sibling=P('following-sibling::')*Cc(register_following_sibling),
+ preceding=P('preceding::')*Cc(register_preceding),
+ preceding_sibling=P('preceding-sibling::')*Cc(register_preceding_sibling),
+ reverse_sibling=P('reverse-sibling::')*Cc(register_reverse_sibling),
+ last_match=P('last-match::')*Cc(register_last_match),
+ selector=P("{")*C((1-P("}"))^1)*P("}")/register_selector,
nodes=(V("nodefunction")*spaces*P("(")*V("nodeset")*P(")")+V("nodetest")*V("nodeset"))/register_nodes,
expressions=expression/register_expression,
letters=R("az")^1,
@@ -12042,6 +13524,8 @@ do
collected=apply_nodes(collected,pi.nodetest,pi.nodes)
elseif kind=="expression" then
collected=apply_expression(collected,pi.evaluator,order)
+ elseif kind=="selector" then
+ collected=apply_selector(collected,pi.specification)
elseif kind=="finalizer" then
collected=pi.finalizer(collected)
p.matched=p.matched+1
@@ -12083,6 +13567,9 @@ do
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=="selector" then
+ collected=apply_selector(collected,pi.specification)
+ report_lpath("% 10i : se : %s ",(collected and #collected) or 0,pi.specification)
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 "")
@@ -12114,6 +13601,8 @@ do
collected=apply_nodes(collected,pi.nodetest,pi.nodes)
elseif kind=="expression" then
collected=apply_expression(collected,pi.evaluator,order)
+ elseif kind=="selector" then
+ collected=apply_selector(collected,pi.specification)
elseif kind=="finalizer" then
return pi.finalizer(collected)
end
@@ -12170,6 +13659,13 @@ do
function xml.lastmatch()
return lastmatch
end
+ local stack={}
+ function xml.pushmatch()
+ insert(stack,lastmatch)
+ end
+ function xml.popmatch()
+ lastmatch=remove(stack)
+ end
end
local applylpath=xml.applylpath
function xml.filter(root,pattern)
@@ -12449,7 +13945,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-mis"] = package.loaded["lxml-mis"] or true
--- original size: 3787, stripped down to: 2003
+-- original size: 3684, stripped down to: 1957
if not modules then modules={} end modules ['lxml-mis']={
version=1.001,
@@ -12518,7 +14014,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-aux"] = package.loaded["lxml-aux"] or true
--- original size: 30566, stripped down to: 21741
+-- original size: 29835, stripped down to: 21174
if not modules then modules={} end modules ['lxml-aux']={
version=1.001,
@@ -12534,7 +14030,6 @@ local xml=xml
local xmlcopy,xmlname=xml.copy,xml.name
local xmlinheritedconvert=xml.inheritedconvert
local xmlapplylpath=xml.applylpath
-local xmlfilter=xml.filter
local type,next,setmetatable,getmetatable=type,next,setmetatable,getmetatable
local insert,remove,fastcopy,concat=table.insert,table.remove,table.fastcopy,table.concat
local gmatch,gsub,format,find,strip=string.gmatch,string.gsub,string.format,string.find,string.strip
@@ -12738,7 +14233,17 @@ function xml.replace(root,pattern,whatever)
report('replacing',pattern,c,e)
end
local d=p.dt
- d[e.ni]=copiedelement(element,p)
+ local n=e.ni
+ local t=copiedelement(element,p)
+ if type(t)=="table" then
+ d[n]=t[1]
+ for i=2,#t do
+ n=n+1
+ insert(d,n,t[i])
+ end
+ else
+ d[n]=t
+ end
redo_ni(d)
end
end
@@ -13161,7 +14666,7 @@ local obsolete=xml.obsolete
xml.strip_whitespace=xml.strip obsolete.strip_whitespace=xml.strip
xml.collect_elements=xml.collect obsolete.collect_elements=xml.collect
xml.delete_element=xml.delete obsolete.delete_element=xml.delete
-xml.replace_element=xml.replace obsolete.replace_element=xml.replacet
+xml.replace_element=xml.replace obsolete.replace_element=xml.replace
xml.each_element=xml.each obsolete.each_element=xml.each
xml.process_elements=xml.process obsolete.process_elements=xml.process
xml.insert_element_after=xml.insertafter obsolete.insert_element_after=xml.insertafter
@@ -13379,7 +14884,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-xml"] = package.loaded["lxml-xml"] or true
--- original size: 10719, stripped down to: 7841
+-- original size: 10274, stripped down to: 7538
if not modules then modules={} end modules ['lxml-xml']={
version=1.001,
@@ -13757,7 +15262,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-xml"] = package.loaded["trac-xml"] or true
--- original size: 6534, stripped down to: 5072
+-- original size: 6407, stripped down to: 4965
if not modules then modules={} end modules ['trac-xml']={
version=1.001,
@@ -13907,6 +15412,7 @@ function reporters.export(t,methods,filename)
if filename then
local fullname=file.replacesuffix(filename,method)
t.report("saving export in %a",fullname)
+ dir.mkdirs(file.pathpart(fullname))
io.savedata(fullname,result)
else
reporters.lines(t,result)
@@ -13927,7 +15433,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-ini"] = package.loaded["data-ini"] or true
--- original size: 11444, stripped down to: 7830
+-- original size: 11099, stripped down to: 7516
if not modules then modules={} end modules ['data-ini']={
version=1.001,
@@ -14072,11 +15578,6 @@ if not texroot or texroot=="" then
ossetenv('TEXROOT',texroot)
end
environment.texroot=file.collapsepath(texroot)
-if type(profiler)=="table" and not jit then
- directives.register("system.profile",function()
- profiler.start("luatex-profile.log")
- end)
-end
local prefixes=utilities.storage.allocate()
resolvers.prefixes=prefixes
local resolved={}
@@ -14183,7 +15684,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-exp"] = package.loaded["data-exp"] or true
--- original size: 18619, stripped down to: 11042
+-- original size: 17958, stripped down to: 10705
if not modules then modules={} end modules ['data-exp']={
version=1.001,
@@ -14199,7 +15700,6 @@ 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
local isdir=lfs.isdir
-local ostype=os.type
local collapsepath,joinpath,basename=file.collapsepath,file.join,file.basename
local trace_locating=false trackers.register("resolvers.locating",function(v) trace_locating=v end)
local trace_expansions=false trackers.register("resolvers.expansions",function(v) trace_expansions=v end)
@@ -14568,7 +16068,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-env"] = package.loaded["data-env"] or true
--- original size: 9649, stripped down to: 7131
+-- original size: 9342, stripped down to: 6887
if not modules then modules={} end modules ['data-env']={
version=1.001,
@@ -14852,7 +16352,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-tmp"] = package.loaded["data-tmp"] or true
--- original size: 16066, stripped down to: 11938
+-- original size: 16088, stripped down to: 11435
if not modules then modules={} end modules ['data-tmp']={
version=1.100,
@@ -15056,18 +16556,6 @@ end
caches.getreadablepaths=getreadablepaths
caches.getwritablepath=getwritablepath
function caches.getfirstreadablefile(filename,...)
- local rd=getreadablepaths(...)
- for i=1,#rd do
- local path=rd[i]
- local fullname=file.join(path,filename)
- if is_readable(fullname) then
- usedreadables[i]=true
- return fullname,path
- end
- end
- return caches.setfirstwritablefile(filename,...)
-end
-function caches.getfirstreadablefile_TEST_ME_FIRST(filename,...)
local fullname,path=caches.setfirstwritablefile(filename,...)
if is_readable(fullname) then
return fullname,path
@@ -15096,18 +16584,22 @@ end
function caches.setluanames(path,name)
return format("%s/%s.%s",path,name,luasuffixes.tma),format("%s/%s.%s",path,name,luasuffixes.tmc)
end
-function caches.loaddata(readables,name)
+function caches.loaddata(readables,name,writable)
if type(readables)=="string" then
readables={ readables }
end
for i=1,#readables do
local path=readables[i]
- local tmaname,tmcname=caches.setluanames(path,name)
local loader=false
+ local tmaname,tmcname=caches.setluanames(path,name)
if isfile(tmcname) then
loader=loadfile(tmcname)
end
if not loader and isfile(tmaname) then
+ local tmacrap,tmcname=caches.setluanames(writable,name)
+ if isfile(tmcname) then
+ loader=loadfile(tmcname)
+ end
utilities.lua.compile(tmaname,tmcname)
if isfile(tmcname) then
loader=loadfile(tmcname)
@@ -15228,7 +16720,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-met"] = package.loaded["data-met"] or true
--- original size: 5488, stripped down to: 4101
+-- original size: 5310, stripped down to: 3980
if not modules then modules={} end modules ['data-met']={
version=1.100,
@@ -15240,7 +16732,6 @@ if not modules then modules={} end modules ['data-met']={
local find,format=string.find,string.format
local sequenced=table.sequenced
local addurlscheme,urlhashed=url.addscheme,url.hashed
-local getcurrentdir=lfs.currentdir
local trace_locating=false
local trace_methods=false
trackers.register("resolvers.locating",function(v) trace_methods=v end)
@@ -15347,7 +16838,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-res"] = package.loaded["data-res"] or true
--- original size: 67241, stripped down to: 46427
+-- original size: 67524, stripped down to: 46632
if not modules then modules={} end modules ['data-res']={
version=1.001,
@@ -15401,6 +16892,7 @@ resolvers.configbanner=""
resolvers.homedir=environment.homedir
resolvers.criticalvars=allocate { "SELFAUTOLOC","SELFAUTODIR","SELFAUTOPARENT","TEXMFCNF","TEXMF","TEXOS" }
resolvers.luacnfname="texmfcnf.lua"
+resolvers.luacnffallback="contextcnf.lua"
resolvers.luacnfstate="unknown"
if environment.default_texmfcnf then
resolvers.luacnfspec="home:texmf/web2c;"..environment.default_texmfcnf
@@ -15444,7 +16936,6 @@ local function resolvevariable(k)
end
local dollarstripper=lpeg.stripper("$")
local inhibitstripper=P("!")^0*Cs(P(1)^0)
-local backslashswapper=lpeg.replacer("\\","/")
local somevariable=P("$")/""
local somekey=C(R("az","AZ","09","__","--")^1)
local somethingelse=P(";")*((1-S("!{}/\\"))^1*P(";")/"")+P(";")*(P(";")/"")+P(1)
@@ -15590,23 +17081,29 @@ local function identify_configuration_files()
end
reportcriticalvariables(cnfspec)
local cnfpaths=expandedpathfromlist(resolvers.splitpath(cnfspec))
- local luacnfname=resolvers.luacnfname
- for i=1,#cnfpaths do
- local filepath=cnfpaths[i]
- local filename=collapsepath(filejoin(filepath,luacnfname))
- local realname=resolveprefix(filename)
- if trace_locating then
- local fullpath=gsub(resolveprefix(collapsepath(filepath)),"//","/")
- local weirdpath=find(fullpath,"/texmf.+/texmf") or not find(fullpath,"/web2c",1,true)
- report_resolving("looking for %a on %s path %a from specification %a",luacnfname,weirdpath and "weird" or "given",fullpath,filepath)
- end
- if isfile(realname) then
- specification[#specification+1]=filename
+ local function locatecnf(luacnfname,kind)
+ for i=1,#cnfpaths do
+ local filepath=cnfpaths[i]
+ local filename=collapsepath(filejoin(filepath,luacnfname))
+ local realname=resolveprefix(filename)
if trace_locating then
- report_resolving("found configuration file %a",realname)
+ local fullpath=gsub(resolveprefix(collapsepath(filepath)),"//","/")
+ local weirdpath=find(fullpath,"/texmf.+/texmf") or not find(fullpath,"/web2c",1,true)
+ report_resolving("looking for %s %a on %s path %a from specification %a",
+ kind,luacnfname,weirdpath and "weird" or "given",fullpath,filepath)
+ end
+ if isfile(realname) then
+ specification[#specification+1]=filename
+ if trace_locating then
+ report_resolving("found %s configuration file %a",kind,realname)
+ end
end
end
end
+ locatecnf(resolvers.luacnfname,"regular")
+ if #specification==0 then
+ locatecnf(resolvers.luacnffallback,"fallback")
+ end
if trace_locating then
report_resolving()
end
@@ -16903,7 +18400,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-pre"] = package.loaded["data-pre"] or true
--- original size: 4236, stripped down to: 3144
+-- original size: 4090, stripped down to: 3059
if not modules then modules={} end modules ['data-pre']={
version=1.001,
@@ -17025,7 +18522,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-inp"] = package.loaded["data-inp"] or true
--- original size: 935, stripped down to: 838
+-- original size: 910, stripped down to: 823
if not modules then modules={} end modules ['data-inp']={
version=1.001,
@@ -17055,7 +18552,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-out"] = package.loaded["data-out"] or true
--- original size: 548, stripped down to: 483
+-- original size: 530, stripped down to: 475
if not modules then modules={} end modules ['data-out']={
version=1.001,
@@ -17078,7 +18575,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-fil"] = package.loaded["data-fil"] or true
--- original size: 3976, stripped down to: 3391
+-- original size: 3863, stripped down to: 3310
if not modules then modules={} end modules ['data-fil']={
version=1.001,
@@ -17186,7 +18683,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-con"] = package.loaded["data-con"] or true
--- original size: 5148, stripped down to: 3680
+-- original size: 5029, stripped down to: 3607
if not modules then modules={} end modules ['data-con']={
version=1.100,
@@ -17256,7 +18753,7 @@ function containers.read(container,name)
local storage=container.storage
local stored=storage[name]
if not stored and container.enabled and caches and containers.usecache then
- stored=caches.loaddata(container.readables,name)
+ stored=caches.loaddata(container.readables,name,container.writable)
if stored and stored.cache_version==container.version then
if trace_cache or trace_containers then
report_containers("action %a, category %a, name %a","load",container.subcategory,name)
@@ -17305,7 +18802,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-use"] = package.loaded["data-use"] or true
--- original size: 4000, stripped down to: 3052
+-- original size: 4045, stripped down to: 3110
if not modules then modules={} end modules ['data-use']={
version=1.001,
@@ -17350,7 +18847,7 @@ function resolvers.automount(usecache)
end
statistics.register("used config file",function() return caches.configfiles() end)
statistics.register("used cache path",function() return caches.usedpaths() end)
-function statistics.savefmtstatus(texname,formatbanner,sourcefile)
+function statistics.savefmtstatus(texname,formatbanner,sourcefile,kind,banner)
local enginebanner=status.banner
if formatbanner and enginebanner and sourcefile then
local luvname=file.replacesuffix(texname,"luv")
@@ -17361,6 +18858,10 @@ function statistics.savefmtstatus(texname,formatbanner,sourcefile)
sourcefile=sourcefile,
}
io.savedata(luvname,table.serialize(luvdata,true))
+ lua.registerfinalizer(function()
+ logs.report("format banner","%s",banner)
+ logs.newline()
+ end)
end
end
function statistics.checkfmtstatus(texname)
@@ -17396,7 +18897,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-zip"] = package.loaded["data-zip"] or true
--- original size: 9036, stripped down to: 7041
+-- original size: 8772, stripped down to: 6841
if not modules then modules={} end modules ['data-zip']={
version=1.001,
@@ -17633,7 +19134,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-tre"] = package.loaded["data-tre"] or true
--- original size: 8712, stripped down to: 5726
+-- original size: 8479, stripped down to: 5580
if not modules then modules={} end modules ['data-tre']={
version=1.001,
@@ -17822,7 +19323,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-sch"] = package.loaded["data-sch"] or true
--- original size: 6779, stripped down to: 5444
+-- original size: 6653, stripped down to: 5467
if not modules then modules={} end modules ['data-sch']={
version=1.001,
@@ -17868,11 +19369,21 @@ function resolvers.schemes.cleanname(specification)
end
return hash
end
-local cached,loaded,reused,thresholds,handlers={},{},{},{},{}
-local function runcurl(name,cachename)
- local command="curl --silent --insecure --create-dirs --output "..cachename.." "..name
- os.execute(command)
-end
+local cached={}
+local loaded={}
+local reused={}
+local thresholds={}
+local handlers={}
+local runner=sandbox.registerrunner {
+ name="curl resolver",
+ method="execute",
+ program="curl",
+ template="--silent -- insecure --create-dirs --output %cachename% %original%",
+ checkers={
+ cachename="cache",
+ original="url",
+ }
+}
local function fetch(specification)
local original=specification.original
local scheme=specification.scheme
@@ -17894,7 +19405,10 @@ local function fetch(specification)
report_schemes("fetching %a, protocol %a, method %a",original,scheme,"curl")
end
logs.flush()
- runcurl(original,cachename)
+ runner {
+ original=original,
+ cachename=cachename,
+ }
end
end
if io.exists(cachename) then
@@ -18003,7 +19517,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-lua"] = package.loaded["data-lua"] or true
--- original size: 4447, stripped down to: 3302
+-- original size: 4207, stripped down to: 3137
if not modules then modules={} end modules ['data-lua']={
version=1.001,
@@ -18045,8 +19559,6 @@ function helpers.cleanpath(path)
return resolveprefix(lpegmatch(pattern,path))
end
local loadedaslib=helpers.loadedaslib
-local getextraluapaths=package.extraluapaths
-local getextralibpaths=package.extralibpaths
local registerpath=helpers.registerpath
local lualibfile=helpers.lualibfile
local luaformatpaths
@@ -18112,7 +19624,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-aux"] = package.loaded["data-aux"] or true
--- original size: 2494, stripped down to: 2047
+-- original size: 2431, stripped down to: 1996
if not modules then modules={} end modules ['data-aux']={
version=1.001,
@@ -18179,7 +19691,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-tmf"] = package.loaded["data-tmf"] or true
--- original size: 2674, stripped down to: 1658
+-- original size: 2601, stripped down to: 1627
if not modules then modules={} end modules ['data-tmf']={
version=1.001,
@@ -18235,7 +19747,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-lst"] = package.loaded["data-lst"] or true
--- original size: 2815, stripped down to: 2415
+-- original size: 2734, stripped down to: 2354
if not modules then modules={} end modules ['data-lst']={
version=1.001,
@@ -18315,7 +19827,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-lib"] = package.loaded["util-lib"] or true
--- original size: 11846, stripped down to: 6059
+-- original size: 13595, stripped down to: 7500
if not modules then modules={} end modules ['util-lib']={
version=1.001,
@@ -18324,35 +19836,51 @@ if not modules then modules={} end modules ['util-lib']={
copyright="PRAGMA ADE / ConTeXt Development Team",
license="see context related readme files",
}
-local gsub,find=string.gsub,string.find
-local pathpart,nameonly,joinfile=file.pathpart,file.nameonly,file.join
-local findfile,findfiles=resolvers and resolvers.findfile,resolvers and resolvers.findfiles
-local loaded=package.loaded
-local report_swiglib=logs.reporter("swiglib")
-local trace_swiglib=false trackers.register("resolvers.swiglib",function(v) trace_swiglib=v end)
+local type=type
+local next=next
+local pcall=pcall
+local gsub=string.gsub
+local find=string.find
+local sort=table.sort
+local pathpart=file.pathpart
+local nameonly=file.nameonly
+local joinfile=file.join
+local removesuffix=file.removesuffix
+local findfile=resolvers.findfile
+local findfiles=resolvers.findfiles
+local expandpaths=resolvers.expandedpathlistfromvariable
+local qualifiedpath=file.is_qualified_path
+local isfile=lfs.isfile
local done=false
-local function requireswiglib(required,version)
- local trace_swiglib=trace_swiglib or package.helpers.trace
- local library=loaded[required]
- if library==nil then
- if trace_swiglib then
- report_swiglib("requiring library %a with version %a",required,version or "any")
- end
- local required_full=gsub(required,"%.","/")
- local required_path=pathpart(required_full)
- local required_base=nameonly(required_full)
+local function locate(required,version,trace,report,action)
+ if type(required)~="string" then
+ report("provide a proper library name")
+ return
+ end
+ if trace then
+ report("requiring library %a with version %a",required,version or "any")
+ end
+ local found_library=nil
+ local required_full=gsub(required,"%.","/")
+ local required_path=pathpart(required_full)
+ local required_base=nameonly(required_full)
+ if qualifiedpath(required) then
+ if isfile(required) then
+ found_library=required
+ end
+ else
local required_name=required_base.."."..os.libsuffix
local version=type(version)=="string" and version~="" and version or false
local engine=environment.ownmain or false
- if trace_swiglib and not done then
- local list=resolvers.expandedpathlistfromvariable("lib")
+ if trace and not done then
+ local list=expandpaths("lib")
for i=1,#list do
- report_swiglib("tds path %i: %s",i,list[i])
+ report("tds path %i: %s",i,list[i])
end
end
local function found(locate,asked_library,how,...)
- if trace_swiglib then
- report_swiglib("checking %s: %a",how,asked_library)
+ if trace then
+ report("checking %s: %a",how,asked_library)
end
return locate(asked_library,...)
end
@@ -18360,45 +19888,45 @@ local function requireswiglib(required,version)
local found=nil
if version then
local asked_library=joinfile(required_path,version,required_name)
- if trace_swiglib then
- report_swiglib("checking %s: %a","with version",asked_library)
+ if trace then
+ report("checking %s: %a","with version",asked_library)
end
found=locate(asked_library,...)
end
if not found or found=="" then
local asked_library=joinfile(required_path,required_name)
- if trace_swiglib then
- report_swiglib("checking %s: %a","with version",asked_library)
+ if trace then
+ report("checking %s: %a","with version",asked_library)
end
found=locate(asked_library,...)
end
return found and found~="" and found or false
end
local function attempt(checkpattern)
- if trace_swiglib then
- report_swiglib("checking tds lib paths strictly")
+ if trace then
+ report("checking tds lib paths strictly")
end
local found=findfile and check(findfile,"lib")
if found and (not checkpattern or find(found,checkpattern)) then
return found
end
- if trace_swiglib then
- report_swiglib("checking tds lib paths with wildcard")
+ if trace then
+ report("checking tds lib paths with wildcard")
end
local asked_library=joinfile(required_path,".*",required_name)
- if trace_swiglib then
- report_swiglib("checking %s: %a","latest version",asked_library)
+ if trace then
+ report("checking %s: %a","latest version",asked_library)
end
local list=findfiles(asked_library,"lib",true)
if list and #list>0 then
- table.sort(list)
+ sort(list)
local found=list[#list]
if found and (not checkpattern or find(found,checkpattern)) then
return found
end
end
- if trace_swiglib then
- report_swiglib("checking lib paths")
+ if trace then
+ report("checking lib paths")
end
package.extralibpath(environment.ownpath)
local paths=package.libpaths()
@@ -18410,89 +19938,143 @@ local function requireswiglib(required,version)
end
return false
end
- local found_library=nil
if engine then
- if trace_swiglib then
- report_swiglib("attemp 1, engine %a",engine)
+ if trace then
+ report("attemp 1, engine %a",engine)
end
found_library=attempt("/"..engine.."/")
if not found_library then
- if trace_swiglib then
- report_swiglib("attemp 2, no engine",asked_library)
+ if trace then
+ report("attemp 2, no engine",asked_library)
end
found_library=attempt()
end
else
found_library=attempt()
end
- if not found_library then
- if trace_swiglib then
- report_swiglib("not found: %a",required)
- end
+ end
+ if not found_library then
+ if trace then
+ report("not found: %a",required)
+ end
+ library=false
+ else
+ if trace then
+ report("found: %a",found_library)
+ end
+ local message,result=action(found_library,required_base)
+ if result then
+ library=result
+ else
library=false
+ report("load error: message %a, library %a",tostring(message),found_library or "no library")
+ end
+ end
+ if not library then
+ report("unknown: %a",required)
+ elseif trace then
+ report("stored: %a",required)
+ end
+ return library
+end
+do
+ local report_swiglib=logs.reporter("swiglib")
+ local trace_swiglib=false
+ local savedrequire=require
+ local loadedlibs={}
+ local loadlib=package.loadlib
+ local pushdir=dir.push
+ local popdir=dir.pop
+ trackers.register("resolvers.swiglib",function(v) trace_swiglib=v end)
+ function requireswiglib(required,version)
+ local library=loadedlibs[library]
+ if library==nil then
+ local trace_swiglib=trace_swiglib or package.helpers.trace
+ library=locate(required,version,trace_swiglib,report_swiglib,function(name,base)
+ pushdir(pathpart(name))
+ local opener="luaopen_"..base
+ if trace_swiglib then
+ report_swiglib("opening: %a with %a",name,opener)
+ end
+ local library,message=loadlib(name,opener)
+ local libtype=type(library)
+ if libtype=="function" then
+ library=library()
+ message=true
+ else
+ report_swiglib("load error: %a returns %a, message %a, library %a",opener,libtype,(string.gsub(message or "no message","[%s]+$","")),found_library or "no library")
+ library=false
+ end
+ popdir()
+ return message,library
+ end)
+ loadedlibs[required]=library or false
+ end
+ return library
+ end
+ function require(name,version)
+ if find(name,"^swiglib%.") then
+ return requireswiglib(name,version)
else
- local path=pathpart(found_library)
- local base=nameonly(found_library)
- dir.push(path)
+ return savedrequire(name)
+ end
+ end
+ local swiglibs={}
+ local initializer="core"
+ function swiglib(name,version)
+ local library=swiglibs[name]
+ if not library then
+ statistics.starttiming(swiglibs)
if trace_swiglib then
- report_swiglib("found: %a",found_library)
- end
- local message=nil
- local opener="luaopen_"..required_base
- library,message=package.loadlib(found_library,opener)
- local libtype=type(library)
- if libtype=="function" then
- library=library()
+ report_swiglib("loading %a",name)
+ end
+ if not find(name,"%."..initializer.."$") then
+ fullname="swiglib."..name.."."..initializer
else
- report_swiglib("load error: %a returns %a, message %a, library %a",opener,libtype,(string.gsub(message or "no message","[%s]+$","")),found_library or "no library")
- library=false
+ fullname="swiglib."..name
end
- dir.pop()
+ library=requireswiglib(fullname,version)
+ swiglibs[name]=library
+ statistics.stoptiming(swiglibs)
end
- if not library then
- report_swiglib("unknown: %a",required)
- elseif trace_swiglib then
- report_swiglib("stored: %a",required)
- end
- loaded[required]=library
- else
- report_swiglib("reused: %a",required)
+ return library
end
- return library
+ statistics.register("used swiglibs",function()
+ if next(swiglibs) then
+ return string.format("%s, initial load time %s seconds",table.concat(table.sortedkeys(swiglibs)," "),statistics.elapsedtime(swiglibs))
+ end
+ end)
end
-local savedrequire=require
-function require(name,version)
- if find(name,"^swiglib%.") then
- return requireswiglib(name,version)
- else
- return savedrequire(name)
+if FFISUPPORTED and ffi and ffi.load then
+ local report_ffilib=logs.reporter("ffilib")
+ local trace_ffilib=false
+ local savedffiload=ffi.load
+ trackers.register("resolvers.ffilib",function(v) trace_ffilib=v end)
+ local function locateindeed(name)
+ local message,library=pcall(savedffiload,removesuffix(name))
+ if type(library)=="userdata" then
+ return library
+ else
+ return false
+ end
end
-end
-local swiglibs={}
-local initializer="core"
-function swiglib(name,version)
- local library=swiglibs[name]
- if not library then
- statistics.starttiming(swiglibs)
- if trace_swiglib then
- report_swiglib("loading %a",name)
+ function ffilib(required,version)
+ if version=="system" then
+ return locateindeed(name)
+ else
+ return locate(required,version,trace_ffilib,report_ffilib,locateindeed)
end
- if not find(name,"%."..initializer.."$") then
- fullname="swiglib."..name.."."..initializer
+ end
+ function ffi.load(name)
+ local library=ffilib(name)
+ if type(library)=="userdata" then
+ return library
else
- fullname="swiglib."..name
+ report_ffilib("trying to load %a using normal loader",name)
+ return savedffiload(name)
end
- library=requireswiglib(fullname,version)
- swiglibs[name]=library
- statistics.stoptiming(swiglibs)
end
- return library
end
-statistics.register("used swiglibs",function()
- if next(swiglibs) then
- return string.format("%s, initial load time %s seconds",table.concat(table.sortedkeys(swiglibs)," "),statistics.elapsedtime(swiglibs))
- end
-end)
end -- of closure
@@ -18501,7 +20083,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["luat-sta"] = package.loaded["luat-sta"] or true
--- original size: 5914, stripped down to: 2584
+-- original size: 5703, stripped down to: 2507
if not modules then modules={} end modules ['luat-sta']={
version=1.001,
@@ -18604,7 +20186,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["luat-fmt"] = package.loaded["luat-fmt"] or true
--- original size: 6967, stripped down to: 5631
+-- original size: 9144, stripped down to: 7291
if not modules then modules={} end modules ['luat-fmt']={
version=1.001,
@@ -18618,23 +20200,67 @@ local concat=table.concat
local quoted=string.quoted
local luasuffixes=utilities.lua.suffixes
local report_format=logs.reporter("resolvers","formats")
-local function primaryflags()
- local trackers=environment.argument("trackers")
- local directives=environment.argument("directives")
+local function primaryflags()
+ local arguments=environment.arguments
+ local flags={}
+ if arguments.silent then
+ flags[#flags+1]="--interaction=batchmode"
+ end
+ if arguments.jit then
+ flags[#flags+1]="--jiton"
+ end
+ return concat(flags," ")
+end
+local function secondaryflags()
+ local arguments=environment.arguments
+ local trackers=arguments.trackers
+ local directives=arguments.directives
local flags={}
if trackers and trackers~="" then
- flags={ "--trackers="..quoted(trackers) }
+ flags[#flags+1]="--c:trackers="..quoted(trackers)
end
if directives and directives~="" then
- flags={ "--directives="..quoted(directives) }
+ flags[#flags+1]="--c:directives="..quoted(directives)
+ end
+ if arguments.silent then
+ flags[#flags+1]="--c:silent"
end
- if environment.argument("jit") then
- flags={ "--jiton" }
+ if arguments.jit then
+ flags[#flags+1]="--c:jiton"
+ end
+ if arguments.ansi then
+ flags[#flags+1]="--c:ansi"
end
return concat(flags," ")
end
-function environment.make_format(name,silent)
+local template=[[--ini %primaryflags% --lua=%luafile% %texfile% %secondaryflags% %dump% %redirect%]]
+local checkers={
+ primaryflags="string",
+ secondaryflags="string",
+ luafile="readable",
+ texfile="readable",
+ redirect="string",
+ dump="string",
+}
+local runners={
+ luatex=sandbox.registerrunner {
+ name="make luatex format",
+ program="luatex",
+ template=template,
+ checkers=checkers,
+ reporter=report_format,
+ },
+ luajittex=sandbox.registerrunner {
+ name="make luajittex format",
+ program="luajittex",
+ template=template,
+ checkers=checkers,
+ reporter=report_format,
+ },
+}
+function environment.make_format(name,arguments)
local engine=environment.ownmain or "luatex"
+ local silent=environment.arguments.silent
local olddir=dir.current()
local path=caches.getwritablepath("formats",engine) or ""
if path~="" then
@@ -18690,11 +20316,20 @@ function environment.make_format(name,silent)
lfs.chdir(olddir)
return
end
- local dump=os.platform=="unix" and "\\\\dump" or "\\dump"
- if silent then
+ local specification={
+ primaryflags=primaryflags(),
+ secondaryflags=secondaryflags(),
+ luafile=quoted(usedluastub),
+ texfile=quoted(fulltexsourcename),
+ dump=os.platform=="unix" and "\\\\dump" or "\\dump",
+ }
+ local runner=runners[engine]
+ if not runner then
+ report_format("format %a cannot be generated, no runner available for engine %a",name,engine)
+ elseif 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)
+ specification.redirect="> temp.log"
+ local result=runner(specification)
local runtime=statistics.stoptiming()
if result~=0 then
print(format("%s silent make > fatal error when making format %q",engine,name))
@@ -18703,9 +20338,7 @@ function environment.make_format(name,silent)
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)
+ runner(specification)
end
local pattern=file.removesuffix(file.basename(usedluastub)).."-*.mem"
local mp=dir.glob(pattern)
@@ -18718,6 +20351,30 @@ function environment.make_format(name,silent)
end
lfs.chdir(olddir)
end
+local template=[[%flags% --fmt=%fmtfile% --lua=%luafile% %texfile% %more%]]
+local checkers={
+ flags="string",
+ more="string",
+ fmtfile="readable",
+ luafile="readable",
+ texfile="readable",
+}
+local runners={
+ luatex=sandbox.registerrunner {
+ name="run luatex format",
+ program="luatex",
+ template=template,
+ checkers=checkers,
+ reporter=report_format,
+ },
+ luajittex=sandbox.registerrunner {
+ name="run luajittex format",
+ program="luajittex",
+ template=template,
+ checkers=checkers,
+ reporter=report_format,
+ },
+}
function environment.run_format(name,data,more)
if name and name~="" then
local engine=environment.ownmain or "luatex"
@@ -18739,9 +20396,18 @@ function environment.run_format(name,data,more)
report_format("using format name %a",fmtname)
report_format("no luc/lua file with name %a",barename)
else
- local command=format("%s %s --fmt=%s --lua=%s %s %s",engine,primaryflags(),quoted(barename),quoted(luaname),quoted(data),more~="" and quoted(more) or "")
- report_format("running command: %s",command)
- os.execute(command)
+ local runner=runners[engine]
+ if not runner then
+ report_format("format %a cannot be run, no runner available for engine %a",name,engine)
+ else
+ runner {
+ flags=primaryflags(),
+ fmtfile=quoted(barename),
+ luafile=quoted(luaname),
+ texfile=quoted(data),
+ more=more,
+ }
+ end
end
end
end
@@ -18750,10 +20416,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-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
+-- used libraries : l-lua.lua l-sandbox.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-tpl.lua util-sbx.lua util-mrg.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 : 797557
--- stripped bytes : 289197
+-- original bytes : 842443
+-- stripped bytes : 306317
-- end library merge
@@ -18777,6 +20443,7 @@ local owntree = environment and environment.ownpath or ownpath
local ownlibs = { -- order can be made better
'l-lua.lua',
+ 'l-sandbox.lua',
'l-package.lua',
'l-lpeg.lua',
'l-function.lua',
@@ -18810,8 +20477,9 @@ local ownlibs = { -- order can be made better
'util-lua.lua', -- indeed here?
'util-deb.lua',
- 'util-mrg.lua',
'util-tpl.lua',
+ 'util-sbx.lua',
+ 'util-mrg.lua',
'util-env.lua',
'luat-env.lua', -- can come before inf (as in mkiv)
@@ -18983,7 +20651,7 @@ local helpinfo = [[
<metadata>
<entry name="name">mtxrun</entry>
<entry name="detail">ConTeXt TDS Runner Tool</entry>
- <entry name="version">1.31</entry>
+ <entry name="version">1.32</entry>
</metadata>
<flags>
<category name="basic">
@@ -19046,6 +20714,7 @@ local helpinfo = [[
</subcategory>
<subcategory>
<flag name="expand-braces"><short>expand complex variable</short></flag>
+ <flag name="resolve-path"><short>expand variable (completely resolve paths)</short></flag>
<flag name="expand-path"><short>expand variable (resolve paths)</short></flag>
<flag name="expand-var"><short>expand variable (resolve references)</short></flag>
<flag name="show-path"><short>show path expansion of ...</short></flag>
@@ -19063,7 +20732,7 @@ local helpinfo = [[
local application = logs.application {
name = "mtxrun",
- banner = "ConTeXt TDS Runner Tool 1.31",
+ banner = "ConTeXt TDS Runner Tool 1.32",
helpinfo = helpinfo,
}
@@ -20029,6 +21698,13 @@ elseif e_argument("expand-path") then
environment.initializearguments(environment.arguments_after)
resolvers.dowithfilesandreport(resolvers.expandpath, environment.files)
+elseif e_argument("resolve-path") then
+
+ resolvers.load("nofiles")
+ runners.register_arguments(filename)
+ environment.initializearguments(environment.arguments_after)
+ resolvers.dowithfilesandreport(resolvers.cleanedpathlist, environment.files)
+
elseif e_argument("expand-var") or e_argument("expand-variable") then
-- luatools: runners.execute_ctx_script("mtx-base","--expand-var",filename)
diff --git a/tex/context/base/context-version.pdf b/tex/context/base/context-version.pdf
index ff75a0a20..a13a07a4e 100644
--- a/tex/context/base/context-version.pdf
+++ b/tex/context/base/context-version.pdf
Binary files differ
diff --git a/tex/context/base/mkii/cont-new.mkii b/tex/context/base/mkii/cont-new.mkii
index f0385c065..ec59205b7 100644
--- a/tex/context/base/mkii/cont-new.mkii
+++ b/tex/context/base/mkii/cont-new.mkii
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2013.06.07 17:34}
+\newcontextversion{2017.05.14 19:09}
%D This file is loaded at runtime, thereby providing an
%D excellent place for hacks, patches, extensions and new
diff --git a/tex/context/base/mkii/context.mkii b/tex/context/base/mkii/context.mkii
index 84679a9a2..b31ece259 100644
--- a/tex/context/base/mkii/context.mkii
+++ b/tex/context/base/mkii/context.mkii
@@ -20,7 +20,7 @@
%D your styles an modules.
\edef\contextformat {\jobname}
-\edef\contextversion{2013.06.07 17:34}
+\edef\contextversion{2017.05.14 19:09}
%D For those who want to use this:
diff --git a/tex/context/base/mkii/mult-cs.mkii b/tex/context/base/mkii/mult-cs.mkii
new file mode 100644
index 000000000..837a397fb
--- /dev/null
+++ b/tex/context/base/mkii/mult-cs.mkii
@@ -0,0 +1,1970 @@
+% this file is auto-generated, don't edit this file
+%
+% definitions for interface variables for language cs
+%
+\setinterfacevariable{Addition}{Pridavek}
+\setinterfacevariable{Alphabetic}{Alphabetic}
+\setinterfacevariable{Balloon}{Bublinka}
+\setinterfacevariable{Cap}{Kap}
+\setinterfacevariable{Capital}{Kapitalky}
+\setinterfacevariable{Character}{Pismeno}
+\setinterfacevariable{Characters}{Pismena}
+\setinterfacevariable{CloseDocument}{ZavritDokument}
+\setinterfacevariable{ExitViewer}{UkoncitProhlizec}
+\setinterfacevariable{FirstPage}{PrvniStrana}
+\setinterfacevariable{FitHeight}{FitHeight}
+\setinterfacevariable{FitWidth}{FitWidth}
+\setinterfacevariable{GotoPage}{JdiNaStranku}
+\setinterfacevariable{Greek}{Recky}
+\setinterfacevariable{Help}{Napoveda}
+\setinterfacevariable{HideField}{SkryjPole}
+\setinterfacevariable{HideLayer}{HideLayer}
+\setinterfacevariable{Key}{Klavesa}
+\setinterfacevariable{LastPage}{PosledniStrana}
+\setinterfacevariable{LoadForm}{NacistFormular}
+\setinterfacevariable{MONTH}{MESIC}
+\setinterfacevariable{New}{Novy}
+\setinterfacevariable{NextJump}{NasledujiciSkok}
+\setinterfacevariable{NextPage}{DalsiStrana}
+\setinterfacevariable{Numbers}{Cisla}
+\setinterfacevariable{OpenNamedDocument}{OpenNamedDocument}
+\setinterfacevariable{Ordinal}{Ordinal}
+\setinterfacevariable{Paragraph}{Odstavec}
+\setinterfacevariable{PauseMovie}{PozastavitFilm}
+\setinterfacevariable{PauseRendering}{PauseRendering}
+\setinterfacevariable{PauseSound}{PozastavitZvuk}
+\setinterfacevariable{PreviousJump}{PredchoziSkok}
+\setinterfacevariable{PreviousPage}{PredchoziStrana}
+\setinterfacevariable{PrintDocument}{VytisknoutDokument}
+\setinterfacevariable{Query}{Query}
+\setinterfacevariable{QueryAgain}{QueryAgain}
+\setinterfacevariable{ResetForm}{ResetFormulare}
+\setinterfacevariable{ResumeMovie}{PokracovatFilm}
+\setinterfacevariable{ResumeRendering}{ResumeRendering}
+\setinterfacevariable{ResumeSound}{PokracovatZvuk}
+\setinterfacevariable{Romannumerals}{Rimskecislice}
+\setinterfacevariable{SaveDocument}{UlozitDokument}
+\setinterfacevariable{SaveForm}{UlozitFormular}
+\setinterfacevariable{SaveNamedDocument}{SaveNamedDocument}
+\setinterfacevariable{SearchAgain}{HledatZnovu}
+\setinterfacevariable{SearchDocument}{ProhledatDokument}
+\setinterfacevariable{ShowBookmarks}{UkazZalozky}
+\setinterfacevariable{ShowField}{UkazPole}
+\setinterfacevariable{ShowThumbs}{UkazNahledy}
+\setinterfacevariable{StartMovie}{SpustitFilm}
+\setinterfacevariable{StartRendering}{StartRendering}
+\setinterfacevariable{StartSound}{StartZvuk}
+\setinterfacevariable{StopMovie}{ZastavitFilm}
+\setinterfacevariable{StopRendering}{StopRendering}
+\setinterfacevariable{StopSound}{StopZvuk}
+\setinterfacevariable{SubmitForm}{PoslatFormular}
+\setinterfacevariable{ToggleLayer}{ToggleLayer}
+\setinterfacevariable{ToggleViewer}{ZmenitProhlizec}
+\setinterfacevariable{URL}{URL}
+\setinterfacevariable{VideLayer}{VideLayer}
+\setinterfacevariable{ViewerHelp}{NapovedaProhlizece}
+\setinterfacevariable{WEEKDAY}{VSEDNIDEN}
+\setinterfacevariable{WORD}{SLOVO}
+\setinterfacevariable{WORDS}{SLOVA}
+\setinterfacevariable{Word}{Slovo}
+\setinterfacevariable{Words}{Slova}
+\setinterfacevariable{abbreviation}{zkratka}
+\setinterfacevariable{abbreviations}{zkratky}
+\setinterfacevariable{absolute}{absolutni}
+\setinterfacevariable{action}{akce}
+\setinterfacevariable{after}{po}
+\setinterfacevariable{all}{vse}
+\setinterfacevariable{alphabetic}{alphabetic}
+\setinterfacevariable{always}{vzdy}
+\setinterfacevariable{anchor}{anchor}
+\setinterfacevariable{and}{and}
+\setinterfacevariable{answerarea}{answerarea}
+\setinterfacevariable{appendices}{dodatky}
+\setinterfacevariable{appendix}{dodatek}
+\setinterfacevariable{april}{duben}
+\setinterfacevariable{aside}{aside}
+\setinterfacevariable{atleftmargin}{atleftmargin}
+\setinterfacevariable{atmargin}{naokraji}
+\setinterfacevariable{atpage}{nastrance}
+\setinterfacevariable{atrightmargin}{atrightmargin}
+\setinterfacevariable{attachment}{attachment}
+\setinterfacevariable{august}{srpen}
+\setinterfacevariable{author}{autor}
+\setinterfacevariable{auto}{auto}
+\setinterfacevariable{autointro}{autouvod}
+\setinterfacevariable{autopunctuation}{autopunctuation}
+\setinterfacevariable{back}{zpet}
+\setinterfacevariable{background}{pozadi}
+\setinterfacevariable{backmatter}{epilogy}
+\setinterfacevariable{backpart}{epilog}
+\setinterfacevariable{backspace}{zpetnamezera}
+\setinterfacevariable{backward}{zpet}
+\setinterfacevariable{bbl}{bbl}
+\setinterfacevariable{before}{pred}
+\setinterfacevariable{begin}{begin}
+\setinterfacevariable{bib}{bib}
+\setinterfacevariable{big}{velke}
+\setinterfacevariable{bigbodyfont}{bigbodyfont}
+\setinterfacevariable{bigger}{bigger}
+\setinterfacevariable{bigpreference}{vysokapriorita}
+\setinterfacevariable{blank}{prazdny}
+\setinterfacevariable{block}{block}
+\setinterfacevariable{blockquote}{blockquote}
+\setinterfacevariable{bodymatter}{hlavnicasti}
+\setinterfacevariable{bodypart}{hlavnicast}
+\setinterfacevariable{bold}{tucne}
+\setinterfacevariable{bolditalic}{tucnekurzivni}
+\setinterfacevariable{boldslanted}{tucnesklonene}
+\setinterfacevariable{bookmark}{zalozka}
+\setinterfacevariable{both}{obe}
+\setinterfacevariable{bothtext}{bothtext}
+\setinterfacevariable{bottom}{spodek}
+\setinterfacevariable{box}{box}
+\setinterfacevariable{brief}{brief}
+\setinterfacevariable{broad}{siroky}
+\setinterfacevariable{buffer}{buffer}
+\setinterfacevariable{by}{skrz}
+\setinterfacevariable{calligraphic}{kaligraficke}
+\setinterfacevariable{camel}{camel}
+\setinterfacevariable{cap}{kap}
+\setinterfacevariable{capital}{kapitalky}
+\setinterfacevariable{center}{center}
+\setinterfacevariable{centerlast}{centerlast}
+\setinterfacevariable{chapter}{kapitola}
+\setinterfacevariable{character}{pismeno}
+\setinterfacevariable{characters}{pismena}
+\setinterfacevariable{chemical}{chemical}
+\setinterfacevariable{chemicals}{chemicals}
+\setinterfacevariable{chemistry}{chemistry}
+\setinterfacevariable{cite}{cite}
+\setinterfacevariable{color}{barevne}
+\setinterfacevariable{column}{column}
+\setinterfacevariable{columns}{sloupce}
+\setinterfacevariable{combination}{combination}
+\setinterfacevariable{command}{prikaz}
+\setinterfacevariable{commands}{prikazy}
+\setinterfacevariable{comment}{komentar}
+\setinterfacevariable{component}{komponenta}
+\setinterfacevariable{compressseparator}{compressseparator}
+\setinterfacevariable{concept}{koncept}
+\setinterfacevariable{construction}{construction}
+\setinterfacevariable{content}{obsah}
+\setinterfacevariable{contents}{obsah}
+\setinterfacevariable{continue}{pokracovat}
+\setinterfacevariable{continued}{continued}
+\setinterfacevariable{controls}{controls}
+\setinterfacevariable{conversion}{konverze}
+\setinterfacevariable{current}{aktualni}
+\setinterfacevariable{cutspace}{cutspace}
+\setinterfacevariable{dataset}{dataset}
+\setinterfacevariable{date}{datum}
+\setinterfacevariable{day}{den}
+\setinterfacevariable{december}{prosinec}
+\setinterfacevariable{default}{implicitni}
+\setinterfacevariable{depth}{podlehloubky}
+\setinterfacevariable{description}{popis}
+\setinterfacevariable{disable}{zablokovat}
+\setinterfacevariable{display}{obrazovka}
+\setinterfacevariable{dot}{tecka}
+\setinterfacevariable{doublesided}{dvoustranny}
+\setinterfacevariable{down}{down}
+\setinterfacevariable{each}{kazdy}
+\setinterfacevariable{edge}{hrana}
+\setinterfacevariable{effective}{effective}
+\setinterfacevariable{eight}{eight}
+\setinterfacevariable{embed}{embed}
+\setinterfacevariable{empty}{prazdne}
+\setinterfacevariable{enable}{enable}
+\setinterfacevariable{end}{end}
+\setinterfacevariable{endnote}{endnote}
+\setinterfacevariable{enumeration}{vycet}
+\setinterfacevariable{environment}{prostredi}
+\setinterfacevariable{even}{sude}
+\setinterfacevariable{export}{export}
+\setinterfacevariable{external}{externi}
+\setinterfacevariable{extremestretch}{extremestretch}
+\setinterfacevariable{fact}{fakt}
+\setinterfacevariable{february}{unor}
+\setinterfacevariable{figure}{obrazek}
+\setinterfacevariable{figures}{obrazky}
+\setinterfacevariable{file}{soubor}
+\setinterfacevariable{final}{finalni}
+\setinterfacevariable{first}{prvni}
+\setinterfacevariable{firstcolumn}{firstcolumn}
+\setinterfacevariable{firstpage}{prvnistranka}
+\setinterfacevariable{firstsubpage}{prvnipodstranka}
+\setinterfacevariable{fit}{prizpusobive}
+\setinterfacevariable{five}{pet}
+\setinterfacevariable{fix}{fixuj}
+\setinterfacevariable{fixed}{fixne}
+\setinterfacevariable{flexible}{prizpusobive}
+\setinterfacevariable{float}{plvouciobjekt}
+\setinterfacevariable{flushinner}{flushinner}
+\setinterfacevariable{flushleft}{flushleft}
+\setinterfacevariable{flushouter}{flushouter}
+\setinterfacevariable{flushright}{flushright}
+\setinterfacevariable{followingpage}{followingpage}
+\setinterfacevariable{footer}{upati}
+\setinterfacevariable{footnote}{poznamkapodcarou}
+\setinterfacevariable{force}{sila}
+\setinterfacevariable{foreground}{popredi}
+\setinterfacevariable{formula}{rovnice}
+\setinterfacevariable{formulas}{rovnice}
+\setinterfacevariable{forward}{vpred}
+\setinterfacevariable{four}{ctyri}
+\setinterfacevariable{fractions}{fractions}
+\setinterfacevariable{frame}{ramecek}
+\setinterfacevariable{framedtext}{oramovanytext}
+\setinterfacevariable{friday}{patek}
+\setinterfacevariable{frontmatter}{prednicasti}
+\setinterfacevariable{frontpart}{prednicast}
+\setinterfacevariable{fullhz}{fullhz}
+\setinterfacevariable{global}{globalne}
+\setinterfacevariable{graphic}{graf}
+\setinterfacevariable{graphics}{grafy}
+\setinterfacevariable{gray}{seda}
+\setinterfacevariable{greek}{recky}
+\setinterfacevariable{grid}{mrizka}
+\setinterfacevariable{halfline}{pulradku}
+\setinterfacevariable{handwritten}{rukopisne}
+\setinterfacevariable{hang}{zaveseni}
+\setinterfacevariable{hanging}{visici}
+\setinterfacevariable{head}{hlavicka}
+\setinterfacevariable{header}{zahlavi}
+\setinterfacevariable{height}{vyska}
+\setinterfacevariable{helptext}{textnapovedy}
+\setinterfacevariable{hencefore}{vyse}
+\setinterfacevariable{here}{zde}
+\setinterfacevariable{hereafter}{nize}
+\setinterfacevariable{hidden}{skryte}
+\setinterfacevariable{hiddenbar}{hiddenbar}
+\setinterfacevariable{hiding}{skryt}
+\setinterfacevariable{high}{vysoko}
+\setinterfacevariable{horizontal}{horizontalne}
+\setinterfacevariable{hyphenated}{hyphenated}
+\setinterfacevariable{hz}{hz}
+\setinterfacevariable{inbetween}{mezi}
+\setinterfacevariable{index}{rejstrik}
+\setinterfacevariable{indices}{rejstriky}
+\setinterfacevariable{inherit}{inherit}
+\setinterfacevariable{ininner}{ininner}
+\setinterfacevariable{ininneredge}{ininneredge}
+\setinterfacevariable{ininnermargin}{ininnermargin}
+\setinterfacevariable{inleft}{ivlevo}
+\setinterfacevariable{inleftedge}{nalevo}
+\setinterfacevariable{inleftmargin}{nalevyokraj}
+\setinterfacevariable{inline}{inline}
+\setinterfacevariable{inmargin}{naokraji}
+\setinterfacevariable{inner}{uvnitr}
+\setinterfacevariable{inneredge}{inneredge}
+\setinterfacevariable{innermargin}{innermargin}
+\setinterfacevariable{inother}{inother}
+\setinterfacevariable{inouter}{inouter}
+\setinterfacevariable{inouteredge}{inouteredge}
+\setinterfacevariable{inoutermargin}{inoutermargin}
+\setinterfacevariable{inright}{ivpravo}
+\setinterfacevariable{inrightedge}{napravo}
+\setinterfacevariable{inrightmargin}{napravyokraj}
+\setinterfacevariable{integral}{integral}
+\setinterfacevariable{interaction}{interakce}
+\setinterfacevariable{interactionmenu}{interaktivnimenu}
+\setinterfacevariable{interactive}{interactive}
+\setinterfacevariable{intermezzi}{intermezzi}
+\setinterfacevariable{intermezzo}{intermezzo}
+\setinterfacevariable{intext}{dotextu}
+\setinterfacevariable{intro}{uvod}
+\setinterfacevariable{italic}{kurziva}
+\setinterfacevariable{italicbold}{kurzivnitucne}
+\setinterfacevariable{item}{polozka}
+\setinterfacevariable{itemize}{vycet}
+\setinterfacevariable{its}{pol}
+\setinterfacevariable{january}{leden}
+\setinterfacevariable{joinedup}{spojeno}
+\setinterfacevariable{july}{cervenec}
+\setinterfacevariable{june}{cerven}
+\setinterfacevariable{keep}{drzet}
+\setinterfacevariable{kerncharacters}{kerncharacters}
+\setinterfacevariable{knockout}{knockout}
+\setinterfacevariable{label}{popisek}
+\setinterfacevariable{landscape}{nasirku}
+\setinterfacevariable{last}{posledni}
+\setinterfacevariable{lastcolumn}{lastcolumn}
+\setinterfacevariable{lastpage}{poslednistrana}
+\setinterfacevariable{lastpagenumber}{lastpagenumber}
+\setinterfacevariable{lastsubpage}{poslaednipodstranka}
+\setinterfacevariable{layer}{layer}
+\setinterfacevariable{left}{vlevo}
+\setinterfacevariable{leftedge}{levahrana}
+\setinterfacevariable{lefthanging}{lefthanging}
+\setinterfacevariable{leftmargin}{levyokraj}
+\setinterfacevariable{leftpage}{levastranka}
+\setinterfacevariable{lefttoright}{lefttoright}
+\setinterfacevariable{legend}{legenda}
+\setinterfacevariable{less}{less}
+\setinterfacevariable{lesshyphenation}{lesshyphenation}
+\setinterfacevariable{letterspacing}{letterspacing}
+\setinterfacevariable{line}{radek}
+\setinterfacevariable{linenote}{linenote}
+\setinterfacevariable{lines}{radky}
+\setinterfacevariable{linked}{linked}
+\setinterfacevariable{list}{seznam}
+\setinterfacevariable{local}{lokalne}
+\setinterfacevariable{localenvironment}{lokalnihoprostredi}
+\setinterfacevariable{logo}{logo}
+\setinterfacevariable{logos}{loga}
+\setinterfacevariable{lohi}{nivy}
+\setinterfacevariable{long}{long}
+\setinterfacevariable{loose}{uvolnene}
+\setinterfacevariable{low}{nizko}
+\setinterfacevariable{ls}{ls}
+\setinterfacevariable{makeup}{zlom}
+\setinterfacevariable{mar}{mar}
+\setinterfacevariable{march}{brezen}
+\setinterfacevariable{margin}{marginalie}
+\setinterfacevariable{marginedge}{textovahrana}
+\setinterfacevariable{margintext}{marginalnitext}
+\setinterfacevariable{margintitle}{titulmarginalie}
+\setinterfacevariable{marking}{znaceni}
+\setinterfacevariable{math}{math}
+\setinterfacevariable{mathalignment}{mathalignment}
+\setinterfacevariable{mathcases}{mathcases}
+\setinterfacevariable{mathematics}{mathematika}
+\setinterfacevariable{mathmatrix}{mathmatrix}
+\setinterfacevariable{max}{max}
+\setinterfacevariable{maxdepth}{maxdepth}
+\setinterfacevariable{maxheight}{maxheight}
+\setinterfacevariable{maxwidth}{maxwidth}
+\setinterfacevariable{may}{kveten}
+\setinterfacevariable{mediaeval}{stredoveky}
+\setinterfacevariable{medium}{stredni}
+\setinterfacevariable{middle}{nastred}
+\setinterfacevariable{min}{min}
+\setinterfacevariable{mindepth}{mindepth}
+\setinterfacevariable{minheight}{minvyska}
+\setinterfacevariable{minwidth}{minsirka}
+\setinterfacevariable{mirrored}{zrcadleno}
+\setinterfacevariable{mixed}{mixed}
+\setinterfacevariable{monday}{pondeli}
+\setinterfacevariable{mono}{mono}
+\setinterfacevariable{monobold}{monotucne}
+\setinterfacevariable{mononormal}{mononormal}
+\setinterfacevariable{month}{mesic}
+\setinterfacevariable{more}{more}
+\setinterfacevariable{morehyphenation}{morehyphenation}
+\setinterfacevariable{name}{jmeno}
+\setinterfacevariable{narrow}{uzky}
+\setinterfacevariable{negative}{negativ}
+\setinterfacevariable{never}{nikdy}
+\setinterfacevariable{new}{novy}
+\setinterfacevariable{next}{dalsi}
+\setinterfacevariable{nextevenpage}{dalsisudastranka}
+\setinterfacevariable{nextoddpage}{dalsilichastranka}
+\setinterfacevariable{nextpage}{dalsistranka}
+\setinterfacevariable{nextsubpage}{dalsipodstranka}
+\setinterfacevariable{nine}{nine}
+\setinterfacevariable{no}{ne}
+\setinterfacevariable{nocheck}{nocheck}
+\setinterfacevariable{nodepth}{nodepth}
+\setinterfacevariable{nofit}{nofit}
+\setinterfacevariable{nogrid}{nogrid}
+\setinterfacevariable{noheight}{noheight}
+\setinterfacevariable{nohz}{nohz}
+\setinterfacevariable{noline}{noline}
+\setinterfacevariable{nomarking}{zadneznaceni}
+\setinterfacevariable{none}{zadny}
+\setinterfacevariable{nonumber}{nonumber}
+\setinterfacevariable{norepeat}{norepeat}
+\setinterfacevariable{normal}{normalni}
+\setinterfacevariable{nospacing}{nospacing}
+\setinterfacevariable{not}{ne}
+\setinterfacevariable{notation}{notation}
+\setinterfacevariable{note}{note}
+\setinterfacevariable{nothanging}{nothanging}
+\setinterfacevariable{nothyphenated}{nothyphenated}
+\setinterfacevariable{notjoinedup}{notjoinedup}
+\setinterfacevariable{november}{listopad}
+\setinterfacevariable{nowhere}{nikde}
+\setinterfacevariable{nowhite}{zadnabila}
+\setinterfacevariable{number}{cislo}
+\setinterfacevariable{numbers}{cisla}
+\setinterfacevariable{october}{rijen}
+\setinterfacevariable{odd}{liche}
+\setinterfacevariable{off}{vyp}
+\setinterfacevariable{offset}{offset}
+\setinterfacevariable{old}{old}
+\setinterfacevariable{oldstyle}{oldstyle}
+\setinterfacevariable{on}{zap}
+\setinterfacevariable{one}{jedna}
+\setinterfacevariable{opposite}{naproti}
+\setinterfacevariable{ordinal}{ordinal}
+\setinterfacevariable{outer}{vnejsi}
+\setinterfacevariable{outeredge}{outeredge}
+\setinterfacevariable{outermargin}{outermargin}
+\setinterfacevariable{overbar}{nadtrzeno}
+\setinterfacevariable{overbars}{nadtrzeni}
+\setinterfacevariable{overlay}{prekryv}
+\setinterfacevariable{overprint}{overprint}
+\setinterfacevariable{overstrike}{preskrtnuto}
+\setinterfacevariable{overstrikes}{preskrtnuti}
+\setinterfacevariable{packed}{zhustene}
+\setinterfacevariable{page}{stranka}
+\setinterfacevariable{pagecomment}{komentarstranky}
+\setinterfacevariable{pagenumber}{cislostranky}
+\setinterfacevariable{paper}{papir}
+\setinterfacevariable{paragraph}{odstavec}
+\setinterfacevariable{part}{cast}
+\setinterfacevariable{positive}{positiv}
+\setinterfacevariable{postponing}{odlozit}
+\setinterfacevariable{postscript}{postscript}
+\setinterfacevariable{precedingpage}{followingpage}
+\setinterfacevariable{preference}{nastaveni}
+\setinterfacevariable{preview}{nahled}
+\setinterfacevariable{previous}{predchozi}
+\setinterfacevariable{previousevenpage}{predchozisudastranka}
+\setinterfacevariable{previousoddpage}{predchozilichastranka}
+\setinterfacevariable{previouspage}{predchozistranka}
+\setinterfacevariable{previoussubpage}{predchozipodstranka}
+\setinterfacevariable{print}{print}
+\setinterfacevariable{printable}{tisknutelne}
+\setinterfacevariable{process}{process}
+\setinterfacevariable{product}{produkt}
+\setinterfacevariable{program}{program}
+\setinterfacevariable{project}{projekt}
+\setinterfacevariable{protected}{chranene}
+\setinterfacevariable{quadruple}{ctyrnasobny}
+\setinterfacevariable{quarterline}{quarterline}
+\setinterfacevariable{quotation}{citace}
+\setinterfacevariable{quote}{citovat}
+\setinterfacevariable{ran}{rozsah}
+\setinterfacevariable{random}{nahodny}
+\setinterfacevariable{readonly}{pouzeprocteni}
+\setinterfacevariable{rectangular}{pravouhly}
+\setinterfacevariable{reference}{odkaz}
+\setinterfacevariable{referral}{znacka}
+\setinterfacevariable{register}{rejstrik}
+\setinterfacevariable{regular}{pravidelne}
+\setinterfacevariable{relative}{relativni}
+\setinterfacevariable{repeat}{opakovat}
+\setinterfacevariable{required}{pozadovane}
+\setinterfacevariable{reset}{reset}
+\setinterfacevariable{reverse}{reverse}
+\setinterfacevariable{right}{vpravo}
+\setinterfacevariable{rightedge}{pravahrana}
+\setinterfacevariable{righthanging}{righthanging}
+\setinterfacevariable{rightmargin}{pravyokraj}
+\setinterfacevariable{rightpage}{pravastranka}
+\setinterfacevariable{righttoleft}{righttoleft}
+\setinterfacevariable{roman}{antikva}
+\setinterfacevariable{romannumerals}{rimskecislice}
+\setinterfacevariable{rotate}{otoc}
+\setinterfacevariable{rotated}{otoceno}
+\setinterfacevariable{round}{zaobleny}
+\setinterfacevariable{row}{row}
+\setinterfacevariable{rule}{linka}
+\setinterfacevariable{samepage}{stejnastranka}
+\setinterfacevariable{sans}{sans}
+\setinterfacevariable{sansbold}{sanstucne}
+\setinterfacevariable{sansnormal}{sansnormal}
+\setinterfacevariable{sansserif}{bezserifu}
+\setinterfacevariable{saturday}{sobota}
+\setinterfacevariable{screen}{rastr}
+\setinterfacevariable{section}{sekce}
+\setinterfacevariable{sectionblockenvironment}{sectionblockenvironment}
+\setinterfacevariable{sectionnumber}{cislooddilu}
+\setinterfacevariable{see}{viz}
+\setinterfacevariable{selectfont}{selectfont}
+\setinterfacevariable{september}{zari}
+\setinterfacevariable{serif}{serif}
+\setinterfacevariable{serifbold}{serifbold}
+\setinterfacevariable{serifnormal}{serifnormal}
+\setinterfacevariable{serried}{semknuto}
+\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}{jednostranne}
+\setinterfacevariable{six}{six}
+\setinterfacevariable{slanted}{sklonene}
+\setinterfacevariable{slantedbold}{sklonenetucne}
+\setinterfacevariable{small}{male}
+\setinterfacevariable{smallbodyfont}{smallbodyfont}
+\setinterfacevariable{smallbold}{maletucne}
+\setinterfacevariable{smallbolditalic}{maletucnekurzivni}
+\setinterfacevariable{smallboldslanted}{maletucnesklonene}
+\setinterfacevariable{smallcaps}{kapitalky}
+\setinterfacevariable{smaller}{smaller}
+\setinterfacevariable{smallitalic}{malekurzivni}
+\setinterfacevariable{smallitalicbold}{malekurzivnitucne}
+\setinterfacevariable{smallnormal}{malenormalni}
+\setinterfacevariable{smallslanted}{malesklonene}
+\setinterfacevariable{smallslantedbold}{malesklonenetucne}
+\setinterfacevariable{smalltype}{maletype}
+\setinterfacevariable{somewhere}{nekde}
+\setinterfacevariable{sorted}{tridene}
+\setinterfacevariable{sorting}{sorting}
+\setinterfacevariable{space}{mezera}
+\setinterfacevariable{spacing}{mezerovani}
+\setinterfacevariable{speech}{speech}
+\setinterfacevariable{split}{split}
+\setinterfacevariable{spot}{spot}
+\setinterfacevariable{standard}{standardni}
+\setinterfacevariable{start}{start}
+\setinterfacevariable{starter}{starter}
+\setinterfacevariable{sticker}{sticker}
+\setinterfacevariable{stop}{stop}
+\setinterfacevariable{stopper}{predel}
+\setinterfacevariable{stretch}{natahnout}
+\setinterfacevariable{stretched}{stretched}
+\setinterfacevariable{strict}{striktni}
+\setinterfacevariable{strong}{strong}
+\setinterfacevariable{strut}{strut}
+\setinterfacevariable{sub}{pod}
+\setinterfacevariable{subbackward}{podzpet}
+\setinterfacevariable{subformula}{subrovnice}
+\setinterfacevariable{subforward}{podvpred}
+\setinterfacevariable{subject}{tema}
+\setinterfacevariable{subpage}{podstranka}
+\setinterfacevariable{subs}{subs}
+\setinterfacevariable{subsection}{podsekce}
+\setinterfacevariable{subsubject}{podtema}
+\setinterfacevariable{subsubsection}{podpodsekce}
+\setinterfacevariable{subsubsubject}{podpodtema}
+\setinterfacevariable{subsubsubsection}{podpodpodsekce}
+\setinterfacevariable{subsubsubsubject}{podpodpodtema}
+\setinterfacevariable{subsubsubsubsection}{podpodpodpodsekce}
+\setinterfacevariable{subsubsubsubsubject}{podpodpodpodtema}
+\setinterfacevariable{subsubsubsubsubsection}{podpodpodpodpodsekce}
+\setinterfacevariable{subsubsubsubsubsubject}{podpodpodpodpodtema}
+\setinterfacevariable{subsubsubsubsubsubsection}{podpodpodpodpodpodsekce}
+\setinterfacevariable{subsubsubsubsubsubsubject}{podpodpodpodpodpodtema}
+\setinterfacevariable{subsubsubsubsubsubsubsection}{podpodpodpodpodpodpodsekce}
+\setinterfacevariable{subsubsubsubsubsubsubsubject}{podpodpodpodpodpodpodtema}
+\setinterfacevariable{subsubsubsubsubsubsubsubsection}{podpodpodpodpodpodpodpodsekce}
+\setinterfacevariable{subsubsubsubsubsubsubsubsubject}{podpodpodpodpodpodpodpodtema}
+\setinterfacevariable{subsubsubsubsubsubsubsubsubsection}{podpodpodpodpodpodpodpodpodsekce}
+\setinterfacevariable{subsubsubsubsubsubsubsubsubsubject}{podpodpodpodpodpodpodpodpodtema}
+\setinterfacevariable{sunday}{nedele}
+\setinterfacevariable{support}{podpora}
+\setinterfacevariable{sym}{sym}
+\setinterfacevariable{symbol}{symbol}
+\setinterfacevariable{synchronize}{synchronize}
+\setinterfacevariable{synonym}{synonym}
+\setinterfacevariable{system}{system}
+\setinterfacevariable{table}{tabulka}
+\setinterfacevariable{tablehead}{zahlavitabulky}
+\setinterfacevariable{tables}{tabulky}
+\setinterfacevariable{tabletail}{konectabulky}
+\setinterfacevariable{tabulate}{tabelator}
+\setinterfacevariable{tabulatehead}{tabulatehead}
+\setinterfacevariable{tabulatetail}{tabulatetail}
+\setinterfacevariable{tall}{vysoko}
+\setinterfacevariable{teletype}{strojopis}
+\setinterfacevariable{temporary}{docasne}
+\setinterfacevariable{test}{test}
+\setinterfacevariable{text}{text}
+\setinterfacevariable{three}{tri}
+\setinterfacevariable{thursday}{ctvrtek}
+\setinterfacevariable{tight}{tight}
+\setinterfacevariable{title}{titul}
+\setinterfacevariable{toggle}{toggle}
+\setinterfacevariable{tolerant}{tolerantni}
+\setinterfacevariable{top}{vrsek}
+\setinterfacevariable{tuesday}{utery}
+\setinterfacevariable{two}{dve}
+\setinterfacevariable{txt}{txt}
+\setinterfacevariable{type}{opis}
+\setinterfacevariable{typing}{typing}
+\setinterfacevariable{unavailable}{nedostupne}
+\setinterfacevariable{underbar}{podtrzeno}
+\setinterfacevariable{underbars}{podtrzeni}
+\setinterfacevariable{understrike}{understrike}
+\setinterfacevariable{understrikes}{understrikes}
+\setinterfacevariable{unframed}{unframed}
+\setinterfacevariable{unit}{jednotka}
+\setinterfacevariable{units}{jednotky}
+\setinterfacevariable{unknown}{neznamy}
+\setinterfacevariable{unpacked}{rozbalene}
+\setinterfacevariable{up}{up}
+\setinterfacevariable{url}{url}
+\setinterfacevariable{used}{uzito}
+\setinterfacevariable{value}{hodnota}
+\setinterfacevariable{vertical}{vertikalne}
+\setinterfacevariable{very}{velmi}
+\setinterfacevariable{verystrict}{velmistriktni}
+\setinterfacevariable{verytolerant}{velmitolerantni}
+\setinterfacevariable{vfenced}{vfenced}
+\setinterfacevariable{vulgarfraction}{vulgarfraction}
+\setinterfacevariable{weak}{weak}
+\setinterfacevariable{wednesday}{streda}
+\setinterfacevariable{week}{tyden}
+\setinterfacevariable{weekday}{vsedniden}
+\setinterfacevariable{white}{bily}
+\setinterfacevariable{wide}{siroce}
+\setinterfacevariable{width}{sirka}
+\setinterfacevariable{word}{slovo}
+\setinterfacevariable{words}{words}
+\setinterfacevariable{xml}{xml}
+\setinterfacevariable{year}{rok}
+\setinterfacevariable{yes}{ano}
+% definitions for interface constants for language cs
+%
+\setinterfaceconstant{action}{akce}
+\setinterfaceconstant{address}{adresa}
+\setinterfaceconstant{after}{po}
+\setinterfaceconstant{afterhead}{pohlavicce}
+\setinterfaceconstant{afterkey}{klavesapo}
+\setinterfaceconstant{aftersection}{aftersection}
+\setinterfaceconstant{align}{zarovnani}
+\setinterfaceconstant{aligncharacter}{aligncharacter}
+\setinterfaceconstant{alignmentcharacter}{alignmentcharacter}
+\setinterfaceconstant{alignsymbol}{alignsymbol}
+\setinterfaceconstant{aligntitle}{zarovnejtitul}
+\setinterfaceconstant{alternative}{alternativa}
+\setinterfaceconstant{anchor}{anchor}
+\setinterfaceconstant{andtext}{andtext}
+\setinterfaceconstant{apa}{apa}
+\setinterfaceconstant{arguments}{arguments}
+\setinterfaceconstant{arrow}{sipka}
+\setinterfaceconstant{artauthor}{artauthor}
+\setinterfaceconstant{artauthoretaldisplay}{artauthoretaldisplay}
+\setinterfaceconstant{artauthoretallimit}{artauthoretallimit}
+\setinterfaceconstant{artauthoretaltext}{artauthoretaltext}
+\setinterfaceconstant{artoffset}{artoffset}
+\setinterfaceconstant{at}{u}
+\setinterfaceconstant{author}{autor}
+\setinterfaceconstant{authorconversion}{authorconversion}
+\setinterfaceconstant{authoretaldisplay}{authoretaldisplay}
+\setinterfaceconstant{authoretallimit}{authoretallimit}
+\setinterfaceconstant{authoretaltext}{authoretaltext}
+\setinterfaceconstant{auto}{auto}
+\setinterfaceconstant{autocase}{autocase}
+\setinterfaceconstant{autofile}{autofile}
+\setinterfaceconstant{autofocus}{autoostreni}
+\setinterfaceconstant{autohang}{autohang}
+\setinterfaceconstant{autostrut}{autostrut}
+\setinterfaceconstant{autowidth}{autosirka}
+\setinterfaceconstant{availableheight}{availableheight}
+\setinterfaceconstant{availablewidth}{availablewidth}
+\setinterfaceconstant{axis}{osa}
+\setinterfaceconstant{background}{pozadi}
+\setinterfaceconstant{backgroundcolor}{barvapozadi}
+\setinterfaceconstant{backgroundcorner}{rohpozadi}
+\setinterfaceconstant{backgrounddepth}{hloubkapozadi}
+\setinterfaceconstant{backgroundoffset}{offsetpozadi}
+\setinterfaceconstant{backgroundradius}{polomerpozadi}
+\setinterfaceconstant{backgroundscreen}{rastrpozadi}
+\setinterfaceconstant{backreference}{backreference}
+\setinterfaceconstant{backspace}{zpetnamezera}
+\setinterfaceconstant{balance}{rovnovaha}
+\setinterfaceconstant{before}{pred}
+\setinterfaceconstant{beforehead}{predhlavickou}
+\setinterfaceconstant{beforesection}{beforesection}
+\setinterfaceconstant{bet}{bet}
+\setinterfaceconstant{bidi}{bidi}
+\setinterfaceconstant{big}{velky}
+\setinterfaceconstant{blank}{prazdny}
+\setinterfaceconstant{bleedoffset}{bleedoffset}
+\setinterfaceconstant{blockway}{dobloku}
+\setinterfaceconstant{bodyfont}{zakladnifont}
+\setinterfaceconstant{boffset}{boffset}
+\setinterfaceconstant{boldfeatures}{boldfeatures}
+\setinterfaceconstant{boldfont}{boldfont}
+\setinterfaceconstant{bolditalicfeatures}{bolditalicfeatures}
+\setinterfaceconstant{bolditalicfont}{bolditalicfont}
+\setinterfaceconstant{boldslantedfeatures}{boldslantedfeatures}
+\setinterfaceconstant{boldslantedfont}{boldslantedfont}
+\setinterfaceconstant{bookmark}{zalozka}
+\setinterfaceconstant{bottom}{spodek}
+\setinterfaceconstant{bottomafter}{bottomafter}
+\setinterfaceconstant{bottombefore}{bottombefore}
+\setinterfaceconstant{bottomcommand}{bottomcommand}
+\setinterfaceconstant{bottomdistance}{vzdalenostspodku}
+\setinterfaceconstant{bottomframe}{ramecekdole}
+\setinterfaceconstant{bottomoffset}{offsetspodku}
+\setinterfaceconstant{bottomspace}{bottomspace}
+\setinterfaceconstant{bottomstate}{statusspodku}
+\setinterfaceconstant{buffer}{buffer}
+\setinterfaceconstant{cache}{cache}
+\setinterfaceconstant{calculate}{pocitat}
+\setinterfaceconstant{category}{category}
+\setinterfaceconstant{ccommand}{cprikaz}
+\setinterfaceconstant{character}{character}
+\setinterfaceconstant{characters}{characters}
+\setinterfaceconstant{check}{check}
+\setinterfaceconstant{click}{klik}
+\setinterfaceconstant{clickin}{klikuvnitr}
+\setinterfaceconstant{clickout}{klikvne}
+\setinterfaceconstant{clipoffset}{clipoffset}
+\setinterfaceconstant{closeaction}{zavriakci}
+\setinterfaceconstant{closecommand}{closecommand}
+\setinterfaceconstant{closepage}{closepage}
+\setinterfaceconstant{closepageaction}{akcezavrenistranky}
+\setinterfaceconstant{closesymbol}{closesymbol}
+\setinterfaceconstant{color}{barva}
+\setinterfaceconstant{column}{sloupec}
+\setinterfaceconstant{columndistance}{vzdalenostsloupcu}
+\setinterfaceconstant{columns}{sloupce}
+\setinterfaceconstant{comma}{comma}
+\setinterfaceconstant{command}{prikaz}
+\setinterfaceconstant{commandafter}{prikazpo}
+\setinterfaceconstant{commandbefore}{predchoziprikaz}
+\setinterfaceconstant{commands}{prikazy}
+\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}{pokracovat}
+\setinterfaceconstant{contrastcolor}{kontrastnibarva}
+\setinterfaceconstant{controls}{controls}
+\setinterfaceconstant{conversion}{konverze}
+\setinterfaceconstant{convertfile}{konverzesouboru}
+\setinterfaceconstant{copies}{copies}
+\setinterfaceconstant{corner}{roh}
+\setinterfaceconstant{coupling}{propojeni}
+\setinterfaceconstant{couplingway}{zpusobpropojeni}
+\setinterfaceconstant{criterium}{kriterium}
+\setinterfaceconstant{cropoffset}{cropoffset}
+\setinterfaceconstant{crossreference}{crossreference}
+\setinterfaceconstant{cssfile}{cssfile}
+\setinterfaceconstant{current}{aktualni}
+\setinterfaceconstant{cutspace}{cutspace}
+\setinterfaceconstant{dash}{pomlcka}
+\setinterfaceconstant{dat}{dat}
+\setinterfaceconstant{database}{database}
+\setinterfaceconstant{dataset}{dataset}
+\setinterfaceconstant{date}{datum}
+\setinterfaceconstant{deepnumbercommand}{deepnumbercommand}
+\setinterfaceconstant{deeptextcommand}{deeptextcommand}
+\setinterfaceconstant{default}{implicitni}
+\setinterfaceconstant{delay}{prodleva}
+\setinterfaceconstant{depth}{hloubka}
+\setinterfaceconstant{depthcorrection}{korekcehloubky}
+\setinterfaceconstant{direction}{smer}
+\setinterfaceconstant{directory}{adresar}
+\setinterfaceconstant{display}{obrazovka}
+\setinterfaceconstant{distance}{vzdalenost}
+\setinterfaceconstant{domain}{domain}
+\setinterfaceconstant{dot}{tecka}
+\setinterfaceconstant{doublesided}{oboustranne}
+\setinterfaceconstant{down}{down}
+\setinterfaceconstant{dummy}{dummy}
+\setinterfaceconstant{dx}{dx}
+\setinterfaceconstant{dy}{dy}
+\setinterfaceconstant{edge}{hrana}
+\setinterfaceconstant{edgedistance}{vzdalenosthrany}
+\setinterfaceconstant{editor}{editor}
+\setinterfaceconstant{editoretaldisplay}{editoretaldisplay}
+\setinterfaceconstant{editoretallimit}{editoretallimit}
+\setinterfaceconstant{editoretaltext}{editoretaltext}
+\setinterfaceconstant{empty}{prazdne}
+\setinterfaceconstant{entities}{entities}
+\setinterfaceconstant{entries}{entries}
+\setinterfaceconstant{equalheight}{equalheight}
+\setinterfaceconstant{equalwidth}{equalwidth}
+\setinterfaceconstant{escape}{escape}
+\setinterfaceconstant{etaldisplay}{etaldisplay}
+\setinterfaceconstant{etallimit}{etallimit}
+\setinterfaceconstant{etaloption}{etaloption}
+\setinterfaceconstant{etaltext}{etaltext}
+\setinterfaceconstant{evenmargin}{sudamarginalie}
+\setinterfaceconstant{exact}{exact}
+\setinterfaceconstant{exitoffset}{exitoffset}
+\setinterfaceconstant{expansion}{expanzen}
+\setinterfaceconstant{export}{export}
+\setinterfaceconstant{extras}{extras}
+\setinterfaceconstant{factor}{faktor}
+\setinterfaceconstant{fallback}{fallback}
+\setinterfaceconstant{family}{rodina}
+\setinterfaceconstant{features}{features}
+\setinterfaceconstant{fences}{fences}
+\setinterfaceconstant{field}{field}
+\setinterfaceconstant{fieldbackgroundcolor}{barvapozadipole}
+\setinterfaceconstant{fieldframecolor}{barvarameckupole}
+\setinterfaceconstant{fieldlayer}{fieldlayer}
+\setinterfaceconstant{fieldoffset}{offsetpole}
+\setinterfaceconstant{file}{soubor}
+\setinterfaceconstant{filler}{filler}
+\setinterfaceconstant{filtercommand}{filtercommand}
+\setinterfaceconstant{finalnamesep}{finalnamesep}
+\setinterfaceconstant{finalpagesep}{finalpagesep}
+\setinterfaceconstant{finalpubsep}{finalpubsep}
+\setinterfaceconstant{first}{prvni}
+\setinterfaceconstant{firstnamesep}{firstnamesep}
+\setinterfaceconstant{firstpage}{prvnistranka}
+\setinterfaceconstant{focus}{zaostreni}
+\setinterfaceconstant{focusin}{focusin}
+\setinterfaceconstant{focusoffset}{focusoffset}
+\setinterfaceconstant{focusout}{focusout}
+\setinterfaceconstant{footer}{upati}
+\setinterfaceconstant{footerdistance}{vzdalenostupati}
+\setinterfaceconstant{footerstate}{statusupati}
+\setinterfaceconstant{force}{sila}
+\setinterfaceconstant{foregroundcolor}{foregroundcolor}
+\setinterfaceconstant{foregroundstyle}{foregroundstyle}
+\setinterfaceconstant{format}{formatovat}
+\setinterfaceconstant{fractions}{fractions}
+\setinterfaceconstant{frame}{ramecek}
+\setinterfaceconstant{framecolor}{barvaramecku}
+\setinterfaceconstant{framecorner}{rohramecku}
+\setinterfaceconstant{framedepth}{hloubkaramecku}
+\setinterfaceconstant{frameoffset}{offsetramecku}
+\setinterfaceconstant{frameradius}{polomerramecku}
+\setinterfaceconstant{frames}{ramecky}
+\setinterfaceconstant{freeregion}{freeregion}
+\setinterfaceconstant{from}{z}
+\setinterfaceconstant{functioncolor}{functioncolor}
+\setinterfaceconstant{functionstyle}{functionstyle}
+\setinterfaceconstant{get}{ziskat}
+\setinterfaceconstant{global}{globalne}
+\setinterfaceconstant{goodies}{goodies}
+\setinterfaceconstant{grid}{mrizka}
+\setinterfaceconstant{group}{group}
+\setinterfaceconstant{groupsuffix}{groupsuffix}
+\setinterfaceconstant{hang}{zaveseni}
+\setinterfaceconstant{hcompact}{hcompact}
+\setinterfaceconstant{headalign}{headalign}
+\setinterfaceconstant{headcolor}{barvahlavicky}
+\setinterfaceconstant{headcommand}{headcommand}
+\setinterfaceconstant{headconversion}{konverzehlavicky}
+\setinterfaceconstant{header}{zahlavi}
+\setinterfaceconstant{headerdistance}{vzdalenostzahlavi}
+\setinterfaceconstant{headerstate}{statuszahlavi}
+\setinterfaceconstant{headlabel}{popisekhlavicky}
+\setinterfaceconstant{headnumber}{cislonadpisu}
+\setinterfaceconstant{headstyle}{stylhlavicky}
+\setinterfaceconstant{height}{vyska}
+\setinterfaceconstant{hfactor}{vfaktor}
+\setinterfaceconstant{hfil}{hfil}
+\setinterfaceconstant{hidenumber}{hidenumber}
+\setinterfaceconstant{hoffset}{hoffset}
+\setinterfaceconstant{horoffset}{horoffset}
+\setinterfaceconstant{hyphen}{hyphen}
+\setinterfaceconstant{hyphens}{hyphens}
+\setinterfaceconstant{icommand}{iprikaz}
+\setinterfaceconstant{ignore}{ignore}
+\setinterfaceconstant{in}{v}
+\setinterfaceconstant{inbetween}{mezi}
+\setinterfaceconstant{increment}{zvysit}
+\setinterfaceconstant{incrementnumber}{zvysujicicislo}
+\setinterfaceconstant{indenting}{odsazovani}
+\setinterfaceconstant{indentnext}{odsadpristi}
+\setinterfaceconstant{index}{index}
+\setinterfaceconstant{indicator}{indikator}
+\setinterfaceconstant{initialsep}{initialsep}
+\setinterfaceconstant{inner}{vnitrni}
+\setinterfaceconstant{innermargin}{innermargin}
+\setinterfaceconstant{inputfile}{inputfile}
+\setinterfaceconstant{insidesection}{insidesection}
+\setinterfaceconstant{instance}{instance}
+\setinterfaceconstant{intent}{intent}
+\setinterfaceconstant{interaction}{interakce}
+\setinterfaceconstant{interlinespace}{meziradkovamezera}
+\setinterfaceconstant{internalgrid}{internalgrid}
+\setinterfaceconstant{italicfeatures}{italicfeatures}
+\setinterfaceconstant{italicfont}{italicfont}
+\setinterfaceconstant{itemalign}{itemalign}
+\setinterfaceconstant{items}{polozky}
+\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}{popisek}
+\setinterfaceconstant{labeloffset}{labeloffset}
+\setinterfaceconstant{language}{language}
+\setinterfaceconstant{last}{last}
+\setinterfaceconstant{lastnamesep}{lastnamesep}
+\setinterfaceconstant{lastpage}{poslednistrana}
+\setinterfaceconstant{lastpagesep}{lastpagesep}
+\setinterfaceconstant{lastpubsep}{lastpubsep}
+\setinterfaceconstant{layout}{layout}
+\setinterfaceconstant{left}{vlevo}
+\setinterfaceconstant{leftcolor}{barvavlevo}
+\setinterfaceconstant{leftcompoundhyphen}{leftcompoundhyphen}
+\setinterfaceconstant{leftedge}{levahrana}
+\setinterfaceconstant{leftedgedistance}{vzdalenostlevehrany}
+\setinterfaceconstant{leftframe}{ramecekvlevo}
+\setinterfaceconstant{lefthyphen}{lefthyphen}
+\setinterfaceconstant{leftmargin}{levyokraj}
+\setinterfaceconstant{leftmargindistance}{vzdalenostlevehookraje}
+\setinterfaceconstant{leftoffset}{levyoffset}
+\setinterfaceconstant{leftquotation}{citacevlevo}
+\setinterfaceconstant{leftquote}{citovatvlevo}
+\setinterfaceconstant{leftsentence}{vetavlevo}
+\setinterfaceconstant{leftspeech}{leftspeech}
+\setinterfaceconstant{leftstyle}{stylvlevo}
+\setinterfaceconstant{leftsubsentence}{podvetavlevo}
+\setinterfaceconstant{lefttext}{textvlevo}
+\setinterfaceconstant{leftwidth}{sirkavlevo}
+\setinterfaceconstant{leftwords}{leftwords}
+\setinterfaceconstant{less}{less}
+\setinterfaceconstant{level}{uroven}
+\setinterfaceconstant{levels}{urovne}
+\setinterfaceconstant{limittext}{limittext}
+\setinterfaceconstant{line}{radek}
+\setinterfaceconstant{linecorrection}{korekceradku}
+\setinterfaceconstant{lines}{radky}
+\setinterfaceconstant{list}{seznam}
+\setinterfaceconstant{listtext}{listtext}
+\setinterfaceconstant{local}{lokalne}
+\setinterfaceconstant{location}{misto}
+\setinterfaceconstant{loffset}{loffset}
+\setinterfaceconstant{logo}{logo}
+\setinterfaceconstant{logos}{loga}
+\setinterfaceconstant{marcolor}{barvaznacky}
+\setinterfaceconstant{margin}{marginalie}
+\setinterfaceconstant{margindistance}{vzdalenostokraje}
+\setinterfaceconstant{marginedge}{textovahrana}
+\setinterfaceconstant{marginedgetext}{textmarginalnihookraje}
+\setinterfaceconstant{margintext}{textmarginalie}
+\setinterfaceconstant{mark}{mark}
+\setinterfaceconstant{marking}{znaceni}
+\setinterfaceconstant{marstyle}{stylsnacky}
+\setinterfaceconstant{mask}{mask}
+\setinterfaceconstant{mathclass}{mathclass}
+\setinterfaceconstant{mathlimits}{mathlimits}
+\setinterfaceconstant{mathstyle}{mathstyle}
+\setinterfaceconstant{max}{max}
+\setinterfaceconstant{maxdepth}{maxdepth}
+\setinterfaceconstant{maxheight}{maxvyska}
+\setinterfaceconstant{maxwidth}{maxsirka}
+\setinterfaceconstant{maybeyear}{maybeyear}
+\setinterfaceconstant{menu}{menu}
+\setinterfaceconstant{method}{metoda}
+\setinterfaceconstant{middle}{stredni}
+\setinterfaceconstant{middlecommand}{middlecommand}
+\setinterfaceconstant{middlespeech}{middlespeech}
+\setinterfaceconstant{middletext}{strednitext}
+\setinterfaceconstant{midsentence}{midsentence}
+\setinterfaceconstant{min}{min}
+\setinterfaceconstant{mindepth}{mindepth}
+\setinterfaceconstant{minheight}{minvyska}
+\setinterfaceconstant{minwidth}{minsirka}
+\setinterfaceconstant{moffset}{moffset}
+\setinterfaceconstant{monthconversion}{monthconversion}
+\setinterfaceconstant{more}{more}
+\setinterfaceconstant{mpdepth}{mpdepth}
+\setinterfaceconstant{mpheight}{mpheight}
+\setinterfaceconstant{mpoffset}{mpoffset}
+\setinterfaceconstant{mpwidth}{mpwidth}
+\setinterfaceconstant{n}{n}
+\setinterfaceconstant{name}{jmeno}
+\setinterfaceconstant{namesep}{namesep}
+\setinterfaceconstant{nbottom}{nspodek}
+\setinterfaceconstant{nc}{nc}
+\setinterfaceconstant{next}{dalsi}
+\setinterfaceconstant{nextleft}{nextleft}
+\setinterfaceconstant{nextleftquotation}{nextleftquotation}
+\setinterfaceconstant{nextright}{nextright}
+\setinterfaceconstant{nextrightquotation}{nextrightquotation}
+\setinterfaceconstant{nl}{nl}
+\setinterfaceconstant{nleft}{nvlevo}
+\setinterfaceconstant{nlines}{nradky}
+\setinterfaceconstant{norm}{norm}
+\setinterfaceconstant{note}{note}
+\setinterfaceconstant{nr}{nr}
+\setinterfaceconstant{nright}{nvpravo}
+\setinterfaceconstant{ntop}{nvrsek}
+\setinterfaceconstant{number}{cislo}
+\setinterfaceconstant{numberalign}{numberalign}
+\setinterfaceconstant{numbercolor}{barvacisla}
+\setinterfaceconstant{numbercommand}{ciselnyprikaz}
+\setinterfaceconstant{numberconversion}{numberconversion}
+\setinterfaceconstant{numberconversionset}{numberconversionset}
+\setinterfaceconstant{numberdistance}{numberdistance}
+\setinterfaceconstant{numbering}{cislovani}
+\setinterfaceconstant{numberorder}{numberorder}
+\setinterfaceconstant{numberprefix}{numberprefix}
+\setinterfaceconstant{numbersegments}{numbersegments}
+\setinterfaceconstant{numberseparator}{oddelovaccisla}
+\setinterfaceconstant{numberseparatorset}{numberseparatorset}
+\setinterfaceconstant{numberset}{numberset}
+\setinterfaceconstant{numberstarter}{numberstarter}
+\setinterfaceconstant{numberstopper}{numberstopper}
+\setinterfaceconstant{numberstyle}{stylcisla}
+\setinterfaceconstant{numberwidth}{numberwidth}
+\setinterfaceconstant{nx}{nx}
+\setinterfaceconstant{ny}{ny}
+\setinterfaceconstant{object}{objekt}
+\setinterfaceconstant{obstruction}{prekazka}
+\setinterfaceconstant{oddmargin}{lichyokraj}
+\setinterfaceconstant{offset}{offset}
+\setinterfaceconstant{openaction}{otevriakci}
+\setinterfaceconstant{openpage}{openpage}
+\setinterfaceconstant{openpageaction}{akceotevrenistranky}
+\setinterfaceconstant{openup}{openup}
+\setinterfaceconstant{opticalsize}{opticalsize}
+\setinterfaceconstant{option}{volba}
+\setinterfaceconstant{order}{order}
+\setinterfaceconstant{orientation}{orientation}
+\setinterfaceconstant{otherstext}{otherstext}
+\setinterfaceconstant{outermargin}{outermargin}
+\setinterfaceconstant{overprint}{overprint}
+\setinterfaceconstant{ownnumber}{vlastnicislo}
+\setinterfaceconstant{page}{stranka}
+\setinterfaceconstant{pageboundaries}{hranicestranky}
+\setinterfaceconstant{pagecolor}{barvastranky}
+\setinterfaceconstant{pagecolormodel}{pagecolormodel}
+\setinterfaceconstant{pagecommand}{strankovyprikaz}
+\setinterfaceconstant{pageconnector}{pageconnector}
+\setinterfaceconstant{pageconversion}{pageconversion}
+\setinterfaceconstant{pageconversionset}{pageconversionset}
+\setinterfaceconstant{pageleft}{pageleft}
+\setinterfaceconstant{pagenumber}{cislostranky}
+\setinterfaceconstant{pageprefix}{pageprefix}
+\setinterfaceconstant{pageprefixconnector}{pageprefixconnector}
+\setinterfaceconstant{pageprefixconversion}{pageprefixconversion}
+\setinterfaceconstant{pageprefixconversionset}{pageprefixconversionset}
+\setinterfaceconstant{pageprefixsegments}{pageprefixsegments}
+\setinterfaceconstant{pageprefixseparatorset}{pageprefixseparatorset}
+\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}
+\setinterfaceconstant{pagestate}{pagestate}
+\setinterfaceconstant{pagestopper}{pagestopper}
+\setinterfaceconstant{pagestyle}{stylstranky}
+\setinterfaceconstant{palet}{paleta}
+\setinterfaceconstant{paper}{papir}
+\setinterfaceconstant{paragraph}{odstavec}
+\setinterfaceconstant{period}{period}
+\setinterfaceconstant{place}{umistit}
+\setinterfaceconstant{placehead}{umistihlavicku}
+\setinterfaceconstant{placestopper}{predelmista}
+\setinterfaceconstant{position}{position}
+\setinterfaceconstant{prefix}{prefix}
+\setinterfaceconstant{prefixconnector}{prefixconnector}
+\setinterfaceconstant{prefixconversion}{prefixconversion}
+\setinterfaceconstant{prefixconversionset}{prefixconversionset}
+\setinterfaceconstant{prefixsegments}{prefixsegments}
+\setinterfaceconstant{prefixseparatorset}{prefixseparatorset}
+\setinterfaceconstant{prefixset}{prefixset}
+\setinterfaceconstant{prefixstarter}{prefixstarter}
+\setinterfaceconstant{prefixstopper}{prefixstopper}
+\setinterfaceconstant{preset}{prednastaveni}
+\setinterfaceconstant{preview}{nahled}
+\setinterfaceconstant{previous}{predchozi}
+\setinterfaceconstant{previousnumber}{predchozicislo}
+\setinterfaceconstant{printable}{tisknutelne}
+\setinterfaceconstant{process}{process}
+\setinterfaceconstant{profile}{profile}
+\setinterfaceconstant{properties}{properties}
+\setinterfaceconstant{pubsep}{pubsep}
+\setinterfaceconstant{quotechar}{quotechar}
+\setinterfaceconstant{radius}{polomer}
+\setinterfaceconstant{random}{nahodne}
+\setinterfaceconstant{range}{range}
+\setinterfaceconstant{reduction}{redukce}
+\setinterfaceconstant{ref}{ref}
+\setinterfaceconstant{refcommand}{refcommand}
+\setinterfaceconstant{reference}{odkaz}
+\setinterfaceconstant{referencemethod}{referencemethod}
+\setinterfaceconstant{referenceprefix}{referenceprefix}
+\setinterfaceconstant{referencing}{odkazujici}
+\setinterfaceconstant{region}{region}
+\setinterfaceconstant{regionin}{oblastuvnitr}
+\setinterfaceconstant{regionout}{oblastvne}
+\setinterfaceconstant{register}{register}
+\setinterfaceconstant{regularfeatures}{regularfeatures}
+\setinterfaceconstant{regularfont}{regularfont}
+\setinterfaceconstant{renderingsetup}{renderingsetup}
+\setinterfaceconstant{repeat}{opakovat}
+\setinterfaceconstant{reset}{reset}
+\setinterfaceconstant{resetnumber}{resetnumber}
+\setinterfaceconstant{resolution}{rozliseni}
+\setinterfaceconstant{resources}{resources}
+\setinterfaceconstant{reverse}{reverse}
+\setinterfaceconstant{right}{vpravo}
+\setinterfaceconstant{rightchars}{rightchars}
+\setinterfaceconstant{rightcolor}{barvavpravo}
+\setinterfaceconstant{rightcompoundhyphen}{rightcompoundhyphen}
+\setinterfaceconstant{rightedge}{pravahrana}
+\setinterfaceconstant{rightedgedistance}{vzdalenostpravehrany}
+\setinterfaceconstant{rightframe}{ramecekvpravo}
+\setinterfaceconstant{righthyphen}{righthyphen}
+\setinterfaceconstant{rightmargin}{pravyokraj}
+\setinterfaceconstant{rightmargindistance}{vzdalenostpravehookraje}
+\setinterfaceconstant{rightoffset}{pravyoffset}
+\setinterfaceconstant{rightquotation}{citacevpravo}
+\setinterfaceconstant{rightquote}{citovatvpravo}
+\setinterfaceconstant{rightsentence}{vetavpravo}
+\setinterfaceconstant{rightspeech}{rightspeech}
+\setinterfaceconstant{rightstyle}{stylvpravo}
+\setinterfaceconstant{rightsubsentence}{podvetavpravo}
+\setinterfaceconstant{righttext}{textvpravo}
+\setinterfaceconstant{rightwidth}{sirkavpravo}
+\setinterfaceconstant{rightwords}{rightwords}
+\setinterfaceconstant{roffset}{roffset}
+\setinterfaceconstant{rotation}{rotace}
+\setinterfaceconstant{rule}{linka}
+\setinterfaceconstant{rulecolor}{barvalinky}
+\setinterfaceconstant{rulecommand}{rulecommand}
+\setinterfaceconstant{rulethickness}{tloustkalinky}
+\setinterfaceconstant{samepage}{stejnastranka}
+\setinterfaceconstant{sample}{vzor}
+\setinterfaceconstant{samplesize}{samplesize}
+\setinterfaceconstant{saveinlist}{saveinlist}
+\setinterfaceconstant{scale}{meritko}
+\setinterfaceconstant{scope}{rozsah}
+\setinterfaceconstant{screen}{rastr}
+\setinterfaceconstant{section}{oddil}
+\setinterfaceconstant{sectionblock}{sectionblock}
+\setinterfaceconstant{sectionconversion}{sectionconversion}
+\setinterfaceconstant{sectionconversionset}{sectionconversionset}
+\setinterfaceconstant{sectionnumber}{cislooddilu}
+\setinterfaceconstant{sectionresetset}{sectionresetset}
+\setinterfaceconstant{sectionsegments}{sectionsegments}
+\setinterfaceconstant{sectionseparatorset}{sectionseparatorset}
+\setinterfaceconstant{sectionset}{sectionset}
+\setinterfaceconstant{sectionstarter}{sectionstarter}
+\setinterfaceconstant{sectionstopper}{sectionstopper}
+\setinterfaceconstant{separator}{oddelovac}
+\setinterfaceconstant{separatorcolor}{separatorcolor}
+\setinterfaceconstant{separatorstyle}{separatorstyle}
+\setinterfaceconstant{set}{set}
+\setinterfaceconstant{setups}{setups}
+\setinterfaceconstant{shrink}{shrink}
+\setinterfaceconstant{side}{pocitat}
+\setinterfaceconstant{sidealign}{sidealign}
+\setinterfaceconstant{sidemethod}{sidemethod}
+\setinterfaceconstant{sidespaceafter}{bocnimezeraza}
+\setinterfaceconstant{sidespacebefore}{bocnimezerapred}
+\setinterfaceconstant{sign}{znak}
+\setinterfaceconstant{size}{velikost}
+\setinterfaceconstant{slantedfeatures}{slantedfeatures}
+\setinterfaceconstant{slantedfont}{slantedfont}
+\setinterfaceconstant{small}{male}
+\setinterfaceconstant{smallcapsfeatures}{smallcapsfeatures}
+\setinterfaceconstant{smallcapsfont}{smallcapsfont}
+\setinterfaceconstant{solution}{solution}
+\setinterfaceconstant{sort}{sort}
+\setinterfaceconstant{sorttype}{sorttype}
+\setinterfaceconstant{source}{zdroj}
+\setinterfaceconstant{space}{mezera}
+\setinterfaceconstant{spaceafter}{mezeraza}
+\setinterfaceconstant{spacebefore}{mezerapred}
+\setinterfaceconstant{spaceinbetween}{spaceinbetween}
+\setinterfaceconstant{spacing}{mezerovani}
+\setinterfaceconstant{specification}{specification}
+\setinterfaceconstant{split}{split}
+\setinterfaceconstant{splitcolor}{splitcolor}
+\setinterfaceconstant{splitmethod}{splitmethod}
+\setinterfaceconstant{splitoffset}{splitoffset}
+\setinterfaceconstant{spot}{spot}
+\setinterfaceconstant{stack}{stack}
+\setinterfaceconstant{stackname}{stackname}
+\setinterfaceconstant{start}{start}
+\setinterfaceconstant{starter}{starter}
+\setinterfaceconstant{state}{status}
+\setinterfaceconstant{step}{krok}
+\setinterfaceconstant{stop}{stop}
+\setinterfaceconstant{stopper}{predel}
+\setinterfaceconstant{stretch}{natahnout}
+\setinterfaceconstant{strip}{strip}
+\setinterfaceconstant{strut}{strut}
+\setinterfaceconstant{style}{pismeno}
+\setinterfaceconstant{stylealternative}{stylealternative}
+\setinterfaceconstant{sub}{pod}
+\setinterfaceconstant{subtitle}{podtitulek}
+\setinterfaceconstant{suffix}{suffix}
+\setinterfaceconstant{suffixseparator}{suffixseparator}
+\setinterfaceconstant{suffixstopper}{suffixstopper}
+\setinterfaceconstant{surnamefirstnamesep}{surnamefirstnamesep}
+\setinterfaceconstant{surnameinitialsep}{surnameinitialsep}
+\setinterfaceconstant{surnamesep}{surnamesep}
+\setinterfaceconstant{svgstyle}{svgstyle}
+\setinterfaceconstant{sx}{sx}
+\setinterfaceconstant{sy}{sy}
+\setinterfaceconstant{symalign}{symzarovnani}
+\setinterfaceconstant{symbol}{symbol}
+\setinterfaceconstant{symbolcommand}{symbolcommand}
+\setinterfaceconstant{symbolset}{sadasymbolu}
+\setinterfaceconstant{symcolor}{barvasymbolu}
+\setinterfaceconstant{symstyle}{stylsymboly}
+\setinterfaceconstant{synonym}{synonymum}
+\setinterfaceconstant{synonymcolor}{barvasynonyma}
+\setinterfaceconstant{synonymcommand}{synonymcommand}
+\setinterfaceconstant{synonymstyle}{stylsynonyma}
+\setinterfaceconstant{tab}{tab}
+\setinterfaceconstant{text}{text}
+\setinterfaceconstant{textalign}{textalign}
+\setinterfaceconstant{textcolor}{barvatextu}
+\setinterfaceconstant{textcommand}{textovyprikaz}
+\setinterfaceconstant{textdistance}{textdistance}
+\setinterfaceconstant{textheight}{vyskatextu}
+\setinterfaceconstant{textlayer}{textlayer}
+\setinterfaceconstant{textmargin}{textmargin}
+\setinterfaceconstant{textmethod}{textmethod}
+\setinterfaceconstant{textseparator}{oddelovactextu}
+\setinterfaceconstant{textsize}{velikosttextu}
+\setinterfaceconstant{textstate}{statustextu}
+\setinterfaceconstant{textstyle}{styltextu}
+\setinterfaceconstant{textwidth}{sirkatextu}
+\setinterfaceconstant{threshold}{threshold}
+\setinterfaceconstant{title}{titul}
+\setinterfaceconstant{titlecolor}{barvatitulek}
+\setinterfaceconstant{titlecommand}{titlecommand}
+\setinterfaceconstant{titledistance}{vzdalenosttitulek}
+\setinterfaceconstant{titleleft}{titleleft}
+\setinterfaceconstant{titleright}{titleright}
+\setinterfaceconstant{titlestyle}{styltitulek}
+\setinterfaceconstant{to}{na}
+\setinterfaceconstant{toffset}{toffset}
+\setinterfaceconstant{tolerance}{tolerance}
+\setinterfaceconstant{top}{vrsek}
+\setinterfaceconstant{topcommand}{topcommand}
+\setinterfaceconstant{topdistance}{vzdalenostvrsku}
+\setinterfaceconstant{topframe}{rameceknahore}
+\setinterfaceconstant{topoffset}{offsetvrsku}
+\setinterfaceconstant{topspace}{svrchnimezera}
+\setinterfaceconstant{topstate}{statusvrsku}
+\setinterfaceconstant{totalnumber}{totalnumber}
+\setinterfaceconstant{transform}{transform}
+\setinterfaceconstant{translate}{translate}
+\setinterfaceconstant{trimoffset}{trimoffset}
+\setinterfaceconstant{type}{typ}
+\setinterfaceconstant{unit}{jednotka}
+\setinterfaceconstant{unknownreference}{neznamyodkaz}
+\setinterfaceconstant{up}{up}
+\setinterfaceconstant{urlalternative}{urlalternativa}
+\setinterfaceconstant{urlspace}{prostorurl}
+\setinterfaceconstant{validate}{validovat}
+\setinterfaceconstant{values}{values}
+\setinterfaceconstant{vcommand}{vprikaz}
+\setinterfaceconstant{vcompact}{vcompact}
+\setinterfaceconstant{vector}{vector}
+\setinterfaceconstant{veroffset}{offsethlavicky}
+\setinterfaceconstant{vfil}{vfil}
+\setinterfaceconstant{viewerprefix}{viewerprefix}
+\setinterfaceconstant{voffset}{voffset}
+\setinterfaceconstant{vonsep}{vonsep}
+\setinterfaceconstant{way}{zpusob}
+\setinterfaceconstant{wfactor}{sfaktor}
+\setinterfaceconstant{white}{bily}
+\setinterfaceconstant{width}{sirka}
+\setinterfaceconstant{words}{words}
+\setinterfaceconstant{xfactor}{xfaktor}
+\setinterfaceconstant{xhtml}{xhtml}
+\setinterfaceconstant{xmax}{xmax}
+\setinterfaceconstant{xmlsetup}{xmlsetup}
+\setinterfaceconstant{xoffset}{xoffset}
+\setinterfaceconstant{xscale}{xmeritko}
+\setinterfaceconstant{xstep}{xkrok}
+\setinterfaceconstant{yfactor}{yfaktor}
+\setinterfaceconstant{ymax}{ymax}
+\setinterfaceconstant{yoffset}{yoffset}
+\setinterfaceconstant{yscale}{ymeritko}
+\setinterfaceconstant{ystep}{ykrok}
+% definitions for interface elements for language cs
+%
+\setinterfaceelement{answerlines}{answerlines}
+\setinterfaceelement{answerspace}{answerspace}
+\setinterfaceelement{begin}{zacatek}
+\setinterfaceelement{complete}{uplny}
+\setinterfaceelement{coupled}{propojene}
+\setinterfaceelement{currentlocal}{aktualnelokalni}
+\setinterfaceelement{end}{konec}
+\setinterfaceelement{endsetup}{}
+\setinterfaceelement{get}{ziskat}
+\setinterfaceelement{increment}{zvysit}
+\setinterfaceelement{list}{seznam}
+\setinterfaceelement{listof}{seznam}
+\setinterfaceelement{load}{nacist}
+\setinterfaceelement{local}{lokalne}
+\setinterfaceelement{makeup}{zlom}
+\setinterfaceelement{next}{dalsi}
+\setinterfaceelement{place}{umisti}
+\setinterfaceelement{previous}{predchozi}
+\setinterfaceelement{previouslocal}{predchozilokalni}
+\setinterfaceelement{reserve}{rezervovat}
+\setinterfaceelement{see}{viz}
+\setinterfaceelement{setup}{nastaveni}
+\setinterfaceelement{start}{start}
+\setinterfaceelement{stop}{stop}
+\setinterfaceelement{text}{text}
+\setinterfaceelement{type}{opis}
+% definitions for interface commands for language cs
+%
+\setinterfacecommand{CAPPED}{KAP}
+\setinterfacecommand{Character}{Znak}
+\setinterfacecommand{Characters}{Znaky}
+\setinterfacecommand{MONTH}{MESIC}
+\setinterfacecommand{Numbers}{Cisla}
+\setinterfacecommand{Romannumerals}{Rimskecislice}
+\setinterfacecommand{SmallCapped}{Kap}
+\setinterfacecommand{SmallCaps}{Kaps}
+\setinterfacecommand{WEEKDAY}{VSEDNIDEN}
+\setinterfacecommand{WORD}{SLOVO}
+\setinterfacecommand{WORDS}{SLOVA}
+\setinterfacecommand{Word}{Slovo}
+\setinterfacecommand{Words}{Slova}
+\setinterfacecommand{about}{oref}
+\setinterfacecommand{adaptlayout}{prizpusobvzhled}
+\setinterfacecommand{alignment}{alignment}
+\setinterfacecommand{arg}{arg}
+\setinterfacecommand{at}{pref}
+\setinterfacecommand{atleftmargin}{atleftmargin}
+\setinterfacecommand{atpage}{nastrane}
+\setinterfacecommand{atrightmargin}{atrightmargin}
+\setinterfacecommand{background}{pozadi}
+\setinterfacecommand{backspace}{odsazenizleva}
+\setinterfacecommand{blackrule}{cernalinka}
+\setinterfacecommand{blackrules}{cernelinky}
+\setinterfacecommand{blank}{preskoc}
+\setinterfacecommand{bookmark}{zalozka}
+\setinterfacecommand{bottomdistance}{vzdalenostspodku}
+\setinterfacecommand{bottomheight}{vyskaspodku}
+\setinterfacecommand{bottomspace}{bottomspace}
+\setinterfacecommand{but}{spodek}
+\setinterfacecommand{button}{tlacitko}
+\setinterfacecommand{bypassblocks}{bypassblocks}
+\setinterfacecommand{character}{znak}
+\setinterfacecommand{characters}{znaky}
+\setinterfacecommand{chem}{chem}
+\setinterfacecommand{clip}{orez}
+\setinterfacecommand{clonefield}{klonujpole}
+\setinterfacecommand{color}{barva}
+\setinterfacecommand{colorbar}{barevnalista}
+\setinterfacecommand{colorvalue}{hodnotabarvy}
+\setinterfacecommand{column}{sloupec}
+\setinterfacecommand{comparecolorgroup}{porovnejskupinubarev}
+\setinterfacecommand{comparepalet}{porovnejpaletu}
+\setinterfacecommand{completepagenumber}{completepagenumber}
+\setinterfacecommand{completeregister}{completeregister}
+\setinterfacecommand{component}{komponenta}
+\setinterfacecommand{convertnumber}{konvertujcislo}
+\setinterfacecommand{copyfield}{kopirujpole}
+\setinterfacecommand{correctwhitespace}{korekcebilehomista}
+\setinterfacecommand{coupledocument}{propojenydokument}
+\setinterfacecommand{couplemarking}{propojeneznaceni}
+\setinterfacecommand{couplepage}{parovastrana}
+\setinterfacecommand{couplepaper}{dvoustrannypapir}
+\setinterfacecommand{coupleregister}{propojenyrejstrik}
+\setinterfacecommand{crlf}{crlf}
+\setinterfacecommand{currentdate}{aktualnidatum}
+\setinterfacecommand{currentheadnumber}{aktualnicislonadpisu}
+\setinterfacecommand{cutspace}{cutspace}
+\setinterfacecommand{date}{datum}
+\setinterfacecommand{decouplemarking}{rozpojeneznaceni}
+\setinterfacecommand{decrementnumber}{decrementnumber}
+\setinterfacecommand{define}{definuj}
+\setinterfacecommand{defineaccent}{definujakcent}
+\setinterfacecommand{defineblank}{definujpreskok}
+\setinterfacecommand{defineblock}{definujblok}
+\setinterfacecommand{definebodyfont}{definujzakladnifont}
+\setinterfacecommand{definebodyfontenvironment}{definujprostredizakladnihofontu}
+\setinterfacecommand{definebuffer}{definujbuffer}
+\setinterfacecommand{definecharacter}{definujznak}
+\setinterfacecommand{definecolor}{definujbarvu}
+\setinterfacecommand{definecolorgroup}{definujskupinubarev}
+\setinterfacecommand{definecolumnbreak}{definecolumnbreak}
+\setinterfacecommand{definecolumnset}{definecolumnset}
+\setinterfacecommand{definecombination}{definecombination}
+\setinterfacecommand{definecombinedlist}{definujkombinovanyseznam}
+\setinterfacecommand{definecommand}{definujprikaz}
+\setinterfacecommand{defineconversion}{definujkonverzi}
+\setinterfacecommand{definedescription}{definujpopis}
+\setinterfacecommand{defineenumeration}{definujvycet}
+\setinterfacecommand{definefield}{definujpole}
+\setinterfacecommand{definefieldstack}{definujzasobnikpoli}
+\setinterfacecommand{definefiguresymbol}{definujobrazeksymbol}
+\setinterfacecommand{definefloat}{definujplvouciobjekt}
+\setinterfacecommand{definefont}{definujfont}
+\setinterfacecommand{definefontstyle}{definujstylfontu}
+\setinterfacecommand{definefontsynonym}{definujsynonumumfontu}
+\setinterfacecommand{defineframed}{definujoramovani}
+\setinterfacecommand{defineframedtext}{definujoramovanytext}
+\setinterfacecommand{definehbox}{definujhbox}
+\setinterfacecommand{definehead}{definujnadpis}
+\setinterfacecommand{defineindentedtext}{defineindentedtext}
+\setinterfacecommand{defineinmargin}{defineinmargin}
+\setinterfacecommand{defineinteractionmenu}{definujinterakcnimenu}
+\setinterfacecommand{defineitemgroup}{defineitemgroup}
+\setinterfacecommand{definelabel}{definujpopisek}
+\setinterfacecommand{definelayer}{definelayer}
+\setinterfacecommand{definelayout}{definelayout}
+\setinterfacecommand{definelist}{definujseznam}
+\setinterfacecommand{definelogo}{definujlogo}
+\setinterfacecommand{definemainfield}{definujhlavnipole}
+\setinterfacecommand{definemakeup}{definujupravu}
+\setinterfacecommand{definemarking}{definujznaceni}
+\setinterfacecommand{definemathalignment}{definemathalignment}
+\setinterfacecommand{defineoutput}{definujvystup}
+\setinterfacecommand{defineoverlay}{definujprekryv}
+\setinterfacecommand{definepagebreak}{definepagebreak}
+\setinterfacecommand{definepalet}{definujpaletu}
+\setinterfacecommand{definepapersize}{definujvelikostpapiru}
+\setinterfacecommand{defineparagraphs}{definujodstavce}
+\setinterfacecommand{defineplacement}{defineplacement}
+\setinterfacecommand{defineprofile}{definujprofil}
+\setinterfacecommand{defineprogram}{definujprogram}
+\setinterfacecommand{definerawfont}{definerawfont}
+\setinterfacecommand{definereference}{definujodkaz}
+\setinterfacecommand{definereferenceformat}{definujformatodkazu}
+\setinterfacecommand{definereferencelist}{definujseznamodkazu}
+\setinterfacecommand{defineregister}{definujrejstrik}
+\setinterfacecommand{definerule}{definerule}
+\setinterfacecommand{definesection}{definujsekci}
+\setinterfacecommand{definesectionblock}{definujbloksekce}
+\setinterfacecommand{definesorting}{definujtrideni}
+\setinterfacecommand{definestartstop}{definujstartstop}
+\setinterfacecommand{definestyle}{definujstyl}
+\setinterfacecommand{definesubfield}{definujpodpole}
+\setinterfacecommand{definesymbol}{definujsymbol}
+\setinterfacecommand{definesynonyms}{definujsynonyma}
+\setinterfacecommand{definetabletemplate}{definujsablonutabulky}
+\setinterfacecommand{definetabulate}{definujtabelaci}
+\setinterfacecommand{definetext}{definujtext}
+\setinterfacecommand{definetextbackground}{definetextbackground}
+\setinterfacecommand{definetextposition}{definetextposition}
+\setinterfacecommand{definetextvariable}{definetextvariable}
+\setinterfacecommand{definetype}{definetype}
+\setinterfacecommand{definetyping}{definujopis}
+\setinterfacecommand{defineversion}{definujverzi}
+\setinterfacecommand{determineheadnumber}{stanovcislonadpisu}
+\setinterfacecommand{determinelistcharacteristics}{stanovcharakteristickuseznamu}
+\setinterfacecommand{determineregistercharacteristics}{urcicharakteristikurejstriku}
+\setinterfacecommand{dimension}{rozmer}
+\setinterfacecommand{disableinteractionmenu}{zablokujinterakcnimenu}
+\setinterfacecommand{domicile}{bydliste}
+\setinterfacecommand{donttest}{zadnytest}
+\setinterfacecommand{edgedistance}{vzdalenostokraje}
+\setinterfacecommand{edgewidth}{sirkaokraje}
+\setinterfacecommand{emptylines}{emptylines}
+\setinterfacecommand{environment}{prostredi}
+\setinterfacecommand{externalfigure}{externiobraz}
+\setinterfacecommand{fact}{fakt}
+\setinterfacecommand{field}{pole}
+\setinterfacecommand{fieldstack}{zasobnikpoli}
+\setinterfacecommand{fillinfield}{vyplnovepole}
+\setinterfacecommand{fillinline}{vyplnovyradek}
+\setinterfacecommand{fillinrules}{vyplnovelinky}
+\setinterfacecommand{fillintext}{vyplnenytext}
+\setinterfacecommand{fitfield}{prizpusobivepole}
+\setinterfacecommand{fixedspace}{tvrdamezera}
+\setinterfacecommand{fixedspaces}{tvrdemezery}
+\setinterfacecommand{followprofile}{dodrzujprofil}
+\setinterfacecommand{followprofileversion}{dodrzujverziprofilu}
+\setinterfacecommand{followversion}{dodrzujverzi}
+\setinterfacecommand{footerdistance}{vzdalenostupati}
+\setinterfacecommand{footerheight}{vyskaupati}
+\setinterfacecommand{footnote}{poznamkapodcarou}
+\setinterfacecommand{footnotetext}{footnotetext}
+\setinterfacecommand{forceblocks}{forceblocks}
+\setinterfacecommand{formulanumber}{cislorovnice}
+\setinterfacecommand{fraction}{zlomek}
+\setinterfacecommand{framed}{oramovani}
+\setinterfacecommand{from}{zref}
+\setinterfacecommand{getbuffer}{ziskejbuffer}
+\setinterfacecommand{getmarking}{ziskejznaceni}
+\setinterfacecommand{getnumber}{getnumber}
+\setinterfacecommand{godown}{jdidolu}
+\setinterfacecommand{goto}{jdina}
+\setinterfacecommand{gotobox}{jdinabox}
+\setinterfacecommand{gotopage}{jdinastranu}
+\setinterfacecommand{graycolor}{sedabarva}
+\setinterfacecommand{greyvalue}{hodnotasedi}
+\setinterfacecommand{grid}{mrizka}
+\setinterfacecommand{hairline}{vlasovalinka}
+\setinterfacecommand{head}{nadpis}
+\setinterfacecommand{headerdistance}{vzdalenostzahlavi}
+\setinterfacecommand{headerheight}{vyskazahlavi}
+\setinterfacecommand{headlevel}{hlavniuroven}
+\setinterfacecommand{headnumber}{cislonadpisu}
+\setinterfacecommand{headsym}{headsym}
+\setinterfacecommand{headtext}{texthlavicky}
+\setinterfacecommand{hideblocks}{schovejbloky}
+\setinterfacecommand{high}{vysoky}
+\setinterfacecommand{hl}{hl}
+\setinterfacecommand{immediatebetweenlist}{immediatebetweenlist}
+\setinterfacecommand{immediatetolist}{immediatetolist}
+\setinterfacecommand{in}{tref}
+\setinterfacecommand{incrementnumber}{zvysujicicislo}
+\setinterfacecommand{indenting}{odsazovani}
+\setinterfacecommand{inframed}{zaramovani}
+\setinterfacecommand{infull}{plnezneni}
+\setinterfacecommand{ininner}{ininner}
+\setinterfacecommand{inleft}{vlevo}
+\setinterfacecommand{inleftedge}{nalevo}
+\setinterfacecommand{inleftmargin}{nalevyokraj}
+\setinterfacecommand{inline}{vradku}
+\setinterfacecommand{inmargin}{naokraj}
+\setinterfacecommand{inmframed}{mazaramovani}
+\setinterfacecommand{inneredgedistance}{inneredgedistance}
+\setinterfacecommand{inneredgewidth}{inneredgewidth}
+\setinterfacecommand{innermargindistance}{innermargindistance}
+\setinterfacecommand{innermarginwidth}{innermarginwidth}
+\setinterfacecommand{inothermargin}{nadruhyokraj}
+\setinterfacecommand{inouter}{inouter}
+\setinterfacecommand{inright}{vpravo}
+\setinterfacecommand{inrightedge}{napravo}
+\setinterfacecommand{inrightmargin}{napravyokraj}
+\setinterfacecommand{installlanguage}{instalacejazyka}
+\setinterfacecommand{interactionbar}{interakcnilista}
+\setinterfacecommand{interactionbuttons}{interakcnitlacitka}
+\setinterfacecommand{interactionmenu}{interaktivnimenu}
+\setinterfacecommand{item}{polozka}
+\setinterfacecommand{items}{polozky}
+\setinterfacecommand{its}{pol}
+\setinterfacecommand{keepblocks}{zachovejbloky}
+\setinterfacecommand{label}{poppisek}
+\setinterfacecommand{labels}{popisky}
+\setinterfacecommand{labeltext}{textpopisku}
+\setinterfacecommand{language}{jazyk}
+\setinterfacecommand{leftaligned}{zarovnanovlevo}
+\setinterfacecommand{leftedgedistance}{vzdalenostlevehookraje}
+\setinterfacecommand{leftedgewidth}{sirkalevehookraje}
+\setinterfacecommand{leftmargindistance}{vzdalenostlevemarginalie}
+\setinterfacecommand{leftmarginwidth}{sirkalevemarginalie}
+\setinterfacecommand{leg}{leg}
+\setinterfacecommand{linecorrection}{linecorrection}
+\setinterfacecommand{linewidth}{tloustkacary}
+\setinterfacecommand{listheight}{vyskaseznamu}
+\setinterfacecommand{listlength}{delkaseznamu}
+\setinterfacecommand{listsymbol}{listsymbol}
+\setinterfacecommand{listwidth}{sirkaseznamu}
+\setinterfacecommand{localfootnotes}{localfootnotes}
+\setinterfacecommand{logfields}{zaznamovepole}
+\setinterfacecommand{lohi}{nivy}
+\setinterfacecommand{low}{nizky}
+\setinterfacecommand{macroname}{jmeno}
+\setinterfacecommand{mainlanguage}{hlavnijazyk}
+\setinterfacecommand{makeupheight}{vyskasazby}
+\setinterfacecommand{makeupwidth}{sirkasazby}
+\setinterfacecommand{mar}{okr}
+\setinterfacecommand{marginblock}{marginblock}
+\setinterfacecommand{margindistance}{vzdalenostmarginalie}
+\setinterfacecommand{marginrule}{marginalnilinka}
+\setinterfacecommand{margintext}{marginalnitext}
+\setinterfacecommand{margintitle}{marginalninadpis}
+\setinterfacecommand{marginwidth}{sirkamarginalie}
+\setinterfacecommand{marginword}{marginalnislovo}
+\setinterfacecommand{marking}{znaceni}
+\setinterfacecommand{markversion}{oznacverzi}
+\setinterfacecommand{mathematics}{matematika}
+\setinterfacecommand{menubutton}{tlacitkomenu}
+\setinterfacecommand{mframed}{maoramovani}
+\setinterfacecommand{midaligned}{zarovnanonastred}
+\setinterfacecommand{mirror}{zrcadlit}
+\setinterfacecommand{month}{mesic}
+\setinterfacecommand{moveformula}{moveformula}
+\setinterfacecommand{moveongrid}{premistinamrizku}
+\setinterfacecommand{movesidefloat}{movesidefloat}
+\setinterfacecommand{navigating}{navigating}
+\setinterfacecommand{nodimension}{zadnyrozmer}
+\setinterfacecommand{noheaderandfooterlines}{zadnezahlaviaupati}
+\setinterfacecommand{noindenting}{zadneodsazovani}
+\setinterfacecommand{nolist}{zadnyseznam}
+\setinterfacecommand{nomarking}{zadneznaceni}
+\setinterfacecommand{nomoreblocks}{zadnedalsibloky}
+\setinterfacecommand{nomorefiles}{zadnedalsisoubory}
+\setinterfacecommand{nop}{nop}
+\setinterfacecommand{nospace}{zadnamezera}
+\setinterfacecommand{note}{poznamka}
+\setinterfacecommand{notopandbottomlines}{zadnehorniadolniradky}
+\setinterfacecommand{notsmallcapped}{nokap}
+\setinterfacecommand{nowhitespace}{zadnebilemisto}
+\setinterfacecommand{numberofsubpages}{numberofsubpages}
+\setinterfacecommand{numbers}{cisla}
+\setinterfacecommand{outeredgedistance}{outeredgedistance}
+\setinterfacecommand{outeredgewidth}{outeredgewidth}
+\setinterfacecommand{outermargindistance}{outermargindistance}
+\setinterfacecommand{outermarginwidth}{outermarginwidth}
+\setinterfacecommand{packed}{zhustene}
+\setinterfacecommand{page}{strana}
+\setinterfacecommand{pagedepth}{pagedepth}
+\setinterfacecommand{pagenumber}{cislostrany}
+\setinterfacecommand{pageoffset}{pageoffset}
+\setinterfacecommand{pagereference}{odkaznastranu}
+\setinterfacecommand{paperheight}{vyskapapiru}
+\setinterfacecommand{paperwidth}{sirkapapiru}
+\setinterfacecommand{periods}{tecky}
+\setinterfacecommand{placebookmarks}{umistizalozky}
+\setinterfacecommand{placecombinedlist}{umistikombinovanyseznam}
+\setinterfacecommand{placefloat}{placefloat}
+\setinterfacecommand{placefootnotes}{umistipoznamkypodcarou}
+\setinterfacecommand{placeformula}{umistirovnici}
+\setinterfacecommand{placeheadnumber}{placeheadnumber}
+\setinterfacecommand{placeheadtext}{placeheadtext}
+\setinterfacecommand{placelegend}{umistilegendu}
+\setinterfacecommand{placelist}{umistiseznam}
+\setinterfacecommand{placelistofsynonyms}{placelistofsynonyms}
+\setinterfacecommand{placelocalfootnotes}{umistilokalnipoznamkypodcarou}
+\setinterfacecommand{placelogos}{umistiloga}
+\setinterfacecommand{placeongrid}{umistinamrizku}
+\setinterfacecommand{placeontopofeachother}{umistinadsebe}
+\setinterfacecommand{placepagenumber}{placepagenumber}
+\setinterfacecommand{placerawlist}{placerawlist}
+\setinterfacecommand{placereferencelist}{placereferencelist}
+\setinterfacecommand{placeregister}{umistirejstrik}
+\setinterfacecommand{placerule}{placerule}
+\setinterfacecommand{placesidebyside}{umistivedlesebe}
+\setinterfacecommand{placesubformula}{umistipodrovnici}
+\setinterfacecommand{placetextvariable}{placetextvariable}
+\setinterfacecommand{position}{pozice}
+\setinterfacecommand{positiontext}{positiontext}
+\setinterfacecommand{printpaperheight}{vyskatiskpapiru}
+\setinterfacecommand{printpaperwidth}{sirkatiskpapiru}
+\setinterfacecommand{processblocks}{zpracujbloky}
+\setinterfacecommand{processpage}{zpracujstranu}
+\setinterfacecommand{product}{produkt}
+\setinterfacecommand{program}{program}
+\setinterfacecommand{project}{projekt}
+\setinterfacecommand{publication}{publikace}
+\setinterfacecommand{quotation}{citace}
+\setinterfacecommand{quote}{citovat}
+\setinterfacecommand{ran}{ran}
+\setinterfacecommand{redo}{opakovat}
+\setinterfacecommand{ref}{ref}
+\setinterfacecommand{reference}{odkaz}
+\setinterfacecommand{referral}{odkaz}
+\setinterfacecommand{referraldate}{odkaznadatum}
+\setinterfacecommand{referring}{odkazujici}
+\setinterfacecommand{remark}{oznaceni}
+\setinterfacecommand{reset}{reset}
+\setinterfacecommand{resetmarking}{resetznaceni}
+\setinterfacecommand{resetnumber}{resetnumber}
+\setinterfacecommand{resettext}{resettextcontent}
+\setinterfacecommand{rightaligned}{zarovnanovpravo}
+\setinterfacecommand{rightedgedistance}{vzdalenostpravehookraje}
+\setinterfacecommand{rightedgewidth}{sirkapravehookraje}
+\setinterfacecommand{rightmargindistance}{vzdalenostpravemarginalie}
+\setinterfacecommand{rightmarginwidth}{sirkapravemarginalie}
+\setinterfacecommand{romannumerals}{rimskecislice}
+\setinterfacecommand{rotate}{otocit}
+\setinterfacecommand{savebuffer}{savebuffer}
+\setinterfacecommand{scale}{meritko}
+\setinterfacecommand{screen}{obrazovka}
+\setinterfacecommand{selectblocks}{vyberbloky}
+\setinterfacecommand{selectpaper}{vyberpapir}
+\setinterfacecommand{selectversion}{vyberverzi}
+\setinterfacecommand{setnumber}{setnumber}
+\setinterfacecommand{settextcontent}{settextcontent}
+\setinterfacecommand{settextvariable}{settextvariable}
+\setinterfacecommand{setupalign}{nastavzarovnani}
+\setinterfacecommand{setupanswerarea}{setupanswerarea}
+\setinterfacecommand{setuparranging}{nastavusporadani}
+\setinterfacecommand{setupbackground}{nastavpozadi}
+\setinterfacecommand{setupbackgrounds}{nastavpozadi}
+\setinterfacecommand{setupblackrules}{nastavcernelinky}
+\setinterfacecommand{setupblank}{nastavpreskok}
+\setinterfacecommand{setupblock}{nastavblok}
+\setinterfacecommand{setupbodyfont}{nastavzakladnifont}
+\setinterfacecommand{setupbodyfontenvironment}{nastavprostredizakladnihofontu}
+\setinterfacecommand{setupbottom}{nastavspodek}
+\setinterfacecommand{setupbottomtexts}{nastavdolnitexty}
+\setinterfacecommand{setupbuffer}{nastavbuffer}
+\setinterfacecommand{setupbuttons}{nastavtlacitka}
+\setinterfacecommand{setupcapitals}{nastavkapitalky}
+\setinterfacecommand{setupcaption}{nastavpopisek}
+\setinterfacecommand{setupcaptions}{nastavpopisky}
+\setinterfacecommand{setupclipping}{nastavorez}
+\setinterfacecommand{setupcolor}{nastavbarvu}
+\setinterfacecommand{setupcolors}{nastavbarvy}
+\setinterfacecommand{setupcolumns}{nastavsloupce}
+\setinterfacecommand{setupcolumnset}{setupcolumnset}
+\setinterfacecommand{setupcolumnsetlines}{setupcolumnsetlines}
+\setinterfacecommand{setupcolumnsetstart}{setupcolumnsetstart}
+\setinterfacecommand{setupcombinations}{nastavspojeni}
+\setinterfacecommand{setupcombinedlist}{nastavkombinovanyseznam}
+\setinterfacecommand{setupcomment}{nastavkomentar}
+\setinterfacecommand{setupdescription}{setupdescription}
+\setinterfacecommand{setupdescriptions}{nastavpopisy}
+\setinterfacecommand{setupenumeration}{setupenumeration}
+\setinterfacecommand{setupenumerations}{nastavvycty}
+\setinterfacecommand{setupexternalfigures}{nastavexterniobrazy}
+\setinterfacecommand{setupfield}{nastavpole}
+\setinterfacecommand{setupfields}{nastavvsechnapole}
+\setinterfacecommand{setupfillinlines}{nastavvyplnoveradky}
+\setinterfacecommand{setupfillinrules}{nastavvyplnovelinky}
+\setinterfacecommand{setupfloat}{nastavplvouciobjekt}
+\setinterfacecommand{setupfloats}{nastavplvouciobjekty}
+\setinterfacecommand{setupfloatsplitting}{nastavdeleniplvoucichobjektu}
+\setinterfacecommand{setupfooter}{nastavupati}
+\setinterfacecommand{setupfootertexts}{nastavtextyupati}
+\setinterfacecommand{setupfootnotedefinition}{nastavdefinicipoznamekpodcarou}
+\setinterfacecommand{setupfootnotes}{nastavpoznamkypodcarou}
+\setinterfacecommand{setupforms}{setupforms}
+\setinterfacecommand{setupformula}{setupformula}
+\setinterfacecommand{setupformulas}{nastavrovnice}
+\setinterfacecommand{setupframed}{nastavoramovani}
+\setinterfacecommand{setupframedtext}{setupframedtext}
+\setinterfacecommand{setupframedtexts}{nastavoramovanetexty}
+\setinterfacecommand{setuphead}{nastavnadpis}
+\setinterfacecommand{setupheader}{nastavzahlavi}
+\setinterfacecommand{setupheadertexts}{nastavtextyzahlavi}
+\setinterfacecommand{setupheadnumber}{nastavcislonadpisu}
+\setinterfacecommand{setupheads}{nastavnadpisy}
+\setinterfacecommand{setupheadtext}{nastavtexthlavicky}
+\setinterfacecommand{setuphyphenmark}{nastavdelitko}
+\setinterfacecommand{setupindentedtext}{setupindentedtext}
+\setinterfacecommand{setupindenting}{nastavodsazovani}
+\setinterfacecommand{setupinmargin}{nastavmarginalie}
+\setinterfacecommand{setupinteraction}{nastavinterakci}
+\setinterfacecommand{setupinteractionbar}{nastavinterakcnilistu}
+\setinterfacecommand{setupinteractionmenu}{nastavinterakcnimenu}
+\setinterfacecommand{setupinteractionscreen}{nastavinterakcniobrazovku}
+\setinterfacecommand{setupinterlinespace}{nastavmeziradkovoumezeru}
+\setinterfacecommand{setupitemgroup}{setupitemgroup}
+\setinterfacecommand{setupitemgroups}{nastavvycty}
+\setinterfacecommand{setupitems}{nastavpolozky}
+\setinterfacecommand{setuplabeltext}{nastavtextpopisku}
+\setinterfacecommand{setuplanguage}{nastavjazyk}
+\setinterfacecommand{setuplayout}{nastavvzhled}
+\setinterfacecommand{setuplegend}{nastavlegendu}
+\setinterfacecommand{setuplinenumbering}{nastavcislovaniradku}
+\setinterfacecommand{setuplines}{nastavradky}
+\setinterfacecommand{setuplinewidth}{nastavsirkucary}
+\setinterfacecommand{setuplist}{nastavseznam}
+\setinterfacecommand{setupmakeup}{nastavupravu}
+\setinterfacecommand{setupmarginblock}{setupmarginblock}
+\setinterfacecommand{setupmarginblocks}{nastavmarginalniblok}
+\setinterfacecommand{setupmargindata}{setupmargindata}
+\setinterfacecommand{setupmarginrules}{nastavmarginalnilinky}
+\setinterfacecommand{setupmarking}{nastavznaceni}
+\setinterfacecommand{setupmathalignment}{setupmathalignment}
+\setinterfacecommand{setupnarrower}{nastavzuzeni}
+\setinterfacecommand{setupnumber}{setupnumber}
+\setinterfacecommand{setupnumbering}{nastavcislovani}
+\setinterfacecommand{setupoppositeplacing}{nastavumisteniprotejsku}
+\setinterfacecommand{setupoutput}{nastavvystup}
+\setinterfacecommand{setuppagecomment}{nastavkomentarstrany}
+\setinterfacecommand{setuppagenumber}{nastavcislostrany}
+\setinterfacecommand{setuppagenumbering}{nastavcislovanistran}
+\setinterfacecommand{setuppagetransitions}{nastavprechodstrany}
+\setinterfacecommand{setuppalet}{nastavpaletu}
+\setinterfacecommand{setuppaper}{setuppaper}
+\setinterfacecommand{setuppapersize}{nastavvelikostpapiru}
+\setinterfacecommand{setupparagraphnumbering}{nastavcislovaniodstavcu}
+\setinterfacecommand{setupparagraphs}{nastavodstavce}
+\setinterfacecommand{setupplacement}{setupplacement}
+\setinterfacecommand{setuppositioning}{nastavumistovani}
+\setinterfacecommand{setupprofiles}{nastavprofily}
+\setinterfacecommand{setupprograms}{nastavprogramy}
+\setinterfacecommand{setuppublications}{nastavpublikace}
+\setinterfacecommand{setupquote}{nastavcitaci}
+\setinterfacecommand{setupreferencelist}{nastavseznamodkazu}
+\setinterfacecommand{setupreferencing}{nastavodkazovani}
+\setinterfacecommand{setupregister}{nastavrejstrik}
+\setinterfacecommand{setuprotate}{nastavotoceni}
+\setinterfacecommand{setuprule}{setuprule}
+\setinterfacecommand{setupscreens}{nastavrastr}
+\setinterfacecommand{setupsection}{nastavsekci}
+\setinterfacecommand{setupsectionblock}{nastavbloksekce}
+\setinterfacecommand{setupsorting}{nastavtrideni}
+\setinterfacecommand{setupspacing}{nastavradkovani}
+\setinterfacecommand{setupstartstop}{setupstartstop}
+\setinterfacecommand{setupstrut}{setupstrut}
+\setinterfacecommand{setupsubpagenumber}{nastavpodcislostrany}
+\setinterfacecommand{setupsymbolset}{nastavsadusymbolu}
+\setinterfacecommand{setupsynchronization}{nastavsynchronizaci}
+\setinterfacecommand{setupsynchronizationbar}{nastavsynchronizacnilistu}
+\setinterfacecommand{setupsynonyms}{nastavsynonyma}
+\setinterfacecommand{setupsystem}{nastavsystem}
+\setinterfacecommand{setuptab}{nastavtab}
+\setinterfacecommand{setuptables}{nastavtabulky}
+\setinterfacecommand{setuptabulate}{nastavtabelaci}
+\setinterfacecommand{setuptext}{nastavtext}
+\setinterfacecommand{setuptextbackground}{setuptextbackground}
+\setinterfacecommand{setuptextposition}{setuptextposition}
+\setinterfacecommand{setuptextrules}{nastavtextovelinky}
+\setinterfacecommand{setuptexttexts}{nastavtexttexty}
+\setinterfacecommand{setuptextvariable}{setuptextvariable}
+\setinterfacecommand{setupthinrules}{nastavtenkelinky}
+\setinterfacecommand{setuptolerance}{nastavtoleranci}
+\setinterfacecommand{setuptop}{nastavhorejsek}
+\setinterfacecommand{setuptoptexts}{nastavhornitexty}
+\setinterfacecommand{setuptype}{nastavtype}
+\setinterfacecommand{setuptyping}{nastavopis}
+\setinterfacecommand{setupunderbar}{nastavpodtrzeni}
+\setinterfacecommand{setupurl}{nastavurl}
+\setinterfacecommand{setupversions}{nastavverze}
+\setinterfacecommand{setupwhitespace}{nastavbilamista}
+\setinterfacecommand{showbodyfont}{ukazzakladnifont}
+\setinterfacecommand{showbodyfontenvironment}{ukazpostredizakladnihofontu}
+\setinterfacecommand{showcolor}{ukazbarvu}
+\setinterfacecommand{showcolorgroup}{ukazskupinubarev}
+\setinterfacecommand{showexternalfigures}{ukazexterniobrazy}
+\setinterfacecommand{showfields}{ukazpole}
+\setinterfacecommand{showframe}{ukazramecek}
+\setinterfacecommand{showgrid}{ukazmrizku}
+\setinterfacecommand{showlayout}{ukazvzhled}
+\setinterfacecommand{showmakeup}{ukazupravu}
+\setinterfacecommand{showpalet}{ukazpaletu}
+\setinterfacecommand{showprint}{ukazvytisk}
+\setinterfacecommand{showsetups}{ukaznastaveni}
+\setinterfacecommand{showstruts}{ukazpodpery}
+\setinterfacecommand{showsymbolset}{ukazsadusymbolu}
+\setinterfacecommand{smallcapped}{kap}
+\setinterfacecommand{someline}{nejakyradek}
+\setinterfacecommand{somewhere}{nekde}
+\setinterfacecommand{space}{mezera}
+\setinterfacecommand{splitfloat}{rozdelplvouciobjekt}
+\setinterfacecommand{startalignment}{startzarovnavani}
+\setinterfacecommand{startbackground}{startpozadi}
+\setinterfacecommand{startcoding}{startkodovani}
+\setinterfacecommand{startcolor}{startbarva}
+\setinterfacecommand{startcolumnmakeup}{startcolumnmakeup}
+\setinterfacecommand{startcolumns}{startsloupce}
+\setinterfacecommand{startcolumnset}{startcolumnset}
+\setinterfacecommand{startcombination}{startspojeni}
+\setinterfacecommand{startcomponent}{startkomponenta}
+\setinterfacecommand{startdocument}{startdokument}
+\setinterfacecommand{startenvironment}{startprostredi}
+\setinterfacecommand{startfigure}{startobraz}
+\setinterfacecommand{startframed}{startframed}
+\setinterfacecommand{startglobal}{startglobalni}
+\setinterfacecommand{startline}{startradek}
+\setinterfacecommand{startlinecorrection}{startkorekceradku}
+\setinterfacecommand{startlinenumbering}{startcislovaniradku}
+\setinterfacecommand{startlines}{startradky}
+\setinterfacecommand{startlocal}{startlokalni}
+\setinterfacecommand{startlocalfootnotes}{startlokalnipoznamkypodcarou}
+\setinterfacecommand{startmakeup}{startuprava}
+\setinterfacecommand{startmarginblock}{startmarginalniblok}
+\setinterfacecommand{startmarginrule}{startmarginalnilinka}
+\setinterfacecommand{startnarrower}{startzuzeni}
+\setinterfacecommand{startopposite}{startprotejsek}
+\setinterfacecommand{startoverlay}{startprekryv}
+\setinterfacecommand{startoverzicht}{startprehled}
+\setinterfacecommand{startpacked}{startzhustene}
+\setinterfacecommand{startpositioning}{startumistovani}
+\setinterfacecommand{startproduct}{startprodukt}
+\setinterfacecommand{startprofile}{startprofil}
+\setinterfacecommand{startproject}{startprojekt}
+\setinterfacecommand{startquotation}{startcitace}
+\setinterfacecommand{startraster}{startrastr}
+\setinterfacecommand{startsymbolset}{startsadasymbolu}
+\setinterfacecommand{startsynchronization}{startsynchronizace}
+\setinterfacecommand{starttable}{starttabulka}
+\setinterfacecommand{starttables}{starttabulky}
+\setinterfacecommand{starttext}{starttext}
+\setinterfacecommand{starttextbackground}{starttextbackground}
+\setinterfacecommand{starttextrule}{starttextovalinka}
+\setinterfacecommand{startunpacked}{startnezhustene}
+\setinterfacecommand{startversion}{startverze}
+\setinterfacecommand{stopalignment}{stopzarovnavani}
+\setinterfacecommand{stopbackground}{stoppozadi}
+\setinterfacecommand{stopcoding}{stopkodovani}
+\setinterfacecommand{stopcolor}{stopbarva}
+\setinterfacecommand{stopcolumnmakeup}{stopcolumnmakeup}
+\setinterfacecommand{stopcolumns}{stopsloupce}
+\setinterfacecommand{stopcolumnset}{stopcolumnset}
+\setinterfacecommand{stopcombination}{stopspojeni}
+\setinterfacecommand{stopcomponent}{stopkomponenta}
+\setinterfacecommand{stopdocument}{stopdokument}
+\setinterfacecommand{stopenvironment}{stopprostredi}
+\setinterfacecommand{stopframed}{stopframed}
+\setinterfacecommand{stopglobal}{stopglobalni}
+\setinterfacecommand{stopline}{stopradek}
+\setinterfacecommand{stoplinecorrection}{stopkorekceradku}
+\setinterfacecommand{stoplinenumbering}{stopcislovaniradku}
+\setinterfacecommand{stoplines}{stopradky}
+\setinterfacecommand{stoplocal}{stoplokalni}
+\setinterfacecommand{stoplocalfootnotes}{stoplokalnipoznamkypodcarou}
+\setinterfacecommand{stopmakeup}{stopuprava}
+\setinterfacecommand{stopmarginblock}{stopmarginalniblok}
+\setinterfacecommand{stopmarginrule}{stopmarginalnilinka}
+\setinterfacecommand{stopnarrower}{stopzuzeni}
+\setinterfacecommand{stopopposite}{stopprotejsek}
+\setinterfacecommand{stopoverlay}{stopprekryv}
+\setinterfacecommand{stopoverzicht}{stopprehled}
+\setinterfacecommand{stoppacked}{stopzhustene}
+\setinterfacecommand{stoppositioning}{stopumistovani}
+\setinterfacecommand{stopproduct}{stopprodukt}
+\setinterfacecommand{stopprofile}{stopprofil}
+\setinterfacecommand{stopproject}{stopprojekt}
+\setinterfacecommand{stopquotation}{stopcitace}
+\setinterfacecommand{stopraster}{stoprastr}
+\setinterfacecommand{stopsynchronization}{stopsynchronizace}
+\setinterfacecommand{stoptable}{stoptabulka}
+\setinterfacecommand{stoptables}{stoptabulky}
+\setinterfacecommand{stoptext}{stoptext}
+\setinterfacecommand{stoptextbackground}{stoptextbackground}
+\setinterfacecommand{stoptextrule}{stoptextovalinka}
+\setinterfacecommand{stopunpacked}{stopnezhustene}
+\setinterfacecommand{stopversion}{stopverze}
+\setinterfacecommand{stretched}{roztazene}
+\setinterfacecommand{subformulanumber}{cislopodrovnice}
+\setinterfacecommand{subpagenumber}{subpagenumber}
+\setinterfacecommand{switchtobodyfont}{prepninazakladnifont}
+\setinterfacecommand{switchtorawfont}{switchtorawfont}
+\setinterfacecommand{sym}{sym}
+\setinterfacecommand{symbol}{symbol}
+\setinterfacecommand{symoffset}{symoffset}
+\setinterfacecommand{synchronizationbar}{synchronizacnilista}
+\setinterfacecommand{synchronize}{synchronizovat}
+\setinterfacecommand{tab}{tab}
+\setinterfacecommand{testcolumn}{testcolumn}
+\setinterfacecommand{testpage}{testpage}
+\setinterfacecommand{tex}{tex}
+\setinterfacecommand{textbackground}{textbackground}
+\setinterfacecommand{textheight}{vyskatextu}
+\setinterfacecommand{textreference}{odkaznatext}
+\setinterfacecommand{textrule}{textovalinka}
+\setinterfacecommand{textvariable}{textvariable}
+\setinterfacecommand{textwidth}{sirkatextu}
+\setinterfacecommand{thinrule}{tenkalinka}
+\setinterfacecommand{thinrules}{tenkelinky}
+\setinterfacecommand{tooltip}{bublinkovanapoveda}
+\setinterfacecommand{topdistance}{vzdalenosthorejsku}
+\setinterfacecommand{topheight}{vyskahorejsku}
+\setinterfacecommand{topspace}{odsazenishora}
+\setinterfacecommand{totalnumberofpages}{celkovypocetstran}
+\setinterfacecommand{translate}{prelozit}
+\setinterfacecommand{txt}{txt}
+\setinterfacecommand{typ}{pis}
+\setinterfacecommand{type}{opis}
+\setinterfacecommand{typebuffer}{typebuffer}
+\setinterfacecommand{typefile}{opissoubor}
+\setinterfacecommand{unitmeaning}{vyznam}
+\setinterfacecommand{unknown}{neznamo}
+\setinterfacecommand{useJSscripts}{uzijJSscripts}
+\setinterfacecommand{useURL}{uzijURL}
+\setinterfacecommand{useXMLfilter}{useXMLfilter}
+\setinterfacecommand{useblocks}{uzijbloky}
+\setinterfacecommand{usecommands}{uzijprikazy}
+\setinterfacecommand{useencoding}{uzijkodovani}
+\setinterfacecommand{useexternaldocument}{uzijexternidokument}
+\setinterfacecommand{useexternalfigure}{uzijexterniobraz}
+\setinterfacecommand{useexternalfile}{uzijexternisoubor}
+\setinterfacecommand{useexternalfiles}{uzijexternisoubory}
+\setinterfacecommand{useexternalsoundtrack}{uzijexternizvuk}
+\setinterfacecommand{usemodule}{uzijmodul}
+\setinterfacecommand{usemodules}{uzijmoduly}
+\setinterfacecommand{usepath}{uzijadresar}
+\setinterfacecommand{usereferences}{uzijodkazy}
+\setinterfacecommand{usespecials}{uzijspeciality}
+\setinterfacecommand{usesymbols}{uzijsymbol}
+\setinterfacecommand{usetypescript}{usetypescript}
+\setinterfacecommand{usetypescriptfile}{usetypescriptfile}
+\setinterfacecommand{useurl}{uzijurl}
+\setinterfacecommand{version}{verze}
+\setinterfacecommand{vl}{vl}
+\setinterfacecommand{weekday}{vsedniden}
+\setinterfacecommand{whitespace}{bilemisto}
+\setinterfacecommand{wordright}{slovovpravo}
+\setinterfacecommand{writebetweenlist}{zapismeziseznam}
+\setinterfacecommand{writetolist}{zapisdoseznamu}
+\setinterfacecommand{writetoreferencelist}{zapisdoseznamuodkazu}
+\setinterfacecommand{writetoregister}{zapisdorejstriku}
+%
+\endinput \ No newline at end of file
diff --git a/tex/context/base/mkii/mult-de.mkii b/tex/context/base/mkii/mult-de.mkii
index 0762fadfc..ec1fb10f4 100644
--- a/tex/context/base/mkii/mult-de.mkii
+++ b/tex/context/base/mkii/mult-de.mkii
@@ -76,6 +76,7 @@
\setinterfacevariable{all}{alles}
\setinterfacevariable{alphabetic}{alphabetic}
\setinterfacevariable{always}{immer}
+\setinterfacevariable{anchor}{anchor}
\setinterfacevariable{and}{und}
\setinterfacevariable{answerarea}{answerarea}
\setinterfacevariable{appendices}{anhaenge}
@@ -169,9 +170,11 @@
\setinterfacevariable{down}{down}
\setinterfacevariable{each}{jede}
\setinterfacevariable{edge}{kante}
+\setinterfacevariable{effective}{effective}
\setinterfacevariable{eight}{acht}
\setinterfacevariable{embed}{embed}
\setinterfacevariable{empty}{leer}
+\setinterfacevariable{enable}{enable}
\setinterfacevariable{end}{end}
\setinterfacevariable{endnote}{endnote}
\setinterfacevariable{enumeration}{nummerierung}
@@ -206,9 +209,10 @@
\setinterfacevariable{force}{zwinge}
\setinterfacevariable{foreground}{vordergrund}
\setinterfacevariable{formula}{formel}
-\setinterfacevariable{formulae}{formeln}
+\setinterfacevariable{formulas}{formeln}
\setinterfacevariable{forward}{vorwaerts}
\setinterfacevariable{four}{vier}
+\setinterfacevariable{fractions}{fractions}
\setinterfacevariable{frame}{rahmen}
\setinterfacevariable{framedtext}{umrahmtertext}
\setinterfacevariable{friday}{freitag}
@@ -233,6 +237,7 @@
\setinterfacevariable{here}{hier}
\setinterfacevariable{hereafter}{nachher}
\setinterfacevariable{hidden}{versteckt}
+\setinterfacevariable{hiddenbar}{hiddenbar}
\setinterfacevariable{hiding}{verbergen}
\setinterfacevariable{high}{hoch}
\setinterfacevariable{horizontal}{horizontal}
@@ -376,6 +381,7 @@
\setinterfacevariable{note}{note}
\setinterfacevariable{nothanging}{nothanging}
\setinterfacevariable{nothyphenated}{nothyphenated}
+\setinterfacevariable{notjoinedup}{notjoinedup}
\setinterfacevariable{november}{november}
\setinterfacevariable{nowhere}{nirgens}
\setinterfacevariable{nowhite}{keinweiss}
@@ -621,6 +627,7 @@
\setinterfaceconstant{anchor}{anchor}
\setinterfaceconstant{andtext}{andtext}
\setinterfaceconstant{apa}{apa}
+\setinterfaceconstant{arguments}{arguments}
\setinterfaceconstant{arrow}{pfeil}
\setinterfaceconstant{artauthor}{artauthor}
\setinterfaceconstant{artauthoretaldisplay}{artauthoretaldisplay}
@@ -721,6 +728,7 @@
\setinterfaceconstant{controls}{controls}
\setinterfaceconstant{conversion}{konversion}
\setinterfaceconstant{convertfile}{konvertieredatei}
+\setinterfaceconstant{copies}{copies}
\setinterfaceconstant{corner}{winkel}
\setinterfaceconstant{coupling}{verknuepfung}
\setinterfaceconstant{couplingway}{verkopplungsart}
@@ -769,6 +777,7 @@
\setinterfaceconstant{etaloption}{etaloption}
\setinterfaceconstant{etaltext}{etaltext}
\setinterfaceconstant{evenmargin}{geraderand}
+\setinterfaceconstant{exact}{exact}
\setinterfaceconstant{exitoffset}{exitoffset}
\setinterfaceconstant{expansion}{expansion}
\setinterfaceconstant{export}{export}
@@ -811,6 +820,7 @@
\setinterfaceconstant{frameoffset}{rahmenoffset}
\setinterfaceconstant{frameradius}{rahmenradius}
\setinterfaceconstant{frames}{umrahmen}
+\setinterfaceconstant{freeregion}{freeregion}
\setinterfaceconstant{from}{von}
\setinterfaceconstant{functioncolor}{functioncolor}
\setinterfaceconstant{functionstyle}{functionstyle}
@@ -1160,6 +1170,7 @@
\setinterfaceconstant{splitoffset}{splitoffset}
\setinterfaceconstant{spot}{spot}
\setinterfaceconstant{stack}{stack}
+\setinterfaceconstant{stackname}{stackname}
\setinterfaceconstant{start}{start}
\setinterfaceconstant{starter}{starter}
\setinterfaceconstant{state}{status}
@@ -1170,6 +1181,7 @@
\setinterfaceconstant{strip}{strip}
\setinterfaceconstant{strut}{strut}
\setinterfaceconstant{style}{stil}
+\setinterfaceconstant{stylealternative}{stylealternative}
\setinterfaceconstant{sub}{unter}
\setinterfaceconstant{subtitle}{untertitel}
\setinterfaceconstant{suffix}{suffix}
@@ -1225,6 +1237,7 @@
\setinterfaceconstant{topspace}{kopfspatium}
\setinterfaceconstant{topstate}{statusoben}
\setinterfaceconstant{totalnumber}{totalnumber}
+\setinterfaceconstant{transform}{transform}
\setinterfaceconstant{translate}{translate}
\setinterfaceconstant{trimoffset}{trimoffset}
\setinterfaceconstant{type}{typ}
@@ -1305,6 +1318,7 @@
\setinterfacecommand{Words}{Woerter}
\setinterfacecommand{about}{ueber}
\setinterfacecommand{adaptlayout}{passelayoutan}
+\setinterfacecommand{alignment}{alignment}
\setinterfacecommand{arg}{arg}
\setinterfacecommand{at}{bei}
\setinterfacecommand{atleftmargin}{atleftmargin}
@@ -1521,11 +1535,13 @@
\setinterfacecommand{leftmargindistance}{linkemarginalafstand}
\setinterfacecommand{leftmarginwidth}{linkemarginalbreite}
\setinterfacecommand{leg}{leg}
+\setinterfacecommand{linecorrection}{linecorrection}
\setinterfacecommand{linewidth}{liniendicke}
\setinterfacecommand{listheight}{listenhoehe}
\setinterfacecommand{listlength}{listenlaenge}
\setinterfacecommand{listsymbol}{listsymbol}
\setinterfacecommand{listwidth}{listenbreite}
+\setinterfacecommand{localfootnotes}{localfootnotes}
\setinterfacecommand{logfields}{registrierefelder}
\setinterfacecommand{lohi}{tiho}
\setinterfacecommand{low}{tief}
@@ -1534,6 +1550,7 @@
\setinterfacecommand{makeupheight}{satzhoehe}
\setinterfacecommand{makeupwidth}{satzbreite}
\setinterfacecommand{mar}{mar}
+\setinterfacecommand{marginblock}{marginblock}
\setinterfacecommand{margindistance}{marginalafstand}
\setinterfacecommand{marginrule}{marginallinie}
\setinterfacecommand{margintext}{marginaltext}
@@ -1633,6 +1650,7 @@
\setinterfacecommand{rightmarginwidth}{rechtemarginalbreite}
\setinterfacecommand{romannumerals}{roemischezahlen}
\setinterfacecommand{rotate}{drehen}
+\setinterfacecommand{savebuffer}{savebuffer}
\setinterfacecommand{scale}{format}
\setinterfacecommand{screen}{bildschirm}
\setinterfacecommand{selectblocks}{waehlebloeckeaus}
@@ -1668,7 +1686,9 @@
\setinterfacecommand{setupcombinations}{stellekombinationein}
\setinterfacecommand{setupcombinedlist}{stellezusammengestelltelisteein}
\setinterfacecommand{setupcomment}{stellekommentarein}
+\setinterfacecommand{setupdescription}{setupdescription}
\setinterfacecommand{setupdescriptions}{definierebeschreibungen}
+\setinterfacecommand{setupenumeration}{setupenumeration}
\setinterfacecommand{setupenumerations}{stellebeschreibungein}
\setinterfacecommand{setupexternalfigures}{stelleexterneabbildungenein}
\setinterfacecommand{setupfield}{stellefeldein}
@@ -1683,8 +1703,10 @@
\setinterfacecommand{setupfootnotedefinition}{stellefussnotendefinitionein}
\setinterfacecommand{setupfootnotes}{stellefussnotenein}
\setinterfacecommand{setupforms}{setupforms}
+\setinterfacecommand{setupformula}{setupformula}
\setinterfacecommand{setupformulas}{stelleformelnein}
\setinterfacecommand{setupframed}{stelleumrahmtein}
+\setinterfacecommand{setupframedtext}{setupframedtext}
\setinterfacecommand{setupframedtexts}{stelleumrahmtetexteein}
\setinterfacecommand{setuphead}{stelleueberschriftein}
\setinterfacecommand{setupheader}{stellekopfzeileein}
@@ -1713,7 +1735,9 @@
\setinterfacecommand{setuplinewidth}{stellelinienbreiteein}
\setinterfacecommand{setuplist}{stellelisteein}
\setinterfacecommand{setupmakeup}{stelleumbruchein}
+\setinterfacecommand{setupmarginblock}{setupmarginblock}
\setinterfacecommand{setupmarginblocks}{stellemarginalblockein}
+\setinterfacecommand{setupmargindata}{setupmargindata}
\setinterfacecommand{setupmarginrules}{stellemarginallinieein}
\setinterfacecommand{setupmarking}{stellebeschriftungein}
\setinterfacecommand{setupmathalignment}{setupmathalignment}
@@ -1892,6 +1916,7 @@
\setinterfacecommand{testcolumn}{testcolumn}
\setinterfacecommand{testpage}{testpage}
\setinterfacecommand{tex}{tex}
+\setinterfacecommand{textbackground}{textbackground}
\setinterfacecommand{textheight}{texthoehe}
\setinterfacecommand{textreference}{textreferenz}
\setinterfacecommand{textrule}{textlinie}
diff --git a/tex/context/base/mkii/mult-en.mkii b/tex/context/base/mkii/mult-en.mkii
index a16b87a48..a4838128b 100644
--- a/tex/context/base/mkii/mult-en.mkii
+++ b/tex/context/base/mkii/mult-en.mkii
@@ -76,6 +76,7 @@
\setinterfacevariable{all}{all}
\setinterfacevariable{alphabetic}{alphabetic}
\setinterfacevariable{always}{always}
+\setinterfacevariable{anchor}{anchor}
\setinterfacevariable{and}{and}
\setinterfacevariable{answerarea}{answerarea}
\setinterfacevariable{appendices}{appendices}
@@ -169,9 +170,11 @@
\setinterfacevariable{down}{down}
\setinterfacevariable{each}{each}
\setinterfacevariable{edge}{edge}
+\setinterfacevariable{effective}{effective}
\setinterfacevariable{eight}{eight}
\setinterfacevariable{embed}{embed}
\setinterfacevariable{empty}{empty}
+\setinterfacevariable{enable}{enable}
\setinterfacevariable{end}{end}
\setinterfacevariable{endnote}{endnote}
\setinterfacevariable{enumeration}{enumeration}
@@ -206,9 +209,10 @@
\setinterfacevariable{force}{force}
\setinterfacevariable{foreground}{foreground}
\setinterfacevariable{formula}{formula}
-\setinterfacevariable{formulae}{formulae}
+\setinterfacevariable{formulas}{formulas}
\setinterfacevariable{forward}{forward}
\setinterfacevariable{four}{four}
+\setinterfacevariable{fractions}{fractions}
\setinterfacevariable{frame}{frame}
\setinterfacevariable{framedtext}{framedtext}
\setinterfacevariable{friday}{friday}
@@ -233,6 +237,7 @@
\setinterfacevariable{here}{here}
\setinterfacevariable{hereafter}{hereafter}
\setinterfacevariable{hidden}{hidden}
+\setinterfacevariable{hiddenbar}{hiddenbar}
\setinterfacevariable{hiding}{hiding}
\setinterfacevariable{high}{high}
\setinterfacevariable{horizontal}{horizontal}
@@ -376,6 +381,7 @@
\setinterfacevariable{note}{note}
\setinterfacevariable{nothanging}{nothanging}
\setinterfacevariable{nothyphenated}{nothyphenated}
+\setinterfacevariable{notjoinedup}{notjoinedup}
\setinterfacevariable{november}{november}
\setinterfacevariable{nowhere}{nowhere}
\setinterfacevariable{nowhite}{nowhite}
@@ -621,6 +627,7 @@
\setinterfaceconstant{anchor}{anchor}
\setinterfaceconstant{andtext}{andtext}
\setinterfaceconstant{apa}{apa}
+\setinterfaceconstant{arguments}{arguments}
\setinterfaceconstant{arrow}{arrow}
\setinterfaceconstant{artauthor}{artauthor}
\setinterfaceconstant{artauthoretaldisplay}{artauthoretaldisplay}
@@ -721,6 +728,7 @@
\setinterfaceconstant{controls}{controls}
\setinterfaceconstant{conversion}{conversion}
\setinterfaceconstant{convertfile}{convertfile}
+\setinterfaceconstant{copies}{copies}
\setinterfaceconstant{corner}{corner}
\setinterfaceconstant{coupling}{coupling}
\setinterfaceconstant{couplingway}{couplingway}
@@ -769,6 +777,7 @@
\setinterfaceconstant{etaloption}{etaloption}
\setinterfaceconstant{etaltext}{etaltext}
\setinterfaceconstant{evenmargin}{evenmargin}
+\setinterfaceconstant{exact}{exact}
\setinterfaceconstant{exitoffset}{exitoffset}
\setinterfaceconstant{expansion}{expansion}
\setinterfaceconstant{export}{export}
@@ -811,6 +820,7 @@
\setinterfaceconstant{frameoffset}{frameoffset}
\setinterfaceconstant{frameradius}{frameradius}
\setinterfaceconstant{frames}{frames}
+\setinterfaceconstant{freeregion}{freeregion}
\setinterfaceconstant{from}{from}
\setinterfaceconstant{functioncolor}{functioncolor}
\setinterfaceconstant{functionstyle}{functionstyle}
@@ -1160,6 +1170,7 @@
\setinterfaceconstant{splitoffset}{splitoffset}
\setinterfaceconstant{spot}{spot}
\setinterfaceconstant{stack}{stack}
+\setinterfaceconstant{stackname}{stackname}
\setinterfaceconstant{start}{start}
\setinterfaceconstant{starter}{starter}
\setinterfaceconstant{state}{state}
@@ -1170,6 +1181,7 @@
\setinterfaceconstant{strip}{strip}
\setinterfaceconstant{strut}{strut}
\setinterfaceconstant{style}{style}
+\setinterfaceconstant{stylealternative}{stylealternative}
\setinterfaceconstant{sub}{sub}
\setinterfaceconstant{subtitle}{subtitle}
\setinterfaceconstant{suffix}{suffix}
@@ -1225,6 +1237,7 @@
\setinterfaceconstant{topspace}{topspace}
\setinterfaceconstant{topstate}{topstate}
\setinterfaceconstant{totalnumber}{totalnumber}
+\setinterfaceconstant{transform}{transform}
\setinterfaceconstant{translate}{translate}
\setinterfaceconstant{trimoffset}{trimoffset}
\setinterfaceconstant{type}{type}
@@ -1305,6 +1318,7 @@
\setinterfacecommand{Words}{Words}
\setinterfacecommand{about}{about}
\setinterfacecommand{adaptlayout}{adaptlayout}
+\setinterfacecommand{alignment}{alignment}
\setinterfacecommand{arg}{arg}
\setinterfacecommand{at}{at}
\setinterfacecommand{atleftmargin}{atleftmargin}
@@ -1521,11 +1535,13 @@
\setinterfacecommand{leftmargindistance}{leftmargindistance}
\setinterfacecommand{leftmarginwidth}{leftmarginwidth}
\setinterfacecommand{leg}{leg}
+\setinterfacecommand{linecorrection}{linecorrection}
\setinterfacecommand{linewidth}{linethickness}
\setinterfacecommand{listheight}{listheight}
\setinterfacecommand{listlength}{listlength}
\setinterfacecommand{listsymbol}{listsymbol}
\setinterfacecommand{listwidth}{listwidth}
+\setinterfacecommand{localfootnotes}{localfootnotes}
\setinterfacecommand{logfields}{logfields}
\setinterfacecommand{lohi}{lohi}
\setinterfacecommand{low}{low}
@@ -1534,6 +1550,7 @@
\setinterfacecommand{makeupheight}{makeupheight}
\setinterfacecommand{makeupwidth}{makeupwidth}
\setinterfacecommand{mar}{mar}
+\setinterfacecommand{marginblock}{marginblock}
\setinterfacecommand{margindistance}{margindistance}
\setinterfacecommand{marginrule}{marginrule}
\setinterfacecommand{margintext}{margintext}
@@ -1633,6 +1650,7 @@
\setinterfacecommand{rightmarginwidth}{rightmarginwidth}
\setinterfacecommand{romannumerals}{romannumerals}
\setinterfacecommand{rotate}{rotate}
+\setinterfacecommand{savebuffer}{savebuffer}
\setinterfacecommand{scale}{scale}
\setinterfacecommand{screen}{screen}
\setinterfacecommand{selectblocks}{selectblocks}
@@ -1668,7 +1686,9 @@
\setinterfacecommand{setupcombinations}{setupcombinations}
\setinterfacecommand{setupcombinedlist}{setupcombinedlist}
\setinterfacecommand{setupcomment}{setupcomment}
+\setinterfacecommand{setupdescription}{setupdescription}
\setinterfacecommand{setupdescriptions}{setupdescriptions}
+\setinterfacecommand{setupenumeration}{setupenumeration}
\setinterfacecommand{setupenumerations}{setupenumerations}
\setinterfacecommand{setupexternalfigures}{setupexternalfigures}
\setinterfacecommand{setupfield}{setupfield}
@@ -1683,8 +1703,10 @@
\setinterfacecommand{setupfootnotedefinition}{setupfootnotedefinition}
\setinterfacecommand{setupfootnotes}{setupfootnotes}
\setinterfacecommand{setupforms}{setupforms}
+\setinterfacecommand{setupformula}{setupformula}
\setinterfacecommand{setupformulas}{setupformulae}
\setinterfacecommand{setupframed}{setupframed}
+\setinterfacecommand{setupframedtext}{setupframedtext}
\setinterfacecommand{setupframedtexts}{setupframedtexts}
\setinterfacecommand{setuphead}{setuphead}
\setinterfacecommand{setupheader}{setupheader}
@@ -1713,7 +1735,9 @@
\setinterfacecommand{setuplinewidth}{setuplinewidth}
\setinterfacecommand{setuplist}{setuplist}
\setinterfacecommand{setupmakeup}{setupmakeup}
+\setinterfacecommand{setupmarginblock}{setupmarginblock}
\setinterfacecommand{setupmarginblocks}{setupmarginblocks}
+\setinterfacecommand{setupmargindata}{setupmargindata}
\setinterfacecommand{setupmarginrules}{setupmarginrules}
\setinterfacecommand{setupmarking}{setupmarking}
\setinterfacecommand{setupmathalignment}{setupmathalignment}
@@ -1892,6 +1916,7 @@
\setinterfacecommand{testcolumn}{testcolumn}
\setinterfacecommand{testpage}{testpage}
\setinterfacecommand{tex}{tex}
+\setinterfacecommand{textbackground}{textbackground}
\setinterfacecommand{textheight}{textheight}
\setinterfacecommand{textreference}{textreference}
\setinterfacecommand{textrule}{textrule}
diff --git a/tex/context/base/mkii/mult-fr.mkii b/tex/context/base/mkii/mult-fr.mkii
index 6c71d4aad..318bfc31c 100644
--- a/tex/context/base/mkii/mult-fr.mkii
+++ b/tex/context/base/mkii/mult-fr.mkii
@@ -76,6 +76,7 @@
\setinterfacevariable{all}{tout}
\setinterfacevariable{alphabetic}{alphabetic}
\setinterfacevariable{always}{toujours}
+\setinterfacevariable{anchor}{anchor}
\setinterfacevariable{and}{and}
\setinterfacevariable{answerarea}{answerarea}
\setinterfacevariable{appendices}{annexes}
@@ -169,9 +170,11 @@
\setinterfacevariable{down}{down}
\setinterfacevariable{each}{chaque}
\setinterfacevariable{edge}{bord}
+\setinterfacevariable{effective}{effective}
\setinterfacevariable{eight}{eight}
\setinterfacevariable{embed}{embed}
\setinterfacevariable{empty}{vide}
+\setinterfacevariable{enable}{enable}
\setinterfacevariable{end}{end}
\setinterfacevariable{endnote}{notefin}
\setinterfacevariable{enumeration}{enumeration}
@@ -206,9 +209,10 @@
\setinterfacevariable{force}{force}
\setinterfacevariable{foreground}{premierplan}
\setinterfacevariable{formula}{formule}
-\setinterfacevariable{formulae}{formules}
+\setinterfacevariable{formulas}{formules}
\setinterfacevariable{forward}{avance}
\setinterfacevariable{four}{quatre}
+\setinterfacevariable{fractions}{fractions}
\setinterfacevariable{frame}{cadre}
\setinterfacevariable{framedtext}{texteencadre}
\setinterfacevariable{friday}{vendredi}
@@ -233,6 +237,7 @@
\setinterfacevariable{here}{ici}
\setinterfacevariable{hereafter}{suivant}
\setinterfacevariable{hidden}{cache}
+\setinterfacevariable{hiddenbar}{hiddenbar}
\setinterfacevariable{hiding}{cache}
\setinterfacevariable{high}{haut}
\setinterfacevariable{horizontal}{horizontale}
@@ -376,6 +381,7 @@
\setinterfacevariable{note}{note}
\setinterfacevariable{nothanging}{nonsuspendu}
\setinterfacevariable{nothyphenated}{nothyphenated}
+\setinterfacevariable{notjoinedup}{notjoinedup}
\setinterfacevariable{november}{novembre}
\setinterfacevariable{nowhere}{nulpart}
\setinterfacevariable{nowhite}{sansblanc}
@@ -621,6 +627,7 @@
\setinterfaceconstant{anchor}{anchor}
\setinterfaceconstant{andtext}{andtext}
\setinterfaceconstant{apa}{apa}
+\setinterfaceconstant{arguments}{arguments}
\setinterfaceconstant{arrow}{fleche}
\setinterfaceconstant{artauthor}{artauthor}
\setinterfaceconstant{artauthoretaldisplay}{artauthoretaldisplay}
@@ -721,6 +728,7 @@
\setinterfaceconstant{controls}{controles}
\setinterfaceconstant{conversion}{conversion}
\setinterfaceconstant{convertfile}{conversionfichier}
+\setinterfaceconstant{copies}{copies}
\setinterfaceconstant{corner}{coin}
\setinterfaceconstant{coupling}{couplage}
\setinterfaceconstant{couplingway}{modecouplage}
@@ -769,6 +777,7 @@
\setinterfaceconstant{etaloption}{etaloption}
\setinterfaceconstant{etaltext}{etaltext}
\setinterfaceconstant{evenmargin}{margepaire}
+\setinterfaceconstant{exact}{exact}
\setinterfaceconstant{exitoffset}{exitoffset}
\setinterfaceconstant{expansion}{expansion}
\setinterfaceconstant{export}{export}
@@ -811,6 +820,7 @@
\setinterfaceconstant{frameoffset}{decalagecadre}
\setinterfaceconstant{frameradius}{rayoncadre}
\setinterfaceconstant{frames}{cadres}
+\setinterfaceconstant{freeregion}{freeregion}
\setinterfaceconstant{from}{de}
\setinterfaceconstant{functioncolor}{functioncolor}
\setinterfaceconstant{functionstyle}{functionstyle}
@@ -1160,6 +1170,7 @@
\setinterfaceconstant{splitoffset}{splitoffset}
\setinterfaceconstant{spot}{spot}
\setinterfaceconstant{stack}{stack}
+\setinterfaceconstant{stackname}{stackname}
\setinterfaceconstant{start}{demarre}
\setinterfaceconstant{starter}{starter}
\setinterfaceconstant{state}{etat}
@@ -1170,6 +1181,7 @@
\setinterfaceconstant{strip}{strip}
\setinterfaceconstant{strut}{strut}
\setinterfaceconstant{style}{style}
+\setinterfaceconstant{stylealternative}{stylealternative}
\setinterfaceconstant{sub}{sous}
\setinterfaceconstant{subtitle}{soustitre}
\setinterfaceconstant{suffix}{suffix}
@@ -1225,6 +1237,7 @@
\setinterfaceconstant{topspace}{espacesup}
\setinterfaceconstant{topstate}{etatsup}
\setinterfaceconstant{totalnumber}{totalnumber}
+\setinterfaceconstant{transform}{transform}
\setinterfaceconstant{translate}{translate}
\setinterfaceconstant{trimoffset}{trimoffset}
\setinterfaceconstant{type}{type}
@@ -1305,6 +1318,7 @@
\setinterfacecommand{Words}{Mots}
\setinterfacecommand{about}{concernant}
\setinterfacecommand{adaptlayout}{adaptedisposition}
+\setinterfacecommand{alignment}{alignment}
\setinterfacecommand{arg}{arg}
\setinterfacecommand{at}{a}
\setinterfacecommand{atleftmargin}{atleftmargin}
@@ -1521,11 +1535,13 @@
\setinterfacecommand{leftmargindistance}{distancemargegauche}
\setinterfacecommand{leftmarginwidth}{largeurmargegauche}
\setinterfacecommand{leg}{leg}
+\setinterfacecommand{linecorrection}{linecorrection}
\setinterfacecommand{linewidth}{largeurligne}
\setinterfacecommand{listheight}{hauteurliste}
\setinterfacecommand{listlength}{llongueurliste}
\setinterfacecommand{listsymbol}{listesymbole}
\setinterfacecommand{listwidth}{largeurliste}
+\setinterfacecommand{localfootnotes}{localfootnotes}
\setinterfacecommand{logfields}{logchamp}
\setinterfacecommand{lohi}{baha}
\setinterfacecommand{low}{bas}
@@ -1534,6 +1550,7 @@
\setinterfacecommand{makeupheight}{hauteurmakeup}
\setinterfacecommand{makeupwidth}{largeurmakeup}
\setinterfacecommand{mar}{mar}
+\setinterfacecommand{marginblock}{marginblock}
\setinterfacecommand{margindistance}{distancemarge}
\setinterfacecommand{marginrule}{margereglee}
\setinterfacecommand{margintext}{textemarge}
@@ -1633,6 +1650,7 @@
\setinterfacecommand{rightmarginwidth}{largeurmargedroite}
\setinterfacecommand{romannumerals}{chiffresromains}
\setinterfacecommand{rotate}{oriente}
+\setinterfacecommand{savebuffer}{savebuffer}
\setinterfacecommand{scale}{echelle}
\setinterfacecommand{screen}{ecran}
\setinterfacecommand{selectblocks}{selectionneblocs}
@@ -1668,7 +1686,9 @@
\setinterfacecommand{setupcombinations}{reglecombinaisons}
\setinterfacecommand{setupcombinedlist}{reglelisteimbriquee}
\setinterfacecommand{setupcomment}{reglecommentaire}
+\setinterfacecommand{setupdescription}{setupdescription}
\setinterfacecommand{setupdescriptions}{regledescriptions}
+\setinterfacecommand{setupenumeration}{setupenumeration}
\setinterfacecommand{setupenumerations}{regleenumerations}
\setinterfacecommand{setupexternalfigures}{reglefiguresexternes}
\setinterfacecommand{setupfield}{reglechamp}
@@ -1683,8 +1703,10 @@
\setinterfacecommand{setupfootnotedefinition}{definitnotepdp}
\setinterfacecommand{setupfootnotes}{reglenotepdp}
\setinterfacecommand{setupforms}{regleformulaires}
+\setinterfacecommand{setupformula}{setupformula}
\setinterfacecommand{setupformulas}{regleformules}
\setinterfacecommand{setupframed}{regleencadre}
+\setinterfacecommand{setupframedtext}{setupframedtext}
\setinterfacecommand{setupframedtexts}{setupframedtexts}
\setinterfacecommand{setuphead}{regletete}
\setinterfacecommand{setupheader}{regleentete}
@@ -1713,7 +1735,9 @@
\setinterfacecommand{setuplinewidth}{regleepaisseurligne}
\setinterfacecommand{setuplist}{regleliste}
\setinterfacecommand{setupmakeup}{reglemakeup}
+\setinterfacecommand{setupmarginblock}{setupmarginblock}
\setinterfacecommand{setupmarginblocks}{regleblocmarge}
+\setinterfacecommand{setupmargindata}{setupmargindata}
\setinterfacecommand{setupmarginrules}{reglemargereglee}
\setinterfacecommand{setupmarking}{reglemarquage}
\setinterfacecommand{setupmathalignment}{setupmathalignment}
@@ -1892,6 +1916,7 @@
\setinterfacecommand{testcolumn}{testcolumn}
\setinterfacecommand{testpage}{testpage}
\setinterfacecommand{tex}{tex}
+\setinterfacecommand{textbackground}{textbackground}
\setinterfacecommand{textheight}{hauteurtexte}
\setinterfacecommand{textreference}{referencetexte}
\setinterfacecommand{textrule}{ligneregleetexte}
diff --git a/tex/context/base/mkii/mult-it.mkii b/tex/context/base/mkii/mult-it.mkii
index a875555bd..269d1e545 100644
--- a/tex/context/base/mkii/mult-it.mkii
+++ b/tex/context/base/mkii/mult-it.mkii
@@ -76,6 +76,7 @@
\setinterfacevariable{all}{tutti}
\setinterfacevariable{alphabetic}{alphabetic}
\setinterfacevariable{always}{sempre}
+\setinterfacevariable{anchor}{anchor}
\setinterfacevariable{and}{and}
\setinterfacevariable{answerarea}{answerarea}
\setinterfacevariable{appendices}{appendici}
@@ -169,9 +170,11 @@
\setinterfacevariable{down}{down}
\setinterfacevariable{each}{ogni}
\setinterfacevariable{edge}{bordo}
+\setinterfacevariable{effective}{effective}
\setinterfacevariable{eight}{eight}
\setinterfacevariable{embed}{embed}
\setinterfacevariable{empty}{vuoto}
+\setinterfacevariable{enable}{enable}
\setinterfacevariable{end}{end}
\setinterfacevariable{endnote}{endnote}
\setinterfacevariable{enumeration}{enumerazione}
@@ -206,9 +209,10 @@
\setinterfacevariable{force}{forza}
\setinterfacevariable{foreground}{foreground}
\setinterfacevariable{formula}{formula}
-\setinterfacevariable{formulae}{formule}
+\setinterfacevariable{formulas}{formule}
\setinterfacevariable{forward}{avanti}
\setinterfacevariable{four}{quattro}
+\setinterfacevariable{fractions}{fractions}
\setinterfacevariable{frame}{cornice}
\setinterfacevariable{framedtext}{testoincorniciato}
\setinterfacevariable{friday}{venerdi}
@@ -233,6 +237,7 @@
\setinterfacevariable{here}{qui}
\setinterfacevariable{hereafter}{seguente}
\setinterfacevariable{hidden}{nascosto}
+\setinterfacevariable{hiddenbar}{hiddenbar}
\setinterfacevariable{hiding}{nascondere}
\setinterfacevariable{high}{alto}
\setinterfacevariable{horizontal}{orizzontale}
@@ -376,6 +381,7 @@
\setinterfacevariable{note}{note}
\setinterfacevariable{nothanging}{nonsospeso}
\setinterfacevariable{nothyphenated}{nonsillabato}
+\setinterfacevariable{notjoinedup}{notjoinedup}
\setinterfacevariable{november}{novembre}
\setinterfacevariable{nowhere}{danessunaparte}
\setinterfacevariable{nowhite}{nobianco}
@@ -621,6 +627,7 @@
\setinterfaceconstant{anchor}{anchor}
\setinterfaceconstant{andtext}{andtext}
\setinterfaceconstant{apa}{apa}
+\setinterfaceconstant{arguments}{arguments}
\setinterfaceconstant{arrow}{freccia}
\setinterfaceconstant{artauthor}{artauthor}
\setinterfaceconstant{artauthoretaldisplay}{artauthoretaldisplay}
@@ -721,6 +728,7 @@
\setinterfaceconstant{controls}{controlli}
\setinterfaceconstant{conversion}{conversione}
\setinterfaceconstant{convertfile}{convertifile}
+\setinterfaceconstant{copies}{copies}
\setinterfaceconstant{corner}{angolo}
\setinterfaceconstant{coupling}{accoppiamento}
\setinterfaceconstant{couplingway}{modoaccoppiamento}
@@ -769,6 +777,7 @@
\setinterfaceconstant{etaloption}{etaloption}
\setinterfaceconstant{etaltext}{etaltext}
\setinterfaceconstant{evenmargin}{marginepari}
+\setinterfaceconstant{exact}{exact}
\setinterfaceconstant{exitoffset}{exitoffset}
\setinterfaceconstant{expansion}{espansione}
\setinterfaceconstant{export}{export}
@@ -811,6 +820,7 @@
\setinterfaceconstant{frameoffset}{offsetcornice}
\setinterfaceconstant{frameradius}{raggiocornice}
\setinterfaceconstant{frames}{cornici}
+\setinterfaceconstant{freeregion}{freeregion}
\setinterfaceconstant{from}{da}
\setinterfaceconstant{functioncolor}{functioncolor}
\setinterfaceconstant{functionstyle}{functionstyle}
@@ -1160,6 +1170,7 @@
\setinterfaceconstant{splitoffset}{splitoffset}
\setinterfaceconstant{spot}{spot}
\setinterfaceconstant{stack}{stack}
+\setinterfaceconstant{stackname}{stackname}
\setinterfaceconstant{start}{inizia}
\setinterfaceconstant{starter}{starter}
\setinterfaceconstant{state}{stato}
@@ -1170,6 +1181,7 @@
\setinterfaceconstant{strip}{strip}
\setinterfaceconstant{strut}{strut}
\setinterfaceconstant{style}{stile}
+\setinterfaceconstant{stylealternative}{stylealternative}
\setinterfaceconstant{sub}{sotto}
\setinterfaceconstant{subtitle}{sottotitolo}
\setinterfaceconstant{suffix}{suffix}
@@ -1225,6 +1237,7 @@
\setinterfaceconstant{topspace}{spaziocima}
\setinterfaceconstant{topstate}{statocima}
\setinterfaceconstant{totalnumber}{totalnumber}
+\setinterfaceconstant{transform}{transform}
\setinterfaceconstant{translate}{translate}
\setinterfaceconstant{trimoffset}{trimoffset}
\setinterfaceconstant{type}{type}
@@ -1305,6 +1318,7 @@
\setinterfacecommand{Words}{Parole}
\setinterfacecommand{about}{intorno}
\setinterfacecommand{adaptlayout}{adattalayout}
+\setinterfacecommand{alignment}{alignment}
\setinterfacecommand{arg}{arg}
\setinterfacecommand{at}{al}
\setinterfacecommand{atleftmargin}{atleftmargin}
@@ -1521,11 +1535,13 @@
\setinterfacecommand{leftmargindistance}{distanzamarginesinistro}
\setinterfacecommand{leftmarginwidth}{ampiezzamarginesinistro}
\setinterfacecommand{leg}{leg}
+\setinterfacecommand{linecorrection}{linecorrection}
\setinterfacecommand{linewidth}{spessoreriga}
\setinterfacecommand{listheight}{altezzaelenco}
\setinterfacecommand{listlength}{lunghezzaelenco}
\setinterfacecommand{listsymbol}{listsymbol}
\setinterfacecommand{listwidth}{ampiezzaelenco}
+\setinterfacecommand{localfootnotes}{localfootnotes}
\setinterfacecommand{logfields}{logcampi}
\setinterfacecommand{lohi}{pedap}
\setinterfacecommand{low}{ped}
@@ -1534,6 +1550,7 @@
\setinterfacecommand{makeupheight}{altezzamakeup}
\setinterfacecommand{makeupwidth}{ampiezzamakeup}
\setinterfacecommand{mar}{mar}
+\setinterfacecommand{marginblock}{marginblock}
\setinterfacecommand{margindistance}{distanzamargine}
\setinterfacecommand{marginrule}{lineamargine}
\setinterfacecommand{margintext}{testoinmargine}
@@ -1633,6 +1650,7 @@
\setinterfacecommand{rightmarginwidth}{ampiezzamarginedestro}
\setinterfacecommand{romannumerals}{numeriromani}
\setinterfacecommand{rotate}{ruota}
+\setinterfacecommand{savebuffer}{savebuffer}
\setinterfacecommand{scale}{scala}
\setinterfacecommand{screen}{schermo}
\setinterfacecommand{selectblocks}{selezionablocchi}
@@ -1668,7 +1686,9 @@
\setinterfacecommand{setupcombinations}{impostacombinazioni}
\setinterfacecommand{setupcombinedlist}{impostaelencocombinato}
\setinterfacecommand{setupcomment}{impostacommento}
+\setinterfacecommand{setupdescription}{setupdescription}
\setinterfacecommand{setupdescriptions}{impostadescrizioni}
+\setinterfacecommand{setupenumeration}{setupenumeration}
\setinterfacecommand{setupenumerations}{impostaenumerazioni}
\setinterfacecommand{setupexternalfigures}{impostafigureesterne}
\setinterfacecommand{setupfield}{impostacampo}
@@ -1683,8 +1703,10 @@
\setinterfacecommand{setupfootnotedefinition}{impostadefinizionenotepdp}
\setinterfacecommand{setupfootnotes}{impostanotepdp}
\setinterfacecommand{setupforms}{impostaforms}
+\setinterfacecommand{setupformula}{setupformula}
\setinterfacecommand{setupformulas}{impostaformule}
\setinterfacecommand{setupframed}{impostaincorniciato}
+\setinterfacecommand{setupframedtext}{setupframedtext}
\setinterfacecommand{setupframedtexts}{impostatestiincorniciati}
\setinterfacecommand{setuphead}{impostatesta}
\setinterfacecommand{setupheader}{impostainstestazione}
@@ -1713,7 +1735,9 @@
\setinterfacecommand{setuplinewidth}{impostaampiezzariga}
\setinterfacecommand{setuplist}{impostaelenco}
\setinterfacecommand{setupmakeup}{impostamakeup}
+\setinterfacecommand{setupmarginblock}{setupmarginblock}
\setinterfacecommand{setupmarginblocks}{impostablocchimargine}
+\setinterfacecommand{setupmargindata}{setupmargindata}
\setinterfacecommand{setupmarginrules}{impostalineemargine}
\setinterfacecommand{setupmarking}{impostamarcatura}
\setinterfacecommand{setupmathalignment}{setupmathalignment}
@@ -1892,6 +1916,7 @@
\setinterfacecommand{testcolumn}{testcolumn}
\setinterfacecommand{testpage}{testpage}
\setinterfacecommand{tex}{tex}
+\setinterfacecommand{textbackground}{textbackground}
\setinterfacecommand{textheight}{altezzatesto}
\setinterfacecommand{textreference}{riferimentotesto}
\setinterfacecommand{textrule}{lineatesto}
diff --git a/tex/context/base/mkii/mult-nl.mkii b/tex/context/base/mkii/mult-nl.mkii
index efc0d2be3..30703e4a6 100644
--- a/tex/context/base/mkii/mult-nl.mkii
+++ b/tex/context/base/mkii/mult-nl.mkii
@@ -76,6 +76,7 @@
\setinterfacevariable{all}{alles}
\setinterfacevariable{alphabetic}{alphabetic}
\setinterfacevariable{always}{altijd}
+\setinterfacevariable{anchor}{anker}
\setinterfacevariable{and}{en}
\setinterfacevariable{answerarea}{antwoordgebied}
\setinterfacevariable{appendices}{bijlagen}
@@ -139,7 +140,7 @@
\setinterfacevariable{color}{kleur}
\setinterfacevariable{column}{kolom}
\setinterfacevariable{columns}{kolommen}
-\setinterfacevariable{combination}{combination}
+\setinterfacevariable{combination}{combinatie}
\setinterfacevariable{command}{commando}
\setinterfacevariable{commands}{commandos}
\setinterfacevariable{comment}{commentaar}
@@ -169,9 +170,11 @@
\setinterfacevariable{down}{omlaag}
\setinterfacevariable{each}{elk}
\setinterfacevariable{edge}{rand}
+\setinterfacevariable{effective}{effectief}
\setinterfacevariable{eight}{acht}
\setinterfacevariable{embed}{sluitin}
\setinterfacevariable{empty}{leeg}
+\setinterfacevariable{enable}{enable}
\setinterfacevariable{end}{eind}
\setinterfacevariable{endnote}{eindnoot}
\setinterfacevariable{enumeration}{doornummering}
@@ -206,9 +209,10 @@
\setinterfacevariable{force}{forceer}
\setinterfacevariable{foreground}{voorgrond}
\setinterfacevariable{formula}{formule}
-\setinterfacevariable{formulae}{formules}
+\setinterfacevariable{formulas}{formules}
\setinterfacevariable{forward}{vooruit}
\setinterfacevariable{four}{vier}
+\setinterfacevariable{fractions}{fractions}
\setinterfacevariable{frame}{kader}
\setinterfacevariable{framedtext}{kadertekst}
\setinterfacevariable{friday}{vrijdag}
@@ -233,6 +237,7 @@
\setinterfacevariable{here}{hier}
\setinterfacevariable{hereafter}{hieronder}
\setinterfacevariable{hidden}{verborgen}
+\setinterfacevariable{hiddenbar}{hiddenbar}
\setinterfacevariable{hiding}{verbergen}
\setinterfacevariable{high}{hoog}
\setinterfacevariable{horizontal}{horizontaal}
@@ -376,6 +381,7 @@
\setinterfacevariable{note}{note}
\setinterfacevariable{nothanging}{niethangend}
\setinterfacevariable{nothyphenated}{nietafgebroken}
+\setinterfacevariable{notjoinedup}{nietaansluitend}
\setinterfacevariable{november}{november}
\setinterfacevariable{nowhere}{nergens}
\setinterfacevariable{nowhite}{geenwit}
@@ -621,6 +627,7 @@
\setinterfaceconstant{anchor}{anker}
\setinterfaceconstant{andtext}{andtext}
\setinterfaceconstant{apa}{apa}
+\setinterfaceconstant{arguments}{argumenten}
\setinterfaceconstant{arrow}{pijl}
\setinterfaceconstant{artauthor}{artauthor}
\setinterfaceconstant{artauthoretaldisplay}{artauthoretaldisplay}
@@ -721,6 +728,7 @@
\setinterfaceconstant{controls}{sturing}
\setinterfaceconstant{conversion}{conversie}
\setinterfaceconstant{convertfile}{converteerfile}
+\setinterfaceconstant{copies}{kopieen}
\setinterfaceconstant{corner}{hoek}
\setinterfaceconstant{coupling}{koppeling}
\setinterfaceconstant{couplingway}{koppelwijze}
@@ -769,6 +777,7 @@
\setinterfaceconstant{etaloption}{etaloption}
\setinterfaceconstant{etaltext}{etaltext}
\setinterfaceconstant{evenmargin}{evenmarge}
+\setinterfaceconstant{exact}{exact}
\setinterfaceconstant{exitoffset}{exitoffset}
\setinterfaceconstant{expansion}{expansie}
\setinterfaceconstant{export}{exporteer}
@@ -811,6 +820,7 @@
\setinterfaceconstant{frameoffset}{kaderoffset}
\setinterfaceconstant{frameradius}{kaderstraal}
\setinterfaceconstant{frames}{hokjes}
+\setinterfaceconstant{freeregion}{vrijgebied}
\setinterfaceconstant{from}{van}
\setinterfaceconstant{functioncolor}{functioncolor}
\setinterfaceconstant{functionstyle}{functionstyle}
@@ -1160,6 +1170,7 @@
\setinterfaceconstant{splitoffset}{splitsoffset}
\setinterfaceconstant{spot}{spot}
\setinterfaceconstant{stack}{stapel}
+\setinterfaceconstant{stackname}{stapelnaam}
\setinterfaceconstant{start}{start}
\setinterfaceconstant{starter}{opener}
\setinterfaceconstant{state}{status}
@@ -1170,6 +1181,7 @@
\setinterfaceconstant{strip}{strip}
\setinterfaceconstant{strut}{strut}
\setinterfaceconstant{style}{letter}
+\setinterfaceconstant{stylealternative}{stylevariant}
\setinterfaceconstant{sub}{sub}
\setinterfaceconstant{subtitle}{subtitel}
\setinterfaceconstant{suffix}{suffix}
@@ -1225,6 +1237,7 @@
\setinterfaceconstant{topspace}{kopwit}
\setinterfaceconstant{topstate}{bovenstatus}
\setinterfaceconstant{totalnumber}{totalnumber}
+\setinterfaceconstant{transform}{transformatie}
\setinterfaceconstant{translate}{translate}
\setinterfaceconstant{trimoffset}{trimoffset}
\setinterfaceconstant{type}{type}
@@ -1305,6 +1318,7 @@
\setinterfacecommand{Words}{Woorden}
\setinterfacecommand{about}{about}
\setinterfacecommand{adaptlayout}{paslayoutaan}
+\setinterfacecommand{alignment}{uitlijnen}
\setinterfacecommand{arg}{arg}
\setinterfacecommand{at}{op}
\setinterfacecommand{atleftmargin}{oplinkermarge}
@@ -1521,11 +1535,13 @@
\setinterfacecommand{leftmargindistance}{linkermargeafstand}
\setinterfacecommand{leftmarginwidth}{linkermargebreedte}
\setinterfacecommand{leg}{leg}
+\setinterfacecommand{linecorrection}{regelcorrectie}
\setinterfacecommand{linewidth}{lijndikte}
\setinterfacecommand{listheight}{lijsthoogte}
\setinterfacecommand{listlength}{lijstlengte}
\setinterfacecommand{listsymbol}{lijstsymbool}
\setinterfacecommand{listwidth}{lijstbreedte}
+\setinterfacecommand{localfootnotes}{lokalevoetnoten}
\setinterfacecommand{logfields}{registreervelden}
\setinterfacecommand{lohi}{laho}
\setinterfacecommand{low}{laag}
@@ -1534,6 +1550,7 @@
\setinterfacecommand{makeupheight}{zethoogte}
\setinterfacecommand{makeupwidth}{zetbreedte}
\setinterfacecommand{mar}{mar}
+\setinterfacecommand{marginblock}{margeblok}
\setinterfacecommand{margindistance}{margeafstand}
\setinterfacecommand{marginrule}{kantlijn}
\setinterfacecommand{margintext}{margetekst}
@@ -1633,6 +1650,7 @@
\setinterfacecommand{rightmarginwidth}{rechtermargebreedte}
\setinterfacecommand{romannumerals}{romeins}
\setinterfacecommand{rotate}{roteer}
+\setinterfacecommand{savebuffer}{bewaarbuffer}
\setinterfacecommand{scale}{schaal}
\setinterfacecommand{screen}{scherm}
\setinterfacecommand{selectblocks}{selecteerblokken}
@@ -1668,7 +1686,9 @@
\setinterfacecommand{setupcombinations}{stelcombinatiesin}
\setinterfacecommand{setupcombinedlist}{stelsamengesteldelijstin}
\setinterfacecommand{setupcomment}{stelcommentaarin}
+\setinterfacecommand{setupdescription}{steldoordefinierenin}
\setinterfacecommand{setupdescriptions}{steldoordefinierenin}
+\setinterfacecommand{setupenumeration}{steldoornummerenin}
\setinterfacecommand{setupenumerations}{steldoornummerenin}
\setinterfacecommand{setupexternalfigures}{stelexternefigurenin}
\setinterfacecommand{setupfield}{stelveldin}
@@ -1683,8 +1703,10 @@
\setinterfacecommand{setupfootnotedefinition}{stelvoetnootdefinitiein}
\setinterfacecommand{setupfootnotes}{stelvoetnotenin}
\setinterfacecommand{setupforms}{stelformulierenin}
+\setinterfacecommand{setupformula}{stelformulein}
\setinterfacecommand{setupformulas}{stelformulesin}
\setinterfacecommand{setupframed}{stelomlijndin}
+\setinterfacecommand{setupframedtext}{stelkadertekstin}
\setinterfacecommand{setupframedtexts}{stelkadertekstenin}
\setinterfacecommand{setuphead}{stelkopin}
\setinterfacecommand{setupheader}{stelhoofdin}
@@ -1713,7 +1735,9 @@
\setinterfacecommand{setuplinewidth}{stellijndiktein}
\setinterfacecommand{setuplist}{stellijstin}
\setinterfacecommand{setupmakeup}{stelopmaakin}
+\setinterfacecommand{setupmarginblock}{stelmargeblokkenin}
\setinterfacecommand{setupmarginblocks}{stelmargeblokkenin}
+\setinterfacecommand{setupmargindata}{stelinmargein}
\setinterfacecommand{setupmarginrules}{stelkantlijnin}
\setinterfacecommand{setupmarking}{stelmarkeringin}
\setinterfacecommand{setupmathalignment}{stelwiskundeuitlijnenin}
@@ -1892,6 +1916,7 @@
\setinterfacecommand{testcolumn}{testkolom}
\setinterfacecommand{testpage}{testpagina}
\setinterfacecommand{tex}{tex}
+\setinterfacecommand{textbackground}{tekstachtergrond}
\setinterfacecommand{textheight}{teksthoogte}
\setinterfacecommand{textreference}{tekstreferentie}
\setinterfacecommand{textrule}{tekstlijn}
@@ -1925,7 +1950,7 @@
\setinterfacecommand{useexternalsoundtrack}{gebruikexterngeluidsfragment}
\setinterfacecommand{usemodule}{gebruikmodule}
\setinterfacecommand{usemodules}{gebruikmodules}
-\setinterfacecommand{usepath}{gebruikgebied}
+\setinterfacecommand{usepath}{gebruikpad}
\setinterfacecommand{usereferences}{gebruikreferenties}
\setinterfacecommand{usespecials}{gebruikspecials}
\setinterfacecommand{usesymbols}{gebruiksymbolen}
diff --git a/tex/context/base/mkii/mult-pe.mkii b/tex/context/base/mkii/mult-pe.mkii
index 7e5c53791..8b300ae73 100644
--- a/tex/context/base/mkii/mult-pe.mkii
+++ b/tex/context/base/mkii/mult-pe.mkii
@@ -76,6 +76,7 @@
\setinterfacevariable{all}{همه}
\setinterfacevariable{alphabetic}{alphabetic}
\setinterfacevariable{always}{همواره}
+\setinterfacevariable{anchor}{anchor}
\setinterfacevariable{and}{and}
\setinterfacevariable{answerarea}{answerarea}
\setinterfacevariable{appendices}{پیوستها}
@@ -169,9 +170,11 @@
\setinterfacevariable{down}{down}
\setinterfacevariable{each}{هر}
\setinterfacevariable{edge}{لبه}
+\setinterfacevariable{effective}{effective}
\setinterfacevariable{eight}{eight}
\setinterfacevariable{embed}{embed}
\setinterfacevariable{empty}{تهی}
+\setinterfacevariable{enable}{enable}
\setinterfacevariable{end}{end}
\setinterfacevariable{endnote}{ته‌نوشت}
\setinterfacevariable{enumeration}{شماره‌بندی}
@@ -206,9 +209,10 @@
\setinterfacevariable{force}{اجبار}
\setinterfacevariable{foreground}{پیش‌زمینه}
\setinterfacevariable{formula}{فرمول}
-\setinterfacevariable{formulae}{فرمولها}
+\setinterfacevariable{formulas}{فرمولها}
\setinterfacevariable{forward}{به‌جلو}
\setinterfacevariable{four}{چهار}
+\setinterfacevariable{fractions}{fractions}
\setinterfacevariable{frame}{قالب}
\setinterfacevariable{framedtext}{متن‌قالبی}
\setinterfacevariable{friday}{جمعه}
@@ -233,6 +237,7 @@
\setinterfacevariable{here}{اینجا}
\setinterfacevariable{hereafter}{ازاین‌به‌بعد}
\setinterfacevariable{hidden}{پنهانی}
+\setinterfacevariable{hiddenbar}{hiddenbar}
\setinterfacevariable{hiding}{پنهان‌کردن}
\setinterfacevariable{high}{بلند}
\setinterfacevariable{horizontal}{افقی}
@@ -376,6 +381,7 @@
\setinterfacevariable{note}{note}
\setinterfacevariable{nothanging}{بدون‌آویزان‌کردن}
\setinterfacevariable{nothyphenated}{بدون‌شکست}
+\setinterfacevariable{notjoinedup}{notjoinedup}
\setinterfacevariable{november}{نوامبر}
\setinterfacevariable{nowhere}{هیچ‌حا}
\setinterfacevariable{nowhite}{سفید‌نه}
@@ -621,6 +627,7 @@
\setinterfaceconstant{anchor}{anchor}
\setinterfaceconstant{andtext}{andtext}
\setinterfaceconstant{apa}{apa}
+\setinterfaceconstant{arguments}{arguments}
\setinterfaceconstant{arrow}{پیکان}
\setinterfaceconstant{artauthor}{artauthor}
\setinterfaceconstant{artauthoretaldisplay}{artauthoretaldisplay}
@@ -721,6 +728,7 @@
\setinterfaceconstant{controls}{کنترلها}
\setinterfaceconstant{conversion}{تبدیل}
\setinterfaceconstant{convertfile}{پرونده‌تبدیل}
+\setinterfaceconstant{copies}{copies}
\setinterfaceconstant{corner}{گوشه}
\setinterfaceconstant{coupling}{تزویج}
\setinterfaceconstant{couplingway}{روش‌تزویج}
@@ -769,6 +777,7 @@
\setinterfaceconstant{etaloption}{etaloption}
\setinterfaceconstant{etaltext}{etaltext}
\setinterfaceconstant{evenmargin}{حاشیه‌زوج}
+\setinterfaceconstant{exact}{exact}
\setinterfaceconstant{exitoffset}{exitoffset}
\setinterfaceconstant{expansion}{گسترش}
\setinterfaceconstant{export}{export}
@@ -811,6 +820,7 @@
\setinterfaceconstant{frameoffset}{آفست‌قالب}
\setinterfaceconstant{frameradius}{شعاع‌قالب}
\setinterfaceconstant{frames}{قالبها}
+\setinterfaceconstant{freeregion}{freeregion}
\setinterfaceconstant{from}{از}
\setinterfaceconstant{functioncolor}{functioncolor}
\setinterfaceconstant{functionstyle}{functionstyle}
@@ -1160,6 +1170,7 @@
\setinterfaceconstant{splitoffset}{شکافتن‌آفست}
\setinterfaceconstant{spot}{لکه}
\setinterfaceconstant{stack}{توده}
+\setinterfaceconstant{stackname}{stackname}
\setinterfaceconstant{start}{شروع}
\setinterfaceconstant{starter}{starter}
\setinterfaceconstant{state}{وضعیت}
@@ -1170,6 +1181,7 @@
\setinterfaceconstant{strip}{strip}
\setinterfaceconstant{strut}{بست}
\setinterfaceconstant{style}{سبک}
+\setinterfaceconstant{stylealternative}{stylealternative}
\setinterfaceconstant{sub}{زیر}
\setinterfaceconstant{subtitle}{زیرعنوان}
\setinterfaceconstant{suffix}{پسوند}
@@ -1225,6 +1237,7 @@
\setinterfaceconstant{topspace}{فضای‌بالا}
\setinterfaceconstant{topstate}{وضعیت‌بالا}
\setinterfaceconstant{totalnumber}{totalnumber}
+\setinterfaceconstant{transform}{transform}
\setinterfaceconstant{translate}{translate}
\setinterfaceconstant{trimoffset}{trimoffset}
\setinterfaceconstant{type}{تایپ}
@@ -1305,6 +1318,7 @@
\setinterfacecommand{Words}{Words}
\setinterfacecommand{about}{درمورد}
\setinterfacecommand{adaptlayout}{تنظیم‌طرح‌بندی}
+\setinterfacecommand{alignment}{alignment}
\setinterfacecommand{arg}{افزودن}
\setinterfacecommand{at}{در}
\setinterfacecommand{atleftmargin}{درحاشیه‌چپ}
@@ -1521,11 +1535,13 @@
\setinterfacecommand{leftmargindistance}{فاصله‌حاشیه‌چپ}
\setinterfacecommand{leftmarginwidth}{عرض‌حاشیه‌چپ}
\setinterfacecommand{leg}{پا}
+\setinterfacecommand{linecorrection}{linecorrection}
\setinterfacecommand{linewidth}{عرض‌خط}
\setinterfacecommand{listheight}{ارتفاع‌خط}
\setinterfacecommand{listlength}{طول‌لیست}
\setinterfacecommand{listsymbol}{نمادلیست}
\setinterfacecommand{listwidth}{عرض‌لیست}
+\setinterfacecommand{localfootnotes}{localfootnotes}
\setinterfacecommand{logfields}{میدانهای‌گزارش}
\setinterfacecommand{lohi}{پابا}
\setinterfacecommand{low}{پایین}
@@ -1534,6 +1550,7 @@
\setinterfacecommand{makeupheight}{ارتفاع‌آرایش}
\setinterfacecommand{makeupwidth}{عرض‌آرایش}
\setinterfacecommand{mar}{حاش}
+\setinterfacecommand{marginblock}{marginblock}
\setinterfacecommand{margindistance}{فاصله‌حاشیه}
\setinterfacecommand{marginrule}{خط‌حاشیه}
\setinterfacecommand{margintext}{متن‌حاشیه}
@@ -1633,6 +1650,7 @@
\setinterfacecommand{rightmarginwidth}{عرض‌حاشیه‌راست}
\setinterfacecommand{romannumerals}{اعدادلاتین}
\setinterfacecommand{rotate}{دوران}
+\setinterfacecommand{savebuffer}{savebuffer}
\setinterfacecommand{scale}{مقیاس}
\setinterfacecommand{screen}{پرده}
\setinterfacecommand{selectblocks}{انتخاب‌بلوکها}
@@ -1668,7 +1686,9 @@
\setinterfacecommand{setupcombinations}{بارگذاری‌ترکیب‌ها}
\setinterfacecommand{setupcombinedlist}{بارگذاری‌لیست‌ترکیبی}
\setinterfacecommand{setupcomment}{بارگذاری‌توضیح}
+\setinterfacecommand{setupdescription}{setupdescription}
\setinterfacecommand{setupdescriptions}{بارگذاری‌شرح}
+\setinterfacecommand{setupenumeration}{setupenumeration}
\setinterfacecommand{setupenumerations}{بارگذاری‌شماره‌گذاریها}
\setinterfacecommand{setupexternalfigures}{بارگذاری‌شکلهای‌خارجی}
\setinterfacecommand{setupfield}{بارگذاری‌میدان}
@@ -1683,8 +1703,10 @@
\setinterfacecommand{setupfootnotedefinition}{بارگذاری‌تعریف‌پانوشت}
\setinterfacecommand{setupfootnotes}{بارگذاری‌پانوشتها}
\setinterfacecommand{setupforms}{بارگذاری‌طرح}
+\setinterfacecommand{setupformula}{setupformula}
\setinterfacecommand{setupformulas}{بارگذاری‌فرمولها}
\setinterfacecommand{setupframed}{بارگذاری‌قالبی}
+\setinterfacecommand{setupframedtext}{setupframedtext}
\setinterfacecommand{setupframedtexts}{بارگذاری‌متن‌قالبی}
\setinterfacecommand{setuphead}{بارگذاری‌سر}
\setinterfacecommand{setupheader}{بارگذاری‌سربرگ}
@@ -1713,7 +1735,9 @@
\setinterfacecommand{setuplinewidth}{بارگذاری‌عرض‌خط}
\setinterfacecommand{setuplist}{بارگذاری‌لیست}
\setinterfacecommand{setupmakeup}{بارگذاری‌آرایش}
+\setinterfacecommand{setupmarginblock}{setupmarginblock}
\setinterfacecommand{setupmarginblocks}{بارگذاری‌بلوکهای‌حاشیه}
+\setinterfacecommand{setupmargindata}{setupmargindata}
\setinterfacecommand{setupmarginrules}{بارگذاری‌خطهای‌حاشیه}
\setinterfacecommand{setupmarking}{بارگذاری‌نشانه‌گذاری}
\setinterfacecommand{setupmathalignment}{بارگذاری‌تنظیم‌ریاضی}
@@ -1892,6 +1916,7 @@
\setinterfacecommand{testcolumn}{ستون‌امتحان}
\setinterfacecommand{testpage}{صفحه‌تست}
\setinterfacecommand{tex}{تک}
+\setinterfacecommand{textbackground}{textbackground}
\setinterfacecommand{textheight}{ارتفاع‌متن}
\setinterfacecommand{textreference}{مرجع‌متن}
\setinterfacecommand{textrule}{خط‌متن}
diff --git a/tex/context/base/mkii/mult-ro.mkii b/tex/context/base/mkii/mult-ro.mkii
index f7121f703..26d0cd9c6 100644
--- a/tex/context/base/mkii/mult-ro.mkii
+++ b/tex/context/base/mkii/mult-ro.mkii
@@ -76,6 +76,7 @@
\setinterfacevariable{all}{tot}
\setinterfacevariable{alphabetic}{alphabetic}
\setinterfacevariable{always}{totdeauna}
+\setinterfacevariable{anchor}{anchor}
\setinterfacevariable{and}{and}
\setinterfacevariable{answerarea}{answerarea}
\setinterfacevariable{appendices}{apendixuri}
@@ -169,9 +170,11 @@
\setinterfacevariable{down}{down}
\setinterfacevariable{each}{fiecare}
\setinterfacevariable{edge}{bordura}
+\setinterfacevariable{effective}{effective}
\setinterfacevariable{eight}{eight}
\setinterfacevariable{embed}{embed}
\setinterfacevariable{empty}{gol}
+\setinterfacevariable{enable}{enable}
\setinterfacevariable{end}{end}
\setinterfacevariable{endnote}{endnote}
\setinterfacevariable{enumeration}{enumerare}
@@ -206,9 +209,10 @@
\setinterfacevariable{force}{fortat}
\setinterfacevariable{foreground}{primplan}
\setinterfacevariable{formula}{formula}
-\setinterfacevariable{formulae}{formule}
+\setinterfacevariable{formulas}{formule}
\setinterfacevariable{forward}{avans}
\setinterfacevariable{four}{patru}
+\setinterfacevariable{fractions}{fractions}
\setinterfacevariable{frame}{incadrat}
\setinterfacevariable{framedtext}{textinconjurat}
\setinterfacevariable{friday}{vineri}
@@ -233,6 +237,7 @@
\setinterfacevariable{here}{aici}
\setinterfacevariable{hereafter}{urmator}
\setinterfacevariable{hidden}{ascuns}
+\setinterfacevariable{hiddenbar}{hiddenbar}
\setinterfacevariable{hiding}{ascundere}
\setinterfacevariable{high}{inalt}
\setinterfacevariable{horizontal}{orizontal}
@@ -376,6 +381,7 @@
\setinterfacevariable{note}{note}
\setinterfacevariable{nothanging}{nothanging}
\setinterfacevariable{nothyphenated}{nedespsilabe}
+\setinterfacevariable{notjoinedup}{notjoinedup}
\setinterfacevariable{november}{noiembrie}
\setinterfacevariable{nowhere}{niciunde}
\setinterfacevariable{nowhite}{faraalb}
@@ -621,6 +627,7 @@
\setinterfaceconstant{anchor}{anchor}
\setinterfaceconstant{andtext}{andtext}
\setinterfaceconstant{apa}{apa}
+\setinterfaceconstant{arguments}{arguments}
\setinterfaceconstant{arrow}{sageata}
\setinterfaceconstant{artauthor}{artauthor}
\setinterfaceconstant{artauthoretaldisplay}{artauthoretaldisplay}
@@ -721,6 +728,7 @@
\setinterfaceconstant{controls}{controale}
\setinterfaceconstant{conversion}{conversie}
\setinterfaceconstant{convertfile}{convertestefisier}
+\setinterfaceconstant{copies}{copies}
\setinterfaceconstant{corner}{colt}
\setinterfaceconstant{coupling}{cuplare}
\setinterfaceconstant{couplingway}{modcuplare}
@@ -769,6 +777,7 @@
\setinterfaceconstant{etaloption}{etaloption}
\setinterfaceconstant{etaltext}{etaltext}
\setinterfaceconstant{evenmargin}{marginepara}
+\setinterfaceconstant{exact}{exact}
\setinterfaceconstant{exitoffset}{exitoffset}
\setinterfaceconstant{expansion}{expansiune}
\setinterfaceconstant{export}{export}
@@ -811,6 +820,7 @@
\setinterfaceconstant{frameoffset}{offsetframe}
\setinterfaceconstant{frameradius}{razaframe}
\setinterfaceconstant{frames}{frames}
+\setinterfaceconstant{freeregion}{freeregion}
\setinterfaceconstant{from}{dela}
\setinterfaceconstant{functioncolor}{functioncolor}
\setinterfaceconstant{functionstyle}{functionstyle}
@@ -1160,6 +1170,7 @@
\setinterfaceconstant{splitoffset}{splitoffset}
\setinterfaceconstant{spot}{spot}
\setinterfaceconstant{stack}{stack}
+\setinterfaceconstant{stackname}{stackname}
\setinterfaceconstant{start}{start}
\setinterfaceconstant{starter}{starter}
\setinterfaceconstant{state}{stare}
@@ -1170,6 +1181,7 @@
\setinterfaceconstant{strip}{strip}
\setinterfaceconstant{strut}{strut}
\setinterfaceconstant{style}{stil}
+\setinterfaceconstant{stylealternative}{stylealternative}
\setinterfaceconstant{sub}{sub}
\setinterfaceconstant{subtitle}{subtitlu}
\setinterfaceconstant{suffix}{suffix}
@@ -1225,6 +1237,7 @@
\setinterfaceconstant{topspace}{spatiusus}
\setinterfaceconstant{topstate}{staresus}
\setinterfaceconstant{totalnumber}{totalnumber}
+\setinterfaceconstant{transform}{transform}
\setinterfaceconstant{translate}{translate}
\setinterfaceconstant{trimoffset}{trimoffset}
\setinterfaceconstant{type}{type}
@@ -1305,6 +1318,7 @@
\setinterfacecommand{Words}{Cuvinte}
\setinterfacecommand{about}{despre}
\setinterfacecommand{adaptlayout}{adapteazaaspect}
+\setinterfacecommand{alignment}{alignment}
\setinterfacecommand{arg}{arg}
\setinterfacecommand{at}{la}
\setinterfacecommand{atleftmargin}{atleftmargin}
@@ -1521,11 +1535,13 @@
\setinterfacecommand{leftmargindistance}{distantamarginestanga}
\setinterfacecommand{leftmarginwidth}{latimemarginestanga}
\setinterfacecommand{leg}{leg}
+\setinterfacecommand{linecorrection}{linecorrection}
\setinterfacecommand{linewidth}{grosimelinie}
\setinterfacecommand{listheight}{inaltimelista}
\setinterfacecommand{listlength}{lungimelista}
\setinterfacecommand{listsymbol}{listsymbol}
\setinterfacecommand{listwidth}{latimelista}
+\setinterfacecommand{localfootnotes}{localfootnotes}
\setinterfacecommand{logfields}{logcampuri}
\setinterfacecommand{lohi}{jossus}
\setinterfacecommand{low}{jos}
@@ -1534,6 +1550,7 @@
\setinterfacecommand{makeupheight}{inaltimemakeup}
\setinterfacecommand{makeupwidth}{latimemakeup}
\setinterfacecommand{mar}{mar}
+\setinterfacecommand{marginblock}{marginblock}
\setinterfacecommand{margindistance}{distantamargine}
\setinterfacecommand{marginrule}{liniemargine}
\setinterfacecommand{margintext}{textmarginal}
@@ -1633,6 +1650,7 @@
\setinterfacecommand{rightmarginwidth}{latimemarginedreapta}
\setinterfacecommand{romannumerals}{numereromane}
\setinterfacecommand{rotate}{roteste}
+\setinterfacecommand{savebuffer}{savebuffer}
\setinterfacecommand{scale}{scala}
\setinterfacecommand{screen}{ecran}
\setinterfacecommand{selectblocks}{selecteazablocuri}
@@ -1668,7 +1686,9 @@
\setinterfacecommand{setupcombinations}{seteazacombinari}
\setinterfacecommand{setupcombinedlist}{seteazalistacombinata}
\setinterfacecommand{setupcomment}{seteazacomentariu}
+\setinterfacecommand{setupdescription}{setupdescription}
\setinterfacecommand{setupdescriptions}{seteazadescriere}
+\setinterfacecommand{setupenumeration}{setupenumeration}
\setinterfacecommand{setupenumerations}{seteazaenumerare}
\setinterfacecommand{setupexternalfigures}{seteazafiguriexterne}
\setinterfacecommand{setupfield}{seteazacamp}
@@ -1683,8 +1703,10 @@
\setinterfacecommand{setupfootnotedefinition}{seteazadefinireanotasubsol}
\setinterfacecommand{setupfootnotes}{seteazanotasubsol}
\setinterfacecommand{setupforms}{seteazaformulare}
+\setinterfacecommand{setupformula}{setupformula}
\setinterfacecommand{setupformulas}{seteazaformule}
\setinterfacecommand{setupframed}{seteazainconjurat}
+\setinterfacecommand{setupframedtext}{setupframedtext}
\setinterfacecommand{setupframedtexts}{definestetexteinconjurate}
\setinterfacecommand{setuphead}{seteazatitlu}
\setinterfacecommand{setupheader}{seteazaantet}
@@ -1713,7 +1735,9 @@
\setinterfacecommand{setuplinewidth}{seteazagrosimelinie}
\setinterfacecommand{setuplist}{seteazalista}
\setinterfacecommand{setupmakeup}{seteazamakeup}
+\setinterfacecommand{setupmarginblock}{setupmarginblock}
\setinterfacecommand{setupmarginblocks}{seteazablocurimarginale}
+\setinterfacecommand{setupmargindata}{setupmargindata}
\setinterfacecommand{setupmarginrules}{seteazaliniimargine}
\setinterfacecommand{setupmarking}{seteazamarcaje}
\setinterfacecommand{setupmathalignment}{setupmathalignment}
@@ -1892,6 +1916,7 @@
\setinterfacecommand{testcolumn}{testcolumn}
\setinterfacecommand{testpage}{testpage}
\setinterfacecommand{tex}{tex}
+\setinterfacecommand{textbackground}{textbackground}
\setinterfacecommand{textheight}{inaltimetext}
\setinterfacecommand{textreference}{referintatext}
\setinterfacecommand{textrule}{riglatext}
diff --git a/tex/context/base/mkii/pack-box.mkii b/tex/context/base/mkii/pack-box.mkii
index 1752e2b91..928450385 100644
--- a/tex/context/base/mkii/pack-box.mkii
+++ b/tex/context/base/mkii/pack-box.mkii
@@ -27,7 +27,7 @@
% \definelayer[\v!tekst+2][\c!positie=\v!ja]
% we need to set the size, else we get dimensions depending
-% on the content, which in itsel fis ok, but can lead to loops
+% on the content, which in itself is ok, but can lead to loops
% due to rounding errors (happened in demo-obv)
\definelayer[\v!text-2][\c!position=\v!yes,\c!width=\overlaywidth,\c!height=\overlayheight]
diff --git a/tex/context/base/mkii/page-mul.mkii b/tex/context/base/mkii/page-mul.mkii
index decf784f0..bf258abed 100644
--- a/tex/context/base/mkii/page-mul.mkii
+++ b/tex/context/base/mkii/page-mul.mkii
@@ -1656,9 +1656,9 @@
{\goodbreak}
\installcolumnbreakhandler {MUL} \v!yes
- {\par % todo: since
- {\testrulewidth\zeropoint\ruledvskip\textheight} % we misuse a
- \penalty-200 % side effect
+ {\par % todo: since
+ {\testrulewidth\zeropoint\ruledvskip\textheight}% we misuse a
+ \penalty-200 % side effect
\vskip-\textheight
}% bugged : \prevdepth-\thousandpoint} % signals top of column to \blank
diff --git a/tex/context/base/mkiv/anch-bar.mkiv b/tex/context/base/mkiv/anch-bar.mkiv
index b5df21a07..f8581da32 100644
--- a/tex/context/base/mkiv/anch-bar.mkiv
+++ b/tex/context/base/mkiv/anch-bar.mkiv
@@ -15,8 +15,10 @@
\unprotect
-%D We will implement a sidebar mechanism using the
-%D functionality from \type {core-pos}.
+%D This can be done better now ...
+
+%D We will implement a sidebar mechanism using the functionality from
+%D \type {core-pos}.
%D
%D \starttyping
%D \definesidebar[whow][rulecolor=green,distance=0pt]
@@ -96,10 +98,10 @@
{\def\currentsidebar{#1}%
\setupcurrentsidebar[#2]}%
\scratchdistance\sidebarparameter\c!distance\relax
+ \scratchdimen\sidebarparameter\c!leftmargindistance\relax
\edef\m_level{\sidebarparameter\c!level}%
\ifx\m_level\empty
\ifnum\c_anch_sidebars_level=\plusone
- \scratchdimen\sidebarparameter\c!leftmargindistance\relax
\ifdim\scratchdimen=\zeropoint
\advance\d_anch_sidebars_distance\scratchdistance\relax
\else
@@ -110,7 +112,6 @@
\fi
\else
\ifnum\m_level=\plusone
- \scratchdimen\sidebarparameter\c!leftmargindistance\relax
\ifdim\scratchdimen=\zeropoint
\advance\d_anch_sidebars_distance\scratchdistance\relax
\else
@@ -147,7 +148,6 @@
\startMPpositionmethod{mpos:sidebar}
\startMPpositiongraphic{mpos:sidebar}{linecolor,linewidth,distance,alternative}%
- if unknown context_apos : input mp-apos.mpiv ; fi ;
anch_sidebars_draw (
\MPp\MPbself,\MPp\MPeself,\MPy\MPbself,\MPy\MPeself,\MPh\MPbself,\MPd\MPeself,
\MPx{\textanchor},\MPy{\textanchor},\MPw{\textanchor},\MPh{\textanchor},
diff --git a/tex/context/base/mkiv/anch-bck.mkvi b/tex/context/base/mkiv/anch-bck.mkvi
index ee392f114..207f64537 100644
--- a/tex/context/base/mkiv/anch-bck.mkvi
+++ b/tex/context/base/mkiv/anch-bck.mkvi
@@ -98,12 +98,24 @@
\setuevalue{\currenttextbackground}{\groupedcommand{\starttextbackground[\currenttextbackground]}{\stoptextbackground}}%
\setuevalue{\e!start\currenttextbackground}{\starttextbackground[\currenttextbackground]}%
\setuevalue{\e!stop \currenttextbackground}{\stoptextbackground}%
-% \doif{\textbackgroundparameter\c!state}\v!start\checkpositionoverlays
\to \everydefinetextbackground
-% \appendtoks
-% \doif{\textbackgroundparameter\c!state}\v!start\checkpositionoverlays
-% \to \everysetuptextbackground
+\newconstant \c_anch_backgrounds_pos_state
+\newconditional\c_anch_backgrounds_pos_no_shape
+
+\def\anch_backgrounds_bpos
+ {\ifconditional\c_anch_backgrounds_pos_no_shape
+ \bposkind\v_anch_backgrounds_text_current\plusthree
+ \else
+ \bposkind\v_anch_backgrounds_text_current\c_anch_backgrounds_pos_state
+ \fi}
+
+\def\anch_backgrounds_epos
+ {\ifconditional\c_anch_backgrounds_pos_no_shape
+ \eposkind\v_anch_backgrounds_text_current\plusthree
+ \else
+ \eposkind\v_anch_backgrounds_text_current\c_anch_backgrounds_pos_state
+ \fi}
\unexpanded\def\starttextbackground
{\begingroup
@@ -122,6 +134,29 @@
\anch_backgrounds_text_preset_nop
\anch_backgrounds_text_start_indeed}
+% ugly hack to register usage
+
+\newcount \c_anch_backgrounds_text_count
+\newcount \c_anch_backgrounds_text_check
+\newconstant\c_anch_backgrounds_text_state
+
+\unexpanded\def\starttextbackground
+ {\begingroup
+ \global\advance\c_anch_backgrounds_text_count\plusone
+ \advance\c_anch_backgrounds_text_level\plusone
+ \dodoubleempty\anch_backgrounds_text_start}
+
+\def\anch_backgrounds_text_level_start
+ {\c_anch_backgrounds_text_check\c_anch_backgrounds_text_count}
+
+\def\anch_backgrounds_text_level_stop
+ {\c_anch_backgrounds_text_state
+ \ifnum\c_anch_backgrounds_text_count>\c_anch_backgrounds_text_check
+ \plusone
+ \else
+ \zerocount
+ \fi}
+
% todo \backgroundvariable\c!variant
\let\anch_backgrounds_text_start_indeed\relax
@@ -199,41 +234,52 @@
\unexpanded\def\starttextbackgroundmanual
{\begingroup
+ \c_anch_backgrounds_pos_state\plusone
\usetextbackgroundstyleandcolor\c!style\c!color
- \bpos\v_anch_backgrounds_text_current}
+ \anch_backgrounds_bpos}
\unexpanded\def\stoptextbackgroundmanual
- {\epos\v_anch_backgrounds_text_current
+ {\anch_backgrounds_epos
\carryoverpar\endgroup}
\def\anch_backgrounds_text_start_txt
{\ifvmode \dontleavehmode \fi
\begingroup
+ \c_anch_backgrounds_pos_state\plusone
\usetextbackgroundstyleandcolor\c!style\c!color
- \bpos\v_anch_backgrounds_text_current}
+ \anch_backgrounds_bpos}
\def\anch_backgrounds_text_stop_txt
- {\epos\v_anch_backgrounds_text_current
+ {\anch_backgrounds_epos
\carryoverpar\endgroup}
\newskip\textbackgroundskip
-\def\anch_backgrounds_text_start_par
+% maybe we should have a resetter for such compensation struts
+
+\def\anch_backgrounds_reset_attributes
+ {\scratchcounter\attribute\snapmethodattribute
+ \resetallattributes % \attribute\linenumberattribute \attributeunsetvalue
+ \attribute\snapmethodattribute\scratchcounter}
+
+\def\anch_backgrounds_text_start_par % beware .. background shapes
{\endgraf % new
\textbackgroundparameter\c!before
\begingroup
+ \c_anch_backgrounds_pos_state\plustwo
\begingroup
- \resetallattributes % \attribute\linenumberattribute \attributeunsetvalue
+ \anch_backgrounds_reset_attributes
\noindent
\ifgridsnapping
\spac_helpers_assign_skip\textbackgroundskip{\textbackgroundparameter\c!topoffset}%
\ifdim\textbackgroundskip>\zeropoint
- \struttedbox{\hbox{\raise\textbackgroundskip\hbox{\bpos\v_anch_backgrounds_text_current}}}%
+ \struttedbox % not always ok (e.g. setups)
+ {\hpack{\raise\textbackgroundskip\hpack{\anch_backgrounds_bpos}}}%
\else
- \bpos\v_anch_backgrounds_text_current
+ \anch_backgrounds_bpos
\fi
\else
- \bpos\v_anch_backgrounds_text_current
+ \anch_backgrounds_bpos
\fi
\endgraf % we need a vertical nobreak - 29/06/2004
\endgroup
@@ -276,17 +322,19 @@
\endgroup
\begingroup
\forgeteverypar % NOT REALLY NEEDED, SAVES HASH/MEM
- \resetallattributes % \attribute\linenumberattribute \attributeunsetvalue
+ \anch_backgrounds_reset_attributes
\nobreak \noindent \strut \hfill \kern\zeropoint
+ % so far
\spac_helpers_assign_skip\textbackgroundskip{\textbackgroundparameter\c!bottomoffset}%
\ifgridsnapping % experimental, pascal (todo: topoffset in same way)
\ifdim\textbackgroundskip>\zeropoint
- \struttedbox\plusone{\hbox{\lower\textbackgroundskip\hbox{\epos\v_anch_backgrounds_text_current}}}%
+ \struttedbox % not always ok (e.g. setups)
+ {\hpack{\lower\textbackgroundskip\hpack{\anch_backgrounds_epos}}}%
\else
- \epos\v_anch_backgrounds_text_current
+ \anch_backgrounds_epos
\fi
\else
- \epos\v_anch_backgrounds_text_current
+ \anch_backgrounds_epos
\fi
\endgraf
\carryoverpar\endgroup
@@ -300,9 +348,165 @@
\global\let\checkpositionoverlays\relax
\fi}
+% shape handling
+
+\definesystemattribute[textbackground][public]
+
+% \def\page_prepare_backgrounds#1%
+% {\clf_collectbackgrounds\realpageno#1\relax}
+
+\def\anch_backgrounds_bpos
+ {\ifconditional\c_anch_backgrounds_pos_no_shape
+ \attribute\textbackgroundattribute\attributeunsetvalue
+ \bposkind\v_anch_backgrounds_text_current\plusthree
+ \else\ifnum\c_anch_backgrounds_pos_state=\plusone
+ \bposkind\v_anch_backgrounds_text_current\c_anch_backgrounds_pos_state
+ \clf_registerbackground{\v_anch_backgrounds_text_current}%
+ \else
+ \bposkind\v_anch_backgrounds_text_current\c_anch_backgrounds_pos_state
+ \attribute\textbackgroundattribute\attributeunsetvalue
+ \fi\fi}
+
+% plugs into other code
+
+\def\strc_floats_wrap_free_region
+ {\global\setbox\floatbox\hpack % we always need to wrap
+ {\ifconditional\c_strc_floats_trace_free
+ \strc_floats_show_free_region
+ \fi
+ \box\floatbox}}
+
+\startuseMPgraphic{floatfree}
+ draw_free_region(
+ \the\wd\floatbox,
+ \the\ht\floatbox,
+ \the\dp\floatbox,
+ \the\d_free_offset_left,
+ \the\d_free_offset_right,
+ \the\d_free_offset_top,
+ \the\d_free_offset_bottom
+ ) ;
+\stopuseMPgraphic
+
+\def\strc_floats_show_free_region
+ {\lower\dp\floatbox\hpack to \zeropoint {\useMPgraphic{floatfree}}}
+
+\newconditional\c_strc_floats_mark_as_free
+\newconditional\c_strc_floats_trace_free
+\newconstant \c_free_offset_kind
+\newdimen \d_free_offset_left
+\newdimen \d_free_offset_right
+\newdimen \d_free_offset_top
+\newdimen \d_free_offset_bottom
+
+\installtextracker{floats.freeregion}
+ {\settrue \c_strc_floats_trace_free}
+ {\setfalse\c_strc_floats_trace_free}
+
+\def\strc_floats_mark_as_free#1#2#3#4#5%
+ {\c_free_offset_kind #1%
+ \d_free_offset_left #2%
+ \d_free_offset_right #3%
+ \d_free_offset_top #4%
+ \d_free_offset_bottom#5%
+ \strc_floats_wrap_free_region
+ \anch_mark_tagged_box_free
+ \floatbox
+ \c_free_offset_kind
+ \d_free_offset_left
+ \d_free_offset_right
+ \d_free_offset_top
+ \d_free_offset_bottom}
+
+\ifx\strc_floats_mark_pag_as_free\relax \else
+ \writestatus{error}{wrong place for pag_as_free}\wait
+\fi
+
+\ifx\strc_floats_mark_par_as_free\relax \else
+ \writestatus{error}{wrong place for par_as_free}\wait
+\fi
+
+\def\strc_floats_mark_pag_as_free
+ {\ifpositioning
+ \ifconditional\c_strc_floats_mark_as_free
+ \strc_floats_mark_as_free
+ \plusone
+ \zeropoint
+ \zeropoint
+ \d_strc_floats_top
+ \d_strc_floats_bottom
+ \fi
+ \fi}
+
+\def\strc_floats_mark_par_as_free
+ {\ifpositioning
+ \ifconditional\c_strc_floats_mark_as_free
+ \ifcase\c_page_sides_float_type
+ \or % backspace
+ \strc_floats_mark_as_free
+ \plustwo
+ \zeropoint
+ \d_page_sides_leftskip
+ \d_page_sides_topskip
+ \d_page_sides_bottomskip
+ \or % leftedge
+ \strc_floats_mark_as_free
+ \plustwo
+ \zeropoint
+ \d_page_sides_leftskip
+ \d_page_sides_topskip
+ \d_page_sides_bottomskip
+ \or % leftmargin
+ \strc_floats_mark_as_free
+ \plustwo
+ \zeropoint
+ \d_page_sides_leftskip
+ \d_page_sides_topskip
+ \d_page_sides_bottomskip
+ \or % leftside
+ \strc_floats_mark_as_free
+ \plustwo
+ \d_page_sides_leftskip
+ \d_strc_floats_margin
+ \d_page_sides_topskip
+ \d_page_sides_bottomskip
+ \or % rightside
+ \strc_floats_mark_as_free
+ \plusthree
+ \d_strc_floats_margin
+ \d_page_sides_rightskip
+ \d_page_sides_topskip
+ \d_page_sides_bottomskip
+ \or % rightmargin
+ \strc_floats_mark_as_free
+ \plusthree
+ \d_page_sides_rightskip
+ \zeropoint
+ \d_page_sides_topskip
+ \d_page_sides_bottomskip
+ \or % rightedge
+ \strc_floats_mark_as_free
+ \plusthree
+ \d_page_sides_rightskip
+ \zeropoint
+ \d_page_sides_topskip
+ \d_page_sides_bottomskip
+ \or % cutspace
+ \strc_floats_mark_as_free
+ \plusthree
+ \d_page_sides_rightskip
+ \zeropoint
+ \d_page_sides_topskip
+ \d_page_sides_bottomskip
+ \fi
+ \fi
+ \fi}
+
+% so far
+
\setuptextbackground
[\c!mp=mpos:region:draw,
- \c!method=mpos:region, % mpos:regionshape
+ \c!method=mpos:region,
\c!state=\v!start,
\c!location=\v!text,
\c!leftoffset=\!!zeropoint, % 1em,
@@ -348,7 +552,6 @@
dashtype=1]
\startuseMPgraphic{mpos:region:setup}
- if unknown context_abck : input mp-abck.mpiv ; fi ;
boxgridtype := \MPvar{gridtype} ;
boxlinetype := \MPvar{linetype} ;
boxfilltype := \MPvar{filltype} ;
@@ -360,9 +563,13 @@
boxlineradius := \MPvar{lineradius} ;
boxlineoffset := \MPvar{lineoffset} ;
%
- def boxgridoptions = withcolor \MPvar{gridcolor} enddef ;
- def boxlineoptions = withcolor \MPvar{linecolor} enddef ;
- def boxfilloptions = withcolor \MPvar{fillcolor} enddef ;
+ def boxgridcolor = \MPvar{gridcolor} enddef ;
+ def boxlinecolor = \MPvar{linecolor} enddef ;
+ def boxfillcolor = \MPvar{fillcolor} enddef ;
+ %
+ def boxgridoptions = withcolor boxgridcolor enddef ;
+ def boxlineoptions = withcolor boxlinecolor enddef ;
+ def boxfilloptions = withcolor boxfillcolor enddef ;
\stopuseMPgraphic
\startuseMPgraphic{mpos:region:extra}
@@ -373,17 +580,6 @@
setbounds currentpicture to multibox ;
\stopuseMPgraphic
-% \startMPpositionmethod{mpos:region}
-% \startMPpositiongraphic{mpos:region}{fillcolor,filloffset,linecolor,gridcolor,linewidth,gridwidth,gridshift,lineradius,lineoffset}
-% \includeMPgraphic{mpos:region:setup} ;
-% \includeMPgraphic{mpos:region:extra} ;
-% \MPgetmultipars{\MPvar{self}}{\MPanchorid} ;
-% \includeMPgraphic{\MPvar{mp}} ;
-% \includeMPgraphic{mpos:region:anchor} ;
-% \stopMPpositiongraphic
-% \MPpositiongraphic{mpos:region}{}%
-% \stopMPpositionmethod
-
\startMPpositiongraphic{mpos:region}{fillcolor,filloffset,linecolor,gridcolor,linewidth,gridwidth,gridshift,lineradius,lineoffset}
\includeMPgraphic{mpos:region:setup} ;
\includeMPgraphic{mpos:region:extra} ;
@@ -392,12 +588,17 @@
\includeMPgraphic{mpos:region:anchor} ;
\stopMPpositiongraphic
-\startMPpositiongraphic{mpos:regionshape}{fillcolor,filloffset,linecolor,gridcolor,linewidth,gridwidth,gridshift,lineradius,lineoffset}
- \includeMPgraphic{mpos:region:setup} ;
- \includeMPgraphic{mpos:region:extra} ;
- \MPgetmultishapes{\MPvar{self}}{\MPanchorid} ;
- \includeMPgraphic{\MPvar{mp}} ;
- \includeMPgraphic{mpos:region:anchor} ;
+%D For old times sake:
+
+\startMPpositiongraphic{mpos:box}{fillcolor,linecolor,linewidth}
+ string tag; tag := "\MPvar{self}" ;
+ path box ; box := positionbox(tag) ;
+
+ box := box enlarged \MPvar{filloffset} ;
+ fill box withcolor \MPvar{fillcolor} ;
+ draw box withcolor \MPvar{linecolor} withpen pencircle scaled \MPvar{linewidth} ;
+
+ positioninregion;
\stopMPpositiongraphic
\startMPpositionmethod{mpos:region}
@@ -448,7 +649,6 @@
linewidth=1pt]
\startMPpositiongraphic{mpos:encircle}{linecolor,fillcolor,linewidth,lineoffset}
- if unknown context_apos : input mp-apos.mpiv ; fi ;
\MPgetposboxes{\MPvar{self}}{\MPanchorid}
if nofposboxes = 1 :
posboxes[1] := posboxes[1] enlarged \MPvar{lineoffset} cornered \MPvar{lineoffset} ;
@@ -464,7 +664,6 @@
linewidth=1pt]
\startMPpositiongraphic{mpos:connect}{linecolor,lineoffset,linewidth}
- if unknown context_apos : input mp-apos.mpiv ; fi ;
boxlinewidth := \MPvar{linewidth} ;
boxlineoffset := \MPvar{lineoffset} ;
def boxlineoptions = withcolor \MPvar{linecolor} enddef ;
diff --git a/tex/context/base/mkiv/anch-pgr.lua b/tex/context/base/mkiv/anch-pgr.lua
index b5c2ae628..8a63c5b54 100644
--- a/tex/context/base/mkiv/anch-pgr.lua
+++ b/tex/context/base/mkiv/anch-pgr.lua
@@ -6,236 +6,546 @@ if not modules then modules = { } end modules ['anch-pgr'] = {
license = "see context related readme files"
}
--- todo: we need to clean up lists (of previous pages)
+-- This is a bit messy module but backgrounds are messy anyway. Especially when we want to
+-- follow shapes. This will always be work in progress as it also depends on new features
+-- in context.
+--
+-- Alas, shapes and inline didn't work as expected end of 2016 so I had to pick up this
+-- thread again. But with regular excursions to listening to Brad Mehldau's Mehliana I
+-- could keep myself motivated. Some old stuff has been removed, some suboptimal code has
+-- been replaced. Background code is still not perfect, but some day ... the details manual
+-- will discuss this issue.
-local format = string.format
-local abs = math.abs
-local concat, sort = table.concat, table.sort
+local abs, div, floor, round, min, max = math.abs, math.div, math.floor, math.round, math.min, math.max
+local sort, concat = table.sort, table.concat
local splitter = lpeg.splitat(":")
local lpegmatch = lpeg.match
-local jobpositions = job.positions
-local formatters = string.formatters
+local jobpositions = job.positions
+local formatters = string.formatters
+local setmetatableindex = table.setmetatableindex
-local commands = commands
-local context = context
+local commands = commands
+local context = context
-local implement = interfaces.implement
+local implement = interfaces.implement
-local report_graphics = logs.reporter("graphics")
+local report_graphics = logs.reporter("backgrounds")
+local report_shapes = logs.reporter("backgrounds","shapes")
+local report_free = logs.reporter("backgrounds","free")
-local f_b_tag = formatters["b:%s"]
-local f_e_tag = formatters["e:%s"]
-local f_p_tag = formatters["p:%s"]
+local trace_shapes = false trackers.register("backgrounds.shapes", function(v) trace_shapes = v end)
+local trace_ranges = false trackers.register("backgrounds.shapes.ranges",function(v) trace_ranges = v end)
+local trace_free = false trackers.register("backgrounds.shapes.free", function(v) trace_free = v end)
-local f_tag_two = formatters["%s:%s"]
+local f_b_tag = formatters["b:%s"]
+local f_e_tag = formatters["e:%s"]
+local f_p_tag = formatters["p:%s"]
-local f_point = formatters["%p"]
-local f_pair = formatters["(%p,%p)"]
-local f_path = formatters["%--t--cycle"]
+local f_tag_two = formatters["%s:%s"]
-local function regionarea(r)
- local rx, ry = r.x, r.y
- local rw = rx + r.w
- local rh = ry + r.h
- local rd = ry - r.d
- return {
- f_pair(rx, rh - ry),
- f_pair(rw, rh - ry),
- f_pair(rw, rd - ry),
- f_pair(rx, rd - ry),
- }
-end
+local f_point = formatters["%p"]
+local f_pair = formatters["(%p,%p)"]
+local f_path = formatters["%--t--cycle"]
+local f_pair_i = formatters["(%r,%r)"] -- rounded
+
+graphics = graphics or { }
+local backgrounds = { }
+graphics.backgrounds = backgrounds
+
+-- -- --
+
+local texsetattribute = tex.setattribute
+local pdfgetpos = pdf.getpos -- why not a generic name !
+
+local a_textbackground = attributes.private("textbackground")
+
+local nuts = nodes.nuts
+local tonut = nodes.tonut
+local tonode = nodes.tonode
+
+local new_latelua = nuts.pool.latelua
+local new_rule = nuts.pool.rule
+local new_kern = nuts.pool.kern
+local new_hlist = nuts.pool.hlist
+
+local getbox = nuts.getbox
+local getid = nuts.getid
+----- getlist = nuts.getlist
+local setlink = nuts.setlink
+local getheight = nuts.getheight
+local getdepth = nuts.getdepth
+
+local nodecodes = nodes.nodecodes
+local localpar_code = nodecodes.localpar
--- we can use a 'local t, n' and reuse the table
+local insert_before = nuts.insert_before
+local insert_after = nuts.insert_after
-local eps = 2
+local processranges = nodes.processranges
-local function add(t,x,y,last,direction)
- local n = #t
- if n == 0 then
- t[n+1] = { x, y }
+local unsetvalue = attributes.unsetvalue
+
+local jobpositions = job.positions
+
+local data = { }
+local realpage = 1
+local recycle = 1000 -- only tables can overflow this
+local enabled = false
+
+-- Freeing the data is somewhat tricky as we can have backgrounds spanning
+-- many pages but for an arbitrary background shape that is not so common.
+
+local function check(a,index,depth,d,where,ht,dp)
+ -- this is not yet r2l ready
+ local w = d.shapes[realpage]
+ local x, y = pdfgetpos()
+ if trace_ranges then
+ report_shapes("attribute %i, index %i, depth %i, location %s, position (%p,%p)",
+ a,index,depth,where,x,y)
+ end
+ local n = #w
+ if d.index ~= index then
+ n = n + 1
+ d.index = index
+ d.depth = depth
+-- w[n] = { x, x, y, ht, dp }
+ w[n] = { y, ht, dp, x, x }
else
- local tn = t[n]
- local lx = tn[1]
- local ly = tn[2]
- if x == lx and y == ly then
- -- quick skip
- elseif n == 1 then
- -- if abs(lx-x) <= eps or abs(ly-y) <= eps then
- if abs(lx-x) > eps or abs(ly-y) > eps then
- t[n+1] = { x, y }
+ local wn = w[n]
+ local wh = wn[2]
+ local wd = wn[3]
+ if depth < d.depth then
+ local wy = wn[1]
+ wn[1] = y
+ d.depth = depth
+ local dy = wy - y
+ wh = wh - dy
+ wd = wd - dy
+ end
+ if where == "r" then
+ if x > wn[5] then
+ wn[5] = x
end
else
- local tm = t[n-1]
- local px = tm[1]
- local py = tm[2]
- if (direction == "down" and y > ly) or (direction == "up" and y < ly) then
- -- move back from too much hang
- elseif abs(lx-px) <= eps and abs(lx-x) <= eps then
- if abs(ly-y) > eps then
- tn[2] = y
- end
- elseif abs(ly-py) <= eps and abs(ly-y) <= eps then
- if abs(lx-x) > eps then
- tn[1] = x
- end
- elseif not last then
- t[n+1] = { x, y }
+ if x < wn[4] then
+ wn[4] = x
end
end
+ if ht > wh then
+ wn[2] = ht
+ end
+ if dp > wd then
+ wn[3] = dp
+ end
end
+ -- inspect(w)
end
--- local function add(t,x,y,last)
--- t[#t+1] = { x, y }
+local index = 0
+
+local function flush(head,f,l,a,parent,depth)
+ local d = data[a]
+ if d then
+ local ix = index
+ local ht = getheight(parent)
+ local dp = getdepth(parent)
+ local ln = new_latelua(function() check(a,ix,depth,d,"l",ht,dp) end)
+ local rn = new_latelua(function() check(a,ix,depth,d,"r",ht,dp) end)
+ if trace_ranges then
+ ln = new_hlist(setlink(new_rule(65536,65536*4,0),new_kern(-65536),ln))
+ rn = new_hlist(setlink(new_rule(65536,0,65536*4),new_kern(-65536),rn))
+ end
+ if getid(f) == localpar_code then -- we need to clean this mess
+ insert_after(head,f,ln)
+ else
+ head, f = insert_before(head,f,ln)
+ end
+ insert_after(head,l,rn)
+ end
+ return head, true
+end
+
+local function registerbackground(name)
+ local n = #data + 1
+ if n > recycle then
+ -- we could also free all e: that are beyond a page but we don't always
+ -- know the page so a recycle is nicer and the s lists are kept anyway
+ -- so the amount of kept data is not that large
+ n = 1
+ end
+ local b = jobpositions.tobesaved["b:"..name]
+ if b then
+ local s = setmetatableindex("table")
+ b.s = s
+ data[n] = {
+ bpos = b,
+ name = name,
+ n = n,
+ shapes = s,
+ count = 0,
+ sindex = 0,
+ }
+ texsetattribute(a_textbackground,n)
+ if not enabled then
+ nodes.tasks.enableaction("contributers", "nodes.handlers.textbackgrounds")
+ enabled = true
+ end
+ else
+ texsetattribute(a_textbackground,unsetvalue)
+ end
+end
+
+-- local function collectbackgrounds(r,n)
+-- if enabled then
+-- local parent = getbox(n)
+-- local head = getlist(parent)
+-- realpage = r
+-- processranges(a_textbackground,flush,head) -- ,parent)
+-- end
-- end
+--
+-- interfaces.implement {
+-- name = "collectbackgrounds",
+-- actions = collectbackgrounds,
+-- arguments = { "integer", "integer" }
+-- }
+
+nodes.handlers.textbackgrounds = function(head,where,parent) -- we have hlistdir and local dir
+ -- todo enable action in register
+ head = tonut(head)
+ index = index + 1
+ local head, done = processranges(a_textbackground,flush,head,parent)
+ return tonode(head), done
+end
+
+interfaces.implement {
+ name = "registerbackground",
+ actions = registerbackground,
+ arguments = { "string" }
+}
+
+-- optimized already but we can assume a cycle i.e. prune the last point and then
+-- even less code .. we could merge some loops but his is more robust
+
+local function topairs(t,n)
+ local r = { }
+ for i=1,n do
+ local ti = t[i]
+ r[i] = f_pair_i(ti[1]/65556,ti[2]/65536)
+ end
+ return concat(r," ")
+end
+
+local eps = 65536 / 4 -- 2
+local pps = eps
+local nps = - pps
+
+local function unitvector(x,y)
+ if x < pps and x > nps then
+ x = 0
+ elseif x < 0 then
+ x = -1
+ else
+ x = 1
+ end
+ if y < pps and y > nps then
+ y = 0
+ elseif y < 0 then
+ y = -1
+ else
+ y = 1
+ end
+ return x, y
+end
local function finish(t)
- local n = #t
- if n > 1 then
- local first = t[1]
- local last = t[n]
- if abs(first[1]-last[1]) <= eps and abs(first[2]-last[2]) <= eps then
- t[n] = nil
+ local tm = #t
+ if tm < 2 then
+ return
+ end
+ if trace_ranges then
+ report_shapes("initial list: %s",topairs(t,tm))
+ end
+ -- remove similar points
+ local n = 1
+ local tn = tm
+ local tf = t[1]
+ local tx = tf[1]
+ local ty = tf[2]
+ for i=2,#t do
+ local ti = t[i]
+ local ix = ti[1]
+ local iy = ti[2]
+ local dx = ix - tx
+ local dy = iy - ty
+ if dx > eps or dx < - eps or dy > eps or dy < - eps then
+ n = n + 1
+ t[n] = ti
+ tx = ix
+ ty = iy
end
end
-end
+ if trace_shapes then
+ report_shapes("removing similar points: %s",topairs(t,n))
+ end
+ if n > 2 then
+ -- remove redundant points
+ repeat
+ tn = n
+ n = 0
+ local tm = t[tn]
+ local tmx = tm[1]
+ local tmy = tm[2]
+ local tp = t[1]
+ local tpx = tp[1]
+ local tpy = tp[2]
+ for i=1,tn do -- while and only step when done
+ local ti = tp
+ local tix = tpx
+ local tiy = tpy
+ if i == tn then
+ tp = t[1]
+ else
+ tp = t[i+1]
+ end
+ tpx = tp[1]
+ tpy = tp[2]
-local function clip(t,ytop,ybot)
- local first, last = 1, #t
- for i=first,last do
- local y = t[i][2]
- if ytop < y then
- first = i
+ local vx1, vx2 = unitvector(tix - tmx,tpx - tix)
+ if vx1 ~= vx2 then
+ n = n + 1
+ t[n] = ti
+ else
+ local vy1, vy2 = unitvector(tiy - tmy,tpy - tiy)
+ if vy1 ~= vy2 then
+ n = n + 1
+ t[n] = ti
+ end
+ end
+
+ tmx = tix
+ tmy = tiy
+ end
+ until n == tn or n <= 2
+ if trace_shapes then
+ report_shapes("removing redundant points: %s",topairs(t,n))
end
- if ybot > y then
- last = i
- break
+ -- remove spikes
+ if n > 2 then
+ repeat
+ tn = n
+ n = 0
+ local tm = t[tn]
+ local tmx = tm[1]
+ local tmy = tm[2]
+ local tp = t[1]
+ local tpx = tp[1]
+ local tpy = tp[2]
+ for i=1,tn do -- while and only step when done
+ local ti = tp
+ local tix = tpx
+ local tiy = tpy
+ if i == tn then
+ tp = t[1]
+ else
+ tp = t[i+1]
+ end
+ tpx = tp[1]
+ tpy = tp[2]
+
+ local vx1, vx2 = unitvector(tix - tmx,tpx - tix)
+ if vx1 ~= - vx2 then
+ n = n + 1
+ t[n] = ti
+ else
+ local vy1, vy2 = unitvector(tiy - tmy,tpy - tiy)
+ if vy1 ~= - vy2 then
+ n = n + 1
+ t[n] = ti
+ end
+ end
+
+ tmx = tix
+ tmy = tiy
+ end
+ until n == tn or n <= 2
+ if trace_shapes then
+ report_shapes("removing spikes: %s",topairs(t,n))
+ end
+ end
+ end
+ -- prune trailing points
+ if tm > n then
+ for i=tm,n+1,-1 do
+ t[i] = nil
end
end
- local lp = { }
- lp[#lp+1] = { t[first][1], ytop }
- for i=first+1,last-1 do
- lp[#lp+1] = { t[i][1], t[i][2] }
+ if n > 1 then
+ local tf = t[1]
+ local tl = t[n]
+ local dx = tf[1] - tl[1]
+ local dy = tf[2] - tl[2]
+ if dx > eps or dx < - eps or dy > eps or dy < - eps then
+ -- different points
+ else
+ -- saves a point (as we -- cycle anyway)
+ t[n] = nil
+ n = n -1
+ end
+ if trace_shapes then
+ report_shapes("removing cyclic endpoints: %s",topairs(t,n))
+ end
end
- lp[#lp+1] = { t[last][1], ybot }
- return lp
+ return t
end
--- todo: mark regions and free paragraphs in collected
+local eps = 65536
-local function shapes(r,rx,ry,rw,rh,rd,lytop,lybot,rytop,rybot,obeyhang)
- -- we assume that we only hang per page and not cross pages
- -- which makes sense as hanging is only uses in special cases
+-- The next function can introduce redundant points but these are removed later on
+-- in the unspiker. It makes checking easier.
+
+local function shape(kind,b,p,realpage,xmin,xmax,ymin,ymax,fh,ld)
+ local s = b.s
+ if not s then
+ if trace_shapes then
+ report_shapes("calculating %s area, no shape",kind)
+ end
+ return
+ end
+ s = s[realpage]
+ if not s then
+ if trace_shapes then
+ report_shapes("calculating %s area, no shape for page %s",kind,realpage)
+ end
+ return
+ end
+ local ns = #s
+ if ns == 0 then
+ if trace_shapes then
+ report_shapes("calculating %s area, empty shape for page %s",kind,realpage)
+ end
+ return
+ end
--
- -- we can remove data as soon as a page is done so we could
- -- remember per page and discard areas after each shipout
- local leftshape, rightshape
- leftshape = { { rx, rh } } -- spikes get removed so we can start at the edge
- rightshape = { { rw, rh } } -- even if we hang next
- local paragraphs = r.paragraphs
- local extending = false
- if paragraphs then
- for i=1,#paragraphs do
- local p = paragraphs[i]
- local ha = p.ha
- if obeyhang and ha and ha ~= 0 then
- local py = p.y
- local ph = p.h
- local pd = p.d
- local hi = p.hi
- local hang = ha * (ph + pd)
- local py_ph = py + ph
- -- ha < 0 hi < 0 : right top
- -- ha < 0 hi > 0 : left top
- if ha < 0 then
- if hi < 0 then -- right
- add(rightshape,rw, py_ph,"up")
- add(rightshape,rw + hi,py_ph,"up")
- add(rightshape,rw + hi,py_ph + hang,"up")
- add(rightshape,rw, py_ph + hang,"up")
- else
- -- left
- add(leftshape,rx,py_ph,"down")
- add(leftshape,rx + hi,py_ph,"down")
- add(leftshape,rx + hi,py_ph + hang,"down")
- add(leftshape,rx,py_ph + hang,"down")
+ if trace_shapes then
+ report_shapes("calculating %s area, using shape for page %s",kind,realpage)
+ end
+ -- it's a bit inefficient to use the par values and later compensate for b and
+ -- e but this keeps the code (loop) cleaner
+ local ph = p and p.h or 0
+ local pd = p and p.d or 0
+ --
+ xmax = xmax + eps
+ xmin = xmin - eps
+ ymax = ymax + eps
+ ymin = ymin - eps
+ local ls = { } -- left shape
+ local rs = { } -- right shape
+ local pl = nil -- previous left x
+ local pr = nil -- previous right x
+ local n = 0
+ local xl = nil
+ local xr = nil
+ local mh = ph -- min
+ local md = pd -- min
+ for i=1,ns do
+ local si = s[i]
+ local y = si[1]
+ local ll = si[4] -- can be sparse
+ if ll then
+ xl = ll
+ local rr = si[5] -- can be sparse
+ if rr then
+ xr = rr
+ end
+ end
+ if trace_ranges then
+ report_shapes("original : [%02i] xl=%p xr=%p y=%p",i,xl,xr,y)
+ end
+ if xl ~= xr then -- could be catched in the finalizer
+ local xm = xl + (xr - xl)/2 -- midpoint should be in region
+ if xm >= xmin and xm <= xmax and y >= ymin and y <= ymax then
+ local ht = si[2] -- can be sparse
+ if ht then
+ ph = ht
+ local dp = si[3] -- can be sparse
+ if dp then
+ pd = dp
end
- else
- -- maybe some day
end
- extending = true -- false
- else -- we need to clip to the next par
- local ps = p.ps
- if ps then
- local py = p.y
- local ph = p.h
- local pd = p.d
- local step = ph + pd
- local size = #ps * step
- local py_ph = py + ph
- add(leftshape,rx,py_ph,"up")
- add(rightshape,rw,py_ph,"down")
- for i=1,#ps do
- local p = ps[i]
- local l = p[1]
- local w = p[2]
- add(leftshape,rx + l, py_ph,"up")
- add(rightshape,rx + l + w, py_ph,"down")
- py_ph = py_ph - step
- add(leftshape,rx + l, py_ph,"up")
- add(rightshape,rx + l + w, py_ph,"down")
+ local h = y + (ph < mh and mh or ph)
+ local d = y - (pd < md and md or pd)
+ if pl then
+ n = n + 1
+ ls[n] = { pl, h }
+ rs[n] = { pr, h }
+ if trace_ranges then
+ report_shapes("paragraph : [%02i] xl=%p xr=%p y=%p",i,pl,pr,h)
end
- extending = true
- elseif extending then
- local py = p.y
- local ph = p.h
- local pd = p.d
- local py_ph = py + ph
- local py_pd = py - pd
- add(leftshape,leftshape[#leftshape][1],py_ph,"up")
- add(rightshape,rightshape[#rightshape][1],py_ph,"down")
- add(leftshape,rx,py_ph,"up") -- shouldn't this be py_pd
- add(rightshape,rw,py_ph,"down") -- shouldn't this be py_pd
- extending = false
+ end
+ n = n + 1
+ ls[n] = { xl, h }
+ rs[n] = { xr, h }
+ if trace_ranges then
+ report_shapes("height : [%02i] xl=%p xr=%p y=%p",i,xl,xr,h)
+ end
+ n = n + 1
+ ls[n] = { xl, d }
+ rs[n] = { xr, d }
+ if trace_ranges then
+ report_shapes("depth : [%02i] xl=%p xr=%p y=%p",i,xl,xr,d)
end
end
+ pl, pr = xl, xr
+ else
+ if trace_ranges then
+ report_shapes("ignored : [%02i] xl=%p xr=%p y=%p",i,xl,xr,y)
+ end
end
end
- -- we can have a simple variant when no paragraphs
- if extending then
- -- not ok
- leftshape[#leftshape][2] = rd
- rightshape[#rightshape][2] = rw
- else
- add(leftshape,rx,rd,"up")
- add(rightshape,rw,rd,"down")
+ --
+ if true and n > 0 then
+ -- use height of b and depth of e, maybe check for weird border
+ -- cases here
+ if fh then
+ local lsf, rsf = ls[1], rs[1]
+ if lsf[2] < fh then
+ lsf[2] = fh
+ end
+ if rsf[2] < fh then
+ rsf[2] = fh
+ end
+ end
+ if fd then
+ local lsl, rsl = ls[n], rs[n]
+ if lsl[2] > fd then
+ lsl[2] = fd
+ end
+ if rsl[2] > fd then
+ rsl[2] = fd
+ end
+ end
+ end
+ --
+ for i=n,1,-1 do
+ n = n + 1 rs[n] = ls[i]
end
- return clip(leftshape,lytop,lybot), clip(rightshape,rytop,rybot)
+ return rs
end
--- local function shapes(r,rx,ry,rw,rh,rd,lytop,lybot,rytop,rybot,obeyhang)
--- local leftshape = { { rx, rh }, { rx, rd } }
--- local rightshape = { { rw, rh }, { rw, rd } }
--- return clip(leftshape,lytop,lybot), clip(rightshape,rytop,rybot)
--- end
-
-local function singlepart(b,e,r,left,right,obeyhang)
+local function singlepart(b,e,p,realpage,r,left,right)
local bx, by = b.x, b.y
local ex, ey = e.x, e.y
local rx, ry = r.x, r.y
+ local bh, bd = by + b.h, by - b.d
+ local eh, ed = ey + e.h, ey - e.d
+ local rh, rd = ry + r.h, ry - r.d
local rw = rx + r.w
- local rh = ry + r.h
- local rd = ry - r.d
if left then
rx = rx + left
rw = rw - right
end
- local bh = by + b.h
- local bd = by - b.d
- local eh = ey + e.h
- local ed = ey - e.d
if ex == rx then
-- We probably have a strut at the next line so we force a width
-- although of course it is better to move up. But as we have whitespace
@@ -244,169 +554,160 @@ local function singlepart(b,e,r,left,right,obeyhang)
end
local area
if by == ey then
+ if trace_shapes then
+ report_shapes("calculating single area, partial line")
+ end
+ area = {
+ { bx, bh },
+ { ex, eh },
+ { ex, ed },
+ { bx, bd },
+ }
+ elseif b.k == 2 then
area = {
- f_pair(bx,bh-ry),
- f_pair(ex,eh-ry),
- f_pair(ex,ed-ry),
- f_pair(bx,bd-ry),
+ { rx, bh },
+ { rw, bh },
+ { rw, ed },
+ { rx, ed },
}
else
- area = { }
- local leftshapes, rightshapes = shapes(r,rx,ry,rw,rh,rd,bd,ed,bh,eh,obeyhang)
- add(area,bx,bh-ry)
- for i=1,#rightshapes do
- local ri = rightshapes[i]
- add(area,ri[1],ri[2]-ry)
- end
- add(area,ex,eh-ry)
- add(area,ex,ed-ry)
- for i=#leftshapes,1,-1 do
- local li = leftshapes[i]
- add(area,li[1],li[2]-ry)
- end
- add(area,bx,bd-ry)
- add(area,bx,bh-ry,true) -- finish last straight line (but no add as we cycle)
- finish(area)
- for i=1,#area do
- local a = area[i]
- area[i] = f_pair(a[1],a[2])
- end
+ area = shape("single",b,p,realpage,rx,rw,rd,rh,bh,ed)
+ end
+ if not area then
+ area = {
+ { bx, bh },
+ { rw, bh },
+ { rw, eh },
+ { ex, eh },
+ { ex, ed },
+ { rx, ed },
+ { rx, bd },
+ { bx, bd },
+ }
end
return {
location = "single",
region = r,
- area = area,
+ area = finish(area),
}
end
-local function firstpart(b,r,left,right,obeyhang)
+local function firstpart(b,e,p,realpage,r,left,right)
local bx, by = b.x, b.y
local rx, ry = r.x, r.y
+ local bh, bd = by + b.h, by - b.d
+ local rh, rd = ry + r.h, ry - r.d
local rw = rx + r.w
- local rh = ry + r.h
- local rd = ry - r.d
if left then
rx = rx + left
rw = rw - right
end
- local bh = by + b.h
- local bd = by - b.d
- local area = { }
- local leftshapes, rightshapes = shapes(r,rx,ry,rw,rh,rd,bd,rd,bh,rd,obeyhang)
- add(area,bx,bh-ry)
- for i=1,#rightshapes do
- local ri = rightshapes[i]
- add(area,ri[1],ri[2]-ry)
- end
- for i=#leftshapes,1,-1 do
- local li = leftshapes[i]
- add(area,li[1],li[2]-ry)
- end
- add(area,bx,bd-ry)
- add(area,bx,bh-ry,true) -- finish last straight line (but no add as we cycle)
- finish(area)
- for i=1,#area do
- local a = area[i]
- area[i] = f_pair(a[1],a[2])
+ local area = shape("first",b,p,realpage,rx,rw,rd,rh,bh,false)
+ if not area then
+ if b.k == 2 then
+ area = {
+ { rx, bh },
+ { rw, bh },
+ { rw, rd },
+ { rx, rd },
+ }
+ else
+ area = {
+ { bx, bh },
+ { rw, bh },
+ { rw, rd }, -- { rw, eh },
+ { rx, rd }, -- { rx, ed },
+ { rx, bd },
+ { bx, bd },
+ }
+ end
end
return {
location = "first",
region = r,
- area = area,
+ area = finish(area),
}
end
-local function middlepart(r,left,right,obeyhang)
+local function middlepart(b,e,p,realpage,r,left,right)
local rx, ry = r.x, r.y
+ local rh, rd = ry + r.h, ry - r.d
local rw = rx + r.w
- local rh = ry + r.h
- local rd = ry - r.d
if left then
rx = rx + left
rw = rw - right
end
- local area = { }
- local leftshapes, rightshapes = shapes(r,rx,ry,rw,rh,rd,rh,rd,rh,rd,obeyhang)
- for i=#leftshapes,1,-1 do
- local li = leftshapes[i]
- add(area,li[1],li[2]-ry)
- end
- for i=1,#rightshapes do
- local ri = rightshapes[i]
- add(area,ri[1],ri[2]-ry)
- end
- finish(area)
- for i=1,#area do
- local a = area[i]
- area[i] = f_pair(a[1],a[2])
+ local area = shape("middle",b,p,realpage,rx,rw,rd,rh,false,false)
+ if not area then
+ area = {
+ { rw, rh },
+ { rw, rd },
+ { rx, rd },
+ { rx, rh },
+ }
end
return {
location = "middle",
region = r,
- area = area,
+ area = finish(area),
}
end
-local function lastpart(e,r,left,right,obeyhang)
+local function lastpart(b,e,p,realpage,r,left,right)
local ex, ey = e.x, e.y
local rx, ry = r.x, r.y
+ local eh, ed = ey + e.h, ey - e.d
+ local rh, rd = ry + r.h, ry - r.d
local rw = rx + r.w
- local rh = ry + r.h
- local rd = ry - r.d
if left then
rx = rx + left
rw = rw - right
end
- local eh = ey + e.h
- local ed = ey - e.d
- local area = { }
- -- two cases: till end and halfway e line
- local leftshapes, rightshapes = shapes(r,rx,ry,rw,rh,rd,rh,ed,rh,eh,obeyhang)
- for i=1,#rightshapes do
- local ri = rightshapes[i]
- add(area,ri[1],ri[2]-ry)
- end
- add(area,ex,eh-ry)
- add(area,ex,ed-ry)
- for i=#leftshapes,1,-1 do
- local li = leftshapes[i]
- add(area,li[1],li[2]-ry)
- end
- finish(area)
- for i=1,#area do
- local a = area[i]
- area[i] = f_pair(a[1],a[2])
+ local area = shape("last",b,p,realpage,rx,rw,rd,rh,false,ed)
+ if not area then
+ if b.k == 2 then
+ area = {
+ { rw, rh },
+ { rw, ed },
+ { rx, ed },
+ { rx, rh },
+ }
+ else
+ area = {
+ { rw, rh }, -- { rw, bh },
+ { rw, eh },
+ { ex, eh },
+ { ex, ed },
+ { rx, ed },
+ { rx, rh }, -- { rx, bd },
+ }
+ end
end
return {
location = "last",
region = r,
- area = area,
+ area = finish(area),
}
end
-graphics = graphics or { }
-local backgrounds = { }
-
-graphics.backgrounds = backgrounds
-
-local function calculatemultipar(tag,obeyhang)
+local function calculatemultipar(tag)
local collected = jobpositions.collected
local b = collected[f_b_tag(tag)]
local e = collected[f_e_tag(tag)]
if not b or not e then
- report_graphics("invalid tag %a",tag)
+ report_shapes("invalid tag %a",tag)
return { }
end
local br = b.r
local er = e.r
if not br or not er then
- report_graphics("invalid region for %a",tag)
+ report_shapes("invalid region for %a",tag)
return { }
end
local btag, bindex = lpegmatch(splitter,br)
local etag, eindex = lpegmatch(splitter,er)
if not bindex or not eindex or btag ~= etag then
- report_graphics("invalid indices for %a",tag)
+ report_shapes("invalid indices for %a",tag)
return { }
end
local bindex = tonumber(bindex)
@@ -415,40 +716,42 @@ local function calculatemultipar(tag,obeyhang)
-- entries and these are shared. We compensate left/right based on the columns
-- x and w but need to take the region into acount where the specification was
-- flushed and not the begin pos's region, because otherwise we get the wrong
- -- compensation for assymetrical doublesided layouts.
- local left = 0
+ -- compensation for asymetrical doublesided layouts.
+ local left = 0
local right = 0
- local rc = b.c
+ local bc = b.c
+ local rc = bc and collected[bc]
if rc then
- rc = collected[rc]
- if rc then
- local tb = collected[rc.r]
- if tb then
- left = -(tb.x - rc.x)
- right = (tb.w - rc.w - left) -- tb.x - rc.x
- end
+ local tb = collected[rc.r]
+ if tb then
+ left = -(tb.x - rc.x)
+ right = (tb.w - rc.w - left)
end
end
-- Obeying intermediate changes of left/rightskip makes no sense as it will
-- look bad, so we only look at the begin situation.
local bn = b.n
- if bn then
- local bp = collected[f_p_tag(bn)]
- if bp then
- left = left + bp.ls
- right = right + bp.rs
- end
+ local p = bn and collected[f_p_tag(bn)] -- par
+ if p then
+ left = left + (p.ls or 0)
+ right = right + (p.rs or 0)
+ end
+ --
+ local bp = b.p -- page
+ if trace_shapes then
+ report_shapes("tag %a, left %p, right %p, par %s, page %s, column %s",
+ left,right,bn or "-",bp or "-",bc or "-")
end
--
if bindex == eindex then
return {
- list = { [b.p] = { singlepart(b,e,collected[br],left,right,obeyhang) } },
+ list = { [bp] = { singlepart(b,e,p,bp,collected[br],left,right) } },
bpos = b,
epos = e,
}
else
local list = {
- [b.p] = { firstpart(b,collected[br],left,right,obeyhang) },
+ [bp] = { firstpart(b,e,p,bp,collected[br],left,right) },
}
for i=bindex+1,eindex-1 do
br = f_tag_two(btag,i)
@@ -456,21 +759,23 @@ local function calculatemultipar(tag,obeyhang)
if not r then
report_graphics("invalid middle for %a",br)
else
- local p = r.p
- local pp = list[p]
+ local rp = r.p -- page
+ local pp = list[rp]
+ local mp = middlepart(b,e,p,rp,r,left,right)
if pp then
- pp[#pp+1] = middlepart(r,left,right,obeyhang)
+ pp[#pp+1] = mp
else
- list[p] = { middlepart(r,left,right,obeyhang) }
+ list[rp] = { mp }
end
end
end
- local p = e.p
- local pp = list[p]
+ local ep = e.p -- page
+ local pp = list[ep]
+ local lp = lastpart(b,e,p,ep,collected[er],left,right)
if pp then
- pp[#pp+1] = lastpart(e,collected[er],left,right,obeyhang)
+ pp[#pp+1] = lp
else
- list[p] = { lastpart(e,collected[er],left,right,obeyhang) }
+ list[ep] = { lp }
end
return {
list = list,
@@ -480,41 +785,8 @@ local function calculatemultipar(tag,obeyhang)
end
end
--- local pending = { } -- needs gc
---
--- local function register(data,n,anchor)
--- local pa = pending[anchor]
--- if not pa then
--- pa = { }
--- pending[anchor] = pa
--- end
--- for page, pagedata in next, data do
--- local pap = pa[page]
--- if pap then
--- pap[#pap+1] = n
--- else
--- pa[page] = { n }
--- end
--- end
--- end
---
--- function backgrounds.registered(anchor,page)
--- local pa = pending[anchor]
--- if pa then
--- concat(pa,",")
--- else
--- return ""
--- end
--- end
-
local pbg = { } -- will move to pending
-function backgrounds.calculatemultipar(n)
- if not pbg[n] then
- pbg[n] = calculatemultipar("pbg",n) or { }
- end
-end
-
local multilocs = {
single = 1, -- maybe 0
first = 1,
@@ -524,7 +796,7 @@ local multilocs = {
-- if unknown context_abck : input mp-abck.mpiv ; fi ;
-local f_template_a = [[
+local f_template_a = formatters[ [[
path multiregs[], multipars[], multibox ;
string multikind[] ;
numeric multilocs[], nofmultipars ;
@@ -534,69 +806,340 @@ numeric par_strut_height, par_strut_depth, par_line_height ;
par_strut_height := %p ;
par_strut_depth := %p ;
par_line_height := %p ;
-]]
+]] ]
-local f_template_b = [[
+local f_template_b = formatters[ [[
multilocs[%s] := %s ;
multikind[%s] := "%s" ;
multipars[%s] := (%--t--cycle) shifted - (%p,%p) ;
-]]
+]] ]
-local f_template_c = [[
-multiregs[%s] := (%--t--cycle) shifted - %s ;
-]]
+-- unspiked(simplified(%--t--cycle)) shifted - (%p,%p) ;
-local f_template_d = [[
+local f_template_c = formatters[ [[
setbounds currentpicture to multibox ;
-]]
-
-f_template_a = formatters[f_template_a]
-f_template_b = formatters[f_template_b]
-f_template_c = formatters[f_template_c]
-f_template_d = formatters[f_template_d]
-
-local function fetchmultipar(n,anchor,page,obeyhang)
- local data = pbg[n]
- if not data then
- data = calculatemultipar(n,obeyhang)
- pbg[n] = data -- can be replaced by register
- -- register(data.list,n,anchor)
- end
- if data then
- local list = data.list
+]] ]
+
+local function freemultipar(pagedata,frees) -- ,k
+ -- if k == 3 then
+ -- -- tables have local regions
+ -- return
+ -- end
+ if not frees then
+ return
+ end
+ local nfree = #frees
+ if nfree == 0 then
+ return
+ end
+ for i=1,#pagedata do
+ local data = pagedata[i]
+ local area = data.area
+
+ if area then
+
+ local region = data.region
+ local y = 0 -- region.y
+ -- local x = region.x
+ local areas = { }
+ data.areas = areas
+
+ local f_1, n_1 = { }, 0
+ local f_2, n_2 = { }, 0
+ for i=1,#frees do
+ local f = frees[i]
+ local k = f.k
+ if k == 1 then -- pag
+ n_1 = n_1 + 1
+ f_1[n_1] = f
+ elseif k == 2 or k == 3 then -- par
+ n_2 = n_2 + 1
+ f_2[n_2] = f
+ end
+ end
+
+ local lineheight = tex.dimen.lineheight
+
+ -- page floats
+
+ local function check_one(free1,free2)
+ local temp = { }
+ local some = false
+ local top = (free2 and (y + free2.y + free2.h + (free2.to or 0))) or false
+ local bot = (free1 and (y + free1.y - free1.d - (free1.bo or 0))) or false
+ for i=1,#area do
+ local a = area[i]
+ local x = a[1]
+ local y = a[2]
+ if free2 and y <= top then
+ y = top
+ end
+ if free1 and y >= bot then
+ y = bot
+ end
+ if not some then
+ some = y
+ elseif some == true then
+ -- done
+ elseif y ~= some then
+ some = true
+ end
+ temp[i] = { x, y }
+ end
+ if some == true then
+ areas[#areas+1] = temp
+ end
+ end
+
+ if n_1 > 0 then
+ check_one(false,f_1[1])
+ for i=2,n_1 do
+ check_one(f_1[i-1],f_1[i])
+ end
+ check_one(f_1[n_1],false)
+ end
+
+ -- par floats
+
+ if #areas == 0 then
+ areas[1] = area
+ end
+
+ -- we can collect the coordinates first
+
+ local function check_two(area,frees)
+ local ul = area[1]
+ local ur = area[2]
+ local lr = area[3]
+ local ll = area[4]
+ local ulx, uly = ul[1], ul[2]
+ local urx, ury = ur[1], ur[2]
+ local lrx, lry = lr[1], lr[2]
+ local llx, lly = ll[1], ll[2]
+
+ local temp = { }
+ local n = 0
+ local done = false
+
+ for i=1,#frees do
+ local free = frees[i]
+ local fx = free.x
+ local fy = free.y
+ local ymax = y + fy + free.h + (free.to or 0)
+ local ymin = y + fy - free.d - (free.bo or 0)
+ local xmin = fx - (free.lo or 0)
+ local xmax = fx + free.w + (free.ro or 0)
+ if free.k == 3 then
+ if uly <= ymax and uly >= ymin and lly <= ymin then
+ if trace_free then
+ report_free("case 1, top, right") -- ok
+ end
+ n = n + 1 temp[n] = { xmin, ury }
+ n = n + 1 temp[n] = { xmin, ymin }
+ n = n + 1 temp[n] = { lrx, ymin }
+ n = n + 1 temp[n] = { lrx, lry }
+ done = true
+ elseif uly >= ymax and lly <= ymin then
+ if trace_free then
+ report_free("case 2, outside, right") -- ok
+ end
+ if uly - ymax < lineheight then
+ n = n + 1 temp[n] = { xmin, ury }
+ else
+ n = n + 1 temp[n] = { urx, ury }
+ n = n + 1 temp[n] = { urx, ymax }
+ end
+ n = n + 1 temp[n] = { xmin, ymax }
+ n = n + 1 temp[n] = { xmin, ymin }
+ n = n + 1 temp[n] = { lrx, ymin }
+ n = n + 1 temp[n] = { lrx, lry }
+ done = true
+ elseif lly <= ymax and lly >= ymin and uly >= ymax then
+ if trace_free then
+ report_free("case 3, bottom, right")
+ end
+ if uly - ymax < lineheight then
+ n = n + 1 temp[n] = { xmin, ury }
+ else
+ n = n + 1 temp[n] = { urx, ury }
+ n = n + 1 temp[n] = { urx, ymax }
+ end
+ n = n + 1 temp[n] = { xmin, ymax }
+ n = n + 1 temp[n] = { xmin, lry }
+ done = true
+ elseif uly <= ymax and lly >= ymin then
+ if trace_free then
+ report_free("case 4, inside, right")
+ end
+ n = n + 1 temp[n] = { xmin, lly }
+ n = n + 1 temp[n] = { xmin, uly }
+ done = true
+ else
+ -- case 0
+ if trace_free then
+ report_free("case 0, nothing")
+ end
+ end
+ end
+ end
+
+ if not done then
+ if trace_free then
+ report_free("no right shape")
+ end
+ n = n + 1 temp[n] = { urx, ury }
+ n = n + 1 temp[n] = { lrx, lry }
+ n = n + 1 temp[n] = { llx, lly }
+ else
+ done = false
+ end
+
+ for i=#frees,1,-1 do
+ local free = frees[i]
+ local fx = free.x
+ local fy = free.y
+ local ymax = y + fy + free.h + (free.to or 0)
+ local ymin = y + fy - free.d - (free.bo or 0)
+ local xmin = fx - (free.lo or 0)
+ local xmax = fx + free.w + (free.ro or 0)
+ if free.k == 2 then
+ if uly <= ymax and uly >= ymin and lly <= ymin then
+ if trace_free then
+ report_free("case 1, top, left") -- ok
+ end
+ n = n + 1 temp[n] = { ulx, ymin }
+ n = n + 1 temp[n] = { xmax, ymin }
+ n = n + 1 temp[n] = { xmax, uly }
+ done = true
+ elseif uly >= ymax and lly <= ymin then
+ if trace_free then
+ report_free("case 2, outside, left") -- ok
+ end
+ n = n + 1 temp[n] = { llx, lly }
+ n = n + 1 temp[n] = { llx, ymin }
+ n = n + 1 temp[n] = { xmax, ymin }
+ n = n + 1 temp[n] = { xmax, ymax }
+ if uly - ymax < lineheight then
+ n = n + 1 temp[n] = { xmax, uly }
+ else
+ n = n + 1 temp[n] = { llx, ymax }
+ n = n + 1 temp[n] = { llx, uly }
+ end
+ done = true
+ elseif lly <= ymax and lly >= ymin and uly >= ymax then
+ if trace_free then
+ report_free("case 3, bottom, left")
+ end
+ n = n + 1 temp[n] = { xmax, lly }
+ n = n + 1 temp[n] = { xmax, ymax }
+ if uly - ymax < lineheight then
+ n = n + 1 temp[n] = { xmax, uly }
+ else
+ n = n + 1 temp[n] = { llx, ymax }
+ n = n + 1 temp[n] = { llx, uly }
+ end
+ done = true
+ elseif uly <= ymax and lly >= ymin then
+ if trace_free then
+ report_free("case 4, inside, left")
+ end
+ n = n + 1 temp[n] = { xmax, lly }
+ n = n + 1 temp[n] = { xmax, uly }
+ done = true
+ else
+ -- case 0
+ end
+ end
+ end
+
+ if not done then
+ if trace_free then
+ report_free("no left shape")
+ end
+ n = n + 1 temp[n] = { llx, lly }
+ end
+ n = n + 1 temp[n] = { ulx, uly }
+
+ return temp
+ end
+
+ if n_2 > 0 then
+ for i=1,#areas do
+ local area = areas[i]
+ if #area == 4 then -- and also check type, must be pargaraph
+ areas[i] = check_two(area,f_2)
+ else
+ -- message that not yet supported
+ end
+ end
+ end
+
+ for i=1,#areas do
+ finish(areas[i]) -- again
+ end
+
+ end
+
+ end
+end
+
+local function fetchmultipar(n,anchor,page)
+ local a = jobpositions.collected[anchor]
+ if not a then
+ report_graphics("missing anchor %a",anchor)
+ else
+ local data = pbg[n]
+ if not data then
+ data = calculatemultipar(n)
+ pbg[n] = data -- can be replaced by register
+ -- register(data.list,n,anchor)
+ end
+ local list = data and data.list
if list then
local pagedata = list[page]
if pagedata then
+ local k = data.bpos.k
+ if k ~= 3 then
+ -- to be checked: no need in txt mode
+ freemultipar(pagedata,jobpositions.free[page])
+ end
local nofmultipars = #pagedata
- -- report_graphics("fetching %a at page %s using anchor %a containing %s multipars",n,page,anchor,nofmultipars)
- local a = jobpositions.collected[anchor]
- if not a then
- report_graphics("missing anchor %a",anchor)
- else
- local trace = false
- local x, y, w, h, d = a.x, a.y, a.w, a.h, a.d
- local bpos = data.bpos
- local bh, bd = bpos.h, bpos.d
- local result = { f_template_a(nofmultipars,w,h+d,bh,bd,bh+bd) }
- for i=1,nofmultipars do
- local region = pagedata[i]
- result[#result+1] = f_template_b(
- i, multilocs[region.location],
- i, region.location,
- i, region.area, x, y-region.region.y)
- if trace then
- result[#result+1] = f_template_c(i, regionarea(region.region), offset)
+ if trace_shapes then
+ report_graphics("fetching %a at page %s using anchor %a containing %s multipars",
+ n,page,anchor,nofmultipars)
+ end
+ local x, y = a.x, a.y
+ local w, h, d = a.w, a.h, a.d
+ local bpos = data.bpos
+ local bh, bd = bpos.h, bpos.d
+ local result = { false } -- slot 1 will be set later
+ local n = 0
+ for i=1,nofmultipars do
+ local data = pagedata[i]
+ local location = data.location
+ local region = data.region
+ local areas = data.areas
+ if not areas then
+ areas = { data.area }
+ end
+ for i=1,#areas do
+ local area = areas[i]
+ for i=1,#area do
+ local a = area[i]
+ area[i] = f_pair(a[1],a[2])
end
+ n = n + 1
+ result[n+1] = f_template_b(n,multilocs[location],n,location,n,area,x,y)
end
- data[page] = nil
- result[#result+1] = f_template_d()
- result = concat(result,"\n")
- return result
end
+ data[page] = nil
+ result[1] = f_template_a(n,w,h+d,bh,bd,bh+bd) -- was delayed
+ result[n+2] = f_template_c()
+ return concat(result,"\n")
end
end
end
- return f_template_a(0,"origin",0,0,0)
+ return f_template_a(0,0,0,0,0,0);
end
backgrounds.fetchmultipar = fetchmultipar
@@ -613,28 +1156,19 @@ implement {
arguments = { "string", "string", "integer" }
}
-implement {
- name = "fetchmultishape",
- actions = { fetchmultipar, context },
- arguments = { "string", "string", "integer", true }
-}
-
-local f_template_a = [[
+local f_template_a = formatters[ [[
path posboxes[], posregions[] ;
numeric pospages[] ;
numeric nofposboxes ;
nofposboxes := %s ;
%t ;
-]]
+]] ]
-local f_template_b = [[
+local f_template_b = formatters[ [[
pospages[%s] := %s ;
posboxes[%s] := (%p,%p)--(%p,%p)--(%p,%p)--(%p,%p)--cycle ;
posregions[%s] := (%p,%p)--(%p,%p)--(%p,%p)--(%p,%p)--cycle ;
-]]
-
-f_template_a = formatters[f_template_a]
-f_template_b = formatters[f_template_b]
+]] ]
implement {
name = "fetchposboxes",
@@ -655,7 +1189,7 @@ implement {
if r then
local rx, ry, rw, rh, rd = r.x, r.y, r.w, r.h, r.d
local cx = c.x - rx
- local cy = c.y - ry
+ local cy = c.y
local cw = cx + c.w
local ch = cy + c.h
local cd = cy - c.d
@@ -668,7 +1202,7 @@ implement {
end
end
else
- print("\n missing",tag)
+ -- print("\n missing",tag)
end
end
context(f_template_a(nofboxes,list))
@@ -681,17 +1215,19 @@ implement {
name = "doifelserangeonpage",
arguments = { "string", "string", "integer" },
actions = function(first,last,page)
- local collected = jobpositions.collected
- local f = collected[first]
- if not f or f.p == true then
- doifelse(false)
- return
- end
- local l = collected[last]
- if not l or l.p == true then
- doifelse(false)
- return
+ local c = jobpositions.collected
+ local f = c[first]
+ if f then
+ f = f.p
+ if f and f ~= true and page >= f then
+ local l = c[last]
+ if l then
+ l = l.p
+ doifelse(l and l ~= true and page <= l)
+ return
+ end
+ end
end
- doifelse(page >= f.p and page <= l.p)
+ doifelse(false)
end
}
diff --git a/tex/context/base/mkiv/anch-pgr.mkiv b/tex/context/base/mkiv/anch-pgr.mkiv
index a7ad26dff..1a583142e 100644
--- a/tex/context/base/mkiv/anch-pgr.mkiv
+++ b/tex/context/base/mkiv/anch-pgr.mkiv
@@ -13,18 +13,16 @@
\writestatus{loading}{ConTeXt Anchoring Macros / Grapics}
-%D Before we come to graphics support, we have to make sure of
-%D the reference point on the page. The next macros do so and
-%D are hooked into the page building routine.
+%D Before we come to graphics support, we have to make sure of the reference point
+%D on the page. The next macros do so and are hooked into the page building routine.
\registerctxluafile{anch-pgr}{1.001}
\unprotect
-%D A few more low level macros take care of defining and recalling
-%D actions. Actions are saved globally! The lists can become quite
-%D long because there can be lots of parameters passed on so we
-%D clean up the list afterwards.
+%D A few more low level macros take care of defining and recalling actions. Actions
+%D are saved globally! The lists can become quite long because there can be lots of
+%D parameters passed on so we clean up the list afterwards.
\newtoks\everypositionaction
\newtoks\everyinsertpositionaction
@@ -91,22 +89,15 @@
\let\anch_positions_trace_action_yes\anch_positions_trace_action_yes_indeed
\to \t_anch_positions_tracers
-%D Here the complication has to do with collecting actions
-%D for later execution. This collection is especially handy
-%D when we want to move actions to a specific layer. Such
-%D series of actions are stored in a macro that is cleaned up
-%D after each invocation.
+%D Here the complication has to do with collecting actions for later execution. This
+%D collection is especially handy when we want to move actions to a specific layer.
+%D Such series of actions are stored in a macro that is cleaned up after each
+%D invocation.
\def\anch_positions_cleanup_action % not in trialtypesetting
{\ifcsname\??positioncleanup\currentpositionaction\endcsname
\the\everycleanpositionaction
- % \iflocalpositioning
- % % erase
- % \expandafter\let\csname\??positioncleanup\currentpositionaction\endcsname\empty
- % \else
- % globalize expansion cleans up
- \setxvalue{\??positioncleanup\currentpositionaction}{\csname\??positioncleanup\currentpositionaction\endcsname}%
- % \fi
+ \setxvalue{\??positioncleanup\currentpositionaction}{\csname\??positioncleanup\currentpositionaction\endcsname}%
\fi}
\def\handlepositionaction#1\with#2\on#3% ugly
@@ -124,10 +115,9 @@
\fi
\endgroup}
-%D The first version of this module implemented head and tail
-%D anchors. Currently we stick to just one anchor and derive
-%D the head and tail anchors from this one. We set these
-%D anchors before and after each page.
+%D The first version of this module implemented head and tail anchors. Currently we
+%D stick to just one anchor and derive the head and tail anchors from this one. We
+%D set these anchors before and after each page.
\newdimen\c_anch_page_width
\newdimen\c_anch_page_height
@@ -160,7 +150,7 @@
{\begingroup
\setbox\scratchbox\emptyhbox
\ht\scratchbox\textheight
- \dp\scratchbox\zeropoint
+ \dp\scratchbox\zeropoint % redundant
\wd\scratchbox\makeupwidth
\anch_mark_text_box\scratchbox
\box\scratchbox
@@ -172,9 +162,8 @@
%D \macros
%D {positionoverlay,startpositionoverlay}
%D
-%D As long as we're dealing with graphics it makes much sense
-%D to use the available overlay mechanism. For this purpose, we
-%D define some dedicated overlay extensions.
+%D As long as we're dealing with graphics it makes much sense to use the available
+%D overlay mechanism. For this purpose, we define some dedicated overlay extensions.
%D
%D \startbuffer[sample]
%D \defineoverlay [sample] [\positionoverlay{sample}]
@@ -213,27 +202,18 @@
%D %\getbuffer[graphic,sample,text]
%D \stoplinecorrection
%D
-%D The graphic is defined in the following way, using some
-%D macros defined in an auxiliary \METAPOST\ module that is
-%D preloaded.
+%D The graphic is defined in the following way, using some macros defined in an
+%D auxiliary \METAPOST\ module that is preloaded.
%D
%D \typebuffer[graphic]
\def\MPanchoridentifier{mpa} % {mp-anchor}
-%D The rest of the definitions concerning such overlays may
-%D look complicated,
+%D The rest of the definitions concerning such overlays may look complicated,
\let\currentpositionoverlay\empty
-%D Position actions are automatically executed when a position
-%D is set.
-
-% \newcount\localpositionnumber % incremented elsewhere
-% \newif\iflocalpositioning
-%
-% \def\textbackgroundoverlay#1{\iflocalpositioning\v!local\else\v!text\fi#1}
-% \def\MPanchornumber {\the\iflocalpositioning\localpositionnumber\else\realpageno\fi}
+%D Position actions are automatically executed when a position is set.
\def\textbackgroundoverlay#1{\v!text#1}
\def\MPanchornumber {\the\realpageno}
@@ -327,35 +307,8 @@
\unexpanded\def\stoppositionoverlay
{\let\currentpositionoverlay\empty}
-% needs checking if still needed
-%
-% \def\resetpositionoverlay#1%
-% {\anch_positions_set_action{#1::\MPanchoridentifier::}{}}
-%
-% \def\handlepositionboxes#1#2#3%
-% {\handlepositionaction\dohandlepositionboxes\with{#1}{#2}{#3}\on{#2}}
-%
-% \def\doinsertpositionboxes#1#2#3% pos tag setups
-% {\ifnum\MPp{#1}=\realpageno\relax % can be sped up
-% \executeifdefined{\MPoverlayposprefix#1}\gobblethreearguments{#1}{#2}{#3}% not used
-% \fi}
-%
-% \appendtoks
-% \let\dohandlepositionboxes\doinsertpositionboxes % was handle ?
-% \to \everyinsertpositionaction
-%
-% \def\docleanpositionboxes#1#2#3% pos tag setups
-% {\ifnum\MPp{#1}<\realpageno \else
-% \noexpand \dohandlepositionboxes{#1}{#2}{#3}% reinsert
-% \fi}
-%
-% \appendtoks
-% \let\dohandlepositionboxes\docleanpositionboxes
-% \to \everycleanpositionaction
-
-%D A position graphic is a normal (non||reused) \METAPOST\
-%D graphic, used immediately, with zero dimensions, so that a
-%D sequence of them does not harm.
+%D A position graphic is a normal (non||reused) \METAPOST\ graphic, used
+%D immediately, with zero dimensions, so that a sequence of them does not harm.
\installcorenamespace{positiongraphic}
\installcorenamespace{positionmethod}
@@ -505,8 +458,7 @@
% Helpers:
-\def\MPgetposboxes #1#2{\clf_fetchposboxes {#1}{#2}\realpageno}
-\def\MPgetmultipars #1#2{\clf_fetchmultipar {#1}{#2}\realpageno}
-\def\MPgetmultishapes#1#2{\clf_fetchmultishape{#1}{#2}\realpageno}
+\def\MPgetposboxes #1#2{\clf_fetchposboxes{#1}{#2}\realpageno}
+\def\MPgetmultipars#1#2{\clf_fetchmultipar{#1}{#2}\realpageno}
\protect \endinput
diff --git a/tex/context/base/mkiv/anch-pos.lua b/tex/context/base/mkiv/anch-pos.lua
index 2d36c53e6..2ba9e2420 100644
--- a/tex/context/base/mkiv/anch-pos.lua
+++ b/tex/context/base/mkiv/anch-pos.lua
@@ -14,21 +14,22 @@ more efficient.</p>
-- plus (extra) is obsolete but we will keep it for a while
--- context(new_latelua_node(f_enhance(tag)))
--- =>
--- context.lateluafunction(function() f_enhance(tag) end)
-
-- maybe replace texsp by our own converter (stay at the lua end)
-- eventually mp will have large numbers so we can use sp there too
-local tostring, next, rawget, setmetatable = tostring, next, rawget, setmetatable
-local sort = table.sort
-local format, gmatch, match = string.format, string.gmatch, string.match
+-- this is one of the first modules using scanners and we need to replace
+-- it by implement and friends
+
+local tostring, next, rawget, rawset, setmetatable, tonumber = tostring, next, rawget, rawset, setmetatable, tonumber
+local sort, sortedhash, sortedkeys = table.sort, table.sortedhash, table.sortedkeys
+local format, gmatch, match, find = string.format, string.gmatch, string.match, string.find
local rawget = rawget
local lpegmatch = lpeg.match
local insert, remove = table.insert, table.remove
local allocate, mark = utilities.storage.allocate, utilities.storage.mark
+local report = logs.reporter("positions")
+
local scanners = tokens.scanners
local scanstring = scanners.string
local scaninteger = scanners.integer
@@ -39,6 +40,7 @@ local scanners = interfaces.scanners
local commands = commands
local context = context
+local ctxnode = context.nodes.flush
local tex = tex
local texgetcount = tex.getcount
@@ -49,7 +51,8 @@ local texsp = tex.sp
local pdf = pdf -- h and v are variables
-local setmetatableindex = table.setmetatableindex
+local setmetatableindex = table.setmetatableindex
+local setmetatablenewindex = table.setmetatablenewindex
local nuts = nodes.nuts
@@ -59,7 +62,10 @@ local setlink = nuts.setlink
local getlist = nuts.getlist
local setlist = nuts.setlist
local getbox = nuts.getbox
-local getskip = nuts.getskip
+local getid = nuts.getid
+local getwhd = nuts.getwhd
+
+----- hlist_code = nodes.listcodes.hlist
local find_tail = nuts.tail
@@ -84,24 +90,23 @@ local jobpositions = {
job.positions = jobpositions
-_plib_ = jobpositions -- might go
-
local default = { -- not r and paragraphs etc
__index = {
- x = 0, -- x position baseline
- y = 0, -- y position baseline
- w = 0, -- width
- h = 0, -- height
- d = 0, -- depth
- p = 0, -- page
- n = 0, -- paragraph
- ls = 0, -- leftskip
- rs = 0, -- rightskip
- hi = 0, -- hangindent
- ha = 0, -- hangafter
- hs = 0, -- hsize
- pi = 0, -- parindent
- ps = false, -- parshape
+ x = 0, -- x position baseline
+ y = 0, -- y position baseline
+ w = 0, -- width
+ h = 0, -- height
+ d = 0, -- depth
+ p = 0, -- page
+ n = 0, -- paragraph
+ ls = 0, -- leftskip
+ rs = 0, -- rightskip
+ hi = 0, -- hangindent
+ ha = 0, -- hangafter
+ hs = 0, -- hsize
+ pi = 0, -- parindent
+ ps = false, -- parshape
+ dir = 0,
}
}
@@ -115,87 +120,201 @@ local f_region = formatters["region:%s"]
local f_tag_three = formatters["%s:%s:%s"]
local f_tag_two = formatters["%s:%s"]
------ f_enhance = formatters["_plib_.enhance(%q)"]
-
------ f_b_column = formatters["_plib_.b_column(%q)"]
------ f_e_column = formatters["_plib_.e_column()"]
+jobpositions.used = false
------ f_b_region = formatters["_plib_.b_region(%q)"]
------ f_e_region = formatters["_plib_.e_region(%s)"]
-
-local function sorter(a,b)
- return a.y > b.y
-end
-
-local nofusedregions = 0
-local nofmissingregions = 0
-local nofregular = 0
-
-jobpositions.used = false
-
--- todo: register subsets and count them indepently
+local nofregular = 0
+local nofspecial = 0
+local splitter = lpeg.splitat(":",true)
local function initializer()
tobesaved = jobpositions.tobesaved
collected = jobpositions.collected
- -- add sparse regions
+ local pagedata = { }
+ local freedata = setmetatableindex("table")
+ for tag, data in next, collected do
+ local prefix, rest = lpegmatch(splitter,tag)
+ if prefix == "p" then
+ nofregular = nofregular + 1
+ elseif prefix == "page" then
+ nofregular = nofregular + 1
+ pagedata[tonumber(rest) or 0] = data
+ elseif prefix == "free" then
+ nofspecial = nofspecial + 1
+ local t = freedata[data.p or 0]
+ t[#t+1] = data
+ end
+ setmetatable(data,default)
+ end
+ --
local pages = structures.pages.collected
- if pages then
+ if pages then
local last = nil
for p=1,#pages do
local region = "page:" .. p
- local data = collected[region]
+ local data = pagedata[p]
+ local free = freedata[p]
+ if free then
+ sort(free,function(a,b) return b.y < a.y end) -- order matters !
+ end
if data then
- last = data
- last.p = nil -- no need for a page
+ last = data
+ last.free = free
elseif last then
- collected[region] = last
- end
- end
- end
- -- enhance regions with paragraphs
- for tag, data in next, collected do
- local region = data.r
- if region then
- local r = collected[region]
- if r then
- local paragraphs = r.paragraphs
- if not paragraphs then
- r.paragraphs = { data }
+ local t = setmetatableindex({ free = free, p = p },last)
+ if not collected[region] then
+ collected[region] = t
else
- paragraphs[#paragraphs+1] = data
+ -- something is wrong
end
- nofusedregions = nofusedregions + 1
- else
- nofmissingregions = nofmissingregions + 1
+ pagedata[p] = t
end
- else
- nofregular = nofregular + 1
end
- setmetatable(data,default)
end
- -- add metatable
- -- for tag, data in next, collected do
- -- setmetatable(data,default)
- -- end
- -- sort this data
- for tag, data in next, collected do
- local region = data.r
- if region then
- local r = collected[region]
- if r then
- local paragraphs = r.paragraphs
- if paragraphs and #paragraphs > 1 then
- sort(paragraphs,sorter)
+ jobpositions.page = pagedata
+ jobpositions.free = freedata
+ jobpositions.used = next(collected)
+end
+
+-- -- we can gain a little when we group positions but then we still have to
+-- -- deal with regions and cells so we either end up with lots of extra small
+-- -- tables pointing to them and/or assembling/disassembling so in the end
+-- -- it makes no sense to do it (now) and still have such a mix
+--
+-- local splitter = lpeg.splitat(":",true)
+--
+-- local function setpos(t,k,v)
+-- local class, tag = lpegmatch(splitter,k)
+-- if tag then
+-- local c = rawget(t,class)
+-- if c then
+-- c[tonumber(tag) or tag] = v
+-- else
+-- rawset(t,class,{ [tonumber(tag) or tag] = v })
+-- end
+-- else
+-- t.default[tonumber(k) or k] = v
+-- end
+-- end
+--
+-- local function getpos(t,k)
+-- local class, tag = lpegmatch(splitter,k)
+-- if tag then
+-- local c = rawget(t,class)
+-- if c then
+-- return c[tonumber(tag) or tag]
+-- end
+-- else
+-- return c.default[tonumber(k) or k]
+-- end
+-- end
+--
+-- tobesaved.default = tobesaved.default or { }
+-- setmetatablenewindex(tobesaved,setpos)
+-- setmetatableindex (tobesaved,getpos)
+--
+-- local function initializer()
+-- tobesaved = jobpositions.tobesaved
+-- collected = jobpositions.collected
+--
+-- tobesaved.default = tobesaved.default or { }
+-- collected.default = collected.default or { }
+--
+-- setmetatablenewindex(tobesaved,setpos)
+-- setmetatableindex (collected,getpos)
+-- setmetatableindex (tobesaved,getpos)
+--
+-- for class, list in next, collected do
+-- for tag, data in next, list do
+-- setmetatable(data,default)
+-- nofregular = nofregular + 1
+-- end
+-- end
+--
+-- local pagedata = collected.page or { }
+-- local freedata = setmetatableindex("table")
+--
+-- for tag, data in next, collected.free or { } do
+-- local t = freedata[data.p or 0]
+-- t[#t+1] = data
+-- end
+--
+-- --
+-- local pages = structures.pages.collected
+-- if pages then
+-- local last = nil
+-- for p=1,#pages do
+-- local data = pagedata[p]
+-- local free = freedata[p]
+-- if free then
+-- sort(free,function(a,b) return b.y < a.y end) -- order matters !
+-- end
+-- if data then
+-- last = data
+-- last.free = free
+-- elseif last then
+-- local t = setmetatableindex({ free = free, p = p },last)
+-- if not pagedata[p] then
+-- pagedata[p] = t
+-- end
+-- end
+-- end
+-- end
+-- jobpositions.page = pagedata
+-- jobpositions.free = freedata
+-- jobpositions.used = next(collected)
+-- end
+--
+-- function jobpositions.getcollected(class,tag) if tag then return collected[class..tag] else return collected[class] end end
+-- function jobpositions.gettobesaved(class,tag) if tag then return tobesaved[class..tag] else return tobesaved[class] end end
+
+local function finalizer()
+ -- We make the (possible extensive) shape lists sparse working
+ -- from the end. We could also drop entries here that have l and
+ -- r the same which saves testing later on.
+ for k, v in next, tobesaved do
+ local s = v.s
+ if s then
+ for p, data in next, s do
+ local n = #data
+ if n > 1 then
+ local ph = data[1][2]
+ local pd = data[1][3]
+ local xl = data[1][4]
+ local xr = data[1][5]
+ for i=2,n do
+ local di = data[i]
+ local h = di[2]
+ local d = di[3]
+ local l = di[4]
+ local r = di[5]
+ if r == xr then
+ di[5] = nil
+ if l == xl then
+ di[4] = nil
+ if d == pd then
+ di[3] = nil
+ if h == ph then
+ di[2] = nil
+ else
+ ph = h
+ end
+ else
+ pd, ph = d, h
+ end
+ else
+ ph, pd, xl = h, d, l
+ end
+ else
+ ph, pd, xl, xr = h, d, l, r
+ end
+ end
end
end
end
- -- so, we can be sparse and don't need 'or 0' code
end
- jobpositions.used = next(collected)
end
-job.register('job.positions.collected', tobesaved, initializer)
+job.register('job.positions.collected', tobesaved, initializer, finalizer)
local regions = { }
local nofregions = 0
@@ -213,46 +332,18 @@ local getpos = function() getpos = backends.codeinjections.getpos return getp
local gethpos = function() gethpos = backends.codeinjections.gethpos return gethpos() end
local getvpos = function() getvpos = backends.codeinjections.getvpos return getvpos() end
-local function setdim(name,w,h,d,extra) -- will be used when we move to sp allover
- local x, y = getpos()
- if x == 0 then x = nil end
- if y == 0 then y = nil end
- if w == 0 then w = nil end
- if h == 0 then h = nil end
- if d == 0 then d = nil end
- if extra == "" then extra = nil end
- -- todo: sparse
- tobesaved[name] = {
- p = texgetcount("realpageno"),
- x = x,
- y = y,
- w = w,
- h = h,
- d = d,
- e = extra,
- r = region,
- c = column,
- }
-end
-
local function setall(name,p,x,y,w,h,d,extra)
- if x == 0 then x = nil end
- if y == 0 then y = nil end
- if w == 0 then w = nil end
- if h == 0 then h = nil end
- if d == 0 then d = nil end
- if extra == "" then extra = nil end
- -- todo: sparse
tobesaved[name] = {
p = p,
- x = x,
- y = y,
- w = w,
- h = h,
- d = d,
- e = extra,
+ x = x ~= 0 and x or nil,
+ y = y ~= 0 and y or nil,
+ w = w ~= 0 and w or nil,
+ h = h ~= 0 and h or nil,
+ d = d ~= 0 and d or nil,
+ e = extra ~= "" and extra or nil,
r = region,
c = column,
+ r2l = texgetcount("inlinelefttoright") == 1 and true or nil,
}
end
@@ -265,12 +356,16 @@ local function enhance(data)
end
if data.x == true then
if data.y == true then
- data.x, data.y = getpos()
+ local x, y = getpos()
+ data.x = x ~= 0 and x or nil
+ data.y = y ~= 0 and y or nil
else
- data.x = gethpos()
+ local x = gethpos()
+ data.x = x ~= 0 and x or nil
end
elseif data.y == true then
- data.y = getvpos()
+ local y = getvpos()
+ data.y = y ~= 0 and y or nil
end
if data.p == true then
data.p = texgetcount("realpageno") -- we should use a variable set in otr
@@ -296,9 +391,6 @@ end
local function set(name,index,val) -- ,key
local data = enhance(val or index)
if val then
--- if data[key] and not next(next(data)) then
--- data = data[key]
--- end
container = tobesaved[name]
if not container then
tobesaved[name] = {
@@ -321,7 +413,7 @@ local function get(id,index)
end
end
-jobpositions.setdim = setdim
+------------.setdim = setdim
jobpositions.setall = setall
jobpositions.set = set
jobpositions.get = get
@@ -353,10 +445,11 @@ scanners.dosavepositionplus = compilescanner {
-- not much gain in keeping stack (inc/dec instead of insert/remove)
local function b_column(tag)
+ local x = gethpos()
tobesaved[tag] = {
r = true,
- x = gethpos(),
- w = 0,
+ x = x ~= 0 and x or nil,
+ -- w = 0,
}
insert(columns,tag)
column = tag
@@ -367,7 +460,8 @@ local function e_column(tag)
if not t then
-- something's wrong
else
- t.w = gethpos() - t.x
+ local x = gethpos() - t.x
+ t.w = x ~= 0 and x or nil
t.r = region
end
remove(columns)
@@ -387,8 +481,7 @@ scanners.bposcolumnregistered = function() -- tag
local tag = scanstring()
insert(columns,tag)
column = tag
- -- context(new_latelua_node(f_b_column(tag)))
- context(new_latelua_node(function() b_column(tag) end))
+ ctxnode(new_latelua_node(function() b_column(tag) end))
end
scanners.eposcolumn = function()
@@ -397,8 +490,7 @@ scanners.eposcolumn = function()
end
scanners.eposcolumnregistered = function()
- -- context(new_latelua_node(f_e_column()))
- context(new_latelua_node(e_column))
+ ctxnode(new_latelua_node(e_column))
remove(columns)
column = columns[#columns]
end
@@ -407,7 +499,9 @@ end
local function b_region(tag)
local last = tobesaved[tag]
- last.x, last.y = getpos()
+ local x, y = getpos()
+ last.x = x ~= 0 and x or nil
+ last.y = y ~= 0 and y or nil
last.p = texgetcount("realpageno")
insert(regions,tag)
region = tag
@@ -415,11 +509,12 @@ end
local function e_region(correct)
local last = tobesaved[region]
- local v = getvpos()
+ local y = getvpos()
if correct then
- last.h = last.y - v
+ local h = (last.y or 0) - y
+ last.h = h ~= 0 and h or nil
end
- last.y = v
+ last.y = y ~= 0 and y or nil
remove(regions)
region = regions[#regions]
end
@@ -427,35 +522,42 @@ end
jobpositions.b_region = b_region
jobpositions.e_region = e_region
-local function setregionbox(n,tag)
+local function setregionbox(n,tag,k,lo,ro,to,bo) -- kind
if not tag or tag == "" then
nofregions = nofregions + 1
tag = f_region(nofregions)
end
local box = getbox(n)
- local w = getfield(box,"width")
- local h = getfield(box,"height")
- local d = getfield(box,"depth")
+ local w, h, d = getwhd(box)
+ local x, y = getpos() -- hm, makes no sense here
tobesaved[tag] = {
- p = true, -- not enhanced
- x = true, -- not enhanced
- y = getvpos(), -- true,
+ -- p = texgetcount("realpageno"), -- we copy them
+ x = x ~= 0 and x or nil, -- was true
+ y = y ~= 0 and y or nil,
w = w ~= 0 and w or nil,
h = h ~= 0 and h or nil,
d = d ~= 0 and d or nil,
+ k = k ~= 0 and k or nil,
+ lo = lo ~= 0 and lo or nil,
+ ro = ro ~= 0 and ro or nil,
+ to = to ~= 0 and to or nil,
+ bo = bo ~= 0 and bo or nil,
}
return tag, box
end
-local function markregionbox(n,tag,correct) -- correct needs checking
- local tag, box = setregionbox(n,tag)
+local function markregionbox(n,tag,correct,...) -- correct needs checking
+ local tag, box = setregionbox(n,tag,...)
-- todo: check if tostring is needed with formatter
- -- local push = new_latelua(f_b_region(tag))
- -- local pop = new_latelua(f_e_region(tostring(correct)))
local push = new_latelua(function() b_region(tag) end)
- local pop = new_latelua(function() e_region(tostring(correct)) end)
+ local pop = new_latelua(function() e_region(correct) end)
-- maybe we should construct a hbox first (needs experimenting) so that we can avoid some at the tex end
local head = getlist(box)
+ -- no :
+ -- if getid(box) ~= hlist_code then
+ -- -- report("mark region box assumes a hlist, fix this for %a",tag)
+ -- head = nuts.hpack(head)
+ -- end
if head then
local tail = find_tail(head)
setlink(push,head)
@@ -473,30 +575,34 @@ function jobpositions.enhance(name)
enhance(tobesaved[name])
end
--- scanners.pos = function(name,t) -- name t
--- local name = scanstring()
--- tobesaved[name] = scanstring()
--- context(new_latelua_node(f_enhance(name)))
--- end
+function jobpositions.gettobesaved(name,tag)
+ local t = tobesaved[name]
+ if t and tag then
+ return t[tag]
+ else
+ return t
+ end
+end
local nofparagraphs = 0
scanners.parpos = function() -- todo: relate to localpar (so this is an intermediate variant)
nofparagraphs = nofparagraphs + 1
texsetcount("global","c_anch_positions_paragraph",nofparagraphs)
- local strutbox = getbox("strutbox")
+ local box = getbox("strutbox")
+ local w, h, d = getwhd(box)
local t = {
p = true,
c = true,
r = true,
x = true,
y = true,
- h = getfield(strutbox,"height"),
- d = getfield(strutbox,"depth"),
- hs = texget("hsize"),
+ h = h,
+ d = d,
+ hs = texget("hsize"), -- never 0
}
- local leftskip = getfield(getskip("leftskip"),"width")
- local rightskip = getfield(getskip("rightskip"),"width")
+ local leftskip = texget("leftskip",false)
+ local rightskip = texget("rightskip",false)
local hangindent = texget("hangindent")
local hangafter = texget("hangafter")
local parindent = texget("parindent")
@@ -521,8 +627,7 @@ scanners.parpos = function() -- todo: relate to localpar (so this is an intermed
end
local tag = f_p_tag(nofparagraphs)
tobesaved[tag] = t
- -- context(new_latelua_node(f_enhance(tag)))
- context(new_latelua_node(function() enhance(tobesaved[tag]) end))
+ ctxnode(new_latelua_node(function() enhance(tobesaved[tag]) end))
end
scanners.dosetposition = function() -- name
@@ -534,79 +639,107 @@ scanners.dosetposition = function() -- name
x = true,
y = true,
n = nofparagraphs > 0 and nofparagraphs or nil,
+ r2l = texgetcount("inlinelefttoright") == 1 or nil,
}
- -- context(new_latelua_node(f_enhance(name)))
- context(new_latelua_node(function() enhance(tobesaved[name]) end))
+ ctxnode(new_latelua_node(function() enhance(tobesaved[name]) end))
end
scanners.dosetpositionwhd = function() -- name w h d extra
local name = scanstring()
+ local w = scandimen()
+ local h = scandimen()
+ local d = scandimen()
tobesaved[name] = {
p = true,
c = column,
r = true,
x = true,
y = true,
- w = scandimen(),
- h = scandimen(),
- d = scandimen(),
+ w = w ~= 0 and w or nil,
+ h = h ~= 0 and h or nil,
+ d = d ~= 0 and d or nil,
n = nofparagraphs > 0 and nofparagraphs or nil,
+ r2l = texgetcount("inlinelefttoright") == 1 or nil,
}
- -- context(new_latelua_node(f_enhance(name)))
- context(new_latelua_node(function() enhance(tobesaved[name]) end))
+ ctxnode(new_latelua_node(function() enhance(tobesaved[name]) end))
end
scanners.dosetpositionbox = function() -- name box
local name = scanstring()
local box = getbox(scaninteger())
+ local w, h, d = getwhd(box)
tobesaved[name] = {
p = true,
c = column,
r = true,
x = true,
y = true,
- w = getfield(box,"width"),
- h = getfield(box,"height"),
- d = getfield(box,"depth"),
+ w = w ~= 0 and w or nil,
+ h = h ~= 0 and h or nil,
+ d = d ~= 0 and d or nil,
n = nofparagraphs > 0 and nofparagraphs or nil,
+ r2l = texgetcount("inlinelefttoright") == 1 or nil,
}
- -- context(new_latelua_node(f_enhance(name)))
- context(new_latelua_node(function() enhance(tobesaved[name]) end))
+ ctxnode(new_latelua_node(function() enhance(tobesaved[name]) end))
end
scanners.dosetpositionplus = function() -- name w h d extra
local name = scanstring()
+ local w = scandimen()
+ local h = scandimen()
+ local d = scandimen()
tobesaved[name] = {
p = true,
c = column,
r = true,
x = true,
y = true,
- w = scandimen(),
- h = scandimen(),
- d = scandimen(),
+ w = w ~= 0 and w or nil,
+ h = h ~= 0 and h or nil,
+ d = d ~= 0 and d or nil,
n = nofparagraphs > 0 and nofparagraphs or nil,
e = scanstring(),
+ r2l = texgetcount("inlinelefttoright") == 1 or nil,
}
- -- context(new_latelua_node(f_enhance(name)))
- context(new_latelua_node(function() enhance(tobesaved[name]) end))
+ ctxnode(new_latelua_node(function() enhance(tobesaved[name]) end))
end
scanners.dosetpositionstrut = function() -- name
local name = scanstring()
- local strutbox = getbox("strutbox")
+ local box = getbox("strutbox")
+ local w, h, d = getwhd(box)
+ tobesaved[name] = {
+ p = true,
+ c = column,
+ r = true,
+ x = true,
+ y = true,
+ h = h ~= 0 and h or nil,
+ d = d ~= 0 and d or nil,
+ n = nofparagraphs > 0 and nofparagraphs or nil,
+ r2l = texgetcount("inlinelefttoright") == 1 or nil,
+ }
+ ctxnode(new_latelua_node(function() enhance(tobesaved[name]) end))
+end
+
+scanners.dosetpositionstrutkind = function() -- name
+ local name = scanstring()
+ local kind = scaninteger()
+ local box = getbox("strutbox")
+ local w, h, d = getwhd(box)
tobesaved[name] = {
+ k = kind,
p = true,
c = column,
r = true,
x = true,
y = true,
- h = getfield(strutbox,"height"),
- d = getfield(strutbox,"depth"),
+ h = h ~= 0 and h or nil,
+ d = d ~= 0 and d or nil,
n = nofparagraphs > 0 and nofparagraphs or nil,
+ r2l = texgetcount("inlinelefttoright") == 1 or nil,
}
- -- context(new_latelua_node(f_enhance(name)))
- context(new_latelua_node(function() enhance(tobesaved[name]) end))
+ ctxnode(new_latelua_node(function() enhance(tobesaved[name]) end))
end
function jobpositions.getreserved(tag,n)
@@ -693,6 +826,13 @@ function jobpositions.depth(id)
return jpi and jpi.d
end
+function jobpositions.whd(id)
+ local jpi = collected[id]
+ if jpi then
+ return jpi.h, jpi.h, jpi.d
+ end
+end
+
function jobpositions.leftskip(id)
local jpi = collected[id]
return jpi and jpi.ls
@@ -777,6 +917,8 @@ function jobpositions.position(id)
end
end
+local splitter = lpeg.splitat(",")
+
function jobpositions.extra(id,n,default) -- assume numbers
local jpi = collected[id]
if jpi then
@@ -955,6 +1097,20 @@ scanners.MPxy = function() -- name
end
end
+scanners.MPwhd = function() -- name
+ local jpi = collected[scanstring()]
+ if jpi then
+ local w = jpi.w or 0
+ local h = jpi.h or 0
+ local d = jpi.d or 0
+ if w ~= 0 or h ~= 0 or d ~= 0 then
+ context("%.5Fpt,%.5Fpt,%.5Fpt",w*pt,h*pt,d*pt)
+ return
+ end
+ end
+ context('0pt,0pt,0pt')
+end
+
scanners.MPll = function() -- name
local jpi = collected[scanstring()]
if jpi then
@@ -1056,6 +1212,7 @@ scanners.MPr = function() -- name
local r = jpi.r
if r and r ~= true then
context(r)
+ return
end
local p = jpi.p
if p then
@@ -1168,6 +1325,13 @@ scanners.doifposition = function() -- name
doif(collected[scanstring()])
end
+-- local ctx_iftrue = context.protected.cs.iftrue
+-- local ctx_iffalse = context.protected.cs.iffalse
+--
+-- scanners.ifknownposition = function() -- name
+-- (collected[scanstring()] and ctx_iftrue or ctx_iffalse)()
+-- end
+
scanners.doifelsepositiononpage = function() -- name page -- probably always realpageno
local c = collected[scanstring()]
local p = scaninteger()
@@ -1210,13 +1374,27 @@ scanners.markregionboxcorrected = function() -- box tag
markregionbox(scaninteger(),scanstring(),true)
end
+scanners.markregionboxtaggedkind = function() -- box tag kind
+ markregionbox(scaninteger(),scanstring(),nil,
+ scaninteger(),scandimen(),scandimen(),scandimen(),scandimen())
+end
+
-- statistics (at least for the moment, when testing)
+-- statistics.register("positions", function()
+-- local total = nofregular + nofusedregions + nofmissingregions
+-- if total > 0 then
+-- return format("%s collected, %s regulars, %s regions, %s unresolved regions",
+-- total, nofregular, nofusedregions, nofmissingregions)
+-- else
+-- return nil
+-- end
+-- end)
+
statistics.register("positions", function()
- local total = nofregular + nofusedregions + nofmissingregions
+ local total = nofregular + nofspecial
if total > 0 then
- return format("%s collected, %s regulars, %s regions, %s unresolved regions",
- total, nofregular, nofusedregions, nofmissingregions)
+ return format("%s collected, %s regular, %s special",total,nofregular,nofspecial)
else
return nil
end
diff --git a/tex/context/base/mkiv/anch-pos.mkiv b/tex/context/base/mkiv/anch-pos.mkiv
index 5d9c2fd34..8b33dfce8 100644
--- a/tex/context/base/mkiv/anch-pos.mkiv
+++ b/tex/context/base/mkiv/anch-pos.mkiv
@@ -36,11 +36,12 @@
\def\dosavepositionwhd #1#2#3#4#5#6#7{\clf_dosavepositionwhd {#1}#2 #3 #4 #5 #6 #7\relax}
\def\dosavepositionplus#1#2#3#4#5#6#7#8{\clf_dosavepositionplus{#1}#2 #3 #4 #5 #6 #7{#8}}
-\def\dosetposition #1{\clf_dosetposition {#1}} % {} expands
-\def\dosetpositionwhd #1#2#3#4{\clf_dosetpositionwhd {#1}#2 #3 #4\relax}
-\def\dosetpositionplus#1#2#3#4#5{\clf_dosetpositionplus {#1}#2 #3 #4{#5}}
-\def\dosetpositionbox #1#2{\clf_dosetpositionbox {#1}#2\relax}
-\def\dosetpositionstrut #1{\clf_dosetpositionstrut{#1}}
+\def\dosetposition #1{\clf_dosetposition {#1}} % {} expands
+\def\dosetpositionwhd #1#2#3#4{\clf_dosetpositionwhd {#1}#2 #3 #4\relax}
+\def\dosetpositionplus#1#2#3#4#5{\clf_dosetpositionplus {#1}#2 #3 #4{#5}}
+\def\dosetpositionbox #1#2{\clf_dosetpositionbox {#1}#2\relax}
+\def\dosetpositionstrut #1{\clf_dosetpositionstrut {#1}}
+\def\dosetpositionstrutkind #1#2{\clf_dosetpositionstrutkind{#1}#2\relax} % #2 = number
\newbox\b_anch_position
\newif \ifpositioning % sort of public
@@ -66,6 +67,7 @@
\def\MPh #1{\clf_MPh {#1}}
\def\MPd #1{\clf_MPd {#1}}
\def\MPxy #1{\clf_MPxy {#1}}
+\def\MPwhd #1{\clf_MPwhd {#1}}
\def\MPll #1{\clf_MPll {#1}}
\def\MPlr #1{\clf_MPlr {#1}}
\def\MPur #1{\clf_MPur {#1}}
@@ -204,6 +206,26 @@
\strut
\hss}}
+\unexpanded\def\setpositionstrutkind
+ {\iftrialtypesetting
+ \expandafter\anch_positions_set_strut_kind_nop
+ \else
+ \expandafter\anch_positions_set_strut_kind_yes
+ \fi}
+
+\def\anch_positions_set_strut_kind_yes#1#2%
+ {\anch_positions_initialize
+ \hbox to \zeropoint
+ {\edef\currentposition{#1}%
+ \dosetpositionstrutkind\currentposition{#2}%
+ \anch_positions_trace_left
+ \dopositionaction\currentposition
+ \strut
+ \hss}}
+
+\def\anch_positions_set_strut_kind_nop#1#2%
+ {\strut}
+
\unexpanded\def\setpositiondataplus
{\iftrialtypesetting
\expandafter\gobblefivearguments
@@ -293,6 +315,21 @@
\unexpanded\def\anch_mark_text_box#1%
{\clf_markregionboxtagged#1{text:\the\realpageno}} % needs an hbox
+\newcount\c_anch_free
+
+\unexpanded\def\anch_mark_tagged_box_free#1#2#3#4#5#6% only needed when positions
+ {\ifpositioning
+ \global\advance\c_anch_free\plusone % could be done at the lua end
+ \clf_markregionboxtaggedkind
+ #1%
+ {free:\number\c_anch_free}%
+ #2\space % kind
+ #3\space % leftoffset
+ #4\space % rightoffset
+ #5\space % topoffset
+ #6\relax % bottomoffset
+ \fi}
+
%D We can copy a position with:
%D
%D \starttyping
@@ -337,10 +374,12 @@
\let\xypos\setpositiononly
-\unexpanded\def\hpos#1{\dontleavehmode\setpositionbox{#1}\hbox}
-\unexpanded\def\vpos#1{\setpositionbox{#1}\vbox}
-\unexpanded\def\bpos#1{\dontleavehmode \setpositionstrut{b:#1}\ignorespaces}
-\unexpanded\def\epos#1{\removeunwantedspaces\setpositionstrut{e:#1}}
+\unexpanded\def\hpos #1{\dontleavehmode\setpositionbox{#1}\hbox}
+\unexpanded\def\vpos #1{\setpositionbox{#1}\vbox}
+\unexpanded\def\bpos #1{\dontleavehmode\setpositionstrut{b:#1}\ignorespaces}
+\unexpanded\def\epos #1{\removeunwantedspaces\setpositionstrut{e:#1}}
+\unexpanded\def\bposkind#1#2{\dontleavehmode\setpositionstrutkind{b:#1}{#2}\ignorespaces} % not public, used in backgrounds
+\unexpanded\def\eposkind#1#2{\removeunwantedspaces\setpositionstrutkind{e:#1}{#2}} % not public, used in backgrounds
%D When we want to calculate more complex backgrounds, we need to know what the
%D current indentation scheme is. At the cost of many positions and memory, we
diff --git a/tex/context/base/mkiv/anch-snc.mkiv b/tex/context/base/mkiv/anch-snc.mkiv
index d0d3a58d1..3e99da8a6 100644
--- a/tex/context/base/mkiv/anch-snc.mkiv
+++ b/tex/context/base/mkiv/anch-snc.mkiv
@@ -168,7 +168,6 @@
\definesyncpositions[1]
\startuseMPgraphic{sync}
- if unknown context_abck : input mp-abck.mpiv ; fi ;
StartPage ;
\getsyncpositions{1} ;
SyncThreshold := 2LineHeight ;
diff --git a/tex/context/base/mkiv/anch-tab.mkiv b/tex/context/base/mkiv/anch-tab.mkiv
index 7e0116cbf..afa87c7b2 100644
--- a/tex/context/base/mkiv/anch-tab.mkiv
+++ b/tex/context/base/mkiv/anch-tab.mkiv
@@ -23,22 +23,26 @@
\unexpanded\def\tabl_tabulate_hook_b
{\iftrialtypesetting\else
\ifpositioning
+\ifconditional\tablehaspositions
\ifcase\c_tabl_tabulate_noflines % \ifnum\c_tabl_tabulate_noflines=\c_tabl_tabulate_totalnoflines
\tabl_tabulate_hook_b_first
\else
\tabl_tabulate_hook_b_next
\fi
+\fi
\fi
\fi}
\unexpanded\def\tabl_tabulate_hook_e
{\iftrialtypesetting\else
\ifpositioning
+\ifconditional\tablehaspositions
\ifcase\c_tabl_tabulate_noflines % \ifnum\c_tabl_tabulate_noflines=\c_tabl_tabulate_totalnoflines
\tabl_tabulate_hook_e_first
\else
\tabl_tabulate_hook_e_next
\fi
+\fi
\fi
\fi}
@@ -60,6 +64,12 @@
\global\advance\c_anch_tabs\plusone
\to \everytabulate
+% for text backgrounds
+
+\appendtoks
+ \settrue\c_anch_backgrounds_pos_no_shape
+\to \everytabulate
+
%D Beware, the following code is somewhat weird and experimental and might be
%D dropped or become a loadable module.
@@ -98,7 +108,7 @@
\firstargumentfalse
\fi}
-\def\anch_tables_XC [#1]{\anch_table_check_state\iffirstargument\anch_tables_indeed_XC [#1]\else\expandafter\fi\NC}
+\def\anch_tables_XC [#1]{\anch_table_check_state\iffirstargument\anch_tables_indeed_XC [#1]\else\expandafter\NC\fi}
\def\anch_tables_GSC[#1]{\anch_table_check_state\iffirstargument\anch_tables_indeed_GSC[#1]\else\expandafter\NC\fi}
\def\anch_tables_GFC[#1]{\anch_table_check_state\iffirstargument\anch_tables_indeed_GFC[#1]\else\expandafter\NC\fi}
\def\anch_tables_GTC[#1]{\anch_table_check_state\iffirstargument\anch_tables_indeed_GTC[#1]\else\expandafter\NC\fi}
diff --git a/tex/context/base/mkiv/attr-col.lua b/tex/context/base/mkiv/attr-col.lua
index 6b11333a7..c3b644bda 100644
--- a/tex/context/base/mkiv/attr-col.lua
+++ b/tex/context/base/mkiv/attr-col.lua
@@ -12,10 +12,9 @@ if not modules then modules = { } end modules ['attr-col'] = {
-- list could as well refer to the tables (instead of numbers that
-- index into another table) .. depends on what we need
-local type = type
-local format = string.format
+local type, tonumber = type, tonumber
local concat = table.concat
-local min, max, floor = math.min, math.max, math.floor
+local min, max, floor, mod = math.min, math.max, math.floor, math.mod
local attributes = attributes
local nodes = nodes
@@ -26,6 +25,14 @@ local storage = storage
local context = context
local tex = tex
+local variables = interfaces.variables
+local v_yes = variables.yes
+local v_no = variables.no
+
+local p_split_comma = lpeg.tsplitat(",")
+local p_split_colon = lpeg.splitat(":")
+local lpegmatch = lpeg.match
+
local allocate = utilities.storage.allocate
local setmetatableindex = table.setmetatableindex
@@ -40,11 +47,13 @@ local report_transparencies = logs.reporter("transparencies","support")
-- nb. too many "0 g"s
local states = attributes.states
-local tasks = nodes.tasks
local nodeinjections = backends.nodeinjections
local registrations = backends.registrations
local unsetvalue = attributes.unsetvalue
+local enableaction = nodes.tasks.enableaction
+local setaction = nodes.tasks.setaction
+
local registerstorage = storage.register
local formatters = string.formatters
@@ -145,10 +154,14 @@ end
local function rgbtogray(r,g,b)
if not r then
return 0
- elseif colors.weightgray then
+ end
+ local w = colors.weightgray
+ if w == true then
return .30*r + .59*g + .11*b
- else
+ elseif not w then
return r/3 + g/3 + b/3
+ else
+ return w[1]*r + w[2]*g + w[3]*b
end
end
@@ -156,27 +169,34 @@ local function cmyktogray(c,m,y,k)
return rgbtogray(cmyktorgb(c,m,y,k))
end
--- not critical so not needed:
---
--- local function cmyktogray(c,m,y,k)
--- local r, g, b = 1.0 - min(1.0,c+k), 1.0 - min(1.0,m+k), 1.0 - min(1.0,y+k)
--- if colors.weightgray then
--- return .30*r + .59*g + .11*b
--- else
--- return r/3 + g/3 + b/3
--- end
--- end
-
-- http://en.wikipedia.org/wiki/HSI_color_space
-- http://nl.wikipedia.org/wiki/HSV_(kleurruimte)
+-- h /= 60; // sector 0 to 5
+-- i = floor( h );
+-- f = h - i; // factorial part of h
+
local function hsvtorgb(h,s,v)
- -- h = h % 360
- local hd = h/60
- local hf = floor(hd)
- local hi = hf % 6
- -- local f = hd - hi
- local f = hd - hf
+ if s > 1 then
+ s = 1
+ elseif s < 0 then
+ s = 0
+ elseif s == 0 then
+ return v, v, v
+ end
+ if v > 1 then
+ s = 1
+ elseif v < 0 then
+ v = 0
+ end
+ if h < 0 then
+ h = 0
+ elseif h >= 360 then
+ h = mod(h,360)
+ end
+ local hd = h / 60
+ local hi = floor(hd)
+ local f = hd - hi
local p = v * (1 - s)
local q = v * (1 - f * s)
local t = v * (1 - (1 - f) * s)
@@ -193,7 +213,8 @@ local function hsvtorgb(h,s,v)
elseif hi == 5 then
return v, p, q
else
- print("error in hsv -> rgb",hi,h,s,v)
+ print("error in hsv -> rgb",h,s,v)
+ return 0, 0, 0
end
end
@@ -264,9 +285,6 @@ end
--~ return { 5, .5, .5, .5, .5, 0, 0, 0, .5, parent, f, d, p }
--~ end
-local p_split = lpeg.tsplitat(",")
-local lpegmatch = lpeg.match
-
function colors.spot(parent,f,d,p)
-- inspect(parent) inspect(f) inspect(d) inspect(p)
if type(p) == "number" then
@@ -283,8 +301,8 @@ function colors.spot(parent,f,d,p)
end
else
-- todo, multitone (maybe p should be a table)
- local ps = lpegmatch(p_split,p)
- local ds = lpegmatch(p_split,d)
+ local ps = lpegmatch(p_split_comma,p)
+ local ds = lpegmatch(p_split_comma,d)
local c, m, y, k = 0, 0, 0, 0
local done = false
for i=1,#ps do
@@ -364,10 +382,31 @@ function colors.filter(n)
return concat(data[n],":",5)
end
+-- unweighted (flat) gray could be another model but a bit work as we need to check:
+--
+-- attr-col colo-ini colo-run
+-- grph-inc grph-wnd
+-- lpdf-col lpdf-fmt lpdf-fld lpdf-grp
+-- meta-pdf meta-pdh mlib-pps
+--
+-- but as we never needed it we happily delay that.
+
function colors.setmodel(name,weightgray)
- colors.model = name
- colors.default = models[name] or 1
- colors.weightgray = weightgray ~= false
+ if weightgray == true or weightgray == v_yes then
+ weightgray = true
+ elseif weightgray == false or weightgray == v_no then
+ weightgray = false
+ else
+ local r, g, b = lpegmatch(p_split_colon,weightgray)
+ if r and g and b then
+ weightgray = { r, g, b }
+ else
+ weightgray = true
+ end
+ end
+ colors.model = name -- global, not useful that way
+ colors.default = models[name] or 1 -- global
+ colors.weightgray = weightgray -- global
return colors.default
end
@@ -400,11 +439,7 @@ attributes.colors.handler = nodes.installattributehandler {
}
function colors.enable(value)
- if value == false or not colors.supported then
- tasks.disableaction("shipouts","attributes.colors.handler")
- else
- tasks.enableaction("shipouts","attributes.colors.handler")
- end
+ setaction("shipouts","attributes.colors.handler",not (value == false or not colors.supported))
end
function colors.forcesupport(value) -- can move to attr-div
@@ -492,8 +527,8 @@ local function reviver(data,n)
end
end
-setmetatableindex(transparencies, extender)
-setmetatableindex(transparencies.data, reviver) -- register if used
+setmetatableindex(transparencies,extender)
+setmetatableindex(transparencies.data,reviver) -- register if used
-- check if there is an identity
@@ -510,11 +545,7 @@ attributes.transparencies.handler = nodes.installattributehandler {
}
function transparencies.enable(value) -- nil is enable
- if value == false or not transparencies.supported then
- tasks.disableaction("shipouts","attributes.transparencies.handler")
- else
- tasks.enableaction("shipouts","attributes.transparencies.handler")
- end
+ setaction("shipouts","attributes.transparencies.handler",not (value == false or not transparencies.supported))
end
function transparencies.forcesupport(value) -- can move to attr-div
@@ -573,7 +604,7 @@ colorintents.handler = nodes.installattributehandler {
}
function colorintents.enable()
- tasks.enableaction("shipouts","attributes.colorintents.handler")
+ enableaction("shipouts","attributes.colorintents.handler")
end
-- interface
diff --git a/tex/context/base/mkiv/attr-eff.lua b/tex/context/base/mkiv/attr-eff.lua
index ff41e12de..d04408fb9 100644
--- a/tex/context/base/mkiv/attr-eff.lua
+++ b/tex/context/base/mkiv/attr-eff.lua
@@ -10,7 +10,7 @@ local attributes, nodes, backends, utilities = attributes, nodes, backends, util
local tex = tex
local states = attributes.states
-local tasks = nodes.tasks
+local enableaction = nodes.tasks.enableaction
local nodeinjections = backends.nodeinjections
local texsetattribute = tex.setattribute
local allocate = utilities.storage.allocate
@@ -97,7 +97,7 @@ local enabled = false
local function enable()
if not enabled then
- tasks.enableaction("shipouts","attributes.effects.handler")
+ enableaction("shipouts","attributes.effects.handler")
enabled = true
end
end
diff --git a/tex/context/base/mkiv/attr-ini.lua b/tex/context/base/mkiv/attr-ini.lua
index df7404d11..2a11558a5 100644
--- a/tex/context/base/mkiv/attr-ini.lua
+++ b/tex/context/base/mkiv/attr-ini.lua
@@ -25,7 +25,6 @@ local attributes = attributes
local sharedstorage = storage.shared
-local texgetcount = tex.getcount
local texsetattribute = tex.setattribute
attributes.names = attributes.names or { }
@@ -131,7 +130,7 @@ function attributes.ofnode(n)
showlist(n,n.attr)
end
--- rather special
+-- rather special (can be optimized)
local store = { }
diff --git a/tex/context/base/mkiv/attr-ini.mkiv b/tex/context/base/mkiv/attr-ini.mkiv
index 3f0b7fb27..77959c988 100644
--- a/tex/context/base/mkiv/attr-ini.mkiv
+++ b/tex/context/base/mkiv/attr-ini.mkiv
@@ -38,7 +38,9 @@
\expandafter\newcount\csname\??attributestack\string#1\endcsname
\fi}
-\newtoks \attributesresetlist
+\newtoks \t_attr_list_global
+\newtoks \t_attr_list_local
+\newtoks \t_attr_list_nomath
\ifdefined \s!global \else \def\s!global {global} \fi % for metatex % or hard check later
\ifdefined \s!public \else \def\s!public {public} \fi % for metatex % or hard check later
@@ -59,9 +61,14 @@
\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}%
+ \doifelseinset\s!global{#3}%
+ {\appendetoks\csname\??attributecount#2\endcsname\attributeunsetvalue\to\t_attr_list_global}%
+ {\appendetoks\csname\??attributecount#2\endcsname\attributeunsetvalue\to\t_attr_list_local }%
+ \doifinset\s!nomath{#3}%
+ {\appendetoks\csname\??attributecount#2\endcsname\attributeunsetvalue\to\t_attr_list_nomath}%
% 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}%
+ \doifinset\s!public{#3}%
+ {\expandafter\let\csname#2\s!attribute\expandafter\endcsname\csname\??attributeid#2\endcsname}%
\fi}
\unexpanded\def\newattribute#1%
@@ -77,30 +84,37 @@
\let\dompattribute\gobbletwoarguments
-\unexpanded\def\resetallattributes{\the\attributesresetlist}
+\unexpanded\def\resetglobalattributes{\the\t_attr_list_global}
+\unexpanded\def\resetlocalattributes {\the\t_attr_list_local }
+
+\let\resetallattributes\resetlocalattributes
%D Rather special.
\unexpanded\def\savecurrentattributes #1{\clf_savecurrentattributes {#1}}
\unexpanded\def\restorecurrentattributes#1{\clf_restorecurrentattributes{#1}}
-%D For the moment we put this here (later it will move to where it's used):
+%D For the moment we put this here. The order of definition matters a bit because
+%D performance is better when we put frequently accessed attributes at the front.
+%D So, we might move more here.
-\definesystemattribute [state]
-\definesystemattribute [color] [public] % global
+\definesystemattribute [state] % nomath
+\definesystemattribute [color] [public] % global
\definesystemattribute [colormodel] [public,global]
-\definesystemattribute [skip]
-\definesystemattribute [penalty]
+% \definesystemattribute [skip]
+% \definesystemattribute [penalty]
\definesystemattribute [transparency] [public]
+\definesystemattribute [reference] [public]
+\definesystemattribute [destination] [public]
+\definesystemattribute [case] [public]
+\definesystemattribute [visual] [public,global]
+\definesystemattribute [viewerlayer] [public]
\definesystemattribute [background] [public]
\definesystemattribute [alignbackground] [public]
\definesystemattribute [colorintent] [public]
\definesystemattribute [negative] [public]
\definesystemattribute [effect] [public]
-\definesystemattribute [viewerlayer] [public]
\definesystemattribute [layoutcomponent] [public]
-\definesystemattribute [reference] [public]
-\definesystemattribute [destination] [public]
\definesystemattribute [internal] [public]
\definesystemattribute [ruled] [public]
\definesystemattribute [shifted] [public]
diff --git a/tex/context/base/mkiv/attr-lay.lua b/tex/context/base/mkiv/attr-lay.lua
index 0d43979c8..ff9d1c38f 100644
--- a/tex/context/base/mkiv/attr-lay.lua
+++ b/tex/context/base/mkiv/attr-lay.lua
@@ -62,7 +62,8 @@ viewerlayers.supported = true
viewerlayers.hasorder = true
local states = attributes.states
-local tasks = nodes.tasks
+local enableaction = nodes.tasks.enableaction
+local disableaction = nodes.tasks.disableaction
local nodeinjections = backends.nodeinjections
local codeinjections = backends.codeinjections
@@ -71,8 +72,6 @@ local texgetattribute = tex.getattribute
local texsettokenlist = tex.settoks
local unsetvalue = attributes.unsetvalue
-local nodepool = nodes.pool
-
local data = viewerlayers.data
local values = viewerlayers.values
local listwise = viewerlayers.listwise
@@ -148,12 +147,12 @@ local stack, enabled, global = { }, false, false
function viewerlayers.enable(value)
if value == false or not viewerlayers.supported then
if enabled then
- tasks.disableaction("shipouts","attributes.viewerlayers.handler")
+ disableaction("shipouts","attributes.viewerlayers.handler")
end
enabled = false
else
if not enabled then
- tasks.enableaction("shipouts","attributes.viewerlayers.handler")
+ enableaction("shipouts","attributes.viewerlayers.handler")
end
enabled = true
end
diff --git a/tex/context/base/mkiv/attr-neg.lua b/tex/context/base/mkiv/attr-neg.lua
index 1347c3d1a..c20df1d16 100644
--- a/tex/context/base/mkiv/attr-neg.lua
+++ b/tex/context/base/mkiv/attr-neg.lua
@@ -16,7 +16,7 @@ local commands, context, interfaces = commands, context, interfaces
local tex = tex
local states = attributes.states
-local tasks = nodes.tasks
+local enableaction = nodes.tasks.enableaction
local nodeinjections = backends.nodeinjections
local texsetattribute = tex.setattribute
local variables = interfaces.variables
@@ -79,7 +79,7 @@ local function register(stamp)
end
local function enable()
- tasks.enableaction("shipouts","attributes.negatives.handler")
+ enableaction("shipouts","attributes.negatives.handler")
end
negatives.register = register
diff --git a/tex/context/base/mkiv/back-exp.lua b/tex/context/base/mkiv/back-exp.lua
index 681996d48..da7ec202f 100644
--- a/tex/context/base/mkiv/back-exp.lua
+++ b/tex/context/base/mkiv/back-exp.lua
@@ -38,7 +38,7 @@ local sub, gsub = string.sub, string.gsub
local validstring = string.valid
local lpegmatch = lpeg.match
local utfchar, utfvalues = utf.char, utf.values
-local concat, insert, remove, merge = table.concat, table.insert, table.remove, table.merge
+local concat, insert, remove, merge, sort = table.concat, table.insert, table.remove, table.merge, table.sort
local sortedhash = table.sortedhash
local formatters = string.formatters
local todimen = number.todimen
@@ -71,6 +71,8 @@ local v_hidden = variables.hidden
local implement = interfaces.implement
+local included = backends.included
+
local settings_to_array = utilities.parsers.settings_to_array
local setmetatableindex = table.setmetatableindex
@@ -89,7 +91,6 @@ local glyph_code = nodecodes.glyph
local glue_code = nodecodes.glue
local kern_code = nodecodes.kern
local disc_code = nodecodes.disc
-local insert_code = nodecodes.insert
local userskip_code = skipcodes.userskip
local rightskip_code = skipcodes.rightskip
@@ -117,12 +118,16 @@ local getnext = nuts.getnext
local getsubtype = nuts.getsubtype
local getfont = nuts.getfont
local getdisc = nuts.getdisc
+local getcomponents = nuts.getcomponents
local getlist = nuts.getlist
local getid = nuts.getid
local getfield = nuts.getfield
local getattr = nuts.getattr
-local setattr = nuts.setattr
+local setattr = nuts.setattr -- maybe use properties
local isglyph = nuts.isglyph
+local getkern = nuts.getkern
+local getwidth = nuts.getwidth
+
local traverse_id = nuts.traverse_id
local traverse_nodes = nuts.traverse
@@ -543,27 +548,6 @@ local function makebreaknode(attributes) -- maybe no fulltag
}
end
-local function ignorebreaks(di,element,n,fulltag)
- local data = di.data
- for i=1,#data do
- local d = data[i]
- if d.content == " " then
- d.content = ""
- end
- end
-end
-
-local function ignorespaces(di,element,n,fulltag)
- local data = di.data
- for i=1,#data do
- local d = data[i]
- local c = d.content
- if type(c) == "string" then
- d.content = lpegmatch(p_stripper,c)
- end
- end
-end
-
do
local fields = { "title", "subtitle", "author", "keywords" }
@@ -605,7 +589,9 @@ do
setattribute(di,"language",languagenames[texgetcount("mainlanguagenumber")])
if not less_state then
setattribute(di,"file",tex.jobname)
- setattribute(di,"date",os.date())
+ if included.date then
+ setattribute(di,"date",backends.timestamp())
+ end
setattribute(di,"context",environment.version)
setattribute(di,"version",exportversion)
setattribute(di,"xmlns:m",mathmlns)
@@ -772,7 +758,7 @@ do
function finalizers.descriptions(tree)
local n = 0
- for id, tag in next, descriptions do
+ for id, tag in sortedhash(descriptions) do
local sym = symbols[id]
if sym then
n = n + 1
@@ -1716,6 +1702,27 @@ do
end
end
+ local function ignorebreaks(di,element,n,fulltag)
+ local data = di.data
+ for i=1,#data do
+ local d = data[i]
+ if d.content == " " then
+ d.content = ""
+ end
+ end
+ end
+
+ local function ignorespaces(di,element,n,fulltag)
+ local data = di.data
+ for i=1,#data do
+ local d = data[i]
+ local c = d.content
+ if type(c) == "string" then
+ d.content = lpegmatch(p_stripper,c)
+ end
+ end
+ end
+
extras.registerpages = ignorebreaks
extras.registerseparator = ignorespaces
@@ -1859,16 +1866,26 @@ do
local f_metadata = formatters["%w<metavariable name=%q>%s</metavariable>\n"]
local f_metadata_end = formatters["%w</metadata>\n"]
- --- we could share the r tables ... but it's fast enough anyway
-
local function attributes(a)
- local r = { } -- can be shared
+ local r = { }
local n = 0
for k, v in next, a do
n = n + 1
r[n] = f_attribute(k,v) -- lpegmatch(p_escaped,v)
end
- return concat(r,"",1,n)
+ sort(r)
+ return concat(r,"")
+ end
+
+ local function properties(a)
+ local r = { }
+ local n = 0
+ for k, v in next, a do
+ n = n + 1
+ r[n] = f_property(exportproperties,k,v)
+ end
+ sort(r)
+ return concat(r,"")
end
local depth = 0
@@ -1960,23 +1977,15 @@ do
if not p then
-- skip
elseif exportproperties == v_yes then
- for k, v in next, p do
- n = n + 1
- r[n] = f_attribute(k,v)
- end
+ r[n] = attributes(p)
else
- for k, v in next, p do
- n = n + 1
- r[n] = f_property(exportproperties,k,v)
- end
+ r[n] = properties(p)
end
end
local a = di.attributes
if a then
- for k, v in next, a do
- n = n + 1
- r[n] = f_attribute(k,v)
- end
+ n = n + 1
+ r[n] = attributes(a)
end
if n == 0 then
if nature == "inline" or inline > 0 then
@@ -2228,7 +2237,7 @@ do
for i=2,#trees do
local currenttree = trees[i]
local currentdata = currenttree.data
- local currentpar = currenttree.parnumber
+ local currentpar = currenttree.parnumber
local previouspar = trees[i-1].parnumber
currenttree.collapsed = true
-- is the next ok?
@@ -2544,7 +2553,7 @@ local function collectresults(head,list,pat,pap) -- is last used (we also have c
-- report_export("skipping character: %C (no attribute)",n.char)
else
-- we could add tonunicodes for ligatures (todo)
- local components = getfield(n,"components")
+ local components = getcomponents(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
@@ -2694,7 +2703,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
- if getfield(n,"width") > threshold then
+ if getwidth(n) > threshold then
if last and not somespace[currentcontent[nofcurrentcontent]] then
local a = getattr(n,a_tagged) or pat
if a == last then
@@ -2802,7 +2811,7 @@ local function collectresults(head,list,pat,pap) -- is last used (we also have c
end
end
elseif id == kern_code then
- local kern = getfield(n,"kern")
+ local kern = getkern(n)
if kern > 0 then
local limit = threshold
if p and getid(p) == glyph_code then
@@ -2906,7 +2915,7 @@ local xmlpreamble = [[
return replacetemplate(xmlpreamble, {
standalone = standalone and "yes" or "no",
filename = tex.jobname,
- date = os.date(),
+ date = included.date and backends.timestamp(),
contextversion = environment.version,
exportversion = exportversion,
})
@@ -3157,40 +3166,50 @@ local htmltemplate = [[
end)
local function makeclass(tg,at)
- local detail = at.detail
- local chain = at.chain
- local result
- at.detail = nil
- at.chain = nil
+ local detail = at.detail
+ local chain = at.chain
+ local extra = nil
+ local classes = { }
+ local nofclasses = 0
+ at.detail = nil
+ at.chain = nil
+ for k, v in next, at do
+ if not private[k] then
+ nofclasses = nofclasses + 1
+ classes[nofclasses] = k .. "-" .. v
+ end
+ end
if detail and detail ~= "" then
if chain and chain ~= "" then
if chain ~= detail then
- result = { classes[tg .. " " .. chain .. " " .. detail] } -- we need to remove duplicates
+ extra = classes[tg .. " " .. chain .. " " .. detail]
elseif tg ~= detail then
- result = { tg, detail }
- else
- result = { tg }
+ extra = detail
end
elseif tg ~= detail then
- result = { tg, detail }
- else
- result = { tg }
+ extra = detail
end
elseif chain and chain ~= "" then
if tg ~= chain then
- result = { tg, chain }
+ extra = chain
+ end
+ end
+ -- in this order
+ if nofclasses > 0 then
+ sort(classes)
+ classes = concat(classes," ")
+ if extra then
+ return tg .. " " .. extra .. " " .. classes
else
- result = { tg }
+ return tg .. " " .. classes
end
else
- result = { tg }
- end
- for k, v in next, at do
- if not private[k] then
- result[#result+1] = k .. "-" .. v
+ if extra then
+ return tg .. " " .. extra
+ else
+ return tg
end
end
- return concat(result, " ")
end
local function remap(specification,source,target)
@@ -3315,7 +3334,6 @@ local htmltemplate = [[
-- ./jobname-export/styles/jobname-templates.css
local basename = file.basename(v)
- local corename = file.removesuffix(basename)
local basepath = basename .. "-export"
local imagepath = joinfile(basepath,"images")
local stylepath = joinfile(basepath,"styles")
diff --git a/tex/context/base/mkiv/back-ini.lua b/tex/context/base/mkiv/back-ini.lua
index e8af4d9d9..fd33d5ddc 100644
--- a/tex/context/base/mkiv/back-ini.lua
+++ b/tex/context/base/mkiv/back-ini.lua
@@ -16,15 +16,15 @@ if not modules then modules = { } end modules ['back-ini'] = {
local next, type = next, type
local format = string.format
-backends = backends or { }
-local backends = backends
+backends = backends or { }
+local backends = backends
-local trace_backend = false trackers.register("backend.initializers", function(v) trace_finalizers = v end)
-
-local report_backend = logs.reporter("backend","initializing")
+local trace_backend = false trackers.register("backend.initializers", function(v) trace_finalizers = v end)
+local report_backend = logs.reporter("backend","initializing")
local allocate = utilities.storage.allocate
local setmetatableindex = table.setmetatableindex
+local setaction = nodes.tasks.setaction
local function nothing() return nil end
@@ -117,6 +117,25 @@ interfaces.implement {
name = "setrealspaces",
arguments = "string",
actions = function(v)
- nodes.tasks.setaction("shipouts","nodes.handlers.accessibility",v == interfaces.variables.yes)
+ setaction("shipouts","nodes.handlers.accessibility",v == interfaces.variables.yes)
end
}
+
+-- moved to here
+
+local included = table.setmetatableindex( {
+ context = true,
+ id = true,
+ metadata = true,
+ date = true,
+ id = true,
+ pdf = true,
+}, function(t,k)
+ return true
+end)
+
+backends.included = included
+
+function backends.timestamp()
+ return os.date("%Y-%m-%dT%X") .. os.timezone(true)
+end
diff --git a/tex/context/base/mkiv/back-pdf.lua b/tex/context/base/mkiv/back-pdf.lua
index 323f1d57f..a3f7ffff7 100644
--- a/tex/context/base/mkiv/back-pdf.lua
+++ b/tex/context/base/mkiv/back-pdf.lua
@@ -17,10 +17,11 @@ local codeinjections = backends.pdf.codeinjections
local context = context
local scanners = tokens.scanners
-local scanstring = scanners.string
local scannumber = scanners.number
-local scaninteger = scanners.integer
local scankeyword = scanners.keyword
+local scandimen = scanners.dimen
+local scancount = scanners.count
+local scanstring = scanners.string
local scanners = interfaces.scanners
local implement = interfaces.implement
@@ -180,3 +181,136 @@ implement {
pdf.setobjcompresslevel(o)
end
}
+
+local report = logs.reporter("backend","pdftex primitives")
+local trace = false
+
+scanners.pdfannot = function()
+ if scankeyword("reserveobjectnum") then
+ report("\\pdfannot reserveobjectnum is not (yet) supported")
+ -- if trace then
+ -- report()
+ -- report("\\pdfannot: reserved number (not supported yet)")
+ -- report()
+ -- end
+ else
+ local width = false
+ local height = false
+ local depth = false
+ local data = false
+ local object = false
+ local attr = false
+ --
+ if scankeyword("useobjnum") then
+ object = scancount()
+ report("\\pdfannot useobjectnum is not (yet) supported")
+ end
+ while true do
+ if scankeyword("width") then
+ width = scandimen()
+ elseif scankeyword("height") then
+ height = scandimen()
+ elseif scankeyword("depth") then
+ depth = scandimen()
+ else
+ break
+ end
+ end
+ if scankeyword("attr") then
+ attr = scanstring()
+ end
+ data = scanstring()
+ --
+ -- less strict variant:
+ --
+ -- while true do
+ -- if scankeyword("width") then
+ -- width = scandimen()
+ -- elseif scankeyword("height") then
+ -- height = scandimen()
+ -- elseif scankeyword("depth") then
+ -- depth = scandimen()
+ -- elseif scankeyword("useobjnum") then
+ -- object = scancount()
+ -- elseif scankeyword("attr") then
+ -- attr = scanstring()
+ -- else
+ -- data = scanstring()
+ -- break
+ -- end
+ -- end
+ --
+ -- if trace then
+ -- report()
+ -- report("\\pdfannot:")
+ -- report()
+ -- report(" object: %s",object or "<unset> (not supported yet)")
+ -- report(" width : %p",width or "<unset>")
+ -- report(" height: %p",height or "<unset>")
+ -- report(" depth : %p",depth or "<unset>")
+ -- report(" attr : %s",attr or "<unset>")
+ -- report(" data : %s",data or "<unset>")
+ -- report()
+ -- end
+ context(backends.nodeinjections.annotation(width or 0,height or 0,depth or 0,data or ""))
+ end
+end
+
+scanners.pdfdest = function()
+ local name = false
+ local zoom = false
+ local view = false
+ local width = false
+ local height = false
+ local depth = false
+ if scankeyword("num") then
+ report("\\pdfdest num is not (yet) supported")
+ elseif scankeyword("name") then
+ name = scanstring()
+ end
+ if scankeyword("xyz") then
+ view = "xyz"
+ if scankeyword("zoom") then
+ report("\\pdfdest zoom is ignored")
+ zoom = scancount()
+ end
+ elseif scankeyword("fitbh") then
+ view = "fitbh"
+ elseif scankeyword("fitbv") then
+ view = "fitbv"
+ elseif scankeyword("fitb") then
+ view = "fitb"
+ elseif scankeyword("fith") then
+ view = "fith"
+ elseif scankeyword("fitv") then
+ view = "fitv"
+ elseif scankeyword("fitr") then
+ view = "fitr"
+ while true do
+ if scankeyword("width") then
+ width = scandimen()
+ elseif scankeyword("height") then
+ height = scandimen()
+ elseif scankeyword("depth") then
+ depth = scandimen()
+ else
+ break
+ end
+ end
+ elseif scankeyword("fit") then
+ view = "fit"
+ end
+ -- if trace then
+ -- report()
+ -- report("\\pdfdest:")
+ -- report()
+ -- report(" name : %s",name or "<unset>")
+ -- report(" view : %s",view or "<unset>")
+ -- report(" zoom : %s",zoom or "<unset> (not supported)")
+ -- report(" width : %p",width or "<unset>")
+ -- report(" height: %p",height or "<unset>")
+ -- report(" depth : %p",depth or "<unset>")
+ -- report()
+ -- end
+ context(backends.nodeinjections.destination(width or 0,height or 0,depth or 0,{ name or "" },view or "fit"))
+end
diff --git a/tex/context/base/mkiv/back-pdf.mkiv b/tex/context/base/mkiv/back-pdf.mkiv
index 3e055ea83..f59b59c29 100644
--- a/tex/context/base/mkiv/back-pdf.mkiv
+++ b/tex/context/base/mkiv/back-pdf.mkiv
@@ -52,31 +52,37 @@
%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
+\unexpanded\def\unsupportedpdfprimitive#1%
+ {\writestatus{error}{the primitive \string#1\space is not supported}}
+
+\unexpanded\def\pdfcolorstack {\unsupportedpdfprimitive\pdfcolorstack}
+\unexpanded\def\pdfcolorstackinit{\unsupportedpdfprimitive\pdfcolorstackinit}
+%unexpanded\def\pdfannot {\unsupportedpdfprimitive\pdfannot}
+\unexpanded\def\pdfstartlink {\unsupportedpdfprimitive\pdfstartlink}
+\unexpanded\def\pdfendlink {\unsupportedpdfprimitive\pdfendlink}
+\unexpanded\def\pdfoutline {\unsupportedpdfprimitive\pdfoutline}
+%unexpanded\def\pdfdest {\unsupportedpdfprimitive\pdfdest}
+\unexpanded\def\pdfthread {\unsupportedpdfprimitive\pdfthread}
+\unexpanded\def\pdfstartthread {\unsupportedpdfprimitive\pdfstartthread}
+\unexpanded\def\pdfendthread {\unsupportedpdfprimitive\pdfendthread}
+\unexpanded\def\pdffontattr {\unsupportedpdfprimitive\pdffontattr}
+\unexpanded\def\pdfglyphtounicode{\unsupportedpdfprimitive\pdfglyphtounicode}
+
+\unexpanded\def\pdfannot{\clf_pdfannot}
+\unexpanded\def\pdfdest {\clf_pdfdest}
%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
+\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).
@@ -86,9 +92,9 @@
%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}
+\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:
@@ -296,7 +302,8 @@
% clipping
\unexpanded\def\dostartclipping#1#2#3% we can move this to lua and only set a box here
- {\PointsToBigPoints{#2}\width
+ {\forcecolorhack
+ \PointsToBigPoints{#2}\width
\PointsToBigPoints{#3}\height
\meta_grab_clip_path{#1}\width\height{%
0 0 m %
@@ -587,3 +594,14 @@
% \stoptext
\protect \endinput
+
+% \chapter{FIRST}
+%
+% \goto{bar}[bar]
+%
+% HERE \pdfannot width 20pt height 20pt depth 20pt {/Subtype /Link /Dest (bar) /Border [1 1 1] /F 4}\par
+% HERE \pdfannot width 20pt height 20pt depth 20pt {/Subtype /Link /Dest (foo) /Border [1 1 1] /F 4}\par
+%
+% \chapter[bar]{SECOND}
+%
+% THERE \pdfdest name {foo} \par
diff --git a/tex/context/base/mkiv/bibl-bib.mkiv b/tex/context/base/mkiv/bibl-bib.mkiv
index 80d04099b..f5d911ea7 100644
--- a/tex/context/base/mkiv/bibl-bib.mkiv
+++ b/tex/context/base/mkiv/bibl-bib.mkiv
@@ -140,7 +140,7 @@
\def\doregisterbibtexfile [#1][#2]{\ctxcommand{registerbibtexfile("#1","#2")}}
\def\doregisterbibtexentry [#1][#2]{\ctxcommand{registerbibtexentry("#1","#2")}}
-\def\doapplytobibtexsession[#1][#2]{\xmlprocessregistered{bibtex:#1}{#2}{#2}}
+\def\doapplytobibtexsession[#1][#2]{\xmlprocess{bibtex:#1}{#2}{#2}}
\unexpanded\def\bibtexcommand#1%
{\ifcsname\??pb:c:#1\endcsname \else
diff --git a/tex/context/base/mkiv/bibl-tra.lua b/tex/context/base/mkiv/bibl-tra.lua
index 223554b4d..76171cb7f 100644
--- a/tex/context/base/mkiv/bibl-tra.lua
+++ b/tex/context/base/mkiv/bibl-tra.lua
@@ -21,7 +21,9 @@ end
-- end of hack
-local match, gmatch, format, concat, sort = string.match, string.gmatch, string.format, table.concat, table.sort
+local gmatch, format = string.gmatch, string.format
+local sort = table.sort
+local savedata = io.savedata
bibtex = bibtex or { }
local bibtex = bibtex
@@ -61,10 +63,31 @@ local template = [[
\bibdata{%s}
]]
-local bibtexbin = environment.arguments.mlbibtex and "mlbibcontext" or "bibtex"
+local runners = {
+ bibtex = sandbox.registerrunner {
+ name = "bibtex",
+ method = "execute",
+ program = "bibtex",
+ template = [["%filename%"]],
+ checkers = {
+ filename = "readable",
+ }
+ },
+ mlbibtex = sandbox.registerrunner {
+ name = "mlbibtex",
+ method = "execute",
+ program = "mlbibcontext",
+ template = [["%filename%"]],
+ checkers = {
+ filename = "readable",
+ }
+ }
+}
+
+local runner = environment.arguments.mlbibtex and runners.mlbibtex or runners.bibtex
directives.register("publications.usemlbibtex", function(v)
- bibtexbin = v and "mlbibcontext" or "bibtex"
+ runner = v and runners.mlbibtex or runners.bibtex
end)
function hacks.process(settings)
@@ -74,11 +97,11 @@ function hacks.process(settings)
if database ~= "" then
local targetfile = file.addsuffix(jobname,"aux")
interfaces.showmessage("publications",3,targetfile)
- io.savedata(targetfile,format(template,style,database))
+ savedata(targetfile,format(template,style,database))
if trace_bibtex then
report_tex("processing bibtex file %a using %a",jobname,bibtexbin)
end
- os.execute(format("%s %q",bibtexbin,jobname))
+ runner { filename = jobname }
-- purge 'm
end
end
diff --git a/tex/context/base/mkiv/bibl-tra.mkiv b/tex/context/base/mkiv/bibl-tra.mkiv
index 4c9e83fdf..93f84872a 100644
--- a/tex/context/base/mkiv/bibl-tra.mkiv
+++ b/tex/context/base/mkiv/bibl-tra.mkiv
@@ -959,10 +959,10 @@
{#1}%
{\getparameters[LO][\c!alternative=,\c!extras=,#1]%
\edef\@@currentalternative{\LOalternative}%
- \ifx\@@currentalternative\empty
+ \ifx\@@currentalternative\empty
\edef\@@currentalternative{\@@citedefault}%
\fi
- \ifx\LOextras\empty
+ \ifx\LOextras\empty
\setupcite[\@@currentalternative][#1]%
\else
\expandafter\ifx\csname \??pv \@@currentalternative\c!right\endcsname\relax
diff --git a/tex/context/base/mkiv/blob-ini.lua b/tex/context/base/mkiv/blob-ini.lua
index 106c10f4f..f825b7aa3 100644
--- a/tex/context/base/mkiv/blob-ini.lua
+++ b/tex/context/base/mkiv/blob-ini.lua
@@ -29,7 +29,7 @@ local report_blobs = logs.reporter("blobs")
local flush_node_list = node.flush_list
local hpack_node_list = node.hpack
-local vpack_node_list = node.vpack
+----- vpack_node_list = node.vpack
local write_node = node.write
local typesetters = nodes.typesetters
diff --git a/tex/context/base/mkiv/buff-imp-parsed-xml.lua b/tex/context/base/mkiv/buff-imp-parsed-xml.lua
index 22611ac8a..b18fb65aa 100644
--- a/tex/context/base/mkiv/buff-imp-parsed-xml.lua
+++ b/tex/context/base/mkiv/buff-imp-parsed-xml.lua
@@ -92,7 +92,7 @@ local function parsedxml(root,pattern)
end
local function parser(str,settings)
- parsedxml(xml.convert(str),settings and settings.pattern)
+ parsedxml(xml.convert(string.strip(str)),settings and settings.pattern)
end
visualizers.parsedxml = parsedxml -- for use at the lua end (maybe namespace needed)
diff --git a/tex/context/base/mkiv/buff-ini.lua b/tex/context/base/mkiv/buff-ini.lua
index c41c51607..fd5b047af 100644
--- a/tex/context/base/mkiv/buff-ini.lua
+++ b/tex/context/base/mkiv/buff-ini.lua
@@ -12,7 +12,11 @@ local sub, format = string.sub, string.format
local splitlines, validstring, replacenewlines = string.splitlines, string.valid, string.replacenewlines
local P, Cs, patterns, lpegmatch = lpeg.P, lpeg.Cs, lpeg.patterns, lpeg.match
local utfchar = utf.char
+local nameonly = file.nameonly
local totable = string.totable
+local md5hex = md5.hex
+local isfile = lfs.isfile
+local savedata = io.savedata
local trace_run = false trackers.register("buffers.run", function(v) trace_run = v end)
local trace_grab = false trackers.register("buffers.grab", function(v) trace_grab = v end)
@@ -20,7 +24,7 @@ local trace_visualize = false trackers.register("buffers.visualize", function
local report_buffers = logs.reporter("buffers","usage")
local report_typeset = logs.reporter("buffers","typeset")
-local report_grabbing = logs.reporter("buffers","grabbing")
+----- report_grabbing = logs.reporter("buffers","grabbing")
local context = context
local commands = commands
@@ -32,12 +36,11 @@ local scanstring = scanners.string
local scaninteger = scanners.integer
local scanboolean = scanners.boolean
local scancode = scanners.code
-local scantoken = scanners.token
+----- scantoken = scanners.token
local getters = tokens.getters
local gettoken = getters.token
-local compilescanner = tokens.compile
local scanners = interfaces.scanners
local variables = interfaces.variables
@@ -62,6 +65,9 @@ local catcodenumbers = catcodes.numbers
local ctxcatcodes = catcodenumbers.ctxcatcodes
local txtcatcodes = catcodenumbers.txtcatcodes
+local setdata = job.datasets.setdata
+local getdata = job.datasets.getdata
+
buffers = buffers or { }
local buffers = buffers
@@ -484,24 +490,85 @@ implement {
-- we can consider adding a size to avoid unlikely clashes
-local oldhashes = nil
-local newhashes = nil
+local olddata = nil
+local newdata = nil
+local getrunner = sandbox.getrunner
+
+local runner = sandbox.registerrunner {
+ name = "run buffer",
+ program = "context",
+ method = "execute",
+ template = "--purgeall " .. (jit and "--jit" or "") .. " %filename%",
+ reporter = report_typeset,
+ checkers = {
+ filename = "readable",
+ }
+}
-local function runbuffer(name,encapsulate)
- if not oldhashes then
- oldhashes = job.datasets.getdata("typeset buffers","hashes") or { }
- for hash, n in next, oldhashes do
- local tag = formatters["%s-t-b-%s"](tex.jobname,hash)
- registertempfile(addsuffix(tag,"tmp")) -- to be sure
- registertempfile(addsuffix(tag,"pdf"))
+local function runbuffer(name,encapsulate,runnername,suffixes)
+ if not runnername or runnername == "" then
+ runnername = "run buffer"
+ end
+ local suffix = "pdf"
+ if type(suffixes) == "table" then
+ suffix = suffixes[1]
+ elseif type(suffixes) == "string" and suffixes ~= "" then
+ suffix = suffixes
+ suffixes = { suffix }
+ else
+ suffixes = { suffix }
+ end
+ local runner = getrunner(runnername)
+ if not runner then
+ report_typeset("unknown runner %a",runnername)
+ return
+ end
+ if not olddata then
+ olddata = getdata("buffers","runners") or { }
+ local suffixes = olddata.suffixes
+ local hashes = olddata.hashes
+ if hashes and suffixes then
+ for k, hash in next, hashes do
+ for h, v in next, hash do
+ for s, v in next, suffixes do
+ local tmp = addsuffix(h,s)
+ -- report_typeset("mark for deletion: %s",tmp)
+ registertempfile(tmp)
+ end
+ end
+ end
end
- newhashes = { }
- job.datasets.setdata {
- name = "typeset buffers",
- tag = "hashes",
- data = newhashes,
+ end
+ if not newdata then
+ newdata = {
+ version = environment.version,
+ suffixes = { },
+ hashes = { },
+ }
+ setdata {
+ name = "buffers",
+ tag = "runners",
+ data = newdata,
}
end
+ local oldhashes = olddata.hashes or { }
+ local newhashes = newdata.hashes or { }
+ local old = oldhashes[suffix]
+ local new = newhashes[suffix]
+ if not old then
+ old = { }
+ oldhashes[suffix] = old
+ for hash, n in next, old do
+ local tag = formatters["%s-t-b-%s"](tex.jobname,hash)
+ local tmp = addsuffix(tag,"tmp")
+ -- report_typeset("mark for deletion: %s",tmp)
+ registertempfile(tmp) -- to be sure
+ end
+ end
+ if not new then
+ new = { }
+ newhashes[suffix] = new
+ end
local names = getnames(name)
local content = collectcontent(names,nil) or ""
if content == "" then
@@ -511,29 +578,35 @@ local function runbuffer(name,encapsulate)
content = formatters["\\starttext\n%s\n\\stoptext\n"](content)
end
--
- local hash = md5.hex(content)
- local tag = formatters["%s-t-b-%s"](tex.jobname,hash)
+ local hash = md5hex(content)
+ local tag = formatters["%s-t-b-%s"](nameonly(tex.jobname),hash) -- make sure we run on the local path
--
local filename = addsuffix(tag,"tmp")
- local resultname = addsuffix(tag,"pdf")
+ local resultname = addsuffix(tag,suffix)
--
- if newhashes[hash] then
+ if new[tag] then
-- done
- elseif not oldhashes[hash] or not lfs.isfile(resultname) then
+ elseif not old[tag] or olddata.version ~= newdata.version or not isfile(resultname) then
if trace_run then
report_typeset("changes in %a, processing forced",name)
end
- io.savedata(filename,content)
- local command = formatters["context --purgeall %s %s"](jit and "--jit" or "",filename)
- report_typeset("running: %s\n",command)
- os.execute(command)
+ savedata(filename,content)
+ report_typeset("processing saved buffer %a\n",filename)
+ runner { filename = filename }
end
- newhashes[hash] = (newhashes[hash] or 0) + 1
+ new[tag] = (new[tag] or 0) + 1
report_typeset("no changes in %a, processing skipped",name)
registertempfile(filename)
- registertempfile(resultname,nil,true)
+ -- report_typeset("mark for persistence: %s",filename)
+ for i=1,#suffixes do
+ local suffix = suffixes[i]
+ newdata.suffixes[suffix] = true
+ local tmp = addsuffix(tag,suffix)
+ -- report_typeset("mark for persistance: %s",tmp)
+ registertempfile(tmp,nil,true)
+ end
--
- return resultname
+ return resultname -- first result
end
local function getbuffer(name)
@@ -563,18 +636,26 @@ local function gettexbuffer(name)
end
end
+buffers.run = runbuffer
+
implement { name = "getbufferctxlua", actions = loadcontent, arguments = "string" }
implement { name = "getbuffer", actions = getbuffer, arguments = "string" }
implement { name = "getbuffermkvi", actions = getbuffermkvi, arguments = "string" }
implement { name = "gettexbuffer", actions = gettexbuffer, arguments = "string" }
implement {
- name = "runbuffer",
+ name = "typesetbuffer",
actions = { runbuffer, context },
arguments = { "string", true }
}
implement {
+ name = "runbuffer",
+ actions = { runbuffer, context },
+ arguments = { "string", false, "string" }
+}
+
+implement {
name = "doifelsebuffer",
actions = { exists, commands.doifelse },
arguments = "string"
@@ -590,18 +671,25 @@ implement {
arguments = "string"
}
-local startbuffer = context.startbuffer
-local stopbuffer = context.stopbuffer
+do
-local startcollecting = context.startcollecting
-local stopcollecting = context.stopcollecting
+ local context = context
+ local ctxcore = context.core
-function context.startbuffer(...)
- startcollecting()
- startbuffer(...)
-end
+ local startbuffer = ctxcore.startbuffer
+ local stopbuffer = ctxcore.stopbuffer
+
+ local startcollecting = context.startcollecting
+ local stopcollecting = context.stopcollecting
+
+ function ctxcore.startbuffer(...)
+ startcollecting()
+ startbuffer(...)
+ end
+
+ function ctxcore.stopbuffer()
+ stopbuffer()
+ stopcollecting()
+ end
-function context.stopbuffer()
- stopbuffer()
- stopcollecting()
end
diff --git a/tex/context/base/mkiv/buff-par.lua b/tex/context/base/mkiv/buff-par.lua
index 58ea9ab9d..9c75b90e7 100644
--- a/tex/context/base/mkiv/buff-par.lua
+++ b/tex/context/base/mkiv/buff-par.lua
@@ -6,7 +6,7 @@ if not modules then modules = { } end modules ['buff-par'] = {
license = "see context related readme files"
}
-local insert, remove, find, gmatch = table.insert, table.remove, string.find, string.gmatch
+local insert, remove, find, gmatch, match = table.insert, table.remove, string.find, string.gmatch, string.match
local fullstrip, formatters = string.fullstrip, string.formatters
local trace_parallel = false trackers.register("buffers.parallel", function(v) trace_parallel = v end)
@@ -90,18 +90,31 @@ function parallel.save(category,tag,content,frombuffer)
-- use lpeg
if find(content,"%s*%[") then
local done = false
- for label, content in gmatch(content,"%s*%[(.-)%]%s*([^%[]+)") do
+
+ local function flush(content,label)
if done then
line = { }
insert(lines,line)
else
done = true
end
+ line.content = fullstrip(content)
+ line.label = label
+ end
+
+
+ local leading, rest = match(content,"^%s*([^%[]+)(.*)$")
+ if leading then
+ if leading ~= "" then
+ flush(leading)
+ end
+ content = rest
+ end
+ for label, content in gmatch(content,"%s*%[(.-)%]%s*([^%[]+)") do
if trace_parallel and label ~= "" then
report_parallel("reference found of category %a, tag %a, label %a",category,tag,label)
end
- line.content = fullstrip(content)
- line.label = label
+ flush(content,label)
end
else
line.content = fullstrip(content)
diff --git a/tex/context/base/mkiv/buff-par.mkvi b/tex/context/base/mkiv/buff-par.mkvi
index b17edb173..189e68eec 100644
--- a/tex/context/base/mkiv/buff-par.mkvi
+++ b/tex/context/base/mkiv/buff-par.mkvi
@@ -15,24 +15,40 @@
\registerctxluafile{buff-par}{1.001}
-%D This module is developped for Thomas Schmitz as part of a project. There is
-%D no documentation yet.
+%D This module is made for Thomas Schmitz as part of a project. There is
+%D no documentation yet. Also, this code is unfinished and not tested well.
%D
%D \starttyping
%D \defineparallel[main][one,two]
%D
%D \startmain
%D \startone
-%D first 1
-%D [reference] first 2
+%D first 0
+%D [reference] first 1
+%D first 2
%D first 3
%D \stopone
%D \starttwo
%D second 1
+%D second 2
%D \stoptwo
%D \stopmain
%D
-%D \placeparallel[main][one,two][criterium=all]
+%D \startmain
+%D \startone
+%D first 4
+%D first 4
+%D \stopone
+%D \starttwo
+%D second 3
+%D second 4
+%D \stoptwo
+%D \stopmain
+%D
+%D \placeparallel[main][one][criterium=all]
+%D
+%D \placeparallel[main][two][criterium=all]
+%D \stoptyping
%D criterium=all start=<number> n=<number>
@@ -134,7 +150,8 @@
{}
\def\buff_parallel_flush_yes
- {\directsetup{\namedparallelparameter{\currentparallel:\currentparallelinstance}\c!setups}}
+ %{\directsetup{\namedparallelparameter{\currentparallel:\currentparallelinstance}\c!setups}}
+ {\directsetup{\namedparallelparameter{\currentparallelinstance}\c!setups}}
\unexpanded\def\doifelseparallel#name#instance%
{\clf_doifelseparallel{#name}{#instance}}
diff --git a/tex/context/base/mkiv/buff-ver.lua b/tex/context/base/mkiv/buff-ver.lua
index 448d1a60c..ed0e327a1 100644
--- a/tex/context/base/mkiv/buff-ver.lua
+++ b/tex/context/base/mkiv/buff-ver.lua
@@ -40,7 +40,6 @@ local variables = interfaces.variables
local findfile = resolvers.findfile
local addsuffix = file.addsuffix
-local v_auto = variables.auto
local v_yes = variables.yes
local v_last = variables.last
local v_all = variables.all
@@ -555,7 +554,7 @@ local beginline = C(patterns.beginline) * CargOne / f_beginline
local anything = C(patterns.somecontent) * CargOne / f_default
----- verbosed = (space + newline * (emptyline^0) * beginline + anything)^0
-local verbosed = (space + newline * (emptyline^0) * beginline + emptyline + newline + anything)^0
+local verbosed = (space + newline * (emptyline^0) * beginline + newline * emptyline + newline + anything)^0
local function write(s,settings) -- bad name
lpegmatch(verbosed,s,1,settings or false)
diff --git a/tex/context/base/mkiv/buff-ver.mkiv b/tex/context/base/mkiv/buff-ver.mkiv
index 5b3ed6f2a..27535dba9 100644
--- a/tex/context/base/mkiv/buff-ver.mkiv
+++ b/tex/context/base/mkiv/buff-ver.mkiv
@@ -751,6 +751,10 @@
\definetyping[\v!typing]
+% the \zeropoint forces the number to the margin but also works ok in text
+
+\setuplinenumbering[\v!typing][\c!location=\v!left,\c!width=\zeropoint]
+
\setuptyping [\v!file] [\s!parent=\??typing \v!typing] % we don't want \start..\stop overload
\setuplinenumbering[\v!file] [\s!parent=\??linenumbering\v!typing]
@@ -970,7 +974,8 @@
\fi\fi\fi}
\unexpanded\def\dodisplayverbatiminitialize#1%
- {\c_buff_verbatim_noflines#1\relax
+ {\forgetparindent % maybe more
+ \c_buff_verbatim_noflines#1\relax
\c_buff_verbatim_current\zerocount}
\loadmarkfile{buff-imp-default} % preloaded as otherwise spurious spaces inline due to loading
diff --git a/tex/context/base/mkiv/char-cjk.lua b/tex/context/base/mkiv/char-cjk.lua
index 9d6b28a60..3db90386e 100644
--- a/tex/context/base/mkiv/char-cjk.lua
+++ b/tex/context/base/mkiv/char-cjk.lua
@@ -10,7 +10,6 @@ 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
diff --git a/tex/context/base/mkiv/char-def.lua b/tex/context/base/mkiv/char-def.lua
index f112f2b67..76c51a6b4 100644
--- a/tex/context/base/mkiv/char-def.lua
+++ b/tex/context/base/mkiv/char-def.lua
@@ -18,6 +18,11 @@ differences. We could save some bytes by sharing variant tables but it's not wor
the trouble. Some additional data is kept in other files.
]]--
+local variants_emoji={
+ [0xFE0E]="text style",
+ [0xFE0F]="emoji style",
+}
+
characters = characters or { }
characters.data={
@@ -98,6 +103,7 @@ characters.data={
description="CHARACTER TABULATION",
direction="s",
linebreak="ba",
+ synonyms={ "horizontal tabulation", "ht", "tab" },
unicodeslot=0x9,
},
{
@@ -106,6 +112,7 @@ characters.data={
description="LINE FEED (LF)",
direction="b",
linebreak="lf",
+ synonyms={ "end of line", "eol", "lf", "new line", "nl" },
unicodeslot=0xA,
},
{
@@ -114,6 +121,7 @@ characters.data={
description="LINE TABULATION",
direction="s",
linebreak="bk",
+ synonyms={ "vertical tabulation", "vt" },
unicodeslot=0xB,
},
{
@@ -122,6 +130,7 @@ characters.data={
description="FORM FEED (FF)",
direction="ws",
linebreak="bk",
+ synonyms={ "ff" },
unicodeslot=0xC,
},
{
@@ -130,6 +139,7 @@ characters.data={
description="CARRIAGE RETURN (CR)",
direction="b",
linebreak="cr",
+ synonyms={ "cr" },
unicodeslot=0xD,
},
{
@@ -250,6 +260,7 @@ characters.data={
description="INFORMATION SEPARATOR FOUR",
direction="b",
linebreak="cm",
+ synonyms={ "file separator" },
unicodeslot=0x1C,
},
{
@@ -258,6 +269,7 @@ characters.data={
description="INFORMATION SEPARATOR THREE",
direction="b",
linebreak="cm",
+ synonyms={ "group separator" },
unicodeslot=0x1D,
},
{
@@ -266,6 +278,7 @@ characters.data={
description="INFORMATION SEPARATOR TWO",
direction="b",
linebreak="cm",
+ synonyms={ "record separator" },
unicodeslot=0x1E,
},
{
@@ -274,6 +287,7 @@ characters.data={
description="INFORMATION SEPARATOR ONE",
direction="s",
linebreak="cm",
+ synonyms={ "unit separator" },
unicodeslot=0x1F,
},
{
@@ -293,6 +307,7 @@ characters.data={
direction="on",
linebreak="ex",
mathclass="close",
+ synonyms={ "bang", "factorial" },
unicodeslot=0x21,
},
{
@@ -304,6 +319,7 @@ characters.data={
direction="on",
linebreak="qu",
mathclass="default",
+ synonyms={ "neutral quotation mark" },
unicodeslot=0x22,
},
{
@@ -316,11 +332,9 @@ characters.data={
linebreak="al",
mathclass="binary",
mathname="mathhash",
+ synonyms={ "crosshatch", "hash", "octothorpe", "pound sign" },
unicodeslot=0x23,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
{
adobename="dollar",
@@ -332,6 +346,7 @@ characters.data={
linebreak="pr",
mathclass="binary",
mathname="mathdollar",
+ synonyms={ "escudo", "milreis" },
unicodeslot=0x24,
},
{
@@ -367,6 +382,7 @@ characters.data={
direction="on",
linebreak="qu",
mathclass="default",
+ synonyms={ "apl quote", "apostrophe-quote", "neutral single quotation mark" },
unicodeslot=0x27,
},
{
@@ -379,6 +395,7 @@ characters.data={
mathclass="open",
mathname="lparent",
mirror=0x29,
+ synonyms={ "opening parenthesis" },
textclass="open",
unicodeslot=0x28,
},
@@ -392,6 +409,7 @@ characters.data={
mathclass="close",
mathname="rparent",
mirror=0x28,
+ synonyms={ "closing parenthesis" },
textclass="close",
unicodeslot=0x29,
},
@@ -405,7 +423,9 @@ characters.data={
mathclass="binary",
mathname="ast",
mathsymbol=0x2217,
+ synonyms={ "star" },
unicodeslot=0x2A,
+ variants=variants_emoji,
},
{
adobename="plus",
@@ -426,18 +446,23 @@ characters.data={
direction="cs",
linebreak="is",
mathclass="punctuation",
+ synonyms={ "decimal separator" },
unicodeslot=0x2C,
},
{
adobename="hyphen",
category="pd",
cjkwd="na",
+ contextname="texthyphen",
description="HYPHEN-MINUS",
direction="es",
linebreak="hy",
+ mathclass="nothing",
mathextensible="h",
mathfiller="relfill",
+ mathname="mathhyphen",
mathsymbol=0x2212,
+ synonyms={ "hyphen or minus sign", "hyphus" },
unicodeslot=0x2D,
},
{
@@ -456,6 +481,7 @@ characters.data={
name="ldotp",
},
},
+ synonyms={ "decimal point", "dot", "period" },
unicodeslot=0x2E,
},
{
@@ -474,6 +500,7 @@ characters.data={
class="ordinary",
},
},
+ synonyms={ "slash", "virgule" },
unicodeslot=0x2F,
},
{
@@ -486,6 +513,7 @@ characters.data={
mathclass="number",
unicodeslot=0x30,
variants={
+ [0xFE00]="short diagonal stroke form",
[0xFE0E]="text style",
[0xFE0F]="emoji style",
},
@@ -499,10 +527,7 @@ characters.data={
linebreak="nu",
mathclass="number",
unicodeslot=0x31,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
{
adobename="two",
@@ -513,10 +538,7 @@ characters.data={
linebreak="nu",
mathclass="number",
unicodeslot=0x32,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
{
adobename="three",
@@ -527,10 +549,7 @@ characters.data={
linebreak="nu",
mathclass="number",
unicodeslot=0x33,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
{
adobename="four",
@@ -541,10 +560,7 @@ characters.data={
linebreak="nu",
mathclass="number",
unicodeslot=0x34,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
{
adobename="five",
@@ -555,10 +571,7 @@ characters.data={
linebreak="nu",
mathclass="number",
unicodeslot=0x35,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
{
adobename="six",
@@ -569,10 +582,7 @@ characters.data={
linebreak="nu",
mathclass="number",
unicodeslot=0x36,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
{
adobename="seven",
@@ -583,10 +593,7 @@ characters.data={
linebreak="nu",
mathclass="number",
unicodeslot=0x37,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
{
adobename="eight",
@@ -597,10 +604,7 @@ characters.data={
linebreak="nu",
mathclass="number",
unicodeslot=0x38,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
{
adobename="nine",
@@ -611,10 +615,7 @@ characters.data={
linebreak="nu",
mathclass="number",
unicodeslot=0x39,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
{
adobename="colon",
@@ -635,6 +636,7 @@ characters.data={
direction="on",
linebreak="is",
mathclass="punctuation",
+ synonyms={ "greek question mark" },
unicodeslot=0x3B,
},
{
@@ -703,6 +705,7 @@ characters.data={
description="COMMERCIAL AT",
direction="on",
linebreak="al",
+ synonyms={ "at sign" },
unicodeslot=0x40,
},
{
@@ -1003,6 +1006,7 @@ characters.data={
mathclass="open",
mathname="lbracket",
mirror=0x5D,
+ synonyms={ "opening square bracket" },
textclass="open",
unicodeslot=0x5B,
},
@@ -1016,6 +1020,7 @@ characters.data={
linebreak="pr",
mathclass="nothing",
mathname="backslash",
+ synonyms={ "backslash" },
unicodeslot=0x5C,
},
{
@@ -1028,6 +1033,7 @@ characters.data={
mathclass="close",
mathname="rbracket",
mirror=0x5B,
+ synonyms={ "closing square bracket" },
textclass="close",
unicodeslot=0x5D,
},
@@ -1041,6 +1047,7 @@ characters.data={
linebreak="al",
mathclass="topaccent",
mathname="Hat",
+ synonyms={ "spacing circumflex accent" },
unicodeslot=0x5E,
},
{
@@ -1051,6 +1058,7 @@ characters.data={
description="LOW LINE",
direction="on",
linebreak="al",
+ synonyms={ "spacing underscore" },
unicodeslot=0x5F,
},
{
@@ -1063,6 +1071,7 @@ characters.data={
linebreak="al",
mathclass="topaccent",
mathname="grave",
+ synonyms={ "spacing grave accent" },
unicodeslot=0x60,
},
{
@@ -1363,6 +1372,7 @@ characters.data={
mathclass="open",
mathname="lbrace",
mirror=0x7D,
+ synonyms={ "opening brace", "opening curly bracket" },
textclass="open",
unicodeslot=0x7B,
},
@@ -1401,6 +1411,7 @@ characters.data={
name="singleverticalbar",
},
},
+ synonyms={ "absolute value", "vertical bar" },
unicodeslot=0x7C,
},
{
@@ -1414,6 +1425,7 @@ characters.data={
mathclass="close",
mathname="rbrace",
mirror=0x7B,
+ synonyms={ "closing brace", "closing curly bracket" },
textclass="close",
unicodeslot=0x7D,
},
@@ -1425,6 +1437,7 @@ characters.data={
description="TILDE",
direction="on",
linebreak="al",
+ synonyms={ "spacing tilde" },
unicodeslot=0x7E,
},
{
@@ -1475,6 +1488,7 @@ characters.data={
description="NEXT LINE (NEL)",
direction="b",
linebreak="nl",
+ synonyms={ "nel" },
unicodeslot=0x85,
},
{
@@ -1667,6 +1681,7 @@ characters.data={
direction="cs",
linebreak="gl",
specials={ "nobreak", 0x20 },
+ synonyms={ "nbsp", "non-breaking space" },
unicodeslot=0xA0,
},
{
@@ -1697,6 +1712,7 @@ characters.data={
description="POUND SIGN",
direction="et",
linebreak="pr",
+ synonyms={ "irish punt", "italian lira", "pound sterling" },
unicodeslot=0xA3,
},
{
@@ -1719,6 +1735,7 @@ characters.data={
linebreak="pr",
mathclass="nothing",
mathname="yen",
+ synonyms={ "yuan sign" },
unicodeslot=0xA5,
},
{
@@ -1729,6 +1746,7 @@ characters.data={
description="BROKEN BAR",
direction="on",
linebreak="al",
+ synonyms={ "broken vertical bar", "parted rule" },
unicodeslot=0xA6,
},
{
@@ -1741,6 +1759,7 @@ characters.data={
linebreak="ai",
mathclass="box",
mathname="S",
+ synonyms={ "european paragraph sign" },
unicodeslot=0xA7,
},
{
@@ -1754,6 +1773,7 @@ characters.data={
mathclass="topaccent",
mathname="ddot",
specials={ "compat", 0x20, 0x308 },
+ synonyms={ "spacing diaeresis" },
unicodeslot=0xA8,
},
{
@@ -1764,10 +1784,7 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0xA9,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
{
adobename="ordfeminine",
@@ -1788,6 +1805,7 @@ characters.data={
direction="on",
linebreak="qu",
mirror=0xBB,
+ synonyms={ "chevrons", "left pointing guillemet" },
textclass="open",
unicodeslot=0xAB,
},
@@ -1809,6 +1827,7 @@ characters.data={
name="neg",
},
},
+ synonyms={ "angled dash" },
unicodeslot=0xAC,
},
{
@@ -1819,6 +1838,7 @@ characters.data={
description="SOFT HYPHEN",
direction="bn",
linebreak="ba",
+ synonyms={ "discretionary hyphen", "shy" },
unicodeslot=0xAD,
},
{
@@ -1829,11 +1849,9 @@ characters.data={
description="REGISTERED SIGN",
direction="on",
linebreak="al",
+ synonyms={ "registered trade mark sign" },
unicodeslot=0xAE,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
{
adobename="macron",
@@ -1848,6 +1866,7 @@ characters.data={
mathmleq=0x203E,
mathname="bar",
specials={ "compat", 0x20, 0x304 },
+ synonyms={ "apl overbar", "overline", "spacing macron" },
unicodeslot=0xAF,
},
{
@@ -1881,6 +1900,7 @@ characters.data={
direction="en",
linebreak="ai",
specials={ "super", 0x32 },
+ synonyms={ "squared" },
unicodeslot=0xB2,
},
{
@@ -1892,6 +1912,7 @@ characters.data={
direction="en",
linebreak="ai",
specials={ "super", 0x33 },
+ synonyms={ "cubed" },
unicodeslot=0xB3,
},
{
@@ -1905,6 +1926,7 @@ characters.data={
mathclass="topaccent",
mathname="acute",
specials={ "compat", 0x20, 0x301 },
+ synonyms={ "spacing acute accent" },
unicodeslot=0xB4,
},
{
@@ -1928,6 +1950,7 @@ characters.data={
linebreak="ai",
mathclass="box",
mathname="P",
+ synonyms={ "european section sign", "paragraph sign" },
unicodeslot=0xB6,
},
{
@@ -1940,6 +1963,7 @@ characters.data={
linebreak="ai",
mathclass="binary",
mathname="centerdot",
+ synonyms={ "georgian comma", "greek ano teleia", "greek middle dot", "midpoint" },
unicodeslot=0xB7,
},
{
@@ -1951,6 +1975,7 @@ characters.data={
direction="on",
linebreak="ai",
specials={ "compat", 0x20, 0x327 },
+ synonyms={ "spacing cedilla" },
unicodeslot=0xB8,
},
{
@@ -1983,6 +2008,7 @@ characters.data={
direction="on",
linebreak="qu",
mirror=0xAB,
+ synonyms={ "right pointing guillemet" },
textclass="close",
unicodeslot=0xBB,
},
@@ -2027,6 +2053,7 @@ characters.data={
description="INVERTED QUESTION MARK",
direction="on",
linebreak="op",
+ synonyms={ "turned question mark" },
unicodeslot=0xBF,
},
{
@@ -2111,6 +2138,7 @@ characters.data={
lccode=0xE6,
linebreak="al",
shcode={ 0x41, 0x45 },
+ synonyms={ "latin capital ligature ae" },
unicodeslot=0xC6,
},
{
@@ -2314,6 +2342,7 @@ characters.data={
linebreak="ai",
mathclass="binary",
mathname="times",
+ synonyms={ "cartesian product" },
unicodeslot=0xD7,
},
{
@@ -2326,6 +2355,7 @@ characters.data={
lccode=0xF8,
linebreak="al",
shcode=0x4F,
+ synonyms={ "latin capital letter o slash" },
unicodeslot=0xD8,
},
{
@@ -2409,6 +2439,7 @@ characters.data={
direction="l",
linebreak="al",
shcode={ 0x73, 0x73 },
+ synonyms={ "eszett" },
uccode={ 0x53, 0x53 },
unicodeslot=0xDF,
},
@@ -2495,6 +2526,7 @@ characters.data={
direction="l",
linebreak="al",
shcode={ 0x61, 0x65 },
+ synonyms={ "ash", "latin small ligature ae" },
uccode=0xC6,
unicodeslot=0xE6,
},
@@ -2708,6 +2740,7 @@ characters.data={
linebreak="ai",
mathclass="binary",
mathname="div",
+ synonyms={ "obelus" },
unicodeslot=0xF7,
},
{
@@ -2719,6 +2752,7 @@ characters.data={
direction="l",
linebreak="al",
shcode=0x6F,
+ synonyms={ "latin small letter o slash" },
uccode=0xD8,
unicodeslot=0xF8,
},
@@ -3397,6 +3431,7 @@ characters.data={
linebreak="al",
shcode=0x49,
specials={ "char", 0x49, 0x307 },
+ synonyms={ "latin capital letter i dot" },
unicodeslot=0x130,
},
{
@@ -3817,6 +3852,7 @@ characters.data={
direction="l",
linebreak="al",
shcode={ 0x6F, 0x65 },
+ synonyms={ "ethel", "latin small letter o e" },
uccode=0x152,
unicodeslot=0x153,
},
@@ -4495,6 +4531,7 @@ characters.data={
direction="l",
lccode=0x1DD,
linebreak="al",
+ synonyms={ "latin capital letter turned e" },
unicodeslot=0x18E,
},
{
@@ -4514,6 +4551,7 @@ characters.data={
direction="l",
lccode=0x25B,
linebreak="al",
+ synonyms={ "latin capital letter epsilon" },
unicodeslot=0x190,
},
{
@@ -4535,6 +4573,7 @@ characters.data={
direction="l",
linebreak="al",
shcode=0x66,
+ synonyms={ "florin currency symbol", "folder", "function symbol", "latin small letter script f" },
uccode=0x191,
unicodeslot=0x192,
},
@@ -4585,6 +4624,7 @@ characters.data={
lccode=0x268,
linebreak="al",
shcode=0x49,
+ synonyms={ "latin capital letter i bar" },
unicodeslot=0x197,
},
{
@@ -4628,6 +4668,7 @@ characters.data={
linebreak="al",
mathclass="variable",
mathname="lambdabar",
+ synonyms={ "latin letter lambda bar" },
unicodeslot=0x19B,
},
{
@@ -4667,6 +4708,7 @@ characters.data={
lccode=0x275,
linebreak="al",
shcode=0x4F,
+ synonyms={ "latin capital letter barred o", "latin capital letter o bar" },
unicodeslot=0x19F,
},
{
@@ -4860,6 +4902,7 @@ characters.data={
lccode=0x28B,
linebreak="al",
shcode=0x56,
+ synonyms={ "latin capital letter script v" },
unicodeslot=0x1B2,
},
{
@@ -4903,6 +4946,7 @@ characters.data={
direction="l",
linebreak="al",
shcode=0x7A,
+ synonyms={ "latin small letter z bar" },
uccode=0x1B5,
unicodeslot=0x1B6,
},
@@ -4991,6 +5035,7 @@ characters.data={
description="LATIN LETTER DENTAL CLICK",
direction="l",
linebreak="al",
+ synonyms={ "pipe" },
unicodeslot=0x1C0,
},
{
@@ -4999,6 +5044,7 @@ characters.data={
description="LATIN LETTER LATERAL CLICK",
direction="l",
linebreak="al",
+ synonyms={ "double pipe" },
unicodeslot=0x1C1,
},
{
@@ -5007,6 +5053,7 @@ characters.data={
description="LATIN LETTER ALVEOLAR CLICK",
direction="l",
linebreak="al",
+ synonyms={ "double-barred pipe" },
unicodeslot=0x1C2,
},
{
@@ -5015,6 +5062,7 @@ characters.data={
description="LATIN LETTER RETROFLEX CLICK",
direction="l",
linebreak="al",
+ synonyms={ "latin letter exclamation mark" },
unicodeslot=0x1C3,
},
{
@@ -6572,6 +6620,7 @@ characters.data={
description="LATIN SMALL LETTER ALPHA",
direction="l",
linebreak="al",
+ synonyms={ "latin small letter script a" },
unicodeslot=0x251,
},
{
@@ -6620,6 +6669,7 @@ characters.data={
direction="l",
linebreak="al",
shcode=0x64,
+ synonyms={ "latin small letter d retroflex hook" },
uccode=0x189,
unicodeslot=0x256,
},
@@ -6668,6 +6718,7 @@ characters.data={
description="LATIN SMALL LETTER OPEN E",
direction="l",
linebreak="al",
+ synonyms={ "latin small letter epsilon" },
uccode=0x190,
unicodeslot=0x25B,
},
@@ -6693,6 +6744,7 @@ characters.data={
description="LATIN SMALL LETTER CLOSED REVERSED OPEN E",
direction="l",
linebreak="al",
+ synonyms={ "latin small letter closed reversed epsilon" },
unicodeslot=0x25E,
},
{
@@ -6745,6 +6797,7 @@ characters.data={
description="LATIN SMALL LETTER RAMS HORN",
direction="l",
linebreak="al",
+ synonyms={ "latin small letter baby gamma" },
unicodeslot=0x264,
},
{
@@ -6892,6 +6945,7 @@ characters.data={
description="LATIN SMALL LETTER BARRED O",
direction="l",
linebreak="al",
+ synonyms={ "latin small letter o bar" },
uccode=0x19F,
unicodeslot=0x275,
},
@@ -7080,6 +7134,7 @@ characters.data={
direction="l",
linebreak="al",
shcode=0x76,
+ synonyms={ "latin small letter script v" },
uccode=0x1B2,
unicodeslot=0x28B,
},
@@ -7089,6 +7144,7 @@ characters.data={
description="LATIN SMALL LETTER TURNED V",
direction="l",
linebreak="al",
+ synonyms={ "caret" },
uccode=0x245,
unicodeslot=0x28C,
},
@@ -7139,6 +7195,7 @@ characters.data={
description="LATIN SMALL LETTER EZH",
direction="l",
linebreak="al",
+ synonyms={ "dram" },
uccode=0x1B7,
unicodeslot=0x292,
},
@@ -7165,6 +7222,7 @@ characters.data={
description="LATIN LETTER PHARYNGEAL VOICED FRICATIVE",
direction="l",
linebreak="al",
+ synonyms={ "latin letter reversed glottal stop" },
unicodeslot=0x295,
},
{
@@ -7189,6 +7247,7 @@ characters.data={
description="LATIN LETTER BILABIAL CLICK",
direction="l",
linebreak="al",
+ synonyms={ "latin letter bullseye" },
unicodeslot=0x298,
},
{
@@ -7204,6 +7263,7 @@ characters.data={
description="LATIN SMALL LETTER CLOSED OPEN E",
direction="l",
linebreak="al",
+ synonyms={ "latin small letter closed epsilon" },
unicodeslot=0x29A,
},
{
@@ -7477,6 +7537,7 @@ characters.data={
description="MODIFIER LETTER APOSTROPHE",
direction="l",
linebreak="al",
+ synonyms={ "glottal stop", "neutral apostrophe" },
unicodeslot=0x2BC,
},
{
@@ -7577,6 +7638,7 @@ characters.data={
mathclass="topaccent",
mathname="check",
specials={ "compat", 0x20, 0x30C },
+ synonyms={ "mandarin chinese third tone", "modifier letter hacek" },
unicodeslot=0x2C7,
},
{
@@ -7594,6 +7656,7 @@ characters.data={
description="MODIFIER LETTER MACRON",
direction="on",
linebreak="ai",
+ synonyms={ "mandarin chinese first tone" },
unicodeslot=0x2C9,
},
{
@@ -7603,6 +7666,7 @@ characters.data={
description="MODIFIER LETTER ACUTE ACCENT",
direction="on",
linebreak="ai",
+ synonyms={ "mandarin chinese second tone" },
unicodeslot=0x2CA,
},
{
@@ -7612,6 +7676,7 @@ characters.data={
description="MODIFIER LETTER GRAVE ACCENT",
direction="on",
linebreak="ai",
+ synonyms={ "mandarin chinese fourth tone" },
unicodeslot=0x2CB,
},
{
@@ -7736,6 +7801,7 @@ characters.data={
mathclass="topaccent",
mathname="dot",
specials={ "compat", 0x20, 0x307 },
+ synonyms={ "mandarin chinese fifth or neutral tone" },
unicodeslot=0x2D9,
},
{
@@ -7799,6 +7865,7 @@ characters.data={
description="MODIFIER LETTER CROSS ACCENT",
direction="on",
linebreak="bb",
+ synonyms={ "swedish grave accent" },
unicodeslot=0x2DF,
},
{
@@ -8046,6 +8113,7 @@ characters.data={
description="COMBINING GRAVE ACCENT",
direction="nsm",
linebreak="cm",
+ synonyms={ "greek varia" },
unicodeslot=0x300,
},
{
@@ -8056,6 +8124,7 @@ characters.data={
description="COMBINING ACUTE ACCENT",
direction="nsm",
linebreak="cm",
+ synonyms={ "greek oxia", "greek tonos", "stress mark" },
unicodeslot=0x301,
},
{
@@ -8092,6 +8161,7 @@ characters.data={
description="COMBINING MACRON",
direction="nsm",
linebreak="cm",
+ synonyms={ "long" },
unicodeslot=0x304,
},
{
@@ -8102,6 +8172,7 @@ characters.data={
description="COMBINING OVERLINE",
direction="nsm",
linebreak="cm",
+ synonyms={ "overscore", "vinculum" },
unicodeslot=0x305,
},
{
@@ -8112,6 +8183,7 @@ characters.data={
description="COMBINING BREVE",
direction="nsm",
linebreak="cm",
+ synonyms={ "greek vrachy", "short" },
unicodeslot=0x306,
},
{
@@ -8122,6 +8194,7 @@ characters.data={
description="COMBINING DOT ABOVE",
direction="nsm",
linebreak="cm",
+ synonyms={ "derivative" },
unicodeslot=0x307,
},
{
@@ -8132,6 +8205,7 @@ characters.data={
description="COMBINING DIAERESIS",
direction="nsm",
linebreak="cm",
+ synonyms={ "double derivative", "double dot above", "greek dialytika", "umlaut" },
unicodeslot=0x308,
},
{
@@ -8172,6 +8246,7 @@ characters.data={
description="COMBINING CARON",
direction="nsm",
linebreak="cm",
+ synonyms={ "combining hacek", "v above" },
unicodeslot=0x30C,
},
{
@@ -8232,6 +8307,7 @@ characters.data={
description="COMBINING TURNED COMMA ABOVE",
direction="nsm",
linebreak="cm",
+ synonyms={ "cedilla above" },
unicodeslot=0x312,
},
{
@@ -8242,6 +8318,7 @@ characters.data={
description="COMBINING COMMA ABOVE",
direction="nsm",
linebreak="cm",
+ synonyms={ "greek psili", "greek smooth breathing mark" },
unicodeslot=0x313,
},
{
@@ -8252,6 +8329,7 @@ characters.data={
description="COMBINING REVERSED COMMA ABOVE",
direction="nsm",
linebreak="cm",
+ synonyms={ "greek dasia", "greek rough breathing mark" },
unicodeslot=0x314,
},
{
@@ -8453,6 +8531,7 @@ characters.data={
description="COMBINING OGONEK",
direction="nsm",
linebreak="cm",
+ synonyms={ "nasal hook" },
unicodeslot=0x328,
},
{
@@ -8553,6 +8632,7 @@ characters.data={
description="COMBINING LOW LINE",
direction="nsm",
linebreak="cm",
+ synonyms={ "underline", "underscore" },
unicodeslot=0x332,
},
{
@@ -8563,6 +8643,7 @@ characters.data={
description="COMBINING DOUBLE LOW LINE",
direction="nsm",
linebreak="cm",
+ synonyms={ "double underline", "double underscore" },
unicodeslot=0x333,
},
{
@@ -8603,6 +8684,7 @@ characters.data={
description="COMBINING SHORT SOLIDUS OVERLAY",
direction="nsm",
linebreak="cm",
+ synonyms={ "short slash overlay" },
unicodeslot=0x337,
},
{
@@ -8615,6 +8697,7 @@ characters.data={
linebreak="cm",
mathclass="relation",
mathname="not",
+ synonyms={ "long slash overlay" },
unicodeslot=0x338,
},
{
@@ -8749,6 +8832,7 @@ characters.data={
description="COMBINING GREEK YPOGEGRAMMENI",
direction="nsm",
linebreak="cm",
+ synonyms={ "greek iota subscript", "greek non-spacing iota below" },
uccode=0x399,
unicodeslot=0x345,
},
@@ -8839,6 +8923,7 @@ characters.data={
description="COMBINING GRAPHEME JOINER",
direction="nsm",
linebreak="gl",
+ synonyms={ "cgj" },
unicodeslot=0x34F,
},
{
@@ -8956,6 +9041,7 @@ characters.data={
description="COMBINING DOUBLE BREVE BELOW",
direction="nsm",
linebreak="gl",
+ synonyms={ "ligature tie below", "papyrological hyphen" },
unicodeslot=0x35C,
},
{
@@ -9003,6 +9089,7 @@ characters.data={
description="COMBINING DOUBLE INVERTED BREVE",
direction="nsm",
linebreak="gl",
+ synonyms={ "ligature tie" },
unicodeslot=0x361,
},
{
@@ -9400,6 +9487,7 @@ characters.data={
linebreak="al",
mathclass="variable",
mathname="Gamma",
+ synonyms={ "gamma function" },
unicodeslot=0x393,
},
[0x394]={
@@ -9963,6 +10051,7 @@ characters.data={
linebreak="al",
mathclass="variable",
mathname="pi",
+ synonyms={ "mathematical constant 3.141592... pi", "mathematical constant pi" },
uccode=0x3A0,
unicodeslot=0x3C0,
},
@@ -10156,6 +10245,7 @@ characters.data={
direction="l",
linebreak="al",
specials={ "compat", 0x3B2 },
+ synonyms={ "curled beta" },
uccode=0x392,
unicodeslot=0x3D0,
},
@@ -10169,6 +10259,7 @@ characters.data={
mathclass="variable",
mathname="varTheta",
specials={ "compat", 0x3B8 },
+ synonyms={ "script theta" },
uccode=0x398,
unicodeslot=0x3D1,
},
@@ -10222,6 +10313,7 @@ characters.data={
mathclass="variable",
mathname="varpi",
specials={ "compat", 0x3C0 },
+ synonyms={ "omega pi" },
uccode=0x3A0,
unicodeslot=0x3D6,
},
@@ -10480,6 +10572,7 @@ characters.data={
direction="l",
linebreak="al",
specials={ "compat", 0x3C2 },
+ synonyms={ "greek small letter lunate sigma" },
uccode=0x3F9,
unicodeslot=0x3F2,
},
@@ -10509,6 +10602,7 @@ characters.data={
mathclass="variable",
mathname="epsilon",
specials={ "compat", 0x3B5 },
+ synonyms={ "straight epsilon" },
uccode=0x395,
unicodeslot=0x3F5,
},
@@ -10519,6 +10613,7 @@ characters.data={
linebreak="al",
mathclass="variable",
mathname="backepsilon",
+ synonyms={ "reversed straight epsilon" },
unicodeslot=0x3F6,
},
[0x3F7]={
@@ -14030,6 +14125,7 @@ characters.data={
description="ARMENIAN APOSTROPHE",
direction="l",
linebreak="al",
+ synonyms={ "armenian modifier letter right half ring" },
unicodeslot=0x55A,
},
[0x55B]={
@@ -14038,6 +14134,7 @@ characters.data={
description="ARMENIAN EMPHASIS MARK",
direction="l",
linebreak="al",
+ synonyms={ "armenian shesht" },
unicodeslot=0x55B,
},
[0x55C]={
@@ -14046,6 +14143,7 @@ characters.data={
description="ARMENIAN EXCLAMATION MARK",
direction="l",
linebreak="al",
+ synonyms={ "armenian batsaganchakan nshan" },
unicodeslot=0x55C,
},
[0x55D]={
@@ -14054,6 +14152,7 @@ characters.data={
description="ARMENIAN COMMA",
direction="l",
linebreak="al",
+ synonyms={ "armenian bowt" },
unicodeslot=0x55D,
},
[0x55E]={
@@ -14062,6 +14161,7 @@ characters.data={
description="ARMENIAN QUESTION MARK",
direction="l",
linebreak="al",
+ synonyms={ "armenian hartsakan nshan" },
unicodeslot=0x55E,
},
[0x55F]={
@@ -14070,6 +14170,7 @@ characters.data={
description="ARMENIAN ABBREVIATION MARK",
direction="l",
linebreak="al",
+ synonyms={ "armenian patiw" },
unicodeslot=0x55F,
},
[0x561]={
@@ -14429,6 +14530,7 @@ characters.data={
description="ARMENIAN FULL STOP",
direction="l",
linebreak="is",
+ synonyms={ "armenian vertsaket", "georgian full stop" },
unicodeslot=0x589,
},
[0x58A]={
@@ -14436,6 +14538,7 @@ characters.data={
description="ARMENIAN HYPHEN",
direction="on",
linebreak="ba",
+ synonyms={ "armenian yentamna" },
unicodeslot=0x58A,
},
[0x58D]={
@@ -14457,6 +14560,7 @@ characters.data={
description="ARMENIAN DRAM SIGN",
direction="et",
linebreak="pr",
+ synonyms={ "armenian currency" },
unicodeslot=0x58F,
},
[0x591]={
@@ -15770,6 +15874,7 @@ characters.data={
description="ARABIC TATWEEL",
direction="al",
linebreak="al",
+ synonyms={ "arabic kashida" },
unicodeslot=0x640,
},
[0x641]={
@@ -16140,6 +16245,7 @@ characters.data={
description="ARABIC THOUSANDS SEPARATOR",
direction="an",
linebreak="nu",
+ synonyms={ "arabic phrase separator" },
unicodeslot=0x66C,
},
[0x66D]={
@@ -16873,6 +16979,7 @@ characters.data={
linebreak="al",
shcode=0x647,
specials={ "char", 0x6D5, 0x654 },
+ synonyms={ "arabic letter hamzah on ha", "izafet" },
unicodeslot=0x6C0,
},
[0x6C1]={
@@ -17494,6 +17601,7 @@ characters.data={
description="SYRIAC ABBREVIATION MARK",
direction="al",
linebreak="al",
+ synonyms={ "syriac sam" },
unicodeslot=0x70F,
visible="yes",
},
@@ -20060,6 +20168,190 @@ characters.data={
linebreak="al",
unicodeslot=0x8B4,
},
+ [0x8B6]={
+ arabic="d",
+ category="lo",
+ description="ARABIC LETTER BEH WITH SMALL MEEM ABOVE",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x8B6,
+ },
+ [0x8B7]={
+ arabic="d",
+ category="lo",
+ description="ARABIC LETTER PEH WITH SMALL MEEM ABOVE",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x8B7,
+ },
+ [0x8B8]={
+ arabic="d",
+ category="lo",
+ description="ARABIC LETTER TEH WITH SMALL TEH ABOVE",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x8B8,
+ },
+ [0x8B9]={
+ arabic="r",
+ category="lo",
+ description="ARABIC LETTER REH WITH SMALL NOON ABOVE",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x8B9,
+ },
+ [0x8BA]={
+ arabic="d",
+ category="lo",
+ description="ARABIC LETTER YEH WITH TWO DOTS BELOW AND SMALL NOON ABOVE",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x8BA,
+ },
+ [0x8BB]={
+ arabic="d",
+ category="lo",
+ description="ARABIC LETTER AFRICAN FEH",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x8BB,
+ },
+ [0x8BC]={
+ arabic="d",
+ category="lo",
+ description="ARABIC LETTER AFRICAN QAF",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x8BC,
+ },
+ [0x8BD]={
+ arabic="d",
+ category="lo",
+ description="ARABIC LETTER AFRICAN NOON",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x8BD,
+ },
+ [0x8D4]={
+ category="mn",
+ combining=0xE6,
+ description="ARABIC SMALL HIGH WORD AR-RUB",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x8D4,
+ },
+ [0x8D5]={
+ category="mn",
+ combining=0xE6,
+ description="ARABIC SMALL HIGH SAD",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x8D5,
+ },
+ [0x8D6]={
+ category="mn",
+ combining=0xE6,
+ description="ARABIC SMALL HIGH AIN",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x8D6,
+ },
+ [0x8D7]={
+ category="mn",
+ combining=0xE6,
+ description="ARABIC SMALL HIGH QAF",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x8D7,
+ },
+ [0x8D8]={
+ category="mn",
+ combining=0xE6,
+ description="ARABIC SMALL HIGH NOON WITH KASRA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x8D8,
+ },
+ [0x8D9]={
+ category="mn",
+ combining=0xE6,
+ description="ARABIC SMALL LOW NOON WITH KASRA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x8D9,
+ },
+ [0x8DA]={
+ category="mn",
+ combining=0xE6,
+ description="ARABIC SMALL HIGH WORD ATH-THALATHA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x8DA,
+ },
+ [0x8DB]={
+ category="mn",
+ combining=0xE6,
+ description="ARABIC SMALL HIGH WORD AS-SAJDA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x8DB,
+ },
+ [0x8DC]={
+ category="mn",
+ combining=0xE6,
+ description="ARABIC SMALL HIGH WORD AN-NISF",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x8DC,
+ },
+ [0x8DD]={
+ category="mn",
+ combining=0xE6,
+ description="ARABIC SMALL HIGH WORD SAKTA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x8DD,
+ },
+ [0x8DE]={
+ category="mn",
+ combining=0xE6,
+ description="ARABIC SMALL HIGH WORD QIF",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x8DE,
+ },
+ [0x8DF]={
+ category="mn",
+ combining=0xE6,
+ description="ARABIC SMALL HIGH WORD WAQFA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x8DF,
+ },
+ [0x8E0]={
+ category="mn",
+ combining=0xE6,
+ description="ARABIC SMALL HIGH FOOTNOTE MARKER",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x8E0,
+ },
+ [0x8E1]={
+ category="mn",
+ combining=0xE6,
+ description="ARABIC SMALL HIGH SIGN SAFHA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x8E1,
+ },
+ [0x8E2]={
+ arabic="u",
+ category="cf",
+ description="ARABIC DISPUTED END OF AYAH",
+ direction="an",
+ linebreak="al",
+ unicodeslot=0x8E2,
+ },
[0x8E3]={
category="mn",
combining=0xDC,
@@ -20305,6 +20597,7 @@ characters.data={
description="DEVANAGARI SIGN CANDRABINDU",
direction="nsm",
linebreak="cm",
+ synonyms={ "devanagari anunasika" },
unicodeslot=0x901,
},
[0x902]={
@@ -20313,6 +20606,7 @@ characters.data={
description="DEVANAGARI SIGN ANUSVARA",
direction="nsm",
linebreak="cm",
+ synonyms={ "devanagari bindu" },
unicodeslot=0x902,
},
[0x903]={
@@ -20915,6 +21209,7 @@ characters.data={
description="DEVANAGARI SIGN VIRAMA",
direction="nsm",
linebreak="cm",
+ synonyms={ "halant" },
unicodeslot=0x94D,
},
[0x94E]={
@@ -21106,6 +21401,7 @@ characters.data={
description="DEVANAGARI DANDA",
direction="l",
linebreak="ba",
+ synonyms={ "devanagari phrase separator", "devanagari purna viram" },
unicodeslot=0x964,
},
[0x965]={
@@ -21114,6 +21410,7 @@ characters.data={
description="DEVANAGARI DOUBLE DANDA",
direction="l",
linebreak="ba",
+ synonyms={ "devanagari deergh viram" },
unicodeslot=0x965,
},
[0x966]={
@@ -21805,6 +22102,7 @@ characters.data={
description="BENGALI SIGN VIRAMA",
direction="nsm",
linebreak="cm",
+ synonyms={ "bengali hasant" },
unicodeslot=0x9CD,
},
[0x9CE]={
@@ -24016,6 +24314,7 @@ characters.data={
description="TAMIL SIGN VISARGA",
direction="l",
linebreak="al",
+ synonyms={ "tamil aytham" },
unicodeslot=0xB83,
},
[0xB85]={
@@ -24462,6 +24761,7 @@ characters.data={
description="TAMIL DAY SIGN",
direction="on",
linebreak="al",
+ synonyms={ "tamil naal" },
unicodeslot=0xBF3,
},
[0xBF4]={
@@ -24469,6 +24769,7 @@ characters.data={
description="TAMIL MONTH SIGN",
direction="on",
linebreak="al",
+ synonyms={ "tamil maatham" },
unicodeslot=0xBF4,
},
[0xBF5]={
@@ -24476,6 +24777,7 @@ characters.data={
description="TAMIL YEAR SIGN",
direction="on",
linebreak="al",
+ synonyms={ "tamil varudam" },
unicodeslot=0xBF5,
},
[0xBF6]={
@@ -24483,6 +24785,7 @@ characters.data={
description="TAMIL DEBIT SIGN",
direction="on",
linebreak="al",
+ synonyms={ "tamil patru" },
unicodeslot=0xBF6,
},
[0xBF7]={
@@ -24490,6 +24793,7 @@ characters.data={
description="TAMIL CREDIT SIGN",
direction="on",
linebreak="al",
+ synonyms={ "tamil varavu" },
unicodeslot=0xBF7,
},
[0xBF8]={
@@ -24497,6 +24801,7 @@ characters.data={
description="TAMIL AS ABOVE SIGN",
direction="on",
linebreak="al",
+ synonyms={ "tamil merpadi" },
unicodeslot=0xBF8,
},
[0xBF9]={
@@ -24504,6 +24809,7 @@ characters.data={
description="TAMIL RUPEE SIGN",
direction="et",
linebreak="pr",
+ synonyms={ "tamil rupai" },
unicodeslot=0xBF9,
},
[0xBFA]={
@@ -24511,6 +24817,7 @@ characters.data={
description="TAMIL NUMBER SIGN",
direction="on",
linebreak="al",
+ synonyms={ "tamil enn" },
unicodeslot=0xBFA,
},
[0xC00]={
@@ -24532,6 +24839,7 @@ characters.data={
description="TELUGU SIGN ANUSVARA",
direction="l",
linebreak="cm",
+ synonyms={ "telugu sunna" },
unicodeslot=0xC02,
},
[0xC03]={
@@ -25189,6 +25497,13 @@ characters.data={
linebreak="al",
unicodeslot=0xC7F,
},
+ [0xC80]={
+ category="lo",
+ description="KANNADA SIGN SPACING CANDRABINDU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xC80,
+ },
[0xC81]={
category="mn",
description="KANNADA SIGN CANDRABINDU",
@@ -26297,6 +26612,7 @@ characters.data={
description="MALAYALAM SIGN VIRAMA",
direction="nsm",
linebreak="cm",
+ synonyms={ "malayalam chandrakkala", "malayalam vowel half-u" },
unicodeslot=0xD4D,
},
[0xD4E]={
@@ -26306,6 +26622,34 @@ characters.data={
linebreak="al",
unicodeslot=0xD4E,
},
+ [0xD4F]={
+ category="so",
+ description="MALAYALAM SIGN PARA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xD4F,
+ },
+ [0xD54]={
+ category="lo",
+ description="MALAYALAM LETTER CHILLU M",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xD54,
+ },
+ [0xD55]={
+ category="lo",
+ description="MALAYALAM LETTER CHILLU Y",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xD55,
+ },
+ [0xD56]={
+ category="lo",
+ description="MALAYALAM LETTER CHILLU LLL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xD56,
+ },
[0xD57]={
category="mc",
description="MALAYALAM AU LENGTH MARK",
@@ -26313,6 +26657,55 @@ characters.data={
linebreak="cm",
unicodeslot=0xD57,
},
+ [0xD58]={
+ category="no",
+ description="MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xD58,
+ },
+ [0xD59]={
+ category="no",
+ description="MALAYALAM FRACTION ONE FORTIETH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xD59,
+ },
+ [0xD5A]={
+ category="no",
+ description="MALAYALAM FRACTION THREE EIGHTIETHS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xD5A,
+ },
+ [0xD5B]={
+ category="no",
+ description="MALAYALAM FRACTION ONE TWENTIETH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xD5B,
+ },
+ [0xD5C]={
+ category="no",
+ description="MALAYALAM FRACTION ONE TENTH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xD5C,
+ },
+ [0xD5D]={
+ category="no",
+ description="MALAYALAM FRACTION THREE TWENTIETHS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xD5D,
+ },
+ [0xD5E]={
+ category="no",
+ description="MALAYALAM FRACTION ONE FIFTH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xD5E,
+ },
[0xD5F]={
category="lo",
description="MALAYALAM LETTER ARCHAIC II",
@@ -26460,6 +26853,27 @@ characters.data={
linebreak="al",
unicodeslot=0xD75,
},
+ [0xD76]={
+ category="no",
+ description="MALAYALAM FRACTION ONE SIXTEENTH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xD76,
+ },
+ [0xD77]={
+ category="no",
+ description="MALAYALAM FRACTION ONE EIGHTH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xD77,
+ },
+ [0xD78]={
+ category="no",
+ description="MALAYALAM FRACTION THREE SIXTEENTHS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xD78,
+ },
[0xD79]={
category="so",
description="MALAYALAM DATE MARK",
@@ -26942,6 +27356,7 @@ characters.data={
description="SINHALA SIGN AL-LAKUNA",
direction="nsm",
linebreak="cm",
+ synonyms={ "sinhala virama" },
unicodeslot=0xDCA,
},
[0xDCF]={
@@ -29207,6 +29622,7 @@ characters.data={
description="TIBETAN SIGN RJES SU NGA RO",
direction="nsm",
linebreak="cm",
+ synonyms={ "tibetan anusvara" },
unicodeslot=0xF7E,
},
[0xF7F]={
@@ -29214,6 +29630,7 @@ characters.data={
description="TIBETAN SIGN RNAM BCAD",
direction="l",
linebreak="ba",
+ synonyms={ "tibetan visarga" },
unicodeslot=0xF7F,
},
[0xF80]={
@@ -29254,6 +29671,7 @@ characters.data={
description="TIBETAN MARK HALANTA",
direction="nsm",
linebreak="cm",
+ synonyms={ "tibetan srog med" },
unicodeslot=0xF84,
},
[0xF85]={
@@ -29852,6 +30270,9 @@ characters.data={
direction="l",
linebreak="sa",
unicodeslot=0x1000,
+ variants={
+ [0xFE00]="dotted form",
+ },
},
[0x1001]={
category="lo",
@@ -29866,6 +30287,9 @@ characters.data={
direction="l",
linebreak="sa",
unicodeslot=0x1002,
+ variants={
+ [0xFE00]="dotted form",
+ },
},
[0x1003]={
category="lo",
@@ -29880,6 +30304,9 @@ characters.data={
direction="l",
linebreak="sa",
unicodeslot=0x1004,
+ variants={
+ [0xFE00]="dotted form",
+ },
},
[0x1005]={
category="lo",
@@ -29964,6 +30391,9 @@ characters.data={
direction="l",
linebreak="sa",
unicodeslot=0x1010,
+ variants={
+ [0xFE00]="dotted form",
+ },
},
[0x1011]={
category="lo",
@@ -29971,6 +30401,9 @@ characters.data={
direction="l",
linebreak="sa",
unicodeslot=0x1011,
+ variants={
+ [0xFE00]="dotted form",
+ },
},
[0x1012]={
category="lo",
@@ -29999,6 +30432,9 @@ characters.data={
direction="l",
linebreak="sa",
unicodeslot=0x1015,
+ variants={
+ [0xFE00]="dotted form",
+ },
},
[0x1016]={
category="lo",
@@ -30027,6 +30463,9 @@ characters.data={
direction="l",
linebreak="sa",
unicodeslot=0x1019,
+ variants={
+ [0xFE00]="dotted form",
+ },
},
[0x101A]={
category="lo",
@@ -30034,6 +30473,9 @@ characters.data={
direction="l",
linebreak="sa",
unicodeslot=0x101A,
+ variants={
+ [0xFE00]="dotted form",
+ },
},
[0x101B]={
category="lo",
@@ -30048,6 +30490,9 @@ characters.data={
direction="l",
linebreak="sa",
unicodeslot=0x101C,
+ variants={
+ [0xFE00]="dotted form",
+ },
},
[0x101D]={
category="lo",
@@ -30055,6 +30500,9 @@ characters.data={
direction="l",
linebreak="sa",
unicodeslot=0x101D,
+ variants={
+ [0xFE00]="dotted form",
+ },
},
[0x101E]={
category="lo",
@@ -30090,6 +30538,9 @@ characters.data={
direction="l",
linebreak="sa",
unicodeslot=0x1022,
+ variants={
+ [0xFE00]="dotted form",
+ },
},
[0x1023]={
category="lo",
@@ -30196,6 +30647,9 @@ characters.data={
direction="l",
linebreak="sa",
unicodeslot=0x1031,
+ variants={
+ [0xFE00]="dotted form",
+ },
},
[0x1032]={
category="mn",
@@ -30253,6 +30707,7 @@ characters.data={
description="MYANMAR SIGN VIRAMA",
direction="nsm",
linebreak="sa",
+ synonyms={ "myanmar killer" },
unicodeslot=0x1039,
},
[0x103A]={
@@ -30675,6 +31130,9 @@ characters.data={
direction="l",
linebreak="sa",
unicodeslot=0x1075,
+ variants={
+ [0xFE00]="dotted form",
+ },
},
[0x1076]={
category="lo",
@@ -30696,6 +31154,9 @@ characters.data={
direction="l",
linebreak="sa",
unicodeslot=0x1078,
+ variants={
+ [0xFE00]="dotted form",
+ },
},
[0x1079]={
category="lo",
@@ -30710,6 +31171,9 @@ characters.data={
direction="l",
linebreak="sa",
unicodeslot=0x107A,
+ variants={
+ [0xFE00]="dotted form",
+ },
},
[0x107B]={
category="lo",
@@ -30752,6 +31216,9 @@ characters.data={
direction="l",
linebreak="sa",
unicodeslot=0x1080,
+ variants={
+ [0xFE00]="dotted form",
+ },
},
[0x1081]={
category="lo",
@@ -43221,6 +43688,7 @@ characters.data={
description="KHMER SIGN NIKAHIT",
direction="nsm",
linebreak="sa",
+ synonyms={ "khmer anusvara", "khmer srak am" },
unicodeslot=0x17C6,
},
[0x17C7]={
@@ -43228,6 +43696,7 @@ characters.data={
description="KHMER SIGN REAHMUK",
direction="l",
linebreak="sa",
+ synonyms={ "khmer srak ah", "khmer visarga" },
unicodeslot=0x17C7,
},
[0x17C8]={
@@ -43611,6 +44080,7 @@ characters.data={
description="MONGOLIAN FREE VARIATION SELECTOR ONE",
direction="nsm",
linebreak="cm",
+ synonyms={ "fvs1" },
unicodeslot=0x180B,
},
[0x180C]={
@@ -44579,19 +45049,19 @@ characters.data={
unicodeslot=0x1884,
},
[0x1885]={
- arabic="u",
+ arabic="t",
category="lo",
description="MONGOLIAN LETTER ALI GALI BALUDA",
- direction="l",
- linebreak="al",
+ direction="nsm",
+ linebreak="cm",
unicodeslot=0x1885,
},
[0x1886]={
- arabic="u",
+ arabic="t",
category="lo",
description="MONGOLIAN LETTER ALI GALI THREE BALUDA",
- direction="l",
- linebreak="al",
+ direction="nsm",
+ linebreak="cm",
unicodeslot=0x1886,
},
[0x1887]={
@@ -50711,6 +51181,69 @@ characters.data={
linebreak="ba",
unicodeslot=0x1C7F,
},
+ [0x1C80]={
+ category="ll",
+ description="CYRILLIC SMALL LETTER ROUNDED VE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1C80,
+ },
+ [0x1C81]={
+ category="ll",
+ description="CYRILLIC SMALL LETTER LONG-LEGGED DE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1C81,
+ },
+ [0x1C82]={
+ category="ll",
+ description="CYRILLIC SMALL LETTER NARROW O",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1C82,
+ },
+ [0x1C83]={
+ category="ll",
+ description="CYRILLIC SMALL LETTER WIDE ES",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1C83,
+ },
+ [0x1C84]={
+ category="ll",
+ description="CYRILLIC SMALL LETTER TALL TE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1C84,
+ },
+ [0x1C85]={
+ category="ll",
+ description="CYRILLIC SMALL LETTER THREE-LEGGED TE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1C85,
+ },
+ [0x1C86]={
+ category="ll",
+ description="CYRILLIC SMALL LETTER TALL HARD SIGN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1C86,
+ },
+ [0x1C87]={
+ category="ll",
+ description="CYRILLIC SMALL LETTER TALL YAT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1C87,
+ },
+ [0x1C88]={
+ category="ll",
+ description="CYRILLIC SMALL LETTER UNBLENDED UK",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1C88,
+ },
[0x1CC0]={
category="po",
description="SUNDANESE PUNCTUATION BINDU SURYA",
@@ -52994,6 +53527,14 @@ characters.data={
linebreak="cm",
unicodeslot=0x1DF5,
},
+ [0x1DFB]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING DELETION MARK",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DFB,
+ },
[0x1DFC]={
category="mn",
combining=0xE9,
@@ -58409,6 +58950,7 @@ characters.data={
direction="ws",
linebreak="ba",
specials={ "char", 0x2003 },
+ synonyms={ "mutton quad" },
unicodeslot=0x2001,
},
[0x2002]={
@@ -58419,6 +58961,7 @@ characters.data={
direction="ws",
linebreak="ba",
specials={ "compat", 0x20 },
+ synonyms={ "nut" },
unicodeslot=0x2002,
},
[0x2003]={
@@ -58428,6 +58971,7 @@ characters.data={
direction="ws",
linebreak="ba",
specials={ "compat", 0x20 },
+ synonyms={ "mutton" },
unicodeslot=0x2003,
},
[0x2004]={
@@ -58437,6 +58981,7 @@ characters.data={
direction="ws",
linebreak="ba",
specials={ "compat", 0x20 },
+ synonyms={ "thick space" },
unicodeslot=0x2004,
},
[0x2005]={
@@ -58446,6 +58991,7 @@ characters.data={
direction="ws",
linebreak="ba",
specials={ "compat", 0x20 },
+ synonyms={ "mid space" },
unicodeslot=0x2005,
},
[0x2006]={
@@ -58500,6 +59046,7 @@ characters.data={
description="ZERO WIDTH SPACE",
direction="bn",
linebreak="zw",
+ synonyms={ "zwsp" },
unicodeslot=0x200B,
},
[0x200C]={
@@ -58510,6 +59057,7 @@ characters.data={
description="ZERO WIDTH NON-JOINER",
direction="bn",
linebreak="cm",
+ synonyms={ "zwnj" },
unicodeslot=0x200C,
},
[0x200D]={
@@ -58519,7 +59067,8 @@ characters.data={
contextname="zwj",
description="ZERO WIDTH JOINER",
direction="bn",
- linebreak="cm",
+ linebreak="zwj",
+ synonyms={ "zwj" },
unicodeslot=0x200D,
},
[0x200E]={
@@ -58528,6 +59077,7 @@ characters.data={
description="LEFT-TO-RIGHT MARK",
direction="l",
linebreak="cm",
+ synonyms={ "lrm" },
unicodeslot=0x200E,
},
[0x200F]={
@@ -58536,6 +59086,7 @@ characters.data={
description="RIGHT-TO-LEFT MARK",
direction="r",
linebreak="cm",
+ synonyms={ "rlm" },
unicodeslot=0x200F,
},
[0x2010]={
@@ -58592,6 +59143,7 @@ characters.data={
description="HORIZONTAL BAR",
direction="on",
linebreak="ai",
+ synonyms={ "quotation dash" },
unicodeslot=0x2015,
},
[0x2016]={
@@ -58632,6 +59184,7 @@ characters.data={
direction="on",
linebreak="al",
specials={ "compat", 0x20, 0x333 },
+ synonyms={ "spacing double underscore" },
unicodeslot=0x2017,
},
[0x2018]={
@@ -58642,6 +59195,7 @@ characters.data={
description="LEFT SINGLE QUOTATION MARK",
direction="on",
linebreak="qu",
+ synonyms={ "single turned comma quotation mark" },
unicodeslot=0x2018,
},
[0x2019]={
@@ -58652,6 +59206,7 @@ characters.data={
description="RIGHT SINGLE QUOTATION MARK",
direction="on",
linebreak="qu",
+ synonyms={ "apostrophe", "single comma quotation mark" },
unicodeslot=0x2019,
},
[0x201A]={
@@ -58661,6 +59216,7 @@ characters.data={
description="SINGLE LOW-0x0009 QUOTATION MARK",
direction="on",
linebreak="op",
+ synonyms={ "low single comma quotation mark" },
unicodeslot=0x201A,
},
[0x201B]={
@@ -58669,6 +59225,7 @@ characters.data={
description="SINGLE HIGH-REVERSED-0x0009 QUOTATION MARK",
direction="on",
linebreak="qu",
+ synonyms={ "single reversed comma quotation mark" },
unicodeslot=0x201B,
},
[0x201C]={
@@ -58679,6 +59236,7 @@ characters.data={
description="LEFT DOUBLE QUOTATION MARK",
direction="on",
linebreak="qu",
+ synonyms={ "double turned comma quotation mark" },
unicodeslot=0x201C,
},
[0x201D]={
@@ -58689,6 +59247,7 @@ characters.data={
description="RIGHT DOUBLE QUOTATION MARK",
direction="on",
linebreak="qu",
+ synonyms={ "double comma quotation mark" },
unicodeslot=0x201D,
},
[0x201E]={
@@ -58698,6 +59257,7 @@ characters.data={
description="DOUBLE LOW-0x0009 QUOTATION MARK",
direction="on",
linebreak="op",
+ synonyms={ "low double comma quotation mark" },
unicodeslot=0x201E,
},
[0x201F]={
@@ -58705,6 +59265,7 @@ characters.data={
description="DOUBLE HIGH-REVERSED-0x0009 QUOTATION MARK",
direction="on",
linebreak="qu",
+ synonyms={ "double reversed comma quotation mark" },
unicodeslot=0x201F,
},
[0x2020]={
@@ -58725,6 +59286,7 @@ characters.data={
name="dag",
},
},
+ synonyms={ "long cross" },
unicodeslot=0x2020,
},
[0x2021]={
@@ -58745,6 +59307,7 @@ characters.data={
name="ddag",
},
},
+ synonyms={ "diesis" },
unicodeslot=0x2021,
},
[0x2022]={
@@ -58757,6 +59320,7 @@ characters.data={
linebreak="al",
mathclass="binary",
mathname="bullet",
+ synonyms={ "black small circle" },
unicodeslot=0x2022,
},
[0x2023]={
@@ -58805,6 +59369,7 @@ characters.data={
},
},
specials={ "compat", 0x2E, 0x2E, 0x2E },
+ synonyms={ "three dot leader" },
unicodeslot=0x2026,
},
[0x2027]={
@@ -58834,6 +59399,7 @@ characters.data={
description="LEFT-TO-RIGHT EMBEDDING",
direction="lre",
linebreak="cm",
+ synonyms={ "lre" },
unicodeslot=0x202A,
},
[0x202B]={
@@ -58841,6 +59407,7 @@ characters.data={
description="RIGHT-TO-LEFT EMBEDDING",
direction="rle",
linebreak="cm",
+ synonyms={ "rle" },
unicodeslot=0x202B,
},
[0x202C]={
@@ -58849,6 +59416,7 @@ characters.data={
description="POP DIRECTIONAL FORMATTING",
direction="pdf",
linebreak="cm",
+ synonyms={ "pdf" },
unicodeslot=0x202C,
},
[0x202D]={
@@ -58857,6 +59425,7 @@ characters.data={
description="LEFT-TO-RIGHT OVERRIDE",
direction="lro",
linebreak="cm",
+ synonyms={ "lro" },
unicodeslot=0x202D,
},
[0x202E]={
@@ -58865,15 +59434,18 @@ characters.data={
description="RIGHT-TO-LEFT OVERRIDE",
direction="rlo",
linebreak="cm",
+ synonyms={ "rlo" },
unicodeslot=0x202E,
},
[0x202F]={
+ arabic="u",
category="zs",
contextname="narrownobreakspace",
description="NARROW NO-BREAK SPACE",
direction="cs",
linebreak="gl",
specials={ "nobreak", 0x20 },
+ synonyms={ "nnbsp" },
unicodeslot=0x202F,
},
[0x2030]={
@@ -58884,6 +59456,7 @@ characters.data={
description="PER MILLE SIGN",
direction="et",
linebreak="po",
+ synonyms={ "per thousand" },
unicodeslot=0x2030,
},
[0x2031]={
@@ -58902,6 +59475,7 @@ characters.data={
linebreak="po",
mathclass="nothing",
mathname="prime",
+ synonyms={ "feet", "minutes" },
unicodeslot=0x2032,
},
[0x2033]={
@@ -58914,6 +59488,7 @@ characters.data={
mathclass="nothing",
mathname="doubleprime",
specials={ "compat", 0x2032, 0x2032 },
+ synonyms={ "inches", "seconds" },
unicodeslot=0x2033,
},
[0x2034]={
@@ -58972,6 +59547,7 @@ characters.data={
direction="on",
linebreak="qu",
mirror=0x203A,
+ synonyms={ "left pointing single guillemet" },
textclass="open",
unicodeslot=0x2039,
},
@@ -58983,6 +59559,7 @@ characters.data={
direction="on",
linebreak="qu",
mirror=0x2039,
+ synonyms={ "right pointing single guillemet" },
textclass="close",
unicodeslot=0x203A,
},
@@ -58993,6 +59570,7 @@ characters.data={
description="REFERENCE MARK",
direction="on",
linebreak="ai",
+ synonyms={ "japanese kome", "urdu paragraph separator" },
unicodeslot=0x203B,
},
[0x203C]={
@@ -59003,10 +59581,7 @@ characters.data={
linebreak="ns",
specials={ "compat", 0x21, 0x21 },
unicodeslot=0x203C,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x203D]={
category="po",
@@ -59037,6 +59612,7 @@ characters.data={
},
mathstretch="h",
specials={ "compat", 0x20, 0x305 },
+ synonyms={ "spacing overscore" },
unicodeslot=0x203E,
},
[0x203F]={
@@ -59044,6 +59620,7 @@ characters.data={
description="UNDERTIE",
direction="on",
linebreak="al",
+ synonyms={ "greek enotikon" },
unicodeslot=0x203F,
},
[0x2040]={
@@ -59051,6 +59628,7 @@ characters.data={
description="CHARACTER TIE",
direction="on",
linebreak="al",
+ synonyms={ "sequence concatenation" },
unicodeslot=0x2040,
},
[0x2041]={
@@ -59092,6 +59670,7 @@ characters.data={
name="solidus",
},
},
+ synonyms={ "solidus" },
unicodeslot=0x2044,
},
[0x2045]={
@@ -59133,10 +59712,7 @@ characters.data={
linebreak="ns",
specials={ "compat", 0x21, 0x3F },
unicodeslot=0x2049,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x204A]={
category="po",
@@ -59199,6 +59775,7 @@ characters.data={
description="COMMERCIAL MINUS SIGN",
direction="on",
linebreak="al",
+ synonyms={ "med avdrag av", "piska" },
unicodeslot=0x2052,
},
[0x2053]={
@@ -59220,6 +59797,7 @@ characters.data={
description="FLOWER PUNCTUATION MARK",
direction="on",
linebreak="al",
+ synonyms={ "phul", "puspika" },
unicodeslot=0x2055,
},
[0x2056]={
@@ -59251,6 +59829,7 @@ characters.data={
description="FIVE DOT PUNCTUATION",
direction="on",
linebreak="ba",
+ synonyms={ "greek pentonkion" },
unicodeslot=0x2059,
},
[0x205A]={
@@ -59279,6 +59858,7 @@ characters.data={
description="TRICOLON",
direction="on",
linebreak="ba",
+ synonyms={ "epidaurean acrophonic symbol three" },
unicodeslot=0x205D,
},
[0x205E]={
@@ -59295,6 +59875,7 @@ characters.data={
direction="ws",
linebreak="ba",
specials={ "compat", 0x20 },
+ synonyms={ "mmsp" },
unicodeslot=0x205F,
},
[0x2060]={
@@ -59302,6 +59883,7 @@ characters.data={
description="WORD JOINER",
direction="bn",
linebreak="wj",
+ synonyms={ "wj" },
unicodeslot=0x2060,
},
[0x2061]={
@@ -59326,6 +59908,7 @@ characters.data={
linebreak="al",
mathclass="binary",
mathname="invisibletimes",
+ synonyms={ "invisible comma" },
unicodeslot=0x2063,
},
[0x2064]={
@@ -59800,6 +60383,7 @@ characters.data={
description="COLON SIGN",
direction="et",
linebreak="pr",
+ synonyms={ "costa rican currency", "el salvadorian currency" },
unicodeslot=0x20A1,
},
[0x20A2]={
@@ -59808,6 +60392,7 @@ characters.data={
description="CRUZEIRO SIGN",
direction="et",
linebreak="pr",
+ synonyms={ "brazilian currency" },
unicodeslot=0x20A2,
},
[0x20A3]={
@@ -59816,6 +60401,7 @@ characters.data={
description="FRENCH FRANC SIGN",
direction="et",
linebreak="pr",
+ synonyms={ "french currency" },
unicodeslot=0x20A3,
},
[0x20A4]={
@@ -59824,6 +60410,7 @@ characters.data={
description="LIRA SIGN",
direction="et",
linebreak="pr",
+ synonyms={ "italian currency", "turkish currency" },
unicodeslot=0x20A4,
},
[0x20A5]={
@@ -59838,6 +60425,7 @@ characters.data={
description="NAIRA SIGN",
direction="et",
linebreak="pr",
+ synonyms={ "nigerian currency" },
unicodeslot=0x20A6,
},
[0x20A7]={
@@ -59846,6 +60434,7 @@ characters.data={
description="PESETA SIGN",
direction="et",
linebreak="po",
+ synonyms={ "spanish currency" },
unicodeslot=0x20A7,
},
[0x20A8]={
@@ -59854,6 +60443,7 @@ characters.data={
direction="et",
linebreak="pr",
specials={ "compat", 0x52, 0x73 },
+ synonyms={ "indian currency" },
unicodeslot=0x20A8,
},
[0x20A9]={
@@ -59863,6 +60453,7 @@ characters.data={
description="WON SIGN",
direction="et",
linebreak="pr",
+ synonyms={ "korean currency" },
unicodeslot=0x20A9,
},
[0x20AA]={
@@ -59871,6 +60462,7 @@ characters.data={
description="NEW SHEQEL SIGN",
direction="et",
linebreak="pr",
+ synonyms={ "israeli currency" },
unicodeslot=0x20AA,
},
[0x20AB]={
@@ -59880,6 +60472,7 @@ characters.data={
description="DONG SIGN",
direction="et",
linebreak="pr",
+ synonyms={ "vietnamese currency" },
unicodeslot=0x20AB,
},
[0x20AC]={
@@ -59890,6 +60483,7 @@ characters.data={
description="EURO SIGN",
direction="et",
linebreak="pr",
+ synonyms={ "euro european currency" },
unicodeslot=0x20AC,
},
[0x20AD]={
@@ -59897,6 +60491,7 @@ characters.data={
description="KIP SIGN",
direction="et",
linebreak="pr",
+ synonyms={ "laotian currency" },
unicodeslot=0x20AD,
},
[0x20AE]={
@@ -59904,6 +60499,7 @@ characters.data={
description="TUGRIK SIGN",
direction="et",
linebreak="pr",
+ synonyms={ "mongolian currency" },
unicodeslot=0x20AE,
},
[0x20AF]={
@@ -59911,6 +60507,7 @@ characters.data={
description="DRACHMA SIGN",
direction="et",
linebreak="pr",
+ synonyms={ "greek currency" },
unicodeslot=0x20AF,
},
[0x20B0]={
@@ -59925,6 +60522,7 @@ characters.data={
description="PESO SIGN",
direction="et",
linebreak="pr",
+ synonyms={ "phillipine currency" },
unicodeslot=0x20B1,
},
[0x20B2]={
@@ -59932,6 +60530,7 @@ characters.data={
description="GUARANI SIGN",
direction="et",
linebreak="pr",
+ synonyms={ "paraguayan currency" },
unicodeslot=0x20B2,
},
[0x20B3]={
@@ -59939,6 +60538,7 @@ characters.data={
description="AUSTRAL SIGN",
direction="et",
linebreak="pr",
+ synonyms={ "argentinian former currency" },
unicodeslot=0x20B3,
},
[0x20B4]={
@@ -59946,6 +60546,7 @@ characters.data={
description="HRYVNIA SIGN",
direction="et",
linebreak="pr",
+ synonyms={ "ukrainian currency" },
unicodeslot=0x20B4,
},
[0x20B5]={
@@ -59953,6 +60554,7 @@ characters.data={
description="CEDI SIGN",
direction="et",
linebreak="pr",
+ synonyms={ "ghana currency" },
unicodeslot=0x20B5,
},
[0x20B6]={
@@ -60002,6 +60604,7 @@ characters.data={
description="MANAT SIGN",
direction="et",
linebreak="pr",
+ synonyms={ "azerbaijani currency" },
unicodeslot=0x20BC,
},
[0x20BD]={
@@ -60009,6 +60612,7 @@ characters.data={
description="RUBLE SIGN",
direction="et",
linebreak="pr",
+ synonyms={ "russian currency" },
unicodeslot=0x20BD,
},
[0x20BE]={
@@ -60016,6 +60620,7 @@ characters.data={
description="LARI SIGN",
direction="et",
linebreak="po",
+ synonyms={ "georgian currency" },
unicodeslot=0x20BE,
},
[0x20D0]={
@@ -60056,6 +60661,7 @@ characters.data={
description="COMBINING ANTICLOCKWISE ARROW ABOVE",
direction="nsm",
linebreak="cm",
+ synonyms={ "combining counterclockwise arrow above" },
unicodeslot=0x20D4,
},
[0x20D5]={
@@ -60082,6 +60688,7 @@ characters.data={
linebreak="cm",
mathclass="topaccent",
mathname="vec",
+ synonyms={ "vector" },
unicodeslot=0x20D7,
},
[0x20D8]={
@@ -60106,6 +60713,7 @@ characters.data={
description="COMBINING ANTICLOCKWISE RING OVERLAY",
direction="nsm",
linebreak="cm",
+ synonyms={ "combining counterclockwise ring overlay" },
unicodeslot=0x20DA,
},
[0x20DB]={
@@ -60116,6 +60724,7 @@ characters.data={
linebreak="cm",
mathclass="topaccent",
mathname="dddot",
+ synonyms={ "third derivative" },
unicodeslot=0x20DB,
},
[0x20DC]={
@@ -60124,6 +60733,7 @@ characters.data={
description="COMBINING FOUR DOTS ABOVE",
direction="nsm",
linebreak="cm",
+ synonyms={ "fourth derivative" },
unicodeslot=0x20DC,
},
[0x20DD]={
@@ -60141,6 +60751,7 @@ characters.data={
name="bigcircle",
},
},
+ synonyms={ "jis composition circle" },
unicodeslot=0x20DD,
},
[0x20DE]={
@@ -60166,6 +60777,7 @@ characters.data={
description="COMBINING ENCLOSING CIRCLE BACKSLASH",
direction="nsm",
linebreak="cm",
+ synonyms={ "no", "prohibition" },
unicodeslot=0x20E0,
},
[0x20E1]={
@@ -60211,6 +60823,7 @@ characters.data={
description="COMBINING DOUBLE VERTICAL STROKE OVERLAY",
direction="nsm",
linebreak="cm",
+ synonyms={ "finite function diacritic" },
unicodeslot=0x20E6,
},
[0x20E7]={
@@ -60221,6 +60834,7 @@ characters.data={
linebreak="cm",
mathclass="topaccent",
mathname="actuarial",
+ synonyms={ "actuarial bend" },
unicodeslot=0x20E7,
},
[0x20E8]={
@@ -60238,6 +60852,7 @@ characters.data={
direction="nsm",
linebreak="cm",
mathclass="topaccent",
+ synonyms={ "contraction operator" },
unicodeslot=0x20E9,
},
[0x20EA]={
@@ -60254,6 +60869,7 @@ characters.data={
description="COMBINING LONG DOUBLE SOLIDUS OVERLAY",
direction="nsm",
linebreak="cm",
+ synonyms={ "long double slash overlay" },
unicodeslot=0x20EB,
},
[0x20EC]={
@@ -60320,6 +60936,7 @@ characters.data={
mathclass="variable",
mathname="complexes",
specials={ "font", 0x43 },
+ synonyms={ "complex numbers", "the set of complex numbers" },
unicodeslot=0x2102,
},
[0x2103]={
@@ -60331,6 +60948,7 @@ characters.data={
direction="on",
linebreak="po",
specials={ "compat", 0xB0, 0x43 },
+ synonyms={ "degrees centigrade" },
unicodeslot=0x2103,
},
[0x2104]={
@@ -60338,6 +60956,7 @@ characters.data={
description="CENTRE LINE SYMBOL",
direction="on",
linebreak="al",
+ synonyms={ "clone" },
unicodeslot=0x2104,
},
[0x2105]={
@@ -60391,6 +61010,7 @@ characters.data={
direction="l",
linebreak="al",
specials={ "font", 0x67 },
+ synonyms={ "real number symbol" },
unicodeslot=0x210A,
},
[0x210B]={
@@ -60407,6 +61027,7 @@ characters.data={
direction="l",
linebreak="al",
specials={ "font", 0x48 },
+ synonyms={ "hilbert space" },
unicodeslot=0x210C,
},
[0x210D]={
@@ -60462,6 +61083,7 @@ characters.data={
mathclass="default",
mathname="Im",
specials={ "font", 0x49 },
+ synonyms={ "imaginary part" },
unicodeslot=0x2111,
},
[0x2112]={
@@ -60470,6 +61092,7 @@ characters.data={
direction="l",
linebreak="al",
specials={ "font", 0x4C },
+ synonyms={ "laplace transform" },
unicodeslot=0x2112,
},
[0x2113]={
@@ -60482,6 +61105,7 @@ characters.data={
mathclass="default",
mathname="ell",
specials={ "font", 0x6C },
+ synonyms={ "liter" },
unicodeslot=0x2113,
},
[0x2114]={
@@ -60489,6 +61113,7 @@ characters.data={
description="L B BAR SYMBOL",
direction="on",
linebreak="al",
+ synonyms={ "pounds" },
unicodeslot=0x2114,
},
[0x2115]={
@@ -60499,6 +61124,7 @@ characters.data={
mathclass="variable",
mathname="naturalnumbers",
specials={ "font", 0x4E },
+ synonyms={ "natural number" },
unicodeslot=0x2115,
},
[0x2116]={
@@ -60518,6 +61144,7 @@ characters.data={
description="SOUND RECORDING COPYRIGHT",
direction="on",
linebreak="al",
+ synonyms={ "phonorecord sign", "published" },
unicodeslot=0x2117,
},
[0x2118]={
@@ -60528,6 +61155,7 @@ characters.data={
linebreak="al",
mathclass="default",
mathname="wp",
+ synonyms={ "weierstrass elliptic function" },
unicodeslot=0x2118,
},
[0x2119]={
@@ -60548,6 +61176,7 @@ characters.data={
mathclass="variable",
mathname="rationals",
specials={ "font", 0x51 },
+ synonyms={ "rational numbers", "the set of rational numbers" },
unicodeslot=0x211A,
},
[0x211B]={
@@ -60556,6 +61185,7 @@ characters.data={
direction="l",
linebreak="al",
specials={ "font", 0x52 },
+ synonyms={ "riemann integral" },
unicodeslot=0x211B,
},
[0x211C]={
@@ -60567,6 +61197,7 @@ characters.data={
mathclass="default",
mathname="Re",
specials={ "font", 0x52 },
+ synonyms={ "real part" },
unicodeslot=0x211C,
},
[0x211D]={
@@ -60577,6 +61208,7 @@ characters.data={
mathclass="variable",
mathname="reals",
specials={ "font", 0x52 },
+ synonyms={ "real numbers", "the set of real numbers" },
unicodeslot=0x211D,
},
[0x211E]={
@@ -60585,6 +61217,7 @@ characters.data={
description="PRESCRIPTION TAKE",
direction="on",
linebreak="al",
+ synonyms={ "cross ratio", "recipe" },
unicodeslot=0x211E,
},
[0x211F]={
@@ -60622,10 +61255,7 @@ characters.data={
linebreak="ai",
specials={ "super", 0x54, 0x4D },
unicodeslot=0x2122,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2123]={
category="so",
@@ -60642,6 +61272,7 @@ characters.data={
mathclass="variable",
mathname="integers",
specials={ "font", 0x5A },
+ synonyms={ "integers", "the set of integers" },
unicodeslot=0x2124,
},
[0x2125]={
@@ -60674,6 +61305,7 @@ characters.data={
linebreak="al",
mathclass="variable",
mathname="mho",
+ synonyms={ "mho" },
unicodeslot=0x2127,
},
[0x2128]={
@@ -60691,6 +61323,7 @@ characters.data={
linebreak="al",
mathclass="variable",
mathname="turnediota",
+ synonyms={ "unique element" },
unicodeslot=0x2129,
},
[0x212A]={
@@ -60723,6 +61356,7 @@ characters.data={
direction="l",
linebreak="al",
specials={ "font", 0x42 },
+ synonyms={ "bernoulli function" },
unicodeslot=0x212C,
},
[0x212D]={
@@ -60747,6 +61381,7 @@ characters.data={
direction="l",
linebreak="al",
specials={ "font", 0x65 },
+ synonyms={ "error", "natural exponent" },
unicodeslot=0x212F,
},
[0x2130]={
@@ -60755,6 +61390,7 @@ characters.data={
direction="l",
linebreak="al",
specials={ "font", 0x45 },
+ synonyms={ "electromotive force", "emf" },
unicodeslot=0x2130,
},
[0x2131]={
@@ -60763,6 +61399,7 @@ characters.data={
direction="l",
linebreak="al",
specials={ "font", 0x46 },
+ synonyms={ "fourier transform" },
unicodeslot=0x2131,
},
[0x2132]={
@@ -60773,6 +61410,7 @@ characters.data={
linebreak="al",
mathclass="ordinary",
mathname="Finv",
+ synonyms={ "claudian digamma inversum" },
unicodeslot=0x2132,
},
[0x2133]={
@@ -60781,6 +61419,7 @@ characters.data={
direction="l",
linebreak="al",
specials={ "font", 0x4D },
+ synonyms={ "german mark pre-wwii", "m-matrix" },
unicodeslot=0x2133,
},
[0x2134]={
@@ -60789,6 +61428,7 @@ characters.data={
direction="l",
linebreak="al",
specials={ "font", 0x6F },
+ synonyms={ "order" },
unicodeslot=0x2134,
},
[0x2135]={
@@ -60800,6 +61440,7 @@ characters.data={
mathclass="default",
mathname="aleph",
specials={ "compat", 0x5D0 },
+ synonyms={ "first transfinite cardinal", "first transfinite cardinal countable" },
unicodeslot=0x2135,
},
[0x2136]={
@@ -60810,6 +61451,7 @@ characters.data={
mathclass="default",
mathname="beth",
specials={ "compat", 0x5D1 },
+ synonyms={ "second transfinite cardinal", "second transfinite cardinal continuum" },
unicodeslot=0x2136,
},
[0x2137]={
@@ -60820,6 +61462,7 @@ characters.data={
mathclass="default",
mathname="gimel",
specials={ "compat", 0x5D2 },
+ synonyms={ "third transfinite cardinal" },
unicodeslot=0x2137,
},
[0x2138]={
@@ -60830,6 +61473,7 @@ characters.data={
mathclass="default",
mathname="daleth",
specials={ "compat", 0x5D3 },
+ synonyms={ "fourth transfinite cardinal" },
unicodeslot=0x2138,
},
[0x2139]={
@@ -60839,10 +61483,7 @@ characters.data={
linebreak="al",
specials={ "font", 0x69 },
unicodeslot=0x2139,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x213A]={
category="so",
@@ -60906,6 +61547,7 @@ characters.data={
linebreak="al",
mathclass="ordinary",
mathname="Game",
+ synonyms={ "game" },
unicodeslot=0x2141,
},
[0x2142]={
@@ -61577,6 +62219,7 @@ characters.data={
direction="l",
lccode=0x2184,
linebreak="al",
+ synonyms={ "apostrophic c", "claudian antisigma" },
unicodeslot=0x2183,
},
[0x2184]={
@@ -61678,6 +62321,7 @@ characters.data={
mathclass="relation",
mathextensible="u",
mathname="uparrow",
+ synonyms={ "egressive airflow" },
unicodeslot=0x2191,
},
[0x2192]={
@@ -61708,6 +62352,7 @@ characters.data={
},
},
mathstretch="h",
+ synonyms={ "total function" },
unicodeslot=0x2192,
},
[0x2193]={
@@ -61720,6 +62365,7 @@ characters.data={
mathclass="relation",
mathextensible="d",
mathname="downarrow",
+ synonyms={ "ingressive airflow" },
unicodeslot=0x2193,
},
[0x2194]={
@@ -61732,11 +62378,9 @@ characters.data={
mathclass="relation",
mathextensible="h",
mathname="leftrightarrow",
+ synonyms={ "relation" },
unicodeslot=0x2194,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2195]={
adobename="arrowupdn",
@@ -61749,10 +62393,7 @@ characters.data={
mathextensible="v",
mathname="updownarrow",
unicodeslot=0x2195,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2196]={
adobename="arrowupleft",
@@ -61764,10 +62405,7 @@ characters.data={
mathclass="relation",
mathname="nwarrow",
unicodeslot=0x2196,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2197]={
adobename="arrowupright",
@@ -61779,10 +62417,7 @@ characters.data={
mathclass="relation",
mathname="nearrow",
unicodeslot=0x2197,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2198]={
adobename="arrowdownright",
@@ -61794,10 +62429,7 @@ characters.data={
mathclass="relation",
mathname="searrow",
unicodeslot=0x2198,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2199]={
adobename="arrowdownleft",
@@ -61809,10 +62441,7 @@ characters.data={
mathclass="relation",
mathname="swarrow",
unicodeslot=0x2199,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x219A]={
category="sm",
@@ -61865,6 +62494,7 @@ characters.data={
mathextensible="l",
mathfiller="twoheadleftarrowfill",
mathname="twoheadleftarrow",
+ synonyms={ "fast cursor left" },
unicodeslot=0x219E,
},
[0x219F]={
@@ -61875,6 +62505,7 @@ characters.data={
mathclass="relation",
mathextensible="u",
mathname="twoheaduparrow",
+ synonyms={ "fast cursor up" },
unicodeslot=0x219F,
},
[0x21A0]={
@@ -61886,6 +62517,7 @@ characters.data={
mathextensible="r",
mathfiller="twoheadrightarrowfill",
mathname="twoheadrightarrow",
+ synonyms={ "fast cursor right", "total surjection" },
unicodeslot=0x21A0,
},
[0x21A1]={
@@ -61896,6 +62528,7 @@ characters.data={
mathclass="relation",
mathextensible="d",
mathname="twoheaddownarrow",
+ synonyms={ "fast cursor down", "form feed" },
unicodeslot=0x21A1,
},
[0x21A2]={
@@ -61916,6 +62549,7 @@ characters.data={
mathclass="relation",
mathextensible="r",
mathname="rightarrowtail",
+ synonyms={ "total injection" },
unicodeslot=0x21A3,
},
[0x21A4]={
@@ -61947,6 +62581,7 @@ characters.data={
mathextensible="r",
mathfiller="mapstofill",
mathname="mapsto",
+ synonyms={ "maplet" },
unicodeslot=0x21A6,
},
[0x21A7]={
@@ -61957,6 +62592,7 @@ characters.data={
mathclass="relation",
mathextensible="d",
mathname="mapsdown",
+ synonyms={ "depth symbol" },
unicodeslot=0x21A7,
},
[0x21A8]={
@@ -61980,10 +62616,7 @@ characters.data={
mathfiller="hookleftarrowfill",
mathname="hookleftarrow",
unicodeslot=0x21A9,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x21AA]={
category="so",
@@ -61995,10 +62628,7 @@ characters.data={
mathfiller="hookrightarrowfill",
mathname="hookrightarrow",
unicodeslot=0x21AA,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x21AB]={
category="so",
@@ -62049,6 +62679,7 @@ characters.data={
mathclass="relation",
mathextensible="d",
mathname="downzigzagarrow",
+ synonyms={ "electrolysis" },
unicodeslot=0x21AF,
},
[0x21B0]={
@@ -62099,6 +62730,7 @@ characters.data={
mathclass="ordinary",
mathextensible="m",
mathname="linefeed",
+ synonyms={ "line feed" },
unicodeslot=0x21B4,
},
[0x21B5]={
@@ -62150,6 +62782,7 @@ characters.data={
mathclass="relation",
mathextensible="h",
mathname="barleftarrowrightarrowbar",
+ synonyms={ "tab with shift tab" },
unicodeslot=0x21B9,
},
[0x21BA]={
@@ -62575,6 +63208,7 @@ characters.data={
mathclass="relation",
mathextensible="u",
mathname="nHuparrow",
+ synonyms={ "page up" },
unicodeslot=0x21DE,
},
[0x21DF]={
@@ -62648,6 +63282,7 @@ characters.data={
mathclass="relation",
mathextensible="l",
mathname="barleftarrow",
+ synonyms={ "leftward tab" },
unicodeslot=0x21E4,
},
[0x21E5]={
@@ -62659,6 +63294,7 @@ characters.data={
mathclass="relation",
mathextensible="r",
mathname="rightarrowbar",
+ synonyms={ "rightward tab" },
unicodeslot=0x21E5,
},
[0x21E6]={
@@ -62682,6 +63318,7 @@ characters.data={
mathclass="ordinary",
mathextensible="u",
mathname="upwhitearrow",
+ synonyms={ "shift" },
unicodeslot=0x21E7,
},
[0x21E8]={
@@ -62722,6 +63359,7 @@ characters.data={
mathclass="ordinary",
mathextensible="u",
mathname="whitearrowupfrombar",
+ synonyms={ "level 2 lock" },
unicodeslot=0x21EB,
},
[0x21EC]={
@@ -62729,6 +63367,7 @@ characters.data={
description="UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR",
direction="on",
linebreak="al",
+ synonyms={ "caps lock" },
unicodeslot=0x21EC,
},
[0x21ED]={
@@ -62736,6 +63375,7 @@ characters.data={
description="UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR",
direction="on",
linebreak="al",
+ synonyms={ "numerics lock" },
unicodeslot=0x21ED,
},
[0x21EE]={
@@ -62743,6 +63383,7 @@ characters.data={
description="UPWARDS WHITE DOUBLE ARROW",
direction="on",
linebreak="al",
+ synonyms={ "level 3 select" },
unicodeslot=0x21EE,
},
[0x21EF]={
@@ -62750,6 +63391,7 @@ characters.data={
description="UPWARDS WHITE DOUBLE ARROW ON PEDESTAL",
direction="on",
linebreak="al",
+ synonyms={ "level 3 lock" },
unicodeslot=0x21EF,
},
[0x21F0]={
@@ -62757,6 +63399,7 @@ characters.data={
description="RIGHTWARDS WHITE ARROW FROM WALL",
direction="on",
linebreak="al",
+ synonyms={ "group lock" },
unicodeslot=0x21F0,
},
[0x21F1]={
@@ -62764,6 +63407,7 @@ characters.data={
description="NORTH WEST ARROW TO CORNER",
direction="on",
linebreak="al",
+ synonyms={ "home" },
unicodeslot=0x21F1,
},
[0x21F2]={
@@ -62771,6 +63415,7 @@ characters.data={
description="SOUTH EAST ARROW TO CORNER",
direction="on",
linebreak="al",
+ synonyms={ "end" },
unicodeslot=0x21F2,
},
[0x21F3]={
@@ -62778,6 +63423,7 @@ characters.data={
description="UP DOWN WHITE ARROW",
direction="on",
linebreak="al",
+ synonyms={ "scrolling" },
unicodeslot=0x21F3,
},
[0x21F4]={
@@ -62828,6 +63474,7 @@ characters.data={
mathclass="relation",
mathextensible="r",
mathname="nvrightarrow",
+ synonyms={ "partial function" },
unicodeslot=0x21F8,
},
[0x21F9]={
@@ -62838,6 +63485,7 @@ characters.data={
mathclass="relation",
mathextensible="h",
mathname="nvleftrightarrow",
+ synonyms={ "partial relation" },
unicodeslot=0x21F9,
},
[0x21FA]={
@@ -62858,6 +63506,7 @@ characters.data={
mathclass="relation",
mathextensible="r",
mathname="nVrightarrow",
+ synonyms={ "finite function" },
unicodeslot=0x21FB,
},
[0x21FC]={
@@ -62868,6 +63517,7 @@ characters.data={
mathclass="relation",
mathextensible="h",
mathname="nVleftrightarrow",
+ synonyms={ "finite relation" },
unicodeslot=0x21FC,
},
[0x21FD]={
@@ -62909,6 +63559,7 @@ characters.data={
linebreak="ai",
mathclass="ordinary",
mathname="forall",
+ synonyms={ "universal quantifier" },
unicodeslot=0x2200,
},
[0x2201]={
@@ -62940,6 +63591,7 @@ characters.data={
linebreak="ai",
mathclass="ordinary",
mathname="exists",
+ synonyms={ "existential quantifier" },
unicodeslot=0x2203,
},
[0x2204]={
@@ -62960,7 +63612,11 @@ characters.data={
linebreak="al",
mathclass="default",
mathname="emptyset",
+ synonyms={ "null set" },
unicodeslot=0x2205,
+ variants={
+ [0xFE00]="zero with long diagonal stroke overlay form",
+ },
},
[0x2206]={
adobename="increment",
@@ -62968,6 +63624,7 @@ characters.data={
description="INCREMENT",
direction="on",
linebreak="al",
+ synonyms={ "forward difference", "laplace operator" },
unicodeslot=0x2206,
},
[0x2207]={
@@ -62979,6 +63636,7 @@ characters.data={
linebreak="ai",
mathclass="default",
mathname="nabla",
+ synonyms={ "backward difference", "del" },
unicodeslot=0x2207,
},
[0x2208]={
@@ -63074,6 +63732,7 @@ characters.data={
description="END OF PROOF",
direction="on",
linebreak="al",
+ synonyms={ "q.e.d." },
unicodeslot=0x220E,
},
[0x220F]={
@@ -63085,6 +63744,7 @@ characters.data={
linebreak="ai",
mathclass="limop",
mathname="prod",
+ synonyms={ "product sign" },
unicodeslot=0x220F,
},
[0x2210]={
@@ -63094,6 +63754,7 @@ characters.data={
linebreak="al",
mathclass="limop",
mathname="coprod",
+ synonyms={ "coproduct sign" },
unicodeslot=0x2210,
},
[0x2211]={
@@ -63105,6 +63766,7 @@ characters.data={
linebreak="ai",
mathclass="limop",
mathname="sum",
+ synonyms={ "summation sign" },
unicodeslot=0x2211,
},
[0x2212]={
@@ -63186,6 +63848,7 @@ characters.data={
linebreak="al",
mathclass="binary",
mathname="circ",
+ synonyms={ "apl jot", "composite function" },
unicodeslot=0x2218,
},
[0x2219]={
@@ -63219,6 +63882,7 @@ characters.data={
name="surd",
},
},
+ synonyms={ "radical sign" },
unicodeslot=0x221A,
},
[0x221B]={
@@ -63295,6 +63959,7 @@ characters.data={
linebreak="al",
mathclass="ordinary",
mathname="sphericalangle",
+ synonyms={ "angle arc" },
unicodeslot=0x2222,
},
[0x2223]={
@@ -63306,6 +63971,7 @@ characters.data={
linebreak="ai",
mathclass="binary",
mathname="divides",
+ synonyms={ "apl stile", "such that" },
unicodeslot=0x2223,
},
[0x2224]={
@@ -63369,6 +64035,7 @@ characters.data={
name="land",
},
},
+ synonyms={ "conjunction", "wedge" },
unicodeslot=0x2227,
},
[0x2228]={
@@ -63388,6 +64055,7 @@ characters.data={
name="lor",
},
},
+ synonyms={ "disjunction", "vee" },
unicodeslot=0x2228,
},
[0x2229]={
@@ -63399,6 +64067,7 @@ characters.data={
linebreak="ai",
mathclass="binary",
mathname="cap",
+ synonyms={ "cap", "hat" },
unicodeslot=0x2229,
variants={
[0xFE00]="with serifs",
@@ -63413,6 +64082,7 @@ characters.data={
linebreak="ai",
mathclass="binary",
mathname="cup",
+ synonyms={ "cup" },
unicodeslot=0x222A,
variants={
[0xFE00]="with serifs",
@@ -63534,6 +64204,7 @@ characters.data={
linebreak="al",
mathclass="limop",
mathname="ointctrclockwise",
+ synonyms={ "counterclockwise contour integral" },
unicodeslot=0x2233,
},
[0x2234]={
@@ -63587,6 +64258,7 @@ characters.data={
linebreak="al",
mathclass="binary",
mathname="dotminus",
+ synonyms={ "saturating subtraction" },
unicodeslot=0x2238,
},
[0x2239]={
@@ -63622,6 +64294,7 @@ characters.data={
mathclass="relation",
mathname="sim",
mirror=0x223D,
+ synonyms={ "apl tilde", "cycle", "difference between", "not", "proportional to", "similar to", "varies with" },
unicodeslot=0x223C,
},
[0x223D]={
@@ -63634,6 +64307,7 @@ characters.data={
mathclass="relation",
mathname="backsim",
mirror=0x223C,
+ synonyms={ "lazy s" },
unicodeslot=0x223D,
},
[0x223E]={
@@ -63641,6 +64315,7 @@ characters.data={
description="INVERTED LAZY S",
direction="on",
linebreak="al",
+ synonyms={ "most positive" },
unicodeslot=0x223E,
},
[0x223F]={
@@ -63648,6 +64323,7 @@ characters.data={
description="SINE WAVE",
direction="on",
linebreak="al",
+ synonyms={ "alternating current" },
unicodeslot=0x223F,
},
[0x2240]={
@@ -63753,6 +64429,7 @@ characters.data={
linebreak="ai",
mathclass="relation",
mathname="approx",
+ synonyms={ "asymptotic to" },
unicodeslot=0x2248,
},
[0x2249]={
@@ -63854,6 +64531,7 @@ characters.data={
mathclass="relation",
mathname="fallingdotseq",
mirror=0x2253,
+ synonyms={ "nearly equals" },
unicodeslot=0x2252,
},
[0x2253]={
@@ -63905,6 +64583,7 @@ characters.data={
linebreak="al",
mathclass="relation",
mathname="circeq",
+ synonyms={ "approximately equal to" },
unicodeslot=0x2257,
},
[0x2258]={
@@ -63921,6 +64600,7 @@ characters.data={
linebreak="al",
mathclass="relation",
mathname="wedgeeq",
+ synonyms={ "corresponds to" },
unicodeslot=0x2259,
},
[0x225A]={
@@ -63948,6 +64628,7 @@ characters.data={
linebreak="al",
mathclass="relation",
mathname="triangleq",
+ synonyms={ "equal to by definition", "equiangular" },
unicodeslot=0x225C,
},
[0x225D]={
@@ -64154,6 +64835,7 @@ characters.data={
linebreak="al",
mathclass="relation",
mathname="between",
+ synonyms={ "plaintiff", "quantic" },
unicodeslot=0x226C,
},
[0x226D]={
@@ -64320,6 +65002,7 @@ characters.data={
mathclass="relation",
mathname="prec",
mirror=0x227B,
+ synonyms={ "lower rank than" },
unicodeslot=0x227A,
},
[0x227B]={
@@ -64331,6 +65014,7 @@ characters.data={
mathclass="relation",
mathname="succ",
mirror=0x227A,
+ synonyms={ "higher rank than" },
unicodeslot=0x227B,
},
[0x227C]={
@@ -64407,6 +65091,7 @@ characters.data={
mathclass="relation",
mathname="subset",
mirror=0x2283,
+ synonyms={ "included in set" },
unicodeslot=0x2282,
},
[0x2283]={
@@ -64419,6 +65104,7 @@ characters.data={
mathclass="relation",
mathname="supset",
mirror=0x2282,
+ synonyms={ "includes in set" },
unicodeslot=0x2283,
},
[0x2284]={
@@ -64540,6 +65226,7 @@ characters.data={
linebreak="al",
mathclass="binary",
mathname="uplus",
+ synonyms={ "bag addition" },
unicodeslot=0x228E,
},
[0x228F]={
@@ -64615,6 +65302,7 @@ characters.data={
linebreak="ai",
mathclass="binary",
mathname="oplus",
+ synonyms={ "direct sum" },
unicodeslot=0x2295,
variants={
[0xFE00]="with white rim",
@@ -64628,6 +65316,7 @@ characters.data={
linebreak="al",
mathclass="binary",
mathname="ominus",
+ synonyms={ "symmetric difference" },
unicodeslot=0x2296,
},
[0x2297]={
@@ -64638,6 +65327,7 @@ characters.data={
linebreak="al",
mathclass="binary",
mathname="otimes",
+ synonyms={ "tensor product", "vector pointing into page" },
unicodeslot=0x2297,
variants={
[0xFE00]="with white rim",
@@ -64662,6 +65352,7 @@ characters.data={
linebreak="ai",
mathclass="binary",
mathname="odot",
+ synonyms={ "direct product", "vector pointing out of page" },
unicodeslot=0x2299,
},
[0x229A]={
@@ -64747,6 +65438,7 @@ characters.data={
mathclass="relation",
mathname="vdash",
mirror=0x22A3,
+ synonyms={ "implies", "proves", "reducible", "turnstile", "yields" },
unicodeslot=0x22A2,
},
[0x22A3]={
@@ -64758,6 +65450,7 @@ characters.data={
mathclass="relation",
mathname="dashv",
mirror=0x22A2,
+ synonyms={ "does not yield", "non-theorem", "reverse turnstile" },
unicodeslot=0x22A3,
},
[0x22A4]={
@@ -64768,6 +65461,7 @@ characters.data={
linebreak="al",
mathclass="default",
mathname="top",
+ synonyms={ "top" },
unicodeslot=0x22A4,
},
[0x22A5]={
@@ -64787,6 +65481,7 @@ characters.data={
name="perp",
},
},
+ synonyms={ "base", "bottom", "orthogonal to", "perpendicular" },
unicodeslot=0x22A5,
},
[0x22A6]={
@@ -64795,6 +65490,7 @@ characters.data={
direction="on",
linebreak="al",
mirror=0x2ADE,
+ synonyms={ "reduces to" },
unicodeslot=0x22A6,
},
[0x22A7]={
@@ -64814,6 +65510,7 @@ characters.data={
mathclass="relation",
mathname="vDash",
mirror=0x2AE4,
+ synonyms={ "results in", "satisfies", "statement is true", "tautology", "valid" },
unicodeslot=0x22A8,
},
[0x22A9]={
@@ -65044,6 +65741,7 @@ characters.data={
linebreak="al",
mathclass="limop",
mathname="bigcap",
+ synonyms={ "generalized intersection" },
unicodeslot=0x22C2,
},
[0x22C3]={
@@ -65053,6 +65751,7 @@ characters.data={
linebreak="al",
mathclass="limop",
mathname="bigcup",
+ synonyms={ "generalized union" },
unicodeslot=0x22C3,
},
[0x22C4]={
@@ -65246,6 +65945,7 @@ characters.data={
linebreak="al",
mathclass="relation",
mathname="pitchfork",
+ synonyms={ "proper intersection" },
unicodeslot=0x22D4,
},
[0x22D5]={
@@ -65696,6 +66396,7 @@ characters.data={
description="ELECTRIC ARROW",
direction="on",
linebreak="al",
+ synonyms={ "end of transmission symbol" },
unicodeslot=0x2301,
},
[0x2302]={
@@ -65751,6 +66452,7 @@ characters.data={
mathclass="open",
mathname="lceil",
mirror=0x2309,
+ synonyms={ "apl upstile" },
unicodeslot=0x2308,
},
[0x2309]={
@@ -65771,6 +66473,7 @@ characters.data={
mathclass="open",
mathname="lfloor",
mirror=0x230B,
+ synonyms={ "apl downstile" },
unicodeslot=0x230A,
},
[0x230B]={
@@ -65817,6 +66520,7 @@ characters.data={
description="REVERSED NOT SIGN",
direction="on",
linebreak="al",
+ synonyms={ "beginning of line" },
unicodeslot=0x2310,
},
[0x2311]={
@@ -65824,6 +66528,7 @@ characters.data={
description="SQUARE LOZENGE",
direction="on",
linebreak="al",
+ synonyms={ "kissen", "pillow" },
unicodeslot=0x2311,
},
[0x2312]={
@@ -65876,6 +66581,7 @@ characters.data={
description="PLACE OF INTEREST SIGN",
direction="on",
linebreak="al",
+ synonyms={ "command key" },
unicodeslot=0x2318,
},
[0x2319]={
@@ -65883,29 +66589,26 @@ characters.data={
description="TURNED NOT SIGN",
direction="on",
linebreak="al",
+ synonyms={ "line marker" },
unicodeslot=0x2319,
},
[0x231A]={
category="so",
+ cjkwd="w",
description="WATCH",
direction="on",
linebreak="id",
unicodeslot=0x231A,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x231B]={
category="so",
+ cjkwd="w",
description="HOURGLASS",
direction="on",
linebreak="id",
unicodeslot=0x231B,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x231C]={
category="so",
@@ -65982,6 +66685,7 @@ characters.data={
description="UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS",
direction="on",
linebreak="al",
+ synonyms={ "enter key" },
unicodeslot=0x2324,
},
[0x2325]={
@@ -65998,6 +66702,7 @@ characters.data={
description="ERASE TO THE RIGHT",
direction="on",
linebreak="al",
+ synonyms={ "delete to the right key" },
unicodeslot=0x2326,
},
[0x2327]={
@@ -66006,6 +66711,7 @@ characters.data={
description="X IN A RECTANGLE BOX",
direction="on",
linebreak="al",
+ synonyms={ "clear key" },
unicodeslot=0x2327,
},
[0x2328]={
@@ -66014,6 +66720,7 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0x2328,
+ variants=variants_emoji,
},
[0x2329]={
adobename="angleleft",
@@ -66043,6 +66750,7 @@ characters.data={
description="ERASE TO THE LEFT",
direction="on",
linebreak="al",
+ synonyms={ "delete to the left key" },
unicodeslot=0x232B,
},
[0x232C]={
@@ -66442,6 +67150,7 @@ characters.data={
description="APL FUNCTIONAL SYMBOL JOT DIAERESIS",
direction="l",
linebreak="al",
+ synonyms={ "hoot" },
unicodeslot=0x2364,
},
[0x2365]={
@@ -66449,6 +67158,7 @@ characters.data={
description="APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS",
direction="l",
linebreak="al",
+ synonyms={ "holler" },
unicodeslot=0x2365,
},
[0x2366]={
@@ -66470,6 +67180,7 @@ characters.data={
description="APL FUNCTIONAL SYMBOL TILDE DIAERESIS",
direction="l",
linebreak="al",
+ synonyms={ "smirk" },
unicodeslot=0x2368,
},
[0x2369]={
@@ -66617,6 +67328,7 @@ characters.data={
description="SHOULDERED OPEN BOX",
direction="on",
linebreak="al",
+ synonyms={ "keyboard symbol for no break space" },
unicodeslot=0x237D,
},
[0x237E]={
@@ -66631,6 +67343,7 @@ characters.data={
description="VERTICAL LINE WITH MIDDLE DOT",
direction="on",
linebreak="al",
+ synonyms={ "symbol for end of medium" },
unicodeslot=0x237F,
},
[0x2380]={
@@ -66673,6 +67386,7 @@ characters.data={
description="WHITE SQUARE WITH CENTRE VERTICAL LINE",
direction="on",
linebreak="al",
+ synonyms={ "center" },
unicodeslot=0x2385,
},
[0x2386]={
@@ -66694,6 +67408,7 @@ characters.data={
description="HELM SYMBOL",
direction="on",
linebreak="al",
+ synonyms={ "control" },
unicodeslot=0x2388,
},
[0x2389]={
@@ -66701,6 +67416,7 @@ characters.data={
description="CIRCLED HORIZONTAL BAR WITH NOTCH",
direction="on",
linebreak="al",
+ synonyms={ "pause" },
unicodeslot=0x2389,
},
[0x238A]={
@@ -66708,6 +67424,7 @@ characters.data={
description="CIRCLED TRIANGLE DOWN",
direction="on",
linebreak="al",
+ synonyms={ "interrupt" },
unicodeslot=0x238A,
},
[0x238B]={
@@ -66976,6 +67693,7 @@ characters.data={
linebreak="al",
mathclass="open",
mathname="lmoustache",
+ synonyms={ "left moustache" },
unicodeslot=0x23B0,
},
[0x23B1]={
@@ -66985,6 +67703,7 @@ characters.data={
linebreak="al",
mathclass="close",
mathname="rmoustache",
+ synonyms={ "right moustache" },
unicodeslot=0x23B1,
},
[0x23B2]={
@@ -67203,7 +67922,9 @@ characters.data={
description="EJECT SYMBOL",
direction="on",
linebreak="al",
+ synonyms={ "eject media" },
unicodeslot=0x23CF,
+ variants=variants_emoji,
},
[0x23D0]={
category="so",
@@ -67400,20 +68121,25 @@ characters.data={
},
[0x23E9]={
category="so",
+ cjkwd="w",
description="BLACK RIGHT-POINTING DOUBLE TRIANGLE",
direction="on",
linebreak="al",
+ synonyms={ "fast forward" },
unicodeslot=0x23E9,
},
[0x23EA]={
category="so",
+ cjkwd="w",
description="BLACK LEFT-POINTING DOUBLE TRIANGLE",
direction="on",
linebreak="al",
+ synonyms={ "fast rewind" },
unicodeslot=0x23EA,
},
[0x23EB]={
category="so",
+ cjkwd="w",
description="BLACK UP-POINTING DOUBLE TRIANGLE",
direction="on",
linebreak="al",
@@ -67421,6 +68147,7 @@ characters.data={
},
[0x23EC]={
category="so",
+ cjkwd="w",
description="BLACK DOWN-POINTING DOUBLE TRIANGLE",
direction="on",
linebreak="al",
@@ -67432,6 +68159,7 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0x23ED,
+ variants=variants_emoji,
},
[0x23EE]={
category="so",
@@ -67439,6 +68167,7 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0x23EE,
+ variants=variants_emoji,
},
[0x23EF]={
category="so",
@@ -67446,9 +68175,11 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0x23EF,
+ variants=variants_emoji,
},
[0x23F0]={
category="so",
+ cjkwd="w",
description="ALARM CLOCK",
direction="on",
linebreak="id",
@@ -67460,6 +68191,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x23F1,
+ variants=variants_emoji,
},
[0x23F2]={
category="so",
@@ -67467,9 +68199,11 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x23F2,
+ variants=variants_emoji,
},
[0x23F3]={
category="so",
+ cjkwd="w",
description="HOURGLASS WITH FLOWING SAND",
direction="on",
linebreak="id",
@@ -67480,6 +68214,7 @@ characters.data={
description="BLACK MEDIUM LEFT-POINTING TRIANGLE",
direction="on",
linebreak="al",
+ synonyms={ "reverse play" },
unicodeslot=0x23F4,
},
[0x23F5]={
@@ -67487,6 +68222,7 @@ characters.data={
description="BLACK MEDIUM RIGHT-POINTING TRIANGLE",
direction="on",
linebreak="al",
+ synonyms={ "forward play" },
unicodeslot=0x23F5,
},
[0x23F6]={
@@ -67494,6 +68230,7 @@ characters.data={
description="BLACK MEDIUM UP-POINTING TRIANGLE",
direction="on",
linebreak="al",
+ synonyms={ "increase" },
unicodeslot=0x23F6,
},
[0x23F7]={
@@ -67501,6 +68238,7 @@ characters.data={
description="BLACK MEDIUM DOWN-POINTING TRIANGLE",
direction="on",
linebreak="al",
+ synonyms={ "decrease" },
unicodeslot=0x23F7,
},
[0x23F8]={
@@ -67508,21 +68246,55 @@ characters.data={
description="DOUBLE VERTICAL BAR",
direction="on",
linebreak="al",
+ synonyms={ "pause play" },
unicodeslot=0x23F8,
+ variants=variants_emoji,
},
[0x23F9]={
category="so",
description="BLACK SQUARE FOR STOP",
direction="on",
linebreak="al",
+ synonyms={ "stop play" },
unicodeslot=0x23F9,
+ variants=variants_emoji,
},
[0x23FA]={
category="so",
description="BLACK CIRCLE FOR RECORD",
direction="on",
linebreak="al",
+ synonyms={ "record" },
unicodeslot=0x23FA,
+ variants=variants_emoji,
+ },
+ [0x23FB]={
+ category="so",
+ description="POWER SYMBOL",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x23FB,
+ },
+ [0x23FC]={
+ category="so",
+ description="POWER ON-OFF SYMBOL",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x23FC,
+ },
+ [0x23FD]={
+ category="so",
+ description="POWER ON SYMBOL",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x23FD,
+ },
+ [0x23FE]={
+ category="so",
+ description="POWER SLEEP SYMBOL",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x23FE,
},
[0x2400]={
category="so",
@@ -67775,6 +68547,7 @@ characters.data={
description="OPEN BOX",
direction="on",
linebreak="al",
+ synonyms={ "graphic for space" },
unicodeslot=0x2423,
},
[0x2424]={
@@ -68877,10 +69650,7 @@ characters.data={
linebreak="ai",
specials={ "circle", 0x4D },
unicodeslot=0x24C2,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x24C3]={
adobename="Ncircle",
@@ -70612,6 +71382,7 @@ characters.data={
description="FULL BLOCK",
direction="on",
linebreak="ai",
+ synonyms={ "solid" },
unicodeslot=0x2588,
},
[0x2589]={
@@ -70819,6 +71590,7 @@ characters.data={
name="Box",
},
},
+ synonyms={ "quadrature" },
unicodeslot=0x25A1,
},
[0x25A2]={
@@ -70899,10 +71671,7 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0x25AA,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x25AB]={
adobename="whitesmallsquare",
@@ -70911,10 +71680,7 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0x25AB,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x25AC]={
adobename="filledrect",
@@ -70936,6 +71702,7 @@ characters.data={
description="BLACK VERTICAL RECTANGLE",
direction="on",
linebreak="al",
+ synonyms={ "histogram marker" },
unicodeslot=0x25AE,
},
[0x25AF]={
@@ -70987,6 +71754,7 @@ characters.data={
name="bigtriangleup",
},
},
+ synonyms={ "trine" },
unicodeslot=0x25B3,
},
[0x25B4]={
@@ -71015,10 +71783,7 @@ characters.data={
mathclass="binary",
mathname="blacktriangleright",
unicodeslot=0x25B6,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x25B7]={
adobename="whiterightpointingtriangle",
@@ -71029,6 +71794,7 @@ characters.data={
linebreak="ai",
mathclass="binary",
mathname="triangleright",
+ synonyms={ "range restriction" },
unicodeslot=0x25B7,
},
[0x25B8]={
@@ -71059,6 +71825,7 @@ characters.data={
description="WHITE RIGHT-POINTING POINTER",
direction="on",
linebreak="al",
+ synonyms={ "forward arrow indicator" },
unicodeslot=0x25BB,
},
[0x25BC]={
@@ -71089,6 +71856,7 @@ characters.data={
name="bigtriangledown",
},
},
+ synonyms={ "hamilton operator" },
unicodeslot=0x25BD,
},
[0x25BE]={
@@ -71116,10 +71884,7 @@ characters.data={
mathclass="binary",
mathname="blacktriangleleft",
unicodeslot=0x25C0,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x25C1]={
adobename="whiteleftpointingtriangle",
@@ -71130,6 +71895,7 @@ characters.data={
linebreak="ai",
mathclass="binary",
mathname="triangleleft",
+ synonyms={ "domain restriction" },
unicodeslot=0x25C1,
},
[0x25C2]={
@@ -71160,6 +71926,7 @@ characters.data={
description="WHITE LEFT-POINTING POINTER",
direction="on",
linebreak="al",
+ synonyms={ "backward arrow indicator" },
unicodeslot=0x25C5,
},
[0x25C6]={
@@ -71195,6 +71962,7 @@ characters.data={
description="FISHEYE",
direction="on",
linebreak="al",
+ synonyms={ "tainome japanese bullet" },
unicodeslot=0x25C9,
},
[0x25CA]={
@@ -71574,11 +72342,9 @@ characters.data={
description="WHITE MEDIUM SQUARE",
direction="on",
linebreak="al",
+ synonyms={ "always" },
unicodeslot=0x25FB,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x25FC]={
category="sm",
@@ -71586,32 +72352,25 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0x25FC,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x25FD]={
category="sm",
+ cjkwd="w",
description="WHITE MEDIUM SMALL SQUARE",
direction="on",
linebreak="al",
unicodeslot=0x25FD,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x25FE]={
category="sm",
+ cjkwd="w",
description="BLACK MEDIUM SMALL SQUARE",
direction="on",
linebreak="al",
unicodeslot=0x25FE,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x25FF]={
category="sm",
@@ -71625,36 +72384,36 @@ characters.data={
description="BLACK SUN WITH RAYS",
direction="on",
linebreak="id",
+ synonyms={ "clear weather" },
unicodeslot=0x2600,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2601]={
category="so",
description="CLOUD",
direction="on",
linebreak="id",
+ synonyms={ "cloudy weather" },
unicodeslot=0x2601,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2602]={
category="so",
description="UMBRELLA",
direction="on",
linebreak="id",
+ synonyms={ "rainy weather" },
unicodeslot=0x2602,
+ variants=variants_emoji,
},
[0x2603]={
category="so",
description="SNOWMAN",
direction="on",
linebreak="id",
+ synonyms={ "snowy weather" },
unicodeslot=0x2603,
+ variants=variants_emoji,
},
[0x2604]={
category="so",
@@ -71662,6 +72421,7 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0x2604,
+ variants=variants_emoji,
},
[0x2605]={
adobename="blackstar",
@@ -71741,10 +72501,7 @@ characters.data={
direction="on",
linebreak="ai",
unicodeslot=0x260E,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x260F]={
adobename="whitetelephone",
@@ -71768,10 +72525,7 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0x2611,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2612]={
category="so",
@@ -71785,31 +72539,28 @@ characters.data={
description="SALTIRE",
direction="on",
linebreak="al",
+ synonyms={ "st. andrew's cross" },
unicodeslot=0x2613,
},
[0x2614]={
category="so",
- cjkwd="a",
+ cjkwd="w",
description="UMBRELLA WITH RAIN DROPS",
direction="on",
linebreak="id",
+ synonyms={ "showery weather" },
unicodeslot=0x2614,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2615]={
category="so",
- cjkwd="a",
+ cjkwd="w",
description="HOT BEVERAGE",
direction="on",
linebreak="id",
+ synonyms={ "cup of coffee", "cup of tea" },
unicodeslot=0x2615,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2616]={
category="so",
@@ -71831,6 +72582,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x2618,
+ variants=variants_emoji,
},
[0x2619]={
category="so",
@@ -71867,12 +72619,9 @@ characters.data={
category="so",
description="WHITE UP POINTING INDEX",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x261D,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x261E]={
adobename="pointingindexrightwhite",
@@ -71881,6 +72630,7 @@ characters.data={
description="WHITE RIGHT POINTING INDEX",
direction="on",
linebreak="id",
+ synonyms={ "fist" },
unicodeslot=0x261E,
},
[0x261F]={
@@ -71896,7 +72646,9 @@ characters.data={
description="SKULL AND CROSSBONES",
direction="on",
linebreak="al",
+ synonyms={ "jolly roger", "poison" },
unicodeslot=0x2620,
+ variants=variants_emoji,
},
[0x2621]={
category="so",
@@ -71911,6 +72663,7 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0x2622,
+ variants=variants_emoji,
},
[0x2623]={
category="so",
@@ -71918,6 +72671,7 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0x2623,
+ variants=variants_emoji,
},
[0x2624]={
category="so",
@@ -71939,12 +72693,14 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0x2626,
+ variants=variants_emoji,
},
[0x2627]={
category="so",
description="CHI RHO",
direction="on",
linebreak="al",
+ synonyms={ "christogram", "constantine's cross" },
unicodeslot=0x2627,
},
[0x2628]={
@@ -71967,6 +72723,7 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0x262A,
+ variants=variants_emoji,
},
[0x262B]={
category="so",
@@ -71980,6 +72737,7 @@ characters.data={
description="ADI SHAKTI",
direction="on",
linebreak="al",
+ synonyms={ "gurmukhi khanda" },
unicodeslot=0x262C,
},
[0x262D]={
@@ -71995,6 +72753,7 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0x262E,
+ variants=variants_emoji,
},
[0x262F]={
adobename="yinyang",
@@ -72003,6 +72762,7 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0x262F,
+ variants=variants_emoji,
},
[0x2630]={
category="so",
@@ -72066,6 +72826,7 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0x2638,
+ variants=variants_emoji,
},
[0x2639]={
category="so",
@@ -72073,6 +72834,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x2639,
+ variants=variants_emoji,
},
[0x263A]={
adobename="whitesmilingface",
@@ -72080,11 +72842,9 @@ characters.data={
description="WHITE SMILING FACE",
direction="on",
linebreak="id",
+ synonyms={ "have a nice day!" },
unicodeslot=0x263A,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x263B]={
adobename="invsmileface",
@@ -72100,6 +72860,7 @@ characters.data={
description="WHITE SUN WITH RAYS",
direction="on",
linebreak="al",
+ synonyms={ "compass" },
unicodeslot=0x263C,
},
[0x263D]={
@@ -72130,6 +72891,7 @@ characters.data={
description="FEMALE SIGN",
direction="on",
linebreak="ai",
+ synonyms={ "venus" },
unicodeslot=0x2640,
},
[0x2641]={
@@ -72147,6 +72909,7 @@ characters.data={
description="MALE SIGN",
direction="on",
linebreak="ai",
+ synonyms={ "mars" },
unicodeslot=0x2642,
},
[0x2643]={
@@ -72186,135 +72949,113 @@ characters.data={
},
[0x2648]={
category="so",
+ cjkwd="w",
description="ARIES",
direction="on",
linebreak="al",
unicodeslot=0x2648,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2649]={
category="so",
+ cjkwd="w",
description="TAURUS",
direction="on",
linebreak="al",
unicodeslot=0x2649,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x264A]={
category="so",
+ cjkwd="w",
description="GEMINI",
direction="on",
linebreak="al",
unicodeslot=0x264A,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x264B]={
category="so",
+ cjkwd="w",
description="CANCER",
direction="on",
linebreak="al",
unicodeslot=0x264B,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x264C]={
category="so",
+ cjkwd="w",
description="LEO",
direction="on",
linebreak="al",
unicodeslot=0x264C,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x264D]={
category="so",
+ cjkwd="w",
description="VIRGO",
direction="on",
linebreak="al",
+ synonyms={ "minim alternate glyph" },
unicodeslot=0x264D,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x264E]={
category="so",
+ cjkwd="w",
description="LIBRA",
direction="on",
linebreak="al",
unicodeslot=0x264E,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x264F]={
category="so",
+ cjkwd="w",
description="SCORPIUS",
direction="on",
linebreak="al",
+ synonyms={ "drop", "minim" },
unicodeslot=0x264F,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2650]={
category="so",
+ cjkwd="w",
description="SAGITTARIUS",
direction="on",
linebreak="al",
unicodeslot=0x2650,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2651]={
category="so",
+ cjkwd="w",
description="CAPRICORN",
direction="on",
linebreak="al",
unicodeslot=0x2651,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2652]={
category="so",
+ cjkwd="w",
description="AQUARIUS",
direction="on",
linebreak="al",
unicodeslot=0x2652,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2653]={
category="so",
+ cjkwd="w",
description="PISCES",
direction="on",
linebreak="al",
unicodeslot=0x2653,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2654]={
category="so",
@@ -72410,10 +73151,7 @@ characters.data={
mathclass="default",
mathname="spadesuit",
unicodeslot=0x2660,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2661]={
adobename="heartsuitwhite",
@@ -72445,11 +73183,9 @@ characters.data={
linebreak="ai",
mathclass="default",
mathname="clubsuit",
+ synonyms={ "shamrock" },
unicodeslot=0x2663,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2664]={
adobename="spadesuitwhite",
@@ -72467,11 +73203,9 @@ characters.data={
description="BLACK HEART SUIT",
direction="on",
linebreak="ai",
+ synonyms={ "valentine" },
unicodeslot=0x2665,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2666]={
adobename="diamond",
@@ -72482,10 +73216,7 @@ characters.data={
mathclass="ordinary",
mathname="blacklozenge",
unicodeslot=0x2666,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2667]={
adobename="clubsuitwhite",
@@ -72504,10 +73235,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x2668,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2669]={
adobename="quarternote",
@@ -72516,6 +73244,7 @@ characters.data={
description="QUARTER NOTE",
direction="on",
linebreak="ai",
+ synonyms={ "crotchet" },
unicodeslot=0x2669,
},
[0x266A]={
@@ -72525,6 +73254,7 @@ characters.data={
description="EIGHTH NOTE",
direction="on",
linebreak="ai",
+ synonyms={ "quaver" },
unicodeslot=0x266A,
},
[0x266B]={
@@ -72533,6 +73263,7 @@ characters.data={
description="BEAMED EIGHTH NOTES",
direction="on",
linebreak="al",
+ synonyms={ "beamed quavers" },
unicodeslot=0x266B,
},
[0x266C]={
@@ -72542,6 +73273,7 @@ characters.data={
description="BEAMED SIXTEENTH NOTES",
direction="on",
linebreak="ai",
+ synonyms={ "beamed semiquavers" },
unicodeslot=0x266C,
},
[0x266D]={
@@ -72573,6 +73305,7 @@ characters.data={
linebreak="ai",
mathclass="default",
mathname="sharp",
+ synonyms={ "infix bag count" },
unicodeslot=0x266F,
},
[0x2670]={
@@ -72658,10 +73391,7 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0x267B,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x267C]={
category="so",
@@ -72686,14 +73416,12 @@ characters.data={
},
[0x267F]={
category="so",
+ cjkwd="w",
description="WHEELCHAIR SYMBOL",
direction="on",
linebreak="id",
unicodeslot=0x267F,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2680]={
category="so",
@@ -72826,25 +73554,28 @@ characters.data={
description="HAMMER AND PICK",
direction="on",
linebreak="al",
+ synonyms={ "mining symbol", "working day symbol" },
unicodeslot=0x2692,
+ variants=variants_emoji,
},
[0x2693]={
category="so",
+ cjkwd="w",
description="ANCHOR",
direction="on",
linebreak="al",
+ synonyms={ "harbor symbol" },
unicodeslot=0x2693,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2694]={
category="so",
description="CROSSED SWORDS",
direction="on",
linebreak="al",
+ synonyms={ "battleground symbol" },
unicodeslot=0x2694,
+ variants=variants_emoji,
},
[0x2695]={
category="so",
@@ -72858,7 +73589,9 @@ characters.data={
description="SCALES",
direction="on",
linebreak="al",
+ synonyms={ "jurisprudence symbol" },
unicodeslot=0x2696,
+ variants=variants_emoji,
},
[0x2697]={
category="so",
@@ -72866,6 +73599,7 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0x2697,
+ variants=variants_emoji,
},
[0x2698]={
category="so",
@@ -72880,6 +73614,7 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0x2699,
+ variants=variants_emoji,
},
[0x269A]={
category="so",
@@ -72894,6 +73629,7 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0x269B,
+ variants=variants_emoji,
},
[0x269C]={
category="so",
@@ -72901,6 +73637,7 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0x269C,
+ variants=variants_emoji,
},
[0x269D]={
category="so",
@@ -72931,21 +73668,17 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0x26A0,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x26A1]={
category="so",
+ cjkwd="w",
description="HIGH VOLTAGE SIGN",
direction="on",
linebreak="al",
+ synonyms={ "lightning", "thunder" },
unicodeslot=0x26A1,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x26A2]={
category="so",
@@ -73005,25 +73738,21 @@ characters.data={
},
[0x26AA]={
category="so",
+ cjkwd="w",
description="MEDIUM WHITE CIRCLE",
direction="on",
linebreak="al",
unicodeslot=0x26AA,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x26AB]={
category="so",
+ cjkwd="w",
description="MEDIUM BLACK CIRCLE",
direction="on",
linebreak="al",
unicodeslot=0x26AB,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x26AC]={
category="so",
@@ -73058,14 +73787,18 @@ characters.data={
description="COFFIN",
direction="on",
linebreak="al",
+ synonyms={ "buried symbol" },
unicodeslot=0x26B0,
+ variants=variants_emoji,
},
[0x26B1]={
category="so",
description="FUNERAL URN",
direction="on",
linebreak="al",
+ synonyms={ "cremated symbol" },
unicodeslot=0x26B1,
+ variants=variants_emoji,
},
[0x26B2]={
category="so",
@@ -73146,26 +73879,21 @@ characters.data={
},
[0x26BD]={
category="so",
+ cjkwd="w",
description="SOCCER BALL",
direction="on",
linebreak="id",
unicodeslot=0x26BD,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x26BE]={
category="so",
- cjkwd="a",
+ cjkwd="w",
description="BASEBALL",
direction="on",
linebreak="id",
unicodeslot=0x26BE,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x26BF]={
category="so",
@@ -73173,6 +73901,7 @@ characters.data={
description="SQUARED KEY",
direction="on",
linebreak="id",
+ synonyms={ "parental lock" },
unicodeslot=0x26BF,
},
[0x26C0]={
@@ -73205,27 +73934,23 @@ characters.data={
},
[0x26C4]={
category="so",
- cjkwd="a",
+ cjkwd="w",
description="SNOWMAN WITHOUT SNOW",
direction="on",
linebreak="id",
+ synonyms={ "light snow" },
unicodeslot=0x26C4,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x26C5]={
category="so",
- cjkwd="a",
+ cjkwd="w",
description="SUN BEHIND CLOUD",
direction="on",
linebreak="id",
+ synonyms={ "partly cloudy" },
unicodeslot=0x26C5,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x26C6]={
category="so",
@@ -73241,6 +73966,7 @@ characters.data={
description="BLACK SNOWMAN",
direction="on",
linebreak="id",
+ synonyms={ "heavy snow" },
unicodeslot=0x26C7,
},
[0x26C8]={
@@ -73249,7 +73975,9 @@ characters.data={
description="THUNDER CLOUD AND RAIN",
direction="on",
linebreak="id",
+ synonyms={ "thunderstorm" },
unicodeslot=0x26C8,
+ variants=variants_emoji,
},
[0x26C9]={
category="so",
@@ -73281,6 +74009,7 @@ characters.data={
description="CROSSING LANES",
direction="on",
linebreak="ai",
+ synonyms={ "accident" },
unicodeslot=0x26CC,
},
[0x26CD]={
@@ -73293,6 +74022,7 @@ characters.data={
},
[0x26CE]={
category="so",
+ cjkwd="w",
description="OPHIUCHUS",
direction="on",
linebreak="al",
@@ -73304,7 +74034,9 @@ characters.data={
description="PICK",
direction="on",
linebreak="id",
+ synonyms={ "construction" },
unicodeslot=0x26CF,
+ variants=variants_emoji,
},
[0x26D0]={
category="so",
@@ -73312,6 +74044,7 @@ characters.data={
description="CAR SLIDING",
direction="on",
linebreak="id",
+ synonyms={ "icy road" },
unicodeslot=0x26D0,
},
[0x26D1]={
@@ -73321,6 +74054,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x26D1,
+ variants=variants_emoji,
},
[0x26D2]={
category="so",
@@ -73328,6 +74062,7 @@ characters.data={
description="CIRCLED CROSSING LANES",
direction="on",
linebreak="ai",
+ synonyms={ "road closed" },
unicodeslot=0x26D2,
},
[0x26D3]={
@@ -73337,18 +74072,17 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x26D3,
+ variants=variants_emoji,
},
[0x26D4]={
category="so",
- cjkwd="a",
+ cjkwd="w",
description="NO ENTRY",
direction="on",
linebreak="id",
+ synonyms={ "do not enter" },
unicodeslot=0x26D4,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x26D5]={
category="so",
@@ -73404,6 +74138,7 @@ characters.data={
description="HEAVY WHITE DOWN-POINTING TRIANGLE",
direction="on",
linebreak="ai",
+ synonyms={ "yield" },
unicodeslot=0x26DB,
},
[0x26DC]={
@@ -73436,6 +74171,7 @@ characters.data={
description="BLACK TRUCK",
direction="on",
linebreak="id",
+ synonyms={ "black lorry" },
unicodeslot=0x26DF,
},
[0x26E0]={
@@ -73459,6 +74195,7 @@ characters.data={
description="ASTRONOMICAL SYMBOL FOR URANUS",
direction="on",
linebreak="al",
+ synonyms={ "uranus" },
unicodeslot=0x26E2,
},
[0x26E3]={
@@ -73474,6 +74211,7 @@ characters.data={
description="PENTAGRAM",
direction="on",
linebreak="al",
+ synonyms={ "pentangle pentalpha" },
unicodeslot=0x26E4,
},
[0x26E5]={
@@ -73503,6 +74241,7 @@ characters.data={
description="BLACK CROSS ON SHIELD",
direction="on",
linebreak="ai",
+ synonyms={ "hospital" },
unicodeslot=0x26E8,
},
[0x26E9]={
@@ -73511,19 +74250,18 @@ characters.data={
description="SHINTO SHRINE",
direction="on",
linebreak="ai",
+ synonyms={ "torii" },
unicodeslot=0x26E9,
+ variants=variants_emoji,
},
[0x26EA]={
category="so",
- cjkwd="a",
+ cjkwd="w",
description="CHURCH",
direction="on",
linebreak="id",
unicodeslot=0x26EA,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x26EB]={
category="so",
@@ -73547,6 +74285,7 @@ characters.data={
description="GEAR WITHOUT HUB",
direction="on",
linebreak="ai",
+ synonyms={ "factory" },
unicodeslot=0x26ED,
},
[0x26EE]={
@@ -73555,6 +74294,7 @@ characters.data={
description="GEAR WITH HANDLES",
direction="on",
linebreak="ai",
+ synonyms={ "power plant" },
unicodeslot=0x26EE,
},
[0x26EF]={
@@ -73572,6 +74312,7 @@ characters.data={
direction="on",
linebreak="ai",
unicodeslot=0x26F0,
+ variants=variants_emoji,
},
[0x26F1]={
category="so",
@@ -73579,31 +74320,29 @@ characters.data={
description="UMBRELLA ON GROUND",
direction="on",
linebreak="id",
+ synonyms={ "bathing beach" },
unicodeslot=0x26F1,
+ variants=variants_emoji,
},
[0x26F2]={
category="so",
- cjkwd="a",
+ cjkwd="w",
description="FOUNTAIN",
direction="on",
linebreak="id",
+ synonyms={ "park" },
unicodeslot=0x26F2,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x26F3]={
category="so",
- cjkwd="a",
+ cjkwd="w",
description="FLAG IN HOLE",
direction="on",
linebreak="id",
+ synonyms={ "golf course" },
unicodeslot=0x26F3,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x26F4]={
category="so",
@@ -73611,19 +74350,18 @@ characters.data={
description="FERRY",
direction="on",
linebreak="id",
+ synonyms={ "boat terminal", "marina or yacht harbour" },
unicodeslot=0x26F4,
+ variants=variants_emoji,
},
[0x26F5]={
category="so",
- cjkwd="a",
+ cjkwd="w",
description="SAILBOAT",
direction="on",
linebreak="id",
unicodeslot=0x26F5,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x26F6]={
category="so",
@@ -73640,6 +74378,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x26F7,
+ variants=variants_emoji,
},
[0x26F8]={
category="so",
@@ -73648,26 +74387,26 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x26F8,
+ variants=variants_emoji,
},
[0x26F9]={
category="so",
cjkwd="a",
description="PERSON WITH BALL",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x26F9,
+ variants=variants_emoji,
},
[0x26FA]={
category="so",
- cjkwd="a",
+ cjkwd="w",
description="TENT",
direction="on",
linebreak="id",
+ synonyms={ "camping site" },
unicodeslot=0x26FA,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x26FB]={
category="so",
@@ -73683,19 +74422,18 @@ characters.data={
description="HEADSTONE GRAVEYARD SYMBOL",
direction="on",
linebreak="ai",
+ synonyms={ "cemetery", "graveyard" },
unicodeslot=0x26FC,
},
[0x26FD]={
category="so",
- cjkwd="a",
+ cjkwd="w",
description="FUEL PUMP",
direction="on",
linebreak="id",
+ synonyms={ "gas station", "petrol station" },
unicodeslot=0x26FD,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x26FE]={
category="so",
@@ -73703,6 +74441,7 @@ characters.data={
description="CUP ON BLACK SQUARE",
direction="on",
linebreak="id",
+ synonyms={ "drive-in restaurant" },
unicodeslot=0x26FE,
},
[0x26FF]={
@@ -73733,10 +74472,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x2702,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2703]={
category="so",
@@ -73754,6 +74490,7 @@ characters.data={
},
[0x2705]={
category="so",
+ cjkwd="w",
description="WHITE HEAVY CHECK MARK",
direction="on",
linebreak="al",
@@ -73779,10 +74516,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x2708,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2709]={
category="so",
@@ -73790,42 +74524,42 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x2709,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x270A]={
category="so",
+ cjkwd="w",
description="RAISED FIST",
direction="on",
- linebreak="id",
+ linebreak="eb",
+ synonyms={ "paper, scissors game rock in rock" },
unicodeslot=0x270A,
},
[0x270B]={
category="so",
+ cjkwd="w",
description="RAISED HAND",
direction="on",
- linebreak="id",
+ linebreak="eb",
+ synonyms={ "paper, scissors game paper in rock" },
unicodeslot=0x270B,
},
[0x270C]={
category="so",
description="VICTORY HAND",
direction="on",
- linebreak="id",
+ linebreak="eb",
+ synonyms={ "paper, scissors game scissors in rock" },
unicodeslot=0x270C,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x270D]={
category="so",
description="WRITING HAND",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x270D,
+ variants=variants_emoji,
},
[0x270E]={
category="so",
@@ -73840,10 +74574,7 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0x270F,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2710]={
category="so",
@@ -73865,10 +74596,7 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0x2712,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2713]={
adobename="checkmark",
@@ -73886,10 +74614,7 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0x2714,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2715]={
category="so",
@@ -73904,10 +74629,7 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0x2716,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2717]={
category="so",
@@ -73957,6 +74679,7 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0x271D,
+ variants=variants_emoji,
},
[0x271E]={
category="so",
@@ -73987,6 +74710,7 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0x2721,
+ variants=variants_emoji,
},
[0x2722]={
category="so",
@@ -74032,6 +74756,7 @@ characters.data={
},
[0x2728]={
category="so",
+ cjkwd="w",
description="SPARKLES",
direction="on",
linebreak="al",
@@ -74113,10 +74838,7 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0x2733,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2734]={
category="so",
@@ -74124,10 +74846,7 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0x2734,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2735]={
category="so",
@@ -74141,6 +74860,7 @@ characters.data={
description="SIX POINTED BLACK STAR",
direction="on",
linebreak="al",
+ synonyms={ "sextile" },
unicodeslot=0x2736,
},
[0x2737]={
@@ -74169,6 +74889,7 @@ characters.data={
description="SIXTEEN POINTED ASTERISK",
direction="on",
linebreak="al",
+ synonyms={ "starburst" },
unicodeslot=0x273A,
},
[0x273B]={
@@ -74241,10 +74962,7 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0x2744,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2745]={
category="so",
@@ -74266,10 +74984,7 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0x2747,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2748]={
category="so",
@@ -74283,6 +74998,7 @@ characters.data={
description="BALLOON-SPOKED ASTERISK",
direction="on",
linebreak="al",
+ synonyms={ "jack" },
unicodeslot=0x2749,
},
[0x274A]={
@@ -74297,10 +75013,12 @@ characters.data={
description="HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK",
direction="on",
linebreak="al",
+ synonyms={ "turbofan" },
unicodeslot=0x274B,
},
[0x274C]={
category="so",
+ cjkwd="w",
description="CROSS MARK",
direction="on",
linebreak="al",
@@ -74315,6 +75033,7 @@ characters.data={
},
[0x274E]={
category="so",
+ cjkwd="w",
description="NEGATIVE SQUARED CROSS MARK",
direction="on",
linebreak="al",
@@ -74350,6 +75069,7 @@ characters.data={
},
[0x2753]={
category="so",
+ cjkwd="w",
description="BLACK QUESTION MARK ORNAMENT",
direction="on",
linebreak="al",
@@ -74357,6 +75077,7 @@ characters.data={
},
[0x2754]={
category="so",
+ cjkwd="w",
description="WHITE QUESTION MARK ORNAMENT",
direction="on",
linebreak="al",
@@ -74364,6 +75085,7 @@ characters.data={
},
[0x2755]={
category="so",
+ cjkwd="w",
description="WHITE EXCLAMATION MARK ORNAMENT",
direction="on",
linebreak="al",
@@ -74378,15 +75100,12 @@ characters.data={
},
[0x2757]={
category="so",
- cjkwd="a",
+ cjkwd="w",
description="HEAVY EXCLAMATION MARK SYMBOL",
direction="on",
linebreak="ai",
unicodeslot=0x2757,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2758]={
category="so",
@@ -74471,17 +75190,15 @@ characters.data={
direction="on",
linebreak="ex",
unicodeslot=0x2763,
+ variants=variants_emoji,
},
[0x2764]={
category="so",
description="HEAVY BLACK HEART",
direction="on",
- linebreak="al",
+ linebreak="id",
unicodeslot=0x2764,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2765]={
category="so",
@@ -74495,6 +75212,7 @@ characters.data={
description="FLORAL HEART",
direction="on",
linebreak="al",
+ synonyms={ "aldus leaf" },
unicodeslot=0x2766,
},
[0x2767]={
@@ -74502,6 +75220,7 @@ characters.data={
description="ROTATED FLORAL HEART BULLET",
direction="on",
linebreak="al",
+ synonyms={ "hedera", "ivy leaf" },
unicodeslot=0x2767,
},
[0x2768]={
@@ -74854,6 +75573,7 @@ characters.data={
},
[0x2795]={
category="so",
+ cjkwd="w",
description="HEAVY PLUS SIGN",
direction="on",
linebreak="al",
@@ -74861,6 +75581,7 @@ characters.data={
},
[0x2796]={
category="so",
+ cjkwd="w",
description="HEAVY MINUS SIGN",
direction="on",
linebreak="al",
@@ -74868,6 +75589,7 @@ characters.data={
},
[0x2797]={
category="so",
+ cjkwd="w",
description="HEAVY DIVISION SIGN",
direction="on",
linebreak="al",
@@ -74943,10 +75665,7 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0x27A1,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x27A2]={
category="so",
@@ -75048,6 +75767,7 @@ characters.data={
},
[0x27B0]={
category="so",
+ cjkwd="w",
description="CURLY LOOP",
direction="on",
linebreak="al",
@@ -75153,6 +75873,7 @@ characters.data={
},
[0x27BF]={
category="so",
+ cjkwd="w",
description="DOUBLE CURLY LOOP",
direction="on",
linebreak="al",
@@ -75306,6 +76027,7 @@ characters.data={
description="LOWER RIGHT CORNER WITH DOT",
direction="on",
linebreak="al",
+ synonyms={ "pullback" },
unicodeslot=0x27D3,
},
[0x27D4]={
@@ -75313,6 +76035,7 @@ characters.data={
description="UPPER LEFT CORNER WITH DOT",
direction="on",
linebreak="al",
+ synonyms={ "pushout" },
unicodeslot=0x27D4,
},
[0x27D5]={
@@ -75394,6 +76117,7 @@ characters.data={
description="UP TACK WITH CIRCLE ABOVE",
direction="on",
linebreak="al",
+ synonyms={ "radial component" },
unicodeslot=0x27DF,
},
[0x27E0]={
@@ -75451,6 +76175,7 @@ characters.data={
mathclass="open",
mathname="llbracket",
mirror=0x27E7,
+ synonyms={ "left bag bracket" },
unicodeslot=0x27E6,
},
[0x27E7]={
@@ -75462,6 +76187,7 @@ characters.data={
mathclass="close",
mathname="rrbracket",
mirror=0x27E6,
+ synonyms={ "right bag bracket" },
unicodeslot=0x27E7,
},
[0x27E8]={
@@ -75473,6 +76199,7 @@ characters.data={
mathclass="open",
mathname="langle",
mirror=0x27E9,
+ synonyms={ "bra", "left sequence bracket" },
unicodeslot=0x27E8,
},
[0x27E9]={
@@ -75484,6 +76211,7 @@ characters.data={
mathclass="close",
mathname="rangle",
mirror=0x27E8,
+ synonyms={ "ket", "right sequence bracket" },
unicodeslot=0x27E9,
},
[0x27EA]={
@@ -75495,6 +76223,7 @@ characters.data={
mathclass="open",
mathname="llangle",
mirror=0x27EB,
+ synonyms={ "left chevron bracket" },
unicodeslot=0x27EA,
},
[0x27EB]={
@@ -75506,6 +76235,7 @@ characters.data={
mathclass="close",
mathname="rrangle",
mirror=0x27EA,
+ synonyms={ "right chevron bracket" },
unicodeslot=0x27EB,
},
[0x27EC]={
@@ -75534,6 +76264,7 @@ characters.data={
mathclass="open",
mathname="lgroup",
mirror=0x27EF,
+ synonyms={ "lgroup" },
unicodeslot=0x27EE,
},
[0x27EF]={
@@ -75544,6 +76275,7 @@ characters.data={
mathclass="close",
mathname="rgroup",
mirror=0x27EE,
+ synonyms={ "rgroup" },
unicodeslot=0x27EF,
},
[0x27F0]={
@@ -77501,6 +78233,7 @@ characters.data={
direction="on",
linebreak="al",
mathextensible="r",
+ synonyms={ "partial surjection" },
unicodeslot=0x2900,
},
[0x2901]={
@@ -77509,6 +78242,7 @@ characters.data={
direction="on",
linebreak="al",
mathextensible="r",
+ synonyms={ "finite surjection" },
unicodeslot=0x2901,
},
[0x2902]={
@@ -77551,6 +78285,7 @@ characters.data={
mathclass="relation",
mathextensible="l",
mathname="Mapsfrom",
+ synonyms={ "maps from" },
unicodeslot=0x2906,
},
[0x2907]={
@@ -77561,6 +78296,7 @@ characters.data={
mathclass="relation",
mathextensible="r",
mathname="Mapsto",
+ synonyms={ "maps to" },
unicodeslot=0x2907,
},
[0x2908]={
@@ -77675,6 +78411,7 @@ characters.data={
direction="on",
linebreak="al",
mathextensible="r",
+ synonyms={ "partial injection" },
unicodeslot=0x2914,
},
[0x2915]={
@@ -77683,6 +78420,7 @@ characters.data={
direction="on",
linebreak="al",
mathextensible="r",
+ synonyms={ "finite injection" },
unicodeslot=0x2915,
},
[0x2916]={
@@ -77693,6 +78431,7 @@ characters.data={
mathclass="relation",
mathextensible="r",
mathname="twoheadrightarrowtail",
+ synonyms={ "bijection" },
unicodeslot=0x2916,
},
[0x2917]={
@@ -77702,6 +78441,7 @@ characters.data={
linebreak="al",
mathclass="relation",
mathextensible="r",
+ synonyms={ "surjective injection" },
unicodeslot=0x2917,
},
[0x2918]={
@@ -77710,6 +78450,7 @@ characters.data={
direction="on",
linebreak="al",
mathextensible="r",
+ synonyms={ "finite surjective injection" },
unicodeslot=0x2918,
},
[0x2919]={
@@ -77929,10 +78670,7 @@ characters.data={
linebreak="al",
mathextensible="m",
unicodeslot=0x2934,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2935]={
category="sm",
@@ -77941,10 +78679,7 @@ characters.data={
linebreak="al",
mathextensible="m",
unicodeslot=0x2935,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2936]={
category="sm",
@@ -78668,7 +79403,26 @@ characters.data={
description="LEFT BLACK TORTOISE SHELL BRACKET",
direction="on",
linebreak="op",
+ mathspec={
+ {
+ class="open",
+ name="linterval",
+ },
+ {
+ class="close",
+ name="rointerval",
+ },
+ {
+ class="open",
+ name="rlointerval",
+ },
+ {
+ class="close",
+ name="rlointerval",
+ },
+ },
mirror=0x2998,
+ textclass="open",
unicodeslot=0x2997,
},
[0x2998]={
@@ -78676,7 +79430,26 @@ characters.data={
description="RIGHT BLACK TORTOISE SHELL BRACKET",
direction="on",
linebreak="cl",
+ mathspec={
+ {
+ class="close",
+ name="rinterval",
+ },
+ {
+ class="open",
+ name="lointerval",
+ },
+ {
+ class="open",
+ name="lrointerval",
+ },
+ {
+ class="close",
+ name="rrointerval",
+ },
+ },
mirror=0x2997,
+ textclass="close",
unicodeslot=0x2998,
},
[0x2999]={
@@ -79122,6 +79895,7 @@ characters.data={
description="WHITE HOURGLASS",
direction="on",
linebreak="al",
+ synonyms={ "vertical bowtie", "white framus" },
unicodeslot=0x29D6,
},
[0x29D7]={
@@ -79168,6 +79942,7 @@ characters.data={
description="INCOMPLETE INFINITY",
direction="on",
linebreak="al",
+ synonyms={ "isotech entity &iinfin;" },
unicodeslot=0x29DC,
},
[0x29DD]={
@@ -79196,6 +79971,7 @@ characters.data={
description="SQUARE WITH CONTOURED OUTLINE",
direction="on",
linebreak="al",
+ synonyms={ "d'alembertian" },
unicodeslot=0x29E0,
},
[0x29E1]={
@@ -79238,6 +80014,7 @@ characters.data={
description="GLEICH STARK",
direction="on",
linebreak="al",
+ synonyms={ "tautological equivalent" },
unicodeslot=0x29E6,
},
[0x29E7]={
@@ -79339,6 +80116,7 @@ characters.data={
description="RULE-DELAYED",
direction="on",
linebreak="al",
+ synonyms={ "colon right arrow" },
unicodeslot=0x29F4,
},
[0x29F5]={
@@ -79377,6 +80155,7 @@ characters.data={
direction="on",
linebreak="al",
mirror=0x29F8,
+ synonyms={ "schema hiding" },
unicodeslot=0x29F9,
},
[0x29FA]={
@@ -79491,6 +80270,7 @@ characters.data={
description="TWO LOGICAL AND OPERATOR",
direction="on",
linebreak="al",
+ synonyms={ "merge" },
unicodeslot=0x2A07,
},
[0x2A08]={
@@ -79528,6 +80308,17 @@ characters.data={
description="QUADRUPLE INTEGRAL OPERATOR",
direction="on",
linebreak="al",
+ mathclass="limop",
+ mathspec={
+ {
+ class="limop",
+ name="iiiint",
+ },
+ {
+ class="nothing",
+ name="iiiintop",
+ },
+ },
specials={ "compat", 0x222B, 0x222B, 0x222B, 0x222B },
unicodeslot=0x2A0C,
},
@@ -79564,6 +80355,7 @@ characters.data={
description="ANTICLOCKWISE INTEGRATION",
direction="on",
linebreak="al",
+ synonyms={ "counterclockwise integration" },
unicodeslot=0x2A11,
},
[0x2A12]={
@@ -79635,6 +80427,7 @@ characters.data={
description="INTEGRAL WITH OVERBAR",
direction="on",
linebreak="al",
+ synonyms={ "upper integral" },
unicodeslot=0x2A1B,
},
[0x2A1C]={
@@ -79642,6 +80435,7 @@ characters.data={
description="INTEGRAL WITH UNDERBAR",
direction="on",
linebreak="al",
+ synonyms={ "lower integral" },
unicodeslot=0x2A1C,
},
[0x2A1D]={
@@ -79649,6 +80443,7 @@ characters.data={
description="JOIN",
direction="on",
linebreak="al",
+ synonyms={ "large bowtie" },
unicodeslot=0x2A1D,
},
[0x2A1E]={
@@ -79698,6 +80493,7 @@ characters.data={
description="PLUS SIGN WITH TILDE ABOVE",
direction="on",
linebreak="al",
+ synonyms={ "positive difference or sum" },
unicodeslot=0x2A24,
},
[0x2A25]={
@@ -79712,6 +80508,7 @@ characters.data={
description="PLUS SIGN WITH TILDE BELOW",
direction="on",
linebreak="al",
+ synonyms={ "sum or positive difference" },
unicodeslot=0x2A26,
},
[0x2A27]={
@@ -79719,6 +80516,7 @@ characters.data={
description="PLUS SIGN WITH SUBSCRIPT TWO",
direction="on",
linebreak="al",
+ synonyms={ "nim-addition" },
unicodeslot=0x2A27,
},
[0x2A28]={
@@ -79917,6 +80715,7 @@ characters.data={
description="UNION WITH MINUS SIGN",
direction="on",
linebreak="al",
+ synonyms={ "bag subtraction" },
unicodeslot=0x2A41,
},
[0x2A42]={
@@ -80651,6 +81450,7 @@ characters.data={
direction="on",
linebreak="al",
mirror=0x2AA2,
+ synonyms={ "absolute continuity" },
unicodeslot=0x2AA1,
},
[0x2AA2]={
@@ -81144,6 +81944,7 @@ characters.data={
direction="on",
linebreak="al",
specials={ "char", 0x2ADD, 0x338 },
+ synonyms={ "not independent" },
unicodeslot=0x2ADC,
},
[0x2ADD]={
@@ -81151,6 +81952,7 @@ characters.data={
description="NONFORKING",
direction="on",
linebreak="al",
+ synonyms={ "independent" },
unicodeslot=0x2ADD,
},
[0x2ADE]={
@@ -81187,6 +81989,7 @@ characters.data={
description="VERTICAL BAR TRIPLE RIGHT TURNSTILE",
direction="on",
linebreak="al",
+ synonyms={ "ordinarily satisfies" },
unicodeslot=0x2AE2,
},
[0x2AE3]={
@@ -81253,6 +82056,7 @@ characters.data={
description="DOUBLE UP TACK",
direction="on",
linebreak="al",
+ synonyms={ "independence" },
unicodeslot=0x2AEB,
},
[0x2AEC]={
@@ -81297,6 +82101,7 @@ characters.data={
description="DOWN TACK WITH CIRCLE BELOW",
direction="on",
linebreak="al",
+ synonyms={ "necessarily satisfies" },
unicodeslot=0x2AF1,
},
[0x2AF2]={
@@ -81318,6 +82123,7 @@ characters.data={
description="TRIPLE VERTICAL BAR BINARY RELATION",
direction="on",
linebreak="al",
+ synonyms={ "interleave" },
unicodeslot=0x2AF4,
},
[0x2AF5]={
@@ -81392,6 +82198,7 @@ characters.data={
description="WHITE VERTICAL BAR",
direction="on",
linebreak="al",
+ synonyms={ "dijkstra choice" },
unicodeslot=0x2AFE,
},
[0x2AFF]={
@@ -81399,6 +82206,7 @@ characters.data={
description="N-ARY WHITE VERTICAL BAR",
direction="on",
linebreak="al",
+ synonyms={ "n-ary dijkstra choice" },
unicodeslot=0x2AFF,
},
[0x2B00]={
@@ -81442,10 +82250,7 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0x2B05,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2B06]={
category="so",
@@ -81453,10 +82258,7 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0x2B06,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2B07]={
category="so",
@@ -81464,10 +82266,7 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0x2B07,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2B08]={
category="so",
@@ -81604,25 +82403,21 @@ characters.data={
},
[0x2B1B]={
category="so",
+ cjkwd="w",
description="BLACK LARGE SQUARE",
direction="on",
linebreak="al",
unicodeslot=0x2B1B,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2B1C]={
category="so",
+ cjkwd="w",
description="WHITE LARGE SQUARE",
direction="on",
linebreak="al",
unicodeslot=0x2B1C,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2B1D]={
category="so",
@@ -81998,14 +82793,12 @@ characters.data={
},
[0x2B50]={
category="so",
+ cjkwd="w",
description="WHITE MEDIUM STAR",
direction="on",
linebreak="al",
unicodeslot=0x2B50,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2B51]={
category="so",
@@ -82037,15 +82830,12 @@ characters.data={
},
[0x2B55]={
category="so",
- cjkwd="a",
+ cjkwd="w",
description="HEAVY LARGE CIRCLE",
direction="on",
linebreak="ai",
unicodeslot=0x2B55,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x2B56]={
category="so",
@@ -82238,6 +83028,7 @@ characters.data={
description="LEFTWARDS TRIANGLE-HEADED ARROW TO BAR",
direction="on",
linebreak="al",
+ synonyms={ "left tab" },
unicodeslot=0x2B70,
},
[0x2B71]={
@@ -82245,6 +83036,7 @@ characters.data={
description="UPWARDS TRIANGLE-HEADED ARROW TO BAR",
direction="on",
linebreak="al",
+ synonyms={ "up tab" },
unicodeslot=0x2B71,
},
[0x2B72]={
@@ -82252,6 +83044,7 @@ characters.data={
description="RIGHTWARDS TRIANGLE-HEADED ARROW TO BAR",
direction="on",
linebreak="al",
+ synonyms={ "right tab" },
unicodeslot=0x2B72,
},
[0x2B73]={
@@ -82259,6 +83052,7 @@ characters.data={
description="DOWNWARDS TRIANGLE-HEADED ARROW TO BAR",
direction="on",
linebreak="al",
+ synonyms={ "down tab" },
unicodeslot=0x2B73,
},
[0x2B76]={
@@ -82315,6 +83109,7 @@ characters.data={
description="DOWNWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE",
direction="on",
linebreak="al",
+ synonyms={ "page down" },
unicodeslot=0x2B7D,
},
[0x2B7E]={
@@ -82721,6 +83516,7 @@ characters.data={
description="UP ARROWHEAD IN A RECTANGLE BOX",
direction="on",
linebreak="al",
+ synonyms={ "escape" },
unicodeslot=0x2BB9,
},
[0x2BBD]={
@@ -86585,6 +87381,7 @@ characters.data={
description="INVERTED INTERROBANG",
direction="on",
linebreak="op",
+ synonyms={ "gnaborretni" },
unicodeslot=0x2E18,
},
[0x2E19]={
@@ -86835,6 +87632,7 @@ characters.data={
description="TWO-EM DASH",
direction="on",
linebreak="b2",
+ synonyms={ "omission dash" },
unicodeslot=0x2E3A,
},
[0x2E3B]={
@@ -86893,6 +87691,20 @@ characters.data={
linebreak="op",
unicodeslot=0x2E42,
},
+ [0x2E43]={
+ category="po",
+ description="DASH WITH LEFT UPTURN",
+ direction="on",
+ linebreak="ba",
+ unicodeslot=0x2E43,
+ },
+ [0x2E44]={
+ category="po",
+ description="DOUBLE SUSPENSION MARK",
+ direction="on",
+ linebreak="ba",
+ unicodeslot=0x2E44,
+ },
[0x2E80]={
category="so",
cjkwd="w",
@@ -90096,6 +90908,7 @@ characters.data={
direction="on",
linebreak="op",
mirror=0x301B,
+ synonyms={ "left abstract syntax bracket" },
unicodeslot=0x301A,
},
[0x301B]={
@@ -90105,6 +90918,7 @@ characters.data={
direction="on",
linebreak="cl",
mirror=0x301A,
+ synonyms={ "right abstract syntax bracket" },
unicodeslot=0x301B,
},
[0x301C]={
@@ -90293,10 +91107,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x3030,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x3031]={
category="lm",
@@ -90406,10 +91217,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x303D,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x303E]={
category="so",
@@ -91491,6 +92299,7 @@ characters.data={
direction="nsm",
linebreak="cm",
sound="voiced",
+ synonyms={ "combining japanese daku-on" },
unicodeslot=0x3099,
},
[0x309A]={
@@ -91501,6 +92310,7 @@ characters.data={
direction="nsm",
linebreak="cm",
sound="semivoiced",
+ synonyms={ "combining japanese han-daku-on" },
unicodeslot=0x309A,
},
[0x309B]={
@@ -91512,6 +92322,7 @@ characters.data={
linebreak="ns",
sound="voiced",
specials={ "compat", 0x20, 0x3099 },
+ synonyms={ "japanese daku-on" },
unicodeslot=0x309B,
},
[0x309C]={
@@ -91523,6 +92334,7 @@ characters.data={
linebreak="ns",
sound="semivoiced",
specials={ "compat", 0x20, 0x309A },
+ synonyms={ "japanese han-daku-on" },
unicodeslot=0x309C,
},
[0x309D]={
@@ -96289,10 +97101,7 @@ characters.data={
linebreak="id",
specials={ "circle", 0x795D },
unicodeslot=0x3297,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x3298]={
adobename="ideographiclaborcircle",
@@ -96313,10 +97122,7 @@ characters.data={
linebreak="id",
specials={ "circle", 0x79D8 },
unicodeslot=0x3299,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x329A]={
category="so",
@@ -98419,6 +99225,7 @@ characters.data={
direction="l",
linebreak="id",
specials={ "square", 0x682A, 0x5F0F, 0x4F1A, 0x793E },
+ synonyms={ "japanese incorporated", "kabusiki-gaisya" },
unicodeslot=0x337F,
},
[0x3380]={
@@ -114831,6 +115638,13 @@ characters.data={
linebreak="al",
unicodeslot=0xA7AD,
},
+ [0xA7AE]={
+ category="lu",
+ description="LATIN CAPITAL LETTER SMALL CAPITAL I",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xA7AE,
+ },
[0xA7B0]={
category="lu",
description="LATIN CAPITAL LETTER TURNED K",
@@ -116277,6 +117091,13 @@ characters.data={
linebreak="cm",
unicodeslot=0xA8C4,
},
+ [0xA8C5]={
+ category="mn",
+ description="SAURASHTRA SIGN CANDRABINDU",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0xA8C5,
+ },
[0xA8CE]={
category="po",
description="SAURASHTRA DANDA",
@@ -118863,6 +119684,9 @@ characters.data={
direction="l",
linebreak="sa",
unicodeslot=0xAA60,
+ variants={
+ [0xFE00]="dotted form",
+ },
},
[0xAA61]={
category="lo",
@@ -118870,6 +119694,9 @@ characters.data={
direction="l",
linebreak="sa",
unicodeslot=0xAA61,
+ variants={
+ [0xFE00]="dotted form",
+ },
},
[0xAA62]={
category="lo",
@@ -118877,6 +119704,9 @@ characters.data={
direction="l",
linebreak="sa",
unicodeslot=0xAA62,
+ variants={
+ [0xFE00]="dotted form",
+ },
},
[0xAA63]={
category="lo",
@@ -118884,6 +119714,9 @@ characters.data={
direction="l",
linebreak="sa",
unicodeslot=0xAA63,
+ variants={
+ [0xFE00]="dotted form",
+ },
},
[0xAA64]={
category="lo",
@@ -118891,6 +119724,9 @@ characters.data={
direction="l",
linebreak="sa",
unicodeslot=0xAA64,
+ variants={
+ [0xFE00]="dotted form",
+ },
},
[0xAA65]={
category="lo",
@@ -118898,6 +119734,9 @@ characters.data={
direction="l",
linebreak="sa",
unicodeslot=0xAA65,
+ variants={
+ [0xFE00]="dotted form",
+ },
},
[0xAA66]={
category="lo",
@@ -118905,6 +119744,9 @@ characters.data={
direction="l",
linebreak="sa",
unicodeslot=0xAA66,
+ variants={
+ [0xFE00]="dotted form",
+ },
},
[0xAA67]={
category="lo",
@@ -118940,6 +119782,9 @@ characters.data={
direction="l",
linebreak="sa",
unicodeslot=0xAA6B,
+ variants={
+ [0xFE00]="dotted form",
+ },
},
[0xAA6C]={
category="lo",
@@ -118947,6 +119792,9 @@ characters.data={
direction="l",
linebreak="sa",
unicodeslot=0xAA6C,
+ variants={
+ [0xFE00]="dotted form",
+ },
},
[0xAA6D]={
category="lo",
@@ -118968,6 +119816,9 @@ characters.data={
direction="l",
linebreak="sa",
unicodeslot=0xAA6F,
+ variants={
+ [0xFE00]="dotted form",
+ },
},
[0xAA70]={
category="lm",
@@ -119045,6 +119896,9 @@ characters.data={
direction="l",
linebreak="sa",
unicodeslot=0xAA7A,
+ variants={
+ [0xFE00]="dotted form",
+ },
},
[0xAA7B]={
category="mc",
@@ -131580,6 +132434,7 @@ characters.data={
direction="al",
linebreak="po",
specials={ "isolated", 0x631, 0x6CC, 0x627, 0x644 },
+ synonyms={ "iranian currency" },
unicodeslot=0xFDFC,
},
[0xFDFD]={
@@ -131589,6 +132444,11 @@ characters.data={
linebreak="al",
unicodeslot=0xFDFD,
},
+ [0xFE00]={
+ description="VARIATION SELECTOR-0x0001",
+ synonyms={ "vs1" },
+ unicodeslot=0xFE00,
+ },
[0xFE10]={
category="po",
cjkwd="w",
@@ -133623,6 +134483,7 @@ characters.data={
description="ZERO WIDTH NO-BREAK SPACE",
direction="bn",
linebreak="wj",
+ synonyms={ "bom", "byte order mark", "zwnbsp" },
unicodeslot=0xFEFF,
},
[0xFF01]={
@@ -134715,7 +135576,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER WO",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x3092,
specials={ "narrow", 0x30F2 },
unicodeslot=0xFF66,
@@ -134830,7 +135691,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER A",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x3042,
specials={ "narrow", 0x30A2 },
unicodeslot=0xFF71,
@@ -134841,7 +135702,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER I",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x3044,
specials={ "narrow", 0x30A4 },
unicodeslot=0xFF72,
@@ -134852,7 +135713,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER U",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x3046,
specials={ "narrow", 0x30A6 },
unicodeslot=0xFF73,
@@ -134863,7 +135724,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER E",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x3048,
specials={ "narrow", 0x30A8 },
unicodeslot=0xFF74,
@@ -134874,7 +135735,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER O",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x304A,
specials={ "narrow", 0x30AA },
unicodeslot=0xFF75,
@@ -134885,7 +135746,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER KA",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x304B,
specials={ "narrow", 0x30AB },
unicodeslot=0xFF76,
@@ -134896,7 +135757,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER KI",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x304D,
specials={ "narrow", 0x30AD },
unicodeslot=0xFF77,
@@ -134907,7 +135768,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER KU",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x304F,
specials={ "narrow", 0x30AF },
unicodeslot=0xFF78,
@@ -134918,7 +135779,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER KE",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x3051,
specials={ "narrow", 0x30B1 },
unicodeslot=0xFF79,
@@ -134929,7 +135790,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER KO",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x3053,
specials={ "narrow", 0x30B3 },
unicodeslot=0xFF7A,
@@ -134940,7 +135801,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER SA",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x3055,
specials={ "narrow", 0x30B5 },
unicodeslot=0xFF7B,
@@ -134951,7 +135812,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER SI",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x3057,
specials={ "narrow", 0x30B7 },
unicodeslot=0xFF7C,
@@ -134962,7 +135823,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER SU",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x3059,
specials={ "narrow", 0x30B9 },
unicodeslot=0xFF7D,
@@ -134973,7 +135834,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER SE",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x305B,
specials={ "narrow", 0x30BB },
unicodeslot=0xFF7E,
@@ -134984,7 +135845,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER SO",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x305D,
specials={ "narrow", 0x30BD },
unicodeslot=0xFF7F,
@@ -134995,7 +135856,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER TA",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x305F,
specials={ "narrow", 0x30BF },
unicodeslot=0xFF80,
@@ -135006,7 +135867,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER TI",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x3061,
specials={ "narrow", 0x30C1 },
unicodeslot=0xFF81,
@@ -135017,7 +135878,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER TU",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x3064,
specials={ "narrow", 0x30C4 },
unicodeslot=0xFF82,
@@ -135028,7 +135889,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER TE",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x3066,
specials={ "narrow", 0x30C6 },
unicodeslot=0xFF83,
@@ -135039,7 +135900,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER TO",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x3068,
specials={ "narrow", 0x30C8 },
unicodeslot=0xFF84,
@@ -135050,7 +135911,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER NA",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x306A,
specials={ "narrow", 0x30CA },
unicodeslot=0xFF85,
@@ -135061,7 +135922,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER NI",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x306B,
specials={ "narrow", 0x30CB },
unicodeslot=0xFF86,
@@ -135072,7 +135933,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER NU",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x306C,
specials={ "narrow", 0x30CC },
unicodeslot=0xFF87,
@@ -135083,7 +135944,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER NE",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x306D,
specials={ "narrow", 0x30CD },
unicodeslot=0xFF88,
@@ -135094,7 +135955,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER NO",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x306E,
specials={ "narrow", 0x30CE },
unicodeslot=0xFF89,
@@ -135105,7 +135966,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER HA",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x306F,
specials={ "narrow", 0x30CF },
unicodeslot=0xFF8A,
@@ -135116,7 +135977,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER HI",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x3072,
specials={ "narrow", 0x30D2 },
unicodeslot=0xFF8B,
@@ -135127,7 +135988,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER HU",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x3075,
specials={ "narrow", 0x30D5 },
unicodeslot=0xFF8C,
@@ -135138,7 +135999,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER HE",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x3078,
specials={ "narrow", 0x30D8 },
unicodeslot=0xFF8D,
@@ -135149,7 +136010,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER HO",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x307B,
specials={ "narrow", 0x30DB },
unicodeslot=0xFF8E,
@@ -135160,7 +136021,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER MA",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x307E,
specials={ "narrow", 0x30DE },
unicodeslot=0xFF8F,
@@ -135171,7 +136032,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER MI",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x307F,
specials={ "narrow", 0x30DF },
unicodeslot=0xFF90,
@@ -135182,7 +136043,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER MU",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x3080,
specials={ "narrow", 0x30E0 },
unicodeslot=0xFF91,
@@ -135193,7 +136054,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER ME",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x3081,
specials={ "narrow", 0x30E1 },
unicodeslot=0xFF92,
@@ -135204,7 +136065,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER MO",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x3082,
specials={ "narrow", 0x30E2 },
unicodeslot=0xFF93,
@@ -135215,7 +136076,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER YA",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x3084,
specials={ "narrow", 0x30E4 },
unicodeslot=0xFF94,
@@ -135226,7 +136087,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER YU",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x3086,
specials={ "narrow", 0x30E6 },
unicodeslot=0xFF95,
@@ -135237,7 +136098,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER YO",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x3088,
specials={ "narrow", 0x30E8 },
unicodeslot=0xFF96,
@@ -135248,7 +136109,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER RA",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x3089,
specials={ "narrow", 0x30E9 },
unicodeslot=0xFF97,
@@ -135259,7 +136120,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER RI",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x308A,
specials={ "narrow", 0x30EA },
unicodeslot=0xFF98,
@@ -135270,7 +136131,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER RU",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x308B,
specials={ "narrow", 0x30EB },
unicodeslot=0xFF99,
@@ -135281,7 +136142,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER RE",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x308C,
specials={ "narrow", 0x30EC },
unicodeslot=0xFF9A,
@@ -135292,7 +136153,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER RO",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x308D,
specials={ "narrow", 0x30ED },
unicodeslot=0xFF9B,
@@ -135303,7 +136164,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER WA",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x308F,
specials={ "narrow", 0x30EF },
unicodeslot=0xFF9C,
@@ -135314,7 +136175,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH KATAKANA LETTER N",
direction="l",
- linebreak="al",
+ linebreak="id",
shcode=0x3093,
specials={ "narrow", 0x30F3 },
unicodeslot=0xFF9D,
@@ -135344,7 +136205,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL FILLER",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x3164 },
unicodeslot=0xFFA0,
},
@@ -135353,7 +136214,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER KIYEOK",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x3131 },
unicodeslot=0xFFA1,
},
@@ -135362,7 +136223,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER SSANGKIYEOK",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x3132 },
unicodeslot=0xFFA2,
},
@@ -135371,7 +136232,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER KIYEOK-SIOS",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x3133 },
unicodeslot=0xFFA3,
},
@@ -135380,7 +136241,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER NIEUN",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x3134 },
unicodeslot=0xFFA4,
},
@@ -135389,7 +136250,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER NIEUN-CIEUC",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x3135 },
unicodeslot=0xFFA5,
},
@@ -135398,7 +136259,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER NIEUN-HIEUH",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x3136 },
unicodeslot=0xFFA6,
},
@@ -135407,7 +136268,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER TIKEUT",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x3137 },
unicodeslot=0xFFA7,
},
@@ -135416,7 +136277,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER SSANGTIKEUT",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x3138 },
unicodeslot=0xFFA8,
},
@@ -135425,7 +136286,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER RIEUL",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x3139 },
unicodeslot=0xFFA9,
},
@@ -135434,7 +136295,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER RIEUL-KIYEOK",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x313A },
unicodeslot=0xFFAA,
},
@@ -135443,7 +136304,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER RIEUL-MIEUM",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x313B },
unicodeslot=0xFFAB,
},
@@ -135452,7 +136313,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER RIEUL-PIEUP",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x313C },
unicodeslot=0xFFAC,
},
@@ -135461,7 +136322,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER RIEUL-SIOS",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x313D },
unicodeslot=0xFFAD,
},
@@ -135470,7 +136331,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER RIEUL-THIEUTH",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x313E },
unicodeslot=0xFFAE,
},
@@ -135479,7 +136340,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x313F },
unicodeslot=0xFFAF,
},
@@ -135488,7 +136349,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER RIEUL-HIEUH",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x3140 },
unicodeslot=0xFFB0,
},
@@ -135497,7 +136358,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER MIEUM",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x3141 },
unicodeslot=0xFFB1,
},
@@ -135506,7 +136367,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER PIEUP",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x3142 },
unicodeslot=0xFFB2,
},
@@ -135515,7 +136376,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER SSANGPIEUP",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x3143 },
unicodeslot=0xFFB3,
},
@@ -135524,7 +136385,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER PIEUP-SIOS",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x3144 },
unicodeslot=0xFFB4,
},
@@ -135533,7 +136394,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER SIOS",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x3145 },
unicodeslot=0xFFB5,
},
@@ -135542,7 +136403,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER SSANGSIOS",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x3146 },
unicodeslot=0xFFB6,
},
@@ -135551,7 +136412,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER IEUNG",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x3147 },
unicodeslot=0xFFB7,
},
@@ -135560,7 +136421,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER CIEUC",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x3148 },
unicodeslot=0xFFB8,
},
@@ -135569,7 +136430,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER SSANGCIEUC",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x3149 },
unicodeslot=0xFFB9,
},
@@ -135578,7 +136439,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER CHIEUCH",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x314A },
unicodeslot=0xFFBA,
},
@@ -135587,7 +136448,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER KHIEUKH",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x314B },
unicodeslot=0xFFBB,
},
@@ -135596,7 +136457,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER THIEUTH",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x314C },
unicodeslot=0xFFBC,
},
@@ -135605,7 +136466,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER PHIEUPH",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x314D },
unicodeslot=0xFFBD,
},
@@ -135614,7 +136475,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER HIEUH",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x314E },
unicodeslot=0xFFBE,
},
@@ -135623,7 +136484,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER A",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x314F },
unicodeslot=0xFFC2,
},
@@ -135632,7 +136493,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER AE",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x3150 },
unicodeslot=0xFFC3,
},
@@ -135641,7 +136502,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER YA",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x3151 },
unicodeslot=0xFFC4,
},
@@ -135650,7 +136511,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER YAE",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x3152 },
unicodeslot=0xFFC5,
},
@@ -135659,7 +136520,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER EO",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x3153 },
unicodeslot=0xFFC6,
},
@@ -135668,7 +136529,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER E",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x3154 },
unicodeslot=0xFFC7,
},
@@ -135677,7 +136538,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER YEO",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x3155 },
unicodeslot=0xFFCA,
},
@@ -135686,7 +136547,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER YE",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x3156 },
unicodeslot=0xFFCB,
},
@@ -135695,7 +136556,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER O",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x3157 },
unicodeslot=0xFFCC,
},
@@ -135704,7 +136565,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER WA",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x3158 },
unicodeslot=0xFFCD,
},
@@ -135713,7 +136574,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER WAE",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x3159 },
unicodeslot=0xFFCE,
},
@@ -135722,7 +136583,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER OE",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x315A },
unicodeslot=0xFFCF,
},
@@ -135731,7 +136592,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER YO",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x315B },
unicodeslot=0xFFD2,
},
@@ -135740,7 +136601,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER U",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x315C },
unicodeslot=0xFFD3,
},
@@ -135749,7 +136610,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER WEO",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x315D },
unicodeslot=0xFFD4,
},
@@ -135758,7 +136619,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER WE",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x315E },
unicodeslot=0xFFD5,
},
@@ -135767,7 +136628,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER WI",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x315F },
unicodeslot=0xFFD6,
},
@@ -135776,7 +136637,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER YU",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x3160 },
unicodeslot=0xFFD7,
},
@@ -135785,7 +136646,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER EU",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x3161 },
unicodeslot=0xFFDA,
},
@@ -135794,7 +136655,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER YI",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x3162 },
unicodeslot=0xFFDB,
},
@@ -135803,7 +136664,7 @@ characters.data={
cjkwd="h",
description="HALFWIDTH HANGUL LETTER I",
direction="l",
- linebreak="al",
+ linebreak="id",
specials={ "narrow", 0x3163 },
unicodeslot=0xFFDC,
},
@@ -138392,6 +139253,20 @@ characters.data={
linebreak="al",
unicodeslot=0x1018C,
},
+ [0x1018D]={
+ category="so",
+ description="GREEK INDICTION SIGN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1018D,
+ },
+ [0x1018E]={
+ category="so",
+ description="NOMISMA SIGN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1018E,
+ },
[0x10190]={
category="so",
description="ROMAN SEXTANS SIGN",
@@ -142119,6 +142994,510 @@ characters.data={
linebreak="nu",
unicodeslot=0x104A9,
},
+ [0x104B0]={
+ category="lu",
+ description="OSAGE CAPITAL LETTER A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104B0,
+ },
+ [0x104B1]={
+ category="lu",
+ description="OSAGE CAPITAL LETTER AI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104B1,
+ },
+ [0x104B2]={
+ category="lu",
+ description="OSAGE CAPITAL LETTER AIN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104B2,
+ },
+ [0x104B3]={
+ category="lu",
+ description="OSAGE CAPITAL LETTER AH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104B3,
+ },
+ [0x104B4]={
+ category="lu",
+ description="OSAGE CAPITAL LETTER BRA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104B4,
+ },
+ [0x104B5]={
+ category="lu",
+ description="OSAGE CAPITAL LETTER CHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104B5,
+ },
+ [0x104B6]={
+ category="lu",
+ description="OSAGE CAPITAL LETTER EHCHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104B6,
+ },
+ [0x104B7]={
+ category="lu",
+ description="OSAGE CAPITAL LETTER E",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104B7,
+ },
+ [0x104B8]={
+ category="lu",
+ description="OSAGE CAPITAL LETTER EIN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104B8,
+ },
+ [0x104B9]={
+ category="lu",
+ description="OSAGE CAPITAL LETTER HA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104B9,
+ },
+ [0x104BA]={
+ category="lu",
+ description="OSAGE CAPITAL LETTER HYA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104BA,
+ },
+ [0x104BB]={
+ category="lu",
+ description="OSAGE CAPITAL LETTER I",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104BB,
+ },
+ [0x104BC]={
+ category="lu",
+ description="OSAGE CAPITAL LETTER KA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104BC,
+ },
+ [0x104BD]={
+ category="lu",
+ description="OSAGE CAPITAL LETTER EHKA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104BD,
+ },
+ [0x104BE]={
+ category="lu",
+ description="OSAGE CAPITAL LETTER KYA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104BE,
+ },
+ [0x104BF]={
+ category="lu",
+ description="OSAGE CAPITAL LETTER LA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104BF,
+ },
+ [0x104C0]={
+ category="lu",
+ description="OSAGE CAPITAL LETTER MA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104C0,
+ },
+ [0x104C1]={
+ category="lu",
+ description="OSAGE CAPITAL LETTER NA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104C1,
+ },
+ [0x104C2]={
+ category="lu",
+ description="OSAGE CAPITAL LETTER O",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104C2,
+ },
+ [0x104C3]={
+ category="lu",
+ description="OSAGE CAPITAL LETTER OIN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104C3,
+ },
+ [0x104C4]={
+ category="lu",
+ description="OSAGE CAPITAL LETTER PA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104C4,
+ },
+ [0x104C5]={
+ category="lu",
+ description="OSAGE CAPITAL LETTER EHPA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104C5,
+ },
+ [0x104C6]={
+ category="lu",
+ description="OSAGE CAPITAL LETTER SA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104C6,
+ },
+ [0x104C7]={
+ category="lu",
+ description="OSAGE CAPITAL LETTER SHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104C7,
+ },
+ [0x104C8]={
+ category="lu",
+ description="OSAGE CAPITAL LETTER TA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104C8,
+ },
+ [0x104C9]={
+ category="lu",
+ description="OSAGE CAPITAL LETTER EHTA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104C9,
+ },
+ [0x104CA]={
+ category="lu",
+ description="OSAGE CAPITAL LETTER TSA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104CA,
+ },
+ [0x104CB]={
+ category="lu",
+ description="OSAGE CAPITAL LETTER EHTSA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104CB,
+ },
+ [0x104CC]={
+ category="lu",
+ description="OSAGE CAPITAL LETTER TSHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104CC,
+ },
+ [0x104CD]={
+ category="lu",
+ description="OSAGE CAPITAL LETTER DHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104CD,
+ },
+ [0x104CE]={
+ category="lu",
+ description="OSAGE CAPITAL LETTER U",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104CE,
+ },
+ [0x104CF]={
+ category="lu",
+ description="OSAGE CAPITAL LETTER WA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104CF,
+ },
+ [0x104D0]={
+ category="lu",
+ description="OSAGE CAPITAL LETTER KHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104D0,
+ },
+ [0x104D1]={
+ category="lu",
+ description="OSAGE CAPITAL LETTER GHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104D1,
+ },
+ [0x104D2]={
+ category="lu",
+ description="OSAGE CAPITAL LETTER ZA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104D2,
+ },
+ [0x104D3]={
+ category="lu",
+ description="OSAGE CAPITAL LETTER ZHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104D3,
+ },
+ [0x104D8]={
+ category="ll",
+ description="OSAGE SMALL LETTER A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104D8,
+ },
+ [0x104D9]={
+ category="ll",
+ description="OSAGE SMALL LETTER AI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104D9,
+ },
+ [0x104DA]={
+ category="ll",
+ description="OSAGE SMALL LETTER AIN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104DA,
+ },
+ [0x104DB]={
+ category="ll",
+ description="OSAGE SMALL LETTER AH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104DB,
+ },
+ [0x104DC]={
+ category="ll",
+ description="OSAGE SMALL LETTER BRA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104DC,
+ },
+ [0x104DD]={
+ category="ll",
+ description="OSAGE SMALL LETTER CHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104DD,
+ },
+ [0x104DE]={
+ category="ll",
+ description="OSAGE SMALL LETTER EHCHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104DE,
+ },
+ [0x104DF]={
+ category="ll",
+ description="OSAGE SMALL LETTER E",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104DF,
+ },
+ [0x104E0]={
+ category="ll",
+ description="OSAGE SMALL LETTER EIN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104E0,
+ },
+ [0x104E1]={
+ category="ll",
+ description="OSAGE SMALL LETTER HA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104E1,
+ },
+ [0x104E2]={
+ category="ll",
+ description="OSAGE SMALL LETTER HYA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104E2,
+ },
+ [0x104E3]={
+ category="ll",
+ description="OSAGE SMALL LETTER I",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104E3,
+ },
+ [0x104E4]={
+ category="ll",
+ description="OSAGE SMALL LETTER KA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104E4,
+ },
+ [0x104E5]={
+ category="ll",
+ description="OSAGE SMALL LETTER EHKA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104E5,
+ },
+ [0x104E6]={
+ category="ll",
+ description="OSAGE SMALL LETTER KYA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104E6,
+ },
+ [0x104E7]={
+ category="ll",
+ description="OSAGE SMALL LETTER LA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104E7,
+ },
+ [0x104E8]={
+ category="ll",
+ description="OSAGE SMALL LETTER MA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104E8,
+ },
+ [0x104E9]={
+ category="ll",
+ description="OSAGE SMALL LETTER NA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104E9,
+ },
+ [0x104EA]={
+ category="ll",
+ description="OSAGE SMALL LETTER O",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104EA,
+ },
+ [0x104EB]={
+ category="ll",
+ description="OSAGE SMALL LETTER OIN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104EB,
+ },
+ [0x104EC]={
+ category="ll",
+ description="OSAGE SMALL LETTER PA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104EC,
+ },
+ [0x104ED]={
+ category="ll",
+ description="OSAGE SMALL LETTER EHPA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104ED,
+ },
+ [0x104EE]={
+ category="ll",
+ description="OSAGE SMALL LETTER SA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104EE,
+ },
+ [0x104EF]={
+ category="ll",
+ description="OSAGE SMALL LETTER SHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104EF,
+ },
+ [0x104F0]={
+ category="ll",
+ description="OSAGE SMALL LETTER TA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104F0,
+ },
+ [0x104F1]={
+ category="ll",
+ description="OSAGE SMALL LETTER EHTA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104F1,
+ },
+ [0x104F2]={
+ category="ll",
+ description="OSAGE SMALL LETTER TSA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104F2,
+ },
+ [0x104F3]={
+ category="ll",
+ description="OSAGE SMALL LETTER EHTSA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104F3,
+ },
+ [0x104F4]={
+ category="ll",
+ description="OSAGE SMALL LETTER TSHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104F4,
+ },
+ [0x104F5]={
+ category="ll",
+ description="OSAGE SMALL LETTER DHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104F5,
+ },
+ [0x104F6]={
+ category="ll",
+ description="OSAGE SMALL LETTER U",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104F6,
+ },
+ [0x104F7]={
+ category="ll",
+ description="OSAGE SMALL LETTER WA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104F7,
+ },
+ [0x104F8]={
+ category="ll",
+ description="OSAGE SMALL LETTER KHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104F8,
+ },
+ [0x104F9]={
+ category="ll",
+ description="OSAGE SMALL LETTER GHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104F9,
+ },
+ [0x104FA]={
+ category="ll",
+ description="OSAGE SMALL LETTER ZA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104FA,
+ },
+ [0x104FB]={
+ category="ll",
+ description="OSAGE SMALL LETTER ZHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x104FB,
+ },
[0x10500]={
category="lo",
description="ELBASAN LETTER A",
@@ -155010,6 +156389,13 @@ characters.data={
linebreak="al",
unicodeslot=0x1123D,
},
+ [0x1123E]={
+ category="mn",
+ description="KHOJKI SIGN SUKUN",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1123E,
+ },
[0x11280]={
category="lo",
description="MULTANI LETTER A",
@@ -156372,6 +157758,652 @@ characters.data={
linebreak="cm",
unicodeslot=0x11374,
},
+ [0x11400]={
+ category="lo",
+ description="NEWA LETTER A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11400,
+ },
+ [0x11401]={
+ category="lo",
+ description="NEWA LETTER AA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11401,
+ },
+ [0x11402]={
+ category="lo",
+ description="NEWA LETTER I",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11402,
+ },
+ [0x11403]={
+ category="lo",
+ description="NEWA LETTER II",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11403,
+ },
+ [0x11404]={
+ category="lo",
+ description="NEWA LETTER U",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11404,
+ },
+ [0x11405]={
+ category="lo",
+ description="NEWA LETTER UU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11405,
+ },
+ [0x11406]={
+ category="lo",
+ description="NEWA LETTER VOCALIC R",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11406,
+ },
+ [0x11407]={
+ category="lo",
+ description="NEWA LETTER VOCALIC RR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11407,
+ },
+ [0x11408]={
+ category="lo",
+ description="NEWA LETTER VOCALIC L",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11408,
+ },
+ [0x11409]={
+ category="lo",
+ description="NEWA LETTER VOCALIC LL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11409,
+ },
+ [0x1140A]={
+ category="lo",
+ description="NEWA LETTER E",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1140A,
+ },
+ [0x1140B]={
+ category="lo",
+ description="NEWA LETTER AI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1140B,
+ },
+ [0x1140C]={
+ category="lo",
+ description="NEWA LETTER O",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1140C,
+ },
+ [0x1140D]={
+ category="lo",
+ description="NEWA LETTER AU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1140D,
+ },
+ [0x1140E]={
+ category="lo",
+ description="NEWA LETTER KA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1140E,
+ },
+ [0x1140F]={
+ category="lo",
+ description="NEWA LETTER KHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1140F,
+ },
+ [0x11410]={
+ category="lo",
+ description="NEWA LETTER GA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11410,
+ },
+ [0x11411]={
+ category="lo",
+ description="NEWA LETTER GHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11411,
+ },
+ [0x11412]={
+ category="lo",
+ description="NEWA LETTER NGA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11412,
+ },
+ [0x11413]={
+ category="lo",
+ description="NEWA LETTER NGHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11413,
+ },
+ [0x11414]={
+ category="lo",
+ description="NEWA LETTER CA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11414,
+ },
+ [0x11415]={
+ category="lo",
+ description="NEWA LETTER CHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11415,
+ },
+ [0x11416]={
+ category="lo",
+ description="NEWA LETTER JA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11416,
+ },
+ [0x11417]={
+ category="lo",
+ description="NEWA LETTER JHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11417,
+ },
+ [0x11418]={
+ category="lo",
+ description="NEWA LETTER NYA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11418,
+ },
+ [0x11419]={
+ category="lo",
+ description="NEWA LETTER NYHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11419,
+ },
+ [0x1141A]={
+ category="lo",
+ description="NEWA LETTER TTA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1141A,
+ },
+ [0x1141B]={
+ category="lo",
+ description="NEWA LETTER TTHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1141B,
+ },
+ [0x1141C]={
+ category="lo",
+ description="NEWA LETTER DDA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1141C,
+ },
+ [0x1141D]={
+ category="lo",
+ description="NEWA LETTER DDHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1141D,
+ },
+ [0x1141E]={
+ category="lo",
+ description="NEWA LETTER NNA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1141E,
+ },
+ [0x1141F]={
+ category="lo",
+ description="NEWA LETTER TA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1141F,
+ },
+ [0x11420]={
+ category="lo",
+ description="NEWA LETTER THA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11420,
+ },
+ [0x11421]={
+ category="lo",
+ description="NEWA LETTER DA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11421,
+ },
+ [0x11422]={
+ category="lo",
+ description="NEWA LETTER DHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11422,
+ },
+ [0x11423]={
+ category="lo",
+ description="NEWA LETTER NA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11423,
+ },
+ [0x11424]={
+ category="lo",
+ description="NEWA LETTER NHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11424,
+ },
+ [0x11425]={
+ category="lo",
+ description="NEWA LETTER PA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11425,
+ },
+ [0x11426]={
+ category="lo",
+ description="NEWA LETTER PHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11426,
+ },
+ [0x11427]={
+ category="lo",
+ description="NEWA LETTER BA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11427,
+ },
+ [0x11428]={
+ category="lo",
+ description="NEWA LETTER BHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11428,
+ },
+ [0x11429]={
+ category="lo",
+ description="NEWA LETTER MA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11429,
+ },
+ [0x1142A]={
+ category="lo",
+ description="NEWA LETTER MHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1142A,
+ },
+ [0x1142B]={
+ category="lo",
+ description="NEWA LETTER YA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1142B,
+ },
+ [0x1142C]={
+ category="lo",
+ description="NEWA LETTER RA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1142C,
+ },
+ [0x1142D]={
+ category="lo",
+ description="NEWA LETTER RHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1142D,
+ },
+ [0x1142E]={
+ category="lo",
+ description="NEWA LETTER LA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1142E,
+ },
+ [0x1142F]={
+ category="lo",
+ description="NEWA LETTER LHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1142F,
+ },
+ [0x11430]={
+ category="lo",
+ description="NEWA LETTER WA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11430,
+ },
+ [0x11431]={
+ category="lo",
+ description="NEWA LETTER SHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11431,
+ },
+ [0x11432]={
+ category="lo",
+ description="NEWA LETTER SSA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11432,
+ },
+ [0x11433]={
+ category="lo",
+ description="NEWA LETTER SA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11433,
+ },
+ [0x11434]={
+ category="lo",
+ description="NEWA LETTER HA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11434,
+ },
+ [0x11435]={
+ category="mc",
+ description="NEWA VOWEL SIGN AA",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x11435,
+ },
+ [0x11436]={
+ category="mc",
+ description="NEWA VOWEL SIGN I",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x11436,
+ },
+ [0x11437]={
+ category="mc",
+ description="NEWA VOWEL SIGN II",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x11437,
+ },
+ [0x11438]={
+ category="mn",
+ description="NEWA VOWEL SIGN U",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11438,
+ },
+ [0x11439]={
+ category="mn",
+ description="NEWA VOWEL SIGN UU",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11439,
+ },
+ [0x1143A]={
+ category="mn",
+ description="NEWA VOWEL SIGN VOCALIC R",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1143A,
+ },
+ [0x1143B]={
+ category="mn",
+ description="NEWA VOWEL SIGN VOCALIC RR",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1143B,
+ },
+ [0x1143C]={
+ category="mn",
+ description="NEWA VOWEL SIGN VOCALIC L",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1143C,
+ },
+ [0x1143D]={
+ category="mn",
+ description="NEWA VOWEL SIGN VOCALIC LL",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1143D,
+ },
+ [0x1143E]={
+ category="mn",
+ description="NEWA VOWEL SIGN E",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1143E,
+ },
+ [0x1143F]={
+ category="mn",
+ description="NEWA VOWEL SIGN AI",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1143F,
+ },
+ [0x11440]={
+ category="mc",
+ description="NEWA VOWEL SIGN O",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x11440,
+ },
+ [0x11441]={
+ category="mc",
+ description="NEWA VOWEL SIGN AU",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x11441,
+ },
+ [0x11442]={
+ category="mn",
+ combining=0x9,
+ description="NEWA SIGN VIRAMA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11442,
+ },
+ [0x11443]={
+ category="mn",
+ description="NEWA SIGN CANDRABINDU",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11443,
+ },
+ [0x11444]={
+ category="mn",
+ description="NEWA SIGN ANUSVARA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11444,
+ },
+ [0x11445]={
+ category="mc",
+ description="NEWA SIGN VISARGA",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x11445,
+ },
+ [0x11446]={
+ category="mn",
+ combining=0x7,
+ description="NEWA SIGN NUKTA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11446,
+ },
+ [0x11447]={
+ category="lo",
+ description="NEWA SIGN AVAGRAHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11447,
+ },
+ [0x11448]={
+ category="lo",
+ description="NEWA SIGN FINAL ANUSVARA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11448,
+ },
+ [0x11449]={
+ category="lo",
+ description="NEWA OM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11449,
+ },
+ [0x1144A]={
+ category="lo",
+ description="NEWA SIDDHI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1144A,
+ },
+ [0x1144B]={
+ category="po",
+ description="NEWA DANDA",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x1144B,
+ },
+ [0x1144C]={
+ category="po",
+ description="NEWA DOUBLE DANDA",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x1144C,
+ },
+ [0x1144D]={
+ category="po",
+ description="NEWA COMMA",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x1144D,
+ },
+ [0x1144E]={
+ category="po",
+ description="NEWA GAP FILLER",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x1144E,
+ },
+ [0x1144F]={
+ category="po",
+ description="NEWA ABBREVIATION SIGN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1144F,
+ },
+ [0x11450]={
+ category="nd",
+ description="NEWA DIGIT ZERO",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11450,
+ },
+ [0x11451]={
+ category="nd",
+ description="NEWA DIGIT ONE",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11451,
+ },
+ [0x11452]={
+ category="nd",
+ description="NEWA DIGIT TWO",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11452,
+ },
+ [0x11453]={
+ category="nd",
+ description="NEWA DIGIT THREE",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11453,
+ },
+ [0x11454]={
+ category="nd",
+ description="NEWA DIGIT FOUR",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11454,
+ },
+ [0x11455]={
+ category="nd",
+ description="NEWA DIGIT FIVE",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11455,
+ },
+ [0x11456]={
+ category="nd",
+ description="NEWA DIGIT SIX",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11456,
+ },
+ [0x11457]={
+ category="nd",
+ description="NEWA DIGIT SEVEN",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11457,
+ },
+ [0x11458]={
+ category="nd",
+ description="NEWA DIGIT EIGHT",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11458,
+ },
+ [0x11459]={
+ category="nd",
+ description="NEWA DIGIT NINE",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11459,
+ },
+ [0x1145B]={
+ category="po",
+ description="NEWA PLACEHOLDER MARK",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x1145B,
+ },
+ [0x1145D]={
+ category="po",
+ description="NEWA INSERTION SIGN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1145D,
+ },
[0x11480]={
category="lo",
description="TIRHUTA ANJI",
@@ -158153,6 +160185,97 @@ characters.data={
linebreak="nu",
unicodeslot=0x11659,
},
+ [0x11660]={
+ category="po",
+ description="MONGOLIAN BIRGA WITH ORNAMENT",
+ direction="on",
+ linebreak="bb",
+ unicodeslot=0x11660,
+ },
+ [0x11661]={
+ category="po",
+ description="MONGOLIAN ROTATED BIRGA",
+ direction="on",
+ linebreak="bb",
+ unicodeslot=0x11661,
+ },
+ [0x11662]={
+ category="po",
+ description="MONGOLIAN DOUBLE BIRGA WITH ORNAMENT",
+ direction="on",
+ linebreak="bb",
+ unicodeslot=0x11662,
+ },
+ [0x11663]={
+ category="po",
+ description="MONGOLIAN TRIPLE BIRGA WITH ORNAMENT",
+ direction="on",
+ linebreak="bb",
+ unicodeslot=0x11663,
+ },
+ [0x11664]={
+ category="po",
+ description="MONGOLIAN BIRGA WITH DOUBLE ORNAMENT",
+ direction="on",
+ linebreak="bb",
+ unicodeslot=0x11664,
+ },
+ [0x11665]={
+ category="po",
+ description="MONGOLIAN ROTATED BIRGA WITH ORNAMENT",
+ direction="on",
+ linebreak="bb",
+ unicodeslot=0x11665,
+ },
+ [0x11666]={
+ category="po",
+ description="MONGOLIAN ROTATED BIRGA WITH DOUBLE ORNAMENT",
+ direction="on",
+ linebreak="bb",
+ unicodeslot=0x11666,
+ },
+ [0x11667]={
+ category="po",
+ description="MONGOLIAN INVERTED BIRGA",
+ direction="on",
+ linebreak="bb",
+ unicodeslot=0x11667,
+ },
+ [0x11668]={
+ category="po",
+ description="MONGOLIAN INVERTED BIRGA WITH DOUBLE ORNAMENT",
+ direction="on",
+ linebreak="bb",
+ unicodeslot=0x11668,
+ },
+ [0x11669]={
+ category="po",
+ description="MONGOLIAN SWIRL BIRGA",
+ direction="on",
+ linebreak="bb",
+ unicodeslot=0x11669,
+ },
+ [0x1166A]={
+ category="po",
+ description="MONGOLIAN SWIRL BIRGA WITH ORNAMENT",
+ direction="on",
+ linebreak="bb",
+ unicodeslot=0x1166A,
+ },
+ [0x1166B]={
+ category="po",
+ description="MONGOLIAN SWIRL BIRGA WITH DOUBLE ORNAMENT",
+ direction="on",
+ linebreak="bb",
+ unicodeslot=0x1166B,
+ },
+ [0x1166C]={
+ category="po",
+ description="MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT",
+ direction="on",
+ linebreak="bb",
+ unicodeslot=0x1166C,
+ },
[0x11680]={
category="lo",
description="TAKRI LETTER A",
@@ -160004,6 +162127,1162 @@ characters.data={
linebreak="al",
unicodeslot=0x11AF8,
},
+ [0x11C00]={
+ category="lo",
+ description="BHAIKSUKI LETTER A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C00,
+ },
+ [0x11C01]={
+ category="lo",
+ description="BHAIKSUKI LETTER AA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C01,
+ },
+ [0x11C02]={
+ category="lo",
+ description="BHAIKSUKI LETTER I",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C02,
+ },
+ [0x11C03]={
+ category="lo",
+ description="BHAIKSUKI LETTER II",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C03,
+ },
+ [0x11C04]={
+ category="lo",
+ description="BHAIKSUKI LETTER U",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C04,
+ },
+ [0x11C05]={
+ category="lo",
+ description="BHAIKSUKI LETTER UU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C05,
+ },
+ [0x11C06]={
+ category="lo",
+ description="BHAIKSUKI LETTER VOCALIC R",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C06,
+ },
+ [0x11C07]={
+ category="lo",
+ description="BHAIKSUKI LETTER VOCALIC RR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C07,
+ },
+ [0x11C08]={
+ category="lo",
+ description="BHAIKSUKI LETTER VOCALIC L",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C08,
+ },
+ [0x11C0A]={
+ category="lo",
+ description="BHAIKSUKI LETTER E",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C0A,
+ },
+ [0x11C0B]={
+ category="lo",
+ description="BHAIKSUKI LETTER AI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C0B,
+ },
+ [0x11C0C]={
+ category="lo",
+ description="BHAIKSUKI LETTER O",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C0C,
+ },
+ [0x11C0D]={
+ category="lo",
+ description="BHAIKSUKI LETTER AU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C0D,
+ },
+ [0x11C0E]={
+ category="lo",
+ description="BHAIKSUKI LETTER KA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C0E,
+ },
+ [0x11C0F]={
+ category="lo",
+ description="BHAIKSUKI LETTER KHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C0F,
+ },
+ [0x11C10]={
+ category="lo",
+ description="BHAIKSUKI LETTER GA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C10,
+ },
+ [0x11C11]={
+ category="lo",
+ description="BHAIKSUKI LETTER GHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C11,
+ },
+ [0x11C12]={
+ category="lo",
+ description="BHAIKSUKI LETTER NGA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C12,
+ },
+ [0x11C13]={
+ category="lo",
+ description="BHAIKSUKI LETTER CA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C13,
+ },
+ [0x11C14]={
+ category="lo",
+ description="BHAIKSUKI LETTER CHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C14,
+ },
+ [0x11C15]={
+ category="lo",
+ description="BHAIKSUKI LETTER JA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C15,
+ },
+ [0x11C16]={
+ category="lo",
+ description="BHAIKSUKI LETTER JHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C16,
+ },
+ [0x11C17]={
+ category="lo",
+ description="BHAIKSUKI LETTER NYA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C17,
+ },
+ [0x11C18]={
+ category="lo",
+ description="BHAIKSUKI LETTER TTA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C18,
+ },
+ [0x11C19]={
+ category="lo",
+ description="BHAIKSUKI LETTER TTHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C19,
+ },
+ [0x11C1A]={
+ category="lo",
+ description="BHAIKSUKI LETTER DDA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C1A,
+ },
+ [0x11C1B]={
+ category="lo",
+ description="BHAIKSUKI LETTER DDHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C1B,
+ },
+ [0x11C1C]={
+ category="lo",
+ description="BHAIKSUKI LETTER NNA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C1C,
+ },
+ [0x11C1D]={
+ category="lo",
+ description="BHAIKSUKI LETTER TA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C1D,
+ },
+ [0x11C1E]={
+ category="lo",
+ description="BHAIKSUKI LETTER THA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C1E,
+ },
+ [0x11C1F]={
+ category="lo",
+ description="BHAIKSUKI LETTER DA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C1F,
+ },
+ [0x11C20]={
+ category="lo",
+ description="BHAIKSUKI LETTER DHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C20,
+ },
+ [0x11C21]={
+ category="lo",
+ description="BHAIKSUKI LETTER NA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C21,
+ },
+ [0x11C22]={
+ category="lo",
+ description="BHAIKSUKI LETTER PA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C22,
+ },
+ [0x11C23]={
+ category="lo",
+ description="BHAIKSUKI LETTER PHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C23,
+ },
+ [0x11C24]={
+ category="lo",
+ description="BHAIKSUKI LETTER BA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C24,
+ },
+ [0x11C25]={
+ category="lo",
+ description="BHAIKSUKI LETTER BHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C25,
+ },
+ [0x11C26]={
+ category="lo",
+ description="BHAIKSUKI LETTER MA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C26,
+ },
+ [0x11C27]={
+ category="lo",
+ description="BHAIKSUKI LETTER YA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C27,
+ },
+ [0x11C28]={
+ category="lo",
+ description="BHAIKSUKI LETTER RA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C28,
+ },
+ [0x11C29]={
+ category="lo",
+ description="BHAIKSUKI LETTER LA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C29,
+ },
+ [0x11C2A]={
+ category="lo",
+ description="BHAIKSUKI LETTER VA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C2A,
+ },
+ [0x11C2B]={
+ category="lo",
+ description="BHAIKSUKI LETTER SHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C2B,
+ },
+ [0x11C2C]={
+ category="lo",
+ description="BHAIKSUKI LETTER SSA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C2C,
+ },
+ [0x11C2D]={
+ category="lo",
+ description="BHAIKSUKI LETTER SA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C2D,
+ },
+ [0x11C2E]={
+ category="lo",
+ description="BHAIKSUKI LETTER HA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C2E,
+ },
+ [0x11C2F]={
+ category="mc",
+ description="BHAIKSUKI VOWEL SIGN AA",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x11C2F,
+ },
+ [0x11C30]={
+ category="mn",
+ description="BHAIKSUKI VOWEL SIGN I",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11C30,
+ },
+ [0x11C31]={
+ category="mn",
+ description="BHAIKSUKI VOWEL SIGN II",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11C31,
+ },
+ [0x11C32]={
+ category="mn",
+ description="BHAIKSUKI VOWEL SIGN U",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11C32,
+ },
+ [0x11C33]={
+ category="mn",
+ description="BHAIKSUKI VOWEL SIGN UU",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11C33,
+ },
+ [0x11C34]={
+ category="mn",
+ description="BHAIKSUKI VOWEL SIGN VOCALIC R",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11C34,
+ },
+ [0x11C35]={
+ category="mn",
+ description="BHAIKSUKI VOWEL SIGN VOCALIC RR",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11C35,
+ },
+ [0x11C36]={
+ category="mn",
+ description="BHAIKSUKI VOWEL SIGN VOCALIC L",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11C36,
+ },
+ [0x11C38]={
+ category="mn",
+ description="BHAIKSUKI VOWEL SIGN E",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11C38,
+ },
+ [0x11C39]={
+ category="mn",
+ description="BHAIKSUKI VOWEL SIGN AI",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11C39,
+ },
+ [0x11C3A]={
+ category="mn",
+ description="BHAIKSUKI VOWEL SIGN O",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11C3A,
+ },
+ [0x11C3B]={
+ category="mn",
+ description="BHAIKSUKI VOWEL SIGN AU",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11C3B,
+ },
+ [0x11C3C]={
+ category="mn",
+ description="BHAIKSUKI SIGN CANDRABINDU",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11C3C,
+ },
+ [0x11C3D]={
+ category="mn",
+ description="BHAIKSUKI SIGN ANUSVARA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11C3D,
+ },
+ [0x11C3E]={
+ category="mc",
+ description="BHAIKSUKI SIGN VISARGA",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x11C3E,
+ },
+ [0x11C3F]={
+ category="mn",
+ combining=0x9,
+ description="BHAIKSUKI SIGN VIRAMA",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x11C3F,
+ },
+ [0x11C40]={
+ category="lo",
+ description="BHAIKSUKI SIGN AVAGRAHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C40,
+ },
+ [0x11C41]={
+ category="po",
+ description="BHAIKSUKI DANDA",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x11C41,
+ },
+ [0x11C42]={
+ category="po",
+ description="BHAIKSUKI DOUBLE DANDA",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x11C42,
+ },
+ [0x11C43]={
+ category="po",
+ description="BHAIKSUKI WORD SEPARATOR",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x11C43,
+ },
+ [0x11C44]={
+ category="po",
+ description="BHAIKSUKI GAP FILLER-1",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x11C44,
+ },
+ [0x11C45]={
+ category="po",
+ description="BHAIKSUKI GAP FILLER-2",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x11C45,
+ },
+ [0x11C50]={
+ category="nd",
+ description="BHAIKSUKI DIGIT ZERO",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11C50,
+ },
+ [0x11C51]={
+ category="nd",
+ description="BHAIKSUKI DIGIT ONE",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11C51,
+ },
+ [0x11C52]={
+ category="nd",
+ description="BHAIKSUKI DIGIT TWO",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11C52,
+ },
+ [0x11C53]={
+ category="nd",
+ description="BHAIKSUKI DIGIT THREE",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11C53,
+ },
+ [0x11C54]={
+ category="nd",
+ description="BHAIKSUKI DIGIT FOUR",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11C54,
+ },
+ [0x11C55]={
+ category="nd",
+ description="BHAIKSUKI DIGIT FIVE",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11C55,
+ },
+ [0x11C56]={
+ category="nd",
+ description="BHAIKSUKI DIGIT SIX",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11C56,
+ },
+ [0x11C57]={
+ category="nd",
+ description="BHAIKSUKI DIGIT SEVEN",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11C57,
+ },
+ [0x11C58]={
+ category="nd",
+ description="BHAIKSUKI DIGIT EIGHT",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11C58,
+ },
+ [0x11C59]={
+ category="nd",
+ description="BHAIKSUKI DIGIT NINE",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11C59,
+ },
+ [0x11C5A]={
+ category="no",
+ description="BHAIKSUKI NUMBER ONE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C5A,
+ },
+ [0x11C5B]={
+ category="no",
+ description="BHAIKSUKI NUMBER TWO",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C5B,
+ },
+ [0x11C5C]={
+ category="no",
+ description="BHAIKSUKI NUMBER THREE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C5C,
+ },
+ [0x11C5D]={
+ category="no",
+ description="BHAIKSUKI NUMBER FOUR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C5D,
+ },
+ [0x11C5E]={
+ category="no",
+ description="BHAIKSUKI NUMBER FIVE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C5E,
+ },
+ [0x11C5F]={
+ category="no",
+ description="BHAIKSUKI NUMBER SIX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C5F,
+ },
+ [0x11C60]={
+ category="no",
+ description="BHAIKSUKI NUMBER SEVEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C60,
+ },
+ [0x11C61]={
+ category="no",
+ description="BHAIKSUKI NUMBER EIGHT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C61,
+ },
+ [0x11C62]={
+ category="no",
+ description="BHAIKSUKI NUMBER NINE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C62,
+ },
+ [0x11C63]={
+ category="no",
+ description="BHAIKSUKI NUMBER TEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C63,
+ },
+ [0x11C64]={
+ category="no",
+ description="BHAIKSUKI NUMBER TWENTY",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C64,
+ },
+ [0x11C65]={
+ category="no",
+ description="BHAIKSUKI NUMBER THIRTY",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C65,
+ },
+ [0x11C66]={
+ category="no",
+ description="BHAIKSUKI NUMBER FORTY",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C66,
+ },
+ [0x11C67]={
+ category="no",
+ description="BHAIKSUKI NUMBER FIFTY",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C67,
+ },
+ [0x11C68]={
+ category="no",
+ description="BHAIKSUKI NUMBER SIXTY",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C68,
+ },
+ [0x11C69]={
+ category="no",
+ description="BHAIKSUKI NUMBER SEVENTY",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C69,
+ },
+ [0x11C6A]={
+ category="no",
+ description="BHAIKSUKI NUMBER EIGHTY",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C6A,
+ },
+ [0x11C6B]={
+ category="no",
+ description="BHAIKSUKI NUMBER NINETY",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C6B,
+ },
+ [0x11C6C]={
+ category="no",
+ description="BHAIKSUKI HUNDREDS UNIT MARK",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C6C,
+ },
+ [0x11C70]={
+ category="po",
+ description="MARCHEN HEAD MARK",
+ direction="l",
+ linebreak="bb",
+ unicodeslot=0x11C70,
+ },
+ [0x11C71]={
+ category="po",
+ description="MARCHEN MARK SHAD",
+ direction="l",
+ linebreak="ex",
+ unicodeslot=0x11C71,
+ },
+ [0x11C72]={
+ category="lo",
+ description="MARCHEN LETTER KA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C72,
+ },
+ [0x11C73]={
+ category="lo",
+ description="MARCHEN LETTER KHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C73,
+ },
+ [0x11C74]={
+ category="lo",
+ description="MARCHEN LETTER GA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C74,
+ },
+ [0x11C75]={
+ category="lo",
+ description="MARCHEN LETTER NGA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C75,
+ },
+ [0x11C76]={
+ category="lo",
+ description="MARCHEN LETTER CA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C76,
+ },
+ [0x11C77]={
+ category="lo",
+ description="MARCHEN LETTER CHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C77,
+ },
+ [0x11C78]={
+ category="lo",
+ description="MARCHEN LETTER JA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C78,
+ },
+ [0x11C79]={
+ category="lo",
+ description="MARCHEN LETTER NYA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C79,
+ },
+ [0x11C7A]={
+ category="lo",
+ description="MARCHEN LETTER TA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C7A,
+ },
+ [0x11C7B]={
+ category="lo",
+ description="MARCHEN LETTER THA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C7B,
+ },
+ [0x11C7C]={
+ category="lo",
+ description="MARCHEN LETTER DA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C7C,
+ },
+ [0x11C7D]={
+ category="lo",
+ description="MARCHEN LETTER NA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C7D,
+ },
+ [0x11C7E]={
+ category="lo",
+ description="MARCHEN LETTER PA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C7E,
+ },
+ [0x11C7F]={
+ category="lo",
+ description="MARCHEN LETTER PHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C7F,
+ },
+ [0x11C80]={
+ category="lo",
+ description="MARCHEN LETTER BA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C80,
+ },
+ [0x11C81]={
+ category="lo",
+ description="MARCHEN LETTER MA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C81,
+ },
+ [0x11C82]={
+ category="lo",
+ description="MARCHEN LETTER TSA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C82,
+ },
+ [0x11C83]={
+ category="lo",
+ description="MARCHEN LETTER TSHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C83,
+ },
+ [0x11C84]={
+ category="lo",
+ description="MARCHEN LETTER DZA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C84,
+ },
+ [0x11C85]={
+ category="lo",
+ description="MARCHEN LETTER WA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C85,
+ },
+ [0x11C86]={
+ category="lo",
+ description="MARCHEN LETTER ZHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C86,
+ },
+ [0x11C87]={
+ category="lo",
+ description="MARCHEN LETTER ZA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C87,
+ },
+ [0x11C88]={
+ category="lo",
+ description="MARCHEN LETTER -A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C88,
+ },
+ [0x11C89]={
+ category="lo",
+ description="MARCHEN LETTER YA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C89,
+ },
+ [0x11C8A]={
+ category="lo",
+ description="MARCHEN LETTER RA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C8A,
+ },
+ [0x11C8B]={
+ category="lo",
+ description="MARCHEN LETTER LA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C8B,
+ },
+ [0x11C8C]={
+ category="lo",
+ description="MARCHEN LETTER SHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C8C,
+ },
+ [0x11C8D]={
+ category="lo",
+ description="MARCHEN LETTER SA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C8D,
+ },
+ [0x11C8E]={
+ category="lo",
+ description="MARCHEN LETTER HA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C8E,
+ },
+ [0x11C8F]={
+ category="lo",
+ description="MARCHEN LETTER A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11C8F,
+ },
+ [0x11C92]={
+ category="mn",
+ description="MARCHEN SUBJOINED LETTER KA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11C92,
+ },
+ [0x11C93]={
+ category="mn",
+ description="MARCHEN SUBJOINED LETTER KHA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11C93,
+ },
+ [0x11C94]={
+ category="mn",
+ description="MARCHEN SUBJOINED LETTER GA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11C94,
+ },
+ [0x11C95]={
+ category="mn",
+ description="MARCHEN SUBJOINED LETTER NGA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11C95,
+ },
+ [0x11C96]={
+ category="mn",
+ description="MARCHEN SUBJOINED LETTER CA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11C96,
+ },
+ [0x11C97]={
+ category="mn",
+ description="MARCHEN SUBJOINED LETTER CHA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11C97,
+ },
+ [0x11C98]={
+ category="mn",
+ description="MARCHEN SUBJOINED LETTER JA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11C98,
+ },
+ [0x11C99]={
+ category="mn",
+ description="MARCHEN SUBJOINED LETTER NYA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11C99,
+ },
+ [0x11C9A]={
+ category="mn",
+ description="MARCHEN SUBJOINED LETTER TA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11C9A,
+ },
+ [0x11C9B]={
+ category="mn",
+ description="MARCHEN SUBJOINED LETTER THA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11C9B,
+ },
+ [0x11C9C]={
+ category="mn",
+ description="MARCHEN SUBJOINED LETTER DA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11C9C,
+ },
+ [0x11C9D]={
+ category="mn",
+ description="MARCHEN SUBJOINED LETTER NA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11C9D,
+ },
+ [0x11C9E]={
+ category="mn",
+ description="MARCHEN SUBJOINED LETTER PA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11C9E,
+ },
+ [0x11C9F]={
+ category="mn",
+ description="MARCHEN SUBJOINED LETTER PHA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11C9F,
+ },
+ [0x11CA0]={
+ category="mn",
+ description="MARCHEN SUBJOINED LETTER BA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11CA0,
+ },
+ [0x11CA1]={
+ category="mn",
+ description="MARCHEN SUBJOINED LETTER MA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11CA1,
+ },
+ [0x11CA2]={
+ category="mn",
+ description="MARCHEN SUBJOINED LETTER TSA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11CA2,
+ },
+ [0x11CA3]={
+ category="mn",
+ description="MARCHEN SUBJOINED LETTER TSHA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11CA3,
+ },
+ [0x11CA4]={
+ category="mn",
+ description="MARCHEN SUBJOINED LETTER DZA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11CA4,
+ },
+ [0x11CA5]={
+ category="mn",
+ description="MARCHEN SUBJOINED LETTER WA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11CA5,
+ },
+ [0x11CA6]={
+ category="mn",
+ description="MARCHEN SUBJOINED LETTER ZHA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11CA6,
+ },
+ [0x11CA7]={
+ category="mn",
+ description="MARCHEN SUBJOINED LETTER ZA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11CA7,
+ },
+ [0x11CA9]={
+ category="mc",
+ description="MARCHEN SUBJOINED LETTER YA",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x11CA9,
+ },
+ [0x11CAA]={
+ category="mn",
+ description="MARCHEN SUBJOINED LETTER RA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11CAA,
+ },
+ [0x11CAB]={
+ category="mn",
+ description="MARCHEN SUBJOINED LETTER LA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11CAB,
+ },
+ [0x11CAC]={
+ category="mn",
+ description="MARCHEN SUBJOINED LETTER SHA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11CAC,
+ },
+ [0x11CAD]={
+ category="mn",
+ description="MARCHEN SUBJOINED LETTER SA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11CAD,
+ },
+ [0x11CAE]={
+ category="mn",
+ description="MARCHEN SUBJOINED LETTER HA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11CAE,
+ },
+ [0x11CAF]={
+ category="mn",
+ description="MARCHEN SUBJOINED LETTER A",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11CAF,
+ },
+ [0x11CB0]={
+ category="mn",
+ description="MARCHEN VOWEL SIGN AA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11CB0,
+ },
+ [0x11CB1]={
+ category="mc",
+ description="MARCHEN VOWEL SIGN I",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x11CB1,
+ },
+ [0x11CB2]={
+ category="mn",
+ description="MARCHEN VOWEL SIGN U",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11CB2,
+ },
+ [0x11CB3]={
+ category="mn",
+ description="MARCHEN VOWEL SIGN E",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11CB3,
+ },
+ [0x11CB4]={
+ category="mc",
+ description="MARCHEN VOWEL SIGN O",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x11CB4,
+ },
+ [0x11CB5]={
+ category="mn",
+ description="MARCHEN SIGN ANUSVARA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11CB5,
+ },
+ [0x11CB6]={
+ category="mn",
+ description="MARCHEN SIGN CANDRABINDU",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11CB6,
+ },
[0x12000]={
category="lo",
description="CUNEIFORM SIGN A",
@@ -186590,6 +189869,6054 @@ characters.data={
linebreak="al",
unicodeslot=0x16F9F,
},
+ [0x16FE0]={
+ category="lm",
+ cjkwd="w",
+ description="TANGUT ITERATION MARK",
+ direction="l",
+ linebreak="ns",
+ unicodeslot=0x16FE0,
+ },
+ [0x18800]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-001",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18800,
+ },
+ [0x18801]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-002",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18801,
+ },
+ [0x18802]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-003",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18802,
+ },
+ [0x18803]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-004",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18803,
+ },
+ [0x18804]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-005",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18804,
+ },
+ [0x18805]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-006",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18805,
+ },
+ [0x18806]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-007",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18806,
+ },
+ [0x18807]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-008",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18807,
+ },
+ [0x18808]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-009",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18808,
+ },
+ [0x18809]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-010",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18809,
+ },
+ [0x1880A]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-011",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1880A,
+ },
+ [0x1880B]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-012",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1880B,
+ },
+ [0x1880C]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-013",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1880C,
+ },
+ [0x1880D]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-014",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1880D,
+ },
+ [0x1880E]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-015",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1880E,
+ },
+ [0x1880F]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-016",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1880F,
+ },
+ [0x18810]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-017",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18810,
+ },
+ [0x18811]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-018",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18811,
+ },
+ [0x18812]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-019",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18812,
+ },
+ [0x18813]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-020",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18813,
+ },
+ [0x18814]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-021",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18814,
+ },
+ [0x18815]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-022",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18815,
+ },
+ [0x18816]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-023",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18816,
+ },
+ [0x18817]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-024",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18817,
+ },
+ [0x18818]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-025",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18818,
+ },
+ [0x18819]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-026",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18819,
+ },
+ [0x1881A]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-027",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1881A,
+ },
+ [0x1881B]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-028",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1881B,
+ },
+ [0x1881C]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-029",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1881C,
+ },
+ [0x1881D]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-030",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1881D,
+ },
+ [0x1881E]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-031",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1881E,
+ },
+ [0x1881F]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-032",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1881F,
+ },
+ [0x18820]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-033",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18820,
+ },
+ [0x18821]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-034",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18821,
+ },
+ [0x18822]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-035",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18822,
+ },
+ [0x18823]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-036",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18823,
+ },
+ [0x18824]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-037",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18824,
+ },
+ [0x18825]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-038",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18825,
+ },
+ [0x18826]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-039",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18826,
+ },
+ [0x18827]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-040",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18827,
+ },
+ [0x18828]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-041",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18828,
+ },
+ [0x18829]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-042",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18829,
+ },
+ [0x1882A]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-043",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1882A,
+ },
+ [0x1882B]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-044",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1882B,
+ },
+ [0x1882C]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-045",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1882C,
+ },
+ [0x1882D]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-046",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1882D,
+ },
+ [0x1882E]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-047",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1882E,
+ },
+ [0x1882F]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-048",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1882F,
+ },
+ [0x18830]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-049",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18830,
+ },
+ [0x18831]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-050",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18831,
+ },
+ [0x18832]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-051",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18832,
+ },
+ [0x18833]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-052",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18833,
+ },
+ [0x18834]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-053",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18834,
+ },
+ [0x18835]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-054",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18835,
+ },
+ [0x18836]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-055",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18836,
+ },
+ [0x18837]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-056",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18837,
+ },
+ [0x18838]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-057",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18838,
+ },
+ [0x18839]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-058",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18839,
+ },
+ [0x1883A]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-059",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1883A,
+ },
+ [0x1883B]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-060",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1883B,
+ },
+ [0x1883C]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-061",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1883C,
+ },
+ [0x1883D]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-062",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1883D,
+ },
+ [0x1883E]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-063",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1883E,
+ },
+ [0x1883F]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-064",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1883F,
+ },
+ [0x18840]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-065",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18840,
+ },
+ [0x18841]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-066",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18841,
+ },
+ [0x18842]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-067",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18842,
+ },
+ [0x18843]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-068",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18843,
+ },
+ [0x18844]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-069",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18844,
+ },
+ [0x18845]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-070",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18845,
+ },
+ [0x18846]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-071",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18846,
+ },
+ [0x18847]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-072",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18847,
+ },
+ [0x18848]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-073",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18848,
+ },
+ [0x18849]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-074",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18849,
+ },
+ [0x1884A]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-075",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1884A,
+ },
+ [0x1884B]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-076",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1884B,
+ },
+ [0x1884C]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-077",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1884C,
+ },
+ [0x1884D]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-078",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1884D,
+ },
+ [0x1884E]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-079",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1884E,
+ },
+ [0x1884F]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-080",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1884F,
+ },
+ [0x18850]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-081",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18850,
+ },
+ [0x18851]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-082",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18851,
+ },
+ [0x18852]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-083",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18852,
+ },
+ [0x18853]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-084",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18853,
+ },
+ [0x18854]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-085",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18854,
+ },
+ [0x18855]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-086",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18855,
+ },
+ [0x18856]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-087",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18856,
+ },
+ [0x18857]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-088",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18857,
+ },
+ [0x18858]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-089",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18858,
+ },
+ [0x18859]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-090",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18859,
+ },
+ [0x1885A]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-091",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1885A,
+ },
+ [0x1885B]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-092",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1885B,
+ },
+ [0x1885C]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-093",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1885C,
+ },
+ [0x1885D]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-094",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1885D,
+ },
+ [0x1885E]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-095",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1885E,
+ },
+ [0x1885F]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-096",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1885F,
+ },
+ [0x18860]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-097",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18860,
+ },
+ [0x18861]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-098",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18861,
+ },
+ [0x18862]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-099",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18862,
+ },
+ [0x18863]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-100",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18863,
+ },
+ [0x18864]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-101",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18864,
+ },
+ [0x18865]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-102",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18865,
+ },
+ [0x18866]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-103",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18866,
+ },
+ [0x18867]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-104",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18867,
+ },
+ [0x18868]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-105",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18868,
+ },
+ [0x18869]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-106",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18869,
+ },
+ [0x1886A]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-107",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1886A,
+ },
+ [0x1886B]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-108",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1886B,
+ },
+ [0x1886C]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-109",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1886C,
+ },
+ [0x1886D]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-110",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1886D,
+ },
+ [0x1886E]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-111",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1886E,
+ },
+ [0x1886F]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-112",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1886F,
+ },
+ [0x18870]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-113",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18870,
+ },
+ [0x18871]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-114",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18871,
+ },
+ [0x18872]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-115",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18872,
+ },
+ [0x18873]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-116",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18873,
+ },
+ [0x18874]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-117",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18874,
+ },
+ [0x18875]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-118",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18875,
+ },
+ [0x18876]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-119",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18876,
+ },
+ [0x18877]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-120",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18877,
+ },
+ [0x18878]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-121",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18878,
+ },
+ [0x18879]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-122",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18879,
+ },
+ [0x1887A]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-123",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1887A,
+ },
+ [0x1887B]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-124",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1887B,
+ },
+ [0x1887C]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-125",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1887C,
+ },
+ [0x1887D]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-126",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1887D,
+ },
+ [0x1887E]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-127",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1887E,
+ },
+ [0x1887F]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-128",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1887F,
+ },
+ [0x18880]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-129",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18880,
+ },
+ [0x18881]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-130",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18881,
+ },
+ [0x18882]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-131",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18882,
+ },
+ [0x18883]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-132",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18883,
+ },
+ [0x18884]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-133",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18884,
+ },
+ [0x18885]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-134",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18885,
+ },
+ [0x18886]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-135",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18886,
+ },
+ [0x18887]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-136",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18887,
+ },
+ [0x18888]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-137",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18888,
+ },
+ [0x18889]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-138",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18889,
+ },
+ [0x1888A]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-139",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1888A,
+ },
+ [0x1888B]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-140",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1888B,
+ },
+ [0x1888C]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-141",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1888C,
+ },
+ [0x1888D]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-142",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1888D,
+ },
+ [0x1888E]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-143",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1888E,
+ },
+ [0x1888F]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-144",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1888F,
+ },
+ [0x18890]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-145",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18890,
+ },
+ [0x18891]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-146",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18891,
+ },
+ [0x18892]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-147",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18892,
+ },
+ [0x18893]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-148",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18893,
+ },
+ [0x18894]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-149",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18894,
+ },
+ [0x18895]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-150",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18895,
+ },
+ [0x18896]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-151",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18896,
+ },
+ [0x18897]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-152",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18897,
+ },
+ [0x18898]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-153",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18898,
+ },
+ [0x18899]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-154",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18899,
+ },
+ [0x1889A]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-155",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1889A,
+ },
+ [0x1889B]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-156",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1889B,
+ },
+ [0x1889C]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-157",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1889C,
+ },
+ [0x1889D]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-158",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1889D,
+ },
+ [0x1889E]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-159",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1889E,
+ },
+ [0x1889F]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-160",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1889F,
+ },
+ [0x188A0]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-161",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188A0,
+ },
+ [0x188A1]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-162",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188A1,
+ },
+ [0x188A2]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-163",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188A2,
+ },
+ [0x188A3]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-164",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188A3,
+ },
+ [0x188A4]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-165",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188A4,
+ },
+ [0x188A5]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-166",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188A5,
+ },
+ [0x188A6]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-167",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188A6,
+ },
+ [0x188A7]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-168",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188A7,
+ },
+ [0x188A8]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-169",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188A8,
+ },
+ [0x188A9]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-170",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188A9,
+ },
+ [0x188AA]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-171",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188AA,
+ },
+ [0x188AB]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-172",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188AB,
+ },
+ [0x188AC]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-173",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188AC,
+ },
+ [0x188AD]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-174",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188AD,
+ },
+ [0x188AE]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-175",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188AE,
+ },
+ [0x188AF]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-176",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188AF,
+ },
+ [0x188B0]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-177",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188B0,
+ },
+ [0x188B1]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-178",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188B1,
+ },
+ [0x188B2]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-179",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188B2,
+ },
+ [0x188B3]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-180",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188B3,
+ },
+ [0x188B4]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-181",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188B4,
+ },
+ [0x188B5]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-182",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188B5,
+ },
+ [0x188B6]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-183",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188B6,
+ },
+ [0x188B7]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-184",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188B7,
+ },
+ [0x188B8]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-185",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188B8,
+ },
+ [0x188B9]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-186",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188B9,
+ },
+ [0x188BA]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-187",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188BA,
+ },
+ [0x188BB]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-188",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188BB,
+ },
+ [0x188BC]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-189",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188BC,
+ },
+ [0x188BD]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-190",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188BD,
+ },
+ [0x188BE]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-191",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188BE,
+ },
+ [0x188BF]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-192",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188BF,
+ },
+ [0x188C0]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-193",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188C0,
+ },
+ [0x188C1]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-194",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188C1,
+ },
+ [0x188C2]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-195",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188C2,
+ },
+ [0x188C3]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-196",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188C3,
+ },
+ [0x188C4]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-197",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188C4,
+ },
+ [0x188C5]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-198",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188C5,
+ },
+ [0x188C6]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-199",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188C6,
+ },
+ [0x188C7]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-200",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188C7,
+ },
+ [0x188C8]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-201",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188C8,
+ },
+ [0x188C9]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-202",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188C9,
+ },
+ [0x188CA]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-203",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188CA,
+ },
+ [0x188CB]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-204",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188CB,
+ },
+ [0x188CC]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-205",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188CC,
+ },
+ [0x188CD]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-206",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188CD,
+ },
+ [0x188CE]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-207",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188CE,
+ },
+ [0x188CF]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-208",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188CF,
+ },
+ [0x188D0]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-209",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188D0,
+ },
+ [0x188D1]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-210",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188D1,
+ },
+ [0x188D2]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-211",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188D2,
+ },
+ [0x188D3]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-212",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188D3,
+ },
+ [0x188D4]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-213",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188D4,
+ },
+ [0x188D5]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-214",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188D5,
+ },
+ [0x188D6]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-215",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188D6,
+ },
+ [0x188D7]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-216",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188D7,
+ },
+ [0x188D8]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-217",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188D8,
+ },
+ [0x188D9]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-218",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188D9,
+ },
+ [0x188DA]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-219",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188DA,
+ },
+ [0x188DB]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-220",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188DB,
+ },
+ [0x188DC]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-221",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188DC,
+ },
+ [0x188DD]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-222",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188DD,
+ },
+ [0x188DE]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-223",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188DE,
+ },
+ [0x188DF]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-224",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188DF,
+ },
+ [0x188E0]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-225",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188E0,
+ },
+ [0x188E1]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-226",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188E1,
+ },
+ [0x188E2]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-227",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188E2,
+ },
+ [0x188E3]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-228",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188E3,
+ },
+ [0x188E4]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-229",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188E4,
+ },
+ [0x188E5]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-230",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188E5,
+ },
+ [0x188E6]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-231",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188E6,
+ },
+ [0x188E7]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-232",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188E7,
+ },
+ [0x188E8]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-233",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188E8,
+ },
+ [0x188E9]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-234",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188E9,
+ },
+ [0x188EA]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-235",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188EA,
+ },
+ [0x188EB]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-236",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188EB,
+ },
+ [0x188EC]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-237",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188EC,
+ },
+ [0x188ED]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-238",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188ED,
+ },
+ [0x188EE]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-239",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188EE,
+ },
+ [0x188EF]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-240",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188EF,
+ },
+ [0x188F0]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-241",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188F0,
+ },
+ [0x188F1]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-242",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188F1,
+ },
+ [0x188F2]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-243",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188F2,
+ },
+ [0x188F3]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-244",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188F3,
+ },
+ [0x188F4]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-245",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188F4,
+ },
+ [0x188F5]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-246",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188F5,
+ },
+ [0x188F6]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-247",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188F6,
+ },
+ [0x188F7]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-248",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188F7,
+ },
+ [0x188F8]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-249",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188F8,
+ },
+ [0x188F9]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-250",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188F9,
+ },
+ [0x188FA]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-251",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188FA,
+ },
+ [0x188FB]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-252",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188FB,
+ },
+ [0x188FC]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-253",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188FC,
+ },
+ [0x188FD]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-254",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188FD,
+ },
+ [0x188FE]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-255",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188FE,
+ },
+ [0x188FF]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-256",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x188FF,
+ },
+ [0x18900]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-257",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18900,
+ },
+ [0x18901]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-258",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18901,
+ },
+ [0x18902]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-259",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18902,
+ },
+ [0x18903]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-260",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18903,
+ },
+ [0x18904]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-261",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18904,
+ },
+ [0x18905]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-262",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18905,
+ },
+ [0x18906]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-263",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18906,
+ },
+ [0x18907]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-264",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18907,
+ },
+ [0x18908]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-265",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18908,
+ },
+ [0x18909]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-266",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18909,
+ },
+ [0x1890A]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-267",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1890A,
+ },
+ [0x1890B]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-268",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1890B,
+ },
+ [0x1890C]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-269",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1890C,
+ },
+ [0x1890D]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-270",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1890D,
+ },
+ [0x1890E]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-271",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1890E,
+ },
+ [0x1890F]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-272",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1890F,
+ },
+ [0x18910]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-273",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18910,
+ },
+ [0x18911]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-274",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18911,
+ },
+ [0x18912]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-275",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18912,
+ },
+ [0x18913]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-276",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18913,
+ },
+ [0x18914]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-277",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18914,
+ },
+ [0x18915]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-278",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18915,
+ },
+ [0x18916]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-279",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18916,
+ },
+ [0x18917]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-280",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18917,
+ },
+ [0x18918]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-281",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18918,
+ },
+ [0x18919]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-282",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18919,
+ },
+ [0x1891A]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-283",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1891A,
+ },
+ [0x1891B]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-284",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1891B,
+ },
+ [0x1891C]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-285",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1891C,
+ },
+ [0x1891D]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-286",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1891D,
+ },
+ [0x1891E]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-287",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1891E,
+ },
+ [0x1891F]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-288",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1891F,
+ },
+ [0x18920]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-289",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18920,
+ },
+ [0x18921]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-290",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18921,
+ },
+ [0x18922]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-291",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18922,
+ },
+ [0x18923]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-292",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18923,
+ },
+ [0x18924]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-293",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18924,
+ },
+ [0x18925]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-294",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18925,
+ },
+ [0x18926]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-295",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18926,
+ },
+ [0x18927]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-296",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18927,
+ },
+ [0x18928]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-297",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18928,
+ },
+ [0x18929]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-298",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18929,
+ },
+ [0x1892A]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-299",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1892A,
+ },
+ [0x1892B]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-300",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1892B,
+ },
+ [0x1892C]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-301",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1892C,
+ },
+ [0x1892D]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-302",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1892D,
+ },
+ [0x1892E]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-303",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1892E,
+ },
+ [0x1892F]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-304",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1892F,
+ },
+ [0x18930]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-305",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18930,
+ },
+ [0x18931]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-306",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18931,
+ },
+ [0x18932]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-307",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18932,
+ },
+ [0x18933]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-308",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18933,
+ },
+ [0x18934]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-309",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18934,
+ },
+ [0x18935]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-310",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18935,
+ },
+ [0x18936]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-311",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18936,
+ },
+ [0x18937]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-312",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18937,
+ },
+ [0x18938]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-313",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18938,
+ },
+ [0x18939]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-314",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18939,
+ },
+ [0x1893A]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-315",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1893A,
+ },
+ [0x1893B]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-316",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1893B,
+ },
+ [0x1893C]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-317",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1893C,
+ },
+ [0x1893D]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-318",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1893D,
+ },
+ [0x1893E]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-319",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1893E,
+ },
+ [0x1893F]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-320",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1893F,
+ },
+ [0x18940]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-321",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18940,
+ },
+ [0x18941]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-322",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18941,
+ },
+ [0x18942]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-323",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18942,
+ },
+ [0x18943]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-324",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18943,
+ },
+ [0x18944]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-325",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18944,
+ },
+ [0x18945]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-326",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18945,
+ },
+ [0x18946]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-327",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18946,
+ },
+ [0x18947]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-328",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18947,
+ },
+ [0x18948]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-329",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18948,
+ },
+ [0x18949]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-330",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18949,
+ },
+ [0x1894A]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-331",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1894A,
+ },
+ [0x1894B]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-332",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1894B,
+ },
+ [0x1894C]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-333",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1894C,
+ },
+ [0x1894D]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-334",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1894D,
+ },
+ [0x1894E]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-335",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1894E,
+ },
+ [0x1894F]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-336",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1894F,
+ },
+ [0x18950]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-337",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18950,
+ },
+ [0x18951]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-338",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18951,
+ },
+ [0x18952]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-339",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18952,
+ },
+ [0x18953]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-340",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18953,
+ },
+ [0x18954]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-341",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18954,
+ },
+ [0x18955]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-342",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18955,
+ },
+ [0x18956]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-343",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18956,
+ },
+ [0x18957]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-344",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18957,
+ },
+ [0x18958]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-345",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18958,
+ },
+ [0x18959]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-346",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18959,
+ },
+ [0x1895A]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-347",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1895A,
+ },
+ [0x1895B]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-348",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1895B,
+ },
+ [0x1895C]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-349",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1895C,
+ },
+ [0x1895D]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-350",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1895D,
+ },
+ [0x1895E]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-351",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1895E,
+ },
+ [0x1895F]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-352",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1895F,
+ },
+ [0x18960]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-353",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18960,
+ },
+ [0x18961]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-354",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18961,
+ },
+ [0x18962]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-355",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18962,
+ },
+ [0x18963]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-356",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18963,
+ },
+ [0x18964]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-357",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18964,
+ },
+ [0x18965]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-358",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18965,
+ },
+ [0x18966]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-359",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18966,
+ },
+ [0x18967]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-360",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18967,
+ },
+ [0x18968]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-361",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18968,
+ },
+ [0x18969]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-362",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18969,
+ },
+ [0x1896A]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-363",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1896A,
+ },
+ [0x1896B]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-364",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1896B,
+ },
+ [0x1896C]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-365",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1896C,
+ },
+ [0x1896D]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-366",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1896D,
+ },
+ [0x1896E]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-367",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1896E,
+ },
+ [0x1896F]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-368",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1896F,
+ },
+ [0x18970]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-369",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18970,
+ },
+ [0x18971]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-370",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18971,
+ },
+ [0x18972]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-371",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18972,
+ },
+ [0x18973]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-372",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18973,
+ },
+ [0x18974]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-373",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18974,
+ },
+ [0x18975]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-374",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18975,
+ },
+ [0x18976]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-375",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18976,
+ },
+ [0x18977]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-376",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18977,
+ },
+ [0x18978]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-377",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18978,
+ },
+ [0x18979]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-378",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18979,
+ },
+ [0x1897A]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-379",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1897A,
+ },
+ [0x1897B]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-380",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1897B,
+ },
+ [0x1897C]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-381",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1897C,
+ },
+ [0x1897D]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-382",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1897D,
+ },
+ [0x1897E]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-383",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1897E,
+ },
+ [0x1897F]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-384",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1897F,
+ },
+ [0x18980]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-385",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18980,
+ },
+ [0x18981]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-386",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18981,
+ },
+ [0x18982]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-387",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18982,
+ },
+ [0x18983]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-388",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18983,
+ },
+ [0x18984]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-389",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18984,
+ },
+ [0x18985]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-390",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18985,
+ },
+ [0x18986]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-391",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18986,
+ },
+ [0x18987]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-392",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18987,
+ },
+ [0x18988]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-393",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18988,
+ },
+ [0x18989]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-394",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18989,
+ },
+ [0x1898A]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-395",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1898A,
+ },
+ [0x1898B]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-396",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1898B,
+ },
+ [0x1898C]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-397",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1898C,
+ },
+ [0x1898D]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-398",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1898D,
+ },
+ [0x1898E]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-399",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1898E,
+ },
+ [0x1898F]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-400",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1898F,
+ },
+ [0x18990]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-401",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18990,
+ },
+ [0x18991]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-402",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18991,
+ },
+ [0x18992]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-403",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18992,
+ },
+ [0x18993]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-404",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18993,
+ },
+ [0x18994]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-405",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18994,
+ },
+ [0x18995]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-406",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18995,
+ },
+ [0x18996]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-407",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18996,
+ },
+ [0x18997]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-408",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18997,
+ },
+ [0x18998]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-409",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18998,
+ },
+ [0x18999]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-410",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18999,
+ },
+ [0x1899A]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-411",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1899A,
+ },
+ [0x1899B]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-412",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1899B,
+ },
+ [0x1899C]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-413",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1899C,
+ },
+ [0x1899D]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-414",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1899D,
+ },
+ [0x1899E]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-415",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1899E,
+ },
+ [0x1899F]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-416",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x1899F,
+ },
+ [0x189A0]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-417",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189A0,
+ },
+ [0x189A1]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-418",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189A1,
+ },
+ [0x189A2]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-419",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189A2,
+ },
+ [0x189A3]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-420",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189A3,
+ },
+ [0x189A4]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-421",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189A4,
+ },
+ [0x189A5]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-422",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189A5,
+ },
+ [0x189A6]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-423",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189A6,
+ },
+ [0x189A7]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-424",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189A7,
+ },
+ [0x189A8]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-425",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189A8,
+ },
+ [0x189A9]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-426",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189A9,
+ },
+ [0x189AA]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-427",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189AA,
+ },
+ [0x189AB]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-428",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189AB,
+ },
+ [0x189AC]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-429",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189AC,
+ },
+ [0x189AD]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-430",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189AD,
+ },
+ [0x189AE]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-431",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189AE,
+ },
+ [0x189AF]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-432",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189AF,
+ },
+ [0x189B0]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-433",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189B0,
+ },
+ [0x189B1]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-434",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189B1,
+ },
+ [0x189B2]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-435",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189B2,
+ },
+ [0x189B3]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-436",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189B3,
+ },
+ [0x189B4]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-437",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189B4,
+ },
+ [0x189B5]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-438",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189B5,
+ },
+ [0x189B6]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-439",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189B6,
+ },
+ [0x189B7]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-440",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189B7,
+ },
+ [0x189B8]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-441",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189B8,
+ },
+ [0x189B9]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-442",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189B9,
+ },
+ [0x189BA]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-443",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189BA,
+ },
+ [0x189BB]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-444",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189BB,
+ },
+ [0x189BC]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-445",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189BC,
+ },
+ [0x189BD]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-446",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189BD,
+ },
+ [0x189BE]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-447",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189BE,
+ },
+ [0x189BF]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-448",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189BF,
+ },
+ [0x189C0]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-449",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189C0,
+ },
+ [0x189C1]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-450",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189C1,
+ },
+ [0x189C2]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-451",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189C2,
+ },
+ [0x189C3]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-452",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189C3,
+ },
+ [0x189C4]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-453",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189C4,
+ },
+ [0x189C5]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-454",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189C5,
+ },
+ [0x189C6]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-455",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189C6,
+ },
+ [0x189C7]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-456",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189C7,
+ },
+ [0x189C8]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-457",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189C8,
+ },
+ [0x189C9]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-458",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189C9,
+ },
+ [0x189CA]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-459",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189CA,
+ },
+ [0x189CB]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-460",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189CB,
+ },
+ [0x189CC]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-461",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189CC,
+ },
+ [0x189CD]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-462",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189CD,
+ },
+ [0x189CE]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-463",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189CE,
+ },
+ [0x189CF]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-464",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189CF,
+ },
+ [0x189D0]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-465",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189D0,
+ },
+ [0x189D1]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-466",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189D1,
+ },
+ [0x189D2]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-467",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189D2,
+ },
+ [0x189D3]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-468",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189D3,
+ },
+ [0x189D4]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-469",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189D4,
+ },
+ [0x189D5]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-470",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189D5,
+ },
+ [0x189D6]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-471",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189D6,
+ },
+ [0x189D7]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-472",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189D7,
+ },
+ [0x189D8]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-473",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189D8,
+ },
+ [0x189D9]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-474",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189D9,
+ },
+ [0x189DA]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-475",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189DA,
+ },
+ [0x189DB]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-476",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189DB,
+ },
+ [0x189DC]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-477",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189DC,
+ },
+ [0x189DD]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-478",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189DD,
+ },
+ [0x189DE]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-479",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189DE,
+ },
+ [0x189DF]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-480",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189DF,
+ },
+ [0x189E0]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-481",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189E0,
+ },
+ [0x189E1]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-482",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189E1,
+ },
+ [0x189E2]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-483",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189E2,
+ },
+ [0x189E3]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-484",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189E3,
+ },
+ [0x189E4]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-485",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189E4,
+ },
+ [0x189E5]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-486",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189E5,
+ },
+ [0x189E6]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-487",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189E6,
+ },
+ [0x189E7]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-488",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189E7,
+ },
+ [0x189E8]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-489",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189E8,
+ },
+ [0x189E9]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-490",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189E9,
+ },
+ [0x189EA]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-491",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189EA,
+ },
+ [0x189EB]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-492",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189EB,
+ },
+ [0x189EC]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-493",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189EC,
+ },
+ [0x189ED]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-494",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189ED,
+ },
+ [0x189EE]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-495",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189EE,
+ },
+ [0x189EF]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-496",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189EF,
+ },
+ [0x189F0]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-497",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189F0,
+ },
+ [0x189F1]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-498",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189F1,
+ },
+ [0x189F2]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-499",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189F2,
+ },
+ [0x189F3]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-500",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189F3,
+ },
+ [0x189F4]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-501",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189F4,
+ },
+ [0x189F5]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-502",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189F5,
+ },
+ [0x189F6]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-503",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189F6,
+ },
+ [0x189F7]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-504",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189F7,
+ },
+ [0x189F8]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-505",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189F8,
+ },
+ [0x189F9]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-506",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189F9,
+ },
+ [0x189FA]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-507",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189FA,
+ },
+ [0x189FB]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-508",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189FB,
+ },
+ [0x189FC]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-509",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189FC,
+ },
+ [0x189FD]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-510",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189FD,
+ },
+ [0x189FE]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-511",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189FE,
+ },
+ [0x189FF]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-512",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x189FF,
+ },
+ [0x18A00]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-513",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A00,
+ },
+ [0x18A01]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-514",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A01,
+ },
+ [0x18A02]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-515",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A02,
+ },
+ [0x18A03]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-516",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A03,
+ },
+ [0x18A04]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-517",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A04,
+ },
+ [0x18A05]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-518",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A05,
+ },
+ [0x18A06]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-519",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A06,
+ },
+ [0x18A07]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-520",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A07,
+ },
+ [0x18A08]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-521",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A08,
+ },
+ [0x18A09]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-522",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A09,
+ },
+ [0x18A0A]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-523",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A0A,
+ },
+ [0x18A0B]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-524",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A0B,
+ },
+ [0x18A0C]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-525",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A0C,
+ },
+ [0x18A0D]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-526",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A0D,
+ },
+ [0x18A0E]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-527",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A0E,
+ },
+ [0x18A0F]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-528",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A0F,
+ },
+ [0x18A10]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-529",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A10,
+ },
+ [0x18A11]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-530",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A11,
+ },
+ [0x18A12]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-531",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A12,
+ },
+ [0x18A13]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-532",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A13,
+ },
+ [0x18A14]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-533",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A14,
+ },
+ [0x18A15]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-534",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A15,
+ },
+ [0x18A16]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-535",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A16,
+ },
+ [0x18A17]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-536",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A17,
+ },
+ [0x18A18]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-537",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A18,
+ },
+ [0x18A19]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-538",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A19,
+ },
+ [0x18A1A]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-539",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A1A,
+ },
+ [0x18A1B]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-540",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A1B,
+ },
+ [0x18A1C]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-541",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A1C,
+ },
+ [0x18A1D]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-542",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A1D,
+ },
+ [0x18A1E]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-543",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A1E,
+ },
+ [0x18A1F]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-544",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A1F,
+ },
+ [0x18A20]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-545",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A20,
+ },
+ [0x18A21]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-546",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A21,
+ },
+ [0x18A22]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-547",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A22,
+ },
+ [0x18A23]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-548",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A23,
+ },
+ [0x18A24]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-549",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A24,
+ },
+ [0x18A25]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-550",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A25,
+ },
+ [0x18A26]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-551",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A26,
+ },
+ [0x18A27]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-552",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A27,
+ },
+ [0x18A28]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-553",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A28,
+ },
+ [0x18A29]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-554",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A29,
+ },
+ [0x18A2A]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-555",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A2A,
+ },
+ [0x18A2B]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-556",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A2B,
+ },
+ [0x18A2C]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-557",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A2C,
+ },
+ [0x18A2D]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-558",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A2D,
+ },
+ [0x18A2E]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-559",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A2E,
+ },
+ [0x18A2F]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-560",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A2F,
+ },
+ [0x18A30]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-561",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A30,
+ },
+ [0x18A31]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-562",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A31,
+ },
+ [0x18A32]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-563",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A32,
+ },
+ [0x18A33]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-564",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A33,
+ },
+ [0x18A34]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-565",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A34,
+ },
+ [0x18A35]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-566",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A35,
+ },
+ [0x18A36]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-567",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A36,
+ },
+ [0x18A37]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-568",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A37,
+ },
+ [0x18A38]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-569",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A38,
+ },
+ [0x18A39]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-570",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A39,
+ },
+ [0x18A3A]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-571",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A3A,
+ },
+ [0x18A3B]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-572",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A3B,
+ },
+ [0x18A3C]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-573",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A3C,
+ },
+ [0x18A3D]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-574",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A3D,
+ },
+ [0x18A3E]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-575",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A3E,
+ },
+ [0x18A3F]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-576",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A3F,
+ },
+ [0x18A40]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-577",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A40,
+ },
+ [0x18A41]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-578",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A41,
+ },
+ [0x18A42]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-579",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A42,
+ },
+ [0x18A43]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-580",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A43,
+ },
+ [0x18A44]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-581",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A44,
+ },
+ [0x18A45]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-582",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A45,
+ },
+ [0x18A46]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-583",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A46,
+ },
+ [0x18A47]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-584",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A47,
+ },
+ [0x18A48]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-585",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A48,
+ },
+ [0x18A49]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-586",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A49,
+ },
+ [0x18A4A]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-587",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A4A,
+ },
+ [0x18A4B]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-588",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A4B,
+ },
+ [0x18A4C]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-589",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A4C,
+ },
+ [0x18A4D]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-590",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A4D,
+ },
+ [0x18A4E]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-591",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A4E,
+ },
+ [0x18A4F]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-592",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A4F,
+ },
+ [0x18A50]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-593",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A50,
+ },
+ [0x18A51]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-594",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A51,
+ },
+ [0x18A52]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-595",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A52,
+ },
+ [0x18A53]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-596",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A53,
+ },
+ [0x18A54]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-597",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A54,
+ },
+ [0x18A55]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-598",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A55,
+ },
+ [0x18A56]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-599",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A56,
+ },
+ [0x18A57]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-600",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A57,
+ },
+ [0x18A58]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-601",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A58,
+ },
+ [0x18A59]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-602",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A59,
+ },
+ [0x18A5A]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-603",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A5A,
+ },
+ [0x18A5B]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-604",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A5B,
+ },
+ [0x18A5C]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-605",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A5C,
+ },
+ [0x18A5D]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-606",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A5D,
+ },
+ [0x18A5E]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-607",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A5E,
+ },
+ [0x18A5F]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-608",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A5F,
+ },
+ [0x18A60]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-609",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A60,
+ },
+ [0x18A61]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-610",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A61,
+ },
+ [0x18A62]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-611",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A62,
+ },
+ [0x18A63]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-612",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A63,
+ },
+ [0x18A64]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-613",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A64,
+ },
+ [0x18A65]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-614",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A65,
+ },
+ [0x18A66]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-615",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A66,
+ },
+ [0x18A67]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-616",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A67,
+ },
+ [0x18A68]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-617",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A68,
+ },
+ [0x18A69]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-618",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A69,
+ },
+ [0x18A6A]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-619",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A6A,
+ },
+ [0x18A6B]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-620",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A6B,
+ },
+ [0x18A6C]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-621",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A6C,
+ },
+ [0x18A6D]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-622",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A6D,
+ },
+ [0x18A6E]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-623",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A6E,
+ },
+ [0x18A6F]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-624",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A6F,
+ },
+ [0x18A70]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-625",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A70,
+ },
+ [0x18A71]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-626",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A71,
+ },
+ [0x18A72]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-627",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A72,
+ },
+ [0x18A73]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-628",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A73,
+ },
+ [0x18A74]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-629",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A74,
+ },
+ [0x18A75]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-630",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A75,
+ },
+ [0x18A76]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-631",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A76,
+ },
+ [0x18A77]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-632",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A77,
+ },
+ [0x18A78]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-633",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A78,
+ },
+ [0x18A79]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-634",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A79,
+ },
+ [0x18A7A]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-635",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A7A,
+ },
+ [0x18A7B]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-636",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A7B,
+ },
+ [0x18A7C]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-637",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A7C,
+ },
+ [0x18A7D]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-638",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A7D,
+ },
+ [0x18A7E]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-639",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A7E,
+ },
+ [0x18A7F]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-640",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A7F,
+ },
+ [0x18A80]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-641",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A80,
+ },
+ [0x18A81]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-642",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A81,
+ },
+ [0x18A82]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-643",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A82,
+ },
+ [0x18A83]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-644",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A83,
+ },
+ [0x18A84]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-645",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A84,
+ },
+ [0x18A85]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-646",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A85,
+ },
+ [0x18A86]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-647",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A86,
+ },
+ [0x18A87]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-648",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A87,
+ },
+ [0x18A88]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-649",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A88,
+ },
+ [0x18A89]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-650",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A89,
+ },
+ [0x18A8A]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-651",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A8A,
+ },
+ [0x18A8B]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-652",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A8B,
+ },
+ [0x18A8C]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-653",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A8C,
+ },
+ [0x18A8D]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-654",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A8D,
+ },
+ [0x18A8E]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-655",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A8E,
+ },
+ [0x18A8F]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-656",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A8F,
+ },
+ [0x18A90]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-657",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A90,
+ },
+ [0x18A91]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-658",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A91,
+ },
+ [0x18A92]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-659",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A92,
+ },
+ [0x18A93]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-660",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A93,
+ },
+ [0x18A94]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-661",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A94,
+ },
+ [0x18A95]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-662",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A95,
+ },
+ [0x18A96]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-663",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A96,
+ },
+ [0x18A97]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-664",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A97,
+ },
+ [0x18A98]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-665",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A98,
+ },
+ [0x18A99]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-666",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A99,
+ },
+ [0x18A9A]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-667",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A9A,
+ },
+ [0x18A9B]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-668",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A9B,
+ },
+ [0x18A9C]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-669",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A9C,
+ },
+ [0x18A9D]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-670",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A9D,
+ },
+ [0x18A9E]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-671",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A9E,
+ },
+ [0x18A9F]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-672",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18A9F,
+ },
+ [0x18AA0]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-673",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AA0,
+ },
+ [0x18AA1]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-674",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AA1,
+ },
+ [0x18AA2]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-675",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AA2,
+ },
+ [0x18AA3]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-676",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AA3,
+ },
+ [0x18AA4]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-677",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AA4,
+ },
+ [0x18AA5]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-678",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AA5,
+ },
+ [0x18AA6]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-679",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AA6,
+ },
+ [0x18AA7]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-680",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AA7,
+ },
+ [0x18AA8]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-681",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AA8,
+ },
+ [0x18AA9]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-682",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AA9,
+ },
+ [0x18AAA]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-683",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AAA,
+ },
+ [0x18AAB]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-684",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AAB,
+ },
+ [0x18AAC]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-685",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AAC,
+ },
+ [0x18AAD]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-686",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AAD,
+ },
+ [0x18AAE]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-687",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AAE,
+ },
+ [0x18AAF]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-688",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AAF,
+ },
+ [0x18AB0]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-689",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AB0,
+ },
+ [0x18AB1]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-690",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AB1,
+ },
+ [0x18AB2]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-691",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AB2,
+ },
+ [0x18AB3]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-692",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AB3,
+ },
+ [0x18AB4]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-693",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AB4,
+ },
+ [0x18AB5]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-694",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AB5,
+ },
+ [0x18AB6]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-695",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AB6,
+ },
+ [0x18AB7]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-696",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AB7,
+ },
+ [0x18AB8]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-697",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AB8,
+ },
+ [0x18AB9]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-698",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AB9,
+ },
+ [0x18ABA]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-699",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18ABA,
+ },
+ [0x18ABB]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-700",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18ABB,
+ },
+ [0x18ABC]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-701",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18ABC,
+ },
+ [0x18ABD]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-702",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18ABD,
+ },
+ [0x18ABE]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-703",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18ABE,
+ },
+ [0x18ABF]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-704",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18ABF,
+ },
+ [0x18AC0]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-705",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AC0,
+ },
+ [0x18AC1]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-706",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AC1,
+ },
+ [0x18AC2]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-707",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AC2,
+ },
+ [0x18AC3]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-708",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AC3,
+ },
+ [0x18AC4]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-709",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AC4,
+ },
+ [0x18AC5]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-710",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AC5,
+ },
+ [0x18AC6]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-711",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AC6,
+ },
+ [0x18AC7]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-712",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AC7,
+ },
+ [0x18AC8]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-713",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AC8,
+ },
+ [0x18AC9]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-714",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AC9,
+ },
+ [0x18ACA]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-715",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18ACA,
+ },
+ [0x18ACB]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-716",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18ACB,
+ },
+ [0x18ACC]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-717",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18ACC,
+ },
+ [0x18ACD]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-718",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18ACD,
+ },
+ [0x18ACE]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-719",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18ACE,
+ },
+ [0x18ACF]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-720",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18ACF,
+ },
+ [0x18AD0]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-721",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AD0,
+ },
+ [0x18AD1]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-722",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AD1,
+ },
+ [0x18AD2]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-723",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AD2,
+ },
+ [0x18AD3]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-724",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AD3,
+ },
+ [0x18AD4]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-725",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AD4,
+ },
+ [0x18AD5]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-726",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AD5,
+ },
+ [0x18AD6]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-727",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AD6,
+ },
+ [0x18AD7]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-728",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AD7,
+ },
+ [0x18AD8]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-729",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AD8,
+ },
+ [0x18AD9]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-730",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AD9,
+ },
+ [0x18ADA]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-731",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18ADA,
+ },
+ [0x18ADB]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-732",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18ADB,
+ },
+ [0x18ADC]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-733",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18ADC,
+ },
+ [0x18ADD]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-734",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18ADD,
+ },
+ [0x18ADE]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-735",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18ADE,
+ },
+ [0x18ADF]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-736",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18ADF,
+ },
+ [0x18AE0]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-737",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AE0,
+ },
+ [0x18AE1]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-738",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AE1,
+ },
+ [0x18AE2]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-739",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AE2,
+ },
+ [0x18AE3]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-740",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AE3,
+ },
+ [0x18AE4]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-741",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AE4,
+ },
+ [0x18AE5]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-742",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AE5,
+ },
+ [0x18AE6]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-743",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AE6,
+ },
+ [0x18AE7]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-744",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AE7,
+ },
+ [0x18AE8]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-745",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AE8,
+ },
+ [0x18AE9]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-746",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AE9,
+ },
+ [0x18AEA]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-747",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AEA,
+ },
+ [0x18AEB]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-748",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AEB,
+ },
+ [0x18AEC]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-749",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AEC,
+ },
+ [0x18AED]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-750",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AED,
+ },
+ [0x18AEE]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-751",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AEE,
+ },
+ [0x18AEF]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-752",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AEF,
+ },
+ [0x18AF0]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-753",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AF0,
+ },
+ [0x18AF1]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-754",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AF1,
+ },
+ [0x18AF2]={
+ category="lo",
+ cjkwd="w",
+ description="TANGUT COMPONENT-755",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x18AF2,
+ },
[0x1B000]={
category="lo",
cjkwd="w",
@@ -190000,6 +199327,7 @@ characters.data={
description="MUSICAL SYMBOL WHOLE NOTE",
direction="l",
linebreak="al",
+ synonyms={ "semibreve" },
unicodeslot=0x1D15D,
},
[0x1D15E]={
@@ -190032,6 +199360,7 @@ characters.data={
direction="l",
linebreak="al",
specials={ "char", 0x1D15F, 0x1D16F },
+ synonyms={ "semiquaver" },
unicodeslot=0x1D161,
},
[0x1D162]={
@@ -193711,6 +203040,7 @@ characters.data={
direction="l",
linebreak="al",
specials={ "font", 0x50 },
+ synonyms={ "power set" },
unicodeslot=0x1D4AB,
},
[0x1D4AC]={
@@ -194515,6 +203845,7 @@ characters.data={
direction="l",
linebreak="al",
specials={ "font", 0x4D },
+ synonyms={ "new testament majority text" },
unicodeslot=0x1D510,
},
[0x1D511]={
@@ -194555,6 +203886,7 @@ characters.data={
direction="l",
linebreak="al",
specials={ "font", 0x53 },
+ synonyms={ "greek old testament", "septuagint" },
unicodeslot=0x1D516,
},
[0x1D517]={
@@ -205658,6 +214990,310 @@ characters.data={
linebreak="cm",
unicodeslot=0x1DAAF,
},
+ [0x1E000]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING GLAGOLITIC LETTER AZU",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E000,
+ },
+ [0x1E001]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING GLAGOLITIC LETTER BUKY",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E001,
+ },
+ [0x1E002]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING GLAGOLITIC LETTER VEDE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E002,
+ },
+ [0x1E003]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING GLAGOLITIC LETTER GLAGOLI",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E003,
+ },
+ [0x1E004]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING GLAGOLITIC LETTER DOBRO",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E004,
+ },
+ [0x1E005]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING GLAGOLITIC LETTER YESTU",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E005,
+ },
+ [0x1E006]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING GLAGOLITIC LETTER ZHIVETE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E006,
+ },
+ [0x1E008]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING GLAGOLITIC LETTER ZEMLJA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E008,
+ },
+ [0x1E009]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING GLAGOLITIC LETTER IZHE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E009,
+ },
+ [0x1E00A]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING GLAGOLITIC LETTER INITIAL IZHE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E00A,
+ },
+ [0x1E00B]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING GLAGOLITIC LETTER I",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E00B,
+ },
+ [0x1E00C]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING GLAGOLITIC LETTER DJERVI",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E00C,
+ },
+ [0x1E00D]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING GLAGOLITIC LETTER KAKO",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E00D,
+ },
+ [0x1E00E]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING GLAGOLITIC LETTER LJUDIJE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E00E,
+ },
+ [0x1E00F]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING GLAGOLITIC LETTER MYSLITE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E00F,
+ },
+ [0x1E010]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING GLAGOLITIC LETTER NASHI",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E010,
+ },
+ [0x1E011]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING GLAGOLITIC LETTER ONU",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E011,
+ },
+ [0x1E012]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING GLAGOLITIC LETTER POKOJI",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E012,
+ },
+ [0x1E013]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING GLAGOLITIC LETTER RITSI",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E013,
+ },
+ [0x1E014]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING GLAGOLITIC LETTER SLOVO",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E014,
+ },
+ [0x1E015]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING GLAGOLITIC LETTER TVRIDO",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E015,
+ },
+ [0x1E016]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING GLAGOLITIC LETTER UKU",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E016,
+ },
+ [0x1E017]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING GLAGOLITIC LETTER FRITU",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E017,
+ },
+ [0x1E018]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING GLAGOLITIC LETTER HERU",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E018,
+ },
+ [0x1E01B]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING GLAGOLITIC LETTER SHTA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E01B,
+ },
+ [0x1E01C]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING GLAGOLITIC LETTER TSI",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E01C,
+ },
+ [0x1E01D]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING GLAGOLITIC LETTER CHRIVI",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E01D,
+ },
+ [0x1E01E]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING GLAGOLITIC LETTER SHA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E01E,
+ },
+ [0x1E01F]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING GLAGOLITIC LETTER YERU",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E01F,
+ },
+ [0x1E020]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING GLAGOLITIC LETTER YERI",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E020,
+ },
+ [0x1E021]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING GLAGOLITIC LETTER YATI",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E021,
+ },
+ [0x1E023]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING GLAGOLITIC LETTER YU",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E023,
+ },
+ [0x1E024]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING GLAGOLITIC LETTER SMALL YUS",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E024,
+ },
+ [0x1E026]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING GLAGOLITIC LETTER YO",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E026,
+ },
+ [0x1E027]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING GLAGOLITIC LETTER IOTATED SMALL YUS",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E027,
+ },
+ [0x1E028]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING GLAGOLITIC LETTER BIG YUS",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E028,
+ },
+ [0x1E029]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING GLAGOLITIC LETTER IOTATED BIG YUS",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E029,
+ },
+ [0x1E02A]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING GLAGOLITIC LETTER FITA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E02A,
+ },
[0x1E800]={
category="lo",
description="MENDE KIKAKUI SYLLABLE M001 KI",
@@ -207156,6 +216792,690 @@ characters.data={
linebreak="cm",
unicodeslot=0x1E8D6,
},
+ [0x1E900]={
+ arabic="d",
+ category="lu",
+ description="ADLAM CAPITAL LETTER ALIF",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E900,
+ },
+ [0x1E901]={
+ arabic="d",
+ category="lu",
+ description="ADLAM CAPITAL LETTER DAALI",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E901,
+ },
+ [0x1E902]={
+ arabic="d",
+ category="lu",
+ description="ADLAM CAPITAL LETTER LAAM",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E902,
+ },
+ [0x1E903]={
+ arabic="d",
+ category="lu",
+ description="ADLAM CAPITAL LETTER MIIM",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E903,
+ },
+ [0x1E904]={
+ arabic="d",
+ category="lu",
+ description="ADLAM CAPITAL LETTER BA",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E904,
+ },
+ [0x1E905]={
+ arabic="d",
+ category="lu",
+ description="ADLAM CAPITAL LETTER SINNYIIYHE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E905,
+ },
+ [0x1E906]={
+ arabic="d",
+ category="lu",
+ description="ADLAM CAPITAL LETTER PE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E906,
+ },
+ [0x1E907]={
+ arabic="d",
+ category="lu",
+ description="ADLAM CAPITAL LETTER BHE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E907,
+ },
+ [0x1E908]={
+ arabic="d",
+ category="lu",
+ description="ADLAM CAPITAL LETTER RA",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E908,
+ },
+ [0x1E909]={
+ arabic="d",
+ category="lu",
+ description="ADLAM CAPITAL LETTER E",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E909,
+ },
+ [0x1E90A]={
+ arabic="d",
+ category="lu",
+ description="ADLAM CAPITAL LETTER FA",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E90A,
+ },
+ [0x1E90B]={
+ arabic="d",
+ category="lu",
+ description="ADLAM CAPITAL LETTER I",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E90B,
+ },
+ [0x1E90C]={
+ arabic="d",
+ category="lu",
+ description="ADLAM CAPITAL LETTER O",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E90C,
+ },
+ [0x1E90D]={
+ arabic="d",
+ category="lu",
+ description="ADLAM CAPITAL LETTER DHA",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E90D,
+ },
+ [0x1E90E]={
+ arabic="d",
+ category="lu",
+ description="ADLAM CAPITAL LETTER YHE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E90E,
+ },
+ [0x1E90F]={
+ arabic="d",
+ category="lu",
+ description="ADLAM CAPITAL LETTER WAW",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E90F,
+ },
+ [0x1E910]={
+ arabic="d",
+ category="lu",
+ description="ADLAM CAPITAL LETTER NUN",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E910,
+ },
+ [0x1E911]={
+ arabic="d",
+ category="lu",
+ description="ADLAM CAPITAL LETTER KAF",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E911,
+ },
+ [0x1E912]={
+ arabic="d",
+ category="lu",
+ description="ADLAM CAPITAL LETTER YA",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E912,
+ },
+ [0x1E913]={
+ arabic="d",
+ category="lu",
+ description="ADLAM CAPITAL LETTER U",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E913,
+ },
+ [0x1E914]={
+ arabic="d",
+ category="lu",
+ description="ADLAM CAPITAL LETTER JIIM",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E914,
+ },
+ [0x1E915]={
+ arabic="d",
+ category="lu",
+ description="ADLAM CAPITAL LETTER CHI",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E915,
+ },
+ [0x1E916]={
+ arabic="d",
+ category="lu",
+ description="ADLAM CAPITAL LETTER HA",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E916,
+ },
+ [0x1E917]={
+ arabic="d",
+ category="lu",
+ description="ADLAM CAPITAL LETTER QAAF",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E917,
+ },
+ [0x1E918]={
+ arabic="d",
+ category="lu",
+ description="ADLAM CAPITAL LETTER GA",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E918,
+ },
+ [0x1E919]={
+ arabic="d",
+ category="lu",
+ description="ADLAM CAPITAL LETTER NYA",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E919,
+ },
+ [0x1E91A]={
+ arabic="d",
+ category="lu",
+ description="ADLAM CAPITAL LETTER TU",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E91A,
+ },
+ [0x1E91B]={
+ arabic="d",
+ category="lu",
+ description="ADLAM CAPITAL LETTER NHA",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E91B,
+ },
+ [0x1E91C]={
+ arabic="d",
+ category="lu",
+ description="ADLAM CAPITAL LETTER VA",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E91C,
+ },
+ [0x1E91D]={
+ arabic="d",
+ category="lu",
+ description="ADLAM CAPITAL LETTER KHA",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E91D,
+ },
+ [0x1E91E]={
+ arabic="d",
+ category="lu",
+ description="ADLAM CAPITAL LETTER GBE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E91E,
+ },
+ [0x1E91F]={
+ arabic="d",
+ category="lu",
+ description="ADLAM CAPITAL LETTER ZAL",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E91F,
+ },
+ [0x1E920]={
+ arabic="d",
+ category="lu",
+ description="ADLAM CAPITAL LETTER KPO",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E920,
+ },
+ [0x1E921]={
+ arabic="d",
+ category="lu",
+ description="ADLAM CAPITAL LETTER SHA",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E921,
+ },
+ [0x1E922]={
+ arabic="d",
+ category="ll",
+ description="ADLAM SMALL LETTER ALIF",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E922,
+ },
+ [0x1E923]={
+ arabic="d",
+ category="ll",
+ description="ADLAM SMALL LETTER DAALI",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E923,
+ },
+ [0x1E924]={
+ arabic="d",
+ category="ll",
+ description="ADLAM SMALL LETTER LAAM",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E924,
+ },
+ [0x1E925]={
+ arabic="d",
+ category="ll",
+ description="ADLAM SMALL LETTER MIIM",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E925,
+ },
+ [0x1E926]={
+ arabic="d",
+ category="ll",
+ description="ADLAM SMALL LETTER BA",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E926,
+ },
+ [0x1E927]={
+ arabic="d",
+ category="ll",
+ description="ADLAM SMALL LETTER SINNYIIYHE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E927,
+ },
+ [0x1E928]={
+ arabic="d",
+ category="ll",
+ description="ADLAM SMALL LETTER PE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E928,
+ },
+ [0x1E929]={
+ arabic="d",
+ category="ll",
+ description="ADLAM SMALL LETTER BHE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E929,
+ },
+ [0x1E92A]={
+ arabic="d",
+ category="ll",
+ description="ADLAM SMALL LETTER RA",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E92A,
+ },
+ [0x1E92B]={
+ arabic="d",
+ category="ll",
+ description="ADLAM SMALL LETTER E",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E92B,
+ },
+ [0x1E92C]={
+ arabic="d",
+ category="ll",
+ description="ADLAM SMALL LETTER FA",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E92C,
+ },
+ [0x1E92D]={
+ arabic="d",
+ category="ll",
+ description="ADLAM SMALL LETTER I",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E92D,
+ },
+ [0x1E92E]={
+ arabic="d",
+ category="ll",
+ description="ADLAM SMALL LETTER O",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E92E,
+ },
+ [0x1E92F]={
+ arabic="d",
+ category="ll",
+ description="ADLAM SMALL LETTER DHA",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E92F,
+ },
+ [0x1E930]={
+ arabic="d",
+ category="ll",
+ description="ADLAM SMALL LETTER YHE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E930,
+ },
+ [0x1E931]={
+ arabic="d",
+ category="ll",
+ description="ADLAM SMALL LETTER WAW",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E931,
+ },
+ [0x1E932]={
+ arabic="d",
+ category="ll",
+ description="ADLAM SMALL LETTER NUN",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E932,
+ },
+ [0x1E933]={
+ arabic="d",
+ category="ll",
+ description="ADLAM SMALL LETTER KAF",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E933,
+ },
+ [0x1E934]={
+ arabic="d",
+ category="ll",
+ description="ADLAM SMALL LETTER YA",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E934,
+ },
+ [0x1E935]={
+ arabic="d",
+ category="ll",
+ description="ADLAM SMALL LETTER U",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E935,
+ },
+ [0x1E936]={
+ arabic="d",
+ category="ll",
+ description="ADLAM SMALL LETTER JIIM",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E936,
+ },
+ [0x1E937]={
+ arabic="d",
+ category="ll",
+ description="ADLAM SMALL LETTER CHI",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E937,
+ },
+ [0x1E938]={
+ arabic="d",
+ category="ll",
+ description="ADLAM SMALL LETTER HA",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E938,
+ },
+ [0x1E939]={
+ arabic="d",
+ category="ll",
+ description="ADLAM SMALL LETTER QAAF",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E939,
+ },
+ [0x1E93A]={
+ arabic="d",
+ category="ll",
+ description="ADLAM SMALL LETTER GA",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E93A,
+ },
+ [0x1E93B]={
+ arabic="d",
+ category="ll",
+ description="ADLAM SMALL LETTER NYA",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E93B,
+ },
+ [0x1E93C]={
+ arabic="d",
+ category="ll",
+ description="ADLAM SMALL LETTER TU",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E93C,
+ },
+ [0x1E93D]={
+ arabic="d",
+ category="ll",
+ description="ADLAM SMALL LETTER NHA",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E93D,
+ },
+ [0x1E93E]={
+ arabic="d",
+ category="ll",
+ description="ADLAM SMALL LETTER VA",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E93E,
+ },
+ [0x1E93F]={
+ arabic="d",
+ category="ll",
+ description="ADLAM SMALL LETTER KHA",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E93F,
+ },
+ [0x1E940]={
+ arabic="d",
+ category="ll",
+ description="ADLAM SMALL LETTER GBE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E940,
+ },
+ [0x1E941]={
+ arabic="d",
+ category="ll",
+ description="ADLAM SMALL LETTER ZAL",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E941,
+ },
+ [0x1E942]={
+ arabic="d",
+ category="ll",
+ description="ADLAM SMALL LETTER KPO",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E942,
+ },
+ [0x1E943]={
+ arabic="d",
+ category="ll",
+ description="ADLAM SMALL LETTER SHA",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x1E943,
+ },
+ [0x1E944]={
+ category="mn",
+ combining=0xE6,
+ description="ADLAM ALIF LENGTHENER",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E944,
+ },
+ [0x1E945]={
+ category="mn",
+ combining=0xE6,
+ description="ADLAM VOWEL LENGTHENER",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E945,
+ },
+ [0x1E946]={
+ category="mn",
+ combining=0xE6,
+ description="ADLAM GEMINATION MARK",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E946,
+ },
+ [0x1E947]={
+ category="mn",
+ combining=0xE6,
+ description="ADLAM HAMZA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E947,
+ },
+ [0x1E948]={
+ category="mn",
+ combining=0xE6,
+ description="ADLAM CONSONANT MODIFIER",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E948,
+ },
+ [0x1E949]={
+ category="mn",
+ combining=0xE6,
+ description="ADLAM GEMINATE CONSONANT MODIFIER",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E949,
+ },
+ [0x1E94A]={
+ category="mn",
+ combining=0x7,
+ description="ADLAM NUKTA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E94A,
+ },
+ [0x1E950]={
+ category="nd",
+ description="ADLAM DIGIT ZERO",
+ direction="r",
+ linebreak="nu",
+ unicodeslot=0x1E950,
+ },
+ [0x1E951]={
+ category="nd",
+ description="ADLAM DIGIT ONE",
+ direction="r",
+ linebreak="nu",
+ unicodeslot=0x1E951,
+ },
+ [0x1E952]={
+ category="nd",
+ description="ADLAM DIGIT TWO",
+ direction="r",
+ linebreak="nu",
+ unicodeslot=0x1E952,
+ },
+ [0x1E953]={
+ category="nd",
+ description="ADLAM DIGIT THREE",
+ direction="r",
+ linebreak="nu",
+ unicodeslot=0x1E953,
+ },
+ [0x1E954]={
+ category="nd",
+ description="ADLAM DIGIT FOUR",
+ direction="r",
+ linebreak="nu",
+ unicodeslot=0x1E954,
+ },
+ [0x1E955]={
+ category="nd",
+ description="ADLAM DIGIT FIVE",
+ direction="r",
+ linebreak="nu",
+ unicodeslot=0x1E955,
+ },
+ [0x1E956]={
+ category="nd",
+ description="ADLAM DIGIT SIX",
+ direction="r",
+ linebreak="nu",
+ unicodeslot=0x1E956,
+ },
+ [0x1E957]={
+ category="nd",
+ description="ADLAM DIGIT SEVEN",
+ direction="r",
+ linebreak="nu",
+ unicodeslot=0x1E957,
+ },
+ [0x1E958]={
+ category="nd",
+ description="ADLAM DIGIT EIGHT",
+ direction="r",
+ linebreak="nu",
+ unicodeslot=0x1E958,
+ },
+ [0x1E959]={
+ category="nd",
+ description="ADLAM DIGIT NINE",
+ direction="r",
+ linebreak="nu",
+ unicodeslot=0x1E959,
+ },
+ [0x1E95E]={
+ category="po",
+ description="ADLAM INITIAL EXCLAMATION MARK",
+ direction="r",
+ linebreak="op",
+ unicodeslot=0x1E95E,
+ },
+ [0x1E95F]={
+ category="po",
+ description="ADLAM INITIAL QUESTION MARK",
+ direction="r",
+ linebreak="op",
+ unicodeslot=0x1E95F,
+ },
[0x1EE00]={
category="lo",
comment="check math properties",
@@ -208471,14 +218791,12 @@ characters.data={
},
[0x1F004]={
category="so",
+ cjkwd="w",
description="MAHJONG TILE RED DRAGON",
direction="on",
linebreak="id",
unicodeslot=0x1F004,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x1F005]={
category="so",
@@ -209763,6 +220081,7 @@ characters.data={
},
[0x1F0CF]={
category="so",
+ cjkwd="w",
description="PLAYING CARD BLACK JOKER",
direction="on",
linebreak="id",
@@ -210920,6 +221239,7 @@ characters.data={
direction="on",
linebreak="al",
specials={ "super", 0x4D, 0x43 },
+ synonyms={ "marque de commerce" },
unicodeslot=0x1F16A,
},
[0x1F16B]={
@@ -210928,6 +221248,7 @@ characters.data={
direction="on",
linebreak="al",
specials={ "super", 0x4D, 0x44 },
+ synonyms={ "marque deposee" },
unicodeslot=0x1F16B,
},
[0x1F170]={
@@ -210937,10 +221258,7 @@ characters.data={
direction="l",
linebreak="ai",
unicodeslot=0x1F170,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x1F171]={
category="so",
@@ -210949,10 +221267,7 @@ characters.data={
direction="l",
linebreak="ai",
unicodeslot=0x1F171,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x1F172]={
category="so",
@@ -211057,10 +221372,7 @@ characters.data={
direction="l",
linebreak="ai",
unicodeslot=0x1F17E,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x1F17F]={
category="so",
@@ -211069,10 +221381,7 @@ characters.data={
direction="l",
linebreak="ai",
unicodeslot=0x1F17F,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x1F180]={
category="so",
@@ -211188,7 +221497,7 @@ characters.data={
},
[0x1F18E]={
category="so",
- cjkwd="a",
+ cjkwd="w",
description="NEGATIVE SQUARED AB",
direction="l",
linebreak="ai",
@@ -211213,7 +221522,7 @@ characters.data={
},
[0x1F191]={
category="so",
- cjkwd="a",
+ cjkwd="w",
description="SQUARED CL",
direction="l",
linebreak="ai",
@@ -211221,7 +221530,7 @@ characters.data={
},
[0x1F192]={
category="so",
- cjkwd="a",
+ cjkwd="w",
description="SQUARED COOL",
direction="l",
linebreak="ai",
@@ -211229,7 +221538,7 @@ characters.data={
},
[0x1F193]={
category="so",
- cjkwd="a",
+ cjkwd="w",
description="SQUARED FREE",
direction="l",
linebreak="ai",
@@ -211237,7 +221546,7 @@ characters.data={
},
[0x1F194]={
category="so",
- cjkwd="a",
+ cjkwd="w",
description="SQUARED ID",
direction="l",
linebreak="ai",
@@ -211245,7 +221554,7 @@ characters.data={
},
[0x1F195]={
category="so",
- cjkwd="a",
+ cjkwd="w",
description="SQUARED NEW",
direction="l",
linebreak="ai",
@@ -211253,7 +221562,7 @@ characters.data={
},
[0x1F196]={
category="so",
- cjkwd="a",
+ cjkwd="w",
description="SQUARED NG",
direction="l",
linebreak="ai",
@@ -211261,7 +221570,7 @@ characters.data={
},
[0x1F197]={
category="so",
- cjkwd="a",
+ cjkwd="w",
description="SQUARED OK",
direction="l",
linebreak="ai",
@@ -211269,7 +221578,7 @@ characters.data={
},
[0x1F198]={
category="so",
- cjkwd="a",
+ cjkwd="w",
description="SQUARED SOS",
direction="l",
linebreak="ai",
@@ -211277,7 +221586,7 @@ characters.data={
},
[0x1F199]={
category="so",
- cjkwd="a",
+ cjkwd="w",
description="SQUARED UP WITH EXCLAMATION MARK",
direction="l",
linebreak="ai",
@@ -211285,12 +221594,156 @@ characters.data={
},
[0x1F19A]={
category="so",
- cjkwd="a",
+ cjkwd="w",
description="SQUARED VS",
direction="l",
linebreak="ai",
unicodeslot=0x1F19A,
},
+ [0x1F19B]={
+ category="so",
+ cjkwd="a",
+ description="SQUARED THREE D",
+ direction="l",
+ linebreak="ai",
+ unicodeslot=0x1F19B,
+ },
+ [0x1F19C]={
+ category="so",
+ cjkwd="a",
+ description="SQUARED SECOND SCREEN",
+ direction="l",
+ linebreak="ai",
+ unicodeslot=0x1F19C,
+ },
+ [0x1F19D]={
+ category="so",
+ cjkwd="a",
+ description="SQUARED TWO K",
+ direction="l",
+ linebreak="ai",
+ unicodeslot=0x1F19D,
+ },
+ [0x1F19E]={
+ category="so",
+ cjkwd="a",
+ description="SQUARED FOUR K",
+ direction="l",
+ linebreak="ai",
+ unicodeslot=0x1F19E,
+ },
+ [0x1F19F]={
+ category="so",
+ cjkwd="a",
+ description="SQUARED EIGHT K",
+ direction="l",
+ linebreak="ai",
+ unicodeslot=0x1F19F,
+ },
+ [0x1F1A0]={
+ category="so",
+ cjkwd="a",
+ description="SQUARED FIVE POINT ONE",
+ direction="l",
+ linebreak="ai",
+ unicodeslot=0x1F1A0,
+ },
+ [0x1F1A1]={
+ category="so",
+ cjkwd="a",
+ description="SQUARED SEVEN POINT ONE",
+ direction="l",
+ linebreak="ai",
+ unicodeslot=0x1F1A1,
+ },
+ [0x1F1A2]={
+ category="so",
+ cjkwd="a",
+ description="SQUARED TWENTY-TWO POINT TWO",
+ direction="l",
+ linebreak="ai",
+ unicodeslot=0x1F1A2,
+ },
+ [0x1F1A3]={
+ category="so",
+ cjkwd="a",
+ description="SQUARED SIXTY P",
+ direction="l",
+ linebreak="ai",
+ unicodeslot=0x1F1A3,
+ },
+ [0x1F1A4]={
+ category="so",
+ cjkwd="a",
+ description="SQUARED ONE HUNDRED TWENTY P",
+ direction="l",
+ linebreak="ai",
+ unicodeslot=0x1F1A4,
+ },
+ [0x1F1A5]={
+ category="so",
+ cjkwd="a",
+ description="SQUARED LATIN SMALL LETTER D",
+ direction="l",
+ linebreak="ai",
+ unicodeslot=0x1F1A5,
+ },
+ [0x1F1A6]={
+ category="so",
+ cjkwd="a",
+ description="SQUARED HC",
+ direction="l",
+ linebreak="ai",
+ unicodeslot=0x1F1A6,
+ },
+ [0x1F1A7]={
+ category="so",
+ cjkwd="a",
+ description="SQUARED HDR",
+ direction="l",
+ linebreak="ai",
+ unicodeslot=0x1F1A7,
+ },
+ [0x1F1A8]={
+ category="so",
+ cjkwd="a",
+ description="SQUARED HI-RES",
+ direction="l",
+ linebreak="ai",
+ unicodeslot=0x1F1A8,
+ },
+ [0x1F1A9]={
+ category="so",
+ cjkwd="a",
+ description="SQUARED LOSSLESS",
+ direction="l",
+ linebreak="ai",
+ unicodeslot=0x1F1A9,
+ },
+ [0x1F1AA]={
+ category="so",
+ cjkwd="a",
+ description="SQUARED SHV",
+ direction="l",
+ linebreak="ai",
+ unicodeslot=0x1F1AA,
+ },
+ [0x1F1AB]={
+ category="so",
+ cjkwd="a",
+ description="SQUARED UHD",
+ direction="l",
+ linebreak="ai",
+ unicodeslot=0x1F1AB,
+ },
+ [0x1F1AC]={
+ category="so",
+ cjkwd="a",
+ description="SQUARED VOD",
+ direction="l",
+ linebreak="ai",
+ unicodeslot=0x1F1AC,
+ },
[0x1F1E6]={
category="so",
description="REGIONAL INDICATOR SYMBOL LETTER A",
@@ -211499,10 +221952,7 @@ characters.data={
linebreak="id",
specials={ "square", 0x30B5 },
unicodeslot=0x1F202,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x1F210]={
category="so",
@@ -211602,10 +222052,7 @@ characters.data={
linebreak="id",
specials={ "square", 0x7121 },
unicodeslot=0x1F21A,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x1F21B]={
category="so",
@@ -211795,10 +222242,7 @@ characters.data={
linebreak="id",
specials={ "square", 0x6307 },
unicodeslot=0x1F22F,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x1F230]={
category="so",
@@ -211871,10 +222315,7 @@ characters.data={
linebreak="id",
specials={ "square", 0x6708 },
unicodeslot=0x1F237,
- variants={
- [0xFE0E]="text style",
- [0xFE0F]="emoji style",
- },
+ variants=variants_emoji,
},
[0x1F238]={
category="so",
@@ -211903,6 +222344,15 @@ characters.data={
specials={ "square", 0x55B6 },
unicodeslot=0x1F23A,
},
+ [0x1F23B]={
+ category="so",
+ cjkwd="w",
+ description="SQUARED CJK UNIFIED IDEOGRAPH-914D",
+ direction="l",
+ linebreak="id",
+ specials={ "square", 0x914D },
+ unicodeslot=0x1F23B,
+ },
[0x1F240]={
category="so",
cjkwd="w",
@@ -212004,6 +222454,7 @@ characters.data={
},
[0x1F300]={
category="so",
+ cjkwd="w",
description="CYCLONE",
direction="on",
linebreak="id",
@@ -212011,6 +222462,7 @@ characters.data={
},
[0x1F301]={
category="so",
+ cjkwd="w",
description="FOGGY",
direction="on",
linebreak="id",
@@ -212018,6 +222470,7 @@ characters.data={
},
[0x1F302]={
category="so",
+ cjkwd="w",
description="CLOSED UMBRELLA",
direction="on",
linebreak="id",
@@ -212025,6 +222478,7 @@ characters.data={
},
[0x1F303]={
category="so",
+ cjkwd="w",
description="NIGHT WITH STARS",
direction="on",
linebreak="id",
@@ -212032,6 +222486,7 @@ characters.data={
},
[0x1F304]={
category="so",
+ cjkwd="w",
description="SUNRISE OVER MOUNTAINS",
direction="on",
linebreak="id",
@@ -212039,6 +222494,7 @@ characters.data={
},
[0x1F305]={
category="so",
+ cjkwd="w",
description="SUNRISE",
direction="on",
linebreak="id",
@@ -212046,6 +222502,7 @@ characters.data={
},
[0x1F306]={
category="so",
+ cjkwd="w",
description="CITYSCAPE AT DUSK",
direction="on",
linebreak="id",
@@ -212053,6 +222510,7 @@ characters.data={
},
[0x1F307]={
category="so",
+ cjkwd="w",
description="SUNSET OVER BUILDINGS",
direction="on",
linebreak="id",
@@ -212060,6 +222518,7 @@ characters.data={
},
[0x1F308]={
category="so",
+ cjkwd="w",
description="RAINBOW",
direction="on",
linebreak="id",
@@ -212067,6 +222526,7 @@ characters.data={
},
[0x1F309]={
category="so",
+ cjkwd="w",
description="BRIDGE AT NIGHT",
direction="on",
linebreak="id",
@@ -212074,6 +222534,7 @@ characters.data={
},
[0x1F30A]={
category="so",
+ cjkwd="w",
description="WATER WAVE",
direction="on",
linebreak="id",
@@ -212081,6 +222542,7 @@ characters.data={
},
[0x1F30B]={
category="so",
+ cjkwd="w",
description="VOLCANO",
direction="on",
linebreak="id",
@@ -212088,6 +222550,7 @@ characters.data={
},
[0x1F30C]={
category="so",
+ cjkwd="w",
description="MILKY WAY",
direction="on",
linebreak="id",
@@ -212095,6 +222558,7 @@ characters.data={
},
[0x1F30D]={
category="so",
+ cjkwd="w",
description="EARTH GLOBE EUROPE-AFRICA",
direction="on",
linebreak="id",
@@ -212102,6 +222566,7 @@ characters.data={
},
[0x1F30E]={
category="so",
+ cjkwd="w",
description="EARTH GLOBE AMERICAS",
direction="on",
linebreak="id",
@@ -212109,6 +222574,7 @@ characters.data={
},
[0x1F30F]={
category="so",
+ cjkwd="w",
description="EARTH GLOBE ASIA-AUSTRALIA",
direction="on",
linebreak="id",
@@ -212116,6 +222582,7 @@ characters.data={
},
[0x1F310]={
category="so",
+ cjkwd="w",
description="GLOBE WITH MERIDIANS",
direction="on",
linebreak="id",
@@ -212123,6 +222590,7 @@ characters.data={
},
[0x1F311]={
category="so",
+ cjkwd="w",
description="NEW MOON SYMBOL",
direction="on",
linebreak="id",
@@ -212130,6 +222598,7 @@ characters.data={
},
[0x1F312]={
category="so",
+ cjkwd="w",
description="WAXING CRESCENT MOON SYMBOL",
direction="on",
linebreak="id",
@@ -212137,6 +222606,7 @@ characters.data={
},
[0x1F313]={
category="so",
+ cjkwd="w",
description="FIRST QUARTER MOON SYMBOL",
direction="on",
linebreak="id",
@@ -212144,6 +222614,7 @@ characters.data={
},
[0x1F314]={
category="so",
+ cjkwd="w",
description="WAXING GIBBOUS MOON SYMBOL",
direction="on",
linebreak="id",
@@ -212151,6 +222622,7 @@ characters.data={
},
[0x1F315]={
category="so",
+ cjkwd="w",
description="FULL MOON SYMBOL",
direction="on",
linebreak="id",
@@ -212158,6 +222630,7 @@ characters.data={
},
[0x1F316]={
category="so",
+ cjkwd="w",
description="WANING GIBBOUS MOON SYMBOL",
direction="on",
linebreak="id",
@@ -212165,6 +222638,7 @@ characters.data={
},
[0x1F317]={
category="so",
+ cjkwd="w",
description="LAST QUARTER MOON SYMBOL",
direction="on",
linebreak="id",
@@ -212172,6 +222646,7 @@ characters.data={
},
[0x1F318]={
category="so",
+ cjkwd="w",
description="WANING CRESCENT MOON SYMBOL",
direction="on",
linebreak="id",
@@ -212179,6 +222654,7 @@ characters.data={
},
[0x1F319]={
category="so",
+ cjkwd="w",
description="CRESCENT MOON",
direction="on",
linebreak="id",
@@ -212186,6 +222662,7 @@ characters.data={
},
[0x1F31A]={
category="so",
+ cjkwd="w",
description="NEW MOON WITH FACE",
direction="on",
linebreak="id",
@@ -212193,6 +222670,7 @@ characters.data={
},
[0x1F31B]={
category="so",
+ cjkwd="w",
description="FIRST QUARTER MOON WITH FACE",
direction="on",
linebreak="id",
@@ -212200,6 +222678,7 @@ characters.data={
},
[0x1F31C]={
category="so",
+ cjkwd="w",
description="LAST QUARTER MOON WITH FACE",
direction="on",
linebreak="id",
@@ -212207,6 +222686,7 @@ characters.data={
},
[0x1F31D]={
category="so",
+ cjkwd="w",
description="FULL MOON WITH FACE",
direction="on",
linebreak="id",
@@ -212214,6 +222694,7 @@ characters.data={
},
[0x1F31E]={
category="so",
+ cjkwd="w",
description="SUN WITH FACE",
direction="on",
linebreak="id",
@@ -212221,6 +222702,7 @@ characters.data={
},
[0x1F31F]={
category="so",
+ cjkwd="w",
description="GLOWING STAR",
direction="on",
linebreak="id",
@@ -212228,6 +222710,7 @@ characters.data={
},
[0x1F320]={
category="so",
+ cjkwd="w",
description="SHOOTING STAR",
direction="on",
linebreak="id",
@@ -212239,6 +222722,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F321,
+ variants=variants_emoji,
},
[0x1F322]={
category="so",
@@ -212260,6 +222744,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F324,
+ variants=variants_emoji,
},
[0x1F325]={
category="so",
@@ -212267,6 +222752,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F325,
+ variants=variants_emoji,
},
[0x1F326]={
category="so",
@@ -212274,6 +222760,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F326,
+ variants=variants_emoji,
},
[0x1F327]={
category="so",
@@ -212281,6 +222768,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F327,
+ variants=variants_emoji,
},
[0x1F328]={
category="so",
@@ -212288,6 +222776,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F328,
+ variants=variants_emoji,
},
[0x1F329]={
category="so",
@@ -212295,6 +222784,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F329,
+ variants=variants_emoji,
},
[0x1F32A]={
category="so",
@@ -212302,6 +222792,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F32A,
+ variants=variants_emoji,
},
[0x1F32B]={
category="so",
@@ -212309,6 +222800,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F32B,
+ variants=variants_emoji,
},
[0x1F32C]={
category="so",
@@ -212316,9 +222808,11 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F32C,
+ variants=variants_emoji,
},
[0x1F32D]={
category="so",
+ cjkwd="w",
description="HOT DOG",
direction="on",
linebreak="id",
@@ -212326,6 +222820,7 @@ characters.data={
},
[0x1F32E]={
category="so",
+ cjkwd="w",
description="TACO",
direction="on",
linebreak="id",
@@ -212333,6 +222828,7 @@ characters.data={
},
[0x1F32F]={
category="so",
+ cjkwd="w",
description="BURRITO",
direction="on",
linebreak="id",
@@ -212340,6 +222836,7 @@ characters.data={
},
[0x1F330]={
category="so",
+ cjkwd="w",
description="CHESTNUT",
direction="on",
linebreak="id",
@@ -212347,6 +222844,7 @@ characters.data={
},
[0x1F331]={
category="so",
+ cjkwd="w",
description="SEEDLING",
direction="on",
linebreak="id",
@@ -212354,6 +222852,7 @@ characters.data={
},
[0x1F332]={
category="so",
+ cjkwd="w",
description="EVERGREEN TREE",
direction="on",
linebreak="id",
@@ -212361,6 +222860,7 @@ characters.data={
},
[0x1F333]={
category="so",
+ cjkwd="w",
description="DECIDUOUS TREE",
direction="on",
linebreak="id",
@@ -212368,6 +222868,7 @@ characters.data={
},
[0x1F334]={
category="so",
+ cjkwd="w",
description="PALM TREE",
direction="on",
linebreak="id",
@@ -212375,6 +222876,7 @@ characters.data={
},
[0x1F335]={
category="so",
+ cjkwd="w",
description="CACTUS",
direction="on",
linebreak="id",
@@ -212385,10 +222887,13 @@ characters.data={
description="HOT PEPPER",
direction="on",
linebreak="id",
+ synonyms={ "spicy" },
unicodeslot=0x1F336,
+ variants=variants_emoji,
},
[0x1F337]={
category="so",
+ cjkwd="w",
description="TULIP",
direction="on",
linebreak="id",
@@ -212396,6 +222901,7 @@ characters.data={
},
[0x1F338]={
category="so",
+ cjkwd="w",
description="CHERRY BLOSSOM",
direction="on",
linebreak="id",
@@ -212403,6 +222909,7 @@ characters.data={
},
[0x1F339]={
category="so",
+ cjkwd="w",
description="ROSE",
direction="on",
linebreak="id",
@@ -212410,6 +222917,7 @@ characters.data={
},
[0x1F33A]={
category="so",
+ cjkwd="w",
description="HIBISCUS",
direction="on",
linebreak="id",
@@ -212417,6 +222925,7 @@ characters.data={
},
[0x1F33B]={
category="so",
+ cjkwd="w",
description="SUNFLOWER",
direction="on",
linebreak="id",
@@ -212424,6 +222933,7 @@ characters.data={
},
[0x1F33C]={
category="so",
+ cjkwd="w",
description="BLOSSOM",
direction="on",
linebreak="id",
@@ -212431,6 +222941,7 @@ characters.data={
},
[0x1F33D]={
category="so",
+ cjkwd="w",
description="EAR OF MAIZE",
direction="on",
linebreak="id",
@@ -212438,6 +222949,7 @@ characters.data={
},
[0x1F33E]={
category="so",
+ cjkwd="w",
description="EAR OF RICE",
direction="on",
linebreak="id",
@@ -212445,6 +222957,7 @@ characters.data={
},
[0x1F33F]={
category="so",
+ cjkwd="w",
description="HERB",
direction="on",
linebreak="id",
@@ -212452,6 +222965,7 @@ characters.data={
},
[0x1F340]={
category="so",
+ cjkwd="w",
description="FOUR LEAF CLOVER",
direction="on",
linebreak="id",
@@ -212459,6 +222973,7 @@ characters.data={
},
[0x1F341]={
category="so",
+ cjkwd="w",
description="MAPLE LEAF",
direction="on",
linebreak="id",
@@ -212466,6 +222981,7 @@ characters.data={
},
[0x1F342]={
category="so",
+ cjkwd="w",
description="FALLEN LEAF",
direction="on",
linebreak="id",
@@ -212473,6 +222989,7 @@ characters.data={
},
[0x1F343]={
category="so",
+ cjkwd="w",
description="LEAF FLUTTERING IN WIND",
direction="on",
linebreak="id",
@@ -212480,6 +222997,7 @@ characters.data={
},
[0x1F344]={
category="so",
+ cjkwd="w",
description="MUSHROOM",
direction="on",
linebreak="id",
@@ -212487,6 +223005,7 @@ characters.data={
},
[0x1F345]={
category="so",
+ cjkwd="w",
description="TOMATO",
direction="on",
linebreak="id",
@@ -212494,6 +223013,7 @@ characters.data={
},
[0x1F346]={
category="so",
+ cjkwd="w",
description="AUBERGINE",
direction="on",
linebreak="id",
@@ -212501,6 +223021,7 @@ characters.data={
},
[0x1F347]={
category="so",
+ cjkwd="w",
description="GRAPES",
direction="on",
linebreak="id",
@@ -212508,6 +223029,7 @@ characters.data={
},
[0x1F348]={
category="so",
+ cjkwd="w",
description="MELON",
direction="on",
linebreak="id",
@@ -212515,6 +223037,7 @@ characters.data={
},
[0x1F349]={
category="so",
+ cjkwd="w",
description="WATERMELON",
direction="on",
linebreak="id",
@@ -212522,6 +223045,7 @@ characters.data={
},
[0x1F34A]={
category="so",
+ cjkwd="w",
description="TANGERINE",
direction="on",
linebreak="id",
@@ -212529,6 +223053,7 @@ characters.data={
},
[0x1F34B]={
category="so",
+ cjkwd="w",
description="LEMON",
direction="on",
linebreak="id",
@@ -212536,6 +223061,7 @@ characters.data={
},
[0x1F34C]={
category="so",
+ cjkwd="w",
description="BANANA",
direction="on",
linebreak="id",
@@ -212543,6 +223069,7 @@ characters.data={
},
[0x1F34D]={
category="so",
+ cjkwd="w",
description="PINEAPPLE",
direction="on",
linebreak="id",
@@ -212550,6 +223077,7 @@ characters.data={
},
[0x1F34E]={
category="so",
+ cjkwd="w",
description="RED APPLE",
direction="on",
linebreak="id",
@@ -212557,6 +223085,7 @@ characters.data={
},
[0x1F34F]={
category="so",
+ cjkwd="w",
description="GREEN APPLE",
direction="on",
linebreak="id",
@@ -212564,6 +223093,7 @@ characters.data={
},
[0x1F350]={
category="so",
+ cjkwd="w",
description="PEAR",
direction="on",
linebreak="id",
@@ -212571,6 +223101,7 @@ characters.data={
},
[0x1F351]={
category="so",
+ cjkwd="w",
description="PEACH",
direction="on",
linebreak="id",
@@ -212578,6 +223109,7 @@ characters.data={
},
[0x1F352]={
category="so",
+ cjkwd="w",
description="CHERRIES",
direction="on",
linebreak="id",
@@ -212585,6 +223117,7 @@ characters.data={
},
[0x1F353]={
category="so",
+ cjkwd="w",
description="STRAWBERRY",
direction="on",
linebreak="id",
@@ -212592,6 +223125,7 @@ characters.data={
},
[0x1F354]={
category="so",
+ cjkwd="w",
description="HAMBURGER",
direction="on",
linebreak="id",
@@ -212599,6 +223133,7 @@ characters.data={
},
[0x1F355]={
category="so",
+ cjkwd="w",
description="SLICE OF PIZZA",
direction="on",
linebreak="id",
@@ -212606,6 +223141,7 @@ characters.data={
},
[0x1F356]={
category="so",
+ cjkwd="w",
description="MEAT ON BONE",
direction="on",
linebreak="id",
@@ -212613,6 +223149,7 @@ characters.data={
},
[0x1F357]={
category="so",
+ cjkwd="w",
description="POULTRY LEG",
direction="on",
linebreak="id",
@@ -212620,6 +223157,7 @@ characters.data={
},
[0x1F358]={
category="so",
+ cjkwd="w",
description="RICE CRACKER",
direction="on",
linebreak="id",
@@ -212627,6 +223165,7 @@ characters.data={
},
[0x1F359]={
category="so",
+ cjkwd="w",
description="RICE BALL",
direction="on",
linebreak="id",
@@ -212634,6 +223173,7 @@ characters.data={
},
[0x1F35A]={
category="so",
+ cjkwd="w",
description="COOKED RICE",
direction="on",
linebreak="id",
@@ -212641,6 +223181,7 @@ characters.data={
},
[0x1F35B]={
category="so",
+ cjkwd="w",
description="CURRY AND RICE",
direction="on",
linebreak="id",
@@ -212648,6 +223189,7 @@ characters.data={
},
[0x1F35C]={
category="so",
+ cjkwd="w",
description="STEAMING BOWL",
direction="on",
linebreak="id",
@@ -212655,6 +223197,7 @@ characters.data={
},
[0x1F35D]={
category="so",
+ cjkwd="w",
description="SPAGHETTI",
direction="on",
linebreak="id",
@@ -212662,6 +223205,7 @@ characters.data={
},
[0x1F35E]={
category="so",
+ cjkwd="w",
description="BREAD",
direction="on",
linebreak="id",
@@ -212669,6 +223213,7 @@ characters.data={
},
[0x1F35F]={
category="so",
+ cjkwd="w",
description="FRENCH FRIES",
direction="on",
linebreak="id",
@@ -212676,6 +223221,7 @@ characters.data={
},
[0x1F360]={
category="so",
+ cjkwd="w",
description="ROASTED SWEET POTATO",
direction="on",
linebreak="id",
@@ -212683,6 +223229,7 @@ characters.data={
},
[0x1F361]={
category="so",
+ cjkwd="w",
description="DANGO",
direction="on",
linebreak="id",
@@ -212690,6 +223237,7 @@ characters.data={
},
[0x1F362]={
category="so",
+ cjkwd="w",
description="ODEN",
direction="on",
linebreak="id",
@@ -212697,6 +223245,7 @@ characters.data={
},
[0x1F363]={
category="so",
+ cjkwd="w",
description="SUSHI",
direction="on",
linebreak="id",
@@ -212704,6 +223253,7 @@ characters.data={
},
[0x1F364]={
category="so",
+ cjkwd="w",
description="FRIED SHRIMP",
direction="on",
linebreak="id",
@@ -212711,6 +223261,7 @@ characters.data={
},
[0x1F365]={
category="so",
+ cjkwd="w",
description="FISH CAKE WITH SWIRL DESIGN",
direction="on",
linebreak="id",
@@ -212718,6 +223269,7 @@ characters.data={
},
[0x1F366]={
category="so",
+ cjkwd="w",
description="SOFT ICE CREAM",
direction="on",
linebreak="id",
@@ -212725,6 +223277,7 @@ characters.data={
},
[0x1F367]={
category="so",
+ cjkwd="w",
description="SHAVED ICE",
direction="on",
linebreak="id",
@@ -212732,6 +223285,7 @@ characters.data={
},
[0x1F368]={
category="so",
+ cjkwd="w",
description="ICE CREAM",
direction="on",
linebreak="id",
@@ -212739,6 +223293,7 @@ characters.data={
},
[0x1F369]={
category="so",
+ cjkwd="w",
description="DOUGHNUT",
direction="on",
linebreak="id",
@@ -212746,6 +223301,7 @@ characters.data={
},
[0x1F36A]={
category="so",
+ cjkwd="w",
description="COOKIE",
direction="on",
linebreak="id",
@@ -212753,6 +223309,7 @@ characters.data={
},
[0x1F36B]={
category="so",
+ cjkwd="w",
description="CHOCOLATE BAR",
direction="on",
linebreak="id",
@@ -212760,6 +223317,7 @@ characters.data={
},
[0x1F36C]={
category="so",
+ cjkwd="w",
description="CANDY",
direction="on",
linebreak="id",
@@ -212767,6 +223325,7 @@ characters.data={
},
[0x1F36D]={
category="so",
+ cjkwd="w",
description="LOLLIPOP",
direction="on",
linebreak="id",
@@ -212774,6 +223333,7 @@ characters.data={
},
[0x1F36E]={
category="so",
+ cjkwd="w",
description="CUSTARD",
direction="on",
linebreak="id",
@@ -212781,6 +223341,7 @@ characters.data={
},
[0x1F36F]={
category="so",
+ cjkwd="w",
description="HONEY POT",
direction="on",
linebreak="id",
@@ -212788,6 +223349,7 @@ characters.data={
},
[0x1F370]={
category="so",
+ cjkwd="w",
description="SHORTCAKE",
direction="on",
linebreak="id",
@@ -212795,6 +223357,7 @@ characters.data={
},
[0x1F371]={
category="so",
+ cjkwd="w",
description="BENTO BOX",
direction="on",
linebreak="id",
@@ -212802,6 +223365,7 @@ characters.data={
},
[0x1F372]={
category="so",
+ cjkwd="w",
description="POT OF FOOD",
direction="on",
linebreak="id",
@@ -212809,6 +223373,7 @@ characters.data={
},
[0x1F373]={
category="so",
+ cjkwd="w",
description="COOKING",
direction="on",
linebreak="id",
@@ -212816,13 +223381,16 @@ characters.data={
},
[0x1F374]={
category="so",
+ cjkwd="w",
description="FORK AND KNIFE",
direction="on",
linebreak="id",
+ synonyms={ "meal (glyph may vary) restaurant" },
unicodeslot=0x1F374,
},
[0x1F375]={
category="so",
+ cjkwd="w",
description="TEACUP WITHOUT HANDLE",
direction="on",
linebreak="id",
@@ -212830,6 +223398,7 @@ characters.data={
},
[0x1F376]={
category="so",
+ cjkwd="w",
description="SAKE BOTTLE AND CUP",
direction="on",
linebreak="id",
@@ -212837,6 +223406,7 @@ characters.data={
},
[0x1F377]={
category="so",
+ cjkwd="w",
description="WINE GLASS",
direction="on",
linebreak="id",
@@ -212844,6 +223414,7 @@ characters.data={
},
[0x1F378]={
category="so",
+ cjkwd="w",
description="COCKTAIL GLASS",
direction="on",
linebreak="id",
@@ -212851,6 +223422,7 @@ characters.data={
},
[0x1F379]={
category="so",
+ cjkwd="w",
description="TROPICAL DRINK",
direction="on",
linebreak="id",
@@ -212858,6 +223430,7 @@ characters.data={
},
[0x1F37A]={
category="so",
+ cjkwd="w",
description="BEER MUG",
direction="on",
linebreak="id",
@@ -212865,6 +223438,7 @@ characters.data={
},
[0x1F37B]={
category="so",
+ cjkwd="w",
description="CLINKING BEER MUGS",
direction="on",
linebreak="id",
@@ -212872,6 +223446,7 @@ characters.data={
},
[0x1F37C]={
category="so",
+ cjkwd="w",
description="BABY BOTTLE",
direction="on",
linebreak="id",
@@ -212882,10 +223457,13 @@ characters.data={
description="FORK AND KNIFE WITH PLATE",
direction="on",
linebreak="id",
+ synonyms={ "dining available symbol", "food available symbol" },
unicodeslot=0x1F37D,
+ variants=variants_emoji,
},
[0x1F37E]={
category="so",
+ cjkwd="w",
description="BOTTLE WITH POPPING CORK",
direction="on",
linebreak="id",
@@ -212893,6 +223471,7 @@ characters.data={
},
[0x1F37F]={
category="so",
+ cjkwd="w",
description="POPCORN",
direction="on",
linebreak="id",
@@ -212900,6 +223479,7 @@ characters.data={
},
[0x1F380]={
category="so",
+ cjkwd="w",
description="RIBBON",
direction="on",
linebreak="id",
@@ -212907,6 +223487,7 @@ characters.data={
},
[0x1F381]={
category="so",
+ cjkwd="w",
description="WRAPPED PRESENT",
direction="on",
linebreak="id",
@@ -212914,6 +223495,7 @@ characters.data={
},
[0x1F382]={
category="so",
+ cjkwd="w",
description="BIRTHDAY CAKE",
direction="on",
linebreak="id",
@@ -212921,6 +223503,7 @@ characters.data={
},
[0x1F383]={
category="so",
+ cjkwd="w",
description="JACK-O-LANTERN",
direction="on",
linebreak="id",
@@ -212928,6 +223511,7 @@ characters.data={
},
[0x1F384]={
category="so",
+ cjkwd="w",
description="CHRISTMAS TREE",
direction="on",
linebreak="id",
@@ -212935,13 +223519,16 @@ characters.data={
},
[0x1F385]={
category="so",
+ cjkwd="w",
description="FATHER CHRISTMAS",
direction="on",
- linebreak="id",
+ linebreak="eb",
+ synonyms={ "santa claus" },
unicodeslot=0x1F385,
},
[0x1F386]={
category="so",
+ cjkwd="w",
description="FIREWORKS",
direction="on",
linebreak="id",
@@ -212949,6 +223536,7 @@ characters.data={
},
[0x1F387]={
category="so",
+ cjkwd="w",
description="FIREWORK SPARKLER",
direction="on",
linebreak="id",
@@ -212956,6 +223544,7 @@ characters.data={
},
[0x1F388]={
category="so",
+ cjkwd="w",
description="BALLOON",
direction="on",
linebreak="id",
@@ -212963,6 +223552,7 @@ characters.data={
},
[0x1F389]={
category="so",
+ cjkwd="w",
description="PARTY POPPER",
direction="on",
linebreak="id",
@@ -212970,6 +223560,7 @@ characters.data={
},
[0x1F38A]={
category="so",
+ cjkwd="w",
description="CONFETTI BALL",
direction="on",
linebreak="id",
@@ -212977,6 +223568,7 @@ characters.data={
},
[0x1F38B]={
category="so",
+ cjkwd="w",
description="TANABATA TREE",
direction="on",
linebreak="id",
@@ -212984,6 +223576,7 @@ characters.data={
},
[0x1F38C]={
category="so",
+ cjkwd="w",
description="CROSSED FLAGS",
direction="on",
linebreak="id",
@@ -212991,6 +223584,7 @@ characters.data={
},
[0x1F38D]={
category="so",
+ cjkwd="w",
description="PINE DECORATION",
direction="on",
linebreak="id",
@@ -212998,6 +223592,7 @@ characters.data={
},
[0x1F38E]={
category="so",
+ cjkwd="w",
description="JAPANESE DOLLS",
direction="on",
linebreak="id",
@@ -213005,6 +223600,7 @@ characters.data={
},
[0x1F38F]={
category="so",
+ cjkwd="w",
description="CARP STREAMER",
direction="on",
linebreak="id",
@@ -213012,6 +223608,7 @@ characters.data={
},
[0x1F390]={
category="so",
+ cjkwd="w",
description="WIND CHIME",
direction="on",
linebreak="id",
@@ -213019,6 +223616,7 @@ characters.data={
},
[0x1F391]={
category="so",
+ cjkwd="w",
description="MOON VIEWING CEREMONY",
direction="on",
linebreak="id",
@@ -213026,6 +223624,7 @@ characters.data={
},
[0x1F392]={
category="so",
+ cjkwd="w",
description="SCHOOL SATCHEL",
direction="on",
linebreak="id",
@@ -213033,9 +223632,11 @@ characters.data={
},
[0x1F393]={
category="so",
+ cjkwd="w",
description="GRADUATION CAP",
direction="on",
linebreak="id",
+ synonyms={ "mortarboard" },
unicodeslot=0x1F393,
},
[0x1F394]={
@@ -213058,6 +223659,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F396,
+ variants=variants_emoji,
},
[0x1F397]={
category="so",
@@ -213065,6 +223667,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F397,
+ variants=variants_emoji,
},
[0x1F398]={
category="so",
@@ -213079,6 +223682,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F399,
+ variants=variants_emoji,
},
[0x1F39A]={
category="so",
@@ -213086,6 +223690,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F39A,
+ variants=variants_emoji,
},
[0x1F39B]={
category="so",
@@ -213093,6 +223698,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F39B,
+ variants=variants_emoji,
},
[0x1F39C]={
category="so",
@@ -213114,6 +223720,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F39E,
+ variants=variants_emoji,
},
[0x1F39F]={
category="so",
@@ -213121,9 +223728,11 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F39F,
+ variants=variants_emoji,
},
[0x1F3A0]={
category="so",
+ cjkwd="w",
description="CAROUSEL HORSE",
direction="on",
linebreak="id",
@@ -213131,6 +223740,7 @@ characters.data={
},
[0x1F3A1]={
category="so",
+ cjkwd="w",
description="FERRIS WHEEL",
direction="on",
linebreak="id",
@@ -213138,6 +223748,7 @@ characters.data={
},
[0x1F3A2]={
category="so",
+ cjkwd="w",
description="ROLLER COASTER",
direction="on",
linebreak="id",
@@ -213145,6 +223756,7 @@ characters.data={
},
[0x1F3A3]={
category="so",
+ cjkwd="w",
description="FISHING POLE AND FISH",
direction="on",
linebreak="id",
@@ -213152,6 +223764,7 @@ characters.data={
},
[0x1F3A4]={
category="so",
+ cjkwd="w",
description="MICROPHONE",
direction="on",
linebreak="id",
@@ -213159,6 +223772,7 @@ characters.data={
},
[0x1F3A5]={
category="so",
+ cjkwd="w",
description="MOVIE CAMERA",
direction="on",
linebreak="id",
@@ -213166,6 +223780,7 @@ characters.data={
},
[0x1F3A6]={
category="so",
+ cjkwd="w",
description="CINEMA",
direction="on",
linebreak="id",
@@ -213173,6 +223788,7 @@ characters.data={
},
[0x1F3A7]={
category="so",
+ cjkwd="w",
description="HEADPHONE",
direction="on",
linebreak="id",
@@ -213180,6 +223796,7 @@ characters.data={
},
[0x1F3A8]={
category="so",
+ cjkwd="w",
description="ARTIST PALETTE",
direction="on",
linebreak="id",
@@ -213187,6 +223804,7 @@ characters.data={
},
[0x1F3A9]={
category="so",
+ cjkwd="w",
description="TOP HAT",
direction="on",
linebreak="id",
@@ -213194,6 +223812,7 @@ characters.data={
},
[0x1F3AA]={
category="so",
+ cjkwd="w",
description="CIRCUS TENT",
direction="on",
linebreak="id",
@@ -213201,6 +223820,7 @@ characters.data={
},
[0x1F3AB]={
category="so",
+ cjkwd="w",
description="TICKET",
direction="on",
linebreak="id",
@@ -213208,6 +223828,7 @@ characters.data={
},
[0x1F3AC]={
category="so",
+ cjkwd="w",
description="CLAPPER BOARD",
direction="on",
linebreak="id",
@@ -213215,13 +223836,16 @@ characters.data={
},
[0x1F3AD]={
category="so",
+ cjkwd="w",
description="PERFORMING ARTS",
direction="on",
linebreak="id",
+ synonyms={ "masks of comedy and tragedy", "theater masks" },
unicodeslot=0x1F3AD,
},
[0x1F3AE]={
category="so",
+ cjkwd="w",
description="VIDEO GAME",
direction="on",
linebreak="id",
@@ -213229,6 +223853,7 @@ characters.data={
},
[0x1F3AF]={
category="so",
+ cjkwd="w",
description="DIRECT HIT",
direction="on",
linebreak="id",
@@ -213236,6 +223861,7 @@ characters.data={
},
[0x1F3B0]={
category="so",
+ cjkwd="w",
description="SLOT MACHINE",
direction="on",
linebreak="id",
@@ -213243,6 +223869,7 @@ characters.data={
},
[0x1F3B1]={
category="so",
+ cjkwd="w",
description="BILLIARDS",
direction="on",
linebreak="id",
@@ -213250,6 +223877,7 @@ characters.data={
},
[0x1F3B2]={
category="so",
+ cjkwd="w",
description="GAME DIE",
direction="on",
linebreak="id",
@@ -213257,6 +223885,7 @@ characters.data={
},
[0x1F3B3]={
category="so",
+ cjkwd="w",
description="BOWLING",
direction="on",
linebreak="id",
@@ -213264,6 +223893,7 @@ characters.data={
},
[0x1F3B4]={
category="so",
+ cjkwd="w",
description="FLOWER PLAYING CARDS",
direction="on",
linebreak="id",
@@ -213271,6 +223901,7 @@ characters.data={
},
[0x1F3B5]={
category="so",
+ cjkwd="w",
description="MUSICAL NOTE",
direction="on",
linebreak="al",
@@ -213278,6 +223909,7 @@ characters.data={
},
[0x1F3B6]={
category="so",
+ cjkwd="w",
description="MULTIPLE MUSICAL NOTES",
direction="on",
linebreak="al",
@@ -213285,6 +223917,7 @@ characters.data={
},
[0x1F3B7]={
category="so",
+ cjkwd="w",
description="SAXOPHONE",
direction="on",
linebreak="id",
@@ -213292,6 +223925,7 @@ characters.data={
},
[0x1F3B8]={
category="so",
+ cjkwd="w",
description="GUITAR",
direction="on",
linebreak="id",
@@ -213299,6 +223933,7 @@ characters.data={
},
[0x1F3B9]={
category="so",
+ cjkwd="w",
description="MUSICAL KEYBOARD",
direction="on",
linebreak="id",
@@ -213306,6 +223941,7 @@ characters.data={
},
[0x1F3BA]={
category="so",
+ cjkwd="w",
description="TRUMPET",
direction="on",
linebreak="id",
@@ -213313,6 +223949,7 @@ characters.data={
},
[0x1F3BB]={
category="so",
+ cjkwd="w",
description="VIOLIN",
direction="on",
linebreak="id",
@@ -213320,6 +223957,7 @@ characters.data={
},
[0x1F3BC]={
category="so",
+ cjkwd="w",
description="MUSICAL SCORE",
direction="on",
linebreak="al",
@@ -213327,6 +223965,7 @@ characters.data={
},
[0x1F3BD]={
category="so",
+ cjkwd="w",
description="RUNNING SHIRT WITH SASH",
direction="on",
linebreak="id",
@@ -213334,6 +223973,7 @@ characters.data={
},
[0x1F3BE]={
category="so",
+ cjkwd="w",
description="TENNIS RACQUET AND BALL",
direction="on",
linebreak="id",
@@ -213341,6 +223981,7 @@ characters.data={
},
[0x1F3BF]={
category="so",
+ cjkwd="w",
description="SKI AND SKI BOOT",
direction="on",
linebreak="id",
@@ -213348,6 +223989,7 @@ characters.data={
},
[0x1F3C0]={
category="so",
+ cjkwd="w",
description="BASKETBALL AND HOOP",
direction="on",
linebreak="id",
@@ -213355,6 +223997,7 @@ characters.data={
},
[0x1F3C1]={
category="so",
+ cjkwd="w",
description="CHEQUERED FLAG",
direction="on",
linebreak="id",
@@ -213362,6 +224005,7 @@ characters.data={
},
[0x1F3C2]={
category="so",
+ cjkwd="w",
description="SNOWBOARDER",
direction="on",
linebreak="id",
@@ -213369,20 +224013,23 @@ characters.data={
},
[0x1F3C3]={
category="so",
+ cjkwd="w",
description="RUNNER",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F3C3,
},
[0x1F3C4]={
category="so",
+ cjkwd="w",
description="SURFER",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F3C4,
},
[0x1F3C5]={
category="so",
+ cjkwd="w",
description="SPORTS MEDAL",
direction="on",
linebreak="id",
@@ -213390,6 +224037,7 @@ characters.data={
},
[0x1F3C6]={
category="so",
+ cjkwd="w",
description="TROPHY",
direction="on",
linebreak="id",
@@ -213397,6 +224045,7 @@ characters.data={
},
[0x1F3C7]={
category="so",
+ cjkwd="w",
description="HORSE RACING",
direction="on",
linebreak="id",
@@ -213404,6 +224053,7 @@ characters.data={
},
[0x1F3C8]={
category="so",
+ cjkwd="w",
description="AMERICAN FOOTBALL",
direction="on",
linebreak="id",
@@ -213411,6 +224061,7 @@ characters.data={
},
[0x1F3C9]={
category="so",
+ cjkwd="w",
description="RUGBY FOOTBALL",
direction="on",
linebreak="id",
@@ -213418,17 +224069,19 @@ characters.data={
},
[0x1F3CA]={
category="so",
+ cjkwd="w",
description="SWIMMER",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F3CA,
},
[0x1F3CB]={
category="so",
description="WEIGHT LIFTER",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F3CB,
+ variants=variants_emoji,
},
[0x1F3CC]={
category="so",
@@ -213436,6 +224089,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F3CC,
+ variants=variants_emoji,
},
[0x1F3CD]={
category="so",
@@ -213443,6 +224097,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F3CD,
+ variants=variants_emoji,
},
[0x1F3CE]={
category="so",
@@ -213450,9 +224105,11 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F3CE,
+ variants=variants_emoji,
},
[0x1F3CF]={
category="so",
+ cjkwd="w",
description="CRICKET BAT AND BALL",
direction="on",
linebreak="id",
@@ -213460,6 +224117,7 @@ characters.data={
},
[0x1F3D0]={
category="so",
+ cjkwd="w",
description="VOLLEYBALL",
direction="on",
linebreak="id",
@@ -213467,6 +224125,7 @@ characters.data={
},
[0x1F3D1]={
category="so",
+ cjkwd="w",
description="FIELD HOCKEY STICK AND BALL",
direction="on",
linebreak="id",
@@ -213474,6 +224133,7 @@ characters.data={
},
[0x1F3D2]={
category="so",
+ cjkwd="w",
description="ICE HOCKEY STICK AND PUCK",
direction="on",
linebreak="id",
@@ -213481,6 +224141,7 @@ characters.data={
},
[0x1F3D3]={
category="so",
+ cjkwd="w",
description="TABLE TENNIS PADDLE AND BALL",
direction="on",
linebreak="id",
@@ -213492,6 +224153,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F3D4,
+ variants=variants_emoji,
},
[0x1F3D5]={
category="so",
@@ -213499,6 +224161,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F3D5,
+ variants=variants_emoji,
},
[0x1F3D6]={
category="so",
@@ -213506,6 +224169,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F3D6,
+ variants=variants_emoji,
},
[0x1F3D7]={
category="so",
@@ -213513,6 +224177,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F3D7,
+ variants=variants_emoji,
},
[0x1F3D8]={
category="so",
@@ -213520,6 +224185,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F3D8,
+ variants=variants_emoji,
},
[0x1F3D9]={
category="so",
@@ -213527,6 +224193,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F3D9,
+ variants=variants_emoji,
},
[0x1F3DA]={
category="so",
@@ -213534,6 +224201,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F3DA,
+ variants=variants_emoji,
},
[0x1F3DB]={
category="so",
@@ -213541,6 +224209,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F3DB,
+ variants=variants_emoji,
},
[0x1F3DC]={
category="so",
@@ -213548,6 +224217,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F3DC,
+ variants=variants_emoji,
},
[0x1F3DD]={
category="so",
@@ -213555,6 +224225,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F3DD,
+ variants=variants_emoji,
},
[0x1F3DE]={
category="so",
@@ -213562,6 +224233,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F3DE,
+ variants=variants_emoji,
},
[0x1F3DF]={
category="so",
@@ -213569,9 +224241,11 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F3DF,
+ variants=variants_emoji,
},
[0x1F3E0]={
category="so",
+ cjkwd="w",
description="HOUSE BUILDING",
direction="on",
linebreak="id",
@@ -213579,6 +224253,7 @@ characters.data={
},
[0x1F3E1]={
category="so",
+ cjkwd="w",
description="HOUSE WITH GARDEN",
direction="on",
linebreak="id",
@@ -213586,6 +224261,7 @@ characters.data={
},
[0x1F3E2]={
category="so",
+ cjkwd="w",
description="OFFICE BUILDING",
direction="on",
linebreak="id",
@@ -213593,6 +224269,7 @@ characters.data={
},
[0x1F3E3]={
category="so",
+ cjkwd="w",
description="JAPANESE POST OFFICE",
direction="on",
linebreak="id",
@@ -213600,6 +224277,7 @@ characters.data={
},
[0x1F3E4]={
category="so",
+ cjkwd="w",
description="EUROPEAN POST OFFICE",
direction="on",
linebreak="id",
@@ -213607,6 +224285,7 @@ characters.data={
},
[0x1F3E5]={
category="so",
+ cjkwd="w",
description="HOSPITAL",
direction="on",
linebreak="id",
@@ -213614,6 +224293,7 @@ characters.data={
},
[0x1F3E6]={
category="so",
+ cjkwd="w",
description="BANK",
direction="on",
linebreak="id",
@@ -213621,6 +224301,7 @@ characters.data={
},
[0x1F3E7]={
category="so",
+ cjkwd="w",
description="AUTOMATED TELLER MACHINE",
direction="on",
linebreak="id",
@@ -213628,6 +224309,7 @@ characters.data={
},
[0x1F3E8]={
category="so",
+ cjkwd="w",
description="HOTEL",
direction="on",
linebreak="id",
@@ -213635,6 +224317,7 @@ characters.data={
},
[0x1F3E9]={
category="so",
+ cjkwd="w",
description="LOVE HOTEL",
direction="on",
linebreak="id",
@@ -213642,6 +224325,7 @@ characters.data={
},
[0x1F3EA]={
category="so",
+ cjkwd="w",
description="CONVENIENCE STORE",
direction="on",
linebreak="id",
@@ -213649,6 +224333,7 @@ characters.data={
},
[0x1F3EB]={
category="so",
+ cjkwd="w",
description="SCHOOL",
direction="on",
linebreak="id",
@@ -213656,6 +224341,7 @@ characters.data={
},
[0x1F3EC]={
category="so",
+ cjkwd="w",
description="DEPARTMENT STORE",
direction="on",
linebreak="id",
@@ -213663,6 +224349,7 @@ characters.data={
},
[0x1F3ED]={
category="so",
+ cjkwd="w",
description="FACTORY",
direction="on",
linebreak="id",
@@ -213670,6 +224357,7 @@ characters.data={
},
[0x1F3EE]={
category="so",
+ cjkwd="w",
description="IZAKAYA LANTERN",
direction="on",
linebreak="id",
@@ -213677,6 +224365,7 @@ characters.data={
},
[0x1F3EF]={
category="so",
+ cjkwd="w",
description="JAPANESE CASTLE",
direction="on",
linebreak="id",
@@ -213684,6 +224373,7 @@ characters.data={
},
[0x1F3F0]={
category="so",
+ cjkwd="w",
description="EUROPEAN CASTLE",
direction="on",
linebreak="id",
@@ -213709,9 +224399,11 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F3F3,
+ variants=variants_emoji,
},
[0x1F3F4]={
category="so",
+ cjkwd="w",
description="WAVING BLACK FLAG",
direction="on",
linebreak="id",
@@ -213723,6 +224415,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F3F5,
+ variants=variants_emoji,
},
[0x1F3F6]={
category="so",
@@ -213737,9 +224430,11 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F3F7,
+ variants=variants_emoji,
},
[0x1F3F8]={
category="so",
+ cjkwd="w",
description="BADMINTON RACQUET AND SHUTTLECOCK",
direction="on",
linebreak="id",
@@ -213747,6 +224442,7 @@ characters.data={
},
[0x1F3F9]={
category="so",
+ cjkwd="w",
description="BOW AND ARROW",
direction="on",
linebreak="id",
@@ -213754,6 +224450,7 @@ characters.data={
},
[0x1F3FA]={
category="so",
+ cjkwd="w",
description="AMPHORA",
direction="on",
linebreak="id",
@@ -213761,41 +224458,47 @@ characters.data={
},
[0x1F3FB]={
category="sk",
+ cjkwd="w",
description="EMOJI MODIFIER FITZPATRICK TYPE-1-2",
direction="on",
- linebreak="al",
+ linebreak="em",
unicodeslot=0x1F3FB,
},
[0x1F3FC]={
category="sk",
+ cjkwd="w",
description="EMOJI MODIFIER FITZPATRICK TYPE-3",
direction="on",
- linebreak="al",
+ linebreak="em",
unicodeslot=0x1F3FC,
},
[0x1F3FD]={
category="sk",
+ cjkwd="w",
description="EMOJI MODIFIER FITZPATRICK TYPE-4",
direction="on",
- linebreak="al",
+ linebreak="em",
unicodeslot=0x1F3FD,
},
[0x1F3FE]={
category="sk",
+ cjkwd="w",
description="EMOJI MODIFIER FITZPATRICK TYPE-5",
direction="on",
- linebreak="al",
+ linebreak="em",
unicodeslot=0x1F3FE,
},
[0x1F3FF]={
category="sk",
+ cjkwd="w",
description="EMOJI MODIFIER FITZPATRICK TYPE-6",
direction="on",
- linebreak="al",
+ linebreak="em",
unicodeslot=0x1F3FF,
},
[0x1F400]={
category="so",
+ cjkwd="w",
description="RAT",
direction="on",
linebreak="id",
@@ -213803,6 +224506,7 @@ characters.data={
},
[0x1F401]={
category="so",
+ cjkwd="w",
description="MOUSE",
direction="on",
linebreak="id",
@@ -213810,6 +224514,7 @@ characters.data={
},
[0x1F402]={
category="so",
+ cjkwd="w",
description="OX",
direction="on",
linebreak="id",
@@ -213817,6 +224522,7 @@ characters.data={
},
[0x1F403]={
category="so",
+ cjkwd="w",
description="WATER BUFFALO",
direction="on",
linebreak="id",
@@ -213824,13 +224530,16 @@ characters.data={
},
[0x1F404]={
category="so",
+ cjkwd="w",
description="COW",
direction="on",
linebreak="id",
+ synonyms={ "beef (on menus)" },
unicodeslot=0x1F404,
},
[0x1F405]={
category="so",
+ cjkwd="w",
description="TIGER",
direction="on",
linebreak="id",
@@ -213838,6 +224547,7 @@ characters.data={
},
[0x1F406]={
category="so",
+ cjkwd="w",
description="LEOPARD",
direction="on",
linebreak="id",
@@ -213845,6 +224555,7 @@ characters.data={
},
[0x1F407]={
category="so",
+ cjkwd="w",
description="RABBIT",
direction="on",
linebreak="id",
@@ -213852,6 +224563,7 @@ characters.data={
},
[0x1F408]={
category="so",
+ cjkwd="w",
description="CAT",
direction="on",
linebreak="id",
@@ -213859,6 +224571,7 @@ characters.data={
},
[0x1F409]={
category="so",
+ cjkwd="w",
description="DRAGON",
direction="on",
linebreak="id",
@@ -213866,6 +224579,7 @@ characters.data={
},
[0x1F40A]={
category="so",
+ cjkwd="w",
description="CROCODILE",
direction="on",
linebreak="id",
@@ -213873,6 +224587,7 @@ characters.data={
},
[0x1F40B]={
category="so",
+ cjkwd="w",
description="WHALE",
direction="on",
linebreak="id",
@@ -213880,6 +224595,7 @@ characters.data={
},
[0x1F40C]={
category="so",
+ cjkwd="w",
description="SNAIL",
direction="on",
linebreak="id",
@@ -213887,6 +224603,7 @@ characters.data={
},
[0x1F40D]={
category="so",
+ cjkwd="w",
description="SNAKE",
direction="on",
linebreak="id",
@@ -213894,6 +224611,7 @@ characters.data={
},
[0x1F40E]={
category="so",
+ cjkwd="w",
description="HORSE",
direction="on",
linebreak="id",
@@ -213901,6 +224619,7 @@ characters.data={
},
[0x1F40F]={
category="so",
+ cjkwd="w",
description="RAM",
direction="on",
linebreak="id",
@@ -213908,6 +224627,7 @@ characters.data={
},
[0x1F410]={
category="so",
+ cjkwd="w",
description="GOAT",
direction="on",
linebreak="id",
@@ -213915,6 +224635,7 @@ characters.data={
},
[0x1F411]={
category="so",
+ cjkwd="w",
description="SHEEP",
direction="on",
linebreak="id",
@@ -213922,6 +224643,7 @@ characters.data={
},
[0x1F412]={
category="so",
+ cjkwd="w",
description="MONKEY",
direction="on",
linebreak="id",
@@ -213929,6 +224651,7 @@ characters.data={
},
[0x1F413]={
category="so",
+ cjkwd="w",
description="ROOSTER",
direction="on",
linebreak="id",
@@ -213936,13 +224659,16 @@ characters.data={
},
[0x1F414]={
category="so",
+ cjkwd="w",
description="CHICKEN",
direction="on",
linebreak="id",
+ synonyms={ "poultry (on menus)" },
unicodeslot=0x1F414,
},
[0x1F415]={
category="so",
+ cjkwd="w",
description="DOG",
direction="on",
linebreak="id",
@@ -213950,13 +224676,16 @@ characters.data={
},
[0x1F416]={
category="so",
+ cjkwd="w",
description="PIG",
direction="on",
linebreak="id",
+ synonyms={ "pork (on menus)" },
unicodeslot=0x1F416,
},
[0x1F417]={
category="so",
+ cjkwd="w",
description="BOAR",
direction="on",
linebreak="id",
@@ -213964,6 +224693,7 @@ characters.data={
},
[0x1F418]={
category="so",
+ cjkwd="w",
description="ELEPHANT",
direction="on",
linebreak="id",
@@ -213971,6 +224701,7 @@ characters.data={
},
[0x1F419]={
category="so",
+ cjkwd="w",
description="OCTOPUS",
direction="on",
linebreak="id",
@@ -213978,13 +224709,16 @@ characters.data={
},
[0x1F41A]={
category="so",
+ cjkwd="w",
description="SPIRAL SHELL",
direction="on",
linebreak="id",
+ synonyms={ "seashell" },
unicodeslot=0x1F41A,
},
[0x1F41B]={
category="so",
+ cjkwd="w",
description="BUG",
direction="on",
linebreak="id",
@@ -213992,6 +224726,7 @@ characters.data={
},
[0x1F41C]={
category="so",
+ cjkwd="w",
description="ANT",
direction="on",
linebreak="id",
@@ -213999,6 +224734,7 @@ characters.data={
},
[0x1F41D]={
category="so",
+ cjkwd="w",
description="HONEYBEE",
direction="on",
linebreak="id",
@@ -214006,6 +224742,7 @@ characters.data={
},
[0x1F41E]={
category="so",
+ cjkwd="w",
description="LADY BEETLE",
direction="on",
linebreak="id",
@@ -214013,6 +224750,7 @@ characters.data={
},
[0x1F41F]={
category="so",
+ cjkwd="w",
description="FISH",
direction="on",
linebreak="id",
@@ -214020,6 +224758,7 @@ characters.data={
},
[0x1F420]={
category="so",
+ cjkwd="w",
description="TROPICAL FISH",
direction="on",
linebreak="id",
@@ -214027,6 +224766,7 @@ characters.data={
},
[0x1F421]={
category="so",
+ cjkwd="w",
description="BLOWFISH",
direction="on",
linebreak="id",
@@ -214034,6 +224774,7 @@ characters.data={
},
[0x1F422]={
category="so",
+ cjkwd="w",
description="TURTLE",
direction="on",
linebreak="id",
@@ -214041,6 +224782,7 @@ characters.data={
},
[0x1F423]={
category="so",
+ cjkwd="w",
description="HATCHING CHICK",
direction="on",
linebreak="id",
@@ -214048,6 +224790,7 @@ characters.data={
},
[0x1F424]={
category="so",
+ cjkwd="w",
description="BABY CHICK",
direction="on",
linebreak="id",
@@ -214055,6 +224798,7 @@ characters.data={
},
[0x1F425]={
category="so",
+ cjkwd="w",
description="FRONT-FACING BABY CHICK",
direction="on",
linebreak="id",
@@ -214062,6 +224806,7 @@ characters.data={
},
[0x1F426]={
category="so",
+ cjkwd="w",
description="BIRD",
direction="on",
linebreak="id",
@@ -214069,6 +224814,7 @@ characters.data={
},
[0x1F427]={
category="so",
+ cjkwd="w",
description="PENGUIN",
direction="on",
linebreak="id",
@@ -214076,6 +224822,7 @@ characters.data={
},
[0x1F428]={
category="so",
+ cjkwd="w",
description="KOALA",
direction="on",
linebreak="id",
@@ -214083,6 +224830,7 @@ characters.data={
},
[0x1F429]={
category="so",
+ cjkwd="w",
description="POODLE",
direction="on",
linebreak="id",
@@ -214090,6 +224838,7 @@ characters.data={
},
[0x1F42A]={
category="so",
+ cjkwd="w",
description="DROMEDARY CAMEL",
direction="on",
linebreak="id",
@@ -214097,6 +224846,7 @@ characters.data={
},
[0x1F42B]={
category="so",
+ cjkwd="w",
description="BACTRIAN CAMEL",
direction="on",
linebreak="id",
@@ -214104,6 +224854,7 @@ characters.data={
},
[0x1F42C]={
category="so",
+ cjkwd="w",
description="DOLPHIN",
direction="on",
linebreak="id",
@@ -214111,6 +224862,7 @@ characters.data={
},
[0x1F42D]={
category="so",
+ cjkwd="w",
description="MOUSE FACE",
direction="on",
linebreak="id",
@@ -214118,6 +224870,7 @@ characters.data={
},
[0x1F42E]={
category="so",
+ cjkwd="w",
description="COW FACE",
direction="on",
linebreak="id",
@@ -214125,6 +224878,7 @@ characters.data={
},
[0x1F42F]={
category="so",
+ cjkwd="w",
description="TIGER FACE",
direction="on",
linebreak="id",
@@ -214132,6 +224886,7 @@ characters.data={
},
[0x1F430]={
category="so",
+ cjkwd="w",
description="RABBIT FACE",
direction="on",
linebreak="id",
@@ -214139,6 +224894,7 @@ characters.data={
},
[0x1F431]={
category="so",
+ cjkwd="w",
description="CAT FACE",
direction="on",
linebreak="id",
@@ -214146,6 +224902,7 @@ characters.data={
},
[0x1F432]={
category="so",
+ cjkwd="w",
description="DRAGON FACE",
direction="on",
linebreak="id",
@@ -214153,6 +224910,7 @@ characters.data={
},
[0x1F433]={
category="so",
+ cjkwd="w",
description="SPOUTING WHALE",
direction="on",
linebreak="id",
@@ -214160,6 +224918,7 @@ characters.data={
},
[0x1F434]={
category="so",
+ cjkwd="w",
description="HORSE FACE",
direction="on",
linebreak="id",
@@ -214167,6 +224926,7 @@ characters.data={
},
[0x1F435]={
category="so",
+ cjkwd="w",
description="MONKEY FACE",
direction="on",
linebreak="id",
@@ -214174,6 +224934,7 @@ characters.data={
},
[0x1F436]={
category="so",
+ cjkwd="w",
description="DOG FACE",
direction="on",
linebreak="id",
@@ -214181,6 +224942,7 @@ characters.data={
},
[0x1F437]={
category="so",
+ cjkwd="w",
description="PIG FACE",
direction="on",
linebreak="id",
@@ -214188,6 +224950,7 @@ characters.data={
},
[0x1F438]={
category="so",
+ cjkwd="w",
description="FROG FACE",
direction="on",
linebreak="id",
@@ -214195,6 +224958,7 @@ characters.data={
},
[0x1F439]={
category="so",
+ cjkwd="w",
description="HAMSTER FACE",
direction="on",
linebreak="id",
@@ -214202,6 +224966,7 @@ characters.data={
},
[0x1F43A]={
category="so",
+ cjkwd="w",
description="WOLF FACE",
direction="on",
linebreak="id",
@@ -214209,6 +224974,7 @@ characters.data={
},
[0x1F43B]={
category="so",
+ cjkwd="w",
description="BEAR FACE",
direction="on",
linebreak="id",
@@ -214216,6 +224982,7 @@ characters.data={
},
[0x1F43C]={
category="so",
+ cjkwd="w",
description="PANDA FACE",
direction="on",
linebreak="id",
@@ -214223,6 +224990,7 @@ characters.data={
},
[0x1F43D]={
category="so",
+ cjkwd="w",
description="PIG NOSE",
direction="on",
linebreak="id",
@@ -214230,6 +224998,7 @@ characters.data={
},
[0x1F43E]={
category="so",
+ cjkwd="w",
description="PAW PRINTS",
direction="on",
linebreak="id",
@@ -214241,9 +225010,11 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F43F,
+ variants=variants_emoji,
},
[0x1F440]={
category="so",
+ cjkwd="w",
description="EYES",
direction="on",
linebreak="id",
@@ -214255,23 +225026,27 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F441,
+ variants=variants_emoji,
},
[0x1F442]={
category="so",
+ cjkwd="w",
description="EAR",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F442,
},
[0x1F443]={
category="so",
+ cjkwd="w",
description="NOSE",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F443,
},
[0x1F444]={
category="so",
+ cjkwd="w",
description="MOUTH",
direction="on",
linebreak="id",
@@ -214279,6 +225054,7 @@ characters.data={
},
[0x1F445]={
category="so",
+ cjkwd="w",
description="TONGUE",
direction="on",
linebreak="id",
@@ -214286,83 +225062,96 @@ characters.data={
},
[0x1F446]={
category="so",
+ cjkwd="w",
description="WHITE UP POINTING BACKHAND INDEX",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F446,
},
[0x1F447]={
category="so",
+ cjkwd="w",
description="WHITE DOWN POINTING BACKHAND INDEX",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F447,
},
[0x1F448]={
category="so",
+ cjkwd="w",
description="WHITE LEFT POINTING BACKHAND INDEX",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F448,
},
[0x1F449]={
category="so",
+ cjkwd="w",
description="WHITE RIGHT POINTING BACKHAND INDEX",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F449,
},
[0x1F44A]={
category="so",
+ cjkwd="w",
description="FISTED HAND SIGN",
direction="on",
- linebreak="id",
+ linebreak="eb",
+ synonyms={ "punch" },
unicodeslot=0x1F44A,
},
[0x1F44B]={
category="so",
+ cjkwd="w",
description="WAVING HAND SIGN",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F44B,
},
[0x1F44C]={
category="so",
+ cjkwd="w",
description="OK HAND SIGN",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F44C,
},
[0x1F44D]={
category="so",
+ cjkwd="w",
description="THUMBS UP SIGN",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F44D,
},
[0x1F44E]={
category="so",
+ cjkwd="w",
description="THUMBS DOWN SIGN",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F44E,
},
[0x1F44F]={
category="so",
+ cjkwd="w",
description="CLAPPING HANDS SIGN",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F44F,
},
[0x1F450]={
category="so",
+ cjkwd="w",
description="OPEN HANDS SIGN",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F450,
},
[0x1F451]={
category="so",
+ cjkwd="w",
description="CROWN",
direction="on",
linebreak="id",
@@ -214370,6 +225159,7 @@ characters.data={
},
[0x1F452]={
category="so",
+ cjkwd="w",
description="WOMANS HAT",
direction="on",
linebreak="id",
@@ -214377,6 +225167,7 @@ characters.data={
},
[0x1F453]={
category="so",
+ cjkwd="w",
description="EYEGLASSES",
direction="on",
linebreak="id",
@@ -214384,6 +225175,7 @@ characters.data={
},
[0x1F454]={
category="so",
+ cjkwd="w",
description="NECKTIE",
direction="on",
linebreak="id",
@@ -214391,6 +225183,7 @@ characters.data={
},
[0x1F455]={
category="so",
+ cjkwd="w",
description="T-SHIRT",
direction="on",
linebreak="id",
@@ -214398,6 +225191,7 @@ characters.data={
},
[0x1F456]={
category="so",
+ cjkwd="w",
description="JEANS",
direction="on",
linebreak="id",
@@ -214405,6 +225199,7 @@ characters.data={
},
[0x1F457]={
category="so",
+ cjkwd="w",
description="DRESS",
direction="on",
linebreak="id",
@@ -214412,6 +225207,7 @@ characters.data={
},
[0x1F458]={
category="so",
+ cjkwd="w",
description="KIMONO",
direction="on",
linebreak="id",
@@ -214419,6 +225215,7 @@ characters.data={
},
[0x1F459]={
category="so",
+ cjkwd="w",
description="BIKINI",
direction="on",
linebreak="id",
@@ -214426,6 +225223,7 @@ characters.data={
},
[0x1F45A]={
category="so",
+ cjkwd="w",
description="WOMANS CLOTHES",
direction="on",
linebreak="id",
@@ -214433,6 +225231,7 @@ characters.data={
},
[0x1F45B]={
category="so",
+ cjkwd="w",
description="PURSE",
direction="on",
linebreak="id",
@@ -214440,6 +225239,7 @@ characters.data={
},
[0x1F45C]={
category="so",
+ cjkwd="w",
description="HANDBAG",
direction="on",
linebreak="id",
@@ -214447,6 +225247,7 @@ characters.data={
},
[0x1F45D]={
category="so",
+ cjkwd="w",
description="POUCH",
direction="on",
linebreak="id",
@@ -214454,6 +225255,7 @@ characters.data={
},
[0x1F45E]={
category="so",
+ cjkwd="w",
description="MANS SHOE",
direction="on",
linebreak="id",
@@ -214461,6 +225263,7 @@ characters.data={
},
[0x1F45F]={
category="so",
+ cjkwd="w",
description="ATHLETIC SHOE",
direction="on",
linebreak="id",
@@ -214468,6 +225271,7 @@ characters.data={
},
[0x1F460]={
category="so",
+ cjkwd="w",
description="HIGH-HEELED SHOE",
direction="on",
linebreak="id",
@@ -214475,6 +225279,7 @@ characters.data={
},
[0x1F461]={
category="so",
+ cjkwd="w",
description="WOMANS SANDAL",
direction="on",
linebreak="id",
@@ -214482,6 +225287,7 @@ characters.data={
},
[0x1F462]={
category="so",
+ cjkwd="w",
description="WOMANS BOOTS",
direction="on",
linebreak="id",
@@ -214489,6 +225295,7 @@ characters.data={
},
[0x1F463]={
category="so",
+ cjkwd="w",
description="FOOTPRINTS",
direction="on",
linebreak="id",
@@ -214496,48 +225303,57 @@ characters.data={
},
[0x1F464]={
category="so",
+ cjkwd="w",
description="BUST IN SILHOUETTE",
direction="on",
linebreak="id",
+ synonyms={ "guest account" },
unicodeslot=0x1F464,
},
[0x1F465]={
category="so",
+ cjkwd="w",
description="BUSTS IN SILHOUETTE",
direction="on",
linebreak="id",
+ synonyms={ "accounts" },
unicodeslot=0x1F465,
},
[0x1F466]={
category="so",
+ cjkwd="w",
description="BOY",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F466,
},
[0x1F467]={
category="so",
+ cjkwd="w",
description="GIRL",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F467,
},
[0x1F468]={
category="so",
+ cjkwd="w",
description="MAN",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F468,
},
[0x1F469]={
category="so",
+ cjkwd="w",
description="WOMAN",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F469,
},
[0x1F46A]={
category="so",
+ cjkwd="w",
description="FAMILY",
direction="on",
linebreak="id",
@@ -214545,6 +225361,7 @@ characters.data={
},
[0x1F46B]={
category="so",
+ cjkwd="w",
description="MAN AND WOMAN HOLDING HANDS",
direction="on",
linebreak="id",
@@ -214552,6 +225369,7 @@ characters.data={
},
[0x1F46C]={
category="so",
+ cjkwd="w",
description="TWO MEN HOLDING HANDS",
direction="on",
linebreak="id",
@@ -214559,6 +225377,7 @@ characters.data={
},
[0x1F46D]={
category="so",
+ cjkwd="w",
description="TWO WOMEN HOLDING HANDS",
direction="on",
linebreak="id",
@@ -214566,13 +225385,15 @@ characters.data={
},
[0x1F46E]={
category="so",
+ cjkwd="w",
description="POLICE OFFICER",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F46E,
},
[0x1F46F]={
category="so",
+ cjkwd="w",
description="WOMAN WITH BUNNY EARS",
direction="on",
linebreak="id",
@@ -214580,69 +225401,80 @@ characters.data={
},
[0x1F470]={
category="so",
+ cjkwd="w",
description="BRIDE WITH VEIL",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F470,
},
[0x1F471]={
category="so",
+ cjkwd="w",
description="PERSON WITH BLOND HAIR",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F471,
},
[0x1F472]={
category="so",
+ cjkwd="w",
description="MAN WITH GUA PI MAO",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F472,
},
[0x1F473]={
category="so",
+ cjkwd="w",
description="MAN WITH TURBAN",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F473,
},
[0x1F474]={
category="so",
+ cjkwd="w",
description="OLDER MAN",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F474,
},
[0x1F475]={
category="so",
+ cjkwd="w",
description="OLDER WOMAN",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F475,
},
[0x1F476]={
category="so",
+ cjkwd="w",
description="BABY",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F476,
},
[0x1F477]={
category="so",
+ cjkwd="w",
description="CONSTRUCTION WORKER",
direction="on",
- linebreak="id",
+ linebreak="eb",
+ synonyms={ "hardhat" },
unicodeslot=0x1F477,
},
[0x1F478]={
category="so",
+ cjkwd="w",
description="PRINCESS",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F478,
},
[0x1F479]={
category="so",
+ cjkwd="w",
description="JAPANESE OGRE",
direction="on",
linebreak="id",
@@ -214650,6 +225482,7 @@ characters.data={
},
[0x1F47A]={
category="so",
+ cjkwd="w",
description="JAPANESE GOBLIN",
direction="on",
linebreak="id",
@@ -214657,6 +225490,7 @@ characters.data={
},
[0x1F47B]={
category="so",
+ cjkwd="w",
description="GHOST",
direction="on",
linebreak="id",
@@ -214664,13 +225498,15 @@ characters.data={
},
[0x1F47C]={
category="so",
+ cjkwd="w",
description="BABY ANGEL",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F47C,
},
[0x1F47D]={
category="so",
+ cjkwd="w",
description="EXTRATERRESTRIAL ALIEN",
direction="on",
linebreak="id",
@@ -214678,6 +225514,7 @@ characters.data={
},
[0x1F47E]={
category="so",
+ cjkwd="w",
description="ALIEN MONSTER",
direction="on",
linebreak="id",
@@ -214685,6 +225522,7 @@ characters.data={
},
[0x1F47F]={
category="so",
+ cjkwd="w",
description="IMP",
direction="on",
linebreak="id",
@@ -214692,6 +225530,7 @@ characters.data={
},
[0x1F480]={
category="so",
+ cjkwd="w",
description="SKULL",
direction="on",
linebreak="id",
@@ -214699,27 +225538,31 @@ characters.data={
},
[0x1F481]={
category="so",
+ cjkwd="w",
description="INFORMATION DESK PERSON",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F481,
},
[0x1F482]={
category="so",
+ cjkwd="w",
description="GUARDSMAN",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F482,
},
[0x1F483]={
category="so",
+ cjkwd="w",
description="DANCER",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F483,
},
[0x1F484]={
category="so",
+ cjkwd="w",
description="LIPSTICK",
direction="on",
linebreak="id",
@@ -214727,27 +225570,31 @@ characters.data={
},
[0x1F485]={
category="so",
+ cjkwd="w",
description="NAIL POLISH",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F485,
},
[0x1F486]={
category="so",
+ cjkwd="w",
description="FACE MASSAGE",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F486,
},
[0x1F487]={
category="so",
+ cjkwd="w",
description="HAIRCUT",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F487,
},
[0x1F488]={
category="so",
+ cjkwd="w",
description="BARBER POLE",
direction="on",
linebreak="id",
@@ -214755,6 +225602,7 @@ characters.data={
},
[0x1F489]={
category="so",
+ cjkwd="w",
description="SYRINGE",
direction="on",
linebreak="id",
@@ -214762,6 +225610,7 @@ characters.data={
},
[0x1F48A]={
category="so",
+ cjkwd="w",
description="PILL",
direction="on",
linebreak="id",
@@ -214769,6 +225618,7 @@ characters.data={
},
[0x1F48B]={
category="so",
+ cjkwd="w",
description="KISS MARK",
direction="on",
linebreak="id",
@@ -214776,6 +225626,7 @@ characters.data={
},
[0x1F48C]={
category="so",
+ cjkwd="w",
description="LOVE LETTER",
direction="on",
linebreak="id",
@@ -214783,6 +225634,7 @@ characters.data={
},
[0x1F48D]={
category="so",
+ cjkwd="w",
description="RING",
direction="on",
linebreak="id",
@@ -214790,6 +225642,7 @@ characters.data={
},
[0x1F48E]={
category="so",
+ cjkwd="w",
description="GEM STONE",
direction="on",
linebreak="id",
@@ -214797,6 +225650,7 @@ characters.data={
},
[0x1F48F]={
category="so",
+ cjkwd="w",
description="KISS",
direction="on",
linebreak="id",
@@ -214804,6 +225658,7 @@ characters.data={
},
[0x1F490]={
category="so",
+ cjkwd="w",
description="BOUQUET",
direction="on",
linebreak="id",
@@ -214811,6 +225666,7 @@ characters.data={
},
[0x1F491]={
category="so",
+ cjkwd="w",
description="COUPLE WITH HEART",
direction="on",
linebreak="id",
@@ -214818,6 +225674,7 @@ characters.data={
},
[0x1F492]={
category="so",
+ cjkwd="w",
description="WEDDING",
direction="on",
linebreak="id",
@@ -214825,6 +225682,7 @@ characters.data={
},
[0x1F493]={
category="so",
+ cjkwd="w",
description="BEATING HEART",
direction="on",
linebreak="id",
@@ -214832,6 +225690,7 @@ characters.data={
},
[0x1F494]={
category="so",
+ cjkwd="w",
description="BROKEN HEART",
direction="on",
linebreak="id",
@@ -214839,6 +225698,7 @@ characters.data={
},
[0x1F495]={
category="so",
+ cjkwd="w",
description="TWO HEARTS",
direction="on",
linebreak="id",
@@ -214846,6 +225706,7 @@ characters.data={
},
[0x1F496]={
category="so",
+ cjkwd="w",
description="SPARKLING HEART",
direction="on",
linebreak="id",
@@ -214853,6 +225714,7 @@ characters.data={
},
[0x1F497]={
category="so",
+ cjkwd="w",
description="GROWING HEART",
direction="on",
linebreak="id",
@@ -214860,6 +225722,7 @@ characters.data={
},
[0x1F498]={
category="so",
+ cjkwd="w",
description="HEART WITH ARROW",
direction="on",
linebreak="id",
@@ -214867,6 +225730,7 @@ characters.data={
},
[0x1F499]={
category="so",
+ cjkwd="w",
description="BLUE HEART",
direction="on",
linebreak="id",
@@ -214874,6 +225738,7 @@ characters.data={
},
[0x1F49A]={
category="so",
+ cjkwd="w",
description="GREEN HEART",
direction="on",
linebreak="id",
@@ -214881,6 +225746,7 @@ characters.data={
},
[0x1F49B]={
category="so",
+ cjkwd="w",
description="YELLOW HEART",
direction="on",
linebreak="id",
@@ -214888,6 +225754,7 @@ characters.data={
},
[0x1F49C]={
category="so",
+ cjkwd="w",
description="PURPLE HEART",
direction="on",
linebreak="id",
@@ -214895,6 +225762,7 @@ characters.data={
},
[0x1F49D]={
category="so",
+ cjkwd="w",
description="HEART WITH RIBBON",
direction="on",
linebreak="id",
@@ -214902,6 +225770,7 @@ characters.data={
},
[0x1F49E]={
category="so",
+ cjkwd="w",
description="REVOLVING HEARTS",
direction="on",
linebreak="id",
@@ -214909,6 +225778,7 @@ characters.data={
},
[0x1F49F]={
category="so",
+ cjkwd="w",
description="HEART DECORATION",
direction="on",
linebreak="id",
@@ -214916,6 +225786,7 @@ characters.data={
},
[0x1F4A0]={
category="so",
+ cjkwd="w",
description="DIAMOND SHAPE WITH A DOT INSIDE",
direction="on",
linebreak="al",
@@ -214923,13 +225794,16 @@ characters.data={
},
[0x1F4A1]={
category="so",
+ cjkwd="w",
description="ELECTRIC LIGHT BULB",
direction="on",
linebreak="id",
+ synonyms={ "idea" },
unicodeslot=0x1F4A1,
},
[0x1F4A2]={
category="so",
+ cjkwd="w",
description="ANGER SYMBOL",
direction="on",
linebreak="al",
@@ -214937,6 +225811,7 @@ characters.data={
},
[0x1F4A3]={
category="so",
+ cjkwd="w",
description="BOMB",
direction="on",
linebreak="id",
@@ -214944,6 +225819,7 @@ characters.data={
},
[0x1F4A4]={
category="so",
+ cjkwd="w",
description="SLEEPING SYMBOL",
direction="on",
linebreak="al",
@@ -214951,6 +225827,7 @@ characters.data={
},
[0x1F4A5]={
category="so",
+ cjkwd="w",
description="COLLISION SYMBOL",
direction="on",
linebreak="id",
@@ -214958,13 +225835,16 @@ characters.data={
},
[0x1F4A6]={
category="so",
+ cjkwd="w",
description="SPLASHING SWEAT SYMBOL",
direction="on",
linebreak="id",
+ synonyms={ "plewds" },
unicodeslot=0x1F4A6,
},
[0x1F4A7]={
category="so",
+ cjkwd="w",
description="DROPLET",
direction="on",
linebreak="id",
@@ -214972,13 +225852,16 @@ characters.data={
},
[0x1F4A8]={
category="so",
+ cjkwd="w",
description="DASH SYMBOL",
direction="on",
linebreak="id",
+ synonyms={ "briffits" },
unicodeslot=0x1F4A8,
},
[0x1F4A9]={
category="so",
+ cjkwd="w",
description="PILE OF POO",
direction="on",
linebreak="id",
@@ -214986,20 +225869,24 @@ characters.data={
},
[0x1F4AA]={
category="so",
+ cjkwd="w",
description="FLEXED BICEPS",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F4AA,
},
[0x1F4AB]={
category="so",
+ cjkwd="w",
description="DIZZY SYMBOL",
direction="on",
linebreak="id",
+ synonyms={ "squeans" },
unicodeslot=0x1F4AB,
},
[0x1F4AC]={
category="so",
+ cjkwd="w",
description="SPEECH BALLOON",
direction="on",
linebreak="id",
@@ -215007,6 +225894,7 @@ characters.data={
},
[0x1F4AD]={
category="so",
+ cjkwd="w",
description="THOUGHT BALLOON",
direction="on",
linebreak="id",
@@ -215014,6 +225902,7 @@ characters.data={
},
[0x1F4AE]={
category="so",
+ cjkwd="w",
description="WHITE FLOWER",
direction="on",
linebreak="id",
@@ -215021,6 +225910,7 @@ characters.data={
},
[0x1F4AF]={
category="so",
+ cjkwd="w",
description="HUNDRED POINTS SYMBOL",
direction="on",
linebreak="al",
@@ -215028,6 +225918,7 @@ characters.data={
},
[0x1F4B0]={
category="so",
+ cjkwd="w",
description="MONEY BAG",
direction="on",
linebreak="id",
@@ -215035,6 +225926,7 @@ characters.data={
},
[0x1F4B1]={
category="so",
+ cjkwd="w",
description="CURRENCY EXCHANGE",
direction="on",
linebreak="al",
@@ -215042,6 +225934,7 @@ characters.data={
},
[0x1F4B2]={
category="so",
+ cjkwd="w",
description="HEAVY DOLLAR SIGN",
direction="on",
linebreak="al",
@@ -215049,6 +225942,7 @@ characters.data={
},
[0x1F4B3]={
category="so",
+ cjkwd="w",
description="CREDIT CARD",
direction="on",
linebreak="id",
@@ -215056,6 +225950,7 @@ characters.data={
},
[0x1F4B4]={
category="so",
+ cjkwd="w",
description="BANKNOTE WITH YEN SIGN",
direction="on",
linebreak="id",
@@ -215063,6 +225958,7 @@ characters.data={
},
[0x1F4B5]={
category="so",
+ cjkwd="w",
description="BANKNOTE WITH DOLLAR SIGN",
direction="on",
linebreak="id",
@@ -215070,6 +225966,7 @@ characters.data={
},
[0x1F4B6]={
category="so",
+ cjkwd="w",
description="BANKNOTE WITH EURO SIGN",
direction="on",
linebreak="id",
@@ -215077,6 +225974,7 @@ characters.data={
},
[0x1F4B7]={
category="so",
+ cjkwd="w",
description="BANKNOTE WITH POUND SIGN",
direction="on",
linebreak="id",
@@ -215084,6 +225982,7 @@ characters.data={
},
[0x1F4B8]={
category="so",
+ cjkwd="w",
description="MONEY WITH WINGS",
direction="on",
linebreak="id",
@@ -215091,6 +225990,7 @@ characters.data={
},
[0x1F4B9]={
category="so",
+ cjkwd="w",
description="CHART WITH UPWARDS TREND AND YEN SIGN",
direction="on",
linebreak="id",
@@ -215098,6 +225998,7 @@ characters.data={
},
[0x1F4BA]={
category="so",
+ cjkwd="w",
description="SEAT",
direction="on",
linebreak="id",
@@ -215105,6 +226006,7 @@ characters.data={
},
[0x1F4BB]={
category="so",
+ cjkwd="w",
description="PERSONAL COMPUTER",
direction="on",
linebreak="id",
@@ -215112,6 +226014,7 @@ characters.data={
},
[0x1F4BC]={
category="so",
+ cjkwd="w",
description="BRIEFCASE",
direction="on",
linebreak="id",
@@ -215119,6 +226022,7 @@ characters.data={
},
[0x1F4BD]={
category="so",
+ cjkwd="w",
description="MINIDISC",
direction="on",
linebreak="id",
@@ -215126,6 +226030,7 @@ characters.data={
},
[0x1F4BE]={
category="so",
+ cjkwd="w",
description="FLOPPY DISK",
direction="on",
linebreak="id",
@@ -215133,13 +226038,16 @@ characters.data={
},
[0x1F4BF]={
category="so",
+ cjkwd="w",
description="OPTICAL DISC",
direction="on",
linebreak="id",
+ synonyms={ "cd", "compact disc" },
unicodeslot=0x1F4BF,
},
[0x1F4C0]={
category="so",
+ cjkwd="w",
description="DVD",
direction="on",
linebreak="id",
@@ -215147,6 +226055,7 @@ characters.data={
},
[0x1F4C1]={
category="so",
+ cjkwd="w",
description="FILE FOLDER",
direction="on",
linebreak="id",
@@ -215154,6 +226063,7 @@ characters.data={
},
[0x1F4C2]={
category="so",
+ cjkwd="w",
description="OPEN FILE FOLDER",
direction="on",
linebreak="id",
@@ -215161,6 +226071,7 @@ characters.data={
},
[0x1F4C3]={
category="so",
+ cjkwd="w",
description="PAGE WITH CURL",
direction="on",
linebreak="id",
@@ -215168,6 +226079,7 @@ characters.data={
},
[0x1F4C4]={
category="so",
+ cjkwd="w",
description="PAGE FACING UP",
direction="on",
linebreak="id",
@@ -215175,6 +226087,7 @@ characters.data={
},
[0x1F4C5]={
category="so",
+ cjkwd="w",
description="CALENDAR",
direction="on",
linebreak="id",
@@ -215182,6 +226095,7 @@ characters.data={
},
[0x1F4C6]={
category="so",
+ cjkwd="w",
description="TEAR-OFF CALENDAR",
direction="on",
linebreak="id",
@@ -215189,6 +226103,7 @@ characters.data={
},
[0x1F4C7]={
category="so",
+ cjkwd="w",
description="CARD INDEX",
direction="on",
linebreak="id",
@@ -215196,6 +226111,7 @@ characters.data={
},
[0x1F4C8]={
category="so",
+ cjkwd="w",
description="CHART WITH UPWARDS TREND",
direction="on",
linebreak="id",
@@ -215203,6 +226119,7 @@ characters.data={
},
[0x1F4C9]={
category="so",
+ cjkwd="w",
description="CHART WITH DOWNWARDS TREND",
direction="on",
linebreak="id",
@@ -215210,6 +226127,7 @@ characters.data={
},
[0x1F4CA]={
category="so",
+ cjkwd="w",
description="BAR CHART",
direction="on",
linebreak="id",
@@ -215217,6 +226135,7 @@ characters.data={
},
[0x1F4CB]={
category="so",
+ cjkwd="w",
description="CLIPBOARD",
direction="on",
linebreak="id",
@@ -215224,6 +226143,7 @@ characters.data={
},
[0x1F4CC]={
category="so",
+ cjkwd="w",
description="PUSHPIN",
direction="on",
linebreak="id",
@@ -215231,6 +226151,7 @@ characters.data={
},
[0x1F4CD]={
category="so",
+ cjkwd="w",
description="ROUND PUSHPIN",
direction="on",
linebreak="id",
@@ -215238,6 +226159,7 @@ characters.data={
},
[0x1F4CE]={
category="so",
+ cjkwd="w",
description="PAPERCLIP",
direction="on",
linebreak="id",
@@ -215245,6 +226167,7 @@ characters.data={
},
[0x1F4CF]={
category="so",
+ cjkwd="w",
description="STRAIGHT RULER",
direction="on",
linebreak="id",
@@ -215252,6 +226175,7 @@ characters.data={
},
[0x1F4D0]={
category="so",
+ cjkwd="w",
description="TRIANGULAR RULER",
direction="on",
linebreak="id",
@@ -215259,6 +226183,7 @@ characters.data={
},
[0x1F4D1]={
category="so",
+ cjkwd="w",
description="BOOKMARK TABS",
direction="on",
linebreak="id",
@@ -215266,6 +226191,7 @@ characters.data={
},
[0x1F4D2]={
category="so",
+ cjkwd="w",
description="LEDGER",
direction="on",
linebreak="id",
@@ -215273,6 +226199,7 @@ characters.data={
},
[0x1F4D3]={
category="so",
+ cjkwd="w",
description="NOTEBOOK",
direction="on",
linebreak="id",
@@ -215280,6 +226207,7 @@ characters.data={
},
[0x1F4D4]={
category="so",
+ cjkwd="w",
description="NOTEBOOK WITH DECORATIVE COVER",
direction="on",
linebreak="id",
@@ -215287,6 +226215,7 @@ characters.data={
},
[0x1F4D5]={
category="so",
+ cjkwd="w",
description="CLOSED BOOK",
direction="on",
linebreak="id",
@@ -215294,6 +226223,7 @@ characters.data={
},
[0x1F4D6]={
category="so",
+ cjkwd="w",
description="OPEN BOOK",
direction="on",
linebreak="id",
@@ -215301,6 +226231,7 @@ characters.data={
},
[0x1F4D7]={
category="so",
+ cjkwd="w",
description="GREEN BOOK",
direction="on",
linebreak="id",
@@ -215308,6 +226239,7 @@ characters.data={
},
[0x1F4D8]={
category="so",
+ cjkwd="w",
description="BLUE BOOK",
direction="on",
linebreak="id",
@@ -215315,6 +226247,7 @@ characters.data={
},
[0x1F4D9]={
category="so",
+ cjkwd="w",
description="ORANGE BOOK",
direction="on",
linebreak="id",
@@ -215322,6 +226255,7 @@ characters.data={
},
[0x1F4DA]={
category="so",
+ cjkwd="w",
description="BOOKS",
direction="on",
linebreak="id",
@@ -215329,6 +226263,7 @@ characters.data={
},
[0x1F4DB]={
category="so",
+ cjkwd="w",
description="NAME BADGE",
direction="on",
linebreak="id",
@@ -215336,6 +226271,7 @@ characters.data={
},
[0x1F4DC]={
category="so",
+ cjkwd="w",
description="SCROLL",
direction="on",
linebreak="id",
@@ -215343,6 +226279,7 @@ characters.data={
},
[0x1F4DD]={
category="so",
+ cjkwd="w",
description="MEMO",
direction="on",
linebreak="id",
@@ -215350,6 +226287,7 @@ characters.data={
},
[0x1F4DE]={
category="so",
+ cjkwd="w",
description="TELEPHONE RECEIVER",
direction="on",
linebreak="id",
@@ -215357,6 +226295,7 @@ characters.data={
},
[0x1F4DF]={
category="so",
+ cjkwd="w",
description="PAGER",
direction="on",
linebreak="id",
@@ -215364,6 +226303,7 @@ characters.data={
},
[0x1F4E0]={
category="so",
+ cjkwd="w",
description="FAX MACHINE",
direction="on",
linebreak="id",
@@ -215371,6 +226311,7 @@ characters.data={
},
[0x1F4E1]={
category="so",
+ cjkwd="w",
description="SATELLITE ANTENNA",
direction="on",
linebreak="id",
@@ -215378,6 +226319,7 @@ characters.data={
},
[0x1F4E2]={
category="so",
+ cjkwd="w",
description="PUBLIC ADDRESS LOUDSPEAKER",
direction="on",
linebreak="id",
@@ -215385,6 +226327,7 @@ characters.data={
},
[0x1F4E3]={
category="so",
+ cjkwd="w",
description="CHEERING MEGAPHONE",
direction="on",
linebreak="id",
@@ -215392,6 +226335,7 @@ characters.data={
},
[0x1F4E4]={
category="so",
+ cjkwd="w",
description="OUTBOX TRAY",
direction="on",
linebreak="id",
@@ -215399,6 +226343,7 @@ characters.data={
},
[0x1F4E5]={
category="so",
+ cjkwd="w",
description="INBOX TRAY",
direction="on",
linebreak="id",
@@ -215406,6 +226351,7 @@ characters.data={
},
[0x1F4E6]={
category="so",
+ cjkwd="w",
description="PACKAGE",
direction="on",
linebreak="id",
@@ -215413,6 +226359,7 @@ characters.data={
},
[0x1F4E7]={
category="so",
+ cjkwd="w",
description="E-MAIL SYMBOL",
direction="on",
linebreak="id",
@@ -215420,6 +226367,7 @@ characters.data={
},
[0x1F4E8]={
category="so",
+ cjkwd="w",
description="INCOMING ENVELOPE",
direction="on",
linebreak="id",
@@ -215427,6 +226375,7 @@ characters.data={
},
[0x1F4E9]={
category="so",
+ cjkwd="w",
description="ENVELOPE WITH DOWNWARDS ARROW ABOVE",
direction="on",
linebreak="id",
@@ -215434,6 +226383,7 @@ characters.data={
},
[0x1F4EA]={
category="so",
+ cjkwd="w",
description="CLOSED MAILBOX WITH LOWERED FLAG",
direction="on",
linebreak="id",
@@ -215441,6 +226391,7 @@ characters.data={
},
[0x1F4EB]={
category="so",
+ cjkwd="w",
description="CLOSED MAILBOX WITH RAISED FLAG",
direction="on",
linebreak="id",
@@ -215448,6 +226399,7 @@ characters.data={
},
[0x1F4EC]={
category="so",
+ cjkwd="w",
description="OPEN MAILBOX WITH RAISED FLAG",
direction="on",
linebreak="id",
@@ -215455,6 +226407,7 @@ characters.data={
},
[0x1F4ED]={
category="so",
+ cjkwd="w",
description="OPEN MAILBOX WITH LOWERED FLAG",
direction="on",
linebreak="id",
@@ -215462,6 +226415,7 @@ characters.data={
},
[0x1F4EE]={
category="so",
+ cjkwd="w",
description="POSTBOX",
direction="on",
linebreak="id",
@@ -215469,6 +226423,7 @@ characters.data={
},
[0x1F4EF]={
category="so",
+ cjkwd="w",
description="POSTAL HORN",
direction="on",
linebreak="id",
@@ -215476,6 +226431,7 @@ characters.data={
},
[0x1F4F0]={
category="so",
+ cjkwd="w",
description="NEWSPAPER",
direction="on",
linebreak="id",
@@ -215483,6 +226439,7 @@ characters.data={
},
[0x1F4F1]={
category="so",
+ cjkwd="w",
description="MOBILE PHONE",
direction="on",
linebreak="id",
@@ -215490,6 +226447,7 @@ characters.data={
},
[0x1F4F2]={
category="so",
+ cjkwd="w",
description="MOBILE PHONE WITH RIGHTWARDS ARROW AT LEFT",
direction="on",
linebreak="id",
@@ -215497,6 +226455,7 @@ characters.data={
},
[0x1F4F3]={
category="so",
+ cjkwd="w",
description="VIBRATION MODE",
direction="on",
linebreak="id",
@@ -215504,6 +226463,7 @@ characters.data={
},
[0x1F4F4]={
category="so",
+ cjkwd="w",
description="MOBILE PHONE OFF",
direction="on",
linebreak="id",
@@ -215511,6 +226471,7 @@ characters.data={
},
[0x1F4F5]={
category="so",
+ cjkwd="w",
description="NO MOBILE PHONES",
direction="on",
linebreak="id",
@@ -215518,6 +226479,7 @@ characters.data={
},
[0x1F4F6]={
category="so",
+ cjkwd="w",
description="ANTENNA WITH BARS",
direction="on",
linebreak="id",
@@ -215525,6 +226487,7 @@ characters.data={
},
[0x1F4F7]={
category="so",
+ cjkwd="w",
description="CAMERA",
direction="on",
linebreak="id",
@@ -215532,6 +226495,7 @@ characters.data={
},
[0x1F4F8]={
category="so",
+ cjkwd="w",
description="CAMERA WITH FLASH",
direction="on",
linebreak="id",
@@ -215539,6 +226503,7 @@ characters.data={
},
[0x1F4F9]={
category="so",
+ cjkwd="w",
description="VIDEO CAMERA",
direction="on",
linebreak="id",
@@ -215546,6 +226511,7 @@ characters.data={
},
[0x1F4FA]={
category="so",
+ cjkwd="w",
description="TELEVISION",
direction="on",
linebreak="id",
@@ -215553,6 +226519,7 @@ characters.data={
},
[0x1F4FB]={
category="so",
+ cjkwd="w",
description="RADIO",
direction="on",
linebreak="id",
@@ -215560,6 +226527,7 @@ characters.data={
},
[0x1F4FC]={
category="so",
+ cjkwd="w",
description="VIDEOCASSETTE",
direction="on",
linebreak="id",
@@ -215571,6 +226539,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F4FD,
+ variants=variants_emoji,
},
[0x1F4FE]={
category="so",
@@ -215581,6 +226550,7 @@ characters.data={
},
[0x1F4FF]={
category="so",
+ cjkwd="w",
description="PRAYER BEADS",
direction="on",
linebreak="id",
@@ -215588,6 +226558,7 @@ characters.data={
},
[0x1F500]={
category="so",
+ cjkwd="w",
description="TWISTED RIGHTWARDS ARROWS",
direction="on",
linebreak="al",
@@ -215595,6 +226566,7 @@ characters.data={
},
[0x1F501]={
category="so",
+ cjkwd="w",
description="CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS",
direction="on",
linebreak="al",
@@ -215602,6 +226574,7 @@ characters.data={
},
[0x1F502]={
category="so",
+ cjkwd="w",
description="CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS WITH CIRCLED ONE OVERLAY",
direction="on",
linebreak="al",
@@ -215609,6 +226582,7 @@ characters.data={
},
[0x1F503]={
category="so",
+ cjkwd="w",
description="CLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS",
direction="on",
linebreak="al",
@@ -215616,6 +226590,7 @@ characters.data={
},
[0x1F504]={
category="so",
+ cjkwd="w",
description="ANTICLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS",
direction="on",
linebreak="al",
@@ -215623,6 +226598,7 @@ characters.data={
},
[0x1F505]={
category="so",
+ cjkwd="w",
description="LOW BRIGHTNESS SYMBOL",
direction="on",
linebreak="al",
@@ -215630,6 +226606,7 @@ characters.data={
},
[0x1F506]={
category="so",
+ cjkwd="w",
description="HIGH BRIGHTNESS SYMBOL",
direction="on",
linebreak="al",
@@ -215637,6 +226614,7 @@ characters.data={
},
[0x1F507]={
category="so",
+ cjkwd="w",
description="SPEAKER WITH CANCELLATION STROKE",
direction="on",
linebreak="id",
@@ -215644,6 +226622,7 @@ characters.data={
},
[0x1F508]={
category="so",
+ cjkwd="w",
description="SPEAKER",
direction="on",
linebreak="id",
@@ -215651,6 +226630,7 @@ characters.data={
},
[0x1F509]={
category="so",
+ cjkwd="w",
description="SPEAKER WITH ONE SOUND WAVE",
direction="on",
linebreak="id",
@@ -215658,13 +226638,16 @@ characters.data={
},
[0x1F50A]={
category="so",
+ cjkwd="w",
description="SPEAKER WITH THREE SOUND WAVES",
direction="on",
linebreak="id",
+ synonyms={ "sound" },
unicodeslot=0x1F50A,
},
[0x1F50B]={
category="so",
+ cjkwd="w",
description="BATTERY",
direction="on",
linebreak="id",
@@ -215672,6 +226655,7 @@ characters.data={
},
[0x1F50C]={
category="so",
+ cjkwd="w",
description="ELECTRIC PLUG",
direction="on",
linebreak="id",
@@ -215679,6 +226663,7 @@ characters.data={
},
[0x1F50D]={
category="so",
+ cjkwd="w",
description="LEFT-POINTING MAGNIFYING GLASS",
direction="on",
linebreak="id",
@@ -215686,6 +226671,7 @@ characters.data={
},
[0x1F50E]={
category="so",
+ cjkwd="w",
description="RIGHT-POINTING MAGNIFYING GLASS",
direction="on",
linebreak="id",
@@ -215693,6 +226679,7 @@ characters.data={
},
[0x1F50F]={
category="so",
+ cjkwd="w",
description="LOCK WITH INK PEN",
direction="on",
linebreak="id",
@@ -215700,6 +226687,7 @@ characters.data={
},
[0x1F510]={
category="so",
+ cjkwd="w",
description="CLOSED LOCK WITH KEY",
direction="on",
linebreak="id",
@@ -215707,6 +226695,7 @@ characters.data={
},
[0x1F511]={
category="so",
+ cjkwd="w",
description="KEY",
direction="on",
linebreak="id",
@@ -215714,6 +226703,7 @@ characters.data={
},
[0x1F512]={
category="so",
+ cjkwd="w",
description="LOCK",
direction="on",
linebreak="id",
@@ -215721,6 +226711,7 @@ characters.data={
},
[0x1F513]={
category="so",
+ cjkwd="w",
description="OPEN LOCK",
direction="on",
linebreak="id",
@@ -215728,6 +226719,7 @@ characters.data={
},
[0x1F514]={
category="so",
+ cjkwd="w",
description="BELL",
direction="on",
linebreak="id",
@@ -215735,6 +226727,7 @@ characters.data={
},
[0x1F515]={
category="so",
+ cjkwd="w",
description="BELL WITH CANCELLATION STROKE",
direction="on",
linebreak="id",
@@ -215742,6 +226735,7 @@ characters.data={
},
[0x1F516]={
category="so",
+ cjkwd="w",
description="BOOKMARK",
direction="on",
linebreak="id",
@@ -215749,6 +226743,7 @@ characters.data={
},
[0x1F517]={
category="so",
+ cjkwd="w",
description="LINK SYMBOL",
direction="on",
linebreak="al",
@@ -215756,6 +226751,7 @@ characters.data={
},
[0x1F518]={
category="so",
+ cjkwd="w",
description="RADIO BUTTON",
direction="on",
linebreak="al",
@@ -215763,6 +226759,7 @@ characters.data={
},
[0x1F519]={
category="so",
+ cjkwd="w",
description="BACK WITH LEFTWARDS ARROW ABOVE",
direction="on",
linebreak="al",
@@ -215770,6 +226767,7 @@ characters.data={
},
[0x1F51A]={
category="so",
+ cjkwd="w",
description="END WITH LEFTWARDS ARROW ABOVE",
direction="on",
linebreak="al",
@@ -215777,6 +226775,7 @@ characters.data={
},
[0x1F51B]={
category="so",
+ cjkwd="w",
description="ON WITH EXCLAMATION MARK WITH LEFT RIGHT ARROW ABOVE",
direction="on",
linebreak="al",
@@ -215784,6 +226783,7 @@ characters.data={
},
[0x1F51C]={
category="so",
+ cjkwd="w",
description="SOON WITH RIGHTWARDS ARROW ABOVE",
direction="on",
linebreak="al",
@@ -215791,6 +226791,7 @@ characters.data={
},
[0x1F51D]={
category="so",
+ cjkwd="w",
description="TOP WITH UPWARDS ARROW ABOVE",
direction="on",
linebreak="al",
@@ -215798,6 +226799,7 @@ characters.data={
},
[0x1F51E]={
category="so",
+ cjkwd="w",
description="NO ONE UNDER EIGHTEEN SYMBOL",
direction="on",
linebreak="al",
@@ -215805,6 +226807,7 @@ characters.data={
},
[0x1F51F]={
category="so",
+ cjkwd="w",
description="KEYCAP TEN",
direction="on",
linebreak="al",
@@ -215812,6 +226815,7 @@ characters.data={
},
[0x1F520]={
category="so",
+ cjkwd="w",
description="INPUT SYMBOL FOR LATIN CAPITAL LETTERS",
direction="on",
linebreak="al",
@@ -215819,6 +226823,7 @@ characters.data={
},
[0x1F521]={
category="so",
+ cjkwd="w",
description="INPUT SYMBOL FOR LATIN SMALL LETTERS",
direction="on",
linebreak="al",
@@ -215826,6 +226831,7 @@ characters.data={
},
[0x1F522]={
category="so",
+ cjkwd="w",
description="INPUT SYMBOL FOR NUMBERS",
direction="on",
linebreak="al",
@@ -215833,6 +226839,7 @@ characters.data={
},
[0x1F523]={
category="so",
+ cjkwd="w",
description="INPUT SYMBOL FOR SYMBOLS",
direction="on",
linebreak="al",
@@ -215840,6 +226847,7 @@ characters.data={
},
[0x1F524]={
category="so",
+ cjkwd="w",
description="INPUT SYMBOL FOR LATIN LETTERS",
direction="on",
linebreak="al",
@@ -215847,6 +226855,7 @@ characters.data={
},
[0x1F525]={
category="so",
+ cjkwd="w",
description="FIRE",
direction="on",
linebreak="id",
@@ -215854,6 +226863,7 @@ characters.data={
},
[0x1F526]={
category="so",
+ cjkwd="w",
description="ELECTRIC TORCH",
direction="on",
linebreak="id",
@@ -215861,6 +226871,7 @@ characters.data={
},
[0x1F527]={
category="so",
+ cjkwd="w",
description="WRENCH",
direction="on",
linebreak="id",
@@ -215868,6 +226879,7 @@ characters.data={
},
[0x1F528]={
category="so",
+ cjkwd="w",
description="HAMMER",
direction="on",
linebreak="id",
@@ -215875,6 +226887,7 @@ characters.data={
},
[0x1F529]={
category="so",
+ cjkwd="w",
description="NUT AND BOLT",
direction="on",
linebreak="id",
@@ -215882,6 +226895,7 @@ characters.data={
},
[0x1F52A]={
category="so",
+ cjkwd="w",
description="HOCHO",
direction="on",
linebreak="id",
@@ -215889,6 +226903,7 @@ characters.data={
},
[0x1F52B]={
category="so",
+ cjkwd="w",
description="PISTOL",
direction="on",
linebreak="id",
@@ -215896,6 +226911,7 @@ characters.data={
},
[0x1F52C]={
category="so",
+ cjkwd="w",
description="MICROSCOPE",
direction="on",
linebreak="id",
@@ -215903,6 +226919,7 @@ characters.data={
},
[0x1F52D]={
category="so",
+ cjkwd="w",
description="TELESCOPE",
direction="on",
linebreak="id",
@@ -215910,6 +226927,7 @@ characters.data={
},
[0x1F52E]={
category="so",
+ cjkwd="w",
description="CRYSTAL BALL",
direction="on",
linebreak="id",
@@ -215917,6 +226935,7 @@ characters.data={
},
[0x1F52F]={
category="so",
+ cjkwd="w",
description="SIX POINTED STAR WITH MIDDLE DOT",
direction="on",
linebreak="id",
@@ -215924,6 +226943,7 @@ characters.data={
},
[0x1F530]={
category="so",
+ cjkwd="w",
description="JAPANESE SYMBOL FOR BEGINNER",
direction="on",
linebreak="id",
@@ -215931,6 +226951,7 @@ characters.data={
},
[0x1F531]={
category="so",
+ cjkwd="w",
description="TRIDENT EMBLEM",
direction="on",
linebreak="id",
@@ -215938,6 +226959,7 @@ characters.data={
},
[0x1F532]={
category="so",
+ cjkwd="w",
description="BLACK SQUARE BUTTON",
direction="on",
linebreak="al",
@@ -215945,6 +226967,7 @@ characters.data={
},
[0x1F533]={
category="so",
+ cjkwd="w",
description="WHITE SQUARE BUTTON",
direction="on",
linebreak="al",
@@ -215952,6 +226975,7 @@ characters.data={
},
[0x1F534]={
category="so",
+ cjkwd="w",
description="LARGE RED CIRCLE",
direction="on",
linebreak="al",
@@ -215959,6 +226983,7 @@ characters.data={
},
[0x1F535]={
category="so",
+ cjkwd="w",
description="LARGE BLUE CIRCLE",
direction="on",
linebreak="al",
@@ -215966,6 +226991,7 @@ characters.data={
},
[0x1F536]={
category="so",
+ cjkwd="w",
description="LARGE ORANGE DIAMOND",
direction="on",
linebreak="al",
@@ -215973,6 +226999,7 @@ characters.data={
},
[0x1F537]={
category="so",
+ cjkwd="w",
description="LARGE BLUE DIAMOND",
direction="on",
linebreak="al",
@@ -215980,6 +227007,7 @@ characters.data={
},
[0x1F538]={
category="so",
+ cjkwd="w",
description="SMALL ORANGE DIAMOND",
direction="on",
linebreak="al",
@@ -215987,6 +227015,7 @@ characters.data={
},
[0x1F539]={
category="so",
+ cjkwd="w",
description="SMALL BLUE DIAMOND",
direction="on",
linebreak="al",
@@ -215994,6 +227023,7 @@ characters.data={
},
[0x1F53A]={
category="so",
+ cjkwd="w",
description="UP-POINTING RED TRIANGLE",
direction="on",
linebreak="al",
@@ -216001,6 +227031,7 @@ characters.data={
},
[0x1F53B]={
category="so",
+ cjkwd="w",
description="DOWN-POINTING RED TRIANGLE",
direction="on",
linebreak="al",
@@ -216008,6 +227039,7 @@ characters.data={
},
[0x1F53C]={
category="so",
+ cjkwd="w",
description="UP-POINTING SMALL RED TRIANGLE",
direction="on",
linebreak="al",
@@ -216015,6 +227047,7 @@ characters.data={
},
[0x1F53D]={
category="so",
+ cjkwd="w",
description="DOWN-POINTING SMALL RED TRIANGLE",
direction="on",
linebreak="al",
@@ -216103,6 +227136,7 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0x1F549,
+ variants=variants_emoji,
},
[0x1F54A]={
category="so",
@@ -216110,9 +227144,11 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F54A,
+ variants=variants_emoji,
},
[0x1F54B]={
category="so",
+ cjkwd="w",
description="KAABA",
direction="on",
linebreak="id",
@@ -216120,6 +227156,7 @@ characters.data={
},
[0x1F54C]={
category="so",
+ cjkwd="w",
description="MOSQUE",
direction="on",
linebreak="id",
@@ -216127,6 +227164,7 @@ characters.data={
},
[0x1F54D]={
category="so",
+ cjkwd="w",
description="SYNAGOGUE",
direction="on",
linebreak="id",
@@ -216134,6 +227172,7 @@ characters.data={
},
[0x1F54E]={
category="so",
+ cjkwd="w",
description="MENORAH WITH NINE BRANCHES",
direction="on",
linebreak="id",
@@ -216148,6 +227187,7 @@ characters.data={
},
[0x1F550]={
category="so",
+ cjkwd="w",
description="CLOCK FACE ONE OCLOCK",
direction="on",
linebreak="id",
@@ -216155,6 +227195,7 @@ characters.data={
},
[0x1F551]={
category="so",
+ cjkwd="w",
description="CLOCK FACE TWO OCLOCK",
direction="on",
linebreak="id",
@@ -216162,6 +227203,7 @@ characters.data={
},
[0x1F552]={
category="so",
+ cjkwd="w",
description="CLOCK FACE THREE OCLOCK",
direction="on",
linebreak="id",
@@ -216169,6 +227211,7 @@ characters.data={
},
[0x1F553]={
category="so",
+ cjkwd="w",
description="CLOCK FACE FOUR OCLOCK",
direction="on",
linebreak="id",
@@ -216176,6 +227219,7 @@ characters.data={
},
[0x1F554]={
category="so",
+ cjkwd="w",
description="CLOCK FACE FIVE OCLOCK",
direction="on",
linebreak="id",
@@ -216183,6 +227227,7 @@ characters.data={
},
[0x1F555]={
category="so",
+ cjkwd="w",
description="CLOCK FACE SIX OCLOCK",
direction="on",
linebreak="id",
@@ -216190,6 +227235,7 @@ characters.data={
},
[0x1F556]={
category="so",
+ cjkwd="w",
description="CLOCK FACE SEVEN OCLOCK",
direction="on",
linebreak="id",
@@ -216197,6 +227243,7 @@ characters.data={
},
[0x1F557]={
category="so",
+ cjkwd="w",
description="CLOCK FACE EIGHT OCLOCK",
direction="on",
linebreak="id",
@@ -216204,6 +227251,7 @@ characters.data={
},
[0x1F558]={
category="so",
+ cjkwd="w",
description="CLOCK FACE NINE OCLOCK",
direction="on",
linebreak="id",
@@ -216211,6 +227259,7 @@ characters.data={
},
[0x1F559]={
category="so",
+ cjkwd="w",
description="CLOCK FACE TEN OCLOCK",
direction="on",
linebreak="id",
@@ -216218,6 +227267,7 @@ characters.data={
},
[0x1F55A]={
category="so",
+ cjkwd="w",
description="CLOCK FACE ELEVEN OCLOCK",
direction="on",
linebreak="id",
@@ -216225,6 +227275,7 @@ characters.data={
},
[0x1F55B]={
category="so",
+ cjkwd="w",
description="CLOCK FACE TWELVE OCLOCK",
direction="on",
linebreak="id",
@@ -216232,6 +227283,7 @@ characters.data={
},
[0x1F55C]={
category="so",
+ cjkwd="w",
description="CLOCK FACE ONE-THIRTY",
direction="on",
linebreak="id",
@@ -216239,6 +227291,7 @@ characters.data={
},
[0x1F55D]={
category="so",
+ cjkwd="w",
description="CLOCK FACE TWO-THIRTY",
direction="on",
linebreak="id",
@@ -216246,6 +227299,7 @@ characters.data={
},
[0x1F55E]={
category="so",
+ cjkwd="w",
description="CLOCK FACE THREE-THIRTY",
direction="on",
linebreak="id",
@@ -216253,6 +227307,7 @@ characters.data={
},
[0x1F55F]={
category="so",
+ cjkwd="w",
description="CLOCK FACE FOUR-THIRTY",
direction="on",
linebreak="id",
@@ -216260,6 +227315,7 @@ characters.data={
},
[0x1F560]={
category="so",
+ cjkwd="w",
description="CLOCK FACE FIVE-THIRTY",
direction="on",
linebreak="id",
@@ -216267,6 +227323,7 @@ characters.data={
},
[0x1F561]={
category="so",
+ cjkwd="w",
description="CLOCK FACE SIX-THIRTY",
direction="on",
linebreak="id",
@@ -216274,6 +227331,7 @@ characters.data={
},
[0x1F562]={
category="so",
+ cjkwd="w",
description="CLOCK FACE SEVEN-THIRTY",
direction="on",
linebreak="id",
@@ -216281,6 +227339,7 @@ characters.data={
},
[0x1F563]={
category="so",
+ cjkwd="w",
description="CLOCK FACE EIGHT-THIRTY",
direction="on",
linebreak="id",
@@ -216288,6 +227347,7 @@ characters.data={
},
[0x1F564]={
category="so",
+ cjkwd="w",
description="CLOCK FACE NINE-THIRTY",
direction="on",
linebreak="id",
@@ -216295,6 +227355,7 @@ characters.data={
},
[0x1F565]={
category="so",
+ cjkwd="w",
description="CLOCK FACE TEN-THIRTY",
direction="on",
linebreak="id",
@@ -216302,6 +227363,7 @@ characters.data={
},
[0x1F566]={
category="so",
+ cjkwd="w",
description="CLOCK FACE ELEVEN-THIRTY",
direction="on",
linebreak="id",
@@ -216309,6 +227371,7 @@ characters.data={
},
[0x1F567]={
category="so",
+ cjkwd="w",
description="CLOCK FACE TWELVE-THIRTY",
direction="on",
linebreak="id",
@@ -216369,6 +227432,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F56F,
+ variants=variants_emoji,
},
[0x1F570]={
category="so",
@@ -216376,6 +227440,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F570,
+ variants=variants_emoji,
},
[0x1F571]={
category="so",
@@ -216397,6 +227462,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F573,
+ variants=variants_emoji,
},
[0x1F574]={
category="so",
@@ -216404,13 +227470,15 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F574,
+ variants=variants_emoji,
},
[0x1F575]={
category="so",
description="SLEUTH OR SPY",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F575,
+ variants=variants_emoji,
},
[0x1F576]={
category="so",
@@ -216418,6 +227486,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F576,
+ variants=variants_emoji,
},
[0x1F577]={
category="so",
@@ -216425,6 +227494,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F577,
+ variants=variants_emoji,
},
[0x1F578]={
category="so",
@@ -216432,6 +227502,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F578,
+ variants=variants_emoji,
},
[0x1F579]={
category="so",
@@ -216439,6 +227510,15 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F579,
+ variants=variants_emoji,
+ },
+ [0x1F57A]={
+ category="so",
+ cjkwd="w",
+ description="MAN DANCING",
+ direction="on",
+ linebreak="eb",
+ unicodeslot=0x1F57A,
},
[0x1F57B]={
category="so",
@@ -216459,6 +227539,7 @@ characters.data={
description="RIGHT HAND TELEPHONE RECEIVER",
direction="on",
linebreak="id",
+ synonyms={ "telephone handset" },
unicodeslot=0x1F57D,
},
[0x1F57E]={
@@ -216530,6 +227611,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F587,
+ variants=variants_emoji,
},
[0x1F588]={
category="so",
@@ -216551,6 +227633,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F58A,
+ variants=variants_emoji,
},
[0x1F58B]={
category="so",
@@ -216558,6 +227641,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F58B,
+ variants=variants_emoji,
},
[0x1F58C]={
category="so",
@@ -216565,6 +227649,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F58C,
+ variants=variants_emoji,
},
[0x1F58D]={
category="so",
@@ -216572,6 +227657,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F58D,
+ variants=variants_emoji,
},
[0x1F58E]={
category="so",
@@ -216591,8 +227677,9 @@ characters.data={
category="so",
description="RAISED HAND WITH FINGERS SPLAYED",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F590,
+ variants=variants_emoji,
},
[0x1F591]={
category="so",
@@ -216624,16 +227711,18 @@ characters.data={
},
[0x1F595]={
category="so",
+ cjkwd="w",
description="REVERSED HAND WITH MIDDLE FINGER EXTENDED",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F595,
},
[0x1F596]={
category="so",
+ cjkwd="w",
description="RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F596,
},
[0x1F597]={
@@ -216727,12 +227816,21 @@ characters.data={
linebreak="id",
unicodeslot=0x1F5A3,
},
+ [0x1F5A4]={
+ category="so",
+ cjkwd="w",
+ description="BLACK HEART",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F5A4,
+ },
[0x1F5A5]={
category="so",
description="DESKTOP COMPUTER",
direction="on",
linebreak="id",
unicodeslot=0x1F5A5,
+ variants=variants_emoji,
},
[0x1F5A6]={
category="so",
@@ -216754,6 +227852,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F5A8,
+ variants=variants_emoji,
},
[0x1F5A9]={
category="so",
@@ -216817,6 +227916,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F5B1,
+ variants=variants_emoji,
},
[0x1F5B2]={
category="so",
@@ -216824,6 +227924,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F5B2,
+ variants=variants_emoji,
},
[0x1F5B3]={
category="so",
@@ -216894,6 +227995,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F5BC,
+ variants=variants_emoji,
},
[0x1F5BD]={
category="so",
@@ -216936,6 +228038,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F5C2,
+ variants=variants_emoji,
},
[0x1F5C3]={
category="so",
@@ -216943,6 +228046,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F5C3,
+ variants=variants_emoji,
},
[0x1F5C4]={
category="so",
@@ -216950,6 +228054,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F5C4,
+ variants=variants_emoji,
},
[0x1F5C5]={
category="so",
@@ -217040,7 +228145,9 @@ characters.data={
description="WASTEBASKET",
direction="on",
linebreak="id",
+ synonyms={ "trashcan" },
unicodeslot=0x1F5D1,
+ variants=variants_emoji,
},
[0x1F5D2]={
category="so",
@@ -217048,6 +228155,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F5D2,
+ variants=variants_emoji,
},
[0x1F5D3]={
category="so",
@@ -217055,6 +228163,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F5D3,
+ variants=variants_emoji,
},
[0x1F5D4]={
category="so",
@@ -217118,6 +228227,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F5DC,
+ variants=variants_emoji,
},
[0x1F5DD]={
category="so",
@@ -217125,6 +228235,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F5DD,
+ variants=variants_emoji,
},
[0x1F5DE]={
category="so",
@@ -217132,6 +228243,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F5DE,
+ variants=variants_emoji,
},
[0x1F5DF]={
category="so",
@@ -217153,6 +228265,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F5E1,
+ variants=variants_emoji,
},
[0x1F5E2]={
category="so",
@@ -217167,6 +228280,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F5E3,
+ variants=variants_emoji,
},
[0x1F5E4]={
category="so",
@@ -217202,6 +228316,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F5E8,
+ variants=variants_emoji,
},
[0x1F5E9]={
category="so",
@@ -217251,6 +228366,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F5EF,
+ variants=variants_emoji,
},
[0x1F5F0]={
category="so",
@@ -217271,6 +228387,7 @@ characters.data={
description="LIGHTNING MOOD",
direction="on",
linebreak="id",
+ synonyms={ "lightning bolt" },
unicodeslot=0x1F5F2,
},
[0x1F5F3]={
@@ -217279,6 +228396,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F5F3,
+ variants=variants_emoji,
},
[0x1F5F4]={
category="so",
@@ -217328,9 +228446,11 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F5FA,
+ variants=variants_emoji,
},
[0x1F5FB]={
category="so",
+ cjkwd="w",
description="MOUNT FUJI",
direction="on",
linebreak="id",
@@ -217338,6 +228458,7 @@ characters.data={
},
[0x1F5FC]={
category="so",
+ cjkwd="w",
description="TOKYO TOWER",
direction="on",
linebreak="id",
@@ -217345,6 +228466,7 @@ characters.data={
},
[0x1F5FD]={
category="so",
+ cjkwd="w",
description="STATUE OF LIBERTY",
direction="on",
linebreak="id",
@@ -217352,6 +228474,7 @@ characters.data={
},
[0x1F5FE]={
category="so",
+ cjkwd="w",
description="SILHOUETTE OF JAPAN",
direction="on",
linebreak="id",
@@ -217359,6 +228482,7 @@ characters.data={
},
[0x1F5FF]={
category="so",
+ cjkwd="w",
description="MOYAI",
direction="on",
linebreak="id",
@@ -217366,6 +228490,7 @@ characters.data={
},
[0x1F600]={
category="so",
+ cjkwd="w",
description="GRINNING FACE",
direction="on",
linebreak="id",
@@ -217373,6 +228498,7 @@ characters.data={
},
[0x1F601]={
category="so",
+ cjkwd="w",
description="GRINNING FACE WITH SMILING EYES",
direction="on",
linebreak="id",
@@ -217380,6 +228506,7 @@ characters.data={
},
[0x1F602]={
category="so",
+ cjkwd="w",
description="FACE WITH TEARS OF JOY",
direction="on",
linebreak="id",
@@ -217387,6 +228514,7 @@ characters.data={
},
[0x1F603]={
category="so",
+ cjkwd="w",
description="SMILING FACE WITH OPEN MOUTH",
direction="on",
linebreak="id",
@@ -217394,6 +228522,7 @@ characters.data={
},
[0x1F604]={
category="so",
+ cjkwd="w",
description="SMILING FACE WITH OPEN MOUTH AND SMILING EYES",
direction="on",
linebreak="id",
@@ -217401,6 +228530,7 @@ characters.data={
},
[0x1F605]={
category="so",
+ cjkwd="w",
description="SMILING FACE WITH OPEN MOUTH AND COLD SWEAT",
direction="on",
linebreak="id",
@@ -217408,6 +228538,7 @@ characters.data={
},
[0x1F606]={
category="so",
+ cjkwd="w",
description="SMILING FACE WITH OPEN MOUTH AND TIGHTLY-CLOSED EYES",
direction="on",
linebreak="id",
@@ -217415,6 +228546,7 @@ characters.data={
},
[0x1F607]={
category="so",
+ cjkwd="w",
description="SMILING FACE WITH HALO",
direction="on",
linebreak="id",
@@ -217422,6 +228554,7 @@ characters.data={
},
[0x1F608]={
category="so",
+ cjkwd="w",
description="SMILING FACE WITH HORNS",
direction="on",
linebreak="id",
@@ -217429,6 +228562,7 @@ characters.data={
},
[0x1F609]={
category="so",
+ cjkwd="w",
description="WINKING FACE",
direction="on",
linebreak="id",
@@ -217436,6 +228570,7 @@ characters.data={
},
[0x1F60A]={
category="so",
+ cjkwd="w",
description="SMILING FACE WITH SMILING EYES",
direction="on",
linebreak="id",
@@ -217443,6 +228578,7 @@ characters.data={
},
[0x1F60B]={
category="so",
+ cjkwd="w",
description="FACE SAVOURING DELICIOUS FOOD",
direction="on",
linebreak="id",
@@ -217450,6 +228586,7 @@ characters.data={
},
[0x1F60C]={
category="so",
+ cjkwd="w",
description="RELIEVED FACE",
direction="on",
linebreak="id",
@@ -217457,6 +228594,7 @@ characters.data={
},
[0x1F60D]={
category="so",
+ cjkwd="w",
description="SMILING FACE WITH HEART-SHAPED EYES",
direction="on",
linebreak="id",
@@ -217464,6 +228602,7 @@ characters.data={
},
[0x1F60E]={
category="so",
+ cjkwd="w",
description="SMILING FACE WITH SUNGLASSES",
direction="on",
linebreak="id",
@@ -217471,6 +228610,7 @@ characters.data={
},
[0x1F60F]={
category="so",
+ cjkwd="w",
description="SMIRKING FACE",
direction="on",
linebreak="id",
@@ -217478,6 +228618,7 @@ characters.data={
},
[0x1F610]={
category="so",
+ cjkwd="w",
description="NEUTRAL FACE",
direction="on",
linebreak="id",
@@ -217485,6 +228626,7 @@ characters.data={
},
[0x1F611]={
category="so",
+ cjkwd="w",
description="EXPRESSIONLESS FACE",
direction="on",
linebreak="id",
@@ -217492,6 +228634,7 @@ characters.data={
},
[0x1F612]={
category="so",
+ cjkwd="w",
description="UNAMUSED FACE",
direction="on",
linebreak="id",
@@ -217499,6 +228642,7 @@ characters.data={
},
[0x1F613]={
category="so",
+ cjkwd="w",
description="FACE WITH COLD SWEAT",
direction="on",
linebreak="id",
@@ -217506,6 +228650,7 @@ characters.data={
},
[0x1F614]={
category="so",
+ cjkwd="w",
description="PENSIVE FACE",
direction="on",
linebreak="id",
@@ -217513,6 +228658,7 @@ characters.data={
},
[0x1F615]={
category="so",
+ cjkwd="w",
description="CONFUSED FACE",
direction="on",
linebreak="id",
@@ -217520,6 +228666,7 @@ characters.data={
},
[0x1F616]={
category="so",
+ cjkwd="w",
description="CONFOUNDED FACE",
direction="on",
linebreak="id",
@@ -217527,6 +228674,7 @@ characters.data={
},
[0x1F617]={
category="so",
+ cjkwd="w",
description="KISSING FACE",
direction="on",
linebreak="id",
@@ -217534,6 +228682,7 @@ characters.data={
},
[0x1F618]={
category="so",
+ cjkwd="w",
description="FACE THROWING A KISS",
direction="on",
linebreak="id",
@@ -217541,6 +228690,7 @@ characters.data={
},
[0x1F619]={
category="so",
+ cjkwd="w",
description="KISSING FACE WITH SMILING EYES",
direction="on",
linebreak="id",
@@ -217548,6 +228698,7 @@ characters.data={
},
[0x1F61A]={
category="so",
+ cjkwd="w",
description="KISSING FACE WITH CLOSED EYES",
direction="on",
linebreak="id",
@@ -217555,6 +228706,7 @@ characters.data={
},
[0x1F61B]={
category="so",
+ cjkwd="w",
description="FACE WITH STUCK-OUT TONGUE",
direction="on",
linebreak="id",
@@ -217562,6 +228714,7 @@ characters.data={
},
[0x1F61C]={
category="so",
+ cjkwd="w",
description="FACE WITH STUCK-OUT TONGUE AND WINKING EYE",
direction="on",
linebreak="id",
@@ -217569,6 +228722,7 @@ characters.data={
},
[0x1F61D]={
category="so",
+ cjkwd="w",
description="FACE WITH STUCK-OUT TONGUE AND TIGHTLY-CLOSED EYES",
direction="on",
linebreak="id",
@@ -217576,6 +228730,7 @@ characters.data={
},
[0x1F61E]={
category="so",
+ cjkwd="w",
description="DISAPPOINTED FACE",
direction="on",
linebreak="id",
@@ -217583,6 +228738,7 @@ characters.data={
},
[0x1F61F]={
category="so",
+ cjkwd="w",
description="WORRIED FACE",
direction="on",
linebreak="id",
@@ -217590,6 +228746,7 @@ characters.data={
},
[0x1F620]={
category="so",
+ cjkwd="w",
description="ANGRY FACE",
direction="on",
linebreak="id",
@@ -217597,6 +228754,7 @@ characters.data={
},
[0x1F621]={
category="so",
+ cjkwd="w",
description="POUTING FACE",
direction="on",
linebreak="id",
@@ -217604,6 +228762,7 @@ characters.data={
},
[0x1F622]={
category="so",
+ cjkwd="w",
description="CRYING FACE",
direction="on",
linebreak="id",
@@ -217611,6 +228770,7 @@ characters.data={
},
[0x1F623]={
category="so",
+ cjkwd="w",
description="PERSEVERING FACE",
direction="on",
linebreak="id",
@@ -217618,6 +228778,7 @@ characters.data={
},
[0x1F624]={
category="so",
+ cjkwd="w",
description="FACE WITH LOOK OF TRIUMPH",
direction="on",
linebreak="id",
@@ -217625,6 +228786,7 @@ characters.data={
},
[0x1F625]={
category="so",
+ cjkwd="w",
description="DISAPPOINTED BUT RELIEVED FACE",
direction="on",
linebreak="id",
@@ -217632,6 +228794,7 @@ characters.data={
},
[0x1F626]={
category="so",
+ cjkwd="w",
description="FROWNING FACE WITH OPEN MOUTH",
direction="on",
linebreak="id",
@@ -217639,6 +228802,7 @@ characters.data={
},
[0x1F627]={
category="so",
+ cjkwd="w",
description="ANGUISHED FACE",
direction="on",
linebreak="id",
@@ -217646,6 +228810,7 @@ characters.data={
},
[0x1F628]={
category="so",
+ cjkwd="w",
description="FEARFUL FACE",
direction="on",
linebreak="id",
@@ -217653,6 +228818,7 @@ characters.data={
},
[0x1F629]={
category="so",
+ cjkwd="w",
description="WEARY FACE",
direction="on",
linebreak="id",
@@ -217660,6 +228826,7 @@ characters.data={
},
[0x1F62A]={
category="so",
+ cjkwd="w",
description="SLEEPY FACE",
direction="on",
linebreak="id",
@@ -217667,6 +228834,7 @@ characters.data={
},
[0x1F62B]={
category="so",
+ cjkwd="w",
description="TIRED FACE",
direction="on",
linebreak="id",
@@ -217674,6 +228842,7 @@ characters.data={
},
[0x1F62C]={
category="so",
+ cjkwd="w",
description="GRIMACING FACE",
direction="on",
linebreak="id",
@@ -217681,6 +228850,7 @@ characters.data={
},
[0x1F62D]={
category="so",
+ cjkwd="w",
description="LOUDLY CRYING FACE",
direction="on",
linebreak="id",
@@ -217688,6 +228858,7 @@ characters.data={
},
[0x1F62E]={
category="so",
+ cjkwd="w",
description="FACE WITH OPEN MOUTH",
direction="on",
linebreak="id",
@@ -217695,6 +228866,7 @@ characters.data={
},
[0x1F62F]={
category="so",
+ cjkwd="w",
description="HUSHED FACE",
direction="on",
linebreak="id",
@@ -217702,6 +228874,7 @@ characters.data={
},
[0x1F630]={
category="so",
+ cjkwd="w",
description="FACE WITH OPEN MOUTH AND COLD SWEAT",
direction="on",
linebreak="id",
@@ -217709,6 +228882,7 @@ characters.data={
},
[0x1F631]={
category="so",
+ cjkwd="w",
description="FACE SCREAMING IN FEAR",
direction="on",
linebreak="id",
@@ -217716,6 +228890,7 @@ characters.data={
},
[0x1F632]={
category="so",
+ cjkwd="w",
description="ASTONISHED FACE",
direction="on",
linebreak="id",
@@ -217723,6 +228898,7 @@ characters.data={
},
[0x1F633]={
category="so",
+ cjkwd="w",
description="FLUSHED FACE",
direction="on",
linebreak="id",
@@ -217730,6 +228906,7 @@ characters.data={
},
[0x1F634]={
category="so",
+ cjkwd="w",
description="SLEEPING FACE",
direction="on",
linebreak="id",
@@ -217737,6 +228914,7 @@ characters.data={
},
[0x1F635]={
category="so",
+ cjkwd="w",
description="DIZZY FACE",
direction="on",
linebreak="id",
@@ -217744,6 +228922,7 @@ characters.data={
},
[0x1F636]={
category="so",
+ cjkwd="w",
description="FACE WITHOUT MOUTH",
direction="on",
linebreak="id",
@@ -217751,6 +228930,7 @@ characters.data={
},
[0x1F637]={
category="so",
+ cjkwd="w",
description="FACE WITH MEDICAL MASK",
direction="on",
linebreak="id",
@@ -217758,6 +228938,7 @@ characters.data={
},
[0x1F638]={
category="so",
+ cjkwd="w",
description="GRINNING CAT FACE WITH SMILING EYES",
direction="on",
linebreak="id",
@@ -217765,6 +228946,7 @@ characters.data={
},
[0x1F639]={
category="so",
+ cjkwd="w",
description="CAT FACE WITH TEARS OF JOY",
direction="on",
linebreak="id",
@@ -217772,6 +228954,7 @@ characters.data={
},
[0x1F63A]={
category="so",
+ cjkwd="w",
description="SMILING CAT FACE WITH OPEN MOUTH",
direction="on",
linebreak="id",
@@ -217779,6 +228962,7 @@ characters.data={
},
[0x1F63B]={
category="so",
+ cjkwd="w",
description="SMILING CAT FACE WITH HEART-SHAPED EYES",
direction="on",
linebreak="id",
@@ -217786,6 +228970,7 @@ characters.data={
},
[0x1F63C]={
category="so",
+ cjkwd="w",
description="CAT FACE WITH WRY SMILE",
direction="on",
linebreak="id",
@@ -217793,6 +228978,7 @@ characters.data={
},
[0x1F63D]={
category="so",
+ cjkwd="w",
description="KISSING CAT FACE WITH CLOSED EYES",
direction="on",
linebreak="id",
@@ -217800,6 +228986,7 @@ characters.data={
},
[0x1F63E]={
category="so",
+ cjkwd="w",
description="POUTING CAT FACE",
direction="on",
linebreak="id",
@@ -217807,6 +228994,7 @@ characters.data={
},
[0x1F63F]={
category="so",
+ cjkwd="w",
description="CRYING CAT FACE",
direction="on",
linebreak="id",
@@ -217814,6 +229002,7 @@ characters.data={
},
[0x1F640]={
category="so",
+ cjkwd="w",
description="WEARY CAT FACE",
direction="on",
linebreak="id",
@@ -217821,6 +229010,7 @@ characters.data={
},
[0x1F641]={
category="so",
+ cjkwd="w",
description="SLIGHTLY FROWNING FACE",
direction="on",
linebreak="id",
@@ -217828,6 +229018,7 @@ characters.data={
},
[0x1F642]={
category="so",
+ cjkwd="w",
description="SLIGHTLY SMILING FACE",
direction="on",
linebreak="id",
@@ -217835,6 +229026,7 @@ characters.data={
},
[0x1F643]={
category="so",
+ cjkwd="w",
description="UPSIDE-DOWN FACE",
direction="on",
linebreak="id",
@@ -217842,6 +229034,7 @@ characters.data={
},
[0x1F644]={
category="so",
+ cjkwd="w",
description="FACE WITH ROLLING EYES",
direction="on",
linebreak="id",
@@ -217849,27 +229042,31 @@ characters.data={
},
[0x1F645]={
category="so",
+ cjkwd="w",
description="FACE WITH NO GOOD GESTURE",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F645,
},
[0x1F646]={
category="so",
+ cjkwd="w",
description="FACE WITH OK GESTURE",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F646,
},
[0x1F647]={
category="so",
+ cjkwd="w",
description="PERSON BOWING DEEPLY",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F647,
},
[0x1F648]={
category="so",
+ cjkwd="w",
description="SEE-NO-EVIL MONKEY",
direction="on",
linebreak="id",
@@ -217877,6 +229074,7 @@ characters.data={
},
[0x1F649]={
category="so",
+ cjkwd="w",
description="HEAR-NO-EVIL MONKEY",
direction="on",
linebreak="id",
@@ -217884,6 +229082,7 @@ characters.data={
},
[0x1F64A]={
category="so",
+ cjkwd="w",
description="SPEAK-NO-EVIL MONKEY",
direction="on",
linebreak="id",
@@ -217891,37 +229090,42 @@ characters.data={
},
[0x1F64B]={
category="so",
+ cjkwd="w",
description="HAPPY PERSON RAISING ONE HAND",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F64B,
},
[0x1F64C]={
category="so",
+ cjkwd="w",
description="PERSON RAISING BOTH HANDS IN CELEBRATION",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F64C,
},
[0x1F64D]={
category="so",
+ cjkwd="w",
description="PERSON FROWNING",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F64D,
},
[0x1F64E]={
category="so",
+ cjkwd="w",
description="PERSON WITH POUTING FACE",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F64E,
},
[0x1F64F]={
category="so",
+ cjkwd="w",
description="PERSON WITH FOLDED HANDS",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F64F,
},
[0x1F650]={
@@ -218262,6 +229466,7 @@ characters.data={
},
[0x1F680]={
category="so",
+ cjkwd="w",
description="ROCKET",
direction="on",
linebreak="id",
@@ -218269,6 +229474,7 @@ characters.data={
},
[0x1F681]={
category="so",
+ cjkwd="w",
description="HELICOPTER",
direction="on",
linebreak="id",
@@ -218276,6 +229482,7 @@ characters.data={
},
[0x1F682]={
category="so",
+ cjkwd="w",
description="STEAM LOCOMOTIVE",
direction="on",
linebreak="id",
@@ -218283,6 +229490,7 @@ characters.data={
},
[0x1F683]={
category="so",
+ cjkwd="w",
description="RAILWAY CAR",
direction="on",
linebreak="id",
@@ -218290,6 +229498,7 @@ characters.data={
},
[0x1F684]={
category="so",
+ cjkwd="w",
description="HIGH-SPEED TRAIN",
direction="on",
linebreak="id",
@@ -218297,6 +229506,7 @@ characters.data={
},
[0x1F685]={
category="so",
+ cjkwd="w",
description="HIGH-SPEED TRAIN WITH BULLET NOSE",
direction="on",
linebreak="id",
@@ -218304,6 +229514,7 @@ characters.data={
},
[0x1F686]={
category="so",
+ cjkwd="w",
description="TRAIN",
direction="on",
linebreak="id",
@@ -218311,6 +229522,7 @@ characters.data={
},
[0x1F687]={
category="so",
+ cjkwd="w",
description="METRO",
direction="on",
linebreak="id",
@@ -218318,6 +229530,7 @@ characters.data={
},
[0x1F688]={
category="so",
+ cjkwd="w",
description="LIGHT RAIL",
direction="on",
linebreak="id",
@@ -218325,6 +229538,7 @@ characters.data={
},
[0x1F689]={
category="so",
+ cjkwd="w",
description="STATION",
direction="on",
linebreak="id",
@@ -218332,6 +229546,7 @@ characters.data={
},
[0x1F68A]={
category="so",
+ cjkwd="w",
description="TRAM",
direction="on",
linebreak="id",
@@ -218339,6 +229554,7 @@ characters.data={
},
[0x1F68B]={
category="so",
+ cjkwd="w",
description="TRAM CAR",
direction="on",
linebreak="id",
@@ -218346,6 +229562,7 @@ characters.data={
},
[0x1F68C]={
category="so",
+ cjkwd="w",
description="BUS",
direction="on",
linebreak="id",
@@ -218353,6 +229570,7 @@ characters.data={
},
[0x1F68D]={
category="so",
+ cjkwd="w",
description="ONCOMING BUS",
direction="on",
linebreak="id",
@@ -218360,6 +229578,7 @@ characters.data={
},
[0x1F68E]={
category="so",
+ cjkwd="w",
description="TROLLEYBUS",
direction="on",
linebreak="id",
@@ -218367,6 +229586,7 @@ characters.data={
},
[0x1F68F]={
category="so",
+ cjkwd="w",
description="BUS STOP",
direction="on",
linebreak="id",
@@ -218374,6 +229594,7 @@ characters.data={
},
[0x1F690]={
category="so",
+ cjkwd="w",
description="MINIBUS",
direction="on",
linebreak="id",
@@ -218381,6 +229602,7 @@ characters.data={
},
[0x1F691]={
category="so",
+ cjkwd="w",
description="AMBULANCE",
direction="on",
linebreak="id",
@@ -218388,6 +229610,7 @@ characters.data={
},
[0x1F692]={
category="so",
+ cjkwd="w",
description="FIRE ENGINE",
direction="on",
linebreak="id",
@@ -218395,6 +229618,7 @@ characters.data={
},
[0x1F693]={
category="so",
+ cjkwd="w",
description="POLICE CAR",
direction="on",
linebreak="id",
@@ -218402,6 +229626,7 @@ characters.data={
},
[0x1F694]={
category="so",
+ cjkwd="w",
description="ONCOMING POLICE CAR",
direction="on",
linebreak="id",
@@ -218409,6 +229634,7 @@ characters.data={
},
[0x1F695]={
category="so",
+ cjkwd="w",
description="TAXI",
direction="on",
linebreak="id",
@@ -218416,6 +229642,7 @@ characters.data={
},
[0x1F696]={
category="so",
+ cjkwd="w",
description="ONCOMING TAXI",
direction="on",
linebreak="id",
@@ -218423,6 +229650,7 @@ characters.data={
},
[0x1F697]={
category="so",
+ cjkwd="w",
description="AUTOMOBILE",
direction="on",
linebreak="id",
@@ -218430,6 +229658,7 @@ characters.data={
},
[0x1F698]={
category="so",
+ cjkwd="w",
description="ONCOMING AUTOMOBILE",
direction="on",
linebreak="id",
@@ -218437,6 +229666,7 @@ characters.data={
},
[0x1F699]={
category="so",
+ cjkwd="w",
description="RECREATIONAL VEHICLE",
direction="on",
linebreak="id",
@@ -218444,6 +229674,7 @@ characters.data={
},
[0x1F69A]={
category="so",
+ cjkwd="w",
description="DELIVERY TRUCK",
direction="on",
linebreak="id",
@@ -218451,6 +229682,7 @@ characters.data={
},
[0x1F69B]={
category="so",
+ cjkwd="w",
description="ARTICULATED LORRY",
direction="on",
linebreak="id",
@@ -218458,6 +229690,7 @@ characters.data={
},
[0x1F69C]={
category="so",
+ cjkwd="w",
description="TRACTOR",
direction="on",
linebreak="id",
@@ -218465,6 +229698,7 @@ characters.data={
},
[0x1F69D]={
category="so",
+ cjkwd="w",
description="MONORAIL",
direction="on",
linebreak="id",
@@ -218472,6 +229706,7 @@ characters.data={
},
[0x1F69E]={
category="so",
+ cjkwd="w",
description="MOUNTAIN RAILWAY",
direction="on",
linebreak="id",
@@ -218479,6 +229714,7 @@ characters.data={
},
[0x1F69F]={
category="so",
+ cjkwd="w",
description="SUSPENSION RAILWAY",
direction="on",
linebreak="id",
@@ -218486,6 +229722,7 @@ characters.data={
},
[0x1F6A0]={
category="so",
+ cjkwd="w",
description="MOUNTAIN CABLEWAY",
direction="on",
linebreak="id",
@@ -218493,6 +229730,7 @@ characters.data={
},
[0x1F6A1]={
category="so",
+ cjkwd="w",
description="AERIAL TRAMWAY",
direction="on",
linebreak="id",
@@ -218500,6 +229738,7 @@ characters.data={
},
[0x1F6A2]={
category="so",
+ cjkwd="w",
description="SHIP",
direction="on",
linebreak="id",
@@ -218507,13 +229746,15 @@ characters.data={
},
[0x1F6A3]={
category="so",
+ cjkwd="w",
description="ROWBOAT",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F6A3,
},
[0x1F6A4]={
category="so",
+ cjkwd="w",
description="SPEEDBOAT",
direction="on",
linebreak="id",
@@ -218521,6 +229762,7 @@ characters.data={
},
[0x1F6A5]={
category="so",
+ cjkwd="w",
description="HORIZONTAL TRAFFIC LIGHT",
direction="on",
linebreak="id",
@@ -218528,6 +229770,7 @@ characters.data={
},
[0x1F6A6]={
category="so",
+ cjkwd="w",
description="VERTICAL TRAFFIC LIGHT",
direction="on",
linebreak="id",
@@ -218535,6 +229778,7 @@ characters.data={
},
[0x1F6A7]={
category="so",
+ cjkwd="w",
description="CONSTRUCTION SIGN",
direction="on",
linebreak="id",
@@ -218542,6 +229786,7 @@ characters.data={
},
[0x1F6A8]={
category="so",
+ cjkwd="w",
description="POLICE CARS REVOLVING LIGHT",
direction="on",
linebreak="id",
@@ -218549,6 +229794,7 @@ characters.data={
},
[0x1F6A9]={
category="so",
+ cjkwd="w",
description="TRIANGULAR FLAG ON POST",
direction="on",
linebreak="id",
@@ -218556,6 +229802,7 @@ characters.data={
},
[0x1F6AA]={
category="so",
+ cjkwd="w",
description="DOOR",
direction="on",
linebreak="id",
@@ -218563,6 +229810,7 @@ characters.data={
},
[0x1F6AB]={
category="so",
+ cjkwd="w",
description="NO ENTRY SIGN",
direction="on",
linebreak="id",
@@ -218570,6 +229818,7 @@ characters.data={
},
[0x1F6AC]={
category="so",
+ cjkwd="w",
description="SMOKING SYMBOL",
direction="on",
linebreak="id",
@@ -218577,6 +229826,7 @@ characters.data={
},
[0x1F6AD]={
category="so",
+ cjkwd="w",
description="NO SMOKING SYMBOL",
direction="on",
linebreak="id",
@@ -218584,6 +229834,7 @@ characters.data={
},
[0x1F6AE]={
category="so",
+ cjkwd="w",
description="PUT LITTER IN ITS PLACE SYMBOL",
direction="on",
linebreak="id",
@@ -218591,6 +229842,7 @@ characters.data={
},
[0x1F6AF]={
category="so",
+ cjkwd="w",
description="DO NOT LITTER SYMBOL",
direction="on",
linebreak="id",
@@ -218598,6 +229850,7 @@ characters.data={
},
[0x1F6B0]={
category="so",
+ cjkwd="w",
description="POTABLE WATER SYMBOL",
direction="on",
linebreak="id",
@@ -218605,6 +229858,7 @@ characters.data={
},
[0x1F6B1]={
category="so",
+ cjkwd="w",
description="NON-POTABLE WATER SYMBOL",
direction="on",
linebreak="id",
@@ -218612,6 +229866,7 @@ characters.data={
},
[0x1F6B2]={
category="so",
+ cjkwd="w",
description="BICYCLE",
direction="on",
linebreak="id",
@@ -218619,6 +229874,7 @@ characters.data={
},
[0x1F6B3]={
category="so",
+ cjkwd="w",
description="NO BICYCLES",
direction="on",
linebreak="id",
@@ -218626,27 +229882,31 @@ characters.data={
},
[0x1F6B4]={
category="so",
+ cjkwd="w",
description="BICYCLIST",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F6B4,
},
[0x1F6B5]={
category="so",
+ cjkwd="w",
description="MOUNTAIN BICYCLIST",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F6B5,
},
[0x1F6B6]={
category="so",
+ cjkwd="w",
description="PEDESTRIAN",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F6B6,
},
[0x1F6B7]={
category="so",
+ cjkwd="w",
description="NO PEDESTRIANS",
direction="on",
linebreak="id",
@@ -218654,6 +229914,7 @@ characters.data={
},
[0x1F6B8]={
category="so",
+ cjkwd="w",
description="CHILDREN CROSSING",
direction="on",
linebreak="id",
@@ -218661,6 +229922,7 @@ characters.data={
},
[0x1F6B9]={
category="so",
+ cjkwd="w",
description="MENS SYMBOL",
direction="on",
linebreak="id",
@@ -218668,6 +229930,7 @@ characters.data={
},
[0x1F6BA]={
category="so",
+ cjkwd="w",
description="WOMENS SYMBOL",
direction="on",
linebreak="id",
@@ -218675,6 +229938,7 @@ characters.data={
},
[0x1F6BB]={
category="so",
+ cjkwd="w",
description="RESTROOM",
direction="on",
linebreak="id",
@@ -218682,6 +229946,7 @@ characters.data={
},
[0x1F6BC]={
category="so",
+ cjkwd="w",
description="BABY SYMBOL",
direction="on",
linebreak="id",
@@ -218689,6 +229954,7 @@ characters.data={
},
[0x1F6BD]={
category="so",
+ cjkwd="w",
description="TOILET",
direction="on",
linebreak="id",
@@ -218696,6 +229962,7 @@ characters.data={
},
[0x1F6BE]={
category="so",
+ cjkwd="w",
description="WATER CLOSET",
direction="on",
linebreak="id",
@@ -218703,6 +229970,7 @@ characters.data={
},
[0x1F6BF]={
category="so",
+ cjkwd="w",
description="SHOWER",
direction="on",
linebreak="id",
@@ -218710,13 +229978,15 @@ characters.data={
},
[0x1F6C0]={
category="so",
+ cjkwd="w",
description="BATH",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F6C0,
},
[0x1F6C1]={
category="so",
+ cjkwd="w",
description="BATHTUB",
direction="on",
linebreak="id",
@@ -218724,6 +229994,7 @@ characters.data={
},
[0x1F6C2]={
category="so",
+ cjkwd="w",
description="PASSPORT CONTROL",
direction="on",
linebreak="id",
@@ -218731,6 +230002,7 @@ characters.data={
},
[0x1F6C3]={
category="so",
+ cjkwd="w",
description="CUSTOMS",
direction="on",
linebreak="id",
@@ -218738,6 +230010,7 @@ characters.data={
},
[0x1F6C4]={
category="so",
+ cjkwd="w",
description="BAGGAGE CLAIM",
direction="on",
linebreak="id",
@@ -218745,6 +230018,7 @@ characters.data={
},
[0x1F6C5]={
category="so",
+ cjkwd="w",
description="LEFT LUGGAGE",
direction="on",
linebreak="id",
@@ -218755,6 +230029,7 @@ characters.data={
description="TRIANGLE WITH ROUNDED CORNERS",
direction="on",
linebreak="id",
+ synonyms={ "caution" },
unicodeslot=0x1F6C6,
},
[0x1F6C7]={
@@ -218769,6 +230044,7 @@ characters.data={
description="CIRCLED INFORMATION SOURCE",
direction="on",
linebreak="id",
+ synonyms={ "information" },
unicodeslot=0x1F6C8,
},
[0x1F6C9]={
@@ -218791,9 +230067,11 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F6CB,
+ variants=variants_emoji,
},
[0x1F6CC]={
category="so",
+ cjkwd="w",
description="SLEEPING ACCOMMODATION",
direction="on",
linebreak="id",
@@ -218805,6 +230083,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F6CD,
+ variants=variants_emoji,
},
[0x1F6CE]={
category="so",
@@ -218812,6 +230091,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F6CE,
+ variants=variants_emoji,
},
[0x1F6CF]={
category="so",
@@ -218819,20 +230099,41 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F6CF,
+ variants=variants_emoji,
},
[0x1F6D0]={
category="so",
+ cjkwd="w",
description="PLACE OF WORSHIP",
direction="on",
linebreak="id",
unicodeslot=0x1F6D0,
},
+ [0x1F6D1]={
+ category="so",
+ cjkwd="w",
+ description="OCTAGONAL SIGN",
+ direction="on",
+ linebreak="id",
+ synonyms={ "stop sign" },
+ unicodeslot=0x1F6D1,
+ },
+ [0x1F6D2]={
+ category="so",
+ cjkwd="w",
+ description="SHOPPING TROLLEY",
+ direction="on",
+ linebreak="id",
+ synonyms={ "shopping cart" },
+ unicodeslot=0x1F6D2,
+ },
[0x1F6E0]={
category="so",
description="HAMMER AND WRENCH",
direction="on",
linebreak="id",
unicodeslot=0x1F6E0,
+ variants=variants_emoji,
},
[0x1F6E1]={
category="so",
@@ -218840,6 +230141,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F6E1,
+ variants=variants_emoji,
},
[0x1F6E2]={
category="so",
@@ -218847,6 +230149,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F6E2,
+ variants=variants_emoji,
},
[0x1F6E3]={
category="so",
@@ -218854,6 +230157,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F6E3,
+ variants=variants_emoji,
},
[0x1F6E4]={
category="so",
@@ -218861,6 +230165,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F6E4,
+ variants=variants_emoji,
},
[0x1F6E5]={
category="so",
@@ -218868,6 +230173,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F6E5,
+ variants=variants_emoji,
},
[0x1F6E6]={
category="so",
@@ -218896,6 +230202,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F6E9,
+ variants=variants_emoji,
},
[0x1F6EA]={
category="so",
@@ -218906,6 +230213,7 @@ characters.data={
},
[0x1F6EB]={
category="so",
+ cjkwd="w",
description="AIRPLANE DEPARTURE",
direction="on",
linebreak="id",
@@ -218913,6 +230221,7 @@ characters.data={
},
[0x1F6EC]={
category="so",
+ cjkwd="w",
description="AIRPLANE ARRIVING",
direction="on",
linebreak="id",
@@ -218924,6 +230233,7 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F6F0,
+ variants=variants_emoji,
},
[0x1F6F1]={
category="so",
@@ -218945,6 +230255,31 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x1F6F3,
+ variants=variants_emoji,
+ },
+ [0x1F6F4]={
+ category="so",
+ cjkwd="w",
+ description="SCOOTER",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F6F4,
+ },
+ [0x1F6F5]={
+ category="so",
+ cjkwd="w",
+ description="MOTOR SCOOTER",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F6F5,
+ },
+ [0x1F6F6]={
+ category="so",
+ cjkwd="w",
+ description="CANOE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F6F6,
},
[0x1F700]={
category="so",
@@ -219840,6 +231175,7 @@ characters.data={
description="ROUND TARGET",
direction="on",
linebreak="al",
+ synonyms={ "bullseye" },
unicodeslot=0x1F78B,
},
[0x1F78C]={
@@ -221391,6 +232727,7 @@ characters.data={
},
[0x1F910]={
category="so",
+ cjkwd="w",
description="ZIPPER-MOUTH FACE",
direction="on",
linebreak="id",
@@ -221398,6 +232735,7 @@ characters.data={
},
[0x1F911]={
category="so",
+ cjkwd="w",
description="MONEY-MOUTH FACE",
direction="on",
linebreak="id",
@@ -221405,6 +232743,7 @@ characters.data={
},
[0x1F912]={
category="so",
+ cjkwd="w",
description="FACE WITH THERMOMETER",
direction="on",
linebreak="id",
@@ -221412,6 +232751,7 @@ characters.data={
},
[0x1F913]={
category="so",
+ cjkwd="w",
description="NERD FACE",
direction="on",
linebreak="id",
@@ -221419,6 +232759,7 @@ characters.data={
},
[0x1F914]={
category="so",
+ cjkwd="w",
description="THINKING FACE",
direction="on",
linebreak="id",
@@ -221426,6 +232767,7 @@ characters.data={
},
[0x1F915]={
category="so",
+ cjkwd="w",
description="FACE WITH HEAD-BANDAGE",
direction="on",
linebreak="id",
@@ -221433,6 +232775,7 @@ characters.data={
},
[0x1F916]={
category="so",
+ cjkwd="w",
description="ROBOT FACE",
direction="on",
linebreak="id",
@@ -221440,6 +232783,7 @@ characters.data={
},
[0x1F917]={
category="so",
+ cjkwd="w",
description="HUGGING FACE",
direction="on",
linebreak="id",
@@ -221447,13 +232791,453 @@ characters.data={
},
[0x1F918]={
category="so",
+ cjkwd="w",
description="SIGN OF THE HORNS",
direction="on",
- linebreak="id",
+ linebreak="eb",
unicodeslot=0x1F918,
},
+ [0x1F919]={
+ category="so",
+ cjkwd="w",
+ description="CALL ME HAND",
+ direction="on",
+ linebreak="eb",
+ unicodeslot=0x1F919,
+ },
+ [0x1F91A]={
+ category="so",
+ cjkwd="w",
+ description="RAISED BACK OF HAND",
+ direction="on",
+ linebreak="eb",
+ unicodeslot=0x1F91A,
+ },
+ [0x1F91B]={
+ category="so",
+ cjkwd="w",
+ description="LEFT-FACING FIST",
+ direction="on",
+ linebreak="eb",
+ unicodeslot=0x1F91B,
+ },
+ [0x1F91C]={
+ category="so",
+ cjkwd="w",
+ description="RIGHT-FACING FIST",
+ direction="on",
+ linebreak="eb",
+ unicodeslot=0x1F91C,
+ },
+ [0x1F91D]={
+ category="so",
+ cjkwd="w",
+ description="HANDSHAKE",
+ direction="on",
+ linebreak="eb",
+ unicodeslot=0x1F91D,
+ },
+ [0x1F91E]={
+ category="so",
+ cjkwd="w",
+ description="HAND WITH INDEX AND MIDDLE FINGERS CROSSED",
+ direction="on",
+ linebreak="eb",
+ synonyms={ "crossed fingers", "fingers crossed" },
+ unicodeslot=0x1F91E,
+ },
+ [0x1F920]={
+ category="so",
+ cjkwd="w",
+ description="FACE WITH COWBOY HAT",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F920,
+ },
+ [0x1F921]={
+ category="so",
+ cjkwd="w",
+ description="CLOWN FACE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F921,
+ },
+ [0x1F922]={
+ category="so",
+ cjkwd="w",
+ description="NAUSEATED FACE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F922,
+ },
+ [0x1F923]={
+ category="so",
+ cjkwd="w",
+ description="ROLLING ON THE FLOOR LAUGHING",
+ direction="on",
+ linebreak="id",
+ synonyms={ "rofl" },
+ unicodeslot=0x1F923,
+ },
+ [0x1F924]={
+ category="so",
+ cjkwd="w",
+ description="DROOLING FACE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F924,
+ },
+ [0x1F925]={
+ category="so",
+ cjkwd="w",
+ description="LYING FACE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F925,
+ },
+ [0x1F926]={
+ category="so",
+ cjkwd="w",
+ description="FACE PALM",
+ direction="on",
+ linebreak="eb",
+ unicodeslot=0x1F926,
+ },
+ [0x1F927]={
+ category="so",
+ cjkwd="w",
+ description="SNEEZING FACE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F927,
+ },
+ [0x1F930]={
+ category="so",
+ cjkwd="w",
+ description="PREGNANT WOMAN",
+ direction="on",
+ linebreak="eb",
+ unicodeslot=0x1F930,
+ },
+ [0x1F933]={
+ category="so",
+ cjkwd="w",
+ description="SELFIE",
+ direction="on",
+ linebreak="eb",
+ unicodeslot=0x1F933,
+ },
+ [0x1F934]={
+ category="so",
+ cjkwd="w",
+ description="PRINCE",
+ direction="on",
+ linebreak="eb",
+ unicodeslot=0x1F934,
+ },
+ [0x1F935]={
+ category="so",
+ cjkwd="w",
+ description="MAN IN TUXEDO",
+ direction="on",
+ linebreak="eb",
+ unicodeslot=0x1F935,
+ },
+ [0x1F936]={
+ category="so",
+ cjkwd="w",
+ description="MOTHER CHRISTMAS",
+ direction="on",
+ linebreak="eb",
+ unicodeslot=0x1F936,
+ },
+ [0x1F937]={
+ category="so",
+ cjkwd="w",
+ description="SHRUG",
+ direction="on",
+ linebreak="eb",
+ unicodeslot=0x1F937,
+ },
+ [0x1F938]={
+ category="so",
+ cjkwd="w",
+ description="PERSON DOING CARTWHEEL",
+ direction="on",
+ linebreak="eb",
+ unicodeslot=0x1F938,
+ },
+ [0x1F939]={
+ category="so",
+ cjkwd="w",
+ description="JUGGLING",
+ direction="on",
+ linebreak="eb",
+ unicodeslot=0x1F939,
+ },
+ [0x1F93A]={
+ category="so",
+ cjkwd="w",
+ description="FENCER",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F93A,
+ },
+ [0x1F93B]={
+ category="so",
+ cjkwd="w",
+ description="MODERN PENTATHLON",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F93B,
+ },
+ [0x1F93C]={
+ category="so",
+ cjkwd="w",
+ description="WRESTLERS",
+ direction="on",
+ linebreak="eb",
+ unicodeslot=0x1F93C,
+ },
+ [0x1F93D]={
+ category="so",
+ cjkwd="w",
+ description="WATER POLO",
+ direction="on",
+ linebreak="eb",
+ unicodeslot=0x1F93D,
+ },
+ [0x1F93E]={
+ category="so",
+ cjkwd="w",
+ description="HANDBALL",
+ direction="on",
+ linebreak="eb",
+ unicodeslot=0x1F93E,
+ },
+ [0x1F940]={
+ category="so",
+ cjkwd="w",
+ description="WILTED FLOWER",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F940,
+ },
+ [0x1F941]={
+ category="so",
+ cjkwd="w",
+ description="DRUM WITH DRUMSTICKS",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F941,
+ },
+ [0x1F942]={
+ category="so",
+ cjkwd="w",
+ description="CLINKING GLASSES",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F942,
+ },
+ [0x1F943]={
+ category="so",
+ cjkwd="w",
+ description="TUMBLER GLASS",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F943,
+ },
+ [0x1F944]={
+ category="so",
+ cjkwd="w",
+ description="SPOON",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F944,
+ },
+ [0x1F945]={
+ category="so",
+ cjkwd="w",
+ description="GOAL NET",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F945,
+ },
+ [0x1F946]={
+ category="so",
+ cjkwd="w",
+ description="RIFLE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F946,
+ },
+ [0x1F947]={
+ category="so",
+ cjkwd="w",
+ description="FIRST PLACE MEDAL",
+ direction="on",
+ linebreak="id",
+ synonyms={ "gold medal" },
+ unicodeslot=0x1F947,
+ },
+ [0x1F948]={
+ category="so",
+ cjkwd="w",
+ description="SECOND PLACE MEDAL",
+ direction="on",
+ linebreak="id",
+ synonyms={ "silver medal" },
+ unicodeslot=0x1F948,
+ },
+ [0x1F949]={
+ category="so",
+ cjkwd="w",
+ description="THIRD PLACE MEDAL",
+ direction="on",
+ linebreak="id",
+ synonyms={ "bronze medal" },
+ unicodeslot=0x1F949,
+ },
+ [0x1F94A]={
+ category="so",
+ cjkwd="w",
+ description="BOXING GLOVE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F94A,
+ },
+ [0x1F94B]={
+ category="so",
+ cjkwd="w",
+ description="MARTIAL ARTS UNIFORM",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F94B,
+ },
+ [0x1F950]={
+ category="so",
+ cjkwd="w",
+ description="CROISSANT",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F950,
+ },
+ [0x1F951]={
+ category="so",
+ cjkwd="w",
+ description="AVOCADO",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F951,
+ },
+ [0x1F952]={
+ category="so",
+ cjkwd="w",
+ description="CUCUMBER",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F952,
+ },
+ [0x1F953]={
+ category="so",
+ cjkwd="w",
+ description="BACON",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F953,
+ },
+ [0x1F954]={
+ category="so",
+ cjkwd="w",
+ description="POTATO",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F954,
+ },
+ [0x1F955]={
+ category="so",
+ cjkwd="w",
+ description="CARROT",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F955,
+ },
+ [0x1F956]={
+ category="so",
+ cjkwd="w",
+ description="BAGUETTE BREAD",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F956,
+ },
+ [0x1F957]={
+ category="so",
+ cjkwd="w",
+ description="GREEN SALAD",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F957,
+ },
+ [0x1F958]={
+ category="so",
+ cjkwd="w",
+ description="SHALLOW PAN OF FOOD",
+ direction="on",
+ linebreak="id",
+ synonyms={ "paella" },
+ unicodeslot=0x1F958,
+ },
+ [0x1F959]={
+ category="so",
+ cjkwd="w",
+ description="STUFFED FLATBREAD",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F959,
+ },
+ [0x1F95A]={
+ category="so",
+ cjkwd="w",
+ description="EGG",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F95A,
+ },
+ [0x1F95B]={
+ category="so",
+ cjkwd="w",
+ description="GLASS OF MILK",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F95B,
+ },
+ [0x1F95C]={
+ category="so",
+ cjkwd="w",
+ description="PEANUTS",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F95C,
+ },
+ [0x1F95D]={
+ category="so",
+ cjkwd="w",
+ description="KIWIFRUIT",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F95D,
+ },
+ [0x1F95E]={
+ category="so",
+ cjkwd="w",
+ description="PANCAKES",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F95E,
+ },
[0x1F980]={
category="so",
+ cjkwd="w",
description="CRAB",
direction="on",
linebreak="id",
@@ -221461,6 +233245,7 @@ characters.data={
},
[0x1F981]={
category="so",
+ cjkwd="w",
description="LION FACE",
direction="on",
linebreak="id",
@@ -221468,6 +233253,7 @@ characters.data={
},
[0x1F982]={
category="so",
+ cjkwd="w",
description="SCORPION",
direction="on",
linebreak="id",
@@ -221475,6 +233261,7 @@ characters.data={
},
[0x1F983]={
category="so",
+ cjkwd="w",
description="TURKEY",
direction="on",
linebreak="id",
@@ -221482,13 +233269,119 @@ characters.data={
},
[0x1F984]={
category="so",
+ cjkwd="w",
description="UNICORN FACE",
direction="on",
linebreak="id",
unicodeslot=0x1F984,
},
+ [0x1F985]={
+ category="so",
+ cjkwd="w",
+ description="EAGLE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F985,
+ },
+ [0x1F986]={
+ category="so",
+ cjkwd="w",
+ description="DUCK",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F986,
+ },
+ [0x1F987]={
+ category="so",
+ cjkwd="w",
+ description="BAT",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F987,
+ },
+ [0x1F988]={
+ category="so",
+ cjkwd="w",
+ description="SHARK",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F988,
+ },
+ [0x1F989]={
+ category="so",
+ cjkwd="w",
+ description="OWL",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F989,
+ },
+ [0x1F98A]={
+ category="so",
+ cjkwd="w",
+ description="FOX FACE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F98A,
+ },
+ [0x1F98B]={
+ category="so",
+ cjkwd="w",
+ description="BUTTERFLY",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F98B,
+ },
+ [0x1F98C]={
+ category="so",
+ cjkwd="w",
+ description="DEER",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F98C,
+ },
+ [0x1F98D]={
+ category="so",
+ cjkwd="w",
+ description="GORILLA",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F98D,
+ },
+ [0x1F98E]={
+ category="so",
+ cjkwd="w",
+ description="LIZARD",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F98E,
+ },
+ [0x1F98F]={
+ category="so",
+ cjkwd="w",
+ description="RHINOCEROS",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F98F,
+ },
+ [0x1F990]={
+ category="so",
+ cjkwd="w",
+ description="SHRIMP",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F990,
+ },
+ [0x1F991]={
+ category="so",
+ cjkwd="w",
+ description="SQUID",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F991,
+ },
[0x1F9C0]={
category="so",
+ cjkwd="w",
description="CHEESE WEDGE",
direction="on",
linebreak="id",
@@ -227051,4 +238944,9 @@ characters.data={
linebreak="cm",
unicodeslot=0xE007F,
},
-} \ No newline at end of file
+ [0xE0100]={
+ description="VARIATION SELECTOR-0x0011",
+ synonyms={ "vs17" },
+ unicodeslot=0xE0100,
+ },
+}
diff --git a/tex/context/base/mkiv/char-emj.lua b/tex/context/base/mkiv/char-emj.lua
new file mode 100644
index 000000000..718d3bc6e
--- /dev/null
+++ b/tex/context/base/mkiv/char-emj.lua
@@ -0,0 +1,2633 @@
+if not modules then modules = { } end modules ['char-emj'] = {
+ 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",
+ dataonly = true,
+}
+
+-- This table is generated.
+
+return {
+ ["1st place medal"]={ 0x1F947 },
+ ["2nd place medal"]={ 0x1F948 },
+ ["3rd place medal"]={ 0x1F949 },
+ ["a button (blood type)"]={ 0x1F170 },
+ ["ab button (blood type)"]={ 0x1F18E },
+ ["admission tickets"]={ 0x1F39F },
+ ["adult"]={ 0x1F9D1 },
+ ["adult: dark skin tone"]={ 0x1F9D1, 0x1F3FF },
+ ["adult: light skin tone"]={ 0x1F9D1, 0x1F3FB },
+ ["adult: medium skin tone"]={ 0x1F9D1, 0x1F3FD },
+ ["adult: medium-dark skin tone"]={ 0x1F9D1, 0x1F3FE },
+ ["adult: medium-light skin tone"]={ 0x1F9D1, 0x1F3FC },
+ ["aerial tramway"]={ 0x1F6A1 },
+ ["afghanistan"]={ 0x1F1E6, 0x1F1EB },
+ ["airplane"]={ 0x2708 },
+ ["airplane arrival"]={ 0x1F6EC },
+ ["airplane departure"]={ 0x1F6EB },
+ ["alarm clock"]={ 0x23F0 },
+ ["albania"]={ 0x1F1E6, 0x1F1F1 },
+ ["alembic"]={ 0x2697 },
+ ["algeria"]={ 0x1F1E9, 0x1F1FF },
+ ["alien"]={ 0x1F47D },
+ ["alien monster"]={ 0x1F47E },
+ ["ambulance"]={ 0x1F691 },
+ ["american football"]={ 0x1F3C8 },
+ ["american samoa"]={ 0x1F1E6, 0x1F1F8 },
+ ["amphora"]={ 0x1F3FA },
+ ["anchor"]={ 0x2693 },
+ ["andorra"]={ 0x1F1E6, 0x1F1E9 },
+ ["anger symbol"]={ 0x1F4A2 },
+ ["angola"]={ 0x1F1E6, 0x1F1F4 },
+ ["angry face"]={ 0x1F620 },
+ ["angry face with horns"]={ 0x1F47F },
+ ["anguilla"]={ 0x1F1E6, 0x1F1EE },
+ ["anguished face"]={ 0x1F627 },
+ ["ant"]={ 0x1F41C },
+ ["antarctica"]={ 0x1F1E6, 0x1F1F6 },
+ ["antenna bars"]={ 0x1F4F6 },
+ ["anticlockwise arrows button"]={ 0x1F504 },
+ ["antigua & barbuda"]={ 0x1F1E6, 0x1F1EC },
+ ["aquarius"]={ 0x2652 },
+ ["argentina"]={ 0x1F1E6, 0x1F1F7 },
+ ["aries"]={ 0x2648 },
+ ["armenia"]={ 0x1F1E6, 0x1F1F2 },
+ ["articulated lorry"]={ 0x1F69B },
+ ["artist palette"]={ 0x1F3A8 },
+ ["aruba"]={ 0x1F1E6, 0x1F1FC },
+ ["ascension island"]={ 0x1F1E6, 0x1F1E8 },
+ ["astonished face"]={ 0x1F632 },
+ ["atm sign"]={ 0x1F3E7 },
+ ["atom symbol"]={ 0x269B },
+ ["australia"]={ 0x1F1E6, 0x1F1FA },
+ ["austria"]={ 0x1F1E6, 0x1F1F9 },
+ ["automobile"]={ 0x1F697 },
+ ["avocado"]={ 0x1F951 },
+ ["azerbaijan"]={ 0x1F1E6, 0x1F1FF },
+ ["b button (blood type)"]={ 0x1F171 },
+ ["baby"]={ 0x1F476 },
+ ["baby angel"]={ 0x1F47C },
+ ["baby angel: dark skin tone"]={ 0x1F47C, 0x1F3FF },
+ ["baby angel: light skin tone"]={ 0x1F47C, 0x1F3FB },
+ ["baby angel: medium skin tone"]={ 0x1F47C, 0x1F3FD },
+ ["baby angel: medium-dark skin tone"]={ 0x1F47C, 0x1F3FE },
+ ["baby angel: medium-light skin tone"]={ 0x1F47C, 0x1F3FC },
+ ["baby bottle"]={ 0x1F37C },
+ ["baby chick"]={ 0x1F424 },
+ ["baby symbol"]={ 0x1F6BC },
+ ["baby: dark skin tone"]={ 0x1F476, 0x1F3FF },
+ ["baby: light skin tone"]={ 0x1F476, 0x1F3FB },
+ ["baby: medium skin tone"]={ 0x1F476, 0x1F3FD },
+ ["baby: medium-dark skin tone"]={ 0x1F476, 0x1F3FE },
+ ["baby: medium-light skin tone"]={ 0x1F476, 0x1F3FC },
+ ["back arrow"]={ 0x1F519 },
+ ["backhand index pointing down"]={ 0x1F447 },
+ ["backhand index pointing down: dark skin tone"]={ 0x1F447, 0x1F3FF },
+ ["backhand index pointing down: light skin tone"]={ 0x1F447, 0x1F3FB },
+ ["backhand index pointing down: medium skin tone"]={ 0x1F447, 0x1F3FD },
+ ["backhand index pointing down: medium-dark skin tone"]={ 0x1F447, 0x1F3FE },
+ ["backhand index pointing down: medium-light skin tone"]={ 0x1F447, 0x1F3FC },
+ ["backhand index pointing left"]={ 0x1F448 },
+ ["backhand index pointing left: dark skin tone"]={ 0x1F448, 0x1F3FF },
+ ["backhand index pointing left: light skin tone"]={ 0x1F448, 0x1F3FB },
+ ["backhand index pointing left: medium skin tone"]={ 0x1F448, 0x1F3FD },
+ ["backhand index pointing left: medium-dark skin tone"]={ 0x1F448, 0x1F3FE },
+ ["backhand index pointing left: medium-light skin tone"]={ 0x1F448, 0x1F3FC },
+ ["backhand index pointing right"]={ 0x1F449 },
+ ["backhand index pointing right: dark skin tone"]={ 0x1F449, 0x1F3FF },
+ ["backhand index pointing right: light skin tone"]={ 0x1F449, 0x1F3FB },
+ ["backhand index pointing right: medium skin tone"]={ 0x1F449, 0x1F3FD },
+ ["backhand index pointing right: medium-dark skin tone"]={ 0x1F449, 0x1F3FE },
+ ["backhand index pointing right: medium-light skin tone"]={ 0x1F449, 0x1F3FC },
+ ["backhand index pointing up"]={ 0x1F446 },
+ ["backhand index pointing up: dark skin tone"]={ 0x1F446, 0x1F3FF },
+ ["backhand index pointing up: light skin tone"]={ 0x1F446, 0x1F3FB },
+ ["backhand index pointing up: medium skin tone"]={ 0x1F446, 0x1F3FD },
+ ["backhand index pointing up: medium-dark skin tone"]={ 0x1F446, 0x1F3FE },
+ ["backhand index pointing up: medium-light skin tone"]={ 0x1F446, 0x1F3FC },
+ ["bacon"]={ 0x1F953 },
+ ["badminton"]={ 0x1F3F8 },
+ ["baggage claim"]={ 0x1F6C4 },
+ ["baguette bread"]={ 0x1F956 },
+ ["bahamas"]={ 0x1F1E7, 0x1F1F8 },
+ ["bahrain"]={ 0x1F1E7, 0x1F1ED },
+ ["balance scale"]={ 0x2696 },
+ ["balloon"]={ 0x1F388 },
+ ["ballot box with ballot"]={ 0x1F5F3 },
+ ["ballot box with check"]={ 0x2611 },
+ ["banana"]={ 0x1F34C },
+ ["bangladesh"]={ 0x1F1E7, 0x1F1E9 },
+ ["bank"]={ 0x1F3E6 },
+ ["bar chart"]={ 0x1F4CA },
+ ["barbados"]={ 0x1F1E7, 0x1F1E7 },
+ ["barber pole"]={ 0x1F488 },
+ ["baseball"]={ 0x26BE },
+ ["basketball"]={ 0x1F3C0 },
+ ["bat"]={ 0x1F987 },
+ ["bathtub"]={ 0x1F6C1 },
+ ["battery"]={ 0x1F50B },
+ ["beach with umbrella"]={ 0x1F3D6 },
+ ["bear face"]={ 0x1F43B },
+ ["bearded person"]={ 0x1F9D4 },
+ ["bearded person: dark skin tone"]={ 0x1F9D4, 0x1F3FF },
+ ["bearded person: light skin tone"]={ 0x1F9D4, 0x1F3FB },
+ ["bearded person: medium skin tone"]={ 0x1F9D4, 0x1F3FD },
+ ["bearded person: medium-dark skin tone"]={ 0x1F9D4, 0x1F3FE },
+ ["bearded person: medium-light skin tone"]={ 0x1F9D4, 0x1F3FC },
+ ["beating heart"]={ 0x1F493 },
+ ["bed"]={ 0x1F6CF },
+ ["beer mug"]={ 0x1F37A },
+ ["belarus"]={ 0x1F1E7, 0x1F1FE },
+ ["belgium"]={ 0x1F1E7, 0x1F1EA },
+ ["belize"]={ 0x1F1E7, 0x1F1FF },
+ ["bell"]={ 0x1F514 },
+ ["bell with slash"]={ 0x1F515 },
+ ["bellhop bell"]={ 0x1F6CE },
+ ["benin"]={ 0x1F1E7, 0x1F1EF },
+ ["bento box"]={ 0x1F371 },
+ ["bermuda"]={ 0x1F1E7, 0x1F1F2 },
+ ["bhutan"]={ 0x1F1E7, 0x1F1F9 },
+ ["bicycle"]={ 0x1F6B2 },
+ ["bikini"]={ 0x1F459 },
+ ["billed cap"]={ 0x1F9E2 },
+ ["biohazard"]={ 0x2623 },
+ ["bird"]={ 0x1F426 },
+ ["birthday cake"]={ 0x1F382 },
+ ["black circle"]={ 0x26AB },
+ ["black flag"]={ 0x1F3F4 },
+ ["black heart"]={ 0x1F5A4 },
+ ["black large square"]={ 0x2B1B },
+ ["black medium square"]={ 0x25FC },
+ ["black medium-small square"]={ 0x25FE },
+ ["black nib"]={ 0x2712 },
+ ["black small square"]={ 0x25AA },
+ ["black square button"]={ 0x1F532 },
+ ["blond-haired man"]={ 0x1F471, 0x200D, 0x2642 },
+ ["blond-haired man: dark skin tone"]={ 0x1F471, 0x1F3FF, 0x200D, 0x2642 },
+ ["blond-haired man: light skin tone"]={ 0x1F471, 0x1F3FB, 0x200D, 0x2642 },
+ ["blond-haired man: medium skin tone"]={ 0x1F471, 0x1F3FD, 0x200D, 0x2642 },
+ ["blond-haired man: medium-dark skin tone"]={ 0x1F471, 0x1F3FE, 0x200D, 0x2642 },
+ ["blond-haired man: medium-light skin tone"]={ 0x1F471, 0x1F3FC, 0x200D, 0x2642 },
+ ["blond-haired person"]={ 0x1F471 },
+ ["blond-haired person: dark skin tone"]={ 0x1F471, 0x1F3FF },
+ ["blond-haired person: light skin tone"]={ 0x1F471, 0x1F3FB },
+ ["blond-haired person: medium skin tone"]={ 0x1F471, 0x1F3FD },
+ ["blond-haired person: medium-dark skin tone"]={ 0x1F471, 0x1F3FE },
+ ["blond-haired person: medium-light skin tone"]={ 0x1F471, 0x1F3FC },
+ ["blond-haired woman"]={ 0x1F471, 0x200D, 0x2640 },
+ ["blond-haired woman: dark skin tone"]={ 0x1F471, 0x1F3FF, 0x200D, 0x2640 },
+ ["blond-haired woman: light skin tone"]={ 0x1F471, 0x1F3FB, 0x200D, 0x2640 },
+ ["blond-haired woman: medium skin tone"]={ 0x1F471, 0x1F3FD, 0x200D, 0x2640 },
+ ["blond-haired woman: medium-dark skin tone"]={ 0x1F471, 0x1F3FE, 0x200D, 0x2640 },
+ ["blond-haired woman: medium-light skin tone"]={ 0x1F471, 0x1F3FC, 0x200D, 0x2640 },
+ ["blossom"]={ 0x1F33C },
+ ["blowfish"]={ 0x1F421 },
+ ["blue book"]={ 0x1F4D8 },
+ ["blue circle"]={ 0x1F535 },
+ ["blue heart"]={ 0x1F499 },
+ ["boar"]={ 0x1F417 },
+ ["bolivia"]={ 0x1F1E7, 0x1F1F4 },
+ ["bomb"]={ 0x1F4A3 },
+ ["bookmark"]={ 0x1F516 },
+ ["bookmark tabs"]={ 0x1F4D1 },
+ ["books"]={ 0x1F4DA },
+ ["bosnia & herzegovina"]={ 0x1F1E7, 0x1F1E6 },
+ ["botswana"]={ 0x1F1E7, 0x1F1FC },
+ ["bottle with popping cork"]={ 0x1F37E },
+ ["bouquet"]={ 0x1F490 },
+ ["bouvet island"]={ 0x1F1E7, 0x1F1FB },
+ ["bow and arrow"]={ 0x1F3F9 },
+ ["bowl with spoon"]={ 0x1F963 },
+ ["bowling"]={ 0x1F3B3 },
+ ["boxing glove"]={ 0x1F94A },
+ ["boy"]={ 0x1F466 },
+ ["boy: dark skin tone"]={ 0x1F466, 0x1F3FF },
+ ["boy: light skin tone"]={ 0x1F466, 0x1F3FB },
+ ["boy: medium skin tone"]={ 0x1F466, 0x1F3FD },
+ ["boy: medium-dark skin tone"]={ 0x1F466, 0x1F3FE },
+ ["boy: medium-light skin tone"]={ 0x1F466, 0x1F3FC },
+ ["brain"]={ 0x1F9E0 },
+ ["brazil"]={ 0x1F1E7, 0x1F1F7 },
+ ["bread"]={ 0x1F35E },
+ ["breast-feeding"]={ 0x1F931 },
+ ["breast-feeding: dark skin tone"]={ 0x1F931, 0x1F3FF },
+ ["breast-feeding: light skin tone"]={ 0x1F931, 0x1F3FB },
+ ["breast-feeding: medium skin tone"]={ 0x1F931, 0x1F3FD },
+ ["breast-feeding: medium-dark skin tone"]={ 0x1F931, 0x1F3FE },
+ ["breast-feeding: medium-light skin tone"]={ 0x1F931, 0x1F3FC },
+ ["bride with veil"]={ 0x1F470 },
+ ["bride with veil: dark skin tone"]={ 0x1F470, 0x1F3FF },
+ ["bride with veil: light skin tone"]={ 0x1F470, 0x1F3FB },
+ ["bride with veil: medium skin tone"]={ 0x1F470, 0x1F3FD },
+ ["bride with veil: medium-dark skin tone"]={ 0x1F470, 0x1F3FE },
+ ["bride with veil: medium-light skin tone"]={ 0x1F470, 0x1F3FC },
+ ["bridge at night"]={ 0x1F309 },
+ ["briefcase"]={ 0x1F4BC },
+ ["bright button"]={ 0x1F506 },
+ ["british indian ocean territory"]={ 0x1F1EE, 0x1F1F4 },
+ ["british virgin islands"]={ 0x1F1FB, 0x1F1EC },
+ ["broccoli"]={ 0x1F966 },
+ ["broken heart"]={ 0x1F494 },
+ ["brunei"]={ 0x1F1E7, 0x1F1F3 },
+ ["bug"]={ 0x1F41B },
+ ["building construction"]={ 0x1F3D7 },
+ ["bulgaria"]={ 0x1F1E7, 0x1F1EC },
+ ["burkina faso"]={ 0x1F1E7, 0x1F1EB },
+ ["burrito"]={ 0x1F32F },
+ ["burundi"]={ 0x1F1E7, 0x1F1EE },
+ ["bus"]={ 0x1F68C },
+ ["bus stop"]={ 0x1F68F },
+ ["bust in silhouette"]={ 0x1F464 },
+ ["busts in silhouette"]={ 0x1F465 },
+ ["butterfly"]={ 0x1F98B },
+ ["cactus"]={ 0x1F335 },
+ ["calendar"]={ 0x1F4C5 },
+ ["call me hand"]={ 0x1F919 },
+ ["call me hand: dark skin tone"]={ 0x1F919, 0x1F3FF },
+ ["call me hand: light skin tone"]={ 0x1F919, 0x1F3FB },
+ ["call me hand: medium skin tone"]={ 0x1F919, 0x1F3FD },
+ ["call me hand: medium-dark skin tone"]={ 0x1F919, 0x1F3FE },
+ ["call me hand: medium-light skin tone"]={ 0x1F919, 0x1F3FC },
+ ["cambodia"]={ 0x1F1F0, 0x1F1ED },
+ ["camel"]={ 0x1F42A },
+ ["camera"]={ 0x1F4F7 },
+ ["camera with flash"]={ 0x1F4F8 },
+ ["cameroon"]={ 0x1F1E8, 0x1F1F2 },
+ ["camping"]={ 0x1F3D5 },
+ ["canada"]={ 0x1F1E8, 0x1F1E6 },
+ ["canary islands"]={ 0x1F1EE, 0x1F1E8 },
+ ["cancer"]={ 0x264B },
+ ["candle"]={ 0x1F56F },
+ ["candy"]={ 0x1F36C },
+ ["canned food"]={ 0x1F96B },
+ ["canoe"]={ 0x1F6F6 },
+ ["cape verde"]={ 0x1F1E8, 0x1F1FB },
+ ["capricorn"]={ 0x2651 },
+ ["card file box"]={ 0x1F5C3 },
+ ["card index"]={ 0x1F4C7 },
+ ["card index dividers"]={ 0x1F5C2 },
+ ["caribbean netherlands"]={ 0x1F1E7, 0x1F1F6 },
+ ["carousel horse"]={ 0x1F3A0 },
+ ["carp streamer"]={ 0x1F38F },
+ ["carrot"]={ 0x1F955 },
+ ["castle"]={ 0x1F3F0 },
+ ["cat"]={ 0x1F408 },
+ ["cat face"]={ 0x1F431 },
+ ["cat face with tears of joy"]={ 0x1F639 },
+ ["cat face with wry smile"]={ 0x1F63C },
+ ["cayman islands"]={ 0x1F1F0, 0x1F1FE },
+ ["central african republic"]={ 0x1F1E8, 0x1F1EB },
+ ["ceuta & melilla"]={ 0x1F1EA, 0x1F1E6 },
+ ["chad"]={ 0x1F1F9, 0x1F1E9 },
+ ["chains"]={ 0x26D3 },
+ ["chart decreasing"]={ 0x1F4C9 },
+ ["chart increasing"]={ 0x1F4C8 },
+ ["chart increasing with yen"]={ 0x1F4B9 },
+ ["cheese wedge"]={ 0x1F9C0 },
+ ["chequered flag"]={ 0x1F3C1 },
+ ["cherries"]={ 0x1F352 },
+ ["cherry blossom"]={ 0x1F338 },
+ ["chestnut"]={ 0x1F330 },
+ ["chicken"]={ 0x1F414 },
+ ["child"]={ 0x1F9D2 },
+ ["child: dark skin tone"]={ 0x1F9D2, 0x1F3FF },
+ ["child: light skin tone"]={ 0x1F9D2, 0x1F3FB },
+ ["child: medium skin tone"]={ 0x1F9D2, 0x1F3FD },
+ ["child: medium-dark skin tone"]={ 0x1F9D2, 0x1F3FE },
+ ["child: medium-light skin tone"]={ 0x1F9D2, 0x1F3FC },
+ ["children crossing"]={ 0x1F6B8 },
+ ["chile"]={ 0x1F1E8, 0x1F1F1 },
+ ["china"]={ 0x1F1E8, 0x1F1F3 },
+ ["chipmunk"]={ 0x1F43F },
+ ["chocolate bar"]={ 0x1F36B },
+ ["chopsticks"]={ 0x1F962 },
+ ["christmas island"]={ 0x1F1E8, 0x1F1FD },
+ ["christmas tree"]={ 0x1F384 },
+ ["church"]={ 0x26EA },
+ ["cigarette"]={ 0x1F6AC },
+ ["cinema"]={ 0x1F3A6 },
+ ["circled m"]={ 0x24C2 },
+ ["circus tent"]={ 0x1F3AA },
+ ["cityscape"]={ 0x1F3D9 },
+ ["cityscape at dusk"]={ 0x1F306 },
+ ["cl button"]={ 0x1F191 },
+ ["clamp"]={ 0x1F5DC },
+ ["clapper board"]={ 0x1F3AC },
+ ["clapping hands"]={ 0x1F44F },
+ ["clapping hands: dark skin tone"]={ 0x1F44F, 0x1F3FF },
+ ["clapping hands: light skin tone"]={ 0x1F44F, 0x1F3FB },
+ ["clapping hands: medium skin tone"]={ 0x1F44F, 0x1F3FD },
+ ["clapping hands: medium-dark skin tone"]={ 0x1F44F, 0x1F3FE },
+ ["clapping hands: medium-light skin tone"]={ 0x1F44F, 0x1F3FC },
+ ["classical building"]={ 0x1F3DB },
+ ["clinking beer mugs"]={ 0x1F37B },
+ ["clinking glasses"]={ 0x1F942 },
+ ["clipboard"]={ 0x1F4CB },
+ ["clipperton island"]={ 0x1F1E8, 0x1F1F5 },
+ ["clockwise vertical arrows"]={ 0x1F503 },
+ ["closed book"]={ 0x1F4D5 },
+ ["closed mailbox with lowered flag"]={ 0x1F4EA },
+ ["closed mailbox with raised flag"]={ 0x1F4EB },
+ ["closed umbrella"]={ 0x1F302 },
+ ["cloud"]={ 0x2601 },
+ ["cloud with lightning"]={ 0x1F329 },
+ ["cloud with lightning and rain"]={ 0x26C8 },
+ ["cloud with rain"]={ 0x1F327 },
+ ["cloud with snow"]={ 0x1F328 },
+ ["clown face"]={ 0x1F921 },
+ ["club suit"]={ 0x2663 },
+ ["clutch bag"]={ 0x1F45D },
+ ["coat"]={ 0x1F9E5 },
+ ["cocktail glass"]={ 0x1F378 },
+ ["coconut"]={ 0x1F965 },
+ ["cocos (keeling) islands"]={ 0x1F1E8, 0x1F1E8 },
+ ["coffin"]={ 0x26B0 },
+ ["collision"]={ 0x1F4A5 },
+ ["colombia"]={ 0x1F1E8, 0x1F1F4 },
+ ["comet"]={ 0x2604 },
+ ["comoros"]={ 0x1F1F0, 0x1F1F2 },
+ ["computer disk"]={ 0x1F4BD },
+ ["computer mouse"]={ 0x1F5B1 },
+ ["confetti ball"]={ 0x1F38A },
+ ["confounded face"]={ 0x1F616 },
+ ["confused face"]={ 0x1F615 },
+ ["congo - brazzaville"]={ 0x1F1E8, 0x1F1EC },
+ ["congo - kinshasa"]={ 0x1F1E8, 0x1F1E9 },
+ ["construction"]={ 0x1F6A7 },
+ ["construction worker"]={ 0x1F477 },
+ ["construction worker: dark skin tone"]={ 0x1F477, 0x1F3FF },
+ ["construction worker: light skin tone"]={ 0x1F477, 0x1F3FB },
+ ["construction worker: medium skin tone"]={ 0x1F477, 0x1F3FD },
+ ["construction worker: medium-dark skin tone"]={ 0x1F477, 0x1F3FE },
+ ["construction worker: medium-light skin tone"]={ 0x1F477, 0x1F3FC },
+ ["control knobs"]={ 0x1F39B },
+ ["convenience store"]={ 0x1F3EA },
+ ["cook islands"]={ 0x1F1E8, 0x1F1F0 },
+ ["cooked rice"]={ 0x1F35A },
+ ["cookie"]={ 0x1F36A },
+ ["cooking"]={ 0x1F373 },
+ ["cool button"]={ 0x1F192 },
+ ["copyright"]={ 0xA9 },
+ ["costa rica"]={ 0x1F1E8, 0x1F1F7 },
+ ["couch and lamp"]={ 0x1F6CB },
+ ["couple with heart"]={ 0x1F491 },
+ ["couple with heart: man, man"]={ 0x1F468, 0x200D, 0x2764, 0x200D, 0x1F468 },
+ ["couple with heart: woman, man"]={ 0x1F469, 0x200D, 0x2764, 0x200D, 0x1F468 },
+ ["couple with heart: woman, woman"]={ 0x1F469, 0x200D, 0x2764, 0x200D, 0x1F469 },
+ ["cow"]={ 0x1F404 },
+ ["cow face"]={ 0x1F42E },
+ ["cowboy hat face"]={ 0x1F920 },
+ ["crab"]={ 0x1F980 },
+ ["crayon"]={ 0x1F58D },
+ ["crazy face"]={ 0x1F92A },
+ ["credit card"]={ 0x1F4B3 },
+ ["crescent moon"]={ 0x1F319 },
+ ["cricket"]={ 0x1F3CF },
+ ["croatia"]={ 0x1F1ED, 0x1F1F7 },
+ ["crocodile"]={ 0x1F40A },
+ ["croissant"]={ 0x1F950 },
+ ["cross mark"]={ 0x274C },
+ ["cross mark button"]={ 0x274E },
+ ["crossed fingers"]={ 0x1F91E },
+ ["crossed fingers: dark skin tone"]={ 0x1F91E, 0x1F3FF },
+ ["crossed fingers: light skin tone"]={ 0x1F91E, 0x1F3FB },
+ ["crossed fingers: medium skin tone"]={ 0x1F91E, 0x1F3FD },
+ ["crossed fingers: medium-dark skin tone"]={ 0x1F91E, 0x1F3FE },
+ ["crossed fingers: medium-light skin tone"]={ 0x1F91E, 0x1F3FC },
+ ["crossed flags"]={ 0x1F38C },
+ ["crossed swords"]={ 0x2694 },
+ ["crown"]={ 0x1F451 },
+ ["crying cat face"]={ 0x1F63F },
+ ["crying face"]={ 0x1F622 },
+ ["crystal ball"]={ 0x1F52E },
+ ["cuba"]={ 0x1F1E8, 0x1F1FA },
+ ["cucumber"]={ 0x1F952 },
+ ["cup with straw"]={ 0x1F964 },
+ ["curaçao"]={ 0x1F1E8, 0x1F1FC },
+ ["curling stone"]={ 0x1F94C },
+ ["curly loop"]={ 0x27B0 },
+ ["currency exchange"]={ 0x1F4B1 },
+ ["curry rice"]={ 0x1F35B },
+ ["custard"]={ 0x1F36E },
+ ["customs"]={ 0x1F6C3 },
+ ["cut of meat"]={ 0x1F969 },
+ ["cyclone"]={ 0x1F300 },
+ ["cyprus"]={ 0x1F1E8, 0x1F1FE },
+ ["czechia"]={ 0x1F1E8, 0x1F1FF },
+ ["côte d’ivoire"]={ 0x1F1E8, 0x1F1EE },
+ ["dagger"]={ 0x1F5E1 },
+ ["dango"]={ 0x1F361 },
+ ["dashing away"]={ 0x1F4A8 },
+ ["deciduous tree"]={ 0x1F333 },
+ ["deer"]={ 0x1F98C },
+ ["delivery truck"]={ 0x1F69A },
+ ["denmark"]={ 0x1F1E9, 0x1F1F0 },
+ ["department store"]={ 0x1F3EC },
+ ["derelict house"]={ 0x1F3DA },
+ ["desert"]={ 0x1F3DC },
+ ["desert island"]={ 0x1F3DD },
+ ["desktop computer"]={ 0x1F5A5 },
+ ["detective"]={ 0x1F575 },
+ ["detective: dark skin tone"]={ 0x1F575, 0x1F3FF },
+ ["detective: light skin tone"]={ 0x1F575, 0x1F3FB },
+ ["detective: medium skin tone"]={ 0x1F575, 0x1F3FD },
+ ["detective: medium-dark skin tone"]={ 0x1F575, 0x1F3FE },
+ ["detective: medium-light skin tone"]={ 0x1F575, 0x1F3FC },
+ ["diamond suit"]={ 0x2666 },
+ ["diamond with a dot"]={ 0x1F4A0 },
+ ["diego garcia"]={ 0x1F1E9, 0x1F1EC },
+ ["dim button"]={ 0x1F505 },
+ ["direct hit"]={ 0x1F3AF },
+ ["disappointed but relieved face"]={ 0x1F625 },
+ ["disappointed face"]={ 0x1F61E },
+ ["dizzy"]={ 0x1F4AB },
+ ["dizzy face"]={ 0x1F635 },
+ ["djibouti"]={ 0x1F1E9, 0x1F1EF },
+ ["dog"]={ 0x1F415 },
+ ["dog face"]={ 0x1F436 },
+ ["dollar banknote"]={ 0x1F4B5 },
+ ["dolphin"]={ 0x1F42C },
+ ["dominica"]={ 0x1F1E9, 0x1F1F2 },
+ ["dominican republic"]={ 0x1F1E9, 0x1F1F4 },
+ ["door"]={ 0x1F6AA },
+ ["dotted six-pointed star"]={ 0x1F52F },
+ ["double curly loop"]={ 0x27BF },
+ ["double exclamation mark"]={ 0x203C },
+ ["doughnut"]={ 0x1F369 },
+ ["dove"]={ 0x1F54A },
+ ["down arrow"]={ 0x2B07 },
+ ["down button"]={ 0x1F53D },
+ ["down-left arrow"]={ 0x2199 },
+ ["down-right arrow"]={ 0x2198 },
+ ["dragon"]={ 0x1F409 },
+ ["dragon face"]={ 0x1F432 },
+ ["dress"]={ 0x1F457 },
+ ["drooling face"]={ 0x1F924 },
+ ["droplet"]={ 0x1F4A7 },
+ ["drum"]={ 0x1F941 },
+ ["duck"]={ 0x1F986 },
+ ["dumpling"]={ 0x1F95F },
+ ["dvd"]={ 0x1F4C0 },
+ ["e-mail"]={ 0x1F4E7 },
+ ["eagle"]={ 0x1F985 },
+ ["ear"]={ 0x1F442 },
+ ["ear of corn"]={ 0x1F33D },
+ ["ear: dark skin tone"]={ 0x1F442, 0x1F3FF },
+ ["ear: light skin tone"]={ 0x1F442, 0x1F3FB },
+ ["ear: medium skin tone"]={ 0x1F442, 0x1F3FD },
+ ["ear: medium-dark skin tone"]={ 0x1F442, 0x1F3FE },
+ ["ear: medium-light skin tone"]={ 0x1F442, 0x1F3FC },
+ ["ecuador"]={ 0x1F1EA, 0x1F1E8 },
+ ["egg"]={ 0x1F95A },
+ ["eggplant"]={ 0x1F346 },
+ ["egypt"]={ 0x1F1EA, 0x1F1EC },
+ ["eight o’clock"]={ 0x1F557 },
+ ["eight-pointed star"]={ 0x2734 },
+ ["eight-spoked asterisk"]={ 0x2733 },
+ ["eight-thirty"]={ 0x1F563 },
+ ["eject button"]={ 0x23CF },
+ ["el salvador"]={ 0x1F1F8, 0x1F1FB },
+ ["electric plug"]={ 0x1F50C },
+ ["elephant"]={ 0x1F418 },
+ ["eleven o’clock"]={ 0x1F55A },
+ ["eleven-thirty"]={ 0x1F566 },
+ ["elf"]={ 0x1F9DD },
+ ["elf: dark skin tone"]={ 0x1F9DD, 0x1F3FF },
+ ["elf: light skin tone"]={ 0x1F9DD, 0x1F3FB },
+ ["elf: medium skin tone"]={ 0x1F9DD, 0x1F3FD },
+ ["elf: medium-dark skin tone"]={ 0x1F9DD, 0x1F3FE },
+ ["elf: medium-light skin tone"]={ 0x1F9DD, 0x1F3FC },
+ ["end arrow"]={ 0x1F51A },
+ ["england"]={ 0x1F3F4, 0xE0067, 0xE0062, 0xE0065, 0xE006E, 0xE0067, 0xE007F },
+ ["envelope"]={ 0x2709 },
+ ["envelope with arrow"]={ 0x1F4E9 },
+ ["equatorial guinea"]={ 0x1F1EC, 0x1F1F6 },
+ ["eritrea"]={ 0x1F1EA, 0x1F1F7 },
+ ["estonia"]={ 0x1F1EA, 0x1F1EA },
+ ["ethiopia"]={ 0x1F1EA, 0x1F1F9 },
+ ["euro banknote"]={ 0x1F4B6 },
+ ["european union"]={ 0x1F1EA, 0x1F1FA },
+ ["evergreen tree"]={ 0x1F332 },
+ ["ewe"]={ 0x1F411 },
+ ["exclamation mark"]={ 0x2757 },
+ ["exclamation question mark"]={ 0x2049 },
+ ["exploding head"]={ 0x1F92F },
+ ["expressionless face"]={ 0x1F611 },
+ ["eye"]={ 0x1F441 },
+ ["eye in speech bubble"]={ 0x1F441, 0x200D, 0x1F5E8 },
+ ["eyes"]={ 0x1F440 },
+ ["face blowing a kiss"]={ 0x1F618 },
+ ["face savouring delicious food"]={ 0x1F60B },
+ ["face screaming in fear"]={ 0x1F631 },
+ ["face vomiting"]={ 0x1F92E },
+ ["face with cold sweat"]={ 0x1F613 },
+ ["face with hand over mouth"]={ 0x1F92D },
+ ["face with head-bandage"]={ 0x1F915 },
+ ["face with medical mask"]={ 0x1F637 },
+ ["face with monocle"]={ 0x1F9D0 },
+ ["face with open mouth"]={ 0x1F62E },
+ ["face with open mouth & cold sweat"]={ 0x1F630 },
+ ["face with raised eyebrow"]={ 0x1F928 },
+ ["face with rolling eyes"]={ 0x1F644 },
+ ["face with steam from nose"]={ 0x1F624 },
+ ["face with stuck-out tongue"]={ 0x1F61B },
+ ["face with stuck-out tongue & closed eyes"]={ 0x1F61D },
+ ["face with stuck-out tongue & winking eye"]={ 0x1F61C },
+ ["face with symbols over mouth"]={ 0x1F92C },
+ ["face with tears of joy"]={ 0x1F602 },
+ ["face with thermometer"]={ 0x1F912 },
+ ["face without mouth"]={ 0x1F636 },
+ ["factory"]={ 0x1F3ED },
+ ["fairy"]={ 0x1F9DA },
+ ["fairy: dark skin tone"]={ 0x1F9DA, 0x1F3FF },
+ ["fairy: light skin tone"]={ 0x1F9DA, 0x1F3FB },
+ ["fairy: medium skin tone"]={ 0x1F9DA, 0x1F3FD },
+ ["fairy: medium-dark skin tone"]={ 0x1F9DA, 0x1F3FE },
+ ["fairy: medium-light skin tone"]={ 0x1F9DA, 0x1F3FC },
+ ["falkland islands"]={ 0x1F1EB, 0x1F1F0 },
+ ["fallen leaf"]={ 0x1F342 },
+ ["family"]={ 0x1F46A },
+ ["family: man, boy"]={ 0x1F468, 0x200D, 0x1F466 },
+ ["family: man, boy, boy"]={ 0x1F468, 0x200D, 0x1F466, 0x200D, 0x1F466 },
+ ["family: man, girl"]={ 0x1F468, 0x200D, 0x1F467 },
+ ["family: man, girl, boy"]={ 0x1F468, 0x200D, 0x1F467, 0x200D, 0x1F466 },
+ ["family: man, girl, girl"]={ 0x1F468, 0x200D, 0x1F467, 0x200D, 0x1F467 },
+ ["family: man, man, boy"]={ 0x1F468, 0x200D, 0x1F468, 0x200D, 0x1F466 },
+ ["family: man, man, boy, boy"]={ 0x1F468, 0x200D, 0x1F468, 0x200D, 0x1F466, 0x200D, 0x1F466 },
+ ["family: man, man, girl"]={ 0x1F468, 0x200D, 0x1F468, 0x200D, 0x1F467 },
+ ["family: man, man, girl, boy"]={ 0x1F468, 0x200D, 0x1F468, 0x200D, 0x1F467, 0x200D, 0x1F466 },
+ ["family: man, man, girl, girl"]={ 0x1F468, 0x200D, 0x1F468, 0x200D, 0x1F467, 0x200D, 0x1F467 },
+ ["family: man, woman, boy"]={ 0x1F468, 0x200D, 0x1F469, 0x200D, 0x1F466 },
+ ["family: man, woman, boy, boy"]={ 0x1F468, 0x200D, 0x1F469, 0x200D, 0x1F466, 0x200D, 0x1F466 },
+ ["family: man, woman, girl"]={ 0x1F468, 0x200D, 0x1F469, 0x200D, 0x1F467 },
+ ["family: man, woman, girl, boy"]={ 0x1F468, 0x200D, 0x1F469, 0x200D, 0x1F467, 0x200D, 0x1F466 },
+ ["family: man, woman, girl, girl"]={ 0x1F468, 0x200D, 0x1F469, 0x200D, 0x1F467, 0x200D, 0x1F467 },
+ ["family: woman, boy"]={ 0x1F469, 0x200D, 0x1F466 },
+ ["family: woman, boy, boy"]={ 0x1F469, 0x200D, 0x1F466, 0x200D, 0x1F466 },
+ ["family: woman, girl"]={ 0x1F469, 0x200D, 0x1F467 },
+ ["family: woman, girl, boy"]={ 0x1F469, 0x200D, 0x1F467, 0x200D, 0x1F466 },
+ ["family: woman, girl, girl"]={ 0x1F469, 0x200D, 0x1F467, 0x200D, 0x1F467 },
+ ["family: woman, woman, boy"]={ 0x1F469, 0x200D, 0x1F469, 0x200D, 0x1F466 },
+ ["family: woman, woman, boy, boy"]={ 0x1F469, 0x200D, 0x1F469, 0x200D, 0x1F466, 0x200D, 0x1F466 },
+ ["family: woman, woman, girl"]={ 0x1F469, 0x200D, 0x1F469, 0x200D, 0x1F467 },
+ ["family: woman, woman, girl, boy"]={ 0x1F469, 0x200D, 0x1F469, 0x200D, 0x1F467, 0x200D, 0x1F466 },
+ ["family: woman, woman, girl, girl"]={ 0x1F469, 0x200D, 0x1F469, 0x200D, 0x1F467, 0x200D, 0x1F467 },
+ ["faroe islands"]={ 0x1F1EB, 0x1F1F4 },
+ ["fast down button"]={ 0x23EC },
+ ["fast reverse button"]={ 0x23EA },
+ ["fast up button"]={ 0x23EB },
+ ["fast-forward button"]={ 0x23E9 },
+ ["fax machine"]={ 0x1F4E0 },
+ ["fearful face"]={ 0x1F628 },
+ ["female sign"]={ 0x2640 },
+ ["ferris wheel"]={ 0x1F3A1 },
+ ["ferry"]={ 0x26F4 },
+ ["field hockey"]={ 0x1F3D1 },
+ ["fiji"]={ 0x1F1EB, 0x1F1EF },
+ ["file cabinet"]={ 0x1F5C4 },
+ ["file folder"]={ 0x1F4C1 },
+ ["film frames"]={ 0x1F39E },
+ ["film projector"]={ 0x1F4FD },
+ ["finland"]={ 0x1F1EB, 0x1F1EE },
+ ["fire"]={ 0x1F525 },
+ ["fire engine"]={ 0x1F692 },
+ ["fireworks"]={ 0x1F386 },
+ ["first quarter moon"]={ 0x1F313 },
+ ["first quarter moon with face"]={ 0x1F31B },
+ ["fish"]={ 0x1F41F },
+ ["fish cake with swirl"]={ 0x1F365 },
+ ["fishing pole"]={ 0x1F3A3 },
+ ["five o’clock"]={ 0x1F554 },
+ ["five-thirty"]={ 0x1F560 },
+ ["flag in hole"]={ 0x26F3 },
+ ["flashlight"]={ 0x1F526 },
+ ["fleur-de-lis"]={ 0x269C },
+ ["flexed biceps"]={ 0x1F4AA },
+ ["flexed biceps: dark skin tone"]={ 0x1F4AA, 0x1F3FF },
+ ["flexed biceps: light skin tone"]={ 0x1F4AA, 0x1F3FB },
+ ["flexed biceps: medium skin tone"]={ 0x1F4AA, 0x1F3FD },
+ ["flexed biceps: medium-dark skin tone"]={ 0x1F4AA, 0x1F3FE },
+ ["flexed biceps: medium-light skin tone"]={ 0x1F4AA, 0x1F3FC },
+ ["floppy disk"]={ 0x1F4BE },
+ ["flower playing cards"]={ 0x1F3B4 },
+ ["flushed face"]={ 0x1F633 },
+ ["flying saucer"]={ 0x1F6F8 },
+ ["fog"]={ 0x1F32B },
+ ["foggy"]={ 0x1F301 },
+ ["folded hands"]={ 0x1F64F },
+ ["folded hands: dark skin tone"]={ 0x1F64F, 0x1F3FF },
+ ["folded hands: light skin tone"]={ 0x1F64F, 0x1F3FB },
+ ["folded hands: medium skin tone"]={ 0x1F64F, 0x1F3FD },
+ ["folded hands: medium-dark skin tone"]={ 0x1F64F, 0x1F3FE },
+ ["folded hands: medium-light skin tone"]={ 0x1F64F, 0x1F3FC },
+ ["footprints"]={ 0x1F463 },
+ ["fork and knife"]={ 0x1F374 },
+ ["fork and knife with plate"]={ 0x1F37D },
+ ["fortune cookie"]={ 0x1F960 },
+ ["fountain"]={ 0x26F2 },
+ ["fountain pen"]={ 0x1F58B },
+ ["four leaf clover"]={ 0x1F340 },
+ ["four o’clock"]={ 0x1F553 },
+ ["four-thirty"]={ 0x1F55F },
+ ["fox face"]={ 0x1F98A },
+ ["framed picture"]={ 0x1F5BC },
+ ["france"]={ 0x1F1EB, 0x1F1F7 },
+ ["free button"]={ 0x1F193 },
+ ["french fries"]={ 0x1F35F },
+ ["french guiana"]={ 0x1F1EC, 0x1F1EB },
+ ["french polynesia"]={ 0x1F1F5, 0x1F1EB },
+ ["french southern territories"]={ 0x1F1F9, 0x1F1EB },
+ ["fried shrimp"]={ 0x1F364 },
+ ["frog face"]={ 0x1F438 },
+ ["front-facing baby chick"]={ 0x1F425 },
+ ["frowning face"]={ 0x2639 },
+ ["frowning face with open mouth"]={ 0x1F626 },
+ ["fuel pump"]={ 0x26FD },
+ ["full moon"]={ 0x1F315 },
+ ["full moon with face"]={ 0x1F31D },
+ ["funeral urn"]={ 0x26B1 },
+ ["gabon"]={ 0x1F1EC, 0x1F1E6 },
+ ["gambia"]={ 0x1F1EC, 0x1F1F2 },
+ ["game die"]={ 0x1F3B2 },
+ ["gear"]={ 0x2699 },
+ ["gem stone"]={ 0x1F48E },
+ ["gemini"]={ 0x264A },
+ ["genie"]={ 0x1F9DE },
+ ["georgia"]={ 0x1F1EC, 0x1F1EA },
+ ["germany"]={ 0x1F1E9, 0x1F1EA },
+ ["ghana"]={ 0x1F1EC, 0x1F1ED },
+ ["ghost"]={ 0x1F47B },
+ ["gibraltar"]={ 0x1F1EC, 0x1F1EE },
+ ["giraffe"]={ 0x1F992 },
+ ["girl"]={ 0x1F467 },
+ ["girl: dark skin tone"]={ 0x1F467, 0x1F3FF },
+ ["girl: light skin tone"]={ 0x1F467, 0x1F3FB },
+ ["girl: medium skin tone"]={ 0x1F467, 0x1F3FD },
+ ["girl: medium-dark skin tone"]={ 0x1F467, 0x1F3FE },
+ ["girl: medium-light skin tone"]={ 0x1F467, 0x1F3FC },
+ ["glass of milk"]={ 0x1F95B },
+ ["glasses"]={ 0x1F453 },
+ ["globe showing americas"]={ 0x1F30E },
+ ["globe showing asia-australia"]={ 0x1F30F },
+ ["globe showing europe-africa"]={ 0x1F30D },
+ ["globe with meridians"]={ 0x1F310 },
+ ["gloves"]={ 0x1F9E4 },
+ ["glowing star"]={ 0x1F31F },
+ ["goal net"]={ 0x1F945 },
+ ["goat"]={ 0x1F410 },
+ ["goblin"]={ 0x1F47A },
+ ["gorilla"]={ 0x1F98D },
+ ["graduation cap"]={ 0x1F393 },
+ ["grapes"]={ 0x1F347 },
+ ["greece"]={ 0x1F1EC, 0x1F1F7 },
+ ["green apple"]={ 0x1F34F },
+ ["green book"]={ 0x1F4D7 },
+ ["green heart"]={ 0x1F49A },
+ ["green salad"]={ 0x1F957 },
+ ["greenland"]={ 0x1F1EC, 0x1F1F1 },
+ ["grenada"]={ 0x1F1EC, 0x1F1E9 },
+ ["grimacing face"]={ 0x1F62C },
+ ["grinning cat face with smiling eyes"]={ 0x1F638 },
+ ["grinning face"]={ 0x1F600 },
+ ["grinning face with smiling eyes"]={ 0x1F601 },
+ ["growing heart"]={ 0x1F497 },
+ ["guadeloupe"]={ 0x1F1EC, 0x1F1F5 },
+ ["guam"]={ 0x1F1EC, 0x1F1FA },
+ ["guard"]={ 0x1F482 },
+ ["guard: dark skin tone"]={ 0x1F482, 0x1F3FF },
+ ["guard: light skin tone"]={ 0x1F482, 0x1F3FB },
+ ["guard: medium skin tone"]={ 0x1F482, 0x1F3FD },
+ ["guard: medium-dark skin tone"]={ 0x1F482, 0x1F3FE },
+ ["guard: medium-light skin tone"]={ 0x1F482, 0x1F3FC },
+ ["guatemala"]={ 0x1F1EC, 0x1F1F9 },
+ ["guernsey"]={ 0x1F1EC, 0x1F1EC },
+ ["guinea"]={ 0x1F1EC, 0x1F1F3 },
+ ["guinea-bissau"]={ 0x1F1EC, 0x1F1FC },
+ ["guitar"]={ 0x1F3B8 },
+ ["guyana"]={ 0x1F1EC, 0x1F1FE },
+ ["haiti"]={ 0x1F1ED, 0x1F1F9 },
+ ["hamburger"]={ 0x1F354 },
+ ["hammer"]={ 0x1F528 },
+ ["hammer and pick"]={ 0x2692 },
+ ["hammer and wrench"]={ 0x1F6E0 },
+ ["hamster face"]={ 0x1F439 },
+ ["handbag"]={ 0x1F45C },
+ ["handshake"]={ 0x1F91D },
+ ["hatching chick"]={ 0x1F423 },
+ ["headphone"]={ 0x1F3A7 },
+ ["hear-no-evil monkey"]={ 0x1F649 },
+ ["heard & mcdonald islands"]={ 0x1F1ED, 0x1F1F2 },
+ ["heart decoration"]={ 0x1F49F },
+ ["heart suit"]={ 0x2665 },
+ ["heart with arrow"]={ 0x1F498 },
+ ["heart with ribbon"]={ 0x1F49D },
+ ["heavy check mark"]={ 0x2714 },
+ ["heavy division sign"]={ 0x2797 },
+ ["heavy dollar sign"]={ 0x1F4B2 },
+ ["heavy heart exclamation"]={ 0x2763 },
+ ["heavy large circle"]={ 0x2B55 },
+ ["heavy minus sign"]={ 0x2796 },
+ ["heavy multiplication x"]={ 0x2716 },
+ ["heavy plus sign"]={ 0x2795 },
+ ["hedgehog"]={ 0x1F994 },
+ ["helicopter"]={ 0x1F681 },
+ ["herb"]={ 0x1F33F },
+ ["hibiscus"]={ 0x1F33A },
+ ["high voltage"]={ 0x26A1 },
+ ["high-heeled shoe"]={ 0x1F460 },
+ ["high-speed train"]={ 0x1F684 },
+ ["high-speed train with bullet nose"]={ 0x1F685 },
+ ["hole"]={ 0x1F573 },
+ ["honduras"]={ 0x1F1ED, 0x1F1F3 },
+ ["honey pot"]={ 0x1F36F },
+ ["honeybee"]={ 0x1F41D },
+ ["hong kong sar china"]={ 0x1F1ED, 0x1F1F0 },
+ ["horizontal traffic light"]={ 0x1F6A5 },
+ ["horse"]={ 0x1F40E },
+ ["horse face"]={ 0x1F434 },
+ ["horse racing"]={ 0x1F3C7 },
+ ["horse racing: dark skin tone"]={ 0x1F3C7, 0x1F3FF },
+ ["horse racing: light skin tone"]={ 0x1F3C7, 0x1F3FB },
+ ["horse racing: medium skin tone"]={ 0x1F3C7, 0x1F3FD },
+ ["horse racing: medium-dark skin tone"]={ 0x1F3C7, 0x1F3FE },
+ ["horse racing: medium-light skin tone"]={ 0x1F3C7, 0x1F3FC },
+ ["hospital"]={ 0x1F3E5 },
+ ["hot beverage"]={ 0x2615 },
+ ["hot dog"]={ 0x1F32D },
+ ["hot pepper"]={ 0x1F336 },
+ ["hot springs"]={ 0x2668 },
+ ["hotel"]={ 0x1F3E8 },
+ ["hourglass"]={ 0x231B },
+ ["hourglass with flowing sand"]={ 0x23F3 },
+ ["house"]={ 0x1F3E0 },
+ ["house with garden"]={ 0x1F3E1 },
+ ["hugging face"]={ 0x1F917 },
+ ["hundred points"]={ 0x1F4AF },
+ ["hungary"]={ 0x1F1ED, 0x1F1FA },
+ ["hushed face"]={ 0x1F62F },
+ ["ice cream"]={ 0x1F368 },
+ ["ice hockey"]={ 0x1F3D2 },
+ ["ice skate"]={ 0x26F8 },
+ ["iceland"]={ 0x1F1EE, 0x1F1F8 },
+ ["id button"]={ 0x1F194 },
+ ["inbox tray"]={ 0x1F4E5 },
+ ["incoming envelope"]={ 0x1F4E8 },
+ ["index pointing up"]={ 0x261D },
+ ["index pointing up: dark skin tone"]={ 0x261D, 0x1F3FF },
+ ["index pointing up: light skin tone"]={ 0x261D, 0x1F3FB },
+ ["index pointing up: medium skin tone"]={ 0x261D, 0x1F3FD },
+ ["index pointing up: medium-dark skin tone"]={ 0x261D, 0x1F3FE },
+ ["index pointing up: medium-light skin tone"]={ 0x261D, 0x1F3FC },
+ ["india"]={ 0x1F1EE, 0x1F1F3 },
+ ["indonesia"]={ 0x1F1EE, 0x1F1E9 },
+ ["information"]={ 0x2139 },
+ ["input latin letters"]={ 0x1F524 },
+ ["input latin lowercase"]={ 0x1F521 },
+ ["input latin uppercase"]={ 0x1F520 },
+ ["input numbers"]={ 0x1F522 },
+ ["input symbols"]={ 0x1F523 },
+ ["iran"]={ 0x1F1EE, 0x1F1F7 },
+ ["iraq"]={ 0x1F1EE, 0x1F1F6 },
+ ["ireland"]={ 0x1F1EE, 0x1F1EA },
+ ["isle of man"]={ 0x1F1EE, 0x1F1F2 },
+ ["israel"]={ 0x1F1EE, 0x1F1F1 },
+ ["italy"]={ 0x1F1EE, 0x1F1F9 },
+ ["jack-o-lantern"]={ 0x1F383 },
+ ["jamaica"]={ 0x1F1EF, 0x1F1F2 },
+ ["japan"]={ 0x1F1EF, 0x1F1F5 },
+ ["japanese castle"]={ 0x1F3EF },
+ ["japanese dolls"]={ 0x1F38E },
+ ["japanese post office"]={ 0x1F3E3 },
+ ["japanese symbol for beginner"]={ 0x1F530 },
+ ["japanese “acceptable” button"]={ 0x1F251 },
+ ["japanese “application” button"]={ 0x1F238 },
+ ["japanese “bargain” button"]={ 0x1F250 },
+ ["japanese “congratulations” button"]={ 0x3297 },
+ ["japanese “discount” button"]={ 0x1F239 },
+ ["japanese “free of charge” button"]={ 0x1F21A },
+ ["japanese “here” button"]={ 0x1F201 },
+ ["japanese “monthly amount” button"]={ 0x1F237 },
+ ["japanese “no vacancy” button"]={ 0x1F235 },
+ ["japanese “not free of charge” button"]={ 0x1F236 },
+ ["japanese “open for business” button"]={ 0x1F23A },
+ ["japanese “passing grade” button"]={ 0x1F234 },
+ ["japanese “prohibited” button"]={ 0x1F232 },
+ ["japanese “reserved” button"]={ 0x1F22F },
+ ["japanese “secret” button"]={ 0x3299 },
+ ["japanese “service charge” button"]={ 0x1F202 },
+ ["japanese “vacancy” button"]={ 0x1F233 },
+ ["jeans"]={ 0x1F456 },
+ ["jersey"]={ 0x1F1EF, 0x1F1EA },
+ ["joker"]={ 0x1F0CF },
+ ["jordan"]={ 0x1F1EF, 0x1F1F4 },
+ ["joystick"]={ 0x1F579 },
+ ["kaaba"]={ 0x1F54B },
+ ["kazakhstan"]={ 0x1F1F0, 0x1F1FF },
+ ["kenya"]={ 0x1F1F0, 0x1F1EA },
+ ["key"]={ 0x1F511 },
+ ["keyboard"]={ 0x2328 },
+ ["keycap 10"]={ 0x1F51F },
+ ["keycap: 0"]={ 0x30, 0x20E3 },
+ ["keycap: 1"]={ 0x31, 0x20E3 },
+ ["keycap: 2"]={ 0x32, 0x20E3 },
+ ["keycap: 3"]={ 0x33, 0x20E3 },
+ ["keycap: 4"]={ 0x34, 0x20E3 },
+ ["keycap: 5"]={ 0x35, 0x20E3 },
+ ["keycap: 6"]={ 0x36, 0x20E3 },
+ ["keycap: 7"]={ 0x37, 0x20E3 },
+ ["keycap: 8"]={ 0x38, 0x20E3 },
+ ["keycap: 9"]={ 0x39, 0x20E3 },
+ ["keycap: asterisk"]={ 0x2A, 0x20E3 },
+ ["keycap: hash"]={ 0x23, 0x20E3 },
+ ["kick scooter"]={ 0x1F6F4 },
+ ["kimono"]={ 0x1F458 },
+ ["kiribati"]={ 0x1F1F0, 0x1F1EE },
+ ["kiss"]={ 0x1F48F },
+ ["kiss mark"]={ 0x1F48B },
+ ["kiss: man, man"]={ 0x1F468, 0x200D, 0x2764, 0x200D, 0x1F48B, 0x200D, 0x1F468 },
+ ["kiss: woman, man"]={ 0x1F469, 0x200D, 0x2764, 0x200D, 0x1F48B, 0x200D, 0x1F468 },
+ ["kiss: woman, woman"]={ 0x1F469, 0x200D, 0x2764, 0x200D, 0x1F48B, 0x200D, 0x1F469 },
+ ["kissing cat face with closed eyes"]={ 0x1F63D },
+ ["kissing face"]={ 0x1F617 },
+ ["kissing face with closed eyes"]={ 0x1F61A },
+ ["kissing face with smiling eyes"]={ 0x1F619 },
+ ["kitchen knife"]={ 0x1F52A },
+ ["kiwi fruit"]={ 0x1F95D },
+ ["koala"]={ 0x1F428 },
+ ["kosovo"]={ 0x1F1FD, 0x1F1F0 },
+ ["kuwait"]={ 0x1F1F0, 0x1F1FC },
+ ["kyrgyzstan"]={ 0x1F1F0, 0x1F1EC },
+ ["label"]={ 0x1F3F7 },
+ ["lady beetle"]={ 0x1F41E },
+ ["laos"]={ 0x1F1F1, 0x1F1E6 },
+ ["laptop computer"]={ 0x1F4BB },
+ ["large blue diamond"]={ 0x1F537 },
+ ["large orange diamond"]={ 0x1F536 },
+ ["last quarter moon"]={ 0x1F317 },
+ ["last quarter moon with face"]={ 0x1F31C },
+ ["last track button"]={ 0x23EE },
+ ["latin cross"]={ 0x271D },
+ ["latvia"]={ 0x1F1F1, 0x1F1FB },
+ ["leaf fluttering in wind"]={ 0x1F343 },
+ ["lebanon"]={ 0x1F1F1, 0x1F1E7 },
+ ["ledger"]={ 0x1F4D2 },
+ ["left arrow"]={ 0x2B05 },
+ ["left arrow curving right"]={ 0x21AA },
+ ["left luggage"]={ 0x1F6C5 },
+ ["left speech bubble"]={ 0x1F5E8 },
+ ["left-facing fist"]={ 0x1F91B },
+ ["left-facing fist: dark skin tone"]={ 0x1F91B, 0x1F3FF },
+ ["left-facing fist: light skin tone"]={ 0x1F91B, 0x1F3FB },
+ ["left-facing fist: medium skin tone"]={ 0x1F91B, 0x1F3FD },
+ ["left-facing fist: medium-dark skin tone"]={ 0x1F91B, 0x1F3FE },
+ ["left-facing fist: medium-light skin tone"]={ 0x1F91B, 0x1F3FC },
+ ["left-pointing magnifying glass"]={ 0x1F50D },
+ ["left-right arrow"]={ 0x2194 },
+ ["lemon"]={ 0x1F34B },
+ ["leo"]={ 0x264C },
+ ["leopard"]={ 0x1F406 },
+ ["lesotho"]={ 0x1F1F1, 0x1F1F8 },
+ ["level slider"]={ 0x1F39A },
+ ["liberia"]={ 0x1F1F1, 0x1F1F7 },
+ ["libra"]={ 0x264E },
+ ["libya"]={ 0x1F1F1, 0x1F1FE },
+ ["liechtenstein"]={ 0x1F1F1, 0x1F1EE },
+ ["light bulb"]={ 0x1F4A1 },
+ ["light rail"]={ 0x1F688 },
+ ["link"]={ 0x1F517 },
+ ["linked paperclips"]={ 0x1F587 },
+ ["lion face"]={ 0x1F981 },
+ ["lipstick"]={ 0x1F484 },
+ ["lithuania"]={ 0x1F1F1, 0x1F1F9 },
+ ["litter in bin sign"]={ 0x1F6AE },
+ ["lizard"]={ 0x1F98E },
+ ["locked"]={ 0x1F512 },
+ ["locked with key"]={ 0x1F510 },
+ ["locked with pen"]={ 0x1F50F },
+ ["locomotive"]={ 0x1F682 },
+ ["lollipop"]={ 0x1F36D },
+ ["loudly crying face"]={ 0x1F62D },
+ ["loudspeaker"]={ 0x1F4E2 },
+ ["love hotel"]={ 0x1F3E9 },
+ ["love letter"]={ 0x1F48C },
+ ["love-you gesture"]={ 0x1F91F },
+ ["love-you gesture: dark skin tone"]={ 0x1F91F, 0x1F3FF },
+ ["love-you gesture: light skin tone"]={ 0x1F91F, 0x1F3FB },
+ ["love-you gesture: medium skin tone"]={ 0x1F91F, 0x1F3FD },
+ ["love-you gesture: medium-dark skin tone"]={ 0x1F91F, 0x1F3FE },
+ ["love-you gesture: medium-light skin tone"]={ 0x1F91F, 0x1F3FC },
+ ["luxembourg"]={ 0x1F1F1, 0x1F1FA },
+ ["lying face"]={ 0x1F925 },
+ ["macau sar china"]={ 0x1F1F2, 0x1F1F4 },
+ ["macedonia"]={ 0x1F1F2, 0x1F1F0 },
+ ["madagascar"]={ 0x1F1F2, 0x1F1EC },
+ ["mage"]={ 0x1F9D9 },
+ ["mage: dark skin tone"]={ 0x1F9D9, 0x1F3FF },
+ ["mage: light skin tone"]={ 0x1F9D9, 0x1F3FB },
+ ["mage: medium skin tone"]={ 0x1F9D9, 0x1F3FD },
+ ["mage: medium-dark skin tone"]={ 0x1F9D9, 0x1F3FE },
+ ["mage: medium-light skin tone"]={ 0x1F9D9, 0x1F3FC },
+ ["mahjong red dragon"]={ 0x1F004 },
+ ["malawi"]={ 0x1F1F2, 0x1F1FC },
+ ["malaysia"]={ 0x1F1F2, 0x1F1FE },
+ ["maldives"]={ 0x1F1F2, 0x1F1FB },
+ ["male sign"]={ 0x2642 },
+ ["mali"]={ 0x1F1F2, 0x1F1F1 },
+ ["malta"]={ 0x1F1F2, 0x1F1F9 },
+ ["man"]={ 0x1F468 },
+ ["man and woman holding hands"]={ 0x1F46B },
+ ["man artist"]={ 0x1F468, 0x200D, 0x1F3A8 },
+ ["man artist: dark skin tone"]={ 0x1F468, 0x1F3FF, 0x200D, 0x1F3A8 },
+ ["man artist: light skin tone"]={ 0x1F468, 0x1F3FB, 0x200D, 0x1F3A8 },
+ ["man artist: medium skin tone"]={ 0x1F468, 0x1F3FD, 0x200D, 0x1F3A8 },
+ ["man artist: medium-dark skin tone"]={ 0x1F468, 0x1F3FE, 0x200D, 0x1F3A8 },
+ ["man artist: medium-light skin tone"]={ 0x1F468, 0x1F3FC, 0x200D, 0x1F3A8 },
+ ["man astronaut"]={ 0x1F468, 0x200D, 0x1F680 },
+ ["man astronaut: dark skin tone"]={ 0x1F468, 0x1F3FF, 0x200D, 0x1F680 },
+ ["man astronaut: light skin tone"]={ 0x1F468, 0x1F3FB, 0x200D, 0x1F680 },
+ ["man astronaut: medium skin tone"]={ 0x1F468, 0x1F3FD, 0x200D, 0x1F680 },
+ ["man astronaut: medium-dark skin tone"]={ 0x1F468, 0x1F3FE, 0x200D, 0x1F680 },
+ ["man astronaut: medium-light skin tone"]={ 0x1F468, 0x1F3FC, 0x200D, 0x1F680 },
+ ["man biking"]={ 0x1F6B4, 0x200D, 0x2642 },
+ ["man biking: dark skin tone"]={ 0x1F6B4, 0x1F3FF, 0x200D, 0x2642 },
+ ["man biking: light skin tone"]={ 0x1F6B4, 0x1F3FB, 0x200D, 0x2642 },
+ ["man biking: medium skin tone"]={ 0x1F6B4, 0x1F3FD, 0x200D, 0x2642 },
+ ["man biking: medium-dark skin tone"]={ 0x1F6B4, 0x1F3FE, 0x200D, 0x2642 },
+ ["man biking: medium-light skin tone"]={ 0x1F6B4, 0x1F3FC, 0x200D, 0x2642 },
+ ["man bouncing ball"]={ 0x26F9, 0x200D, 0x2642 },
+ ["man bouncing ball: dark skin tone"]={ 0x26F9, 0x1F3FF, 0x200D, 0x2642 },
+ ["man bouncing ball: light skin tone"]={ 0x26F9, 0x1F3FB, 0x200D, 0x2642 },
+ ["man bouncing ball: medium skin tone"]={ 0x26F9, 0x1F3FD, 0x200D, 0x2642 },
+ ["man bouncing ball: medium-dark skin tone"]={ 0x26F9, 0x1F3FE, 0x200D, 0x2642 },
+ ["man bouncing ball: medium-light skin tone"]={ 0x26F9, 0x1F3FC, 0x200D, 0x2642 },
+ ["man bowing"]={ 0x1F647, 0x200D, 0x2642 },
+ ["man bowing: dark skin tone"]={ 0x1F647, 0x1F3FF, 0x200D, 0x2642 },
+ ["man bowing: light skin tone"]={ 0x1F647, 0x1F3FB, 0x200D, 0x2642 },
+ ["man bowing: medium skin tone"]={ 0x1F647, 0x1F3FD, 0x200D, 0x2642 },
+ ["man bowing: medium-dark skin tone"]={ 0x1F647, 0x1F3FE, 0x200D, 0x2642 },
+ ["man bowing: medium-light skin tone"]={ 0x1F647, 0x1F3FC, 0x200D, 0x2642 },
+ ["man cartwheeling"]={ 0x1F938, 0x200D, 0x2642 },
+ ["man cartwheeling: dark skin tone"]={ 0x1F938, 0x1F3FF, 0x200D, 0x2642 },
+ ["man cartwheeling: light skin tone"]={ 0x1F938, 0x1F3FB, 0x200D, 0x2642 },
+ ["man cartwheeling: medium skin tone"]={ 0x1F938, 0x1F3FD, 0x200D, 0x2642 },
+ ["man cartwheeling: medium-dark skin tone"]={ 0x1F938, 0x1F3FE, 0x200D, 0x2642 },
+ ["man cartwheeling: medium-light skin tone"]={ 0x1F938, 0x1F3FC, 0x200D, 0x2642 },
+ ["man climbing"]={ 0x1F9D7, 0x200D, 0x2642 },
+ ["man climbing: dark skin tone"]={ 0x1F9D7, 0x1F3FF, 0x200D, 0x2642 },
+ ["man climbing: light skin tone"]={ 0x1F9D7, 0x1F3FB, 0x200D, 0x2642 },
+ ["man climbing: medium skin tone"]={ 0x1F9D7, 0x1F3FD, 0x200D, 0x2642 },
+ ["man climbing: medium-dark skin tone"]={ 0x1F9D7, 0x1F3FE, 0x200D, 0x2642 },
+ ["man climbing: medium-light skin tone"]={ 0x1F9D7, 0x1F3FC, 0x200D, 0x2642 },
+ ["man construction worker"]={ 0x1F477, 0x200D, 0x2642 },
+ ["man construction worker: dark skin tone"]={ 0x1F477, 0x1F3FF, 0x200D, 0x2642 },
+ ["man construction worker: light skin tone"]={ 0x1F477, 0x1F3FB, 0x200D, 0x2642 },
+ ["man construction worker: medium skin tone"]={ 0x1F477, 0x1F3FD, 0x200D, 0x2642 },
+ ["man construction worker: medium-dark skin tone"]={ 0x1F477, 0x1F3FE, 0x200D, 0x2642 },
+ ["man construction worker: medium-light skin tone"]={ 0x1F477, 0x1F3FC, 0x200D, 0x2642 },
+ ["man cook"]={ 0x1F468, 0x200D, 0x1F373 },
+ ["man cook: dark skin tone"]={ 0x1F468, 0x1F3FF, 0x200D, 0x1F373 },
+ ["man cook: light skin tone"]={ 0x1F468, 0x1F3FB, 0x200D, 0x1F373 },
+ ["man cook: medium skin tone"]={ 0x1F468, 0x1F3FD, 0x200D, 0x1F373 },
+ ["man cook: medium-dark skin tone"]={ 0x1F468, 0x1F3FE, 0x200D, 0x1F373 },
+ ["man cook: medium-light skin tone"]={ 0x1F468, 0x1F3FC, 0x200D, 0x1F373 },
+ ["man dancing"]={ 0x1F57A },
+ ["man dancing: dark skin tone"]={ 0x1F57A, 0x1F3FF },
+ ["man dancing: light skin tone"]={ 0x1F57A, 0x1F3FB },
+ ["man dancing: medium skin tone"]={ 0x1F57A, 0x1F3FD },
+ ["man dancing: medium-dark skin tone"]={ 0x1F57A, 0x1F3FE },
+ ["man dancing: medium-light skin tone"]={ 0x1F57A, 0x1F3FC },
+ ["man detective"]={ 0x1F575, 0x200D, 0x2642 },
+ ["man detective: dark skin tone"]={ 0x1F575, 0x1F3FF, 0x200D, 0x2642 },
+ ["man detective: light skin tone"]={ 0x1F575, 0x1F3FB, 0x200D, 0x2642 },
+ ["man detective: medium skin tone"]={ 0x1F575, 0x1F3FD, 0x200D, 0x2642 },
+ ["man detective: medium-dark skin tone"]={ 0x1F575, 0x1F3FE, 0x200D, 0x2642 },
+ ["man detective: medium-light skin tone"]={ 0x1F575, 0x1F3FC, 0x200D, 0x2642 },
+ ["man elf"]={ 0x1F9DD, 0x200D, 0x2642 },
+ ["man elf: dark skin tone"]={ 0x1F9DD, 0x1F3FF, 0x200D, 0x2642 },
+ ["man elf: light skin tone"]={ 0x1F9DD, 0x1F3FB, 0x200D, 0x2642 },
+ ["man elf: medium skin tone"]={ 0x1F9DD, 0x1F3FD, 0x200D, 0x2642 },
+ ["man elf: medium-dark skin tone"]={ 0x1F9DD, 0x1F3FE, 0x200D, 0x2642 },
+ ["man elf: medium-light skin tone"]={ 0x1F9DD, 0x1F3FC, 0x200D, 0x2642 },
+ ["man facepalming"]={ 0x1F926, 0x200D, 0x2642 },
+ ["man facepalming: dark skin tone"]={ 0x1F926, 0x1F3FF, 0x200D, 0x2642 },
+ ["man facepalming: light skin tone"]={ 0x1F926, 0x1F3FB, 0x200D, 0x2642 },
+ ["man facepalming: medium skin tone"]={ 0x1F926, 0x1F3FD, 0x200D, 0x2642 },
+ ["man facepalming: medium-dark skin tone"]={ 0x1F926, 0x1F3FE, 0x200D, 0x2642 },
+ ["man facepalming: medium-light skin tone"]={ 0x1F926, 0x1F3FC, 0x200D, 0x2642 },
+ ["man factory worker"]={ 0x1F468, 0x200D, 0x1F3ED },
+ ["man factory worker: dark skin tone"]={ 0x1F468, 0x1F3FF, 0x200D, 0x1F3ED },
+ ["man factory worker: light skin tone"]={ 0x1F468, 0x1F3FB, 0x200D, 0x1F3ED },
+ ["man factory worker: medium skin tone"]={ 0x1F468, 0x1F3FD, 0x200D, 0x1F3ED },
+ ["man factory worker: medium-dark skin tone"]={ 0x1F468, 0x1F3FE, 0x200D, 0x1F3ED },
+ ["man factory worker: medium-light skin tone"]={ 0x1F468, 0x1F3FC, 0x200D, 0x1F3ED },
+ ["man fairy"]={ 0x1F9DA, 0x200D, 0x2642 },
+ ["man fairy: dark skin tone"]={ 0x1F9DA, 0x1F3FF, 0x200D, 0x2642 },
+ ["man fairy: light skin tone"]={ 0x1F9DA, 0x1F3FB, 0x200D, 0x2642 },
+ ["man fairy: medium skin tone"]={ 0x1F9DA, 0x1F3FD, 0x200D, 0x2642 },
+ ["man fairy: medium-dark skin tone"]={ 0x1F9DA, 0x1F3FE, 0x200D, 0x2642 },
+ ["man fairy: medium-light skin tone"]={ 0x1F9DA, 0x1F3FC, 0x200D, 0x2642 },
+ ["man farmer"]={ 0x1F468, 0x200D, 0x1F33E },
+ ["man farmer: dark skin tone"]={ 0x1F468, 0x1F3FF, 0x200D, 0x1F33E },
+ ["man farmer: light skin tone"]={ 0x1F468, 0x1F3FB, 0x200D, 0x1F33E },
+ ["man farmer: medium skin tone"]={ 0x1F468, 0x1F3FD, 0x200D, 0x1F33E },
+ ["man farmer: medium-dark skin tone"]={ 0x1F468, 0x1F3FE, 0x200D, 0x1F33E },
+ ["man farmer: medium-light skin tone"]={ 0x1F468, 0x1F3FC, 0x200D, 0x1F33E },
+ ["man firefighter"]={ 0x1F468, 0x200D, 0x1F692 },
+ ["man firefighter: dark skin tone"]={ 0x1F468, 0x1F3FF, 0x200D, 0x1F692 },
+ ["man firefighter: light skin tone"]={ 0x1F468, 0x1F3FB, 0x200D, 0x1F692 },
+ ["man firefighter: medium skin tone"]={ 0x1F468, 0x1F3FD, 0x200D, 0x1F692 },
+ ["man firefighter: medium-dark skin tone"]={ 0x1F468, 0x1F3FE, 0x200D, 0x1F692 },
+ ["man firefighter: medium-light skin tone"]={ 0x1F468, 0x1F3FC, 0x200D, 0x1F692 },
+ ["man frowning"]={ 0x1F64D, 0x200D, 0x2642 },
+ ["man frowning: dark skin tone"]={ 0x1F64D, 0x1F3FF, 0x200D, 0x2642 },
+ ["man frowning: light skin tone"]={ 0x1F64D, 0x1F3FB, 0x200D, 0x2642 },
+ ["man frowning: medium skin tone"]={ 0x1F64D, 0x1F3FD, 0x200D, 0x2642 },
+ ["man frowning: medium-dark skin tone"]={ 0x1F64D, 0x1F3FE, 0x200D, 0x2642 },
+ ["man frowning: medium-light skin tone"]={ 0x1F64D, 0x1F3FC, 0x200D, 0x2642 },
+ ["man genie"]={ 0x1F9DE, 0x200D, 0x2642 },
+ ["man gesturing no"]={ 0x1F645, 0x200D, 0x2642 },
+ ["man gesturing no: dark skin tone"]={ 0x1F645, 0x1F3FF, 0x200D, 0x2642 },
+ ["man gesturing no: light skin tone"]={ 0x1F645, 0x1F3FB, 0x200D, 0x2642 },
+ ["man gesturing no: medium skin tone"]={ 0x1F645, 0x1F3FD, 0x200D, 0x2642 },
+ ["man gesturing no: medium-dark skin tone"]={ 0x1F645, 0x1F3FE, 0x200D, 0x2642 },
+ ["man gesturing no: medium-light skin tone"]={ 0x1F645, 0x1F3FC, 0x200D, 0x2642 },
+ ["man gesturing ok"]={ 0x1F646, 0x200D, 0x2642 },
+ ["man gesturing ok: dark skin tone"]={ 0x1F646, 0x1F3FF, 0x200D, 0x2642 },
+ ["man gesturing ok: light skin tone"]={ 0x1F646, 0x1F3FB, 0x200D, 0x2642 },
+ ["man gesturing ok: medium skin tone"]={ 0x1F646, 0x1F3FD, 0x200D, 0x2642 },
+ ["man gesturing ok: medium-dark skin tone"]={ 0x1F646, 0x1F3FE, 0x200D, 0x2642 },
+ ["man gesturing ok: medium-light skin tone"]={ 0x1F646, 0x1F3FC, 0x200D, 0x2642 },
+ ["man getting haircut"]={ 0x1F487, 0x200D, 0x2642 },
+ ["man getting haircut: dark skin tone"]={ 0x1F487, 0x1F3FF, 0x200D, 0x2642 },
+ ["man getting haircut: light skin tone"]={ 0x1F487, 0x1F3FB, 0x200D, 0x2642 },
+ ["man getting haircut: medium skin tone"]={ 0x1F487, 0x1F3FD, 0x200D, 0x2642 },
+ ["man getting haircut: medium-dark skin tone"]={ 0x1F487, 0x1F3FE, 0x200D, 0x2642 },
+ ["man getting haircut: medium-light skin tone"]={ 0x1F487, 0x1F3FC, 0x200D, 0x2642 },
+ ["man getting massage"]={ 0x1F486, 0x200D, 0x2642 },
+ ["man getting massage: dark skin tone"]={ 0x1F486, 0x1F3FF, 0x200D, 0x2642 },
+ ["man getting massage: light skin tone"]={ 0x1F486, 0x1F3FB, 0x200D, 0x2642 },
+ ["man getting massage: medium skin tone"]={ 0x1F486, 0x1F3FD, 0x200D, 0x2642 },
+ ["man getting massage: medium-dark skin tone"]={ 0x1F486, 0x1F3FE, 0x200D, 0x2642 },
+ ["man getting massage: medium-light skin tone"]={ 0x1F486, 0x1F3FC, 0x200D, 0x2642 },
+ ["man golfing"]={ 0x1F3CC, 0x200D, 0x2642 },
+ ["man golfing: dark skin tone"]={ 0x1F3CC, 0x1F3FF, 0x200D, 0x2642 },
+ ["man golfing: light skin tone"]={ 0x1F3CC, 0x1F3FB, 0x200D, 0x2642 },
+ ["man golfing: medium skin tone"]={ 0x1F3CC, 0x1F3FD, 0x200D, 0x2642 },
+ ["man golfing: medium-dark skin tone"]={ 0x1F3CC, 0x1F3FE, 0x200D, 0x2642 },
+ ["man golfing: medium-light skin tone"]={ 0x1F3CC, 0x1F3FC, 0x200D, 0x2642 },
+ ["man guard"]={ 0x1F482, 0x200D, 0x2642 },
+ ["man guard: dark skin tone"]={ 0x1F482, 0x1F3FF, 0x200D, 0x2642 },
+ ["man guard: light skin tone"]={ 0x1F482, 0x1F3FB, 0x200D, 0x2642 },
+ ["man guard: medium skin tone"]={ 0x1F482, 0x1F3FD, 0x200D, 0x2642 },
+ ["man guard: medium-dark skin tone"]={ 0x1F482, 0x1F3FE, 0x200D, 0x2642 },
+ ["man guard: medium-light skin tone"]={ 0x1F482, 0x1F3FC, 0x200D, 0x2642 },
+ ["man health worker"]={ 0x1F468, 0x200D, 0x2695 },
+ ["man health worker: dark skin tone"]={ 0x1F468, 0x1F3FF, 0x200D, 0x2695 },
+ ["man health worker: light skin tone"]={ 0x1F468, 0x1F3FB, 0x200D, 0x2695 },
+ ["man health worker: medium skin tone"]={ 0x1F468, 0x1F3FD, 0x200D, 0x2695 },
+ ["man health worker: medium-dark skin tone"]={ 0x1F468, 0x1F3FE, 0x200D, 0x2695 },
+ ["man health worker: medium-light skin tone"]={ 0x1F468, 0x1F3FC, 0x200D, 0x2695 },
+ ["man in business suit levitating"]={ 0x1F574 },
+ ["man in business suit levitating: dark skin tone"]={ 0x1F574, 0x1F3FF },
+ ["man in business suit levitating: light skin tone"]={ 0x1F574, 0x1F3FB },
+ ["man in business suit levitating: medium skin tone"]={ 0x1F574, 0x1F3FD },
+ ["man in business suit levitating: medium-dark skin tone"]={ 0x1F574, 0x1F3FE },
+ ["man in business suit levitating: medium-light skin tone"]={ 0x1F574, 0x1F3FC },
+ ["man in lotus position"]={ 0x1F9D8, 0x200D, 0x2642 },
+ ["man in lotus position: dark skin tone"]={ 0x1F9D8, 0x1F3FF, 0x200D, 0x2642 },
+ ["man in lotus position: light skin tone"]={ 0x1F9D8, 0x1F3FB, 0x200D, 0x2642 },
+ ["man in lotus position: medium skin tone"]={ 0x1F9D8, 0x1F3FD, 0x200D, 0x2642 },
+ ["man in lotus position: medium-dark skin tone"]={ 0x1F9D8, 0x1F3FE, 0x200D, 0x2642 },
+ ["man in lotus position: medium-light skin tone"]={ 0x1F9D8, 0x1F3FC, 0x200D, 0x2642 },
+ ["man in steamy room"]={ 0x1F9D6, 0x200D, 0x2642 },
+ ["man in steamy room: dark skin tone"]={ 0x1F9D6, 0x1F3FF, 0x200D, 0x2642 },
+ ["man in steamy room: light skin tone"]={ 0x1F9D6, 0x1F3FB, 0x200D, 0x2642 },
+ ["man in steamy room: medium skin tone"]={ 0x1F9D6, 0x1F3FD, 0x200D, 0x2642 },
+ ["man in steamy room: medium-dark skin tone"]={ 0x1F9D6, 0x1F3FE, 0x200D, 0x2642 },
+ ["man in steamy room: medium-light skin tone"]={ 0x1F9D6, 0x1F3FC, 0x200D, 0x2642 },
+ ["man in tuxedo"]={ 0x1F935 },
+ ["man in tuxedo: dark skin tone"]={ 0x1F935, 0x1F3FF },
+ ["man in tuxedo: light skin tone"]={ 0x1F935, 0x1F3FB },
+ ["man in tuxedo: medium skin tone"]={ 0x1F935, 0x1F3FD },
+ ["man in tuxedo: medium-dark skin tone"]={ 0x1F935, 0x1F3FE },
+ ["man in tuxedo: medium-light skin tone"]={ 0x1F935, 0x1F3FC },
+ ["man judge"]={ 0x1F468, 0x200D, 0x2696 },
+ ["man judge: dark skin tone"]={ 0x1F468, 0x1F3FF, 0x200D, 0x2696 },
+ ["man judge: light skin tone"]={ 0x1F468, 0x1F3FB, 0x200D, 0x2696 },
+ ["man judge: medium skin tone"]={ 0x1F468, 0x1F3FD, 0x200D, 0x2696 },
+ ["man judge: medium-dark skin tone"]={ 0x1F468, 0x1F3FE, 0x200D, 0x2696 },
+ ["man judge: medium-light skin tone"]={ 0x1F468, 0x1F3FC, 0x200D, 0x2696 },
+ ["man juggling"]={ 0x1F939, 0x200D, 0x2642 },
+ ["man juggling: dark skin tone"]={ 0x1F939, 0x1F3FF, 0x200D, 0x2642 },
+ ["man juggling: light skin tone"]={ 0x1F939, 0x1F3FB, 0x200D, 0x2642 },
+ ["man juggling: medium skin tone"]={ 0x1F939, 0x1F3FD, 0x200D, 0x2642 },
+ ["man juggling: medium-dark skin tone"]={ 0x1F939, 0x1F3FE, 0x200D, 0x2642 },
+ ["man juggling: medium-light skin tone"]={ 0x1F939, 0x1F3FC, 0x200D, 0x2642 },
+ ["man lifting weights"]={ 0x1F3CB, 0x200D, 0x2642 },
+ ["man lifting weights: dark skin tone"]={ 0x1F3CB, 0x1F3FF, 0x200D, 0x2642 },
+ ["man lifting weights: light skin tone"]={ 0x1F3CB, 0x1F3FB, 0x200D, 0x2642 },
+ ["man lifting weights: medium skin tone"]={ 0x1F3CB, 0x1F3FD, 0x200D, 0x2642 },
+ ["man lifting weights: medium-dark skin tone"]={ 0x1F3CB, 0x1F3FE, 0x200D, 0x2642 },
+ ["man lifting weights: medium-light skin tone"]={ 0x1F3CB, 0x1F3FC, 0x200D, 0x2642 },
+ ["man mage"]={ 0x1F9D9, 0x200D, 0x2642 },
+ ["man mage: dark skin tone"]={ 0x1F9D9, 0x1F3FF, 0x200D, 0x2642 },
+ ["man mage: light skin tone"]={ 0x1F9D9, 0x1F3FB, 0x200D, 0x2642 },
+ ["man mage: medium skin tone"]={ 0x1F9D9, 0x1F3FD, 0x200D, 0x2642 },
+ ["man mage: medium-dark skin tone"]={ 0x1F9D9, 0x1F3FE, 0x200D, 0x2642 },
+ ["man mage: medium-light skin tone"]={ 0x1F9D9, 0x1F3FC, 0x200D, 0x2642 },
+ ["man mechanic"]={ 0x1F468, 0x200D, 0x1F527 },
+ ["man mechanic: dark skin tone"]={ 0x1F468, 0x1F3FF, 0x200D, 0x1F527 },
+ ["man mechanic: light skin tone"]={ 0x1F468, 0x1F3FB, 0x200D, 0x1F527 },
+ ["man mechanic: medium skin tone"]={ 0x1F468, 0x1F3FD, 0x200D, 0x1F527 },
+ ["man mechanic: medium-dark skin tone"]={ 0x1F468, 0x1F3FE, 0x200D, 0x1F527 },
+ ["man mechanic: medium-light skin tone"]={ 0x1F468, 0x1F3FC, 0x200D, 0x1F527 },
+ ["man mountain biking"]={ 0x1F6B5, 0x200D, 0x2642 },
+ ["man mountain biking: dark skin tone"]={ 0x1F6B5, 0x1F3FF, 0x200D, 0x2642 },
+ ["man mountain biking: light skin tone"]={ 0x1F6B5, 0x1F3FB, 0x200D, 0x2642 },
+ ["man mountain biking: medium skin tone"]={ 0x1F6B5, 0x1F3FD, 0x200D, 0x2642 },
+ ["man mountain biking: medium-dark skin tone"]={ 0x1F6B5, 0x1F3FE, 0x200D, 0x2642 },
+ ["man mountain biking: medium-light skin tone"]={ 0x1F6B5, 0x1F3FC, 0x200D, 0x2642 },
+ ["man office worker"]={ 0x1F468, 0x200D, 0x1F4BC },
+ ["man office worker: dark skin tone"]={ 0x1F468, 0x1F3FF, 0x200D, 0x1F4BC },
+ ["man office worker: light skin tone"]={ 0x1F468, 0x1F3FB, 0x200D, 0x1F4BC },
+ ["man office worker: medium skin tone"]={ 0x1F468, 0x1F3FD, 0x200D, 0x1F4BC },
+ ["man office worker: medium-dark skin tone"]={ 0x1F468, 0x1F3FE, 0x200D, 0x1F4BC },
+ ["man office worker: medium-light skin tone"]={ 0x1F468, 0x1F3FC, 0x200D, 0x1F4BC },
+ ["man pilot"]={ 0x1F468, 0x200D, 0x2708 },
+ ["man pilot: dark skin tone"]={ 0x1F468, 0x1F3FF, 0x200D, 0x2708 },
+ ["man pilot: light skin tone"]={ 0x1F468, 0x1F3FB, 0x200D, 0x2708 },
+ ["man pilot: medium skin tone"]={ 0x1F468, 0x1F3FD, 0x200D, 0x2708 },
+ ["man pilot: medium-dark skin tone"]={ 0x1F468, 0x1F3FE, 0x200D, 0x2708 },
+ ["man pilot: medium-light skin tone"]={ 0x1F468, 0x1F3FC, 0x200D, 0x2708 },
+ ["man playing handball"]={ 0x1F93E, 0x200D, 0x2642 },
+ ["man playing handball: dark skin tone"]={ 0x1F93E, 0x1F3FF, 0x200D, 0x2642 },
+ ["man playing handball: light skin tone"]={ 0x1F93E, 0x1F3FB, 0x200D, 0x2642 },
+ ["man playing handball: medium skin tone"]={ 0x1F93E, 0x1F3FD, 0x200D, 0x2642 },
+ ["man playing handball: medium-dark skin tone"]={ 0x1F93E, 0x1F3FE, 0x200D, 0x2642 },
+ ["man playing handball: medium-light skin tone"]={ 0x1F93E, 0x1F3FC, 0x200D, 0x2642 },
+ ["man playing water polo"]={ 0x1F93D, 0x200D, 0x2642 },
+ ["man playing water polo: dark skin tone"]={ 0x1F93D, 0x1F3FF, 0x200D, 0x2642 },
+ ["man playing water polo: light skin tone"]={ 0x1F93D, 0x1F3FB, 0x200D, 0x2642 },
+ ["man playing water polo: medium skin tone"]={ 0x1F93D, 0x1F3FD, 0x200D, 0x2642 },
+ ["man playing water polo: medium-dark skin tone"]={ 0x1F93D, 0x1F3FE, 0x200D, 0x2642 },
+ ["man playing water polo: medium-light skin tone"]={ 0x1F93D, 0x1F3FC, 0x200D, 0x2642 },
+ ["man police officer"]={ 0x1F46E, 0x200D, 0x2642 },
+ ["man police officer: dark skin tone"]={ 0x1F46E, 0x1F3FF, 0x200D, 0x2642 },
+ ["man police officer: light skin tone"]={ 0x1F46E, 0x1F3FB, 0x200D, 0x2642 },
+ ["man police officer: medium skin tone"]={ 0x1F46E, 0x1F3FD, 0x200D, 0x2642 },
+ ["man police officer: medium-dark skin tone"]={ 0x1F46E, 0x1F3FE, 0x200D, 0x2642 },
+ ["man police officer: medium-light skin tone"]={ 0x1F46E, 0x1F3FC, 0x200D, 0x2642 },
+ ["man pouting"]={ 0x1F64E, 0x200D, 0x2642 },
+ ["man pouting: dark skin tone"]={ 0x1F64E, 0x1F3FF, 0x200D, 0x2642 },
+ ["man pouting: light skin tone"]={ 0x1F64E, 0x1F3FB, 0x200D, 0x2642 },
+ ["man pouting: medium skin tone"]={ 0x1F64E, 0x1F3FD, 0x200D, 0x2642 },
+ ["man pouting: medium-dark skin tone"]={ 0x1F64E, 0x1F3FE, 0x200D, 0x2642 },
+ ["man pouting: medium-light skin tone"]={ 0x1F64E, 0x1F3FC, 0x200D, 0x2642 },
+ ["man raising hand"]={ 0x1F64B, 0x200D, 0x2642 },
+ ["man raising hand: dark skin tone"]={ 0x1F64B, 0x1F3FF, 0x200D, 0x2642 },
+ ["man raising hand: light skin tone"]={ 0x1F64B, 0x1F3FB, 0x200D, 0x2642 },
+ ["man raising hand: medium skin tone"]={ 0x1F64B, 0x1F3FD, 0x200D, 0x2642 },
+ ["man raising hand: medium-dark skin tone"]={ 0x1F64B, 0x1F3FE, 0x200D, 0x2642 },
+ ["man raising hand: medium-light skin tone"]={ 0x1F64B, 0x1F3FC, 0x200D, 0x2642 },
+ ["man rowing boat"]={ 0x1F6A3, 0x200D, 0x2642 },
+ ["man rowing boat: dark skin tone"]={ 0x1F6A3, 0x1F3FF, 0x200D, 0x2642 },
+ ["man rowing boat: light skin tone"]={ 0x1F6A3, 0x1F3FB, 0x200D, 0x2642 },
+ ["man rowing boat: medium skin tone"]={ 0x1F6A3, 0x1F3FD, 0x200D, 0x2642 },
+ ["man rowing boat: medium-dark skin tone"]={ 0x1F6A3, 0x1F3FE, 0x200D, 0x2642 },
+ ["man rowing boat: medium-light skin tone"]={ 0x1F6A3, 0x1F3FC, 0x200D, 0x2642 },
+ ["man running"]={ 0x1F3C3, 0x200D, 0x2642 },
+ ["man running: dark skin tone"]={ 0x1F3C3, 0x1F3FF, 0x200D, 0x2642 },
+ ["man running: light skin tone"]={ 0x1F3C3, 0x1F3FB, 0x200D, 0x2642 },
+ ["man running: medium skin tone"]={ 0x1F3C3, 0x1F3FD, 0x200D, 0x2642 },
+ ["man running: medium-dark skin tone"]={ 0x1F3C3, 0x1F3FE, 0x200D, 0x2642 },
+ ["man running: medium-light skin tone"]={ 0x1F3C3, 0x1F3FC, 0x200D, 0x2642 },
+ ["man scientist"]={ 0x1F468, 0x200D, 0x1F52C },
+ ["man scientist: dark skin tone"]={ 0x1F468, 0x1F3FF, 0x200D, 0x1F52C },
+ ["man scientist: light skin tone"]={ 0x1F468, 0x1F3FB, 0x200D, 0x1F52C },
+ ["man scientist: medium skin tone"]={ 0x1F468, 0x1F3FD, 0x200D, 0x1F52C },
+ ["man scientist: medium-dark skin tone"]={ 0x1F468, 0x1F3FE, 0x200D, 0x1F52C },
+ ["man scientist: medium-light skin tone"]={ 0x1F468, 0x1F3FC, 0x200D, 0x1F52C },
+ ["man shrugging"]={ 0x1F937, 0x200D, 0x2642 },
+ ["man shrugging: dark skin tone"]={ 0x1F937, 0x1F3FF, 0x200D, 0x2642 },
+ ["man shrugging: light skin tone"]={ 0x1F937, 0x1F3FB, 0x200D, 0x2642 },
+ ["man shrugging: medium skin tone"]={ 0x1F937, 0x1F3FD, 0x200D, 0x2642 },
+ ["man shrugging: medium-dark skin tone"]={ 0x1F937, 0x1F3FE, 0x200D, 0x2642 },
+ ["man shrugging: medium-light skin tone"]={ 0x1F937, 0x1F3FC, 0x200D, 0x2642 },
+ ["man singer"]={ 0x1F468, 0x200D, 0x1F3A4 },
+ ["man singer: dark skin tone"]={ 0x1F468, 0x1F3FF, 0x200D, 0x1F3A4 },
+ ["man singer: light skin tone"]={ 0x1F468, 0x1F3FB, 0x200D, 0x1F3A4 },
+ ["man singer: medium skin tone"]={ 0x1F468, 0x1F3FD, 0x200D, 0x1F3A4 },
+ ["man singer: medium-dark skin tone"]={ 0x1F468, 0x1F3FE, 0x200D, 0x1F3A4 },
+ ["man singer: medium-light skin tone"]={ 0x1F468, 0x1F3FC, 0x200D, 0x1F3A4 },
+ ["man student"]={ 0x1F468, 0x200D, 0x1F393 },
+ ["man student: dark skin tone"]={ 0x1F468, 0x1F3FF, 0x200D, 0x1F393 },
+ ["man student: light skin tone"]={ 0x1F468, 0x1F3FB, 0x200D, 0x1F393 },
+ ["man student: medium skin tone"]={ 0x1F468, 0x1F3FD, 0x200D, 0x1F393 },
+ ["man student: medium-dark skin tone"]={ 0x1F468, 0x1F3FE, 0x200D, 0x1F393 },
+ ["man student: medium-light skin tone"]={ 0x1F468, 0x1F3FC, 0x200D, 0x1F393 },
+ ["man surfing"]={ 0x1F3C4, 0x200D, 0x2642 },
+ ["man surfing: dark skin tone"]={ 0x1F3C4, 0x1F3FF, 0x200D, 0x2642 },
+ ["man surfing: light skin tone"]={ 0x1F3C4, 0x1F3FB, 0x200D, 0x2642 },
+ ["man surfing: medium skin tone"]={ 0x1F3C4, 0x1F3FD, 0x200D, 0x2642 },
+ ["man surfing: medium-dark skin tone"]={ 0x1F3C4, 0x1F3FE, 0x200D, 0x2642 },
+ ["man surfing: medium-light skin tone"]={ 0x1F3C4, 0x1F3FC, 0x200D, 0x2642 },
+ ["man swimming"]={ 0x1F3CA, 0x200D, 0x2642 },
+ ["man swimming: dark skin tone"]={ 0x1F3CA, 0x1F3FF, 0x200D, 0x2642 },
+ ["man swimming: light skin tone"]={ 0x1F3CA, 0x1F3FB, 0x200D, 0x2642 },
+ ["man swimming: medium skin tone"]={ 0x1F3CA, 0x1F3FD, 0x200D, 0x2642 },
+ ["man swimming: medium-dark skin tone"]={ 0x1F3CA, 0x1F3FE, 0x200D, 0x2642 },
+ ["man swimming: medium-light skin tone"]={ 0x1F3CA, 0x1F3FC, 0x200D, 0x2642 },
+ ["man teacher"]={ 0x1F468, 0x200D, 0x1F3EB },
+ ["man teacher: dark skin tone"]={ 0x1F468, 0x1F3FF, 0x200D, 0x1F3EB },
+ ["man teacher: light skin tone"]={ 0x1F468, 0x1F3FB, 0x200D, 0x1F3EB },
+ ["man teacher: medium skin tone"]={ 0x1F468, 0x1F3FD, 0x200D, 0x1F3EB },
+ ["man teacher: medium-dark skin tone"]={ 0x1F468, 0x1F3FE, 0x200D, 0x1F3EB },
+ ["man teacher: medium-light skin tone"]={ 0x1F468, 0x1F3FC, 0x200D, 0x1F3EB },
+ ["man technologist"]={ 0x1F468, 0x200D, 0x1F4BB },
+ ["man technologist: dark skin tone"]={ 0x1F468, 0x1F3FF, 0x200D, 0x1F4BB },
+ ["man technologist: light skin tone"]={ 0x1F468, 0x1F3FB, 0x200D, 0x1F4BB },
+ ["man technologist: medium skin tone"]={ 0x1F468, 0x1F3FD, 0x200D, 0x1F4BB },
+ ["man technologist: medium-dark skin tone"]={ 0x1F468, 0x1F3FE, 0x200D, 0x1F4BB },
+ ["man technologist: medium-light skin tone"]={ 0x1F468, 0x1F3FC, 0x200D, 0x1F4BB },
+ ["man tipping hand"]={ 0x1F481, 0x200D, 0x2642 },
+ ["man tipping hand: dark skin tone"]={ 0x1F481, 0x1F3FF, 0x200D, 0x2642 },
+ ["man tipping hand: light skin tone"]={ 0x1F481, 0x1F3FB, 0x200D, 0x2642 },
+ ["man tipping hand: medium skin tone"]={ 0x1F481, 0x1F3FD, 0x200D, 0x2642 },
+ ["man tipping hand: medium-dark skin tone"]={ 0x1F481, 0x1F3FE, 0x200D, 0x2642 },
+ ["man tipping hand: medium-light skin tone"]={ 0x1F481, 0x1F3FC, 0x200D, 0x2642 },
+ ["man vampire"]={ 0x1F9DB, 0x200D, 0x2642 },
+ ["man vampire: dark skin tone"]={ 0x1F9DB, 0x1F3FF, 0x200D, 0x2642 },
+ ["man vampire: light skin tone"]={ 0x1F9DB, 0x1F3FB, 0x200D, 0x2642 },
+ ["man vampire: medium skin tone"]={ 0x1F9DB, 0x1F3FD, 0x200D, 0x2642 },
+ ["man vampire: medium-dark skin tone"]={ 0x1F9DB, 0x1F3FE, 0x200D, 0x2642 },
+ ["man vampire: medium-light skin tone"]={ 0x1F9DB, 0x1F3FC, 0x200D, 0x2642 },
+ ["man walking"]={ 0x1F6B6, 0x200D, 0x2642 },
+ ["man walking: dark skin tone"]={ 0x1F6B6, 0x1F3FF, 0x200D, 0x2642 },
+ ["man walking: light skin tone"]={ 0x1F6B6, 0x1F3FB, 0x200D, 0x2642 },
+ ["man walking: medium skin tone"]={ 0x1F6B6, 0x1F3FD, 0x200D, 0x2642 },
+ ["man walking: medium-dark skin tone"]={ 0x1F6B6, 0x1F3FE, 0x200D, 0x2642 },
+ ["man walking: medium-light skin tone"]={ 0x1F6B6, 0x1F3FC, 0x200D, 0x2642 },
+ ["man wearing turban"]={ 0x1F473, 0x200D, 0x2642 },
+ ["man wearing turban: dark skin tone"]={ 0x1F473, 0x1F3FF, 0x200D, 0x2642 },
+ ["man wearing turban: light skin tone"]={ 0x1F473, 0x1F3FB, 0x200D, 0x2642 },
+ ["man wearing turban: medium skin tone"]={ 0x1F473, 0x1F3FD, 0x200D, 0x2642 },
+ ["man wearing turban: medium-dark skin tone"]={ 0x1F473, 0x1F3FE, 0x200D, 0x2642 },
+ ["man wearing turban: medium-light skin tone"]={ 0x1F473, 0x1F3FC, 0x200D, 0x2642 },
+ ["man with chinese cap"]={ 0x1F472 },
+ ["man with chinese cap: dark skin tone"]={ 0x1F472, 0x1F3FF },
+ ["man with chinese cap: light skin tone"]={ 0x1F472, 0x1F3FB },
+ ["man with chinese cap: medium skin tone"]={ 0x1F472, 0x1F3FD },
+ ["man with chinese cap: medium-dark skin tone"]={ 0x1F472, 0x1F3FE },
+ ["man with chinese cap: medium-light skin tone"]={ 0x1F472, 0x1F3FC },
+ ["man zombie"]={ 0x1F9DF, 0x200D, 0x2642 },
+ ["man: dark skin tone"]={ 0x1F468, 0x1F3FF },
+ ["man: light skin tone"]={ 0x1F468, 0x1F3FB },
+ ["man: medium skin tone"]={ 0x1F468, 0x1F3FD },
+ ["man: medium-dark skin tone"]={ 0x1F468, 0x1F3FE },
+ ["man: medium-light skin tone"]={ 0x1F468, 0x1F3FC },
+ ["mantelpiece clock"]={ 0x1F570 },
+ ["man’s shoe"]={ 0x1F45E },
+ ["map of japan"]={ 0x1F5FE },
+ ["maple leaf"]={ 0x1F341 },
+ ["marshall islands"]={ 0x1F1F2, 0x1F1ED },
+ ["martial arts uniform"]={ 0x1F94B },
+ ["martinique"]={ 0x1F1F2, 0x1F1F6 },
+ ["mauritania"]={ 0x1F1F2, 0x1F1F7 },
+ ["mauritius"]={ 0x1F1F2, 0x1F1FA },
+ ["mayotte"]={ 0x1F1FE, 0x1F1F9 },
+ ["meat on bone"]={ 0x1F356 },
+ ["medical symbol"]={ 0x2695 },
+ ["megaphone"]={ 0x1F4E3 },
+ ["melon"]={ 0x1F348 },
+ ["memo"]={ 0x1F4DD },
+ ["men with bunny ears partying"]={ 0x1F46F, 0x200D, 0x2642 },
+ ["men wrestling"]={ 0x1F93C, 0x200D, 0x2642 },
+ ["menorah"]={ 0x1F54E },
+ ["men’s room"]={ 0x1F6B9 },
+ ["mermaid"]={ 0x1F9DC, 0x200D, 0x2640 },
+ ["mermaid: dark skin tone"]={ 0x1F9DC, 0x1F3FF, 0x200D, 0x2640 },
+ ["mermaid: light skin tone"]={ 0x1F9DC, 0x1F3FB, 0x200D, 0x2640 },
+ ["mermaid: medium skin tone"]={ 0x1F9DC, 0x1F3FD, 0x200D, 0x2640 },
+ ["mermaid: medium-dark skin tone"]={ 0x1F9DC, 0x1F3FE, 0x200D, 0x2640 },
+ ["mermaid: medium-light skin tone"]={ 0x1F9DC, 0x1F3FC, 0x200D, 0x2640 },
+ ["merman"]={ 0x1F9DC, 0x200D, 0x2642 },
+ ["merman: dark skin tone"]={ 0x1F9DC, 0x1F3FF, 0x200D, 0x2642 },
+ ["merman: light skin tone"]={ 0x1F9DC, 0x1F3FB, 0x200D, 0x2642 },
+ ["merman: medium skin tone"]={ 0x1F9DC, 0x1F3FD, 0x200D, 0x2642 },
+ ["merman: medium-dark skin tone"]={ 0x1F9DC, 0x1F3FE, 0x200D, 0x2642 },
+ ["merman: medium-light skin tone"]={ 0x1F9DC, 0x1F3FC, 0x200D, 0x2642 },
+ ["merperson"]={ 0x1F9DC },
+ ["merperson: dark skin tone"]={ 0x1F9DC, 0x1F3FF },
+ ["merperson: light skin tone"]={ 0x1F9DC, 0x1F3FB },
+ ["merperson: medium skin tone"]={ 0x1F9DC, 0x1F3FD },
+ ["merperson: medium-dark skin tone"]={ 0x1F9DC, 0x1F3FE },
+ ["merperson: medium-light skin tone"]={ 0x1F9DC, 0x1F3FC },
+ ["metro"]={ 0x1F687 },
+ ["mexico"]={ 0x1F1F2, 0x1F1FD },
+ ["micronesia"]={ 0x1F1EB, 0x1F1F2 },
+ ["microphone"]={ 0x1F3A4 },
+ ["microscope"]={ 0x1F52C },
+ ["middle finger"]={ 0x1F595 },
+ ["middle finger: dark skin tone"]={ 0x1F595, 0x1F3FF },
+ ["middle finger: light skin tone"]={ 0x1F595, 0x1F3FB },
+ ["middle finger: medium skin tone"]={ 0x1F595, 0x1F3FD },
+ ["middle finger: medium-dark skin tone"]={ 0x1F595, 0x1F3FE },
+ ["middle finger: medium-light skin tone"]={ 0x1F595, 0x1F3FC },
+ ["military medal"]={ 0x1F396 },
+ ["milky way"]={ 0x1F30C },
+ ["minibus"]={ 0x1F690 },
+ ["moai"]={ 0x1F5FF },
+ ["mobile phone"]={ 0x1F4F1 },
+ ["mobile phone off"]={ 0x1F4F4 },
+ ["mobile phone with arrow"]={ 0x1F4F2 },
+ ["moldova"]={ 0x1F1F2, 0x1F1E9 },
+ ["monaco"]={ 0x1F1F2, 0x1F1E8 },
+ ["money bag"]={ 0x1F4B0 },
+ ["money with wings"]={ 0x1F4B8 },
+ ["money-mouth face"]={ 0x1F911 },
+ ["mongolia"]={ 0x1F1F2, 0x1F1F3 },
+ ["monkey"]={ 0x1F412 },
+ ["monkey face"]={ 0x1F435 },
+ ["monorail"]={ 0x1F69D },
+ ["montenegro"]={ 0x1F1F2, 0x1F1EA },
+ ["montserrat"]={ 0x1F1F2, 0x1F1F8 },
+ ["moon viewing ceremony"]={ 0x1F391 },
+ ["morocco"]={ 0x1F1F2, 0x1F1E6 },
+ ["mosque"]={ 0x1F54C },
+ ["motor boat"]={ 0x1F6E5 },
+ ["motor scooter"]={ 0x1F6F5 },
+ ["motorcycle"]={ 0x1F3CD },
+ ["motorway"]={ 0x1F6E3 },
+ ["mount fuji"]={ 0x1F5FB },
+ ["mountain"]={ 0x26F0 },
+ ["mountain cableway"]={ 0x1F6A0 },
+ ["mountain railway"]={ 0x1F69E },
+ ["mouse"]={ 0x1F401 },
+ ["mouse face"]={ 0x1F42D },
+ ["mouth"]={ 0x1F444 },
+ ["movie camera"]={ 0x1F3A5 },
+ ["mozambique"]={ 0x1F1F2, 0x1F1FF },
+ ["mrs. claus"]={ 0x1F936 },
+ ["mrs. claus: dark skin tone"]={ 0x1F936, 0x1F3FF },
+ ["mrs. claus: light skin tone"]={ 0x1F936, 0x1F3FB },
+ ["mrs. claus: medium skin tone"]={ 0x1F936, 0x1F3FD },
+ ["mrs. claus: medium-dark skin tone"]={ 0x1F936, 0x1F3FE },
+ ["mrs. claus: medium-light skin tone"]={ 0x1F936, 0x1F3FC },
+ ["mushroom"]={ 0x1F344 },
+ ["musical keyboard"]={ 0x1F3B9 },
+ ["musical note"]={ 0x1F3B5 },
+ ["musical notes"]={ 0x1F3B6 },
+ ["musical score"]={ 0x1F3BC },
+ ["muted speaker"]={ 0x1F507 },
+ ["myanmar (burma)"]={ 0x1F1F2, 0x1F1F2 },
+ ["nail polish"]={ 0x1F485 },
+ ["nail polish: dark skin tone"]={ 0x1F485, 0x1F3FF },
+ ["nail polish: light skin tone"]={ 0x1F485, 0x1F3FB },
+ ["nail polish: medium skin tone"]={ 0x1F485, 0x1F3FD },
+ ["nail polish: medium-dark skin tone"]={ 0x1F485, 0x1F3FE },
+ ["nail polish: medium-light skin tone"]={ 0x1F485, 0x1F3FC },
+ ["name badge"]={ 0x1F4DB },
+ ["namibia"]={ 0x1F1F3, 0x1F1E6 },
+ ["national park"]={ 0x1F3DE },
+ ["nauru"]={ 0x1F1F3, 0x1F1F7 },
+ ["nauseated face"]={ 0x1F922 },
+ ["necktie"]={ 0x1F454 },
+ ["nepal"]={ 0x1F1F3, 0x1F1F5 },
+ ["nerd face"]={ 0x1F913 },
+ ["netherlands"]={ 0x1F1F3, 0x1F1F1 },
+ ["neutral face"]={ 0x1F610 },
+ ["new button"]={ 0x1F195 },
+ ["new caledonia"]={ 0x1F1F3, 0x1F1E8 },
+ ["new moon"]={ 0x1F311 },
+ ["new moon face"]={ 0x1F31A },
+ ["new zealand"]={ 0x1F1F3, 0x1F1FF },
+ ["newspaper"]={ 0x1F4F0 },
+ ["next track button"]={ 0x23ED },
+ ["ng button"]={ 0x1F196 },
+ ["nicaragua"]={ 0x1F1F3, 0x1F1EE },
+ ["niger"]={ 0x1F1F3, 0x1F1EA },
+ ["nigeria"]={ 0x1F1F3, 0x1F1EC },
+ ["night with stars"]={ 0x1F303 },
+ ["nine o’clock"]={ 0x1F558 },
+ ["nine-thirty"]={ 0x1F564 },
+ ["niue"]={ 0x1F1F3, 0x1F1FA },
+ ["no bicycles"]={ 0x1F6B3 },
+ ["no entry"]={ 0x26D4 },
+ ["no littering"]={ 0x1F6AF },
+ ["no mobile phones"]={ 0x1F4F5 },
+ ["no one under eighteen"]={ 0x1F51E },
+ ["no pedestrians"]={ 0x1F6B7 },
+ ["no smoking"]={ 0x1F6AD },
+ ["non-potable water"]={ 0x1F6B1 },
+ ["norfolk island"]={ 0x1F1F3, 0x1F1EB },
+ ["north korea"]={ 0x1F1F0, 0x1F1F5 },
+ ["northern mariana islands"]={ 0x1F1F2, 0x1F1F5 },
+ ["norway"]={ 0x1F1F3, 0x1F1F4 },
+ ["nose"]={ 0x1F443 },
+ ["nose: dark skin tone"]={ 0x1F443, 0x1F3FF },
+ ["nose: light skin tone"]={ 0x1F443, 0x1F3FB },
+ ["nose: medium skin tone"]={ 0x1F443, 0x1F3FD },
+ ["nose: medium-dark skin tone"]={ 0x1F443, 0x1F3FE },
+ ["nose: medium-light skin tone"]={ 0x1F443, 0x1F3FC },
+ ["notebook"]={ 0x1F4D3 },
+ ["notebook with decorative cover"]={ 0x1F4D4 },
+ ["nut and bolt"]={ 0x1F529 },
+ ["o button (blood type)"]={ 0x1F17E },
+ ["octopus"]={ 0x1F419 },
+ ["oden"]={ 0x1F362 },
+ ["office building"]={ 0x1F3E2 },
+ ["ogre"]={ 0x1F479 },
+ ["oil drum"]={ 0x1F6E2 },
+ ["ok button"]={ 0x1F197 },
+ ["ok hand"]={ 0x1F44C },
+ ["ok hand: dark skin tone"]={ 0x1F44C, 0x1F3FF },
+ ["ok hand: light skin tone"]={ 0x1F44C, 0x1F3FB },
+ ["ok hand: medium skin tone"]={ 0x1F44C, 0x1F3FD },
+ ["ok hand: medium-dark skin tone"]={ 0x1F44C, 0x1F3FE },
+ ["ok hand: medium-light skin tone"]={ 0x1F44C, 0x1F3FC },
+ ["old key"]={ 0x1F5DD },
+ ["old man"]={ 0x1F474 },
+ ["old man: dark skin tone"]={ 0x1F474, 0x1F3FF },
+ ["old man: light skin tone"]={ 0x1F474, 0x1F3FB },
+ ["old man: medium skin tone"]={ 0x1F474, 0x1F3FD },
+ ["old man: medium-dark skin tone"]={ 0x1F474, 0x1F3FE },
+ ["old man: medium-light skin tone"]={ 0x1F474, 0x1F3FC },
+ ["old woman"]={ 0x1F475 },
+ ["old woman: dark skin tone"]={ 0x1F475, 0x1F3FF },
+ ["old woman: light skin tone"]={ 0x1F475, 0x1F3FB },
+ ["old woman: medium skin tone"]={ 0x1F475, 0x1F3FD },
+ ["old woman: medium-dark skin tone"]={ 0x1F475, 0x1F3FE },
+ ["old woman: medium-light skin tone"]={ 0x1F475, 0x1F3FC },
+ ["older adult"]={ 0x1F9D3 },
+ ["older adult: dark skin tone"]={ 0x1F9D3, 0x1F3FF },
+ ["older adult: light skin tone"]={ 0x1F9D3, 0x1F3FB },
+ ["older adult: medium skin tone"]={ 0x1F9D3, 0x1F3FD },
+ ["older adult: medium-dark skin tone"]={ 0x1F9D3, 0x1F3FE },
+ ["older adult: medium-light skin tone"]={ 0x1F9D3, 0x1F3FC },
+ ["om"]={ 0x1F549 },
+ ["oman"]={ 0x1F1F4, 0x1F1F2 },
+ ["on! arrow"]={ 0x1F51B },
+ ["oncoming automobile"]={ 0x1F698 },
+ ["oncoming bus"]={ 0x1F68D },
+ ["oncoming fist"]={ 0x1F44A },
+ ["oncoming fist: dark skin tone"]={ 0x1F44A, 0x1F3FF },
+ ["oncoming fist: light skin tone"]={ 0x1F44A, 0x1F3FB },
+ ["oncoming fist: medium skin tone"]={ 0x1F44A, 0x1F3FD },
+ ["oncoming fist: medium-dark skin tone"]={ 0x1F44A, 0x1F3FE },
+ ["oncoming fist: medium-light skin tone"]={ 0x1F44A, 0x1F3FC },
+ ["oncoming police car"]={ 0x1F694 },
+ ["oncoming taxi"]={ 0x1F696 },
+ ["one o’clock"]={ 0x1F550 },
+ ["one-thirty"]={ 0x1F55C },
+ ["open book"]={ 0x1F4D6 },
+ ["open file folder"]={ 0x1F4C2 },
+ ["open hands"]={ 0x1F450 },
+ ["open hands: dark skin tone"]={ 0x1F450, 0x1F3FF },
+ ["open hands: light skin tone"]={ 0x1F450, 0x1F3FB },
+ ["open hands: medium skin tone"]={ 0x1F450, 0x1F3FD },
+ ["open hands: medium-dark skin tone"]={ 0x1F450, 0x1F3FE },
+ ["open hands: medium-light skin tone"]={ 0x1F450, 0x1F3FC },
+ ["open mailbox with lowered flag"]={ 0x1F4ED },
+ ["open mailbox with raised flag"]={ 0x1F4EC },
+ ["ophiuchus"]={ 0x26CE },
+ ["optical disk"]={ 0x1F4BF },
+ ["orange book"]={ 0x1F4D9 },
+ ["orange heart"]={ 0x1F9E1 },
+ ["orthodox cross"]={ 0x2626 },
+ ["outbox tray"]={ 0x1F4E4 },
+ ["owl"]={ 0x1F989 },
+ ["ox"]={ 0x1F402 },
+ ["p button"]={ 0x1F17F },
+ ["package"]={ 0x1F4E6 },
+ ["page facing up"]={ 0x1F4C4 },
+ ["page with curl"]={ 0x1F4C3 },
+ ["pager"]={ 0x1F4DF },
+ ["paintbrush"]={ 0x1F58C },
+ ["pakistan"]={ 0x1F1F5, 0x1F1F0 },
+ ["palau"]={ 0x1F1F5, 0x1F1FC },
+ ["palestinian territories"]={ 0x1F1F5, 0x1F1F8 },
+ ["palm tree"]={ 0x1F334 },
+ ["palms up together"]={ 0x1F932 },
+ ["palms up together: dark skin tone"]={ 0x1F932, 0x1F3FF },
+ ["palms up together: light skin tone"]={ 0x1F932, 0x1F3FB },
+ ["palms up together: medium skin tone"]={ 0x1F932, 0x1F3FD },
+ ["palms up together: medium-dark skin tone"]={ 0x1F932, 0x1F3FE },
+ ["palms up together: medium-light skin tone"]={ 0x1F932, 0x1F3FC },
+ ["panama"]={ 0x1F1F5, 0x1F1E6 },
+ ["pancakes"]={ 0x1F95E },
+ ["panda face"]={ 0x1F43C },
+ ["paperclip"]={ 0x1F4CE },
+ ["papua new guinea"]={ 0x1F1F5, 0x1F1EC },
+ ["paraguay"]={ 0x1F1F5, 0x1F1FE },
+ ["part alternation mark"]={ 0x303D },
+ ["party popper"]={ 0x1F389 },
+ ["passenger ship"]={ 0x1F6F3 },
+ ["passport control"]={ 0x1F6C2 },
+ ["pause button"]={ 0x23F8 },
+ ["paw prints"]={ 0x1F43E },
+ ["peace symbol"]={ 0x262E },
+ ["peach"]={ 0x1F351 },
+ ["peanuts"]={ 0x1F95C },
+ ["pear"]={ 0x1F350 },
+ ["pen"]={ 0x1F58A },
+ ["pencil"]={ 0x270F },
+ ["penguin"]={ 0x1F427 },
+ ["pensive face"]={ 0x1F614 },
+ ["people with bunny ears partying"]={ 0x1F46F },
+ ["people wrestling"]={ 0x1F93C },
+ ["performing arts"]={ 0x1F3AD },
+ ["persevering face"]={ 0x1F623 },
+ ["person biking"]={ 0x1F6B4 },
+ ["person biking: dark skin tone"]={ 0x1F6B4, 0x1F3FF },
+ ["person biking: light skin tone"]={ 0x1F6B4, 0x1F3FB },
+ ["person biking: medium skin tone"]={ 0x1F6B4, 0x1F3FD },
+ ["person biking: medium-dark skin tone"]={ 0x1F6B4, 0x1F3FE },
+ ["person biking: medium-light skin tone"]={ 0x1F6B4, 0x1F3FC },
+ ["person bouncing ball"]={ 0x26F9 },
+ ["person bouncing ball: dark skin tone"]={ 0x26F9, 0x1F3FF },
+ ["person bouncing ball: light skin tone"]={ 0x26F9, 0x1F3FB },
+ ["person bouncing ball: medium skin tone"]={ 0x26F9, 0x1F3FD },
+ ["person bouncing ball: medium-dark skin tone"]={ 0x26F9, 0x1F3FE },
+ ["person bouncing ball: medium-light skin tone"]={ 0x26F9, 0x1F3FC },
+ ["person bowing"]={ 0x1F647 },
+ ["person bowing: dark skin tone"]={ 0x1F647, 0x1F3FF },
+ ["person bowing: light skin tone"]={ 0x1F647, 0x1F3FB },
+ ["person bowing: medium skin tone"]={ 0x1F647, 0x1F3FD },
+ ["person bowing: medium-dark skin tone"]={ 0x1F647, 0x1F3FE },
+ ["person bowing: medium-light skin tone"]={ 0x1F647, 0x1F3FC },
+ ["person cartwheeling"]={ 0x1F938 },
+ ["person cartwheeling: dark skin tone"]={ 0x1F938, 0x1F3FF },
+ ["person cartwheeling: light skin tone"]={ 0x1F938, 0x1F3FB },
+ ["person cartwheeling: medium skin tone"]={ 0x1F938, 0x1F3FD },
+ ["person cartwheeling: medium-dark skin tone"]={ 0x1F938, 0x1F3FE },
+ ["person cartwheeling: medium-light skin tone"]={ 0x1F938, 0x1F3FC },
+ ["person climbing"]={ 0x1F9D7 },
+ ["person climbing: dark skin tone"]={ 0x1F9D7, 0x1F3FF },
+ ["person climbing: light skin tone"]={ 0x1F9D7, 0x1F3FB },
+ ["person climbing: medium skin tone"]={ 0x1F9D7, 0x1F3FD },
+ ["person climbing: medium-dark skin tone"]={ 0x1F9D7, 0x1F3FE },
+ ["person climbing: medium-light skin tone"]={ 0x1F9D7, 0x1F3FC },
+ ["person facepalming"]={ 0x1F926 },
+ ["person facepalming: dark skin tone"]={ 0x1F926, 0x1F3FF },
+ ["person facepalming: light skin tone"]={ 0x1F926, 0x1F3FB },
+ ["person facepalming: medium skin tone"]={ 0x1F926, 0x1F3FD },
+ ["person facepalming: medium-dark skin tone"]={ 0x1F926, 0x1F3FE },
+ ["person facepalming: medium-light skin tone"]={ 0x1F926, 0x1F3FC },
+ ["person fencing"]={ 0x1F93A },
+ ["person frowning"]={ 0x1F64D },
+ ["person frowning: dark skin tone"]={ 0x1F64D, 0x1F3FF },
+ ["person frowning: light skin tone"]={ 0x1F64D, 0x1F3FB },
+ ["person frowning: medium skin tone"]={ 0x1F64D, 0x1F3FD },
+ ["person frowning: medium-dark skin tone"]={ 0x1F64D, 0x1F3FE },
+ ["person frowning: medium-light skin tone"]={ 0x1F64D, 0x1F3FC },
+ ["person gesturing no"]={ 0x1F645 },
+ ["person gesturing no: dark skin tone"]={ 0x1F645, 0x1F3FF },
+ ["person gesturing no: light skin tone"]={ 0x1F645, 0x1F3FB },
+ ["person gesturing no: medium skin tone"]={ 0x1F645, 0x1F3FD },
+ ["person gesturing no: medium-dark skin tone"]={ 0x1F645, 0x1F3FE },
+ ["person gesturing no: medium-light skin tone"]={ 0x1F645, 0x1F3FC },
+ ["person gesturing ok"]={ 0x1F646 },
+ ["person gesturing ok: dark skin tone"]={ 0x1F646, 0x1F3FF },
+ ["person gesturing ok: light skin tone"]={ 0x1F646, 0x1F3FB },
+ ["person gesturing ok: medium skin tone"]={ 0x1F646, 0x1F3FD },
+ ["person gesturing ok: medium-dark skin tone"]={ 0x1F646, 0x1F3FE },
+ ["person gesturing ok: medium-light skin tone"]={ 0x1F646, 0x1F3FC },
+ ["person getting haircut"]={ 0x1F487 },
+ ["person getting haircut: dark skin tone"]={ 0x1F487, 0x1F3FF },
+ ["person getting haircut: light skin tone"]={ 0x1F487, 0x1F3FB },
+ ["person getting haircut: medium skin tone"]={ 0x1F487, 0x1F3FD },
+ ["person getting haircut: medium-dark skin tone"]={ 0x1F487, 0x1F3FE },
+ ["person getting haircut: medium-light skin tone"]={ 0x1F487, 0x1F3FC },
+ ["person getting massage"]={ 0x1F486 },
+ ["person getting massage: dark skin tone"]={ 0x1F486, 0x1F3FF },
+ ["person getting massage: light skin tone"]={ 0x1F486, 0x1F3FB },
+ ["person getting massage: medium skin tone"]={ 0x1F486, 0x1F3FD },
+ ["person getting massage: medium-dark skin tone"]={ 0x1F486, 0x1F3FE },
+ ["person getting massage: medium-light skin tone"]={ 0x1F486, 0x1F3FC },
+ ["person golfing"]={ 0x1F3CC },
+ ["person golfing: dark skin tone"]={ 0x1F3CC, 0x1F3FF },
+ ["person golfing: light skin tone"]={ 0x1F3CC, 0x1F3FB },
+ ["person golfing: medium skin tone"]={ 0x1F3CC, 0x1F3FD },
+ ["person golfing: medium-dark skin tone"]={ 0x1F3CC, 0x1F3FE },
+ ["person golfing: medium-light skin tone"]={ 0x1F3CC, 0x1F3FC },
+ ["person in bed"]={ 0x1F6CC },
+ ["person in bed: dark skin tone"]={ 0x1F6CC, 0x1F3FF },
+ ["person in bed: light skin tone"]={ 0x1F6CC, 0x1F3FB },
+ ["person in bed: medium skin tone"]={ 0x1F6CC, 0x1F3FD },
+ ["person in bed: medium-dark skin tone"]={ 0x1F6CC, 0x1F3FE },
+ ["person in bed: medium-light skin tone"]={ 0x1F6CC, 0x1F3FC },
+ ["person in lotus position"]={ 0x1F9D8 },
+ ["person in lotus position: dark skin tone"]={ 0x1F9D8, 0x1F3FF },
+ ["person in lotus position: light skin tone"]={ 0x1F9D8, 0x1F3FB },
+ ["person in lotus position: medium skin tone"]={ 0x1F9D8, 0x1F3FD },
+ ["person in lotus position: medium-dark skin tone"]={ 0x1F9D8, 0x1F3FE },
+ ["person in lotus position: medium-light skin tone"]={ 0x1F9D8, 0x1F3FC },
+ ["person in steamy room"]={ 0x1F9D6 },
+ ["person in steamy room: dark skin tone"]={ 0x1F9D6, 0x1F3FF },
+ ["person in steamy room: light skin tone"]={ 0x1F9D6, 0x1F3FB },
+ ["person in steamy room: medium skin tone"]={ 0x1F9D6, 0x1F3FD },
+ ["person in steamy room: medium-dark skin tone"]={ 0x1F9D6, 0x1F3FE },
+ ["person in steamy room: medium-light skin tone"]={ 0x1F9D6, 0x1F3FC },
+ ["person juggling"]={ 0x1F939 },
+ ["person juggling: dark skin tone"]={ 0x1F939, 0x1F3FF },
+ ["person juggling: light skin tone"]={ 0x1F939, 0x1F3FB },
+ ["person juggling: medium skin tone"]={ 0x1F939, 0x1F3FD },
+ ["person juggling: medium-dark skin tone"]={ 0x1F939, 0x1F3FE },
+ ["person juggling: medium-light skin tone"]={ 0x1F939, 0x1F3FC },
+ ["person lifting weights"]={ 0x1F3CB },
+ ["person lifting weights: dark skin tone"]={ 0x1F3CB, 0x1F3FF },
+ ["person lifting weights: light skin tone"]={ 0x1F3CB, 0x1F3FB },
+ ["person lifting weights: medium skin tone"]={ 0x1F3CB, 0x1F3FD },
+ ["person lifting weights: medium-dark skin tone"]={ 0x1F3CB, 0x1F3FE },
+ ["person lifting weights: medium-light skin tone"]={ 0x1F3CB, 0x1F3FC },
+ ["person mountain biking"]={ 0x1F6B5 },
+ ["person mountain biking: dark skin tone"]={ 0x1F6B5, 0x1F3FF },
+ ["person mountain biking: light skin tone"]={ 0x1F6B5, 0x1F3FB },
+ ["person mountain biking: medium skin tone"]={ 0x1F6B5, 0x1F3FD },
+ ["person mountain biking: medium-dark skin tone"]={ 0x1F6B5, 0x1F3FE },
+ ["person mountain biking: medium-light skin tone"]={ 0x1F6B5, 0x1F3FC },
+ ["person playing handball"]={ 0x1F93E },
+ ["person playing handball: dark skin tone"]={ 0x1F93E, 0x1F3FF },
+ ["person playing handball: light skin tone"]={ 0x1F93E, 0x1F3FB },
+ ["person playing handball: medium skin tone"]={ 0x1F93E, 0x1F3FD },
+ ["person playing handball: medium-dark skin tone"]={ 0x1F93E, 0x1F3FE },
+ ["person playing handball: medium-light skin tone"]={ 0x1F93E, 0x1F3FC },
+ ["person playing water polo"]={ 0x1F93D },
+ ["person playing water polo: dark skin tone"]={ 0x1F93D, 0x1F3FF },
+ ["person playing water polo: light skin tone"]={ 0x1F93D, 0x1F3FB },
+ ["person playing water polo: medium skin tone"]={ 0x1F93D, 0x1F3FD },
+ ["person playing water polo: medium-dark skin tone"]={ 0x1F93D, 0x1F3FE },
+ ["person playing water polo: medium-light skin tone"]={ 0x1F93D, 0x1F3FC },
+ ["person pouting"]={ 0x1F64E },
+ ["person pouting: dark skin tone"]={ 0x1F64E, 0x1F3FF },
+ ["person pouting: light skin tone"]={ 0x1F64E, 0x1F3FB },
+ ["person pouting: medium skin tone"]={ 0x1F64E, 0x1F3FD },
+ ["person pouting: medium-dark skin tone"]={ 0x1F64E, 0x1F3FE },
+ ["person pouting: medium-light skin tone"]={ 0x1F64E, 0x1F3FC },
+ ["person raising hand"]={ 0x1F64B },
+ ["person raising hand: dark skin tone"]={ 0x1F64B, 0x1F3FF },
+ ["person raising hand: light skin tone"]={ 0x1F64B, 0x1F3FB },
+ ["person raising hand: medium skin tone"]={ 0x1F64B, 0x1F3FD },
+ ["person raising hand: medium-dark skin tone"]={ 0x1F64B, 0x1F3FE },
+ ["person raising hand: medium-light skin tone"]={ 0x1F64B, 0x1F3FC },
+ ["person rowing boat"]={ 0x1F6A3 },
+ ["person rowing boat: dark skin tone"]={ 0x1F6A3, 0x1F3FF },
+ ["person rowing boat: light skin tone"]={ 0x1F6A3, 0x1F3FB },
+ ["person rowing boat: medium skin tone"]={ 0x1F6A3, 0x1F3FD },
+ ["person rowing boat: medium-dark skin tone"]={ 0x1F6A3, 0x1F3FE },
+ ["person rowing boat: medium-light skin tone"]={ 0x1F6A3, 0x1F3FC },
+ ["person running"]={ 0x1F3C3 },
+ ["person running: dark skin tone"]={ 0x1F3C3, 0x1F3FF },
+ ["person running: light skin tone"]={ 0x1F3C3, 0x1F3FB },
+ ["person running: medium skin tone"]={ 0x1F3C3, 0x1F3FD },
+ ["person running: medium-dark skin tone"]={ 0x1F3C3, 0x1F3FE },
+ ["person running: medium-light skin tone"]={ 0x1F3C3, 0x1F3FC },
+ ["person shrugging"]={ 0x1F937 },
+ ["person shrugging: dark skin tone"]={ 0x1F937, 0x1F3FF },
+ ["person shrugging: light skin tone"]={ 0x1F937, 0x1F3FB },
+ ["person shrugging: medium skin tone"]={ 0x1F937, 0x1F3FD },
+ ["person shrugging: medium-dark skin tone"]={ 0x1F937, 0x1F3FE },
+ ["person shrugging: medium-light skin tone"]={ 0x1F937, 0x1F3FC },
+ ["person surfing"]={ 0x1F3C4 },
+ ["person surfing: dark skin tone"]={ 0x1F3C4, 0x1F3FF },
+ ["person surfing: light skin tone"]={ 0x1F3C4, 0x1F3FB },
+ ["person surfing: medium skin tone"]={ 0x1F3C4, 0x1F3FD },
+ ["person surfing: medium-dark skin tone"]={ 0x1F3C4, 0x1F3FE },
+ ["person surfing: medium-light skin tone"]={ 0x1F3C4, 0x1F3FC },
+ ["person swimming"]={ 0x1F3CA },
+ ["person swimming: dark skin tone"]={ 0x1F3CA, 0x1F3FF },
+ ["person swimming: light skin tone"]={ 0x1F3CA, 0x1F3FB },
+ ["person swimming: medium skin tone"]={ 0x1F3CA, 0x1F3FD },
+ ["person swimming: medium-dark skin tone"]={ 0x1F3CA, 0x1F3FE },
+ ["person swimming: medium-light skin tone"]={ 0x1F3CA, 0x1F3FC },
+ ["person taking bath"]={ 0x1F6C0 },
+ ["person taking bath: dark skin tone"]={ 0x1F6C0, 0x1F3FF },
+ ["person taking bath: light skin tone"]={ 0x1F6C0, 0x1F3FB },
+ ["person taking bath: medium skin tone"]={ 0x1F6C0, 0x1F3FD },
+ ["person taking bath: medium-dark skin tone"]={ 0x1F6C0, 0x1F3FE },
+ ["person taking bath: medium-light skin tone"]={ 0x1F6C0, 0x1F3FC },
+ ["person tipping hand"]={ 0x1F481 },
+ ["person tipping hand: dark skin tone"]={ 0x1F481, 0x1F3FF },
+ ["person tipping hand: light skin tone"]={ 0x1F481, 0x1F3FB },
+ ["person tipping hand: medium skin tone"]={ 0x1F481, 0x1F3FD },
+ ["person tipping hand: medium-dark skin tone"]={ 0x1F481, 0x1F3FE },
+ ["person tipping hand: medium-light skin tone"]={ 0x1F481, 0x1F3FC },
+ ["person walking"]={ 0x1F6B6 },
+ ["person walking: dark skin tone"]={ 0x1F6B6, 0x1F3FF },
+ ["person walking: light skin tone"]={ 0x1F6B6, 0x1F3FB },
+ ["person walking: medium skin tone"]={ 0x1F6B6, 0x1F3FD },
+ ["person walking: medium-dark skin tone"]={ 0x1F6B6, 0x1F3FE },
+ ["person walking: medium-light skin tone"]={ 0x1F6B6, 0x1F3FC },
+ ["person wearing turban"]={ 0x1F473 },
+ ["person wearing turban: dark skin tone"]={ 0x1F473, 0x1F3FF },
+ ["person wearing turban: light skin tone"]={ 0x1F473, 0x1F3FB },
+ ["person wearing turban: medium skin tone"]={ 0x1F473, 0x1F3FD },
+ ["person wearing turban: medium-dark skin tone"]={ 0x1F473, 0x1F3FE },
+ ["person wearing turban: medium-light skin tone"]={ 0x1F473, 0x1F3FC },
+ ["peru"]={ 0x1F1F5, 0x1F1EA },
+ ["philippines"]={ 0x1F1F5, 0x1F1ED },
+ ["pick"]={ 0x26CF },
+ ["pie"]={ 0x1F967 },
+ ["pig"]={ 0x1F416 },
+ ["pig face"]={ 0x1F437 },
+ ["pig nose"]={ 0x1F43D },
+ ["pile of poo"]={ 0x1F4A9 },
+ ["pill"]={ 0x1F48A },
+ ["pine decoration"]={ 0x1F38D },
+ ["pineapple"]={ 0x1F34D },
+ ["ping pong"]={ 0x1F3D3 },
+ ["pisces"]={ 0x2653 },
+ ["pistol"]={ 0x1F52B },
+ ["pitcairn islands"]={ 0x1F1F5, 0x1F1F3 },
+ ["pizza"]={ 0x1F355 },
+ ["place of worship"]={ 0x1F6D0 },
+ ["play button"]={ 0x25B6 },
+ ["play or pause button"]={ 0x23EF },
+ ["poland"]={ 0x1F1F5, 0x1F1F1 },
+ ["police car"]={ 0x1F693 },
+ ["police car light"]={ 0x1F6A8 },
+ ["police officer"]={ 0x1F46E },
+ ["police officer: dark skin tone"]={ 0x1F46E, 0x1F3FF },
+ ["police officer: light skin tone"]={ 0x1F46E, 0x1F3FB },
+ ["police officer: medium skin tone"]={ 0x1F46E, 0x1F3FD },
+ ["police officer: medium-dark skin tone"]={ 0x1F46E, 0x1F3FE },
+ ["police officer: medium-light skin tone"]={ 0x1F46E, 0x1F3FC },
+ ["poodle"]={ 0x1F429 },
+ ["pool 8 ball"]={ 0x1F3B1 },
+ ["popcorn"]={ 0x1F37F },
+ ["portugal"]={ 0x1F1F5, 0x1F1F9 },
+ ["post office"]={ 0x1F3E4 },
+ ["postal horn"]={ 0x1F4EF },
+ ["postbox"]={ 0x1F4EE },
+ ["pot of food"]={ 0x1F372 },
+ ["potable water"]={ 0x1F6B0 },
+ ["potato"]={ 0x1F954 },
+ ["poultry leg"]={ 0x1F357 },
+ ["pound banknote"]={ 0x1F4B7 },
+ ["pouting cat face"]={ 0x1F63E },
+ ["pouting face"]={ 0x1F621 },
+ ["prayer beads"]={ 0x1F4FF },
+ ["pregnant woman"]={ 0x1F930 },
+ ["pregnant woman: dark skin tone"]={ 0x1F930, 0x1F3FF },
+ ["pregnant woman: light skin tone"]={ 0x1F930, 0x1F3FB },
+ ["pregnant woman: medium skin tone"]={ 0x1F930, 0x1F3FD },
+ ["pregnant woman: medium-dark skin tone"]={ 0x1F930, 0x1F3FE },
+ ["pregnant woman: medium-light skin tone"]={ 0x1F930, 0x1F3FC },
+ ["pretzel"]={ 0x1F968 },
+ ["prince"]={ 0x1F934 },
+ ["prince: dark skin tone"]={ 0x1F934, 0x1F3FF },
+ ["prince: light skin tone"]={ 0x1F934, 0x1F3FB },
+ ["prince: medium skin tone"]={ 0x1F934, 0x1F3FD },
+ ["prince: medium-dark skin tone"]={ 0x1F934, 0x1F3FE },
+ ["prince: medium-light skin tone"]={ 0x1F934, 0x1F3FC },
+ ["princess"]={ 0x1F478 },
+ ["princess: dark skin tone"]={ 0x1F478, 0x1F3FF },
+ ["princess: light skin tone"]={ 0x1F478, 0x1F3FB },
+ ["princess: medium skin tone"]={ 0x1F478, 0x1F3FD },
+ ["princess: medium-dark skin tone"]={ 0x1F478, 0x1F3FE },
+ ["princess: medium-light skin tone"]={ 0x1F478, 0x1F3FC },
+ ["printer"]={ 0x1F5A8 },
+ ["prohibited"]={ 0x1F6AB },
+ ["puerto rico"]={ 0x1F1F5, 0x1F1F7 },
+ ["purple heart"]={ 0x1F49C },
+ ["purse"]={ 0x1F45B },
+ ["pushpin"]={ 0x1F4CC },
+ ["qatar"]={ 0x1F1F6, 0x1F1E6 },
+ ["question mark"]={ 0x2753 },
+ ["rabbit"]={ 0x1F407 },
+ ["rabbit face"]={ 0x1F430 },
+ ["racing car"]={ 0x1F3CE },
+ ["radio"]={ 0x1F4FB },
+ ["radio button"]={ 0x1F518 },
+ ["radioactive"]={ 0x2622 },
+ ["railway car"]={ 0x1F683 },
+ ["railway track"]={ 0x1F6E4 },
+ ["rainbow"]={ 0x1F308 },
+ ["rainbow flag"]={ 0x1F3F3, 0x200D, 0x1F308 },
+ ["raised back of hand"]={ 0x1F91A },
+ ["raised back of hand: dark skin tone"]={ 0x1F91A, 0x1F3FF },
+ ["raised back of hand: light skin tone"]={ 0x1F91A, 0x1F3FB },
+ ["raised back of hand: medium skin tone"]={ 0x1F91A, 0x1F3FD },
+ ["raised back of hand: medium-dark skin tone"]={ 0x1F91A, 0x1F3FE },
+ ["raised back of hand: medium-light skin tone"]={ 0x1F91A, 0x1F3FC },
+ ["raised fist"]={ 0x270A },
+ ["raised fist: dark skin tone"]={ 0x270A, 0x1F3FF },
+ ["raised fist: light skin tone"]={ 0x270A, 0x1F3FB },
+ ["raised fist: medium skin tone"]={ 0x270A, 0x1F3FD },
+ ["raised fist: medium-dark skin tone"]={ 0x270A, 0x1F3FE },
+ ["raised fist: medium-light skin tone"]={ 0x270A, 0x1F3FC },
+ ["raised hand"]={ 0x270B },
+ ["raised hand with fingers splayed"]={ 0x1F590 },
+ ["raised hand with fingers splayed: dark skin tone"]={ 0x1F590, 0x1F3FF },
+ ["raised hand with fingers splayed: light skin tone"]={ 0x1F590, 0x1F3FB },
+ ["raised hand with fingers splayed: medium skin tone"]={ 0x1F590, 0x1F3FD },
+ ["raised hand with fingers splayed: medium-dark skin tone"]={ 0x1F590, 0x1F3FE },
+ ["raised hand with fingers splayed: medium-light skin tone"]={ 0x1F590, 0x1F3FC },
+ ["raised hand: dark skin tone"]={ 0x270B, 0x1F3FF },
+ ["raised hand: light skin tone"]={ 0x270B, 0x1F3FB },
+ ["raised hand: medium skin tone"]={ 0x270B, 0x1F3FD },
+ ["raised hand: medium-dark skin tone"]={ 0x270B, 0x1F3FE },
+ ["raised hand: medium-light skin tone"]={ 0x270B, 0x1F3FC },
+ ["raising hands"]={ 0x1F64C },
+ ["raising hands: dark skin tone"]={ 0x1F64C, 0x1F3FF },
+ ["raising hands: light skin tone"]={ 0x1F64C, 0x1F3FB },
+ ["raising hands: medium skin tone"]={ 0x1F64C, 0x1F3FD },
+ ["raising hands: medium-dark skin tone"]={ 0x1F64C, 0x1F3FE },
+ ["raising hands: medium-light skin tone"]={ 0x1F64C, 0x1F3FC },
+ ["ram"]={ 0x1F40F },
+ ["rat"]={ 0x1F400 },
+ ["record button"]={ 0x23FA },
+ ["recycling symbol"]={ 0x267B },
+ ["red apple"]={ 0x1F34E },
+ ["red circle"]={ 0x1F534 },
+ ["red heart"]={ 0x2764 },
+ ["red paper lantern"]={ 0x1F3EE },
+ ["red triangle pointed down"]={ 0x1F53B },
+ ["red triangle pointed up"]={ 0x1F53A },
+ ["registered"]={ 0xAE },
+ ["relieved face"]={ 0x1F60C },
+ ["reminder ribbon"]={ 0x1F397 },
+ ["repeat button"]={ 0x1F501 },
+ ["repeat single button"]={ 0x1F502 },
+ ["rescue worker’s helmet"]={ 0x26D1 },
+ ["restroom"]={ 0x1F6BB },
+ ["reverse button"]={ 0x25C0 },
+ ["revolving hearts"]={ 0x1F49E },
+ ["rhinoceros"]={ 0x1F98F },
+ ["ribbon"]={ 0x1F380 },
+ ["rice ball"]={ 0x1F359 },
+ ["rice cracker"]={ 0x1F358 },
+ ["right anger bubble"]={ 0x1F5EF },
+ ["right arrow"]={ 0x27A1 },
+ ["right arrow curving down"]={ 0x2935 },
+ ["right arrow curving left"]={ 0x21A9 },
+ ["right arrow curving up"]={ 0x2934 },
+ ["right-facing fist"]={ 0x1F91C },
+ ["right-facing fist: dark skin tone"]={ 0x1F91C, 0x1F3FF },
+ ["right-facing fist: light skin tone"]={ 0x1F91C, 0x1F3FB },
+ ["right-facing fist: medium skin tone"]={ 0x1F91C, 0x1F3FD },
+ ["right-facing fist: medium-dark skin tone"]={ 0x1F91C, 0x1F3FE },
+ ["right-facing fist: medium-light skin tone"]={ 0x1F91C, 0x1F3FC },
+ ["right-pointing magnifying glass"]={ 0x1F50E },
+ ["ring"]={ 0x1F48D },
+ ["roasted sweet potato"]={ 0x1F360 },
+ ["robot face"]={ 0x1F916 },
+ ["rocket"]={ 0x1F680 },
+ ["rolled-up newspaper"]={ 0x1F5DE },
+ ["roller coaster"]={ 0x1F3A2 },
+ ["rolling on the floor laughing"]={ 0x1F923 },
+ ["romania"]={ 0x1F1F7, 0x1F1F4 },
+ ["rooster"]={ 0x1F413 },
+ ["rose"]={ 0x1F339 },
+ ["rosette"]={ 0x1F3F5 },
+ ["round pushpin"]={ 0x1F4CD },
+ ["rugby football"]={ 0x1F3C9 },
+ ["running shirt"]={ 0x1F3BD },
+ ["running shoe"]={ 0x1F45F },
+ ["russia"]={ 0x1F1F7, 0x1F1FA },
+ ["rwanda"]={ 0x1F1F7, 0x1F1FC },
+ ["réunion"]={ 0x1F1F7, 0x1F1EA },
+ ["sagittarius"]={ 0x2650 },
+ ["sailboat"]={ 0x26F5 },
+ ["sake"]={ 0x1F376 },
+ ["samoa"]={ 0x1F1FC, 0x1F1F8 },
+ ["san marino"]={ 0x1F1F8, 0x1F1F2 },
+ ["sandwich"]={ 0x1F96A },
+ ["santa claus"]={ 0x1F385 },
+ ["santa claus: dark skin tone"]={ 0x1F385, 0x1F3FF },
+ ["santa claus: light skin tone"]={ 0x1F385, 0x1F3FB },
+ ["santa claus: medium skin tone"]={ 0x1F385, 0x1F3FD },
+ ["santa claus: medium-dark skin tone"]={ 0x1F385, 0x1F3FE },
+ ["santa claus: medium-light skin tone"]={ 0x1F385, 0x1F3FC },
+ ["satellite"]={ 0x1F6F0 },
+ ["satellite antenna"]={ 0x1F4E1 },
+ ["saudi arabia"]={ 0x1F1F8, 0x1F1E6 },
+ ["sauropod"]={ 0x1F995 },
+ ["saxophone"]={ 0x1F3B7 },
+ ["scarf"]={ 0x1F9E3 },
+ ["school"]={ 0x1F3EB },
+ ["school backpack"]={ 0x1F392 },
+ ["scissors"]={ 0x2702 },
+ ["scorpion"]={ 0x1F982 },
+ ["scorpius"]={ 0x264F },
+ ["scotland"]={ 0x1F3F4, 0xE0067, 0xE0062, 0xE0073, 0xE0063, 0xE0074, 0xE007F },
+ ["scroll"]={ 0x1F4DC },
+ ["seat"]={ 0x1F4BA },
+ ["see-no-evil monkey"]={ 0x1F648 },
+ ["seedling"]={ 0x1F331 },
+ ["selfie"]={ 0x1F933 },
+ ["selfie: dark skin tone"]={ 0x1F933, 0x1F3FF },
+ ["selfie: light skin tone"]={ 0x1F933, 0x1F3FB },
+ ["selfie: medium skin tone"]={ 0x1F933, 0x1F3FD },
+ ["selfie: medium-dark skin tone"]={ 0x1F933, 0x1F3FE },
+ ["selfie: medium-light skin tone"]={ 0x1F933, 0x1F3FC },
+ ["senegal"]={ 0x1F1F8, 0x1F1F3 },
+ ["serbia"]={ 0x1F1F7, 0x1F1F8 },
+ ["seven o’clock"]={ 0x1F556 },
+ ["seven-thirty"]={ 0x1F562 },
+ ["seychelles"]={ 0x1F1F8, 0x1F1E8 },
+ ["shallow pan of food"]={ 0x1F958 },
+ ["shamrock"]={ 0x2618 },
+ ["shark"]={ 0x1F988 },
+ ["shaved ice"]={ 0x1F367 },
+ ["sheaf of rice"]={ 0x1F33E },
+ ["shield"]={ 0x1F6E1 },
+ ["shinto shrine"]={ 0x26E9 },
+ ["ship"]={ 0x1F6A2 },
+ ["shooting star"]={ 0x1F320 },
+ ["shopping bags"]={ 0x1F6CD },
+ ["shopping cart"]={ 0x1F6D2 },
+ ["shortcake"]={ 0x1F370 },
+ ["shower"]={ 0x1F6BF },
+ ["shrimp"]={ 0x1F990 },
+ ["shuffle tracks button"]={ 0x1F500 },
+ ["shushing face"]={ 0x1F92B },
+ ["sierra leone"]={ 0x1F1F8, 0x1F1F1 },
+ ["sign of the horns"]={ 0x1F918 },
+ ["sign of the horns: dark skin tone"]={ 0x1F918, 0x1F3FF },
+ ["sign of the horns: light skin tone"]={ 0x1F918, 0x1F3FB },
+ ["sign of the horns: medium skin tone"]={ 0x1F918, 0x1F3FD },
+ ["sign of the horns: medium-dark skin tone"]={ 0x1F918, 0x1F3FE },
+ ["sign of the horns: medium-light skin tone"]={ 0x1F918, 0x1F3FC },
+ ["singapore"]={ 0x1F1F8, 0x1F1EC },
+ ["sint maarten"]={ 0x1F1F8, 0x1F1FD },
+ ["six o’clock"]={ 0x1F555 },
+ ["six-thirty"]={ 0x1F561 },
+ ["skier"]={ 0x26F7 },
+ ["skis"]={ 0x1F3BF },
+ ["skull"]={ 0x1F480 },
+ ["skull and crossbones"]={ 0x2620 },
+ ["sled"]={ 0x1F6F7 },
+ ["sleeping face"]={ 0x1F634 },
+ ["sleepy face"]={ 0x1F62A },
+ ["slightly frowning face"]={ 0x1F641 },
+ ["slightly smiling face"]={ 0x1F642 },
+ ["slot machine"]={ 0x1F3B0 },
+ ["slovakia"]={ 0x1F1F8, 0x1F1F0 },
+ ["slovenia"]={ 0x1F1F8, 0x1F1EE },
+ ["small airplane"]={ 0x1F6E9 },
+ ["small blue diamond"]={ 0x1F539 },
+ ["small orange diamond"]={ 0x1F538 },
+ ["smiling cat face with heart-eyes"]={ 0x1F63B },
+ ["smiling cat face with open mouth"]={ 0x1F63A },
+ ["smiling face"]={ 0x263A },
+ ["smiling face with halo"]={ 0x1F607 },
+ ["smiling face with heart-eyes"]={ 0x1F60D },
+ ["smiling face with horns"]={ 0x1F608 },
+ ["smiling face with open mouth"]={ 0x1F603 },
+ ["smiling face with open mouth & closed eyes"]={ 0x1F606 },
+ ["smiling face with open mouth & cold sweat"]={ 0x1F605 },
+ ["smiling face with open mouth & smiling eyes"]={ 0x1F604 },
+ ["smiling face with smiling eyes"]={ 0x1F60A },
+ ["smiling face with sunglasses"]={ 0x1F60E },
+ ["smirking face"]={ 0x1F60F },
+ ["snail"]={ 0x1F40C },
+ ["snake"]={ 0x1F40D },
+ ["sneezing face"]={ 0x1F927 },
+ ["snow-capped mountain"]={ 0x1F3D4 },
+ ["snowboarder"]={ 0x1F3C2 },
+ ["snowboarder: dark skin tone"]={ 0x1F3C2, 0x1F3FF },
+ ["snowboarder: light skin tone"]={ 0x1F3C2, 0x1F3FB },
+ ["snowboarder: medium skin tone"]={ 0x1F3C2, 0x1F3FD },
+ ["snowboarder: medium-dark skin tone"]={ 0x1F3C2, 0x1F3FE },
+ ["snowboarder: medium-light skin tone"]={ 0x1F3C2, 0x1F3FC },
+ ["snowflake"]={ 0x2744 },
+ ["snowman"]={ 0x2603 },
+ ["snowman without snow"]={ 0x26C4 },
+ ["soccer ball"]={ 0x26BD },
+ ["socks"]={ 0x1F9E6 },
+ ["soft ice cream"]={ 0x1F366 },
+ ["solomon islands"]={ 0x1F1F8, 0x1F1E7 },
+ ["somalia"]={ 0x1F1F8, 0x1F1F4 },
+ ["soon arrow"]={ 0x1F51C },
+ ["sos button"]={ 0x1F198 },
+ ["south africa"]={ 0x1F1FF, 0x1F1E6 },
+ ["south georgia & south sandwich islands"]={ 0x1F1EC, 0x1F1F8 },
+ ["south korea"]={ 0x1F1F0, 0x1F1F7 },
+ ["south sudan"]={ 0x1F1F8, 0x1F1F8 },
+ ["spade suit"]={ 0x2660 },
+ ["spaghetti"]={ 0x1F35D },
+ ["spain"]={ 0x1F1EA, 0x1F1F8 },
+ ["sparkle"]={ 0x2747 },
+ ["sparkler"]={ 0x1F387 },
+ ["sparkles"]={ 0x2728 },
+ ["sparkling heart"]={ 0x1F496 },
+ ["speak-no-evil monkey"]={ 0x1F64A },
+ ["speaker high volume"]={ 0x1F50A },
+ ["speaker low volume"]={ 0x1F508 },
+ ["speaker medium volume"]={ 0x1F509 },
+ ["speaking head"]={ 0x1F5E3 },
+ ["speech balloon"]={ 0x1F4AC },
+ ["speedboat"]={ 0x1F6A4 },
+ ["spider"]={ 0x1F577 },
+ ["spider web"]={ 0x1F578 },
+ ["spiral calendar"]={ 0x1F5D3 },
+ ["spiral notepad"]={ 0x1F5D2 },
+ ["spiral shell"]={ 0x1F41A },
+ ["spoon"]={ 0x1F944 },
+ ["sport utility vehicle"]={ 0x1F699 },
+ ["sports medal"]={ 0x1F3C5 },
+ ["spouting whale"]={ 0x1F433 },
+ ["squid"]={ 0x1F991 },
+ ["sri lanka"]={ 0x1F1F1, 0x1F1F0 },
+ ["st. barthélemy"]={ 0x1F1E7, 0x1F1F1 },
+ ["st. helena"]={ 0x1F1F8, 0x1F1ED },
+ ["st. kitts & nevis"]={ 0x1F1F0, 0x1F1F3 },
+ ["st. lucia"]={ 0x1F1F1, 0x1F1E8 },
+ ["st. martin"]={ 0x1F1F2, 0x1F1EB },
+ ["st. pierre & miquelon"]={ 0x1F1F5, 0x1F1F2 },
+ ["st. vincent & grenadines"]={ 0x1F1FB, 0x1F1E8 },
+ ["stadium"]={ 0x1F3DF },
+ ["star and crescent"]={ 0x262A },
+ ["star of david"]={ 0x2721 },
+ ["star-struck"]={ 0x1F929 },
+ ["station"]={ 0x1F689 },
+ ["statue of liberty"]={ 0x1F5FD },
+ ["steaming bowl"]={ 0x1F35C },
+ ["stop button"]={ 0x23F9 },
+ ["stop sign"]={ 0x1F6D1 },
+ ["stopwatch"]={ 0x23F1 },
+ ["straight ruler"]={ 0x1F4CF },
+ ["strawberry"]={ 0x1F353 },
+ ["studio microphone"]={ 0x1F399 },
+ ["stuffed flatbread"]={ 0x1F959 },
+ ["sudan"]={ 0x1F1F8, 0x1F1E9 },
+ ["sun"]={ 0x2600 },
+ ["sun behind cloud"]={ 0x26C5 },
+ ["sun behind large cloud"]={ 0x1F325 },
+ ["sun behind rain cloud"]={ 0x1F326 },
+ ["sun behind small cloud"]={ 0x1F324 },
+ ["sun with face"]={ 0x1F31E },
+ ["sunflower"]={ 0x1F33B },
+ ["sunglasses"]={ 0x1F576 },
+ ["sunrise"]={ 0x1F305 },
+ ["sunrise over mountains"]={ 0x1F304 },
+ ["sunset"]={ 0x1F307 },
+ ["suriname"]={ 0x1F1F8, 0x1F1F7 },
+ ["sushi"]={ 0x1F363 },
+ ["suspension railway"]={ 0x1F69F },
+ ["svalbard & jan mayen"]={ 0x1F1F8, 0x1F1EF },
+ ["swaziland"]={ 0x1F1F8, 0x1F1FF },
+ ["sweat droplets"]={ 0x1F4A6 },
+ ["sweden"]={ 0x1F1F8, 0x1F1EA },
+ ["switzerland"]={ 0x1F1E8, 0x1F1ED },
+ ["synagogue"]={ 0x1F54D },
+ ["syria"]={ 0x1F1F8, 0x1F1FE },
+ ["syringe"]={ 0x1F489 },
+ ["são tomé & príncipe"]={ 0x1F1F8, 0x1F1F9 },
+ ["t-rex"]={ 0x1F996 },
+ ["t-shirt"]={ 0x1F455 },
+ ["taco"]={ 0x1F32E },
+ ["taiwan"]={ 0x1F1F9, 0x1F1FC },
+ ["tajikistan"]={ 0x1F1F9, 0x1F1EF },
+ ["takeout box"]={ 0x1F961 },
+ ["tanabata tree"]={ 0x1F38B },
+ ["tangerine"]={ 0x1F34A },
+ ["tanzania"]={ 0x1F1F9, 0x1F1FF },
+ ["taurus"]={ 0x2649 },
+ ["taxi"]={ 0x1F695 },
+ ["teacup without handle"]={ 0x1F375 },
+ ["tear-off calendar"]={ 0x1F4C6 },
+ ["telephone"]={ 0x260E },
+ ["telephone receiver"]={ 0x1F4DE },
+ ["telescope"]={ 0x1F52D },
+ ["television"]={ 0x1F4FA },
+ ["ten o’clock"]={ 0x1F559 },
+ ["ten-thirty"]={ 0x1F565 },
+ ["tennis"]={ 0x1F3BE },
+ ["tent"]={ 0x26FA },
+ ["thailand"]={ 0x1F1F9, 0x1F1ED },
+ ["thermometer"]={ 0x1F321 },
+ ["thinking face"]={ 0x1F914 },
+ ["thought balloon"]={ 0x1F4AD },
+ ["three o’clock"]={ 0x1F552 },
+ ["three-thirty"]={ 0x1F55E },
+ ["thumbs down"]={ 0x1F44E },
+ ["thumbs down: dark skin tone"]={ 0x1F44E, 0x1F3FF },
+ ["thumbs down: light skin tone"]={ 0x1F44E, 0x1F3FB },
+ ["thumbs down: medium skin tone"]={ 0x1F44E, 0x1F3FD },
+ ["thumbs down: medium-dark skin tone"]={ 0x1F44E, 0x1F3FE },
+ ["thumbs down: medium-light skin tone"]={ 0x1F44E, 0x1F3FC },
+ ["thumbs up"]={ 0x1F44D },
+ ["thumbs up: dark skin tone"]={ 0x1F44D, 0x1F3FF },
+ ["thumbs up: light skin tone"]={ 0x1F44D, 0x1F3FB },
+ ["thumbs up: medium skin tone"]={ 0x1F44D, 0x1F3FD },
+ ["thumbs up: medium-dark skin tone"]={ 0x1F44D, 0x1F3FE },
+ ["thumbs up: medium-light skin tone"]={ 0x1F44D, 0x1F3FC },
+ ["ticket"]={ 0x1F3AB },
+ ["tiger"]={ 0x1F405 },
+ ["tiger face"]={ 0x1F42F },
+ ["timer clock"]={ 0x23F2 },
+ ["timor-leste"]={ 0x1F1F9, 0x1F1F1 },
+ ["tired face"]={ 0x1F62B },
+ ["togo"]={ 0x1F1F9, 0x1F1EC },
+ ["toilet"]={ 0x1F6BD },
+ ["tokelau"]={ 0x1F1F9, 0x1F1F0 },
+ ["tokyo tower"]={ 0x1F5FC },
+ ["tomato"]={ 0x1F345 },
+ ["tonga"]={ 0x1F1F9, 0x1F1F4 },
+ ["tongue"]={ 0x1F445 },
+ ["top arrow"]={ 0x1F51D },
+ ["top hat"]={ 0x1F3A9 },
+ ["tornado"]={ 0x1F32A },
+ ["trackball"]={ 0x1F5B2 },
+ ["tractor"]={ 0x1F69C },
+ ["trade mark"]={ 0x2122 },
+ ["train"]={ 0x1F686 },
+ ["tram"]={ 0x1F68A },
+ ["tram car"]={ 0x1F68B },
+ ["triangular flag"]={ 0x1F6A9 },
+ ["triangular ruler"]={ 0x1F4D0 },
+ ["trident emblem"]={ 0x1F531 },
+ ["trinidad & tobago"]={ 0x1F1F9, 0x1F1F9 },
+ ["tristan da cunha"]={ 0x1F1F9, 0x1F1E6 },
+ ["trolleybus"]={ 0x1F68E },
+ ["trophy"]={ 0x1F3C6 },
+ ["tropical drink"]={ 0x1F379 },
+ ["tropical fish"]={ 0x1F420 },
+ ["trumpet"]={ 0x1F3BA },
+ ["tulip"]={ 0x1F337 },
+ ["tumbler glass"]={ 0x1F943 },
+ ["tunisia"]={ 0x1F1F9, 0x1F1F3 },
+ ["turkey"]={ 0x1F1F9, 0x1F1F7 },
+ ["turkmenistan"]={ 0x1F1F9, 0x1F1F2 },
+ ["turks & caicos islands"]={ 0x1F1F9, 0x1F1E8 },
+ ["turtle"]={ 0x1F422 },
+ ["tuvalu"]={ 0x1F1F9, 0x1F1FB },
+ ["twelve o’clock"]={ 0x1F55B },
+ ["twelve-thirty"]={ 0x1F567 },
+ ["two hearts"]={ 0x1F495 },
+ ["two men holding hands"]={ 0x1F46C },
+ ["two o’clock"]={ 0x1F551 },
+ ["two women holding hands"]={ 0x1F46D },
+ ["two-hump camel"]={ 0x1F42B },
+ ["two-thirty"]={ 0x1F55D },
+ ["u.s. outlying islands"]={ 0x1F1FA, 0x1F1F2 },
+ ["u.s. virgin islands"]={ 0x1F1FB, 0x1F1EE },
+ ["uganda"]={ 0x1F1FA, 0x1F1EC },
+ ["ukraine"]={ 0x1F1FA, 0x1F1E6 },
+ ["umbrella"]={ 0x2602 },
+ ["umbrella on ground"]={ 0x26F1 },
+ ["umbrella with rain drops"]={ 0x2614 },
+ ["unamused face"]={ 0x1F612 },
+ ["unicorn face"]={ 0x1F984 },
+ ["united arab emirates"]={ 0x1F1E6, 0x1F1EA },
+ ["united kingdom"]={ 0x1F1EC, 0x1F1E7 },
+ ["united nations"]={ 0x1F1FA, 0x1F1F3 },
+ ["united states"]={ 0x1F1FA, 0x1F1F8 },
+ ["unlocked"]={ 0x1F513 },
+ ["up arrow"]={ 0x2B06 },
+ ["up button"]={ 0x1F53C },
+ ["up! button"]={ 0x1F199 },
+ ["up-down arrow"]={ 0x2195 },
+ ["up-left arrow"]={ 0x2196 },
+ ["up-right arrow"]={ 0x2197 },
+ ["upside-down face"]={ 0x1F643 },
+ ["uruguay"]={ 0x1F1FA, 0x1F1FE },
+ ["uzbekistan"]={ 0x1F1FA, 0x1F1FF },
+ ["vampire"]={ 0x1F9DB },
+ ["vampire: dark skin tone"]={ 0x1F9DB, 0x1F3FF },
+ ["vampire: light skin tone"]={ 0x1F9DB, 0x1F3FB },
+ ["vampire: medium skin tone"]={ 0x1F9DB, 0x1F3FD },
+ ["vampire: medium-dark skin tone"]={ 0x1F9DB, 0x1F3FE },
+ ["vampire: medium-light skin tone"]={ 0x1F9DB, 0x1F3FC },
+ ["vanuatu"]={ 0x1F1FB, 0x1F1FA },
+ ["vatican city"]={ 0x1F1FB, 0x1F1E6 },
+ ["venezuela"]={ 0x1F1FB, 0x1F1EA },
+ ["vertical traffic light"]={ 0x1F6A6 },
+ ["vibration mode"]={ 0x1F4F3 },
+ ["victory hand"]={ 0x270C },
+ ["victory hand: dark skin tone"]={ 0x270C, 0x1F3FF },
+ ["victory hand: light skin tone"]={ 0x270C, 0x1F3FB },
+ ["victory hand: medium skin tone"]={ 0x270C, 0x1F3FD },
+ ["victory hand: medium-dark skin tone"]={ 0x270C, 0x1F3FE },
+ ["victory hand: medium-light skin tone"]={ 0x270C, 0x1F3FC },
+ ["video camera"]={ 0x1F4F9 },
+ ["video game"]={ 0x1F3AE },
+ ["videocassette"]={ 0x1F4FC },
+ ["vietnam"]={ 0x1F1FB, 0x1F1F3 },
+ ["violin"]={ 0x1F3BB },
+ ["virgo"]={ 0x264D },
+ ["volcano"]={ 0x1F30B },
+ ["volleyball"]={ 0x1F3D0 },
+ ["vs button"]={ 0x1F19A },
+ ["vulcan salute"]={ 0x1F596 },
+ ["vulcan salute: dark skin tone"]={ 0x1F596, 0x1F3FF },
+ ["vulcan salute: light skin tone"]={ 0x1F596, 0x1F3FB },
+ ["vulcan salute: medium skin tone"]={ 0x1F596, 0x1F3FD },
+ ["vulcan salute: medium-dark skin tone"]={ 0x1F596, 0x1F3FE },
+ ["vulcan salute: medium-light skin tone"]={ 0x1F596, 0x1F3FC },
+ ["wales"]={ 0x1F3F4, 0xE0067, 0xE0062, 0xE0077, 0xE006C, 0xE0073, 0xE007F },
+ ["wallis & futuna"]={ 0x1F1FC, 0x1F1EB },
+ ["waning crescent moon"]={ 0x1F318 },
+ ["waning gibbous moon"]={ 0x1F316 },
+ ["warning"]={ 0x26A0 },
+ ["wastebasket"]={ 0x1F5D1 },
+ ["watch"]={ 0x231A },
+ ["water buffalo"]={ 0x1F403 },
+ ["water closet"]={ 0x1F6BE },
+ ["water wave"]={ 0x1F30A },
+ ["watermelon"]={ 0x1F349 },
+ ["waving hand"]={ 0x1F44B },
+ ["waving hand: dark skin tone"]={ 0x1F44B, 0x1F3FF },
+ ["waving hand: light skin tone"]={ 0x1F44B, 0x1F3FB },
+ ["waving hand: medium skin tone"]={ 0x1F44B, 0x1F3FD },
+ ["waving hand: medium-dark skin tone"]={ 0x1F44B, 0x1F3FE },
+ ["waving hand: medium-light skin tone"]={ 0x1F44B, 0x1F3FC },
+ ["wavy dash"]={ 0x3030 },
+ ["waxing crescent moon"]={ 0x1F312 },
+ ["waxing gibbous moon"]={ 0x1F314 },
+ ["weary cat face"]={ 0x1F640 },
+ ["weary face"]={ 0x1F629 },
+ ["wedding"]={ 0x1F492 },
+ ["western sahara"]={ 0x1F1EA, 0x1F1ED },
+ ["whale"]={ 0x1F40B },
+ ["wheel of dharma"]={ 0x2638 },
+ ["wheelchair symbol"]={ 0x267F },
+ ["white circle"]={ 0x26AA },
+ ["white exclamation mark"]={ 0x2755 },
+ ["white flag"]={ 0x1F3F3 },
+ ["white flower"]={ 0x1F4AE },
+ ["white heavy check mark"]={ 0x2705 },
+ ["white large square"]={ 0x2B1C },
+ ["white medium square"]={ 0x25FB },
+ ["white medium star"]={ 0x2B50 },
+ ["white medium-small square"]={ 0x25FD },
+ ["white question mark"]={ 0x2754 },
+ ["white small square"]={ 0x25AB },
+ ["white square button"]={ 0x1F533 },
+ ["wilted flower"]={ 0x1F940 },
+ ["wind chime"]={ 0x1F390 },
+ ["wind face"]={ 0x1F32C },
+ ["wine glass"]={ 0x1F377 },
+ ["winking face"]={ 0x1F609 },
+ ["wolf face"]={ 0x1F43A },
+ ["woman"]={ 0x1F469 },
+ ["woman artist"]={ 0x1F469, 0x200D, 0x1F3A8 },
+ ["woman artist: dark skin tone"]={ 0x1F469, 0x1F3FF, 0x200D, 0x1F3A8 },
+ ["woman artist: light skin tone"]={ 0x1F469, 0x1F3FB, 0x200D, 0x1F3A8 },
+ ["woman artist: medium skin tone"]={ 0x1F469, 0x1F3FD, 0x200D, 0x1F3A8 },
+ ["woman artist: medium-dark skin tone"]={ 0x1F469, 0x1F3FE, 0x200D, 0x1F3A8 },
+ ["woman artist: medium-light skin tone"]={ 0x1F469, 0x1F3FC, 0x200D, 0x1F3A8 },
+ ["woman astronaut"]={ 0x1F469, 0x200D, 0x1F680 },
+ ["woman astronaut: dark skin tone"]={ 0x1F469, 0x1F3FF, 0x200D, 0x1F680 },
+ ["woman astronaut: light skin tone"]={ 0x1F469, 0x1F3FB, 0x200D, 0x1F680 },
+ ["woman astronaut: medium skin tone"]={ 0x1F469, 0x1F3FD, 0x200D, 0x1F680 },
+ ["woman astronaut: medium-dark skin tone"]={ 0x1F469, 0x1F3FE, 0x200D, 0x1F680 },
+ ["woman astronaut: medium-light skin tone"]={ 0x1F469, 0x1F3FC, 0x200D, 0x1F680 },
+ ["woman biking"]={ 0x1F6B4, 0x200D, 0x2640 },
+ ["woman biking: dark skin tone"]={ 0x1F6B4, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman biking: light skin tone"]={ 0x1F6B4, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman biking: medium skin tone"]={ 0x1F6B4, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman biking: medium-dark skin tone"]={ 0x1F6B4, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman biking: medium-light skin tone"]={ 0x1F6B4, 0x1F3FC, 0x200D, 0x2640 },
+ ["woman bouncing ball"]={ 0x26F9, 0x200D, 0x2640 },
+ ["woman bouncing ball: dark skin tone"]={ 0x26F9, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman bouncing ball: light skin tone"]={ 0x26F9, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman bouncing ball: medium skin tone"]={ 0x26F9, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman bouncing ball: medium-dark skin tone"]={ 0x26F9, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman bouncing ball: medium-light skin tone"]={ 0x26F9, 0x1F3FC, 0x200D, 0x2640 },
+ ["woman bowing"]={ 0x1F647, 0x200D, 0x2640 },
+ ["woman bowing: dark skin tone"]={ 0x1F647, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman bowing: light skin tone"]={ 0x1F647, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman bowing: medium skin tone"]={ 0x1F647, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman bowing: medium-dark skin tone"]={ 0x1F647, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman bowing: medium-light skin tone"]={ 0x1F647, 0x1F3FC, 0x200D, 0x2640 },
+ ["woman cartwheeling"]={ 0x1F938, 0x200D, 0x2640 },
+ ["woman cartwheeling: dark skin tone"]={ 0x1F938, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman cartwheeling: light skin tone"]={ 0x1F938, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman cartwheeling: medium skin tone"]={ 0x1F938, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman cartwheeling: medium-dark skin tone"]={ 0x1F938, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman cartwheeling: medium-light skin tone"]={ 0x1F938, 0x1F3FC, 0x200D, 0x2640 },
+ ["woman climbing"]={ 0x1F9D7, 0x200D, 0x2640 },
+ ["woman climbing: dark skin tone"]={ 0x1F9D7, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman climbing: light skin tone"]={ 0x1F9D7, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman climbing: medium skin tone"]={ 0x1F9D7, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman climbing: medium-dark skin tone"]={ 0x1F9D7, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman climbing: medium-light skin tone"]={ 0x1F9D7, 0x1F3FC, 0x200D, 0x2640 },
+ ["woman construction worker"]={ 0x1F477, 0x200D, 0x2640 },
+ ["woman construction worker: dark skin tone"]={ 0x1F477, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman construction worker: light skin tone"]={ 0x1F477, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman construction worker: medium skin tone"]={ 0x1F477, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman construction worker: medium-dark skin tone"]={ 0x1F477, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman construction worker: medium-light skin tone"]={ 0x1F477, 0x1F3FC, 0x200D, 0x2640 },
+ ["woman cook"]={ 0x1F469, 0x200D, 0x1F373 },
+ ["woman cook: dark skin tone"]={ 0x1F469, 0x1F3FF, 0x200D, 0x1F373 },
+ ["woman cook: light skin tone"]={ 0x1F469, 0x1F3FB, 0x200D, 0x1F373 },
+ ["woman cook: medium skin tone"]={ 0x1F469, 0x1F3FD, 0x200D, 0x1F373 },
+ ["woman cook: medium-dark skin tone"]={ 0x1F469, 0x1F3FE, 0x200D, 0x1F373 },
+ ["woman cook: medium-light skin tone"]={ 0x1F469, 0x1F3FC, 0x200D, 0x1F373 },
+ ["woman dancing"]={ 0x1F483 },
+ ["woman dancing: dark skin tone"]={ 0x1F483, 0x1F3FF },
+ ["woman dancing: light skin tone"]={ 0x1F483, 0x1F3FB },
+ ["woman dancing: medium skin tone"]={ 0x1F483, 0x1F3FD },
+ ["woman dancing: medium-dark skin tone"]={ 0x1F483, 0x1F3FE },
+ ["woman dancing: medium-light skin tone"]={ 0x1F483, 0x1F3FC },
+ ["woman detective"]={ 0x1F575, 0x200D, 0x2640 },
+ ["woman detective: dark skin tone"]={ 0x1F575, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman detective: light skin tone"]={ 0x1F575, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman detective: medium skin tone"]={ 0x1F575, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman detective: medium-dark skin tone"]={ 0x1F575, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman detective: medium-light skin tone"]={ 0x1F575, 0x1F3FC, 0x200D, 0x2640 },
+ ["woman elf"]={ 0x1F9DD, 0x200D, 0x2640 },
+ ["woman elf: dark skin tone"]={ 0x1F9DD, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman elf: light skin tone"]={ 0x1F9DD, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman elf: medium skin tone"]={ 0x1F9DD, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman elf: medium-dark skin tone"]={ 0x1F9DD, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman elf: medium-light skin tone"]={ 0x1F9DD, 0x1F3FC, 0x200D, 0x2640 },
+ ["woman facepalming"]={ 0x1F926, 0x200D, 0x2640 },
+ ["woman facepalming: dark skin tone"]={ 0x1F926, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman facepalming: light skin tone"]={ 0x1F926, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman facepalming: medium skin tone"]={ 0x1F926, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman facepalming: medium-dark skin tone"]={ 0x1F926, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman facepalming: medium-light skin tone"]={ 0x1F926, 0x1F3FC, 0x200D, 0x2640 },
+ ["woman factory worker"]={ 0x1F469, 0x200D, 0x1F3ED },
+ ["woman factory worker: dark skin tone"]={ 0x1F469, 0x1F3FF, 0x200D, 0x1F3ED },
+ ["woman factory worker: light skin tone"]={ 0x1F469, 0x1F3FB, 0x200D, 0x1F3ED },
+ ["woman factory worker: medium skin tone"]={ 0x1F469, 0x1F3FD, 0x200D, 0x1F3ED },
+ ["woman factory worker: medium-dark skin tone"]={ 0x1F469, 0x1F3FE, 0x200D, 0x1F3ED },
+ ["woman factory worker: medium-light skin tone"]={ 0x1F469, 0x1F3FC, 0x200D, 0x1F3ED },
+ ["woman fairy"]={ 0x1F9DA, 0x200D, 0x2640 },
+ ["woman fairy: dark skin tone"]={ 0x1F9DA, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman fairy: light skin tone"]={ 0x1F9DA, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman fairy: medium skin tone"]={ 0x1F9DA, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman fairy: medium-dark skin tone"]={ 0x1F9DA, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman fairy: medium-light skin tone"]={ 0x1F9DA, 0x1F3FC, 0x200D, 0x2640 },
+ ["woman farmer"]={ 0x1F469, 0x200D, 0x1F33E },
+ ["woman farmer: dark skin tone"]={ 0x1F469, 0x1F3FF, 0x200D, 0x1F33E },
+ ["woman farmer: light skin tone"]={ 0x1F469, 0x1F3FB, 0x200D, 0x1F33E },
+ ["woman farmer: medium skin tone"]={ 0x1F469, 0x1F3FD, 0x200D, 0x1F33E },
+ ["woman farmer: medium-dark skin tone"]={ 0x1F469, 0x1F3FE, 0x200D, 0x1F33E },
+ ["woman farmer: medium-light skin tone"]={ 0x1F469, 0x1F3FC, 0x200D, 0x1F33E },
+ ["woman firefighter"]={ 0x1F469, 0x200D, 0x1F692 },
+ ["woman firefighter: dark skin tone"]={ 0x1F469, 0x1F3FF, 0x200D, 0x1F692 },
+ ["woman firefighter: light skin tone"]={ 0x1F469, 0x1F3FB, 0x200D, 0x1F692 },
+ ["woman firefighter: medium skin tone"]={ 0x1F469, 0x1F3FD, 0x200D, 0x1F692 },
+ ["woman firefighter: medium-dark skin tone"]={ 0x1F469, 0x1F3FE, 0x200D, 0x1F692 },
+ ["woman firefighter: medium-light skin tone"]={ 0x1F469, 0x1F3FC, 0x200D, 0x1F692 },
+ ["woman frowning"]={ 0x1F64D, 0x200D, 0x2640 },
+ ["woman frowning: dark skin tone"]={ 0x1F64D, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman frowning: light skin tone"]={ 0x1F64D, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman frowning: medium skin tone"]={ 0x1F64D, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman frowning: medium-dark skin tone"]={ 0x1F64D, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman frowning: medium-light skin tone"]={ 0x1F64D, 0x1F3FC, 0x200D, 0x2640 },
+ ["woman genie"]={ 0x1F9DE, 0x200D, 0x2640 },
+ ["woman gesturing no"]={ 0x1F645, 0x200D, 0x2640 },
+ ["woman gesturing no: dark skin tone"]={ 0x1F645, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman gesturing no: light skin tone"]={ 0x1F645, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman gesturing no: medium skin tone"]={ 0x1F645, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman gesturing no: medium-dark skin tone"]={ 0x1F645, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman gesturing no: medium-light skin tone"]={ 0x1F645, 0x1F3FC, 0x200D, 0x2640 },
+ ["woman gesturing ok"]={ 0x1F646, 0x200D, 0x2640 },
+ ["woman gesturing ok: dark skin tone"]={ 0x1F646, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman gesturing ok: light skin tone"]={ 0x1F646, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman gesturing ok: medium skin tone"]={ 0x1F646, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman gesturing ok: medium-dark skin tone"]={ 0x1F646, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman gesturing ok: medium-light skin tone"]={ 0x1F646, 0x1F3FC, 0x200D, 0x2640 },
+ ["woman getting haircut"]={ 0x1F487, 0x200D, 0x2640 },
+ ["woman getting haircut: dark skin tone"]={ 0x1F487, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman getting haircut: light skin tone"]={ 0x1F487, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman getting haircut: medium skin tone"]={ 0x1F487, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman getting haircut: medium-dark skin tone"]={ 0x1F487, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman getting haircut: medium-light skin tone"]={ 0x1F487, 0x1F3FC, 0x200D, 0x2640 },
+ ["woman getting massage"]={ 0x1F486, 0x200D, 0x2640 },
+ ["woman getting massage: dark skin tone"]={ 0x1F486, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman getting massage: light skin tone"]={ 0x1F486, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman getting massage: medium skin tone"]={ 0x1F486, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman getting massage: medium-dark skin tone"]={ 0x1F486, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman getting massage: medium-light skin tone"]={ 0x1F486, 0x1F3FC, 0x200D, 0x2640 },
+ ["woman golfing"]={ 0x1F3CC, 0x200D, 0x2640 },
+ ["woman golfing: dark skin tone"]={ 0x1F3CC, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman golfing: light skin tone"]={ 0x1F3CC, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman golfing: medium skin tone"]={ 0x1F3CC, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman golfing: medium-dark skin tone"]={ 0x1F3CC, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman golfing: medium-light skin tone"]={ 0x1F3CC, 0x1F3FC, 0x200D, 0x2640 },
+ ["woman guard"]={ 0x1F482, 0x200D, 0x2640 },
+ ["woman guard: dark skin tone"]={ 0x1F482, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman guard: light skin tone"]={ 0x1F482, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman guard: medium skin tone"]={ 0x1F482, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman guard: medium-dark skin tone"]={ 0x1F482, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman guard: medium-light skin tone"]={ 0x1F482, 0x1F3FC, 0x200D, 0x2640 },
+ ["woman health worker"]={ 0x1F469, 0x200D, 0x2695 },
+ ["woman health worker: dark skin tone"]={ 0x1F469, 0x1F3FF, 0x200D, 0x2695 },
+ ["woman health worker: light skin tone"]={ 0x1F469, 0x1F3FB, 0x200D, 0x2695 },
+ ["woman health worker: medium skin tone"]={ 0x1F469, 0x1F3FD, 0x200D, 0x2695 },
+ ["woman health worker: medium-dark skin tone"]={ 0x1F469, 0x1F3FE, 0x200D, 0x2695 },
+ ["woman health worker: medium-light skin tone"]={ 0x1F469, 0x1F3FC, 0x200D, 0x2695 },
+ ["woman in lotus position"]={ 0x1F9D8, 0x200D, 0x2640 },
+ ["woman in lotus position: dark skin tone"]={ 0x1F9D8, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman in lotus position: light skin tone"]={ 0x1F9D8, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman in lotus position: medium skin tone"]={ 0x1F9D8, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman in lotus position: medium-dark skin tone"]={ 0x1F9D8, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman in lotus position: medium-light skin tone"]={ 0x1F9D8, 0x1F3FC, 0x200D, 0x2640 },
+ ["woman in steamy room"]={ 0x1F9D6, 0x200D, 0x2640 },
+ ["woman in steamy room: dark skin tone"]={ 0x1F9D6, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman in steamy room: light skin tone"]={ 0x1F9D6, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman in steamy room: medium skin tone"]={ 0x1F9D6, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman in steamy room: medium-dark skin tone"]={ 0x1F9D6, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman in steamy room: medium-light skin tone"]={ 0x1F9D6, 0x1F3FC, 0x200D, 0x2640 },
+ ["woman judge"]={ 0x1F469, 0x200D, 0x2696 },
+ ["woman judge: dark skin tone"]={ 0x1F469, 0x1F3FF, 0x200D, 0x2696 },
+ ["woman judge: light skin tone"]={ 0x1F469, 0x1F3FB, 0x200D, 0x2696 },
+ ["woman judge: medium skin tone"]={ 0x1F469, 0x1F3FD, 0x200D, 0x2696 },
+ ["woman judge: medium-dark skin tone"]={ 0x1F469, 0x1F3FE, 0x200D, 0x2696 },
+ ["woman judge: medium-light skin tone"]={ 0x1F469, 0x1F3FC, 0x200D, 0x2696 },
+ ["woman juggling"]={ 0x1F939, 0x200D, 0x2640 },
+ ["woman juggling: dark skin tone"]={ 0x1F939, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman juggling: light skin tone"]={ 0x1F939, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman juggling: medium skin tone"]={ 0x1F939, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman juggling: medium-dark skin tone"]={ 0x1F939, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman juggling: medium-light skin tone"]={ 0x1F939, 0x1F3FC, 0x200D, 0x2640 },
+ ["woman lifting weights"]={ 0x1F3CB, 0x200D, 0x2640 },
+ ["woman lifting weights: dark skin tone"]={ 0x1F3CB, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman lifting weights: light skin tone"]={ 0x1F3CB, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman lifting weights: medium skin tone"]={ 0x1F3CB, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman lifting weights: medium-dark skin tone"]={ 0x1F3CB, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman lifting weights: medium-light skin tone"]={ 0x1F3CB, 0x1F3FC, 0x200D, 0x2640 },
+ ["woman mage"]={ 0x1F9D9, 0x200D, 0x2640 },
+ ["woman mage: dark skin tone"]={ 0x1F9D9, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman mage: light skin tone"]={ 0x1F9D9, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman mage: medium skin tone"]={ 0x1F9D9, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman mage: medium-dark skin tone"]={ 0x1F9D9, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman mage: medium-light skin tone"]={ 0x1F9D9, 0x1F3FC, 0x200D, 0x2640 },
+ ["woman mechanic"]={ 0x1F469, 0x200D, 0x1F527 },
+ ["woman mechanic: dark skin tone"]={ 0x1F469, 0x1F3FF, 0x200D, 0x1F527 },
+ ["woman mechanic: light skin tone"]={ 0x1F469, 0x1F3FB, 0x200D, 0x1F527 },
+ ["woman mechanic: medium skin tone"]={ 0x1F469, 0x1F3FD, 0x200D, 0x1F527 },
+ ["woman mechanic: medium-dark skin tone"]={ 0x1F469, 0x1F3FE, 0x200D, 0x1F527 },
+ ["woman mechanic: medium-light skin tone"]={ 0x1F469, 0x1F3FC, 0x200D, 0x1F527 },
+ ["woman mountain biking"]={ 0x1F6B5, 0x200D, 0x2640 },
+ ["woman mountain biking: dark skin tone"]={ 0x1F6B5, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman mountain biking: light skin tone"]={ 0x1F6B5, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman mountain biking: medium skin tone"]={ 0x1F6B5, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman mountain biking: medium-dark skin tone"]={ 0x1F6B5, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman mountain biking: medium-light skin tone"]={ 0x1F6B5, 0x1F3FC, 0x200D, 0x2640 },
+ ["woman office worker"]={ 0x1F469, 0x200D, 0x1F4BC },
+ ["woman office worker: dark skin tone"]={ 0x1F469, 0x1F3FF, 0x200D, 0x1F4BC },
+ ["woman office worker: light skin tone"]={ 0x1F469, 0x1F3FB, 0x200D, 0x1F4BC },
+ ["woman office worker: medium skin tone"]={ 0x1F469, 0x1F3FD, 0x200D, 0x1F4BC },
+ ["woman office worker: medium-dark skin tone"]={ 0x1F469, 0x1F3FE, 0x200D, 0x1F4BC },
+ ["woman office worker: medium-light skin tone"]={ 0x1F469, 0x1F3FC, 0x200D, 0x1F4BC },
+ ["woman pilot"]={ 0x1F469, 0x200D, 0x2708 },
+ ["woman pilot: dark skin tone"]={ 0x1F469, 0x1F3FF, 0x200D, 0x2708 },
+ ["woman pilot: light skin tone"]={ 0x1F469, 0x1F3FB, 0x200D, 0x2708 },
+ ["woman pilot: medium skin tone"]={ 0x1F469, 0x1F3FD, 0x200D, 0x2708 },
+ ["woman pilot: medium-dark skin tone"]={ 0x1F469, 0x1F3FE, 0x200D, 0x2708 },
+ ["woman pilot: medium-light skin tone"]={ 0x1F469, 0x1F3FC, 0x200D, 0x2708 },
+ ["woman playing handball"]={ 0x1F93E, 0x200D, 0x2640 },
+ ["woman playing handball: dark skin tone"]={ 0x1F93E, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman playing handball: light skin tone"]={ 0x1F93E, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman playing handball: medium skin tone"]={ 0x1F93E, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman playing handball: medium-dark skin tone"]={ 0x1F93E, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman playing handball: medium-light skin tone"]={ 0x1F93E, 0x1F3FC, 0x200D, 0x2640 },
+ ["woman playing water polo"]={ 0x1F93D, 0x200D, 0x2640 },
+ ["woman playing water polo: dark skin tone"]={ 0x1F93D, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman playing water polo: light skin tone"]={ 0x1F93D, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman playing water polo: medium skin tone"]={ 0x1F93D, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman playing water polo: medium-dark skin tone"]={ 0x1F93D, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman playing water polo: medium-light skin tone"]={ 0x1F93D, 0x1F3FC, 0x200D, 0x2640 },
+ ["woman police officer"]={ 0x1F46E, 0x200D, 0x2640 },
+ ["woman police officer: dark skin tone"]={ 0x1F46E, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman police officer: light skin tone"]={ 0x1F46E, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman police officer: medium skin tone"]={ 0x1F46E, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman police officer: medium-dark skin tone"]={ 0x1F46E, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman police officer: medium-light skin tone"]={ 0x1F46E, 0x1F3FC, 0x200D, 0x2640 },
+ ["woman pouting"]={ 0x1F64E, 0x200D, 0x2640 },
+ ["woman pouting: dark skin tone"]={ 0x1F64E, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman pouting: light skin tone"]={ 0x1F64E, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman pouting: medium skin tone"]={ 0x1F64E, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman pouting: medium-dark skin tone"]={ 0x1F64E, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman pouting: medium-light skin tone"]={ 0x1F64E, 0x1F3FC, 0x200D, 0x2640 },
+ ["woman raising hand"]={ 0x1F64B, 0x200D, 0x2640 },
+ ["woman raising hand: dark skin tone"]={ 0x1F64B, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman raising hand: light skin tone"]={ 0x1F64B, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman raising hand: medium skin tone"]={ 0x1F64B, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman raising hand: medium-dark skin tone"]={ 0x1F64B, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman raising hand: medium-light skin tone"]={ 0x1F64B, 0x1F3FC, 0x200D, 0x2640 },
+ ["woman rowing boat"]={ 0x1F6A3, 0x200D, 0x2640 },
+ ["woman rowing boat: dark skin tone"]={ 0x1F6A3, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman rowing boat: light skin tone"]={ 0x1F6A3, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman rowing boat: medium skin tone"]={ 0x1F6A3, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman rowing boat: medium-dark skin tone"]={ 0x1F6A3, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman rowing boat: medium-light skin tone"]={ 0x1F6A3, 0x1F3FC, 0x200D, 0x2640 },
+ ["woman running"]={ 0x1F3C3, 0x200D, 0x2640 },
+ ["woman running: dark skin tone"]={ 0x1F3C3, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman running: light skin tone"]={ 0x1F3C3, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman running: medium skin tone"]={ 0x1F3C3, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman running: medium-dark skin tone"]={ 0x1F3C3, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman running: medium-light skin tone"]={ 0x1F3C3, 0x1F3FC, 0x200D, 0x2640 },
+ ["woman scientist"]={ 0x1F469, 0x200D, 0x1F52C },
+ ["woman scientist: dark skin tone"]={ 0x1F469, 0x1F3FF, 0x200D, 0x1F52C },
+ ["woman scientist: light skin tone"]={ 0x1F469, 0x1F3FB, 0x200D, 0x1F52C },
+ ["woman scientist: medium skin tone"]={ 0x1F469, 0x1F3FD, 0x200D, 0x1F52C },
+ ["woman scientist: medium-dark skin tone"]={ 0x1F469, 0x1F3FE, 0x200D, 0x1F52C },
+ ["woman scientist: medium-light skin tone"]={ 0x1F469, 0x1F3FC, 0x200D, 0x1F52C },
+ ["woman shrugging"]={ 0x1F937, 0x200D, 0x2640 },
+ ["woman shrugging: dark skin tone"]={ 0x1F937, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman shrugging: light skin tone"]={ 0x1F937, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman shrugging: medium skin tone"]={ 0x1F937, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman shrugging: medium-dark skin tone"]={ 0x1F937, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman shrugging: medium-light skin tone"]={ 0x1F937, 0x1F3FC, 0x200D, 0x2640 },
+ ["woman singer"]={ 0x1F469, 0x200D, 0x1F3A4 },
+ ["woman singer: dark skin tone"]={ 0x1F469, 0x1F3FF, 0x200D, 0x1F3A4 },
+ ["woman singer: light skin tone"]={ 0x1F469, 0x1F3FB, 0x200D, 0x1F3A4 },
+ ["woman singer: medium skin tone"]={ 0x1F469, 0x1F3FD, 0x200D, 0x1F3A4 },
+ ["woman singer: medium-dark skin tone"]={ 0x1F469, 0x1F3FE, 0x200D, 0x1F3A4 },
+ ["woman singer: medium-light skin tone"]={ 0x1F469, 0x1F3FC, 0x200D, 0x1F3A4 },
+ ["woman student"]={ 0x1F469, 0x200D, 0x1F393 },
+ ["woman student: dark skin tone"]={ 0x1F469, 0x1F3FF, 0x200D, 0x1F393 },
+ ["woman student: light skin tone"]={ 0x1F469, 0x1F3FB, 0x200D, 0x1F393 },
+ ["woman student: medium skin tone"]={ 0x1F469, 0x1F3FD, 0x200D, 0x1F393 },
+ ["woman student: medium-dark skin tone"]={ 0x1F469, 0x1F3FE, 0x200D, 0x1F393 },
+ ["woman student: medium-light skin tone"]={ 0x1F469, 0x1F3FC, 0x200D, 0x1F393 },
+ ["woman surfing"]={ 0x1F3C4, 0x200D, 0x2640 },
+ ["woman surfing: dark skin tone"]={ 0x1F3C4, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman surfing: light skin tone"]={ 0x1F3C4, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman surfing: medium skin tone"]={ 0x1F3C4, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman surfing: medium-dark skin tone"]={ 0x1F3C4, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman surfing: medium-light skin tone"]={ 0x1F3C4, 0x1F3FC, 0x200D, 0x2640 },
+ ["woman swimming"]={ 0x1F3CA, 0x200D, 0x2640 },
+ ["woman swimming: dark skin tone"]={ 0x1F3CA, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman swimming: light skin tone"]={ 0x1F3CA, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman swimming: medium skin tone"]={ 0x1F3CA, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman swimming: medium-dark skin tone"]={ 0x1F3CA, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman swimming: medium-light skin tone"]={ 0x1F3CA, 0x1F3FC, 0x200D, 0x2640 },
+ ["woman teacher"]={ 0x1F469, 0x200D, 0x1F3EB },
+ ["woman teacher: dark skin tone"]={ 0x1F469, 0x1F3FF, 0x200D, 0x1F3EB },
+ ["woman teacher: light skin tone"]={ 0x1F469, 0x1F3FB, 0x200D, 0x1F3EB },
+ ["woman teacher: medium skin tone"]={ 0x1F469, 0x1F3FD, 0x200D, 0x1F3EB },
+ ["woman teacher: medium-dark skin tone"]={ 0x1F469, 0x1F3FE, 0x200D, 0x1F3EB },
+ ["woman teacher: medium-light skin tone"]={ 0x1F469, 0x1F3FC, 0x200D, 0x1F3EB },
+ ["woman technologist"]={ 0x1F469, 0x200D, 0x1F4BB },
+ ["woman technologist: dark skin tone"]={ 0x1F469, 0x1F3FF, 0x200D, 0x1F4BB },
+ ["woman technologist: light skin tone"]={ 0x1F469, 0x1F3FB, 0x200D, 0x1F4BB },
+ ["woman technologist: medium skin tone"]={ 0x1F469, 0x1F3FD, 0x200D, 0x1F4BB },
+ ["woman technologist: medium-dark skin tone"]={ 0x1F469, 0x1F3FE, 0x200D, 0x1F4BB },
+ ["woman technologist: medium-light skin tone"]={ 0x1F469, 0x1F3FC, 0x200D, 0x1F4BB },
+ ["woman tipping hand"]={ 0x1F481, 0x200D, 0x2640 },
+ ["woman tipping hand: dark skin tone"]={ 0x1F481, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman tipping hand: light skin tone"]={ 0x1F481, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman tipping hand: medium skin tone"]={ 0x1F481, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman tipping hand: medium-dark skin tone"]={ 0x1F481, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman tipping hand: medium-light skin tone"]={ 0x1F481, 0x1F3FC, 0x200D, 0x2640 },
+ ["woman vampire"]={ 0x1F9DB, 0x200D, 0x2640 },
+ ["woman vampire: dark skin tone"]={ 0x1F9DB, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman vampire: light skin tone"]={ 0x1F9DB, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman vampire: medium skin tone"]={ 0x1F9DB, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman vampire: medium-dark skin tone"]={ 0x1F9DB, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman vampire: medium-light skin tone"]={ 0x1F9DB, 0x1F3FC, 0x200D, 0x2640 },
+ ["woman walking"]={ 0x1F6B6, 0x200D, 0x2640 },
+ ["woman walking: dark skin tone"]={ 0x1F6B6, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman walking: light skin tone"]={ 0x1F6B6, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman walking: medium skin tone"]={ 0x1F6B6, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman walking: medium-dark skin tone"]={ 0x1F6B6, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman walking: medium-light skin tone"]={ 0x1F6B6, 0x1F3FC, 0x200D, 0x2640 },
+ ["woman wearing turban"]={ 0x1F473, 0x200D, 0x2640 },
+ ["woman wearing turban: dark skin tone"]={ 0x1F473, 0x1F3FF, 0x200D, 0x2640 },
+ ["woman wearing turban: light skin tone"]={ 0x1F473, 0x1F3FB, 0x200D, 0x2640 },
+ ["woman wearing turban: medium skin tone"]={ 0x1F473, 0x1F3FD, 0x200D, 0x2640 },
+ ["woman wearing turban: medium-dark skin tone"]={ 0x1F473, 0x1F3FE, 0x200D, 0x2640 },
+ ["woman wearing turban: medium-light skin tone"]={ 0x1F473, 0x1F3FC, 0x200D, 0x2640 },
+ ["woman with headscarf"]={ 0x1F9D5 },
+ ["woman with headscarf: dark skin tone"]={ 0x1F9D5, 0x1F3FF },
+ ["woman with headscarf: light skin tone"]={ 0x1F9D5, 0x1F3FB },
+ ["woman with headscarf: medium skin tone"]={ 0x1F9D5, 0x1F3FD },
+ ["woman with headscarf: medium-dark skin tone"]={ 0x1F9D5, 0x1F3FE },
+ ["woman with headscarf: medium-light skin tone"]={ 0x1F9D5, 0x1F3FC },
+ ["woman zombie"]={ 0x1F9DF, 0x200D, 0x2640 },
+ ["woman: dark skin tone"]={ 0x1F469, 0x1F3FF },
+ ["woman: light skin tone"]={ 0x1F469, 0x1F3FB },
+ ["woman: medium skin tone"]={ 0x1F469, 0x1F3FD },
+ ["woman: medium-dark skin tone"]={ 0x1F469, 0x1F3FE },
+ ["woman: medium-light skin tone"]={ 0x1F469, 0x1F3FC },
+ ["woman’s boot"]={ 0x1F462 },
+ ["woman’s clothes"]={ 0x1F45A },
+ ["woman’s hat"]={ 0x1F452 },
+ ["woman’s sandal"]={ 0x1F461 },
+ ["women with bunny ears partying"]={ 0x1F46F, 0x200D, 0x2640 },
+ ["women wrestling"]={ 0x1F93C, 0x200D, 0x2640 },
+ ["women’s room"]={ 0x1F6BA },
+ ["world map"]={ 0x1F5FA },
+ ["worried face"]={ 0x1F61F },
+ ["wrapped gift"]={ 0x1F381 },
+ ["wrench"]={ 0x1F527 },
+ ["writing hand"]={ 0x270D },
+ ["writing hand: dark skin tone"]={ 0x270D, 0x1F3FF },
+ ["writing hand: light skin tone"]={ 0x270D, 0x1F3FB },
+ ["writing hand: medium skin tone"]={ 0x270D, 0x1F3FD },
+ ["writing hand: medium-dark skin tone"]={ 0x270D, 0x1F3FE },
+ ["writing hand: medium-light skin tone"]={ 0x270D, 0x1F3FC },
+ ["yellow heart"]={ 0x1F49B },
+ ["yemen"]={ 0x1F1FE, 0x1F1EA },
+ ["yen banknote"]={ 0x1F4B4 },
+ ["yin yang"]={ 0x262F },
+ ["zambia"]={ 0x1F1FF, 0x1F1F2 },
+ ["zebra"]={ 0x1F993 },
+ ["zimbabwe"]={ 0x1F1FF, 0x1F1FC },
+ ["zipper-mouth face"]={ 0x1F910 },
+ ["zombie"]={ 0x1F9DF },
+ ["zzz"]={ 0x1F4A4 },
+ ["Åland islands"]={ 0x1F1E6, 0x1F1FD },
+}
diff --git a/tex/context/base/mkiv/char-enc.lua b/tex/context/base/mkiv/char-enc.lua
index c2061891a..f4f9fb95a 100644
--- a/tex/context/base/mkiv/char-enc.lua
+++ b/tex/context/base/mkiv/char-enc.lua
@@ -162,7 +162,6 @@ characters.synonyms = allocate { -- afm mess
-- if not enccodes[name] then enccodes[name] = unicode end
-- end
--
---
-- end
--
-- storage.register("characters.enccodes", characters.enccodes, "characters.enccodes")
diff --git a/tex/context/base/mkiv/char-fio.lua b/tex/context/base/mkiv/char-fio.lua
index ab2555935..fa69d9356 100644
--- a/tex/context/base/mkiv/char-fio.lua
+++ b/tex/context/base/mkiv/char-fio.lua
@@ -42,18 +42,19 @@ local reporting = "no"
-- per line by default
local enforced = {
- ["characters.filters.utf.reorder"] = true,
["characters.filters.utf.collapse"] = true,
["characters.filters.utf.decompose"] = true,
+ ["characters.filters.utf.reorder"] = false,
}
function utffilters.enable()
+ -- only used one time (normally)
for k, v in next, enforced do
if v then
if reporting == "yes" then
report("%a enabled",k)
end
- enableaction(textfileactions,v)
+ enableaction(textfileactions,k)
else
if reporting == "yes" then
report("%a not enabled",k)
diff --git a/tex/context/base/mkiv/char-ini.lua b/tex/context/base/mkiv/char-ini.lua
index 63328a177..8fe852b58 100644
--- a/tex/context/base/mkiv/char-ini.lua
+++ b/tex/context/base/mkiv/char-ini.lua
@@ -14,8 +14,9 @@ if not modules then modules = { } end modules ['char-ini'] = {
local utfchar, utfbyte, utfvalues, ustring, utotable = utf.char, utf.byte, utf.values, utf.ustring, utf.totable
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
+local format, lower, gsub, find, match = string.format, string.lower, string.gsub, string.find, string.match
+local P, R, S, C, Cs, Ct, Cc, V = lpeg.P, lpeg.R, lpeg.S, lpeg.C, lpeg.Cs, lpeg.Ct, lpeg.Cc, lpeg.V
+local formatters = string.formatters
if not characters then require("char-def") end
@@ -178,6 +179,7 @@ insert(characters.ranges,{
})
local blocks = allocate {
+ ["adlam"] = { first = 0x1E900, last = 0x1E95F, description = "Adlam" },
["aegeannumbers"] = { first = 0x10100, last = 0x1013F, description = "Aegean Numbers" },
["ahom"] = { first = 0x11700, last = 0x1173F, description = "Ahom" },
["alchemicalsymbols"] = { first = 0x1F700, last = 0x1F77F, description = "Alchemical Symbols" },
@@ -202,6 +204,7 @@ local blocks = allocate {
["bassavah"] = { first = 0x16AD0, last = 0x16AFF, description = "Bassa Vah" },
["batak"] = { first = 0x01BC0, last = 0x01BFF, description = "Batak" },
["bengali"] = { first = 0x00980, last = 0x009FF, otf="beng", description = "Bengali" },
+ ["bhaiksuki"] = { first = 0x11C00, last = 0x11C6F, description = "Bhaiksuki" },
["blockelements"] = { first = 0x02580, last = 0x0259F, otf="bopo", description = "Block Elements" },
["bopomofo"] = { first = 0x03100, last = 0x0312F, otf="bopo", description = "Bopomofo" },
["bopomofoextended"] = { first = 0x031A0, last = 0x031BF, otf="bopo", description = "Bopomofo Extended" },
@@ -247,6 +250,7 @@ local blocks = allocate {
["cyrillic"] = { first = 0x00400, last = 0x004FF, otf="cyrl", description = "Cyrillic" },
["cyrillicextendeda"] = { first = 0x02DE0, last = 0x02DFF, otf="cyrl", description = "Cyrillic Extended-A" },
["cyrillicextendedb"] = { first = 0x0A640, last = 0x0A69F, otf="cyrl", description = "Cyrillic Extended-B" },
+ ["cyrillicextendedc"] = { first = 0x01C80, last = 0x01C8F, description = "Cyrillic Extended-C" },
["cyrillicsupplement"] = { first = 0x00500, last = 0x0052F, otf="cyrl", description = "Cyrillic Supplement" },
["deseret"] = { first = 0x10400, last = 0x1044F, otf="dsrt", description = "Deseret" },
["devanagari"] = { first = 0x00900, last = 0x0097F, otf="deva", description = "Devanagari" },
@@ -297,6 +301,7 @@ local blocks = allocate {
["georgian"] = { first = 0x010A0, last = 0x010FF, otf="geor", description = "Georgian" },
["georgiansupplement"] = { first = 0x02D00, last = 0x02D2F, otf="geor", description = "Georgian Supplement" },
["glagolitic"] = { first = 0x02C00, last = 0x02C5F, otf="glag", description = "Glagolitic" },
+ ["glagoliticsupplement"] = { first = 0x1E000, last = 0x1E02F, description = "Glagolitic Supplement" },
["gothic"] = { first = 0x10330, last = 0x1034F, otf="goth", description = "Gothic" },
["grantha"] = { first = 0x11300, last = 0x1137F, description = "Grantha" },
["greekandcoptic"] = { first = 0x00370, last = 0x003FF, otf="grek", description = "Greek and Coptic" },
@@ -316,6 +321,7 @@ local blocks = allocate {
["highsurrogates"] = { first = 0x0D800, last = 0x0DB7F, description = "High Surrogates" },
["hiragana"] = { first = 0x03040, last = 0x0309F, otf="kana", description = "Hiragana" },
["ideographicdescriptioncharacters"] = { first = 0x02FF0, last = 0x02FFF, description = "Ideographic Description Characters" },
+ ["ideographicsymbolsandpunctuation"] = { first = 0x16FE0, last = 0x16FFF, description = "Ideographic Symbols and Punctuation" },
["imperialaramaic"] = { first = 0x10840, last = 0x1085F, description = "Imperial Aramaic" },
["inscriptionalpahlavi"] = { first = 0x10B60, last = 0x10B7F, description = "Inscriptional Pahlavi" },
["inscriptionalparthian"] = { first = 0x10B40, last = 0x10B5F, description = "Inscriptional Parthian" },
@@ -377,6 +383,7 @@ local blocks = allocate {
["malayalam"] = { first = 0x00D00, last = 0x00D7F, otf="mlym", description = "Malayalam" },
["mandaic"] = { first = 0x00840, last = 0x0085F, otf="mand", description = "Mandaic" },
["manichaean"] = { first = 0x10AC0, last = 0x10AFF, description = "Manichaean" },
+ ["marchen"] = { first = 0x11C70, last = 0x11CBF, description = "Marchen" },
["mathematicalalphanumericsymbols"] = { first = 0x1D400, last = 0x1D7FF, math = true, description = "Mathematical Alphanumeric Symbols" },
["mathematicaloperators"] = { first = 0x02200, last = 0x022FF, math = true, description = "Mathematical Operators" },
["meeteimayek"] = { first = 0x0ABC0, last = 0x0ABFF, description = "Meetei Mayek" },
@@ -394,6 +401,7 @@ local blocks = allocate {
["modi"] = { first = 0x11600, last = 0x1165F, description = "Modi" },
["modifiertoneletters"] = { first = 0x0A700, last = 0x0A71F, description = "Modifier Tone Letters" },
["mongolian"] = { first = 0x01800, last = 0x018AF, otf="mong", description = "Mongolian" },
+ ["mongoliansupplement"] = { first = 0x11660, last = 0x1167F, description = "Mongolian Supplement" },
["mro"] = { first = 0x16A40, last = 0x16A6F, description = "Mro" },
["multani"] = { first = 0x11280, last = 0x112AF, description = "Multani" },
["musicalsymbols"] = { first = 0x1D100, last = 0x1D1FF, otf="musc", description = "Musical Symbols" },
@@ -401,6 +409,7 @@ local blocks = allocate {
["myanmarextendeda"] = { first = 0x0AA60, last = 0x0AA7F, description = "Myanmar Extended-A" },
["myanmarextendedb"] = { first = 0x0A9E0, last = 0x0A9FF, description = "Myanmar Extended-B" },
["nabataean"] = { first = 0x10880, last = 0x108AF, description = "Nabataean" },
+ ["newa"] = { first = 0x11400, last = 0x1147F, description = "Newa" },
["newtailue"] = { first = 0x01980, last = 0x019DF, description = "New Tai Lue" },
["nko"] = { first = 0x007C0, last = 0x007FF, otf="nko", description = "NKo" },
["numberforms"] = { first = 0x02150, last = 0x0218F, description = "Number Forms" },
@@ -416,6 +425,7 @@ local blocks = allocate {
["opticalcharacterrecognition"] = { first = 0x02440, last = 0x0245F, description = "Optical Character Recognition" },
["oriya"] = { first = 0x00B00, last = 0x00B7F, otf="orya", description = "Oriya" },
["ornamentaldingbats"] = { first = 0x1F650, last = 0x1F67F, description = "Ornamental Dingbats" },
+ ["osage"] = { first = 0x104B0, last = 0x104FF, description = "Osage" },
["osmanya"] = { first = 0x10480, last = 0x104AF, otf="osma", description = "Osmanya" },
["pahawhhmong"] = { first = 0x16B00, last = 0x16B8F, description = "Pahawh Hmong" },
["palmyrene"] = { first = 0x10860, last = 0x1087F, description = "Palmyrene" },
@@ -466,6 +476,8 @@ local blocks = allocate {
["taixuanjingsymbols"] = { first = 0x1D300, last = 0x1D35F, description = "Tai Xuan Jing Symbols" },
["takri"] = { first = 0x11680, last = 0x116CF, description = "Takri" },
["tamil"] = { first = 0x00B80, last = 0x00BFF, otf="taml", description = "Tamil" },
+ ["tangut"] = { first = 0x17000, last = 0x187FF, description = "Tangut" },
+ ["tangutcomponents"] = { first = 0x18800, last = 0x18AFF, description = "Tangut Components" },
["telugu"] = { first = 0x00C00, last = 0x00C7F, otf="telu", description = "Telugu" },
["thaana"] = { first = 0x00780, last = 0x007BF, otf="thaa", description = "Thaana" },
["thai"] = { first = 0x00E00, last = 0x00E7F, otf="thai", description = "Thai" },
@@ -541,15 +553,34 @@ setmetatableindex(otfscripts,function(t,unicode)
return "dflt"
end)
-local splitter = lpeg.splitat(S(":-"))
+local splitter1 = lpeg.splitat(S(":-"))
+local splitter2 = lpeg.splitat(S(" +-"),true)
-function characters.getrange(name) -- used in font fallback definitions (name or range)
- local range = blocks[name]
+function characters.getrange(name,expression) -- used in font fallback definitions (name or range)
+ local range = rawget(blocks,lower(gsub(name,"[^a-zA-Z0-9]","")))
if range then
return range.first, range.last, range.description, range.gaps
end
name = gsub(name,'"',"0x") -- goodie: tex hex notation
- local start, stop = lpegmatch(splitter,name)
+ local start, stop
+ if expression then
+ local first, rest = lpegmatch(splitter2,name)
+ local range = rawget(blocks,lower(gsub(first,"[^a-zA-Z0-9]","")))
+ if range then
+ start = range.first
+ stop = range.last
+ local s = loadstring("return 0 " .. rest)
+ if type(s) == "function" then
+ local d = s()
+ if type(d) == "number" then
+ start = start + d
+ stop = stop + d
+ return start, stop, nil
+ end
+ end
+ end
+ end
+ start, stop = lpegmatch(splitter1,name)
if start and stop then
start, stop = tonumber(start,16) or tonumber(start), tonumber(stop,16) or tonumber(stop)
if start and stop then
@@ -560,6 +591,9 @@ function characters.getrange(name) -- used in font fallback definitions (name or
return slot, slot, nil
end
+-- print(characters.getrange("lowercaseitalic + 123",true))
+-- print(characters.getrange("lowercaseitalic + 124",true))
+
local categorytags = allocate {
lu = "Letter Uppercase",
ll = "Letter Lowercase",
@@ -674,16 +708,17 @@ characters.linebreaks = {
-- non-tailorable line breaking classes
- ["bk"] = "mandatory break", -- nl, ps : cause a line break (after)
- ["cr"] = "carriage return", -- cr : cause a line break (after), except between cr and lf
- ["lf"] = "line feed", -- lf : cause a line break (after)
- ["cm"] = "combining mark", -- combining marks, control codes : prohibit a line break between the character and the preceding character
- ["nl"] = "next line", -- nel : cause a line break (after)
- ["sg"] = "surrogate", -- surrogates :do not occur in well-formed text
- ["wj"] = "word joiner", -- wj : prohibit line breaks before and after
- ["zw"] = "zero width space", -- zwsp : provide a break opportunity
- ["gl"] = "non-breaking (glue)", -- cgj, nbsp, zwnbsp : prohibit line breaks before and after
- ["sp"] = "space", -- space : enable indirect line breaks
+ ["bk"] = "mandatory break", -- nl, ps : cause a line break (after)
+ ["cr"] = "carriage return", -- cr : cause a line break (after), except between cr and lf
+ ["lf"] = "line feed", -- lf : cause a line break (after)
+ ["cm"] = "combining mark", -- combining marks, control codes : prohibit a line break between the character and the preceding character
+ ["nl"] = "next line", -- nel : cause a line break (after)
+ ["sg"] = "surrogate", -- surrogates :do not occur in well-formed text
+ ["wj"] = "word joiner", -- wj : prohibit line breaks before and after
+ ["zw"] = "zero width space", -- zwsp : provide a break opportunity
+ ["gl"] = "non-breaking (glue)", -- cgj, nbsp, zwnbsp : prohibit line breaks before and after
+ ["sp"] = "space", -- space : enable indirect line breaks
+ ["zwj"] = "zero width joiner", -- prohibit line breaks within joiner sequences
-- break opportunities
@@ -716,6 +751,8 @@ characters.linebreaks = {
["ai"] = "ambiguous (alphabetic or ideographic)", -- characters with ambiguous east asian width : act like al when the resolved eaw is n; otherwise, act as id
["al"] = "alphabetic", -- alphabets and regular symbols : are alphabetic characters or symbols that are used with alphabetic characters
["cj"] = "conditional japanese starter", -- small kana : treat as ns or id for strict or normal breaking.
+ ["eb"] = "emoji base", -- all emoji allowing modifiers, do not break from following emoji modifier
+ ["em"] = "emoji modifier", -- skin tone modifiers, do not break from preceding emoji base
["h2"] = "hangul lv syllable", -- hangul : form korean syllable blocks
["h3"] = "hangul lvt syllable", -- hangul : form korean syllable blocks
["hl"] = "hebrew letter", -- hebrew : do not break around a following hyphen; otherwise act as alphabetic
@@ -802,7 +839,7 @@ setmetatableindex(characters.directions,function(t,k)
end
end
t[k] = false -- maybe 'l'
- return v
+ return false
end)
characters.mirrors = { }
@@ -817,7 +854,7 @@ setmetatableindex(characters.mirrors,function(t,k)
end
end
t[k] = false
- return v
+ return false
end)
characters.textclasses = { }
@@ -832,7 +869,7 @@ setmetatableindex(characters.textclasses,function(t,k)
end
end
t[k] = false
- return v
+ return false
end)
--[[ldx--
@@ -928,6 +965,7 @@ end)
local specialchars = allocate() characters.specialchars = specialchars -- lazy table
local descriptions = allocate() characters.descriptions = descriptions -- lazy table
+local synonyms = allocate() characters.synonyms = synonyms -- lazy table
setmetatableindex(specialchars, function(t,u)
if u then
@@ -961,7 +999,9 @@ setmetatableindex(descriptions, function(t,k)
for u, c in next, data do
local d = c.description
if d then
- d = gsub(d," ","")
+ if find(d," ") then
+ d = gsub(d," ","")
+ end
d = lower(d)
t[d] = u
end
@@ -973,6 +1013,24 @@ setmetatableindex(descriptions, function(t,k)
return d
end)
+setmetatableindex(synonyms, function(t,k)
+ for u, c in next, data do
+ local s = c.synonyms
+ if s then
+ if find(s," ") then
+ s = gsub(s," ","")
+ end
+ -- s = lower(s) -- is already lowercase
+ t[s] = u
+ end
+ end
+ local s = rawget(t,k)
+ if not s then
+ t[s] = s
+ end
+ return s
+end)
+
function characters.unicodechar(asked)
local n = tonumber(asked)
if n then
@@ -1352,6 +1410,184 @@ function characters.showstring(str)
end
end
+do
+
+ -- There is no need to preload this table.
+
+ local any = P(1)
+ local special = S([['".,:;-+()]])
+ + P('“') + P('”')
+ local apostrofe = P("’") + P("'")
+
+ local pattern = Cs ( (
+ (P("medium light") / "medium-light" + P("medium dark") / "medium-dark") * P(" skin tone")
+ + (apostrofe * P("s"))/""
+ + special/""
+ + any
+ )^1)
+
+ local function load()
+ local name = resolvers.find_file("char-emj.lua")
+ local data = name and name ~= "" and dofile(name) or { }
+ local hash = { }
+ for d, c in next, data do
+ local k = lpegmatch(pattern,d) or d
+ local u = { }
+ for i=1,#c do
+ u[i] = utfchar(c[i])
+ end
+ u = concat(u)
+ hash[k] = u
+ end
+ return data, hash
+ end
+
+ local data, hash = nil, nil
+
+ function characters.emojized(name)
+ local t = lpegmatch(pattern,name)
+ if t then
+ return t
+ else
+ return { name }
+ end
+ end
+
+ local start = P(" ")
+ local finish = P(-1) + P(" ")
+ local skintone = P("medium ")^0 * (P("light ") + P("dark "))^0 * P("skin tone")
+ local gender = P("woman") + P("man")
+ local expanded = (
+ P("m-l-")/"medium-light"
+ + P("m-d-")/"medium-dark"
+ + P("l-") /"light"
+ + P("m-") /"medium"
+ + P("d-") /"dark"
+ )
+ * (P("s-t")/" skin tone")
+ local compacted = (
+ (P("medium-")/"m-" * (P("light")/"l" + P("dark")/"d"))
+ + (P("medium")/"m" + P("light")/"l" + P("dark")/"d")
+ )
+ * (P(" skin tone")/"-s-t")
+
+ local pattern_0 = Cs((expanded + any)^1)
+ local pattern_1 = Cs(((start * skintone + skintone * finish)/"" + any)^1)
+ local pattern_2 = Cs(((start * gender + gender * finish)/"" + any)^1)
+ local pattern_4 = Cs((compacted + any)^1)
+
+ -- print(lpegmatch(pattern_0,"kiss woman l-s-t man d-s-t"))
+ -- print(lpegmatch(pattern_0,"something m-l-s-t"))
+ -- print(lpegmatch(pattern_0,"something m-s-t"))
+ -- print(lpegmatch(pattern_4,"something medium-light skin tone"))
+ -- print(lpegmatch(pattern_4,"something medium skin tone"))
+
+ local skin =
+ P("light skin tone") / utfchar(0x1F3FB)
+ + P("medium-light skin tone") / utfchar(0x1F3FC)
+ + P("medium skin tone") / utfchar(0x1F3FD)
+ + P("medium-dark skin tone") / utfchar(0x1F3FE)
+ + P("dark skin tone") / utfchar(0x1F3FF)
+
+ local parent =
+ P("man") / utfchar(0x1F468)
+ + P("woman") / utfchar(0x1F469)
+
+ local child =
+ P("baby") / utfchar(0x1F476)
+ + P("boy") / utfchar(0x1F466)
+ + P("girl") / utfchar(0x1F467)
+
+ local zwj = utfchar(0x200D)
+ local heart = utfchar(0x2764) .. utfchar(0xFE0F) .. zwj
+ local kiss = utfchar(0x2764) .. utfchar(0xFE0F) .. utfchar(0x200D) .. utfchar(0x1F48B) .. zwj
+
+ ----- member = parent + child
+
+ local space = P(" ")
+ local final = P(-1)
+
+ local p_done = (space^1/zwj) + P(-1)
+ local p_rest = space/"" * (skin * p_done) + p_done
+ local p_parent = parent * p_rest
+ local p_child = child * p_rest
+
+ local p_family = Cs ( (P("family") * space^1)/"" * p_parent^-2 * p_child^-2 )
+ local p_couple = Cs ( (P("couple with heart") * space^1)/"" * p_parent * Cc(heart) * p_parent )
+ local p_kiss = Cs ( (P("kiss") * space^1)/"" * p_parent * Cc(kiss) * p_parent )
+
+ local p_special = p_family + p_couple + p_kiss
+
+ -- print(lpeg.match(p_special,"family man woman girl"))
+ -- print(lpeg.match(p_special,"family man dark skin tone woman girl girl"))
+
+ -- local p_special = P { "all",
+ -- all = Cs (V("family") + V("couple") + V("kiss")),
+ -- family = C("family") * space^1 * V("parent")^-2 * V("child")^-2,
+ -- couple = P("couple with heart") * space^1 * V("parent") * Cc(heart) * V("parent"),
+ -- kiss = P("kiss") * space^1 * V("parent") * Cc(kiss) * V("parent"),
+ -- parent = parent * V("rest"),
+ -- child = child * V("rest"),
+ -- rest = (space * skin)^0/"" * ((space^1/zwj) + P(-1)),
+ -- }
+
+ local emoji = { }
+ characters.emoji = emoji
+
+local cache = setmetatable({ }, { __mode = "k" } )
+
+ function emoji.resolve(name)
+ if not hash then
+ data, hash = load()
+ end
+ local h = hash[name]
+ if h then
+ return h
+ end
+local h = cache[name]
+if h then
+ return h
+elseif h == false then
+ return
+end
+ -- expand shortcuts
+ local name = lpegmatch(pattern_0,name) or name
+ -- expand some 25K variants
+ local h = lpegmatch(p_special,name)
+ if h then
+cache[name] = h
+ return h
+ end
+ -- simplify
+ local s = lpegmatch(pattern_1,name)
+ local h = hash[s]
+ if h then
+cache[name] = h
+ return h
+ end
+ -- simplify
+ local s = lpegmatch(pattern_2,name)
+ local h = hash[s]
+ if h then
+cache[name] = h
+ return h
+ end
+cache[name] = false
+ end
+
+ function emoji.known()
+ if not hash then
+ data, hash = load()
+ end
+ return hash, data
+ end
+
+ function emoji.compact(name)
+ return lpegmatch(pattern_4,name) or name
+ end
+
+end
+
-- code moved to char-tex.lua
return characters
diff --git a/tex/context/base/mkiv/char-obs.lua b/tex/context/base/mkiv/char-obs.lua
new file mode 100644
index 000000000..0f0e43d3c
--- /dev/null
+++ b/tex/context/base/mkiv/char-obs.lua
@@ -0,0 +1,269 @@
+------------------------
+----- char-ini.lua -----
+------------------------
+
+-- local template_a = "\\startextendcatcodetable{%s}\\chardef\\l=11\\chardef\\a=13\\let\\c\\catcode%s\\let\\a\\undefined\\let\\l\\undefined\\let\\c\\undefined\\stopextendcatcodetable"
+-- local template_b = "\\chardef\\l=11\\chardef\\a=13\\let\\c\\catcode%s\\let\\a\\undefined\\let\\l\\undefined\\let\\c\\undefined"
+--
+-- function characters.define(tobelettered, tobeactivated) -- catcodetables
+-- local lettered, activated, l, a = { }, { }, 0, 0
+-- for u, chr in next, data do
+-- -- we can use a macro instead of direct settings
+-- local fallback = chr.fallback
+-- if fallback then
+-- -- texprint(format("{\\catcode %s=13\\unexpanded\\gdef %s{\\checkedchar{%s}{%s}}}",u,utfchar(u),u,fallback))
+-- texsprint("{\\catcode",u,"=13\\unexpanded\\gdef ",utfchar(u),"{\\checkedchar{",u,"}{",fallback,"}}}") -- no texprint
+-- a = a + 1
+-- activated[a] = "\\c"..u.."\\a"
+-- else
+-- local contextname = chr.contextname
+-- local category = chr.category
+-- if contextname then
+-- if is_character[category] then
+-- -- by this time, we're still in normal catcode mode
+-- -- subtle: not "\\",contextname but "\\"..contextname
+-- if chr.unicodeslot < 128 then
+-- texprint(ctxcatcodes,format("\\chardef\\%s=%s",contextname,u))
+-- else
+-- texprint(ctxcatcodes,format("\\let\\%s=%s",contextname,utfchar(u)))
+-- if is_letter[category] then
+-- l = l + 1
+-- lettered[l] = "\\c"..u.."\\l"
+-- end
+-- end
+-- elseif is_command[category] then
+-- -- this might change: contextcommand ipv contextname
+-- -- texprint(format("{\\catcode %s=13\\unexpanded\\gdef %s{\\%s}}",u,utfchar(u),contextname))
+-- texsprint("{\\catcode",u,"=13\\unexpanded\\gdef ",utfchar(u),"{\\"..contextname,"}}") -- no texprint
+-- a = a + 1
+-- activated[a] = "\\c"..u.."\\a"
+-- end
+-- elseif is_letter[category] then
+-- if u >= 128 and u <= 65536 then -- catch private mess
+-- l = l + 1
+-- lettered[l] = "\\c"..u.."\\l"
+-- end
+-- end
+-- end
+-- local range = chr.range
+-- if range then
+-- l = l + 1
+-- lettered[l] = format('\\dofastrecurse{"%05X}{"%05X}{1}{\\c\\fastrecursecounter\\l}',range.first,range.last)
+-- end
+-- end
+-- -- if false then
+-- l = l + 1
+-- lettered[l] = "\\c"..0x200C.."\\l" -- non-joiner
+-- l = l + 1
+-- lettered[l] = "\\c"..0x200D.."\\l" -- joiner
+-- -- fi
+-- if tobelettered then
+-- lettered = concat(lettered)
+-- if true then
+-- texsprint(ctxcatcodes,format(template_b,lettered)) -- global
+-- else
+-- for l=1,#tobelettered do
+-- texsprint(ctxcatcodes,format(template_a,tobelettered[l],lettered))
+-- end
+-- end
+-- end
+-- if tobeactivated then
+-- activated = concat(activated)
+-- for a=1,#tobeactivated do
+-- texsprint(ctxcatcodes,format(template_a,tobeactivated[a],activated))
+-- end
+-- end
+-- end
+--
+-- function characters.setcodes()
+-- for code, chr in next, data do
+-- local cc = chr.category
+-- if cc == 'll' or cc == 'lu' or cc == 'lt' then
+-- local lc, uc = chr.lccode, chr.uccode
+-- if not lc then chr.lccode, lc = code, code end
+-- if not uc then chr.uccode, uc = code, code end
+-- texsprint(ctxcatcodes,format("\\setcclcuc{%i}{%i}{%i}",code,lc,uc))
+-- end
+-- if cc == "lu" then
+-- texprint(ctxcatcodes,"\\sfcode ",code,"999 ")
+-- end
+-- if cc == "lo" then
+-- local range = chr.range
+-- if range then
+-- texsprint(ctxcatcodes,format('\\dofastrecurse{"%05X}{"%05X}{1}{\\setcclcucself\\fastrecursecounter}',range.first,range.last))
+-- end
+-- end
+-- end
+-- end
+
+-- --[[ldx--
+-- <p>The next variant has lazy token collecting, on a 140 page mk.tex this saves
+-- about .25 seconds, which is understandable because we have no graphemes and
+-- not collecting tokens is not only faster but also saves garbage collecting.
+-- </p>
+-- --ldx]]--
+--
+-- function utffilters.collapse(str,filename) -- we can make high a seperate pass (never needed with collapse)
+-- if skippable[filesuffix(filename)] then
+-- return str
+-- -- elseif find(filename,"^virtual://") then
+-- -- return str
+-- -- else
+-- -- -- print("\n"..filename)
+-- end
+-- if str and str ~= "" then
+-- local nstr = #str
+-- if nstr > 1 then
+-- if initialize then -- saves a call
+-- initialize()
+-- end
+-- local tokens, t, first, done, n = { }, 0, false, false, 0
+-- for second in utfcharacters(str) do
+-- if done then
+-- if first then
+-- if second == " " then
+-- t = t + 1
+-- tokens[t] = first
+-- first = second
+-- else
+-- -- local crs = high[second]
+-- -- if crs then
+-- -- t = t + 1
+-- -- tokens[t] = first
+-- -- first = crs
+-- -- else
+-- local cgf = graphemes[first]
+-- if cgf and cgf[second] then
+-- first = cgf[second]
+-- else
+-- t = t + 1
+-- tokens[t] = first
+-- first = second
+-- end
+-- -- end
+-- end
+-- elseif second == " " then
+-- first = second
+-- else
+-- -- local crs = high[second]
+-- -- if crs then
+-- -- first = crs
+-- -- else
+-- first = second
+-- -- end
+-- end
+-- elseif second == " " then
+-- first = nil
+-- n = n + 1
+-- else
+-- -- local crs = high[second]
+-- -- if crs then
+-- -- for s in utfcharacters(str) do
+-- -- if n == 1 then
+-- -- break
+-- -- else
+-- -- t = t + 1
+-- -- tokens[t] = s
+-- -- n = n - 1
+-- -- end
+-- -- end
+-- -- if first then
+-- -- t = t + 1
+-- -- tokens[t] = first
+-- -- end
+-- -- first = crs
+-- -- done = true
+-- -- else
+-- local cgf = graphemes[first]
+-- if cgf and cgf[second] then
+-- for s in utfcharacters(str) do
+-- if n == 1 then
+-- break
+-- else
+-- t = t + 1
+-- tokens[t] = s
+-- n = n - 1
+-- end
+-- end
+-- first = cgf[second]
+-- done = true
+-- else
+-- first = second
+-- n = n + 1
+-- end
+-- -- end
+-- end
+-- end
+-- if done then
+-- if first then
+-- t = t + 1
+-- tokens[t] = first
+-- end
+-- return concat(tokens) -- seldom called
+-- end
+-- elseif nstr > 0 then
+-- return high[str] or str -- this will go from here
+-- end
+-- end
+-- return str
+-- end
+
+-- function utffilters.decompose(str)
+-- if str and str ~= "" then
+-- local nstr = #str
+-- if nstr > 1 then
+-- -- if initialize then -- saves a call
+-- -- initialize()
+-- -- end
+-- local tokens, t, done, n = { }, 0, false, 0
+-- for s in utfcharacters(str) do
+-- local dec = decomposed[s]
+-- if dec then
+-- if not done then
+-- if n > 0 then
+-- for s in utfcharacters(str) do
+-- if n == 0 then
+-- break
+-- else
+-- t = t + 1
+-- tokens[t] = s
+-- n = n - 1
+-- end
+-- end
+-- end
+-- done = true
+-- end
+-- t = t + 1
+-- tokens[t] = dec
+-- elseif done then
+-- t = t + 1
+-- tokens[t] = s
+-- else
+-- n = n + 1
+-- end
+-- end
+-- if done then
+-- return concat(tokens) -- seldom called
+-- end
+-- end
+-- end
+-- return str
+-- end
+
+-- local replacer = nil
+-- local finder = nil
+--
+-- function utffilters.decompose(str) -- 3 to 4 times faster than the above
+-- if not replacer then
+-- if initialize then
+-- initialize()
+-- end
+-- local tree = utfchartabletopattern(decomposed)
+-- finder = lpeg.finder(tree,false,true)
+-- replacer = lpeg.replacer(tree,decomposed,false,true)
+-- end
+-- if str and str ~= "" and #str > 1 and lpegmatch(finder,str) then
+-- return lpegmatch(replacer,str)
+-- end
+-- return str
+-- end
diff --git a/tex/context/base/mkiv/char-tex.lua b/tex/context/base/mkiv/char-tex.lua
index 60f324be2..3e0d02bc1 100644
--- a/tex/context/base/mkiv/char-tex.lua
+++ b/tex/context/base/mkiv/char-tex.lua
@@ -424,7 +424,6 @@ local implement = interfaces.implement
local tex = tex
local texsetlccode = tex.setlccode
-local texsetuccode = tex.setuccode
local texsetsfcode = tex.setsfcode
local texsetcatcode = tex.setcatcode
@@ -592,7 +591,8 @@ if not csletters then
elseif is_mark[category] then
texsetlccode(u,u,u) -- for hyphenation
end
- elseif isletter and u >= 32 and u <= 65536 then
+ -- elseif isletter and u >= 32 and u <= 65536 then
+ elseif isletter then
csletters[utfchar(u)] = u
--
local lc, uc = chr.lccode, chr.uccode
diff --git a/tex/context/base/mkiv/char-utf.lua b/tex/context/base/mkiv/char-utf.lua
index 327529c32..5702f2087 100644
--- a/tex/context/base/mkiv/char-utf.lua
+++ b/tex/context/base/mkiv/char-utf.lua
@@ -17,6 +17,9 @@ of output (for instance <l n='pdf'/>).</p>
<p>We implement these manipulations as filters. One can run multiple filters
over a string.</p>
+
+<p>The old code has now been moved to char-obs.lua which we keep around for
+educational purposes.</p>
--ldx]]--
local gsub, find = string.gsub, string.find
@@ -42,21 +45,6 @@ local charfromnumber = characters.fromnumber
characters = characters or { }
local characters = characters
-local graphemes = allocate()
-characters.graphemes = graphemes
-
-local collapsed = allocate()
-characters.collapsed = collapsed
-
-local combined = allocate()
-characters.combined = combined
-
-local decomposed = allocate()
-characters.decomposed = decomposed
-
-local mathpairs = allocate()
-characters.mathpairs = mathpairs
-
local filters = allocate()
characters.filters = filters
@@ -65,8 +53,6 @@ characters.filters.utf = utffilters
local data = characters.data
--- is characters.combined cached?
-
--[[ldx--
<p>It only makes sense to collapse at runtime, since we don't expect source code
to depend on collapsing.</p>
@@ -96,78 +82,20 @@ local decomposed = allocate {
characters.decomposed = decomposed
--- local function initialize() -- maybe only 'mn'
--- local data = characters.data
--- for unicode, v in next, data do
--- -- using vs and first testing for length is faster (.02->.01 s)
--- local vs = v.specials
--- if vs and #vs == 3 then
--- local vc = vs[1]
--- if vc == "char" then
--- local one, two = vs[2], vs[3]
--- if data[two].category == "mn" then
--- local cgf = combined[one]
--- if not cgf then
--- cgf = { [two] = unicode }
--- combined[one] = cgf
--- else
--- cgf[two] = unicode
--- end
--- end
--- local first, second, combination = utfchar(one), utfchar(two), utfchar(unicode)
--- local cgf = graphemes[first]
--- if not cgf then
--- cgf = { [second] = combination }
--- graphemes[first] = cgf
--- else
--- cgf[second] = combination
--- 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
--- end
--- -- elseif vc == "compat" then
--- -- else
--- -- local description = v.description
--- -- if find(description,"LIGATURE") then
--- -- if vs then
--- -- local t = { }
--- -- for i=2,#vs do
--- -- t[#t+1] = utfchar(vs[i])
--- -- end
--- -- decomposed[utfchar(unicode)] = concat(t)
--- -- else
--- -- local vs = v.shcode
--- -- if vs then
--- -- local t = { }
--- -- for i=1,#vs do
--- -- t[i] = utfchar(vs[i])
--- -- end
--- -- decomposed[utfchar(unicode)] = concat(t)
--- -- end
--- -- end
--- -- end
--- end
--- end
--- end
--- initialize = false
--- characters.initialize = function() end -- when used outside tex
--- end
+local graphemes = characters.graphemes
+local collapsed = characters.collapsed
+local mathpairs = characters.mathpairs
+
+if not graphemes then
+
+ graphemes = allocate()
+ collapsed = allocate()
+ mathpairs = allocate()
+
+ characters.graphemes = graphemes
+ characters.collapsed = collapsed
+ characters.mathpairs = mathpairs
-local function initialize() -- maybe in tex mode store in format !
- local data = characters.data
local function backtrack(v,last,target)
local vs = v.specials
if vs and #vs == 3 and vs[1] == "char" then
@@ -177,6 +105,7 @@ local function initialize() -- maybe in tex mode store in format !
backtrack(data[one],second,target)
end
end
+
local function setpair(one,two,unicode,first,second,combination)
local mps = mathpairs[one]
if not mps then
@@ -193,6 +122,7 @@ local function initialize() -- maybe in tex mode store in format !
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
@@ -222,18 +152,16 @@ local function initialize() -- maybe in tex mode store in format !
setpair(one,two,unicode,first,second,combination)
end
end
- initialize = false
- characters.initialize = function() end
-end
-characters.initialize = initialize
+ if storage then
+ storage.register("characters/graphemes", characters.graphemes, "characters.graphemes")
+ storage.register("characters/collapsed", characters.collapsed, "characters.collapsed")
+ storage.register("characters/mathpairs", characters.mathpairs, "characters.mathpairs")
+ end
---[[ldx--
-<p>The next variant has lazy token collecting, on a 140 page mk.tex this saves
-about .25 seconds, which is understandable because we have no graphemes and
-not collecting tokens is not only faster but also saves garbage collecting.
-</p>
---ldx]]--
+end
+
+function characters.initialize() end -- dummy
local skippable = { }
local filesuffix = file.suffix
@@ -251,119 +179,9 @@ function utffilters.setskippable(suffix,value)
end
end
--- function utffilters.collapse(str,filename) -- we can make high a seperate pass (never needed with collapse)
--- if skippable[filesuffix(filename)] then
--- return str
--- -- elseif find(filename,"^virtual://") then
--- -- return str
--- -- else
--- -- -- print("\n"..filename)
--- end
--- if str and str ~= "" then
--- local nstr = #str
--- if nstr > 1 then
--- if initialize then -- saves a call
--- initialize()
--- end
--- local tokens, t, first, done, n = { }, 0, false, false, 0
--- for second in utfcharacters(str) do
--- if done then
--- if first then
--- if second == " " then
--- t = t + 1
--- tokens[t] = first
--- first = second
--- else
--- -- local crs = high[second]
--- -- if crs then
--- -- t = t + 1
--- -- tokens[t] = first
--- -- first = crs
--- -- else
--- local cgf = graphemes[first]
--- if cgf and cgf[second] then
--- first = cgf[second]
--- else
--- t = t + 1
--- tokens[t] = first
--- first = second
--- end
--- -- end
--- end
--- elseif second == " " then
--- first = second
--- else
--- -- local crs = high[second]
--- -- if crs then
--- -- first = crs
--- -- else
--- first = second
--- -- end
--- end
--- elseif second == " " then
--- first = nil
--- n = n + 1
--- else
--- -- local crs = high[second]
--- -- if crs then
--- -- for s in utfcharacters(str) do
--- -- if n == 1 then
--- -- break
--- -- else
--- -- t = t + 1
--- -- tokens[t] = s
--- -- n = n - 1
--- -- end
--- -- end
--- -- if first then
--- -- t = t + 1
--- -- tokens[t] = first
--- -- end
--- -- first = crs
--- -- done = true
--- -- else
--- local cgf = graphemes[first]
--- if cgf and cgf[second] then
--- for s in utfcharacters(str) do
--- if n == 1 then
--- break
--- else
--- t = t + 1
--- tokens[t] = s
--- n = n - 1
--- end
--- end
--- first = cgf[second]
--- done = true
--- else
--- first = second
--- n = n + 1
--- end
--- -- end
--- end
--- end
--- if done then
--- if first then
--- t = t + 1
--- tokens[t] = first
--- end
--- return concat(tokens) -- seldom called
--- end
--- elseif nstr > 0 then
--- return high[str] or str -- this will go from here
--- end
--- end
--- return str
--- end
-
--- this is about twice as fast
-
local p_collapse = nil -- so we can reset if needed
local function prepare()
- if initialize then
- initialize()
- end
local tree = utfchartabletopattern(collapsed)
p_collapse = Cs((tree/collapsed + p_utf8character)^0 * P(-1)) -- the P(1) is needed in order to accept non utf
end
@@ -381,72 +199,9 @@ function utffilters.collapse(str,filename)
end
end
--- function utffilters.decompose(str)
--- if str and str ~= "" then
--- local nstr = #str
--- if nstr > 1 then
--- -- if initialize then -- saves a call
--- -- initialize()
--- -- end
--- local tokens, t, done, n = { }, 0, false, 0
--- for s in utfcharacters(str) do
--- local dec = decomposed[s]
--- if dec then
--- if not done then
--- if n > 0 then
--- for s in utfcharacters(str) do
--- if n == 0 then
--- break
--- else
--- t = t + 1
--- tokens[t] = s
--- n = n - 1
--- end
--- end
--- end
--- done = true
--- end
--- t = t + 1
--- tokens[t] = dec
--- elseif done then
--- t = t + 1
--- tokens[t] = s
--- else
--- n = n + 1
--- end
--- end
--- if done then
--- return concat(tokens) -- seldom called
--- end
--- end
--- end
--- return str
--- end
-
--- local replacer = nil
--- local finder = nil
---
--- function utffilters.decompose(str) -- 3 to 4 times faster than the above
--- if not replacer then
--- if initialize then
--- initialize()
--- end
--- local tree = utfchartabletopattern(decomposed)
--- finder = lpeg.finder(tree,false,true)
--- replacer = lpeg.replacer(tree,decomposed,false,true)
--- end
--- if str and str ~= "" and #str > 1 and lpegmatch(finder,str) then
--- return lpegmatch(replacer,str)
--- end
--- return str
--- end
-
local p_decompose = nil
local function prepare()
- if initialize then
- initialize()
- end
local tree = utfchartabletopattern(decomposed)
p_decompose = Cs((tree/decomposed + p_utf8character)^0 * P(-1))
end
@@ -481,8 +236,8 @@ function utffilters.addgrapheme(result,first,second) -- can be U+ 0x string or u
graphemes[first][second] = result
end
local pair = first .. second
- if not composed[pair] then
- composed[pair] = result
+ if not collapsed[pair] then
+ collapsed[pair] = result
p_composed = nil
end
end
@@ -520,7 +275,7 @@ local p_reorder = nil
-- return p, new
-- end
--- -- the next one isnto stable for similar weights
+-- -- the next one into stable for similar weights
local sorter = function(a,b)
return b[2] < a[2]
@@ -570,7 +325,8 @@ local function prepare()
for k, v in sortedhash(characters.data) do
local combining = v.combining -- v.ordering or v.combining
if combining then
- hash[utfchar(k)] = { utfchar(k), combining, 0 } -- slot 3 can be used in sort
+ local u = utfchar(k)
+ hash[u] = { u, combining, 0 } -- slot 3 can be used in sort
end
end
local e = utfchartabletopattern(exceptions)
@@ -594,7 +350,7 @@ end
-- local collapse = utffilters.collapse
-- local decompose = utffilters.decompose
--- local preprocess = utffilters.preprocess
+-- local reorder = utffilters.reorder
--
-- local c1, c2, c3 = "a", "̂", "̃"
-- local r2, r3 = "â", "ẫ"
@@ -612,7 +368,7 @@ end
-- for i=1,10000 do
-- collapse(data)
-- decompose(data)
--- -- preprocess(data)
+-- -- reorder(data)
-- end
-- print(os.clock()-t,decompose(collapse(data))==okay,decompose(collapse(str)))
-- end
diff --git a/tex/context/base/mkiv/char-utf.mkiv b/tex/context/base/mkiv/char-utf.mkiv
index fe9f402ef..3b77771a7 100644
--- a/tex/context/base/mkiv/char-utf.mkiv
+++ b/tex/context/base/mkiv/char-utf.mkiv
@@ -31,9 +31,9 @@
%D since the source files are rather simple, we postpone the
%D initialization till runtime.
-\appendtoks
- \clf_enableutf % not needed when we create a format so we do it now
-\to \everyjob
+% \appendtoks
+% \clf_enableutf % not needed when we create a format so we do it now
+% \to \everyjob
%D The next one influences input parsing.
%D
diff --git a/tex/context/base/mkiv/chem-str.lua b/tex/context/base/mkiv/chem-str.lua
index e90464ad2..a40ca76b0 100644
--- a/tex/context/base/mkiv/chem-str.lua
+++ b/tex/context/base/mkiv/chem-str.lua
@@ -47,7 +47,6 @@ local context = context
local implement = interfaces.implement
local formatters = string.formatters
-local texgetcount = tex.getcount
local v_default = variables.default
local v_small = variables.small
@@ -58,7 +57,6 @@ local v_fit = variables.fit
local v_on = variables.on
local v_none = variables.none
-local mpnamedcolor = attributes.colors.mpnamedcolor
local topoints = number.topoints
local todimen = string.todimen
@@ -289,6 +287,8 @@ end
local remapper = {
["+"] = "p",
["-"] = "m",
+ ["--"] = "mm",
+ ["++"] = "pp",
}
local dchrs = R("09")
@@ -301,7 +301,7 @@ local set = Ct(digit^2)
local colon = P(":")
local equal = P("=")
local other = 1 - digit - colon - equal
-local remapped = sign / remapper
+local remapped = (sign * sign + sign) / remapper
local operation = Cs(other^1)
local special = (colon * C(other^1)) + Cc("")
local text = (equal * C(P(1)^0)) + Cc(false)
@@ -325,20 +325,19 @@ local pattern =
-- print(lpegmatch(pattern,"RZ13=x")) -- 1 RZ false false table x
local f_initialize = 'if unknown context_chem : input mp-chem.mpiv ; fi ;'
-local f_start_structure = formatters['chem_start_structure(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);']
+local f_start_structure = formatters['chem_start_structure(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%q);']
local f_set_trace_bounds = formatters['chem_trace_boundingbox := %l ;']
local f_stop_structure = 'chem_stop_structure;'
local f_start_component = 'chem_start_component;'
local f_stop_component = 'chem_stop_component;'
-local f_line = formatters['chem_%s%s(%s,%s,%s,%s,%s);']
+local f_line = formatters['chem_%s%s(%s,%s,%s,%s,%q);']
local f_set = formatters['chem_set(%s);']
local f_number = formatters['chem_%s%s(%s,%s,"\\chemicaltext{%s}");']
local f_text = f_number
local f_empty_normal = formatters['chem_%s(%s,%s,"");']
local f_empty_center = formatters['chem_c%s(%s,%s,"");']
local f_transform = formatters['chem_%s(%s,%s,%s);']
-
-local prepareMPvariable = commands and commands.prepareMPvariable
+local f_fixed = formatters['chem_%s(%s,%s,%q);']
local function process(level,spec,text,n,rulethickness,rulecolor,offset,default_variant)
insert(stack,{ spec = spec, text = text, n = n })
@@ -380,7 +379,7 @@ local function process(level,spec,text,n,rulethickness,rulecolor,offset,default_
if t == v_default or t == v_normal or t == "" then
rulecolor = saved_rulecolor
elseif t then
- rulecolor = mpnamedcolor(t)
+ rulecolor = t
end
elseif operation == "rulethickness" then
local t = text
@@ -604,7 +603,7 @@ local function process(level,spec,text,n,rulethickness,rulecolor,offset,default_
m = m + 1 ; metacode[m] = f_transform(operation,variant,index or 1,factor)
end
elseif what == "fixed" then
- m = m + 1 ; metacode[m] = f_transform(operation,variant,rulethickness,rulecolor)
+ m = m + 1 ; metacode[m] = f_fixed(operation,variant,rulethickness,rulecolor)
elseif trace_structure then
report_chemistry("level %a, ignoring undefined operation %s",level,operation)
end
@@ -686,8 +685,8 @@ function chemistry.start(settings)
local unit = settings.unit or 655360
local bondlength = settings.factor or 3
local rulethickness = settings.rulethickness or 65536
- local rulecolor = settings.rulecolor or ""
- local axiscolor = settings.framecolor or ""
+ local rulecolor = settings.rulecolor or "black"
+ local axiscolor = settings.framecolor or "black"
local scale = settings.scale or "normal"
local rotation = settings.rotation or 0
local offset = settings.offset or 0
@@ -735,7 +734,7 @@ function chemistry.start(settings)
if trace_structure then
report_chemistry("skipping trial run")
end
- context.hrule(sp_width,sp_height,0) -- maybe depth
+ context.rule(sp_width,sp_height,0) -- maybe depth
return
end
--
@@ -752,7 +751,7 @@ function chemistry.start(settings)
chemistry.structures,
left, right, top, bottom,
rotation, topoints(unit), bondlength, scale, topoints(offset),
- tostring(settings.axis == v_on), topoints(rulethickness), tostring(axiscolor)
+ tostring(settings.axis == v_on), topoints(rulethickness), axiscolor
)
metacode[#metacode+1] = f_set_trace_bounds(trace_boundingbox) ;
--
diff --git a/tex/context/base/mkiv/chem-str.mkiv b/tex/context/base/mkiv/chem-str.mkiv
index a0b0a9327..2ff229b12 100644
--- a/tex/context/base/mkiv/chem-str.mkiv
+++ b/tex/context/base/mkiv/chem-str.mkiv
@@ -72,7 +72,7 @@
\c!method=\s!double]
\startMPdefinitions{chemistry}
- input mp-chem.mpiv ;
+ loadmodule "chem" ;
\stopMPdefinitions
\defineframed
@@ -172,8 +172,8 @@
scale {\chemicalparameter\c!scale}%
rotation {\chemicalparameter\c!rotation}%
symalign {\chemicalparameter\c!symalign}%
- axis {\chemicalparameter\c!axis}%
- framecolor {\MPcolor{\chemicalparameter\c!framecolor}}%
+ axis {\chemicalparameter\c!axis}% was \MPcolor{...}
+ framecolor {\chemicalparameter\c!framecolor}%
rulethickness {\number\dimexpr\chemicalparameter\c!rulethickness}%
offset {\number\dimexpr\chemicalparameter\c!offset}%
unit {\number\dimexpr\chemicalparameter\c!unit}%
@@ -228,7 +228,7 @@
{#2}%
{\detokenize{#3}}%
{\the\dimexpr\chemicalparameter\c!rulethickness}% todo: scaled points
- {\MPcolor{\chemicalparameter\c!rulecolor}}% % we can precalculate this for speedup
+ {\chemicalparameter\c!rulecolor}%
\relax
\ignorespaces}
@@ -237,7 +237,7 @@
{#1}%
{\detokenize{#2}}%
{\the\dimexpr\chemicalparameter\c!rulethickness}% todo: scaled points
- {\MPcolor{\chemicalparameter\c!rulecolor}}% % we can precalculate this for speedup
+ {\chemicalparameter\c!rulecolor}%
\relax
\ignorespaces}
diff --git a/tex/context/base/mkiv/cldf-bas.lua b/tex/context/base/mkiv/cldf-bas.lua
index 1067a17d5..2387793c8 100644
--- a/tex/context/base/mkiv/cldf-bas.lua
+++ b/tex/context/base/mkiv/cldf-bas.lua
@@ -22,25 +22,26 @@ if not modules then modules = { } end modules ['cldf-bas'] = {
-- flush(ctxcatcodes,"}")
-- end
--- maybe use context.generics
-
local type = type
local format = string.format
local utfchar = utf.char
local concat = table.concat
local context = context
-local generics = context.generics
+local ctxcore = context.core
local variables = interfaces.variables
local nodepool = nodes.pool
local new_rule = nodepool.rule
local new_glyph = nodepool.glyph
+local current_attr = nodes.current_attr
local current_font = font.current
local texgetcount = tex.getcount
local texsetcount = tex.setcount
+-- a set of basic fast ones
+
function context.char(k) -- used as escape too, so don't change to utf
if type(k) == "table" then
local n = #k
@@ -68,34 +69,15 @@ function context.utfchar(k)
end
end
--- plain variants
-
-function context.chardef(cs,u)
- context([[\chardef\%s=%s\relax]],k)
-end
-
-function context.par()
- context([[\par]]) -- no need to add {} there
-end
-
-function context.bgroup()
- context("{")
-end
-
-function context.egroup()
- context("}")
-end
-
-function context.space()
- context("\\space") -- no " " as that gets intercepted
-end
-
-function context.hrule(w,h,d,dir)
+function context.rule(w,h,d,dir)
+ local rule
if type(w) == "table" then
- context(new_rule(w.width,w.height,w.depth,w.dir))
+ rule = new_rule(w.width,w.height,w.depth,w.dir)
else
- context(new_rule(w,h,d,dir))
+ rule = new_rule(w,h,d,dir)
end
+ rule.attr = current_attr()
+ context(rule)
end
function context.glyph(id,k)
@@ -103,74 +85,63 @@ function context.glyph(id,k)
if not k then
id, k = current_font(), id
end
- context(new_glyph(id,k))
+ local glyph = new_glyph(id,k)
+ glyph.attr = current_attr()
+ context(glyph)
end
end
-context.vrule = context.hrule
-
---~ local hbox, bgroup, egroup = context.hbox, context.bgroup, context.egroup
-
---~ function context.hbox(a,...)
---~ if type(a) == "table" then
---~ local s = { }
---~ if a.width then
---~ s[#s+1] = "to " .. a.width -- todo: check for number
---~ elseif a.spread then
---~ s[#s+1] = "spread " .. a.spread -- todo: check for number
---~ end
---~ -- todo: dir, attr etc
---~ hbox(false,table.concat(s," "))
---~ bgroup()
---~ context(string.format(...))
---~ egroup()
---~ else
---~ hbox(a,...)
---~ end
---~ end
+local function ctx_par () context("\\par") end
+local function ctx_space() context("\\space") end
--- not yet used ... but will get variant at the tex end as well
+context.par = ctx_par
+context.space = ctx_space
-function context.sethboxregister(n) context([[\setbox %s\hbox]],n) end
-function context.setvboxregister(n) context([[\setbox %s\vbox]],n) end
+ctxcore.par = ctx_par
+ctxcore.space = ctx_space
-function context.starthboxregister(n)
- if type(n) == "number" then
- context([[\setbox%s\hbox{]],n)
- else
- context([[\setbox\%s\hbox{]],n)
- end
-end
+local function ctx_bgroup() context("{") end
+local function ctx_egroup() context("}") end
-function context.startvboxregister(n)
- if type(n) == "number" then
- context([[\setbox%s\vbox{]],n)
- else
- context([[\setbox\%s\vbox{]],n)
- end
-end
+context.bgroup = ctx_bgroup
+context.egroup = ctx_egroup
-context.stophboxregister = context.egroup
-context.stopvboxregister = context.egroup
+ctxcore.bgroup = ctx_bgroup
+ctxcore.egroup = ctx_egroup
-function context.flushboxregister(n)
- if type(n) == "number" then
- context([[\box%s ]],n)
- else
- context([[\box\%s]],n)
- end
+-- not yet used ... but will get variant at the tex end as well
+
+local function setboxregister(kind,n)
+ context(type(n) == "number" and [[\setbox%s\%s]] or [[\setbox\%s\%s]],n,kind)
end
-function context.beginvbox()
- context([[\vbox{]]) -- we can do \bvbox ... \evbox (less tokens)
+function ctxcore.sethboxregister(n) setboxregister("hbox",n) end
+function ctxcore.setvboxregister(n) setboxregister("vbox",n) end
+function ctxcore.setvtopregister(n) setboxregister("vtop",n) end
+
+local function startboxregister(kind,n)
+ context(type(n) == "number" and [[\setbox%s\%s{]] or [[\setbox\%s\%s{]],n,kind)
end
-function context.beginhbox()
- context([[\hbox{]]) -- todo: use fast one
+function ctxcore.starthboxregister(n) startboxregister("hbox",n) end
+function ctxcore.startvboxregister(n) startboxregister("vbox",n) end
+function ctxcore.startvtopregister(n) startboxregister("vtop",n) end
+
+ctxcore.stophboxregister = ctx_egroup
+ctxcore.stopvboxregister = ctx_egroup
+ctxcore.stopvtopregister = ctx_egroup
+
+function ctxcore.flushboxregister(n)
+ context(type(n) == "number" and [[\box%s ]] or [[\box\%s]],n)
end
-context.endvbox = context.egroup
-context.endhbox = context.egroup
+function ctxcore.beginhbox() context([[\hbox{]]) end
+function ctxcore.beginvbox() context([[\vbox{]]) end
+function ctxcore.beginvtop() context([[\vtop{]]) end
+
+ctxcore.endhbox = ctx_egroup
+ctxcore.endvbox = ctx_egroup
+ctxcore.endvtop = ctx_egroup
local function allocate(name,what,cmd)
local a = format("c_syst_last_allocated_%s",what)
@@ -182,9 +153,14 @@ local function allocate(name,what,cmd)
return n
end
-function context.newdimen (name) return allocate(name,"dimen") end
-function context.newskip (name) return allocate(name,"skip") end
-function context.newcount (name) return allocate(name,"count") end
-function context.newmuskip(name) return allocate(name,"muskip") end
-function context.newtoks (name) return allocate(name,"toks") end
-function context.newbox (name) return allocate(name,"box","mathchar") end
+context.registers = {
+ -- the number is available directly, the csname after the lua call
+ newdimen = function(name) return allocate(name,"dimen") end,
+ newskip = function(name) return allocate(name,"skip") end,
+ newcount = function(name) return allocate(name,"count") end,
+ newmuskip = function(name) return allocate(name,"muskip") end,
+ newtoks = function(name) return allocate(name,"toks") end,
+ newbox = function(name) return allocate(name,"box","mathchar") end,
+ -- not really a register but kind of belongs here
+ newchar = function(name,u) context([[\chardef\%s=%s\relax]],name,u) end,
+}
diff --git a/tex/context/base/mkiv/cldf-com.lua b/tex/context/base/mkiv/cldf-com.lua
index bd357b712..f9bf5b41a 100644
--- a/tex/context/base/mkiv/cldf-com.lua
+++ b/tex/context/base/mkiv/cldf-com.lua
@@ -6,33 +6,27 @@ if not modules then modules = { } end modules ['cldf-com'] = {
license = "see context related readme files"
}
--- todo ... needs more thinking ... a special table toolkit
+-- Some day I'll make a table toolkit ...
-local tostring = tostring
-local context = context
-local generics = context.generics -- needs documentation
-local variables = interfaces.variables
+local tostring, select = tostring, select
-generics.starttabulate = "starttabulate" -- "start" .. variables.tabulate -- todo: e!start
-generics.stoptabulate = "stoptabulate" -- "stop" .. variables.tabulate -- todo: e!stop
+local context = context
+local ctxcore = context.core
-local NC, NR = context.NC, context.NR
+local ctx_NC = ctxcore.NC
+local ctx_NR = ctxcore.NR
local function tabulaterow(how,...)
+ local ctx_flush = how and context[how] or context
for i=1,select("#",...) do
- local ti = tostring(select(i,...))
- NC()
- if how then
- context[how](ti)
- else
- context(ti)
- end
+ ctx_NC()
+ ctx_flush(tostring(select(i,...)))
end
- NC()
- NR()
+ ctx_NC()
+ ctx_NR()
end
-function context.tabulaterow (...) tabulaterow(false, ...) end
-function context.tabulaterowbold(...) tabulaterow("bold",...) end
-function context.tabulaterowtype(...) tabulaterow("type",...) end
-function context.tabulaterowtyp (...) tabulaterow("typ", ...) end
+function ctxcore.tabulaterow (...) tabulaterow(false, ...) end
+function ctxcore.tabulaterowbold(...) tabulaterow("bold",...) end
+function ctxcore.tabulaterowtype(...) tabulaterow("type",...) end
+function ctxcore.tabulaterowtyp (...) tabulaterow("typ", ...) end
diff --git a/tex/context/base/mkiv/cldf-ini.lua b/tex/context/base/mkiv/cldf-ini.lua
index 0c39f72f5..3c91f5fba 100644
--- a/tex/context/base/mkiv/cldf-ini.lua
+++ b/tex/context/base/mkiv/cldf-ini.lua
@@ -6,46 +6,61 @@ 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
-- a bit slower but often more readable when mixed with lua code. It can also be handy
-- when generating documents from databases or when constructing large tables or so.
--
--- maybe optional checking against interface
--- currently no coroutine trickery
--- we could always use prtcatcodes (context.a_b_c) but then we loose protection
--- tflush needs checking ... sort of weird that it's not a table
--- __flushlines is an experiment and rather ugly so it will go away
+-- In cldf-tod.lua I have some code that might end up here. In cldf-old.lua the
+-- code that precedes more modern solutions (made possible by features in the engine),
+-- most noticeably function handling, which worked well for a decade, but by now the
+-- more efficient approach is stable enough to move the original code to the obsolete
+-- module.
--
--- tex.print == line with endlinechar appended
-
--- todo: context("%bold{total: }%s",total)
--- todo: context.documentvariable("title")
+-- to be considered:
+--
+-- 0.528 local foo = tex.ctxcatcodes
+-- 0.651 local foo = getcount("ctxcatcodes")
+-- 0.408 local foo = getcount(ctxcatcodes) -- local ctxcatcodes = tex.iscount("ctxcatcodes")
+-- maybe:  (escape) or 0x2061 (apply function) or 0x2394 (software function ⎔)
+-- note : tex.print == line with endlinechar appended
+-- todo : context("%bold{total: }%s",total)
+-- todo : context.documentvariable("title")
+--
-- during the crited project we ran into the situation that luajittex was 10-20 times
-- slower that luatex ... after 3 days of testing and probing we finally figured out that
-- the the differences between the lua and luajit hashers can lead to quite a slowdown
-- in some cases.
-
+--
-- context(lpeg.match(lpeg.patterns.texescape,"${}"))
-- context(string.formatters["%!tex!"]("${}"))
-- context("%!tex!","${}")
+--
+-- We try not to polute the context namespace too much. For that reason the commands are
+-- registered in the context.core namespace. You can call all context commands using
+-- context.foo etc. and pipe to context with context("foo"). Defining a local command
+-- foo being context.foo is okay, as is context.core.foo. We will have some definitions
+-- that are plugged into the core namespace (mostly for speedup) but otherwise specialized
+-- writers are in the context namespace only. In your documents you can best use the
+-- context.foo(...) and context(...) variant but in some core modules we use the faster
+-- ones in critical places (no one will notice of course). The standard syntax highlighter
+-- that I use knows how to visualize ctx related code.
+
+-- I cleaned this code up a bit when updating the cld manual but got distracted a bit by
+-- watching Trio Hiromi Uehara, Anthony Jackson & Simon Phillips (discovered via the
+-- later on YT). Hopefully the video breaks made the following better in the end.
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 next, type, tostring, tonumber, unpack, select, rawset = next, type, tostring, tonumber, 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
-local formatters = string.formatters -- using formatters is slower in this case
+
+local formatters = string.formatters -- using formatters is slower in this case
+local setmetatableindex = table.setmetatableindex
+local setmetatablecall = table.setmetatablecall
+local setmetatablenewindex = table.setmetatablenewindex
context = context or { }
commands = commands or { }
@@ -85,357 +100,234 @@ local flushdirect = texprint -- lines
local report_context = logs.reporter("cld","tex")
local report_cld = logs.reporter("cld","stack")
+----- report_template = logs.reporter("cld","template")
local processlines = true -- experiments.register("context.processlines", function(v) processlines = v end)
-- In earlier experiments a function tables was referred to as lua.calls and the
--- primitive \luafunctions was \luacall.
+-- primitive \luafunctions was \luacall and we used our own implementation of
+-- a function table (more indirectness).
-local luafunctions = lua.get_functions_table and lua.get_functions_table()
-local usedstack = nil
+local knownfunctions = lua.get_functions_table()
local showstackusage = false
--- luafunctions = false
-
trackers.register("context.stack",function(v) showstackusage = v end)
-local storefunction, flushfunction
-local storenode, flushnode
-local registerfunction, unregisterfunction, reservefunction, knownfunctions, callfunctiononce
-
--- if luafunctions then
+local freed, nofused, noffreed = { }, 0, 0 -- maybe use the number of @@trialtypesetting
- local freed, nofused, noffreed = { }, 0, 0 -- maybe use the number of @@trialtypesetting
+local usedstack = function()
+ return nofused, noffreed
+end
- usedstack = function()
- return nofused, noffreed
+local flushfunction = function(slot,arg)
+ if arg() then
+ -- keep
+ elseif texgetcount("@@trialtypesetting") == 0 then -- @@trialtypesetting is private!
+ noffreed = noffreed + 1
+ freed[noffreed] = slot
+ knownfunctions[slot] = false
+ else
+ -- keep
end
+end
- flushfunction = function(slot,arg)
- if arg() then
- -- keep
- elseif texgetcount("@@trialtypesetting") == 0 then -- @@trialtypesetting is private!
- noffreed = noffreed + 1
- freed[noffreed] = slot
- luafunctions[slot] = false
- else
- -- keep
- end
+local storefunction = function(arg)
+ local f = function(slot) flushfunction(slot,arg) end
+ if noffreed > 0 then
+ local n = freed[noffreed]
+ freed[noffreed] = nil
+ noffreed = noffreed - 1
+ knownfunctions[n] = f
+ return n
+ else
+ nofused = nofused + 1
+ knownfunctions[nofused] = f
+ return nofused
end
+end
- storefunction = function(arg)
- local f = function(slot) flushfunction(slot,arg) end
- if noffreed > 0 then
- local n = freed[noffreed]
- freed[noffreed] = nil
- noffreed = noffreed - 1
- luafunctions[n] = f
- return n
- else
- nofused = nofused + 1
- luafunctions[nofused] = f
- return nofused
- end
+local flushnode = function(slot,arg)
+ if texgetcount("@@trialtypesetting") == 0 then -- @@trialtypesetting is private!
+ writenode(arg)
+ noffreed = noffreed + 1
+ freed[noffreed] = slot
+ knownfunctions[slot] = false
+ else
+ writenode(copynodelist(arg))
end
+end
- flushnode = function(slot,arg)
- if texgetcount("@@trialtypesetting") == 0 then -- @@trialtypesetting is private!
- writenode(arg)
- noffreed = noffreed + 1
- freed[noffreed] = slot
- luafunctions[slot] = false
- else
- writenode(copynodelist(arg))
- end
+local storenode = function(arg)
+ local f = function(slot) flushnode(slot,arg) end
+ if noffreed > 0 then
+ local n = freed[noffreed]
+ freed[noffreed] = nil
+ noffreed = noffreed - 1
+ knownfunctions[n] = f
+ return n
+ else
+ nofused = nofused + 1
+ knownfunctions[nofused] = f
+ return nofused
end
+end
- storenode = function(arg)
- local f = function(slot) flushnode(slot,arg) end
- if noffreed > 0 then
- local n = freed[noffreed]
- freed[noffreed] = nil
- noffreed = noffreed - 1
- luafunctions[n] = f
- return n
- else
- nofused = nofused + 1
- luafunctions[nofused] = f
- return nofused
- end
- end
+storage.storedfunctions = storage.storedfunctions or { }
+local storedfunctions = storage.storedfunctions
+local initex = environment.initex
- -- registerfunction = function(f)
- -- if type(f) == "string" then
- -- f = loadstring(f)
- -- end
- -- if type(f) ~= "function" then
- -- f = function() report_cld("invalid function %A",f) end
- -- end
- -- if noffreed > 0 then
- -- local n = freed[noffreed]
- -- freed[noffreed] = nil
- -- noffreed = noffreed - 1
- -- luafunctions[n] = f
- -- return n
- -- else
- -- nofused = nofused + 1
- -- luafunctions[nofused] = f
- -- return nofused
- -- end
- -- end
-
- storage.storedfunctions = storage.storedfunctions or { }
- local storedfunctions = storage.storedfunctions
- local initex = environment.initex
-
- storage.register("storage/storedfunctions", storedfunctions, "storage.storedfunctions")
-
- local f_resolve = nil
- local p_resolve = ((1-lpegP("."))^1 / function(s) f_resolve = f_resolve[s] end * lpegP(".")^0)^1
-
- local function resolvestoredfunction(str)
- f_resolve = global
- lpegmatch(p_resolve,str)
- return f_resolve
- end
-
- local function expose(slot,f,...) -- so we can register yet undefined functions
- local func = resolvestoredfunction(f)
- if not func then
- func = function() report_cld("beware: unknown function %i called: %s",slot,f) end
- end
- luafunctions[slot] = func
- return func(...)
+storage.register("storage/storedfunctions", storedfunctions, "storage.storedfunctions")
+
+local f_resolve = nil
+local p_resolve = ((1-lpegP("."))^1 / function(s) f_resolve = f_resolve[s] end * lpegP(".")^0)^1
+
+local function resolvestoredfunction(str)
+ f_resolve = global
+ lpegmatch(p_resolve,str)
+ return f_resolve
+end
+
+local function expose(slot,f,...) -- so we can register yet undefined functions
+ local func = resolvestoredfunction(f)
+ if not func then
+ func = function() report_cld("beware: unknown function %i called: %s",slot,f) end
end
+ knownfunctions[slot] = func
+ return func(...)
+end
- if initex then
- -- todo: log stored functions
- else
- local slots = table.sortedkeys(storedfunctions)
- local last = #slots
- if last > 0 then
- -- we restore the references
- for i=1,last do
- local slot = slots[i]
- local data = storedfunctions[slot]
- luafunctions[slot] = function(...)
- -- print(data) -- could be trace
- return expose(slot,data,...)
- end
+if initex then
+ -- todo: log stored functions
+else
+ local slots = table.sortedkeys(storedfunctions)
+ local last = #slots
+ if last > 0 then
+ -- we restore the references
+ for i=1,last do
+ local slot = slots[i]
+ local data = storedfunctions[slot]
+ knownfunctions[slot] = function(...)
+ -- print(data) -- could be trace
+ return expose(slot,data,...)
end
- -- we now know how many are defined
- nofused = slots[last]
- -- normally there are no holes in the list yet
- for i=1,nofused do
- if not luafunctions[i] then
- noffreed = noffreed + 1
- freed[noffreed] = i
- end
+ end
+ -- we now know how many are defined
+ nofused = slots[last]
+ -- normally there are no holes in the list yet
+ for i=1,nofused do
+ if not knownfunctions[i] then
+ noffreed = noffreed + 1
+ freed[noffreed] = i
end
- -- report_cld("%s registered functions, %s freed slots",last,noffreed)
end
+ -- report_cld("%s registered functions, %s freed slots",last,noffreed)
end
+end
- registerfunction = function(f,direct) -- either f=code or f=namespace,direct=name
- local slot, func
- if noffreed > 0 then
- slot = freed[noffreed]
- freed[noffreed] = nil
- noffreed = noffreed - 1
- else
- nofused = nofused + 1
- slot = nofused
- end
- if direct then
- if initex then
- func = function(...)
- expose(slot,f,...)
- end
- if initex then
- storedfunctions[slot] = f
- end
- else
- func = resolvestoredfunction(f)
- end
- if type(func) ~= "function" then
- func = function() report_cld("invalid resolve %A",f) end
+local registerfunction = function(f,direct) -- either f=code or f=namespace,direct=name
+ local slot, func
+ if noffreed > 0 then
+ slot = freed[noffreed]
+ freed[noffreed] = nil
+ noffreed = noffreed - 1
+ else
+ nofused = nofused + 1
+ slot = nofused
+ end
+ if direct then
+ if initex then
+ func = function(...)
+ expose(slot,f,...)
end
- elseif type(f) == "string" then
- func = loadstring(f)
- if type(func) ~= "function" then
- func = function() report_cld("invalid code %A",f) end
+ if initex then
+ storedfunctions[slot] = f
end
- elseif type(f) == "function" then
- func = f
else
- func = function() report_cld("invalid function %A",f) end
+ func = resolvestoredfunction(f)
end
- luafunctions[slot] = func
- return slot
- end
-
- -- do
- -- commands.test = function(str) report_cld("test function: %s", str) end
- -- if initex then
- -- registerfunction("commands.test") -- number 1
- -- end
- -- luafunctions[1]("okay")
- -- end
-
- unregisterfunction = function(slot)
- if luafunctions[slot] then
- noffreed = noffreed + 1
- freed[noffreed] = slot
- luafunctions[slot] = false
- else
- report_cld("invalid function slot %A",slot)
+ if type(func) ~= "function" then
+ func = function() report_cld("invalid resolve %A",f) end
end
- end
-
- reservefunction = function()
- if noffreed > 0 then
- local n = freed[noffreed]
- freed[noffreed] = nil
- noffreed = noffreed - 1
- return n
- else
- nofused = nofused + 1
- return nofused
+ elseif type(f) == "string" then
+ func = loadstring(f)
+ if type(func) ~= "function" then
+ func = function() report_cld("invalid code %A",f) end
end
+ elseif type(f) == "function" then
+ func = f
+ else
+ func = function() report_cld("invalid function %A",f) end
end
+ knownfunctions[slot] = func
+ return slot
+end
- callfunctiononce = function(slot)
- luafunctions[slot](slot)
+local unregisterfunction = function(slot)
+ if knownfunctions[slot] then
noffreed = noffreed + 1
freed[noffreed] = slot
- luafunctions[slot] = false
+ knownfunctions[slot] = false
+ else
+ report_cld("invalid function slot %A",slot)
end
+end
- table.setmetatablecall(luafunctions,function(t,n) return luafunctions[n](n) end)
+local reservefunction = function()
+ if noffreed > 0 then
+ local n = freed[noffreed]
+ freed[noffreed] = nil
+ noffreed = noffreed - 1
+ return n
+ else
+ nofused = nofused + 1
+ return nofused
+ end
+end
- knownfunctions = luafunctions
+local callfunctiononce = function(slot)
+ knownfunctions[slot](slot)
+ noffreed = noffreed + 1
+ freed[noffreed] = slot
+ knownfunctions[slot] = false
+end
- -- The next hack is a convenient way to define scanners at the Lua end and
- -- get them available at the TeX end. There is some dirty magic needed to
- -- prevent overload during format loading.
+setmetatablecall(knownfunctions,function(t,n) return knownfunctions[n](n) end)
- -- interfaces.scanners.foo = function() context("[%s]",tokens.scanners.string()) end : \scan_foo
+-- The next hack is a convenient way to define scanners at the Lua end and
+-- get them available at the TeX end. There is some dirty magic needed to
+-- prevent overload during format loading.
- interfaces.storedscanners = interfaces.storedscanners or { }
- local storedscanners = interfaces.storedscanners
+-- interfaces.scanners.foo = function() context("[%s]",tokens.scanners.string()) end : \scan_foo
- storage.register("interfaces/storedscanners", storedscanners, "interfaces.storedscanners")
+interfaces.storedscanners = interfaces.storedscanners or { }
+local storedscanners = interfaces.storedscanners
- local interfacescanners = table.setmetatablenewindex(function(t,k,v)
- if storedscanners[k] then
- -- report_cld("warning: scanner %a is already set",k)
- -- os.exit()
- -- \scan_<k> is already in the format
- -- report_cld("using interface scanner: %s",k)
- else
- -- todo: allocate slot here and pass it
- storedscanners[k] = true
- -- report_cld("installing interface scanner: %s",k)
- context("\\installctxscanner{clf_%s}{interfaces.scanners.%s}",k,k)
- end
- rawset(t,k,v)
- end)
+storage.register("interfaces/storedscanners", storedscanners, "interfaces.storedscanners")
- interfaces.scanners = interfacescanners
+local interfacescanners = setmetatablenewindex(function(t,k,v)
+ if storedscanners[k] then
+ -- report_cld("warning: scanner %a is already set",k)
+ -- os.exit()
+ -- \scan_<k> is already in the format
+ -- report_cld("using interface scanner: %s",k)
+ else
+ -- todo: allocate slot here and pass it
+ storedscanners[k] = true
+ -- report_cld("installing interface scanner: %s",k)
+ context("\\installctxscanner{clf_%s}{interfaces.scanners.%s}",k,k)
+ end
+ rawset(t,k,v)
+end)
--- else -- by now this is obsolete
---
--- local luafunctions, noffunctions = { }, 0
--- local luanodes, nofnodes = { }, 0
---
--- usedstack = function()
--- return noffunctions + nofnodes, 0
--- end
---
--- flushfunction = function(n)
--- local sn = luafunctions[n]
--- if not sn then
--- report_cld("data with id %a cannot be found on stack",n)
--- elseif not sn() and texgetcount("@@trialtypesetting") == 0 then -- @@trialtypesetting is private!
--- luafunctions[n] = nil
--- end
--- end
---
--- storefunction = function(ti)
--- noffunctions = noffunctions + 1
--- luafunctions[noffunctions] = ti
--- return noffunctions
--- end
---
--- -- freefunction = function(n)
--- -- luafunctions[n] = nil
--- -- end
---
--- flushnode = function(n)
--- local sn = luanodes[n]
--- if not sn then
--- report_cld("data with id %a cannot be found on stack",n)
--- elseif texgetcount("@@trialtypesetting") == 0 then -- @@trialtypesetting is private!
--- writenode(sn)
--- luanodes[n] = nil
--- else
--- writenode(copynodelist(sn))
--- end
--- end
---
--- storenode = function(ti)
--- nofnodes = nofnodes + 1
--- luanodes[nofnodes] = ti
--- return nofnodes
--- end
---
--- _cldf_ = flushfunction -- global
--- _cldn_ = flushnode -- global
--- -- _cldl_ = function(n) return luafunctions[n]() end -- luafunctions(n)
--- _cldl_ = luafunctions
---
--- registerfunction = function(f)
--- if type(f) == "string" then
--- f = loadstring(f)
--- end
--- if type(f) ~= "function" then
--- f = function() report_cld("invalid function %A",f) end
--- end
--- noffunctions = noffunctions + 1
--- luafunctions[noffunctions] = f
--- return noffunctions
--- end
---
--- unregisterfunction = function(slot)
--- if luafunctions[slot] then
--- luafunctions[slot] = nil
--- else
--- report_cld("invalid function slot %A",slot)
--- end
--- end
---
--- reservefunction = function()
--- noffunctions = noffunctions + 1
--- return noffunctions
--- end
---
--- callfunctiononce = function(slot)
--- luafunctions[slot](slot)
--- luafunctions[slot] = nil
--- end
---
--- table.setmetatablecall(luafunctions,function(t,n) return luafunctions[n](n) end)
---
--- knownfunctions = luafunctions
---
--- end
+interfaces.scanners = interfacescanners
-context.registerfunction = registerfunction
-context.unregisterfunction = unregisterfunction
-context.reservefunction = reservefunction
-context.knownfunctions = knownfunctions
-context.callfunctiononce = callfunctiononce _cldo_ = callfunctiononce
-context.storenode = storenode -- private helper
+context.functions = {
+ register = registerfunction,
+ unregister = unregisterfunction,
+ reserve = reservefunction,
+ known = knownfunctions,
+ callonce = callfunctiononce,
+}
function commands.ctxfunction(code,namespace)
context(registerfunction(code,namespace))
@@ -464,13 +356,6 @@ function context.trialtypesetting()
return texgetcount("@@trialtypesetting") ~= 0
end
--- local f_cldo = formatters["_cldo_(%i)"]
--- local latelua_node = nodes.pool.latelua
---
--- function context.lateluafunctionnnode(f)
--- return latelua_node(f_cldo(registerfunction(f)))
--- end
-
-- Should we keep the catcodes with the function?
local catcodestack = { }
@@ -516,6 +401,27 @@ local function popcatcodes()
contentcatcodes = currentcatcodes
end
+function context.unprotect()
+ -- at the lua end
+ catcodelevel = catcodelevel + 1
+ catcodestack[catcodelevel] = currentcatcodes
+ currentcatcodes = prtcatcodes
+ contentcatcodes = prtcatcodes
+ -- at the tex end
+ flush("\\unprotect")
+end
+
+function context.protect()
+ -- at the tex end
+ flush("\\protect")
+ -- at the lua end
+ 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
@@ -561,7 +467,7 @@ local n_exception = ""
-- better a table specification
-function context.newtexthandler(specification) -- can also be used for verbose
+function context.newtexthandler(specification)
specification = specification or { }
--
local s_catcodes = specification.catcodes
@@ -677,10 +583,6 @@ local flushlines = context.newtexthandler {
simpleline = n_simpleline,
}
-context.__flushlines = flushlines -- maybe context.helpers.flushtexlines
-context.__flush = flush
-context.__flushdirect = flushdirect
-
-- The next variant is only used in rare cases (buffer to mp):
local printlines_ctx = (
@@ -705,547 +607,314 @@ end
local containseol = patterns.containseol
-local writer = nil
-local prtwriter = nil
-
--- if luafunctions then
-
- writer = function (parent,command,...) -- already optimized before call
- flush(currentcatcodes,command) -- todo: ctx|prt|texcatcodes
- local direct = false
- -- 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
- 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,"{}")
- 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
+local function writer(parent,command,...) -- already optimized before call
+ flush(currentcatcodes,command) -- todo: ctx|prt|texcatcodes
+ local direct = false
+ -- 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
+ 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,"{}")
+ else
+ local typ = type(ti)
+ if typ == "string" then
+ -- is processlines seen ?
+ if processlines and lpegmatch(containseol,ti) then
+ flush(currentcatcodes,"{")
+ flushlines(ti)
+ flush(currentcatcodes,"}")
+ elseif currentcatcodes == contentcatcodes then
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
+ 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
- if v == "" then
- flush(currentcatcodes,"[",k,"=")
- else
- flush(currentcatcodes,"[",k,"={",v,"}")
- end
- done = true
+ flush(currentcatcodes,",",k,"={",v,"}")
end
- end
- if done then
- flush(currentcatcodes,"]")
else
- flush(currentcatcodes,"[]")
+ if v == "" then
+ flush(currentcatcodes,"[",k,"=")
+ else
+ flush(currentcatcodes,"[",k,"={",v,"}")
+ end
+ done = true
end
- elseif tn == 1 then -- some 20% faster than the next loop
- local tj = ti[1]
+ 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),"]")
+ -- flush(currentcatcodes,"[",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]
if type(tj) == "function" then
- flush(currentcatcodes,"[\\cldl",storefunction(tj),"]")
- -- flush(currentcatcodes,"[",storefunction(tj),"]")
+ 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,"]")
- 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
+ if j == tn then
+ flush(currentcatcodes,tj,"]")
else
- if j == tn then
- flush(currentcatcodes,tj,"]")
- else
- flush(currentcatcodes,tj,",")
- end
+ flush(currentcatcodes,tj,",")
end
end
end
- 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
- report_context("error: %a gets a weird argument %a",command,ti)
end
- end
- end
- end
-
- -- if performance really matters we can consider a compiler but it will never
- -- pay off
-
- 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(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),"}")
+ 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
- report_context("fatal error: prt %a gets a weird argument %a",command,ti)
+ 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
+ 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),"}}")
+-- if performance really matters we can consider a compiler but it will never
+-- pay off
+
+-- local function prtwriter(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(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
--- report_context("error: %a gets a weird argument %a",command,ti)
+-- report_context("fatal error: prt %a gets a weird argument %a",command,ti)
-- end
-- end
-- end
---
-- end
-local generics = { } context.generics = generics
-local indexer = nil
-local prtindexer = nil
-
--- 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
+local core = setmetatableindex(function(parent,k)
+ local c = "\\" .. k -- tostring(k)
+ local f = function(first,...)
+ if first == nil then
+ flush(currentcatcodes,c)
else
- return context -- catch
+ return writer(context,c,first,...)
end
end
+ parent[k] = f
+ return f
+end)
+
+core.cs = setmetatableindex(function(parent,k)
+ local c = "\\" .. k -- tostring(k)
+ local f = function()
+ flush(currentcatcodes,c)
+ end
+ parent[k] = f
+ return f
+end)
--- else
+local indexer = function(parent,k)
+ if type(k) == "string" then
+ return core[k]
+ else
+ return context -- catch
+ end
+end
+
+context.core = core
+
+-- only for internal usage:
+
+-- local prtindexer = nil
--
--- local create = token.create
--- local twrite = token.write
--- local setmacro = token.set_macro
+-- do
--
--- 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
+-- -- the only variant is not much faster than the full but it's more
+-- -- memory efficient
+--
+-- local protected = { }
+-- local protectedcs = { }
+-- context.protected = protected
+-- context.protectedcs = protectedcs
+--
+-- local function fullindexer(t,k)
+-- local c = "\\" .. k -- tostring(k)
+-- local v = function(first,...)
+-- if first == nil then
+-- flush(prtcatcodes,c)
+-- else
+-- return prtwriter(c,first,...)
-- end
--- parent[k] = f
--- return f
--- else
--- return context -- catch
-- end
+-- rawset(t,k,v) -- protected namespace
+-- return v
-- 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
--- context.NC(str) fails as well as optional arguments. So, we don't do this
--- in practice. We just keep the next trick commented. The gain on some
--- 100000 calls is not that large: 0.100 => 0.95 which is neglectable.
---
--- local function constructor(parent,k,c,first,...)
--- if first == nil then
--- local f = function()
--- flush(currentcatcodes,c)
+-- local function onlyindexer(t,k)
+-- local c = "\\" .. k -- tostring(k)
+-- local v = function()
+-- flush(prtcatcodes,c)
-- end
--- parent[k] = f
--- return f()
--- else
--- local f = function(...)
--- return writer(parent,c,...)
--- end
--- parent[k] = f
--- return f(first,...)
+-- rawset(protected,k,v)
+-- rawset(t,k,v)
+-- return v
-- end
--- end
--
--- local function indexer(parent,k)
--- local c = "\\" .. tostring(generics[k] or k)
--- local f = function(...)
--- return constructor(parent,k,c,...)
+-- protected.cs = setmetatableindex(function(parent,k)
+-- local c = "\\" .. k -- tostring(k)
+-- local v = function()
+-- flush(prtcatcodes,c)
+-- end
+-- parent[k] = v
+-- return v
-- end
--- parent[k] = f
--- return f
+--
+-- setmetatableindex(protected,fullindexer)
+-- setmetatablecall (protected,prtwriter)
+--
+-- setmetatableindex(protectedcs,onlyindexer)
+-- setmetatablecall (protectedcs,prtwriter)
+--
-- end
--- only for internal usage:
-
-do
-
- 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) -- context namespace
- return v
- end
+-- local splitformatters = utilities.strings.formatters.new(true) -- not faster (yet)
- function context.constructcs(k)
- local c = "\\" .. tostring(generics[k] or k)
- local v = function(first,...)
- if first == nil then
- flush(prtcatcodes,c)
+local 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
+ flushlines(f)
else
- return prtwriter(c,first,...)
+ flush(contentcatcodes,f)
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)
+ elseif typ == "number" then
+ if a then
+ flush(currentcatcodes,f,a,...)
else
- return prtwriter(c,first,...)
+ flush(currentcatcodes,f)
end
- end
- rawset(t,k,v) -- protected namespace
- return v
- end
-
- 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
-
- 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,...)
+ 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
+ flushlines(a)
else
- flush(currentcatcodes,f)
+ flushdirect(currentcatcodes,"\n") -- no \r, else issues with \startlines ... use context.par() otherwise
end
- 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
- 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
- if a ~= nil then
- -- no command, same as context(a,...)
- writer(parent,"",a,...)
- else
- -- ignored
- end
+ -- ignored
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,"\\cldl",storenode(f)," ")
- -- flush(currentcatcodes,"",storenode(f)," ")
- else
- report_context("error: %a gets a weird argument %a","context",f)
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,"\\cldl",storenode(f)," ")
+ -- flush(currentcatcodes,"",storenode(f)," ")
+ else
+ report_context("error: %a gets a weird argument %a","context",f)
end
end
+end
- function context.flushnode(n)
+context.nodes = {
+ store = storenode,
+ flush = function(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
+ end,
+}
local defaultcaller = caller
-setmetatable(context, { __index = indexer, __call = caller } )
-
--- now we tweak unprotect and protect
-
-function context.unprotect()
- -- at the lua end
- insert(catcodestack,currentcatcodes)
- currentcatcodes = prtcatcodes
- contentcatcodes = currentcatcodes
- -- at the tex end
- flush("\\unprotect")
-end
-
-function context.protect()
- -- at the tex end
- flush("\\protect")
- -- at the lua end
- currentcatcodes = remove(catcodestack) or currentcatcodes
- contentcatcodes = currentcatcodes
-end
+setmetatableindex(context,indexer)
+setmetatablecall (context,caller)
function context.sprint(...) -- takes catcodes as first argument
flush(...)
end
-function context.fprint(catcodes,fmt,first,...)
+function context.fprint(fmt,first,...)
if type(catcodes) == "number" then
if first then
- flush(catcodes,formatters[fmt](first,...))
+ flush(currentcatcodes,formatters[fmt](first,...))
else
- flush(catcodes,fmt)
+ flush(currentcatcodes,fmt)
end
else
if fmt then
@@ -1256,23 +925,17 @@ function context.fprint(catcodes,fmt,first,...)
end
end
-function tex.fprint(fmt,first,...) -- goodie
- if first then
- flush(currentcatcodes,formatters[fmt](first,...))
- else
- flush(currentcatcodes,fmt)
- end
-end
+tex.fprint = context.fprint
-- logging
-local trace_stack = { }
+local trace_stack = { report_context }
local normalflush = flush
local normalflushdirect = flushdirect
----- normalflushraw = flushraw
local normalwriter = writer
-local currenttrace = nil
+local currenttrace = report_context
local nofwriters = 0
local nofflushes = 0
@@ -1380,76 +1043,39 @@ local tracedflushdirect = function(one,two,...)
end
end
-local function pushlogger(trace)
+function context.pushlogger(trace)
trace = trace or report_context
insert(trace_stack,currenttrace)
currenttrace = trace
- --
- flush = tracedflush
- flushdirect = tracedflushdirect
- writer = tracedwriter
- --
- context.__flush = flush
- context.__flushdirect = flushdirect
- --
- return flush, writer, flushdirect
end
-local function poplogger()
- currenttrace = remove(trace_stack)
- if not currenttrace then
- flush = normalflush
- flushdirect = normalflushdirect
- writer = normalwriter
- --
- context.__flush = flush
- context.__flushdirect = flushdirect
+function context.poplogger()
+ if #trace_stack > 1 then
+ currenttrace = remove(trace_stack) or report_context
+ else
+ currenttrace = report_context
end
- return flush, writer, flushdirect
end
-local function settracing(v)
+function context.settracing(v)
if v then
- return pushlogger(report_context)
+ flush = tracedflush
+ flushdirect = tracedflushdirect
+ writer = tracedwriter
else
- return poplogger()
+ flush = normalflush
+ flushdirect = normalflushdirect
+ writer = normalwriter
end
+ return flush, writer, flushdirect
end
--- todo: share flushers so that we can define in other files
-
-trackers.register("context.trace",settracing)
-
-context.pushlogger = pushlogger
-context.poplogger = poplogger
-context.settracing = settracing
-
--- -- untested, no time now:
---
--- local tracestack, tracestacktop = { }, false
---
--- function context.pushtracing(v)
--- insert(tracestack,tracestacktop)
--- if type(v) == "function" then
--- pushlogger(v)
--- v = true
--- else
--- pushlogger()
--- end
--- tracestacktop = v
--- settracing(v)
--- end
---
--- function context.poptracing()
--- poplogger()
--- tracestacktop = remove(tracestack) or false
--- settracing(tracestacktop)
--- end
-
function context.getlogger()
- return flush, writer, flush_direct
+ return flush, writer, flushdirect
end
+trackers.register("context.trace",context.settracing)
+
local trace_cld = false trackers.register("context.files", function(v) trace_cld = v end)
do
@@ -1507,13 +1133,9 @@ do
if level == 0 then
collected = { }
nofcollected = 0
- --
flush = collect
flushdirect = collectdirect
permitted = tracingpermitted
- --
- context.__flush = flush
- context.__flushdirect = flushdirect
end
level = level + 1
end
@@ -1521,18 +1143,14 @@ do
function context.stopcollecting()
level = level - 1
if level < 1 then
+ local result = concat(collected,sentinel)
flush = normalflush
flushdirect = normalflushdirect
tracingpermitted = permitted
- --
- context.__flush = flush
- context.__flushdirect = flushdirect
- --
- viafile(concat(collected,sentinel))
- --
- collected = nil
- nofcollected = 0
- level = 0
+ collected = nil
+ nofcollected = 0
+ level = 0
+ viafile(result)
end
end
@@ -1576,105 +1194,85 @@ end
-- context.delayed (todo: lines)
-local delayed = { } context.delayed = delayed -- creates function (maybe also store them)
+do
+
+ local delayed = { }
+
+ local function indexer(parent,k)
+ local f = function(...)
+ local a = { ... }
+ return function()
+ -- return context[k](unpack(a))
+ return core[k](unpack(a))
+ end
+ end
+ parent[k] = f
+ return f
+ end
-local function indexer(parent,k)
- local f = function(...)
+ local function caller(parent,...) -- todo: nodes
local a = { ... }
return function()
- return context[k](unpack(a))
+ -- return context(unpack(a))
+ return defaultcaller(context,unpack(a))
end
end
- parent[k] = f
- return f
-end
-local function caller(parent,...) -- todo: nodes
- local a = { ... }
- return function()
- return context(unpack(a))
- end
+ setmetatableindex(delayed,indexer)
+ setmetatablecall (delayed,caller)
+
+ context.delayed = delayed
+
end
--- local function indexer(parent,k)
--- local f = function(a,...)
--- if not a then
--- return function()
--- return context[k]()
--- end
--- elseif select("#",...) == 0 then
--- return function()
--- return context[k](a)
--- end
--- elseif a then
--- local t = { ... }
--- return function()
--- return context[k](a,unpack(t))
--- end
--- end
--- end
--- parent[k] = f
--- return f
--- end
---
--- local function caller(parent,a,...) -- todo: nodes
--- if not a then
--- return function()
--- return context()
--- end
--- elseif select("#",...) == 0 then
--- return function()
--- return context(a)
--- end
--- elseif a then
--- local t = { ... }
--- return function()
--- return context(a,unpack(t))
--- end
--- end
--- end
+do
-setmetatable(delayed, { __index = indexer, __call = caller } )
+ -- context.nested (todo: lines), creates strings
--- context.nested (todo: lines)
+ local nested = { }
-local nested = { } context.nested = nested -- creates strings
+ 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
+ n = n + 1
+ t[n] = s and concat{f,s,...} or f -- optimized for #args == 1
+ end
+ -- context[k](...)
+ core[k](...)
+ flush = savedflush
+ return concat(t)
+ end
+ parent[k] = f
+ return f
+ end
-local function indexer(parent,k) -- not ok when traced
- local f = function(...)
+ local function caller(parent,...)
local t, savedflush, n = { }, flush, 0
flush = function(c,f,s,...) -- catcodes are ignored
n = n + 1
t[n] = s and concat{f,s,...} or f -- optimized for #args == 1
end
- context[k](...)
+ -- context(...)
+ defaultcaller(context,...)
flush = savedflush
return concat(t)
end
- parent[k] = f
- return f
-end
-local function caller(parent,...)
- local t, savedflush, n = { }, flush, 0
- flush = function(c,f,s,...) -- catcodes are ignored
- n = n + 1
- t[n] = s and concat{f,s,...} or f -- optimized for #args == 1
- end
- context(...)
- flush = savedflush
- return concat(t)
-end
+ setmetatableindex(nested,indexer)
+ setmetatablecall (nested,caller)
-setmetatable(nested, { __index = indexer, __call = caller } )
+ context.nested = nested
+
+end
-- verbatim
-function context.newindexer(catcodes)
+function context.newindexer(catcodes,cmdcodes)
local handler = { }
local function indexer(parent,k)
- local command = context[k]
+ local command = core[k]
local f = function(...)
local savedcatcodes = contentcatcodes
contentcatcodes = catcodes
@@ -1692,238 +1290,277 @@ function context.newindexer(catcodes)
contentcatcodes = savedcatcodes
end
- setmetatable(handler, { __index = indexer, __call = caller } )
+ handler.cs = setmetatableindex(function(parent,k)
+ local c = "\\" .. k -- tostring(k)
+ local f = function()
+ flush(cmdcodes,c)
+ end
+ parent[k] = f
+ return f
+ end)
+
+ setmetatableindex(handler,indexer)
+ setmetatablecall (handler,caller)
return handler
end
-context.verbatim = context.newindexer(vrbcatcodes)
-context.puretext = context.newindexer(txtcatcodes)
--------.protected = context.newindexer(prtcatcodes)
+context.verbatim = context.newindexer(vrbcatcodes,ctxcatcodes)
+context.puretext = context.newindexer(txtcatcodes,ctxcatcodes)
+context.protected = context.newindexer(prtcatcodes,prtcatcodes)
-- formatted
-local formatted = { } context.formatted = formatted
+do
+
+ local formatted = { }
--- local function indexer(parent,k)
--- local command = context[k]
--- local f = function(fmt,...)
--- command(formatters[fmt](...))
+ -- formatted.command([catcodes,]format[,...])
+
+-- local function formattedflush(parent,c,catcodes,fmt,...)
+-- if type(catcodes) == "number" then
+-- if fmt then
+-- local result
+-- pushcatcodes(catcodes)
+-- result = writer(parent,c,formatters[fmt](...))
+-- popcatcodes()
+-- return result
+-- else
+-- -- no need to change content catcodes
+-- return writer(parent,c)
+-- end
+-- else
+-- return writer(parent,c,formatters[catcodes](fmt,...))
+-- end
-- end
--- parent[k] = f
--- return f
--- end
-local function indexer(parent,k)
- if type(k) == "string" then
- local c = "\\" .. tostring(generics[k] or k)
- local f = function(first,second,...)
- if first == nil then
- flush(currentcatcodes,c)
- elseif second then
- return writer(parent,c,formatters[first](second,...))
- else
- return writer(parent,c,first)
- end
+ local function formattedflush(parent,c,catcodes,fmt,...)
+ if not catcodes then
+ return writer(parent,c)
+ elseif not fmt then
+ return writer(parent,c,catcodes)
+ elseif type(catcodes) == "number" then
+ local result
+ pushcatcodes(catcodes)
+ result = writer(parent,c,formatters[fmt](...))
+ popcatcodes()
+ return result
+ else
+ return writer(parent,c,formatters[catcodes](fmt,...))
end
- parent[k] = f
- return f
- else
- return context -- catch
end
-end
-
--- local function caller(parent,...)
--- context.fprint(...)
--- end
-local function caller(parent,catcodes,fmt,first,...)
- if type(catcodes) == "number" then
- if first then
- flush(catcodes,formatters[fmt](first,...))
+ local function indexer(parent,k)
+ if type(k) == "string" then
+ local c = "\\" .. k
+ local f = function(first,...)
+ if first == nil then
+ flush(currentcatcodes,c)
+ else
+ return formattedflush(parent,c,first,...)
+ end
+ end
+ parent[k] = f
+ return f
else
- flush(catcodes,fmt)
+ return context -- catch
end
- else
- if fmt then
- flush(formatters[catcodes](fmt,first,...))
- else
+ end
+
+ -- formatted([catcodes,]format[,...])
+
+ local function caller(parent,catcodes,fmt,...)
+ if not catcodes then
+ -- nothing
+ elseif not fmt then
flush(catcodes)
+ elseif type(catcodes) == "number" then
+ flush(catcodes,formatters[fmt](...))
+ else
+ flush(formatters[catcodes](fmt,...))
end
end
+
+ setmetatableindex(formatted,indexer)
+ setmetatablecall (formatted,caller)
+
+ context.formatted = formatted
+
end
-setmetatable(formatted, { __index = indexer, __call = caller } )
+do
--- metafun (this will move to another file)
+ -- metafun (this will move to another file)
-local metafun = { } context.metafun = metafun
+ local metafun = { }
-local mpdrawing = "\\MPdrawing"
+ function metafun.start()
+ context.startMPcode()
+ end
-local function caller(parent,f,a,...)
- if not parent then
- -- skip
- elseif f then
- local typ = type(f)
- if typ == "string" then
- if a then
- flush(currentcatcodes,mpdrawing,"{",formatters[f](a,...),"}")
- else
- flush(currentcatcodes,mpdrawing,"{",f,"}")
- end
- elseif typ == "number" then
- if a then
- flush(currentcatcodes,mpdrawing,"{",f,a,...,"}")
- else
- flush(currentcatcodes,mpdrawing,"{",f,"}")
- end
- elseif typ == "function" then
- -- ignored: a ...
- flush(currentcatcodes,mpdrawing,"{\\cldl",store_(f),"}")
- -- flush(currentcatcodes,mpdrawing,"{",store_(f),"}")
- elseif typ == "boolean" then
- -- ignored: a ...
- if f then
- flush(currentcatcodes,mpdrawing,"{^^M}")
- else
- report_context("warning: %a gets argument 'false' which is currently unsupported","metafun")
- end
- else
- report_context("error: %a gets a weird argument %a","metafun",tostring(f))
- end
+ function metafun.stop()
+ context.stopMPcode()
end
-end
-setmetatable(metafun, { __call = caller } )
+ setmetatablecall(metafun,defaultcaller)
-function metafun.start()
- context.resetMPdrawing()
-end
+ function metafun.color(name) -- obsolete
+ return name -- formatters[ [[\MPcolor{%s}]] ](name)
+ end
-function metafun.stop()
- context.MPdrawingdonetrue()
- context.getMPdrawing()
-end
+ -- metafun.delayed
-function metafun.color(name)
- return formatters[ [[\MPcolor{%s}]] ](name)
-end
+ local delayed = { }
--- metafun.delayed
+ local function indexer(parent,k)
+ local f = function(...)
+ local a = { ... }
+ return function()
+ return metafun[k](unpack(a))
+ end
+ end
+ parent[k] = f
+ return f
+ end
-local delayed = { } metafun.delayed = delayed
-local function indexer(parent,k)
- local f = function(...)
+ local function caller(parent,...)
local a = { ... }
return function()
- return metafun[k](unpack(a))
+ return metafun(unpack(a))
end
end
- parent[k] = f
- return f
-end
+ setmetatableindex(delayed,indexer)
+ setmetatablecall (delayed,caller)
-local function caller(parent,...)
- local a = { ... }
- return function()
- return metafun(unpack(a))
- end
-end
+ context.metafun = metafun
+ metafun.delayed = delayed
-setmetatable(delayed, { __index = indexer, __call = caller } )
+end
-- helpers:
-function context.concat(...)
- context(concat(...))
-end
+do
+
+ function context.concat(...)
+ context(concat(...))
+ end
+
+ local p_texescape = patterns.texescape
+
+ function context.escaped(s)
+ if s then
+ context(lpegmatch(p_texescape,s) or s)
+ else
+ -- context("")
+ end
+ end
-local p_texescape = patterns.texescape
+ function context.escape(s)
+ if s then
+ return lpegmatch(p_texescape,s) or s
+ else
+ return ""
+ end
+ end
-function context.escaped(s)
- return lpegmatch(p_texescape,s) or s
end
-- templates
-local single = lpegP("%")
-local double = lpegP("%%")
-local lquoted = lpegP("%[")
-local rquoted = lpegP("]%")
+do
-local start = [[
-local texescape = lpeg.patterns.texescape
-local lpegmatch = lpeg.match
-return function(variables) return
-]]
+ local single = lpegP("%")
+ local double = lpegP("%%")
+ local lquoted = lpegP("%[")
+ local rquoted = lpegP("]%")
+ local space = lpegP(" ")
-local stop = [[
-end
-]]
-
-local replacer = lpegP { "parser",
- parser = lpegCs(lpegCc(start) * lpegV("step") * (lpegCc("..") * lpegV("step"))^0 * lpegCc(stop)),
- unquoted = (lquoted/'') * ((lpegC((1-rquoted)^1)) / "lpegmatch(texescape,variables['%0'] or '')" ) * (rquoted/''),
- escape = double/'%%',
- key = (single/'') * ((lpegC((1-single)^1)) / "(variables['%0'] or '')" ) * (single/''),
- step = lpegV("unquoted")
- + lpegV("escape")
- + lpegV("key")
- + lpegCc("\n[===[") * (1 - lpegV("unquoted") - lpegV("escape") - lpegV("key"))^1 * lpegCc("]===]\n"),
-}
+ local start = [[
+ local texescape = lpeg.patterns.texescape
+ local lpegmatch = lpeg.match
+ return function(variables) return
+ ]]
-local templates = { }
+ local stop = [[
+ end
+ ]]
+
+ local replacer = lpegP { "parser",
+ parser = lpegCs(lpegCc(start) * lpegV("step") * (lpegCc("..") * lpegV("step"))^0 * lpegCc(stop)),
+ unquoted = (lquoted*space/'')
+ * ((lpegC((1-space*rquoted)^1)) / "lpegmatch(texescape,variables%0 or '')" )
+ * (space*rquoted/'')
+ + (lquoted/'')
+ * ((lpegC((1-rquoted)^1)) / "lpegmatch(texescape,variables['%0'] or '')" )
+ * (rquoted/''),
+ key = (single*space/'')
+ * ((lpegC((1-space*single)^1)) / "(variables%0 or '')" )
+ * (space*single/'')
+ + (single/'')
+ * ((lpegC((1-single)^1)) / "(variables['%0'] or '')" )
+ * (single/''),
+ escape = double/'%%',
+ step = lpegV("unquoted")
+ + lpegV("escape")
+ + lpegV("key")
+ + lpegCc("\n[===[") * (1 - lpegV("unquoted") - lpegV("escape") - lpegV("key"))^1 * lpegCc("]===]\n"),
+ }
+
+ local templates = { }
-local function indexer(parent,k)
- local v = lpegmatch(replacer,k)
- if not v then
- v = "error: no valid template (1)"
- else
- v = loadstring(v)
- if type(v) ~= "function" then
- v = "error: no valid template (2)"
+ local function indexer(parent,k)
+ local v = lpegmatch(replacer,k)
+ if not v then
+ -- report_template("invalid template:\n%s",k)
+ v = "error: no valid template (1)"
else
- v = v()
- if not v then
- v = "error: no valid template (3)"
- end
- end
- end
- if type(v) == "function" then
- local f = function(first,second)
- if second then
- pushcatcodes(first)
- flushlines(v(second))
- popcatcodes()
+ local f = loadstring(v)
+ if type(f) ~= "function" then
+ -- report_template("invalid template:\n%s\n=>\n%s",k,v)
+ v = "error: no valid template (2)"
else
- flushlines(v(first))
+ f = f()
+ if not f then
+ -- report_template("invalid template:\n%s\n=>\n%s",k,v)
+ v = "error: no valid template (3)"
+ else
+ v = f
+ end
end
end
- parent[k] = f
- return f
- else
- return function()
- flush(v)
+ if type(v) == "function" then
+ local f = function(first,second)
+ if second then
+ pushcatcodes(first)
+ flushlines(v(second))
+ popcatcodes()
+ else
+ flushlines(v(first))
+ end
+ end
+ parent[k] = f
+ return f
+ else
+ return function()
+ flush(v)
+ end
end
+
end
-end
+ local function caller(parent,k,...)
+ return parent[k](...)
+ end
-local function caller(parent,k,...)
- return parent[k](...)
-end
+ setmetatableindex(templates,indexer)
+ setmetatablecall (templates,caller)
-setmetatable(templates, { __index = indexer, __call = caller } )
+ context.templates = templates
-function context.template(template,...)
- context(templates[template](...))
end
-context.templates = templates
-
-- The above is a bit over the top as we could also stick to a simple context.replace
-- which is fast enough anyway, but the above fits in nicer, also with the catcodes.
--
diff --git a/tex/context/base/mkiv/cldf-int.lua b/tex/context/base/mkiv/cldf-int.lua
index 2743e4924..a97eadf35 100644
--- a/tex/context/base/mkiv/cldf-int.lua
+++ b/tex/context/base/mkiv/cldf-int.lua
@@ -26,7 +26,7 @@ local trace_define = false trackers.register("context.define", function(v) tr
interfaces = interfaces or { }
-_clmh_ = utilities.parsers.settings_to_array
+_clmh_ = utilities.parsers.settings_to_hash
_clma_ = utilities.parsers.settings_to_array
local starters, stoppers, macros, stack = { }, { }, { }, { }
@@ -66,6 +66,8 @@ _clmn_ = tonumber
local estart = interfaces.elements.start
local estop = interfaces.elements.stop
+-- this is a bit old definition ... needs to be modernized
+
function interfaces.definecommand(name,specification) -- name is optional
if type(name) == "table" then
specification = name
@@ -172,51 +174,51 @@ function interfaces.tolist(t)
return concat(r,", ")
end
---~ \startluacode
---~ function test(opt_1, opt_2, arg_1)
---~ context.startnarrower()
---~ context("options 1: %s",interfaces.tolist(opt_1))
---~ context.par()
---~ context("options 2: %s",interfaces.tolist(opt_2))
---~ context.par()
---~ context("argument 1: %s",arg_1)
---~ context.stopnarrower()
---~ end
-
---~ interfaces.definecommand {
---~ name = "test",
---~ arguments = {
---~ { "option", "list" },
---~ { "option", "hash" },
---~ { "content", "string" },
---~ },
---~ macro = test,
---~ }
---~ \stopluacode
-
---~ test: \test[1][a=3]{whatever}
-
---~ \startluacode
---~ local function startmore(opt_1)
---~ context.startnarrower()
---~ context("start more, options: %s",interfaces.tolist(opt_1))
---~ context.startnarrower()
---~ end
-
---~ local function stopmore(opt_1)
---~ context.stopnarrower()
---~ context("stop more, options: %s",interfaces.tolist(opt_1))
---~ context.stopnarrower()
---~ end
-
---~ interfaces.definecommand ( "more", {
---~ environment = true,
---~ arguments = {
---~ { "option", "list" },
---~ },
---~ starter = startmore,
---~ stopper = stopmore,
---~ } )
---~ \stopluacode
-
---~ more: \startmore[1] one \startmore[2] two \stopmore one \stopmore
+-- \startluacode
+-- function test(opt_1, opt_2, arg_1)
+-- context.startnarrower()
+-- context("options 1: %s",interfaces.tolist(opt_1))
+-- context.par()
+-- context("options 2: %s",interfaces.tolist(opt_2))
+-- context.par()
+-- context("argument 1: %s",arg_1)
+-- context.stopnarrower()
+-- end
+--
+-- interfaces.definecommand {
+-- name = "test",
+-- arguments = {
+-- { "option", "list" },
+-- { "option", "hash" },
+-- { "content", "string" },
+-- },
+-- macro = test,
+-- }
+-- \stopluacode
+--
+-- test: \test[1][a=3]{whatever}
+--
+-- \startluacode
+-- local function startmore(opt_1)
+-- context.startnarrower()
+-- context("start more, options: %s",interfaces.tolist(opt_1))
+-- context.startnarrower()
+-- end
+--
+-- local function stopmore(opt_1)
+-- context.stopnarrower()
+-- context("stop more, options: %s",interfaces.tolist(opt_1))
+-- context.stopnarrower()
+-- end
+--
+-- interfaces.definecommand ( "more", {
+-- environment = true,
+-- arguments = {
+-- { "option", "list" },
+-- },
+-- starter = startmore,
+-- stopper = stopmore,
+-- } )
+-- \stopluacode
+--
+-- more: \startmore[1] one \startmore[2] two \stopmore one \stopmore
diff --git a/tex/context/base/mkiv/cldf-scn.lua b/tex/context/base/mkiv/cldf-scn.lua
index 755d7fed7..4a90c5b7e 100644
--- a/tex/context/base/mkiv/cldf-scn.lua
+++ b/tex/context/base/mkiv/cldf-scn.lua
@@ -122,7 +122,7 @@ function interfaces.implement(specification)
command = args
for i=1,#actions do
command = f_action_f(i,command)
- f[#f+1] = f_action_s(i,i)
+ f[i] = f_action_s(i,i)
end
command = f_command(f,args,command)
command = load(command)
diff --git a/tex/context/base/mkiv/cldf-stp.lua b/tex/context/base/mkiv/cldf-stp.lua
index 7b5225dd3..eeed47594 100644
--- a/tex/context/base/mkiv/cldf-stp.lua
+++ b/tex/context/base/mkiv/cldf-stp.lua
@@ -28,16 +28,16 @@ if not modules then modules = { } end modules ['cldf-stp'] = {
-- ...
-- end)
-local create = coroutine.create
-local yield = coroutine.yield
-local resume = coroutine.resume
-local status = coroutine.status
+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 stepper = nil
+local stack = { } -- will never be deep so no gc needed
+local depth = 0
-local nextstep = function()
+local function nextstep()
if status(stepper) == "dead" then
stepper = stack[depth]
depth = depth - 1
@@ -51,13 +51,13 @@ interfaces.implement {
actions = nextstep,
}
-local cldresume = context.constructcsonly("clf_step")
+local ctx_resume = context.protected.cs.clf_step
function context.step(first,...)
if first ~= nil then
context(first,...)
end
- cldresume()
+ ctx_resume()
yield()
end
@@ -65,5 +65,5 @@ function context.stepwise(f)
depth = depth + 1
stack[depth] = stepper
stepper = create(f)
- resume(stepper)
+ ctx_resume(stepper)
end
diff --git a/tex/context/base/mkiv/cldf-ver.lua b/tex/context/base/mkiv/cldf-ver.lua
index 66432eb1c..3710b2415 100644
--- a/tex/context/base/mkiv/cldf-ver.lua
+++ b/tex/context/base/mkiv/cldf-ver.lua
@@ -11,7 +11,7 @@ if not modules then modules = { } end modules ['cldf-ver'] = {
-- better when used mixed with other code (synchronization issue).
local concat, tohandle = table.concat, table.tohandle
-local find, splitlines = string.find, string.splitlines
+local splitlines, strip = string.splitlines, string.strip
local tostring, type = tostring, type
local context = context
@@ -28,11 +28,15 @@ local function t_tocontext(...)
context.popcatcodes()
end
-local function s_tocontext(...) -- we need to catch {\}
+local function s_tocontext(first,...) -- we need to catch {\}
context.type()
context("{")
context.pushcatcodes("verbatim")
- context(concat({...}," "))
+ if first then
+ context(first) -- no need to waste a { }
+ else
+ context(concat({first,...}," "))
+ end
context.popcatcodes()
context("}")
end
@@ -44,34 +48,41 @@ end
table .tocontext = t_tocontext
string .tocontext = s_tocontext
boolean.tocontext = b_tocontext
+number .tocontext = s_tocontext
+
+local tocontext = {
+ ["string"] = s_tocontext,
+ ["table"] = t_tocontext,
+ ["boolean"] = b_tocontext,
+ ["number"] = s_tocontext,
+ ["function"] = function() s_tocontext("<function>") end,
+ ["nil"] = function() s_tocontext("<nil>") end,
+ -- ------------ = -------- can be extended elsewhere
+}
-function context.tocontext(first,...)
- local t = type(first)
- if t == "string" then
- s_tocontext(first,...)
- elseif t == "table" then
- t_tocontext(first,...)
- elseif t == "boolean" then
- b_tocontext(first,...)
+table.setmetatableindex(tocontext,function(t,k)
+ local v = function(s)
+ s_tocontext("<"..tostring(s)..">")
end
-end
+ t[k] = v
+ return v
+end)
+
+table.setmetatablecall(tocontext,function(t,k,...)
+ tocontext[type(k)](k)
+end)
--- function context.tobuffer(name,str)
--- context.startbuffer { name }
--- context.pushcatcodes("verbatim")
--- local lines = (type(str) == "string" and find(str,"[\n\r]") and splitlines(str)) or str
--- for i=1,#lines do
--- context(lines[i] .. " ")
--- end
--- context.stopbuffer()
--- context.popcatcodes()
--- end
+context.tocontext = tocontext
context.tobuffer = buffers.assign -- (name,str,catcodes)
-function context.tolines(str)
+function context.tolines(str,strip)
local lines = type(str) == "string" and splitlines(str) or str
for i=1,#lines do
- context(lines[i] .. " ")
+ if strip then
+ context(strip(lines[i]) .. " ")
+ else
+ context(lines[i] .. " ")
+ end
end
end
diff --git a/tex/context/base/mkiv/colo-ext.mkiv b/tex/context/base/mkiv/colo-ext.mkiv
index 74ce2d3e5..98aaaa8aa 100644
--- a/tex/context/base/mkiv/colo-ext.mkiv
+++ b/tex/context/base/mkiv/colo-ext.mkiv
@@ -46,8 +46,8 @@
\installcorenamespace{colorintent}
-\unexpanded\def\registercolorintent#1#2%
- {\setevalue{\??colorintent#1}{\attribute\colorintentattribute\clf_registercolorintent{#2}}}
+\unexpanded\def\registercolorintent#1#2% \relax is needed !
+ {\setevalue{\??colorintent#1}{\attribute\colorintentattribute\clf_registercolorintent{#2}\relax}}
\unexpanded\def\colo_intents_set
{\clf_enablecolorintents
diff --git a/tex/context/base/mkiv/colo-imp-rainbow.mkiv b/tex/context/base/mkiv/colo-imp-rainbow.mkiv
new file mode 100644
index 000000000..c9686d755
--- /dev/null
+++ b/tex/context/base/mkiv/colo-imp-rainbow.mkiv
@@ -0,0 +1,252 @@
+%D \module
+%D [ file=colo-imp-rainbow,
+%D version=2016.03.21,
+%D title=\CONTEXT\ Color Macros,
+%D subtitle=X11,
+%D author=Alan Braslau]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D \subsubject{For scientists by scientists}
+%D
+%D We define color groups having equal gray scale values by either reducing
+%D their rgb values to darken them or by adding equal amounts of $r=g=b$ to
+%D lighten them.
+%D
+%D \startformula
+%D s = .3r + .59g + .11b
+%D \stopformula
+%D
+%D By the way, \CONTEXT\ has always used this formula internally when colors
+%D are converted to gray.
+
+\definecolorgroup
+ [gray]
+ [0.1:0.1:0.1,
+ 0.2:0.2:0.2,
+ 0.3:0.3:0.3,
+ 0.4:0.4:0.4,
+ 0.5:0.5:0.5,
+ 0.6:0.6:0.6,
+ 0.7:0.7:0.7,
+ 0.8:0.8:0.8,
+ 0.9:0.9:0.9,
+ 1.0:1.0:1.0]
+
+\definecolorgroup
+ [red]
+ [0.333:0.000:0.000,
+ 0.667:0.000:0.000,
+ 1.000:0.000:0.000,
+ 1.000:0.143:0.143,
+ 1.000:0.286:0.286,
+ 1.000:0.429:0.429,
+ 1.000:0.571:0.571,
+ 1.000:0.714:0.714,
+ 1.000:0.857:0.857]
+
+\definecolorgroup
+ [green]
+ [0.000:0.169:0.000,
+ 0.000:0.339:0.000,
+ 0.000:0.508:0.000,
+ 0.000:0.678:0.000,
+ 0.000:0.847:0.000,
+ 0.024:1.000:0.024,
+ 0.268:1.000:0.268,
+ 0.512:1.000:0.512,
+ 0.756:1.000:0.756]
+
+\definecolorgroup
+ [blue]
+ [0.000:0.000:0.909,
+ 0.101:0.101:1.000,
+ 0.213:0.213:1.000,
+ 0.326:0.326:1.000,
+ 0.438:0.438:1.000,
+ 0.551:0.551:1.000,
+ 0.663:0.663:1.000,
+ 0.775:0.775:1.000,
+ 0.888:0.888:1.000]
+
+\definecolorgroup
+ [cyan]
+ [0.000:0.143:0.143,
+ 0.000:0.286:0.286,
+ 0.000:0.429:0.429,
+ 0.000:0.571:0.571,
+ 0.000:0.714:0.714,
+ 0.000:0.857:0.857,
+ 0.000:1.000:1.000,
+ 0.333:1.000:1.000,
+ 0.667:1.000:1.000]
+
+\definecolorgroup
+ [magenta]
+ [0.244:0.000:0.244,
+ 0.488:0.000:0.488,
+ 0.732:0.000:0.732,
+ 0.976:0.000:0.976,
+ 1.000:0.153:1.000,
+ 1.000:0.322:1.000,
+ 1.000:0.492:1.000,
+ 1.000:0.661:1.000,
+ 1.000:0.831:1.000]
+
+\definecolorgroup
+ [yellow]
+ [0.112:0.112:0.000,
+ 0.225:0.225:0.000,
+ 0.337:0.337:0.000,
+ 0.449:0.449:0.000,
+ 0.562:0.562:0.000,
+ 0.674:0.674:0.000,
+ 0.787:0.787:0.000,
+ 0.899:0.899:0.000,
+ 1.000:1.000:0.091]
+
+\definecolorgroup
+ [orange]
+ [0.147:0.095:0.000,
+ 0.293:0.190:0.000,
+ 0.440:0.285:0.000,
+ 0.587:0.380:0.000,
+ 0.733:0.475:0.000,
+ 0.880:0.569:0.000,
+ 1.000:0.673:0.026,
+ 1.000:0.816:0.169,
+ 1.000:0.959:0.312]
+
+\definecolorgroup
+ [violet]
+ [0.137:0.075:0.137,
+ 0.273:0.149:0.273,
+ 0.410:0.224:0.410,
+ 0.546:0.298:0.546,
+ 0.683:0.373:0.683,
+ 0.819:0.448:0.819,
+ 0.950:0.527:0.950,
+ 1.000:0.661:1.000,
+ 1.000:0.831:1.000]
+
+\definecolorgroup
+ [brown]
+ [0.209:0.053:0.053,
+ 0.417:0.106:0.106,
+ 0.627:0.160:0.160,
+ 0.737:0.255:0.255,
+ 0.837:0.355:0.355,
+ 0.937:0.455:0.455,
+ 1.000:0.571:0.571,
+ 1.000:0.714:0.714,
+ 1.000:0.857:0.857]
+
+%D Define \quote{rainbow} color palets having equal grayscale values.
+%D The names correspond to the number color codes used on electrical resistances.
+
+\dorecurse {9} {
+ \definepalet
+ [rainbow#1]
+ [ one#1=brown:#1,
+ two#1=red:#1,
+ three#1=orange:#1,
+ four#1=yellow:#1,
+ five#1=green:#1,
+ six#1=blue:#1,
+ seven#1=violet:#1,
+ eight#1=gray:#1]
+}
+
+%D Define two more color palets showing grayscale contrast.
+%D Note that \emph{none} of these palets are very aesthetic!
+
+\definepalet
+ [rainbow0]
+ [ one0=brown:8,
+ two0=red:7,
+ three0=orange:6,
+ four0=yellow:5,
+ five0=green:4,
+ six0=blue:3,
+ seven0=violet:2,
+ eight0=gray:1]
+
+\definepalet
+ [rainbow]
+ [ zero=black,
+ one=brown:1,
+ two=red:2,
+ three=orange:3,
+ four=yellow:4,
+ five=green:5,
+ six=blue:6,
+ seven=violet:7,
+ eight=gray:8,
+ nine=white]
+
+\continueifinputfile{colo-imp-rainbow.mkiv}
+
+\usemodule[art-01] \setupbodyfont[8pt]
+
+\starttexdefinition ShowSomething #1
+ \startpacked
+ \dorecurse {9} {
+ \dontleavehmode
+ \start
+ \ttbf
+ \color [#1:##1] {\hbox to 6em{#1:##1\hss}}
+ \tttf
+ \quad
+ \colorvalue {#1:##1}
+ \quad
+ \grayvalue {#1:##1}
+ \quad
+ \stop
+ \par
+ }
+ \stoppacked
+\stoptexdefinition
+
+\starttext
+
+ \startcolumns [n=2,distance=0pt]
+ \ShowSomething {gray}
+ \ShowSomething {brown}
+ \ShowSomething {red}
+ \ShowSomething {orange}
+ \ShowSomething {yellow}
+ \ShowSomething {green}
+ \column
+ \ShowSomething {cyan}
+ \ShowSomething {blue}
+ \ShowSomething {magenta}
+ \ShowSomething {violet}
+ \stopcolumns
+
+ \startalignment [flushleft]
+ \dontleavehmode
+ \showcolorgroup [brown] [vertical,name,number]
+ \showcolorgroup [red] [vertical,name]
+ \showcolorgroup [orange] [vertical,name]
+ \showcolorgroup [yellow] [vertical,name]
+ \showcolorgroup [green] [vertical,name]
+ \showcolorgroup [cyan] [vertical,name]
+ \showcolorgroup [blue] [vertical,name]
+ \showcolorgroup [violet] [vertical,name]
+ \showcolorgroup [magenta] [vertical,name]
+ \showcolorgroup [gray] [vertical,name]
+ \stopalignment
+
+ \page
+
+ \dorecurse {9} {
+ \comparepalet [rainbow#1]
+ }
+
+ \comparepalet [rainbow0]
+
+ \comparepalet [rainbow]
+
+\stoptext
diff --git a/tex/context/base/mkiv/colo-imp-rgb.mkiv b/tex/context/base/mkiv/colo-imp-rgb.mkiv
index 58b2ca42c..934071ed9 100644
--- a/tex/context/base/mkiv/colo-imp-rgb.mkiv
+++ b/tex/context/base/mkiv/colo-imp-rgb.mkiv
@@ -112,8 +112,8 @@
\definecolor [gruen] [green]
\definecolor [blau] [blue]
- \definecolor [cyan] [cyan]
- \definecolor [magenta] [magenta]
+ %definecolor [cyan] [cyan]
+ %definecolor [magenta] [magenta]
\definecolor [gelb] [yellow]
\definecolor [weiss] [white]
@@ -245,8 +245,8 @@
\definecolor [vert] [green]
\definecolor [bleu] [blue]
- \definecolor [cyan] [cyan]
- \definecolor [magenta] [magenta]
+ %\definecolor [cyan] [cyan]
+ %\definecolor [magenta] [magenta]
\definecolor [jaune] [yellow]
\definecolor [blanche] [white]
@@ -290,7 +290,7 @@
\definecolor [albastru] [blue]
\definecolor [cian] [cyan]
- \definecolor [magenta] [magenta]
+ %\definecolor [magenta] [magenta]
\definecolor [galben] [yellow]
\definecolor [alb] [white]
diff --git a/tex/context/base/mkiv/colo-imp-solarized.mkiv b/tex/context/base/mkiv/colo-imp-solarized.mkiv
new file mode 100644
index 000000000..872e6b701
--- /dev/null
+++ b/tex/context/base/mkiv/colo-imp-solarized.mkiv
@@ -0,0 +1,38 @@
+%D \module
+%D [ file=colo-imp-solarized,
+%D version=2017.02.10,
+%D title=\CONTEXT\ Color Macros,
+%D subtitle=Solarized,
+%D author=Aditya Mahajan,
+%D ]
+%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 Colors based on solarized scheme:
+%D
+%D \hyphenatedurl{http://ethanschoonover.com/solarized}
+
+\startprotectedcolors
+
+ \definecolor [base03] [h=002b36]
+ \definecolor [base02] [h=073642]
+ \definecolor [base01] [h=586e75]
+ \definecolor [base00] [h=657b83]
+ \definecolor [base0] [h=839496]
+ \definecolor [base1] [h=93a1a1]
+ \definecolor [base2] [h=eee8d5]
+ \definecolor [base3] [h=fdf6e3]
+ \definecolor [yellow] [h=b58900]
+ \definecolor [orange] [h=cb4b16]
+ \definecolor [red] [h=dc322f]
+ \definecolor [magenta] [h=d33682]
+ \definecolor [violet] [h=6c71c4]
+ \definecolor [blue] [h=268bd2]
+ \definecolor [cyan] [h=2aa198]
+ \definecolor [green] [h=859900]
+
+\stopprotectedcolors
+
+\endinput
diff --git a/tex/context/base/mkiv/colo-ini.lua b/tex/context/base/mkiv/colo-ini.lua
index 1a055242b..c074d3407 100644
--- a/tex/context/base/mkiv/colo-ini.lua
+++ b/tex/context/base/mkiv/colo-ini.lua
@@ -26,6 +26,9 @@ local context = context
local commands = commands
local implement = interfaces.implement
+local getnamespace = interfaces.getnamespace
+
+local mark = utilities.storage.mark
local settings_to_hash_strict = utilities.parsers.settings_to_hash_strict
@@ -33,12 +36,17 @@ local colors = attributes.colors
local transparencies = attributes.transparencies
local colorintents = attributes.colorintents
local registrations = backends.registrations
+
+local v_reset = interfaces.variables.reset
+
local texsetattribute = tex.setattribute
local texgetattribute = tex.getattribute
+local texgetcount = tex.getcount
+local texgettoks = tex.gettoks
local a_color = attributes.private('color')
local a_transparency = attributes.private('transparency')
-local a_colorspace = attributes.private('colormodel')
+local a_colormodel = attributes.private('colormodel')
local register_color = colors.register
local attributes_list = attributes.list
@@ -46,12 +54,36 @@ local attributes_list = attributes.list
local colorvalues = colors.values
local transparencyvalues = transparencies.values
-colors.sets = colors.sets or { } -- sets are mostly used for
+colors.sets = mark(colors.sets or { }) -- sets are mostly used for
local colorsets = colors.sets -- showing lists of defined
local colorset = { } -- colors
colorsets.default = colorset
+local valid = mark(colors.valid or { })
+colors.valid = valid
+local counts = mark(colors.counts or { })
+colors.counts = counts
+
+storage.register("attributes/colors/sets", colorsets, "attributes.colors.sets")
+storage.register("attributes/colors/valid", valid, "attributes.colors.valid")
+storage.register("attributes/colors/counts", counts, "attributes.colors.counts")
+
+local function currentmodel()
+ return texgetattribute(a_colormodel)
+end
+
+colors.currentmodel = currentmodel
-storage.register("attributes/colors/sets",colorsets,"attributes.colors.sets")
+local function synccolor(name)
+ valid[name] = true
+end
+
+local function synccolorclone(name,clone)
+ valid[name] = clone
+end
+
+local function synccolorcount(name,n)
+ counts[name] = n
+end
local stack = { }
@@ -76,18 +108,18 @@ colors.pushset = pushset
colors.popset = popset
colors.setlist = setlist
-local context_colordefagc = context.colordefagc
-local context_colordefagt = context.colordefagt
-local context_colordefalc = context.colordefalc
-local context_colordefalt = context.colordefalt
-local context_colordeffgc = context.colordeffgc
-local context_colordeffgt = context.colordeffgt
-local context_colordefflc = context.colordefflc
-local context_colordefflt = context.colordefflt
-local context_colordefrgc = context.colordefrgc
-local context_colordefrgt = context.colordefrgt
-local context_colordefrlc = context.colordefrlc
-local context_colordefrlt = context.colordefrlt
+local ctx_colordefagc = context.colordefagc
+local ctx_colordefagt = context.colordefagt
+local ctx_colordefalc = context.colordefalc
+local ctx_colordefalt = context.colordefalt
+local ctx_colordeffgc = context.colordeffgc
+local ctx_colordeffgt = context.colordeffgt
+local ctx_colordefflc = context.colordefflc
+local ctx_colordefflt = context.colordefflt
+local ctx_colordefrgc = context.colordefrgc
+local ctx_colordefrgt = context.colordefrgt
+local ctx_colordefrlc = context.colordefrlc
+local ctx_colordefrlt = context.colordefrlt
local function definecolor(name, ca, global)
if ca and ca > 0 then
@@ -95,18 +127,18 @@ local function definecolor(name, ca, global)
if trace_define then
report_colors("define global color %a with attribute %a",name,ca)
end
- context_colordefagc(name,ca)
+ ctx_colordefagc(name,ca)
else
if trace_define then
report_colors("define local color %a with attribute %a",name,ca)
end
- context_colordefalc(name,ca)
+ ctx_colordefalc(name,ca)
end
else
if global then
- context_colordefrgc(name)
+ ctx_colordefrgc(name)
else
- context_colordefrlc(name)
+ ctx_colordefrlc(name)
end
end
colorset[name] = true-- maybe we can store more
@@ -118,18 +150,18 @@ local function inheritcolor(name, ca, global)
if trace_define then
report_colors("inherit global color %a with attribute %a",name,ca)
end
- context_colordeffgc(name,ca) -- some day we will set the macro directly
+ ctx_colordeffgc(name,ca) -- some day we will set the macro directly
else
if trace_define then
report_colors("inherit local color %a with attribute %a",name,ca)
end
- context_colordefflc(name,ca)
+ ctx_colordefflc(name,ca)
end
else
if global then
- context_colordefrgc(name)
+ ctx_colordefrgc(name)
else
- context_colordefrlc(name)
+ ctx_colordefrlc(name)
end
end
colorset[name] = true-- maybe we can store more
@@ -141,18 +173,18 @@ local function definetransparent(name, ta, global)
if trace_define then
report_colors("define global transparency %a with attribute %a",name,ta)
end
- context_colordefagt(name,ta)
+ ctx_colordefagt(name,ta)
else
if trace_define then
report_colors("define local transparency %a with attribute %a",name,ta)
end
- context_colordefalt(name,ta)
+ ctx_colordefalt(name,ta)
end
else
if global then
- context_colordefrgt(name)
+ ctx_colordefrgt(name)
else
- context_colordefrlt(name)
+ ctx_colordefrlt(name)
end
end
end
@@ -163,18 +195,18 @@ local function inherittransparent(name, ta, global)
if trace_define then
report_colors("inherit global transparency %a with attribute %a",name,ta)
end
- context_colordeffgt(name,ta)
+ ctx_colordeffgt(name,ta)
else
if trace_define then
report_colors("inherit local transparency %a with attribute %a",name,ta)
end
- context_colordefflt(name,ta)
+ ctx_colordefflt(name,ta)
end
else
if global then
- context_colordefrgt(name)
+ ctx_colordefrgt(name)
else
- context_colordefrlt(name)
+ ctx_colordefrlt(name)
end
end
end
@@ -199,11 +231,18 @@ local transparent = {
luminosity = 16,
}
-local gray_okay, rgb_okay, cmyk_okay, spot_okay, multichannel_okay, forced = true, true, true, true, true, false
+transparencies.names = transparent
+
+local gray_okay = true
+local rgb_okay = true
+local cmyk_okay = true
+local spot_okay = true
+local multi_okay = true
+local forced = false
-function colors.forcesupport(gray,rgb,cmyk,spot,multichannel) -- pdfx driven
- gray_okay, rgb_okay, cmyk_okay, spot_okay, multichannel_okay, forced = gray, rgb, cmyk, spot, multichannel, true
- report_colors("supported models: gray %a, rgb %a, cmyk %a, spot %a",gray,rgb,cmyk,spot) -- multichannel=%l multichannel
+function colors.forcesupport(gray,rgb,cmyk,spot,multi) -- pdfx driven
+ gray_okay, rgb_okay, cmyk_okay, spot_okay, multi_okay, forced = gray, rgb, cmyk, spot, multi, true
+ report_colors("supported models: gray %a, rgb %a, cmyk %a, spot %a",gray,rgb,cmyk,spot)
end
local function forcedmodel(model) -- delayed till the backend but mp directly
@@ -253,8 +292,32 @@ colors.forcedmodel = forcedmodel
colors.couple = true
-local function definetransparency(name,n)
- transparent[name] = n
+local function definetransparency(name,n,global)
+ if n == v_reset then
+ definetransparent(name, 0, global) -- or attributes.unsetvalue
+ return
+ end
+ local a = tonumber(n)
+ if a then
+ transparent[name] = a -- 0 .. 16
+ return
+ end
+ local a = transparent[name]
+ if a then
+ transparent[name] = a
+ return
+ end
+ local settings = settings_to_hash_strict(n)
+ if settings then
+ local a, t = settings.a, settings.t
+ if a and t then
+ definetransparent(name, transparencies.register(name,transparent[a] or tonumber(a) or 1,tonumber(t) or 1), global)
+ else
+ definetransparent(name, 0, global)
+ end
+ else
+ inherittransparent(name, n, global)
+ end
end
colors.definetransparency = definetransparency
@@ -265,7 +328,7 @@ local function do_registerspotcolor(parent,parentnumber,e,f,d,p)
if not registered[parent] then
local v = colorvalues[parentnumber]
if v then
- local model = colors.default -- else problems with shading etc
+ local model = currentmodel()
if model == 1 then
model = v[1]
end
@@ -288,7 +351,7 @@ end
-- if not registered[parent] then
-- local v = colorvalues[parentnumber]
-- if v then
--- local model = colors.default -- else problems with shading etc
+-- local model = currentmodel()
-- if model == 1 then
-- model = v[1]
-- end
@@ -309,8 +372,8 @@ function colors.definesimplegray(name,s)
end
local hexdigit = R("09","AF","af")
-local hexnumber = hexdigit * hexdigit / function(s) return tonumber(s,16)/255 end + Cc(0)
-local hexpattern = hexnumber^-3 * P(-1)
+local hexnumber = hexdigit * hexdigit / function(s) return tonumber(s,16)/255 end
+local hexpattern = hexnumber * (P(-1) + hexnumber * hexnumber * P(-1))
local hexcolor = Cc("H") * P("#") * hexpattern
local left = P("(")
@@ -342,6 +405,21 @@ end)
local defineintermediatecolor
+local function resolvedname(name)
+ local color
+ if valid[name] then
+ color = counts[name]
+ if color then
+ color = texgetcount(color)
+ else
+ color = l_color[name] -- fall back on old method
+ end
+ else
+ color = l_color[name] -- fall back on old method
+ end
+ return color, l_transparency[name]
+end
+
local function defineprocesscolor(name,str,global,freeze) -- still inconsistent color vs transparent
local what, one, two, three = lpegmatch(specialcolor,str)
if what == "H" then
@@ -349,10 +427,16 @@ local function defineprocesscolor(name,str,global,freeze) -- still inconsistent
definecolor(name, register_color(name,'rgb',one,two,three),global)
elseif what == "M" then
-- intermediate
- return defineintermediatecolor(name,one,l_color[two],l_color[three],l_transparency[two],l_transparency[three],"",global,freeze)
+ -- return defineintermediatecolor(name,one,l_color[two],l_color[three],l_transparency[two],l_transparency[three],"",global,freeze)
+ local c1, t1 = resolvedname(two)
+ local c2, t2 = resolvedname(three)
+ return defineintermediatecolor(name,one,c1,c2,t1,t2,"",global,freeze)
elseif what == "P" then
-- pgf for tikz
- return defineintermediatecolor(name,two,l_color[one],l_color[three],l_transparency[one],l_transparency[three],"",global,freeze)
+ -- return defineintermediatecolor(name,two,l_color[one],l_color[three],l_transparency[one],l_transparency[three],"",global,freeze)
+ local c1, t1 = resolvedname(one)
+ local c2, t2 = resolvedname(three)
+ return defineintermediatecolor(name,two,c1,c2,t1,t2,"",global,freeze)
else
local settings = settings_to_hash_strict(str)
if settings then
@@ -373,7 +457,11 @@ local function defineprocesscolor(name,str,global,freeze) -- still inconsistent
local x = settings.x or h
if x then
r, g, b = lpegmatch(hexpattern,x) -- can be inlined
- definecolor(name, register_color(name,'rgb',r,g,b), global)
+ if r and g and b then
+ definecolor(name, register_color(name,'rgb',r,g,b), global)
+ else
+ definecolor(name, register_color(name,'gray',r or 0), global)
+ end
else
definecolor(name, register_color(name,'gray',tonumber(s) or 0), global)
end
@@ -415,6 +503,11 @@ end
colors.isblack = isblack
+-- local m, c, t = attributes.colors.namedcolorattributes(parent)
+-- if c and c > 1 then -- 1 is black
+-- local v = attributes.colors.values[c]
+
+
local function definespotcolor(name,parent,str,global)
if parent == "" or find(parent,"=",1,true) then
colors.registerspotcolor(name, parent) -- does that work? no attr
@@ -431,7 +524,7 @@ local function definespotcolor(name,parent,str,global)
if ta and tt then
definetransparent(name, transparencies.register(name,transparent[ta] or tonumber(ta) or 1,tonumber(tt) or 1), global)
elseif colors.couple then
- --~ definetransparent(name, transparencies.register(nil, 1, 1), global) -- can be sped up
+ -- definetransparent(name, transparencies.register(nil, 1, 1), global) -- can be sped up
definetransparent(name, 0, global) -- can be sped up
end
end
@@ -455,8 +548,15 @@ end
local function f(i,colors,fraction)
local otf = 0
- for c=1,#colors do
- otf = otf + (tonumber(fraction[c]) or 1) * colors[c][i]
+ if type(fraction) == "table" then
+ for c=1,#colors do
+ otf = otf + (tonumber(fraction[c]) or 1) * colors[c][i]
+ end
+ else
+ fraction = tonumber(fraction)
+ for c=1,#colors do
+ otf = otf + fraction * colors[c]
+ end
end
if otf > 1 then
otf = 1
@@ -508,7 +608,11 @@ local function definemultitonecolor(name,multispec,colorspec,selfspec)
nn = concat(nn,'_')
local parent = gsub(lower(nn),"[^%d%a%.]+","_")
if not colorspec or colorspec == "" then
- local cc = { } for i=1,max do cc[i] = l_color[dd[i]] end
+ local cc = { }
+ for i=1,max do
+-- cc[i] = l_color[dd[i]]
+ cc[i] = resolvedname(dd[i])
+ end
definemixcolor(name,parent,pp,cc,global,freeze) -- can become local
else
if selfspec ~= "" then
@@ -585,11 +689,55 @@ local function mpcolor(model,ca,ta,default)
return formatters["(%s,%s,%s)"](default,default,default)
end
+-- local function mpnamedcolor(name)
+-- return mpcolor(texgetattribute(a_colormodel),l_color[name] or l_color.black,l_transparency[name] or false)
+-- end
+
+local colornamespace = getnamespace("colornumber")
+local paletnamespace = getnamespace("colorpalet")
+
+local function namedcolorattributes(name)
+ local space = texgetattribute(a_colormodel)
+ local prefix = texgettoks("t_colo_prefix")
+ local color
+ if prefix ~= "" then
+ color = valid[prefix..name]
+ if not color then
+ local n = paletnamespace .. prefix .. name
+ color = valid[n]
+ if not color then
+ color = name
+ elseif color == true then
+ color = n
+ end
+ elseif color == true then
+ color = paletnamespace .. prefix .. name
+ end
+ elseif valid[name] then
+ color = name
+ else
+ return space, l_color.black
+ end
+ color = counts[color]
+ if color then
+ color = texgetcount(color)
+ else
+ color = l_color[name] -- fall back on old method
+ end
+ if color then
+ return space, color, l_transparency[name]
+ else
+ return space, l_color.black
+ end
+end
+
+colors.namedcolorattributes = namedcolorattributes -- can be used local
+
local function mpnamedcolor(name)
- return mpcolor(texgetattribute(a_colorspace),l_color[name] or l_color.black)
+ return mpcolor(namedcolorattributes(name))
end
-local function mpoptions(model,ca,ta,default) -- will move to mlib-col
+local function mpoptions(model,ca,ta,default) -- will move to mlib-col .. not really needed
return formatters["withcolor %s"](mpcolor(model,ca,ta,default))
end
@@ -597,6 +745,13 @@ colors.mpcolor = mpcolor
colors.mpnamedcolor = mpnamedcolor
colors.mpoptions = mpoptions
+-- elsewhere:
+--
+-- mp.NamedColor = function(str)
+-- mpprint(mpnamedcolor(str))
+-- end
+
+
-- local function formatcolor(ca,separator)
-- local cv = colorvalues[ca]
-- if cv then
@@ -693,6 +848,10 @@ end
local function spotcolorname(ca,default)
local cv, v = colorvalues[ca], "unknown"
+ if not cv and type(ca) == "string" then
+ ca = resolvedname(ca) -- we could metatable colorvalues
+ cv = colorvalues[ca]
+ end
if cv and cv[1] == 5 then
v = cv[10]
end
@@ -701,6 +860,10 @@ end
local function spotcolorparent(ca,default)
local cv, v = colorvalues[ca], "unknown"
+ if not cv and type(ca) == "string" then
+ ca = resolvedname(ca) -- we could metatable colorvalues
+ cv = colorvalues[ca]
+ end
if cv and cv[1] == 5 then
v = cv[12]
if v == "" then
@@ -712,6 +875,10 @@ end
local function spotcolorvalue(ca,default)
local cv, v = colorvalues[ca], 0
+ if not cv and type(ca) == "string" then
+ ca = resolvedname(ca) -- we could metatable colorvalues
+ cv = colorvalues[ca]
+ end
if cv and cv[1] == 5 then
v = cv[13]
end
@@ -733,11 +900,19 @@ local min = math.min
local function inbetween(one,two,i,fraction)
local o, t = one[i], two[i]
+ local c = fraction < 0
+ if c then
+ fraction = - fraction
+ end
local otf = o + fraction * (t - o)
if otf > 1 then
otf = 1
end
- return otf
+ if c then
+ return 1 - otf
+ else
+ return otf
+ end
end
local function justone(one,fraction,i)
@@ -758,7 +933,7 @@ end
defineintermediatecolor = function(name,fraction,c_one,c_two,a_one,a_two,specs,global,freeze)
fraction = tonumber(fraction) or 1
- local one, two = colorvalues[c_one], colorvalues[c_two]
+ local one, two = colorvalues[c_one], colorvalues[c_two] -- beware, it uses the globals
if one then
if two then
local csone, cstwo = one[1], two[1]
@@ -869,10 +1044,28 @@ end
local setcolormodel = colors.setmodel
implement {
+ name = "synccolorcount",
+ actions = synccolorcount,
+ arguments = { "string", "integer" }
+}
+
+implement {
+ name = "synccolor",
+ actions = synccolor,
+ arguments = "string",
+}
+
+implement {
+ name = "synccolorclone",
+ actions = synccolorclone,
+ arguments = { "string", "string" },
+}
+
+implement {
name = "setcolormodel",
- arguments = { "string", "boolean" },
+ arguments = { "string", "string" },
actions = function(model,weight)
- texsetattribute(a_colorspace,setcolormodel(model,weight))
+ texsetattribute(a_colormodel,setcolormodel(model,weight))
end
}
@@ -923,7 +1116,13 @@ implement {
implement {
name = "definetransparency",
actions = definetransparency,
- arguments = { "string", "integer" }
+ arguments = { "string", "string" }
+}
+
+implement {
+ name = "definetransparencyglobal",
+ actions = definetransparency,
+ arguments = { "string", "string", true }
}
implement {
@@ -935,9 +1134,9 @@ implement {
implement { name = "spotcolorname", actions = { spotcolorname, context }, arguments = "integer" }
implement { name = "spotcolorparent", actions = { spotcolorparent, context }, arguments = "integer" }
implement { name = "spotcolorvalue", actions = { spotcolorvalue, context }, arguments = "integer" }
-implement { name = "colorcomponents", actions = { colorcomponents, context }, arguments = "integer" }
-implement { name = "transparencycomponents", actions = { transparencycomponents, context }, arguments = "integer" }
-implement { name = "processcolorcomponents", actions = { processcolorcomponents, context }, arguments = "integer" }
+implement { name = "colorcomponents", actions = { colorcomponents, context }, arguments = { "integer", tokens.constant(",") } }
+implement { name = "transparencycomponents", actions = { transparencycomponents, context }, arguments = { "integer", tokens.constant(",") } }
+implement { name = "processcolorcomponents", actions = { processcolorcomponents, context }, arguments = { "integer", tokens.constant(",") } }
implement { name = "formatcolor", actions = { formatcolor, context }, arguments = { "integer", "string" } }
implement { name = "formatgray", actions = { formatgray, context }, arguments = { "integer", "string" } }
@@ -1000,7 +1199,7 @@ do
if model and model ~= 0 then
model = model
else
- model = forcedmodel(texgetattribute(a_colorspace))
+ model = forcedmodel(texgetattribute(a_colormodel))
if model == 1 then
model = cv[1]
end
@@ -1046,5 +1245,18 @@ function colors.spec(name)
}
end
+function colors.currentnamedmodel()
+ return models[texgetattribute(a_colormodel)] or "gray"
+end
+
-- inspect(attributes.colors.spec("red"))
-- inspect(attributes.colors.spec("red socks"))
+
+implement {
+ name = "negatedcolorcomponent",
+ arguments = "string",
+ actions = function(s)
+ s = 1 - (tonumber(s) or 0)
+ context((s < 0 and 0) or (s > 1 and 1) or s)
+ end
+}
diff --git a/tex/context/base/mkiv/colo-ini.mkiv b/tex/context/base/mkiv/colo-ini.mkiv
index 26208edd4..54ad1e9f9 100644
--- a/tex/context/base/mkiv/colo-ini.mkiv
+++ b/tex/context/base/mkiv/colo-ini.mkiv
@@ -21,6 +21,17 @@
%D This module implements color. Since \MKII\ and \MKIV\ use a completely
%D different approach, this module only implements a few generic mechanisms.
+\installcorenamespace{color}
+\installcorenamespace{colorattribute}
+\installcorenamespace{transparencyattribute}
+\installcorenamespace{colorsetter}
+\installcorenamespace{transparencysetter}
+\installcorenamespace{colorpaletspecification}
+\installcorenamespace{colorpalet}
+\installcorenamespace{colorstack}
+\installcorenamespace{colorconversions}
+\installcorenamespace{colornumber}
+
\registerctxluafile{colo-ini}{1.000}
\registerctxluafile{colo-icc}{1.000}
@@ -48,26 +59,17 @@
\newconditional\c_colo_rgb_supported
\newconditional\c_colo_cmyk_supported
\newconditional\c_colo_spot_supported % backend driven
-\newconditional\c_colo_weight_gray \settrue\c_colo_weight_gray
\newconditional\c_colo_convert_gray \settrue\c_colo_convert_gray
\newconditional\c_colo_enabled
\newconditional\c_colo_expanded
+\let\m_colo_weight_gray\v!yes
+
\let\currentcolormodel \empty
\let\currentcolorname \empty
\let\currentcolorpalet \empty
\let\currentcolorprefix\empty % \currentcolorpalet:
-\installcorenamespace{color}
-\installcorenamespace{colorattribute}
-\installcorenamespace{transparencyattribute}
-\installcorenamespace{colorsetter}
-\installcorenamespace{transparencysetter}
-\installcorenamespace{colorpaletspecification}
-\installcorenamespace{colorpalet}
-\installcorenamespace{colorstack}
-\installcorenamespace{colorconversions}
-
%D \macros
%D {definecolor,defineglobalcolor,definenamedcolor,definespotcolor,definemultitonecolor,
%D definetransparency}
@@ -97,13 +99,14 @@
%D \stopcombination
%D \stoptyping
-\unexpanded\def\definecolor {\dodoubleargument\colo_basics_define}
-\unexpanded\def\defineglobalcolor {\dodoubleargument\colo_basics_define_global}
-\unexpanded\def\defineprocesscolor {\dotripleargument\colo_basics_define_process}
-\unexpanded\def\definenamedcolor {\dodoubleargument\colo_basics_define_named}
-\unexpanded\def\definespotcolor {\dotripleargument\colo_basics_define_spot}
-\unexpanded\def\definemultitonecolor{\doquadrupleempty\colo_basics_define_multitone}
-\unexpanded\def\definetransparency {\dodoubleargument\colo_basics_define_transpancy}
+\unexpanded\def\definecolor {\dodoubleargument\colo_basics_define}
+\unexpanded\def\defineglobalcolor {\dodoubleargument\colo_basics_define_global}
+\unexpanded\def\defineprocesscolor {\dotripleargument\colo_basics_define_process}
+\unexpanded\def\definenamedcolor {\dodoubleargument\colo_basics_define_named}
+\unexpanded\def\definespotcolor {\dotripleargument\colo_basics_define_spot}
+\unexpanded\def\definemultitonecolor {\doquadrupleempty\colo_basics_define_multitone}
+\unexpanded\def\definetransparency {\dodoubleargument\colo_basics_define_transpancy}
+\unexpanded\def\defineglobaltransparency{\dodoubleargument\colo_basics_define_transpancy_global}
%D \macros
%D {startcolor,stopcolor,color,graycolor}
@@ -126,42 +129,154 @@
\let\g_color\empty
\let\g_style\empty
-\unexpanded\def\switchtocolor[#1]{\csname#1\endcsname}
+\unexpanded\def\switchtocolor[#1]{\begincsname#1\endcsname}
+
+% \unexpanded\def\color [#1]{\bgroup
+% \def\g_color{\colo_helpers_activate{#1}}%
+% \afterassignment\g_color
+% \let\nexttoken}
+%
+% \unexpanded\def\graycolor [#1]{\bgroup
+% \def\g_color{\colo_helpers_set_model\s!gray\colo_helpers_activate{#1}}%
+% \afterassignment\g_color
+% \let\nexttoken}
+%
+% \unexpanded\def\startcolor [#1]{\begingroup
+% \colo_helpers_activate{#1}}
+%
+% \unexpanded\def\stopcolor {\endgroup}
+%
+% \unexpanded\def\colored [#1]{\bgroup
+% \def\g_color{\colo_basics_defined_and_activated{#1}}%
+% \afterassignment\g_color
+% \let\nexttoken}
+%
+% \unexpanded\def\fastcolored[#1]#2{\begingroup % is this command still needed?
+% \colo_basics_defined_and_activated{#1}%
+% #2%
+% \endgroup}
+%
+% \unexpanded\def\directcolored[#1]{\colo_basics_defined_and_activated{#1}}
+%
+% \unexpanded\def\fastcolor [#1]#2{\begingroup % is this command still needed?
+% \colo_helpers_activate{#1}%
+% #2%
+% \endgroup}
+%
+% \unexpanded\def\directcolor [#1]{\colo_helpers_activate{#1}}
+%
+% \afterassignment was a left-over artifact
+
+% transparency
+
+\unexpanded\def\transparent[#1]%
+ {\bgroup
+ \edef\currenttransparencyname{#1}%
+ % the \relax catches a non existent csname
+ \ifx\currenttransparencyname\v!reset
+ \attribute\transparencyattribute\attributeunsetvalue
+ \else
+ \begincsname\??transparencysetter\currenttransparencyname\endcsname\relax
+ \fi
+ \let\nexttoken}
+
+\unexpanded\def\starttransparent[#1]%$
+ {\begingroup
+ \edef\currenttransparencyname{#1}%
+ \ifx\currenttransparencyname\v!reset
+ \attribute\transparencyattribute\attributeunsetvalue
+ \else
+ \begincsname\??transparencysetter\currenttransparencyname\endcsname\relax
+ \fi}
+
+\unexpanded\def\stoptransparent
+ {\endgroup}
+
+% color
+
+\unexpanded\def\coloronly[#1]%
+ {\bgroup
+ \edef\currentcolorname{#1}%
+ \ifx\currentcolorprefix\empty
+ \colo_helpers_activate_nop_only
+ \else
+ \colo_helpers_activate_yes_only
+ \fi
+ \let\nexttoken}
-\unexpanded\def\color [#1]{\bgroup
- \def\g_color{\colo_helpers_activate{#1}}%
- \afterassignment\g_color
- \let\nexttoken}
+\unexpanded\def\startcoloronly[#1]%$
+ {\begingroup
+ \edef\currentcolorname{#1}%
+ \ifx\currentcolorprefix\empty
+ \colo_helpers_activate_nop_only
+ \else
+ \colo_helpers_activate_yes_only
+ \fi}
+
+\unexpanded\def\stopcoloronly
+ {\endgroup}
-\unexpanded\def\graycolor [#1]{\bgroup
- \def\g_color{\colo_helpers_set_model\s!gray\colo_helpers_activate{#1}}%
- \afterassignment\g_color
- \let\nexttoken}
+% color + transparency
-\unexpanded\def\startcolor [#1]{\begingroup
- \colo_helpers_activate{#1}}
+\unexpanded\def\color[#1]%
+ {\bgroup
+ \edef\currentcolorname{#1}%
+ \ifx\currentcolorprefix\empty
+ \colo_helpers_activate_nop
+ \else
+ \colo_helpers_activate_yes
+ \fi
+ \let\nexttoken}
-\unexpanded\def\stopcolor {\endgroup}
+\unexpanded\def\graycolor[#1]%
+ {\bgroup
+ \colo_helpers_set_model\s!gray\colo_helpers_activate{#1}%
+ \let\nexttoken}
-\unexpanded\def\colored [#1]{\bgroup
- \def\g_color{\colo_basics_defined_and_activated{#1}}%
- \afterassignment\g_color
- \let\nexttoken}
+\unexpanded\def\startcolor[#1]%$
+ {\begingroup
+ \edef\currentcolorname{#1}%
+ \ifx\currentcolorprefix\empty
+ \colo_helpers_activate_nop
+ \else
+ \colo_helpers_activate_yes
+ \fi}
-\unexpanded\def\fastcolored[#1]#2{\begingroup % is this command still needed?
- \colo_basics_defined_and_activated{#1}%
- #2%
- \endgroup}
+\unexpanded\def\stopcolor
+ {\endgroup}
-\unexpanded\def\directcolored[#1]{\colo_basics_defined_and_activated{#1}}
+\unexpanded\def\colored[#1]%
+ {\bgroup
+ \colo_basics_defined_and_activated{#1}%
+ \let\nexttoken}
-\unexpanded\def\fastcolor [#1]#2{\begingroup % is this command still needed?
- \colo_helpers_activate{#1}%
- #2%
- \endgroup}
+\unexpanded\def\fastcolored[#1]#2%
+ {\begingroup % is this command still needed?
+ \colo_basics_defined_and_activated{#1}%
+ #2%
+ \endgroup}
-\unexpanded\def\directcolor [#1]{\colo_helpers_activate{#1}}
+\unexpanded\def\directcolored[#1]%
+ {\colo_basics_defined_and_activated{#1}}
+\unexpanded\def\fastcolor [#1]#2%
+ {\begingroup % is this command still needed?
+ \edef\currentcolorname{#1}%
+ \ifx\currentcolorprefix\empty
+ \colo_helpers_activate_nop
+ \else
+ \colo_helpers_activate_yes
+ \fi
+ #2%
+ \endgroup}
+
+\unexpanded\def\directcolor[#1]%
+ {\edef\currentcolorname{#1}%
+ \ifx\currentcolorprefix\empty
+ \colo_helpers_activate_nop
+ \else
+ \colo_helpers_activate_yes
+ \fi}
%D The following command is obsolete:
@@ -218,7 +333,6 @@
% \newtoks\everysetupcolors
\let\v_colo_freeze_state\s!false
-\let\v_colo_weight_state\s!false
\setvalue{\??colorconversions\v!yes}%
{\settrue \c_colo_convert_gray}
@@ -232,16 +346,11 @@
%
\doifelse{\directcolorsparameter\c!spot }\v!yes \settrue \setfalse\c_colo_spot_supported
\doifelse{\directcolorsparameter\c!expansion}\v!yes \settrue \setfalse\c_colo_expanded
- \doifelse{\directcolorsparameter\c!factor }\v!no \setfalse\settrue \c_colo_weight_gray
\doifelse{\directcolorsparameter\c!rgb }\v!yes \settrue \setfalse\c_colo_rgb_supported
\doifelse{\directcolorsparameter\c!cmyk }\v!yes \settrue \setfalse\c_colo_cmyk_supported
\doifelse{\directcolorsparameter\c!state }\v!start\settrue \setfalse\c_colo_enabled
%
- \ifconditional\c_colo_weight_gray
- \let\v_colo_weight_state\s!true
- \else
- \let\v_colo_weight_state\s!false
- \fi
+ \edef\m_colo_weight_gray{\directcolorsparameter\c!factor}%
%
\ifconditional\c_colo_expanded
\let\v_colo_freeze_state\s!true
@@ -375,7 +484,9 @@
\def\colo_palet_prepare#1%
{\edef\colo_palet_name{#1}%
- \ifcsname\??paletlist\colo_palet_name\endcsname\else
+ \ifcsname\??paletlist\colo_palet_name\endcsname
+ \csname\??paletsize#1\endcsname\zerocount
+ \else
\colo_palet_allocate\colo_palet_name
\fi
\edef\m_colo_palet{\begincsname\??paletlist\colo_palet_name\endcsname}%
@@ -466,17 +577,37 @@
\unexpanded\def\setuppalet
{\dosingleempty\colo_palets_setup}
+% \def\colo_palets_setup[#1]%
+% {\edef\currentcolorpalet{#1}%
+% \ifx\currentcolorpalet\empty
+% % seems to be a reset
+% \let\currentcolorprefix\empty
+% \else\ifcsname\??paletlist\currentcolorpalet\endcsname
+% \edef\currentcolorprefix{#1:}%
+% \else
+% \colo_helpers_show_message\m!colors7\currentcolorpalet
+% \let\currentcolorpalet\empty
+% \let\currentcolorprefix\empty
+% \fi\fi
+% \the\everysetuppalet
+% \colo_helpers_initialize_maintextcolor}
+
+\newtoks\t_colo_prefix % used in mp interface
+
\def\colo_palets_setup[#1]%
{\edef\currentcolorpalet{#1}%
\ifx\currentcolorpalet\empty
% seems to be a reset
\let\currentcolorprefix\empty
+ \t_colo_prefix\emptytoks
\else\ifcsname\??paletlist\currentcolorpalet\endcsname
\edef\currentcolorprefix{#1:}%
+ \t_colo_prefix\expandafter{\currentcolorprefix}%
\else
\colo_helpers_show_message\m!colors7\currentcolorpalet
\let\currentcolorpalet\empty
\let\currentcolorprefix\empty
+ \t_colo_prefix\emptytoks
\fi\fi
\the\everysetuppalet
\colo_helpers_initialize_maintextcolor}
@@ -550,20 +681,26 @@
%D
%D These speak for themselves. See \type {colo-ext} for usage.
+% \def\negatedcolorcomponent#1%
+% {\ifdim\dimexpr\onepoint-#1\onepoint\relax<\zeropoint
+% \!!zerocount
+% \else
+% \expandafter\withoutpt\the\dimexpr\onepoint-#1\onepoint\relax
+% \fi}
+%
+% \unexpanded\def\negatecolorcomponent#1% #1 = \macro
+% {\scratchdimen\onepoint\advance\scratchdimen-#1\onepoint
+% \ifdim\scratchdimen<\zeropoint\scratchdimen\zeropoint\fi
+% \edef#1{\withoutpt\the\scratchdimen}}
+%
+% \unexpanded\def\negatecolorcomponent#1% #1 = \macro
+% {\edef#1{\negatedcolorcomponent{#1}}}
+
\unexpanded\def\negatecolorcomponent#1% #1 = \macro
- {\scratchdimen\onepoint\advance\scratchdimen-#1\onepoint
- \ifdim\scratchdimen<\zeropoint\scratchdimen\zeropoint\fi
- \edef#1{\withoutpt\the\scratchdimen}}
+ {\edef#1{\clf_negatecolorcomponent{#1}}}
\def\negatedcolorcomponent#1%
- {\ifdim\dimexpr\onepoint-#1\onepoint\relax<\zeropoint
- \!!zerocount
- \else
- \expandafter\withoutpt\the\dimexpr\onepoint-#1\onepoint\relax
- \fi}
-
-\unexpanded\def\negatecolorcomponent#1% #1 = \macro
- {\edef#1{\negatedcolorcomponent{#1}}}
+ {\clf_negatecolorcomponent{#1}}
%D \macros
%D {MPcolor}
@@ -605,7 +742,7 @@
\def\colo_helpers_set_model#1% direct
{\edef\currentcolormodel{#1}%
- \clf_setcolormodel{\currentcolormodel}\v_colo_weight_state\relax} % sets attribute at lua end
+ \clf_setcolormodel{\currentcolormodel}{\m_colo_weight_gray}} % sets attribute at lua end
\colo_helpers_set_model\s!all
@@ -674,20 +811,24 @@
\csname\??transparencysetter#1\endcsname
\fi}
+\def\colo_helpers_activate_dummy
+ {\csname\??colorsetter \v_colo_dummy_name\endcsname
+ \csname\??transparencysetter\v_colo_dummy_name\endcsname}
+
\let\dofastcoloractivation\colo_helpers_fast_activate
% so far
-\def\colo_helpers_activate % two-step is not that much faster but less tracing
- {\ifx\currentcolorprefix\empty
+\def\colo_helpers_activate#1% two-step is not that much faster but less tracing
+ {\edef\currentcolorname{#1}%
+ \ifx\currentcolorprefix\empty
\expandafter\colo_helpers_activate_nop
\else
\expandafter\colo_helpers_activate_yes
\fi}
-\def\colo_helpers_activate_yes#1%
- {\edef\currentcolorname{#1}%
- \ifcsname\??colorsetter\currentcolorprefix\currentcolorname\endcsname
+\def\colo_helpers_activate_yes
+ {\ifcsname\??colorsetter\currentcolorprefix\currentcolorname\endcsname
\lastnamedcs
\csname\??transparencysetter\currentcolorprefix\currentcolorname\endcsname
\else\ifcsname\??colorsetter\currentcolorname\endcsname
@@ -695,16 +836,23 @@
\csname\??transparencysetter\currentcolorname\endcsname
\fi\fi}
-\def\colo_helpers_activate_nop#1%
- {\edef\currentcolorname{#1}%
- \ifcsname\??colorsetter\currentcolorname\endcsname
+\def\colo_helpers_activate_nop
+ {\ifcsname\??colorsetter\currentcolorname\endcsname
\lastnamedcs
\csname\??transparencysetter\currentcolorname\endcsname
\fi}
-\def\colo_helpers_activate_dummy
- {\csname\??colorsetter \v_colo_dummy_name\endcsname
- \csname\??transparencysetter\v_colo_dummy_name\endcsname}
+\def\colo_helpers_activate_yes_only
+ {\ifcsname\??colorsetter\currentcolorprefix\currentcolorname\endcsname
+ \lastnamedcs
+ \else\ifcsname\??colorsetter\currentcolorname\endcsname
+ \lastnamedcs
+ \fi\fi}
+
+\def\colo_helpers_activate_nop_only
+ {\ifcsname\??colorsetter\currentcolorname\endcsname
+ \lastnamedcs
+ \fi}
\let\dousecolorparameter\colo_helpers_activate
@@ -732,6 +880,23 @@
% todo: check if color is overloading a non-color command
+% \let\colo_basics_synchronize\gobbleoneargument % used in mp interface
+% \let\colo_basics_inherit \gobbletwoarguments % used in mp interface
+
+\def\colo_basics_allocate#1%
+ {\expandafter\newcount\csname\??colornumber#1\endcsname
+ \clf_synccolorcount{#1}\c_syst_last_allocated_count}
+
+\def\colo_basics_synchronize#1%
+ {\ifcsname\??colornumber#1\endcsname\else
+ \colo_basics_allocate{#1}%
+ \fi
+ \clf_synccolor{#1}%
+ %\csname\??colornumber#1\endcsname\csname\??colorattribute#1\endcsname
+ \lastnamedcs\csname\??colorattribute#1\endcsname}
+
+\let\colo_basics_inherit\clf_synccolorclone
+
\newcount\c_colo_protection
\unexpanded\def\startprotectedcolors
@@ -741,31 +906,43 @@
{\advance\c_colo_protection\minusone}
\def\colo_basics_define[#1][#2]%
- {\clf_defineprocesscolorlocal{#1}{#2}\v_colo_freeze_state\relax
- \ifcase\c_colo_protection
- \unexpanded\setvalue{#1}{\colo_helpers_activate{#1}}%
+ {\edef\m_colo_old{#1}%
+ \edef\m_colo_new{#2}%
+ \ifx\m_colo_old\m_colo_new
+ % maybe a warning
+ \else
+ \clf_defineprocesscolorlocal{#1}{#2}\v_colo_freeze_state\relax
+ \colo_basics_synchronize{#1}%
+ \ifcase\c_colo_protection
+ \unexpanded\setvalue{#1}{\colo_helpers_activate{#1}}%
+ \fi
\fi}
\def\colo_basics_define_global[#1][#2]%
- {\clf_defineprocesscolorglobal{#1}{#2}\v_colo_freeze_state\relax
- \ifcase\c_colo_protection
- \unexpanded\setgvalue{#1}{\colo_helpers_activate{#1}}%
+ {\edef\m_colo_old{#1}%
+ \edef\m_colo_new{#2}%
+ \ifx\m_colo_old\m_colo_new
+ % maybe a warning
+ \else
+ \clf_defineprocesscolorglobal{#1}{#2}\v_colo_freeze_state\relax
+ \colo_basics_synchronize{#1}%
+ \ifcase\c_colo_protection
+ \unexpanded\setgvalue{#1}{\colo_helpers_activate{#1}}%
+ \fi
\fi}
-\def\colo_basics_define_named[#1][#2]% currently same as define
- {\clf_defineprocesscolorlocal{#1}{#2}\v_colo_freeze_state\relax
- \ifcase\c_colo_protection
- \unexpanded\setvalue{#1}{\colo_helpers_activate{#1}}%
- \fi}
+\let\colo_basics_define_named\colo_basics_define
\def\dodefinefastcolor[#1][#2]% still not fast but ok (might change)
{\clf_defineprocesscolorlocal{#1}{#2}\v_colo_freeze_state\relax
+ \colo_basics_synchronize{#1}%
\ifcase\c_colo_protection
\unexpanded\setvalue{#1}{\colo_helpers_activate{#1}}%
\fi}
\def\colo_basics_defined_and_activated#1%
- {\clf_defineprocesscolordummy{#1}%
+ {\clf_defineprocesscolordummy{#1}% we could pass dummy here too
+ \colo_basics_synchronize{d_u_m_m_y}%
\colo_helpers_activate_dummy}
\def\colo_basics_define_process
@@ -777,12 +954,14 @@
\def\colo_basics_define_process_yes[#1][#2][#3]%
{\clf_defineprocesscolorlocal{#1}{\processcolorcomponents{#2},#3}\v_colo_freeze_state\relax
+ \colo_basics_synchronize{#1}%
\ifcase\c_colo_protection
\unexpanded\setvalue{#1}{\colo_helpers_activate{#1}}%
\fi}
\def\colo_basics_define_process_nop[#1][#2][#3]%
{\clf_defineprocesscolorlocal{#1}{#2}\v_colo_freeze_state\relax
+ \colo_basics_synchronize{#1}%
\ifcase\c_colo_protection
\unexpanded\setvalue{#1}{\colo_helpers_activate{#1}}%
\fi}
@@ -794,12 +973,14 @@
\def\colo_basics_define_spot[#1][#2][#3]%
{\clf_definespotcolorglobal{#1}{#2}{#3}%
+ \colo_basics_synchronize{#1}%
\ifcase\c_colo_protection
\unexpanded\setgvalue{#1}{\colo_helpers_activate{#1}}%
\fi}
\def\colo_basics_define_multitone[#1][#2][#3][#4]%
{\clf_definemultitonecolorglobal{#1}{#2}{#3}{#4}%
+ \colo_basics_synchronize{#1}%
\ifcase\c_colo_protection
\unexpanded\setgvalue{#1}{\colo_helpers_activate{#1}}%
\fi}
@@ -807,7 +988,10 @@
%D Transparencies (only):
\def\colo_basics_define_transpancy[#1][#2]%
- {\clf_definetransparency{#1}#2\relax}
+ {\clf_definetransparency{#1}{#2}}
+
+\def\colo_basics_define_transpancy_global[#1][#2]%
+ {\clf_definetransparencyglobal{#1}{#2}}
% A goodie that replaces the startMPcolor hackery
@@ -860,14 +1044,16 @@
\def\colo_basics_define_intermediate_indeed[#1][#2,#3,#4][#5]%
{\clf_defineintermediatecolor % not global
- {#1}{#2}%
- \thecolorattribute{#3} %
- \thecolorattribute{#4} %
- \thetransparencyattribute{#3} %
- \thetransparencyattribute{#4} %
+ {#1}%
+ {#2}%
+ \rawcolorattribute{#3} %
+ \rawcolorattribute{#4} %
+ \rawtransparencyattribute{#3} %
+ \rawtransparencyattribute{#4} %
{#5}%
\v_colo_freeze_state
\relax
+ \colo_basics_synchronize{#1}%
\unexpanded\setvalue{#1}{\colo_helpers_activate{#1}}}
%D Here is a more efficient helper for pgf:
@@ -1017,11 +1203,6 @@
\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_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}
@@ -1047,26 +1228,6 @@
\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}]
{\colo_palets_define_assign}%
@@ -1080,7 +1241,8 @@
{#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_basics_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}}}
@@ -1176,12 +1338,14 @@
\colo_helpers_inherited_current_ca{#1} %
\colo_helpers_inherited_current_ta{#1} }
-
\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\rawcolorattribute #1{\ifcsname\??colorattribute \currentcolorprefix#1\endcsname\lastnamedcs\else\ifcsname\??colorattribute #1\endcsname\lastnamedcs\else\zerocount\fi\fi}
+\def\rawtransparencyattribute#1{\ifcsname\??transparencyattribute\currentcolorprefix#1\endcsname\lastnamedcs\else\ifcsname\??transparencyattribute#1\endcsname\lastnamedcs\else\zerocount\fi\fi}
+
\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} }
diff --git a/tex/context/base/mkiv/colo-run.lua b/tex/context/base/mkiv/colo-run.lua
index 6368b3307..2e4cca5ab 100644
--- a/tex/context/base/mkiv/colo-run.lua
+++ b/tex/context/base/mkiv/colo-run.lua
@@ -9,11 +9,12 @@ if not modules then modules = { } end modules ['colo-run'] = {
-- For historic reasons the core has a couple of tracing features. Nowadays
-- these would end up in modules.
-local colors, commands, context, utilities = colors, commands, context, utilities
+local utilities = utilities
+local commands = commands
+local context = context
+local colors = attributes.colors
-local colors = attributes.colors
-
-local private = table.tohash { "d_u_m_m_y", "maintextcolor", "themaintextcolor" }
+local private = table.tohash { "d_u_m_m_y", "maintextcolor", "themaintextcolor" }
function commands.showcolorset(name)
local set = colors.setlist(name)
diff --git a/tex/context/base/mkiv/cont-fil.mkiv b/tex/context/base/mkiv/cont-fil.mkiv
index 19c1c93ac..e2c7f401e 100644
--- a/tex/context/base/mkiv/cont-fil.mkiv
+++ b/tex/context/base/mkiv/cont-fil.mkiv
@@ -12,7 +12,7 @@
%C details.
% todo: use full names and remove calls at the tex end (now integrated in
-% lua library code
+% lua library code .. then we can load it at runtime when needed.
\writestatus{loading}{ConTeXt File Synonyms}
@@ -45,25 +45,34 @@
\definefilesynonym [res-log] [res-09]
\definefilesynonym [res-identify] [res-12]
-\definefilesynonym [med-show] [res-50]
+ \definefilesynonym [med-show] [res-50]
\definefilesynonym [pre-general] [pre-00]
-
-\definefilesynonym [pre-original] [pre-01]
-\definefilesynonym [pre-green] [pre-02]
-\definefilesynonym [pre-funny] [pre-03]
-\definefilesynonym [pre-colorful] [pre-04]
-\definefilesynonym [pre-fuzzy] [pre-05]
+\definefilesynonym [pre-01] [present-original]
+\definefilesynonym [pre-original] [present-original]
+\definefilesynonym [pre-02] [present-green]
+\definefilesynonym [pre-green] [present-green]
+\definefilesynonym [pre-03] [present-funny]
+\definefilesynonym [pre-funny] [present-funny]
+\definefilesynonym [pre-04] [present-colorful]
+\definefilesynonym [pre-colorful] [present-colorful]
+\definefilesynonym [pre-05] [present-fuzzy]
+\definefilesynonym [pre-fuzzy] [present-fuzzy]
\definefilesynonym [pre-polish] [pre-06]
\definefilesynonym [pre-spider] [pre-07]
\definefilesynonym [pre-wonder] [pre-08]
-\definefilesynonym [pre-windows] [pre-09]
-\definefilesynonym [pre-grow] [pre-10]
-\definefilesynonym [pre-stack] [pre-11]
+\definefilesynonym [pre-09] [present-windows]
+\definefilesynonym [pre-windows] [present-windows]
+\definefilesynonym [pre-10] [present-grow]
+\definefilesynonym [pre-grow] [present-grow]
+\definefilesynonym [pre-11] [present-stack]
+\definefilesynonym [pre-stack] [present-stack]
\definefilesynonym [pre-arrows] [pre-12]
\definefilesynonym [pre-writing] [pre-13]
-\definefilesynonym [pre-split] [pre-14]
-\definefilesynonym [pre-balls] [pre-15]
+\definefilesynonym [pre-split] [present-split]
+\definefilesynonym [pre-14] [present-split]
+\definefilesynonym [pre-balls] [present-balls]
+\definefilesynonym [pre-15] [present-balls]
\definefilesynonym [pre-knot] [pre-16]
\definefilesynonym [pre-weird] [pre-17]
\definefilesynonym [pre-shade] [pre-18]
@@ -72,7 +81,6 @@
\definefilesynonym [pre-zoom] [pre-21]
\definefilesynonym [pre-cycle] [pre-22]
\definefilesynonym [pre-super] [pre-23]
-
%definefilesynonym [pre-more] [pre-24]
%definefilesynonym [pre-more] [pre-25]
\definefilesynonym [pre-more] [pre-26]
@@ -80,14 +88,17 @@
%definefilesynonym [pre-more] [pre-28]
%definefilesynonym [pre-more] [pre-29]
%definefilesynonym [pre-more] [pre-30]
-
-\definefilesynonym [pre-tiles] [pre-41]
-
-\definefilesynonym [pre-stepwise] [pre-60]
-\definefilesynonym [pre-stepper] [pre-61]
-
-\definefilesynonym [pre-punk] [pre-70]
-\definefilesynonym [pre-random] [pre-71]
+\definefilesynonym [pre-41] [present-tiles]
+\definefilesynonym [pre-60] [present-stepwise]
+\definefilesynonym [pre-stepwise] [present-stepwise]
+\definefilesynonym [pre-61] [present-stepper]
+\definefilesynonym [pre-stepper] [present-stepper]
+\definefilesynonym [pre-62] [present-overlap]
+\definefilesynonym [pre-69] [present-wobbling]
+\definefilesynonym [pre-punk] [present-punk]
+\definefilesynonym [pre-70] [present-punk]
+\definefilesynonym [pre-random] [present-random]
+\definefilesynonym [pre-71] [present-random]
\definefilesynonym [abr-pseudocaps] [abr-01]
\definefilesynonym [abr-smallcaps] [abr-02]
diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv
index 8e4d59750..ea14b4c7b 100644
--- a/tex/context/base/mkiv/cont-new.mkiv
+++ b/tex/context/base/mkiv/cont-new.mkiv
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2016.05.19 13:43}
+\newcontextversion{2017.05.14 19:09}
%D This file is loaded at runtime, thereby providing an excellent place for
%D hacks, patches, extensions and new features.
diff --git a/tex/context/base/mkiv/cont-run.lua b/tex/context/base/mkiv/cont-run.lua
index 0420ed01c..2225a0fb2 100644
--- a/tex/context/base/mkiv/cont-run.lua
+++ b/tex/context/base/mkiv/cont-run.lua
@@ -90,7 +90,7 @@ local function logsandbox(details)
end
end
-local ioopen = sandbox.original(io.open)
+local ioopen = sandbox.original(io.open) -- dummy call
local function logsandboxfiles(name,what,asked,okay)
-- we're only interested in permitted access
@@ -161,14 +161,13 @@ if sandboxing then
-- 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.
+ -- primitive ... todo ... well, it has been done now.
-- We block some potential escapes from protection.
context [[
\let\primitive \relax
\let\normalprimitive\relax
- \let\normalwrite \relax
]]
end
@@ -181,6 +180,10 @@ local function processjob()
local suffix = environment.suffix
local filename = environment.filename -- hm, not inputfilename !
+ if arguments.synctex then
+ directives.enable("system.synctex="..tostring(arguments.synctex))
+ end
+
if not filename or filename == "" then
-- skip
elseif suffix == "xml" or arguments.forcexml then
diff --git a/tex/context/base/mkiv/cont-run.mkiv b/tex/context/base/mkiv/cont-run.mkiv
index fcca7b581..490c6bee2 100644
--- a/tex/context/base/mkiv/cont-run.mkiv
+++ b/tex/context/base/mkiv/cont-run.mkiv
@@ -15,6 +15,7 @@
\unprotect
+\registerctxluafile{node-syn}{1.001}
\registerctxluafile{cont-run}{1.001}
\protect \endinput
diff --git a/tex/context/base/mkiv/context-todo.tex b/tex/context/base/mkiv/context-todo.tex
index 0cbd94814..a356d5964 100644
--- a/tex/context/base/mkiv/context-todo.tex
+++ b/tex/context/base/mkiv/context-todo.tex
@@ -1,18 +1,102 @@
-% language=uk
+\setuplayout
+ [width=middle,
+ height=middle,
+ topspace=2cm,
+ header=0pt,
+ footer=1cm]
-\usemodule[art-01,abr-01]
+\setupbodyfont
+ [bookman]
+
+\usemodule
+ [punk,abr-02]
+
+\setuphead
+ [section]
+ [color=ColorThree,
+ style=\bfb]
+
+\setupitemgroup
+ [itemize] [each]
+ [packed] [color=ColorThree,symcolor=ColorThree]
+
+\setupfooter
+ [color=ColorThree,
+ style=bold]
+
+\setupfootertexts
+ [pagenumber]
+
+\setupwhitespace
+ [big]
+
+\definefont[PunkFont][demo@punk at 20pt]
+
+% \def\aterm{\sym{?}}
+% \def\rterm{\sym{--}}
+% \def\dterm{\sym{+}}
+% \def\pterm{\sym{!}}
+%
+% \startitemize[packed]
+% \aterm on the agenda (update, extension, rewrite)
+% \rterm no longer on the agenda, rejected
+% \dterm no longer on the agenda, done
+% \pterm work in progress (so keep an eye on the betas)
+% \stopitemize
+
+\definecolor[ColorOne] [c=0.5,m=0.2,y=0.5,k=0.2]
+\definecolor[ColorTwo] [c=0.5,m=0.5,y=0.1,k=0.1]
+\definecolor[ColorThree][c=0.1,m=1.0,y=1.0,k=0.2]
\starttext
-\subject {On the agenda}
+\startMPpage
+ StartPage ;
+ numeric n ; n := 200 ;
+ numeric o ; o := 25 ;
+
+ pair p[] ;
+ for i=1 upto n :
+ p[i] = (o + uniformdeviate (PaperWidth-2*o), o + uniformdeviate (PaperHeight-2*o)) ;
+ endfor ;
+
+ picture d ; d := image ( for i=1 upto n : draw p[i] ; endfor ) ;
+ picture l ; l := image ( draw for i=1 upto n : if i > 1 : -- fi p[i] endfor ) ;
+ picture t ; t := textext("\framed[frame=off,align={middle,lohi},foregroundcolor=ColorThree,foregroundstyle=\PunkFont]{\ConTeXt\endgraf MkIV\endgraf\kern-\strutdepth RoadMap}") ;
+
+ fill Page enlarged 10 withcolor "ColorOne" ;
+
+ draw d withcolor white withpen pencircle scaled o ;
+ draw d withcolor "ColorTwo" withpen pencircle scaled (o - 5) ;
+ draw l withcolor white withpen pencircle scaled (o / 5) ;
+ draw l withcolor "ColorTwo" withpen pencircle scaled (o /10) ;
+ draw thelabel.ulft(t xsized .5PaperWidth,lrcorner Page shifted - (PaperWidth/20,-PaperWidth/40)) ;
+ StopPage ;
+\stopMPpage
+
+
+\startsubject[title={Introduction}]
+
+There is not really a long term roadmap for development. One reason is that there is already
+a lot available. When we started with \LUATEX, the \CONTEXT\ code was mostly rewritten,
+and that process is more of less finished. Of course there is always work left.
+
+This file is not a complete overview of our plans but users can at least get an
+idea of what we're working on and what is coming. Feel free to submit
+suggestions.
+
+\startlines
+Hans Hagen
+Hasselt NL
+\currentdate
+\stoplines
-\subsubject{\LUATEX}
+\stopsubject
+
+\startsubject[title={On the agenda for \LUATEX}]
\startitemize
\startitem
- head||tail cleanup in disc nodes (get rid of temp i.e.\ delay till linebreak)
- \stopitem
- \startitem
cleanup passive nodes
\stopitem
\startitem
@@ -26,9 +110,6 @@
{texlang.w} and also store the \type {*mins}
\stopitem
\startitem
- get rid of \type {temp} node in hyphenator i.e. postpone to when needed
- \stopitem
- \startitem
remove local par in head of line when done with linebreak
\stopitem
\startitem
@@ -36,20 +117,29 @@
(also check redundant \type {delete_attribute_ref} after \type {new_glue})
\stopitem
\startitem
- implement \type {\hyphenationbounds}
+ only return nil when we expect multiple calls in in one line
\stopitem
\startitem
- only return nil when we expect multiple calls in in one line
+ pdf injection in virtual characters (currently qQ interferes with font switch
+ flushing) so a pdf page hack is needed
\stopitem
\stopitemize
-\subsubject{\CONTEXT}
+\stopsubject
+
+\startsubject[title={On the agenda for \CONTEXT\ \MKIV}]
\startitemize
\startitem
play with par callback and properties
\stopitem
\startitem
+ optimize positions for columnareas and parpos (sequential)
+ \stopitem
+ \startitem
+ add flag to font for math engine
+ \stopitem
+ \startitem
get rid of components
\stopitem
\startitem
@@ -66,30 +156,11 @@
reorganize position data (more subtables)
\stopitem
\startitem
- use \type {\matheqnogapstep}, \type {\Ustack}, \type {\mathscriptsmode}, \
+ use \type {\matheqnogapstep}, \type {\Ustack}, \type {\mathscriptsmode},
\type {\mathdisplayskipmode} and other new math primitives
\stopitem
\stopitemize
-\vfill {\em Feel free to suggest additions.}
+\stopsubject
\stoptext
-
-% also
-
-check components and pre|post|replace in math-tag
-
-% 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/tex/context/base/mkiv/context.css b/tex/context/base/mkiv/context.css
index be1dad796..b0aa38573 100644
--- a/tex/context/base/mkiv/context.css
+++ b/tex/context/base/mkiv/context.css
@@ -18,6 +18,9 @@ a.dir-view:link, a.dir-view:active, a.dir-view:visited {
.invalid {
color: #FF0000 ;
}
+.invisible {
+ visibility: hidden ;
+}
button, .commonlink, .smallbutton {
font-weight: bold ;
font-size: 12px ;
diff --git a/tex/context/base/mkiv/context.mkiv b/tex/context/base/mkiv/context.mkiv
index e0bd762a9..3d521d98c 100644
--- a/tex/context/base/mkiv/context.mkiv
+++ b/tex/context/base/mkiv/context.mkiv
@@ -39,8 +39,8 @@
%D up and the dependencies are more consistent.
\edef\contextformat {\jobname}
-\edef\contextversion{2016.05.19 13:43}
-\edef\contextkind {current}
+\edef\contextversion{2017.05.14 19:09}
+\edef\contextkind {beta}
%D For those who want to use this:
@@ -145,6 +145,8 @@
\loadmarkfile{cldf-int} % interface
+\loadmarkfile{trac-ctx} % maybe move up
+
% \loadmarkfile{luat-ini}
\loadmarkfile{toks-tra}
@@ -175,7 +177,6 @@
\loadmarkfile{trac-tex}
\loadmarkfile{trac-deb} % will move up
-\loadmarkfile{trac-ctx} % maybe move up
%loadmarkfile{blob-ini} % not to be used, we only use a helper
@@ -402,6 +403,7 @@
\loadmarkfile{tabl-ntb}
\loadmarkfile{tabl-nte}
\loadmarkfile{tabl-ltb}
+\loadmarkfile{tabl-frm}
\loadmarkfile{tabl-tsp}
\loadmkvifile{tabl-xtb}
\loadmarkfile{tabl-mis}
@@ -433,12 +435,16 @@
\loadmarkfile{typo-sus}
\loadmarkfile{typo-lig}
\loadmarkfile{typo-chr}
+\loadmarkfile{typo-rub}
+\loadmkivfile{typo-fkr}
\loadmkvifile{type-ini}
\loadmarkfile{type-set}
\loadmarkfile{scrp-ini}
+\loadmarkfile{symb-emj}
+
\loadmarkfile{lang-wrd} % can be optional (discussion with mm sideeffect)
\loadmarkfile{lang-rep} % can be optional (bt 2013 side effect)
@@ -509,6 +515,7 @@
\loadmarkfile{grph-fig}
\loadmarkfile{grph-raw}
\loadmarkfile{grph-rul}
+\loadmarkfile{grph-pat}
\loadmarkfile{pack-box}
\loadmarkfile{pack-bar}
@@ -571,7 +578,7 @@
\to \everyjob
\appendtoks
- \ctxlua{statistics.savefmtstatus("\jobname","\contextversion","context.mkiv","\contextkind")}% can become automatic
+ \ctxlua{statistics.savefmtstatus("\jobname","\contextversion","context.mkiv","\contextkind","\contextbanner")}% can become automatic
\to \everydump
\errorstopmode \dump \endinput
diff --git a/tex/context/base/mkiv/core-con.lua b/tex/context/base/mkiv/core-con.lua
index 6913ac569..10f8fc2ed 100644
--- a/tex/context/base/mkiv/core-con.lua
+++ b/tex/context/base/mkiv/core-con.lua
@@ -6,7 +6,7 @@ if not modules then modules = { } end modules ['core-con'] = {
license = "see context related readme files"
}
--- todo: split into char-lan.lua and core-con.lua
+-- todo: split into lang-con.lua and core-con.lua
--[[ldx--
<p>This module implements a bunch of conversions. Some are more
@@ -42,6 +42,13 @@ local converters = converters
languages = languages or { }
local languages = languages
+local ctx_labeltext = context.labeltext
+local ctx_LABELTEXT = context.LABELTEXT
+local ctx_WORD = context.WORD
+local ctx_space = context.space
+local ctx_convertnumber = context.convertnumber
+local ctx_highordinalstr = context.highordinalstr
+
converters.number = tonumber
converters.numbers = tonumber
@@ -74,6 +81,14 @@ local counters = allocate {
0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
0x0079, 0x007A
},
+ ['russian'] = {
+ 0x0430, 0x0431, 0x0432, 0x0433, 0x0434,
+ 0x0435, 0x0436, 0x0437, 0x0438, 0x043a,
+ 0x043b, 0x043c, 0x043d, 0x043e, 0x043f,
+ 0x0440, 0x0441, 0x0442, 0x0443, 0x0444,
+ 0x0445, 0x0446, 0x0447, 0x0448, 0x0449,
+ 0x044d, 0x044e, 0x044f
+ },
['greek'] = { -- this should be the lowercase table
-- 0x0391, 0x0392, 0x0393, 0x0394, 0x0395,
-- 0x0396, 0x0397, 0x0398, 0x0399, 0x039A,
@@ -146,6 +161,7 @@ counters['gr'] = counters['greek']
counters['g'] = counters['greek']
counters['sl'] = counters['slovenian']
counters['es'] = counters['spanish']
+counters['ru'] = counters['russian']
counters['kr'] = counters['korean']
counters['kr-p'] = counters['korean-parenthesis']
counters['kr-c'] = counters['korean-circle']
@@ -165,6 +181,7 @@ counters['koreancirclenumerals'] = counters['korean-circle']
counters['sloveniannumerals'] = counters['slovenian']
counters['spanishnumerals'] = counters['spanish']
+counters['russiannumerals'] = counters['russian']
local decimals = allocate {
['arabic'] = {
@@ -582,23 +599,29 @@ 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
+function converters.spanishnumerals (n) return alphabetic(n,"es") end
+function converters.Spanishnumerals (n) return Alphabetic(n,"es") end
+function converters.sloveniannumerals(n) return alphabetic(n,"sl") end
+function converters.Sloveniannumerals(n) return Alphabetic(n,"sl") end
+function converters.russiannumerals (n) return alphabetic(n,"ru") end
+function converters.Russiannumerals (n) return Alphabetic(n,"ru") end
converters['alphabetic:es'] = converters.spanishnumerals
converters['alphabetic:sl'] = converters.sloveniannumerals
+converters['alphabetic:ru'] = converters.russiannumerals
converters['Alphabetic:es'] = converters.Spanishnumerals
converters['Alphabetic:sl'] = converters.Sloveniannumerals
+converters['Alphabetic:ru'] = converters.Russiannumerals
-- bonus
converters['a:es'] = converters.spanishnumerals
converters['a:sl'] = converters.sloveniannumerals
+converters['a:ru'] = converters.russiannumerals
converters['A:es'] = converters.Spanishnumerals
converters['A:sl'] = converters.Sloveniannumerals
+converters['A:ru'] = converters.Russiannumerals
-- end of bonus
@@ -683,94 +706,104 @@ implement {
-- -- the original.
-- --
-- -- Conversion by Hans Hagen
---
--- local g_days_in_month = { [0]=31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
--- local j_days_in_month = { [0]=31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29 }
---
--- local function div(a,b)
--- return math.floor(a/b)
--- end
---
--- local function remainder(a,b)
--- return a - div(a,b)*b
--- end
---
--- function gregorian_to_jalali(gy,gm,gd)
--- local jy, jm, jd, g_day_no, j_day_no, j_np, i
--- gy, gm, gd = gy - 1600, gm - 1, gd - 1
--- g_day_no = 365*gy + div((gy+3),4) - div((gy+99),100) + div((gy+399),400)
--- i = 0
--- while i < gm do
--- g_day_no = g_day_no + g_days_in_month[i]
--- i = i + 1
--- end
--- if (gm>1 and ((gy%4==0 and gy%100~=0) or (gy%400==0))) then
--- g_day_no = g_day_no + 1
--- end
--- g_day_no = g_day_no + gd
--- j_day_no = g_day_no - 79
--- j_np = div(j_day_no,12053)
--- j_day_no = remainder(j_day_no,12053)
--- jy = 979 + 33*j_np + 4*div(j_day_no,1461)
--- j_day_no = remainder(j_day_no,1461)
--- if j_day_no >= 366 then
--- jy = jy + div((j_day_no-1),365)
--- j_day_no = remainder((j_day_no-1),365)
--- end
--- i = 0
--- while i < 11 and j_day_no >= j_days_in_month[i] do
--- j_day_no = j_day_no - j_days_in_month[i]
--- i = i + 1
--- end
--- jm = i + 1
--- jd = j_day_no + 1
--- return jy, jm, jd
--- end
---
--- function jalali_to_gregorian(jy,jm,jd)
--- local gy, gm, gd, g_day_no, j_day_no, leap, i
--- jy, jm, jd = jy - 979, jm - 1, jd - 1
--- j_day_no = 365*jy + div(jy,33)*8 + div((remainder(jy,33)+3),4)
--- i = 0
--- while i < jm do
--- j_day_no = j_day_no + j_days_in_month[i]
--- i = i + 1
--- end
--- j_day_no = j_day_no + jd
--- g_day_no = j_day_no + 79
--- gy = 1600 + 400*div(g_day_no,146097)
--- g_day_no = remainder (g_day_no, 146097)
--- leap = 1
--- if g_day_no >= 36525 then
--- g_day_no = g_day_no - 1
--- gy = gy + 100*div(g_day_no,36524)
--- g_day_no = remainder (g_day_no, 36524)
--- if g_day_no >= 365 then
--- g_day_no = g_day_no + 1
--- else
--- leap = 0
--- end
--- end
--- gy = gy + 4*div(g_day_no,1461)
--- g_day_no = remainder (g_day_no, 1461)
--- if g_day_no >= 366 then
--- leap = 0
--- g_day_no = g_day_no - 1
--- gy = gy + div(g_day_no, 365)
--- g_day_no = remainder(g_day_no, 365)
--- end
--- i = 0
--- while g_day_no >= g_days_in_month[i] + ((i == 1 and leap) or 0) do
--- g_day_no = g_day_no - g_days_in_month[i] + ((i == 1 and leap) or 0)
--- i = i + 1
--- end
--- gm = i + 1
--- gd = g_day_no + 1
--- return gy, gm, gd
+
+local g_days_in_month = { [0] = 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
+local j_days_in_month = { [0] = 31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29 }
+
+local div = math.div
+local mod = math.mod
+
+function gregorian_to_jalali(gy,gm,gd)
+ local jy, jm, jd, g_day_no, j_day_no, j_np, i
+ gy, gm, gd = gy - 1600, gm - 1, gd - 1
+ g_day_no = 365*gy + div((gy+3),4) - div((gy+99),100) + div((gy+399),400)
+ i = 0
+ while i < gm do
+ g_day_no = g_day_no + g_days_in_month[i]
+ i = i + 1
+ end
+ if (gm>1 and ((gy%4==0 and gy%100~=0) or (gy%400==0))) then
+ g_day_no = g_day_no + 1
+ end
+ g_day_no = g_day_no + gd
+ j_day_no = g_day_no - 79
+ j_np = div(j_day_no,12053)
+ j_day_no = mod(j_day_no,12053)
+ jy = 979 + 33*j_np + 4*div(j_day_no,1461)
+ j_day_no = mod(j_day_no,1461)
+ if j_day_no >= 366 then
+ jy = jy + div((j_day_no-1),365)
+ j_day_no = mod((j_day_no-1),365)
+ end
+ i = 0
+ while i < 11 and j_day_no >= j_days_in_month[i] do
+ j_day_no = j_day_no - j_days_in_month[i]
+ i = i + 1
+ end
+ jm = i + 1
+ jd = j_day_no + 1
+ return jy, jm, jd
+end
+
+function jalali_to_gregorian(jy,jm,jd)
+ local gy, gm, gd, g_day_no, j_day_no, leap, i
+ jy, jm, jd = jy - 979, jm - 1, jd - 1
+ j_day_no = 365*jy + div(jy,33)*8 + div((mod(jy,33)+3),4)
+ for i=0,jm-1,1 do
+ j_day_no = j_day_no + j_days_in_month[i]
+ end
+ j_day_no = j_day_no + jd
+ g_day_no = j_day_no + 79
+ gy = 1600 + 400*div(g_day_no,146097)
+ g_day_no = mod(g_day_no, 146097)
+ leap = 1
+ if g_day_no >= 36525 then
+ g_day_no = g_day_no - 1
+ gy = gy + 100*div(g_day_no,36524)
+ g_day_no = mod(g_day_no, 36524)
+ if g_day_no >= 365 then
+ g_day_no = g_day_no + 1
+ else
+ leap = 0
+ end
+ end
+ gy = gy + 4*div(g_day_no,1461)
+ g_day_no = mod(g_day_no, 1461)
+ if g_day_no >= 366 then
+ leap = 0
+ g_day_no = g_day_no - 1
+ gy = gy + div(g_day_no, 365)
+ g_day_no = mod(g_day_no, 365)
+ end
+ i = 0
+ while true do
+ local d = g_days_in_month[i] + ((i == 1 and leap) or 0)
+ if g_day_no >= d then
+ g_day_no = g_day_no - d
+ i = i + 1
+ else
+ break
+ end
+ end
+ gm = i + 1
+ gd = g_day_no + 1
+ return gy, gm, gd
+end
+
+-- local function test(yg,mg,dg,yj,mj,dj)
+-- local y1, m1, d1 = jalali_to_gregorian(yj,mj,dj)
+-- local y2, m2, d2 = gregorian_to_jalali(yg,mg,dg)
+-- print(y1 == yg and m1 == mg and d1 == dg, yg,mg,dg, y1,m1,d1)
+-- print(y2 == yj and m2 == mj and d2 == dj, yj,mj,dj, y2,m2,d2)
-- end
---
--- print(gregorian_to_jalali(2009,02,24))
--- print(jalali_to_gregorian(1387,12,06))
+
+-- test(1953,08,19, 1332,05,28)
+-- test(1979,02,11, 1357,11,22)
+-- test(2000,02,28, 1378,12,09)
+-- test(2000,03,01, 1378,12,11)
+-- test(2009,02,24, 1387,12,06)
+-- test(2015,03,21, 1394,01,01)
+-- test(2016,03,20, 1395,01,01)
-- -- more efficient but needs testing
@@ -850,7 +883,7 @@ local function ctxordinal(n,language)
local o = t and t(n)
context(n)
if o then
- context.highordinalstr(o)
+ ctx_highordinalstr(o)
end
end
@@ -1204,25 +1237,25 @@ end
implement {
name = "dayname",
- actions = { dayname, context.labeltext },
+ actions = { dayname, ctx_labeltext },
arguments = "integer",
}
implement {
name = "weekdayname",
- actions = { weekdayname, context.labeltext },
+ actions = { weekdayname, ctx_labeltext },
arguments = { "integer", "integer", "integer" }
}
implement {
name = "monthname",
- actions = { monthname, context.labeltext },
+ actions = { monthname, ctx_labeltext },
arguments = { "integer" }
}
implement {
name = "monthmnem",
- actions = { monthmnem, context.labeltext },
+ actions = { monthmnem, ctx_labeltext },
arguments = { "integer" }
}
@@ -1241,6 +1274,16 @@ local spaced = {
[v_day] = true,
}
+local dateconverters = {
+ ["jalali:to"] = gregorian_to_jalali,
+ ["jalali:from"] = jalali_to_gregorian,
+}
+
+local variants = {
+ mnem = monthmnems,
+ jalali = setmetatableindex(function(t,k) return months[k] .. ":jalali" end),
+}
+
local function currentdate(str,currentlanguage) -- second argument false : no label
local list = utilities.parsers.settings_to_array(str)
local splitlabel = languages.labels.split or string.itself -- we need to get the loading order right
@@ -1253,89 +1296,96 @@ local function currentdate(str,currentlanguage) -- second argument false : no la
end
for i=1,#list do
local entry = list[i]
- local tag, plus = splitlabel(entry)
- 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 spaced[tag] then
- context.space()
- end
- auto = false
- if tag == v_year or tag == "y" or tag == "Y" then
- context(year)
- elseif tag == "yy" or tag == "YY" then
- context("%02i",year % 100)
- elseif tag == v_month or tag == "m" then
- if currentlanguage == false then
- 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(variables[monthmnems[month]])
- else
- context.LABELTEXT(variables[months[month]])
+ local convert = dateconverters[entry]
+ if convert then
+ year, month, day = convert(year,month,day)
+ else
+ local tag, plus = splitlabel(entry)
+ 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
+ elseif plus then -- elseif plus == "mnem" then
+ mnemonic = variants[plus]
end
- elseif tag == "mm" then
- context("%02i",month)
- elseif tag == "M" then
- context(month)
- elseif tag == v_day or tag == "d" then
- if currentlanguage == false then
- context(days[day])
- else
- context.convertnumber(v_day,day) -- why not direct
+ if not auto and spaced[tag] then
+ ctx_space()
end
- whatordinal = day
- elseif tag == "dd" then
- context("%02i",day)
- whatordinal = day
- elseif tag == "D" then
- context(day)
- whatordinal = day
- elseif tag == v_weekday or tag == "w" then
- local wd = weekday(day,month,year)
- if currentlanguage == false then
- context(days[wd])
- else
- context.labeltext(variables[days[wd]])
+ auto = false
+ if tag == v_year or tag == "y" or tag == "Y" then
+ context(year)
+ elseif tag == "yy" or tag == "YY" then
+ context("%02i",year % 100)
+ elseif tag == v_month or tag == "m" then
+ if currentlanguage == false then
+ context(months[month])
+ elseif mnemonic then
+ ctx_labeltext(variables[mnemonic[month]])
+ else
+ ctx_labeltext(variables[months[month]])
+ end
+ elseif tag == v_MONTH then
+ if currentlanguage == false then
+ ctx_WORD(variables[months[month]])
+ elseif mnemonic then
+ ctx_LABELTEXT(variables[mnemonic[month]])
+ else
+ ctx_LABELTEXT(variables[months[month]])
+ end
+ elseif tag == "mm" then
+ context("%02i",month)
+ elseif tag == "M" then
+ context(month)
+ elseif tag == v_day or tag == "d" then
+ if currentlanguage == false then
+ context(days[day])
+ else
+ ctx_convertnumber(v_day,day) -- why not direct
+ end
+ whatordinal = day
+ elseif tag == "dd" then
+ context("%02i",day)
+ whatordinal = day
+ elseif tag == "D" then
+ context(day)
+ whatordinal = day
+ elseif tag == v_weekday or tag == "w" then
+ local wd = weekday(day,month,year)
+ if currentlanguage == false then
+ context(days[wd])
+ else
+ ctx_labeltext(variables[days[wd]])
+ end
+ elseif tag == v_WEEKDAY then
+ local wd = weekday(day,month,year)
+ if currentlanguage == false then
+ ctx_WORD(days[wd])
+ else
+ ctx_LABELTEXT(variables[days[wd]])
+ end
+ elseif tag == "W" then
+ context(weekday(day,month,year))
+ elseif tag == v_referral then
+ context("%04i%02i%02i",year,month,day)
+ elseif tag == v_space or tag == "\\ " then
+ ctx_space()
+ auto = true
+ elseif tag ~= "" then
+ context(tag)
+ auto = true
end
- elseif tag == v_WEEKDAY then
- local wd = weekday(day,month,year)
- if currentlanguage == false then
- context.WORD(days[wd])
- else
- context.LABELTEXT(variables[days[wd]])
- end
- elseif tag == "W" then
- context(weekday(day,month,year))
- elseif tag == v_referral then
- context("%04i%02i%02i",year,month,day)
- elseif tag == v_space or tag == "\\ " then
- context.space()
- auto = true
- elseif tag ~= "" then
- context(tag)
- auto = true
- end
- if ordinal and whatordinal then
- if currentlanguage == false then
- -- ignore
- else
- context[highordinal and "highordinalstr" or "ordinalstr"](converters.ordinal(whatordinal,currentlanguage))
+ if ordinal and whatordinal then
+ if currentlanguage == false then
+ -- ignore
+ else
+ context[highordinal and "highordinalstr" or "ordinalstr"](converters.ordinal(whatordinal,currentlanguage))
+ end
end
end
end
diff --git a/tex/context/base/mkiv/core-con.mkiv b/tex/context/base/mkiv/core-con.mkiv
index 8565a3096..a4d358e04 100644
--- a/tex/context/base/mkiv/core-con.mkiv
+++ b/tex/context/base/mkiv/core-con.mkiv
@@ -739,6 +739,9 @@
\def\spanishnumerals #1{\clf_alphabetic\numexpr#1\relax{es}}
\def\spanishNumerals #1{\clf_Alphabetic\numexpr#1\relax{es}}
+\def\russiannumerals #1{\clf_alphabetic\numexpr#1\relax{ru}}
+\def\russianNumerals #1{\clf_Alphabetic\numexpr#1\relax{ru}}
+
%defineconversion [\s!sl] [character] [\sloveniannumerals]
%defineconversion [\s!sl] [Character] [\slovenianNumerals]
%defineconversion [\s!sl] [characters] [\sloveniannumerals]
@@ -765,12 +768,28 @@
\defineconversion [\s!es] [AK] [\smallcapped\spanishnumerals]
\defineconversion [\s!es] [KA] [\smallcapped\spanishnumerals]
+%defineconversion [\s!ru] [character] [\russiannumerals]
+%defineconversion [\s!ru] [Character] [\russianNumerals]
+%defineconversion [\s!ru] [characters] [\russiannumerals]
+%defineconversion [\s!ru] [Characters] [\russianNumerals]
+
+\defineconversion [\s!ru] [alphabetic] [\russiannumerals]
+\defineconversion [\s!ru] [Alphabetic] [\russianNumerals]
+
+\defineconversion [\s!ru] [a] [\russiannumerals]
+\defineconversion [\s!ru] [A] [\russianNumerals]
+\defineconversion [\s!ru] [AK] [\smallcapped\russiannumerals]
+\defineconversion [\s!ru] [KA] [\smallcapped\russiannumerals]
+
\defineconversion [sloveniannumerals] [\sloveniannumerals]
\defineconversion [slovenianNumerals] [\slovenianNumerals]
\defineconversion [spanishnumerals] [\spanishnumerals]
\defineconversion [spanishNumerals] [\spanishNumerals]
+\defineconversion [russiannumerals] [\russiannumerals]
+\defineconversion [russianNumerals] [\russianNumerals]
+
%D In case a font has no greek (WS):
\defineconversion [mathgreek]
diff --git a/tex/context/base/mkiv/core-ctx.lua b/tex/context/base/mkiv/core-ctx.lua
index 1f22402e6..3362e43b9 100644
--- a/tex/context/base/mkiv/core-ctx.lua
+++ b/tex/context/base/mkiv/core-ctx.lua
@@ -266,7 +266,12 @@ function ctxrunner.load(ctxname)
for i=1,#runners do
local command = runners[i]
report_prepfiles("command: %s",command)
+ --
+ -- remark: we don't use sandbox.registerrunner here as we cannot predict what
+ -- gets done here, so just:
+ --
local result = os.execute(command) or 0
+ --
-- if result > 0 then
-- report_prepfiles("error, return code: %s",result)
-- end
diff --git a/tex/context/base/mkiv/core-env.lua b/tex/context/base/mkiv/core-env.lua
index 06c9708d6..583a6ed1e 100644
--- a/tex/context/base/mkiv/core-env.lua
+++ b/tex/context/base/mkiv/core-env.lua
@@ -11,36 +11,38 @@ if not modules then modules = { } end modules ['core-env'] = {
--
-- 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 rawset = rawset
-local context = context
+local P, C, S, lpegmatch, patterns = lpeg.P, lpeg.C, lpeg.S, lpeg.match, lpeg.patterns
-local texgetcount = tex.getcount
-local texsetcount = tex.setcount
+local context = context
+local ctxcore = context.core
-local allocate = utilities.storage.allocate
-local setmetatableindex = table.setmetatableindex
-local setmetatablecall = table.setmetatablecall
+local texgetcount = tex.getcount
-local createtoken = token.create
+local allocate = utilities.storage.allocate
+local setmetatableindex = table.setmetatableindex
+local setmetatablenewindex = table.setmetatablenewindex
+local setmetatablecall = table.setmetatablecall
-tex.modes = allocate { }
-tex.systemmodes = allocate { }
-tex.constants = allocate { }
-tex.conditionals = allocate { }
-tex.ifs = allocate { }
-tex.isdefined = allocate { }
+local createtoken = token.create
-local modes = { }
-local systemmodes = { }
+texmodes = allocate { } tex.modes = texmodes
+texsystemmodes = allocate { } tex.systemmodes = texsystemmodes
+texconstants = allocate { } tex.constants = texconstants
+texconditionals = allocate { } tex.conditionals = texconditionals
+texifs = allocate { } tex.ifs = texifs
+texisdefined = allocate { } tex.isdefined = texisdefined
+
+local modes = { }
+local systemmodes = { }
-- we could use the built-in tex.is[count|dimen|skip|toks] here but caching
--- at the lua en dis not that bad (and we need more anyway)
+-- at the lua end is not that bad (and we need more anyway)
-- undefined: mode == 0 or cmdname = "undefined_cs"
-
-local cache = table.setmetatableindex(function(t,k)
+local cache = setmetatableindex(function(t,k)
local v = createtoken(k)
t[k] = v
return v
@@ -51,7 +53,7 @@ end)
local iftrue = cache["iftrue"].mode
local undefined = cache["*undefined*crap*"].mode -- is this ok?
-setmetatableindex(tex.modes, function(t,k)
+setmetatableindex(texmodes, function(t,k)
local m = modes[k]
if m then
return m()
@@ -60,13 +62,16 @@ setmetatableindex(tex.modes, function(t,k)
if cache[n].mode == 0 then
return false
else
- modes[k] = function() return texgetcount(n) == 1 end
+ rawset(modes,k, function() return texgetcount(n) == 1 end)
return texgetcount(n) == 1 -- 2 is prevented
end
end
end)
+setmetatablenewindex(texmodes, function(t,k)
+ report_mode("you cannot set the %s named %a this way","mode",k)
+end)
-setmetatableindex(tex.systemmodes, function(t,k)
+setmetatableindex(texsystemmodes, function(t,k)
local m = systemmodes[k]
if m then
return m()
@@ -75,37 +80,45 @@ setmetatableindex(tex.systemmodes, function(t,k)
if cache[n].mode == 0 then
return false
else
- systemmodes[k] = function() return texgetcount(n) == 1 end
+ rawset(systemmodes,k,function() return texgetcount(n) == 1 end)
return texgetcount(n) == 1 -- 2 is prevented
end
end
end)
+setmetatablenewindex(texsystemmodes, function(t,k)
+ report_mode("you cannot set the %s named %a this way","systemmode",k)
+end)
-setmetatableindex(tex.constants, function(t,k)
+setmetatableindex(texconstants, function(t,k)
return cache[k].mode ~= 0 and texgetcount(k) or 0
end)
+setmetatablenewindex(texconstants, function(t,k)
+ report_mode("you cannot set the %s named %a this way","constant",k)
+end)
-setmetatableindex(tex.conditionals, function(t,k) -- 0 == true
+setmetatableindex(texconditionals, function(t,k) -- 0 == true
return cache[k].mode ~= 0 and texgetcount(k) == 0
end)
+setmetatablenewindex(texconditionals, function(t,k)
+ report_mode("you cannot set the %s named %a this way","conditional",k)
+end)
-table.setmetatableindex(tex.ifs, function(t,k)
- -- local mode = cache[k].mode
- -- if mode == 0 then
- -- return nil
- -- else
- -- return mode == iftrue
- -- end
+table.setmetatableindex(texifs, function(t,k)
return cache[k].mode == iftrue
end)
+setmetatablenewindex(texifs, function(t,k)
+ -- just ignore
+end)
-setmetatableindex(tex.isdefined, function(t,k)
+setmetatableindex(texisdefined, function(t,k)
return k and cache[k].mode ~= 0
end)
-
-setmetatablecall(tex.isdefined, function(t,k)
+setmetatablecall(texisdefined, function(t,k)
return k and cache[k].mode ~= 0
end)
+setmetatablenewindex(texisdefined, function(t,k)
+ -- just ignore
+end)
local dimencode = cache["scratchdimen"] .command
local countcode = cache["scratchcounter"] .command
@@ -152,107 +165,35 @@ 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)
+ ctxcore.settruevalue(name)
+ else
+ ctxcore.setfalsevalue(name)
+ end
+end
+
+function context.setmode(name,value)
+ if value then
+ ctxcore.setmode(name)
else
- context.setfalsevalue(name)
+ ctxcore.resetmode(name)
end
end
----- arg = P("{") * C(patterns.nested) * P("}") + Cc("")
+function context.setsystemmode(name,value)
+ if value then
+ ctxcore.setsystemmode(name)
+ else
+ ctxcore.resetsystemmode(name)
+ end
+end
+
+context.modes = texmodes
+context.systemmodes = texsystemmodes
+context.conditionals = texconditionals
+-------.constants = texconstants
+-------.ifs = texifs
local sep = S("), ")
local str = C((1-sep)^1)
@@ -260,9 +201,9 @@ 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
+ P("lua") * tag / ctxcore.luasetup
+ + P("xml") * arg / ctxcore.setupwithargument -- or xmlw as xmlsetup has swapped arguments
+ + (P("tex") * tag + str) / ctxcore.texsetup
+ sep^1
)^1
@@ -271,4 +212,3 @@ interfaces.implement {
actions = function(str) lpegmatch(pattern,str) end,
arguments = "string"
}
-
diff --git a/tex/context/base/mkiv/core-env.mkiv b/tex/context/base/mkiv/core-env.mkiv
index e876dc80d..0b8894265 100644
--- a/tex/context/base/mkiv/core-env.mkiv
+++ b/tex/context/base/mkiv/core-env.mkiv
@@ -119,15 +119,27 @@
{\ifcsname\??mode#1\endcsname\else\syst_modes_new{#1}\fi
\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\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\lastnamedcs\disabledmode
+% \fi}
+
\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
+ \ifnum\lastnamedcs=\preventedmode\else
\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
+ \ifnum\lastnamedcs=\preventedmode\else
\syst_mode_prefix\lastnamedcs\disabledmode
\fi}
@@ -146,6 +158,18 @@
\edef\m_modes_asked{#2}%
\rawprocesscommacommand[#1]\syst_modes_define_indeed}
+% \def\syst_modes_define_indeed#1%
+% {\ifcsname\??mode#1\endcsname
+% % already set
+% \else
+% \syst_modes_new{#1}
+% \fi
+% \ifx\m_modes_asked\v!keep
+% % not changes, disabled when undefined
+% \else
+% \csname\??mode#1\endcsname\ifx\m_modes_asked\v!yes\enabledmode\else\disabledmode\fi
+% \fi}
+
\def\syst_modes_define_indeed#1%
{\ifcsname\??mode#1\endcsname
% already set
@@ -155,7 +179,7 @@
\ifx\m_modes_asked\v!keep
% not changes, disabled when undefined
\else
- \csname\??mode#1\endcsname\ifx\m_modes_asked\v!yes\enabledmode\else\disabledmode\fi
+ \lastnamedcs\ifx\m_modes_asked\v!yes\enabledmode\else\disabledmode\fi
\fi}
% handy for mp
diff --git a/tex/context/base/mkiv/core-sys.lua b/tex/context/base/mkiv/core-sys.lua
index 3e39fa9da..0dbe76685 100644
--- a/tex/context/base/mkiv/core-sys.lua
+++ b/tex/context/base/mkiv/core-sys.lua
@@ -40,6 +40,7 @@ function environment.initializefilenames()
-- jobfilename = gsub(jobfilename, "^./","")
-- inputfilename = gsub(inputfilename,"^./","")
+ environment.jobfilefullname = fulljobname
environment.jobfilename = jobfilebase
environment.jobfilesuffix = lower(suffixonly(jobfilebase))
@@ -60,6 +61,7 @@ end
-- we could set a macro (but will that work when we're expanding? needs testing!)
implement { name = "operatingsystem", actions = function() context(os.platform) end }
+implement { name = "jobfilefullname", actions = function() context(environment.jobfilefullname) end }
implement { name = "jobfilename", actions = function() context(environment.jobfilename) end }
implement { name = "jobfilesuffix", actions = function() context(environment.jobfilesuffix) end }
implement { name = "inputfilebarename", actions = function() context(environment.inputfilebarename) end }
diff --git a/tex/context/base/mkiv/core-sys.mkiv b/tex/context/base/mkiv/core-sys.mkiv
index cc9dafdd2..172cb7a38 100644
--- a/tex/context/base/mkiv/core-sys.mkiv
+++ b/tex/context/base/mkiv/core-sys.mkiv
@@ -40,8 +40,9 @@
%D The jobname is what gets loaded by the cont-yes stub file. This name
%D also determines the name of tuc etc files.
-\let\jobfilename \clf_jobfilename
-\let\jobfilesuffix\clf_jobfilesuffix
+\let\jobfilefullname\clf_jobfilefullname
+\let\jobfilename \clf_jobfilename
+\let\jobfilesuffix \clf_jobfilesuffix
%D However, that one can itself load another file.
diff --git a/tex/context/base/mkiv/core-uti.lua b/tex/context/base/mkiv/core-uti.lua
index 23057872f..a2869e6ea 100644
--- a/tex/context/base/mkiv/core-uti.lua
+++ b/tex/context/base/mkiv/core-uti.lua
@@ -22,25 +22,29 @@ local format, match = string.format, string.match
local next, type, tostring = next, type, tostring
local concat = table.concat
-local definetable = utilities.tables.definetable
-local accesstable = utilities.tables.accesstable
-local migratetable = utilities.tables.migratetable
-local serialize = table.serialize
-local packers = utilities.packers
-local allocate = utilities.storage.allocate
-local mark = utilities.storage.mark
+local definetable = utilities.tables.definetable
+local accesstable = utilities.tables.accesstable
+local migratetable = utilities.tables.migratetable
+local serialize = table.serialize
+local packers = utilities.packers
+local allocate = utilities.storage.allocate
+local mark = utilities.storage.mark
-local implement = interfaces.implement
+local getrandom = utilities.randomizer.get
+local setrandomseedi = utilities.randomizer.setseedi
+local getrandomseed = utilities.randomizer.getseed
-local texgetcount = tex.getcount
+local implement = interfaces.implement
-local report_passes = logs.reporter("job","passes")
+local texgetcount = tex.getcount
-job = job or { }
-local job = job
+local report_passes = logs.reporter("job","passes")
-job.version = 1.30
-job.packversion = 1.02
+job = job or { }
+local job = job
+
+job.version = 1.30
+job.packversion = 1.02
-- some day we will implement loading of other jobs and then we need
-- job.jobs
@@ -132,11 +136,11 @@ local function initializer()
--
rvalue = collected.randomseed
if not rvalue then
- rvalue = math.random()
- math.setrandomseedi(rvalue,"initialize")
+ rvalue = getrandom("initialize")
+ setrandomseedi(rvalue)
rmethod = "initialized"
else
- math.setrandomseedi(rvalue,"previous run")
+ setrandomseedi(rvalue)
rmethod = "resumed"
end
tobesaved.randomseed = rvalue
@@ -169,6 +173,10 @@ function jobvariables.restore(cs)
return collectedmacros[cs] or tobesavedmacros[cs]
end
+function job.getrandomseed()
+ return tobesaved.randomseed or getrandomseed()
+end
+
-- checksums
function jobvariables.getchecksum(tag)
@@ -283,21 +291,27 @@ function job.load(filename)
local utilitydata = load(filename)
if utilitydata then
local jobpacker = utilitydata.job.packed
- for l=1,#savelist do
- local list = savelist[l]
+ local handlers = { }
+ for i=1,#savelist do
+ local list = savelist[i]
local target = list[1]
local initializer = list[3]
local result = accesstable(target,utilitydata)
- local done = packers.unpack(result,jobpacker,true)
+ local done = packers.unpack(result,jobpacker,true)
if done then
migratetable(target,mark(result))
if type(initializer) == "function" then
- initializer(result)
+ handlers[#handlers+1] = { initializer, result }
end
else
report_passes("pack version mismatch")
end
end
+ -- so we have all tables available (unpacked)
+ for i=1,#handlers do
+ local handler = handlers[i]
+ handler[1](handler[2])
+ end
end
statistics.stoptiming(_load_)
end
@@ -386,23 +400,25 @@ end)
-- a sort of joke (for ctx meeting)
-local kg_per_watt_per_second = 1 / 15000000
-local watts_per_core = 50
-local speedup_by_other_engine = 1.2
-local used_wood_factor = watts_per_core * kg_per_watt_per_second / speedup_by_other_engine
-local used_wood_factor = (50 / 15000000) / 1.2
+-- local kg_per_watt_per_second = 1 / 15000000
+-- local watts_per_core = 50
+-- local speedup_by_other_engine = 1.2
+-- local used_wood_factor = watts_per_core * kg_per_watt_per_second / speedup_by_other_engine
+-- local used_wood_factor = (50 / 15000000) / 1.2
function statistics.formatruntime(runtime)
if not environment.initex then -- else error when testing as not counters yet
+ -- stoptiming(statistics) -- to be sure
local shipped = texgetcount('nofshipouts')
local pages = texgetcount('realpageno')
if pages > shipped then
pages = shipped
end
if shipped > 0 or pages > 0 then
- local persecond = shipped / runtime
+ runtime = tonumber(runtime)
+ local persecond = (runtime > 0) and (shipped/runtime) or pages
if pages == 0 then pages = shipped end
- -- if jit then
+ -- if TEXENGINE == "luajittex" then
-- local saved = watts_per_core * runtime * kg_per_watt_per_second / speedup_by_other_engine
-- local saved = used_wood_factor * runtime
-- return format("%s seconds, %i processed pages, %i shipped pages, %.3f pages/second, %f mg tree saved by using luajittex",runtime,pages,shipped,persecond,saved*1000*1000)
diff --git a/tex/context/base/mkiv/core-uti.mkiv b/tex/context/base/mkiv/core-uti.mkiv
index de9a893ee..c50a0eacc 100644
--- a/tex/context/base/mkiv/core-uti.mkiv
+++ b/tex/context/base/mkiv/core-uti.mkiv
@@ -22,7 +22,7 @@
\appendtoks
\clf_setjobcomment
- file {tex.jobname}%
+ file {\jobname}%
format {\contextformat}%
stamp {\contextversion}%
escape {\!!bs\space...\space\!!es}%
diff --git a/tex/context/base/mkiv/data-con.lua b/tex/context/base/mkiv/data-con.lua
index 240538df2..c79fca7c5 100644
--- a/tex/context/base/mkiv/data-con.lua
+++ b/tex/context/base/mkiv/data-con.lua
@@ -91,7 +91,7 @@ function containers.read(container,name)
local storage = container.storage
local stored = storage[name]
if not stored and container.enabled and caches and containers.usecache then
- stored = caches.loaddata(container.readables,name)
+ stored = caches.loaddata(container.readables,name,container.writable)
if stored and stored.cache_version == container.version then
if trace_cache or trace_containers then
report_containers("action %a, category %a, name %a","load",container.subcategory,name)
diff --git a/tex/context/base/mkiv/data-crl.lua b/tex/context/base/mkiv/data-crl.lua
index fba5a6230..ec517fba3 100644
--- a/tex/context/base/mkiv/data-crl.lua
+++ b/tex/context/base/mkiv/data-crl.lua
@@ -8,29 +8,45 @@ if not modules then modules = { } end modules ['data-crl'] = {
-- this one is replaced by data-sch.lua --
-local gsub = string.gsub
+local gsub = string.gsub
+local exists = io.exists
local resolvers = resolvers
+local finders = resolvers.finders
+local openers = resolvers.openers
+local loaders = resolvers.loaders
-local finders, openers, loaders = resolvers.finders, resolvers.openers, resolvers.loaders
+local setfirstwritablefile = caches.setfirstwritablefile
-resolvers.curl = resolvers.curl or { }
-local curl = resolvers.curl
+local curl = resolvers.curl or { }
+resolvers.curl = curl
+local cached = { }
-local cached = { }
+local runner = sandbox.registerrunner {
+ name = "curl resolver",
+ method = "execute",
+ program = "curl",
+ template = "--silent -- insecure --create-dirs --output %cachename% %original%",
+ checkers = {
+ cachename = "cache",
+ original = "url",
+ }
+}
local function runcurl(specification)
local original = specification.original
-- local scheme = specification.scheme
local cleanname = gsub(original,"[^%a%d%.]+","-")
- local cachename = caches.setfirstwritablefile(cleanname,"curl")
+ local cachename = setfirstwritablefile(cleanname,"curl")
if not cached[original] then
- if not io.exists(cachename) then
+ if not exists(cachename) then
cached[original] = cachename
- local command = "curl --silent --create-dirs --output " .. cachename .. " " .. original
- os.execute(command)
+ runner {
+ cachename = cachename,
+ original = original,
+ }
end
- if io.exists(cachename) then
+ if exists(cachename) then
cached[original] = cachename
else
cached[original] = ""
diff --git a/tex/context/base/mkiv/data-exp.lua b/tex/context/base/mkiv/data-exp.lua
index 19ceb90c3..e34c52efb 100644
--- a/tex/context/base/mkiv/data-exp.lua
+++ b/tex/context/base/mkiv/data-exp.lua
@@ -14,7 +14,6 @@ local Ct, Cs, Cc, Carg, P, C, S = lpeg.Ct, lpeg.Cs, lpeg.Cc, lpeg.Carg, lpeg.P,
local type, next = type, next
local isdir = lfs.isdir
-local ostype = os.type
local collapsepath, joinpath, basename = file.collapsepath, file.join, file.basename
local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end)
@@ -244,7 +243,6 @@ end
local cache = { }
------ splitter = lpeg.tsplitat(S(ostype == "windows" and ";" or ":;")) -- maybe add ,
local splitter = lpeg.tsplitat(";") -- as we move towards urls, prefixes and use tables we no longer do :
local backslashswapper = lpeg.replacer("\\","/")
diff --git a/tex/context/base/mkiv/data-ini.lua b/tex/context/base/mkiv/data-ini.lua
index 5ed2cce26..09357368c 100644
--- a/tex/context/base/mkiv/data-ini.lua
+++ b/tex/context/base/mkiv/data-ini.lua
@@ -217,11 +217,11 @@ end
environment.texroot = file.collapsepath(texroot)
-if type(profiler) == "table" and not jit then
- directives.register("system.profile",function()
- profiler.start("luatex-profile.log")
- end)
-end
+-- if type(profiler) == "table" and not jit then
+-- directives.register("system.profile",function()
+-- profiler.start("luatex-profile.log")
+-- end)
+-- end
-- a forward definition
diff --git a/tex/context/base/mkiv/data-lua.lua b/tex/context/base/mkiv/data-lua.lua
index 7c12a5940..3022ae550 100644
--- a/tex/context/base/mkiv/data-lua.lua
+++ b/tex/context/base/mkiv/data-lua.lua
@@ -50,11 +50,9 @@ function helpers.cleanpath(path) -- hm, don't we have a helper for this?
return resolveprefix(lpegmatch(pattern,path))
end
-local loadedaslib = helpers.loadedaslib
-local getextraluapaths = package.extraluapaths
-local getextralibpaths = package.extralibpaths
-local registerpath = helpers.registerpath
-local lualibfile = helpers.lualibfile
+local loadedaslib = helpers.loadedaslib
+local registerpath = helpers.registerpath
+local lualibfile = helpers.lualibfile
local luaformatpaths
local libformatpaths
diff --git a/tex/context/base/mkiv/data-met.lua b/tex/context/base/mkiv/data-met.lua
index 4e8a48f50..bb8929577 100644
--- a/tex/context/base/mkiv/data-met.lua
+++ b/tex/context/base/mkiv/data-met.lua
@@ -9,7 +9,6 @@ if not modules then modules = { } end modules ['data-met'] = {
local find, format = string.find, string.format
local sequenced = table.sequenced
local addurlscheme, urlhashed = url.addscheme, url.hashed
-local getcurrentdir = lfs.currentdir
local trace_locating = false
local trace_methods = false
diff --git a/tex/context/base/mkiv/data-res.lua b/tex/context/base/mkiv/data-res.lua
index 831ad881c..4f171c445 100644
--- a/tex/context/base/mkiv/data-res.lua
+++ b/tex/context/base/mkiv/data-res.lua
@@ -69,12 +69,13 @@ local initializesetter = utilities.setters.initialize
local ostype, osname, osenv, ossetenv, osgetenv = os.type, os.name, os.env, os.setenv, os.getenv
-resolvers.cacheversion = "1.100"
-resolvers.configbanner = ""
-resolvers.homedir = environment.homedir
-resolvers.criticalvars = allocate { "SELFAUTOLOC", "SELFAUTODIR", "SELFAUTOPARENT", "TEXMFCNF", "TEXMF", "TEXOS" }
-resolvers.luacnfname = "texmfcnf.lua"
-resolvers.luacnfstate = "unknown"
+resolvers.cacheversion = "1.100"
+resolvers.configbanner = ""
+resolvers.homedir = environment.homedir
+resolvers.criticalvars = allocate { "SELFAUTOLOC", "SELFAUTODIR", "SELFAUTOPARENT", "TEXMFCNF", "TEXMF", "TEXOS" }
+resolvers.luacnfname = "texmfcnf.lua"
+resolvers.luacnffallback = "contextcnf.lua"
+resolvers.luacnfstate = "unknown"
-- The web2c tex binaries as well as kpse have built in paths for the configuration
-- files and there can be a depressing truckload of them. This is actually the weak
@@ -198,7 +199,6 @@ end
local dollarstripper = lpeg.stripper("$")
local inhibitstripper = P("!")^0 * Cs(P(1)^0)
-local backslashswapper = lpeg.replacer("\\","/")
local somevariable = P("$") / ""
local somekey = C(R("az","AZ","09","__","--")^1)
@@ -377,24 +377,32 @@ local function identify_configuration_files()
end
reportcriticalvariables(cnfspec)
local cnfpaths = expandedpathfromlist(resolvers.splitpath(cnfspec))
- local luacnfname = resolvers.luacnfname
- for i=1,#cnfpaths do
- local filepath = cnfpaths[i]
- local filename = collapsepath(filejoin(filepath,luacnfname))
- local realname = resolveprefix(filename) -- can still have "//" ... needs checking
- -- todo: environment.skipweirdcnfpaths directive
- if trace_locating then
- local fullpath = gsub(resolveprefix(collapsepath(filepath)),"//","/")
- local weirdpath = find(fullpath,"/texmf.+/texmf") or not find(fullpath,"/web2c",1,true)
- report_resolving("looking for %a on %s path %a from specification %a",luacnfname,weirdpath and "weird" or "given",fullpath,filepath)
- end
- if isfile(realname) then
- specification[#specification+1] = filename -- unresolved as we use it in matching, relocatable
+
+ local function locatecnf(luacnfname,kind)
+ for i=1,#cnfpaths do
+ local filepath = cnfpaths[i]
+ local filename = collapsepath(filejoin(filepath,luacnfname))
+ local realname = resolveprefix(filename) -- can still have "//" ... needs checking
+ -- todo: environment.skipweirdcnfpaths directive
if trace_locating then
- report_resolving("found configuration file %a",realname)
+ local fullpath = gsub(resolveprefix(collapsepath(filepath)),"//","/")
+ local weirdpath = find(fullpath,"/texmf.+/texmf") or not find(fullpath,"/web2c",1,true)
+ report_resolving("looking for %s %a on %s path %a from specification %a",
+ kind,luacnfname,weirdpath and "weird" or "given",fullpath,filepath)
+ end
+ if isfile(realname) then
+ specification[#specification+1] = filename -- unresolved as we use it in matching, relocatable
+ if trace_locating then
+ report_resolving("found %s configuration file %a",kind,realname)
+ end
end
end
end
+
+ locatecnf(resolvers.luacnfname,"regular")
+ if #specification == 0 then
+ locatecnf(resolvers.luacnffallback,"fallback")
+ end
if trace_locating then
report_resolving()
end
diff --git a/tex/context/base/mkiv/data-sch.lua b/tex/context/base/mkiv/data-sch.lua
index d79e0c7ef..23ecdc122 100644
--- a/tex/context/base/mkiv/data-sch.lua
+++ b/tex/context/base/mkiv/data-sch.lua
@@ -61,12 +61,21 @@ function resolvers.schemes.cleanname(specification)
return hash
end
-local cached, loaded, reused, thresholds, handlers = { }, { }, { }, { }, { }
-
-local function runcurl(name,cachename) -- we use sockets instead or the curl library when possible
- local command = "curl --silent --insecure --create-dirs --output " .. cachename .. " " .. name
- os.execute(command)
-end
+local cached = { }
+local loaded = { }
+local reused = { }
+local thresholds = { }
+local handlers = { }
+local runner = sandbox.registerrunner {
+ name = "curl resolver",
+ method = "execute",
+ program = "curl",
+ template = "--silent -- insecure --create-dirs --output %cachename% %original%",
+ checkers = {
+ cachename = "cache",
+ original = "url",
+ }
+}
local function fetch(specification)
local original = specification.original
@@ -89,7 +98,10 @@ local function fetch(specification)
report_schemes("fetching %a, protocol %a, method %a",original,scheme,"curl")
end
logs.flush()
- runcurl(original,cachename)
+ runner {
+ original = original,
+ cachename = cachename,
+ }
end
end
if io.exists(cachename) then
@@ -184,10 +196,6 @@ end)
local httprequest = http.request
local toquery = url.toquery
--- local function httprequest(url)
--- return os.resultof(format("curl --silent %q", url))
--- end
-
local function fetchstring(url,data)
local q = data and toquery(data)
if q then
diff --git a/tex/context/base/mkiv/data-tmp.lua b/tex/context/base/mkiv/data-tmp.lua
index 9e1515a26..eabfce96e 100644
--- a/tex/context/base/mkiv/data-tmp.lua
+++ b/tex/context/base/mkiv/data-tmp.lua
@@ -256,22 +256,22 @@ caches.getwritablepath = getwritablepath
-- use e.g. a home path where we have updated file databases and so maybe we need
-- to check first if we do have a writable one
-function caches.getfirstreadablefile(filename,...)
- local rd = getreadablepaths(...)
- for i=1,#rd do
- local path = rd[i]
- local fullname = file.join(path,filename)
- if is_readable(fullname) then
- usedreadables[i] = true
- return fullname, path
- end
- end
- return caches.setfirstwritablefile(filename,...)
-end
+-- function caches.getfirstreadablefile(filename,...)
+-- local rd = getreadablepaths(...)
+-- for i=1,#rd do
+-- local path = rd[i]
+-- local fullname = file.join(path,filename)
+-- if is_readable(fullname) then
+-- usedreadables[i] = true
+-- return fullname, path
+-- end
+-- end
+-- return caches.setfirstwritablefile(filename,...)
+-- end
-- next time we have an issue, we can test this instead:
-function caches.getfirstreadablefile_TEST_ME_FIRST(filename,...)
+function caches.getfirstreadablefile(filename,...)
-- check if we have already written once
local fullname, path = caches.setfirstwritablefile(filename,...)
if is_readable(fullname) then
@@ -297,7 +297,7 @@ function caches.setfirstwritablefile(filename,...)
return fullname, wr
end
-function caches.define(category,subcategory) -- for old times sake
+function caches.define(category,subcategory) -- not used
return function()
return getwritablepath(category,subcategory)
end
@@ -307,19 +307,31 @@ function caches.setluanames(path,name)
return format("%s/%s.%s",path,name,luasuffixes.tma), format("%s/%s.%s",path,name,luasuffixes.tmc)
end
-function caches.loaddata(readables,name)
+-- This works best if the first writable is the first readable too. In practice
+-- we can have these situations for file databases:
+--
+-- tma in readable
+-- tma + tmb/c in readable
+--
+-- runtime files like fonts are written to the writable cache anyway
+
+function caches.loaddata(readables,name,writable)
if type(readables) == "string" then
readables = { readables }
end
for i=1,#readables do
- local path = readables[i]
- local tmaname, tmcname = caches.setluanames(path,name)
+ local path = readables[i]
local loader = false
+ local tmaname, tmcname = caches.setluanames(path,name)
if isfile(tmcname) then
loader = loadfile(tmcname)
end
if not loader and isfile(tmaname) then
- -- in case we have a different engine
+ -- can be different paths when we read a file database from disk
+ local tmacrap, tmcname = caches.setluanames(writable,name)
+ if isfile(tmcname) then
+ loader = loadfile(tmcname)
+ end
utilities.lua.compile(tmaname,tmcname)
if isfile(tmcname) then
loader = loadfile(tmcname)
diff --git a/tex/context/base/mkiv/data-use.lua b/tex/context/base/mkiv/data-use.lua
index 7598506e4..930c5739f 100644
--- a/tex/context/base/mkiv/data-use.lua
+++ b/tex/context/base/mkiv/data-use.lua
@@ -56,7 +56,7 @@ statistics.register("used cache path", function() return caches.usedpaths() end
-- experiment (code will move)
-function statistics.savefmtstatus(texname,formatbanner,sourcefile) -- texname == formatname
+function statistics.savefmtstatus(texname,formatbanner,sourcefile,kind,banner) -- texname == formatname
local enginebanner = status.banner
if formatbanner and enginebanner and sourcefile then
local luvname = file.replacesuffix(texname,"luv") -- utilities.lua.suffixes.luv
@@ -67,6 +67,10 @@ function statistics.savefmtstatus(texname,formatbanner,sourcefile) -- texname ==
sourcefile = sourcefile,
}
io.savedata(luvname,table.serialize(luvdata,true))
+ lua.registerfinalizer(function()
+ logs.report("format banner","%s",banner)
+ logs.newline()
+ end)
end
end
diff --git a/tex/context/base/mkiv/enco-ini.mkiv b/tex/context/base/mkiv/enco-ini.mkiv
index 835ee61f5..50375251a 100644
--- a/tex/context/base/mkiv/enco-ini.mkiv
+++ b/tex/context/base/mkiv/enco-ini.mkiv
@@ -282,7 +282,7 @@
% some more
\ifdefined\softhyphen \else
- \let\softhyphen\-
+ \let\softhyphen\explicitdiscretionary
\fi
\def\hyphen {\softhyphen}
diff --git a/tex/context/base/mkiv/example.rng b/tex/context/base/mkiv/example.rng
new file mode 100644
index 000000000..09b80d14a
--- /dev/null
+++ b/tex/context/base/mkiv/example.rng
@@ -0,0 +1,304 @@
+<?xml version="1.0" ?>
+
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+ <start>
+ <choice>
+ <ref name="script"/>
+ <ref name="environment"/>
+ <ref name="sequence"/>
+ <ref name="request"/>
+ <ref name="reply"/>
+ </choice>
+ </start>
+
+ <define name="script">
+ <element name="script">
+ <zeroOrMore>
+ <ref name="script"/>
+ <ref name="environment"/>
+ <ref name="sequence"/>
+ <ref name="request"/>
+ <ref name="reply"/>
+ </zeroOrMore>
+ </element>
+ </define>
+
+ <define name="environment">
+ <element name="environment">
+ <zeroOrMore>
+ <ref name="environment.content"/>
+ </zeroOrMore>
+ </element>
+ </define>
+
+ <define name="environment.content">
+ <element name="variable">
+ <ref name="content"/>
+ <attribute name="label"/>
+ </element>
+ </define>
+
+ <define name="sequence">
+ <element name="sequence">
+ <zeroOrMore>
+ <ref name="sequence.process"/>
+ </zeroOrMore>
+ </element>
+ </define>
+
+ <define name="sequence.process">
+ <element name="process">
+ <interleave>
+ <optional>
+ <ref name="sequence.result"/>
+ </optional>
+ <ref name="sequence.command"/>
+ </interleave>
+ </element>
+ </define>
+
+ <define name="sequence.result">
+ <element name="result">
+ <ref name="content"/>
+ </element>
+ </define>
+
+ <define name="sequence.command">
+ <element name="command">
+ <ref name="content"/>
+ </element>
+ </define>
+
+ <define name="reply">
+ <element name="reply">
+ <interleave>
+ <optional>
+ <ref name="reply.result"/>
+ </optional>
+ <optional>
+ <ref name="status"/>
+ </optional>
+ <optional>
+ <ref name="comment"/>
+ </optional>
+ <optional>
+ <ref name="forwarded"/>
+ </optional>
+ </interleave>
+ </element>
+ </define>
+
+ <define name="reply.result">
+ <element name="result">
+ <text/>
+ </element>
+ </define>
+
+ <define name="request">
+ <element name="request">
+ <ref name="request.application"/>
+ <optional>
+ <ref name="request.client"/>
+ </optional>
+ <optional>
+ <ref name="request.server"/>
+ </optional>
+ <optional>
+ <ref name="request.data"/>
+ </optional>
+ <optional>
+ <zeroOrMore>
+ <ref name="request.blob"/>
+ </zeroOrMore>
+ </optional>
+ <optional>
+ <ref name="request.results"/>
+ </optional>
+ </element>
+ </define>
+
+ <define name="request.application">
+ <element name="application">
+ <choice>
+ <ref name="request.command"/>
+ <ref name="request.action"/>
+ </choice>
+ <ref name="request.content"/>
+ </element>
+ </define>
+
+ <define name="request.client">
+ <element name="client">
+ <ref name="request.content"/>
+ </element>
+ </define>
+
+ <define name="request.server">
+ <element name="server">
+ <ref name="request.content"/>
+ </element>
+ </define>
+
+ <define name="request.content">
+ <interleave>
+ <optional>
+ <ref name="filename"/>
+ </optional>
+ <optional>
+ <ref name="archive"/>
+ </optional>
+ <optional>
+ <ref name="comment"/>
+ </optional>
+ <optional>
+ <ref name="forwarded"/>
+ </optional>
+ <optional>
+ <ref name="domain"/>
+ </optional>
+ <optional>
+ <ref name="project"/>
+ </optional>
+ <optional>
+ <ref name="usertoken"/>
+ </optional>
+ </interleave>
+ </define>
+
+ <define name="request.command">
+ <element name="command">
+ <text/>
+ </element>
+ <optional>
+ <element name="option">
+ <text/>
+ </element>
+ </optional>
+ </define>
+
+ <define name="request.action">
+ <element name="action">
+ <text/>
+ </element>
+ </define>
+
+ <define name="request.data">
+ <element name="data">
+ <choice>
+ <zeroOrMore>
+ <ref name="data.variable"/>
+ </zeroOrMore>
+ <optional>
+ <ref name="filename"/>
+ </optional>
+ </choice>
+ </element>
+ </define>
+
+ <define name="request.results">
+ <element name="results">
+ <zeroOrMore>
+ <ref name="request.result"/>
+ </zeroOrMore>
+ </element>
+ </define>
+
+ <define name="data.result">
+ <element name="result">
+ <attribute name="status"/>
+ <attribute name="name"/>
+ </element>
+ </define>
+
+ <define name="request.blob">
+ <element name="blob">
+ <text/>
+ <attribute name="label"/>
+ </element>
+ </define>
+
+ <define name="data.variable">
+ <element name="variable">
+ <text/>
+ <attribute name="label"/>
+ </element>
+ </define>
+
+ <define name="content">
+ <zeroOrMore>
+ <mixed>
+ <ref name="resolve"/>
+ </mixed>
+ </zeroOrMore>
+ </define>
+
+ <define name="resolve">
+ <optional>
+ <element name="resolve">
+ <empty/>
+ <attribute name="label"/>
+ <optional>
+ <attribute name="type">
+ <choice>
+ <value>path</value>
+ <value>name</value>
+ <value>suffix</value>
+ <value>nopath</value>
+ <value>nosuffix</value>
+ </choice>
+ </attribute>
+ </optional>
+ </element>
+ </optional>
+ </define>
+
+ <define name="filename">
+ <element name="filename">
+ <text/>
+ </element>
+ </define>
+
+ <define name="archive">
+ <element name="archive">
+ <text/>
+ </element>
+ </define>
+
+ <define name="comment">
+ <element name="comment">
+ <text/>
+ </element>
+ </define>
+
+ <define name="status">
+ <element name="status">
+ <text/>
+ </element>
+ </define>
+
+ <define name="forwarded">
+ <element name="forwarded">
+ <text/>
+ </element>
+ </define>
+
+ <define name="domain">
+ <element name="domain">
+ <text/>
+ </element>
+ </define>
+
+ <define name="project">
+ <element name="project">
+ <text/>
+ </element>
+ </define>
+
+ <define name="usertoken">
+ <element name="usertoken">
+ <text/>
+ </element>
+ </define>
+
+</grammar>
diff --git a/tex/context/base/mkiv/file-job.lua b/tex/context/base/mkiv/file-job.lua
index 602c41a11..c7c36a03f 100644
--- a/tex/context/base/mkiv/file-job.lua
+++ b/tex/context/base/mkiv/file-job.lua
@@ -44,7 +44,6 @@ local basename = file.basename
local addsuffix = file.addsuffix
local removesuffix = file.removesuffix
local dirname = file.dirname
-local joinpath = file.join
local is_qualified_path = file.is_qualified_path
local cleanpath = resolvers.cleanpath
@@ -60,7 +59,7 @@ local resetextrapath = resolvers.resetextrapath
local pushextrapath = resolvers.pushextrapath
local popextrapath = resolvers.popextrapath
-local v_outer = variables.outer
+----- v_outer = variables.outer
local v_text = variables.text
local v_project = variables.project
local v_environment = variables.environment
@@ -539,9 +538,9 @@ job.register('job.structure.collected',root,initialize)
-- component: small unit, either or not components itself
-- product : combination of components
-local context_processfilemany = context.processfilemany
-local context_processfileonce = context.processfileonce
-local context_processfilenone = context.processfilenone
+local ctx_processfilemany = context.processfilemany
+local ctx_processfileonce = context.processfileonce
+local ctx_processfilenone = context.processfilenone
-- we need a plug in the nested loaded, push pop pseudo current dir
@@ -558,9 +557,9 @@ local function processfilecommon(name,action)
action(name)
end
-local function processfilemany(name) processfilecommon(name,context_processfilemany) end
-local function processfileonce(name) processfilecommon(name,context_processfileonce) end
-local function processfilenone(name) processfilecommon(name,context_processfilenone) end
+local function processfilemany(name) processfilecommon(name,ctx_processfilemany) end
+local function processfileonce(name) processfilecommon(name,ctx_processfileonce) end
+local function processfilenone(name) processfilecommon(name,ctx_processfilenone) end
local processors = utilities.storage.allocate {
-- [v_outer] = {
diff --git a/tex/context/base/mkiv/file-job.mkvi b/tex/context/base/mkiv/file-job.mkvi
index 0958d8433..75362d5a9 100644
--- a/tex/context/base/mkiv/file-job.mkvi
+++ b/tex/context/base/mkiv/file-job.mkvi
@@ -315,6 +315,9 @@
\def\documentvariable#name%
{\getvariable\s!document{#name}}
+\unexpanded\def\unexpandeddocumentvariable#name%
+ {\getvariable\s!document{#name}}
+
\unexpanded\def\setupdocument[#settings]%
{\setvariables[\s!document][#settings]%
\the\everysetupdocument\relax}
@@ -322,6 +325,17 @@
\unexpanded\def\presetdocument[#settings]%
{\checkvariables[\s!document][#settings]}
+% We silently ignore missing documents. Beware: there are no begin/end setups
+% invoked as we expect the loaded document to be wrapped in \startdocument ...
+% \stopdocument. This is just a convenient variant of input.
+%
+% \unexpanded\def\document
+% {\dosingleempty\syst_document}
+%
+% \def\syst_document[#1]#2%
+% \startdocument[#1]
+% \readfile{#2}{}{}}
+
% metadata:author metadata:title metadata:subject
\setvariables
diff --git a/tex/context/base/mkiv/file-lib.lua b/tex/context/base/mkiv/file-lib.lua
index 361608ea3..62cf938ba 100644
--- a/tex/context/base/mkiv/file-lib.lua
+++ b/tex/context/base/mkiv/file-lib.lua
@@ -17,7 +17,6 @@ local trace_libraries = false trackers.register("resolvers.libraries", function
local report_library = logs.reporter("files","library")
----- report_files = logs.reporter("files","readfile")
-local suffixonly = file.suffix
local removesuffix = file.removesuffix
local getreadfilename = resolvers.getreadfilename
@@ -49,12 +48,7 @@ function resolvers.uselibrary(specification) -- todo: reporter
end
for i=1,#files do
local filename = files[i]
- if loaded[filename] then
- -- next one
- else
- if onlyonce then
- loaded[filename] = true -- todo: base this on return value
- end
+ if not loaded[filename] then
local foundname = nil
local barename = removesuffix(filename)
-- direct search (we have an explicit suffix)
@@ -77,10 +71,18 @@ function resolvers.uselibrary(specification) -- todo: reporter
end
end
end
- if foundname then
- action(name,foundname)
- elseif failure then
- failure(name)
+ if not loaded[foundname] then
+ if foundname then
+ action(name,foundname)
+ if onlyonce then
+ loaded[foundname] = true -- todo: base this on return value
+ end
+ elseif failure then
+ failure(name)
+ end
+ if onlyonce then
+ loaded[filename] = true -- todo: base this on return value
+ end
end
end
end
diff --git a/tex/context/base/mkiv/file-res.lua b/tex/context/base/mkiv/file-res.lua
index 08a3e22af..44117ed46 100644
--- a/tex/context/base/mkiv/file-res.lua
+++ b/tex/context/base/mkiv/file-res.lua
@@ -118,7 +118,11 @@ local function readfilename(specification,backtrack,treetoo)
return fnd or ""
end
---~ resolvers.readfilename = readfilename -- bonus use getreadfilename instead
+-- resolvers.readfilename = readfilename -- bonus use getreadfilename instead
+
+function resolvers.finders.original(specification) -- handy, see memstreams
+ return specification.path
+end
function finders.job(specification) return readfilename(specification,false, false) end -- current path, no backtracking
function finders.loc(specification) return readfilename(specification,resolvers.maxreadlevel,false) end -- current path, backtracking
diff --git a/tex/context/base/mkiv/file-syn.lua b/tex/context/base/mkiv/file-syn.lua
index b6ad27c83..7b000f9ad 100644
--- a/tex/context/base/mkiv/file-syn.lua
+++ b/tex/context/base/mkiv/file-syn.lua
@@ -15,8 +15,6 @@ local findfile = resolvers.findfile
local implement = interfaces.implement
-local report_files = logs.reporter("files")
-
storage.register("environment/filesynonyms", filesynonyms, "environment.filesynonyms")
local function truefilename(name)
diff --git a/tex/context/base/mkiv/font-afm.lua b/tex/context/base/mkiv/font-afm.lua
index 0d6b7cb99..a9fbe89f1 100644
--- a/tex/context/base/mkiv/font-afm.lua
+++ b/tex/context/base/mkiv/font-afm.lua
@@ -32,7 +32,7 @@ local match, gmatch, lower, gsub, strip, find = string.match, string.gmatch, str
local char, byte, sub = string.char, string.byte, string.sub
local abs = math.abs
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 P, S, R, Cmt, C, Ct, Cs, Cg, Cf, lpegmatch, patterns = lpeg.P, lpeg.S, lpeg.R, lpeg.Cmt, lpeg.C, lpeg.Ct, lpeg.Cs, lpeg.Cg, lpeg.Cf, lpeg.match, lpeg.patterns
local derivetable = table.derive
local trace_features = false trackers.register("afm.features", function(v) trace_features = v end)
@@ -41,6 +41,7 @@ local trace_loading = false trackers.register("afm.loading", function(v
local trace_defining = false trackers.register("fonts.defining", function(v) trace_defining = v end)
local report_afm = logs.reporter("fonts","afm loading")
+local report_pfb = logs.reporter("fonts","pfb loading")
local setmetatableindex = table.setmetatableindex
@@ -50,10 +51,10 @@ local definers = fonts.definers
local readers = fonts.readers
local constructors = fonts.constructors
-local afm = constructors.newhandler("afm")
-local pfb = constructors.newhandler("pfb")
+local afm = constructors.handlers.afm
+local pfb = constructors.handlers.pfb
-local afmfeatures = constructors.newfeatures("afm")
+local afmfeatures = constructors.features.afm
local registerafmfeature = afmfeatures.register
afm.version = 1.501 -- incrementing this number one up will force a re-cache
@@ -293,20 +294,36 @@ do
local initialize = function(str,position,size)
n = 0
- m = tonumber(size)
+ m = size -- % 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 charstrings = P("/CharStrings")
+ local encoding = P("/Encoding")
+ local dup = P("dup")
+ local put = P("put")
+ local array = P("array")
+ local name = P("/") * C((R("az")+R("AZ")+R("09")+S("-_."))^1)
+ local digits = R("09")^1
+ local cardinal = digits / tonumber
+ local spaces = P(" ")^1
+ local spacing = patterns.whitespace^0
local p_filternames = Ct (
- (1-charstrings)^0 * charstrings * spaces * Cmt(size,initialize)
- * (Cmt(name * P(" ")^1 * C(R("09")^1), progress) + P(1))^1
+ (1-charstrings)^0 * charstrings * spaces * Cmt(cardinal,initialize)
+ * (Cmt(name * spaces * cardinal, progress) + P(1))^1
)
+ -- /Encoding 256 array
+ -- 0 1 255 {1 index exch /.notdef put} for
+ -- dup 0 /Foo put
+
+ local p_filterencoding =
+ (1-encoding)^0 * encoding * spaces * digits * spaces * array * (1-dup)^0
+ * Cf(
+ Ct("") * Cg(spacing * dup * spaces * cardinal * spaces * name * spaces * put)^1
+ ,rawset)
+
-- if one of first 4 not 0-9A-F then binary else hex
local decrypt
@@ -343,20 +360,20 @@ do
local data = io.loaddata(resolvers.findfile(filename))
- if not find(data,"!PS%-AdobeFont%-") then
- print("no font",filename)
+ if not data then
+ report_pfb("no data in %a",filename)
return
end
- if not data then
- print("no data",filename)
+ if not (find(data,"!PS%-AdobeFont%-") or find(data,"%%!FontType1")) then
+ report_pfb("no font in %a",filename)
return
end
local ascii, binary = match(data,"(.*)eexec%s+......(.*)")
if not binary then
- print("no binary",filename)
+ report_pfb("no binary data in %a",filename)
return
end
@@ -364,17 +381,26 @@ do
local vector = lpegmatch(p_filternames,binary)
- vector[0] = table.remove(vector,1)
+ if vector[1] == ".notdef" then
+ -- tricky
+ vector[0] = table.remove(vector,1)
+ end
if not vector then
- print("no vector",filename)
+ report_pfb("no vector in %a",filename)
return
end
- return vector
+ local encoding = lpegmatch(p_filterencoding,ascii)
+
+ return vector, encoding
end
+ local pfb = handlers.pfb or { }
+ handlers.pfb = pfb
+ pfb.loadvector = loadpfbvector
+
get_indexes = function(data,pfbname)
local vector = loadpfbvector(pfbname)
if vector then
@@ -410,6 +436,7 @@ do
end
+
end
local function readafm(filename)
@@ -1141,8 +1168,6 @@ registerafmfeature {
-- readers
-local check_tfm = readers.check_tfm
-
fonts.formats.afm = "type1"
fonts.formats.pfb = "type1"
@@ -1178,7 +1203,8 @@ function readers.afm(specification,method)
tfmdata = check_afm(specification,specification.name .. "." .. forced)
end
if not tfmdata then
- method = method or definers.method or "afm or tfm"
+ local check_tfm = readers.check_tfm
+ method = (check_tfm and (method or definers.method or "afm or tfm")) or "afm"
if method == "tfm" then
tfmdata = check_tfm(specification,specification.name)
elseif method == "afm" then
diff --git a/tex/context/base/mkiv/font-age.lua b/tex/context/base/mkiv/font-age.lua
index bb6883a74..b20a57538 100644
--- a/tex/context/base/mkiv/font-age.lua
+++ b/tex/context/base/mkiv/font-age.lua
@@ -12,7 +12,7 @@ if context then
os.exit()
end
-return { -- generated: inspect(fonts.encodings.agl.unicodes)
+return {
["A"]=65,
["AE"]=198,
["AEacute"]=508,
@@ -1527,6 +1527,7 @@ return { -- generated: inspect(fonts.encodings.agl.unicodes)
["dotbelowcomb"]=803,
["dotkatakana"]=12539,
["dotlessi"]=305,
+ ["dotlessj"]=567,
["dotlessjstrokehook"]=644,
["dotmath"]=8901,
["dottedcircle"]=9676,
diff --git a/tex/context/base/mkiv/font-agl.lua b/tex/context/base/mkiv/font-agl.lua
index dd3490523..ec6c519ee 100644
--- a/tex/context/base/mkiv/font-agl.lua
+++ b/tex/context/base/mkiv/font-agl.lua
@@ -631,6 +631,8 @@ local extras = allocate { -- private extensions
spade = 0x2660,
theta1 = 0x03D1,
twodotenleader = 0x2025,
+
+ dotlessj = 0x0237,
}
-- We load this table only when needed. We could use a loading mechanism
diff --git a/tex/context/base/mkiv/font-cff.lua b/tex/context/base/mkiv/font-cff.lua
index 8c57b473e..1d4f01007 100644
--- a/tex/context/base/mkiv/font-cff.lua
+++ b/tex/context/base/mkiv/font-cff.lua
@@ -13,31 +13,39 @@ if not modules then modules = { } end modules ['font-cff'] = {
-- 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.
+-- #5177. In case of doubt I looked in the fontforge code that comes with LuaTeX but
+-- it's not the easiest source to read (and doesn't cover cff2).
-- 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.
+--
+-- In retrospect I could have looked into the backend code of LuaTeX but it never
+-- occurred to me that parsing charstrings was needed there (which has to to
+-- with merging subroutines and flattening, not so much with calculations.) On
+-- the other hand, we can now feed back cff2 stuff.
local next, type, tonumber = next, type, tonumber
-local byte = string.byte
+local byte, char, gmatch = string.byte, string.char, string.gmatch
local concat, remove = table.concat, table.remove
-local floor, abs, round, ceil = math.floor, math.abs, math.round, math.ceil
+local floor, abs, round, ceil, min, max = math.floor, math.abs, math.round, math.ceil, math.min, math.max
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 formatters = string.formatters
+local bytetable = string.bytetable
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 readulong = streamreader.readcardinal4 -- 32-bit unsigned integer
local setposition = streamreader.setposition
local getposition = streamreader.getposition
+local readbytetable = streamreader.readbytetable
local setmetatableindex = table.setmetatableindex
@@ -49,6 +57,8 @@ local parsecharstring
local parsecharstrings
local resetcharstrings
local parseprivates
+local startparsing
+local stopparsing
local defaultstrings = { [0] = -- taken from ff
".notdef", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent",
@@ -129,13 +139,21 @@ local cffreaders = {
local function readheader(f)
local offset = getposition(f)
+ local major = readbyte(f)
local header = {
offset = offset,
- major = readbyte(f),
+ major = major,
minor = readbyte(f),
size = readbyte(f), -- headersize
- osize = readbyte(f), -- for offsets to start
}
+ if major == 1 then
+ header.dsize = readbyte(f) -- list of dict offsets
+ elseif major == 2 then
+ header.dsize = readushort(f) -- topdict size
+ else
+ -- I'm probably no longer around by then and we use AI's to
+ -- handle this kind of stuff, if we typeset documents at all.
+ end
setposition(f,offset+header.size)
return header
end
@@ -143,8 +161,8 @@ 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)
+local function readlengths(f,longcount)
+ local count = longcount and readulong(f) or readushort(f)
if count == 0 then
return { }
end
@@ -158,7 +176,12 @@ local function readlengths(f)
local previous = read(f)
for i=1,count do
local offset = read(f)
- lengths[i] = offset - previous
+ local length = offset - previous
+ if length < 0 then
+ report("bad offset: %i",length)
+ length = 0
+ end
+ lengths[i] = length
previous = offset
end
return lengths
@@ -216,7 +239,8 @@ end
do
- -- We use a closure so that we don't need to pass too much around.
+ -- We use a closure so that we don't need to pass too much around. For cff2 we can
+ -- at some point use a simple version as there is less.
local stack = { }
local top = 0
@@ -270,7 +294,7 @@ do
result.encoding = stack[top]
top = 0
end
- + P("\17") / function()
+ + P("\17") / function() -- valid cff2
result.charstrings = stack[top]
top = 0
end
@@ -283,19 +307,32 @@ do
end
+ P("\19") / function()
result.subroutines = stack[top]
+ top = 0 -- new, forgotten ?
end
+ P("\20") / function()
result.defaultwidthx = stack[top]
+ top = 0 -- new, forgotten ?
end
+ P("\21") / function()
result.nominalwidthx = stack[top]
+ top = 0 -- new, forgotten ?
+ end
+ -- + P("\22") / function() -- reserved
+ -- end
+ -- + P("\23") / function() -- reserved
+ -- end
+ + P("\24") / function() -- new in cff2
+ result.vstore = stack[top]
+ top = 0
+ end
+ + P("\25") / function() -- new in cff2
+ result.maxstack = stack[top]
+ top = 0
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
+ -- + P("\26") / function() -- reserved
+ -- end
+ -- + P("\27") / function() -- reserved
+ -- end
local p_double = P("\12") * (
P("\00") / function()
@@ -326,7 +363,7 @@ do
result.charstringtype = stack[top]
top = 0
end
- + P("\07") / function()
+ + P("\07") / function() -- valid cff2
result.fontmatrix = { unpack(stack,1,6) }
top = 0
end
@@ -376,11 +413,11 @@ do
result.cid.uidbase = stack[top]
top = 0
end
- + P("\36") / function()
+ + P("\36") / function() -- valid cff2
result.cid.fdarray = stack[top]
top = 0
end
- + P("\37") / function()
+ + P("\37") / function() -- valid cff2
result.cid.fdselect = stack[top]
top = 0
end
@@ -501,12 +538,12 @@ do
+ p_unsupported
)^1
- parsedictionaries = function(data,dictionaries)
+ parsedictionaries = function(data,dictionaries,what)
stack = { }
strings = data.strings
for i=1,#dictionaries do
top = 0
- result = {
+ result = what == "cff" and {
monospaced = false,
italicangle = 0,
underlineposition = -100,
@@ -524,6 +561,13 @@ do
fonttype = 0,
count = 8720,
}
+ } or {
+ charstringtype = 2,
+ charset = 0,
+ vstore = 0,
+ cid = {
+ -- nothing yet
+ },
}
lpegmatch(p_dictionary,dictionaries[i])
dictionaries[i] = result
@@ -578,22 +622,32 @@ do
-- 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 x = 0
+ local y = 0
+ local width = false
+ local r = 0
+ local stems = 0
+ local globalbias = 0
+ local localbias = 0
+ local nominalwidth = 0
+ local defaultwidth = 0
+ local charset = false
+ 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 version = 2
+ local regions = false
+ local nofregions = 0
+ local region = false
+ local factors = false
+ local axis = false
+ local vsindex = 0
local function showstate(where)
report("%w%-10s : [%s] n=%i",depth*2,where,concat(stack," ",1,top),top)
@@ -609,16 +663,17 @@ do
-- 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.
+ -- some back. I inlined some of then and a bit speed can be gained by more
+ -- inlining but not that much.
- local function moveto(x,y)
+ local function xymoveto()
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
+ if x > xmax then xmax = x elseif x < xmin then xmin = x end
+ if y > ymax then ymax = y elseif y < ymin then ymin = y end
else
xmin = x
ymin = y
@@ -628,14 +683,58 @@ do
end
end
- local function lineto(x,y)
+ local function xmoveto() -- slight speedup
+ if keepcurve then
+ r = r + 1
+ result[r] = { x, y, "m" }
+ end
+ if not checked then
+ xmin = x
+ ymin = y
+ xmax = x
+ ymax = y
+ checked = true
+ elseif x > xmax then
+ xmax = x
+ elseif x < xmin then
+ xmin = x
+ end
+ end
+
+ local function ymoveto() -- slight speedup
+ if keepcurve then
+ r = r + 1
+ result[r] = { x, y, "m" }
+ end
+ if not checked then
+ xmin = x
+ ymin = y
+ xmax = x
+ ymax = y
+ checked = true
+ elseif y > ymax then
+ ymax = y
+ elseif y < ymin then
+ ymin = y
+ end
+ end
+
+ local function moveto()
+ if trace_charstrings then
+ showstate("moveto")
+ end
+ top = 0 -- forgotten
+ xymoveto()
+ end
+
+ local function xylineto() -- we could inline, no blend
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
+ if x > xmax then xmax = x elseif x < xmin then xmin = x end
+ if y > ymax then ymax = y elseif y < ymin then ymin = y end
else
xmin = x
ymin = y
@@ -645,14 +744,53 @@ do
end
end
- local function curveto(x1,y1,x2,y2,x3,y3)
+ local function xlineto() -- slight speedup
+ if keepcurve then
+ r = r + 1
+ result[r] = { x, y, "l" }
+ end
+ if not checked then
+ xmin = x
+ ymin = y
+ xmax = x
+ ymax = y
+ checked = true
+ elseif x > xmax then
+ xmax = x
+ elseif x < xmin then
+ xmin = x
+ end
+ end
+
+ local function ylineto() -- slight speedup
+ if keepcurve then
+ r = r + 1
+ result[r] = { x, y, "l" }
+ end
+ if not checked then
+ xmin = x
+ ymin = y
+ xmax = x
+ ymax = y
+ checked = true
+ elseif y > ymax then
+ ymax = y
+ elseif y < ymin then
+ ymin = y
+ end
+ end
+
+ local function xycurveto(x1,y1,x2,y2,x3,y3) -- called local so no blend here
+ if trace_charstrings then
+ showstate("curveto")
+ end
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
+ if x1 > xmax then xmax = x1 elseif x1 < xmin then xmin = x1 end
+ if y1 > ymax then ymax = y1 elseif y1 < ymin then ymin = y1 end
else
xmin = x1
ymin = y1
@@ -660,22 +798,22 @@ do
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
+ if x2 > xmax then xmax = x2 elseif x2 < xmin then xmin = x2 end
+ if y2 > ymax then ymax = y2 elseif y2 < ymin then ymin = y2 end
+ if x3 > xmax then xmax = x3 elseif x3 < xmin then xmin = x3 end
+ if y3 > ymax then ymax = y3 elseif y3 < ymin then ymin = y3 end
end
local function rmoveto()
- if top > 2 then
- if not width then
+ if not width then
+ if top > 2 then
width = stack[1]
if trace_charstrings then
- showvalue("width",width)
+ showvalue("backtrack width",width)
end
+ else
+ width = true
end
- elseif not width then
- width = true
end
if trace_charstrings then
showstate("rmoveto")
@@ -683,45 +821,45 @@ do
x = x + stack[top-1] -- dx1
y = y + stack[top] -- dy1
top = 0
- moveto(x,y)
+ xymoveto()
end
local function hmoveto()
- if top > 1 then
- if not width then
+ if not width then
+ if top > 1 then
width = stack[1]
if trace_charstrings then
- showvalue("width",width)
+ showvalue("backtrack width",width)
end
+ else
+ width = true
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)
+ xmoveto()
end
local function vmoveto()
- if top > 1 then
- if not width then
+ if not width then
+ if top > 1 then
width = stack[1]
if trace_charstrings then
- showvalue("width",width)
+ showvalue("backtrack width",width)
end
+ else
+ width = true
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)
+ ymoveto()
end
local function rlineto()
@@ -731,21 +869,7 @@ do
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)
+ xylineto()
end
top = 0
end
@@ -754,14 +878,48 @@ do
if trace_charstrings then
showstate("hlineto")
end
- xlineto(true)
+ if top == 1 then
+ x = x + stack[1]
+ xlineto()
+ else
+ local swap = true
+ for i=1,top do
+ if swap then
+ x = x + stack[i]
+ xlineto()
+ swap = false
+ else
+ y = y + stack[i]
+ ylineto()
+ swap = true
+ end
+ end
+ end
+ top = 0
end
local function vlineto() -- y (x,y)+ | (y,x)+
if trace_charstrings then
showstate("vlineto")
end
- xlineto(false)
+ if top == 1 then
+ y = y + stack[1]
+ ylineto()
+ else
+ local swap = false
+ for i=1,top do
+ if swap then
+ x = x + stack[i]
+ xlineto()
+ swap = false
+ else
+ y = y + stack[i]
+ ylineto()
+ swap = true
+ end
+ end
+ end
+ top = 0
end
local function rrcurveto()
@@ -773,9 +931,9 @@ do
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)
+ x = bx + stack[i+4] -- dxc
+ y = by + stack[i+5] -- dyc
+ xycurveto(ax,ay,bx,by,x,y)
end
top = 0
end
@@ -786,17 +944,17 @@ do
end
local s = 1
if top % 2 ~= 0 then
- y = y + stack[1] -- dy1
+ y = y + stack[1] -- dy1
s = 2
end
for i=s,top,4 do
- local ax = x + stack[i] -- dxa
+ 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
+ x = bx + stack[i+3] -- dxc
y = by
- curveto(ax,ay,bx,by,x,y)
+ xycurveto(ax,ay,bx,by,x,y)
end
top = 0
end
@@ -808,28 +966,64 @@ do
local s = 1
local d = 0
if top % 2 ~= 0 then
- d = stack[1] -- dx1
+ d = stack[1] -- dx1
s = 2
end
for i=s,top,4 do
local ax = x + d
- local ay = y + stack[i] -- dya
+ 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)
+ y = by + stack[i+3] -- dyc
+ xycurveto(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
+-- 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
+-- xycurveto(ax,ay,bx,by,x,y)
+-- 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
@@ -857,11 +1051,12 @@ do
end
swap = true
end
- curveto(ax,ay,bx,by,x,y)
+ xycurveto(ax,ay,bx,by,x,y)
end
top = 0
end
+
local function hvcurveto()
if trace_charstrings then
showstate("hvcurveto")
@@ -887,11 +1082,11 @@ do
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)
+ xycurveto(ax,ay,bx,by,x,y)
end
x = x + stack[top-1] -- dxc
y = y + stack[top] -- dyc
- lineto(x,y)
+ xylineto()
top = 0
end
@@ -903,7 +1098,7 @@ do
for i=1,top-6,2 do
x = x + stack[i]
y = y + stack[i+1]
- lineto(x,y)
+ xylineto()
end
end
local ax = x + stack[top-5]
@@ -912,7 +1107,7 @@ do
local by = ay + stack[top-2]
x = bx + stack[top-1]
y = by + stack[top]
- curveto(ax,ay,bx,by,x,y)
+ xycurveto(ax,ay,bx,by,x,y)
top = 0
end
@@ -928,14 +1123,14 @@ do
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)
+ xycurveto(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)
+ xycurveto(dx,dy,ex,ey,x,y)
top = 0
end
@@ -943,19 +1138,19 @@ do
if trace_charstrings then
showstate("hflex")
end
- local ax = x + stack[1] -- dx1
+ 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)
+ xycurveto(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)
+ x = ex + stack[7] -- dx6
+ xycurveto(dx,dy,ex,ey,x,y)
top = 0
end
@@ -969,13 +1164,13 @@ do
local by = ay + stack[4] -- dy2
local cx = bx + stack[5] -- dx3
local cy = by
- curveto(ax,ay,bx,by,cx,cy)
+ xycurveto(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)
+ x = ex + stack[9] -- dx6
+ xycurveto(dx,dy,ex,ey,x,y)
top = 0
end
@@ -989,7 +1184,7 @@ do
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)
+ xycurveto(ax,ay,bx,by,cx,cy)
local dx = cx + stack[7] --dx4
local dy = cy + stack[8] --dy4
local ex = dx + stack[9] --dx5
@@ -999,7 +1194,7 @@ do
else
y = ey + stack[11]
end
- curveto(dx,dy,ex,ey,x,y)
+ xycurveto(dx,dy,ex,ey,x,y)
top = 0
end
@@ -1052,13 +1247,216 @@ do
end
end
- local function unsupported()
+ local function unsupported(t)
+ if trace_charstrings then
+ showstate("unsupported " .. t)
+ end
+ top = 0
+ end
+
+ local function unsupportedsub(t)
+ if trace_charstrings then
+ showstate("unsupported sub " .. t)
+ end
+ top = 0
+ end
+
+ -- type 1 (not used in type 2)
+
+ local function getstem3()
if trace_charstrings then
- showstate("unsupported")
+ showstate("stem3")
+ end
+ top = 0
+ end
+
+ local function divide()
+ if version == 1 then
+ local d = stack[top]
+ top = top - 1
+ stack[top] = stack[top] / d
+ end
+ end
+
+ local function closepath()
+ if version == 1 then
+ if trace_charstrings then
+ showstate("closepath")
+ end
+ end
+ top = 0
+ end
+
+ local function hsbw()
+ if version == 1 then
+ if trace_charstrings then
+ showstate("dotsection")
+ end
+ width = stack[top]
+ end
+ top = 0
+ end
+
+ local function seac()
+ if version == 1 then
+ if trace_charstrings then
+ showstate("seac")
+ end
+ end
+ top = 0
+ end
+
+ local function sbw()
+ if version == 1 then
+ if trace_charstrings then
+ showstate("sbw")
+ end
+ width = stack[top-1]
+ end
+ top = 0
+ end
+
+ -- these are probably used for special cases i.e. call out to postscript
+
+ local function callothersubr()
+ if version == 1 then
+ -- we don't support this (ok, we could mimick these othersubs)
+ if trace_charstrings then
+ showstate("callothersubr (unsupported)")
+ end
+ end
+ top = 0
+ end
+
+ local function pop()
+ if version == 1 then
+ -- we don't support this
+ if trace_charstrings then
+ showstate("pop (unsupported)")
+ end
+ top = top + 1
+ stack[top] = 0 -- a dummy
+ else
+ top = 0
+ end
+ end
+
+ local function setcurrentpoint()
+ if version == 1 then
+ -- we don't support this
+ if trace_charstrings then
+ showstate("pop (unsupported)")
+ end
+ x = x + stack[top-1]
+ y = y + stack[top]
end
top = 0
end
+ -- So far for unsupported postscript. Now some cff2 magic. As I still need
+ -- to wrap my head around the rather complex variable font specification
+ -- with regions and axis, the following approach kind of works but is more
+ -- some trial and error trick. It's still not clear how much of the complex
+ -- truetype description applies to cff.
+
+ local reginit = false
+
+ local function updateregions(n) -- n + 1
+ if regions then
+ local current = regions[n] or regions[1]
+ nofregions = #current
+ if axis and n ~= reginit then
+ factors = { }
+ for i=1,nofregions do
+ local region = current[i]
+ local s = 1
+ for j=1,#axis do
+ local f = axis[j]
+ local r = region[j]
+ local start = r.start
+ local peak = r.peak
+ local stop = r.stop
+ if start > peak or peak > stop then
+ -- * 1
+ elseif start < 0 and stop > 0 and peak ~= 0 then
+ -- * 1
+ elseif peak == 0 then
+ -- * 1
+ elseif f < start or f > stop then
+ -- * 0
+ s = 0
+ break
+ elseif f < peak then
+ s = s * (f - start) / (peak - start)
+ elseif f > peak then
+ s = s * (stop - f) / (stop - peak)
+ else
+ -- * 1
+ end
+ end
+ factors[i] = s
+ end
+ end
+ end
+ reginit = n
+ end
+
+ local function setvsindex()
+ local vsindex = stack[top]
+ if trace_charstrings then
+ showstate(formatters["vsindex %i"](vsindex))
+ end
+ updateregions(vsindex)
+ top = top - 1
+ end
+
+ local function blend()
+ local n = stack[top]
+ top = top - 1
+ if axis then
+ -- x (r1x,r2x,r3x)
+ -- (x,y) (r1x,r2x,r3x) (r1y,r2y,r3y)
+ if trace_charstrings then
+ local t = top - nofregions * n
+ local m = t - n
+ for i=1,n do
+ local k = m + i
+ local d = m + n + (i-1)*nofregions
+ local old = stack[k]
+ local new = old
+ for r=1,nofregions do
+ new = new + stack[d+r] * factors[r]
+ end
+ stack[k] = new
+ showstate(formatters["blend %i of %i: %s -> %s"](i,n,old,new))
+ end
+ top = t
+ elseif n == 1 then
+ top = top - nofregions
+ local v = stack[top]
+ for r=1,nofregions do
+ v = v + stack[top+r] * factors[r]
+ end
+ stack[top] = v
+ else
+ top = top - nofregions * n
+ local d = top
+ local k = top - n
+ for i=1,n do
+ k = k + 1
+ local v = stack[k]
+ for r=1,nofregions do
+ v = v + stack[d+r] * factors[r]
+ end
+ stack[k] = v
+ d = d + nofregions
+ end
+ end
+ else
+ -- error
+ end
+ end
+
-- Bah, we cannot use a fast lpeg because a hint has an unknown size and a
-- runtime capture cannot handle that well.
@@ -1076,10 +1474,10 @@ do
unsupported, -- 10 -- calllocal,
unsupported, -- 11 -- callreturn,
unsupported, -- 12 -- elsewhere
- unsupported, -- 13 -- hsbw
+ hsbw, -- 13 -- hsbw (type 1 cff)
unsupported, -- 14 -- endchar,
- unsupported, -- 15
- unsupported, -- 16
+ setvsindex, -- 15 -- cff2
+ blend, -- 16 -- cff2
unsupported, -- 17
getstem, -- 18 -- hstemhm
getmask, -- 19 -- hintmask
@@ -1098,82 +1496,190 @@ do
}
local subactions = {
+ -- cff 1
+ [000] = dotsection,
+ [001] = getstem3,
+ [002] = getstem3,
+ [006] = seac,
+ [007] = sbw,
+ [012] = divide,
+ [016] = callothersubr,
+ [017] = pop,
+ [033] = setcurrentpoint,
+ -- cff 2
[034] = hflex,
[035] = flex,
[036] = hflex1,
[037] = flex1,
}
- local p_bytes = Ct((P(1)/byte)^0)
+ local c_endchar = char(14)
- local function call(scope,list,bias,process)
- local index = stack[top] + bias
- top = top - 1
- if trace_charstrings then
- showvalue(scope,index,true)
+ local passon do
+
+ -- todo: round in blend
+ -- todo: delay this hash
+
+ local rshift = bit32.rshift
+ local band = bit32.band
+ local round = math.round
+
+ local encode = table.setmetatableindex(function(t,i)
+ for i=-2048,-1130 do
+ t[i] = char(28,band(rshift(i,8),0xFF),band(i,0xFF))
+ end
+ for i=-1131,-108 do
+ local v = 0xFB00 - i - 108
+ t[i] = char(band(rshift(v,8),0xFF),band(v,0xFF))
+ end
+ for i=-107,107 do
+ t[i] = char(i + 139)
+ end
+ for i=108,1131 do
+ local v = 0xF700 + i - 108
+ t[i] = char(band(rshift(v,8),0xFF),band(v,0xFF))
+ end
+ for i=1132,2048 do
+ t[i] = char(28,band(rshift(i,8),0xFF),band(i,0xFF))
+ end
+ return t[i]
+ end)
+
+ local function setvsindex()
+ local vsindex = stack[top]
+ updateregions(vsindex)
+ top = top - 1
+ end
+
+ local function blend()
+ local n = stack[top]
+ top = top - 1
+ if not axis then
+ -- fatal error
+ elseif n == 1 then
+ top = top - nofregions
+ local v = stack[top]
+ for r=1,nofregions do
+ v = v + stack[top+r] * factors[r]
+ end
+ stack[top] = round(v)
+ else
+ top = top - nofregions * n
+ local d = top
+ local k = top - n
+ for i=1,n do
+ k = k + 1
+ local v = stack[k]
+ for r=1,nofregions do
+ v = v + stack[d+r] * factors[r]
+ end
+ stack[k] = round(v)
+ d = d + nofregions
+ end
+ end
end
- local str = list[index]
- if str then
- if type(str) == "string" then
- str = lpegmatch(p_bytes,str)
- list[index] = str
+
+ passon = function(operation)
+ if operation == 15 then
+ setvsindex()
+ elseif operation == 16 then
+ blend()
+ else
+ for i=1,top do
+ r = r + 1
+ result[r] = encode[stack[i]]
+ end
+ r = r + 1
+ result[r] = char(operation) -- maybe use a hash
+ top = 0
end
- depth = depth + 1
- process(str)
- depth = depth - 1
+ end
+
+ end
+
+ -- end of experiment
+
+ local process
+
+ local function call(scope,list,bias) -- ,process)
+ depth = depth + 1
+ if top == 0 then
+ showstate(formatters["unknown %s call"](scope))
+ top = 0
else
- report("unknown %s %i",scope,index)
+ local index = stack[top] + bias
+ top = top - 1
+ if trace_charstrings then
+ showvalue(scope,index,true)
+ end
+ local tab = list[index]
+ if tab then
+ process(tab)
+ else
+ showstate(formatters["unknown %s call %i"](scope,index))
+ top = 0
+ end
end
+ depth = depth - 1
end
- local function process(tab)
+ -- precompiling and reuse is much slower than redoing the calls
+
+ local justpass = false
+
+ process = function(tab)
local i = 1
local n = #tab
while i <= n do
local t = tab[i]
- if t >= 32 and t<=246 then
- -- -107 .. +107
+ if t >= 32 then
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
+ if t <= 246 then
+ -- -107 .. +107
+ stack[top] = t - 139
+ i = i + 1
+ elseif t <= 250 then
+ -- +108 .. +1131
+ -- stack[top] = (t-247)*256 + tab[i+1] + 108
+ -- stack[top] = t*256 - 247*256 + tab[i+1] + 108
+ stack[top] = t*256 - 63124 + tab[i+1]
+ i = i + 2
+ elseif t <= 254 then
+ -- -1131 .. -108
+ -- stack[top] = -(t-251)*256 - tab[i+1] - 108
+ -- stack[top] = -t*256 + 251*256 - tab[i+1] - 108
+ stack[top] = -t*256 + 64148 - tab[i+1]
+ i = i + 2
+ else
+ local n = 0x100 * tab[i+1] + tab[i+2]
+ if n >= 0x8000 then
+ -- stack[top] = n - 0xFFFF - 1 + (0x100 * tab[i+3] + tab[i+4])/0xFFFF
+ stack[top] = n - 0x10000 + (0x100 * tab[i+3] + tab[i+4])/0xFFFF
+ else
+ stack[top] = n + (0x100 * tab[i+3] + tab[i+4])/0xFFFF
+ end
+ i = i + 5
+ end
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
+ -- stack[top] = n - 0xFFFF - 1
+ stack[top] = n - 0x10000
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
+ elseif t == 11 then -- not in cff2
if trace_charstrings then
showstate("return")
end
return
elseif t == 10 then
- call("local",locals,localbias,process)
+ call("local",locals,localbias) -- ,process)
i = i + 1
- elseif t == 14 then -- endchar
+ elseif t == 14 then -- not in cff2
if width then
-- okay
elseif top > 0 then
@@ -1189,14 +1695,14 @@ do
end
return
elseif t == 29 then
- call("global",globals,globalbias,process)
+ 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()
+ a(t)
else
if trace_charstrings then
showvalue("<subaction>",t)
@@ -1204,20 +1710,25 @@ do
top = 0
end
i = i + 1
+ elseif justpass then
+ passon(t)
+ i = i + 1
else
local a = actions[t]
if a then
- local s = a()
+ local s = a(t)
if s then
- i = i + s
+ i = i + s + 1
+ else
+ i = i + 1
end
else
if trace_charstrings then
showvalue("<action>",t)
end
top = 0
+ i = i + 1
end
- i = i + 1
end
end
end
@@ -1236,7 +1747,7 @@ do
-- 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
+ -- -- simplify the next checks
-- for i=1,nofsegments do
-- local s = segments[i]
-- local x = s[1]
@@ -1260,142 +1771,76 @@ do
-- 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
+ local function setbias(globals,locals)
+ if version == 1 then
+ return
+ false,
+ false
+ else
+ local g, l = #globals, #locals
+ return
+ ((g < 1240 and 107) or (g < 33900 and 1131) or 32768) + 1,
+ ((l < 1240 and 107) or (l < 33900 and 1131) or 32768) + 1
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
- --
+ local function processshape(tab,index)
+
+ tab = bytetable(tab)
+
+ x = 0
+ y = 0
+ width = false
+ r = 0
+ top = 0
+ stems = 0
+ result = { } -- we could reuse it when only boundingbox calculations are needed
+
+ xmin = 0
+ xmax = 0
+ ymin = 0
+ ymax = 0
+ checked = false
+
if trace_charstrings then
report("glyph: %i",index)
- report("data: % t",tab)
+ report("data : % t",tab)
end
- --
+
+ if regions then
+ updateregions(vsindex)
+ end
+
process(tab)
- --
- local boundingbox = { xmin, ymin, xmax, ymax }
- --
+
+ local boundingbox = {
+ round(xmin),
+ round(ymin),
+ round(xmax),
+ round(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
+ if justpass then
+ r = r + 1
+ result[r] = c_endchar
+ local stream = concat(result)
+ -- if trace_charstrings then
+ -- report("vdata: %s",stream)
+ -- end
+ if glyph then
+ glyph.stream = stream
+ else
+ glyphs[index] = { stream = stream }
+ end
+ elseif glyph then
+ glyph.segments = keepcurve ~= false and result or nil
glyph.boundingbox = boundingbox
if not glyph.width then
glyph.width = width
@@ -1404,20 +1849,107 @@ index = index - 1
glyph.name = charset[index]
end
-- glyph.sidebearing = 0 -- todo
+ elseif keepcurve then
+ glyphs[index] = {
+ segments = result,
+ boundingbox = boundingbox,
+ width = width,
+ name = charset and charset[index] or nil,
+ -- sidebearing = 0,
+ }
+ else
+ glyphs[index] = {
+ boundingbox = boundingbox,
+ width = width,
+ name = charset and charset[index] or nil,
+ }
end
- --
+
if trace_charstrings then
- report("width: %s",tostring(width))
+ report("width : %s",tostring(width))
report("boundingbox: % t",boundingbox)
end
- --
- return charstring
+
end
- resetcharstrings = function()
- result = { }
- top = 0
- stack = { }
+ startparsing = function(fontdata,data,streams)
+ reginit = false
+ axis = false
+ regions = data.regions
+ justpass = streams == true
+ if regions then
+ regions = { regions } -- needs checking
+ axis = data.factors or false
+ end
+ end
+
+ stopparsing = function(fontdata,data)
+ stack = { }
+ glyphs = false
+ result = { }
+ top = 0
+ locals = false
+ globals = false
+ strings = false
+ end
+
+ local function setwidths(private)
+ if not private then
+ return 0, 0
+ end
+ local privatedata = private.data
+ if not privatedata then
+ return 0, 0
+ end
+ return privatedata.nominalwidthx or 0, privatedata.defaultwidthx or 0
+ end
+
+ parsecharstrings = function(fontdata,data,glphs,doshapes,tversion,streams)
+
+ local dictionary = data.dictionaries[1]
+ local charstrings = dictionary.charstrings
+
+ keepcurve = doshapes
+ version = tversion
+ strings = data.strings
+ globals = data.routines or { }
+ locals = dictionary.subroutines or { }
+ charset = dictionary.charset
+ vsindex = dictionary.vsindex or 0
+ glyphs = glphs or { }
+
+ globalbias, localbias = setbias(globals,locals)
+ nominalwidth, defaultwidth = setwidths(dictionary.private)
+
+ startparsing(fontdata,data,streams)
+
+ for index=1,#charstrings do
+ processshape(charstrings[index],index-1)
+ charstrings[index] = nil -- free memory (what if used more often?)
+ end
+
+ stopparsing(fontdata,data)
+
+ return glyphs
+ end
+
+ parsecharstring = function(fontdata,data,dictionary,tab,glphs,index,doshapes,tversion)
+
+ keepcurve = doshapes
+ version = tversion
+ strings = data.strings
+ globals = data.routines or { }
+ locals = dictionary.subroutines or { }
+ charset = false
+ vsindex = dictionary.vsindex or 0
+ glyphs = glphs or { }
+
+ globalbias, localbias = setbias(globals,locals)
+ nominalwidth, defaultwidth = setwidths(dictionary.private)
+
+ processshape(tab,index-1)
+
+ -- return glyphs[index]
end
end
@@ -1425,7 +1957,7 @@ end
local function readglobals(f,data)
local routines = readlengths(f)
for i=1,#routines do
- routines[i] = readstring(f,routines[i])
+ routines[i] = readbytetable(f,routines[i])
end
data.routines = routines
end
@@ -1439,8 +1971,7 @@ local function readcharsets(f,data,dictionary)
local strings = data.strings
local nofglyphs = data.nofglyphs
local charsetoffset = dictionary.charset
-
- if charsetoffset ~= 0 then
+ if charsetoffset and charsetoffset ~= 0 then
setposition(f,header.offset+charsetoffset)
local format = readbyte(f)
local charset = { [0] = ".notdef" }
@@ -1466,6 +1997,9 @@ local function readcharsets(f,data,dictionary)
else
report("cff parser: unsupported charset format %a",format)
end
+ else
+ dictionary.nocharset = true
+ dictionary.charset = nil
end
end
@@ -1488,7 +2022,7 @@ local function readlocals(f,data,dictionary)
setposition(f,header.offset+private.offset+subroutineoffset)
local subroutines = readlengths(f)
for i=1,#subroutines do
- subroutines[i] = readstring(f,subroutines[i])
+ subroutines[i] = readbytetable(f,subroutines[i])
end
dictionary.subroutines = subroutines
private.data.subroutines = nil
@@ -1503,16 +2037,18 @@ 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 function readcharstrings(f,data,what)
local header = data.header
local dictionaries = data.dictionaries
local dictionary = dictionaries[1]
- local type = dictionary.charstringtype
+ local stringtype = dictionary.charstringtype
local offset = dictionary.charstrings
- if type == 2 then
+ if type(offset) ~= "number" then
+ -- weird
+ elseif stringtype == 2 then
setposition(f,header.offset+offset)
-- could be a metatable .. delayed loading
- local charstrings = readlengths(f)
+ local charstrings = readlengths(f,what=="cff2")
local nofglyphs = #charstrings
for i=1,nofglyphs do
charstrings[i] = readstring(f,charstrings[i])
@@ -1520,7 +2056,7 @@ local function readcharstrings(f,data)
data.nofglyphs = nofglyphs
dictionary.charstrings = charstrings
else
- report("unsupported charstr type %i",type)
+ report("unsupported charstr type %i",stringtype)
data.nofglyphs = 0
dictionary.charstrings = { }
end
@@ -1542,29 +2078,38 @@ local function readcidprivates(f,data)
parseprivates(data,dictionaries)
end
-local function readnoselect(f,data,glyphs,doshapes)
+readers.parsecharstrings = parsecharstrings -- used in font-onr.lua (type 1)
+
+local function readnoselect(f,fontdata,data,glyphs,doshapes,version,streams)
local dictionaries = data.dictionaries
local dictionary = dictionaries[1]
readglobals(f,data)
- readcharstrings(f,data)
- readencodings(f,data)
- readcharsets(f,data,dictionary)
+ readcharstrings(f,data,version)
+ if version == "cff2" then
+ dictionary.charset = nil
+ else
+ readencodings(f,data)
+ readcharsets(f,data,dictionary)
+ end
readprivates(f,data)
parseprivates(data,data.dictionaries)
readlocals(f,data,dictionary)
- parsecharstrings(data,glyphs,doshapes)
- resetcharstrings()
+ startparsing(fontdata,data,streams)
+ parsecharstrings(fontdata,data,glyphs,doshapes,version,streams)
+ stopparsing(fontdata,data)
end
-local function readfdselect(f,data,glyphs,doshapes)
+local function readfdselect(f,fontdata,data,glyphs,doshapes,version,streams)
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)
+ readcharstrings(f,data,version)
+ if version ~= "cff2" then
+ readencodings(f,data)
+ end
local charstrings = dictionary.charstrings
local fdindex = { }
local nofglyphs = data.nofglyphs
@@ -1601,6 +2146,7 @@ local function readfdselect(f,data,glyphs,doshapes)
else
-- unsupported format
end
+ -- hm, always
if maxindex >= 0 then
local cidarray = cid.fdarray
setposition(f,header.offset+cidarray)
@@ -1614,85 +2160,157 @@ local function readfdselect(f,data,glyphs,doshapes)
for i=1,#dictionaries do
readlocals(f,data,dictionaries[i])
end
+ startparsing(fontdata,data,streams)
for i=1,#charstrings do
- parsecharstring(data,dictionaries[fdindex[i]+1],charstrings[i],glyphs,i,doshapes)
+ parsecharstring(fontdata,data,dictionaries[fdindex[i]+1],charstrings[i],glyphs,i,doshapes,version)
+ charstrings[i] = nil
end
- resetcharstrings()
+ stopparsing(fontdata,data)
end
end
+local gotodatatable = readers.helpers.gotodatatable
+
+local function cleanup(data,dictionaries)
+ -- 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
+
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
+ local tableoffset = gotodatatable(f,fontdata,"cff",specification.details)
+ if tableoffset then
+ local header = readheader(f)
+ if header.major ~= 1 then
+ report("only version %s is supported for table %a",1,"cff")
+ return
+ end
+ local glyphs = fontdata.glyphs
+ 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,dictionaries,"cff")
+ --
+ local dic = dictionaries[1]
+ local cid = dic.cid
+ fontdata.cffinfo = {
+ familynamename = dic.familyname,
+ fullname = dic.fullname,
+ boundingbox = dic.boundingbox,
+ weight = dic.weight,
+ italicangle = dic.italicangle,
+ underlineposition = dic.underlineposition,
+ underlinethickness = dic.underlinethickness,
+ monospaced = dic.monospaced,
+ }
+ fontdata.cidinfo = cid and {
+ registry = cid.registry,
+ ordering = cid.ordering,
+ supplement = cid.supplement,
+ }
+ --
+ if specification.glyphs then
+ local all = specification.shapes or false
+ if cid and cid.fdselect then
+ readfdselect(f,fontdata,data,glyphs,all,"cff")
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
+ readnoselect(f,fontdata,data,glyphs,all,"cff")
end
+ end
+ cleanup(data,dictionaries)
+ end
+end
+
+function readers.cff2(f,fontdata,specification)
+ local tableoffset = gotodatatable(f,fontdata,"cff2",specification.glyphs)
+ if tableoffset then
+ local header = readheader(f)
+ if header.major ~= 2 then
+ report("only version %s is supported for table %a",2,"cff2")
+ return
+ end
+ local glyphs = fontdata.glyphs
+ local dictionaries = { readstring(f,header.dsize) }
+ local data = {
+ header = header,
+ dictionaries = dictionaries,
+ nofglyphs = fontdata.nofglyphs,
+ }
+ --
+ parsedictionaries(data,dictionaries,"cff2")
+ --
+ local offset = dictionaries[1].vstore
+ if offset > 0 then
+ local storeoffset = dictionaries[1].vstore + data.header.offset + 2 -- cff has a preceding size field
+ local regions, deltas = readers.helpers.readvariationdata(f,storeoffset,factors)
--
- -- 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
+ data.regions = regions
+ data.deltas = deltas
+ else
+ data.regions = { }
+ data.deltas = { }
+ end
+ data.factors = specification.factors
+ --
+ local cid = data.dictionaries[1].cid
+ local all = specification.shapes or false
+ if cid and cid.fdselect then
+ readfdselect(f,fontdata,data,glyphs,all,"cff2",specification.streams)
+ else
+ readnoselect(f,fontdata,data,glyphs,all,"cff2",specification.streams)
+ end
+ cleanup(data,dictionaries)
+ end
+end
+
+-- temporary helper needed for checking backend patches
+
+function readers.cffcheck(filename)
+ local f = io.open(filename,"rb")
+ if f then
+ local fontdata = {
+ glyphs = { },
+ }
+ local header = readheader(f)
+ if header.major ~= 1 then
+ report("only version %s is supported for table %a",1,"cff")
+ return
+ end
+ local names = readfontnames(f)
+ local dictionaries = readtopdictionaries(f)
+ local strings = readstrings(f)
+ local glyphs = { }
+ local data = {
+ header = header,
+ names = names,
+ dictionaries = dictionaries,
+ strings = strings,
+ glyphs = glyphs,
+ nofglyphs = 4,
+ }
+ --
+ parsedictionaries(data,dictionaries,"cff")
+ --
+ local cid = data.dictionaries[1].cid
+ if cid and cid.fdselect then
+ readfdselect(f,fontdata,data,glyphs,false)
+ else
+ readnoselect(f,fontdata,data,glyphs,false)
end
+ return data
end
end
diff --git a/tex/context/base/mkiv/font-cft.lua b/tex/context/base/mkiv/font-cft.lua
new file mode 100644
index 000000000..63c056022
--- /dev/null
+++ b/tex/context/base/mkiv/font-cft.lua
@@ -0,0 +1,543 @@
+if not modules then modules = { } end modules ['font-cft'] = {
+ 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"
+}
+
+-- context font tables
+
+-- todo: extra:
+--
+-- extra_space => space.extra
+-- space => space.width
+-- space_stretch => space.stretch
+-- space_shrink => space.shrink
+
+-- We do keep the x-height, extra_space, space_shrink and space_stretch
+-- around as these are low level official names.
+
+local type = type
+
+local fonts = fonts or { }
+local tables = fonts.tables or { }
+fonts.tables = tables
+
+local data = utilities.storage.allocate()
+tables.data = data
+
+do
+
+ local t_units = "<units>"
+ local t_unicode = "<unicode>"
+ local t_unispec = "<unispec>" -- t_unicode | { t_unicode }
+ local t_index = "<index>"
+ local t_cardinal = "<cardinal>"
+ local t_integer = "<integer>"
+ local t_float = "<float>"
+ local t_boolean = "<boolean>"
+ local t_string = "<string>"
+ local t_array = "<array>"
+ local t_hash = "<hash>"
+ local t_scaled = "<scaled>"
+ local t_keyword = "<keyword>"
+ local t_scale = "<scale>" -- 1000 based tex scale
+ local t_value = "<value>" -- number, string, boolean
+ local t_function = "<function>"
+
+ data.types = {
+ ["units"] = "<units>",
+ ["unicode"] = "<unicode>",
+ ["unispec"] = "<unispec>" , -- t_unicode | { t_unicode }
+ ["index"] = "<index>",
+ ["cardinal"] = "<cardinal>",
+ ["integer"] = "<integer>",
+ ["float"] = "<float>",
+ ["boolean"] = "<boolean>",
+ ["string"] = "<string>",
+ ["array"] = "<array>",
+ ["hash"] = "<hash>",
+ ["scaled"] = "<scaled>",
+ ["keyword"] = "<keyword>",
+ ["scale"] = "<scale>", -- 1000 based tex scale
+ ["value"] = "<value>", -- number, string, boolean
+ ["function"] = "<function>",
+ }
+
+ local boundingbox = {
+ t_units,
+ t_units,
+ t_units,
+ t_units
+ }
+
+ local mathvariants = {
+ t_array
+ }
+
+ local mathparts = {
+ {
+ advance = t_units,
+ ["end"] = t_units,
+ extender = t_units,
+ glyph = t_unicode,
+ start = t_units,
+ }
+ }
+
+ local mathkerns = {
+ {
+ height = t_units,
+ kern = t_units,
+ },
+ }
+
+ local mathparts = {
+ {
+ advance = t_scaled,
+ ["end"] = t_scaled,
+ extender = t_scaled,
+ glyph = t_unicode,
+ start = t_scaled,
+ }
+ }
+
+ local mathkerns = {
+ {
+ height = t_scaled,
+ kern = t_scaled,
+ },
+ }
+
+ local vfcommands = {
+ { t_keyword, t_value },
+ }
+
+ local description = {
+ width = t_units,
+ height = t_units,
+ depth = t_units,
+ italic = t_units,
+ index = t_index,
+ boundingbox = boundingbox,
+ unicode = t_unispec,
+ math = {
+ accent = t_units,
+ hvariants = mathvariants,
+ vvariants = mathvariants,
+ hparts = mathparts,
+ vparts = mathparts,
+ kerns = {
+ bottomright = mathkerns,
+ bottomleft = mathkerns,
+ topright = mathkerns,
+ topleft = mathkerns,
+ }
+ },
+ }
+
+ local character = {
+ width = t_scaled,
+ height = t_scaled,
+ depth = t_scaled,
+ italic = t_scaled,
+ index = t_index,
+ expansion_factor = t_scaled,
+ left_protruding = t_scaled,
+ right_protruding = t_scaled,
+ tounicode = t_string,
+ unicode = t_unispec,
+ commands = vfcommands,
+ accent = t_scaled,
+ hvariants = mathvariants,
+ vvariants = mathvariants,
+ hparts = math_parts,
+ vparts = math_parts,
+ kerns = {
+ bottomright = math_kerns,
+ bottomleft = math_kerns,
+ topright = math_kerns,
+ topleft = math_kerns,
+ },
+ ligatures = t_hash,
+ kerns = t_hash,
+ next = t_array,
+ }
+
+ data.original = {
+ cache_uuid = t_string,
+ cache_version = t_float,
+ compacted = t_boolean,
+ creator = t_string,
+ descriptions = { description },
+ format = t_string,
+ goodies = t_hash,
+ metadata = {
+ ascender = t_units,
+ averagewidth = t_units,
+ capheight = t_units,
+ descender = t_units,
+ family = t_string,
+ familyname = t_string,
+ fontname = t_string,
+ fullname = t_string,
+ italicangle = t_float,
+ monospaced = t_boolean,
+ panoseweight = t_string,
+ panosewidth = t_string,
+ pfmweight = t_units,
+ pfmwidth = t_units,
+ subfamily = t_string,
+ subfamilyname = t_string,
+ subfontindex = t_index,
+ units = t_cardinal,
+ version = t_string,
+ weight = t_string,
+ width = t_string,
+ xheight = t_units,
+ },
+ private = t_unicode,
+ properties = {
+ hascolor = t_boolean,
+ hasitalics = t_boolean,
+ hasspacekerns = t_boolean,
+ },
+ resources = {
+ duplicates = t_hash,
+ features = {
+ gpos = t_hash,
+ gsub = t_hash,
+ },
+ filename = t_string,
+ markclasses = t_hash,
+ marks = t_hash,
+ marksets = t_hash,
+ mathconstants = t_hash,
+ private = t_cardinal,
+ sequences = t_array,
+ -- unicodes = t_hash,
+ version = t_string,
+ },
+ size = t_cardinal,
+ -- tables = t_array,
+ tableversion = t_float,
+ time = t_cardinal,
+ }
+
+ data.scaled = {
+ properties = {
+ encodingbytes = t_cardinal,
+ embedding = t_cardinal, -- ?
+ cidinfo = t_hash,
+ format = t_string,
+ fontname = t_string,
+ fullname = t_string,
+ filename = t_string,
+ psname = t_string,
+ name = t_string,
+ virtualized = t_boolean,
+ hasitalics = t_boolean,
+ autoitalicamount = t_float,
+ nostackmath = t_boolean,
+ noglyphnames = t_boolean,
+ mode = t_string,
+ hasmath = t_boolean,
+ mathitalics = t_boolean,
+ textitalics = t_boolean,
+ finalized = t_boolean,
+ },
+ parameters = {
+ mathsize = t_cardinal,
+ scriptpercentage = t_float,
+ scriptscriptpercentage = t_float,
+ units = t_cardinal,
+ designsize = t_scaled,
+ expansion = {
+ stretch = t_scale,
+ shrink = t_scale,
+ step = t_scale,
+ auto = t_boolean,
+ },
+ protrusion = {
+ auto = t_boolean,
+ },
+ slantfactor = t_float,
+ extendfactor = t_float,
+ factor = t_float,
+ hfactor = t_float,
+ vfactor = t_float,
+ size = t_scaled,
+ units = t_scaled,
+ scaledpoints = t_scaled,
+ slantperpoint = t_scaled,
+ xheight = t_scaled,
+ quad = t_scaled,
+ ascender = t_scaled,
+ descender = t_scaled,
+ spacing = {
+ width = t_scaled,
+ stretch = t_scaled,
+ shrink = t_scaled,
+ extra = t_scaled,
+ },
+ -- synonyms = {
+ -- space = "spacing.width",
+ -- spacestretch = "spacing.stretch",
+ -- spaceshrink = "spacing.shrink",
+ -- extraspace = "spacing.extra",
+ -- x_height = "xheight",
+ -- space_stretch = "spacing.stretch",
+ -- space_shrink = "spacing.shrink",
+ -- extra_space = "spacing.extra",
+ -- em = "quad",
+ -- ex = "xheight",
+ -- slant = "slantperpoint",
+ -- },
+ },
+ descriptions = { description },
+ characters = { character },
+ }
+
+ data.goodies = {
+ -- preamble
+ name = t_string,
+ version = t_string,
+ comment = t_string,
+ author = t_string,
+ copyright = t_string,
+ --
+ remapping = {
+ tounicode = t_boolean,
+ unicodes = {
+ [t_string] = t_index,
+ },
+ },
+ mathematics = {
+ mapfiles = {
+ t_string,
+ },
+ virtuals = {
+ [t_string] = {
+ {
+ name = t_string,
+ features = t_hash,
+ main = t_boolean,
+ extension = t_boolean,
+ vector = t_string,
+ skewchar = t_unicode,
+ parameters = t_boolean,
+ },
+ },
+ },
+ italics = {
+ [t_string] = {
+ defaultfactor = t_float,
+ disableengine = t_boolean,
+ corrections = {
+ [t_unicode] = t_float,
+ }
+ },
+ },
+ kerns = {
+ [t_unicode] = {
+ bottomright = math_kerns,
+ topright = math_kerns,
+ bottomleft = math_kerns,
+ topleft = math_kerns,
+ },
+ },
+ alternates = {
+ [t_string] = {
+ feature = t_hash,
+ value = t_float,
+ comment = t_string,
+ },
+ },
+ variables = {
+ [t_string] = t_value,
+ },
+ parameters = {
+ [t_string] = t_value,
+ [t_string] = t_function,
+ },
+ dimensions = {
+ [t_string] = {
+ [t_unicode] = {
+ width = t_units,
+ height = t_units,
+ depth = t_units,
+ xoffset = t_units,
+ yoffset = t_units,
+ },
+ },
+ },
+ },
+ filenames = {
+ [t_string] = {
+ t_string,
+ },
+ },
+ compositions = {
+ [t_string] = {
+ dy = t_unit,
+ dx = t_unit,
+ [t_unicode] = {
+ dy = t_unit
+ },
+ [t_unicode] = {
+ anchors = {
+ top = {
+ x = t_unit,
+ y = t_unit,
+ },
+ bottom = {
+ x = t_unit,
+ y = t_unit,
+ },
+ },
+ },
+ },
+ },
+ postprocessors = {
+ [t_string] = t_function,
+ },
+ designsizes = {
+ [t_string] = {
+ [t_string] = t_string,
+ default = t_string
+ },
+ },
+ featuresets = {
+ [t_string] = {
+ t_string,
+ [t_keyword] = t_value
+ },
+ },
+ solutions = {
+ experimental = {
+ less = { t_string },
+ more = { t_string },
+ },
+ },
+ stylistics = {
+ [t_string] = t_string,
+ [t_string] = t_string,
+ },
+ colorschemes = {
+ default = {
+ [1] = { t_string },
+ }
+ },
+ files = {
+ name = t_string,
+ list = {
+ [t_string] = {
+ name = t_string,
+ weight = t_string,
+ style = t_string,
+ width = t_string,
+ },
+ },
+ },
+ typefaces = {
+ [t_string] = {
+ shortcut = t_string,
+ shape = t_string,
+ fontname = t_string,
+ normalweight = t_string,
+ boldweight = t_string,
+ width = t_string,
+ size = t_string,
+ features = t_string,
+ },
+ },
+ }
+
+end
+
+-- compatibility (for now)
+
+if fonts.constructors then
+ fonts.constructors.keys = data.scaled
+end
+
+-- handy helpers
+
+local report = logs.reporter("fonts")
+
+function tables.savefont(specification)
+ local method = specification.method
+ local filename = specification.filename
+ local fontname = specification.fontname
+ if not method or method ~= "original" then
+ method = "scaled"
+ end
+ if not filename or filename == "" then
+ filename = "temp-font-" .. method .. ".lua"
+ else
+ filename = file.addsuffix(filename,"lua")
+ end
+ if not fontname or fontname == "" then
+ fontname = true
+ end
+ if fontname == true then
+ report("saving current font in %a",filename)
+ elseif tonumber(fontname) then
+ report("saving font id %a in %a",fontname,filename)
+ fontname = tonumber(fontname)
+ else
+ report("saving font %a in %a",fontname,filename)
+ tfmdata = fonts.definers.define {
+ name = fontname
+ }
+ end
+ if tfmdata then
+ tfmdata = fonts.hashes.identifiers[tfmdata]
+ end
+ if not tfmdata then
+ -- bad news
+ elseif method == "original" then
+ tfmdata = tfmdata.shared and tfmdata.shared.rawdata
+ else
+ tfmdata = {
+ characters = tfmdata.characters,
+ parameters = tfmdata.parameters,
+ properties = tfmdata.properties,
+ specification = tfmdata.specification,
+ }
+ end
+ if tfmdata then
+ table.save(filename,tfmdata)
+ else
+ -- os.remove(filename)
+ report("saving font failed")
+ end
+end
+
+function tables.saveoriginal(filename,specification)
+ local tfmdata = get(specification)
+ if tfmdata then
+ local rawdata = tfmdata.shared and tfmdata.shared.rawdata
+ if rawdata then
+ table.save(filename,rawdata)
+ end
+ end
+end
+
+if context then
+
+ interfaces.implement {
+ name = "savefont",
+ actions = tables.savefont,
+ arguments = {
+ {
+ { "filename" },
+ { "fontname" },
+ { "method" },
+ }
+ },
+ }
+
+end
+
diff --git a/tex/context/base/mkiv/font-chk.lua b/tex/context/base/mkiv/font-chk.lua
index 15291052f..d9e88c91e 100644
--- a/tex/context/base/mkiv/font-chk.lua
+++ b/tex/context/base/mkiv/font-chk.lua
@@ -11,58 +11,63 @@ if not modules then modules = { } end modules ['font-chk'] = {
local next = next
-local formatters = string.formatters
-local bpfactor = number.dimenfactors.bp
-local fastcopy = table.fastcopy
+local formatters = string.formatters
+local bpfactor = number.dimenfactors.bp
+local fastcopy = table.fastcopy
-local report_fonts = logs.reporter("fonts","checking")
+local report_fonts = logs.reporter("fonts","checking") -- replace
-local allocate = utilities.storage.allocate
+local allocate = utilities.storage.allocate
-local fonts = fonts
+local fonts = fonts
-fonts.checkers = fonts.checkers or { }
-local checkers = fonts.checkers
+fonts.checkers = fonts.checkers or { }
+local checkers = fonts.checkers
-local fonthashes = fonts.hashes
-local fontdata = fonthashes.identifiers
-local fontcharacters = fonthashes.characters
+local fonthashes = fonts.hashes
+local fontdata = fonthashes.identifiers
+local fontcharacters = fonthashes.characters
-local helpers = fonts.helpers
+local helpers = fonts.helpers
-local addprivate = helpers.addprivate
-local hasprivate = helpers.hasprivate
-local getprivatenode = helpers.getprivatenode
+local addprivate = helpers.addprivate
+local hasprivate = helpers.hasprivate
+local getprivateslot = helpers.getprivateslot
+local getprivatecharornode = helpers.getprivatecharornode
-local otffeatures = fonts.constructors.newfeatures("otf")
-local registerotffeature = otffeatures.register
-local afmfeatures = fonts.constructors.newfeatures("afm")
-local registerafmfeature = afmfeatures.register
+local otffeatures = fonts.constructors.features.otf
+local afmfeatures = fonts.constructors.features.afm
-local is_character = characters.is_character
-local chardata = characters.data
+local registerotffeature = otffeatures.register
+local registerafmfeature = afmfeatures.register
-local tasks = nodes.tasks
-local enableaction = tasks.enableaction
-local disableaction = tasks.disableaction
+local is_character = characters.is_character
+local chardata = characters.data
-local implement = interfaces.implement
+local tasks = nodes.tasks
+local enableaction = tasks.enableaction
+local disableaction = tasks.disableaction
-local glyph_code = nodes.nodecodes.glyph
+local implement = interfaces.implement
-local nuts = nodes.nuts
-local tonut = nuts.tonut
-local tonode = nuts.tonode
+local glyph_code = nodes.nodecodes.glyph
-local getfont = nuts.getfont
-local getchar = nuts.getchar
+local new_special = nodes.pool.special
+local hpack_node = node.hpack
-local setfield = nuts.setfield
-local setchar = nuts.setchar
+local nuts = nodes.nuts
+local tonut = nuts.tonut
+local tonode = nuts.tonode
-local traverse_id = nuts.traverse_id
-local remove_node = nuts.remove
-local insert_node_after = nuts.insert_after
+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
+local insert_node_after = nuts.insert_after
-- maybe in fonts namespace
-- deletion can be option
@@ -179,11 +184,21 @@ local pdf_blob = "pdf: q %0.6F 0 0 %0.6F 0 0 cm %s %s %s rg %s %s %s RG 10 M 1 j
local cache = { } -- saves some tables but not that impressive
+local function missingtonode(tfmdata,character)
+ local commands = character.commands
+ local fake = hpack_node(new_special(commands[1][2]))
+ fake.width = character.width
+ fake.height = character.height
+ fake.depth = character.depth
+ return fake
+end
+
local function addmissingsymbols(tfmdata) -- we can have an alternative with rules
local characters = tfmdata.characters
+ local properties = tfmdata.properties
local size = tfmdata.parameters.size
- local privates = tfmdata.properties.privates
local scale = size * bpfactor
+ local tonode = properties.finalized and missingtonode or nil
for i=1,#variants do
local v = variants[i]
local tag, r, g, b = v.tag, v.r, v.g, v.b
@@ -196,6 +211,7 @@ local function addmissingsymbols(tfmdata) -- we can have an alternative with rul
local char = cache[hash]
if not char then
char = {
+ tonode = tonode,
width = size*fake.width,
height = size*fake.height,
depth = size*fake.depth,
@@ -225,27 +241,21 @@ fonts.loggers.category_to_placeholder = mapping
function commands.getplaceholderchar(name)
local id = font.current()
addmissingsymbols(fontdata[id])
- context(helpers.getprivatenode(fontdata[id],name))
+ context(getprivatenode(fontdata[id],name))
end
+-- todo in luatex: option to add characters (just slots, no kerns etc)
+
local function placeholder(font,char)
- local tfmdata = fontdata[font]
- local properties = tfmdata.properties
- local privates = properties.privates
- local category = chardata[char].category
- local fakechar = mapping[category]
- local p = privates and privates[fakechar]
- if not p then
+ local tfmdata = fontdata[font]
+ local category = chardata[char].category
+ local fakechar = mapping[category]
+ local slot = getprivateslot(font,fakechar)
+ if not slot then
addmissingsymbols(tfmdata)
- p = properties.privates[fakechar]
- end
- if properties.lateprivates then
- -- frozen already
- return "node", getprivatenode(tfmdata,fakechar)
- else
- -- good, we have \definefontfeature[default][default][missing=yes]
- return "char", p
+ slot = getprivateslot(font,fakechar)
end
+ return getprivatecharornode(tfmdata,fakechar)
end
checkers.placeholder = placeholder
@@ -427,7 +437,7 @@ local dummyzero = {
commands = { { "special", "" } },
}
-local function adddummysymbols(tfmdata,...)
+local function adddummysymbols(tfmdata)
local characters = tfmdata.characters
if not characters[0] then
characters[0] = dummyzero
diff --git a/tex/context/base/mkiv/font-col.lua b/tex/context/base/mkiv/font-col.lua
index cf1b60bb9..bce16fae7 100644
--- a/tex/context/base/mkiv/font-col.lua
+++ b/tex/context/base/mkiv/font-col.lua
@@ -24,7 +24,7 @@ local getfont = nuts.getfont
local getchar = nuts.getchar
local setfield = nuts.setfield
-local setchar = nuts.setchar
+local setfont = nuts.setfont
local traverse_id = nuts.traverse_id
local traverse_char = nuts.traverse_char
@@ -35,6 +35,9 @@ local trace_collecting = false trackers.register("fonts.collecting", function
local report_fonts = logs.reporter("fonts","collections")
+local enableaction = nodes.tasks.enableaction
+local disableaction = nodes.tasks.disableaction
+
local collections = fonts.collections or { }
fonts.collections = collections
@@ -46,7 +49,6 @@ collections.vectors = vectors
local fontdata = fonts.hashes.identifiers
local chardata = fonts.hashes.characters
-local glyph_code = nodes.nodecodes.glyph
local currentfont = font.current
local fontpatternhassize = fonts.helpers.fontpatternhassize
@@ -61,12 +63,12 @@ local function checkenabled()
-- a bit ugly but nicer than a fuzzy state while defining math
if next(vectors) then
if not enabled then
- nodes.tasks.enableaction("processors","fonts.collections.process")
+ enableaction("processors","fonts.collections.process")
enabled = true
end
else
if enabled then
- nodes.tasks.disableaction("processors","fonts.collections.process")
+ disableaction("processors","fonts.collections.process")
enabled = false
end
end
@@ -102,7 +104,7 @@ function collections.define(name,font,ranges,details)
details = settings_to_hash(details)
-- todo, combine per font start/stop as arrays
for s in gmatch(ranges,"[^, ]+") do
- local start, stop, description, gaps = characters.getrange(s)
+ local start, stop, description, gaps = characters.getrange(s,true)
if start and stop then
if trace_collecting then
if description then
@@ -117,20 +119,21 @@ function collections.define(name,font,ranges,details)
end
local offset = details.offset
if type(offset) == "string" then
- local start = characters.getrange(offset)
+ local start = characters.getrange(offset,true)
offset = start or false
else
offset = tonumber(offset) or false
end
d[#d+1] = {
- font = font,
- start = start,
- stop = stop,
- gaps = gaps,
- offset = offset,
- rscale = tonumber (details.rscale) or 1,
- force = toboolean(details.force,true),
- check = toboolean(details.check,true),
+ font = font,
+ start = start,
+ stop = stop,
+ gaps = gaps,
+ offset = offset,
+ rscale = tonumber (details.rscale) or 1,
+ force = toboolean(details.force,true),
+ check = toboolean(details.check,true),
+ features = details.features,
}
end
end
@@ -257,7 +260,6 @@ end
function collections.process(head) -- this way we keep feature processing
local done = false
- -- 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]
@@ -274,8 +276,7 @@ function collections.process(head) -- this way we keep feature processing
char,font,newchar,newfont,not chardata[newfont][newchar] and " (missing)" or ""
)
end
- setfield(n,"font",newfont)
- setchar(n,newchar)
+ setfont(n,newfont,newchar)
done = true
else
if trace_collecting then
@@ -283,7 +284,7 @@ function collections.process(head) -- this way we keep feature processing
font,vect,char,not chardata[vect][char] and " (missing)" or ""
)
end
- setfield(n,"font",vect)
+ setfont(n,vect)
done = true
end
end
diff --git a/tex/context/base/mkiv/font-col.mkvi b/tex/context/base/mkiv/font-col.mkvi
index bc8e8151e..b13047e50 100644
--- a/tex/context/base/mkiv/font-col.mkvi
+++ b/tex/context/base/mkiv/font-col.mkvi
@@ -34,7 +34,9 @@
\unexpanded\def\resetfontfallback {\dodoubleempty \font_fallbacks_reset }
\def\font_fallbacks_define[#name][#font][#ranges][#settings]%
- {\clf_fontcollectiondefine{#name}{#font}{#ranges}{#settings}}
+ {\let\mathsizesuffix\relax
+ \clf_fontcollectiondefine{#name}{#font}{#ranges}{#settings}%
+ \let\mathsizesuffix\empty}
\def\font_fallbacks_reset[#name][#font]%
{\clf_fontcollectionreset{#name}{#font}}
@@ -92,6 +94,17 @@
\def\font_fallbacks_register_main #name{\clf_fontcollectionregister{#name}}
\def\font_fallbacks_prepare_clone_vectors#name{\clf_fontcollectionclone{#name}}
+% math (experiment, todo clf_)
+
+\def\font_fallbacks_register_math#1#2#3#4%
+ {\doifelsenothing{#3}%
+ {\definedfont[#2 at #4sp]}%
+ {\definedfont[#2*#3\space at #4\scaledpoint]}%
+ \clf_registerfontfallbackid#1\space\fontid\font\space{#2}}
+
+% \def\font_fallbacks_finish_math
+% {\ctxlua{mathematics.finishfallbacks()}}
+
% check : only replace when present in replacement font (default: no)
% force : force replacent even when basefont has glyph (default: yes)
diff --git a/tex/context/base/mkiv/font-con.lua b/tex/context/base/mkiv/font-con.lua
index b11853533..85ac33a10 100644
--- a/tex/context/base/mkiv/font-con.lua
+++ b/tex/context/base/mkiv/font-con.lua
@@ -9,13 +9,14 @@ if not modules then modules = { } end modules ['font-con'] = {
-- some names of table entries will be changed (no _)
local next, tostring, rawget = next, tostring, rawget
-local format, match, lower, gsub = string.format, string.match, string.lower, string.gsub
-local utfbyte = utf.byte
-local sort, insert, concat, sortedkeys, serialize, fastcopy = table.sort, table.insert, table.concat, table.sortedkeys, table.serialize, table.fastcopy
+local format, match, lower, gsub, find = string.format, string.match, string.lower, string.gsub, string.find
+local sort, insert, concat = table.sort, table.insert, table.concat
+local sortedkeys, sortedhash, serialize, fastcopy = table.sortedkeys, table.sortedhash, table.serialize, table.fastcopy
local derivetable = table.derive
+local ioflush = io.flush
-local trace_defining = false trackers.register("fonts.defining", function(v) trace_defining = v end)
-local trace_scaling = false trackers.register("fonts.scaling" , function(v) trace_scaling = v end)
+local trace_defining = false trackers.register("fonts.defining", function(v) trace_defining = v end)
+local trace_scaling = false trackers.register("fonts.scaling", function(v) trace_scaling = v end)
local report_defining = logs.reporter("fonts","defining")
@@ -47,102 +48,6 @@ constructors.privateoffset = 0xF0000 -- 0x10FFFF
constructors.cacheintex = true -- so we see the original table in fonts.font
--- Some experimental helpers (handy for tracing):
---
--- todo: extra:
---
--- extra_space => space.extra
--- space => space.width
--- space_stretch => space.stretch
--- space_shrink => space.shrink
-
--- We do keep the x-height, extra_space, space_shrink and space_stretch
--- around as these are low level official names.
-
-constructors.keys = {
- properties = {
- encodingbytes = "number",
- embedding = "number",
- cidinfo = { },
- format = "string",
- fontname = "string",
- fullname = "string",
- filename = "filename",
- psname = "string",
- name = "string",
- virtualized = "boolean",
- hasitalics = "boolean",
- autoitalicamount = "basepoints",
- nostackmath = "boolean",
- noglyphnames = "boolean",
- mode = "string",
- hasmath = "boolean",
- mathitalics = "boolean",
- textitalics = "boolean",
- finalized = "boolean",
- },
- parameters = {
- mathsize = "number",
- scriptpercentage = "float",
- scriptscriptpercentage = "float",
- units = "cardinal",
- designsize = "scaledpoints",
- expansion = {
- stretch = "integerscale", -- might become float
- shrink = "integerscale", -- might become float
- step = "integerscale", -- might become float
- auto = "boolean",
- },
- protrusion = {
- auto = "boolean",
- },
- slantfactor = "float",
- extendfactor = "float",
- factor = "float",
- hfactor = "float",
- vfactor = "float",
- size = "scaledpoints",
- units = "scaledpoints",
- scaledpoints = "scaledpoints",
- slantperpoint = "scaledpoints",
- spacing = {
- width = "scaledpoints",
- stretch = "scaledpoints",
- shrink = "scaledpoints",
- extra = "scaledpoints",
- },
- xheight = "scaledpoints",
- quad = "scaledpoints",
- ascender = "scaledpoints",
- descender = "scaledpoints",
- synonyms = {
- space = "spacing.width",
- spacestretch = "spacing.stretch",
- spaceshrink = "spacing.shrink",
- extraspace = "spacing.extra",
- x_height = "xheight",
- space_stretch = "spacing.stretch",
- space_shrink = "spacing.shrink",
- extra_space = "spacing.extra",
- em = "quad",
- ex = "xheight",
- slant = "slantperpoint",
- },
- },
- description = {
- width = "basepoints",
- height = "basepoints",
- depth = "basepoints",
- boundingbox = { },
- },
- character = {
- width = "scaledpoints",
- height = "scaledpoints",
- depth = "scaledpoints",
- italic = "scaledpoints",
- },
-}
-
-- This might become an interface:
local designsizes = allocate()
@@ -240,7 +145,9 @@ end
local unscaled = {
ScriptPercentScaleDown = true,
ScriptScriptPercentScaleDown = true,
- RadicalDegreeBottomRaisePercent = true
+ RadicalDegreeBottomRaisePercent = true,
+ NoLimitSupFactor = true,
+ NoLimitSubFactor = true,
}
function constructors.assignmathparameters(target,original) -- simple variant, not used in context
@@ -338,6 +245,41 @@ function constructors.enhanceparameters(parameters)
}
end
+local function mathkerns(v,vdelta)
+ local k = { }
+ for i=1,#v do
+ local entry = v[i]
+ local height = entry.height
+ local kern = entry.kern
+ k[i] = {
+ height = height and vdelta*height or 0,
+ kern = kern and vdelta*kern or 0,
+ }
+ end
+ return k
+end
+
+local psfake = 0
+
+local function fixedpsname(psname,fallback)
+ local usedname = psname
+ if psname and psname ~= "" then
+ if find(psname," ") then
+ usedname = gsub(psname,"[%s]+","-")
+ else
+ -- we assume that the name is sane enough (we might sanitize completely some day)
+ end
+ elseif not fallback or fallback == "" then
+ psfake = psfake + 1
+ psname = "fakename-" .. psfake
+ else
+ -- filenames can be a mess so we do a drastic cleanup
+ psname = fallback
+ usedname = gsub(psname,"[^a-zA-Z0-9]+","-")
+ end
+ return usedname, psname ~= usedname
+end
+
function constructors.scale(tfmdata,specification)
local target = { } -- the new table
--
@@ -440,23 +382,22 @@ function constructors.scale(tfmdata,specification)
target.format = properties.format
target.cache = constructors.cacheintex and "yes" or "renew"
--
- local fontname = properties.fontname or tfmdata.fontname -- for the moment we fall back on
- local fullname = properties.fullname or tfmdata.fullname -- names in the tfmdata although
- local filename = properties.filename or tfmdata.filename -- that is not the right place to
- local psname = properties.psname or tfmdata.psname -- pass them
+ local fontname = properties.fontname or tfmdata.fontname
+ local fullname = properties.fullname or tfmdata.fullname
+ local filename = properties.filename or tfmdata.filename
+ local psname = properties.psname or tfmdata.psname
local name = properties.name or tfmdata.name
--
- if not psname or psname == "" then
- -- name used in pdf file as well as for selecting subfont in ttc/dfont
- psname = fontname or (fullname and fonts.names.cleanname(fullname))
- end
+ -- the psname used in pdf file as well as for selecting subfont in ttc
+ --
+ local psname, psfixed = fixedpsname(psname,fontname or fullname or file.nameonly(filename))
+ --
target.fontname = fontname
target.fullname = fullname
target.filename = filename
target.psname = psname
target.name = name
--
- --
properties.fontname = fontname
properties.fullname = fullname
properties.filename = filename
@@ -507,12 +448,16 @@ function constructors.scale(tfmdata,specification)
local haskerns = properties.haskerns or properties.mode == "base" -- we can have afm in node mode
local hasligatures = properties.hasligatures or properties.mode == "base" -- we can have afm in node mode
local realdimensions = properties.realdimensions
+ local writingmode = properties.writingmode or "horizontal"
+ local identity = properties.identity or "horizontal"
--
if changed and not next(changed) then
changed = false
end
--
- target.type = isvirtual and "virtual" or "real"
+ target.type = isvirtual and "virtual" or "real"
+ target.writingmode = writingmode == "vertical" and "vertical" or "horizontal"
+ target.identity = identity == "vertical" and "vertical" or "horizontal"
--
target.postprocessors = tfmdata.postprocessors
--
@@ -552,13 +497,13 @@ function constructors.scale(tfmdata,specification)
--
if hasmath then
constructors.assignmathparameters(target,tfmdata) -- does scaling and whatever is needed
- properties.hasmath = true
- target.nomath = false
- target.MathConstants = target.mathparameters
+ properties.hasmath = true
+ target.nomath = false
+ target.MathConstants = target.mathparameters
else
- properties.hasmath = false
- target.nomath = true
- target.mathparameters = nil -- nop
+ properties.hasmath = false
+ target.nomath = true
+ target.mathparameters = nil -- nop
end
--
-- Here we support some context specific trickery (this might move to a plugin). During the
@@ -589,8 +534,9 @@ function constructors.scale(tfmdata,specification)
-- end of context specific trickery
--
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",hasitalics and "enabled" or "disabled")
+ report_defining("defining tfm, name %a, fullname %a, filename %a, %spsname %a, hscale %a, vscale %a, math %a, italics %a",
+ name,fullname,filename,psfixed and "(fixed) " or "",psname,hdelta,vdelta,
+ hasmath and "enabled" or "disabled",hasitalics and "enabled" or "disabled")
end
--
constructors.beforecopyingcharacters(target,tfmdata)
@@ -749,22 +695,15 @@ function constructors.scale(tfmdata,specification)
chr.top_accent = vdelta*va
end
if stackmath then
- local mk = character.mathkerns -- not in math ?
+ local mk = character.mathkerns
if mk then
- local kerns = { }
- local v = mk.top_right if v then local k = { } for i=1,#v do local vi = v[i]
- k[i] = { height = vdelta*vi.height, kern = vdelta*vi.kern }
- end kerns.top_right = k end
- local v = mk.top_left if v then local k = { } for i=1,#v do local vi = v[i]
- k[i] = { height = vdelta*vi.height, kern = vdelta*vi.kern }
- end kerns.top_left = k end
- local v = mk.bottom_left if v then local k = { } for i=1,#v do local vi = v[i]
- k[i] = { height = vdelta*vi.height, kern = vdelta*vi.kern }
- end kerns.bottom_left = k end
- local v = mk.bottom_right if v then local k = { } for i=1,#v do local vi = v[i]
- k[i] = { height = vdelta*vi.height, kern = vdelta*vi.kern }
- end kerns.bottom_right = k end
- chr.mathkern = kerns -- singular -> should be patched in luatex !
+ local tr, tl, br, bl = mk.topright, mk.topleft, mk.bottomright, mk.bottomleft
+ chr.mathkern = { -- singular -> should be patched in luatex !
+ top_right = tr and mathkerns(tr,vdelta) or nil,
+ top_left = tl and mathkerns(tl,vdelta) or nil,
+ bottom_right = br and mathkerns(br,vdelta) or nil,
+ bottom_left = bl and mathkerns(bl,vdelta) or nil,
+ }
end
end
if hasitalics then
@@ -960,6 +899,8 @@ function constructors.finalize(tfmdata)
cidinfo = tfmdata.cidinfo or nil,
format = tfmdata.format or "type1",
direction = tfmdata.direction or 0,
+ writingmode = tfmdata.writingmode or "horizontal",
+ identity = tfmdata.identity or "horizontal",
}
end
if not tfmdata.resources then
@@ -973,42 +914,42 @@ function constructors.finalize(tfmdata)
-- tfmdata.unscaled
--
if not properties.hasmath then
- properties.hasmath = not tfmdata.nomath
+ properties.hasmath = not tfmdata.nomath
end
--
- tfmdata.MathConstants = nil
- tfmdata.postprocessors = nil
- --
- tfmdata.fontname = nil
- tfmdata.filename = nil
- tfmdata.fullname = nil
- tfmdata.name = nil -- most tricky part
- tfmdata.psname = nil
- --
- tfmdata.encodingbytes = nil
- tfmdata.embedding = nil
- tfmdata.tounicode = nil
- tfmdata.cidinfo = nil
- tfmdata.format = nil
- tfmdata.direction = nil
- tfmdata.type = nil
- tfmdata.nomath = nil
- tfmdata.designsize = nil
- --
- tfmdata.size = nil
- tfmdata.stretch = nil
- tfmdata.shrink = nil
- tfmdata.step = nil
- tfmdata.auto_expand = nil
- tfmdata.auto_protrude = nil
- tfmdata.extend = nil
- tfmdata.slant = nil
- tfmdata.units = nil
- tfmdata.units_per_em = nil
- --
- tfmdata.cache = nil
- --
- properties.finalized = true
+ tfmdata.MathConstants = nil
+ tfmdata.postprocessors = nil
+ --
+ tfmdata.fontname = nil
+ tfmdata.filename = nil
+ tfmdata.fullname = nil
+ tfmdata.name = nil -- most tricky part
+ tfmdata.psname = nil
+ --
+ tfmdata.encodingbytes = nil
+ tfmdata.embedding = nil
+ tfmdata.tounicode = nil
+ tfmdata.cidinfo = nil
+ tfmdata.format = nil
+ tfmdata.direction = nil
+ tfmdata.type = nil
+ tfmdata.nomath = nil
+ tfmdata.designsize = nil
+ --
+ tfmdata.size = nil
+ tfmdata.stretch = nil
+ tfmdata.shrink = nil
+ tfmdata.step = nil
+ tfmdata.auto_expand = nil
+ tfmdata.auto_protrude = nil
+ tfmdata.extend = nil
+ tfmdata.slant = nil
+ tfmdata.units = nil
+ tfmdata.units_per_em = nil
+ --
+ tfmdata.cache = nil
+ --
+ properties.finalized = true
--
return tfmdata
end
@@ -1023,20 +964,22 @@ constructors.hashmethods = hashmethods
function constructors.hashfeatures(specification) -- will be overloaded
local features = specification.features
if features then
- local t, tn = { }, 0
- for category, list in next, features do
+ local t, n = { }, 0
+-- inspect(features)
+-- for category, list in next, features do
+ for category, list in sortedhash(features) do
if next(list) then
local hasher = hashmethods[category]
if hasher then
local hash = hasher(list)
if hash then
- tn = tn + 1
- t[tn] = category .. ":" .. hash
+ n = n + 1
+ t[n] = category .. ":" .. hash
end
end
end
end
- if tn > 0 then
+ if n > 0 then
return concat(t," & ")
end
end
@@ -1053,15 +996,11 @@ hashmethods.normal = function(list)
-- no need to add to hash (maybe we need a skip list)
else
n = n + 1
- s[n] = k
+ s[n] = k .. '=' .. tostring(v)
end
end
if n > 0 then
sort(s)
- for i=1,n do
- local k = s[i]
- s[i] = k .. '=' .. tostring(list[k])
- end
return concat(s,"+")
end
end
@@ -1136,127 +1075,267 @@ setmetatableindex(formats, function(t,k)
return rawget(t,file.suffix(l))
end)
-local locations = { }
+do
-local function setindeed(mode,target,group,name,action,position)
- local t = target[mode]
- if not t then
- report_defining("fatal error in setting feature %a, group %a, mode %a",name,group,mode)
- os.exit()
- elseif position then
- -- todo: remove existing
- insert(t, position, { name = name, action = action })
- else
- for i=1,#t do
- local ti = t[i]
- if ti.name == name then
- ti.action = action
- return
+ local function setindeed(mode,source,target,group,name,position)
+ local action = source[mode]
+ if not action then
+ return
+ end
+ local t = target[mode]
+ if not t then
+ report_defining("fatal error in setting feature %a, group %a, mode %a",name,group,mode)
+ os.exit()
+ elseif position then
+ -- todo: remove existing
+ insert(t, position, { name = name, action = action })
+ else
+ for i=1,#t do
+ local ti = t[i]
+ if ti.name == name then
+ ti.action = action
+ return
+ end
end
+ insert(t, { name = name, action = action })
end
- insert(t, { name = name, action = action })
end
-end
-local function set(group,name,target,source)
- target = target[group]
- if not target then
- report_defining("fatal target error in setting feature %a, group %a",name,group)
- os.exit()
+ local function set(group,name,target,source)
+ target = target[group]
+ if not target then
+ report_defining("fatal target error in setting feature %a, group %a",name,group)
+ os.exit()
+ end
+ local source = source[group]
+ if not source then
+ report_defining("fatal source error in setting feature %a, group %a",name,group)
+ os.exit()
+ end
+ local position = source.position
+ setindeed("node",source,target,group,name,position)
+ setindeed("base",source,target,group,name,position)
+ setindeed("plug",source,target,group,name,position)
end
- local source = source[group]
- if not source then
- report_defining("fatal source error in setting feature %a, group %a",name,group)
- os.exit()
+
+ local function register(where,specification)
+ local name = specification.name
+ if name and name ~= "" then
+ local default = specification.default
+ local description = specification.description
+ local initializers = specification.initializers
+ local processors = specification.processors
+ local manipulators = specification.manipulators
+ local modechecker = specification.modechecker
+ if default then
+ where.defaults[name] = default
+ end
+ if description and description ~= "" then
+ where.descriptions[name] = description
+ end
+ if initializers then
+ set('initializers',name,where,specification)
+ end
+ if processors then
+ set('processors', name,where,specification)
+ end
+ if manipulators then
+ set('manipulators',name,where,specification)
+ end
+ if modechecker then
+ where.modechecker = modechecker
+ end
+ end
end
- local node = source.node
- local base = source.base
- local position = source.position
- if node then
- setindeed("node",target,group,name,node,position)
+
+ constructors.registerfeature = register
+
+ function constructors.getfeatureaction(what,where,mode,name)
+ what = handlers[what].features
+ if what then
+ where = what[where]
+ if where then
+ mode = where[mode]
+ if mode then
+ for i=1,#mode do
+ local m = mode[i]
+ if m.name == name then
+ return m.action
+ end
+ end
+ end
+ end
+ end
end
- if base then
- setindeed("base",target,group,name,base,position)
+
+ local newfeatures = { }
+ constructors.newfeatures = newfeatures -- downward compatible
+ constructors.features = newfeatures
+
+ local function setnewfeatures(what)
+ local handler = handlers[what]
+ local features = handler.features
+ if not features then
+ local tables = handler.tables -- can be preloaded
+ local statistics = handler.statistics -- can be preloaded
+ features = allocate {
+ defaults = { },
+ descriptions = tables and tables.features or { },
+ used = statistics and statistics.usedfeatures or { },
+ initializers = { base = { }, node = { }, plug = { } },
+ processors = { base = { }, node = { }, plug = { } },
+ manipulators = { base = { }, node = { }, plug = { } },
+ }
+ features.register = function(specification) return register(features,specification) end
+ handler.features = features -- will also become hidden
+ end
+ return features
end
+
+ setmetatable(newfeatures, {
+ __call = function(t,k) local v = t[k] return v end,
+ __index = function(t,k) local v = setnewfeatures(k) t[k] = v return v end,
+ })
+
end
-local function register(where,specification)
- local name = specification.name
- if name and name ~= "" then
- local default = specification.default
- local description = specification.description
- local initializers = specification.initializers
- local processors = specification.processors
- local manipulators = specification.manipulators
- local modechecker = specification.modechecker
- if default then
- where.defaults[name] = default
- end
- if description and description ~= "" then
- where.descriptions[name] = description
- end
- if initializers then
- set('initializers',name,where,specification)
- end
- if processors then
- set('processors', name,where,specification)
- end
- if manipulators then
- set('manipulators',name,where,specification)
- end
- if modechecker then
- where.modechecker = modechecker
+do
+
+ local newhandler = { }
+ constructors.handlers = newhandler -- downward compatible
+ constructors.newhandler = newhandler
+
+ local function setnewhandler(what) -- could be a metatable newindex
+ local handler = handlers[what]
+ if not handler then
+ handler = { }
+ handlers[what] = handler
end
+ return handler
end
+
+ setmetatable(newhandler, {
+ __call = function(t,k) local v = t[k] return v end,
+ __index = function(t,k) local v = setnewhandler(k) t[k] = v return v end,
+ })
+
end
-constructors.registerfeature = register
-
-function constructors.getfeatureaction(what,where,mode,name)
- what = handlers[what].features
- if what then
- where = what[where]
- if where then
- mode = where[mode]
- if mode then
- for i=1,#mode do
- local m = mode[i]
- if m.name == name then
- return m.action
+do
+ -- a pitty that we need to be generic as we have nicer mechanisms for this ...
+
+ local newenhancer = { }
+ constructors.enhancers = newenhancer
+ constructors.newenhancer = newenhancer
+
+ local function setnewenhancer(format)
+
+ local handler = handlers[format]
+ local enhancers = handler.enhancers
+
+ if not enhancers then
+
+ local actions = allocate()
+ local before = allocate()
+ local after = allocate()
+ local order = allocate()
+ local patches = { before = before, after = after }
+
+ local trace = false
+ local report = logs.reporter("fonts",format .. " enhancing")
+
+ trackers.register(format .. ".loading", function(v) trace = v end)
+
+ local function enhance(name,data,filename,raw)
+ local enhancer = actions[name]
+ if enhancer then
+ if trace then
+ report("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
+
+ local function apply(data,filename,raw)
+ local basename = file.basename(lower(filename))
+ if trace then
+ report("%s enhancing file %a","start",filename)
+ end
+ ioflush() -- we want instant messages
+ for e=1,#order do
+ local enhancer = order[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 then
+ report("%s enhancing file %a","stop",filename)
+ end
+ ioflush() -- we want instant messages
+ end
+
+ local function register(what,action)
+ if action then
+ if actions[what] then
+ -- overloading, e.g."check extra features"
+ else
+ order[#order+1] = what
+ end
+ actions[what] = action
+ else
+ report("bad enhancer %a",what)
+ end
+ end
+
+ -- fonts.constructors.otf.enhancers.patch("before","migrate metadata","cambria",function() end)
+
+ local function patch(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
+
+ enhancers = {
+ register = register,
+ apply = apply,
+ patch = patch,
+ patches = { register = patch }, -- for old times sake
+ }
+
+ handler.enhancers = enhancers
end
+ return enhancers
end
-end
-function constructors.newhandler(what) -- could be a metatable newindex
- local handler = handlers[what]
- if not handler then
- handler = { }
- handlers[what] = handler
- end
- return handler
-end
+ setmetatable(newenhancer, {
+ __call = function(t,k) local v = t[k] return v end,
+ __index = function(t,k) local v = setnewenhancer(k) t[k] = v return v end,
+ })
-function constructors.newfeatures(what) -- could be a metatable newindex
- local handler = handlers[what]
- local features = handler.features
- if not features then
- local tables = handler.tables -- can be preloaded
- local statistics = handler.statistics -- can be preloaded
- features = allocate {
- defaults = { },
- descriptions = tables and tables.features or { },
- used = statistics and statistics.usedfeatures or { },
- initializers = { base = { }, node = { } },
- processors = { base = { }, node = { } },
- manipulators = { base = { }, node = { } },
- }
- features.register = function(specification) return register(features,specification) end
- handler.features = features -- will also become hidden
- end
- return features
end
--[[ldx--
@@ -1286,7 +1365,6 @@ function constructors.initializefeatures(what,tfmdata,features,trace,report)
local properties = tfmdata.properties or { } -- brrr
local whathandler = handlers[what]
local whatfeatures = whathandler.features
- local whatinitializers = whatfeatures.initializers
local whatmodechecker = whatfeatures.modechecker
-- properties.mode can be enforces (for instance in font-otd)
local mode = properties.mode or (whatmodechecker and whatmodechecker(tfmdata,features,features.mode)) or features.mode or "base"
diff --git a/tex/context/base/mkiv/font-ctx.lua b/tex/context/base/mkiv/font-ctx.lua
index be233e570..578babc75 100644
--- a/tex/context/base/mkiv/font-ctx.lua
+++ b/tex/context/base/mkiv/font-ctx.lua
@@ -14,7 +14,7 @@ if not modules then modules = { } end modules ['font-ctx'] = {
local context, commands = context, commands
-local format, gmatch, match, find, lower, gsub, byte = string.format, string.gmatch, string.match, string.find, string.lower, string.gsub, string.byte
+local format, gmatch, match, find, lower, upper, gsub, byte, topattern = string.format, string.gmatch, string.match, string.find, string.lower, string.upper, string.gsub, string.byte, string.topattern
local concat, serialize, sort, fastcopy, mergedtable = table.concat, table.serialize, table.sort, table.fastcopy, table.merged
local sortedhash, sortedkeys, sequenced = table.sortedhash, table.sortedkeys, table.sequenced
local settings_to_hash, hash_to_string = utilities.parsers.settings_to_hash, utilities.parsers.hash_to_string
@@ -42,11 +42,14 @@ local report_cummulative = logs.reporter("fonts","cummulative")
local report_defining = logs.reporter("fonts","defining")
local report_status = logs.reporter("fonts","status")
local report_mapfiles = logs.reporter("fonts","mapfiles")
+local report_newline = logs.newline
local setmetatableindex = table.setmetatableindex
local implement = interfaces.implement
+local chardata = characters.data
+
local fonts = fonts
local handlers = fonts.handlers
local otf = handlers.otf -- brrr
@@ -63,6 +66,8 @@ local hashes = fonts.hashes
local currentfont = font.current
local definefont = font.define
+local cleanname = names.cleanname
+
local encodings = fonts.encodings
----- aglunicodes = encodings.agl.unicodes
local aglunicodes = nil -- delayed loading
@@ -102,15 +107,13 @@ local parameters = hashes.parameters
local designsizefilename = fontgoodies.designsizes.filename
-local context_char = context.char
-local context_getvalue = context.getvalue
+local ctx_char = context.char
+local ctx_getvalue = context.getvalue
local otffeatures = otf.features
local otftables = otf.tables
local registerotffeature = otffeatures.register
-local baseprocessors = otffeatures.processors.base
-local baseinitializers = otffeatures.initializers.base
local sequencers = utilities.sequencers
local appendgroup = sequencers.appendgroup
@@ -153,17 +156,19 @@ local function getfontname(tfmdata)
return basename(type(tfmdata) == "number" and properties[tfmdata].name or tfmdata.properties.name)
end
-fonts.helpers.name = getfontname
+helpers.name = getfontname
+
+local addformatter = utilities.strings.formatters.add
if _LUAVERSION < 5.2 then
- utilities.strings.formatters.add(formatters,"font:name", [["'"..fontname(%s).."'"]], "local fontname = fonts.helpers.name")
- utilities.strings.formatters.add(formatters,"font:features",[["'"..sequenced(%s," ",true).."'"]],"local sequenced = table.sequenced")
+ addformatter(formatters,"font:name", [["'"..fontname(%s).."'"]], "local fontname = fonts.helpers.name")
+ addformatter(formatters,"font:features",[["'"..sequenced(%s," ",true).."'"]],"local sequenced = table.sequenced")
else
- utilities.strings.formatters.add(formatters,"font:name", [["'"..fontname(%s).."'"]], { fontname = fonts.helpers.name })
- utilities.strings.formatters.add(formatters,"font:features",[["'"..sequenced(%s," ",true).."'"]],{ sequenced = table.sequenced })
+ addformatter(formatters,"font:name", [["'"..fontname(%s).."'"]], { fontname = helpers.name })
+ addformatter(formatters,"font:features",[["'"..sequenced(%s," ",true).."'"]],{ sequenced = table.sequenced })
end
@@ -176,58 +181,109 @@ constructors.nofsharedhashes = 0
constructors.nofsharedvectors = 0
constructors.noffontsloaded = 0
-local shares = { }
-local hashes = { }
-
-function constructors.trytosharefont(target,tfmdata)
- constructors.noffontsloaded = constructors.noffontsloaded + 1
- if constructors.sharefonts then
- local fonthash = target.specification.hash
- if fonthash then
- local properties = target.properties
- local fullname = target.fullname
- local sharedname = hashes[fonthash]
- if sharedname then
- -- this is ok for context as we know that only features can mess with font definitions
- -- so a similar hash means that the fonts are similar too
- if trace_defining then
- report_defining("font %a uses backend resources of font %a (%s)",target.fullname,sharedname,"common hash")
- end
- target.fullname = sharedname
- properties.sharedwith = sharedname
- constructors.nofsharedfonts = constructors.nofsharedfonts + 1
- constructors.nofsharedhashes = constructors.nofsharedhashes + 1
- else
- -- the one takes more time (in the worst case of many cjk fonts) but it also saves
- -- embedding time
- local characters = target.characters
- local n = 1
- local t = { target.psname }
- local u = sortedkeys(characters)
- for i=1,#u do
- local k = u[i]
- n = n + 1 ; t[n] = k
- n = n + 1 ; t[n] = characters[k].index or k
- end
- local checksum = md5.HEX(concat(t," "))
- local sharedname = shares[checksum]
+do
+
+ local shares = { }
+ local hashes = { }
+
+ local nofinstances = 0
+ local instances = table.setmetatableindex(function(t,k)
+ nofinstances = nofinstances + 1
+ t[k] = nofinstances
+ return nofinstances
+ end)
+
+ function constructors.trytosharefont(target,tfmdata)
+ constructors.noffontsloaded = constructors.noffontsloaded + 1
+ if constructors.sharefonts then
+ local fonthash = target.specification.hash
+ if fonthash then
+ local properties = target.properties
local fullname = target.fullname
+ local fontname = target.fontname
+ local psname = target.psname
+ -- for the moment here:
+ local instance = properties.instance
+ if instance then
+ local format = tfmdata.properties.format
+ if format == "opentype" then
+ target.streamprovider = 1
+ elseif format == "truetype" then
+ target.streamprovider = 2
+ else
+ target.streamprovider = 0
+ end
+ if target.streamprovider > 0 then
+ if fullname then
+ fullname = fullname .. ":" .. instances[instance]
+ target.fullname = fullname
+ end
+ if fontname then
+ fontname = fontname .. ":" .. instances[instance]
+ target.fontname = fontname
+ end
+ if psname then
+ -- this one is used for the funny prefix in font names in pdf
+ -- so it has ot be kind of unique in order to avoid subset prefix
+ -- clashes being reported
+ psname = psname .. ":" .. instances[instance]
+ target.psname = psname
+ end
+ end
+ end
+ --
+ local sharedname = hashes[fonthash]
if sharedname then
+ -- this is ok for context as we know that only features can mess with font definitions
+ -- so a similar hash means that the fonts are similar too
if trace_defining then
- report_defining("font %a uses backend resources of font %a (%s)",fullname,sharedname,"common vector")
+ report_defining("font %a uses backend resources of font %a (%s)",target.fullname,sharedname,"common hash")
end
- fullname = sharedname
- properties.sharedwith= sharedname
+ target.fullname = sharedname
+ properties.sharedwith = sharedname
constructors.nofsharedfonts = constructors.nofsharedfonts + 1
- constructors.nofsharedvectors = constructors.nofsharedvectors + 1
+ constructors.nofsharedhashes = constructors.nofsharedhashes + 1
else
- shares[checksum] = fullname
+ -- the one takes more time (in the worst case of many cjk fonts) but it also saves
+ -- embedding time .. haha, this is interesting: when i got a clash on subset tag
+ -- collision i saw in the source that these tags are also using a hash like below
+ -- so maybe we should have an option to pass it from lua
+ local characters = target.characters
+ local n = 1
+ local t = { target.psname }
+ -- for the moment here:
+ if instance then
+ n = n + 1
+ t[n] = instance
+ end
+ --
+ local u = sortedkeys(characters)
+ for i=1,#u do
+ local k = u[i]
+ n = n + 1 ; t[n] = k
+ n = n + 1 ; t[n] = characters[k].index or k
+ end
+ local checksum = md5.HEX(concat(t," "))
+ local sharedname = shares[checksum]
+ local fullname = target.fullname
+ if sharedname then
+ if trace_defining then
+ report_defining("font %a uses backend resources of font %a (%s)",fullname,sharedname,"common vector")
+ end
+ fullname = sharedname
+ properties.sharedwith= sharedname
+ constructors.nofsharedfonts = constructors.nofsharedfonts + 1
+ constructors.nofsharedvectors = constructors.nofsharedvectors + 1
+ else
+ shares[checksum] = fullname
+ end
+ target.fullname = fullname
+ hashes[fonthash] = fullname
end
- target.fullname = fullname
- hashes[fonthash] = fullname
end
end
end
+
end
directives.register("fonts.checksharing",function(v)
@@ -294,21 +350,13 @@ otftables.scripts.auto = "automatic fallback to latn when no dflt present"
-- setmetatableindex(otffeatures.descriptions,otftables.features)
-local privatefeatures = {
- tlig = true,
- trep = true,
- anum = true,
-}
-
local function checkedscript(tfmdata,resources,features)
local latn = false
local script = false
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
+ if scripts.dflt then
script = "dflt"
break
elseif scripts.latn then
@@ -537,10 +585,11 @@ local function presetcontext(name,parent,features) -- will go to con and shared
for p in gmatch(parent,"[^, ]+") do
local s = setups[p]
if s then
- for k,v in next, s do
- if features[k] == nil then
+ for k, v in next, s do
+-- no, as then we cannot overload: e.g. math,mathextra
+-- if features[k] == nil then
features[k] = v
- end
+-- end
end
else
-- just ignore an undefined one .. i.e. we can refer to not yet defined
@@ -570,7 +619,7 @@ local function presetcontext(name,parent,features) -- will go to con and shared
-- optimization)
local t = { } -- can we avoid t ?
for k,v in next, features do
--- if v then t[k] = v end
+ -- if v then t[k] = v end
t[k] = v
end
-- needed for dynamic features
@@ -585,42 +634,57 @@ local function presetcontext(name,parent,features) -- will go to con and shared
return number, t
end
-local function contextnumber(name) -- will be replaced
- local t = setups[name]
- if not t then
- return 0
- elseif t.auto then
- local lng = tonumber(tex.language)
- local tag = name .. ":" .. lng
- local s = setups[tag]
- if s then
- return s.number or 0
- else
- local script, language = languages.association(lng)
- if t.script ~= script or t.language ~= language then
- local s = fastcopy(t)
- local n = #numbers + 1
- setups[tag] = s
- numbers[n] = tag
- s.number = n
- s.script = script
- s.language = language
- return n
- else
- setups[tag] = t
- return t.number or 0
- end
+local function adaptcontext(pattern,features)
+ local pattern = topattern(pattern,false,true)
+ for name in next, setups do
+ if find(name,pattern) then
+ presetcontext(name,name,features)
end
- else
- return t.number or 0
end
end
+-- local function contextnumber(name) -- will be replaced
+-- local t = setups[name]
+-- if not t then
+-- return 0
+-- elseif t.auto then -- check where used, autolanguage / autoscript?
+-- local lng = tonumber(tex.language)
+-- local tag = name .. ":" .. lng
+-- local s = setups[tag]
+-- if s then
+-- return s.number or 0
+-- else
+-- local script, language = languages.association(lng)
+-- if t.script ~= script or t.language ~= language then
+-- local s = fastcopy(t)
+-- local n = #numbers + 1
+-- setups[tag] = s
+-- numbers[n] = tag
+-- s.number = n
+-- s.script = script
+-- s.language = language
+-- return n
+-- else
+-- setups[tag] = t
+-- return t.number or 0
+-- end
+-- end
+-- else
+-- return t.number or 0
+-- end
+-- end
+
+local function contextnumber(name) -- will be replaced
+ local t = setups[name]
+ return t and t.number or 0
+end
+
local function mergecontext(currentnumber,extraname,option) -- number string number (used in scrp-ini
local extra = setups[extraname]
if extra then
local current = setups[numbers[currentnumber]]
- local mergedfeatures, mergedname = { }, nil
+ local mergedfeatures = { }
+ local mergedname = nil
if option < 0 then
if current then
for k, v in next, current do
@@ -941,13 +1005,13 @@ local rightparent = (P")")
local value = C((leftparent * (1-rightparent)^0 * rightparent + (1-space))^1)
local dimension = C((space/"" + P(1))^1)
local rest = C(P(1)^0)
-local scale_none = Cc(0)
-local scale_at = P("at") * Cc(1) * spaces * dimension -- dimension
-local scale_sa = P("sa") * Cc(2) * spaces * dimension -- number
-local scale_mo = P("mo") * Cc(3) * spaces * dimension -- number
-local scale_scaled = P("scaled") * Cc(4) * spaces * dimension -- number
-local scale_ht = P("ht") * Cc(5) * spaces * dimension -- dimension
-local scale_cp = P("cp") * Cc(6) * spaces * dimension -- dimension
+local scale_none = Cc(0)
+local scale_at = (P("at") +P("@")) * Cc(1) * spaces * dimension -- dimension
+local scale_sa = P("sa") * Cc(2) * spaces * dimension -- number
+local scale_mo = P("mo") * Cc(3) * spaces * dimension -- number
+local scale_scaled = P("scaled") * Cc(4) * spaces * dimension -- number
+local scale_ht = P("ht") * Cc(5) * spaces * dimension -- dimension
+local scale_cp = P("cp") * Cc(6) * spaces * dimension -- dimension
local specialscale = { [5] = "ht", [6] = "cp" }
@@ -973,6 +1037,8 @@ local getspecification = definers.getspecification
-- we can make helper macros which saves parsing (but normaly not
-- that many calls, e.g. in mk a couple of 100 and in metafun 3500)
+local specifiers = { }
+
do -- else too many locals
----- ctx_setdefaultfontname = context.fntsetdefname
@@ -987,6 +1053,7 @@ do -- else too many locals
local scanners = tokens.scanners
local scanstring = scanners.string
local scaninteger = scanners.integer
+ local scannumber = scanners.number
local scanboolean = scanners.boolean
local setmacro = tokens.setters.macro
@@ -1051,6 +1118,187 @@ do -- else too many locals
-- function commands.definefont_two(global,cs,str,size,inheritancemode,classfeatures,fontfeatures,classfallbacks,fontfallbacks,
-- mathsize,textsize,relativeid,classgoodies,goodies,classdesignsize,fontdesignsize,scaledfontmode)
+-- scanners.definefont_two = function()
+
+-- local global = scanboolean() -- \ifx\fontclass\empty\s!false\else\s!true\fi
+-- local cs = scanstring () -- {#csname}%
+-- local str = scanstring () -- \somefontfile
+-- local size = scaninteger() -- \d_font_scaled_font_size
+-- local inheritancemode = scaninteger() -- \c_font_feature_inheritance_mode
+-- local classfeatures = scanstring () -- \m_font_class_features
+-- local fontfeatures = scanstring () -- \m_font_features
+-- local classfallbacks = scanstring () -- \m_font_class_fallbacks
+-- local fontfallbacks = scanstring () -- \m_font_fallbacks
+-- local mathsize = scaninteger() -- \fontface
+-- local textsize = scaninteger() -- \d_font_scaled_text_face
+-- local relativeid = scaninteger() -- \relativefontid
+-- local classgoodies = scanstring () -- \m_font_class_goodies
+-- local goodies = scanstring () -- \m_font_goodies
+-- local classdesignsize = scanstring () -- \m_font_class_designsize
+-- local fontdesignsize = scanstring () -- \m_font_designsize
+-- local scaledfontmode = scaninteger() -- \scaledfontmode
+
+-- if trace_defining then
+-- report_defining("start stage two: %s, size %s, features %a & %a",str,size,classfeatures,fontfeatures)
+-- end
+-- -- name is now resolved and size is scaled cf sa/mo
+-- local lookup, name, sub, method, detail = getspecification(str or "")
+-- -- new (todo: inheritancemode)
+-- local designsize = fontdesignsize ~= "" and fontdesignsize or classdesignsize or ""
+-- local designname = designsizefilename(name,designsize,size)
+-- if designname and designname ~= "" then
+-- if trace_defining or trace_designsize then
+-- report_defining("remapping name %a, specification %a, size %a, designsize %a",name,designsize,size,designname)
+-- end
+-- -- we don't catch detail here
+-- local o_lookup, o_name, o_sub, o_method, o_detail = getspecification(designname)
+-- if o_lookup and o_lookup ~= "" then lookup = o_lookup end
+-- if o_method and o_method ~= "" then method = o_method end
+-- if o_detail and o_detail ~= "" then detail = o_detail end
+-- name = o_name
+-- sub = o_sub
+-- end
+-- -- so far
+-- -- some settings can have been overloaded
+-- if lookup and lookup ~= "" then
+-- specification.lookup = lookup
+-- end
+-- if relativeid and relativeid ~= "" then -- experimental hook
+-- local id = tonumber(relativeid) or 0
+-- specification.relativeid = id > 0 and id
+-- end
+-- --
+-- specification.name = name
+-- specification.size = size
+-- specification.sub = (sub and sub ~= "" and sub) or specification.sub
+-- specification.mathsize = mathsize
+-- specification.textsize = textsize
+-- specification.goodies = goodies
+-- specification.cs = cs
+-- specification.global = global
+-- specification.scalemode = scaledfontmode -- context specific
+-- if detail and detail ~= "" then
+-- specification.method = method or "*"
+-- specification.detail = detail
+-- elseif specification.detail and specification.detail ~= "" then
+-- -- already set
+-- elseif inheritancemode == 0 then
+-- -- nothing
+-- elseif inheritancemode == 1 then
+-- -- fontonly
+-- if fontfeatures and fontfeatures ~= "" then
+-- specification.method = "*"
+-- specification.detail = fontfeatures
+-- end
+-- if fontfallbacks and fontfallbacks ~= "" then
+-- specification.fallbacks = fontfallbacks
+-- end
+-- elseif inheritancemode == 2 then
+-- -- classonly
+-- if classfeatures and classfeatures ~= "" then
+-- specification.method = "*"
+-- specification.detail = classfeatures
+-- end
+-- if classfallbacks and classfallbacks ~= "" then
+-- specification.fallbacks = classfallbacks
+-- end
+-- elseif inheritancemode == 3 then
+-- -- fontfirst
+-- if fontfeatures and fontfeatures ~= "" then
+-- specification.method = "*"
+-- specification.detail = fontfeatures
+-- elseif classfeatures and classfeatures ~= "" then
+-- specification.method = "*"
+-- specification.detail = classfeatures
+-- end
+-- if fontfallbacks and fontfallbacks ~= "" then
+-- specification.fallbacks = fontfallbacks
+-- elseif classfallbacks and classfallbacks ~= "" then
+-- specification.fallbacks = classfallbacks
+-- end
+-- elseif inheritancemode == 4 then
+-- -- classfirst
+-- if classfeatures and classfeatures ~= "" then
+-- specification.method = "*"
+-- specification.detail = classfeatures
+-- elseif fontfeatures and fontfeatures ~= "" then
+-- specification.method = "*"
+-- specification.detail = fontfeatures
+-- end
+-- if classfallbacks and classfallbacks ~= "" then
+-- specification.fallbacks = classfallbacks
+-- elseif fontfallbacks and fontfallbacks ~= "" then
+-- specification.fallbacks = fontfallbacks
+-- end
+-- end
+-- local tfmdata = definers.read(specification,size) -- id not yet known (size in spec?)
+-- --
+-- local lastfontid = 0
+-- if not tfmdata then
+-- report_defining("unable to define %a as %a",name,nice_cs(cs))
+-- lastfontid = -1
+-- texsetcount("scaledfontsize",0)
+-- -- ctx_letvaluerelax(cs) -- otherwise the current definition takes the previous one
+-- elseif type(tfmdata) == "number" then
+-- if trace_defining then
+-- report_defining("reusing %s, id %a, target %a, features %a / %a, fallbacks %a / %a, goodies %a / %a, designsize %a / %a",
+-- name,tfmdata,nice_cs(cs),classfeatures,fontfeatures,classfallbacks,fontfallbacks,classgoodies,goodies,classdesignsize,fontdesignsize)
+-- end
+-- csnames[tfmdata] = specification.cs
+-- texdefinefont(global,cs,tfmdata)
+-- -- resolved (when designsize is used):
+-- local size = fontdata[tfmdata].parameters.size or 0
+-- -- ctx_setsomefontsize(size .. "sp")
+-- setmacro("somefontsize",size.."sp")
+-- texsetcount("scaledfontsize",size)
+-- lastfontid = tfmdata
+-- else
+-- -- setting the extra characters will move elsewhere
+-- local characters = tfmdata.characters
+-- local parameters = tfmdata.parameters
+-- -- we use char0 as signal; cf the spec pdf can handle this (no char in slot)
+-- characters[0] = nil
+-- -- characters[0x00A0] = { width = parameters.space }
+-- -- characters[0x2007] = { width = characters[0x0030] and characters[0x0030].width or parameters.space } -- figure
+-- -- 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 = definefont(tfmdata)
+-- csnames[id] = specification.cs
+-- tfmdata.properties.id = id
+-- definers.register(tfmdata,id) -- to be sure, normally already done
+-- texdefinefont(global,cs,id)
+-- constructors.cleanuptable(tfmdata)
+-- constructors.finalize(tfmdata)
+-- if trace_defining then
+-- report_defining("defining %a, id %a, target %a, features %a / %a, fallbacks %a / %a",
+-- name,id,nice_cs(cs),classfeatures,fontfeatures,classfallbacks,fontfallbacks)
+-- end
+-- -- resolved (when designsize is used):
+-- local size = tfmdata.parameters.size or 655360
+-- setmacro("somefontsize",size.."sp")
+-- -- ctx_setsomefontsize(size .. "sp")
+-- texsetcount("scaledfontsize",size)
+-- lastfontid = id
+-- end
+-- if trace_defining then
+-- report_defining("memory usage after: %s",statistics.memused())
+-- report_defining("stop stage two")
+-- end
+-- --
+-- texsetcount("global","lastfontid",lastfontid)
+-- specifiers[lastfontid] = { str, size }
+-- if not mathsize then
+-- -- forget about it
+-- elseif mathsize == 0 then
+-- lastmathids[1] = lastfontid
+-- else
+-- lastmathids[mathsize] = lastfontid
+-- end
+-- --
+-- stoptiming(fonts)
+-- end
+
scanners.definefont_two = function()
local global = scanboolean() -- \ifx\fontclass\empty\s!false\else\s!true\fi
@@ -1072,7 +1320,7 @@ do -- else too many locals
local scaledfontmode = scaninteger() -- \scaledfontmode
if trace_defining then
- report_defining("start stage two: %s (size %s)",str,size)
+ report_defining("start stage two: %s, size %s, features %a & %a",str,size,classfeatures,fontfeatures)
end
-- name is now resolved and size is scaled cf sa/mo
local lookup, name, sub, method, detail = getspecification(str or "")
@@ -1167,25 +1415,8 @@ do -- else too many locals
local tfmdata = definers.read(specification,size) -- id not yet known (size in spec?)
--
local lastfontid = 0
- if not tfmdata then
- report_defining("unable to define %a as %a",name,nice_cs(cs))
- lastfontid = -1
- texsetcount("scaledfontsize",0)
- -- ctx_letvaluerelax(cs) -- otherwise the current definition takes the previous one
- elseif type(tfmdata) == "number" then
- if trace_defining then
- report_defining("reusing %s, id %a, target %a, features %a / %a, fallbacks %a / %a, goodies %a / %a, designsize %a / %a",
- name,tfmdata,nice_cs(cs),classfeatures,fontfeatures,classfallbacks,fontfallbacks,classgoodies,goodies,classdesignsize,fontdesignsize)
- end
- csnames[tfmdata] = specification.cs
- texdefinefont(global,cs,tfmdata)
- -- resolved (when designsize is used):
- local size = fontdata[tfmdata].parameters.size or 0
- -- ctx_setsomefontsize(size .. "sp")
- setmacro("somefontsize",size.."sp")
- texsetcount("scaledfontsize",size)
- lastfontid = tfmdata
- else
+ local tfmtype = type(tfmdata)
+ if tfmtype == "table" then
-- setting the extra characters will move elsewhere
local characters = tfmdata.characters
local parameters = tfmdata.parameters
@@ -1196,23 +1427,83 @@ 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 = definefont(tfmdata)
- csnames[id] = specification.cs
- tfmdata.properties.id = id
- definers.register(tfmdata,id) -- to be sure, normally already done
- texdefinefont(global,cs,id)
- constructors.cleanuptable(tfmdata)
- constructors.finalize(tfmdata)
+ local fallbacks = specification.fallbacks
+ if fallbacks and fallbacks ~= "" and tfmdata.properties.hasmath then
+ -- We need this ugly hack in order to resolve fontnames (at the \TEX end). Originally
+ -- math was done in Lua after loading (plugged into aftercopying).
+ --
+ -- After tl 2017 I'll also do text falbacks this way (although backups there are done
+ -- in a completely different way.
+ mathematics.resolvefallbacks(tfmdata,specification,fallbacks)
+ context(function()
+ mathematics.finishfallbacks(tfmdata,specification,fallbacks)
+ local id = definefont(tfmdata)
+ csnames[id] = specification.cs
+ tfmdata.properties.id = id
+ definers.register(tfmdata,id) -- to be sure, normally already done
+ texdefinefont(global,cs,id)
+ constructors.cleanuptable(tfmdata)
+ constructors.finalize(tfmdata)
+ if trace_defining then
+ report_defining("defining %a, id %a, target %a, features %a / %a, fallbacks %a / %a",
+ name,id,nice_cs(cs),classfeatures,fontfeatures,classfallbacks,fontfallbacks)
+ end
+ -- resolved (when designsize is used):
+ local size = tfmdata.parameters.size or 655360
+ setmacro("somefontsize",size.."sp")
+ -- ctx_setsomefontsize(size .. "sp")
+ texsetcount("scaledfontsize",size)
+ lastfontid = id
+ --
+ texsetcount("global","lastfontid",lastfontid)
+ specifiers[lastfontid] = { str, size }
+ if not mathsize then
+ -- forget about it
+ elseif mathsize == 0 then
+ lastmathids[1] = lastfontid
+ else
+ lastmathids[mathsize] = lastfontid
+ end
+ stoptiming(fonts)
+ end)
+ return
+ else
+ local id = definefont(tfmdata)
+ csnames[id] = specification.cs
+ tfmdata.properties.id = id
+ definers.register(tfmdata,id) -- to be sure, normally already done
+ texdefinefont(global,cs,id)
+ constructors.cleanuptable(tfmdata)
+ constructors.finalize(tfmdata)
+ if trace_defining then
+ report_defining("defining %a, id %a, target %a, features %a / %a, fallbacks %a / %a",
+ name,id,nice_cs(cs),classfeatures,fontfeatures,classfallbacks,fontfallbacks)
+ end
+ -- resolved (when designsize is used):
+ local size = tfmdata.parameters.size or 655360
+ setmacro("somefontsize",size.."sp")
+ -- ctx_setsomefontsize(size .. "sp")
+ texsetcount("scaledfontsize",size)
+ lastfontid = id
+ end
+ elseif tfmtype == "number" then
if trace_defining then
- report_defining("defining %a, id %a, target %a, features %a / %a, fallbacks %a / %a",
- name,id,nice_cs(cs),classfeatures,fontfeatures,classfallbacks,fontfallbacks)
+ report_defining("reusing %s, id %a, target %a, features %a / %a, fallbacks %a / %a, goodies %a / %a, designsize %a / %a",
+ name,tfmdata,nice_cs(cs),classfeatures,fontfeatures,classfallbacks,fontfallbacks,classgoodies,goodies,classdesignsize,fontdesignsize)
end
+ csnames[tfmdata] = specification.cs
+ texdefinefont(global,cs,tfmdata)
-- resolved (when designsize is used):
- local size = tfmdata.parameters.size or 655360
- setmacro("somefontsize",size.."sp")
+ local size = fontdata[tfmdata].parameters.size or 0
-- ctx_setsomefontsize(size .. "sp")
+ setmacro("somefontsize",size.."sp")
texsetcount("scaledfontsize",size)
- lastfontid = id
+ lastfontid = tfmdata
+ else
+ report_defining("unable to define %a as %a",name,nice_cs(cs))
+ lastfontid = -1
+ texsetcount("scaledfontsize",0)
+ -- ctx_letvaluerelax(cs) -- otherwise the current definition takes the previous one
end
if trace_defining then
report_defining("memory usage after: %s",statistics.memused())
@@ -1220,6 +1511,7 @@ do -- else too many locals
end
--
texsetcount("global","lastfontid",lastfontid)
+ specifiers[lastfontid] = { str, size }
if not mathsize then
-- forget about it
elseif mathsize == 0 then
@@ -1231,6 +1523,26 @@ do -- else too many locals
stoptiming(fonts)
end
+ function scanners.specifiedfontspec()
+ local f = specifiers[scaninteger()]
+ if f then
+ context(f[1])
+ end
+ end
+ function scanners.specifiedfontsize()
+ local f = specifiers[scaninteger()]
+ if f then
+ context(f[2])
+ end
+ end
+ function scanners.specifiedfont()
+ local f = specifiers[scaninteger()]
+ local s = scannumber()
+ if f and s then
+ context("%s at %0.2p",f[1],s * f[2]) -- we round to 2 decimals (as at the tex end)
+ end
+ end
+
--
function definers.define(specification)
@@ -1383,7 +1695,7 @@ function constructors.calculatescale(tfmdata,scaledpoints,relativeid,specificati
local scaledpoints, delta = calculatescale(tfmdata,scaledpoints)
-- if enable_auto_r_scale and relativeid then -- for the moment this is rather context specific (we need to hash rscale then)
-- local relativedata = fontdata[relativeid]
- -- local rfmdata = relativedata and relativedata.unscaled and relativedata.unscaled
+ -- local rfmdata = relativedata and relativedata.unscaled and relativedata.unscaled -- just use metadata instead
-- local id_x_height = rfmdata and rfmdata.parameters and rfmdata.parameters.x_height
-- local tf_x_height = tfmdata and tfmdata.parameters and tfmdata.parameters.x_height
-- if id_x_height and tf_x_height then
@@ -1397,14 +1709,19 @@ end
local designsizes = constructors.designsizes
+-- called quite often when in mp labels
+-- otf.normalizedaxis
+
function constructors.hashinstance(specification,force)
- local hash, size, fallbacks = specification.hash, specification.size, specification.fallbacks
+ local hash = specification.hash
+ local size = specification.size
+ local fallbacks = specification.fallbacks
if force or not hash then
hash = constructors.hashfeatures(specification)
specification.hash = hash
end
if size < 1000 and designsizes[hash] then
- size = math.round(constructors.scaled(size,designsizes[hash]))
+ size = round(constructors.scaled(size,designsizes[hash]))
specification.size = size
end
if fallbacks then
@@ -1437,7 +1754,7 @@ function definers.resolve(specification) -- overload function in font-con.lua
else
specification.forced = specification.forced
end
- -- goodies are a context specific thing and not always defined
+ -- goodies are a context specific thing and are not always defined
-- as feature, so we need to make sure we add them here before
-- hashing because otherwise we get funny goodies applied
local goodies = specification.goodies
@@ -1456,14 +1773,18 @@ function definers.resolve(specification) -- overload function in font-con.lua
end
end
-- so far for goodie hacks
- specification.hash = lower(specification.name .. ' @ ' .. hashfeatures(specification))
- if specification.sub and specification.sub ~= "" then
- specification.hash = specification.sub .. ' @ ' .. specification.hash
+ local hash = hashfeatures(specification)
+ local name = specification.name
+ local sub = specification.sub
+ if sub and sub ~= "" then
+ specification.hash = lower(name .. " @ " .. sub .. ' @ ' .. hash)
+ else
+ specification.hash = lower(name .. " @ " .. ' @ ' .. hash)
end
+ --
return specification
end
-
-- soon to be obsolete:
local mappings = fonts.mappings
@@ -1534,7 +1855,6 @@ implement {
local function nametoslot(name)
local t = type(name)
- local s = nil
if t == "string" then
local slot = unicodes[true][name]
if slot then
@@ -1543,12 +1863,82 @@ local function nametoslot(name)
if not aglunicodes then
aglunicodes = encodings.agl.unicodes
end
- slot = aglunicodes[name]
- if characters[true][slot] then
+ local char = characters[true]
+ local slot = aglunicodes[name]
+ if char[slot] then
+ return slot
+ end
+ -- not in font
+ elseif t == "number" then
+ if characters[true][name] then
return slot
else
-- not in font
end
+ end
+end
+
+
+local found = { }
+
+local function descriptiontoslot(name)
+ local t = type(name)
+ if t == "string" then
+ -- slow
+ local list = sortedkeys(chardata)
+ local slot = found[name]
+ local char = characters[true]
+ if slot then
+ return char[slot] and slot or nil
+ end
+ local NAME = upper(name)
+ for i=1,#list do
+ slot = list[i]
+ local c = chardata[slot]
+ local d = c.description
+ if d == NAME then
+ found[name] = slot
+ return char[slot] and slot or nil
+ end
+ end
+ for i=1,#list do
+ slot = list[i]
+ local c = chardata[slot]
+ local s = c.synonyms
+ if s then
+ for i=1,#s do
+ local si = s[i]
+ if si == name then
+ found[name] = si
+ return char[slot] and slot or nil
+ end
+ end
+ end
+ end
+ for i=1,#list do
+ slot = list[i]
+ local c = chardata[slot]
+ local d = c.description
+ if d and find(d,NAME) then
+ found[name] = slot
+ return char[slot] and slot or nil
+ end
+ end
+ for i=1,#list do
+ slot = list[i]
+ local c = chardata[slot]
+ local s = c.synonyms
+ if s then
+ for i=1,#s do
+ local si = s[i]
+ if find(s[i],name) then
+ found[name] = si
+ return char[slot] and slot or nil
+ end
+ end
+ end
+ end
+ -- not in font
elseif t == "number" then
if characters[true][name] then
return slot
@@ -1625,6 +2015,16 @@ do -- else too many locals
local n = nametoslot(name)
return n and utfchar(n) or name
end,
+ -- unicode description (synonym)
+ u = function(name)
+ local n = descriptiontoslot(name,false)
+ return n and utfchar(n) or name
+ end,
+ -- all
+ a = function(name)
+ local n = nametoslot(name) or descriptiontoslot(name)
+ return n and utfchar(n) or name
+ end,
-- char
c = function(name)
return name
@@ -1657,21 +2057,22 @@ do -- else too many locals
end
end
- helpers.nametoslot = nametoslot
- helpers.indextoslot = indextoslot
- helpers.tochar = tochar
+ helpers.nametoslot = nametoslot
+ helpers.descriptiontoslot = descriptiontoslot
+ helpers.indextoslot = indextoslot
+ helpers.tochar = tochar
-- interfaces:
implement {
name = "fontchar",
- actions = { nametoslot, context_char },
+ actions = { nametoslot, ctx_char },
arguments = "string",
}
implement {
name = "fontcharbyindex",
- actions = { indextoslot, context_char },
+ actions = { indextoslot, ctx_char },
arguments = "integer",
}
@@ -1702,15 +2103,16 @@ function loggers.reportdefinedfonts()
properties.fullname or "",
properties.sharedwith or "",
}
- report_status("%s: % t",properties.name,sortedkeys(data))
end
formatcolumns(t," ")
- report_status()
+ logs.pushtarget("logfile")
+ report_newline()
report_status("defined fonts:")
- report_status()
+ report_newline()
for k=1,tn do
report_status(t[k])
end
+ logs.poptarget()
end
end
@@ -1729,12 +2131,14 @@ function loggers.reportusedfeatures()
setup.number = n -- restore it (normally not needed as we're done anyway)
end
formatcolumns(t," ")
- report_status()
+ logs.pushtarget("logfile")
+ report_newline()
report_status("defined featuresets:")
- report_status()
+ report_newline()
for k=1,n do
report_status(t[k])
end
+ logs.poptarget()
end
end
@@ -2023,15 +2427,7 @@ end
do
- -- local scanners = tokens.scanners
- -- local scanstring = scanners.string
- -- local scaninteger = scanners.integer
- -- local scandimen = scanners.dimen
- -- local scanboolean = scanners.boolean
-
- -- local scanners = interfaces.scanners
-
- local setmacro = tokens.setters.macro
+ local setmacro = tokens.setters.macro
function constructors.currentfonthasfeature(n)
local f = fontdata[currentfont()]
@@ -2048,25 +2444,9 @@ do
arguments = "string"
}
- -- local p, f = 1, formatters["%0.1fpt"] -- normally this value is changed only once
- --
- -- local stripper = lpeg.patterns.stripzeros
- --
- -- function commands.nbfs(amount,precision)
- -- if precision ~= p then
- -- p = precision
- -- f = formatters["%0." .. p .. "fpt"]
- -- end
- -- context(lpegmatch(stripper,f(amount/65536)))
- -- end
-
local f_strip = formatters["%0.2fpt"] -- normally this value is changed only once
local stripper = lpeg.patterns.stripzeros
- -- scanners.nbfs = function()
- -- context(lpegmatch(stripper,f_strip(scandimen()/65536)))
- -- end
-
implement {
name = "nbfs",
arguments = "dimen",
@@ -2075,18 +2455,6 @@ do
end
}
- -- commands.featureattribute = function(tag) context(contextnumber(tag)) end
- -- commands.setfontfeature = function(tag) texsetattribute(0,contextnumber(tag)) end
- -- commands.resetfontfeature = function() texsetattribute(0,0) end
- -- commands.setfontofid = function(id) context_getvalue(csnames[id]) end
- -- commands.definefontfeature = presetcontext
-
- -- scanners.featureattribute = function() context(contextnumber(scanstring())) end
- -- scanners.setfontfeature = function() texsetattribute(0,contextnumber(scanstring())) end
- -- scanners.resetfontfeature = function() texsetattribute(0,0) end
- -- scanners.setfontofid = function() context_getvalue(csnames[scaninteger()]) end
- -- scanners.definefontfeature = function() presetcontext(scanstring(),scanstring(),scanstring()) end
-
implement {
name = "featureattribute",
arguments = "string",
@@ -2109,7 +2477,7 @@ do
name = "setfontofid",
arguments = "integer",
actions = function(id)
- context_getvalue(csnames[id])
+ ctx_getvalue(csnames[id])
end
}
@@ -2119,6 +2487,12 @@ do
actions = presetcontext
}
+ implement {
+ name = "adaptfontfeature",
+ arguments = { "string", "string" },
+ actions = adaptcontext
+ }
+
local cache = { }
local hows = {
@@ -2189,6 +2563,9 @@ do
end
end
+ constructors.setfeature = setfeature
+ constructors.resetfeature = resetfeature
+
implement { name = "resetfeature", actions = resetfeature }
implement { name = "addfeature", actions = setfeature, arguments = { "'+'", "string", "string" } }
implement { name = "subtractfeature", actions = setfeature, arguments = { "'-'", "string", "string" } }
@@ -2202,8 +2579,8 @@ do
}
implement {
- name = "registerlanguagefeatures",
- actions = registerlanguagefeatures,
+ name = "registerlanguagefeatures",
+ actions = registerlanguagefeatures,
}
end
@@ -2216,7 +2593,7 @@ do
local copy_node = nuts.copy
local kern = nuts.pool.register(nuts.pool.kern())
- setattr(kern,attributes.private('fontkern'),1)
+ setattr(kern,attributes.private('fontkern'),1) -- no gain in setprop as it's shared
nodes.injections.installnewkern(function(k)
local c = copy_node(kern)
@@ -2275,100 +2652,106 @@ end
-- make a closure (200 limit):
-local trace_analyzing = false trackers.register("otf.analyzing", function(v) trace_analyzing = v end)
+do
-local analyzers = fonts.analyzers
-local methods = analyzers.methods
+ local trace_analyzing = false trackers.register("otf.analyzing", function(v) trace_analyzing = v end)
-local unsetvalue = attributes.unsetvalue
+ local analyzers = fonts.analyzers
+ local methods = analyzers.methods
-local traverse_id = nuts.traverse_id
+ local unsetvalue = attributes.unsetvalue
-local a_color = attributes.private('color')
-local a_colormodel = attributes.private('colormodel')
-local a_state = attributes.private('state')
-local m_color = attributes.list[a_color] or { }
+ local traverse_id = nuts.traverse_id
-local glyph_code = nodes.nodecodes.glyph
+ local a_color = attributes.private('color')
+ local a_colormodel = attributes.private('colormodel')
+ local a_state = attributes.private('state')
+ local m_color = attributes.list[a_color] or { }
-local states = analyzers.states
+ local glyph_code = nodes.nodecodes.glyph
-local colornames = {
- [states.init] = "font:1",
- [states.medi] = "font:2",
- [states.fina] = "font:3",
- [states.isol] = "font:4",
- [states.mark] = "font:5",
- [states.rest] = "font:6",
- [states.rphf] = "font:1",
- [states.half] = "font:2",
- [states.pref] = "font:3",
- [states.blwf] = "font:4",
- [states.pstf] = "font:5",
-}
+ local states = analyzers.states
+
+ local colornames = {
+ [states.init] = "font:1",
+ [states.medi] = "font:2",
+ [states.fina] = "font:3",
+ [states.isol] = "font:4",
+ [states.mark] = "font:5",
+ [states.rest] = "font:6",
+ [states.rphf] = "font:1",
+ [states.half] = "font:2",
+ [states.pref] = "font:3",
+ [states.blwf] = "font:4",
+ [states.pstf] = "font:5",
+ }
-local function markstates(head)
- if head then
- head = tonut(head)
- local model = getattr(head,a_colormodel) or 1
- for glyph in traverse_id(glyph_code,head) do
- local a = getprop(glyph,a_state)
- if a then
- local name = colornames[a]
- if name then
- local color = m_color[name]
- if color then
- setattr(glyph,a_colormodel,model)
- setattr(glyph,a_color,color)
+ local function markstates(head)
+ if head then
+ head = tonut(head)
+ local model = getattr(head,a_colormodel) or 1
+ for glyph in traverse_id(glyph_code,head) do
+ local a = getprop(glyph,a_state)
+ if a then
+ local name = colornames[a]
+ if name then
+ local color = m_color[name]
+ if color then
+ setattr(glyph,a_colormodel,model)
+ setattr(glyph,a_color,color)
+ end
end
end
end
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
- return head, false
- end
- if type(action) == "function" then
- local head, done = action(head,font,attr)
- if done and trace_analyzing then
- markstates(head)
+ 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
+ return head, false
end
- return head, done
- end
- action = action[language]
- if action then
- local head, done = action(head,font,attr)
- if done and trace_analyzing then
- markstates(head)
+ if type(action) == "function" then
+ local head, done = action(head,font,attr)
+ if done and trace_analyzing then
+ markstates(head)
+ end
+ return head, done
+ end
+ action = action[language]
+ if action then
+ local head, done = action(head,font,attr)
+ if done and trace_analyzing then
+ markstates(head)
+ end
+ return head, done
+ else
+ return head, false
end
- return head, done
- else
- return head, false
end
-end
-registerotffeature { -- adapts
- name = "analyze",
- processors = {
- node = analyzeprocessor,
+ registerotffeature { -- adapts
+ name = "analyze",
+ processors = {
+ node = analyzeprocessor,
+ }
}
-}
-function methods.nocolor(head,font,attr)
- for n in traverse_id(glyph_code,head) do
- if not font or getfont(n) == font then
- setattr(n,a_color,unsetvalue)
+
+ function methods.nocolor(head,font,attr)
+ for n in traverse_id(glyph_code,head) do
+ if not font or getfont(n) == font then
+ setattr(n,a_color,unsetvalue)
+ end
end
+ return head, true
end
- return head, true
+
end
+
local function purefontname(name)
if type(name) == "number" then
name = getfontname(name)
@@ -2385,6 +2768,7 @@ implement {
}
local list = storage.shared.bodyfontsizes or { }
+
storage.shared.bodyfontsizes = list
implement {
@@ -2421,7 +2805,7 @@ implement {
implement {
name = "cleanfontname",
- actions = { names.cleanname, context },
+ actions = { cleanname, context },
arguments = "string"
}
@@ -2496,3 +2880,197 @@ implement {
actions = { names.exists, commands.doifelse },
arguments = "string"
}
+
+-- we use 0xFE000+ and 0xFF000+ in math and for runtime (text) extensions we
+-- use 0xFD000+
+
+constructors.privateslots = constructors.privateslots or { }
+
+storage.register("fonts/constructors/privateslots", constructors.privateslots, "fonts.constructors.privateslots")
+
+do
+
+ local privateslots = constructors.privateslots
+ local lastprivateslot = 0xFD000
+
+ constructors.privateslots = setmetatableindex(privateslots,function(t,k)
+ local v = lastprivateslot
+ lastprivateslot = lastprivateslot + 1
+ t[k] = v
+ return v
+ end)
+
+ implement {
+ name = "getprivateglyphslot",
+ actions = function(name) context(privateslots[name]) end,
+ arguments = "string",
+ }
+
+end
+
+-- an extra helper
+
+function helpers.getcoloredglyphs(tfmdata)
+ if type(tfmdata) == "number" then
+ tfmdata = fontdata[tfmdata]
+ end
+ if not tfmdata then
+ tfmdata = fontdata[true]
+ end
+ local characters = tfmdata.characters
+ local descriptions = tfmdata.descriptions
+ local collected = { }
+ for unicode, character in next, characters do
+ local description = descriptions[unicode]
+ if description and (description.colors or character.svg) then
+ collected[#collected+1] = unicode
+ end
+ end
+ table.sort(collected)
+ return collected
+end
+
+-- for the font manual
+
+statistics.register("used fonts",function()
+ if trace_usage then
+ local filename = file.nameonly(environment.jobname) .. "-fonts-usage.lua"
+ if next(fontdata) then
+ local files = { }
+ local list = { }
+ for id, tfmdata in sortedhash(fontdata) do
+ local filename = tfmdata.properties.filename
+ if filename then
+ local filedata = files[filename]
+ if filedata then
+ filedata.instances = filedata.instances + 1
+ else
+ local rawdata = tfmdata.shared and tfmdata.shared.rawdata
+ local metadata = rawdata and rawdata.metadata
+ files[filename] = {
+ instances = 1,
+ filename = filename,
+ version = metadata and metadata.version,
+ size = rawdata and rawdata.size,
+ }
+ end
+ else
+ -- what to do
+ end
+ end
+ for k, v in sortedhash(files) do
+ list[#list+1] = v
+ end
+ table.save(filename,list)
+ else
+ os.remove(filename)
+ end
+ end
+end)
+
+-- new
+
+do
+
+ local settings_to_array = utilities.parsers.settings_to_array
+ -- local namedcolorattributes = attributes.colors.namedcolorattributes
+ -- local colorvalues = attributes.colors.values
+
+ -- implement {
+ -- name = "definefontcolorpalette",
+ -- arguments = { "string", "string" },
+ -- actions = function(name,set)
+ -- set = settings_to_array(set)
+ -- for i=1,#set do
+ -- local name = set[i]
+ -- local space, color = namedcolorattributes(name)
+ -- local values = colorvalues[color]
+ -- if values then
+ -- set[i] = { r = values[3], g = values[4], b = values[5] }
+ -- else
+ -- set[i] = { r = 0, g = 0, b = 0 }
+ -- end
+ -- end
+ -- otf.registerpalette(name,set)
+ -- end
+ -- }
+
+ implement {
+ name = "definefontcolorpalette",
+ arguments = { "string", "string" },
+ actions = function(name,set)
+ otf.registerpalette(name,settings_to_array(set))
+ end
+ }
+
+end
+
+do
+
+ local pattern = C((1-S("* "))^1) -- strips all after * or ' at'
+
+ implement {
+ name = "truefontname",
+ arguments = "string",
+ actions = function(s)
+ -- context(match(s,"[^* ]+") or s)
+ context(lpegmatch(pattern,s) or s)
+ end
+ }
+
+end
+
+do
+
+ local function getinstancespec(id)
+ local data = fontdata[id or true]
+ local shared = data.shared
+ local resources = shared and shared.rawdata.resources
+ if resources then
+ local instancespec = data.properties.instance
+ if instancespec then
+ local variabledata = resources.variabledata
+ if variabledata then
+ local instances = variabledata.instances
+ if instances then
+ for i=1,#instances do
+ local instance = instances[i]
+ if cleanname(instance.subfamily)== instancespec then
+ local values = table.copy(instance.values)
+ local axis = variabledata.axis
+ for i=1,#values do
+ for j=1,#axis do
+ if values[i].axis == axis[j].tag then
+ values[i].name = axis[j].name
+ break
+ end
+ end
+ end
+ return values
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+
+ helpers.getinstancespec = getinstancespec
+
+ implement {
+ name = "currentfontinstancespec",
+ actions = function()
+ local t = getinstancespec() -- current font
+ if t then
+ for i=1,#t do
+ if i > 1 then
+ context.space()
+ end
+ local ti = t[i]
+ context("%s=%s",ti.name,ti.value)
+ end
+ end
+ end
+ }
+
+end
diff --git a/tex/context/base/mkiv/font-def.lua b/tex/context/base/mkiv/font-def.lua
index add42ee38..c8394badf 100644
--- a/tex/context/base/mkiv/font-def.lua
+++ b/tex/context/base/mkiv/font-def.lua
@@ -8,10 +8,12 @@ if not modules then modules = { } end modules ['font-def'] = {
-- We can overload some of the definers.functions so we don't local them.
-local format, gmatch, match, find, lower, gsub = string.format, string.gmatch, string.match, string.find, string.lower, string.gsub
+local lower, gsub = string.lower, string.gsub
local tostring, next = tostring, next
local lpegmatch = lpeg.match
-local suffixonly, removesuffix = file.suffix, file.removesuffix
+local suffixonly, removesuffix, basename = file.suffix, file.removesuffix, file.basename
+local formatters = string.formatters
+local sortedhash, sortedkeys = table.sortedhash, table.sortedkeys
local allocate = utilities.storage.allocate
@@ -183,11 +185,30 @@ end
function resolvers.name(specification)
local resolve = fonts.names.resolve
if resolve then
- local resolved, sub, subindex = resolve(specification.name,specification.sub,specification) -- we pass specification for overloaded versions
+ local resolved, sub, subindex, instance = resolve(specification.name,specification.sub,specification) -- we pass specification for overloaded versions
if resolved then
specification.resolved = resolved
specification.sub = sub
specification.subindex = subindex
+ -- new, needed for experiments
+ if instance then
+ specification.instance = instance
+ local features = specification.features
+ if not features then
+ features = { }
+ specification.features = features
+ end
+ local normal = features.normal
+ if not normal then
+ normal = { }
+ features.normal = normal
+ end
+ normal.instance = instance
+ if not callbacks.supported.glyph_stream_provider then
+ normal.variableshapes = true -- for the moment
+ end
+ end
+ --
local suffix = lower(suffixonly(resolved))
if fonts.formats[suffix] then
specification.forced = suffix
@@ -264,7 +285,7 @@ function definers.applypostprocessors(tfmdata)
if type(extrahash) == "string" and extrahash ~= "" then
-- e.g. a reencoding needs this
extrahash = gsub(lower(extrahash),"[^a-z]","-")
- properties.fullname = format("%s-%s",properties.fullname,extrahash)
+ properties.fullname = formatters["%s-%s"](properties.fullname,extrahash)
end
end
end
@@ -293,8 +314,68 @@ local function checkembedding(tfmdata)
tfmdata.embedding = embedding
end
+local function checkfeatures(tfmdata)
+ local resources = tfmdata.resources
+ local shared = tfmdata.shared
+ if resources and shared then
+ local features = resources.features
+ local usedfeatures = shared.features
+ if features and usedfeatures then
+ local usedlanguage = usedfeatures.language or "dflt"
+ local usedscript = usedfeatures.script or "dflt"
+ local function check(what)
+ if what then
+ local foundlanguages = { }
+ for feature, scripts in next, what do
+ if usedscript == "auto" or scripts["*"] then
+ -- ok
+ elseif not scripts[usedscript] then
+ -- report_defining("font %!font:name!, feature %a, no script %a",
+ -- tfmdata,feature,usedscript)
+ else
+ for script, languages in next, scripts do
+ if languages["*"] then
+ -- ok
+ elseif not languages[usedlanguage] then
+ report_defining("font %!font:name!, feature %a, script %a, no language %a",
+ tfmdata,feature,script,usedlanguage)
+ end
+ end
+ end
+ for script, languages in next, scripts do
+ for language in next, languages do
+ foundlanguages[language] = true
+ end
+ end
+ end
+ if false then
+ foundlanguages["*"] = nil
+ foundlanguages = sortedkeys(foundlanguages)
+ for feature, scripts in sortedhash(what) do
+ for script, languages in next, scripts do
+ if not languages["*"] then
+ for i=1,#foundlanguages do
+ local language = foundlanguages[i]
+ if not languages[language] then
+ report_defining("font %!font:name!, feature %a, script %a, no language %a",
+ tfmdata,feature,script,language)
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ check(features.gsub)
+ check(features.gpos)
+ end
+ end
+end
+
function definers.loadfont(specification)
local hash = constructors.hashinstance(specification)
+ -- todo: also hash by instance / factors
local tfmdata = loadedfonts[hash] -- hashes by size !
if not tfmdata then
local forced = specification.forced or ""
@@ -326,6 +407,7 @@ function definers.loadfont(specification)
checkembedding(tfmdata) -- todo: general postprocessor
loadedfonts[hash] = tfmdata
designsizes[specification.hash] = tfmdata.parameters.designsize
+ checkfeatures(tfmdata)
end
end
if not tfmdata then
@@ -437,7 +519,7 @@ function definers.read(specification,size,id) -- id can be optional, name can al
local parameters = tfmdata.parameters or { }
report_defining("using %a font with id %a, name %a, size %a, bytes %a, encoding %a, fullname %a, filename %a",
properties.format or "unknown", id, properties.name, parameters.size, properties.encodingbytes,
- properties.encodingname, properties.fullname, file.basename(properties.filename))
+ properties.encodingname, properties.fullname, basename(properties.filename))
end
statistics.stoptiming(fonts)
return tfmdata
diff --git a/tex/context/base/mkiv/font-dsp.lua b/tex/context/base/mkiv/font-dsp.lua
index 330a9400c..b46e1b82c 100644
--- a/tex/context/base/mkiv/font-dsp.lua
+++ b/tex/context/base/mkiv/font-dsp.lua
@@ -48,15 +48,28 @@ if not modules then modules = { } end modules ['font-dsp'] = {
-- of node lists is not noticeable faster for latin texts, but for arabic we gain some 10%
-- (and could probably gain a bit more).
+-- All this packing in the otf format is somewhat obsessive as nowadays 4K resolution
+-- multi-gig videos pass through our networks and storage and memory is abundant.
+
local next, type = next, type
local bittest = bit32.btest
+local band = bit32.band
+local extract = bit32.extract
+local bor = bit32.bor
+local lshift = bit32.lshift
local rshift = bit32.rshift
-local concat = table.concat
+local gsub = string.gsub
local lower = string.lower
local sub = string.sub
local strip = string.strip
local tohash = table.tohash
+local concat = table.concat
+local copy = table.copy
local reversed = table.reversed
+local sort = table.sort
+local insert = table.insert
+local round = math.round
+local lpegmatch = lpeg.match
local setmetatableindex = table.setmetatableindex
local formatters = string.formatters
@@ -69,18 +82,32 @@ local readers = fonts.handlers.otf.readers
local streamreader = readers.streamreader
local setposition = streamreader.setposition
-local skipbytes = streamreader.skip
-local skipshort = streamreader.skipshort
+local getposition = streamreader.getposition
local readushort = streamreader.readcardinal2 -- 16-bit unsigned integer
local readulong = streamreader.readcardinal4 -- 24-bit unsigned integer
+local readinteger = streamreader.readinteger1
local readshort = streamreader.readinteger2 -- 16-bit signed integer
-local readfword = readshort
local readstring = streamreader.readstring
local readtag = streamreader.readtag
+local readbytes = streamreader.readbytes
+local readfixed = streamreader.readfixed4
+local read2dot14 = streamreader.read2dot14
+local skipshort = streamreader.skipshort
+local skipbytes = streamreader.skip
+local readfword = readshort
+local readbytetable = streamreader.readbytetable
+local readbyte = streamreader.readbyte
local gsubhandlers = { }
local gposhandlers = { }
+readers.gsubhandlers = gsubhandlers
+readers.gposhandlers = gposhandlers
+
+local helpers = readers.helpers
+local gotodatatable = helpers.gotodatatable
+local setvariabledata = helpers.setvariabledata
+
local lookupidoffset = -1 -- will become 1 when we migrate (only -1 for comparign with old)
local classes = {
@@ -119,6 +146,90 @@ local chaindirections = {
reversechainedcontextsingle = -1,
}
+local function setmetrics(data,where,tag,d)
+ local w = data[where]
+ if w then
+ local v = w[tag]
+ if v then
+ -- it looks like some fonts set the value and not the delta
+ -- report("adding %s to %s.%s value %s",d,where,tag,v)
+ w[tag] = v + d
+ end
+ end
+end
+
+local variabletags = {
+ hasc = function(data,d) setmetrics(data,"windowsmetrics","typoascender",d) end,
+ hdsc = function(data,d) setmetrics(data,"windowsmetrics","typodescender",d) end,
+ hlgp = function(data,d) setmetrics(data,"windowsmetrics","typolinegap",d) end,
+ hcla = function(data,d) setmetrics(data,"windowsmetrics","winascent",d) end,
+ hcld = function(data,d) setmetrics(data,"windowsmetrics","windescent",d) end,
+ vasc = function(data,d) setmetrics(data,"vhea not done","ascent",d) end,
+ vdsc = function(data,d) setmetrics(data,"vhea not done","descent",d) end,
+ vlgp = function(data,d) setmetrics(data,"vhea not done","linegap",d) end,
+ xhgt = function(data,d) setmetrics(data,"windowsmetrics","xheight",d) end,
+ cpht = function(data,d) setmetrics(data,"windowsmetrics","capheight",d) end,
+ sbxs = function(data,d) setmetrics(data,"windowsmetrics","subscriptxsize",d) end,
+ sbys = function(data,d) setmetrics(data,"windowsmetrics","subscriptysize",d) end,
+ sbxo = function(data,d) setmetrics(data,"windowsmetrics","subscriptxoffset",d) end,
+ sbyo = function(data,d) setmetrics(data,"windowsmetrics","subscriptyoffset",d) end,
+ spxs = function(data,d) setmetrics(data,"windowsmetrics","superscriptxsize",d) end,
+ spys = function(data,d) setmetrics(data,"windowsmetrics","superscriptysize",d) end,
+ spxo = function(data,d) setmetrics(data,"windowsmetrics","superscriptxoffset",d) end,
+ spyo = function(data,d) setmetrics(data,"windowsmetrics","superscriptyoffset",d) end,
+ strs = function(data,d) setmetrics(data,"windowsmetrics","strikeoutsize",d) end,
+ stro = function(data,d) setmetrics(data,"windowsmetrics","strikeoutpos",d) end,
+ unds = function(data,d) setmetrics(data,"postscript","underlineposition",d) end,
+ undo = function(data,d) setmetrics(data,"postscript","underlinethickness",d) end,
+}
+
+local read_cardinal = {
+ streamreader.readcardinal1,
+ streamreader.readcardinal2,
+ streamreader.readcardinal3,
+ streamreader.readcardinal4,
+}
+
+local read_integer = {
+ streamreader.readinteger1,
+ streamreader.readinteger2,
+ streamreader.readinteger3,
+ streamreader.readinteger4,
+}
+
+-- using helpers doesn't make much sense, subtle differences
+--
+-- local function readushortarray(f,n)
+-- local t = { }
+-- for i=1,n do
+-- t[i] = readushort(f)
+-- end
+-- return t
+-- end
+--
+-- local function readulongarray(f,n)
+-- local t = { }
+-- for i=1,n do
+-- t[i] = readulong(f)
+-- end
+-- return t
+-- end
+--
+-- local function readushortarray(f,target,first,size)
+-- if not size then
+-- for i=1,size do
+-- target[i] = readushort(f)
+-- end
+-- else
+-- for i=1,size do
+-- target[first+i] = readushort(f)
+-- end
+-- end
+-- return target
+-- end
+--
+-- so we get some half helper - half non helper mix then
+
-- 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.
@@ -181,6 +292,269 @@ local lookupflags = setmetatableindex(function(t,k)
return v
end)
+-- Variation stores: it's not entirely clear if the regions are a shared
+-- resource (it looks like they are). Anyway, we play safe and use a
+-- share.
+
+-- values can be anything the min/max permits so we can either think of
+-- real values of a fraction along the axis (probably easier)
+
+-- wght:400,wdth:100,ital:1
+
+-- local names = table.setmetatableindex ( {
+-- weight = "wght",
+-- width = "wdth",
+-- italic = "ital",
+-- }, "self")
+
+-- todo: spaces in name but not before :
+
+local pattern = lpeg.Cf (
+ lpeg.Ct("") *
+ lpeg.Cg (
+ --(lpeg.R("az")^1/names) * lpeg.S(" :") *
+ lpeg.C((lpeg.R("az","09")+lpeg.P(" "))^1) * lpeg.S(" :=") *
+ (lpeg.patterns.number/tonumber) * lpeg.S(" ,")^0
+ )^1, rawset
+)
+
+local hash = table.setmetatableindex(function(t,k)
+ local v = lpegmatch(pattern,k)
+ local t = { }
+ for k, v in sortedhash(v) do
+ t[#t+1] = k .. "=" .. v
+ end
+ v = concat(t,",")
+ t[k] = v
+ return v
+end)
+
+helpers.normalizedaxishash = hash
+
+local cleanname = fonts.names and fonts.names.cleanname or function(name)
+ return name and (gsub(lower(name),"[^%a%d]","")) or nil
+end
+
+helpers.cleanname = cleanname
+
+function helpers.normalizedaxis(str)
+ return hash[str] or str
+end
+
+local function axistofactors(str)
+ return lpegmatch(pattern,str)
+end
+
+-- contradicting spec ... (signs) so i'll check it and fix it once we have
+-- proper fonts
+
+local function getaxisscale(segments,minimum,default,maximum,user)
+ --
+ -- returns the right values cf example in standard
+ --
+ if not minimum or not default or not maximum then
+ return false
+ end
+ if user < minimum then
+ user = minimum
+ elseif user > maximum then
+ user = maximum
+ end
+ if user < default then
+ default = - (default - user) / (default - minimum)
+ elseif user > default then
+ default = (user - default) / (maximum - default)
+ else
+ default = 0
+ end
+ if not segments then
+ return default
+ end
+ local e
+ for i=1,#segments do
+ local s = segments[i]
+ if type(s) ~= "number" then
+ report("using default axis scale")
+ return default
+ elseif s[1] >= default then
+ if s[2] == default then
+ return default
+ else
+ e = i
+ break
+ end
+ end
+ end
+ if e then
+ local b = segments[e-1]
+ local e = segments[e]
+ return b[2] + (e[2] - b[2]) * (default - b[1]) / (e[1] - b[1])
+ else
+ return false
+ end
+end
+
+local function getfactors(data,instancespec)
+ if instancespec == true then
+ -- take default
+ elseif type(instancespec) ~= "string" or instancespec == "" then
+ return
+ end
+ local variabledata = data.variabledata
+ if not variabledata then
+ return
+ end
+ local instances = variabledata.instances
+ local axis = variabledata.axis
+ local segments = variabledata.segments
+ if instances and axis then
+ local values
+ if instancespec == true then
+ -- first instance:
+ -- values = instances[1].values
+ -- axis defaults:
+ values = { }
+ for i=1,#axis do
+ values[i] = {
+ -- axis = axis[i].tag,
+ value = axis[i].default,
+ }
+ end
+
+ else
+ for i=1,#instances do
+ local instance = instances[i]
+ if cleanname(instance.subfamily) == instancespec then
+ values = instance.values
+ break
+ end
+ end
+ end
+ if values then
+ local factors = { }
+ for i=1,#axis do
+ local a = axis[i]
+ factors[i] = getaxisscale(segments,a.minimum,a.default,a.maximum,values[i].value)
+ end
+ return factors
+ end
+ local values = axistofactors(hash[instancespec] or instancespec)
+ if values then
+ local factors = { }
+ for i=1,#axis do
+ local a = axis[i]
+ local d = a.default
+ factors[i] = getaxisscale(segments,a.minimum,d,a.maximum,values[a.name or a.tag] or d)
+ end
+ return factors
+ end
+ end
+end
+
+local function getscales(regions,factors)
+ local scales = { }
+ for i=1,#regions do
+ local region = regions[i]
+ local s = 1
+ for j=1,#region do
+ local axis = region[j]
+ local f = factors[j]
+ local start = axis.start
+ local peak = axis.peak
+ local stop = axis.stop
+ -- get rid of these tests, false flag
+ if start > peak or peak > stop then
+ -- * 1
+ elseif start < 0 and stop > 0 and peak ~= 0 then
+ -- * 1
+ elseif peak == 0 then
+ -- * 1
+ elseif f < start or f > stop then
+ -- * 0
+ s = 0
+ break
+ elseif f < peak then
+ -- s = - s * (f - start) / (peak - start)
+ s = s * (f - start) / (peak - start)
+ elseif f > peak then
+ s = s * (stop - f) / (stop - peak)
+ else
+ -- * 1
+ end
+ end
+ scales[i] = s
+ end
+ return scales
+end
+
+helpers.getaxisscale = getaxisscale
+helpers.getfactors = getfactors
+helpers.getscales = getscales
+helpers.axistofactors = axistofactors
+
+local function readvariationdata(f,storeoffset,factors) -- store
+ local position = getposition(f)
+ setposition(f,storeoffset)
+ -- header
+ local format = readushort(f)
+ local regionoffset = storeoffset + readulong(f)
+ local nofdeltadata = readushort(f)
+ local deltadata = { }
+ for i=1,nofdeltadata do
+ deltadata[i] = readulong(f)
+ end
+ -- regions
+ setposition(f,regionoffset)
+ local nofaxis = readushort(f)
+ local nofregions = readushort(f)
+ local regions = { }
+ for i=1,nofregions do -- 0
+ local t = { }
+ for i=1,nofaxis do
+ t[i] = { -- maybe no keys, just 1..3
+ start = read2dot14(f),
+ peak = read2dot14(f),
+ stop = read2dot14(f),
+ }
+ end
+ regions[i] = t
+ end
+ -- deltas
+ if factors then
+ for i=1,nofdeltadata do
+ setposition(f,storeoffset+deltadata[i])
+ local nofdeltasets = readushort(f)
+ local nofshorts = readushort(f)
+ local nofregions = readushort(f)
+ local usedregions = { }
+ local deltas = { }
+ for i=1,nofregions do
+ usedregions[i] = regions[readushort(f)+1]
+ end
+ -- we could test before and save a for
+ for i=1,nofdeltasets do
+ local t = { } -- newtable
+ for i=1,nofshorts do
+ t[i] = readshort(f)
+ end
+ for i=nofshorts+1,nofregions do
+ t[i] = readinteger(f)
+ end
+ deltas[i] = t
+ end
+ deltadata[i] = {
+ regions = usedregions,
+ deltas = deltas,
+ scales = factors and getscales(usedregions,factors) or nil,
+ }
+ end
+ end
+ setposition(f,position)
+ return regions, deltadata
+end
+
+helpers.readvariationdata = readvariationdata
+
-- 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.
@@ -224,10 +598,15 @@ local function readcoverage(f,offset,simple)
return coverage
end
-local function readclassdef(f,offset)
+local function readclassdef(f,offset,preset)
setposition(f,offset)
local classdefformat = readushort(f)
local classdef = { }
+ if type(preset) == "number" then
+ for k=0,preset-1 do
+ classdef[k] = 1
+ end
+ end
if classdefformat == 1 then
local index = readushort(f)
local nofclassdef = readushort(f)
@@ -249,6 +628,13 @@ local function readclassdef(f,offset)
else
report("unknown classdef format %a ",classdefformat)
end
+ if type(preset) == "table" then
+ for k in next, preset do
+ if not classdef[k] then
+ classdef[k] = 1
+ end
+ end
+ end
return classdef
end
@@ -269,36 +655,168 @@ end
-- extra readers
-local function readposition(f,format)
+local skips = { [0] =
+ 0, -- ----
+ 1, -- ---x
+ 1, -- --y-
+ 2, -- --yx
+ 1, -- -h--
+ 2, -- -h-x
+ 2, -- -hy-
+ 3, -- -hyx
+ 2, -- v--x
+ 2, -- v-y-
+ 3, -- v-yx
+ 2, -- vh--
+ 3, -- vh-x
+ 3, -- vhy-
+ 4, -- vhyx
+}
+
+-- We can assume that 0 is nothing and in fact we can start at 1 as
+-- usual in Lua to make sure of that.
+
+local function readvariation(f,offset)
+ local p = getposition(f)
+ setposition(f,offset)
+ local outer = readushort(f)
+ local inner = readushort(f)
+ local format = readushort(f)
+ setposition(f,p)
+ if format == 0x8000 then
+ return outer, inner
+ end
+end
+
+local function readposition(f,format,mainoffset,getdelta)
if format == 0 then
- return nil
+ return
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
+ -- a few happen often
+ if format == 0x04 then
+ local h = readshort(f)
+ if h == 0 then
+ return
+ else
+ return { 0, 0, h, 0 }
+ end
+ end
+ if format == 0x05 then
+ local x = readshort(f)
+ local h = readshort(f)
+ if x == 0 and h == 0 then
+ return
+ else
+ return { x, 0, h, 0 }
+ end
+ end
+ if format == 0x44 then
+ local h = readshort(f)
+ if getdelta then
+ local d = readshort(f) -- short or ushort
+ if d > 0 then
+ local outer, inner = readvariation(f,mainoffset+d)
+ if outer then
+ h = h + getdelta(outer,inner)
+ end
+ end
+ else
+ skipshort(f,1)
+ end
+ if h == 0 then
+ return
+ else
+ return { 0, 0, h, 0 }
+ end
+ end
+ --
+ -- todo:
+ --
+ -- if format == 0x55 then
+ -- local x = readshort(f)
+ -- local h = readshort(f)
+ -- ....
+ -- end
+ --
+ local x = bittest(format,0x01) and readshort(f) or 0 -- x placement
+ local y = bittest(format,0x02) and readshort(f) or 0 -- y placement
+ local h = bittest(format,0x04) and readshort(f) or 0 -- h advance
+ local v = bittest(format,0x08) and readshort(f) or 0 -- v advance
+ if format >= 0x10 then
+ local X = bittest(format,0x10) and skipshort(f) or 0
+ local Y = bittest(format,0x20) and skipshort(f) or 0
+ local H = bittest(format,0x40) and skipshort(f) or 0
+ local V = bittest(format,0x80) and skipshort(f) or 0
+ local s = skips[extract(format,4,4)]
+ if s > 0 then
+ skipshort(f,s)
+ end
+ if getdelta then
+ if X > 0 then
+ local outer, inner = readvariation(f,mainoffset+X)
+ if outer then
+ x = x + getdelta(outer,inner)
+ end
+ end
+ if Y > 0 then
+ local outer, inner = readvariation(f,mainoffset+Y)
+ if outer then
+ y = y + getdelta(outer,inner)
+ end
+ end
+ if H > 0 then
+ local outer, inner = readvariation(f,mainoffset+H)
+ if outer then
+ h = h + getdelta(outer,inner)
+ end
+ end
+ if V > 0 then
+ local outer, inner = readvariation(f,mainoffset+V)
+ if outer then
+ v = v + getdelta(outer,inner)
+ end
+ end
+ end
+ return { x, y, h, v }
+ elseif x == 0 and y == 0 and h == 0 and v == 0 then
+ return
else
return { x, y, h, v }
end
end
-local function readanchor(f,offset)
+local function readanchor(f,offset,getdelta) -- maybe also ignore 0's as in pos
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
+ -- no need to skip as we position each
+ local format = readshort(f) -- 1: x y 2: x y index 3 x y X Y
+ local x = readshort(f)
+ local y = readshort(f)
+ if format == 3 then
+ if getdelta then
+ local X = readshort(f)
+ local Y = readshort(f)
+ if X > 0 then
+ local outer, inner = readvariation(f,offset+X)
+ if outer then
+ x = x + getdelta(outer,inner)
+ end
+ end
+ if Y > 0 then
+ local outer, inner = readvariation(f,offset+Y)
+ if outer then
+ y = y + getdelta(outer,inner)
+ end
+ end
+ else
+ skipshort(f,2)
+ end
+ return { x, y } -- , { xindex, yindex }
+ else
+ return { x, y }
end
- return { readshort(f), readshort(f) }
end
-- common handlers: inlining can be faster but we cache anyway
@@ -365,6 +883,58 @@ end
-- We generalize the chained lookups so that we can do with only one handler
-- when processing them.
+-- pruned
+
+local function readlookuparray(f,noflookups,nofcurrent)
+ local lookups = { }
+ if noflookups > 0 then
+ local length = 0
+ for i=1,noflookups do
+ local index = readushort(f) + 1
+ if index > length then
+ length = index
+ end
+ local lookup = readushort(f) + 1
+ local list = lookups[index]
+ if list then
+ list[#list+1] = lookup
+ else
+ lookups[index] = { lookup }
+ end
+ end
+ for index=1,length do
+ if not lookups[index] then
+ lookups[index] = false
+ end
+ end
+ -- if length > nofcurrent then
+ -- report("more lookups than currently matched characters")
+ -- end
+ end
+ return lookups
+end
+
+-- not pruned
+--
+-- local function readlookuparray(f,noflookups,nofcurrent)
+-- local lookups = { }
+-- for i=1,nofcurrent do
+-- lookups[i] = false
+-- end
+-- for i=1,noflookups do
+-- local index = readushort(f) + 1
+-- if index > nofcurrent then
+-- report("more lookups than currently matched characters")
+-- for i=nofcurrent+1,index-1 do
+-- lookups[i] = false
+-- end
+-- nofcurrent = index
+-- end
+-- lookups[index] = readushort(f) + 1
+-- end
+-- return lookups
+-- end
+
local function unchainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,what)
local tableoffset = lookupoffset + offset
setposition(f,tableoffset)
@@ -389,10 +959,7 @@ local function unchainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,n
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
+ local lookups = readlookuparray(f,noflookups,nofcurrent)
rules[#rules+1] = {
current = current,
lookups = lookups
@@ -416,7 +983,7 @@ local function unchainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,n
local rules = { }
if subclasssets then
coverage = readcoverage(f,tableoffset + coverage)
- currentclassdef = readclassdef(f,tableoffset + currentclassdef)
+ currentclassdef = readclassdef(f,tableoffset + currentclassdef,coverage)
local currentclasses = classtocoverage(currentclassdef,fontdata.glyphs)
for class=1,#subclasssets do
local offset = subclasssets[class]
@@ -435,10 +1002,7 @@ local function unchainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,n
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
+ local lookups = readlookuparray(f,noflookups,nofcurrent)
rules[#rules+1] = {
current = current,
lookups = lookups
@@ -462,10 +1026,7 @@ local function unchainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,n
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
+ local lookups = readlookuparray(f,noflookups,#current)
current = readcoveragearray(f,tableoffset,current,true)
return {
format = "coverage",
@@ -525,10 +1086,7 @@ local function chainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nof
end
end
local noflookups = readushort(f)
- local lookups = { }
- for i=1,noflookups do
- lookups[readushort(f)+1] = readushort(f) + 1
- end
+ local lookups = readlookuparray(f,noflookups,nofcurrent)
rules[#rules+1] = {
before = before,
current = current,
@@ -554,9 +1112,9 @@ local function chainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nof
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 beforeclassdef = readclassdef(f,tableoffset + beforeclassdef,nofglyphs)
+ local currentclassdef = readclassdef(f,tableoffset + currentclassdef,coverage)
+ local afterclassdef = readclassdef(f,tableoffset + afterclassdef,nofglyphs)
local beforeclasses = classtocoverage(beforeclassdef,fontdata.glyphs)
local currentclasses = classtocoverage(currentclassdef,fontdata.glyphs)
local afterclasses = classtocoverage(afterclassdef,fontdata.glyphs)
@@ -596,10 +1154,7 @@ local function chainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nof
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
+ local lookups = readlookuparray(f,noflookups,nofcurrent)
rules[#rules+1] = {
before = before,
current = current,
@@ -627,10 +1182,7 @@ local function chainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nof
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
+ local lookups = readlookuparray(f,noflookups,#current)
before = readcoveragearray(f,tableoffset,before,true)
current = readcoveragearray(f,tableoffset,current,true)
after = readcoveragearray(f,tableoffset,after,true)
@@ -716,6 +1268,8 @@ function gsubhandlers.single(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofg
end
end
+-- we see coverage format 0x300 in some old ms fonts
+
local function sethandler(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,what)
local tableoffset = lookupoffset + offset
setposition(f,tableoffset)
@@ -854,20 +1408,21 @@ end
-- gpos handlers
-local function readpairsets(f,tableoffset,sets,format1,format2)
+local function readpairsets(f,tableoffset,sets,format1,format2,mainoffset,getdelta)
local done = { }
for i=1,#sets do
local offset = sets[i]
local reused = done[offset]
if not reused then
- setposition(f,tableoffset + offset)
+ offset = tableoffset + offset
+ setposition(f,offset)
local n = readushort(f)
reused = { }
for i=1,n do
reused[i] = {
readushort(f), -- second glyph id
- readposition(f,format1),
- readposition(f,format2)
+ readposition(f,format1,offset,getdelta),
+ readposition(f,format2,offset,getdelta),
}
end
done[offset] = reused
@@ -877,14 +1432,14 @@ local function readpairsets(f,tableoffset,sets,format1,format2)
return sets
end
-local function readpairclasssets(f,nofclasses1,nofclasses2,format1,format2)
+local function readpairclasssets(f,nofclasses1,nofclasses2,format1,format2,mainoffset,getdelta)
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)
+ local one = readposition(f,format1,mainoffset,getdelta)
+ local two = readposition(f,format2,mainoffset,getdelta)
if one or two then
classlist2[j] = { one, two }
else
@@ -900,26 +1455,27 @@ end
function gposhandlers.single(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
local tableoffset = lookupoffset + offset
setposition(f,tableoffset)
- local subtype = readushort(f)
+ local subtype = readushort(f)
+ local getdelta = fontdata.temporary.getdelta
if subtype == 1 then
local coverage = readushort(f)
local format = readushort(f)
- local value = readposition(f,format)
+ local value = readposition(f,format,tableoffset,getdelta)
local coverage = readcoverage(f,tableoffset+coverage)
for index, newindex in next, coverage do
coverage[index] = value
end
return {
format = "pair",
- coverage = coverage
+ coverage = coverage,
}
elseif subtype == 2 then
local coverage = readushort(f)
local format = readushort(f)
- local values = { }
local nofvalues = readushort(f)
+ local values = { }
for i=1,nofvalues do
- values[i] = readposition(f,format)
+ values[i] = readposition(f,format,tableoffset,getdelta)
end
local coverage = readcoverage(f,tableoffset+coverage)
for index, newindex in next, coverage do
@@ -927,7 +1483,7 @@ function gposhandlers.single(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofg
end
return {
format = "pair",
- coverage = coverage
+ coverage = coverage,
}
else
report("unsupported subtype %a in %a positioning",subtype,"single")
@@ -944,13 +1500,14 @@ end
function gposhandlers.pair(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
local tableoffset = lookupoffset + offset
setposition(f,tableoffset)
- local subtype = readushort(f)
+ local subtype = readushort(f)
+ local getdelta = fontdata.temporary.getdelta
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)
+ sets = readpairsets(f,tableoffset,sets,format1,format2,mainoffset,getdelta)
coverage = readcoverage(f,tableoffset + coverage)
for index, newindex in next, coverage do
local set = sets[newindex+1]
@@ -972,7 +1529,7 @@ function gposhandlers.pair(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofgly
end
return {
format = "pair",
- coverage = coverage
+ coverage = coverage,
}
elseif subtype == 2 then
local coverage = readushort(f)
@@ -982,10 +1539,10 @@ function gposhandlers.pair(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofgly
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)
+ local classlist = readpairclasssets(f,nofclasses1,nofclasses2,format1,format2,tableoffset,getdelta)
coverage = readcoverage(f,tableoffset+coverage)
- classdef1 = readclassdef(f,tableoffset+classdef1)
- classdef2 = readclassdef(f,tableoffset+classdef2)
+ classdef1 = readclassdef(f,tableoffset+classdef1,coverage)
+ classdef2 = readclassdef(f,tableoffset+classdef2,nofglyphs)
local usedcoverage = { }
for g1, c1 in next, classdef1 do
if coverage[g1] then
@@ -1010,7 +1567,7 @@ function gposhandlers.pair(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofgly
end
return {
format = "pair",
- coverage = usedcoverage
+ coverage = usedcoverage,
}
elseif subtype == 3 then
report("yet unsupported subtype %a in %a positioning",subtype,"pair")
@@ -1022,7 +1579,8 @@ end
function gposhandlers.cursive(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
local tableoffset = lookupoffset + offset
setposition(f,tableoffset)
- local subtype = readushort(f)
+ local subtype = readushort(f)
+ local getdelta = fontdata.temporary.getdelta
if subtype == 1 then
local coverage = tableoffset + readushort(f)
local nofrecords = readushort(f)
@@ -1038,17 +1596,18 @@ function gposhandlers.cursive(f,fontdata,lookupid,lookupoffset,offset,glyphs,nof
coverage = readcoverage(f,coverage)
for i=1,nofrecords do
local r = records[i]
+ -- slot 1 will become hash after loading (must be unique per lookup when packed)
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,
+ 1,
+ readanchor(f,r.entry,getdelta) or nil,
+ readanchor(f,r.exit, getdelta) or nil,
}
end
for index, newindex in next, coverage do
coverage[index] = records[newindex+1]
end
return {
- coverage = coverage
+ coverage = coverage,
}
else
report("unsupported subtype %a in %a positioning",subtype,"cursive")
@@ -1058,7 +1617,8 @@ end
local function handlemark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,ligature)
local tableoffset = lookupoffset + offset
setposition(f,tableoffset)
- local subtype = readushort(f)
+ local subtype = readushort(f)
+ local getdelta = fontdata.temporary.getdelta
if subtype == 1 then
-- we are one based, not zero
local markcoverage = tableoffset + readushort(f)
@@ -1077,17 +1637,12 @@ local function handlemark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyp
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
@@ -1095,8 +1650,7 @@ local function handlemark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyp
for i=1,nofmarkclasses do
local mc = markclasses[i]
if mc then
--- mc[3] = readanchor(f,mc[3])
- mc[2] = readanchor(f,mc[2])
+ mc[2] = readanchor(f,mc[2],getdelta)
end
end
--
@@ -1150,7 +1704,7 @@ local function handlemark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyp
local classes = components[c]
if classes then
for i=1,nofclasses do
- local anchor = readanchor(f,classes[i])
+ local anchor = readanchor(f,classes[i],getdelta)
local bclass = baseclasses[i]
local bentry = bclass[b]
if bentry then
@@ -1160,7 +1714,6 @@ local function handlemark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyp
end
end
end
--- components[i] = classes
end
end
end
@@ -1193,7 +1746,7 @@ local function handlemark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyp
local r = baserecords[i]
local b = basecoverage[i]
for j=1,nofclasses do
- baseclasses[j][b] = readanchor(f,r[j])
+ baseclasses[j][b] = readanchor(f,r[j],getdelta)
end
end
for index, newindex in next, markcoverage do
@@ -1242,20 +1795,54 @@ 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)
+ function plugins.size(f,fontdata,tableoffset,feature)
+ if fontdata.designsize then
+ -- yes, there are fonts with multiple size entries ... it probably relates
+ -- to the other two fields (menu entries in some language)
+ else
+ local function check(offset)
+ setposition(f,offset)
+ local designsize = readushort(f)
+ if designsize > 0 then -- we could also have a threshold
+ local fontstyleid = readushort(f)
+ local guimenuid = readushort(f)
+ local minsize = readushort(f)
+ local maxsize = readushort(f)
+ if minsize == 0 and maxsize == 0 and fontstyleid == 0 and guimenuid == 0 then
+ minsize = designsize
+ maxsize = designsize
+ end
+ if designsize >= minsize and designsize <= maxsize then
+ return minsize, maxsize, designsize
+ end
+ end
+ end
+ local minsize, maxsize, designsize = check(tableoffset+feature.offset+feature.parameters)
+ if not designsize then
+ -- some old adobe fonts have: tableoffset+feature.parameters and we could
+ -- use some heuristic but why bother ... this extra check will be removed
+ -- some day and/or when we run into an issue
+ minsize, maxsize, designsize = check(tableoffset+feature.parameters)
+ if designsize then
+ report("bad size feature in %a, falling back to wrong offset",fontdata.filename or "?")
+ else
+ report("bad size feature in %a,",fontdata.filename or "?")
+ end
+ end
+ if designsize then
+ fontdata.minsize = minsize
+ fontdata.maxsize = maxsize
+ fontdata.designsize = designsize
end
end
end
- -- feature order needs checking ... as we loop over a hash
+ -- function plugins.rvrn(f,fontdata,tableoffset,feature)
+ -- -- todo, at least a message
+ -- end
+
+ -- feature order needs checking ... as we loop over a hash ... however, in the file
+ -- they are sorted so order is not that relevant
local function reorderfeatures(fontdata,scripts,features)
local scriptlangs = { }
@@ -1397,7 +1984,7 @@ do
feature.parameters = parameters
local plugin = plugins[feature.tag]
if plugin then
- plugin(f,fontdata,offset,parameters)
+ plugin(f,fontdata,featureoffset,feature)
end
end
end
@@ -1412,8 +1999,8 @@ do
lookups[i] = readushort(f)
end
for lookupid=1,noflookups do
- local index = lookups[lookupid]
- setposition(f,lookupoffset+index)
+ local offset = lookups[lookupid]
+ setposition(f,lookupoffset+offset)
local subtables = { }
local typebits = readushort(f)
local flagbits = readushort(f)
@@ -1421,8 +2008,7 @@ do
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
+ subtables[j] = offset + readushort(f) -- we can probably put lookupoffset here
end
-- which one wins?
local markclass = bittest(flagbits,0x0010) -- usemarkfilteringset
@@ -1447,23 +2033,9 @@ do
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 function resolvelookups(f,lookupoffset,fontdata,lookups,lookuptypes,lookuphandlers,what,tableoffset)
local sequences = fontdata.sequences or { }
local sublookuplist = fontdata.sublookups or { }
@@ -1599,6 +2171,14 @@ do
local reported = { }
+ local function report_issue(i,what,sequence,kind)
+ local name = sequence.name
+ if not reported[name] then
+ report("rule %i in %s lookup %a has %s lookups",i,what,name,kind)
+ reported[name] = true
+ end
+ end
+
for i=lastsequence+1,nofsequences do
local sequence = sequences[i]
local steps = sequence.steps
@@ -1610,46 +2190,72 @@ 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
+ report_issue(i,what,sequence,"no")
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
+ -- can be ok as it aborts a chain sequence
+ report_issue(i,what,sequence,"empty")
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
+ -- we can have holes in rlookups flagged false and we can have multiple lookups
+ -- applied (first time seen in seguemj)
+ local length = #rlookups
+ for index=1,length do
+ local lookuplist = rlookups[index]
+ if lookuplist then
+ local length = #lookuplist
+ local found = { }
+ local noffound = 0
+ for index=1,length do
+ local lookupid = lookuplist[index]
+ if lookupid then
+ local h = sublookuphash[lookupid]
+ if not h then
+ -- here we have a lookup that is used independent as well
+ -- as in another one
+ local lookup = lookups[lookupid]
+ if lookup then
+ local d = lookup.done
+ if d then
+ nofsublookups = nofsublookups + 1
+ -- report("registering %i as sublookup %i",lookupid,nofsublookups)
+ 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 or "gsub_single", -- todo: check type
+ markclass = d.markclass or nil,
+ flags = d.flags,
+ -- chain = d.chain,
+ }
+ sublookuplist[nofsublookups] = copy(h) -- we repack later
+ sublookuphash[lookupid] = nofsublookups
+ sublookupcheck[lookupid] = 1
+ h = nofsublookups
+ else
+ report_issue(i,what,sequence,"missing")
+ rule.lookups = nil
+ break
+ end
+ else
+ report_issue(i,what,sequence,"bad")
+ rule.lookups = nil
+ break
+ end
+ else
+ sublookupcheck[lookupid] = sublookupcheck[lookupid] + 1
+ end
+ if h then
+ noffound = noffound + 1
+ found[noffound] = h
+ end
+ end
+ end
+ rlookups[index] = noffound > 0 and found or false
else
- sublookupcheck[lookupid] = sublookupcheck[lookupid] + 1
+ rlookups[index] = false
end
- rlookups[index] = h
end
end
end
@@ -1663,45 +2269,124 @@ do
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
+ local function loadvariations(f,fontdata,variationsoffset,lookuptypes,featurehash,featureorder)
+ setposition(f,variationsoffset)
+ local version = readulong(f)
+ local nofrecords = readulong(f)
+ local records = { }
+ for i=1,nofrecords do
+ records[i] = {
+ conditions = readulong(f),
+ substitutions = readulong(f),
+ }
end
- local scriptoffset, featureoffset, lookupoffset = readscriptoffsets(f,fontdata,tableoffset)
- if not scriptoffset then
- return
+ for i=1,nofrecords do
+ local record = records[i]
+ local offset = record.conditions
+ if offset == 0 then
+ record.condition = nil
+ record.matchtype = "always"
+ else
+ setposition(f,variationsoffset+offset)
+ local nofconditions = readushort(f)
+ local conditions = { }
+ for i=1,nofconditions do
+ conditions[i] = variationsoffset+offset+readulong(f)
+ end
+ record.conditions = conditions
+ record.matchtype = "condition"
+ end
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 }
+ for i=1,nofrecords do
+ local record = records[i]
+ if record.matchtype == "condition" then
+ local conditions = record.conditions
+ for i=1,#conditions do
+ setposition(f,conditions[i])
+ conditions[i] = {
+ format = readushort(f),
+ axis = readushort(f),
+ minvalue = read2dot14(f),
+ maxvalue = read2dot14(f),
+ }
+ end
+ end
end
- --
- if not lookupstoo then
- return
+
+ for i=1,nofrecords do
+ local record = records[i]
+ local offset = record.substitutions
+ if offset == 0 then
+ record.substitutions = { }
+ else
+ setposition(f,variationsoffset + offset)
+ local version = readulong(f)
+ local nofsubstitutions = readushort(f)
+ local substitutions = { }
+ for i=1,nofsubstitutions do
+ substitutions[readushort(f)] = readulong(f)
+ end
+ for index, alternates in sortedhash(substitutions) do
+ if index == 0 then
+ record.substitutions = false
+ else
+ local tableoffset = variationsoffset + offset + alternates
+ setposition(f,tableoffset)
+ local parameters = readulong(f) -- feature parameters
+ local noflookups = readushort(f)
+ local lookups = { }
+ for i=1,noflookups do
+ lookups[i] = readushort(f) -- not sure what to do with these
+ end
+ -- todo : resolve to proper lookups
+ record.substitutions = lookups
+ end
+ end
+ end
end
- --
- local lookups = readlookups(f,lookupoffset,lookuptypes,featurehash,featureorder)
- --
- if lookups then
- resolvelookups(f,lookupoffset,fontdata,lookups,lookuptypes,lookuphandlers,what)
+ setvariabledata(fontdata,"features",records)
+ end
+
+ local function readscripts(f,fontdata,what,lookuptypes,lookuphandlers,lookupstoo)
+ local tableoffset = gotodatatable(f,fontdata,what,true)
+ if tableoffset then
+ local version = readulong(f)
+ local scriptoffset = tableoffset + readushort(f)
+ local featureoffset = tableoffset + readushort(f)
+ local lookupoffset = tableoffset + readushort(f)
+ local variationsoffset = version > 0x00010000 and (tableoffset + readulong(f)) or 0
+ 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,tableoffset)
+ end
+ --
+ if variationsoffset > 0 then
+ loadvariations(f,fontdata,variationsoffset,lookuptypes,featurehash,featureorder)
+ end
end
end
@@ -1721,61 +2406,65 @@ do
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)
+ if noftables > 1 then
+ report("adding global kern table as gpos feature %a",name)
+ 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
- elseif format == 2 then
- -- apple specific so let's ignore it
+ 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
- -- not supported by ms
+ gposfeatures[name] = feature
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",
+ 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 },
- }
+ nofsteps = 1,
+ type = "gpos_pair",
+ -- type = "gpos_single", -- maybe better
+ flags = { false, false, false, false },
+ order = { name },
+ features = { [name] = feature },
+ }
+ else
+ report("ignoring empty kern table of feature %a",name)
+ end
end
function readers.gsub(f,fontdata,specification)
@@ -1796,92 +2485,126 @@ do
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
+ if not specification.glyphs then
+ return
+ end
+ 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 varsetsoffset = version >= 0x00010003 and (tableoffset + readulong(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
- 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
+ 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
- -- mark classes
- setposition(f,markclassoffset)
- local classformat = readushort(f)
- if classformat == 1 then
+ 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 = firstindex + readushort(f) - 1
+ local lastindex = readushort(f)
+ local class = markclasses[readushort(f)]
for index=firstindex,lastindex do
- markclasses[readushort(f)][index] = true
+ class[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
+ -- mark sets : todo: just make the same as class sets above
+ if marksetsoffset and marksetsoffset > tableoffset then -- zero offset means no table
+ 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
- -- 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
+
+ local factors = specification.factors
+
+ if (specification.variable or factors) and varsetsoffset and varsetsoffset > tableoffset then
+
+ local regions, deltas = readvariationdata(f,varsetsoffset,factors)
+
+ -- setvariabledata(fontdata,"gregions",regions)
+
+ if factors then
+ fontdata.temporary.getdelta = function(outer,inner)
+ local delta = deltas[outer+1]
+ if delta then
+ local d = delta.deltas[inner+1]
+ if d then
+ local scales = delta.scales
+ local dd = 0
+ for i=1,#scales do
+ local di = d[i]
+ if di then
+ dd = dd + scales[i] * di
+ else
+ break
+ end
+ end
+ return round(dd)
end
end
+ return 0
end
end
+
end
end
end
@@ -2015,16 +2738,15 @@ local function readmathglyphinfo(f,fontdata,offset)
local function get(offset)
setposition(f,kernoffset+offset)
local n = readushort(f)
- if n > 0 then
+ if n == 0 then
+ local k = readmathvalue(f)
+ if k == 0 then
+ -- no need for it (happens sometimes)
+ else
+ return { { kern = k } }
+ end
+ else
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
@@ -2059,10 +2781,10 @@ local function readmathglyphinfo(f,fontdata,offset)
if next(kernset) then
local glyph = glyphs[coverage[i]]
local math = glyph.math
- if not math then
- glyph.math = { kerns = kernset }
- else
+ if math then
math.kerns = kernset
+ else
+ glyph.math = { kerns = kernset }
end
end
end
@@ -2171,30 +2893,721 @@ local function readmathvariants(f,fontdata,offset)
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
+ local tableoffset = gotodatatable(f,fontdata,"math",specification.glyphs)
+ if tableoffset then
+ local version = readulong(f)
+ -- if version ~= 0x00010000 then
+ -- report("table version %a of %a is not supported (yet), maybe font %s is bad",version,"math",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
+
+function readers.colr(f,fontdata,specification)
+ local tableoffset = gotodatatable(f,fontdata,"colr",specification.glyphs)
+ if tableoffset then
+ local version = readushort(f)
+ if version ~= 0 then
+ report("table version %a of %a is not supported (yet), maybe font %s is bad",version,"colr",fontdata.filename)
+ return
+ end
+ if not fontdata.tables.cpal then
+ report("color table %a in font %a has no mandate %a table","colr",fontdata.filename,"cpal")
+ fontdata.colorpalettes = { }
+ end
+ local glyphs = fontdata.glyphs
+ local nofglyphs = readushort(f)
+ local baseoffset = readulong(f)
+ local layeroffset = readulong(f)
+ local noflayers = readushort(f)
+ local layerrecords = { }
+ local maxclass = 0
+ -- The special value 0xFFFF is foreground (but we index from 1). It
+ -- more looks like indices into a palette so 'class' is a better name
+ -- than 'palette'.
+ setposition(f,tableoffset + layeroffset)
+ for i=1,noflayers do
+ local slot = readushort(f)
+ local class = readushort(f)
+ if class < 0xFFFF then
+ class = class + 1
+ if class > maxclass then
+ maxclass = class
+ end
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)
+ layerrecords[i] = {
+ slot = slot,
+ class = class,
+ }
+ end
+ fontdata.maxcolorclass = maxclass
+ setposition(f,tableoffset + baseoffset)
+ for i=0,nofglyphs-1 do
+ local glyphindex = readushort(f)
+ local firstlayer = readushort(f)
+ local noflayers = readushort(f)
+ local t = { }
+ for i=1,noflayers do
+ t[i] = layerrecords[firstlayer+i]
end
- if glyphinfo ~= 0 then
- readmathglyphinfo(f,fontdata,tableoffset+glyphinfo)
+ glyphs[glyphindex].colors = t
+ end
+ end
+ fontdata.hascolor = true
+end
+
+function readers.cpal(f,fontdata,specification)
+ local tableoffset = gotodatatable(f,fontdata,"cpal",specification.glyphs)
+ if tableoffset then
+ local version = readushort(f)
+ -- if version > 1 then
+ -- report("table version %a of %a is not supported (yet), maybe font %s is bad",version,"cpal",fontdata.filename)
+ -- return
+ -- end
+ local nofpaletteentries = readushort(f)
+ local nofpalettes = readushort(f)
+ local nofcolorrecords = readushort(f)
+ local firstcoloroffset = readulong(f)
+ local colorrecords = { }
+ local palettes = { }
+ for i=1,nofpalettes do
+ palettes[i] = readushort(f)
+ end
+ if version == 1 then
+ -- used for guis
+ local palettettypesoffset = readulong(f)
+ local palettelabelsoffset = readulong(f)
+ local paletteentryoffset = readulong(f)
+ end
+ setposition(f,tableoffset+firstcoloroffset)
+ for i=1,nofcolorrecords do
+ local b, g, r, a = readbytes(f,4)
+ colorrecords[i] = {
+ r, g, b, a ~= 255 and a or nil,
+ }
+ end
+ for i=1,nofpalettes do
+ local p = { }
+ local o = palettes[i]
+ for j=1,nofpaletteentries do
+ p[j] = colorrecords[o+j]
end
- if variants ~= 0 then
- readmathvariants(f,fontdata,tableoffset+variants)
+ palettes[i] = p
+ end
+ fontdata.colorpalettes = palettes
+ end
+end
+
+function readers.svg(f,fontdata,specification)
+ local tableoffset = gotodatatable(f,fontdata,"svg",specification.glyphs)
+ if tableoffset then
+ local version = readushort(f)
+ -- if version ~= 0 then
+ -- report("table version %a of %a is not supported (yet), maybe font %s is bad",version,"svg",fontdata.filename)
+ -- return
+ -- end
+ local glyphs = fontdata.glyphs
+ local indexoffset = tableoffset + readulong(f)
+ local reserved = readulong(f)
+ setposition(f,indexoffset)
+ local nofentries = readushort(f)
+ local entries = { }
+ for i=1,nofentries do
+ entries[i] = {
+ first = readushort(f),
+ last = readushort(f),
+ offset = indexoffset + readulong(f),
+ length = readulong(f),
+ }
+ end
+ for i=1,nofentries do
+ local entry = entries[i]
+ setposition(f,entry.offset)
+ entries[i] = {
+ first = entry.first,
+ last = entry.last,
+ data = readstring(f,entry.length)
+ }
+ end
+ fontdata.svgshapes = entries
+ end
+ fontdata.hascolor = true
+end
+
+function readers.sbix(f,fontdata,specification)
+ local tableoffset = gotodatatable(f,fontdata,"sbix",specification.glyphs)
+ if tableoffset then
+ local version = readushort(f)
+ local flags = readushort(f)
+ local nofstrikes = readulong(f)
+ local strikes = { }
+ local nofglyphs = fontdata.nofglyphs
+ for i=1,nofstrikes do
+ strikes[i] = readulong(f)
+ end
+ -- if true then
+ local shapes = { }
+ local done = 0
+ for i=1,nofstrikes do
+ local strikeoffset = strikes[i] + tableoffset
+ setposition(f,strikeoffset)
+ strikes[i] = {
+ ppem = readushort(f),
+ ppi = readushort(f),
+ offset = strikeoffset
+ }
+ end
+ -- highest first
+ sort(strikes,function(a,b)
+ if b.ppem == a.ppem then
+ return b.ppi < a.ppi
+ else
+ return b.ppem < a.ppem
+ end
+ end)
+ local glyphs = { }
+ for i=1,nofstrikes do
+ local strike = strikes[i]
+ local strikeppem = strike.ppem
+ local strikeppi = strike.ppi
+ local strikeoffset = strike.offset
+ setposition(f,strikeoffset)
+ for i=0,nofglyphs do
+ glyphs[i] = readulong(f)
+ end
+ local glyphoffset = glyphs[0]
+ for i=0,nofglyphs-1 do
+ local nextoffset = glyphs[i+1]
+ if not shapes[i] then
+ local datasize = nextoffset - glyphoffset
+ if datasize > 0 then
+ setposition(f,strikeoffset + glyphoffset)
+ shapes[i] = {
+ x = readshort(f),
+ y = readshort(f),
+ tag = readtag(f), -- maybe for tracing
+ data = readstring(f,datasize-8),
+ ppem = strikeppem, -- not used, for tracing
+ ppi = strikeppi, -- not used, for tracing
+ }
+ done = done + 1
+ if done == nofglyphs then
+ break
+ end
+ end
+ end
+ glyphoffset = nextoffset
+ end
+ end
+ fontdata.sbixshapes = shapes
+ -- else
+ -- for i=1,nofstrikes do
+ -- local strikeoffset = strikes[i] + tableoffset
+ -- setposition(f,strikeoffset)
+ -- local glyphs = { }
+ -- strikes[i] = {
+ -- ppem = readushort(f),
+ -- ppi = readushort(f),
+ -- glyphs = glyphs,
+ -- }
+ -- for i=0,nofglyphs do
+ -- glyphs[i] = readulong(f)
+ -- end
+ -- local glyphoffset = glyphs[0]
+ -- for i=0,nofglyphs-1 do
+ -- local nextoffset = glyphs[i+1]
+ -- local datasize = nextoffset - glyphoffset
+ -- if datasize > 0 then
+ -- setposition(f,strikeoffset + glyphoffset)
+ -- glyphs[i] = {
+ -- x = readshort(f),
+ -- y = readshort(f),
+ -- tag = readtag(f),
+ -- data = readstring(f,datasize-8)
+ -- }
+ -- glyphoffset = nextoffset
+ -- end
+ -- end
+ -- end
+ -- fontdata.sbixshapes = strikes
+ -- end
+ end
+end
+
+-- function readers.cblc(f,fontdata,specification)
+-- local tableoffset = gotodatatable(f,fontdata,"cblc",specification.glyphs)
+-- if tableoffset then
+-- end
+-- end
+--
+-- function readers.cbdt(f,fontdata,specification)
+-- local tableoffset = gotodatatable(f,fontdata,"ctdt",specification.glyphs)
+-- if tableoffset then
+--
+-- local function getmetrics(f)
+-- return {
+-- ascender = readinteger(f),
+-- descender = readinteger(f),
+-- widthmax = readcardinal(f),
+-- caretslopedumerator = readinteger(f),
+-- caretslopedenominator = readinteger(f),
+-- caretoffset = readinteger(f),
+-- minorigin = readinteger(f),
+-- minadvance = readinteger(f),
+-- maxbefore = readinteger(f),
+-- minafter = readinteger(f),
+-- pad1 = readinteger(f),
+-- pad2 = readinteger(f),
+-- }
+-- end
+--
+-- local majorversion = readushort(f)
+-- local minorversion = readushort(f)
+-- local nofsizetables = readulong(f)
+-- local sizetable = { }
+-- for i=1,nofsizetables do
+-- sizetable[i] = {
+-- subtables = readulong(f),
+-- indexsize = readulong(f),
+-- nofsubtables = readulong(f),
+-- colorref = readulong(f),
+-- hormetrics = getmetrics(f),
+-- vermetrics = getmetrics(f),
+-- firstindex = readushort(f),
+-- lastindex = readushort(f),
+-- ppemx = readbyte(f),
+-- ppemy = readbyte(f),
+-- bitdepth = readbyte(f),
+-- flags = readbyte(f),
+-- }
+-- end
+--
+-- sort(sizetable,function(a,b)
+-- if b.ppemx == a.ppemx then
+-- return b.bitdepth < a.bitdepth
+-- else
+-- return b.ppemx < a.ppemx
+-- end
+-- end)
+--
+-- local shapes = { }
+--
+-- for i=1,nofsizetables do
+-- local s = sizetables[i]
+-- for j=firstindex,lastindex do
+-- if not shapes[j] then
+-- shapes[j] = {
+-- i
+-- }
+-- end
+-- end
+-- end
+--
+-- inspect(shapes)
+--
+-- end
+-- end
+
+-- function readers.ebdt(f,fontdata,specification)
+-- if specification.glyphs then
+-- end
+-- end
+
+-- function readers.ebsc(f,fontdata,specification)
+-- if specification.glyphs then
+-- end
+-- end
+
+-- function readers.eblc(f,fontdata,specification)
+-- if specification.glyphs then
+-- end
+-- end
+
+-- + AVAR : optional
+-- + CFF2 : otf outlines
+-- - CVAR : ttf hinting, not needed
+-- + FVAR : the variations
+-- + GVAR : ttf outline changes
+-- + HVAR : horizontal changes
+-- + MVAR : metric changes
+-- + STAT : relations within fonts
+-- * VVAR : vertical changes
+--
+-- * BASE : extra baseline adjustments
+-- - GASP : not needed
+-- + GDEF : not needed (carets)
+-- + GPOS : adapted device tables (needed?)
+-- + GSUB : new table
+-- + NAME : 25 added
+
+function readers.stat(f,fontdata,specification)
+ local tableoffset = gotodatatable(f,fontdata,"stat",true) -- specification.variable
+ if tableoffset then
+ local extras = fontdata.extras
+ local version = readulong(f) -- 0x00010000
+ local axissize = readushort(f)
+ local nofaxis = readushort(f)
+ local axisoffset = readulong(f)
+ local nofvalues = readushort(f)
+ local valuesoffset = readulong(f)
+ local fallbackname = extras[readushort(f)] -- beta fonts mess up
+ local axis = { }
+ local values = { }
+ setposition(f,tableoffset+axisoffset)
+ for i=1,nofaxis do
+ axis[i] = {
+ tag = readtag(f),
+ name = lower(extras[readushort(f)]),
+ ordering = readushort(f), -- maybe gaps
+ variants = { }
+ }
+ end
+ -- flags:
+ --
+ -- 0x0001 : OlderSiblingFontAttribute
+ -- 0x0002 : ElidableAxisValueName
+ -- 0xFFFC : reservedFlags
+ --
+ setposition(f,tableoffset+valuesoffset)
+ for i=1,nofvalues do
+ values[i] = readushort(f)
+ end
+ for i=1,nofvalues do
+ setposition(f,tableoffset + valuesoffset + values[i])
+ local format = readushort(f)
+ local index = readushort(f) + 1
+ local flags = readushort(f)
+ local name = lower(extras[readushort(f)])
+ local value = readfixed(f)
+ local variant
+ if format == 1 then
+ variant = {
+ flags = flags,
+ name = name,
+ value = value,
+ }
+ elseif format == 2 then
+ variant = {
+ flags = flags,
+ name = name,
+ value = value,
+ minimum = readfixed(f),
+ maximum = readfixed(f),
+ }
+ elseif format == 3 then
+ variant = {
+ flags = flags,
+ name = name,
+ value = value,
+ link = readfixed(f),
+ }
+ end
+ insert(axis[index].variants,variant)
+ end
+ sort(axis,function(a,b)
+ return a.ordering < b.ordering
+ end)
+ for i=1,#axis do
+ local a = axis[i]
+ sort(a.variants,function(a,b)
+ return a.name < b.name
+ end)
+ a.ordering = nil
+ end
+ setvariabledata(fontdata,"designaxis",axis)
+ setvariabledata(fontdata,"fallbackname",fallbackname)
+ end
+end
+
+-- The avar table is optional and used in combination with fvar. Given the
+-- detailed explanation about bad values we expect the worst and do some
+-- checking.
+
+function readers.avar(f,fontdata,specification)
+ local tableoffset = gotodatatable(f,fontdata,"avar",true) -- specification.variable
+ if tableoffset then
+
+ local function collect()
+ local nofvalues = readushort(f)
+ local values = { }
+ local lastfrom = false
+ local lastto = false
+ for i=1,nofvalues do
+ local f, t = read2dot14(f), read2dot14(f)
+ if lastfrom and f <= lastfrom then
+ -- ignore
+ elseif lastto and t >= lastto then
+ -- ignore
+ else
+ values[#values+1] = { f, t }
+ lastfrom, lastto = f, t
+ end
+ end
+ nofvalues = #values
+ if nofvalues > 2 then
+ local some = values[1]
+ if some[1] == -1 and some[2] == -1 then
+ some = values[nofvalues]
+ if some[1] == 1 and some[2] == 1 then
+ for i=2,nofvalues-1 do
+ some = values[i]
+ if some[1] == 0 and some[2] == 0 then
+ return values
+ end
+ end
+ end
+ end
+ end
+ return false
+ end
+
+ local majorversion = readushort(f) -- 1
+ local minorversion = readushort(f) -- 0
+ local reserved = readushort(f)
+ local nofaxis = readushort(f)
+ local segments = { }
+ for i=1,nofaxis do
+ segments[i] = collect()
+ end
+ setvariabledata(fontdata,"segments",segments)
+ end
+end
+
+function readers.fvar(f,fontdata,specification)
+ local tableoffset = gotodatatable(f,fontdata,"fvar",true) -- specification.variable or specification.instancenames
+ if tableoffset then
+ local version = readulong(f) -- 1.0
+ local offsettoaxis = tableoffset + readushort(f)
+ local reserved = skipshort(f)
+ -- pair 1
+ local nofaxis = readushort(f)
+ local sizeofaxis = readushort(f)
+ -- pair 2
+ local nofinstances = readushort(f)
+ local sizeofinstances = readushort(f)
+ --
+ local extras = fontdata.extras
+ local axis = { }
+ local instances = { }
+ --
+ setposition(f,offsettoaxis)
+ --
+ for i=1,nofaxis do
+ axis[i] = {
+ tag = readtag(f), -- ital opsz slnt wdth wght
+ minimum = readfixed(f),
+ default = readfixed(f),
+ maximum = readfixed(f),
+ flags = readushort(f),
+ name = lower(extras[readushort(f)] or "bad name"),
+ }
+ local n = sizeofaxis - 20
+ if n > 0 then
+ skipbytes(f,n)
+ elseif n < 0 then
+ -- error
+ end
+ end
+ --
+ local nofbytes = 2 + 2 + 2 + nofaxis * 4
+ local readpsname = nofbytes <= sizeofinstances
+ local skippable = sizeofinstances - nofbytes
+ for i=1,nofinstances do
+ local subfamid = readushort(f)
+ local flags = readushort(f) -- 0, not used yet
+ local values = { }
+ for i=1,nofaxis do
+ values[i] = {
+ axis = axis[i].tag,
+ value = readfixed(f),
+ }
+ end
+ local psnameid = readpsname and readushort(f) or 0xFFFF
+ if subfamid == 2 or subfamid == 17 then
+ -- okay
+ elseif subfamid == 0xFFFF then
+ subfamid = nil
+ elseif subfamid <= 256 or subfamid >= 32768 then
+ subfamid = nil -- actually an error
+ end
+ if psnameid == 6 then
+ -- okay
+ elseif psnameid == 0xFFFF then
+ psnameid = nil
+ elseif psnameid <= 256 or psnameid >= 32768 then
+ psnameid = nil -- actually an error
+ end
+ instances[i] = {
+ -- flags = flags,
+ subfamily = extras[subfamid],
+ psname = psnameid and extras[psnameid] or nil,
+ values = values,
+ }
+ if skippable > 0 then
+ skipbytes(f,skippable)
+ end
+ end
+ setvariabledata(fontdata,"axis",axis)
+ setvariabledata(fontdata,"instances",instances)
+ end
+end
+
+function readers.hvar(f,fontdata,specification)
+ local factors = specification.factors
+ if not factors then
+ return
+ end
+ local tableoffset = gotodatatable(f,fontdata,"hvar",specification.variable)
+ if not tableoffset then
+ return
+ end
+
+ local version = readulong(f) -- 1.0
+ local variationoffset = tableoffset + readulong(f) -- the store
+ local advanceoffset = tableoffset + readulong(f)
+ local lsboffset = tableoffset + readulong(f)
+ local rsboffset = tableoffset + readulong(f)
+
+ local regions = { }
+ local variations = { }
+ local innerindex = { } -- size is mapcount
+ local outerindex = { } -- size is mapcount
+
+ if variationoffset > 0 then
+ regions, deltas = readvariationdata(f,variationoffset,factors)
+ end
+
+ if not regions then
+ -- for now .. what to do ?
+ return
+ end
+
+ if advanceoffset > 0 then
+ --
+ -- innerIndexBitCountMask = 0x000F
+ -- mapEntrySizeMask = 0x0030
+ -- reservedFlags = 0xFFC0
+ --
+ -- outerIndex = entry >> ((entryFormat & innerIndexBitCountMask) + 1)
+ -- innerIndex = entry & ((1 << ((entryFormat & innerIndexBitCountMask) + 1)) - 1)
+ --
+ setposition(f,advanceoffset)
+ local format = readushort(f) -- todo: check
+ local mapcount = readushort(f)
+ local entrysize = rshift(band(format,0x0030),4) + 1
+ local nofinnerbits = band(format,0x000F) + 1 -- n of inner bits
+ local innermask = lshift(1,nofinnerbits) - 1
+ local readcardinal = read_cardinal[entrysize] -- 1 upto 4 bytes
+ for i=0,mapcount-1 do
+ local mapdata = readcardinal(f)
+ outerindex[i] = rshift(mapdata,nofinnerbits)
+ innerindex[i] = band(mapdata,innermask)
+ end
+ -- use last entry when no match i
+ setvariabledata(fontdata,"hvarwidths",true)
+ local glyphs = fontdata.glyphs
+ for i=0,fontdata.nofglyphs-1 do
+ local glyph = glyphs[i]
+ local width = glyph.width
+ if width then
+ local outer = outerindex[i] or 0
+ local inner = innerindex[i] or i
+ if outer and inner then -- not needed
+ local delta = deltas[outer+1]
+ if delta then
+ local d = delta.deltas[inner+1]
+ if d then
+ local scales = delta.scales
+ local deltaw = 0
+ for i=1,#scales do
+ local di = d[i]
+ if di then
+ deltaw = deltaw + scales[i] * di
+ else
+ break -- can't happen
+ end
+ end
+-- report("index: %i, outer: %i, inner: %i, deltas: %|t, scales: %|t, width: %i, delta %i",
+-- i,outer,inner,d,scales,width,round(deltaw))
+ glyph.width = width + round(deltaw)
+ end
+ end
+ end
+ end
+ end
+
+ end
+
+ -- if lsboffset > 0 then
+ -- -- we don't use left side bearings
+ -- end
+
+ -- if rsboffset > 0 then
+ -- -- we don't use right side bearings
+ -- end
+
+ -- setvariabledata(fontdata,"hregions",regions)
+
+end
+
+function readers.vvar(f,fontdata,specification)
+ if not specification.variable then
+ return
+ end
+end
+
+function readers.mvar(f,fontdata,specification)
+ local tableoffset = gotodatatable(f,fontdata,"mvar",specification.variable)
+ if tableoffset then
+ local version = readulong(f) -- 1.0
+ local reserved = skipshort(f,1)
+ local recordsize = readushort(f)
+ local nofrecords = readushort(f)
+ local offsettostore = tableoffset + readushort(f)
+ local dimensions = { }
+ local factors = specification.factors
+ if factors then
+ local regions, deltas = readvariationdata(f,offsettostore,factors)
+ for i=1,nofrecords do
+ local tag = readtag(f)
+ local var = variabletags[tag]
+ if var then
+ local outer = readushort(f)
+ local inner = readushort(f)
+ local delta = deltas[outer+1]
+ if delta then
+ local d = delta.deltas[inner+1]
+ if d then
+ local scales = delta.scales
+ local dd = 0
+ for i=1,#scales do
+ dd = dd + scales[i] * d[i]
+ end
+ var(fontdata,round(dd))
+ end
+ end
+ else
+ skipshort(f,2)
+ end
+ if recordsize > 8 then -- 4 + 2 + 2
+ skipbytes(recordsize-8)
+ end
end
end
+ -- setvariabledata(fontdata,"mregions",regions)
end
end
diff --git a/tex/context/base/mkiv/font-enc.lua b/tex/context/base/mkiv/font-enc.lua
index 2e8b722de..1470f3b8d 100644
--- a/tex/context/base/mkiv/font-enc.lua
+++ b/tex/context/base/mkiv/font-enc.lua
@@ -20,7 +20,7 @@ them in tables. But we may do so some day, for consistency.</p>
local report_encoding = logs.reporter("fonts","encoding")
-local encodings = { }
+local encodings = fonts.encodings or { }
fonts.encodings = encodings
encodings.version = 1.03
@@ -78,22 +78,32 @@ function encodings.load(filename)
if foundname and foundname ~= "" then
local ok, encoding, size = resolvers.loadbinfile(foundname)
if ok and encoding then
- encoding = gsub(encoding,"%%(.-)\n","")
- local tag, vec = match(encoding,"/(%w+)%s*%[(.*)%]%s*def")
- local i = 0
- for ch in gmatch(vec,"/([%a%d%.]+)") do
- if ch ~= ".notdef" then
- vector[i] = ch
- if not hash[ch] then
- hash[ch] = i
- else
- -- duplicate, play safe for tex ligs and take first
- end
- if enccodes[ch] then
- unicodes[enccodes[ch]] = i
+ encoding = gsub(encoding,"%%(.-)[\n\r]+","")
+ if encoding then
+ local unicoding = fonts.encodings.agl.unicodes
+ local tag, vec = match(encoding,"[/]*(%w+)%s*%[(.*)%]%s*def")
+ if vec then
+ local i = 0
+ for ch in gmatch(vec,"/([%a%d%.]+)") do
+ if ch ~= ".notdef" then
+ vector[i] = ch
+ if not hash[ch] then
+ hash[ch] = i
+ else
+ -- duplicate, play safe for tex ligs and take first
+ end
+ local u = unicoding[ch] or enccodes[ch] -- enccodes have also context names
+ if u then
+ unicodes[u] = i
+ end
+ end
+ i = i + 1
end
+ else
+ report_encoding("reading vector in encoding file %a fails",filename)
end
- i = i + 1
+ else
+ report_encoding("reading encoding file %a fails",filename)
end
end
end
diff --git a/tex/context/base/mkiv/font-enh.lua b/tex/context/base/mkiv/font-enh.lua
index f3209f5ee..b1fcd9be8 100644
--- a/tex/context/base/mkiv/font-enh.lua
+++ b/tex/context/base/mkiv/font-enh.lua
@@ -18,13 +18,12 @@ local report_unicoding = logs.reporter("fonts","unicoding")
local fonts = fonts
local constructors = fonts.constructors
-local tfmfeatures = constructors.newfeatures("tfm")
-local registertfmfeature = tfmfeatures.register
+----- tfmfeatures = constructors.features.tfm
+local afmfeatures = constructors.features.afm
+local otffeatures = constructors.features.otf
-local afmfeatures = fonts.constructors.newfeatures("afm")
+----- registertfmfeature = tfmfeatures.register
local registerafmfeature = afmfeatures.register
-
-local otffeatures = fonts.constructors.newfeatures("otf")
local registerotffeature = otffeatures.register
-- -- these will become goodies (when needed at all)
@@ -119,19 +118,16 @@ local registerotffeature = otffeatures.register
local function initializeunicoding(tfmdata)
local goodies = tfmdata.goodies
local newcoding = nil
- -- local tounicode = false
for i=1,#goodies do
local remapping = goodies[i].remapping
if remapping and remapping.unicodes then
newcoding = remapping.unicodes -- names to unicodes
- -- tounicode = remapping.tounicode -- not used
end
end
if newcoding then
local characters = tfmdata.characters
local descriptions = tfmdata.descriptions
local oldcoding = tfmdata.resources.unicodes
- -- local tounicodes = tfmdata.resources.tounicode -- index to unicode
local originals = { }
for name, newcode in next, newcoding do
local oldcode = oldcoding[name]
@@ -143,25 +139,21 @@ local function initializeunicoding(tfmdata)
end
if oldcode then
local original = originals[oldcode]
+ local character, description
if original then
- characters [newcode] = original.character
- descriptions[newcode] = original.description
+ character = original.character
+ description = original.description
else
- characters [newcode] = characters [oldcode]
- descriptions[newcode] = descriptions[oldcode]
+ character = characters [oldcode]
+ description = descriptions[oldcode]
end
+ characters [newcode] = character
+ descriptions[newcode] = description
+ character .unicode = newcode
+ description.unicode = newcode
else
oldcoding[name] = newcode
end
- -- if tounicode then
- -- local description = descriptions[newcode]
- -- if description then
- -- local index = description.index
- -- if not tounicodes[index] then
- -- tounicodes[index] = tosixteen(newcode) -- shared (we could have a metatable)
- -- end
- -- end
- -- end
if trace_unicoding then
if oldcode then
report_unicoding("aliasing glyph %a from %U to %U",name,oldcode,newcode)
diff --git a/tex/context/base/mkiv/font-ext.lua b/tex/context/base/mkiv/font-ext.lua
index 98ad9e09e..6edfe7025 100644
--- a/tex/context/base/mkiv/font-ext.lua
+++ b/tex/context/base/mkiv/font-ext.lua
@@ -6,8 +6,10 @@ if not modules then modules = { } end modules ['font-ext'] = {
license = "see context related readme files"
}
-local next, type, byte = next, type, string.byte
-local utfbyte = utf.byte
+local next, type, tonumber = next, type, tonumber
+local formatters = string.formatters
+local byte = string.byte
+local utfchar = utf.char
local context = context
local fonts = fonts
@@ -18,7 +20,6 @@ local trace_expansion = false trackers.register("fonts.expansion", function
local report_expansions = logs.reporter("fonts","expansions")
local report_protrusions = logs.reporter("fonts","protrusions")
-local report_opbd = logs.reporter("fonts","otf opbd")
--[[ldx--
<p>When we implement functions that deal with features, most of them
@@ -34,10 +35,13 @@ local registerotffeature = handlers.otf.features.register
local registerafmfeature = handlers.afm.features.register
local fontdata = hashes.identifiers
+local fontproperties = hashes.properties
local allocate = utilities.storage.allocate
local settings_to_array = utilities.parsers.settings_to_array
local getparameters = utilities.parsers.getparameters
+local gettexdimen = tex.getdimen
+local family_font = node.family_font
local setmetatableindex = table.setmetatableindex
@@ -77,6 +81,8 @@ expansions.classes = classes
expansions.vectors = vectors
-- beware, pdftex itself uses percentages * 10
+--
+-- todo: get rid of byte() here
classes.preset = { stretch = 2, shrink = 2, step = .5, factor = 1 }
@@ -286,12 +292,11 @@ vectors['quality'] = table.merged(
vectors['alpha']
)
--- As this is experimental code, users should not depend on it. The
--- implications are still discussed on the ConTeXt Dev List and we're
--- not sure yet what exactly the spec is (the next code is tested with
--- a gyre font patched by / fea file made by Khaled Hosny). The double
--- trick should not be needed it proper hanging punctuation is used in
--- which case values < 1 can be used.
+-- As this is experimental code, users should not depend on it. The implications are still
+-- discussed on the ConTeXt Dev List and we're not sure yet what exactly the spec is (the
+-- next code is tested with a gyre font patched by / fea file made by Khaled Hosny). The
+-- double trick should not be needed it proper hanging punctuation is used in which case
+-- values < 1 can be used.
--
-- preferred (in context, usine vectors):
--
@@ -339,17 +344,23 @@ local function map_opbd_onto_protrusion(tfmdata,value,opbd)
if validlookups then
for i=1,#lookuplist do
local lookup = lookuplist[i]
- local data = lookuphash[lookup]
- if data then
+ local steps = lookup.steps
+ if steps then
if trace_protrusion then
- report_protrusions("setting left using lfbd lookup %a",lookuptags[lookup])
+ report_protrusions("setting left using lfbd")
end
- for k, v in next, data do
- -- local p = - v[3] / descriptions[k].width-- or 1 ~= 0 too but the same
- local p = - (v[1] / 1000) * factor * left
- characters[k].left_protruding = p
- if trace_protrusion then
- report_protrusions("lfbd -> %s -> %C -> %0.03f (% t)",lookuptags[lookup],k,p,v)
+ for i=1,#steps do
+ local step = steps[i]
+ local coverage = step.coverage
+ if coverage then
+ for k, v in next, coverage do
+ -- local p = - v[3] / descriptions[k].width-- or 1 ~= 0 too but the same
+ local p = - (v[1] / 1000) * factor * left
+ characters[k].left_protruding = p
+ if trace_protrusion then
+ report_protrusions("lfbd -> %C -> %p",k,p)
+ end
+ end
end
end
done = true
@@ -362,17 +373,23 @@ local function map_opbd_onto_protrusion(tfmdata,value,opbd)
if validlookups then
for i=1,#lookuplist do
local lookup = lookuplist[i]
- local data = lookuphash[lookup]
- if data then
+ local steps = lookup.steps
+ if steps then
if trace_protrusion then
- report_protrusions("setting right using rtbd lookup %a",lookuptags[lookup])
+ report_protrusions("setting right using rtbd")
end
- for k, v in next, data do
- -- local p = v[3] / descriptions[k].width -- or 3
- local p = (v[1] / 1000) * factor * right
- characters[k].right_protruding = p
- if trace_protrusion then
- report_protrusions("rtbd -> %s -> %C -> %0.03f (% t)",lookuptags[lookup],k,p,v)
+ for i=1,#steps do
+ local step = steps[i]
+ local coverage = step.coverage
+ if coverage then
+ for k, v in next, coverage do
+ -- local p = v[3] / descriptions[k].width -- or 3
+ local p = (v[1] / 1000) * factor * right
+ characters[k].right_protruding = p
+ if trace_protrusion then
+ report_protrusions("rtbd -> %C -> %p",k,p)
+ end
+ end
end
end
end
@@ -391,10 +408,9 @@ local function map_opbd_onto_protrusion(tfmdata,value,opbd)
end
end
--- The opbd test is just there because it was discussed on the
--- context development list. However, the mentioned fxlbi.otf font
--- only has some kerns for digits. So, consider this feature not
--- supported till we have a proper test font.
+-- The opbd test is just there because it was discussed on the context development list. However,
+-- the mentioned fxlbi.otf font only has some kerns for digits. So, consider this feature not supported
+-- till we have a proper test font.
local function initializeprotrusion(tfmdata,value)
if value then
@@ -550,10 +566,10 @@ local textitalics_specification = {
registerotffeature(textitalics_specification)
registerafmfeature(textitalics_specification)
-local function initializemathitalics(tfmdata,value) -- yes no delay
- tfmdata.properties.mathitalics = toboolean(value)
-end
-
+-- local function initializemathitalics(tfmdata,value) -- yes no delay
+-- tfmdata.properties.mathitalics = toboolean(value)
+-- end
+--
-- local mathitalics_specification = {
-- name = "mathitalics",
-- description = "use alternative math italic correction",
@@ -627,12 +643,20 @@ local function manipulatedimensions(tfmdata,key,value)
if type(value) == "string" and value ~= "" then
local characters = tfmdata.characters
local parameters = tfmdata.parameters
- local emwidth = parameters.quad
- local exheight = parameters.xheight
- local spec = settings_to_array(value)
- local width = (spec[1] or 0) * emwidth
- local height = (spec[2] or 0) * exheight
- local depth = (spec[3] or 0) * exheight
+ local emwidth = parameters.quad
+ local exheight = parameters.xheight
+ local width = 0
+ local height = 0
+ local depth = 0
+ if value == "strut" then
+ height = gettexdimen("strutht")
+ depth = gettexdimen("strutdp")
+ else
+ local spec = settings_to_array(value)
+ width = (spec[1] or 0) * emwidth
+ height = (spec[2] or 0) * exheight
+ depth = (spec[3] or 0) * exheight
+ end
if width > 0 then
local resources = tfmdata.resources
local additions = { }
@@ -689,7 +713,7 @@ local function manipulatedimensions(tfmdata,key,value)
elseif height > 0 and depth > 0 then
for unicode, old_c in next, characters do
old_c.height = height
- old_c.depth = depth
+ old_c.depth = depth
end
elseif height > 0 then
for unicode, old_c in next, characters do
@@ -823,6 +847,8 @@ registerotffeature {
--
-- local v_local = interfaces and interfaces.variables and interfaces.variables["local"] or "local"
--
+-- local utfbyte = utf.byte
+--
-- local function initialize(tfmdata,key,value)
-- local characters = tfmdata.characters
-- local parameters = tfmdata.parameters
@@ -966,74 +992,307 @@ registerafmfeature(dimensions_specification)
-- a handy helper (might change or be moved to another namespace)
-local nodepool = nodes.pool
+local nodepool = nodes.pool
+local new_glyph = nodepool.glyph
-local new_special = nodepool.special
-local new_glyph = nodepool.glyph
-local new_rule = nodepool.rule
-local hpack_node = node.hpack
+local helpers = fonts.helpers
+local currentfont = font.current
-local helpers = fonts.helpers
-local currentfont = font.current
+local currentprivate = 0xE000
+local maximumprivate = 0xEFFF
-function helpers.addprivate(tfmdata,name,characterdata)
- local properties = tfmdata.properties
- local privates = properties.privates
- local lastprivate = properties.lastprivate
- if lastprivate then
- lastprivate = lastprivate + 1
+-- if we run out of space we can think of another range but by sharing we can
+-- use these privates for mechanisms like alignments-on-character and such
+
+local sharedprivates = setmetatableindex(function(t,k)
+ v = currentprivate
+ if currentprivate < maximumprivate then
+ currentprivate = currentprivate + 1
else
- lastprivate = 0xE000
+ -- reuse last slot, todo: warning
end
+ t[k] = v
+ return v
+end)
+
+function helpers.addprivate(tfmdata,name,characterdata)
+ local properties = tfmdata.properties
+ local characters = tfmdata.characters
+ local privates = properties.privates
if not privates then
privates = { }
properties.privates = privates
end
- if name then
- privates[name] = lastprivate
+ if not name then
+ name = formatters["anonymous_private_0x%05X"](currentprivate)
end
- properties.lastprivate = lastprivate
- tfmdata.characters[lastprivate] = characterdata
- if properties.finalized then
- properties.lateprivates = true
+ local usedprivate = sharedprivates[name]
+ privates[name] = usedprivate
+ characters[usedprivate] = characterdata
+ return usedprivate
+end
+
+local function getprivateslot(id,name)
+ if not name then
+ name = id
+ id = currentfont()
end
- return lastprivate
+ local properties = fontproperties[id]
+ local privates = properties and properties.privates
+ return privates and privates[name]
end
local function getprivatenode(tfmdata,name)
+ if type(tfmdata) == "number" then
+ tfmdata = fontdata[tfmdata]
+ end
local properties = tfmdata.properties
- local privates = properties and properties.privates
- if privates then
- local p = privates[name]
- if p then
- local char = tfmdata.characters[p]
- local commands = char.commands
- if commands then
- local fake = hpack_node(new_special(commands[1][2]))
- fake.width = char.width
- fake.height = char.height
- fake.depth = char.depth
- return fake
- else
- -- todo: set current attribibutes
- return new_glyph(properties.id,p)
- end
+ local font = properties.id
+ local slot = getprivateslot(font,name)
+ if slot then
+ -- todo: set current attribibutes
+ local char = tfmdata.characters[slot]
+ local tonode = char.tonode
+ if tonode then
+ return tonode(font,char)
+ else
+ return new_glyph(font,slot)
end
end
end
-helpers.getprivatenode = getprivatenode
+local function getprivatecharornode(tfmdata,name)
+ if type(tfmdata) == "number" then
+ tfmdata = fontdata[tfmdata]
+ end
+ local properties = tfmdata.properties
+ local font = properties.id
+ local slot = getprivateslot(font,name)
+ if slot then
+ -- todo: set current attribibutes
+ local char = tfmdata.characters[slot]
+ local tonode = char.tonode
+ if tonode then
+ return "node", tonode(tfmdata,char)
+ else
+ return "char", slot
+ end
+ end
+end
+
+helpers.getprivateslot = getprivateslot
+helpers.getprivatenode = getprivatenode
+helpers.getprivatecharornode = getprivatecharornode
+
+function helpers.getprivates(tfmdata)
+ if type(tfmdata) == "number" then
+ tfmdata = fontdata[tfmdata]
+ end
+ local properties = tfmdata.properties
+ return properties and properties.privates
+end
function helpers.hasprivate(tfmdata,name)
+ if type(tfmdata) == "number" then
+ tfmdata = fontdata[tfmdata]
+ end
local properties = tfmdata.properties
local privates = properties and properties.privates
return privates and privates[name] or false
end
+-- relatively new:
+
+do
+
+ local extraprivates = { }
+
+ function fonts.helpers.addextraprivate(name,f)
+ extraprivates[#extraprivates+1] = { name, f }
+ end
+
+ local function addextraprivates(tfmdata)
+ for i=1,#extraprivates do
+ local e = extraprivates[i]
+ local c = e[2](tfmdata)
+ if c then
+ fonts.helpers.addprivate(tfmdata, e[1], c)
+ end
+ end
+ end
+
+ fonts.constructors.newfeatures.otf.register {
+ name = "extraprivates",
+ description = "extra privates",
+ default = true,
+ manipulators = {
+ base = addextraprivates,
+ node = addextraprivates,
+ }
+ }
+
+end
+
implement {
name = "getprivatechar",
arguments = "string",
actions = function(name)
- context(getprivatenode(fontdata[currentfont()],name))
+ local p = getprivateslot(name)
+ if p then
+ context(utfchar(p))
+ end
+ end
+}
+
+implement {
+ name = "getprivatemathchar",
+ arguments = "string",
+ actions = function(name)
+ local p = getprivateslot(family_font(0),name)
+ if p then
+ context(utfchar(p))
+ end
+ end
+}
+
+implement {
+ name = "getprivateslot",
+ arguments = "string",
+ actions = function(name)
+ local p = getprivateslot(name)
+ if p then
+ context(p)
+ end
end
}
+
+-- requested for latex but not supported unless really needed in context:
+--
+-- registerotffeature {
+-- name = "ignoremathconstants",
+-- description = "ignore math constants table",
+-- initializers = {
+-- base = function(tfmdata,value)
+-- if value then
+-- tfmdata.mathparameters = nil
+-- end
+-- end
+-- }
+-- }
+
+-- tfmdata.properties.mathnolimitsmode = tonumber(value) or 0
+
+do
+
+ local splitter = lpeg.splitat(",",tonumber)
+ local lpegmatch = lpeg.match
+
+ local function initialize(tfmdata,value)
+ local mathparameters = tfmdata.mathparameters
+ if mathparameters then
+ local sup, sub
+ if type(value) == "string" then
+ sup, sub = lpegmatch(splitter,value)
+ if not sup then
+ sub, sup = 0, 0
+ elseif not sub then
+ sub, sup = sup, 0
+ end
+ elseif type(value) == "number" then
+ sup, sub = 0, value
+ end
+ mathparameters.NoLimitSupFactor = sup
+ mathparameters.NoLimitSubFactor = sub
+ end
+ end
+
+ registerotffeature {
+ name = "mathnolimitsmode",
+ description = "influence nolimits placement",
+ initializers = {
+ base = initialize,
+ node = initialize,
+ }
+ }
+
+end
+
+do
+
+ local function initialize(tfmdata,value)
+ local properties = tfmdata.properties
+ if properties then
+ properties.identity = value == "vertical" and "vertical" or "horizontal"
+ end
+ end
+
+ registerotffeature {
+ name = "identity",
+ description = "set font identity",
+ initializers = {
+ base = initialize,
+ node = initialize,
+ }
+ }
+
+ local function initialize(tfmdata,value)
+ local properties = tfmdata.properties
+ if properties then
+ properties.writingmode = value == "vertical" and "vertical" or "horizontal"
+ end
+ end
+
+ registerotffeature {
+ name = "writingmode",
+ description = "set font direction",
+ initializers = {
+ base = initialize,
+ node = initialize,
+ }
+ }
+
+end
+
+do -- another hack for a crappy font
+
+ local function additalictowidth(tfmdata,key,value)
+ local characters = tfmdata.characters
+ local resources = tfmdata.resources
+ local additions = { }
+ local private = resources.private
+ for unicode, old_c in next, characters do
+ -- maybe check for math
+ local oldwidth = old_c.width
+ local olditalic = old_c.italic
+ if olditalic and olditalic ~= 0 then
+ private = private + 1
+ local new_c = {
+ width = oldwidth + olditalic,
+ height = old_c.height,
+ depth = old_c.depth,
+ commands = {
+ { "slot", 1, private },
+ { "right", olditalic },
+ },
+ }
+ setmetatableindex(new_c,old_c)
+ characters[unicode] = new_c
+ additions[private] = old_c
+ end
+ end
+ for k, v in next, additions do
+ characters[k] = v
+ end
+ resources.private = private
+ end
+
+ registerotffeature {
+ name = "italicwidths",
+ description = "add italic to width",
+ manipulators = {
+ base = additalictowidth,
+ -- node = additalictowidth, -- only makes sense for math
+ }
+ }
+
+end
diff --git a/tex/context/base/mkiv/font-fea.mkvi b/tex/context/base/mkiv/font-fea.mkvi
index dade70494..840b64e9c 100644
--- a/tex/context/base/mkiv/font-fea.mkvi
+++ b/tex/context/base/mkiv/font-fea.mkvi
@@ -125,6 +125,12 @@
\def\font_basics_define_font_feature[#featureset][#parent][#settings]%
{\clf_definefontfeature{#featureset}{#parent}{#settings}}
+\unexpanded\def\adaptfontfeature
+ {\dodoubleargument\font_basics_adapt_font_feature}
+
+\def\font_basics_adapt_font_feature[#pattern][#settings]%
+ {\clf_adaptfontfeature{#pattern}{#settings}}
+
\unexpanded\def\fontfeatureslist
{\dodoubleargument\font_basics_features_list}
@@ -284,6 +290,38 @@
\letvalue{\??featureyes\s!unknown}\empty
\letvalue{\??featurenop\s!unknown}\empty
+% experimental bonus:
+
+% \unexpanded\def\addfflanguage
+% {\ifnum\c_font_feature_state=\plusone
+% \ifx\currentlanguage\currentfeature\else
+% \font_feature_add_language_indeed
+% \fi
+% \else
+% \font_feature_add_language_indeed
+% \fi}
+%
+% \unexpanded\def\font_feature_add_language_indeed
+% {\clf_addfeature{\m_font_feature_list}{\currentlanguage}%
+% \edef\m_font_feature_list{\m_font_feature_list+\currentlanguage}% also + at the lua end
+% \c_font_feature_state\plusone
+% \let\currentfeature\currentlanguage}
+%
+% some 3% slower:
+
+% \unexpanded\def\addfflanguage
+% {\let\m_font_feature_asked\currentlanguage
+% \font_feature_add}
+
+\let\m_font_feature_language\currentlanguage
+
+\unexpanded\def\addfflanguage
+ {\ifx\currentlanguage\m_font_feature_language\else
+ \let\m_font_feature_language\currentlanguage
+ \let\m_font_feature_asked \currentlanguage
+ \font_feature_add
+ \fi}
+
% just for old times sake:
\unexpanded\def\featureattribute#feature%
@@ -353,4 +391,22 @@
0%
\endgroup}
+% not nice but maybe handy
+
+% \starttyping
+% \blockligatures[fi,ff] \blockligatures[fl]
+%
+% \definefontfeature[default:b][default][blockligatures=yes]
+%
+% \setupbodyfont[pagella] \showfontkerns
+%
+% \definedfont[Serif*default:b]
+%
+% \startTEXpage[offset=1em]
+% fi ff fl
+% \stopTEXpage
+% \stoptyping
+
+\unexpanded\def\blockligatures[#1]{\clf_blockligatures{#1}}
+
\protect \endinput
diff --git a/tex/context/base/mkiv/font-fil.mkvi b/tex/context/base/mkiv/font-fil.mkvi
index 0bfc07b6c..ba9d5e2c6 100644
--- a/tex/context/base/mkiv/font-fil.mkvi
+++ b/tex/context/base/mkiv/font-fil.mkvi
@@ -234,6 +234,24 @@
#name%
\fi\fi\fi}
+% ok when the last lookup is not stripped .. we ned to be able to define synonyms for symbols
+%
+% \def\truefontname#name%
+% %{\normalexpanded{\noexpand\font_helpers_true_fontname{\clf_truefontname{#name}}}}
+% {\expandafter\expandafter\expandafter\font_helpers_true_fontname\expandafter\expandafter\expandafter{\clf_truefontname{#name}}}
+%
+% \def\font_helpers_true_fontname#name%
+% {\ifcsname\??fontfile\fontclass#name\endcsname
+% \expandafter\font_helpers_true_fontname\expandafter{\lastnamedcs}%
+% \else\ifcsname\??fontfile\defaultfontclass#name\endcsname
+% \expandafter\font_helpers_true_fontname\expandafter{\lastnamedcs}%
+% \else\ifcsname\??fontfile#name\endcsname
+% \expandafter\font_helpers_true_fontname\expandafter{\lastnamedcs}%
+% \else
+% % \clf_truefontname{#name}%
+% #name% so the last one can have features !
+% \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}%
@@ -451,4 +469,8 @@
\setxvalue{\??fontclass\fontclass#style\s!designsize}{#designsize}%
\setxvalue{\??fontclass\fontclass#style\s!direction }{#direction}}
+% bonus
+
+\let\currentfontinstancespec\clf_currentfontinstancespec % expandable
+
\protect \endinput
diff --git a/tex/context/base/mkiv/font-gbn.lua b/tex/context/base/mkiv/font-gbn.lua
index a02406b75..1f8df642c 100644
--- a/tex/context/base/mkiv/font-gbn.lua
+++ b/tex/context/base/mkiv/font-gbn.lua
@@ -19,8 +19,7 @@ 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 flush_node = nuts.flush_node
local glyph_code = nodes.nodecodes.glyph
local disc_code = nodes.nodecodes.disc
@@ -160,7 +159,7 @@ function nodes.handlers.nodepass(head)
end
end
end
- free_node(r)
+ flush_node(r)
end
end
for d in traverse_id(disc_code,nuthead) do
diff --git a/tex/context/base/mkiv/font-hsh.lua b/tex/context/base/mkiv/font-hsh.lua
index efd042fe1..12f7bdfc2 100644
--- a/tex/context/base/mkiv/font-hsh.lua
+++ b/tex/context/base/mkiv/font-hsh.lua
@@ -31,6 +31,7 @@ local xheights = hashes.xheights or allocate()
local csnames = hashes.csnames or allocate() -- namedata
local features = hashes.features or allocate()
local marks = hashes.marks or allocate()
+local classes = hashes.classes or allocate()
local italics = hashes.italics or allocate()
local lastmathids = hashes.lastmathids or allocate()
local dynamics = hashes.dynamics or allocate()
@@ -51,6 +52,7 @@ hashes.xheights = xheights hashes.exheights = xheights
hashes.csnames = csnames
hashes.features = features
hashes.marks = marks
+hashes.classes = classes
hashes.italics = italics
hashes.lastmathids = lastmathids
hashes.dynamics = dynamics
@@ -212,12 +214,23 @@ setmetatableindex(marks, function(t,k)
return marks[currentfont()]
else
local resources = identifiers[k].resources or { }
- local marks = resources.marks or { }
+ local marks = resources.marks or { }
t[k] = marks
return marks
end
end)
+setmetatableindex(classes, function(t,k)
+ if k == true then
+ return classes[currentfont()]
+ else
+ local resources = identifiers[k].resources or { }
+ local classes = resources.classes or { }
+ t[k] = classes
+ return classes
+ end
+end)
+
setmetatableindex(quads, function(t,k)
if k == true then
return quads[currentfont()]
diff --git a/tex/context/base/mkiv/font-ini.lua b/tex/context/base/mkiv/font-ini.lua
index c547f89ac..abc319484 100644
--- a/tex/context/base/mkiv/font-ini.lua
+++ b/tex/context/base/mkiv/font-ini.lua
@@ -12,8 +12,6 @@ if not modules then modules = { } end modules ['font-ini'] = {
local allocate = utilities.storage.allocate
-local report_defining = logs.reporter("fonts","defining")
-
fonts = fonts or { }
local fonts = fonts
diff --git a/tex/context/base/mkiv/font-ini.mkvi b/tex/context/base/mkiv/font-ini.mkvi
index 7e5851b26..2697dff2e 100644
--- a/tex/context/base/mkiv/font-ini.mkvi
+++ b/tex/context/base/mkiv/font-ini.mkvi
@@ -647,25 +647,70 @@
\def\font_basics_check_math_bodyfont#style#alternative#size%
{}
+% \def\font_basics_check_text_bodyfont#style#alternative#size% size can be empty (checking needed as \bf is already defined)
+% {\setugvalue{#style#size}{\font_helpers_set_current_font_style_size{#style}{#size}}% \rma
+% \setugvalue{#alternative#size}{\font_helpers_set_current_font_alternative_size{#alternative}{#size}}% \sla
+% \setugvalue{#style#alternative#size}{\font_helpers_set_current_font_style_alternative_size{#style}{#alternative}{#size}}% \rmsla
+% \ifcsname\s!normal#style\endcsname % text/math check
+% \expandafter\let\csname#style\expandafter\endcsname\csname\s!normal#style\endcsname
+% \else
+% \setugvalue{#style}{\font_helpers_set_current_font_style{#style}}% \rm
+% \fi
+% \ifcsname\s!normal#alternative\endcsname % text/math check
+% \expandafter\let\csname#alternative\expandafter\endcsname\csname\s!normal#alternative\endcsname
+% \else
+% \setugvalue{#alternative}{\font_helpers_set_current_font_alternative{#alternative}}% \sl
+% \fi
+% \setugvalue{#style\s!x}{\font_helpers_set_current_font_x_style_alternative{#style}}% \rmx
+% \setugvalue{#style\s!xx}{\font_helpers_set_current_font_xx_style_alternative{#style}}% \rmxx
+% \setugvalue{#alternative\s!x}{\font_helpers_set_current_font_x_alternative{#alternative}}% \slx
+% \setugvalue{#alternative\s!xx}{\font_helpers_set_current_font_xx_alternative{#alternative}}% \slxx
+% \setugvalue{#style#alternative}{\font_helpers_set_current_font_style_alternative{#style}{#alternative}}}% \rmsl
+
+% \def\font_basics_check_text_bodyfont#style#alternative#size% size can be empty (checking needed as \bf is already defined)
+% {\ifcsname#style#size\endcsname\else
+% \setugvalue{#style#size}{\font_helpers_set_current_font_style_size{#style}{#size}}% \rma
+% \fi
+% \ifcsname#alternative#size\endcsname\else
+% \setugvalue{#alternative#size}{\font_helpers_set_current_font_alternative_size{#alternative}{#size}}% \sla
+% \fi
+% \ifcsname#style#alternative#size\endcsname\else
+% \setugvalue{#style#alternative#size}{\font_helpers_set_current_font_style_alternative_size{#style}{#alternative}{#size}}% \rmsla
+% \fi
+% \ifcsname#style\endcsname\else
+% \setugvalue{#style}{\font_helpers_set_current_font_style{#style}}% \rm
+% \fi
+% \ifcsname#alternative\endcsname\else
+% \setugvalue{#alternative}{\font_helpers_set_current_font_alternative{#alternative}}% \sl
+% \fi
+% \ifcsname#style\s!x\endcsname\else
+% \setugvalue{#style\s!x }{\font_helpers_set_current_font_x_style_alternative{#style}}% \rmx
+% \setugvalue{#style\s!xx}{\font_helpers_set_current_font_xx_style_alternative{#style}}% \rmxx
+% \fi
+% \ifcsname#alternative\s!x\endcsname\else
+% \setugvalue{#alternative\s!x }{\font_helpers_set_current_font_x_alternative{#alternative}}% \slx
+% \setugvalue{#alternative\s!xx}{\font_helpers_set_current_font_xx_alternative{#alternative}}% \slxx
+% \fi
+% \ifcsname#style#alternative\endcsname\else
+% \setugvalue{#style#alternative}{\font_helpers_set_current_font_style_alternative{#style}{#alternative}}% \rmsl
+% \fi}
+
+\def\font_basics_check_text_bodyfont_step#whatever#body% size can be empty (checking needed as \bf is already defined)
+ {\ifcsname#whatever\endcsname\else
+ \setugvalue{#whatever}{#body}%
+ \fi}
+
\def\font_basics_check_text_bodyfont#style#alternative#size% size can be empty (checking needed as \bf is already defined)
- {\setugvalue{#style#size}{\font_helpers_set_current_font_style_size{#style}{#size}}% \rma
- \setugvalue{#alternative#size}{\font_helpers_set_current_font_alternative_size{#alternative}{#size}}% \sla
- \setugvalue{#style#alternative#size}{\font_helpers_set_current_font_style_alternative_size{#style}{#alternative}{#size}}% \rmsla
- \ifcsname\s!normal#style\endcsname % text/math check
- \expandafter\let\csname#style\expandafter\endcsname\csname\s!normal#style\endcsname
- \else
- \setugvalue{#style}{\font_helpers_set_current_font_style{#style}}% \rm
- \fi
- \ifcsname\s!normal#alternative\endcsname % text/math check
- \expandafter\let\csname#alternative\expandafter\endcsname\csname\s!normal#alternative\endcsname
- \else
- \setugvalue{#alternative}{\font_helpers_set_current_font_alternative{#alternative}}% \sl
- \fi
- \setugvalue{#style\s!x}{\font_helpers_set_current_font_x_style_alternative{#style}}% \rmx
- \setugvalue{#style\s!xx}{\font_helpers_set_current_font_xx_style_alternative{#style}}% \rmxx
- \setugvalue{#alternative\s!x}{\font_helpers_set_current_font_x_alternative{#alternative}}% \slx
- \setugvalue{#alternative\s!xx}{\font_helpers_set_current_font_xx_alternative{#alternative}}% \slxx
- \setugvalue{#style#alternative}{\font_helpers_set_current_font_style_alternative{#style}{#alternative}}}% \rmsl
+ {\font_basics_check_text_bodyfont_step{#style#size}{\font_helpers_set_current_font_style_size{#style}{#size}}% \rma
+ \font_basics_check_text_bodyfont_step{#alternative#size}{\font_helpers_set_current_font_alternative_size{#alternative}{#size}}% \sla
+ \font_basics_check_text_bodyfont_step{#style#alternative#size}{\font_helpers_set_current_font_style_alternative_size{#style}{#alternative}{#size}}% \rmsla
+ \font_basics_check_text_bodyfont_step{#style}{\font_helpers_set_current_font_style{#style}}% \rm
+ \font_basics_check_text_bodyfont_step{#alternative}{\font_helpers_set_current_font_alternative{#alternative}}% \sl
+ \font_basics_check_text_bodyfont_step{#style\s!x }{\font_helpers_set_current_font_x_style_alternative{#style}}% \rmx
+ \font_basics_check_text_bodyfont_step{#style\s!xx}{\font_helpers_set_current_font_xx_style_alternative{#style}}% \rmxx
+ \font_basics_check_text_bodyfont_step{#alternative\s!x }{\font_helpers_set_current_font_x_alternative{#alternative}}% \slx
+ \font_basics_check_text_bodyfont_step{#alternative\s!xx}{\font_helpers_set_current_font_xx_alternative{#alternative}}% \slxx
+ \font_basics_check_text_bodyfont_step{#style#alternative}{\font_helpers_set_current_font_style_alternative{#style}{#alternative}}}% \rmsl
%D Scaling macros:
%D
@@ -879,6 +924,40 @@
\let\fontfile\s!unknown
+%D Relatively new:
+
+\installcorenamespace{fonts}
+\installcorenamespace{fontslanguage}
+
+\installsetuponlycommandhandler \??fonts {fonts}
+
+\newconstant\c_fonts_auto_language
+
+\letvalue{\??fontslanguage\v!auto}\plusone % experimental
+%letvalue{\??fontslanguage\v!yes }\plustwo % less efficient, for experiments
+
+\appendtoks
+ \c_fonts_auto_language
+ \ifcsname\??fontslanguage\fontsparameter\c!language\endcsname
+ \lastnamedcs
+ \else
+ \zerocount
+ \fi
+\to \everysetupfonts
+
+\appendtoks
+ \ifcase\c_fonts_auto_language
+ % nothing
+ \or
+ \addfflanguage
+ % \or
+ % font
+ \fi
+\to \everylanguage
+
+% \setupfonts
+% [\c!language=\v!auto]
+
%D \macros
%D {everyfont,everyfontswitch}
@@ -887,6 +966,16 @@
\def\setfontcharacteristics{\the\everyfont}
+% \appendtoks
+% \ifcase\c_fonts_auto_language
+% % nothing
+% \or
+% % auto
+% \or
+% \addfflanguage
+% \fi
+% \to \everyfont
+
%D \macros
%D {definefont}
%D
@@ -2038,32 +2127,24 @@
\font_helpers_set_current_xsize_alternative{#xsize}{#alternative}%
\fi}
-\def\font_helpers_set_current_font_x_alternative#alternative%
- {\font_helpers_set_current_font_xxx_alternative{#alternative}{4}\scriptstyle
- \currentxfontsize\plusone
- \let\tx\txx}
-
-\def\font_helpers_set_current_font_xx_alternative#alternative%
- {\font_helpers_set_current_font_xxx_alternative{#alternative}{5}\scriptscriptstyle
- \currentxfontsize\plustwo
- \let\tx\empty
- \let\txx\empty}
-
\def\font_helpers_reset_x_fontsize
{\ifcase\currentxfontsize\else
\currentxfontsize\zerocount
- \let\tx\normaltx
+ % also \sx and \sxx ?
+ \let\tx \normaltx
\let\txx\normaltxx
\fi}
-\def\font_helpers_check_nested_x_fontsize % option
+% \def\font_helpers_check_nested_x_fontsize % option
% {\ifcase\currentxfontsize\else\ifx\fontsize\empty\else
% \currentxfontsize\zerocount
% \let\fontsize\empty
% \let\tx\normaltx
% \let\txx\normaltxx
% \fi\fi}
- {}
+% {}
+
+\let\font_helpers_check_nested_x_fontsize\relax
\def\font_helpers_set_current_font_x_alternative#alternative%
{\font_helpers_check_nested_x_fontsize
@@ -2110,30 +2191,136 @@
% \unexpanded\def\tx {\font_helpers_set_current_font_x_alternative \fontalternative}
% \unexpanded\def\txx{\font_helpers_set_current_font_xx_alternative\fontalternative}
+% \unexpanded\def\tx
+% {\ifmmode
+% \scriptstyle
+% \else
+% \let\fontface\!!plusfour
+% \let\fontalternative\fontalternative
+% \font_helpers_synchronize_font
+% \fi
+% \currentxfontsize\plusone
+% \let\tx\txx}
+%
+% \unexpanded\def\txx
+% {\ifmmode
+% \scriptscriptstyle
+% \else
+% \let\fontface\!!plusfive
+% \let\fontalternative\fontalternative
+% \font_helpers_synchronize_font
+% \fi
+% \currentxfontsize\plustwo}
+
+\installcorenamespace{fontscalex}
+\installcorenamespace{fontscalexx}
+
+\newconditional\c_font_inherit_scale
+
+\def\font_scale_inherit#1%
+ {\begingroup
+ \scratchcounterone\fontid\font\relax
+ \currentxfontsize\plusone
+ \normalexpanded{\definedfont[\clf_specifiedfont\scratchcounterone\font_currentfontscale\relax]}%
+ \scratchcountertwo\fontid\font\relax
+ \currentxfontsize\plustwo
+ \normalexpanded{\definedfont[\clf_specifiedfont\scratchcounterone\font_currentfontscale\relax]}%
+ \scratchcounterthree\fontid\font\relax
+ % parent -> x -> xx
+ % parent -> xx
+ \global\expandafter\chardef\csname\??fontscalex \number\scratchcounterone\endcsname\scratchcountertwo
+ \global\expandafter\chardef\csname\??fontscalexx\number\scratchcounterone\endcsname\scratchcounterthree
+ \global\expandafter\chardef\csname\??fontscalex \number\scratchcountertwo\endcsname\scratchcounterthree
+ \global\expandafter\chardef\csname\??fontscalexx\number\scratchcountertwo\endcsname\scratchcounterthree
+ \endgroup
+ \setfontid\csname#1\number\fontid\font\endcsname}
+
+\def\font_scale_inherit_x
+ {\ifcsname\??fontscalex\number\fontid\font\endcsname
+ \setfontid\lastnamedcs
+ \else
+ \font_scale_inherit\??fontscalex
+ \fi
+ \ifskipfontcharacteristics
+ \setfontcharacteristics
+ \the\everyfontswitch
+ \fi}
+
+\def\font_scale_inherit_xx
+ {\ifcsname\??fontscalexx\number\fontid\font\endcsname
+ \setfontid\lastnamedcs
+ \else
+ \font_scale_inherit\??fontscalexx
+ \fi
+ \ifskipfontcharacteristics
+ \setfontcharacteristics
+ \the\everyfontswitch
+ \fi}
+
+\def\font_scale_defined_x
+ {\let\fontface\!!plusfour
+ \let\fontalternative\fontalternative
+ \font_helpers_synchronize_font}
+
+\def\font_scale_defined_xx
+ {\let\fontface\!!plusfive
+ \let\fontalternative\fontalternative
+ \font_helpers_synchronize_font}
+
\unexpanded\def\tx
- {\ifmmode
+ {\currentxfontsize\plusone
+ \ifmmode
\scriptstyle
+ \else\ifconditional\c_font_inherit_scale
+ \font_scale_inherit_x
\else
- \let\fontface\!!plusfour
- \let\fontalternative\fontalternative
- \font_helpers_synchronize_font
- \fi
- \currentxfontsize\plusone
+ \font_scale_defined_x
+ \fi\fi
\let\tx\txx}
\unexpanded\def\txx
- {\ifmmode
+ {\currentxfontsize\plustwo
+ \ifmmode
+ \scriptscriptstyle
+ \else\ifconditional\c_font_inherit_scale
+ \font_scale_inherit_xx
+ \else
+ \font_scale_defined_xx
+ \fi\fi
+ \let\tx \empty
+ \let\txx\empty}
+
+\unexpanded\def\sx
+ {\currentxfontsize\plusone
+ \ifmmode
+ \scriptstyle
+ \else
+ \font_scale_inherit_x
+ \fi
+ \let\tx\txx
+ \let\sx\sxx}
+
+\unexpanded\def\sxx
+ {\currentxfontsize\plustwo
+ \ifmmode
\scriptscriptstyle
\else
- \let\fontface\!!plusfive
- \let\fontalternative\fontalternative
- \font_helpers_synchronize_font
+ \font_scale_inherit_xx
\fi
- \currentxfontsize\plustwo}
+ \let\tx \empty
+ \let\txx\empty
+ \let\sx \empty
+ \let\sxx\empty}
+
+\unexpanded\def\useinheritxsizes{\settrue \c_font_inherit_scale} % not yet public, playground for WS and me
+\unexpanded\def\usedefinedxsizes{\setfalse\c_font_inherit_scale} % not yet public, playground for WS and me
\let\normaltx \tx
\let\normaltxx\txx
+\let\normalsx \sx
+\let\normalsxx\sxx
+
%D When asking for a complete font switch, for instance from 10
%D to 12~points, the next macro does the job. First we
%D normalize the size, next we define the current range of
@@ -2269,7 +2456,6 @@
\unexpanded\def\switchtobodyfont[#specification]% could become an ifx
{\doifsomething{#specification}{\font_basics_switchtobodyfont{#specification}}}
-
\unexpanded\def\usebodyfontparameter#1%
{\edef\m_font_bodyfont_asked{#1\c!bodyfont}%
\ifx\m_font_bodyfont_asked\empty\else
@@ -2332,7 +2518,6 @@
%D Handy for manuals:
-
%D The \type {\tochar} commmand takes a specification:
%D
%D \starttabulate[|l|l|l|]
@@ -2343,6 +2528,8 @@
%D \NC i \NC decimal index \NC i:456 \NC \NR
%D \NC n \NC name \NC n:eight \NC \NR
%D \NC c \NC name \NC c:x \NC \NR
+%D \NC u \NC unicode descriptions \NC u:dog \NC \NR
+%D \NC a \NC all (also descriptions) \NC a:rewind \NC \NR
%D \stoptabulate
%D
%D This is an expandable command!
@@ -2526,6 +2713,32 @@
\def\saveddefinedfontid {\number\fontid\font}
\def\saveddefinedfontname{\fontname\font}
+%D Handy for defining additional glyphs:
+
+\let\getprivateglyphslot\clf_getprivateglyphslot % kind of private macro
+
+\let\getprivatechar \clf_getprivatechar % gives back a utf !
+\let\getprivatemathchar \clf_getprivatemathchar % gives back a utf !
+\let\getprivateslot \clf_getprivateslot % companion to fonts.helpers.addprivate
+
+% \unexpanded\def\getprivatemathchar#1%
+% {\begingroup\the\textfont\zerocount\getprivatechar{#1}\endgroup}
+
+\def\privatechar % the text variant gets expanded to utf
+ {\ifmmode
+ \expandafter\getprivatemathchar
+ \else
+ \expandafter\getprivatechar
+ \fi}
+
+% new
+
+\unexpanded\def\definefontcolorpalette
+ {\dodoubleargument\font_define_color_palette}
+
+\def\font_define_color_palette[#1][#2]%
+ {\clf_definefontcolorpalette{#1}{#2}}
+
% yes or no:
% \let\font_basics_check_text_bodyfont_slow\font_basics_check_text_bodyfont
diff --git a/tex/context/base/mkiv/font-inj.lua b/tex/context/base/mkiv/font-inj.lua
index 89370210d..ccc41d3f3 100644
--- a/tex/context/base/mkiv/font-inj.lua
+++ b/tex/context/base/mkiv/font-inj.lua
@@ -22,7 +22,6 @@ if not modules then modules = { } end modules ['font-inj'] = {
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)
@@ -262,7 +261,7 @@ function injections.setpair(current,factor,rlmode,r2lflag,spec,injection) -- r2l
local i = rawget(p,injection)
if i then
if leftkern ~= 0 then
- i.leftkern = (i.leftkern or 0) + leftkern
+ i.leftkern = (i.leftkern or 0) + leftkern
end
if rightkern ~= 0 then
i.rightkern = (i.rightkern or 0) + rightkern
@@ -548,7 +547,7 @@ local function collect_glyphs(head,offsets)
identify(n,"preinjections")
end
end
- end
+ end
local d = getfield(n,"post")
if d then
for n in traverse_id(glyph_code,d) do
@@ -556,7 +555,7 @@ local function collect_glyphs(head,offsets)
identify(n,"postinjections")
end
end
- end
+ end
local d = getfield(n,"replace")
if d then
for n in traverse_id(glyph_code,d) do
@@ -564,9 +563,9 @@ local function collect_glyphs(head,offsets)
identify(n,"replaceinjections")
end
end
- end
+ end
end
- n = getnext(n)
+ n = getnext(n)
end
return glyphs, glyphi, nofglyphs, marks, marki, nofmarks
@@ -601,11 +600,11 @@ local function inject_marks(marks,marki,nofmarks)
-- 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
+ -- 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.
+ -- some day we need something more clever here.
--
- if false then
+ if false then
-- a mark with kerning
local leftkern = pp.leftkern
if leftkern then
@@ -636,17 +635,16 @@ local function inject_marks(marks,marki,nofmarks)
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
+ -- 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
@@ -754,54 +752,54 @@ local function inject_kerns(head,glist,ilist,length) -- not complete ! compare w
local n = glist[i]
local pn = rawget(properties,n)
if pn then
- local dp = nil
- local dr = nil
+ 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))
+ 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))
+ 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
+ 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
@@ -823,7 +821,7 @@ local function inject_everything(head,where)
end
if nofmarks > 0 then
inject_kerns(head,marks,marki,nofmarks)
- end
+ end
if keepregisteredcounts then
keepregisteredcounts = false
else
diff --git a/tex/context/base/mkiv/font-lib.mkvi b/tex/context/base/mkiv/font-lib.mkvi
index fd6f70d69..d9cae503b 100644
--- a/tex/context/base/mkiv/font-lib.mkvi
+++ b/tex/context/base/mkiv/font-lib.mkvi
@@ -18,6 +18,7 @@
\registerctxluafile{font-ini}{1.001}
\registerctxluafile{font-log}{1.001}
\registerctxluafile{font-con}{1.001}
+\registerctxluafile{font-cft}{1.001}
\registerctxluafile{font-enc}{1.001}
\registerctxluafile{font-agl}{1.001} % if needed we can comment this and delay loading
\registerctxluafile{font-cid}{1.001} % cid maps
@@ -26,13 +27,14 @@
% the otf font loader:
\registerctxluafile{font-otr}{1.001} % opentype fontloader
+\registerctxluafile{font-web}{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-tfm}{1.001}
+% \registerctxluafile{font-tfm}{1.001}
\registerctxluafile{font-hsh}{1.001} % hashes used by context
\registerctxluafile{font-nod}{1.001}
@@ -50,6 +52,7 @@
\registerctxluafile{font-otc}{1.001}
\registerctxluafile{font-oth}{1.001}
\registerctxluafile{font-osd}{1.001}
+\registerctxluafile{font-ocl}{1.001}
% we use otf code for type one
@@ -58,11 +61,19 @@
%registerctxluafile{font-afm}{1.001}
\registerctxluafile{font-afk}{1.001}
+% tfm
+
+\registerctxluafile{font-tfm}{1.001}
+
% name database
\registerctxluafile{font-syn}{1.001}
\registerctxluafile{font-trt}{1.001}
+% shapes
+
+\registerctxluafile{font-shp}{1.001}
+
% so far
\registerctxluafile{font-pat}{1.001} % patchers
@@ -76,7 +87,10 @@
\registerctxluafile{font-vf} {1.001}
\registerctxluafile{font-enh}{1.001}
-\registerctxluafile{font-gds}{1.001}
+\registerctxluafile{good-ini}{1.001}
+\registerctxluafile{good-gen}{1.001}
+\registerctxluafile{good-ctx}{1.001}
+\registerctxluafile{good-mth}{1.001}
\registerctxluafile{font-def}{1.001}
\registerctxluafile{font-ctx}{1.001} % after def as it overloads
@@ -86,6 +100,8 @@
\registerctxluafile{font-aux}{1.001}
+\registerctxluafile{font-lig}{1.001} % only for experiments so try to avoid it
+
%D Some low level helpers
%D
%D \starttyping
diff --git a/tex/context/base/mkiv/font-lig.lua b/tex/context/base/mkiv/font-lig.lua
new file mode 100644
index 000000000..bb9ee0096
--- /dev/null
+++ b/tex/context/base/mkiv/font-lig.lua
@@ -0,0 +1,48 @@
+if not modules then modules = { } end modules ['font-lig'] = {
+ 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 module is not loaded but generated a file for plain TeX as a substitute
+-- for collapsing the input: "luatex-fonts-lig.lua" with "collapse=yes".
+
+local standalone = not characters
+
+if standalone then
+ require("char-utf")
+end
+
+local data = { }
+
+for first, seconds in next, characters.graphemes do
+ for second, combined in next, seconds do
+ data[combined] = { first, second }
+ end
+end
+
+-- data['c'] = { 'a', 'b' }
+-- data['d'] = { 'c', 'c' }
+
+local feature = {
+ name = "collapse",
+ type = "ligature",
+ prepend = true,
+ dataset = {
+ { data = data },
+ { data = data },
+ }
+}
+
+if standalone then
+ local filename = "luatex-fonts-lig.lua"
+ local filedata = "-- this file is generated by context\n\n"
+ .. "fonts.handlers.otf.addfeature "
+ .. table.serialize(feature,false)
+ logs.report("fonts","pseudo ligature file %a saved",filename)
+ io.savedata(filename,filedata)
+else
+ fonts.handlers.otf.addfeature(feature)
+end
diff --git a/tex/context/base/mkiv/font-map.lua b/tex/context/base/mkiv/font-map.lua
index 838c74173..cf369708c 100644
--- a/tex/context/base/mkiv/font-map.lua
+++ b/tex/context/base/mkiv/font-map.lua
@@ -10,16 +10,18 @@ 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 sortedhash, sortedkeys = table.sortedhash, table.sortedkeys
-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 trace_loading = false trackers.register("fonts.loading", function(v) trace_loading = v end)
+local trace_mapping = false trackers.register("fonts.mapping", function(v) trace_mapping = 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)
+-- force_ligatures is true per 2017-04-20 so that these emoji's with bad names work too
+
+local force_ligatures = true directives.register("fonts.mapping.forceligatures",function(v) force_ligatures = v end)
local fonts = fonts or { }
local mappings = fonts.mappings or { }
@@ -140,7 +142,7 @@ local f_double = formatters["%04X%04X"]
-- end
-- end
-local function tounicode16(unicode,name)
+local function tounicode16(unicode)
if unicode < 0xD7FF or (unicode > 0xDFFF and unicode <= 0xFFFF) then
return f_single(unicode)
else
@@ -149,7 +151,7 @@ local function tounicode16(unicode,name)
end
end
-local function tounicode16sequence(unicodes,name)
+local function tounicode16sequence(unicodes)
local t = { }
for l=1,#unicodes do
local u = unicodes[l]
@@ -186,6 +188,32 @@ local function tounicode(unicode,name)
end
end
+-- no real gain on runs
+--
+-- local hash = setmetatableindex(function(t,u)
+-- local v
+-- if u < 0xD7FF or (u > 0xDFFF and u <= 0xFFFF) then
+-- v = f_single(u)
+-- else
+-- u = u - 0x10000
+-- v = f_double(floor(u/1024)+0xD800,u%1024+0xDC00)
+-- end
+-- t[u] = v
+-- return v
+-- end)
+--
+-- local function tounicode(unicode,name)
+-- if type(unicode) == "table" then
+-- local t = { }
+-- for l=1,#unicode do
+-- t[l] = hash[u]
+-- end
+-- return concat(t)
+-- else
+-- return hash[unicode]
+-- end
+-- end
+
local function fromunicode16(str)
if #str == 4 then
return tonumber(str,16)
@@ -216,6 +244,8 @@ mappings.tounicode16 = tounicode16
mappings.tounicode16sequence = tounicode16sequence
mappings.fromunicode16 = fromunicode16
+-- mozilla emoji has bad lig names: name = gsub(name,"(u[a-f0-9_]+)%-([a-f0-9_]+)","%1_%2")
+
local ligseparator = P("_")
local varseparator = P(".")
local namesplitter = Ct(C((1 - ligseparator - varseparator)^1) * (ligseparator * C((1 - ligseparator - varseparator)^1))^0)
@@ -237,39 +267,50 @@ local namesplitter = Ct(C((1 - ligseparator - varseparator)^1) * (ligseparator *
-- 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
+do
+
+ 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 } },
+ }
+
+ local o = { }
+
+ for k, v in next, overloads do
+ local name = v.name
+ local mess = v.mess
+ if name then
+ o[name] = v
+ end
+ if mess then
+ o[mess] = v
+ end
+ o[k] = v
end
-end
-mappings.overloads = overloads
+ mappings.overloads = o
+
+end
function mappings.addtounicode(data,filename,checklookups)
local resources = data.resources
local unicodes = resources.unicodes
if not unicodes then
+ if trace_mapping then
+ report_fonts("no unicode list, quitting tounicode for %a",filename)
+ end
return
end
local properties = data.properties
local descriptions = data.descriptions
+ local overloads = mappings.overloads
-- we need to move this code
unicodes['space'] = unicodes['space'] or 32
unicodes['hyphen'] = unicodes['hyphen'] or 45
@@ -288,17 +329,25 @@ function mappings.addtounicode(data,filename,checklookups)
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
+ oparser = usedmap and makenameparser(cidinfo.ordering)
+ cidnames = usedmap.names
+ cidcodes = usedmap.unicodes
end
- local ns = 0
- local nl = 0
+ local ns = 0
+ local nl = 0
+ --
+ -- in order to avoid differences between runs due to hash randomization we
+ -- run over a sorted list
--
- for du, glyph in next, descriptions do
- local name = glyph.name
+ local dlist = sortedkeys(descriptions)
+ --
+ -- for du, glyph in next, descriptions do
+ for i=1,#dlist do
+ local du = dlist[i]
+ local glyph = descriptions[du]
+ local name = glyph.name
if name then
- local overload = overloads[name]
+ local overload = overloads[name] or overloads[du]
if overload then
-- get rid of weird ligatures
-- glyph.name = overload.name
@@ -434,52 +483,71 @@ function mappings.addtounicode(data,filename,checklookups)
end
end
end
+ else
+ local overload = overloads[du]
+ if overload then
+ glyph.unicode = overload.unicode
+ end
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
+ local collected = fonts.handlers.otf.readers.getcomponents(data) -- neglectable overhead
+
+ local function resolve(glyph,u)
+ 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
- local u = collected[unicode] -- always tables
+ unicoded = unicoded + 1
+ end
+ end
+
+ if not collected then
+ -- move on
+ elseif force_ligatures then
+ for i=1,#dlist do
+ local du = dlist[i]
+ local u = collected[du] -- 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
+ resolve(descriptions[du],u)
+ end
+ end
+ else
+ for i=1,#dlist do
+ local du = dlist[i]
+ local glyph = descriptions[du]
+ if glyph.class == "ligature" and not glyph.unicode then
+ local u = collected[du] -- always tables
+ if u then
+ resolve(glyph,u)
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
+ -- for unic, glyph in sortedhash(descriptions) do
+ for i=1,#dlist do
+ local du = dlist[i]
+ local glyph = descriptions[du]
+ local name = glyph.name or "-"
+ local index = glyph.index or 0
local unicode = glyph.unicode
if unicode then
if type(unicode) == "table" then
@@ -487,12 +555,12 @@ function mappings.addtounicode(data,filename,checklookups)
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)
+ report_fonts("internal slot %U, name %a, unicode %U, tounicode % t",index,name,du,unicodes)
else
- report_fonts("internal slot %U, name %a, unicode %U, tounicode %U",index,name,unic,unicode)
+ report_fonts("internal slot %U, name %a, unicode %U, tounicode %U",index,name,du,unicode)
end
else
- report_fonts("internal slot %U, name %a, unicode %U",index,name,unic)
+ report_fonts("internal slot %U, name %a, unicode %U",index,name,du)
end
end
end
diff --git a/tex/context/base/mkiv/font-mat.mkvi b/tex/context/base/mkiv/font-mat.mkvi
index 2e7c2080d..cbc78aca8 100644
--- a/tex/context/base/mkiv/font-mat.mkvi
+++ b/tex/context/base/mkiv/font-mat.mkvi
@@ -127,14 +127,16 @@
\settrue \c_font_auto_size
\fi\fi}
+\let\mathsizesuffix\empty
+
\def\font_helpers_set_math_family_indeed#mrtag#family% \fontface etc are also used later on
{\let\savedfontbody\fontbody
\let\fontfamily#family%
% the order is important as we depend on known id's when completing fonts
- \let\fontface\!!plusthree\font_helpers_set_math_family_a\scriptscriptfont#mrtag\font
- \let\fontface\!!plustwo \font_helpers_set_math_family_a\scriptfont #mrtag\font
- \let\fontface\!!plusone \font_helpers_set_math_family_a\textfont #mrtag\font
- \let\fontface\!!zerocount
+ \let\mathsizesuffix\mathscriptscriptsuffix\let\fontface\!!plusthree\font_helpers_set_math_family_a\scriptscriptfont#mrtag\font
+ \let\mathsizesuffix\mathscriptsuffix \let\fontface\!!plustwo \font_helpers_set_math_family_a\scriptfont #mrtag\font
+ \let\mathsizesuffix\mathtextsuffix \let\fontface\!!plusone \font_helpers_set_math_family_a\textfont #mrtag\font
+ \let\mathsizesuffix\empty \let\fontface\!!zerocount
\let\fontbody\savedfontbody
\setfalse\c_font_auto_size}
@@ -159,10 +161,10 @@
\let\defaultfontclass\fontclass % else truefontname falls back on the wrong one
\let\savedfontbody\fontbody
\let\fontfamily#familytag%
- \let\fontface\!!plusthree\font_helpers_set_math_family_bold_a\scriptscriptfont#mbfam#mrfam%
- \let\fontface\!!plustwo \font_helpers_set_math_family_bold_a\scriptfont #mbfam#mrfam%
- \let\fontface\!!plusone \font_helpers_set_math_family_bold_a\textfont #mbfam#mrfam%
- \let\fontface\!!zerocount
+ \let\mathsizesuffix\mathscriptscriptsuffix\let\fontface\!!plusthree\font_helpers_set_math_family_bold_a\scriptscriptfont#mbfam#mrfam%
+ \let\mathsizesuffix\mathscriptsuffix \let\fontface\!!plustwo \font_helpers_set_math_family_bold_a\scriptfont #mbfam#mrfam%
+ \let\mathsizesuffix\mathtextsuffix \let\fontface\!!plusone \font_helpers_set_math_family_bold_a\textfont #mbfam#mrfam%
+ \let\mathsizesuffix\empty \let\fontface\!!zerocount
\let\fontbody\savedfontbody
\let\defaultfontclass\savedfontclass
\setfalse\c_font_auto_size}
diff --git a/tex/context/base/mkiv/font-mis.lua b/tex/context/base/mkiv/font-mis.lua
index d359e2132..6d5c9fbf2 100644
--- a/tex/context/base/mkiv/font-mis.lua
+++ b/tex/context/base/mkiv/font-mis.lua
@@ -21,7 +21,7 @@ local readers = otf.readers
if readers then
- otf.version = otf.version or 3.020
+ otf.version = otf.version or 3.029
otf.cache = otf.cache or containers.define("fonts", "otl", otf.version, true)
function fonts.helpers.getfeatures(name,save)
diff --git a/tex/context/base/mkiv/font-mps.lua b/tex/context/base/mkiv/font-mps.lua
index 7b7c859df..69b2af68c 100644
--- a/tex/context/base/mkiv/font-mps.lua
+++ b/tex/context/base/mkiv/font-mps.lua
@@ -21,11 +21,9 @@ 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 f_moveto = formatters["(%F,%F)"]
+local f_lineto = formatters["--(%F,%F)"]
+local f_curveto = formatters["..controls(%F,%F)and(%F,%F)..(%F,%F)"]
local s_cycle = "--cycle"
local f_nofill = formatters["nofill %s;"]
@@ -34,8 +32,8 @@ 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))"]
+local f_boundingbox = formatters["((%F,%F)--(%F,%F)--(%F,%F)--(%F,%F)--cycle)"]
+local f_vertical = formatters["((%F,%F)--(%F,%F))"]
function metapost.boundingbox(d,factor)
local bounds = d.boundingbox
@@ -238,39 +236,52 @@ function metapost.maxbounds(data,index,factor)
)
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
+-- This is a nice example of tex, metapost and lua working in tandem. Each kicks in at the
+-- right time. It's probably why I like watching https://www.youtube.com/watch?v=c5FqpddnJmc
+-- so much: precisely (and perfectly) timed too.
+
+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 normal_rule = nodes.rulecodes.normal
+
+local nuts = nodes.nuts
+local getnext = nuts.getnext
+local getid = nuts.getid
+local getlist = nuts.getlist
+local getchar = nuts.getchar
+local getfont = nuts.getfont
+local getsubtype = nuts.getsubtype
+local getfield = nuts.getfield
+local getbox = nuts.getbox
+local getwhd = nuts.getwhd
+local getkern = nuts.getkern
+local getshift = nuts.getshift
+local getwidth = nuts.getwidth
+local getheight = nuts.getheight
+local getdepth = nuts.getdepth
+
+local effective_glue = nuts.effective_glue
+
+local characters = fonts.hashes.characters
+local parameters = fonts.hashes.parameters
+local shapes = fonts.hashes.shapes
+local topaths = metapost.paths
+
+local f_code = formatters["mfun_do_outline_text_flush(%q,%i,%F,%F)(%,t);"]
+local f_rule = formatters["mfun_do_outline_rule_flush(%q,%F,%F,%F,%F);"]
+local f_bounds = formatters["checkbounds(%F,%F,%F,%F);"]
+local s_nothing = "(origin scaled 10)"
+
+local sc = 10
+local fc = number.dimenfactors.bp * sc / 10
-- todo: make the next more efficient:
@@ -284,8 +295,8 @@ function metapost.output(kind,font,char,advance,shift,ex)
if glyphs then
local glyf = glyphs[index]
if glyf then
- local units = shapedata.units or 1000
- local yfactor = sc/units
+ local units = 1000 -- factor already takes shapedata.units into account
+ local yfactor = (sc/units) * parameters[font].factor / 655.36
local xfactor = yfactor
local shift = shift or 0
local advance = advance or 0
@@ -296,8 +307,12 @@ function metapost.output(kind,font,char,advance,shift,ex)
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
+ if paths then
+ local code = f_code(kind,#paths,advance,shift,paths)
+ return code, character.width * fc * wfactor
+ else
+ return "", 0
+ end
end
end
end
@@ -317,131 +332,111 @@ function fonts.metapost.boxtomp(n,kind)
local llx, lly, urx, ury = 0, 0, 0, 0
- local boxtomp
+ local horizontal, vertical
- local function horizontal(current,shift,glue_sign,glue_set,glue_order,ht,dp)
- shift = shift or 0
+ horizontal = function(parent,current,xoffset,yoffset)
+ local dx = 0
while current do
- local id = current.id
+ local id = getid(current)
if id == glyph_code then
- local code, width = metapost.output(kind,current.font,current.char,advance,-shift*fc,current.expansion_factor)
+ local code, width = metapost.output(kind,getfont(current),getchar(current),xoffset+dx,yoffset,getfield(current,"expansion_factor"))
result[#result+1] = code
- advance = advance + width
+ dx = dx + width
elseif id == disc_code then
- local replace = current.replace
+ local replace = getfield(current,"replace")
if replace then
- horizontal(replace,shift,glue_sign,glue_set,glue_order,ht,dp)
+ dx = dx + horizontal(parent,replace,xoffset+dx,yoffset)
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
+ dx = dx + getkern(current) * fc
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
+ dx = dx + effective_glue(current,parent) * fc
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
+ local list = getlist(current)
+ if list then
+ horizontal(current,list,xoffset+dx,yoffset-getshift(current)*fc)
+ end
+ dx = dx + getwidth(current) * fc
elseif id == vlist_code then
- boxtomp(current) -- ,distance + shift,current.glue_set*current.glue_sign)
- advance = advance + current.width * fc
+ local list = getlist(current)
+ if list then
+ vertical(current,list,xoffset+dx,yoffset-getshift(current)*fc)
+ end
+ dx = dx + getwidth(current) * 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)
+ local wd, ht, dp = getwhd(current)
+ if wd ~= 0 then
+ wd = wd * fc
+ if ht == signal then
+ ht = getheight(parent)
end
- end
- if wd ~= signal then
- advance = advance + wd * fc
+ if dp == signal then
+ dp = getdepth(parent)
+ end
+ local hd = (ht + dp) * fc
+ if hd ~= 0 and getsubtype(current) == normal_rule then
+ result[#result+1] = f_rule(kind,xoffset+dx+wd/2,yoffset+hd/2,wd,hd)
+ end
+ dx = dx + wd
end
end
- current = current.next
+ current = getnext(current)
end
+ return dx
end
- local function vertical(current,shift)
- shift = shift or 0
- current = find_tail(current) -- otherwise bad bbox
+ vertical = function(parent,current,xoffset,yoffset)
+ local dy = getheight(parent) * fc
while current do
- local id = current.id
+ local id = getid(current)
if id == hlist_code then
- distance = distance - current.depth
- boxtomp(current,distance + shift,current.glue_set*current.glue_sign)
- distance = distance - current.height
+ local _, ht, dp = getwhd(current)
+ dy = dy - ht * fc
+ local list = getlist(current)
+ if list then
+ horizontal(current,list,xoffset+getshift(current)*fc,yoffset+dy)
+ end
+ dy = dy - dp * fc
elseif id == vlist_code then
- print("vertical >>>")
- vertical(current.list,0)
+ local wd, ht, dp = getwhd(current)
+ dy = dy - ht * fc
+ local list = getlist(current)
+ if list then
+ vertical(current,list,xoffset+getshift(current)*fc,yoffset+dy)
+ end
+ dy = dy - dp * fc
elseif id == kern_code then
- distance = distance - current.kern
- advance = 0
+ dy = dy - getkern(current) * fc
elseif id == glue_code then
- distance = distance - current.width
- advance = 0
+ dy = dy - effective_glue(current,parent) * 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
- distance = distance - dp
- if wd == 0 then
- result[#result+1] = f_strut(ht*fc,-dp*fc)
+ local wd, ht, dp = getwhd(current)
+ local hd = (ht + dp) * fc
+ if hd ~= 0 then
+ if wd == signal then
+ wd = getwidth(parent) * fc
else
- result[#result+1] = f_vrule(wd*fc,ht*fc,-dp*fc,0,distance+shift)
+ wd = wd * fc
end
- distance = distance - ht
+ dy = dy - ht * fc
+ if wd ~= 0 and getsubtype(current) == 0 then
+ result[#result+1] = f_rule(kind,xoffset+wd/2,yoffset+dy+hd/2,wd,hd)
+ end
+ dy = dy - dp * fc
end
end
- current = current.prev
+ current = getnext(current)
end
+ return dy
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
+ local box = getbox(n)
+ local list = box and getlist(box)
+ if list then
+ (getid(box) == hlist_code and horizontal or vertical)(box,list,0,0)
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
+ local wd, ht, dp = getwhd(box)
result[#result+1] = f_bounds(0,-dp*fc,wd*fc,ht*fc)
diff --git a/tex/context/base/mkiv/font-nod.lua b/tex/context/base/mkiv/font-nod.lua
index 7f30b6d5c..9166970b8 100644
--- a/tex/context/base/mkiv/font-nod.lua
+++ b/tex/context/base/mkiv/font-nod.lua
@@ -16,8 +16,6 @@ local utfchar = utf.char
local concat, fastcopy = table.concat, table.fastcopy
local match, rep = string.match, string.rep
-local report_nodes = logs.reporter("fonts","tracing")
-
fonts = fonts or { }
nodes = nodes or { }
@@ -49,7 +47,6 @@ local vlist_code = nodecodes.vlist
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
@@ -66,7 +63,11 @@ local getsubtype = nuts.getsubtype
local getchar = nuts.getchar
local getlist = nuts.getlist
local getdisc = nuts.getdisc
+local getcomponents = nuts.getcomponents
local isglyph = nuts.isglyph
+local getkern = nuts.getkern
+local getdir = nuts.getdir
+local getwidth = nuts.getwidth
local setfield = nuts.setfield
local setbox = nuts.setbox
@@ -75,7 +76,7 @@ local setsubtype = nuts.setsubtype
local copy_node_list = nuts.copy_list
local hpack_node_list = nuts.hpack
-local free_node_list = nuts.flush_list
+local flush_node_list = nuts.flush_list
local traverse_nodes = nuts.traverse
local traverse_id = nuts.traverse_id
local protect_glyphs = nuts.protect_glyphs
@@ -100,7 +101,6 @@ local properties = nodes.properties.data
-- direct.set_properties_mode(true,true) -- default
local function freeze(h,where)
- -- report_nodes("freezing %s",where)
for n in traverse_nodes(tonut(h)) do -- todo: disc but not traced anyway
local p = properties[n]
if p then
@@ -274,7 +274,7 @@ function step_tracers.reset()
for i=1,#collection do
local c = collection[i]
if c then
- free_node_list(c)
+ flush_node_list(c)
end
end
collection, messages = { }, { }
@@ -392,7 +392,7 @@ function step_tracers.codes(i,command,space)
if id == glyph_code then
showchar(c)
elseif id == dir_code or id == localpar_code then
- context("[%s]",getfield(c,"dir"))
+ context("[%s]",getdir(c))
elseif id == disc_code then
local pre, post, replace = getdisc(c)
if pre or post or replace then
@@ -439,7 +439,10 @@ function step_tracers.check(head)
local n = copy_node_list(h)
freeze(n,"check")
injections.keepcounts(n) -- one-time
- injections.handler(n,"trace")
+ local l = injections.handler(n,"trace")
+ if l then -- hm, can be false
+ n = tonut(l)
+ end
protect_glyphs(n)
collection[1] = n
end
@@ -453,7 +456,10 @@ function step_tracers.register(head)
local n = copy_node_list(h)
freeze(n,"register")
injections.keepcounts(n) -- one-time
- injections.handler(n,"trace")
+ local l = injections.handler(n,"trace")
+ if l then -- hm, can be false
+ n = tonut(l)
+ end
protect_glyphs(n)
collection[nc] = n
end
@@ -473,16 +479,16 @@ end
--
-local threshold = 65536
+local threshold = 65536 -- 1pt
-local function toutf(list,result,nofresult,stopcriterium)
+local function toutf(list,result,nofresult,stopcriterium,nostrip)
if list then
for n in traverse_nodes(tonut(list)) do
local c, id = isglyph(n)
if c then
- local components = getfield(n,"components")
+ local components = getcomponents(n)
if components then
- result, nofresult = toutf(components,result,nofresult)
+ result, nofresult = toutf(components,result,nofresult,false,true)
elseif c > 0 then
local fc = fontcharacters[getfont(n)]
if fc then
@@ -514,20 +520,20 @@ local function toutf(list,result,nofresult,stopcriterium)
result[nofresult] = f_badcode(c)
end
elseif id == disc_code then
- result, nofresult = toutf(getfield(n,"replace"),result,nofresult) -- needed?
+ result, nofresult = toutf(getfield(n,"replace"),result,nofresult,false,true) -- needed?
elseif id == hlist_code or id == vlist_code then
-- if nofresult > 0 and result[nofresult] ~= " " then
-- nofresult = nofresult + 1
-- result[nofresult] = " "
-- end
- result, nofresult = toutf(getlist(n),result,nofresult)
+ result, nofresult = toutf(getlist(n),result,nofresult,false,true)
elseif id == glue_code then
- if nofresult > 0 and result[nofresult] ~= " " then
+ if nofresult > 0 and result[nofresult] ~= " " and getwidth(n) > threshold then
nofresult = nofresult + 1
result[nofresult] = " "
end
- elseif id == kern_code and getfield(n,"kern") > threshold then
- if nofresult > 0 and result[nofresult] ~= " " then
+ elseif id == kern_code then
+ if nofresult > 0 and result[nofresult] ~= " " and getkern(n) > threshold then
nofresult = nofresult + 1
result[nofresult] = " "
end
@@ -537,7 +543,7 @@ local function toutf(list,result,nofresult,stopcriterium)
end
end
end
- if nofresult > 0 and result[nofresult] == " " then
+ if not nostrip and nofresult > 0 and result[nofresult] == " " then
result[nofresult] = nil
nofresult = nofresult - 1
end
diff --git a/tex/context/base/mkiv/font-ocl.lua b/tex/context/base/mkiv/font-ocl.lua
new file mode 100644
index 000000000..c166f5ce4
--- /dev/null
+++ b/tex/context/base/mkiv/font-ocl.lua
@@ -0,0 +1,586 @@
+if not modules then modules = { } end modules ['font-ocl'] = {
+ 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"
+}
+
+-- todo : user list of colors
+
+local tostring, next, format = tostring, next, string.format
+local round, max = math.round, math.round
+local sortedkeys, sortedhash = table.sortedkeys, table.sortedhash
+local setmetatableindex = table.setmetatableindex
+
+local formatters = string.formatters
+local tounicode = fonts.mappings.tounicode
+
+local otf = fonts.handlers.otf
+
+local f_color = formatters["pdf:direct:%f %f %f rg"]
+local f_gray = formatters["pdf:direct:%f g"]
+
+if context then
+
+ local startactualtext = nil
+ local stopactualtext = nil
+
+ function otf.getactualtext(s)
+ if not startactualtext then
+ startactualtext = backends.codeinjections.startunicodetoactualtextdirect
+ stopactualtext = backends.codeinjections.stopunicodetoactualtextdirect
+ end
+ return startactualtext(s), stopactualtext()
+ end
+
+else
+
+ local tounicode = fonts.mappings.tounicode16
+
+ function otf.getactualtext(s)
+ return
+ "/Span << /ActualText <feff" .. n .. "> >> BDC",
+ "EMC"
+ end
+
+end
+
+local sharedpalettes = { }
+
+local hash = setmetatableindex(function(t,k)
+ local v = { "special", k }
+ t[k] = v
+ return v
+end)
+
+if context then
+
+ local colors = attributes.list[attributes.private('color')] or { }
+ local transparencies = attributes.list[attributes.private('transparency')] or { }
+
+ function otf.registerpalette(name,values)
+ sharedpalettes[name] = values
+ for i=1,#values do
+ local v = values[i]
+ local c = nil
+ local t = nil
+ if type(v) == "table" then
+ c = colors.register(name,"rgb",
+ max(round((v.r or 0)*255),255)/255,
+ max(round((v.g or 0)*255),255)/255,
+ max(round((v.b or 0)*255),255)/255
+ )
+ else
+ c = colors[v]
+ t = transparencies[v]
+ end
+ if c and t then
+ values[i] = hash["pdf:direct:" .. lpdf.color(1,c) .. " " .. lpdf.transparency(t)]
+ elseif c then
+ values[i] = hash["pdf:direct:" .. lpdf.color(1,c)]
+ elseif t then
+ values[i] = hash["pdf:direct:" .. lpdf.color(1,t)]
+ end
+ end
+ end
+
+else -- for generic
+
+ function otf.registerpalette(name,values)
+ sharedpalettes[name] = values
+ for i=1,#values do
+ local v = values[i]
+ values[i] = hash[f_color(
+ max(round((v.r or 0)*255),255)/255,
+ max(round((v.g or 0)*255),255)/255,
+ max(round((v.b or 0)*255),255)/255
+ )]
+ end
+ end
+
+end
+
+-- We need to force page first because otherwise the q's get outside
+-- the font switch and as a consequence the next character has no font
+-- set (well, it has: the preceding one). As a consequence these fonts
+-- are somewhat inefficient as each glyph gets the font set. It's a
+-- side effect of the fact that a font is handled when a character gets
+-- flushed.
+
+local function convert(t,k)
+ local v = { }
+ for i=1,#k do
+ local p = k[i]
+ local r, g, b = p[1], p[2], p[3]
+ if r == g and g == b then
+ v[i] = hash[f_gray(r/255)]
+ else
+ v[i] = hash[f_color(r/255,g/255,b/255)]
+ end
+ end
+ t[k] = v
+ return v
+end
+
+local function initializecolr(tfmdata,kind,value) -- hm, always value
+ if value then
+ local resources = tfmdata.resources
+ local palettes = resources.colorpalettes
+ if palettes then
+ --
+ local converted = resources.converted
+ if not converted then
+ converted = setmetatableindex(convert)
+ resources.converted = converted
+ end
+ local colorvalues = sharedpalettes[value] or converted[palettes[tonumber(value) or 1] or palettes[1]] or { }
+ local classes = #colorvalues
+ if classes == 0 then
+ return
+ end
+ --
+ local characters = tfmdata.characters
+ local descriptions = tfmdata.descriptions
+ local properties = tfmdata.properties
+ --
+ properties.virtualized = true
+ tfmdata.fonts = {
+ { id = 0 }
+ }
+ local widths = setmetatableindex(function(t,k)
+ local v = { "right", -k }
+ t[k] = v
+ return v
+ end)
+ --
+ local getactualtext = otf.getactualtext
+ local default = colorvalues[#colorvalues]
+ local b, e = getactualtext(tounicode(0xFFFD))
+ local start = { "special", "pdf:page:q" }
+ local stop = { "special", "pdf:raw:Q" }
+ local actualb = { "special", "pdf:page:" .. b } -- saves tables
+ local actuale = { "special", "pdf:page:" .. e } -- saves tables
+ --
+ local cache = setmetatableindex(function(t,k)
+ local v = { "char", k }
+ t[k] = v
+ return v
+ end)
+ --
+ for unicode, character in next, characters do
+ local description = descriptions[unicode]
+ if description then
+ local colorlist = description.colors
+ if colorlist then
+ local u = description.unicode or characters[unicode].unicode
+ local w = character.width or 0
+ local s = #colorlist
+ local goback = w ~= 0 and widths[w] or nil -- needs checking: are widths the same
+ local t = {
+ start,
+ not u and actualb or { "special", "pdf:raw:" .. getactualtext(tounicode(u)) }
+ }
+ local n = 2
+ local l = nil
+ for i=1,s do
+ local entry = colorlist[i]
+ local v = colorvalues[entry.class] or default
+ if v and l ~= v then
+ n = n + 1 t[n] = v
+ l = v
+ end
+ n = n + 1 t[n] = cache[entry.slot]
+ if s > 1 and i < s and goback then
+ n = n + 1 t[n] = goback
+ end
+ end
+ n = n + 1 t[n] = actuale
+ n = n + 1 t[n] = stop
+ character.commands = t
+ end
+ end
+ end
+ end
+ end
+end
+
+fonts.handlers.otf.features.register {
+ name = "colr",
+ description = "color glyphs",
+ manipulators = {
+ base = initializecolr,
+ node = initializecolr,
+ }
+}
+
+do
+
+ -- local f_setstream = formatters[ [[io.savedata("svg-glyph-%05i",%q)]] ]
+ -- local f_getstream = formatters[ [[svg-glyph-%05i]] ]
+
+ -- function otfsvg.storepdfdata(pdf)
+ -- nofstreams = nofstreams + 1
+ -- storepdfdata = function(pdf)
+ -- nofstreams = nofstreams + 1
+ -- return f_setstream(nofstreams,pdf), f_getstream(nofstreams)
+ -- end
+ -- end
+
+ local nofstreams = 0
+ local f_name = formatters[ [[pdf-glyph-%05i]] ]
+ local f_used = context and formatters[ [[original:///%s]] ] or formatters[ [[%s]] ]
+ local hashed = { }
+ local cache = { }
+
+ function otf.storepdfdata(pdf)
+ local done = hashed[pdf]
+ if not done then
+ nofstreams = nofstreams + 1
+ local o, n = epdf.openMemStream(pdf,#pdf,f_name(nofstreams))
+ cache[n] = o -- we need to keep in mem
+ done = f_used(n)
+ hashed[pdf] = done
+ end
+ return nil, done, nil
+ end
+
+ -- maybe more efficient but much slower (and we hash already)
+ --
+ -- if context then
+ --
+ -- local storepdfdata = otf.storepdfdata
+ -- local initialized = false
+ --
+ -- function otf.storepdfdata(pdf)
+ -- if not initialized then
+ -- if resolvers.setmemstream then
+ -- local f_setstream = formatters[ [[resolvers.setmemstream("pdf-glyph-%05i",%q,true)]] ]
+ -- local f_getstream = formatters[ [[memstream:///pdf-glyph-%05i]] ]
+ -- local f_nilstream = formatters[ [[resolvers.resetmemstream("pdf-glyph-%05i",true)]] ]
+ -- storepdfdata = function(pdf)
+ -- local done = hashed[pdf]
+ -- local set = nil
+ -- local reset = nil
+ -- if not done then
+ -- nofstreams = nofstreams + 1
+ -- set = f_setstream(nofstreams,pdf)
+ -- done = f_getstream(nofstreams)
+ -- reset = f_nilstream(nofstreams)
+ -- hashed[pdf] = done
+ -- end
+ -- return set, done, reset
+ -- end
+ -- otf.storepdfdata = storepdfdata
+ -- end
+ -- initialized = true
+ -- end
+ -- return storepdfdata(pdf)
+ -- end
+ --
+ -- end
+
+end
+
+local function pdftovirtual(tfmdata,pdfshapes,kind) -- kind = sbix|svg
+ if not tfmdata or not pdfshapes or not kind then
+ return
+ end
+ --
+ local characters = tfmdata.characters
+ local properties = tfmdata.properties
+ local parameters = tfmdata.parameters
+ local hfactor = parameters.hfactor
+ --
+ properties.virtualized = true
+ --
+ tfmdata.fonts = {
+ { id = 0 }
+ }
+ --
+ local getactualtext = otf.getactualtext
+ local storepdfdata = otf.storepdfdata
+ --
+ -- local nop = { "nop" }
+ --
+ for unicode, character in sortedhash(characters) do -- sort is nicer for svg
+ local index = character.index
+ if index then
+ local pdf = pdfshapes[index]
+ local typ = type(pdf)
+ local data = nil
+ local dx = nil
+ local dy = nil
+ if typ == "table" then
+ data = pdf.data
+ dx = pdf.dx or 0
+ dy = pdf.dy or 0
+ elseif typ == "string" then
+ data = pdf
+ dx = 0
+ dy = 0
+ end
+ if data then
+ local setcode, name, nilcode = storepdfdata(data)
+ if name then
+ local bt, et = getactualtext(unicode)
+ local wd = character.width or 0
+ local ht = character.height or 0
+ local dp = character.depth or 0
+ character.commands = {
+ { "special", "pdf:direct:" .. bt },
+ { "down", dp + dy * hfactor },
+ { "right", dx * hfactor },
+ -- setcode and { "lua", setcode } or nop,
+ { "image", { filename = name, width = wd, height = ht, depth = dp } },
+ -- nilcode and { "lua", nilcode } or nop,
+ { "special", "pdf:direct:" .. et },
+ }
+ character[kind] = true
+ end
+ end
+ end
+ end
+end
+
+local otfsvg = otf.svg or { }
+otf.svg = otfsvg
+otf.svgenabled = true
+
+do
+
+ local report_svg = logs.reporter("fonts","svg conversion")
+
+ local loaddata = io.loaddata
+ local savedata = io.savedata
+ local remove = os.remove
+
+ if context and xml.convert then
+
+ local xmlconvert = xml.convert
+ local xmlfirst = xml.first
+
+ function otfsvg.filterglyph(entry,index)
+ local svg = xmlconvert(entry.data)
+ local root = svg and xmlfirst(svg,"/svg[@id='glyph"..index.."']")
+ local data = root and tostring(root)
+ -- report_svg("data for glyph %04X: %s",index,data)
+ return data
+ end
+
+ else
+
+ function otfsvg.filterglyph(entry,index) -- can be overloaded
+ return entry.data
+ end
+
+ end
+
+ local runner = sandbox and sandbox.registerrunner {
+ name = "otfsvg",
+ program = "inkscape",
+ method = "pipeto",
+ template = "--shell > temp-otf-svg-shape.log",
+ reporter = report_svg,
+ }
+
+ if not runner then
+ --
+ -- poor mans variant for generic:
+ --
+ runner = function()
+ return io.open("inkscape --shell > temp-otf-svg-shape.log","w")
+ end
+ end
+
+ function otfsvg.topdf(svgshapes)
+ local pdfshapes = { }
+ local inkscape = runner()
+ if inkscape then
+ local nofshapes = #svgshapes
+ local f_svgfile = formatters["temp-otf-svg-shape-%i.svg"]
+ local f_pdffile = formatters["temp-otf-svg-shape-%i.pdf"]
+ local f_convert = formatters["%s --export-pdf=%s\n"]
+ local filterglyph = otfsvg.filterglyph
+ local nofdone = 0
+ report_svg("processing %i svg containers",nofshapes)
+ statistics.starttiming()
+ for i=1,nofshapes do
+ local entry = svgshapes[i]
+ for index=entry.first,entry.last do
+ local data = filterglyph(entry,index)
+ if data and data ~= "" then
+ local svgfile = f_svgfile(index)
+ local pdffile = f_pdffile(index)
+ savedata(svgfile,data)
+ inkscape:write(f_convert(svgfile,pdffile))
+ pdfshapes[index] = true
+ nofdone = nofdone + 1
+ if nofdone % 100 == 0 then
+ report_svg("%i shapes processed",nofdone)
+ end
+ end
+ end
+ end
+ inkscape:write("quit\n")
+ inkscape:close()
+ report_svg("processing %i pdf results",nofshapes)
+ for index in next, pdfshapes do
+ local svgfile = f_svgfile(index)
+ local pdffile = f_pdffile(index)
+ pdfshapes[index] = loaddata(pdffile)
+ remove(svgfile)
+ remove(pdffile)
+ end
+ statistics.stoptiming()
+ if statistics.elapsedseconds then
+ report_svg("svg conversion time %s",statistics.elapsedseconds() or "-")
+ end
+ end
+ return pdfshapes
+ end
+
+end
+
+local function initializesvg(tfmdata,kind,value) -- hm, always value
+ if value and otf.svgenabled then
+ local svg = tfmdata.properties.svg
+ local hash = svg and svg.hash
+ local timestamp = svg and svg.timestamp
+ if not hash then
+ return
+ end
+ local pdffile = containers.read(otf.pdfcache,hash)
+ local pdfshapes = pdffile and pdffile.pdfshapes
+ if not pdfshapes or pdffile.timestamp ~= timestamp then
+ local svgfile = containers.read(otf.svgcache,hash)
+ local svgshapes = svgfile and svgfile.svgshapes
+ pdfshapes = svgshapes and otfsvg.topdf(svgshapes) or { }
+ containers.write(otf.pdfcache, hash, {
+ pdfshapes = pdfshapes,
+ timestamp = timestamp,
+ })
+ end
+ pdftovirtual(tfmdata,pdfshapes,"svg")
+ end
+end
+
+fonts.handlers.otf.features.register {
+ name = "svg",
+ description = "svg glyphs",
+ manipulators = {
+ base = initializesvg,
+ node = initializesvg,
+ }
+}
+
+-- This can be done differently e.g. with ffi and gm and we can share code anway. Using
+-- batchmode in gm is not faster and as it accumulates we would need to flush all
+-- individual shapes.
+
+local otfsbix = otf.sbix or { }
+otf.sbix = otfsbix
+otf.sbixenabled = true
+
+do
+
+ -- for now png but also other bitmap formats
+
+ local report_sbix = logs.reporter("fonts","sbix conversion")
+
+ local loaddata = io.loaddata
+ local savedata = io.savedata
+ local remove = os.remove
+
+ local runner = sandbox and sandbox.registerrunner {
+ name = "otfsbix",
+ program = "gm",
+ template = "convert -quality 100 temp-otf-sbix-shape.sbix temp-otf-sbix-shape.pdf > temp-otf-svg-shape.log",
+ -- reporter = report_sbix,
+ }
+
+ if not runner then
+ --
+ -- poor mans variant for generic:
+ --
+ runner = function()
+ return os.execute("gm convert -quality 100 temp-otf-sbix-shape.sbix temp-otf-sbix-shape.pdf > temp-otf-svg-shape.log")
+ end
+ end
+
+ -- Alternatively we can create a single pdf file with -adjoin and then pick up pages from
+ -- that file but creating thousands of small files is no fun either.
+
+ function otfsbix.topdf(sbixshapes)
+ local pdfshapes = { }
+ local sbixfile = "temp-otf-sbix-shape.sbix"
+ local pdffile = "temp-otf-sbix-shape.pdf"
+ local nofdone = 0
+ local indices = sortedkeys(sbixshapes) -- can be sparse
+ local nofindices = #indices
+ report_sbix("processing %i sbix containers",nofindices)
+ statistics.starttiming()
+ for i=1,nofindices do
+ local index = indices[i]
+ local entry = sbixshapes[index]
+ local data = entry.data
+ local x = entry.x
+ local y = entry.y
+ savedata(sbixfile,data)
+ runner()
+ pdfshapes[index] = {
+ x = x ~= 0 and x or nil,
+ y = y ~= 0 and y or nil,
+ data = loaddata(pdffile),
+ }
+ nofdone = nofdone + 1
+ if nofdone % 100 == 0 then
+ report_sbix("%i shapes processed",nofdone)
+ end
+ end
+ report_sbix("processing %i pdf results",nofindices)
+ remove(sbixfile)
+ remove(pdffile)
+ statistics.stoptiming()
+ if statistics.elapsedseconds then
+ report_sbix("sbix conversion time %s",statistics.elapsedseconds() or "-")
+ end
+ return pdfshapes
+ -- end
+ end
+
+end
+
+local function initializesbix(tfmdata,kind,value) -- hm, always value
+ if value and otf.sbixenabled then
+ local sbix = tfmdata.properties.sbix
+ local hash = sbix and sbix.hash
+ local timestamp = sbix and sbix.timestamp
+ if not hash then
+ return
+ end
+ local pdffile = containers.read(otf.pdfcache,hash)
+ local pdfshapes = pdffile and pdffile.pdfshapes
+ if not pdfshapes or pdffile.timestamp ~= timestamp then
+ local sbixfile = containers.read(otf.sbixcache,hash)
+ local sbixshapes = sbixfile and sbixfile.sbixshapes
+ pdfshapes = sbixshapes and otfsbix.topdf(sbixshapes) or { }
+ containers.write(otf.pdfcache, hash, {
+ pdfshapes = pdfshapes,
+ timestamp = timestamp,
+ })
+ end
+ --
+ pdftovirtual(tfmdata,pdfshapes,"sbix")
+ end
+end
+
+fonts.handlers.otf.features.register {
+ name = "sbix",
+ description = "sbix glyphs",
+ manipulators = {
+ base = initializesbix,
+ node = initializesbix,
+ }
+}
+
diff --git a/tex/context/base/mkiv/font-odv.lua b/tex/context/base/mkiv/font-odv.lua
index 6b9a5a9e4..345b17a52 100644
--- a/tex/context/base/mkiv/font-odv.lua
+++ b/tex/context/base/mkiv/font-odv.lua
@@ -105,7 +105,7 @@ local glyph_code = nodecodes.glyph
local handlers = otf.handlers
local methods = fonts.analyzers.methods
-local otffeatures = fonts.constructors.newfeatures("otf")
+local otffeatures = fonts.constructors.features.otf
local registerotffeature = otffeatures.register
local nuts = nodes.nuts
@@ -126,9 +126,9 @@ local setprop = nuts.setprop
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 flush_node = nuts.flush_node
local copyinjection = nodes.injections.copy -- KE: is this necessary? HH: probably not as positioning comes later and we rawget/set
@@ -693,7 +693,7 @@ local function deva_reorder(head,start,stop,font,attr,nbspaces)
if current == stop then
stop = getprev(stop)
head = remove_node(head,current)
- free_node(current)
+ flush_node(current)
return head, stop, nbspaces
else
nbspaces = nbspaces + 1
@@ -714,9 +714,9 @@ local function deva_reorder(head,start,stop,font,attr,nbspaces)
local tmp = next and getnext(next) or nil -- needs checking
local changestop = next == stop
local tempcurrent = copy_node(next)
- copyinjection(tempcurrent,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
+ copyinjection(nextcurrent,current) -- KE: necessary? HH: probably not as positioning comes later and we rawget/set
setnext(tempcurrent,nextcurrent)
setprev(nextcurrent,tempcurrent)
setprop(tempcurrent,a_state,s_blwf)
@@ -725,7 +725,7 @@ local function deva_reorder(head,start,stop,font,attr,nbspaces)
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
+ 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
@@ -735,7 +735,7 @@ local function deva_reorder(head,start,stop,font,attr,nbspaces)
if tmp then
setprev(tmp,current)
end
- free_node(freenode)
+ flush_node(freenode)
flush_list(tempcurrent)
if changestop then
stop = current
@@ -1018,7 +1018,7 @@ local function deva_reorder(head,start,stop,font,attr,nbspaces)
if getchar(base) == c_nbsp then
nbspaces = nbspaces - 1
head = remove_node(head,base)
- free_node(base)
+ flush_node(base)
end
return head, stop, nbspaces
@@ -1269,7 +1269,7 @@ function handlers.devanagari_remove_joiners(head,start,kind,lookupname,replaceme
setnext(prev,stop)
end
if head == start then
- head = stop
+ head = stop
end
flush_list(start)
return head, stop, true
@@ -1548,7 +1548,7 @@ local function dev2_reorder(head,start,stop,font,attr,nbspaces) -- maybe do a pa
if current == stop then
stop = getprev(stop)
head = remove_node(head,current)
- free_node(current)
+ flush_node(current)
return head, stop, nbspaces
else
nbspaces = nbspaces + 1
@@ -1578,7 +1578,7 @@ local function dev2_reorder(head,start,stop,font,attr,nbspaces) -- maybe do a pa
if halant[getchar(current)] then
setnext(getnext(current),tmp)
local nc = copy_node(current)
- copyinjection(nc,current)
+ copyinjection(nc,current)
setchar(current,dotted_circle)
head = insert_node_after(head,current,nc)
else
@@ -1642,17 +1642,17 @@ local function dev2_reorder(head,start,stop,font,attr,nbspaces) -- maybe do a pa
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
---
+ -- 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
@@ -1767,7 +1767,7 @@ end
if getchar(base) == c_nbsp then
nbspaces = nbspaces - 1
head = remove_node(head, base)
- free_node(base)
+ flush_node(base)
end
return head, stop, nbspaces
@@ -2081,7 +2081,7 @@ end
local function inject_syntax_error(head,current,mark)
local signal = copy_node(current)
- copyinjection(signal,current)
+ copyinjection(signal,current)
if mark == pre_mark then
setchar(signal,dotted_circle)
else
@@ -2127,8 +2127,8 @@ function methods.deva(head,font,attr)
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)
+ 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)
diff --git a/tex/context/base/mkiv/font-off.lua b/tex/context/base/mkiv/font-off.lua
index 82426552e..b8fadb634 100644
--- a/tex/context/base/mkiv/font-off.lua
+++ b/tex/context/base/mkiv/font-off.lua
@@ -11,11 +11,11 @@ local round = math.round
local setmetatableindex = table.setmetatableindex
local fontloader = fontloader
-local font_to_table = fontloader.to_table
+----- font_to_table = fontloader.to_table
local open_font = fontloader.open
-local get_font_info = fontloader.info
+----- get_font_info = fontloader.info
local close_font = fontloader.close
-local font_fields = fontloader.fields
+----- font_fields = fontloader.fields
-- table={
-- ["familyname"]="TeXGyrePagella",
diff --git a/tex/context/base/mkiv/font-one.lua b/tex/context/base/mkiv/font-one.lua
index a9f78f4fb..d9b9c65df 100644
--- a/tex/context/base/mkiv/font-one.lua
+++ b/tex/context/base/mkiv/font-one.lua
@@ -29,42 +29,45 @@ local bxor, rshift = bit32.bxor, bit32.rshift
local P, S, R, Cmt, C, Ct, Cs, Carg = lpeg.P, lpeg.S, lpeg.R, lpeg.Cmt, lpeg.C, lpeg.Ct, lpeg.Cs, lpeg.Carg
local lpegmatch, patterns = lpeg.match, lpeg.patterns
-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)
-local trace_loading = false trackers.register("afm.loading", function(v) trace_loading = v end)
-local trace_defining = false trackers.register("fonts.defining", function(v) trace_defining = v end)
+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)
+local trace_loading = false trackers.register("afm.loading", function(v) trace_loading = v end)
+local trace_defining = false trackers.register("fonts.defining", function(v) trace_defining = v end)
-local report_afm = logs.reporter("fonts","afm loading")
+local report_afm = logs.reporter("fonts","afm loading")
-local setmetatableindex = table.setmetatableindex
-local derivetable = table.derive
+local setmetatableindex = table.setmetatableindex
+local derivetable = table.derive
-local findbinfile = resolvers.findbinfile
+local findbinfile = resolvers.findbinfile
-local definers = fonts.definers
-local readers = fonts.readers
-local constructors = fonts.constructors
+local definers = fonts.definers
+local readers = fonts.readers
+local constructors = fonts.constructors
-local afm = constructors.newhandler("afm")
-local pfb = constructors.newhandler("pfb")
-local otf = fonts.handlers.otf
+local afm = constructors.handlers.afm
+local pfb = constructors.handlers.pfb
+local otf = fonts.handlers.otf
-local otfreaders = otf.readers
-local otfenhancers = otf.enhancers
+local otfreaders = otf.readers
+local otfenhancers = otf.enhancers
-local afmfeatures = constructors.newfeatures("afm")
-local registerafmfeature = afmfeatures.register
+local afmfeatures = constructors.features.afm
+local registerafmfeature = afmfeatures.register
-afm.version = 1.512 -- incrementing this number one up will force a re-cache
-afm.cache = containers.define("fonts", "afm", afm.version, true)
-afm.autoprefixed = true -- this will become false some day (catches texnansi-blabla.*)
+local afmenhancers = constructors.enhancers.afm
+local registerafmenhancer = afmenhancers.register
-afm.helpdata = { } -- set later on so no local for this
-afm.syncspace = true -- when true, nicer stretch values
+afm.version = 1.512 -- incrementing this number one up will force a re-cache
+afm.cache = containers.define("fonts", "one", afm.version, true)
+afm.autoprefixed = true -- this will become false some day (catches texnansi-blabla.*)
-local overloads = fonts.mappings.overloads
+afm.helpdata = { } -- set later on so no local for this
+afm.syncspace = true -- when true, nicer stretch values
-local applyruntimefixes = fonts.treatments and fonts.treatments.applyfixes
+local overloads = fonts.mappings.overloads
+
+local applyruntimefixes = fonts.treatments and fonts.treatments.applyfixes
--[[ldx--
<p>We cache files. Caching is taken care of in the loader. We cheat a bit by adding
@@ -76,35 +79,6 @@ fashion and later we transform it to sequences. Then we apply some methods also
used in opentype fonts (like <t>tlig</t>).</p>
--ldx]]--
-local enhancers = {
- -- It's cleaner to implement them after we've seen what we are
- -- dealing with.
-}
-
-local steps = {
- "unify names",
- "add ligatures",
- "add extra kerns",
- "normalize features",
- "fix names",
--- "add tounicode data",
-}
-
-local function applyenhancers(data,filename)
- for i=1,#steps do
- local step = steps[i]
- local enhancer = enhancers[step]
- if enhancer then
- if trace_loading then
- report_afm("applying enhancer %a",step)
- end
- enhancer(data,filename)
- else
- report_afm("invalid enhancer %a",step)
- end
- end
-end
-
function afm.load(filename)
filename = resolvers.findfile(filename,'afm') or ""
if filename ~= "" and not fonts.names.ignoredfile(filename) then
@@ -128,7 +102,7 @@ function afm.load(filename)
report_afm("reading %a",filename)
data = afm.readers.loadfont(filename,pfbname)
if data then
- applyenhancers(data,filename)
+ afmenhancers.apply(data,filename)
-- otfreaders.addunicodetable(data) -- only when not done yet
fonts.mappings.addtounicode(data,filename)
-- otfreaders.extend(data)
@@ -161,7 +135,7 @@ end
local uparser = fonts.mappings.makenameparser() -- each time
-enhancers["unify names"] = function(data, filename)
+local function enhance_unify_names(data, filename)
local unicodevector = fonts.encodings.agl.unicodes -- loaded runtime in context
local unicodes = { }
local names = { }
@@ -217,7 +191,7 @@ end
local everywhere = { ["*"] = { ["*"] = true } } -- or: { ["*"] = { "*" } }
local noflags = { false, false, false, false }
-enhancers["normalize features"] = function(data)
+local function enhance_normalize_features(data)
local ligatures = setmetatableindex("table")
local kerns = setmetatableindex("table")
local extrakerns = setmetatableindex("table")
@@ -318,7 +292,7 @@ enhancers["normalize features"] = function(data)
data.resources.sequences = sequences
end
-enhancers["fix names"] = function(data)
+local function enhance_fix_names(data)
for k, v in next, data.descriptions do
local n = v.name
local r = overloads[n]
@@ -365,14 +339,10 @@ local addthem = function(rawdata,ligatures)
end
end
-enhancers["add ligatures"] = function(rawdata)
+local function enhance_add_ligatures(rawdata)
addthem(rawdata,afm.helpdata.ligatures)
end
--- enhancers["add tex ligatures"] = function(rawdata)
--- addthem(rawdata,afm.helpdata.texligatures)
--- end
-
--[[ldx--
<p>We keep the extra kerns in separate kerning tables so that we can use
them selectively.</p>
@@ -385,7 +355,7 @@ them selectively.</p>
-- we don't use the character database. (Ok, we can have a context specific
-- variant).
-enhancers["add extra kerns"] = function(rawdata) -- using shcodes is not robust here
+local function enhance_add_extra_kerns(rawdata) -- using shcodes is not robust here
local descriptions = rawdata.descriptions
local resources = rawdata.resources
local unicodes = resources.unicodes
@@ -752,18 +722,12 @@ end
<p>We have the usual two modes and related features initializers and processors.</p>
--ldx]]--
-local function setmode(tfmdata,value)
- if value then
- tfmdata.properties.mode = lower(value)
- end
-end
-
registerafmfeature {
name = "mode",
description = "mode",
initializers = {
- base = setmode,
- node = setmode,
+ base = otf.modeinitializer,
+ node = otf.modeinitializer,
}
}
@@ -782,8 +746,6 @@ registerafmfeature {
-- readers
-local check_tfm = readers.check_tfm
-
fonts.formats.afm = "type1"
fonts.formats.pfb = "type1"
@@ -820,7 +782,8 @@ function readers.afm(specification,method)
tfmdata = check_afm(specification,specification.name .. "." .. forced)
end
if not tfmdata then
- method = method or definers.method or "afm or tfm"
+ local check_tfm = readers.check_tfm
+ method = (check_tfm and (method or definers.method or "afm or tfm")) or "afm"
if method == "tfm" then
tfmdata = check_tfm(specification,specification.name)
elseif method == "afm" then
@@ -855,3 +818,12 @@ function readers.pfb(specification,method) -- only called when forced
swap("specification")
return readers.afm(specification,method)
end
+
+-- now we register them
+
+registerafmenhancer("unify names", enhance_unify_names)
+registerafmenhancer("add ligatures", enhance_add_ligatures)
+registerafmenhancer("add extra kerns", enhance_add_extra_kerns)
+registerafmenhancer("normalize features", enhance_normalize_features)
+registerafmenhancer("check extra features", otfenhancers.enhance)
+registerafmenhancer("fix names", enhance_fix_names)
diff --git a/tex/context/base/mkiv/font-onr.lua b/tex/context/base/mkiv/font-onr.lua
index a4969ad73..85d3604b7 100644
--- a/tex/context/base/mkiv/font-onr.lua
+++ b/tex/context/base/mkiv/font-onr.lua
@@ -21,23 +21,21 @@ add features.</p>
local fonts, logs, trackers, resolvers = fonts, logs, trackers, resolvers
-local next, type, tonumber, rawget = next, type, tonumber, rawget
+local next, type, tonumber, rawget, rawset = next, type, tonumber, rawget, rawset
local match, lower, gsub, strip, find = string.match, string.lower, string.gsub, string.strip, string.find
local char, byte, sub = string.char, string.byte, string.sub
local abs = math.abs
local bxor, rshift = bit32.bxor, bit32.rshift
-local P, S, R, Cmt, C, Ct, Cs, Carg = lpeg.P, lpeg.S, lpeg.R, lpeg.Cmt, lpeg.C, lpeg.Ct, lpeg.Cs, lpeg.Carg
+local P, S, R, Cmt, C, Ct, Cs, Carg, Cf, Cg = lpeg.P, lpeg.S, lpeg.R, lpeg.Cmt, lpeg.C, lpeg.Ct, lpeg.Cs, lpeg.Carg, lpeg.Cf, lpeg.Cg
local lpegmatch, patterns = lpeg.match, lpeg.patterns
local trace_indexing = false trackers.register("afm.indexing", function(v) trace_indexing = v end)
local trace_loading = false trackers.register("afm.loading", function(v) trace_loading = v end)
local report_afm = logs.reporter("fonts","afm loading")
-local report_afm = logs.reporter("fonts","pfb loading")
+local report_pfb = logs.reporter("fonts","pfb loading")
-fonts = fonts or { }
-local handlers = fonts.handlers or { }
-fonts.handlers = handlers
+local handlers = fonts.handlers
local afm = handlers.afm or { }
handlers.afm = afm
local readers = afm.readers or { }
@@ -52,42 +50,10 @@ and <l n='otf'/> reader.</p>
and new vectors (we actually had one bad vector with the old loader).</p>
--ldx]]--
-local get_indexes
+local get_indexes, get_shapes
do
- 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
@@ -101,23 +67,107 @@ do
return char(plain)
end
- decrypt = function(binary)
- r, c1, c2, n = 55665, 52845, 22719, 4
+ decrypt = function(binary,initial,seed)
+ r, c1, c2, n = initial, 52845, 22719, seed
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
+ -- decrypt = function(binary,initial,seed)
+ -- r, c1, c2, n = initial, 52845, 22719, seed
-- binary = lpegmatch(pattern,binary)
-- return sub(binary,n+1)
-- end
end
- local function loadpfbvector(filename)
+ local charstrings = P("/CharStrings")
+ local subroutines = P("/Subrs")
+ local encoding = P("/Encoding")
+ local dup = P("dup")
+ local put = P("put")
+ local array = P("array")
+ local name = P("/") * C((R("az")+R("AZ")+R("09")+S("-_."))^1)
+ local digits = R("09")^1
+ local cardinal = digits / tonumber
+ local spaces = P(" ")^1
+ local spacing = patterns.whitespace^0
+
+ local routines, vector, chars, n, m
+
+ local initialize = function(str,position,size)
+ n = 0
+ m = size -- % tonumber(size)
+ return position + 1
+ end
+
+ local setroutine = function(str,position,index,size)
+ local forward = position + tonumber(size)
+ local stream = decrypt(sub(str,position+1,forward),4330,4)
+ routines[index] = { byte(stream,1,#stream) }
+ return forward
+ end
+
+ local setvector = function(str,position,name,size)
+ local forward = position + tonumber(size)
+ if n >= m then
+ return #str
+ elseif forward < #str then
+ vector[n] = name
+ n = n + 1 -- we compensate for notdef at the cff loader end
+ return forward
+ else
+ return #str
+ end
+ end
+
+ local setshapes = function(str,position,name,size)
+ local forward = position + tonumber(size)
+ local stream = sub(str,position+1,forward)
+ if n > m then
+ return #str
+ elseif forward < #str then
+ vector[n] = name
+ n = n + 1
+ chars [n] = decrypt(stream,4330,4)
+ return forward
+ else
+ return #str
+ end
+ end
+
+ local p_rd = spacing * (P("RD") + P("-|"))
+ local p_np = spacing * (P("NP") + P( "|"))
+ local p_nd = spacing * (P("ND") + P( "|"))
+
+ local p_filterroutines = -- dup <i> <n> RD or -| <n encrypted bytes> NP or |
+ (1-subroutines)^0 * subroutines * spaces * Cmt(cardinal,initialize)
+ * (Cmt(cardinal * spaces * cardinal * p_rd, setroutine) * p_np + P(1))^1
+
+ local p_filtershapes = -- /foo <n> RD <n encrypted bytes> ND
+ (1-charstrings)^0 * charstrings * spaces * Cmt(cardinal,initialize)
+ * (Cmt(name * spaces * cardinal * p_rd, setshapes) * p_nd + P(1))^1
+
+ local p_filternames = Ct (
+ (1-charstrings)^0 * charstrings * spaces * Cmt(cardinal,initialize)
+ * (Cmt(name * spaces * cardinal, setvector) + P(1))^1
+ )
+
+ -- /Encoding 256 array
+ -- 0 1 255 {1 index exch /.notdef put} for
+ -- dup 0 /Foo put
+
+ local p_filterencoding =
+ (1-encoding)^0 * encoding * spaces * digits * spaces * array * (1-dup)^0
+ * Cf(
+ Ct("") * Cg(spacing * dup * spaces * cardinal * spaces * name * spaces * put)^1
+ ,rawset)
+
+ -- if one of first 4 not 0-9A-F then binary else hex
+
+ local function loadpfbvector(filename,shapestoo)
-- for the moment limited to encoding only
local data = io.loaddata(resolvers.findfile(filename))
@@ -139,24 +189,43 @@ do
return
end
- binary = decrypt(binary,4)
-
- local vector = lpegmatch(p_filternames,binary)
-
- if vector[1] == ".notdef" then
- -- tricky
- vector[0] = table.remove(vector,1)
+ binary = decrypt(binary,55665,4)
+
+ local names = { }
+ local encoding = lpegmatch(p_filterencoding,ascii)
+ local glyphs = { }
+
+ routines, vector, chars = { }, { }, { }
+
+ if shapestoo then
+ lpegmatch(p_filterroutines,binary)
+ lpegmatch(p_filtershapes,binary)
+ local data = {
+ dictionaries = {
+ {
+ charstrings = chars,
+ charset = vector,
+ subroutines = routines,
+ }
+ },
+ }
+ fonts.handlers.otf.readers.parsecharstrings(false,data,glyphs,true,true)
+ else
+ lpegmatch(p_filternames,binary)
end
- if not vector then
- report_pfb("no vector in %a",filename)
- return
- end
+ names = vector
+
+ routines, vector, chars = nil, nil, nil
- return vector
+ return names, encoding, glyphs
end
+ local pfb = handlers.pfb or { }
+ handlers.pfb = pfb
+ pfb.loadvector = loadpfbvector
+
get_indexes = function(data,pfbname)
local vector = loadpfbvector(pfbname)
if vector then
@@ -177,6 +246,11 @@ do
end
end
+ get_shapes = function(pfbname)
+ local vector, encoding, glyphs = loadpfbvector(pfbname,true)
+ return glyphs
+ end
+
end
--[[ldx--
@@ -389,20 +463,40 @@ function readers.loadfont(afmname,pfbname)
local data = read(resolvers.findfile(afmname),fullparser)
if data then
if not pfbname or pfbname == "" then
- pfbname = file.replacesuffix(file.nameonly(afmname),"pfb")
- pfbname = resolvers.findfile(pfbname)
+ pfbname = resolvers.findfile(file.replacesuffix(file.nameonly(afmname),"pfb"))
end
if pfbname and pfbname ~= "" then
data.resources.filename = resolvers.unresolve(pfbname)
get_indexes(data,pfbname)
- elseif trace_loading then
+ return data
+ else -- if trace_loading then
report_afm("no pfb file for %a",afmname)
- -- data.resources.filename = "unset" -- better than loading the afm file
+ -- better than loading the afm file: data.resources.filename = rawname
+ -- but that will still crash the backend so we just return nothing now
end
- return data
end
end
+-- for now, todo: n and check with otf (no afm needed here)
+
+function readers.loadshapes(filename)
+ local fullname = resolvers.findfile(filename) or ""
+ if fullname == "" then
+ return {
+ filename = "not found: " .. filename,
+ glyphs = { }
+ }
+ else
+ return {
+ filename = fullname,
+ format = "opentype",
+ glyphs = get_shapes(fullname) or { },
+ units = 1000,
+ }
+ end
+end
+
+
function readers.getinfo(filename)
local data = read(resolvers.findfile(filename),infoparser)
if data then
diff --git a/tex/context/base/mkiv/font-osd.lua b/tex/context/base/mkiv/font-osd.lua
index 6ff2e38b6..ca20f6782 100644
--- a/tex/context/base/mkiv/font-osd.lua
+++ b/tex/context/base/mkiv/font-osd.lua
@@ -79,13 +79,10 @@ 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 otffeatures = fonts.constructors.features.otf
local registerotffeature = otffeatures.register
local nuts = nodes.nuts
@@ -110,9 +107,9 @@ 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 flush_node = nuts.flush_node
local copyinjection = nodes.injections.copy -- KE: is this necessary? HH: probably not as positioning comes later and we rawget/set
@@ -616,13 +613,12 @@ local function initializedevanagi(tfmdata)
local steps = sequence.steps
local nofsteps = sequence.nofsteps
local features = sequence.features
- if features["rphf"] then
- -- deva
+ local has_rphf = features.rphf
+ local has_blwf = features.blwf
+ if has_rphf and has_rphf.deva then
devanagari.reph = true
- elseif features["blwf"] then
- -- deva
+ elseif has_blwf and has_blwf.deva then
devanagari.vattu = true
- -- dev2
for i=1,nofsteps do
local step = steps[i]
local coverage = step.coverage
@@ -635,59 +631,71 @@ local function initializedevanagi(tfmdata)
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
+ for kind, spec in next, features do -- beware, this is
+ if spec.dev2 and valid[kind] then
+ for i=1,nofsteps do
+ local step = steps[i]
+ local coverage = step.coverage
+ if coverage then
+ local reph = false
+ if kind == "rphf" then
+ --
+ -- KE: I don't understand the rationale behind osdstep. The original if
+ -- statement checked whether coverage is contextual chaining.
+ --
+ -- HH: The osdstep signals that we deal with our own feature here, not
+ -- one in the font itself so it was just a safeguard against us overloading
+ -- something driven by the font.
+ --
+ -- if step.osdstep then -- selective
+ if true then -- always
+ -- 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
- if reph then
- break
- end
+ else
+ -- rphf might be result of other handler/chainproc
end
end
- else
- -- rphf might be result of other handler/chainproc
+ seqsubset[#seqsubset+1] = { kind, coverage, reph }
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 kind == "pref" then
+ 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
- pre_base_reordering_consonants[k] = found
break
end
end
- if found then
- break
- end
end
end
end
@@ -795,7 +803,7 @@ local function deva_reorder(head,start,stop,font,attr,nbspaces)
if current == stop then
stop = getprev(stop)
head = remove_node(head,current)
- free_node(current)
+ flush_node(current)
return head, stop, nbspaces
else
nbspaces = nbspaces + 1
@@ -833,7 +841,7 @@ local function deva_reorder(head,start,stop,font,attr,nbspaces)
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_node(freenode)
flush_list(tempcurrent)
if changestop then
stop = current
@@ -1096,7 +1104,7 @@ local function deva_reorder(head,start,stop,font,attr,nbspaces)
if getchar(base) == c_nbsp then
nbspaces = nbspaces - 1
head = remove_node(head,base)
- free_node(base)
+ flush_node(base)
end
return head, stop, nbspaces
@@ -1132,9 +1140,12 @@ function handlers.devanagari_reorder_matras(head,start) -- no leak
head = remove_node(head,start)
setlink(start,next)
setlink(current,start)
+ -- setlink(current,start,next) -- maybe
start = startnext
break
end
+ else
+ break
end
current = next
end
@@ -1174,12 +1185,12 @@ function handlers.devanagari_reorder_reph(head,start)
local startfont = getfont(start)
local startattr = getprop(start,a_syllabe)
while current do
- local char = ischar(current,font)
+ local char = ischar(current,startfont)
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)
+ local nextchar = ischar(next,startfont)
if nextchar and zw_char[nextchar] and getprop(next,a_syllabe) == startattr then
current = next
next = getnext(current)
@@ -1189,6 +1200,7 @@ function handlers.devanagari_reorder_reph(head,start)
head = remove_node(head,start)
setlink(start,next)
setlink(current,start)
+ -- setlink(current,start,next) -- maybe
start = startnext
startattr = getprop(start,a_syllabe)
break
@@ -1201,14 +1213,14 @@ function handlers.devanagari_reorder_reph(head,start)
if not startnext then
current = getnext(start)
while current do
- local char = ischar(current,font)
+ local char = ischar(current,startfont)
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(getprev(current),start)
setlink(start,current)
+ -- setlink(getprev(current),start,current) -- maybe
start = startnext
startattr = getprop(start,a_syllabe)
break
@@ -1226,7 +1238,7 @@ function handlers.devanagari_reorder_reph(head,start)
current = getnext(start)
local c = nil
while current do
- local char = ischar(current,font)
+ local char = ischar(current,startfont)
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
@@ -1240,9 +1252,9 @@ function handlers.devanagari_reorder_reph(head,start)
if c then
startnext = getnext(start)
head = remove_node(head,start)
- local prev = getprev(c)
- setlink(prev,start)
+ setlink(getprev(c),start)
setlink(start,c)
+ -- setlink(getprev(c),start,c) -- maybe
-- end
start = startnext
startattr = getprop(start,a_syllabe)
@@ -1253,7 +1265,7 @@ function handlers.devanagari_reorder_reph(head,start)
current = start
local next = getnext(current)
while next do
- local nextchar = ischar(next,font)
+ local nextchar = ischar(next,startfont)
if nextchar and getprop(next,a_syllabe) == startattr then --step 6
current = next
next = getnext(current)
@@ -1264,9 +1276,9 @@ function handlers.devanagari_reorder_reph(head,start)
if start ~= current then
startnext = getnext(start)
head = remove_node(head,start)
- local next = getnext(current)
- setlink(start,next)
- setlink(current,"next",start)
+ setlink(start,getnext(current))
+ setlink(current,start)
+ -- setlink(current,start,getnext(current)) -- maybe
start = startnext
end
end
@@ -1293,12 +1305,12 @@ function handlers.devanagari_reorder_pre_base_reordering_consonants(head,start)
local startattr = getprop(start,a_syllabe)
-- can be fast for loop + caching state
while current do
- local char = ischar(current,font)
+ local char = ischar(current,startfont)
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)
+ local nextchar = ischar(next,startfont)
if nextchar and getprop(next,a_syllabe) == startattr then
if nextchar == c_zwnj or nextchar == c_zwj then
current = next
@@ -1310,6 +1322,7 @@ function handlers.devanagari_reorder_pre_base_reordering_consonants(head,start)
removenode(start,start)
setlink(start,next)
setlink(current,start)
+ -- setlink(current,start,next) -- maybe
start = startnext
break
end
@@ -1322,14 +1335,14 @@ function handlers.devanagari_reorder_pre_base_reordering_consonants(head,start)
current = getnext(start)
startattr = getprop(start,a_syllabe)
while current do
- local char = ischar(current,font)
+ local char = ischar(current,startfont)
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(getprev(current),start)
setlink(start,current)
+ -- setlink(getprev(current),start,current) -- maybe
start = startnext
break
end
@@ -1429,21 +1442,7 @@ local function dev2_reorder(head,start,stop,font,attr,nbspaces) -- maybe do a pa
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
+ reph = subset[3]
local current = start
local last = getnext(stop)
while current ~= last do
@@ -1476,7 +1475,7 @@ local function dev2_reorder(head,start,stop,font,attr,nbspaces) -- maybe do a pa
if current ~= stop then
local c = locl[current] or getchar(current)
local found = lookupcache[c]
- if found then
+ if found then -- pre-base: pref Halant + Consonant
local next = getnext(current)
local n = locl[next] or getchar(next)
if found[n] then
@@ -1574,7 +1573,7 @@ local function dev2_reorder(head,start,stop,font,attr,nbspaces) -- maybe do a pa
if current == stop then
stop = getprev(stop)
head = remove_node(head,current)
- free_node(current)
+ flush_node(current)
return head, stop, nbspaces
else
nbspaces = nbspaces + 1
@@ -1694,9 +1693,9 @@ local function dev2_reorder(head,start,stop,font,attr,nbspaces) -- maybe do a pa
end
start = current
end
- local prev = getprev(halfpos)
- setlink(prev,current)
+ setlink(getprev(halfpos),current)
setlink(current,halfpos)
+ -- setlink(getprev(halfpos),current,halfpos) -- maybe
halfpos = current
elseif above_mark[char] then -- After main consonant
target = basepos
@@ -1721,13 +1720,13 @@ local function dev2_reorder(head,start,stop,font,attr,nbspaces) -- maybe do a pa
local prev = getprev(current)
if prev ~= target then
local next = getnext(current)
- setlink(next,prev)
+ setlink(prev,next)
if current == stop then
stop = prev
end
- local next = getnext(target)
- setlink(current,next)
+ setlink(current,getnext(target))
setlink(target,current)
+ -- setlink(target,current,getnext(target)) -- maybe
end
end
end
@@ -1754,8 +1753,7 @@ local function dev2_reorder(head,start,stop,font,attr,nbspaces) -- maybe do a pa
if stop == next then
stop = current
end
- local prev = getprev(c)
- setlink(next,prev)
+ setlink(getprev(c),next)
local nextnext = getnext(next)
setnext(current,nextnext)
local nextnextnext = getnext(nextnext)
@@ -1769,9 +1767,12 @@ local function dev2_reorder(head,start,stop,font,attr,nbspaces) -- maybe do a pa
end
if getchar(base) == c_nbsp then
+ if base == stop then
+ stop = getprev(stop)
+ end
nbspaces = nbspaces - 1
head = remove_node(head, base)
- free_node(base)
+ flush_node(base)
end
return head, stop, nbspaces
@@ -1818,7 +1819,7 @@ local function analyze_next_chars_one(c,font,variant) -- skip one dependent vowe
elseif (vv == c_zwnj or vv == c_zwj) and halant[vvv] then
local nnnn = getnext(nnn)
if nnnn then
- local vvvv = ischar(nnnn)
+ local vvvv = ischar(nnnn,font)
if vvvv and consonant[vvvv] then
c = nnnn
end
@@ -1841,7 +1842,7 @@ local function analyze_next_chars_one(c,font,variant) -- skip one dependent vowe
local nn = getnext(n)
if nn then
local vv = ischar(nn,font)
- if vv and zw_char[vv] then
+ if vv and zw_char[v] then
n = nn
v = vv
nn = getnext(nn)
diff --git a/tex/context/base/mkiv/font-ota.lua b/tex/context/base/mkiv/font-ota.lua
index 6a3804a74..232c2586a 100644
--- a/tex/context/base/mkiv/font-ota.lua
+++ b/tex/context/base/mkiv/font-ota.lua
@@ -32,7 +32,6 @@ 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 getprev = nuts.getprev
@@ -44,7 +43,6 @@ 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
@@ -56,7 +54,7 @@ local fontdata = fonts.hashes.identifiers
local categories = characters and characters.categories or { } -- sorry, only in context
local chardata = characters and characters.data
-local otffeatures = fonts.constructors.newfeatures("otf")
+local otffeatures = fonts.constructors.features.otf
local registerotffeature = otffeatures.register
--[[ldx--
@@ -263,36 +261,44 @@ 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")
+ local f_arabic, l_arabic = characters.blockrange("arabic")
+ local f_syriac, l_syriac = characters.blockrange("syriac")
+ local f_mandiac, l_mandiac = characters.blockrange("mandiac")
+ local f_nko, l_nko = characters.blockrange("nko")
+ local f_ext_a, l_ext_a = characters.blockrange("arabicextendeda")
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
+ if type(k) == "number" then
+ 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 >= f_arabic and k <= l_arabic) or
+ (k >= f_syriac and k <= l_syriac) or
+ (k >= f_mandiac and k <= l_mandiac) or
+ (k >= f_nko and k <= l_nko) or
+ (k >= f_ext_a and k <= l_ext_a) then
+ if categories[k] == "mn" then
+ v = s_mark
+ else
+ v = s_rest
+ end
end
end
+ t[k] = v
+ return v
end
- t[k] = v
- return v
end)
+ characters.classifiers = classifiers
+
end
function methods.arab(head,font,attr)
diff --git a/tex/context/base/mkiv/font-otb.lua b/tex/context/base/mkiv/font-otb.lua
index c9f5d4aca..a31079225 100644
--- a/tex/context/base/mkiv/font-otb.lua
+++ b/tex/context/base/mkiv/font-otb.lua
@@ -8,8 +8,6 @@ if not modules then modules = { } end modules ['font-otb'] = {
local concat = table.concat
local format, gmatch, gsub, find, match, lower, strip = string.format, string.gmatch, string.gsub, string.find, string.match, string.lower, string.strip
local type, next, tonumber, tostring, 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)
diff --git a/tex/context/base/mkiv/font-otc.lua b/tex/context/base/mkiv/font-otc.lua
index a91dac5cf..5d879ec1d 100644
--- a/tex/context/base/mkiv/font-otc.lua
+++ b/tex/context/base/mkiv/font-otc.lua
@@ -9,7 +9,7 @@ if not modules then modules = { } end modules ['font-otc'] = {
local format, insert, sortedkeys, tohash = string.format, table.insert, table.sortedkeys, table.tohash
local type, next = type, next
local lpegmatch = lpeg.match
-local utfbyte, utflen = utf.byte, utf.len
+local utfbyte, utflen, utfsplit = utf.byte, utf.len, utf.split
-- we assume that the other otf stuff is loaded already
@@ -44,6 +44,24 @@ local types = {
chainposition = "gpos_contextchain",
}
+local names = {
+ gsub_single = "gsub",
+ gsub_multiple = "gsub",
+ gsub_alternate = "gsub",
+ gsub_ligature = "gsub",
+ gsub_context = "gsub",
+ gsub_contextchain = "gsub",
+ gsub_reversecontextchain = "gsub",
+ gpos_single = "gpos",
+ gpos_pair = "gpos",
+ gpos_cursive = "gpos",
+ gpos_mark2base = "gpos",
+ gpos_mark2ligature = "gpos",
+ gpos_mark2mark = "gpos",
+ gpos_context = "gpos",
+ gpos_contextchain = "gpos",
+}
+
setmetatableindex(types, function(t,k) t[k] = k return k end) -- "key"
local everywhere = { ["*"] = { ["*"] = true } } -- or: { ["*"] = { "*" } }
@@ -51,18 +69,89 @@ local noflags = { false, false, false, false }
-- beware: shared, maybe we should copy the sequence
+local function getrange(sequences,category)
+ local count = #sequences
+ local first = nil
+ local last = nil
+ for i=1,count do
+ local t = sequences[i].type
+ if t and names[t] == category then
+ if not first then
+ first = i
+ end
+ last = i
+ end
+ end
+ return first or 1, last or count
+end
+
+local function validspecification(specification,name)
+ local dataset = specification.dataset
+ if dataset then
+ -- okay
+ elseif specification[1] then
+ dataset = specification
+ specification = { dataset = dataset }
+ else
+ dataset = { { data = specification.data } }
+ specification.data = nil
+ specification.dataset = dataset
+ end
+ local first = dataset[1]
+ if first then
+ first = first.data
+ end
+ if not first then
+ report_otf("invalid feature specification, no dataset")
+ return
+ end
+ if type(name) ~= "string" then
+ name = specification.name or first.name
+ end
+ if type(name) ~= "string" then
+ report_otf("invalid feature specification, no name")
+ return
+ end
+ local n = #dataset
+ if n > 0 then
+ for i=1,n do
+ setmetatableindex(dataset[i],specification)
+ end
+ return specification, name
+ end
+end
+
local function addfeature(data,feature,specifications)
-- todo: add some validator / check code so that we're more tolerant to
-- user errors
+ if not specifications then
+ report_otf("missing specification")
+ return
+ end
+
local descriptions = data.descriptions
local resources = data.resources
local features = resources.features
local sequences = resources.sequences
+
if not features or not sequences then
+ report_otf("missing specification")
return
end
+
+ local alreadydone = resources.alreadydone
+ if not alreadydone then
+ alreadydone = { }
+ resources.alreadydone = alreadydone
+ end
+ if alreadydone[specifications] then
+ return
+ else
+ alreadydone[specifications] = true
+ end
+
-- feature has to be unique but the name entry wins eventually
local fontfeatures = resources.features or everywhere
@@ -72,9 +161,10 @@ local function addfeature(data,feature,specifications)
local skip = 0
local aglunicodes = false
- if not specifications[1] then
- -- so we accept a one entry specification
- specifications = { specifications }
+ local specifications = validspecification(specifications,feature)
+ if not specifications then
+ -- report_otf("invalid specification")
+ return
end
local function tounicode(code)
@@ -105,13 +195,15 @@ local function addfeature(data,feature,specifications)
local stepkey = coverup.stepkey
local register = coverup.register
- local function prepare_substitution(list,featuretype)
+ local function prepare_substitution(list,featuretype,nocheck)
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 not nocheck and not description then
+ skip = skip + 1
+ else
if type(replacement) == "table" then
replacement = replacement[1]
end
@@ -122,26 +214,24 @@ local function addfeature(data,feature,specifications)
else
skip = skip + 1
end
- else
- skip = skip + 1
end
end
return coverage
end
- local function prepare_alternate(list,featuretype)
+ local function prepare_alternate(list,featuretype,nocheck)
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
+ if not nocheck and 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
+ r[i] = (nocheck or descriptions[u]) and u or unicode
end
cover(coverage,unicode,r)
done = done + 1
@@ -158,19 +248,19 @@ local function addfeature(data,feature,specifications)
return coverage
end
- local function prepare_multiple(list,featuretype)
+ local function prepare_multiple(list,featuretype,nocheck)
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
+ if not nocheck and 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
+ if nocheck or descriptions[u] then
n = n + 1
r[n] = u
end
@@ -194,13 +284,15 @@ local function addfeature(data,feature,specifications)
return coverage
end
- local function prepare_ligature(list,featuretype)
+ local function prepare_ligature(list,featuretype,nocheck)
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 not nocheck and not description then
+ skip = skip + 1
+ else
if type(ligature) == "string" then
ligature = { lpegmatch(splitter,ligature) }
end
@@ -208,7 +300,7 @@ local function addfeature(data,feature,specifications)
for i=1,#ligature do
local l = ligature[i]
local u = tounicode(l)
- if descriptions[u] then
+ if nocheck or descriptions[u] then
ligature[i] = u
else
present = false
@@ -221,16 +313,23 @@ local function addfeature(data,feature,specifications)
else
skip = skip + 1
end
- else
- skip = skip + 1
end
end
return coverage
end
+ local function resetspacekerns()
+ -- a bit of a hack, this nil setting but it forces a
+ -- rehash of the resources needed .. the feature itself
+ -- should be a kern (at least for now)
+ data.properties.hasspacekerns = true
+ data.resources .spacekerns = nil
+ end
+
local function prepare_kern(list,featuretype)
local coverage = { }
local cover = coveractions[featuretype]
+ local isspace = false
for code, replacement in next, list do
local unicode = tounicode(code)
local description = descriptions[unicode]
@@ -240,11 +339,17 @@ local function addfeature(data,feature,specifications)
local u = tounicode(k)
if u then
r[u] = v
+ if u == 32 then
+ isspace = true
+ end
end
end
if next(r) then
cover(coverage,unicode,r)
done = done + 1
+ if unicode == 32 then
+ isspace = true
+ end
else
skip = skip + 1
end
@@ -252,6 +357,9 @@ local function addfeature(data,feature,specifications)
skip = skip + 1
end
end
+ if isspace then
+ resetspacekerns()
+ end
return coverage
end
@@ -268,11 +376,17 @@ local function addfeature(data,feature,specifications)
local u = tounicode(k)
if u then
r[u] = v
+ if u == 32 then
+ isspace = true
+ end
end
end
if next(r) then
cover(coverage,unicode,r)
done = done + 1
+ if unicode == 32 then
+ isspace = true
+ end
else
skip = skip + 1
end
@@ -280,6 +394,9 @@ local function addfeature(data,feature,specifications)
skip = skip + 1
end
end
+ if isspace then
+ resetspacekerns()
+ end
else
report_otf("unknown cover type %a",featuretype)
end
@@ -326,14 +443,27 @@ local function addfeature(data,feature,specifications)
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
+ local t = type(v)
+ if t == "table" then
+ -- already ok
+ for i=1,#v do
+ local vi = v[i]
+ if type(vi) ~= "table" then
+ v[i] = { vi }
+ end
+ end
+ elseif t == "number" then
+ local lookup = sublookups[v]
+ if lookup then
+ lookups[k] = { lookup }
+ if not subtype then
+ subtype = lookup.type
+ end
+ else
+ lookups[k] = false -- new
end
else
- -- already expanded
+ lookups[k] = false -- new
end
end
end
@@ -376,11 +506,83 @@ local function addfeature(data,feature,specifications)
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 dataset = specifications.dataset
+
+ local function report(name,category,position,first,last,sequences)
+ report_otf("injecting name %a of category %a at position %i in [%i,%i] of [%i,%i]",
+ name,category,position,first,last,1,#sequences)
+ end
+
+ local function inject(specification,sequences,sequence,first,last,category,name)
+ local position = specification.position or false
+ if not position then
+ position = specification.prepend
+ if position == true then
+ if trace_loading then
+ report(name,category,first,first,last,sequences)
+ end
+ insert(sequences,first,sequence)
+ return
+ end
+ end
+ if not position then
+ position = specification.append
+ if position == true then
+ if trace_loading then
+ report(name,category,last+1,first,last,sequences)
+ end
+ insert(sequences,last+1,sequence)
+ return
+ end
+ end
+ local kind = type(position)
+ if kind == "string" then
+ local index = false
+ for i=first,last do
+ local s = sequences[i]
+ local f = s.features
+ if f then
+ for k in next, f do
+ if k == position then
+ index = i
+ break
+ end
+ end
+ if index then
+ break
+ end
+ end
+ end
+ if index then
+ position = index
+ else
+ position = last + 1
+ end
+ elseif kind == "number" then
+ if position < 0 then
+ position = last - position + 1
+ end
+ if position > last then
+ position = last + 1
+ elseif position < first then
+ position = first
+ end
+ else
+ position = last + 1
+ end
+ if trace_loading then
+ report(name,category,position,first,last,sequences)
+ end
+ insert(sequences,position,sequence)
+ end
+
+ for s=1,#dataset do
+ local specification = dataset[s]
+ local valid = specification.valid -- nowhere used
+ local feature = specification.name or feature
+ if not feature or feature == "" then
+ report_otf("no valid name given for extra feature")
+ elseif not valid or valid(data,specification,feature) then -- anum uses this
local initialize = specification.initialize
if initialize then
-- when false is returned we initialize only once
@@ -390,6 +592,8 @@ local function addfeature(data,feature,specifications)
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 nocheck = specification.nocheck
+ local futuresteps = specification.futuresteps
local featureorder = specification.order or { feature }
local featurechain = (featuretype == "chainsubstitution" or featuretype == "chainposition") and 1 or 0
local nofsteps = 0
@@ -410,13 +614,13 @@ local function addfeature(data,feature,specifications)
local coverage = nil
local format = nil
if featuretype == "substitution" then
- coverage = prepare_substitution(list,featuretype)
+ coverage = prepare_substitution(list,featuretype,nocheck)
elseif featuretype == "ligature" then
- coverage = prepare_ligature(list,featuretype)
+ coverage = prepare_ligature(list,featuretype,nocheck)
elseif featuretype == "alternate" then
- coverage = prepare_alternate(list,featuretype)
+ coverage = prepare_alternate(list,featuretype,nocheck)
elseif featuretype == "multiple" then
- coverage = prepare_multiple(list,featuretype)
+ coverage = prepare_multiple(list,featuretype,nocheck)
elseif featuretype == "kern" then
format = "kern"
coverage = prepare_kern(list,featuretype)
@@ -432,6 +636,7 @@ local function addfeature(data,feature,specifications)
s[i] = {
[stepkey] = steps,
nofsteps = nofsteps,
+ flags = featureflags,
type = types[featuretype],
}
end
@@ -443,16 +648,16 @@ local function addfeature(data,feature,specifications)
local format = nil
if featuretype == "substitution" then
category = "gsub"
- coverage = prepare_substitution(list,featuretype)
+ coverage = prepare_substitution(list,featuretype,nocheck)
elseif featuretype == "ligature" then
category = "gsub"
- coverage = prepare_ligature(list,featuretype)
+ coverage = prepare_ligature(list,featuretype,nocheck)
elseif featuretype == "alternate" then
category = "gsub"
- coverage = prepare_alternate(list,featuretype)
+ coverage = prepare_alternate(list,featuretype,nocheck)
elseif featuretype == "multiple" then
category = "gsub"
- coverage = prepare_multiple(list,featuretype)
+ coverage = prepare_multiple(list,featuretype,nocheck)
elseif featuretype == "kern" then
category = "gpos"
format = "kern"
@@ -486,6 +691,7 @@ local function addfeature(data,feature,specifications)
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 steptype = types[featuretype]
local sequence = {
chain = featurechain,
features = { [feature] = askedfeatures },
@@ -494,14 +700,11 @@ local function addfeature(data,feature,specifications)
order = featureorder,
[stepkey] = steps,
nofsteps = nofsteps,
- type = types[featuretype],
+ type = steptype,
}
- -- todo : before|after|index
- if specification.prepend then
- insert(sequences,1,sequence)
- else
- insert(sequences,sequence)
- end
+ -- position | prepend | append
+ local first, last = getrange(sequences,category)
+ inject(specification,sequences,sequence,first,last,category,feature)
-- register in metadata (merge as there can be a few)
local features = fontfeatures[category]
if not features then
@@ -540,18 +743,28 @@ local knownfeatures = { }
function otf.addfeature(name,specification)
if type(name) == "table" then
specification = name
- name = specification.name
end
- if type(name) == "string" then
+ if type(specification) ~= "table" then
+ report_otf("invalid feature specification, no valid table")
+ return
+ end
+ specification, name = validspecification(specification,name)
+ if name and specification then
local slot = knownfeatures[name]
- if slot then
- -- we overload one
- else
+ if not slot then
+ -- we have a new one
+ slot = #extrafeatures + 1
+ knownfeatures[name] = slot
+ elseif specification.overload == false then
+ -- we add an extre one
slot = #extrafeatures + 1
knownfeatures[name] = slot
+ else
+ -- we overload a previous one
end
specification.name = name -- to be sure
extrafeatures[slot] = specification
+ -- report_otf("adding feature %a @ %i",name,slot)
end
end
@@ -566,7 +779,7 @@ local function enhance(data,filename,raw)
end
end
--- otf.enhancers.enhance = enhance
+otf.enhancers.enhance = enhance
otf.enhancers.register("check extra features",enhance)
@@ -626,39 +839,39 @@ registerotffeature {
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
+-- -- tcom (obsolete, was already not set for a while)
- 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
+-- 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
@@ -785,3 +998,96 @@ registerotffeature {
-- a = { b = -500 },
-- }
-- }
+
+-- This is a quick and dirty hack.
+
+local lookups = { }
+local protect = { }
+local revert = { }
+local zwj = { 0x200C }
+
+otf.addfeature {
+ name = "blockligatures",
+ type = "chainsubstitution",
+ nocheck = true, -- because there is no 0x200C in the font
+ prepend = true, -- make sure we do it early
+ future = true, -- avoid nilling due to no steps yet
+ lookups = {
+ {
+ type = "multiple",
+ data = lookups,
+ },
+ },
+ data = {
+ rules = protect,
+ }
+}
+
+otf.addfeature {
+ name = "blockligatures",
+ type = "chainsubstitution",
+ nocheck = true, -- because there is no 0x200C in the font
+ append = true, -- this is done late
+ overload = false, -- we don't want to overload the previous definition
+ lookups = {
+ {
+ type = "ligature",
+ data = lookups,
+ },
+ },
+ data = {
+ rules = revert,
+ }
+}
+
+registerotffeature {
+ name = 'blockligatures',
+ description = 'block certain ligatures',
+}
+
+local settings_to_array = utilities.parsers and utilities.parsers.settings_to_array
+ or function(s) return string.split(s,",") end -- for generic
+
+local function blockligatures(str)
+
+ local t = settings_to_array(str)
+
+ for i=1,#t do
+ local ti = utfsplit(t[i])
+ if #ti > 1 then
+ local one = ti[1]
+ local two = ti[2]
+ lookups[one] = { one, 0x200C }
+ local one = { one }
+ local two = { two }
+ local new = #protect + 1
+ protect[new] = {
+ current = { one, two },
+ lookups = { 1 }, -- not shared !
+ }
+ revert[new] = {
+ current = { one, zwj },
+ after = { two },
+ lookups = { 1 }, -- not shared !
+ }
+ end
+ end
+
+end
+
+-- blockligatures("\0\0")
+
+otf.helpers.blockligatures = blockligatures
+
+-- blockligatures("fi,ff")
+-- blockligatures("fl")
+
+if context then
+
+ interfaces.implement {
+ name = "blockligatures",
+ arguments = "string",
+ actions = blockligatures,
+ }
+
+end
diff --git a/tex/context/base/mkiv/font-otd.lua b/tex/context/base/mkiv/font-otd.lua
index 2257caa8c..64cb1bcb4 100644
--- a/tex/context/base/mkiv/font-otd.lua
+++ b/tex/context/base/mkiv/font-otd.lua
@@ -36,9 +36,6 @@ local contextmerged = specifiers.contextmerged
local setmetatableindex = table.setmetatableindex
-local otffeatures = fonts.constructors.newfeatures("otf")
-local registerotffeature = otffeatures.register
-
local a_to_script = { }
local a_to_language = { }
@@ -135,6 +132,10 @@ local wildcard = "*"
-- needs checking: some added features can pass twice
+local P, C, Cc, lpegmatch = lpeg.P, lpeg.C, lpeg.Cc, lpeg.match
+
+local pattern = P("always") * (P(-1) * Cc(true) + P(":") * C((1-P(-1))^1))
+
local function initialize(sequence,script,language,s_enabled,a_enabled,font,attr,dynamic,ra,autoscript,autolanguage)
local features = sequence.features
if features then
@@ -151,21 +152,34 @@ local function initialize(sequence,script,language,s_enabled,a_enabled,font,attr
e_e = s_enabled and s_enabled[kind] -- the value (font)
end
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
- -- we need detailed control over default becase we want to trace
- -- only first attribute match check, so we assume simple fina's
- local valid = false
- if languages[language] then
- valid = e_e
- elseif languages[wildcard] then
- valid = e_e
- elseif autolanguage and defaultlanguage(featuretype,autolanguage,languages) then
- valid = e_e
+ local valid = type(e_e) == "string" and lpegmatch(pattern,e_e)
+ if valid then
+ -- we have hit always
+ local attribute = autofeatures[kind] or false
+ 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,"*","*",sequence.name,valid)
+ end
+ ra[#ra+1] = { valid, attribute, sequence, kind }
+ else
+ -- we already checked for e_e
+ 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
+ -- we need detailed control over default becase we want to trace
+ -- only first attribute match check, so we assume simple fina's
+ -- local valid = false
+ if languages[language] then
+ valid = e_e
+ elseif languages[wildcard] then
+ valid = e_e
+ elseif autolanguage and defaultlanguage(featuretype,autolanguage,languages) then
+ valid = e_e
+ end
end
if valid then
local attribute = autofeatures[kind] or false
@@ -244,6 +258,7 @@ function otf.dataset(tfmdata,font,attr) -- attr only when explicit (as in specia
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
+ -- just return nil or ra step
initialize(sequences[s],script,language,s_enabled,a_enabled,font,attr,dynamic,ra,autoscript,autolanguage)
end
end
diff --git a/tex/context/base/mkiv/font-otf.lua b/tex/context/base/mkiv/font-otf.lua
index a1730aced..1db80272e 100644
--- a/tex/context/base/mkiv/font-otf.lua
+++ b/tex/context/base/mkiv/font-otf.lua
@@ -20,91 +20,87 @@ if not modules then modules = { } end modules ['font-otf'] = {
-- more checking against low level calls of functions
-local utfbyte = utf.byte
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 reversed, concat, insert, remove, sortedkeys = table.reversed, table.concat, table.insert, table.remove, table.sortedkeys
-local ioflush = io.flush
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
-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 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_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)
-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 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)
+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 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 report_otf = logs.reporter("fonts","otf loading")
-local fonts = fonts
-local otf = fonts.handlers.otf
+local fonts = fonts
+local otf = fonts.handlers.otf
-otf.glists = { "gsub", "gpos" }
+otf.glists = { "gsub", "gpos" }
-otf.version = 2.825 -- beware: also sync font-mis.lua and in mtx-fonts
-otf.cache = containers.define("fonts", "otf", otf.version, true)
+otf.version = 2.826 -- beware: also sync font-mis.lua and in mtx-fonts
+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 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 -- not used
+local fontdata = hashes and hashes.identifiers
+local chardata = characters and characters.data -- not used
-local otffeatures = constructors.newfeatures("otf")
-local registerotffeature = otffeatures.register
+local otffeatures = constructors.features.otf
+local registerotffeature = otffeatures.register
-local enhancers = allocate()
-otf.enhancers = enhancers
-local patches = { }
-enhancers.patches = patches
+local otfenhancers = constructors.enhancers.otf
+local registerotfenhancer = otfenhancers.register
-local forceload = false
-local cleanup = 0 -- mk: 0=885M 1=765M 2=735M (regular run 730M)
-local packdata = true
-local syncspace = true
-local forcenotdef = false
-local includesubfonts = false
-local overloadkerns = false -- experiment
+local forceload = false
+local cleanup = 0 -- mk: 0=885M 1=765M 2=735M (regular run 730M)
+local packdata = true
+local syncspace = true
+local forcenotdef = false
+local includesubfonts = false
+local overloadkerns = false -- experiment
-local applyruntimefixes = fonts.treatments and fonts.treatments.applyfixes
+local applyruntimefixes = fonts.treatments and fonts.treatments.applyfixes
-local wildcard = "*"
-local default = "dflt"
+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 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 -- not used yet
+local mainfields = nil
+local glyphfields = nil -- not used yet
-local formats = fonts.formats
+local formats = fonts.formats
-formats.otf = "opentype"
-formats.ttf = "truetype"
-formats.ttc = "truetype"
-formats.dfont = "truetype"
+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)
@@ -263,127 +259,50 @@ local valid_fields = table.tohash {
-- "truetype", -- maybe as check
}
-local ordered_enhancers = {
- "prepare tables",
-
- "prepare glyphs",
- "prepare lookups",
-
- "analyze glyphs",
- "analyze math",
-
- -- "prepare tounicode",
-
- "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",
-
- "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",
- "purge names",
-}
-
---[[ldx--
-<p>Here we go.</p>
---ldx]]--
-
-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
+local function adddimensions(data,filename)
+ -- todo: forget about the width if it's the defaultwidth (saves mem)
+ -- we could also build the marks hash here (instead of storing it)
+ 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
+ -- or bb?
+ 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)
+ -- d.width = -wd
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
+ if bb then
+ local ht = bb[4]
+ local dp = -bb[2]
+ -- if alldimensions then
+ -- if ht ~= 0 then
+ -- d.height = ht
+ -- end
+ -- if dp ~= 0 then
+ -- d.depth = dp
+ -- end
+ -- else
+ 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
- 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 !
@@ -525,14 +444,14 @@ function otf.load(filename,sub,featurefile) -- second argument (format) is gone
},
}
report_otf("file size: %s", size)
- enhancers.apply(data,filename,fontdata)
+ otfenhancers.apply(data,filename,fontdata)
local packtime = { }
if packdata then
if cleanup > 0 then
collectgarbage("collect")
end
starttiming(packtime)
- enhance("pack",data,filename,nil)
+ otf.packdata(data,filename,nil) -- implemented elsewhere
stoptiming(packtime)
end
report_otf("saving %a in cache",filename)
@@ -541,7 +460,7 @@ function otf.load(filename,sub,featurefile) -- second argument (format) is gone
collectgarbage("collect")
end
stoptiming("fontloader")
- if elapsedtime then -- not in generic
+ if elapsedtime then
report_otf("loading, optimizing, packing and caching time %s, pack time %s",
elapsedtime("fontloader"),packdata and elapsedtime(packtime) or 0)
end
@@ -563,7 +482,7 @@ function otf.load(filename,sub,featurefile) -- second argument (format) is gone
if trace_defining then
report_otf("loading from cache using hash %a",hash)
end
- enhance("unpack",data,filename,nil,false)
+ otf.unpackdata(data,filename,nil,false) -- implemented elsewhere
--
local resources = data.resources
local lookuptags = resources.lookuptags
@@ -600,7 +519,7 @@ function otf.load(filename,sub,featurefile) -- second argument (format) is gone
if applyruntimefixes then
applyruntimefixes(filename,data)
end
- enhance("add dimensions",data,filename,nil,false)
+ adddimensions(data,filename,nil,false)
if trace_sequences then
showfeatureorder(data,filename)
end
@@ -624,56 +543,10 @@ local mt = {
end
}
-actions["prepare tables"] = function(data,filename,raw)
+local function enhance_prepare_tables(data,filename,raw)
data.properties.hasitalics = false
end
-actions["add dimensions"] = function(data,filename)
- -- todo: forget about the width if it's the defaultwidth (saves mem)
- -- we could also build the marks hash here (instead of storing it)
- 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
- -- or bb?
- 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)
- -- d.width = -wd
- end
- if bb then
- local ht = bb[4]
- local dp = -bb[2]
- -- if alldimensions then
- -- if ht ~= 0 then
- -- d.height = ht
- -- end
- -- if dp ~= 0 then
- -- d.depth = dp
- -- end
- -- else
- 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
- end
-end
-
local function somecopy(old) -- fast one
if old then
local new = { }
@@ -708,7 +581,7 @@ end
-- not setting hasitalics and class (when nil) during table construction can save some mem
-actions["prepare glyphs"] = function(data,filename,raw)
+local function enhance_prepare_glyphs(data,filename,raw)
local rawglyphs = raw.glyphs
local rawsubfonts = raw.subfonts
local rawcidinfo = raw.cidinfo
@@ -986,7 +859,7 @@ end
--
-- PsuedoEncodeUnencoded(EncMap *map,struct ttfinfo *info)
-actions["check encoding"] = function(data,filename,raw)
+local function enhance_check_encoding(data,filename,raw)
local descriptions = data.descriptions
local resources = data.resources
local properties = data.properties
@@ -1065,7 +938,7 @@ end
-- do an indirect lookup uni_to_uni . but then we need that in
-- all lookups
-actions["add duplicates"] = function(data,filename,raw)
+local function enhance_add_duplicates(data,filename,raw)
local descriptions = data.descriptions
local resources = data.resources
local properties = data.properties
@@ -1118,7 +991,7 @@ end
-- class : nil base mark ligature component (maybe we don't need it in description)
-- 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 function enhance_analyze_glyphs(data,filename,raw) -- maybe integrate this in the previous
local descriptions = data.descriptions
local resources = data.resources
local metadata = data.metadata
@@ -1177,7 +1050,7 @@ actions["analyze glyphs"] = function(data,filename,raw) -- maybe integrate this
end
end
-actions["reorganize mark classes"] = function(data,filename,raw)
+local function enhance_reorganize_mark_classes(data,filename,raw)
local mark_classes = raw.mark_classes
if mark_classes then
local resources = data.resources
@@ -1194,7 +1067,7 @@ actions["reorganize mark classes"] = function(data,filename,raw)
end
end
-actions["reorganize features"] = function(data,filename,raw) -- combine with other
+local function enhance_reorganize_features(data,filename,raw) -- combine with other
local features = { }
data.resources.features = features
for k=1,#otf.glists do
@@ -1232,7 +1105,7 @@ actions["reorganize features"] = function(data,filename,raw) -- combine with oth
end
end
-actions["reorganize anchor classes"] = function(data,filename,raw)
+local function enhance_reorganize_anchor_classes(data,filename,raw)
local resources = data.resources
local anchor_to_lookup = { }
local lookup_to_anchor = { }
@@ -1280,7 +1153,7 @@ end
-- 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)
@@ -1401,7 +1274,7 @@ end
-- end
-- end
-actions["prepare tounicode"] = function(data,filename,raw)
+local function enhance_prepare_tounicode(data,filename,raw)
fonts.mappings.addtounicode(data,filename)
end
@@ -1429,7 +1302,7 @@ local g_directions = {
-- return true
-- end
-actions["reorganize subtables"] = function(data,filename,raw)
+local function enhance_reorganize_subtables(data,filename,raw)
local resources = data.resources
local sequences = { }
local lookups = { }
@@ -1523,7 +1396,7 @@ actions["reorganize subtables"] = function(data,filename,raw)
end
end
-actions["prepare lookups"] = function(data,filename,raw)
+local function enhance_prepare_lookups(data,filename,raw)
local lookups = raw.lookups
if lookups then
data.lookups = lookups
@@ -1633,7 +1506,7 @@ local function r_uncover(splitter,cache,cover,replacements)
end
end
-actions["reorganize lookups"] = function(data,filename,raw) -- we could check for "" and n == 0
+local function enhance_reorganize_lookups(data,filename,raw) -- we could check for "" and n == 0
-- we prefer the before lookups in a normal order
if data.lookups then
local helpers = data.helpers
@@ -1799,7 +1672,7 @@ 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
+local function enhance_expand_lookups(data,filename,raw) -- we could check for "" and n == 0
if data.lookups then
local cache = data.helpers.matchcache
if cache then
@@ -1890,7 +1763,7 @@ local function check_variants(unicode,the_variants,splitter,unicodes)
return variants, parts, italic
end
-actions["analyze math"] = function(data,filename,raw)
+local function enhance_analyze_math(data,filename,raw)
if raw.math then
data.metadata.math = raw.math
local unicodes = data.resources.unicodes
@@ -1908,18 +1781,16 @@ actions["analyze math"] = function(data,filename,raw)
math.accent = 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 -- height / kern can be zero
- end
- end
- end
- end
- math.kerns = mathkerns
+ local topright = mathkerns.top_right
+ local topleft = mathkerns.top_left
+ local bottomright = mathkerns.bottom_right
+ local bottomleft = mathkerns.bottom_left
+ math.kerns = {
+ topright = topright and next(topright) and topright or nil,
+ topleft = topleft and next(topleft) and topleft or nil,
+ bottomright = bottomright and next(bottomright) and bottomright or nil,
+ bottomleft = bottomleft and next(bottomleft) and bottomleft or nil,
+ }
end
if hvariants then
math.hvariants, math.hparts, math.hitalic = check_variants(unicode,hvariants,splitter,unicodes)
@@ -1936,7 +1807,7 @@ actions["analyze math"] = function(data,filename,raw)
end
end
-actions["reorganize glyph kerns"] = function(data,filename,raw)
+local function enhance_reorganize_glyph_kerns(data,filename,raw)
local descriptions = data.descriptions
local resources = data.resources
local unicodes = resources.unicodes
@@ -1979,7 +1850,7 @@ actions["reorganize glyph kerns"] = function(data,filename,raw)
end
end
-actions["merge kern classes"] = function(data,filename,raw)
+local function enhance_merge_kern_classes(data,filename,raw)
local gposlist = raw.gpos
if gposlist then
local descriptions = data.descriptions
@@ -2101,7 +1972,7 @@ actions["merge kern classes"] = function(data,filename,raw)
end
end
-actions["check glyphs"] = function(data,filename,raw)
+local function enhance_check_glyphs(data,filename,raw)
for unicode, description in next, data.descriptions do
description.glyph = nil
end
@@ -2115,7 +1986,7 @@ 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 function enhance_check_metadata(data,filename,raw)
local metadata = data.metadata
for _, k in next, mainfields do
if valid_fields[k] then
@@ -2204,7 +2075,7 @@ actions["check metadata"] = function(data,filename,raw)
end
end
-actions["cleanup tables"] = function(data,filename,raw)
+local function enhance_cleanup_tables(data,filename,raw)
local duplicates = data.resources.duplicates
if duplicates then
for k, v in next, duplicates do
@@ -2231,7 +2102,7 @@ end
-- mlookups only with pairs and ligatures
-actions["reorganize glyph lookups"] = function(data,filename,raw)
+local function enhance_reorganize_glyph_lookups(data,filename,raw)
local resources = data.resources
local unicodes = resources.unicodes
local descriptions = data.descriptions
@@ -2317,7 +2188,7 @@ end
local zero = { 0, 0 }
-actions["reorganize glyph anchors"] = function(data,filename,raw)
+local function enhance_reorganize_glyph_anchors(data,filename,raw)
local descriptions = data.descriptions
for unicode, description in next, descriptions do
local anchors = description.glyph.anchors
@@ -2368,7 +2239,7 @@ 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) -- not used yet
+local function enhance_purge_names(data,filename,raw) -- not used yet
if purge_names then
local n = 0
for u, d in next, data.descriptions do
@@ -2384,7 +2255,7 @@ actions["purge names"] = function(data,filename,raw) -- not used yet
end
end
-actions["compact lookups"] = function(data,filename,raw)
+local function enhance_compact_lookups(data,filename,raw)
if not compact_lookups then
report_otf("not compacting")
return
@@ -2700,7 +2571,7 @@ local function copytotfm(data,cache_id)
spaceunits, spacer = charwidth, "charwidth"
end
end
- spaceunits = tonumber(spaceunits) or 500 -- brrr
+ spaceunits = tonumber(spaceunits) or units/2
--
parameters.slant = 0
parameters.space = spaceunits -- 3.333 (cmr10)
@@ -3056,3 +2927,42 @@ function otf.getkern(tfmdata,left,right,kind)
end
return 0
end
+
+
+registerotfenhancer("prepare tables", enhance_prepare_tables)
+
+registerotfenhancer("prepare glyphs", enhance_prepare_glyphs)
+registerotfenhancer("prepare lookups", enhance_prepare_lookups)
+
+registerotfenhancer("analyze glyphs", enhance_analyze_glyphs)
+registerotfenhancer("analyze math", enhance_analyze_math)
+
+registerotfenhancer("reorganize lookups", enhance_reorganize_lookups)
+registerotfenhancer("reorganize mark classes", enhance_reorganize_mark_classes)
+registerotfenhancer("reorganize anchor classes", enhance_reorganize_anchor_classes)
+
+registerotfenhancer("reorganize glyph kerns", enhance_reorganize_glyph_kerns)
+registerotfenhancer("reorganize glyph lookups", enhance_reorganize_glyph_lookups)
+registerotfenhancer("reorganize glyph anchors", enhance_reorganize_glyph_anchors)
+
+registerotfenhancer("merge kern classes", enhance_merge_kern_classes)
+
+registerotfenhancer("reorganize features", enhance_reorganize_features)
+registerotfenhancer("reorganize subtables", enhance_reorganize_subtables)
+
+registerotfenhancer("check glyphs", enhance_check_glyphs)
+registerotfenhancer("check metadata", enhance_check_metadata)
+
+registerotfenhancer("prepare tounicode", enhance_prepare_tounicode)
+
+registerotfenhancer("check encoding", enhance_check_encoding)
+registerotfenhancer("add duplicates", enhance_add_duplicates)
+
+registerotfenhancer("expand lookups", enhance_expand_lookups)
+
+registerotfenhancer("check extra features", function() end) --placeholder, will be overloaded
+
+registerotfenhancer("cleanup tables", enhance_cleanup_tables)
+
+registerotfenhancer("compact lookups", enhance_compact_lookups)
+registerotfenhancer("purge names", enhance_purge_names)
diff --git a/tex/context/base/mkiv/font-oti.lua b/tex/context/base/mkiv/font-oti.lua
index bacd001a5..4c6053be0 100644
--- a/tex/context/base/mkiv/font-oti.lua
+++ b/tex/context/base/mkiv/font-oti.lua
@@ -11,8 +11,8 @@ local lower = string.lower
local fonts = fonts
local constructors = fonts.constructors
-local otf = constructors.newhandler("otf")
-local otffeatures = constructors.newfeatures("otf")
+local otf = constructors.handlers.otf
+local otffeatures = constructors.features.otf
local registerotffeature = otffeatures.register
local otftables = otf.tables or { }
@@ -34,6 +34,8 @@ local function setmode(tfmdata,value)
end
end
+otf.modeinitializer = setmode
+
local function setlanguage(tfmdata,value)
if value then
local cleanvalue = lower(value)
@@ -70,6 +72,7 @@ registerotffeature {
initializers = {
base = setmode,
node = setmode,
+ plug = setmode,
}
}
@@ -79,6 +82,7 @@ registerotffeature {
initializers = {
base = setlanguage,
node = setlanguage,
+ plug = setlanguage,
}
}
@@ -88,6 +92,7 @@ registerotffeature {
initializers = {
base = setscript,
node = setscript,
+ plug = setscript,
}
}
@@ -156,3 +161,102 @@ function otffeatures.checkeddefaultlanguage(featuretype,autolanguage,languages)
end
end
+-- the following might become available generic in due time but for now
+-- this is some context playground (development code)
+
+-- if not context then
+-- return
+-- end
+
+-- local helpers = otf.readers.helpers
+-- local axistofactors = helpers.axistofactors
+-- local normalizedaxis = helpers.normalizedaxis
+-- local getaxisscale = helpers.getaxisscale
+-- local cleanname = containers.cleanname
+
+-- local function validvariable(tfmdata)
+-- if tfmdata.properties.factors then
+-- return
+-- end
+-- local resources = tfmdata.resources
+-- local variabledata = resources and resources.variabledata
+-- if not variabledata then
+-- return
+-- end
+-- local instances = variabledata.instances
+-- local axis = variabledata.axis
+-- local segments = variabledata.segments
+-- if instances and axis then
+-- return instances, axis, segments
+-- end
+-- end
+
+-- local function initializeinstance(tfmdata,value)
+-- if type(value) == "string" then
+-- local instances, axis, segments = validvariable(tfmdata)
+-- if instances then
+-- local values
+-- for i=1,#instances do
+-- local instance = instances[i]
+-- if cleanname(instance.subfamily) == value then
+-- values = instance.values
+-- break
+-- end
+-- end
+-- if values then
+-- local factors = { }
+-- for i=1,#axis do
+-- local a = axis[i]
+-- factors[i] = getaxisscale(segments,a.minimum,a.default,a.maximum,values[i].value)
+-- end
+-- tfmdata.properties.instance = {
+-- hash = instance,
+-- factors = factors,
+-- }
+-- end
+-- else
+-- report("incomplete variable data")
+-- end
+-- end
+-- end
+
+-- local function initializeaxis(tfmdata,value)
+-- if type(value) == "string" then
+-- local instances, axis, segments = validvariable(tfmdata)
+-- if instances then
+-- local values = axistofactors(value)
+-- if values then
+-- local factors = { }
+-- for i=1,#axis do
+-- local a = axis[i]
+-- local d = a.default
+-- factors[i] = getaxisscale(segments,a.minimum,d,a.maximum,values[a.name or a.tag] or d)
+-- end
+-- tfmdata.properties.instance = {
+-- hash = cleanname(value),
+-- factors = factors,
+-- }
+-- end
+-- else
+-- report("incomplete variable data")
+-- end
+-- end
+-- end
+
+-- registerotffeature {
+-- name = "instance",
+-- description = "variation instance",
+-- initializers = {
+-- node = initializeinstance,
+-- base = initializeinstance,
+-- }
+-- }
+
+-- registerotffeature {
+-- name = "axis",
+-- description = "variation axis",
+-- initializers = {
+-- node = initializeaxis,
+-- base = initializeaxis,
+-- }
+-- }
diff --git a/tex/context/base/mkiv/font-otj.lua b/tex/context/base/mkiv/font-otj.lua
index b65a9db66..634f8a83c 100644
--- a/tex/context/base/mkiv/font-otj.lua
+++ b/tex/context/base/mkiv/font-otj.lua
@@ -16,18 +16,16 @@ if not modules then modules = { } end modules ['font-otj'] = {
-- 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
+-- The use_advance code was 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).
+-- Maybe: subtype fontkern when pure kerns.
+
if not nodes.properties then return end
-local next, rawget = next, rawget
-local utfchar = utf.char
+local next, rawget, tonumber = next, rawget, tonumber
local fastcopy = table.fastcopy
local registertracker = trackers.register
@@ -35,11 +33,7 @@ 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 trace_spaces = false registertracker("fonts.injections.spaces", function(v) trace_spaces = v end)
local report_injections = logs.reporter("fonts","injections")
local report_spaces = logs.reporter("fonts","spaces")
@@ -79,20 +73,23 @@ 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 getoffsets = nuts.getoffsets
local getboth = nuts.getboth
-
-local ischar = nuts.is_char
-
local getdisc = nuts.getdisc
local setdisc = nuts.setdisc
+local setoffsets = nuts.setoffsets
+local ischar = nuts.is_char
+local getkern = nuts.getkern
+local setkern = nuts.setkern
+local setlink = nuts.setlink
+local setwidth = nuts.setwidth
+local getwidth = nuts.getwidth
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
@@ -137,7 +134,7 @@ end
-- if tp then
-- tp.injections = si
-- else
--- propertydata[target] = {
+-- properties[target] = {
-- injections = si,
-- }
-- end
@@ -169,7 +166,7 @@ function injections.copy(target,source)
if tp then
tp.injections = si
else
- propertydata[target] = {
+ properties[target] = {
injections = si,
}
end
@@ -377,7 +374,8 @@ function injections.setkern(current,factor,rlmode,x,injection)
end
end
-function injections.setmark(start,base,factor,rlmode,ba,ma,tfmbase,mkmk) -- ba=baseanchor, ma=markanchor
+function injections.setmark(start,base,factor,rlmode,ba,ma,tfmbase,mkmk,checkmark) -- ba=baseanchor, ma=markanchor
+
local dx, dy = factor*(ba[1]-ma[1]), factor*(ba[2]-ma[2])
nofregisteredmarks = nofregisteredmarks + 1
if rlmode >= 0 then
@@ -398,6 +396,7 @@ function injections.setmark(start,base,factor,rlmode,ba,ma,tfmbase,mkmk) -- ba=b
i.markbase = nofregisteredmarks
i.markbasenode = base
i.markmark = mkmk
+ i.checkmark = checkmark
end
else
p.injections = {
@@ -407,6 +406,7 @@ function injections.setmark(start,base,factor,rlmode,ba,ma,tfmbase,mkmk) -- ba=b
markbase = nofregisteredmarks,
markbasenode = base,
markmark = mkmk,
+ checkmark = checkmark,
}
end
else
@@ -418,6 +418,7 @@ function injections.setmark(start,base,factor,rlmode,ba,ma,tfmbase,mkmk) -- ba=b
markbase = nofregisteredmarks,
markbasenode = base,
markmark = mkmk,
+ checkmark = checkmark,
},
}
end
@@ -523,11 +524,12 @@ local function show_result(head)
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"))
+ local w = getwidth(current)
+ local x, y = getoffsets(current)
+ report_injections("char: %C, width %p, xoffset %p, yoffset %p",getchar(current),w,x,y)
skipping = false
elseif id == kern_code then
- report_injections("kern: %p",getfield(current,"kern"))
+ report_injections("kern: %p",getkern(current))
skipping = false
elseif not skipping then
report_injections()
@@ -562,76 +564,65 @@ local function inject_kerns_only(head,where)
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))
+ local char, id = ischar(current)
+ if char 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
+ head = insert_node_before(head,current,newkern(leftkern))
+ 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
+ setlink(posttail,newkern(leftkern))
+ done = true
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
+ 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
+ setlink(replacetail,newkern(leftkern))
+ done = true
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
+ 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
- if done then
- setdisc(prevdisc,pre,post,replace)
- end
+ end
+ if done then
+ setdisc(prevdisc,pre,post,replace)
end
end
end
prevdisc = nil
prevglyph = current
+ elseif char == false then
+ -- other font
+ prevdisc = nil
+ prevglyph = current
elseif id == disc_code then
pre, post, replace, pretail, posttail, replacetail = getdisc(current,true)
local done = false
@@ -645,13 +636,8 @@ local function inject_kerns_only(head,where)
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
+ pre = insert_node_before(pre,n,newkern(leftkern))
+ done = true
end
end
end
@@ -667,13 +653,8 @@ local function inject_kerns_only(head,where)
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
+ post = insert_node_before(post,n,newkern(leftkern))
+ done = true
end
end
end
@@ -689,13 +670,8 @@ local function inject_kerns_only(head,where)
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
+ replace = insert_node_before(replace,n,newkern(leftkern))
+ done = true
end
end
end
@@ -739,87 +715,88 @@ local function inject_pairs_only(head,where)
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
+ local char, id = ischar(current)
+ if char 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
+ setoffsets(current,false,yoffset)
+ end
+ local leftkern = i.leftkern
+ if leftkern and leftkern ~= 0 then
+ head = 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
- -- 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
+ -- glyph|disc|glyph (special case)
+-- is this okay?
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
+ 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
- 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
+ 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
+ setlink(posttail,newkern(leftkern))
+ done = true
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
+ 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
+ setlink(replacetail,newkern(leftkern))
+ done = true
end
end
- if done then
- setdisc(prevdisc,pre,post,replace)
+ 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
prevdisc = nil
prevglyph = current
+ elseif char == false then
+ prevdisc = nil
+ prevglyph = current
elseif id == disc_code then
pre, post, replace, pretail, posttail, replacetail = getdisc(current,true)
local done = false
@@ -833,7 +810,7 @@ local function inject_pairs_only(head,where)
if i then
local yoffset = i.yoffset
if yoffset and yoffset ~= 0 then
- setfield(n,"yoffset",yoffset)
+ setoffsets(n,false,yoffset)
end
local leftkern = i.leftkern
if leftkern and leftkern ~= 0 then
@@ -859,7 +836,7 @@ local function inject_pairs_only(head,where)
if i then
local yoffset = i.yoffset
if yoffset and yoffset ~= 0 then
- setfield(n,"yoffset",yoffset)
+ setoffsets(n,false,yoffset)
end
local leftkern = i.leftkern
if leftkern and leftkern ~= 0 then
@@ -885,7 +862,7 @@ local function inject_pairs_only(head,where)
if i then
local yoffset = i.yoffset
if yoffset and yoffset ~= 0 then
- setfield(n,"yoffset",yoffset)
+ setoffsets(n,false,yoffset)
end
local leftkern = i.leftkern
if leftkern and leftkern ~= 0 then
@@ -954,30 +931,9 @@ local function inject_pairs_only(head,where)
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
+ local x, y = getoffsets(n)
+ if x ~= 0 or y ~= 0 then
setcolor(n,flag and "darkred" or "darkgreen")
else
resetcolor(n)
@@ -1017,7 +973,8 @@ local function inject_everything(head,where)
-- move out
--
local function processmark(p,n,pn) -- p = basenode
- local px = getfield(p,"xoffset")
+ local px, py = getoffsets(p)
+ local nx, ny = getoffsets(n)
local ox = 0
local rightkern = nil
local pp = rawget(properties,p)
@@ -1035,7 +992,7 @@ local function inject_everything(head,where)
-- 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
+ -- ox = px - getwidth(p) + 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
@@ -1050,7 +1007,7 @@ local function inject_everything(head,where)
ox = px - pn.markx
end
else
- ox = px - pn.markx
+ ox = px - pn.markx - rightkern -- seguiemj needs the rightkern
end
end
else
@@ -1058,178 +1015,191 @@ local function inject_everything(head,where)
-- ox = px - pn.markx
-- -- report_injections("r2l case 3: %p",ox)
-- else
- -- -- ox = px - getfield(p,"width") + pn.markx
+ -- -- ox = px - getwidth(p) + 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
+ if pn.checkmark then
+ local wn = getwidth(n) -- in arial marks have widths
+ if wn and wn ~= 0 then
+ wn = wn/2
+ if trace_injections then
+ report_injections("correcting non zero width mark %C",getchar(n))
+ end
+ -- -- bad: we should center
+ -- pn.leftkern = -wn
+ -- pn.rightkern = -wn
+ -- -- we're too late anyway as kerns are already injected so
+ -- -- we do it the ugly way (no checking if the previous is
+ -- -- already a kern) .. maybe we should fix the font instead
+ -- hm, no head ?
+ insert_node_before(n,n,newkern(-wn))
+ insert_node_after(n,n,newkern(-wn))
+ end
end
end
- local oy = getfield(n,"yoffset") + getfield(p,"yoffset") + pn.marky
- setfield(n,"xoffset",ox)
- setfield(n,"yoffset",oy)
+ local oy = ny + py + pn.marky
+ setoffsets(n,ox,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
+ local char, id = ischar(current)
+ if char 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
+ local yoffset = i.yoffset
+ if yoffset and yoffset ~= 0 then
+ setoffsets(current,false,yoffset)
+ end
+ 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 = 0
+ maxc = maxc + 1
+ glyphs[maxc] = cursiveanchor
end
- elseif maxc > 0 then
- local ny = getfield(current,"yoffset")
+ properties[cursiveanchor].cursivedy = i.cursivey -- cursiveprops
+ last = current
+ else
+ maxc = 0
+ end
+ elseif maxc > 0 then
+ local nx, ny = getoffsets(current)
+ for i=maxc,minc,-1 do
+ local ti = glyphs[i]
+ ny = ny + properties[ti].cursivedy
+ setoffsets(ti,false,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 nx, ny = getoffsets(current)
for i=maxc,minc,-1 do
local ti = glyphs[i]
ny = ny + properties[ti].cursivedy
- setfield(ti,"yoffset",ny) -- why not add ?
+ setoffsets(ti,false,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))
+ cursiveanchor = nil
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
+ -- left|glyph|right
+ local leftkern = i.leftkern
+ if leftkern and leftkern ~= 0 then
+ head = 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
- 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
+ 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
+ setlink(posttail,newkern(leftkern))
+ done = true
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
- if i then
- local leftkern = i.leftkern
- if leftkern and leftkern ~= 0 then
- setfield(prev,"replace",newkern(leftkern)) -- maybe also leftkern
- 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
+ setlink(replacetail,newkern(leftkern))
+ done = true
end
end
- if done then
- setdisc(prevdisc,pre,post,replace)
+ else
+ -- local i = rawget(p,"emptyinjections")
+ local i = p.emptyinjections
+ if i then
+ local leftkern = i.leftkern
+ if leftkern and leftkern ~= 0 then
+ setfield(prev,"replace",newkern(leftkern)) -- maybe also leftkern
+ end
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
+ if done then
+ setdisc(prevdisc,pre,post,replace)
end
- maxc = 0
- cursiveanchor = nil
end
end
+ else
+ -- cursive
+ if hascursives and maxc > 0 then
+ local nx, ny = getoffsets(current)
+ for i=maxc,minc,-1 do
+ local ti = glyphs[i]
+ ny = ny + properties[ti].cursivedy
+ local xi, yi = getoffsets(ti)
+ setoffsets(ti,xi,yi + ny) -- can be mark, we could use properties
+ end
+ maxc = 0
+ cursiveanchor = nil
+ end
end
prevdisc = nil
prevglyph = current
+ elseif char == false then
+ prevdisc = nil
+ prevglyph = current
elseif id == disc_code then
pre, post, replace, pretail, posttail, replacetail = getdisc(current,true)
local done = false
@@ -1243,7 +1213,7 @@ local function inject_everything(head,where)
if i then
local yoffset = i.yoffset
if yoffset and yoffset ~= 0 then
- setfield(n,"yoffset",yoffset)
+ setoffsets(n,false,yoffset)
end
local leftkern = i.leftkern
if leftkern and leftkern ~= 0 then
@@ -1258,7 +1228,7 @@ local function inject_everything(head,where)
if hasmarks then
local pm = i.markbasenode
if pm then
- processmark(pm,current,i)
+ processmark(pm,n,i)
end
end
end
@@ -1275,7 +1245,7 @@ local function inject_everything(head,where)
if i then
local yoffset = i.yoffset
if yoffset and yoffset ~= 0 then
- setfield(n,"yoffset",yoffset)
+ setoffsets(n,false,yoffset)
end
local leftkern = i.leftkern
if leftkern and leftkern ~= 0 then
@@ -1290,7 +1260,7 @@ local function inject_everything(head,where)
if hasmarks then
local pm = i.markbasenode
if pm then
- processmark(pm,current,i)
+ processmark(pm,n,i)
end
end
end
@@ -1307,7 +1277,7 @@ local function inject_everything(head,where)
if i then
local yoffset = i.yoffset
if yoffset and yoffset ~= 0 then
- setfield(n,"yoffset",yoffset)
+ setoffsets(n,false,yoffset)
end
local leftkern = i.leftkern
if leftkern and leftkern ~= 0 then
@@ -1322,7 +1292,7 @@ local function inject_everything(head,where)
if hasmarks then
local pm = i.markbasenode
if pm then
- processmark(pm,current,i)
+ processmark(pm,n,i)
end
end
end
@@ -1375,11 +1345,11 @@ local function inject_everything(head,where)
end
-- cursive
if hascursives and maxc > 0 then
- local ny = getfield(last,"yoffset")
+ local nx, ny = getoffsets(last)
for i=maxc,minc,-1 do
local ti = glyphs[i]
ny = ny + properties[ti].cursivedy
- setfield(ti,"yoffset",ny) -- why not add ?
+ setoffsets(ti,false,ny) -- why not add ?
if trace_cursive then
showoffset(ti)
end
@@ -1422,6 +1392,48 @@ function nodes.injections.setspacekerns(font,sequence)
end
end
+local getthreshold
+
+if context then
+
+ local threshold = 1 -- todo: add a few methods for context
+ local parameters = fonts.hashes.parameters
+
+ directives.register("otf.threshold", function(v) threshold = tonumber(v) or 1 end)
+
+ getthreshold = function(font)
+ local p = parameters[font]
+ local f = p.factor
+ local s = p.spacing
+ local t = threshold * (s and s.width or p.space or 0) - 2
+ return t > 0 and t or 0, f
+ end
+
+else
+
+ injections.threshold = 0
+
+ getthreshold = function(font)
+ local p = fontdata[font].parameters
+ local f = p.factor
+ local s = p.spacing
+ local t = injections.threshold * (s and s.width or p.space or 0) - 2
+ return t > 0 and t or 0, f
+ end
+
+end
+
+injections.getthreshold = getthreshold
+
+function injections.isspace(n,threshold,id)
+ if (id or getid(n)) == glue_code then
+ local w = getwidth(n)
+ if threshold and w > threshold then -- was >=
+ return 32
+ end
+ end
+end
+
local function injectspaces(head)
if not triggers then
@@ -1438,18 +1450,11 @@ local function injectspaces(head)
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 = fontdata[font].parameters -- fallback for generic
- factor = par.factor
- threshold = par.spacing.width - 1 -- get rid of rounding errors
lastfont = font
+ threshold,
+ factor = getthreshold(font)
end
for n in traverse_id(glue_code,tonut(head)) do
@@ -1469,7 +1474,7 @@ local function injectspaces(head)
end
end
if prevchar then
- local font = getfont(next)
+ local font = getfont(prev)
local trig = triggers[font]
if trig then
if lastfont ~= font then
@@ -1481,32 +1486,32 @@ local function injectspaces(head)
end
end
if leftkern then
- local old = getfield(n,"width")
- if old >= threshold then
+ local old = getwidth(n)
+ 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)
+ setwidth(n,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)
+ setwidth(n,new)
end
end
leftkern = false
elseif rightkern then
- local old = getfield(n,"width")
- if old >= threshold then
+ local old = getwidth(n)
+ 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)
+ setwidth(n,new)
end
rightkern = false
end
@@ -1522,11 +1527,21 @@ function injections.handler(head,where)
if triggers then
head = injectspaces(head)
end
+ -- todo: marks only run too
if nofregisteredmarks > 0 or nofregisteredcursives > 0 then
+ if trace_injections then
+ report_injections("injection variant %a","everything")
+ end
return inject_everything(head,where)
elseif nofregisteredpairs > 0 then
+ if trace_injections then
+ report_injections("injection variant %a","pairs")
+ end
return inject_pairs_only(head,where)
elseif nofregisteredkerns > 0 then
+ if trace_injections then
+ report_injections("injection variant %a","kerns")
+ end
return inject_kerns_only(head,where)
else
return head, false
diff --git a/tex/context/base/mkiv/font-otl.lua b/tex/context/base/mkiv/font-otl.lua
index 304b6b989..9400096a0 100644
--- a/tex/context/base/mkiv/font-otl.lua
+++ b/tex/context/base/mkiv/font-otl.lua
@@ -23,183 +23,88 @@ if not modules then modules = { } end modules ['font-otl'] = {
-- todo: less tounicodes
-local gmatch, find, match, lower, strip = string.gmatch, string.find, string.match, string.lower, string.strip
+local lower = string.lower
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 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)
+----- 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 report_otf = logs.reporter("fonts","otf loading")
-local fonts = fonts
-local otf = fonts.handlers.otf
+local fonts = fonts
+local otf = fonts.handlers.otf
-otf.version = 3.020 -- beware: also sync font-mis.lua and in mtx-fonts
-otf.cache = containers.define("fonts", "otl", otf.version, true)
+otf.version = 3.029 -- beware: also sync font-mis.lua and in mtx-fonts
+otf.cache = containers.define("fonts", "otl", otf.version, true)
+otf.svgcache = containers.define("fonts", "svg", otf.version, true)
+otf.sbixcache = containers.define("fonts", "sbix", otf.version, true)
+otf.pdfcache = containers.define("fonts", "pdf", otf.version, true)
-local otfreaders = otf.readers
+otf.svgenabled = false
+otf.sbixenabled = false
-local hashes = fonts.hashes
-local definers = fonts.definers
-local readers = fonts.readers
-local constructors = fonts.constructors
+local otfreaders = otf.readers
-local otffeatures = constructors.newfeatures("otf")
-local registerotffeature = otffeatures.register
+local hashes = fonts.hashes
+local definers = fonts.definers
+local readers = fonts.readers
+local constructors = fonts.constructors
-local enhancers = allocate()
-otf.enhancers = enhancers
-local patches = { }
-enhancers.patches = patches
+local otffeatures = constructors.features.otf
+local registerotffeature = otffeatures.register
-local forceload = false
-local cleanup = 0 -- mk: 0=885M 1=765M 2=735M (regular run 730M)
-local syncspace = true
-local forcenotdef = false
+local otfenhancers = constructors.enhancers.otf
+local registerotfenhancer = otfenhancers.register
-local applyruntimefixes = fonts.treatments and fonts.treatments.applyfixes
+local forceload = false
+local cleanup = 0 -- mk: 0=885M 1=765M 2=735M (regular run 730M)
+local syncspace = true
+local forcenotdef = false
-local wildcard = "*"
-local default = "dflt"
+local applyruntimefixes = fonts.treatments and fonts.treatments.applyfixes
-local formats = fonts.formats
+local wildcard = "*"
+local default = "dflt"
-formats.otf = "opentype"
-formats.ttf = "truetype"
-formats.ttc = "truetype"
+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
-
--- Enhancers are used to apply fixes and extensions to fonts. For instance, we use them
--- to implement tlig and trep features. They are not neccessarily bound to opentype
--- fonts but can also apply to type one fonts, given that they obey the structure of an
--- opentype font. They are not to be confused with format specific features but maybe
--- some are so generic that they might eventually move to this mechanism.
-
-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
+-- otfenhancers.patch("before","migrate metadata","cambria",function() end)
-function enhancers.register(what,action) -- only already registered can be overloaded
- actions[what] = action
-end
+registerotfenhancer("check extra features", function() end) -- placeholder
-function otf.load(filename,sub,featurefile) -- second argument (format) is gone !
- --
- local featurefile = nil -- not supported (yet)
- --
+function otf.load(filename,sub,instance)
local base = file.basename(file.removesuffix(filename))
- local name = file.removesuffix(base)
+ local name = file.removesuffix(base) -- already no suffix
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
@@ -208,68 +113,57 @@ function otf.load(filename,sub,featurefile) -- second argument (format) is gone
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
+ if instance then
+ hash = hash .. "-" .. instance
end
+ hash = containers.cleanname(hash)
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
- --
- --
+ data = otfreaders.loadfont(filename,sub or 1,instance) -- we can pass the number instead (if it comes from a name search)
if data then
+ -- todo: make this a plugin
+ local resources = data.resources
+ local svgshapes = resources.svgshapes
+ local sbixshapes = resources.sbixshapes
+ if svgshapes then
+ resources.svgshapes = nil
+ if otf.svgenabled then
+ local timestamp = os.date()
+ -- work in progress ... a bit boring to do
+ containers.write(otf.svgcache,hash, {
+ svgshapes = svgshapes,
+ timestamp = timestamp,
+ })
+ data.properties.svg = {
+ hash = hash,
+ timestamp = timestamp,
+ }
+ end
+ end
+ if sbixshapes then
+ resources.sbixshapes = nil
+ if otf.sbixenabled then
+ local timestamp = os.date()
+ -- work in progress ... a bit boring to do
+ containers.write(otf.sbixcache,hash, {
+ sbixshapes = sbixshapes,
+ timestamp = timestamp,
+ })
+ data.properties.sbix = {
+ hash = hash,
+ timestamp = timestamp,
+ }
+ end
+ end
+ --
otfreaders.compact(data)
otfreaders.rehash(data,"unicodes")
otfreaders.addunicodetable(data)
@@ -282,7 +176,7 @@ function otf.load(filename,sub,featurefile) -- second argument (format) is gone
collectgarbage("collect")
end
stoptiming(otfreaders)
- if elapsedtime then -- not in generic
+ if elapsedtime then
report_otf("loading, optimizing, packing and caching time %s", elapsedtime(otfreaders))
end
if cleanup > 3 then
@@ -306,7 +200,7 @@ function otf.load(filename,sub,featurefile) -- second argument (format) is gone
otfreaders.expand(data) -- inline tables
otfreaders.addunicodetable(data) -- only when not done yet
--
- enhancers.apply(data,filename,data)
+ otfenhancers.apply(data,filename,data)
--
-- constructors.addcoreunicodes(data.resources.unicodes) -- still needed ?
--
@@ -315,9 +209,23 @@ function otf.load(filename,sub,featurefile) -- second argument (format) is gone
end
--
data.metadata.math = data.resources.mathconstants
+ --
+ -- delayed tables (experiment)
+ --
+ local classes = data.resources.classes
+ if not classes then
+ local descriptions = data.descriptions
+ classes = setmetatableindex(function(t,k)
+ local d = descriptions[k]
+ local v = (d and d.class or "base") or false
+ t[k] = v
+ return v
+ end)
+ data.resources.classes = classes
+ end
+ --
end
-
return data
end
@@ -346,7 +254,6 @@ end
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)
@@ -485,14 +392,14 @@ local function copytotfm(data,cache_id)
spaceunits, spacer = charwidth, "charwidth"
end
end
- spaceunits = tonumber(spaceunits) or 500 -- brrr
+ spaceunits = tonumber(spaceunits) or units/2
--
parameters.slant = 0
- parameters.space = spaceunits -- 3.333 (cmr10)
+ 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
+ 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
@@ -553,16 +460,55 @@ local function copytotfm(data,cache_id)
end
end
+-- These woff files are a kind of joke in a tex environment because one can simply convert
+-- them to ttf/otf and use them as such (after all, we cache them too). The successor format
+-- woff2 is more complex so there we can as well call an external converter which in the end
+-- makes this code kind of obsolete before it's even used. Although ... it might become a
+-- more general conversion plug in.
+
+local converters = {
+ woff = {
+ cachename = "webfonts",
+ action = otf.readers.woff2otf,
+ }
+}
+
+local function checkconversion(specification)
+ local filename = specification.filename
+ local converter = converters[lower(file.suffix(filename))]
+ if converter then
+ local base = file.basename(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 size > 0 then
+ local cleanname = containers.cleanname(name)
+ local cachename = caches.setfirstwritablefile(cleanname,converter.cachename)
+ if not io.exists(cachename) or (time ~= lfs.attributes(cachename).modification) then
+ report_otf("caching font %a in %a",filename,cachename)
+ converter.action(filename,cachename) -- todo infoonly
+ lfs.touch(cachename,time,time)
+ end
+ specification.filename = cachename
+ end
+ end
+end
+
local function otftotfm(specification)
local cache_id = specification.hash
local tfmdata = containers.read(constructors.cache,cache_id)
if not tfmdata then
+
+ checkconversion(specification) -- for the moment here
+
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)
+ local instance = specification.instance or (features and features.axis)
+ local rawdata = otf.load(filename,sub,instance)
if rawdata and next(rawdata) then
local descriptions = rawdata.descriptions
rawdata.lookuphash = { } -- to be done
@@ -702,7 +648,7 @@ local function getgsub(tfmdata,k,kind,value)
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)
+ -- local choice = tonumber(value) or 1 -- no random here (yet)
for i=1,#lookuplist do
local lookup = lookuplist[i]
local steps = lookup.steps
@@ -725,7 +671,7 @@ end
otf.getgsub = getgsub -- returns value, gsub_kind
function otf.getsubstitution(tfmdata,k,kind,value)
- local found, kind = getgsub(tfmdata,k,kind)
+ local found, kind = getgsub(tfmdata,k,kind,value)
if not found then
--
elseif kind == "gsub_single" then
@@ -790,9 +736,14 @@ 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
+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.woff(specification)
+ checkconversion(specification)
+ opentypereader(specification,"")
+end
-- this will be overloaded
diff --git a/tex/context/base/mkiv/font-otn.lua b/tex/context/base/mkiv/font-otn.lua
index 7e701c4b4..ace7bf12b 100644
--- a/tex/context/base/mkiv/font-otn.lua
+++ b/tex/context/base/mkiv/font-otn.lua
@@ -192,7 +192,6 @@ 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)
@@ -226,15 +225,12 @@ 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
-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 flush_node = nuts.flush_node
local end_of_math = nuts.end_of_math
local traverse_nodes = nuts.traverse
local traverse_id = nuts.traverse_id
@@ -251,7 +247,6 @@ 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
@@ -286,11 +281,13 @@ local cursonce = true
local fonthashes = fonts.hashes
local fontdata = fonthashes.identifiers
-local otffeatures = fonts.constructors.newfeatures("otf")
+local otffeatures = fonts.constructors.features.otf
local registerotffeature = otffeatures.register
local onetimemessage = fonts.loggers.onetimemessage or function() end
+local getrandom = utilities and utilities.randomizer and utilities.randomizer.get
+
otf.defaultnodealternate = "none" -- first last
-- we share some vars here, after all, we have no nested lookups and less code
@@ -409,7 +406,7 @@ end
local function flattendisk(head,disc)
local replace = getfield(disc,"replace")
setfield(disc,"replace",nil)
- free_node(disc)
+ flush_node(disc)
if head == disc then
local next = getnext(disc)
if replace then
@@ -687,7 +684,7 @@ end
local function get_alternative_glyph(start,alternatives,value,trace_alternatives)
local n = #alternatives
if value == "random" then
- local r = random(1,n)
+ local r = getrandom and getrandom("glyph",1,n) or 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)
@@ -1228,41 +1225,6 @@ example, the following is valid:</p>
<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 = getnext(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.</p>
--ldx]]--
@@ -2850,10 +2812,12 @@ 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,autoscript,autolanguage)
- if v then
- rl[#rl+1] = v
+ if sequences then
+ 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
end
diff --git a/tex/context/base/mkiv/font-oto.lua b/tex/context/base/mkiv/font-oto.lua
index 23beba787..13568799b 100644
--- a/tex/context/base/mkiv/font-oto.lua
+++ b/tex/context/base/mkiv/font-oto.lua
@@ -14,8 +14,6 @@ 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)
@@ -122,7 +120,7 @@ local function registerbasehash(tfmdata)
basehash[hash] = base
end
properties.basehash = base
- properties.fullname = properties.fullname .. "-" .. base
+ properties.fullname = (properties.fullname or properties.name) .. "-" .. base
-- report_prepare("fullname base hash '%a, featureset %a",tfmdata.properties.fullname,hash)
applied = { }
end
@@ -227,6 +225,11 @@ local function preparesubstitutions(tfmdata,feature,value,validlookups,lookuplis
local trace_alternatives = trace_baseinit and trace_alternatives
local trace_ligatures = trace_baseinit and trace_ligatures
+ if not changed then
+ changed = { }
+ tfmdata.changed = changed
+ end
+
for i=1,#lookuplist do
local sequence = lookuplist[i]
local steps = sequence.steps
@@ -234,12 +237,12 @@ local function preparesubstitutions(tfmdata,feature,value,validlookups,lookuplis
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 not changed[unicode] then -- fails for multiple subs in some math fonts
if trace_singles then
report_substitution(feature,sequence,descriptions,unicode,data)
end
changed[unicode] = data
- end
+ -- end
end
end
elseif kind == "gsub_alternate" then
@@ -394,7 +397,8 @@ local function featuresinitializer(tfmdata,value)
local properties = tfmdata.properties
local script = properties.script
local language = properties.language
- local rawfeatures = rawdata.resources.features
+ local rawresources = rawdata.resources
+ local rawfeatures = rawresources and rawresources.features
local basesubstitutions = rawfeatures and rawfeatures.gsub
local basepositionings = rawfeatures and rawfeatures.gpos
--
diff --git a/tex/context/base/mkiv/font-otp.lua b/tex/context/base/mkiv/font-otp.lua
index 91bd05b32..c52e574b9 100644
--- a/tex/context/base/mkiv/font-otp.lua
+++ b/tex/context/base/mkiv/font-otp.lua
@@ -30,9 +30,6 @@ 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
@@ -146,7 +143,7 @@ end
-- and repack in such cases (never needed anyway) .. a tricky aspect is that
-- we then need to sort more thanks to random hashing
-local function packdata(data)
+function otf.packdata(data)
if data then
-- stripdata(data)
@@ -536,7 +533,7 @@ local unpacked_mt = {
end
}
-local function unpackdata(data)
+function otf.unpackdata(data)
if data then
local tables = data.tables
@@ -895,15 +892,3 @@ local function unpackdata(data)
end
end
end
-
-if otf.enhancers.register then
-
- otf.enhancers.register( "pack", packdata)
- otf.enhancers.register("unpack",unpackdata)
-
--- todo: directive
-
-end
-
-otf.enhancers.unpack = unpackdata -- used elsewhere
-otf.enhancers.pack = packdata -- used elsewhere
diff --git a/tex/context/base/mkiv/font-otr.lua b/tex/context/base/mkiv/font-otr.lua
index c967e2411..4f93c5579 100644
--- a/tex/context/base/mkiv/font-otr.lua
+++ b/tex/context/base/mkiv/font-otr.lua
@@ -65,11 +65,9 @@ if not modules then modules = { } end modules ['font-otr'] = {
-- 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, abs, sqrt, round = math.floor, math.abs, math.sqrt, math.round
+local next, type = next, type
+local byte, lower, char, gsub = string.byte, string.lower, string.char, string.gsub
+local floor, round = math.floor, 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
@@ -77,12 +75,16 @@ local setmetatableindex = table.setmetatableindex
local formatters = string.formatters
local sortedkeys = table.sortedkeys
local sortedhash = table.sortedhash
-local stripstring = string.strip
+local stripstring = string.nospaces
local utf16_to_utf8_be = utf.utf16_to_utf8_be
local report = logs.reporter("otf reader")
local trace_cmap = false -- only for checking issues
+local trace_cmap_detail = false -- only for checking issues
+
+-- local trace_cmap = true
+-- local trace_cmap_detail = true
fonts = fonts or { }
local handlers = fonts.handlers or { }
@@ -92,14 +94,16 @@ 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
+----- streamreader = utilities.streams -- faster on big files (not true any longer)
+local streamreader = utilities.files -- faster on identify (also uses less memory)
+local streamwriter = utilities.files
readers.streamreader = streamreader
+readers.streamwriter = streamwriter
local openfile = streamreader.open
local closefile = streamreader.close
-local skipbytes = streamreader.skip
+----- skipbytes = streamreader.skip
local setposition = streamreader.setposition
local skipshort = streamreader.skipshort
local readbytes = streamreader.readbytes
@@ -107,18 +111,18 @@ 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 readulong = streamreader.readcardinal4 -- 32-bit unsigned integer
+----- readchar = streamreader.readinteger1 -- 8-bit signed integer
local readshort = streamreader.readinteger2 -- 16-bit signed integer
-local readlong = streamreader.readinteger4 -- 24-bit unsigned integer
+local readlong = streamreader.readinteger4 -- 32-bit unsigned integer
local readfixed = streamreader.readfixed4
+local read2dot14 = streamreader.read2dot14 -- 16-bit signed fixed number with the low 14 bits of fraction (2.14) (F2DOT14)
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)))
+ return lower(stripstring(readstring(f,4)))
end
-- date represented in number of seconds since 12:00 midnight, January 1, 1904. The value is represented as a
@@ -129,19 +133,9 @@ local function readlongdatetime(f)
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
+local tableversion = 0.004
+readers.tableversion = tableversion
+local privateoffset = fonts.constructors and fonts.constructors.privateoffset or 0xF0000 -- 0x10FFFF
-- 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
@@ -173,6 +167,7 @@ local reservednames = { [0] =
"wwssubfamily",
"lightbackgroundpalette",
"darkbackgroundpalette",
+ "variationspostscriptnameprefix",
}
-- more at: https://www.microsoft.com/typography/otspec/name.htm
@@ -644,7 +639,7 @@ local weights = {
[300] = "light",
[400] = "normal",
[500] = "medium",
- [600] = "semibold",
+ [600] = "semibold", -- demi demibold
[700] = "bold",
[800] = "extrabold",
[900] = "black",
@@ -703,6 +698,44 @@ local panosewidths = {
-- We implement a reader per table.
+-- helper
+
+local helpers = { }
+readers.helpers = helpers
+
+local function gotodatatable(f,fontdata,tag,criterium)
+ if criterium and f then
+ local datatable = fontdata.tables[tag]
+ if datatable then
+ local tableoffset = datatable.offset
+ setposition(f,tableoffset)
+ return tableoffset
+ end
+ end
+end
+
+local function reportskippedtable(f,fontdata,tag,criterium)
+ if criterium and f then
+ local datatable = fontdata.tables[tag]
+ if datatable then
+ report("loading of table %a skipped",tag)
+ end
+ end
+end
+
+local function setvariabledata(fontdata,tag,data)
+ local variabledata = fontdata.variabledata
+ if variabledata then
+ variabledata[tag] = data
+ else
+ fontdata.variabledata = { [tag] = data }
+ end
+end
+
+helpers.gotodatatable = gotodatatable
+helpers.setvariabledata = setvariabledata
+helpers.reportskippedtable = reportskippedtable
+
-- 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.
@@ -718,14 +751,13 @@ local platformnames = {
}
function readers.name(f,fontdata,specification)
- local datatable = fontdata.tables.name
- if datatable then
- setposition(f,datatable.offset)
+ local tableoffset = gotodatatable(f,fontdata,"name",true)
+ if tableoffset then
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 start = tableoffset + offset
local namelists = {
unicode = { },
windows = { },
@@ -746,19 +778,17 @@ function readers.name(f,fontdata,specification)
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
+ local index = readushort(f)
+ local name = reservednames[index]
+ namelist[#namelist+1] = {
+ platform = platform,
+ encoding = encoding,
+ language = language,
+ name = name,
+ index = index,
+ length = readushort(f),
+ offset = start + readushort(f),
+ }
else
skipshort(f,3)
end
@@ -782,8 +812,9 @@ function readers.name(f,fontdata,specification)
--
-- we need to choose one we like, for instance an unicode one
--
- local names = { }
- local done = { }
+ local names = { }
+ local done = { }
+ local extras = { }
--
-- 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
@@ -794,7 +825,8 @@ function readers.name(f,fontdata,specification)
for i=1,#namelist do
local name = namelist[i]
local nametag = name.name
- if not done[nametag] then
+ local index = name.index
+ if not done[nametag or i] then
local encoding = name.encoding
local language = name.language
if (not e or encoding == e) and (not l or language == l) then
@@ -807,13 +839,16 @@ function readers.name(f,fontdata,specification)
if decoder then
content = decoder(content)
end
- names[nametag] = {
- content = content,
- platform = platform,
- encoding = encoding,
- language = language,
- }
- done[nametag] = true
+ if nametag then
+ names[nametag] = {
+ content = content,
+ platform = platform,
+ encoding = encoding,
+ language = language,
+ }
+ end
+ extras[index] = content
+ done[nametag or i] = true
end
end
end
@@ -826,7 +861,8 @@ function readers.name(f,fontdata,specification)
filter("macintosh")
filter("unicode")
--
- fontdata.names = names
+ fontdata.names = names
+ fontdata.extras = extras
--
if specification.platformnames then
local collected = { }
@@ -883,9 +919,8 @@ end
-- properties table afterwards.
readers["os/2"] = function(f,fontdata)
- local datatable = fontdata.tables["os/2"]
- if datatable then
- setposition(f,datatable.offset)
+ local tableoffset = gotodatatable(f,fontdata,"os/2",true)
+ if tableoffset then
local version = readushort(f)
local windowsmetrics = {
version = version,
@@ -944,9 +979,8 @@ readers["os/2"] = function(f,fontdata)
end
readers.head = function(f,fontdata)
- local datatable = fontdata.tables.head
- if datatable then
- setposition(f,datatable.offset)
+ local tableoffset = gotodatatable(f,fontdata,"head",true)
+ if tableoffset then
local fontheader = {
version = readfixed(f),
revision = readfixed(f),
@@ -974,37 +1008,63 @@ readers.head = function(f,fontdata)
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.
+-- variables are not used but nofmetrics 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
+ local tableoffset = gotodatatable(f,fontdata,"hhea",specification.details)
+ if tableoffset then
+ fontdata.horizontalheader = {
+ version = readfixed(f), -- two ushorts: major minor
+ 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),
+ nofmetrics = readushort(f),
+ }
+ else
+ fontdata.horizontalheader = {
+ nofmetrics = 0,
+ }
+ end
+end
+
+readers.vhea = function(f,fontdata,specification)
+ local tableoffset = gotodatatable(f,fontdata,"vhea",specification.details)
+ if tableoffset then
+ fontdata.verticalheader = {
+ version = readfixed(f),
+ ascender = readfword(f),
+ descender = readfword(f),
+ linegap = readfword(f),
+ maxadvanceheight = readufword(f),
+ mintopsidebearing = readfword(f),
+ minbottomsidebearing = 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),
+ nofmetrics = readushort(f),
+ }
+ else
+ fontdata.verticalheader = {
+ nofmetrics = 0,
+ }
end
end
@@ -1014,44 +1074,40 @@ end
-- 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
+ local tableoffset = gotodatatable(f,fontdata,"maxp",specification.details)
+ if tableoffset then
+ local version = readfixed(f)
+ local nofglyphs = readushort(f)
+ fontdata.nofglyphs = nofglyphs
+ if version == 0.5 then
+ fontdata.maximumprofile = {
+ version = version,
+ nofglyphs = nofglyphs,
+ }
+ 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),
+ }
+ else
+ fontdata.maximumprofile = {
+ version = version,
+ nofglyphs = 0,
+ }
end
- fontdata.maximumprofile = {
- version = version,
- nofglyphs = 0,
- }
end
end
@@ -1059,49 +1115,87 @@ end
-- 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
+ local tableoffset = gotodatatable(f,fontdata,"hmtx",specification.glyphs)
+ if tableoffset then
+ local horizontalheader = fontdata.horizontalheader
+ local nofmetrics = horizontalheader.nofmetrics
+ 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
- -- 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
+-- for now
+-- 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
+ -- hm, there can be a lsb here
+ end
+end
+
+readers.vmtx = function(f,fontdata,specification)
+ local tableoffset = gotodatatable(f,fontdata,"vmtx",specification.glyphs)
+ if tableoffset then
+ local verticalheader = fontdata.verticalheader
+ local nofmetrics = verticalheader.nofmetrics
+ local glyphs = fontdata.glyphs
+ local nofglyphs = fontdata.nofglyphs
+ local vheight = 0
+ local vdefault = verticalheader.ascender + verticalheader.descender
+ local topsidebearing = 0
+ for i=0,nofmetrics-1 do
+ local glyph = glyphs[i]
+ vheight = readshort(f)
+ topsidebearing = readshort(f)
+ if vheight ~= 0 and vheight ~= vdefault then
+ glyph.vheight = vheight
end
+ -- if topsidebearing ~= 0 then
+ -- glyph.tsb = topsidebearing
+ -- end
+ end
+ -- The next can happen in for instance a monospace font or in a cjk font
+ -- with fixed heights.
+ for i=nofmetrics,nofglyphs-1 do
+ local glyph = glyphs[i]
+ if vheight ~= 0 and vheight ~= vdefault then
+ glyph.vheight = vheight
+ end
+ -- if topsidebearing ~= 0 then
+ -- glyph.tsb = topsidebearing
+ -- end
end
end
end
+readers.vorg = function(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"vorg",specification.glyphs)
+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 tableoffset = gotodatatable(f,fontdata,"post",true)
+ if tableoffset then
local version = readfixed(f)
fontdata.postscript = {
version = version,
@@ -1130,7 +1224,7 @@ readers.post = function(f,fontdata,specification)
for i=0,nofglyphs-1 do
local nameindex = readushort(f)
if nameindex >= 258 then
- maxnames = maxnames + 1
+ maxnames = maxnames + 1
nameindex = nameindex - 257
indices[nameindex] = i
else
@@ -1143,7 +1237,7 @@ readers.post = function(f,fontdata,specification)
report("quit post name fetching at %a of %a: %s",i,maxnames,"no index")
break
else
- local length = readbyte(f)
+ local length = readbyte(f)
if length > 0 then
glyphs[mapping].name = readstring(f,length)
else
@@ -1163,9 +1257,7 @@ readers.post = function(f,fontdata,specification)
end
readers.cff = function(f,fontdata,specification)
- if specification.glyphs then
- reportskippedtable("cff")
- end
+ reportskippedtable(f,fontdata,"cff",specification.glyphs)
end
-- Not all cmaps make sense .. e.g. dfont is obsolete and probably more are not relevant. Let's see
@@ -1187,6 +1279,7 @@ local sequence = {
-- variants
{ 0, 5, 14 },
-- last resort ranges
+{ 0, 4, 12 },
{ 3, 10, 13 },
}
@@ -1205,7 +1298,8 @@ local sequence = {
local supported = { }
for i=1,#sequence do
- local sp, se, sf = unpack(sequence[i])
+ local si = sequence[i]
+ local sp, se, sf = si[1], si[2], si[3]
local p = supported[sp]
if not p then
p = { }
@@ -1269,7 +1363,7 @@ formatreaders[4] = function(f,fontdata,offset)
elseif offset == 0xFFFF then
-- bad encoding
elseif offset == 0 then
- if trace_cmap then
+ if trace_cmap_detail then
report("format 4.%i segment %2i from %C upto %C at index %H",1,segment,startchar,endchar,(startchar + delta) % 65536)
end
for unicode=startchar,endchar do
@@ -1302,7 +1396,7 @@ formatreaders[4] = function(f,fontdata,offset)
end
else
local shift = (segment-nofsegments+offset/2) - startchar
- if trace_cmap then
+ if trace_cmap_detail then
report("format 4.%i segment %2i from %C upto %C at index %H",0,segment,startchar,endchar,(startchar + delta) % 65536)
end
for unicode=startchar,endchar do
@@ -1352,7 +1446,7 @@ formatreaders[6] = function(f,fontdata,offset)
local count = readushort(f)
local stop = start+count-1
local nofdone = 0
- if trace_cmap then
+ if trace_cmap_detail then
report("format 6 from %C to %C",2,start,stop)
end
for unicode=start,stop do
@@ -1389,7 +1483,7 @@ formatreaders[12] = function(f,fontdata,offset)
local first = readulong(f)
local last = readulong(f)
local index = readulong(f)
- if trace_cmap then
+ if trace_cmap_detail then
report("format 12 from %C to %C starts at index %i",first,last,index)
end
for unicode=first,last do
@@ -1433,7 +1527,7 @@ formatreaders[13] = function(f,fontdata,offset)
local last = readulong(f)
local index = readulong(f)
if first < privateoffset then
- if trace_cmap then
+ if trace_cmap_detail then
report("format 13 from %C to %C get index %i",first,last,index)
end
local glyph = glyphs[index]
@@ -1539,76 +1633,82 @@ local function checkcmap(f,fontdata,records,platform,encoding,format)
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)
+ if trace_cmap then
+ report("cmap checked: platform %i (%s), encoding %i (%s), format %i, new unicodes %i",platform,p,encoding,e and e[encoding] or "?",format,n)
+ end
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 = { },
- }
+ local tableoffset = gotodatatable(f,fontdata,"cmap",specification.glyphs)
+ if tableoffset then
+ 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 subtables = record[encoding]
- if not subtables then
- record[encoding] = {
- offsets = { offset },
- formats = { },
- }
- else
- local offsets = subtables.offsets
- offsets[#offsets+1] = offset
- end
+ local offsets = subtables.offsets
+ offsets[#offsets+1] = offset
end
end
+ end
+ if trace_cmap then
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 "?"
+ end
+ for platform, record in sortedhash(records) do
+ local p = platforms[platform]
+ local e = encodings[p]
+ local sp = supported[platform]
+ local ps = p or "?"
+ if trace_cmap then
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 "?"
+ end
+ for encoding, subtables in sortedhash(record) do
+ local se = sp and sp[encoding]
+ local es = e and e[encoding] or "?"
+ if trace_cmap then
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
+ 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
+ if trace_cmap then
local list = sortedkeys(formats)
for i=1,#list do
if not (se and se[list[i]]) then
@@ -1618,26 +1718,27 @@ function readers.cmap(f,fontdata,specification)
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
+ --
+ local ok = false
+ for i=1,#sequence do
+ local si = sequence[i]
+ local sp, se, sf = si[1], si[2], si[3]
+ if checkcmap(f,fontdata,records,sp,se,sf) > 0 then
+ ok = true
end
- --
- fontdata.cidmaps = {
- version = version,
- noftables = noftables,
- records = records,
- }
- else
- fontdata.cidmaps = { }
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
@@ -1646,203 +1747,120 @@ end
-- 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
+ reportskippedtable(f,fontdata,"loca",specification.glyphs)
end
function readers.glyf(f,fontdata,specification) -- part goes to cff module
- if specification.glyphs then
- reportskippedtable("glyf")
- end
+ reportskippedtable(f,fontdata,"glyf",specification.glyphs)
+end
+
+-- The MicroSoft variant is pretty clean and is supported (implemented elsewhere)
+-- just because I wanted to see how such a font looks like.
+
+function readers.colr(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"colr",specification.glyphs)
+end
+function readers.cpal(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"cpal",specification.glyphs)
+end
+
+-- This one is also supported, if only because I could locate a proper font for
+-- testing.
+
+function readers.svg(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"svg",specification.glyphs)
+end
+
+-- There is a font from apple to test the next one. Will there be more? Anyhow,
+-- it's relatively easy to support, so I did it.
+
+function readers.sbix(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"sbix",specification.glyphs)
+end
+
+-- I'm only willing to look into the next variant if I see a decent and complete (!)
+-- font and more can show up. It makes no sense to waste time on ideas. Okay, the
+-- apple font also has these tables.
+
+function readers.cbdt(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"cbdt",specification.glyphs)
+end
+function readers.cblc(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"cblc",specification.glyphs)
+end
+function readers.ebdt(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"ebdt",specification.glyphs)
+end
+function readers.ebsc(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"ebsc",specification.glyphs)
+end
+function readers.eblc(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"eblc",specification.glyphs)
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
+ local tableoffset = gotodatatable(f,fontdata,"kern",specification.kerns)
+ if tableoffset then
+ 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
- elseif format == 2 then
- report("todo: kern classes")
- else
- report("todo: kerns")
end
+ elseif format == 2 then
+ report("todo: kern classes")
+ else
+ report("todo: kerns")
end
end
end
end
function readers.gdef(f,fontdata,specification)
- if specification.details then
- reportskippedtable("gdef")
- end
+ reportskippedtable(f,fontdata,"gdef",specification.details)
end
function readers.gsub(f,fontdata,specification)
- if specification.details then
- reportskippedtable("gsub")
- end
+ reportskippedtable(f,fontdata,"gsub",specification.details)
end
function readers.gpos(f,fontdata,specification)
- if specification.details then
- reportskippedtable("gpos")
- end
+ reportskippedtable(f,fontdata,"gpos",specification.details)
end
function readers.math(f,fontdata,specification)
- if specification.glyphs then
- reportskippedtable("math")
- end
+ reportskippedtable(f,fontdata,"math",specification.details)
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 function getinfo(maindata,sub,platformnames,rawfamilynames,metricstoo,instancenames)
local fontdata = sub and maindata.subfonts and maindata.subfonts[sub] or maindata
local names = fontdata.names
local info = nil
@@ -1852,8 +1870,8 @@ local function getinfo(maindata,sub,platformnames,rawfamilynames)
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 weight = getname(fontdata,"weight") or (cffinfo and cffinfo.weight) or (metrics and metrics.weight)
+ local width = getname(fontdata,"width") or (cffinfo and cffinfo.width ) or (metrics and metrics.width )
local fontname = getname(fontdata,"postscriptname")
local fullname = getname(fontdata,"fullname")
local family = getname(fontdata,"family")
@@ -1867,6 +1885,25 @@ local function getinfo(maindata,sub,platformnames,rawfamilynames)
if not familyname then familyname = family end
if not subfamilyname then subfamilyname = subfamily end
end
+ if platformnames then
+ platformnames = fontdata.platformnames
+ end
+ if instancenames then
+ local variabledata = fontdata.variabledata
+ if variabledata then
+ local instances = variabledata and variabledata.instances
+ if instances then
+ instancenames = { }
+ for i=1,#instances do
+ instancenames[i] = lower(stripstring(instances[i].subfamily))
+ end
+ else
+ instancenames = nil
+ end
+ else
+ instancenames = nil
+ end
+ end
info = { -- we inherit some inconsistencies/choices from ff
subfontindex = fontdata.subfontindex or sub or 0,
-- filename = filename,
@@ -1897,8 +1934,32 @@ local function getinfo(maindata,sub,platformnames,rawfamilynames)
capheight = metrics.capheight, -- not always present and probably crap
ascender = metrics.typoascender,
descender = metrics.typodescender,
- platformnames = platformnames and fontdata.platformnames or nil,
+ platformnames = platformnames or nil,
+ instancenames = instancenames or nil,
}
+ if metricstoo then
+ local keys = {
+ "version",
+ "ascender", "descender", "linegap",
+ -- "caretoffset", "caretsloperise", "caretsloperun",
+ "maxadvancewidth", "maxadvanceheight", "maxextent",
+ -- "metricdataformat",
+ "minbottomsidebearing", "mintopsidebearing",
+ }
+ local h = fontdata.horizontalheader or { }
+ local v = fontdata.verticalheader or { }
+ if h then
+ local th = { }
+ local tv = { }
+ for i=1,#keys do
+ local key = keys[i]
+ th[key] = h[key] or 0
+ tv[key] = v[key] or 0
+ end
+ info.horizontalmetrics = th
+ info.verticalmetrics = tv
+ end
+ end
elseif n then
info = {
filename = fontdata.filename,
@@ -1932,6 +1993,7 @@ local function loadtables(f,specification,offset)
entryselector = readushort(f), -- not needed
rangeshift = readushort(f), -- not needed
tables = tables,
+ foundtables = false,
}
for i=1,fontdata.noftables do
local tag = lower(stripstring(readstring(f,4)))
@@ -1947,7 +2009,8 @@ local function loadtables(f,specification,offset)
length = length,
}
end
- if tables.cff then
+ fontdata.foundtables = sortedkeys(tables)
+ if tables.cff or tables.cff2 then
fontdata.format = "opentype"
else
fontdata.format = "truetype"
@@ -1968,14 +2031,35 @@ local function prepareglyps(fontdata)
fontdata.mapping = { }
end
+local function readtable(tag,f,fontdata,specification,...)
+ local reader = readers[tag]
+ if reader then
+ -- local t = os.clock()
+ reader(f,fontdata,specification,...)
+ -- report("reading table %a took %0.4f seconds",tag,os.clock()-t)
+ end
+end
+
+local variablefonts_supported = (context and true) or (logs and logs.application and true) or false
+
local function readdata(f,offset,specification)
+
local fontdata = loadtables(f,specification,offset)
+
if specification.glyphs then
prepareglyps(fontdata)
end
- --
- readers["name"](f,fontdata,specification)
- --
+
+ if not variablefonts_supported then
+ specification.instance = nil
+ specification.variable = nil
+ specification.factors = nil
+ end
+
+ fontdata.temporary = { }
+
+ readtable("name",f,fontdata,specification)
+
local askedname = specification.askedname
if askedname then
local fullname = getname(fontdata,"fullname") or ""
@@ -1985,29 +2069,124 @@ local function readdata(f,offset,specification)
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)
- --
+
+ readtable("stat",f,fontdata,specification)
+ readtable("avar",f,fontdata,specification)
+ readtable("fvar",f,fontdata,specification)
+
+ if variablefonts_supported then
+
+ local variabledata = fontdata.variabledata
+
+ if variabledata then
+ local instances = variabledata.instances
+ local axis = variabledata.axis
+ if axis and (not instances or #instances == 0) then
+ instances = { }
+ variabledata.instances = instances
+ local function add(n,subfamily,value)
+ local values = { }
+ for i=1,#axis do
+ local a = axis[i]
+ values[i] = {
+ axis = a.tag,
+ value = i == n and value or a.default,
+ }
+ end
+ instances[#instances+1] = {
+ subfamily = subfamily,
+ values = values,
+ }
+ end
+ for i=1,#axis do
+ local a = axis[i]
+ local tag = a.tag
+ add(i,"default"..tag,a.default)
+ add(i,"minimum"..tag,a.minimum)
+ add(i,"maximum"..tag,a.maximum)
+ end
+ -- report("%i fake instances added",#instances)
+ end
+ end
+
+ if not specification.factors then
+ local instance = specification.instance
+ if type(instance) == "string" then
+ local factors = helpers.getfactors(fontdata,instance)
+ if factors then
+ specification.factors = factors
+ fontdata.factors = factors
+ fontdata.instance = instance
+ report("user instance: %s, factors: % t",instance,factors)
+ else
+ report("user instance: %s, bad factors",instance)
+ end
+ end
+ end
+
+ if not fontdata.factors then
+ if fontdata.variabledata then
+ local factors = helpers.getfactors(fontdata,true)
+ if factors then
+ specification.factors = factors
+ fontdata.factors = factors
+ report("factors: % t",factors)
+ else
+ report("bad factors")
+ end
+ else
+ -- report("unknown instance")
+ end
+ end
+
+ end
+
+ readtable("os/2",f,fontdata,specification)
+ readtable("head",f,fontdata,specification)
+ readtable("maxp",f,fontdata,specification)
+ readtable("hhea",f,fontdata,specification)
+ readtable("vhea",f,fontdata,specification)
+ readtable("hmtx",f,fontdata,specification)
+ readtable("vmtx",f,fontdata,specification)
+ readtable("vorg",f,fontdata,specification)
+ readtable("post",f,fontdata,specification)
+
+ readtable("mvar",f,fontdata,specification)
+ readtable("hvar",f,fontdata,specification)
+ readtable("vvar",f,fontdata,specification)
+
+ readtable("gdef",f,fontdata,specification)
+
+ readtable("cff" ,f,fontdata,specification)
+ readtable("cff2",f,fontdata,specification)
+
+ readtable("cmap",f,fontdata,specification)
+ readtable("loca",f,fontdata,specification) -- maybe load it in glyf
+ readtable("glyf",f,fontdata,specification) -- loads gvar
+
+ readtable("colr",f,fontdata,specification)
+ readtable("cpal",f,fontdata,specification)
+
+ readtable("svg" ,f,fontdata,specification)
+
+ readtable("sbix",f,fontdata,specification)
+
+ readtable("cbdt",f,fontdata,specification)
+ readtable("cblc",f,fontdata,specification)
+ readtable("ebdt",f,fontdata,specification)
+ readtable("eblc",f,fontdata,specification)
+
+ readtable("kern",f,fontdata,specification)
+ readtable("gsub",f,fontdata,specification)
+ readtable("gpos",f,fontdata,specification)
+
+ readtable("math",f,fontdata,specification)
+
fontdata.locations = nil
fontdata.tables = nil
fontdata.cidmaps = nil
fontdata.dictionaries = nil
- -- fontdata.cff = nil
+ -- fontdata.cff = nil
return fontdata
end
@@ -2082,7 +2261,7 @@ local function loadfontdata(specification)
end
end
-local function loadfont(specification,n)
+local function loadfont(specification,n,instance)
if type(specification) == "string" then
specification = {
filename = specification,
@@ -2091,11 +2270,13 @@ local function loadfont(specification,n)
glyphs = true,
shapes = true,
kerns = true,
+ variable = true,
globalkerns = true,
lookups = true,
-- true or number:
subfont = n or true,
tounicode = false,
+ instance = instance
}
end
-- if shapes only then
@@ -2111,6 +2292,10 @@ local function loadfont(specification,n)
if specification.platformnames then
specification.platformnames = true -- not really used any more
end
+ if specification.instance or instance then
+ specification.variable = true
+ specification.instance = specification.instance or instance
+ end
local function message(str)
report("fatal error in file %a: %s\n%s",specification.filename,str,debug.traceback())
end
@@ -2122,12 +2307,24 @@ end
-- we need even less, but we can have a 'detail' variant
-function readers.loadshapes(filename,n)
+function readers.loadshapes(filename,n,instance,streams)
local fontdata = loadfont {
filename = filename,
shapes = true,
+ streams = streams,
+ variable = true,
subfont = n,
+ instance = instance,
}
+ if fontdata then
+ -- easier on luajit but still we can hit the 64 K stack constants issue
+ for k, v in next, fontdata.glyphs do
+ v.class = nil
+ v.index = nil
+ v.math = nil
+ -- v.name = nil
+ end
+ end
return fontdata and {
-- version = 0.123 -- todo
filename = filename,
@@ -2142,18 +2339,19 @@ function readers.loadshapes(filename,n)
}
end
-function readers.loadfont(filename,n)
+function readers.loadfont(filename,n,instance)
local fontdata = loadfont {
filename = filename,
glyphs = true,
shapes = false,
lookups = true,
+ variable = true,
-- kerns = true,
-- globalkerns = true, -- only for testing, e.g. cambria has different gpos and kern
subfont = n,
+ instance = instance,
}
if fontdata then
- --
return {
tableversion = tableversion,
creator = "context mkiv",
@@ -2163,9 +2361,13 @@ function readers.loadfont(filename,n)
descriptions = fontdata.descriptions,
format = fontdata.format,
goodies = { },
- metadata = getinfo(fontdata,n), -- no platformnames here !
+ metadata = getinfo(fontdata,n,false,false,true,true), -- no platformnames here !
properties = {
- hasitalics = fontdata.hasitalics or false,
+ hasitalics = fontdata.hasitalics or false,
+ maxcolorclass = fontdata.maxcolorclass,
+ hascolor = fontdata.hascolor or false,
+ instance = fontdata.instance,
+ factors = fontdata.factors,
},
resources = {
-- filename = fontdata.filename,
@@ -2182,6 +2384,11 @@ function readers.loadfont(filename,n)
version = getname(fontdata,"version"),
cidinfo = fontdata.cidinfo,
mathconstants = fontdata.mathconstants,
+ colorpalettes = fontdata.colorpalettes,
+ svgshapes = fontdata.svgshapes,
+ sbixshapes = fontdata.sbixshapes,
+ variabledata = fontdata.variabledata,
+ foundtables = fontdata.foundtables,
},
}
end
@@ -2193,6 +2400,7 @@ function readers.getinfo(filename,specification) -- string, nil|number|table
local subfont = nil
local platformnames = false
local rawfamilynames = false
+ local instancenames = true
if type(specification) == "table" then
subfont = tonumber(specification.subfont)
platformnames = specification.platformnames
@@ -2204,20 +2412,21 @@ function readers.getinfo(filename,specification) -- string, nil|number|table
filename = filename,
details = true,
platformnames = platformnames,
+ instancenames = true,
-- rawfamilynames = rawfamilynames,
}
if fontdata then
local subfonts = fontdata.subfonts
if not subfonts then
- return getinfo(fontdata,nil,platformnames,rawfamilynames)
+ return getinfo(fontdata,nil,platformnames,rawfamilynames,false,instancenames)
elseif not subfont then
local info = { }
for i=1,#subfonts do
- info[i] = getinfo(fontdata,i,platformnames,rawfamilynames)
+ info[i] = getinfo(fontdata,i,platformnames,rawfamilynames,false,instancenames)
end
return info
elseif subfont >= 1 and subfont <= #subfonts then
- return getinfo(fontdata,subfont,platformnames,rawfamilynames)
+ return getinfo(fontdata,subfont,platformnames,rawfamilynames,false,instancenames)
else
return {
filename = filename,
@@ -2274,63 +2483,3 @@ function readers.extend(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/tex/context/base/mkiv/font-ots.lua b/tex/context/base/mkiv/font-ots.lua
index 1af7bacf3..16c2ce735 100644
--- a/tex/context/base/mkiv/font-ots.lua
+++ b/tex/context/base/mkiv/font-ots.lua
@@ -6,73 +6,45 @@ if not modules then modules = { } end modules ['font-ots'] = { -- sequences
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
-
--- components will go away and be replaced by a property table which simplifies
--- code (also more efficient)
-
--- 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>The specification of OpenType is (or at least a decade ago was) 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. In the end we rely most on the Microsoft specification.</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>
+effect that suddenly fonts behave differently. We don't want to catch all font
+issues.</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>After a lot of experiments (mostly by Taco, me and Idris) the first implementation
+becaus quite useful. When it did most of what we wanted, a more optimized version
+evolved. 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 quite
+acceptable and has been improved over time. Many complex scripts are not yet supported
+yet, 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
+<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>Especially discretionary handling has been improved much by Kai Eigner who uses complex
+(latin) fonts. The current implementation is a compromis between his patches and my code
+and in the meantime performance is quite ok. We cannot check all border cases without
+compromising speed but so far we're okay. Given good test cases we can probably improve
+it here and there. Especially chain lookups are non trivial with discretionaries but
+things got much better over time thanks to Kai.</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
@@ -84,35 +56,75 @@ then in the output eventually.</p>
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>
+unpacked).</p>
-<p>As with the <l n='afm'/> code, we may decide to store more information in the
-<l n='otf'/> table.</p>
+<p>This module is sparsely documented because it is has been a moving target. The
+table format of the reader changed a bit over time and we experiment a lot with
+different methods for supporting features. By now the structures are quite stable</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>
+when there's a fix in the reader or processing code that can result in different
+results.</p>
+
+<p>This code is also used outside context but in context it has to work with other
+mechanisms. Both put some constraints on the code here.</p>
+
--ldx]]--
+-- Remark: We assume that cursives don't cross discretionaries which is okay because it
+-- is only used in semitic scripts.
+--
+-- Remark: We assume that marks precede base characters.
+--
+-- Remark: When complex ligatures extend into discs nodes we can get side effects. Normally
+-- this doesn't happen; ff\d{l}{l}{l} in lm works but ff\d{f}{f}{f}.
+--
+-- Todo: check if we copy attributes to disc nodes if needed.
+--
+-- Todo: it would be nice if we could get rid of components. In other places we can use
+-- the unicode properties.
+--
+-- Remark: 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.
+--
+-- Remark: This is not possible:
+--
+-- \discretionary {alpha-} {betagammadelta}
+-- {\discretionary {alphabeta-} {gammadelta}
+-- {\discretionary {alphabetagamma-} {delta}
+-- {alphabetagammadelta}}}
+--
+-- Remark: 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.
+--
+-- Remark: I wonder if indexed would be faster than unicoded. It would be a major
+-- rewrite to have char being unicode + an index field in glyph nodes. Also more
+-- assignments have to be made in order to keep things in sync. So, it's a no-go.
+--
+-- Remark: We can provide a fast loop when there are no disc nodes (tests show a 1%
+-- gain). Smaller functions might perform better cache-wise. But ... memory becomes
+-- faster anyway, so ...
+
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 registertracker = trackers.register
-local registerdirective = directives.register
+local logs = logs
+local trackers = trackers
+local nodes = nodes
+local attributes = attributes
+local fonts = fonts
-local fonts = fonts
-local otf = fonts.handlers.otf
+local otf = fonts.handlers.otf
+local tracers = nodes.tracers
-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)
@@ -124,38 +136,30 @@ local trace_cursive = false registertracker("otf.cursive", function(v
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_plugins = false registertracker("otf.plugins", function(v) trace_plugins = 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 optimizekerns = true
-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")
+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_warning = logs.reporter("fonts","otf warning")
+local report_run = logs.reporter("fonts","otf run")
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")
+registertracker("otf.sample","otf.steps,otf.actions,otf.analyzing")
local nuts = nodes.nuts
local tonode = nuts.tonode
@@ -182,28 +186,32 @@ local setchar = nuts.setchar
local getdisc = nuts.getdisc
local setdisc = nuts.setdisc
local setlink = nuts.setlink
+local getcomponents = nuts.getcomponents -- the original one, not yet node-aux
+local setcomponents = nuts.setcomponents -- the original one, not yet node-aux
+local getdir = nuts.getdir
+local getwidth = nuts.getwidth
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 flush_node = nuts.flush_node
local end_of_math = nuts.end_of_math
local traverse_nodes = nuts.traverse
local traverse_id = nuts.traverse_id
+local set_components = nuts.set_components
+local take_components = nuts.take_components
+local count_components = nuts.count_components
+local copy_no_components = nuts.copy_no_components
+local copy_only_glyphs = nuts.copy_only_glyphs
local setmetatableindex = table.setmetatableindex
-local zwnj = 0x200C
-local zwj = 0x200D
-local wildcard = "*"
-local default = "dflt"
+----- zwnj = 0x200C
+----- zwj = 0x200D
local nodecodes = nodes.nodecodes
local glyphcodes = nodes.glyphcodes
@@ -219,15 +227,8 @@ 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 a_state = attributes.private('state')
+local a_noligature = attributes.private("noligature")
local injections = nodes.injections
local setmark = injections.setmark
@@ -239,57 +240,56 @@ local copyinjection = injections.copy
local setligaindex = injections.setligaindex
local getligaindex = injections.getligaindex
-local cursonce = true
-
-local fonthashes = fonts.hashes
-local fontdata = fonthashes.identifiers
+local fontdata = fonts.hashes.identifiers
+local fontfeatures = fonts.hashes.features
-local otffeatures = fonts.constructors.newfeatures("otf")
+local otffeatures = fonts.constructors.features.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 getrandom = utilities and utilities.randomizer and utilities.randomizer.get
-local notmatchpre = { }
-local notmatchpost = { }
-local notmatchreplace = { }
-
-local handlers = { }
-
--- helper
+otf.defaultnodealternate = "none" -- first last
-local function isspace(n)
- if getid(n) == glue_code then
- local w = getfield(n,"width")
- if w >= threshold then
- return 32
- end
- end
+-- We use a few semi-global variables. The handler can be called nested but this assumes
+-- that the same font is used.
+
+local tfmdata = false
+local characters = false
+local descriptions = false
+local marks = false
+local classes = false
+local currentfont = false
+local factor = 0
+local threshold = 0
+local checkmarks = false
+
+local sweepnode = nil
+local sweepprev = nil
+local sweepnext = nil
+local sweephead = { }
+
+local notmatchpre = { }
+local notmatchpost = { }
+local notmatchreplace = { }
+
+local handlers = { }
+
+local isspace = injections.isspace
+local getthreshold = injections.getthreshold
+
+local checkstep = (tracers and tracers.steppers.check) or function() end
+local registerstep = (tracers and tracers.steppers.register) or function() end
+local registermessage = (tracers and tracers.steppers.message) or function() end
+
+local function checkdisccontent(d)
+ local pre, post, replace = getdisc(d)
+ if pre then for n in traverse_id(glue_code,pre) do print("pre",nodes.idstostring(pre)) break end end
+ if post then for n in traverse_id(glue_code,post) do print("pos",nodes.idstostring(post)) break end end
+ if replace then for n in traverse_id(glue_code,replace) do print("rep",nodes.idstostring(replace)) break 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(...)
@@ -354,6 +354,13 @@ local function mref(rlmode)
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.
+
-- We can assume that languages that use marks are not hyphenated. We can also assume
-- that at most one discretionary is present.
@@ -363,27 +370,19 @@ end
-- 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)
+ local pre, post, replace, pretail, posttail, replacetail = getdisc(disc,true)
+ local prev, next = getboth(disc)
+ local ishead = head == disc
+ setdisc(disc)
+ flush_node(disc)
+ if pre then
+ flush_node_list(pre)
+ end
+ if post then
+ flush_node_list(post)
+ end
+ if ishead then
if replace then
if next then
setlink(replacetail,next)
@@ -395,7 +394,6 @@ local function flattendisk(head,disc)
return -- maybe warning
end
else
- local prev, next = getboth(disc)
if replace then
if next then
setlink(replacetail,next)
@@ -416,66 +414,177 @@ local function appenddisc(disc,list)
if post then
setlink(posttail,posthead)
else
- post = phead
+ post = posthead
end
if replace then
setlink(replacetail,replacehead)
else
- replace = rhead
+ replace = replacehead
end
setdisc(disc,pre,post,replace)
end
-- start is a mark and we need to keep that one
+local take_components = getcomponents -- we overload here (for now)
+local set_components = setcomponents -- we overload here (for now)
+----- get_components = getcomponents -- we overload here (for now)
+
+local function count_components(start,marks)
+ if getid(start) ~= glyph_code then
+ return 0
+ elseif getsubtype(start) == ligature_code then
+ local i = 0
+ local components = getcomponents(start)
+ while components do
+ i = i + count_components(components,marks)
+ components = getnext(components)
+ end
+ return i
+ elseif not marks[getchar(start)] then
+ return 1
+ else
+ return 0
+ end
+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)
- setprev(start,nil)
- setnext(stop,nil)
- local base = copy_glyph(start)
+ setprev(start)
+ setnext(stop)
+ local base = copy_no_components(start,copyinjection)
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)
+ set_components(base,start)
+ setlink(prev,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
+-- local prev = getprev(start)
+-- local next = getnext(stop)
+-- local comp = start
+-- setprev(start)
+-- setnext(stop)
+-- local base = copy_no_components(start,copyinjection)
+-- if start == head then
+-- head = base
+-- end
+-- resetinjection(base)
+-- setchar(base,char)
+-- setsubtype(base,ligature_code)
+-- set_components(base,comp)
+-- setlink(prev,base,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,marks)
+-- 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 current = comp
+-- local previous = nil
+-- local copied = nil
+-- while current do
+-- if getid(current) == glyph_code then
+-- local n = copy_node(current)
+-- if copied then
+-- setlink(previous,n)
+-- else
+-- copied = n
+-- end
+-- previous = n
+-- end
+-- current = getnext(current)
+-- end
+-- setprev(discnext) -- also blocks funny assignments
+-- setnext(discprev) -- also blocks funny assignments
+-- if pre then
+-- setlink(discprev,pre)
+-- end
+-- pre = comp
+-- if post then
+-- setlink(posttail,discnext)
+-- setprev(post)
+-- else
+-- post = discnext
+-- end
+-- setlink(prev,discfound,next)
+-- setboth(base)
+-- set_components(base,copied)
+-- setdisc(discfound,pre,post,base) -- was discretionary_code
+-- base = prev -- restart
+-- end
+-- end
+-- end
+-- return head, base
+-- end
local function toligature(head,start,stop,char,dataset,sequence,markflag,discfound) -- brr head
if getattr(start,a_noligature) == 1 then
@@ -487,33 +596,20 @@ local function toligature(head,start,stop,char,dataset,sequence,markflag,discfou
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)
+ setprev(start)
+ setnext(stop)
+ local base = copy_no_components(start,copyinjection)
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)
+ set_components(base,comp)
+ setlink(prev,base,next)
if not discfound then
local deletemarks = markflag ~= "mark"
local components = start
@@ -526,7 +622,7 @@ local function toligature(head,start,stop,char,dataset,sequence,markflag,discfou
local char = getchar(start)
if not marks[char] then
baseindex = baseindex + componentindex
- componentindex = getcomponentindex(start)
+ componentindex = count_components(start,marks)
elseif not deletemarks then -- quite fishy
setligaindex(start,baseindex + getligaindex(start,componentindex))
if trace_marks then
@@ -541,7 +637,6 @@ local function toligature(head,start,stop,char,dataset,sequence,markflag,discfou
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)
@@ -567,49 +662,37 @@ local function toligature(head,start,stop,char,dataset,sequence,markflag,discfou
-- \- 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
+ if not replace then
local prev = getprev(base)
--- local copied = copy_node_list(comp)
-local current = comp
-local previous = nil
-local copied = nil
-while current do
- if getid(current) == glyph_code then
- local n = copy_node(current)
- if copied then
- setlink(previous,n)
- else
- copied = n
- end
- previous = n
- end
- current = getnext(current)
-end
- setprev(discnext,nil) -- also blocks funny assignments
- setnext(discprev,nil) -- also blocks funny assignments
+ local comp = take_components(base)
+ local copied = copy_only_glyphs(comp)
if pre then
setlink(discprev,pre)
+ else
+ setnext(discprev) -- also blocks funny assignments
end
pre = comp
if post then
setlink(posttail,discnext)
- setprev(post,nil)
+ setprev(post)
else
post = discnext
+ setprev(discnext) -- also blocks funny assignments
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
+ setlink(prev,discfound,next)
+ setboth(base)
+ -- here components have a pointer so we can't free it!
+ set_components(base,copied)
+ replace = base
+ setdisc(discfound,pre,post,replace) -- was discretionary_code
+ base = prev
end
end
end
return head, base
end
-local function multiple_glyphs(head,start,multiple,ignoremarks)
+local function multiple_glyphs(head,start,multiple,ignoremarks,what)
local nofmultiples = #multiple
if nofmultiples > 0 then
resetinjection(start)
@@ -617,17 +700,29 @@ local function multiple_glyphs(head,start,multiple,ignoremarks)
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
+ -- 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
+ if what == true then
+ -- we're ok
+ elseif what > 1 then
+ local m = multiple[nofmultiples]
+ for i=2,what do
+ local n = copy_node(start) -- ignore components
+ resetinjection(n)
+ setchar(n,m)
+ insert_node_after(head,start,n)
+ start = n
+ end
+ end
end
return head, start, true
else
@@ -640,8 +735,12 @@ end
local function get_alternative_glyph(start,alternatives,value)
local n = #alternatives
- if value == "random" then
- local r = random(1,n)
+ if n == 1 then
+ -- we could actually change that into a gsub and save some memory in the
+ -- font loader but it makes tracing more messy
+ return alternatives[1], trace_alternatives and "1 (only one present)"
+ elseif value == "random" then
+ local r = getrandom and getrandom("glyph",1,n) or 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)
@@ -709,7 +808,7 @@ 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])
+ return multiple_glyphs(head,start,multiple,sequence.flags[1],dataset[1])
end
function handlers.gsub_ligature(head,start,dataset,sequence,ligature)
@@ -854,7 +953,6 @@ function handlers.gpos_pair(head,start,dataset,sequence,kerns,rlmode,step,i,inje
return head, start, false
else
local prev = start
- local done = false
while snext do
local nextchar = ischar(snext,currentfont)
if nextchar then
@@ -874,8 +972,7 @@ function handlers.gpos_pair(head,start,dataset,sequence,kerns,rlmode,step,i,inje
if trace_kerns then
logprocess("%s: shifting single %s by %p",pref(dataset,sequence),gref(nextchar),k)
end
- done = true
- break
+ return head, start, true
end
end
if a and #a > 0 then
@@ -892,15 +989,13 @@ function handlers.gpos_pair(head,start,dataset,sequence,kerns,rlmode,step,i,inje
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
+ return head, start, true
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
+ return head, start, true
else -- can't happen
break
end
@@ -908,7 +1003,7 @@ function handlers.gpos_pair(head,start,dataset,sequence,kerns,rlmode,step,i,inje
break
end
end
- return head, start, done
+ return head, start, false
end
end
@@ -950,7 +1045,7 @@ function handlers.gpos_mark2base(head,start,dataset,sequence,markanchors,rlmode)
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])
+ local dx, dy, bound = setmark(start,base,factor,rlmode,ba,ma,characters[basechar],false,checkmarks)
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)
@@ -1006,7 +1101,7 @@ function handlers.gpos_mark2ligature(head,start,dataset,sequence,markanchors,rlm
local index = getligaindex(start)
ba = ba[index]
if ba then
- local dx, dy, bound = setmark(start,base,factor,rlmode,ba,ma,characters[basechar]) -- index
+ local dx, dy, bound = setmark(start,base,factor,rlmode,ba,ma,characters[basechar],false,checkmarks)
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)
@@ -1055,7 +1150,7 @@ function handlers.gpos_mark2mark(head,start,dataset,sequence,markanchors,rlmode)
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)
+ local dx, dy, bound = setmark(start,base,factor,rlmode,ba,ma,characters[basechar],true,checkmarks)
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)
@@ -1071,7 +1166,6 @@ function handlers.gpos_mark2mark(head,start,dataset,sequence,markanchors,rlmode)
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
@@ -1079,7 +1173,7 @@ function handlers.gpos_cursive(head,start,dataset,sequence,exitanchors,rlmode,st
end
else
local nxt = getnext(start)
- while not done and nxt do
+ while nxt do
local nextchar = ischar(nxt,currentfont)
if not nextchar then
break
@@ -1097,7 +1191,7 @@ function handlers.gpos_cursive(head,start,dataset,sequence,exitanchors,rlmode,st
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
+ return head, start, true
end
end
end
@@ -1105,7 +1199,7 @@ function handlers.gpos_cursive(head,start,dataset,sequence,exitanchors,rlmode,st
end
end
end
- return head, start, done
+ return head, start, false
end
--[[ldx--
@@ -1182,40 +1276,53 @@ as less as needed but that would also make the code even more messy.</p>
-- this is messy: do we need this disc checking also in alternaties?
+local function reportzerosteps(dataset,sequence)
+ logwarning("%s: no steps",cref(dataset,sequence))
+end
+
local function reportmoresteps(dataset,sequence)
logwarning("%s: more than 1 step",cref(dataset,sequence))
end
+-- local function reportbadsteps(dataset,sequence)
+-- logwarning("%s: bad step, no proper return values",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))
+ if nofsteps == 0 then
+ reportzerosteps(dataset,sequence)
+ else
+ local current = start
+ local mapping = steps[1].coverage
+ while current do
+ local currentchar = ischar(current)
+ if currentchar then
+ local replacement = mapping[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
- 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)
+ current = getnext(current)
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
@@ -1231,17 +1338,21 @@ function chainprocs.gsub_multiple(head,start,stop,dataset,sequence,currentlookup
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
+ if nofsteps == 0 then
+ reportzerosteps(dataset,sequence)
else
- if trace_multiples then
- logprocess("%s: replacing %s by multiple characters %s",cref(dataset,sequence),gref(startchar),gref(replacement))
+ 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,sequence.flags[1],dataset[1])
end
- return multiple_glyphs(head,start,replacement,currentlookup.flags[1]) -- not sequence.flags?
end
return head, start, false
end
@@ -1264,36 +1375,41 @@ function chainprocs.gsub_alternate(head,start,stop,dataset,sequence,currentlooku
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)
+ if nofsteps == 0 then
+ reportzerosteps(dataset,sequence)
+ else
+ local kind = dataset[4]
+ local what = dataset[1]
+ local value = what == true and tfmdata.shared.features[kind] or what -- todo: optimize in ctx
+ local current = start
+ local mapping = steps[1].coverage
+ while current do
+ local currentchar = ischar(current)
+ if currentchar then
+ local alternatives = mapping[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
- 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
@@ -1311,75 +1427,79 @@ function chainprocs.gsub_ligature(head,start,stop,dataset,sequence,currentlookup
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
+ if nofsteps == 0 then
+ reportzerosteps(dataset,sequence)
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
+ 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
+ end
else
- local lg = ligatures[schar]
- if lg then
- ligatures = lg
- last = current
- nofreplacements = nofreplacements + 1
- if current == stop then
- break
- 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
+ -- end
else
- break
+ 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
- end
- local ligature = ligatures.ligature
- if ligature then
- if chainindex then
- stop = last
- end
- if trace_ligatures then
+ 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
- logprocess("%s: replacing character %s by ligature %s case 3",cref(dataset,sequence,chainindex),gref(startchar),gref(ligature))
+ logwarning("%s: replacing character %s by ligature fails",cref(dataset,sequence,chainindex),gref(startchar))
else
- logprocess("%s: replacing character %s upto %s by ligature %s case 4",cref(dataset,sequence,chainindex),gref(startchar),gref(getchar(stop)),gref(ligature))
+ logwarning("%s: replacing character %s upto %s by ligature fails",cref(dataset,sequence,chainindex),gref(startchar),gref(getchar(stop)))
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
@@ -1391,20 +1511,24 @@ function chainprocs.gpos_single(head,start,stop,dataset,sequence,currentlookup,r
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)
+ if nofsteps == 0 then
+ reportzerosteps(dataset,sequence)
+ else
+ 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
end
return head, start, false
@@ -1416,67 +1540,66 @@ function chainprocs.gpos_pair(head,start,stop,dataset,sequence,currentlookup,rlm
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 nofsteps == 0 then
+ reportzerosteps(dataset,sequence)
+ else
+ 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
+ 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
+ return head, start, true
+ 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 single %s by %p",cref(dataset,sequence),gref(startchar),k)
+ 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
- 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)
+ 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
- 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")
+ return head, start, true
+ elseif krn ~= 0 then
+ local k = setkern(snext,factor,rlmode,krn)
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)
+ logprocess("%s: inserting kern %s between %s and %s",cref(dataset,sequence),k,gref(getchar(prev)),gref(nextchar))
end
+ return head, start, true
+ else
+ break
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
@@ -1488,60 +1611,64 @@ function chainprocs.gpos_mark2base(head,start,stop,dataset,sequence,currentlooku
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
+ if nofsteps == 0 then
+ reportzerosteps(dataset,sequence)
+ else
+ 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),1)
+ logwarning("%s: no base for mark %s, case %i",pref(dataset,sequence),gref(markchar),2)
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)
+ 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],false,checkmarks)
+ 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
- return head, start, true
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),1)
+ logwarning("%s: prev node is no char, case %i",cref(dataset,sequence),2)
end
elseif trace_bugs then
- logwarning("%s: prev node is no char, case %i",cref(dataset,sequence),2)
+ logwarning("%s: mark %s has no anchors",cref(dataset,sequence),gref(markchar))
end
elseif trace_bugs then
- logwarning("%s: mark %s has no anchors",cref(dataset,sequence),gref(markchar))
+ logwarning("%s: mark %s is no mark",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
@@ -1552,64 +1679,68 @@ function chainprocs.gpos_mark2ligature(head,start,stop,dataset,sequence,currentl
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
+ if nofsteps == 0 then
+ reportzerosteps(dataset,sequence)
+ else
+ 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,1)
+ logwarning("%s: no base for mark %s, case %i",cref(dataset,sequence),markchar,2)
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)
+ 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],false,checkmarks)
+ 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
- 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),1)
+ logwarning("%s, prev node is no char, case %i",cref(dataset,sequence),2)
end
elseif trace_bugs then
- logwarning("%s, prev node is no char, case %i",cref(dataset,sequence),2)
+ logwarning("%s, mark %s has no anchors",cref(dataset,sequence),gref(markchar))
end
elseif trace_bugs then
- logwarning("%s, mark %s has no anchors",cref(dataset,sequence),gref(markchar))
+ logwarning("%s, mark %s is no mark",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
@@ -1620,48 +1751,52 @@ function chainprocs.gpos_mark2mark(head,start,stop,dataset,sequence,currentlooku
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
+ if nofsteps == 0 then
+ reportzerosteps(dataset,sequence)
+ else
+ 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
- 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)
+ 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,checkmarks)
+ 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
- return head, start, true
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),1)
+ logwarning("%s: prev node is no mark, case %i",cref(dataset,sequence),2)
end
elseif trace_bugs then
- logwarning("%s: prev node is no mark, case %i",cref(dataset,sequence),2)
+ logwarning("%s: mark %s has no anchors",cref(dataset,sequence),gref(markchar))
end
elseif trace_bugs then
- logwarning("%s: mark %s has no anchors",cref(dataset,sequence),gref(markchar))
+ logwarning("%s: mark %s is no mark",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
@@ -1672,52 +1807,51 @@ function chainprocs.gpos_cursive(head,start,stop,dataset,sequence,currentlookup,
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 nofsteps == 0 then
+ reportzerosteps(dataset,sequence)
+ else
+ local startchar = getchar(start)
+ local exitanchors = steps[1].coverage[startchar] -- always 1 step
+ if exitanchors then
+ 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 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
- 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))
+ 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
+ return head, start, true
end
- done = true
- break
end
+ elseif trace_bugs then
+ onetimemessage(currentfont,startchar,"no entry anchors",report_fonts)
end
- elseif trace_bugs then
- onetimemessage(currentfont,startchar,"no entry anchors",report_fonts)
+ break
end
- break
end
end
- end
- return head, start, done
- else
- if trace_cursive and trace_details then
+ elseif 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
+ return head, start, false
end
-- what pointer to return, spec says stop
@@ -1754,7 +1888,150 @@ end
-- 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)
+local new_kern = nuts.pool.kern
+
+local function checked(head)
+ local current = head
+ while current do
+ if getid(current) == glue_code then
+ local kern = new_kern(getwidth(current))
+ if head == current then
+ local next = getnext(current)
+ if next then
+ setlink(kern,next)
+ end
+ flush_node(current)
+ head = kern
+ current = next
+ else
+ local prev, next = getboth(current)
+ setlink(prev,kern,next)
+ flush_node(current)
+ current = next
+ end
+ else
+ current = getnext(current)
+ end
+ end
+ return head
+end
+
+local function setdiscchecked(d,pre,post,replace)
+ if pre then pre = checked(pre) end
+ if post then post = checked(post) end
+ if replace then replace = checked(replace) end
+ setdisc(d,pre,post,replace)
+end
+
+local noflags = { false, false, false, false }
+
+local function chainrun(head,start,last,dataset,sequence,rlmode,ck,skipped)
+
+ local size = ck[5] - ck[4] + 1
+ local flags = sequence.flags or noflags
+ local done = false
+ local skipmark = flags[1]
+ local chainlookups = ck[6]
+
+ -- current match
+ if chainlookups then
+ local nofchainlookups = #chainlookups
+ -- Lookups can be like { 1, false, 3 } or { false, 2 } or basically anything and
+ -- #lookups can be less than #current
+ if size == 1 then
+ -- if nofchainlookups > size then
+ -- -- bad rules
+ -- end
+ local chainlookup = chainlookups[1]
+ for j=1,#chainlookup do
+ local chainstep = chainlookup[j]
+ local chainkind = chainstep.type
+ local chainproc = chainprocs[chainkind]
+ if chainproc then
+ local ok
+ head, start, ok = chainproc(head,start,last,dataset,sequence,chainstep,rlmode,1)
+ if ok then
+ done = true
+ end
+ else
+ logprocess("%s: %s is not yet supported (1)",cref(dataset,sequence),chainkind)
+ end
+ end
+ else
+ -- See LookupType 5: Contextual Substitution Subtable. Now it becomes messy. The
+ -- easiest case is where #current maps on #lookups i.e. one-to-one. But what if
+ -- we have a ligature. Cf the spec we then need to advance one character 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
+ --
+ -- Even worse are these family emoji shapes as they can have multiple lookups
+ -- per slot (probably only for gpos).
+ local i = 1
+ while start do
+ if skipped then
+ while start do
+ local char = getchar(start)
+ local class = classes[char]
+ if class then
+ 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 chainlookup = chainlookups[i]
+ if chainlookup then
+ for j=1,#chainlookup do
+ local chainstep = chainlookup[j]
+ local chainkind = chainstep.type
+ local chainproc = chainprocs[chainkind]
+ if chainproc then
+ local ok, n
+ head, start, ok, n = chainproc(head,start,last,dataset,sequence,chainstep,rlmode,i)
+ -- messy since last can be changed !
+ if ok then
+ done = true
+ if n and n > 1 and i + n > nofchainlookups then
+ -- this is a safeguard, we just ignore the rest of the lookups
+ break
+ end
+ end
+ else
+ -- actually an error
+ logprocess("%s: %s is not yet supported (2)",cref(dataset,sequence),chainkind)
+ end
+ end
+ end
+ i = i + 1
+ if i > size or not start then
+ break
+ elseif start then
+ start = getnext(start)
+ end
+ end
+ end
+ else
+ -- todo: needs checking for holes in the replacements
+ local replacements = ck[7]
+ if replacements then
+ head, start, done = reversesub(head,start,last,dataset,sequence,replacements,rlmode)
+ else
+ done = true
+ if trace_contexts then
+ logprocess("%s: skipping match",cref(dataset,sequence))
+ end
+ end
+ end
+ return head, start, done
+end
+
+local function chaindisk(head,start,dataset,sequence,rlmode,ck,skipped)
if not start then
return head, start, false
@@ -1769,15 +2046,16 @@ local function chaindisk(head,start,last,dataset,sequence,chainlookup,rlmode,k,c
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)
+ local hasglue = false
-- fishy: so we can overflow and then go on in the sweep?
+ -- todo : id can also be glue_code as we checked spaces
local i = f
while i <= l do
@@ -1786,21 +2064,30 @@ local function chaindisk(head,start,last,dataset,sequence,chainlookup,rlmode,k,c
i = i + 1
last = current
current = getnext(current)
+ elseif id == glue_code then
+ i = i + 1
+ last = current
+ current = getnext(current)
+ hasglue = true
elseif id == disc_code then
if keepdisc then
- keepdisc = false
- if notmatchpre[current] ~= notmatchreplace[current] then
- lookaheaddisc = current
- end
+ keepdisc = false
+ lookaheaddisc = current
local replace = getfield(current,"replace")
- while replace and i <= l do
- if getid(replace) == glyph_code then
- i = i + 1
+ if not replace then
+ sweepoverflow = true
+ sweepnode = current
+ current = getnext(current)
+ else
+ while replace and i <= l do
+ if getid(replace) == glyph_code then
+ i = i + 1
+ end
+ replace = getnext(replace)
end
- replace = getnext(replace)
+ current = getnext(replace)
end
- last = current
- current = getnext(c)
+ last = current
else
head, current = flattendisk(head,current)
end
@@ -1838,8 +2125,8 @@ local function chaindisk(head,start,last,dataset,sequence,chainlookup,rlmode,k,c
tail = find_node_tail(head)
end
setnext(sweepnode,current)
- setprev(head,nil)
- setnext(tail,nil)
+ setprev(head)
+ setnext(tail)
appenddisc(sweepnode,head)
end
end
@@ -1852,13 +2139,18 @@ local function chaindisk(head,start,last,dataset,sequence,chainlookup,rlmode,k,c
if id == glyph_code then
i = i + 1
current = getnext(current)
+ elseif id == glue_code then
+ i = i + 1
+ current = getnext(current)
+ hasglue = true
elseif id == disc_code then
if keepdisc then
keepdisc = false
if notmatchpre[current] ~= notmatchreplace[current] then
lookaheaddisc = current
end
- local replace = getfield(c,"replace")
+ -- we assume a simple text only replace (we could use nuts.count)
+ local replace = getfield(current,"replace")
while replace and i < s do
if getid(replace) == glyph_code then
i = i + 1
@@ -1894,12 +2186,16 @@ local function chaindisk(head,start,last,dataset,sequence,chainlookup,rlmode,k,c
local id = getid(current)
if id == glyph_code then
i = i - 1
+ elseif id == glue_code then
+ i = i - 1
+ hasglue = true
elseif id == disc_code then
if keepdisc then
keepdisc = false
if notmatchpost[current] ~= notmatchreplace[current] then
backtrackdisc = current
end
+ -- we assume a simple text only replace (we could use nuts.count)
local replace = getfield(current,"replace")
while replace and i > 1 do
if getid(replace) == glyph_code then
@@ -1918,7 +2214,8 @@ local function chaindisk(head,start,last,dataset,sequence,chainlookup,rlmode,k,c
end
end
- local ok = false
+ local done = false
+
if lookaheaddisc then
local cf = start
@@ -1937,43 +2234,53 @@ local function chaindisk(head,start,last,dataset,sequence,chainlookup,rlmode,k,c
break
end
end
-
- setprev(lookaheaddisc,cprev)
- if cprev then
- setnext(cprev,lookaheaddisc)
- end
- setprev(cf,nil)
- setnext(cl,nil)
+ setlink(cprev,lookaheaddisc)
+ setprev(cf)
+ setnext(cl)
if startishead then
head = lookaheaddisc
end
local pre, post, replace = getdisc(lookaheaddisc)
local new = copy_node_list(cf)
local cnew = new
+ if pre then
+ setlink(find_node_tail(cf),pre)
+ end
+ if replace then
+ local tail = find_node_tail(new)
+ setlink(tail,replace)
+ end
for i=1,insertedmarks do
cnew = getnext(cnew)
end
+ cl = start
local clast = cnew
for i=f,l do
+ cl = getnext(cl)
clast = getnext(clast)
end
if not notmatchpre[lookaheaddisc] then
- cf, start, ok = chainproc(cf,start,last,dataset,sequence,chainlookup,rlmode,k)
+ local ok = false
+ cf, start, ok = chainrun(cf,start,cl,dataset,sequence,rlmode,ck,skipped)
+ if ok then
+ done = true
+ end
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)
+ local ok = false
+ new, cnew, ok = chainrun(new,cnew,clast,dataset,sequence,rlmode,ck,skipped)
+ if ok then
+ done = true
+ end
end
- if replace then
- local tail = find_node_tail(new)
- setlink(tail,replace)
+ if hasglue then
+ setdiscchecked(lookaheaddisc,cf,post,new)
+ else
+ setdisc(lookaheaddisc,cf,post,new)
end
- setdisc(lookaheaddisc,cf,post,new)
start = getprev(lookaheaddisc)
sweephead[cf] = getnext(clast)
- sweephead[new] = getnext(last)
+ sweephead[new] = getnext(cl)
elseif backtrackdisc then
@@ -1996,8 +2303,8 @@ local function chaindisk(head,start,last,dataset,sequence,chainlookup,rlmode,k,c
setprev(cnext,backtrackdisc)
end
setnext(backtrackdisc,cnext)
- setprev(cf,nil)
- setnext(cl,nil)
+ setprev(cf)
+ setnext(cl)
local pre, post, replace, pretail, posttail, replacetail = getdisc(backtrackdisc,true)
local new = copy_node_list(cf)
local cnew = find_node_tail(new)
@@ -2009,10 +2316,18 @@ local function chaindisk(head,start,last,dataset,sequence,chainlookup,rlmode,k,c
clast = getnext(clast)
end
if not notmatchpost[backtrackdisc] then
- cf, start, ok = chainproc(cf,start,last,dataset,sequence,chainlookup,rlmode,k)
+ local ok = false
+ cf, start, ok = chainrun(cf,start,last,dataset,sequence,rlmode,ck,skipped)
+ if ok then
+ done = true
+ end
end
if not notmatchreplace[backtrackdisc] then
- new, cnew, ok = chainproc(new,cnew,clast,dataset,sequence,chainlookup,rlmode,k)
+ local ok = false
+ new, cnew, ok = chainrun(new,cnew,clast,dataset,sequence,rlmode,ck,skipped)
+ if ok then
+ done = true
+ end
end
if post then
setlink(posttail,cf)
@@ -2024,89 +2339,45 @@ local function chaindisk(head,start,last,dataset,sequence,chainlookup,rlmode,k,c
else
replace = new
end
- setdisc(backtrackdisc,pre,post,replace)
+ if hasglue then
+ setdiscchecked(backtrackdisc,pre,post,replace)
+ else
+ setdisc(backtrackdisc,pre,post,replace)
+ end
start = getprev(backtrackdisc)
sweephead[post] = getnext(clast)
sweephead[replace] = getnext(last)
else
- head, start, ok = chainproc(head,start,last,dataset,sequence,chainlookup,rlmode,k)
+ local ok = false
+ head, start, ok = chainrun(head,start,last,dataset,sequence,rlmode,ck,skipped)
+ if ok then
+ done = true
+ end
end
- return head, start, ok
+ return head, start, done
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 chaintrac(head,start,dataset,sequence,rlmode,ck,skipped)
+ local rule = ck[1]
+ local lookuptype = ck[8] or ck[2]
+ local nofseq = #ck[3]
+ 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,nofseq-last,lookuptype)
+end
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 checkdisc = sweeptype and getprev(head)
local flags = sequence.flags or noflags
local done = false
local skipmark = flags[1]
@@ -2114,6 +2385,8 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)
local skipbase = flags[3]
local markclass = sequence.markclass
local skipped = false
+ local startprev,
+ startnext = getboth(start)
for k=1,#contexts do -- i've only seen ccmp having > 1 (e.g. dejavu)
local match = true
local current = start
@@ -2121,12 +2394,15 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)
local ck = contexts[k]
local seq = ck[3]
local s = #seq
+ local size = 1
-- f..l = mid string
if s == 1 then
- -- never happens
+ -- this seldom happens as it makes no sense (bril, ebgaramond, husayni, minion)
local char = ischar(current,currentfont)
if char then
- match = seq[1][char]
+ if not seq[1][char] then
+ match = false
+ end
end
else
-- maybe we need a better space check (maybe check for glue or category or combination)
@@ -2134,155 +2410,163 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)
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) -- the second in current (first already matched)
- 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
+ size = l - f + 1
+ if size > 1 then
+ -- before/current/after | before/current | current/after
+ local discfound -- = nil
+ local n = f + 1
+ -- last = getnext(last) -- the second in current (first already matched)
+ last = startnext -- the second in current (first already matched)
+ 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 class = classes[char]
+ if class then
+ if class == skipmark or class == skipligature or class == skipbase or (markclass and class == "mark" and not markclass[char]) then
+ skipped = true
+ if trace_skips then
+ show_skip(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
- else
- if discfound then
- notmatchreplace[discfound] = true
- match = not notmatchpre[discfound]
- else
- match = false
- end
- break
end
+ n = n + 1
else
if discfound then
notmatchreplace[discfound] = true
- match = not notmatchpre[discfound]
+ if notmatchpre[discfound] then
+ match = false
+ end
else
match = false
end
break
end
- elseif char == false then
+ else
if discfound then
notmatchreplace[discfound] = true
- match = not notmatchpre[discfound]
+ if notmatchpre[discfound] then
+ match = false
+ end
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
+ end
+ elseif char == false then
+ if discfound then
+ notmatchreplace[discfound] = true
+ if notmatchpre[discfound] then
+ match = false
+ end
+ 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
- end
- if n <= l then
+ else
notmatchpre[last] = true
+ break
end
- else
+ end
+ if n <= l then
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]
+ 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
+ if notmatchpre[last] then
+ match = false
+ end
+ break
end
- match = not notmatchpre[last]
end
- -- maybe only if match
- last = getnext(last)
- else
- match = false
- break
+ -- why here again
+ if notmatchpre[last] then
+ match = false
+ end
end
+ -- maybe only if match
+ last = getnext(last)
else
match = false
break
end
+ else
+ match = false
+ break
end
end
end
-- before
if match and f > 1 then
- local prev = getprev(start)
- if prev then
+ -- local prev = getprev(start)
+ -- if prev then
+ if startprev then
+ local prev = startprev
if prev == checkdisc and (sweeptype == "pre" or sweeptype == "replace") then
prev = getprev(sweepnode)
-- sweeptype = nil
end
if prev then
- local discfound = nil
+ 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
+ local class = classes[char]
+ if class then
if class == skipmark or class == skipligature or class == skipbase or (markclass and class == "mark" and not markclass[char]) then
skipped = true
if trace_skips then
show_skip(dataset,sequence,char,ck,class)
end
- prev = getprev(prev) -- moved here
+ prev = getprev(prev)
elseif seq[n][char] then
- if n > 1 then -- new test
- prev = getprev(prev) -- moved here
+ if n > 1 then
+ prev = getprev(prev)
end
n = n - 1
else
if discfound then
notmatchreplace[discfound] = true
- match = not notmatchpost[discfound]
+ if notmatchpost[discfound] then
+ match = false
+ end
else
match = false
end
@@ -2291,17 +2575,20 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)
else
if discfound then
notmatchreplace[discfound] = true
- match = not notmatchpost[discfound]
+ if notmatchpost[discfound] then
+ match = false
+ end
else
match = false
end
break
end
- -- prev = getprev(prev) -- moved up
elseif char == false then
if discfound then
notmatchreplace[discfound] = true
- match = not notmatchpost[discfound]
+ if notmatchpost[discfound] then
+ match = false
+ end
else
match = false
end
@@ -2354,7 +2641,9 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)
end
else
notmatchreplace[prev] = true
- match = not notmatchpost[prev]
+ if notmatchpost[prev] then
+ match = false
+ end
break
end
end
@@ -2365,16 +2654,13 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)
end
-- maybe only if match
prev = getprev(prev)
- elseif seq[n][32] then
+ elseif id == glue_code and seq[n][32] and isspace(prev,threshold,id) then
n = n - 1
prev = getprev(prev)
else
match = false
break
end
- elseif seq[n][32] then -- somewhat special, as zapfino can have many preceding spaces
- n = n - 1
- prev = getprev(prev) -- was absent
else
match = false
break
@@ -2390,23 +2676,20 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)
-- 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
+ if not current and (sweeptype == "post" or sweeptype == "replace") then
+ current = getnext(sweepnode)
+ -- sweeptype = nil
end
if current then
- local discfound = nil
+ 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
+ local class = classes[char]
+ if class then
if class == skipmark or class == skipligature or class == skipbase or (markclass and class == "mark" and not markclass[char]) then
skipped = true
if trace_skips then
@@ -2421,7 +2704,9 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)
else
if discfound then
notmatchreplace[discfound] = true
- match = not notmatchpre[discfound]
+ if notmatchpre[discfound] then
+ match = false
+ end
else
match = false
end
@@ -2430,7 +2715,9 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)
else
if discfound then
notmatchreplace[discfound] = true
- match = not notmatchpre[discfound]
+ if notmatchpre[discfound] then
+ match = false
+ end
else
match = false
end
@@ -2439,7 +2726,9 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)
elseif char == false then
if discfound then
notmatchreplace[discfound] = true
- match = not notmatchpre[discfound]
+ if notmatchpre[discfound] then
+ match = false
+ end
else
match = false
end
@@ -2482,7 +2771,10 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)
end
else
notmatchreplace[current] = true
- match = notmatchpre[current]
+ -- different than others, needs checking if "not" is okay
+ if not notmatchpre[current] then
+ match = false
+ end
break
end
end
@@ -2494,15 +2786,13 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)
end
-- maybe only if match
current = getnext(current)
- elseif seq[n][32] then -- brrr
+ elseif id == glue_code and seq[n][32] and isspace(current,threshold,id) then
n = n + 1
+ current = getnext(current)
else
match = false
break
end
- elseif seq[n][32] then
- n = n + 1
- current = getnext(current)
else
match = false
break
@@ -2514,114 +2804,13 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)
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
+ chaintrac(head,start,dataset,sequence,rlmode,ck,skipped)
+ end
+ if diskseen or sweepnode then
+ head, start, done = chaindisk(head,start,dataset,sequence,rlmode,ck,skipped)
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
+ head, start, done = chainrun(head,start,last,dataset,sequence,rlmode,ck,skipped)
end
if done then
break -- out of contexts (new, needs checking)
@@ -2659,6 +2848,24 @@ chainprocs.gsub_reversecontextchain = chained_contextchain
chainprocs.gpos_contextchain = chained_contextchain
chainprocs.gpos_context = chained_contextchain
+-- experiment (needs no handler in font-otc so not now):
+--
+-- function otf.registerchainproc(name,f)
+-- -- chainprocs[name] = f
+-- chainprocs[name] = function(head,start,stop,dataset,sequence,currentlookup,rlmode)
+-- local done = currentlookup.nofsteps > 0
+-- if not done then
+-- reportzerosteps(dataset,sequence)
+-- else
+-- head, start, done = f(head,start,stop,dataset,sequence,currentlookup,rlmode)
+-- if not head or not start then
+-- reportbadsteps(dataset,sequence)
+-- end
+-- end
+-- return head, start, done
+-- end
+-- end
+
local missing = setmetatableindex("table")
local function logprocess(...)
@@ -2694,79 +2901,96 @@ 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 }
+do -- overcome local limit
+
+ local autofeatures = fonts.analyzers.features
+ local featuretypes = otf.tables.featuretypes
+ local defaultscript = otf.features.checkeddefaultscript
+ local defaultlanguage = otf.features.checkeddefaultlanguage
+
+ local wildcard = "*"
+ local default = "dflt"
+
+ 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
- else
- -- can't happen
end
+ return false
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
+ 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
+ if sequences then
+ 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
end
+ return rl
end
- return rl
+
end
+-- Functions like kernrun, comprun etc evolved over time and in the end look rather
+-- complex. It's a bit of a compromis between extensive copying and creating subruns.
+-- The logic has been improved a lot by Kai and Ivo who use complex fonts which
+-- really helped to identify border cases on the one hand and get insight in the diverse
+-- ways fonts implement features (not always that consistent and efficient). At the same
+-- time I tried to keep the code relatively efficient so that the overhead in runtime
+-- stays acceptable.
+
local function report_disc(what,n)
report_run("%s: %s > %s",what,n,languages.serializediscretionary(n))
end
@@ -2800,10 +3024,10 @@ local function kernrun(disc,k_run,font,attr,...)
end
end
--
- if prev and (pre or replace) and not ischar(prev,font) then
+ if prev and not ischar(prev,font) then -- and (pre or replace)
prev = false
end
- if next and (post or replace) and not ischar(next,font) then
+ if next and not ischar(next,font) then -- and (post or replace)
next = false
end
--
@@ -2820,6 +3044,7 @@ local function kernrun(disc,k_run,font,attr,...)
done = true
end
setprev(pre,nest)
+-- setprev(pre)
setnext(prev,disc)
end
end
@@ -2833,7 +3058,7 @@ local function kernrun(disc,k_run,font,attr,...)
if k_run(posttail,"postinjections",next,font,attr,...) then
done = true
end
- setnext(posttail,nil)
+ setnext(posttail)
setprev(next,disc)
end
end
@@ -2849,6 +3074,7 @@ local function kernrun(disc,k_run,font,attr,...)
done = true
end
setprev(replace,nest)
+ -- setprev(replace)
setnext(prev,disc)
end
if next then
@@ -2856,7 +3082,7 @@ local function kernrun(disc,k_run,font,attr,...)
if k_run(replacetail,"replaceinjections",next,font,attr,...) then
done = true
end
- setnext(replacetail,nil)
+ setnext(replacetail)
setprev(next,disc)
end
elseif prev and next then
@@ -2864,13 +3090,15 @@ local function kernrun(disc,k_run,font,attr,...)
if k_run(prevmarks,"emptyinjections",next,font,attr,...) then
done = true
end
- setlink(prev,disc)
- setlink(disc,next)
+ setlink(prev,disc,next)
end
return nextstart, done
end
-local function comprun(disc,c_run,...)
+-- fonts like ebgaramond do ligatures this way (less efficient than e.g. dejavu which
+-- will do the testrun variant)
+
+local function comprun(disc,c_run,...) -- vararg faster than the whole list
if trace_compruns then
report_disc("comp",disc)
end
@@ -2880,7 +3108,7 @@ local function comprun(disc,c_run,...)
--
if pre then
sweepnode = disc
- sweeptype = "pre" -- in alternative code preinjections is uc_c_sed (also used then for proeprties, saves a variable)
+ sweeptype = "pre" -- in alternative code preinjections is uc_c_sed (also used then for properties, saves a variable)
local new, done = c_run(pre,...)
if done then
pre = new
@@ -2917,6 +3145,83 @@ local function comprun(disc,c_run,...)
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")
+-- 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
+
local function testrun(disc,t_run,c_run,...)
if trace_testruns then
report_disc("test",disc)
@@ -2928,23 +3233,59 @@ local function testrun(disc,t_run,c_run,...)
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 !
+ if (post or replace) and prev then
+ if post then
+ setlink(posttail,next)
+ else
+ post = next
+ end
+ if replace then
+ setlink(replacetail,next)
+ else
+ replace = next
+ end
+ local d_post = t_run(post,next,...)
+ local d_replace = t_run(replace,next,...)
+ if (d_post and d_post > 0) or (d_replace and d_replace > 0) then
+ local d = d_replace or d_post
+ if d_post and d < d_post then
+ d = d_post
+ end
+ local head, tail = getnext(disc), disc
+ for i=1,d do
+ tail = getnext(tail)
+ if getid(tail) == disc_code then
+ head, tail = flattendisk(head,tail)
+ end
+ end
+ local next = getnext(tail)
+ setnext(tail)
+ setprev(head)
+ local new = copy_node_list(head)
+ if posttail then
+ setlink(posttail,head)
+ else
+ post = head
+ end
+ if replacetail then
+ setlink(replacetail,new)
+ else
+ replace = new
+ end
+ setlink(disc,next)
else
-- we stay inside the disc
+ if posttail then
+ setnext(posttail)
+ else
+ post = nil
+ end
setnext(replacetail)
+ if replacetail then
+ setnext(replacetail)
+ else
+ replace = nil
+ end
setprev(next,disc)
end
-- pre, post, replace, pretail, posttail, replacetail = getdisc(disc,true)
@@ -2994,41 +3335,6 @@ local function testrun(disc,t_run,c_run,...)
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
@@ -3048,7 +3354,12 @@ end
-- -- local a = getattr(start,0)
-- -- if not a or (a == attr) then
--
--- and even that one is probably not needed.
+-- and even that one is probably not needed. However, we can handle interesting
+-- cases now:
+--
+-- 1{2{\oldstyle\discretionary{3}{4}{5}}6}7\par
+-- 1{2\discretionary{3{\oldstyle3}}{{\oldstyle4}4}{5{\oldstyle5}5}6}7\par
+
local nesting = 0
@@ -3064,7 +3375,10 @@ local function c_run_single(head,font,attr,lookupcache,step,dataset,sequence,rlm
while start do
local char = ischar(start,font)
if char then
- local a = attr and getattr(start,0)
+ local a -- happens often so no assignment is faster
+ if attr then
+ a = getattr(start,0)
+ end
if not a or (a == attr) then
local lookupmatch = lookupcache[char]
if lookupmatch then
@@ -3078,6 +3392,7 @@ local function c_run_single(head,font,attr,lookupcache,step,dataset,sequence,rlm
start = getnext(start)
end
else
+ -- go on can be a mixed one
start = getnext(start)
end
elseif char == false then
@@ -3093,63 +3408,130 @@ local function c_run_single(head,font,attr,lookupcache,step,dataset,sequence,rlm
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 -- happens often so no assignment is faster
+-- if attr then
+-- a = getattr(start,0)
+-- end
+-- local startnext = getnext(start)
+-- 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 = startnext
+-- 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
+-- -- go on can be a mixed one
+-- end
+-- start = starttnext
+-- else
+-- break
+-- end
+-- end
+-- end
+
local function t_run_single(start,stop,font,attr,lookupcache)
+ local lastd = nil
while start ~= stop do
local char = ischar(start,font)
if char then
- local a = attr and getattr(start,0)
+ local a -- happens often so no assignment is faster
+ if attr then
+ a = getattr(start,0)
+ end
+ local startnext = getnext(start)
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 s = startnext
+ local ss = nil
+ local sstop = s == stop
+ if not s then
+ s = ss
+ ss = nil
+ end
+ while getid(s) == disc_code do
+ ss = getnext(s)
+ s = getfield(s,"replace")
+ if not s then
+ s = ss
+ ss = nil
+ end
+ end
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
+ if sstop then
+ d = 1
+ elseif d > 0 then
+ d = d + 1
+ end
l = lg
s = getnext(s)
+ sstop = s == stop
+ if not s then
+ s = ss
+ ss = nil
+ end
+ while getid(s) == disc_code do
+ ss = getnext(s)
+ s = getfield(s,"replace")
+ if not s then
+ s = ss
+ ss = nil
+ end
+ end
else
break
end
end
if l and l.ligature then
- return true, d > 1
+ lastd = d
end
end
+ else
+ -- go on can be a mixed one
end
- start = getnext(start)
+ if lastd then
+ return lastd
+ end
+ start = startnext
else
break
end
end
end
--- local function d_run_single(prev,font,attr,lookupcache,step,dataset,sequence,rlmode,handler)
--- local a = attr and 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 = attr and getattr(sub,0)
+ local a -- happens often so no assignment is faster
+ if attr then
+ a = getattr(sub,0)
+ end
if not a or (a == attr) then
for n in traverse_nodes(sub) do -- only gpos
if n == last then
@@ -3181,7 +3563,10 @@ local function c_run_multiple(head,font,attr,steps,nofsteps,dataset,sequence,rlm
while start do
local char = ischar(start,font)
if char then
- local a = attr and getattr(start,0)
+ local a -- happens often so no assignment is faster
+ if attr then
+ a = getattr(start,0)
+ end
if not a or (a == attr) then
for i=1,nofsteps do
local step = steps[i]
@@ -3208,6 +3593,7 @@ local function c_run_multiple(head,font,attr,steps,nofsteps,dataset,sequence,rlm
start = getnext(start)
end
else
+ -- go on can be a mixed one
start = getnext(start)
end
elseif char == false then
@@ -3224,11 +3610,68 @@ local function c_run_multiple(head,font,attr,steps,nofsteps,dataset,sequence,rlm
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 -- happens often so no assignment is faster
+-- if attr then
+-- a = getattr(start,0)
+-- end
+-- local startnext = getnext(start)
+-- 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 = startnext
+-- 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
+-- else
+-- -- go on can be a mixed one
+-- end
+-- start = startnext
+-- else
+-- break
+-- end
+-- end
+-- end
+
local function t_run_multiple(start,stop,font,attr,steps,nofsteps)
+ local lastd = nil
while start ~= stop do
local char = ischar(start,font)
if char then
- local a = attr and getattr(start,0)
+ local a -- happens often so no assignment is faster
+ if attr then
+ a = getattr(start,0)
+ end
+ local startnext = getnext(start)
if not a or (a == attr) then
for i=1,nofsteps do
local step = steps[i]
@@ -3237,67 +3680,76 @@ local function t_run_multiple(start,stop,font,attr,steps,nofsteps)
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 s = startnext
+ local ss = nil
+ local sstop = s == stop
+ if not s then
+ s = ss
+ ss = nil
+ end
+ while getid(s) == disc_code do
+ ss = getnext(s)
+ s = getfield(s,"replace")
+ if not s then
+ s = ss
+ ss = nil
+ end
+ end
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
+ if sstop then
+ d = 1
+ elseif d > 0 then
+ d = d + 1
+ end
l = lg
s = getnext(s)
+ sstop = s == stop
+ if not s then
+ s = ss
+ ss = nil
+ end
+ while getid(s) == disc_code do
+ ss = getnext(s)
+ s = getfield(s,"replace")
+ if not s then
+ s = ss
+ ss = nil
+ end
+ end
else
break
end
end
if l and l.ligature then
- return true, d > 1
+ lastd = d
end
end
else
report_missing_coverage(dataset,sequence)
end
end
+ else
+ -- go on can be a mixed one
end
- start = getnext(start)
+ if lastd then
+ return lastd
+ end
+ start = startnext
else
break
end
end
end
--- local function d_run_multiple(prev,attr,steps,nofsteps,dataset,sequence,rlmode,handler)
--- local a = attr and 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 = attr and getattr(sub,0)
+ local a -- happens often so no assignment is faster
+ if attr then
+ a = getattr(sub,0)
+ end
if not a or (a == attr) then
for n in traverse_nodes(sub) do -- only gpos
if n == last then
@@ -3325,11 +3777,11 @@ local function k_run_multiple(sub,injection,last,font,attr,steps,nofsteps,datase
end
end
--- to be checkedL nowadays we probably can assume properly matched directions
+-- to be checked, 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 dir = getdir(start)
local new = 1
if dir == "+TRT" then
top = top + 1
@@ -3353,7 +3805,7 @@ local function txtdirstate(start,stack,top,rlparmode)
end
local function pardirstate(start)
- local dir = getfield(start,"dir")
+ local dir = getdir(start)
local new = 0
if dir == "TLT" then
new = 1
@@ -3366,7 +3818,19 @@ local function pardirstate(start)
return getnext(start), new, new
end
-local function featuresprocessor(head,font,attr)
+otf.helpers = otf.helpers or { }
+otf.helpers.txtdirstate = txtdirstate
+otf.helpers.pardirstate = pardirstate
+
+-- This is the main loop. We run over the node list dealing with a specific font. The
+-- attribute is a context specific thing. 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. Apart from
+-- optimizations the principles of processing the features hasn't changed much since
+-- the beginning.
+
+local function featuresprocessor(head,font,attr,direction)
local sequences = sequencelists[font] -- temp hack
@@ -3377,14 +3841,16 @@ local function featuresprocessor(head,font,attr)
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
+ currentfont = font
+ tfmdata = fontdata[font]
+ descriptions = tfmdata.descriptions -- only needed in gref so we could pass node there instead
+ characters = tfmdata.characters -- but this branch is not entered that often anyway
+ local resources = tfmdata.resources
+ marks = resources.marks
+ classes = resources.classes
+ threshold,
+ factor = getthreshold(font)
+ checkmarks = tfmdata.properties.checkmarks
elseif currentfont ~= font then
@@ -3394,9 +3860,13 @@ local function featuresprocessor(head,font,attr)
end
- if attr == 0 then
- attr = false -- some 10% faster when no dynamics but hardly measureable on real runs
- end
+ -- some 10% faster when no dynamics but hardly measureable on real runs .. but: it only
+ -- works when we have no other dynamics as otherwise the zero run will be applied to the
+ -- whole stream for which we then need to pass another variable which we won't
+
+ -- if attr == 0 then
+ -- attr = false
+ -- end
head = tonut(head)
@@ -3404,24 +3874,17 @@ local function featuresprocessor(head,font,attr)
checkstep(head)
end
- local rlmode = 0
+ local initialrl = direction == "TRT" and -1 or 0
local done = false
local datasets = otf.dataset(tfmdata,font,attr)
-
local dirstack = { } -- could move outside function but we can have local runs
-
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 could prepend a temp node.
- -- 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
+ -- We don't goto the next node when 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
@@ -3429,9 +3892,8 @@ local function featuresprocessor(head,font,attr)
----- 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 rlparmode = initialrl
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]
@@ -3439,23 +3901,24 @@ local function featuresprocessor(head,font,attr)
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)
+ local h, d, ok = handler(head,head,dataset,sequence,nil,nil,nil,0,font,attr)
if ok then
- success = true
+ done = 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)
+ local start = find_node_tail(head)
+ local rlmode = 0 -- how important is this .. do we need to check for dir?
while start do
local char = ischar(start,font)
if char then
- local a = attr and getattr(start,0)
+ local a -- happens often so no assignment is faster
+ if attr then
+ a = getattr(start,0)
+ end
if not a or (a == attr) then
for i=1,nofsteps do
local step = steps[i]
@@ -3467,7 +3930,7 @@ local function featuresprocessor(head,font,attr)
local ok
head, start, ok = handler(head,start,dataset,sequence,lookupmatch,rlmode,step,i)
if ok then
- success = true
+ done = true
break
end
end
@@ -3486,10 +3949,9 @@ local function featuresprocessor(head,font,attr)
end
end
else
- local start = head -- local ?
- rlmode = 0 -- to be checked ?
+ local start = head
+ local rlmode = initialrl
if nofsteps == 1 then -- happens often
-
local step = steps[1]
local lookupcache = step.coverage
if not lookupcache then
@@ -3498,11 +3960,19 @@ local function featuresprocessor(head,font,attr)
while start do
local char, id = ischar(start,font)
if char then
- local a = attr and 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
+ -- local a = attr and 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
+ local a -- happens often so no assignment is faster
+ if attr then
+ if getattr(start,0) == attr and (not attribute or getprop(start,a_state) == attribute) then
+ a = true
+ end
+ elseif not attribute or getprop(start,a_state) == attribute then
+ a = true
end
if a then
local lookupmatch = lookupcache[char]
@@ -3510,12 +3980,8 @@ local function featuresprocessor(head,font,attr)
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)
+ done = true
end
- -- elseif gpossing and zwnjruns and char == zwnj then
- -- discrun(start,d_run,font,attr,lookupcache)
end
if start then
start = getnext(start)
@@ -3526,6 +3992,9 @@ local function featuresprocessor(head,font,attr)
elseif char == false then
-- whatever glyph
start = getnext(start)
+ elseif id == glue_code then
+ -- happens often
+ start = getnext(start)
elseif id == disc_code then
local ok
if gpossing then
@@ -3536,7 +4005,7 @@ local function featuresprocessor(head,font,attr)
start, ok = comprun(start,c_run_single, font,attr,lookupcache,step,dataset,sequence,rlmode,handler)
end
if ok then
- success = true
+ done = true
end
elseif id == math_code then
start = getnext(end_of_math(start))
@@ -3551,15 +4020,22 @@ local function featuresprocessor(head,font,attr)
end
else
-
while start do
local char, id = ischar(start,font)
if char then
- local a = attr and 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
+ -- local a = attr and 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
+ local a -- happens often so no assignment is faster
+ if attr then
+ if getattr(start,0) == attr and (not attribute or getprop(start,a_state) == attribute) then
+ a = true
+ end
+ elseif not attribute or getprop(start,a_state) == attribute then
+ a = true
end
if a then
for i=1,nofsteps do
@@ -3572,16 +4048,12 @@ local function featuresprocessor(head,font,attr)
local ok
head, start, ok = handler(head,start,dataset,sequence,lookupmatch,rlmode,step,i)
if ok then
- success = true
+ done = 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)
@@ -3594,6 +4066,10 @@ local function featuresprocessor(head,font,attr)
start = getnext(start)
end
elseif char == false then
+ -- whatever glyph
+ start = getnext(start)
+ elseif id == glue_code then
+ -- happens often
start = getnext(start)
elseif id == disc_code then
local ok
@@ -3605,7 +4081,7 @@ local function featuresprocessor(head,font,attr)
start, ok = comprun(start,c_run_multiple, font,attr,steps,nofsteps,dataset,sequence,rlmode,handler)
end
if ok then
- success = true
+ done = true
end
elseif id == math_code then
start = getnext(end_of_math(start))
@@ -3620,9 +4096,6 @@ local function featuresprocessor(head,font,attr)
end
end
- if success then
- done = true
- end
if trace_steps then -- ?
registerstep(head)
end
@@ -3637,6 +4110,34 @@ end
-- so far
+local plugins = { }
+otf.plugins = plugins
+
+function otf.registerplugin(name,f)
+ if type(name) == "string" and type(f) == "function" then
+ plugins[name] = { name, f }
+ end
+end
+
+local function plugininitializer(tfmdata,value)
+ if type(value) == "string" then
+ tfmdata.shared.plugin = plugins[value]
+ end
+end
+
+local function pluginprocessor(head,font)
+ local s = fontdata[font].shared
+ local p = s and s.plugin
+ if p then
+ if trace_plugins then
+ report_process("applying plugin %a",p[1])
+ end
+ return p[2](head,font)
+ else
+ return head, false
+ end
+end
+
local function featuresinitializer(tfmdata,value)
-- nothing done here any more
end
@@ -3648,9 +4149,11 @@ registerotffeature {
initializers = {
position = 1,
node = featuresinitializer,
+ plug = plugininitializer,
},
processors = {
node = featuresprocessor,
+ plug = pluginprocessor,
}
}
@@ -3665,12 +4168,29 @@ otf.handlers = handlers -- used in devanagari
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
+if fontfeatures then
+
+ function otf.handlers.trigger_space_kerns(head,start,dataset,sequence,_,_,_,_,font,attr)
+ local features = fontfeatures[font]
+ local enabled = features and features.spacekern and features.kern
+ if enabled then
+ setspacekerns(font,sequence)
+ end
+ return head, start, enabled
+ end
+
+else -- generic (no hashes)
+
+ function otf.handlers.trigger_space_kerns(head,start,dataset,sequence,_,_,_,_,font,attr)
+ local shared = fontdata[font].shared
+ local features = shared and shared.features
+ local enabled = features and features.spacekern and features.kern
+ if enabled then
+ setspacekerns(font,sequence)
+ end
+ return head, start, enabled
+ end
+
end
local function hasspacekerns(data)
@@ -3705,11 +4225,13 @@ otf.readers.registerextender {
end
}
+-- we merge the lookups but we still honor the language / script
+
local function spaceinitializer(tfmdata,value) -- attr
local resources = tfmdata.resources
local spacekerns = resources and resources.spacekerns
- if spacekerns == nil then
- local properties = tfmdata.properties
+ local properties = tfmdata.properties
+ if value and spacekerns == nil then
if properties and properties.hasspacekerns then
local sequences = resources.sequences
local left = { }
@@ -3722,28 +4244,57 @@ local function spaceinitializer(tfmdata,value) -- attr
if steps then
local kern = sequence.features.kern
if kern then
- feat = feat or kern -- or maybe merge
+ if feat then
+ for script, languages in next, kern do
+ local f = feat[script]
+ if f then
+ for l in next, languages do
+ f[l] = true
+ end
+ else
+ feat[script] = languages
+ end
+ end
+ else
+ feat = kern
+ end
for i=1,#steps do
- local step = steps[i]
+ local step = steps[i]
local coverage = step.coverage
- if coverage then
- local kerns = coverage[32]
+ local rules = step.rules
+ local format = step.format
+ if rules then
+ -- not now: analyze (simple) rules
+ elseif coverage then
+ -- what to do if we have no [1] but only [2]
+ local single = format == gpos_single
+ 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
+ if type(v) ~= "table" then
right[k] = v
+ elseif single then
+ right[k] = v[3]
+ else
+ local one = v[1]
+ if one then
+ right[k] = one[3]
+ end
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
+ if type(kern) ~= "table" then
left[k] = kern
+ elseif single then
+ left[k] = v[3]
+ else
+ local one = v[1]
+ if one then
+ left[k] = one[3]
+ end
end
end
end
@@ -3794,3 +4345,17 @@ registerotffeature {
node = spaceinitializer,
},
}
+
+local function markinitializer(tfmdata,value)
+ local properties = tfmdata.properties
+ properties.checkmarks = value
+end
+
+registerotffeature {
+ name = "checkmarks",
+ description = "check mark widths",
+ default = true,
+ initializers = {
+ node = markinitializer,
+ },
+}
diff --git a/tex/context/base/mkiv/font-ott.lua b/tex/context/base/mkiv/font-ott.lua
index f8d74a317..cba3758dc 100644
--- a/tex/context/base/mkiv/font-ott.lua
+++ b/tex/context/base/mkiv/font-ott.lua
@@ -18,7 +18,6 @@ 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
@@ -1083,6 +1082,8 @@ table.setmetatableindex(usedfeatures, function(t,k) if k then local v = { } t[k]
storage.register("fonts/otf/usedfeatures", usedfeatures, "fonts.handlers.otf.statistics.usedfeatures" )
+local normalizedaxis = otf.readers.helpers.normalizedaxis or function(s) return s end
+
function otffeatures.normalize(features)
if features then
local h = { }
@@ -1094,6 +1095,11 @@ function otffeatures.normalize(features)
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
+ elseif k == "axis" then
+ h[k] = normalizedaxis(value)
+if not callbacks.supported.glyph_stream_provider then
+ h.variableshapes = true -- for the moment
+end
else
local uk = usedfeatures[key]
local uv = uk[value]
diff --git a/tex/context/base/mkiv/font-oup.lua b/tex/context/base/mkiv/font-oup.lua
index bd47e71dd..75ae08526 100644
--- a/tex/context/base/mkiv/font-oup.lua
+++ b/tex/context/base/mkiv/font-oup.lua
@@ -29,7 +29,12 @@ 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 check_duplicates = true -- can become an option (pseudo feature) / aways needed anyway
+local check_soft_hyphen = false -- can become an option (pseudo feature) / needed for tagging
+
+directives.register("otf.checksofthyphen",function(v)
+ check_soft_hyphen = v
+end)
local function replaced(list,index,replacement)
if type(list) == "number" then
@@ -106,7 +111,7 @@ local function unifyresources(fontdata,indices)
--
local done = { } -- we need to deal with shared !
--
- local duplicates = doduplicates and resources.duplicates
+ local duplicates = check_duplicates and resources.duplicates
if duplicates and not next(duplicates) then
duplicates = false
end
@@ -359,12 +364,34 @@ local function unifyresources(fontdata,indices)
end
local function copyduplicates(fontdata)
- if doduplicates then
+ if check_duplicates then
local descriptions = fontdata.descriptions
local resources = fontdata.resources
local duplicates = resources.duplicates
+ if check_soft_hyphen then
+ -- ebgaramond has a zero width empty soft hyphen
+ local ds = descriptions[0xAD]
+ if not ds or ds.width == 0 then
+ if ds then
+ descriptions[0xAD] = nil
+ report("patching soft hyphen")
+ else
+ report("adding soft hyphen")
+ end
+ if not duplicates then
+ duplicates = { }
+ resources.duplicates = duplicates
+ end
+ local dh = duplicates[0x2D]
+ if dh then
+ dh[#dh+1] = { [0xAD] = true }
+ else
+ duplicates[0x2D] = { [0xAD] = true }
+ end
+ end
+ end
if duplicates then
- for u, d in next, duplicates do
+ for u, d in next, duplicates do
local du = descriptions[u]
if du then
local t = { f_character_y(u), "@", f_index(du.index), "->" }
@@ -707,6 +734,19 @@ local function unifyglyphs(fontdata,usenames)
end
end
--
+ local colorpalettes = resources.colorpalettes
+ if colorpalettes then
+ for index=1,#glyphs do
+ local colors = glyphs[index].colors
+ if colors then
+ for i=1,#colors do
+ local c = colors[i]
+ c.slot = indices[c.slot]
+ end
+ end
+ end
+ end
+ --
fontdata.private = private
fontdata.glyphs = nil
fontdata.names = names
@@ -835,6 +875,8 @@ function readers.getcomponents(fontdata) -- handy for resolving ligatures when n
end
end
+readers.unifymissing = unifymissing
+
function readers.rehash(fontdata,hashmethod) -- TODO: combine loops in one
if not (fontdata and fontdata.glyphs) then
return
@@ -849,7 +891,7 @@ function readers.rehash(fontdata,hashmethod) -- TODO: combine loops in one
unifymissing(fontdata)
-- stripredundant(fontdata)
else
- fontdata.hashmethod = "unicode"
+ fontdata.hashmethod = "unicodes"
local indices = unifyglyphs(fontdata)
unifyresources(fontdata,indices)
copyduplicates(fontdata)
@@ -866,10 +908,10 @@ function readers.checkhash(fontdata)
elseif hashmethod == "names" and fontdata.names then
unifyresources(fontdata,fontdata.names)
copyduplicates(fontdata)
- fontdata.hashmethod = "unicode"
+ fontdata.hashmethod = "unicodes"
fontdata.names = nil -- no need for it
else
- readers.rehash(fontdata,"unicode")
+ readers.rehash(fontdata,"unicodes")
end
end
@@ -1159,6 +1201,8 @@ function readers.pack(data)
local sequences = resources.sequences
local sublookups = resources.sublookups
local features = resources.features
+ local palettes = resources.colorpalettes
+ local variable = resources.variabledata
local chardata = characters and characters.data
local descriptions = data.descriptions or data.glyphs
@@ -1191,6 +1235,14 @@ function readers.pack(data)
end
end
end
+ -- if palettes then
+ -- local color = description.color
+ -- if color then
+ -- for i=1,#color do
+ -- color[i] = pack_normal(color[i])
+ -- end
+ -- end
+ -- end
end
local function packthem(sequences)
@@ -1280,7 +1332,8 @@ function readers.pack(data)
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
+ -- local r = rule.lookups if r then rule.lookups = pack_mixed (r) end
+ local r = rule.replacements if r then rule.replacements = pack_flat (r) end
end
end
end
@@ -1315,6 +1368,63 @@ function readers.pack(data)
end
end
+ if palettes then
+ for i=1,#palettes do
+ local p = palettes[i]
+ for j=1,#p do
+ p[j] = pack_indexed(p[j])
+ end
+ end
+
+ end
+
+ if variable then
+
+ -- todo: segments
+
+ local instances = variable.instances
+ if instances then
+ for i=1,#instances do
+ local v = instances[i].values
+ for j=1,#v do
+ v[j] = pack_normal(v[j])
+ end
+ end
+ end
+
+ local function packdeltas(main)
+ if main then
+ local deltas = main.deltas
+ if deltas then
+ for i=1,#deltas do
+ local di = deltas[i]
+ local d = di.deltas
+ local r = di.regions
+ for j=1,#d do
+ d[j] = pack_indexed(d[j])
+ end
+ di.regions = pack_indexed(di.regions)
+ end
+ end
+ local regions = main.regions
+ if regions then
+ for i=1,#regions do
+ local r = regions[i]
+ for j=1,#r do
+ r[j] = pack_normal(r[j])
+ end
+ end
+ end
+ end
+ end
+
+ packdeltas(variable.global)
+ packdeltas(variable.horizontal)
+ packdeltas(variable.vertical)
+ packdeltas(variable.metrics)
+
+ end
+
if not success(1,pass) then
return
end
@@ -1391,10 +1501,23 @@ function readers.pack(data)
if sublookups then
packthem(sublookups)
end
- -- features
- if not success(2,pass) then
- -- return
+ if variable then
+ local function unpackdeltas(main)
+ if main then
+ local regions = main.regions
+ if regions then
+ main.regions = pack_normal(regions)
+ end
+ end
+ end
+ unpackdeltas(variable.global)
+ unpackdeltas(variable.horizontal)
+ unpackdeltas(variable.vertical)
+ unpackdeltas(variable.metrics)
end
+ -- if not success(2,pass) then
+ -- -- return
+ -- end
end
for pass=1,2 do
@@ -1462,6 +1585,8 @@ function readers.unpack(data)
local sequences = resources.sequences
local sublookups = resources.sublookups
local features = resources.features
+ local palettes = resources.colorpalettes
+ local variable = resources.variabledata
local unpacked = { }
setmetatable(unpacked,unpacked_mt)
for unicode, description in next, descriptions do
@@ -1488,6 +1613,17 @@ function readers.unpack(data)
end
end
end
+ -- if palettes then
+ -- local color = description.color
+ -- if color then
+ -- for i=1,#color do
+ -- local tv = tables[color[i]]
+ -- if tv then
+ -- color[i] = tv
+ -- end
+ -- end
+ -- end
+ -- end
end
local function unpackthem(sequences)
@@ -1659,9 +1795,16 @@ function readers.unpack(data)
end
end
end
+ -- local lookups = rule.lookups
+ -- if lookups then
+ -- local tv = tables[lookups]
+ -- if tv then
+ -- rule.lookups = tv
+ -- end
+ -- end
local replacements = rule.replacements
if replacements then
- local tv = tables[replace]
+ local tv = tables[replacements]
if tv then
rule.replacements = tv
end
@@ -1717,6 +1860,82 @@ function readers.unpack(data)
end
end
+ if palettes then
+ for i=1,#palettes do
+ local p = palettes[i]
+ for j=1,#p do
+ local tv = tables[p[j]]
+ if tv then
+ p[j] = tv
+ end
+ end
+ end
+ end
+
+ if variable then
+
+ -- todo: segments
+
+ local instances = variable.instances
+ if instances then
+ for i=1,#instances do
+ local v = instances[i].values
+ for j=1,#v do
+ local tv = tables[v[j]]
+ if tv then
+ v[j] = tv
+ end
+ end
+ end
+ end
+
+ local function unpackdeltas(main)
+ if main then
+ local deltas = main.deltas
+ if deltas then
+ for i=1,#deltas do
+ local di = deltas[i]
+ local d = di.deltas
+ local r = di.regions
+ for j=1,#d do
+ local tv = tables[d[j]]
+ if tv then
+ d[j] = tv
+ end
+ end
+ local tv = di.regions
+ if tv then
+ di.regions = tv
+ end
+ end
+ end
+ local regions = main.regions
+ if regions then
+ local tv = tables[regions]
+ if tv then
+ main.regions = tv
+ regions = tv
+ end
+ for i=1,#regions do
+ local r = regions[i]
+ for j=1,#r do
+ local tv = tables[r[j]]
+ if tv then
+ r[j] = tv
+ end
+ end
+ end
+ end
+ end
+ end
+
+ unpackdeltas(variable.global)
+ unpackdeltas(variable.horizontal)
+ unpackdeltas(variable.vertical)
+ unpackdeltas(variable.metrics)
+
+ end
+
data.tables = nil
end
end
@@ -2115,15 +2334,20 @@ function readers.expand(data)
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
+ for i=1,#lookups do
+ local lookups = lookups[i]
+ 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
- else
- -- already expanded
end
end
end
diff --git a/tex/context/base/mkiv/font-pre.mkiv b/tex/context/base/mkiv/font-pre.mkiv
index 3b3a76d9c..9336fa352 100644
--- a/tex/context/base/mkiv/font-pre.mkiv
+++ b/tex/context/base/mkiv/font-pre.mkiv
@@ -40,6 +40,10 @@
trep=yes] % texligatures=yes,texquotes=yes
\definefontfeature
+ [original] % a clone of default so we can revert
+ [default]
+
+\definefontfeature
[smallcaps]
[always]
[smcp=yes,
@@ -127,6 +131,11 @@
[script=arab]
\definefontfeature
+ [syriac]
+ [arabic]
+ [fin2=yes,fin3=yes,med2=yes]
+
+\definefontfeature
[hebrew]
[semitic-complete]
[script=hebr]
@@ -240,16 +249,28 @@
\definefontfeature
[mathematics]
[mode=base,
- liga=yes,
kern=yes,
- tlig=yes,
- trep=yes,
+ % liga=yes, % makes no sense
+ % tlig=yes, % makes no sense
+ % trep=yes, % makes no sense
+ mathnolimitsmode={0,800}, % this looks okay on the average font
mathalternates=yes,
mathitalics=yes, % we pass them
+ mathdimensions=all,
% mathgaps=yes,
language=dflt,
script=math]
+\ifdefined\mathnolimitsmode
+ \mathnolimitsmode\plusone % font driven (only opentype)
+\fi
+
+\ifdefined\mathitalicsmode
+ \mathitalicsmode\plusone % experiment
+\fi
+
+% \adaptfontfeature[*math*][mathnolimitsmode=1000] % only subscript
+
\definefontfeature
[mathematics-l2r]
[mathematics]
@@ -266,7 +287,6 @@
[mathematics-r2l]
[mathematics]
[rtlm=yes,
- %dtls=yes,
locl=yes]
\definefontfeature[virtualmath] [mathematics] % downward compatibility
@@ -305,6 +325,10 @@
protrusion=quality]
\definefontfeature
+ [fullprotrusion]
+ [protrusion=pure]
+
+\definefontfeature
[slanted]
[slant=.2]
@@ -312,6 +336,15 @@
[boldened]
[extend=1.2]
+%D Emoji:
+
+\definefontfeature[bandw:overlay][ccmp=yes,dist=yes]
+\definefontfeature[color:overlay][ccmp=yes,dist=yes,colr=yes]
+%definefontfeature[bandw:svg] [ccmp=yes,dist=yes]
+\definefontfeature[color:svg] [ccmp=yes,dist=yes,svg=yes]
+%definefontfeature[bandw:bitmap] [ccmp=yes,dist=yes,sbix=yes]
+\definefontfeature[color:bitmap] [ccmp=yes,dist=yes,sbix=yes]
+
%D We define some colors that are used in tracing (for instance \OPENTYPE\
%D features). We cannot yet inherit because no colors are predefined.
@@ -656,14 +689,27 @@
\definefontfeature[f:oldstyle] [onum=yes]
\definefontfeature[f:tabular] [tnum=yes]
\definefontfeature[f:superiors][sups=yes]
+\definefontfeature[f:fractions][frac=yes]
+\definefontfeature[f:kern] [kern=yes]
+\definefontfeature[f:kerns] [kern=yes]
\definealternativestyle [\v!smallcaps] [\setsmallcaps] [\setsmallcaps]
\definealternativestyle [\v!oldstyle] [\setoldstyle ] [\setoldstyle ]
+\definealternativestyle [\v!fractions] [\setfractions\resetbreakpoints] [\setfractions\resetbreakpoints]
\unexpanded\def\setsmallcaps{\doaddfeature{f:smallcaps}}
\unexpanded\def\setoldstyle {\doaddfeature{f:oldstyle}}
\unexpanded\def\settabular {\doaddfeature{f:tabular}}
\unexpanded\def\setsuperiors{\doaddfeature{f:superiors}}
+\unexpanded\def\setfractions{\doaddfeature{f:fractions}}
+
+% \unexpanded\def\frc#1#2%
+% {\dontleavehmode
+% \begingroup
+% \addff{frac}%
+% \resetbreakpoints
+% #1/#2%
+% \endgroup}
%D \macros
%D {tinyfont}
@@ -676,7 +722,7 @@
%D
%D For tracing purposes we define:
-\definefont[tinyfont][dejavusansmono at 1ex]
+\definefont[tinyfont][file:dejavusansmono at 1ex]
%D \macros
%D {infofont}
@@ -689,10 +735,11 @@
\let\infofont \relax % satisfy dep checker
\let\infofontbold\relax % satisfy dep checker
-\definefont[infofont] [dejavusansmono at 6pt] % todo \the\everybodyfont
-\definefont[infofontbold][dejavusansmonobold at 6pt] % todo \the\everybodyfont
+\definefont[infofont] [file:dejavusansmono at 6pt] % todo \the\everybodyfont
+\definefont[infofontbold][file:dejavusansmono-bold at 6pt] % todo \the\everybodyfont
-%D Optimization (later we overload in math):
+%D Optimization (later we overload in math). Also needed in order to get \type {\ss}
+%D properly defined.
\unexpanded\def\normaltf{\let\fontalternative\s!tf\font_helpers_synchronize_font}
\unexpanded\def\normalbf{\let\fontalternative\s!bf\font_helpers_synchronize_font}
@@ -708,6 +755,14 @@
\let\bi\normalbi
\let\bs\normalbs
+\unexpanded\def\normalrm{\font_helpers_set_current_font_style{\s!rm}}
+\unexpanded\def\normalss{\font_helpers_set_current_font_style{\s!ss}}
+\unexpanded\def\normaltt{\font_helpers_set_current_font_style{\s!tt}}
+
+\let\rm\normalrm
+\let\ss\normalss
+\let\tt\normaltt
+
\protect \endinput
% LM math vs CM math (analysis by Taco):
diff --git a/tex/context/base/mkiv/font-run.mkiv b/tex/context/base/mkiv/font-run.mkiv
index e9a6f9ddb..ebb3a576c 100644
--- a/tex/context/base/mkiv/font-run.mkiv
+++ b/tex/context/base/mkiv/font-run.mkiv
@@ -14,6 +14,8 @@
%D [This code is hooked into the core macros and saves some format
%D space. It needs a cleanup as it's real old derioved \MKII\ code]
+%D
+%D Better use \type{\bTABLE...\eTABLE}.
\unprotect
diff --git a/tex/context/base/mkiv/font-sel.lua b/tex/context/base/mkiv/font-sel.lua
index 4c80ff1fb..b4dd9a555 100644
--- a/tex/context/base/mkiv/font-sel.lua
+++ b/tex/context/base/mkiv/font-sel.lua
@@ -1,64 +1,63 @@
if not modules then modules = { } end modules ['font-sel'] = {
- version = 1.000,
+ version = 1.001,
comment = "companion to font-sel.mkvi",
author = "Wolfgang Schuster",
copyright = "Wolfgang Schuster",
license = "GNU General Public License"
}
-local context = context
-local cleanname = fonts.names.cleanname
-local gsub, splitup, find = string.gsub, string.splitup, string.find
-local concat, sortedkeys = table.concat, table.sortedkeys
-local merge, remove = table.merge, table.remove
-local splitbase, removesuffix = file.splitbase, file.removesuffix
-local splitat, lpegmatch = lpeg.splitat, lpeg.match
-
-local formatters = string.formatters
-local settings_to_array = utilities.parsers.settings_to_array
-local settings_to_hash = utilities.parsers.settings_to_hash
-
-local v_yes = interfaces.variables.yes
-local v_default = interfaces.variables.default
-
-local implement = interfaces.implement
-
-local selectfont = fonts.select or { }
-fonts.select = selectfont
-
-local data = selectfont.data or { }
-selectfont.data = data
-
-local fallbacks = selectfont.fallbacks or { }
-selectfont.fallbacks = fallbacks
-
-local methods = selectfont.methods or { }
-selectfont.methods = methods
-
-local extras = selectfont.extras or { }
-selectfont.extras = extras
-
-local alternatives = selectfont.alternatives or { }
-selectfont.alternatives = alternatives
-
-local presets = selectfont.presets or { }
-selectfont.presets = presets
-
-local defaults = selectfont.defaults or { }
-selectfont.defaults = defaults
-
-local getlookups = fonts.names.getlookups
-local registerdesignsizes = fonts.goodies.designsizes.register
-local bodyfontsizes = storage.shared.bodyfontsizes
-
-local ctx_definefontsynonym = context.definefontsynonym
-local ctx_resetfontfallback = context.resetfontfallback
-local ctx_startfontclass = context.startfontclass
-local ctx_stopfontclass = context.stopfontclass
-local ctx_loadfontgoodies = context.loadfontgoodies
-local ctx_definefontfallback = context.definefontfallback
-local ctx_definetypeface = context.definetypeface
-local ctx_definebodyfont = context.definebodyfont
+local context = context
+local cleanname = fonts.names.cleanname
+local gsub, splitup, find, lower = string.gsub, string.splitup, string.find, string.lower
+local concat, sortedkeys = table.concat, table.sortedkeys
+local merge, remove = table.merge, table.remove
+local splitbase, removesuffix = file.splitbase, file.removesuffix
+local splitat, lpegmatch = lpeg.splitat, lpeg.match
+
+local formatters = string.formatters
+local settings_to_array = utilities.parsers.settings_to_array
+local settings_to_hash = utilities.parsers.settings_to_hash
+local allocate = utilities.storage.allocate
+
+local v_default = interfaces.variables.default
+
+local implement = interfaces.implement
+
+local fonts = fonts
+
+local getlookups = fonts.names.getlookups
+local registerdesignsizes = fonts.goodies.designsizes.register
+local bodyfontsizes = storage.shared.bodyfontsizes
+
+fonts.select = fonts.select or { }
+local selectfont = fonts.select
+
+selectfont.data = selectfont.data or allocate()
+selectfont.fallbacks = selectfont.fallbacks or allocate()
+selectfont.methods = selectfont.methods or allocate()
+selectfont.extras = selectfont.extras or allocate()
+selectfont.alternatives = selectfont.alternatives or allocate()
+selectfont.presets = selectfont.presets or allocate()
+selectfont.defaults = selectfont.defaults or allocate()
+
+storage.register("fonts/select/presets", selectfont.presets, "fonts.select.presets")
+
+local data = selectfont.data
+local fallbacks = selectfont.fallbacks
+local methods = selectfont.methods
+local extras = selectfont.extras
+local alternatives = selectfont.alternatives
+local presets = selectfont.presets
+local defaults = selectfont.defaults
+
+local ctx_definefontsynonym = context.definefontsynonym
+local ctx_resetfontfallback = context.resetfontfallback
+local ctx_startfontclass = context.startfontclass
+local ctx_stopfontclass = context.stopfontclass
+local ctx_loadfontgoodies = context.loadfontgoodies
+local ctx_definefontfallback = context.definefontfallback
+local ctx_definetypeface = context.definetypeface
+local ctx_definebodyfont = context.definebodyfont
local trace_register = false trackers.register("selectfont.register", function(v) trace_register = v end)
local trace_files = false trackers.register("selectfont.files", function(v) trace_files = v end)
@@ -71,7 +70,6 @@ local report_selectfont = logs.reporter("selectfont")
local report_files = logs.reporter("selectfont","files")
local report_features = logs.reporter("selectfont","features")
local report_goodies = logs.reporter("selectfont","goodies")
-local report_alternatives = logs.reporter("selectfont","alternatives")
local report_typescript = logs.reporter("selectfont","typescripts")
defaults["rm"] = { features = { ["sc"] = "*,f:smallcaps" } }
@@ -83,6 +81,8 @@ defaults["dejavumath"] = { options = { extras = "dejavu",
defaults["neoeuler"] = { options = { extras = "euler-math", features = "math\\mathsizesuffix" } }
defaults["latinmodernmath"] = { options = { extras = "lm,lm-math", features = "math\\mathsizesuffix,lm-math", goodies = "lm" } }
defaults["lucidabrightmathot"] = { options = { extras = "lucida-opentype-math", features = "math\\mathsizesuffix", goodies = "lucida-opentype-math" } }
+defaults["minionmath"] = { options = { extras = "minion-math", features = "math\\mathsizesuffix", goodies = "minion-math" } }
+defaults["texgyredejavumath"] = { options = { extras = "dejavu", features = "math\\mathsizesuffix" } }
defaults["texgyrepagellamath"] = { options = { extras = "texgyre", features = "math\\mathsizesuffix" } }
defaults["texgyrebonummath"] = { options = { extras = "texgyre", features = "math\\mathsizesuffix" } }
defaults["texgyrescholamath"] = { options = { extras = "texgyre", features = "math\\mathsizesuffix" } }
@@ -148,9 +148,9 @@ methods["name"] = function(data,alternative,name)
local fontname = getlookups{ fontname = filename }
local fullname = getlookups{ fullname = filename }
if #fontname > 0 then
- selectfont_savefile(data,alternative,0,"default",fullname[1])
- elseif #fullname > 0 then
selectfont_savefile(data,alternative,0,"default",fontname[1])
+ elseif #fullname > 0 then
+ selectfont_savefile(data,alternative,0,"default",fullname[1])
else
if trace_alternatives then
report_selectfont("Alternative '%s': No font was found for the requested name '%s'",alternative,filename)
@@ -227,7 +227,7 @@ local m_alternative = {
["sl"] = "italic",
["bi"] = "bolditalic",
["bs"] = "bolditalic",
- ["sc"] = "regular"
+ ["sc"] = "smallcaps"
}
--~ methods["style"] = function(data,alternative,style)
@@ -294,6 +294,20 @@ local function m_style_family(family)
end
end
+local function m_style_subfamily(entries,style,family)
+ local t = { }
+ local style = cleanname(style)
+ local family = cleanname(family)
+ for index, entry in next, entries do
+ if entry["familyname"] == family and entry["subfamilyname"] == style then -- familyname + subfamilyname
+ t[#t+1] = entry
+ elseif entry["family"] == family and entry["subfamily"] == style then -- family + subfamily
+ t[#t+1] = entry
+ end
+ end
+ return #t ~= 0 and t or nil
+end
+
local function m_style_weight(entries,style)
local t = { }
local weight = m_name[style] and m_name[style]["weight"] or "regular"
@@ -396,13 +410,18 @@ methods["style"] = function(data,alternative,style)
local fontstyle = m_alternative[style] or style
local entries = m_style_family(fontfamily)
if entries then
- entries = m_style_weight(entries,fontstyle)
- if entries then
- entries = m_style_style(entries,fontstyle)
+ local subfamily = m_style_subfamily(entries,fontstyle,fontfamily)
+ if subfamily then
+ entries = subfamily
+ else
+ entries = m_style_weight(entries,fontstyle)
if entries then
- entries = m_style_variant(entries,fontstyle)
- if entries and #entries > 1 and designsize == "default" then
- entries = m_style_width(entries,fontstyle)
+ entries = m_style_style(entries,fontstyle)
+ if entries then
+ entries = m_style_variant(entries,fontstyle)
+ if entries and #entries > 1 and designsize == "default" then
+ entries = m_style_width(entries,fontstyle)
+ end
end
end
end
@@ -543,7 +562,7 @@ function selectfont.registerfontalternative(alternative)
end
function selectfont.registerfallback(index)
- local data = data[index]
+ local data = data[index]
local fontclass = data.metadata.typeface
local fontstyle = data.metadata.style
local fallback = fallbacks[fontclass]
@@ -640,18 +659,19 @@ function selectfont.fontsynonym(data,class,style,alternative,index)
local fontfiles = data.files[alternative] or data.files["tf"]
local fontsizes = sortedkeys(fontfiles)
local fallback = index ~= 0
+ local fontclass = lower(class)
--~ local fontfeature = data.features and data.features[alternative] or data.options.features
--~ local fontgoodie = data.goodies and data.goodies [alternative] or data.options.goodies
local fontfeature = selectfont.features(data,style,alternative)
local fontgoodie = selectfont.goodies (data,style,alternative)
local synonym = m_synonym[style] and m_synonym[style][alternative]
- local fontfile = formatters ["file-%s-%s-%s"](class,style,alternative)
- local fontsynonym = formatters ["synonym-%s-%s-%s"](class,style,alternative)
+ local fontfile = formatters ["file-%s-%s-%s"](fontclass,style,alternative)
+ local fontsynonym = formatters ["synonym-%s-%s-%s"](fontclass,style,alternative)
if fallback then
- fontfile = formatters ["file-%s-%s-%s-%s"](class,style,alternative,index)
- fontsynonym = formatters ["synonym-%s-%s-%s-%s"](class,style,alternative,index)
+ fontfile = formatters ["file-%s-%s-%s-%s"](fontclass,style,alternative,index)
+ fontsynonym = formatters ["synonym-%s-%s-%s-%s"](fontclass,style,alternative,index)
end
- local fontfallback = formatters["fallback-%s-%s-%s"](class,style,alternative)
+ local fontfallback = formatters["fallback-%s-%s-%s"](fontclass,style,alternative)
for _, fontsize in next, fontsizes do
--~ if trace_typescript then
--~ report_typescript("Synonym: '%s', Size: '%s', File: '%s'",fontfile,fontfiles[fontsize][1],fontfiles[fontsize][2])
@@ -678,13 +698,14 @@ function selectfont.fontsynonym(data,class,style,alternative,index)
end
function selectfont.fontfallback(data,class,style,alternative,index)
- local range = data.options.range
- local scale = data.options.rscale ~= "" and data.options.rscale or 1
- local check = data.options.check ~= "" and data.options.check or "yes"
- local force = data.options.force ~= "" and data.options.force or "no"
- local fontfeature = data.features and data.features[alternative] or data.options.features
- local fontsynonym = formatters["synonym-%s-%s-%s-%s"](class,style,alternative,index)
- local fontfallback = formatters["fallback-%s-%s-%s"] (class,style,alternative)
+ local range = data.options.range
+ local scale = data.options.rscale ~= "" and data.options.rscale or 1
+ local check = data.options.check ~= "" and data.options.check or ""
+ local force = data.options.force ~= "" and data.options.force or ""
+ local fontfeature = data.features and data.features[alternative] or data.options.features
+ local fontclass = lower(class)
+ local fontsynonym = formatters ["synonym-%s-%s-%s-%s"](fontclass,style,alternative,index)
+ local fontfallback = formatters["fallback-%s-%s-%s"] (fontclass,style,alternative)
if index == 1 then
ctx_resetfontfallback( { fontfallback } )
end
@@ -702,7 +723,8 @@ function selectfont.filefallback(data,class,style,alternative,index)
local force = data.options.force ~= "" and data.options.force or "yes"
local fontfile = data.files[alternative] and data.files[alternative][0] or data.files["tf"][0]
local fontfeature = data.features and data.features[alternative] or data.options.features
- local fontfallback = formatters["fallback-%s-%s-%s"](class,style,alternative)
+ local fontclass = lower(class)
+ local fontfallback = formatters["fallback-%s-%s-%s"](fontclass,style,alternative)
if index == 1 then
ctx_resetfontfallback( { fontfallback } )
end
@@ -713,7 +735,7 @@ function selectfont.filefallback(data,class,style,alternative,index)
end
function selectfont.mathfallback(index,entry,class,style)
- local data = data[entry]
+ local data = data[entry]
ctx_startfontclass( { class } )
for alternative, _ in next, alternatives do
if alternative == "tf" or alternative == "bf" then
@@ -724,7 +746,7 @@ function selectfont.mathfallback(index,entry,class,style)
end
function selectfont.textfallback(index,entry,class,style)
- local data = data[entry]
+ local data = data[entry]
ctx_startfontclass( { class } )
for alternative, _ in next, alternatives do
selectfont.fontsynonym (data,class,style,alternative,index)
@@ -780,8 +802,9 @@ function selectfont.typescript(data)
end
function selectfont.bodyfont(data)
- local fontclass = data.metadata.typeface
+ local class = data.metadata.typeface
local fontstyle = data.metadata.style
+ local fontclass = lower(class)
local fontsizes = concat(sortedkeys(bodyfontsizes),",")
local fontsynonym = nil
local fontlist = { }
@@ -793,7 +816,7 @@ function selectfont.bodyfont(data)
--~ end
end
fontlist = concat(fontlist,",")
- ctx_definebodyfont( { fontclass }, { fontsizes }, { fontstyle }, { fontlist } )
+ ctx_definebodyfont( { class }, { fontsizes }, { fontstyle }, { fontlist } )
end
local m_style = {
@@ -814,11 +837,7 @@ function selectfont.typeface(data)
--~ if trace_typescript then
--~ report_typescript("Class: '%s', Style: '%s', Size: '%s', Scale: '%s'",fontclass,fontstyle,size,scale)
--~ end
- if fontstyle == "mm" then -- math uses the default bodyfont settings because it uses 'ma' and 'mb' as alternative names
- ctx_definetypeface( { fontclass }, { fontstyle }, { style }, { "" }, { "default" }, { designsize = size, rscale = scale } )
- else
- ctx_definetypeface( { fontclass }, { fontstyle }, { "" }, { "" }, { "" }, { designsize = size, rscale = scale } )
- end
+ ctx_definetypeface( { fontclass }, { fontstyle }, { style }, { "" }, { "default" }, { designsize = size, rscale = scale } )
end
function selectfont.default(data)
@@ -923,4 +942,4 @@ implement {
name = "definefontfamilypreset",
actions = selectfont.definefontfamilypreset,
arguments = { "string", "string" }
-} \ No newline at end of file
+}
diff --git a/tex/context/base/mkiv/font-sel.mkvi b/tex/context/base/mkiv/font-sel.mkvi
index 4e74f6864..a78742928 100644
--- a/tex/context/base/mkiv/font-sel.mkvi
+++ b/tex/context/base/mkiv/font-sel.mkvi
@@ -1,6 +1,6 @@
%D \module
%D [ file=font-sel,
-%D version=2016.05.16,
+%D version=2016.08.28,
%D title=\CONTEXT\ User Module,
%D subtitle=Selectfont,
%D author=Wolfgang Schuster,
@@ -10,15 +10,17 @@
\writestatus{loading}{ConTeXt User Module / Selectfont}
-\registerctxluafile{font-sel}{1.000}
+\registerctxluafile{font-sel}{1.001}
\unprotect
\installcorenamespace {selectfont}
\installsimplecommandhandler \??selectfont {selectfont}
-\unexpanded\def\selectfont_register[#settings]%
+\unexpanded\def\selectfont_register[#style][#settings]%
{\begingroup
+ \edef\currentselectfont{\expandnamespacevalue\??fontshortstyle{#style}\s!rm}%
+ \checkselectfontparent
\setupcurrentselectfont[#settings]%
\edef\p_selectfont_preset{\selectfontparameter\c!preset}%
\ifx\p_selectfont_preset\empty \else
@@ -37,17 +39,17 @@
designsize {\selectfontparameter\s!designsize}%
rscale {\selectfontparameter\s!rscale}%
goodies {\selectfontparameter\c!goodies}%
- extras {\selectfontparameter\c!extras}%
+ extras {\selectfontparameter\c!extras}%
features {\selectfontparameter\c!features}%
- preset {\selectfontparameter\c!preset}%
+ preset {\selectfontparameter\c!preset}%
range {\selectfontparameter\c!range}% fallback only
offset {\selectfontparameter\c!offset}% fallback only
check {\selectfontparameter\c!check}% fallback only
force {\selectfontparameter\c!force}% fallback only
}
- userdata {%
- \luaexpanded{#settings}%
- }}%
+ userdata {%
+ \luaexpanded{#settings}%
+ }}%
\endgroup}
%D \macros
@@ -174,7 +176,7 @@
%D The \tex{definefontfamily} creates like \tex{definetypeface} a collection of font
%D with different styles which can be later called with the \tex{setupbodyfont} command.
%D
-%D The command takes three mendatory commands which are (a) the name of the fontclass,
+%D The command takes three mandatory commands which are (a) the name of the fontclass,
%D (b) the styles of the font and (c) the name of the font.
%D
%D \starttyping
@@ -233,7 +235,7 @@
%D \stoptext
%D \stoptyping
%D
-%D Another feature of the module is the \type{opticalsize} key which allows one to enable
+%D Another feature of the module is the \type{designsize} key which allows one to enable
%D optical sizes when they are a feature of the requested font.
%D
%D \starttyping
@@ -257,8 +259,8 @@
\def\selectfont_family_define[#typeface][#style][#family][#settings]%
{\doifelseassignment{#settings}
- {\selectfont_register[\c!label={#typeface},\c!style={#style},\c!name={#family},#settings]}
- {\selectfont_register[\c!label={#typeface},\c!style={#style},\c!name={#family},\c!preset={#settings}]}%
+ {\selectfont_register[#style][\c!label={#typeface},\c!style={#style},\c!name={#family},#settings]}
+ {\selectfont_register[#style][\c!label={#typeface},\c!style={#style},\c!name={#family},\c!preset={#settings}]}%
\clf_definefontfamily\selectfont_index\relax}
\unexpanded\def\definefallbackfamily
@@ -266,13 +268,26 @@
\def\selectfont_fallback_define[#typeface][#style][#family][#settings]%
{\doifelseassignment{#settings}
- {\selectfont_register[\c!label={#typeface},\c!style={#style},\c!name={#family},#settings]}
- {\selectfont_register[\c!label={#typeface},\c!style={#style},\c!name={#family},\c!preset={#settings}]}%
+ {\selectfont_register[#style][\c!label={#typeface},\c!style={#style},\c!name={#family},#settings]}
+ {\selectfont_register[#style][\c!label={#typeface},\c!style={#style},\c!name={#family},\c!preset={#settings}]}%
\clf_definefallbackfamily\selectfont_index\relax}
+\unexpanded\def\setupfontfamily
+ {\dodoubleargument\selectfont_family_setup}
+
+\def\selectfont_family_setup[#style][#settings]%
+ {\ifsecondargument
+ \edef\currentselectfont{\expandnamespacevalue\??fontshortstyle{#style}\s!rm}%
+ \setupcurrentselectfont[#settings]%
+ \else
+ \let\currentselectfont\empty
+ \setupcurrentselectfont[#style]%
+ \fi}
+
\setupselectfont
[ \c!features=\s!default,
\s!designsize=\s!default,
- \s!rscale=1]
+ \s!rscale=\selectfontparameter\c!scale,
+ \c!scale=1]
-\protect \ No newline at end of file
+\protect
diff --git a/tex/context/base/mkiv/font-set.mkvi b/tex/context/base/mkiv/font-set.mkvi
index b29545ace..2c6d065d8 100644
--- a/tex/context/base/mkiv/font-set.mkvi
+++ b/tex/context/base/mkiv/font-set.mkvi
@@ -137,7 +137,7 @@
\unexpanded\def\font_preloads_fourth_stage
{\begingroup
%ifzeropt\fontcharwd\font\number`!\relax
- \setbox\scratchbox\hbox{c o n t e x t}%
+ \setbox\scratchbox\hpack{\tf c o n t e x t}%
\ifzeropt\wd\scratchbox
\writeline
\writestatus\m!fonts{!! No bodyfont has been defined and no defaults have been}%
diff --git a/tex/context/base/mkiv/font-shp.lua b/tex/context/base/mkiv/font-shp.lua
new file mode 100644
index 000000000..6e21848a4
--- /dev/null
+++ b/tex/context/base/mkiv/font-shp.lua
@@ -0,0 +1,410 @@
+if not modules then modules = { } end modules ['font-shp'] = {
+ 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 = tonumber
+local concat = table.concat
+local formatters = string.formatters
+
+local otf = fonts.handlers.otf
+local afm = fonts.handlers.afm
+
+local hashes = fonts.hashes
+local identifiers = hashes.identifiers
+
+local version = 0.007
+local shapescache = containers.define("fonts", "shapes", version, true)
+local streamscache = containers.define("fonts", "streams", version, true)
+
+-- shapes (can be come a separate file at some point)
+
+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
+
+-- todo: loaders per format
+
+local readers = otf.readers
+local cleanname = readers.helpers.cleanname
+
+local function makehash(filename,sub,instance)
+ local name = cleanname(file.basename(filename))
+ if instance then
+ return formatters["%s-%s-%s"](name,sub or 0,cleanname(instance))
+ else
+ return formatters["%s-%s"] (name,sub or 0)
+ end
+end
+
+local function loadoutlines(cache,filename,sub,instance)
+ 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)
+
+ -- fonts.formats
+
+ if size > 0 and (kind == "otf" or kind == "ttf" or kind == "tcc") then
+ local hash = makehash(filename,sub,instance)
+ data = containers.read(cache,hash)
+ if not data or data.time ~= time or data.size ~= size then
+ data = readers.loadshapes(filename,sub,instance)
+ if data then
+ data.size = size
+ data.format = data.format or (kind == "otf" and "opentype") or "truetype"
+ data.time = time
+ packoutlines(data)
+ containers.write(cache,hash,data)
+ data = containers.read(cache,hash) -- frees old mem
+ end
+ end
+ unpackoutlines(data)
+ elseif size > 0 and (kind == "pfb") then
+ local hash = containers.cleanname(base) -- including suffix
+ data = containers.read(cache,hash)
+ if not data or data.time ~= time or data.size ~= size then
+ data = afm.readers.loadshapes(filename)
+ if data then
+ data.size = size
+ data.format = "type1"
+ data.time = time
+ packoutlines(data)
+ containers.write(cache,hash,data)
+ data = containers.read(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
+
+local function loadstreams(cache,filename,sub,instance)
+ 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)
+
+ -- fonts.formats
+
+ if size > 0 and (kind == "otf" or kind == "ttf" or kind == "tcc") then
+ local hash = makehash(filename,sub,instance)
+ data = containers.read(cache,hash)
+ if not data or data.time ~= time or data.size ~= size then
+ data = readers.loadshapes(filename,sub,instance,true)
+ if data then
+ local glyphs = data.glyphs
+ local streams = { }
+ if glyphs then
+ for i=0,#glyphs do
+ streams[i] = glyphs[i].stream or ""
+ end
+ end
+ data.streams = streams
+ data.glyphs = nil
+ data.size = size
+ data.format = data.format or (kind == "otf" and "opentype") or "truetype"
+ data.time = time
+ containers.write(cache,hash,data)
+ data = containers.read(cache,hash) -- frees old mem
+ end
+ end
+ else
+ data = {
+ filename = filename,
+ size = 0,
+ time = time,
+ format = "unknown",
+ glyphs = { }
+ }
+ end
+ return data
+end
+
+local loadedshapes = { }
+local loadedstreams = { }
+
+local function loadoutlinedata(fontdata,streams)
+ local properties = fontdata.properties
+ local filename = properties.filename
+ local subindex = fontdata.subindex
+ local instance = properties.instance
+ local hash = makehash(filename,subindex,instance)
+ local loaded = loadedshapes[hash]
+ if not loaded then
+ loaded = loadoutlines(shapescache,filename,subindex,instance)
+ loadedshapes[hash] = loaded
+ end
+ return loaded
+end
+
+hashes.shapes = table.setmetatableindex(function(t,k)
+ local f = identifiers[k]
+ if f then
+ return loadoutlinedata(f)
+ end
+end)
+
+local function loadstreamdata(fontdata,streams)
+ local properties = fontdata.properties
+ local filename = properties.filename
+ local subindex = fontdata.subindex
+ local instance = properties.instance
+ local hash = makehash(filename,subindex,instance)
+ local loaded = loadedstreams[hash]
+ if not loaded then
+ loaded = loadstreams(streamscache,filename,subindex,instance)
+ loadedstreams[hash] = loaded
+ end
+ return loaded
+end
+
+hashes.streams = table.setmetatableindex(function(t,k)
+ local f = identifiers[k]
+ if f then
+ return loadstreamdata(f,true)
+ end
+end)
+
+otf.loadoutlinedata = loadoutlinedata -- not public
+otf.loadstreamdata = loadstreamdata -- not public
+otf.loadshapes = loadshapes
+
+-- experimental code, for me only ... unsupported
+
+local f_c = string.formatters["%F %F %F %F %F %F c"]
+local f_l = string.formatters["%F %F l"]
+local f_m = string.formatters["%F %F m"]
+
+local function segmentstopdf(segments,factor,bt,et)
+ local t = { }
+ local m = 0
+ local n = #segments
+ local d = false
+ for i=1,n do
+ local s = segments[i]
+ local w = s[#s]
+ if w == "c" then
+ m = m + 1
+ t[m] = f_c(s[1]*factor,s[2]*factor,s[3]*factor,s[4]*factor,s[5]*factor,s[6]*factor)
+ elseif w == "l" then
+ m = m + 1
+ t[m] = f_l(s[1]*factor,s[2]*factor)
+ elseif w == "m" then
+ m = m + 1
+ t[m] = f_m(s[1]*factor,s[2]*factor)
+ elseif w == "q" then
+ local p = segments[i-1]
+ local n = #p
+ local l_x, l_y = factor*p[n-2], factor*p[n-1]
+ local m_x, m_y = factor*s[1], factor*s[2]
+ local r_x, r_y = factor*s[3], factor*s[4]
+ m = m + 1
+ t[m] = f_c (
+ 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
+ )
+ end
+ end
+ m = m + 1
+ t[m] = "h f" -- B*
+ if bt and et then
+ t[0] = bt
+ t[m+1] = et
+ return concat(t,"\n",0,m+1)
+ else
+ return concat(t,"\n")
+ end
+end
+
+local function addvariableshapes(tfmdata,key,value)
+ if value then
+ local shapes = otf.loadoutlinedata(tfmdata)
+ if not shapes then
+ return
+ end
+ local glyphs = shapes.glyphs
+ if not glyphs then
+ return
+ end
+ local characters = tfmdata.characters
+ local parameters = tfmdata.parameters
+ local hfactor = parameters.hfactor * (7200/7227)
+ local factor = hfactor / 65536
+ local getactualtext = otf.getactualtext
+ for unicode, char in next, characters do
+ if not char.commands then
+ local shape = glyphs[char.index]
+ if shape then
+ local segments = shape.segments
+ if segments then
+ -- we need inline in order to support color
+ local bt, et = getactualtext(char.tounicode or char.unicode or unicode)
+ char.commands = {
+ { "special", "pdf:" .. segmentstopdf(segments,factor,bt,et) }
+ }
+ end
+ end
+ end
+ end
+ end
+end
+
+otf.features.register {
+ name = "variableshapes", -- enforced for now
+ description = "variable shapes",
+ manipulators = {
+ base = addvariableshapes,
+ node = addvariableshapes,
+ }
+}
+
+-- In the end it is easier to just provide the new charstring (cff) and points (ttdf). First
+-- of all we already have the right information so there is no need to patch the already complex
+-- backend code (we only need to make sure the cff is valid). Also, I prototyped support for
+-- these fonts using (converted to) normal postscript shapes, a functionality that was already
+-- present for a while for metafun. This solution even permits us to come up with usage of such
+-- fonts in unexpected ways. It also opens the road to shapes generated with metafun includes
+-- as real cff (or ttf) shapes instead of virtual in-line shapes.
+--
+-- This is probably a prelude to writing a complete backend font inclusion plugin in lua. After
+-- all I already have most info. For this we just need to pass a list of used glyphs (or analyze
+-- them ourselves).
+
+local streams = fonts.hashes.streams
+
+if callbacks.supported.glyph_stream_provider then
+
+ callback.register("glyph_stream_provider",function(id,index,mode)
+ if id > 0 then
+ local streams = streams[id].streams
+ -- print(id,index,streams[index])
+ if streams then
+ return streams[index] or ""
+ end
+ end
+ return ""
+ end)
+
+end
diff --git a/tex/context/base/mkiv/font-sol.lua b/tex/context/base/mkiv/font-sol.lua
index 8d45552a5..82fc3dc40 100644
--- a/tex/context/base/mkiv/font-sol.lua
+++ b/tex/context/base/mkiv/font-sol.lua
@@ -6,6 +6,8 @@ if not modules then modules = { } end modules ['font-sol'] = { -- this was: node
license = "see context related readme files"
}
+-- We can speed this up.
+
-- This module is dedicated to the oriental tex project and for
-- the moment is too experimental to be publicly supported.
--
@@ -21,8 +23,7 @@ if not modules then modules = { } end modules ['font-sol'] = { -- this was: node
local gmatch, concat, format, remove = string.gmatch, table.concat, string.format, table.remove
local next, tostring, tonumber = next, tostring, tonumber
local insert, remove = table.insert, table.remove
-local utfchar = utf.char
-local random = math.random
+local getrandom = utilities.randomizer.get
local utilities, logs, statistics, fonts, trackers = utilities, logs, statistics, fonts, trackers
local interfaces, commands, attributes = interfaces, commands, attributes
@@ -64,17 +65,18 @@ local getattr = nuts.getattr
local getfont = nuts.getfont
local getsubtype = nuts.getsubtype
local getlist = nuts.getlist
+local getdir = nuts.getdir
+local getwidth = nuts.getwidth
-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
-local copy_nodelist = nuts.copy_list
+local flush_node = nuts.flush_node
+local flush_node_list = nuts.flush_list
+local copy_node_list = nuts.copy_list
local traverse_nodes = nuts.traverse
local traverse_ids = nuts.traverse_id
local hpack_nodes = nuts.hpack
@@ -121,9 +123,7 @@ local stoptiming = statistics.stoptiming
local inject_kerns = nodes.injections.handler
local fonthashes = fonts.hashes
-local fontdata = fonthashes.identifiers
local setfontdynamics = fonthashes.setdynamics
-local fontprocesses = fonthashes.processes
local texsetattribute = tex.setattribute
local unsetvalue = attributes.unsetvalue
@@ -166,9 +166,10 @@ local dummy = {
local function checksettings(r,settings)
local s = r.settings
- local method = settings_to_hash(settings.method or "")
+ local method = settings_to_array(settings.method or "")
local optimize, preroll, splitwords
- for k, v in next, method do
+ for i=1,#method do
+ local k = method[i]
if k == v_preroll then
preroll = true
elseif k == v_split then
@@ -235,6 +236,7 @@ local function convert(featuresets,name,list)
fs = contextsetups[feature]
fn = fs and fs.number
end
+-- inspect(fs)
if fn then
nofnumbers = nofnumbers + 1
numbers[nofnumbers] = fn
@@ -350,7 +352,8 @@ function splitters.split(head)
local function flush() -- we can move this
local font = getfont(start)
local last = getnext(stop)
- local list = last and copy_nodelist(start,last) or copy_nodelist(start)
+-- local list = last and copy_node_list(start,last) or copy_node_list(start)
+ local list = last and copy_node_list(start,stop) or copy_node_list(start)
local n = #cache + 1
if encapsulate then
local user_one = new_usernumber(splitter_one,n)
@@ -368,7 +371,8 @@ function splitters.split(head)
end
end
end
- if rlmode == "TRT" or rlmode == "+TRT" then
+ local r2l = rlmode == "TRT" or rlmode == "+TRT"
+ if r2l then
local dirnode = new_textdir("+TRT")
setlink(dirnode,list)
list = dirnode
@@ -376,16 +380,17 @@ function splitters.split(head)
local c = {
original = list,
attribute = attribute,
- direction = rlmode,
+ -- direction = rlmode,
font = font
}
if trace_split then
report_splitters("cached %4i: font %a, attribute %a, direction %a, word %a",
- n, font, attribute, nodes_to_utf(list,true), rlmode and "r2l" or "l2r")
+ n, font, attribute, nodes_to_utf(list,true), r2l and "r2l" or "l2r")
end
cache[n] = c
local solution = solutions[attribute]
- local l, m = #solution.less, #solution.more
+ local l = #solution.less
+ local m = #solution.more
if l > max_less then max_less = l end
if m > max_more then max_more = m end
start, stop, done = nil, nil, true
@@ -421,7 +426,7 @@ function splitters.split(head)
if start then
flush()
end
- rlmode = getfield(current,"dir")
+ rlmode = getdir(current)
else
if start then
flush()
@@ -569,14 +574,15 @@ local function doit(word,list,best,width,badness,line,set,listdir)
return false, changed
end
end
- local original, attribute, direction = found.original, found.attribute, found.direction
- local solution = solutions[attribute]
- local features = solution and solution[set]
+ local original = found.original
+ local attribute = found.attribute
+ local solution = solutions[attribute]
+ local features = solution and solution[set]
if features then
local featurenumber = features[best] -- not ok probably
if featurenumber then
noftries = noftries + 1
- local first = copy_nodelist(original)
+ local first = copy_node_list(original)
if not trace_colors then
for n in traverse_nodes(first) do -- maybe fast force so no attr needed
setattr(n,0,featurenumber) -- this forces dynamics
@@ -608,7 +614,7 @@ first = tonut(first)
if getid(first) == whatsit_code then
local temp = first
first = getnext(first)
- free_node(temp)
+ flush_node(temp)
end
local last = find_node_tail(first)
-- replace [u]h->t by [u]first->last
@@ -622,7 +628,7 @@ first = tonut(first)
local temp, b = repack_hlist(list,width,'exactly',listdir)
if b > badness then
if trace_optimize then
- report_optimizers("line %a, badness before %a, after %a, criterium %a, verdict %a",line,badness,b,criterium,"quit")
+ report_optimizers("line %a, set %a, badness before %a, after %a, criterium %a, verdict %a",line,set or "?",badness,b,criterium,"quit")
end
-- remove last insert
setlink(prev,h)
@@ -632,14 +638,14 @@ first = tonut(first)
setnext(t)
end
setnext(last)
- free_nodelist(first)
+ flush_node_list(first)
else
if trace_optimize then
- report_optimizers("line %a, badness before: %a, after %a, criterium %a, verdict %a",line,badness,b,criterium,"continue")
+ report_optimizers("line %a, set %a, badness before: %a, after %a, criterium %a, verdict %a",line,set or "?",badness,b,criterium,"continue")
end
-- free old h->t
setnext(t)
- free_nodelist(h) -- somhow fails
+ flush_node_list(h) -- somehow fails
if not encapsulate then
word[2] = first
word[3] = last
@@ -701,7 +707,7 @@ end
variants[v_random] = function(words,list,best,width,badness,line,set,listdir)
local changed = 0
while #words > 0 do
- local done, c = doit(remove(words,random(1,#words)),list,best,width,badness,line,set,listdir)
+ local done, c = doit(remove(words,getrandom("solution",1,#words)),list,best,width,badness,line,set,listdir)
changed = changed + c
if done then
break
@@ -752,8 +758,8 @@ function splitters.optimize(head)
for current in traverse_ids(hlist_code,tonut(head)) do
line = line + 1
local sign = getfield(current,"glue_sign")
- local dir = getfield(current,"dir")
- local width = getfield(current,"width")
+ local dir = getdir(current)
+ local width = getwidth(current)
local list = getlist(current)
if not encapsulate and getid(list) == glyph_code then
-- nasty .. we always assume a prev being there .. future luatex will always have a leftskip set
@@ -786,9 +792,9 @@ function splitters.optimize(head)
local bb, base
for i=1,max do
if base then
- free_nodelist(base)
+ flush_node_list(base)
end
- base = copy_nodelist(list)
+ base = copy_node_list(list)
local words = collect_words(base) -- beware: words is adapted
for j=i,max do
local temp, done, changes, b = optimize(words,base,j,width,badness,line,set,dir)
@@ -814,7 +820,7 @@ function splitters.optimize(head)
break
end
end
- free_nodelist(base)
+ flush_node_list(base)
end
local words = collect_words(list)
for best=lastbest or 1,max do
@@ -842,7 +848,7 @@ function splitters.optimize(head)
end
for i=1,nc do
local ci = cache[i]
- free_nodelist(ci.original)
+ flush_node_list(ci.original)
end
cache = { }
tex.hbadness = tex_hbadness
diff --git a/tex/context/base/mkiv/font-sty.mkvi b/tex/context/base/mkiv/font-sty.mkvi
index 6b2c072e5..cf49cd5eb 100644
--- a/tex/context/base/mkiv/font-sty.mkvi
+++ b/tex/context/base/mkiv/font-sty.mkvi
@@ -409,4 +409,25 @@
\let\dostopattributes\endgroup
+%D New but it needs to be supported explicitly (as in natural tables).
+
+\newconditional\c_font_styles_math
+
+\unexpanded\def\font_styles_math_reset
+ {\setfalse\c_font_styles_math}
+
+\unexpanded\def\font_styles_math_start
+ {\ifconditional\c_font_styles_math
+ \startimath
+ \fi
+ \relax}
+
+\unexpanded\def\font_styles_math_stop
+ {\relax
+ \ifconditional\c_font_styles_math
+ \stopimath
+ \fi}
+
+\definealternativestyle[\v!math][\settrue\c_font_styles_math]
+
\protect \endinput
diff --git a/tex/context/base/mkiv/font-sym.mkvi b/tex/context/base/mkiv/font-sym.mkvi
index c1ffd6361..0e709f161 100644
--- a/tex/context/base/mkiv/font-sym.mkvi
+++ b/tex/context/base/mkiv/font-sym.mkvi
@@ -173,6 +173,8 @@
\unexpanded\def\getnamedglyphdirect#fontname#character{{\setdirectsymbolicfont{#fontname}\clf_fontchar{#character}}}
\unexpanded\def\getglyphstyled #fontname#character{{\setstyledsymbolicfont{#fontname}\doifelsenumber{#character}\char\donothing#character}}
\unexpanded\def\getglyphdirect #fontname#character{{\setdirectsymbolicfont{#fontname}\doifelsenumber{#character}\char\donothing#character}}
+\unexpanded\def\resolvedglyphstyled#fontname#character{{\setstyledsymbolicfont{#fontname}\clf_tochar{#character}}}
+\unexpanded\def\resolvedglyphdirect#fontname#character{{\setdirectsymbolicfont{#fontname}\clf_tochar{#character}}}
% this one is wrong:
diff --git a/tex/context/base/mkiv/font-syn.lua b/tex/context/base/mkiv/font-syn.lua
index 435aa1ddc..c4dcf0bcd 100644
--- a/tex/context/base/mkiv/font-syn.lua
+++ b/tex/context/base/mkiv/font-syn.lua
@@ -16,7 +16,7 @@ if not modules then modules = { } end modules ['font-syn'] = {
local next, tonumber, type, tostring = next, tonumber, type, tostring
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 concat, sort, fastcopy = table.concat, table.sort, table.fastcopy
local serialize, sortedhash = table.serialize, table.sortedhash
local lpegmatch = lpeg.match
local unpack = unpack or table.unpack
@@ -128,8 +128,8 @@ local weights = Cs ( -- not extra
+ P("ultralight")
+ P("extralight")
+ P("bold")
- + P("demi")
- + P("semi")
+ + P("demi") -- / "semibold"
+ + P("semi") -- / "semibold"
+ P("light")
+ P("medium")
+ P("heavy")
@@ -140,15 +140,16 @@ local weights = Cs ( -- not extra
+ P("regular") / "normal"
)
--- numeric_weights = {
--- 200 = "extralight",
--- 300 = "light",
--- 400 = "book",
--- 500 = "medium",
--- 600 = "demi",
--- 700 = "bold",
--- 800 = "heavy",
--- 900 = "black",
+-- local weights = {
+-- [100] = "thin",
+-- [200] = "extralight",
+-- [300] = "light",
+-- [400] = "normal",
+-- [500] = "medium",
+-- [600] = "semibold", -- demi demibold
+-- [700] = "bold",
+-- [800] = "extrabold",
+-- [900] = "black",
-- }
local normalized_weights = sparse {
@@ -517,9 +518,11 @@ local function cleanfilename(fullname,defaultsuffix)
end
local sorter = function(a,b)
- return a > b -- to be checked
+ return a > b -- longest first
end
+-- local sorter = nil
+
names.cleanname = cleanname
names.cleanfilename = cleanfilename
@@ -567,6 +570,7 @@ local function check_name(data,result,filename,modification,suffix,subfont)
-- local compatiblename = result.compatiblename
-- local cfffullname = result.cfffullname
local weight = result.weight
+ local width = result.width
local italicangle = tonumber(result.italicangle)
local subfont = subfont
local rawname = fullname or fontname or familyname
@@ -582,11 +586,12 @@ local function check_name(data,result,filename,modification,suffix,subfont)
-- compatiblename = compatiblename and cleanname(compatiblename)
-- cfffullname = cfffullname and cleanname(cfffullname)
weight = weight and cleanname(weight)
+ width = width and cleanname(width)
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 = width or a_width
local variant = a_variant
local style = subfamilyname or subfamily -- can re really trust subfamilyname?
if style then
@@ -618,7 +623,9 @@ local function check_name(data,result,filename,modification,suffix,subfont)
local pfmwidth = result.pfmwidth or 0
local pfmweight = result.pfmweight or 0
--
- specifications[#specifications + 1] = {
+ local instancenames = result.instancenames
+ --
+ specifications[#specifications+1] = {
filename = filename, -- unresolved
cleanfilename = cleanfilename,
-- subfontindex = subfont,
@@ -645,6 +652,7 @@ local function check_name(data,result,filename,modification,suffix,subfont)
maxsize = maxsize ~= 0 and maxsize or nil,
designsize = designsize ~= 0 and designsize or nil,
modification = modification ~= 0 and modification or nil,
+ instancenames = instancenames or nil,
}
end
@@ -796,11 +804,13 @@ local function collecthashes()
local noffallbacks = 0
if specifications then
-- maybe multiple passes (for the compatible and cffnames so that they have less preference)
+ local conflicts = setmetatableindex("table")
for index=1,#specifications do
local specification = specifications[index]
local format = specification.format
local fullname = specification.fullname
local fontname = specification.fontname
+ -- local rawname = specification.rawname
-- local compatiblename = specification.compatiblename
-- local cfffullname = specification.cfffullname
local familyname = specification.familyname or specification.family
@@ -809,6 +819,7 @@ local function collecthashes()
local weight = specification.weight
local mapping = mappings[format]
local fallback = fallbacks[format]
+ local instancenames = specification.instancenames
if fullname and not mapping[fullname] then
mapping[fullname] = index
nofmappings = nofmappings + 1
@@ -817,6 +828,13 @@ local function collecthashes()
mapping[fontname] = index
nofmappings = nofmappings + 1
end
+ if instancenames then
+ for i=1,#instancenames do
+ local instance = fullname .. instancenames[i]
+ mapping[instance] = index
+ nofmappings = nofmappings + 1
+ end
+ end
-- if compatiblename and not mapping[compatiblename] then
-- mapping[compatiblename] = index
-- nofmappings = nofmappings + 1
@@ -847,10 +865,22 @@ local function collecthashes()
noffallbacks = noffallbacks + 1
end
end
+ -- dangerous ... first match takes slot
if not mapping[familyname] and not fallback[familyname] then
fallback[familyname] = index
noffallbacks = noffallbacks + 1
end
+ local conflict = conflicts[format]
+ conflict[familyname] = (conflict[familyname] or 0) + 1
+ end
+ end
+ for format, conflict in next, conflicts do
+ local fallback = fallbacks[format]
+ for familyname, n in next, conflict do
+ if n > 1 then
+ fallback[familyname] = nil
+ noffallbacks = noffallbacks - n
+ end
end
end
end
@@ -890,7 +920,6 @@ local function checkduplicate(where) -- fails on "Romantik" but that's a border
local ok = true
local fn = s.filename
for i=1,#h do
- local hn = s.filename
if h[i] == fn then
ok = false
break
@@ -939,8 +968,9 @@ local function sorthashes()
sort(sorted_mappings [l],sorter)
sort(sorted_fallbacks[l],sorter)
end
- data.sorted_families = table.keys(data.families)
- sort(data.sorted_families,sorter)
+ local sorted_families = table.keys(data.families)
+ data.sorted_families = sorted_families
+ sort(sorted_families,sorter)
end
local function unpackreferences()
@@ -1076,16 +1106,10 @@ 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) -- subfonts start at zero
- -- if not ok then
- -- nofskipped = nofskipped + 1
- -- end
+ check_name(data,result[r],storedname,modification,suffix,r) -- subfonts start at zero
end
else
- local ok = check_name(data,result,storedname,modification,suffix)
- -- if not ok then
- -- nofskipped = nofskipped + 1
- -- end
+ check_name(data,result,storedname,modification,suffix)
end
if trace_warnings and message and message ~= "" then
report_names("warning when identifying %s font %a, %s",suffix,completename,message)
@@ -1366,6 +1390,23 @@ end
-- we could cache a lookup .. maybe some day ... (only when auto loaded!)
+local function checkinstance(found,askedname)
+ local instancenames = found.instancenames
+ if instancenames then
+ local fullname = found.fullname
+ for i=1,#instancenames do
+ local instancename = instancenames[i]
+ if fullname .. instancename == askedname then
+ local f = fastcopy(found)
+ f.instances = nil
+ f.instance = instancename
+ return f
+ end
+ end
+ end
+ return found
+end
+
local function foundname(name,sub) -- sub is not used currently
local data = names.data
local mappings = data.mappings
@@ -1383,7 +1424,7 @@ local function foundname(name,sub) -- sub is not used currently
if trace_names then
report_names("resolved via direct name match: %a",name)
end
- return found
+ return checkinstance(found,name)
end
end
for i=1,#list do
@@ -1393,7 +1434,7 @@ local function foundname(name,sub) -- sub is not used currently
if trace_names then
report_names("resolved via fuzzy name match: %a onto %a",name,fname)
end
- return found
+ return checkinstance(found,name)
end
end
for i=1,#list do
@@ -1403,7 +1444,7 @@ local function foundname(name,sub) -- sub is not used currently
if trace_names then
report_names("resolved via direct fallback match: %a",name)
end
- return found
+ return checkinstance(found,name)
end
end
for i=1,#list do
@@ -1413,7 +1454,7 @@ local function foundname(name,sub) -- sub is not used currently
if trace_names then
report_names("resolved via fuzzy fallback match: %a onto %a",name,fname)
end
- return found
+ return checkinstance(found,name)
end
end
if trace_names then
@@ -1436,7 +1477,7 @@ end
function names.resolve(askedname,sub)
local found = names.resolvedspecification(askedname,sub)
if found then
- return found.filename, found.subfont and found.rawname, found.subfont
+ return found.filename, found.subfont and found.rawname, found.subfont, found.instance
end
end
diff --git a/tex/context/base/mkiv/font-tfm.lua b/tex/context/base/mkiv/font-tfm.lua
index 8e92c4808..6584190ce 100644
--- a/tex/context/base/mkiv/font-tfm.lua
+++ b/tex/context/base/mkiv/font-tfm.lua
@@ -6,8 +6,9 @@ if not modules then modules = { } end modules ['font-tfm'] = {
license = "see context related readme files"
}
-local next = next
-local match = string.match
+local next, type = next, type
+local match, format = string.match, string.format
+local concat, sortedhash = table.concat, table.sortedhash
local trace_defining = false trackers.register("fonts.defining", function(v) trace_defining = v end)
local trace_features = false trackers.register("tfm.features", function(v) trace_features = v end)
@@ -16,6 +17,7 @@ local report_defining = logs.reporter("fonts","defining")
local report_tfm = logs.reporter("fonts","tfm loading")
local findbinfile = resolvers.findbinfile
+local setmetatableindex = table.setmetatableindex
local fonts = fonts
local handlers = fonts.handlers
@@ -23,14 +25,20 @@ local readers = fonts.readers
local constructors = fonts.constructors
local encodings = fonts.encodings
-local tfm = constructors.newhandler("tfm")
+local tfm = constructors.handlers.tfm
tfm.version = 1.000
tfm.maxnestingdepth = 5
tfm.maxnestingsize = 65536*1024
-local tfmfeatures = constructors.newfeatures("tfm")
+local otf = fonts.handlers.otf
+local otfenhancers = otf.enhancers
+
+local tfmfeatures = constructors.features.tfm
local registertfmfeature = tfmfeatures.register
+local tfmenhancers = constructors.enhancers.tfm
+local registertfmenhancer = tfmenhancers.register
+
constructors.resolvevirtualtoo = false -- wil be set in font-ctx.lua
fonts.formats.tfm = "type1" -- we need to have at least a value here
@@ -71,6 +79,42 @@ end
local depth = { } -- table.setmetatableindex("number")
+-- Normally we just load the tfm data and go on. However there was some demand for
+-- loading good old tfm /pfb files where afm files were lacking and even enc files
+-- of dubious quality so we now support loading such (often messy) setups too.
+--
+-- Because such fonts also use (ugly) tweaks achieve some purpose (like swapping
+-- accents) we need to delay the unicoding actions till after the features have been
+-- applied.
+--
+-- It must be noted that in ConTeXt we don't expect this to be used at all. Here is
+-- example:
+--
+-- tfm metrics + pfb vector for index + pfb file for shapes
+--
+-- \font\foo=file:csr10.tfm:reencode=auto;mode=node;liga=yes;kern=yes
+--
+-- tfm metrics + pfb vector for index + enc file for tfm mapping + pfb file for shapes
+--
+-- \font\foo=file:csr10.tfm:reencode=csr.enc;mode=node;liga=yes;kern=yes
+--
+-- tfm metrics + enc file for mapping to tfm + bitmaps shapes
+--
+-- \font\foo=file:csr10.tfm:reencode=csr.enc;bitmap=yes;mode=node;liga=yes;kern=yes
+--
+-- One can add features:
+--
+-- fonts.handlers.otf.addfeature {
+-- name = "czechdqcheat",
+-- type = "substitution",
+-- data = {
+-- quotedblright = "csquotedblright",
+-- },
+-- }
+--
+-- So "czechdqcheat=yes" is then a valid feature. And yes, it's a cheat.
+
+
local function read_from_tfm(specification)
local filename = specification.filename
local size = specification.size
@@ -80,26 +124,116 @@ local function read_from_tfm(specification)
end
local tfmdata = font.read_tfm(filename,size) -- not cached, fast enough
if tfmdata then
- local features = specification.features and specification.features.normal or { }
+
+ local features = specification.features and specification.features.normal or { }
+ local features = constructors.checkedfeatures("tfm",features)
+ specification.features.normal = features
+
+ -- If reencode returns a new table, we assume that we're doing something
+ -- special. An 'auto' reencode pickt up its vector from the pfb file.
+
+ local newtfmdata = (depth[filename] == 1) and tfm.reencode(tfmdata,specification)
+ if newtfmdata then
+ tfmdata = newtfmdata
+ end
+
local resources = tfmdata.resources or { }
local properties = tfmdata.properties or { }
local parameters = tfmdata.parameters or { }
local shared = tfmdata.shared or { }
- properties.name = tfmdata.name
- properties.fontname = tfmdata.fontname
- properties.psname = tfmdata.psname
- properties.filename = specification.filename
- properties.format = fonts.formats.tfm -- better than nothing
- parameters.size = size
+ --
+ shared.features = features
+ shared.resources = resources
+ --
+ properties.name = tfmdata.name -- todo: fallback
+ properties.fontname = tfmdata.fontname -- todo: fallback
+ properties.psname = tfmdata.psname -- todo: fallback
+ properties.fullname = tfmdata.fullname -- todo: fallback
+ properties.filename = specification.filename -- todo: fallback
+ properties.format = fonts.formats.tfm -- better than nothing
--
tfmdata.properties = properties
tfmdata.resources = resources
tfmdata.parameters = parameters
tfmdata.shared = shared
--
- shared.rawdata = { }
+ shared.rawdata = { resources = resources }
shared.features = features
+ --
+ -- The next branch is only entered when we have a proper encoded file i.e.
+ -- unicodes and such. It really nakes no sense to do feature juggling when
+ -- we have no names and unicodes.
+ --
+ if newtfmdata then
+ --
+ -- Some opentype processing assumes these to be present:
+ --
+ if not resources.marks then
+ resources.marks = { }
+ end
+ if not resources.sequences then
+ resources.sequences = { }
+ end
+ if not resources.features then
+ resources.features = {
+ gsub = { },
+ gpos = { },
+ }
+ end
+ if not tfmdata.changed then
+ tfmdata.changed = { }
+ end
+ if not tfmdata.descriptions then
+ tfmdata.descriptions = tfmdata.characters
+ end
+ --
+ -- It might be handy to have this:
+ --
+ otf.readers.addunicodetable(tfmdata)
+ --
+ -- We make a pseudo opentype font, e.g. kerns and ligatures etc:
+ --
+ tfmenhancers.apply(tfmdata,filename)
+ --
+ -- Now user stuff can kick in.
+ --
+ constructors.applymanipulators("tfm",tfmdata,features,trace_features,report_tfm)
+ --
+ -- As that can also mess with names and such, we are now ready for finalizing
+ -- the unicode information. This is a different order that for instance type one
+ -- (afm) files. First we try to deduce unicodes from already present information.
+ --
+ otf.readers.unifymissing(tfmdata)
+ --
+ -- Next we fill in the gaps, based on names from teh agl. Probably not much will
+ -- happen here.
+ --
+ fonts.mappings.addtounicode(tfmdata,filename)
+ --
+ -- The tounicode data is passed to the backend that constructs the vectors for us.
+ --
+ tfmdata.tounicode = 1
+ local tounicode = fonts.mappings.tounicode
+ for unicode, v in next, tfmdata.characters do
+ local u = v.unicode
+ if u then
+ v.tounicode = tounicode(u)
+ end
+ end
+ --
+ -- However, when we use a bitmap font those vectors can't be constructed because
+ -- that information is not carried with those fonts (there is no name info, nor
+ -- proper index info, nor unicodes at that end). So, we provide it ourselves.
+ --
+ if tfmdata.usedbitmap then
+ tfm.addtounicode(tfmdata)
+ end
+ end
+ --
shared.processes = next(features) and tfm.setfeatures(tfmdata,features) or nil
+ --
+ parameters.factor = 1 -- already scaled
+ parameters.size = size
parameters.slant = parameters.slant or parameters[1] or 0
parameters.space = parameters.space or parameters[2] or 0
parameters.space_stretch = parameters.space_stretch or parameters[3] or 0
@@ -110,7 +244,12 @@ local function read_from_tfm(specification)
--
constructors.enhanceparameters(parameters) -- official copies for us
--
- if constructors.resolvevirtualtoo then
+ if newtfmdata then
+ --
+ -- We do nothing as we assume flat tfm files. It would become real messy
+ -- otherwise and I don't have something for testing on my system anyway.
+ --
+ elseif constructors.resolvevirtualtoo then
fonts.loggers.register(tfmdata,file.suffix(filename),specification) -- strange, why here
local vfname = findbinfile(specification.name, 'ovf')
if vfname and vfname ~= "" then
@@ -145,21 +284,26 @@ local function read_from_tfm(specification)
end
end
--
- local allfeatures = tfmdata.shared.features or specification.features.normal
- constructors.applymanipulators("tfm",tfmdata,allfeatures.normal,trace_features,report_tfm)
- if not features.encoding then
- local encoding, filename = match(properties.filename,"^(.-)%-(.*)$") -- context: encoding-name.*
- if filename and encoding and encodings.known and encodings.known[encoding] then
- features.encoding = encoding
- end
- end
- -- let's play safe:
+ -- This is for old times sake (and context specific) so we comment it. It has
+ -- to do with encoding prefixes (a context naming that was later adopted by
+ -- the lm/gyre project)
+ --
+ -- if not features.encoding then
+ -- local encoding, filename = match(properties.filename,"^(.-)%-(.*)$")
+ -- if filename and encoding and encodings.known and encodings.known[encoding] then
+ -- features.encoding = encoding
+ -- end
+ -- end
+ --
+ -- Some afterthoughts:
+ --
properties.haskerns = true
properties.hasligatures = true
resources.unicodes = { }
resources.lookuptags = { }
--
depth[filename] = depth[filename] - 1
+ --
return tfmdata
else
depth[filename] = depth[filename] - 1
@@ -199,3 +343,369 @@ function readers.tfm(specification)
end
readers.ofm = readers.tfm
+
+-- The reencoding acts upon the 'reencode' feature which can have values 'auto' or
+-- an enc file. You can also specify a 'pfbfile' feature (but it defaults to the
+-- tfm filename) and a 'bitmap' feature. When no enc file is givven (auto) we will
+-- get the vectors from the pfb file.
+
+do
+
+ local outfiles = { }
+
+ local tfmcache = table.setmetatableindex(function(t,tfmdata)
+ local id = font.define(tfmdata)
+ t[tfmdata] = id
+ return id
+ end)
+
+ local encdone = table.setmetatableindex("table")
+
+ function tfm.reencode(tfmdata,specification)
+
+ local features = specification.features
+
+ if not features then
+ return
+ end
+
+ local features = features.normal
+
+ if not features then
+ return
+ end
+
+ local tfmfile = file.basename(tfmdata.name)
+ local encfile = features.reencode -- or features.enc
+ local pfbfile = features.pfbfile -- or features.pfb
+ local bitmap = features.bitmap -- or features.pk
+
+ if not encfile then
+ return
+ end
+
+ local pfbfile = outfiles[tfmfile]
+
+ if pfbfile == nil then
+ if bitmap then
+ pfbfile = false
+ elseif type(pfbfile) ~= "string" then
+ pfbfile = tfmfile
+ end
+ if type(pfbfile) == "string" then
+ pfbfile = file.addsuffix(pfbfile,"pfb")
+ -- pdf.mapline(tfmfile .. "<" .. pfbfile)
+ report_tfm("using type1 shapes from %a for %a",pfbfile,tfmfile)
+ else
+ report_tfm("using bitmap shapes for %a",tfmfile)
+ pfbfile = false -- use bitmap
+ end
+ outfiles[tfmfile] = pfbfile
+ end
+
+ local encoding = false
+ local vector = false
+
+ if type(pfbfile) == "string" then
+ local pfb = fonts.constructors.handlers.pfb
+ if pfb and pfb.loadvector then
+ local v, e = pfb.loadvector(pfbfile)
+ if v then
+ vector = v
+ end
+ if e then
+ encoding = e
+ end
+ end
+ end
+ if type(encfile) == "string" and encfile ~= "auto" then
+ encoding = fonts.encodings.load(file.addsuffix(encfile,"enc"))
+ if encoding then
+ encoding = encoding.vector
+ end
+ end
+ if not encoding then
+ report_tfm("bad encoding for %a, quitting",tfmfile)
+ return
+ end
+
+ local unicoding = fonts.encodings.agl and fonts.encodings.agl.unicodes
+ local virtualid = tfmcache[tfmdata]
+ local tfmdata = table.copy(tfmdata) -- good enough for small fonts
+ local characters = { }
+ local originals = tfmdata.characters
+ local indices = { }
+ local parentfont = { "font", 1 }
+ local private = fonts.constructors.privateoffset
+ local reported = encdone[tfmfile][encfile]
+
+ -- create characters table
+
+ local backmap = vector and table.swapped(vector)
+ local done = { } -- prevent duplicate
+
+ for index, name in sortedhash(encoding) do -- predictable order
+ local unicode = unicoding[name]
+ local original = originals[index]
+ if original then
+ if unicode then
+ original.unicode = unicode
+ else
+ unicode = private
+ private = private + 1
+ if not reported then
+ report_tfm("glyph %a in font %a with encoding %a gets unicode %U",name,tfmfile,encfile,unicode)
+ end
+ end
+ characters[unicode] = original
+ indices[index] = unicode
+ original.name = name -- so one can lookup weird names
+ if backmap then
+ original.index = backmap[name]
+ else -- probably bitmap
+ original.commands = { parentfont, { "char", index } }
+ original.oindex = index
+ end
+ done[name] = true
+ elseif not done[name] then
+ report_tfm("bad index %a in font %a with name %a",index,tfmfile,name)
+ end
+ end
+
+ encdone[tfmfile][encfile] = true
+
+ -- redo kerns and ligatures
+
+ for k, v in next, characters do
+ local kerns = v.kerns
+ if kerns then
+ local t = { }
+ for k, v in next, kerns do
+ local i = indices[k]
+ if i then
+ t[i] = v
+ end
+ end
+ v.kerns = next(t) and t or nil
+ end
+ local ligatures = v.ligatures
+ if ligatures then
+ local t = { }
+ for k, v in next, ligatures do
+ local i = indices[k]
+ if i then
+ t[i] = v
+ v.char = indices[v.char]
+ end
+ end
+ v.ligatures = next(t) and t or nil
+ end
+ end
+
+ -- wrap up
+
+ tfmdata.fonts = { { id = virtualid } }
+ tfmdata.characters = characters
+ tfmdata.fullname = tfmdata.fullname or tfmdata.name
+ tfmdata.psname = file.nameonly(pfbfile or tfmdata.name)
+ tfmdata.filename = pfbfile
+ tfmdata.encodingbytes = 2
+ tfmdata.format = "type1"
+ tfmdata.tounicode = 1
+ tfmdata.embedding = "subset"
+ tfmdata.usedbitmap = bitmap and virtualid
+
+ return tfmdata
+ end
+
+end
+
+-- This code adds a ToUnicode vector for bitmap fonts. We don't bother about
+-- ranges because we have small fonts. it works ok with acrobat but fails with
+-- the other viewers (they get confused by the bitmaps I guess).
+
+do
+
+ local template = [[
+/CIDInit /ProcSet findresource begin
+ 12 dict begin
+ begincmap
+ /CIDSystemInfo << /Registry (TeX) /Ordering (bitmap-%s) /Supplement 0 >> def
+ /CMapName /TeX-bitmap-%s def
+ /CMapType 2 def
+ 1 begincodespacerange
+ <00> <FF>
+ endcodespacerange
+ %s beginbfchar
+%s
+ endbfchar
+ endcmap
+CMapName currentdict /CMap defineresource pop end
+end
+end
+]]
+
+ local flushstreamobject = lpdf and lpdf.flushstreamobject
+ local setfontattributes = pdf.setfontattributes
+
+ if not flushstreamobject then
+ flushstreamobject = function(data)
+ return pdf.obj {
+ immediate = true,
+ type = "stream",
+ string = data,
+ }
+ end
+ end
+
+ if not setfontattributes then
+ setfontattributes = function(id,data)
+ print(format("your luatex is too old so no tounicode bitmap font%i",id))
+ end
+ end
+
+ function tfm.addtounicode(tfmdata)
+ local id = tfmdata.usedbitmap
+ local map = { }
+ local char = { } -- no need for range, hardly used
+ for k, v in next, tfmdata.characters do
+ local index = v.oindex
+ local tounicode = v.tounicode
+ if index and tounicode then
+ map[index] = tounicode
+ end
+ end
+ for k, v in sortedhash(map) do
+ char[#char+1] = format("<%02X> <%s>",k,v)
+ end
+ char = concat(char,"\n")
+ local stream = format(template,id,id,#char,char)
+ local reference = flushstreamobject(stream,nil,true)
+ setfontattributes(id,format("/ToUnicode %i 0 R",reference))
+ end
+
+end
+
+-- Now we implement the regular features handlers. We need to convert the
+-- tfm specific structures to opentype structures. In basemode they are
+-- converted back so that is a bti of a waste but it's fast enough.
+
+do
+
+ local everywhere = { ["*"] = { ["*"] = true } } -- or: { ["*"] = { "*" } }
+ local noflags = { false, false, false, false }
+
+ local function enhance_normalize_features(data)
+ local ligatures = setmetatableindex("table")
+ local kerns = setmetatableindex("table")
+ local characters = data.characters
+ for u, c in next, characters do
+ local l = c.ligatures
+ local k = c.kerns
+ if l then
+ ligatures[u] = l
+ for u, v in next, l do
+ l[u] = { ligature = v.char }
+ end
+ c.ligatures = nil
+ end
+ if k then
+ kerns[u] = k
+ for u, v in next, k do
+ k[u] = v -- { v, 0 }
+ end
+ c.kerns = nil
+ end
+ end
+
+ for u, l in next, ligatures do
+ for k, v in next, l do
+ local vl = v.ligature
+ local dl = ligatures[vl]
+ if dl then
+ for kk, vv in next, dl do
+ v[kk] = vv -- table.copy(vv)
+ end
+ end
+ end
+ end
+
+ local features = {
+ gpos = { },
+ gsub = { },
+ }
+ local sequences = {
+ -- only filled ones
+ }
+ if next(ligatures) then
+ features.gsub.liga = everywhere
+ data.properties.hasligatures = true
+ sequences[#sequences+1] = {
+ features = {
+ liga = everywhere,
+ },
+ flags = noflags,
+ name = "s_s_0",
+ nofsteps = 1,
+ order = { "liga" },
+ type = "gsub_ligature",
+ steps = {
+ {
+ coverage = ligatures,
+ },
+ },
+ }
+ end
+ if next(kerns) then
+ features.gpos.kern = everywhere
+ data.properties.haskerns = true
+ sequences[#sequences+1] = {
+ features = {
+ kern = everywhere,
+ },
+ flags = noflags,
+ name = "p_s_0",
+ nofsteps = 1,
+ order = { "kern" },
+ type = "gpos_pair",
+ steps = {
+ {
+ format = "kern",
+ coverage = kerns,
+ },
+ },
+ }
+ end
+ data.resources.features = features
+ data.resources.sequences = sequences
+ data.shared.resources = data.shared.resources or resources
+ end
+
+ registertfmenhancer("normalize features", enhance_normalize_features)
+ registertfmenhancer("check extra features", otfenhancers.enhance)
+
+end
+
+-- As with type one (afm) loading, we just use the opentype ones:
+
+registertfmfeature {
+ name = "mode",
+ description = "mode",
+ initializers = {
+ base = otf.modeinitializer,
+ node = otf.modeinitializer,
+ }
+}
+
+registertfmfeature {
+ name = "features",
+ description = "features",
+ default = true,
+ initializers = {
+ base = otf.basemodeinitializer,
+ node = otf.nodemodeinitializer,
+ },
+ processors = {
+ node = otf.featuresprocessor,
+ }
+}
diff --git a/tex/context/base/mkiv/font-tra.mkiv b/tex/context/base/mkiv/font-tra.mkiv
index f5290d614..38b172ba6 100644
--- a/tex/context/base/mkiv/font-tra.mkiv
+++ b/tex/context/base/mkiv/font-tra.mkiv
@@ -287,4 +287,16 @@
\stopotfsample
\endgroup}
+% new
+
+\unexpanded\def\savefont[#1]% not yet in i-*.xml
+ {\begingroup
+ \getdummyparameters[#1]%
+ \clf_savefont {
+ filename {\dummyparameter\c!file}
+ fontname {\dummyparameter\c!name}
+ method {\dummyparameter\c!method}
+ }%
+ \endgroup}
+
\protect \endinput
diff --git a/tex/context/base/mkiv/font-ttf.lua b/tex/context/base/mkiv/font-ttf.lua
index 6df339214..339764d4a 100644
--- a/tex/context/base/mkiv/font-ttf.lua
+++ b/tex/context/base/mkiv/font-ttf.lua
@@ -6,42 +6,83 @@ if not modules then modules = { } end modules ['font-ttf'] = {
license = "see context related readme files"
}
+-- This version is different from previous in the sense that we no longer store
+-- contours but keep points and contours (endpoints) separate for a while
+-- because later on we need to apply deltas and that is easier on a list of
+-- points.
+
+-- 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.
+
+-- For deltas we need a rather complex loop over points that can have holes and
+-- be less than nofpoints and even can have duplicates and also the x and y value
+-- lists can be shorter than etc. I need fonts in order to complete this simply
+-- because I need to visualize in order to understand (what the standard tries
+-- to explain).
+
+-- 0 point then none applied
+-- 1 points then applied to all
+-- otherwise inferred deltas using nearest
+-- if no lower point then use highest referenced point
+-- if no higher point then use lowest referenced point
+-- factor = (target-left)/(right-left)
+-- delta = (1-factor)*left + factor * right
+
local next, type, unpack = next, type, unpack
-local bittest = bit32.btest
-local sqrt = math.sqrt
+local bittest, band, rshift = bit32.btest, bit32.band, bit32.rshift
+local sqrt, round = math.sqrt, math.round
+local char = string.char
+local concat = table.concat
+
+local report = logs.reporter("otf reader","ttf")
-local report = logs.reporter("otf reader","ttf")
+local trace_deltas = false
-local readers = fonts.handlers.otf.readers
-local streamreader = readers.streamreader
+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 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 readinteger = streamreader.readinteger1
+
+local helpers = readers.helpers
+local gotodatatable = helpers.gotodatatable
local function mergecomposites(glyphs,shapes)
+ -- todo : deltas
+
local function merge(index,shape,components)
local contours = { }
+ local points = { }
local nofcontours = 0
+ local nofpoints = 0
+ local offset = 0
+ local deltas = shape.deltas
for i=1,#components do
local component = components[i]
local subindex = component.index
local subshape = shapes[subindex]
local subcontours = subshape.contours
+ local subpoints = subshape.points
if not subcontours then
local subcomponents = subshape.components
if subcomponents then
- subcontours = merge(subindex,subshape,subcomponents)
+ subcontours, subpoints = merge(subindex,subshape,subcomponents)
end
end
- if subcontours then
+ if subpoints then
local matrix = component.matrix
local xscale = matrix[1]
local xrotate = matrix[2]
@@ -49,36 +90,39 @@ local function mergecomposites(glyphs,shapes)
local yscale = matrix[4]
local xoffset = matrix[5]
local yoffset = matrix[6]
+ for i=1,#subpoints do
+ local p = subpoints[i]
+ local x = p[1]
+ local y = p[2]
+ nofpoints = nofpoints + 1
+ points[nofpoints] = {
+ xscale * x + xrotate * y + xoffset,
+ yscale * y + yrotate * x + yoffset,
+ p[3]
+ }
+ end
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
+ contours[nofcontours] = offset + subcontours[i]
end
+ offset = offset + #subpoints
else
report("missing contours composite %s, component %s of %s, glyph %s",index,i,#components,subindex)
end
end
+ shape.points = points -- todo : phantom points
shape.contours = contours
shape.components = nil
- return contours
+ return contours, points
end
for index=1,#glyphs do
- local shape = shapes[index]
- local components = shape.components
- if components then
- merge(index,shape,components)
+ local shape = shapes[index]
+ if shape then
+ local components = shape.components
+ if components then
+ merge(index,shape,components)
+ end
end
end
@@ -92,145 +136,561 @@ 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 {
+ 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"
- }
+ r_x, r_y, "c"
end
-- We could omit the operator which saves some 10%:
--
--- #2=lineto #4=quadratic #6=cubic #3=moveto (with "m")
+-- #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.
+-- This is tricky ... something to do with phantom points .. however, the hvar
+-- and vvar tables should take care of the width .. the test font doesn't have
+-- those so here we go then (we need a flag for hvar).
--
--- 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
+-- h-advance left-side-bearing v-advance top-side-bearing
+--
+-- We had two loops (going backward) but can do it in one loop .. but maybe we
+-- should only accept fonts with proper hvar tables.
+
+local function applyaxis(glyph,shape,deltas,dowidth)
+ local points = shape.points
+ if points then
+ local nofpoints = #points
+ local h = nofpoints + 2 -- weird, the example font seems to have left first
+ local l = nofpoints + 1
+ ----- v = nofpoints + 3
+ ----- t = nofpoints + 4
+ local dw = 0
+ local dl = 0
+ for i=1,#deltas do
+ local deltaset = deltas[i]
+ local xvalues = deltaset.xvalues
+ local yvalues = deltaset.yvalues
+ local dpoints = deltaset.points
+ local factor = deltaset.factor
+ if dpoints then
+ -- todo: interpolate
+ local nofdpoints = #dpoints
+ for i=1,nofdpoints do
+ local d = dpoints[i]
+ local p = points[d]
+ if p then
+ if xvalues then
+ local x = xvalues[i]
+ if x and x ~= 0 then
+ p[1] = p[1] + factor * x
+ end
+ end
+ if yvalues then
+ local y = yvalues[i]
+ if y and y ~= 0 then
+ p[2] = p[2] + factor * y
+ end
+ end
+ elseif dowidth then
+ -- we've now ran into phantom points which is a bit fuzzy because:
+ -- are there gaps in there?
+ --
+ -- todo: move this outside the loop (when we can be sure of all 4 being there)
+ if d == h then
+ -- we have a phantom point hadvance
+ local x = xvalues[i]
+ if x then
+ dw = dw + factor * x
+ end
+ elseif d == l then
+ local x = xvalues[i]
+ if x then
+ dl = dl + factor * x
+ end
+ end
+ end
+ end
+ else
+ for i=1,nofpoints do
+ local p = points[i]
+ if xvalues then
+ local x = xvalues[i]
+ if x and x ~= 0 then
+ p[1] = p[1] + factor * x
+ end
+ end
+ if yvalues then
+ local y = yvalues[i]
+ if y and y ~= 0 then
+ p[2] = p[2] + factor * y
+ end
+ end
+ end
+ if dowidth then
+ local x = xvalues[h]
+ if x then
+ dw = dw + factor * x
+ end
+ local x = xvalues[l]
+ if x then
+ dl = dl + factor * x
+ end
+ end
+ end
+ end
+ -- for i=1,nofpoints do
+ -- local p = points[i]
+ -- p[1] = round(p[1])
+ -- p[2] = round(p[2])
+ -- end
+ if dowidth then
+ local width = glyph.width or 0
+ -- local lsb = glyph.lsb or 0
+ glyph.width = width + dw - dl
+ end
+ else
+ report("no points for glyph %a",glyph.name)
+ end
+end
+
+-- round or not ?
+
+-- local quadratic = true -- both methods work, todo: install a directive
+local quadratic = false
+
+local function contours2outlines_normal(glyphs,shapes) -- maybe accept the bbox overhead
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
+ local shape = shapes[index]
+ if shape then
+ local glyph = glyphs[index]
+ local contours = shape.contours
+ local points = shape.points
+ if contours then
+ local nofcontours = #contours
+ local segments = { }
+ local nofsegments = 0
+ glyph.segments = segments
+ if nofcontours > 0 then
+ local px, py = 0, 0 -- we could use these in calculations which saves a copy
+ local first = 1
+ for i=1,nofcontours do
+ local last = contours[i]
+ if last >= first then
+ local first_pt = points[first]
+ local first_on = first_pt[3]
+ -- todo no new tables but reuse lineto and quadratic
+ if first == last then
+ 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 = points[last]
+ local last_on = last_pt[3]
+ local start = 1
+ local control_pt = false
+ if first_on then
+ start = 2
else
- first_pt = { (first_pt[1]+last_pt[1])/2, (first_pt[2]+last_pt[2])/2, false }
+ 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
- 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
+ local x, y = first_pt[1], first_pt[2]
+ if not done then
+ xmin, ymin, xmax, ymax = x, y, x, y
+ done = true
+ end
+ nofsegments = nofsegments + 1
+ segments[nofsegments] = { x, y, "m" } -- "moveto"
+ if not quadratic then
+ px, py = x, y
+ end
+ local previous_pt = first_pt
+ for i=first,last do
+ local current_pt = points[i]
+ local current_on = current_pt[3]
+ local previous_on = previous_pt[3]
+ if previous_on then
+ if current_on then
+ -- both normal points
+ local x, y = current_pt[1], current_pt[2]
+ nofsegments = nofsegments + 1
+ segments[nofsegments] = { x, y, "l" } -- "lineto"
+ if not quadratic then
+ px, py = x, y
+ end
+ else
+ control_pt = current_pt
+ end
+ elseif current_on then
+ local x1, y1 = control_pt[1], control_pt[2]
+ local x2, y2 = current_pt[1], current_pt[2]
nofsegments = nofsegments + 1
- segments[nofsegments] = { current_pt[1], current_pt[2], "l" } -- "lineto"
+ if quadratic then
+ segments[nofsegments] = { x1, y1, x2, y2, "q" } -- "quadraticto"
+ else
+ x1, y1, x2, y2, px, py = curveto(x1, y1, px, py, x2, y2)
+ segments[nofsegments] = { x1, y1, x2, y2, px, py, "c" } -- "curveto"
+ end
+ control_pt = false
else
+ local x2, y2 = (previous_pt[1]+current_pt[1])/2, (previous_pt[2]+current_pt[2])/2
+ local x1, y1 = control_pt[1], control_pt[2]
+ nofsegments = nofsegments + 1
+ if quadratic then
+ segments[nofsegments] = { x1, y1, x2, y2, "q" } -- "quadraticto"
+ else
+ x1, y1, x2, y2, px, py = curveto(x1, y1, px, py, x2, y2)
+ segments[nofsegments] = { x1, y1, x2, y2, px, py, "c" } -- "curveto"
+ end
control_pt = current_pt
end
- elseif current_on then
- local ps = segments[nofsegments]
+ previous_pt = current_pt
+ end
+ if first_pt == last_pt then
+ -- we're already done, probably a simple curve
+ else
nofsegments = nofsegments + 1
- if quadratic then
- segments[nofsegments] = { control_pt[1], control_pt[2], current_pt[1], current_pt[2], "q" } -- "quadraticto"
+ local x2, y2 = first_pt[1], first_pt[2]
+ if not control_pt then
+ segments[nofsegments] = { x2, y2, "l" } -- "lineto"
+ elseif quadratic then
+ local x1, y1 = control_pt[1], control_pt[2]
+ segments[nofsegments] = { x1, y1, x2, y2, "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])
+ local x1, y1 = control_pt[1], control_pt[2]
+ x1, y1, x2, y2, px, py = curveto(x1, y1, px, py, x2, y2)
+ segments[nofsegments] = { x1, y1, x2, y2, px, py, "c" } -- "curveto"
+ -- px, py = x2, y2
end
- control_pt = false
+ end
+ end
+ end
+ first = last + 1
+ end
+ end
+ end
+ end
+ end
+end
+
+local function contours2outlines_shaped(glyphs,shapes,keepcurve)
+ for index=1,#glyphs do
+ local shape = shapes[index]
+ if shape then
+ local glyph = glyphs[index]
+ local contours = shape.contours
+ local points = shape.points
+ if contours then
+ local nofcontours = #contours
+ local segments = keepcurve and { } or nil
+ local nofsegments = 0
+ if keepcurve then
+ glyph.segments = segments
+ end
+ if nofcontours > 0 then
+ local xmin, ymin, xmax, ymax, done = 0, 0, 0, 0, false
+ local px, py = 0, 0 -- we could use these in calculations which saves a copy
+ local first = 1
+ for i=1,nofcontours do
+ local last = contours[i]
+ if last >= first then
+ local first_pt = points[first]
+ local first_on = first_pt[3]
+ -- todo no new tables but reuse lineto and quadratic
+ if first == last then
+ -- this can influence the boundingbox
+ if keepcurve then
+ first_pt[3] = "m" -- "moveto"
+ nofsegments = nofsegments + 1
+ segments[nofsegments] = first_pt
+ end
+ else -- maybe also treat n == 2 special
+ local first_on = first_pt[3]
+ local last_pt = points[last]
+ 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
+ local x, y = first_pt[1], first_pt[2]
+ if not done then
+ xmin, ymin, xmax, ymax = x, y, x, y
+ done = true
+ else
+ 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
+ if keepcurve then
nofsegments = nofsegments + 1
- local halfway_x = (previous_pt[1]+current_pt[1])/2
- local halfway_y = (previous_pt[2]+current_pt[2])/2
+ segments[nofsegments] = { x, y, "m" } -- "moveto"
+ end
+ if not quadratic then
+ px, py = x, y
+ end
+ local previous_pt = first_pt
+ for i=first,last do
+ local current_pt = points[i]
+ local current_on = current_pt[3]
+ local previous_on = previous_pt[3]
+ if previous_on then
+ if current_on then
+ -- both normal points
+ local x, y = current_pt[1], current_pt[2]
+ 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
+ if keepcurve then
+ nofsegments = nofsegments + 1
+ segments[nofsegments] = { x, y, "l" } -- "lineto"
+ end
+ if not quadratic then
+ px, py = x, y
+ end
+ else
+ control_pt = current_pt
+ end
+ elseif current_on then
+ local x1, y1 = control_pt[1], control_pt[2]
+ local x2, y2 = current_pt[1], current_pt[2]
+ if quadratic 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
+ if keepcurve then
+ nofsegments = nofsegments + 1
+ segments[nofsegments] = { x1, y1, x2, y2, "q" } -- "quadraticto"
+ end
+ else
+ x1, y1, x2, y2, px, py = curveto(x1, y1, px, py, x2, y2)
+ 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
+ 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 px < xmin then xmin = px elseif px > xmax then xmax = px end
+ if py < ymin then ymin = py elseif py > ymax then ymax = py end
+ if keepcurve then
+ nofsegments = nofsegments + 1
+ segments[nofsegments] = { x1, y1, x2, y2, px, py, "c" } -- "curveto"
+ end
+ end
+ control_pt = false
+ else
+ local x2, y2 = (previous_pt[1]+current_pt[1])/2, (previous_pt[2]+current_pt[2])/2
+ local x1, y1 = control_pt[1], control_pt[2]
+ if quadratic 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
+ if keepcurve then
+ nofsegments = nofsegments + 1
+ segments[nofsegments] = { x1, y1, x2, y2, "q" } -- "quadraticto"
+ end
+ else
+ x1, y1, x2, y2, px, py = curveto(x1, y1, px, py, x2, y2)
+ 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
+ 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 px < xmin then xmin = px elseif px > xmax then xmax = px end
+ if py < ymin then ymin = py elseif py > ymax then ymax = py end
+ if keepcurve then
+ nofsegments = nofsegments + 1
+ segments[nofsegments] = { x1, y1, x2, y2, px, py, "c" } -- "curveto"
+ end
+ 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
+ elseif not control_pt then
+ if keepcurve then
+ nofsegments = nofsegments + 1
+ segments[nofsegments] = { first_pt[1], first_pt[2], "l" } -- "lineto"
+ end
+ else
+ local x1, y1 = control_pt[1], control_pt[2]
+ local x2, y2 = first_pt[1], first_pt[2]
+ 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
if quadratic then
- segments[nofsegments] = { control_pt[1], control_pt[2], halfway_x, halfway_y, "q" } -- "quadraticto"
+ if keepcurve then
+ nofsegments = nofsegments + 1
+ segments[nofsegments] = { x1, y1, x2, y2, "q" } -- "quadraticto"
+ end
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)
+ x1, y1, x2, y2, px, py = curveto(x1, y1, px, py, x2, y2)
+ 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 px < xmin then xmin = px elseif px > xmax then xmax = px end
+ if py < ymin then ymin = py elseif py > ymax then ymax = py end
+ if keepcurve then
+ nofsegments = nofsegments + 1
+ segments[nofsegments] = { x1, y1, x2, y2, px, py, "c" } -- "curveto"
+ end
+ -- px, py = x2, y2
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
+ end
+ first = last + 1
+ end
+ glyph.boundingbox = { round(xmin), round(ymin), round(xmax), round(ymax) }
+ end
+ end
+ end
+ end
+end
+
+-- optimize for zero
+
+local c_zero = char(0)
+local s_zero = char(0,0)
+
+local function toushort(n)
+ return char(band(rshift(n,8),0xFF),band(n,0xFF))
+end
+
+local function toshort(n)
+ if n < 0 then
+ n = n + 0x10000
+ end
+ return char(band(rshift(n,8),0xFF),band(n,0xFF))
+end
+
+-- todo: we can reuse result, xpoints and ypoints
+
+local function repackpoints(glyphs,shapes)
+ local noboundingbox = { 0, 0, 0, 0 }
+ local result = { } -- reused
+ for index=1,#glyphs do
+ local shape = shapes[index]
+ if shape then
+ local r = 0
+ local glyph = glyphs[index]
+ if false then -- shape.type == "composite"
+ -- we merged them
+ else
+ local contours = shape.contours
+ local nofcontours = contours and #contours or 0
+ local boundingbox = glyph.boundingbox or noboundingbox
+ r = r + 1 result[r] = toshort(nofcontours)
+ r = r + 1 result[r] = toshort(boundingbox[1]) -- xmin
+ r = r + 1 result[r] = toshort(boundingbox[2]) -- ymin
+ r = r + 1 result[r] = toshort(boundingbox[3]) -- xmax
+ r = r + 1 result[r] = toshort(boundingbox[4]) -- ymax
+ if nofcontours > 0 then
+ for i=1,nofcontours do
+ r = r + 1 result[r] = toshort(contours[i]-1)
+ end
+ r = r + 1 result[r] = s_zero -- no instructions
+ local points = shape.points
+ local currentx = 0
+ local currenty = 0
+ local xpoints = { }
+ local ypoints = { }
+ local x = 0
+ local y = 0
+ local lastflag = nil
+ local nofflags = 0
+ for i=1,#points do
+ local pt = points[i]
+ local px = pt[1]
+ local py = pt[2]
+ local fl = pt[3] and 0x01 or 0x00
+ if px == currentx then
+ fl = fl + 0x10
+ else
+ local dx = round(px - currentx)
+ if dx < -255 or dx > 255 then
+ x = x + 1 xpoints[x] = toshort(dx)
+ elseif dx < 0 then
+ fl = fl + 0x02
+ x = x + 1 xpoints[x] = char(-dx)
+ elseif dx > 0 then
+ fl = fl + 0x12
+ x = x + 1 xpoints[x] = char(dx)
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
+ fl = fl + 0x02
+ x = x + 1 xpoints[x] = c_zero
end
end
+ if py == currenty then
+ fl = fl + 0x20
+ else
+ local dy = round(py - currenty)
+ if dy < -255 or dy > 255 then
+ y = y + 1 ypoints[y] = toshort(dy)
+ elseif dy < 0 then
+ fl = fl + 0x04
+ y = y + 1 ypoints[y] = char(-dy)
+ elseif dy > 0 then
+ fl = fl + 0x24
+ y = y + 1 ypoints[y] = char(dy)
+ else
+ fl = fl + 0x04
+ y = y + 1 ypoints[y] = c_zero
+ end
+ end
+ currentx = px
+ currenty = py
+ if lastflag == fl then
+ nofflags = nofflags + 1
+ else -- if > 255
+ if nofflags == 1 then
+ r = r + 1 result[r] = char(lastflag)
+ elseif nofflags == 2 then
+ r = r + 1 result[r] = char(lastflag,lastflag)
+ elseif nofflags > 2 then
+ lastflag = lastflag + 0x08
+ r = r + 1 result[r] = char(lastflag,nofflags-1)
+ end
+ nofflags = 1
+ lastflag = fl
+ end
+ end
+ if nofflags == 1 then
+ r = r + 1 result[r] = char(lastflag)
+ elseif nofflags == 2 then
+ r = r + 1 result[r] = char(lastflag,lastflag)
+ elseif nofflags > 2 then
+ lastflag = lastflag + 0x08
+ r = r + 1 result[r] = char(lastflag,nofflags-1)
end
+ r = r + 1 result[r] = concat(xpoints)
+ r = r + 1 result[r] = concat(ypoints)
end
end
+ glyph.stream = concat(result,"",1,r)
+ else
+ -- fatal
end
end
end
-- end of converter
-local function readglyph(f,nofcontours)
+local function readglyph(f,nofcontours) -- read deltas here, saves space
local points = { }
- local endpoints = { }
+ local contours = { }
local instructions = { }
local flags = { }
for i=1,nofcontours do
- endpoints[i] = readshort(f) + 1
+ contours[i] = readshort(f) + 1
end
- local nofpoints = endpoints[nofcontours]
+ local nofpoints = contours[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)
@@ -238,7 +698,7 @@ local function readglyph(f,nofcontours)
while i <= nofpoints do
local flag = readbyte(f)
flags[i] = flag
- if bittest(flag,0x0008) then
+ if bittest(flag,0x08) then
for j=1,readbyte(f) do
i = i + 1
flags[i] = flag
@@ -251,8 +711,8 @@ local function readglyph(f,nofcontours)
local x = 0
for i=1,nofpoints do
local flag = flags[i]
- local short = bittest(flag,0x0002)
- local same = bittest(flag,0x0010)
+ local short = bittest(flag,0x02)
+ local same = bittest(flag,0x10)
if short then
if same then
x = x + readbyte(f)
@@ -264,13 +724,13 @@ local function readglyph(f,nofcontours)
else
x = x + readshort(f)
end
- points[i] = { x, y, bittest(flag,0x0001) }
+ points[i] = { x, 0, bittest(flag,0x01) }
end
local y = 0
for i=1,nofpoints do
local flag = flags[i]
- local short = bittest(flag,0x0004)
- local same = bittest(flag,0x0020)
+ local short = bittest(flag,0x04)
+ local same = bittest(flag,0x20)
if short then
if same then
y = y + readbyte(f)
@@ -284,17 +744,11 @@ local function readglyph(f,nofcontours)
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,
+ type = "glyph",
+ points = points,
+ contours = contours,
+ nofpoints = nofpoints,
}
end
@@ -384,8 +838,8 @@ local function readcomposite(f)
end
end
return {
- type = "composite",
- components = components,
+ type = "composite",
+ components = components,
}
end
@@ -407,15 +861,13 @@ function readers.loca(f,fontdata,specification)
local locations = { }
setposition(f,datatable.offset)
if format == 1 then
- local nofglyphs = datatable.length/4 - 1
- -1
+ local nofglyphs = datatable.length/4 - 2
for i=0,nofglyphs do
locations[i] = offset + readulong(f)
end
fontdata.nofglyphs = nofglyphs
else
- local nofglyphs = datatable.length/2 - 1
- -1
+ local nofglyphs = datatable.length/2 - 2
for i=0,nofglyphs do
locations[i] = offset + readushort(f) * 2
end
@@ -427,54 +879,374 @@ function readers.loca(f,fontdata,specification)
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)
+ local tableoffset = gotodatatable(f,fontdata,"glyf",specification.glyphs)
+ if tableoffset 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 or specification.instance
+ 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
+ if readers.gvar then
+ readers.gvar(f,fontdata,specification,glyphs,shapes)
+ end
+ mergecomposites(glyphs,shapes)
+ if specification.instance then
+ if specification.streams then
+ repackpoints(glyphs,shapes)
+ else
+ contours2outlines_shaped(glyphs,shapes,specification.shapes)
+ end
+ elseif specification.shapes then
+ contours2outlines_normal(glyphs,shapes)
+ end
+ end
+ end
+ end
+end
+
+-- gvar is a bit crazy format and one can really wonder if the bit-jugling obscurity
+-- is still needed in these days .. cff is much nicer with these blends while the ttf
+-- coding variant looks quite horrible
+
+local function readtuplerecord(f,nofaxis)
+ local record = { }
+ for i=1,nofaxis do
+ record[i] = read2dot14(f)
+ end
+ return record
+end
+
+-- (1) the first is a real point the rest deltas
+-- (2) points can be present more than once (multiple deltas then)
+
+local function readpoints(f)
+ local count = readbyte(f)
+ if count == 0 then
+ -- second byte not used, deltas for all point numbers
+ return nil, 0 -- todo
+ else
+ if count < 128 then
+ -- no second byte, use count
+ elseif bittest(count,0x80) then
+ count = band(count,0x7F) * 256 + readbyte(f)
+ else
+ -- bad news
+ end
+ local points = { }
+ local p = 0
+ local n = 1 -- indices
+ while p < count do
+ local control = readbyte(f)
+ local runreader = bittest(control,0x80) and readushort or readbyte
+ local runlength = band(control,0x7F)
+ for i=1,runlength+1 do
+ n = n + runreader(f)
+ p = p + 1
+ points[p] = n
+ end
+ end
+ return points, p
+ end
+end
+
+local function readdeltas(f,nofpoints)
+ local deltas = { }
+ local p = 0
+ local z = 0
+ while nofpoints > 0 do
+ local control = readbyte(f)
+if not control then
+ break
+end
+ local allzero = bittest(control,0x80)
+ local runlength = band(control,0x3F) + 1
+ if allzero then
+ z = z + runlength
+ else
+ local runreader = bittest(control,0x40) and readshort or readinteger
+ if z > 0 then
+ for i=1,z do
+ p = p + 1
+ deltas[p] = 0
+ end
+ z = 0
+ end
+ for i=1,runlength do
+ p = p + 1
+ deltas[p] = runreader(f)
+ end
+ end
+ nofpoints = nofpoints - runlength
+ end
+ -- saves space
+-- if z > 0 then
+-- for i=1,z do
+-- p = p + 1
+-- deltas[p] = 0
+-- end
+-- end
+ if p > 0 then
+ -- forget about trailing zeros
+ return deltas
+ else
+ -- forget about all zeros
+ end
+end
+
+local function readdeltas(f,nofpoints)
+ local deltas = { }
+ local p = 0
+ while nofpoints > 0 do
+ local control = readbyte(f)
+ if control then
+ local allzero = bittest(control,0x80)
+ local runlength = band(control,0x3F) + 1
+ if allzero then
+ for i=1,runlength do
+ p = p + 1
+ deltas[p] = 0
+ end
+ else
+ local runreader = bittest(control,0x40) and readshort or readinteger
+ for i=1,runlength do
+ p = p + 1
+ deltas[p] = runreader(f)
+ end
+ end
+ nofpoints = nofpoints - runlength
+ else
+ -- it happens
+ break
+ end
+ end
+ -- saves space
+ if p > 0 then
+ return deltas
+ else
+ -- forget about all zeros
+ end
+end
+
+function readers.gvar(f,fontdata,specification,glyphdata,shapedata)
+ -- this is one of the messiest tables
+ local instance = specification.instance
+ if not instance then
+ return
+ end
+ local factors = specification.factors
+ if not factors then
+ return
+ end
+ local tableoffset = gotodatatable(f,fontdata,"gvar",specification.variable or specification.shapes)
+ if tableoffset then
+ local version = readulong(f) -- 1.0
+ local nofaxis = readushort(f)
+ local noftuples = readushort(f)
+ local tupleoffset = tableoffset + readulong(f)
+ local nofglyphs = readushort(f)
+ local flags = readushort(f)
+ local dataoffset = tableoffset + readulong(f)
+ local data = { }
+ local tuples = { }
+ local glyphdata = fontdata.glyphs
+ local dowidth = not fontdata.variabledata.hvarwidths
+ -- there is one more offset (so that one can calculate the size i suppose)
+ -- so we could test for overflows but we simply assume sane font files
+ if bittest(flags,0x0001) then
+ for i=1,nofglyphs+1 do
+ data[i] = dataoffset + readulong(f)
+ end
+ else
+ for i=1,nofglyphs+1 do
+ data[i] = dataoffset + 2*readushort(f)
+ end
+ end
+ --
+ if noftuples > 0 then
+ setposition(f,tupleoffset)
+ for i=1,noftuples do
+ tuples[i] = readtuplerecord(f,nofaxis)
+ end
+ end
+ local nextoffset = false
+ local startoffset = data[1]
+ for i=1,nofglyphs do -- hm one more cf spec
+ nextoffset = data[i+1]
+ local glyph = glyphdata[i-1]
+ local name = trace_deltas and glyph.name
+ if startoffset == nextoffset then
+ if name then
+ report("no deltas for glyph %a",name)
+ end
+ else
+ local shape = shapedata[i-1] -- todo 0
+ if not shape then
+ if name then
+ report("no shape for glyph %a",name)
+ end
+ else
+ lastoffset = startoffset
+ setposition(f,startoffset)
+ local flags = readushort(f)
+ local count = band(flags,0x0FFF)
+ local offset = startoffset + readushort(f) -- to serialized
+ local deltas = { }
+ local allpoints = (shape.nofpoints or 0) -- + 1
+ local shared = false
+ local nofshared = 0
+ if bittest(flags,0x8000) then -- has shared points
+ -- go to the packed stream (get them once)
+ local current = getposition(f)
+ setposition(f,offset)
+ shared, nofshared = readpoints(f)
+ offset = getposition(f)
+ setposition(f,current)
+ -- and back to the table
+ end
+ for j=1,count do
+ local size = readushort(f) -- check
+ local flags = readushort(f)
+ local index = band(flags,0x0FFF)
+ local haspeak = bittest(flags,0x8000)
+ local intermediate = bittest(flags,0x4000)
+ local private = bittest(flags,0x2000)
+ local peak = nil
+ local start = nil
+ local stop = nil
+ local xvalues = nil
+ local yvalues = nil
+ local points = shared -- we default to shared
+ local nofpoints = nofshared -- we default to shared
+ -- local advance = 4
+ if haspeak then
+ peak = readtuplerecord(f,nofaxis)
+ -- advance = advance + 2*nofaxis
else
- shapes[index] = readcomposite(f,nofcontours)
+ if index+1 > #tuples then
+ report("error, bad tuple index",index)
+ end
+ peak = tuples[index+1] -- hm, needs checking, only peak?
end
- else
- if loadshapes then
- shapes[index] = { }
+ if intermediate then
+ start = readtuplerecord(f,nofaxis)
+ stop = readtuplerecord(f,nofaxis)
+ -- advance = advance + 4*nofaxis
+ end
+ -- get the deltas
+ if size > 0 then
+ local current = getposition(f)
+ -- goto the packed stream
+ setposition(f,offset)
+ if private then
+ points, nofpoints = readpoints(f)
+ end -- else
+ if nofpoints == 0 then
+ nofpoints = allpoints + 4
+ end
+ if nofpoints > 0 then
+ -- a nice test is to do only one
+ xvalues = readdeltas(f,nofpoints)
+ yvalues = readdeltas(f,nofpoints)
+ end
+ -- resync offset
+ offset = offset + size
+ -- back to the table
+ setposition(f,current)
+ end
+ if not xvalues and not yvalues then
+ points = nil
+ end
+ local s = 1
+ for i=1,nofaxis do
+ local f = factors[i]
+ local peak = peak and peak [i] or 0
+ -- local start = start and start[i] or 0
+ -- local stop = stop and stop [i] or 0
+ local start = start and start[i] or (peak < 0 and peak or 0)
+ local stop = stop and stop [i] or (peak > 0 and peak or 0)
+ -- do we really need these tests ... can't we assume sane values
+ if start > peak or peak > stop then
+ -- * 1
+ elseif start < 0 and stop > 0 and peak ~= 0 then
+ -- * 1
+ elseif peak == 0 then
+ -- * 1
+ elseif f < start or f > stop then
+ -- * 0
+ s = 0
+ break
+ elseif f < peak then
+-- s = - s * (f - start) / (peak - start)
+ s = s * (f - start) / (peak - start)
+ elseif f > peak then
+ s = s * (stop - f) / (stop - peak)
+ else
+ -- * 1
+ end
+ end
+ if s == 0 then
+ if name then
+ report("no deltas applied for glyph %a",name)
+ end
+ else
+ deltas[#deltas+1] = {
+ factor = s,
+ points = points,
+ xvalues = xvalues,
+ yvalues = yvalues,
+ }
end
- glyphs[index].boundingbox = nothing
end
- end
- if loadshapes then
- mergecomposites(glyphs,shapes)
- contours2outlines(glyphs,shapes)
+ if shape.type == "glyph" then
+-- if glyph.name == "u1f31d" then
+-- if glyph.unicode == 127773 then
+-- inspect(deltas)
+-- end
+ applyaxis(glyph,shape,deltas,dowidth)
+ else
+ -- todo: args_are_xy_values mess .. i have to be really bored
+ -- and motivated to deal with it
+ shape.deltas = deltas
+ end
end
end
+ startoffset = nextoffset
end
end
end
diff --git a/tex/context/base/mkiv/font-vf.lua b/tex/context/base/mkiv/font-vf.lua
index 7037c6c8b..401e84956 100644
--- a/tex/context/base/mkiv/font-vf.lua
+++ b/tex/context/base/mkiv/font-vf.lua
@@ -22,7 +22,7 @@ local fastcopy = table.fastcopy
local fonts = fonts
local constructors = fonts.constructors
-local vf = constructors.newhandler("vf")
+local vf = constructors.handlers.vf
vf.version = 1.000 -- same as tfm
--[[ldx--
diff --git a/tex/context/base/mkiv/font-web.lua b/tex/context/base/mkiv/font-web.lua
new file mode 100644
index 000000000..452a8f59b
--- /dev/null
+++ b/tex/context/base/mkiv/font-web.lua
@@ -0,0 +1,202 @@
+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"
+}
+
+-- Okay, compressing fonts this way is rather simple but one might wonder what the gain
+-- is in this time of 4K youtube movies and most of the web pages wasting space and
+-- bandwidth on advertisements. For version 2 we can use "woff2_decompress" from google
+-- and in a tex environment one can as well store the ttf/otf files in the tex tree. So,
+-- eventually we might even remove this code when version 1 is obsolete.
+
+local ioopen = io.open
+local replacesuffix = file.replacesuffix
+
+local readers = fonts and fonts.handlers.otf.readers
+
+local streamreader = readers and readers.streamreader or utilities.files
+local streamwriter = readers and readers.streamwriter or utilities.files
+
+local readstring = streamreader.readstring
+local readcardinal2 = streamreader.readcardinal2
+local readcardinal4 = streamreader.readcardinal4
+
+local writestring = streamwriter.writestring
+local writecardinal4 = streamwriter.writecardinal4
+local writecardinal2 = streamwriter.writecardinal2
+local writebyte = streamwriter.writebyte
+
+local getsize = streamreader.getsize
+local setposition = streamreader.setposition
+local getposition = streamreader.getposition
+
+local decompress = zlib.decompress
+
+local infotags = {
+ ["os/2"] = true,
+ ["head"] = true,
+ ["maxp"] = true,
+ ["hhea"] = true,
+ ["hmtx"] = true,
+ ["post"] = true,
+ ["cmap"] = true,
+}
+
+local report = logs.reporter("fonts","woff")
+
+local runner = sandbox.registerrunner {
+ name = "woff2otf",
+ method = "execute",
+ program = "woff2_decompress",
+ template = "%inputfile% %outputfile%",
+ reporter = report,
+ checkers = {
+ inputfile = "readable",
+ outputfile = "writable",
+ }
+}
+
+local function woff2otf(inpname,outname,infoonly)
+
+ local outname = outname or replacesuffix(inpname,"otf")
+ local inp = ioopen(inpname,"rb")
+
+ if not inp then
+ report("invalid input file %a",inpname)
+ return
+ end
+
+ local signature = readstring(inp,4)
+
+ if not (signature == "wOFF" or signature == "wOF2") then
+ inp:close()
+ report("invalid signature in %a",inpname)
+ return
+ end
+
+ local flavor = readstring(inp,4)
+
+ if not (flavor == "OTTO" or flavor == "true" or flavor == "\0\1\0\0") then
+ inp:close()
+ report("unsupported flavor %a in %a",flavor,inpname)
+ return
+ end
+
+ if signature == "wOF2" then
+ inp:close()
+ if false then
+ if runner then
+ runner {
+ inputfile = inpname,
+ outputfile = outname,
+ }
+ end
+ return outname, flavor
+ else
+ report("skipping version 2 file %a",inpname)
+ return
+ end
+ end
+
+ local out = ioopen(outname,"wb")
+
+ if not out then
+ inp:close()
+ report("invalid output file %a",outname)
+ return
+ end
+
+ local header = {
+ signature = signature,
+ flavor = flavor,
+ length = readcardinal4(inp),
+ numtables = readcardinal2(inp),
+ reserved = readcardinal2(inp),
+ totalsfntsize = readcardinal4(inp),
+ majorversion = readcardinal2(inp),
+ minorversion = readcardinal2(inp),
+ metaoffset = readcardinal4(inp),
+ metalength = readcardinal4(inp),
+ metaoriglength = readcardinal4(inp),
+ privoffset = readcardinal4(inp),
+ privlength = readcardinal4(inp),
+ }
+
+ local entries = { }
+
+ for i=1,header.numtables do
+ local entry = {
+ tag = readstring (inp,4),
+ offset = readcardinal4(inp),
+ compressed = readcardinal4(inp),
+ size = readcardinal4(inp),
+ checksum = readcardinal4(inp),
+ }
+ if not infoonly or infotags[lower(entry.tag)] then
+ entries[#entries+1] = entry
+ end
+ end
+
+ local nofentries = #entries
+ local entryselector = 0 -- we don't need these
+ local searchrange = 0 -- we don't need these
+ local rangeshift = 0 -- we don't need these
+
+ writestring (out,flavor)
+ writecardinal2(out,nofentries)
+ writecardinal2(out,entryselector)
+ writecardinal2(out,searchrange)
+ writecardinal2(out,rangeshift)
+
+ local offset = 12 + nofentries * 16
+ local offsets = { }
+
+ for i=1,nofentries do
+ local entry = entries[i]
+ local size = entry.size
+ writestring(out,entry.tag)
+ writecardinal4(out,entry.checksum)
+ writecardinal4(out,offset) -- the new offset
+ writecardinal4(out,size)
+ offsets[i] = offset
+ offset = offset + size
+ local p = 4 - offset % 4
+ if p > 0 then
+ offset = offset + p
+ end
+ end
+
+ for i=1,nofentries do
+ local entry = entries[i]
+ local offset = offsets[i]
+ local size = entry.size
+ setposition(inp,entry.offset+1)
+ local data = readstring(inp,entry.compressed)
+ if #data ~= size then
+ data = decompress(data)
+ end
+ setposition(out,offset+1)
+ writestring(out,data)
+ local p = 4 - offset + size % 4
+ if p > 0 then
+ for i=1,p do
+ writebyte(out,0)
+ end
+ end
+ end
+
+ inp:close()
+ out:close()
+
+ return outname, flavor
+
+end
+
+if readers then
+ readers.woff2otf = woff2otf
+else
+ return woff2otf
+end
diff --git a/tex/context/base/mkiv/good-ctx.lua b/tex/context/base/mkiv/good-ctx.lua
new file mode 100644
index 000000000..00e4ed78d
--- /dev/null
+++ b/tex/context/base/mkiv/good-ctx.lua
@@ -0,0 +1,300 @@
+if not modules then modules = { } end modules ['good-ctx'] = {
+ version = 1.000,
+ 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"
+}
+
+-- depends on ctx
+
+local type, next, tonumber = type, next, tonumber
+local find, splitup = string.find, string.splitup
+
+local fonts = fonts
+local nodes = nodes
+local attributes = attributes
+
+----- trace_goodies = false trackers.register("fonts.goodies", function(v) trace_goodies = v end)
+----- report_goodies = logs.reporter("fonts","goodies")
+
+local allocate = utilities.storage.allocate
+local setmetatableindex = table.setmetatableindex
+
+local implement = interfaces.implement
+
+local registerotffeature = fonts.handlers.otf.features.register
+----- registerafmfeature = fonts.handlers.afm.features.register
+----- registertfmfeature = fonts.handlers.tfm.features.register
+
+local fontgoodies = fonts.goodies or { }
+
+local glyph_code = nodes.nodecodes.glyph
+
+local nuts = nodes.nuts
+local tonut = nuts.tonut
+local getfont = nuts.getfont
+local getchar = nuts.getchar
+local getattr = nuts.getattr
+local traverse_id = nuts.traverse_id
+
+-- colorschemes
+
+local colorschemes = fontgoodies.colorschemes or allocate { }
+fontgoodies.colorschemes = colorschemes
+colorschemes.data = colorschemes.data or { }
+
+local privatestoo = true
+
+local function setcolorscheme(tfmdata,scheme)
+ if type(scheme) == "string" then
+ local goodies = tfmdata.goodies
+ -- todo : check for already defined in shared
+ if goodies then
+ local what
+ for i=1,#goodies do
+ -- last one counts
+ local g = goodies[i]
+ what = g.colorschemes and g.colorschemes[scheme] or what
+ end
+ if type(what) == "table" then
+ -- this is font bound but we can share them if needed
+ -- just as we could hash the conversions (per font)
+ local hash = tfmdata.resources.unicodes
+ local reverse = { }
+ local characters = tfmdata.characters
+ for i=1,#what do
+ local w = what[i]
+ for j=1,#w do
+ local name = w[j]
+ local kind = type(name)
+ if name == "*" then
+ -- inefficient but only used for tracing anyway
+ for _, unicode in next, hash do
+ reverse[unicode] = i
+ end
+ elseif kind == "number" then
+ reverse[name] = i
+ elseif kind ~= "string" then
+ -- ignore invalid entries
+ elseif find(name,":",1,true) then
+ local start, stop = splitup(name,":")
+ start = tonumber(start)
+ stop = tonumber(stop)
+ if start and stop then
+ -- limited usage: we only deal with non reassigned
+ -- maybe some day I'll also support the ones with a
+ -- tounicode in this range
+ for unicode=start,stop do
+ if characters[unicode] then
+ reverse[unicode] = i
+ end
+ end
+ end
+ else
+ local unicode = hash[name]
+ if unicode then
+ reverse[unicode] = i
+ end
+ end
+ end
+ end
+ if privatestoo then
+ local private = fonts.constructors.privateoffset
+ local descriptions = tfmdata.descriptions
+ for unicode, data in next, characters do
+ if unicode >= private then
+ if not reverse[unicode] then
+ local d = descriptions[unicode]
+ if d then
+ local u = d.unicode
+ if u then
+ local r = reverse[u] -- also catches tables
+ if r then
+ reverse[unicode] = r
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ tfmdata.properties.colorscheme = reverse
+ return
+ end
+ end
+ end
+ tfmdata.properties.colorscheme = false
+end
+
+local fontproperties = fonts.hashes.properties
+
+local a_colorscheme = attributes.private('colorscheme')
+local setnodecolor = nodes.tracers.colors.set
+
+-- function colorschemes.coloring(head)
+-- local lastfont, lastscheme
+-- local done = false
+-- for n in traverse_id(glyph_code,tonut(head)) do
+-- local a = getattr(n,a_colorscheme)
+-- if a then
+-- local f = getfont(n)
+-- if f ~= lastfont then
+-- lastscheme = fontproperties[f].colorscheme
+-- lastfont = f
+-- end
+-- if lastscheme then
+-- local sc = lastscheme[getchar(n)]
+-- if sc then
+-- done = true
+-- setnodecolor(n,"colorscheme:"..a..":"..sc) -- slow
+-- end
+-- end
+-- end
+-- end
+-- return head, done
+-- end
+
+-- seldom used, mostly in manuals, so non critical .. anyhow, somewhat faster:
+
+-- function colorschemes.coloring(head)
+-- local lastfont = nil
+-- local lastattr = nil
+-- local lastscheme = nil
+-- local lastprefix = nil
+-- local done = nil
+-- for n in traverse_id(glyph_code,tonut(head)) do
+-- local a = getattr(n,a_colorscheme)
+-- if a then
+-- if a ~= lastattr then
+-- lastattr = a
+-- lastprefix = "colorscheme:" .. a .. ":"
+-- end
+-- local f = getfont(n)
+-- if f ~= lastfont then
+-- lastfont = f
+-- lastscheme = fontproperties[f].colorscheme
+-- end
+-- if lastscheme then
+-- local sc = lastscheme[getchar(n)]
+-- if sc then
+-- setnodecolor(n,lastprefix .. sc) -- slow
+-- done = true
+-- end
+-- end
+-- end
+-- end
+-- return head, done
+-- end
+
+-- ok, in case we have hundreds of pages colored:
+
+local cache = { } -- this could be a weak table
+
+setmetatableindex(cache,function(t,a)
+ local v = { }
+ setmetatableindex(v,function(t,c)
+ local v = "colorscheme:" .. a .. ":" .. c
+ t[c] = v
+ return v
+ end)
+ t[a]= v
+ return v
+end)
+
+function colorschemes.coloring(head)
+ local lastfont = nil
+ local lastattr = nil
+ local lastcache = nil
+ local lastscheme = nil
+ local done = nil
+ for n in traverse_id(glyph_code,tonut(head)) do
+ local a = getattr(n,a_colorscheme)
+ if a then
+ local f = getfont(n)
+ if f ~= lastfont then
+ lastfont = f
+ lastscheme = fontproperties[f].colorscheme
+ end
+ if a ~= lastattr then
+ lastattr = a
+ lastcache = cache[a]
+ end
+ if lastscheme then
+ local sc = lastscheme[getchar(n)]
+ if sc then
+ setnodecolor(n,lastcache[sc]) -- we could inline this one
+ done = true
+ end
+ end
+ end
+ end
+ return head, done
+end
+
+function colorschemes.enable()
+ nodes.tasks.appendaction("processors","fonts","fonts.goodies.colorschemes.coloring")
+ function colorschemes.enable() end
+end
+
+registerotffeature {
+ name = "colorscheme",
+ description = "goodie color scheme",
+ initializers = {
+ base = setcolorscheme,
+ node = setcolorscheme,
+ }
+}
+
+-- kern hackery:
+--
+-- yes : use goodies table
+-- auto : assume features to be set (often ccmp only)
+
+local function setkeepligatures(tfmdata)
+ if not tfmdata.properties.keptligatures then
+ local goodies = tfmdata.goodies
+ if goodies then
+ for i=1,#goodies do
+ local g = goodies[i]
+ local letterspacing = g.letterspacing
+ if letterspacing then
+ local keptligatures = letterspacing.keptligatures
+ if keptligatures then
+ local unicodes = tfmdata.resources.unicodes -- so we accept names
+ local hash = { }
+ for k, v in next, keptligatures do
+ local u = unicodes[k]
+ if u then
+ hash[u] = true
+ else
+ -- error: unknown name
+ end
+ end
+ tfmdata.properties.keptligatures = hash
+ end
+ end
+ end
+ end
+ end
+end
+
+registerotffeature {
+ name = "keepligatures",
+ description = "keep ligatures in letterspacing",
+ initializers = {
+ base = setkeepligatures,
+ node = setkeepligatures,
+ }
+}
+
+if implement then
+
+ implement {
+ name = "enablefontcolorschemes",
+ onlyonce = true,
+ actions = colorschemes.enable,
+ overload = true, -- for now, permits new font loader
+ }
+
+end
diff --git a/tex/context/base/mkiv/good-gen.lua b/tex/context/base/mkiv/good-gen.lua
new file mode 100644
index 000000000..cee6b3172
--- /dev/null
+++ b/tex/context/base/mkiv/good-gen.lua
@@ -0,0 +1,208 @@
+if not modules then modules = { } end modules ['good-gen'] = {
+ version = 1.000,
+ 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"
+}
+
+-- depends on ctx
+
+local type, next = type, next
+local lower = string.lower
+
+local fonts = fonts
+
+----- trace_goodies = false trackers.register("fonts.goodies", function(v) trace_goodies = v end)
+----- report_goodies = logs.reporter("fonts","goodies")
+
+local allocate = utilities.storage.allocate
+local texsp = tex.sp
+local fontgoodies = fonts.goodies or { }
+local findfile = resolvers.findfile
+
+
+local typefaces = fonts.typefaces or { }
+fonts.typefaces = typefaces
+
+-- the following takes care of explicit file specifications
+--
+-- files = {
+-- name = "antykwapoltawskiego",
+-- list = {
+-- ["AntPoltLtCond-Regular.otf"] = {
+-- -- name = "antykwapoltawskiego",
+-- style = "regular",
+-- weight = "light",
+-- width = "condensed",
+-- },
+-- },
+-- }
+
+-- files
+
+local function initialize(goodies)
+ local files = goodies.files
+ if files then
+ fonts.names.register(files)
+ end
+end
+
+fontgoodies.register("files", initialize)
+
+-- some day we will have a define command and then we can also do some
+-- proper tracing
+--
+-- fonts.typefaces["antykwapoltawskiego-condensed"] = {
+-- shortcut = "rm",
+-- shape = "serif",
+-- fontname = "antykwapoltawskiego",
+-- normalweight = "light",
+-- boldweight = "medium",
+-- width = "condensed",
+-- size = "default",
+-- features = "default",
+-- }
+
+local function initialize(goodies)
+ local typefaces = goodies.typefaces
+ if typefaces then
+ local ft = fonts.typefaces
+ for k, v in next, typefaces do
+ ft[k] = v
+ end
+ end
+end
+
+fontgoodies.register("typefaces", initialize)
+
+local compositions = { }
+
+function fontgoodies.getcompositions(tfmdata)
+ return compositions[file.nameonly(tfmdata.properties.filename or "")]
+end
+
+local function initialize(goodies)
+ local gc = goodies.compositions
+ if gc then
+ for k, v in next, gc do
+ compositions[k] = v
+ end
+ end
+end
+
+fontgoodies.register("compositions", initialize)
+
+-- extra treatments (on top of defaults): \loadfontgoodies[mytreatments]
+
+local treatmentdata = fonts.treatments.data
+
+local function initialize(goodies)
+ local treatments = goodies.treatments
+ if treatments then
+ for name, data in next, treatments do
+ treatmentdata[name] = data -- always wins
+ end
+ end
+end
+
+fontgoodies.register("treatments", initialize)
+
+local filenames = fontgoodies.filenames or allocate()
+fontgoodies.filenames = filenames
+
+local filedata = filenames.data or allocate()
+filenames.data = filedata
+
+local function initialize(goodies) -- design sizes are registered global
+ local fn = goodies.filenames
+ if fn then
+ for usedname, alternativenames in next, fn do
+ filedata[usedname] = alternativenames
+ end
+ end
+end
+
+fontgoodies.register("filenames", initialize)
+
+function fontgoodies.filenames.resolve(name)
+ local fd = filedata[name]
+ if fd and findfile(name) == "" then
+ for i=1,#fd do
+ local fn = fd[i]
+ if findfile(fn) ~= "" then
+ return fn
+ end
+ end
+ else
+ -- no lookup, just use the regular mechanism
+ end
+ return name
+end
+
+local designsizes = fontgoodies.designsizes or allocate()
+fontgoodies.designsizes = designsizes
+
+local designdata = designsizes.data or allocate()
+designsizes.data = designdata
+
+local function initialize(goodies) -- design sizes are registered global
+ local gd = goodies.designsizes
+ if gd then
+ for name, data in next, gd do
+ local ranges = { }
+ for size, file in next, data do
+ if size ~= "default" then
+ ranges[#ranges+1] = { texsp(size), file } -- also lower(file)
+ end
+ end
+ table.sort(ranges,function(a,b) return a[1] < b[1] end)
+ designdata[lower(name)] = { -- overloads, doesn't merge!
+ default = data.default,
+ ranges = ranges,
+ }
+ end
+ end
+end
+
+fontgoodies.register("designsizes", initialize)
+
+function fontgoodies.designsizes.register(name,size,specification)
+ local d = designdata[name]
+ if not d then
+ d = {
+ ranges = { },
+ default = nil, -- so we have no default set
+ }
+ designdata[name] = d
+ end
+ if size == "default" then
+ d.default = specification
+ else
+ if type(size) == "string" then
+ size = texsp(size) -- hm
+ end
+ local ranges = d.ranges
+ ranges[#ranges+1] = { size, specification }
+ end
+end
+
+function fontgoodies.designsizes.filename(name,spec,size) -- returns nil of no match
+ 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
+ end
+ return data.default or (ranges and ranges[#ranges][2])
+ end
+ end
+end
diff --git a/tex/context/base/mkiv/good-ini.lua b/tex/context/base/mkiv/good-ini.lua
new file mode 100644
index 000000000..22ca12d28
--- /dev/null
+++ b/tex/context/base/mkiv/good-ini.lua
@@ -0,0 +1,397 @@
+if not modules then modules = { } end modules ['good-ini'] = {
+ version = 1.000,
+ 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"
+}
+
+-- depends on ctx
+
+local type, next = type, next
+local gmatch = string.gmatch
+local sortedhash, insert = table.sortedhash, table.insert
+
+local fonts = fonts
+
+local trace_goodies = false trackers.register("fonts.goodies", function(v) trace_goodies = v end)
+local report_goodies = logs.reporter("fonts","goodies")
+
+local allocate = utilities.storage.allocate
+local implement = interfaces.implement
+local findfile = resolvers.findfile
+local formatters = string.formatters
+
+local otf = fonts.handlers.otf
+local afm = fonts.handlers.afm
+local tfm = fonts.handlers.tfm
+
+local registerotffeature = otf.features.register
+local registerafmfeature = afm.features.register
+local registertfmfeature = tfm.features.register
+
+local addotffeature = otf.enhancers.addfeature
+
+local fontgoodies = fonts.goodies or { }
+fonts.goodies = fontgoodies
+
+local data = fontgoodies.data or { }
+fontgoodies.data = data -- no allocate as we want to see what is there
+
+local list = fontgoodies.list or { }
+fontgoodies.list = list -- no allocate as we want to see what is there
+
+fontgoodies.suffixes = { "lfg", "lua" } -- lfg is context specific and should not be used elsewhere
+
+local contextsetups = fonts.specifiers.contextsetups
+
+function fontgoodies.report(what,trace,goodies)
+ if trace_goodies or trace then
+ local whatever = goodies[what]
+ if whatever then
+ report_goodies("goodie %a found in %a",what,goodies.name)
+ end
+ end
+end
+
+local function locate(filename)
+ local suffixes = fontgoodies.suffixes
+ for i=1,#suffixes do
+ local suffix = suffixes[i]
+ local fullname = findfile(file.addsuffix(filename,suffix))
+ if fullname and fullname ~= "" then
+ return fullname
+ end
+ end
+end
+
+local function loadgoodies(filename) -- maybe a merge is better
+ local goodies = data[filename] -- we assume no suffix is given
+ if goodies ~= nil then
+ -- found or tagged unfound
+ elseif type(filename) == "string" then
+ local fullname = locate(filename)
+ if not fullname or fullname == "" then
+ report_goodies("goodie file %a is not found (suffixes: % t)",filename,fontgoodies.suffixes)
+ data[filename] = false -- signal for not found
+ else
+ goodies = dofile(fullname) or false
+ if not goodies then
+ report_goodies("goodie file %a is invalid",fullname)
+ return nil
+ elseif trace_goodies then
+ report_goodies("goodie file %a is loaded",fullname)
+ end
+ goodies.name = goodies.name or "no name"
+ for i=1,#list do
+ local g = list[i]
+ if trace_goodies then
+ report_goodies("handling goodie %a",g[1])
+ end
+ g[2](goodies)
+ end
+ goodies.initialized = true
+ data[filename] = goodies
+ end
+ end
+ return goodies
+end
+
+function fontgoodies.register(name,fnc,prepend) -- will be a proper sequencer
+ for i=1,#list do
+ local g = list[i]
+ if g[1] == name then
+ g[2] = fnc --overload
+ return
+ end
+ end
+ local g = { name, fnc }
+ if prepend then
+ insert(list,g,prepend == true and 1 or prepend)
+ else
+ insert(list,g)
+ end
+end
+
+fontgoodies.load = loadgoodies
+
+if implement then
+
+ implement {
+ name = "loadfontgoodies",
+ actions = loadgoodies,
+ arguments = "string",
+ overload = true, -- for now, permits new font loader
+ }
+
+end
+
+-- register goodies file
+
+local function setgoodies(tfmdata,value)
+ local goodies = tfmdata.goodies
+ if not goodies then -- actually an error
+ goodies = { }
+ tfmdata.goodies = goodies
+ end
+ for filename in gmatch(value,"[^, ]+") do
+ -- we need to check for duplicates
+ local ok = loadgoodies(filename)
+ if ok then
+ if trace_goodies then
+ report_goodies("assigning goodie %a",filename)
+ end
+ goodies[#goodies+1] = ok
+ end
+ end
+end
+
+-- featuresets
+
+local function flattenedfeatures(t,tt)
+ -- first set value dominates
+ local tt = tt or { }
+ for i=1,#t do
+ local ti = t[i]
+ local ty = type(ti)
+ if ty == "table" then
+ flattenedfeatures(ti,tt)
+ elseif ty == "string" then
+ local set = contextsetups[ti]
+ if set then
+ for k, v in next, set do
+ if k ~= "number" then
+ tt[k] = v or nil
+ end
+ end
+ else
+ -- bad
+ end
+ elseif tt[ti] == nil then
+ tt[ti] = true
+ end
+ end
+ for k, v in next, t do
+ if type(k) ~= "number" then -- not tonumber(k)
+ if type(v) == "table" then
+ flattenedfeatures(v,tt)
+ elseif tt[k] == nil then
+ tt[k] = v
+ end
+ end
+ end
+ return tt
+end
+
+-- fonts.features.flattened = flattenedfeatures
+
+local function prepare_features(goodies,name,set)
+ if set then
+ local ff = flattenedfeatures(set)
+ local fullname = goodies.name .. "::" .. name
+ local n, s = fonts.specifiers.presetcontext(fullname,"",ff)
+ goodies.featuresets[name] = s -- set
+ if trace_goodies then
+ report_goodies("feature set %a gets number %a and name %a",name,n,fullname)
+ end
+ return n
+ end
+end
+
+fontgoodies.prepare_features = prepare_features
+
+local function initialize(goodies)
+ local featuresets = goodies.featuresets
+ if featuresets then
+ if trace_goodies then
+ report_goodies("checking featuresets in %a",goodies.name)
+ end
+ for name, set in next, featuresets do
+ prepare_features(goodies,name,set)
+ end
+ end
+end
+
+fontgoodies.register("featureset",initialize)
+
+local function setfeatureset(tfmdata,set,features)
+ local goodies = tfmdata.goodies -- shared ?
+ if goodies then
+ local properties = tfmdata.properties
+ local what
+ for i=1,#goodies do
+ -- last one wins
+ local g = goodies[i]
+ what = g.featuresets and g.featuresets[set] or what
+ end
+ if what then
+ for feature, value in next, what do
+ if features[feature] == nil then
+ features[feature] = value
+ end
+ end
+ properties.mode = what.mode or properties.mode
+ end
+ end
+end
+
+-- postprocessors (we could hash processor and share code)
+
+function fontgoodies.registerpostprocessor(tfmdata,f,prepend)
+ local postprocessors = tfmdata.postprocessors
+ if not postprocessors then
+ tfmdata.postprocessors = { f }
+ elseif prepend then
+ insert(postprocessors,f,prepend == true and 1 or prepend)
+ else
+ insert(postprocessors,f)
+ end
+end
+
+local function setpostprocessor(tfmdata,processor)
+ local goodies = tfmdata.goodies
+ if goodies and type(processor) == "string" then
+ local found = { }
+ local asked = utilities.parsers.settings_to_array(processor)
+ for i=1,#goodies do
+ local g = goodies[i]
+ local p = g.postprocessors
+ if p then
+ for i=1,#asked do
+ local a = asked[i]
+ local f = p[a]
+ if type(f) == "function" then
+ found[a] = f
+ end
+ end
+ end
+ end
+ local postprocessors = tfmdata.postprocessors or { }
+ for i=1,#asked do
+ local a = asked[i]
+ local f = found[a]
+ if f then
+ postprocessors[#postprocessors+1] = f
+ end
+ end
+ if #postprocessors > 0 then
+ tfmdata.postprocessors = postprocessors
+ end
+ end
+end
+
+local function setextrafeatures(tfmdata)
+ local goodies = tfmdata.goodies
+ if goodies then
+ for i=1,#goodies do
+ local g = goodies[i]
+ local f = g.features
+ if f then
+ local rawdata = tfmdata.shared.rawdata
+ local done = { }
+ -- indexed
+ for i=1,#f do
+ local specification = f[i]
+ local feature = specification.name
+ if feature then
+ addotffeature(rawdata,feature,specification)
+ registerotffeature {
+ name = feature,
+ description = formatters["extra: %s"](feature)
+ }
+ end
+ done[i] = true
+ end
+ -- hashed
+ for feature, specification in sortedhash(f) do
+ if not done[feature] then
+ feature = specification.name or feature
+ specification.name = feature
+ addotffeature(rawdata,feature,specification)
+ registerotffeature {
+ name = feature,
+ description = formatters["extra: %s"](feature)
+ }
+ end
+ end
+ end
+ end
+ 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
+
+local goodies_specification = {
+ name = "goodies",
+ description = "goodies on top of built in features",
+ initializers = {
+ position = 1,
+ base = setgoodies,
+ node = setgoodies,
+ }
+}
+
+registerotffeature(goodies_specification)
+registerafmfeature(goodies_specification)
+registertfmfeature(goodies_specification)
+
+-- maybe more of the following could be for type one too
+
+registerotffeature {
+ name = "extrafeatures",
+ description = "extra features",
+ default = true,
+ initializers = {
+ position = 2,
+ base = setextrafeatures,
+ node = setextrafeatures,
+ }
+}
+
+registerotffeature {
+ name = "extensions",
+ description = "extensions to features",
+ default = true,
+ initializers = {
+ position = 2,
+ base = setextensions,
+ node = setextensions,
+ }
+}
+
+registerotffeature {
+ name = "featureset",
+ description = "goodie feature set",
+ initializers = {
+ position = 3,
+ base = setfeatureset,
+ node = setfeatureset,
+ }
+}
+
+registerotffeature {
+ name = "postprocessor",
+ description = "goodie postprocessor",
+ initializers = {
+ base = setpostprocessor,
+ node = setpostprocessor,
+ }
+}
diff --git a/tex/context/base/mkiv/good-mth.lua b/tex/context/base/mkiv/good-mth.lua
new file mode 100644
index 000000000..661189350
--- /dev/null
+++ b/tex/context/base/mkiv/good-mth.lua
@@ -0,0 +1,312 @@
+if not modules then modules = { } end modules ['good-mth'] = {
+ version = 1.000,
+ 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"
+}
+
+local type, next = type, next
+local ceil = math.ceil
+
+local fonts = fonts
+
+local trace_goodies = false trackers.register("fonts.goodies", function(v) trace_goodies = v end)
+local report_goodies = logs.reporter("fonts","goodies")
+
+local registerotffeature = fonts.handlers.otf.features.register
+local fontgoodies = fonts.goodies or { }
+
+local fontcharacters = fonts.hashes.characters
+
+local nuts = nodes.nuts
+
+local setlink = nuts.setlink
+
+local nodepool = nuts.pool
+
+local new_kern = nodepool.kern
+local new_glyph = nodepool.glyph
+local new_hlist = nodepool.hlist
+local new_vlist = nodepool.vlist
+
+local insert_node_after = nuts.insert_after
+
+-- experiment, we have to load the definitions immediately as they precede
+-- the definition so they need to be initialized in the typescript
+
+local function finalize(tfmdata,feature,value)
+ mathematics.overloaddimensions(tfmdata,tfmdata,value)
+end
+
+registerotffeature {
+ name = "mathdimensions",
+ description = "manipulate math dimensions",
+ -- default = true,
+ manipulators = {
+ base = finalize,
+ node = finalize,
+ }
+}
+
+local function initialize(goodies)
+ local mathgoodies = goodies.mathematics
+ if mathgoodies then
+ local virtuals = mathgoodies.virtuals
+ local mapfiles = mathgoodies.mapfiles
+ local maplines = mathgoodies.maplines
+ if virtuals then
+ for name, specification in next, virtuals do
+ -- beware, they are all constructed
+ mathematics.makefont(name,specification,goodies)
+ end
+ end
+ if mapfiles then
+ for i=1,#mapfiles do
+ fonts.mappings.loadfile(mapfiles[i]) -- todo: backend function
+ end
+ end
+ if maplines then
+ for i=1,#maplines do
+ fonts.mappings.loadline(maplines[i]) -- todo: backend function
+ end
+ end
+ end
+end
+
+fontgoodies.register("mathematics", initialize)
+
+local enabled = false directives.register("fontgoodies.mathkerning",function(v) enabled = v end)
+
+local function initialize(tfmdata)
+ if enabled and tfmdata.mathparameters then -- funny, cambria text has this
+ local goodies = tfmdata.goodies
+ if goodies then
+ local characters = tfmdata.characters
+ if characters[0x1D44E] then -- 119886
+ -- we have at least an italic a
+ for i=1,#goodies do
+ local mathgoodies = goodies[i].mathematics
+ if mathgoodies then
+ local kerns = mathgoodies.kerns
+ if kerns then
+ for unicode, specification in next, kerns do
+ local chardata = characters[unicode]
+ if chardata and (not chardata.mathkerns or specification.force) then
+ chardata.mathkerns = specification
+ end
+ end
+ return
+ end
+ end
+ end
+ else
+ return -- no proper math font anyway
+ end
+ end
+ end
+end
+
+registerotffeature {
+ name = "mathkerns",
+ description = "math kerns",
+ default = true,
+ initializers = {
+ base = initialize,
+ node = initialize,
+ }
+}
+
+-- math italics (not really needed)
+--
+-- it would be nice to have a \noitalics\font option
+
+local function initialize(tfmdata)
+ local goodies = tfmdata.goodies
+ if goodies then
+ local shared = tfmdata.shared
+ for i=1,#goodies do
+ local mathgoodies = goodies[i].mathematics
+ if mathgoodies then
+ local mathitalics = mathgoodies.italics
+ if mathitalics then
+ local properties = tfmdata.properties
+ 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
+ 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
+ return -- maybe not as these can accumulate
+ end
+ end
+ end
+ end
+ end
+ end
+end
+
+registerotffeature {
+ name = "mathitalics",
+ description = "additional math italic corrections",
+ -- default = true,
+ initializers = {
+ base = initialize,
+ node = initialize,
+ }
+}
+
+-- fontgoodies.register("mathitalics", initialize)
+
+local function mathradicalaction(n,h,v,font,mchar,echar)
+ local characters = fontcharacters[font]
+ local mchardata = characters[mchar]
+ local echardata = characters[echar]
+ local ewidth = echardata.width
+ local mwidth = mchardata.width
+ local delta = h - ewidth
+ local glyph = new_glyph(font,echar)
+ local head = glyph
+ if delta > 0 then
+ local count = ceil(delta/mwidth)
+ local kern = (delta - count * mwidth) / count
+ for i=1,count do
+ local k = new_kern(kern)
+ local g = new_glyph(font,mchar)
+ setlink(k,head)
+ setlink(g,k)
+ head = g
+ end
+ end
+ local height = mchardata.height
+ local list = new_hlist(head)
+ local kern = new_kern(height-v)
+ list = setlink(kern,list)
+ local list = new_vlist(kern)
+ insert_node_after(n,n,list)
+end
+
+local function mathhruleaction(n,h,v,font,bchar,mchar,echar)
+ local characters = fontcharacters[font]
+ local bchardata = characters[bchar]
+ local mchardata = characters[mchar]
+ local echardata = characters[echar]
+ local bwidth = bchardata.width
+ local mwidth = mchardata.width
+ local ewidth = echardata.width
+ local delta = h - ewidth - bwidth
+ local glyph = new_glyph(font,echar)
+ local head = glyph
+ if delta > 0 then
+ local count = ceil(delta/mwidth)
+ local kern = (delta - count * mwidth) / (count+1)
+ for i=1,count do
+ local k = new_kern(kern)
+ local g = new_glyph(font,mchar)
+ setlink(k,head)
+ setlink(g,k)
+ head = g
+ end
+ local k = new_kern(kern)
+ setlink(k,head)
+ head = k
+ end
+ local g = new_glyph(font,bchar)
+ setlink(g,head)
+ head = g
+ local height = mchardata.height
+ local list = new_hlist(head)
+ local kern = new_kern(height-v)
+ list = setlink(kern,list)
+ local list = new_vlist(kern)
+ insert_node_after(n,n,list)
+end
+
+local function initialize(tfmdata)
+ local goodies = tfmdata.goodies
+ if goodies then
+ local resources = tfmdata.resources
+ local ruledata = { }
+ for i=1,#goodies do
+ local mathematics = goodies[i].mathematics
+ if mathematics then
+ local rules = mathematics.rules
+ if rules then
+ for tag, name in next, rules do
+ ruledata[tag] = name
+ end
+ end
+ end
+ end
+ if next(ruledata) then
+ local characters = tfmdata.characters
+ local unicodes = resources.unicodes
+ if characters and unicodes then
+ local mathruleactions = resources.mathruleactions
+ if not mathruleactions then
+ mathruleactions = { }
+ resources.mathruleactions = mathruleactions
+ end
+ --
+ local mchar = unicodes[ruledata["radical.extender"] or false]
+ local echar = unicodes[ruledata["radical.end"] or false]
+ if mchar and echar then
+ mathruleactions.radicalaction = function(n,h,v,font)
+ mathradicalaction(n,h,v,font,mchar,echar)
+ end
+ end
+ --
+ local bchar = unicodes[ruledata["hrule.begin"] or false]
+ local mchar = unicodes[ruledata["hrule.extender"] or false]
+ local echar = unicodes[ruledata["hrule.end"] or false]
+ if bchar and mchar and echar then
+ mathruleactions.hruleaction = function(n,h,v,font)
+ mathhruleaction(n,h,v,font,bchar,mchar,echar)
+ end
+ end
+ -- not that nice but we need to register it at the tex end
+ -- context.enablemathrules("\\fontclass")
+ end
+ end
+ end
+end
+
+registerotffeature {
+ name = "mathrules",
+ description = "check math rules",
+ default = true,
+ initializers = {
+ base = initialize,
+ node = initialize,
+ }
+}
diff --git a/tex/context/base/mkiv/grph-con.lua b/tex/context/base/mkiv/grph-con.lua
new file mode 100644
index 000000000..49b5952df
--- /dev/null
+++ b/tex/context/base/mkiv/grph-con.lua
@@ -0,0 +1,421 @@
+if not modules then modules = { } end modules ['grph-con'] = {
+ version = 1.001,
+ comment = "companion to grph-inc.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local P, R, S, Cc, C, Cs, Ct, lpegmatch = lpeg.P, lpeg.R, lpeg.S, lpeg.Cc, lpeg.C, lpeg.Cs, lpeg.Ct, lpeg.match
+
+local longtostring = string.longtostring
+local formatters = string.formatters
+local expandfilename = dir.expandname
+
+local settings_to_array = utilities.parsers.settings_to_array
+local settings_to_hash = utilities.parsers.settings_to_hash
+local allocate = utilities.storage.allocate
+local setmetatableindex = table.setmetatableindex
+
+local codeinjections = backends.codeinjections
+local nodeinjections = backends.nodeinjections
+
+local report_figures = logs.reporter("system","graphics")
+
+local variables = interfaces.variables
+local v_high = variables.high
+local v_low = variables.low
+local v_medium = variables.medium
+
+local figures = figures
+
+local converters = figures.converters
+local programs = figures.programs
+
+local runprogram = programs.run
+
+do -- eps | ps
+
+ -- \externalfigure[cow.eps]
+ -- \externalfigure[cow.pdf][conversion=stripped]
+
+ -- todo: colorspace
+ -- todo: lowres
+
+ local epsconverter = converters.eps
+ converters.ps = epsconverter
+
+ local resolutions = {
+ [v_low] = "screen",
+ [v_medium] = "ebook",
+ [v_high] = "prepress",
+ }
+
+ local runner = sandbox.registerrunner {
+ name = "eps to pdf",
+ program = {
+ windows = os.platform == "win64" and "gswin64c" or "gswin32c",
+ unix = "gs",
+ },
+ template = longtostring [[
+ -q
+ -sDEVICE=pdfwrite
+ -dNOPAUSE
+ -dNOCACHE
+ -dBATCH
+ -dAutoRotatePages=/None
+ -dPDFSETTINGS=/%presets%
+ -dEPSCrop
+ -dCompatibilityLevel=%level%
+ -sOutputFile="%newname%"
+ %colorspace%
+ "%oldname%"
+ -c quit
+ ]],
+ checkers = {
+ oldname = "readable",
+ newname = "writable",
+ presets = "string",
+ level = "string",
+ colorspace = "string",
+ },
+ }
+
+ programs.epstopdf = { resolutions = epstopdf, runner = runner }
+ programs.gs = programs.epstopdf
+
+ local cleanups = { }
+ local cleaners = { }
+
+ local whitespace = lpeg.patterns.whitespace
+ local quadruple = Ct((whitespace^0 * lpeg.patterns.number/tonumber * whitespace^0)^4)
+ local betterbox = P("%%BoundingBox:") * quadruple
+ * P("%%HiResBoundingBox:") * quadruple
+ * P("%AI3_Cropmarks:") * quadruple
+ * P("%%CropBox:") * quadruple
+ / function(b,h,m,c)
+ return formatters["%%%%BoundingBox: %r %r %r %r\n%%%%HiResBoundingBox: %F %F %F %F\n%%%%CropBox: %F %F %F %F\n"](
+ m[1],m[2],m[3],m[4], -- rounded integer
+ m[1],m[2],m[3],m[4], -- real number
+ m[1],m[2],m[3],m[4]
+ )
+ end
+ local nocrap = P("%") / "" * (
+ (P("AI9_PrivateDataBegin") * P(1)^0) / "%%%%EOF"
+ + (P("%EOF") * whitespace^0 * P("%AI9_PrintingDataEnd") * P(1)^0) / "%%%%EOF"
+ + (P("AI7_Thumbnail") * (1-P("%%EndData"))^0 * P("%%EndData")) / ""
+ )
+ local whatever = nocrap + P(1)
+ local pattern = Cs((betterbox * whatever^1 + whatever)^1)
+
+ directives.register("graphics.conversion.eps.cleanup.ai",function(v) cleanups.ai = v end)
+
+ cleaners.ai = function(name)
+ local tmpname = name .. ".tmp"
+ io.savedata(tmpname,lpegmatch(pattern,io.loaddata(name) or ""))
+ return tmpname
+ end
+
+ function epsconverter.pdf(oldname,newname,resolution,colorspace) -- the resolution interface might change
+ local presets = resolutions[resolution or "high"] or 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
+ if colorspace == "gray" then
+ colorspace = "-sColorConversionStrategy=Gray -sProcessColorModel=DeviceGray"
+ -- colorspace = "-sColorConversionStrategy=Gray"
+ else
+ colorspace = nil
+ end
+ runner {
+ newname = newname,
+ oldname = tmpname,
+ presets = presets,
+ level = tostring(level),
+ colorspace = colorspace,
+ }
+ if tmpname ~= oldname then
+ os.remove(tmpname)
+ end
+ end
+
+ epsconverter["gray.pdf"] = function(oldname,newname,resolution) -- the resolution interface might change
+ epsconverter.pdf(oldname,newname,resolution,"gray")
+ end
+
+ epsconverter.default = epsconverter.pdf
+
+end
+
+-- do -- pdf
+--
+-- local pdfconverter = converters.pdf
+--
+-- programs.pdftoeps = {
+-- runner = sandbox.registerrunner {
+-- name = "pdf to ps",
+-- command = "pdftops",
+-- template = [[-eps "%oldname%" "%newname%"]],
+-- checkers = {
+-- oldname = "readable",
+-- newname = "writable",
+-- }
+-- }
+-- }
+--
+-- pdfconverter.stripped = function(oldname,newname)
+-- local pdftoeps = programs.pdftoeps -- can be changed
+-- local epstopdf = programs.epstopdf -- can be changed
+-- local presets = epstopdf.resolutions[resolution or ""] or epstopdf.resolutions.high
+-- local level = codeinjections.getformatoption("pdf_level") or "1.3"
+-- local tmpname = newname .. ".tmp"
+-- pdftoeps.runner { oldname = oldname, newname = tmpname, presets = presets, level = level }
+-- epstopdf.runner { oldname = tmpname, newname = newname, presets = presets, level = level }
+-- os.remove(tmpname)
+-- end
+--
+-- figures.registersuffix("stripped","pdf")
+--
+-- end
+
+do -- svg
+
+ local svgconverter = converters.svg
+ converters.svgz = svgconverter
+
+ -- inkscape on windows only works with complete paths .. did the command line
+ -- arguments change again? Ok, it's weirder, with -A then it's a name only when
+ -- not . (current)
+
+ local runner = sandbox.registerrunner {
+ name = "svg to something",
+ program = "inkscape",
+ template = longtostring [[
+ "%oldname%"
+ --export-dpi=%resolution%
+ --export-%format%="%newname%"
+ ]],
+ checkers = {
+ oldname = "readable",
+ newname = "writable",
+ format = "string",
+ resolution = "string",
+ },
+ defaults = {
+ format = "pdf",
+ resolution = "600",
+ }
+ }
+
+ programs.inkscape = {
+ runner = runner,
+ }
+
+ function svgconverter.pdf(oldname,newname)
+ runner {
+ format = "pdf",
+ resolution = "600",
+ newname = expandfilename(newname),
+ oldname = expandfilename(oldname),
+ }
+ end
+
+ function svgconverter.png(oldname,newname)
+ runner {
+ format = "png",
+ resolution = "600",
+ newname = expandfilename(newname),
+ oldname = expandfilename(oldname),
+ }
+ end
+
+ svgconverter.default = svgconverter.pdf
+
+end
+
+do -- gif | tif
+
+ local gifconverter = converters.gif
+ local tifconverter = converters.tif
+ local bmpconverter = converters.bmp
+
+ programs.convert = {
+ command = "gm", -- graphicmagick
+ argument = [[convert "%oldname%" "%newname%"]],
+ }
+
+ local function converter(oldname,newname)
+ local convert = programs.convert
+ runprogram(convert.command, convert.argument, {
+ newname = newname,
+ oldname = oldname,
+ } )
+ end
+
+ tifconverter.pdf = converter
+ gifconverter.pdf = converter
+ bmpconverter.pdf = converter
+
+ gifconverter.default = converter
+ tifconverter.default = converter
+ bmpconverter.default = converter
+
+end
+
+do -- png | jpg | profiles
+
+ -- ecirgb_v2.icc
+ -- ecirgb_v2_iccv4.icc
+ -- isocoated_v2_300_eci.icc
+ -- isocoated_v2_eci.icc
+ -- srgb.icc
+ -- srgb_v4_icc_preference.icc
+
+ -- [[convert %?colorspace: -colorspace "%colorspace%" ?%]]
+
+ local rgbprofile = "srgb_v4_icc_preference.icc" -- srgb.icc
+ local cmykprofile = "isocoated_v2_300_eci.icc" -- isocoated_v2_eci.icc
+
+ directives.register("graphics.conversion.rgbprofile", function(v) rgbprofile = type(v) == "string" and v or rgbprofile end)
+ directives.register("graphics.conversion.cmykprofile",function(v) cmykprofile = type(v) == "string" and v or cmykprofile end)
+
+ local jpgconverters = converters.jpg
+ local pngconverters = converters.png
+
+ local function profiles()
+ if not lfs.isfile(rgbprofile) then
+ local found = resolvers.findfile(rgbprofile)
+ if found and found ~= "" then
+ rgbprofile = found
+ else
+ report_figures("unknown profile %a",rgbprofile)
+ end
+ end
+ if not lfs.isfile(cmykprofile) then
+ local found = resolvers.findfile(cmykprofile)
+ if found and found ~= "" then
+ cmykprofile = found
+ else
+ report_figures("unknown profile %a",cmykprofile)
+ end
+ end
+ return rgbprofile, cmykprofile
+ end
+
+ local checkers = {
+ oldname = "readable",
+ newname = "writable",
+ rgbprofile = "string",
+ cmykprofile = "string",
+ resolution = "string",
+ color = "string",
+ }
+
+ local defaults = {
+ resolution = "600",
+ }
+
+ local pngtocmykpdf = sandbox.registerrunner {
+ name = "png to cmyk pdf",
+ program = "gm",
+ template = [[convert -compress Zip -strip +profile "*" -profile "%rgbprofile%" -profile "%cmykprofile%" -sampling-factor 1x1 "%oldname%" "%newname%"]],
+ checkers = checkers,
+ defaults = defaults,
+ }
+
+ local jpgtocmykpdf = sandbox.registerrunner {
+ name = "jpg to cmyk pdf",
+ program = "gm",
+ template = [[convert -compress JPEG -strip +profile "*" -profile "%rgbprofile%" -profile "%cmykprofile%" -sampling-factor 1x1 "%oldname%" "%newname%"]],
+ checkers = checkers,
+ defaults = defaults,
+ }
+
+ local pngtograypdf = sandbox.registerrunner {
+ name = "png to gray pdf",
+ program = "gm",
+ template = [[convert -colorspace gray -compress Zip -sampling-factor 1x1 "%oldname%" "%newname%"]],
+ checkers = checkers,
+ defaults = defaults,
+ }
+
+ local jpgtograypdf = sandbox.registerrunner {
+ name = "jpg to gray pdf",
+ program = "gm",
+ template = [[convert -colorspace gray -compress Zip -sampling-factor 1x1 "%oldname%" "%newname%"]],
+ checkers = checkers,
+ defaults = defaults,
+ }
+
+ programs.pngtocmykpdf = { runner = pngtocmykpdf }
+ programs.jpgtocmykpdf = { runner = jpgtocmykpdf }
+ programs.pngtograypdf = { runner = pngtograypdf }
+ programs.jpgtograypdf = { runner = jpgtograypdf }
+
+ pngconverters["cmyk.pdf"] = function(oldname,newname,resolution)
+ local rgbprofile, cmykprofile = profiles()
+ pngtocmykpdf {
+ oldname = oldname,
+ newname = newname,
+ rgbprofile = rgbprofile,
+ cmykprofile = cmykprofile,
+ resolution = resolution,
+ }
+ end
+
+ pngconverters["gray.pdf"] = function(oldname,newname,resolution)
+ pngtograypdf {
+ oldname = oldname,
+ newname = newname,
+ resolution = resolution,
+ }
+ end
+
+ jpgconverters["cmyk.pdf"] = function(oldname,newname,resolution)
+ local rgbprofile, cmykprofile = profiles()
+ jpgtocmykpdf {
+ oldname = oldname,
+ newname = newname,
+ rgbprofile = rgbprofile,
+ cmykprofile = cmykprofile,
+ resolution = resolution,
+ }
+ end
+
+ jpgconverters["gray.pdf"] = function(oldname,newname,resolution)
+ jpgtograypdf {
+ oldname = oldname,
+ newname = newname,
+ resolution = resolution,
+ }
+ end
+
+ -- recolor
+
+ local recolorpng = sandbox.registerrunner {
+ name = "recolor png",
+ program = "gm",
+ template = [[convert -recolor "%color%" "%oldname%" "%newname%"]],
+ checkers = checkers,
+ defaults = defaults,
+ }
+
+ -- this is now built in so not really needed any more
+
+ programs.recolor = { runner = recolorpng }
+
+ pngconverters["recolor.png"] = function(oldname,newname,resolution,arguments)
+ recolorpng {
+ oldname = oldname,
+ newname = newname,
+ resolution = resolution,
+ color = arguments or ".5 0 0 .7 0 0 .9 0 0",
+ }
+ end
+
+end
diff --git a/tex/context/base/mkiv/grph-fig.mkiv b/tex/context/base/mkiv/grph-fig.mkiv
index 80b094d83..1fdc0caa0 100644
--- a/tex/context/base/mkiv/grph-fig.mkiv
+++ b/tex/context/base/mkiv/grph-fig.mkiv
@@ -53,7 +53,7 @@
\fi\fi}
\def\grph_buffers_typeset_indeed[#1][#2]% we could use the via files
- {\doifnot{#1}{*}{\xdef\lasttypesetbuffer{\clf_runbuffer{#1}}}%
+ {\doifnot{#1}{*}{\xdef\lasttypesetbuffer{\clf_typesetbuffer{#1}}}%
\ifcase\c_grph_buffers_mode
% typesetonly
\or
@@ -61,6 +61,13 @@
\fi
\egroup}
+\unexpanded\def\runbuffer % for now
+ {\dotripleempty\grph_buffers_run_indeed}
+
+\def\grph_buffers_run_indeed[#1][#2]%
+ {\xdef\lasttypesetbuffer{\clf_runbuffer{#1}{#2}}}
+
+
% For manuals and such:
%
% \definetypesetting [name] [options] [settings-a]
diff --git a/tex/context/base/mkiv/grph-fil.lua b/tex/context/base/mkiv/grph-fil.lua
index e774d097e..3c069da37 100644
--- a/tex/context/base/mkiv/grph-fil.lua
+++ b/tex/context/base/mkiv/grph-fil.lua
@@ -42,6 +42,16 @@ end
job.register('job.files.collected', tobesaved, initializer)
+local runner = sandbox.registerrunner {
+ name = "hashed context run",
+ program = "context",
+ template = [[%options% "%filename%"]],
+ checkers = {
+ options = "string",
+ filename = "readable",
+ }
+}
+
function jobfiles.run(name,action)
local usedname = addsuffix(name,inputsuffix) -- we assume tex if not set
local oldchecksum = collected[usedname]
@@ -55,7 +65,10 @@ function jobfiles.run(name,action)
if ta == "function" then
action(name)
elseif ta == "string" and action ~= "" then
+ -- can be anything but we assume it gets checked by the sandbox
os.execute(action)
+ elseif ta == "table" then
+ runner(action)
else
report_run("processing file, no action given for processing %a",name)
end
@@ -79,7 +92,7 @@ function jobfiles.context(name,options)
else
local result = replacesuffix(name,resultsuffix)
if not done[result] then
- jobfiles.run(name,"context ".. (options or "") .. " " .. name)
+ jobfiles.run(name, { options = options, filename = name })
done[result] = true
end
return result
diff --git a/tex/context/base/mkiv/grph-inc.lua b/tex/context/base/mkiv/grph-inc.lua
index d13d45a29..b5e74b4c1 100644
--- a/tex/context/base/mkiv/grph-inc.lua
+++ b/tex/context/base/mkiv/grph-inc.lua
@@ -40,14 +40,14 @@ run TeX code from within Lua. Some more functionality will move to Lua.
-- todo: store loaded pages per pdf file someplace
-local format, lower, find, match, gsub, gmatch = string.format, string.lower, string.find, string.match, string.gsub, string.gmatch
+local format, lower, find, match, gsub = string.format, string.lower, string.find, string.match, string.gsub
+local longtostring = string.longtostring
local contains = table.contains
local concat, insert, remove = table.concat, table.insert, table.remove
local todimen = string.todimen
local collapsepath = file.collapsepath
local formatters = string.formatters
-local longtostring = string.longtostring
-local expandfilename = dir.expandname
+local formatcolumns = utilities.formatters.formatcolumns
local P, R, S, Cc, C, Cs, Ct, lpegmatch = lpeg.P, lpeg.R, lpeg.S, lpeg.Cc, lpeg.C, lpeg.Cs, lpeg.Ct, lpeg.match
@@ -84,34 +84,44 @@ local trace_bases = false trackers.register ("graphics.bases", func
local trace_programs = false trackers.register ("graphics.programs", function(v) trace_programs = v end)
local trace_conversion = false trackers.register ("graphics.conversion", function(v) trace_conversion = v end)
local trace_inclusion = false trackers.register ("graphics.inclusion", function(v) trace_inclusion = v end)
+local trace_usage = false trackers.register ("graphics.usage", function(v) trace_usage = v end)
-local extra_check = false directives.register("graphics.extracheck", function(v) extra_check = v end)
+local extra_check = false directives.register("graphics.extracheck", function(v) extra_check = v end)
+local auto_transform = true directives.register("graphics.autotransform", function(v) auto_transform = v end)
+
+if LUATEXVERSION <= 1 then
+ auto_transform = false
+end
local report_inclusion = logs.reporter("graphics","inclusion")
local report_figures = logs.reporter("system","graphics")
local report_figure = logs.reporter("used graphic")
+local report_newline = logs.newline
-local f_hash_part = formatters["%s->%s->%s"]
-local f_hash_full = formatters["%s->%s->%s->%s->%s->%s->%s"]
+local f_hash_part = formatters["%s->%s->%s->%s"]
+local f_hash_full = formatters["%s->%s->%s->%s->%s->%s->%s->%s"]
-local v_yes = variables.yes
-local v_low = variables.low
-local v_medium = variables.medium
-local v_high = variables.high
-local v_global = variables["global"]
-local v_local = variables["local"]
-local v_default = variables.default
-local v_auto = variables.auto
+local v_yes = variables.yes
+local v_global = variables["global"]
+local v_local = variables["local"]
+local v_default = variables.default
+local v_auto = variables.auto
-local maxdimen = 2^30-1
+local maxdimen = 2^30-1
+
+local ctx_doscalefigure = context.doscalefigure
+local ctx_relocateexternalfigure = context.relocateexternalfigure
+local ctx_startfoundexternalfigure = context.startfoundexternalfigure
+local ctx_stopfoundexternalfigure = context.stopfoundexternalfigure
+local ctx_dosetfigureobject = context.dosetfigureobject
+local ctx_doboxfigureobject = context.doboxfigureobject
function images.check(figure)
if figure then
local width = figure.width
local height = figure.height
if width <= 0 or height <= 0 then
- report_inclusion("image %a has bad dimensions (%p,%p), discarding",
- figure.filename,width,height)
+ report_inclusion("image %a has bad dimensions (%p,%p), discarding",figure.filename,width,height)
return false, "bad dimensions"
end
local xres = figure.xres
@@ -295,39 +305,31 @@ function figures.badname(name)
end
end
-local trace_names = false
-
-trackers.register("graphics.lognames", function(v)
- if v and not trace_names then
- luatex.registerstopactions(function()
- if figures.nofprocessed > 0 then
- local report_newline = logs.newline
- logs.pushtarget("logfile")
- report_newline()
- report_figures("start names")
- for _, data in table.sortedhash(figures_found) do
- report_newline()
- report_figure("asked : %s",data.askedname)
- if data.found then
- report_figure("format : %s",data.format)
- report_figure("found : %s",data.foundname)
- report_figure("used : %s",data.fullname)
- if data.badname then
- report_figure("comment : %s","bad name")
- elseif data.comment then
- report_figure("comment : %s",data.comment)
- end
- else
- report_figure("comment : %s","not found")
- end
+luatex.registerstopactions(function()
+ if trace_usage and figures.nofprocessed > 0 then
+ logs.pushtarget("logfile")
+ report_newline()
+ report_figures("start names")
+ for _, data in table.sortedhash(figures_found) do
+ report_newline()
+ report_figure("asked : %s",data.askedname)
+ if data.found then
+ report_figure("format : %s",data.format)
+ report_figure("found : %s",data.foundname)
+ report_figure("used : %s",data.fullname)
+ if data.badname then
+ report_figure("comment : %s","bad name")
+ elseif data.comment then
+ report_figure("comment : %s",data.comment)
end
- report_newline()
- report_figures("stop names")
- report_newline()
- logs.poptarget()
+ else
+ report_figure("comment : %s","not found")
end
- end)
- trace_names = true
+ end
+ report_newline()
+ report_figures("stop names")
+ report_newline()
+ logs.poptarget()
end
end)
@@ -495,6 +497,8 @@ local function new() -- we could use metatables status -> used -> request but it
mask = false,
conversion = false,
resolution = false,
+ color = false,
+ arguments = false,
cache = false,
prefix = false,
size = false,
@@ -642,6 +646,14 @@ local function rejected(specification)
end
end
+local function wipe(str)
+ if str == "" or str == "default" or str == "unknown" then
+ return nil
+ else
+ return str
+ end
+end
+
local function register(askedname,specification)
if not specification then
specification = { askedname = askedname, comment = "invalid specification" }
@@ -656,24 +668,26 @@ local function register(askedname,specification)
elseif not rejected(specification) then
local format = specification.format
if format then
- local conversion = specification.conversion
- local resolution = specification.resolution
- if conversion == "" then
- conversion = nil
- end
- if resolution == "" then
- resolution = nil
- end
- local newformat = conversion
+ local conversion = wipe(specification.conversion)
+ local resolution = wipe(specification.resolution)
+ local arguments = wipe(specification.arguments)
+ local newformat = conversion
if not newformat or newformat == "" then
newformat = defaultformat
end
if trace_conversion then
- report_inclusion("checking conversion of %a, fullname %a, old format %a, new format %a, conversion %a, resolution %a",
- askedname,specification.fullname,format,newformat,conversion or "default",resolution or "default")
+ report_inclusion("checking conversion of %a, fullname %a, old format %a, new format %a, conversion %a, resolution %a, arguments %a",
+ askedname,
+ specification.fullname,
+ format,
+ newformat,
+ conversion or "default",
+ resolution or "default",
+ arguments or ""
+ )
end
-- quick hack
- local converter = (newformat ~= format or resolution) and converters[format]
+ local converter = (newformat ~= format or resolution or arguments) and converters[format]
if converter then
if converter[newformat] then
converter = converter[newformat]
@@ -729,8 +743,15 @@ local function register(askedname,specification)
if prefix and prefix ~= "" then
newbase = prefix .. newbase
end
- if resolution and resolution ~= "" then -- the order might change
- newbase = newbase .. "_" .. resolution
+ local hash = ""
+ if resolution then
+ hash = hash .. "[r:" .. resolution .. "]"
+ end
+ if arguments then
+ hash = hash .. "[a:" .. arguments .. "]"
+ end
+ if hash ~= "" then
+ newbase = newbase .. "_" .. md5.hex(hash)
end
--
-- see *, we had:
@@ -744,7 +765,6 @@ local function register(askedname,specification)
-- sticking around)
--
local newbase = newbase .. "." .. newformat
- --
local newname = file.join(newpath,newbase)
oldname = collapsepath(oldname)
newname = collapsepath(newname)
@@ -754,7 +774,7 @@ local function register(askedname,specification)
if trace_conversion then
report_inclusion("converting %a (%a) from %a to %a",askedname,oldname,format,newformat)
end
- converter(oldname,newname,resolution or "")
+ converter(oldname,newname,resolution or "", arguments or "")
else
if trace_conversion then
report_inclusion("no need to convert %a (%a) from %a to %a",askedname,oldname,format,newformat)
@@ -817,7 +837,12 @@ local function register(askedname,specification)
specification.foundname = nil
end
specification.badname = figures.badname(askedname)
- local askedhash = f_hash_part(askedname,specification.conversion or "default",specification.resolution or "default")
+ local askedhash = f_hash_part(
+ askedname,
+ specification.conversion or "default",
+ specification.resolution or "default",
+ specification.arguments or ""
+ )
figures_found[askedhash] = specification
return specification
end
@@ -834,16 +859,22 @@ local internalschemes = {
local function locate(request) -- name, format, cache
-- not resolvers.cleanpath(request.name) as it fails on a!b.pdf and b~c.pdf
-- todo: more restricted cleanpath
- local askedname = request.name or ""
- local askedhash = f_hash_part(askedname,request.conversion or "default",request.resolution or "default")
- local foundname = figures_found[askedhash]
+ local askedname = request.name or ""
+ local askedcache = request.cache
+ local askedconversion = request.conversion
+ local askedresolution = request.resolution
+ local askedarguments = request.arguments
+ local askedhash = f_hash_part(
+ askedname,
+ askedconversion or "default",
+ askedresolution or "default",
+ askedarguments or ""
+ )
+ local foundname = figures_found[askedhash]
if foundname then
return foundname
end
--
- local askedcache = request.cache
- local askedconversion = request.conversion
- local askedresolution = request.resolution
--
local askedformat = request.format
if not askedformat or askedformat == "" or askedformat == "unknown" then
@@ -892,6 +923,7 @@ local function locate(request) -- name, format, cache
cache = askedcache,
conversion = askedconversion,
resolution = askedresolution,
+ arguments = askedarguments,
})
end
end
@@ -927,6 +959,7 @@ local function locate(request) -- name, format, cache
-- foundname = foundname, -- no
conversion = askedconversion,
resolution = askedresolution,
+ arguments = askedarguments,
internal = internal,
})
elseif quitscanning then
@@ -947,6 +980,7 @@ local function locate(request) -- name, format, cache
cache = askedcache,
conversion = askedconversion,
resolution = askedresolution,
+ arguments = askedarguments,
})
end
else
@@ -965,6 +999,7 @@ local function locate(request) -- name, format, cache
cache = askedcache,
conversion = askedconversion,
resolution = askedresolution,
+ arguments = askedarguments,
})
end
end
@@ -978,6 +1013,7 @@ local function locate(request) -- name, format, cache
cache = askedcache,
conversion = askedconversion,
resolution = askedresolution,
+ arguments = askedarguments,
})
end
end
@@ -1001,6 +1037,7 @@ local function locate(request) -- name, format, cache
cache = askedcache,
conversion = askedconversion,
resolution = askedresolution,
+ arguments = askedarguments,
})
end
end
@@ -1035,6 +1072,7 @@ local function locate(request) -- name, format, cache
cache = askedcache,
conversion = askedconversion,
resolution = askedresolution,
+ arguments = askedarguments
})
end
end
@@ -1062,6 +1100,7 @@ local function locate(request) -- name, format, cache
cache = askedcache,
conversion = askedconversion,
resolution = askedresolution,
+ arguments = askedarguments,
})
end
end
@@ -1086,6 +1125,7 @@ local function locate(request) -- name, format, cache
cache = askedcache,
conversion = askedconversion,
resolution = askedresolution,
+ arguments = askedarguments,
})
end
end
@@ -1095,6 +1135,7 @@ local function locate(request) -- name, format, cache
return register(askedname, { -- these two are needed for hashing 'found'
conversion = askedconversion,
resolution = askedresolution,
+ arguments = askedarguments,
})
end
@@ -1117,12 +1158,14 @@ end
function figures.identify(data)
data = data or callstack[#callstack] or lastfiguredata
- local list = identifiers.list -- defined at the end
- for i=1,#list do
- local identifier = list[i]
- local data = identifier(data)
- if data and (not data.status and data.status.status > 0) then
- break
+ if data then
+ local list = identifiers.list -- defined at the end
+ for i=1,#list do
+ local identifier = list[i]
+ local data = identifier(data)
+ if data and (not data.status and data.status.status > 0) then
+ break
+ end
end
end
return data
@@ -1137,18 +1180,18 @@ function figures.check(data)
return (checkers[data.status.format] or checkers.generic)(data)
end
-local trace_usage = false
local used_images = { }
-trackers.register("graphics.usage", function(v)
- if v and not trace_usage then
- luatex.registerstopactions(function()
+statistics.register("used graphics",function()
+ if trace_usage then
+ local filename = file.nameonly(environment.jobname) .. "-figures-usage.lua"
+ if next(figures_found) then
local found = { }
- for _, t in table.sortedhash(figures_found) do
- found[#found+1] = t
- for k, v in next, t do
+ for _, data in table.sortedhash(figures_found) do
+ found[#found+1] = data
+ for k, v in next, data do
if v == false or v == "" then
- t[k] = nil
+ data[k] = nil
end
end
end
@@ -1163,18 +1206,20 @@ trackers.register("graphics.usage", function(v)
end
for _, t in next, u do
for k, v in next, t do
- if v == false or v == "" then
+ if v == false or v == "" or k == "private" then
t[k] = nil
end
end
end
end
- table.save(file.nameonly(environment.jobname) .. "-figures-usage.lua",{
+ table.save(filename,{
found = found,
used = used_images,
} )
- end)
- trace_usage = true
+ return format("log saved in '%s'",filename)
+ else
+ os.remove(filename)
+ end
end
end)
@@ -1188,7 +1233,7 @@ end
function figures.scale(data) -- will become lua code
data = data or callstack[#callstack] or lastfiguredata
- context.doscalefigure()
+ ctx_doscalefigure()
return data
end
@@ -1199,9 +1244,22 @@ function figures.done(data)
local box = texgetbox(nr)
ds.width = box.width
ds.height = box.height
- ds.xscale = ds.width /(du.width or 1)
- ds.yscale = ds.height/(du.height or 1)
- ds.page = ds.page or du.page or dr.page -- sort of redundant but can be limited
+ -- somehow this fails on some of tacos files
+ -- ds.xscale = ds.width /(du.width or 1)
+ -- ds.yscale = ds.height/(du.height or 1)
+ -- du.width and du.height can be false
+ if du.width and du.height and du.width > 0 and du.height > 0 then
+ ds.xscale = ds.width /du.width
+ ds.yscale = ds.height/du.height
+ elseif du.xsize and du.ysize and du.xsize > 0 and du.ysize > 0 then
+ ds.xscale = ds.width /du.xsize
+ ds.yscale = ds.height/du.ysize
+ else
+ ds.xscale = 1
+ ds.yscale = 1
+ end
+ -- sort of redundant but can be limited
+ ds.page = ds.page or du.page or dr.page
return data
end
@@ -1244,22 +1302,72 @@ function existers.generic(askedname,resolve)
return result
end
+-- pdf : 0-3: 0 90 180 270
+-- jpeg: 0 unset 1-4: 0 90 180 270 5-8: flipped r/c
+
+local transforms = setmetatableindex (
+ {
+ ["orientation-1"] = 0, ["R0"] = 0,
+ ["orientation-2"] = 4, ["R0MH"] = 4,
+ ["orientation-3"] = 2, ["R180"] = 2,
+ ["orientation-4"] = 6, ["R0MV"] = 6,
+ ["orientation-5"] = 5, ["R270MH"] = 5,
+ ["orientation-6"] = 3, ["R90"] = 3,
+ ["orientation-7"] = 7, ["R90MH"] = 7,
+ ["orientation-8"] = 1, ["R270"] = 1,
+ },
+ function(t,k) -- transforms are 0 .. 7
+ local v = tonumber(k) or 0
+ if v < 0 or v > 7 then
+ v = 0
+ end
+ t[k] = v
+ return v
+ end
+)
+
+local function checktransform(figure,forced)
+ if auto_transform then
+ local orientation = (forced ~= "" and forced ~= v_auto and forced) or figure.orientation or 0
+ local transform = transforms["orientation-"..orientation]
+ figure.transform = transform
+ if math.odd(transform) then
+ return figure.height, figure.width
+ else
+ return figure.width, figure.height
+ end
+ end
+end
+
function checkers.generic(data)
local dr, du, ds = data.request, data.used, data.status
- local name = du.fullname or "unknown generic"
- local page = du.page or dr.page
- local size = dr.size or "crop"
- local color = dr.color or "natural"
- local mask = dr.mask or "none"
+ local name = du.fullname or "unknown generic"
+ local page = du.page or dr.page
+ local size = dr.size or "crop"
+ local color = dr.color or "natural"
+ local mask = dr.mask or "none"
local conversion = dr.conversion
local resolution = dr.resolution
+ local arguments = dr.arguments
if not conversion or conversion == "" then
- conversion = "unknown"
+ conversion = "default"
end
if not resolution or resolution == "" then
- resolution = "unknown"
- end
- local hash = f_hash_full(name,page,size,color,conversion,resolution,mask)
+ resolution = "default"
+ end
+ if not arguments or arguments == "" then
+ arguments = "default"
+ end
+ local hash = f_hash_full(
+ name,
+ page,
+ size,
+ color,
+ mask,
+ conversion,
+ resolution,
+ arguments
+ )
local figure = figures_loaded[hash]
if figure == nil then
figure = images.new {
@@ -1292,8 +1400,10 @@ function checkers.generic(data)
end
end
if figure then
- du.width = figure.width
- du.height = figure.height
+ local width, height = checktransform(figure,dr.transform)
+ --
+ du.width = width
+ du.height = height
du.pages = figure.pages
du.depth = figure.depth or 0
du.colordepth = figure.colordepth or 0
@@ -1301,6 +1411,8 @@ function checkers.generic(data)
du.yresolution = figure.yres or 0
du.xsize = figure.xsize or 0
du.ysize = figure.ysize or 0
+ du.rotation = figure.rotation or 0 -- in pdf multiples or 90% in jpeg 1
+ du.orientation = figure.orientation or 0 -- jpeg 1 2 3 4 (0=unset)
ds.private = figure
ds.hash = hash
end
@@ -1350,7 +1462,7 @@ function includers.generic(data)
box.width, box.height, box.depth = figure.width, figure.height, 0 -- new, hm, tricky, we need to do that in tex (yet)
texsetbox(nr,box)
ds.objectnumber = figure.objnum
- context.relocateexternalfigure()
+ ctx_relocateexternalfigure()
end
return data
end
@@ -1367,9 +1479,9 @@ local function checkers_nongeneric(data,command) -- todo: macros and context.*
if type(command) == "function" then
command()
end
- context.dosetfigureobject("FIG",hash)
+ ctx_dosetfigureobject("FIG",hash)
end
- context.doboxfigureobject("FIG",hash)
+ ctx_doboxfigureobject("FIG",hash)
elseif type(command) == "function" then
command()
end
@@ -1396,7 +1508,7 @@ function checkers.mov(data)
report_inclusion("including movie %a, width %p, height %p",foundname,width,height)
end
-- we need to push the node.write in between ... we could make a shared helper for this
- context.startfoundexternalfigure(width .. "sp",height .. "sp")
+ ctx_startfoundexternalfigure(width .. "sp",height .. "sp")
context(function()
nodeinjections.insertmovie {
width = width,
@@ -1409,7 +1521,7 @@ function checkers.mov(data)
foundname = foundname,
}
end)
- context.stopfoundexternalfigure()
+ ctx_stopfoundexternalfigure()
return data
end
@@ -1421,6 +1533,9 @@ internalschemes.mprun = true
-- mprun.foo.1 mprun.6 mprun:foo.2
+local ctx_docheckfiguremprun = context.docheckfiguremprun
+local ctx_docheckfiguremps = context.docheckfiguremps
+
local function internal(askedname)
local spec, mprun, mpnum = match(lower(askedname),"mprun([:%.]?)(.-)%.(%d+)")
if spec ~= "" then
@@ -1442,9 +1557,9 @@ end
function checkers.mps(data)
local mprun, mpnum = internal(data.used.fullname)
if mpnum then
- return checkers_nongeneric(data,function() context.docheckfiguremprun(mprun,mpnum) end)
+ return checkers_nongeneric(data,function() ctx_docheckfiguremprun(mprun,mpnum) end)
else
- return checkers_nongeneric(data,function() context.docheckfiguremps(data.used.fullname) end)
+ return checkers_nongeneric(data,function() ctx_docheckfiguremps(data.used.fullname) end)
end
end
@@ -1452,19 +1567,23 @@ includers.mps = includers.nongeneric
-- -- -- tex -- -- --
+local ctx_docheckfiguretex = context.docheckfiguretex
+
function existers.tex(askedname)
askedname = resolvers.findfile(askedname)
return askedname ~= "" and askedname or false, true, "tex", true
end
function checkers.tex(data)
- return checkers_nongeneric(data,function() context.docheckfiguretex(data.used.fullname) end)
+ return checkers_nongeneric(data,function() ctx_docheckfiguretex(data.used.fullname) end)
end
includers.tex = includers.nongeneric
-- -- -- buffer -- -- --
+local ctx_docheckfigurebuffer = context.docheckfigurebuffer
+
function existers.buffer(askedname)
local name = file.nameonly(askedname)
local okay = buffers.exists(name)
@@ -1472,7 +1591,7 @@ function existers.buffer(askedname)
end
function checkers.buffer(data)
- return checkers_nongeneric(data,function() context.docheckfigurebuffer(file.nameonly(data.used.fullname)) end)
+ return checkers_nongeneric(data,function() ctx_docheckfigurebuffer(file.nameonly(data.used.fullname)) end)
end
includers.buffers = includers.nongeneric
@@ -1495,28 +1614,32 @@ includers.auto = includers.generic
-- -- -- cld -- -- --
+local ctx_docheckfigurecld = context.docheckfigurecld
+
function existers.cld(askedname)
askedname = resolvers.findfile(askedname)
return askedname ~= "" and askedname or false, true, "cld", true
end
function checkers.cld(data)
- return checkers_nongeneric(data,function() context.docheckfigurecld(data.used.fullname) end)
+ return checkers_nongeneric(data,function() ctx_docheckfigurecld(data.used.fullname) end)
end
includers.cld = includers.nongeneric
-- -- -- converters -- -- --
-local function makeoptions(options)
+setmetatableindex(converters,"table")
+
+-- We keep this helper because it has been around for a while and therefore it can
+-- be a depedency in an existing workflow.
+
+function programs.makeoptions(options)
local to = type(options)
return (to == "table" and concat(options," ")) or (to == "string" and options) or ""
end
--- programs.makeoptions = makeoptions
-
-local function runprogram(binary,argument,variables)
- -- move this check to the runner code
+function programs.run(binary,argument,variables)
local found = nil
if type(binary) == "table" then
for i=1,#binary do
@@ -1551,306 +1674,7 @@ local function runprogram(binary,argument,variables)
end
end
-programs.run = runprogram
-
--- -- -- eps & pdf -- -- --
---
--- \externalfigure[cow.eps]
--- \externalfigure[cow.pdf][conversion=stripped]
-
-local epsconverter = converters.eps or { }
-converters.eps = epsconverter
-converters.ps = epsconverter
-
--- todo: colorspace
-
-local epstopdf = {
- resolutions = {
- [v_low] = "screen",
- [v_medium] = "ebook",
- [v_high] = "prepress",
- },
- command = os.type == "windows" and { "gswin64c", "gswin32c" } or "gs",
- -- -dProcessDSCComments=false
- argument = [[
- -q
- -sDEVICE=pdfwrite
- -dNOPAUSE
- -dNOCACHE
- -dBATCH
- -dAutoRotatePages=/None
- -dPDFSETTINGS=/%presets%
- -dEPSCrop
- -dCompatibilityLevel=%level%
- -sOutputFile="%newname%"
- %colorspace%
- "%oldname%"
- -c quit
- ]],
-}
-
-programs.epstopdf = epstopdf
-programs.gs = epstopdf
-
-local cleanups = { }
-local cleaners = { }
-
-local whitespace = lpeg.patterns.whitespace
-local quadruple = Ct((whitespace^0 * lpeg.patterns.number/tonumber * whitespace^0)^4)
-local betterbox = P("%%BoundingBox:") * quadruple
- * P("%%HiResBoundingBox:") * quadruple
- * P("%AI3_Cropmarks:") * quadruple
- * P("%%CropBox:") * quadruple
- / function(b,h,m,c)
- return formatters["%%%%BoundingBox: %i %i %i %i\n%%%%HiResBoundingBox: %F %F %F %F\n%%%%CropBox: %F %F %F %F\n"](
- m[1],m[2],m[3],m[4],
- m[1],m[2],m[3],m[4],
- m[1],m[2],m[3],m[4]
- )
- end
-local nocrap = P("%") / "" * (
- (P("AI9_PrivateDataBegin") * P(1)^0) / "%%%%EOF"
- + (P("%EOF") * whitespace^0 * P("%AI9_PrintingDataEnd") * P(1)^0) / "%%%%EOF"
- + (P("AI7_Thumbnail") * (1-P("%%EndData"))^0 * P("%%EndData")) / ""
- )
-local whatever = nocrap + P(1)
-local pattern = Cs((betterbox * whatever^1 + whatever)^1)
-
-directives.register("graphics.conversion.eps.cleanup.ai",function(v) cleanups.ai = v end)
-
-cleaners.ai = function(name)
- local tmpname = name .. ".tmp"
- io.savedata(tmpname,lpegmatch(pattern,io.loaddata(name) or ""))
- return tmpname
-end
-
-function epsconverter.pdf(oldname,newname,resolution,colorspace) -- the resolution interface might change
- local epstopdf = programs.epstopdf -- can be changed
- 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
- if colorspace == "gray" then
- colorspace = "-sColorConversionStrategy=Gray -sProcessColorModel=DeviceGray"
- -- colorspace = "-sColorConversionStrategy=Gray"
- else
- colorspace = nil
- end
- runprogram(epstopdf.command, epstopdf.argument, {
- newname = newname,
- oldname = tmpname,
- presets = presets,
- level = tostring(level),
- colorspace = colorspace,
- } )
- if tmpname ~= oldname then
- os.remove(tmpname)
- end
-end
-
-epsconverter["gray.pdf"] = function(oldname,newname,resolution) -- the resolution interface might change
- epsconverter.pdf(oldname,newname,resolution,"gray")
-end
-
-epsconverter.default = epsconverter.pdf
-
-local pdfconverter = converters.pdf or { }
-converters.pdf = pdfconverter
-
--- programs.pdftoeps = {
--- command = "pdftops",
--- argument = [[-eps "%oldname%" "%newname%"]],
--- }
---
--- pdfconverter.stripped = function(oldname,newname)
--- local pdftoeps = programs.pdftoeps -- can be changed
--- local epstopdf = programs.epstopdf -- can be changed
--- local presets = epstopdf.resolutions[resolution or ""] or epstopdf.resolutions.high
--- local level = codeinjections.getformatoption("pdf_level") or "1.3"
--- local tmpname = newname .. ".tmp"
--- runprogram(pdftoeps.command, pdftoeps.argument, { oldname = oldname, newname = tmpname, presets = presets, level = level })
--- runprogram(epstopdf.command, epstopdf.argument, { oldname = tmpname, newname = newname, presets = presets, level = level })
--- os.remove(tmpname)
--- end
---
--- figures.registersuffix("stripped","pdf")
-
--- -- -- svg -- -- --
-
-local svgconverter = { }
-converters.svg = svgconverter
-converters.svgz = svgconverter
-
--- inkscape on windows only works with complete paths
-
-programs.inkscape = {
- command = "inkscape",
- pdfargument = [[
- "%oldname%"
- --export-dpi=600
- -A
- "%newname%"
- ]],
- pngargument = [[
- "%oldname%"
- --export-dpi=600
- --export-png="%newname%"
- ]],
-}
-
-function svgconverter.pdf(oldname,newname)
- local inkscape = programs.inkscape -- can be changed
- runprogram(inkscape.command, inkscape.pdfargument, {
- newname = expandfilename(newname),
- oldname = expandfilename(oldname),
- } )
-end
-
-function svgconverter.png(oldname,newname)
- local inkscape = programs.inkscape
- runprogram(inkscape.command, inkscape.pngargument, {
- newname = expandfilename(newname),
- oldname = expandfilename(oldname),
- } )
-end
-
-svgconverter.default = svgconverter.pdf
-
--- -- -- gif -- -- --
--- -- -- tif -- -- --
-
-local gifconverter = converters.gif or { }
-local tifconverter = converters.tif or { }
-local bmpconverter = converters.bmp or { }
-
-converters.gif = gifconverter
-converters.tif = tifconverter
-converters.bmp = bmpconverter
-
-programs.convert = {
- command = "gm", -- graphicmagick
- argument = [[convert "%oldname%" "%newname%"]],
-}
-
-local function converter(oldname,newname)
- local convert = programs.convert
- runprogram(convert.command, convert.argument, {
- newname = newname,
- oldname = oldname,
- } )
-end
-
-tifconverter.pdf = converter
-gifconverter.pdf = converter
-bmpconverter.pdf = converter
-
-gifconverter.default = converter
-tifconverter.default = converter
-bmpconverter.default = converter
-
--- todo: lowres
-
--- cmyk conversion
-
--- ecirgb_v2.icc
--- ecirgb_v2_iccv4.icc
--- isocoated_v2_300_eci.icc
--- isocoated_v2_eci.icc
--- srgb.icc
--- srgb_v4_icc_preference.icc
-
--- [[convert %?colorspace: -colorspace "%colorspace%" ?%]]
-
-local rgbprofile = "srgb_v4_icc_preference.icc" -- srgb.icc
-local cmykprofile = "isocoated_v2_300_eci.icc" -- isocoated_v2_eci.icc
-
-directives.register("graphics.conversion.rgbprofile", function(v) rgbprofile = type(v) == "string" and v or rgbprofile end)
-directives.register("graphics.conversion.cmykprofile",function(v) cmykprofile = type(v) == "string" and v or cmykprofile end)
-
-local function profiles()
- if not lfs.isfile(rgbprofile) then
- local found = resolvers.findfile(rgbprofile)
- if found and found ~= "" then
- rgbprofile = found
- else
- report_figures("unknown profile %a",rgbprofile)
- end
- end
- if not lfs.isfile(cmykprofile) then
- local found = resolvers.findfile(cmykprofile)
- if found and found ~= "" then
- cmykprofile = found
- else
- report_figures("unknown profile %a",cmykprofile)
- end
- end
- return rgbprofile, cmykprofile
-end
-
-programs.pngtocmykpdf = {
- command = "gm",
- argument = [[convert -compress Zip -strip +profile "*" -profile "%rgbprofile%" -profile "%cmykprofile%" -sampling-factor 1x1 "%oldname%" "%newname%"]],
-}
-
-programs.jpgtocmykpdf = {
- command = "gm",
- argument = [[convert -compress JPEG -strip +profile "*" -profile "%rgbprofile%" -profile "%cmykprofile%" -sampling-factor 1x1 "%oldname%" "%newname%"]],
-}
-
-programs.pngtograypdf = {
- command = "gm",
- argument = [[convert -colorspace gray -compress Zip -sampling-factor 1x1 "%oldname%" "%newname%"]],
-}
-
-programs.jpgtograypdf = {
- command = "gm",
- argument = [[convert -colorspace gray -compress Zip -sampling-factor 1x1 "%oldname%" "%newname%"]],
-}
-
-figures.converters.png = {
- ["cmyk.pdf"] = function(oldname,newname,resolution)
- local rgbprofile, cmykprofile = profiles()
- runprogram(programs.pngtocmykpdf.command, programs.pngtocmykpdf.argument, {
- -- runprogram(programs.pngtocmykpdf, {
- rgbprofile = rgbprofile,
- cmykprofile = cmykprofile,
- oldname = oldname,
- newname = newname,
- } )
- end,
- ["gray.pdf"] = function(oldname,newname,resolution)
- runprogram(programs.pngtograypdf.command, programs.pngtograypdf.argument, {
- -- runprogram(programs.pngtograypdf, {
- oldname = oldname,
- newname = newname,
- } )
- end,
-}
-
-figures.converters.jpg = {
- ["cmyk.pdf"] = function(oldname,newname,resolution)
- local rgbprofile, cmykprofile = profiles()
- runprogram(programs.jpgtocmykpdf.command, programs.jpgtocmykpdf.argument, {
- -- runprogram(programs.jpgtocmykpdf, {
- rgbprofile = rgbprofile,
- cmykprofile = cmykprofile,
- oldname = oldname,
- newname = newname,
- } )
- end,
- ["gray.pdf"] = function(oldname,newname,resolution)
- runprogram(programs.jpgtograypdf.command, programs.jpgtograypdf.argument, {
- -- runprogram(programs.jpgtograypdf, {
- oldname = oldname,
- newname = newname,
- } )
- end,
-}
+-- the rest of the code has been moved to grph-con.lua
-- -- -- bases -- -- --
@@ -2072,7 +1896,9 @@ implement {
{ "conversion" },
{ "resolution" },
{ "color" },
+ { "arguments" },
{ "repeat" },
+ { "transform" },
{ "width", "dimen" },
{ "height", "dimen" },
}
@@ -2122,6 +1948,8 @@ implement {
local registered = { }
+local ctx_doexternalfigurerepeat = context.doexternalfigurerepeat
+
interfaces.implement {
name = "figure_register_page",
arguments = { "string", "string", "string" },
@@ -2144,7 +1972,7 @@ interfaces.implement {
actions = function(n)
local f = registered[tonumber(n)]
if f then
- context.doexternalfigurerepeat(f[1],f[2],f[3],n)
+ ctx_doexternalfigurerepeat(f[1],f[2],f[3],n)
end
end
}
diff --git a/tex/context/base/mkiv/grph-inc.mkiv b/tex/context/base/mkiv/grph-inc.mkiv
index de5a2227a..25058b3f7 100644
--- a/tex/context/base/mkiv/grph-inc.mkiv
+++ b/tex/context/base/mkiv/grph-inc.mkiv
@@ -21,7 +21,9 @@
\writestatus{loading}{ConTeXt Graphic Macros / Figure Inclusion}
\registerctxluafile{grph-inc}{1.001}
+\registerctxluafile{grph-con}{1.001}
\registerctxluafile{grph-fil}{1.001}
+\registerctxluafile{grph-mem}{1.001}
\registerctxluafile{grph-u3d}{1.001} % this will change
\registerctxluafile{grph-swf}{1.001} % this will change
@@ -59,6 +61,7 @@
\c!preset =\v!yes,
\c!split =,
\c!color =,
+ \c!arguments =,
\c!symbol =\v!no,
\c!controls =\v!no,
\c!resources =,
@@ -100,6 +103,7 @@
\c!xmax =,
\c!align =\v!none, % New, for Tacos extremely large graphics.
\c!crossreference =\v!no,
+ \c!transform =\v!auto,
]
%D Defining figures.
@@ -312,7 +316,7 @@
\edef\p_reference{\externalfigureparameter\c!reference}%
%
\dostarttagged\t!image\empty
- \clf_figure_push
+ \clf_figure_push {
name {\p_grph_include_name}%
label {\ifx\p_label\empty\p_grph_include_label\else\p_label\fi}%
page {\externalfigureparameter\c!page}%
@@ -329,15 +333,17 @@
mask {\externalfigureparameter\c!mask}%
conversion {\externalfigureparameter\c!conversion}%
resolution {\externalfigureparameter\c!resolution}%
- color {\internalspotcolorparent{\externalfigureparameter\c!color}}% hack is needed
+ color {\externalfigureparameter\c!color}% unprocessed raw key
+ arguments {\externalfigureparameter\c!arguments}% used for converters
repeat {\externalfigureparameter\c!repeat}%
+ transform {\externalfigureparameter\c!transform}%
\ifx\p_width\empty \else
width \dimexpr\p_width\relax
\fi
\ifx\p_height\empty \else
height \dimexpr\p_height\relax
\fi
- \relax
+ }%\relax
\clf_figure_identify
\relax
\ifconditional\c_grph_include_test_only
@@ -527,6 +533,9 @@
\def\figurefilepage {\clf_figurerequest{page}{1}}
\def\figurefileoptions {\clf_figurerequest{options}{}}
\def\figurefileconversion{\clf_figurerequest{conversion}{}}
+\def\figurefileresolution{\clf_figurerequest{resolution}{}}
+\def\figurefilecolor {\clf_figurerequest{color}{}}
+\def\figurefilearguments {\clf_figurerequest{arguments}{}}
\def\figurefilecache {\clf_figurerequest{cache}{}}
\def\figurefileprefix {\clf_figurerequest{prefix}{}}
@@ -534,6 +543,8 @@
\def\figurenaturalheight {\clf_figureused{height}{\number\dimexpr\defaultfigureheight\relax}sp}
\def\figurexresolution {\clf_figureused{xresolution}{0}}
\def\figureyresolution {\clf_figureused{yresolution}{0}}
+\def\figureorientation {\clf_figureused{orientation}{1}}
+\def\figurerotation {\clf_figureused{rotation}{0}}
\def\figurexsize {\clf_figureused{xsize}{0}}
\def\figureysize {\clf_figureused{ysize}{0}}
\def\figurecolordepth {\clf_figureused{colordepth}{0}}
@@ -859,12 +870,184 @@
[\jobname.buffer]
[\c!object=\v!no]
-% Another one:
+% Another two:
\defineexternalfigure
[\v!inline]
[\c!height=\lineheight]
+\defineexternalfigure
+ [\v!combination]
+ [\c!width=\dimexpr(%
+ \textwidth-\effectiveleftskip-\effectiverightskip
+ -\numexpr\combinationparameter\c!nx-\plusone\relax\dimexpr\combinationparameter\c!distance\relax
+ )/\combinationparameter\c!nx\relax]
+
+% \startcombination[nx=2,ny=1]
+% {\externalfigure[dummy][combination]} {}
+% {\externalfigure[dummy][combination]} {}
+% \stopcombination
+
+% \startcombination[nx=2,ny=2]
+% {\externalfigure[dummy][combination]} {}
+% {\externalfigure[dummy][combination]} {}
+% {\externalfigure[dummy][combination]} {}
+% {\externalfigure[dummy][combination]} {}
+% \stopcombination
+
+% \startcombination[nx=3,ny=1]
+% {\externalfigure[dummy][combination]} {}
+% {\externalfigure[dummy][combination]} {}
+% {\externalfigure[dummy][combination]} {}
+% \stopcombination
+
+% \startcombination[nx=4,ny=1]
+% {\externalfigure[dummy][combination]} {}
+% {\externalfigure[dummy][combination]} {}
+% {\externalfigure[dummy][combination]} {}
+% {\externalfigure[dummy][combination]} {}
+% \stopcombination
+
\unexpanded\def\inlinefigure[#1]{\dontleavehmode\sbox{\externalfigure[#1][\v!inline]}}
\protect \endinput
+
+% Moved here because this already old code is nowhere documents (so I need to
+% check it:
+%
+% \starttext
+%
+% \startluaparameterset [u3d:myset:controls:1]
+% view = {
+% name = 'default',
+% bg = {1,1,1},
+% mag = 100,
+% coo = {0,0,0},
+% c2c = {0,0,1},
+% rot = {40,0,60},
+% roo = 6,
+% lights = 'CAD'
+% },
+% js = 'cloudq.js'
+% \stopluaparameterset
+%
+% \startluaparameterset [u3d:myset:controls:2]
+% views = {
+% {
+% name = 'AnglePositioning',
+% bg = {1,1,1},
+% azimuth = 45,
+% altitude = 45,
+% roo = 50,
+% aac = 2.5,
+% lights = 'Artwork'
+% },
+% {
+% name = 'RotationPositioning',
+% bg = {1,1,1},
+% rot = {0,45,45},
+% roo = 50,
+% aac = 2.5,
+% lights = 'Artwork'
+% },
+% {
+% name = 'VectorPositioning',
+% bg = {1,0,0},
+% c2c = {1,1,math.sqrt(2)},
+% roo = 50,
+% aac = 2.5,
+% lights = 'CAD'
+% },
+% {
+% name = 'PositionPositioning',
+% bg = {1,0,0},
+% pos = {1+25,1+25,1+50/math.sqrt(2)},
+% aac = 2.5,
+% lights = 'CAD'
+% },
+% {
+% name = 'ortho',
+% bg = {1,1,1},
+% mag = 300,
+% lights = 'CAD',
+% crossection = {}
+% }
+% },
+% view = {
+% name = 'default',
+% bg = {1,1,1},
+% c2c = {-1,-1,0},
+% roo = 50,
+% aac = 2.5,
+% roll = 45,
+% lights = 'CAD',
+% crossection = {
+% normal = {-1,-1,-1},
+% transparent = true
+% },
+% nodes = {
+% {
+% name = 'xlabel',
+% visible = false
+% },
+% {
+% name = 'ylabel',
+% opacity = 0.5
+% },
+% {
+% name = 'zlabel',
+% rendermode = 'Wireframe'
+% }
+% }
+% }
+% \stopluaparameterset
+%
+% \useexternalfigure
+% [cloudq]
+% [cloudq.u3d]
+% [width=0.7\textwidth,
+% height=.7\textwidth,
+% display=u3d:myset:display:1,
+% controls=u3d:myset:controls:1]
+%
+% \useexternalfigure
+% [axes]
+% [axes.u3d]
+% [width=0.7\textwidth,
+% height=.7\textwidth,
+% controls=u3d:myset:controls:1]
+%
+% \startluaparameterset[u3d:myset:display:2]
+% toolbar = true,
+% preview = 'cloudq.png'
+% \stopluaparameterset
+% \startluaparameterset[u3d:myset:display:3]
+% toolbar = true,
+% tree = false,
+% preview = 'axes.png'
+% \stopluaparameterset
+% \startluaparameterset[u3d:myset:display:4]
+% toolbar = true,
+% tree = false,
+% view = {
+% name = 'view',
+% bg = {0.1,0.1,0.1},
+% c2c = {-1,-1,0},
+% roo = 50,
+% aac = 2.5,
+% roll = 45,
+% lights = 'Red'
+% }
+% \stopluaparameterset
+% \startluaparameterset[u3d:myset:display:5]
+% toolbar = true,
+% tree = false,
+% view = 'ortho'
+% \stopluaparameterset
+%
+% \placefigure[here]{none}{\externalfigure[cloudq][frame=on,display=u3d:myset:display:2]}
+% \placefigure[here]{none}{\externalfigure[axes] [frame=on,display=u3d:myset:display:3]}
+% \placefigure[here]{none}{\externalfigure[axes] [frame=on,display=u3d:myset:display:4]}
+% \placefigure[here]{none}{\externalfigure[axes] [frame=on,display=u3d:myset:display:5,width=0.5\textwidth,height=.5\textwidth]}
+%
+% \stoptext
diff --git a/tex/context/base/mkiv/grph-mem.lua b/tex/context/base/mkiv/grph-mem.lua
new file mode 100644
index 000000000..bb48ae8d5
--- /dev/null
+++ b/tex/context/base/mkiv/grph-mem.lua
@@ -0,0 +1,106 @@
+if not modules then modules = { } end modules ['grph-mem'] = {
+ version = 1.001,
+ comment = "companion to grph-inc.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- very experimental and likely to change
+--
+-- \startluacode
+-- figures.setmemstream("whatever",io.loaddata("t:/sources/cow.pdf"))
+-- \stopluacode
+--
+-- \externalfigure[memstream:///t:/sources/cow.pdf]
+-- \externalfigure[memstream:///whatever]
+
+local gsub = string.gsub
+
+local report = logs.reporter("memstream")
+local trace = false trackers.register ("graphics.memstreams", function(v) trace = v end)
+local data = { }
+local opened = { }
+
+local function setmemstream(name,stream,once)
+ if once and data[name] then
+ if trace then
+ report("not overloading %a",name) --
+ end
+ return data[name]
+ end
+ local memstream, identifier = epdf.openMemStream(stream,#stream,name)
+ if not identifier then
+ report("no valid stream %a",name)
+ identifier = "invalid-memstream"
+ elseif trace then
+ report("setting %a with identifier %a",name,identifier)
+ end
+ data [name] = identifier
+ opened[name] = memstream
+ return identifier
+end
+
+resolvers.setmemstream = setmemstream
+
+function resolvers.finders.memstream(specification)
+ local name = specification.path
+ local identifier = data[name]
+ if identifier then
+ if trace then
+ report("reusing %a with identifier %a",name,identifier)
+ end
+ return identifier
+ end
+ local stream = io.loaddata(name)
+ if not stream or stream == "" then
+ if trace then
+ report("no valid file %a",name)
+ end
+ return resolvers.finders.notfound()
+ else
+ return setmemstream(name,stream)
+ end
+end
+
+local flush = { }
+
+function resolvers.resetmemstream(name,afterpage)
+ if afterpage then
+ flush[#flush+1] = name
+ else
+ opened[name] = nil
+ end
+end
+
+luatex.registerpageactions(function()
+ if #flush > 0 then
+ for i=1,#flush do
+ opened[flush[i]] = nil -- we keep of course data[name] because of reuse
+ end
+ flush = { }
+ end
+end)
+
+figures.identifiers.list[#figures.identifiers.list+1] = function(specification)
+ local name = specification.request.name
+ if name then
+ local base = gsub(name,"^memstream:///","")
+ if base ~= name then
+ local identifier = data[base]
+ if identifier then
+ if trace then
+ report("requested %a has identifier %s",name,identifier)
+ end
+ specification.status.status = 1
+ specification.used.fullname = name
+ else
+ if trace then
+ report("requested %a is not found",name)
+ end
+ end
+ end
+ end
+end
+
+figures.setmemstream = resolvers.setmemstream
diff --git a/tex/context/base/mkiv/grph-pat.lua b/tex/context/base/mkiv/grph-pat.lua
new file mode 100644
index 000000000..c5e4b9f64
--- /dev/null
+++ b/tex/context/base/mkiv/grph-pat.lua
@@ -0,0 +1,74 @@
+if not modules then modules = { } end modules ['grph-pat'] = {
+ version = 1.001,
+ comment = "companion to grph-pat.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- This is just a proof of concept. Viewers behave different (offsets) and Acrobat doesn't
+-- show xform based patterns.
+--
+-- This module will be cleaned up and use codeinjections and such.
+
+local texsetbox = tex.setbox
+local texgetbox = tex.getbox
+
+local nodepool = nodes.pool
+local new_literal = nodepool.pdforiginliteral -- really ?
+local new_hlist = nodepool.hlist
+
+local names = { }
+
+interfaces.implement {
+ name = "registerpattern",
+ arguments = { {
+ { "name" },
+ { "number", "integer" },
+ { "width", "dimension" },
+ { "height", "dimension" },
+ { "hoffset", "dimension" },
+ { "voffset", "dimension" },
+ } },
+ actions = function(specification)
+ local number = specification.number
+ local name = specification.name
+ local box = texgetbox(number)
+ if not name or name == "" then
+ return
+ end
+ nodes.handlers.finalize(box)
+ names[name] = lpdf.registerpattern {
+ number = number,
+ width = specification.width or box.width,
+ height = specification.height or (box.height + box.depth) ,
+ hoffset = specification.hoffset,
+ voffset = specification.voffset,
+ }
+ end
+}
+
+interfaces.implement {
+ name = "applypattern",
+ arguments = { {
+ { "name" },
+ { "number", "integer" },
+ { "width", "dimension" },
+ { "height", "dimension" },
+ } },
+ actions = function(specification)
+ local number = specification.number
+ local name = specification.name
+ local width = specification.width
+ local height = specification.height
+ if not name or name == "" then
+ return
+ end
+ local p = names[name]
+ if p then
+ local l = new_literal(lpdf.patternstream(p,width,height))
+ local h = new_hlist(l,width,height)
+ texsetbox(number,h)
+ end
+ end
+}
diff --git a/tex/context/base/mkiv/grph-pat.mkiv b/tex/context/base/mkiv/grph-pat.mkiv
new file mode 100644
index 000000000..0126647cc
--- /dev/null
+++ b/tex/context/base/mkiv/grph-pat.mkiv
@@ -0,0 +1,125 @@
+%D \module
+%D [ file=grph-par,
+%D version=2016.07.08,
+%D title=\CONTEXT\ Graphic Macros,
+%D subtitle=Patterns,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D This works ok in Okular and MuPDF but somehow xforms don't work in Acrobat
+%D (full nor reader). Also the basic offset is kind of unspecified. So \unknown\
+%D we're dealing with a fragile feature. So, don't rely on where the first (ulr)
+%D tile occurs.
+%D
+%D The two commands introduced here are not documented (yet).
+
+\writestatus{loading}{ConTeXt Graphic Macros / Patterns}
+
+\unprotect
+
+\registerctxluafile{grph-pat}{1.001}
+
+\unexpanded\def\registerpattern
+ {\begingroup
+ \letdummyparameter\c!name \s!dummy
+ \letdummyparameter\c!width \v!auto
+ \letdummyparameter\c!height \v!auto
+ \letdummyparameter\c!hoffset\zeropoint
+ \letdummyparameter\c!voffset\zeropoint
+ \dodoubleempty\syst_boxes_registerpattern}
+
+\def\syst_boxes_registerpattern[#1][#2]%
+ {\ifsecondargument
+ \setdummyparameter\c!name{#1}%
+ \getdummyparameters[#2]%
+ \else\iffirstargument
+ \doifassignmentelse{#1}
+ {\getdummyparameters[#1]}%
+ {\setdummyparameter\c!name{#1}}%
+ \fi\fi
+ \dowithnextboxcs\syst_boxes_registerpattern_indeed\hbox}
+
+\edef\v!auto_m{-\v!auto}
+
+\def\syst_boxes_registerpattern_indeed
+ {%\finalizeobjectbox\nextbox
+ \edef\p_width {\dummyparameter\c!width}%
+ \edef\p_height {\dummyparameter\c!height}%
+ \edef\p_hoffset{\dummyparameter\c!hoffset}%
+ \edef\p_voffset{\dummyparameter\c!voffset}%
+ \scratchwidth \dimexpr\ifx\p_width \v!auto\wd \nextbox \else\p_width \fi\relax
+ \scratchheight \dimexpr\ifx\p_height \v!auto\htdp\nextbox \else\p_height \fi\relax
+ \scratchhoffset\dimexpr\ifx\p_hoffset\v!auto\scratchwidth /2\else\ifx\p_hoffset\v!auto_m-\scratchwidth /2\else\p_hoffset\fi\fi\relax
+ \scratchvoffset\dimexpr\ifx\p_voffset\v!auto\scratchheight/2\else\ifx\p_voffset\v!auto_m-\scratchheight/2\else\p_voffset\fi\fi\relax
+ \clf_registerpattern
+ name {\dummyparameter\c!name}
+ number \nextbox
+ width \scratchwidth
+ height \scratchheight
+ hoffset \scratchhoffset
+ voffset \scratchvoffset
+ \relax
+ \endgroup}
+
+\unexpanded\def\applypattern
+ {\hbox\bgroup
+ \letdummyparameter\c!name \s!dummy
+ \letdummyparameter\c!width \zeropoint
+ \letdummyparameter\c!height\zeropoint
+ \dodoubleempty\syst_boxes_applypattern}
+
+\def\syst_boxes_applypattern[#1][#2]%
+ {\ifsecondargument
+ \setdummyparameter\c!name{#1}%
+ \getdummyparameters[#2]%
+ \else\iffirstargument
+ \doifassignmentelse{#1}
+ {\getdummyparameters[#1]}%
+ {\setdummyparameter\c!name{#1}}%
+ \fi\fi
+ \clf_applypattern
+ name {\dummyparameter\c!name}
+ number \nextbox
+ width \dimexpr\dummyparameter\c!width\relax
+ height \dimexpr\dummyparameter\c!height\relax
+ \relax
+ \box\nextbox
+ \egroup}
+
+\protect
+
+\continueifinputfile{grph-pat.mkiv}
+
+\nopdfcompression
+
+\starttext
+
+ \registerpattern[demo]{It \darkred Works!}
+
+ \framed[offset=overlay]{\applypattern[demo][width=7cm,height=4cm]}
+
+ \blank
+
+ \registerpattern[name=more,hoffset=0bp,voffset=0pt]{\externalfigure[cow.pdf][width=1cm]}
+
+ \framed[offset=overlay]{\applypattern[name=more,width=7cm,height=4cm]}
+
+ \blank
+
+ \registerpattern[name=more,hoffset=auto,voffset=auto]{\externalfigure[cow.pdf][width=1cm]}
+
+ \framed[offset=overlay]{\applypattern[name=more,width=7cm,height=4cm]}
+
+ \blank
+
+ \registerpattern[name=more,hoffset=-auto,voffset=-auto]{\externalfigure[cow.pdf][width=1cm]}
+
+ \framed[offset=overlay]{\applypattern[name=more,width=7cm,height=4cm]}
+
+\stoptext
+
diff --git a/tex/context/base/mkiv/grph-rul.lua b/tex/context/base/mkiv/grph-rul.lua
index 556763812..e3d1d8963 100644
--- a/tex/context/base/mkiv/grph-rul.lua
+++ b/tex/context/base/mkiv/grph-rul.lua
@@ -15,11 +15,14 @@ local userrule = nodes.rules.userrule
local bpfactor = number.dimenfactors.bp
local pdfprint = pdf.print
+local current_attr = nodes.current_attr
+local setfield = nodes.setfield
+
local getattribute = tex.getattribute
local a_color = attributes.private('color')
local a_transparency = attributes.private('transparency')
-local a_colorspace = attributes.private('colormodel')
+local a_colormodel = attributes.private('colormodel')
local mpcolor = attributes.colors.mpcolor
@@ -28,7 +31,7 @@ local trace_mp = false trackers.register("rules.mp", function(v) trace_mp
local report_mp = logs.reporter("rules","mp")
local floor = math.floor
-local random = math.random
+local getrandom = utilities.randomizer.get
local formatters = string.formatters
do
@@ -77,6 +80,8 @@ RuleOption := "%option%" ;
RuleWidth := %width% ;
RuleHeight := %height% ;
RuleDepth := %depth% ;
+RuleH := %h% ;
+RuleV := %v% ;
RuleThickness := %line% ;
RuleFactor := %factor% ;
RuleOffset := %offset% ;
@@ -100,11 +105,13 @@ def RuleColor = %color% enddef ;
color = mpcolor(p.ma,p.ca,p.ta),
option = p.option or "",
direction = p.direction or "TLT",
+ h = h * bpfactor,
+ v = v * bpfactor,
}
if not initialized then
initialized = true
- simplemetapost("rulefun",formatters["randomseed := %s;"](random(0,4095)))
+ simplemetapost("rulefun",formatters["randomseed := %s;"](getrandom("rulefun",0,4095)))
end
local pdf = caching and cache[code] or simplemetapost("rulefun",code) -- w, h, d
if trace_mp then
@@ -168,20 +175,22 @@ interfaces.implement {
{ "name", "string" },
} } ,
actions = function(t)
- local r = userrule(t)
- local ma = getattribute(a_colorspace) or 1
+ -- no nuts !
+ local rule = userrule(t)
+ local ma = getattribute(a_colormodel) or 1
local ca = getattribute(a_color)
local ta = getattribute(a_transparency)
+ setfield(rule,"attr",current_attr())
if t.type == "mp" then
t.ma = ma
t.ca = ca
t.ta = ta
else
- r[a_colorspace] = ma
- r[a_color] = ca
- r[a_transparency] = ta
+ rule[a_colormodel] = ma
+ rule[a_color] = ca
+ rule[a_transparency] = ta
end
- context(r)
+ context(rule)
end
}
@@ -196,17 +205,19 @@ interfaces.implement {
} } ,
actions = function(t)
local factor = t.factor or 0
+ local amount = getrandom("fakeword",t.min,t.max)
local rule = userrule {
height = 1.25*factor,
depth = 0.25*factor,
- width = floor(random(t.min,t.max)/10000) * 10000,
+ width = floor(amount/10000) * 10000,
line = 0.10*factor,
- ma = getattribute(a_colorspace) or 1,
+ ma = getattribute(a_colormodel) or 1,
ca = getattribute(a_color),
ta = getattribute(a_transparency),
type = "mp",
name = t.name,
}
+ setfield(rule,"attr",current_attr())
context(rule)
end
}
diff --git a/tex/context/base/mkiv/grph-u3d.lua b/tex/context/base/mkiv/grph-u3d.lua
index 6961c5503..748f9808d 100644
--- a/tex/context/base/mkiv/grph-u3d.lua
+++ b/tex/context/base/mkiv/grph-u3d.lua
@@ -47,5 +47,8 @@ end
figures.includers.u3d = figures.includers.nongeneric
+-- figures.checkers .prc = figures.checkers.u3d
+-- figures.includers.prc = figures.includers.nongeneric
+
figures.registersuffix("u3d","u3d")
figures.registersuffix("prc","u3d")
diff --git a/tex/context/base/mkiv/l-dir.lua b/tex/context/base/mkiv/l-dir.lua
index 81ac65e50..bc691d536 100644
--- a/tex/context/base/mkiv/l-dir.lua
+++ b/tex/context/base/mkiv/l-dir.lua
@@ -335,6 +335,36 @@ end
dir.globfiles = globfiles
+local function globdirs(path,recurse,func,files) -- func == pattern or function
+ if type(func) == "string" then
+ local s = func
+ func = function(name) return find(name,s) end
+ end
+ files = files or { }
+ local noffiles = #files
+ for name in walkdir(path) do
+ if find(name,"^%.") then
+ --- skip
+ else
+ local mode = attributes(name,'mode')
+ if mode == "directory" then
+ if not func or func(name) then
+ noffiles = noffiles + 1
+ files[noffiles] = path .. "/" .. name
+ if recurse then
+ globdirs(path .. "/" .. name,recurse,func,files)
+ end
+ end
+ end
+ end
+ end
+ return files
+end
+
+dir.globdirs = globdirs
+
+-- inspect(globdirs("e:/tmp"))
+
-- t = dir.glob("c:/data/develop/context/sources/**/????-*.tex")
-- t = dir.glob("c:/data/develop/tex/texmf/**/*.tex")
-- t = dir.glob("c:/data/develop/context/texmf/**/*.tex")
@@ -557,9 +587,13 @@ file.expandname = dir.expandname -- for convenience
local stack = { }
function dir.push(newdir)
- insert(stack,currentdir())
+ local curdir = currentdir()
+ insert(stack,curdir)
if newdir and newdir ~= "" then
chdir(newdir)
+ return newdir
+ else
+ return curdir
end
end
diff --git a/tex/context/base/mkiv/l-file.lua b/tex/context/base/mkiv/l-file.lua
index b6822e954..f2a27ad18 100644
--- a/tex/context/base/mkiv/l-file.lua
+++ b/tex/context/base/mkiv/l-file.lua
@@ -607,14 +607,17 @@ function file.robustname(str,strict)
end
end
-file.readdata = io.loaddata
-file.savedata = io.savedata
+local loaddata = io.loaddata
+local savedata = io.savedata
+
+file.readdata = loaddata
+file.savedata = savedata
function file.copy(oldname,newname)
if oldname and newname then
- local data = io.loaddata(oldname)
+ local data = loaddata(oldname)
if data and data ~= "" then
- file.savedata(newname,data)
+ savedata(newname,data)
end
end
end
diff --git a/tex/context/base/mkiv/l-io.lua b/tex/context/base/mkiv/l-io.lua
index a91d44d87..75e704a34 100644
--- a/tex/context/base/mkiv/l-io.lua
+++ b/tex/context/base/mkiv/l-io.lua
@@ -7,6 +7,7 @@ if not modules then modules = { } end modules ['l-io'] = {
}
local io = io
+local open, flush, write, read = io.open, io.flush, io.write, io.read
local byte, find, gsub, format = string.byte, string.find, string.gsub, string.format
local concat = table.concat
local floor = math.floor
@@ -18,59 +19,136 @@ else
io.fileseparator, io.pathseparator = "/" , ":"
end
-local function readall(f)
- return f:read("*all")
-end
+-- local function readall(f)
+-- return f:read("*all")
+-- end
-- The next one is upto 50% faster on large files and less memory consumption due
-- to less intermediate large allocations. This phenomena was discussed on the
-- luatex dev list.
+local large = 2^24 -- 16 MB
+local medium = large / 16 -- 1 MB
+local small = medium / 8
+
+-- local function readall(f)
+-- local size = f:seek("end")
+-- if size == 0 then
+-- return ""
+-- end
+-- f:seek("set",0)
+-- if size < medium then
+-- return f:read('*all')
+-- else
+-- local step = (size > large) and large or (floor(size/(medium)) * small)
+-- local data = { }
+-- while true do
+-- local r = f:read(step)
+-- if not r then
+-- return concat(data)
+-- else
+-- data[#data+1] = r
+-- end
+-- end
+-- end
+-- end
+
local function readall(f)
+-- return f:read("*all")
local size = f:seek("end")
- if size == 0 then
- return ""
- elseif size < 1024*1024 then
+ if size > 0 then
f:seek("set",0)
- return f:read('*all')
+ return f:read(size)
else
- local done = f:seek("set",0)
- local step
- if size < 1024*1024 then
- step = 1024 * 1024
- elseif size > 16*1024*1024 then
- step = 16*1024*1024
- else
- step = floor(size/(1024*1024)) * 1024 * 1024 / 8
- end
- local data = { }
- while true do
- local r = f:read(step)
- if not r then
- return concat(data)
- else
- data[#data+1] = r
- end
- end
+ return ""
end
end
io.readall = readall
function io.loaddata(filename,textmode) -- return nil if empty
- local f = io.open(filename,(textmode and 'r') or 'rb')
+ local f = open(filename,(textmode and 'r') or 'rb')
if f then
- -- local data = f:read('*all')
- local data = readall(f)
+ local size = f:seek("end")
+ local data = nil
+ if size > 0 then
+ -- data = f:read("*all")
+ f:seek("set",0)
+ data = f:read(size)
+ end
f:close()
- if #data > 0 then
- return data
+ return data
+ end
+end
+
+-- function io.copydata(source,target,action)
+-- local f = open(source,"rb")
+-- if f then
+-- local g = open(target,"wb")
+-- if g then
+-- local size = f:seek("end")
+-- if size == 0 then
+-- -- empty
+-- else
+-- f:seek("set",0)
+-- if size < medium then
+-- local data = f:read('*all')
+-- if action then
+-- data = action(data)
+-- end
+-- if data then
+-- g:write(data)
+-- end
+-- else
+-- local step = (size > large) and large or (floor(size/(medium)) * small)
+-- while true do
+-- local data = f:read(step)
+-- if data then
+-- if action then
+-- data = action(data)
+-- end
+-- if data then
+-- g:write(data)
+-- end
+-- else
+-- break
+-- end
+-- end
+-- end
+-- end
+-- g:close()
+-- end
+-- f:close()
+-- flush()
+-- end
+-- end
+
+function io.copydata(source,target,action)
+ local f = open(source,"rb")
+ if f then
+ local g = open(target,"wb")
+ if g then
+ local size = f:seek("end")
+ if size > 0 then
+ -- local data = f:read('*all')
+ f:seek("set",0)
+ local data = f:read(size)
+ if action then
+ data = action(data)
+ end
+ if data then
+ g:write(data)
+ end
+ end
+ g:close()
end
+ f:close()
+ flush()
end
end
function io.savedata(filename,data,joiner)
- local f = io.open(filename,"wb")
+ local f = open(filename,"wb")
if f then
if type(data) == "table" then
f:write(concat(data,joiner or ""))
@@ -80,7 +158,7 @@ function io.savedata(filename,data,joiner)
f:write(data or "")
end
f:close()
- io.flush()
+ flush()
return true
else
return false
@@ -89,36 +167,74 @@ end
-- we can also chunk this one if needed: io.lines(filename,chunksize,"*l")
-function io.loadlines(filename,n) -- return nil if empty
- local f = io.open(filename,'r')
- if not f then
- -- no file
- elseif n then
- local lines = { }
- for i=1,n do
- local line = f:read("*lines")
- if line then
- lines[#lines+1] = line
- else
- break
+-- ffi.readline
+
+if fio and fio.readline then
+
+ local readline = fio.readline
+
+ function io.loadlines(filename,n) -- return nil if empty
+ local f = open(filename,'r')
+ if not f then
+ -- no file
+ elseif n then
+ local lines = { }
+ for i=1,n do
+ local line = readline(f)
+ if line then
+ lines[i] = line
+ else
+ break
+ end
+ end
+ f:close()
+ lines = concat(lines,"\n")
+ if #lines > 0 then
+ return lines
+ end
+ else
+ local line = readline(f)
+ f:close()
+ if line and #line > 0 then
+ return line
end
end
- f:close()
- lines = concat(lines,"\n")
- if #lines > 0 then
- return lines
- end
- else
- local line = f:read("*line") or ""
- f:close()
- if #line > 0 then
- return line
+ end
+
+else
+
+ function io.loadlines(filename,n) -- return nil if empty
+ local f = open(filename,'r')
+ if not f then
+ -- no file
+ elseif n then
+ local lines = { }
+ for i=1,n do
+ local line = f:read("*lines")
+ if line then
+ lines[i] = line
+ else
+ break
+ end
+ end
+ f:close()
+ lines = concat(lines,"\n")
+ if #lines > 0 then
+ return lines
+ end
+ else
+ local line = f:read("*line") or ""
+ f:close()
+ if #line > 0 then
+ return line
+ end
end
end
+
end
function io.loadchunk(filename,n)
- local f = io.open(filename,'rb')
+ local f = open(filename,'rb')
if f then
local data = f:read(n or 1024)
f:close()
@@ -129,7 +245,7 @@ function io.loadchunk(filename,n)
end
function io.exists(filename)
- local f = io.open(filename)
+ local f = open(filename)
if f == nil then
return false
else
@@ -139,7 +255,7 @@ function io.exists(filename)
end
function io.size(filename)
- local f = io.open(filename)
+ local f = open(filename)
if f == nil then
return 0
else
@@ -149,17 +265,18 @@ function io.size(filename)
end
end
-function io.noflines(f)
+local function noflines(f)
if type(f) == "string" then
- local f = io.open(filename)
+ local f = open(filename)
if f then
- local n = f and io.noflines(f) or 0
+ local n = f and noflines(f) or 0
f:close()
return n
else
return 0
end
else
+ -- todo: load and lpeg
local n = 0
for _ in f:lines() do
n = n + 1
@@ -169,6 +286,10 @@ function io.noflines(f)
end
end
+io.noflines = noflines
+
+-- inlined is faster ... beware, better use util-fil
+
local nextchar = {
[ 4] = function(f)
return f:read(1,1,1,1)
@@ -250,16 +371,16 @@ end
function io.ask(question,default,options)
while true do
- io.write(question)
+ write(question)
if options then
- io.write(format(" [%s]",concat(options,"|")))
+ write(format(" [%s]",concat(options,"|")))
end
if default then
- io.write(format(" [%s]",default))
+ write(format(" [%s]",default))
end
- io.write(format(" "))
- io.flush()
- local answer = io.read()
+ write(format(" "))
+ flush()
+ local answer = read()
answer = gsub(answer,"^%s*(.*)%s*$","%1")
if answer == "" and default then
return default
@@ -282,7 +403,7 @@ function io.ask(question,default,options)
end
end
-local function readnumber(f,n,m)
+local function readnumber(f,n,m) -- to be replaced
if m then
f:seek("set",n)
n = m
@@ -291,38 +412,32 @@ local function readnumber(f,n,m)
return byte(f:read(1))
elseif n == 2 then
local a, b = byte(f:read(2),1,2)
- return 256 * a + b
+ return 0x100 * a + b
elseif n == 3 then
local a, b, c = byte(f:read(3),1,3)
- return 256*256 * a + 256 * b + c
+ return 0x10000 * a + 0x100 * b + c
elseif n == 4 then
local a, b, c, d = byte(f:read(4),1,4)
- return 256*256*256 * a + 256*256 * b + 256 * c + d
+ return 0x1000000 * a + 0x10000 * b + 0x100 * c + d
elseif n == 8 then
local a, b = readnumber(f,4), readnumber(f,4)
- return 256 * a + b
+ return 0x100 * a + b
elseif n == 12 then
local a, b, c = readnumber(f,4), readnumber(f,4), readnumber(f,4)
- return 256*256 * a + 256 * b + c
+ return 0x10000 * a + 0x100 * b + c
elseif n == -2 then
local b, a = byte(f:read(2),1,2)
- return 256*a + b
+ return 0x100 * a + b
elseif n == -3 then
local c, b, a = byte(f:read(3),1,3)
- return 256*256 * a + 256 * b + c
+ return 0x10000 * a + 0x100 * b + c
elseif n == -4 then
local d, c, b, a = byte(f:read(4),1,4)
- return 256*256*256 * a + 256*256 * b + 256*c + d
+ return 0x1000000 * a + 0x10000 * b + 0x100*c + d
elseif n == -8 then
local h, g, f, e, d, c, b, a = byte(f:read(8),1,8)
- return 256*256*256*256*256*256*256 * a +
- 256*256*256*256*256*256 * b +
- 256*256*256*256*256 * c +
- 256*256*256*256 * d +
- 256*256*256 * e +
- 256*256 * f +
- 256 * g +
- h
+ return 0x100000000000000 * a + 0x1000000000000 * b + 0x10000000000 * c + 0x100000000 * d +
+ 0x1000000 * e + 0x10000 * f + 0x100 * g + h
else
return 0
end
diff --git a/tex/context/base/mkiv/l-lpeg.lua b/tex/context/base/mkiv/l-lpeg.lua
index 959ca553e..c34ba6ad4 100644
--- a/tex/context/base/mkiv/l-lpeg.lua
+++ b/tex/context/base/mkiv/l-lpeg.lua
@@ -187,18 +187,20 @@ local fullstripper = whitespace^0 * C((whitespace^0 * nonwhitespace^1)^0)
----- collapser = Cs(spacer^0/"" * ((spacer^1 * endofstring / "") + (spacer^1/" ") + P(1))^0)
local collapser = Cs(spacer^0/"" * nonspacer^0 * ((spacer^0/" " * nonspacer^1)^0))
+local nospacer = Cs((whitespace^1/"" + nonwhitespace^1)^0)
local b_collapser = Cs( whitespace^0 /"" * (nonwhitespace^1 + whitespace^1/" ")^0)
local e_collapser = Cs((whitespace^1 * P(-1)/"" + nonwhitespace^1 + whitespace^1/" ")^0)
local m_collapser = Cs( (nonwhitespace^1 + whitespace^1/" ")^0)
-local b_stripper = Cs( spacer^0 /"" * (nonspacer^1 + spacer^1/" ")^0)
-local e_stripper = Cs((spacer^1 * P(-1)/"" + nonspacer^1 + spacer^1/" ")^0)
-local m_stripper = Cs( (nonspacer^1 + spacer^1/" ")^0)
+local b_stripper = Cs( spacer^0 /"" * (nonspacer^1 + spacer^1/" ")^0)
+local e_stripper = Cs((spacer^1 * P(-1)/"" + nonspacer^1 + spacer^1/" ")^0)
+local m_stripper = Cs( (nonspacer^1 + spacer^1/" ")^0)
patterns.stripper = stripper
patterns.fullstripper = fullstripper
patterns.collapser = collapser
+patterns.nospacer = nospacer
patterns.b_collapser = b_collapser
patterns.m_collapser = m_collapser
@@ -839,28 +841,48 @@ end
local p_false = P(false)
local p_true = P(true)
-local function make(t)
- local function making(t)
- local p = p_false
- local keys = sortedkeys(t)
- for i=1,#keys do
- local k = keys[i]
- if k ~= "" then
- local v = t[k]
- if v == true then
- p = p + P(k) * p_true
- elseif v == false then
- -- can't happen
- else
- p = p + P(k) * making(v)
- end
- end
- end
- if t[""] then
- p = p + p_true
- end
- return p
- end
+-- local function making(t)
+-- local p = p_false
+-- local keys = sortedkeys(t)
+-- for i=1,#keys do
+-- local k = keys[i]
+-- if k ~= "" then
+-- local v = t[k]
+-- if v == true then
+-- p = p + P(k) * p_true
+-- elseif v == false then
+-- -- can't happen
+-- else
+-- p = p + P(k) * making(v)
+-- end
+-- end
+-- end
+-- if t[""] then
+-- p = p + p_true
+-- end
+-- return p
+-- end
+
+-- local function make(t)
+-- local p = p_false
+-- local keys = sortedkeys(t)
+-- for i=1,#keys do
+-- local k = keys[i]
+-- if k ~= "" then
+-- local v = t[k]
+-- if v == true then
+-- p = p + P(k) * p_true
+-- elseif v == false then
+-- -- can't happen
+-- else
+-- p = p + P(k) * making(v)
+-- end
+-- end
+-- end
+-- return p
+-- end
+
+local function make(t,rest)
local p = p_false
local keys = sortedkeys(t)
for i=1,#keys do
@@ -872,10 +894,13 @@ local function make(t)
elseif v == false then
-- can't happen
else
- p = p + P(k) * making(v)
+ p = p + P(k) * make(v,v[""])
end
end
end
+ if rest then
+ p = p + p_true
+ end
return p
end
@@ -990,21 +1015,21 @@ end
-- local t = { "a", "abc", "ac", "abe", "abxyz", "xy", "bef","aa" }
-- local p = lpeg.Cs((lpeg.utfchartabletopattern(t)/string.upper + 1)^1)
--- inspect(lpegmatch(p,"a"))
--- inspect(lpegmatch(p,"aa"))
--- inspect(lpegmatch(p,"aaaa"))
--- inspect(lpegmatch(p,"ac"))
--- inspect(lpegmatch(p,"bc"))
--- inspect(lpegmatch(p,"zzbczz"))
--- inspect(lpegmatch(p,"zzabezz"))
--- inspect(lpegmatch(p,"ab"))
--- inspect(lpegmatch(p,"abc"))
--- inspect(lpegmatch(p,"abe"))
--- inspect(lpegmatch(p,"xa"))
--- inspect(lpegmatch(p,"bx"))
--- inspect(lpegmatch(p,"bax"))
--- inspect(lpegmatch(p,"abxyz"))
--- inspect(lpegmatch(p,"foobarbefcrap"))
+-- inspect(lpegmatch(p,"a")=="A")
+-- inspect(lpegmatch(p,"aa")=="AA")
+-- inspect(lpegmatch(p,"aaaa")=="AAAA")
+-- inspect(lpegmatch(p,"ac")=="AC")
+-- inspect(lpegmatch(p,"bc")=="bc")
+-- inspect(lpegmatch(p,"zzbczz")=="zzbczz")
+-- inspect(lpegmatch(p,"zzabezz")=="zzABEzz")
+-- inspect(lpegmatch(p,"ab")=="Ab")
+-- inspect(lpegmatch(p,"abc")=="ABC")
+-- inspect(lpegmatch(p,"abe")=="ABE")
+-- inspect(lpegmatch(p,"xa")=="xA")
+-- inspect(lpegmatch(p,"bx")=="bx")
+-- inspect(lpegmatch(p,"bax")=="bAx")
+-- inspect(lpegmatch(p,"abxyz")=="ABXYZ")
+-- inspect(lpegmatch(p,"foobarbefcrap")=="foobArBEFcrAp")
-- local t = { ["^"] = 1, ["^^"] = 2, ["^^^"] = 3, ["^^^^"] = 4 }
-- local p = lpeg.Cs((lpeg.utfchartabletopattern(t)/t + 1)^1)
diff --git a/tex/context/base/mkiv/l-lua.lua b/tex/context/base/mkiv/l-lua.lua
index b90f37e3d..88cde6d1e 100644
--- a/tex/context/base/mkiv/l-lua.lua
+++ b/tex/context/base/mkiv/l-lua.lua
@@ -188,7 +188,7 @@ if lua then
lua.mask = load([[τεχ = 1]]) and "utf" or "ascii"
end
-local flush = io.flush
+local flush = io.flush
if flush then
@@ -198,3 +198,25 @@ if flush then
local popen = io.popen if popen then function io.popen (...) flush() return popen (...) end end
end
+
+-- new
+
+FFISUPPORTED = type(ffi) == "table" and ffi.os ~= "" and ffi.arch ~= "" and ffi.load
+
+if not FFISUPPORTED then
+
+ -- Maybe we should check for LUATEXENGINE but that's also a bti tricky as we still
+ -- can have a weird ffi library laying around. Checking for presence of 'jit' is
+ -- also not robust. So for now we hope for the best.
+
+ local okay ; okay, ffi = pcall(require,"ffi")
+
+ FFISUPPORTED = type(ffi) == "table" and ffi.os ~= "" and ffi.arch ~= "" and ffi.load
+
+end
+
+if not FFISUPPORTED then
+ ffi = nil
+elseif not ffi.number then
+ ffi.number = tonumber
+end
diff --git a/tex/context/base/mkiv/l-md5.lua b/tex/context/base/mkiv/l-md5.lua
index 00272c873..6758fa444 100644
--- a/tex/context/base/mkiv/l-md5.lua
+++ b/tex/context/base/mkiv/l-md5.lua
@@ -48,6 +48,9 @@ do
if not md5.hex then function md5.hex(str) if str then return lpegmatch(bytestohex,md5sum(str)) end end end
if not md5.dec then function md5.dec(str) if str then return lpegmatch(bytestodec,md5sum(str)) end end end
+ md5.sumhexa = md5.hex
+ md5.sumHEXA = md5.HEX
+
end
end
diff --git a/tex/context/base/mkiv/l-number.lua b/tex/context/base/mkiv/l-number.lua
index 001ca31f7..c6f1e3359 100644
--- a/tex/context/base/mkiv/l-number.lua
+++ b/tex/context/base/mkiv/l-number.lua
@@ -13,6 +13,7 @@ local tostring, tonumber = tostring, tonumber
local format, floor, match, rep = string.format, math.floor, string.match, string.rep
local concat, insert = table.concat, table.insert
local lpegmatch = lpeg.match
+local floor = math.floor
number = number or { }
local number = number
@@ -205,3 +206,25 @@ end
function number.bits(n)
return { bits(n,1) }
end
+
+function number.bytetodecimal(b)
+ local d = floor(b * 100 / 255 + 0.5)
+ if d > 100 then
+ return 100
+ elseif d < -100 then
+ return -100
+ else
+ return d
+ end
+end
+
+function number.decimaltobyte(d)
+ local b = floor(d * 255 / 100 + 0.5)
+ if b > 255 then
+ return 255
+ elseif b < -255 then
+ return -255
+ else
+ return b
+ end
+end
diff --git a/tex/context/base/mkiv/l-os.lua b/tex/context/base/mkiv/l-os.lua
index 0a86ea6d6..9b54c9840 100644
--- a/tex/context/base/mkiv/l-os.lua
+++ b/tex/context/base/mkiv/l-os.lua
@@ -119,7 +119,7 @@ end
local execute = os.execute
local iopopen = io.popen
-function os.resultof(command)
+local function resultof(command)
local handle = iopopen(command,"r") -- already has flush
if handle then
local result = handle:read("*all") or ""
@@ -130,9 +130,15 @@ function os.resultof(command)
end
end
+os.resultof = resultof
+
+function os.pipeto(command)
+ return iopopen(command,"w") -- already has flush
+end
+
if not io.fileseparator then
if find(os.getenv("PATH"),";",1,true) then
- io.fileseparator, io.pathseparator, os.type = "\\", ";", os.type or "mswin"
+ io.fileseparator, io.pathseparator, os.type = "\\", ";", os.type or "windows"
else
io.fileseparator, io.pathseparator, os.type = "/" , ":", os.type or "unix"
end
@@ -203,17 +209,17 @@ end })
local name, platform = os.name or "linux", os.getenv("MTX_PLATFORM") or ""
-local function guess()
- local architecture = os.resultof("uname -m") or ""
- if architecture ~= "" then
- return architecture
- end
- architecture = os.getenv("HOSTTYPE") or ""
- if architecture ~= "" then
- return architecture
- end
- return os.resultof("echo $HOSTTYPE") or ""
-end
+-- local function guess()
+-- local architecture = resultof("uname -m") or ""
+-- if architecture ~= "" then
+-- return architecture
+-- end
+-- architecture = os.getenv("HOSTTYPE") or ""
+-- if architecture ~= "" then
+-- return architecture
+-- end
+-- return resultof("echo $HOSTTYPE") or ""
+-- end
-- os.bits = 32 | 64
@@ -245,7 +251,7 @@ elseif name == "linux" then
function resolvers.platform(t,k)
-- we sometimes have HOSTTYPE set so let's check that first
- local platform, architecture = "", os.getenv("HOSTTYPE") or os.resultof("uname -m") or ""
+ local platform, architecture = "", os.getenv("HOSTTYPE") or resultof("uname -m") or ""
if find(architecture,"x86_64",1,true) then
platform = "linux-64"
elseif find(architecture,"ppc",1,true) then
@@ -273,9 +279,9 @@ elseif name == "macosx" then
function resolvers.platform(t,k)
-- local platform, architecture = "", os.getenv("HOSTTYPE") or ""
-- if architecture == "" then
- -- architecture = os.resultof("echo $HOSTTYPE") or ""
+ -- architecture = resultof("echo $HOSTTYPE") or ""
-- end
- local platform, architecture = "", os.resultof("echo $HOSTTYPE") or ""
+ local platform, architecture = "", resultof("echo $HOSTTYPE") or ""
if architecture == "" then
-- print("\nI have no clue what kind of OSX you're running so let's assume an 32 bit intel.\n")
platform = "osx-intel"
@@ -294,7 +300,7 @@ elseif name == "macosx" then
elseif name == "sunos" then
function resolvers.platform(t,k)
- local platform, architecture = "", os.resultof("uname -m") or ""
+ local platform, architecture = "", resultof("uname -m") or ""
if find(architecture,"sparc",1,true) then
platform = "solaris-sparc"
else -- if architecture == 'i86pc'
@@ -308,7 +314,7 @@ elseif name == "sunos" then
elseif name == "freebsd" then
function resolvers.platform(t,k)
- local platform, architecture = "", os.resultof("uname -m") or ""
+ local platform, architecture = "", resultof("uname -m") or ""
if find(architecture,"amd64",1,true) then
platform = "freebsd-amd64"
else
@@ -323,7 +329,7 @@ elseif name == "kfreebsd" then
function resolvers.platform(t,k)
-- we sometimes have HOSTTYPE set so let's check that first
- local platform, architecture = "", os.getenv("HOSTTYPE") or os.resultof("uname -m") or ""
+ local platform, architecture = "", os.getenv("HOSTTYPE") or resultof("uname -m") or ""
if find(architecture,"x86_64",1,true) then
platform = "kfreebsd-amd64"
else
@@ -502,8 +508,10 @@ end
-- These are moved from core-con.lua (as I needed them elsewhere).
-local function isleapyear(year)
- return (year % 400 == 0) or ((year % 100 ~= 0) and (year % 4 == 0))
+local function isleapyear(year) -- timed for bram's cs practicum
+ -- return (year % 400 == 0) or (year % 100 ~= 0 and year % 4 == 0) -- 3:4:1600:1900 = 9.9 : 8.2 : 5.0 : 6.8 (29.9)
+ return (year % 4 == 0) and (year % 100 ~= 0 or year % 400 == 0) -- 3:4:1600:1900 = 5.1 : 6.5 : 8.1 : 10.2 (29.9)
+ -- return (year % 4 == 0) and (year % 400 == 0 or year % 100 ~= 0) -- 3:4:1600:1900 = 5.2 : 8.5 : 6.8 : 10.1 (30.6)
end
os.isleapyear = isleapyear
diff --git a/tex/context/base/mkiv/l-pdfview.lua b/tex/context/base/mkiv/l-pdfview.lua
index 6302fd6f6..d2add9188 100644
--- a/tex/context/base/mkiv/l-pdfview.lua
+++ b/tex/context/base/mkiv/l-pdfview.lua
@@ -44,7 +44,7 @@ if os.type == "windows" then
['okular'] = [[start "test" okular.exe --unique "%filename%"]],
['pdfxcview'] = [[start "test" pdfxcview.exe /A "nolock=yes=OpenParameters" "%filename%"]],
['sumatra'] = [[start "test" sumatrapdf.exe -reuse-instance -bg-color 0xCCCCCC "%filename%"]],
- ['auto'] = [[start "%filename%"]],
+ ['auto'] = [[start "" "%filename%"]],
}
closecalls= {
['default'] = [[pdfclose --file "%filename%"]],
@@ -91,7 +91,7 @@ else
['okular'] = [[okular --unique "%filename%"]],
['sumatra'] = [[wine "sumatrapdf.exe" -reuse-instance -bg-color 0xCCCCCC "%filename%"]],
['pdfxcview'] = [[wine "pdfxcview.exe" /A "nolock=yes=OpenParameters" "%filename%"]],
- ['auto'] = [[open "%filename%"]],
+ ['auto'] = [[open "%filename%"]], -- linux: xdg-open
}
closecalls= {
['default'] = [[pdfclose --file "%filename%"]],
diff --git a/tex/context/base/mkiv/l-sandbox.lua b/tex/context/base/mkiv/l-sandbox.lua
index f7901379c..7a89aa8cd 100644
--- a/tex/context/base/mkiv/l-sandbox.lua
+++ b/tex/context/base/mkiv/l-sandbox.lua
@@ -8,8 +8,8 @@ if not modules then modules = { } end modules ['l-sandbox'] = {
-- We use string instead of function variables, so 'io.open' instead of io.open. That
-- way we can still intercept repetetive overloads. One complication is that when we use
--- sandboxed function sin helpers in the sanbox checkers, we can get a recursion loop
--- so for that vreason we need to keep originals around till we enable the sandbox.
+-- sandboxed functions in helpers in the sanbox checkers, we can get a recursion loop
+-- so for that reason we need to keep originals around till we enable the sandbox.
-- if sandbox then return end
@@ -23,6 +23,8 @@ local format = string.format -- no formatters yet
local concat = table.concat
local sort = table.sort
local gmatch = string.gmatch
+local gsub = string.gsub
+local requiem = require
sandbox = { }
local sandboxed = false
@@ -34,6 +36,7 @@ local originals = { }
local comments = { }
local trace = false
local logger = false
+local blocked = { }
-- this comes real early, so that we can still alias
@@ -139,29 +142,59 @@ function sandbox.overload(func,overload,comment)
return func
end
-function sandbox.initializer(f)
- if not sandboxed then
- initializers[#initializers+1] = f
+local function whatever(specification,what,target)
+ if type(specification) ~= "table" then
+ report("%s needs a specification",what)
+ elseif type(specification.category) ~= "string" or type(specification.action) ~= "function" then
+ report("%s needs a category and action",what)
+ elseif not sandboxed then
+ target[#target+1] = specification
elseif trace then
- report("already enabled, discarding initializer")
+ report("already enabled, discarding %s",what)
end
end
-function sandbox.finalizer(f)
- if not sandboxed then
- finalizers[#finalizers+1] = f
- elseif trace then
- report("already enabled, discarding finalizer")
+function sandbox.initializer(specification)
+ whatever(specification,"initializer",initializers)
+end
+
+function sandbox.finalizer(specification)
+ whatever(specification,"finalizer",finalizers)
+end
+
+function require(name)
+ local n = gsub(name,"^.*[\\/]","")
+ local n = gsub(n,"[%.].*$","")
+ local b = blocked[n]
+ if b == false then
+ return nil -- e.g. ffi
+ elseif b then
+ if trace then
+ report("using blocked: %s",n)
+ end
+ return b
+ else
+ if trace then
+ report("requiring: %s",name)
+ end
+ return requiem(name)
+ end
+end
+
+function blockrequire(name,lib)
+ if trace then
+ report("preventing reload of: %s",name)
end
+ blocked[name] = lib or _G[name] or false
end
function sandbox.enable()
if not sandboxed then
for i=1,#initializers do
- initializers[i]()
+ initializers[i].action()
end
for i=1,#finalizers do
- finalizers[i]()
+ finalizers[i].action()
end
local nnot = 0
local nyes = 0
@@ -189,22 +222,23 @@ function sandbox.enable()
end
if #cyes > 0 then
sort(cyes)
- report(" overloaded known : %s",concat(cyes," | "))
+ report("overloaded known: %s",concat(cyes," | "))
end
if nyes > 0 then
- report(" overloaded unknown : %s",nyes)
+ report("overloaded unknown: %s",nyes)
end
if #cnot > 0 then
sort(cnot)
- report("not overloaded known : %s",concat(cnot," | "))
+ report("not overloaded known: %s",concat(cnot," | "))
end
if nnot > 0 then
- report("not overloaded unknown : %s",nnot)
+ report("not overloaded unknown: %s",nnot)
end
if #skip > 0 then
sort(skip)
- report("not overloaded redefined : %s",concat(skip," | "))
+ report("not overloaded redefined: %s",concat(skip," | "))
end
+ --
initializers = nil
finalizers = nil
originals = nil
@@ -212,6 +246,13 @@ function sandbox.enable()
end
end
+blockrequire("lfs",lfs)
+blockrequire("io",io)
+blockrequire("os",os)
+blockrequire("ffi",ffi)
+
+-- require = register(require,"require")
+
-- we sandbox some of the built-in functions now:
-- todo: require
diff --git a/tex/context/base/mkiv/l-string.lua b/tex/context/base/mkiv/l-string.lua
index e9dc2bbbc..e0fb28445 100644
--- a/tex/context/base/mkiv/l-string.lua
+++ b/tex/context/base/mkiv/l-string.lua
@@ -72,22 +72,27 @@ end
local stripper = patterns.stripper
local fullstripper = patterns.fullstripper
local collapser = patterns.collapser
+local nospacer = patterns.nospacer
local longtostring = patterns.longtostring
function string.strip(str)
- return lpegmatch(stripper,str) or ""
+ return str and lpegmatch(stripper,str) or ""
end
function string.fullstrip(str)
- return lpegmatch(fullstripper,str) or ""
+ return str and lpegmatch(fullstripper,str) or ""
end
function string.collapsespaces(str)
- return lpegmatch(collapser,str) or ""
+ return str and lpegmatch(collapser,str) or ""
+end
+
+function string.nospaces(str)
+ return str and lpegmatch(nospacer,str) or ""
end
function string.longtostring(str)
- return lpegmatch(longtostring,str) or ""
+ return str and lpegmatch(longtostring,str) or ""
end
-- function string.is_empty(str)
@@ -99,7 +104,7 @@ local pattern = P(" ")^0 * P(-1) -- maybe also newlines
-- patterns.onlyspaces = pattern
function string.is_empty(str)
- if str == "" then
+ if not str or str == "" then
return true
else
return lpegmatch(pattern,str) and true or false
@@ -163,7 +168,7 @@ function string.escapedpattern(str,simple)
end
function string.topattern(str,lowercase,strict)
- if str=="" or type(str) ~= "string" then
+ if str == "" or type(str) ~= "string" then
return ".*"
elseif strict then
str = lpegmatch(pattern_c,str)
@@ -177,6 +182,7 @@ function string.topattern(str,lowercase,strict)
end
end
+-- print(string.escapedpattern("abc*234",true))
-- print(string.escapedpattern("12+34*.tex",false))
-- print(string.escapedpattern("12+34*.tex",true))
-- print(string.topattern ("12+34*.tex",false,false))
@@ -211,3 +217,24 @@ end
string.quote = string.quoted
string.unquote = string.unquoted
+
+-- new
+
+if not string.bytetable then
+
+ local limit = 5000 -- we can go to 8000 in luajit and much higher in lua if needed
+
+ function string.bytetable(str)
+ local n = #str
+ if n > limit then
+ local t = { byte(str,1,limit) }
+ for i=limit+1,n do
+ t[i] = byte(str,i)
+ end
+ return t
+ else
+ return { byte(str,1,n) }
+ end
+ end
+
+end
diff --git a/tex/context/base/mkiv/l-table.lua b/tex/context/base/mkiv/l-table.lua
index 552097e1c..3c1ce6daf 100644
--- a/tex/context/base/mkiv/l-table.lua
+++ b/tex/context/base/mkiv/l-table.lua
@@ -478,7 +478,7 @@ function table.fromhash(t)
return hsh
end
-local noquotes, hexify, handle, compact, inline, functions
+local noquotes, hexify, handle, compact, inline, functions, metacheck
local reserved = table.tohash { -- intercept a language inconvenience: no reserved words as key
'and', 'break', 'do', 'else', 'elseif', 'end', 'false', 'for', 'function', 'if',
@@ -486,7 +486,7 @@ local reserved = table.tohash { -- intercept a language inconvenience: no reserv
'NaN', 'goto',
}
--- local function simple_table(t)
+-- local function is_simple_table(t)
-- if #t > 0 then
-- local n = 0
-- for _,v in next, t do
@@ -520,29 +520,67 @@ local reserved = table.tohash { -- intercept a language inconvenience: no reserv
-- return nil
-- end
-local function simple_table(t)
+-- local function is_simple_table(t)
+-- local nt = #t
+-- if nt > 0 then
+-- local n = 0
+-- for _,v in next, t do
+-- n = n + 1
+-- -- if type(v) == "table" then
+-- -- return nil
+-- -- end
+-- end
+-- if n == nt then
+-- local tt = { }
+-- for i=1,nt do
+-- local v = t[i]
+-- local tv = type(v)
+-- if tv == "number" then
+-- if hexify then
+-- tt[i] = format("0x%X",v)
+-- else
+-- tt[i] = tostring(v) -- tostring not needed
+-- end
+-- elseif tv == "string" then
+-- tt[i] = format("%q",v)
+-- elseif tv == "boolean" then
+-- tt[i] = v and "true" or "false"
+-- else
+-- return nil
+-- end
+-- end
+-- return tt
+-- end
+-- end
+-- return nil
+-- end
+
+local function is_simple_table(t,hexify) -- also used in util-tab so maybe public
local nt = #t
if nt > 0 then
local n = 0
- for _,v in next, t do
+ for _, v in next, t do
n = n + 1
- -- if type(v) == "table" then
- -- return nil
- -- end
+ if type(v) == "table" then
+ return nil
+ end
end
+ -- local haszero = t[0]
+ local haszero = rawget(t,0) -- don't trigger meta
if n == nt then
local tt = { }
for i=1,nt do
local v = t[i]
local tv = type(v)
if tv == "number" then
+ -- tt[i] = v -- not needed tostring(v)
if hexify then
tt[i] = format("0x%X",v)
else
- tt[i] = tostring(v) -- tostring not needed
+ tt[i] = v -- not needed tostring(v)
end
elseif tv == "string" then
- tt[i] = format("%q",v)
+ tt[i] = format("%q",v) -- f_string(v)
elseif tv == "boolean" then
tt[i] = v and "true" or "false"
else
@@ -550,11 +588,35 @@ local function simple_table(t)
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)
+ if hexify then
+ tt[i+1] = format("0x%X",v)
+ else
+ tt[i+1] = v -- not needed tostring(v)
+ end
+ 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
end
+table.is_simple_table = is_simple_table
+
-- Because this is a core function of mkiv I moved some function calls
-- inline.
--
@@ -608,7 +670,8 @@ local function do_serialize(root,name,depth,level,indexed)
if compact then
last = #root
for k=1,last do
- if root[k] == nil then
+ -- if root[k] == nil then
+ if rawget(root,k) == nil then
last = k - 1
break
end
@@ -636,7 +699,7 @@ local function do_serialize(root,name,depth,level,indexed)
if next(v) == nil then
handle(format("%s {},",depth))
elseif inline then -- and #t > 0
- local st = simple_table(v)
+ local st = is_simple_table(v,hexify)
if st then
handle(format("%s { %s },",depth,concat(st,", ")))
else
@@ -673,6 +736,8 @@ local function do_serialize(root,name,depth,level,indexed)
else
handle(format("%s [%s]=%s,",depth,k and "true" or "false",v)) -- %.99g
end
+ elseif tk ~= "string" then
+ -- ignore
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
if hexify then
handle(format("%s %s=0x%X,",depth,k,v))
@@ -695,6 +760,8 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk == "boolean" then
handle(format("%s [%s]=%q,",depth,k and "true" or "false",v))
+ elseif tk ~= "string" then
+ -- ignore
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=%q,",depth,k,v))
else
@@ -710,13 +777,15 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk == "boolean" then
handle(format("%s [%s]={},",depth,k and "true" or "false"))
+ elseif tk ~= "string" then
+ -- ignore
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s={},",depth,k))
else
handle(format("%s [%q]={},",depth,k))
end
elseif inline then
- local st = simple_table(v)
+ local st = is_simple_table(v,hexify)
if st then
if tk == "number" then
if hexify then
@@ -726,6 +795,8 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk == "boolean" then
handle(format("%s [%s]={ %s },",depth,k and "true" or "false",concat(st,", ")))
+ elseif tk ~= "string" then
+ -- ignore
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s={ %s },",depth,k,concat(st,", ")))
else
@@ -746,6 +817,8 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk == "boolean" then
handle(format("%s [%s]=%s,",depth,tostring(k),v and "true" or "false"))
+ elseif tk ~= "string" then
+ -- ignore
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=%s,",depth,k,v and "true" or "false"))
else
@@ -763,6 +836,8 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk == "boolean" then
handle(format("%s [%s]=load(%q),",depth,k and "true" or "false",f))
+ elseif tk ~= "string" then
+ -- ignore
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=load(%q),",depth,k,f))
else
@@ -778,6 +853,8 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk == "boolean" then
handle(format("%s [%s]=%q,",depth,k and "true" or "false",tostring(v)))
+ elseif tk ~= "string" then
+ -- ignore
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=%q,",depth,k,tostring(v)))
else
@@ -803,6 +880,7 @@ local function serialize(_handle,root,name,specification) -- handle wins
functions = specification.functions
compact = specification.compact
inline = specification.inline and compact
+ metacheck = specification.metacheck
if functions == nil then
functions = true
end
@@ -812,6 +890,9 @@ local function serialize(_handle,root,name,specification) -- handle wins
if inline == nil then
inline = compact
end
+ if metacheck == nil then
+ metacheck = true
+ end
else
noquotes = false
hexify = false
@@ -819,6 +900,7 @@ local function serialize(_handle,root,name,specification) -- handle wins
compact = true
inline = true
functions = true
+ metacheck = true
end
if tname == "string" then
if name == "return" then
@@ -843,8 +925,9 @@ local function serialize(_handle,root,name,specification) -- handle wins
end
if root then
-- The dummy access will initialize a table that has a delayed initialization
- -- using a metatable. (maybe explicitly test for metatable)
- if getmetatable(root) then -- todo: make this an option, maybe even per subtable
+ -- using a metatable. (maybe explicitly test for metatable). This can crash on
+ -- metatables that check the index against a number.
+ if metacheck and getmetatable(root) then
local dummy = root._w_h_a_t_e_v_e_r_
root._w_h_a_t_e_v_e_r_ = nil
end
@@ -950,6 +1033,41 @@ end
table.flattened = flattened
+local function collapsed(t,f,h)
+ if f == nil then
+ f = { }
+ h = { }
+ end
+ for k=1,#t do
+ local v = t[k]
+ if type(v) == "table" then
+ collapsed(v,f,h)
+ elseif not h[v] then
+ f[#f+1] = v
+ h[v] = true
+ end
+ end
+ return f
+end
+
+local function collapsedhash(t,h)
+ if h == nil then
+ h = { }
+ end
+ for k=1,#t do
+ local v = t[k]
+ if type(v) == "table" then
+ collapsedhash(v,h)
+ else
+ h[v] = true
+ end
+ end
+ return h
+end
+
+table.collapsed = collapsed -- 20% faster than unique(collapsed(t))
+table.collapsedhash = collapsedhash
+
local function unnest(t,f) -- only used in mk, for old times sake
if not f then -- and only relevant for token lists
f = { } -- this one can become obsolete
@@ -1056,7 +1174,7 @@ function table.count(t)
return n
end
-function table.swapped(t,s) -- hash
+function table.swapped(t,s) -- hash, we need to make sure we don't mess up next
local n = { }
if s then
for k, v in next, s do
@@ -1069,7 +1187,14 @@ function table.swapped(t,s) -- hash
return n
end
-function table.mirrored(t) -- hash
+function table.hashed(t) -- list, add hash to index (save because we are not yet mixed
+ for i=1,#t do
+ t[t[i]] = i
+ end
+ return t
+end
+
+function table.mirrored(t) -- hash, we need to make sure we don't mess up next
local n = { }
for k, v in next, t do
n[v] = k
@@ -1165,7 +1290,7 @@ function table.has_one_entry(t)
return t and next(t,next(t)) == nil
end
--- new
+-- new (rather basic, not indexed and nested)
function table.loweredkeys(t) -- maybe utf
local l = { }
diff --git a/tex/context/base/mkiv/l-unicode.lua b/tex/context/base/mkiv/l-unicode.lua
index 3dec80013..b913d0cfc 100644
--- a/tex/context/base/mkiv/l-unicode.lua
+++ b/tex/context/base/mkiv/l-unicode.lua
@@ -1270,3 +1270,35 @@ function utf.chrlen(u) -- u is number
(u < 0xFC and 5) or
(u < 0xFE and 6) or 0
end
+
+-- hashing saves a little but not that much in practice
+--
+-- local utf32 = table.setmetatableindex(function(t,k) local v = toutf32(k) t[k] = v return v end)
+
+local extract = bit32.extract
+local char = string.char
+
+function unicode.toutf32string(n)
+ if n <= 0xFF then
+ return
+ char(n) ..
+ "\000\000\000"
+ elseif n <= 0xFFFF then
+ return
+ char(extract(n, 0,8)) ..
+ char(extract(n, 8,8)) ..
+ "\000\000"
+ elseif n <= 0xFFFFFF then
+ return
+ char(extract(n, 0,8)) ..
+ char(extract(n, 8,8)) ..
+ char(extract(n,16,8)) ..
+ "\000"
+ else
+ return
+ char(extract(n, 0,8)) ..
+ char(extract(n, 8,8)) ..
+ char(extract(n,16,8)) ..
+ char(extract(n,24,8))
+ end
+end
diff --git a/tex/context/base/mkiv/lang-cnt.lua b/tex/context/base/mkiv/lang-cnt.lua
new file mode 100644
index 000000000..21de6c2d1
--- /dev/null
+++ b/tex/context/base/mkiv/lang-cnt.lua
@@ -0,0 +1,164 @@
+if not modules then modules = { } end modules ['lang-cnt'] = {
+ version = 1.001,
+ comment = "companion to lang-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- This is generated with help from ctx-checkedcombined.lua (an ugly local
+-- helper script).
+
+-- We don't really need this as we compose and decompose already. The only
+-- exception are the ae etc but these can best be entered in their unicode
+-- form anyway. So, even if we can support hjcodes with counts is is not
+-- needed in practice. It's anyway debatable if æ should be seen as one
+-- character or two. And ffi and ij and such are not used in patterns anyway.
+
+languages = languages or { }
+
+languages.hjcounts = { -- used: used in registered unicode characters
+ --
+ [0x000C6] = { category = "letter", count = 2 }, -- Æ
+ [0x000E6] = { category = "letter", count = 2 }, -- æ
+ --
+ [0x01E9E] = { category = "letter", count = 2 }, -- ẞ
+ [0x000DF] = { category = "letter", count = 2 }, -- ß
+ --
+ [0x00132] = { category = "dubious", count = 2 }, -- IJ
+ [0x00133] = { category = "dubious", count = 2 }, -- ij
+ --
+ [0x00152] = { category = "dubious", count = 2 }, -- Œ
+ [0x00153] = { category = "dubious", count = 2 }, -- œ
+ --
+ [0x001C7] = { category = "letter", count = 2 }, -- LJ
+ [0x001C8] = { category = "letter", count = 2 }, -- Lj
+ [0x001C9] = { category = "letter", count = 2 }, -- lj
+ --
+ [0x001CA] = { category = "letter", count = 2 }, -- NJ
+ [0x001CC] = { category = "letter", count = 2 }, -- nj
+ -- not in patterns
+ [0x0FB01] = { category = "ligature", count = 2 }, -- fi
+ [0x0FB02] = { category = "ligature", count = 2 }, -- fl
+ [0x0FB03] = { category = "ligature", count = 3 }, -- ffi
+ [0x0FB04] = { category = "ligature", count = 3 }, -- ffl
+ [0x0FB06] = { category = "ligature", count = 2 }, -- st
+ --
+ [0x00300] = { category = "combining", count = 0, used = true }, -- ̀
+ [0x00301] = { category = "combining", count = 0, used = true }, -- ́
+ [0x00302] = { category = "combining", count = 0, used = true }, -- ̂
+ [0x00303] = { category = "combining", count = 0, used = true }, -- ̃
+ [0x00304] = { category = "combining", count = 0, used = true }, -- ̄
+ [0x00305] = { category = "combining", count = 0, used = false }, -- ̅
+ [0x00306] = { category = "combining", count = 0, used = true }, -- ̆
+ [0x00307] = { category = "combining", count = 0, used = true }, -- ̇
+ [0x00308] = { category = "combining", count = 0, used = true }, -- ̈
+ [0x00309] = { category = "combining", count = 0, used = true }, -- ̉
+ [0x0030A] = { category = "combining", count = 0, used = true }, -- ̊
+ [0x0030B] = { category = "combining", count = 0, used = true }, -- ̋
+ [0x0030C] = { category = "combining", count = 0, used = true }, -- ̌
+ [0x0030D] = { category = "combining", count = 0, used = false }, -- ̍
+ [0x0030E] = { category = "combining", count = 0, used = false }, -- ̎
+ [0x0030F] = { category = "combining", count = 0, used = true }, -- ̏
+ [0x00310] = { category = "combining", count = 0, used = false }, -- ̐
+ [0x00311] = { category = "combining", count = 0, used = true }, -- ̑
+ [0x00312] = { category = "combining", count = 0, used = false }, -- ̒
+ [0x00313] = { category = "combining", count = 0, used = true }, -- ̓
+ [0x00314] = { category = "combining", count = 0, used = true }, -- ̔
+ [0x00315] = { category = "combining", count = 0, used = false }, -- ̕
+ [0x00316] = { category = "combining", count = 0, used = false }, -- ̖
+ [0x00317] = { category = "combining", count = 0, used = false }, -- ̗
+ [0x00318] = { category = "combining", count = 0, used = false }, -- ̘
+ [0x00319] = { category = "combining", count = 0, used = false }, -- ̙
+ [0x0031A] = { category = "combining", count = 0, used = false }, -- ̚
+ [0x0031B] = { category = "combining", count = 0, used = true }, -- ̛
+ [0x0031C] = { category = "combining", count = 0, used = false }, -- ̜
+ [0x0031D] = { category = "combining", count = 0, used = false }, -- ̝
+ [0x0031E] = { category = "combining", count = 0, used = false }, -- ̞
+ [0x0031F] = { category = "combining", count = 0, used = false }, -- ̟
+ [0x00320] = { category = "combining", count = 0, used = false }, -- ̠
+ [0x00321] = { category = "combining", count = 0, used = false }, -- ̡
+ [0x00322] = { category = "combining", count = 0, used = false }, -- ̢
+ [0x00323] = { category = "combining", count = 0, used = true }, -- ̣
+ [0x00324] = { category = "combining", count = 0, used = true }, -- ̤
+ [0x00325] = { category = "combining", count = 0, used = true }, -- ̥
+ [0x00326] = { category = "combining", count = 0, used = true }, -- ̦
+ [0x00327] = { category = "combining", count = 0, used = true }, -- ̧
+ [0x00328] = { category = "combining", count = 0, used = true }, -- ̨
+ [0x00329] = { category = "combining", count = 0, used = false }, -- ̩
+ [0x0032A] = { category = "combining", count = 0, used = false }, -- ̪
+ [0x0032B] = { category = "combining", count = 0, used = false }, -- ̫
+ [0x0032C] = { category = "combining", count = 0, used = false }, -- ̬
+ [0x0032D] = { category = "combining", count = 0, used = true }, -- ̭
+ [0x0032E] = { category = "combining", count = 0, used = true }, -- ̮
+ [0x0032F] = { category = "combining", count = 0, used = false }, -- ̯
+ [0x00330] = { category = "combining", count = 0, used = true }, -- ̰
+ [0x00331] = { category = "combining", count = 0, used = true }, -- ̱
+ [0x00332] = { category = "combining", count = 0, used = false }, -- ̲
+ [0x00333] = { category = "combining", count = 0, used = false }, -- ̳
+ [0x00334] = { category = "combining", count = 0, used = false }, -- ̴
+ [0x00335] = { category = "combining", count = 0, used = false }, -- ̵
+ [0x00336] = { category = "combining", count = 0, used = false }, -- ̶
+ [0x00337] = { category = "combining", count = 0, used = false }, -- ̷
+ [0x00338] = { category = "combining", count = 0, used = false }, -- ̸
+ [0x00339] = { category = "combining", count = 0, used = false }, -- ̹
+ [0x0033A] = { category = "combining", count = 0, used = false }, -- ̺
+ [0x0033B] = { category = "combining", count = 0, used = false }, -- ̻
+ [0x0033C] = { category = "combining", count = 0, used = false }, -- ̼
+ [0x0033D] = { category = "combining", count = 0, used = false }, -- ̽
+ [0x0033E] = { category = "combining", count = 0, used = false }, -- ̾
+ [0x0033F] = { category = "combining", count = 0, used = false }, -- ̿
+ [0x00340] = { category = "combining", count = 0, used = false }, -- ̀
+ [0x00341] = { category = "combining", count = 0, used = false }, -- ́
+ [0x00342] = { category = "combining", count = 0, used = true }, -- ͂
+ [0x00343] = { category = "combining", count = 0, used = false }, -- ̓
+ [0x00344] = { category = "combining", count = 0, used = false }, -- ̈́
+ [0x00345] = { category = "combining", count = 0, used = true }, -- ͅ
+ [0x00346] = { category = "combining", count = 0, used = false }, -- ͆
+ [0x00347] = { category = "combining", count = 0, used = false }, -- ͇
+ [0x00348] = { category = "combining", count = 0, used = false }, -- ͈
+ [0x00349] = { category = "combining", count = 0, used = false }, -- ͉
+ [0x0034A] = { category = "combining", count = 0, used = false }, -- ͊
+ [0x0034B] = { category = "combining", count = 0, used = false }, -- ͋
+ [0x0034C] = { category = "combining", count = 0, used = false }, -- ͌
+ [0x0034D] = { category = "combining", count = 0, used = false }, -- ͍
+ [0x0034E] = { category = "combining", count = 0, used = false }, -- ͎
+ [0x0034F] = { category = "combining", count = 0, used = false }, -- ͏
+ [0x00350] = { category = "combining", count = 0, used = false }, -- ͐
+ [0x00351] = { category = "combining", count = 0, used = false }, -- ͑
+ [0x00352] = { category = "combining", count = 0, used = false }, -- ͒
+ [0x00353] = { category = "combining", count = 0, used = false }, -- ͓
+ [0x00354] = { category = "combining", count = 0, used = false }, -- ͔
+ [0x00355] = { category = "combining", count = 0, used = false }, -- ͕
+ [0x00356] = { category = "combining", count = 0, used = false }, -- ͖
+ [0x00357] = { category = "combining", count = 0, used = false }, -- ͗
+ [0x00358] = { category = "combining", count = 0, used = false }, -- ͘
+ [0x00359] = { category = "combining", count = 0, used = false }, -- ͙
+ [0x0035A] = { category = "combining", count = 0, used = false }, -- ͚
+ [0x0035B] = { category = "combining", count = 0, used = false }, -- ͛
+ [0x0035C] = { category = "combining", count = 0, used = false }, -- ͜
+ [0x0035D] = { category = "combining", count = 0, used = false }, -- ͝
+ [0x0035E] = { category = "combining", count = 0, used = false }, -- ͞
+ [0x0035F] = { category = "combining", count = 0, used = false }, -- ͟
+ [0x00360] = { category = "combining", count = 0, used = false }, -- ͠
+ [0x00361] = { category = "combining", count = 0, used = false }, -- ͡
+ [0x00362] = { category = "combining", count = 0, used = false }, -- ͢
+ [0x00363] = { category = "combining", count = 0, used = false }, -- ͣ
+ [0x00364] = { category = "combining", count = 0, used = false }, -- ͤ
+ [0x00365] = { category = "combining", count = 0, used = false }, -- ͥ
+ [0x00366] = { category = "combining", count = 0, used = false }, -- ͦ
+ [0x00367] = { category = "combining", count = 0, used = false }, -- ͧ
+ [0x00368] = { category = "combining", count = 0, used = false }, -- ͨ
+ [0x00369] = { category = "combining", count = 0, used = false }, -- ͩ
+ [0x0036A] = { category = "combining", count = 0, used = false }, -- ͪ
+ [0x0036B] = { category = "combining", count = 0, used = false }, -- ͫ
+ [0x0036C] = { category = "combining", count = 0, used = false }, -- ͬ
+ [0x0036D] = { category = "combining", count = 0, used = false }, -- ͭ
+ [0x0036E] = { category = "combining", count = 0, used = false }, -- ͮ
+ [0x0036F] = { category = "combining", count = 0, used = false }, -- ͯ
+ [0x00483] = { category = "combining", count = 0, used = false }, -- ҃
+ [0x00484] = { category = "combining", count = 0, used = false }, -- ҄
+ [0x00485] = { category = "combining", count = 0, used = false }, -- ҅
+ [0x00486] = { category = "combining", count = 0, used = false }, -- ҆
+ [0x00487] = { category = "combining", count = 0, used = false }, -- ҇
+}
diff --git a/tex/context/base/mkiv/lang-def.mkiv b/tex/context/base/mkiv/lang-def.mkiv
index 5e40a33b0..96bb88767 100644
--- a/tex/context/base/mkiv/lang-def.mkiv
+++ b/tex/context/base/mkiv/lang-def.mkiv
@@ -134,7 +134,6 @@
\c!rightquotation=\rightguillemot,
\c!date={\v!day,{.},\space,\v!month,\space,\v!year}]
-
\installlanguage [\s!no] [\s!nb]
\installlanguage [\s!norwegian] [\s!nb]
\installlanguage [\s!bokmal] [\s!nb]
@@ -399,6 +398,23 @@
\installlanguage [\s!arabic] [\s!ar]
+\installlanguage
+ [\s!pe]
+ [\c!spacing=\v!broad,
+ \c!leftsentence=\emdash,
+ \c!rightsentence=\emdash,
+ \c!leftsubsentence=\emdash,
+ \c!rightsubsentence=\emdash,
+ \c!leftquote=\leftguillemot,
+ \c!rightquote=\rightguillemot,
+ \c!leftquotation=\leftguillemot,
+ \c!rightquotation=\rightguillemot,
+ \c!date={\v!day,\space,\v!month,\space,\v!year}]
+
+\installlanguage [\s!persian] [\s!pe]
+\installlanguage [\s!fa] [\s!pe] % these two are redundant but sometimes might
+\installlanguage [\s!farsi] [\s!fa] % sound more natural .. best set labels to 'pe'
+
% Just aliases to "ar" for now
\installlanguage[\s!ar-ae][\c!default=\s!ar] % U.A.E.
@@ -414,6 +430,12 @@
\installlanguage[\s!ar-tn][\c!default=\s!ar] % Tunisia
\installlanguage[\s!ar-ye][\c!default=\s!ar] % Yemen
+% Farsi (Persian)
+
+\installlanguage[\s!ar-ir][\c!default=\s!pe]
+%installlanguage[\s!pe-ir][\c!default=\s!pe]
+%installlanguage[\s!fa-ir][\c!default=\s!fa]
+
% Syriac months
\installlanguage[\s!ar-sy][\c!default=\s!ar] % Syria
@@ -450,6 +472,8 @@
% Celtic: Breton, Welsh, Irish, Manx, Scottish Gaelic
+% CJK: Chinese, Japanese, Korean
+
\installlanguage
[\s!cn]
[\c!leftsentence=——,
@@ -487,6 +511,10 @@
% \c!date={서기,\space,\v!year,\labeltext{\v!year},\space,\v!month,\labeltext{\v!month},\space,\v!day,\labeltext{\v!day}}]
\c!date={\v!year,\labeltext{\v!year},\space,\v!month,\labeltext{\v!month},\space,\v!day,\labeltext{\v!day}}]
+\installlanguage [\s!chinese] [\s!cn]
+\installlanguage [\s!japanese] [\s!ja]
+\installlanguage [\s!korean] [\s!kr]
+
% Greek
\installlanguage
@@ -496,10 +524,10 @@
\c!rightsentence=\emdash,
\c!leftsubsentence=\emdash,
\c!rightsubsentence=\emdash,
- \c!leftquote=\greekleftquot,
- \c!rightquote=\greekrightquot,
- \c!leftquotation=\greekleftquot,
- \c!rightquotation=\greekrightquot,
+ \c!leftquote=“,
+ \c!rightquote=”,
+ \c!leftquotation=«,
+ \c!rightquotation=»,
\c!date={\v!day\space\v!month\space\v!year},
\s!patterns=\s!agr] % ok?
diff --git a/tex/context/base/mkiv/lang-dis.lua b/tex/context/base/mkiv/lang-dis.lua
index 84d9b2d5b..e2c0d220e 100644
--- a/tex/context/base/mkiv/lang-dis.lua
+++ b/tex/context/base/mkiv/lang-dis.lua
@@ -12,7 +12,9 @@ local nodes = nodes
local tasks = nodes.tasks
local nuts = nodes.nuts
-local nodepool = nuts.pool
+
+local enableaction = tasks.enableaction
+local setaction = tasks.setaction
local tonode = nuts.tonode
local tonut = nuts.tonut
@@ -27,22 +29,31 @@ local getattr = nuts.getattr
local getsubtype = nuts.getsubtype
local setsubtype = nuts.setsubtype
local getchar = nuts.getchar
+local setchar = nuts.setchar
local getdisc = nuts.getdisc
local setdisc = nuts.setdisc
+local getlang = nuts.setlang
+local getboth = nuts.getboth
+local setlist = nuts.setlist
+local setlink = nuts.setlink
local isglyph = nuts.isglyph
local copy_node = nuts.copy
-local free_node = nuts.free
local remove_node = nuts.remove
local traverse_id = nuts.traverse_id
-local traverse_nodes = nuts.traverse
+local flush_list = nuts.flush_list
+local flush_node = nuts.flush_node
local nodecodes = nodes.nodecodes
local disccodes = nodes.disccodes
local disc_code = nodecodes.disc
local glyph_code = nodecodes.glyph
+
local discretionary_code = disccodes.discretionary
+local explicit_code = disccodes.explicit
+local automatic_code = disccodes.automatic
+local regular_code = disccodes.regular
local a_visualize = attributes.private("visualizediscretionary")
local setattribute = tex.setattribute
@@ -51,135 +62,158 @@ local getlanguagedata = languages.getdata
local check_regular = true
-local expanders = {
- [disccodes.discretionary] = function(d,template)
- -- \discretionary
- return template
- end,
- [disccodes.explicit] = function(d,template)
- -- \-
- 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
+local expanders -- this will go away
+
+-- the penalty has been determined by the mode (currently we force 1):
+--
+-- 0 : exhyphenpenalty
+-- 1 : hyphenpenalty
+-- 2 : automatichyphenpenalty
+--
+-- following a - : the pre and post chars are already appended and set
+-- 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 LUATEXVERSION < 1.005 then
+
+ expanders = {
+ [discretionary_code] = function(d,template)
+ -- \discretionary
+ return template
+ end,
+ [explicit_code] = function(d,template)
+ -- \-
+ local pre, post, replace = getdisc(d)
+ local done = false
+ if pre then
+ local char = isglyph(pre)
+ if char and char <= 0 then
+ done = true
+ flush_list(pre)
+ pre = nil
+ end
end
- end
- if post then
- local char = isglyph(post)
- if char and char <= 0 then
- done = true
- post = nil
+ if post then
+ local char = isglyph(post)
+ if char and char <= 0 then
+ done = true
+ flush_list(post)
+ post = nil
+ end
end
- end
- if done then
- setdisc(d,pre,post,replace,discretionary_code,tex.exhyphenpenalty)
- end
- return template
- end,
- [disccodes.automatic] = function(d,template)
- -- following a - : the pre and post chars are already appended and set
- -- 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
- 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
- -- can there be font kerns already?
- template = getprev(d)
- if template and getid(template) ~= glyph_code then
- template = getnext(d)
+ if done then
+ -- todo: take existing penalty
+ setdisc(d,pre,post,replace,explicit_code,tex.exhyphenpenalty)
+ else
+ setsubtype(d,explicit_code)
+ end
+ return template
+ end,
+ [automatic_code] = function(d,template)
+ 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
+ -- 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 pseudohead = getprev(template)
- if pseudohead then
- while template ~= d do
- pseudohead, template, removed = remove_node(pseudohead,template)
- -- free old replace ?
- replace = removed
- -- break ?
+ if template then
+ local pseudohead = getprev(template)
+ if pseudohead then
+ while template ~= d do
+ pseudohead, template, removed = remove_node(pseudohead,template)
+ -- free old replace ?
+ replace = removed
+ -- break ?
+ end
+ else
+ -- can't happen
end
+ setdisc(d,pre,post,replace,automatic_code,tex.hyphenpenalty)
else
- -- can't happen
+ -- print("lone regular discretionary ignored")
end
- setdisc(d,pre,post,replace,discretionary_code,tex.hyphenpenalty)
else
- -- print("lone regular discretionary ignored")
+ setdisc(d,pre,post,replace,automatic_code,tex.hyphenpenalty)
end
- else
- setdisc(d,pre,post,replace,discretionary_code,tex.hyphenpenalty)
- end
- return template
- end,
- [disccodes.regular] = function(d,template)
- 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 = getnext(d)
+ return template
+ end,
+ [regular_code] = function(d,template)
+ 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
- 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)
+ if template then
+ local language = template and getlang(template)
+ 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,regular_code,tex.hyphenpenalty)
+ end
+ else
+ -- print("lone regular discretionary ignored")
end
- else
- -- print("lone regular discretionary ignored")
+ return template
end
- return template
- else
- -- maybe also set penalty here
- setsubtype(d,discretionary_code)
+ end,
+ [disccodes.first] = function()
+ -- forget about them
+ end,
+ [disccodes.second] = function()
+ -- forget about them
+ end,
+ }
+
+ function languages.expand(d,template,subtype)
+ if not subtype then
+ subtype = getsubtype(d)
end
- end,
- [disccodes.first] = function()
- -- forget about them
- end,
- [disccodes.second] = function()
- -- forget about them
- end,
-}
+ if subtype ~= discretionary_code then
+ return expanders[subtype](d,template)
+ end
+ end
-languages.expanders = expanders
+else
-function languages.expand(d,template,subtype)
- if not subtype then
- subtype = getsubtype(d)
- end
- if subtype ~= discretionary_code then
- return expanders[subtype](d,template)
+ function languages.expand()
+ -- nothing to be fixed
end
+
end
+languages.expanders = expanders
+
+-- -- -- -- --
+
local setlistcolor = nodes.tracers.colors.setlist
function languages.visualizediscretionaries(head)
@@ -206,7 +240,7 @@ function languages.showdiscretionaries(v)
setattribute(a_visualize,unsetvalue)
else -- also nil
if not enabled then
- nodes.tasks.enableaction("processors","languages.visualizediscretionaries")
+ enableaction("processors","languages.visualizediscretionaries")
enabled = true
end
setattribute(a_visualize,1)
@@ -229,3 +263,65 @@ function languages.serializediscretionary(d) -- will move to tracer
)
end
+-- --
+
+local wiped = 0
+
+local function wipe(head,delayed)
+ local p, n = getboth(delayed)
+ local _, _, h, _, _, t = getdisc(delayed,true)
+ if p or n then
+ if h then
+ setlink(p,h)
+ setlink(t,n)
+ setfield(delayed,"replace")
+ else
+ setlink(p,n)
+ end
+ end
+ if head == delayed then
+ head = h
+ end
+ wiped = wiped + 1
+ flush_node(delayed)
+ return head
+end
+
+function languages.flatten(head)
+ local nuthead = tonut(head)
+ local delayed = nil
+ for d in traverse_id(disc_code,nuthead) do
+ if delayed then
+ nuthead = wipe(nuthead,delayed)
+ end
+ delayed = d
+ end
+ if delayed then
+ return tonode(wipe(nuthead,delayed)), true
+ else
+ return head, false
+ end
+end
+
+function languages.nofflattened()
+ return wiped -- handy for testing
+end
+
+-- experiment
+
+local flatten = languages.flatten
+local getlist = nodes.getlist
+
+nodes.handlers.flattenline = flatten
+
+function nodes.handlers.flatten(head,where)
+ if head and (where == "box" or where == "adjusted_hbox") then
+ return flatten(head)
+ end
+ return true
+end
+
+directives.register("hyphenator.flatten",function(v)
+ setaction("processors","nodes.handlers.flatten",v)
+ setaction("contributers","nodes.handlers.flattenline",v)
+end)
diff --git a/tex/context/base/mkiv/lang-frq-pt.lua b/tex/context/base/mkiv/lang-frq-pt.lua
new file mode 100644
index 000000000..ce4e7aa26
--- /dev/null
+++ b/tex/context/base/mkiv/lang-frq-pt.lua
@@ -0,0 +1,12 @@
+return {
+ language = "pt",
+ source = "https://pt.wikipedia.org/wiki/Frequência_de_letras",
+ frequencies = {
+ [0x61] = 14.63, [0x62] = 1.04, [0x63] = 3.88, [0x64] = 4.99, [0x65] = 12.57,
+ [0x66] = 1.02, [0x67] = 1.30, [0x68] = 1.28, [0x69] = 6.18, [0x6A] = 0.40,
+ [0x6B] = 0.02, [0x6C] = 2.78, [0x6D] = 4.74, [0x6E] = 5.05, [0x6F] = 10.73,
+ [0x70] = 2.52, [0x71] = 1.20, [0x72] = 6.53, [0x73] = 7.81, [0x74] = 4.74,
+ [0x75] = 4.63, [0x76] = 1.67, [0x77] = 0.01, [0x78] = 0.21, [0x79] = 0.01,
+ [0x7A] = 0.47,
+ }
+}
diff --git a/tex/context/base/mkiv/lang-hyp.lua b/tex/context/base/mkiv/lang-hyp.lua
index 146aea4a8..b85295f19 100644
--- a/tex/context/base/mkiv/lang-hyp.lua
+++ b/tex/context/base/mkiv/lang-hyp.lua
@@ -6,14 +6,6 @@ if not modules then modules = { } end modules ['lang-hyp'] = {
license = "see context related readme files"
}
--- 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
-
-- In an automated workflow hypenation of long titles can be somewhat problematic
-- especially when demands conflict. For that reason I played a bit with a Lua based
-- variant of the traditional hyphenation machinery. This mechanism has been extended
@@ -24,7 +16,11 @@ if not modules then modules = { } end modules ['lang-hyp'] = {
-- Being the result of two days experimenting the following implementation is probably
-- not completely okay yet. If there is demand I might add some more features and plugs.
-- The performance is quite okay but can probably improved a bit, although this is not
--- the most critital code.
+-- the most critital code. For instance, on a metafun manual run the overhead is about
+-- 0.3 seconds on 19 seconds which is not that bad.
+--
+-- In the procecess of wrapping up (for the ctx conference proceedings) I cleaned up
+-- and extended the code a bit. It can be used in production.
--
-- . a l g o r i t h m .
-- 4l1g4
@@ -45,8 +41,38 @@ if not modules then modules = { } end modules ['lang-hyp'] = {
--
-- ab1cd/ef=gh,2,2 : acd - efd (pattern/replacement,start,length
--
--- In the procecess of wrapping up (for the ctx conference proceedings) I cleaned up
--- and extended the code a bit.
+-- todo : support hjcodes (<32 == length) like luatex does now (no need/demand so far)
+-- maybe : support hyphenation over range (can alsready be done using attributes/language)
+-- maybe : reset dictionary.hyphenated when a pattern is added and/or forced reset option
+-- todo : check subtypes (because they have subtle meanings in the line breaking)
+--
+-- word start (in tex engine):
+--
+-- boundary : yes when wordboundary
+-- hlist : when hyphenationbounds 1 or 3
+-- vlist : when hyphenationbounds 1 or 3
+-- rule : when hyphenationbounds 1 or 3
+-- dir : when hyphenationbounds 1 or 3
+-- whatsit : when hyphenationbounds 1 or 3
+-- glue : yes
+-- math : skipped
+-- glyph : exhyphenchar (one only) : yes (so no -- ---)
+-- otherwise : yes
+--
+-- word end (in tex engine):
+--
+-- boundary : yes
+-- glyph : yes when different language
+-- glue : yes
+-- penalty : yes
+-- kern : yes when not italic (for some historic reason)
+-- hlist : when hyphenationbounds 2 or 3
+-- vlist : when hyphenationbounds 2 or 3
+-- rule : when hyphenationbounds 2 or 3
+-- dir : when hyphenationbounds 2 or 3
+-- whatsit : when hyphenationbounds 2 or 3
+-- ins : when hyphenationbounds 2 or 3
+-- adjust : when hyphenationbounds 2 or 3
local type, rawset, tonumber, next = type, rawset, tonumber, next
@@ -286,15 +312,14 @@ function traditional.lasttrace()
return steps
end
--- We could reuse the w table but as we cache the resolved words
--- there is not much gain in that complication.
+-- We could reuse the w table but as we cache the resolved words there is not much gain in
+-- that complication.
--
--- Beware: word can be a table and when n is passed to we can
--- assume reuse so we need to honor that n then.
-
--- todo: a fast variant for tex ... less lookups (we could check is
--- dictionary has changed) ... although due to caching the already
--- done words, we don't do much here
+-- Beware: word can be a table and when n is passed to we can assume reuse so we need to
+-- honor that n then.
+--
+-- todo: a fast variant for tex ... less lookups (we could check is dictionary has changed)
+-- ... although due to caching the already done words, we don't do much here
local function hyphenate(dictionary,word,n) -- odd is okay
nofwords = nofwords + 1
@@ -331,11 +356,11 @@ local function hyphenate(dictionary,word,n) -- odd is okay
end
local l = 1
local w = { "." }
- -- local d = dictionary.codehash or lcchars[c]
+ -- local d = dictionary.codehash
for i=1,n do
local c = word[i]
+ -- l = l + (d[c] or 1)
l = l + 1
- -- w[l] = d[c] or c -- needs testing
w[l] = lcchars[c] or c
end
l = l + 1
@@ -367,7 +392,6 @@ local function hyphenate(dictionary,word,n) -- odd is okay
local specials = dictionary.specials
local patterns = dictionary.patterns
--
--- inspect(specials)
local spec
for i=1,l do
for j=i,l do
@@ -378,15 +402,14 @@ local function hyphenate(dictionary,word,n) -- odd is okay
if not done then
done = { }
spec = nil
- -- the string that we resolve has explicit fences (.) so
- -- done starts at the first fence and runs upto the last
- -- one so we need one slot less
+ -- the string that we resolve has explicit fences (.) so done starts at
+ -- the first fence and runs upto the last one so we need one slot less
for i=1,l do
done[i] = 0
end
end
- -- we run over the pattern that always has a (zero) value for
- -- each character plus one more as we look at both sides
+ -- we run over the pattern that always has a (zero) value for each character
+ -- plus one more as we look at both sides
for k=1,#m do
local new = m[k]
if not new then
@@ -492,8 +515,8 @@ function traditional.injecthyphens(dictionary,word,specification)
return word
end
- -- the following code is similar to code later on but here we have
- -- strings while there we have hyphen specs
+ -- the following code is similar to code later on but here we have strings while there
+ -- we have hyphen specs
local word = lpegmatch(p_split,word)
local size = #word
@@ -603,8 +626,8 @@ if context then
local discretionary_code = disccodes.discretionary
local explicit_code = disccodes.explicit
- local regular_code = disccodes.regular
local automatic_code = disccodes.automatic
+ local regular_code = disccodes.regular
local nuts = nodes.nuts
local tonut = nodes.tonut
@@ -612,7 +635,6 @@ if context then
local nodepool = nuts.pool
local new_disc = nodepool.disc
- local new_glyph = nodepool.glyph
local new_penalty = nodepool.penalty
local getfield = nuts.getfield
@@ -623,15 +645,22 @@ if context then
local getprev = nuts.getprev
local getsubtype = nuts.getsubtype
local getlist = nuts.getlist
+ local getlang = nuts.getlang
+ local getattrlist = nuts.getattrlist
+ local setattrlist = nuts.setattrlist
local isglyph = nuts.isglyph
+ local ischar = nuts.ischar
- local setfield = nuts.setfield
local setchar = nuts.setchar
local setdisc = nuts.setdisc
+ local setlink = nuts.setlink
+ local setprev = nuts.setprev
+ local setnext = nuts.setnext
local insert_before = nuts.insert_before
local insert_after = nuts.insert_after
local copy_node = nuts.copy
+ local copy_list = nuts.copy_list
local remove_node = nuts.remove
local end_of_math = nuts.end_of_math
local node_tail = nuts.tail
@@ -657,17 +686,22 @@ if context then
local a_hyphenation = attributes.private("hyphenation")
+ local expanders = languages.expanders -- gone in 1.005
+ local expand_explicit = expanders and expanders[explicit_code]
+ local expand_automatic = expanders and expanders[automatic_code]
+
local interwordpenalty = 5000
function traditional.loadpatterns(language)
return dictionaries[language]
end
- setmetatableindex(dictionaries,function(t,k) -- for the moment we use an independent data structure
+ -- for the moment we use an independent data structure
+
+ setmetatableindex(dictionaries,function(t,k)
if type(k) == "string" then
- -- this will force a load if not yet loaded (we need a nicer way)
- -- for the moment that will do (nneeded for examples that register
- -- a pattern specification
+ -- this will force a load if not yet loaded (we need a nicer way) for the moment
+ -- that will do (nneeded for examples that register a pattern specification
languages.getnumber(k)
end
local specification = languages.getdata(k)
@@ -742,11 +776,10 @@ if context then
-- with less characters than either of them! This could be an option but such a narrow
-- hsize doesn't make sense anyway.
- -- We assume that featuresets are defined global ... local definitions
- -- (also mid paragraph) make not much sense anyway. For the moment we
- -- assume no predefined sets so we don't need to store them. Nor do we
- -- need to hash them in order to save space ... no sane user will define
- -- many of them.
+ -- We assume that featuresets are defined global ... local definitions (also mid paragraph)
+ -- make not much sense anyway. For the moment we assume no predefined sets so we don't need
+ -- to store them. Nor do we need to hash them in order to save space ... no sane user will
+ -- define many of them.
local featuresets = hyphenators.featuresets or { }
hyphenators.featuresets = featuresets
@@ -768,7 +801,8 @@ if context then
return noffeaturesets
end
- local function makeset(...) -- a bit overkill, supporting variants but who cares
+ local function makeset(...)
+ -- a bit overkill, supporting variants but who cares
local set = { }
for i=1,select("#",...) do
local list = select(i,...)
@@ -808,9 +842,34 @@ if context then
return set
end
+ -- category pd (tex also sees --- and -- as hyphens but do we really want that
+
local defaulthyphens = {
- [0x2D] = true, -- hyphen
- [0xAD] = true, -- soft hyphen
+ [0x002D] = true, -- HYPHEN-MINUS
+ [0x00AD] = 0x002D, -- SOFT HYPHEN (active in ConTeXt)
+ -- [0x058A] = true, -- ARMENIAN HYPHEN
+ -- [0x1400] = true, -- CANADIAN SYLLABICS HYPHEN
+ -- [0x1806] = true, -- MONGOLIAN TODO SOFT HYPHEN
+ [0x2010] = true, -- HYPHEN
+ -- [0x2011] = true, -- NON-BREAKING HYPHEN
+ -- [0x2012] = true, -- FIGURE DASH
+ [0x2013] = true, -- EN DASH
+ [0x2014] = true, -- EM DASH
+ -- [0x2015] = true, -- HORIZONTAL BAR
+ -- [0x2027] = true, -- HYPHENATION POINT
+ -- [0x2E17] = true, -- DOUBLE OBLIQUE HYPHEN
+ -- [0x2E1A] = true, -- HYPHEN WITH DIAERESIS
+ -- [0x2E3A] = true, -- TWO-EM DASH
+ -- [0x2E3B] = true, -- THREE-EM DASH
+ -- [0x2E40] = true, -- DOUBLE HYPHEN
+ -- [0x301C] = true, -- WAVE DASH
+ -- [0x3030] = true, -- WAVY DASH
+ -- [0x30A0] = true, -- KATAKANA-HIRAGANA DOUBLE HYPHEN
+ -- [0xFE31] = true, -- PRESENTATION FORM FOR VERTICAL EM DASH
+ -- [0xFE32] = true, -- PRESENTATION FORM FOR VERTICAL EN DASH
+ -- [0xFE58] = true, -- SMALL EM DASH
+ -- [0xFE63] = true, -- SMALL HYPHEN-MINUS
+ -- [0xFF0D] = true, -- FULLWIDTH HYPHEN-MINUS
}
local defaultjoiners = {
@@ -832,13 +891,15 @@ if context then
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)
local rightchars = featureset.rightchars
+local rightedge = featureset.rightedge
+local autohyphen = v_yes -- featureset.autohyphen -- insert disc
+local hyphenonly = v_yes -- featureset.hyphenonly -- don't hyphenate around
rightchars = rightchars == v_word and true or tonumber(rightchars)
- joinerchars = joinerchars == v_yes and defaultjoiners or joinerchars
- hyphenchars = hyphenchars == v_yes and defaulthyphens or hyphenchars
+ joinerchars = joinerchars == v_yes and defaultjoiners or joinerchars -- table
+ hyphenchars = hyphenchars == v_yes and defaulthyphens or hyphenchars -- table
-- not yet ok: extrachars have to be ignored so it cannot be all)
featureset.extrachars = makeset(joinerchars or "",extrachars or "")
featureset.hyphenchars = makeset(hyphenchars or "")
@@ -850,8 +911,9 @@ if context then
featureset.rightchars = rightchars
featureset.leftchar = leftchar
featureset.rightchar = rightchar
- featureset.strict = rightedge == 'tex'
- --
+ -- featureset.strict = rightedge == "tex"
+featureset.autohyphen = autohyphen == v_yes
+featureset.hyphenonly = hyphenonly == v_yes
return register(name,featureset)
end
@@ -923,10 +985,9 @@ if context then
arguments = { "string", "string" }
}
- -- This is a relative large function with local variables and local
- -- functions. A previous implementation had the functions outside but
- -- this is cleaner and as efficient. The test runs 100 times over
- -- tufte.tex, knuth.tex, zapf.tex, ward.tex and darwin.tex in lower
+ -- This is a relative large function with local variables and local functions. A previous
+ -- implementation had the functions outside but this is cleaner and as efficient. The test
+ -- runs 100 times over tufte.tex, knuth.tex, zapf.tex, ward.tex and darwin.tex in lower
-- and uppercase with a 1mm hsize.
--
-- language=0 language>0 4 | 3 * slower
@@ -934,77 +995,89 @@ if context then
-- tex 2.34 | 1.30 2.55 | 1.45 0.21 | 0.15
-- lua 2.42 | 1.38 3.30 | 1.84 0.88 | 0.46
--
- -- Of course we have extra overhead (virtual Lua machine) but also we
- -- check attributes and support specific local options). The test puts
- -- the typeset text in boxes and discards it. If we also flush the
- -- runtime is 4.31|2.56 and 4.99|2.94 seconds so the relative difference
- -- is (somehow) smaller. The test has 536 pages. There is a little bit
- -- of extra overhead because we store the patterns in a different way.
+ -- Of course we have extra overhead (virtual Lua machine) but also we check attributes and
+ -- support specific local options). The test puts the typeset text in boxes and discards
+ -- it. If we also flush the runtime is 4.31|2.56 and 4.99|2.94 seconds so the relative
+ -- difference is (somehow) smaller. The test has 536 pages. There is a little bit of extra
+ -- overhead because we store the patterns in a different way.
--
- -- As usual I will look for speedups. Some 0.01 seconds could be gained
- -- by sharing patterns which is not impressive but it does save some
- -- 3M memory on this test. (Some optimizations already brought the 3.30
- -- seconds down to 3.14 but it all depends on aggressive caching.)
+ -- As usual I will look for speedups. Some 0.01 seconds could be gained by sharing patterns
+ -- which is not impressive but it does save some 3M memory on this test. (Some optimizations
+ -- already brought the 3.30 seconds down to 3.14 but it all depends on aggressive caching.)
- -- As we kick in the hyphenator before fonts get handled, we don't look
- -- at implicit (font) kerns or ligatures.
+ -- As we kick in the hyphenator before fonts get handled, we don't look at implicit (font)
+ -- kerns or ligatures.
local starttiming = statistics.starttiming
local stoptiming = statistics.stoptiming
- local strictids = {
- [nodecodes.hlist] = true,
- [nodecodes.vlist] = true,
- [nodecodes.rule] = true,
- [nodecodes.disc] = true,
- [nodecodes.accent] = true,
- [nodecodes.math] = true,
- }
+ -- local strictids = {
+ -- [nodecodes.hlist] = true,
+ -- [nodecodes.vlist] = true,
+ -- [nodecodes.rule] = true,
+ -- [nodecodes.dir] = true,
+ -- [nodecodes.whatsit] = true,
+ -- [nodecodes.ins] = true,
+ -- [nodecodes.adjust] = true,
+ --
+ -- [nodecodes.math] = true,
+ -- [nodecodes.disc] = true,
+ --
+ -- [nodecodes.accent] = true, -- never used in context
+ -- }
+
+ -- a lot of overhead when only one char
function traditional.hyphenate(head)
- local first = 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
+ 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
+ ----- strict = nil
+ local exhyphenpenalty = tex.exhyphenpenalty
+ local hyphenpenalty = tex.hyphenpenalty
+ local autohyphen = false
+ local hyphenonly = false
-- We cannot use an 'enabled' boolean (false when no characters or extras) because we
-- can have plugins that set a characters metatable and so) ... it doesn't save much
-- anyway. Using (unicodes and unicodes[code]) and a nil table when no characters also
-- doesn't save much. So there not that much to gain for languages that don't hyphenate.
--
- -- enabled = (unicodes and (next(unicodes) or getmetatable(unicodes))) or (extrachars and next(extrachars))
+ -- enabled = (unicodes and (next(unicodes) or getmetatable(unicodes)))
+ -- or (extrachars and next(extrachars))
--
-- This can be used to not add characters i.e. keep size 0 but then we need to check for
-- attributes that change it, which costs time too. Not much to gain there.
@@ -1013,7 +1086,7 @@ if context then
local function insertpenalty()
local p = new_penalty(interwordpenalty)
- setfield(p,"attr",getfield(last,"attr"))
+ setattrlist(p,last)
if trace_visualize then
nuts.setvisual(p,"penalty")
end
@@ -1033,8 +1106,10 @@ if context then
rightcharmin = f.rightcharmin
leftchar = f.leftchar
rightchar = f.rightchar
- strict = f.strict and strictids
+ -- strict = f.strict and strictids
rightchars = f.rightchars
+ autohyphen = f.autohyphen
+ hyphenonly = f.hyphenonly
if rightwordmin and rightwordmin > 0 and lastwordlast ~= rightwordmin then
-- so we can change mid paragraph but it's kind of unpredictable then
if not tail then
@@ -1079,7 +1154,9 @@ if context then
rightcharmin = false
leftchar = false
rightchar = false
- strict = false
+ -- strict = false
+ autohyphen = false
+ hyphenonly = false
end
return a
@@ -1092,12 +1169,11 @@ if context then
local rsize = 0
local position = 1
- -- todo: remember last dics and don't go back to before that (plus
- -- message) .. for simplicity we also assume that we don't start
- -- with a dics node
+ -- todo: remember last dics and don't go back to before that (plus message) ...
+ -- for simplicity we also assume that we don't start with a dics node
--
- -- there can be a conflict: if we backtrack then we can end up in
- -- another disc and get out of sync (dup chars and so)
+ -- there can be a conflict: if we backtrack then we can end up in another disc
+ -- and get out of sync (dup chars and so)
while position <= size do
if position >= leftmin and position <= rightmin then
@@ -1199,9 +1275,8 @@ if context then
return head
end
- local current = start
-
- local attributes = getfield(start,"attr") -- todo: just copy the last disc .. faster
+ local current = start
+ local attrnode = start -- will be different, just the first char
for i=1,rsize do
local r = result[i]
@@ -1215,9 +1290,9 @@ if context then
if leftchar then
post = serialize(true,leftchar)
end
- setdisc(disc,pre,post,nil,discretionary_code,hyphenpenalty)
- if attributes then
- setfield(disc,"attr",attributes)
+ setdisc(disc,pre,post,nil,regular_code,hyphenpenalty)
+ if attrnode then
+ setattrlist(disc,attrnode)
end
-- could be a replace as well
insert_before(first,current,disc)
@@ -1249,9 +1324,10 @@ if context then
replace = nil
end
end
- setdisc(disc,pre,post,replace,discretionary_code,hyphenpenalty)
- if attributes then
- setfield(disc,"attr",attributes)
+ -- maybe regular code
+ setdisc(disc,pre,post,replace,regular_code,hyphenpenalty)
+ if attrnode then
+ setattrlist(disc,attrnode)
end
insert_before(first,current,disc)
else
@@ -1271,7 +1347,7 @@ if context then
end
- local function inject(leftchar,rightchar,code,attributes)
+ local function inject(leftchar,rightchar,code,attrnode)
if first ~= current then
local disc = new_disc()
first, current, glyph = remove_node(first,current)
@@ -1280,97 +1356,66 @@ if context then
setcolor(glyph,"darkred") -- these get checked
setcolor(disc,"darkgreen") -- in the colorizer
end
- local pre = mil
+ local pre = nil
local post = nil
local replace = glyph
- if not leftchar then
- leftchar = code
- end
- if rightchar then
- pre = copy_node(glyph)
- setchar(pre,rightchar)
- end
- if leftchar then
+ if leftchar and leftchar > 0 then
post = copy_node(glyph)
setchar(post,leftchar)
end
- setdisc(disc,pre,post,replace,discretionary_code,hyphenpenalty)
- if attributes then
- setfield(disc,"attr",attributes)
+ pre = copy_node(glyph)
+ setchar(pre,rightchar and rightchar > 0 and rightchar or code)
+ setdisc(disc,pre,post,replace,automatic_code,hyphenpenalty) -- ex ?
+ if attrnode then
+ setattrlist(disc,attrnode)
end
end
return current
end
+ local function injectseries(current,last,next,attrnode)
+ local disc = new_disc()
+ local start = current
+ first, current = insert_before(first,current,disc)
+ setprev(start)
+ setnext(last)
+ if next then
+ setlink(current,next)
+ else
+ setnext(current)
+ end
+ local pre = copy_list(start)
+ local post = nil
+ local replace = start
+ setdisc(disc,pre,post,replace,automatic_code,hyphenpenalty) -- ex ?
+ if attrnode then
+ setattrlist(disc,attrnode)
+ end
+ return current
+ end
+
local a = getattr(first,a_hyphenation)
if a ~= attr then
attr = synchronizefeatureset(a)
end
- -- The first attribute in a word determines the way a word gets hyphenated
- -- and if relevant, other properties are also set then. We could optimize for
- -- silly one-char cases but it has no priority as the code is still not that
- -- much slower than the native hyphenator and this variant also provides room
- -- for extensions.
+ -- The first attribute in a word determines the way a word gets hyphenated and if
+ -- relevant, other properties are also set then. We could optimize for silly one-char
+ -- cases but it has no priority as the code is still not that much slower than the
+ -- native hyphenator and this variant also provides room for extensions.
+
+ local skipping = false
while current and current ~= last do -- and 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
- if categories[word[1]] == "lu" and getfield(start,"uchyph") < 0 then
- -- skip
- else
- local hyphens = hyphenated(dictionary,word,size)
- if hyphens then
- flush(hyphens)
- end
- end
- end
- language = lang
- if language > 0 then
- --
- dictionary = dictionaries[language]
- instance = dictionary.instance
- characters = dictionary.characters
- unicodes = dictionary.unicodes
- --
- local a = getattr(current,a_hyphenation)
- attr = synchronizefeatureset(a)
- leftchar = leftchar or (instance and posthyphenchar (instance)) -- we can make this more
- rightchar = rightchar or (instance and prehyphenchar (instance)) -- efficient if needed
- leftexchar = (instance and preexhyphenchar (instance))
- rightexchar = (instance and postexhyphenchar(instance))
- leftmin = leftcharmin or getfield(current,"left")
- rightmin = rightcharmin or getfield(current,"right")
- if not leftchar or leftchar < 0 then
- leftchar = false
- end
- if not rightchar or rightchar < 0 then
- rightchar = false
- end
- --
- local char = unicodes[code] or (extrachars and extrachars[code])
- if char then
- word[1] = char
- size = 1
- start = current
- else
- size = 0
- end
- else
- size = 0
- end
- elseif language <= 0 then
- --
- elseif size > 0 then
- local char = unicodes[code] or (extrachars and extrachars[code])
- if char then
- size = size + 1
- word[size] = char
- elseif dictionary then
- if size > charmin and leftmin + rightmin <= size then
+ if skipping then
+ current = getnext(current)
+ else
+ local lang = getlang(current)
+ if lang ~= language then
+ if dictionary and size > charmin and leftmin + rightmin <= size then
+ -- only german has many words starting with an uppercase character
if categories[word[1]] == "lu" and getfield(start,"uchyph") < 0 then
-- skip
else
@@ -1380,71 +1425,151 @@ if context then
end
end
end
- size = 0
- -- maybe also a strict mode here: no hyphenation before hyphenchars and skip
- -- the next set (but then, strict is an option)
- if code == exhyphenchar then
- current = inject(leftexchar,rightexchar,code,getfield(current,"attr"))
- elseif hyphenchars and hyphenchars[code] then
- current = inject(leftchar,rightchar,code,getfield(current,"attr"))
+ language = lang
+ if language > 0 then
+ --
+ dictionary = dictionaries[language]
+ instance = dictionary.instance
+ characters = dictionary.characters
+ unicodes = dictionary.unicodes
+ --
+ local a = getattr(current,a_hyphenation)
+ attr = synchronizefeatureset(a)
+ leftchar = leftchar or (instance and posthyphenchar (instance)) -- we can make this more
+ rightchar = rightchar or (instance and prehyphenchar (instance)) -- efficient if needed
+ leftexchar = (instance and preexhyphenchar (instance))
+ rightexchar = (instance and postexhyphenchar(instance))
+ leftmin = leftcharmin or getfield(current,"left")
+ rightmin = rightcharmin or getfield(current,"right")
+ if not leftchar or leftchar < 0 then
+ leftchar = false
+ end
+ if not rightchar or rightchar < 0 then
+ rightchar = false
+ end
+ --
+ local char = unicodes[code] or (extrachars and extrachars[code])
+ if char then
+ word[1] = char
+ size = 1
+ start = current
+ else
+ size = 0
+ end
+ else
+ size = 0
end
- end
- else
- local a = getattr(current,a_hyphenation)
- if a ~= attr then
- attr = synchronizefeatureset(a) -- influences extrachars
- leftchar = leftchar or (instance and posthyphenchar (instance)) -- we can make this more
- rightchar = rightchar or (instance and prehyphenchar (instance)) -- efficient if needed
- leftexchar = (instance and preexhyphenchar (instance))
- rightexchar = (instance and postexhyphenchar(instance))
- leftmin = leftcharmin or getfield(current,"left")
- rightmin = rightcharmin or getfield(current,"right")
- if not leftchar or leftchar < 0 then
- leftchar = false
+ elseif language <= 0 then
+ --
+ elseif size > 0 then
+ local char = unicodes[code] or (extrachars and extrachars[code])
+ if char then
+ size = size + 1
+ word[size] = char
+ elseif dictionary then
+ if not hyphenonly or code ~= exhyphenchar then
+ if size > charmin and leftmin + rightmin <= size then
+ if categories[word[1]] == "lu" and getfield(start,"uchyph") < 0 then
+ -- skip
+ else
+ local hyphens = hyphenated(dictionary,word,size)
+ if hyphens then
+ flush(hyphens)
+ end
+ end
+ end
+ end
+ size = 0
+ if code == exhyphenchar then -- normally the -
+ local next = getnext(current)
+ local last = current
+ local font = getfont(current)
+ while next and ischar(next,font) == code do
+ last = next
+ next = getnext(next)
+ end
+ if not autohyphen then
+ current = last
+ elseif current == last then
+ current = inject(leftexchar,rightexchar,code,current)
+ else
+ current = injectseries(current,last,next,current)
+ end
+ if hyphenonly then
+ skipping = true
+ end
+ elseif hyphenchars then
+ local char = hyphenchars[code]
+ if char == true then
+ char = code
+ end
+ if char then
+ current = inject(leftchar and char or nil,rightchar and char or nil,char,current)
+ end
+ end
end
- if not rightchar or rightchar < 0 then
- rightchar = false
+ else
+ local a = getattr(current,a_hyphenation)
+ if a ~= attr then
+ attr = synchronizefeatureset(a) -- influences extrachars
+ leftchar = leftchar or (instance and posthyphenchar (instance)) -- we can make this more
+ rightchar = rightchar or (instance and prehyphenchar (instance)) -- efficient if needed
+ leftexchar = (instance and preexhyphenchar (instance))
+ rightexchar = (instance and postexhyphenchar(instance))
+ leftmin = leftcharmin or getfield(current,"left")
+ rightmin = rightcharmin or getfield(current,"right")
+ if not leftchar or leftchar < 0 then
+ leftchar = false
+ end
+ if not rightchar or rightchar < 0 then
+ rightchar = false
+ end
+ end
+ --
+ local char = unicodes[code] or (extrachars and extrachars[code])
+ if char then
+ word[1] = char
+ size = 1
+ start = current
end
end
- --
- local char = unicodes[code] or (extrachars and extrachars[code])
- if char then
- word[1] = char
- size = 1
- start = current
- end
+ stop = current
+ current = getnext(current)
end
- stop = current
- current = getnext(current)
else
+ if skipping then
+ skipping = false
+ end
if id == disc_code then
- local subtype = getsubtype(current)
- if subtype == discretionary_code then -- \discretionary
- size = 0
- current = getnext(current)
- elseif subtype == explicit_code then -- \- => only here
- size = 0
- current = getnext(current)
- while current do
- local id = getid(current)
- if id == glyph_code or id == disc_code then
- current = getnext(current)
- else
- break
- end
+ if expanded then
+ -- pre 1.005
+ local subtype = getsubtype(current)
+ if subtype == discretionary_code then -- \discretionary
+ size = 0
+ elseif subtype == explicit_code then -- \- => only here
+ -- automatic (-) : the old parser makes negative char entries
+ size = 0
+ expand_explicit(current)
+ elseif subtype == automatic_code then -- - => only here
+ -- automatic (-) : the old hyphenator turns an exhyphen into glyph+disc
+ size = 0
+ expand_automatic(current)
+ else
+ -- first : done by the hyphenator
+ -- second : done by the hyphenator
+ -- regular : done by the hyphenator
+ size = 0
end
- -- todo: change to discretionary_code
else
- -- automatic (-) : the hyphenator turns an exhyphen into glyph+disc
- -- first : done by the hyphenator
- -- second : done by the hyphenator
- -- regular : done by the hyphenator
size = 0
- current = getnext(current)
end
- elseif strict and strict[id] then
- current = id == math_code and getnext(end_of_math(current)) or getnext(current)
- size = 0
+ current = getnext(current)
+ if hyphenonly then
+ skipping = true
+ end
+ -- elseif strict and strict[id] then
+ -- current = id == math_code and getnext(end_of_math(current)) or getnext(current)
+ -- size = 0
else
current = id == math_code and getnext(end_of_math(current)) or getnext(current)
end
@@ -1463,8 +1588,8 @@ if context then
end
end
end
- -- we can have quit due to last so we need to flush the last seen word, we could move this in
- -- the loop and test for current but ... messy
+ -- we can have quit due to last so we need to flush the last seen word, we could move
+ -- this in the loop and test for current but ... messy
if dictionary and size > charmin and leftmin + rightmin <= size then
if categories[word[1]] == "lu" and getfield(start,"uchyph") < 0 then
-- skip
@@ -1517,28 +1642,39 @@ if context then
return head, done
end
- local function expanded(head)
+ local expanded = function (head)
local done = hyphenate(head)
- if done then
- for d in traverse_id(disc_code,tonut(head)) do
- local s = getsubtype(d)
- if s ~= discretionary_code then
- expanders[s](d,template)
- done = true
+ return head, done
+ end
+
+ if LUATEXVERSION< 1.005 then
+
+ expanded = function(head)
+ local done = hyphenate(head)
+ if done then
+ for d in traverse_id(disc_code,tonut(head)) do
+ local s = getsubtype(d)
+ if s ~= discretionary_code then
+ expanders[s](d,template)
+ done = true
+ end
end
end
+ return head, done
end
- return head, done
+
end
local getcount = tex.getcount
hyphenators.methods = methods
- hyphenators.optimize = false
+ local optimize = false
+
+ directives.register("hyphenator.optimize", function(v) optimize = v end)
function hyphenators.handler(head,groupcode)
if usedmethod then
- if groupcode == "hbox" and hyphenators.optimize then
+ if optimize and (groupcode == "hbox" or groupcode == "adjusted_hbox") then
if getcount("hyphenstate") > 0 then
forced = false
return usedmethod(head)
@@ -1555,7 +1691,7 @@ if context then
methods.tex = original
methods.original = original
- methods.expanded = expanded
+ methods.expanded = expanded -- obsolete starting with 1.005
methods.traditional = languages.hyphenators.traditional.hyphenate
methods.none = false -- function(head) return head, false end
@@ -1647,54 +1783,54 @@ if context then
else
--- traditional.loadpatterns("nl","lang-nl")
--- traditional.loadpatterns("de","lang-de")
--- traditional.loadpatterns("us","lang-us")
-
--- traditional.registerpattern("nl","e1ë", { start = 1, length = 2, before = "e", after = "e" } )
--- traditional.registerpattern("nl","oo7ë", { start = 2, length = 3, before = "o", after = "e" } )
--- traditional.registerpattern("de","qqxc9xkqq",{ start = 3, length = 4, before = "ab", after = "cd" } )
-
--- local specification = {
--- leftcharmin = 2,
--- rightcharmin = 2,
--- leftchar = "<",
--- rightchar = ">",
--- }
-
--- print("reëel", traditional.injecthyphens(dictionaries.nl,"reëel", specification),"r{e>}{<e}{eë}el")
--- print("reeëel", traditional.injecthyphens(dictionaries.nl,"reeëel", specification),"re{e>}{<e}{eë}el")
--- print("rooëel", traditional.injecthyphens(dictionaries.nl,"rooëel", specification),"r{o>}{<e}{ooë}el")
-
--- print( "qxcxkq", traditional.injecthyphens(dictionaries.de, "qxcxkq", specification),"")
--- print( "qqxcxkqq", traditional.injecthyphens(dictionaries.de, "qqxcxkqq", specification),"")
--- print( "qqqxcxkqqq", traditional.injecthyphens(dictionaries.de, "qqqxcxkqqq", specification),"")
--- print("qqqqxcxkqqqq",traditional.injecthyphens(dictionaries.de,"qqqqxcxkqqqq",specification),"")
-
--- print("kunstmatig", traditional.injecthyphens(dictionaries.nl,"kunstmatig", specification),"")
--- print("kunststofmatig", traditional.injecthyphens(dictionaries.nl,"kunststofmatig", specification),"")
--- print("kunst[stof]matig", traditional.injecthyphens(dictionaries.nl,"kunst[stof]matig", specification),"")
-
--- traditional.loadpatterns("us","lang-us")
-
--- local specification = {
--- leftcharmin = 2,
--- rightcharmin = 2,
--- leftchar = false,
--- rightchar = false,
--- }
-
--- trace_steps = true
-
--- print("components", traditional.injecthyphens(dictionaries.us,"components", specification),"")
--- print("single", traditional.injecthyphens(dictionaries.us,"single", specification),"sin-gle")
--- print("everyday", traditional.injecthyphens(dictionaries.us,"everyday", specification),"every-day")
--- print("associate", traditional.injecthyphens(dictionaries.us,"associate", specification),"as-so-ciate")
--- print("philanthropic", traditional.injecthyphens(dictionaries.us,"philanthropic", specification),"phil-an-thropic")
--- print("projects", traditional.injecthyphens(dictionaries.us,"projects", specification),"projects")
--- print("Associate", traditional.injecthyphens(dictionaries.us,"Associate", specification),"As-so-ciate")
--- print("Philanthropic", traditional.injecthyphens(dictionaries.us,"Philanthropic", specification),"Phil-an-thropic")
--- print("Projects", traditional.injecthyphens(dictionaries.us,"Projects", specification),"Projects")
+ -- traditional.loadpatterns("nl","lang-nl")
+ -- traditional.loadpatterns("de","lang-de")
+ -- traditional.loadpatterns("us","lang-us")
+
+ -- traditional.registerpattern("nl","e1ë", { start = 1, length = 2, before = "e", after = "e" } )
+ -- traditional.registerpattern("nl","oo7ë", { start = 2, length = 3, before = "o", after = "e" } )
+ -- traditional.registerpattern("de","qqxc9xkqq",{ start = 3, length = 4, before = "ab", after = "cd" } )
+
+ -- local specification = {
+ -- leftcharmin = 2,
+ -- rightcharmin = 2,
+ -- leftchar = "<",
+ -- rightchar = ">",
+ -- }
+
+ -- print("reëel", traditional.injecthyphens(dictionaries.nl,"reëel", specification),"r{e>}{<e}{eë}el")
+ -- print("reeëel", traditional.injecthyphens(dictionaries.nl,"reeëel", specification),"re{e>}{<e}{eë}el")
+ -- print("rooëel", traditional.injecthyphens(dictionaries.nl,"rooëel", specification),"r{o>}{<e}{ooë}el")
+
+ -- print( "qxcxkq", traditional.injecthyphens(dictionaries.de, "qxcxkq", specification),"")
+ -- print( "qqxcxkqq", traditional.injecthyphens(dictionaries.de, "qqxcxkqq", specification),"")
+ -- print( "qqqxcxkqqq", traditional.injecthyphens(dictionaries.de, "qqqxcxkqqq", specification),"")
+ -- print("qqqqxcxkqqqq",traditional.injecthyphens(dictionaries.de,"qqqqxcxkqqqq",specification),"")
+
+ -- print("kunstmatig", traditional.injecthyphens(dictionaries.nl,"kunstmatig", specification),"")
+ -- print("kunststofmatig", traditional.injecthyphens(dictionaries.nl,"kunststofmatig", specification),"")
+ -- print("kunst[stof]matig", traditional.injecthyphens(dictionaries.nl,"kunst[stof]matig", specification),"")
+
+ -- traditional.loadpatterns("us","lang-us")
+
+ -- local specification = {
+ -- leftcharmin = 2,
+ -- rightcharmin = 2,
+ -- leftchar = false,
+ -- rightchar = false,
+ -- }
+
+ -- trace_steps = true
+
+ -- print("components", traditional.injecthyphens(dictionaries.us,"components", specification),"")
+ -- print("single", traditional.injecthyphens(dictionaries.us,"single", specification),"sin-gle")
+ -- print("everyday", traditional.injecthyphens(dictionaries.us,"everyday", specification),"every-day")
+ -- print("associate", traditional.injecthyphens(dictionaries.us,"associate", specification),"as-so-ciate")
+ -- print("philanthropic", traditional.injecthyphens(dictionaries.us,"philanthropic", specification),"phil-an-thropic")
+ -- print("projects", traditional.injecthyphens(dictionaries.us,"projects", specification),"projects")
+ -- print("Associate", traditional.injecthyphens(dictionaries.us,"Associate", specification),"As-so-ciate")
+ -- print("Philanthropic", traditional.injecthyphens(dictionaries.us,"Philanthropic", specification),"Phil-an-thropic")
+ -- print("Projects", traditional.injecthyphens(dictionaries.us,"Projects", specification),"Projects")
end
diff --git a/tex/context/base/mkiv/lang-hyp.mkiv b/tex/context/base/mkiv/lang-hyp.mkiv
index ca9113386..c111bc31a 100644
--- a/tex/context/base/mkiv/lang-hyp.mkiv
+++ b/tex/context/base/mkiv/lang-hyp.mkiv
@@ -37,6 +37,22 @@
\definesystemattribute[hyphenation][public]
+%D After a decade of playing with these things in \LUATEX|/|\MKIV\ it's time to
+%D finish the way we deal with discretionaries. Apart from the fact that they play a
+%D role in hyphenation they also need to be dealt with in fonts. Flattening, cleanup
+%D and such are now more or less default in \CONTEXT\ so we can simplify some of the
+%D code. We also use the new penalty mechanism.
+
+\newcount\compoundhyphenpenalty
+
+\automatichyphenmode \plusone
+\hyphenpenaltymode \plusfour
+
+\hyphenpenalty 50 % hyphenator
+\automatichyphenpenalty 50 % -
+\explicithyphenpenalty 50 % \-
+\compoundhyphenpenalty 50
+
%D This command can change! At some point we will keep the setting with the
%D paragraph and then the \type {\par} can go.
@@ -51,7 +67,6 @@
% \enabledirectives[hyphenators.method]%
% \endgroup}
-
% \exhyphenchar \hyphenasciicode
% \preexhyphenchar \lessthanasciicode
% \postexhyphenchar\morethanasciicode
@@ -123,7 +138,9 @@
leftchar \numexpr\dummyparameter\s!lefthyphenchar\relax
rightchar \numexpr\dummyparameter\s!righthyphenchar\relax
alternative {\dummyparameter\c!alternative}%
- rightedge {\dummyparameter\c!rightedge}%
+rightedge {\dummyparameter\c!rightedge}%
+% autohyphen {\dummyparameter\c!autohyphen}
+% hyphenonly {\dummyparameter\c!hyphenonly}
}%
\relax
\endgroup}
diff --git a/tex/context/base/mkiv/lang-ini.lua b/tex/context/base/mkiv/lang-ini.lua
index 00fdb3f09..6de951998 100644
--- a/tex/context/base/mkiv/lang-ini.lua
+++ b/tex/context/base/mkiv/lang-ini.lua
@@ -20,15 +20,16 @@ if not modules then modules = { } end modules ['lang-ini'] = {
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 format, gsub, gmatch, find = string.format, string.gsub, string.gmatch, string.find
+local concat, sortedkeys, sortedpairs, keys, insert = table.concat, table.sortedkeys, table.sortedpairs, table.keys, table.insert
+local utfbytes, strip, utfcharacters = string.utfvalues, string.strip, utf.characters
local context = context
local commands = commands
local implement = interfaces.implement
local settings_to_array = utilities.parsers.settings_to_array
+local settings_to_set = utilities.parsers.settings_to_set
local trace_patterns = false trackers.register("languages.patterns", function(v) trace_patterns = v end)
@@ -45,6 +46,7 @@ local postexhyphenchar = lang.postexhyphenchar -- global per language
local sethjcode = lang.sethjcode
local uccodes = characters.uccodes
+local lccodes = characters.lccodes
lang.exceptions = lang.hyphenation
local new_langage = lang.new
@@ -71,6 +73,11 @@ storage.register("languages/associated",associated,"languages.associated")
storage.register("languages/numbers", numbers, "languages.numbers")
storage.register("languages/data", data, "languages.data")
+local variables = interfaces.variables
+
+local v_reset = variables.reset
+local v_yes = variables.yes
+
local nofloaded = 0
local function resolve(tag)
@@ -119,7 +126,7 @@ local function validdata(loaded,what,tag)
if dataset then
local data = dataset.data
if not data or data == "" then
- return nil
+ -- nothing
elseif dataset.compression == "zlib" then
data = zlib.decompress(data)
if dataset.length and dataset.length ~= #data then
@@ -132,39 +139,158 @@ local function validdata(loaded,what,tag)
end
end
-local function sethjcodes(instance,loaded,what)
+-- languages.hjcounts[unicode].count
+
+-- hjcode: 0 not to be hyphenated
+-- 1--31 length
+-- 32 zero length
+-- > 32 hyphenated with length 1
+
+local function sethjcodes(instance,loaded,what,factor)
local l = loaded[what]
local c = l and l.characters
if c then
- local h = l.codehash
+ local hjcounts = factor and languages.hjcounts or false
+ --
+ local h = loaded.codehash
if not h then
h = { }
- l.codehash = h
+ loaded.codehash = h
+ end
+ --
+ local function setcode(l)
+ local u = uccodes[l]
+ local s = l
+ if hjcounts then
+ local c = hjcounts[l]
+ if c then
+ c = c.count
+ if not c then
+ -- error, keep as 1
+ elseif c <= 0 then
+ -- counts as 0 i.e. ignored
+ s = 32
+ elseif c >= 31 then
+ -- counts as 31
+ s = 31
+ else
+ -- count c times
+ s = c
+ end
+ end
+ end
+ sethjcode(instance,l,s)
+ h[l] = s
+ if u ~= l and type(u) == "number" then
+ sethjcode(instance,u,s)
+ h[u] = lccodes[l]
+ end
end
+ --
local s = tex.savinghyphcodes
tex.savinghyphcodes = 0
- 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
+ if type(c) == "table" then
+ for l in next, c do
+ setcode(utfbyte(l))
+ end
+ else
+ for l in utfbytes(c) do
+ setcode(l)
end
end
tex.savinghyphcodes = s
end
end
+-- 2'2 conflicts with 4' ... and luatex barks on it
+
+local P, R, Cs, Ct, lpegmatch, lpegpatterns = lpeg.P, lpeg.R, lpeg.Cs, lpeg.Ct, lpeg.match, lpeg.patterns
+
+local utfsplit = utf.split
+
+local space = lpegpatterns.space
+local whitespace = lpegpatterns.whitespace^1
+local nospace = lpegpatterns.utf8char - whitespace
+local digit = lpegpatterns.digit
+----- endofstring = #whitespace + P(-1)
+local endofstring = #whitespace
+
+local word = (digit/"")^0 * (digit/"" * endofstring + digit/" " + nospace)^1
+local anyword = (1-whitespace)^1
+local analyze = Ct((whitespace + Cs(word))^1)
+
+local function unique(tag,requested,loaded)
+ local nofloaded = #loaded
+ if nofloaded == 0 then
+ return ""
+ elseif nofloaded == 1 then
+ return loaded[1]
+ else
+ insert(loaded,1," ") -- no need then for special first word
+ -- insert(loaded, " ")
+ loaded = concat(loaded," ")
+ local t = lpegmatch(analyze,loaded) or { }
+ local h = { }
+ local b = { }
+ for i=1,#t do
+ local ti = t[i]
+ local hi = h[ti]
+ if not hi then
+ h[ti] = 1
+ elseif hi == 1 then
+ h[ti] = 2
+ b[#b+1] = utfsplit(ti," ")
+ end
+ end
+ -- sort
+ local nofbad = #b
+ if nofbad > 0 then
+ local word
+ for i=1,nofbad do
+ local bi = b[i]
+ local p = P(bi[1])
+ for i=2,#bi do
+ p = p * digit * P(bi[i])
+ end
+ if word then
+ word = word + p
+ else
+ word = p
+ end
+ report_initialization("language %a, patterns %a, discarding conflict (0-9)%{[0-9]}t(0-9)",tag,requested,bi)
+ end
+ t, h, b = nil, nil, nil -- permit gc
+ local someword = digit^0 * word * digit^0 * endofstring / ""
+ -- local strip = Cs(someword^-1 * (someword + anyword + whitespace)^1)
+ local strip = Cs((someword + anyword + whitespace)^1)
+ return lpegmatch(strip,loaded) or loaded
+ else
+ return loaded
+ end
+ end
+end
+
local function loaddefinitions(tag,specification)
statistics.starttiming(languages)
local data, instance = resolve(tag)
- local definitions = settings_to_array(specification.patterns or "")
+ local requested = specification.patterns or ""
+ local definitions = settings_to_array(requested)
if #definitions > 0 then
if trace_patterns then
report_initialization("pattern specification for language %a: %s",tag,specification.patterns)
end
+ local ploaded = instance:patterns()
+ local eloaded = instance:hyphenation()
+ if not ploaded or ploaded == "" then
+ ploaded = { }
+ else
+ ploaded = { ploaded }
+ end
+ if not eloaded or eloaded == "" then
+ eloaded = { }
+ else
+ eloaded = { eloaded }
+ end
local dataused = data.used
local ok = false
local resources = data.resources or { }
@@ -173,11 +299,14 @@ local function loaddefinitions(tag,specification)
local definition = definitions[i]
if definition == "" then
-- error
- elseif definition == "reset" then -- interfaces.variables.reset
+ elseif definition == v_reset then
if trace_patterns then
report_initialization("clearing patterns for language %a",tag)
end
instance:clear_patterns()
+ instance:clear_hyphenation()
+ ploaded = { }
+ eloaded = { }
elseif not dataused[definition] then
dataused[definition] = definition
local filename = "lang-" .. definition .. ".lua"
@@ -193,10 +322,16 @@ 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
- sethjcodes(instance,loaded,"patterns")
- sethjcodes(instance,loaded,"exceptions")
- instance:patterns (validdata(loaded,"patterns", tag) or "")
- instance:hyphenation(validdata(loaded,"exceptions",tag) or "")
+ sethjcodes(instance,loaded,"patterns",specification.factor)
+ sethjcodes(instance,loaded,"exceptions",specification.factor)
+ local p = validdata(loaded,"patterns",tag)
+ local e = validdata(loaded,"exceptions",tag)
+ if p and p ~= "" then
+ ploaded[#ploaded+1] = p
+ end
+ if e and e ~= "" then
+ eloaded[#eloaded+1] = e
+ end
resources[#resources+1] = loaded -- so we can use them otherwise
else
report_initialization("invalid definition %a for language %a in %a",definition,tag,filename)
@@ -208,6 +343,14 @@ local function loaddefinitions(tag,specification)
report_initialization("definition %a for language %a already loaded",definition,tag)
end
end
+ if #ploaded > 0 then
+ instance:clear_patterns()
+ instance:patterns(unique(tag,requested,ploaded))
+ end
+ if #eloaded > 0 then
+ instance:clear_hyphenation()
+ instance:hyphenation(concat(eloaded," "))
+ end
return ok
elseif trace_patterns then
report_initialization("no definitions for language %a",tag)
@@ -259,7 +402,9 @@ function languages.associate(tag,script,language) -- not yet used
end
function languages.association(tag) -- not yet used
- if type(tag) == "number" then
+ if not tag then
+ tag = numbers[tex.language]
+ elseif type(tag) == "number" then
tag = numbers[tag]
end
local lat = tag and associated[tag]
@@ -295,10 +440,11 @@ if environment.initex then
else
- function languages.getnumber(tag,default,patterns)
+ function languages.getnumber(tag,default,patterns,factor)
local l = registered[tag]
if l then
if l.dirty then
+ l.factor = factor == v_yes and true or false
if trace_patterns then
report_initialization("checking patterns for %a with default %a",tag,default)
end
@@ -353,19 +499,43 @@ function languages.postexhyphenchar(what) return postexhyphenchar(tolang(what))
-- e['user-friendly'] = 'user=friend-ly'
-- e['exceptionally-friendly'] = 'excep-tionally=friend-ly'
+local invalid = { "{", "}", "-" }
+
+local function collecthjcodes(data,str)
+ local found = data.extras and data.extras.characters or { }
+ for s in utfcharacters(str) do
+ if not found[s] then
+ found[s] = true
+ end
+ end
+ for i=1,#invalid do -- less checks this way
+ local c = invalid[i]
+ if found[c] then
+ found[c] = nil
+ end
+ end
+ data.extras = { characters = found }
+ sethjcodes(data.instance,data,"extras",data.factor)
+end
+
function languages.loadwords(tag,filename)
local data, instance = resolve(tag)
if data then
statistics.starttiming(languages)
- instance:hyphenation(io.loaddata(filename) or "")
+ local str = io.loaddata(filename) or ""
+ collecthjcodes(data,str)
+ instance:hyphenation(str)
statistics.stoptiming(languages)
end
end
+
function languages.setexceptions(tag,str)
local data, instance = resolve(tag)
if data then
- instance:hyphenation(strip(str)) -- we need to strip leading spaces
+ str = strip(str) -- we need to strip leading spaces
+ collecthjcodes(data,str)
+ instance:hyphenation(str)
end
end
@@ -422,7 +592,7 @@ end)
implement {
name = "languagenumber",
actions = { languages.getnumber, context },
- arguments = { "string", "string", "string" }
+ arguments = { "string", "string", "string", "string" }
}
implement {
@@ -454,7 +624,6 @@ implement {
arguments = { "string", "string" }
}
-
implement {
name = "currentprehyphenchar",
actions = function()
diff --git a/tex/context/base/mkiv/lang-ini.mkiv b/tex/context/base/mkiv/lang-ini.mkiv
index 214ce8ca3..947422710 100644
--- a/tex/context/base/mkiv/lang-ini.mkiv
+++ b/tex/context/base/mkiv/lang-ini.mkiv
@@ -24,6 +24,7 @@
\registerctxluafile{lang-ini}{1.001}
\registerctxluafile{lang-def}{1.001}
+\registerctxluafile{lang-cnt}{1.001}
\unprotect
@@ -169,9 +170,9 @@
\lastnamedcs
\fi\fi\fi}
-\unexpanded\def\setlanguageparameter#1%
- {\edef\currentusedlanguage{\reallanguagetag{#1\c!language}}%
- %\let\setlanguageparameter\gobbleoneargument
+\unexpanded\def\setusedlanguage#1%
+% {\edef\currentusedlanguage{\reallanguagetag{#1\c!language}}%
+ {\edef\currentusedlanguage{\reallanguagetag{#1}}%
\ifx\currentusedlanguage\empty
\let\currentusedlanguage \currentlanguage
\let\usedlanguageparameter\languageparameter
@@ -458,6 +459,7 @@
{\currentlanguage}%
{\defaultlanguage\currentlanguage}%
{\languageparameter\s!patterns}%
+ {\languageparameter\c!factor}%
\relax
\normallanguage\csname\??languagenumbers\currentlanguage\endcsname}
@@ -497,16 +499,6 @@
\fi
\lang_basics_synchronize_min_max}
-% \unexpanded\def\nohyphens % % % % % not clever, we still hyphenate but supress application
-% {\ifx\dohyphens\relax
-% \unexpanded\edef\dohyphens
-% {\hyphenpenalty \the\hyphenpenalty
-% \exhyphenpenalty\the\exhyphenpenalty
-% \relax}%
-% \fi
-% \hyphenpenalty \plustenthousand
-% \exhyphenpenalty\plustenthousand}
-
\unexpanded\def\nohyphens % nicer for url's
{\ifx\dohyphens\relax
\unexpanded\edef\dohyphens
@@ -583,36 +575,26 @@
%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{\lastnamedcs}%
- \ifx\currentlanguage\askedlanguage \else
- \setcurrentlanguage\currentmainlanguage\askedlanguage
- \lang_basics_synchronize
- \fi
+ {\ifcsname\??languagelinked\askedlanguage\endcsname
+ \edef\askedlanguage{\lastnamedcs}%
+ \ifx\currentlanguage\askedlanguage \else
+ \setcurrentlanguage\currentmainlanguage\askedlanguage
+ \lang_basics_synchronize
\fi
\fi}
\unexpanded\def\uselanguageparameter#1%
{\edef\askedlanguage{#1\c!language}%
- \lang_basics_switch_asked}
+ \ifx\askedlanguage\empty\else\lang_basics_switch_asked\fi}
+
+\unexpanded\def\douselanguageparameter#1% fast setter
+ {\edef\askedlanguage{#1}%
+ \ifx\askedlanguage\empty\else\lang_basics_switch_asked\fi}
\unexpanded\def\lang_basics_set_current[#1]%
{\edef\askedlanguage{#1}%
- \lang_basics_switch_asked}
+ \ifx\askedlanguage\empty\else\lang_basics_switch_asked\fi}
\unexpanded\def\language
{\doifelsenextoptionalcs\lang_basics_set_current\normallanguage}
@@ -809,6 +791,9 @@
\clf_setlanguageexceptions{\askedlanguage}{#2}%
\endgroup}
+\unexpanded\def\hyphenation
+ {\clf_setlanguageexceptions{\currentlanguage}}
+
%D For the moment here:
\uchyph 1 % also treat uppercase
diff --git a/tex/context/base/mkiv/lang-lab.mkiv b/tex/context/base/mkiv/lang-lab.mkiv
index 26c10086f..40845be4a 100644
--- a/tex/context/base/mkiv/lang-lab.mkiv
+++ b/tex/context/base/mkiv/lang-lab.mkiv
@@ -81,6 +81,8 @@
\expandafter\noexpand\csname #1texts\endcsname
\expandafter\noexpand\csname #1text\endcsname}}
+% hm, not interfaced
+
\unexpanded\def\lang_labels_define_class_indeed#1#2#3#4#5#6#7#8#9%
{\setuvalue{setup#1text}{\protecttextprefixes#2\def\currenttextprefixclass{#1}\dodoubleempty\lang_labels_text_prefix_setup}%
\setuvalue{preset#1text}{\protecttextprefixes1\def\currenttextprefixclass{#1}\dodoubleempty\lang_labels_text_prefix_setup}%
diff --git a/tex/context/base/mkiv/lang-rep.lua b/tex/context/base/mkiv/lang-rep.lua
index 28f2e5d50..6fde353f7 100644
--- a/tex/context/base/mkiv/lang-rep.lua
+++ b/tex/context/base/mkiv/lang-rep.lua
@@ -52,11 +52,13 @@ local getchar = nuts.getchar
local isglyph = nuts.isglyph
local setfield = nuts.setfield
+local getfield = nuts.getfield
local setattr = nuts.setattr
local setlink = nuts.setlink
local setnext = nuts.setnext
local setprev = nuts.setprev
local setchar = nuts.setchar
+local setattrlist = nuts.setattrlist
local insert_node_before = nuts.insert_before
local remove_node = nuts.remove
@@ -65,12 +67,13 @@ local flush_list = nuts.flush_list
local insert_after = nuts.insert_after
local nodepool = nuts.pool
-local new_glyph = nodepool.glyph
local new_disc = nodepool.disc
local texsetattribute = tex.setattribute
local unsetvalue = attributes.unsetvalue
+local enableaction = nodes.tasks.enableaction
+
local v_reset = interfaces.variables.reset
local implement = interfaces.implement
@@ -223,34 +226,35 @@ function replacements.handler(head)
local i = 1
while i <= newlength do
local codes = newcodes[i]
- local new = nil
if type(codes) == "table" then
local method = codes[1]
if method == "discretionary" then
local pre, post, replace = codes[2], codes[3], codes[4]
- new = new_disc()
if pre then
- setfield(new,"pre",tonodes(pre,last))
+ pre = tonodes(pre,last)
end
if post then
- setfield(new,"post",tonodes(post,last))
+ post = tonodes(post,last)
end
if replace then
- setfield(new,"replace",tonodes(replace,last))
+ replace = tonodes(replace,last)
end
+ -- todo: also set attr
+ local new = new_disc(pre,post,replace)
+ setattrlist(new,last)
head, current = insert_after(head,current,new)
elseif method == "noligature" then
-- not that efficient to copy but ok for testing
local list = codes[2]
if list then
for i=1,#list do
- new = copy_node(last)
+ local 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)
+ local new = copy_node(last)
setchar(new,zwnj)
head, current = insert_after(head,current,new)
end
@@ -258,7 +262,7 @@ function replacements.handler(head)
-- todo
end
else
- new = copy_node(last)
+ local new = copy_node(last)
setchar(new,codes)
head, current = insert_after(head,current,new)
end
@@ -311,7 +315,7 @@ function replacements.set(n)
else
n = lists[n].attribute
if not enabled then
- nodes.tasks.enableaction("processors","languages.replacements.handler")
+ enableaction("processors","languages.replacements.handler")
if trace_replacements then
report_replacement("enabling replacement handler")
end
diff --git a/tex/context/base/mkiv/lang-txt.lua b/tex/context/base/mkiv/lang-txt.lua
index 2938550ee..b550ac2b4 100644
--- a/tex/context/base/mkiv/lang-txt.lua
+++ b/tex/context/base/mkiv/lang-txt.lua
@@ -38,6 +38,7 @@ if not modules then modules = { } end modules ['lang-txt'] = {
-- nb Norwegian Hans Fredrik Nordhaug, ...
-- nn Norwegian Hans Fredrik Nordhaug, ...
-- nl Dutch Hans Hagen
+-- pe Persian Mohammad Hossein Bateni
-- pl Polish Grzegorz Sapijaszko
-- pt Portuguese Pedro F. M. Mendonça
-- ro Romanian Dan Seracu, ...
@@ -63,2738 +64,2947 @@ languages.data = languages.data or utilities.storage.allocate { }
local data = languages.data
data.labels={
- functions={
- Pr={
- labels={
- cz="P",
- en="Pr",
- sk="P",
- },
- },
- arccos={
- labels={
- cz="arccos",
- en="arccos",
- es="arc\\sixperemspace cos",
- hr="arc\\sixperemspace cos",
- pl="arc\\sixperemspace cos",
- sk="arccos",
- },
- },
- arcctg={
- labels={
- cz="arccotg",
- en="arccot",
- es="arc\\sixperemspace cot",
- hr="arc\\sixperemspace ctg",
- pl="arc\\sixperemspace ctg",
- sk="arccotg",
- },
- },
- arcsin={
- labels={
- cz="arcsin",
- en="arcsin",
- es="arc\\sixperemspace sen",
- hr="arc\\sixperemspace sin",
- pl="arc\\sixperemspace sin",
- sk="arcsin",
- },
- },
- arctan={
- labels={
- cz="arctg",
- en="arctan",
- es="arc\\sixperemspace tan",
- hr="arc\\sixperemspace tg",
- pl="arc\\sixperemspace tg",
- sk="arctg",
- },
- },
- arctg={
- labels={
- cz="arctg",
- en="arctan",
- es="arc\\sixperemspace tan",
- hr="arc\\sixperemspace tg",
- pl="arc\\sixperemspace tg",
- sk="arctg",
- },
- },
- arg={
- labels={
- cz="arg",
- en="arg",
- es="arg",
- sk="arg",
- },
- },
- cos={
- labels={
- cz="cos",
- en="cos",
- es="cos",
- sk="cos",
- },
- },
- cosh={
- labels={
- cz="cosh",
- en="cosh",
- es="cosh",
- sk="cosh",
- },
- },
- cot={
- labels={
- cz="cotg",
- en="cot",
- es="cot",
- hr="ctg",
- pl="ctg",
- sk="cotg",
- },
- },
- coth={
- labels={
- cz="cotgh",
- en="coth",
- es="coth",
- sk="cotgh",
- },
- },
- csc={
- labels={
- cz="cosec",
- en="csc",
- es="csc",
- sk="cosec",
- },
- },
- ctg={
- labels={
- cz="cotg",
- en="cot",
- es="cot",
- hr="ctg",
- pl="ctg",
- sk="cotg",
- },
- },
- diff={
- labels={
- en="d",
- },
- },
- deg={
- labels={
- cz="deg",
- en="deg",
- es="gr",
- sk="deg",
- },
- },
- det={
- labels={
- cz="det",
- en="det",
- es="det",
- sk="det",
- },
- },
- dim={
- labels={
- cz="dim",
- en="dim",
- es="dim",
- sk="dim",
- },
- },
- exp={
- labels={
- cz="exp",
- en="exp",
- es="exp",
- sk="exp",
- },
- },
- gcd={
- labels={
- cz="NSD",
- en="gcd",
- es="mcd",
- hr="nzd",
- nl="ggd",
- sk="NSD",
+ ["btx"]={
+ ["In"]={
+ ["labels"]={
+ ["en"]="In",
+ ["es"]="En",
+ ["fr"]="Dans",
+ ["pe"]="در",
},
},
- hom={
- labels={
- cz="Hom",
- en="hom",
- es="hom",
- sk="Hom",
+ ["Number"]={
+ ["labels"]={
+ ["de"]="Numer",
+ ["en"]="Number",
+ ["fr"]="Numéro",
+ ["nl"]="Nummer",
+ ["pe"]="شماره",
},
},
- inf={
- labels={
- cz="inf",
- en="inf",
- es="inf",
- sk="inf",
+ ["Volume"]={
+ ["labels"]={
+ ["de"]="Band",
+ ["en"]="Volume",
+ ["nl"]="Deel",
+ ["pe"]="جلد",
},
},
- injlim={
- labels={
- cz="inj\\sixperemspace lim",
- en="inj\\sixperemspace lim",
- es="lím\\sixperemspace iny",
- sk="inj\\sixperemspace lim",
+ ["and"]={
+ ["labels"]={
+ ["de"]="und",
+ ["en"]="and",
+ ["es"]="y",
+ ["fr"]="et",
+ ["it"]="e",
+ ["nl"]="en",
+ ["pe"]="و",
+ },
+ },
+ ["edition"]={
+ ["labels"]={
+ ["de"]="Auflage",
+ ["en"]="edition",
+ ["es"]="edición",
+ ["fr"]="édition",
+ ["it"]="edizione",
+ ["nl"]="editie",
+ ["pe"]="ویرایش",
+ },
+ },
+ ["editor"]={
+ ["labels"]={
+ ["de"]="Herausgeber",
+ ["en"]="editor",
+ ["fr"]="éditeur",
+ ["it"]="a cura di",
+ ["pe"]="ویراستار",
+ },
+ },
+ ["editors"]={
+ ["labels"]={
+ ["de"]="Herausgeber",
+ ["en"]="editors",
+ ["es"]="editores",
+ ["fr"]="éditeurs",
+ ["it"]="a cura di",
+ },
+ },
+ ["in"]={
+ ["labels"]={
+ ["en"]="in",
+ ["es"]="en",
+ ["fr"]="dans",
+ ["pe"]="در",
+ },
+ },
+ ["mastersthesis"]={
+ ["labels"]={
+ ["de"]="Masterarbeit",
+ ["en"]="Master's thesis",
+ ["es"]="Tesis de maestría",
+ ["fr"]="Thèse de master (DEA, DESS, master)",
+ ["it"]="Tesi di laurea",
+ ["nl"]="Masterproef",
+ ["pe"]="پایان‌نامه کارشناسی ارشد",
+ },
+ },
+ ["number"]={
+ ["labels"]={
+ ["de"]="Numer",
+ ["en"]="number",
+ ["fr"]="numéro",
+ ["nl"]="nummer",
+ ["pe"]="شماره",
+ },
+ },
+ ["of"]={
+ ["labels"]={
+ ["de"]="von",
+ ["en"]="of",
+ ["fr"]="de",
+ ["nl"]="van",
+ },
+ },
+ ["others"]={
+ ["labels"]={
+ ["en"]="et al.",
+ },
+ },
+ ["p"]={
+ ["labels"]={
+ ["de"]="S.",
+ ["en"]="p.",
+ ["pe"]="ص",
+ },
+ },
+ ["pages"]={
+ ["labels"]={
+ ["de"]="Seiten",
+ ["en"]="pages",
+ ["nl"]="paginas",
+ ["pe"]="صفحات",
+ },
+ },
+ ["patent"]={
+ ["labels"]={
+ ["de"]="Patent",
+ ["en"]="Patent",
+ ["es"]="Patente",
+ ["fr"]="Brevet",
+ ["it"]="Brevetto",
+ ["nl"]="Octrooi",
+ },
+ },
+ ["phdthesis"]={
+ ["labels"]={
+ ["de"]="Dissertation",
+ ["en"]="PhD thesis",
+ ["es"]="Tesis doctoral",
+ ["fr"]="Thèse de doctorat",
+ ["it"]="Tesi di dottorato",
+ ["nl"]="Proefschrift",
+ ["pe"]="رساله دکتری",
+ },
+ },
+ ["pp"]={
+ ["labels"]={
+ ["de"]="S.",
+ ["en"]="pp.",
+ ["pe"]="صص",
+ },
+ },
+ ["technicalreport"]={
+ ["labels"]={
+ ["de"]="Technischer Bericht",
+ ["en"]="Technical report",
+ ["es"]="Informe técnico",
+ ["fr"]="Rapport technique",
+ ["it"]="Relazione tecnica",
+ ["nl"]="Technisch rapport",
+ ["pe"]="گزارش فنی",
+ },
+ },
+ ["volume"]={
+ ["labels"]={
+ ["de"]="Band",
+ ["en"]="volume",
+ ["nl"]="deel",
+ ["pe"]="جلد",
+ },
+ },
+ ["with"]={
+ ["labels"]={
+ ["de"]="mit",
+ ["en"]="with",
+ ["es"]="con",
+ ["fr"]="avec",
+ ["it"]="con",
+ ["nl"]="met",
},
},
- ker={
- labels={
- cz="ker",
- en="ker",
- es="Ker",
- sk="ker",
- },
+ },
+ ["functions"]={
+ ["Pr"]={
+ ["labels"]={
+ ["cz"]="P",
+ ["en"]="Pr",
+ ["sk"]="P",
+ },
+ },
+ ["acos"]={
+ ["labels"]={
+ ["cz"]="arccos",
+ ["en"]="arccos",
+ ["es"]="arc\\sixperemspace cos",
+ ["hr"]="arc\\sixperemspace cos",
+ ["pl"]="arc\\sixperemspace cos",
+ ["sk"]="arccos",
+ },
+ },
+ ["arccos"]={
+ ["labels"]={
+ ["cz"]="arccos",
+ ["en"]="arccos",
+ ["es"]="arc\\sixperemspace cos",
+ ["hr"]="arc\\sixperemspace cos",
+ ["pl"]="arc\\sixperemspace cos",
+ ["sk"]="arccos",
+ },
+ },
+ ["arcctg"]={
+ ["labels"]={
+ ["cz"]="arccotg",
+ ["en"]="arccot",
+ ["es"]="arc\\sixperemspace cot",
+ ["hr"]="arc\\sixperemspace ctg",
+ ["pl"]="arc\\sixperemspace ctg",
+ ["sk"]="arccotg",
+ },
+ },
+ ["arcsin"]={
+ ["labels"]={
+ ["cz"]="arcsin",
+ ["en"]="arcsin",
+ ["es"]="arc\\sixperemspace sen",
+ ["hr"]="arc\\sixperemspace sin",
+ ["pl"]="arc\\sixperemspace sin",
+ ["sk"]="arcsin",
+ },
+ },
+ ["arctan"]={
+ ["labels"]={
+ ["cz"]="arctg",
+ ["en"]="arctan",
+ ["es"]="arc\\sixperemspace tan",
+ ["hr"]="arc\\sixperemspace tg",
+ ["pl"]="arc\\sixperemspace tg",
+ ["sk"]="arctg",
+ },
+ },
+ ["arctg"]={
+ ["labels"]={
+ ["cz"]="arctg",
+ ["en"]="arctan",
+ ["es"]="arc\\sixperemspace tan",
+ ["hr"]="arc\\sixperemspace tg",
+ ["pl"]="arc\\sixperemspace tg",
+ ["sk"]="arctg",
+ },
+ },
+ ["arg"]={
+ ["labels"]={
+ ["cz"]="arg",
+ ["en"]="arg",
+ ["es"]="arg",
+ ["sk"]="arg",
+ },
+ },
+ ["asin"]={
+ ["labels"]={
+ ["cz"]="arcsin",
+ ["en"]="arcsin",
+ ["es"]="arc\\sixperemspace sen",
+ ["hr"]="arc\\sixperemspace sin",
+ ["pl"]="arc\\sixperemspace sin",
+ ["sk"]="arcsin",
+ },
+ },
+ ["atan"]={
+ ["labels"]={
+ ["cz"]="arctg",
+ ["en"]="arctan",
+ ["es"]="arc\\sixperemspace tan",
+ ["hr"]="arc\\sixperemspace tg",
+ ["pl"]="arc\\sixperemspace tg",
+ ["sk"]="arctg",
+ },
+ },
+ ["cos"]={
+ ["labels"]={
+ ["cz"]="cos",
+ ["en"]="cos",
+ ["es"]="cos",
+ ["sk"]="cos",
+ },
+ },
+ ["cosh"]={
+ ["labels"]={
+ ["cz"]="cosh",
+ ["en"]="cosh",
+ ["es"]="cosh",
+ ["sk"]="cosh",
+ },
+ },
+ ["cot"]={
+ ["labels"]={
+ ["cz"]="cotg",
+ ["en"]="cot",
+ ["es"]="cot",
+ ["hr"]="ctg",
+ ["pl"]="ctg",
+ ["sk"]="cotg",
+ },
+ },
+ ["coth"]={
+ ["labels"]={
+ ["cz"]="cotgh",
+ ["en"]="coth",
+ ["es"]="coth",
+ ["sk"]="cotgh",
+ },
+ },
+ ["csc"]={
+ ["labels"]={
+ ["cz"]="cosec",
+ ["en"]="csc",
+ ["es"]="csc",
+ ["sk"]="cosec",
+ },
+ },
+ ["ctg"]={
+ ["labels"]={
+ ["cz"]="cotg",
+ ["en"]="cot",
+ ["es"]="cot",
+ ["hr"]="ctg",
+ ["pl"]="ctg",
+ ["sk"]="cotg",
+ },
+ },
+ ["deg"]={
+ ["labels"]={
+ ["cz"]="deg",
+ ["en"]="deg",
+ ["es"]="gr",
+ ["sk"]="deg",
+ },
+ },
+ ["det"]={
+ ["labels"]={
+ ["cz"]="det",
+ ["en"]="det",
+ ["es"]="det",
+ ["sk"]="det",
+ },
+ },
+ ["diff"]={
+ ["labels"]={
+ ["en"]="d",
+ },
+ },
+ ["dim"]={
+ ["labels"]={
+ ["cz"]="dim",
+ ["en"]="dim",
+ ["es"]="dim",
+ ["sk"]="dim",
+ },
+ },
+ ["exp"]={
+ ["labels"]={
+ ["cz"]="exp",
+ ["en"]="exp",
+ ["es"]="exp",
+ ["sk"]="exp",
+ },
},
- lcm={
- labels={
- cz="NSN",
- en="lcm",
- es="MCM",
- hr="nzv",
- nl="kgv",
- sk="NSN",
+ ["gcd"]={
+ ["labels"]={
+ ["cz"]="NSD",
+ ["en"]="gcd",
+ ["es"]="mcd",
+ ["hr"]="nzd",
+ ["nl"]="ggd",
+ ["sk"]="NSD",
},
},
- lg={
- labels={
- cz="log",
- en="lg",
- es="log",
- sk="log",
+ ["hom"]={
+ ["labels"]={
+ ["cz"]="Hom",
+ ["en"]="hom",
+ ["es"]="hom",
+ ["sk"]="Hom",
},
},
- lim={
- labels={
- cz="lim",
- en="lim",
- es="lím",
- sk="lim",
+ ["inf"]={
+ ["labels"]={
+ ["cz"]="inf",
+ ["en"]="inf",
+ ["es"]="inf",
+ ["sk"]="inf",
},
- },
- liminf={
- labels={
- cz="lim\\sixperemspace inf",
- en="lim\\sixperemspace inf",
- es="lím\\sixperemspace inf",
- sk="lim\\sixperemspace inf",
+ },
+ ["injlim"]={
+ ["labels"]={
+ ["cz"]="inj\\sixperemspace lim",
+ ["en"]="inj\\sixperemspace lim",
+ ["es"]="lím\\sixperemspace iny",
+ ["sk"]="inj\\sixperemspace lim",
},
- },
- limsup={
- labels={
- cz="lim\\sixperemspace sup",
- en="lim\\sixperemspace sup",
- es="lím\\sixperemspace sup",
- sk="lim\\sixperemspace sup",
+ },
+ ["ker"]={
+ ["labels"]={
+ ["cz"]="ker",
+ ["en"]="ker",
+ ["es"]="Ker",
+ ["sk"]="ker",
},
- },
- ln={
- labels={
- cz="ln",
- en="ln",
- es="ln",
- sk="ln",
+ },
+ ["lcm"]={
+ ["labels"]={
+ ["cz"]="NSN",
+ ["en"]="lcm",
+ ["es"]="MCM",
+ ["hr"]="nzv",
+ ["nl"]="kgv",
+ ["sk"]="NSN",
},
- },
- log={
- labels={
- cz="log",
- en="log",
- es="log",
- sk="log",
- },
- },
- max={
- labels={
- cz="max",
- en="max",
- es="máx",
- sk="max",
+ },
+ ["lg"]={
+ ["labels"]={
+ ["cz"]="log",
+ ["en"]="lg",
+ ["es"]="log",
+ ["sk"]="log",
},
},
- median={
- labels={
- cz="\\tilde",
- en="median",
- es="Mediana",
- sk="\\tilde",
+ ["lim"]={
+ ["labels"]={
+ ["cz"]="lim",
+ ["en"]="lim",
+ ["es"]="lím",
+ ["sk"]="lim",
},
},
- min={
- labels={
- cz="min",
- en="min",
- es="mín",
- sk="min",
+ ["liminf"]={
+ ["labels"]={
+ ["cz"]="lim\\sixperemspace inf",
+ ["en"]="lim\\sixperemspace inf",
+ ["es"]="lím\\sixperemspace inf",
+ ["sk"]="lim\\sixperemspace inf",
},
},
- mod={
- labels={
- cz="mod",
- en="mod",
- es="mod",
- sk="mod",
+ ["limsup"]={
+ ["labels"]={
+ ["cz"]="lim\\sixperemspace sup",
+ ["en"]="lim\\sixperemspace sup",
+ ["es"]="lím\\sixperemspace sup",
+ ["sk"]="lim\\sixperemspace sup",
+ },
+ },
+ ["ln"]={
+ ["labels"]={
+ ["cz"]="ln",
+ ["en"]="ln",
+ ["es"]="ln",
+ ["sk"]="ln",
+ },
+ },
+ ["log"]={
+ ["labels"]={
+ ["cz"]="log",
+ ["en"]="log",
+ ["es"]="log",
+ ["sk"]="log",
+ },
+ },
+ ["max"]={
+ ["labels"]={
+ ["cz"]="max",
+ ["en"]="max",
+ ["es"]="máx",
+ ["sk"]="max",
},
},
- projlim={
- labels={
- cz="proj\\sixperemspace lim",
- en="proj\\sixperemspace lim",
- es="lím\\sixperemspace proy",
- sk="proj\\sixperemspace lim",
+ ["median"]={
+ ["labels"]={
+ ["cz"]="\\tilde",
+ ["en"]="median",
+ ["es"]="Mediana",
+ ["sk"]="\\tilde",
},
},
- sec={
- labels={
- cz="sec",
- en="sec",
- es="sec",
- sk="sec",
+ ["min"]={
+ ["labels"]={
+ ["cz"]="min",
+ ["en"]="min",
+ ["es"]="mín",
+ ["sk"]="min",
},
},
- sin={
- labels={
- cz="sin",
- en="sin",
- es="sen",
- sk="sin",
+ ["mod"]={
+ ["labels"]={
+ ["cz"]="mod",
+ ["en"]="mod",
+ ["es"]="mod",
+ ["sk"]="mod",
},
},
- sinh={
- labels={
- cz="sinh",
- en="sinh",
- es="senh",
- sk="sinh",
+ ["projlim"]={
+ ["labels"]={
+ ["cz"]="proj\\sixperemspace lim",
+ ["en"]="proj\\sixperemspace lim",
+ ["es"]="lím\\sixperemspace proy",
+ ["sk"]="proj\\sixperemspace lim",
},
},
- sup={
- labels={
- cz="sup",
- en="sup",
- es="sup",
- sk="sup",
+ ["sec"]={
+ ["labels"]={
+ ["cz"]="sec",
+ ["en"]="sec",
+ ["es"]="sec",
+ ["sk"]="sec",
},
},
- tan={
- labels={
- cz="tg",
- en="tan",
- es="tan",
- hr="tg",
- pl="tg",
- sk="tg",
+ ["sin"]={
+ ["labels"]={
+ ["cz"]="sin",
+ ["en"]="sin",
+ ["es"]="sen",
+ ["sk"]="sin",
},
},
- tanh={
- labels={
- cz="tgh",
- en="tanh",
- es="tanh",
- sk="tgh",
+ ["sinh"]={
+ ["labels"]={
+ ["cz"]="sinh",
+ ["en"]="sinh",
+ ["es"]="senh",
+ ["sk"]="sinh",
},
},
- tg={
- labels={
- cz="tg",
- en="tan",
- es="tan",
- hr="tg",
- pl="tg",
- sk="tg",
+ ["sup"]={
+ ["labels"]={
+ ["cz"]="sup",
+ ["en"]="sup",
+ ["es"]="sup",
+ ["sk"]="sup",
},
},
- },
- texts={
- ["year"]={
- labels={
- en="year",
- nl="jaar",
- kr="년",
+ ["tan"]={
+ ["labels"]={
+ ["cz"]="tg",
+ ["en"]="tan",
+ ["es"]="tan",
+ ["hr"]="tg",
+ ["pl"]="tg",
+ ["sk"]="tg",
},
},
- ["month"]={
- labels={
- en="month",
- nl="maand",
- kr="월",
+ ["tanh"]={
+ ["labels"]={
+ ["cz"]="tgh",
+ ["en"]="tanh",
+ ["es"]="tanh",
+ ["sk"]="tgh",
},
},
- ["day"]={
- labels={
- en="day",
- nl="dag",
- kr="일",
+ ["tg"]={
+ ["labels"]={
+ ["cz"]="tg",
+ ["en"]="tan",
+ ["es"]="tan",
+ ["hr"]="tg",
+ ["pl"]="tg",
+ ["sk"]="tg",
},
},
+ },
+ ["texts"]={
["and"]={
- labels={
- af="",
- ca="",
- cs="a",
- da="",
- de="und",
- en="and",
- es="y",
- fi="",
- fr="",
- gr="",
- hr="i",
- hu="és",
- it="",
- la="",
- lt="",
- nb="",
- nl="en",
- nn="",
- pl="i",
- pt="",
- ro="",
- ru="",
- sk="a",
- sl="",
- sv="",
- tk="",
- tr="",
- ua="",
- vi="",
- },
- },
- appendix={
- hidden=true,
- labels={
- af="Bylae ",
- ar="ملحق ",
- ca="Apèndix ",
- cn="附录",
- cs="Příloha ",
- da="Bilag ",
- de="Anhang ",
- en="Appendix ",
- es="Apéndice ",
- fi="",
- fr="Annexe ",
- gr="Παράρτημα",
- hr="Dodatak ",
- hu="Melléklet ",
- it="",
- ja="付録",
- kr="부록",
- la="",
- lt="",
- nb="Tillegg ",
- nl="",
- nn="Tillegg ",
- pl="Dodatek ",
- pt="",
- ro="",
- ru="",
- sk="Príloha ",
- sl="Dodatek ",
- sv="",
- tk="Goşmaça",
- tr="",
- ua="",
- vi="",
- },
- },
- april={
- labels={
- af="april",
- ar="أبريل",
+ ["labels"]={
+ ["af"]="",
+ ["ca"]="",
+ ["cs"]="a",
+ ["da"]="",
+ ["de"]="und",
+ ["en"]="and",
+ ["es"]="y",
+ ["fi"]="",
+ ["fr"]="",
+ ["gr"]="",
+ ["hr"]="i",
+ ["hu"]="és",
+ ["it"]="",
+ ["la"]="",
+ ["lt"]="",
+ ["nb"]="",
+ ["nl"]="en",
+ ["nn"]="",
+ ["pe"]="و",
+ ["pl"]="i",
+ ["pt"]="",
+ ["ro"]="",
+ ["ru"]="",
+ ["sk"]="a",
+ ["sl"]="",
+ ["sv"]="",
+ ["tk"]="",
+ ["tr"]="",
+ ["ua"]="",
+ ["vi"]="",
+ },
+ },
+ ["appendix"]={
+ ["hidden"]=true,
+ ["labels"]={
+ ["af"]="Bylae ",
+ ["ar"]="ملحق ",
+ ["ca"]="Apèndix ",
+ ["cn"]="附录",
+ ["cs"]="Příloha ",
+ ["da"]="Bilag ",
+ ["de"]="Anhang ",
+ ["en"]="Appendix ",
+ ["es"]="Apéndice ",
+ ["fi"]="",
+ ["fr"]="Annexe ",
+ ["gr"]="Παράρτημα",
+ ["hr"]="Dodatak ",
+ ["hu"]="Melléklet ",
+ ["it"]="",
+ ["ja"]="付録",
+ ["kr"]="부록",
+ ["la"]="",
+ ["lt"]="",
+ ["nb"]="Tillegg ",
+ ["nl"]="",
+ ["nn"]="Tillegg ",
+ ["pe"]="پیوست ",
+ ["pl"]="Dodatek ",
+ ["pt"]="",
+ ["ro"]="",
+ ["ru"]="",
+ ["sk"]="Príloha ",
+ ["sl"]="Dodatek ",
+ ["sv"]="",
+ ["tk"]="Goşmaça",
+ ["tr"]="",
+ ["ua"]="",
+ ["vi"]="",
+ },
+ },
+ ["april"]={
+ ["labels"]={
+ ["af"]="april",
+ ["ar"]="أبريل",
["ar-dz"]="أفريل",
["ar-sy"]="نيسان",
- ca="abril",
- cn="四月",
- cs="dubna",
- da="april",
- de="April",
- en="April",
- es="abril",
- fi="huhtikuu",
- fr="avril",
- gr="Απρίλιος",
- hr="travnja",
- hu="április",
- it="aprile",
- ja="4",
- kr="4",
- la="Aprilis",
- lt="balandžio",
- nb="april",
- nl="april",
- nn="april",
- pl="kwietnia",
- pt="abril",
- ro="aprilie",
- ru="апреля",
- sk="apríla",
- sl="april",
- sv="april",
- tk="aprel",
- tr="nisan",
- ua="квітня",
- vi="tháng tư",
+ ["ca"]="abril",
+ ["cn"]="四月",
+ ["cs"]="dubna",
+ ["da"]="april",
+ ["de"]="April",
+ ["en"]="April",
+ ["es"]="abril",
+ ["fi"]="huhtikuu",
+ ["fr"]="avril",
+ ["gr"]="Απρίλιος",
+ ["hr"]="travnja",
+ ["hu"]="április",
+ ["it"]="aprile",
+ ["ja"]="4",
+ ["kr"]="4",
+ ["la"]="Aprilis",
+ ["lt"]="balandžio",
+ ["nb"]="april",
+ ["nl"]="april",
+ ["nn"]="april",
+ ["pe"]="آوریل",
+ ["pl"]="kwietnia",
+ ["pt"]="abril",
+ ["ro"]="aprilie",
+ ["ru"]="апреля",
+ ["sk"]="apríla",
+ ["sl"]="april",
+ ["sv"]="april",
+ ["tk"]="aprel",
+ ["tr"]="nisan",
+ ["ua"]="квітня",
+ ["vi"]="tháng tư",
+ },
+ },
+ ["april:jalali"]={
+ ["labels"]={
+ ["en"]="Tir",
+ ["fa"]="تیر",
},
},
["april:mnem"]={
- labels={
- af="",
- ca="",
- cs="dub.",
- da="",
- de="",
- en="apr",
- es="abr.",
- fi="",
- fr="",
- gr="",
- hr="tra",
- hu="ápr.",
- it="",
- la="",
- lt="apr",
- nb="april",
- nl="",
- nn="april",
- pl="kwi.",
- pt="",
- ro="",
- ru="",
- sk="apr.",
- sl="",
- sv="",
- tk="",
- tr="",
- ua="",
- vi="",
- },
- },
- atpage={
- labels={
- af="",
- ar="في صفحة ",
- ca="",
- cs="na straně ",
- da="på side ",
- de="auf Seite ",
- en="at page ",
- es="en la página ",
- fi="",
- fr="à la page ",
- gr="",
- hr="na stranici ",
- hu="oldal ",
- it="a pagina ",
- la="",
- lt="puslapyje ",
- nb="på side ",
- nl="op pagina ",
- nn="på side ",
- pl="na stronie ",
- pt="",
- ro="",
- ru="на странице ",
- sk="na strane ",
- sl="na strani ",
- sv="på sida ",
- tk="",
- tr="",
- ua="на сторінці ",
- vi="",
- },
- },
- august={
- labels={
- af="augustus",
- ar="أغسطس",
+ ["labels"]={
+ ["af"]="",
+ ["ca"]="",
+ ["cs"]="dub.",
+ ["da"]="",
+ ["de"]="",
+ ["en"]="apr",
+ ["es"]="abr.",
+ ["fi"]="",
+ ["fr"]="",
+ ["gr"]="",
+ ["hr"]="tra",
+ ["hu"]="ápr.",
+ ["it"]="",
+ ["la"]="",
+ ["lt"]="apr",
+ ["nb"]="april",
+ ["nl"]="",
+ ["nn"]="april",
+ ["pl"]="kwi.",
+ ["pt"]="",
+ ["ro"]="",
+ ["ru"]="",
+ ["sk"]="apr.",
+ ["sl"]="",
+ ["sv"]="",
+ ["tk"]="",
+ ["tr"]="",
+ ["ua"]="",
+ ["vi"]="",
+ },
+ },
+ ["atpage"]={
+ ["labels"]={
+ ["af"]="",
+ ["ar"]="في صفحة ",
+ ["ca"]="",
+ ["cs"]="na straně ",
+ ["da"]="på side ",
+ ["de"]="auf Seite ",
+ ["en"]="at page ",
+ ["es"]="en la página ",
+ ["fi"]="",
+ ["fr"]="à la page ",
+ ["gr"]="",
+ ["hr"]="na stranici ",
+ ["hu"]="oldal ",
+ ["it"]="a pagina ",
+ ["la"]="",
+ ["lt"]="puslapyje ",
+ ["nb"]="på side ",
+ ["nl"]="op pagina ",
+ ["nn"]="på side ",
+ ["pe"]="در صفحه ",
+ ["pl"]="na stronie ",
+ ["pt"]="",
+ ["ro"]="",
+ ["ru"]="на странице ",
+ ["sk"]="na strane ",
+ ["sl"]="na strani ",
+ ["sv"]="på sida ",
+ ["tk"]="",
+ ["tr"]="",
+ ["ua"]="на сторінці ",
+ ["vi"]="",
+ },
+ },
+ ["august"]={
+ ["labels"]={
+ ["af"]="augustus",
+ ["ar"]="أغسطس",
["ar-dz"]="أوت",
["ar-ma"]="غشت",
["ar-sy"]="آب",
- ca="agost",
- cn="八月",
- cs="srpna",
- da="august",
- de="August",
- en="August",
- es="agosto",
- fi="elokuu",
- fr="août",
- gr="Αύγουστος",
- hr="kolovoza",
- hu="augusztus",
- it="agosto",
- ja="8",
- kr="8",
- la="Augustus",
- lt="rugpjūčio",
- nb="august",
- nl="augustus",
- nn="august",
- pl="sierpnia",
- pt="agosto",
- ro="august",
- ru="августа",
- sk="augusta",
- sl="avgust",
- sv="augusti",
- tk="awgust",
- tr="ağustos",
- ua="серпня",
- vi="tháng tám",
+ ["ca"]="agost",
+ ["cn"]="八月",
+ ["cs"]="srpna",
+ ["da"]="august",
+ ["de"]="August",
+ ["en"]="August",
+ ["es"]="agosto",
+ ["fi"]="elokuu",
+ ["fr"]="août",
+ ["gr"]="Αύγουστος",
+ ["hr"]="kolovoza",
+ ["hu"]="augusztus",
+ ["it"]="agosto",
+ ["ja"]="8",
+ ["kr"]="8",
+ ["la"]="Augustus",
+ ["lt"]="rugpjūčio",
+ ["nb"]="august",
+ ["nl"]="augustus",
+ ["nn"]="august",
+ ["pe"]="اوت",
+ ["pl"]="sierpnia",
+ ["pt"]="agosto",
+ ["ro"]="august",
+ ["ru"]="августа",
+ ["sk"]="augusta",
+ ["sl"]="avgust",
+ ["sv"]="augusti",
+ ["tk"]="awgust",
+ ["tr"]="ağustos",
+ ["ua"]="серпня",
+ ["vi"]="tháng tám",
+ },
+ },
+ ["august:jalali"]={
+ ["labels"]={
+ ["en"]="Aban",
+ ["fa"]="آبان",
},
},
["august:mnem"]={
- labels={
- af="",
- ca="",
- cs="srp.",
- da="",
- de="",
- en="aug",
- es="ago.",
- fi="",
- fr="",
- gr="",
- hr="kol",
- hu="aug.",
- it="",
- la="",
- lt="aug",
- nb="aug.",
- nl="",
- nn="aug.",
- pl="sier.",
- pt="",
- ro="",
- ru="",
- sk="aug.",
- sl="",
- sv="",
- tk="",
- tr="",
- ua="",
- vi="",
- },
- },
- chapter={
- hidden=true,
- labels={
- af="Hoofstuk ",
- ar="باب ",
- ca="Capítol ",
- cn={"第","章"},
- cs="Kapitola ",
- da="",
- de="Kapitel ",
- en="Chapter ",
- es="Capítulo ",
- fi="",
- fr="Chapitre ",
- gr="Κεφάλαιο",
- hr="Poglavlje ",
- hu={""," fejezet"},
- it="",
- ja={"第","章"},
- kr={"제","장"},
- la="",
- lt="",
- nb="",
- nl="",
- nn="",
- pl="Rozdział ",
- pt="",
- ro="",
- ru="",
- sk="Kapitola ",
- sl="Poglavje ",
- sv="",
- tk="Bap",
- tr="",
- ua="",
- vi="Chương ",
- },
- },
- continued={
- labels={
- af="",
- ca="",
- cs=" (pokračování)",
- da="",
- de="",
- en=" (continued)",
- es=" (continúa)",
- fi="",
- fr="",
- gr="",
- hr=" (nastavak)",
- hu=" (folytatás)",
- it="",
- la="",
- lt="",
- nb="",
- nl=" (vervolgd)",
- nn="",
- pl="",
- pt="",
- ro="",
- ru="",
- sk=" (pokračovanie)",
- sl="",
- sv="",
- tk="",
- tr="",
- ua="",
- vi="",
- },
- },
- december={
- labels={
- af="desember",
- ar="ديسمبر",
+ ["labels"]={
+ ["af"]="",
+ ["ca"]="",
+ ["cs"]="srp.",
+ ["da"]="",
+ ["de"]="",
+ ["en"]="aug",
+ ["es"]="ago.",
+ ["fi"]="",
+ ["fr"]="",
+ ["gr"]="",
+ ["hr"]="kol",
+ ["hu"]="aug.",
+ ["it"]="",
+ ["la"]="",
+ ["lt"]="aug",
+ ["nb"]="aug.",
+ ["nl"]="",
+ ["nn"]="aug.",
+ ["pl"]="sier.",
+ ["pt"]="",
+ ["ro"]="",
+ ["ru"]="",
+ ["sk"]="aug.",
+ ["sl"]="",
+ ["sv"]="",
+ ["tk"]="",
+ ["tr"]="",
+ ["ua"]="",
+ ["vi"]="",
+ },
+ },
+ ["chapter"]={
+ ["hidden"]=true,
+ ["labels"]={
+ ["af"]="Hoofstuk ",
+ ["ar"]="باب ",
+ ["ca"]="Capítol ",
+ ["cn"]={ "第", "章" },
+ ["cs"]="Kapitola ",
+ ["da"]="",
+ ["de"]="Kapitel ",
+ ["en"]="Chapter ",
+ ["es"]="Capítulo ",
+ ["fi"]="",
+ ["fr"]="Chapitre ",
+ ["gr"]="Κεφάλαιο",
+ ["hr"]="Poglavlje ",
+ ["hu"]={ "", " fejezet" },
+ ["it"]="",
+ ["ja"]={ "第", "章" },
+ ["kr"]={ "제", "장" },
+ ["la"]="",
+ ["lt"]="",
+ ["nb"]="",
+ ["nl"]="",
+ ["nn"]="",
+ ["pe"]="فصل ",
+ ["pl"]="Rozdział ",
+ ["pt"]="",
+ ["ro"]="",
+ ["ru"]="",
+ ["sk"]="Kapitola ",
+ ["sl"]="Poglavje ",
+ ["sv"]="",
+ ["tk"]="Bap",
+ ["tr"]="",
+ ["ua"]="",
+ ["vi"]="Chương ",
+ },
+ },
+ ["continued"]={
+ ["labels"]={
+ ["af"]="",
+ ["ca"]="",
+ ["cs"]=" (pokračování)",
+ ["da"]="",
+ ["de"]="",
+ ["en"]=" (continued)",
+ ["es"]=" (continúa)",
+ ["fi"]="",
+ ["fr"]="",
+ ["gr"]="",
+ ["hr"]=" (nastavak)",
+ ["hu"]=" (folytatás)",
+ ["it"]="",
+ ["la"]="",
+ ["lt"]="",
+ ["nb"]="",
+ ["nl"]=" (vervolgd)",
+ ["nn"]="",
+ ["pe"]="(ادامه دارد)",
+ ["pl"]="",
+ ["pt"]="",
+ ["ro"]="",
+ ["ru"]="",
+ ["sk"]=" (pokračovanie)",
+ ["sl"]="",
+ ["sv"]="",
+ ["tk"]="",
+ ["tr"]="",
+ ["ua"]="",
+ ["vi"]="",
+ },
+ },
+ ["day"]={
+ ["labels"]={
+ ["en"]="day",
+ ["kr"]="일",
+ ["nl"]="dag",
+ ["pe"]="روز",
+ },
+ },
+ ["december"]={
+ ["labels"]={
+ ["af"]="desember",
+ ["ar"]="ديسمبر",
["ar-ma"]="دجنبر",
["ar-sy"]="كانون الأول",
- ca="desembre",
- cn="十二月",
- cs="prosince",
- da="december",
- de="Dezember",
- en="December",
- es="diciembre",
- fi="joulukuu",
- fr="décembre",
- gr="Δεκέμβριος",
- hr="prosinca",
- hu="december",
- it="dicembre",
- ja="12",
- kr="12",
- la="December",
- lt="gruodžio",
- nb="desember",
- nl="december",
- nn="desember",
- pl="grudnia",
- pt="dezembro",
- ro="decembrie",
- ru="декабря",
- sk="decembra",
- sl="december",
- sv="december",
- tk="dekabr",
- tr="aralık",
- ua="грудня",
- vi="tháng mười hai",
+ ["ca"]="desembre",
+ ["cn"]="十二月",
+ ["cs"]="prosince",
+ ["da"]="december",
+ ["de"]="Dezember",
+ ["en"]="December",
+ ["es"]="diciembre",
+ ["fi"]="joulukuu",
+ ["fr"]="décembre",
+ ["gr"]="Δεκέμβριος",
+ ["hr"]="prosinca",
+ ["hu"]="december",
+ ["it"]="dicembre",
+ ["ja"]="12",
+ ["kr"]="12",
+ ["la"]="December",
+ ["lt"]="gruodžio",
+ ["nb"]="desember",
+ ["nl"]="december",
+ ["nn"]="desember",
+ ["pe"]="دسامبر",
+ ["pl"]="grudnia",
+ ["pt"]="dezembro",
+ ["ro"]="decembrie",
+ ["ru"]="декабря",
+ ["sk"]="decembra",
+ ["sl"]="december",
+ ["sv"]="december",
+ ["tk"]="dekabr",
+ ["tr"]="aralık",
+ ["ua"]="грудня",
+ ["vi"]="tháng mười hai",
+ },
+ },
+ ["december:jalali"]={
+ ["labels"]={
+ ["en"]="Esfand",
+ ["fa"]="اسفند",
},
},
["december:mnem"]={
- labels={
- af="",
- ca="",
- cs="pros.",
- da="",
- de="",
- en="dec",
- es="dic.",
- fi="",
- fr="",
- gr="",
- hr="pro",
- hu="dec.",
- it="",
- la="",
- lt="dec",
- nb="des.",
- nl="",
- nn="des.",
- pl="gru.",
- pt="",
- ro="",
- ru="",
- sk="dec.",
- sl="",
- sv="",
- tk="",
- tr="",
- ua="",
- vi="",
- },
- },
- february={
- labels={
- af="februarie",
- ar="فبراير",
+ ["labels"]={
+ ["af"]="",
+ ["ca"]="",
+ ["cs"]="pros.",
+ ["da"]="",
+ ["de"]="",
+ ["en"]="dec",
+ ["es"]="dic.",
+ ["fi"]="",
+ ["fr"]="",
+ ["gr"]="",
+ ["hr"]="pro",
+ ["hu"]="dec.",
+ ["it"]="",
+ ["la"]="",
+ ["lt"]="dec",
+ ["nb"]="des.",
+ ["nl"]="",
+ ["nn"]="des.",
+ ["pl"]="gru.",
+ ["pt"]="",
+ ["ro"]="",
+ ["ru"]="",
+ ["sk"]="dec.",
+ ["sl"]="",
+ ["sv"]="",
+ ["tk"]="",
+ ["tr"]="",
+ ["ua"]="",
+ ["vi"]="",
+ },
+ },
+ ["february"]={
+ ["labels"]={
+ ["af"]="februarie",
+ ["ar"]="فبراير",
["ar-dz"]="فيفري",
["ar-sy"]="شباط",
- ca="febrer",
- cn="二月",
- cs="února",
- da="februar",
- de="Februar",
- en="February",
- es="febrero",
- fi="helmikuu",
- fr="février",
- gr="Φεβρουάριος",
- hr="veljače",
- hu="február",
- it="febbraio",
- ja="2",
- kr="2",
- la="Februarius",
- lt="vasario",
- nb="februar",
- nl="februari",
- nn="februar",
- pl="lutego",
- pt="fevereiro",
- ro="februarie",
- ru="февраля",
- sk="februára",
- sl="februar",
- sv="februari",
- tk="fewral",
- tr="Şubat",
- ua="лютого",
- vi="tháng hai",
+ ["ca"]="febrer",
+ ["cn"]="二月",
+ ["cs"]="února",
+ ["da"]="februar",
+ ["de"]="Februar",
+ ["en"]="February",
+ ["es"]="febrero",
+ ["fi"]="helmikuu",
+ ["fr"]="février",
+ ["gr"]="Φεβρουάριος",
+ ["hr"]="veljače",
+ ["hu"]="február",
+ ["it"]="febbraio",
+ ["ja"]="2",
+ ["kr"]="2",
+ ["la"]="Februarius",
+ ["lt"]="vasario",
+ ["nb"]="februar",
+ ["nl"]="februari",
+ ["nn"]="februar",
+ ["pe"]="فوریه",
+ ["pl"]="lutego",
+ ["pt"]="fevereiro",
+ ["ro"]="februarie",
+ ["ru"]="февраля",
+ ["sk"]="februára",
+ ["sl"]="februar",
+ ["sv"]="februari",
+ ["tk"]="fewral",
+ ["tr"]="Şubat",
+ ["ua"]="лютого",
+ ["vi"]="tháng hai",
+ },
+ },
+ ["february:jalali"]={
+ ["labels"]={
+ ["en"]="Ordibehesht",
+ ["fa"]="اردیبهشت",
},
},
["february:mnem"]={
- labels={
- af="",
- ca="",
- cs="ún.",
- da="",
- de="",
- en="feb",
- es="feb.",
- fi="",
- fr="",
- gr="",
- hr="velj",
- hu="feb.",
- it="",
- la="",
- lt="feb",
- nb="feb.",
- nl="",
- nn="feb.",
- pl="lut.",
- pt="",
- ro="",
- ru="",
- sk="feb.",
- sl="",
- sv="",
- tk="",
- tr="",
- ua="",
- vi="",
- },
- },
- figure={
- labels={
- af="Figuur ",
- ar="شكل ",
- ca="Figura ",
- cn="图",
- cs="Obrázek ",
- da="Figur ",
- de="Abbildung ",
- en="Figure ",
- es="Figura ",
- fi="Kuva ",
- fr="Figure ",
- gr="Σχήμα",
- hr="Slika ",
- hu={""," ábra"},
- it="Fig. ",
- ja="図",
- kr="그림 ",
- la="Imago ",
- lt={""," pav."},
- nb="Figur ",
- nl="Figuur ",
- nn="Figur ",
- pl="Ilustracja ",
- pt="Figura ",
- ro="Figura ",
- ru="Рисунок ",
- sk="Obrázok ",
- sl="Slika ",
- sv="Figur ",
- tk="Surat",
- tr="Şekil ",
- ua="Малюнок ",
- vi="Hình ",
- },
- },
- friday={
- labels={
- af="vrydag",
- ar="الجمعة",
- ca="divendres",
- cn="星期五",
- cs="pátek",
- da="fredag",
- de="Freitag",
- en="Friday",
- es="viernes",
- fi="perjantai",
- fr="vendredi",
- gr="Παρασκευή",
- hr="petak",
- hu="péntek",
- it="venerdì",
- ja="金曜日",
- kr="금요일",
- la="Dies Veneris",
- lt="penktadienis",
- nb="fredag",
- nl="vrijdag",
- nn="fredag",
- pl="piątek",
- pt="sexta-feira",
- ro="vineri",
- ru="пятница",
- sk="piatok",
- sl="petek",
- sv="fredag",
- tk="bäşinji gün",
- tr="cuma",
- ua="п'ятниця",
- vi="thứ sáu",
- },
- },
- graphic={
- labels={
- af="Grafiek ",
- ar="رسم ",
- ca="Gràfica ",
- cn="插图",
- cs="Graf ",
- da="Grafik ",
- de="Graphik ",
- en="Graphic ",
- es="Gráfico ",
- fi="Grafiikka ",
- fr="Illustration ",
- gr="Γραφικό",
- hr="Slika ",
- hu={""," kép"},
- it="Grafico ",
- ja="イラスト",
- la="Typus ",
- lt="Graphic ",
- nb="Bilde ",
- nl="Grafiek ",
- nn="Bilete ",
- pl="Grafika ",
- pt="Gráfico ",
- ro="Graficul ",
- ru="График ",
- sk="Graf ",
- sl="Slika ",
- sv="Grafik ",
- tk="Grafik",
- tr="Grafik",
- ua="График ",
- vi="Đồ thị",
- },
- },
- precedingpage={
- labels={
- en="on a preceding page",
- nl="op een voorgaande bladzijde",
- },
- },
- followingpage={
- labels={
- en="on a following page",
- nl="op een volgende bladzijde",
- },
- },
- hencefore={
- labels={
- af="",
- ar="كما وضحنا سابقا",
- ca="",
- cs="viz výše",
- da="se foroven",
- de="siehe oben",
- en="as we show above",
- es="como se muestra arriba",
- fi="",
- fr="ci-dessus",
- gr="",
- hr="vidi gore",
- hu="lásd feljebb",
- kr="그러므로",
- it="come mostrato sopra",
- la="",
- lt="kaip parodyta aukščiau",
- nb="som vist over",
- nl="hierboven",
- nn="som vist over",
- pl="jak pokazano wyżej",
- pt="",
- ro="",
- ru="см. выше",
- sk="pozri hore",
- sl="glej zgoraj",
- sv="se ovan",
- tk="",
- tr="",
- ua="як показано вище",
- vi="",
- },
- },
- hereafter={
- labels={
- af="",
- ar="كما نوضح لاحقا",
- ca="",
- cs="viz níže",
- da="se forneden",
- de="siehe unten",
- en="as we show below",
- es="como se muestra abajo",
- fi="",
- fr="ci-dessous",
- gr="",
- hr="vidi ispod",
- hu="lásd lejjebb",
- it="come mostrato sotto",
- kr="이후로",
- la="",
- lt="kaip parodyta žemiau",
- nb="som vist under",
- nl="hieronder",
- nn="som vist under",
- pl="jak pokazano niżej",
- pt="",
- ro="",
- ru="см. ниже",
- sk="pozri ďalej",
- sl="glej spodaj",
- sv="se nedan",
- tk="",
- tr="",
- ua="як показано нижче",
- vi="",
- },
- },
- intermezzo={
- labels={
- af="Intermezzo ",
- ar="فسحة ",
- ca="Intermedi ",
- cn="퉣",
- cs="Intermezzo ",
- da="Intermezzo ",
- de="Intermezzo ",
- en="Intermezzo ",
- es="Intermedio ",
- fi="Intermezzo ",
- fr="Intermède ",
- gr="Παύση",
- hr="Intermeco ",
- hu={""," intermezzo"},
- it="Intermezzo ",
- ja="間奏曲",
- kr="간주곡",
- la="Intermissum ",
- lt="Intermezzo ",
- nb="Intermesso ",
- nl="Intermezzo ",
- nn="Intermesso ",
- pl="Intermezzo ",
- pt="Intermédio ",
- ro="Intermezzo ",
- ru="Вставка ",
- sk="Intermezzo ",
- sl="Intermezzo ",
- sv="Intermezzo ",
- tk="Arakesme",
- tr="",
- ua="Вставка ",
- vi="intermezzo",
- },
- },
- january={
- labels={
- af="januarie",
- ar="يناير",
+ ["labels"]={
+ ["af"]="",
+ ["ca"]="",
+ ["cs"]="ún.",
+ ["da"]="",
+ ["de"]="",
+ ["en"]="feb",
+ ["es"]="feb.",
+ ["fi"]="",
+ ["fr"]="",
+ ["gr"]="",
+ ["hr"]="velj",
+ ["hu"]="feb.",
+ ["it"]="",
+ ["la"]="",
+ ["lt"]="feb",
+ ["nb"]="feb.",
+ ["nl"]="",
+ ["nn"]="feb.",
+ ["pl"]="lut.",
+ ["pt"]="",
+ ["ro"]="",
+ ["ru"]="",
+ ["sk"]="feb.",
+ ["sl"]="",
+ ["sv"]="",
+ ["tk"]="",
+ ["tr"]="",
+ ["ua"]="",
+ ["vi"]="",
+ },
+ },
+ ["figure"]={
+ ["labels"]={
+ ["af"]="Figuur ",
+ ["ar"]="شكل ",
+ ["ca"]="Figura ",
+ ["cn"]="图",
+ ["cs"]="Obrázek ",
+ ["da"]="Figur ",
+ ["de"]="Abbildung ",
+ ["en"]="Figure ",
+ ["es"]="Figura ",
+ ["fi"]="Kuva ",
+ ["fr"]="Figure ",
+ ["gr"]="Σχήμα",
+ ["hr"]="Slika ",
+ ["hu"]={ "", " ábra" },
+ ["it"]="Fig. ",
+ ["ja"]="図",
+ ["kr"]="그림 ",
+ ["la"]="Imago ",
+ ["lt"]={ "", " pav." },
+ ["nb"]="Figur ",
+ ["nl"]="Figuur ",
+ ["nn"]="Figur ",
+ ["pe"]="شکل ",
+ ["pl"]="Ilustracja ",
+ ["pt"]="Figura ",
+ ["ro"]="Figura ",
+ ["ru"]="Рисунок ",
+ ["sk"]="Obrázok ",
+ ["sl"]="Slika ",
+ ["sv"]="Figur ",
+ ["tk"]="Surat",
+ ["tr"]="Şekil ",
+ ["ua"]="Малюнок ",
+ ["vi"]="Hình ",
+ },
+ },
+ ["followingpage"]={
+ ["labels"]={
+ ["en"]="on a following page",
+ ["nl"]="op een volgende bladzijde",
+ ["pe"]="در صفحات آینده",
+ },
+ },
+ ["friday"]={
+ ["labels"]={
+ ["af"]="vrydag",
+ ["ar"]="الجمعة",
+ ["ca"]="divendres",
+ ["cn"]="星期五",
+ ["cs"]="pátek",
+ ["da"]="fredag",
+ ["de"]="Freitag",
+ ["en"]="Friday",
+ ["es"]="viernes",
+ ["fi"]="perjantai",
+ ["fr"]="vendredi",
+ ["gr"]="Παρασκευή",
+ ["hr"]="petak",
+ ["hu"]="péntek",
+ ["it"]="venerdì",
+ ["ja"]="金曜日",
+ ["kr"]="금요일",
+ ["la"]="Dies Veneris",
+ ["lt"]="penktadienis",
+ ["nb"]="fredag",
+ ["nl"]="vrijdag",
+ ["nn"]="fredag",
+ ["pe"]="جمعه",
+ ["pl"]="piątek",
+ ["pt"]="sexta-feira",
+ ["ro"]="vineri",
+ ["ru"]="пятница",
+ ["sk"]="piatok",
+ ["sl"]="petek",
+ ["sv"]="fredag",
+ ["tk"]="bäşinji gün",
+ ["tr"]="cuma",
+ ["ua"]="п'ятниця",
+ ["vi"]="thứ sáu",
+ },
+ },
+ ["graphic"]={
+ ["labels"]={
+ ["af"]="Grafiek ",
+ ["ar"]="رسم ",
+ ["ca"]="Gràfica ",
+ ["cn"]="插图",
+ ["cs"]="Graf ",
+ ["da"]="Grafik ",
+ ["de"]="Graphik ",
+ ["en"]="Graphic ",
+ ["es"]="Gráfico ",
+ ["fi"]="Grafiikka ",
+ ["fr"]="Illustration ",
+ ["gr"]="Γραφικό",
+ ["hr"]="Slika ",
+ ["hu"]={ "", " kép" },
+ ["it"]="Grafico ",
+ ["ja"]="イラスト",
+ ["la"]="Typus ",
+ ["lt"]="Graphic ",
+ ["nb"]="Bilde ",
+ ["nl"]="Grafiek ",
+ ["nn"]="Bilete ",
+ ["pe"]="طرح ",
+ ["pl"]="Grafika ",
+ ["pt"]="Gráfico ",
+ ["ro"]="Graficul ",
+ ["ru"]="График ",
+ ["sk"]="Graf ",
+ ["sl"]="Slika ",
+ ["sv"]="Grafik ",
+ ["tk"]="Grafik",
+ ["tr"]="Grafik",
+ ["ua"]="График ",
+ ["vi"]="Đồ thị",
+ },
+ },
+ ["hencefore"]={
+ ["labels"]={
+ ["af"]="",
+ ["ar"]="كما وضحنا سابقا",
+ ["ca"]="",
+ ["cs"]="viz výše",
+ ["da"]="se foroven",
+ ["de"]="siehe oben",
+ ["en"]="as we show above",
+ ["es"]="como se muestra arriba",
+ ["fi"]="",
+ ["fr"]="ci-dessus",
+ ["gr"]="",
+ ["hr"]="vidi gore",
+ ["hu"]="lásd feljebb",
+ ["it"]="come mostrato sopra",
+ ["kr"]="그러므로",
+ ["la"]="",
+ ["lt"]="kaip parodyta aukščiau",
+ ["nb"]="som vist over",
+ ["nl"]="hierboven",
+ ["nn"]="som vist over",
+ ["pe"]="چنان‌که شرح دادیم",
+ ["pl"]="jak pokazano wyżej",
+ ["pt"]="",
+ ["ro"]="",
+ ["ru"]="см. выше",
+ ["sk"]="pozri hore",
+ ["sl"]="glej zgoraj",
+ ["sv"]="se ovan",
+ ["tk"]="",
+ ["tr"]="",
+ ["ua"]="як показано вище",
+ ["vi"]="",
+ },
+ },
+ ["hereafter"]={
+ ["labels"]={
+ ["af"]="",
+ ["ar"]="كما نوضح لاحقا",
+ ["ca"]="",
+ ["cs"]="viz níže",
+ ["da"]="se forneden",
+ ["de"]="siehe unten",
+ ["en"]="as we show below",
+ ["es"]="como se muestra abajo",
+ ["fi"]="",
+ ["fr"]="ci-dessous",
+ ["gr"]="",
+ ["hr"]="vidi ispod",
+ ["hu"]="lásd lejjebb",
+ ["it"]="come mostrato sotto",
+ ["kr"]="이후로",
+ ["la"]="",
+ ["lt"]="kaip parodyta žemiau",
+ ["nb"]="som vist under",
+ ["nl"]="hieronder",
+ ["nn"]="som vist under",
+ ["pe"]="چنان‌که شرح خواهیم داد",
+ ["pl"]="jak pokazano niżej",
+ ["pt"]="",
+ ["ro"]="",
+ ["ru"]="см. ниже",
+ ["sk"]="pozri ďalej",
+ ["sl"]="glej spodaj",
+ ["sv"]="se nedan",
+ ["tk"]="",
+ ["tr"]="",
+ ["ua"]="як показано нижче",
+ ["vi"]="",
+ },
+ },
+ ["intermezzo"]={
+ ["labels"]={
+ ["af"]="Intermezzo ",
+ ["ar"]="فسحة ",
+ ["ca"]="Intermedi ",
+ ["cn"]="퉣",
+ ["cs"]="Intermezzo ",
+ ["da"]="Intermezzo ",
+ ["de"]="Intermezzo ",
+ ["en"]="Intermezzo ",
+ ["es"]="Intermedio ",
+ ["fi"]="Intermezzo ",
+ ["fr"]="Intermède ",
+ ["gr"]="Παύση",
+ ["hr"]="Intermeco ",
+ ["hu"]={ "", " intermezzo" },
+ ["it"]="Intermezzo ",
+ ["ja"]="間奏曲",
+ ["kr"]="간주곡",
+ ["la"]="Intermissum ",
+ ["lt"]="Intermezzo ",
+ ["nb"]="Intermesso ",
+ ["nl"]="Intermezzo ",
+ ["nn"]="Intermesso ",
+ ["pl"]="Intermezzo ",
+ ["pt"]="Intermédio ",
+ ["ro"]="Intermezzo ",
+ ["ru"]="Вставка ",
+ ["sk"]="Intermezzo ",
+ ["sl"]="Intermezzo ",
+ ["sv"]="Intermezzo ",
+ ["tk"]="Arakesme",
+ ["tr"]="",
+ ["ua"]="Вставка ",
+ ["vi"]="intermezzo",
+ },
+ },
+ ["january"]={
+ ["labels"]={
+ ["af"]="januarie",
+ ["ar"]="يناير",
["ar-dz"]="جانفي",
["ar-sy"]="كانون الثاني",
- ca="gener",
- cn="一月",
- cs="ledna",
- da="januar",
- de="Januar",
- en="January",
- es="enero",
- fi="tammikuu",
- fr="janvier",
- gr="Ιανουάριος",
- hr="siječnja",
- hu="január",
- it="gennaio",
- ja="1",
- kr="1",
- la="Ianuarius",
- lt="sausio",
- nb="januar",
- nl="januari",
- nn="januar",
- pl="stycznia",
- pt="janeiro",
- ro="ianuarie",
- ru="января",
- sk="januára",
- sl="januar",
- sv="januari",
- tk="ýanwar",
- tr="ocak",
- ua="січня",
- vi="tháng giêng",
+ ["ca"]="gener",
+ ["cn"]="一月",
+ ["cs"]="ledna",
+ ["da"]="januar",
+ ["de"]="Januar",
+ ["en"]="January",
+ ["es"]="enero",
+ ["fi"]="tammikuu",
+ ["fr"]="janvier",
+ ["gr"]="Ιανουάριος",
+ ["hr"]="siječnja",
+ ["hu"]="január",
+ ["it"]="gennaio",
+ ["ja"]="1",
+ ["kr"]="1",
+ ["la"]="Ianuarius",
+ ["lt"]="sausio",
+ ["nb"]="januar",
+ ["nl"]="januari",
+ ["nn"]="januar",
+ ["pe"]="ژانویه",
+ ["pl"]="stycznia",
+ ["pt"]="janeiro",
+ ["ro"]="ianuarie",
+ ["ru"]="января",
+ ["sk"]="januára",
+ ["sl"]="januar",
+ ["sv"]="januari",
+ ["tk"]="ýanwar",
+ ["tr"]="ocak",
+ ["ua"]="січня",
+ ["vi"]="tháng giêng",
+ },
+ },
+ ["january:jalali"]={
+ ["labels"]={
+ ["en"]="Farvardin",
+ ["fa"]="فروردین",
},
},
["january:mnem"]={
- labels={
- af="",
- ca="",
- cs="led.",
- da="",
- de="",
- en="jan",
- es="ene.",
- fi="",
- fr="",
- gr="",
- hr="sij",
- hu="jan.",
- it="",
- la="",
- lt="jan",
- nb="jan.",
- nl="",
- nn="jan.",
- pl="sty.",
- pt="",
- ro="",
- ru="",
- sk="jan.",
- sl="",
- sv="",
- tk="",
- tr="",
- ua="",
- vi="",
- },
- },
- july={
- labels={
- af="julie",
- ar="يوليو",
+ ["labels"]={
+ ["af"]="",
+ ["ca"]="",
+ ["cs"]="led.",
+ ["da"]="",
+ ["de"]="",
+ ["en"]="jan",
+ ["es"]="ene.",
+ ["fi"]="",
+ ["fr"]="",
+ ["gr"]="",
+ ["hr"]="sij",
+ ["hu"]="jan.",
+ ["it"]="",
+ ["la"]="",
+ ["lt"]="jan",
+ ["nb"]="jan.",
+ ["nl"]="",
+ ["nn"]="jan.",
+ ["pl"]="sty.",
+ ["pt"]="",
+ ["ro"]="",
+ ["ru"]="",
+ ["sk"]="jan.",
+ ["sl"]="",
+ ["sv"]="",
+ ["tk"]="",
+ ["tr"]="",
+ ["ua"]="",
+ ["vi"]="",
+ },
+ },
+ ["july"]={
+ ["labels"]={
+ ["af"]="julie",
+ ["ar"]="يوليو",
["ar-dz"]="جويلة",
["ar-ma"]="يوليوز",
["ar-sy"]="تموز",
- ca="juliol",
- cn="七月",
- cs="července",
- da="juli",
- de="Juli",
- en="July",
- es="julio",
- fi="heinäkuu",
- fr="juillet",
- gr="Ιούλιος",
- hr="srpnja",
- hu="július",
- it="luglio",
- ja="7",
- kr="7",
- la="Iulius",
- lt="liepos",
- nb="juli",
- nl="juli",
- nn="juli",
- pl="lipca",
- pt="julho",
- ro="iulie",
- ru="июля",
- sk="júla",
- sl="julij",
- sv="juli",
- tk="iýul",
- tr="temmuz",
- ua="липня",
- vi="tháng bảy",
+ ["ca"]="juliol",
+ ["cn"]="七月",
+ ["cs"]="července",
+ ["da"]="juli",
+ ["de"]="Juli",
+ ["en"]="July",
+ ["es"]="julio",
+ ["fi"]="heinäkuu",
+ ["fr"]="juillet",
+ ["gr"]="Ιούλιος",
+ ["hr"]="srpnja",
+ ["hu"]="július",
+ ["it"]="luglio",
+ ["ja"]="7",
+ ["kr"]="7",
+ ["la"]="Iulius",
+ ["lt"]="liepos",
+ ["nb"]="juli",
+ ["nl"]="juli",
+ ["nn"]="juli",
+ ["pe"]="ژوئیه",
+ ["pl"]="lipca",
+ ["pt"]="julho",
+ ["ro"]="iulie",
+ ["ru"]="июля",
+ ["sk"]="júla",
+ ["sl"]="julij",
+ ["sv"]="juli",
+ ["tk"]="iýul",
+ ["tr"]="temmuz",
+ ["ua"]="липня",
+ ["vi"]="tháng bảy",
+ },
+ },
+ ["july:jalali"]={
+ ["labels"]={
+ ["en"]="Mehr",
+ ["fa"]="مهر",
},
},
["july:mnem"]={
- labels={
- af="",
- ca="",
- cs="čce",
- da="",
- de="",
- en="jul",
- es="jul.",
- fi="",
- fr="",
- gr="",
- hr="srp",
- hu="júl.",
- it="",
- la="",
- lt="jul",
- nb="juli",
- nl="",
- nn="juli",
- pl="lip.",
- pt="",
- ro="",
- ru="",
- sk="júla",
- sl="",
- sv="",
- tk="",
- tr="",
- ua="",
- vi="",
- },
- },
- june={
- labels={
- af="junie",
- ar="يونيو",
+ ["labels"]={
+ ["af"]="",
+ ["ca"]="",
+ ["cs"]="čce",
+ ["da"]="",
+ ["de"]="",
+ ["en"]="jul",
+ ["es"]="jul.",
+ ["fi"]="",
+ ["fr"]="",
+ ["gr"]="",
+ ["hr"]="srp",
+ ["hu"]="júl.",
+ ["it"]="",
+ ["la"]="",
+ ["lt"]="jul",
+ ["nb"]="juli",
+ ["nl"]="",
+ ["nn"]="juli",
+ ["pl"]="lip.",
+ ["pt"]="",
+ ["ro"]="",
+ ["ru"]="",
+ ["sk"]="júla",
+ ["sl"]="",
+ ["sv"]="",
+ ["tk"]="",
+ ["tr"]="",
+ ["ua"]="",
+ ["vi"]="",
+ },
+ },
+ ["june"]={
+ ["labels"]={
+ ["af"]="junie",
+ ["ar"]="يونيو",
["ar-dz"]="جوان",
["ar-sy"]="حزيران",
- ca="juny",
- cn="六月",
- cs="června",
- da="juni",
- de="Juni",
- en="June",
- es="junio",
- fi="kesäkuu",
- fr="juin",
- gr="Ιούνιος",
- hr="lipnja",
- hu="június",
- it="giugno",
- ja="6",
- kr="6",
- la="Iunius",
- lt="birželio",
- nb="juni",
- nl="juni",
- nn="juni",
- pl="czerwca",
- pt="junho",
- ro="iunie",
- ru="июня",
- sk="júna",
- sl="junij",
- sv="juni",
- tk="iýun",
- tr="haziran",
- ua="червня",
- vi="tháng sáu",
+ ["ca"]="juny",
+ ["cn"]="六月",
+ ["cs"]="června",
+ ["da"]="juni",
+ ["de"]="Juni",
+ ["en"]="June",
+ ["es"]="junio",
+ ["fi"]="kesäkuu",
+ ["fr"]="juin",
+ ["gr"]="Ιούνιος",
+ ["hr"]="lipnja",
+ ["hu"]="június",
+ ["it"]="giugno",
+ ["ja"]="6",
+ ["kr"]="6",
+ ["la"]="Iunius",
+ ["lt"]="birželio",
+ ["nb"]="juni",
+ ["nl"]="juni",
+ ["nn"]="juni",
+ ["pe"]="ژوئن",
+ ["pl"]="czerwca",
+ ["pt"]="junho",
+ ["ro"]="iunie",
+ ["ru"]="июня",
+ ["sk"]="júna",
+ ["sl"]="junij",
+ ["sv"]="juni",
+ ["tk"]="iýun",
+ ["tr"]="haziran",
+ ["ua"]="червня",
+ ["vi"]="tháng sáu",
+ },
+ },
+ ["june:jalali"]={
+ ["labels"]={
+ ["en"]="Shahrivar",
+ ["fa"]="شهریور",
},
},
["june:mnem"]={
- labels={
- af="",
- ca="",
- cs="čer.",
- da="",
- de="",
- en="jun",
- es="jun.",
- fi="",
- fr="",
- gr="",
- hr="lip",
- hu="jún.",
- it="",
- la="",
- lt="jun",
- nb="juni",
- nl="",
- nn="juni",
- pl="czerw.",
- pt="",
- ro="",
- ru="",
- sk="júna",
- sl="",
- sv="",
- tk="",
- tr="",
- ua="",
- vi="",
- },
- },
- line={
- labels={
- af="reël ",
- ar="سطر ",
- ca="línia ",
- cn="行",
- cs="řádek ",
- da="linie ",
- de="Zeile ",
- en="line ",
- es="línea ",
- fi="rivi ",
- fr="ligne ",
- gr="Γραμμή",
- hr="redak ",
- hu={""," sor"},
- it="riga ",
- ja="線",
- kr="행",
- la="versus ",
- lt="line ",
- nb="linje ",
- nl="regel ",
- nn="linje ",
- pl="wiersz ",
- pt="linha ",
- ro="linia ",
- ru="строка ",
- sk="riadok ",
- sl="vrstica ",
- sv="rad ",
- tk="setir",
- tr="satır ",
- ua="рядок ",
- vi="dòng ",
- },
- },
- lines={
- labels={
- af="reëls ",
- ar="السطور ",
- ca="línies ",
- cn="行",
- cs="řádky ",
- da="linier ",
- de="Zeilen ",
- en="lines ",
- es="líneas ",
- fi="rivie ",
- fr="lignes ",
- gr="Γραμμές",
- hr="retci ",
- hu="sorok ",
- it="righe ",
- ja="線",
- kr="행",
- la="versus ",
- lt="lines ",
- nb="linjer ",
- nl="regels ",
- nn="linjer ",
- pl="wiersze ",
- pt="linhas ",
- ro="liniile ",
- ru="строки ",
- sk="riadky ",
- sl="vrstice ",
- sv="rader ",
- tk="setirler",
- tr="satırlar ",
- ua="рядки ",
- vi="dòng ",
- },
- },
- march={
- labels={
- af="maart",
- ar="مارس",
+ ["labels"]={
+ ["af"]="",
+ ["ca"]="",
+ ["cs"]="čer.",
+ ["da"]="",
+ ["de"]="",
+ ["en"]="jun",
+ ["es"]="jun.",
+ ["fi"]="",
+ ["fr"]="",
+ ["gr"]="",
+ ["hr"]="lip",
+ ["hu"]="jún.",
+ ["it"]="",
+ ["la"]="",
+ ["lt"]="jun",
+ ["nb"]="juni",
+ ["nl"]="",
+ ["nn"]="juni",
+ ["pl"]="czerw.",
+ ["pt"]="",
+ ["ro"]="",
+ ["ru"]="",
+ ["sk"]="júna",
+ ["sl"]="",
+ ["sv"]="",
+ ["tk"]="",
+ ["tr"]="",
+ ["ua"]="",
+ ["vi"]="",
+ },
+ },
+ ["line"]={
+ ["labels"]={
+ ["af"]="reël ",
+ ["ar"]="سطر ",
+ ["ca"]="línia ",
+ ["cn"]="行",
+ ["cs"]="řádek ",
+ ["da"]="linie ",
+ ["de"]="Zeile ",
+ ["en"]="line ",
+ ["es"]="línea ",
+ ["fi"]="rivi ",
+ ["fr"]="ligne ",
+ ["gr"]="Γραμμή",
+ ["hr"]="redak ",
+ ["hu"]={ "", " sor" },
+ ["it"]="riga ",
+ ["ja"]="線",
+ ["kr"]="행",
+ ["la"]="versus ",
+ ["lt"]="line ",
+ ["nb"]="linje ",
+ ["nl"]="regel ",
+ ["nn"]="linje ",
+ ["pe"]="سطر ",
+ ["pl"]="wiersz ",
+ ["pt"]="linha ",
+ ["ro"]="linia ",
+ ["ru"]="строка ",
+ ["sk"]="riadok ",
+ ["sl"]="vrstica ",
+ ["sv"]="rad ",
+ ["tk"]="setir",
+ ["tr"]="satır ",
+ ["ua"]="рядок ",
+ ["vi"]="dòng ",
+ },
+ },
+ ["lines"]={
+ ["labels"]={
+ ["af"]="reëls ",
+ ["ar"]="السطور ",
+ ["ca"]="línies ",
+ ["cn"]="行",
+ ["cs"]="řádky ",
+ ["da"]="linier ",
+ ["de"]="Zeilen ",
+ ["en"]="lines ",
+ ["es"]="líneas ",
+ ["fi"]="rivie ",
+ ["fr"]="lignes ",
+ ["gr"]="Γραμμές",
+ ["hr"]="retci ",
+ ["hu"]="sorok ",
+ ["it"]="righe ",
+ ["ja"]="線",
+ ["kr"]="행",
+ ["la"]="versus ",
+ ["lt"]="lines ",
+ ["nb"]="linjer ",
+ ["nl"]="regels ",
+ ["nn"]="linjer ",
+ ["pe"]="سطرهای ",
+ ["pl"]="wiersze ",
+ ["pt"]="linhas ",
+ ["ro"]="liniile ",
+ ["ru"]="строки ",
+ ["sk"]="riadky ",
+ ["sl"]="vrstice ",
+ ["sv"]="rader ",
+ ["tk"]="setirler",
+ ["tr"]="satırlar ",
+ ["ua"]="рядки ",
+ ["vi"]="dòng ",
+ },
+ },
+ ["march"]={
+ ["labels"]={
+ ["af"]="maart",
+ ["ar"]="مارس",
["ar-sy"]="آذار",
- ca="març",
- cn="三月",
- cs="března",
- da="marts",
- de="März",
- en="March",
- es="marzo",
- fi="maaliskuu",
- fr="mars",
- gr="Μάρτιος",
- hr="ožujka",
- hu="március",
- it="marzo",
- ja="3",
- kr="3",
- la="Martius",
- lt="kovo",
- nb="mars",
- nl="maart",
- nn="mars",
- pl="marca",
- pt="março",
- ro="martie",
- ru="марта",
- sk="marca",
- sl="marec",
- sv="mars",
- tk="mart",
- tr="mart",
- ua="березня",
- vi="tháng ba",
+ ["ca"]="març",
+ ["cn"]="三月",
+ ["cs"]="března",
+ ["da"]="marts",
+ ["de"]="März",
+ ["en"]="March",
+ ["es"]="marzo",
+ ["fi"]="maaliskuu",
+ ["fr"]="mars",
+ ["gr"]="Μάρτιος",
+ ["hr"]="ožujka",
+ ["hu"]="március",
+ ["it"]="marzo",
+ ["ja"]="3",
+ ["kr"]="3",
+ ["la"]="Martius",
+ ["lt"]="kovo",
+ ["nb"]="mars",
+ ["nl"]="maart",
+ ["nn"]="mars",
+ ["pe"]="مارس",
+ ["pl"]="marca",
+ ["pt"]="março",
+ ["ro"]="martie",
+ ["ru"]="марта",
+ ["sk"]="marca",
+ ["sl"]="marec",
+ ["sv"]="mars",
+ ["tk"]="mart",
+ ["tr"]="mart",
+ ["ua"]="березня",
+ ["vi"]="tháng ba",
+ },
+ },
+ ["march:jalali"]={
+ ["labels"]={
+ ["en"]="Khordad",
+ ["fa"]="خرداد",
},
},
["march:mnem"]={
- labels={
- af="",
- ca="",
- cs="břez.",
- da="",
- de="",
- en="mar",
- es="mar.",
- fi="",
- fr="",
- gr="",
- hr="ožu",
- hu="már.",
- it="",
- la="",
- lt="mar",
- nb="mars",
- nl="",
- nn="mars",
- pl="mar.",
- pt="",
- ro="",
- ru="",
- sk="mar.",
- sl="",
- sv="",
- tk="",
- tr="",
- ua="",
- vi="",
- },
- },
- may={
- labels={
- af="mei",
- ar="مايو",
+ ["labels"]={
+ ["af"]="",
+ ["ca"]="",
+ ["cs"]="břez.",
+ ["da"]="",
+ ["de"]="",
+ ["en"]="mar",
+ ["es"]="mar.",
+ ["fi"]="",
+ ["fr"]="",
+ ["gr"]="",
+ ["hr"]="ožu",
+ ["hu"]="már.",
+ ["it"]="",
+ ["la"]="",
+ ["lt"]="mar",
+ ["nb"]="mars",
+ ["nl"]="",
+ ["nn"]="mars",
+ ["pl"]="mar.",
+ ["pt"]="",
+ ["ro"]="",
+ ["ru"]="",
+ ["sk"]="mar.",
+ ["sl"]="",
+ ["sv"]="",
+ ["tk"]="",
+ ["tr"]="",
+ ["ua"]="",
+ ["vi"]="",
+ },
+ },
+ ["may"]={
+ ["labels"]={
+ ["af"]="mei",
+ ["ar"]="مايو",
["ar-dz"]="ماي",
["ar-ma"]="ماي",
["ar-sy"]="أيار",
- ca="maig",
- cn="五月",
- cs="května",
- da="maj",
- de="Mai",
- en="May",
- es="mayo",
- fi="toukokuu",
- fr="mai",
- gr="Μάιος",
- hr="svibnja",
- hu="május",
- it="maggio",
- ja="5",
- kr="5",
- la="Maius",
- lt="gegužės",
- nb="mai",
- nl="mei",
- nn="mai",
- pl="maja",
- pt="maio",
- ro="mai",
- ru="мая",
- sk="mája",
- sl="maj",
- sv="maj",
- tk="maý",
- tr="mayıs",
- ua="травня",
- vi="tháng năm",
+ ["ca"]="maig",
+ ["cn"]="五月",
+ ["cs"]="května",
+ ["da"]="maj",
+ ["de"]="Mai",
+ ["en"]="May",
+ ["es"]="mayo",
+ ["fi"]="toukokuu",
+ ["fr"]="mai",
+ ["gr"]="Μάιος",
+ ["hr"]="svibnja",
+ ["hu"]="május",
+ ["it"]="maggio",
+ ["ja"]="5",
+ ["kr"]="5",
+ ["la"]="Maius",
+ ["lt"]="gegužės",
+ ["nb"]="mai",
+ ["nl"]="mei",
+ ["nn"]="mai",
+ ["pe"]="مه",
+ ["pl"]="maja",
+ ["pt"]="maio",
+ ["ro"]="mai",
+ ["ru"]="мая",
+ ["sk"]="mája",
+ ["sl"]="maj",
+ ["sv"]="maj",
+ ["tk"]="maý",
+ ["tr"]="mayıs",
+ ["ua"]="травня",
+ ["vi"]="tháng năm",
+ },
+ },
+ ["may:jalali"]={
+ ["labels"]={
+ ["en"]="Mordad",
+ ["fa"]="مرداد",
},
},
["may:mnem"]={
- labels={
- af="",
- ca="",
- cs="květ.",
- da="",
- de="",
- en="may",
- es="may.",
- fi="",
- fr="",
- gr="",
- hr="svi",
- hu="máj.",
- it="",
- la="",
- lt="may",
- nb="mai",
- nl="",
- nn="mai",
- pl="maja",
- pt="",
- ro="",
- ru="",
- sk="mája",
- sl="",
- sv="",
- tk="",
- tr="",
- ua="",
- vi="",
- },
- },
- monday={
- labels={
- af="maandag",
- ar="الاثنين",
- ca="dilluns",
- cn="星期一",
- cs="pondělí",
- da="mandag",
- de="Montag",
- en="Monday",
- es="lunes",
- fi="maanantai",
- fr="lundi",
- gr="Δευτέρα",
- hr="ponedjeljak",
- hu="hétfő",
- it="lunedì",
- ja="月曜日",
- kr="월요일",
- la="Dies Lunae",
- lt="pirmadienis",
- nb="mandag",
- nl="maandag",
- nn="måndag",
- pl="poniedziałek",
- pt="segunda-feira",
- ro="luni",
- ru="понедельник",
- sk="pondelok",
- sl="ponedeljek",
- sv="måndag",
- tk="birinji gün",
- tr="pazartesi",
- ua="понеділок",
- vi="thứ hai",
- },
- },
- november={
- labels={
- af="november",
- ar="نوفمبر",
+ ["labels"]={
+ ["af"]="",
+ ["ca"]="",
+ ["cs"]="květ.",
+ ["da"]="",
+ ["de"]="",
+ ["en"]="may",
+ ["es"]="may.",
+ ["fi"]="",
+ ["fr"]="",
+ ["gr"]="",
+ ["hr"]="svi",
+ ["hu"]="máj.",
+ ["it"]="",
+ ["la"]="",
+ ["lt"]="may",
+ ["nb"]="mai",
+ ["nl"]="",
+ ["nn"]="mai",
+ ["pl"]="maja",
+ ["pt"]="",
+ ["ro"]="",
+ ["ru"]="",
+ ["sk"]="mája",
+ ["sl"]="",
+ ["sv"]="",
+ ["tk"]="",
+ ["tr"]="",
+ ["ua"]="",
+ ["vi"]="",
+ },
+ },
+ ["monday"]={
+ ["labels"]={
+ ["af"]="maandag",
+ ["ar"]="الاثنين",
+ ["ca"]="dilluns",
+ ["cn"]="星期一",
+ ["cs"]="pondělí",
+ ["da"]="mandag",
+ ["de"]="Montag",
+ ["en"]="Monday",
+ ["es"]="lunes",
+ ["fi"]="maanantai",
+ ["fr"]="lundi",
+ ["gr"]="Δευτέρα",
+ ["hr"]="ponedjeljak",
+ ["hu"]="hétfő",
+ ["it"]="lunedì",
+ ["ja"]="月曜日",
+ ["kr"]="월요일",
+ ["la"]="Dies Lunae",
+ ["lt"]="pirmadienis",
+ ["nb"]="mandag",
+ ["nl"]="maandag",
+ ["nn"]="måndag",
+ ["pe"]="دوشنبه",
+ ["pl"]="poniedziałek",
+ ["pt"]="segunda-feira",
+ ["ro"]="luni",
+ ["ru"]="понедельник",
+ ["sk"]="pondelok",
+ ["sl"]="ponedeljek",
+ ["sv"]="måndag",
+ ["tk"]="birinji gün",
+ ["tr"]="pazartesi",
+ ["ua"]="понеділок",
+ ["vi"]="thứ hai",
+ },
+ },
+ ["month"]={
+ ["labels"]={
+ ["en"]="month",
+ ["kr"]="월",
+ ["nl"]="maand",
+ ["pe"]="ماه",
+ },
+ },
+ ["november"]={
+ ["labels"]={
+ ["af"]="november",
+ ["ar"]="نوفمبر",
["ar-ma"]="نونبر",
["ar-sy"]="تشرين الثاني",
- ca="novembre",
- cn="十一月",
- cs="listopadu",
- da="november",
- de="November",
- en="November",
- es="noviembre",
- fi="marraskuu",
- fr="novembre",
- gr="Νοέμβριος",
- hr="studenog",
- hu="november",
- it="novembre",
- ja="11",
- kr="11",
- la="November",
- lt="lapkričio",
- nb="november",
- nl="november",
- nn="november",
- pl="listopada",
- pt="novembro",
- ro="noiembrie",
- ru="ноября",
- sk="novembra",
- sl="november",
- sv="november",
- tk="noýabr",
- tr="kasım",
- ua="листопада",
- vi="tháng mười một",
+ ["ca"]="novembre",
+ ["cn"]="十一月",
+ ["cs"]="listopadu",
+ ["da"]="november",
+ ["de"]="November",
+ ["en"]="November",
+ ["es"]="noviembre",
+ ["fi"]="marraskuu",
+ ["fr"]="novembre",
+ ["gr"]="Νοέμβριος",
+ ["hr"]="studenog",
+ ["hu"]="november",
+ ["it"]="novembre",
+ ["ja"]="11",
+ ["kr"]="11",
+ ["la"]="November",
+ ["lt"]="lapkričio",
+ ["nb"]="november",
+ ["nl"]="november",
+ ["nn"]="november",
+ ["pe"]="نوامبر",
+ ["pl"]="listopada",
+ ["pt"]="novembro",
+ ["ro"]="noiembrie",
+ ["ru"]="ноября",
+ ["sk"]="novembra",
+ ["sl"]="november",
+ ["sv"]="november",
+ ["tk"]="noýabr",
+ ["tr"]="kasım",
+ ["ua"]="листопада",
+ ["vi"]="tháng mười một",
+ },
+ },
+ ["november:jalali"]={
+ ["labels"]={
+ ["en"]="Bahman",
+ ["fa"]="بهمن",
},
},
["november:mnem"]={
- labels={
- af="",
- ca="",
- cs="list.",
- da="",
- de="",
- en="nov",
- es="nov.",
- fi="",
- fr="",
- gr="",
- hr="stu",
- hu="nov.",
- it="",
- la="",
- lt="nov",
- nb="nov.",
- nl="",
- nn="nov.",
- pl="lis.",
- pt="",
- ro="",
- ru="",
- sk="nov.",
- sl="",
- sv="",
- tk="",
- tr="",
- ua="",
- vi="",
- },
- },
- october={
- labels={
- af="oktober",
- ar="أكتوبر",
+ ["labels"]={
+ ["af"]="",
+ ["ca"]="",
+ ["cs"]="list.",
+ ["da"]="",
+ ["de"]="",
+ ["en"]="nov",
+ ["es"]="nov.",
+ ["fi"]="",
+ ["fr"]="",
+ ["gr"]="",
+ ["hr"]="stu",
+ ["hu"]="nov.",
+ ["it"]="",
+ ["la"]="",
+ ["lt"]="nov",
+ ["nb"]="nov.",
+ ["nl"]="",
+ ["nn"]="nov.",
+ ["pl"]="lis.",
+ ["pt"]="",
+ ["ro"]="",
+ ["ru"]="",
+ ["sk"]="nov.",
+ ["sl"]="",
+ ["sv"]="",
+ ["tk"]="",
+ ["tr"]="",
+ ["ua"]="",
+ ["vi"]="",
+ },
+ },
+ ["october"]={
+ ["labels"]={
+ ["af"]="oktober",
+ ["ar"]="أكتوبر",
["ar-sy"]="تشرين الأول",
- ca="octubre",
- cn="十月",
- cs="října",
- da="oktober",
- de="Oktober",
- en="October",
- es="octubre",
- fi="lokakuu",
- fr="octobre",
- gr="Οκτώβριος",
- hr="listopada",
- hu="október",
- it="ottobre",
- ja="10",
- kr="10",
- la="October",
- lt="spalio",
- nb="oktober",
- nl="oktober",
- nn="oktober",
- pl="października",
- pt="outubro",
- ro="octombrie",
- ru="октября",
- sk="októbra",
- sl="oktober",
- sv="oktober",
- tk="oktýabr",
- tr="ekim",
- ua="жовтня",
- vi="tháng mười",
+ ["ca"]="octubre",
+ ["cn"]="十月",
+ ["cs"]="října",
+ ["da"]="oktober",
+ ["de"]="Oktober",
+ ["en"]="October",
+ ["es"]="octubre",
+ ["fi"]="lokakuu",
+ ["fr"]="octobre",
+ ["gr"]="Οκτώβριος",
+ ["hr"]="listopada",
+ ["hu"]="október",
+ ["it"]="ottobre",
+ ["ja"]="10",
+ ["kr"]="10",
+ ["la"]="October",
+ ["lt"]="spalio",
+ ["nb"]="oktober",
+ ["nl"]="oktober",
+ ["nn"]="oktober",
+ ["pe"]="اکتبر",
+ ["pl"]="października",
+ ["pt"]="outubro",
+ ["ro"]="octombrie",
+ ["ru"]="октября",
+ ["sk"]="októbra",
+ ["sl"]="oktober",
+ ["sv"]="oktober",
+ ["tk"]="oktýabr",
+ ["tr"]="ekim",
+ ["ua"]="жовтня",
+ ["vi"]="tháng mười",
+ },
+ },
+ ["october:jalali"]={
+ ["labels"]={
+ ["en"]="Dey",
+ ["fa"]="دی",
},
},
["october:mnem"]={
- labels={
- af="",
- ca="",
- cs="říj.",
- da="",
- de="",
- en="oct",
- es="oct.",
- fi="",
- fr="",
- gr="",
- hr="lis",
- hu="okt.",
- it="",
- la="",
- lt="oct",
- nb="okt.",
- nl="",
- nn="okt.",
- pl="paź.",
- pt="",
- ro="",
- ru="",
- sk="okt.",
- sl="",
- sv="",
- tk="",
- tr="",
- ua="",
- vi="",
- },
- },
- page={
- labels={
- af="",
- ar="صفحة ",
- ca="",
- cs="strana ",
- da="Side ",
- de="Seite ",
- en="page ",
- es="página ",
- fi="",
- fr="page ",
- gr="",
- hr="stranica ",
- hu="oldal ",
- it="pagina ",
- kr="쪽",
- la="",
- lt="puslapis ",
- nb="side ",
- nl="pagina ",
- nn="side ",
- pl="strona ",
- pt="",
- ro="",
- ru="страница ",
- sk="strana ",
- sl="stran ",
- sv="Sida ",
- tk="",
- tr="",
- ua="сторінка ",
- vi="",
- },
- },
- part={
- labels={
- af="Deel ",
- ar="جزء ",
- ca="Part ",
- cn={"第","部分"},
- cs="Část ",
- da="Del ",
- de="Teil ",
- en="Part ",
- es="Parte ",
- fi="Osa ",
- fr="Partie ",
- gr="Μέρος",
- hr="Dio ",
- hu={""," rész"},
- it="Parte ",
- ja={"第","パート"},
- kr={"제","부"},
- la="Pars ",
- lt={""," dalis"},
- nb="Del",
- nl="Deel ",
- nn="Del",
- pl="Część ",
- pt="Parte ",
- ro="Partea ",
- ru="Часть ",
- sk="Časť ",
- sl="Del ",
- sv="Del ",
- tk="Bölüm",
- tr="Cilt ",
- ua="Частина ",
- vi="Phần ",
- },
- },
- saturday={
- labels={
- af="saterdag",
- ar="السبت",
- ca="dissabte",
- cn="星期六",
- cs="sobota",
- da="lørdag",
- de="Samstag",
- en="Saturday",
- es="sábado",
- fi="lauantai",
- fr="samedi",
- gr="Σάββατο",
- hr="subota",
- hu="szombat",
- it="sabato",
- ja="土曜日",
- kr="토요일",
- la="Dies Saturni",
- lt="šeštadienis",
- nb="lørdag",
- nl="zaterdag",
- nn="laurdag",
- pl="sobota",
- pt="sábado",
- ro="sâmbătă",
- ru="суббота",
- sk="sobota",
- sl="sobota",
- sv="lördag",
- tk="altynjy gün",
- tr="cumartesi",
- ua="субота",
- vi="thứ bảy",
- },
- },
- section={
- hidden=true,
- labels={
- af="Paragraaf ",
- ar="فصل ",
- ca="Secció ",
- cn={"第","节"},
- cs="Sekce ",
- da="",
- de="",
- en="",
- es="Sección ",
- fi="",
- fr="Section ",
- gr="Ενότητα",
- hr="Odjeljak ",
- hu="Fejezet ",
- it="",
- ja={"第","項"},
- kr={"제","절"},
- la="",
- lt="",
- nb="",
- nl="",
- nn="",
- pl="Podrozdział ",
- pt="",
- ro="",
- ru="",
- sk="Sekcia ",
- sl="",
- sv="",
- tk="",
- tr="",
- ua="",
- vi="",
- },
- },
- see={
- labels={
- af="",
- ar="انظر ",
- ca="",
- cs="viz ",
- da="se ",
- de="siehe ",
- en="see ",
- es="ver: ",
- fi="",
- fr="cf. ",
- gr="",
- hr="vidi ",
- hu="lásd ",
- it="cf. ",
- kr="",
- la="",
- lt="žiūrėti ",
- nb="se ",
- nl="zie ",
- nn="sjå ",
- pl="patrz ",
- pt="",
- ro="",
- ru="см. ",
- sk="pozri ",
- sl="glej ",
- sv="se ",
- tk="",
- tr="",
- ua="див. ",
- vi="",
- },
- },
- september={
- labels={
- af="september",
- ar="سبتمبر",
+ ["labels"]={
+ ["af"]="",
+ ["ca"]="",
+ ["cs"]="říj.",
+ ["da"]="",
+ ["de"]="",
+ ["en"]="oct",
+ ["es"]="oct.",
+ ["fi"]="",
+ ["fr"]="",
+ ["gr"]="",
+ ["hr"]="lis",
+ ["hu"]="okt.",
+ ["it"]="",
+ ["la"]="",
+ ["lt"]="oct",
+ ["nb"]="okt.",
+ ["nl"]="",
+ ["nn"]="okt.",
+ ["pl"]="paź.",
+ ["pt"]="",
+ ["ro"]="",
+ ["ru"]="",
+ ["sk"]="okt.",
+ ["sl"]="",
+ ["sv"]="",
+ ["tk"]="",
+ ["tr"]="",
+ ["ua"]="",
+ ["vi"]="",
+ },
+ },
+ ["page"]={
+ ["labels"]={
+ ["af"]="",
+ ["ar"]="صفحة ",
+ ["ca"]="",
+ ["cs"]="strana ",
+ ["da"]="Side ",
+ ["de"]="Seite ",
+ ["en"]="page ",
+ ["es"]="página ",
+ ["fi"]="",
+ ["fr"]="page ",
+ ["gr"]="",
+ ["hr"]="stranica ",
+ ["hu"]="oldal ",
+ ["it"]="pagina ",
+ ["kr"]="쪽",
+ ["la"]="",
+ ["lt"]="puslapis ",
+ ["nb"]="side ",
+ ["nl"]="pagina ",
+ ["nn"]="side ",
+ ["pe"]="صفحه ",
+ ["pl"]="strona ",
+ ["pt"]="",
+ ["ro"]="",
+ ["ru"]="страница ",
+ ["sk"]="strana ",
+ ["sl"]="stran ",
+ ["sv"]="Sida ",
+ ["tk"]="",
+ ["tr"]="",
+ ["ua"]="сторінка ",
+ ["vi"]="",
+ },
+ },
+ ["part"]={
+ ["labels"]={
+ ["af"]="Deel ",
+ ["ar"]="جزء ",
+ ["ca"]="Part ",
+ ["cn"]={ "第", "部分" },
+ ["cs"]="Část ",
+ ["da"]="Del ",
+ ["de"]="Teil ",
+ ["en"]="Part ",
+ ["es"]="Parte ",
+ ["fi"]="Osa ",
+ ["fr"]="Partie ",
+ ["gr"]="Μέρος",
+ ["hr"]="Dio ",
+ ["hu"]={ "", " rész" },
+ ["it"]="Parte ",
+ ["ja"]={ "第", "パート" },
+ ["kr"]={ "제", "부" },
+ ["la"]="Pars ",
+ ["lt"]={ "", " dalis" },
+ ["nb"]="Del",
+ ["nl"]="Deel ",
+ ["nn"]="Del",
+ ["pe"]="قسمت ",
+ ["pl"]="Część ",
+ ["pt"]="Parte ",
+ ["ro"]="Partea ",
+ ["ru"]="Часть ",
+ ["sk"]="Časť ",
+ ["sl"]="Del ",
+ ["sv"]="Del ",
+ ["tk"]="Bölüm",
+ ["tr"]="Cilt ",
+ ["ua"]="Частина ",
+ ["vi"]="Phần ",
+ },
+ },
+ ["precedingpage"]={
+ ["labels"]={
+ ["en"]="on a preceding page",
+ ["nl"]="op een voorgaande bladzijde",
+ ["pe"]="در صفحات گذشته",
+ },
+ },
+ ["saturday"]={
+ ["labels"]={
+ ["af"]="saterdag",
+ ["ar"]="السبت",
+ ["ca"]="dissabte",
+ ["cn"]="星期六",
+ ["cs"]="sobota",
+ ["da"]="lørdag",
+ ["de"]="Samstag",
+ ["en"]="Saturday",
+ ["es"]="sábado",
+ ["fi"]="lauantai",
+ ["fr"]="samedi",
+ ["gr"]="Σάββατο",
+ ["hr"]="subota",
+ ["hu"]="szombat",
+ ["it"]="sabato",
+ ["ja"]="土曜日",
+ ["kr"]="토요일",
+ ["la"]="Dies Saturni",
+ ["lt"]="šeštadienis",
+ ["nb"]="lørdag",
+ ["nl"]="zaterdag",
+ ["nn"]="laurdag",
+ ["pe"]="شنبه",
+ ["pl"]="sobota",
+ ["pt"]="sábado",
+ ["ro"]="sâmbătă",
+ ["ru"]="суббота",
+ ["sk"]="sobota",
+ ["sl"]="sobota",
+ ["sv"]="lördag",
+ ["tk"]="altynjy gün",
+ ["tr"]="cumartesi",
+ ["ua"]="субота",
+ ["vi"]="thứ bảy",
+ },
+ },
+ ["section"]={
+ ["hidden"]=true,
+ ["labels"]={
+ ["af"]="Paragraaf ",
+ ["ar"]="فصل ",
+ ["ca"]="Secció ",
+ ["cn"]={ "第", "节" },
+ ["cs"]="Sekce ",
+ ["da"]="",
+ ["de"]="",
+ ["en"]="",
+ ["es"]="Sección ",
+ ["fi"]="",
+ ["fr"]="Section ",
+ ["gr"]="Ενότητα",
+ ["hr"]="Odjeljak ",
+ ["hu"]="Fejezet ",
+ ["it"]="",
+ ["ja"]={ "第", "項" },
+ ["kr"]={ "제", "절" },
+ ["la"]="",
+ ["lt"]="",
+ ["nb"]="",
+ ["nl"]="",
+ ["nn"]="",
+ ["pe"]="بخش ",
+ ["pl"]="Podrozdział ",
+ ["pt"]="",
+ ["ro"]="",
+ ["ru"]="",
+ ["sk"]="Sekcia ",
+ ["sl"]="",
+ ["sv"]="",
+ ["tk"]="",
+ ["tr"]="",
+ ["ua"]="",
+ ["vi"]="",
+ },
+ },
+ ["see"]={
+ ["labels"]={
+ ["af"]="",
+ ["ar"]="انظر ",
+ ["ca"]="",
+ ["cs"]="viz ",
+ ["da"]="se ",
+ ["de"]="siehe ",
+ ["en"]="see ",
+ ["es"]="ver: ",
+ ["fi"]="",
+ ["fr"]="cf. ",
+ ["gr"]="",
+ ["hr"]="vidi ",
+ ["hu"]="lásd ",
+ ["it"]="cf. ",
+ ["kr"]="",
+ ["la"]="",
+ ["lt"]="žiūrėti ",
+ ["nb"]="se ",
+ ["nl"]="zie ",
+ ["nn"]="sjå ",
+ ["pe"]="نگاه کنید به ",
+ ["pl"]="patrz ",
+ ["pt"]="",
+ ["ro"]="",
+ ["ru"]="см. ",
+ ["sk"]="pozri ",
+ ["sl"]="glej ",
+ ["sv"]="se ",
+ ["tk"]="",
+ ["tr"]="",
+ ["ua"]="див. ",
+ ["vi"]="",
+ },
+ },
+ ["september"]={
+ ["labels"]={
+ ["af"]="september",
+ ["ar"]="سبتمبر",
["ar-ma"]="شتنبر",
["ar-sy"]="أيلول",
- ca="setembre",
- cn="九月",
- cs="září",
- da="september",
- de="September",
- en="September",
- es="septiembre",
- fi="syyskuu",
- fr="septembre",
- gr="Σεπτέμβριος",
- hr="rujna",
- hu="szeptember",
- it="settembre",
- ja="9",
- kr="9",
- la="September",
- lt="rugsėjo",
- nb="september",
- nl="september",
- nn="september",
- pl="września",
- pt="setembro",
- ro="septembrie",
- ru="сентября",
- sk="septembra",
- sl="september",
- sv="september",
- tk="sentýabr",
- tr="eylül",
- ua="вересня",
- vi="tháng chín",
+ ["ca"]="setembre",
+ ["cn"]="九月",
+ ["cs"]="září",
+ ["da"]="september",
+ ["de"]="September",
+ ["en"]="September",
+ ["es"]="septiembre",
+ ["fi"]="syyskuu",
+ ["fr"]="septembre",
+ ["gr"]="Σεπτέμβριος",
+ ["hr"]="rujna",
+ ["hu"]="szeptember",
+ ["it"]="settembre",
+ ["ja"]="9",
+ ["kr"]="9",
+ ["la"]="September",
+ ["lt"]="rugsėjo",
+ ["nb"]="september",
+ ["nl"]="september",
+ ["nn"]="september",
+ ["pe"]="سپتامبر",
+ ["pl"]="września",
+ ["pt"]="setembro",
+ ["ro"]="septembrie",
+ ["ru"]="сентября",
+ ["sk"]="septembra",
+ ["sl"]="september",
+ ["sv"]="september",
+ ["tk"]="sentýabr",
+ ["tr"]="eylül",
+ ["ua"]="вересня",
+ ["vi"]="tháng chín",
+ },
+ },
+ ["september:jalali"]={
+ ["labels"]={
+ ["en"]="Azar",
+ ["fa"]="آذر",
},
},
["september:mnem"]={
- labels={
- af="",
- ca="",
- cs="září",
- da="",
- de="",
- en="sep",
- es="sep.",
- fi="",
- fr="",
- gr="",
- hr="ruj",
- hu="szep.",
- it="",
- la="",
- lt="sep",
- nb="sep.",
- nl="",
- nn="sep.",
- pl="wrz.",
- pt="",
- ro="",
- ru="",
- sk="sept.",
- sl="",
- sv="",
- tk="",
- tr="",
- ua="",
- vi="",
- },
- },
- subsection={
- hidden=true,
- labels={
- af="",
- ar="فصل أدنى ",
- ca="Subsecció ",
- cn="",
- cs="Podsekce ",
- da="",
- de="",
- en="",
- es="Subsección ",
- fi="",
- fr="Soussection ",
- gr="Υπόενότητα",
- hr="Pododjeljak ",
- hu="Alfejezet ",
- it="",
- ja="",
- la="",
- lt="",
- nb="",
- nl="",
- nn="",
- pl="Podpodrozdział ",
- pt="",
- ro="",
- ru="",
- sk="Podsekcia ",
- sl="",
- sv="",
- tk="",
- tr="",
- ua="",
- vi="",
- },
- },
- subsubsection={
- hidden=true,
- labels={
- af="",
- ar="فصل أ دنى أدنى ",
- ca="Subsubsecció ",
- cn="",
- cs="Podpodsekce ",
- da="",
- de="",
- en="",
- es="Subsubsección ",
- fi="",
- fr="Soussoussection ",
- gr="",
- hr="Podpododjeljak ",
- hu="Al-alfejezet ",
- it="",
- ja="",
- la="",
- lt="",
- nb="",
- nl="",
- nn="",
- pl="",
- pt="",
- ro="",
- ru="",
- sk="Podpodsekcia ",
- sl="",
- sv="",
- tk="",
- tr="",
- ua="",
- vi="",
- },
- },
- subsubsubsection={
- hidden=true,
- labels={
- af="",
- ar="فصل أدنى أدنى أدنى ",
- ca="Subsubsubsecció ",
- cn="",
- cs="Podpodpodsekce ",
- da="",
- de="",
- en="",
- es="Subsubsubsección ",
- fi="",
- fr="Soussoussoussection ",
- gr="",
- hr="Podpodpododjeljak ",
- hu="Al-al-alfejezet ",
- it="",
- ja="",
- la="",
- lt="",
- nb="",
- nl="",
- nn="",
- pl="", -- not used in Polish
- pt="",
- ro="",
- ru="",
- sk="Podpodpodsekcia ",
- sl="",
- sv="",
- tk="",
- tr="",
- ua="",
- vi="",
- },
- },
- sunday={
- labels={
- af="sondag",
- ar="الأحد",
- ca="diumenge",
- cn="星期日",
- cs="neděle",
- da="søndag",
- de="Sonntag",
- en="Sunday",
- es="domingo",
- fi="sunnuntai",
- fr="dimanche",
- gr="Κυριακή",
- hr="nedjelja",
- hu="vasárnap",
- it="domenica",
- ja="日曜日",
- kr="일요일",
- la="Dies Solis",
- lt="sekmadienis",
- nb="søndag",
- nl="zondag",
- nn="sundag",
- pl="niedziela",
- pt="domingo",
- ro="duminică",
- ru="воскресенье",
- sk="nedeľa",
- sl="nedelja",
- sv="söndag",
- tk="dynç gün",
- tr="pazar",
- ua="неділя",
- vi="chủ nhật",
- },
- },
- table={
- labels={
- af="Tabel",
- ar="جدول ",
- ca="Taula ",
- cn="表",
- cs="Tabulka ",
- da="Tabel ",
- de="Tabelle ",
- en="Table ",
- es="Tabla ",
- fi="Taulukko ",
- fr="Tableau ",
- gr="Πίνακας",
- hr="Tablica ",
- hu={""," táblázat"},
- it="Tabella ",
- ja="表",
- kr="표 ",
- la="Tabula ",
- lt={""," lentelė."},
- nb="Tabell ",
- nl="Tabel ",
- nn="Tabell ",
- pl="Tabela ",
- pt="Tabela ",
- ro="Tabelul ",
- ru="Таблица ",
- sk="Tabuľka ",
- sl="Tabela ",
- sv="Tabell ",
- tk="Tablisa",
- tr="Tablo ",
- ua="Таблиця ",
- vi="Bảng ",
- },
- },
- thursday={
- labels={
- af="donderdag",
- ar="الخميس",
- ca="dijous",
- cn="星期四",
- cs="čtvrtek",
- da="torsdag",
- de="Donnerstag",
- en="Thursday",
- es="jueves",
- fi="torstai",
- fr="jeudi",
- gr="Πέμπτη",
- hr="četvrtak",
- hu="csütörtök",
- it="giovedì",
- ja="木曜日",
- kr="목요일",
- la="Dies Iovis",
- lt="ketvirtadienis",
- nb="torsdag",
- nl="donderdag",
- nn="torsdag",
- pl="czwartek",
- pt="quinta-feira",
- ro="joi",
- ru="четверг",
- sk="štvrtok",
- sl="četrtek",
- sv="torsdag",
- tk="dördünji gün",
- tr="perşembe",
- ua="четвер",
- vi="thứ năm",
- },
- },
- tuesday={
- labels={
- af="dinsdag",
- ar="الثلاثاء",
- ca="dimarts",
- cn="星期二",
- cs="úterý",
- da="tirsdag",
- de="Dienstag",
- en="Tuesday",
- es="martes",
- fi="tiistai",
- fr="mardi",
- gr="Τρίτη",
- hr="utorak",
- hu="kedd",
- it="martedì",
- ja="火曜日",
- kr="화요일",
- la="Dies Martis",
- lt="antradienis",
- nb="tirsdag",
- nl="dinsdag",
- nn="tysdag",
- pl="wtorek",
- pt="terça-feira",
- ro="marți",
- ru="вторник",
- sk="utorok",
- sl="torek",
- sv="tisdag",
- tk="ikinji gün",
- tr="salı",
- ua="вівторок",
- vi="thứ ba",
- },
- },
- wednesday={
- labels={
- af="woensdag",
- ar="الأربعاء",
- ca="dimecres",
- cn="星期三",
- cs="středa",
- da="onsdag",
- de="Mittwoch",
- en="Wednesday",
- es="miércoles",
- fi="keskiviikko",
- fr="mercredi",
- gr="Τετάρτη",
- hr="srijeda",
- hu="szerda",
- it="mercoledì",
- ja="水曜日",
- kr="수요일",
- la="Dies Mercuri",
- lt="trečiadienis",
- nb="onsdag",
- nl="woensdag",
- nn="onsdag",
- pl="środa",
- pt="quarta-feira",
- ro="miercuri",
- ru="среда",
- sk="streda",
- sl="sreda",
- sv="onsdag",
- tk="üçünji",
- tr="çarşamba",
- ua="середа",
- vi="thứ tư",
+ ["labels"]={
+ ["af"]="",
+ ["ca"]="",
+ ["cs"]="září",
+ ["da"]="",
+ ["de"]="",
+ ["en"]="sep",
+ ["es"]="sep.",
+ ["fi"]="",
+ ["fr"]="",
+ ["gr"]="",
+ ["hr"]="ruj",
+ ["hu"]="szep.",
+ ["it"]="",
+ ["la"]="",
+ ["lt"]="sep",
+ ["nb"]="sep.",
+ ["nl"]="",
+ ["nn"]="sep.",
+ ["pl"]="wrz.",
+ ["pt"]="",
+ ["ro"]="",
+ ["ru"]="",
+ ["sk"]="sept.",
+ ["sl"]="",
+ ["sv"]="",
+ ["tk"]="",
+ ["tr"]="",
+ ["ua"]="",
+ ["vi"]="",
+ },
+ },
+ ["subsection"]={
+ ["hidden"]=true,
+ ["labels"]={
+ ["af"]="",
+ ["ar"]="فصل أدنى ",
+ ["ca"]="Subsecció ",
+ ["cn"]="",
+ ["cs"]="Podsekce ",
+ ["da"]="",
+ ["de"]="",
+ ["en"]="",
+ ["es"]="Subsección ",
+ ["fi"]="",
+ ["fr"]="Soussection ",
+ ["gr"]="Υπόενότητα",
+ ["hr"]="Pododjeljak ",
+ ["hu"]="Alfejezet ",
+ ["it"]="",
+ ["ja"]="",
+ ["la"]="",
+ ["lt"]="",
+ ["nb"]="",
+ ["nl"]="",
+ ["nn"]="",
+ ["pe"]="زیربخش ",
+ ["pl"]="Podpodrozdział ",
+ ["pt"]="",
+ ["ro"]="",
+ ["ru"]="",
+ ["sk"]="Podsekcia ",
+ ["sl"]="",
+ ["sv"]="",
+ ["tk"]="",
+ ["tr"]="",
+ ["ua"]="",
+ ["vi"]="",
+ },
+ },
+ ["subsubsection"]={
+ ["hidden"]=true,
+ ["labels"]={
+ ["af"]="",
+ ["ar"]="فصل أدنى أدنى ",
+ ["ca"]="Subsubsecció ",
+ ["cn"]="",
+ ["cs"]="Podpodsekce ",
+ ["da"]="",
+ ["de"]="",
+ ["en"]="",
+ ["es"]="Subsubsección ",
+ ["fi"]="",
+ ["fr"]="Soussoussection ",
+ ["gr"]="",
+ ["hr"]="Podpododjeljak ",
+ ["hu"]="Al-alfejezet ",
+ ["it"]="",
+ ["ja"]="",
+ ["la"]="",
+ ["lt"]="",
+ ["nb"]="",
+ ["nl"]="",
+ ["nn"]="",
+ ["pe"]="زیرزیربخش ",
+ ["pl"]="",
+ ["pt"]="",
+ ["ro"]="",
+ ["ru"]="",
+ ["sk"]="Podpodsekcia ",
+ ["sl"]="",
+ ["sv"]="",
+ ["tk"]="",
+ ["tr"]="",
+ ["ua"]="",
+ ["vi"]="",
+ },
+ },
+ ["subsubsubsection"]={
+ ["hidden"]=true,
+ ["labels"]={
+ ["af"]="",
+ ["ar"]="فصل أدنى أدنى أدنى ",
+ ["ca"]="Subsubsubsecció ",
+ ["cn"]="",
+ ["cs"]="Podpodpodsekce ",
+ ["da"]="",
+ ["de"]="",
+ ["en"]="",
+ ["es"]="Subsubsubsección ",
+ ["fi"]="",
+ ["fr"]="Soussoussoussection ",
+ ["gr"]="",
+ ["hr"]="Podpodpododjeljak ",
+ ["hu"]="Al-al-alfejezet ",
+ ["it"]="",
+ ["ja"]="",
+ ["la"]="",
+ ["lt"]="",
+ ["nb"]="",
+ ["nl"]="",
+ ["nn"]="",
+ ["pe"]="زیرزیرزیربخش ",
+ ["pl"]="",
+ ["pt"]="",
+ ["ro"]="",
+ ["ru"]="",
+ ["sk"]="Podpodpodsekcia ",
+ ["sl"]="",
+ ["sv"]="",
+ ["tk"]="",
+ ["tr"]="",
+ ["ua"]="",
+ ["vi"]="",
+ },
+ },
+ ["sunday"]={
+ ["labels"]={
+ ["af"]="sondag",
+ ["ar"]="الأحد",
+ ["ca"]="diumenge",
+ ["cn"]="星期日",
+ ["cs"]="neděle",
+ ["da"]="søndag",
+ ["de"]="Sonntag",
+ ["en"]="Sunday",
+ ["es"]="domingo",
+ ["fi"]="sunnuntai",
+ ["fr"]="dimanche",
+ ["gr"]="Κυριακή",
+ ["hr"]="nedjelja",
+ ["hu"]="vasárnap",
+ ["it"]="domenica",
+ ["ja"]="日曜日",
+ ["kr"]="일요일",
+ ["la"]="Dies Solis",
+ ["lt"]="sekmadienis",
+ ["nb"]="søndag",
+ ["nl"]="zondag",
+ ["nn"]="sundag",
+ ["pe"]="یکشنبه",
+ ["pl"]="niedziela",
+ ["pt"]="domingo",
+ ["ro"]="duminică",
+ ["ru"]="воскресенье",
+ ["sk"]="nedeľa",
+ ["sl"]="nedelja",
+ ["sv"]="söndag",
+ ["tk"]="dynç gün",
+ ["tr"]="pazar",
+ ["ua"]="неділя",
+ ["vi"]="chủ nhật",
+ },
+ },
+ ["table"]={
+ ["labels"]={
+ ["af"]="Tabel",
+ ["ar"]="جدول ",
+ ["ca"]="Taula ",
+ ["cn"]="表",
+ ["cs"]="Tabulka ",
+ ["da"]="Tabel ",
+ ["de"]="Tabelle ",
+ ["en"]="Table ",
+ ["es"]="Tabla ",
+ ["fi"]="Taulukko ",
+ ["fr"]="Tableau ",
+ ["gr"]="Πίνακας",
+ ["hr"]="Tablica ",
+ ["hu"]={ "", " táblázat" },
+ ["it"]="Tabella ",
+ ["ja"]="表",
+ ["kr"]="표 ",
+ ["la"]="Tabula ",
+ ["lt"]={ "", " lentelė." },
+ ["nb"]="Tabell ",
+ ["nl"]="Tabel ",
+ ["nn"]="Tabell ",
+ ["pe"]="جدول ",
+ ["pl"]="Tabela ",
+ ["pt"]="Tabela ",
+ ["ro"]="Tabelul ",
+ ["ru"]="Таблица ",
+ ["sk"]="Tabuľka ",
+ ["sl"]="Tabela ",
+ ["sv"]="Tabell ",
+ ["tk"]="Tablisa",
+ ["tr"]="Tablo ",
+ ["ua"]="Таблиця ",
+ ["vi"]="Bảng ",
+ },
+ },
+ ["thursday"]={
+ ["labels"]={
+ ["af"]="donderdag",
+ ["ar"]="الخميس",
+ ["ca"]="dijous",
+ ["cn"]="星期四",
+ ["cs"]="čtvrtek",
+ ["da"]="torsdag",
+ ["de"]="Donnerstag",
+ ["en"]="Thursday",
+ ["es"]="jueves",
+ ["fi"]="torstai",
+ ["fr"]="jeudi",
+ ["gr"]="Πέμπτη",
+ ["hr"]="četvrtak",
+ ["hu"]="csütörtök",
+ ["it"]="giovedì",
+ ["ja"]="木曜日",
+ ["kr"]="목요일",
+ ["la"]="Dies Iovis",
+ ["lt"]="ketvirtadienis",
+ ["nb"]="torsdag",
+ ["nl"]="donderdag",
+ ["nn"]="torsdag",
+ ["pe"]="پنج‌شنبه",
+ ["pl"]="czwartek",
+ ["pt"]="quinta-feira",
+ ["ro"]="joi",
+ ["ru"]="четверг",
+ ["sk"]="štvrtok",
+ ["sl"]="četrtek",
+ ["sv"]="torsdag",
+ ["tk"]="dördünji gün",
+ ["tr"]="perşembe",
+ ["ua"]="четвер",
+ ["vi"]="thứ năm",
+ },
+ },
+ ["tuesday"]={
+ ["labels"]={
+ ["af"]="dinsdag",
+ ["ar"]="الثلاثاء",
+ ["ca"]="dimarts",
+ ["cn"]="星期二",
+ ["cs"]="úterý",
+ ["da"]="tirsdag",
+ ["de"]="Dienstag",
+ ["en"]="Tuesday",
+ ["es"]="martes",
+ ["fi"]="tiistai",
+ ["fr"]="mardi",
+ ["gr"]="Τρίτη",
+ ["hr"]="utorak",
+ ["hu"]="kedd",
+ ["it"]="martedì",
+ ["ja"]="火曜日",
+ ["kr"]="화요일",
+ ["la"]="Dies Martis",
+ ["lt"]="antradienis",
+ ["nb"]="tirsdag",
+ ["nl"]="dinsdag",
+ ["nn"]="tysdag",
+ ["pe"]="سه‌شنبه",
+ ["pl"]="wtorek",
+ ["pt"]="terça-feira",
+ ["ro"]="marți",
+ ["ru"]="вторник",
+ ["sk"]="utorok",
+ ["sl"]="torek",
+ ["sv"]="tisdag",
+ ["tk"]="ikinji gün",
+ ["tr"]="salı",
+ ["ua"]="вівторок",
+ ["vi"]="thứ ba",
+ },
+ },
+ ["wednesday"]={
+ ["labels"]={
+ ["af"]="woensdag",
+ ["ar"]="الأربعاء",
+ ["ca"]="dimecres",
+ ["cn"]="星期三",
+ ["cs"]="středa",
+ ["da"]="onsdag",
+ ["de"]="Mittwoch",
+ ["en"]="Wednesday",
+ ["es"]="miércoles",
+ ["fi"]="keskiviikko",
+ ["fr"]="mercredi",
+ ["gr"]="Τετάρτη",
+ ["hr"]="srijeda",
+ ["hu"]="szerda",
+ ["it"]="mercoledì",
+ ["ja"]="水曜日",
+ ["kr"]="수요일",
+ ["la"]="Dies Mercuri",
+ ["lt"]="trečiadienis",
+ ["nb"]="onsdag",
+ ["nl"]="woensdag",
+ ["nn"]="onsdag",
+ ["pe"]="چهارشنبه",
+ ["pl"]="środa",
+ ["pt"]="quarta-feira",
+ ["ro"]="miercuri",
+ ["ru"]="среда",
+ ["sk"]="streda",
+ ["sl"]="sreda",
+ ["sv"]="onsdag",
+ ["tk"]="üçünji",
+ ["tr"]="çarşamba",
+ ["ua"]="середа",
+ ["vi"]="thứ tư",
},
},
- },
- titles={
- abbreviations={
- labels={
- af="Afkortings",
- ar="الاختصارات",
- ca="Abreviacions",
- cn="缩略语",
- cs="Zkratky",
- da="Forkortelser",
- de="Abkürzungen",
- en="Abbreviations",
- es="Abreviaturas",
- fi="Lyhennyksi",
- fr="Abréviations",
- gr="Συντομογραφίες",
- hr="Kratice",
- hu="Rövidítések",
- it="Abbreviazioni",
- ja="略語",
- kr="약어",
- la="Notae",
- lt="Santrumpos",
- nb="Forkortelser",
- nl="Afkortingen",
- nn="Forkortingar",
- pl="Wykaz skrótów",
- pt="Abreviaturas",
- ro="Abrevieri",
- ru="Список сокращений",
- sk="Skratky",
- sl="Kratice",
- sv="Förkortningar",
- tk="Gysgaltmalar",
- tr="Kısaltmalar",
- ua="Перелік скорочень",
- vi="Chữ viết tắt",
- },
- },
- content={
- labels={
- af="Inhoud",
- ar="المحتويات",
- ca="Índex de continguts",
- cn="目录",
- cs="Obsah",
- da="Indhold",
- de="Inhalt",
- en="Contents",
- es="Contenido",
- fi="Sisällys",
- fr="Table des matières",
- gr="Περιεχόμενα",
- hr="Sadržaj",
- hu="Tartalom",
- it="Indice",
- ja="目次",
- kr="목차",
- la="Quod in libro continetur",
- lt="Turinys",
- nb="Innhold",
- nl="Inhoud",
- nn="Innhald",
- pl="Spis treści",
- pt="Conteúdo",
- ro="Cuprins",
- ru="Содержание",
- sk="Obsah",
- sl="Kazalo",
- sv="Innehåll",
- tk="Mazmuny",
- tr="Fihrist",
- ua="Зміст",
- vi="Mục lục",
- },
- },
- figures={
- labels={
- af="Figure",
- ar="الأشكال",
- ca="Figures",
- cn="图形",
- cs="Seznam obrázků",
- da="Figurer",
- de="Abbildungen",
- en="Figures",
- es="Figuras",
- fi="Kuvi",
- fr="Figures",
- gr="Σχήματα",
- hr="Slike",
- hu="Ábrák",
- it="Figure",
- ja="図",
- kr="그림 ",
- la="Imagines",
- lt="Iliustracijos",
- nb="Figurer",
- nl="Figuren",
- nn="Figurar",
- pl="Ilustracje",
- pt="Figuras",
- ro="Figuri",
- ru="Список иллюстраций",
- sk="Zoznam obrázkov",
- sl="Slike",
- sv="Figurer",
- tk="Suratlar",
- tr="Şekiller",
- ua="Перелік ілюстрацій",
- vi="Danh sách hình vẽ",
- },
- },
- graphics={
- labels={
- af="Grafieke",
- ar="الرسوم",
- ca="Gràfiques",
- cn="图",
- cs="Seznam grafů",
- da="Grafik",
- de="Graphiken",
- en="Graphics",
- es="Gráficos",
- fi="Grafiikkaoi",
- fr="Graphiques",
- gr="Γραφικά",
- hr="Slike",
- hu="Grafikák",
- it="Grafici",
- ja="グラフ",
- kr="그래픽 ",
- la="Typi",
- lt="Graphics",
- nb="Bilde",
- nl="Grafieken",
- nn="Bilete",
- pl="Grafiki",
- pt="Gráficos",
- ro="Grafice",
- ru="Список графиков",
- sk="Zoznam grafov",
- sl="Slike",
- sv="Grafik",
- tk="Grafikler",
- tr="Grafikler",
- ua="Перелік графіков",
- vi="Đồ thị",
- },
- },
- index={
- labels={
- af="Indeks",
- ar="الفهرس",
- ca="Índex alfabètic",
- cn="索引",
- cs="Rejstřík",
- da="Indeks",
- de="Index",
- en="Index",
- es="Índice",
- fi="Indeksiluku",
- fr="Index",
- gr="Ευρετήριο",
- hr="Indeks",
- hu="Index",
- it="Indice",
- ja="目次",
- kr="찾아보기",
- la="Indices",
- lt="Rodyklė",
- nb="Register",
- nl="Index",
- nn="Register",
- pl="Indeks",
- pt="Índice",
- ro="Index",
- ru="Алфавитный указатель",
- sk="Zoznam",
- sl="Stvarno kazalo",
- sv="Sakregister",
- tk="Indeks",
- tr="İndex",
- ua="Покажчик",
- vi="Chỉ số",
- },
- },
- intermezzi={
- labels={
- af="Intermezzos",
- ar="فسح",
- ca="Intermedis",
- cn="퉣",
- cs="Intermezza",
- da="Intermezzoer",
- de="Intermezzi",
- en="Intermezzos",
- es="Intermedios",
- fi="Intermezzos",
- fr="Intermèdes",
- gr="Παύσεις",
- hr="Intermeci",
- hu="Intermezzok",
- it="Intermezzi",
- ja="間奏曲",
- kr="간주곡",
- la="Intermissa",
- lt="Intermezzos",
- nb="Intermesso",
- nl="Intermezzo's",
- nn="Intermesso",
- pl="Intermezza",
- pt="Intermédios",
- ro="Intermzzo",
- ru="Список вставок",
- sk="Intermezzá",
- sl="Intermezzi",
- sv="Intermezzon",
- tk="Arakesmeler",
- tr="",
- ua="Перелік вставок",
- vi="Intermezzos",
- },
- },
- logos={
- labels={
- af="Logos",
- ar="الشعارات",
- ca="Logotips",
- cn="徽贬",
- cs="Loga",
- da="Logoer",
- de="Logos",
- en="Logos",
- es="Logotipos",
- fi="Vertauskuva",
- fr="Logos",
- gr="Λογότυπα",
- hr="Logotipi",
- hu="Fejlécek",
- it="Logotipi",
- ja="理性",
- kr="이성",
- la="Typi negotiales",
- lt="Logos",
- nb="Logoer",
- nl="Logo's",
- nn="Logoar",
- pl="Znaki",
- pt="Logotipos",
- ro="Logo-uri",
- ru="Логотипы",
- sk="Logá",
- sl="Logotipi",
- sv="Loggor",
- tk="Logolar",
- tr="Logolar",
- ua="Логотипи",
- vi="Biểu tượng",
- },
- },
- pubs={
- labels={
- af="",
- ca="Referències",
- cs="Literatura",
- da="",
- de="Literatur",
- en="References",
- es="Bibliografía",
- fi="",
- fr="Bibliographie",
- gr="",
- hr="Literatura",
- hu="Bibliográfia",
- it="Bibliografia",
- kr="참고문헌",
- la="",
- lt="Literatūra",
- nb="",
- nl="Literatuur",
- nn="",
- pl="Bibliografia",
- pt="",
- ro="",
- ru="",
- sk="Literatúra",
- sl="Literatura",
- sv="",
- tk="",
- tr="",
- ua="",
- vi="",
- },
- },
- tables={
- labels={
- af="Tabelle",
- ar="الجداول",
- ca="Taules",
- cn="表格",
- cs="Seznam tabulek",
- da="Tabeller",
- de="Tabellen",
- en="Tables",
- es="Tablas",
- fi="Taulukkoj",
- fr="Tableaux",
- gr="Πίνακες",
- hr="Tablice",
- hu="Táblázatok",
- it="Tabelle",
- ja="机",
- kr="표 ",
- la="Tabulae",
- lt="Lentelės",
- nb="Tabeller",
- nl="Tabellen",
- nn="Tabellar",
- pl="Tabele",
- pt="Tabelas",
- ro="Tabele",
- ru="Список таблиц",
- sk="Zoznam tabuliek",
- sl="Tabele",
- sv="Tabeller",
- tk="Tablisalar",
- tr="Tablolar",
- ua="Перелік таблиць",
- vi="Danh sách bảng",
- },
- },
- units={
- labels={
- af="Eenhede",
- ar="الوحدات",
- ca="Unitats",
- cn="计量单位",
- cs="Jednotky",
- da="Enheder",
- de="Einheiten",
- en="Units",
- es="Unidades",
- fi="Yksiköt",
- fr="Unités",
- gr="Μονάδες",
- hr="Jedinice",
- hu="Mértékegységek",
- it="Unità",
- ja="ユニッツ",
- kr="측정단위",
- la="Modi",
- lt="Units",
- nb="Enheter",
- nl="Eenheden",
- nn="Einingar",
- pl="Jednostki",
- pt="Unidades",
- ro="Unități",
- ru="Единицы измерения",
- sk="Jednotky",
- sl="Enote",
- sv="Enheter",
- tk="Birlikler",
- tr="Birimler",
- ua="Одиниці виміру",
- vi="Đơn vị",
+ ["year"]={
+ ["labels"]={
+ ["en"]="year",
+ ["kr"]="년",
+ ["nl"]="jaar",
+ ["pe"]="سال",
},
},
},
- btx = {
- ["mastersthesis"] = {
- labels = {
- en = "Master's thesis",
- fr = "Thèse de master (DEA, DESS, master)",
- de = "Masterarbeit",
- },
- },
- ["phdthesis"] = {
- labels = {
- en = "PhD thesis",
- fr = "Thèse de doctorat",
- de = "Dissertation",
- },
- },
- ["technicalreport"] = {
- labels = {
- en = "Technical report",
- fr = "Rapport technique",
- de = "Technischer Bericht",
+ ["titles"]={
+ ["abbreviations"]={
+ ["labels"]={
+ ["af"]="Afkortings",
+ ["ar"]="الاختصارات",
+ ["ca"]="Abreviacions",
+ ["cn"]="缩略语",
+ ["cs"]="Zkratky",
+ ["da"]="Forkortelser",
+ ["de"]="Abkürzungen",
+ ["en"]="Abbreviations",
+ ["es"]="Abreviaturas",
+ ["fi"]="Lyhennyksi",
+ ["fr"]="Abréviations",
+ ["gr"]="Συντομογραφίες",
+ ["hr"]="Kratice",
+ ["hu"]="Rövidítések",
+ ["it"]="Abbreviazioni",
+ ["ja"]="略語",
+ ["kr"]="약어",
+ ["la"]="Notae",
+ ["lt"]="Santrumpos",
+ ["nb"]="Forkortelser",
+ ["nl"]="Afkortingen",
+ ["nn"]="Forkortingar",
+ ["pe"]="نشانه‌های اختصاری",
+ ["pl"]="Wykaz skrótów",
+ ["pt"]="Abreviaturas",
+ ["ro"]="Abrevieri",
+ ["ru"]="Список сокращений",
+ ["sk"]="Skratky",
+ ["sl"]="Kratice",
+ ["sv"]="Förkortningar",
+ ["tk"]="Gysgaltmalar",
+ ["tr"]="Kısaltmalar",
+ ["ua"]="Перелік скорочень",
+ ["vi"]="Chữ viết tắt",
+ },
+ },
+ ["content"]={
+ ["labels"]={
+ ["af"]="Inhoud",
+ ["ar"]="المحتويات",
+ ["ca"]="Índex de continguts",
+ ["cn"]="目录",
+ ["cs"]="Obsah",
+ ["da"]="Indhold",
+ ["de"]="Inhalt",
+ ["en"]="Contents",
+ ["es"]="Contenido",
+ ["fi"]="Sisällys",
+ ["fr"]="Table des matières",
+ ["gr"]="Περιεχόμενα",
+ ["hr"]="Sadržaj",
+ ["hu"]="Tartalom",
+ ["it"]="Indice",
+ ["ja"]="目次",
+ ["kr"]="목차",
+ ["la"]="Quod in libro continetur",
+ ["lt"]="Turinys",
+ ["nb"]="Innhold",
+ ["nl"]="Inhoud",
+ ["nn"]="Innhald",
+ ["pe"]="فهرست مطالب",
+ ["pl"]="Spis treści",
+ ["pt"]="Conteúdo",
+ ["ro"]="Cuprins",
+ ["ru"]="Содержание",
+ ["sk"]="Obsah",
+ ["sl"]="Kazalo",
+ ["sv"]="Innehåll",
+ ["tk"]="Mazmuny",
+ ["tr"]="Fihrist",
+ ["ua"]="Зміст",
+ ["vi"]="Mục lục",
+ },
+ },
+ ["figures"]={
+ ["labels"]={
+ ["af"]="Figure",
+ ["ar"]="الأشكال",
+ ["ca"]="Figures",
+ ["cn"]="图形",
+ ["cs"]="Seznam obrázků",
+ ["da"]="Figurer",
+ ["de"]="Abbildungen",
+ ["en"]="Figures",
+ ["es"]="Figuras",
+ ["fi"]="Kuvi",
+ ["fr"]="Figures",
+ ["gr"]="Σχήματα",
+ ["hr"]="Slike",
+ ["hu"]="Ábrák",
+ ["it"]="Figure",
+ ["ja"]="図",
+ ["kr"]="그림 ",
+ ["la"]="Imagines",
+ ["lt"]="Iliustracijos",
+ ["nb"]="Figurer",
+ ["nl"]="Figuren",
+ ["nn"]="Figurar",
+ ["pe"]="فهرست اشکال",
+ ["pl"]="Ilustracje",
+ ["pt"]="Figuras",
+ ["ro"]="Figuri",
+ ["ru"]="Список иллюстраций",
+ ["sk"]="Zoznam obrázkov",
+ ["sl"]="Slike",
+ ["sv"]="Figurer",
+ ["tk"]="Suratlar",
+ ["tr"]="Şekiller",
+ ["ua"]="Перелік ілюстрацій",
+ ["vi"]="Danh sách hình vẽ",
+ },
+ },
+ ["graphics"]={
+ ["labels"]={
+ ["af"]="Grafieke",
+ ["ar"]="الرسوم",
+ ["ca"]="Gràfiques",
+ ["cn"]="图",
+ ["cs"]="Seznam grafů",
+ ["da"]="Grafik",
+ ["de"]="Graphiken",
+ ["en"]="Graphics",
+ ["es"]="Gráficos",
+ ["fi"]="Grafiikkaoi",
+ ["fr"]="Graphiques",
+ ["gr"]="Γραφικά",
+ ["hr"]="Slike",
+ ["hu"]="Grafikák",
+ ["it"]="Grafici",
+ ["ja"]="グラフ",
+ ["kr"]="그래픽 ",
+ ["la"]="Typi",
+ ["lt"]="Graphics",
+ ["nb"]="Bilde",
+ ["nl"]="Grafieken",
+ ["nn"]="Bilete",
+ ["pe"]="فهرست طرح‌ها",
+ ["pl"]="Grafiki",
+ ["pt"]="Gráficos",
+ ["ro"]="Grafice",
+ ["ru"]="Список графиков",
+ ["sk"]="Zoznam grafov",
+ ["sl"]="Slike",
+ ["sv"]="Grafik",
+ ["tk"]="Grafikler",
+ ["tr"]="Grafikler",
+ ["ua"]="Перелік графіков",
+ ["vi"]="Đồ thị",
+ },
+ },
+ ["index"]={
+ ["labels"]={
+ ["af"]="Indeks",
+ ["ar"]="الفهرس",
+ ["ca"]="Índex alfabètic",
+ ["cn"]="索引",
+ ["cs"]="Rejstřík",
+ ["da"]="Indeks",
+ ["de"]="Index",
+ ["en"]="Index",
+ ["es"]="Índice",
+ ["fi"]="Indeksiluku",
+ ["fr"]="Index",
+ ["gr"]="Ευρετήριο",
+ ["hr"]="Indeks",
+ ["hu"]="Index",
+ ["it"]="Indice",
+ ["ja"]="目次",
+ ["kr"]="찾아보기",
+ ["la"]="Indices",
+ ["lt"]="Rodyklė",
+ ["nb"]="Register",
+ ["nl"]="Index",
+ ["nn"]="Register",
+ ["pe"]="نمایه",
+ ["pl"]="Indeks",
+ ["pt"]="Índice",
+ ["ro"]="Index",
+ ["ru"]="Алфавитный указатель",
+ ["sk"]="Zoznam",
+ ["sl"]="Stvarno kazalo",
+ ["sv"]="Sakregister",
+ ["tk"]="Indeks",
+ ["tr"]="İndex",
+ ["ua"]="Покажчик",
+ ["vi"]="Chỉ số",
+ },
+ },
+ ["intermezzi"]={
+ ["labels"]={
+ ["af"]="Intermezzos",
+ ["ar"]="فسح",
+ ["ca"]="Intermedis",
+ ["cn"]="퉣",
+ ["cs"]="Intermezza",
+ ["da"]="Intermezzoer",
+ ["de"]="Intermezzi",
+ ["en"]="Intermezzos",
+ ["es"]="Intermedios",
+ ["fi"]="Intermezzos",
+ ["fr"]="Intermèdes",
+ ["gr"]="Παύσεις",
+ ["hr"]="Intermeci",
+ ["hu"]="Intermezzok",
+ ["it"]="Intermezzi",
+ ["ja"]="間奏曲",
+ ["kr"]="간주곡",
+ ["la"]="Intermissa",
+ ["lt"]="Intermezzos",
+ ["nb"]="Intermesso",
+ ["nl"]="Intermezzo's",
+ ["nn"]="Intermesso",
+ ["pl"]="Intermezza",
+ ["pt"]="Intermédios",
+ ["ro"]="Intermzzo",
+ ["ru"]="Список вставок",
+ ["sk"]="Intermezzá",
+ ["sl"]="Intermezzi",
+ ["sv"]="Intermezzon",
+ ["tk"]="Arakesmeler",
+ ["tr"]="",
+ ["ua"]="Перелік вставок",
+ ["vi"]="Intermezzos",
+ },
+ },
+ ["logos"]={
+ ["labels"]={
+ ["af"]="Logos",
+ ["ar"]="الشعارات",
+ ["ca"]="Logotips",
+ ["cn"]="徽贬",
+ ["cs"]="Loga",
+ ["da"]="Logoer",
+ ["de"]="Logos",
+ ["en"]="Logos",
+ ["es"]="Logotipos",
+ ["fi"]="Vertauskuva",
+ ["fr"]="Logos",
+ ["gr"]="Λογότυπα",
+ ["hr"]="Logotipi",
+ ["hu"]="Fejlécek",
+ ["it"]="Logotipi",
+ ["ja"]="理性",
+ ["kr"]="이성",
+ ["la"]="Typi negotiales",
+ ["lt"]="Logos",
+ ["nb"]="Logoer",
+ ["nl"]="Logo's",
+ ["nn"]="Logoar",
+ ["pe"]="فهرست لوگوها",
+ ["pl"]="Znaki",
+ ["pt"]="Logotipos",
+ ["ro"]="Logo-uri",
+ ["ru"]="Логотипы",
+ ["sk"]="Logá",
+ ["sl"]="Logotipi",
+ ["sv"]="Loggor",
+ ["tk"]="Logolar",
+ ["tr"]="Logolar",
+ ["ua"]="Логотипи",
+ ["vi"]="Biểu tượng",
+ },
+ },
+ ["pubs"]={
+ ["labels"]={
+ ["af"]="",
+ ["ca"]="Referències",
+ ["cs"]="Literatura",
+ ["da"]="",
+ ["de"]="Literatur",
+ ["en"]="References",
+ ["es"]="Bibliografía",
+ ["fi"]="",
+ ["fr"]="Bibliographie",
+ ["gr"]="",
+ ["hr"]="Literatura",
+ ["hu"]="Bibliográfia",
+ ["it"]="Bibliografia",
+ ["kr"]="참고문헌",
+ ["la"]="",
+ ["lt"]="Literatūra",
+ ["nb"]="",
+ ["nl"]="Literatuur",
+ ["nn"]="",
+ ["pe"]="کتاب‌نامه",
+ ["pl"]="Bibliografia",
+ ["pt"]="",
+ ["ro"]="",
+ ["ru"]="",
+ ["sk"]="Literatúra",
+ ["sl"]="Literatura",
+ ["sv"]="",
+ ["tk"]="",
+ ["tr"]="",
+ ["ua"]="",
+ ["vi"]="",
+ },
+ },
+ ["tables"]={
+ ["labels"]={
+ ["af"]="Tabelle",
+ ["ar"]="الجداول",
+ ["ca"]="Taules",
+ ["cn"]="表格",
+ ["cs"]="Seznam tabulek",
+ ["da"]="Tabeller",
+ ["de"]="Tabellen",
+ ["en"]="Tables",
+ ["es"]="Tablas",
+ ["fi"]="Taulukkoj",
+ ["fr"]="Tableaux",
+ ["gr"]="Πίνακες",
+ ["hr"]="Tablice",
+ ["hu"]="Táblázatok",
+ ["it"]="Tabelle",
+ ["ja"]="机",
+ ["kr"]="표 ",
+ ["la"]="Tabulae",
+ ["lt"]="Lentelės",
+ ["nb"]="Tabeller",
+ ["nl"]="Tabellen",
+ ["nn"]="Tabellar",
+ ["pe"]="فهرست جداول",
+ ["pl"]="Tabele",
+ ["pt"]="Tabelas",
+ ["ro"]="Tabele",
+ ["ru"]="Список таблиц",
+ ["sk"]="Zoznam tabuliek",
+ ["sl"]="Tabele",
+ ["sv"]="Tabeller",
+ ["tk"]="Tablisalar",
+ ["tr"]="Tablolar",
+ ["ua"]="Перелік таблиць",
+ ["vi"]="Danh sách bảng",
+ },
+ },
+ ["units"]={
+ ["labels"]={
+ ["af"]="Eenhede",
+ ["ar"]="الوحدات",
+ ["ca"]="Unitats",
+ ["cn"]="计量单位",
+ ["cs"]="Jednotky",
+ ["da"]="Enheder",
+ ["de"]="Einheiten",
+ ["en"]="Units",
+ ["es"]="Unidades",
+ ["fi"]="Yksiköt",
+ ["fr"]="Unités",
+ ["gr"]="Μονάδες",
+ ["hr"]="Jedinice",
+ ["hu"]="Mértékegységek",
+ ["it"]="Unità",
+ ["ja"]="ユニッツ",
+ ["kr"]="측정단위",
+ ["la"]="Modi",
+ ["lt"]="Units",
+ ["nb"]="Enheter",
+ ["nl"]="Eenheden",
+ ["nn"]="Einingar",
+ ["pe"]="واحدها",
+ ["pl"]="Jednostki",
+ ["pt"]="Unidades",
+ ["ro"]="Unități",
+ ["ru"]="Единицы измерения",
+ ["sk"]="Jednotky",
+ ["sl"]="Enote",
+ ["sv"]="Enheter",
+ ["tk"]="Birlikler",
+ ["tr"]="Birimler",
+ ["ua"]="Одиниці виміру",
+ ["vi"]="Đơn vị",
},
},
- --
- ["editor"] = {
- labels = {
- en = "editor",
- fr = "éditeur",
- de = "Herausgeber",
- },
- },
- ["editors"] = {
- labels = {
- en = "editors",
- fr = "éditeurs",
- de = "Herausgeber",
- },
- },
- ["edition"] = {
- labels = {
- en = "edition",
- fr = "édition",
- de = "Auflage",
- },
- },
- --
- ["volume"] = {
- labels = {
- en = "volume",
- de = "Band",
- },
- },
- ["Volume"] = {
- labels = {
- en = "Volume",
- de = "Band",
- },
- },
- ["number"] = {
- labels = {
- en = "number",
- fr = "numéro",
- de = "Numer",
- },
- },
- ["Number"] = {
- labels = {
- en = "Number",
- fr = "Numéro",
- de = "Numer",
- },
- },
- ["in"] = {
- labels = {
- en = "in",
- fr = "dans",
- de = "in",
- },
- },
- ["of"] = {
- labels = {
- en = "of",
- fr = "de",
- de = "von",
- },
- },
- --
- ["In"] = {
- labels = {
- en = "In",
- fr = "Dans",
- de = "In",
- },
- },
- --
- ["p"] = {
- labels = {
- en = "p",
- de = "S",
- },
- },
- ["pp"] = {
- labels = {
- en = "pp",
- de = "S",
- },
- },
- ["pages"] = {
- labels = {
- en = "pages",
- de = "Seiten",
- },
- },
- --
- ["and"] = {
- labels = {
- en = "and",
- de = "und",
- },
- },
- ["others"] = {
- labels = {
- en = "et al.",
- },
- },
- }
+ },
}
local functions = data.labels.functions
@@ -2802,3 +3012,5 @@ local functions = data.labels.functions
functions.asin = functions.arcsin
functions.acos = functions.arccos
functions.atan = functions.arctan
+
+table.save("e:/tmp/x.lua",data.labels)
diff --git a/tex/context/base/mkiv/lang-wrd.lua b/tex/context/base/mkiv/lang-wrd.lua
index 38e6187af..8b6e48401 100644
--- a/tex/context/base/mkiv/lang-wrd.lua
+++ b/tex/context/base/mkiv/lang-wrd.lua
@@ -38,6 +38,7 @@ local getid = nuts.getid
local getsubtype = nuts.getsubtype
local getchar = nuts.getchar
local setattr = nuts.setattr
+local getlang = nuts.getlang
local isglyph = nuts.isglyph
local traverse_nodes = nuts.traverse
@@ -45,7 +46,7 @@ local traverse_ids = nuts.traverse_id
local wordsdata = words.data
local chardata = characters.data
-local tasks = nodes.tasks
+local enableaction = nodes.tasks.enableaction
local unsetvalue = attributes.unsetvalue
@@ -161,7 +162,7 @@ local function mark_words(head,whenfound) -- can be optimized and shared
while current do
local code, id = isglyph(current)
if code then
- local a = getfield(current,"lang")
+ local a = getlang(current)
if a then
if a ~= language then
if s > 0 then
@@ -234,7 +235,7 @@ function words.enable(settings)
if e then
e(settings)
end
- tasks.enableaction("processors","languages.words.check")
+ enableaction("processors","languages.words.check")
enabled = true
end
diff --git a/tex/context/base/mkiv/layo-ini.lua b/tex/context/base/mkiv/layo-ini.lua
index d35d7ef69..bfe33595d 100644
--- a/tex/context/base/mkiv/layo-ini.lua
+++ b/tex/context/base/mkiv/layo-ini.lua
@@ -18,7 +18,7 @@ layouts = {
local status = layouts.status
-function status.leftorrightpagection(left,right)
+function status.leftorrightpageaction(left,right)
if left == nil then
left, right = false, true
end
@@ -41,14 +41,14 @@ function status.leftorrightpagection(left,right)
end
end
-function status.isleftpage()
+function status.isleftpage(r)
if not conditionals.layoutisdoublesided then
return false
elseif conditionals.layoutissinglesided then
return false
elseif texgetcount("pagenoshift") % 2 == 0 then
- return texgetcount("realpageno") % 2 == 0
+ return (r or texgetcount("realpageno")) % 2 == 0
else
- return not texgetcount("realpageno") % 2 == 0
+ return not (r or texgetcount("realpageno")) % 2 == 0
end
end
diff --git a/tex/context/base/mkiv/lpdf-ano.lua b/tex/context/base/mkiv/lpdf-ano.lua
index 72800bc64..e89bda12b 100644
--- a/tex/context/base/mkiv/lpdf-ano.lua
+++ b/tex/context/base/mkiv/lpdf-ano.lua
@@ -25,7 +25,8 @@ local trace_references = false trackers.register("references.references"
local trace_destinations = false trackers.register("references.destinations", function(v) trace_destinations = v end)
local trace_bookmarks = false trackers.register("references.bookmarks", function(v) trace_bookmarks = v end)
-local log_destinations = false directives.register("destinations.log", function(v) log_destinations = v end)
+local log_destinations = false directives.register("destinations.log", function(v) log_destinations = v end)
+local untex_urls = true directives.register("references.untexurls", function(v) untex_urls = v end)
local report_reference = logs.reporter("backend","references")
local report_destination = logs.reporter("backend","destinations")
@@ -69,8 +70,7 @@ local nodepool = nodes.pool
----- pdfannotation_node = nodepool.pdfannotation
----- pdfdestination_node = nodepool.pdfdestination
------ latelua_node = nodepool.latelua
-local latelua_function_node = nodepool.lateluafunction -- still node ... todo
+local new_latelua = nodepool.latelua
local texgetcount = tex.getcount
@@ -229,7 +229,6 @@ luatex.registerstopactions(function()
end
end)
-
local function pdfnametree(destinations)
local slices = { }
local sorted = table.sortedkeys(destinations)
@@ -503,7 +502,7 @@ function nodeinjections.destination(width,height,depth,names,view)
end
end
if doview then
- return latelua_function_node(function() flushdestination(width,height,depth,names,view) end)
+ return new_latelua(function() flushdestination(width,height,depth,names,view) end)
end
end
@@ -579,10 +578,15 @@ local function pdffilelink(filename,destination,page,actions)
}
end
+local untex = references.urls.untex
+
local function pdfurllink(url,destination,page)
if not url or url == "" then
return false
end
+ if untex_urls then
+ url = untex(url) -- last minute cleanup of \* and spaces
+ end
if destination and destination ~= "" then
url = url .. "#" .. destination
end
@@ -726,7 +730,7 @@ function nodeinjections.reference(width,height,depth,prerolled)
if trace_references then
report_reference("link: width %p, height %p, depth %p, prerolled %a",width,height,depth,prerolled)
end
- return latelua_function_node(function() finishreference(width,height,depth,prerolled) end)
+ return new_latelua(function() finishreference(width,height,depth,prerolled) end)
end
end
@@ -735,7 +739,7 @@ function nodeinjections.annotation(width,height,depth,prerolled,r)
if trace_references then
report_reference("special: width %p, height %p, depth %p, prerolled %a",width,height,depth,prerolled)
end
- return latelua_function_node(function() finishannotation(width,height,depth,prerolled,r or false) end)
+ return new_latelua(function() finishannotation(width,height,depth,prerolled,r or false) end)
end
end
diff --git a/tex/context/base/mkiv/lpdf-col.lua b/tex/context/base/mkiv/lpdf-col.lua
index 877c01a1c..b5973ba88 100644
--- a/tex/context/base/mkiv/lpdf-col.lua
+++ b/tex/context/base/mkiv/lpdf-col.lua
@@ -8,6 +8,7 @@ if not modules then modules = { } end modules ['lpdf-col'] = {
local type, next, tostring, tonumber = type, next, tostring, tonumber
local char, byte, format, gsub, rep, gmatch = string.char, string.byte, string.format, string.gsub, string.rep, string.gmatch
+local settings_to_array, settings_to_numbers = utilities.parsers.settings_to_array, utilities.parsers.settings_to_numbers
local concat = table.concat
local round = math.round
local formatters = string.formatters
@@ -26,7 +27,6 @@ local register = nodepool.register
local pdfliteral = nodepool.pdfliteral
local pdfconstant = lpdf.constant
-local pdfstring = lpdf.string
local pdfdictionary = lpdf.dictionary
local pdfarray = lpdf.array
local pdfreference = lpdf.reference
@@ -167,9 +167,9 @@ local pdf_device_cmyk = pdfconstant("DeviceCMYK")
local pdf_device_gray = pdfconstant("DeviceGray")
local pdf_extgstate = pdfconstant("ExtGState")
-local pdf_rbg_range = pdfarray { 0, 1, 0, 1, 0, 1 }
-local pdf_cmyk_range = pdfarray { 0, 1, 0, 1, 0, 1, 0, 1 }
-local pdf_gray_range = pdfarray { 0, 1 }
+local pdf_rgb_range = pdfarray { 0, 1, 0, 1, 0, 1 }
+local pdf_cmyk_range = pdfarray { 0, 1, 0, 1, 0, 1, 0, 1 }
+local pdf_gray_range = pdfarray { 0, 1 }
local f_rgb_function = formatters["dup %s mul exch dup %s mul exch %s mul"]
local f_cmyk_function = formatters["dup %s mul exch dup %s mul exch dup %s mul exch %s mul"]
@@ -305,13 +305,15 @@ local function registersomeindexcolor(name,noffractions,names,p,colorspace,range
noffractions = tonumber(noffractions) or 1 -- to be checked
local cnames = pdfarray()
local domain = pdfarray()
- if names == "" then
- names = name .. ",None"
- else
- names = names .. ",None"
- end
- for n in gmatch(names,"[^,]+") do
- cnames[#cnames+1] = pdfconstant(spotcolornames[n] or n)
+ local names = settings_to_array(#names == 0 and name or names)
+ local values = settings_to_numbers(p)
+ names [#names +1] = "None"
+ values[#values+1] = 1
+ -- check for #names == #values
+ for i=1,#names do
+ local name = names[i]
+ local spot = spotcolornames[name]
+ cnames[#cnames+1] = pdfconstant(spot ~= "" and spot or name)
domain[#domain+1] = 0
domain[#domain+1] = 1
end
@@ -327,19 +329,10 @@ local function registersomeindexcolor(name,noffractions,names,p,colorspace,range
colorspace,
pdfreference(n),
}
- if p == "" then
- p = "1"
- else
- p = p .. ",1"
- end
- local pi = { }
- for pp in gmatch(p,"[^,]+") do
- pi[#pi+1] = tonumber(pp)
- end
- local vector, set, n = { }, { }, #pi
+ local vector, set, n = { }, { }, #values
for i=255,0,-1 do
for j=1,n do
- set[j] = format("%02X",round(pi[j]*i))
+ set[j] = format("%02X",round(values[j]*i))
end
vector[#vector+1] = concat(set)
end
@@ -357,21 +350,24 @@ local function delayindexcolor(name,names,func)
end
local function indexcolorref(name) -- actually, names (parent) is the hash
- if not indexcolorhash[name] then
- local delayedindexcolor = delayedindexcolors[name]
+ local parent = colors.spotcolorparent(name)
+ local data = indexcolorhash[name]
+ if data == nil then
+ local delayedindexcolor = delayedindexcolors[parent]
if type(delayedindexcolor) == "function" then
- indexcolorhash[name] = delayedindexcolor()
- delayedindexcolors[name] = true
+ data = delayedindexcolor()
+ delayedindexcolors[parent] = true
end
+ indexcolorhash[parent] = data or false
end
- return indexcolorhash[name]
+ return data
end
function registrations.rgbspotcolor(name,noffractions,names,p,r,g,b)
if noffractions == 1 then
- registersomespotcolor(name,noffractions,names,p,pdf_device_rgb,pdf_rbg_range,f_rgb_function(r,g,b))
+ registersomespotcolor(name,noffractions,names,p,pdf_device_rgb,pdf_rgb_range,f_rgb_function(r,g,b))
else
- registersomespotcolor(name,noffractions,names,p,pdf_device_rgb,pdf_rbg_range,f_num_3(r,g,b))
+ registersomespotcolor(name,noffractions,names,p,pdf_device_rgb,pdf_rgb_range,f_num_3(r,g,b))
end
delayindexcolor(name,names,function()
return registersomeindexcolor(name,noffractions,names,p,pdf_device_rgb,pdf_rgb_range,f_rgb_function(r,g,b))
@@ -414,7 +410,7 @@ end
function codeinjections.setfigurecolorspace(data,figure)
local color = data.request.color
- if color then
+ if color then -- != v_default
local ref = indexcolorref(color)
if ref then
figure.colorspace = ref
@@ -425,7 +421,7 @@ end
-- transparency
-local transparencies = { [0] =
+local pdftransparencies = { [0] =
pdfconstant("Normal"),
pdfconstant("Normal"),
pdfconstant("Multiply"),
@@ -457,7 +453,7 @@ function registrations.transparency(n,a,t)
Type = pdf_extgstate,
ca = 1,
CA = 1,
- BM = transparencies[1],
+ BM = pdftransparencies[1],
AIS = false,
}
local m = pdfflushobject(d)
@@ -472,7 +468,7 @@ function registrations.transparency(n,a,t)
Type = pdf_extgstate,
ca = tonumber(t),
CA = tonumber(t),
- BM = transparencies[tonumber(a)] or transparencies[0],
+ BM = pdftransparencies[tonumber(a)] or pdftransparencies[0],
AIS = false,
}
local m = pdfflushobject(d)
diff --git a/tex/context/base/mkiv/lpdf-fld.lua b/tex/context/base/mkiv/lpdf-fld.lua
index 75d0ba98e..bbafb299b 100644
--- a/tex/context/base/mkiv/lpdf-fld.lua
+++ b/tex/context/base/mkiv/lpdf-fld.lua
@@ -58,9 +58,8 @@ if not modules then modules = { } end modules ['lpdf-fld'] = {
local tostring, next = tostring, next
local gmatch, lower, format, formatters = string.gmatch, string.lower, string.format, string.formatters
local lpegmatch = lpeg.match
-local utfchar = utf.char
local bpfactor, todimen = number.dimenfactors.bp, string.todimen
-
+local sortedhash = table.sortedhash
local trace_fields = false trackers.register("backends.fields", function(v) trace_fields = v end)
local report_fields = logs.reporter("backend","fields")
@@ -88,7 +87,6 @@ local pdfreference = lpdf.reference
local pdfunicode = lpdf.unicode
local pdfstring = lpdf.string
local pdfconstant = lpdf.constant
-local pdftoeight = lpdf.toeight
local pdfflushobject = lpdf.flushobject
local pdfshareobjectreference = lpdf.shareobjectreference
local pdfshareobject = lpdf.shareobject
@@ -249,7 +247,7 @@ local mapping = {
local function fieldactions(specification) -- share actions
local d = nil
- for key, target in next, mapping do
+ for key, target in sortedhash(mapping) do -- sort so that we can compare pdf
local code = specification[key]
if code and code ~= "" then
-- local a = checked(code)
@@ -367,7 +365,8 @@ local function registerfonts()
checkpdfdocencoding() -- already done
local d = pdfdictionary()
local pdffonttype, pdffontsubtype = pdfconstant("Font"), pdfconstant("Type1")
- for tag, name in next, usedfonts do
+ -- for tag, name in next, usedfonts do
+ for tag, name in sortedhash(usedfonts) do
local f = pdfdictionary {
Type = pdffonttype,
Subtype = pdffontsubtype,
@@ -655,7 +654,7 @@ local xfdftemplate = [[
function codeinjections.exportformdata(name)
local result = { }
- for k, v in table.sortedhash(fields) do
+ for k, v in sortedhash(fields) do
result[#result+1] = formatters[" <field name='%s'><value>%s</value></field>"](v.name or k,v.default or "")
end
local base = file.basename(tex.jobname)
@@ -880,7 +879,7 @@ local forceencoding = false
local function finishfields()
local sometext = forceencoding
- for name, field in next, fields do
+ for name, field in sortedhash(fields) do
local kids = field.kids
if kids then
pdfflushobject(field.kidsnum,kids)
@@ -894,7 +893,7 @@ local function finishfields()
sometext = true
end
end
- for name, field in next, radios do
+ for name, field in sortedhash(radios) do
local kids = field.kids
if kids then
pdfflushobject(field.kidsnum,kids)
diff --git a/tex/context/base/mkiv/lpdf-fmt.lua b/tex/context/base/mkiv/lpdf-fmt.lua
index b1d9a4b0c..8bbd3374f 100644
--- a/tex/context/base/mkiv/lpdf-fmt.lua
+++ b/tex/context/base/mkiv/lpdf-fmt.lua
@@ -11,7 +11,7 @@ if not modules then modules = { } end modules ['lpdf-fmt'] = {
-- context --directives="backend.format=PDF/X-1a:2001" --trackers=backend.format yourfile
local lower, gmatch, format, find = string.lower, string.gmatch, string.format, string.find
-local concat, serialize = table.concat, table.serialize
+local concat, serialize, sortedhash = table.concat, table.serialize, table.sortedhash
local trace_format = false trackers.register("backend.format", function(v) trace_format = v end)
local trace_variables = false trackers.register("backend.variables", function(v) trace_variables = v end)
@@ -85,7 +85,7 @@ local formatspecification, formatname = nil, nil
-- * correspondent document wide flags (write once) needed for permission tests
local formats = utilities.storage.allocate {
- ["version"] = {
+ version = {
external_icc_profiles = 1.4, -- 'p' in name; URL reference of output intent
jbig2_compression = 1.4,
jpeg2000_compression = 1.5, -- not supported yet
@@ -95,7 +95,7 @@ local formats = utilities.storage.allocate {
transparency = 1.4,
object_compression = 1.5,
},
- ["default"] = {
+ default = {
pdf_version = 1.7, -- todo: block tex primitive
format_name = "default",
xmp_file = "lpdf-pdx.xml",
@@ -114,298 +114,315 @@ local formats = utilities.storage.allocate {
transparency = true, -- todo: block at lua level
jbig2_compression = true, -- todo: block at lua level
jpeg2000_compression = true, -- todo: block at lua level
+ include_cidsets = true,
inject_metadata = function()
-- nothing
end
},
- ["pdf/x-1a:2001"] = {
- pdf_version = 1.3,
- format_name = "PDF/X-1a:2001",
- xmp_file = "lpdf-pdx.xml",
- gts_flag = "GTS_PDFX",
- gray_scale = true,
- cmyk_colors = true,
- spot_colors = true,
- internal_icc_profiles = true,
- inject_metadata = function()
- addtoinfo("GTS_PDFXVersion","PDF/X-1a:2001")
- injectxmpinfo("xml://rdf:RDF","<rdf:Description rdf:about='' xmlns:pdfxid='http://www.npes.org/pdfx/ns/id/'><pdfxid:GTS_PDFXVersion>PDF/X-1a:2001</pdfxid:GTS_PDFXVersion></rdf:Description>",false)
- end
- },
- ["pdf/x-1a:2003"] = {
- pdf_version = 1.4,
- format_name = "PDF/X-1a:2003",
- xmp_file = "lpdf-pdx.xml",
- gts_flag = "GTS_PDFX",
- gray_scale = true,
- cmyk_colors = true,
- spot_colors = true,
- internal_icc_profiles = true,
- inject_metadata = function()
- addtoinfo("GTS_PDFXVersion","PDF/X-1a:2003")
- injectxmpinfo("xml://rdf:RDF","<rdf:Description rdf:about='' xmlns:pdfxid='http://www.npes.org/pdfx/ns/id/'><pdfxid:GTS_PDFXVersion>PDF/X-1a:2003</pdfxid:GTS_PDFXVersion></rdf:Description>",false)
- end
- },
- ["pdf/x-3:2002"] = {
- pdf_version = 1.3,
- format_name = "PDF/X-3:2002",
- xmp_file = "lpdf-pdx.xml",
- gts_flag = "GTS_PDFX",
- gray_scale = true,
- cmyk_colors = true,
- rgb_colors = true,
- calibrated_rgb_colors = true,
- spot_colors = true,
- cielab_colors = true,
- internal_icc_profiles = true,
- include_intents = true,
- inject_metadata = function()
- addtoinfo("GTS_PDFXVersion","PDF/X-3:2002")
- end
- },
- ["pdf/x-3:2003"] = {
- pdf_version = 1.4,
- format_name = "PDF/X-3:2003",
- xmp_file = "lpdf-pdx.xml",
- gts_flag = "GTS_PDFX",
- gray_scale = true,
- cmyk_colors = true,
- rgb_colors = true,
- calibrated_rgb_colors = true,
- spot_colors = true,
- cielab_colors = true,
- internal_icc_profiles = true,
- include_intents = true,
- jbig2_compression = true,
- inject_metadata = function()
- addtoinfo("GTS_PDFXVersion","PDF/X-3:2003")
- end
- },
- ["pdf/x-4"] = {
- pdf_version = 1.6,
- format_name = "PDF/X-4",
- xmp_file = "lpdf-pdx.xml",
- gts_flag = "GTS_PDFX",
- gray_scale = true,
- cmyk_colors = true,
- rgb_colors = true,
- calibrated_rgb_colors = true,
- spot_colors = true,
- cielab_colors = true,
- internal_icc_profiles = true,
- include_intents = true,
- optional_content = true,
- transparency = true,
- jbig2_compression = true,
- jpeg2000_compression = true,
- object_compression = true,
- 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:RenditionClass>",false)
- end
- },
- ["pdf/x-4p"] = {
- pdf_version = 1.6,
- format_name = "PDF/X-4p",
- xmp_file = "lpdf-pdx.xml",
- gts_flag = "GTS_PDFX",
- gray_scale = true,
- cmyk_colors = true,
- rgb_colors = true,
- calibrated_rgb_colors = true,
- spot_colors = true,
- cielab_colors = true,
- internal_icc_profiles = true,
- external_icc_profiles = true,
- include_intents = true,
- optional_content = true,
- transparency = true,
- jbig2_compression = true,
- jpeg2000_compression = true,
- object_compression = true,
- 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:RenditionClass>",false)
- end
- },
- ["pdf/x-5g"] = {
- pdf_version = 1.6,
- format_name = "PDF/X-5g",
- xmp_file = "lpdf-pdx.xml",
- gts_flag = "GTS_PDFX",
- gray_scale = true,
- cmyk_colors = true,
- rgb_colors = true,
- calibrated_rgb_colors = true,
- spot_colors = true,
- cielab_colors = true,
- internal_icc_profiles = true,
- include_intents = true,
- open_prepress_interface = true,
- optional_content = true,
- transparency = true,
- jbig2_compression = true,
- jpeg2000_compression = true,
- object_compression = true,
- inject_metadata = function()
- -- todo
- end
- },
- ["pdf/x-5pg"] = {
- pdf_version = 1.6,
- format_name = "PDF/X-5pg",
- xmp_file = "lpdf-pdx.xml",
- gts_flag = "GTS_PDFX",
- gray_scale = true,
- cmyk_colors = true,
- rgb_colors = true,
- calibrated_rgb_colors = true,
- spot_colors = true,
- cielab_colors = true,
- internal_icc_profiles = true,
- external_icc_profiles = true,
- include_intents = true,
- open_prepress_interface = true,
- optional_content = true,
- transparency = true,
- jbig2_compression = true,
- jpeg2000_compression = true,
- object_compression = true,
- inject_metadata = function()
- -- todo
- end
- },
- ["pdf/x-5n"] = {
- pdf_version = 1.6,
- format_name = "PDF/X-5n",
- xmp_file = "lpdf-pdx.xml",
- gts_flag = "GTS_PDFX",
- gray_scale = true,
- cmyk_colors = true,
- rgb_colors = true,
- calibrated_rgb_colors = true,
- spot_colors = true,
- cielab_colors = true,
- internal_icc_profiles = true,
- include_intents = true,
- optional_content = true,
- transparency = true,
- jbig2_compression = true,
- jpeg2000_compression = true,
- nchannel_colorspace = true,
- object_compression = true,
- inject_metadata = function()
- -- todo
- end
- },
- ["pdf/a-1a:2005"] = {
- pdf_version = 1.4,
- format_name = "pdf/a-1a:2005",
- xmp_file = "lpdf-pda.xml",
- gts_flag = "GTS_PDFA1",
- 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, -- NEW; forms are allowed (with limitations); no JS, other restrictions are unknown (TODO)
- tagging = true, -- NEW; the only difference to PDF/A-1b
- internal_icc_profiles = true,
- inject_metadata = function()
- injectxmpinfo("xml://rdf:RDF","<rdf:Description rdf:about='' xmlns:pdfaid='http://www.aiim.org/pdfa/ns/id/'><pdfaid:part>1</pdfaid:part><pdfaid:conformance>A</pdfaid:conformance></rdf:Description>",false)
- end
- },
- ["pdf/a-1b:2005"] = {
- pdf_version = 1.4,
- format_name = "pdf/a-1b:2005",
- xmp_file = "lpdf-pda.xml",
- gts_flag = "GTS_PDFA1",
- 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,
- internal_icc_profiles = true,
- inject_metadata = function()
- 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
- },
+ data = {
+ ["pdf/x-1a:2001"] = {
+ pdf_version = 1.3,
+ format_name = "PDF/X-1a:2001",
+ xmp_file = "lpdf-pdx.xml",
+ gts_flag = "GTS_PDFX",
+ gray_scale = true,
+ cmyk_colors = true,
+ spot_colors = true,
+ internal_icc_profiles = true,
+ include_cidsets = true,
+ inject_metadata = function()
+ addtoinfo("GTS_PDFXVersion","PDF/X-1a:2001")
+ injectxmpinfo("xml://rdf:RDF","<rdf:Description rdf:about='' xmlns:pdfxid='http://www.npes.org/pdfx/ns/id/'><pdfxid:GTS_PDFXVersion>PDF/X-1a:2001</pdfxid:GTS_PDFXVersion></rdf:Description>",false)
+ end
+ },
+ ["pdf/x-1a:2003"] = {
+ pdf_version = 1.4,
+ format_name = "PDF/X-1a:2003",
+ xmp_file = "lpdf-pdx.xml",
+ gts_flag = "GTS_PDFX",
+ gray_scale = true,
+ cmyk_colors = true,
+ spot_colors = true,
+ internal_icc_profiles = true,
+ include_cidsets = true,
+ inject_metadata = function()
+ addtoinfo("GTS_PDFXVersion","PDF/X-1a:2003")
+ injectxmpinfo("xml://rdf:RDF","<rdf:Description rdf:about='' xmlns:pdfxid='http://www.npes.org/pdfx/ns/id/'><pdfxid:GTS_PDFXVersion>PDF/X-1a:2003</pdfxid:GTS_PDFXVersion></rdf:Description>",false)
+ end
+ },
+ ["pdf/x-3:2002"] = {
+ pdf_version = 1.3,
+ format_name = "PDF/X-3:2002",
+ xmp_file = "lpdf-pdx.xml",
+ gts_flag = "GTS_PDFX",
+ gray_scale = true,
+ cmyk_colors = true,
+ rgb_colors = true,
+ calibrated_rgb_colors = true,
+ spot_colors = true,
+ cielab_colors = true,
+ internal_icc_profiles = true,
+ include_intents = true,
+ include_cidsets = true,
+ inject_metadata = function()
+ addtoinfo("GTS_PDFXVersion","PDF/X-3:2002")
+ end
+ },
+ ["pdf/x-3:2003"] = {
+ pdf_version = 1.4,
+ format_name = "PDF/X-3:2003",
+ xmp_file = "lpdf-pdx.xml",
+ gts_flag = "GTS_PDFX",
+ gray_scale = true,
+ cmyk_colors = true,
+ rgb_colors = true,
+ calibrated_rgb_colors = true,
+ spot_colors = true,
+ cielab_colors = true,
+ internal_icc_profiles = true,
+ include_intents = true,
+ jbig2_compression = true,
+ include_cidsets = true,
+ inject_metadata = function()
+ addtoinfo("GTS_PDFXVersion","PDF/X-3:2003")
+ end
+ },
+ ["pdf/x-4"] = {
+ pdf_version = 1.6,
+ format_name = "PDF/X-4",
+ xmp_file = "lpdf-pdx.xml",
+ gts_flag = "GTS_PDFX",
+ gray_scale = true,
+ cmyk_colors = true,
+ rgb_colors = true,
+ calibrated_rgb_colors = true,
+ spot_colors = true,
+ cielab_colors = true,
+ internal_icc_profiles = true,
+ include_intents = true,
+ optional_content = true,
+ transparency = true,
+ jbig2_compression = true,
+ jpeg2000_compression = true,
+ object_compression = true,
+ include_cidsets = true,
+ 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:RenditionClass>",false)
+ end
+ },
+ ["pdf/x-4p"] = {
+ pdf_version = 1.6,
+ format_name = "PDF/X-4p",
+ xmp_file = "lpdf-pdx.xml",
+ gts_flag = "GTS_PDFX",
+ gray_scale = true,
+ cmyk_colors = true,
+ rgb_colors = true,
+ calibrated_rgb_colors = true,
+ spot_colors = true,
+ cielab_colors = true,
+ internal_icc_profiles = true,
+ external_icc_profiles = true,
+ include_intents = true,
+ optional_content = true,
+ transparency = true,
+ jbig2_compression = true,
+ jpeg2000_compression = true,
+ object_compression = true,
+ include_cidsets = true,
+ 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:RenditionClass>",false)
+ end
+ },
+ ["pdf/x-5g"] = {
+ pdf_version = 1.6,
+ format_name = "PDF/X-5g",
+ xmp_file = "lpdf-pdx.xml",
+ gts_flag = "GTS_PDFX",
+ gray_scale = true,
+ cmyk_colors = true,
+ rgb_colors = true,
+ calibrated_rgb_colors = true,
+ spot_colors = true,
+ cielab_colors = true,
+ internal_icc_profiles = true,
+ include_intents = true,
+ open_prepress_interface = true,
+ optional_content = true,
+ transparency = true,
+ jbig2_compression = true,
+ jpeg2000_compression = true,
+ object_compression = true,
+ include_cidsets = true,
+ inject_metadata = function()
+ -- todo
+ end
+ },
+ ["pdf/x-5pg"] = {
+ pdf_version = 1.6,
+ format_name = "PDF/X-5pg",
+ xmp_file = "lpdf-pdx.xml",
+ gts_flag = "GTS_PDFX",
+ gray_scale = true,
+ cmyk_colors = true,
+ rgb_colors = true,
+ calibrated_rgb_colors = true,
+ spot_colors = true,
+ cielab_colors = true,
+ internal_icc_profiles = true,
+ external_icc_profiles = true,
+ include_intents = true,
+ open_prepress_interface = true,
+ optional_content = true,
+ transparency = true,
+ jbig2_compression = true,
+ jpeg2000_compression = true,
+ object_compression = true,
+ include_cidsets = true,
+ inject_metadata = function()
+ -- todo
+ end
+ },
+ ["pdf/x-5n"] = {
+ pdf_version = 1.6,
+ format_name = "PDF/X-5n",
+ xmp_file = "lpdf-pdx.xml",
+ gts_flag = "GTS_PDFX",
+ gray_scale = true,
+ cmyk_colors = true,
+ rgb_colors = true,
+ calibrated_rgb_colors = true,
+ spot_colors = true,
+ cielab_colors = true,
+ internal_icc_profiles = true,
+ include_intents = true,
+ optional_content = true,
+ transparency = true,
+ jbig2_compression = true,
+ jpeg2000_compression = true,
+ nchannel_colorspace = true,
+ object_compression = true,
+ include_cidsets = true,
+ inject_metadata = function()
+ -- todo
+ end
+ },
+ ["pdf/a-1a:2005"] = {
+ pdf_version = 1.4,
+ format_name = "pdf/a-1a:2005",
+ xmp_file = "lpdf-pda.xml",
+ gts_flag = "GTS_PDFA1",
+ 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, -- NEW; forms are allowed (with limitations); no JS, other restrictions are unknown (TODO)
+ tagging = true, -- NEW; the only difference to PDF/A-1b
+ internal_icc_profiles = true,
+ include_cidsets = true,
+ inject_metadata = function()
+ injectxmpinfo("xml://rdf:RDF","<rdf:Description rdf:about='' xmlns:pdfaid='http://www.aiim.org/pdfa/ns/id/'><pdfaid:part>1</pdfaid:part><pdfaid:conformance>A</pdfaid:conformance></rdf:Description>",false)
+ end
+ },
+ ["pdf/a-1b:2005"] = {
+ pdf_version = 1.4,
+ format_name = "pdf/a-1b:2005",
+ xmp_file = "lpdf-pda.xml",
+ gts_flag = "GTS_PDFA1",
+ 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,
+ internal_icc_profiles = true,
+ include_cidsets = true,
+ inject_metadata = function()
+ 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,
+ include_cidsets = false,
+ 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,
+ include_cidsets = false,
+ 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,
+ include_cidsets = 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
@@ -701,7 +718,7 @@ function codeinjections.setformat(s)
local option = s.option or ""
local filename = s.file or ""
if format ~= "" then
- local spec = formats[lower(format)]
+ local spec = formats.data[lower(format)]
if spec then
formatspecification = spec
formatname = spec.format_name
@@ -736,6 +753,9 @@ function codeinjections.setformat(s)
report_backend("forcing pdf version %s.%s, compression disabled",
majorversion,minorversion)
end
+ if pdf.setomitcidset then
+ pdf.setomitcidset(formatspecification.include_cidsets == false and 1 or 0)
+ end
--
-- context.setupcolors { -- not this way
-- cmyk = spec.cmyk_colors and variables.yes or variables.no,
@@ -769,7 +789,7 @@ function codeinjections.setformat(s)
handleiccprofile("color profile",spec,profile,filename,handledefaultprofile,options,true)
handleiccprofile("output intent",spec,intent,filename,handleoutputintent,options,false)
if trace_variables then
- for k, v in table.sortedhash(formats.default) do
+ for k, v in sortedhash(formats.default) do
local v = formatspecification[k]
if type(v) ~= "function" then
report_backend("%a = %a",k,v or false)
@@ -813,30 +833,28 @@ end
function codeinjections.supportedformats()
local t = { }
- for k, v in table.sortedhash(formats) do
- if find(k,"pdf",1,true) then
- t[#t+1] = k
- end
+ for k, v in sortedhash(formats.data) do
+ t[#t+1] = k
end
return t
end
---~ The following is somewhat cleaner but then we need to flag that there are
---~ color spaces set so that the page flusher does not optimize the (at that
---~ moment) still empty array away. So, next(d_colorspaces) should then become
---~ a different test, i.e. also on flag. I'll add that when we need more forward
---~ referencing.
---~
---~ local function embedprofile = handledefaultprofile
---~
---~ local function flushembeddedprofiles()
---~ for colorspace, filename in next, defaults do
---~ embedprofile(colorspace,filename)
---~ end
---~ end
---~
---~ local function handledefaultprofile(s)
---~ defaults[lower(s.colorspace)] = s.filename
---~ end
---~
---~ lpdf.registerdocumentfinalizer(flushembeddedprofiles,1,"embedded color profiles")
+-- The following is somewhat cleaner but then we need to flag that there are
+-- color spaces set so that the page flusher does not optimize the (at that
+-- moment) still empty array away. So, next(d_colorspaces) should then become
+-- a different test, i.e. also on flag. I'll add that when we need more forward
+-- referencing.
+--
+-- local function embedprofile = handledefaultprofile
+--
+-- local function flushembeddedprofiles()
+-- for colorspace, filename in next, defaults do
+-- embedprofile(colorspace,filename)
+-- end
+-- end
+--
+-- local function handledefaultprofile(s)
+-- defaults[lower(s.colorspace)] = s.filename
+-- end
+--
+-- lpdf.registerdocumentfinalizer(flushembeddedprofiles,1,"embedded color profiles")
diff --git a/tex/context/base/mkiv/lpdf-grp.lua b/tex/context/base/mkiv/lpdf-grp.lua
index 0eac52dfb..1ebc9b23d 100644
--- a/tex/context/base/mkiv/lpdf-grp.lua
+++ b/tex/context/base/mkiv/lpdf-grp.lua
@@ -16,8 +16,7 @@ local backends, lpdf = backends, lpdf
local nodeinjections = backends.pdf.nodeinjections
local colors = attributes.colors
-local basepoints = number.dimenfactors["bp"]
-local inches = number.dimenfactors["in"]
+local basepoints = number.dimenfactors.bp
local nodeinjections = backends.pdf.nodeinjections
local codeinjections = backends.pdf.codeinjections
@@ -36,46 +35,31 @@ 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,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
- C0 = pdfarray(color_a),
- C1 = pdfarray(color_b),
- N = tonumber(n),
- }
- separation = separation and registrations.getspotcolorreference(separation)
- local s = pdfdictionary {
- ShadingType = stype,
- ColorSpace = separation and pdfreference(separation) or pdfconstant(colorspace),
- Function = pdfreference(pdfflushobject(f)),
- Coords = pdfarray(coordinates),
- Extend = pdfarray { true, true },
- AntiAlias = pdfboolean(true),
- }
- lpdf.adddocumentshade(name,pdfreference(pdfflushobject(s)))
-end
-
local function shade(stype,name,domain,color_a,color_b,n,colorspace,coordinates,separation,steps,fractions)
local func = nil
+ --
+ -- domain has to be consistently added in all dictionaries here otherwise
+ -- acrobat fails with a drawing error
+ --
+ domain = pdfarray(domain)
+ n = tonumber(n)
+ --
if steps then
local list = pdfarray()
local bounds = pdfarray()
local encode = pdfarray()
for i=1,steps do
- bounds[i] = fractions[i] or 1
+ if i < steps then
+ bounds[i] = fractions[i] or 1
+ end
encode[2*i-1] = 0
encode[2*i] = 1
list [i] = pdfdictionary {
FunctionType = 2,
- Domain = pdfarray(domain), -- domain is actually a string
+ Domain = domain,
C0 = pdfarray(color_a[i]),
C1 = pdfarray(color_b[i]),
- N = tonumber(n),
+ N = n,
}
end
func = pdfdictionary {
@@ -83,21 +67,22 @@ local function shade(stype,name,domain,color_a,color_b,n,colorspace,coordinates,
Bounds = bounds,
Encode = encode,
Functions = list,
- Domain = pdfarray(domain), -- domain is actually a string
+ Domain = domain,
}
else
func = pdfdictionary {
FunctionType = 2,
- Domain = pdfarray(domain), -- domain is actually a string
+ Domain = domain,
C0 = pdfarray(color_a),
C1 = pdfarray(color_b),
- N = tonumber(n),
+ N = n,
}
end
separation = separation and registrations.getspotcolorreference(separation)
local s = pdfdictionary {
ShadingType = stype,
ColorSpace = separation and pdfreference(separation) or pdfconstant(colorspace),
+ Domain = domain,
Function = pdfreference(pdfflushobject(func)),
Coords = pdfarray(coordinates),
Extend = pdfarray { true, true },
@@ -267,8 +252,6 @@ end
-- temp hack
-local factor = number.dimenfactors.bp
-
function img.package(image) -- see lpdf-u3d **
local boundingbox = image.bbox
local imagetag = "Im" .. image.index
@@ -288,8 +271,42 @@ function img.package(image) -- see lpdf-u3d **
local xform = img.scan {
attr = resources(),
stream = formatters["%F 0 0 %F 0 0 cm /%s Do"](width,height,imagetag),
- bbox = { 0, 0, width/factor, height/factor },
+ bbox = { 0, 0, width/basepoints, height/basepoints },
}
img.immediatewrite(xform)
return xform
end
+
+-- experimental
+
+local nofpatterns = 0
+local f_pattern = formatters["q /Pattern cs /%s scn 0 0 %F %F re f Q"] -- q Q is not really needed
+
+local texsavebox = tex.saveboxresource
+
+function lpdf.registerpattern(specification)
+ nofpatterns = nofpatterns + 1
+ local d = pdfdictionary {
+ Type = pdfconstant("Pattern"),
+ PatternType = 1,
+ PaintType = 1,
+ TilingType = 2,
+ XStep = (specification.width or 10) * basepoints,
+ YStep = (specification.height or 10) * basepoints,
+ Matrix = {
+ 1, 0, 0, 1,
+ (specification.hoffset or 0) * basepoints,
+ (specification.voffset or 0) * basepoints,
+ },
+ }
+ local resources = lpdf.collectedresources{ patterns = false }
+ local attributes = d()
+ local onlybounds = 1
+ local patternobj = texsavebox(specification.number,attributes,resources,true,onlybounds)
+ lpdf.adddocumentpattern("Pt" .. nofpatterns,lpdf.reference(patternobj ))
+ return nofpatterns
+end
+
+function lpdf.patternstream(n,width,height)
+ return f_pattern("Pt" .. n,width*basepoints,height*basepoints)
+end
diff --git a/tex/context/base/mkiv/lpdf-ini.lua b/tex/context/base/mkiv/lpdf-ini.lua
index f0b919d4e..1b24269a6 100644
--- a/tex/context/base/mkiv/lpdf-ini.lua
+++ b/tex/context/base/mkiv/lpdf-ini.lua
@@ -78,8 +78,8 @@ end
local pdfsetinfo = pdf.setinfo
local pdfsetcatalog = pdf.setcatalog
-local pdfsetnames = pdf.setnames
-local pdfsettrailer = pdf.settrailer
+----- pdfsetnames = pdf.setnames
+----- pdfsettrailer = pdf.settrailer
local pdfsetpageresources = pdf.setpageresources
local pdfsetpageattributes = pdf.setpageattributes
@@ -312,59 +312,8 @@ local f_array = formatters["[ % t ]"]
local f_key_number = formatters["/%s %F"]
local f_tonumber = formatters["%F"]
--- local f_key_value = formatters["/%s %s"]
--- local f_key_dictionary = formatters["/%s <<% t>>"]
--- local f_dictionary = formatters["<<% t>>"]
--- local f_key_array = formatters["/%s [% t]"]
--- local f_array = formatters["[% t]"]
-
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, n = { }, 0
@@ -514,8 +463,15 @@ local mt_v = { __lpdftype = "verbose", __tostring = tostring_v, __call = valu
local function pdfstream(t) -- we need to add attributes
if t then
- for i=1,#t do
- t[i] = tostring(t[i])
+ local tt = type(t)
+ if tt == "table" then
+ for i=1,#t do
+ t[i] = tostring(t[i])
+ end
+ elseif tt == "string" then
+ t= { t }
+ else
+ t= { tostring(t) }
end
end
return setmetatable(t or { },mt_x)
@@ -1002,11 +958,20 @@ do
local function flushpatterns () if next(d_patterns ) then trace_flush("patterns") pdfimmediateobject(r_patterns, tostring(d_patterns )) end end
local function flushshades () if next(d_shades ) then trace_flush("shades") pdfimmediateobject(r_shades, tostring(d_shades )) end end
- function lpdf.collectedresources()
+ -- patterns are special as they need resources to so we can get recursive references and in that case
+ -- acrobat doesn't show anything (other viewers handle it well)
+ --
+ -- todo: share them
+ -- todo: force when not yet set
+
+ function lpdf.collectedresources(options)
local ExtGState = next(d_extgstates ) and p_extgstates
local ColorSpace = next(d_colorspaces) and p_colorspaces
local Pattern = next(d_patterns ) and p_patterns
local Shading = next(d_shades ) and p_shades
+ if options and options.patterns == false then
+ Pattern = nil
+ end
if ExtGState or ColorSpace or Pattern or Shading then
local collected = pdfdictionary {
ExtGState = ExtGState,
@@ -1053,7 +1018,7 @@ end
do
- local timestamp = os.date("%Y-%m-%dT%X") .. os.timezone(true)
+ local timestamp = backends.timestamp()
function lpdf.timestamp()
return timestamp
@@ -1064,7 +1029,7 @@ do
n = converters.totime(n)
if n then
converters.settime(n)
- timestamp = os.date("%Y-%m-%dT%X",os.time(n)) .. os.timezone(true)
+ timestamp = backends.timestamp()
end
end
return timestamp
@@ -1223,12 +1188,17 @@ end
do
- 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 f_actual_text_one = formatters["BT /Span << /ActualText <feff%04x> >> BDC %s EMC ET"]
+ local f_actual_text_two = formatters["BT /Span << /ActualText <feff%04x%04x> >> BDC %s EMC ET"]
+ local f_actual_text_one_b = formatters["BT /Span << /ActualText <feff%04x> >> BDC"]
+ local f_actual_text_two_b = formatters["BT /Span << /ActualText <feff%04x%04x> >> BDC"]
+ local f_actual_text_b = formatters["BT /Span << /ActualText <feff%s> >> BDC"]
+ local s_actual_text_e = "EMC ET"
+ local f_actual_text_b_not = formatters["/Span << /ActualText <feff%s> >> BDC"]
+ local f_actual_text_one_b_not = formatters["/Span << /ActualText <feff%04x> >> BDC"]
+ local f_actual_text_two_b_not = formatters["/Span << /ActualText <feff%04x%04x> >> BDC"]
+ local s_actual_text_e_not = "EMC"
+ local f_actual_text = formatters["/Span <</ActualText %s >> BDC"]
local context = context
local pdfdirect = nodes.pool.pdfdirect
@@ -1244,7 +1214,9 @@ do
end
function codeinjections.startunicodetoactualtext(unicode)
- if unicode < 0x10000 then
+ if type(unicode) == "string" then
+ return f_actual_text_b(unicode)
+ elseif unicode < 0x10000 then
return f_actual_text_one_b(unicode)
else
return f_actual_text_two_b(unicode/1024+0xD800,unicode%1024+0xDC00)
@@ -1255,6 +1227,20 @@ do
return s_actual_text_e
end
+ function codeinjections.startunicodetoactualtextdirect(unicode)
+ if type(unicode) == "string" then
+ return f_actual_text_b_not(unicode)
+ elseif unicode < 0x10000 then
+ return f_actual_text_one_b_not(unicode)
+ else
+ return f_actual_text_two_b_not(unicode/1024+0xD800,unicode%1024+0xDC00)
+ end
+ end
+
+ function codeinjections.stopunicodetoactualtextdirect()
+ return s_actual_text_e_not
+ end
+
implement {
name = "startactualtext",
arguments = "string",
diff --git a/tex/context/base/mkiv/lpdf-mis.lua b/tex/context/base/mkiv/lpdf-mis.lua
index 62713727d..dc3f8560a 100644
--- a/tex/context/base/mkiv/lpdf-mis.lua
+++ b/tex/context/base/mkiv/lpdf-mis.lua
@@ -33,7 +33,6 @@ local register = nodepool.register
local pdfdictionary = lpdf.dictionary
local pdfarray = lpdf.array
-local pdfboolean = lpdf.boolean
local pdfconstant = lpdf.constant
local pdfreference = lpdf.reference
local pdfunicode = lpdf.unicode
@@ -51,7 +50,21 @@ local addtopageattributes = lpdf.addtopageattributes
local addtonames = lpdf.addtonames
local variables = interfaces.variables
+
local v_stop = variables.stop
+local v_none = variables.none
+local v_max = variables.max
+local v_bookmark = variables.bookmark
+local v_fit = variables.fit
+local v_doublesided = variables.doublesided
+local v_singlesided = variables.singlesided
+local v_default = variables.default
+local v_auto = variables.auto
+local v_fixed = variables.fixed
+local v_landscape = variables.landscape
+local v_portrait = variables.portrait
+local v_page = variables.page
+local v_paper = variables.paper
local positive = register(pdfliteral("/GSpositive gs"))
local negative = register(pdfliteral("/GSnegative gs"))
@@ -184,7 +197,8 @@ local function setupidentity()
if author ~= "" then
addtoinfo("Author", pdfunicode(author), author) -- '/Author' in /Info, 'Creator' in XMP
end
- local creator = identity.creator or ""
+ -- local creator = identity.creator or ""
+ local creator = "LuaTeX + ConTeXt MkIV" -- has to be the same in CreatorTool
if creator ~= "" then
addtoinfo("Creator", pdfunicode(creator), creator) -- '/Creator' in /Info, 'CreatorTool' in XMP
end
@@ -248,23 +262,99 @@ lpdf.registerdocumentfinalizer(flushjavascripts,"javascripts")
-- -- --
local pagespecs = {
- [variables.max] = { mode = "FullScreen", layout = false, fit = false, fixed = false, duplex = false },
- [variables.bookmark] = { mode = "UseOutlines", layout = false, fit = false, fixed = false, duplex = false },
- [variables.fit] = { mode = "UseNone", layout = false, fit = true, fixed = false, duplex = false },
- [variables.doublesided] = { mode = "UseNone", layout = "TwoColumnRight", fit = true, fixed = false, duplex = false },
- [variables.singlesided] = { mode = "UseNone", layout = false, fit = false, fixed = false, duplex = false },
- [variables.default] = { mode = "UseNone", layout = "auto", fit = false, fixed = false, duplex = false },
- [variables.auto] = { mode = "UseNone", layout = "auto", fit = false, fixed = false, duplex = false },
- [variables.none] = { mode = false, layout = false, fit = false, fixed = false, duplex = false },
- -- new
- [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" },
+ [v_none] = {
+ },
+ [v_max] = {
+ mode = "FullScreen",
+ },
+ [v_bookmark] = {
+ mode = "UseOutlines",
+ },
+ [v_fit] = {
+ mode = "UseNone",
+ fit = true,
+ },
+ [v_doublesided] = {
+ mode = "UseNone",
+ layout = "TwoColumnRight",
+ fit = true,
+ },
+ [v_singlesided] = {
+ mode = "UseNone"
+ },
+ [v_default] = {
+ mode = "UseNone",
+ layout = "auto",
+ },
+ [v_auto] = {
+ mode = "UseNone",
+ layout = "auto",
+ },
+ [v_fixed] = {
+ mode = "UseNone",
+ layout = "auto",
+ fixed = true, -- noscale
+ },
+ [v_landscape] = {
+ mode = "UseNone",
+ layout = "auto",
+ fixed = true,
+ duplex = "DuplexFlipShortEdge",
+ },
+ [v_portrait] = {
+ mode = "UseNone",
+ layout = "auto",
+ fixed = true,
+ duplex = "DuplexFlipLongEdge",
+ },
+ [v_page] = {
+ mode = "UseNone",
+ layout = "auto",
+ fixed = true,
+ duplex = "Simplex",
+ },
+ [v_paper] = {
+ mode = "UseNone",
+ layout = "auto",
+ fixed = true,
+ duplex = "Simplex",
+ paper = true,
+ },
+}
+
+local plusspecs = {
+ [v_max] = {
+ mode = "FullScreen",
+ },
+ [v_bookmark] = {
+ mode = "UseOutlines",
+ },
+ [v_fit] = {
+ fit = true,
+ },
+ [v_doublesided] = {
+ layout = "TwoColumnRight",
+ },
+ [v_fixed] = {
+ fixed = true,
+ },
+ [v_landscape] = {
+ duplex = "DuplexFlipShortEdge",
+ },
+ [v_portrait] = {
+ duplex = "DuplexFlipLongEdge",
+ },
+ [v_page] = {
+ duplex = "Simplex" ,
+ },
+ [v_paper] = {
+ paper = true,
+ },
}
local pagespec, topoffset, leftoffset, height, width, doublesided = "default", 0, 0, 0, 0, false
local cropoffset, bleedoffset, trimoffset, artoffset = 0, 0, 0, 0
+local copies = false
function codeinjections.setupcanvas(specification)
local paperheight = specification.paperheight
@@ -276,11 +366,16 @@ function codeinjections.setupcanvas(specification)
if paperwidth then
texset('global','pagewidth',paperwidth)
end
- 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")
+ 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")
+ --
+ copies = specification.copies
+ if copies and copies < 2 then
+ copies = false
+ end
--
cropoffset = specification.cropoffset or 0
trimoffset = cropoffset - (specification.trimoffset or 0)
@@ -294,22 +389,17 @@ end
local function documentspecification()
if not pagespec or pagespec == "" then
- pagespec = variables.default
+ pagespec = v_default
end
- -- local settings = utilities.parsers.settings_to_array(pagespec)
- -- local spec = pagespecs[variables.default]
- -- for i=1,#settings do
- -- local s = pagespecs[settings[i]]
- -- if s then
- -- for k, v in next, s do
- -- spec[k] = v
- -- end
- -- end
- -- end
- local spec = pagespecs[pagespec] or pagespecs[variables.default]
+ local settings = utilities.parsers.settings_to_array(pagespec)
+ -- so the first one detemines the defaults
+ local first = settings[1]
+ local defaults = pagespecs[first]
+ local spec = defaults or pagespecs[v_default]
+ -- successive keys can modify this
if spec.layout == "auto" then
if doublesided then
- local s = pagespecs[variables.doublesided] -- to be checked voor interfaces
+ local s = pagespecs[v_doublesided] -- to be checked voor interfaces
for k, v in next, s do
spec[k] = v
end
@@ -317,32 +407,45 @@ local function documentspecification()
spec.layout = false
end
end
+ -- we start at 2 when we have a valid first default set
+ for i=defaults and 2 or 1,#settings do
+ local s = plusspecs[settings[i]]
+ if s then
+ for k, v in next, s do
+ spec[k] = v
+ end
+ end
+ end
+ --
local layout = spec.layout
local mode = spec.mode
local fit = spec.fit
local fixed = spec.fixed
local duplex = spec.duplex
+ local paper = spec.paper
if layout then
addtocatalog("PageLayout",pdfconstant(layout))
end
if mode then
addtocatalog("PageMode",pdfconstant(mode))
end
- if fit or fixed or duplex then
+ if fit or fixed or duplex or copies or paper then
addtocatalog("ViewerPreferences",pdfdictionary {
- FitWindow = fit and true or nil,
- PrintScaling = fixed and pdfconstant("None") or nil,
- Duplex = duplex and pdfconstant(duplex) or nil,
+ FitWindow = fit and true or nil,
+ PrintScaling = fixed and pdfconstant("None") or nil,
+ Duplex = duplex and pdfconstant(duplex) or nil,
+ NumCopies = copies and copies or nil,
+ PickTrayByPDFSize = paper and true or nil,
})
end
addtoinfo ("Trapped", pdfconstant("False")) -- '/Trapped' in /Info, 'Trapped' in XMP
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
+-- temp hack: the mediabox is not under our control and has a precision of 5 digits
local factor = number.dimenfactors.bp
-local f_value = formatters["%0.4F"]
+local f_value = formatters["%0.5F"]
local function boxvalue(n) -- we could share them
return pdfverbose(f_value(factor * n))
diff --git a/tex/context/base/mkiv/lpdf-nod.lua b/tex/context/base/mkiv/lpdf-nod.lua
index 3dd5a6648..985d05a82 100644
--- a/tex/context/base/mkiv/lpdf-nod.lua
+++ b/tex/context/base/mkiv/lpdf-nod.lua
@@ -8,30 +8,34 @@ if not modules then modules = { } end modules ['lpdf-nod'] = {
local type = type
-local formatters = string.formatters
+local formatters = string.formatters
-local whatsitcodes = nodes.whatsitcodes
-local nodeinjections = backends.nodeinjections
+local whatsitcodes = nodes.whatsitcodes
+local nodeinjections = backends.nodeinjections
-local nuts = nodes.nuts
-local tonut = nuts.tonut
+local nuts = nodes.nuts
+local tonut = nuts.tonut
-local setfield = nuts.setfield
+local setfield = nuts.setfield
-local copy_node = nuts.copy
-local new_node = nuts.new
+local copy_node = nuts.copy
+local new_node = nuts.new
-local nodepool = nuts.pool
-local register = nodepool.register
+local nodepool = nuts.pool
+local register = nodepool.register
-local pdfliteral = register(new_node("whatsit", whatsitcodes.pdfliteral)) setfield(pdfliteral,"mode",1)
-local pdfsave = register(new_node("whatsit", whatsitcodes.pdfsave))
-local pdfrestore = register(new_node("whatsit", whatsitcodes.pdfrestore))
-local pdfsetmatrix = register(new_node("whatsit", whatsitcodes.pdfsetmatrix))
------ pdfdest = register(new_node("whatsit", whatsitcodes.pdfdest)) setfield(pdfdest,"named_id",1) -- xyz_zoom untouched
------ pdfannot = register(new_node("whatsit", whatsitcodes.pdfannot))
+local pdforiginliteral = register(new_node("whatsit", whatsitcodes.pdfliteral)) setfield(pdforiginliteral,"mode",0) -- set_origin_code
+local pdfpageliteral = register(new_node("whatsit", whatsitcodes.pdfliteral)) setfield(pdfpageliteral, "mode",1) -- page_code
+local pdfdirectliteral = register(new_node("whatsit", whatsitcodes.pdfliteral)) setfield(pdfdirectliteral,"mode",2) -- direct_code
+local pdfrawliteral = register(new_node("whatsit", whatsitcodes.pdfliteral)) setfield(pdfrawliteral, "mode",3) -- raw_code
-local variables = interfaces.variables
+local pdfsave = register(new_node("whatsit", whatsitcodes.pdfsave))
+local pdfrestore = register(new_node("whatsit", whatsitcodes.pdfrestore))
+local pdfsetmatrix = register(new_node("whatsit", whatsitcodes.pdfsetmatrix))
+----- 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
local views = { -- beware, we do support the pdf keys but this is *not* official
xyz = 0, [variables.standard] = 0,
@@ -44,18 +48,12 @@ local views = { -- beware, we do support the pdf keys but this is *not* official
fitr = 7,
}
-function nodepool.pdfliteral(str)
- local t = copy_node(pdfliteral)
- setfield(t,"data",str)
- return t
-end
+function nodepool.pdforiginliteral(str) local t = copy_node(pdforiginliteral) setfield(t,"data",str) return t end
+function nodepool.pdfpageliteral (str) local t = copy_node(pdfpageliteral ) setfield(t,"data",str) return t end
+function nodepool.pdfdirectliteral(str) local t = copy_node(pdfdirectliteral) setfield(t,"data",str) return t end
+function nodepool.pdfrawliteral (str) local t = copy_node(pdfrawliteral ) setfield(t,"data",str) return t end
-function nodepool.pdfdirect(str)
- local t = copy_node(pdfliteral)
- setfield(t,"data",str)
- setfield(t,"mode",1)
- return t
-end
+nodepool.pdfliteral = nodepool.pdfpageliteral
function nodepool.pdfsave()
return copy_node(pdfsave)
diff --git a/tex/context/base/mkiv/lpdf-pda.xml b/tex/context/base/mkiv/lpdf-pda.xml
index 3f6b969c0..78ad47f21 100644
--- a/tex/context/base/mkiv/lpdf-pda.xml
+++ b/tex/context/base/mkiv/lpdf-pda.xml
@@ -50,127 +50,142 @@
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:Bag>
- </pdfaExtension:schemas>
- </rdf:Description>
+ <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>
+ <pdfaSchema:valueType>
+ <rdf:Seq/>
+ </pdfaSchema:valueType>
+ </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>
+ <pdfaSchema:valueType>
+ <rdf:Seq/>
+ </pdfaSchema:valueType>
+ </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>
+ <pdfaSchema:valueType>
+ <rdf:Seq/>
+ </pdfaSchema:valueType>
+ </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>
+ <pdfaSchema:valueType>
+ <rdf:Seq/>
+ </pdfaSchema:valueType>
+ </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>
+ <pdfaSchema:valueType>
+ <rdf:Seq/>
+ </pdfaSchema:valueType>
+ </rdf:li>
+ </rdf:Bag>
+ </pdfaExtension:schemas>
+ </rdf:Description>
</rdf:RDF>
</x:xmpmeta>
diff --git a/tex/context/base/mkiv/lpdf-ren.lua b/tex/context/base/mkiv/lpdf-ren.lua
index 81b9e9f20..47075ee08 100644
--- a/tex/context/base/mkiv/lpdf-ren.lua
+++ b/tex/context/base/mkiv/lpdf-ren.lua
@@ -12,6 +12,7 @@ local tostring, tonumber, next = tostring, tonumber, next
local format, rep = string.format, string.rep
local concat = table.concat
local settings_to_array = utilities.parsers.settings_to_array
+local getrandom = utilities.randomizer.get
local backends, lpdf, nodes, node = backends, lpdf, nodes, node
@@ -363,7 +364,7 @@ function codeinjections.setpagetransition(specification)
last = 0
return
elseif n == v_random then
- n = math.random(1,#pagetransitions)
+ n = getrandom("transition",1,#pagetransitions)
else
n = tonumber(n)
end
diff --git a/tex/context/base/mkiv/lpdf-res.lua b/tex/context/base/mkiv/lpdf-res.lua
index ca092c772..ac9478488 100644
--- a/tex/context/base/mkiv/lpdf-res.lua
+++ b/tex/context/base/mkiv/lpdf-res.lua
@@ -12,7 +12,7 @@ local implement = interfaces.implement
local nuts = nodes.nuts
local tonut = nodes.tonut
-local setfield = nuts.setfield
+local setwhd = nuts.setwhd
local setlist = nuts.setlist
local new_hlist = nuts.pool.hlist
@@ -29,9 +29,7 @@ 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)
+ setwhd(hbox,wd,ht,dp)
return hbox -- so we return a nut !
end
diff --git a/tex/context/base/mkiv/lpdf-swf.lua b/tex/context/base/mkiv/lpdf-swf.lua
index 88cdcc4ec..e40dc6378 100644
--- a/tex/context/base/mkiv/lpdf-swf.lua
+++ b/tex/context/base/mkiv/lpdf-swf.lua
@@ -13,20 +13,17 @@ local format, gsub = string.format, string.gsub
local backends, lpdf = backends, lpdf
-local pdfconstant = lpdf.constant
-local pdfboolean = lpdf.boolean
-local pdfstring = lpdf.string
-local pdfunicode = lpdf.unicode
-local pdfdictionary = lpdf.dictionary
-local pdfarray = lpdf.array
-local pdfnull = lpdf.null
-local pdfreference = lpdf.reference
-local pdfflushobject = lpdf.flushobject
-
-local checkedkey = lpdf.checkedkey
-
-local codeinjections = backends.pdf.codeinjections
-local nodeinjections = backends.pdf.nodeinjections
+local pdfconstant = lpdf.constant
+local pdfstring = lpdf.string
+local pdfdictionary = lpdf.dictionary
+local pdfarray = lpdf.array
+local pdfreference = lpdf.reference
+local pdfflushobject = lpdf.flushobject
+
+local checkedkey = lpdf.checkedkey
+
+local codeinjections = backends.pdf.codeinjections
+local nodeinjections = backends.pdf.nodeinjections
local trace_swf = false trackers.register("backend.swf", function(v) trace_swf = v end)
diff --git a/tex/context/base/mkiv/lpdf-tag.lua b/tex/context/base/mkiv/lpdf-tag.lua
index 79b8ac368..e33c8a811 100644
--- a/tex/context/base/mkiv/lpdf-tag.lua
+++ b/tex/context/base/mkiv/lpdf-tag.lua
@@ -9,8 +9,8 @@ if not modules then modules = { } end modules ['lpdf-tag'] = {
local next = next
local format, match, concat = string.format, string.match, table.concat
local lpegmatch, P, S, C = lpeg.match, lpeg.P, lpeg.S, lpeg.C
-local utfchar = utf.char
local settings_to_hash = utilities.parsers.settings_to_hash
+local sortedhash = table.sortedhash
local formatters = string.formatters
local trace_tags = false trackers.register("structures.tags", function(v) trace_tags = v end)
@@ -24,7 +24,7 @@ local nodes = nodes
local nodeinjections = backends.pdf.nodeinjections
local codeinjections = backends.pdf.codeinjections
-local tasks = nodes.tasks
+local enableaction = nodes.tasks.enableaction
local pdfdictionary = lpdf.dictionary
local pdfarray = lpdf.array
@@ -32,7 +32,6 @@ local pdfboolean = lpdf.boolean
local pdfconstant = lpdf.constant
local pdfreference = lpdf.reference
local pdfunicode = lpdf.unicode
-local pdfstring = lpdf.string
local pdfflushobject = lpdf.flushobject
local pdfreserveobject = lpdf.reserveobject
local pdfpagereference = lpdf.pagereference
@@ -70,7 +69,6 @@ local setlist = nuts.setlist
local traverse_nodes = nuts.traverse
local tosequence = nuts.tosequence
-local slide_nodelist = nuts.slide
local insert_before = nuts.insert_before
local insert_after = nuts.insert_after
@@ -88,7 +86,6 @@ local taglist = structurestags.taglist
local specifications = structurestags.specifications
local usedlabels = structurestags.labels
local properties = structurestags.properties
-local lasttaginchain = structurestags.lastinchain
local usewithcare = structurestags.usewithcare
local usedmapping = { }
@@ -148,7 +145,7 @@ local function finishstructure()
K = pdfreference(pdfflushobject(structure_kids)),
ParentTree = pdfreference(pdfflushobject(parent_ref,parenttree)),
IDTree = #names > 0 and pdfreference(pdfflushobject(idtree)) or nil,
- RoleMap = rolemap,
+ RoleMap = rolemap, -- sorted ?
}
pdfflushobject(structure_ref,structuretree)
addtocatalog("StructTreeRoot",pdfreference(structure_ref))
@@ -161,7 +158,7 @@ local function finishstructure()
}
addtocatalog("MarkInfo",pdfreference(pdfflushobject(markinfo)))
--
- for fulltag, element in next, elements do
+ for fulltag, element in sortedhash(elements) do -- sorting is easier on comparing pdf
pdfflushobject(element.knum,element.kids)
end
end
@@ -194,7 +191,7 @@ local pdf_userproperties = pdfconstant("UserProperties")
local function makeattribute(t)
if t and next(t) then
local properties = pdfarray()
- for k, v in next, t do
+ for k, v in sortedhash(t) do -- easier on comparing pdf
properties[#properties+1] = pdfdictionary {
N = pdfunicode(k),
V = pdfunicode(v),
@@ -348,7 +345,6 @@ function nodeinjections.addtags(head)
last = nil
else
local nl = getlist(n)
- -- slide_nodelist(nl) -- temporary hack till math gets slided (tracker item)
collectranges(nl,n)
end
end
@@ -482,7 +478,6 @@ end
-- last = nil
-- else
-- local nl = getlist(n)
--- -- slide_nodelist(nl) -- temporary hack till math gets slided (tracker item)
-- collectranges(nl,n)
-- end
-- end
@@ -607,9 +602,9 @@ end
function codeinjections.enabletags(tg,lb)
structures.tags.handler = nodeinjections.addtags
- tasks.enableaction("shipouts","structures.tags.handler")
- tasks.enableaction("shipouts","nodes.handlers.accessibility")
- tasks.enableaction("math","noads.handlers.tags")
+ enableaction("shipouts","structures.tags.handler")
+ enableaction("shipouts","nodes.handlers.accessibility")
+ enableaction("math","noads.handlers.tags")
-- maybe also textblock
if trace_tags then
report_tags("enabling structure tags")
diff --git a/tex/context/base/mkiv/lpdf-wid.lua b/tex/context/base/mkiv/lpdf-wid.lua
index 73a56caa3..fceae49cb 100644
--- a/tex/context/base/mkiv/lpdf-wid.lua
+++ b/tex/context/base/mkiv/lpdf-wid.lua
@@ -10,6 +10,7 @@ local gmatch, gsub, find, lower, format = string.gmatch, string.gsub, string.fin
local stripstring = string.strip
local settings_to_array = utilities.parsers.settings_to_array
local settings_to_hash = utilities.parsers.settings_to_hash
+local sortedhash = table.sortedhash
local report_media = logs.reporter("backend","media")
local report_attachment = logs.reporter("backend","attachment")
@@ -29,11 +30,10 @@ local executers = structures.references.executers
local variables = interfaces.variables
local v_hidden = variables.hidden
-local v_normal = variables.normal
local v_auto = variables.auto
local v_embed = variables.embed
-local v_unknown = variables.unknown
local v_max = variables.max
+local v_yes = variables.yes
local pdfconstant = lpdf.constant
local pdfdictionary = lpdf.dictionary
@@ -42,7 +42,6 @@ local pdfreference = lpdf.reference
local pdfunicode = lpdf.unicode
local pdfstring = lpdf.string
local pdfboolean = lpdf.boolean
-local pdfcolorspec = lpdf.colorspec
local pdfflushobject = lpdf.flushobject
local pdfflushstreamobject = lpdf.flushstreamobject
local pdfflushstreamfileobject = lpdf.flushstreamfileobject
@@ -203,7 +202,7 @@ job.register('job.fileobjreferences.collected', tobesavedobjrefs, initializer)
local function flushembeddedfiles()
if next(filestreams) then
local e = pdfarray()
- for tag, reference in next, filestreams do
+ for tag, reference in sortedhash(filestreams) do
if not reference then
report_attachment("unreferenced file, tag %a",tag)
elseif referenced[tag] == "hidden" then
@@ -383,7 +382,7 @@ function codeinjections.attachmentid(filename) -- not used in context
return filestreams[filename]
end
-local nofcomments, usepopupcomments, stripleading = 0, false, true
+local nofcomments, usepopupcomments = 0, false
local defaultattributes = {
["xmlns"] = "http://www.w3.org/1999/xhtml",
@@ -417,10 +416,12 @@ end
function nodeinjections.comment(specification) -- brrr: seems to be done twice
nofcomments = nofcomments + 1
- local text = stripstring(specification.data or "")
- if stripleading then
+ local text = specification.data or ""
+ if specification.space ~= v_yes then
+ text = stripstring(text)
text = gsub(text,"[\n\r] *","\n")
end
+ text = gsub(text,"\r","\n")
local name, appearance = analyzesymbol(specification.symbol,comment_symbols)
local tag = specification.tag or "" -- this is somewhat messy as recent
local title = specification.title or "" -- versions of acrobat see the title
diff --git a/tex/context/base/mkiv/lpdf-xmp.lua b/tex/context/base/mkiv/lpdf-xmp.lua
index c8b86d384..6153b198f 100644
--- a/tex/context/base/mkiv/lpdf-xmp.lua
+++ b/tex/context/base/mkiv/lpdf-xmp.lua
@@ -8,7 +8,8 @@ if not modules then modules = { } end modules ['lpdf-xmp'] = {
}
local tostring, type = tostring, type
-local format, random, char, gsub, concat = string.format, math.random, string.char, string.gsub, table.concat
+local format, gsub = string.format, string.gsub
+local utfchar = utf.char
local xmlfillin = xml.fillin
local trace_xmp = false trackers.register("backend.xmp", function(v) trace_xmp = v end)
@@ -26,14 +27,15 @@ local pdfconstant = lpdf.constant
local pdfreference = lpdf.reference
local pdfflushstreamobject = lpdf.flushstreamobject
--- I wonder why this begin end is empty / w (no time now to look into it) / begin can also be "?"
+-- The XMP packet wrapper is kind of fixed, see page 10 of XMPSpecificationsPart1.pdf from
+-- XMP-Toolkit-SDK-CC201607.zip. So we hardcode the id.
-local xpacket = [[
-<?xpacket begin="" id="%s"?>
+local xpacket = format ( [[
+<?xpacket begin="%s" id="W5M0MpCehiHzreSzNTczkc9d"?>
-%s
+%%s
-<?xpacket end="w"?>]]
+<?xpacket end="w"?>]], utfchar(0xFEFF) )
local mapping = {
-- user defined keys (pdfx:)
@@ -94,16 +96,7 @@ pdf.setsuppressoptionalinfo(
-- + 512 -- pdfnoid
)
-local included = table.setmetatableindex( {
- context = true,
- id = true,
- metadata = true,
- date = true,
- id = true,
- pdf = true,
-}, function(t,k)
- return true
-end)
+local included = backends.included
function lpdf.settrailerid(v)
if v then
@@ -248,32 +241,23 @@ end
-- flushing
-local function randomstring(n)
- local t = { }
- for i=1,n do
- t[i] = char(96 + random(26))
- end
- return concat(t)
-end
-
-randomstring(26) -- kind of initializes and kicks off random
-
local function flushxmpinfo()
commands.pushrandomseed()
commands.setrandomseed(os.time())
- local packetid = "no unique packet id here" -- 24 chars
+ local version = status.luatex_version
+ local revision = status.luatex_revision
+
local documentid = "no unique document id here"
local instanceid = "no unique instance id here"
- local producer = format("LuaTeX-%0.2f.%s",status.luatex_version/100,status.luatex_revision)
+ local producer = format("LuaTeX-%i.%i.%s",math.div(version,100),math.mod(version,100),revision)
local creator = "LuaTeX + ConTeXt MkIV"
local time = lpdf.timestamp()
local fullbanner = status.banner
if included.id ~= "fake" then
- packetid = randomstring(24)
- documentid = "uuid:%s" .. os.uuid()
- instanceid = "uuid:%s" .. os.uuid()
+ documentid = "uuid:" .. os.uuid()
+ instanceid = "uuid:" .. os.uuid()
end
pdfaddxmpinfo("DocumentID", documentid)
@@ -306,7 +290,7 @@ local function flushxmpinfo()
report_xmp("stop xmp blob")
logs.poptarget()
end
- blob = format(xpacket,packetid,blob)
+ blob = format(xpacket,blob)
if not verbose and pdf.getcompresslevel() > 0 then
blob = gsub(blob,">%s+<","><")
end
diff --git a/tex/context/base/mkiv/luat-cbk.lua b/tex/context/base/mkiv/luat-cbk.lua
index 2c3bede72..6fcfdc7f2 100644
--- a/tex/context/base/mkiv/luat-cbk.lua
+++ b/tex/context/base/mkiv/luat-cbk.lua
@@ -70,19 +70,26 @@ directives.register("system.callbacks.permitoverloads", function(v)
end
end)
-sandbox.initializer(function()
- block_overloads = true
-end)
+sandbox.initializer {
+ category = "functions",
+ action = function()
+ block_overloads = true
+ end
+}
if not list then -- otherwise counters get reset
list = utilities.storage.allocate(list_callbacks())
+ local supported = { }
+
for k in next, list do
- list[k] = 0
+ list[k] = 0
+ supported[k] = true
end
- callbacks.list = list
+ callbacks.list = list
+ callbacks.supported = supported
end
diff --git a/tex/context/base/mkiv/luat-cnf.lua b/tex/context/base/mkiv/luat-cnf.lua
index 9d37df7bb..4f2c6569e 100644
--- a/tex/context/base/mkiv/luat-cnf.lua
+++ b/tex/context/base/mkiv/luat-cnf.lua
@@ -64,15 +64,14 @@ function texconfig.init()
"callback", "font", "img", "lang", "lua", "node", "pdf", "status", "tex", "texconfig", "texio", "token",
},
extralua = {
- "gzip", "zip", "zlib", "lfs", "ltn12", "mime", "socket", "md5", "profiler", "unicode", "utf",
+ "gzip", "zip", "zlib", "lfs", "ltn12", "mime", "socket", "md5", "fio", "unicode", "utf",
},
extratex = {
"epdf", "fontloader", "kpse", "mplib",
},
obsolete = {
- "fontforge", -- can be filled by luat-log
+ "fontloader", -- can be filled by luat-log
"kpse",
- "token",
},
functions = {
"assert", "pcall", "xpcall", "error", "collectgarbage",
diff --git a/tex/context/base/mkiv/luat-cod.lua b/tex/context/base/mkiv/luat-cod.lua
index f62396a8e..31860db78 100644
--- a/tex/context/base/mkiv/luat-cod.lua
+++ b/tex/context/base/mkiv/luat-cod.lua
@@ -6,7 +6,7 @@ if not modules then modules = { } end modules ['luat-cod'] = {
license = "see context related readme files"
}
-local type, loadfile = type, loadfile
+local type, loadfile, tonumber = type, loadfile, tonumber
local match, gsub, find, format = string.match, string.gsub, string.find, string.format
local texconfig, lua = texconfig, lua
@@ -96,7 +96,29 @@ local targetpath = "."
-- environment.jobname = tex.jobname
-- environment.version = tostring(tex.toks.contextversiontoks)
-environment.initex = tex.formatname == ""
+if LUATEXVERION == nil then
+ LUATEXVERSION = status.luatex_version/100
+ + tonumber(status.luatex_revision)/1000
+end
+
+if LUATEXENGINE == nil then
+ LUATEXENGINE = status.luatex_engine and string.lower(status.luatex_engine)
+ or (find(status.banner,"LuajitTeX") and "luajittex" or "luatex")
+end
+
+if JITSUPPORTED == nil then
+ JITSUPPORTED = LUATEXENGINE == "luajittex" or jit
+end
+
+if INITEXMODE == nil then
+ INITEXMODE = status.ini_version
+end
+
+environment.initex = INITEXMODE
+environment.initexmode = INITEXMODE
+environment.luatexversion = LUATEXVERSION
+environment.luatexengine = LUATEXENGINE
+environment.jitsupported = JITSUPPORTED
if not environment.luafilechunk then
diff --git a/tex/context/base/mkiv/luat-exe.lua b/tex/context/base/mkiv/luat-exe.lua
index d8d954a30..db06c63cb 100644
--- a/tex/context/base/mkiv/luat-exe.lua
+++ b/tex/context/base/mkiv/luat-exe.lua
@@ -8,66 +8,115 @@ if not modules then modules = { } end modules ['luat-exe'] = {
if not sandbox then require("l-sandbox") require("util-sbx") end -- for testing
+-- Ok, as usual, after finishing some code, I rewarded myself with searching youtube for
+-- new music ... this time I ran into the swedisch group 'wintergatan' (search for: marble
+-- machine) ... mechanical computers are so much more fun than the ones needed for running
+-- the code below. Nice videos (and shows) too ...
+
local type = type
-local executers = resolvers.executers or { }
-resolvers.executers = executers
+local executers = resolvers.executers or { }
+resolvers.executers = executers
-local disablerunners = sandbox.disablerunners
-local registerbinary = sandbox.registerbinary
-local registerroot = sandbox.registerroot
+local disablerunners = sandbox.disablerunners
+local disablelibraries = sandbox.disablelibraries
+local registerbinary = sandbox.registerbinary
+local registerlibrary = sandbox.registerlibrary
+local registerroot = sandbox.registerroot
-local lpegmatch = lpeg.match
+local lpegmatch = lpeg.match
-local sc_splitter = lpeg.tsplitat(";")
-local cm_splitter = lpeg.tsplitat(",")
+local sc_splitter = lpeg.tsplitat(";")
+local cm_splitter = lpeg.tsplitat(",")
local execution_mode directives.register("system.executionmode", function(v) execution_mode = v end)
local execution_list directives.register("system.executionlist", function(v) execution_list = v end)
local root_list directives.register("system.rootlist", function(v) root_list = v end)
+local library_mode directives.register("system.librarymode", function(v) library_mode = v end)
+local library_list directives.register("system.librarylist", function(v) library_list = v end)
-sandbox.initializer(function()
- if execution_mode == "none" then
- -- will be done later
- elseif execution_mode == "list" then
- if type(execution_list) == "string" then
- execution_list = lpegmatch(cm_splitter,execution_list)
- end
- if type(execution_list) == "table" then
- for i=1,#execution_list do
- registerbinary(execution_list[i])
+sandbox.initializer {
+ category = "binaries",
+ action = function()
+ if execution_mode == "none" then
+ -- will be done later
+ elseif execution_mode == "list" then
+ if type(execution_list) == "string" then
+ execution_list = lpegmatch(cm_splitter,execution_list)
+ end
+ if type(execution_list) == "table" then
+ for i=1,#execution_list do
+ registerbinary(execution_list[i])
+ end
end
+ else
+ registerbinary(true) -- all
end
- else
- -- whatever else we have configured
end
-end)
+}
-sandbox.initializer(function()
- if type(root_list) == "string" then
- root_list = lpegmatch(sc_splitter,root_list)
+sandbox.finalizer {
+ category = "binaries",
+ action = function()
+ if execution_mode == "none" then
+ disablerunners()
+ end
end
- if type(root_list) == "table" then
- for i=1,#root_list do
- local entry = root_list[i]
- if entry ~= "" then
- registerroot(entry)
+}
+
+sandbox.initializer {
+ category = "libraries",
+ action = function()
+ if library_mode == "none" then
+ -- will be done later
+ elseif library_mode == "list" then
+ if type(library_list) == "string" then
+ library_list = lpegmatch(cm_splitter,library_list)
+ end
+ if type(library_list) == "table" then
+ for i=1,#library_list do
+ registerlibrary(library_list[i])
+ end
end
+ else
+ registerlibrary(true) -- all
+ end
+ end
+}
+
+sandbox.finalizer {
+ category = "libraries",
+ action = function()
+ if library_mode == "none" then
+ disablelibraries()
end
end
-end)
+}
-sandbox.finalizer(function()
- if execution_mode == "none" then
- disablerunners()
+-- A bit of file system protection.
+
+sandbox.initializer{
+ category = "files",
+ action = function ()
+ if type(root_list) == "string" then
+ root_list = lpegmatch(sc_splitter,root_list)
+ end
+ if type(root_list) == "table" then
+ for i=1,#root_list do
+ registerroot(root_list[i])
+ end
+ end
end
-end)
+}
-- Let's prevent abuse of these libraries (built-in support still works).
-sandbox.finalizer(function()
- mplib = nil
- epdf = nil
- zip = nil
- fontloader = nil
-end)
+sandbox.finalizer {
+ category = "functions",
+ action = function()
+ mplib = nil
+ epdf = nil
+ zip = nil
+ fontloader = nil
+ end
+}
diff --git a/tex/context/base/mkiv/luat-fio.lua b/tex/context/base/mkiv/luat-fio.lua
index 2b083b582..302d17a66 100644
--- a/tex/context/base/mkiv/luat-fio.lua
+++ b/tex/context/base/mkiv/luat-fio.lua
@@ -92,16 +92,16 @@ if not resolvers.instance then
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)
diff --git a/tex/context/base/mkiv/luat-fmt.lua b/tex/context/base/mkiv/luat-fmt.lua
index 9a86ef50e..f61c659fa 100644
--- a/tex/context/base/mkiv/luat-fmt.lua
+++ b/tex/context/base/mkiv/luat-fmt.lua
@@ -13,18 +13,37 @@ local luasuffixes = utilities.lua.suffixes
local report_format = logs.reporter("resolvers","formats")
-local function primaryflags() -- not yet ok
- local trackers = environment.argument("trackers")
- local directives = environment.argument("directives")
- local flags = { }
+local function primaryflags()
+ local arguments = environment.arguments
+ local flags = { }
+ if arguments.silent then
+ flags[#flags+1] = "--interaction=batchmode"
+ end
+ if arguments.jit then
+ flags[#flags+1] = "--jiton"
+ end
+ return concat(flags," ")
+end
+
+local function secondaryflags()
+ local arguments = environment.arguments
+ local trackers = arguments.trackers
+ local directives = arguments.directives
+ local flags = { }
if trackers and trackers ~= "" then
- flags = { "--trackers=" .. quoted(trackers) }
+ flags[#flags+1] = "--c:trackers=" .. quoted(trackers)
end
if directives and directives ~= "" then
- flags = { "--directives=" .. quoted(directives) }
+ flags[#flags+1] = "--c:directives=" .. quoted(directives)
end
- if environment.argument("jit") then
- flags = { "--jiton" }
+ if arguments.silent then
+ flags[#flags+1] = "--c:silent"
+ end
+ if arguments.jit then
+ flags[#flags+1] = "--c:jiton"
+ end
+ if arguments.ansi then
+ flags[#flags+1] = "--c:ansi"
end
return concat(flags," ")
end
@@ -32,8 +51,37 @@ end
-- 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 template = [[--ini %primaryflags% --lua=%luafile% %texfile% %secondaryflags% %dump% %redirect%]]
+
+local checkers = {
+ primaryflags = "string",
+ secondaryflags = "string",
+ luafile = "readable", -- "cache"
+ texfile = "readable", -- "cache"
+ redirect = "string",
+ dump = "string",
+}
+
+local runners = {
+ luatex = sandbox.registerrunner {
+ name = "make luatex format",
+ program = "luatex",
+ template = template,
+ checkers = checkers,
+ reporter = report_format,
+ },
+ luajittex = sandbox.registerrunner {
+ name = "make luajittex format",
+ program = "luajittex",
+ template = template,
+ checkers = checkers,
+ reporter = report_format,
+ },
+}
+
+function environment.make_format(name,arguments)
local engine = environment.ownmain or "luatex"
+ local silent = environment.arguments.silent
-- change to format path (early as we need expanded paths)
local olddir = dir.current()
local path = caches.getwritablepath("formats",engine) or "" -- maybe platform
@@ -96,11 +144,20 @@ function environment.make_format(name,silent)
return
end
-- generate format
- local dump = os.platform=="unix" and "\\\\dump" or "\\dump"
- if silent then
+ local specification = {
+ primaryflags = primaryflags(),
+ secondaryflags = secondaryflags(),
+ luafile = quoted(usedluastub),
+ texfile = quoted(fulltexsourcename),
+ dump = os.platform == "unix" and "\\\\dump" or "\\dump",
+ }
+ local runner = runners[engine]
+ if not runner then
+ report_format("format %a cannot be generated, no runner available for engine %a",name,engine)
+ elseif 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)
+ specification.redirect = "> temp.log"
+ local result = runner(specification)
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
@@ -109,9 +166,7 @@ function environment.make_format(name,silent)
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)
+ runner(specification)
end
-- remove related mem files
local pattern = file.removesuffix(file.basename(usedluastub)).."-*.mem"
@@ -127,6 +182,33 @@ function environment.make_format(name,silent)
lfs.chdir(olddir)
end
+local template = [[%flags% --fmt=%fmtfile% --lua=%luafile% %texfile% %more%]]
+
+local checkers = {
+ flags = "string",
+ more = "string",
+ fmtfile = "readable", -- "cache"
+ luafile = "readable", -- "cache"
+ texfile = "readable", -- "cache"
+}
+
+local runners = {
+ luatex = sandbox.registerrunner {
+ name = "run luatex format",
+ program = "luatex",
+ template = template,
+ checkers = checkers,
+ reporter = report_format,
+ },
+ luajittex = sandbox.registerrunner {
+ name = "run luajittex format",
+ program = "luajittex",
+ template = template,
+ checkers = checkers,
+ reporter = report_format,
+ },
+}
+
function environment.run_format(name,data,more)
if name and name ~= "" then
local engine = environment.ownmain or "luatex"
@@ -148,9 +230,18 @@ function environment.run_format(name,data,more)
report_format("using format name %a",fmtname)
report_format("no luc/lua file with name %a",barename)
else
- local command = format("%s %s --fmt=%s --lua=%s %s %s",engine,primaryflags(),quoted(barename),quoted(luaname),quoted(data),more ~= "" and quoted(more) or "")
- report_format("running command: %s",command)
- os.execute(command)
+ local runner = runners[engine]
+ if not runner then
+ report_format("format %a cannot be run, no runner available for engine %a",name,engine)
+ else
+ runner {
+ flags = primaryflags(),
+ fmtfile = quoted(barename),
+ luafile = quoted(luaname),
+ texfile = quoted(data),
+ more = more,
+ }
+ end
end
end
end
diff --git a/tex/context/base/mkiv/luat-ini.lua b/tex/context/base/mkiv/luat-ini.lua
index cd1f45692..3ea8551c8 100644
--- a/tex/context/base/mkiv/luat-ini.lua
+++ b/tex/context/base/mkiv/luat-ini.lua
@@ -25,4 +25,12 @@ if not global then
global = _G
end
-LUATEXVERSION = status.luatex_version/100 + tonumber(status.luatex_revision)/1000
+LUATEXVERSION = status.luatex_version/100
+ + tonumber(status.luatex_revision)/1000
+
+LUATEXENGINE = status.luatex_engine and string.lower(status.luatex_engine)
+ or (string.find(status.banner,"LuajitTeX") and "luajittex" or "luatex")
+
+JITSUPPORTED = LUATEXENGINE == "luajittex" or jit
+
+INITEXMODE = status.ini_version
diff --git a/tex/context/base/mkiv/luat-iop.lua b/tex/context/base/mkiv/luat-iop.lua
index e1772af4e..34cc74e3e 100644
--- a/tex/context/base/mkiv/luat-iop.lua
+++ b/tex/context/base/mkiv/luat-iop.lua
@@ -9,16 +9,19 @@ if not modules then modules = { } end modules ['luat-iop'] = {
local cleanedpathlist = resolvers.cleanedpathlist
local registerroot = sandbox.registerroot
-sandbox.initializer(function()
- local function register(str,mode)
- local trees = cleanedpathlist(str)
- for i=1,#trees do
- registerroot(trees[i],mode)
+sandbox.initializer {
+ category = "files",
+ action = function()
+ local function register(str,mode)
+ local trees = cleanedpathlist(str)
+ for i=1,#trees do
+ registerroot(trees[i],mode)
+ end
end
+ register("TEXMF","read")
+ register("TEXINPUTS","read")
+ register("MPINPUTS","read")
+ -- register("TEXMFCACHE","write")
+ registerroot(".","write")
end
- register("TEXMF","read")
- register("TEXINPUTS","read")
- register("MPINPUTS","read")
- -- register("TEXMFCACHE","write")
- registerroot(".","write")
-end)
+}
diff --git a/tex/context/base/mkiv/luat-lib.mkiv b/tex/context/base/mkiv/luat-lib.mkiv
index cbe15c8a1..c75b9c6b1 100644
--- a/tex/context/base/mkiv/luat-lib.mkiv
+++ b/tex/context/base/mkiv/luat-lib.mkiv
@@ -88,4 +88,8 @@
\registerctxluafile{lxml-aux}{1.001}
\registerctxluafile{lxml-mis}{1.001}
+\normalprotected\def\writestatus#1#2{\ctxlua{logs.status([==[#1]==],[==[#2]==])}}
+\normalprotected\def\writestring #1{\ctxlua{logs.writer([==[#1]==],"\string\n")}}
+\normalprotected\def\writeline {\ctxlua{logs.newline()}}
+
\endinput
diff --git a/tex/context/base/mkiv/luat-mac.lua b/tex/context/base/mkiv/luat-mac.lua
index 4274fe9f9..3f1fe6751 100644
--- a/tex/context/base/mkiv/luat-mac.lua
+++ b/tex/context/base/mkiv/luat-mac.lua
@@ -145,9 +145,8 @@ local grammar = { "converter",
* stopcode
* poplocal,
texbody = (
-leadingcomment -- new per 2015-03-03 (ugly)
-+
- V("definition")
+ leadingcomment -- new per 2015-03-03 (ugly)
+ + V("definition")
+ identifier
+ V("braced")
+ (1 - stopcode)
diff --git a/tex/context/base/mkiv/luat-run.lua b/tex/context/base/mkiv/luat-run.lua
index 7e81350f0..372bbcbfa 100644
--- a/tex/context/base/mkiv/luat-run.lua
+++ b/tex/context/base/mkiv/luat-run.lua
@@ -23,13 +23,19 @@ local report_tempfiles = logs.reporter("resolvers","tempfiles")
luatex = luatex or { }
local luatex = luatex
+if not luatex.synctex then
+ luatex.synctex = table.setmetatableindex(function() return function() end end)
+end
+
local startactions = { }
local stopactions = { }
local dumpactions = { }
+local pageactions = { }
function luatex.registerstartactions(...) insert(startactions, ...) end
function luatex.registerstopactions (...) insert(stopactions, ...) end
function luatex.registerdumpactions (...) insert(dumpactions, ...) end
+function luatex.registerpageactions (...) insert(pageactions, ...) end
local function start_run()
if logs.start_run then
@@ -63,6 +69,10 @@ end
local function stop_shipout_page()
logs.stop_page_number()
+ for i=1,#pageactions do
+ pageactions[i]()
+ end
+ luatex.synctex.flush()
end
local function report_output_pages()
@@ -113,7 +123,11 @@ function luatex.registertempfile(name,extrasuffix,keep) -- namespace might chang
name = name .. ".mkiv-tmp" -- maybe just .tmp
end
if trace_temp_files and not tempfiles[name] then
- report_tempfiles("registering temporary file %a",name)
+ if keep then
+ report_tempfiles("%s temporary file %a","registering",name)
+ else
+ report_tempfiles("%s temporary file %a","unregistering",name)
+ end
end
tempfiles[name] = keep or false
return name
@@ -123,7 +137,7 @@ function luatex.cleanuptempfiles()
for name, keep in next, tempfiles do
if not keep then
if trace_temp_files then
- report_tempfiles("removing temporary file %a",name)
+ report_tempfiles("%s temporary file %a","removing",name)
end
os.remove(name)
end
@@ -133,27 +147,6 @@ end
luatex.registerstopactions(luatex.cleanuptempfiles)
--- for the moment here
-
-local report_system = logs.reporter("system")
-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), expect runtime overhead!",tostring(synctex))
- else
- report_system("synctex functionality is disabled!")
- end
- tex.normalsynctex = synctex
-end)
-
-statistics.register("synctex tracing",function()
- if synctex ~= 0 then
- return "synctex has been enabled (extra log file generated)"
- end
-end)
-
-- filenames
local types = {
@@ -175,12 +168,17 @@ local total = 0
local stack = { }
local all = false
+function luatex.currentfile()
+ return stack[#stack] or tex.jobname
+end
+
local function report_start(left,name)
if not left then
-- skip
elseif left ~= 1 then
if all then
- report_load("%s > %s",types[left],name or "?")
+ -- report_load("%s > %s",types[left],name or "?")
+ report_load("type %a, name %a",types[left],name or "?")
end
elseif find(name,"virtual://") then
insert(stack,false)
@@ -188,7 +186,9 @@ local function report_start(left,name)
insert(stack,name)
total = total + 1
level = level + 1
- report_open("%i > %i > %s",level,total,name or "?")
+ -- report_open("%i > %i > %s",level,total,name or "?")
+ report_open("level %i, order %i, name %a",level,total,name or "?")
+ luatex.synctex.setfilename(name)
end
end
@@ -196,7 +196,8 @@ local function report_stop(right)
if level == 1 or not right or right == 1 then
local name = remove(stack)
if name then
- report_close("%i > %i > %s",level,total,name or "?")
+ -- report_close("%i > %i > %s",level,total,name or "?")
+ report_close("level %i, order %i, name %a",level,total,name or "?")
level = level - 1
end
end
diff --git a/tex/context/base/mkiv/luat-usr.lua b/tex/context/base/mkiv/luat-usr.lua
index 071e3bf5b..e7406782b 100644
--- a/tex/context/base/mkiv/luat-usr.lua
+++ b/tex/context/base/mkiv/luat-usr.lua
@@ -148,6 +148,7 @@ local function registername(name,message)
documentdata = documentdata,
-- always there fast
context = context,
+ --
tostring = tostring,
tonumber = tonumber,
-- standard lua modules
diff --git a/tex/context/base/mkiv/lxml-aux.lua b/tex/context/base/mkiv/lxml-aux.lua
index 4112db1e5..ee0909cbf 100644
--- a/tex/context/base/mkiv/lxml-aux.lua
+++ b/tex/context/base/mkiv/lxml-aux.lua
@@ -19,7 +19,6 @@ local xml = xml
local xmlcopy, xmlname = xml.copy, xml.name
local xmlinheritedconvert = xml.inheritedconvert
local xmlapplylpath = xml.applylpath
-local xmlfilter = xml.filter
local type, next, setmetatable, getmetatable = type, next, setmetatable, getmetatable
local insert, remove, fastcopy, concat = table.insert, table.remove, table.fastcopy, table.concat
@@ -258,7 +257,17 @@ function xml.replace(root,pattern,whatever)
report('replacing',pattern,c,e)
end
local d = p.dt
- d[e.ni] = copiedelement(element,p)
+ local n = e.ni
+ local t = copiedelement(element,p)
+ if type(t) == "table" then
+ d[n] = t[1]
+ for i=2,#t do
+ n = n + 1
+ insert(d,n,t[i])
+ end
+ else
+ d[n] = t
+ end
redo_ni(d) -- probably not needed
end
end
@@ -753,7 +762,7 @@ local obsolete = xml.obsolete
xml.strip_whitespace = xml.strip obsolete.strip_whitespace = xml.strip
xml.collect_elements = xml.collect obsolete.collect_elements = xml.collect
xml.delete_element = xml.delete obsolete.delete_element = xml.delete
-xml.replace_element = xml.replace obsolete.replace_element = xml.replacet
+xml.replace_element = xml.replace obsolete.replace_element = xml.replace
xml.each_element = xml.each obsolete.each_element = xml.each
xml.process_elements = xml.process obsolete.process_elements = xml.process
xml.insert_element_after = xml.insertafter obsolete.insert_element_after = xml.insertafter
diff --git a/tex/context/base/mkiv/lxml-css.lua b/tex/context/base/mkiv/lxml-css.lua
index fa921b24f..b2198f341 100644
--- a/tex/context/base/mkiv/lxml-css.lua
+++ b/tex/context/base/mkiv/lxml-css.lua
@@ -6,10 +6,12 @@ if not modules then modules = { } end modules ['lxml-css'] = {
license = "see context related readme files"
}
-local tonumber, rawset = tonumber, rawset
-local lower, format = string.lower, string.format
-local P, S, C, R, Cb, Cg, Carg, Ct, Cc, Cf = lpeg.P, lpeg.S, lpeg.C, lpeg.R, lpeg.Cb, lpeg.Cg, lpeg.Carg, lpeg.Ct, lpeg.Cc, lpeg.Cf
+local tonumber, rawset, type = tonumber, rawset, type
+local lower, format, find, gmatch = string.lower, string.format, string.find, string.gmatch
+local topattern, is_empty = string.topattern, string.is_empty
+local P, S, C, R, Cb, Cg, Carg, Ct, Cc, Cf, Cs = lpeg.P, lpeg.S, lpeg.C, lpeg.R, lpeg.Cb, lpeg.Cg, lpeg.Carg, lpeg.Ct, lpeg.Cc, lpeg.Cf, lpeg.Cs
local lpegmatch, lpegpatterns = lpeg.match, lpeg.patterns
+local sort = table.sort
xml.css = xml.css or { }
local css = xml.css
@@ -169,3 +171,716 @@ function css.colorspecification(str)
local c = str and attributes.colors.values[tonumber(str)]
return c and format("rgb(%s%%,%s%%,%s%%)",c[3]*100,c[4]*100,c[5]*100)
end
+
+-- The following might be handy. It hooks into the normal parser as <selector>
+-- and should work ok with the rest. It's sometimes even a bit faster but that might
+-- change. It's somewhat optimized but not too aggressively.
+
+-- element-1 > element-2 : element-2 with parent element-1
+
+local function s_element_a(list,collected,c,negate,str,dummy,dummy,n)
+ local all = str == "*"
+ for l=1,#list do
+ local ll = list[l]
+ local dt = ll.dt
+ if dt then
+ local ok = all or ll.tg == str
+ if negate then
+ ok = not ok
+ end
+ if ok then
+ c = c + 1
+ collected[c] = ll
+ end
+ if (not n or n > 1) and dt then
+ c = s_element_a(dt,collected,c,negate,str,dummy,dummy,n and n+1 or 1)
+ end
+ end
+ end
+ return c
+end
+
+-- element-1 + element-2 : element-2 preceded by element-1
+
+local function s_element_b(list,collected,c,negate,str)
+ local all = str == "*"
+ for l=1,#list do
+ local ll = list[l]
+ local pp = ll.__p__
+ if pp then
+ local dd = pp.dt
+ if dd then
+ local ni = ll.ni
+ local d = dd[ni+1]
+ local dt = d and d.dt
+ if not dt then
+ d = dd[ni+2]
+ dt = d and d.dt
+ end
+ if dt then
+ local ok = all or d.tg == str
+ if negate then
+ ok = not ok
+ end
+ if ok then
+ c = c + 1
+ collected[c] = d
+ end
+ end
+ end
+ end
+ end
+ return c
+end
+
+-- element-1 ~ element-2 : element-2 preceded by element-1 -- ?
+
+local function s_element_c(list,collected,c,negate,str)
+ local all = str == "*"
+ for l=1,#list do
+ local ll = list[l]
+ local pp = ll.__p__
+ if pp then
+ local dt = pp.dt
+ if dt then
+ local ni = ll.ni
+ for i=ni+1,#dt do
+ local d = dt[i]
+ local dt = d.dt
+ if dt then
+ local ok = all or d.tg == str
+ if negate then
+ ok = not ok
+ end
+ if ok then
+ c = c + 1
+ collected[c] = d
+ end
+ end
+ end
+ end
+ end
+ end
+ return c
+end
+
+-- element
+-- element-1 element-2 : element-2 inside element-1
+
+local function s_element_d(list,collected,c,negate,str)
+ if str == "*" then
+ if not negate then
+ for l=1,#list do
+ local ll = list[l]
+ local dt = ll.dt
+ if dt then
+ if not ll.special then
+ c = c + 1
+ collected[c] = ll
+ end
+ c = s_element_d(dt,collected,c,negate,str)
+ end
+ end
+ end
+ else
+ for l=1,#list do
+ local ll = list[l]
+ local dt = ll.dt
+ if dt then
+ if not ll.special then
+ local ok = ll.tg == str
+ if negate then
+ ok = not ok
+ end
+ if ok then
+ c = c + 1
+ collected[c] = ll
+ end
+ end
+ c = s_element_d(dt,collected,c,negate,str)
+ end
+ end
+ end
+ return c
+end
+
+-- [attribute]
+-- [attribute=value] equals
+-- [attribute~=value] contains word
+-- [attribute^="value"] starts with
+-- [attribute$="value"] ends with
+-- [attribute*="value"] contains
+
+-- .class (no need to optimize)
+-- #id (no need to optimize)
+
+local function s_attribute(list,collected,c,negate,str,what,value)
+ for l=1,#list do
+ local ll = list[l]
+ local dt = ll.dt
+ if dt then
+ local at = ll.at
+ if at then
+ local v = at[str]
+ local ok = negate
+ if v then
+ if not what then
+ ok = not negate
+ elseif what == 1 then
+ if v == value then
+ ok = not negate
+ end
+ elseif what == 2 then
+ -- todo: lpeg
+ if find(v,value) then
+ ok = not negate
+ end
+ elseif what == 3 then
+ -- todo: lpeg
+ if find(v," ") then
+ for s in gmatch(v,"[^ ]+") do
+ if s == value then
+ ok = not negate
+ break
+ end
+ end
+ elseif v == value then
+ ok = not negate
+ end
+ end
+ end
+ if ok then
+ c = c + 1
+ collected[c] = ll
+ end
+ end
+ c = s_attribute(dt,collected,c,negate,str,what,value)
+ end
+ end
+ return c
+end
+
+-- :nth-child(n)
+-- :nth-last-child(n)
+-- :first-child
+-- :last-child
+
+local function filter_down(collected,c,negate,dt,a,b)
+ local t = { }
+ local n = 0
+ for i=1,#dt do
+ local d = dt[i]
+ if type(d) == "table" then
+ n = n + 1
+ t[n] = i
+ end
+ end
+ if n == 0 then
+ return 0
+ end
+ local m = a
+ while true do
+ if m > n then
+ break
+ end
+ if m > 0 then
+ t[m] = -t[m] -- sign signals match
+ end
+ m = m + b
+ end
+ if negate then
+ for i=n,1-1 do
+ local ti = t[i]
+ if ti > 0 then
+ local di = dt[ti]
+ c = c + 1
+ collected[c] = di
+ end
+ end
+ else
+ for i=n,1,-1 do
+ local ti = t[i]
+ if ti < 0 then
+ ti = - ti
+ local di = dt[ti]
+ c = c + 1
+ collected[c] = di
+ end
+ end
+ end
+ return c
+end
+
+local function filter_up(collected,c,negate,dt,a,b)
+ local t = { }
+ local n = 0
+ for i=1,#dt do
+ local d = dt[i]
+ if type(d) == "table" then
+ n = n + 1
+ t[n] = i
+ end
+ end
+ if n == 0 then
+ return 0
+ end
+ if not b then
+ b = 0
+ end
+ local m = n - a
+ while true do
+ if m < 1 then
+ break
+ end
+ if m < n then
+ t[m] = -t[m] -- sign signals match
+ end
+ m = m - b
+ end
+ if negate then
+ for i=1,n do
+ local ti = t[i]
+ if ti > 0 then
+ local di = dt[ti]
+ c = c + 1
+ collected[c] = di
+ end
+ end
+ else
+ for i=1,n do
+ local ti = t[i]
+ if ti < 0 then
+ ti = - ti
+ local di = dt[ti]
+ c = c + 1
+ collected[c] = di
+ end
+ end
+ end
+ return c
+end
+
+local function just(collected,c,negate,dt,a,start,stop,step)
+ local m = 0
+ for i=start,stop,step do
+ local d = dt[i]
+ if type(d) == "table" then
+ m = m + 1
+ if negate then
+ if a ~= m then
+ c = c + 1
+ collected[c] = d
+ end
+ else
+ if a == m then
+ c = c + 1
+ collected[c] = d
+ break
+ end
+ end
+ end
+ end
+ return c
+end
+
+local function s_nth_child(list,collected,c,negate,a,n,b)
+ if n == "n" then
+ for l=1,#list do
+ local ll = list[l]
+ local dt = ll.dt
+ if dt then
+ c = filter_up(collected,c,negate,dt,a,b)
+ end
+ end
+ else
+ for l=1,#list do
+ local ll = list[l]
+ local dt = ll.dt
+ if dt then
+ c = just(collected,c,negate,dt,a,1,#dt,1)
+ end
+ end
+ end
+ return c
+end
+
+local function s_nth_last_child(list,collected,c,negate,a,n,b)
+ if n == "n" then
+ for l=1,#list do
+ local ll = list[l]
+ local dt = ll.dt
+ if dt then
+ c = filter_down(collected,c,negate,dt,a,b)
+ end
+ end
+ else
+ for l=1,#list do
+ local ll = list[l]
+ local dt = ll.dt
+ if dt then
+ c = just(collected,c,negate,dt,a,#dt,1,-1)
+ end
+ end
+ end
+ return c
+end
+
+-- :nth-of-type(n)
+-- :nth-last-of-type(n)
+-- :first-of-type
+-- :last-of-type
+
+local function s_nth_of_type(list,collected,c,negate,a,n,b)
+ if n == "n" then
+ return filter_up(collected,c,negate,list,a,b)
+ else
+ return just(collected,c,negate,list,a,1,#list,1)
+ end
+end
+
+local function s_nth_last_of_type(list,collected,c,negate,a,n,b)
+ if n == "n" then
+ return filter_down(collected,c,negate,list,a,b)
+ else
+ return just(collected,c,negate,list,a,#list,1,-1)
+ end
+end
+
+-- :only-of-type
+
+local function s_only_of_type(list,collected,c,negate)
+ if negate then
+ for i=1,#list do
+ c = c + 1
+ collected[c] = list[i]
+ end
+ else
+ if #list == 1 then
+ c = c + 1
+ collected[c] = list[1]
+ end
+ end
+ return c
+end
+
+-- :only-child
+
+local function s_only_child(list,collected,c,negate)
+ if negate then
+ for l=1,#list do
+ local ll = list[l]
+ local dt = ll.dt
+ if dt then
+ for i=1,#dt do
+ local di = dt[i]
+ if type(di) == "table" then
+ c = c + 1
+ collected[c] = di
+ end
+ end
+ end
+ end
+ else
+ for l=1,#list do
+ local ll = list[l]
+ local dt = ll.dt
+ if dt and #dt == 1 then
+ local di = dt[1]
+ if type(di) == "table" then
+ c = c + 1
+ collected[c] = di
+ end
+ end
+ end
+ end
+ return c
+end
+
+-- :empty
+
+local function s_empty(list,collected,c,negate)
+ for l=1,#list do
+ local ll = list[l]
+ local dt = ll.dt
+ if dt then
+ local dn = #dt
+ local ok = dn == 0
+ if not ok and dn == 1 then
+ local d = dt[1]
+ if type(d) == "string" and is_empty(d) then
+ ok = true
+ end
+ end
+ if negate then
+ ok = not ok
+ end
+ if ok then
+ c = c + 1
+ collected[c] = ll
+ end
+ end
+ end
+ return c
+end
+
+-- :root
+
+local function s_root(list,collected,c,negate)
+ for l=1,#list do
+ local ll = list[l]
+ if type(ll) == "table" then
+ local r = xml.root(ll)
+ if r then
+ if r.special and r.tg == "@rt@" then
+ r = r.dt[r.ri]
+ end
+ c = c + 1
+ collected[c] = r
+ break
+ end
+ end
+ end
+ return c
+end
+
+local P, R, S, C, Cs, Ct, Cc, Carg, lpegmatch = lpeg.P, lpeg.R, lpeg.S, lpeg.C, lpeg.Cs, lpeg.Ct, lpeg.Cc, lpeg.Carg, lpeg.match
+
+local whitespace = lpegpatterns.whitespace
+local p_number = lpegpatterns.integer / tonumber
+local p_space = whitespace^0
+
+local p_key = C((R("az","AZ","09") + S("_-"))^1)
+local p_left = S("#.[],:()")
+local p_right = S("#.[],:() ")
+local p_tag = C((1-p_left) * (1-p_right)^0)
+local p_value = C((1-P("]"))^0)
+local p_unquoted = (P('"')/"") * C((1-P('"'))^0) * (P('"')/"")
+ + (1-P("]"))^1
+local p_element = Ct( (
+ P(">") * p_space * Cc(s_element_a) +
+ P("+") * p_space * Cc(s_element_b) +
+ P("~") * p_space * Cc(s_element_c) +
+ Cc(s_element_d)
+ ) * p_tag )
+local p_attribute = P("[") * Ct(Cc(s_attribute) * p_key * (
+ P("=" ) * Cc(1) * Cs( p_unquoted)
+ + P("^=") * Cc(2) * Cs(Cc("^") * (p_unquoted / topattern))
+ + P("$=") * Cc(2) * Cs( p_unquoted / topattern * Cc("$"))
+ + P("*=") * Cc(2) * Cs( p_unquoted / topattern)
+ + P("~=") * Cc(3) * Cs( p_unquoted)
+ )^0 * P("]"))
+
+local p_separator = p_space * P(",") * p_space
+
+local p_formula = p_space * P("(")
+ * p_space
+ * (
+ p_number * p_space * (C("n") * p_space * (p_number + Cc(0)))^-1
+ + P("even") * Cc(0) * Cc("n") * Cc(2)
+ + P("odd") * Cc(-1) * Cc("n") * Cc(2)
+ )
+ * p_space
+ * P(")")
+
+local p_step = P(".") * Ct(Cc(s_attribute) * Cc("class") * Cc(3) * p_tag)
+ + P("#") * Ct(Cc(s_attribute) * Cc("id") * Cc(1) * p_tag)
+ + p_attribute
+ + p_element
+ + P(":nth-child") * Ct(Cc(s_nth_child) * p_formula)
+ + P(":nth-last-child") * Ct(Cc(s_nth_last_child) * p_formula)
+ + P(":first-child") * Ct(Cc(s_nth_child) * Cc(1))
+ + P(":last-child") * Ct(Cc(s_nth_last_child) * Cc(1))
+ + P(":only-child") * Ct(Cc(s_only_child) )
+ + P(":nth-of-type") * Ct(Cc(s_nth_of_type) * p_formula)
+ + P(":nth-last-of-type") * Ct(Cc(s_nth_last_of_type) * p_formula)
+ + P(":first-of-type") * Ct(Cc(s_nth_of_type) * Cc(1))
+ + P(":last-of-type") * Ct(Cc(s_nth_last_of_type) * Cc(1))
+ + P(":only-of-type") * Ct(Cc(s_only_of_type) )
+ + P(":empty") * Ct(Cc(s_empty) )
+ + P(":root") * Ct(Cc(s_root) )
+
+local p_not = P(":not") * Cc(true) * p_space * P("(") * p_space * p_step * p_space * P(")")
+local p_yes = Cc(false) * p_space * p_step
+
+local p_stepper = Ct((p_space * (p_not+p_yes))^1)
+local p_steps = Ct((p_stepper * p_separator^0)^1) * p_space * (P(-1) + function() print("error") end)
+
+local cache = table.setmetatableindex(function(t,k)
+ local v = lpegmatch(p_steps,k) or false
+ t[k] = v
+ return v
+end)
+
+local function selector(root,s)
+ -- local steps = lpegmatch(p_steps,s)
+ local steps = cache[s]
+ if steps then
+ local done = { }
+ local collected = { }
+ local nofcollected = 0
+ local nofsteps = #steps
+ for i=1,nofsteps do
+ local step = steps[i]
+ local n = #step
+ if n > 0 then
+ local r = root
+ local m = 0
+ local c = { }
+ for i=1,n,2 do
+ local s = step[i+1] -- function + data
+ m = s[1](r,c,0,step[i],s[2],s[3],s[4])
+ if m == 0 then
+ break
+ else
+ r = c
+ c = { }
+ end
+ end
+ if m > 0 then
+ if nofsteps > 1 then
+ for i=1,m do
+ local ri = r[i]
+ if done[ri] then
+ -- print("duplicate",i)
+ -- elseif ri.special then
+ -- done[ri] = true
+ else
+ nofcollected = nofcollected + 1
+ collected[nofcollected] = ri
+ done[ri] = true
+ end
+ end
+ else
+ return r
+ end
+ end
+ end
+ end
+ if nofcollected > 1 then
+ -- local n = 0
+ -- local function traverse(e)
+ -- if done[e] then
+ -- n = n + 1
+ -- done[e] = n
+ -- end
+ -- local dt = e.dt
+ -- if dt then
+ -- for i=1,#dt do
+ -- local e = dt[i]
+ -- if type(e) == "table" then
+ -- traverse(e)
+ -- end
+ -- end
+ -- end
+ -- end
+ -- traverse(root[1])
+ --
+ local n = 0
+ local function traverse(dt)
+ for i=1,#dt do
+ local e = dt[i]
+ if done[e] then
+ n = n + 1
+ done[e] = n
+ if n == nofcollected then
+ return
+ end
+ end
+ local d = e.dt
+ if d then
+ traverse(d)
+ if n == nofcollected then
+ return
+ end
+ end
+ end
+ end
+ local r = root[1]
+ if done[r] then
+ n = n + 1
+ done[r] = n
+ end
+ traverse(r.dt)
+ --
+ sort(collected,function(a,b) return done[a] < done[b] end)
+ end
+ return collected
+ else
+ return { }
+ end
+end
+
+xml.applyselector= selector
+
+-- local t = [[
+-- <?xml version="1.0" ?>
+--
+-- <a>
+-- <b class="one"> </b>
+-- <b class="two"> </b>
+-- <b class="one"> </b>
+-- <b class="three"> </b>
+-- <b id="first"> </b>
+-- <c> </c>
+-- <d> d e </d>
+-- <e> d e </e>
+-- <e> d e e </e>
+-- <d> d f </d>
+-- <f foo="bar"> </f>
+-- <f bar="foo"> </f>
+-- <f bar="foo1"> </f>
+-- <f bar="foo2"> </f>
+-- <f bar="foo3"> </f>
+-- <f bar="foo+4"> </f>
+-- <g> </g>
+-- <?crap ?>
+-- <!-- crap -->
+-- <g> <gg> <d> </d> </gg> </g>
+-- <g> <gg> <f> </f> </gg> </g>
+-- <g> <gg> <f class="one"> g gg f </f> </gg> </g>
+-- <g> </g>
+-- <g> <gg> <f class="two"> g gg f </f> </gg> </g>
+-- <g> <gg> <f class="three"> g gg f </f> </gg> </g>
+-- <g> <f class="one"> g f </f> </g>
+-- <g> <f class="three"> g f </f> </g>
+-- <h whatever="four five six"> </h>
+-- </a>
+-- ]]
+--
+-- local s = [[ .one ]]
+-- local s = [[ .one, .two ]]
+-- local s = [[ .one, .two, #first ]]
+-- local s = [[ .one, .two, #first, c, e, [foo], [bar=foo] ]]
+-- local s = [[ .one, .two, #first, c, e, [foo], [bar=foo], [bar~=foo] [bar^="foo"] ]]
+-- local s = [[ [bar^="foo"] ]]
+-- local s = [[ g f .one, g f .three ]]
+-- local s = [[ g > f .one, g > f .three ]]
+-- local s = [[ * ]]
+-- local s = [[ d + e ]]
+-- local s = [[ d ~ e ]]
+-- local s = [[ d ~ e, g f .one, g f .three ]]
+-- local s = [[ :not(d) ]]
+-- local s = [[ [whatever~="five"] ]]
+-- local s = [[ :not([whatever~="five"]) ]]
+-- local s = [[ e ]]
+-- local s = [[ :not ( e ) ]]
+-- local s = [[ a:nth-child(3) ]]
+-- local s = [[ a:nth-child(3n+1) ]]
+-- local s = [[ a:nth-child(2n+8) ]]
+-- local s = [[ g:nth-of-type(3) ]]
+-- local s = [[ a:first-child ]]
+-- local s = [[ a:last-child ]]
+-- local s = [[ e:first-of-type ]]
+-- local s = [[gg d:only-of-type ]]
+-- local s = [[ a:nth-child(even) ]]
+-- local s = [[ a:nth-child(odd) ]]
+-- local s = [[ g:empty ]]
+-- local s = [[ g:root ]]
+
+function css.applyselector(x,str)
+ -- the wrapping needs checking so this is a placeholder
+ return applyselector({ x },str)
+end
+
+-- local c = css.applyselector(xml.convert(t),s) for i=1,#c do print(xml.tostring(c[i])) end
+
diff --git a/tex/context/base/mkiv/lxml-ent.lua b/tex/context/base/mkiv/lxml-ent.lua
index c392713f0..93f48046b 100644
--- a/tex/context/base/mkiv/lxml-ent.lua
+++ b/tex/context/base/mkiv/lxml-ent.lua
@@ -8,8 +8,6 @@ if not modules then modules = { } end modules ['lxml-ent'] = {
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--
diff --git a/tex/context/base/mkiv/lxml-ini.lua b/tex/context/base/mkiv/lxml-ini.lua
index 6026b1090..11f634739 100644
--- a/tex/context/base/mkiv/lxml-ini.lua
+++ b/tex/context/base/mkiv/lxml-ini.lua
@@ -41,6 +41,8 @@ implement { name = "xmldoifelseselfempty", actions = lxml.doifelseempty, arg
--------- { 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 = "xmlpushmatch", actions = lxml.pushmatch }
+implement { name = "xmlpopmatch", actions = lxml.popmatch }
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" } }
diff --git a/tex/context/base/mkiv/lxml-ini.mkiv b/tex/context/base/mkiv/lxml-ini.mkiv
index 6fa14ddfc..6ba6bc8d4 100644
--- a/tex/context/base/mkiv/lxml-ini.mkiv
+++ b/tex/context/base/mkiv/lxml-ini.mkiv
@@ -82,6 +82,8 @@
\let\xmllast \clf_xmllast
\let\xmllastatt \clf_xmllastatt
\let\xmllastmatch \clf_xmllastmatch
+\let\xmlpushmatch \clf_xmlpushmatch
+\let\xmlpopmatch \clf_xmlpopmatch
\let\xmlloaddirectives \clf_xmlloaddirectives
\let\xmlmain \clf_xmlmain
\let\xmlmatch \clf_xmlmatch
@@ -310,6 +312,16 @@
\unexpanded\def\xmlinstalldirective#1#2%
{\clf_xmlinstalldirective{#1}{\csstring#2}}
+% an example:
+
+% <?context-tex-directive bgroup ?>
+
+\appendtoks
+ \xmlinstalldirective{tex}{xmltexcommand}%
+\to \everyjob
+
+\def\xmltexcommand#1{\begincsname#1\endcsname}
+
% \def\xmlcontextdirective#1% kind class key value
% {\executeifdefined{xml#1directive}\gobblethreearguments}
diff --git a/tex/context/base/mkiv/lxml-lpt.lua b/tex/context/base/mkiv/lxml-lpt.lua
index 7ee1db1d8..bb6fb4568 100644
--- a/tex/context/base/mkiv/lxml-lpt.lua
+++ b/tex/context/base/mkiv/lxml-lpt.lua
@@ -518,6 +518,15 @@ local function apply_expression(list,expression,order)
return collected
end
+local function apply_selector(list,specification)
+ if xml.applyselector then
+ apply_selector = xml.applyselector
+ return apply_selector(list,specification)
+ else
+ return list
+ end
+end
+
-- this one can be made faster but there are not that many conversions so it doesn't
-- really pay of
@@ -717,6 +726,10 @@ local function register_nodes(nodetest,nodes)
return { kind = "nodes", nodetest = nodetest, nodes = nodes }
end
+local function register_selector(specification)
+ return { kind = "selector", specification = specification }
+end
+
local function register_expression(expression)
local converted = lpegmatch(converter,expression)
local runner = load(format(template_e,converted))
@@ -775,7 +788,7 @@ local pathparser = Ct { "patterns", -- can be made a bit faster by moving some p
-- 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,
+ step = ((V("shortcuts") + V("selector") + P("/") + V("axis")) * spaces * V("nodes")^0 + V("error")) * spaces * V("expressions")^0 * spaces * V("finalizer")^0,
axis = V("last_match")
+ V("descendant")
@@ -807,36 +820,40 @@ local pathparser = Ct { "patterns", -- can be made a bit faster by moving some p
+ V("s_parent")
+ V("s_self")
+ V("s_root")
- + V("s_ancestor"),
+ + V("s_ancestor")
+ + V("s_lastmatch"),
shortcuts = V("shortcuts_a") * (spaces * "/" * spaces * V("shortcuts_a"))^0,
s_descendant_or_self = (P("***/") + P("/")) * Cc(register_descendant_or_self), --- *** is a bonus
s_descendant = P("**") * Cc(register_descendant),
- s_child = P("*") * no_nextcolon * Cc(register_child ),
- s_parent = P("..") * Cc(register_parent ),
- s_self = P("." ) * Cc(register_self ),
- s_root = P("^^") * Cc(register_root ),
- s_ancestor = P("^") * Cc(register_ancestor ),
+ s_child = P("*") * no_nextcolon * Cc(register_child),
+ s_parent = P("..") * Cc(register_parent),
+ s_self = P("." ) * Cc(register_self),
+ s_root = P("^^") * Cc(register_root),
+ s_ancestor = P("^") * Cc(register_ancestor),
+ s_lastmatch = P("=") * Cc(register_last_match),
-- 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 ),
- self = P("self::") * Cc(register_self ),
- root = P('root::') * Cc(register_root ),
- ancestor = P('ancestor::') * Cc(register_ancestor ),
- descendant_or_self = P('descendant-or-self::') * Cc(register_descendant_or_self ),
- ancestor_or_self = P('ancestor-or-self::') * Cc(register_ancestor_or_self ),
- -- attribute = P('attribute::') * Cc(register_attribute ),
- -- namespace = P('namespace::') * Cc(register_namespace ),
- following = P('following::') * Cc(register_following ),
- following_sibling = P('following-sibling::') * Cc(register_following_sibling ),
- preceding = P('preceding::') * Cc(register_preceding ),
- preceding_sibling = P('preceding-sibling::') * Cc(register_preceding_sibling ),
- reverse_sibling = P('reverse-sibling::') * Cc(register_reverse_sibling ),
- last_match = P('last-match::') * Cc(register_last_match ),
+ descendant = P("descendant::") * Cc(register_descendant),
+ child = P("child::") * Cc(register_child),
+ parent = P("parent::") * Cc(register_parent),
+ self = P("self::") * Cc(register_self),
+ root = P('root::') * Cc(register_root),
+ ancestor = P('ancestor::') * Cc(register_ancestor),
+ descendant_or_self = P('descendant-or-self::') * Cc(register_descendant_or_self),
+ ancestor_or_self = P('ancestor-or-self::') * Cc(register_ancestor_or_self),
+ -- attribute = P('attribute::') * Cc(register_attribute),
+ -- namespace = P('namespace::') * Cc(register_namespace),
+ following = P('following::') * Cc(register_following),
+ following_sibling = P('following-sibling::') * Cc(register_following_sibling),
+ preceding = P('preceding::') * Cc(register_preceding),
+ preceding_sibling = P('preceding-sibling::') * Cc(register_preceding_sibling),
+ reverse_sibling = P('reverse-sibling::') * Cc(register_reverse_sibling),
+ last_match = P('last-match::') * Cc(register_last_match),
+
+ selector = P("{") * C((1-P("}"))^1) * P("}") / register_selector,
nodes = (V("nodefunction") * spaces * P("(") * V("nodeset") * P(")") + V("nodetest") * V("nodeset")) / register_nodes,
@@ -1026,6 +1043,8 @@ do
collected = apply_nodes(collected,pi.nodetest,pi.nodes)
elseif kind == "expression" then
collected = apply_expression(collected,pi.evaluator,order)
+ elseif kind == "selector" then
+ collected = apply_selector(collected,pi.specification)
elseif kind == "finalizer" then
collected = pi.finalizer(collected) -- no check on # here
p.matched = p.matched + 1
@@ -1068,6 +1087,9 @@ do
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 == "selector" then
+ collected = apply_selector(collected,pi.specification)
+ report_lpath("% 10i : se : %s ",(collected and #collected) or 0,pi.specification)
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 "")
@@ -1100,6 +1122,8 @@ do
collected = apply_nodes(collected,pi.nodetest,pi.nodes)
elseif kind == "expression" then
collected = apply_expression(collected,pi.evaluator,order)
+ elseif kind == "selector" then
+ collected = apply_selector(collected,pi.specification)
elseif kind == "finalizer" then
return pi.finalizer(collected)
end
@@ -1175,6 +1199,16 @@ do
return lastmatch
end
+ local stack = { }
+
+ function xml.pushmatch()
+ insert(stack,lastmatch)
+ end
+
+ function xml.popmatch()
+ lastmatch = remove(stack)
+ end
+
end
local applylpath = xml.applylpath
diff --git a/tex/context/base/mkiv/lxml-tab.lua b/tex/context/base/mkiv/lxml-tab.lua
index 60d6262c7..02228c7c5 100644
--- a/tex/context/base/mkiv/lxml-tab.lua
+++ b/tex/context/base/mkiv/lxml-tab.lua
@@ -34,7 +34,7 @@ local xml = xml
--~ 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 type, next, setmetatable, getmetatable, tonumber, rawset, select = type, next, setmetatable, getmetatable, tonumber, rawset, select
local lower, find, match, gsub = string.lower, string.find, string.match, string.gsub
local sort = table.sort
local utfchar = utf.char
@@ -264,6 +264,7 @@ local function add_empty(spacing, namespace, tag)
tg = tag,
at = at,
dt = { },
+ ni = nt, -- set slot, needed for css filtering
__p__ = top
}
dt[nt] = t
@@ -285,7 +286,8 @@ local function add_begin(spacing, namespace, tag)
rn = resolved,
tg = tag,
at = at,
- dt = {},
+ dt = { },
+ ni = nil, -- preset slot, needed for css filtering
__p__ = stack[level]
}
setmetatable(top, mt)
@@ -314,7 +316,7 @@ local function add_end(spacing, namespace, tag)
dt = top.dt
nt = #dt + 1
dt[nt] = toclose
- -- dt[0] = top -- nasty circular reference when serializing table
+ toclose.ni = nt -- update slot, needed for css filtering
if toclose.at.xmlns then
remove(xmlns)
end
@@ -324,7 +326,7 @@ end
--
-- will be an option: dataonly
--
--- if #text == 0 or lpegmatch(spaceonly,text) then
+-- if #text == 0 or lpegmatch(spaceonly,text) then
-- return
-- end
@@ -370,7 +372,13 @@ local function add_special(what, spacing, text)
-- forget it
else
nt = nt + 1
- dt[nt] = { special=true, ns="", tg=what, dt={ text } }
+ dt[nt] = {
+ special = true,
+ ns = "",
+ tg = what,
+ ni = nil, -- preset slot
+ dt = { text },
+ }
end
end
@@ -439,7 +447,6 @@ do
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) +
@@ -494,15 +501,30 @@ do
[ [[~]] ] = "&U+7E;",
}
+ local privates_x = { -- for xml
+ [ [["]] ] = "&U+22;",
+ [ [[#]] ] = "&U+23;",
+ [ [[$]] ] = "&U+24;",
+ [ [[%]] ] = "&U+25;",
+ [ [[']] ] = "&U+27;",
+ [ [[\]] ] = "&U+5C;",
+ [ [[{]] ] = "&U+7B;",
+ [ [[|]] ] = "&U+7C;",
+ [ [[}]] ] = "&U+7D;",
+ [ [[~]] ] = "&U+7E;",
+ }
+
local privates_n = { -- keeps track of defined ones
}
local escaped = utf.remapper(privates_u,"dynamic")
local unprivatized = utf.remapper(privates_p,"dynamic")
local unspecialized = utf.remapper(privates_s,"dynamic")
+ local despecialized = utf.remapper(privates_x,"dynamic")
xml.unprivatized = unprivatized
xml.unspecialized = unspecialized
+ xml.despecialized = despecialized
xml.escaped = escaped
local function unescaped(s)
@@ -1050,9 +1072,13 @@ local grammar_unparsed_text = P { "preamble",
-- maybe we will add settings to result as well
-local function _xmlconvert_(data, settings)
+local function _xmlconvert_(data,settings)
settings = settings or { } -- no_root strip_cm_and_dt given_entities parent_root error_handler
preparexmlstate(settings)
+ local preprocessor = settings.preprocessor
+ if data and data ~= "" and type(preprocessor) == "function" then
+ data = preprocessor(data,settings) or data -- settings.currentresource
+ end
if settings.parent_root then
mt = getmetatable(settings.parent_root)
else
@@ -1240,17 +1266,15 @@ 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)
-- 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
+-- if type(v) == "table" then
+-- new[k] = table.copy(v)
+-- else
+-- new[k] = v
+-- end
-- end
-- local mt = getmetatable(old)
-- if mt then
@@ -1261,15 +1285,27 @@ can speed up things a bit. The second argument is not to be used!</p>
-- return { }
-- end
-- end
+--
+-- We need to prevent __p__ recursio, so:
-local function copy(old)
+local function copy(old,p)
if old then
local new = { }
- for k,v in next, old do
- if type(v) == "table" then
- new[k] = table.copy(v)
- else
+ for k, v in next, old do
+ local t = type(v) == "table"
+ if k == "at" then
+ local t = { }
+ for k, v in next, v do
+ t[k] = v
+ end
+ new[k] = t
+ elseif k == "dt" then
+ v.__p__ = nil
+ v = copy(v,new)
new[k] = v
+ v.__p__ = p
+ else
+ new[k] = v -- so we also share entities, etc in root
end
end
local mt = getmetatable(old)
@@ -1317,7 +1353,9 @@ and then handle the lot.</p>
local f_attribute = formatters['%s=%q']
--- we could reuse ats
+-- we could reuse ats .. for high performance we could also
+-- have a multiple handle calls instead of multiple arguments
+-- but it's not that critical
local function verbose_element(e,handlers,escape) -- options
local handle = handlers.handle
@@ -1480,7 +1518,7 @@ local function newhandlers(settings)
for k,v in next, settings do
if type(v) == "table" then
local tk = t[k] if not tk then tk = { } t[k] = tk end
- for kk,vv in next, v do
+ for kk, vv in next, v do
tk[kk] = vv
end
else
@@ -1580,19 +1618,43 @@ function xml.save(root,name)
serialize(root,xmlfilehandler,name)
end
-local result
+-- local result
+--
+-- local xmlstringhandler = newhandlers {
+-- name = "string",
+-- initialize = function()
+-- result = { }
+-- return result
+-- end,
+-- finalize = function()
+-- return concat(result)
+-- end,
+-- handle = function(...)
+-- result[#result+1] = concat { ... }
+-- end,
+-- }
+
+local result, r, threshold = { }, 0, 512
local xmlstringhandler = newhandlers {
name = "string",
initialize = function()
- result = { }
+ r = 0
return result
end,
finalize = function()
- return concat(result)
+ local done = concat(result,"",1,r)
+ r = 0
+ if r > threshold then
+ result = { }
+ end
+ return done
end,
handle = function(...)
- result[#result+1] = concat { ... }
+ for i=1,select("#",...) do
+ r = r + 1
+ result[r] = select(i,...)
+ end
end,
}
diff --git a/tex/context/base/mkiv/lxml-tex.lua b/tex/context/base/mkiv/lxml-tex.lua
index 3a49ea3d2..582185ba8 100644
--- a/tex/context/base/mkiv/lxml-tex.lua
+++ b/tex/context/base/mkiv/lxml-tex.lua
@@ -10,7 +10,6 @@ if not modules then modules = { } end modules ['lxml-tex'] = {
-- interface and not the context one. If we ever do that there will
-- be an cldf-xml helper library.
-local utfchar = utf.char
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
@@ -46,6 +45,7 @@ local xmltext = xml.text
local xmltostring = xml.tostring
local xmlapplylpath = xml.applylpath
local xmlunspecialized = xml.unspecialized
+local xmldespecialized = xml.despecialized -- nicer in expanded xml
local xmlprivatetoken = xml.privatetoken
local xmlstripelement = xml.stripelement
local xmlinclusion = xml.inclusion
@@ -53,6 +53,8 @@ local xmlinclusions = xml.inclusions
local xmlbadinclusions = xml.badinclusions
local xmlcontent = xml.content
local xmllastmatch = xml.lastmatch
+local xmlpushmatch = xml.pushmatch
+local xmlpopmatch = xml.popmatch
directives.enable("xml.path.keeplastmatch")
@@ -309,14 +311,6 @@ function lxml.stopraw()
forceraw = false
end
-function lxml.startraw()
- forceraw = true
-end
-
-function lxml.stopraw()
- forceraw = false
-end
-
function lxml.rawroot()
return rawroot
end
@@ -524,6 +518,8 @@ local function entityconverter(id,str,ent) -- todo: disable tex entities when ra
return xmlprivatetoken(str)
end
+lxml.preprocessor = nil
+
local function lxmlconvert(id,data,compress,currentresource)
local settings = { -- we're now roundtrip anyway
unify_predefined_entities = false, -- is also default
@@ -531,6 +527,7 @@ local function lxmlconvert(id,data,compress,currentresource)
resolve_predefined_entities = true, -- is also default
resolve_entities = function(str,ent) return entityconverter(id,str,ent) end,
currentresource = tostring(currentresource or id),
+ preprocessor = lxml.preprocessor,
}
if compress and compress == variables.yes then
settings.strip_cm_and_dt = true
@@ -909,7 +906,8 @@ local function sprint(root) -- check rawroot usage
if forceraw then
rawroot = root
-- contextsprint(ctxcatcodes,xmltostring(root)) -- goes wrong with % etc
- root = xmlunspecialized(xmltostring(root))
+ -- root = xmlunspecialized(xmltostring(root)) -- we loose < > &
+ root = xmldespecialized(xmltostring(root))
lpegmatch(xmltextcapture,root) -- goes to toc
else
xmlserialize(root,xmltexhandler)
@@ -1402,7 +1400,7 @@ local function attribute(collected,a,default)
end
end
-local function chainattribute(collected,arguments) -- todo: optional levels
+local function chainattribute(collected,arguments,default) -- todo: optional levels
if collected and #collected > 0 then
local e = collected[1]
while e do
@@ -1411,6 +1409,7 @@ local function chainattribute(collected,arguments) -- todo: optional levels
local a = at[arguments]
if a then
contextsprint(notcatcodes,a)
+ return
end
else
break -- error
@@ -1418,6 +1417,9 @@ local function chainattribute(collected,arguments) -- todo: optional levels
e = e.__p__
end
end
+ if default then
+ contextsprint(notcatcodes,default)
+ end
end
local function chainpath(collected,nonamespace)
@@ -1942,6 +1944,9 @@ function lxml.lastmatch()
end
end
+lxml.pushmatch = xmlpushmatch
+lxml.popmatch = xmlpopmatch
+
function lxml.snippet(id,i)
local e = getid(id)
if e then
@@ -2204,7 +2209,11 @@ local pattern = P("context-") * C((1-patterns.whitespace)^1) * C(P(1)^1)
function lxml.applyselectors(id)
local root = getid(id)
local function filter(e)
- local dt = e.dt
+ local dt = e.dt
+ if not dt then
+ report_lxml("error in selector, no data in %a",e.tg or "?")
+ return
+ end
local ndt = #dt
local done = false
local i = 1
@@ -2310,7 +2319,7 @@ function lxml.applyselectors(id)
end
end
end
- else
+ elseif dti then
filter(dti)
end
end
diff --git a/tex/context/base/mkiv/m-fonts-plugins.mkiv b/tex/context/base/mkiv/m-fonts-plugins.mkiv
new file mode 100644
index 000000000..ecb311694
--- /dev/null
+++ b/tex/context/base/mkiv/m-fonts-plugins.mkiv
@@ -0,0 +1,406 @@
+%D \module
+%D [ file=m-fonts-plugins,
+%D version=2016.10.10,
+%D title=\CONTEXT\ Fonts,
+%D subtitle=Font Engine Plugins,
+%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 See source code for comments. I wrote this a follow up on a presentation by
+%D Kai Eigner, left it for a while, and sort of finalized it the last quarter of
+%D 2016. As I don't use this module, apart from maybe testing something, it is
+%D not guaranteed to work. Also, plugins can interfere with other functionality
+%D in \CONTEXT\ so don't expect too much support. The two modules mentioned
+%D below should work in the generic loader too. It's anyhow an illustration of
+%D how \type {ffi} can work be used in a practical application.
+
+\registerctxluafile{font-txt}{1.001} % generic text handler
+\registerctxluafile{font-phb}{1.001} % harfbuzz plugin
+
+\startluacode
+
+ local function processlist(data)
+ local list = data.list
+ local timings = data.results
+ for i=1,#list do
+ local name = list[i]
+ local data = timings[name]
+ local none = data["context none"] or 0
+ local node = data["context node"] or 0
+ if node > 0.1 then
+ context.starttabulate { "|l|c|c|c|c|c|" }
+ context.NC() context.bold(name)
+ context.NC() context([[$t$]])
+ context.NC() context([[$t - t_{\hbox{\tx none}}$]])
+ context.NC() context([[$t - t_{\hbox{\tx node}}$]])
+ context.NC() context([[$t / t_{\hbox{\tx node}}$]])
+ context.NC() context([[$\frac{t - t_{\hbox{\txx none}}}{t_{\hbox{\txx node}} - t_{\hbox{\txx none}}}$]])
+ context.NC() context.NR()
+ context.TL()
+ for k, v in table.sortedhash(data) do
+ context.NC() context(k)
+ context.NC() context("%0.2f",v)
+ context.NC() context("%0.2f",v - none)
+ context.NC() context("%0.2f",v - node)
+ context.NC() context("%0.2f",v / node)
+ context.NC() if node ~= none then context("%0.2f",(v-none) / (node-none)) end
+ context.NC() context.NR()
+ end
+ context.stoptabulate()
+ end
+ end
+ end
+
+ moduledata.plugins = {
+ processlist = processlist,
+ }
+
+\stopluacode
+
+\continueifinputfile{m-fonts-plugins.mkiv}
+
+\usemodule[art-01]
+
+\starttext
+
+\edef\tufte{\cldloadfile{tufte.tex}}
+\edef\khatt{\cldloadfile{khatt-ar.tex}}
+
+\startbuffer[latin-definitions]
+\definefont[TestA][Serif*test]
+\definefont[TestB][SerifItalic*test]
+\definefont[TestC][SerifBold*test]
+\stopbuffer
+
+\startbuffer[latin-text]
+\TestA \tufte \par
+\TestB \tufte \par
+\TestC \tufte \par
+\dorecurse {10} {%
+ \TestA Fluffy Test Font A
+ \TestB Fluffy Test Font B
+ \TestC Fluffy Test Font C
+}\par
+\stopbuffer
+
+\startbuffer[arabic-definitions]
+\definedfont[Arabic*test at 14pt]
+\setupinterlinespace[line=18pt]
+\setupalign[r2l]
+\stopbuffer
+
+\startbuffer[arabic-text]
+\dorecurse {10} {
+ \khatt\space
+ \khatt\space
+ \khatt
+ \blank
+}
+\stopbuffer
+
+\startbuffer[mixed-definitions]
+\definefont[TestL][Serif*test]
+\definefont[TestA][Arabic*test at 14pt]
+\setupinterlinespace[line=18pt]
+\setupalign[r2l]
+\stopbuffer
+
+\startbuffer[mixed-text]
+\dorecurse {2} {
+ {\TestA\khatt\space\khatt\space\khatt}
+ {\TestL\lefttoright\tufte}
+ \blank
+ \dorecurse{10}{%
+ {\TestA وَ قَرْمِطْ بَيْنَ الْحُرُوفِ؛ فَإِنَّ}
+ {\TestL\lefttoright A snippet text that makes no sense.}
+ }
+}
+\stopbuffer
+
+\definefontfeature
+ [test-none]
+ [mode=none]
+
+\definefontfeature
+ [test-base]
+ [mode=base,
+ liga=yes,
+ kern=yes]
+
+\definefontfeature
+ [test-node]
+ [mode=node,
+ script=auto,
+ autoscript=position,
+ autolanguage=position,
+ ccmp=yes,
+ liga=yes,
+ % rlig=yes,
+ % hlig=yes,
+ % dlig=yes,
+ clig=yes,
+ kern=yes,
+ mark=yes,
+ mkmk=yes,
+ curs=yes]
+
+\definefontfeature
+ [test-text]
+ [mode=plug,
+ features=text]
+
+\definefontfeature
+ [test-native]
+ [mode=plug,
+ features=harfbuzz,
+ %liga=yes,
+ %kern=yes,
+ shaper=native]
+
+\definefontfeature
+ [test-uniscribe]
+ [mode=plug,
+ features=harfbuzz,
+ %liga=yes,
+ %kern=yes,
+ shaper=uniscribe]
+
+\definefontfeature
+ [test-binary]
+ [mode=plug,
+ features=harfbuzz,
+ %liga=yes,
+ %kern=yes,
+ shaper=uniscribe,
+ method=binary]
+
+\definefontfeature
+ [arabic-node]
+ [arabic]
+
+\definefontfeature
+ [arabic-native]
+ [mode=plug,
+ features=harfbuzz,
+ % method=binary,
+ script=arab,language=dflt,
+% ccmp=yes,
+% init=yes,medi=yes,fina=yes,isol=yes,
+% liga=yes,dlig=yes,rlig=yes,clig=yes,calt=yes,
+% mark=yes,mkmk=yes,kern=yes,curs=yes,
+ shaper=native]
+
+\definefontfeature
+ [arabic-uniscribe]
+ [mode=plug,
+ features=harfbuzz,
+ script=arab,language=dflt,ccmp=yes,
+ init=yes,medi=yes,fina=yes,isol=yes,
+ liga=yes,dlig=yes,rlig=yes,clig=yes,calt=yes,
+ mark=yes,mkmk=yes,kern=yes,curs=yes,
+ shaper=uniscribe]
+
+\starttexdefinition RunLatinTest #1#2#3#4#5
+ \start
+ \dontcomplain
+ \definefontfeature[test][test-#4]
+ \writestatus{warning}{#1 #3 #4 (1 initial run)}
+ \page
+ \startluacode
+ collectgarbage("collect")
+ \stopluacode
+ \title{#1 #3 #4}
+ \start
+ \getbuffer[#5-definitions]
+ \showfontkerns
+ \showmakeup[discretionary]
+ \enabletrackers[fonts.plugins.hb.colors]%
+ \testfeatureonce{1}{
+ \getbuffer[#5-text]
+ }
+ \stop
+ \page
+ \startluacode
+ collectgarbage("collect")
+ \stopluacode
+ \ifnum#2>1\relax
+ \writestatus{warning}{#1 #3 #4 (#2 timing runs)}
+ \start
+ \getbuffer[#5-definitions]
+ \testfeatureonce{#2}{
+ \setbox\scratchbox\hbox{\getbuffer[#5-text]}
+ }
+ \stop
+ \writestatus{warning}{done}
+ \fi
+ \startluacode
+ document.collected_timings.timings["#5"].results["#1"]["#3 #4"] = \elapsedtime\space
+ collectgarbage("collect")
+ \stopluacode
+ \stop
+\stoptexdefinition
+
+\starttexdefinition RunArabicTest #1#2#3#4#5
+ \start
+ \dontcomplain
+ \definefontsynonym[Arabic][#1]
+ \definefontfeature[test][arabic-#4]
+ \writestatus{warning}{#1 #3 #4 #5 (1 initial run)}
+ \page
+ \startluacode
+ collectgarbage("collect")
+ \stopluacode
+ \title{#1 #3 #4}
+ \start
+ \getbuffer[#5-definitions]
+ \enabletrackers[fonts.plugins.hb.colors]%
+ \testfeatureonce{1}{
+ \setupalign[flushleft] % easier to compare
+ \getbuffer[#5-text]
+ }
+ \par
+ \stop
+ \page
+ \ifnum#2>1\relax
+ \writestatus{warning}{#1 #3 #4 #5 (#2 timing runs)}
+ \start
+ \getbuffer[#5-definitions]
+ \testfeatureonce{#2}{
+ \setbox\scratchbox\hbox{\getbuffer[#5-text]}
+ }
+ \stop
+ \writestatus{warning}{done}
+ \fi
+ \startluacode
+ document.collected_timings.timings["#5"].results["#1"]["#3 #4"] = \elapsedtime\space
+ collectgarbage("collect")
+ \stopluacode
+ \stop
+\stoptexdefinition
+
+\startluacode
+ local processlist = moduledata.plugins.processlist
+
+ local data = {
+ timings = { },
+ engine = jit and "luajittex" or "luatex",
+ }
+
+ document.collected_timings = data
+
+ -- LATIN
+
+ local list = {
+ "modern",
+ "pagella",
+ "dejavu",
+ "cambria",
+ "ebgaramond",
+ "lucidaot"
+ }
+
+ data.timings["latin"] = {
+ list = list,
+ results = table.setmetatableindex("table"),
+ }
+
+ for i=1,#list do
+
+ local name = list[i]
+
+ context.setupbodyfont { name }
+ context.RunLatinTest (name, 100, "context", "none", "latin")
+ context.RunLatinTest (name, 100, "context", "base", "latin")
+ context.RunLatinTest (name, 100, "context", "node", "latin")
+ context.RunLatinTest (name, 100, "harfbuzz", "native", "latin")
+ -- context.RunLatinTest (name, 100, "harfbuzz", "uniscribe", "latin")
+ -- context.RunLatinTest (name, 1, "context", "text", "latin")
+ -- context.RunLatinTest (name, 1, "harfbuzz", "binary", "latin")
+
+ end
+
+ context(function()
+ context.page()
+ context.title((jit and "luajittex" or "luatex") .. " latin")
+ processlist(data.timings["latin"])
+ context.page()
+ end)
+
+ -- ARABIC
+
+ local list = {
+ "arabtype"
+ }
+
+ data.timings["arabic"] = {
+ list = list,
+ results = table.setmetatableindex("table")
+ }
+
+ for i=1,#list do
+
+ local name = list[i]
+
+ context.setupbodyfont { name }
+ context.RunArabicTest (name, 100, "context", "none", "arabic")
+ context.RunArabicTest (name, 100, "context", "base", "arabic")
+ context.RunArabicTest (name, 100, "context", "node", "arabic")
+ context.RunArabicTest (name, 100, "harfbuzz", "native", "arabic")
+ -- context.RunArabicTest (name, 100, "harfbuzz", "uniscribe", "arabic")
+ -- context.RunArabicTest (name, 1, "context", "text", "arabic")
+ -- context.RunArabicTest (name, 1, "harfbuzz", "binary", "arabic")
+
+ end
+
+ context(function()
+ context.page()
+ context.title((jit and "luajittex" or "luatex") .. " arabic")
+ processlist(data.timings["arabic"])
+ context.page()
+ end)
+
+ -- MIXED
+
+ local list = {
+ "arabtype"
+ }
+
+ data.timings["mixed"] = {
+ list = list,
+ results = table.setmetatableindex("table")
+ }
+
+ for i=1,#list do
+
+ local name = list[i]
+
+ context.setupbodyfont { name }
+ context.RunArabicTest (name, 100, "context", "none", "mixed")
+ context.RunArabicTest (name, 100, "context", "base", "mixed")
+ context.RunArabicTest (name, 100, "context", "node", "mixed")
+ context.RunArabicTest (name, 100, "harfbuzz", "native", "mixed")
+ -- context.RunArabicTest (name, 100, "harfbuzz", "uniscribe", "mixed")
+ -- context.RunArabicTest (name, 1, "context", "text", "mixed")
+ -- context.RunArabicTest (name, 1, "harfbuzz", "binary", "mixed")
+
+ end
+
+ context(function()
+ context.page()
+ context.title((jit and "luajittex" or "luatex") .. " mixed")
+ processlist(data.timings["mixed"])
+ context.page()
+ end)
+
+ context(function()
+ table.save("m-fonts-plugins-timings-" .. (jit and "luajittex" or "luatex") .. ".lua",data)
+ end)
+
+\stopluacode
+
+\stoptext
diff --git a/tex/context/base/mkiv/m-oldotf.mkiv b/tex/context/base/mkiv/m-oldotf.mkiv
index 313f9f484..f860df712 100644
--- a/tex/context/base/mkiv/m-oldotf.mkiv
+++ b/tex/context/base/mkiv/m-oldotf.mkiv
@@ -28,7 +28,6 @@
"font-one",
"font-map",
"font-fbk",
- "font-gds",
}
local report = logs.reporter("oldotf")
local findfile = resolvers.findfile
diff --git a/tex/context/base/mkiv/math-acc.mkvi b/tex/context/base/mkiv/math-acc.mkvi
index 415f2b91f..c3f8bad40 100644
--- a/tex/context/base/mkiv/math-acc.mkvi
+++ b/tex/context/base/mkiv/math-acc.mkvi
@@ -178,4 +178,35 @@
\stopusemathstyleparameter
\endgroup}
+%D Relative new:
+
+\newconditional\c_math_accents_auto_dotless \settrue\c_math_accents_auto_dotless % cf opentype math
+
+\let\normalgrave \grave \unexpanded\def\dotlessgrave #1{\normalgrave {\mathdotless#1}}
+\let\normalddot \ddot \unexpanded\def\dotlessddot #1{\normalddot {\mathdotless#1}}
+\let\normalbar \bar \unexpanded\def\dotlessbar #1{\normalbar {\mathdotless#1}}
+\let\normalacute \acute \unexpanded\def\dotlessacute #1{\normalacute {\mathdotless#1}}
+\let\normalhat \hat \unexpanded\def\dotlesshat #1{\normalhat {\mathdotless#1}}
+\let\normalcheck \check \unexpanded\def\dotlesscheck #1{\normalcheck {\mathdotless#1}}
+\let\normalbreve \breve \unexpanded\def\dotlessbreve #1{\normalbreve {\mathdotless#1}}
+\let\normaldot \dot \unexpanded\def\dotlessdot #1{\normaldot {\mathdotless#1}}
+\let\normalmathring\mathring \unexpanded\def\dotlessmathring#1{\normalmathring{\mathdotless#1}}
+\let\normaltilde \tilde \unexpanded\def\dotlesstilde #1{\normaltilde {\mathdotless#1}}
+\let\normaldddot \dddot \unexpanded\def\dotlessdddot #1{\normaldddot {\mathdotless#1}}
+
+\def\math_accents_auto_dotless#1#2%
+ {\ifconditional\c_math_accents_auto_dotless\expandafter#2\else\expandafter#1\fi}
+
+\unexpanded\def\grave {\math_accents_auto_dotless\normalgrave \dotlessgrave }
+\unexpanded\def\ddot {\math_accents_auto_dotless\normalddot \dotlessddot }
+\unexpanded\def\bar {\math_accents_auto_dotless\normalbar \dotlessbar }
+\unexpanded\def\acute {\math_accents_auto_dotless\normalacute \dotlessacute }
+\unexpanded\def\hat {\math_accents_auto_dotless\normalhat \dotlesshat }
+\unexpanded\def\check {\math_accents_auto_dotless\normalcheck \dotlesscheck }
+\unexpanded\def\breve {\math_accents_auto_dotless\normalbreve \dotlessbreve }
+\unexpanded\def\dot {\math_accents_auto_dotless\normaldot \dotlessdot }
+\unexpanded\def\mathring{\math_accents_auto_dotless\normalmathring\dotlessmathring}
+\unexpanded\def\tilde {\math_accents_auto_dotless\normaltilde \dotlesstilde }
+\unexpanded\def\dddot {\math_accents_auto_dotless\normaldddot \dotlessdddot }
+
\protect \endinput
diff --git a/tex/context/base/mkiv/math-act.lua b/tex/context/base/mkiv/math-act.lua
index d0ea78990..ddc7510b1 100644
--- a/tex/context/base/mkiv/math-act.lua
+++ b/tex/context/base/mkiv/math-act.lua
@@ -9,7 +9,7 @@ if not modules then modules = { } end modules ['math-act'] = {
-- Here we tweak some font properties (if needed).
local type, next = type, next
-local fastcopy = table.fastcopy
+local fastcopy, insert, remove = table.fastcopy, table.insert, table.remove
local formatters = string.formatters
local trace_defining = false trackers.register("math.defining", function(v) trace_defining = v end)
@@ -28,6 +28,7 @@ local appendgroup = sequencers.appendgroup
local appendaction = sequencers.appendaction
local fontchars = fonts.hashes.characters
+local fontproperties = fonts.hashes.properties
local mathfontparameteractions = sequencers.new {
name = "mathparameters",
@@ -59,7 +60,9 @@ local how = {
-- RadicalKernAfterDegree = "horizontal",
ScriptPercentScaleDown = "unscaled",
ScriptScriptPercentScaleDown = "unscaled",
- RadicalDegreeBottomRaisePercent = "unscaled"
+ RadicalDegreeBottomRaisePercent = "unscaled",
+ NoLimitSupFactor = "unscaled",
+ NoLimitSubFactor = "unscaled",
}
function mathematics.scaleparameters(target,original)
@@ -299,7 +302,9 @@ function mathematics.overloaddimensions(target,original,set)
end
end
-sequencers.appendaction("aftercopyingcharacters", "system","mathematics.overloaddimensions")
+-- no, it's a feature now (see good-mth):
+--
+-- sequencers.appendaction("aftercopyingcharacters", "system","mathematics.overloaddimensions")
-- a couple of predefined tweaks:
@@ -406,7 +411,6 @@ local setmetatableindex = table.setmetatableindex
local family_font = node.family_font
local fontcharacters = fonts.hashes.characters
-local fontdescriptions = fonts.hashes.descriptions
local extensibles = utilities.storage.allocate()
fonts.hashes.extensibles = extensibles
@@ -418,7 +422,6 @@ local extensibles = mathematics.extensibles
local e_left = extensibles.left
local e_right = extensibles.right
local e_horizontal = extensibles.horizontal
-local e_vertical = extensibles.vertical
local e_mixed = extensibles.mixed
local e_unknown = extensibles.unknown
@@ -588,74 +591,179 @@ blocks["uppercasedoublestruck"].gaps = {
-- todo: tounicode
-function mathematics.injectfallbacks(target,original)
- local properties = original.properties
- if properties and properties.hasmath then
- local specification = target.specification
- if specification then
- local fallbacks = specification.fallbacks
- if fallbacks then
- local definitions = fonts.collections.definitions[fallbacks]
- if definitions then
- if trace_collecting then
- report_math("adding fallback characters to font %a",specification.hash)
- end
- local definedfont = fonts.definers.internal
- local copiedglyph = fonts.handlers.vf.math.copy_glyph
- local fonts = target.fonts
- local size = specification.size -- target.size
- local characters = target.characters
- if not fonts then
- fonts = { }
- target.fonts = fonts
- target.type = "virtual"
- target.properties.virtualized = true
- end
- if #fonts == 0 then
- fonts[1] = { id = 0, size = size } -- sel, will be resolved later
- end
- local done = { }
- for i=1,#definitions do
- local definition = definitions[i]
- local name = definition.font
- local start = definition.start
- local stop = definition.stop
- local gaps = definition.gaps
- local check = definition.check
- local force = definition.force
- local rscale = definition.rscale or 1
- local offset = definition.offset or start
- local id = definedfont { name = name, size = size * rscale }
- local index = #fonts + 1
- fonts[index] = { id = id, size = size }
- local chars = fontchars[id]
- local function remap(unic,unicode,gap)
- local unic = unicode + offset - start
- if check and not chars[unicode] then
- -- not in font
- elseif force or (not done[unic] and not characters[unic]) then
- if trace_collecting then
- report_math("remapping math character, vector %a, font %a, character %C%s%s",
- fallbacks,name,unic,check and ", checked",gap and ", gap plugged")
- end
- characters[unic] = copiedglyph(target,characters,chars,unicode,index)
- done[unic] = true
- end
- end
- for unicode = start, stop do
- local unic = unicode + offset - start
- remap(unic,unicode,false)
+-- function mathematics.injectfallbacks(target,original)
+-- local properties = original.properties
+-- if properties and properties.hasmath then
+-- local specification = target.specification
+-- if specification then
+-- local fallbacks = specification.fallbacks
+-- if fallbacks then
+-- local definitions = fonts.collections.definitions[fallbacks]
+-- if definitions then
+-- if trace_collecting then
+-- report_math("adding fallback characters to font %a",specification.hash)
+-- end
+-- local definedfont = fonts.definers.internal
+-- local copiedglyph = fonts.handlers.vf.math.copy_glyph
+-- local fonts = target.fonts
+-- local size = specification.size -- target.size
+-- local characters = target.characters
+-- if not fonts then
+-- fonts = { }
+-- target.fonts = fonts
+-- target.type = "virtual"
+-- target.properties.virtualized = true
+-- end
+-- if #fonts == 0 then
+-- fonts[1] = { id = 0, size = size } -- sel, will be resolved later
+-- end
+-- local done = { }
+-- for i=1,#definitions do
+-- local definition = definitions[i]
+-- local name = definition.font
+-- local start = definition.start
+-- local stop = definition.stop
+-- local gaps = definition.gaps
+-- local check = definition.check
+-- local force = definition.force
+-- local rscale = definition.rscale or 1
+-- local offset = definition.offset or start
+-- local id = definedfont { name = name, size = size * rscale }
+-- local index = #fonts + 1
+-- fonts[index] = { id = id, size = size }
+-- local chars = fontchars[id]
+-- local function remap(unic,unicode,gap)
+-- -- local unic = unicode + offset - start
+-- if check and not chars[unicode] then
+-- -- not in font
+-- elseif force or (not done[unic] and not characters[unic]) then
+-- if trace_collecting then
+-- report_math("remapping math character, vector %a, font %a, character %C%s%s",
+-- fallbacks,name,unic,check and ", checked",gap and ", gap plugged")
+-- end
+-- characters[unic] = copiedglyph(target,characters,chars,unicode,index)
+-- done[unic] = true
+-- end
+-- end
+-- for unicode = start, stop do
+-- local unic = unicode + offset - start
+-- remap(unic,unicode,false)
+-- end
+-- if gaps then
+-- for unic, unicode in next, gaps do
+-- remap(unic,unicode,true)
+-- end
+-- end
+-- end
+-- end
+-- end
+-- end
+-- end
+-- end
+--
+-- sequencers.appendaction("aftercopyingcharacters", "system","mathematics.finishfallbacks")
+
+local stack = { }
+
+function mathematics.registerfallbackid(n,id,name)
+ if trace_collecting then
+ report_math("resolved fallback font %i, name %a, id %a, used %a",
+ n,name,id,fontproperties[id].fontname)
+ end
+ stack[#stack][n] = id
+end
+
+interfaces.implement { -- will be shared with text
+ name = "registerfontfallbackid",
+ arguments = { "integer", "integer", "string" },
+ actions = mathematics.registerfallbackid,
+}
+
+function mathematics.resolvefallbacks(target,specification,fallbacks)
+ local definitions = fonts.collections.definitions[fallbacks]
+ if definitions then
+ local size = specification.size -- target.size
+ local list = { }
+ insert(stack,list)
+ context.pushcatcodes("prt") -- context.unprotect()
+ for i=1,#definitions do
+ local definition = definitions[i]
+ local name = definition.font
+ local features = definition.features or ""
+ local size = size * (definition.rscale or 1)
+ context.font_fallbacks_register_math(i,name,features,size)
+ if trace_collecting then
+ report_math("registering fallback font %i, name %a, size %a, features %a",i,name,size,features)
+ end
+ end
+ context.popcatcodes()
+ end
+end
+
+function mathematics.finishfallbacks(target,specification,fallbacks)
+ local list = remove(stack)
+ if list and #list > 0 then
+ local definitions = fonts.collections.definitions[fallbacks]
+ if definitions and #definitions > 0 then
+ if trace_collecting then
+ report_math("adding fallback characters to font %a",specification.hash)
+ end
+ local definedfont = fonts.definers.internal
+ local copiedglyph = fonts.handlers.vf.math.copy_glyph
+ local fonts = target.fonts
+ local size = specification.size -- target.size
+ local characters = target.characters
+ if not fonts then
+ fonts = { }
+ target.fonts = fonts
+ end
+ target.type = "virtual"
+ target.properties.virtualized = true
+ if #fonts == 0 then
+ fonts[1] = { id = 0, size = size } -- self, will be resolved later
+ end
+ local done = { }
+ for i=1,#definitions do
+ local definition = definitions[i]
+ local name = definition.font
+ local start = definition.start
+ local stop = definition.stop
+ local gaps = definition.gaps
+ local check = definition.check
+ local force = definition.force
+ local rscale = definition.rscale or 1
+ local offset = definition.offset or start
+ local id = list[i]
+ if id then
+ local index = #fonts + 1
+ fonts[index] = { id = id, size = size }
+ local chars = fontchars[id]
+ local function remap(unic,unicode,gap)
+ if check and not chars[unicode] then
+ return
end
- if gaps then
- for unic, unicode in next, gaps do
- remap(unic,unicode,true)
+ if force or (not done[unic] and not characters[unic]) then
+ if trace_collecting then
+ report_math("replacing math character %C by %C using vector %a and font id %a for %a%s%s",
+ unic,unicode,fallbacks,id,fontproperties[id].fontname,check and ", checked",gap and ", gap plugged")
end
+ characters[unic] = copiedglyph(target,characters,chars,unicode,index)
+ done[unic] = true
+ end
+ end
+ for unicode = start, stop do
+ local unic = unicode + offset - start
+ remap(unic,unicode,false)
+ end
+ if gaps then
+ for unic, unicode in next, gaps do
+ remap(unic,unicode,true)
end
end
end
end
+ elseif trace_collecting then
+ report_math("no fallback characters added to font %a",specification.hash)
end
end
end
-
-sequencers.appendaction("aftercopyingcharacters", "system","mathematics.injectfallbacks")
diff --git a/tex/context/base/mkiv/math-ali.mkiv b/tex/context/base/mkiv/math-ali.mkiv
index ebb20e33e..49a343ba0 100644
--- a/tex/context/base/mkiv/math-ali.mkiv
+++ b/tex/context/base/mkiv/math-ali.mkiv
@@ -25,26 +25,28 @@
%D Modules may provide additional alignment features. The following
%D mechanisms are provided by the core.
+% why all these spans
+
% n>1 ### needed, strange # interaction in recurse
-\newtoks\c_math_align_a
-\newtoks\c_math_align_b
-\newtoks\c_math_align_c
+\newtoks\t_math_align_a
+\newtoks\t_math_align_b
+\newtoks\t_math_align_c
\def\displayopenupvalue{.25\bodyfontsize}
\def\math_build_eqalign
{\scratchtoks\emptytoks
\dorecurse{\mathalignmentparameter\c!m}\math_build_eqalign_step
- \normalexpanded{\scratchtoks{\the\scratchtoks\the\c_math_align_c}}}
+ \normalexpanded{\scratchtoks{\the\scratchtoks\the\t_math_align_c}}}
-\def\math_build_eqalign_step
+\unexpanded\def\math_build_eqalign_step % make sure no expansion in tracing
{\ifnum\recurselevel>\plusone
\scratchtoks\expandafter{\the\scratchtoks\tabskip\mathalignmentparameter\c!distance\aligntab\tabskip\zeropoint}%
\fi
- \normalexpanded{\scratchtoks{\the\scratchtoks\the\c_math_align_a}}%
+ \normalexpanded{\scratchtoks{\the\scratchtoks\the\t_math_align_a}}%
\dorecurse{\numexpr\mathalignmentparameter\c!n-\plusone\relax}
- {\normalexpanded{\scratchtoks{\the\scratchtoks\the\c_math_align_b}}}}
+ {\normalexpanded{\scratchtoks{\the\scratchtoks\the\t_math_align_b}}}}
\def\math_math_in_eqalign#1%
{\startforceddisplaymath
@@ -83,70 +85,141 @@
% 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}%
+ {\t_math_align_a
+ {\strut
+ \tabskip\zeropoint
+ \alignmark\alignmark % for picking up the number
+ \aligntab
+ \math_first_in_eqalign
+ \hfil
+ \math_left_of_equalign
+ \span
+ \math_math_in_eqalign{\alignmark\alignmark}%
+ \math_right_of_eqalign
+ \tabskip\zeropoint}%
+ \t_math_align_b
+ {\aligntab
+ \math_next_in_eqalign
+ \math_left_of_equalign
+ \span
+ \math_math_in_eqalign{\alignmark\alignmark}%
+ \math_right_of_eqalign
+ \tabskip\zeropoint}%
\ifnum\mathraggedstatus=\plusone
- \c_math_align_c{\hfil\aligntab\span\math_text_in_eqalign{\alignmark\alignmark}\tabskip\zeropoint}%
+ \t_math_align_c
+ {\hfil
+ \aligntab
+ \span
+ \math_text_in_eqalign{\alignmark\alignmark}%
+ \tabskip\zeropoint}%
\else\ifnum\mathraggedstatus=\plusthree
- \c_math_align_c{\hfil\tabskip\zeropoint\s!plus 1\s!fill\aligntab\span\math_text_in_eqalign{\alignmark\alignmark}\tabskip\zeropoint}%
+ \t_math_align_c
+ {\hfil
+ \tabskip\zeropoint\s!plus 1\s!fill
+ \aligntab
+ \span
+ \math_text_in_eqalign{\alignmark\alignmark}%
+ \tabskip\zeropoint}%
\else
- \c_math_align_c{\hfil\tabskip\centering\aligntab\llap{\span\math_text_in_eqalign{\alignmark\alignmark}}\tabskip\zeropoint}%
+ \t_math_align_c
+ {\hfil
+ \tabskip\centering
+ \aligntab
+ \span
+ \llap{\math_text_in_eqalign{\alignmark\alignmark}}%
+ \tabskip\zeropoint}%
\fi\fi
- \global\mathnumberstatus\zerocount
\math_build_eqalign
\the\mathdisplayaligntweaks
\tabskip\centering}
\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
+ {\t_math_align_a
+ {\strut
+ \tabskip\zeropoint
+ \alignmark\alignmark % for picking up the number
+ \aligntab
+ \math_first_in_eqalign
+ \hfil
+ \math_left_of_equalign
+ \span
+ \math_math_in_eqalign{\alignmark\alignmark}%
+ \math_right_of_eqalign
+ \tabskip\zeropoint}%
+ \t_math_align_b
+ {\aligntab
+ \math_next_in_eqalign
+ \math_left_of_equalign
+ \span
+ \math_math_in_eqalign{\alignmark\alignmark}%
+ \math_right_of_eqalign
+ \tabskip\zeropoint}%
\ifnum\mathraggedstatus=\plusone
- \c_math_align_c{\hfil\aligntab\kern-\displaywidth\rlap{\span\math_text_in_eqalign{\alignmark\alignmark}}\tabskip\displaywidth}%
+ \t_math_align_c
+ {\hfil
+ \aligntab
+ \kern-\displaywidth
+ \span
+ \rlap{\math_text_in_eqalign{\alignmark\alignmark}}%
+ \tabskip\displaywidth}%
\else\ifnum\mathraggedstatus=\plusthree
- \c_math_align_c{\hfil\tabskip\zeropoint\s!plus 1\s!fill\aligntab\kern-\displaywidth\span\math_rlap{\span\math_text_in_eqalign{\alignmark\alignmark}}\tabskip\displaywidth}%
+ \t_math_align_c
+ {\hfil
+ \tabskip\zeropoint\s!plus 1\s!fill
+ \aligntab
+ \kern-\displaywidth
+ \span
+ \math_rlap{\math_text_in_eqalign{\alignmark\alignmark}}%
+ \tabskip\displaywidth}%
\else
- \c_math_align_c{\hfil\tabskip\centering\aligntab\kern-\displaywidth\rlap{\span\math_text_in_eqalign{\alignmark\alignmark}}\tabskip\displaywidth}%
+ \t_math_align_c
+ {\hfil
+ \tabskip\centering
+ \aligntab
+ \kern-\displaywidth
+ \span
+ \rlap{\math_text_in_eqalign{\alignmark\alignmark}}%
+ \tabskip\displaywidth}%
\fi\fi
- \global\mathnumberstatus\zerocount
\math_build_eqalign
\the\mathdisplayaligntweaks
\tabskip\centering}
+\def\math_halign_checked
+ {\halign \ifcase\eqalignmode \or to \checkeddisplaywidth \fi}
+
\def\math_both_eqalign_no_normal#1#2%
{\ifmmode
- \the\mathdisplayaligntweaks % \let\strc_formulas_place_number\relax % strange hack
+ \the\mathdisplayaligntweaks
\vcenter\bgroup
\let\math_finish_eqalign_no\egroup
\else
\let\math_finish_eqalign_no\relax
\fi
#1%
- \halign \ifcase\eqalignmode \or to \checkeddisplaywidth \fi \expandafter {\the\scratchtoks\crcr#2\crcr}%
+ \math_halign_checked\expandafter\bgroup\the\scratchtoks\crcr#2\crcr\egroup
\math_finish_eqalign_no}
\def\math_both_eqalign_no_aligned#1%
{\ifmmode
- \the\mathdisplayaligntweaks
- \global\mathnumberstatus\plusone
- \ifcase\mathraggedstatus
+ \the\mathdisplayaligntweaks
+ \global\mathnumberstatus\plusone
+ \ifcase\mathraggedstatus
\def\math_finish_eqalign_no{\crcr\egroup}%
- \else
+ \else
% we're in a mathbox
\vcenter\bgroup
\def\math_finish_eqalign_no{\crcr\egroup\egroup}%
- \fi
+ \fi
\fi
#1%
- \halign \ifcase\eqalignmode \or to \checkeddisplaywidth \fi \expandafter \bgroup\the\scratchtoks\crcr}
+ \math_halign_checked\expandafter\bgroup\the\scratchtoks\crcr}
\def\math_rlap#1%
{\setbox\scratchbox\hbox{#1}%
- \ifdim\wd\scratchbox>\mathnumbercorrection
- \xdef\mathnumbercorrection{\the\wd\scratchbox}%
+ \ifdim\wd\scratchbox>\d_math_number_correction
+ \global\d_math_number_correction\wd\scratchbox
\fi
\box\scratchbox
\global\mathnumberstatus\plustwo}
@@ -157,12 +230,9 @@
\def\math_handle_eqalign_no_l_aligned{\math_both_eqalign_no_aligned\math_prepare_l_eqalign_no}
\def\math_finish_eqalign_no {\crcr\egroup}
-\let \reqalignno \math_handle_eqalign_no_r_normal
-\let \leqalignno \math_handle_eqalign_no_l_normal
-\let\alignreqalignno \math_handle_eqalign_no_r_aligned
-\let\alignleqalignno \math_handle_eqalign_no_l_aligned
-\let \eqalignno \math_handle_eqalign_no_r_normal
-\let \aligneqalignno \math_handle_eqalign_no_r_aligned
+\let\reqalignno\relax
+\let\leqalignno\relax
+\let\eqalignno \relax
%D Here we implement the user interface part. We start with basic math alignments:
@@ -170,26 +240,28 @@
\newtoks \everymathalignment
-\def\math_alignment_NR_indeed[#1][#2]%
- {\strc_formulas_place_number_nested{#1}{#2}% to be tagged (better an attribute)
+\def\math_alignment_NC_first#1\NR
+ {\glet\math_alignment_NC\math_alignment_NC_rest
+ \scratchtoks{\math_number_left_of_eqalign\aligntab#1\NR}% \math_number_left_of_eqalign not used yet
+ \dodoubleempty\math_alignment_NC_first_indeed}
+
+\def\math_alignment_NC_first_indeed[#1][#2]%
+ {\strc_formulas_place_number_nested{#1}{#2}\the\scratchtoks}
+
+\def\math_alignment_NR
+ {\aligntab
+ \dostoptagged % finish cell
+ \math_number_right_of_eqalign
\crcr
\dostoptagged % finish row
\noalign{\glet\math_alignment_NC\math_alignment_NC_first}} % noalign used for change state, conditional does not work here
-\def\math_alignment_NC_first
- {\glet\math_alignment_NC\math_alignment_NC_rest}
-
\def\math_alignment_NC_rest
{\aligntab}
\def\math_alignment_EQ
{\NC=}
-\def\math_alignment_NR
- {\aligntab
- \dostoptagged % finish cell
- \dodoubleempty\math_alignment_NR_indeed} % use xx from tabulate
-
\appendtoks
\glet\math_alignment_NC\math_alignment_NC_first
\unexpanded\def\NC{\math_alignment_NC}% messy, due to lookahead (we cannot use a flag)
@@ -227,7 +299,7 @@
\the\everymathalignment
\c_math_eqalign_column\zerocount
\processcommacommand
- [\mathalignmentparameter\c!align]
+ [\mathalignmentparameter\c!align]%
{\advance\c_math_eqalign_column\plusone\math_eqalign_set_column}% takes argument
\global\c_math_eqalign_column\plusone
\dostarttagged\t!math\empty
@@ -311,15 +383,33 @@
\def\math_left_of_equalign
{\ifcsname\??mathalignmentvariant\number\c_math_eqalign_column\endcsname
- \ifcase\csname\??mathalignmentvariant\number\c_math_eqalign_column\endcsname\or
- \relax \or \hfill \or \hfill
- \fi
+ \ifcase\lastnamedcs \or \relax \or \hfill \or \hfill \fi
\fi}
\def\math_right_of_eqalign
{\ifcsname\??mathalignmentvariant\number\c_math_eqalign_column\endcsname
- \ifcase\csname\??mathalignmentvariant\number\c_math_eqalign_column\endcsname\or
- \hfill \or \relax \or \hfill
+ \ifcase\lastnamedcs \or \hfill \or \relax \or \hfill \fi
+ \fi}
+
+\newconditional\c_math_alignment_local_number % not used but when true puts in front (todo)
+
+\def\math_number_right_of_eqalign
+ {\ifcase\wd\b_strc_formulas_number\else
+ \ifconditional\c_math_alignment_local_number
+ \ifcase\c_strc_math_number_location\or\or
+ \box\b_strc_formulas_number
+ \fi
+ \else
+ \box\b_strc_formulas_number
+ \fi
+ \fi}
+
+\def\math_number_left_of_eqalign
+ {\ifcase\wd\b_strc_formulas_number\else
+ \ifconditional\c_math_alignment_local_number
+ \ifcase\c_strc_math_number_location\or
+ \box\b_strc_formulas_number
+ \fi
\fi
\fi}
@@ -677,8 +767,10 @@
\def\math_matrix_stop
{\crcr
- \mathstrut\crcr
- \noalign{\kern-\baselineskip}%
+ % \ifgridsnapping \else
+ \mathstrut\crcr
+ \noalign{\vskip-\baselineskip}%
+ % \fi
\egroup
\popmacro\math_matrix_NC
\egroup
@@ -689,19 +781,19 @@
\definemathmatrix[\v!mathmatrix]
\def\math_matrix_prepare
- {\c_math_align_a{\strut\math_first_in_eqalign\math_left_of_equalign\span
+ {\t_math_align_a{\strut\math_first_in_eqalign\math_left_of_equalign\span
\math_text_in_eqalign{\mathmatrixparameter\c!style\alignmark\alignmark}\math_right_of_eqalign}%
- \c_math_align_b{\aligntab\hskip\mathmatrixparameter\c!distance
+ \t_math_align_b{\aligntab\hskip\mathmatrixparameter\c!distance
\math_next_in_eqalign\math_left_of_equalign\span
\math_text_in_eqalign{\mathmatrixparameter\c!style\alignmark\alignmark}\math_right_of_eqalign}%
- \c_math_align_c{\aligntab\aligntab\hskip\mathmatrixparameter\c!distance
+ \t_math_align_c{\aligntab\aligntab\hskip\mathmatrixparameter\c!distance
\math_left_of_equalign\span
\math_text_in_eqalign{\mathmatrixparameter\c!style\alignmark\alignmark}\math_right_of_eqalign}%
\scratchtoks\emptytoks
- \normalexpanded{\scratchtoks{\the\scratchtoks\the\c_math_align_a}}%
+ \normalexpanded{\scratchtoks{\the\scratchtoks\the\t_math_align_a}}%
\dorecurse{\numexpr\scratchcounter-\plusone\relax}
- {\normalexpanded{\scratchtoks{\the\scratchtoks\the\c_math_align_b}}}%
- \normalexpanded{\scratchtoks{\the\scratchtoks\the\c_math_align_c}}%
+ {\normalexpanded{\scratchtoks{\the\scratchtoks\the\t_math_align_b}}}%
+ \normalexpanded{\scratchtoks{\the\scratchtoks\the\t_math_align_c}}%
\halign \expandafter \bgroup\the\scratchtoks \crcr}
\unexpanded\def\math_matrix_NC_indeed
@@ -1023,9 +1115,8 @@
%D The following code comes from \type {math-str.mkiv}.
%D
-%D Here we implement a basic math alignment mechanism. Numbers
-%D are also handled. The macros \type {\startinnermath} and
-%D \type {\stopinnermath} can be overloaded in specialized
+%D Here we implement a basic math alignment mechanism. Numbers are also handled. The macros
+%D \type {\startinnermath} and \type {\stopinnermath} can be overloaded in specialized
%D modules.
\installcorenamespace{mathinnerstart}
@@ -1052,223 +1143,444 @@
\newconstant\mathraggedstatus % normal left center right
\newconstant\mathnumberstatus % nothing normal shift_right
-\let\mathnumbercorrection\!!zeropoint
-
-\let\math_the_r_eq_no\empty
-\let\math_the_l_eq_no\empty
-
-\unexpanded\def\startmathbox#1%
- {\hsize\displaywidth % \checkeddisplaymath
- \global\mathnumberstatus\plusone
- \mathraggedstatus#1\relax
- \let\mathnumbercorrection\!!zeropoint
- \global\let\math_the_r_eq_no\empty
- \global\let\math_the_l_eq_no\empty
- \def\reqno{\gdef\math_the_r_eq_no}%
- \def\leqno{\gdef\math_the_l_eq_no}%
- \let\eqno\reqno
- % added
- \let\normalreqno\reqno
- \let\normalleqno\leqno
- \let\normaleqno \eqno
- % added
- \strc_formulas_place_number
- \setbox\scratchbox\math_hbox to \displaywidth\bgroup % \checkeddisplaymath
- \mathinnerstrut
- \startforceddisplaymath
- \ifcase\mathraggedstatus\or\hfill\or\hfill\fi}
+\newdimen\d_math_number_correction
\def\math_box_llapped_math_no
{\ifcase\mathraggedstatus\or
- \math_the_r_eq_no
+ \box\b_strc_formulas_number
\or
- \llap{\math_the_r_eq_no}%
+ \llap{\box\b_strc_formulas_number}%
\or
- \llap{\math_the_r_eq_no}%
+ \llap{\box\b_strc_formulas_number}%
\fi}
\def\math_box_rlapped_math_no
{\ifcase\mathraggedstatus\or
- \rlap{\math_the_l_eq_no}%
+ \rlap{\box\b_strc_formulas_number}%
\or
- \rlap{\math_the_l_eq_no}%
+ \rlap{\box\b_strc_formulas_number}%
\or
- \math_the_l_eq_no
+ \box\b_strc_formulas_number
+ \fi}
+
+\newconditional\c_strc_math_has_number
+\newconditional\c_strc_math_display_overflow
+\newconstant \c_strc_math_number_location
+\newdimen \d_strc_math_number_width
+\newdimen \d_strc_math_display_width
+\newbox \b_strc_math_display
+\newconstant \c_strc_formulas_frame_mode
+
+\let\d_strc_math_framed_width\displaywidth
+
+\setvalue{\??formulaoption\v!frame}%
+ {\edef\p_frame{\formulaparameter\c!frame}%
+ \ifx\p_frame\v!number
+ \c_strc_formulas_frame_mode\plustwo % inside frame
+ \else
+ \c_strc_formulas_frame_mode\plusone % outside frame
+ \fi}
+
+% mode: 0=no frame | 1=number inside frame | 2=number outside frame
+
+\def\strc_math_flush_aligned
+ {\ifcase\mathraggedstatus\or\hfill\or\hfill\fi
+ \box\b_strc_math_display
+ \ifcase\mathraggedstatus\or\or\hfill\or\hfill\fi}
+
+\def\strc_math_flush_box_normal
+ {\hbox to \displaywidth\bgroup
+ \strc_math_flush_aligned
+ \egroup}
+
+\def\strc_math_flush_box_framed_common
+ {\setformulaframedparameter\c!align{\formulaparameter\c!align}%
+ \letformulaframedparameter\c!strut\v!no
+ \d_framed_formula\ht\b_strc_math_display
+ \ifcase\mathraggedstatus\or\hfill\or\hfill \fi
+ \inheritedformulaframedframed{\box\b_strc_math_display}%
+ \ifcase\mathraggedstatus\or \or\hfill\or\hfill\fi}
+
+% \def\strc_math_flush_box_framed_inline
+% {\letformulaframedparameter\c!location\empty
+% \letformulaframedparameter\c!width\displaywidth
+% \strc_math_flush_box_framed_common}
+
+\def\strc_math_flush_box_framed_display
+ {\let\currentformulaframed\currentformula
+ \letformulaframedparameter\c!location\v!formula
+ \setformulaframedparameter\c!width{\d_strc_math_framed_width}%
+ \strc_math_flush_box_framed_common}
+
+\def\strc_math_flush_box_framed_fit_inline
+ {\let\currentformulaframed\currentformula
+ \letformulaframedparameter\c!location\empty
+ \letformulaframedparameter\c!width\v!fit
+ \strc_math_flush_box_framed_common}
+
+\def\strc_math_flush_box_framed_fit_display
+ {\let\currentformulaframed\currentformula
+ \letformulaframedparameter\c!location\v!formula
+ \letformulaframedparameter\c!width\v!fit
+ \strc_math_flush_box_framed_common}
+
+% combiners
+
+\def\strc_math_flush_box
+ {\ifcase\c_strc_formulas_frame_mode
+ \strc_math_flush_box_normal
+ \else
+ \strc_math_flush_box_framed_display
+ \fi}
+
+\def\strc_math_number_right_normal
+ {\strc_math_flush_aligned
+ \hss % hss makes room for number
+ \math_box_llapped_math_no}
+
+\def\strc_math_number_left_normal
+ {\math_box_rlapped_math_no
+ \strc_math_flush_aligned
+ \hss} % hss makes room for number
+
+\def\strc_math_number_right_normal_outside
+ {\ifconditional\c_strc_formulas_tight
+ \strc_math_flush_box_framed_fit_display
+ \else
+ \strc_math_flush_box_framed_display
+ \fi
+ \hss % hss makes room for number
+ \math_box_llapped_math_no}
+
+\def\strc_math_number_left_normal_outside
+ {\math_box_rlapped_math_no
+ \hss % hss makes room for number
+ \ifconditional\c_strc_formulas_tight
+ \strc_math_flush_box_framed_fit_display
+ \else
+ \strc_math_flush_box_framed_display
+ \fi}
+
+\def\strc_math_number_right_normal_inside
+ {\setbox\b_strc_math_display\hpack to \dimexpr\displaywidth-\d_framed_locator_lo-\d_framed_locator_ro\relax\bgroup
+ \strc_math_flush_aligned
+ \hss
+ \math_box_llapped_math_no
+ \egroup
+ \strc_math_flush_box_framed_fit_inline}
+
+\def\strc_math_number_left_normal_inside
+ {\setbox\b_strc_math_display\hpack to \dimexpr\displaywidth-\d_framed_locator_lo-\d_framed_locator_ro\relax\bgroup
+ \math_box_rlapped_math_no
+ \hss
+ \strc_math_flush_aligned
+ \egroup
+ \strc_math_flush_box_framed_fit_inline}
+
+\def\strc_math_number_right_overflow
+ {\vpack\bgroup
+ \strc_math_flush_box
+ \par
+ \hpack to \displaywidth\bgroup
+ \hss
+ \math_box_llapped_math_no
+ \egroup
+ \egroup}
+
+\def\strc_math_number_left_overflow
+ {\vpack\bgroup
+ \hpack to \displaywidth\bgroup
+ \math_box_rlapped_math_no
+ \hss
+ \egroup
+ \strc_math_flush_box
+ \egroup}
+
+\def\strc_math_number_right_overflow_outside
+ {\vpack\bgroup
+ \strc_math_flush_box_framed_fit_inline
+% \hskip\zeropoint % nicely breaks the line without introducing funny vertical spacing ... why o why
+ \hpack to \displaywidth\bgroup
+ \hss
+ \math_box_llapped_math_no
+ \egroup
+ \egroup}
+
+\def\strc_math_number_left_overflow_outside
+ {\vpack\bgroup
+ \hpack to \dimexpr\displaywidth-\d_framed_locator_lo\relax\bgroup
+ \math_box_rlapped_math_no
+ \hss
+ \egroup
+ \hskip\zeropoint % nicely breaks the line without introducing funny vertical spacing ... why o why
+ \strc_math_flush_box_framed_fit_inline
+ \egroup}
+
+\def\strc_math_number_right_overflow_inside
+ {\setbox\b_strc_math_display\vpack\bgroup
+ \box\b_strc_math_display
+ \hpack to \displaywidth\bgroup
+ \hss
+ \math_box_llapped_math_no
+ \hskip\d_framed_locator_ro
+ \egroup
+ \egroup
+ \strc_math_flush_box_framed_fit_inline}
+
+\def\strc_math_number_left_overflow_inside
+ {\setbox\b_strc_math_display\vpack\bgroup
+ \hpack to \displaywidth\bgroup
+ % \hskip\d_framed_locator_lo
+ \math_box_rlapped_math_no
+ \hss
+ \egroup
+ \box\b_strc_math_display
+ \egroup
+ \strc_math_flush_box_framed_fit_inline}
+
+% checkers
+
+\def\strc_math_number_check
+ {\d_strc_math_display_width\wd\b_strc_math_display
+ \ifconditional\c_strc_formulas_tight
+ \ifdim\d_strc_math_display_width>\displaywidth
+ \settrue\c_strc_math_display_overflow
+ \else
+ \displaywidth\d_strc_math_display_width
+ \setfalse\c_strc_math_display_overflow
+ \fi
+ \else
+ \ifdim\d_strc_math_display_width>\displaywidth
+ \settrue\c_strc_math_display_overflow
+ \else
+ \setfalse\c_strc_math_display_overflow
+ \fi
\fi}
-\unexpanded\def\stopmathbox
+\def\strc_math_number_check_outside
+ {\d_strc_math_display_width\naturalwd\b_strc_math_display
+ \ifdim\dimexpr\d_strc_math_display_width+\d_framed_locator_lo+\d_framed_locator_ro\relax>\displaywidth
+ \settrue\c_strc_math_display_overflow
+ \else
+ \setfalse\c_strc_math_display_overflow
+ \fi
+ % still ok?
+ \ifnum\mathraggedstatus=\plustwo
+ \edef\d_strc_math_framed_width{\the\dimexpr\displaywidth-2\wd\b_strc_formulas_number\relax}%
+ \else
+ \edef\d_strc_math_framed_width{\the\dimexpr\displaywidth-\wd\b_strc_formulas_number\relax}%
+ \fi}
+
+\let\strc_math_number_check_inside\strc_math_number_check_outside
+
+% offsets
+
+\def\strc_math_number_check_offsets
+ {\begingroup
+ \setbox\scratchbox\hbox
+ {\inheritedformulaframedframed
+ {\pack_framed_locator_set_lo\pack_framed_locator_set_ro}}%
+ \endgroup}
+
+% tracing
+
+\def\strc_math_traced_state_yes
+ {\llap{\setbox\scratchbox\hbox{\infofont
+ \ifcase\mathraggedstatus unset\or right\or middle\or left\fi
+ \space
+ \ifcase\c_strc_formulas_frame_mode no\or out\or in\fi
+ \space
+ \ifconditional\c_strc_math_display_overflow overflow\else fit\fi
+ \quad}\ht\scratchbox\zeropoint\dp\scratchbox\zeropoint\box\scratchbox}}
+
+\let\strc_math_traced_state\relax
+
+\installtextracker
+ {formulas.framed}
+ {\let\strc_math_traced_state\strc_math_traced_state_yes}
+ {\let\strc_math_traced_state\relax}
+
+% packaging
+
+\unexpanded\def\strc_math_box_start#1%
+ {\hsize\displaywidth % \checkeddisplaymath
+ \global\mathnumberstatus\plusone
+ \mathraggedstatus#1\relax
+ %
+ \global\d_math_number_correction\zeropoint
+ %
+ \edef\p_location{\formulaparameter\c!location}%
+ \useformulacolorparameter\c!color
+ \c_strc_math_number_location\ifx\p_location\v!left\plusone\else\ifx\p_location\v!right\plustwo\else\zerocount\fi\fi
+ %
+ %\strc_formulas_place_number % not here as we can have inner alignment numbers
+ \dontcomplain
+ \setbox\b_strc_math_display\math_hbox\bgroup % \checkeddisplaymath
+ \mathinnerstrut
+ \startforceddisplaymath}
+
+\def\strc_math_flush_number_no
+ {\ifconditional\c_strc_math_display_overflow
+ \ifcase\c_strc_formulas_frame_mode
+ \strc_math_flush_box_normal
+ \else
+ \strc_math_flush_box_framed_fit_inline
+ \fi
+ \else
+ \ifcase\c_strc_formulas_frame_mode
+ %\ifconditional\c_strc_formulas_tight
+ % \strc_math_flush_box_normal
+ %\else
+ \strc_math_flush_box_normal
+ %\fi
+ \else
+ \ifconditional\c_strc_formulas_tight
+ \strc_math_flush_box_framed_fit_inline
+ \else
+ \strc_math_flush_box_framed_display
+ \fi
+ \fi
+ \fi}
+
+\def\strc_math_flush_number_left
+ {\ifconditional\c_strc_math_display_overflow
+ \ifcase\c_strc_formulas_frame_mode
+ \strc_math_number_left_overflow
+ \or
+ \strc_math_number_left_overflow_outside
+ \or
+ \strc_math_number_left_overflow_inside
+ \fi
+ \else
+ \ifcase\c_strc_formulas_frame_mode
+ \strc_math_number_left_normal
+ \or
+ \strc_math_number_left_normal_outside
+ \or
+ \strc_math_number_left_normal_inside
+ \fi
+ \fi}
+
+\def\strc_math_flush_number_right
+ {\ifconditional\c_strc_math_display_overflow
+ \ifcase\c_strc_formulas_frame_mode
+ \strc_math_number_right_overflow
+ \or
+ \strc_math_number_right_overflow_outside
+ \or
+ \strc_math_number_right_overflow_inside
+ \fi
+ \else
+ \ifcase\c_strc_formulas_frame_mode
+ \strc_math_number_right_normal
+ \or
+ \strc_math_number_right_normal_outside
+ \or
+ \strc_math_number_right_normal_inside
+ \fi
+ \fi}
+
+\unexpanded\def\strc_math_box_stop
{\stopforceddisplaymath
- \ifcase\mathraggedstatus\or\or\hfill\or\hfill\fi
\egroup
- \setbox0\hbox{\unhcopy\scratchbox}%
- \scratchdimen\wd0
- % to be tested: \scratchdimen\naturalwd\scratchbox
- \ifdim\scratchdimen>\displaywidth % \checkeddisplaymath
- \donetrue
+ % % not needed, attribute driven
+ % \ifgridsnapping
+ % \snaptogrid[\v!math]\vbox
+ % \fi
+ % \bgroup
+ % check number
+ \d_strc_math_number_width\wd\b_strc_formulas_number
+ %
+ \ifcase\mathnumberstatus
+ \setfalse\c_strc_math_has_number
+ \or\ifzeropt\d_strc_math_number_width
+ \setfalse\c_strc_math_has_number
\else
- \donefalse
+ \settrue\c_strc_math_has_number
+ \fi\fi
+ % preroll left and right offsets
+ \ifcase\c_strc_formulas_frame_mode
+ % no frame
+ \else
+ \strc_math_number_check_offsets
+ \fi
+ \ifcase\c_strc_formulas_frame_mode
+ \strc_math_number_check
+ \or
+ \strc_math_number_check_outside
+ \else
+ \strc_math_number_check_inside
\fi
- \hbox to \displaywidth\bgroup
+ \noindent % \noindentation % not \dontleavehmode
+ \hskip\d_strc_formulas_display_margin_left % was kern but that doesn't indent
+ \strc_math_traced_state
+ \hbox to \displaywidth \bgroup
\ifcase\mathnumberstatus
- \box\scratchbox
- \or
- \ifx\math_the_l_eq_no\empty
- \ifx\math_the_r_eq_no\empty
- \box\scratchbox
+ \strc_math_flush_box
+ \or % status 1
+ \ifcase\c_strc_math_number_location
+ \strc_math_flush_box
+ \or % number left
+ \ifzeropt\wd\b_strc_formulas_number
+ \strc_math_flush_number_no
\else
- \ifdone
- \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
+ \strc_math_flush_number_left
\fi
- \else
- \ifdone
- \vpack{\hpack to \displaywidth{\math_box_rlapped_math_no\hss}\box\scratchbox}% \checkeddisplaymath
+ \else % number right
+ \ifzeropt\wd\b_strc_formulas_number
+ \strc_math_flush_number_no
\else
- \math_box_rlapped_math_no\box\scratchbox\hss % hss makes room for number
+ \strc_math_flush_number_right
\fi
\fi
- \or
- \hskip\mathnumbercorrection
- \box\scratchbox
+ \or % status 2
+ \hskip\d_math_number_correction % probably no longer used
+ \strc_math_flush_box
\hss
\else
- \box\scratchbox
+ \strc_math_flush_box
\fi
+ % \egroup
\egroup}
-\defineinnermathhandler\v!left {\startmathbox\plusone }{\stopmathbox}
-\defineinnermathhandler\v!middle {\startmathbox\plustwo }{\stopmathbox}
-\defineinnermathhandler\v!right {\startmathbox\plusthree}{\stopmathbox}
-\defineinnermathhandler\v!flushleft {\startmathbox\plusthree}{\stopmathbox}
-\defineinnermathhandler\v!center {\startmathbox\plustwo }{\stopmathbox}
-\defineinnermathhandler\v!flushright{\startmathbox\plusone }{\stopmathbox}
-\defineinnermathhandler\v!normal {} {}
+\defineinnermathhandler\v!left {\strc_math_box_start\plusone }{\strc_math_box_stop}
+\defineinnermathhandler\v!middle {\strc_math_box_start\plustwo }{\strc_math_box_stop}
+\defineinnermathhandler\v!right {\strc_math_box_start\plusthree}{\strc_math_box_stop}
+\defineinnermathhandler\v!flushleft {\strc_math_box_start\plusthree}{\strc_math_box_stop}
+\defineinnermathhandler\v!center {\strc_math_box_start\plustwo }{\strc_math_box_stop}
+\defineinnermathhandler\v!flushright{\strc_math_box_start\plusone }{\strc_math_box_stop}
+\defineinnermathhandler\v!normal {\strc_math_box_start\plustwo }{\strc_math_box_stop}
-%defineinnermathhandler\v!normal {\startmathbox\plustwo }{\stopmathbox}
+%D Some inline math tweak.
-%D [The examples below are in english and don't process in the
-%D documentation style, which will be english some day.]
-%D
-%D Normally a formula is centered, but in case you want to
-%D align it left or right, you can set up formulas to behave
-%D that way. Normally a formula will adapt is left indentation
-%D to the environment:
-%D
-%D \startbuffer
-%D \fakewords{20}{40}\epar
-%D \startitemize
-%D \item \fakewords{20}{40}\epar
-%D \placeformula \startformula \fakeformula \stopformula
-%D \item \fakewords{20}{40}\epar
-%D \stopitemize
-%D \fakewords{20}{40}\epar
-%D \stopbuffer
-%D
-%D % \getbuffer
-%D
-%D In the next examples we explicitly align formulas to the
-%D left (\type {\raggedleft}), center and right (\type
-%D {\raggedright}):
-%D
-%D \startbuffer
-%D \setupformulas[align=left]
-%D \startformula\fakeformula\stopformula
-%D \setupformulas[align=middle]
-%D \startformula\fakeformula\stopformula
-%D \setupformulas[align=right]
-%D \startformula\fakeformula\stopformula
-%D \stopbuffer
-%D
-%D \typebuffer
-%D
-%D Or in print:
-%D
-%D % {\getbuffer}
-%D
-%D With formula numbers these formulas look as follows:
-%D
-%D \startbuffer
-%D \setupformulas[align=left]
-%D \placeformula \startformula\fakeformula\stopformula
-%D \setupformulas[align=middle]
-%D \placeformula \startformula\fakeformula\stopformula
-%D \setupformulas[align=right]
-%D \placeformula \startformula\fakeformula\stopformula
-%D \stopbuffer
-%D
-%D % {\getbuffer}
-%D
-%D This was keyed in as:
-%D
-%D \typebuffer
-%D
-%D When tracing is turned on (\type {\tracemathtrue}) you can
-%D visualize the bounding box of the formula,
-%D
-%D % {\tracemathtrue\getbuffer}
-%D
-%D As you can see, the dimensions are the natural ones, but if
-%D needed you can force a normalized line:
-%D
-%D \startbuffer
-%D \setupformulas[strut=yes]
-%D \placeformula \startformula \fakeformula \stopformula
-%D \stopbuffer
-%D
-%D \typebuffer
-%D
-%D This time we get a more spacy result.
-%D
-%D % {\tracemathtrue\getbuffer}
-%D
-%D We will now show a couple of more settings and combinations
-%D of settings. In centered formulas, the number takes no space
-%D
-%D \startbuffer
-%D \setupformulas[align=middle]
-%D \startformula \fakeformula \stopformula
-%D \placeformula \startformula \fakeformula \stopformula
-%D \stopbuffer
-%D
-%D \typebuffer % {\tracemathtrue\getbuffer}
-%D
-%D You can influence the placement of the whole box with the
-%D parameters \type {leftmargin} and \type {rightmargin}.
-%D
-%D \startbuffer
-%D \setupformulas[align=right,leftmargin=3em]
-%D \startformula \fakeformula \stopformula
-%D \placeformula \startformula \fakeformula \stopformula
-%D
-%D \setupformulas[align=left,rightmargin=1em]
-%D \startformula \fakeformula \stopformula
-%D \placeformula \startformula \fakeformula \stopformula
-%D \stopbuffer
-%D
-%D \typebuffer % {\tracemathtrue\getbuffer}
-%D
-%D You can also inherit the margin from the environment.
-%D
-%D \startbuffer
-%D \setupformulas[align=right,margin=standard]
-%D \startformula \fakeformula \stopformula
-%D \placeformula \startformula \fakeformula \stopformula
-%D \stopbuffer
-%D
-%D \typebuffer % {\tracemathtrue\getbuffer}
-%D
-%D The distance between the formula and the number is only
-%D applied when the formula is left or right aligned.
-%D
-%D \startbuffer
-%D \setupformulas[align=left,distance=2em]
-%D \startformula \fakeformula \stopformula
-%D \placeformula \startformula \fakeformula \stopformula
-%D \stopbuffer
-%D
-%D \typebuffer % {\tracemathtrue\getbuffer}
+\appendtoks
+ \ifcase\mathnestinglevel\or
+ % 4=disable 6=only when no spaces
+ \mathsurroundskip\mathematicsparameter\c!textdistance\relax
+ \ifzeropt\mathsurroundskip
+ \ifdim\gluestretch\mathsurroundskip=\zeropoint
+ \ifdim\glueshrink\mathsurroundskip=\zeropoint
+ \mathsurroundmode\plussix
+ \else
+ \mathsurroundskip\zeropoint
+ \mathsurroundmode\plusfour
+ \fi
+ \else
+ \mathsurroundmode\plussix
+ \fi
+ \else
+ \mathsurroundmode\plussix
+ \fi
+ \else
+ \mathsurroundmode\plusfour
+ \mathsurroundskip\zeropoint
+ \fi
+\to \everymathematics
+
+\setupmathematics
+ [\c!textdistance=\zeropoint]
+
+%D For documentation, see \type {math-mkiv.tex}.
\protect \endinput
diff --git a/tex/context/base/mkiv/math-del.mkiv b/tex/context/base/mkiv/math-del.mkiv
index be78b581f..269b6946a 100644
--- a/tex/context/base/mkiv/math-del.mkiv
+++ b/tex/context/base/mkiv/math-del.mkiv
@@ -79,6 +79,8 @@
[\c!symbol=0,
\c!command=\v!yes,
\c!factor=1.5,
+ \c!axis=\v!yes,
+ % \c!exact=\v!yes
\c!height=\exheight,
\c!depth=\exheight]
@@ -93,29 +95,78 @@
{\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}%
- }
+ {\mathop
+ {\edef\currentmathextensible{#1}%
+ \edef\p_factor{\mathextensibleparameter\c!factor}%
+ \ifsecondargument
+ \doifassignmentelse{#2}
+ {\setupcurrentmathextensible[#2]%
+ \edef\p_factor{\mathextensibleparameter\c!factor}}%
+ {\edef\p_factor{#2}}%
+ \else
+ \edef\p_factor{\mathextensibleparameter\c!factor}%
+ \fi
+ \edef\p_exact{\mathextensibleparameter\c!exact}%
+ \edef\p_axis {\mathextensibleparameter\c!axis}%
+ \edef\p_leftoffset{\mathextensibleparameter\c!leftoffset}%
+ \edef\p_rightoffset{\mathextensibleparameter\c!rightoffset}%
+ \ifx\p_leftoffset\empty\else
+ \mskip\p_leftoffset
+ \fi
+ \Uvextensible
+ \ifx\p_exact\v!yes exact \fi
+ \ifx\p_axis \v!yes axis \fi
+ height \p_factor\dimexpr\mathextensibleparameter\c!height\relax
+ depth \p_factor\dimexpr\mathextensibleparameter\c!depth \relax
+ \Udelimiter\zerocount\zerocount\mathextensibleparameter\c!symbol
+ \relax
+ \ifx\p_rightoffset\empty\else
+ \mskip\p_rightoffset
+ \fi}}
\let\mathextensible\math_fenced_extensible
+\definemathextensible[integral][\c!symbol="222B]
+
+% \setupmathextensible[integral][rightoffset=-3mu,exact=yes,factor=2]
+%
+% \let\inlineint \int
+% \let\displayint\integral
+%
+% \unexpanded\def\int{\ifmmode\inlineordisplaymath\inlineint\displayint\else\normalint\fi}
+%
+% \startlines
+% \ruledhbox{$\integral f\frac{1}{2}$}
+% \ruledhbox{$\integral[factor=1] f\frac{1}{2}$}
+% \ruledhbox{$\integral[factor=3] f\frac{1}{2}$}
+% \ruledhbox{$\int f\frac{1}{2}$}
+% \stoplines
+
+\unexpanded\def\autointegral#1#2#3%
+ {\ifmmode
+ \setbox\nextbox\mathstylehbox{#3}%
+ \scratchdimen\ifdim\nextboxht>\nextboxdp\nextboxht\else\nextboxdp\fi
+ \mathlimop{%
+ \Uvextensible
+ height \scratchdimen
+ depth \scratchdimen
+ exact%
+ axis%
+ \Udelimiter \plusfour \zerocount "222B%
+ }%
+ \limits % nolimits needs more work: kerning and so
+ \normalsuperscript{#1}%
+ \normalsubscript{#2}%
+ \box\nextbox
+ \else
+ \char"222B\relax
+ \fi}
+
% \startformula
-% \integral[factor=3] \frac{1}{2}
-% \integral[5] \frac{1}{2}
+% a =
+% \autointegral{t}{b}1 +
+% \autointegral{t}{b}{\frac{\frac{3}{4}}{\frac{1}{2}}} +
+% \autointegral{t}{b}{\frac{\frac{\frac{\frac{1}{2}}{2}}{2}}{2}}
% \stopformula
-\definemathextensible[integral][\c!symbol="222B]
-
\protect \endinput
diff --git a/tex/context/base/mkiv/math-dim.lua b/tex/context/base/mkiv/math-dim.lua
index b5241cb5a..ba0235a5b 100644
--- a/tex/context/base/mkiv/math-dim.lua
+++ b/tex/context/base/mkiv/math-dim.lua
@@ -99,6 +99,8 @@ local defaults = {
radical_degree_before = { default = { "RadicalKernBeforeDegree", "(5/18)*quad" }, },
radical_degree_after = { default = { "RadicalKernAfterDegree", "(-10/18)*quad" }, },
radical_degree_raise = { default = { "RadicalDegreeBottomRaisePercent", "60" }, },
+ no_limit_sub_factor = { default = { "NoLimitSubFactor", "0" }, },
+ no_limit_sup_factor = { default = { "NoLimitSupFactor", "0" }, },
}
local styles = {
diff --git a/tex/context/base/mkiv/math-dir.lua b/tex/context/base/mkiv/math-dir.lua
index c9c2a38dd..cba991b84 100644
--- a/tex/context/base/mkiv/math-dir.lua
+++ b/tex/context/base/mkiv/math-dir.lua
@@ -41,7 +41,7 @@ local insert_node_before = nuts.insert_before
local insert_node_after = nuts.insert_after
local nodecodes = nodes.nodecodes
-local tasks = nodes.tasks
+local enableaction = nodes.tasks.enableaction
local glyph_code = nodecodes.glyph
local hlist_code = nodecodes.hlist
@@ -108,13 +108,13 @@ local function processmath(head)
end
elseif not start then
-- nothing
-if id == hlist_code or id == vlist_code then
- local list, d = processmath(getlist(current))
- setlist(current,list)
- if d then
- done = true
- end
-end
+ if id == hlist_code or id == vlist_code then
+ local list, d = processmath(getlist(current))
+ setlist(current,list)
+ if d then
+ done = true
+ end
+ end
elseif start == stop then
start = nil
else
@@ -160,7 +160,7 @@ function directions.setmath(n)
if trace_directions then
report_directions("enabling directions handler")
end
- tasks.enableaction("math","typesetters.directions.processmath")
+ enableaction("math","typesetters.directions.processmath")
enabled = true
end
end
diff --git a/tex/context/base/mkiv/math-fen.mkiv b/tex/context/base/mkiv/math-fen.mkiv
index 81e39723d..320dffeb8 100644
--- a/tex/context/base/mkiv/math-fen.mkiv
+++ b/tex/context/base/mkiv/math-fen.mkiv
@@ -43,7 +43,8 @@
\c!middle=,
\c!mathstyle=,
\c!color=,
- \c!command=]
+ \c!command=,
+ \c!factor=\v!auto]
\appendtoks
\edef\p_command{\mathfenceparameter\c!command}%
@@ -54,20 +55,68 @@
% we need the direct use of \Udelimiter because of { etc
-\def\math_fenced_left {\edef\p_left{\mathfenceparameter\c!left}%
- \math_fenced_color_push
- \normalleft\ifx\p_left\empty.\else\Udelimiter\plusfour\fam\p_left\relax\fi
- \math_fenced_color_pop}
-\def\math_fenced_middle{\edef\p_middle{\mathfenceparameter\c!middle}%
- \mskip\thinmuskip
- \math_fenced_color_push
- \normalmiddle\ifx\p_middle\empty.\else\Udelimiter\plusfour\fam\p_middle\relax\fi
- \math_fenced_color_pop
- \mskip\thinmuskip}
-\def\math_fenced_right {\edef\p_right{\mathfenceparameter\c!right}%
- \math_fenced_color_push
- \normalright\ifx\p_right\empty.\else\Udelimiter\plusfive\fam\p_right\relax\fi
- \math_fenced_color_pop}
+\newconditional\c_math_fenced_mirror \settrue\c_math_fenced_mirror
+
+\unexpanded\def\math_fenced_inject#1#2#3#4%
+ {\ifx#1\empty
+ #2.%
+ \else
+ \edef\p_factor{\mathfenceparameter\c!factor}%
+ \ifx\p_factor\empty
+ #2%
+ \else\ifx\p_factor\v!auto
+ #2%
+ \else\ifx\p_factor\v!none
+ #3\s!height\zeropoint\s!depth\zeropoint\s!axis
+ #2%
+ \else
+ \scratchdimen\dimexpr\p_factor\bodyfontsize/2\relax
+ #3\s!height\scratchdimen\s!depth\scratchdimen\s!axis
+ \fi\fi\fi
+ \Udelimiter#4\fam#1\relax
+ \fi}
+
+\def\math_fenced_left
+ {\edef\p_left
+ {\ifconditional\c_math_fenced_mirror
+ \ifconditional\c_math_right_to_left
+ \mathfenceparameter\c!right
+ \else
+ \mathfenceparameter\c!left
+ \fi
+ \else
+ \mathfenceparameter\c!left
+ \fi}%
+ \math_fenced_color_push
+ % \normalleft\ifx\p_left\empty.\else\Udelimiter\plusfour\fam\p_left\relax\fi
+ \math_fenced_inject\p_left\normalleft\Uleft\plusfour
+ \math_fenced_color_pop}
+
+\def\math_fenced_middle
+ {\edef\p_middle
+ {\mathfenceparameter\c!middle}%
+ \mskip\thinmuskip
+ \math_fenced_color_push
+ % \normalmiddle\ifx\p_middle\empty.\else\Udelimiter\plusfour\fam\p_middle\relax\fi
+ \math_fenced_inject\p_middle\normalmiddle\Umiddle\plusfour
+ \math_fenced_color_pop
+ \mskip\thinmuskip}
+
+\def\math_fenced_right
+ {\edef\p_right
+ {\ifconditional\c_math_fenced_mirror
+ \ifconditional\c_math_right_to_left
+ \mathfenceparameter\c!left
+ \else
+ \mathfenceparameter\c!right
+ \fi
+ \else
+ \mathfenceparameter\c!right
+ \fi}%
+ \math_fenced_color_push
+ % \normalright \ifx\p_right\empty.\else\Udelimiter\plusfive\fam\p_right\relax\fi
+ \math_fenced_inject\p_right\normalright\Uright\plusfive
+ \math_fenced_color_pop}
\def\math_fenced_color_do_push{\pushcolor[\p_math_fenced_color]}
\let\math_fenced_color_do_pop \popcolor
@@ -80,11 +129,8 @@
\newcount\c_math_fenced_nesting
-\unexpanded\def\math_fenced_fenced_start#1%
- {\advance\c_math_fenced_nesting\plusone
- \begingroup
- \edef\currentmathfence{#1}%
- \startusemathstyleparameter\mathfenceparameter
+\unexpanded\def\math_fenced_fenced_common
+ {\startusemathstyleparameter\mathfenceparameter
\let\fence\math_fenced_middle
\edef\p_math_fenced_color{\mathfenceparameter\c!color}%
\ifx\p_math_fenced_color\empty
@@ -93,7 +139,13 @@
\else
\let\math_fenced_color_push\math_fenced_color_do_push
\let\math_fenced_color_pop \math_fenced_color_do_pop
- \fi
+ \fi}
+
+\unexpanded\def\math_fenced_fenced_start#1%
+ {\advance\c_math_fenced_nesting\plusone
+ \begingroup
+ \edef\currentmathfence{#1}%
+ \math_fenced_fenced_common
\math_fenced_left}
\unexpanded\def\math_fenced_fenced_stop#1%
@@ -103,8 +155,16 @@
\endgroup
\advance\c_math_fenced_nesting\minusone}
-\unexpanded\def\math_fenced_fenced[#1]#2%
- {\math_fenced_fenced_start{#1}%
+\unexpanded\def\math_fenced_fenced[#1]%
+ {\advance\c_math_fenced_nesting\plusone
+ \begingroup
+ \edef\currentmathfence{#1}%
+ \dosingleempty\math_fenced_fenced_indeed}
+
+\unexpanded\def\math_fenced_fenced_indeed[#1]#2%
+ {\iffirstargument\setupcurrentmathfence[#1]\fi
+ \math_fenced_fenced_common
+ \math_fenced_left
#2%
\math_fenced_right
\stopusemathstyleparameter
@@ -201,6 +261,21 @@
\unexpanded\def\Lopenbracketmirrored {\math_fenced_fenced_stop {mirroredopenbracket}} \unexpanded\def\Ropenbracketmirrored {\math_fenced_fenced_start{mirroredopenbracket}}
\unexpanded\def\Lnothingmirrored {\math_fenced_fenced_stop {mirrorednothing}} \unexpanded\def\Rnothingmirrored {\math_fenced_fenced_start{mirrorednothing}}
+\definemathfence [interval] [\c!left="2997,\c!right="2998]
+\definemathfence [openinterval] [interval] [\c!left="2998,\c!right="2998]
+\definemathfence [leftopeninterval] [interval] [\c!left="2997,\c!right="2997]
+\definemathfence [rightopeninterval] [interval] [\c!left="2998,\c!right="2998]
+
+\unexpanded\def\Linterval {\math_fenced_fenced_start{interval}}
+\unexpanded\def\Lointerval {\math_fenced_fenced_start{openinterval}}
+\unexpanded\def\Llointerval {\math_fenced_fenced_start{leftopeninterval}}
+\unexpanded\def\Lrointerval {\math_fenced_fenced_start{rightopeninterval}}
+
+\unexpanded\def\Rinterval {\math_fenced_fenced_stop {interval}}
+\unexpanded\def\Rointerval {\math_fenced_fenced_stop {openinterval}}
+\unexpanded\def\Rlointerval {\math_fenced_fenced_stop {leftopeninterval}}
+\unexpanded\def\Rrointerval {\math_fenced_fenced_stop {rightopeninterval}}
+
% \startformula
% \left{ \frac{1}{a} \right}
% \left[ \frac{1}{b} \right]
@@ -230,40 +305,40 @@
%
% \def\math_left
% {\settrue\c_math_fenced_done
-% \edef\m_math_left{\meaning\nexttoken}%
+% \edef\m_math_left{\normalmeaning\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}%
+% \edef\m_math_right{\normalmeaning\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}%
+% \edef\m_math_middle{\normalmeaning\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}%
+% \edef\m_math_left{\normalmeaning#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}%
+% \edef\m_math_right{\normalmeaning#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}%
+% \edef\m_math_middle{\normalmeaning#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}
+ {\expandafter\let\csname\??mathleft \normalmeaning#1\endcsname#2%
+ \expandafter\let\csname\??mathright\normalmeaning#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}
@@ -275,7 +350,7 @@
\def\math_left
{\settrue\c_math_fenced_done
- \ifcsname\??mathleft\meaning\nexttoken\endcsname
+ \ifcsname\??mathleft\normalmeaning\nexttoken\endcsname
\expandafter\lastnamedcs
\else
\expandafter\math_unknown_left
@@ -283,7 +358,7 @@
\def\math_right
{\settrue\c_math_fenced_done
- \ifcsname\??mathright\meaning\nexttoken\endcsname
+ \ifcsname\??mathright\normalmeaning\nexttoken\endcsname
\expandafter\lastnamedcs
\else
\expandafter\math_unknown_right
@@ -291,7 +366,7 @@
\def\math_middle
{\settrue\c_math_fenced_done
- \ifcsname\??mathmiddle\meaning\nexttoken\endcsname
+ \ifcsname\??mathmiddle\normalmeaning\nexttoken\endcsname
\expandafter\lastnamedcs
\else
\expandafter\math_unknown_middle
@@ -300,7 +375,7 @@
\unexpanded\def\lfence#1%
{\settrue\c_math_fenced_done
\let\nexttoken#1%
- \ifcsname\??mathleft\meaning\nexttoken\endcsname
+ \ifcsname\??mathleft\normalmeaning\nexttoken\endcsname
\expandafter\lastnamedcs
\else
\expandafter\math_unknown_left
@@ -309,7 +384,7 @@
\unexpanded\def\rfence#1%
{\settrue\c_math_fenced_done
\let\nexttoken#1%
- \ifcsname\??mathright\meaning\nexttoken\endcsname
+ \ifcsname\??mathright\normalmeaning\nexttoken\endcsname
\expandafter\lastnamedcs
\else
\expandafter\math_unknown_right
@@ -318,7 +393,7 @@
\unexpanded\def\mfence#1%
{\settrue\c_math_fenced_done
\let\nexttoken#1%
- \ifcsname\??mathmiddle\meaning\nexttoken\endcsname
+ \ifcsname\??mathmiddle\normalmeaning\nexttoken\endcsname
\expandafter\lastnamedcs
\else
\expandafter\math_unknown_middle
@@ -370,6 +445,8 @@
% \installmathfencepair { \Lbrace } \Rbrace
% \installmathfencepair } \Rbracemirrored { \Lbracemirrored
+\installmathfencepair ⦗ \Linterv ⦘ \Rinterv
+
\appendtoks
\ignorediscretionaries % so $\mtext{a|b}$ works, this is ok because it's an \hbox
\to \everymathematics
@@ -418,6 +495,12 @@
\installmathfencepair \llbracket \Lopenbracket \rrbracket \Ropenbracket
\installmathfencepair \lgroup \Lgroup \rgroup \Rgroup
+\installmathfencepair \linterval \Linterval \rinterval \Rinterval
+%installmathfencepair \linterv \Linterval \rinterv \Rinterval
+\installmathfencepair \lointerval \Linterval \rointerval \Rinterval
+\installmathfencepair \llointerval \Llointerval \rlointerval \Rlointerval
+\installmathfencepair \lrointerval \Lrointerval \rrointerval \Rrointerval
+
\let\textlbar\lbar \let\mathlbar\Lbar
\let\textrbar\lbar \let\mathrbar\Rbar
@@ -470,7 +553,7 @@
\installcorenamespace{mathbig}
\unexpanded\def\choosemathbig#1#2% so we accept \big{||} as well
- {{\hbox\bgroup
+ {{\naturalhbox\bgroup
\startimath
\ifcase\bigmathdelimitermethod
\math_fenced_step#2\relax
diff --git a/tex/context/base/mkiv/math-for.mkiv b/tex/context/base/mkiv/math-for.mkiv
index 0c8bd05ae..176552406 100644
--- a/tex/context/base/mkiv/math-for.mkiv
+++ b/tex/context/base/mkiv/math-for.mkiv
@@ -19,15 +19,29 @@
\unprotect
%D \macros
-%D {setupformulas,setupsubformulas}
+%D {setupformulas,setupsubformulas,setupformulaframed}
\installcorenamespace{formula}
\installcorenamespace{subformula}
+\installcorenamespace{formulaframed}
+\installcorenamespace{formulaoption}
-\installcommandhandler \??formula {formula} \??formula
-\installcommandhandler \??subformula {subformula} \??subformula % maybe just setuphandler (no childs used yet)
+\installcommandhandler \??formula {formula} \??formula
+\installcommandhandler \??subformula {subformula} \??subformula % maybe just setuphandler (no childs used yet)
+\installframedcommandhandler \??formulaframed {formulaframed} \??formulaframed
\let\setupformulas \setupformula
\let\setupsubformulas\setupsubformula
+\appendtoks
+ \normalexpanded{\defineformulaframed[\currentformula][\currentformulaparent]}%
+\to \everydefineformula
+
+\def\strc_formulas_option#1%
+ {\ifcsname\??formulaoption#1\endcsname
+ \lastnamedcs
+ \else
+ \font_basics_switchtobodyfont{#1}% for old time sake, might go away, only pt so maybe dimension and small test
+ \fi}
+
\protect \endinput
diff --git a/tex/context/base/mkiv/math-ini.lua b/tex/context/base/mkiv/math-ini.lua
index e6a35c39e..2cb4e2413 100644
--- a/tex/context/base/mkiv/math-ini.lua
+++ b/tex/context/base/mkiv/math-ini.lua
@@ -24,8 +24,7 @@ local context = context
local commands = commands
local implement = interfaces.implement
-local context_sprint = context.sprint
------ context_fprint = context.fprint -- a bit inefficient
+local ctx_sprint = context.sprint
local ctx_doifelsesomething = commands.doifelsesomething
local trace_defining = false trackers.register("math.defining", function(v) trace_defining = v end)
@@ -142,49 +141,49 @@ mathematics.families = families
-- there will be proper functions soon (and we will move this code in-line)
-- no need for " in class and family (saves space)
-local function mathchar(class,family,slot)
- return formatters['\\Umathchar "%X "%X "%X '](class,family,slot)
-end
-
-local function mathaccent(class,family,slot)
- return formatters['\\Umathaccent "%X "%X "%X '](0,family,slot) -- no class
-end
-
-local function delimiter(class,family,slot)
- return formatters['\\Udelimiter "%X "%X "%X '](class,family,slot)
-end
-
-local function radical(family,slot)
- return formatters['\\Uradical "%X "%X '](family,slot)
-end
-
-local function root(family,slot)
- return formatters['\\Uroot "%X "%X '](family,slot)
-end
-
-local function mathchardef(name,class,family,slot)
- return formatters['\\Umathchardef\\%s "%X "%X "%X '](name,class,family,slot)
-end
-
-local function mathcode(target,class,family,slot)
- return formatters['\\Umathcode%s="%X "%X "%X '](target,class,family,slot)
-end
-
-local function mathtopaccent(class,family,slot)
- return formatters['\\Umathaccent "%X "%X "%X '](0,family,slot) -- no class
-end
-
-local function mathbotaccent(class,family,slot)
- return formatters['\\Umathaccent bottom "%X "%X "%X '](0,family,slot) -- no class
-end
-
-local function mathtopdelimiter(class,family,slot)
- return formatters['\\Udelimiterover "%X "%X '](family,slot) -- no class
-end
-
-local function mathbotdelimiter(class,family,slot)
- return formatters['\\Udelimiterunder "%X "%X '](family,slot) -- no class
-end
+-- local function mathchar(class,family,slot)
+-- return formatters['\\Umathchar "%X "%X "%X '](class,family,slot)
+-- end
+--
+-- local function mathaccent(class,family,slot)
+-- return formatters['\\Umathaccent "%X "%X "%X '](0,family,slot) -- no class
+-- end
+--
+-- local function delimiter(class,family,slot)
+-- return formatters['\\Udelimiter "%X "%X "%X '](class,family,slot)
+-- end
+--
+-- local function radical(family,slot)
+-- return formatters['\\Uradical "%X "%X '](family,slot)
+-- end
+--
+-- local function root(family,slot)
+-- return formatters['\\Uroot "%X "%X '](family,slot)
+-- end
+--
+-- local function mathchardef(name,class,family,slot)
+-- return formatters['\\Umathchardef\\%s "%X "%X "%X '](name,class,family,slot)
+-- end
+--
+-- local function mathcode(target,class,family,slot)
+-- return formatters['\\Umathcode%s="%X "%X "%X '](target,class,family,slot)
+-- end
+--
+-- local function mathtopaccent(class,family,slot)
+-- return formatters['\\Umathaccent "%X "%X "%X '](0,family,slot) -- no class
+-- end
+--
+-- local function mathbotaccent(class,family,slot)
+-- return formatters['\\Umathaccent bottom "%X "%X "%X '](0,family,slot) -- no class
+-- end
+--
+-- local function mathtopdelimiter(class,family,slot)
+-- return formatters['\\Udelimiterover "%X "%X '](family,slot) -- no class
+-- end
+--
+-- local function mathbotdelimiter(class,family,slot)
+-- return formatters['\\Udelimiterunder "%X "%X '](family,slot) -- no class
+-- end
local escapes = characters.filters.utf.private.escapes
@@ -192,11 +191,11 @@ local escapes = characters.filters.utf.private.escapes
local setmathcharacter = function(class,family,slot,unicode,mset,dset)
if mset and codes[class] then -- regular codes < 7
- setmathcode("global",slot,{class,family,unicode})
+ setmathcode("global",slot,class,family,unicode)
mset = false
end
if dset and class == open_class or class == close_class or class == middle_class then
- setdelcode("global",slot,{family,unicode,0,0})
+ setdelcode("global",slot,family,unicode,0,0)
dset = false
end
return mset, dset
@@ -216,28 +215,28 @@ local f_char = formatters[ [[\Umathchardef\%s "%X "%X "%X ]] ]
local setmathsymbol = function(name,class,family,slot) -- hex is nicer for tracing
if class == classes.accent then
- context_sprint(f_accent(name,family,slot))
+ ctx_sprint(f_accent(name,family,slot))
elseif class == classes.topaccent then
- context_sprint(f_topaccent(name,family,slot))
+ ctx_sprint(f_topaccent(name,family,slot))
elseif class == classes.botaccent then
- context_sprint(f_botaccent(name,family,slot))
+ ctx_sprint(f_botaccent(name,family,slot))
elseif class == classes.over then
- context_sprint(f_over(name,family,slot))
+ ctx_sprint(f_over(name,family,slot))
elseif class == classes.under then
- context_sprint(f_under(name,family,slot))
+ ctx_sprint(f_under(name,family,slot))
elseif class == open_class or class == close_class or class == middle_class then
setdelcode("global",slot,{family,slot,0,0})
- context_sprint(f_fence(name,class,family,slot))
+ ctx_sprint(f_fence(name,class,family,slot))
elseif class == classes.delimiter then
setdelcode("global",slot,{family,slot,0,0})
- context_sprint(f_delimiter(name,family,slot))
+ ctx_sprint(f_delimiter(name,family,slot))
elseif class == classes.radical then
- context_sprint(f_radical(name,family,slot))
+ ctx_sprint(f_radical(name,family,slot))
elseif class == classes.root then
- context_sprint(f_root(name,family,slot))
+ ctx_sprint(f_root(name,family,slot))
else
-- beware, open/close and other specials should not end up here
- context_sprint(f_char(name,class,family,slot))
+ ctx_sprint(f_char(name,class,family,slot))
end
end
@@ -366,6 +365,11 @@ local function utfmathclass(chr, default)
return cd and cd.mathclass or default or "unknown"
end
+local function utfmathlimop(chr)
+ local cd = somechar[chr]
+ return cd and cd.mathclass == "limop" or false
+end
+
local function utfmathaccent(chr,default,asked1,asked2)
local cd = somechar[chr]
if not cd then
@@ -514,6 +518,7 @@ implement {
actions = { utfmathcommand, context },
arguments = { "string", false, "'botaccent'","'under'" }
}
+
implement {
name = "utfmathcommandfiller",
actions = { utfmathfiller, context },
@@ -546,6 +551,12 @@ implement {
arguments = "string",
}
+implement {
+ name = "doifelseutfmathlimop",
+ actions = { utfmathlimop, ctx_doifelsesomething },
+ arguments = "string",
+}
+
-- helpers
--
-- 1: step 1
diff --git a/tex/context/base/mkiv/math-ini.mkiv b/tex/context/base/mkiv/math-ini.mkiv
index 2e7831d75..8c682bdcb 100644
--- a/tex/context/base/mkiv/math-ini.mkiv
+++ b/tex/context/base/mkiv/math-ini.mkiv
@@ -19,6 +19,10 @@
% todo: 0x2062 : invisible times
% todo: 0x2063 : invisible comma
+% a bit tricky way to set ... no (pseudo) registers but math hash values:
+%
+% \normalexpanded{\Umathlimitabovevgap\displaystyle=40\dimexpr\the\Umathlimitabovevgap\displaystyle\relax}
+
% Todo in luatex maincontrol.w: also accept a number here:
%
% case set_math_param_cmd:
@@ -73,9 +77,28 @@
\registerctxluafile{math-fbk}{1.001}
\registerctxluafile{math-dir}{1.001}
+%D A starter:
+%D
+%D \startbuffer
+%D \mathsurround 10pt
+%D \mathsurroundskip30pt
+%D x $x + \ruledhbox{$x$} + x$ x
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D \start \blank \getbuffer \blank \stop
+
+\newcount\mathnestinglevel
+
+\appendtoks
+ \advance\mathnestinglevel\plusone
+\to \everymathematics
+
%D A few compatibility helpers:
\def\Umathbotaccent{\Umathaccent \s!bottom }
+\def\Umathtopaccent{\Umathaccent \s!top }
\def\Umathaccents {\Umathaccent \s!both }
\ifdefined\Umathcharclass \else
@@ -84,7 +107,7 @@
\def\Umathcharslot {\cldcontext{tex.getmathcode(token.scan_int())[3]}}
\fi
-%D The attributes that we will use:
+%D The attributes that we will use (todo: pack some into one but uglier code):
\definesystemattribute[mathalphabet] [public]
\definesystemattribute[mathsize] [public]
@@ -95,6 +118,7 @@
\definesystemattribute[mathcategory] [public]
\definesystemattribute[mathmode] [public]
\definesystemattribute[mathitalics] [public]
+\definesystemattribute[mathkernpairs] [public]
\definesystemattribute[mathbidi] [public]
\definesystemattribute[mathdomain] [public]
@@ -106,9 +130,6 @@
\appendtoks
\attribute\mathmodeattribute\plusone
-\to \everybeforedisplayformula
-
-\appendtoksonce
\attribute\displaymathattribute\plusone
\to \everybeforedisplayformula
@@ -139,10 +160,12 @@
\unexpanded\def\startforceddisplaymath
{\startimath
\displaystyle
+ \begingroup
\settrue\indisplaymath}
\unexpanded\def\stopforceddisplaymath
- {\stopimath}
+ {\endgroup
+ \stopimath}
% \unexpanded\def\rawmathcharacter#1% slow but only for tracing
% {\begingroup
@@ -215,7 +238,9 @@
\def\math_m_yes_text[#1]%
{\begingroup
- \edef\currentmathematics{#1}% check for valid
+ \doifassignmentelse{#1}%
+ {\setupcurrentmathematics[#1]}%
+ {\edef\currentmathematics{#1}}% check for valid
\edef\p_openup{\mathematicsparameter\c!openup}%
\ifx\p_openup\v!yes
\expandafter\math_m_yes_text_openedup
@@ -337,13 +362,13 @@
\unexpanded\def\math_set_font_style #1{\ifmmode\clf_setmathstyle{#1}\fi}
\unexpanded\def\math_set_font_alternate#1{\ifmmode\clf_setmathalternate\defaultmathfamily{#1}\fi}
-\installcorenamespace{mathstylealternate} % might become a setuphandler
+\installcorenamespace{mathstylealternative} % might become a setuphandler
\unexpanded\def\math_set_font_style_alternate#1%
- {\ifcsname\??mathstylealternate\fontclass:#1\endcsname
+ {\ifcsname\??mathstylealternative\fontclass:#1\endcsname
%\expandafter\math_set_font_alternate\csname\??mathstylealternate\fontclass:#1\endcsname
\expandafter\math_set_font_alternate\lastnamedcs
- \else\ifcsname\??mathstylealternate#1\endcsname
+ \else\ifcsname\??mathstylealternative#1\endcsname
%\expandafter\math_set_font_alternate\csname\??mathstylealternate#1\endcsname
\expandafter\math_set_font_alternate\lastnamedcs
\fi\fi}
@@ -353,19 +378,30 @@
\def\math_setup_rendering[#1][#2]%
{\ifsecondargument
- \getparameters[\??mathstylealternate#1:][#2]%
+ \getparameters[\??mathstylealternative#1:][#2]%
\else
- \getparameters[\??mathstylealternate][#1]%
+ \getparameters[\??mathstylealternative][#1]%
\fi}
+\appendtoks
+ \edef\p_stylealternative{\mathematicsparameter\c!stylealternative}%
+ \ifx\p_stylealternative\empty\else
+ \clf_presetmathalternate\defaultmathfamily{\p_stylealternative}%
+ \fi
+\to \everymathematics
+
% 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}}
+\unexpanded\def\mathaltcalligraphic{\math_set_font_alternate{calligraphic}\cal} % set via goody file
+\unexpanded\def\mathaltitalic {\math_set_font_alternate{italic}} % set via goody file
+\unexpanded\def\mathslashedzero {\begingroup\math_set_font_alternate{zero}∅\endgroup} % set via goody file or automatic
+\unexpanded\def\mathdotless {\math_set_font_alternate{dotless}} % set via goody file or automatic
+\unexpanded\def\mathdotlessi {\begingroup\mathdotless i\endgroup}
+\unexpanded\def\mathdotlessj {\begingroup\mathdotless j\endgroup}
+
+\let\mathaltcal\mathaltcalligraphic
+\let\mathaltit \mathaltitalic
%let\textslashedzero\slashedzero \unexpanded\def\autoslashedzero{\mathortext\mathslashedzero\textslashedzero}
\let\textdotlessi \dotlessi \unexpanded\def\autodotlessi {\mathortext\mathdotlessi \textdotlessi}
@@ -377,13 +413,15 @@
\let\dotlessj \autodotlessj
\to \everymathematics
-\let\setmathattribute \math_set_attribute
-\let\setmathalphabet \math_set_alphabet
-\let\setmathfontstyle \math_set_font_style
-\let\setmathfontalternate \math_set_font_alternate
-\let\setmathfontstylealternate\math_set_font_style_alternate
+\let\setmathattribute \math_set_attribute
+\let\setmathalphabet \math_set_alphabet
+\let\setmathfontstyle \math_set_font_style
+\let\setmathfontalternate \math_set_font_alternate
+\let\setmathfontalternative \math_set_font_alternate
+\let\setmathfontstylealternate \math_set_font_style_alternate
+\let\setmathfontstylealternative\math_set_font_style_alternate
-\let\mathalternate \math_set_font_alternate
+\let\mathalternate \math_set_font_alternate
\unexpanded\def\mathupright {\math_set_attribute\s!regular\s!tf\math_set_font_style_alternate\s!tf}
\unexpanded\def\mathitalic {\math_set_attribute\s!regular\s!it\math_set_font_style_alternate\s!it}
@@ -445,9 +483,9 @@
\ifdefined\normalbi\else\let\normalbi\bi\fi \unexpanded\def\bi{\ifmmode\mathbi\else\normalbi\fi}
\ifdefined\normalbs\else\let\normalbs\bs\fi \unexpanded\def\bs{\ifmmode\mathbs\else\normalbs\fi}
-\let\normalrm\rm \unexpanded\def\rm{\ifmmode\mathrm\else\normalrm\fi}
-\let\normalss\ss \unexpanded\def\ss{\ifmmode\mathss\else\normalss\fi}
-\let\normaltt\tt \unexpanded\def\tt{\ifmmode\mathtt\else\normaltt\fi}
+\unexpanded\def\rm{\ifmmode\mathrm\else\normalrm\fi}
+\unexpanded\def\ss{\ifmmode\mathss\else\normalss\fi}
+\unexpanded\def\tt{\ifmmode\mathtt\else\normaltt\fi}
\ifdefined\mr \else \let\mr\relax \fi
\ifdefined\mb \else \let\mb\relax \fi
@@ -519,11 +557,13 @@
\unexpanded\def\doifelseutfmathabove #1{\clf_doifelseutfmathabove {#1}}
\unexpanded\def\doifelseutfmathbelow #1{\clf_doifelseutfmathbelow {#1}}
\unexpanded\def\doifelseutfmathfiller#1{\clf_doifelseutfmathfiller{#1}}
+\unexpanded\def\doifelseutfmathlimop #1{\clf_doifelseutfmathlimop {#1}}
\let\doifutfmathaccentelse \doifelseutfmathaccent
\let\doifutfmathaboveelse \doifelseutfmathabove
\let\doifutfmathbelowelse \doifelseutfmathbelow
\let\doifutfmathfillerelse \doifelseutfmathfiller
+\let\doifutfmathlimopelse \doifelseutfmathlimop
%D Not used that much:
@@ -1322,6 +1362,31 @@
% \csname\??mathitalics\mathematicsparameter\s!italics\endcsname
% \to \everyswitchmathematics % only in mathematics
+%D Math kerns (experiment)
+
+\installcorenamespace{mathkernpairs}
+
+\setnewconstant\c_math_kernpairs_attribute\attributeunsetvalue % no real need for an extra constant
+
+\def\math_kernpairs_initialize
+ {\ifnum\c_math_kernpairs_attribute=\attributeunsetvalue \else
+ \clf_initializemathkernpairs % one time
+ \global\let\math_kernpairs_initialize\relax
+ \fi}
+
+\appendtoks
+ \edef\p_kernpairs{\mathematicsparameter\s!kernpairs}%
+ \c_math_kernpairs_attribute\ifx\p_kernpairs\v!yes\plusone\else\attributeunsetvalue\fi\relax
+\to \everyswitchmathematics % only in mathematics
+
+\appendtoks
+ \math_kernpairs_initialize
+ \attribute\mathkernpairsattribute\c_math_kernpairs_attribute
+\to \everymathematics
+
+\setupmathematics
+ [\s!kernpairs=\v!no]
+
%D \macros
%D {enablemathpunctuation,disablemathpunctuation}
%D
@@ -2084,16 +2149,53 @@
% if needed we can get rid of the normalize (predo in font code)
-\def\math_text_choice_font#1%
+% \def\math_text_choice_font#1#2#%
+% {\normalizebodyfontsize\m_math_text_choice_face{\mathstyleface\normalmathstyle}%
+% \hbox#2\bgroup
+% \font_basics_switchtobodyfont\m_math_text_choice_face
+% #1%
+% \let\next}
+
+% \def\math_text_choice_word#1#2#%
+% {\normalizebodyfontsize\m_math_text_choice_face{\mathstyleface\normalmathstyle}%
+% \hbox#2\bgroup
+% \font_basics_switchtobodyfont\m_math_text_choice_face
+% #1%
+% \nospacing % \normalnospaces\plusone
+% \let\next}
+
+%D We accept a low level box specification so that one can make helpers:
+%D
+%D \startbuffer
+%D \startformula
+%D \startalign[m=2,align={middle}]
+%D \NC \text to 6cm{One\hfill} \NC a = 1 \NR
+%D \NC \text to 6cm{One Two\hfill} \NC b = 2 \NR
+%D \NC \text to 6cm{One Two Three\hfill} \NC c = 3 \NR
+%D \stopalign
+%D \stopformula
+%D \stopbuffer
+%D
+%D \typebuffer \getbuffer
+
+\def\math_text_choice_font#1#2#%
{\normalizebodyfontsize\m_math_text_choice_face{\mathstyleface\normalmathstyle}%
- \hbox\bgroup
+ \hbox#2\bgroup
+ \bgroup
+ \aftergroup\hss
+ \aftergroup\egroup
+ \hss
\font_basics_switchtobodyfont\m_math_text_choice_face
#1%
\let\next}
-\def\math_text_choice_word#1%
+\def\math_text_choice_word#1#2#%
{\normalizebodyfontsize\m_math_text_choice_face{\mathstyleface\normalmathstyle}%
- \hbox\bgroup
+ \hbox#2\bgroup
+ \bgroup
+ \aftergroup\hss
+ \aftergroup\egroup
+ \hss
\font_basics_switchtobodyfont\m_math_text_choice_face
#1%
\nospacing % \normalnospaces\plusone
@@ -2155,9 +2257,7 @@
\newtoks\mathdisplayaligntweaks
-\appendtoks
- \resetdisplaymatheq % moved to here
-\to \mathdisplayaligntweaks
+% this can become an option:
\unexpanded\def\math_display_align_hack % I don't like the global, maybe we should push and pop
{\global\let\math_display_align_hack_indeed\math_display_align_hack_remove_skip
@@ -2418,6 +2518,21 @@
\setupmathematics
[\s!italics=3] % for the moment only this one makes sense .. still experimental
+%D For special purposed we set this one:
+
+\installcorenamespace{mathrules}
+
+\unexpanded\def\enablemathrules{\global\letvalue{\??mathrules\fontclass}\plusone}
+
+\appendtoks
+ \mathrulesmode\ifcsname\??mathrules\fontclass\endcsname
+ \lastnamedcs
+ \else
+ \zerocount
+ \fi
+ \mathrulesfam\zerocount
+\to \everymathematics
+
\protect \endinput
% % not used (yet)
diff --git a/tex/context/base/mkiv/math-map.lua b/tex/context/base/mkiv/math-map.lua
index 94dde4110..cf9353e95 100644
--- a/tex/context/base/mkiv/math-map.lua
+++ b/tex/context/base/mkiv/math-map.lua
@@ -34,12 +34,12 @@ if not modules then modules = { } end modules ['math-map'] = {
local type, next = type, next
local floor, div = math.floor, math.div
-local merged = table.merged
+local merged, sortedhash = table.merged, table.sortedhash
local extract = bit32.extract
local allocate = utilities.storage.allocate
-local otffeatures = fonts.constructors.newfeatures("otf")
+local otffeatures = fonts.constructors.features.otf
local registerotffeature = otffeatures.register
local setmetatableindex = table.setmetatableindex
@@ -164,6 +164,10 @@ local function toupper (n) local t = { } for i=0,25 do t[0x00041+i] = n+i end re
local function tolower (n) local t = { } for i=0,25 do t[0x00061+i] = n+i end return t end
local function tovector(t) return t end
+-- how about 0x2A (ast) cq. 0x2217
+-- 0x2D (hyphen) cq. 0x2212
+-- 0x3A (colon) cq. 0x2236
+
local regular_tf = {
digits = todigit(0x00030),
ucletters = toupper(0x00041),
@@ -553,10 +557,10 @@ mathematics.mapremap = mathremap
local boldmap = allocate { }
mathematics.boldmap = boldmap
--- all math (a bit of redundancy here)
+-- all math (a bit of redundancy here) (sorted for tracing)
-for alphabet, styles in next, alphabets do -- per 9/6/2011 we also have attr for missing
- for style, data in next, styles do
+for alphabet, styles in sortedhash(alphabets) do -- per 9/6/2011 we also have attr for missing
+ for style, data in sortedhash(styles) do
-- let's keep the long names (for tracing)
local n = #mathremap + 1
local d = {
diff --git a/tex/context/base/mkiv/math-noa.lua b/tex/context/base/mkiv/math-noa.lua
index 95b5a8ac9..f9e8c9f70 100644
--- a/tex/context/base/mkiv/math-noa.lua
+++ b/tex/context/base/mkiv/math-noa.lua
@@ -23,11 +23,13 @@ if not modules then modules = { } end modules ['math-noa'] = {
-- nota bene: uunderdelimiter uoverdelimiter etc are radicals (we have 5 types)
+local next, tonumber = next, tonumber
local utfchar, utfbyte = utf.char, utf.byte
-local formatters = string.formatters
+local formatters, gmatch = string.formatters, string.gmatch
local sortedhash = table.sortedhash
local insert, remove = table.insert, table.remove
local div = math.div
+local setbit, hasbit = number.setbit, number.hasbit
local fonts = fonts
local nodes = nodes
@@ -36,13 +38,14 @@ local mathematics = mathematics
local context = context
local otf = fonts.handlers.otf
-local otffeatures = fonts.constructors.newfeatures("otf")
+local otffeatures = fonts.constructors.features.otf
local registerotffeature = otffeatures.register
local privateattribute = attributes.private
local registertracker = trackers.register
local registerdirective = directives.register
local logreporter = logs.reporter
+local setmetatableindex = table.setmetatableindex
local 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)
@@ -54,6 +57,7 @@ local trace_goodies = false registertracker("math.goodies", function
local trace_variants = false registertracker("math.variants", function(v) trace_variants = v end)
local trace_alternates = false registertracker("math.alternates", function(v) trace_alternates = v end)
local trace_italics = false registertracker("math.italics", function(v) trace_italics = v end)
+local trace_kernpairs = false registertracker("math.kernpairs", function(v) trace_kernpairs = v end)
local trace_domains = false registertracker("math.domains", function(v) trace_domains = v end)
local trace_families = false registertracker("math.families", function(v) trace_families = v end)
local trace_fences = false registertracker("math.fences", function(v) trace_fences = v end)
@@ -69,6 +73,7 @@ local report_goodies = logreporter("mathematics","goodies")
local report_variants = logreporter("mathematics","variants")
local report_alternates = logreporter("mathematics","alternates")
local report_italics = logreporter("mathematics","italics")
+local report_kernpairs = logreporter("mathematics","kernpairs")
local report_domains = logreporter("mathematics","domains")
local report_families = logreporter("mathematics","families")
local report_fences = logreporter("mathematics","fences")
@@ -84,6 +89,7 @@ local nutstring = nuts.tostring
local setfield = nuts.setfield
local setlink = nuts.setlink
+local setlist = nuts.setlist
local setnext = nuts.setnext
local setprev = nuts.setprev
local setchar = nuts.setchar
@@ -99,8 +105,17 @@ local getsubtype = nuts.getsubtype
local getchar = nuts.getchar
local getfont = nuts.getfont
local getattr = nuts.getattr
+local getlist = nuts.getlist
-local free_node = nuts.free
+local getnucleus = nuts.getnucleus
+local getsub = nuts.getsub
+local getsup = nuts.getsup
+
+local setnucleus = nuts.setnucleus
+local setsub = nuts.setsub
+local setsup = nuts.setsup
+
+local flush_node = nuts.flush
local new_node = nuts.new -- todo: pool: math_noad math_sub
local copy_node = nuts.copy
local slide_nodes = nuts.slide
@@ -111,15 +126,11 @@ 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
@@ -141,6 +152,8 @@ noads.handlers = noads.handlers or { }
local handlers = noads.handlers
local tasks = nodes.tasks
+local enableaction = tasks.enableaction
+local setaction = tasks.setaction
local nodecodes = nodes.nodecodes
local noadcodes = nodes.noadcodes
@@ -166,7 +179,7 @@ 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
+----- math_style = nodecodes.style -- attr style
local math_choice = nodecodes.choice -- attr display text script scriptscript
local math_fence = nodecodes.fence -- attr subtype
@@ -174,9 +187,19 @@ local left_fence_code = fencecodes.left
local middle_fence_code = fencecodes.middle
local right_fence_code = fencecodes.right
+-- local mathclasses = mathematics.classes
+-- local fenceclasses = {
+-- [left_fence_code] = mathclasses.open,
+-- [middle_fence_code] = mathclasses.middle,
+-- [right_fence_code] = mathclasses.close,
+-- }
+
-- this initial stuff is tricky as we can have removed and new nodes with the same address
-- the only way out is a free-per-page list of nodes (not bad anyway)
+-- local gf = getfield local gt = setmetatableindex("number") getfield = function(n,f) gt[f] = gt[f] + 1 return gf(n,f) end mathematics.GETFIELD = gt
+-- local sf = setfield local st = setmetatableindex("number") setfield = function(n,f,v) st[f] = st[f] + 1 sf(n,f,v) end mathematics.SETFIELD = st
+
local function process(start,what,n,parent)
if n then
n = n + 1
@@ -225,13 +248,13 @@ local function process(start,what,n,parent)
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
+ local noad = getnucleus(start) if noad then process(noad,what,n,start) end -- list
+ noad = getsup (start) if noad then process(noad,what,n,start) end -- list
+ noad = getsub (start) if noad then process(noad,what,n,start) end -- list
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 !)
+ local noad = getlist(start) 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
@@ -245,15 +268,15 @@ local function process(start,what,n,parent)
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
+ local noad = getnucleus(start) if noad then process(noad,what,n,start) end -- list
+ noad = getsup (start) if noad then process(noad,what,n,start) end -- list
+ noad = getsub (start) if noad then process(noad,what,n,start) end -- list
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
+ local noad = getnucleus(start) if noad then process(noad,what,n,start) end -- list
+ noad = getsup (start) if noad then process(noad,what,n,start) end -- list
+ noad = getsub (start) if noad then process(noad,what,n,start) end -- list
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
@@ -272,11 +295,11 @@ 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
+ noad = getnucleus(current) if noad then process(noad,what,n,current) end -- list
+ noad = getsup (current) if noad then process(noad,what,n,current) end -- list
+ noad = getsub (current) if noad then process(noad,what,n,current) end -- list
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 !)
+ noad = getlist(current) 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
@@ -290,15 +313,15 @@ local function processnested(current,what,n)
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 = getnucleus(current) if noad then process(noad,what,n,current) end -- list
+ noad = getsup (current) if noad then process(noad,what,n,current) end -- list
+ noad = getsub (current) if noad then process(noad,what,n,current) end -- list
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 = getnucleus(current) if noad then process(noad,what,n,current) end -- list
+ noad = getsup (current) if noad then process(noad,what,n,current) end -- list
+ noad = getsub (current) if noad then process(noad,what,n,current) end -- list
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
@@ -308,11 +331,11 @@ 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
+ noad = getnucleus(current) if noad then process(noad,n,current) end -- list
+ noad = getsup (current) if noad then process(noad,n,current) end -- list
+ noad = getsub (current) if noad then process(noad,n,current) end -- list
elseif id == math_box or id == math_sub then
- noad = getfield(current,"list") if noad then process(noad,n,current) end -- list (not getlist !)
+ noad = getlist(current) 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
@@ -326,15 +349,15 @@ local function processstep(current,process,n,id)
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 = getnucleus(current) if noad then process(noad,n,current) end -- list
+ noad = getsup (current) if noad then process(noad,n,current) end -- list
+ noad = getsub (current) if noad then process(noad,n,current) end -- list
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 = getnucleus(current) if noad then process(noad,n,current) end -- list
+ noad = getsup (current) if noad then process(noad,n,current) end -- list
+ noad = getsub (current) if noad then process(noad,n,current) end -- list
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
@@ -356,13 +379,12 @@ 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 cached = setmetatableindex("table") -- complex case
local function errorchar(font,char)
local done = unknowns[char]
@@ -519,7 +541,8 @@ do
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)
+ report_remapping("remapping %s in font (%s,%s) from %C to %C%s",
+ tag,id,fontdata[id].properties.fontname or "",old,new,extra)
end
local remapalphabets = mathematics.remapalphabets
@@ -562,9 +585,10 @@ do
end
local newchar = remapalphabets(char,a,g)
if newchar then
- if characters[newchar] then
+ local newchardata = characters[newchar]
+ if newchardata then
if trace_remapping then
- report_remap("char",font,char,newchar)
+ report_remap("char",font,char,newchar,newchardata.commands and " (virtual)" or "")
end
if trace_analyzing then
setnodecolor(pointer,"font:isol")
@@ -595,6 +619,11 @@ do
report_remap("char",font,char,newchar," fails (no fallback style)")
end
end
+ elseif trace_remapping then
+ local chardata = characters[char]
+ if chardata and chardata.commands then
+ report_remap("char",font,char,char," (virtual)")
+ end
end
end
if not characters[char] then
@@ -696,6 +725,8 @@ function handlers.resize(head,style,penalties)
return true
end
+-- still not perfect:
+
local a_autofence = privateattribute("mathautofence")
local autofences = { }
processors.autofences = autofences
@@ -705,26 +736,27 @@ 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 sym = getnucleus(char)
+ local chr = getchar(sym)
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)
+ flush_node(sym)
end
setsubtype(f,what)
setfield(f,"delim",d)
+ setfield(f,"class",-1) -- tex itself does this, so not fenceclasses[what]
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)
+ setlist(list,f_o)
setsubtype(noad,noad_inner)
- setfield(noad,"nucleus",list)
+ setnucleus(noad,list)
setlink(f_o,o_next)
setlink(c_prev,f_c)
if middle and next(middle) then
@@ -735,12 +767,11 @@ local function makelist(noad,f_o,o_next,c_prev,f_c,middle)
if m then
local next = getnext(current)
local fence = makefence(middle_fence_code,current)
- setfield(current,"nucleus",nil)
- free_node(current)
+ setnucleus(current)
+ flush_node(current)
middle[current] = nil
-- replace_node
- setlink(prev,fence)
- setlink(fence,next)
+ setlink(prev,fence,next)
prev = fence
current = next
else
@@ -760,8 +791,8 @@ local function convert_both(open,close,middle)
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)
+ setnucleus(close)
+ flush_node(close)
if c_next then
setprev(c_next,open)
end
@@ -791,7 +822,7 @@ local function convert_close(close,first,middle)
return close
end
-local stacks = table.setmetatableindex("table")
+local stacks = setmetatableindex("table")
local function processfences(pointer,n,parent)
local current = pointer
@@ -817,20 +848,23 @@ local function processfences(pointer,n,parent)
local open = remove(stack)
if open then
if trace_fences then
- report_fences("%2i: handling %s, stack depth %i",n,"both",#stack)
+ report_fences("%2i: handling %s, stack depth %i",n,"both",#stack+1)
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)
+ report_fences("%2i: handling %s, stack depth %i",n,"close",#stack+1)
end
current = convert_close(current,initial,middle)
if not parent then
initial = current
end
end
+ if trace_fences then
+ report_fences("%2i: popping close from stack",n)
+ end
elseif a == 3 then
if trace_fences then
report_fences("%2i: registering middle",n)
@@ -879,7 +913,7 @@ implement {
name = "enableautofences",
onlyonce = true,
actions = function()
- tasks.enableaction("math","noads.handlers.autofences")
+ enableaction("math","noads.handlers.autofences")
enabled = true
end
}
@@ -906,8 +940,8 @@ local function replace(pointer,what,n,parent)
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 nextnucleus = getnucleus(next)
+ if nextnucleus and getid(nextnucleus) == math_char and not getsub(next) and not getsup(next) then
local char = getchar(nextnucleus)
local s = superscripts[char]
if s then
@@ -950,11 +984,11 @@ local function replace(pointer,what,n,parent)
end
if start_super then
if start_super == stop_super then
- setfield(pointer,"sup",getfield(start_super,"nucleus"))
+ setsup(pointer,getnucleus(start_super))
else
local list = new_node(math_sub) -- todo attr
- setfield(list,"list",start_super)
- setfield(pointer,"sup",list)
+ setlist(list,start_super)
+ setsup(pointer,list)
end
if mode == "super" then
setnext(pointer,getnext(stop_super))
@@ -963,11 +997,11 @@ local function replace(pointer,what,n,parent)
end
if start_sub then
if start_sub == stop_sub then
- setfield(pointer,"sub",getfield(start_sub,"nucleus"))
+ setsub(pointer,getnucleus(start_sub))
else
local list = new_node(math_sub) -- todo attr
- setfield(list,"list",start_sub)
- setfield(pointer,"sub",list)
+ setlist(list,start_sub)
+ setsub(pointer,list)
end
if mode == "sub" then
setnext(pointer,getnext(stop_sub))
@@ -1004,126 +1038,210 @@ 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$)
+-- math alternates: (in xits lgf: $ABC$ $\cal ABC$ $\mathalternate{cal}\cal ABC$)
+-- math alternates: (in lucidaot lgf: $ABC \mathalternate{italic} ABC$)
-- todo: set alternate for specific symbols
-- todo: no need to do this when already loaded
+-- todo: use a fonts.hashes.mathalternates
-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)
-}
+do
-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
+ local last = 0
- 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)
+ local known = setmetatableindex(function(t,k)
+ local v = setbit(0,2^last)
+ t[k] = v
+ last = last + 1
+ return v
+ end)
+
+ local defaults = {
+ dotless = { feature = 'dtls', value = 1, comment = "Mathematical Dotless Forms" },
+ -- zero = { feature = 'zero', value = 1, comment = "Slashed or Dotted Zero" }, -- in no math font (yet)
+ }
+
+ local function initializemathalternates(tfmdata)
+ local goodies = tfmdata.goodies
+ local autolist = defaults -- table.copy(defaults)
+
+ local function setthem(newalternates)
+ local resources = tfmdata.resources -- was tfmdata.shared
+ local mathalternates = resources.mathalternates
+ local alternates, attributes, registered, presets
+ if mathalternates then
+ alternates = mathalternates.alternates
+ attributes = mathalternates.attributes
+ registered = mathalternates.registered
+ else
+ alternates, attributes, registered = { }, { }, { }
+ mathalternates = {
+ attributes = attributes,
+ alternates = alternates,
+ registered = registered,
+ presets = { },
+hashes = setmetatableindex("table")
+ }
+ resources.mathalternates = mathalternates
+ end
+ --
+ for name, data in sortedhash(newalternates) do
+ if alternates[name] then
+ -- ignore
+ else
+ local attr = known[name]
+ attributes[attr] = data
+ alternates[name] = attr
+ registered[#registered+1] = attr
end
- for k, v in next, autolist do
- if not alternates[k] then
- alternates[k] = v
+ end
+ end
+
+ if goodies then
+ local done = { }
+ for i=1,#goodies do
+ -- first one counts
+ -- we can consider sharing the attributes ... todo (only once scan)
+ local mathgoodies = goodies[i].mathematics
+ local alternates = mathgoodies and mathgoodies.alternates
+ if alternates then
+ if trace_goodies then
+ report_goodies("loading alternates for font %a",tfmdata.properties.name)
end
+ for k, v in next, autolist do
+ if not alternates[k] then
+ alternates[k] = v
+ end
+ end
+ setthem(alternates)
+ return
end
- setthem(alternates)
- return
end
end
- end
- if trace_goodies then
- report_goodies("loading default alternates for font %a",tfmdata.properties.name)
- end
- setthem(autolist)
+ if trace_goodies then
+ report_goodies("loading default alternates for font %a",tfmdata.properties.name)
+ end
+ setthem(autolist)
-end
+ end
-registerotffeature {
- name = "mathalternates",
- description = "additional math alternative shapes",
- initializers = {
- base = initializemathalternates,
- node = initializemathalternates,
+ registerotffeature {
+ name = "mathalternates",
+ description = "additional math alternative shapes",
+ initializers = {
+ base = initializemathalternates,
+ node = initializemathalternates,
+ }
}
-}
--- local getalternate = otf.getalternate (runtime new method so ...)
+ -- local getalternate = otf.getalternate (runtime new method so ...)
+
+ -- todo: not shared but copies ... one never knows
--- todo: not shared but copies ... one never knows
+ local a_mathalternate = privateattribute("mathalternate")
+ local alternate = { } -- processors.alternate = alternate
+ local fontdata = fonts.hashes.identifiers
+ local fontresources = fonts.hashes.resources
+
+ local function getalternate(fam,tag)
+ local resources = fontresources[font_of_family(fam)]
+ local attribute = unsetvalue
+ if resources then
+ local mathalternates = resources.mathalternates
+ if mathalternates then
+ local presets = mathalternates.presets
+ if presets then
+ attribute = presets[tag]
+ if not attribute then
+ attribute = 0
+ local alternates = mathalternates.alternates
+ for s in gmatch(tag,"[^, ]+") do
+ local a = alternates[s] -- or known[s]
+ if a then
+ attribute = attribute + a
+ end
+ end
+ if attribute == 0 then
+ attribute = unsetvalue
+ end
+ presets[tag] = attribute
+ end
+ end
+ end
+ end
+ return attribute
+ end
-local a_mathalternate = privateattribute("mathalternate")
+ local function presetalternate(fam,tag)
+ texsetattribute(a_mathalternate,getalternate(fam,tag))
+ end
-local alternate = { } -- processors.alternate = alternate
+ implement {
+ name = "presetmathalternate",
+ actions = presetalternate,
+ arguments = { "integer", "string" }
+ }
-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)
+ local function setalternate(fam,tag)
+ local a = texgetattribute(a_mathalternate)
+ local v = getalternate(fam,tag)
+ if a and a > 0 then
+ v = a + v
end
+ texsetattribute(a_mathalternate,v)
end
-end
-implement {
- name = "setmathalternate",
- actions = mathematics.setalternate,
- arguments = { "integer", "string" }
-}
+ implement {
+ name = "setmathalternate",
+ actions = 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)
+ alternate[math_char] = function(pointer) -- slow
+ local a = getattr(pointer,a_mathalternate)
+ if a and a > 0 then
+ setattr(pointer,a_mathalternate,0)
+ local fontid = getfont(pointer)
+ local resources = fontresources[fontid]
+ if resources then
+ local mathalternates = resources.mathalternates
+ if mathalternates then
+ local attributes = mathalternates.attributes
+ local registered = mathalternates.registered
+ local hashes = mathalternates.hashes
+ for i=1,#registered do
+ local r = registered[i]
+ if hasbit(a,r) then
+ local char = getchar(pointer)
+ local alt = hashes[i][char]
+ if alt == nil then
+ local what = attributes[r]
+ alt = otf.getalternate(fontdata[fontid],char,what.feature,what.value) or false
+ if alt == char then
+ alt = false
+ elseif 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
+ hashes[i][char] = alt
+ end
+ if alt then
+ setchar(pointer,alt)
+ break
+ end
+ end
end
- setchar(pointer,alt)
end
end
end
end
-end
-function handlers.alternates(head,style,penalties)
- processnoads(head,alternate,"alternate")
- return true
+ function handlers.alternates(head,style,penalties)
+ processnoads(head,alternate,"alternate")
+ return true
+ end
+
end
-- italics: we assume that only characters matter
@@ -1137,9 +1255,9 @@ end
-- 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
+-- 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")
@@ -1155,9 +1273,9 @@ 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)
+ setlist(sub,kern)
setnext(kern,noad)
- setfield(noad,"nucleus",current)
+ setnucleus(noad,current)
return sub
end
@@ -1234,7 +1352,8 @@ italics[math_char] = function(pointer,what,n,parent)
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 n == 1 then
+ -- only at the outer level .. will become an option (always,endonly,none)
if trace_italics then
report_italics("method %a, flagging italic correction %p between %C and end math",method,correction,char)
end
@@ -1259,7 +1378,7 @@ end
local enable
enable = function()
- tasks.enableaction("math", "noads.handlers.italics")
+ enableaction("math", "noads.handlers.italics")
if trace_italics then
report_italics("enabling math italics")
end
@@ -1311,6 +1430,80 @@ implement {
actions = mathematics.resetitalics
}
+do
+
+ -- math kerns (experiment) in goodies:
+ --
+ -- mathematics = {
+ -- kernpairs = {
+ -- [0x1D44E] = {
+ -- [0x1D44F] = 400, -- 𝑎𝑏
+ -- }
+ -- },
+ -- }
+
+ local a_kernpairs = privateattribute("mathkernpairs")
+ local kernpairs = { }
+
+ local function enable()
+ enableaction("math", "noads.handlers.kernpairs")
+ if trace_kernpairs then
+ report_kernpairs("enabling math kern pairs")
+ end
+ enable = false
+ end
+
+ implement {
+ name = "initializemathkernpairs",
+ actions = enable,
+ onlyonce = true,
+ }
+
+ local hash = setmetatableindex(function(t,font)
+ local g = fontdata[font].goodies
+ local m = g and g[1].mathematics
+ local k = m and m.kernpairs
+ t[font] = k
+ return k
+ end)
+
+ kernpairs[math_char] = function(pointer,what,n,parent)
+ if getattr(pointer,a_kernpairs) == 1 then
+ local font = getfont(pointer)
+ local list = hash[font]
+ if list then
+ local first = getchar(pointer)
+ local found = list[first]
+ if found then
+ local next = getnext(parent)
+ if next and getid(next) == math_noad then
+ pointer = getnucleus(next)
+ if pointer then
+ if getfont(pointer) == font then
+ local second = getchar(pointer)
+ local kern = found[second]
+ if kern then
+ kern = kern * fonts.hashes.parameters[font].hfactor
+ if trace_kernpairs then
+ report_kernpairs("adding %p kerning between %C and %C",kern,first,second)
+ end
+ setlink(parent,new_kern(kern),getnext(parent))
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+
+ function handlers.kernpairs(head,style,penalties)
+ processnoads(head,kernpairs,"kernpairs")
+ return true
+ end
+
+end
+
-- primes and such
local collapse = { } processors.collapse = collapse
@@ -1355,30 +1548,30 @@ local validpair = {
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
+ if not getsup(prev) and not getsub(prev) 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 nucleus = getnucleus(parent)
+ local sub = getsub(parent)
+ local sup = getsup(parent)
+ setsup(prev,nucleus)
+ setsub(prev,sub)
local dummy = copy_node(nucleus)
setchar(dummy,0)
- setfield(parent,"nucleus",dummy)
- setfield(parent,"sub",nil)
+ setnucleus(parent,dummy)
+ setsub(parent)
if trace_collapsing then
report_collapsing("fixing subscript")
end
- elseif not getfield(prev,"sup") then
+ elseif not getsup(prev) 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 nucleus = getnucleus(parent)
+ local sup = getsup(parent)
+ setsup(prev,nucleus)
local dummy = copy_node(nucleus)
setchar(dummy,0)
- setfield(parent,"nucleus",dummy)
+ setnucleus(parent,dummy)
if trace_collapsing then
report_collapsing("fixing subscript")
end
@@ -1389,16 +1582,16 @@ 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")
+ local current_nucleus = getnucleus(parent)
if getid(current_nucleus) == math_char then
local current_char = getchar(current_nucleus)
- if not getfield(parent,"sub") and not getfield(parent,"sup") then
+ if not getsub(parent) and not getsup(parent) 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_nucleus = getnucleus(next_noad)
local next_char = getchar(next_nucleus)
if getid(next_nucleus) == math_char then
local newchar = mathpair[next_char]
@@ -1416,11 +1609,11 @@ local function collapsepair(pointer,what,n,parent,nested) -- todo: switch to tur
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)
+ setsup(parent,getsup(next_noad))
+ setsub(parent,getsub(next_noad))
+ setsup(next_noad)
+ setsub(next_noad)
+ flush_node(next_noad)
collapsepair(pointer,what,n,parent,true)
-- if not nested and movesub[current_char] then
-- movesubscript(parent,current_nucleus,current_char)
@@ -1478,7 +1671,7 @@ variants[math_char] = function(pointer,what,n,parent) -- also set export value
if selector then
local next = getnext(parent)
if next and getid(next) == math_noad then
- local nucleus = getfield(next,"nucleus")
+ local nucleus = getnucleus(next)
if nucleus and getid(nucleus) == math_char and getchar(nucleus) == selector then
local variant
local tfmdata = fontdata[getfont(pointer)]
@@ -1502,7 +1695,7 @@ variants[math_char] = function(pointer,what,n,parent) -- also set export value
end
setprev(next,pointer)
setnext(parent,getnext(next))
- free_node(next)
+ flush_node(next)
end
end
end
@@ -1547,7 +1740,9 @@ function handlers.classes(head,style,penalties)
return true
end
-registertracker("math.classes",function(v) tasks.setaction("math","noads.handlers.classes",v) end)
+registertracker("math.classes",function(v)
+ setaction("math","noads.handlers.classes",v)
+end)
-- experimental
@@ -1564,7 +1759,6 @@ do
local domains = { }
local categories = { }
local numbers = { }
- local mclasses = mathematics.classes
local a_mathdomain = privateattribute("mathdomain")
mathematics.domains = categories
@@ -1593,7 +1787,7 @@ do
local enable
enable = function()
- tasks.enableaction("math", "noads.handlers.domains")
+ enableaction("math", "noads.handlers.domains")
if trace_domains then
report_domains("enabling math domains")
end
@@ -1709,14 +1903,29 @@ do
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)
+registertracker("math.showtree",function(v)
+ setaction("math","noads.handlers.showtree",v)
+end)
+
+-- also for me
+
+local applyvisuals = nuts.applyvisuals
+local visual = false
+
+function handlers.makeup(head)
+ applyvisuals(tonut(head),visual)
+end
+
+registertracker("math.makeup",function(v)
+ visual = v
+ setaction("math","noads.handlers.makeup",v)
+end)
-- the normal builder
diff --git a/tex/context/base/mkiv/math-pln.mkiv b/tex/context/base/mkiv/math-pln.mkiv
index a5ecdd11d..754cb6141 100644
--- a/tex/context/base/mkiv/math-pln.mkiv
+++ b/tex/context/base/mkiv/math-pln.mkiv
@@ -29,7 +29,7 @@
% will move
\def\oalign#1%
- {\leavevmode
+ {\leavevmode % plain tex uses this
\vtop
{\baselineskip\zeroskip
\lineskip.25\exheight
diff --git a/tex/context/base/mkiv/math-rad.mkvi b/tex/context/base/mkiv/math-rad.mkvi
index 113d4af50..699a1a125 100644
--- a/tex/context/base/mkiv/math-rad.mkvi
+++ b/tex/context/base/mkiv/math-rad.mkvi
@@ -208,7 +208,7 @@
%D Because I wanted to illustrate some more fun stuff another mechanism
%D is provided as well ... let's put some dangerous tools in the hand of
-%D math juglers like Aditya.
+%D math jugglers like Aditya.
\installcorenamespace{mathornament}
\installcorenamespace{mathornamentalternative}
diff --git a/tex/context/base/mkiv/math-stc.mkvi b/tex/context/base/mkiv/math-stc.mkvi
index 96e1738db..208e756f6 100644
--- a/tex/context/base/mkiv/math-stc.mkvi
+++ b/tex/context/base/mkiv/math-stc.mkvi
@@ -471,10 +471,14 @@
{\math_stackers_triplet\zerocount\currentmathstackers\scratchcounter{#toptext}{#bottomtext}%
\endgroup}
-%D A few direct accessors:
+%D A few direct accessors (in the meantime we redefined \mathextensible so we renamed the
+%D following):
-\unexpanded\def\mathextensible{\begingroup\dosingleempty\math_stackers_handle_math}
-\unexpanded\def\textextensible{\begingroup\dosingleempty\math_stackers_handle_text}
+\unexpanded\def\directmathextensible{\begingroup\dosingleempty\math_stackers_handle_math}
+\unexpanded\def\directtextextensible{\begingroup\dosingleempty\math_stackers_handle_text}
+
+\let\mathstacker\directmathextensible
+\let\textstacker\directtextextensible
\unexpanded\def\math_stackers_handle_math[#category]%
{\math_stackers_handle_extensible{\iffirstargument#category\else\v!mathematics\fi}} % will be defined later on
diff --git a/tex/context/base/mkiv/math-tag.lua b/tex/context/base/mkiv/math-tag.lua
index e83b401fb..13c8fffc7 100644
--- a/tex/context/base/mkiv/math-tag.lua
+++ b/tex/context/base/mkiv/math-tag.lua
@@ -30,6 +30,8 @@ local getdisc = nuts.getdisc
local getsubtype = nuts.getsubtype
local getattr = nuts.getattr
local setattr = nuts.setattr
+local getcomponents = nuts.getcomponents
+local getwidth = nuts.getwidth
local set_attributes = nuts.setattributes
local traverse_nodes = nuts.traverse
@@ -70,8 +72,6 @@ local math_code = nodecodes.math
local processnoads = noads.process
local a_tagged = attributes.private('tagged')
-local a_taggedpar = attributes.private('taggedpar')
-local a_exportstatus = attributes.private('exportstatus')
local a_mathcategory = attributes.private('mathcategory')
local a_mathmode = attributes.private('mathmode')
local a_fontkern = attributes.private('fontkern')
@@ -252,7 +252,7 @@ process = function(start) -- we cannot use the processor as we have no finalizer
if tag == "formulacaption" then
-- skip
elseif tag == "mstacker" then
- local list = getfield(start,"list")
+ local list = getlist(start)
if list then
process(list)
end
@@ -262,7 +262,7 @@ process = function(start) -- we cannot use the processor as we have no finalizer
end
local text = start_tagged(tag)
setattr(start,a_tagged,text)
- local list = getfield(start,"list")
+ local list = getlist(start)
if not list then
-- empty list
elseif not attr then
@@ -317,7 +317,7 @@ process = function(start) -- we cannot use the processor as we have no finalizer
if id == hlist_code or id == vlist_code then
runner(getlist(n),depth+1)
elseif id == glyph_code then
- runner(getfield(n,"components"),depth+1) -- this should not be needed
+ runner(getcomponents(n),depth+1) -- this should not be needed
elseif id == disc_code then
local pre, post, replace = getdisc(n)
runner(pre,depth+1) -- idem
@@ -337,7 +337,7 @@ process = function(start) -- we cannot use the processor as we have no finalizer
stop_tagged()
end
elseif id == math_sub_code then -- normally a hbox
- local list = getfield(start,"list")
+ local list = getlist(start)
if list then
local attr = getattr(start,a_tagged)
local last = attr and taglist[attr]
@@ -528,7 +528,7 @@ process = function(start) -- we cannot use the processor as we have no finalizer
processsubsup(start)
end
elseif id == glue_code then
- -- setattr(start,a_tagged,start_tagged("mspace",{ width = getfield(start,"width") }))
+ -- setattr(start,a_tagged,start_tagged("mspace",{ width = getwidth(start) }))
setattr(start,a_tagged,start_tagged("mspace"))
stop_tagged()
else
diff --git a/tex/context/base/mkiv/math-vfu.lua b/tex/context/base/mkiv/math-vfu.lua
index a683e02cf..a8a789d28 100644
--- a/tex/context/base/mkiv/math-vfu.lua
+++ b/tex/context/base/mkiv/math-vfu.lua
@@ -25,7 +25,6 @@ if not modules then modules = { } end modules ['math-vfu'] = {
local type, next = type, next
local max = math.max
local format = string.format
-local utfchar = utf.char
local fastcopy = table.copy
local fonts, nodes, mathematics = fonts, nodes, mathematics
@@ -564,6 +563,10 @@ function vfmath.addmissing(main,id,size)
raise(main,characters,id,size,0x2032,0xFE325,1,id_of_smaller) -- prime
raise(main,characters,id,size,0x2033,0xFE325,2,id_of_smaller) -- double prime
raise(main,characters,id,size,0x2034,0xFE325,3,id_of_smaller) -- triple prime
+ -- to satisfy the prime resolver
+ characters[0xFE932] = characters[0x2032]
+ characters[0xFE933] = characters[0x2033]
+ characters[0xFE934] = characters[0x2034]
end
-- there are more (needs discussion first):
@@ -1080,6 +1083,7 @@ function vfmath.define(specification,set,goodies)
report_virtual("loading and virtualizing font %a at size %p took %0.3f seconds",name,size,os.clock()-start)
end
--
+ main.oldmath = true
return main
end
diff --git a/tex/context/base/mkiv/meta-imp-mat.mkiv b/tex/context/base/mkiv/meta-imp-mat.mkiv
new file mode 100644
index 000000000..8913845fd
--- /dev/null
+++ b/tex/context/base/mkiv/meta-imp-mat.mkiv
@@ -0,0 +1,174 @@
+%D \module
+%D [ file=meta-mat,
+%D version=2013.07.19,
+%D title=\METAPOST\ Graphics,
+%D subtitle=Math,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D This is just an example library not meant for production.
+
+% A few accents:
+
+% / for cambria
+
+\startMPextensions
+ vardef math_stacker_overbracket_shape =
+ image (
+ draw
+ (0,OverlayOffset) --
+ (0,OverlayHeight-OverlayOffset) --
+ (OverlayWidth,OverlayHeight-OverlayOffset) --
+ (OverlayWidth,OverlayOffset)
+ withcolor
+ OverlayLineColor ;
+ setbounds currentpicture to boundingbox currentpicture bottomenlarged OverlayOffset ;
+ )
+ enddef ;
+ vardef math_stacker_underbracket_shape =
+ math_stacker_overbracket_shape rotated 180
+ enddef ;
+ vardef math_stacker_overparent_shape =
+ image (
+ draw
+ (0,OverlayOffset) ...
+ (OverlayWidth/2,OverlayHeight-OverlayOffset) ...
+ (OverlayWidth,OverlayOffset)
+ withcolor
+ OverlayLineColor ;
+ setbounds currentpicture to boundingbox currentpicture bottomenlarged OverlayOffset ;
+ )
+ enddef ;
+ vardef math_stacker_underparent_shape =
+ math_stacker_overparent_shape rotated 180
+ enddef ;
+ vardef math_stacker_overbrace_shape =
+ image (
+ draw
+ (0,OverlayOffset) ...
+ (OverlayWidth/4-OverlayOffset,OverlayHeight-OverlayOffset) ...
+ (OverlayWidth/2-OverlayOffset,OverlayHeight-OverlayOffset) ...
+ (OverlayWidth/2,OverlayHeight) &
+ (OverlayWidth/2,OverlayHeight) ...
+ (OverlayWidth/2+OverlayOffset,OverlayHeight-OverlayOffset) ...
+ (3OverlayWidth/4+OverlayOffset,OverlayHeight-OverlayOffset) ...
+ (OverlayWidth,OverlayOffset)
+ withcolor
+ OverlayLineColor ;
+ setbounds currentpicture to boundingbox currentpicture bottomenlarged OverlayOffset ;
+ )
+ enddef ;
+ vardef math_stacker_underbrace_shape =
+ math_stacker_overbrace_shape rotated 180
+ enddef ;
+ vardef math_stacker_overbar_shape =
+ image (
+ draw
+ (0,OverlayOffset) -- (OverlayWidth,OverlayOffset)
+ withcolor
+ OverlayLineColor ;
+ setbounds currentpicture to boundingbox currentpicture bottomenlarged OverlayOffset ;
+ )
+ enddef ;
+ vardef math_stacker_underbar_shape =
+ math_stacker_overbar_shape rotated 180
+ enddef ;
+ vardef math_stacker_arrow_shape =
+ image (
+ drawarrow
+ (OverlayWidth,OverlayOffset) -- (0,OverlayOffset)
+ withcolor
+ OverlayLineColor ;
+ setbounds currentpicture to boundingbox currentpicture bottomenlarged (OverlayOffset/2) topenlarged (OverlayOffset/2) ;
+ )
+ enddef ;
+ vardef math_stacker_leftarrow_shape =
+ math_stacker_arrow_shape
+ enddef ;
+ vardef math_stacker_rightarrow_shape =
+ math_stacker_arrow_shape rotated 180
+ enddef ;
+ def math_stacker_draw(expr p) =
+ draw
+ p
+ withpen
+ pencircle
+ xscaled (2OverlayLineWidth)
+ % yscaled (3OverlayLineWidth/4)
+ yscaled (3OverlayLineWidth)
+ % rotated 30 ;
+ rotated 45 ;
+ enddef ;
+\stopMPextensions
+
+\startuniqueMPgraphic{math:stacker:\number"FE3B4}
+ math_stacker_draw(math_stacker_overbracket_shape) ;
+\stopuniqueMPgraphic
+
+\startuniqueMPgraphic{math:stacker:\number"FE3B5}
+ math_stacker_draw(math_stacker_underbracket_shape) ;
+\stopuniqueMPgraphic
+
+\startuniqueMPgraphic{math:stacker:\number"FE3DC}
+ math_stacker_draw(math_stacker_overparent_shape) ;
+\stopuniqueMPgraphic
+
+\startuniqueMPgraphic{math:stacker:\number"FE3DD}
+ math_stacker_draw(math_stacker_underparent_shape) ;
+\stopuniqueMPgraphic
+
+\startuniqueMPgraphic{math:stacker:\number"FE3DE}
+ math_stacker_draw(math_stacker_overbrace_shape) ;
+\stopuniqueMPgraphic
+
+\startuniqueMPgraphic{math:stacker:\number"FE3DF}
+ math_stacker_draw(math_stacker_underbrace_shape) ;
+\stopuniqueMPgraphic
+
+\startuniqueMPgraphic{math:stacker:\number"FE33E}
+ math_stacker_draw(math_stacker_overbar_shape) ;
+\stopuniqueMPgraphic
+
+\startuniqueMPgraphic{math:stacker:\number"FE33F}
+ math_stacker_draw(math_stacker_underbar_shape) ;
+\stopuniqueMPgraphic
+
+\startuniqueMPgraphic{math:stacker:\number"2190}
+ math_stacker_draw(math_stacker_leftarrow_shape) ;
+\stopuniqueMPgraphic
+
+\startuniqueMPgraphic{math:stacker:\number"2192}
+ math_stacker_draw(math_stacker_rightarrow_shape) ;
+\stopuniqueMPgraphic
+
+%D Radicals:
+
+\startMPextensions
+ vardef math_radical_simple(expr w,h,d,o) =
+ (-h/2-o,h/2-o) --
+ (-h/4-o,-d-o) --
+ (-o,h+o) --
+ (w+o,h+o) --
+ (w+o,h-h/10+o)
+ enddef ;
+\stopMPextensions
+
+\startuniqueMPgraphic{math:radical:default}%{...}
+ draw
+ math_radical_simple(OverlayWidth,OverlayHeight,OverlayDepth,OverlayOffset)
+ withpen pencircle xscaled (2OverlayLineWidth) yscaled (3OverlayLineWidth/4) rotated 30
+ % dashed evenly
+ withcolor OverlayLineColor ;
+\stopuniqueMPgraphic
+
+% \setupmathstackers
+% [vfenced]
+% [color=darkred,
+% alternative=mp]
+
+\endinput
diff --git a/tex/context/base/mkiv/meta-imp-nodes.mkiv b/tex/context/base/mkiv/meta-imp-nodes.mkiv
new file mode 100644
index 000000000..2555fcaa2
--- /dev/null
+++ b/tex/context/base/mkiv/meta-imp-nodes.mkiv
@@ -0,0 +1,34 @@
+%D \module
+%D [ file=meta-imp-nodes,
+%D version=2016.11.23,
+%D title=\METAPOST\ Graphics,
+%D subtitle=Nodes,
+%D author=Alan Braslau and Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D We might add more here. Also, the node module might get preloaded in
+%D all instances.
+
+\unprotect
+
+\defineMPinstance
+ [nodes]
+ [\s!format=metafun,
+ \s!extensions=\v!yes,
+ \s!initializations=\v!yes,
+ \c!method=\s!double]
+
+\defineframed
+ [node]
+ [\c!frame=\v!off]
+
+\startMPdefinitions{nodes}
+ loadmodule "node" ;
+\stopMPdefinitions
+
+\protect
diff --git a/tex/context/base/mkiv/meta-imp-outlines.mkiv b/tex/context/base/mkiv/meta-imp-outlines.mkiv
index 7d7495037..7629c0c92 100644
--- a/tex/context/base/mkiv/meta-imp-outlines.mkiv
+++ b/tex/context/base/mkiv/meta-imp-outlines.mkiv
@@ -18,8 +18,8 @@ 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_index = formatters['draw anchored.bot(textext("\\tttf\\setstrut\\strut index %i") ysized 10bp ,.5[llcorner currentpicture,lrcorner currentpicture] shifted (0,%.4G));']
+local f_unicode = formatters['draw anchored.bot(textext("\\tttf\\setstrut\\strut unicode %05X") ysized 10bp ,.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;"]
@@ -43,35 +43,42 @@ local v_all = variables.all
local v_page = variables.page
local v_text = variables.text
local v_command = variables.command
+local v_box = variables.box
+local v_width = variables.width
+local v_min = variables.min
+local v_max = variables.max
+local v_comment = variables.comment
+local v_simple = variables.simple
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 shapeglyphs = shapedata.glyphs or { }
local character = validstring(specification.character)
local index = validstring(specification.index)
local alternative = validstring(specification.alternative)
local command = validstring(specification.command)
-
+ local options = utilities.parsers.settings_to_set(specification.option)
+ local all = not next(options) and not options[v_simple] or options[v_all]
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 units = shapedata.units or 1000
local factor = 100/units
local paths = metapost.paths(glyph,factor)
- if #paths > 0 then
+ if #paths > 0 and glyph.boundingbox and glyph.width 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)
+ f_in_gray (metapost.fill(paths)),
+ metapost.draw(paths,true), -- true triggers trace
+ (all or options[v_box]) and f_in_red (metapost.boundingbox(glyph,factor)) or "",
+ (all or options[v_width]) and f_in_green (metapost.widthline(glyph,factor)) or "",
+ (all or options[v_min]) and f_in_blue (metapost.zeroline(glyph,factor)) or "",
+ (all or options[v_max]) and f_setbounds(metapost.maxbounds(data,index,factor),offset or 1) or "",
+ (all or options[v_comment]) and f_comment (what,1) or "",
})
if alternative == v_page then
context.startMPpage()
@@ -110,7 +117,7 @@ function metapost.showglyph(specification)
end
local first, last
if type(index) == "string" then
- first, last = string.match(index,"^(.-):(.*)$")
+ first, last = string.split(index,":")
if first and last then
first = tonumber(first)
last = tonumber(last)
@@ -137,17 +144,25 @@ end
\unprotect
+% option: box|width|min|max|comment
+
\unexpanded\def\showshape
{\dosingleargument\meta_shapes_show}
\def\meta_shapes_show[#1]%
{\begingroup
- \getdummyparameters[\c!alternative=\v!text,#1]%
+ \letdummyparameter\c!index\empty
+ \letdummyparameter\c!character\empty
+ \letdummyparameter\c!alternative\v!text
+ \letdummyparameter\c!command\empty
+ \letdummyparameter\c!option\v!all
+ \getdummyparameters[#1]%
\ctxlua{fonts.metapost.showglyph{
character = "\dummyparameter\c!character",
index = "\dummyparameter\c!index",
alternative = "\dummyparameter\c!alternative",
command = "\dummyparameter\c!command",
+ option = "\dummyparameter\c!option",
}}%
\endgroup}
@@ -164,8 +179,21 @@ end
% \setupbodyfont[pagella]
% \showshape[character=all,alternative=page]
-\setupbodyfont[dejavu]
-\showshape[character=P,alternative=text]
+\usemodule[art-01]
+
+% \definedfont[lt55476.afm]
+
+\startcombination[3*1]
+ {\ruledhbox{\startMPcode draw textext("\showshape[character=a]") ; \stopMPcode}} {}
+ {\ruledhbox{\startMPcode draw textext("\showshape[character=x]") ; \stopMPcode}} {}
+ {\ruledhbox{\showshape[character=P,alternative=text]}} {}
+\stopcombination
+
+\startcombination[3*1]
+ {\ruledhbox{\startMPcode draw textext("\showshape[character=a,option={simple}]") ; \stopMPcode}} {}
+ {\ruledhbox{\startMPcode draw textext("\showshape[character=x,option={simple}]") ; \stopMPcode}} {}
+ {\ruledhbox{\showshape[character=P,alternative=text,option=simple]}} {}
+\stopcombination
% \definedfont[almfixed]
% \showshape[character=all,alternative=page]
diff --git a/tex/context/base/mkiv/meta-imp-txt.mkiv b/tex/context/base/mkiv/meta-imp-txt.mkiv
index 7069d21a4..b2a6d6d1d 100644
--- a/tex/context/base/mkiv/meta-imp-txt.mkiv
+++ b/tex/context/base/mkiv/meta-imp-txt.mkiv
@@ -31,7 +31,7 @@
\definesystemvariable {sh} % ShapedText .. todo: commandhandler
\startMPextensions
- if unknown context_text: input "mp-text.mpiv" ; fi;
+ loadmodule "text" ;
\stopMPextensions
%%%%%%%
@@ -130,6 +130,7 @@
\unexpanded\def\getshapetext % option: unvbox
{\vbox\bgroup
\forgetall
+ \dontcomplain
\setbox\scratchbox\vbox to \parheight
{\expanded{\switchtobodyfont[\@@shbodyfont]}% evt strutheight en
\splittopskip\strutheight % lineheight opslaan
@@ -150,84 +151,242 @@
\setupshapetexts
[\c!bodyfont=]
-%%%%%%% rotfont nog definieren
-
\doifundefined{RotFont}{\definefont[RotFont][RegularBold*default]}
-\unexpanded\def\processfollowingtoken#1% strut toegevoegd
- {\appendtoks#1\to\MPtoks
- \setbox\MPbox=\hbox{\RotFont\setstrut\strut\the\MPtoks}%
- \startMPdrawing
- n := n + 1 ; len[n] := \the\wd\MPbox ;
- \stopMPdrawing
- \startMPdrawing[-]
- % pic[n] := textext{\RotFont\setstrut\strut#1} ; % btex \RotFont\setstrut\strut#1 etex ;
- pic[n] := btex \RotFont\setstrut\strut#1 etex ;
- pic[n] := pic[n] shifted - llcorner pic[n] ;
- \stopMPdrawing}
-
-\startuseMPgraphic{followtokens}
- % we default to nothing
-\stopuseMPgraphic
+% \startuseMPgraphic{followtokens}
+% % we default to nothing
+% \stopuseMPgraphic
+
+% \unexpanded\def\processfollowingtoken#1% strut toegevoegd
+% {\appendtoks#1\to\MPtoks
+% \setbox\MPbox=\hbox{\RotFont\setstrut\strut\the\MPtoks}%
+% \startMPdrawing
+% n := n + 1 ; len[n] := \the\wd\MPbox ;
+% \stopMPdrawing
+% \startMPdrawing[-]
+% % pic[n] := textext{\RotFont\setstrut\strut#1} ; % btex \RotFont\setstrut\strut#1 etex ;
+% pic[n] := btex \RotFont\setstrut\strut#1 etex ;
+% pic[n] := pic[n] shifted - llcorner pic[n] ;
+% \stopMPdrawing}
+%
+% \unexpanded\def\dofollowtokens#1#2%
+% {\vbox\bgroup
+% \forgetall
+% \dontcomplain
+% \doifundefined{RotFont}{\definefont[RotFont][RegularBold*default]}%
+% \MPtoks\emptytoks
+% \resetMPdrawing
+% \startMPdrawing
+% \includeMPgraphic{followtokens} ;
+% picture pic[] ; numeric len[], n ; n := 0 ;
+% \stopMPdrawing
+% \handletokens#2\with\processfollowingtoken
+% \startMPdrawing
+% if unknown RotPath : path RotPath ; RotPath := origin ; fi ;
+% if unknown RotColor : color RotColor ; RotColor := black ; fi ;
+% if unknown TraceRot : boolean TraceRot ; TraceRot := false ; fi ;
+% if unknown ExtraRot : numeric ExtraRot ; ExtraRot := 0 ; fi ;
+% numeric al, at, pl, pc, wid, pos ; pair ap, ad ;
+% al := arclength RotPath ;
+% if al=0 :
+% al := len[n] + ExtraRot ;
+% RotPath := origin -- (al,0) ;
+% fi ;
+% if al<len[n]:
+% RotPath := RotPath scaled ((len[n]+ExtraRot)/al) ;
+% al := arclength RotPath ;
+% fi ;
+% if \number#1 = 1 :
+% pl := (al-len[n])/(if n>1 : (n-1) else : 1 fi) ;
+% pc := 0 ;
+% else : % centered / MP
+% pl := 0 ;
+% pc := arclength RotPath/2 - len[n]/2 ;
+% fi ;
+% if TraceRot :
+% draw RotPath withpen pencircle scaled 1pt withcolor blue ;
+% fi ;
+% for i=1 upto n :
+% wid := abs(xpart urcorner pic[i] - xpart llcorner pic[i]) ;
+% pos := len[i]-wid/2 + (i-1)*pl + pc ;
+% at := arctime pos of RotPath ;
+% ap := point at of RotPath ;
+% ad := direction at of RotPath ;
+% draw pic[i] shifted (-wid/2,0) rotated(angle(ad)) shifted ap
+% withcolor RotColor ;
+% if TraceRot :
+% draw boundingbox
+% pic[i] shifted (-wid/2,0) rotated(angle(ad)) shifted ap
+% withpen pencircle scaled .25pt withcolor red ;
+% draw ap
+% withpen pencircle scaled .50pt withcolor green ;
+% fi ;
+% endfor ;
+% \stopMPdrawing
+% \MPdrawingdonetrue
+% \getMPdrawing
+% \resetMPdrawing
+% \egroup}
+
+\unexpanded\def\getfollowtoken#1%
+ {\hbox\bgroup
+ \strut
+ \ctxlua{mp.follow_text(#1)}%
+ \egroup}
+
+\definefontfeature[mp:tp][liga=no]
+
+\startMPdefinitions
+ def mfun_follow_draw (expr alternative) =
+ if unknown RotPath : path RotPath ; RotPath := origin ; fi ;
+ % if unknown RotColor : color RotColor ; RotColor := black ; fi ;
+ if unknown TraceRot : boolean TraceRot ; TraceRot := false ; fi ;
+ if unknown ExtraRot : numeric ExtraRot ; ExtraRot := 0 ; fi ;
+ picture pic[] ;
+ numeric len[] ; len[0] := 0 ;
+ numeric n ; n := lua.mp.follow_size() ;
+ for i=1 upto n :
+ pic[i] := lua.mp.follow_slot(i) ;
+ pic[i] := pic[i] shifted - llcorner pic[i] ;
+ len[i] := len[i-1] + lua.mp.follow_width(i) ;
+ endfor ;
+ numeric al, at, pl, pc, wid, pos ; pair ap, ad ;
+ al := arclength RotPath ;
+ if al = 0 :
+ al := len[n] + ExtraRot ;
+ RotPath := origin -- (al,0) ;
+ fi ;
+ if al < len[n]:
+ RotPath := RotPath scaled ((len[n]+ExtraRot)/al) ;
+ al := arclength RotPath ;
+ fi ;
+ if alternative = 1 :
+ pl := (al-len[n])/(if n>1 : (n-1) else : 1 fi) ;
+ pc := 0 ;
+ else : % centered / MP
+ pl := 0 ;
+ pc := arclength RotPath/2 - len[n]/2 ;
+ fi ;
+ if TraceRot :
+ draw RotPath withpen pencircle scaled 1pt withcolor blue ;
+ fi ;
+ for i=1 upto n :
+ % wid := abs(xpart urcorner pic[i] - xpart llcorner pic[i]) ;
+ wid := lua.mp.follow_width(i) ;
+ pos := len[i]-wid/2 + (i-1)*pl + pc ;
+ at := arctime pos of RotPath ;
+ ap := point at of RotPath ;
+ ad := direction at of RotPath ;
+ if mfun_trial_run :
+ % skip (ok, somewhat inefficient as we can consider a
+ % dedicated store and textext variant (todo)
+ else :
+ pic[i] := pic[i] shifted (-wid/2,0) rotated(angle(ad)) shifted ap ;
+ draw pic[i] ; % withcolor RotColor ;
+ if TraceRot :
+ draw boundingbox pic[i] withpen pencircle scaled .25pt withcolor red ;
+ draw ap withpen pencircle scaled .50pt withcolor green ;
+ fi ;
+ fi ;
+ endfor ;
+ if TraceRot :
+ draw boundingbox currentpicture withpen pencircle scaled .25pt withcolor blue ;
+ fi ;
+ enddef ;
+\stopMPdefinitions
+
+\startluacode
+ local nodecodes = nodes.nodecodes
+
+ local visible_code = {
+ [nodecodes.glyph] = true,
+ [nodecodes.glue] = true,
+ [nodecodes.hlist] = true,
+ [nodecodes.vlist] = true,
+ [nodecodes.rule] = true,
+ }
+
+ local disc_code = nodecodes.disc
+ local kern_code = nodecodes.kern
+
+ local c_userkern = nodes.kerncodes.userkern
+ local a_fontkern = attributes.private("fontkern")
+
+ local n = nil
+ local s = 0
+
+ function mp.follow_reset()
+ r = nil
+ s = 0
+ end
+
+ function mp.follow_initialize(b)
+ if not r then
+ local l = tex.takebox(b).list
+ n = { }
+ s = 0
+ while l do
+ local c = l
+ l = l.next
+ local id = c.id
+ if visible_code[id] then
+ s = s + 1
+ n[s] = c
+ c.prev = nil
+ c.next = nil
+ elseif id == kern_code then
+ if c.subtype == c_userkern and not c[a_fontkern] then
+ s = s + 1
+ n[s] = c
+ c.prev = nil
+ else
+ n[s].next = c
+ c.prev = n[s]
+ end
+ c.next = nil
+ elseif id == disc_code then
+ local r = c.replace
+ while r do
+ s = s + 1
+ n[s] = r
+ r = r.next
+ r.prev = nil
+ r.next = nil
+ end
+ end
+ end
+ end
+ end
+
+ function mp.follow_size()
+ mp.print(s)
+ end
+
+ function mp.follow_slot(i)
+ mp.print('textext("\\getfollowtoken{' .. i .. '}")')
+ end
+
+ function mp.follow_text(s)
+ context(n[s])
+ end
+
+ function mp.follow_width(i)
+ mp.print(number.topoints(n[i].width))
+ end
+\stopluacode
\unexpanded\def\dofollowtokens#1#2%
{\vbox\bgroup
\forgetall
\dontcomplain
- \doifundefined{RotFont}{\definefont[RotFont][RegularBold*default]}%
- \MPtoks\emptytoks
- \resetMPdrawing
- \startMPdrawing
+ \setbox\scratchbox\hbox{\addff{mp:tp}#2}%
+ \ctxlua{mp.follow_initialize(\number\scratchbox)}%
+ \stopluacode
+ \startMPcode
\includeMPgraphic{followtokens} ;
- picture pic[] ; numeric len[], n ; n := 0 ;
- \stopMPdrawing
- \handletokens#2\with\processfollowingtoken
- \startMPdrawing
- if unknown RotPath : path RotPath ; RotPath := origin ; fi ;
- if unknown RotColor : color RotColor ; RotColor := black ; fi ;
- if unknown TraceRot : boolean TraceRot ; TraceRot := false ; fi ;
- if unknown ExtraRot : numeric ExtraRot ; ExtraRot := 0 ; fi ;
- numeric al, at, pl, pc, wid, pos ; pair ap, ad ;
- al := arclength RotPath ;
- if al=0 :
- al := len[n] + ExtraRot ;
- RotPath := origin -- (al,0) ;
- fi ;
- if al<len[n]:
- RotPath := RotPath scaled ((len[n]+ExtraRot)/al) ;
- al := arclength RotPath ;
- fi ;
- if \number#1 = 1 :
- pl := (al-len[n])/(if n>1 : (n-1) else : 1 fi) ;
- pc := 0 ;
- else : % centered / MP
- pl := 0 ;
- pc := arclength RotPath/2 - len[n]/2 ;
- fi ;
- if TraceRot :
- draw RotPath withpen pencircle scaled 1pt withcolor blue ;
- fi ;
- for i=1 upto n :
- wid := abs(xpart urcorner pic[i] - xpart llcorner pic[i]) ;
- pos := len[i]-wid/2 + (i-1)*pl + pc ;
- at := arctime pos of RotPath ;
- ap := point at of RotPath ;
- ad := direction at of RotPath ;
- draw pic[i] shifted (-wid/2,0) rotated(angle(ad)) shifted ap
- withcolor RotColor ;
- if TraceRot :
- draw boundingbox
- pic[i] shifted (-wid/2,0) rotated(angle(ad)) shifted ap
- withpen pencircle scaled .25pt withcolor red ;
- draw ap
- withpen pencircle scaled .50pt withcolor green ;
- fi ;
- endfor ;
-% fill boundingbox currentpicture ;
- \stopMPdrawing
- \MPdrawingdonetrue
- \getMPdrawing
- \resetMPdrawing
+ mfun_follow_draw(\number#1) ;
+ \stopMPcode
+ \ctxlua{mp.follow_reset()}%
\egroup}
\unexpanded\def\followtokens {\dofollowtokens1}
@@ -262,6 +421,8 @@
% \followtokenscentered{So now we have two commands.}}
% \stopoverlay
+% \followtokengraphicscale{6cm}
+% \followtokens{Hans Hagen uses {\darkred\TeX}, {\darkgreen\Lua}, {\darkblue \MetaPost} and friends.}
\startuseMPgraphic{fuzzycount}
begingroup
@@ -289,7 +450,7 @@
[fuzzycount]
[n=10]
-\def\fuzzycount#1%
+\unexpanded\def\fuzzycount#1%
{{\tx\useMPgraphic{fuzzycount}{n=#1}}}
\defineconversion[fuzzy][\fuzzycount]
diff --git a/tex/context/base/mkiv/meta-ini.lua b/tex/context/base/mkiv/meta-ini.lua
index 8f7131263..d3865c433 100644
--- a/tex/context/base/mkiv/meta-ini.lua
+++ b/tex/context/base/mkiv/meta-ini.lua
@@ -75,45 +75,53 @@ local dimenorname =
+ (C(lpegpatterns.float) + Cc(1)) * lpegpatterns.space^0 * P("\\") * C(lpegpatterns.letter^1) / function(f,s)
local t = textype(s)
if t == "dimen" then
- context("\\the\\dimexpr %s\\%s",f,s)
+ context("\\the\\dimexpr %s\\%s\\relax",f,s)
elseif t == "count" then
context("\\the\\numexpr \\%s * %s\\relax",s,f) -- <n>\scratchcounter is not permitted
end
end
-local splitter = lpeg.splitat(":",true)
-
-function commands.prepareMPvariable(v) -- slow but ok
- if v == "" then
- MPcolor("black")
- else
- local typ, var = lpegmatch(splitter,v)
- if not var then
- -- parse
- if colorhash[v] then
- MPcolor(v)
- elseif tonumber(v) then
- context(v)
- elseif not lpegmatch(dimenorname,v) then
- context("\\number %s",v) -- 0.4 ...
- end
- elseif typ == "d" then -- to be documented
- -- dimension
- context("\\the\\dimexpr %s",var)
- elseif typ == "n" then -- to be documented
- -- number
- context("\\the\\numexpr %s",var)
- elseif typ == "s" then -- to be documented
- -- string
- context(var)
- elseif typ == "c" then -- to be documented
- -- color
- MPcolor(var)
+local splitter = lpeg.splitat("::",true)
+
+interfaces.implement {
+ name = "prepareMPvariable",
+ arguments = "string",
+ actions = function(v)
+ if v == "" then
+ -- MPcolor("black")
+ context("black")
else
- context(var)
+ local typ, var = lpegmatch(splitter,v)
+ if not var then
+ -- parse
+ if colorhash[v] then
+ -- MPcolor(v)
+ context("%q",var)
+ elseif tonumber(v) then
+ context(v)
+ elseif not lpegmatch(dimenorname,v) then
+ context("\\number %s",v) -- 0.4 ...
+ end
+ elseif typ == "d" then -- to be documented
+ -- dimension
+ context("\\the\\dimexpr %s\\relax",var)
+ elseif typ == "n" then -- to be documented
+ -- number
+ context("\\the\\numexpr %s\\relax",var)
+ elseif typ == "s" then -- to be documented
+ -- string
+ -- context(var)
+ context("%q",var)
+ elseif typ == "c" then -- to be documented
+ -- color
+ -- MPcolor(var)
+ context("%q",var)
+ else
+ context(var)
+ end
end
end
-end
+}
-- function metapost.formatnumber(f,n) -- just lua format
-- f = gsub(f,"@(%d)","%%.%1")
diff --git a/tex/context/base/mkiv/meta-ini.mkiv b/tex/context/base/mkiv/meta-ini.mkiv
index d0fff83df..1d0fa11e0 100644
--- a/tex/context/base/mkiv/meta-ini.mkiv
+++ b/tex/context/base/mkiv/meta-ini.mkiv
@@ -248,8 +248,8 @@
\def\meta_flush_current_initializations
{\ifconditional\c_meta_include_initializations
\the\t_meta_initializations
- \fi
- \theMPrandomseed;}
+ \fi}
+ % \theMPrandomseed;}
\def\meta_flush_current_inclusions
{\the\t_meta_inclusions}
@@ -262,7 +262,7 @@
\meta_enable_include
\the\everyMPgraphic
\meta_preset_definitions
- \setMPrandomseed % this has to change
+ %\setMPrandomseed % this has to change
\edef\p_initializations{\MPinstanceparameter\s!initializations}%
\ifx\p_initializations\v!yes
\settrue \c_meta_include_initializations
@@ -315,6 +315,7 @@
definitions {\meta_flush_current_definitions}%
figure {\MPaskedfigure}%
method {\MPinstanceparameter\c!method}%
+ namespace {\??graphicvariable\currentmpvariableclass:}%
\relax}%
\meta_process_graphic_stop
\meta_stop_current_graphic}
@@ -334,16 +335,16 @@
\meta_process_graphic{input "#1" ;}%
\endgroup}
-\newif\ifsetMPrandomseed \setMPrandomseedtrue % false by default
-
-\let\theMPrandomseed\empty
-
-\def\setMPrandomseed
- {\ifsetMPrandomseed
- \def\theMPrandomseed{randomseed:=\mprandomnumber;}%
- \else
- \let\theMPrandomseed\empty
- \fi}
+% \newif\ifsetMPrandomseed \setMPrandomseedtrue % false by default
+%
+% \let\theMPrandomseed\empty
+%
+% \def\setMPrandomseed
+% {\ifsetMPrandomseed
+% \def\theMPrandomseed{randomseed:=\mprandomnumber;}%
+% \else
+% \let\theMPrandomseed\empty
+% \fi}
%D Calling up previously defined graphics.
@@ -521,10 +522,7 @@
\installcorenamespace{graphicvariable}
-\def \meta_prepare_variable_default {\MPcolor{black}} % just to be sure we use a color but ...
-\edef\meta_unknown_variable_template {\??graphicvariable:\s!unknown}
-
-\letvalue{\??graphicvariable:\s!unknown}\empty
+\def\meta_prepare_variable_default{\MPcolor{black}} % just to be sure we use a color but ...
\unexpanded\def\setupMPvariables
{\dodoubleempty\meta_setup_variables}
@@ -545,11 +543,9 @@
\fi}
\def\MPrawvar#1#2% no checking
- %{\csname\??graphicvariable#1:#2\endcsname}
{\begincsname\??graphicvariable#1:#2\endcsname}
\def\MPvariable#1% todo: could be a framed chain
- %{\csname\??graphicvariable\currentmpvariableclass:#1\endcsname}
{\begincsname\??graphicvariable\currentmpvariableclass:#1\endcsname}
\unexpanded\def\useMPvariables
@@ -566,9 +562,9 @@
{\edef\m_meta_current_variable_template
{\??graphicvariable\currentmpvariableclass:#1}%
\edef\m_meta_current_variable
- {\csname\ifcsname\m_meta_current_variable_template\endcsname
- \m_meta_current_variable_template\else\meta_unknown_variable_template
- \fi\endcsname}%
+ {\ifcsname\m_meta_current_variable_template\endcsname
+ \lastnamedcs
+ \fi}%
\ifx\m_meta_current_variable\empty
\expandafter\meta_prepare_variable_nop
\else
@@ -582,15 +578,11 @@
{\edef\m_meta_current_variable_template
{\??graphicvariable\currentmpvariableclass:#1}%
\edef\m_meta_current_variable
- {\csname
- \ifcsname\m_meta_current_variable_template\endcsname
- \m_meta_current_variable_template
- \else\ifcsname\??graphicvariable\currentMPgraphicname:#1\endcsname
- \??graphicvariable\currentMPgraphicname:#1%
- \else
- \meta_unknown_variable_template
- \fi\fi
- \endcsname}%
+ {\ifcsname\m_meta_current_variable_template\endcsname
+ \lastnamedcs
+ \else\ifcsname\??graphicvariable\currentMPgraphicname:#1\endcsname
+ \lastnamedcs
+ \fi\fi}%
\ifx\m_meta_current_variable\empty
\expandafter\meta_prepare_variable_nop
\else
@@ -621,6 +613,10 @@
\endgroup\meta_prepare_variable_dimension
\fi}}
+% \def\meta_prepare_variable_yes
+% {\expandafter\edef\csname\m_meta_current_variable_template\endcsname
+% {\clf_prepareMPvariable {\m_meta_current_variable}}}
+
\let\MPvar \MPvariable
\let\setMPvariables\setupMPvariables
@@ -710,16 +706,18 @@
{\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
+ {\begingroup % when there are that many they're probably not that unique anyway
\edef\currentmpvariableclass{#1}%
\extendMPoverlaystamp{#2}% incl prepare
- \ifcsname\??mpgraphic\overlaystamp:#1\endcsname\else
+ \ifcsname\??mpgraphic\overlaystamp:#1\endcsname
+ \lastnamedcs
+ \else
\meta_enable_include % redundant
\global\advance\c_meta_object_counter\plusone
\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}}%
+ \csname\??mpgraphic\overlaystamp:#1\endcsname\empty
\fi
- \csname\??mpgraphic\overlaystamp:#1\endcsname\empty
\endgroup}
\unexpanded\def\startuniqueMPgraphic
@@ -1495,6 +1493,12 @@
\def\MPruntab#1#2{\clf_mpruntab{#1}#2\relax} \let\mpruntab\MPruntab % #2 is number
\def\MPrunset#1#2{\clf_mprunset{#1}{#2}} \let\mprunset\MPrunset
+\prependtoks \clf_mppushvariables \to \everybeforepagebody
+\appendtoks \clf_mppopvariables \to \everyafterpagebody
+
+\let\MPpushvariables\clf_mppushvariables
+\let\MPpopvariables \clf_mppopvariables
+
%D We also provide an outputless run:
\unexpanded\def\startMPcalculation
diff --git a/tex/context/base/mkiv/meta-pdf.lua b/tex/context/base/mkiv/meta-pdf.lua
index 3cbff63b1..c17a2a4c7 100644
--- a/tex/context/base/mkiv/meta-pdf.lua
+++ b/tex/context/base/mkiv/meta-pdf.lua
@@ -541,13 +541,13 @@ end
-- main converter
-local a_colorspace = attributes.private('colormodel')
+local a_colormodel = attributes.private('colormodel')
function mptopdf.convertmpstopdf(name)
resetall()
local ok, m_data, n = resolvers.loadbinfile(name, 'tex') -- we need a binary load !
if ok then
- mps.colormodel = texgetattribute(a_colorspace)
+ mps.colormodel = texgetattribute(a_colormodel)
statistics.starttiming(mptopdf)
mptopdf.nofconverted = mptopdf.nofconverted + 1
pdfcode(formatters["\\letterpercent\\space mptopdf begin: n=%s, file=%s"](mptopdf.nofconverted,file.basename(name)))
diff --git a/tex/context/base/mkiv/meta-tex.lua b/tex/context/base/mkiv/meta-tex.lua
index 1008e45c0..71207975d 100644
--- a/tex/context/base/mkiv/meta-tex.lua
+++ b/tex/context/base/mkiv/meta-tex.lua
@@ -124,6 +124,10 @@ function metapost.format_string(fmt,...)
end
function metapost.format_number(fmt,num)
+ if not num then
+ num = fmt
+ fmt = "%e"
+ end
local number = tonumber(num)
if number then
local base, exponent = lpegmatch(enumber,formatters[lpegmatch(cleaner,fmt)](number))
@@ -150,6 +154,59 @@ end
implement { name = "metapostformatted", actions = metapost.svformat, arguments = { "string", "string" } }
implement { name = "metapostgraphformat", actions = metapost.nvformat, arguments = { "string", "string" } }
+-- kind of new
+
+local f_exponent = formatters["\\MPexponent{%s}{%s}"]
+
+local mpformatters = table.setmetatableindex(function(t,k)
+ local v = formatters[lpegmatch(cleaner,k)]
+ t[k] = v
+ return v
+end)
+
+function metapost.texexp(num,bfmt,efmt)
+ local number = tonumber(num)
+ if number then
+ local base, exponent = lpegmatch(enumber,format("%e",number))
+ if base and exponent then
+ if bfmt then
+ -- base = formatters[lpegmatch(cleaner,bfmt)](base)
+ base = mpformatters[bfmt](base)
+ else
+ base = format("%f",base)
+ end
+ if efmt then
+ -- exponent = formatters[lpegmatch(cleaner,efmt)](exponent)
+ exponent = mpformatters[efmt](exponent)
+ else
+ exponent = format("%i",exponent)
+ end
+ return f_exponent(base,exponent)
+ elseif bfmt then
+ -- return formatters[lpegmatch(cleaner,bfmt)](number)
+ return mpformatters[bfmt](number)
+ else
+ return number
+ end
+ else
+ return num
+ end
+end
+
+-- not in context a namespace
+
+if _LUAVERSION < 5.2 then
+ utilities.strings.formatters.add(formatters,"texexp", [[texexp(...)]], "local texexp = metapost.texexp")
+else
+ utilities.strings.formatters.add(formatters,"texexp", [[texexp(...)]], { texexp = metapost.texexp })
+end
+
+-- print(string.formatters["%!3.3!texexp!"](10.4345E30))
+-- print(string.formatters["%3!texexp!"](10.4345E30,"%2.3f","%2i"))
+-- print(string.formatters["%2!texexp!"](10.4345E30,"%2.3f"))
+-- print(string.formatters["%1!texexp!"](10.4345E30))
+-- print(string.formatters["%!texexp!"](10.4345E30))
+
-- local function test(fmt,n)
-- logs.report("mp format test","fmt: %s, n: %s, result: %s, \\exponent{%s}{%s}",fmt,n,
-- formatters[lpegmatch(cleaner,fmt)](n),
@@ -180,16 +237,18 @@ local f_textext = formatters[ [[textext("%s")]] ]
local f_mthtext = formatters[ [[textext("\mathematics{%s}")]] ]
local f_exptext = formatters[ [[textext("\mathematics{%s\times10^{%s}}")]] ]
+-- local cleaner = Cs((P("\\")/"\\\\" + P("@@")/"@" + P("@")/"%%" + P(1))^0)
+
local mpprint = mp.print
-function mp.format(fmt,str)
+function mp.format(fmt,str) -- bah, this overloads mp.format in mlib-lua.lua
fmt = lpegmatch(cleaner,fmt)
mpprint(f_textext(formatters[fmt](metapost.untagvariable(str,false))))
end
-function mp.formatted(fmt,num) -- svformat
+function mp.formatted(fmt,...) -- svformat
fmt = lpegmatch(cleaner,fmt)
- mpprint(f_textext(formatters[fmt](tonumber(num) or num)))
+ mpprint(f_textext(formatters[fmt](...)))
end
function mp.graphformat(fmt,num) -- nvformat
diff --git a/tex/context/base/mkiv/mlib-ctx.lua b/tex/context/base/mkiv/mlib-ctx.lua
index 3fe7118b7..96eb27cbd 100644
--- a/tex/context/base/mkiv/mlib-ctx.lua
+++ b/tex/context/base/mkiv/mlib-ctx.lua
@@ -23,6 +23,8 @@ local mplib = mplib
metapost = metapost or {}
local metapost = metapost
+local context = context
+
local setters = tokens.setters
local setmacro = setters.macro
local implement = interfaces.implement
@@ -177,6 +179,7 @@ implement {
implement {
name = "mprunset",
+ arguments = { "string", "string" },
actions = function(name,connector)
local value = metapost.variables[name]
if value ~= nil then
@@ -213,6 +216,7 @@ implement {
{ "definitions" },
{ "figure" },
{ "method" },
+ { "namespace" },
}
}
}
@@ -282,7 +286,6 @@ end
function metapost.theclippath(...)
local result = metapost.getclippath(...)
if result then -- we could just print the table
--- return concat(metapost.flushnormalpath(result),"\n")
return concat(metapost.flushnormalpath(result)," ")
else
return ""
@@ -303,6 +306,7 @@ implement {
{ "useextensions" },
{ "inclusions" },
{ "method" },
+ { "namespace" },
},
}
}
@@ -353,6 +357,16 @@ function mptex.reset()
end
implement {
+ name = "mppushvariables",
+ actions = metapost.pushvariables,
+}
+
+implement {
+ name = "mppopvariables",
+ actions = metapost.popvariables,
+}
+
+implement {
name = "mptexset",
arguments = "string",
actions = mptex.set
diff --git a/tex/context/base/mkiv/mlib-int.lua b/tex/context/base/mkiv/mlib-int.lua
index 6d219fe04..108002929 100644
--- a/tex/context/base/mkiv/mlib-int.lua
+++ b/tex/context/base/mkiv/mlib-int.lua
@@ -8,8 +8,8 @@ if not modules then modules = { } end modules ['mlib-int'] = {
local factor = number.dimenfactors.bp
local mpprint = mp.print
-local mpboolean = mp.boolean
-local mpquoted = mp.quoted
+----- mpboolean = mp.boolean
+----- mpquoted = mp.quoted
local getdimen = tex.getdimen
local getcount = tex.getcount
local get = tex.get
@@ -68,11 +68,11 @@ function mp.NOfPages () mpprint(getcount("lastpageno"))
function mp.CurrentColumn () mpprint(getcount("mofcolumns")) end
function mp.NOfColumns () mpprint(getcount("nofcolumns")) end
-function mp.BaseLineSkip () mpprint(getdimen("baselineskip") *factor) end
+function mp.BaseLineSkip () mpprint(get ("baselineskip",true) *factor) end
function mp.LineHeight () mpprint(getdimen("lineheight") *factor) end
function mp.BodyFontSize () mpprint(getdimen("bodyfontsize") *factor) end
-function mp.TopSkip () mpprint(getdimen("topskip") *factor) end
+function mp.TopSkip () mpprint(get ("topskip",true) *factor) end
function mp.StrutHeight () mpprint(getdimen("strutht") *factor) end
function mp.StrutDepth () mpprint(getdimen("strutdp") *factor) end
@@ -80,8 +80,8 @@ function mp.PageNumber () mpprint(getcount("pageno"))
function mp.RealPageNumber () mpprint(getcount("realpageno")) end
function mp.NOfPages () mpprint(getcount("lastpageno")) end
-function mp.CurrentWidth () mpprint(get("hsize") *factor) end
-function mp.CurrentHeight () mpprint(get("vsize") *factor) end
+function mp.CurrentWidth () mpprint(get ("hsize") *factor) end
+function mp.CurrentHeight () mpprint(get ("vsize") *factor) end
function mp.EmWidth () mpprint(emwidths [false]*factor) end
function mp.ExHeight () mpprint(exheights[false]*factor) end
diff --git a/tex/context/base/mkiv/mlib-lua.lua b/tex/context/base/mkiv/mlib-lua.lua
index baf9346c4..9831efc20 100644
--- a/tex/context/base/mkiv/mlib-lua.lua
+++ b/tex/context/base/mkiv/mlib-lua.lua
@@ -11,7 +11,7 @@ if not modules then modules = { } end modules ['mlib-lua'] = {
-- maybe we need mplib.model, but how with instances
local type, tostring, select, loadstring = type, tostring, select, loadstring
-local find, gsub = string.find, string.gsub
+local find, match, gsub, gmatch = string.find, string.match, string.gsub, string.gmatch
local formatters = string.formatters
local concat = table.concat
@@ -62,11 +62,12 @@ end
local f_code = formatters["%s return mp._f_()"]
local f_numeric = formatters["%.16f"]
+local f_integer = formatters["%i"]
local f_pair = formatters["(%.16f,%.16f)"]
local f_triplet = formatters["(%.16f,%.16f,%.16f)"]
local f_quadruple = formatters["(%.16f,%.16f,%.16f,%.16f)"]
-function mp.print(...)
+local function mpprint(...)
for i=1,select("#",...) do
local value = select(i,...)
if value ~= nil then
@@ -85,14 +86,36 @@ function mp.print(...)
end
end
-function mp.boolean(n)
+mp.print = mpprint
+
+-- We had this:
+--
+-- table.setmetatablecall(mp,function(t,k) mpprint(k) end)
+--
+-- but the next one is more interesting because we cannot use calls like:
+--
+-- lua.mp.somedefdname("foo")
+--
+-- which is due to expansion of somedefdname during suffix creation. So:
+--
+-- lua.mp("somedefdname","foo")
+
+table.setmetatablecall(mp,function(t,k,...) return t[k](...) end)
+
+function mp.boolean(b)
+ n = n + 1
+ buffer[n] = b and "true" or "false"
+end
+
+function mp.numeric(f)
n = n + 1
- buffer[n] = n and "true" or "false"
+ buffer[n] = f and f_numeric(f) or "0"
end
-function mp.numeric(n)
+function mp.integer(i)
n = n + 1
- buffer[n] = n and f_numeric(n) or "0"
+ -- buffer[n] = i and f_integer(i) or "0"
+ buffer[n] = i or "0"
end
function mp.pair(x,y)
@@ -152,6 +175,12 @@ function mp.size(t)
buffer[n] = type(t) == "table" and f_numeric(#t) or "0"
end
+local mpnamedcolor = attributes.colors.mpnamedcolor
+
+mp.NamedColor = function(str)
+ mpprint(mpnamedcolor(str))
+end
+
-- experiment: names can change
local datasets = { }
@@ -173,7 +202,7 @@ end
local replacer = lpeg.replacer("@","%%")
-function mp.format(fmt,...)
+function mp.fprint(fmt,...)
n = n + 1
if not find(fmt,"%%") then
fmt = lpegmatch(replacer,fmt)
@@ -181,7 +210,7 @@ function mp.format(fmt,...)
buffer[n] = formatters[fmt](...)
end
-function mp.quoted(fmt,s,...)
+local function mpquoted(fmt,s,...)
n = n + 1
if s then
if not find(fmt,"%%") then
@@ -195,6 +224,8 @@ function mp.quoted(fmt,s,...)
end
end
+mp.quoted = mpquoted
+
function mp.n(t)
return type(t) == "table" and #t or 0
end
@@ -352,9 +383,10 @@ end
-- texts:
-local factor = 65536*(7227/7200)
-local textexts = nil
-local mptriplet = mp.triplet
+local factor = 65536*(7227/7200)
+local textexts = nil
+local mptriplet = mp.triplet
+local nbdimensions = nodes.boxes.dimensions
function mp.tt_initialize(tt)
textexts = tt
@@ -374,7 +406,7 @@ end
-- end
function mp.tt_dimensions(n)
- local box = textexts[n]
+ local box = textexts and textexts[n]
if box then
-- could be made faster with nuts but not critical
mptriplet(box.width/factor,box.height/factor,box.depth/factor)
@@ -383,6 +415,11 @@ function mp.tt_dimensions(n)
end
end
+function mp.tb_dimensions(category,name)
+ local w, h, d = nbdimensions(category,name)
+ mptriplet(w/factor,h/factor,d/factor)
+end
+
function mp.report(a,b)
if b then
report_message("%s : %s",a,b)
@@ -390,3 +427,223 @@ function mp.report(a,b)
report_message("%s : %s","message",a)
end
end
+
+--
+
+local hashes = { }
+
+function mp.newhash()
+ for i=1,#hashes+1 do
+ if not hashes[i] then
+ hashes[i] = { }
+ mpprint(i)
+ return
+ end
+ end
+end
+
+function mp.disposehash(n)
+ hashes[n] = nil
+end
+
+function mp.inhash(n,key)
+ local h = hashes[n]
+ mpprint(h and h[key] and true or false)
+end
+
+function mp.tohash(n,key)
+ local h = hashes[n]
+ if h then
+ h[key] = true
+ end
+end
+
+local modes = tex.modes
+local systemmodes = tex.systemmodes
+
+function mp.mode(s)
+ mpprint(modes[s] and true or false)
+end
+
+function mp.systemmode(s)
+ mpprint(systemmodes[s] and true or false)
+end
+
+-- for alan's nodes:
+
+function mp.isarray(str)
+ mpprint(find(str,"%d") and true or false)
+end
+
+function mp.prefix(str)
+ mpquoted(match(str,"^(.-)[%d%[]") or str)
+end
+
+function mp.dimensions(str)
+ local n = 0
+ for s in gmatch(str,"%[?%-?%d+%]?") do --todo: lpeg
+ n = n + 1
+ end
+ mpprint(n)
+end
+
+-- faster and okay as we don't have many variables but probably only
+-- basename makes sense and even then it's not called that often
+
+-- local hash = table.setmetatableindex(function(t,k)
+-- local v = find(k,"%d") and true or false
+-- t[k] = v
+-- return v
+-- end)
+--
+-- function mp.isarray(str)
+-- mpprint(hash[str])
+-- end
+--
+-- local hash = table.setmetatableindex(function(t,k)
+-- local v = '"' .. (match(k,"^(.-)%d") or k) .. '"'
+-- t[k] = v
+-- return v
+-- end)
+--
+-- function mp.prefix(str)
+-- mpprint(hash[str])
+-- end
+
+local getdimen = tex.getdimen
+local getcount = tex.getcount
+local gettoks = tex.gettoks
+local setdimen = tex.setdimen
+local setcount = tex.setcount
+local settoks = tex.settoks
+
+local mpprint = mp.print
+local mpquoted = mp.quoted
+
+local factor = number.dimenfactors.bp
+
+-- more helpers
+
+function mp.getdimen(k) mpprint (getdimen(k)*factor) end
+function mp.getcount(k) mpprint (getcount(k)) end
+function mp.gettoks (k) mpquoted(gettoks (k)) end
+function mp.setdimen(k,v) setdimen(k,v/factor) end
+function mp.setcount(k,v) setcount(k,v) end
+function mp.settoks (k,v) settoks (k,v) end
+
+-- def foo = lua.mp.foo ... enddef ; % loops due to foo in suffix
+
+mp._get_dimen_ = mp.getdimen
+mp._get_count_ = mp.getcount
+mp._get_toks_ = mp.gettoks
+mp._set_dimen_ = mp.setdimen
+mp._set_count_ = mp.setcount
+mp._set_toks_ = mp.settoks
+
+-- position fun
+
+do
+
+ local mprint = mp.print
+ local fprint = mp.fprint
+ local qprint = mp.quoted
+ local getwhd = job.positions.whd
+ local getxy = job.positions.xy
+ local getposition = job.positions.position
+ local getpage = job.positions.page
+ local getregion = job.positions.region
+ local getmacro = tokens.getters.macro
+
+ function mp.positionpath(name)
+ local w, h, d = getwhd(name)
+ if w then
+ fprint("((%p,%p)--(%p,%p)--(%p,%p)--(%p,%p)--cycle)",0,-d,w,-d,w,h,0,h)
+ else
+ mprint("(origin--cycle)")
+ end
+ end
+
+ function mp.positioncurve(name)
+ local w, h, d = getwhd(name)
+ if w then
+ fprint("((%p,%p)..(%p,%p)..(%p,%p)..(%p,%p)..cycle)",0,-d,w,-d,w,h,0,h)
+ else
+ mprint("(origin--cycle)")
+ end
+ end
+
+ function mp.positionbox(name)
+ local p, x, y, w, h, d = getposition(name)
+ if p then
+ fprint("((%p,%p)--(%p,%p)--(%p,%p)--(%p,%p)--cycle)",x,y-d,x+w,y-d,x+w,y+h,x,y+h)
+ else
+ mprint("(%p,%p)",x,y)
+ end
+ end
+
+ function mp.positionxy(name)
+ local x, y = getxy(name)
+ if x then
+ fprint("(%p,%p)",x,y)
+ else
+ mprint("origin")
+ end
+ end
+
+ function mp.positionpage(name)
+ local p = getpage(name)
+ if p then
+ fprint("%p",p)
+ else
+ mprint("0")
+ end
+ end
+
+ function mp.positionregion(name)
+ local r = getregion(name)
+ if r then
+ qprint(r)
+ else
+ qprint("unknown")
+ end
+ end
+
+ function mp.positionwhd(name)
+ local w, h, d = getwhd(name)
+ if w then
+ fprint("(%p,%p,%p)",w,h,d)
+ else
+ mprint("(0,0,0)")
+ end
+ end
+
+ function mp.positionpxy(name)
+ local p, x, y = getposition(name)
+ if p then
+ fprint("(%p,%p,%p)",p,x,y)
+ else
+ mprint("(0,0,0)")
+ end
+ end
+
+ function mp.positionanchor()
+ qprint(getmacro("MPanchorid"))
+ end
+
+end
+
+do
+
+ local mprint = mp.print
+ local qprint = mp.quoted
+ local getmacro = tokens.getters.macro
+
+ function mp.texvar(name)
+ mprint(getmacro(metapost.namespace .. name))
+ end
+
+ function mp.texstr(name)
+ qprint(getmacro(metapost.namespace .. name))
+ end
+
+end
diff --git a/tex/context/base/mkiv/mlib-pdf.lua b/tex/context/base/mkiv/mlib-pdf.lua
index a2d4638a9..0c2945316 100644
--- a/tex/context/base/mkiv/mlib-pdf.lua
+++ b/tex/context/base/mkiv/mlib-pdf.lua
@@ -31,6 +31,7 @@ local pen_info = mplib.pen_info
local object_fields = mplib.fields
local save_table = false
+local force_stroke = false
metapost = metapost or { }
local metapost = metapost
@@ -68,6 +69,10 @@ directives.register("metapost.savetable",function(v)
end
end)
+trackers.register("metapost.forcestroke",function(v)
+ force_stroke = v
+end)
+
local pdfliteral = function(pdfcode)
local literal = copy_node(mpsliteral)
literal.data = pdfcode
@@ -136,15 +141,13 @@ function pdfflusher.comment(message)
message = formatters["%% mps graphic %s: %s"](metapost.n,message)
if experiment then
context(pdfliteral(message))
+ elseif savedliterals then
+ local last = #savedliterals + 1
+ savedliterals[last] = message
+ context.MPLIBtoPDF(last)
else
- if savedliterals then
- local last = #savedliterals + 1
- savedliterals[last] = message
- context.MPLIBtoPDF(last)
- else
- savedliterals = { message }
- context.MPLIBtoPDF(1)
- end
+ savedliterals = { message }
+ context.MPLIBtoPDF(1)
end
end
end
@@ -342,7 +345,7 @@ local variable =
local pattern_lst = (variable * newline^0)^0
-metapost.variables = { } -- to be stacked
+metapost.variables = { } -- currently across instances
metapost.properties = { } -- to be stacked
function metapost.untagvariable(str,variables) -- will be redone
@@ -387,11 +390,9 @@ local function setproperties(figure)
return properties
end
-local function setvariables(figure)
- local variables = { }
- metapost.variables = variables
- return variables
-end
+local function nocomment() end
+
+metapost.comment = nocomment
function metapost.flush(result,flusher,askedfig)
if result then
@@ -407,7 +408,7 @@ function metapost.flush(result,flusher,askedfig)
local flushfigure = flusher.flushfigure
local textfigure = flusher.textfigure
local processspecial = flusher.processspecial or metapost.processspecial
- local variables = setvariables(figure) -- also resets then in case of not found
+ metapost.comment = flusher.comment or nocomment
for index=1,#figures do
local figure = figures[index]
local properties = setproperties(figure)
@@ -564,11 +565,13 @@ function metapost.flush(result,flusher,askedfig)
else
flushnormalpath(path,result,open)
end
- if objecttype == "fill" then
+ if force_stroke then
+ result[#result+1] = open and "S" or "h S"
+ elseif 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
+ result[#result+1] = evenodd and "h B*" or "h B" -- B* = eo
else
result[#result+1] = open and "S" or "h S"
end
@@ -601,7 +604,9 @@ function metapost.flush(result,flusher,askedfig)
else
flushnormalpath(path,result,open)
end
- if objecttype == "fill" then
+ if force_stroke then
+ result[#result+1] = open and "S" or "h S"
+ elseif 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"
@@ -632,6 +637,7 @@ function metapost.flush(result,flusher,askedfig)
end
end
end
+ metapost.comment = nocomment
end
end
end
diff --git a/tex/context/base/mkiv/mlib-pdf.mkiv b/tex/context/base/mkiv/mlib-pdf.mkiv
index 78dab716d..5875c7635 100644
--- a/tex/context/base/mkiv/mlib-pdf.mkiv
+++ b/tex/context/base/mkiv/mlib-pdf.mkiv
@@ -93,7 +93,7 @@
\def\startMPLIBtoPDF#1#2#3#4%
{\meta_process_graphic_figure_start
\dostarttagged\t!mpgraphic\empty
- \naturalhbox attr \imageattribute 1 \bgroup
+ \naturalhpack attr \imageattribute \plusone \bgroup
\dousecolorparameter\s!black\forcecolorhack
\setMPboundingbox{#1}{#2}{#3}{#4}%
\setbox\MPbox\vpack\bgroup
diff --git a/tex/context/base/mkiv/mlib-pps.lua b/tex/context/base/mkiv/mlib-pps.lua
index c016e0f36..9fc8fec35 100644
--- a/tex/context/base/mkiv/mlib-pps.lua
+++ b/tex/context/base/mkiv/mlib-pps.lua
@@ -8,25 +8,26 @@ if not modules then modules = { } end modules ['mlib-pps'] = {
local format, gmatch, match, split = string.format, string.gmatch, string.match, string.split
local tonumber, type, unpack = tonumber, type, unpack
-local round = math.round
+local round, sqrt, min, max = math.round, math.sqrt, math.min, math.max
local insert, remove, concat = table.insert, table.remove, table.concat
local Cs, Cf, C, Cg, Ct, P, S, V, Carg = lpeg.Cs, lpeg.Cf, lpeg.C, lpeg.Cg, lpeg.Ct, lpeg.P, lpeg.S, lpeg.V, lpeg.Carg
local lpegmatch, tsplitat, tsplitter = lpeg.match, lpeg.tsplitat, lpeg.tsplitter
local formatters = string.formatters
+local exists, savedata = io.exists, io.savedata
-local mplib, metapost, lpdf, context = mplib, metapost, lpdf, context
-
+local mplib = mplib
+local metapost = metapost
+local lpdf = lpdf
local context = context
-local context_setvalue = context.setvalue
local implement = interfaces.implement
local setmacro = interfaces.setmacro
-local texgetbox = tex.getbox
+----- texgetbox = tex.getbox
local texsetbox = tex.setbox
-local textakebox = tex.takebox
+local textakebox = tex.takebox -- or: nodes.takebox
local copy_list = node.copy_list
-local free_list = node.flush_list
+local flush_list = node.flush_list
local setmetatableindex = table.setmetatableindex
local sortedhash = table.sortedhash
@@ -62,6 +63,7 @@ local makempy = metapost.makempy
local nooutercolor = "0 g 0 G"
local nooutertransparency = "/Tr0 gs" -- only when set
local outercolormode = 0
+local outercolormodel = 1
local outercolor = nooutercolor
local outertransparency = nooutertransparency
local innercolor = nooutercolor
@@ -73,7 +75,8 @@ local pdftransparency = lpdf.transparency
function metapost.setoutercolor(mode,colormodel,colorattribute,transparencyattribute)
-- has always to be called before conversion
-- todo: transparency (not in the mood now)
- outercolormode = mode
+ outercolormode = mode
+ outercolormodel = colormodel
if mode == 1 or mode == 3 then
-- inherit from outer (registered color)
outercolor = pdfcolor(colormodel,colorattribute) or nooutercolor
@@ -181,7 +184,7 @@ local function checkandconvert(ca,cb,model)
normalize(cb,ca)
end
if not model then
- model = colors.model
+ model = colors.currentnamedmodel()
end
if model == "all" then
model= (#ca == 4 and "cmyk") or (#ca == 3 and "rgb") or "gray"
@@ -257,10 +260,10 @@ end
local function stopjob()
if top then
- for n, tn in next, top.textexts do
- free_list(tn)
+ for slot, content in next, top.textexts do
+ flush_list(content)
if trace_textexts then
- report_textexts("freeing text %s",n)
+ report_textexts("freeing text %s",slot)
end
end
if trace_runs then
@@ -283,24 +286,17 @@ local function settext(box,slot)
-- 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
- -- top.textexts[slot] = textakebox(box)
- else
- -- weird error
+ top.textexts[slot] = textakebox(box)
end
end
local function gettext(box,slot)
if top then
+ -- maybe check how often referenced
texsetbox(box,copy_list(top.textexts[slot]))
-- 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
end
end
@@ -446,6 +442,11 @@ function models.gray(cr)
return checked_color_pair(f_gray,s,s)
end
+models[1] = models.all
+models[2] = models.gray
+models[3] = models.rgb
+models[4] = models.cmyk
+
setmetatableindex(models, function(t,k)
local v = models.gray
t[k] = v
@@ -453,7 +454,8 @@ setmetatableindex(models, function(t,k)
end)
local function colorconverter(cs)
- return models[colors.model](cs)
+ -- return models[colors.currentmodel()](cs)
+ return models[outercolormodel](cs)
end
local btex = P("btex")
@@ -509,7 +511,7 @@ local parser = Cs((
+ 1
)^0)
-local checking_enabled = true directives.register("metapost.checktexts",function(v) checking_enabled = v end)
+local checking_enabled = false directives.register("metapost.checktexts",function(v) checking_enabled = v end)
local function checktexts(str)
if checking_enabled then
@@ -524,12 +526,6 @@ metapost.checktexts = checktexts
local factor = 65536*(7227/7200)
--- function metapost.edefsxsy(wd,ht,dp) -- helper for figure
--- local hd = ht + dp
--- context_setvalue("sx",wd ~= 0 and factor/wd or 0)
--- context_setvalue("sy",hd ~= 0 and factor/hd or 0)
--- end
-
implement {
name = "mpsetsxsy",
arguments = { "dimen", "dimen", "dimen" },
@@ -651,6 +647,7 @@ function metapost.graphic_base_pass(specification) -- name will change (see mlib
local inclusions = specification.inclusions or ""
local initializations = specification.initializations or ""
local askedfig = specification.figure -- no default else no wrapper
+ metapost.namespace = specification.namespace or ""
--
local askedfig, wrappit = checkaskedfig(askedfig)
--
@@ -728,7 +725,9 @@ function metapost.graphic_base_pass(specification) -- name will change (see mlib
report_metapost("running job %s, asked figure %a",nofruns,askedfig)
end
processmetapost(mpx, {
- preamble,
+ definitions,
+ extensions,
+ inclusions,
wrappit and do_begin_fig or "",
do_first_run,
no_trial_run,
@@ -741,6 +740,8 @@ function metapost.graphic_base_pass(specification) -- name will change (see mlib
context(stopjob)
end
+-- we overload metapost.process here
+
function metapost.process(mpx, data, trialrun, flusher, multipass, isextrapass, askedfig, plugmode) -- overloads
startjob(plugmode)
processmetapost(mpx, data, trialrun, flusher, multipass, isextrapass, askedfig)
@@ -763,11 +764,33 @@ implement {
arguments = "string"
}
+local pdftompy = sandbox.registerrunner {
+ name = "mpy:pstoedit",
+ program = "pstoedit",
+ template = "-ssp -dt -f mpost %pdffile% %mpyfile%",
+ checkers = {
+ pdffile = "writable",
+ mpyfile = "readable",
+ },
+ reporter = report_metapost,
+}
+
+local textopdf = sandbox.registerrunner {
+ name = "mpy:context",
+ program = "context",
+ template = "--once %runmode% %texfile%",
+ checkers = {
+ runmode = "string",
+ texfile = "readable",
+ },
+ reporter = report_metapost,
+}
+
function makempy.processgraphics(graphics)
if #graphics == 0 then
return
end
- if mpyfilename and io.exists(mpyfilename) then
+ if mpyfilename and exists(mpyfilename) then
report_metapost("using file: %s",mpyfilename)
return
end
@@ -777,16 +800,17 @@ function makempy.processgraphics(graphics)
local mpyfile = file.replacesuffix(mpofile,"mpy")
local pdffile = file.replacesuffix(mpofile,"pdf")
local texfile = file.replacesuffix(mpofile,"tex")
- io.savedata(texfile, { start, preamble, metapost.tex.get(), concat(graphics,"\n"), stop }, "\n")
- local command = format("context --once %s %s", (tex.interactionmode == 0 and "--batchmode") or "", texfile)
- os.execute(command)
- if io.exists(pdffile) then
- command = format("pstoedit -ssp -dt -f mpost %s %s", pdffile, mpyfile)
- logs.newline()
- report_metapost("running: %s",command)
- logs.newline()
- os.execute(command)
- if io.exists(mpyfile) then
+ savedata(texfile, { start, preamble, metapost.tex.get(), concat(graphics,"\n"), stop }, "\n")
+ textopdf {
+ runmode = tex.interactionmode == 0 and "--batchmode" or "",
+ texfile = texfile,
+ }
+ if exists(pdffile) then
+ pdftompy {
+ pdffile = pdffile,
+ mpyfile = mpyfile,
+ }
+ if exists(mpyfile) then
local result, r = { }, 0
local data = io.loaddata(mpyfile)
if data and #data > 0 then
@@ -794,7 +818,7 @@ function makempy.processgraphics(graphics)
r = r + 1
result[r] = formatters["begingraphictextfig%sendgraphictextfig ;\n"](figure)
end
- io.savedata(mpyfile,concat(result,""))
+ savedata(mpyfile,concat(result,""))
end
end
end
@@ -833,7 +857,15 @@ local function splitprescript(script)
local hash = lpegmatch(scriptsplitter,script)
for i=#hash,1,-1 do
local h = hash[i]
+if h == "reset" then
+ for k, v in next, hash do
+ if type(k) ~= "number" then
+ hash[k] = nil
+ end
+ end
+else
hash[h[1]] = h[2]
+end
end
if trace_scripts then
report_scripts(table.serialize(hash,"prescript"))
@@ -874,6 +906,9 @@ end
function metapost.resetplugins(t) -- intialize plugins, before figure
if top.plugmode then
+
+ outercolormodel = colors.currentmodel() -- currently overloads the one set at the tex end
+
-- plugins can have been added
resetter = resetteractions.runner
analyzer = analyzeractions.runner
@@ -920,15 +955,16 @@ local function cm(object)
local op = object.path
if op then
local first, second, fourth = op[1], op[2], op[4]
- local tx, ty = first.x_coord , first.y_coord
- local sx, sy = second.x_coord - tx, fourth.y_coord - ty
- local rx, ry = second.y_coord - ty, fourth.x_coord - tx
- if sx == 0 then sx = 0.00001 end
- if sy == 0 then sy = 0.00001 end
- return sx, rx, ry, sy, tx, ty
- else
- return 1, 0, 0, 1, 0, 0 -- weird case
+ if fourth then
+ local tx, ty = first.x_coord , first.y_coord
+ local sx, sy = second.x_coord - tx, fourth.y_coord - ty
+ local rx, ry = second.y_coord - ty, fourth.x_coord - tx
+ if sx == 0 then sx = 0.00001 end
+ if sy == 0 then sy = 0.00001 end
+ return sx, rx, ry, sy, tx, ty
+ end
end
+ return 1, 0, 0, 1, 0, 0 -- weird case
end
-- color
@@ -937,6 +973,8 @@ local function cl_reset(t)
t[#t+1] = metapost.colorinitializer() -- only color
end
+-- text
+
local function tx_reset()
if top then
-- why ?
@@ -964,6 +1002,25 @@ local ctx_MPLIBsettext = context.MPLIBsettext
-- 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 eol = S("\n\r")^1
+local cleaner = Cs((P("@@")/"@" + P("@")/"%%" + P(1))^0)
+local splitter = Ct(
+ ( (
+ P("s:") * C((1-eol)^1)
+ + P("n:") * ((1-eol)^1/tonumber)
+ + P("b:") * ((1-eol)^1/toboolean)
+ ) * eol^0 )^0)
+
+local function applyformat(s)
+ local t = lpegmatch(splitter,s)
+ if #t == 1 then
+ return s
+ else
+ local f = lpegmatch(cleaner,t[1])
+ return formatters[f](unpack(t,2))
+ end
+end
+
local function tx_analyze(object,prescript)
local data = top.texdata[metapost.properties.number]
local tx_stage = prescript.tx_stage
@@ -979,6 +1036,9 @@ local function tx_analyze(object,prescript)
c = lpegmatch(pat,txc)
end
end
+ if prescript.tx_type == "format" then
+ s = applyformat(s)
+ end
local a = tonumber(prescript.tr_alternative)
local t = tonumber(prescript.tr_transparency)
local h = fmt(tx_number,a or "-",t or "-",c or "-")
@@ -1089,6 +1149,37 @@ local function tx_process(object,prescript,before,after)
end
end
+-- we could probably redo normal textexts in the next way but as it's rather optimized
+-- we keep away from that (at least for now)
+
+local function bx_process(object,prescript,before,after)
+ local bx_category = prescript.bx_category
+ local bx_name = prescript.bx_name
+ if bx_category and bx_name then
+ if trace_textexts then
+ report_textexts("category %a, name %a",bx_category,bx_name)
+ end
+ local sx, rx, ry, sy, tx, ty = cm(object) -- needs to be frozen outside the function
+ local wd, ht, dp = nodes.boxes.dimensions(bx_category,bx_name)
+ before[#before+1] = function()
+ context.MPLIBgetboxscaledcm(bx_category,bx_name,
+ f_f(sx), -- bah ... %s no longer checks
+ f_f(rx), -- bah ... %s no longer checks
+ f_f(ry), -- bah ... %s no longer checks
+ f_f(sy), -- bah ... %s no longer checks
+ f_f(tx), -- bah ... %s no longer checks
+ f_f(ty), -- bah ... %s no longer checks
+ sxsy(wd,ht,dp))
+ end
+ if not trace_textexts then
+ object.path = false -- else: keep it
+ end
+ object.color = false
+ object.grouped = true
+ object.istext = true
+ end
+end
+
-- graphics (we use the given index because pictures can be reused)
local graphics = { }
@@ -1122,10 +1213,53 @@ 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 steps = tonumber(prescript.sh_step) or 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 transform = toboolean(prescript.sh_transform or "yes",true)
+ -- compensation for scaling
+ local sx = 1
+ local sy = 1
+ local sr = 1
+ local dx = 0
+ local dy = 0
+ if transform then
+ local first = lpegmatch(coordinatesplitter,prescript.sh_first or "0 0")
+ local setx = lpegmatch(coordinatesplitter,prescript.sh_set_x or "0 0")
+ local sety = lpegmatch(coordinatesplitter,prescript.sh_set_y or "0 0")
+
+ local x = setx[1] -- point that has different x
+ local y = sety[1] -- point that has different y
+
+ if x == 0 or y == 0 then
+ -- forget about it
+ else
+ local path = object.path
+ local path1x = path[1].x_coord
+ local path1y = path[1].y_coord
+ local path2x = path[x].x_coord
+ local path2y = path[y].y_coord
+
+ local dxa = path2x - path1x
+ local dya = path2y - path1y
+ local dxb = setx[2] - first[1]
+ local dyb = sety[2] - first[2]
+
+ if dxa == 0 or dya == 0 or dxb == 0 or dyb == 0 then
+ -- forget about it
+ else
+ sx = dxa / dxb ; if sx < 0 then sx = - sx end -- yes or no
+ sy = dya / dyb ; if sy < 0 then sy = - sy end -- yes or no
+
+ sr = sqrt(sx^2 + sy^2)
+
+ dx = path1x - sx*first[1]
+ dy = path1y - sy*first[2]
+ end
+ end
+ end
+
+ 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
@@ -1183,13 +1317,13 @@ local function sh_process(object,prescript,before,after)
steps = 1
end
if sh_type == "linear" then
- local coordinates = { centera[1], centera[2], centerb[1], centerb[2] }
+ local coordinates = { dx + sx*centera[1], dy + sy*centera[2], dx + sx*centerb[1], dy + sy*centerb[2] }
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 }
+ local coordinates = { dx + sx*centera[1], dy + sy*centera[2], sr*radiusa, dx + sx*centerb[1], dy + sy*centerb[2], sr*radiusb }
lpdf.circularshade(name,domain,ca,cb,1,colorspace,coordinates,separation,steps>1 and steps,fractions) -- backend specific (will be renamed)
else
-- fatal error
@@ -1302,7 +1436,7 @@ local function tr_process(object,prescript,before,after)
defineprocesscolor(sp_temp,r and r(unpack(s)) or "s=0",true,true)
definespotcolor(sp_name,sp_temp,"p=1",true)
sp_type = "named"
- elseif sp_type == "multitone" then
+ elseif sp_type == "multitone" then -- (fractions of a multitone) don't work well in mupdf
local sp_value = prescript.sp_value or "s:1"
local sp_spec = { }
local sp_list = split(sp_value," ")
@@ -1391,28 +1525,31 @@ local types = {
local function gr_process(object,prescript,before,after)
local gr_state = prescript.gr_state
- if gr_state then
- if gr_state == "start" then
- local gr_type = utilities.parsers.settings_to_hash(prescript.gr_type)
- before[#before+1] = function()
- context.MPLIBstartgroup(
- gr_type.isolated and 1 or 0,
- gr_type.knockout and 1 or 0,
- prescript.gr_llx,
- prescript.gr_lly,
- prescript.gr_urx,
- prescript.gr_ury
- )
- end
- elseif gr_state == "stop" then
- after[#after+1] = function()
- context.MPLIBstopgroup()
- end
+ if not gr_state then
+ return
+ elseif gr_state == "start" then
+ local gr_type = utilities.parsers.settings_to_set(prescript.gr_type)
+ local path = object.path
+ local p1, p2, p3, p4 = path[1], path[2], path[3], path[4]
+ local llx = min(p1.x_coord,p2.x_coord,p3.x_coord,p4.x_coord)
+ local lly = min(p1.y_coord,p2.y_coord,p3.y_coord,p4.y_coord)
+ local urx = max(p1.x_coord,p2.x_coord,p3.x_coord,p4.x_coord)
+ local ury = max(p1.y_coord,p2.y_coord,p3.y_coord,p4.y_coord)
+ before[#before+1] = function()
+ context.MPLIBstartgroup(
+ gr_type.isolated and 1 or 0,
+ gr_type.knockout and 1 or 0,
+ llx, lly, urx, ury
+ )
+ end
+ elseif gr_state == "stop" then
+ after[#after+1] = function()
+ context.MPLIBstopgroup()
end
- object.path = false
- object.color = false
- object.grouped = true
end
+ object.path = false
+ object.color = false
+ object.grouped = true
end
-- outlines
@@ -1472,6 +1609,7 @@ appendaction(processoractions,"system",sh_process)
-- (processoractions,"system",gt_process)
appendaction(processoractions,"system",bm_process)
appendaction(processoractions,"system",tx_process)
+appendaction(processoractions,"system",bx_process)
appendaction(processoractions,"system",ps_process)
appendaction(processoractions,"system",fg_process)
appendaction(processoractions,"system",tr_process) -- last, as color can be reset
diff --git a/tex/context/base/mkiv/mlib-pps.mkiv b/tex/context/base/mkiv/mlib-pps.mkiv
index cdccfc379..a2eb44826 100644
--- a/tex/context/base/mkiv/mlib-pps.mkiv
+++ b/tex/context/base/mkiv/mlib-pps.mkiv
@@ -91,6 +91,33 @@
\smashbox\MPbox
\box\MPbox}
+% \putnextboxincache{hans}{1}\hbox{foo}
+%
+% \startMPcode
+% draw boundingbox rawtexbox("hans",1) ;
+% draw rawtexbox("hans",1) ;
+% \stopMPcode
+
+\unexpanded\def\MPLIBgetboxscaledcm#1#2%
+ {\begingroup
+ \copyboxfromcache{#1}{#2}\MPtextbox % can be \clf_
+ \MPLIBgetboxscaledcm_next}
+
+\unexpanded\def\MPLIBgetboxscaledcm_next#1#2#3#4#5#6#7#8% 1-6: sx,rx,ry,sy,tx,ty
+ {\setbox\MPbox\hpack\bgroup
+ \dotransformnextbox{#1}{#2}{#3}{#4}{#5}{#6}%
+ \vpack to \zeropoint\bgroup
+ \vss
+ \hpack to \zeropoint \bgroup
+ \fastsxsy{#7}{#8}{\raise\dp\MPtextbox\box\MPtextbox}%
+ \hss
+ \egroup
+ \egroup
+ \egroup
+ \smashbox\MPbox
+ \box\MPbox
+ \endgroup}
+
\unexpanded\def\MPLIBgraphictext#1% use at mp end
{\startTEXpage[\c!scale=10000]#1\stopTEXpage}
@@ -134,12 +161,19 @@
\wd\scratchbox \dimexpr#5\onebasepoint-#3\onebasepoint+2\onebasepoint\relax
\ht\scratchbox #6\onebasepoint
\dp\scratchbox-#4\onebasepoint
+ \setbox\scratchbox\hpack\bgroup
+ \kern-#3\onebasepoint
+ \box\scratchbox
+ \egroup
\saveboxresource
- attr {/Group << /S /Transparency /I \ifnum#1=1 true \else false \fi /K \ifnum#1=1 true \else false \fi >>}
+ attr {/Group << /S /Transparency /I \ifnum#1=1 true \else false \fi /K \ifnum#2=1 true \else false \fi >>}
resources {\pdfbackendcurrentresources}
\scratchbox
- % \setbox\scratchbox\hbox\bgroup\kern-\onebasepoint\useboxresource\lastsavedboxresourceindex\egroup % why twice?
- \setbox\scratchbox\hpack\bgroup\kern-\onebasepoint\useboxresource\lastsavedboxresourceindex\egroup
+ \setbox\scratchbox\hpack\bgroup
+ \kern#3\onebasepoint
+ \kern-\onebasepoint
+ \useboxresource\lastsavedboxresourceindex
+ \egroup
\wd\scratchbox\zeropoint
\ht\scratchbox\zeropoint
\dp\scratchbox\zeropoint
diff --git a/tex/context/base/mkiv/mlib-run.lua b/tex/context/base/mkiv/mlib-run.lua
index 8109cff2d..93ce1fec2 100644
--- a/tex/context/base/mkiv/mlib-run.lua
+++ b/tex/context/base/mkiv/mlib-run.lua
@@ -6,12 +6,12 @@ if not modules then modules = { } end modules ['mlib-run'] = {
license = "see context related readme files",
}
---~ cmyk -> done, native
---~ spot -> done, but needs reworking (simpler)
---~ multitone ->
---~ shade -> partly done, todo: cm
---~ figure -> done
---~ hyperlink -> low priority, easy
+-- cmyk -> done, native
+-- spot -> done, but needs reworking (simpler)
+-- multitone ->
+-- shade -> partly done, todo: cm
+-- figure -> done
+-- hyperlink -> low priority, easy
-- new * run
-- or
@@ -30,8 +30,10 @@ nears zero.</p>
--ldx]]--
local type, tostring, tonumber = type, tostring, tonumber
-local format, gsub, match, find = string.format, string.gsub, string.match, string.find
-local concat = table.concat
+local gsub, match, find = string.gsub, string.match, string.find
+local striplines = utilities.strings.striplines
+local concat, insert, remove = table.concat, table.insert, table.remove
+
local emptystring = string.is_empty
local P = lpeg.P
@@ -93,8 +95,7 @@ do
local finders = { }
mplib.finders = finders -- also used in meta-lua.lua
- local new_instance = mplib.new
- local resolved_file = resolvers.findfile
+ local new_instance = mplib.new
local function preprocessed(name)
if not mpbasepath(name) then
@@ -160,14 +161,15 @@ function metapost.reporterror(result)
report_metapost("error: no result object returned")
elseif result.status > 0 then
local t, e, l = result.term, result.error, result.log
+ local report = metapost.texerrors and texerrormessage or report_metapost
if t and t ~= "" then
- (metapost.texerrors and texerrormessage or report_metapost)("terminal: %s",t)
+ report("mp error: %s",striplines(t))
end
if e == "" or e == "no-error" then
e = nil
end
if e then
- (metapost.texerrors and texerrormessage or report_metapost)("error: %s",e)
+ report("mp error: %s",striplines(e))
end
if not t and not e and l then
metapost.lastlog = metapost.lastlog .. "\n" .. l
@@ -185,6 +187,7 @@ local f_preamble = formatters [ [[
boolean mplib ; mplib := true ;
let dump = endinput ;
input "%s" ;
+ randomseed:=%s;
]] ]
local methods = {
@@ -217,8 +220,18 @@ function metapost.maketext(s,mode)
end
end
+local seed = nil
+
function metapost.load(name,method)
starttiming(mplib)
+ if not seed then
+ seed = job.getrandomseed()
+ if seed <= 1 then
+ seed = seed % 1000
+ elseif seed > 4095 then
+ seed = seed % 4096
+ end
+ end
method = method and methods[method] or "scaled"
local mpx = new_instance {
ini_version = true,
@@ -227,13 +240,14 @@ function metapost.load(name,method)
script_error = metapost.scripterror,
make_text = metapost.maketext,
extensions = 1,
+ -- random_seed = seed,
}
report_metapost("initializing number mode %a",method)
local result
if not mpx then
result = { status = 99, error = "out of memory"}
else
- result = mpx:execute(f_preamble(file.addsuffix(name,"mp"))) -- addsuffix is redundant
+ result = mpx:execute(f_preamble(file.addsuffix(name,"mp"),seed)) -- addsuffix is redundant
end
stoptiming(mplib)
metapost.reporterror(result)
@@ -241,9 +255,8 @@ function metapost.load(name,method)
end
function metapost.checkformat(mpsinput,method)
- local mpsversion = environment.version or "unset version"
- local mpsinput = mpsinput or "metafun"
- local foundfile = ""
+ local mpsinput = mpsinput or "metafun"
+ local foundfile = ""
if file.suffix(mpsinput) ~= "" then
foundfile = find_file(mpsinput) or ""
end
@@ -326,6 +339,46 @@ if not metapost.initializescriptrunner then
function metapost.initializescriptrunner() end
end
+do
+
+ local stack, top = { }, nil
+
+ function metapost.setvariable(k,v)
+ if top then
+ top[k] = v
+ else
+ metapost.variables[k] = v
+ end
+ end
+
+ function metapost.pushvariable(k)
+ local t = { }
+ if top then
+ insert(stack,top)
+ top[k] = t
+ else
+ metapost.variables[k] = t
+ end
+ top = t
+ end
+
+ function metapost.popvariable()
+ top = remove(stack)
+ end
+
+ local stack = { }
+
+ function metapost.pushvariables()
+ insert(stack,metapost.variables)
+ metapost.variables = { }
+ end
+
+ function metapost.popvariables()
+ metapost.variables = remove(stack) or metapost.variables
+ end
+
+end
+
function metapost.process(mpx, data, trialrun, flusher, multipass, isextrapass, askedfig)
local converted, result = false, { }
if type(mpx) == "string" then
@@ -334,6 +387,7 @@ function metapost.process(mpx, data, trialrun, flusher, multipass, isextrapass,
if mpx and data then
local tra = nil
starttiming(metapost)
+ metapost.variables = { }
metapost.initializescriptrunner(mpx,trialrun)
if trace_graphics then
tra = mp_tra[mpx]
@@ -376,75 +430,60 @@ function metapost.process(mpx, data, trialrun, flusher, multipass, isextrapass,
end
-- end of hacks
end
- if type(data) == "table" then
- if trace_tracingall then
- mpx:execute("tracingall;")
- end
- -- table.insert(data,2,"")
- for i=1,#data do
- local d = data[i]
- -- d = string.gsub(d,"\r","")
- if d then
- if trace_graphics then
+
+ local function process(d,i)
+ -- d = string.gsub(d,"\r","")
+ if d then
+ if trace_graphics then
+ if i then
tra.inp:write(formatters["\n%% begin snippet %s\n"](i))
- tra.inp:write(d)
+ end
+ tra.inp:write(d)
+ if i then
tra.inp:write(formatters["\n%% end snippet %s\n"](i))
end
- starttiming(metapost.exectime)
- result = mpx:execute(d) -- some day we wil use a coroutine with textexts
- stoptiming(metapost.exectime)
- if trace_graphics and result then
- local str = result.log or result.error
- if str and str ~= "" then
- tra.log:write(str)
- end
+ end
+ starttiming(metapost.exectime)
+ result = mpx:execute(d) -- some day we wil use a coroutine with textexts
+ stoptiming(metapost.exectime)
+ if trace_graphics and result then
+ local str = result.log or result.error
+ if str and str ~= "" then
+ tra.log:write(str)
end
- if not metapost.reporterror(result) then
- if metapost.showlog then
- local str = result.term ~= "" and result.term or "no terminal output"
- if not emptystring(str) then
- metapost.lastlog = metapost.lastlog .. "\n" .. str
- report_metapost("log: %s",str)
- end
- end
- if result.fig then
- converted = metapost.convert(result, trialrun, flusher, multipass, askedfig)
+ end
+ if not metapost.reporterror(result) then
+ if metapost.showlog then
+ local str = result.term ~= "" and result.term or "no terminal output"
+ if not emptystring(str) then
+ metapost.lastlog = metapost.lastlog .. "\n" .. str
+ report_metapost("log: %s",str)
end
end
- else
- report_metapost("error: invalid graphic component %s",i)
+ if result.fig then
+ converted = metapost.convert(result, trialrun, flusher, multipass, askedfig)
+ end
end
+ elseif i then
+ report_metapost("error: invalid graphic component %s",i)
+ else
+ report_metapost("error: invalid graphic")
end
- else
+ end
+
+ if type(data) == "table" then
if trace_tracingall then
- data = "tracingall;" .. data
- end
- if trace_graphics then
- tra.inp:write(data)
+ mpx:execute("tracingall;")
end
- starttiming(metapost.exectime)
- result = mpx:execute(data)
- stoptiming(metapost.exectime)
- if trace_graphics and result then
- local str = result.log or result.error
- if str and str ~= "" then
- tra.log:write(str)
- end
+ -- table.insert(data,2,"")
+ for i=1,#data do
+ process(data[i],i)
end
- -- todo: error message
- if not result then
- report_metapost("error: no result object returned")
- elseif result.status > 0 then
- report_metapost("error: %s",(result.term or "no-term") .. "\n" .. (result.error or "no-error"))
- else
- if metapost.showlog then
- metapost.lastlog = metapost.lastlog .. "\n" .. result.term
- report_metapost("info: %s",result.term or "no-term")
- end
- if result.fig then
- converted = metapost.convert(result, trialrun, flusher, multipass, askedfig)
- end
+ else
+ if trace_tracingall then
+ data = "tracingall;" .. data
end
+ process(data)
end
if trace_graphics then
local banner = "\n% end graphic\n\n"
diff --git a/tex/context/base/mkiv/mtx-context-domotica.tex b/tex/context/base/mkiv/mtx-context-domotica.tex
new file mode 100644
index 000000000..62e6e8786
--- /dev/null
+++ b/tex/context/base/mkiv/mtx-context-domotica.tex
@@ -0,0 +1,167 @@
+%D \module
+%D [ file=mtx-context-domotica,
+%D version=2016.10.20,
+%D title=\CONTEXT\ Extra Trickry,
+%D subtitle=Domotica Goodies,
+%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=domotica [options] list-of-files
+%
+% --topspace=dimension : distance above first line
+% --backspace=dimension : distance before left margin
+% --bodyfont=list : additional bodyfont settings
+% --paperformat=spec : paper*print or paperxprint
+% --compact : small margins, 8pt font
+% --verycompact : small margins, 7pt font
+%
+% --openzwave : process openzwave xml files
+% --hue : process hue task file
+%
+% --pattern=spec : files to process
+%
+% example: context --extra=domotica --openzwave ./config/fibaro/fgms.xml ./open-zwave-master/config/aeotec/zw100.xml
+% example: context --extra=domotica --openzwave --pattern="./open-zwave-master/config/**.xml"
+% example: context --extra=domotica --hue hue-pragma-tasks.lua
+%
+% end help
+
+% --pattern="e:/domotica/open-zwave/open-zwave-master/config/**.xml"
+
+\input mtx-context-common.tex
+
+\usemodule[domotica-settings]
+
+\doifdocumentargument {compact} {
+ \setdocumentargument{topspace} {5mm}
+ \setdocumentargument{backspace}{5mm}
+ \setdocumentargument{bodyfont} {8pt}
+}
+
+\doifdocumentargument {verycompact} {
+ \setdocumentargument{topspace} {5mm}
+ \setdocumentargument{backspace}{5mm}
+ \setdocumentargument{bodyfont} {7pt}
+}
+
+\setupbodyfont
+ [dejavu,11pt,\getdocumentargument{bodyfont}] % dejavu is more complete
+
+\setuplayout
+ [header=0cm,
+ footer=1.5cm,
+ topspace=\getdocumentargumentdefault{topspace}{1.5cm},
+ backspace=\getdocumentargumentdefault{backspace}{1.5cm},
+ width=middle,
+ height=middle]
+
+\setuppapersize
+ [\getdocumentargument{paperformat_paper}]
+ [\getdocumentargument{paperformat_print}]
+
+\setuphead
+ [section]
+ [style=bold]
+
+\doifdocumentargument {openzwave} {\enablemode[openzwave]}
+\doifdocumentargument {hue} {\enablemode[hue]}
+
+\startmode[openzwave]
+
+ \starttext
+
+ \setuplist
+ [chapter]
+ [style=bold,
+ width=4em]
+
+ \setuplist
+ [section]
+ [width=4em]
+
+ \setupheadertexts
+
+ \setupheadertexts
+ [chapter][pagenumber]
+
+ \starttitle[title=Zwave devices]
+
+ \placelist[chapter,section]
+
+ \stoptitle
+
+ \startluacode
+ local arguments = document.arguments
+ local files = document.files
+ local pattern = arguments.pattern
+ local noffiles = #files
+
+ if type(pattern) == "string" then
+
+ local pattern = file.addsuffix(pattern,"xml")
+
+ moduledata.zwave.show_settings(pattern)
+
+ elseif noffiles > 0 then
+
+ -- if arguments.sort then
+ -- table.sort(files)
+ -- end
+
+ for i=1,#files do
+ local filename = file.addsuffix(files[i],"xml")
+ moduledata.zwave.show_settings(filename)
+ end
+
+ else
+
+ context("no files given")
+
+ end
+ \stopluacode
+
+ \stoptext
+
+\stopmode
+
+\startmode[hue]
+
+ \starttext
+
+ \setupheadertexts
+
+ \startluacode
+
+ local arguments = document.arguments
+ local files = document.files
+ local pattern = arguments.pattern
+ local filename = files[1]
+
+ if filename then
+ context.starttitle { title = "Hue: " .. file.nameonly(filename) }
+ filename = file.addsuffix(filename,"lua")
+ if lfs.isfile(filename) then
+ moduledata.hue.show_state(filename)
+ else
+ context("unknown file %a",filename)
+ end
+ context.stoptitle()
+ else
+ context("no files given")
+ context.stoptitle()
+ end
+
+ \stopluacode
+
+ \stoptext
+
+\stopmode
+
+
diff --git a/tex/context/base/mkiv/mtx-context-listing.tex b/tex/context/base/mkiv/mtx-context-listing.tex
index 2deffd795..41e468e1f 100644
--- a/tex/context/base/mkiv/mtx-context-listing.tex
+++ b/tex/context/base/mkiv/mtx-context-listing.tex
@@ -82,6 +82,8 @@
mkii = "tex",
cld = "lua",
lfg = "lua",
+ mpiv = "mp",
+ mpii = "mp",
}
local pattern = document.arguments.pattern
diff --git a/tex/context/base/mkiv/mtx-context-xml.tex b/tex/context/base/mkiv/mtx-context-xml.tex
index 9d0680e2a..f8bfeef3a 100644
--- a/tex/context/base/mkiv/mtx-context-xml.tex
+++ b/tex/context/base/mkiv/mtx-context-xml.tex
@@ -18,11 +18,15 @@
% usage: context --extra=xml [options] list-of-files
%
% --analyze : show elements and characters
+% --template : also export template
% --topspace=dimension : distance above first line
% --backspace=dimension : distance before left margin
% --bodyfont=list : additional bodyfont settings
% --paperformat=spec : paper*print or paperxprint
%
+% context --extra=xml --analyze path::i-context.xml
+% context --extra=xml --analyze --template path::i-context.xml
+% context --extra=xml --analyze selfautoparent:texmf-context/tex/context/interface/mkiv/i-*.xml
% end help
\input mtx-context-common.tex
@@ -50,8 +54,10 @@
\starttext
\startluacode
- local pattern = document.arguments.pattern
- local files = document.files
+ local files = document.files
+ local pattern = document.arguments.pattern or (#files == 1 and files[1])
+ local analyze = document.arguments.analyze
+ local template = document.arguments.template
if pattern then
files = dir.glob(pattern)
@@ -61,12 +67,15 @@
end
if #files > 0 then
- if document.arguments.analyze then
- moduledata.xml.analyzers.structure (files)
+ if analyze then
+ moduledata.xml.analyzers.structure(files)
context.page()
moduledata.xml.analyzers.characters(files)
context.page()
moduledata.xml.analyzers.entities(files)
+ if template then
+ moduledata.xml.analyzers.allsetups(files,type(template) == "string" and template or nil)
+ end
else
context("no action given")
end
diff --git a/tex/context/base/mkiv/mult-aux.mkiv b/tex/context/base/mkiv/mult-aux.mkiv
index d44c0242e..a64e09305 100644
--- a/tex/context/base/mkiv/mult-aux.mkiv
+++ b/tex/context/base/mkiv/mult-aux.mkiv
@@ -584,6 +584,11 @@
{\installbasicparameterhandler{#1}{#2}%
\installautosetuphandler {#1}{#2}}
+\unexpanded\def\installstylisticautosetuphandler#1#2#3% \??self name \??parent (can be \??self)
+ {\installbasicparameterhandler{#1}{#2}%
+ \installautosetuphandler {#1}{#2}%
+ \installstyleandcolorhandler {#1}{#2}}
+
\unexpanded\def\installcommandhandler#1#2#3% \??self name \??parent (can be \??self)
{\installbasicparameterhandler{#1}{#2}%
\installdefinehandler {#1}{#2}{#3}%
diff --git a/tex/context/base/mkiv/mult-def.lua b/tex/context/base/mkiv/mult-def.lua
index 681144816..7cee595cd 100644
--- a/tex/context/base/mkiv/mult-def.lua
+++ b/tex/context/base/mkiv/mult-def.lua
@@ -3424,6 +3424,10 @@ return {
["pe"]="دوران",
["ro"]="roteste",
},
+ ["savebuffer"]={
+ ["en"]="savebuffer",
+ ["nl"]="bewaarbuffer",
+ },
["scale"]={
["cs"]="meritko",
["de"]="format",
@@ -3784,6 +3788,10 @@ return {
["pe"]="بارگذاری‌شرح",
["ro"]="seteazadescriere",
},
+ ["setupdescription"]={
+ ["en"]="setupdescription",
+ ["nl"]="steldoordefinierenin",
+ },
["setupenumerations"]={
["cs"]="nastavvycty",
["de"]="stellebeschreibungein",
@@ -3794,6 +3802,10 @@ return {
["pe"]="بارگذاری‌شماره‌گذاریها",
["ro"]="seteazaenumerare",
},
+ ["setupenumeration"]={
+ ["en"]="setupenumeration",
+ ["nl"]="steldoornummerenin",
+ },
["setupexternalfigures"]={
["cs"]="nastavexterniobrazy",
["de"]="stelleexterneabbildungenein",
@@ -3934,6 +3946,10 @@ return {
["pe"]="بارگذاری‌فرمولها",
["ro"]="seteazaformule",
},
+ ["setupformula"]={
+ ["en"]="setupformula",
+ ["nl"]="stelformulein",
+ },
["setupframed"]={
["cs"]="nastavoramovani",
["de"]="stelleumrahmtein",
@@ -3954,6 +3970,10 @@ return {
["pe"]="بارگذاری‌متن‌قالبی",
["ro"]="definestetexteinconjurate",
},
+ ["setupframedtext"]={
+ ["en"]="setupframedtext",
+ ["nl"]="stelkadertekstin",
+ },
["setuphead"]={
["cs"]="nastavnadpis",
["de"]="stelleueberschriftein",
@@ -4228,6 +4248,14 @@ return {
["pe"]="بارگذاری‌بلوکهای‌حاشیه",
["ro"]="seteazablocurimarginale",
},
+ ["setupmarginblock"]={
+ ["en"]="setupmarginblock",
+ ["nl"]="stelmargeblokkenin",
+ },
+ ["setupmargindata"]={
+ ["en"]="setupmargindata",
+ ["nl"]="stelinmargein",
+ },
["setupmarginrules"]={
["cs"]="nastavmarginalnilinky",
["de"]="stellemarginallinieein",
@@ -5032,6 +5060,10 @@ return {
["pe"]="شروع‌تنظیم",
["ro"]="startaliniere",
},
+ ["alignment"]={
+ ["en"]="alignment",
+ ["nl"]="uitlijnen",
+ },
["startbackground"]={
["cs"]="startpozadi",
["de"]="starthintergrund",
@@ -5176,6 +5208,10 @@ return {
["pe"]="شروع‌تصحیح‌خط",
["ro"]="startcorectielinie",
},
+ ["linecorrection"]={
+ ["en"]="linecorrection",
+ ["nl"]="regelcorrectie",
+ },
["startlinenumbering"]={
["cs"]="startcislovaniradku",
["de"]="startzeilennumerierung",
@@ -5216,6 +5252,10 @@ return {
["pe"]="شروع‌پانوشتهای‌موضعی",
["ro"]="startnotesubsollocale",
},
+ ["localfootnotes"]={
+ ["en"]="localfootnotes",
+ ["nl"]="lokalevoetnoten",
+ },
["startmakeup"]={
["cs"]="startuprava",
["de"]="startumbruch",
@@ -5236,6 +5276,10 @@ return {
["pe"]="شروع‌بلوک‌حاشیه",
["ro"]="startblocmarginal",
},
+ ["marginblock"]={
+ ["en"]="marginblock",
+ ["nl"]="margeblok",
+ },
["startmarginrule"]={
["cs"]="startmarginalnilinka",
["de"]="startmarginallinie",
@@ -5410,6 +5454,10 @@ return {
["en"]="starttextbackground",
["nl"]="starttekstachtergrond",
},
+ ["textbackground"]={
+ ["en"]="textbackground",
+ ["nl"]="tekstachtergrond",
+ },
["starttextrule"]={
["cs"]="starttextovalinka",
["de"]="starttextlinie",
@@ -6308,7 +6356,7 @@ return {
["en"]="usedirectory",
["fr"]="utilisechemin",
["it"]="usacartella",
- ["nl"]="gebruikgebied",
+ ["nl"]="gebruikpad",
["pe"]="استفاده‌مسیر",
["ro"]="folosestedirector",
},
@@ -6574,6 +6622,10 @@ return {
["pe"]="جایگزین",
["ro"]="alternativ",
},
+ ["stylealternative"]={
+ ["en"]="stylealternative",
+ ["nl"]="stylevariant",
+ },
["anchor"]={
["en"]="anchor",
["nl"]="anker",
@@ -6591,6 +6643,10 @@ return {
["pe"]="apa",
["ro"]="apa",
},
+ ["arguments"]={
+ ["en"]="arguments",
+ ["nl"]="argumenten",
+ },
["arrow"]={
["cs"]="sipka",
["de"]="pfeil",
@@ -7322,6 +7378,10 @@ return {
["pe"]="پرونده‌تبدیل",
["ro"]="convertestefisier",
},
+ ["copies"]={
+ ["en"]="copies",
+ ["nl"]="kopieen",
+ },
["corner"]={
["cs"]="roh",
["de"]="winkel",
@@ -7685,6 +7745,9 @@ return {
["pe"]="حاشیه‌زوج",
["ro"]="marginepara",
},
+ ["exact"]={
+ ["en"]="exact",
+ },
["exitoffset"]={
["en"]="exitoffset",
},
@@ -8013,6 +8076,10 @@ return {
["pe"]="قالبها",
["ro"]="frames",
},
+ ["freeregion"]={
+ ["en"]="freeregion",
+ ["nl"]="vrijgebied",
+ },
["from"]={
["cs"]="z",
["de"]="von",
@@ -10565,6 +10632,10 @@ return {
["pe"]="توده",
["ro"]="stack",
},
+ ["stackname"]={
+ ["en"]="stackname",
+ ["nl"]="stapelnaam",
+ },
["start"]={
["cs"]="start",
["de"]="start",
@@ -11121,6 +11192,10 @@ return {
["totalnumber"]={
["en"]="totalnumber",
},
+ ["transform"]={
+ ["en"]="transform",
+ ["nl"]="transformatie",
+ },
["translate"]={
["en"]="translate",
},
@@ -12343,6 +12418,10 @@ return {
["pe"]="قطعی",
["ro"]="absolut",
},
+ ["anchor"]={
+ ["en"]="anchor",
+ ["nl"]="anker",
+ },
["action"]={
["cs"]="akce",
["de"]="aktion",
@@ -12901,6 +12980,7 @@ return {
},
["combination"]={
["en"]="combination",
+ ["nl"]="combinatie",
},
["command"]={
["cs"]="prikaz",
@@ -13159,6 +13239,10 @@ return {
["pe"]="لبه",
["ro"]="bordura",
},
+ ["effective"]={
+ ["en"]="effective",
+ ["nl"]="effectief",
+ },
["embed"]={
["en"]="embed",
["nl"]="sluitin",
@@ -13173,6 +13257,9 @@ return {
["pe"]="تهی",
["ro"]="gol",
},
+ ["enable"]={
+ ["en"]="enable",
+ },
["end"]={
["en"]="end",
["nl"]="eind",
@@ -13527,10 +13614,10 @@ return {
["pe"]="فرمول",
["ro"]="formula",
},
- ["formulae"]={
+ ["formulas"]={
["cs"]="rovnice",
["de"]="formeln",
- ["en"]="formulae",
+ ["en"]="formulas",
["fr"]="formules",
["it"]="formule",
["nl"]="formules",
@@ -13797,6 +13884,9 @@ return {
["pe"]="پنهانی",
["ro"]="ascuns",
},
+ ["hiddenbar"]={
+ ["en"]="hiddenbar",
+ },
["hiding"]={
["cs"]="skryt",
["de"]="verbergen",
@@ -14168,6 +14258,10 @@ return {
["pe"]="متصل‌بالا",
["ro"]="unit",
},
+ ["notjoinedup"]={
+ ["en"]="notjoinedup",
+ ["nl"]="nietaansluitend",
+ },
["july"]={
["cs"]="cervenec",
["de"]="juli",
@@ -15144,6 +15238,9 @@ return {
["oldstyle"]={
["en"]="oldstyle",
},
+ ["fractions"]={
+ ["en"]="fractions",
+ },
["on"]={
["cs"]="zap",
["de"]="an",
@@ -17629,16 +17726,15 @@ return {
["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:oneargument"] = { en = "\\...#1" },
+ ["cd:twoarguments"] = { en = "\\...#1#2" },
+ ["cd:threearguments"] = { 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:parenthesis-s"] = { en = "(...)" },
+ ["cd:parenthesis-l"] = { en = "(...,...)" },
["cd:index-s"] = { en = "[...]" },
["cd:index-l"] = { en = "[..+...+..]" },
["cd:math-s"] = { en = "$...$" },
diff --git a/tex/context/base/mkiv/mult-fun.lua b/tex/context/base/mkiv/mult-fun.lua
index e7ab2c071..df127eb5c 100644
--- a/tex/context/base/mkiv/mult-fun.lua
+++ b/tex/context/base/mkiv/mult-fun.lua
@@ -15,22 +15,24 @@ return {
"metapostversion",
"maxdimensions",
"drawoptionsfactor",
+ "dq", "sq",
+ "crossingscale", "crossingoption",
},
commands = {
- "transparency",
+ "loadmodule", "dispose", "nothing", "transparency", "tolist", "topath", "tocycle",
--
"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",
+ "unitcircle", "fulldiamond", "unitdiamond", "fullsquare", "unittriangle", "fulltriangle",
-- "halfcircle", "quartercircle",
"llcircle", "lrcircle", "urcircle", "ulcircle",
"tcircle", "bcircle", "lcircle", "rcircle",
"lltriangle", "lrtriangle", "urtriangle", "ultriangle",
"uptriangle", "downtriangle", "lefttriangle", "righttriangle", "triangle",
- "smoothed", "cornered", "superellipsed", "randomized", "squeezed", "enlonged", "shortened",
+ "smoothed", "cornered", "superellipsed", "randomized", "randomizedcontrols", "squeezed", "enlonged", "shortened",
"punked", "curved", "unspiked", "simplified", "blownup", "stretched",
"enlarged", "leftenlarged", "topenlarged", "rightenlarged", "bottomenlarged",
"crossed", "laddered", "randomshifted", "interpolated", "paralleled", "cutends", "peepholed",
@@ -38,6 +40,8 @@ return {
"llmoved", "lrmoved", "urmoved", "ulmoved",
"rightarrow", "leftarrow", "centerarrow",
"boundingbox", "innerboundingbox", "outerboundingbox", "pushboundingbox", "popboundingbox",
+ "boundingradius", "boundingcircle", "boundingpoint",
+ "crossingunder", "insideof", "outsideof",
"bottomboundary", "leftboundary", "topboundary", "rightboundary",
"xsized", "ysized", "xysized", "sized", "xyscaled",
"intersection_point", "intersection_found", "penpoint",
@@ -45,8 +49,10 @@ return {
"withshade", "withcircularshade", "withlinearshade", -- old but kept
"defineshade", "shaded",
-- "withshading", "withlinearshading", "withcircularshading", "withfromshadecolor", "withtoshadecolor",
- "shadedinto", "withshadecolors", "withshadedomain", "withshademethod", "withshadefactor", "withshadevector",
- "withshadecenter", "withshadedirection", "withshadestep", "withshadefraction",
+ "shadedinto", "withshadecolors",
+ "withshadedomain", "withshademethod", "withshadefactor", "withshadevector",
+ "withshadecenter", "withshadedirection", "withshaderadius", "withshadetransform",
+ "withshadestep", "withshadefraction",
"cmyk", "spotcolor", "multitonecolor", "namedcolor",
"drawfill", "undrawfill",
"inverted", "uncolored", "softened", "grayed", "greyed",
@@ -55,8 +61,8 @@ return {
"graphictext", "loadfigure", "externalfigure", "figure", "register", "outlinetext", -- "lua",
"checkedbounds", "checkbounds", "strut", "rule",
"withmask", "bitmapimage",
- "colordecimals", "ddecimal", "dddecimal", "ddddecimal",
- "textext", "thetextext", "rawtextext", "textextoffset",
+ "colordecimals", "ddecimal", "dddecimal", "ddddecimal", "colordecimalslist",
+ "textext", "thetextext", "rawtextext", "textextoffset", "texbox", "thetexbox", "rawtexbox",
"verbatim",
"thelabel", "label",
"autoalign",
@@ -71,7 +77,7 @@ return {
-- "define_sampled_linear_shade", "define_sampled_circular_shade",
"space", "crlf", "dquote", "percent", "SPACE", "CRLF", "DQUOTE", "PERCENT",
"grayscale", "greyscale", "withgray", "withgrey",
- "colorpart",
+ "colorpart", "colorlike",
"readfile",
"clearxy", "unitvector", "center", -- redefined
"epsed", "anchored",
@@ -92,7 +98,7 @@ return {
--
"pushcurrentpicture", "popcurrentpicture",
--
- "arrowpath",
+ "arrowpath", "resetarrows",
-- "colorlike", "dowithpath", "rangepath", "straightpath", "addbackground",
-- "cleanstring", "asciistring", "setunstringed", "getunstringed", "unstringed",
-- "showgrid",
@@ -107,6 +113,7 @@ return {
-- "recolor", "refill", "redraw", "retext", "untext", "restroke", "reprocess", "repathed",
"tensecircle", "roundedsquare",
"colortype", "whitecolor", "blackcolor", "basiccolors", "complementary", "complemented",
+ "resolvedcolor",
--
-- "swappointlabels",
"normalfill", "normaldraw", "visualizepaths", "detailpaths", "naturalizepaths",
@@ -119,11 +126,11 @@ return {
"drawlineoptions", "drawpointoptions", "drawcontroloptions", "drawlabeloptions",
"draworiginoptions", "drawboundoptions", "drawpathoptions", "resetdrawoptions",
--
- "undashed",
+ "undashed", "pencilled",
--
"decorated", "redecorated", "undecorated",
--
- "passvariable", "passarrayvariable", "tostring", "format", "formatted",
+ "passvariable", "passarrayvariable", "tostring", "topair", "format", "formatted", "quotation", "quote",
"startpassingvariable", "stoppassingvariable",
--
"eofill", "eoclip", "nofill", "fillup", "eofillup",
@@ -132,5 +139,9 @@ return {
"addbackground",
--
"shadedup", "shadeddown", "shadedleft", "shadedright",
+ --
+ "sortlist", "copylist", "shapedlist", "listtocurves", "listtolines", "listsize", "listlast", "uniquelist",
+ --
+ "circularpath", "squarepath", "linearpath",
},
}
diff --git a/tex/context/base/mkiv/mult-ini.lua b/tex/context/base/mkiv/mult-ini.lua
index 76517f37e..19585a7fa 100644
--- a/tex/context/base/mkiv/mult-ini.lua
+++ b/tex/context/base/mkiv/mult-ini.lua
@@ -33,6 +33,7 @@ interfaces.formats = mark(interfaces.formats or { })
interfaces.translations = mark(interfaces.translations or { })
interfaces.setupstrings = mark(interfaces.setupstrings or { })
interfaces.corenamespaces = mark(interfaces.corenamespaces or { })
+interfaces.usednamespaces = mark(interfaces.usednamespaces or { })
local registerstorage = storage.register
local sharedstorage = storage.shared
@@ -44,6 +45,7 @@ local formats = interfaces.formats
local translations = interfaces.translations
local setupstrings = interfaces.setupstrings
local corenamespaces = interfaces.corenamespaces
+local usednamespaces = interfaces.usednamespaces
local reporters = { } -- just an optimization
registerstorage("interfaces/constants", constants, "interfaces.constants")
@@ -53,6 +55,7 @@ registerstorage("interfaces/formats", formats, "interfaces.formats
registerstorage("interfaces/translations", translations, "interfaces.translations")
registerstorage("interfaces/setupstrings", setupstrings, "interfaces.setupstrings")
registerstorage("interfaces/corenamespaces", corenamespaces, "interfaces.corenamespaces")
+registerstorage("interfaces/usednamespaces", usednamespaces, "interfaces.usednamespaces")
interfaces.interfaces = {
"cs", "de", "en", "fr", "it", "nl", "ro", "pe",
@@ -95,6 +98,11 @@ setmetatableindex(setupstrings, valueiskey)
function interfaces.registernamespace(n,namespace)
corenamespaces[n] = namespace
+ usednamespaces[namespace] = n
+end
+
+function interfaces.getnamespace(n)
+ return usednamespaces[n] .. ">"
end
local function resolve(t,k)
diff --git a/tex/context/base/mkiv/mult-ini.mkiv b/tex/context/base/mkiv/mult-ini.mkiv
index d7dc31ec1..8fd0d9472 100644
--- a/tex/context/base/mkiv/mult-ini.mkiv
+++ b/tex/context/base/mkiv/mult-ini.mkiv
@@ -122,6 +122,7 @@
\def\s!filll {filll}
\def\s!to {to} \let\!!to \s!to % obsolete
\def\s!attr {attr}
+\def\s!axis {axis}
\def\s!bottom{bottom}
\def\s!top {top}
@@ -223,9 +224,9 @@
\def\selectinterface
{\writestatus{interface}{defining \currentinterface\space interface}%
- \writeline
- \writestatus{interface}{using \currentresponses\space messages}%
- \writeline
+ %writeline
+ \writestatus{interface}{using \currentresponses\space messages}%
+ %\writeline
\let\selectinterface\relax}
\else
@@ -242,10 +243,10 @@
\doifundefined{\s!prefix!##1}{\let##1=##2}}%
\selectinterface\currentinterface\defaultinterface
\writestatus{interface}{defining \currentinterface\space interface}%
- \writeline
+ %\writeline
\selectinterface\currentresponses\currentinterface
\writestatus{interface}{using \currentresponses\space messages}%
- \writeline
+ %\writeline
\let\selectinterface\relax}
\fi
@@ -836,7 +837,12 @@
int: \currentinterface/\currentresponses}
\unexpanded\def\showcontextbanner
- {\writeline\writebanner{\contextbanner}\writeline}
+ %{\writeline
+ % \writestring\contextbanner
+ % \writeline}
+ {\writestatus\m!system\empty
+ \writestatus\m!system\contextbanner
+ \writestatus\m!system\empty}
\edef\formatversion
{\the\normalyear .\the\normalmonth.\the\normalday}
@@ -855,6 +861,6 @@
\def\dump{\the\everydump\normaldump}
\fi
-\appendtoks \showcontextbanner \to \everydump
+% \appendtoks \showcontextbanner \to \everydump
\protect \endinput
diff --git a/tex/context/base/mkiv/mult-low.lua b/tex/context/base/mkiv/mult-low.lua
index be7b02747..4501afefb 100644
--- a/tex/context/base/mkiv/mult-low.lua
+++ b/tex/context/base/mkiv/mult-low.lua
@@ -14,7 +14,7 @@ return {
"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",
+ "zeropoint", "onepoint", "halfapoint", "onebasepoint", "maxcount", "maxdimen", "scaledpoint", "thousandpoint",
"points", "halfpoint",
"zeroskip",
"zeromuskip", "onemuskip",
@@ -100,7 +100,7 @@ return {
"startcomponent", "stopcomponent", "component",
"startproduct", "stopproduct", "product",
"startproject", "stopproject", "project",
- "starttext", "stoptext", "startnotext", "stopnotext","startdocument", "stopdocument", "documentvariable", "setupdocument", "presetdocument",
+ "starttext", "stoptext", "startnotext", "stopnotext","startdocument", "stopdocument", "documentvariable", "unexpandeddocumentvariable", "setupdocument", "presetdocument",
"startmodule", "stopmodule", "usemodule", "usetexmodule", "useluamodule","setupmodule","currentmoduleparameter","moduleparameter",
"everystarttext", "everystoptext",
--
@@ -133,6 +133,8 @@ return {
"optionalspace", "asciispacechar",
--
"Ux", "eUx", "Umathaccents",
+ --
+ "parfillleftskip", "parfillrightskip",
},
["helpers"] = {
--
@@ -203,12 +205,12 @@ return {
--
"filledhboxb", "filledhboxr", "filledhboxg", "filledhboxc", "filledhboxm", "filledhboxy", "filledhboxk",
--
- "scratchcounter", "globalscratchcounter",
- "scratchdimen", "globalscratchdimen",
- "scratchskip", "globalscratchskip",
- "scratchmuskip", "globalscratchmuskip",
- "scratchtoks", "globalscratchtoks",
- "scratchbox", "globalscratchbox",
+ "scratchcounter", "globalscratchcounter", "privatescratchcounter",
+ "scratchdimen", "globalscratchdimen", "privatescratchdimen",
+ "scratchskip", "globalscratchskip", "privatescratchskip",
+ "scratchmuskip", "globalscratchmuskip", "privatescratchmuskip",
+ "scratchtoks", "globalscratchtoks", "privatescratchtoks",
+ "scratchbox", "globalscratchbox", "privatescratchbox",
--
"normalbaselineskip", "normallineskip", "normallineskiplimit",
--
@@ -399,6 +401,7 @@ return {
"cldprocessfile", "cldloadfile", "cldcontext", "cldcommand",
--
"carryoverpar",
+ "lastlinewidth",
--
"assumelongusagecs",
--
@@ -421,5 +424,7 @@ return {
"naturalhbox", "naturalvbox", "naturalhpack", "naturalvpack",
--
"frule",
+ --
+ "compoundhyphenpenalty",
}
}
diff --git a/tex/context/base/mkiv/mult-mps.lua b/tex/context/base/mkiv/mult-mps.lua
index a6bebc266..1d7252c29 100644
--- a/tex/context/base/mkiv/mult-mps.lua
+++ b/tex/context/base/mkiv/mult-mps.lua
@@ -12,7 +12,7 @@ return {
"tracingmacros", "tracingonline", "tracingoutput", "tracingrestores",
"tracingspecs", "tracingstats", "tracingtitles", "truecorners",
"warningcheck", "year",
- "false", "nullpicture", "pencircle", "true",
+ "false", "nullpicture", "pencircle", "penspec", "true",
"and", "angle", "arclength", "arctime", "ASCII", "boolean", "bot",
"char", "color", "cosd", "cycle", "decimal", "directiontime", "floor", "fontsize",
"hex", "infont", "intersectiontimes", "known", "length", "llcorner",
@@ -33,6 +33,7 @@ return {
"randomseed", "also", "contour", "doublepath",
"withcolor", "withcmykcolor", "withpen",
"dashed",
+ "envelope",
"if", "else", "elseif", "fi", "for", "endfor", "forever", "exitif", "within",
"forsuffixes", "step", "until",
"charlist", "extensible", "fontdimen", "headerbyte", "kern", "ligtable",
@@ -76,7 +77,7 @@ return {
"arrowhead",
"currentpen", "currentpicture", "cuttings",
"defaultfont", "extra_beginfig", "extra_endfig",
- "ditto", "EOF", "down",
+ "down",
"evenly", "fullcircle", "halfcircle", "identity", "in", "left",
"pensquare", "penrazor", "penspec",
"origin", "quartercircle", "right",
@@ -129,6 +130,8 @@ return {
"join_radius",
"charscale", -- actually a mult-fun one
--
+ "ditto", "EOF", -- maybe also down etc
+ --
"pen_lft", "pen_rt", "pen_top", "pen_bot", -- "pen_count_",
},
metafont = {
diff --git a/tex/context/base/mkiv/mult-prm.lua b/tex/context/base/mkiv/mult-prm.lua
index d9c432f7c..956f83636 100644
--- a/tex/context/base/mkiv/mult-prm.lua
+++ b/tex/context/base/mkiv/mult-prm.lua
@@ -210,6 +210,8 @@ return {
"Umathunderbarvgap",
"Umathunderdelimiterbgap",
"Umathunderdelimitervgap",
+ "Umathnolimitsupfactor",
+ "Umathnolimitsubfactor",
"Umiddle",
"Uoverdelimiter",
"Uradical",
@@ -231,6 +233,12 @@ return {
"aligntab",
"attribute",
"attributedef",
+ "hyphenpenaltymode",
+ "automatichyphenmode",
+ "automatichyphenpenalty",
+ "automaticdiscretionary",
+ "explicithyphenpenalty",
+ "explicitdiscretionary",
"bodydir",
"boundary",
"boxdir",
@@ -252,6 +260,7 @@ return {
"formatname",
"gleaders",
"hyphenationmin",
+ "hyphenationbounds",
"ifabsdim",
"ifabsnum",
"ifprimitive",
@@ -268,6 +277,7 @@ return {
"leftmarginkern",
"letcharcode",
"letterspacefont",
+ "linedir",
"localbrokenpenalty",
"localinterlinepenalty",
"localleftbox",
@@ -281,10 +291,15 @@ return {
"mathdir",
"mathdisplayskipmode",
"matheqnogapstep",
+ "mathitalicsmode",
+ "mathnolimitsmode",
"mathoption",
"mathscriptsmode",
"mathstyle",
"mathsurroundskip",
+ "mathsurroundmode",
+ "mathrulesmode",
+ "mathrulesfam",
"noboundary",
"nokerns",
"nohrule",
@@ -307,6 +322,7 @@ return {
"pdfvariable",
"postexhyphenchar",
"posthyphenchar",
+ "predisplaygapfactor",
"preexhyphenchar",
"prehyphenchar",
"primitive",
@@ -324,6 +340,7 @@ return {
"scantextokens",
"setfontid",
"setrandomseed",
+ "shapemode",
"suppressfontnotfounderror",
"suppressifcsnameerror",
"suppresslongerror",
@@ -638,6 +655,8 @@ return {
"Umathunderbarvgap",
"Umathunderdelimiterbgap",
"Umathunderdelimitervgap",
+ "Umathnolimitsupfactor",
+ "Umathnolimitsubfactor",
"Umiddle",
"Uoverdelimiter",
"Uradical",
@@ -669,6 +688,12 @@ return {
"atopwithdelims",
"attribute",
"attributedef",
+ "hyphenpenaltymode",
+ "automatichyphenmode",
+ "automatichyphenpenalty",
+ "automaticdiscretionary",
+ "explicithyphenpenalty",
+ "explicitdiscretionary",
"badness",
"baselineskip",
"batchmode",
@@ -821,6 +846,8 @@ return {
"hyphenation",
"hyphenchar",
"hyphenpenalty",
+ "hyphenationmin",
+ "hyphenationbounds",
"if",
"ifabsdim",
"ifabsnum",
@@ -887,6 +914,7 @@ return {
"letcharcode",
"letterspacefont",
"limits",
+ "linedir",
"linepenalty",
"lineskip",
"lineskiplimit",
@@ -917,15 +945,20 @@ return {
"mathdisplayskipmode",
"matheqnogapstep",
"mathinner",
+ "mathitalicsmode",
+ "mathnolimitsmode",
"mathop",
"mathopen",
"mathoption",
"mathord",
"mathpunct",
"mathrel",
+ "mathrulesmode",
+ "mathrulesfam",
"mathscriptsmode",
"mathstyle",
"mathsurroundskip",
+ "mathsurroundmode",
"mathsurround",
"maxdeadcycles",
"maxdepth",
@@ -1121,6 +1154,7 @@ return {
"postexhyphenchar",
"posthyphenchar",
"predisplaydirection",
+ "predisplaygapfactor",
"predisplaypenalty",
"predisplaysize",
"preexhyphenchar",
@@ -1166,6 +1200,7 @@ return {
"setfontid",
"setlanguage",
"setrandomseed",
+ "shapemode",
"sfcode",
"shipout",
"show",
@@ -1197,6 +1232,7 @@ return {
"suppressifcsnameerror",
"suppresslongerror",
"suppressoutererror",
+ "suppressmathparerror",
"synctex",
"tabskip",
"tagcode",
diff --git a/tex/context/base/mkiv/mult-sys.mkiv b/tex/context/base/mkiv/mult-sys.mkiv
index 88e956d66..bd3ff9b3d 100644
--- a/tex/context/base/mkiv/mult-sys.mkiv
+++ b/tex/context/base/mkiv/mult-sys.mkiv
@@ -38,52 +38,54 @@
%D First we define some system constants used for both the multi||lingual
%D interface and multi||linguag typesetting.
+% definesystemconstant {slovene}
+% definesystemconstant {cz}
+% definesystemconstant {vn}
+
\definesystemconstant {afrikaans} \definesystemconstant {af}
+\definesystemconstant {ancientgreek} \definesystemconstant {agr}
+\definesystemconstant {ancientlatin} \definesystemconstant {ala}
\definesystemconstant {arabic} \definesystemconstant {ar}
+\definesystemconstant {bokmal} \definesystemconstant {nb}
\definesystemconstant {catalan} \definesystemconstant {ca}
\definesystemconstant {chinese} \definesystemconstant {cn}
+\definesystemconstant {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 {farsi} \definesystemconstant {fa} % just persian
\definesystemconstant {finnish} \definesystemconstant {fi}
\definesystemconstant {french} \definesystemconstant {fr}
+\definesystemconstant {gbenglish} \definesystemconstant {gb}
\definesystemconstant {german} \definesystemconstant {de}
+\definesystemconstant {greek} \definesystemconstant {gr}
\definesystemconstant {hungarian} \definesystemconstant {hu}
\definesystemconstant {italian} \definesystemconstant {it}
+\definesystemconstant {japanese} \definesystemconstant {ja}
+\definesystemconstant {korean} \definesystemconstant {kr}
\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 {polish} \definesystemconstant {pl}
\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 {thai} \definesystemconstant {th} % mojca mentioned it at BT2013 but we need more info
\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 {usenglish} \definesystemconstant {us}
\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.
@@ -147,6 +149,7 @@
\definesystemconstant {sans}
\definesystemconstant {mono}
\definesystemconstant {math}
+\definesystemconstant {nomath}
\definesystemconstant {handwriting}
\definesystemconstant {calligraphy}
\definesystemconstant {casual}
@@ -356,7 +359,7 @@
\definesystemconstant {integral}
\definesystemconstant {insert} % maybe insertclass
\definesystemconstant {marker}
-
+\definesystemconstant {kernpairs}
\definesystemconstant {mixedcolumn}
%definesystemconstant {property}
diff --git a/tex/context/base/mkiv/node-acc.lua b/tex/context/base/mkiv/node-acc.lua
index ed34dbec9..dccd7b7c0 100644
--- a/tex/context/base/mkiv/node-acc.lua
+++ b/tex/context/base/mkiv/node-acc.lua
@@ -8,92 +8,72 @@ if not modules then modules = { } end modules ['node-acc'] = {
local nodes, node = nodes, node
-local nodecodes = nodes.nodecodes
-local tasks = nodes.tasks
-
-local nuts = nodes.nuts
-local tonut = nodes.tonut
-local tonode = nodes.tonode
-
-local getid = nuts.getid
-local getfield = nuts.getfield
-local getattr = nuts.getattr
-local getlist = nuts.getlist
-local getchar = nuts.getchar
-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
-local copy_node = nuts.copy
-local free_nodelist = nuts.flush_list
-local insert_after = nuts.insert_after
-
-local glue_code = nodecodes.glue
-local kern_code = nodecodes.kern
-local glyph_code = nodecodes.glyph
-local hlist_code = nodecodes.hlist
-local vlist_code = nodecodes.vlist
-
-local a_characters = attributes.private("characters")
-
-local threshold = 65536 -- not used
-local nofreplaced = 0
+local nodecodes = nodes.nodecodes
+local tasks = nodes.tasks
+
+local nuts = nodes.nuts
+local tonut = nodes.tonut
+local tonode = nodes.tonode
+
+local getid = nuts.getid
+local getfield = nuts.getfield
+local getattr = nuts.getattr
+local getlist = nuts.getlist
+local getchar = nuts.getchar
+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 getwidth = nuts.getwidth
+local setwidth = nuts.setwidth
+
+----- traverse_nodes = nuts.traverse
+local traverse_id = nuts.traverse_id
+----- copy_node = nuts.copy
+local insert_after = nuts.insert_after
+local copy_no_components = nuts.copy_no_components
+
+local glue_code = nodecodes.glue
+----- kern_code = nodecodes.kern
+local glyph_code = nodecodes.glyph
+local hlist_code = nodecodes.hlist
+local vlist_code = nodecodes.vlist
+
+local a_characters = attributes.private("characters")
+
+local threshold = 65536 -- not used
+local nofreplaced = 0
-- todo: nbsp etc
--- todo: collapse kerns
-
--- p_id
+-- todo: collapse kerns (not needed, backend does this)
+-- todo: maybe cache as we now create many nodes
+-- todo: check for subtype related to spacing (13/14 but most seems to be user anyway)
local function injectspaces(head)
local p, p_id
local n = 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(n,."width") > 0 then -- threshold
- -- if p and p_id == glyph_code then
+ if id == glue_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)
- setsubtype(g,256)
- end
+ -- unless we don't care about the little bit of overhead
+ -- we can just: local g = copy_node(g)
+ local g = copy_no_components(p)
local a = getattr(n,a_characters)
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"))
+ setlink(p,g,n)
+ setwidth(n,getwidth(n) - getwidth(g))
if a then
setattr(g,a_characters,a)
end
setattr(n,a_characters,0)
nofreplaced = nofreplaced + 1
end
- -- end
elseif id == hlist_code or id == vlist_code then
injectspaces(getlist(n),attribute)
- -- elseif id == kern_code then -- the backend already collapses
- -- local first = n
- -- while true do
- -- local nn = getnext(n)
- -- if nn and getid(nn) == kern_code then
- -- -- maybe we should delete kerns but who cares at this stage
- -- setfield(first,"kern",getfield(first,"kern") + getfield(nn,"kern")
- -- setfield(nn,"kern",0)
- -- n = nn
- -- else
- -- break
- -- end
- -- end
end
p_id = id
p = n
diff --git a/tex/context/base/mkiv/node-aux.lua b/tex/context/base/mkiv/node-aux.lua
index ebe113fc6..c6b276337 100644
--- a/tex/context/base/mkiv/node-aux.lua
+++ b/tex/context/base/mkiv/node-aux.lua
@@ -20,7 +20,6 @@ local glyph_code = nodecodes.glyph
local hlist_code = nodecodes.hlist
local vlist_code = nodecodes.vlist
local attributelist_code = nodecodes.attributelist -- temporary
-local math_code = nodecodes.math
local nuts = nodes.nuts
local tonut = nuts.tonut
@@ -36,6 +35,10 @@ local getfont = nuts.getfont
local getchar = nuts.getchar
local getattr = nuts.getattr
local getfield = nuts.getfield
+local getboth = nuts.getboth
+local getcomponents = nuts.getcomponents
+local getwidth = nuts.getwidth
+local setwidth = nuts.setwidth
local setfield = nuts.setfield
local setattr = nuts.setattr
@@ -43,22 +46,21 @@ local setlink = nuts.setlink
local setlist = nuts.setlist
local setnext = nuts.setnext
local setprev = nuts.setprev
+local setcomponents = nuts.setcomponents
+local setattrlist = nuts.setattrlist
local traverse_nodes = nuts.traverse
local traverse_id = nuts.traverse_id
-local free_node = nuts.free
+local flush_node = nuts.flush
+local flush_list = nuts.flush_list
local hpack_nodes = nuts.hpack
local unset_attribute = nuts.unset_attribute
local first_glyph = nuts.first_glyph
local copy_node = nuts.copy
-local copy_node_list = nuts.copy_list
+----- copy_node_list = nuts.copy_list
local find_tail = nuts.tail
-local insert_node_after = nuts.insert_after
-local isnode = nuts.is_node
local getbox = nuts.getbox
-
-local nodes_traverse_id = nodes.traverse_id
-local nodes_first_glyph = nodes.first_glyph
+local count = nuts.count
local nodepool = nuts.pool
local new_glue = nodepool.glue
@@ -93,13 +95,13 @@ local report_error = logs.reporter("node-aux:error")
local function takebox(id)
local box = getbox(id)
if box then
- local copy = copy_node(box)
local list = getlist(box)
+ setlist(box,nil)
+ local copy = copy_node(box)
if list then
setlist(copy,list)
- setlist(box,nil)
end
- texsetbox(id,nil)
+ texsetbox(id,false)
return copy
end
end
@@ -125,7 +127,7 @@ end
function nuts.takelist(n)
local l = getlist(n)
setlist(n)
- free_node(n)
+ flush_node(n)
return l
end
@@ -138,7 +140,7 @@ local function repackhlist(list,...)
local temp, b = hpack_nodes(list,...)
list = getlist(temp)
setlist(temp)
- free_node(temp)
+ flush_node(temp)
return list, b
end
@@ -262,16 +264,6 @@ nuts.unsetattributes = unset_attributes nodes.unsetattribut
-- end
-- end
--
--- if not node.end_of_math then
--- function node.end_of_math(n)
--- for n in traverse_id(math_code,getnext(next)) do
--- return n
--- end
--- end
--- end
---
--- nodes.endofmath = node.end_of_math
---
-- local function firstline(n)
-- while n do
-- local id = getid(n)
@@ -300,16 +292,6 @@ function nuts.firstcharacter(n,untagged) -- tagged == subtype > 255
end
end
--- function nodes.firstcharacter(n,untagged) -- tagged == subtype > 255
--- if untagged then
--- return nodes_first_glyph(n)
--- else
--- for g in nodes_traverse_id(glyph_code,n) do
--- return g
--- end
--- end
--- end
-
local function firstcharinbox(n)
local l = getlist(getbox(n))
if l then
@@ -366,11 +348,10 @@ local function tonodes(str,fnt,attr) -- (str,template_glyph) -- moved from blob-
n = new_glyph(fnt,s)
end
if attr then -- normally false when template
- -- setfield(n,"attr",copy_node_list(attr))
- setfield(n,"attr",attr)
+ setattrlist(n,attr)
end
if head then
- insert_node_after(head,tail,n)
+ setlink(tail,n)
else
head = n
end
@@ -386,79 +367,6 @@ nodes.tonodes = function(str,fnt,attr)
return tonode(head), tonode(tail)
end
--- local function link(list,currentfont,currentattr,head,tail)
--- for i=1,#list do
--- local n = list[i]
--- if n then
--- local tn = isnode(n)
--- if not tn then
--- local tn = type(n)
--- if tn == "number" then
--- if not currentfont then
--- currentfont = current_font()
--- end
--- local h, t = tonodes(tostring(n),currentfont,currentattr)
--- if not h then
--- -- skip
--- elseif not head then
--- head = h
--- tail = t
--- else
--- setfield(tail,"next",h)
--- setfield(h,"prev",t)
--- tail = t
--- end
--- elseif tn == "string" then
--- if #tn > 0 then
--- if not currentfont then
--- currentfont = current_font()
--- end
--- local h, t = tonodes(n,currentfont,currentattr)
--- if not h then
--- -- skip
--- elseif not head then
--- head, tail = h, t
--- else
--- setfield(tail,"next",h)
--- setfield(h,"prev",t)
--- tail = t
--- end
--- end
--- elseif tn == "table" then
--- if #tn > 0 then
--- if not currentfont then
--- currentfont = current_font()
--- end
--- head, tail = link(n,currentfont,currentattr,head,tail)
--- end
--- end
--- elseif not head then
--- head = n
--- tail = find_tail(n)
--- elseif getid(n) == attributelist_code then
--- -- weird case
--- report_error("weird node type in list at index %s:",i)
--- for i=1,#list do
--- local l = list[i]
--- report_error("%3i: %s %S",i,getid(l) == attributelist_code and "!" or ">",l)
--- end
--- os.exit()
--- else
--- setfield(tail,"next",n)
--- setfield(n,"prev",tail)
--- if getnext(n) then
--- tail = find_tail(n)
--- else
--- tail = n
--- end
--- end
--- else
--- -- permitting nil is convenient
--- end
--- end
--- return head, tail
--- end
-
local function link(list,currentfont,currentattr,head,tail) -- an oldie, might be replaced
for i=1,#list do
local n = list[i]
@@ -543,6 +451,25 @@ function nodes.locate(start,wantedid,wantedsubtype)
return found and tonode(found)
end
+local function rehpack(n,width)
+ local head = getlist(n)
+ local size = width or getwidth(n)
+ local temp = hpack_nodes(head,size,"exactly")
+ setwidth(n,size)
+ setfield(n,"glue_set", getfield(temp,"glue_set"))
+ setfield(n,"glue_sign", getfield(temp,"glue_sign"))
+ setfield(n,"glue_order",getfield(temp,"glue_order"))
+ setlist(temp)
+ flush_node(temp)
+ return n
+end
+
+nuts.rehpack = rehpack
+
+function nodes.rehpack(n,...)
+ rehpack(tonut(n),...)
+end
+
-- I have no use for this yet:
--
-- \skip0=10pt plus 2pt minus 2pt
@@ -561,3 +488,177 @@ end
-- return 0
-- end
-- end
+
+-- these component helpers might move to another module
+
+-- nodemode helper: here we also flatten components, no check for disc here
+
+function nuts.set_components(target,start,stop)
+ local head = getcomponents(target)
+ if head then
+ flush_list(head)
+ head = nil
+ end
+ if start then
+ setprev(start)
+ else
+ return nil
+ end
+ if stop then
+ setnext(stop)
+ end
+ local tail = nil
+ while start do
+ local c = getcomponents(start)
+ local n = getnext(start)
+ if c then
+ if head then
+ setlink(tail,c)
+ else
+ head = c
+ end
+ tail = find_tail(c)
+ setcomponents(start)
+ flush_node(start)
+ else
+ if head then
+ setlink(tail,start)
+ else
+ head = start
+ end
+ tail = start
+ end
+ start = n
+ end
+ setcomponents(target,head)
+ -- maybe also upgrade the subtype but we don't use it anyway
+ return head
+end
+
+function nuts.get_components(target)
+ return getcomponents(target)
+end
+
+nuts.get_components = getcomponents
+
+function nuts.take_components(target)
+ local c = getcomponents(target)
+ setcomponents(target)
+ -- maybe also upgrade the subtype but we don't use it anyway
+ return c
+end
+
+-- nodemode helper: we assume a glyph and a flat components list (basemode can
+-- have nested components)
+
+function nuts.count_components(n,marks)
+ local components = getcomponents(n)
+ if components then
+ if marks then
+ local i = 0
+ for g in traverse_id(glyph_code,components) do
+ if not marks[getchar(g)] then
+ i = i + 1
+ end
+ end
+ return i
+ else
+ return count(glyph_code,components)
+ end
+ else
+ return 0
+ end
+end
+
+-- nodemode helper: the next and prev pointers are untouched
+
+function nuts.copy_no_components(g,copyinjection)
+ local components = getcomponents(g)
+ if components then
+ setcomponents(g)
+ local n = copy_node(g)
+ if copyinjection then
+ copyinjection(n,g)
+ end
+ setcomponents(g,components)
+ -- maybe also upgrade the subtype but we don't use it anyway
+ return n
+ else
+ local n = copy_node(g)
+ if copyinjection then
+ copyinjection(n,g)
+ end
+ return n
+ end
+end
+
+function nuts.copy_only_glyphs(current)
+ local head = nil
+ local previous = nil
+ for n in traverse_id(glyph_code,current) do
+ n = copy_node(n)
+ if head then
+ setlink(previous,n)
+ else
+ head = n
+ end
+ previous = n
+ end
+ return head
+end
+
+-- node- and basemode helper
+
+function nuts.use_components(head,current)
+ local components = getcomponents(current)
+ if not components then
+ return head, current, current
+ end
+ local prev, next = getboth(current)
+ local first = current
+ local last = next
+ while components do
+ local gone = current
+ local tail = find_tail(components)
+ if prev then
+ setlink(prev,components)
+ end
+ if next then
+ setlink(tail,next)
+ end
+ if first == current then
+ first = components
+ end
+ if head == current then
+ head = components
+ end
+ current = components
+ setcomponents(gone)
+ flush_node(gone)
+ while true do
+ components = getcomponents(current)
+ if components then
+ next = getnext(current)
+ break -- current is composed
+ end
+ if next == last then
+ last = current
+ break -- components is false
+ end
+ prev = current
+ current = next
+ next = getnext(current)
+ end
+ end
+ return head, first, last
+end
+
+-- function nuts.current_tail()
+-- local whatever = texnest[texnest.ptr]
+-- if whatever then
+-- local tail = whatever.tail
+-- if tail then
+-- return tonut(tail)
+-- end
+-- end
+-- end
diff --git a/tex/context/base/mkiv/node-bck.lua b/tex/context/base/mkiv/node-bck.lua
index a095ac4c4..abb025b74 100644
--- a/tex/context/base/mkiv/node-bck.lua
+++ b/tex/context/base/mkiv/node-bck.lua
@@ -11,14 +11,13 @@ if not modules then modules = { } end modules ['node-bck'] = {
local attributes, nodes, node = attributes, nodes, node
-local tasks = nodes.tasks
+local enableaction = nodes.tasks.enableaction
local nodecodes = nodes.nodecodes
local listcodes = nodes.listcodes
local hlist_code = nodecodes.hlist
local vlist_code = nodecodes.vlist
-local glyph_code = nodecodes.glyph
local cell_code = listcodes.cell
local nuts = nodes.nuts
@@ -34,8 +33,8 @@ local getid = nuts.getid
local getlist = nuts.getlist
local getattr = nuts.getattr
local getsubtype = nuts.getsubtype
+local getwhd = nuts.getwhd
-local setfield = nuts.setfield
local setattr = nuts.setattr
local setlink = nuts.setlink
local setlist = nuts.setlist
@@ -48,7 +47,7 @@ local new_glue = nodepool.glue
local a_color = attributes.private('color')
local a_transparency = attributes.private('transparency')
-local a_colorspace = attributes.private('colormodel')
+local a_colormodel = attributes.private('colormodel')
local a_background = attributes.private('background')
local a_alignbackground = attributes.private('alignbackground')
@@ -65,33 +64,32 @@ local function add_backgrounds(head) -- rather old code .. to be redone
list = head
end
end
- local width = getfield(current,"width")
+ local width, height, depth = getwhd(current)
if width > 0 then
local background = getattr(current,a_background)
if background then
-- direct to hbox
-- colorspace is already set so we can omit that and stick to color
- local mode = getattr(current,a_colorspace)
+ local mode = getattr(current,a_colormodel)
if mode then
- local height = getfield(current,"height")
- local depth = getfield(current,"depth")
local skip = id == hlist_code and width or (height + depth)
local glue = new_glue(-skip)
local rule = new_rule(width,height,depth)
local color = getattr(current,a_color)
local transparency = getattr(current,a_transparency)
- setattr(rule,a_colorspace,mode)
+ setattr(rule,a_colormodel,mode)
if color then
setattr(rule,a_color,color)
end
if transparency then
setattr(rule,a_transparency,transparency)
end
- setlink(rule,glue)
- if list then
- setlink(glue,list)
- end
- setlist(current,rule)
+-- setlink(rule,glue)
+-- if list then
+-- setlink(glue,list)
+-- end
+-- setlist(current,rule)
+ setlist(current,rule,glue,list)
end
end
end
@@ -131,15 +129,15 @@ local function add_alignbackgrounds(head)
--
if background then
-- current has subtype 5 (cell)
- local width = getfield(current,"width")
+ local width, height, depth = getwhd(current)
if width > 0 then
- local mode = getattr(found,a_colorspace)
+ local mode = getattr(found,a_colormodel)
if mode then
local glue = new_glue(-width)
- local rule = new_rule(width,getfield(current,"height"),getfield(current,"depth"))
+ local rule = new_rule(width,height,depth)
local color = getattr(found,a_color)
local transparency = getattr(found,a_transparency)
- setattr(rule,a_colorspace,mode)
+ setattr(rule,a_colormodel,mode)
if color then
setattr(rule,a_color,color)
end
@@ -174,21 +172,16 @@ end
nodes.handlers.backgrounds = function(head) local head, done = add_backgrounds (tonut(head)) return tonode(head), done end
nodes.handlers.alignbackgrounds = function(head) local head, done = add_alignbackgrounds(tonut(head)) return tonode(head), done end
--- elsewhere: needs checking
-
--- tasks.appendaction("shipouts","normalizers","nodes.handlers.backgrounds")
--- tasks.appendaction("shipouts","normalizers","nodes.handlers.alignbackgrounds")
-
interfaces.implement {
name = "enablebackgroundboxes",
onlyonce = true,
- actions = nodes.tasks.enableaction,
+ actions = enableaction,
arguments = { "'shipouts'", "'nodes.handlers.backgrounds'" }
}
interfaces.implement {
name = "enablebackgroundalign",
onlyonce = true,
- actions = nodes.tasks.enableaction,
+ actions = enableaction,
arguments = { "'shipouts'", "'nodes.handlers.alignbackgrounds'" }
}
diff --git a/tex/context/base/mkiv/node-fin.lua b/tex/context/base/mkiv/node-fin.lua
index a2d63d38d..ffb2ae49e 100644
--- a/tex/context/base/mkiv/node-fin.lua
+++ b/tex/context/base/mkiv/node-fin.lua
@@ -26,6 +26,7 @@ local getid = nuts.getid
local getlist = nuts.getlist
local getleader = nuts.getleader
local getattr = nuts.getattr
+local getwidth = nuts.getwidth
local setlist = nuts.setlist
local setleader = nuts.setleader
@@ -42,12 +43,9 @@ local glyph_code = nodecodes.glyph
local disc_code = nodecodes.disc
local glue_code = nodecodes.glue
local rule_code = nodecodes.rule
-local whatsit_code = nodecodes.whatsit
local hlist_code = nodecodes.hlist
local vlist_code = nodecodes.vlist
-local normal_rule = rulecodes.normal
-
local states = attributes.states
local numbers = attributes.numbers
local a_trigger = attributes.private('trigger')
@@ -179,7 +177,6 @@ function states.finalize(namespace,attribute,head) -- is this one ok?
end
-- we need to deal with literals too (reset as well as oval)
--- if id == glyph_code or (id == whatsit_code and getsubtype(stack) == pdfliteral_code) or (id == rule_code and stack.width ~= 0) or (id == glue_code and stack.leader) then
local function process(namespace,attribute,head,inheritance,default) -- one attribute
local stack = head
@@ -208,27 +205,31 @@ local function process(namespace,attribute,head,inheritance,default) -- one attr
if content ~= list then
setlist(stack,list)
end
- done = done or ok
+ if ok then
+ done = true
+ end
else
local list, ok = process(namespace,attribute,content,inheritance,default)
if content ~= list then
setlist(stack,list)
end
- done = done or ok
+ if ok then
+ done = true
+ end
end
else
local list, ok = process(namespace,attribute,content,inheritance,default)
if content ~= list then
setlist(stack,list)
end
- done = done or ok
+ if ok then
+ done = true
+ end
end
-- end nested --
end
elseif id == rule_code then
--- if subtype(stack) == normal_rule then
- check = getfield(stack,"width") ~= 0
--- end
+ check = getwidth(stack) ~= 0
end
-- much faster this way than using a check() and nested() function
if check then
@@ -236,14 +237,14 @@ local function process(namespace,attribute,head,inheritance,default) -- one attr
if c then
if default and c == inheritance then
if current ~= default then
- head = insert_node_before(head,stack,copied(nsdata[default]))
+ head = insert_node_before(head,stack,copied(nsdata[default]))
current = default
- done = true
+ done = true
end
elseif current ~= c then
- head = insert_node_before(head,stack,copied(nsdata[c]))
+ head = insert_node_before(head,stack,copied(nsdata[c]))
current = c
- done = true
+ done = true
end
if leader then
local savedcurrent = current
@@ -262,20 +263,26 @@ local function process(namespace,attribute,head,inheritance,default) -- one attr
if leader ~= list then
setleader(stack,list)
end
- done = done or ok
+ if ok then
+ done = true
+ end
else
local list, ok = process(namespace,attribute,leader,inheritance,default)
if leader ~= list then
setleader(stack,list)
end
- done = done or ok
+ if ok then
+ done = true
+ end
end
else
local list, ok = process(namespace,attribute,leader,inheritance,default)
if leader ~= list then
setleader(stack,list)
end
- done = done or ok
+ if ok then
+ done = true
+ end
end
-- end nested --
current = savedcurrent
@@ -283,14 +290,14 @@ local function process(namespace,attribute,head,inheritance,default) -- one attr
end
elseif default and inheritance then
if current ~= default then
- head = insert_node_before(head,stack,copied(nsdata[default]))
+ head = insert_node_before(head,stack,copied(nsdata[default]))
current = default
- done = true
+ done = true
end
elseif current > 0 then
- head = insert_node_before(head,stack,copied(nsnone))
+ head = insert_node_before(head,stack,copied(nsnone))
current = 0
- done = true
+ done = true
end
check = false
end
@@ -320,7 +327,7 @@ local function selective(namespace,attribute,head,inheritance,default) -- two at
if id == glyph_code then
check = true
elseif id == disc_code then
- check = true -- notneeded when we flatten replace
+ check = true -- not needed when we flatten replace
elseif id == glue_code then
leader = getleader(stack)
if leader then
@@ -337,27 +344,31 @@ local function selective(namespace,attribute,head,inheritance,default) -- two at
if content ~= list then
setlist(stack,list)
end
- done = done or ok
+ if ok then
+ done = true
+ end
else
local list, ok = selective(namespace,attribute,content,inheritance,default)
if content ~= list then
setlist(stack,list)
end
- done = done or ok
+ if ok then
+ done = true
+ end
end
else
local list, ok = selective(namespace,attribute,content,inheritance,default)
if content ~= list then
setlist(stack,list)
end
- done = done or ok
+ if ok then
+ done = true
+ end
end
-- end nested
end
elseif id == rule_code then
--- if subtype(stack) == normal_rule then
- check = getfield(stack,"width") ~= 0
--- end
+ check = getwidth(stack) ~= 0
end
if check then
@@ -368,7 +379,9 @@ local function selective(namespace,attribute,head,inheritance,default) -- two at
local data = nsdata[default]
head = insert_node_before(head,stack,copied(data[nsforced or getattr(stack,nsselector) or nsselector]))
current = default
- done = true
+ if ok then
+ done = true
+ end
end
else
local s = getattr(stack,nsselector)
@@ -377,7 +390,9 @@ local function selective(namespace,attribute,head,inheritance,default) -- two at
head = insert_node_before(head,stack,copied(data[nsforced or getattr(stack,nsselector) or nsselector]))
current = c
current_selector = s
- done = true
+ if ok then
+ done = true
+ end
end
end
if leader then
@@ -389,20 +404,26 @@ local function selective(namespace,attribute,head,inheritance,default) -- two at
if leader ~= list then
setleader(stack,list)
end
- done = done or ok
+ if ok then
+ done = true
+ end
else
local list, ok = selective(namespace,attribute,leader,inheritance,default)
if leader ~= list then
setleader(stack,list)
end
- done = done or ok
+ if ok then
+ done = true
+ end
end
else
local list, ok = selective(namespace,attribute,leader,inheritance,default)
if leader ~= list then
setleader(stack,list)
end
- done = done or ok
+ if ok then
+ done = true
+ end
end
-- end nested
leader = false
@@ -410,9 +431,9 @@ local function selective(namespace,attribute,head,inheritance,default) -- two at
elseif default and inheritance then
if current ~= default then
local data = nsdata[default]
- head = insert_node_before(head,stack,copied(data[nsforced or getattr(stack,nsselector) or nsselector]))
+ head = insert_node_before(head,stack,copied(data[nsforced or getattr(stack,nsselector) or nsselector]))
current = default
- done = true
+ done = true
end
elseif current > 0 then
head = insert_node_before(head,stack,copied(nsnone))
@@ -464,57 +485,63 @@ local function stacked(namespace,attribute,head,default) -- no triggering, no in
if a and current ~= a and nslistwise[a] then -- viewerlayer / needs checking, see below
local p = current
current = a
- head = insert_node_before(head,stack,copied(nsdata[a]))
+ head = insert_node_before(head,stack,copied(nsdata[a]))
local list = stacked(namespace,attribute,content,current) -- two return values
if content ~= list then
setlist(stack,list)
end
- done = true
head, stack = insert_node_after(head,stack,copied(nsnone))
current = p
+ done = true
else
local list, ok = stacked(namespace,attribute,content,current)
if content ~= list then
setlist(stack,list) -- only if ok
end
- done = done or ok
+ if ok then
+ done = true
+ end
end
else
local list, ok = stacked(namespace,attribute,content,current)
if content ~= list then
setlist(stack,list) -- only if ok
end
- done = done or ok
+ if ok then
+ done = true
+ end
end
end
elseif id == rule_code then
--- if subtype(stack) == normal_rule then
- check = getfield(stack,"width") ~= 0
--- end
+ check = getwidth(stack) ~= 0
end
if check then
local a = getattr(stack,attribute)
if a then
if current ~= a then
- head = insert_node_before(head,stack,copied(nsdata[a]))
- depth = depth + 1
- current, done = a, true
+ head = insert_node_before(head,stack,copied(nsdata[a]))
+ depth = depth + 1
+ current = a
+ done = true
end
if leader then
local list, ok = stacked(namespace,attribute,content,current)
if leader ~= list then
setleader(stack,list) -- only if ok
end
- done = done or ok
+ if ok then
+ done = true
+ end
leader = false
end
elseif default > 0 then
--
elseif current > 0 then
- head = insert_node_before(head,stack,copied(nsnone))
- depth = depth - 1
- current, done = 0, true
+ head = insert_node_before(head,stack,copied(nsnone))
+ depth = depth - 1
+ current = 0
+ done = true
end
check = false
end
@@ -574,19 +601,21 @@ local function stacker(namespace,attribute,head,default) -- no triggering, no in
if content ~= list then
setlist(current,list)
end
- done = done or ok
+ if ok then
+ done = true
+ end
end
else
local list, ok = stacker(namespace,attribute,content,default)
if list ~= content then
setlist(current,list)
end
- done = done or ok
+ if ok then
+ done = true
+ end
end
elseif id == rule_code then
--- if subtype(stack) == normal_rule then
- check = getfield(current,"width") ~= 0
--- end
+ check = getwidth(current) ~= 0
end
if check then
@@ -600,11 +629,14 @@ local function stacker(namespace,attribute,head,default) -- no triggering, no in
if n then
head = insert_node_before(head,current,tonut(n)) -- a
end
- attrib, done = a, true
+ attrib = a
+ done = true
if leader then
-- tricky as a leader has to be a list so we cannot inject before
local list, ok = stacker(namespace,attribute,leader,attrib)
- done = done or ok
+ if ok then
+ done = true
+ end
leader = false
end
end
diff --git a/tex/context/base/mkiv/node-fin.mkiv b/tex/context/base/mkiv/node-fin.mkiv
index 413a00722..6c5bf17f1 100644
--- a/tex/context/base/mkiv/node-fin.mkiv
+++ b/tex/context/base/mkiv/node-fin.mkiv
@@ -34,46 +34,47 @@
\definesystemattribute[trigger][public]
-\newcount\attributeboxcount
+\newcount\c_syst_attr_trigger
\edef\startinheritattributes{\attribute\triggerattribute\plusone}
\edef\stopinheritattributes {\attribute\triggerattribute\attributeunsetvalue}
-\def\doattributedcopy{\afterassignment\dodoattributedcopy\attributeboxcount}
-\def\doattributedbox {\afterassignment\dodoattributedbox \attributeboxcount}
+\def\syst_attr_trigger_copy_yes{\afterassignment\syst_attr_trigger_copy_indeed\c_syst_attr_trigger}
+\def\syst_attr_trigger_dump_yes{\afterassignment\syst_attr_trigger_dump_indeed\c_syst_attr_trigger}
-\def\dodoattributedcopy
- {\startinheritattributes
- \ifvbox\attributeboxcount
- \vpack{\unvcopy\attributeboxcount}%
+\def\syst_attr_trigger_copy_indeed
+ {\ifvbox\c_syst_attr_trigger
+ \vpack attr \triggerattribute \plusone {\unvcopy\c_syst_attr_trigger}%
\else
- \hpack{\unhcopy\attributeboxcount}%
- \fi
- \stopinheritattributes}
-
-\def\dodoattributedbox
- {\startinheritattributes
- \ifvbox\attributeboxcount
- \vpack{\unvbox\attributeboxcount}%
+ \hpack attr \triggerattribute \plusone {\unhcopy\c_syst_attr_trigger}%
+ \fi}
+
+\def\syst_attr_trigger_dump_indeed
+ {\ifvbox\c_syst_attr_trigger
+ \vpack attr \triggerattribute \plusone {\unvbox\c_syst_attr_trigger}%
\else
- \hpack{\unhbox\attributeboxcount}%
- \fi
- \stopinheritattributes}
+ \hpack attr \triggerattribute \plusone {\unhbox\c_syst_attr_trigger}%
+ \fi}
-\def\enableattributeinheritance
+\unexpanded\def\enableattributeinheritance
{\clf_enablestatetriggering
- \let\attributedcopy\doattributedcopy
- \let\attributedbox \doattributedbox}
+ \let\attributedcopy\syst_attr_trigger_copy_yes
+ \let\attributedbox \syst_attr_trigger_dump_yes}
-\def\disableattributeinheritance
+\unexpanded\def\disableattributeinheritance
{\clf_disablestatetriggering
\let\attributedcopy\copy
\let\attributedbox \box}
\disableattributeinheritance
+\installtexdirective
+ {attributes.inheritance}
+ {\enableattributeinheritance}
+ {\disableattributeinheritance}
+
% \appendtoks
-% \enableattributeinheritance % will become default
+% \enableattributeinheritance % might become default
% \to\everyjob
\protect \endinput
diff --git a/tex/context/base/mkiv/node-fnt.lua b/tex/context/base/mkiv/node-fnt.lua
index e77280c37..8aa088f88 100644
--- a/tex/context/base/mkiv/node-fnt.lua
+++ b/tex/context/base/mkiv/node-fnt.lua
@@ -64,11 +64,9 @@ 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 flush_node = nuts.flush
-local glyph_code = nodecodes.glyph
local disc_code = nodecodes.disc
local boundary_code = nodecodes.boundary
local word_boundary = nodes.boundarycodes.word
@@ -80,11 +78,6 @@ local setmetatableindex = table.setmetatableindex
--
-- 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 = { }
@@ -146,7 +139,12 @@ fonts.hashes.processes = fontprocesses
local ligaturing = nuts.ligaturing
local kerning = nuts.kerning
-local expanders
+-- -- -- this will go away
+
+local disccodes = nodes.disccodes
+local explicit_code = disccodes.explicit
+local automatic_code = disccodes.automatic
+local expanders = nil
function fonts.setdiscexpansion(v)
if v == nil or v == true then
@@ -164,57 +162,79 @@ end
fonts.setdiscexpansion(true)
-function handlers.characters(head)
+-- -- -- till here
+
+local function start_trace(head)
+ 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 function stop_trace(u,usedfonts,a,attrfonts,b,basefonts,r,redundant,e,expanders)
+ 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",r > 0 and r or "none")
+if expanders then
+ report_fonts("expanded: %s",e > 0 and e or "none")
+end
+ report_fonts()
+end
+
+function handlers.characters(head,groupcode,size,packtype,direction)
-- 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
+ local none = false
+ local nuthead = tonut(head)
+
+ local a, u, b, r, e = 0, 0, 0, 0, 0
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
+ start_trace(head)
end
- local nuthead = tonut(head)
+ -- There is no gain in checking for a single glyph and then having a fast path. On the
+ -- metafun manual (with some 2500 single char lists) the difference is just noise.
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
+ local attr = (none and prevattr) or 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
+ none = fontmodes[font] == "none"
+ if none then
-- skip
+ -- variants = false
protect_glyph(n)
else
if basefont then
@@ -233,7 +253,7 @@ function handlers.characters(head)
a = a + 1
elseif force_basepass then
b = b + 1
- basefont = { n, nil }
+ basefont = { n, false }
basefonts[b] = basefont
end
end
@@ -246,7 +266,7 @@ function handlers.characters(head)
u = u + 1
elseif force_basepass then
b = b + 1
- basefont = { n, nil }
+ basefont = { n, false }
basefonts[b] = basefont
end
end
@@ -267,19 +287,23 @@ function handlers.characters(head)
report_fonts("replacing %C by %C",char,variant)
end
setchar(p,variant)
- if not redundant then
- redundant = { n }
+ if redundant then
+ r = r + 1
+ redundant[r] = n
else
- redundant[#redundant+1] = n
+ r = 1
+ redundant = { n }
end
end
end
elseif keep_redundant then
-- go on, can be used for tracing
- elseif not redundant then
- redundant = { n }
+ elseif redundant then
+ r = r + 1
+ redundant[r] = n
else
- redundant[#redundant+1] = n
+ r = 1
+ redundant = { n }
end
end
end
@@ -294,8 +318,10 @@ function handlers.characters(head)
for b in traverse_id(boundary_code,nuthead) do
if getsubtype(b) == word_boundary then
if redundant then
- redundant[#redundant+1] = b
+ r = r + 1
+ redundant[r] = b
else
+ r = 1
redundant = { b }
end
end
@@ -304,7 +330,7 @@ function handlers.characters(head)
end
if redundant then
- for i=1,#redundant do
+ for i=1,r do
local r = redundant[i]
local p, n = getboth(r)
if r == nuthead then
@@ -316,38 +342,50 @@ function handlers.characters(head)
if b > 0 then
for i=1,b do
local bi = basefonts[i]
- if r == bi[1] then
+ local b1 = bi[1]
+ local b2 = bi[2]
+ if b1 == b2 then
+ if b1 == r then
+ bi[1] = false
+ bi[2] = false
+ end
+ elseif b1 == r then
bi[1] = n
- end
- if r == bi[2] then
- bi[2] = n
+ elseif b2 == r then
+ bi[2] = p
end
end
end
- free_node(r)
+ flush_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
+ -- we could use first_glyph, only doing replace is good enough because
+ -- pre and post are normally used for hyphens and these come from fonts
+ -- that part of the hyphenated word
local _, _, r = getdisc(d)
if r then
+ local prevfont = nil
+ local prevattr = nil
+ local none = false
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
+ local attr = (none and prevattr) or getattr(n,0) or 0 -- zero attribute is reserved for fonts in context
if font ~= prevfont or attr ~= prevattr then
- if attr > 0 then
+ prevfont = font
+ prevattr = attr
+ none = fontmodes[font] == "none" -- very unlikely that we run into disc nodes in none mode
+ if none then
+ -- skip
+ -- variants = false
+ protect_glyph(n)
+ elseif attr > 0 then
local used = attrfonts[font]
if not used then
used = { }
@@ -370,16 +408,14 @@ function handlers.characters(head)
end
end
end
- prevfont = font
- prevattr = attr
end
+ -- we assume one font for now (and if there are more and we get into issues then
+ -- we can always remove the break)
+ break
end
- break
elseif expanders then
local subtype = getsubtype(d)
- if subtype == discretionary_code then
- -- already done when replace
- else
+ if subtype == automatic_code or subtype == explicit_code then
expanders[subtype](d)
e = e + 1
end
@@ -389,34 +425,35 @@ function handlers.characters(head)
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()
+ stop_trace(u,usedfonts,a,attrfonts,b,basefonts,r,redundant,e,expanders)
end
+
-- in context we always have at least 2 processors
if u == 0 then
-- skip
elseif u == 1 then
local font, processors = next(usedfonts)
+ -- local attr = a == 0 and false or 0 -- 0 is the savest way
+ local attr = a > 0 and 0 or false -- 0 is the savest way
for i=1,#processors do
- local h, d = processors[i](head,font,0)
+ local h, d = processors[i](head,font,attr,direction)
if d then
- head = h or head
+ if h then
+ head = h
+ end
done = true
end
end
else
- for font, processors in next, usedfonts do
+ -- local attr = a == 0 and false or 0 -- 0 is the savest way
+ local attr = a > 0 and 0 or false -- 0 is the savest way
+ for font, processors in next, usedfonts do -- unordered
for i=1,#processors do
- local h, d = processors[i](head,font,0)
+ local h, d = processors[i](head,font,attr,direction)
if d then
- head = h or head
+ if h then
+ head = h
+ end
done = true
end
end
@@ -426,22 +463,26 @@ function handlers.characters(head)
-- skip
elseif a == 1 then
local font, dynamics = next(attrfonts)
- for attribute, processors in next, dynamics do -- attr can switch in between
+ for attribute, processors in next, dynamics do -- unordered, attr can switch in between
for i=1,#processors do
- local h, d = processors[i](head,font,attribute)
+ local h, d = processors[i](head,font,attribute,direction)
if d then
- head = h or head
+ if h then
+ head = h
+ end
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 attribute, processors in next, dynamics do -- unordered, attr can switch in between
for i=1,#processors do
- local h, d = processors[i](head,font,attribute)
+ local h, d = processors[i](head,font,attribute,direction)
if d then
- head = h or head
+ if h then
+ head = h
+ end
done = true
end
end
@@ -458,14 +499,15 @@ function handlers.characters(head)
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)
+ start = ligaturing(start,stop)
+ start = kerning(start,stop)
elseif start then -- safeguard
start = ligaturing(start)
start = kerning(start)
end
- if front then
- head = tonode(start)
+ if front and nuthead ~= start then
+ -- nuthead = start
+ head = tonode(start)
end
end
else
@@ -474,26 +516,28 @@ function handlers.characters(head)
local range = basefonts[i]
local start = range[1]
local stop = range[2]
- if start then
+ if start then -- and start ~= stop but that seldom happens
local front = nuthead == start
- local prev, next
+ local prev = getprev(start)
+ local next = getnext(stop)
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
+ -- is done automatically
if prev then
setlink(prev,start)
end
if next then
setlink(stop,next)
end
+ -- till here
if front and nuthead ~= start then
- head = tonode(nuthead)
+ nuthead = start
+ head = tonode(start)
end
end
end
diff --git a/tex/context/base/mkiv/node-ini.lua b/tex/context/base/mkiv/node-ini.lua
index f8720f717..bdccf8cba 100644
--- a/tex/context/base/mkiv/node-ini.lua
+++ b/tex/context/base/mkiv/node-ini.lua
@@ -12,6 +12,8 @@ modules.</p>
--ldx]]--
-- this module is being reconstructed
+--
+-- todo: datatype table per node type
-- todo: query names with new node.subtypes
@@ -90,6 +92,13 @@ local listcodes = mark(getsubtypes("list"))
local rulecodes = mark(getsubtypes("rule"))
+if not rulecodes[5] then
+ rulecodes[5] = "over"
+ rulecodes[6] = "under"
+ rulecodes[7] = "fraction"
+ rulecodes[8] = "radical"
+end
+
-- local glyphcodes = allocate {
-- [0] = "character",
-- [1] = "glyph",
@@ -248,6 +257,7 @@ local accentcodes = mark(getsubtypes("accent"))
-- [1] = "left",
-- [2] = "middle",
-- [3] = "right",
+-- [4] = "no",
-- }
local fencecodes = mark(getsubtypes("fence"))
@@ -274,6 +284,18 @@ local usercodes = allocate {
[116] = "tokens" -- t
}
+local noadoptions = allocate {
+ set = 0x08,
+ unused_1 = 0x00 + 0x08,
+ unused_2 = 0x01 + 0x08,
+ axis = 0x02 + 0x08,
+ no_axis = 0x04 + 0x08,
+ exact = 0x10 + 0x08,
+ left = 0x11 + 0x08,
+ middle = 0x12 + 0x08,
+ right = 0x14 + 0x08,
+}
+
skipcodes = allocate(swapped(skipcodes,skipcodes))
boundarycodes = allocate(swapped(boundarycodes,boundarycodes))
noadcodes = allocate(swapped(noadcodes,noadcodes))
@@ -293,6 +315,7 @@ fencecodes = allocate(swapped(fencecodes,fencecodes))
rulecodes = allocate(swapped(rulecodes,rulecodes))
leadercodes = allocate(swapped(leadercodes,leadercodes))
usercodes = allocate(swapped(usercodes,usercodes))
+noadoptions = allocate(swapped(noadoptions,noadoptions))
nodes.skipcodes = skipcodes
nodes.boundarycodes = boundarycodes
@@ -313,6 +336,7 @@ nodes.fencecodes = fencecodes
nodes.rulecodes = rulecodes
nodes.leadercodes = leadercodes
nodes.usercodes = usercodes
+nodes.noadoptions = noadoptions
nodes.gluecodes = skipcodes -- more official
nodes.whatsitcodes = whatcodes -- more official
@@ -327,25 +351,38 @@ 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,
- rule = rulecodes,
- leader = leadercodes,
- user = usercodes,
+ 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,
+ rule = rulecodes,
+ leader = leadercodes,
+ user = usercodes,
+ noadoptions = noadoptions,
+}
+
+nodes.noadoptions = {
+ set = 0x08,
+ unused_1 = 0x00 + 0x08,
+ unused_2 = 0x01 + 0x08,
+ axis = 0x02 + 0x08,
+ no_axis = 0x04 + 0x08,
+ exact = 0x10 + 0x08,
+ left = 0x11 + 0x08,
+ middle = 0x12 + 0x08,
+ right = 0x14 + 0x08,
}
local report_codes = logs.reporter("nodes","codes")
@@ -373,3 +410,11 @@ if not nodecodes.dir then
report_codes("use a newer version of luatex")
os.exit()
end
+
+-- We don't need this sanitize-after-callback in ConTeXt and by disabling it we
+-- also have a way to check if LuaTeX itself does the right thing.
+
+if node.fix_node_lists then
+ node.fix_node_lists(false)
+end
+
diff --git a/tex/context/base/mkiv/node-ini.mkiv b/tex/context/base/mkiv/node-ini.mkiv
index d04e647de..369b06ab2 100644
--- a/tex/context/base/mkiv/node-ini.mkiv
+++ b/tex/context/base/mkiv/node-ini.mkiv
@@ -34,8 +34,8 @@
\registerctxluafile{node-ext}{1.001}
\registerctxluafile{node-acc}{1.001} % experimental
%registerctxluafile{node-prp}{1.001} % makes no sense (yet)
-
-\doifelsefile{node-ppt.lua}{\registerctxluafile{node-ppt}{1.001}}{}
+\registerctxluafile{node-ppt}{1.001}
+\registerctxluafile{node-scn}{1.001}
\newcount\c_node_tracers_show_box % box number
diff --git a/tex/context/base/mkiv/node-ltp.lua b/tex/context/base/mkiv/node-ltp.lua
index ae17ab9ef..22a4799ad 100644
--- a/tex/context/base/mkiv/node-ltp.lua
+++ b/tex/context/base/mkiv/node-ltp.lua
@@ -21,6 +21,7 @@ if not modules then modules = { } end modules ['node-par'] = {
-- 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: adapt math glue spacing to new model (left/right)
-- todo: optimize a bit more (less par.*)
@@ -135,21 +136,20 @@ if not modules then modules = { } end modules ['node-par'] = {
local utfchar = utf.char
local write, write_nl = texio.write, texio.write_nl
-local sub, format = string.sub, string.format
+local sub, formatters = string.sub, string.formatters
local round, floor = math.round, math.floor
local insert, remove = table.insert, table.remove
-local fonts, nodes, node = fonts, nodes, node
+-- local fonts, nodes, node = fonts, nodes, node -- too many locals
local trace_basic = false trackers.register("builders.paragraphs.basic", function(v) trace_basic = v end)
local trace_lastlinefit = false trackers.register("builders.paragraphs.lastlinefit", function(v) trace_lastlinefit = v end)
local trace_adjusting = false trackers.register("builders.paragraphs.adjusting", function(v) trace_adjusting = v end)
local trace_protruding = false trackers.register("builders.paragraphs.protruding", function(v) trace_protruding = v end)
local trace_expansion = false trackers.register("builders.paragraphs.expansion", function(v) trace_expansion = v end)
-local trace_quality = false trackers.register("builders.paragraphs.quality", function(v) trace_quality = v end)
local report_parbuilders = logs.reporter("nodes","parbuilders")
-local report_hpackers = logs.reporter("nodes","hpackers")
+----- report_hpackers = logs.reporter("nodes","hpackers")
local calculate_badness = tex.badness
local texnest = tex.nest
@@ -185,7 +185,6 @@ local constructors = parbuilders.constructors
local setmetatableindex = table.setmetatableindex
local fonthashes = fonts.hashes
-local fontdata = fonthashes.identifiers
local chardata = fonthashes.characters
local quaddata = fonthashes.quads
local parameters = fonthashes.parameters
@@ -206,6 +205,16 @@ local getchar = nuts.getchar
local getdisc = nuts.getdisc
local getattr = nuts.getattr
local getdisc = nuts.getdisc
+local getglue = nuts.getglue
+local getwhd = nuts.getwhd
+local getcomponents = nuts.getcomponents
+local getkern = nuts.getkern
+local getpenalty = nuts.getpenalty
+local getdir = nuts.getdir
+local getshift = nuts.getshift
+local getwidth = nuts.getwidth
+local getheight = nuts.getheight
+local getdepth = nuts.getdepth
local isglyph = nuts.isglyph
@@ -217,22 +226,26 @@ 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 setglue = nuts.setglue
+local setwhd = nuts.setwhd
+local setkern = nuts.setkern
+local setdir = nuts.setdir
+local setshift = nuts.setshift
+local setwidth = nuts.setwidth
+----- getheight = nuts.getheight
+----- getdepth = nuts.getdepth
+
+local slide_node_list = nuts.slide -- get rid of this, probably ok > 78.2
local find_tail = nuts.tail
-local new_node = nuts.new
local copy_node = nuts.copy
-local copy_nodelist = nuts.copy_list
-local flush_node = nuts.free
-local flush_nodelist = nuts.flush_list
-local hpack_nodes = nuts.hpack
+local flush_node = nuts.flush
+local flush_node_list = nuts.flush_list
+----- hpack_nodes = nuts.hpack
local xpack_nodes = nuts.hpack
local replace_node = nuts.replace
local insert_node_after = nuts.insert_after
local insert_node_before = nuts.insert_before
-local traverse_by_id = nuts.traverse_id
-
-local setnodecolor = nodes.tracers.colors.set
+local is_zero_glue = nuts.is_zero_glue
local nodepool = nuts.pool
@@ -278,7 +291,7 @@ local ligature_code = glyphcodes.ligature
local stretch_orders = nodes.fillcodes
local leftmargin_code = margincodes.left
-local rightmargin_code = margincodes.right
+----- rightmargin_code = margincodes.right
local automatic_disc_code = disccodes.automatic
local regular_disc_code = disccodes.regular
@@ -318,6 +331,7 @@ local new_lineskip = nodepool.lineskip
local new_baselineskip = nodepool.baselineskip
local new_temp = nodepool.temp
local new_rule = nodepool.rule
+local new_hlist = nodepool.hlist
local is_rotated = nodes.is_rotated
local is_parallel = nodes.textdir_is_parallel
@@ -342,7 +356,7 @@ local function new_dir_stack(dir) -- also use elsewhere
end
-- The next function checks a dir node and returns the new dir state. By
--- using s static table we are quite efficient. This function is used
+-- using a static table we are quite efficient. This function is used
-- in the parbuilder.
local function checked_line_dir(stack,current)
@@ -350,12 +364,12 @@ local function checked_line_dir(stack,current)
local n = stack.n + 1
stack.n = n
stack[n] = current
- return getfield(current,"dir")
+ return getdir(current)
elseif n > 0 then
local n = stack.n
local dirnode = stack[n]
dirstack.n = n - 1
- return getfield(dirnode,"dir")
+ return getdir(dirnode)
else
report_parbuilders("warning: missing pop node (%a)",1) -- in line ...
end
@@ -372,7 +386,7 @@ local function inject_dirs_at_end_of_line(stack,current,start,stop)
while start and start ~= stop do
local id = getid(start)
if id == dir_code then
- if not dir_pops[getfield(start,"dir")] then -- weird, what is this #
+ if not dir_pops[getdir(start)] then -- weird, what is this #
n = n + 1
stack[n] = start
elseif n > 0 then
@@ -384,7 +398,7 @@ local function inject_dirs_at_end_of_line(stack,current,start,stop)
start = getnext(start)
end
for i=n,1,-1 do
- h, current = insert_node_after(current,current,new_dir(dir_negations[getfield(stack[i],"dir")]))
+ h, current = insert_node_after(current,current,new_dir(dir_negations[getdir(stack[i])]))
end
stack.n = n
return current
@@ -616,12 +630,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
+ elseif id == boundary_code then
+ if getsubtype(head) == 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
else
return head
@@ -666,12 +684,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
+ elseif id == boundary_code then
+ if getsubtype(head) == 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
else
return tail
@@ -726,10 +748,11 @@ local function add_to_width(line_break_dir,checked_expansion,s) -- split into tw
while s do
local char, id = isglyph(s)
if char then
+ local wd, ht, dp = getwhd(s)
if is_rotated[line_break_dir] then -- can be shared
- size = size + getfield(s,"height") + getfield(s,"depth")
+ size = size + ht + dp
else
- size = size + getfield(s,"width")
+ size = size + wd
end
if checked_expansion then
local data = checked_expansion[getfont(s)]
@@ -742,13 +765,14 @@ local function add_to_width(line_break_dir,checked_expansion,s) -- split into tw
end
end
elseif id == hlist_code or id == vlist_code then
- if is_parallel[getfield(s,"dir")][line_break_dir] then
- size = size + getfield(s,"width")
+ local wd, ht, dp = getwhd(s)
+ if is_parallel[getdir(s)][line_break_dir] then
+ size = size + wd
else
- size = size + getfield(s,"height") + getfield(s,"depth")
+ size = size + ht + dp
end
elseif id == kern_code then
- local kern = getfield(s,"kern")
+ local kern = getkern(s)
if kern ~= 0 then
if checked_expansion and expand_kerns and (getsubtype(s) == kerning_code or getattr(a_fontkern)) then
local stretch, shrink = kern_stretch_shrink(s,kern)
@@ -764,7 +788,7 @@ local function add_to_width(line_break_dir,checked_expansion,s) -- split into tw
size = size + kern
end
elseif id == rule_code then
- size = size + getfield(s,"width")
+ size = size + getwidth(s)
elseif trace_unsupported then
report_parbuilders("unsupported node at location %a",6)
end
@@ -809,21 +833,28 @@ 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 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")
+ local wd, stretch, shrink, stretch_order = getglue(p)
+ local order = stretch_orders[stretch_order]
+ break_width.size = break_width.size - wd
+ break_width[order] = break_width[order] - stretch
+ break_width.shrink = break_width.shrink - shrink
elseif id == penalty_code then
-- do nothing
elseif id == kern_code then
local s = getsubtype(p)
if s == userkern_code or s == italickern_code then
- break_width.size = break_width.size - getfield(p,"kern")
+ break_width.size = break_width.size - getkern(p)
else
return
end
elseif id == math_code then
- break_width.size = break_width.size - getfield(p,"surround")
+ break_width.size = break_width.size - getkern(p) -- surround
+ -- new in luatex
+ local wd, stretch, shrink, stretch_order = getglue(p)
+ local order = stretch_orders[stretch_order]
+ break_width.size = break_width.size - wd
+ break_width[order] = break_width[order] - stretch
+ break_width.shrink = break_width.shrink - shrink
else
return
end
@@ -833,29 +864,37 @@ end
local function append_to_vlist(par, b)
local prev_depth = par.prev_depth
+ local head_field = par.head_field
+ local tail_field = head_field and slide_node_list(head_field) -- todo: find_tail
+ local is_hlist = getid(b) == hlist_code
-- 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 head_field = par.head_field
+ if is_hlist then
+ local width, stretch, shrink, stretch_order, shrink_order = getglue(par.baseline_skip)
+ local delta = width - prev_depth - getheight(b) -- deficiency of space between baselines
+ local skip = nil
+ if delta < par.line_skip_limit then
+ width, stretch, shrink, stretch_order, shrink_order = getglue(par.lineskip)
+ skip = new_lineskip(width, stretch, shrink, stretch_order, shrink_order)
+ else
+ skip = new_baselineskip(delta, stretch, shrink, stretch_order, shrink_order)
+ end
if head_field then
- local n = slide_nodelist(head_field) -- todo: find_tail
- setlink(n,s)
+ setlink(tail_field,skip)
else
- par.head_field = s
+ par.head_field = skip
+ head_field = skip
end
+ tail_field = skip
end
end
- local head_field = par.head_field
if head_field then
- local n = slide_nodelist(head_field) -- todo: find_tail
- setlink(n,b)
+ setlink(tail_field,b)
else
par.head_field = b
end
- if getid(b) == hlist_code then
- local pd = getfield(b,"depth")
+ if is_hlist then
+ local pd = getdepth(b)
par.prev_depth = pd
texnest[texnest.ptr].prevdepth = pd
end
@@ -864,7 +903,7 @@ end
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
+ local n = slide_node_list(head_field) -- todo: find_tail
setlink(n,b)
else
par.head_field = b
@@ -878,7 +917,7 @@ local hztolerance = 2500
local hzwarned = false
local function used_skip(s)
- return s and (getfield(s,"width") ~= 0 or getfield(s,"stretch") ~= 0 or getfield(s,"shrink") ~= 0) and s or nil
+ return s and not is_zero_glue(s) and s
end
local function initialize_line_break(head,display)
@@ -970,7 +1009,7 @@ local function initialize_line_break(head,display)
prev_depth = texnest[texnest.ptr].prevdepth,
- final_par_glue = slide_nodelist(head), -- todo: we know tail already, slow
+ final_par_glue = slide_node_list(head), -- todo: we know tail already, slow
par_break_dir = tex.pardir,
line_break_dir = tex.pardir,
@@ -1069,13 +1108,17 @@ local function initialize_line_break(head,display)
local l = check_shrinkage(par,left_skip)
local r = check_shrinkage(par,right_skip)
- local l_order = stretch_orders[getfield(l,"stretch_order")]
- local r_order = stretch_orders[getfield(r,"stretch_order")]
- background.size = getfield(l,"width") + getfield(r,"width")
- background.shrink = getfield(l,"shrink") + getfield(r,"shrink")
- background[l_order] = getfield(l,"stretch")
- background[r_order] = getfield(r,"stretch") + background[r_order]
+ local lwidth, lstretch, lshrink, lstretch_order, lshrink_order = getglue(l)
+ local rwidth, rstretch, rshrink, rstretch_order, rshrink_order = getglue(r)
+
+ local l_order = stretch_orders[lstretch_order]
+ local r_order = stretch_orders[rstretch_order]
+
+ background.size = lwidth + rwidth
+ background.shrink = lshrink + rshrink
+ background[l_order] = lstretch
+ background[r_order] = rstretch + background[r_order]
-- this will move up so that we can assign the whole par table
@@ -1139,9 +1182,9 @@ local function initialize_line_break(head,display)
end
if last_line_fit > 0 then
- local spec = par.final_par_glue.spec
- local stretch = spec.stretch
- local stretch_order = spec.stretch_order
+ local final_par_glue = par.final_par_glue
+ local stretch = getfield(final_par_glue,"stretch")
+ local stretch_order = getfield(final_par_glue,"stretch_order")
if stretch > 0 and stretch_order > 0 and background.fi == 0 and background.fil == 0 and background.fill == 0 and background.filll == 0 then
par.do_last_line_fit = true
local si = stretch_orders[stretch_order]
@@ -1205,7 +1248,7 @@ local function post_line_break(par)
if not lastnode then
-- only at the end
- lastnode = slide_nodelist(head) -- todo: find_tail
+ lastnode = slide_node_list(head) -- todo: find_tail
if lastnode == par.final_par_glue then
lineend = lastnode
lastnode = getprev(lastnode)
@@ -1217,7 +1260,7 @@ local function post_line_break(par)
lastnode = replace_node(lastnode,new_rightskip(rightskip))
glue_break = true
lineend = lastnode
- lastnode = getprev(r)
+ lastnode = getprev(lastnode)
elseif id == disc_code then
local prevlast = getprev(lastnode)
local nextlast = getnext(lastnode)
@@ -1228,7 +1271,7 @@ local function post_line_break(par)
report_parbuilders('unsupported disc at location %a',3)
end
if pre then
- flush_nodelist(pre)
+ flush_node_list(pre)
pre = nil -- signal
end
if replace then
@@ -1239,13 +1282,13 @@ local function post_line_break(par)
setdisc(lastnode,pre,post,replace)
local pre, post, replace = getdisc(prevlast)
if pre then
- flush_nodelist(pre)
+ flush_node_list(pre)
end
if replace then
- flush_nodelist(replace)
+ flush_node_list(replace)
end
if post then
- flush_nodelist(post)
+ flush_node_list(post)
end
setdisc(prevlast) -- nil,nil,nil
elseif subtype == first_disc_code then
@@ -1258,7 +1301,7 @@ local function post_line_break(par)
setfield(lastnode,"post") -- nil
end
if replace then
- flush_nodelist(replace)
+ flush_node_list(replace)
end
if pre then
setlink(prevlast,pre)
@@ -1272,9 +1315,11 @@ local function post_line_break(par)
setdisc(lastnode) -- nil, nil, nil
disc_break = true
elseif id == kern_code then
- setfield(lastnode,"kern",0)
+ setkern(lastnode,0)
elseif getid(lastnode) == math_code then
- setfield(lastnode,"surround",0)
+ setkern(lastnode,0) -- surround
+ -- new in luatex
+ setglue(lastnode) -- zeros
end
end
lastnode = inject_dirs_at_end_of_line(stack,lastnode,getnext(head),current_break.cur_break)
@@ -1365,21 +1410,21 @@ local function post_line_break(par)
local adjust_head = texlists.adjust_head
local pre_adjust_head = texlists.pre_adjust_head
--
- setfield(finished_line,"shift",cur_indent)
+ setshift(finished_line,cur_indent)
--
-- -- this is gone:
--
-- if par.each_line_height ~= ignored_dimen then
- -- setfield(finished_line,"height",par.each_line_height)
+ -- setheight(finished_line,par.each_line_height)
-- end
-- if par.each_line_depth ~= ignored_dimen then
- -- setfield(finished_line,"depth",par.each_line_depth)
+ -- setdepth(finished_line,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)
+ -- setheight(finished_line,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)
+ -- setdepth(finished_line,par.last_line_depth)
-- end
--
if texlists.pre_adjust_head ~= pre_adjust_head then
@@ -1427,29 +1472,35 @@ local function post_line_break(par)
local next = nil
while true do
next = getnext(current)
- if next == current_break.cur_break or getid(next) == glyph_code then
+ if next == current_break.cur_break then
break
end
- local id = getid(next)
- local subtype = getsubtype(next)
- if id == localpar_code then
+ local id = getid(next)
+ if id == glyph_code then
+ break
+ elseif 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 subtype ~= italickern_code and not getattr(next,a_fontkern)) then
- -- fontkerns and accent kerns as well as otf injections
+ setkern(next,0) -- surround
+ -- new in luatex
+ setglue(lastnode) -- zeros
break
+ elseif id == kern_code then
+ local subtype = getsubtype(next)
+ if 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
end
current = next
end
if current ~= head then
setnext(current)
- flush_nodelist(getnext(head))
+ flush_node_list(getnext(head))
setlink(head,next)
end
end
@@ -1480,7 +1531,7 @@ local function wrap_up(par)
par.do_last_line_fit = false
else
local glue = par.final_par_glue
- setfield(glue,"width",getfield(glue,"width") + active_short - active_glue)
+ setwidth(glue,getwidth(glue) + 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)
@@ -1915,8 +1966,8 @@ local function try_break(pi, break_type, par, first_p, current, checked_expansio
local id = getid(l)
if id == glyph_code then
-- ok ?
- elseif id == disc_code and l.post then
- l = l.post -- TODO: first char could be a disc
+ elseif id == disc_code and getfield(l,"post") then
+ l = getfield(l,"post") -- TODO: first char could be a disc
else
l = find_protchar_left(l)
end
@@ -2199,10 +2250,11 @@ function constructors.methods.basic(head,d)
while current and p_active ~= n_active do
local char, id = isglyph(current)
if char then
+ local wd, ht, dp = getwhd(current)
if is_rotated[par.line_break_dir] then
- active_width.size = active_width.size + getfield(current,"height") + getfield(current,"depth")
+ active_width.size = active_width.size + ht + dp
else
- active_width.size = active_width.size + getfield(current,"width")
+ active_width.size = active_width.size + wd
end
if checked_expansion then
local currentfont = getfont(current)
@@ -2222,10 +2274,11 @@ function constructors.methods.basic(head,d)
end
end
elseif id == hlist_code or id == vlist_code then
- if is_parallel[getfield(current,"dir")][par.line_break_dir] then
- active_width.size = active_width.size + getfield(current,"width")
+ local wd, ht, dp = getwhd(current)
+ if is_parallel[getdir(current)][par.line_break_dir] then
+ active_width.size = active_width.size + wd
else
- active_width.size = active_width.size + getfield(current,"depth") + getfield(current,"height")
+ active_width.size = active_width.size + ht + dp
end
elseif id == glue_code then
-- if par.auto_breaking then
@@ -2245,10 +2298,11 @@ function constructors.methods.basic(head,d)
end
end
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")
+ local width, stretch, shrink, stretch_order = getglue(current)
+ local order = stretch_orders[stretch_order]
+ active_width.size = active_width.size + width
+ active_width[order] = active_width[order] + stretch
+ active_width.shrink = active_width.shrink + shrink
elseif id == disc_code then
local subtype = getsubtype(current)
if subtype ~= second_disc_code then
@@ -2256,7 +2310,7 @@ function constructors.methods.basic(head,d)
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
-- 0.81 :
- -- local actual_pen = getfield(current,"penalty")
+ -- local actual_pen = getpenalty(current)
--
local pre, post, replace = getdisc(current)
if not pre then -- trivial pre-break
@@ -2335,9 +2389,9 @@ function constructors.methods.basic(head,d)
p_active, n_active = try_break(0, unhyphenated_code, par, first_p, current, checked_expansion)
end
local active_width = par.active_width
- active_width.size = active_width.size + getfield(current,"kern")
+ active_width.size = active_width.size + getkern(current)
else
- local kern = getfield(current,"kern")
+ local kern = getkern(current)
if kern ~= 0 then
active_width.size = active_width.size + kern
if checked_expansion and expand_kerns and (getsubtype(current) == kerning_code or getattr(current,a_fontkern)) then
@@ -2362,11 +2416,13 @@ function constructors.methods.basic(head,d)
p_active, n_active = try_break(0, unhyphenated_code, par, first_p, current, checked_expansion)
end
local active_width = par.active_width
- active_width.size = active_width.size + getfield(current,"surround")
+ active_width.size = active_width.size + getkern(current) -- surround
+ -- new in luatex
+ + getwidth(current)
elseif id == rule_code then
- active_width.size = active_width.size + getfield(current,"width")
+ active_width.size = active_width.size + getwidth(current)
elseif id == penalty_code then
- p_active, n_active = try_break(getfield(current,"penalty"), unhyphenated_code, par, first_p, current, checked_expansion)
+ p_active, n_active = try_break(getpenalty(current), unhyphenated_code, par, first_p, current, checked_expansion)
elseif id == dir_code then
par.line_break_dir = checked_line_dir(dirstack) or par.line_break_dir
elseif id == localpar_code then
@@ -2448,727 +2504,730 @@ end
-- standard tex logging .. will be adapted ..
-local function write_esc(cs)
- local esc = tex.escapechar
- if esc then
- write("log",utfchar(esc),cs)
- else
- write("log",cs)
+do
+
+ local function write_esc(cs)
+ local esc = tex.escapechar
+ if esc then
+ write("log",utfchar(esc),cs)
+ else
+ write("log",cs)
+ end
end
-end
-function diagnostics.start()
-end
+ function diagnostics.start()
+ end
-function diagnostics.stop()
- write_nl("log",'')
-end
+ function diagnostics.stop()
+ write_nl("log",'')
+ end
-function diagnostics.current_pass(par,what)
- write_nl("log",format("@%s",what))
-end
+ function diagnostics.current_pass(par,what)
+ write_nl("log",formatters["@%s"](what))
+ end
-local verbose = false -- true
+ local verbose = false -- true
-local function short_display(target,a,font_in_short_display)
- while a do
- local char, id = isglyph(a)
- if char then
- local font = getfont(a)
- if font ~= font_in_short_display then
- write(target,tex.fontidentifier(font) .. ' ')
- font_in_short_display = font
- end
- if getsubtype(a) == ligature_code then
- font_in_short_display = short_display(target,getfield(a,"components"),font_in_short_display)
- else
- write(target,utfchar(char))
- end
- elseif id == disc_code then
- 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
- 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,"")
+ local function short_display(target,a,font_in_short_display)
+ while a do
+ local char, id = isglyph(a)
+ if char then
+ local font = getfont(a)
+ if font ~= font_in_short_display then
+ write(target,tex.fontidentifier(font) .. ' ')
+ font_in_short_display = font
+ end
+ -- todo: instead of components the split tounicode string
+ if getsubtype(a) == ligature_code then
+ font_in_short_display = short_display(target,getcomponents(a),font_in_short_display)
+ else
+ write(target,utfchar(char))
end
+ elseif id == disc_code then
+ 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,formatters["[%s]"](nodecodes[id]))
+ elseif id == rule_code then
+ write(target,"|")
+ elseif id == glue_code then
+ 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,"[]")
+ end
+ elseif id == math_code then
+ write(target,"$")
else
write(target,"[]")
end
- elseif id == math_code then
- write(target,"$")
- else
- write(target,"[]")
+ a = getnext(a)
end
- a = getnext(a)
+ return font_in_short_display
end
- return font_in_short_display
-end
-diagnostics.short_display = short_display
+ diagnostics.short_display = short_display
-function diagnostics.break_node(par, q, fit_class, break_type, current) -- %d ?
- local passive = par.passive
- local typ_ind = break_type == hyphenated_code and '-' or ""
- if par.do_last_line_fit then
- local s = number.toscaled(q.active_short)
- local g = number.toscaled(q.active_glue)
- if current then
- write_nl("log",format("@@%d: line %d.%d%s t=%s s=%s g=%s",
- passive.serial or 0,q.line_number-1,fit_class,typ_ind,q.total_demerits,s,g))
+ function diagnostics.break_node(par, q, fit_class, break_type, current) -- %d ?
+ local passive = par.passive
+ local typ_ind = break_type == hyphenated_code and '-' or ""
+ if par.do_last_line_fit then
+ local s = number.toscaled(q.active_short)
+ local g = number.toscaled(q.active_glue)
+ if current then
+ write_nl("log",formatters["@@%d: line %d.%d%s t=%s s=%s g=%s"](
+ passive.serial or 0,q.line_number-1,fit_class,typ_ind,q.total_demerits,s,g))
+ else
+ write_nl("log",formatters["@@%d: line %d.%d%s t=%s s=%s a=%s"](
+ passive.serial or 0,q.line_number-1,fit_class,typ_ind,q.total_demerits,s,g))
+ end
else
- write_nl("log",format("@@%d: line %d.%d%s t=%s s=%s a=%s",
- passive.serial or 0,q.line_number-1,fit_class,typ_ind,q.total_demerits,s,g))
+ write_nl("log",formatters["@@%d: line %d.%d%s t=%s"](
+ passive.serial or 0,q.line_number-1,fit_class,typ_ind,q.total_demerits))
+ end
+ if not passive.prev_break then
+ write("log"," -> @0")
+ else
+ write("log",formatters[" -> @%d"](passive.prev_break.serial or 0))
end
- else
- write_nl("log",format("@@%d: line %d.%d%s t=%s",
- passive.serial or 0,q.line_number-1,fit_class,typ_ind,q.total_demerits))
- end
- if not passive.prev_break then
- write("log"," -> @0")
- else
- write("log",format(" -> @%d", passive.prev_break.serial or 0))
end
-end
-function diagnostics.feasible_break(par, current, r, b, pi, d, artificial_demerits)
- local printed_node = par.printed_node
- if printed_node ~= current then
- write_nl("log","")
+ function diagnostics.feasible_break(par, current, r, b, pi, d, artificial_demerits)
+ local printed_node = par.printed_node
+ if printed_node ~= current then
+ write_nl("log","")
+ if not current then
+ par.font_in_short_display = short_display("log",getnext(printed_node),par.font_in_short_display)
+ else
+ local save_link = getnext(current)
+ setnext(current)
+ write_nl("log","")
+ par.font_in_short_display = short_display("log",getnext(printed_node),par.font_in_short_display)
+ setnext(current,save_link)
+ end
+ par.printed_node = current
+ end
+ write_nl("log","@")
if not current then
- par.font_in_short_display = short_display("log",getnext(printed_node),par.font_in_short_display)
+ write_esc("par")
else
- local save_link = getnext(current)
- setnext(current)
- write_nl("log","")
- par.font_in_short_display = short_display("log",getnext(printed_node),par.font_in_short_display)
- setnext(current,save_link)
+ local id = getid(current)
+ if id == glue_code then
+ -- print nothing
+ elseif id == penalty_code then
+ write_esc("penalty")
+ elseif id == disc_code then
+ write_esc("discretionary")
+ elseif id == kern_code then
+ write_esc("kern")
+ elseif id == math_code then
+ write_esc("math")
+ else
+ write_esc("unknown")
+ end
+ end
+ local via, badness, demerits = 0, '*', '*'
+ if r.break_node then
+ via = r.break_node.serial or 0
+ end
+ if b <= infinite_badness then
+ badness = tonumber(d)
end
- par.printed_node = current
+ if not artificial_demerits then
+ demerits = tonumber(d)
+ end
+ write("log",formatters[" via @%d b=%s p=%s d=%s"](via,badness,pi,demerits))
end
- write_nl("log","@")
- if not current then
- write_esc("par")
- else
- local id = getid(current)
- if id == glue_code then
- -- print nothing
- elseif id == penalty_code then
- write_esc("penalty")
- elseif id == disc_code then
- write_esc("discretionary")
- elseif id == kern_code then
- write_esc("kern")
- elseif id == math_code then
- write_esc("math")
+
+ --
+
+ local function common_message(hlist,line,str)
+ write_nl("")
+ if status.output_active then -- unset
+ write(str," has occurred while \\output is active")
else
- write_esc("unknown")
+ write(str)
end
+ local fileline = status.linenumber
+ if line > 0 then
+ write(formatters[" in paragraph at lines %s--%s"](fileline,"--",fileline+line-1))
+ elseif line < 0 then
+ write(formatters[" in alignment at lines "](fileline,"--",fileline-line-1))
+ else
+ write(formatters[" detected at line %s"](fileline))
+ end
+ write_nl("")
+ diagnostics.short_display(getlist(hlist),false)
+ write_nl("")
+ -- diagnostics.start()
+ -- show_box(getlist(hlist))
+ -- diagnostics.stop()
+ end
+
+ function diagnostics.overfull_hbox(hlist,line,d)
+ common_message(hlist,line,formatters["Overfull \\hbox (%spt too wide)"](number.toscaled(d)))
end
- local via, badness, demerits = 0, '*', '*'
- if r.break_node then
- via = r.break_node.serial or 0
+
+ function diagnostics.bad_hbox(hlist,line,b)
+ common_message(hlist,line,formatters["Tight \\hbox (badness %i)"](b))
end
- if b <= infinite_badness then
- badness = tonumber(d) -- format("%d", b)
+
+ function diagnostics.underfull_hbox(hlist,line,b)
+ common_message(hlist,line,formatters["Underfull \\hbox (badness %i)"](b))
end
- if not artificial_demerits then
- demerits = tonumber(d) -- format("%d", d)
+
+ function diagnostics.loose_hbox(hlist,line,b)
+ common_message(hlist,line,formatters["Loose \\hbox (badness %i)"](b))
end
- write("log",format(" via @%d b=%s p=%s d=%s", via, badness, pi, demerits))
+
end
-- reporting --
statistics.register("alternative parbuilders", function()
if nofpars > 0 then
- return format("%s paragraphs, %s lines (%s protruded, %s adjusted)", nofpars, noflines, nofprotrudedlines, nofadjustedlines)
+ return formatters["%s paragraphs, %s lines (%s protruded, %s adjusted)"](nofpars,noflines,nofprotrudedlines,nofadjustedlines)
end
end)
--- actually scaling kerns is not such a good idea and it will become
--- configureable
-
--- This is no way a replacement for the built in (fast) packer
--- it's just an alternative for special (testing) purposes.
---
--- We could use two hpacks: one to be used in the par builder
--- and one to be used for other purposes. The one in the par
--- builder is much more simple as it does not need the expansion
--- code but only need to register the effective expansion factor
--- with the glyph.
-
-local function glyph_width_height_depth(curdir,pdir,p)
- local wd = getfield(p,"width")
- local ht = getfield(p,"height")
- local dp = getfield(p,"depth")
- if is_rotated[curdir] then
- if is_parallel[curdir][pdir] then
- local half = (ht + dp) / 2
- return wd, half, half
- else
- local half = wd / 2
- return ht + dp, half, half
- end
- elseif is_rotated[pdir] then
- if is_parallel[curdir][pdir] then
- local half = (ht + dp) / 2
- return wd, half, half
+do
+
+ -- actually scaling kerns is not such a good idea and it will become
+ -- configureable
+
+ -- This is no way a replacement for the built in (fast) packer
+ -- it's just an alternative for special (testing) purposes.
+ --
+ -- We could use two hpacks: one to be used in the par builder
+ -- and one to be used for other purposes. The one in the par
+ -- builder is much more simple as it does not need the expansion
+ -- code but only need to register the effective expansion factor
+ -- with the glyph.
+
+ local setnodecolor = nodes.tracers.colors.set
+
+ local function glyph_width_height_depth(curdir,pdir,p)
+ local wd, ht, dp = getwhd(p)
+ if is_rotated[curdir] then
+ if is_parallel[curdir][pdir] then
+ local half = (ht + dp) / 2
+ return wd, half, half
+ else
+ local half = wd / 2
+ return ht + dp, half, half
+ end
+ elseif is_rotated[pdir] then
+ if is_parallel[curdir][pdir] then
+ local half = (ht + dp) / 2
+ return wd, half, half
+ else
+ return ht + dp, wd, 0 -- weird
+ end
else
- return ht + dp, wd, 0 -- weird
- end
- else
- if glyphdir_is_equal[curdir][pdir] then
- return wd, ht, dp
- elseif is_opposite[curdir][pdir] then
- return wd, dp, ht
- else -- can this happen?
- return ht + dp, wd, 0
+ if glyphdir_is_equal[curdir][pdir] then
+ return wd, ht, dp
+ elseif is_opposite[curdir][pdir] then
+ return wd, dp, ht
+ else -- can this happen?
+ return ht + dp, wd, 0
+ end
end
end
-end
-local function pack_width_height_depth(curdir,pdir,p)
- local wd = getfield(p,"width")
- local ht = getfield(p,"height")
- local dp = getfield(p,"depth")
- if is_rotated[curdir] then
- if is_parallel[curdir][pdir] then
- local half = (ht + dp) / 2
- return wd, half, half
- else -- can this happen?
- local half = wd / 2
- return ht + dp, half, half
- end
- else
- if pardir_is_equal[curdir][pdir] then
- return wd, ht, dp
- elseif is_opposite[curdir][pdir] then
- return wd, dp, ht
- else -- weird dimensions, can this happen?
- return ht + dp, wd, 0
+ local function pack_width_height_depth(curdir,pdir,p)
+ local wd, ht, dp = getwhd(p)
+ if is_rotated[curdir] then
+ if is_parallel[curdir][pdir] then
+ local half = (ht + dp) / 2
+ return wd, half, half
+ else -- can this happen?
+ local half = wd / 2
+ return ht + dp, half, half
+ end
+ else
+ if pardir_is_equal[curdir][pdir] then
+ return wd, ht, dp
+ elseif is_opposite[curdir][pdir] then
+ return wd, dp, ht
+ else -- weird dimensions, can this happen?
+ return ht + dp, wd, 0
+ end
end
end
-end
-
--- local function xpack(head,width,method,direction,analysis)
---
--- -- inspect(analysis)
---
--- local expansion = method == "cal_expand_ratio"
--- local natural = analysis.size
--- local font_stretch = analysis.adjust_stretch
--- local font_shrink = analysis.adjust_shrink
--- local font_expand_ratio = 0
--- local delta = width - natural
---
--- local hlist = new_node("hlist")
---
--- setlist(hlist,head)
--- setfield(hlist,"dir",direction or tex.textdir)
--- setfield(hlist,"width",width)
--- setfield(hlist,"height",height)
--- setfield(hlist,"depth",depth)
---
--- if delta == 0 then
---
--- setfield(hlist,"glue_sign",0)
--- setfield(hlist,"glue_order",0)
--- setfield(hlist,"glue_set",0)
---
--- else
---
--- local order = analysis.filll ~= 0 and fillcodes.filll or
--- analysis.fill ~= 0 and fillcodes.fill or
--- analysis.fil ~= 0 and fillcodes.fil or
--- analysis.fi ~= 0 and fillcodes.fi or 0
---
--- if delta > 0 then
---
--- if expansion and order == 0 and font_stretch > 0 then
--- font_expand_ratio = (delta/font_stretch) * 1000
--- else
--- local stretch = analysis.stretch
--- if stretch ~= 0 then
--- setfield(hlist,"glue_sign",1) -- stretch
--- setfield(hlist,"glue_order",order)
--- setfield(hlist,"glue_set",delta/stretch)
--- else
--- setfield(hlist,"glue_sign",0) -- nothing
--- setfield(hlist,"glue_order",order)
--- setfield(hlist,"glue_set",0)
--- end
--- end
---
--- else
---
--- if expansion and order == 0 and font_shrink > 0 then
--- font_expand_ratio = (delta/font_shrink) * 1000
--- else
--- local shrink = analysis.shrink
--- if shrink ~= 0 then
--- setfield(hlist,"glue_sign",2) -- shrink
--- setfield(hlist,"glue_order",order)
--- setfield(hlist,"glue_set",-delta/stretch)
--- else
--- setfield(hlist,"glue_sign",0) -- nothing
--- setfield(hlist,"glue_order",order)
--- setfield(hlist,"glue_set",0)
--- end
--- end
---
--- end
---
--- end
---
--- if not expansion or font_expand_ratio == 0 then
--- -- nothing
--- elseif font_expand_ratio > 0 then
--- if font_expand_ratio > 1000 then
--- font_expand_ratio = 1000
--- end
--- local current = head
--- while current do
--- local id = getid(current)
--- if id == glyph_code then
--- local stretch, shrink = char_stretch_shrink(current) -- get only one
--- if stretch then
--- if trace_expansion then
--- setnodecolor(g,"hz:positive")
--- end
--- current.expansion_factor = font_expand_ratio * stretch
--- end
--- elseif id == kern_code then
--- local kern = getfield(current,"kern")
--- if kern ~= 0 and getsubtype(current) == kerning_code then
--- setfield(current,"kern",font_expand_ratio * kern)
--- end
--- end
--- current = getnext(current)
--- end
--- elseif font_expand_ratio < 0 then
--- if font_expand_ratio < -1000 then
--- font_expand_ratio = -1000
--- end
--- local current = head
--- while current do
--- local id = getid(current)
--- if id == glyph_code then
--- local stretch, shrink = char_stretch_shrink(current) -- get only one
--- if shrink then
--- if trace_expansion then
--- setnodecolor(g,"hz:negative")
--- end
--- current.expansion_factor = font_expand_ratio * shrink
--- end
--- elseif id == kern_code then
--- local kern = getfield(current,"kern")
--- if kern ~= 0 and getsubtype(current) == kerning_code then
--- setfield(current,"kern",font_expand_ratio * kern)
--- end
--- end
--- current = getnext(current)
--- end
--- end
--- return hlist, 0
--- end
-
-local function hpack(head,width,method,direction,firstline,line) -- fast version when head = nil
-
- -- we can pass the adjust_width and adjust_height so that we don't need to recalculate them but
- -- with the glue mess it's less trivial as we lack detail .. challenge
- local hlist = new_node("hlist")
-
- setfield(hlist,"dir",direction)
-
- if head == nil then
- setfield(hlist,"width",width)
- return hlist, 0
- else
- setlist(hlist,head)
- end
+ -- local function xpack(head,width,method,direction,analysis)
+ --
+ -- -- inspect(analysis)
+ --
+ -- local expansion = method == "cal_expand_ratio"
+ -- local natural = analysis.size
+ -- local font_stretch = analysis.adjust_stretch
+ -- local font_shrink = analysis.adjust_shrink
+ -- local font_expand_ratio = 0
+ -- local delta = width - natural
+ --
+ -- local hlist = new_hlist()
+ --
+ -- setlist(hlist,head)
+ -- setdir(hlist,direction or tex.textdir)
+ -- setwhd(hlist,width,height,depth)
+ --
+ -- if delta == 0 then
+ --
+ -- setfield(hlist,"glue_sign",0)
+ -- setfield(hlist,"glue_order",0)
+ -- setfield(hlist,"glue_set",0)
+ --
+ -- else
+ --
+ -- local order = analysis.filll ~= 0 and fillcodes.filll or
+ -- analysis.fill ~= 0 and fillcodes.fill or
+ -- analysis.fil ~= 0 and fillcodes.fil or
+ -- analysis.fi ~= 0 and fillcodes.fi or 0
+ --
+ -- if delta > 0 then
+ --
+ -- if expansion and order == 0 and font_stretch > 0 then
+ -- font_expand_ratio = (delta/font_stretch) * 1000
+ -- else
+ -- local stretch = analysis.stretch
+ -- if stretch ~= 0 then
+ -- setfield(hlist,"glue_sign",1) -- stretch
+ -- setfield(hlist,"glue_order",order)
+ -- setfield(hlist,"glue_set",delta/stretch)
+ -- else
+ -- setfield(hlist,"glue_sign",0) -- nothing
+ -- setfield(hlist,"glue_order",order)
+ -- setfield(hlist,"glue_set",0)
+ -- end
+ -- end
+ --
+ -- else
+ --
+ -- if expansion and order == 0 and font_shrink > 0 then
+ -- font_expand_ratio = (delta/font_shrink) * 1000
+ -- else
+ -- local shrink = analysis.shrink
+ -- if shrink ~= 0 then
+ -- setfield(hlist,"glue_sign",2) -- shrink
+ -- setfield(hlist,"glue_order",order)
+ -- setfield(hlist,"glue_set",-delta/stretch)
+ -- else
+ -- setfield(hlist,"glue_sign",0) -- nothing
+ -- setfield(hlist,"glue_order",order)
+ -- setfield(hlist,"glue_set",0)
+ -- end
+ -- end
+ --
+ -- end
+ --
+ -- end
+ --
+ -- if not expansion or font_expand_ratio == 0 then
+ -- -- nothing
+ -- elseif font_expand_ratio > 0 then
+ -- if font_expand_ratio > 1000 then
+ -- font_expand_ratio = 1000
+ -- end
+ -- local current = head
+ -- while current do
+ -- local id = getid(current)
+ -- if id == glyph_code then
+ -- local stretch, shrink = char_stretch_shrink(current) -- get only one
+ -- if stretch then
+ -- if trace_expansion then
+ -- setnodecolor(g,"hz:positive")
+ -- end
+ -- current.expansion_factor = font_expand_ratio * stretch
+ -- end
+ -- elseif id == kern_code then
+ -- local kern = getkern(current)
+ -- if kern ~= 0 and getsubtype(current) == kerning_code then
+ -- setkern(current,font_expand_ratio * kern)
+ -- end
+ -- end
+ -- current = getnext(current)
+ -- end
+ -- elseif font_expand_ratio < 0 then
+ -- if font_expand_ratio < -1000 then
+ -- font_expand_ratio = -1000
+ -- end
+ -- local current = head
+ -- while current do
+ -- local id = getid(current)
+ -- if id == glyph_code then
+ -- local stretch, shrink = char_stretch_shrink(current) -- get only one
+ -- if shrink then
+ -- if trace_expansion then
+ -- setnodecolor(g,"hz:negative")
+ -- end
+ -- current.expansion_factor = font_expand_ratio * shrink
+ -- end
+ -- elseif id == kern_code then
+ -- local kern = getkern(current)
+ -- if kern ~= 0 and getsubtype(current) == kerning_code then
+ -- setkern(current,font_expand_ratio * kern)
+ -- end
+ -- end
+ -- current = getnext(current)
+ -- end
+ -- end
+ -- return hlist, 0
+ -- end
+
+ local function hpack(head,width,method,direction,firstline,line) -- fast version when head = nil
+
+ -- we can pass the adjust_width and adjust_height so that we don't need to recalculate them but
+ -- with the glue mess it's less trivial as we lack detail .. challenge
+
+ local hlist = new_hlist()
+
+ setdir(hlist,direction)
+
+ if head == nil then
+ setwidth(hlist,width)
+ return hlist, 0
+ else
+ setlist(hlist,head)
+ end
- local cal_expand_ratio = method == "cal_expand_ratio" or method == "subst_ex_font"
+ local cal_expand_ratio = method == "cal_expand_ratio" or method == "subst_ex_font"
- direction = direction or tex.textdir
+ direction = direction or tex.textdir
- local line = 0
+ local line = 0
- local height = 0
- local depth = 0
- local natural = 0
- local font_stretch = 0
- local font_shrink = 0
- local font_expand_ratio = 0
- local last_badness = 0
- local expansion_stack = cal_expand_ratio and { } -- todo: optionally pass this
- local expansion_index = 0
- local total_stretch = { [0] = 0, 0, 0, 0, 0 }
- local total_shrink = { [0] = 0, 0, 0, 0, 0 }
+ local height = 0
+ local depth = 0
+ local natural = 0
+ local font_stretch = 0
+ local font_shrink = 0
+ local font_expand_ratio = 0
+ local last_badness = 0
+ local expansion_stack = cal_expand_ratio and { } -- todo: optionally pass this
+ local expansion_index = 0
+ local total_stretch = { [0] = 0, 0, 0, 0, 0 }
+ local total_shrink = { [0] = 0, 0, 0, 0, 0 }
- local hpack_dir = direction
+ local hpack_dir = direction
- local adjust_head = texlists.adjust_head
- local pre_adjust_head = texlists.pre_adjust_head
- local adjust_tail = adjust_head and slide_nodelist(adjust_head) -- todo: find_tail
- local pre_adjust_tail = pre_adjust_head and slide_nodelist(pre_adjust_head) -- todo: find_tail
+ local adjust_head = texlists.adjust_head
+ local pre_adjust_head = texlists.pre_adjust_head
+ local adjust_tail = adjust_head and slide_node_list(adjust_head) -- todo: find_tail
+ local pre_adjust_tail = pre_adjust_head and slide_node_list(pre_adjust_head) -- todo: find_tail
- new_dir_stack(hpack_dir)
+ new_dir_stack(hpack_dir)
- local checked_expansion = false
+ local checked_expansion = false
- if cal_expand_ratio then
- checked_expansion = { }
- setmetatableindex(checked_expansion,check_expand_lines)
- end
+ if cal_expand_ratio then
+ checked_expansion = { }
+ setmetatableindex(checked_expansion,check_expand_lines)
+ end
- -- this one also needs to check the font, so in the end indeed we might end up with two variants
+ -- this one also needs to check the font, so in the end indeed we might end up with two variants
- local fontexps, lastfont
+ local fontexps, lastfont
- local function process(current) -- called nested in disc replace
+ local function process(current) -- called nested in disc replace
- while current do
- local char, id = isglyph(current)
- if char then
- if cal_expand_ratio then
- local currentfont = getfont(current)
- if currentfont ~= lastfont then
- fontexps = checked_expansion[currentfont] -- a bit redundant for the par line packer
- lastfont = currentfont
+ while current do
+ local char, id = isglyph(current)
+ if char then
+ if cal_expand_ratio then
+ local currentfont = getfont(current)
+ 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[char]
+ if expansion then
+ font_stretch = font_stretch + expansion.glyphstretch
+ font_shrink = font_shrink + expansion.glyphshrink
+ expansion_index = expansion_index + 1
+ expansion_stack[expansion_index] = current
+ end
+ end
+ end
+ -- use inline
+ local wd, ht, dp = glyph_width_height_depth(hpack_dir,"TLT",current) -- was TRT ?
+ natural = natural + wd
+ if ht > height then
+ height = ht
end
- if fontexps then
- local expansion = fontexps[char]
- if expansion then
- font_stretch = font_stretch + expansion.glyphstretch
- font_shrink = font_shrink + expansion.glyphshrink
+ if dp > depth then
+ depth = dp
+ end
+ elseif id == kern_code then
+ local kern = getkern(current)
+ if kern == 0 then
+ -- no kern
+ elseif getsubtype(current) == kerning_code then -- check getkern(p)
+ if cal_expand_ratio then
+ local stretch, shrink = kern_stretch_shrink(current,kern)
+ font_stretch = font_stretch + stretch
+ font_shrink = font_shrink + shrink
expansion_index = expansion_index + 1
expansion_stack[expansion_index] = current
end
+ natural = natural + kern
+ else
+ natural = natural + kern
end
- end
- -- use inline
- local wd, ht, dp = glyph_width_height_depth(hpack_dir,"TLT",current) -- was TRT ?
- natural = natural + wd
- if ht > height then
- height = ht
- end
- if dp > depth then
- depth = dp
- end
- elseif id == kern_code then
- local kern = getfield(current,"kern")
- if kern == 0 then
- -- no kern
- elseif getsubtype(current) == kerning_code then -- check getfield(p,"kern")
- if cal_expand_ratio then
- local stretch, shrink = kern_stretch_shrink(current,kern)
- font_stretch = font_stretch + stretch
- font_shrink = font_shrink + shrink
- expansion_index = expansion_index + 1
- expansion_stack[expansion_index] = current
+ elseif id == disc_code then
+ local subtype = getsubtype(current)
+ if subtype ~= second_disc_code then
+ -- todo : local stretch, shrink = char_stretch_shrink(s)
+ local replace = getfield(current,"replace")
+ if replace then
+ process(replace)
+ end
end
- natural = natural + kern
- else
- natural = natural + kern
- end
- elseif id == disc_code then
- local subtype = getsubtype(current)
- if subtype ~= second_disc_code then
- -- todo : local stretch, shrink = char_stretch_shrink(s)
- local replace = getfield(current,"replace")
- if replace then
- process(replace)
+ elseif id == glue_code then
+ local wd, stretch, shrink, stretch_order, shrink_order = getglue(current)
+ natural = natural + wd
+ total_stretch[stretch_order] = total_stretch[stretch_order] + stretch
+ total_shrink [shrink_order] = total_shrink[shrink_order] + shrink
+ if getsubtype(current) >= leaders_code then
+ local leader = getleader(current)
+ local wd, ht, dp = getwhd(leader) -- can become getwhd(current) after 1.003
+ if ht > height then
+ height = ht
+ end
+ if dp > depth then
+ depth = dp
+ end
end
- end
- elseif id == glue_code then
- 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")
- local dp = getfield(leader,"depth")
+ elseif id == hlist_code or id == vlist_code then
+ local sh = getshift(current)
+ local wd, ht, dp = pack_width_height_depth(hpack_dir,getdir(current) or hpack_dir,current) -- added: or pack_dir
+ local hs, ds = ht - sh, dp + sh
+ natural = natural + wd
+ if hs > height then
+ height = hs
+ end
+ if ds > depth then
+ depth = ds
+ end
+ elseif id == rule_code then
+ local wd, ht, dp = getwhd(current)
+ natural = natural + wd
if ht > height then
height = ht
end
if dp > depth then
depth = dp
end
+ elseif id == math_code then
+ natural = natural + getkern(current) -- surround
+ -- new in luatex
+ + getwidth(current)
+ elseif id == unset_code then
+ local wd, ht, dp = getwhd(current)
+ local sh = getshift(current)
+ local hs = ht - sh
+ local ds = dp + sh
+ natural = natural + wd
+ if hs > height then
+ height = hs
+ end
+ if ds > depth then
+ depth = ds
+ end
+ elseif id == ins_code or id == mark_code then
+ local prev, next = getboth(current)
+ if adjust_tail then -- todo
+ setlink(prev,next)
+ setlink(adjust_tail,current)
+ setnext(current)
+ adjust_tail = current
+ else
+ adjust_head = current
+ adjust_tail = current
+ setboth(current)
+ end
+ elseif id == adjust_code then
+ local list = getlist(current)
+ if adjust_tail then
+ setnext(adjust_tail,list)
+ else
+ adjust_head = list
+ end
+ adjust_tail = slide_node_list(list) -- find_tail(list)
+ elseif id == dir_code then
+ hpack_dir = checked_line_dir(stack,current) or hpack_dir
+ elseif id == marginkern_code then
+ local width = getwidth(current)
+ if cal_expand_ratio then
+ -- is this ok?
+ local glyph = getfield(current,"glyph")
+ local char_pw = getsubtype(current) == leftmargin_code and left_pw or right_pw
+ font_stretch = font_stretch - width - char_pw(glyph)
+ font_shrink = font_shrink - width - char_pw(glyph)
+ expansion_index = expansion_index + 1
+ expansion_stack[expansion_index] = glyph
+ end
+ natural = natural + width
end
- elseif id == hlist_code or id == vlist_code then
- local sh = getfield(current,"shift")
- local wd, ht, dp = pack_width_height_depth(hpack_dir,getfield(current,"dir") or hpack_dir,current) -- added: or pack_dir
- local hs, ds = ht - sh, dp + sh
- natural = natural + wd
- if hs > height then
- height = hs
- end
- if ds > depth then
- depth = ds
- end
- elseif id == rule_code then
- local wd = getfield(current,"width")
- local ht = getfield(current,"height")
- local dp = getfield(current,"depth")
- natural = natural + wd
- if ht > height then
- height = ht
- end
- if dp > depth then
- depth = dp
- end
- elseif id == math_code then
- natural = natural + getfield(current,"surround")
- elseif id == unset_code then
- local wd = getfield(current,"width")
- local ht = getfield(current,"height")
- local dp = getfield(current,"depth")
- local sh = getfield(current,"shift")
- local hs = ht - sh
- local ds = dp + sh
- natural = natural + wd
- if hs > height then
- height = hs
- end
- if ds > depth then
- depth = ds
- end
- elseif id == ins_code or id == mark_code then
- local prev, next = getboth(current)
- if adjust_tail then -- todo
- setlink(prev,next)
- setlink(adjust_tail,current)
- setnext(current)
- adjust_tail = current
- else
- adjust_head = current
- adjust_tail = current
- setboth(current)
- end
- elseif id == adjust_code then
- local list = getlist(current)
- if adjust_tail then
- setnext(adjust_tail,list)
- else
- adjust_head = list
- end
- adjust_tail = slide_nodelist(list) -- find_tail(list)
- 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
- -- is this ok?
- local glyph = getfield(current,"glyph")
- local char_pw = getsubtype(current) == leftmargin_code and left_pw or right_pw
- font_stretch = font_stretch - width - char_pw(glyph)
- font_shrink = font_shrink - width - char_pw(glyph)
- expansion_index = expansion_index + 1
- expansion_stack[expansion_index] = glyph
- end
- natural = natural + width
+ current = getnext(current)
end
- current = getnext(current)
- end
-
- end
- process(head)
-
- if adjust_tail then
- adjust_tail.next = nil -- todo
- end
- if pre_adjust_tail then
- pre_adjust_tail.next = nil -- todo
- end
- if method == "additional" then
- width = width + natural
- end
+ end
- setfield(hlist,"width",width)
- setfield(hlist,"height",height)
- setfield(hlist,"depth",depth)
+ process(head)
- local delta = width - natural
- if delta == 0 then
- setfield(hlist,"glue_sign",0)
- setfield(hlist,"glue_order",0)
- setfield(hlist,"glue_set",0)
- elseif delta > 0 then
- -- natural width smaller than requested width
- local order = (total_stretch[4] ~= 0 and 4 or total_stretch[3] ~= 0 and 3) or
- (total_stretch[2] ~= 0 and 2 or total_stretch[1] ~= 0 and 1) or 0
- if cal_expand_ratio and order == 0 and font_stretch > 0 then -- check sign of font_stretch
- font_expand_ratio = delta/font_stretch
+ if adjust_tail then
+ adjust_tail.next = nil -- todo
+ end
+ if pre_adjust_tail then
+ pre_adjust_tail.next = nil -- todo
+ end
+ if method == "additional" then
+ width = width + natural
+ end
- if font_expand_ratio > 1 then
- font_expand_ratio = 1
- end
+ setwhd(hlist,width,height,depth)
- local fontexps, lastfont
- for i=1,expansion_index do
- 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[char]
- if trace_expansion then
- setnodecolor(g,"hz:positive")
- end
- e = font_expand_ratio * data.glyphstretch / 1000
- else
- local kern = getfield(g,"kern")
- local stretch, shrink = kern_stretch_shrink(g,kern)
- e = font_expand_ratio * stretch / 1000
- end
- setfield(g,"expansion_factor",e)
- end
- end
- local tso = total_stretch[order]
- if tso ~= 0 then
- setfield(hlist,"glue_sign",1)
- setfield(hlist,"glue_order",order)
- setfield(hlist,"glue_set",delta/tso)
- else
+ local delta = width - natural
+ if delta == 0 then
setfield(hlist,"glue_sign",0)
- setfield(hlist,"glue_order",order)
+ setfield(hlist,"glue_order",0)
setfield(hlist,"glue_set",0)
- end
- if font_expand_ratio ~= 0 then
- -- todo
- elseif order == 0 then -- and getlist(hlist) then
- last_badness = calculate_badness(delta,total_stretch[0])
- if last_badness > tex.hbadness then
- if last_badness > 100 then
- diagnostics.underfull_hbox(hlist,line,last_badness)
- else
- diagnostics.loose_hbox(hlist,line,last_badness)
+ elseif delta > 0 then
+ -- natural width smaller than requested width
+ local order = (total_stretch[4] ~= 0 and 4 or total_stretch[3] ~= 0 and 3) or
+ (total_stretch[2] ~= 0 and 2 or total_stretch[1] ~= 0 and 1) or 0
+ if cal_expand_ratio and order == 0 and font_stretch > 0 then -- check sign of font_stretch
+ font_expand_ratio = delta/font_stretch
+
+ if font_expand_ratio > 1 then
+ font_expand_ratio = 1
+ end
+
+ local fontexps, lastfont
+ for i=1,expansion_index do
+ 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[char]
+ if trace_expansion then
+ setnodecolor(g,"hz:positive")
+ end
+ e = font_expand_ratio * data.glyphstretch / 1000
+ else
+ local kern = getkern(g)
+ local stretch, shrink = kern_stretch_shrink(g,kern)
+ e = font_expand_ratio * stretch / 1000
+ end
+ setfield(g,"expansion_factor",e)
end
end
- end
- else
- -- natural width larger than requested width
- local order = total_shrink[4] ~= 0 and 4 or total_shrink[3] ~= 0 and 3
- or total_shrink[2] ~= 0 and 2 or total_shrink[1] ~= 0 and 1 or 0
- if cal_expand_ratio and order == 0 and font_shrink > 0 then -- check sign of font_shrink
- font_expand_ratio = delta/font_shrink
-
- if font_expand_ratio < 1 then
- font_expand_ratio = -1
+ local tso = total_stretch[order]
+ if tso ~= 0 then
+ setfield(hlist,"glue_sign",1)
+ setfield(hlist,"glue_order",order)
+ setfield(hlist,"glue_set",delta/tso)
+ else
+ setfield(hlist,"glue_sign",0)
+ setfield(hlist,"glue_order",order)
+ setfield(hlist,"glue_set",0)
end
-
- local fontexps, lastfont
- for i=1,expansion_index do
- 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[char]
- if trace_expansion then
- setnodecolor(g,"hz:negative")
+ if font_expand_ratio ~= 0 then
+ -- todo
+ elseif order == 0 then -- and getlist(hlist) then
+ last_badness = calculate_badness(delta,total_stretch[0])
+ if last_badness > tex.hbadness then
+ if last_badness > 100 then
+ diagnostics.underfull_hbox(hlist,line,last_badness)
+ else
+ diagnostics.loose_hbox(hlist,line,last_badness)
end
- e = font_expand_ratio * data.glyphshrink / 1000
- else
- local kern = getfield(g,"kern")
- local stretch, shrink = kern_stretch_shrink(g,kern)
- e = font_expand_ratio * shrink / 1000
end
- setfield(g,"expansion_factor",e)
end
- end
- local tso = total_shrink[order]
- if tso ~= 0 then
- setfield(hlist,"glue_sign",2)
- setfield(hlist,"glue_order",order)
- setfield(hlist,"glue_set",-delta/tso)
else
- setfield(hlist,"glue_sign",0)
- setfield(hlist,"glue_order",order)
- setfield(hlist,"glue_set",0)
- end
- if font_expand_ratio ~= 0 then
- -- todo
- elseif tso < -delta and order == 0 then -- and getlist(hlist) then
- last_badness = 1000000
- setfield(hlist,"glue_set",1)
- local fuzz = - delta - total_shrink[0]
- local hfuzz = tex.hfuzz
- if fuzz > hfuzz or tex.hbadness < 100 then
- local overfullrule = tex.overfullrule
- if fuzz > hfuzz and overfullrule > 0 then
- -- weird, is always called and no rules shows up
- setfield(slide_nodelist(list),"next",new_rule(overfullrule,nil,nil,hlist.dir)) -- todo: find_tail
+ -- natural width larger than requested width
+ local order = total_shrink[4] ~= 0 and 4 or total_shrink[3] ~= 0 and 3
+ or total_shrink[2] ~= 0 and 2 or total_shrink[1] ~= 0 and 1 or 0
+ if cal_expand_ratio and order == 0 and font_shrink > 0 then -- check sign of font_shrink
+ font_expand_ratio = delta/font_shrink
+
+ if font_expand_ratio < 1 then
+ font_expand_ratio = -1
+ end
+
+ local fontexps, lastfont
+ for i=1,expansion_index do
+ 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[char]
+ if trace_expansion then
+ setnodecolor(g,"hz:negative")
+ end
+ e = font_expand_ratio * data.glyphshrink / 1000
+ else
+ local kern = getkern(g)
+ local stretch, shrink = kern_stretch_shrink(g,kern)
+ e = font_expand_ratio * shrink / 1000
+ end
+ setfield(g,"expansion_factor",e)
end
- diagnostics.overfull_hbox(hlist,line,-delta)
end
- elseif order == 0 and getlist(hlist) and last_badness > tex.hbadness then
- diagnostics.bad_hbox(hlist,line,last_badness)
+ local tso = total_shrink[order]
+ if tso ~= 0 then
+ setfield(hlist,"glue_sign",2)
+ setfield(hlist,"glue_order",order)
+ setfield(hlist,"glue_set",-delta/tso)
+ else
+ setfield(hlist,"glue_sign",0)
+ setfield(hlist,"glue_order",order)
+ setfield(hlist,"glue_set",0)
+ end
+ if font_expand_ratio ~= 0 then
+ -- todo
+ elseif tso < -delta and order == 0 then -- and getlist(hlist) then
+ last_badness = 1000000
+ setfield(hlist,"glue_set",1)
+ local fuzz = - delta - total_shrink[0]
+ local hfuzz = tex.hfuzz
+ if fuzz > hfuzz or tex.hbadness < 100 then
+ local overfullrule = tex.overfullrule
+ if fuzz > hfuzz and overfullrule > 0 then
+ -- weird, is always called and no rules shows up
+ setnext(slide_node_list(list),new_rule(overfullrule,nil,nil,getdir(hlist))) -- todo: find_tail
+ end
+ diagnostics.overfull_hbox(hlist,line,-delta)
+ end
+ elseif order == 0 and getlist(hlist) and last_badness > tex.hbadness then
+ diagnostics.bad_hbox(hlist,line,last_badness)
+ end
end
+ return hlist, last_badness
end
- return hlist, last_badness
-end
-
-xpack_nodes = hpack -- comment this for old fashioned expansion (we need to fix float mess)
-
-constructors.methods.hpack = hpack
-
-local function common_message(hlist,line,str)
- write_nl("")
- if status.output_active then -- unset
- write(str," has occurred while \\output is active")
- end
- local fileline = status.linenumber
- if line > 0 then
- write(str," in paragraph at lines ",fileline,"--",fileline+line-1)
- elseif line < 0 then
- write(str," in alignment at lines ",fileline,"--",fileline-line-1)
- else
- write(str," detected at line ",fileline)
- end
- write_nl("")
- diagnostics.short_display(hlist.list,false)
- write_nl("")
- -- diagnostics.start()
- -- show_box(hlist.list)
- -- diagnostics.stop()
-end
-function diagnostics.overfull_hbox(hlist,line,d)
- common_message(hlist,line,format("Overfull \\hbox (%spt too wide)",number.toscaled(d)))
-end
-
-function diagnostics.bad_hbox(hlist,line,b)
- common_message(hlist,line,format("Tight \\hbox (badness %i)",b))
-end
+ xpack_nodes = hpack -- comment this for old fashioned expansion (we need to fix float mess)
-function diagnostics.underfull_hbox(hlist,line,b)
- common_message(hlist,line,format("Underfull \\hbox (badness %i)",b))
-end
+ constructors.methods.hpack = hpack
-function diagnostics.loose_hbox(hlist,line,b)
- common_message(hlist,line,format("Loose \\hbox (badness %i)",b))
end
diff --git a/tex/context/base/mkiv/node-met.lua b/tex/context/base/mkiv/node-met.lua
index 432ecd1ec..9ebc8e411 100644
--- a/tex/context/base/mkiv/node-met.lua
+++ b/tex/context/base/mkiv/node-met.lua
@@ -60,66 +60,86 @@ end
-- We start with some helpers and provide all relevant basic functions in the
-- node namespace as well.
-nodes = nodes or { }
-local nodes = nodes
-
------ gonuts = type(node.direct) == "table"
------.gonuts = gonuts
-
-local nodecodes = nodes.nodecodes
-local hlist_code = nodecodes.hlist
-local vlist_code = nodecodes.vlist
-
-nodes.tostring = node.tostring or tostring
-nodes.copy = node.copy
-nodes.copy_list = node.copy_list
-nodes.delete = node.delete
-nodes.dimensions = node.dimensions
-nodes.end_of_math = node.end_of_math
-nodes.flush_list = node.flush_list
-nodes.flush_node = node.flush_node
-nodes.free = node.free
-nodes.insert_after = node.insert_after
-nodes.insert_before = node.insert_before
-nodes.hpack = node.hpack
-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.setglue = node.setglue
-
-nodes.first_glyph = node.first_glyph
-nodes.has_glyph = node.has_glyph or node.first_glyph
-
-nodes.current_attr = node.current_attr
-nodes.do_ligature_n = node.do_ligature_n
-nodes.has_field = node.has_field
-nodes.last_node = node.last_node
-nodes.usedlist = node.usedlist
-nodes.protrusion_skippable = node.protrusion_skippable
-nodes.write = node.write
+nodes = nodes or { }
+local nodes = nodes
+
+local nodecodes = nodes.nodecodes
+
+nodes.tostring = node.tostring or tostring
+nodes.copy = node.copy
+nodes.copy_node = node.copy
+nodes.copy_list = node.copy_list
+nodes.delete = node.delete
+nodes.dimensions = node.dimensions
+nodes.rangedimensions = node.rangedimensions
+nodes.end_of_math = node.end_of_math
+nodes.flush = node.flush_node
+nodes.flush_node = node.flush_node
+nodes.flush_list = node.flush_list
+nodes.free = node.free
+nodes.insert_after = node.insert_after
+nodes.insert_before = node.insert_before
+nodes.hpack = node.hpack
+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.setglue = node.setglue
+
+nodes.first_glyph = node.first_glyph
+nodes.has_glyph = node.has_glyph or node.first_glyph
+
+nodes.current_attr = node.current_attr
+nodes.has_field = node.has_field
+nodes.last_node = node.last_node
+nodes.usedlist = node.usedlist
+nodes.protrusion_skippable = node.protrusion_skippable
+nodes.check_discretionaries = node.check_discretionaries
+nodes.write = node.write
+
+nodes.count = node.count
+nodes.length = node.length
+
+nodes.has_attribute = node.has_attribute
+nodes.set_attribute = node.set_attribute
+nodes.find_attribute = node.find_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 node.getwhd then
+ local getfield = node.getfield
+ function node.getwhd(n)
+ return getfield(n,"width"), getfield(n,"height"), getfield(n,"depth")
+ end
+end
-nodes.has_attribute = node.has_attribute
-nodes.set_attribute = node.set_attribute
-nodes.unset_attribute = node.unset_attribute
+if not node.setwhd then
+ local setfield = node.setfield
+ function node.setwhd(n,w,h,d)
+ setfield(n,"width",w or 0)
+ setfield(n,"height",h or 0)
+ setfield(n,"depth",d or 0)
+ end
+end
-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
+nodes.getwhd = node.getwhd
+nodes.setwhd = node.setwhd
nodes.effective_glue = node.effective_glue
-
-nodes.is_zero_glue = node.is_zero_glue
-nodes.getglue = node.getglue
nodes.getglue = node.getglue
+nodes.setglue = node.setglue
+nodes.is_zero_glue = node.is_zero_glue
-- if not gonuts or not node.getfield then
-- node.getfield = metatable.__index
@@ -149,68 +169,85 @@ local n_getattr = node.getattr
local n_getdisc = node.getdisc
local n_getleader = node.getleader
-local n_setnext = node.setnext or
- function(c,next)
+local n_setnext = node.setnext or -- always
+ function(c,n)
setfield(c,"next",n)
end
-local n_setprev = node.setprev or
- function(c,prev)
+local n_setprev = node.setprev or -- always
+ function(c,p)
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
+local n_setlist = node.setlist or -- always
+ function(c,l)
+ setfield(c,"list",l)
end
-local n_setboth = node.setboth or
+local n_setlink = node.setlink or -- always
+-- function(c1,c2)
+-- if c1 then setfield(c1,"next",c2) end
+-- if c2 then setfield(c2,"prev",c1) end
+-- end
+ function(...)
+ -- not that fast but not used often anyway
+ local h = nil
+ for i=1,select("#",...) do
+ local n = (select(i,...))
+ if not n then
+ -- go on
+ elseif h then
+ setfield(h,"next",n)
+ setfield(n,"prev",h)
+ else
+ h = n
+ end
+ end
+ return h
+ end
+local n_setboth = node.setboth or -- always
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
-nodes.getskip = node.getskip or tex.get
-
-local n_new_node = nodes.new
-local n_free_node = nodes.free
-local n_copy_node = nodes.copy
-local n_copy_list = nodes.copy_list
-local n_find_tail = nodes.tail
-local n_insert_after = nodes.insert_after
-local n_insert_before = nodes.insert_before
-local n_slide = nodes.slide
-
-local n_remove_node = node.remove -- not yet nodes.remove
+nodes.setnext = n_setnext
+nodes.setprev = n_setprev
+nodes.setlink = n_setlink
+nodes.setboth = n_setboth
+nodes.setlist = n_setlist
+
+nodes.getfield = n_getfield
+nodes.setfield = n_setfield
+nodes.getattr = n_getattr
+nodes.setattr = n_setattr
+nodes.takeattr = nodes.unset_attribute
+
+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
+
+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
+
+local n_flush_node = nodes.flush
+local n_copy_node = nodes.copy
+local n_copy_list = nodes.copy_list
+local n_find_tail = nodes.tail
+local n_insert_after = nodes.insert_after
+local n_insert_before = nodes.insert_before
+local n_slide = nodes.slide
+
+local n_remove_node = node.remove -- not yet nodes.remove
local function remove(head,current,free_too)
local t = current
@@ -218,7 +255,7 @@ local function remove(head,current,free_too)
if not t then
-- forget about it
elseif free_too then
- n_free_node(t)
+ n_flush_node(t)
t = nil
else
n_setboth(t)
@@ -255,34 +292,15 @@ function nodes.replace(head,current,new) -- no head returned if false
if head == current then
head = new
end
- n_free_node(current)
+ n_flush_node(current)
return head, new
else
- n_free_node(current)
+ n_flush_node(current)
return new
end
end
-local function count(stack,flat)
- local n = 0
- while stack do
- local id = n_getid(stack)
- if not flat and id == hlist_code or id == vlist_code then
- local list = n_getlist(stack)
- if list then
- n = n + 1 + count(list) -- self counts too
- else
- n = n + 1
- end
- else
- n = n + 1
- end
- stack = n_getnext(stack)
- end
- return n
-end
-
-nodes.count = count
+-- nodes.countall : see node-nut.lua
function nodes.append(head,current,...)
for i=1,select("#",...) do
@@ -455,7 +473,7 @@ metatable.__sub = function(first,second)
local tail = n_find_tail(first)
for i=1,second do
local prev = n_getprev(tail)
- n_free_node(tail) -- can become flushlist/flushnode
+ n_flush_node(tail) -- can become flushlist/flushnode
if prev then
tail = prev
else
@@ -490,7 +508,7 @@ metatable.__add = function(first,second)
local head = second
for i=1,first do
local second = n_getnext(head)
- n_free_node(head) -- can become flushlist/flushnode
+ n_flush_node(head) -- can become flushlist/flushnode
if second then
head = second
else
@@ -614,7 +632,7 @@ local messyhack = table.tohash { -- temporary solution
}
table.setmetatableindex(keys,function(t,k)
- local v = getfields(k)
+ local v = (k == "attributelist" or k == nodecodes.attributelist) and { } or getfields(k)
if messyhack[k] then
for i=1,#v do
if v[i] == "subtype" then
@@ -651,3 +669,39 @@ end
nodes.keys = keys -- [id][subtype]
nodes.fields = nodefields -- (n)
+
+-- temporary hack
+
+if LUATEXVERSION <= 1.002 then
+
+ local get = tex.get
+ local flush = node.free
+
+ function tex.get(name,split)
+ local s = get(name)
+ if split == true then
+ if s then
+ local width = s.width
+ local stretch = s.stretch
+ local shrink = s.shrink
+ local stretch_order = s.stretch_order
+ local shrink_order = s.shrink_order
+ flush(s)
+ return width, stretch, shrink, stretch_order, shrink_order
+ else
+ return 0, 0, 0, 0, 0
+ end
+ elseif split == false then
+ if s then
+ local width = s.width
+ flush(s)
+ return width
+ else
+ return 0
+ end
+ else
+ return s
+ end
+ end
+
+end
diff --git a/tex/context/base/mkiv/node-mig.lua b/tex/context/base/mkiv/node-mig.lua
index 24bebb0cc..b3820a7d8 100644
--- a/tex/context/base/mkiv/node-mig.lua
+++ b/tex/context/base/mkiv/node-mig.lua
@@ -16,7 +16,7 @@ local report_nodes = logs.reporter("nodes","migrations")
local attributes = attributes
local nodes = nodes
-local tasks = nodes.tasks
+local enableaction = nodes.tasks.enableaction
local nuts = nodes.nuts
local tonut = nuts.tonut
@@ -26,7 +26,6 @@ local getid = nuts.getid
local getlist = nuts.getlist
local getattr = nuts.getattr
-local setfield = nuts.setfield
local setattr = nuts.setattr
local setlink = nuts.setlink
local setlist = nuts.setlist
@@ -139,21 +138,21 @@ end
experiments.register("marks.migrate", function(v)
if v then
- tasks.enableaction("mvlbuilders", "nodes.handlers.migrate")
+ enableaction("mvlbuilders", "nodes.handlers.migrate")
end
migrate_marks = v
end)
experiments.register("inserts.migrate", function(v)
if v then
- tasks.enableaction("mvlbuilders", "nodes.handlers.migrate")
+ enableaction("mvlbuilders", "nodes.handlers.migrate")
end
migrate_inserts = v
end)
experiments.register("inserts.migrate.nested", function(v)
if v then
- tasks.enableaction("mvlbuilders", "nodes.handlers.migrate")
+ enableaction("mvlbuilders", "nodes.handlers.migrate")
end
inserts_too = v
end)
diff --git a/tex/context/base/mkiv/node-nut.lua b/tex/context/base/mkiv/node-nut.lua
index 1465a6680..7e5c3438b 100644
--- a/tex/context/base/mkiv/node-nut.lua
+++ b/tex/context/base/mkiv/node-nut.lua
@@ -93,8 +93,6 @@ local direct = node.direct
local fastcopy = table.fastcopy
-local texget = tex.get
-
local nodecodes = nodes.nodecodes
local hlist_code = nodecodes.hlist
local vlist_code = nodecodes.vlist
@@ -119,16 +117,113 @@ nodes.tonut = tonut
-- getters
-nuts.getfield = direct.getfield
-nuts.getnext = direct.getnext
-nuts.getprev = direct.getprev
-nuts.getid = direct.getid
-nuts.getattr = direct.get_attribute or direct.has_attribute or direct.getfield
-nuts.getchar = direct.getchar
-nuts.getfont = direct.getfont
-nuts.getsubtype = direct.getsubtype
-nuts.getlist = direct.getlist -- only hlist and vlist !
-nuts.getleader = direct.getleader
+if not direct.getwhd then
+ local getfield = direct.getfield
+ function direct.getwhd(n)
+ return getfield(n,"width"), getfield(n,"height"), getfield(n,"depth")
+ end
+end
+
+if not direct.setwhd then
+ local setfield = direct.setfield
+ function direct.setwhd(n,w,h,d)
+ setfield(n,"width",w or 0)
+ setfield(n,"height",h or 0)
+ setfield(n,"depth",d or 0)
+ end
+end
+
+if not direct.getcomponents then
+
+ local getfield = direct.getfield
+ local setfield = direct.setfield
+ local setsubtype = direct.setsubtype
+
+ local attributelist_code = nodecodes.attributelist
+
+ function direct.getcomponents(n) return getfield(n,"components") end
+ function direct.setcomponents(n,c) setfield(n,"components",c) end
+ function direct.getkern(n) return getfield(n,"kern") end
+ function direct.getwidth(n) return getfield(n,"width") end
+ function direct.setwidth(n,w) return setfield(n,"width",w) end
+ function direct.getheight(n) return getfield(n,"height") end
+ function direct.setheight(n,h) return setfield(n,"height",h) end
+ function direct.getdepth(n) return getfield(n,"depth") end
+ function direct.setdepth(n,d) return setfield(n,"depth",d) end
+ function direct.getshift(n) return getfield(n,"shift") end
+ function direct.setshift(n,s) return setfield(n,"shift",s) end
+ function direct.getpenalty(n) return getfield(n,"penalty") end
+ function direct.setpenalty(n,p) setfield(n,"penalty",p) end
+ function direct.getdir(n) return getfield(n,"dir") end
+ function direct.setdir(n,p) setfield(n,"dir",p) end
+ function direct.getlanguage(n) return getfield(n,"lang") end
+ function direct.setlanguage(n,l) return setfield(n,"lang",l) end
+ function direct.getattributelist(n) getfield(n,"attr") end
+
+ function direct.getnucleus(n) return getfield(n,"nucleus") end
+ function direct.setnucleus(n,p) return setfield(n,"nucleus",p) end
+ function direct.getsup(n) return getfield(n,"sup") end
+ function direct.setsup(n,p) return setfield(n,"sup",p) end
+ function direct.getsub(n) return getfield(n,"sub") end
+ function direct.setsub(n,p) return setfield(n,"sub",p) end
+
+ function direct.setattributelist(n,a)
+ if a and type(a) ~= attributelist_code then
+ a = getfield(a,"attr")
+ end
+ setfield(n,"attr",a)
+ end
+
+ function direct.setkern(n,k,s)
+ setfield(n,"kern",k)
+ if s then
+ setsubtype(n,s)
+ end
+ end
+
+ function direct.setfont(n,f,c)
+ setfield(n,"font",f)
+ if c then
+ setfield(n,"char",f)
+ end
+ end
+
+ function direct.getoffsets(n)
+ return getfield(n,"xoffset"), getfield(n,"yoffset")
+ end
+
+ function direct.setoffsets(n,x,y)
+ if x then
+ setfield(n,"xoffset",x)
+ end
+ if y then
+ setfield(n,"yoffset",y)
+ end
+ end
+
+end
+
+if LUATEXVERSION < 1.005 then
+ local getfield = direct.getfield
+ function direct.getnucleus(n) return getfield(n,"nucleus") end
+ function direct.getsub (n) return getfield(n,"sub") end
+ function direct.getsup (n) return getfield(n,"sup") end
+end
+
+-- if LUATEXVERSION < 1.004 then
+-- local gc = direct.getcomponents
+-- getcomponents = function(n) local c = gc(n) return c ~= 0 and c or nil end
+-- end
+
+-- local hash = table.setmetatableindex("number")
+-- local ga = direct.get_attribute
+-- function direct.get_attribute(n,a)
+-- hash[a] = hash[a] + 1
+-- return ga(n,a)
+-- end
+-- function nuts.reportattr()
+-- inspect(hash)
+-- end
-- local function track(name)
-- local n = 0
@@ -146,59 +241,58 @@ nuts.getleader = direct.getleader
-- setters
-nuts.setfield = direct.setfield
-nuts.setattr = direct.set_attribute or setfield
-
-nuts.getbox = direct.getbox
-nuts.setbox = direct.setbox
-nuts.getskip = direct.getskip or function(s) return tonut(texget(s)) end
-
-- helpers
-nuts.tostring = direct.tostring
-nuts.copy = direct.copy
-nuts.copy_list = direct.copy_list
-nuts.delete = direct.delete
-nuts.dimensions = direct.dimensions
-nuts.end_of_math = direct.end_of_math
-nuts.flush_list = direct.flush_list
-nuts.flush_node = direct.flush_node
-nuts.free = direct.free
-nuts.insert_after = direct.insert_after
-nuts.insert_before = direct.insert_before
-nuts.hpack = direct.hpack
-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
-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.has_glyph = direct.has_glyph or direct.first_glyph
-
-nuts.current_attr = direct.current_attr
-nuts.do_ligature_n = direct.do_ligature_n
-nuts.has_field = direct.has_field
-nuts.last_node = direct.last_node
-nuts.usedlist = direct.usedlist
-nuts.protrusion_skippable = direct.protrusion_skippable
-nuts.write = direct.write
-
-nuts.has_attribute = direct.has_attribute
-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
+nuts.tostring = direct.tostring
+nuts.copy = direct.copy
+nuts.copy_node = direct.copy
+nuts.copy_list = direct.copy_list
+nuts.delete = direct.delete
+nuts.dimensions = direct.dimensions
+nuts.rangedimensions = direct.rangedimensions
+nuts.end_of_math = direct.end_of_math
+nuts.flush = direct.flush_node
+nuts.flush_node = direct.flush_node
+nuts.flush_list = direct.flush_list
+nuts.free = direct.free
+nuts.insert_after = direct.insert_after
+nuts.insert_before = direct.insert_before
+nuts.hpack = direct.hpack
+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
+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.has_glyph = direct.has_glyph or direct.first_glyph
+nuts.count = direct.count
+nuts.length = direct.length
+nuts.find_attribute = direct.find_attribute
+nuts.unset_attribute = direct.unset_attribute
+
+nuts.current_attr = direct.current_attr
+nuts.has_field = direct.has_field
+nuts.last_node = direct.last_node
+nuts.usedlist = direct.usedlist
+nuts.protrusion_skippable = direct.protrusion_skippable
+nuts.check_discretionaries = direct.check_discretionaries
+nuts.write = direct.write
+
+nuts.has_attribute = direct.has_attribute
+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
if not direct.mlist_to_hlist then -- needed
@@ -210,84 +304,115 @@ if not direct.mlist_to_hlist then -- needed
end
-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
-
-nuts.is_zero_glue = is_zero_glue
-nuts.setglue = setglue
-nuts.getglue = getglue
-
-
--- 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
-local d_getfield = direct.getfield
-local d_setfield = direct.setfield
-local d_getnext = direct.getnext
-local d_getprev = direct.getprev
-local d_getid = direct.getid
-local d_getlist = direct.getlist
-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
------ d_copy_node = direct.copy
-local d_traverse = direct.traverse
-local d_setlink = direct.setlink
-local d_setboth = direct.setboth
+nuts.getfield = direct.getfield
+nuts.setfield = direct.setfield
+
+nuts.getnext = direct.getnext
+nuts.setnext = direct.setnext
+
+nuts.getid = direct.getid
+
+nuts.getprev = direct.getprev
+nuts.setprev = direct.setprev
+
+nuts.getattr = direct.get_attribute
+nuts.setattr = direct.set_attribute
+nuts.takeattr = direct.unset_attribute -- ?
+
+nuts.is_zero_glue = direct.is_zero_glue
+nuts.effective_glue = direct.effective_glue
+
+nuts.getglue = direct.getglue
+nuts.setglue = direct.setglue
+
+nuts.getdisc = direct.getdisc
+nuts.setdisc = direct.setdisc
+nuts.getdiscretionary = direct.getdisc
+nuts.setdiscretionary = direct.setdisc
+
+nuts.getwhd = direct.getwhd
+nuts.setwhd = direct.setwhd
+nuts.getwidth = direct.getwidth
+nuts.setwidth = direct.setwidth
+nuts.getheight = direct.getheight
+nuts.setheight = direct.setheight
+nuts.getdepth = direct.getdepth
+nuts.setdepth = direct.setdepth
+nuts.getshift = direct.getshift
+nuts.setshift = direct.setshift
+
+nuts.getnucleus = direct.getnucleus
+nuts.setnucleus = direct.setnucleus
+nuts.getsup = direct.getsup
+nuts.setsup = direct.setsup
+nuts.getsub = direct.getsub
+nuts.setsub = direct.setsub
+
+nuts.getchar = direct.getchar
+nuts.setchar = direct.setchar
+nuts.getfont = direct.getfont
+nuts.setfont = direct.setfont
+
+nuts.getboth = direct.getboth
+nuts.setboth = direct.setboth
+nuts.setlink = direct.setlink
+nuts.setsplit = direct.setsplit
+
+nuts.getlist = direct.getlist -- only hlist and vlist !
+nuts.setlist = direct.setlist
+nuts.getleader = direct.getleader
+nuts.setleader = direct.setleader
+nuts.getcomponents = direct.getcomponents
+nuts.setcomponents = direct.setcomponents
+
+nuts.getsubtype = direct.getsubtype
+nuts.setsubtype = direct.setsubtype
+
+nuts.getlang = direct.getlang
+nuts.setlang = direct.setlang
+nuts.getlanguage = direct.getlang
+nuts.setlanguage = direct.setlang
+
+nuts.getattrlist = direct.getattributelist
+nuts.setattrlist = direct.setattributelist
+nuts.getattributelist = direct.getattributelist
+nuts.setattributelist = direct.setattributelist
+
+nuts.getoffsets = direct.getoffsets
+nuts.setoffsets = direct.setoffsets
+
+nuts.getkern = direct.getkern
+nuts.setkern = direct.setkern
+
+nuts.getdir = direct.getdir
+nuts.setdir = direct.setdir
+
+nuts.getpenalty = direct.getpenalty
+nuts.setpenalty = direct.setpenalty
+
+nuts.getbox = direct.getbox
+nuts.setbox = direct.setbox
+
+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_flush_node = direct.flush_node
+local d_getnext = direct.getnext
+local d_getprev = direct.getprev
+local d_getid = direct.getid
+local d_getlist = direct.getlist
+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
+----- d_copy_node = direct.copy
+local d_traverse = direct.traverse
+local d_setlink = direct.setlink
+local d_setboth = direct.setboth
+local d_getboth = direct.getboth
local function remove(head,current,free_too)
local t = current
@@ -295,7 +420,7 @@ local function remove(head,current,free_too)
if not t then
-- forget about it
elseif free_too then
- d_free_node(t)
+ d_flush_node(t)
t = nil
else
d_setboth(t) -- (t,nil,nil)
@@ -303,6 +428,11 @@ local function remove(head,current,free_too)
return head, current, t
end
+-- alias
+
+nuts.getsurround = nuts.getkern
+nuts.setsurround = nuts.setkern
+
-- bad: we can have prev's being glue_spec
nuts.remove = remove
@@ -316,32 +446,35 @@ function nuts.replace(head,current,new) -- no head returned if false
head, current, new = false, head, current
end
local prev, next = d_getboth(current)
- if next then
- d_setlink(new,next)
- end
- if prev then
- d_setlink(new,prev)
+-- if next then
+-- d_setlink(new,next)
+-- end
+-- if prev then
+-- d_setlink(prev,new)
+-- end
+ if prev or next then
+ d_setlink(prev,new,next)
end
if head then
if head == current then
head = new
end
- d_free_node(current)
+ d_flush_node(current)
return head, new
else
- d_free_node(current)
+ d_flush_node(current)
return new
end
end
-local function count(stack,flat)
+local function countall(stack,flat)
local n = 0
while stack do
local id = d_getid(stack)
if not flat and id == hlist_code or id == vlist_code then
local list = d_getlist(stack)
if list then
- n = n + 1 + count(list) -- self counts too
+ n = n + 1 + countall(list) -- self counts too
else
n = n + 1
end
@@ -353,7 +486,11 @@ local function count(stack,flat)
return n
end
-nuts.count = count
+nuts.countall = countall
+
+function nodes.countall(stack,flat)
+ return countall(tonut(stack),flat)
+end
function nuts.append(head,current,...)
for i=1,select("#",...) do
@@ -369,7 +506,7 @@ function nuts.prepend(head,current,...)
return head, current
end
-function nuts.linked(...)
+function nuts.linked(...) -- slides !
local head, last
for i=1,select("#",...) do
local next = select(i,...)
@@ -719,41 +856,10 @@ function nuts.copy_properties(source,target,what)
return newprops -- for checking
end
--- a bit special
-
-local getwidth = { }
-local setwidth = { }
-local getdimensions = { }
-local setdimensions = { }
-
-nodes.whatsitters = {
- getters = { width = getwidth, dimensions = getdimensions },
- setters = { width = setwidth, dimensions = setdimensions },
-}
-
--- obsolete
+-- here:
--- 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
+nodes.set_synctex_line = node.set_synctex_line
+nodes.set_synctex_tag = node.set_synctex_tag
+nuts.get_synctex_fields = direct.get_synctex_fields
+nuts.set_synctex_fields = direct.set_synctex_fields
diff --git a/tex/context/base/mkiv/node-ppt.lua b/tex/context/base/mkiv/node-ppt.lua
index 2573e5f5c..5ebfca87d 100644
--- a/tex/context/base/mkiv/node-ppt.lua
+++ b/tex/context/base/mkiv/node-ppt.lua
@@ -27,10 +27,8 @@ local getnext = nuts.getnext
local getprev = nuts.getprev
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
local traverse_id = nuts.traverse_id
@@ -46,9 +44,6 @@ local userdefined_code = whatsitcodes.userdefined
local nodepool = nodes.pool
local new_usernumber = nodepool.usernumber
-local nutpool = nuts.pool
-local nut_usernumber = nutpool.usernumber
-
local variables = interfaces.variables
local v_before = variables.before
local v_after = variables.after
@@ -89,14 +84,13 @@ local function register(where,data,...)
end
local writenode = node.write
-local flushnode = context.flushnode
+local flushnode = context.nodes.flush
function commands.deferredproperty(...)
-- context(register(...))
flushnode(register(...))
end
-
function commands.immediateproperty(...)
writenode(register(...))
end
@@ -107,8 +101,7 @@ local actions = { } properties.actions = actions
table.setmetatableindex(actions,function(t,k)
report("unknown property action %a",k)
- local v = function() end
- return v
+ return function() end
end)
local f_delayed = formatters["return function(target,head,where,propdata,parent) %s end"]
@@ -180,6 +173,9 @@ end
-- another experiment (a table or function closure are equally efficient); a function
-- is easier when we want to experiment with different (compatible) implementations
+-- local nutpool = nuts.pool
+-- local nut_usernumber = nutpool.usernumber
+
-- function nodes.nuts.pool.deferredfunction(...)
-- nofdelayed = nofdelayed + 1
-- local n = nut_usernumber(property_id,0)
@@ -316,7 +312,7 @@ local anchored = {
}
table.setmetatableindex(anchored,function(t,k)
- v = anchored[v_after]
+ local v = anchored[v_after]
t[k] = v
return v
end)
diff --git a/tex/context/base/mkiv/node-pro.lua b/tex/context/base/mkiv/node-pro.lua
index 36670eed2..3251b0133 100644
--- a/tex/context/base/mkiv/node-pro.lua
+++ b/tex/context/base/mkiv/node-pro.lua
@@ -6,26 +6,17 @@ if not modules then modules = { } end modules ['node-pro'] = {
license = "see context related readme files"
}
-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 force_processors = false directives.register("nodes.processors.force", function(v) force_processors = v end)
local report_nodes = logs.reporter("nodes","processors")
-local nodes = nodes
-
-local nodecodes = nodes.nodecodes
-local glyph_code = nodecodes.glyph
-local tasks = nodes.tasks
-local nuts = nodes.nuts
+local nodes = nodes
+local tasks = nodes.tasks
+local nuts = nodes.nuts
-local first_glyph = nodes.first_glyph
-local has_glyph = nodes.has_glyph
-
-nodes.processors = nodes.processors or { }
-local processors = nodes.processors
+nodes.processors = nodes.processors or { }
+local processors = nodes.processors
-- vbox: grouptype: vbox vtop output split_off split_keep | box_type: exactly|aditional
-- hbox: grouptype: hbox adjusted_hbox(=hbox_in_vmode) | box_type: exactly|aditional
@@ -38,6 +29,9 @@ do
local isglyph = nuts.isglyph
local getnext = nuts.getnext
+ local utfchar = utf.char
+ local concat = table.concat
+
local n = 0
local function reconstruct(head) -- we probably have a better one
@@ -75,125 +69,167 @@ local tracer = processors.tracer
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 = 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
- local after = nodes.count(head,true)
- if done then
- tracer("pre_linebreak","changed",head,groupcode,before,after,true)
+do
+
+ local has_glyph = nodes.has_glyph
+
+ function processors.pre_linebreak_filter(head,groupcode) -- ,size,packtype,direction
+ 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
+ local after = nodes.count(head,true)
+ if done then
+ tracer("pre_linebreak","changed",head,groupcode,before,after,true)
+ else
+ tracer("pre_linebreak","unchanged",head,groupcode,before,after,true)
+ end
+ return done and head or true
else
- tracer("pre_linebreak","unchanged",head,groupcode,before,after,true)
+ local head, done = actions(head,groupcode) -- ,size,packtype,direction
+ return done and head or true
end
- return done and head or true
- else
- local head, done = actions(head,groupcode) -- ,size,packtype,direction
- return done and head or true
+ elseif trace_callbacks then
+ local n = nodes.count(head,false)
+ tracer("pre_linebreak","no chars",head,groupcode,n,n)
end
- elseif trace_callbacks then
- local n = nodes.count(head,false)
- tracer("pre_linebreak","no chars",head,groupcode,n,n)
+ return true
end
- return true
-end
-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)
+ local function hpack_filter(head,groupcode,size,packtype,direction,attributes)
+ 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
+ tracer("hpack","unchanged",head,groupcode,before,after,true)
+ end
+ return done and head or true
else
- tracer("hpack","unchanged",head,groupcode,before,after,true)
+ local head, done = actions(head,groupcode,size,packtype,direction,attributes)
+ return done and head or true
end
- return done and head or true
- else
- local head, done = actions(head,groupcode,size,packtype,direction,attributes)
- return done and head or true
+ elseif trace_callbacks then
+ local n = nodes.count(head,false)
+ tracer("hpack","no chars",head,groupcode,n,n)
end
- elseif trace_callbacks then
- local n = nodes.count(head,false)
- tracer("hpack","no chars",head,groupcode,n,n)
+ return true
end
- return true
-end
-processors.hpack_filter = hpack_filter
+ processors.hpack_filter = hpack_filter
-do
+ do
- local setfield = nodes.setfield
- local hpack = nodes.hpack
+ local setfield = nodes.setfield
+ local hpack = nodes.hpack
- function nodes.fullhpack(head,...)
- local ok = hpack_filter(head)
- if not done or done == true then
- ok = head
+ 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)
+ return hp, b
end
- local hp, b = hpack(ok,...)
- setfield(hp,"prev",nil)
- setfield(hp,"next",nil)
- return hp, b
+
end
+ do
+
+ local setboth = nuts.setboth
+ local hpack = nuts.hpack
+
+ 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(...)
+ setboth(hp)
+ return hp, b
+ end
+
+ end
+
+ callbacks.register('pre_linebreak_filter', processors.pre_linebreak_filter, "all kind of horizontal manipulations (before par break)")
+ callbacks.register('hpack_filter' , processors.hpack_filter, "all kind of horizontal manipulations (before hbox creation)")
+
end
do
- local setboth = nuts.setboth
- local hpack = nuts.hpack
+ local actions = tasks.actions("finalizers") -- head, where
+
+ -- beware, these are packaged boxes so no first_glyph test
+ -- maybe some day a hash with valid groupcodes
+ --
+ -- beware, much can pass twice, for instance vadjust passes two times
+ --
+ -- something weird here .. group mvl when making a vbox
- function nuts.fullhpack(head,...)
- local ok = hpack_filter(tonode(head))
- if not done or done == true then
- ok = head
+ function processors.post_linebreak_filter(head,groupcode)
+ if trace_callbacks then
+ local before = nodes.count(head,true)
+ local head, done = actions(head,groupcode)
+ local after = nodes.count(head,true)
+ if done then
+ tracer("post_linebreak","changed",head,groupcode,before,after,true)
+ else
+ tracer("post_linebreak","unchanged",head,groupcode,before,after,true)
+ end
+ return done and head or true
else
- ok = tonut(ok)
+ local head, done = actions(head,groupcode)
+ return done and head or true
end
- local hp, b = hpack(...)
- setboth(hp)
- return hp, b
end
+ callbacks.register('post_linebreak_filter', processors.post_linebreak_filter,"all kind of horizontal manipulations (after par break)")
+
end
-callbacks.register('pre_linebreak_filter', processors.pre_linebreak_filter, "all kind of horizontal manipulations (before par break)")
-callbacks.register('hpack_filter' , processors.hpack_filter, "all kind of horizontal manipulations (before hbox creation)")
-
-local actions = tasks.actions("finalizers") -- head, where
-
--- beware, these are packaged boxes so no first_glyph test
--- maybe some day a hash with valid groupcodes
---
--- beware, much can pass twice, for instance vadjust passes two times
---
--- something weird here .. group mvl when making a vbox
-
-function processors.post_linebreak_filter(head,groupcode)
- if trace_callbacks then
- local before = nodes.count(head,true)
- local head, done = actions(head,groupcode)
- local after = nodes.count(head,true)
- if done then
- tracer("post_linebreak","changed",head,groupcode,before,after,true)
- else
- tracer("post_linebreak","unchanged",head,groupcode,before,after,true)
+do
+
+ local texnest = tex.nest
+
+ local getlist = nodes.getlist
+ local setlist = nodes.setlist
+ local getsubtype = nodes.getsubtype
+
+ local line_code = nodes.listcodes.line
+
+ local actions = tasks.actions("contributers")
+
+ function processors.contribute_filter(groupcode)
+ if groupcode == "box" then -- "pre_box"
+ local whatever = texnest[texnest.ptr]
+ if whatever then
+ local line = whatever.tail
+ if line and getsubtype(line) == line_code then
+ local head = getlist(line)
+ if head then
+ local okay, done = actions(head,groupcode,line)
+ if okay and okay ~= head then
+ setlist(line,okay)
+ end
+ end
+ end
+ end
end
- return done and head or true
- else
- local head, done = actions(head,groupcode)
- return done and head or true
end
-end
-callbacks.register('post_linebreak_filter', processors.post_linebreak_filter,"all kind of horizontal manipulations (after par break)")
+ callbacks.register('contribute_filter', processors.contribute_filter,"things done with lines")
+
+end
statistics.register("h-node processing time", function()
return statistics.elapsedseconds(nodes,"including kernel") -- hm, ok here?
diff --git a/tex/context/base/mkiv/node-ref.lua b/tex/context/base/mkiv/node-ref.lua
index 9f2d0918c..b313a00b6 100644
--- a/tex/context/base/mkiv/node-ref.lua
+++ b/tex/context/base/mkiv/node-ref.lua
@@ -20,82 +20,90 @@ local concat = table.concat
local attributes, nodes, node = attributes, nodes, node
-local allocate = utilities.storage.allocate, utilities.storage.mark
-local mark = utilities.storage.allocate, utilities.storage.mark
-
-local nodeinjections = backends.nodeinjections
-local codeinjections = backends.codeinjections
-
-local cleanupreferences = false
-local cleanupdestinations = true
-
-local transparencies = attributes.transparencies
-local colors = attributes.colors
-local references = structures.references
-local tasks = nodes.tasks
-
-local trace_references = false trackers.register("nodes.references", function(v) trace_references = v end)
-local trace_destinations = false trackers.register("nodes.destinations", function(v) trace_destinations = v end)
-local trace_areas = false trackers.register("nodes.areas", function(v) trace_areas = v end)
-local show_references = false trackers.register("nodes.references.show", function(v) show_references = tonumber(v) or (v and 2.25 or false) end)
-local show_destinations = false trackers.register("nodes.destinations.show", function(v) show_destinations = tonumber(v) or (v and 2.00 or false) end)
-
-local report_reference = logs.reporter("backend","references")
-local report_destination = logs.reporter("backend","destinations")
-local report_area = logs.reporter("backend","areas")
-
-local nuts = nodes.nuts
-local nodepool = nuts.pool
-
-local tonode = nuts.tonode
-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
-
-local hpack_list = nuts.hpack
-local vpack_list = nuts.vpack
-local list_dimensions = nuts.dimensions
-local traverse = nuts.traverse
-local find_node_tail = nuts.tail
-
-local nodecodes = nodes.nodecodes
-local skipcodes = nodes.skipcodes
-local listcodes = nodes.listcodes
-
-local hlist_code = nodecodes.hlist
-local vlist_code = nodecodes.vlist
-local glue_code = nodecodes.glue
-local glyph_code = nodecodes.glyph
-local rule_code = nodecodes.rule
-local dir_code = nodecodes.dir
-local localpar_code = nodecodes.localpar
-
-local leftskip_code = skipcodes.leftskip
-local rightskip_code = skipcodes.rightskip
-local parfillskip_code = skipcodes.parfillskip
-
-local line_code = listcodes.line
-
-local new_rule = nodepool.rule
-local new_kern = nodepool.kern
-
-local free_node = nuts.free
-
-local tosequence = nodes.tosequence
-
-local implement = interfaces.implement
+local allocate = utilities.storage.allocate, utilities.storage.mark
+local mark = utilities.storage.allocate, utilities.storage.mark
+
+local nodeinjections = backends.nodeinjections
+local codeinjections = backends.codeinjections
+
+local cleanupreferences = false
+local cleanupdestinations = true
+
+local transparencies = attributes.transparencies
+local colors = attributes.colors
+local references = structures.references
+local enableaction = nodes.tasks.enableaction
+
+local trace_references = false trackers.register("nodes.references", function(v) trace_references = v end)
+local trace_destinations = false trackers.register("nodes.destinations", function(v) trace_destinations = v end)
+local trace_areas = false trackers.register("nodes.areas", function(v) trace_areas = v end)
+local show_references = false trackers.register("nodes.references.show", function(v) show_references = tonumber(v) or (v and 2.25 or false) end)
+local show_destinations = false trackers.register("nodes.destinations.show", function(v) show_destinations = tonumber(v) or (v and 2.00 or false) end)
+
+local report_reference = logs.reporter("backend","references")
+local report_destination = logs.reporter("backend","destinations")
+local report_area = logs.reporter("backend","areas")
+
+local nuts = nodes.nuts
+local nodepool = nuts.pool
+
+local tonode = nuts.tonode
+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 getwidth = nuts.getwidth
+local setwidth = nuts.setwidth
+local getheight = nuts.getheight
+local getattr = nuts.getattr
+local setattr = nuts.setattr
+local getsubtype = nuts.getsubtype
+local getwhd = nuts.getwhd
+local getdir = nuts.getdir
+local setshift = nuts.setshift
+
+local hpack_list = nuts.hpack
+local vpack_list = nuts.vpack
+local list_dimensions = nuts.dimensions
+local list_rangedimensions = nuts.rangedimensions
+local traverse = nuts.traverse
+local find_node_tail = nuts.tail
+
+local nodecodes = nodes.nodecodes
+local skipcodes = nodes.skipcodes
+local listcodes = nodes.listcodes
+
+local hlist_code = nodecodes.hlist
+local vlist_code = nodecodes.vlist
+local glue_code = nodecodes.glue
+local glyph_code = nodecodes.glyph
+local rule_code = nodecodes.rule
+local dir_code = nodecodes.dir
+local localpar_code = nodecodes.localpar
+
+local leftskip_code = skipcodes.leftskip
+local rightskip_code = skipcodes.rightskip
+local parfillskip_code = skipcodes.parfillskip
+
+local line_code = listcodes.line
+
+local new_rule = nodepool.rule
+local new_kern = nodepool.kern
+local new_hlist = nodepool.hlist
+
+local flush_node = nuts.flush
+
+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 have a problem: we cannot calculate the height well. This happens
@@ -104,7 +112,7 @@ local implement = interfaces.implement
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)
+ return list_rangedimensions(parent,start,last)
else
return list_dimensions(start,last)
end
@@ -117,33 +125,30 @@ local function vlist_dimensions(start,stop) -- also needs the stretch and so
setnext(stop,nil)
end
local v = vpack_list(start)
- local w = getfield(v,"width")
- local h = getfield(v,"height")
- local d = getfield(v,"depth")
+ local w, h, d = getwhd(v)
setlist(v) -- not needed
- free_node(v)
+ flush_node(v)
if temp then
setnext(stop,temp)
end
return w, h, d
end
+-- not ok when vlist at mvl level
+
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
+ if id == hlist_code or id == vlist_code or id == rule_code or id == glyph_code then
+ local sw, sh, sd = getwhd(start)
+ local pw, ph, pd = getwhd(parent)
+ local ht = sh == 0 and ph or sh -- changed
+ local dp = sd == 0 and pd or sd -- changed
if trace_areas then
- report_area("dimensions taken of %a",nodecodes[id])
- end
- -- 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")
+ report_area("dimensions taken of %a (%p,%p,%p) with parent (%p,%p,%p) -> (%p,%p,%p)",
+ nodecodes[id],sw,sh,sd,pw,ph,pd,sw,ht,dp)
end
- return width, height, depth
+ return sw, ht, dp
else
if trace_areas then
report_area("dimensions calculated of %a",nodecodes[id])
@@ -174,7 +179,8 @@ local function dimensions(parent,start,stop) -- in principle we could move some
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
+ local w, h, d = getwhd(c)
+ return w, h, d, c
else
if trace_areas then
report_area("dimensions taken of vlist (probably wrong)")
@@ -211,7 +217,7 @@ local function dimensions(parent,start,stop) -- in principle we could move some
report_area("dimensions taken of vlist")
end
local w, h, d = vlist_dimensions(first,last,parent)
- local ht = getfield(first,"height")
+ local ht = getheight(first)
return w, ht, d + h - ht, first
else
-- return hlist_dimensions(start,stop,parent)
@@ -219,7 +225,8 @@ local function dimensions(parent,start,stop) -- in principle we could move some
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
+ local w, h, d = getwhd(first)
+ return w, h, d, first
else
if trace_areas then
report_area("dimensions taken of vlist (probably wrong)")
@@ -255,35 +262,40 @@ 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: %i : %s %s %s => w=%p, h=%p, d=%p, c=%S","line",
+ report_area("%s: %i : %s %s %s => w=%p, h=%p, d=%p","line",
reference,pardir or "---",txtdir or "---",
- tosequence(l,nil,true),width,height,depth,resolved)
+ tosequence(l,nil,true),width,height,depth)
end
setlist(line,result)
setlink(result,l)
return head, last
+ elseif head == first then
+ if trace_areas then
+ report_area("%s: %i : %s %s %s => w=%p, h=%p, d=%p","head",
+ reference,pardir or "---",txtdir or "---",
+ tosequence(first,last,true),width,height,depth)
+ end
+ setlink(result,first)
+ return result, last
else
- if head == first then
- if trace_areas then
- 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
- setlink(result,first)
- return result, last
- else
- if trace_areas then
- 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
- setlink(prev,result)
- end
- setlink(result,first)
- return head, last
+ if trace_areas then
+ report_area("%s: %i : %s %s %s => w=%p, h=%p, d=%p","middle",
+ reference,pardir or "---",txtdir or "---",
+ tosequence(first,last,true),width,height,depth)
end
+if first == last and getid(parent) == vlist_code and getid(first) == hlist_code then
+ if trace_areas then
+ -- think of a button without \dontleavehmode in the mvl
+ report_area("compensating for link in vlist")
+ end
+ setlink(result,getlist(first))
+ setlist(first,result)
+else
+ -- setlink(getprev(first),result)
+ -- setlink(result,first)
+ setlink(getprev(first),result,first)
+end
+ return head, last
end
else
return head, last
@@ -291,9 +303,7 @@ local function inject_range(head,first,last,reference,make,stack,parent,pardir,t
end
local function inject_list(id,current,reference,make,stack,pardir,txtdir)
- local width = getfield(current,"width")
- local height = getfield(current,"height")
- local depth = getfield(current,"depth")
+ local width, height, depth = getwhd(current)
local correction = 0
local moveright = false
local first = getlist(current)
@@ -341,12 +351,9 @@ local function inject_list(id,current,reference,make,stack,pardir,txtdir)
setlist(current,result)
elseif moveright then -- brr no prevs done
-- result after first
- local n = getnext(first)
- setnext(result,n)
- setlink(first,first)
- if n then
- setprev(n,result)
- end
+ -- setlink(result,getnext(first))
+ -- setlink(first,result)
+ setlink(first,result,getnext(first))
else
-- first after result
setlink(result,first)
@@ -405,9 +412,9 @@ local function inject_areas(head,attribute,make,stack,done,skip,parent,pardir,tx
done[r] = done[r] - 1
end
elseif id == dir_code then
- txtdir = getfield(current,"dir")
+ txtdir = getdir(current)
elseif id == localpar_code then
- pardir = getfield(current,"dir")
+ pardir = getdir(current)
elseif id == glue_code and getsubtype(current) == leftskip_code then -- any glue at the left?
--
else
@@ -457,9 +464,9 @@ local function inject_area(head,attribute,make,stack,done,parent,pardir,txtdir)
end
end
elseif id == dir_code then
- txtdir = getfield(current,"dir")
+ txtdir = getdir(current)
elseif id == localpar_code then
- pardir = getfield(current,"dir")
+ pardir = getdir(current)
else
local r = getattr(current,attribute)
if r and not done[r] then
@@ -501,8 +508,8 @@ local function addstring(what,str,shift) --todo make a pluggable helper (in font
end
local text = typesetters.tohpack(str,infofont)
local rule = new_rule(emwidth/5,4*exheight,3*exheight)
- setfield(text,"shift",shift)
- return hpack_list(nuts.linked(text,rule))
+ setshift(text,shift)
+ return hpack_list(setlink(text,rule))
end
end
end
@@ -540,42 +547,38 @@ local function colorize(width,height,depth,n,reference,what,sr,offset)
setattr(rule,a_transparency,u_transparency)
if width < 0 then
local kern = new_kern(width)
- setfield(rule,"width",-width)
+ setwidth(rule,-width)
setnext(kern,rule)
setprev(rule,kern)
return kern
- else
-
-if sr and sr ~= "" then
- local text = addstring(what,sr,shift)
- if text then
- local kern = new_kern(-getfield(text,"width"))
- setlink(kern,text)
- setlink(text,rule)
- return kern
- end
-end
-
- return rule
+ elseif sr and sr ~= "" then
+ local text = addstring(what,sr,shift)
+ if text then
+ local kern = new_kern(-getwidth(text))
+ -- setlink(kern,text)
+ -- setlink(text,rule)
+ setlink(kern,text,rule)
+ return kern
+ end
end
+ return rule
end
-local function justadd(what,sr,shift)
+local function justadd(what,sr,shift,current) -- needs testing
if sr and sr ~= "" then
local text = addstring(what,sr,shift)
if text then
- local kern = new_kern(-getfield(text,"width"))
- setlink(kern,text)
- setlink(text,rule)
- return kern
+ local kern = new_kern(-getwidth(text))
+ setlink(kern,text,current)
+ return new_hlist(kern)
end
end
end
-- references:
-local texsetattribute = tex.setattribute
local texsetcount = tex.setcount
+----- texsetattribute = tex.setattribute
local stack = { }
local done = { }
@@ -624,7 +627,7 @@ local function makereference(width,height,depth,reference) -- height and depth a
nofreferences = nofreferences + 1
local result, current, texts
if show_references then
- local d = sr[1]
+ local d = resolved
if d then
local r = d.reference
local p = d.prefix
@@ -641,15 +644,12 @@ local function makereference(width,height,depth,reference) -- height and depth a
end
if trace_references then
local step = 65536
- result = hpack_list(colorize(width,height-step,depth-step,2,reference,"reference",texts,show_references)) -- step subtracted so that we can see seperate links
- setfield(result,"width",0)
+ result = new_hlist(colorize(width,height-step,depth-step,2,reference,"reference",texts,show_references)) -- step subtracted so that we can see seperate links
current = result
elseif texts then
- texts = justadd("reference",texts,show_references)
+ texts = justadd("reference",texts,show_references,current)
if texts then
- result = hpack_list(texts)
- setfield(result,"width",0)
- current = result
+ current = texts
end
end
if current then
@@ -658,10 +658,7 @@ local function makereference(width,height,depth,reference) -- height and depth a
result = annot
end
references.registerpage(n)
- result = hpack_list(result,0)
- setfield(result,"width",0)
- setfield(result,"height",0)
- setfield(result,"depth",0)
+ result = new_hlist(result)
if cleanupreferences then stack[reference] = nil end
return result, resolved
elseif trace_references then
@@ -758,8 +755,7 @@ local function makedestination(width,height,depth,reference)
step = 4*65536
width, height, depth = 5*step, 5*step, 0
end
- local rule = hpack_list(colorize(width,height,depth,3,reference,"destination",texts,show_destinations))
- setfield(rule,"width",0)
+ local rule = new_hlist(colorize(width,height,depth,3,reference,"destination",texts,show_destinations))
if not result then
result, current = rule, rule
else
@@ -768,13 +764,9 @@ local function makedestination(width,height,depth,reference)
end
width, height = width - step, height - step
elseif texts then
- texts = justadd("destination",texts,show_destinations)
+ texts = justadd("destination",texts,show_destinations,current)
if texts then
- result = hpack_list(texts)
- if result then
- setfield(result,"width",0)
- current = result
- end
+ current = texts
end
end
nofdestinations = nofdestinations + 1
@@ -789,11 +781,7 @@ local function makedestination(width,height,depth,reference)
current = find_node_tail(annot)
end
if result then
- -- some internal error
- result = hpack_list(result,0)
- setfield(result,"width",0)
- setfield(result,"height",0)
- setfield(result,"depth",0)
+ result = new_hlist(result)
end
if cleanupdestinations then stack[reference] = nil end
return result, resolved
@@ -929,8 +917,8 @@ statistics.register("interactive elements", function()
end)
function references.enableinteraction()
- tasks.enableaction("shipouts","nodes.references.handler")
- tasks.enableaction("shipouts","nodes.destinations.handler")
+ enableaction("shipouts","nodes.references.handler")
+ enableaction("shipouts","nodes.destinations.handler")
function references.enableinteraction() end
end
diff --git a/tex/context/base/mkiv/node-res.lua b/tex/context/base/mkiv/node-res.lua
index bb09656fb..8b7ec1a62 100644
--- a/tex/context/base/mkiv/node-res.lua
+++ b/tex/context/base/mkiv/node-res.lua
@@ -72,17 +72,24 @@ local getbox = nuts.getbox
local getfield = nuts.getfield
local getid = nuts.getid
local getlist = nuts.getlist
+local getglue = nuts.getglue
local setfield = nuts.setfield
local setchar = nuts.setchar
local setlist = nuts.setlist
+local setwhd = nuts.setwhd
+local setglue = nuts.setglue
+local setdisc = nuts.setdisc
+local setfont = nuts.setfont
+local setkern = nuts.setkern
+local setpenalty = nuts.setpenalty
+local setdir = nuts.setdir
+local setshift = nuts.setshift
+local setwidth = nuts.setwidth
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
+local flush_nut = nuts.flush
-- 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
@@ -178,36 +185,26 @@ 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 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)
- 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
+local rule = register_nut(new_nut("rule")) setdir(rule, "TLT")
+local emptyrule = register_nut(new_nut("rule",rulecodes.empty)) setdir(rule, "TLT")
+local userrule = register_nut(new_nut("rule",rulecodes.user)) setdir(rule, "TLT")
+local hlist = register_nut(new_nut("hlist")) setdir(hlist,"TLT")
+local vlist = register_nut(new_nut("vlist")) setdir(vlist,"TLT")
function nutpool.glyph(fnt,chr)
local n = copy_nut(glyph)
- if fnt then setfield(n,"font",fnt) end
- if chr then setchar(n,chr) end
+ if fnt then
+ setfont(n,fnt,chr)
+ elseif chr then
+ setchar(n,chr)
+ end
return n
end
function nutpool.penalty(p)
local n = copy_nut(penalty)
if p and p ~= 0 then
- setfield(n,"penalty",p)
+ setpenalty(n,p)
end
return n
end
@@ -215,7 +212,7 @@ end
function nutpool.kern(k)
local n = copy_nut(kern)
if k and k ~= 0 then
- setfield(n,"kern",k)
+ setkern(n,k)
end
return n
end
@@ -238,79 +235,54 @@ end
function nutpool.fontkern(k)
local n = copy_nut(fontkern)
- setfield(n,"kern",k)
+ if k and k ~= 0 then
+ setkern(n,k)
+ end
return n
end
function nutpool.italickern(k)
local n = copy_nut(italickern)
if k and k ~= 0 then
- setfield(n,"kern",k)
+ setkern(n,k)
end
return n
end
function nutpool.gluespec(width,stretch,shrink,stretch_order,shrink_order)
+ -- maybe setglue
local s = copy_nut(glue_spec)
- 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)
+ if width or stretch or shrink or stretch_order or shrink_order then
+ setglue(s,width,stretch,shrink,stretch_order,shrink_order)
end
return s
end
local function someskip(skip,width,stretch,shrink,stretch_order,shrink_order)
+ -- maybe setglue
local n = copy_nut(skip)
- 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)
+ if width or stretch or shrink or stretch_order or shrink_order then
+ setglue(n,width,stretch,shrink,stretch_order,shrink_order)
end
return n
end
function nutpool.stretch(a,b)
+ -- width stretch shrink stretch_order shrink_order
local n = copy_nut(glue)
- if b then
- setfield(n,"stretch",a)
- setfield(n,"stretch_order",b)
- else
- setfield(n,"stretch",1)
- setfield(n,"stretch_order",a or 1)
+ if not b then
+ a, b = 1, a or 1
end
+ setglue(n,0,a,0,b,0)
return n
end
function nutpool.shrink(a,b)
local n = copy_nut(glue)
- if b then
- setfield(n,"shrink",a)
- setfield(n,"shrink_order",b)
- else
- setfield(n,"shrink",1)
- setfield(n,"shrink_order",a or 1)
+ if not b then
+ a, b = 1, a or 1
end
+ setglue(n,0,0,a,0,0,b)
return n
end
@@ -320,18 +292,8 @@ end
function nutpool.negatedglue(glue)
local n = copy_nut(glue)
- 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
+ local width, stretch, shrink = getglue(n)
+ setglue(n,-width,-stretch,-shrink)
return n
end
@@ -351,63 +313,51 @@ function nutpool.baselineskip(width,stretch,shrink)
return someskip(baselineskip,width,stretch,shrink)
end
-function nutpool.disc()
- return copy_nut(disc)
+function nutpool.disc(pre,post,replace)
+ local d = copy_nut(disc)
+ if pre or post or replace then
+ setdisc(d,pre,post,replace)
+ end
+ return d
end
function nutpool.textdir(dir)
local t = copy_nut(textdir)
- setfield(t,"dir",dir)
+ if dir then
+ setdir(t,dir)
+ end
return t
end
function nutpool.rule(width,height,depth,dir) -- w/h/d == nil will let them adapt
local n = copy_nut(rule)
- 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)
+ if width or height or depth then
+ setwhd(n,width,height,depth)
end
if dir then
- setfield(n,"dir",dir)
+ setdir(n,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)
+ if width or height or depth then
+ setwhd(n,width,height,depth)
end
if dir then
- setfield(n,"dir",dir)
+ setdir(n,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)
+ if width or height or depth then
+ setwhd(n,width,height,depth)
end
if dir then
- setfield(n,"dir",dir)
+ setdir(n,dir)
end
return n
end
@@ -418,81 +368,7 @@ function nutpool.latelua(code)
return n
end
-if context and _cldo_ then
-
- -- a typical case where we have more nodes than nuts
-
- local context = context
-
- local f_cldo = string.formatters["_cldo_(%i)"]
- local register = context.registerfunction
-
- local latelua_node = register_node(new_node("whatsit",whatsitcodes.latelua))
- local latelua_nut = register_nut (new_nut ("whatsit",whatsitcodes.latelua))
-
- 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)
- 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
-
- -- when function in latelua:
-
- -- function context.lateluafunction(f)
- -- local n = copy_node(latelua_node)
- -- setfield_node(n,"string",f)
- -- flushnode(n)
- -- end
-
- -- local contextsprint = context.sprint
- -- local ctxcatcodes = tex.ctxcatcodes
- -- local storenode = context.storenode
-
- -- when 0.79 is out:
-
- -- function context.lateluafunction(f)
- -- contextsprint(ctxcatcodes,"\\cldl",storenode(latefunction(f))," ")
- -- end
-
- -- 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
-
-end
+nutpool.lateluafunction = nutpool.latelua
function nutpool.leftmarginkern(glyph,width)
local n = copy_nut(left_margin_kern)
@@ -504,7 +380,7 @@ function nutpool.leftmarginkern(glyph,width)
setfield(n,"glyph",glyph)
end
if width and width ~= 0 then
- setfield(n,"width",width)
+ setwidth(n,width)
end
return n
end
@@ -519,7 +395,7 @@ function nutpool.rightmarginkern(glyph,width)
setfield(n,"glyph",glyph)
end
if width and width ~= 0 then
- setfield(n,"width",width)
+ setwidth(n,width)
end
return n
end
@@ -532,46 +408,45 @@ function nutpool.noad()
return copy_nut(noad)
end
-function nutpool.hlist(list,width,height,depth,shift)
+local function new_hlist(list,width,height,depth,shift)
local n = copy_nut(hlist)
if list then
setlist(n,list)
end
- if width and width ~= 0 then
- setfield(n,"width",width)
- end
- if height and height ~= 0 then
- setfield(n,"height",height)
- end
- if depth and depth ~= 0 then
- setfield(n,"depth",depth)
+ if width or height or depth then
+ setwhd(n,width,height,depth)
end
if shift and shift ~= 0 then
- setfield(n,"shift",shift)
+ setshift(n,shift)
end
return n
end
-function nutpool.vlist(list,width,height,depth,shift)
+local function new_vlist(list,width,height,depth,shift)
local n = copy_nut(vlist)
if list then
setlist(n,list)
end
- if width and width ~= 0 then
- setfield(n,"width",width)
- end
- if height and height ~= 0 then
- setfield(n,"height",height)
- end
- if depth and depth ~= 0 then
- setfield(n,"depth",depth)
+ if width or height or depth then
+ setwhd(n,width,height,depth)
end
if shift and shift ~= 0 then
- setfield(n,"shift",shift)
+ setshift(n,shift)
end
return n
end
+nutpool.hlist = new_hlist
+nutpool.vlist = new_vlist
+
+function nodepool.hlist(list,width,height,depth,shift)
+ return tonode(new_hlist(list and tonut(list),width,height,depth,shift))
+end
+
+function nodepool.vlist(list,width,height,depth,shift)
+ return tonode(new_vlist(list and tonut(list),width,height,depth,shift))
+end
+
-- local num = userids["my id"]
-- local str = userids[num]
@@ -657,13 +532,13 @@ local function cleanup(nofboxes) -- todo
local nr = nofreserved
for i=1,nofreserved do
local ri = reserved[i]
- free_nut(reserved[i])
+ flush_nut(reserved[i])
end
if nofboxes then
for i=0,nofboxes do
local l = getbox(i)
if l then
- free_nut(l) -- also list ?
+ flush_nut(l) -- also list ?
nl = nl + 1
end
end
diff --git a/tex/context/base/mkiv/node-rul.lua b/tex/context/base/mkiv/node-rul.lua
index 63991813e..4ec651d3b 100644
--- a/tex/context/base/mkiv/node-rul.lua
+++ b/tex/context/base/mkiv/node-rul.lua
@@ -11,263 +11,113 @@ 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
-local tonode = nuts.tonode
-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
-local getattr = nuts.getattr
-local setattr = nuts.setattr
-local getfont = nuts.getfont
-local getsubtype = nuts.getsubtype
-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
-local boundary_code = nodecodes.boundary
-local dir_code = nodecodes.dir
-
-function nodes.striprange(first,last) -- todo: dir
- if first and last then -- just to be sure
- if first == last then
- return first, last
- end
- while first and first ~= last do
- local id = getid(first)
- if id == glyph_code or id == disc_code or id == dir_code or id == boundary_code then -- or id == rule_code
- break
- else
- first = getnext(first)
- end
- end
- if not first then
- return nil, nil
- elseif first == last then
- return first, last
- end
- while last and last ~= first do
- local id = getid(last)
- if id == glyph_code or id == disc_code or id == dir_code or id == boundary_code then -- or id == rule_code
- break
- else
- local prev = getprev(last) -- luatex < 0.70 has italic correction kern not prev'd
- if prev then
- last = prev
- else
- break
- end
- end
- end
- if not last then
- return nil, nil
- end
- end
- return first, last
-end
-
--- todo: order and maybe other dimensions
-
-local floor = math.floor
-
-local trace_ruled = false trackers.register("nodes.rules", function(v) trace_ruled = v end)
-local report_ruled = logs.reporter("nodes","rules")
-
-local n_tostring = nodes.idstostring
-local n_tosequence = nodes.tosequence
-
-local a_ruled = attributes.private('ruled')
-local a_color = attributes.private('color')
-local a_transparency = attributes.private('transparency')
-local a_colorspace = attributes.private('colormodel')
-
-local insert_node_before = nuts.insert_before
+-- todo: collect successive bit and pieces and combine them
+--
+-- path s ; s := shaped(p) ; % p[] has rectangles
+-- fill s withcolor .5white ;
+-- draw boundingbox s withcolor yellow;
+
+local attributes = attributes
+local nodes = nodes
+local properties = nodes.properties
+
+local enableaction = nodes.tasks.enableaction
+
+local nuts = nodes.nuts
+local tonode = nuts.tonode
+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
+local getattr = nuts.getattr
+local setattr = nuts.setattr
+local getfont = nuts.getfont
+local getsubtype = nuts.getsubtype
+local getlist = nuts.getlist
+local setwhd = nuts.setwhd
+local setdir = nuts.setdir
+local setattrlist = nuts.setattrlist
+local setshift = nuts.setshift
+local getwidth = nuts.getwidth
+local setwidth = nuts.setwidth
+
+local flushlist = nuts.flush_list
+local effective_glue = nuts.effective_glue
local insert_node_after = nuts.insert_after
-local list_dimensions = nuts.dimensions
+local insert_node_before = nuts.insert_before
+local find_tail = nuts.tail
+local setglue = nuts.setglue
+local traverse_id = nuts.traverse_id
+local list_dimensions = nuts.rangedimensions
local hpack_nodes = nuts.hpack
-
-local striprange = nodes.striprange
-
-local fontdata = fonts.hashes.identifiers
-local variables = interfaces.variables
-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 current_attr = nuts.current_attr
local nodecodes = nodes.nodecodes
-local skipcodes = nodes.skipcodes
+local rulecodes = nodes.rulecodes
+local gluecodes = nodes.gluecodes
+local listcodes = nodes.listcodes
local kerncodes = nodes.kerncodes
local glyph_code = nodecodes.glyph
-local disc_code = nodecodes.disc
+local localpar_code = nodecodes.localpar
+local dir_code = nodecodes.dir
local glue_code = nodecodes.glue
-local penalty_code = nodecodes.penalty
-local kern_code = nodecodes.kern
local hlist_code = nodecodes.hlist
-local vlist_code = nodecodes.vlist
-local rule_code = nodecodes.rule
-local boundary_code = nodecodes.boundary
-local dir_code = nodecodes.dir
-local userskip_code = skipcodes.userskip
-local spaceskip_code = skipcodes.spaceskip
-local xspaceskip_code = skipcodes.xspaceskip
-local leader_code = skipcodes.leaders
+local indent_code = listcodes.indent
+local line_code = listcodes.line
-local kerning_code = kerncodes.kern
+local leftskip_code = gluecodes.leftskip
+local rightskip_code = gluecodes.rightskip
+local parfillskip_code = gluecodes.parfillskip
local nodepool = nuts.pool
local new_rule = nodepool.rule
local new_userrule = nodepool.userrule
local new_kern = nodepool.kern
-local new_glue = nodepool.glue
--- we can use this one elsewhere too
---
--- todo: functions: word, sentence
---
--- glyph rule unset whatsit glue margin_kern kern math disc
+local n_tostring = nodes.idstostring
+local n_tosequence = nodes.tosequence
-local checkdir = true
+local variables = interfaces.variables
+local implement = interfaces.implement
+
+local privateattributes = attributes.private
+
+local a_ruled = privateattributes('ruled')
+local a_runningtext = privateattributes('runningtext')
+local a_color = privateattributes('color')
+local a_transparency = privateattributes('transparency')
+local a_colormodel = privateattributes('colormodel')
+local a_linefiller = privateattributes("linefiller")
+local a_viewerlayer = privateattributes("viewerlayer")
+
+local v_both = variables.both
+local v_left = variables.left
+local v_right = variables.right
+local v_local = variables["local"]
+local v_yes = variables.yes
+local v_foreground = variables.foreground
--- we assume {glyphruns} and no funny extra kerning, ok, maybe we need
--- a dummy character as start and end; anyway we only collect glyphs
---
--- this one needs to take layers into account (i.e. we need a list of
--- critical attributes)
-
--- omkeren class en level -> scheelt functie call in analyze
-
--- 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, 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
- local aa = getattr(n,attribute)
- if aa then
- if aa == a then
- if not f then -- ?
- f = n
- end
- l = n
- else
- -- possible extensions: when in same class then keep spanning
- local newlevel, newclass = floor(aa/1000), aa%1000
- -- strip = not continue or level == 1 -- 0
- if f then
- if class == newclass then -- and newlevel > level then
- head, done = flush(head,f,l,d,level,parent,false), true
- else
- head, done = flush(head,f,l,d,level,parent,strip), true
- end
- end
- f, l, a = n, n, aa
- level, class = newlevel, newclass
- d = data[class]
- local c = d.continue
- leaders = c == v_all
- continue = leaders or c == v_yes
- end
- else
- if f then
- head, done = flush(head,f,l,d,level,parent,strip), true
- end
- f, l, a = nil, nil, nil
- end
- elseif id == disc_code or id == boundary_code then
- if f then
- l = n
- end
- elseif id == kern_code and getsubtype(n) == kerning_code then
- if f then
- l = n
- end
- elseif id == hlist_code or id == vlist_code then
- if f then
- head, done = flush(head,f,l,d,level,parent,strip), true
- f, l, a = nil, nil, nil
- end
- local list = getlist(n)
- if list then
- setlist(n,(processwords(attribute,data,flush,list,n))) -- watch ()
- end
--- elseif checkdir and id == dir_code then -- only changes in dir, we assume proper boundaries
--- if f and a then
--- l = n
--- end
- elseif id == dir_code then -- only changes in dir, we assume proper boundaries
- if f then
- l = n
- end
- elseif f then
- if continue then
- if id == penalty_code then
- l = n
- -- elseif id == kern_code then
- -- l = n
- 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 or (leaders and subtype >= leader_code)) then
- l = n
- else
- head, done = flush(head,f,l,d,level,parent,strip), true
- f, l, a = nil, nil, nil
- end
- end
- else
- head, done = flush(head,f,l,d,level,parent,strip), true
- f, l, a = nil, nil, nil
- end
- end
- n = getnext(n)
- end
- if f then
- head, done = flush(head,f,l,d,level,parent,strip), true
- end
- return head, true -- todo: done
- else
- return head, false
- end
-end
+local fonthashes = fonts.hashes
+local fontdata = fonthashes.identifiers
+local fontresources = fonthashes.resources
--- nodes.processwords = processwords
+local dimenfactor = fonts.helpers.dimenfactor
+local splitdimen = number.splitdimen
+local setmetatableindex = table.setmetatableindex
-nodes.processwords = function(attribute,data,flush,head,parent) -- we have hlistdir and local dir
- head = tonut(head)
- if parent then
- parent = tonut(parent)
- end
- local head, done = processwords(attribute,data,flush,head,parent)
- return tonode(head), done
-end
+--
+
+local striprange = nodes.striprange
+local processwords = nodes.processwords
--
@@ -286,7 +136,7 @@ local function userrule(t,noattributes)
if noattributes == false or noattributes == nil then
-- avoid fuzzy ones
else
- setfield(r,"attr",attribs())
+ setattrlist(r,current_attr())
end
properties[r] = t
return tonode(r)
@@ -296,8 +146,31 @@ rules.userrule = userrule
local ruleactions = { }
rules.ruleactions = ruleactions
-callback.register("process_rule",function(n,h,v)
- local n = tonut(n)
+local function mathradical(n,h,v)
+ ----- size = getfield(n,"index")
+ local font = getfield(n,"transform")
+ local actions = fontresources[font].mathruleactions
+ if actions then
+ local action = actions.radicalaction
+ if action then
+ action(n,h,v,font)
+ end
+ end
+end
+
+local function mathrule(n,h,v)
+ ----- size = getfield(n,"index")
+ local font = getfield(n,"transform")
+ local actions = fontresources[font].mathruleactions
+ if actions then
+ local action = actions.hruleaction
+ if action then
+ action(n,h,v,font)
+ end
+ end
+end
+
+local function useraction(n,h,v)
local p = properties[n]
if p then
local i = p.type or "draw"
@@ -306,19 +179,48 @@ callback.register("process_rule",function(n,h,v)
a(p,h,v,i,n)
end
end
-end)
+end
+
+local subtypeactions = {
+ [rulecodes.user] = useraction,
+ [rulecodes.over] = mathrule,
+ [rulecodes.under] = mathrule,
+ [rulecodes.fraction] = mathrule,
+ [rulecodes.radical] = mathradical,
+}
+
+callbacks.register(
+ "process_rule",
+ function(n,h,v)
+ local n = tonut(n)
+ local s = getsubtype(n)
+ local a = subtypeactions[s]
+ if a then
+ a(n,h,v)
+ end
+ end,
+ "handle additional user rule features"
+)
--
+local trace_ruled = false trackers.register("nodes.rules", function(v) trace_ruled = v end)
+local report_ruled = logs.reporter("nodes","rules")
+
function rules.define(settings)
data[#data+1] = settings
context(#data)
end
-local a_viewerlayer = attributes.private("viewerlayer")
-
local function flush_ruled(head,f,l,d,level,parent,strip) -- not that fast but acceptable for this purpose
- if getid(f) ~= glyph_code then
+ local font = nil
+ local id = getid(f)
+ if id == glyph_code then
+ font = getfont(f)
+ elseif id == hlist_code then
+ font = getattr(f,a_runningtext)
+ end
+ if not font then
-- saveguard ... we need to deal with rules and so (math)
return head
end
@@ -336,8 +238,9 @@ 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, ht, dp = list_dimensions(getfield(parent,"glue_set"),getfield(parent,"glue_sign"),getfield(parent,"glue_order"),f,getnext(l))
+ local w, ht, dp = list_dimensions(parent,f,getnext(l))
local method = d.method
+ local empty = d.empty == v_yes
local offset = d.offset
local continue = d.continue
local dy = d.dy
@@ -349,19 +252,19 @@ local function flush_ruled(head,f,l,d,level,parent,strip) -- not that fast but a
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 colorspace = ma > 0 and ma or getattr(f,a_colormodel) 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 e = dimenfactor(unit,font) -- what if no glyph node
local rt = tonumber(rulethickness)
if rt then
rulethickness = e * rulethickness / 2
else
local n, u = splitdimen(rulethickness)
if n and u then -- we need to intercept ex and em and % and ...
- rulethickness = n * dimenfactor(u,fontdata[getfont(f)]) / 2
+ rulethickness = n * dimenfactor(u,fontdata[font]) / 2
else
rulethickness = 1/5
end
@@ -381,21 +284,28 @@ local function flush_ruled(head,f,l,d,level,parent,strip) -- not that fast but a
if layer then
setattr(r,a_viewerlayer,layer)
end
- local k = new_kern(-w)
- if foreground then
- insert_node_after(head,l,k)
- insert_node_after(head,k,r)
- l = r
- else
+ if empty then
head = insert_node_before(head,f,r)
- insert_node_after(head,r,k)
+ setlink(r,getnext(l))
+ setprev(f)
+ setnext(l)
+ flushlist(f)
+ else
+ local k = new_kern(-w)
+ if foreground then
+ insert_node_after(head,l,k)
+ insert_node_after(head,k,r)
+ l = r
+ else
+ head = insert_node_before(head,f,r)
+ insert_node_after(head,r,k)
+ end
end
if trace_ruled then
report_ruled("level %a, width %p, height %p, depth %p, nodes %a, text %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,
@@ -417,7 +327,7 @@ local function flush_ruled(head,f,l,d,level,parent,strip) -- not that fast but a
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_colormodel,colorspace)
setattr(r,a_color,color)
end
if transparency then
@@ -431,17 +341,14 @@ end
local process = nodes.processwords
-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 rules.enable()
- tasks.enableaction("shipouts","nodes.rules.handler")
+ enableaction("shipouts","nodes.rules.handler")
end
--- elsewhere:
---
--- tasks.appendaction ("shipouts", "normalizers", "nodes.rules.handler")
--- tasks.disableaction("shipouts", "nodes.rules.handler") -- only kick in when used
-
local trace_shifted = false trackers.register("nodes.shifting", function(v) trace_shifted = v end)
local report_shifted = logs.reporter("nodes","shifting")
@@ -468,8 +375,8 @@ local function flush_shifted(head,first,last,data,level,parent,strip) -- not tha
local next = getnext(last)
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")
+ local width, height, depth = list_dimensions(parent,first,next)
+ local list = hpack_nodes(first,width,"exactly") -- we can use a simple pack
if first == head then
head = list
end
@@ -480,9 +387,8 @@ local function flush_shifted(head,first,last,data,level,parent,strip) -- not tha
setlink(list,next)
end
local raise = data.dy * dimenfactor(data.unit,fontdata[getfont(first)])
- setfield(list,"shift",raise)
- setfield(list,"height",height)
- setfield(list,"depth",depth)
+ setshift(list,raise)
+ setwhd(list,width,height,depth)
if trace_shifted then
report_shifted("width %p, nodes %a, text %a",width,n_tostring(first,last),n_tosequence(first,last,true))
end
@@ -494,21 +400,204 @@ local process = nodes.processwords
nodes.shifts.handler = function(head) return process(a_shifted,data,flush_shifted,head) end
function nodes.shifts.enable()
- tasks.enableaction("shipouts","nodes.shifts.handler")
+ enableaction("shipouts","nodes.shifts.handler")
end
--- linefillers (placeholder)
+-- linefillers
nodes.linefillers = nodes.linefillers or { }
nodes.linefillers.data = nodes.linefillers.data or { }
+storage.register("nodes/linefillers/data", nodes.linefillers.data, "nodes.linefillers.data")
+
+local data = nodes.linefillers.data
+
+function nodes.linefillers.define(settings)
+ data[#data+1] = settings
+ context(#data)
+end
+
+local function linefiller(current,data,width,location)
+ local height = data.height
+ local depth = data.depth
+ local mp = data.mp
+ local ma = data.ma
+ local ca = data.ca
+ local ta = data.ta
+ if mp and mp ~= "" then
+ return tonut(userrule {
+ width = width,
+ height = height,
+ depth = depth,
+ type = "mp",
+ line = data.rulethickness,
+ data = mp,
+ ma = ma,
+ ca = ca,
+ ta = ta,
+ option = location,
+ direction = getdir(current),
+ })
+ else
+ local linefiller = new_rule(width,height,depth)
+ if ca then
+ setattr(linefiller,a_colorspace,ma)
+ setattr(linefiller,a_color,ca)
+ end
+ if ta then
+ setattr(linefiller,a_transparency,ta)
+ end
+ return linefiller
+ end
+end
+
+local function find_attr(head,attr)
+ while head do
+ local a = head[attr]
+ if a then
+ return a, head
+ end
+ head = getnext(head)
+ end
+end
+
function nodes.linefillers.handler(head)
- return head, false
+-- local current = tonut(head) -- when we hook into the contributers
+ for current in traverse_id(hlist_code,tonut(head)) do
+ if getsubtype(current) == line_code then
+ local list = getlist(current)
+ if list then
+ -- why doesn't leftskip take the attributes
+ -- or list[linefiller] or maybe first match (maybe we need a fast helper for that)
+ local a = getattr(current,a_linefiller)
+ if a then
+ local class = a % 1000
+ local data = data[class]
+ if data then
+ local location = data.location
+ local scope = data.scope
+ local distance = data.distance
+ local threshold = data.threshold
+ local leftlocal = false
+ local rightlocal = false
+ --
+ if scope == v_right then
+ leftlocal = true
+ elseif scope == v_left then
+ rightlocal = true
+ elseif scope == v_local then
+ leftlocal = true
+ rightlocal = true
+ end
+ --
+ if location == v_left or location == v_both then
+ local lskip = nil -- leftskip
+ local iskip = nil -- indentation
+ local head = list
+ while head do
+ local id = getid(head)
+ if id == glue_code then
+ if getsubtype(head) == leftskip_code then
+ lskip = head
+ else
+ break
+ end
+ elseif id == localpar_code or id == dir_code then
+ -- go on
+ elseif id == hlist_code then
+ if getsubtype(head) == indent_code then
+ iskip = head
+ end
+ break
+ else
+ break
+ end
+ head = getnext(head)
+ end
+ if head then
+ local indentation = iskip and getwidth(iskip) or 0
+ local leftfixed = lskip and getwidth(lskip) or 0
+ local lefttotal = lskip and effective_glue(lskip,current) or 0
+ local width = lefttotal - (leftlocal and leftfixed or 0) + indentation - distance
+ if width > threshold then
+ if iskip then
+ setwidth(iskip,0)
+ end
+ if lskip then
+ setglue(lskip,leftlocal and getwidth(lskip) or nil)
+ if distance > 0 then
+ insert_node_after(list,lskip,new_kern(distance))
+ end
+ insert_node_after(list,lskip,linefiller(current,data,width,"left"))
+ else
+ insert_node_before(list,head,linefiller(current,data,width,"left"))
+ if distance > 0 then
+ insert_node_before(list,head,new_kern(distance))
+ end
+ end
+ end
+ end
+ end
+ --
+ if location == v_right or location == v_both then
+ local pskip = nil -- parfillskip
+ local rskip = nil -- rightskip
+ local tail = find_tail(list)
+ while tail and getid(tail) == glue_code do
+ local subtype = getsubtype(tail)
+ if subtype == rightskip_code then
+ rskip = tail
+ elseif subtype == parfillskip_code then
+ pskip = tail
+ else
+ break
+ end
+ tail = getprev(tail)
+ end
+ if tail then
+ local rightfixed = rskip and getwidth(rskip) or 0
+ local righttotal = rskip and effective_glue(rskip,current) or 0
+ local parfixed = pskip and getwidth(pskip) or 0
+ local partotal = pskip and effective_glue(pskip,current) or 0
+ local width = righttotal - (rightlocal and rightfixed or 0) + partotal - distance
+ if width > threshold then
+ if pskip then
+ setglue(pskip)
+ end
+ if rskip then
+ setglue(rskip,rightlocal and getwidth(rskip) or nil)
+ if distance > 0 then
+ insert_node_before(list,rskip,new_kern(distance))
+ end
+ insert_node_before(list,rskip,linefiller(current,data,width,"right"))
+ else
+ insert_node_after(list,tail,linefiller(current,data,width,"right"))
+ if distance > 0 then
+ insert_node_after(list,tail,new_kern(distance))
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ return head
end
--- interface
+local enable = false
+
+function nodes.linefillers.enable()
+ if not enable then
+ -- we could now nil it
+ enableaction("finalizers","nodes.linefillers.handler")
+ enable = true
+ end
+end
-local implement = interfaces.implement
+-- interface
implement {
name = "definerule",
@@ -520,13 +609,14 @@ implement {
{ "order" },
{ "method", "integer" },
{ "offset", "number" },
- { "rulethickness", "string" },
+ { "rulethickness" },
{ "dy", "number" },
{ "max", "number" },
{ "ma", "integer" },
{ "ca", "integer" },
{ "ta", "integer" },
- { "mp", "string" },
+ { "mp" },
+ { "empty" },
}
}
}
@@ -555,3 +645,30 @@ implement {
onlyonce = true,
actions = nodes.shifts.enable
}
+
+implement {
+ name = "definelinefiller",
+ actions = { nodes.linefillers.define, context },
+ arguments = {
+ {
+ { "method", "integer" },
+ { "location", "string" },
+ { "scope", "string" },
+ { "mp", "string" },
+ { "ma", "integer" },
+ { "ca", "integer" },
+ { "ta", "integer" },
+ { "depth", "dimension" },
+ { "height", "dimension" },
+ { "distance", "dimension" },
+ { "threshold", "dimension" },
+ { "rulethickness", "dimension" },
+ }
+ }
+}
+
+implement {
+ name = "enablelinefillers",
+ onlyonce = true,
+ actions = nodes.linefillers.enable
+}
diff --git a/tex/context/base/mkiv/node-rul.mkiv b/tex/context/base/mkiv/node-rul.mkiv
index 130ac9671..bfdd17d30 100644
--- a/tex/context/base/mkiv/node-rul.mkiv
+++ b/tex/context/base/mkiv/node-rul.mkiv
@@ -97,13 +97,13 @@
\appendtoks
\ifcsname\??barindex\currentbar\endcsname
- \lastnamedcs
+ \lastnamedcs\zerocount
\else
\expandafter\newcount\csname\??barindex\currentbar\endcsname
\fi
-% \normalexpanded{\t_node_rules_checklist{\node_rules_redefine{\currentbar}\the\t_node_rules_checklist}}%
- \normalexpanded{\t_node_rules_checklist{\the\t_node_rules_checklist\node_rules_redefine{\currentbar}}}%
-% \etoksapp\t_node_rules_checklist{\node_rules_redefine{\currentbar}}%
+ % \normalexpanded{\t_node_rules_checklist{\node_rules_redefine{\currentbar}\the\t_node_rules_checklist}}%
+ \normalexpanded{\t_node_rules_checklist{\the\t_node_rules_checklist\relax\node_rules_redefine{\currentbar}}}%
+ % \etoksapp\t_node_rules_checklist{\node_rules_redefine{\currentbar}}%
\node_rules_define
\setuevalue\currentbar{\node_rules_direct{\currentbar}}%
\to \everydefinebar
@@ -124,13 +124,16 @@
ta \thetransparencyattribute\p_node_rules_color
offset \barparameter\c!offset\space % number
dy \barparameter\c!dy\space % number
+ empty {\barparameter\c!empty}%
\relax}}
\unexpanded\def\node_rules_redefine#1%
{\def\currentbar{#1}\node_rules_define}
\unexpanded\def\node_rules_direct#1%
- {\groupedcommand{\node_rules_set{#1}}\relax}
+ {\groupedcommand
+ {\node_rules_set{#1}\barparameter\c!left}%
+ {\relax\barparameter\c!right}}
\unexpanded\def\node_rules_set#1% maybe reverse the 1000 (also maybe use more attributes instead of settings)
{\edef\currentbar{#1}%
@@ -146,13 +149,23 @@
+\csname\??barattribute#1\ifcsname\??bar#1:\number\c_node_rules_index\s!parent\endcsname:\number\c_node_rules_index\fi\endcsname
\relax}
+\unexpanded\def\resetbar
+ {\attribute\ruledattribute\attributeunsetvalue}
+
+\unexpanded\def\nobar
+ {\groupedcommand
+ {\resetbar\barparameter\c!left}%
+ {\relax\barparameter\c!right}}
+
\unexpanded\def\startbar[#1]%
{\begingroup
\node_rules_set{#1}%
- \ignorespaces}
+ \ignorespaces
+ \barparameter\c!left}
\unexpanded\def\stopbar
{\removeunwantedspaces
+ \barparameter\c!right
\endgroup}
\unexpanded\def\setbar[#1]%
@@ -176,6 +189,7 @@
\setupbars
[\c!method=0, % new: 0=center nested, 1=stack nested
\c!continue=\v!no,
+ \c!empty=, % new: yes = hide text
\c!offset=0, % upwards, replaces: topoffset bottomoffset
\c!dy=0,
\c!max=3,
@@ -211,6 +225,14 @@
\definebar[\v!overstrikes] [\v!overstrike] [\c!continue=\v!no]
\definebar[\v!understrikes][\v!understrike][\c!continue=\v!no]
+\definebar
+ [\v!hiddenbar]
+ [\v!underbar]
+ [\c!continue=\v!yes,
+ \c!empty=\v!yes,
+ \c!left=\zwj,
+ \c!right=\zwj]
+
% \setupbar[\v!overstrike][continue=all]
% we want these always so ...
@@ -335,7 +357,7 @@
\else
\expandafter\newcount\csname\??shiftindex\currentshift\endcsname
\fi
- \normalexpanded{\t_node_shifts_checklist{\node_shifts_redefine{\currentshift}\the\t_node_shifts_checklist}}%
+ \normalexpanded{\t_node_shifts_checklist{\the\t_node_shifts_checklist\node_shifts_redefine{\currentshift}}}% order ?
\node_shifts_define
\setuevalue\currentshift{\node_shifts_direct{\currentshift}}%
\to \everydefineshift
@@ -420,4 +442,122 @@
{\begingroup\dostartisolation\begingroup#1}
{#2\endgroup\dostopisolation\endgroup}}
+%D More rules.
+
+% The following code rocks and was written with the Toto Live in Poland bluray
+% in loop mode on my 5.1 surround development setup (the Toto lineup with Simon
+% Phillips on drums). The Amsterdam concert is equally energizing.
+
+\installcorenamespace{linefiller}
+\installcorenamespace{linefillerindex}
+\installcorenamespace{linefillerattribute}
+
+\installcommandhandler \??linefiller {linefiller} \??linefiller
+
+\definesystemattribute[linefiller][public]
+
+\newtoks\t_node_linefiller_checklist
+
+\let\c_node_linefiller_index\relax % temporary synonym
+
+\let\setuplinefillers\setuplinefiller
+
+\appendtoks
+ \ifsecondargument
+ \node_linefiller_define
+ \else
+ \the\t_node_linefiller_checklist
+ \fi
+\to \everysetuplinefiller
+
+\appendtoks
+ \ifcsname\??linefillerindex\currentlinefiller\endcsname
+ \lastnamedcs\zerocount
+ \else
+ \expandafter\newcount\csname\??linefillerindex\currentlinefiller\endcsname
+ \fi
+ \etoksapp\t_node_linefiller_checklist{\t_node_linefiller_checklist\node_linefiller_redefine{\currentlinefiller}}%
+ \node_linefiller_define
+\to \everydefinelinefiller
+
+\unexpanded\def\node_linefiller_define
+ {\edef\p_node_rules_color{\linefillerparameter\c!color}%
+ \setevalue{\??linefillerattribute\currentlinefiller}{\number
+ \clf_definelinefiller
+ %method \linefillerparameter\c!method
+ location {\linefillerparameter\c!location}%
+ scope {\linefillerparameter\c!scope}%
+ mp {\includeMPgraphic{\linefillerparameter\c!mp}}%
+ ma \thecolormodelattribute
+ ca \thecolorattribute\p_node_rules_color
+ ta \thetransparencyattribute\p_node_rules_color
+ height \dimexpr\linefillerparameter\c!height\relax
+ depth \dimexpr\linefillerparameter\c!depth\relax
+ distance \dimexpr\linefillerparameter\c!distance\relax
+ threshold \dimexpr\linefillerparameter\c!threshold\relax
+ rulethickness \dimexpr\linefillerparameter\c!rulethickness\relax
+ \relax}}
+
+\unexpanded\def\node_linefiller_redefine#1%
+ {\def\currentlinefiller{#1}\node_linefiller_define}
+
+\unexpanded\def\node_linefiller_set#1% todo: check parent ! todo: move attr etc to lua
+ {\def\currentlinefiller{#1}%
+ \expandafter\let\expandafter\c_node_linefiller_index\csname\??linefillerindex#1\endcsname
+ \advance\c_node_linefiller_index\plusone
+ \clf_enablelinefillers
+ \attribute\linefillerattribute\numexpr
+ \plusthousand*\c_node_linefiller_index
+ +\csname\??linefillerattribute#1\ifcsname\??linefiller#1:\number\c_node_linefiller_index\s!parent\endcsname:\number\c_node_linefiller_index\fi\endcsname
+ \relax}
+
+\unexpanded\def\startlinefiller
+ {\dodoubleempty\node_linefiller_start}
+
+\unexpanded\def\node_linefiller_start[#1][#2]%
+ {\begingroup
+ \par
+ \def\currentlinefiller{#1}%
+ \ifsecondargument
+ % we need to update settings
+ \setuplinefiller[#1][#2]% no \setupcurrentlinefiller as we need to update settings
+ \fi
+ \node_linefiller_set{#1}%
+ \linefillerparameter\c!before
+ \usealignparameter\linefillerparameter
+ \uselinefillerstyleandcolor\c!textstyle\c!textcolor} % bars have foregroundcolor
+
+\unexpanded\def\stoplinefiller
+ {\par
+ \linefillerparameter\c!after
+ \endgroup}
+
+\unexpanded\def\setlinefiller[#1]%
+ {\node_linefiller_set{#1}}
+
+\setuplinefillers
+ [%c!method=0,
+ %c!mp=,
+ \c!location=\v!both,
+ \c!scope=\v!local,
+ \c!distance=\zeropoint,
+ \c!threshold=\zeropoint,
+ \c!rulethickness=\linewidth,
+ \c!height=\linewidth,
+ \c!depth=\zeropoint,
+ %\c!textcolor=,
+ %\c!textstyle=,
+ %\c!align=,
+ %\c!before=,
+ %\c!after=,
+ \c!color=]
+
+\definelinefiller
+ [filler]
+ [\c!height=.75\exheight,
+ %\c!mp=rules:filler:demo,
+ %\c!threshold=.25\emwidth,
+ \c!distance=.25\emwidth,
+ \c!rulethickness=.25\exheight]
+
\protect \endinput
diff --git a/tex/context/base/mkiv/node-scn.lua b/tex/context/base/mkiv/node-scn.lua
new file mode 100644
index 000000000..67a0badec
--- /dev/null
+++ b/tex/context/base/mkiv/node-scn.lua
@@ -0,0 +1,330 @@
+if not modules then modules = { } end modules ['node-scn'] = {
+ version = 1.001,
+ comment = "companion to node-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local floor = math.floor
+
+local attributes = attributes
+local nodes = nodes
+
+local nuts = nodes.nuts
+local tonode = nuts.tonode
+local tonut = nuts.tonut
+
+local getnext = nuts.getnext
+local getprev = nuts.getprev
+local getid = nuts.getid
+local getattr = nuts.getattr
+local getsubtype = nuts.getsubtype
+local getlist = nuts.getlist
+local setlist = nuts.setlist
+
+local end_of_math = nuts.end_of_math
+
+local nodecodes = nodes.nodecodes
+local rulecodes = nodes.rulecodes
+local gluecodes = nodes.gluecodes
+local listcodes = nodes.listcodes
+local kerncodes = nodes.kerncodes
+
+local glyph_code = nodecodes.glyph
+local disc_code = nodecodes.disc
+local rule_code = nodecodes.rule
+local boundary_code = nodecodes.boundary
+local dir_code = nodecodes.dir
+local math_code = nodecodes.math
+local glue_code = nodecodes.glue
+local penalty_code = nodecodes.penalty
+local kern_code = nodecodes.kern
+local hlist_code = nodecodes.hlist
+local vlist_code = nodecodes.vlist
+
+local userskip_code = gluecodes.userskip
+local spaceskip_code = gluecodes.spaceskip
+local xspaceskip_code = gluecodes.xspaceskip
+local leader_code = gluecodes.leaders
+
+local kerning_code = kerncodes.kern
+
+local variables = interfaces.variables
+
+local privateattributes = attributes.private
+
+local a_runningtext = privateattributes('runningtext')
+local a_fontkern = privateattributes('fontkern')
+
+local v_yes = variables.yes
+local v_all = variables.all
+
+local function striprange(first,last) -- todo: dir
+ if first and last then -- just to be sure
+ if first == last then
+ return first, last
+ end
+ while first and first ~= last do
+ local id = getid(first)
+ if id == glyph_code or id == disc_code or id == dir_code or id == boundary_code then -- or id == rule_code
+ break
+ else
+ first = getnext(first)
+ end
+ end
+ if not first then
+ return nil, nil
+ elseif first == last then
+ return first, last
+ end
+ while last and last ~= first do
+ local id = getid(last)
+ if id == glyph_code or id == disc_code or id == dir_code or id == boundary_code then -- or id == rule_code
+ break
+ else
+ local prev = getprev(last) -- luatex < 0.70 has italic correction kern not prev'd
+ if prev then
+ last = prev
+ else
+ break
+ end
+ end
+ end
+ if not last then
+ return nil, nil
+ end
+ end
+ return first, last
+end
+
+nodes.striprange = striprange
+
+-- todo: order and maybe other dimensions
+
+-- we can use this one elsewhere too
+--
+-- todo: functions: word, sentence
+--
+-- glyph rule unset whatsit glue margin_kern kern math disc
+
+-- we assume {glyphruns} and no funny extra kerning, ok, maybe we need
+-- a dummy character as start and end; anyway we only collect glyphs
+--
+-- this one needs to take layers into account (i.e. we need a list of
+-- critical attributes)
+
+-- omkeren class en level -> scheelt functie call in analyze
+
+-- todo: switching inside math
+
+-- handlers
+
+local function processwords(attribute,data,flush,head,parent,skip) -- we have hlistdir and local dir
+ local n = head
+ if n then
+ local f, l, a, d, i, class
+ 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 or (id == hlist_code and getattr(n,a_runningtext) == 1) then
+ local aa = getattr(n,attribute)
+ if aa and aa ~= skip then
+ if aa == a then
+ if not f then -- ?
+ f = n
+ end
+ l = n
+ else
+ -- possible extensions: when in same class then keep spanning
+ local newlevel, newclass = floor(aa/1000), aa%1000 -- will be configurable
+ -- strip = not continue or level == 1 -- 0
+ if f then
+ if class == newclass then -- and newlevel > level then
+ head, done = flush(head,f,l,d,level,parent,false), true
+ else
+ head, done = flush(head,f,l,d,level,parent,strip), true
+ end
+ end
+ f, l, a = n, n, aa
+ level, class = newlevel, newclass
+ d = data[class]
+ if d then
+ local c = d.continue
+ leaders = c == v_all
+ continue = leaders or c == v_yes
+ else
+ continue = true
+ end
+ end
+ else
+ if f then
+ head, done = flush(head,f,l,d,level,parent,strip), true
+ end
+ f, l, a = nil, nil, nil
+ end
+ if id == hlist_code then
+ local list = getlist(n)
+ if list then
+ setlist(n,(processwords(attribute,data,flush,list,n,aa))) -- watch ()
+ end
+ end
+ elseif id == disc_code or id == boundary_code then
+ if f then
+ l = n
+ end
+ elseif id == kern_code and (getsubtype(n) == kerning_code or getattr(n,a_fontkern)) then
+ if f then
+ l = n
+ end
+ elseif id == math_code then
+ -- otherwise not consistent: a $b$ c vs a $b+c$ d etc
+ -- we need a special (optional) go over math variant
+ if f then
+ head, done = flush(head,f,l,d,level,parent,strip), true
+ f, l, a = nil, nil, nil
+ end
+ elseif id == hlist_code or id == vlist_code then
+ if f then
+ head, done = flush(head,f,l,d,level,parent,strip), true
+ f, l, a = nil, nil, nil
+ end
+ local list = getlist(n)
+ if list then
+ setlist(n,(processwords(attribute,data,flush,list,n,skip))) -- watch ()
+ end
+ elseif id == dir_code then -- only changes in dir, we assume proper boundaries
+ if f then
+ l = n
+ end
+ elseif f then
+ if continue then
+ if id == penalty_code then
+ l = n
+ -- elseif id == kern_code then
+ -- l = n
+ 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 or (leaders and subtype >= leader_code)) then
+ l = n
+ else
+ head, done = flush(head,f,l,d,level,parent,strip), true
+ f, l, a = nil, nil, nil
+ end
+ end
+ else
+ head, done = flush(head,f,l,d,level,parent,strip), true
+ f, l, a = nil, nil, nil
+ end
+ end
+ n = getnext(n)
+ end
+ if f then
+ head, done = flush(head,f,l,d,level,parent,strip), true
+ end
+ return head, true -- todo: done
+ else
+ return head, false
+ end
+end
+
+nodes.processwords = function(attribute,data,flush,head,parent) -- we have hlistdir and local dir
+ head = tonut(head)
+ if parent then
+ parent = tonut(parent)
+ end
+ local head, done = processwords(attribute,data,flush,head,parent)
+ return tonode(head), done
+end
+
+-- works on lines !
+
+-- todo: stack because skip can change when nested
+
+local function processranges(attribute,flush,head,parent,depth,skip)
+ local n = head
+ if n then
+ local f, l, a
+ local done = false
+ while n do
+ local id = getid(n)
+ if id == glyph_code or id == rule_code then
+ local aa = getattr(n,attribute)
+-- if aa and (not skip or aa ~= skip) then
+ if aa then
+ if aa == a then
+ if not f then
+ f = n
+ end
+ l = n
+ else
+ if f then
+ head, done = flush(head,f,l,a,parent,depth), true
+ end
+ f, l, a = n, n, aa
+ end
+ else
+ if f then
+ head, done = flush(head,f,l,a,parent,depth), true
+ end
+ f, l, a = nil, nil, nil
+ end
+ elseif id == disc_code or id == boundary_code then
+ if f then
+ l = n
+ else
+ -- weird
+ end
+ elseif id == kern_code and (getsubtype(n) == kerning_code or getattr(n,a_fontkern)) then
+ if f then
+ l = n
+ end
+ -- elseif id == penalty_code then
+ elseif id == glue_code then
+ -- todo: leaders
+ elseif id == hlist_code or id == vlist_code then
+ local aa = getattr(n,attribute)
+-- if aa and (not skip or aa ~= skip) then
+ if aa then
+ if aa == a then
+ if not f then
+ f = n
+ end
+ l = n
+ else
+ if f then
+ head, done = flush(head,f,l,a,parent,depth), true
+ end
+ f, l, a = n, n, aa
+ end
+ else
+ if f then
+ head, done = flush(head,f,l,a,parent,depth), true
+ end
+ f, l, a = nil, nil, nil
+ end
+ local list = getlist(n)
+ if list then
+ setlist(n,(processranges(attribute,flush,list,n,depth+1,aa)))
+ end
+ end
+ n = getnext(n)
+ end
+ if f then
+ head, done = flush(head,f,l,a,parent,depth), true
+ end
+ return head, done
+ else
+ return head, false
+ end
+end
+
+nodes.processranges = function(attribute,flush,head,parent) -- we have hlistdir and local dir
+ head = tonut(head)
+ if parent then
+ parent = tonut(parent)
+ end
+ local head, done = processranges(attribute,flush,head,parent,0)
+ return tonode(head), done
+end
diff --git a/tex/context/base/mkiv/node-ser.lua b/tex/context/base/mkiv/node-ser.lua
index 2ad1242c5..f1be21f84 100644
--- a/tex/context/base/mkiv/node-ser.lua
+++ b/tex/context/base/mkiv/node-ser.lua
@@ -10,7 +10,7 @@ if not modules then modules = { } end modules ['node-ser'] = {
-- of luatex; this is pretty old code that needs an overhaul
local type = type
-local concat, tohash, sortedkeys, printtable = table.concat, table.tohash, table.sortedkeys, table.print
+local concat, tohash, sortedkeys, printtable, serialize = table.concat, table.tohash, table.sortedkeys, table.print, table.serialize
local formatters, format, rep = string.formatters, string.format, string.rep
local allocate = utilities.storage.allocate
@@ -38,14 +38,16 @@ local f_char = formatters["%U"]
----- f_char = utilities.strings.chkuni -- formatters["%!chkuni!"]
+-- this needs checking with the latest state of affairs:
+
local expand = allocate ( tohash {
-- text:
"list", -- list_ptr & ins_ptr & adjust_ptr
"pre", --
"post", --
+ "replace", -- nobreak
"top_skip", --
"attr", --
- "replace", -- nobreak
"components", -- lig_ptr
"box_left", --
"box_right", --
@@ -85,15 +87,15 @@ local ignore = allocate ( tohash {
local dimension = allocate ( tohash {
"width", "height", "depth", "shift",
"stretch", "shrink",
- "xoffset", "yoffset",
+ "xoffset", "yoffset", "xadvance",
"surround",
"kern",
"box_left_width", "box_right_width"
} )
--- flat: don't use next, but indexes
--- verbose: also add type
--- can be sped up
+-- flat : don't use next, but indexes
+-- verbose : also add type
+-- todo : speed up
nodes.dimensionfields = dimension
nodes.listablefields = expand
@@ -103,7 +105,7 @@ nodes.ignorablefields = ignore
local function astable(n,sparse) -- not yet ok, might get obsolete anyway
n = tonode(n)
- local f, t = getfields(n), { }
+ local f = getfields(n)
for i=1,#f do
local v = f[i]
local d = n[v]
@@ -111,7 +113,7 @@ local function astable(n,sparse) -- not yet ok, might get obsolete anyway
if ignore[v] or v == "id" then
-- skip
elseif expand[v] then -- or: type(n[v]) ~= "string" or type(n[v]) ~= "number" or type(n[v]) ~= "table"
- t[v] = "pointer to list"
+ t[v] = "<list>"
elseif sparse then
if (type(d) == "number" and d ~= 0) or (type(d) == "string" and d ~= "") then
t[v] = d
@@ -133,7 +135,7 @@ setinspector("node",function(v) if is_node(v) then printtable(astable(v),tostrin
local function totable(n,flat,verbose,noattributes) -- nicest: n,true,true,true
local function to_table(n,flat,verbose,noattributes) -- no need to pass
- local f = getfields(n)
+ local f = getfields(n)
local tt = { }
for k=1,#f do
local v = f[k]
@@ -143,6 +145,8 @@ local function totable(n,flat,verbose,noattributes) -- nicest: n,true,true,true
-- skip
elseif noattributes and v == "attr" then
-- skip
+ elseif v == "prev" then
+ tt[v] = "<node>"
elseif expand[v] then
if type(nv) == "number" or type(nv) == "string" then
tt[v] = nv
@@ -213,102 +217,16 @@ local function key(k)
return ((type(k) == "number") and "["..k.."]") or k
end
--- not ok yet; this will become a module
-
--- todo: adapt to nodecodes etc .. use formatters
-
-local function serialize(root,name,handle,depth,m,noattributes)
- handle = handle or print
- if depth then
- depth = depth .. " "
- handle(format("%s%s={",depth,key(name)))
- else
- depth = ""
- local tname = type(name)
- if tname == "string" then
- if name == "return" then
- handle("return {")
- else
- handle(name .. "={")
- end
- elseif tname == "number" then
- handle("[" .. name .. "]={")
- else
- handle("t={")
- end
- end
- if root then
- local fld
- if root.id then
- fld = getfields(root) -- we can cache these (todo)
- else
- fld = sortedkeys(root)
- end
- if type(root) == 'table' and root['type'] then -- userdata or table
- handle(format("%s type=%q,",depth,root['type']))
- end
- for f=1,#fld do
- local k = fld[f]
- if k == "ref_count" then
- -- skip
- elseif noattributes and k == "attr" then
- -- skip
- elseif k == "id" then
- local v = root[k]
- handle(format("%s id=%s,",depth,nodecodes[v] or noadcodes[v] or v))
- elseif k then
- local v = root[k]
- local t = type(v)
- if t == "number" then
- if v == 0 then
- -- skip
- else
- handle(format("%s %s=%s,",depth,key(k),v))
- end
- elseif t == "string" then
- if v == "" then
- -- skip
- else
- handle(format("%s %s=%q,",depth,key(k),v))
- end
- elseif t == "boolean" then
- handle(format("%s %s=%q,",depth,key(k),tostring(v)))
- elseif v then -- userdata or table
- serialize(v,k,handle,depth,m+1,noattributes)
- end
- end
- end
- if root['next'] then -- userdata or table
- serialize(root['next'],'next',handle,depth,m+1,noattributes)
- end
- end
- if m and m > 0 then
- handle(format("%s},",depth))
- else
- handle(format("%s}",depth))
- end
+function nodes.serialize(root,flat,verbose,noattributes,name)
+ return serialize(totable(tonode(root),flat,verbose,noattributes),name)
end
-function nodes.serialize(root,name,noattributes)
- local t, n = { }, 0
- local function flush(s)
- n = n + 1
- t[n] = s
- end
- serialize(tonode(root),name,flush,nil,0,noattributes)
- return concat(t,"\n")
+function nodes.serializebox(n,flat,verbose,noattributes,name)
+ return serialize(totable(tex.box[n],flat,verbose,noattributes),name)
end
-function nodes.serializebox(n,flat,verbose,name)
- return nodes.serialize(nodes.totable(tex.box[n],flat,verbose),name)
-end
-
-function nodes.visualizebox(...) -- to be checked .. will move to module anyway
- context.starttyping()
- context.pushcatcodes("verbatim")
- context(nodes.serializebox(...))
- context.stoptyping()
- context.popcatcodes()
+function nodes.visualizebox(n,flat,verbose,noattributes,name)
+ context.tocontext(totable(tex.box[n],flat,verbose,noattributes),name)
end
function nodes.list(head,n) -- name might change to nodes.type -- to be checked .. will move to module anyway
@@ -340,3 +258,40 @@ function nodes.print(head,n)
head = head.next
end
end
+
+-- quick hack, nicer is to have a proper expand per node type
+-- already prepared
+
+local function apply(n,action)
+ while n do
+ action(n)
+ local id = n.id
+ if id == hlist_code or id == vlist_code then
+ apply(n.list,action)
+ end
+ n = n.next
+ end
+end
+
+nodes.apply = apply
+
+local nuts = nodes.nuts
+local getid = nuts.getid
+local getlist = nuts.getlist
+local getnext = nuts.getnext
+
+local function apply(n,action)
+ while n do
+ action(n)
+ local id = getid(n)
+ if id == hlist_code or id == vlist_code then
+ local list = getlist(n,action)
+ if list then
+ apply(list,action)
+ end
+ end
+ n = getnext(n)
+ end
+end
+
+nuts.apply = apply
diff --git a/tex/context/base/mkiv/node-shp.lua b/tex/context/base/mkiv/node-shp.lua
index 2f2af4905..216e6462a 100644
--- a/tex/context/base/mkiv/node-shp.lua
+++ b/tex/context/base/mkiv/node-shp.lua
@@ -23,9 +23,6 @@ local handlers = nodes.handlers
local hlist_code = nodecodes.hlist
local vlist_code = nodecodes.vlist
local disc_code = nodecodes.disc
-local mark_code = nodecodes.mark
-local kern_code = nodecodes.kern
-local glue_code = nodecodes.glue
local whatsit_code = nodecodes.whatsit
local fulldisc_code = disccodes.discretionary
@@ -37,15 +34,14 @@ local implement = interfaces.implement
local nuts = nodes.nuts
local tonut = nuts.tonut
local tonode = nuts.tonode
-local free_node = nuts.free
local remove_node = nuts.remove
local traverse_nodes = nuts.traverse
local getfield = nuts.getfield
local setfield = nuts.setfield
-local setsetlink = nuts.setlink
-local setsetprev = nuts.setprev
-local setsetnext = nuts.setnext
+local setlink = nuts.setlink
+local setprev = nuts.setprev
+local setnext = nuts.setnext
local getid = nuts.getid
local getdisc = nuts.getdisc
local getboth = nuts.getboth
diff --git a/tex/context/base/mkiv/node-syn.lua b/tex/context/base/mkiv/node-syn.lua
new file mode 100644
index 000000000..1b8e07382
--- /dev/null
+++ b/tex/context/base/mkiv/node-syn.lua
@@ -0,0 +1,504 @@
+if not modules then modules = { } end modules ['node-syn'] = {
+ 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"
+}
+
+-- Because we have these fields in some node that are used by sunctex, I decided (because
+-- some users seem to like that feature) to implement a variant that might work out better
+-- for ConTeXt. This is experimental code. I don't use it myself so it will take a while
+-- to mature. There will be some helpers that one can use in more complex situations like
+-- included xml files.
+--
+-- It is unclear how the output gets interpreted. For instance, we only need to be able to
+-- go back to a place where text is entered, but still we need all that redundant box
+-- wrapping.
+--
+-- Possible optimizations: pack whole lines.
+
+local type, rawset = type, rawset
+local concat = table.concat
+local formatters = string.formatters
+
+local trace = false trackers.register("system.syntex.visualize", function(v) trace = v end)
+
+local nuts = nodes.nuts
+local tonut = nuts.tonut
+local tonode = nuts.tonode
+
+local getid = nuts.getid
+local getlist = nuts.getlist
+local setlist = nuts.setlist
+local getnext = nuts.getnext
+local getwhd = nuts.getwhd
+local getwidth = nuts.getwidth
+local getsubtype = nuts.getsubtype
+local getattr = nuts.getattr
+
+local nodecodes = nodes.nodecodes
+local kerncodes = nodes.kerncodes
+
+local glue_code = nodecodes.glue
+local kern_code = nodecodes.kern
+local kern_disc = nodecodes.disc
+local rule_code = nodecodes.rule
+----- math_code = nodecodes.math
+local hlist_code = nodecodes.hlist
+local vlist_code = nodecodes.vlist
+local glyph_code = nodecodes.glyph
+local fontkern_code = kerncodes.fontkern
+
+local insert_before = nuts.insert_before
+local insert_after = nuts.insert_after
+
+local nodepool = nuts.pool
+local new_latelua = nodepool.latelua
+local new_rule = nodepool.rule
+local new_hlist = nodepool.hlist
+
+local getdimensions = nuts.dimensions
+local getrangedimensions = nuts.rangedimensions
+
+local a_fontkern = attributes.private("fontkern")
+
+local get_synctex_fields = nuts.get_synctex_fields
+local set_synctex_fields = nuts.set_synctex_fields
+local set_syntex_tag = nodes.set_synctex_tag
+
+local getcount = tex.getcount
+local setcount = tex.setcount
+
+local getpos = function()
+ getpos = backends.codeinjections.getpos
+ return getpos()
+ end
+
+local f_glue = formatters["g%i,%i:%i,%i"]
+local f_glyph = formatters["x%i,%i:%i,%i"]
+local f_kern = formatters["k%i,%i:%i,%i:%i"]
+local f_rule = formatters["r%i,%i:%i,%i:%i,%i,%i"]
+local f_hlist = formatters["[%i,%i:%i,%i:%i,%i,%i"]
+local f_vlist = formatters["(%i,%i:%i,%i:%i,%i,%i"]
+local s_hlist = "]"
+local s_vlist = ")"
+local f_hvoid = formatters["h%i,%i:%i,%i:%i,%i,%i"]
+local f_vvoid = formatters["v%i,%i:%i,%i:%i,%i,%i"]
+
+local characters = fonts.hashes.characters
+
+local synctex = { }
+luatex.synctex = synctex
+
+-- the file name stuff
+
+local noftags = 0
+local stnums = { }
+local sttags = table.setmetatableindex(function(t,name)
+ noftags = noftags + 1
+ t[name] = noftags
+ stnums[noftags] = name
+ return noftags
+end)
+
+function synctex.setfilename(name)
+ if set_syntex_tag and name then
+ set_syntex_tag(sttags[name])
+ end
+end
+
+function synctex.resetfilename()
+ if set_syntex_tag then
+ local name = luatex.currentfile()
+ if name then
+ set_syntex_tag(name)
+ end
+ end
+end
+
+-- the node stuff
+
+local result = { }
+local r = 0
+local f = nil
+local nofsheets = 0
+local nofobjects = 0
+local last = 0
+local filesdone = 0
+local enabled = false
+local compact = true
+
+local function writeanchor()
+ local size = f:seek("end")
+ f:write("!" .. (size-last) .. "\n")
+ last = size
+end
+
+local function writefiles()
+ local total = #stnums
+ if filesdone < total then
+ for i=filesdone+1,total do
+ f:write("Input:"..i..":"..stnums[i].."\n")
+ end
+ filesdone = total
+ end
+end
+
+local function flushpreamble()
+ local jobname = tex.jobname
+ stnums[0] = jobname
+ f = io.open(file.replacesuffix(jobname,"syncctx"),"w")
+ f:write("SyncTeX Version:1\n")
+ f:write("Input:0:"..jobname.."\n")
+ writefiles()
+ f:write("Output:pdf\n")
+ f:write("Magnification:1000\n")
+ f:write("Unit:1\n")
+ f:write("X Offset:0\n")
+ f:write("Y Offset:0\n")
+ f:write("Content:\n")
+ flushpreamble = writefiles
+end
+
+local function flushpostamble()
+ writeanchor()
+ f:write("Postamble:\n")
+ f:write("Count:"..nofobjects.."\n")
+ writeanchor()
+ f:write("Post scriptum:\n")
+ f:close()
+ enabled = false
+end
+
+local pageheight = 0 -- todo: set before we do this!
+
+local function b_hlist(head,current,t,l,w,h,d)
+ return insert_before(head,current,new_latelua(function()
+ local x, y = getpos()
+ r = r + 1
+ result[r] = f_hlist(t,l,x,tex.pageheight-y,w,h,d)
+ nofobjects = nofobjects + 1
+ end))
+end
+
+local function b_vlist(head,current,t,l,w,h,d)
+ return insert_before(head,current,new_latelua(function()
+ local x, y = getpos()
+ r = r + 1
+ result[r] = f_vlist(t,l,x,tex.pageheight-y,w,h,d)
+ nofobjects = nofobjects + 1
+ end))
+end
+
+local function e_hlist(head,current)
+ return insert_after(head,current,new_latelua(function()
+ r = r + 1
+ result[r] = s_hlist
+ nofobjects = nofobjects + 1
+ end))
+end
+
+local function e_vlist(head,current)
+ return insert_after(head,current,new_latelua(function()
+ r = r + 1
+ result[r] = s_vlist
+ nofobjects = nofobjects + 1
+ end))
+end
+
+local function x_hlist(head,current,t,l,w,h,d)
+ return insert_before(head,current,new_latelua(function()
+ local x, y = getpos()
+ r = r + 1
+ result[r] = f_hvoid(t,l,x,tex.pageheight-y,w,h,d)
+ nofobjects = nofobjects + 1
+ end))
+end
+
+local function x_vlist(head,current,t,l,w,h,d)
+ return insert_before(head,current,new_latelua(function()
+ local x, y = getpos()
+ r = r + 1
+ result[r] = f_vvoid(t,l,x,tex.pageheight-y,w,h,d)
+ nofobjects = nofobjects + 1
+ end))
+end
+
+-- local function x_glyph(head,current,t,l)
+-- return insert_before(head,current,new_latelua(function()
+-- local x, y = getpos()
+-- r = r + 1
+-- result[r] = f_glyph(t,l,x,tex.pageheight-y)
+-- nofobjects = nofobjects + 1
+-- end))
+-- end
+
+-- local function x_glue(head,current,t,l)
+-- return insert_before(head,current,new_latelua(function()
+-- local x, y = getpos()
+-- r = r + 1
+-- result[r] = f_glue(t,l,x,tex.pageheight-y)
+-- nofobjects = nofobjects + 1
+-- end))
+-- end
+
+-- local function x_kern(head,current,t,l,k)
+-- return insert_before(head,current,new_latelua(function()
+-- local x, y = getpos()
+-- r = r + 1
+-- result[r] = f_kern(t,l,x,tex.pageheight-y,k)
+-- nofobjects = nofobjects + 1
+-- end))
+-- end
+
+-- local function x_rule(head,current,t,l,w,h,d)
+-- return insert_before(head,current,new_latelua(function()
+-- local x, y = getpos()
+-- r = r + 1
+-- result[r] = f_rule(t,l,x,tex.pageheight-y,w,h,d)
+-- nofobjects = nofobjects + 1
+-- end))
+-- end
+
+local function collect(head,t,l)
+ local current = head
+ while current do
+ local id = getid(current)
+ if id == glyph_code then
+ local first = current
+ local last = current
+ while true do
+ id = getid(current)
+ if id == glyph_code or id == disc_code then
+ last = current
+ elseif id == kern_code and (getsubtype(current) == fontkern_code or getattr(current,a_fontkern)) then
+ last = current
+ else
+ if id == glue_code then
+ -- we could go on when we're in the same t/l run
+ local tc, lc = get_synctex_fields(current)
+ if tc > 0 then
+ t, l = tc, lc
+ end
+ id = nil -- so no test later on
+ end
+ local w, h, d = getdimensions(first,getnext(last))
+ -- local w, h, d = getrangedimensions(head,first,getnext(last))
+ if trace then
+ -- color is already handled so no colors
+ head = insert_before(head,first,new_hlist(new_rule(w,32768,32768)))
+ end
+if h < 655360 then
+ h = 655360
+end
+if d < 327680 then
+ d = 327680
+end
+ head = x_hlist(head,first,t,l,w,h,d)
+ break
+ end
+ current = getnext(current)
+ if not current then
+ local w, h, d = getdimensions(first,getnext(last))
+ -- local w, h, d = getrangedimensions(head,first,getnext(last))
+ if trace then
+ -- color is already handled so no colors
+ head = insert_before(head,first,new_hlist(new_rule(w,32768,32768)))
+ end
+if h < 655360 then
+ h = 655360
+end
+if d < 327680 then
+ d = 327680
+end
+ head = x_hlist(head,first,t,l,w,h,d)
+ return head
+ end
+ end
+ end
+ if id == hlist_code then
+ local list = getlist(current)
+ local tc, lc = get_synctex_fields(current)
+ if tc > 0 then
+ t, l = tc, lc
+ end
+ if compact then
+ if list then
+ local l = collect(list,t,l)
+ if l ~= list then
+ setlist(current,l)
+ end
+ end
+ else
+ local w, h, d = getwhd(current)
+ if w == 0 or (h == 0 and d == 0) then
+ if list then
+ local l = collect(list,t,l)
+ if l ~= list then
+ setlist(current,l)
+ end
+ end
+ elseif list then
+ -- head = b_hlist(head,current,t,l,w,h,d)
+ head = b_hlist(head,current,0,0,w,h,d)
+ local l = collect(list,t,l)
+ if l ~= list then
+ setlist(current,l)
+ end
+ head, current = e_hlist(head,current)
+ else
+ -- head = x_hlist(head,current,t,l,w,h,d)
+ head = x_hlist(head,current,0,0,w,h,d)
+ end
+ end
+ elseif id == vlist_code then
+ local list = getlist(current)
+ local tc, lc = get_synctex_fields(current)
+ if tc > 0 then
+ t, l = tc, lc
+ end
+ if compact then
+ if list then
+ local l = collect(list,t,l)
+ if l ~= list then
+ setlist(current,l)
+ end
+ end
+ else
+ local w, h, d = getwhd(current)
+ if w == 0 or (h == 0 and d == 0) then
+ if list then
+ local l = collect(list,t,l)
+ if l ~= list then
+ setlist(current,l)
+ end
+ end
+ elseif list then
+ -- head = b_vlist(head,current,t,l,w,h,d)
+ head = b_vlist(head,current,0,0,w,h,d)
+ local l = collect(list,t,l)
+ if l ~= list then
+ setlist(current,l)
+ end
+ head, current = e_vlist(head,current)
+ else
+ -- head = x_vlist(head,current,t,l,w,h,d)
+ head = x_vlist(head,current,0,0,w,h,d)
+ end
+ end
+ elseif id == glue_code then
+ local tc, lc = get_synctex_fields(current)
+ if tc > 0 then
+ t, l = tc, lc
+ end
+ -- head = x_glue(head,current,t,l)
+ -- elseif id == kern_code then
+ -- local tc, lc = get_synctex_fields(current)
+ -- if tc > 0 then
+ -- t, l = tc, lc
+ -- end
+ -- -- local k = getwidth(current)
+ -- -- if k ~= 0 then
+ -- -- head = x_kern(head,current,t,l,k)
+ -- -- end
+ -- elseif id == rule_code then
+ -- local tc, lc = get_synctex_fields(current)
+ -- if tc > 0 then
+ -- t, l = tc, lc
+ -- end
+ -- -- if t > 0 and l > 0 then
+ -- -- local w, h, d = getwhd(current)
+ -- -- head = x_rule(head,current,t,l,w,h,d)
+ -- -- end
+ end
+ current = getnext(current)
+ end
+ return head
+end
+
+-- range of same numbers
+
+function synctex.collect(head)
+ if enabled then
+ result, r = { }, 0
+ head = collect(tonut(head),0,0)
+ return tonode(head), true
+ else
+ return head, false
+ end
+end
+
+-- also no solution for bad first file resolving in sumatra
+
+function synctex.flush()
+ if enabled then
+ nofsheets = nofsheets + 1 -- could be realpageno
+ flushpreamble()
+ writeanchor()
+ f:write("{"..nofsheets.."\n")
+ if compact then
+ f:write(f_vlist(0,0,0,0,tex.pagewidth,tex.pageheight,0))
+ f:write("\n")
+ end
+ f:write(concat(result,"\n"))
+ if compact then
+ f:write("\n")
+ f:write(s_vlist)
+ end
+ f:write("\n")
+ writeanchor()
+ f:write("}"..nofsheets.."\n")
+ nofobjects = nofobjects + 2
+ result, r = { }, 0
+ end
+end
+
+function synctex.enable()
+ if not enabled and node.set_synctex_mode then
+ enabled = true
+ node.set_synctex_mode(1)
+ tex.normalsynctex = 0
+ nodes.tasks.appendaction("shipouts", "after", "nodes.synctex.collect")
+ end
+end
+
+function synctex.finish()
+ if enabled then
+ flushpostamble()
+ end
+end
+
+-- not the best place
+
+luatex.registerstopactions(synctex.finish)
+
+nodes.tasks.appendaction("shipouts", "after", "luatex.synctex.collect")
+
+-- moved here
+
+local report_system = logs.reporter("system")
+local synctex = false
+
+directives.register("system.synctex", function(v)
+ if v == "context" then
+ luatex.synctex.enable()
+ setcount("normalsynctex",0)
+ synctex = true
+ else
+ v = tonumber(v) or (toboolean(v,true) and 1) or (v == "zipped" and 1) or (v == "unzipped" and -1) or 0
+ setcount("normalsynctex",v)
+ synctex = v ~= 0
+ end
+ if synctex then
+ report_system("synctex functionality is enabled (%s), expect runtime overhead!",tostring(v))
+ else
+ report_system("synctex functionality is disabled!")
+ end
+end)
+
+statistics.register("synctex tracing",function()
+ if synctex or getcount("normalsynctex") ~= 0 then
+ return "synctex has been enabled (extra log file generated)"
+ end
+end)
diff --git a/tex/context/base/mkiv/node-tra.lua b/tex/context/base/mkiv/node-tra.lua
index d184620ef..8c79e0ab8 100644
--- a/tex/context/base/mkiv/node-tra.lua
+++ b/tex/context/base/mkiv/node-tra.lua
@@ -47,10 +47,14 @@ local getsubtype = nuts.getsubtype
local getlist = nuts.getlist
local getdisc = nuts.getdisc
local setattr = nuts.setattr
+local getglue = nuts.getglue
local isglyph = nuts.isglyph
+local getcomponents = nuts.getcomponents
+local getdir = nuts.getdir
+local getwidth = nuts.getwidth
local flush_list = nuts.flush_list
-local count_nodes = nuts.count
+local count_nodes = nuts.countall
local used_nodes = nuts.usedlist
local traverse_by_id = nuts.traverse_id
@@ -75,7 +79,6 @@ 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 dimenfactors = number.dimenfactors
local fillorders = nodes.fillcodes
@@ -122,6 +125,7 @@ function nodes.handlers.checkforleaks(sparse)
end
local f_sequence = formatters["U+%04X:%s"]
+local f_subrange = formatters["[[ %s ][ %s ][ %s ]]"]
local function tosequence(start,stop,compact)
if start then
@@ -132,7 +136,7 @@ local function tosequence(start,stop,compact)
local c, id = isglyph(start)
if c then
if compact then
- local components = getfield(start,"components")
+ local components = getcomponents(start)
if components then
t[#t+1] = tosequence(components,nil,compact)
else
@@ -141,6 +145,9 @@ local function tosequence(start,stop,compact)
else
t[#t+1] = f_sequence(c,utfchar(c))
end
+ elseif id == disc_code then
+ local pre, post, replace = getdisc(start)
+ t[#t+1] = f_subrange(pre and tosequence(pre),post and tosequence(post),replace and tosequence(replace))
elseif id == rule_code then
if compact then
t[#t+1] = "|"
@@ -148,7 +155,7 @@ local function tosequence(start,stop,compact)
t[#t+1] = nodecodes[id]
end
elseif id == dir_code or id == localpar_code then
- t[#t+1] = "[" .. getfield(start,"dir") .. "]"
+ t[#t+1] = "[" .. getdir(start) .. "]"
elseif compact then
t[#t+1] = "[]"
else
@@ -280,11 +287,11 @@ local function showsimplelist(h,depth,n)
end
-- \startluacode
--- callback.register('buildpage_filter',function() nodes.show_simple_list(tex.lists.contrib_head) end)
+-- callbacks.register('buildpage_filter',function() nodes.show_simple_list(tex.lists.contrib_head) end)
-- \stopluacode
-- \vbox{b\footnote{n}a}
-- \startluacode
--- callback.register('buildpage_filter',nil)
+-- callbacks.register('buildpage_filter',nil)
-- \stopluacode
nodes.showsimplelist = function(h,depth) showsimplelist(h,depth,0) end
@@ -311,7 +318,7 @@ local function listtoutf(h,joiner,textonly,last,nodisc)
end
elseif textonly then
if id == glue_code then
- if getfield(h,"width") > 0 then
+ if getwidth(h) > 0 then
w[#w+1] = " "
end
elseif id == hlist_code or id == vlist_code then
@@ -376,7 +383,7 @@ local function nodetodimen(n)
n = tonut(n)
local id = getid(n)
if id == kern_code then
- local width = getfield(n,"width")
+ local width = getwidth(n)
if width == 0 then
return "0pt"
else
@@ -385,11 +392,10 @@ local function nodetodimen(n)
elseif id ~= glue_code then
return "0pt"
end
- local stretch_order = getfield(n,"stretch_order")
- local shrink_order = getfield(n,"shrink_order")
- local stretch = getfield(n,"stretch") / 65536
- local shrink = getfield(n,"shrink") / 65536
- local width = getfield(n,"width") / 65536
+ local width, stretch, shrink, stretch_order, shrink_order = getglue(n)
+ stretch = stretch / 65536
+ shrink = shrink / 65536
+ width = width / 65536
if stretch_order ~= 0 then
if shrink_order ~= 0 then
return f_f_f(width,stretch,fillorders[stretch_order],shrink,fillorders[shrink_order])
@@ -431,12 +437,12 @@ dimenfactors[""] = dimenfactors.pt
local function numbertodimen(d,unit,fmt)
if not d or d == 0 then
- if not unit or unit == "pt" then
- return "0pt"
- elseif fmt then
- return formatters[fmt](0,unit)
- else
+ if fmt then
+ return formatters[fmt](0,unit or "pt")
+ elseif unit then
return 0 .. unit
+ else
+ return "0pt"
end
elseif fmt then
if not unit then
diff --git a/tex/context/base/mkiv/node-tsk.lua b/tex/context/base/mkiv/node-tsk.lua
index 56a4b18ef..c33f0e9f4 100644
--- a/tex/context/base/mkiv/node-tsk.lua
+++ b/tex/context/base/mkiv/node-tsk.lua
@@ -30,6 +30,20 @@ local sequencers = utilities.sequencers
local compile = sequencers.compile
local nodeprocessor = sequencers.nodeprocessor
+local newsequencer = sequencers.new
+
+local appendgroup = sequencers.appendgroup
+----- prependgroup = sequencers.prependgroup
+----- replacegroup = sequencers.replacegroup
+local enablegroup = sequencers.enablegroup
+local disablegroup = sequencers.disablegroup
+
+local appendaction = sequencers.appendaction
+local prependaction = sequencers.prependaction
+local replaceaction = sequencers.replaceaction
+local enableaction = sequencers.enableaction
+local disableaction = sequencers.disableaction
+
local frozengroups = "no"
function tasks.freeze(kind)
@@ -41,7 +55,7 @@ function tasks.new(specification) -- was: name,arguments,list
local arguments = specification.arguments or 0
local sequence = specification.sequence
if name and sequence then
- local tasklist = sequencers.new {
+ local tasklist = newsequencer {
-- we can move more to the sequencer now .. todo
}
tasksdata[name] = {
@@ -53,7 +67,7 @@ function tasks.new(specification) -- was: name,arguments,list
processor = specification.processor or nodeprocessor
}
for l=1,#sequence do
- sequencers.appendgroup(tasklist,sequence[l])
+ appendgroup(tasklist,sequence[l])
end
end
end
@@ -104,7 +118,7 @@ end
function tasks.enableaction(name,action)
local data = valid(name)
if data then
- sequencers.enableaction(data.list,action)
+ enableaction(data.list,action)
data.runner = false
end
end
@@ -112,7 +126,7 @@ end
function tasks.disableaction(name,action)
local data = valid(name)
if data then
- sequencers.disableaction(data.list,action)
+ disableaction(data.list,action)
data.runner = false
end
end
@@ -120,23 +134,30 @@ end
function tasks.replaceaction(name,group,oldaction,newaction)
local data = valid(name)
if data then
- sequencers.replaceaction(data.list,group,oldaction,newaction)
+ replaceaction(data.list,group,oldaction,newaction)
data.runner = false
end
end
-function tasks.setaction(name,action,value)
- if value then
- tasks.enableaction(name,action)
- else
- tasks.disableaction(name,action)
+do
+
+ local enableaction = tasks.enableaction
+ local disableaction = tasks.disableaction
+
+ function tasks.setaction(name,action,value)
+ if value then
+ enableaction(name,action)
+ else
+ disableaction(name,action)
+ end
end
+
end
function tasks.enablegroup(name,group)
local data = validgroup(name,"enable group")
if data then
- sequencers.enablegroup(data.list,group)
+ enablegroup(data.list,group)
data.runner = false
end
end
@@ -144,7 +165,7 @@ end
function tasks.disablegroup(name,group)
local data = validgroup(name,"disable group")
if data then
- sequencers.disablegroup(data.list,group)
+ disablegroup(data.list,group)
data.runner = false
end
end
@@ -152,7 +173,7 @@ end
function tasks.appendaction(name,group,action,where,kind)
local data = validgroup(name,"append action")
if data then
- sequencers.appendaction(data.list,group,action,where,kind)
+ appendaction(data.list,group,action,where,kind)
data.runner = false
end
end
@@ -160,7 +181,7 @@ end
function tasks.prependaction(name,group,action,where,kind)
local data = validgroup(name,"prepend action")
if data then
- sequencers.prependaction(data.list,group,action,where,kind)
+ prependaction(data.list,group,action,where,kind)
data.runner = false
end
end
@@ -168,7 +189,7 @@ end
function tasks.removeaction(name,group,action)
local data = validgroup(name,"remove action")
if data then
- sequencers.removeaction(data.list,group,action)
+ removeaction(data.list,group,action)
data.runner = false
end
end
@@ -366,6 +387,7 @@ tasks.new {
tasks.new {
name = "shipouts",
arguments = 0,
+ -- nostate = true, -- maybe but only for main ones so little gain
processor = nodeprocessor,
sequence = {
"before", -- for users
@@ -418,3 +440,15 @@ tasks.new {
-- "after", -- for users
-- }
-- }
+
+tasks.new {
+ name = "contributers",
+ arguments = 2, -- [head] where parent
+ processor = nodeprocessor,
+ sequence = {
+ "before", -- for users
+ "normalizers",
+ "after", -- for users
+ }
+}
+
diff --git a/tex/context/base/mkiv/node-tst.lua b/tex/context/base/mkiv/node-tst.lua
index 4832c048c..1109f28a3 100644
--- a/tex/context/base/mkiv/node-tst.lua
+++ b/tex/context/base/mkiv/node-tst.lua
@@ -32,6 +32,9 @@ local getprev = nuts.getprev
local getid = nuts.getid
local getchar = nuts.getchar
local getsubtype = nuts.getsubtype
+local getkern = nuts.getkern
+local getpenalty = nuts.getpenalty
+local getwidth = nuts.getwidth
local find_node_tail = nuts.tail
@@ -39,11 +42,11 @@ 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(n,"width") or 0
+ return getsubtype(n) == leftskip_code and getwidth(n) or 0
elseif id == whatsit_code then
n = getnext(n)
elseif id == hlist_code then
- return getfield(n,"width")
+ return getwidth(n)
else
break
end
@@ -57,7 +60,7 @@ function nuts.rightmarginwidth(n)
while n do
local id = getid(n)
if id == glue_code then
- return getsubtype(n) == rightskip_code and getfield(n,"width") or 0
+ return getsubtype(n) == rightskip_code and getwidth(n) or 0
elseif id == whatsit_code then
n = getprev(n)
else
@@ -72,10 +75,9 @@ function nuts.somespace(n,all)
if n then
local id = getid(n)
if id == glue_code then
- 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
+ return (all or (getwidth(n) ~= 0)) and glue_code -- temp: or 0
elseif id == kern_code then
- return (all or (getfield(n,"kern") ~= 0)) and kern
+ return (all or (getkern(n) ~= 0)) and kern
elseif id == glyph_code then
local category = chardata[getchar(n)].category
-- maybe more category checks are needed
@@ -90,7 +92,7 @@ function nuts.somepenalty(n,value)
local id = getid(n)
if id == penalty_code then
if value then
- return getfield(n,"penalty") == value
+ return getpenalty(n) == value
else
return true
end
diff --git a/tex/context/base/mkiv/node-typ.lua b/tex/context/base/mkiv/node-typ.lua
index 2d84e07a3..dea48cda8 100644
--- a/tex/context/base/mkiv/node-typ.lua
+++ b/tex/context/base/mkiv/node-typ.lua
@@ -18,14 +18,15 @@ local tonut = nuts.tonut
local setfield = nuts.setfield
local setlink = nuts.setlink
local setchar = nuts.setchar
+local setattrlist = nuts.setattrlist
local getfield = nuts.getfield
local getfont = nuts.getfont
+local getattrlist = nuts.getattrlist
local hpack_node_list = nuts.hpack
local vpack_node_list = nuts.vpack
local full_hpack_list = nuts.fullhpack
-local copy_node = nuts.copy
local nodepool = nuts.pool
local new_glyph = nodepool.glyph
@@ -33,20 +34,26 @@ local new_glue = nodepool.glue
local utfvalues = utf.values
-local currentfont = font.current
-local currentattr = node.current_attr
+local currentfont = font.current -- mabe nicer is fonts .current
+local currentattr = node.current_attr -- mabe nicer is attributes.current
local fontparameters = fonts.hashes.parameters
-local function tonodes(str,fontid,spacing,templateglyph) -- quick and dirty
+-- when attrid == true then take from glyph or current else use the given value
+
+local function tonodes(str,fontid,spacing,templateglyph,attrid) -- 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
+ if attrid == true then
+ if templateglyph then
+ attrid = false -- we copy with the glyph
+ else
+ attrid = currentattr()
end
end
local fp = fontparameters[fontid]
@@ -75,10 +82,14 @@ local function tonodes(str,fontid,spacing,templateglyph) -- quick and dirty
if not next then
-- nothing
elseif not head then
--- setfield(next,"attr",attrid)
+ if attrid then
+ setattrlist(next,attrid)
+ end
head = next
else
--- setfield(next,"attr",attrid)
+ if attrid then
+ setattrlist(next,attrid)
+ end
setlink(prev,next)
end
prev = next
diff --git a/tex/context/base/mkiv/pack-box.mkiv b/tex/context/base/mkiv/pack-box.mkiv
index fad7d6e18..8279fcd71 100644
--- a/tex/context/base/mkiv/pack-box.mkiv
+++ b/tex/context/base/mkiv/pack-box.mkiv
@@ -24,10 +24,15 @@
%D which in itself is ok, but can lead to loops due to rounding errors (happened
%D in demo-obv).
-\definelayer[\v!text-2][\c!position=\v!yes,\c!region=,\c!width=\d_overlay_width,\c!height=\d_overlay_height]
-\definelayer[\v!text-1][\c!position=\v!yes,\c!region=,\c!width=\d_overlay_width,\c!height=\d_overlay_height]
-\definelayer[\v!text+1][\c!position=\v!yes,\c!region=,\c!width=\d_overlay_width,\c!height=\d_overlay_height]
-\definelayer[\v!text+2][\c!position=\v!yes,\c!region=,\c!width=\d_overlay_width,\c!height=\d_overlay_height]
+% \definelayer[\v!text-2][\c!position=\v!yes,\c!region=,\c!width=\d_overlay_width,\c!height=\d_overlay_height]
+% \definelayer[\v!text-1][\c!position=\v!yes,\c!region=,\c!width=\d_overlay_width,\c!height=\d_overlay_height]
+% \definelayer[\v!text+1][\c!position=\v!yes,\c!region=,\c!width=\d_overlay_width,\c!height=\d_overlay_height]
+% \definelayer[\v!text+2][\c!position=\v!yes,\c!region=,\c!width=\d_overlay_width,\c!height=\d_overlay_height]
+
+\definelayer[\v!text-2][\c!position=\v!yes,\c!region=,\c!width=\textwidth,\c!height=\textheight]
+\definelayer[\v!text-1][\c!position=\v!yes,\c!region=,\c!width=\textwidth,\c!height=\textheight]
+\definelayer[\v!text+1][\c!position=\v!yes,\c!region=,\c!width=\textwidth,\c!height=\textheight]
+\definelayer[\v!text+2][\c!position=\v!yes,\c!region=,\c!width=\textwidth,\c!height=\textheight]
\unexpanded\def\internaltextoverlay#1% will become more generic and installable
{\startoverlay % i.e. probably an overlay by itself
@@ -42,6 +47,10 @@
\installcorenamespace {anchor}
+% produces a box too
+%
+% \anchor[text-1][preset=lefttop][framed settings]{HELLO WORLD}
+
\unexpanded\def\defineanchor
{\doquadrupleempty\pack_anchors_define}
@@ -64,14 +73,11 @@
{\begingroup
\edef\currentanchor{#1}%
\ifcsname\??anchor\currentanchor\endcsname
- \expandafter\pack_anchor_predefined
+ \expandafter\lastnamedcs
\else
\expandafter\pack_anchor_notdefined
\fi}
-\def\pack_anchor_predefined
- {\csname\??anchor\currentanchor\endcsname}
-
\def\pack_anchor_notdefined
{\dodoubleempty\pack_anchor_notdefined_indeed}
@@ -93,33 +99,72 @@
\newdimen\d_pack_anchors_height
\newdimen\d_pack_anchors_depth
-\definelayer[anchor] % \defineoverlay[anchor][\ruledhbox{\flushlayer[anchor]}]
+% \definelayer[anchor]
+
+\newcount\c_pack_anchors_n
+\newtoks \t_pack_anchors_flush
+
+\unexpanded\def\pack_anchors_register#1#2%
+ {\global\advance\c_pack_anchors_n\plusone
+ \pagereference[\v!layer:\v!anchor:\number\c_pack_anchors_n]%
+ \putboxincache\v!anchor{\number\c_pack_anchors_n}\b_pack_anchors
+ \doglobal\appendetoks
+ \pack_anchors_flush{\number\c_pack_anchors_n}{#1}{#2}%
+ \to \t_pack_anchors_flush
+ \glet\pack_anchors_flush_all\pack_anchors_flush_all_indeed}
+
+\unexpanded\def\pack_anchors_flush#1#2#3%
+ {\doifelseboxincache\v!anchor{#1}
+ {\doifelsereferencefound{\v!layer:\v!anchor:#1}
+ {\ifnum\currentreferencerealpage=\realpageno\relax
+ \setlayer[#2][#3,\c!position=\v!no]{\directboxfromcache\v!anchor{#1}}%
+ \else
+ \donetrue
+ \fi
+ }\donetrue}%
+ \donetrue}%
+
+\unexpanded\def\pack_anchors_flush_all_indeed
+ {\donefalse
+ \the\t_pack_anchors_flush
+ \ifdone\else
+ \global\t_pack_anchors_flush\emptytoks
+ \glet\pack_anchors_flush_all\relax
+ \fi}
+
+\let\pack_anchors_flush_all\relax
+
+\appendtoks
+ \pack_anchors_flush_all
+\to \everybeforepagebody
\def\pack_anchors_process_finish#1#2#3% brrr: we need to apply offset only once .. a bit messy
{\checkpositionoverlays
- % for the moment we ignore the depth
\setbox\b_pack_anchors\box\nextbox
- \d_pack_anchors_width \wd\b_pack_anchors
- \d_pack_anchors_height\ht\b_pack_anchors
- \d_pack_anchors_depth \dp\b_pack_anchors
- \setbox\scratchbox\emptyhbox
- \wd\scratchbox\d_pack_anchors_width
- \ht\scratchbox\d_pack_anchors_height
- \dp\scratchbox\d_pack_anchors_depth
- \setlayer
- [anchor]
- [\c!width=\d_pack_anchors_width,
- \c!height=\d_pack_anchors_height,
- \c!offset=\zeropoint,
- #2,#3]
- {\setlayer[#1]{\box\b_pack_anchors}}% % #1 uses ovelaywidth/height
- \framed % could be a predefined framed
- [\c!background=anchor,
- \c!offset=\v!overlay,
- \c!frame=\v!off,
- #3]
- {\box\scratchbox}%
- \endgroup}
+ \framed % could be a predefined framed but used seldom
+ [\c!offset=\v!overlay,\c!frame=\v!off,#3]
+ {\pack_anchors_register{#1}{#2}%
+ \novrule % hm, not needed as we frame the size (but kind of default)
+ \s!width \wd\b_pack_anchors
+ \s!height\ht\b_pack_anchors
+ \s!depth \dp\b_pack_anchors}%
+ \endgroup}
+
+% \setlayeranchored[text-1][preset=lefttop]{HELLO WORLD} produces a simple (empty) hbox
+% synchronizes per page
+
+\unexpanded\def\setlayeranchored
+ {\begingroup
+ \dodoubleempty\pack_anchors_set_finish}
+
+\def\pack_anchors_set_finish[#1][#2]%
+ {\dowithnextbox
+ {\iffirstargument
+ \checkpositionoverlays
+ \setbox\b_pack_anchors\box\nextbox
+ \dontleavehmode\hpack{\pack_anchors_register{#1}{#2}}%
+ \fi
+ \endgroup}\hbox}
% collectors
@@ -147,7 +192,6 @@
\unexpanded\def\resetcollector[#1]%
{\ifcsname\??collectorbox#1\endcsname
- %\global\setbox\csname\??collectorbox#1\endcsname\emptybox
\global\setbox\lastnamedcs\emptybox
\fi}
@@ -159,7 +203,6 @@
{\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\lastnamedcs
\else
\setfalse\c_pack_boxes_collector_valid_box
@@ -573,7 +616,7 @@
\ifconditional\c_pack_boxes_t
\paperheight -\MPy\currentbgposition+\MPy\currentpageposition % not checked
\else\ifconditional\c_pack_boxes_b
- \scratchheight+\MPy\currentbgposition-\MPy\currentpageposition % not checked
+ \scratchheight+\MPy\currentbgposition-\MPy\currentpageposition + \MPh\currentbgposition % not checked (\MPh added)
\else
\scratchheight
\fi\fi
diff --git a/tex/context/base/mkiv/pack-com.mkiv b/tex/context/base/mkiv/pack-com.mkiv
index c9c3bab4b..8abee1daf 100644
--- a/tex/context/base/mkiv/pack-com.mkiv
+++ b/tex/context/base/mkiv/pack-com.mkiv
@@ -487,7 +487,8 @@
\let\stopfloatcombination\relax
\def\pack_combinations_start_float[#1][#2]%
- {\vbox\bgroup
+ {\ifinsidefloat\else\dontleavehmode\fi % tricky, floatcombinations fail to align well otherwise
+ \vbox\bgroup
%\insidecolumnstrue % trick, forces no centering, todo: proper switch/feature
\postcenterfloatmethod\zerocount
\forcelocalfloats
@@ -496,10 +497,10 @@
\def\pack_combinations_stop_float#1%
{\scratchtoks\emptytoks
\dorecurse\noflocalfloats
- {\appendetoks{\noexpand\getlocalfloat{\recurselevel}}{}\to\scratchtoks}% brrr
+ {\appendetoks{\getlocalfloat{\recurselevel}}{}\to\scratchtoks}% brrr
\expanded{\startcombination[#1]\the\scratchtoks}\stopcombination
\resetlocalfloats
- \egroup}
+ \egroup}
%D \macros
%D {definepairedbox, setuppairedbox, placepairedbox}
diff --git a/tex/context/base/mkiv/pack-lyr.mkiv b/tex/context/base/mkiv/pack-lyr.mkiv
index 61ed1e64b..8661fe57a 100644
--- a/tex/context/base/mkiv/pack-lyr.mkiv
+++ b/tex/context/base/mkiv/pack-lyr.mkiv
@@ -217,6 +217,7 @@
\def\pack_layers_set[#1][#2][#3]% #4 == box do \fi is ok
{\bgroup
+ \checkpositionoverlays % otherwise funny regions
\edef\currentlayer{#1}%
\edef\p_pack_layers_state{\layerparameter\c!state}%
\ifx\p_pack_layers_state\v!stop
@@ -266,26 +267,22 @@
\fi
\egroup}
-% todo left/right
-
+% todo: left/right
% todo: get position data in one go
\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}%
\edef\m_pack_layers_page {\MPp\m_pack_layers_anchor}%
- \edef\m_pack_layers_region{\MPr\m_pack_layers_anchor}%
+ %edef\m_pack_layers_region{\MPr\m_pack_layers_anchor}% wrong one
+ \edef\m_pack_layers_region{\layerparameter\c!region}%
\d_pack_layers_x_position \dimexpr-\MPx\m_pack_layers_region+\MPx\m_pack_layers_anchor\relax
\d_pack_layers_y_position \dimexpr \MPy\m_pack_layers_region-\MPy\m_pack_layers_anchor+\MPh\m_pack_layers_region\relax
\xdef\lastlayerxpos{\the\d_pack_layers_x_position}%
\xdef\lastlayerypos{\the\d_pack_layers_y_position}%
- % \writestatus{region}{\m_pack_layers_region -> (\MPx\m_pack_layers_region,\MPy\m_pack_layers_region)}%
- % \writestatus{self} {\m_pack_layers_anchor -> (\MPx\m_pack_layers_anchor,\MPy\m_pack_layers_anchor)}%
- % \writestatus{delta} {(\lastlayerxpos,\lastlayerypos)}%
- % \begingroup
- % \edef\currentlayer{\currentlayer\m_pack_layers_page}%
- % \global\letlayerparameter\c!position\v!yes
- % \endgroup
+ % \writestatus{layering}{region: \m_pack_layers_region=>\MPxywhd\m_pack_layers_region}%
+ % \writestatus {}{anchor: \m_pack_layers_anchor=>\MPxywhd\m_pack_layers_anchor}%
+ % \writestatus {}{offset: \c!dx,\c!dy =>\lastlayerxpos,\lastlayerypos}%
\global\letlayerparameter\c!state\v!start % needed ?
\setbox\b_layers\vpack to \d_pack_layers_y_size
{\hpack to \d_pack_layers_x_size
@@ -294,6 +291,8 @@
\def\pack_layers_set_last_position_nop
{\setbox\b_layers\emptybox
+ \d_pack_layers_x_position\p_pack_layers_sx\dimexpr\p_pack_layers_x\relax
+ \d_pack_layers_y_position\p_pack_layers_sy\dimexpr\p_pack_layers_y\relax
\globallet\lastlayerxpos\!!zeropoint
\globallet\lastlayerypos\!!zeropoint
\doifinset\v!bottom\p_pack_layers_corner\pack_layers_set_bottom_positions
@@ -359,8 +358,6 @@
\d_pack_layers_y_offset\p_pack_layers_sy\dimexpr
\ifx\p_pack_layers_voffset\v!max\d_pack_layers_y_size\else\p_pack_layers_voffset\fi+\p_pack_layers_offset+\p_pack_layers_dy
\relax
- \d_pack_layers_x_position\p_pack_layers_sx\dimexpr\p_pack_layers_x\relax
- \d_pack_layers_y_position\p_pack_layers_sy\dimexpr\p_pack_layers_y\relax
\ifx\p_pack_layers_position\v!yes
\pack_layers_set_last_position_yes
\else
@@ -436,6 +433,8 @@
\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
+ % or maybe instead of the \vskip
+ % \raise-\dimexpr\d_pack_layers_y_position+\d_pack_layers_y_offset\relax
\box\nextbox
\ifvoid\layerpagebox
% already flushed
@@ -603,7 +602,7 @@
{\setlayoutcomponentattribute{\v!layer:#2}}%
\resetlayoutcomponentattribute
% we have conflicting demands: some mechanisms want ll anchoring .. I need to figure this out
- % an dmaybe we will have 'origin=bottom' or so
+ % and maybe we will have 'origin=bottom' or so
\setbox\nextbox
\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
@@ -611,13 +610,13 @@
{\box\nextbox
\hss}%
\pack_layers_bottom_fill}%
- %
% \edef\currentlayer{#2}% :\the\realpageno}% local .. check \anchor
% \edef\p_pack_layers_position{\layerparameter\c!position}% local
\ifx\p_pack_layers_position\v!yes
\edef\p_pack_layers_region{\layerparameter\c!region}%
- \ifx\p_pack_layers_region\empty \else
- \anch_mark_tagged_box\nextbox\layeranchor
+ \ifx\p_pack_layers_region\empty
+ \else
+ \anch_mark_tagged_box\nextbox\p_pack_layers_region % was \layeranchor
\fi
\fi
\box\nextbox
diff --git a/tex/context/base/mkiv/pack-obj.lua b/tex/context/base/mkiv/pack-obj.lua
index 8a1af2b70..cba0dcf8f 100644
--- a/tex/context/base/mkiv/pack-obj.lua
+++ b/tex/context/base/mkiv/pack-obj.lua
@@ -25,7 +25,6 @@ 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
diff --git a/tex/context/base/mkiv/pack-rul.lua b/tex/context/base/mkiv/pack-rul.lua
index 427a2d11d..30eda7dd2 100644
--- a/tex/context/base/mkiv/pack-rul.lua
+++ b/tex/context/base/mkiv/pack-rul.lua
@@ -11,8 +11,6 @@ if not modules then modules = { } end modules ['pack-rul'] = {
--ldx]]--
-- we need to be careful with display math as it uses shifts
--- challenge: adapt glue_set
--- setfield(h,"glue_set", getfield(h,"glue_set") * getfield(h,"width")/maxwidth -- interesting ... doesn't matter much
-- \framed[align={lohi,middle}]{$x$}
-- \framed[align={lohi,middle}]{$ $}
@@ -26,6 +24,7 @@ local hlist_code = nodes.nodecodes.hlist
local vlist_code = nodes.nodecodes.vlist
local box_code = nodes.listcodes.box
local line_code = nodes.listcodes.line
+local equation_code = nodes.listcodes.equation
local texsetdimen = tex.setdimen
local texsetcount = tex.setcount
@@ -40,18 +39,30 @@ local getnext = nuts.getnext
local getprev = nuts.getprev
local getlist = nuts.getlist
local setlist = nuts.setlist
+local getwhd = nuts.getwhd
local getid = nuts.getid
local getsubtype = nuts.getsubtype
local getbox = nuts.getbox
+local getdir = nuts.getdir
+local setshift = nuts.setshift
+local setwidth = nuts.setwidth
+local getwidth = nuts.getwidth
local hpack = nuts.hpack
local traverse_id = nuts.traverse_id
-local node_dimensions = nuts.dimensions
-local free_node = nuts.free
+local list_dimensions = nuts.dimensions
+local flush_node = nuts.flush
+
+local checkformath = false
+
+directives.register("framed.checkmath",function(v) checkformath = v end) -- experiment
+
+-- beware: dir nodes and pseudostruts can end up on lines of their own
local function doreshapeframedbox(n)
local box = getbox(n)
local noflines = 0
+ local nofnonzero = 0
local firstheight = nil
local lastdepth = nil
local lastlinelength = 0
@@ -59,28 +70,28 @@ local function doreshapeframedbox(n)
local maxwidth = 0
local totalwidth = 0
local averagewidth = 0
- local boxwidth = getfield(box,"width")
+ local boxwidth = getwidth(box)
if boxwidth ~= 0 then -- and h.subtype == vlist_code
local list = getlist(box)
if list then
local function check(n,repack)
+ local width, height, depth = getwhd(n)
if not firstheight then
- firstheight = getfield(n,"height")
+ firstheight = height
end
- lastdepth = getfield(n,"depth")
- noflines = noflines + 1
- local l = getlist(n)
+ lastdepth = depth
+ noflines = noflines + 1
+ local l = getlist(n)
if l then
if repack then
local subtype = getsubtype(n)
if subtype == box_code or subtype == line_code then
- -- used to be: hpack(copy(l)).width
- lastlinelength = node_dimensions(l,getfield(n,"dir"))
+ lastlinelength = list_dimensions(l,getdir(n))
else
- lastlinelength = getfield(n,"width")
+ lastlinelength = width
end
else
- lastlinelength = getfield(n,"width")
+ lastlinelength = width
end
if lastlinelength > maxwidth then
maxwidth = lastlinelength
@@ -88,6 +99,9 @@ local function doreshapeframedbox(n)
if lastlinelength < minwidth or minwidth == 0 then
minwidth = lastlinelength
end
+ if lastlinelength > 0 then
+ nofnonzero = nofnonzero + 1
+ end
totalwidth = totalwidth + lastlinelength
end
end
@@ -110,35 +124,34 @@ local function doreshapeframedbox(n)
if l then
local subtype = getsubtype(h)
if subtype == box_code or subtype == line_code then
- 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)
+ local p = hpack(l,maxwidth,'exactly',getdir(h)) -- multiple return value
+ 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)
+ flush_node(p)
+ elseif checkformath and subtype == equation_code then
+ -- display formulas use a shift
+ if nofnonzero == 1 then
+ setshift(h,0)
end
end
- setfield(h,"width",maxwidth)
+ setwidth(h,maxwidth)
end
end
end
-- if vdone then
-- for v in traverse_id(vlist_code,list) do
- -- local width = getfield(n,"width")
+ -- local width = getwidth(n)
-- if width > maxwidth then
- -- setfield(v,"width",maxwidth)
+ -- setwidth(v,maxwidth)
-- end
-- end
-- end
- setfield(box,"width",maxwidth)
+ setwidth(box,maxwidth)
averagewidth = noflines > 0 and totalwidth/noflines or 0
else -- e.g. empty math {$ $} or \hbox{} or ...
-setfield(box,"width",0)
+ setwidth(box,0)
end
end
end
@@ -155,15 +168,16 @@ local function doanalyzeframedbox(n)
local noflines = 0
local firstheight = nil
local lastdepth = nil
- if getfield(box,"width") ~= 0 then
+ if getwidth(box) ~= 0 then
local list = getlist(box)
if list then
local function check(n)
+ local width, height, depth = getwhd(n)
if not firstheight then
- firstheight = getfield(n,"height")
+ firstheight = height
end
- lastdepth = getfield(n,"depth")
- noflines = noflines + 1
+ lastdepth = depth
+ noflines = noflines + 1
end
for h in traverse_id(hlist_code,list) do
check(h)
@@ -182,7 +196,7 @@ implement { name = "doreshapeframedbox", actions = doreshapeframedbox, arguments
implement { name = "doanalyzeframedbox", actions = doanalyzeframedbox, arguments = "integer" }
local function maxboxwidth(box)
- local boxwidth = getfield(box,"width")
+ local boxwidth = getwidth(box)
if boxwidth == 0 then
return 0
end
@@ -201,12 +215,12 @@ local function maxboxwidth(box)
if repack then
local subtype = getsubtype(n)
if subtype == box_code or subtype == line_code then
- lastlinelength = node_dimensions(l,getfield(n,"dir"))
+ lastlinelength = list_dimensions(l,getdir(n))
else
- lastlinelength = getfield(n,"width")
+ lastlinelength = getwidth(n)
end
else
- lastlinelength = getfield(n,"width")
+ lastlinelength = getwidth(n)
end
if lastlinelength > maxwidth then
maxwidth = lastlinelength
@@ -226,6 +240,6 @@ nodes.maxboxwidth = maxboxwidth
implement {
name = "themaxboxwidth",
- actions = function(n) context("%isp",maxboxwidth(getbox(n))) end,
+ actions = function(n) context("%rsp",maxboxwidth(getbox(n))) end, -- r = rounded
arguments = "integer"
}
diff --git a/tex/context/base/mkiv/pack-rul.mkiv b/tex/context/base/mkiv/pack-rul.mkiv
index 635863302..eec7b8cb3 100644
--- a/tex/context/base/mkiv/pack-rul.mkiv
+++ b/tex/context/base/mkiv/pack-rul.mkiv
@@ -142,7 +142,7 @@
[\c!width=\v!fit,
\c!height=\v!broad,
%\c!lines=,
- \c!offset=.25ex, % \defaultframeoffset
+ \c!offset=.25\exheight, % \defaultframeoffset
\c!empty=\v!no,
\c!frame=\v!on,
%\c!topframe=,
@@ -176,7 +176,7 @@
\c!location=\v!normal,
%\c!orientation=,
\c!autowidth=\v!yes,
- %\c!setups=
+ %\c!setups=,
\c!loffset=\zeropoint,
\c!roffset=\zeropoint,
\c!toffset=\zeropoint,
@@ -607,7 +607,11 @@
{\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}
+ {\ifx\p_framed_region\v!yes
+ \anch_mark_region_box\b_framed_normal
+ \else
+ \anch_mark_tagged_box\b_framed_normal\p_framed_region
+ \fi}
\def\pack_framed_add_background
{\setbox\b_framed_normal\hbox % was vbox % see also *1*
@@ -809,12 +813,13 @@
\newconditional\c_framed_has_width
\newconditional\c_framed_has_height
\newconditional\c_framed_has_format
-\newconditional\c_framed_has_strut
\newconditional\c_framed_is_overlaid
\newconditional\c_framed_has_frame
\newconditional\c_framed_has_extra_offset
\newconditional\c_framed_text_location_none
+\newconstant \c_framed_has_strut % 0=relaxes 1=pseudostruts 2=realstruts
+
%D \macros
%D {framed, setupframed}
%D
@@ -936,7 +941,9 @@
\def\pack_framed_start_framed_nop_indeed[#1]%
{\pack_framed_initialize
\bgroup
- \setupcurrentframed[#1]% here !
+ \iffirstargument
+ \setupcurrentframed[#1]% here !
+ \fi
\pack_framed_process_indeed
\bgroup
\ignorespaces}
@@ -1030,7 +1037,7 @@
\unexpanded\def\pack_framed_process_box_indeed#1#2% component box (assumes parameters set and grouped usage)
{\setbox\b_framed_normal\box#2% could actually be \let\b_framed_normal#2
\edef\p_framed_region{\framedparameter\c!region}%
- \ifx\p_framed_region\v!yes % maybe later named
+ \ifx\p_framed_region\empty\else
\pack_framed_add_region
\fi
\edef\p_framed_rulethickness{\framedparameter\c!rulethickness}% also used in backgrounds
@@ -1226,18 +1233,18 @@
\framed_offset_alternative_unknown
\fi
% the next check could move to strutalternative
- \ifconditional\c_framed_has_strut
+ \ifcase\c_framed_has_strut % none (not even noindent)
+ \let\localbegstrut\relax
+ \let\localendstrut\relax
+ \let\localstrut \relax
+ \or % no / overlay
+ \let\localbegstrut\pseudobegstrut
+ \let\localendstrut\pseudoendstrut
+ \let\localstrut \pseudostrut
+ \else
\let\localbegstrut\begstrut
\let\localendstrut\endstrut
\let\localstrut \strut
- \else
- \let\localbegstrut\pseudobegstrut % was: \relax
- \let\localendstrut\pseudoendstrut % was: \relax
- \let\localstrut \pseudostrut % was: \relax
- %\ifconditional\c_framed_has_height\ifdim\d_framed_height<\strutht % saveguard
- % \let\localbegstrut\relax % but not that
- % \let\localstrut \relax % save after all
- %\fi\fi
\fi
\ifx\p_framed_autostrut\v!yes
\let\delayedbegstrut\relax
@@ -1390,7 +1397,7 @@
% struts (use let instead?)
\setvalue{\??framedstrutalternative\v!no}%
- {\setfalse\c_framed_has_strut}
+ {\c_framed_has_strut\plusone}
\setvalue{\??framedstrutalternative\v!global}%
{\setstrut}
@@ -1407,49 +1414,47 @@
\def\framed_strut_alternative_unknown
{\setstrut}
+\setvalue{\??framedstrutalternative\v!none}% not even pseudo struts
+ {\c_framed_has_strut\zerocount}
+
% offsets
\setvalue{\??framedoffsetalternative\v!none}%
{\setfalse\c_framed_has_offset
- \setfalse\c_framed_has_strut
+ \c_framed_has_strut\plusone
\setfalse\c_framed_is_overlaid
\d_framed_local_offset\d_framed_linewidth}
\setvalue{\??framedoffsetalternative\v!overlay}%
{% \ifx\p_framed_frame\v!no \setfalse\c_framed_has_frame \fi % test first
\setfalse\c_framed_has_offset
- \setfalse\c_framed_has_strut
- \settrue \c_framed_is_overlaid
+ \c_framed_has_strut\plusone
+ \settrue\c_framed_is_overlaid
\d_framed_local_offset\zeropoint}
% \setvalue{\??framedoffsetalternative\v!strut}%
% {\setfalse\c_framed_has_offset
-% \settrue \c_framed_has_strut
-% \settrue \c_framed_is_overlaid
+% \c_framed_has_strut\plustwo
+% \settrue\c_framed_is_overlaid
% \d_framed_local_offset\zeropoint}
\setvalue{\??framedoffsetalternative\v!default}% new per 2-6-2000
{\settrue \c_framed_has_offset
- \settrue \c_framed_has_strut
+ \c_framed_has_strut\plustwo
\setfalse\c_framed_is_overlaid
\let\localoffset\defaultframeoffset
\letframedparameter\c!offset\defaultframeoffset % brrr
\d_framed_local_offset\dimexpr\localoffset+\d_framed_linewidth\relax}
-\setvalue{\??framedoffsetalternative\s!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}
-
\def\framed_offset_alternative_unknown
{\settrue \c_framed_has_offset
- \settrue \c_framed_has_strut
+ \c_framed_has_strut\plustwo
\setfalse\c_framed_is_overlaid
\let\defaultframeoffset\localoffset
\d_framed_local_offset\dimexpr\localoffset+\d_framed_linewidth\relax}
+\letvalue{\??framedoffsetalternative\s!unknown}\framed_offset_alternative_unknown
+
% so far for alternatives
\let\pack_framed_stop_orientation\relax
@@ -1599,9 +1604,9 @@
\pack_framed_stop_orientation % moved here at 2014-05-25
\iftrialtypesetting \else
\edef\p_framed_region{\framedparameter\c!region}%
- \ifx\p_framed_region\v!yes % maybe later named
+ \ifx\p_framed_region\empty\else
\pack_framed_add_region
- \fi
+ \fi
\fi
\d_framed_applied_offset
\ifconditional\c_framed_is_overlaid
@@ -1669,16 +1674,37 @@
\newdimen\d_framed_locator_ht
\newdimen\d_framed_locator_dp
+\newdimen\d_framed_locator_lo
+\newdimen\d_framed_locator_ro
-\def\pack_framed_locater_set#1%
+\def\pack_framed_locator_set#1%
{\d_framed_locator_ht\dimexpr
#1+\d_framed_linewidth
\ifconditional\c_framed_has_offset
+\framedparameter\c!offset
\fi
+ +\framedparameter\c!toffset
\relax
\d_framed_locator_dp\dimexpr\ht\b_framed_normal-\d_framed_locator_ht\relax}
+\def\pack_framed_locator_set_lo
+ {\global\d_framed_locator_lo\dimexpr
+ \d_framed_linewidth
+ \ifconditional\c_framed_has_offset
+ +\framedparameter\c!offset
+ \fi
+ +\framedparameter\c!loffset
+ \relax}
+
+\def\pack_framed_locator_set_ro
+ {\global\d_framed_locator_ro\dimexpr
+ \d_framed_linewidth
+ \ifconditional\c_framed_has_offset
+ +\framedparameter\c!offset
+ \fi
+ +\framedparameter\c!roffset
+ \relax}
+
% \ruledhbox
% {A
% \framed[width=2cm,align=middle,location=hanging]{location\\equals\\hanging}
@@ -1743,11 +1769,11 @@
\installframedlocator \v!high
{}
- {\pack_framed_locater_set\strutht
+ {\pack_framed_locator_set\strutht
\setbox\b_framed_normal\hpack{\lower\d_framed_locator_dp\box\b_framed_normal}%
\ht\b_framed_normal\strutht
\dp\b_framed_normal\strutdp
- \hpack{\box\b_framed_normal}}
+ \hpack{\box\b_framed_normal}} % why pack
\installframedlocator \v!line
{}
@@ -1758,7 +1784,7 @@
\installframedlocator \v!low
{}
- {\pack_framed_locater_set\strutdp
+ {\pack_framed_locator_set\strutdp
\setbox\b_framed_normal\hpack{\lower\d_framed_locator_ht\box\b_framed_normal}%
\ht\b_framed_normal\strutht
\dp\b_framed_normal\strutdp
@@ -1766,7 +1792,7 @@
\installframedlocator \v!top
{}
- {\pack_framed_locater_set\strutht
+ {\pack_framed_locator_set\strutht
\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
@@ -1786,7 +1812,7 @@
\installframedlocator \v!bottom
{}
- {\pack_framed_locater_set\strutdp
+ {\pack_framed_locator_set\strutdp
\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
@@ -1796,6 +1822,16 @@
{\pack_framed_remove_depth}
{\pack_framed_restore_depth}
+\newdimen\d_framed_formula
+
+\installframedlocator \v!formula % private, will become a more generic name
+ {}
+ {\pack_framed_locator_set\d_framed_formula
+ \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
+ \hpack{\box\b_framed_normal}}
+
% also used in fastlocalframed
\newdimen\d_framed_original_wd
@@ -1952,12 +1988,13 @@
% \inheritedmathframedframed{\Ustartmath\triggermathstyle\c_framed_mstyle#2\Ustopmath}%
% \endgroup}
-\newcount\c_pack_framed_mc
+\newcount\c_pack_framed_mathframed
+\newtoks \t_pack_framed_mathframed
\def\pack_framed_math_pos
- {\global\advance\c_pack_framed_mc\plusone
- \xdef\pack_framed_mc_one{mcf:1:\number\c_pack_framed_mc}%
- \xdef\pack_framed_mc_two{mcf:2:\number\c_pack_framed_mc}%
+ {\global\advance\c_pack_framed_mathframed\plusone
+ \xdef\pack_framed_mc_one{mcf:1:\number\c_pack_framed_mathframed}%
+ \xdef\pack_framed_mc_two{mcf:2:\number\c_pack_framed_mathframed}%
\xypos\pack_framed_mc_two}
\def\pack_framed_mathframed_indeed[#1]#2% no fancy nesting supported here
@@ -1971,9 +2008,20 @@
\else\ifx\m_framed_location\v!low\else
\let\normalstrut\pack_framed_math_strut
\fi\fi
- \inheritedmathframedframed{\Ustartmath\triggermathstyle\c_framed_mstyle#2\Ustopmath}%
+ \inheritedmathframedframed\bgroup
+ \Ustartmath
+ \triggermathstyle\c_framed_mstyle
+ \the\t_pack_framed_mathframed
+ #2%
+ \Ustopmath
+ \egroup
\endgroup}
+\appendtoks
+ \mathraggedstatus\plustwo % makes \startalign work
+ \eqalignmode \zerocount % makes \startalign fit
+\to \t_pack_framed_mathframed
+
\installframedlocator \v!mathematics
{}
{\lower\dimexpr\MPy\pack_framed_mc_two-\MPy\pack_framed_mc_one\relax
@@ -2861,7 +2909,7 @@
\iffirstargument
\setupcurrentframedtext[#1]%
\fi
- \edef\p_framed_text_strut{\letframedtextparameter\c!strut}%
+ \edef\p_framed_text_strut{\framedtextparameter\c!strut}%
\letframedtextparameter\c!strut\v!no
\inheritedframedtextframed\bgroup
\blank[\v!disable]%
@@ -3007,6 +3055,7 @@
\ifx\currentframedcontent\v!off
\let\stopframedcontent\egroup
\else
+ \checkframedcontentparent
\let\stopframedcontent\pack_framed_stop_content_indeed
\expandafter\pack_framed_start_content_indeed
\fi}
diff --git a/tex/context/base/mkiv/page-brk.mkiv b/tex/context/base/mkiv/page-brk.mkiv
index eabcb74f8..b651cc8b4 100644
--- a/tex/context/base/mkiv/page-brk.mkiv
+++ b/tex/context/base/mkiv/page-brk.mkiv
@@ -246,12 +246,25 @@
{\page
\doifelseoddpage\donothing\page_reset_marks_and_insert_dummy}
+% \installpagebreakmethod \v!quadruple % not yet ok inside columnsets
+% {\ifdoublesided
+% \ifnum\numexpr\realpageno/\plusfour\relax=\numexpr\realpageno/\plustwo\relax\else
+% \page_breaks_handle_direct\v!yes
+% \page_breaks_handle_direct\v!empty
+% \page_breaks_handle_direct\v!empty
+% \fi
+% \fi}
+
\installpagebreakmethod \v!quadruple % not yet ok inside columnsets
{\ifdoublesided
- \ifnum\numexpr\realpageno/\plusfour\relax=\numexpr\realpageno/\plustwo\relax\else
+ \ifcase\modulonumber\plusfour\realpageno\else
\page_breaks_handle_direct\v!yes
- \page_breaks_handle_direct\v!empty
- \page_breaks_handle_direct\v!empty
+ \doloop
+ {\ifcase\modulonumber\plusfour\realpageno\relax
+ \exitloop
+ \else
+ \page_breaks_handle_direct\v!empty
+ \fi}%
\fi
\fi}
diff --git a/tex/context/base/mkiv/page-cst.lua b/tex/context/base/mkiv/page-cst.lua
index 782bbebfc..03707a312 100644
--- a/tex/context/base/mkiv/page-cst.lua
+++ b/tex/context/base/mkiv/page-cst.lua
@@ -24,7 +24,6 @@ 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
@@ -32,24 +31,16 @@ 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
+----- removenode = nuts.remove
local getfield = nuts.getfield
local setfield = nuts.setfield
@@ -59,6 +50,12 @@ local setnext = nuts.setnext
local setprev = nuts.setprev
local setsubtype = nuts.setsubtype
local setbox = nuts.setbox
+local getwhd = nuts.getwhd
+local setwhd = nuts.setwhd
+local getkern = nuts.getkern
+local getpenalty = nuts.getpenalty
+local getwidth = nuts.getwidth
+local getheight = nuts.getheight
local getnext = nuts.getnext
local getprev = nuts.getprev
@@ -68,7 +65,6 @@ 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
@@ -84,9 +80,7 @@ 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
@@ -99,13 +93,11 @@ 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
+----- v_wide = variables.wide
pagebuilders = pagebuilders or { } -- todo: pages.builders
pagebuilders.columnsets = pagebuilders.columnsets or { }
@@ -349,11 +341,7 @@ function columnsets.prepareflush(name)
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
+ columns[c] = new_vlist(column[1],widths[c],height,0) -- linedepth
end
--
texsetcount("c_page_grid_first_column",firstcolumn)
@@ -634,8 +622,9 @@ function columnsets.check(t)
if boxwidth > 0 and boxheight > 0 then
-- we're ok
elseif box then
- boxwidth = getfield(box,"width")
- boxheight = getfield(box,"height") + getfield(box,"depth")
+ local wd, ht, dp = getwhd(box)
+ boxwidth = wd
+ boxheight = ht + dp
else
report("empty box")
return
@@ -722,9 +711,7 @@ function columnsets.put(t)
end
end
cells[c][r] = box
- setfield(box,"height",lineheight)
- setfield(box,"depth",linedepth)
- setfield(box,"width",widths[c])
+ setwhd(box,widths[c],lineheight,linedepth)
dataset.reserved_c = false
dataset.reserved_r = false
dataset.reserved_nc = false
@@ -787,9 +774,9 @@ end
-- if line then
-- break
-- end
--- used = used + getfield(head,"width")
+-- used = used + getwidth(head)
-- elseif id == kern_code then
--- used = used + getfield(head,"kern")
+-- used = used + getkern(head)
-- elseif id == penalty_code then
-- end
-- if used > available then
@@ -816,7 +803,8 @@ local function checkroom(head,available,row)
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")
+ local wd, ht, dp = getwhd(head)
+ used = used + ht + dp
line = true
if used > available then
break
@@ -825,18 +813,18 @@ local function checkroom(head,available,row)
if line then
break
end
- used = used + getfield(head,"width")
+ used = used + getwidth(head)
if used > available then
break
end
elseif id == kern_code then
- used = used + getfield(head,"kern")
+ used = used + getkern(head)
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
+ if getpenalty(head) >= 10000 then
line = false
else
break
@@ -874,9 +862,9 @@ end
-- 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")
+-- hd = getwidth(head)
-- elseif id == kern_code then
--- hd = getfield(head,"kern")
+-- hd = getkern(head)
-- elseif id == penalty_code then
-- end
-- if used + hd > available then
@@ -931,7 +919,7 @@ local function findslice(dataset,head,available,column,row)
attempts = attempts + 1
texsetbox("scratchbox",tonode(new_vlist(copy)))
local done = splitbox("scratchbox",usedsize,"additional")
- local used = getfield(done,"height")
+ local used = getheight(done)
local rest = takebox("scratchbox")
if used > (usedsize+slack) then
if trace_detail then
@@ -955,7 +943,7 @@ local function findslice(dataset,head,available,column,row)
texsetbox("scratchbox",tonode(new_vlist(head)))
done = splitbox("scratchbox",usedsize,"additional")
rest = takebox("scratchbox")
- used = getfield(done,"height")
+ used = getheight(done)
if attempts > 1 then
used = available
end
@@ -1002,9 +990,7 @@ function columnsets.add(name,box)
-- 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])
+ setwhd(v,widths[currentcolumn],lineheight,linedepth)
local column = cells[foundc]
--
column[foundr] = v
@@ -1251,9 +1237,7 @@ function columnsets.setarea(t)
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])
+ setwhd(box,dataset.widths[column],dataset.lineheight,dataset.linedepth)
cells[column][row] = box
end
end
diff --git a/tex/context/base/mkiv/page-cst.mkiv b/tex/context/base/mkiv/page-cst.mkiv
index 4559ec33f..ed4512561 100644
--- a/tex/context/base/mkiv/page-cst.mkiv
+++ b/tex/context/base/mkiv/page-cst.mkiv
@@ -293,15 +293,15 @@
% todo line numbers and marks
\unexpanded\def\page_grid_command_flush_page_column#1%
- {\scratchcounter#1\relax
- \clf_flushcolumnsetcolumn{\currentpagegrid}\scratchcounter
+ {\privatescratchcounter#1\relax
+ \clf_flushcolumnsetcolumn{\currentpagegrid}\privatescratchcounter
\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
+ \page_marks_synchronize_column\c_page_grid_first_column\c_page_grid_last_column\privatescratchcounter\b_page_grid_column
+ \ifnum\privatescratchcounter>\c_page_grid_n_of_left
+ \advance\privatescratchcounter-\c_page_grid_n_of_left
+ \page_lines_add_numbers_to_box\b_page_grid_column\privatescratchcounter\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
+ \page_lines_add_numbers_to_box\b_page_grid_column\privatescratchcounter\c_page_grid_n_of_left\plustwo
\fi
\begingroup
\edef\currentpagegrid{\currentpagegrid:#1}%
diff --git a/tex/context/base/mkiv/page-flt.lua b/tex/context/base/mkiv/page-flt.lua
index caa8d490d..53780e420 100644
--- a/tex/context/base/mkiv/page-flt.lua
+++ b/tex/context/base/mkiv/page-flt.lua
@@ -21,11 +21,8 @@ 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 flush_node_list = node.flush_list
-
local setdimen = tex.setdimen
local setcount = tex.setcount
-local texgetbox = tex.getbox
local texsetbox = tex.setbox
local textakebox = nodes.takebox
diff --git a/tex/context/base/mkiv/page-flw.mkiv b/tex/context/base/mkiv/page-flw.mkiv
index 56fe32e5b..688791fe5 100644
--- a/tex/context/base/mkiv/page-flw.mkiv
+++ b/tex/context/base/mkiv/page-flw.mkiv
@@ -75,7 +75,7 @@
\fi
\to \everydefinetextflow
-\let\b_page_textflow_box\zerocount
+\newcount\b_page_textflow_box
\def\textflowcollector#1%
{\csname\??textflowbox#1\endcsname}
@@ -141,3 +141,42 @@
\endgroup}
\protect \endinput
+
+% \setuppapersize [A6]
+% \setupbodyfont [pagella, 12pt]
+%
+% \definetextflow [even] [width=\textwidth]
+% \definetextflow [odd] [width=\textwidth]
+%
+% \starttextflow [even] \dorecurse{15}{\input bryson} \stoptextflow
+% \starttextflow [odd] \dorecurse {5}{\input knuth } \stoptextflow
+%
+% \starttext
+%
+% \doloop {
+% \ifodd\realpageno
+% \doiftextflowelse{odd} {
+% \bgroup
+% \vsize\dimexpr\textheight-\strutdp\relax
+% \flushtextflow{odd}
+% \egroup
+% } {
+% \null
+% }
+% \page
+% \else
+% \doiftextflowelse{even} {
+% \bgroup
+% \vsize\dimexpr\textheight-\strutdp\relax
+% \flushtextflow{even}
+% \egroup
+% } {
+% \null
+% }
+% \page
+% \fi
+% \doiftextflowelse{even}\donothing{\doiftextflowelse{odd}\donothing\exitloop}
+% }
+%
+% \stoptext
+
diff --git a/tex/context/base/mkiv/page-inj.lua b/tex/context/base/mkiv/page-inj.lua
index fd66ead08..d3548b4fb 100644
--- a/tex/context/base/mkiv/page-inj.lua
+++ b/tex/context/base/mkiv/page-inj.lua
@@ -22,7 +22,6 @@ local variables = interfaces.variables
local texsetcount = tex.setcount
-local v_yes = variables.yes
local v_previous = variables.previous
local v_next = variables.next
diff --git a/tex/context/base/mkiv/page-ins.lua b/tex/context/base/mkiv/page-ins.lua
index 235f586c6..4791bc69b 100644
--- a/tex/context/base/mkiv/page-ins.lua
+++ b/tex/context/base/mkiv/page-ins.lua
@@ -12,8 +12,6 @@ structures = structures or { }
structures.inserts = structures.inserts or { }
local inserts = structures.inserts
-local report_inserts = logs.reporter("inserts")
-
local allocate = utilities.storage.allocate
inserts.stored = inserts.stored or allocate { } -- combining them in one is inefficient in the
@@ -21,10 +19,6 @@ inserts.data = inserts.data or allocate { } -- bytecode storage pool
local variables = interfaces.variables
local v_page = variables.page
-local v_columns = variables.columns
-local v_firstcolumn = variables.firstcolumn
-local v_lastcolumn = variables.lastcolumn
-local v_text = variables.text
local context = context
local implement = interfaces.implement
diff --git a/tex/context/base/mkiv/page-ins.mkiv b/tex/context/base/mkiv/page-ins.mkiv
index c91073a14..09ba70b70 100644
--- a/tex/context/base/mkiv/page-ins.mkiv
+++ b/tex/context/base/mkiv/page-ins.mkiv
@@ -55,17 +55,18 @@
\unexpanded\def\page_inserts_synchronize_registers
{\currentinsertionnumber\csname\??insertionnumber\currentinsertion\endcsname}
-% for practical reasone we still set these elsewhere but that might chaneg in the future
+% for practical reasons we still set these elsewhere but that might change in the future
%
% \global\count\currentinsertionnumber\numexpr\insertionparameter\c!factor/\insertionparameter\c!n\relax
% \global\skip \currentinsertionnumber\insertionparameter\c!distance \relax
% \global\dimen\currentinsertionnumber\insertionparameter\c!maxheight\relax}
+% \floatingpenalty\zerocount
\appendtoks
\page_inserts_synchronize_registers
\to \everysetupinsertion
-\unexpanded\def\page_inserts_process#1% beware, this addapts currentinsertion !
+\unexpanded\def\page_inserts_process#1% beware, this adapts currentinsertion !
{\edef\currentinsertion{#1}%
\currentinsertionnumber\csname\??insertionnumber\currentinsertion\endcsname
\doprocessinsert\currentinsertionnumber} % old method
diff --git a/tex/context/base/mkiv/page-lay.mkiv b/tex/context/base/mkiv/page-lay.mkiv
index 1fde9e9c9..f2e39c660 100644
--- a/tex/context/base/mkiv/page-lay.mkiv
+++ b/tex/context/base/mkiv/page-lay.mkiv
@@ -92,9 +92,12 @@
\newdimen\topdistance
\newdimen\headerdistance
+\newdimen\textdistance
\newdimen\footerdistance
\newdimen\bottomdistance
+\newdimen\textovershoot % available in pagebuilder
+
%D We need to calculate the extra distances:
\newdimen\naturalmarginwidth
@@ -107,6 +110,7 @@
\newdimen\naturalrightmargindistance
\newdimen\naturaltopdistance
\newdimen\naturalheaderdistance
+\newdimen\naturaltextdistance
\newdimen\naturalfooterdistance
\newdimen\naturalbottomdistance
@@ -178,6 +182,7 @@
\global\naturalrightmargindistance\layoutparameter\c!rightmargindistance
\global\naturaltopdistance \layoutparameter\c!topdistance
\global\naturalheaderdistance \layoutparameter\c!headerdistance
+ \global\naturaltextdistance \layoutparameter\c!textdistance
\global\naturalfooterdistance \layoutparameter\c!footerdistance
\global\naturalbottomdistance \layoutparameter\c!bottomdistance
%
@@ -192,6 +197,7 @@
\global\rightmargindistance \layoutdistance\rightmarginwidth\naturalrightmargindistance
\global\topdistance \layoutdistance\topheight \naturaltopdistance
\global\headerdistance \layoutdistance\headerheight \naturalheaderdistance
+ \global\textdistance \naturaltextdistance
\global\footerdistance \layoutdistance\footerheight \naturalfooterdistance
\global\bottomdistance \layoutdistance\bottomheight \naturalbottomdistance
}
@@ -372,7 +378,11 @@
\doifelseassignment{#2}
{\definelayouttarget[#1][#2]}
{\setevalue{\??layoutpaper#1}{#2}%
- \setevalue{\??layoutprint#1}{#3}}%
+ \ifthirdargument
+ \setevalue{\??layoutprint#1}{#3}%
+ \else
+ \setevalue{\??layoutprint#1}{#2}%
+ \fi}%
\fi}
\appendtoks
@@ -447,15 +457,12 @@
\let\setuppaper\page_paper_setup_size_settings
\unexpanded\def\adaptpapersize
- {\global\let\page_paper_reinstate\page_paper_reinstate_indeed
+ {\glet\page_paper_reinstate\page_paper_restore
\setuppapersize}
-\unexpanded\def\page_paper_reinstate_indeed
- {\page_paper_restore
- \global\let\page_paper_reinstate\relax}
-
\appendtoks
\page_paper_reinstate
+ \global\let\page_paper_reinstate\relax
\to \everyaftershipout
\unexpanded\def\page_paper_set_restore#1#2%
diff --git a/tex/context/base/mkiv/page-lin.lua b/tex/context/base/mkiv/page-lin.lua
index 5b18d9823..8ec4ba5df 100644
--- a/tex/context/base/mkiv/page-lin.lua
+++ b/tex/context/base/mkiv/page-lin.lua
@@ -50,15 +50,13 @@ 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 a_displaymath = attributes.private('displaymath')
local a_linenumber = attributes.private('linenumber')
local a_linereference = attributes.private('linereference')
-local a_verbatimline = attributes.private('verbatimline')
+----- a_verbatimline = attributes.private('verbatimline')
local current_list = { }
local cross_references = { }
@@ -74,6 +72,10 @@ local setattr = nuts.setattr
local getlist = nuts.getlist
local getbox = nuts.getbox
local getfield = nuts.getfield
+----- getdir = nuts.getdir
+----- getwidth = nuts.getwidth
+local getheight = nuts.getheight
+local getdepth = nuts.getdepth
local setprop = nuts.setprop
local getprop = nuts.getprop
@@ -83,17 +85,12 @@ local setfield = nuts.setfield
local traverse_id = nuts.traverse_id
local traverse = nuts.traverse
local copy_node = nuts.copy
-local hpack_nodes = nuts.hpack
-local linked_nodes = nuts.linked
-local insert_node_after = nuts.insert_after
-local insert_node_before = nuts.insert_before
+----- hpack_nodes = nuts.hpack
local is_display_math = nuts.is_display_math
local leftmarginwidth = nuts.leftmarginwidth
-local nodepool = nuts.pool
-local negated_glue = nodepool.negatedglue
-local new_hlist = nodepool.hlist
-local new_kern = nodepool.kern
+----- nodepool = nuts.pool
+----- new_kern = nodepool.kern
local ctx_convertnumber = context.convertnumber
local ctx_makelinenumber = context.makelinenumber
@@ -393,7 +390,7 @@ function boxed.stage_one(n,nested)
local subtype = getsubtype(n)
if subtype ~= line_code then
-- go on
- elseif getfield(n,"height") == 0 and getfield(n,"depth") == 0 then
+ elseif getheight(n) == 0 and getdepth(n) == 0 then
-- skip funny hlists -- todo: check line subtype
else
local a = lineisnumbered(n)
@@ -412,17 +409,19 @@ function boxed.stage_one(n,nested)
end
end
if getattr(n,a_displaymath) then
+ -- this probably needs to be adapted !
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
+ -- -- we now prevent nesting anyway .. maybe later we need to check again
+ -- 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
+ -- else
+ -- check_number(n,a,skip,true)
+ -- end
end
skip = false
end
@@ -485,10 +484,10 @@ 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 d = getfield(n,"dir")
+ -- local d = getdir(n)
-- local l = getlist(n)
-- if d == "TRT" then
- -- local w = getfield(n,"width")
+ -- local w = getwidth(n)
-- ti = hpack_nodes(linked_nodes(new_kern(-w),ti,new_kern(w)))
-- end
-- setnext(ti,l)
diff --git a/tex/context/base/mkiv/page-lin.mkvi b/tex/context/base/mkiv/page-lin.mkvi
index 5756d870b..2692087cc 100644
--- a/tex/context/base/mkiv/page-lin.mkvi
+++ b/tex/context/base/mkiv/page-lin.mkvi
@@ -174,11 +174,21 @@
% \startlinenumbering[name][<startvalue>|continue|settings]
\unexpanded\def\startlinenumbering
- {\dodoubleempty\page_lines_start}
+ {\begingroup
+ \dodoubleempty\page_lines_start}
+
+\newcount\c_pages_lines_nesting
\def\page_lines_start % we stay downward compatible
- {\begingroup
- \ifsecondargument
+ {\advance\c_pages_lines_nesting\plusone
+ \ifnum\c_pages_lines_nesting>\plusone
+ \expandafter\dodoubleempty\expandafter\gobbletwooptionals
+ \else
+ \expandafter\page_lines_start_indeed
+ \fi}
+
+\def\page_lines_start_indeed
+ {\ifsecondargument
\expandafter\page_lines_start_two
\else\iffirstargument
\doubleexpandafter\page_lines_start_one
@@ -276,9 +286,11 @@
\attribute\linenumberattribute\csname\??linenumberinginstance\currentlinenumbering\endcsname\relax}
\unexpanded\def\stoplinenumbering
- {\attribute\linenumberattribute\attributeunsetvalue
- \the\aftereverylinenumbering
- \ifconditional\c_page_lines_auto_narrow\par\fi
+ {\ifconditional\c_pages_lines_nesting=\plusone
+ \attribute\linenumberattribute\attributeunsetvalue
+ \the\aftereverylinenumbering
+ \ifconditional\c_page_lines_auto_narrow\par\fi
+ \fi
\endgroup}
% number placement .. will change into (the new) margin code
diff --git a/tex/context/base/mkiv/page-mix.lua b/tex/context/base/mkiv/page-mix.lua
index c844bd32d..524181c8e 100644
--- a/tex/context/base/mkiv/page-mix.lua
+++ b/tex/context/base/mkiv/page-mix.lua
@@ -8,11 +8,15 @@ if not modules then modules = { } end modules ["page-mix"] = {
-- inserts.getname(name)
+-- getfield(l,"head") -> getlist
+
-- local node, tex = node, tex
-- local nodes, interfaces, utilities = nodes, interfaces, utilities
-- local trackers, logs, storage = trackers, logs, storage
-- local number, table = number, table
+-- todo: explore vsplit (for inserts)
+
local next, type = next, type
local concat = table.concat
local ceil, floor = math.ceil, math.floor
@@ -23,7 +27,6 @@ local trace_detail = false trackers.register("mixedcolumns.detail", function(v)
local report_state = logs.reporter("mixed columns")
local nodecodes = nodes.nodecodes
-local gluecodes = nodes.gluecodes
local hlist_code = nodecodes.hlist
local vlist_code = nodecodes.vlist
@@ -34,38 +37,40 @@ 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 nodetostring = nuts.tostring
local listtoutf = nodes.listtoutf
local hpack = nuts.hpack
local vpack = nuts.vpack
-local freenode = nuts.free
+local flushnode = nuts.flush
local concatnodes = nuts.concat
local slidenodes = nuts.slide -- ok here as we mess with prev links intermediately
-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 setwhd = nuts.setwhd
+local setheight = nuts.setheight
+local setdepth = nuts.setdepth
+local getfield = nuts.getfield
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 getskip = nuts.getskip
local getattribute = nuts.getattribute
+local getwhd = nuts.getwhd
+local getkern = nuts.getkern
+local getpenalty = nuts.getpenalty
+local getwidth = nuts.getwidth
+local getheight = nuts.getheight
+local getdepth = nuts.getdepth
local theprop = nuts.theprop
@@ -83,12 +88,7 @@ local variables = interfaces.variables
local v_yes = variables.yes
local v_global = variables["global"]
local v_local = variables["local"]
-local v_columns = variables.columns
-local v_fixed = variables.fixed
-local v_auto = variables.auto
local v_none = variables.none
-local v_more = variables.more
-local v_less = variables.less
local v_halfline = variables.halfline
local context = context
@@ -114,24 +114,31 @@ local forcedbreak = -123
local function collectinserts(result,nxt,nxtid)
local inserts, currentskips, nextskips, inserttotal = { }, 0, 0, 0
+ local i = result.i
+ if not i then
+ i = 0
+ result.i = i
+ end
while nxt do
if nxtid == insert_code then
- inserttotal = inserttotal + getfield(nxt,"height") + getfield(nxt,"depth")
+ i = i + 1
+ result.i = i
+ inserttotal = inserttotal + getheight(nxt) -- height includes depth
local s = getsubtype(nxt)
local c = inserts[s]
+ if trace_detail then
+ report_state("insert of class %s found",s)
+ end
if not c then
+ local width = structures.notes.check_spacing(s,i) -- before
c = { }
inserts[s] = c
- local width = getfield(getskip(s),"width")
if not result.inserts[s] then
currentskips = currentskips + width
end
nextskips = nextskips + width
end
c[#c+1] = nxt
- if trace_detail then
- report_state("insert of class %s found",s)
- end
elseif nxtid == mark_code then
if trace_detail then
report_state("mark found")
@@ -169,15 +176,15 @@ local function discardtopglue(current,discarded)
while current do
local id = getid(current)
if id == glue_code then
- size = size + getfield(current,"width")
+ size = size + getwidth(current)
discarded[#discarded+1] = current
current = getnext(current)
elseif id == penalty_code then
- if getfield(current,"penalty") == forcedbreak then
+ if getpenalty(current) == forcedbreak then
discarded[#discarded+1] = current
current = getnext(current)
while current and getid(current) == glue_code do
- size = size + getfield(current,"width")
+ size = size + getwidth(current)
discarded[#discarded+1] = current
current = getnext(current)
end
@@ -207,7 +214,7 @@ local function stripbottomglue(results,discarded)
end
local id = getid(t)
if id == penalty_code then
- if getfield(t,"penalty") == forcedbreak then
+ if getpenalty(t) == forcedbreak then
break
else
discarded[#discarded+1] = t
@@ -216,7 +223,7 @@ local function stripbottomglue(results,discarded)
end
elseif id == glue_code then
discarded[#discarded+1] = t
- local width = getfield(t,"width")
+ local width = getwidth(t)
if trace_state then
report_state("columns %s, discarded bottom glue %p",i,width)
end
@@ -253,8 +260,8 @@ local function preparesplit(specification) -- a rather large function
slidenodes(head) -- we can have set prev's to nil to prevent backtracking
local discarded = { }
local originalhead = head
- local originalwidth = specification.originalwidth or getfield(list,"width")
- local originalheight = specification.originalheight or getfield(list,"height")
+ local originalwidth = specification.originalwidth or getwidth(list)
+ local originalheight = specification.originalheight or getheight(list)
local current = head
local skipped = 0
local height = 0
@@ -302,15 +309,15 @@ local function preparesplit(specification) -- a rather large function
}
end
- local column = 1
- local line = 0
- local result = results[1]
- local lasthead = nil
- local rest = nil
- local lastlocked = nil
- local lastcurrent = nil
- local lastcontent = nil
- local backtracked = false
+ local column = 1
+ local line = 0
+ local result = results[1]
+ local lasthead = nil
+ local rest = nil
+ local lastlocked = nil
+ local lastcurrent = nil
+ local lastcontent = nil
+ local backtracked = false
if trace_state then
report_state("setting collector to column %s",column)
@@ -416,12 +423,12 @@ local function preparesplit(specification) -- a rather large function
result.height = height
result.depth = depth
end
- head = current
- height = 0
- depth = 0
+ head = current
+ height = 0
+ depth = 0
if column == nofcolumns then
column = 0 -- nicer in trace
- rest = head
+ rest = head
return false, 0
else
local skipped
@@ -442,7 +449,6 @@ local function preparesplit(specification) -- a rather large function
local function checked(advance,where,locked)
local total = skip + height + depth + advance
local delta = total - target
--- - 65536*3
local state = "same"
local okay = false
local skipped = 0
@@ -457,8 +463,8 @@ local function preparesplit(specification) -- a rather large function
end
end
if trace_detail then
- report_state("%-7s > column %s, delta %p, threshold %p, advance %p, total %p, target %p => %a (height %p, depth %p, skip %p)",
- where,curcol,delta,threshold,advance,total,target,state,skipped,height,depth,skip)
+ report_state("%-8s > column %s, delta %p, threshold %p, advance %p, total %p, target %p => %a (height %p, depth %p, skip %p)",
+ where,curcol,delta,threshold,advance,total,target,state,height,depth,skip)
end
return state, skipped
end
@@ -478,13 +484,13 @@ local function preparesplit(specification) -- a rather large function
head = current
local function process_skip(current,nxt)
- local advance = getfield(current,"width")
+ local advance = getwidth(current)
if advance ~= 0 then
local state, skipped = checked(advance,"glue")
if trace_state then
- report_state("%-7s > column %s, state %a, advance %p, height %p","glue",column,state,advance,height)
+ report_state("%-8s > column %s, state %a, advance %p, height %p","glue",column,state,advance,height)
if skipped ~= 0 then
- report_state("%-7s > column %s, discarded %p","glue",column,skipped)
+ report_state("%-8s > column %s, discarded %p","glue",column,skipped)
end
end
if state == "quit" then
@@ -492,17 +498,17 @@ local function preparesplit(specification) -- a rather large function
end
height = height + depth + skip
depth = 0
-if advance < 0 then
- height = height + advance
- skip = 0
- if height < 0 then
- height = 0
- end
-else
- skip = height > 0 and advance or 0
-end
+ if advance < 0 then
+ height = height + advance
+ skip = 0
+ if height < 0 then
+ height = 0
+ end
+ else
+ skip = height > 0 and advance or 0
+ end
if trace_state then
- report_state("%-7s > column %s, height %p, depth %p, skip %p","glue",column,height,depth,skip)
+ report_state("%-8s > column %s, height %p, depth %p, skip %p","glue",column,height,depth,skip)
end
else
-- what else? ignore? treat as valid as usual?
@@ -513,13 +519,13 @@ end
end
local function process_kern(current,nxt)
- local advance = getfield(current,"kern")
+ local advance = getkern(current)
if advance ~= 0 then
local state, skipped = checked(advance,"kern")
if trace_state then
- report_state("%-7s > column %s, state %a, advance %p, height %p, state %a","kern",column,state,advance,height)
+ report_state("%-8s > column %s, state %a, advance %p, height %p, state %a","kern",column,state,advance,height)
if skipped ~= 0 then
- report_state("%-7s > column %s, discarded %p","kern",column,skipped)
+ report_state("%-8s > column %s, discarded %p","kern",column,skipped)
end
end
if state == "quit" then
@@ -529,20 +535,20 @@ end
depth = 0
skip = 0
if trace_state then
- report_state("%-7s > column %s, height %p, depth %p, skip %p","kern",column,height,depth,skip)
+ report_state("%-8s > column %s, height %p, depth %p, skip %p","kern",column,height,depth,skip)
end
end
end
local function process_rule(current,nxt)
-- simple variant of h|vlist
- local advance = getfield(current,"height") -- + getfield(current,"depth")
+ local advance = getheight(current) -- + getdepth(current)
if advance ~= 0 then
local state, skipped = checked(advance,"rule")
if trace_state then
- report_state("%-7s > column %s, state %a, rule, advance %p, height %p","rule",column,state,advance,inserttotal,height)
+ report_state("%-8s > column %s, state %a, rule, advance %p, height %p","rule",column,state,advance,inserttotal,height)
if skipped ~= 0 then
- report_state("%-7s > column %s, discarded %p","rule",column,skipped)
+ report_state("%-8s > column %s, discarded %p","rule",column,skipped)
end
end
if state == "quit" then
@@ -554,7 +560,7 @@ end
-- else
-- height = height + currentskips
-- end
- depth = getfield(current,"depth")
+ depth = getdepth(current)
skip = 0
end
lastcontent = current
@@ -567,7 +573,7 @@ end
-- [chapter] [penalty] [section] [penalty] [first line]
local function process_penalty(current,nxt)
- local penalty = getfield(current,"penalty")
+ local penalty = getpenalty(current)
if penalty == 0 then
unlock(penalty)
elseif penalty == forcedbreak then
@@ -587,14 +593,14 @@ end
if trace_state then
report_state("cycle: %s, forced column break, same page",cycle)
if skipped ~= 0 then
- report_state("%-7s > column %s, discarded %p","penalty",column,skipped)
+ report_state("%-8s > column %s, discarded %p","penalty",column,skipped)
end
end
else
if trace_state then
report_state("cycle: %s, forced column break, next page",cycle)
if skipped ~= 0 then
- report_state("%-7s > column %s, discarded %p","penalty",column,skipped)
+ report_state("%-8s > column %s, discarded %p","penalty",column,skipped)
end
end
return true
@@ -617,48 +623,50 @@ end
local function process_list(current,nxt)
local nxtid = nxt and getid(nxt)
line = line + 1
- local inserts, currentskips, nextskips, inserttotal = nil, 0, 0, 0
- local advance = getfield(current,"height")
+ local inserts, insertskips, nextskips, inserttotal = nil, 0, 0, 0
+ local wd, ht, dp = getwhd(current)
+ local advance = ht
+ local more = nxt and (nxtid == insert_code or nxtid == mark_code)
if trace_state then
- report_state("%-7s > column %s, content: %s","line",column,listtoutf(getlist(current),true,true))
+ report_state("%-8s > column %s, content: %s","line (1)",column,listtoutf(getlist(current),true,true))
end
- if nxt and (nxtid == insert_code or nxtid == mark_code) then
- nxt, inserts, localskips, insertskips, inserttotal = collectinserts(result,nxt,nxtid)
+ if more then
+ nxt, inserts, insertskips, nextskips, inserttotal = collectinserts(result,nxt,nxtid)
end
- local state, skipped = checked(advance+inserttotal+currentskips,"line",lastlocked)
+ local state, skipped = checked(advance+inserttotal+insertskips,more and "line (2)" or "line only",lastlocked)
if trace_state then
- report_state("%-7s > column %s, state %a, line %s, advance %p, insert %p, height %p","line",column,state,line,advance,inserttotal,height)
+ report_state("%-8s > column %s, state %a, line %s, advance %p, insert %p, height %p","line (3)",column,state,line,advance,inserttotal,height)
if skipped ~= 0 then
- report_state("%-7s > column %s, discarded %p","line",column,skipped)
+ report_state("%-8s > column %s, discarded %p","line (4)",column,skipped)
end
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
+ -- 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
else
- height = height + currentskips
+ height = height + insertskips
end
- depth = getfield(current,"depth")
+ depth = dp
skip = 0
if inserts then
-- so we already collect them ... makes backtracking tricky ... alternatively
@@ -666,13 +674,11 @@ end
appendinserts(result.inserts,inserts)
end
if trace_state then
- report_state("%-7s > column %s, height %p, depth %p, skip %p","line",column,height,depth,skip)
+ report_state("%-8s > column %s, height %p, depth %p, skip %p","line (5)",column,height,depth,skip)
end
lastcontent = current
end
-local kept = head
-
while current do
local id = getid(current)
@@ -680,8 +686,6 @@ local kept = head
backtracked = false
- -- print("process",nodetostring(current))
-
if id == hlist_code or id == vlist_code then
if process_list(current,nxt) then break end
elseif id == glue_code then
@@ -693,13 +697,11 @@ local kept = head
elseif id == rule_code then
if process_rule(current,nxt) then break end
else
+ -- skip inserts and such
end
if backtracked then
- -- print("pickup",nodetostring(current))
nxt = current
- else
- -- print("move on",nodetostring(current))
end
if nxt then
@@ -766,12 +768,12 @@ local function finalize(result)
local h = r.head
if h then
setprev(h)
-if r.back then
- local k = new_glue(r.back)
- setlink(k,h)
- h = k
- r.head = h
-end
+ 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
setnext(t,nil)
@@ -785,10 +787,11 @@ end
local l = list[i]
local h = new_hlist()
t[i] = h
- setlist(h,getfield(l,"head"))
- setfield(h,"height",getfield(l,"height"))
- setfield(h,"depth",getfield(l,"depth"))
- setfield(l,"head",nil)
+ setlist(h,getlist(l))
+ local wd, ht, dp = getwhd(l)
+ -- here ht is still ht + dp !
+ setwhd(h,getwidth(h),ht,dp)
+ setlist(l)
end
setprev(t[1]) -- needs checking
setnext(t[#t]) -- needs checking
@@ -947,9 +950,7 @@ local function getsplit(result,n)
dp = result.depth
end
- setfield(v,"width",wd)
- setfield(v,"height",ht)
- setfield(v,"depth",dp)
+ setwhd(v,wd,ht,dp)
if trace_state then
local id = getid(h)
@@ -961,8 +962,13 @@ local function getsplit(result,n)
end
for c, list in next, r.inserts do
+
local l = concatnodes(list)
+ for i=1,#list-1 do
+ setdepth(list[i],0)
+ end
local b = vpack(l) -- multiple arguments, todo: fastvpack
+
-- setbox("global",c,b)
setbox(c,b)
r.inserts[c] = nil
@@ -986,7 +992,7 @@ end
local function cleanup(result)
local discarded = result.discarded
for i=1,#discarded do
- freenode(discarded[i])
+ flushnode(discarded[i])
end
result.discarded = { }
end
diff --git a/tex/context/base/mkiv/page-mix.mkiv b/tex/context/base/mkiv/page-mix.mkiv
index a8610deb8..7defece12 100644
--- a/tex/context/base/mkiv/page-mix.mkiv
+++ b/tex/context/base/mkiv/page-mix.mkiv
@@ -57,7 +57,7 @@
% old multicolumns mechanism
%
% \c!ntop=1,
-% \c!rule=\v!off,
+% \c!rule=\v!off, : now separator=rule
% \c!height=,
% \c!blank={\v!line,\v!fixed},
% \c!rulethickness=\linewidth,
@@ -359,6 +359,16 @@
\unexpanded\def\startmixedcolumns
{\dodoubleempty\page_mix_start_columns}
+\def\page_mix_start_columns_checked#1#2%
+ {\edef\currentmixedcolumnsmethod{\mixedcolumnsparameter\c!method}%
+ \ifx\currentmixedcolumnsmethod\v!box
+ \singleexpandafter#1%
+ \else\ifinsidecolumns
+ \doubleexpandafter#2%
+ \else
+ \doubleexpandafter#1%
+ \fi\fi}
+
\unexpanded\def\page_mix_start_columns
{\pushmacro\currentmixedcolumns
\pushmacro\currentmixedcolumnsmethod
@@ -370,15 +380,24 @@
\doubleexpandafter\page_mix_start_columns_c
\fi\fi}
-\def\page_mix_start_columns_a[#1][#2]%
+\def\page_mix_start_columns_a[#1]% [#2]%
{\edef\currentmixedcolumns{#1}%
- \edef\currentmixedcolumnsmethod{\mixedcolumnsparameter\c!method}%
- \mixedcolumnsparameter\c!before\relax
+ \page_mix_start_columns_checked
+ \page_mix_start_columns_a_yes
+ \page_mix_start_columns_a_nop}
+
+\def\page_mix_start_columns_a_yes[#1]%
+ {\mixedcolumnsparameter\c!before\relax
\begincsname\??mixedcolumnsbefore\currentmixedcolumnsmethod\endcsname\relax
\begingroup
- \setupcurrentmixedcolumns[#2]%
+ \setupcurrentmixedcolumns[#1]%
\page_mix_initialize_columns
- \begincsname\??mixedcolumnsstart\currentmixedcolumnsmethod\endcsname}
+ \begincsname\??mixedcolumnsstart\currentmixedcolumnsmethod\endcsname
+ \let\stopmixedcolumns\page_mix_columns_stop_yes}
+
+\def\page_mix_start_columns_a_nop[#1]%
+ {\begingroup
+ \let\stopmixedcolumns\page_mix_columns_stop_nop}
\def\page_mix_start_columns_b[#1][#2]%
{\doifelseassignment{#1}%
@@ -386,44 +405,66 @@
\page_mix_error_b}
{\edef\currentmixedcolumns{#1}%
\firstargumentfalse}%
- \edef\currentmixedcolumnsmethod{\mixedcolumnsparameter\c!method}%
- \mixedcolumnsparameter\c!before\relax % so, it doesn't listen to local settings !
+ \page_mix_start_columns_checked
+ \page_mix_start_columns_b_yes
+ \page_mix_start_columns_b_nop
+ [#1]}
+
+\def\page_mix_start_columns_b_yes[#1]%
+ {\mixedcolumnsparameter\c!before\relax % so, it doesn't listen to local settings !
\begincsname\??mixedcolumnsbefore\currentmixedcolumnsmethod\endcsname\relax
\begingroup
\iffirstargument
\setupcurrentmixedcolumns[#1]%
\fi
\page_mix_initialize_columns
- \begincsname\??mixedcolumnsstart\currentmixedcolumnsmethod\endcsname} % no \relax
+ \begincsname\??mixedcolumnsstart\currentmixedcolumnsmethod\endcsname % no \relax
+ \let\stopmixedcolumns\page_mix_columns_stop_yes}
+
+\def\page_mix_start_columns_b_nop[#1]%
+ {\begingroup
+ \let\stopmixedcolumns\page_mix_columns_stop_nop}
\def\page_mix_error_b
{\writestatus\m!columns{best use an instance of mixed columns}}
\def\page_mix_start_columns_c[#1][#2]%
{\let\currentmixedcolumns\empty
- \edef\currentmixedcolumnsmethod{\mixedcolumnsparameter\c!method}%
- \mixedcolumnsparameter\c!before\relax
+ \page_mix_start_columns_checked
+ \page_mix_start_columns_c_yes
+ \page_mix_start_columns_c_nop}
+
+\def\page_mix_start_columns_c_yes
+ {\mixedcolumnsparameter\c!before\relax
\begincsname\??mixedcolumnsbefore\currentmixedcolumnsmethod\endcsname\relax
\begingroup
\page_mix_initialize_columns
- \begincsname\??mixedcolumnsstart\currentmixedcolumnsmethod\endcsname}
+ \begincsname\??mixedcolumnsstart\currentmixedcolumnsmethod\endcsname
+ \let\stopmixedcolumns\page_mix_columns_stop_yes}
+
+\def\page_mix_start_columns_c_nop
+ {\begingroup
+ \let\stopmixedcolumns\page_mix_columns_stop_nop}
\unexpanded\def\page_mix_fast_columns_start#1%
{\pushmacro\currentmixedcolumns
\pushmacro\currentmixedcolumnsmethod
\edef\currentmixedcolumns{#1}%
\edef\currentmixedcolumnsmethod{\mixedcolumnsparameter\c!method}%
- \mixedcolumnsparameter\c!before\relax % so, it doesn't list to local settings !
+ \mixedcolumnsparameter\c!before\relax % so, it doesn't listen to local settings !
\begincsname\??mixedcolumnsbefore\currentmixedcolumnsmethod\endcsname\relax
\begingroup
\page_mix_initialize_columns
- \begincsname\??mixedcolumnsstart\currentmixedcolumnsmethod\endcsname} % no \relax
+ \begincsname\??mixedcolumnsstart\currentmixedcolumnsmethod\endcsname % no \relax
+ \let\page_mix_fast_columns_stop\page_mix_columns_stop_yes}
%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
+\let\page_mix_fast_columns_stop\relax
+
+\unexpanded\def\page_mix_columns_stop_yes
{\begincsname\??mixedcolumnsstop \currentmixedcolumnsmethod\endcsname % no \relax
\endgroup
\begincsname\??mixedcolumnsafter\currentmixedcolumnsmethod\endcsname\relax
@@ -431,7 +472,12 @@
\popmacro\currentmixedcolumnsmethod
\popmacro\currentmixedcolumns}
-% \unexpanded\def\stopmixedcolumns
+\unexpanded\def\page_mix_columns_stop_nop
+ {\endgroup
+ \popmacro\currentmixedcolumnsmethod
+ \popmacro\currentmixedcolumns}
+
+% \unexpanded\def\page_mix_columns_stop_yes
% {\begincsname\??mixedcolumnsstop \currentmixedcolumnsmethod\endcsname % no \relax
% \endgroup
% \begincsname\??mixedcolumnsafter\currentmixedcolumnsmethod\endcsname\relax
@@ -446,18 +492,22 @@
% \fi
% }
-\let\page_mix_fast_columns_stop\stopmixedcolumns
-
%D This is how the fast one is used:
\unexpanded\def\strc_itemgroups_start_columns
{\page_mix_fast_columns_start\s!itemgroupcolumns}
-\let\strc_itemgroups_stop_columns\page_mix_fast_columns_stop
+\unexpanded\def\strc_itemgroups_stop_columns
+ {\page_mix_fast_columns_stop} % set by start
-\setupmixedcolumns
- [\s!itemgroupcolumns]
- [\c!grid=\itemgroupparameter\c!grid]
+% not used nor documented so commented:
+%
+% \setupmixedcolumns
+% [\s!itemgroupcolumns]
+% [\c!grid=\itemgroupparameter\c!grid]
+%
+% \setupitemgroup
+% [\c!grid=\v!yes] % we need a value
% better
@@ -667,10 +717,11 @@
% maybe intercept empty
\clf_mixgetsplit\recurselevel\relax
\hskip-\d_page_mix_column_width
- \page_mix_hbox to \d_page_mix_column_width \bgroup
+ \vbox \bgroup
+ \hsize\d_page_mix_column_width
\placenoteinserts
- \hss
\egroup
+ \hss
\egroup}
\unexpanded\def\page_mix_routine_continue
@@ -788,25 +839,6 @@
\letvalue{\??mixedcolumnsbefore\s!box}\donothing
\letvalue{\??mixedcolumnsafter \s!box}\donothing
-% \setvalue{\??mixedcolumnsstart\s!box}%
-% {\edef\p_page_mix_strut{\mixedcolumnsparameter\c!strut}%
-% \setbox\b_page_mix_collected\vbox\bgroup
-% \let\currentoutputroutine\s!mixedcolumn % makes \column work
-% \forgetall
-% \page_mix_command_set_hsize
-% \ifx\p_page_mix_strut\v!yes
-% \begstrut
-% \ignorespaces
-% \fi}
-%
-% \setvalue{\??mixedcolumnsstop\s!box}%
-% {\ifx\p_page_mix_strut\v!yes
-% \removeunwantedspaces
-% \endstrut
-% \fi
-% \egroup
-% \page_mix_box_balance}
-
\setvalue{\??mixedcolumnsstart\s!box}%
{\edef\p_page_mix_strut{\mixedcolumnsparameter\c!strut}%
\setbox\b_page_mix_collected\vbox \bgroup
diff --git a/tex/context/base/mkiv/page-mrk.mkiv b/tex/context/base/mkiv/page-mrk.mkiv
index 0cd615f8a..43116e84d 100644
--- a/tex/context/base/mkiv/page-mrk.mkiv
+++ b/tex/context/base/mkiv/page-mrk.mkiv
@@ -25,32 +25,35 @@
\def\pagecutmarkoffset {3mm} % slightly larger than before, and now a fixed size
\def\pagecutmarkmargin{10cm}
+% maybe all these should be global
+
\newconditional\c_page_marks_add_more_color
\newconditional\c_page_marks_add_more_marking
\newconditional\c_page_marks_add_more_lines
\newconditional\c_page_marks_add_page_lines
\newconditional\c_page_marks_add_more_number
+\newcount\c_page_marks_max
\newcount\c_page_marks_nx
\newcount\c_page_marks_ny
\startuniqueMPgraphic{print:color}{w,h,l,o}
- if unknown context_crop : input mp-crop.mpiv ; fi ;
+ loadmodule "crop" ;
page_marks_add_color(\MPvar w,\MPvar h,\MPvar l,\MPvar o) ;
\stopuniqueMPgraphic
\startuniqueMPgraphic{print:marking}{w,h,l,o}
- if unknown context_crop : input mp-crop.mpiv ; fi ;
+ loadmodule "crop" ;
page_marks_add_marking(\MPvar w,\MPvar h,\MPvar l,\MPvar o) ;
\stopuniqueMPgraphic
\startuniqueMPgraphic{print:lines}{w,h,l,o,x,y}
- if unknown context_crop : input mp-crop.mpiv ; fi ;
+ loadmodule "crop" ;
page_marks_add_lines(\MPvar w,\MPvar h,\MPvar l,\MPvar o,\MPvar x,\MPvar y) ;
\stopuniqueMPgraphic
\startuseMPgraphic{print:number}{w,h,l,o,n}
- if unknown context_crop : input mp-crop.mpiv ; fi ;
+ loadmodule "crop" ;
page_marks_add_number(\MPvar w,\MPvar h,\MPvar l,\MPvar o,\MPvar n) ;
\stopuseMPgraphic
@@ -135,6 +138,11 @@
\ifconditional\c_page_marks_add_more_number
\page_marks_add_number
\fi
+ \global\advance\c_page_marks_max\minusone
+ \ifnum\c_page_marks_max>\zerocount\else
+ \glet\page_marks_add_more\gobbleoneargument
+ \glet\page_marks_add_page\gobbleoneargument
+ \fi
\egroup}
\let\page_marks_add_page\gobbleoneargument
@@ -174,13 +182,31 @@
\settrue\c_page_marks_add_more_marking
\settrue\c_page_marks_add_more_number}
+\installpagecutmark\v!one {\global\c_page_marks_max\plusone}
+\installpagecutmark\v!two {\global\c_page_marks_max\plustwo}
+\installpagecutmark\v!four{\global\c_page_marks_max\plusfour}
+
+\unexpanded\def\page_marks_set#1%
+ {\begincsname\??layoutmarking#1\endcsname}
+
\appendtoks
\setfalse\c_page_marks_add_page_lines
\setfalse\c_page_marks_add_more_color
\setfalse\c_page_marks_add_more_marking
\setfalse\c_page_marks_add_more_lines
\setfalse\c_page_marks_add_more_number
- \begincsname\??layoutmarking\layoutparameter\c!marking\endcsname
+ \global\c_page_marks_max\maxcount
+ \rawprocesscommacommand[\layoutparameter\c!marking]\page_marks_set
+ \ifnum\c_page_marks_max<\maxcount
+ \ifconditional\c_page_marks_add_page_lines \else
+ \ifconditional\c_page_marks_add_more_color \else
+ \ifconditional\c_page_marks_add_more_marking\else
+ \ifconditional\c_page_marks_add_more_lines \else
+ \ifconditional\c_page_marks_add_more_number \else
+ \settrue\c_page_marks_add_page_lines
+ \settrue\c_page_marks_add_more_number
+ \fi\fi\fi\fi\fi
+ \fi
\ifconditional\c_page_marks_add_page_lines
\let\page_marks_add_page\page_marks_add_page_indeed
\else
diff --git a/tex/context/base/mkiv/page-mul.mkiv b/tex/context/base/mkiv/page-mul.mkiv
index 5cc60d9ed..fcad2c4c6 100644
--- a/tex/context/base/mkiv/page-mul.mkiv
+++ b/tex/context/base/mkiv/page-mul.mkiv
@@ -59,7 +59,7 @@
\installcorenamespace {columns}
-\installcommandhandler \??columns {columns} \??columns
+\installframedcommandhandler \??columns {columns} \??columns
%D Going to a new columns is done by means of a \type {\ejectcolumn}. The
%D following definition does not always work.
@@ -104,7 +104,7 @@
%D A hook:
- \let\finishcolumnbox\relax
+\let\finishcolumnbox\relax % todo in mkiv
%D This will change to a local one:
@@ -1457,21 +1457,12 @@
% 3 \input tufte \par \placefigure{}{\framed[width=\hsize,height=3cm]{3}}
% \stopcolumns
- % \def\backgroundfinishcolumnbox
- % {\doifelseinset\@@kloffset{\v!none,\v!overlay}
- % {\let\@@kloffset\!!zeropoint}
- % {\scratchdimen\@@kloffset
- % \advance\scratchdimen -\@@klrulethickness
- % \edef\@@kloffset{\the\scratchdimen}}%
- % \localframed
- % [\??kl]
- % [\c!strut=\v!no,
- % \c!width=\v!fit,
- % \c!height=\v!fit,
- % \c!align=]}
-
- \def\backgroundfinishcolumnbox
- {}
+\def\backgroundfinishcolumnbox
+ {\inheritedcolumnsframed}
+ % [\c!strut=\v!no,
+ % \c!width=\v!fit,
+ % \c!height=\v!fit,
+ % \c!align=]}
% to be reconsidered ... (in any case they need to be unexpandable sinze 2011.12.30)
@@ -1607,8 +1598,12 @@
\edef\p_option{\columnsparameter\c!option}%
\ifx\p_option\v!background
\let\finishcolumnbox\backgroundfinishcolumnbox
+ \doifelseinset{\columnsparameter\c!offset}{\v!none,\v!overlay}
+ {\d_page_mul_offset\zeropoint}%
+ {\d_page_mul_offset\dimexpr\columnsparameter\c!offset-\columnsparameter\c!rulethickness\relax}%
+ \else
+ \d_page_mul_offset\zeropoint
\fi
- \d_page_mul_offset\columnsparameter\c!offset\relax
\edef\p_command{\columnsparameter\c!command}%
\ifx\p_command\empty \else
\let\postprocesscolumnline\p_command
diff --git a/tex/context/base/mkiv/page-one.mkiv b/tex/context/base/mkiv/page-one.mkiv
index a41787133..9bd6951f3 100644
--- a/tex/context/base/mkiv/page-one.mkiv
+++ b/tex/context/base/mkiv/page-one.mkiv
@@ -213,7 +213,8 @@
\global\advance\d_page_floats_inserted_top\dimexpr\ht\floatbox+\dp\floatbox+\s_page_one_between_top_insert\relax}
\def\page_one_insert_top_float % maybe remember last beforeskip
- {\insert\namedinsertionnumber\s!topfloat\bgroup
+ {\floatingpenalty\zerocount
+ \insert\namedinsertionnumber\s!topfloat\bgroup
\forgetall
\ifconditional\c_page_one_top_of_insert
\ifconditional\c_page_one_correct_top_insert
@@ -284,6 +285,7 @@
\page_floats_get
\global\advance\d_page_floats_inserted_bottom\dimexpr\ht\floatbox+\dp\floatbox+\d_strc_floats_top\relax
\ifdim\d_page_floats_inserted_bottom<\pagegoal\relax
+ \floatingpenalty\zerocount
\insert\namedinsertionnumber\s!bottomfloat\bgroup
\forgetall
\blank[\rootfloatparameter\c!spacebefore]%
@@ -570,6 +572,7 @@
\def\page_one_place_float_bottom_indeed
{\global\advance\d_page_floats_inserted_bottom\dimexpr\ht\floatbox+\dp\floatbox+\d_strc_floats_top\relax
+ \floatingpenalty\zerocount
\insert\namedinsertionnumber\s!bottomfloat\bgroup
\forgetall
\blank[\rootfloatparameter\c!spacebefore]%
diff --git a/tex/context/base/mkiv/page-sel.mkvi b/tex/context/base/mkiv/page-sel.mkvi
index eb8389032..335d01187 100644
--- a/tex/context/base/mkiv/page-sel.mkvi
+++ b/tex/context/base/mkiv/page-sel.mkvi
@@ -45,6 +45,9 @@
%D
%D This macros inserts the page, according to the settings provided.
+%D Beware: width is not the width of the image, but height can be used to control
+%D its dimensions.
+
\installcorenamespace{withpages}
\installsetuponlycommandhandler \??withpages {withpages}
@@ -64,7 +67,11 @@
{\bgroup
\dontcomplain
\getfiguredimensions[#filename]%
- \setupcurrentwithpages[\c!width=\zeropoint,\c!n=\noffigurepages,#settings]%
+ \setupcurrentwithpages
+ [\c!width=\zeropoint,%
+ \c!n=\noffigurepages,%
+ \c!category=,%
+ #settings]%
\global\c_page_selectors_n\directwithpagesparameter\c!n\relax
\scratchwidth\directwithpagesparameter\c!width\relax
\doifinset0{#emptylist}
@@ -82,7 +89,11 @@
{\bgroup
\dontcomplain
\getfiguredimensions[#filename]%
- \setupcurrentwithpages[\c!width=\zeropoint,\c!n=\noffigurepages,#settings]%
+ \setupcurrentwithpages
+ [\c!width=\zeropoint,%
+ \c!n=\noffigurepages,%
+ \c!category=,%
+ #settings]%
\global\c_page_selectors_n\directwithpagesparameter\c!n\relax
\scratchwidth\directwithpagesparameter\c!width\relax
\edef\p_selection{#selection}%
@@ -108,13 +119,19 @@
\egroup}
\def\page_selectors_filter_a_page#filename#page%
- {\hbox to \textwidth
+ {\hpack to \textwidth
{\ifdim\scratchwidth>\zeropoint
\rightorleftpageaction{\scratchwidth\zeropoint}{\hfill}%
\fi
- \setbox\scratchbox\hbox
+ \setbox\scratchbox\hpack
{\hskip-\scratchwidth
- \externalfigure[#filename][\c!page=#page,\c!height=\textheight]\hss}%
+ \edef\p_category{\directwithpagesparameter\c!category}% \useexternalfigure[foo][width=\textwidth]
+ \ifx\p_category\empty
+ \externalfigure[#filename][\c!page=#page,\c!height=\textheight]%
+ \else
+ \externalfigure[#filename][\p_category][\c!page=#page]%
+ \fi
+ \hss}%
\wd\scratchbox\zeropoint
\box\scratchbox}
\page}
@@ -125,14 +142,19 @@
\def\page_selectors_copy[#filename][#settings][#figuresettings]%
{\bgroup
\getfiguredimensions[#filename]%
- \setupcurrentwithpages[\c!marking=\v!off,\c!offset=\zeropoint,\c!n=\noffigurepages,#settings]%
+ \setupcurrentwithpages
+ [\c!marking=\v!off,%
+ \c!offset=\zeropoint,%
+ \c!n=\noffigurepages,%
+ \c!category=,%
+ #settings]%
\global\c_page_selectors_n\directwithpagesparameter\c!n\relax
\scratchoffset\directwithpagesparameter\c!offset\relax
\dorecurse\c_page_selectors_n
{\vbox to \textheight
{\hsize\textwidth
\centeredbox
- {\doifelse{\directwithpagesparameter\c!marking}\v!on\cuthbox\hbox % only place where cuthbox is used
+ {\doifelse{\directwithpagesparameter\c!marking}\v!on\cuthbox\hpack % only place where cuthbox is used
{\ifdim\scratchoffset>\zeropoint\relax
\advance\vsize -2\scratchoffset
\advance\hsize -2\scratchoffset
@@ -187,6 +209,7 @@
\c!before=\page,\c!after=\page,\c!inbetween=\blank,
\c!frame=,\c!background=,\c!backgroundcolor=,
\c!name={#filename},
+ \c!category=,
#settings]%
\global\c_page_selectors_n\directwithpagesparameter\c!n\relax
\directwithpagesparameter\c!before
@@ -199,7 +222,7 @@
\directwithpagesparameter\c!after
\egroup}
-\setvalue{\??combinepagesalternative\v!a}%
+\setvalue{\??combinepagesalternative\v!a}% use hpacks
{\global\combinedpagescounter\directwithpagesparameter\c!start\relax
\doloop
{\vbox to \textheight
@@ -322,8 +345,14 @@
\global\let\slicedpagenumber\!!zerocount
\getfiguredimensions[#filename]%
\setupcurrentwithpages
- [\c!offset=\zeropoint,\c!hoffset=\zeropoint,\c!voffset=\zeropoint,
- \c!width=\figurewidth,\c!height=\figureheight,\c!n=\noffigurepages,#oddsettings]%
+ [\c!offset=\zeropoint,%
+ \c!hoffset=\zeropoint,%
+ \c!voffset=\zeropoint,
+ \c!width=\figurewidth,%
+ \c!height=\figureheight,%
+ \c!n=\noffigurepages,%
+ \c!category=,%
+ #oddsettings]%
\global\c_page_selectors_n\directwithpagesparameter\c!n\relax
\ifnum\c_page_selectors_n>\zerocount
\definepapersize
diff --git a/tex/context/base/mkiv/page-set.mkiv b/tex/context/base/mkiv/page-set.mkiv
index 6e6759208..2cea31e1c 100644
--- a/tex/context/base/mkiv/page-set.mkiv
+++ b/tex/context/base/mkiv/page-set.mkiv
@@ -1515,7 +1515,7 @@
\def\doOTRSETgotoCOLROW#1% <number>|<number>*<number>
{\bgroup % really needed
- \splitstring#1\at*\to\column\and\row
+ \splitatasterisk{#1}\column\row
\bgroup
\ifx\column\empty\else\expanded{\doOTRSETgotoCOLUMN{\column}}\fi
\egroup
diff --git a/tex/context/base/mkiv/page-sid.mkiv b/tex/context/base/mkiv/page-sid.mkiv
index 2c1c624df..f32a443be 100644
--- a/tex/context/base/mkiv/page-sid.mkiv
+++ b/tex/context/base/mkiv/page-sid.mkiv
@@ -38,7 +38,6 @@
\newdimen \d_page_sides_progress
\newdimen \d_page_sides_page_total
\newdimen \d_page_sides_saved_depth
-\newdimen \d_page_sides_grid_shift
\newbox \b_page_sides_bottom
@@ -56,8 +55,8 @@
\newdimen \d_page_sides_shift
\newdimen \d_page_sides_extrashift
-\newdimen \d_page_sided_leftshift
-\newdimen \d_page_sided_rightshift
+\newdimen \d_page_sides_leftshift
+\newdimen \d_page_sides_rightshift
\newdimen \d_page_sides_leftskip
\newdimen \d_page_sides_rightskip
\newdimen \d_page_sides_maximum
@@ -78,7 +77,7 @@
\def\page_sides_process_float_cutspace {\global\c_page_sides_float_type\pluseight\page_sides_handle_float}
\def\page_sides_process_float_margin {\global\c_page_sides_float_type\pluseight\page_sides_handle_float}
-\let\logsidefloat \relax
+\let\logsidefloat\relax
\newif\iftracesidefloats % public (might change)
@@ -288,13 +287,13 @@
% alternative method (unsnapped)
%
% \def\page_sides_flush_floats_indeed
-% {\scratchdimen\dimexpr\d_page_sides_vsize-\d_page_sides_bottomskip-\pagetotal\relax
+% {\privatescratchdimen\dimexpr\d_page_sides_vsize-\d_page_sides_bottomskip-\pagetotal\relax
% \ifdim\parskip>\zeropoint % why this test ?
-% \ifdim\scratchdimen>\parskip
-% \blank[\v!nowhite,\the\scratchdimen] % better in stages
+% \ifdim\privatescratchdimen>\parskip
+% \blank[\v!nowhite,\the\privatescratchdimen] % better in stages
% \fi
% \else
-% \blank[\the\scratchdimen]
+% \blank[\the\privatescratchdimen]
% \fi}
\def\page_sides_check_floats_after_par
@@ -364,6 +363,7 @@
\def\page_sides_output_routine_yes % we need to rework this ... add pagediscards and such
{\unvbox\normalpagebox % bah, and the discards?
+% \pagediscards
\setbox\b_page_sides_bottom\lastbox
\ifdim\wd\b_page_sides_bottom>\d_page_sides_hsize
\penalty-201 % hm, i really need to write this from scatch
@@ -416,7 +416,7 @@
% {\ifcase\c_page_sides_float_type
% \vbox{#1}%
% \or % 1
-% \kern\d_page_sided_leftshift
+% \kern\d_page_sides_leftshift
% \kern\d_page_sides_shift
% \vbox{#1}%
% \kern-\d_page_sides_extrashift
@@ -429,7 +429,7 @@
% \vbox{#1}%
% \kern-\d_page_sides_extrashift
% \or % 4
-% \kern\d_page_sided_leftshift
+% \kern\d_page_sides_leftshift
% \kern\d_page_sides_shift
% \vbox{#1\removedepth}%
% \kern-\d_page_sides_extrashift
@@ -437,7 +437,7 @@
% \kern-\d_page_sides_extrashift
% \vbox{#1}%
% \kern\d_page_sides_shift
-% \kern\d_page_sided_rightshift
+% \kern\d_page_sides_rightshift
% \or % 6
% \kern-\d_page_sides_extrashift
% \vbox{#1}%
@@ -450,7 +450,7 @@
% \kern-\d_page_sides_extrashift
% \vbox{#1}%
% \kern\d_page_sides_shift
-% \kern\d_page_sided_rightshift
+% \kern\d_page_sides_rightshift
% \fi}
%
% The compact way:
@@ -458,9 +458,9 @@
\def\page_sides_relocate_float#1%
{\global\setbox\floatbox\hpack
{\ifnum\c_page_sides_float_type=\plusfour
- \kern\d_page_sided_leftshift
+ \kern\d_page_sides_leftshift
\else\ifnum\c_page_sides_float_type=\plusone
- \kern\d_page_sided_leftshift
+ \kern\d_page_sides_leftshift
\fi\fi
\ifnum\c_page_sides_float_type>\plusfour
\kern-\d_page_sides_extrashift
@@ -474,27 +474,27 @@
\kern-\d_page_sides_extrashift
\fi
\ifnum\c_page_sides_float_type=\pluseight
- \kern\d_page_sided_rightshift
+ \kern\d_page_sides_rightshift
\else\ifnum\c_page_sides_float_type=\plusfive
- \kern\d_page_sided_rightshift
+ \kern\d_page_sides_rightshift
\fi\fi}}
\def\page_sides_apply_vertical_shift
{\ifnum\c_page_sides_align=\plusfour
\getnoflines{\ht\floatbox}%
- \scratchdimen\dimexpr\noflines\lineheight-\strutdepth\relax
+ \privatescratchdimen\dimexpr\noflines\lineheight-\strutdepth\relax
\getrawnoflines\d_page_sides_topskip
- \advance\scratchdimen\noflines\lineheight
+ \advance\privatescratchdimen\noflines\lineheight
% todo: maybe rounding problem here
% \global\setbox\floatbox\hbox{\lower\lineheight\box\floatbox}%
\global\setbox\floatbox\hpack{\lower\strutdepth\box\floatbox}%
- \ht\floatbox\scratchdimen
+ \ht\floatbox\privatescratchdimen
\dp\floatbox\zeropoint
\fi
\ifcase\c_page_sides_align \else
\global\d_page_sides_topskip\zeropoint
\fi
- \scratchdimen
+ \privatescratchdimen
\ifnum\c_page_sides_float_type<\plusfour
\d_page_sides_topskip
\else\ifnum\c_page_sides_float_type>\plusfive
@@ -505,26 +505,26 @@
% the top of the box is at the previous baseline
\ifcase\c_page_sides_align
% 0 normal
- \advance\scratchdimen\strutdepth % or \openstrutdepth
+ \advance\privatescratchdimen\strutdepth % or \openstrutdepth
\or % 1 height
- \advance\scratchdimen\strutdepth % or \openstrutdepth
+ \advance\privatescratchdimen\strutdepth % or \openstrutdepth
\or % 2 line
\or % 3 depth
- \advance\scratchdimen\lineheight % or \openlineheight
- \advance\scratchdimen\strutdepth % or \openstrutdepth
+ \advance\privatescratchdimen\lineheight % or \openlineheight
+ \advance\privatescratchdimen\strutdepth % or \openstrutdepth
\or % 4 grid
- \scratchdimen\zeropoint
+ \privatescratchdimen\zeropoint
\or
- \advance\scratchdimen\strutheight % or \openstrutheight
+ \advance\privatescratchdimen\strutheight % or \openstrutheight
\fi
% new
\global\c_page_sides_lines_done\zerocount
\ifnum\c_page_sides_n_of_lines>\zerocount
- \advance\scratchdimen\c_page_sides_n_of_lines\lineheight
+ \advance\privatescratchdimen\c_page_sides_n_of_lines\lineheight
\fi
\global\setbox\floatbox\hpack % why extra box
{\vbox
- {\vskip\scratchdimen
+ {\vskip\privatescratchdimen
\nointerlineskip
\box\floatbox
\ifnum\c_page_sides_align=\plusfive \vskip-\lineheight \fi}}%
@@ -552,33 +552,25 @@
\prevdepth\d_page_sides_saved_depth}
\def\page_sides_place_float_normal
- {\d_page_sides_grid_shift\zeropoint % be nice
- \page_sides_push_float_inline\firstofoneargument}
+ {\page_sides_push_float_inline\firstofoneargument}
% The following needs some more work .. consider this a quick hack. We
% probably need an mkiv hanging grid option.
\def\page_sides_place_snap_to_grid#1%
- {\snaptogrid[\v!line,\v!offset:\the\d_page_sides_grid_shift]\hbox{#1}}
-
-% this will be a grid option in float placement:
-
-\newconstant\c_page_sides_place_grid_shift \c_page_sides_place_grid_shift\plustwo
+ {\edef\p_grid{\floatparameter\c!grid}%
+ \ifx\p_grid\empty\else
+ \snaptogrid[\p_grid]%
+ \fi
+ \hbox{#1}}
\def\page_sides_place_float_grid
{\getrawnoflines\d_page_sides_height % raw ?
\d_page_sides_height\noflines\lineheight
- \d_page_sides_grid_shift\the\dimexpr \plustwo\lineheight
- \ifcase\c_page_sides_place_grid_shift
- -3\lineheight % high
- \or
- -2.5\lineheight % half (does not work currently)
- \else
- -2\lineheight % low
- \fi
- \relax
\page_sides_push_float_inline\page_sides_place_snap_to_grid}
+\let\strc_floats_mark_par_as_free\relax
+
\def\page_sides_push_float_inline#1%
{\begingroup
\reseteverypar % needed !
@@ -587,6 +579,7 @@
\page_sides_insert_info
\relax
\lefttoright % \textdir TLT\relax % or \ifconditional\displaylefttoright below (more work)
+ \strc_floats_mark_par_as_free
\ifcase\c_page_sides_float_type
% invalid
\or % backspace
@@ -650,7 +643,7 @@
\global\setfalse\c_page_floats_room
\else
\ifdim\dimexpr\pagegoal-\d_page_sides_vsize\relax<\d_page_sides_bottomskip
- \global\advance\d_page_sides_vsize \dimen0
+ % just weird: \global\advance\d_page_sides_vsize \dimen0
\global\settrue\c_page_sides_short
\page_otr_sides_push_penalties
% why was this \global\holdinginserts\plusone
@@ -671,30 +664,34 @@
% \vskip-\struttotal
% \endgroup}
-\installtextracker
- {sidefloats.anchor}
- {\let\page_sides_anchor\page_sides_anchor_yes}
- {\let\page_sides_anchor\page_sides_anchor_nop}
-
-\def\page_sides_anchor_yes
- {\darkred
- \hskip-5\emwidth
- \vrule\s!height.05\exheight\s!depth.05\exheight\s!width10\emwidth}
-
-\def\page_sides_anchor_nop
- {\strut}
-
-\let\page_sides_anchor\page_sides_anchor_nop
+% \installtextracker
+% {sidefloats.anchor}
+% {\let\page_sides_anchor\page_sides_anchor_yes}
+% {\let\page_sides_anchor\page_sides_anchor_nop}
+%
+% \def\page_sides_anchor_yes
+% {\darkred
+% \hskip-5\emwidth
+% \vrule\s!height.05\exheight\s!depth.05\exheight\s!width10\emwidth}
+%
+% \def\page_sides_anchor_nop
+% {\strut}
+%
+% \let\page_sides_anchor\page_sides_anchor_nop
+%
+% \def\page_sides_prepare_space
+% {\par
+% \begingroup
+% \reseteverypar
+% \dontleavehmode\hpack to \zeropoint{\page_sides_anchor\hss\strut}%
+% \vskip-\parskip
+% \vskip-\struttotal
+% \inhibitblank
+% \endgroup}
\def\page_sides_prepare_space
- {\par
- \begingroup
- \reseteverypar
- \dontleavehmode\hpack to \zeropoint{\page_sides_anchor\hss\strut}%
- \vskip-\parskip
- \vskip-\struttotal
- \inhibitblank
- \endgroup}
+ {\fakenextstrutline
+ \inhibitblank}
\def\page_sides_handle_float#1% grid (4) is rather experimental
{\page_sides_prepare_space
@@ -725,8 +722,8 @@
\let\page_sides_check_floats\page_sides_check_floats_indeed
\unexpanded\def\page_sides_check_floats_set
- {\scratchdimen\dimexpr\d_page_sides_progress+\strutht-\roundingeps\relax
- \c_page_sides_n_of_hang\scratchdimen
+ {\privatescratchdimen\dimexpr\d_page_sides_progress+\strutht-\roundingeps\relax
+ \c_page_sides_n_of_hang\privatescratchdimen
\divide\c_page_sides_n_of_hang \baselineskip\relax
\ifnum\c_page_sides_n_of_hang>\zerocount
% new from here (needs test case, old code)
@@ -735,31 +732,31 @@
\ifcase\c_page_sides_lines_done
\global\c_page_sides_lines_done\c_page_sides_n_of_hang
\else
- \scratchcounter\c_page_sides_lines_done
- \advance\scratchcounter-\c_page_sides_n_of_hang
- \global\advance\c_page_sides_n_of_lines-\scratchcounter
+ \privatescratchcounter\c_page_sides_lines_done
+ \advance\privatescratchcounter-\c_page_sides_n_of_hang
+ \global\advance\c_page_sides_n_of_lines-\privatescratchcounter
\fi
\fi
% hm, when do we get the parshape branch? needs testing
\ifnum\c_page_sides_n_of_lines>\zerocount
- \scratchtoks\emptytoks
- \scratchcounter\c_page_sides_n_of_lines
- \scratchdimen\dimexpr\hsize-\d_page_sides_width\relax
+ \privatescratchtoks\emptytoks
+ \privatescratchcounter\c_page_sides_n_of_lines
+ \privatescratchdimen\dimexpr\hsize-\d_page_sides_width\relax
\dorecurse\c_page_sides_n_of_lines
- {\appendtoks \zeropoint \hsize \to \scratchtoks}%
+ {\appendtoks \zeropoint \hsize \to \privatescratchtoks}%
\ifnum\c_page_sides_n_of_hang>\c_page_sides_n_of_lines
\advance\c_page_sides_n_of_hang -\c_page_sides_n_of_lines\relax
- \advance\scratchcounter\c_page_sides_n_of_hang
+ \advance\privatescratchcounter\c_page_sides_n_of_hang
\dorecurse\c_page_sides_n_of_hang % weird, shouldn't that be scratchcounter
{\ifnum\c_page_sides_float_type>\plusfour
- \appendtoks \zeropoint \scratchdimen \to \scratchtoks
+ \appendtoks \zeropoint \privatescratchdimen \to \privatescratchtoks
\else
- \appendtoks \d_page_sides_width\scratchdimen \to \scratchtoks
+ \appendtoks \d_page_sides_width\privatescratchdimen \to \privatescratchtoks
\fi}%
\fi
\parshape
- \numexpr\scratchcounter+\plusone\relax
- \the\scratchtoks % \scratchcounter
+ \numexpr\privatescratchcounter+\plusone\relax
+ \the\privatescratchtoks % \privatescratchcounter
\zeropoint \hsize % \plusone
\relax
\else
@@ -797,12 +794,12 @@
\def\page_sides_inject_dummy_lines
{\begingroup
- \scratchcounter\pageshrink
- \divide\scratchcounter \baselineskip
- \advance\scratchcounter \plusone
+ \privatescratchcounter\pageshrink
+ \divide\privatescratchcounter \baselineskip
+ \advance\privatescratchcounter \plusone
\parskip\zeropoint
- \dorecurse\scratchcounter{\hpack to \hsize{}}%
- \kern-\scratchcounter\baselineskip
+ \dorecurse\privatescratchcounter{\hpack to \hsize{}}%
+ \kern-\privatescratchcounter\baselineskip
\penalty\zerocount
\endgroup}
diff --git a/tex/context/base/mkiv/page-str.lua b/tex/context/base/mkiv/page-str.lua
index b2f597633..4aeffffd8 100644
--- a/tex/context/base/mkiv/page-str.lua
+++ b/tex/context/base/mkiv/page-str.lua
@@ -8,35 +8,28 @@ if not modules then modules = { } end modules ['page-str'] = {
-- streams -> managers.streams
--- work in progresss .. unfinished
+-- work in progresss .. unfinished .. non-optimized
local concat, insert, remove = table.concat, table.insert, table.remove
local nodes, node = nodes, node
-local nodepool = nodes.pool
local tasks = nodes.tasks
local implement = interfaces.implement
-local new_kern = nodepool.kern
-local new_glyph = nodepool.glyph
-
local nodecodes = nodes.nodecodes
-local gluecodes = nodes.gluecodes
-local hlist_code = nodecodes.hlist
-local vlist_code = nodecodes.vlist
-local glue_code = nodecodes.glue
-
-local slide_nodelist = node.slide
-local write_node = node.write
-local free_node = node.free
-local copy_nodelist = node.copy_list
-local vpack_nodelist = node.vpack
-local hpack_nodelist = node.hpack
+
+local slide_node_list = nodes.slide
+local write_node = nodes.write
+local flush_node = nodes.flush
+local copy_node_list = nodes.copy_list
+local vpack_node_list = nodes.vpack
local settings_to_array = utilities.parsers.settings_to_array
+local enableaction = nodes.tasks.enableaction
+
local texgetdimen = tex.getdimen
local texgetbox = tex.getbox
@@ -81,7 +74,7 @@ function streams.collect(head,where)
end
local last = dana[#dana]
if last then
- local tail = slide_nodelist(last)
+ local tail = slide_node_list(last)
tail.next, head.prev = head, tail
elseif last == false then
dana[#dana] = head
@@ -125,7 +118,7 @@ function streams.flush(name,copy) -- problem: we need to migrate afterwards
for i=1,dn do
local di = dana[i]
if di then
- write_node(copy_nodelist(di.list)) -- list, will be option
+ write_node(copy_node_list(di.list)) -- list, will be option
end
end
if copy then
@@ -140,7 +133,7 @@ function streams.flush(name,copy) -- problem: we need to migrate afterwards
if di then
write_node(di.list) -- list, will be option
di.list = nil
- free_node(di)
+ flush_node(di)
end
end
end
@@ -173,17 +166,7 @@ function streams.synchronize(list) -- this is an experiment !
local dana = data[name]
local slot = dana[m]
if slot then
--- for n in nodes.traverse(slot) do
--- local id = n.id
--- if id == hlist_code or id == vlist_code then
--- print(n,n.height,n.depth)
--- elseif id == glue_code then
--- print(n,n.width,gluecodes[n.subtype])
--- else
--- print(n)
--- end
--- end
- local vbox = vpack_nodelist(slot)
+ local vbox = vpack_node_list(slot)
local ht, dp = vbox.height, vbox.depth
if ht > height then
height = ht
@@ -220,11 +203,11 @@ function streams.synchronize(list) -- this is an experiment !
else
-- this is not yet ok as we also need to keep an eye on vertical spacing
-- so we might need to do some splitting or whatever
- local tail = vbox.list and slide_nodelist(vbox.list)
+ local tail = vbox.list and slide_node_list(vbox.list)
local n, delta = 0, delta_height -- for tracing
while delta > 0 do
-- we need to add some interline penalties
- local line = copy_nodelist(texgetbox("strutbox"))
+ local line = copy_node_list(texgetbox("strutbox"))
line.height, line.depth = strutht, strutdp
if tail then
tail.next, line.prev = line, tail
@@ -232,9 +215,9 @@ function streams.synchronize(list) -- this is an experiment !
tail = line
n, delta = n +1, delta - struthtdp
end
- dana[m] = vpack_nodelist(vbox.list)
+ dana[m] = vpack_node_list(vbox.list)
vbox.list = nil
- free_node(vbox)
+ flush_node(vbox)
if trace_flushing then
report_streams("slot %s:%s with delta (%p,%p) is compensated by %s lines",m,i,delta_height,delta_depth,n)
end
@@ -252,7 +235,7 @@ tasks.appendaction("mvlbuilders", "normalizers", "streams.collect")
tasks.disableaction("mvlbuilders", "streams.collect")
function streams.initialize()
- tasks.enableaction ("mvlbuilders", "streams.collect")
+ enableaction("mvlbuilders","streams.collect")
function streams.initialize() end
end
@@ -260,8 +243,8 @@ end
-- todo: better names, enable etc
implement {
- name = "initializestream",
- actions = streams.initialize,
+ name = "initializestream",
+ actions = streams.initialize,
onlyonce = true,
}
diff --git a/tex/context/base/mkiv/page-txt.mkvi b/tex/context/base/mkiv/page-txt.mkvi
index 515d16e13..b67e3aa74 100644
--- a/tex/context/base/mkiv/page-txt.mkvi
+++ b/tex/context/base/mkiv/page-txt.mkvi
@@ -28,9 +28,9 @@
%D {setuptop, setupheader, setuptext,
%D setupfooter, setupbottom}
%D
-%D The macros in this module sometimes look a bit more complicated
-%D than needed, which is a direct result of the fact that their
-%D ancestors are quite old and upward compatibility is a must.
+%D The macros in this module sometimes look a bit more complicated than
+%D needed, which is a direct result of the fact that their ancestors are
+%D quite old and upward compatibility is a must.
%D
%D \showsetup{setuptop}
%D \showsetup{setupheader}
@@ -154,11 +154,10 @@
%D {setuptoptexts, setupheadertexts, setuptexttexts,
%D setupfootertexts, setupbottomtexts}
%D
-%D The next macros take one or more arguments. The exact setup
-%D depends on the number of arguments. Although not that
-%D intuitive, the current scheme evolved out of the original.
-%D When margin and edge texts as well as middle texts showed
-%D up, the current odd|/|even scheme surfaced.
+%D The next macros take one or more arguments. The exact setup depends on the number
+%D of arguments. Although not that intuitive, the current scheme evolved out of the
+%D original. When margin and edge texts as well as middle texts showed up, the
+%D current odd|/|even scheme surfaced.
%D
%D \showsetup{setuptoptexts}
%D \showsetup{setupheadertexts}
@@ -174,80 +173,8 @@
% todo: \setuplayoutelementtext
-% An alternative approach is to have more variables but that does not
-% make the code less complex (probably more).
-
-% \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}
+%D An alternative approach is to have more variables but that does not make the code
+%D less complex (probably more).
\unexpanded\def\page_layouts_setup_text_six#vertical#horizontal#a#b#c#d%
{\edef\currentlayoutelement{#vertical:#horizontal}%
@@ -332,8 +259,8 @@
\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.
+%D Left and right texts are swapped on odd and even pages, but only when double
+%D sided typesetting is enabled.
\unexpanded\def\page_layouts_process_element_double
{\doifelseoddpage
@@ -346,8 +273,7 @@
\def\page_layouts_process_element_double_even#lstyle#color#lwidth#lcontent#rstyle#rcolor#rwidth#rcontent%
{\page_layouts_process_element_single#rstyle#rcolor#rwidth{#rcontent}}
-%D The next macro will be cleaned up and made less messy and
-%D dependent.
+%D The next macro will be cleaned up and made less messy and dependent.
\let\m_page_layouts_element_content\empty
@@ -392,8 +318,7 @@
\setvalue{\??layouttextspecial\v!pagenumber}{\page_layouts_place_page_number}
\setvalue{\??layouttextspecial\v!date }{\currentdate}
-%D When specified, the texts are automatically limited in
-%D length.
+%D When specified, the texts are automatically limited in length.
% % where used ?
%
@@ -417,9 +342,8 @@
\appendtoks \page_layouts_place_text_line\v!footer\footerheight \to \footertextcontent
\appendtoks \page_layouts_place_text_line\v!bottom\bottomheight \to \bottomtextcontent
-%D Texts can be disabled, moved up and ignored, depending in
-%D the \type {status} variable. This is handled by the next
-%D couple of macros.
+%D Texts can be disabled, moved up and ignored, depending in the \type {status}
+%D variable. This is handled by the next couple of macros.
\newcount\c_page_layouts_element_state_n
@@ -494,21 +418,31 @@
\page_layouts_place_text_line_indeed#vertical#height%
\egroup}
+% \setupheadertexts [11]
+% \definetext [title] [header] [aa]
+% \setupheadertexts [11] [22]
+% \definetext [title] [header] [aa] [bb]
+% \setupheadertexts [text] [11] [22]
+% \definetext [title] [header] [text] [aa] [bb]
+% \setupheadertexts [11] [22] [33] [44]
+% \definetext [title] [header] [aa] [bb] [cc] [dd]
+% \setupheadertexts [text] [11] [22] [33] [44]
+% \definetext [title] [header] [text] [aa] [bb] [cc] [dd]
+
\def\page_layouts_place_text_line_unknown#vertical#height%
{\global\settrue\resyncaftertextline
\begingroup % new
\page_layouts_reset_element_status#vertical%
- \csname\namedlayoutelementhash#vertical\textlinestatus\endcsname
- \csname\namedlayoutelementhash#vertical\v!text \textlinestatus\endcsname
- \csname\namedlayoutelementhash#vertical\v!margin\textlinestatus\endcsname
- \csname\namedlayoutelementhash#vertical\v!edge \textlinestatus\endcsname
+ \begincsname\namedlayoutelementhash{#vertical}\textlinestatus\endcsname
+ \begincsname\namedlayoutelementhash{#vertical:\v!text}\textlinestatus\endcsname
+ \begincsname\namedlayoutelementhash{#vertical:\v!margin}\textlinestatus\endcsname
+ \begincsname\namedlayoutelementhash{#vertical:\v!edge}\textlinestatus\endcsname
\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.
+%D The following macro has to be called after a page is flushed.
\unexpanded\def\resetlayouttextlines % public
{\csname\??layouttextsreset\v!top \endcsname
@@ -523,7 +457,7 @@
\fi}
\def\getspecificlayouttext#vertical#horizontal#what%
- {\csname\namedlayoutelementhash{#vertical:#horizontal}#what\endcsname}
+ {\begincsname\namedlayoutelementhash{#vertical:#horizontal}#what\endcsname}
% \settext[header][text][middle][xxx][yyy]
@@ -565,9 +499,8 @@
\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
-%D list registers mentioned before.
+%D The placement of a whole line is handled by the next two macros. These are hooked
+%D into the general purpose token list registers mentioned before.
\def\page_layouts_place_text_line_indeed#vertical#height%
{\let\currentlayouttextline#vertical%
@@ -692,10 +625,9 @@
\hbox \layoutcomponentboxattribute to #width{#content}%
\layoutelementparameter\c!after}}
-%D Although it is far better to use backgrounds for this
-%D purpose, one can add a rule in the following way. This
-%D method makes the rules disappear in case of an empty text
-%D line. Consider this a feature.
+%D Although it is far better to use backgrounds for this purpose, one can add a rule
+%D in the following way. This method makes the rules disappear in case of an empty
+%D text line. Consider this a feature.
%D
%D \starttyping
%D \setupheadertexts[left][right]
@@ -717,14 +649,13 @@
%D \macros
%D {definetext}
%D
-%D Some macros ago, we implemented the \type {status} option
-%D \type {unknown}. This one is used to take care of
-%D symbolic texts handlers.
+%D Some macros ago, we implemented the \type {status} option \type {unknown}. This
+%D one is used to take care of symbolic texts handlers.
%D
%D \showsetup{definetext}
%D
-%D The next example demonstrates how we can use this
-%D mechanism to provide page (event) dependent text lines.
+%D The next example demonstrates how we can use this mechanism to provide page
+%D (event) dependent text lines.
%D
%D \starttyping
%D \definetext[chapter][footer][pagenumber]
@@ -738,24 +669,6 @@
\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}{\page_layouts_setup_text_six {#vertical}{#horizontal}{#a}{#b}{#c}{#d}}%
@@ -784,8 +697,8 @@
\installpagebreakmethod \v!footer
{\doifnot{\namedlayoutelementparameter\v!footer\c!state}\v!stop{\setuplayoutelement[\v!footer][\c!state=\v!empty]}}
-%D While the header and footer lines are moved away from the
-%D main text, the top and bottom lines are centered.
+%D While the header and footer lines are moved away from the main text, the top and
+%D bottom lines are centered.
\setuplayoutelement[\v!top ][\c!state=\v!normal,\c!n=0,\c!before=\vss,\c!after=\vss,\c!strut=]
\setuplayoutelement[\v!header][\c!state=\v!normal,\c!n=0,\c!before=, \c!after=\vss,\c!strut=\v!yes]
@@ -794,10 +707,10 @@
\setuplayoutelement[\v!bottom][\c!state=\v!normal,\c!n=0,\c!before=\vss,\c!after=\vss,\c!strut=]
%D Moved here from strc-pag:
-
-% We reset a previous location but only when it has a pagenumber
-% associated. This is a rather messy test but better than the MkII
-% way where we use states and keep settings.
+%D
+%D We reset a previous location but only when it has a pagenumber associated. This
+%D is a rather messy test but better than the MkII way where we use states and keep
+%D settings.
\let\m_page_layouts_page_number_location \relax
\let\m_page_layouts_page_number_location_v\relax
@@ -918,9 +831,9 @@
\the\toptextcontent
\vskip\dimexpr\topheight+\topdistance\relax
\the\headertextcontent
- \vskip\dimexpr\headerheight+\headerdistance\relax
+ \vskip\dimexpr\headerheight+\headerdistance+\textdistance\relax
\anch_positions_place_anchors
- \vskip-\textheight
+ \vskip\dimexpr-\textdistance-\textheight\relax
\the\texttextcontent
\vskip\textheight
\the\everyendoftextbody
@@ -933,14 +846,19 @@
\smashbox\b_page_layouts_element
\box\b_page_layouts_element}
+% \ifdefined\page_prepare_backgrounds\else
+% \let\page_prepare_backgrounds\gobbleoneargument
+% \fi
+
\def\page_insert_body#1#2%
{\setbox\b_page_layouts_element\vpack
{\offinterlineskip
\calculatereducedvsizes
\calculatehsizes
\swapmargins
- \vskip\dimexpr\headerheight+\headerdistance+\layoutparameter\c!textdistance\relax
+ \vskip\dimexpr\headerheight+\headerdistance+\textdistance\relax
\dontleavehmode
+ %\page_prepare_backgrounds{#2}%
\hbox to \makeupwidth
{\begingroup
\swapmargins
@@ -975,26 +893,24 @@
\smashbox\b_page_layouts_element
\box\b_page_layouts_element}
-%D The main text area has to be combined with some additional
-%D (tracing) information.
-
-% will be stored as normal and overloaded in page-lyr and later in
-% page-spr we overload the the stored version .. evenatually i will
-% clear up the experimental mess
+%D The main text area has to be combined with some additional (tracing) information.
+%D
+%D This will be stored as normal and overloaded in page-lyr and later in page-spr we
+%D overload the the stored version .. evenatually i will clear up the experimental
+%D mess.
\def\settextpagecontent#1#2#3% #2 and #3 will disappear / is overloaded
- {\setbox#1\hbox to \makeupwidth % maybe \hpack
+ {\setbox#1\hpack to \makeupwidth
{\hss % so don't change this
\setlayoutcomponentattribute{\v!page:\v!text}%
- \vbox \layoutcomponentboxattribute to \textheight
+ \vpack \layoutcomponentboxattribute to \textheight
{\offinterlineskip
\freezetextwidth
\hsize\textwidth % local variant of \sethsize <<< in columns?
\boxmaxdepth\maxdepth
\noindent % content can be < \hsize
- \page_otr_command_package_contents#2#3}%
+ \page_otr_command_package_contents#2#3}% this will vbox
\hss}%
\dp#1\zeropoint}
\protect \endinput
-
diff --git a/tex/context/base/mkiv/publ-aut.lua b/tex/context/base/mkiv/publ-aut.lua
index 5ed25f288..6ad8b1296 100644
--- a/tex/context/base/mkiv/publ-aut.lua
+++ b/tex/context/base/mkiv/publ-aut.lua
@@ -15,7 +15,6 @@ local lpeg = lpeg
local type, next, tostring = type, next, tostring
local concat = table.concat
-local utfchar = utf.char
local utfsub = utf.sub
local formatters = string.formatters
@@ -27,7 +26,6 @@ local context = context
----- commands = commands
local implement = interfaces.implement
-local ctx_setmacro = interfaces.setmacro
local publications = publications
@@ -82,13 +80,13 @@ local andsplitter = Ct { "start",
local commasplitter = Ct { "start",
start = Cs(V("outer")) + (p_empty + Cs((V("inner") + (1-p_comma))^1) + p_comma)^1,
- outer = (P("{")/"") * ((V("inner") + P(1-P("}")))^1) * (P("}")/""),
+ outer = (P("{")/"") * ((V("inner") + P(1-P("}")))^1) * ((P("}") * P(-1))/""),
inner = P("{") * ((V("inner") + P(1-P("}")))^1) * P("}"),
}
local spacesplitter = Ct { "start",
start = Cs(V("outer")) + (Cs((V("inner") + (1-p_space))^1) + p_space)^1,
- outer = (P("{")/"") * ((V("inner") + P(1-P("}")))^1) * (P("}")/""),
+ outer = (P("{")/"") * ((V("inner") + P(1-P("}")))^1) * ((P("}") * P(-1))/""),
inner = P("{") * ((V("inner") + P(1-P("}")))^1) * P("}"),
}
@@ -347,7 +345,6 @@ local currentauthorsymbol = nil
local manipulators = typesetters.manipulators
local splitmanipulation = manipulators.splitspecification
local applymanipulation = manipulators.applyspecification
-local manipulatormethods = manipulators.methods
local function value(i,field)
if currentauthordata then
diff --git a/tex/context/base/mkiv/publ-dat.lua b/tex/context/base/mkiv/publ-dat.lua
index b9c43ac44..8eb923407 100644
--- a/tex/context/base/mkiv/publ-dat.lua
+++ b/tex/context/base/mkiv/publ-dat.lua
@@ -22,9 +22,6 @@ if not characters then
dofile(resolvers.findfile("char-tex.lua"))
end
-local chardata = characters.data
-local lowercase = characters.lower
-
local lower, find, sub = string.lower, string.find, string.sub
local concat, copy, tohash = table.concat, table.copy, table.tohash
local next, type, rawget = next, type, rawget
@@ -46,9 +43,11 @@ local p_utf8character = lpegpatterns.utf8character
local trace = false trackers.register("publications", function(v) trace = v end)
local trace_duplicates = true trackers.register("publications.duplicates", function(v) trace = v end)
+local trace_strings = false trackers.register("publications.strings", function(v) trace = v end)
local report = logs.reporter("publications")
local report_duplicates = logs.reporter("publications","duplicates")
+local report_strings = logs.reporter("publications","strings")
local allocate = utilities.storage.allocate
@@ -191,8 +190,7 @@ local defaultshortcuts = allocate {
local space = p_whitespace^0
local separator = space * "+" * space
-local l_splitter = lpeg.tsplitat(separator)
-local d_splitter = lpeg.splitat (separator)
+local p_splitter = lpeg.tsplitat(separator)
local unknownfield = function(t,k)
local v = "extra"
@@ -323,7 +321,7 @@ function publications.parenttag(dataset,tag)
if not dataset or not tag then
report("error in specification, dataset %a, tag %a",dataset,tag)
elseif find(tag,"%+") then
- local tags = lpegmatch(l_splitter,tag)
+ local tags = lpegmatch(p_splitter,tag)
local parent = tags[1]
local current = datasets[dataset]
local luadata = current.luadata
@@ -541,8 +539,28 @@ do
luadata[hashtag] = entries
end
+ local f_invalid = formatters["<invalid: %s>"]
+
local function resolve(s,dataset)
- return dataset.shortcuts[s] or defaultshortcuts[s] or s -- can be number
+ local e = dataset.shortcuts[s]
+ if e then
+ if trace_strings then
+ report_strings("%a resolves to %a",s,e)
+ end
+ return e
+ end
+ e = defaultshortcuts[s]
+ if e then
+ if trace_strings then
+ report_strings("%a resolves to default %a",s,e)
+ end
+ return e
+ end
+ if tonumber(s) then
+ return s
+ end
+ report("error in database, invalid value %a",s)
+ return f_invalid(s)
end
local pattern = p_whitespace^0
@@ -582,8 +600,18 @@ do
local p_left = (p_whitespace^0 * left) / ""
local p_right = (right * p_whitespace^0) / ""
+ local keyword = C((R("az","AZ","09") + S("@_:-"))^1)
+ local key = C((1-space-equal)^1)
+ local tag = C((1-space-comma)^0)
+ local category = C((1-space-left)^1)
+ local s_quoted = ((escape*single) + collapsed + (1-single))^0
+ local d_quoted = ((escape*double) + collapsed + (1-double))^0
+
+ local reference = P("@{") * C((R("az","AZ","09") + S("_:-"))^1) * P("}")
+ local r_value = reference * Carg(1) / resolve
+
local balanced = P {
- [1] = ((escape * (left+right)) + (collapsed + 1 - (left+right))^1 + V(2))^0,
+ [1] = ((escape * (left+right)) + (collapsed + r_value + 1 - (left+right))^1 + V(2))^0,
[2] = left * V(1) * right,
}
@@ -594,26 +622,23 @@ do
local unbalanced = (left/"") * balanced * (right/"") * P(-1)
- local keyword = C((R("az","AZ","09") + S("@_:-"))^1)
- local key = C((1-space-equal)^1)
- local tag = C((1-space-comma)^0)
- local reference = keyword
- local category = C((1-space-left)^1)
- local s_quoted = ((escape*single) + collapsed + (1-single))^0
- local d_quoted = ((escape*double) + collapsed + (1-double))^0
-
+ local reference = C((R("az","AZ","09") + S("_:-"))^1)
local b_value = p_left * balanced * p_right
- -- local u_value = p_left * unbalanced * p_right -- get rid of outer { }
- -- local s_value = (single/"") * (u_value + s_quoted) * (single/"")
- -- local d_value = (double/"") * (u_value + d_quoted) * (double/"")
local s_value = (single/"") * (unbalanced + s_quoted) * (single/"")
local d_value = (double/"") * (unbalanced + d_quoted) * (double/"")
- local r_value = reference * Carg(1) /resolve
+ local r_value = P("@") * reference * Carg(1) / resolve
+ + reference * Carg(1) / resolve
+ local n_value = C(R("09")^1)
- local somevalue = d_value + b_value + s_value + r_value
+ local e_value = Cs((left * balanced * right + (1 - S(",}")))^0) * Carg(1) / function(s,dataset)
+ return resolve(s,dataset)
+ end
+
+ local somevalue = d_value + b_value + s_value + r_value + n_value + e_value
local value = Cs((somevalue * ((spacing * hash * spacing)/"" * somevalue)^0))
- value = value / function(s) return lpegmatch(lpegpatterns.stripper,s) end
+ local stripper = lpegpatterns.stripper
+ value = value / function(s) return lpegmatch(stripper,s) end
local forget = percent^1 * (1-lineending)^0
local spacing = spacing * forget^0 * spacing
@@ -636,6 +661,9 @@ do
-- converttoxml -> dataset.xmldata from dataset.luadata
+ -- author = "al-" # @AHSAI # "," # @SHAYKH # " " # @AHMAD # " Ibn " # @ZAYNIDDIN
+ -- author = {al-@{AHSAI}, @{SHAYKH} @{AHMAD} Ibn @{ZAYNIDDIN}}
+
function publications.loadbibdata(dataset,content,source,kind)
if not source then
report("invalid source for dataset %a",dataset)
@@ -1189,7 +1217,12 @@ do
end
end
- local pagessplitter = lpeg.splitat(P("-")^1)
+ local pagessplitter = lpeg.splitat((
+ P("-") + -- hyphen
+ P("—") + -- U+2014
+ P("–") + -- U+2013
+ P("‒") -- U+2012
+ )^1)
casters.range = function(str)
local first, last = lpegmatch(pagessplitter,str)
diff --git a/tex/context/base/mkiv/publ-imp-apa.lua b/tex/context/base/mkiv/publ-imp-apa.lua
index f2e7f11e1..a725bf22f 100644
--- a/tex/context/base/mkiv/publ-imp-apa.lua
+++ b/tex/context/base/mkiv/publ-imp-apa.lua
@@ -162,11 +162,13 @@ categories.standard = {
categories.book = {
sets = {
author = { "author", "editor", "publisher", "title" },
+ ineditor = { "editor" },
editionset = generic.editionset,
doi = generic.doi,
},
required = { "author" },
optional = {
+ "ineditor",
"withauthor", "translator",
"year", "month", "day",
"subtitle", "type", "file",
@@ -181,6 +183,7 @@ categories.book = {
categories.inbook = {
sets = {
author = { "author", "editor", "publisher", "title", },
+ ineditor = { "editor" },
editionset = generic.editionset,
doi = generic.doi,
},
@@ -189,9 +192,10 @@ categories.inbook = {
"year" ,
},
optional = {
+ "ineditor",
"withauthor", "translator",
"subtitle", "type", "file",
- "booktitle",
+ "booktitle", "subbooktitle",
-- APA ignores this: "chapter",
"editionset", "series",
"month",
@@ -206,6 +210,7 @@ categories.inbook = {
categories.incollection = {
sets = {
author = { "author", "editor", "publisher", "title", },
+ ineditor = { "editor" },
editionset = generic.editionset,
doi = generic.doi,
},
@@ -215,8 +220,10 @@ categories.incollection = {
"year",
},
optional = {
+ "ineditor",
"withauthor", "translator",
"subtitle", "type", "file",
+ "subbooktitle",
"editionset", "series",
-- APA ignores this: "chapter",
"month",
@@ -449,7 +456,7 @@ categories.electronic = {
categories.film = {
sets = {
doi = generic.doi,
- author = { "producer", "director", },
+ author = { "author", "producer", "director", },
},
required = {
"author",
diff --git a/tex/context/base/mkiv/publ-imp-apa.mkvi b/tex/context/base/mkiv/publ-imp-apa.mkvi
index 5600b5722..182802331 100644
--- a/tex/context/base/mkiv/publ-imp-apa.mkvi
+++ b/tex/context/base/mkiv/publ-imp-apa.mkvi
@@ -33,9 +33,13 @@
[apa]
[\c!default=default,
\c!specification=apa,
- \c!otherstext={\btxspace\btxlabeltext{apa:others}},
+ \c!otherstext={\btxspace\btxlabeltext{others}},
%c!journalconversion=\v!normal,
- \c!monthconversion=\v!month]
+ \c!monthconversion=\v!month,
+ \c!stopper:initials={. }, % with a (breakable) space
+ \c!separator:names:2={\btxcomma}, % aka namesep - in this namespace
+ \c!separator:names:3={\btxcomma\btxnobreakspace\textampersand\space}, % comma separated list
+ \c!separator:names:4={\btxnobreakspace\textampersand\space}] % last of two, no comma!
% First, define list and rendering parameters
@@ -50,6 +54,7 @@
\setupbtxlist
[apa]
[\c!alternative=\v!paragraph,
+ \c!align={normal,verytolerant,stretch},
%\c!width=\v!fit,
%\c!distance=.5\emwidth,
\c!margin=3.5\emwidth]
@@ -61,10 +66,7 @@
\c!etallimit=7,
\c!etaldisplay=6,
\c!etaloption=last,
- \c!authorconversion=invertedshort,
- \c!separator:names:2={\btxcomma}, % aka namesep - in this namespace
- \c!separator:names:3={\btxcomma\btxnobreakspace\textampersand\space}, % comma separated list
- \c!separator:names:4={\btxnobreakspace\textampersand\space}] % last of two, no comma!
+ \c!authorconversion=invertedshort]
% First, we define a namespace for a few special fields
@@ -81,11 +83,24 @@
[apa:\s!list:author]
\definebtx
+ [apa:\s!list:ineditor]
+ [apa:\s!list:editor]
+ [\c!authorconversion=normalshort]
+
+\definebtx
[apa:\s!list:translator]
[apa:\s!list:author]
[\c!authorconversion=normalshort]
\definebtx
+ [apa:\s!list:director]
+ [apa:\s!list:author]
+
+\definebtx
+ [apa:\s!list:producer]
+ [apa:\s!list:author]
+
+\definebtx
[apa:\s!list:suffix]
[apa:\s!list]
@@ -101,8 +116,8 @@
[apa:\s!list:\s!page]
[apa:\s!list]
[\c!separator:2={\btxcomma},
- \c!separator:3={\btxcomma\btxlabeltext{apa:and}\space},
- \c!separator:4={\btxspace\btxlabeltext{apa:and}\space},
+ \c!separator:3={\btxcomma\btxlabeltext{and}\space},
+ \c!separator:4={\btxspace\btxlabeltext{and}\space},
\c!left={\btxleftparenthesis},
\c!right={\btxrightparenthesis},
\c!command={\wordright}]
@@ -186,8 +201,17 @@
[apa:\s!list:title]
\definebtx
+ [apa:\s!list:booktitle:inbook]
+ [apa:\s!list:title]
+
+\definebtx
[apa:\s!list:title:inbook]
[apa:\s!list:title]
+ [\c!style=] % booktitle is set in italics
+
+\definebtx
+ [apa:\s!list:booktitle:incollection]
+ [apa:\s!list:title]
\definebtx
[apa:\s!list:title:incollection]
@@ -199,11 +223,19 @@
[apa:\s!list:title]
\definebtx
+ [apa:\s!list:booktitle:inproceedings]
+ [apa:\s!list:title]
+
+\definebtx
[apa:\s!list:title:inproceedings]
[apa:\s!list:title]
[\c!style=] % booktitle is set in italics
\definebtx
+ [apa:\s!list:booktitle:conference]
+ [apa:\s!list:title]
+
+\definebtx
[apa:\s!list:title:conference]
[apa:\s!list:title]
[\c!style=] % booktitle is set in italics
@@ -274,15 +306,14 @@
[apa:\s!cite]
[apa]
[\c!alternative=authoryear,
- \c!otherstext={\btxcomma\btxlabeltext{apa:others}},
+ \c!otherstext={\btxcomma\btxlabeltext{others}},
\c!etallimit=5,
\c!etaldisplay=1, % TODO: when 2-4, show all first time, etaldisplay subsequently...
\c!authorconversion=\v!name,
\c!sorttype=normal,
\c!compress=\v!yes, % note that cite sorts only work with compress=yes.
- \c!separator:names:2={\btxcomma},
- \c!separator:names:3={\btxcomma\btxlabeltext{apa:and}\space}, % not \textampersand
- \c!separator:names:4={\btxspace\btxlabeltext{apa:and}\space}] % not \textampersand
+ \c!separator:names:3={\btxcomma\btxlabeltext{and}\space}, % not \textampersand
+ \c!separator:names:4={\btxspace\btxlabeltext{and}\space}] % not \textampersand
\definebtx
[apa:\s!cite:name]
@@ -318,7 +349,9 @@
[apa:\s!cite:author]
[\c!left={(},
\c!right={)},
- \c!inbetween={\btxcomma}]
+ \c!inbetween={\btxcomma},
+ \c!separator:names:3={\btxcomma\textampersand\space},
+ \c!separator:names:4={\btxspace\textampersand\space}]
\definebtx
[apa:\s!cite:default]
@@ -326,8 +359,8 @@
\definebtx
[apa:\s!cite:authoryears]
- [apa:\s!cite:authoryear]
- [\c!left=,
+ [apa:\s!cite:author]
+ [\c!left=, % these two settings are perhaps redundant?
\c!right=,
\c!inbetween={\btxspace}]
@@ -335,7 +368,9 @@
[apa:\s!cite:authornum]
[apa:\s!cite:author]
[\c!left={(},
- \c!right={)}]
+ \c!right={)},
+ \c!separator:names:3={\btxcomma\textampersand\space},
+ \c!separator:names:4={\btxspace\textampersand\space}]
\definebtx
[apa:\s!cite:author:num] % todo
@@ -355,18 +390,30 @@
\c!right={)}]
\definebtx
+ [apa:\s!cite:lefttext]
+ [apa:\s!cite]
+ [\c!left=,
+ \c!right={\btxspace}]
+
+\definebtx
+ [apa:\s!cite:righttext]
+ [apa:\s!cite]
+ [\c!left={\btxcomma},
+ \c!right=]
+
+\definebtx
[apa:\s!cite:year]
[apa:\s!cite]
[\c!separator:2={\btxcomma}, % :0 and :1 - between items of a list
- \c!separator:3={\btxcomma\btxlabeltext{apa:and}\space}, % not \textampersand
- \c!separator:4={\btxspace\btxlabeltext{apa:and}\space}] % not \textampersand
+ \c!separator:3={\btxcomma\btxlabeltext{and}\space}, % not \textampersand
+ \c!separator:4={\btxspace\btxlabeltext{and}\space}] % not \textampersand
\definebtx
[apa:\s!cite:title]
[apa:\s!cite]
[\c!separator:2={\btxcomma}, % :0 and :1 - between items of a list
- \c!separator:3={\btxcomma\btxlabeltext{apa:and}\space}, % not \textampersand
- \c!separator:4={\btxspace\btxlabeltext{apa:and}\space}, % not \textampersand
+ \c!separator:3={\btxcomma\btxlabeltext{and}\space}, % not \textampersand
+ \c!separator:4={\btxspace\btxlabeltext{and}\space}, % not \textampersand
\c!command={\language[\currentbtxlanguage]}, % BAH
\c!sorttype=none,
\c!style=\v!italic]
@@ -394,8 +441,8 @@
[\c!left=,
\c!right=,
\c!separator:2={\btxcomma}, % :0 and :1 - between items of a list
- \c!separator:3={\btxcomma\btxlabeltext{apa:and}\space}, % not \textampersand
- \c!separator:4={\btxspace\btxlabeltext{apa:and}\space}] % not \textampersand
+ \c!separator:3={\btxcomma\btxlabeltext{and}\space}, % not \textampersand
+ \c!separator:4={\btxspace\btxlabeltext{and}\space}] % not \textampersand
\definebtx
[apa:\s!cite:pages]
@@ -418,8 +465,8 @@
\definebtx
[apa:\s!cite:url]
[apa:\s!cite]
- [\c!left={[},
- \c!right={]}]
+ [\c!left={(},
+ \c!right={)}]
\definebtx
[apa:\s!cite:doi]
@@ -440,8 +487,8 @@
[\c!left={Ref.\nbsp},
\c!right=,
\c!separator:2={\btxcomma},
- \c!separator:3={\btxspace\btxlabeltext{apa:and}\space},
- \c!separator:4={\btxspace\btxlabeltext{apa:and}\space}]
+ \c!separator:3={\btxspace\btxlabeltext{and}\space},
+ \c!separator:4={\btxspace\btxlabeltext{and}\space}]
\definebtx
[apa:\s!cite:entry]
@@ -463,24 +510,17 @@
\setupbtxlabeltext
[en]
- [apa:and=and,
- apa:number={no.},
+ [apa:number={No.},
apa:edition={ed.},
apa:Editor={Ed.},
apa:Editors={Eds.},
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
- apa:mastersthesis={Master's thesis},
- apa:phdthesis={Doctoral dissertation},
- apa:technicalreport={Tech. Rep.}, % Technical report
apa:supplement={Suppl.}, % Supplement (not used?)
- apa:patent=Patent,
apa:MotionPicture={Motion picture},
+ apa:Writer=Writer,
+ apa:Writers=Writers,
apa:Producer=Producer,
apa:Producers=Producers,
apa:Director=Director,
@@ -489,29 +529,21 @@
apa:Author=Author,
apa:Translator={Trans.}, % Translator(s)
apa:Advanced={Advanced online publication},
- apa:Retrieved={Available from}, % {Retrieved from},
- apa:In=In]
+ apa:Retrieved={Retrieved from}] % {Available from}]
\setupbtxlabeltext
[nl]
- [apa:and=en,
- apa:number={nr.},
+ [apa:number={Nr.},
apa:edition={ed.}, % editie
apa:Editor=Editor, % Ed./Eds.
apa:Editors=Editors,
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
- apa:mastersthesis=Masterproef,
- apa:phdthesis=Proefschrift,
- apa:technicalreport={Technisch rapport}, % Technical report
apa:supplement=Supplement,
- apa:patent=Octrooi,
apa:MotionPicture=Film, % ?
+ apa:Writer=Scenarioschrijver, % ?
+ apa:Writers=Schrijvers, % ?
apa:Producer=Producent, % ?
apa:Producers=Producents, % ?
apa:Director=Directeur,
@@ -520,29 +552,21 @@
apa:Author=Auteur,
apa:Translator=Vertaler,
apa:Advanced={Geavanceerde online publicatie},
- apa:Retrieved={Beschikbaar vanaf}, % {Ontvangen van},
- apa:In=In]
+ apa:Retrieved={Ontvangen van}] % {Beschikbaar vanaf}]
\setupbtxlabeltext
[fr]
- [apa:and=et,
- apa:number={n\high{o}},
+ [apa:number={N\high{o}},
apa:edition={édition},
apa:Editor=Éditeur,
apa:Editors=Éditeurs,
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
- apa:mastersthesis={Thèse de master (DEA, DESS, master)},
- apa:phdthesis={Thèse de doctorat},
- apa:technicalreport={Rapport technique},
apa:supplement=Supplément,
- apa:patent=Brevet,
apa:MotionPicture={Film cinématographique},
+ apa:Writer=Scénariste,
+ apa:Writers=Scénaristes,
apa:Producer=Producteur,
apa:Producers=Producteurs,
apa:Director=Réalisateur,
@@ -551,29 +575,21 @@
apa:Author=Auteur,
apa:Translator=Traducteur,
apa:Advanced={Publication en ligne anticipée},
- apa:Retrieved={Disponible à}, % {Téléchargé de},
- apa:In=Dans]
+ apa:Retrieved={Téléchargé de}] % {Disponible à}]
\setupbtxlabeltext
[de]
- [apa:and=und,
- apa:number={nr.},
+ [apa:number={Nr.},
apa:edition=Auf\/lage,
apa:Editor=Herausgeber, % Hrsg./Hg.
apa:Editors=Herausgeber,
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)
- apa:mastersthesis={Masterarbeit},
- apa:phdthesis={Dissertation},
- apa:technicalreport={Technischer Bericht},
apa:supplement={Beilage}, % Supplement
- apa:patent=Patent,
apa:MotionPicture=Kinofilm, % ?
+ apa:Writer=Drehbuchautor, % ?
+ apa:Writers=Schriftsteller, % ?
apa:Producer=Producer, % ?
apa:Producers=Produzenten, % ?
apa:Director=Director, % ?
@@ -582,31 +598,23 @@
apa:Author=Autor,
apa:Translator={Übersetzer}, % Übers.
apa:Advanced={Erweiterte Online-Publikation},
- apa:Retrieved={heruntergeladen von},
- apa:In=In]
+ apa:Retrieved={heruntergeladen von}]
% thanks: Andrea Valle
\setupbtxlabeltext
[it]
- [apa:and=e,
- apa:number={nº},
+ [apa:number={Nº},
apa:edition={ed.}, % edizione
apa:Editor={A cura di},
apa:Editors={A cura di},
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
- apa:mastersthesis={Tesi di laurea},
- apa:phdthesis={Tesi di dottorato},
- apa:technicalreport={Relazione tecnica},
apa:supplement={Supplemento},
- apa:patent=Brevetto,
apa:MotionPicture=Film, % ?
+ apa:Writer=Sceneggiatore, % ?
+ apa:Writers=Scrittori, % ?
apa:Producer=Produttore,
apa:Producers=Produttori,
apa:Director=Direttore,
@@ -615,29 +623,21 @@
apa:Author=Autore,
apa:Translator={Trad.}, % Translator(s)
apa:Advanced={Pre-pubblicazione on line},
- apa:Retrieved={Accessible online},
- apa:In=In]
+ apa:Retrieved={Accessible online}]
\setupbtxlabeltext
[es]
- [apa:and=y,
- apa:number={nº},
+ [apa:number={Nº},
apa:edition={ed.}, % edición
apa:Editor=Editor, % Ed./Eds.
apa:Editors=Editores,
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
- apa:mastersthesis={Tesis de maestría},
- apa:phdthesis={Tesis doctoral},
- apa:technicalreport={Informe técnico},
apa:supplement=Suplemento,
- apa:patent=Patente,
apa:MotionPicture=Cinematográfica,
+ apa:Writer=Guionista, % ?
+ apa:Writers=Escritores, % ?
apa:Producer=Productor,
apa:Producers=Productores,
apa:Director=Director,
@@ -646,49 +646,33 @@
apa:Author=Autor,
apa:Translator=Traductor,
apa:Advanced={Publicación en línea avanzada},
- apa:Retrieved={Disponible desde}, % {Obtenido de},
- apa:In=En]
+ apa:Retrieved={Obtenido de}] % {Disponible desde}]
% cite setups
% The following differs from the default returning n.d. if year is empty
-\startsetups btx:apa:nd
- \btxlabeltext{apa:nd}
-\stopsetups
-
\startsetups btx:apa:cite:author:year
- \texdefinition{\s!btx:\s!cite:concat}
- %\btxparameter\c!left
\ifx\currentbtxfirst\empty
- \fastsetup{btx:apa:nd}
- \else
- \texdefinition {\s!btx:\s!cite:inject} {
- \btxcitereference
- \currentbtxfirst
- }
- \ifx\currentbtxsecond\empty \else
- \btxparameter\c!range
- \texdefinition {\s!btx:\s!cite:inject} {
- \currentbtxsecond
- }
- \fi
- \btxflushsuffix
+ \def\currentbtxfirst{\fastsetup{\s!btx:apa:nd}}
\fi
- %\btxparameter\c!right
+ \fastsetup{\s!btx:\s!cite:author:year}
\stopsetups
\startsetups btx:apa:cite:author:years
- \fastsetup{btx:apa:cite:author:year}
+ \ifx\currentbtxfirst\empty
+ \def\currentbtxfirst{\fastsetup{\s!btx:apa:nd}}
+ \fi
+ \fastsetup{\s!btx:\s!cite:author:years}
\stopsetups
% used in publ-imp-page.mkvi
\startsetups [btx:apa:list:page-or-pages]
\ifx\currentbtxlastpage\empty
- \btxlabeltext{apa:page}
+ \btxlabeltext{p}
\else
- \btxlabeltext{apa:pages}
+ \btxlabeltext{pp}
\fi
\btxnbsp
\stopsetups
@@ -756,7 +740,7 @@
\begingroup
\language[\mainbtxlanguage]
\btxleftbracket
- \btxusecommand [apa:\s!list:title:\currentbtxcategory] {
+ \btxusecommand [apa:\s!list:#title:\currentbtxcategory] {
\btxflush{#title:\mainbtxlanguage}
}
\btxrightbracket
@@ -766,10 +750,10 @@
\stoptexdefinition
\starttexdefinition unexpanded btx:apa:composed-title #title
- \btxstartstyleandcolor[apa:\s!list:title:\currentbtxcategory]
+ \btxstartstyleandcolor[apa:\s!list:#title:\currentbtxcategory]
\begingroup
\language[\currentbtxlanguage]
- \btxusecommand [apa:\s!list:title:\currentbtxcategory] {
+ \btxusecommand [apa:\s!list:#title:\currentbtxcategory] {
\btxflush{#title}
\btxdoif {sub#title} {
\btxcolon
@@ -797,6 +781,22 @@
\texdefinition{btx:apa:composed-title}{title}
}
\btxdoif {title} {
+ % A book might have an editor AND an author
+ \doif {\currentbtxcategory} {book} {
+ \doifnot {\btxfoundname{author}} {editor} {
+ \btxdoif {ineditor} { % ineditor authorconversion
+ \btxleftparenthesis
+ \btxflush{ineditor}
+ \btxcomma
+ \btxsingularorplural {ineditor} {
+ \btxlabeltext{apa:Editor}
+ } {
+ \btxlabeltext{apa:Editors}
+ }
+ \btxrightparenthesis
+ }
+ }
+ }
\btxdoif {translator} {
\btxleftparenthesis
\btxflush{translator}
@@ -820,6 +820,10 @@
}
\stoptexdefinition
+\startsetups btx:apa:nd
+ \btxlabeltext{apa:nd}
+\stopsetups
+
\starttexdefinition unexpanded btx:apa:suffixedyear
\btxdoifelse {year} {
\btxflush{year}
@@ -838,8 +842,9 @@
% #author may be author(set) or editor
\starttexdefinition unexpanded btx:apa:author-or-editor #author
- \btxdoif {#author} {
+ \btxdoifelse {#author} {
\btxflush{#author}
+ % use \processaction [] [] here?
\doifelse {\btxfoundname{#author}} {editor} {
\btxleftparenthesis
\btxsingularorplural {editor} {
@@ -848,16 +853,40 @@
\btxlabeltext{apa:Editors}
}
\btxrightparenthesis
- } {
- \doifelse {\btxfoundname{#author}} {producer} {
- \btxleftparenthesis
- \btxsingularorplural {producer} {
- \btxlabeltext{apa:Producer}
+ } {\doif {\btxfoundname{#author}} {ineditor} {
+ \btxleftparenthesis
+ \btxsingularorplural {ineditor} {
+ \btxlabeltext{apa:Editor}
+ } {
+ \btxlabeltext{apa:Editors}
+ }
+ \btxrightparenthesis
+ } }
+ \doif {\currentbtxcategory} {film} {
+ \btxleftparenthesis
+ \doifelse {\btxfoundname{#author}} {director} {
+ \btxsingularorplural {director} {
+ \btxlabeltext{apa:Director}
} {
- \btxlabeltext{apa:Producers}
+ \btxlabeltext{apa:Directors}
+ }
+ } {
+ \doif {\btxfoundname{#author}} {author} {
+ \btxsingularorplural {author} {
+ \btxlabeltext{apa:Writer}
+ } {
+ \btxlabeltext{apa:Writers}
+ }
+ }
+ \doif {\btxfoundname{#author}} {producer} {
+ \btxsingularorplural {producer} {
+ \btxlabeltext{apa:Producer}
+ } {
+ \btxlabeltext{apa:Producers}
+ }
}
- \btxrightparenthesis
\btxdoif {director} {
+ \btxrightparenthesis
\removeunwantedspaces
\btxparameter{\c!separator:names:3}
\btxflush{director}
@@ -867,27 +896,19 @@
} {
\btxlabeltext{apa:Directors}
}
- \btxrightparenthesis
- }
- } {
- \doif {\btxfoundname{#author}} {director} {
- \btxleftparenthesis
- \btxsingularorplural {director} {
- \btxlabeltext{apa:Director}
- } {
- \btxlabeltext{apa:Directors}
- }
- \btxrightparenthesis
}
}
+ \btxrightparenthesis
}
\btxdoif {withauthor} {
\btxleftparenthesis
- \btxlabeltext{apa:with}
+ \btxlabeltext{with}
\btxspace
\btxflush{withauthor}
\btxrightparenthesis
}
+ } {
+ \texdefinition{btx:apa:title}
}
\stoptexdefinition
@@ -918,10 +939,10 @@
\starttexdefinition unexpanded btx:apa:editor-in
\btxdoif {booktitle} {
- \btxlabeltext{apa:In}
+ \btxlabeltext{In}
\doifnot {\btxfoundname{author}} {editor} {
\btxspace
- \texdefinition{btx:apa:author-or-editor} {editor}
+ \texdefinition{btx:apa:author-or-editor} {ineditor}
}
\btxspace
\texdefinition{btx:apa:composed-title}{booktitle}
@@ -950,7 +971,7 @@
\btxflush{type}
}
} {
- \btxlabeltext{apa:technicalreport}
+ \btxlabeltext{technicalreport}
}
}
\btxdoif {volume} {
@@ -978,9 +999,9 @@
\btxdoif {pages} {
\texdefinition{btx:apa:leftparenthesis-or-comma}
\btxoneorrange {pages} {
- \btxlabeltext{apa:page}
+ \btxlabeltext{p}
} {
- \btxlabeltext{apa:pages}
+ \btxlabeltext{pp}
}
\btxnbsp
\btxflush{pages}
@@ -1030,9 +1051,9 @@
\btxcomma
\doif {\currentbtxcategory} {newspaper} {
\btxoneorrange {pages} {
- \btxlabeltext{apa:page}
+ \btxlabeltext{p}
} {
- \btxlabeltext{apa:pages}
+ \btxlabeltext{pp}
}
\btxnbsp
}
@@ -1090,9 +1111,6 @@
% use \btxentry here?
\starttexdefinition unexpanded btx:apa:url
- \btxspace
- \btxlabeltext{apa:Retrieved}
- \btxspace
\begingroup
\setbreakpoints[doi]
\ifconditional\btxinteractive
@@ -1110,7 +1128,6 @@
% use \btxentry here?
\starttexdefinition unexpanded btx:apa:doi
- \btxspace
\begingroup
\setbreakpoints[doi]
\ifconditional\btxinteractive
@@ -1135,9 +1152,13 @@
\starttexdefinition unexpanded btx:apa:url-doi-note
\doif {\btxfoundname{doi}} {url} {
+ \btxspace
+ \btxlabeltext{apa:Retrieved}
+ \btxspace
\texdefinition{btx:apa:url}
}
\doif {\btxfoundname{doi}} {doi} {
+ \btxspace
\texdefinition{btx:apa:doi}
}
\texdefinition{btx:apa:note}
@@ -1285,7 +1306,7 @@
\btxflush{type}
}
} {
- \btxlabeltext{apa:\currentbtxcategory}
+ \btxlabeltext{\currentbtxcategory}
}
\btxrightparenthesis
\btxdoif {school} {
@@ -1365,7 +1386,7 @@
\btxflush{nationality}
}
\btxspace
- \btxlabeltext{apa:patent}
+ \btxlabeltext{patent}
\btxdoif {number} {
\btxspace
\btxlabeltext{apa:number}
@@ -1439,7 +1460,7 @@
}
\doifnot {\btxfoundname{title}} {album} {
\btxdoif {album} {
- \btxlabeltext{apa:In}
+ \btxlabeltext{In}
\btxspace
\btxflush{album}
\btxperiod
diff --git a/tex/context/base/mkiv/publ-imp-aps.mkvi b/tex/context/base/mkiv/publ-imp-aps.mkvi
index 674245714..e9cbd7aaf 100644
--- a/tex/context/base/mkiv/publ-imp-aps.mkvi
+++ b/tex/context/base/mkiv/publ-imp-aps.mkvi
@@ -33,15 +33,15 @@
[aps]
[\c!default=default,
\c!specification=aps,
- \c!otherstext={\btxspace{\it\btxlabeltext{aps:others}}},
+ \c!otherstext={\btxspace{\it\btxlabeltext{others}}},
\c!etallimit=10,
\c!etaldisplay=\btxparameter\c!etallimit,
%c!journalconversion=\v!normal,
\c!monthconversion=\v!month,
\c!title=\v!yes,
\c!separator:names:2={\btxcomma},
- \c!separator:names:3={\btxcomma\btxlabeltext{aps:and}\space},
- \c!separator:names:4={\btxspace\btxlabeltext{aps:and}\space}]
+ \c!separator:names:3={\btxcomma\btxlabeltext{and}\space},
+ \c!separator:names:4={\btxspace\btxlabeltext{and}\space}]
% First, define and set list and rendering parameters
@@ -53,7 +53,8 @@
\setupbtxlist
[aps]
- [\c!alternative=b] % spaces
+ [\c!alternative=b, % spaces
+ \c!align={normal,verytolerant,stretch}]
\definebtx
[aps:\s!list]
@@ -84,8 +85,8 @@
[aps:\s!list:\s!page]
[aps:\s!list]
[\c!separator:2={\btxcomma},
- \c!separator:3={\btxcomma\btxlabeltext{aps:and}\space},
- \c!separator:4={\btxspace\btxlabeltext{aps:and}\space},
+ \c!separator:3={\btxcomma\btxlabeltext{and}\space},
+ \c!separator:4={\btxspace\btxlabeltext{and}\space},
\c!left={\btxleftparenthesis},
\c!right={\btxrightparenthesis},
\c!command={\wordright}]
@@ -353,8 +354,8 @@
[\c!left=,
\c!right=,
\c!separator:2={\btxcomma}, % :0 and :1 - between items of a list
- \c!separator:3={\btxcomma\btxlabeltext{aps:and}\space},
- \c!separator:4={\btxspace\btxlabeltext{aps:and}\space}]
+ \c!separator:3={\btxcomma\btxlabeltext{and}\space},
+ \c!separator:4={\btxspace\btxlabeltext{and}\space}]
\definebtx
[aps:\s!cite:pages]
@@ -379,8 +380,8 @@
\definebtx
[aps:\s!cite:url]
[aps:\s!cite]
- [\c!left={[},
- \c!right={]}]
+ [\c!left={(},
+ \c!right={)}]
\definebtx
[aps:\s!cite:doi]
@@ -408,8 +409,8 @@
[\c!left={Ref.\nbsp},
\c!command=,
\c!separator:2={\btxcomma},
- \c!separator:3={\btxspace\btxlabeltext{aps:and}\space},
- \c!separator:4={\btxspace\btxlabeltext{aps:and}\space}]
+ \c!separator:3={\btxspace\btxlabeltext{and}\space},
+ \c!separator:4={\btxspace\btxlabeltext{and}\space}]
\definebtx
[aps:\s!cite:entry]
@@ -429,139 +430,85 @@
\setupbtxlabeltext
[en]
- [aps:and=and,
- aps:number={no.},
+ [aps:number={no.},
aps:edition={ed.},
aps:Editor={Ed.},
aps:Editors={Eds.},
aps:Volume={Vol.},
aps:Volumes={Vols.},
- aps:others={et al.},
- aps:page={p.},
- aps:pages={pp.},
- aps:mastersthesis={Master's thesis},
- aps:phdthesis={Doctoral dissertation},
- aps:technicalreport={Tech. Rep.}, % Technical report
aps:supplement={Suppl.}, % Supplement (not used?)
- aps:patent=Patent,
aps:inpress={in press},
aps:tobe={to be published},
- aps:unpublished={unpublished},
- aps:In=In]
+ aps:unpublished={unpublished}]
% Check this (google translate!!):
\setupbtxlabeltext
[nl]
- [aps:and=en,
- aps:number={nr.},
+ [aps:number={nr.},
aps:edition={ed.}, % editie
aps:Editor=Editor, % Ed./Eds.
aps:Editors=Editors,
aps:Volume={Vol.},
aps:Volumes={Vols.},
- aps:others={et al.},
- aps:page={p.},
- aps:pages={pp.},
- aps:mastersthesis=Masterproef,
- aps:phdthesis=Proefschrift,
- aps:technicalreport={Technisch rapport}, % Technical report
aps:supplement=Supplement,
- aps:patent=Octrooi,
aps:inpress={in press}, % CHECK THESE!
aps:tobe={worden gepubliceerd},
- aps:unpublished={onuitgegeven},
- aps:In=In]
+ aps:unpublished={onuitgegeven}]
\setupbtxlabeltext
[fr]
- [aps:and=et,
- aps:number={n\high{o}},
+ [aps:number={n\high{o}},
aps:edition={édition},
aps:Editor=Éditeur,
aps:Editors=Éditeurs,
aps:Volume=Volume,
aps:Volumes=Volumes,
- aps:others={et al.},
- aps:page={p.},
- aps:pages={pp.},
- aps:mastersthesis={Thèse de master (DEA, DESS, master)},
- aps:phdthesis={Thèse de doctorat},
- aps:technicalreport={Rapport technique},
aps:supplement=Supplément,
- aps:patent=Brevet,
aps:inpress={sous impression},
aps:tobe={à paraître},
- aps:unpublished={inédit}, % pour un livre
- aps:In=Dans]
+ aps:unpublished={inédit}] % pour un livre
\setupbtxlabeltext
[de]
- [aps:and=und,
- aps:number={nr.},
+ [aps:number={nr.},
aps:edition=Auf\/lage,
aps:Editor=Herausgeber, % Hrsg./Hg.
aps:Editors=Herausgeber,
aps:Volume=Band, % Bd.
aps:Volumes={Bände},
- aps:others={et al.},
- aps:page={S.},
- aps:pages={S.},
- aps:mastersthesis={Masterarbeit},
- aps:phdthesis={Dissertation},
- aps:technicalreport={Technischer Bericht},
aps:supplement={Beilage}, % Supplement
- aps:patent=Patent,
aps:inpress={in der Presse}, % CHECK THESE!
aps:tobe={veröffentlicht werden},
- aps:unpublished={unveröffentlicht},
- aps:In=In]
+ aps:unpublished={unveröffentlicht}]
% thanks: Andrea Valle
\setupbtxlabeltext
[it]
- [aps:and=e,
- aps:number={nº},
+ [aps:number={nº},
aps:edition={ed.}, % edizione
aps:Editor={A cura di},
aps:Editors={A cura di},
aps:Volume={Vol.}, % Volume
aps:Volumes={Vol.}, % Volumi
- aps:others={et al.},
- aps:page={p.},
- aps:pages={pp.},
- aps:mastersthesis={Tesi di laurea},
- aps:phdthesis={Tesi di dottorato},
- aps:technicalreport={Relazione tecnica},
aps:supplement={Supplemento},
- aps:patent=Brevetto,
aps:inpress={in press}, % CHECK THESE!
aps:tobe={da pubblicare},
- aps:unpublished={inedito},
- aps:In=In]
+ aps:unpublished={inedito}]
\setupbtxlabeltext
[es]
- [aps:and=y,
- aps:number={nº},
+ [aps:number={nº},
aps:edition={ed.}, % edición
aps:Editor=Editor, % Ed./Eds.
aps:Editors=Editores,
aps:Volume={Vol.}, % Volumen
aps:Volumes={Vols.}, % Volúmenes
- aps:others={et al.},
- aps:page={p.},
- aps:pages={pp.},
- aps:mastersthesis={Tesis de maestría},
- aps:phdthesis={Tesis doctoral},
- aps:technicalreport={Informe técnico},
aps:supplement=Suplemento,
- aps:patent=Patente,
aps:inpress={en prensa}, % CHECK THESE!
aps:tobe={que se publicará},
- aps:unpublished={inédito},
- aps:In=En]
+ aps:unpublished={inédito}]
% cite setups
@@ -604,9 +551,9 @@
\startsetups [btx:aps:list:page-or-pages]
\ifx\currentbtxlastpage\empty
- \btxlabeltext{aps:page}
+ \btxlabeltext{p}.
\else
- \btxlabeltext{aps:pages}
+ \btxlabeltext{pp}.
\fi
\btxnbsp
\stopsetups
@@ -706,7 +653,7 @@
\starttexdefinition unexpanded btx:aps:editor-in
\btxdoif {booktitle} {
- \btxlabeltext{aps:In}
+ \btxlabeltext{In}
\doifnot {\btxfoundname{author}} {editor} {
\btxspace
\texdefinition{btx:aps:author-or-editor} {editor}
@@ -724,7 +671,7 @@
\btxflush{type}
}
} {
- \btxlabeltext{aps:technicalreport}
+ \btxlabeltext{technicalreport}
}
\btxcomma
}
@@ -752,9 +699,9 @@
}
\btxdoif {pages} {
\btxoneorrange {pages} {
- \btxlabeltext{aps:page}
+ \btxlabeltext{p}.
} {
- \btxlabeltext{aps:pages}
+ \btxlabeltext{pp}.
}
\btxnbsp
\btxflush{pages}
@@ -764,6 +711,7 @@
\starttexdefinition unexpanded btx:aps:journal-volume-year
\btxdoif {journal} {
+ \btxspace
\btxstartstyleandcolor [aps:\s!list:journal]
% expandedjournal abbreviatedjournal
\btxflush{expandedjournal -> journal}
@@ -981,7 +929,7 @@
\btxflush{type}
}
} {
- \btxlabeltext{aps:\currentbtxcategory}
+ \btxlabeltext{\currentbtxcategory}
}
\btxrightparenthesis
\btxdoif {school} {
@@ -1063,7 +1011,7 @@
\btxflush{nationality}
}
\btxspace
- \btxlabeltext{aps:patent}
+ \btxlabeltext{patent}
\btxdoif {number} {
\btxspace
\btxlabeltext{aps:number}
@@ -1074,7 +1022,6 @@
\italiccorrection
\endgroup
\texdefinition{btx:aps:doi-url} {\texdefinition{btx:aps:publisher-wherefrom-year}}
- \texdefinition{btx:aps:url}
\texdefinition{btx:aps:note}
\stopsetups
@@ -1091,11 +1038,10 @@
\btxdoif {organization} {
\btxspace
\btxflush{organization}
- \btxperiod
+ \btxcomma
}
\btxdoif {howpublished} {
- \btxspace
- \btxflush{howpublished}
+ \texdefinition{btx:aps:doi-url} {\btxspace\btxflush{howpublished}}
}
\btxleftparenthesis
\texdefinition{btx:aps:year}
diff --git a/tex/context/base/mkiv/publ-imp-cite.mkvi b/tex/context/base/mkiv/publ-imp-cite.mkvi
index cb1c46fe4..be23326b8 100644
--- a/tex/context/base/mkiv/publ-imp-cite.mkvi
+++ b/tex/context/base/mkiv/publ-imp-cite.mkvi
@@ -61,6 +61,26 @@
<empty>
\stopsetups
+\startsetups btx:cite:lefttext
+ \ifx\currentbtxlefttext\empty
+ \else
+ \setbtxparameterset{\s!cite}{lefttext}
+ \btxparameter\c!left
+ \currentbtxlefttext
+ \btxparameter\c!right
+ \fi
+\stopsetups
+
+\startsetups btx:cite:righttext
+ \ifx\currentbtxrighttext\empty
+ \else
+ \setbtxparameterset{\s!cite}{righttext}
+ \btxparameter\c!left
+ \currentbtxrighttext
+ \btxparameter\c!right
+ \fi
+\stopsetups
+
\startsetups btx:cite:invalid
\btxcitereference
{\tt <\currentbtxreference>}
@@ -103,7 +123,8 @@
\startsetups btx:cite:normal
\texdefinition{\s!btx:\s!cite:concat}
- \currentbtxlefttext
+ %\currentbtxlefttext
+ \fastsetup{\s!btx:\s!cite:lefttext}
\ifx\currentbtxfirst\empty
\fastsetup{\s!btx:\s!cite:\s!empty}
\else\ifx\currentbtxsecond\empty
@@ -140,12 +161,14 @@
}
}
\fi\fi
- \currentbtxrighttext
+ %\currentbtxrighttext
+ \fastsetup{\s!btx:\s!cite:righttext}
\stopsetups
\startsetups btx:cite:range
\texdefinition{\s!btx:\s!cite:concat}
- \currentbtxlefttext
+ %\currentbtxlefttext
+ \fastsetup{\s!btx:\s!cite:lefttext}
\ifx\currentbtxfirst\empty
\fastsetup{\s!btx:\s!cite:\s!empty}
\else
@@ -161,14 +184,16 @@
}
}
\fi
- \currentbtxrighttext
+ %\currentbtxrighttext
+ \fastsetup{\s!btx:\s!cite:righttext}
\stopsetups
% somehow related to keywords:
\startsetups btx:cite:listelement
\texdefinition{\s!btx:\s!cite:concat}
- \currentbtxlefttext
+ %\currentbtxlefttext
+ \fastsetup{\s!btx:\s!cite:lefttext}
\ifx\currentbtxfirst\empty
\fastsetup{\s!btx:\s!cite:\s!empty}
\else
@@ -177,14 +202,17 @@
\currentbtxfirst
}
\fi
- \currentbtxrighttext
+ %\currentbtxrighttext
+ \fastsetup{\s!btx:\s!cite:righttext}
\stopsetups
\startsetups \s!btx:\s!cite:entry
\texdefinition{\s!btx:\s!cite:concat}
- \currentbtxlefttext
+ %\currentbtxlefttext
+ \fastsetup{\s!btx:\s!cite:lefttext}
\btxhandleciteentry
- \currentbtxrighttext
+ %\currentbtxrighttext
+ \fastsetup{\s!btx:\s!cite:righttext}
\stopsetups
% these three are goodies to get something but are not set up as it makes no
@@ -259,7 +287,7 @@
\fastsetup{\s!btx:\s!cite:normal}
\stopsetups
-% the following is kind of specific, but can be used in many renderings
+% the following are kind of specific, but can be used in many renderings
\startsetups btx:cite:url
\ifx\currentbtxfirst\empty
@@ -267,13 +295,29 @@
\else\ifconditional\btxinteractive
\goto {
\btxcitereference
- \hyphenatedurl{\doif{\currentbtxcitealternative}{doi}{doi:}\currentbtxfirst}
+ \hyphenatedurl{\currentbtxfirst}
+ } [
+ url(\currentbtxfirst)
+ ]
+ \else
+ \btxcitereference
+ \hyphenatedurl{\currentbtxfirst}
+ \fi\fi
+\stopsetups
+
+\startsetups btx:cite:doi
+ \ifx\currentbtxfirst\empty
+ \fastsetup{\s!btx:\s!cite:\s!empty}
+ \else\ifconditional\btxinteractive
+ \goto {
+ \btxcitereference
+ \hyphenatedurl{doi:\currentbtxfirst}
} [
- url(\doif{\currentbtxcitealternative}{doi}{http://dx.doi.org/}\currentbtxfirst)
+ url(http://dx.doi.org/\currentbtxfirst)
]
\else
\btxcitereference
- \hyphenatedurl{\doif{\currentbtxcitealternative}{doi}{doi:}\currentbtxfirst}
+ \hyphenatedurl{doi:\currentbtxfirst}
\fi\fi
\stopsetups
diff --git a/tex/context/base/mkiv/publ-imp-default.mkvi b/tex/context/base/mkiv/publ-imp-default.mkvi
index f5c99ac18..564bfcf4e 100644
--- a/tex/context/base/mkiv/publ-imp-default.mkvi
+++ b/tex/context/base/mkiv/publ-imp-default.mkvi
@@ -23,6 +23,10 @@
\c!sorttype=\v!default,
\c!numbering=num]
+\setupbtxlist
+ [default]
+ [\c!align={normal,verytolerant,stretch}]
+
\definebtx
[\s!default]
[\c!default=, % we do not want to fall|-|back on ourself.
@@ -275,6 +279,18 @@
[\c!left={(},
\c!right={)}]
+\definebtx
+ [\s!default:\s!cite:lefttext]
+ [\s!default:\s!cite]
+ [\c!left=,
+ \c!right=]
+
+\definebtx
+ [\s!default:\s!cite:righttext]
+ [\s!default:\s!cite]
+ [\c!left=,
+ \c!right=]
+
% Multilingual text strings
\setupbtxlabeltext
@@ -496,12 +512,14 @@
%D Experiment:
-\startsetups btx:default:lefttext
- \currentbtxlefttext
-\stopsetups
+%D See publ-imp-cite.mkvi
+%
+%\startsetups btx:default:cite:lefttext
+% \currentbtxlefttext
+%\stopsetups
-\startsetups btx:default:righttext
- \currentbtxrighttext
-\stopsetups
+%\startsetups btx:default:cite:righttext
+% \currentbtxrighttext
+%\stopsetups
\stopbtxrenderingdefinitions
diff --git a/tex/context/base/mkiv/publ-ini.lua b/tex/context/base/mkiv/publ-ini.lua
index c30f780f1..52642c89d 100644
--- a/tex/context/base/mkiv/publ-ini.lua
+++ b/tex/context/base/mkiv/publ-ini.lua
@@ -24,7 +24,6 @@ if not modules then modules = { } end modules ['publ-ini'] = {
local next, rawget, type, tostring, tonumber = next, rawget, type, tostring, tonumber
local match, find, gsub = string.match, string.find, string.gsub
local concat, sort, tohash = table.concat, table.sort, table.tohash
-local utfsub = utf.sub
local mod = math.mod
local formatters = string.formatters
local allocate = utilities.storage.allocate
@@ -38,7 +37,6 @@ local upper = utf.upper
local report = logs.reporter("publications")
local report_cite = logs.reporter("publications","cite")
local report_list = logs.reporter("publications","list")
-local report_reference = logs.reporter("publications","reference")
local report_suffix = logs.reporter("publications","suffix")
local trace = false trackers.register("publications", function(v) trace = v end)
@@ -72,8 +70,6 @@ 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
@@ -81,8 +77,6 @@ local v_dataset = variables.dataset
local conditionals = tex.conditionals
-local numbertochar = converters.characters
-
local logsnewline = logs.newline
local logspushtarget = logs.pushtarget
local logspoptarget = logs.poptarget
@@ -108,19 +102,16 @@ manipulatormethods.WORDS = converters.WORDS
local context = context
local commands = commands
local implement = interfaces.implement
-local ctx_setmacro = interfaces.setmacro
local ctx_doifelse = commands.doifelse
local ctx_doif = commands.doif
local ctx_doifnot = commands.doifnot
local ctx_gobbletwoarguments = context.gobbletwoarguments
-local ctx_btxdirectlink = context.btxdirectlink
local ctx_btxhandlelistentry = context.btxhandlelistentry
local ctx_btxhandlelisttextentry = context.btxhandlelisttextentry
local ctx_btxhandlecombientry = context.btxhandlecombientry
local ctx_btxchecklistentry = context.btxchecklistentry
-local ctx_btxchecklistcombi = context.btxchecklistcombi
local ctx_btxsetdataset = context.btxsetdataset
local ctx_btxsettag = context.btxsettag
@@ -142,10 +133,8 @@ local ctx_btxsetrighttext = context.btxsetrighttext
local ctx_btxsetbefore = context.btxsetbefore
local ctx_btxsetafter = context.btxsetafter
local ctx_btxsetbacklink = context.btxsetbacklink
-local ctx_btxsetbacktrace = context.btxsetbacktrace
local ctx_btxsetcount = context.btxsetcount
local ctx_btxsetconcat = context.btxsetconcat
-local ctx_btxsetoveflow = context.btxsetoverflow
local ctx_btxsetfirstpage = context.btxsetfirstpage
local ctx_btxsetlastpage = context.btxsetlastpage
local ctx_btxsetfirstinternal = context.btxsetfirstinternal
@@ -1995,6 +1984,33 @@ do
arguments = { "string", "string" }
}
+ local function identical(a,b)
+ local na, nb = #a, #b
+ if na ~= nb then
+ return false
+ end
+ if na > 0 then
+ for i=1,na do
+ if not identical(a[i],b[i]) then
+ return false
+ end
+ end
+ return true
+ end
+ local ha, hb = a.hash, b.hash
+ if ha then
+ return ha == hb
+ end
+ for k, v in next, a do
+ if k == "original" or k == "snippets" then
+ -- skip diagnostic info
+ elseif v ~= b[k] then
+ return false
+ end
+ end
+ return true
+ end
+
function lists.sameasprevious(dataset,i,name,order,method)
local rendering = renderings[dataset]
local list = rendering.list
@@ -2041,7 +2057,7 @@ do
if c_casted and c_casted == p_casted then
sameentry = true
elseif type(c_casted) == "table" and type(p_casted) == "table" then
- sameentry = table.identical(c_casted,p_casted)
+ sameentry = identical(c_casted,p_casted)
end
end
if trace_detail then
diff --git a/tex/context/base/mkiv/publ-ini.mkiv b/tex/context/base/mkiv/publ-ini.mkiv
index 29ba543cd..5f9aaa692 100644
--- a/tex/context/base/mkiv/publ-ini.mkiv
+++ b/tex/context/base/mkiv/publ-ini.mkiv
@@ -14,6 +14,8 @@
% TODO: s! vs v! for default and neutral key/values
% todo: too many refs in list
+% TODO A.-B. Foo (dash as connector, see JMH)
+
% todo: no need for all these %'s
% todo: tagging
@@ -77,6 +79,8 @@
\definelabelclass[btxlabel][2]
+\clf_definelabels{btxlabel}{btx}\s!false\relax
+
% It is not that trivial to come up with a proper organization of setup
% and control commands for publications. This is because we have complex
% inline as well as extensive list rendering. The rules are partially
@@ -1094,7 +1098,10 @@
\unexpanded\def\currentbtxciteauthor % always author
{\begingroup
- \setbtxparameterset\s!cite\s!author
+ %\setbtxparameterset\s!cite\s!author
+ % the alternatives inherit from cite:author
+ % and APA distinguishes authoryears from authoryear ("and" vs. "&")
+ \setbtxparameterset\s!cite\currentbtxcitealternative
\clf_btxauthor
{\currentbtxdataset}%
{\currentbtxtag}%
diff --git a/tex/context/base/mkiv/publ-reg.lua b/tex/context/base/mkiv/publ-reg.lua
index 3f276b49a..b40fbc80a 100644
--- a/tex/context/base/mkiv/publ-reg.lua
+++ b/tex/context/base/mkiv/publ-reg.lua
@@ -9,7 +9,6 @@ if not modules then modules = { } end modules ['publ-reg'] = {
local formatters = string.formatters
local concat = table.concat
local sortedhash = table.sortedhash
-local lpegmatch = lpeg.match
local context = context
@@ -135,7 +134,6 @@ implement {
local ctx_dosetfastregisterentry = context.dosetfastregisterentry -- register entry key
------ p_keywords = lpeg.tsplitat(lpeg.patterns.whitespace^0 * lpeg.P(";") * lpeg.patterns.whitespace^0)
local components = publications.components.author
local f_author = formatters[ [[\btxindexedauthor{%s}{%s}{%s}{%s}{%s}{%s}]] ]
diff --git a/tex/context/base/mkiv/publ-sor.lua b/tex/context/base/mkiv/publ-sor.lua
index 218d11093..30a0d9bdd 100644
--- a/tex/context/base/mkiv/publ-sor.lua
+++ b/tex/context/base/mkiv/publ-sor.lua
@@ -217,6 +217,7 @@ local function sortsequence(dataset,list,sorttype)
if type(action) == "function" then
local valid = action(dataset,list,method)
if valid and #valid > 0 then
+-- sorters.setlanguage(options.language,options.method)
sorters.sort(valid,compare)
return valid
else
diff --git a/tex/context/base/mkiv/publ-tra.lua b/tex/context/base/mkiv/publ-tra.lua
index 4b03307ac..b3d40be61 100644
--- a/tex/context/base/mkiv/publ-tra.lua
+++ b/tex/context/base/mkiv/publ-tra.lua
@@ -42,7 +42,6 @@ local ctx_monobold = ctx_formatted.monobold
local ctx_verbatim = ctx_formatted.verbatim
local ctx_rotate = context.rotate
-local ctx_llap = context.llap
local ctx_rlap = context.rlap
local ctx_page = context.page
@@ -102,9 +101,6 @@ function tracers.showdatasetcompleteness(settings)
local fielddata = specification and specifications[specification] or specifications.apa
local categories = fielddata.categories
- -- local lpegmatch = lpeg.match
- -- local texescape = lpeg.patterns.texescape
-
local preamble = { "|lTBw(5em)|lBTp(10em)|plT|" }
local function identified(tag,category,crossref,index)
@@ -145,8 +141,8 @@ function tracers.showdatasetcompleteness(settings)
ctx_NC()
if indirect then
context("\\darkblue")
- ctx_verbatim(value)
- elseif value then
+ end
+ if value then
ctx_verbatim(value)
end
ctx_NC() ctx_NR()
@@ -157,7 +153,7 @@ function tracers.showdatasetcompleteness(settings)
local function special(done,key,value)
ctx_NC() if not done then ctx_monobold("special") end
ctx_NC() context(key)
- ctx_NC() ctx_verbatim(value)
+ ctx_NC() if value then ctx_verbatim(value) end
ctx_NC() ctx_NR()
return done or true
end
@@ -165,7 +161,7 @@ function tracers.showdatasetcompleteness(settings)
local function extra(done,key,value)
ctx_NC() if not done then ctx_monobold("extra") end
ctx_NC() context(key)
- ctx_NC() ctx_verbatim(value)
+ ctx_NC() if value then ctx_verbatim(value) end
ctx_NC() ctx_NR()
return done or true
end
@@ -352,7 +348,9 @@ function tracers.showdatasetauthors(settings)
ctx_verbatim(i)
end
ctx_NC()
- ctx_verbatim(k)
+ if k then
+ ctx_verbatim(k)
+ end
ctx_EQ()
if type(v) == "table" then
local t = { }
@@ -364,8 +362,9 @@ function tracers.showdatasetauthors(settings)
t[i] = vi
end
end
- ctx_verbatim(concat(t, " | "))
- else
+ v = concat(t, " | ")
+ end
+ if v then
ctx_verbatim(v)
end
ctx_NC()
@@ -380,9 +379,9 @@ function tracers.showdatasetauthors(settings)
end
local function commonrow(key,value)
- ctx_NC() ctx_rlap(function() ctx_verbatim(key) end)
+ ctx_NC() if key then ctx_rlap(function() ctx_verbatim(key) end) end
ctx_NC()
- ctx_EQ() ctx_verbatim(value)
+ ctx_EQ() if value then ctx_verbatim(value) end
ctx_NC() ctx_NR()
end
diff --git a/tex/context/base/mkiv/regi-ibm.lua b/tex/context/base/mkiv/regi-ibm.lua
new file mode 100644
index 000000000..3b95333eb
--- /dev/null
+++ b/tex/context/base/mkiv/regi-ibm.lua
@@ -0,0 +1,26 @@
+if not modules then modules = { } end modules ['regi-ibm'] = { -- 437
+ version = 1.001,
+ comment = "companion to regi-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+return { [0] =
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
+ 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5,
+ 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x00FF, 0x00D6, 0x00DC, 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192,
+ 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
+ 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
+ 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
+ 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
+ 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229,
+ 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0,
+}
diff --git a/tex/context/base/mkiv/regi-ini.lua b/tex/context/base/mkiv/regi-ini.lua
index 37a88fd5f..be8fa1b1c 100644
--- a/tex/context/base/mkiv/regi-ini.lua
+++ b/tex/context/base/mkiv/regi-ini.lua
@@ -27,9 +27,6 @@ local sequencers = utilities.sequencers
local textlineactions = resolvers.openers.helpers.textlineactions
local setmetatableindex = table.setmetatableindex
-local implement = interfaces.implement
-local setmacro = interfaces.setmacro
-
--[[ldx--
<p>We will hook regime handling code into the input methods.</p>
--ldx]]--
@@ -261,56 +258,6 @@ if sequencers then
end
--- interface:
-
-implement {
- name = "enableregime",
- arguments = "string",
- actions = function(regime) setmacro("currentregime",enable(regime)) end
-}
-
-implement {
- name = "disableregime",
- actions = function() setmacro("currentregime",disable()) end
-}
-
-implement {
- name = "pushregime",
- actions = push
-}
-
-implement {
- name = "popregime",
- actions = pop
-}
-
-local stack = { }
-
-implement {
- name = "startregime",
- arguments = "string",
- actions = function(regime)
- insert(stack,currentregime)
- if trace_translating then
- report_translating("start using %a",regime)
- end
- setmacro("currentregime",enable(regime))
- end
-}
-
-implement {
- name = "stopregime",
- actions = function()
- if #stack > 0 then
- local regime = remove(stack)
- if trace_translating then
- report_translating("stop using %a",regime)
- end
- setmacro("currentregime",enable(regime))
- end
- end
-}
-
-- Next we provide some hacks. Unfortunately we run into crappy encoded
-- (read : mixed) encoded xml files that have these ë ä ö ü sequences
-- instead of ë ä ö ü
@@ -434,3 +381,60 @@ end
-- local old = "Pozn" .. char(0xE1) .. "mky"
-- local new = fromregime("cp1250",old)
-- report_translating("%s -> %s",old,new)
+
+-- interface (might move to regi-tex.lua)
+
+if interfaces then
+
+ local implement = interfaces.implement
+ local setmacro = interfaces.setmacro
+
+ implement {
+ name = "enableregime",
+ arguments = "string",
+ actions = function(regime) setmacro("currentregime",enable(regime)) end
+ }
+
+ implement {
+ name = "disableregime",
+ actions = function() setmacro("currentregime",disable()) end
+ }
+
+ implement {
+ name = "pushregime",
+ actions = push
+ }
+
+ implement {
+ name = "popregime",
+ actions = pop
+ }
+
+ local stack = { }
+
+ implement {
+ name = "startregime",
+ arguments = "string",
+ actions = function(regime)
+ insert(stack,currentregime)
+ if trace_translating then
+ report_translating("start using %a",regime)
+ end
+ setmacro("currentregime",enable(regime))
+ end
+ }
+
+ implement {
+ name = "stopregime",
+ actions = function()
+ if #stack > 0 then
+ local regime = remove(stack)
+ if trace_translating then
+ report_translating("stop using %a",regime)
+ end
+ setmacro("currentregime",enable(regime))
+ end
+ end
+ }
+
+end
diff --git a/tex/context/base/mkiv/scrn-bar.mkvi b/tex/context/base/mkiv/scrn-bar.mkvi
index 2f21b0004..efb1a005b 100644
--- a/tex/context/base/mkiv/scrn-bar.mkvi
+++ b/tex/context/base/mkiv/scrn-bar.mkvi
@@ -125,9 +125,10 @@
\def\scrn_bar_buttons_indeed[#settings][#list]%
{\begingroup
- %\let\menuparameter\interactionbarparameter
+ %\let\currentinteractionbar\empty
\setupcurrentinteractionbar[#settings]%
- \d_scrn_bar_width\interactionbarparameter\c!width
+ \d_scrn_bar_width \interactionbarparameter\c!width\relax
+ \d_scrn_bar_distance\interactionbarparameter\c!distance\relax
\ifdim\d_scrn_bar_width=\zeropoint
\d_scrn_bar_width1.5\emwidth
\fi
@@ -157,6 +158,10 @@
\hbox to \scratchdimentwo
{\setnostrut
\startsymbolset[\interactionparameter\c!symbolset]%
+ \setupbuttons
+ [#settings,%
+ \c!height=\the\scratchheight,%
+ \c!width=\the\scratchdimenone]%
\processallactionsinset
[#list]
[ \v!page=>\scrn_bar_goto\v!firstpage
@@ -173,11 +178,7 @@
\endgroup}
\def\scrn_bar_goto#action%
- {\button
- [\c!height=\the\scratchheight,\c!width=\the\scratchdimenone]%
- {\symbol[#action]}% we could expand this one once only
- [#action]%
- \hss}
+ {\button{\symbol[#action]}[#action]\hss}
% todo: this will be \letblackruleparameter\c!width\scratchdimenone (faster)
@@ -346,31 +347,34 @@
\advance\scratchcounterfive \plusone
\ifnum\recurselevel=\firstsubpage\relax \!!doneatrue \fi
\ifnum\recurselevel=\lastsubpage \relax \!!doneatrue \fi
+ \scratchcountersix\therealsubpageno\recurselevel\relax
\c_scrn_bar_mode
\if!!donea
- \ifnum\recurselevel<\realpageno
+ \ifnum\scratchcountersix<\realpageno
\zerocount
- \else\ifnum\recurselevel>\realpageno
+ \else\ifnum\scratchcountersix>\realpageno
\plustwo
\else
\plusfour
\fi\fi
\else
\ifnum\scratchcounterfive=\scratchcountertwo
- \ifnum\recurselevel<\realpageno
+ \ifnum\scratchcountersix<\realpageno
\plusone
- \else\ifnum\recurselevel>\realpageno
+ \else\ifnum\scratchcountersix>\realpageno
\plusthree
\else
\plustwo
\fi\fi
\else
- \plusthree
+ \minusone
\fi
\fi
- \normalexpanded{\directgotospecbox\noexpand\interactionbarparameter{\scrn_bar_goto_indeed\c_scrn_bar_mode}[page(\therealsubpageno\recurselevel)]}%
- \hss
- \scratchcounterfive\zerocount}%
+ \ifnum\c_scrn_bar_mode<\zerocount\else
+ \normalexpanded{\directgotospecbox\noexpand\interactionbarparameter{\scrn_bar_goto_indeed\c_scrn_bar_mode}[realpage(\the\scratchcountersix)]}%
+ \hss
+ \scratchcounterfive\zerocount
+ \fi}%
\unskip
\egroup
}\fi}
diff --git a/tex/context/base/mkiv/scrn-but.mkvi b/tex/context/base/mkiv/scrn-but.mkvi
index 98d9f2daa..65b0d2c4e 100644
--- a/tex/context/base/mkiv/scrn-but.mkvi
+++ b/tex/context/base/mkiv/scrn-but.mkvi
@@ -408,7 +408,8 @@
%D \stoptyping
%D
%D The no longer hard coded text areas offset compensation makes tuning
-%D easier. After all, menus need some setup anyway.
+%D easier. After all, menus need some setup anyway. The offsets are
+%D added to the width or height (this is different from \MKII).
\newbox \b_scrn_menu
diff --git a/tex/context/base/mkiv/scrn-fld.mkvi b/tex/context/base/mkiv/scrn-fld.mkvi
index a92abebc5..d69e7beb9 100644
--- a/tex/context/base/mkiv/scrn-fld.mkvi
+++ b/tex/context/base/mkiv/scrn-fld.mkvi
@@ -246,7 +246,6 @@
\fi
layer {\fieldbodyparameter\c!fieldlayer}%
option {\fieldbodyparameter\c!option}%
- align {\fieldbodyparameter\c!align}%
clickin {\fieldbodyparameter\c!clickin}%
clickout {\fieldbodyparameter\c!clickout}%
regionin {\fieldbodyparameter\c!regionin}%
diff --git a/tex/context/base/mkiv/scrn-hlp.lua b/tex/context/base/mkiv/scrn-hlp.lua
index 99c0565a8..8f6f6f746 100644
--- a/tex/context/base/mkiv/scrn-hlp.lua
+++ b/tex/context/base/mkiv/scrn-hlp.lua
@@ -8,27 +8,27 @@ if not modules then modules = { } end modules ['scrn-hlp'] = {
local tonumber = tonumber
-local help = { }
-interactions.help = help
+local help = { }
+interactions.help = help
-local context = context
-local implement = interfaces.implement
+local context = context
+local implement = interfaces.implement
-local formatters = string.formatters
+local formatters = string.formatters
-local a_help = attributes.private("help")
+local a_help = attributes.private("help")
-local copy_nodelist = node.copy_list
-local hpack_nodelist = node.hpack
+local copy_node_list = node.copy_list
+local hpack_node_list = node.hpack
-local register_list = nodes.pool.register
+local register_list = nodes.pool.register
-local texgetbox = tex.getbox
+local texgetbox = tex.getbox
-local nodecodes = nodes.nodecodes
+local nodecodes = nodes.nodecodes
-local hlist_code = nodecodes.hlist
-local vlist_code = nodecodes.vlist
+local hlist_code = nodecodes.hlist
+local vlist_code = nodecodes.vlist
local data, references = { }, { }
@@ -59,7 +59,7 @@ local function register(specification)
interactions.javascripts.setpreamble("HelpTexts",helpscript)
helpscript = false
end
- local b = copy_nodelist(texgetbox(box))
+ local b = copy_node_list(texgetbox(box))
register_list(b)
data[number] = b
if name and name ~= "" then
@@ -128,7 +128,7 @@ implement {
for i=1,#used do
local d = data[used[i]]
if d and not done[d] then
- local box = hpack_nodelist(copy_nodelist(d))
+ local box = hpack_node_list(copy_node_list(d))
context(false,box)
done[d] = true
else
diff --git a/tex/context/base/mkiv/scrn-ini.mkvi b/tex/context/base/mkiv/scrn-ini.mkvi
index 0e00fb456..93dde6962 100644
--- a/tex/context/base/mkiv/scrn-ini.mkvi
+++ b/tex/context/base/mkiv/scrn-ini.mkvi
@@ -177,15 +177,52 @@
%D Identity
+% \def\scrn_identity_synchronize
+% {\clf_setupidentity
+% title {\interactionparameter\c!title}%
+% subtitle {\interactionparameter\c!subtitle}%
+% author {\interactionparameter\c!author}%
+% % creator {ConTeXt - \contextversion}%
+% date {\interactionparameter\c!date}%
+% keywords {\interactionparameter\c!keyword}%
+% \relax}
+
+\newconditional\c_scrn_identity_preroll
+
+\installtexdirective
+ {interaction.identity.preroll}
+ {\settrue \c_scrn_identity_preroll}
+ {\setfalse\c_scrn_identity_preroll}
+
+\def\scrn_identity_prerolled#1%
+ {\begingroup
+ \edef\tempstring{\interactionparameter#1}%
+ \ifx\tempstring\empty
+ \endgroup
+ \else
+ \the\everypreroll
+ \nodestostring\tempstring{\tempstring}%
+ \normalexpanded{\endgroup\setexpandedinteractionparameter{#1}{\tempstring}}%
+ \fi}
+
\def\scrn_identity_synchronize
- {\clf_setupidentity
+ {\begingroup
+ \ifconditional\c_scrn_identity_preroll
+ \scrn_identity_prerolled\c!title
+ \scrn_identity_prerolled\c!subtitle
+ \scrn_identity_prerolled\c!author
+ \scrn_identity_prerolled\c!date
+ \scrn_identity_prerolled\c!keyword
+ \fi
+ \clf_setupidentity
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}
+ \relax
+ \endgroup}
\appendtoks
\scrn_identity_synchronize
@@ -193,11 +230,18 @@
% this comes before starttext
+\def\scrn_identity_document#1#2%
+ {\doifvariable{document}{metadata:#1}{\setupinteraction[#2=\documentvariable{metadata:#1}]}}
+
\appendtoks % not interfaced i.e. english
- \doifvariable{document}{metadata:author} {\setupinteraction [\c!author=\documentvariable{metadata:author}]}%
- \doifvariable{document}{metadata:title} {\setupinteraction [\c!title=\documentvariable{metadata:title}]}%
- \doifvariable{document}{metadata:subject} {\setupinteraction[\c!subject=\documentvariable{metadata:subject}]}%
- \doifvariable{document}{metadata:keywords}{\setupinteraction[\c!keyword=\documentvariable{metadata:keywords}]}%
+ \scrn_identity_document {title}\c!title
+ \scrn_identity_document {subject}\c!subtitle
+ \scrn_identity_document{subtitle}\c!subtitle
+ \scrn_identity_document {author}\c!author
+ \scrn_identity_document {authors}\c!author
+ \scrn_identity_document {keyword}\c!keyword
+ \scrn_identity_document{keywords}\c!keyword
+ \scrn_identity_document {date}\c!date
\to \everysetupdocument
\setupinteraction
diff --git a/tex/context/base/mkiv/scrn-pag.lua b/tex/context/base/mkiv/scrn-pag.lua
index dba5b4786..bd65e53d9 100644
--- a/tex/context/base/mkiv/scrn-pag.lua
+++ b/tex/context/base/mkiv/scrn-pag.lua
@@ -40,6 +40,7 @@ implement {
{ "bleedoffset", "dimen" },
{ "artoffset", "dimen" },
{ "trimoffset", "dimen" },
+ { "copies", "integer" },
}
}
}
diff --git a/tex/context/base/mkiv/scrn-pag.mkvi b/tex/context/base/mkiv/scrn-pag.mkvi
index 7a7effdc4..b7e056e2b 100644
--- a/tex/context/base/mkiv/scrn-pag.mkvi
+++ b/tex/context/base/mkiv/scrn-pag.mkvi
@@ -227,6 +227,7 @@
trimoffset \canvastrimoffset
bleedoffset \canvasbleedoffset
artoffset \canvasartoffset
+ copies \numexpr\interactionscreenparameter\c!copies\relax
\relax
%\global\let\scrn_canvas_synchronize_simple \relax
\global\let\scrn_canvas_synchronize_complex\relax}
@@ -251,6 +252,7 @@
\c!veroffset=\zeropoint,
\c!backspace=\backspace,
\c!topspace=\topspace,
+ \c!copies=\plusone, % not the best place but backend anyway
\c!option=\v!auto]
\appendtoks
diff --git a/tex/context/base/mkiv/scrn-wid.lua b/tex/context/base/mkiv/scrn-wid.lua
index b9855546e..3ce904349 100644
--- a/tex/context/base/mkiv/scrn-wid.lua
+++ b/tex/context/base/mkiv/scrn-wid.lua
@@ -192,6 +192,7 @@ implement {
{ "symbol" },
{ "buffer" },
{ "layer" },
+ { "space" },
}
}
}
diff --git a/tex/context/base/mkiv/scrn-wid.mkvi b/tex/context/base/mkiv/scrn-wid.mkvi
index f4679684c..f19da57f7 100644
--- a/tex/context/base/mkiv/scrn-wid.mkvi
+++ b/tex/context/base/mkiv/scrn-wid.mkvi
@@ -378,6 +378,7 @@
\c!depth=\v!fit,
\c!nx=40,
\c!ny=10,
+ \c!buffer=\v!comment,
\c!location=\v!high]
\appendtoks
@@ -473,8 +474,9 @@
transparencyvalue \numexpr\thetransparencyattribute{\commentparameter\c!color}\relax
option {\commentparameter\c!option}% % todo
symbol {\commentparameter\c!symbol}%
- buffer {\v!comment}%
+ buffer {\commentparameter\c!buffer}% {\v!comment}%
layer {\commentparameter\c!textlayer}%
+ space {\commentparameter\c!space}%
\relax
\wd\b_scrn_comment_link\currentcommentwidth
\ht\b_scrn_comment_link\currentcommentheight
diff --git a/tex/context/base/mkiv/scrp-cjk.lua b/tex/context/base/mkiv/scrp-cjk.lua
index 77c58b18a..d2ec201ca 100644
--- a/tex/context/base/mkiv/scrp-cjk.lua
+++ b/tex/context/base/mkiv/scrp-cjk.lua
@@ -14,8 +14,6 @@ if not modules then modules = { } end modules ['scrp-cjk'] = {
-- sense either because otherwise a wanted space at the end of a
-- line would have to be a hard coded ones.
-local utfchar = utf.getchar
-
local nuts = nodes.nuts
local tonut = nodes.tonut
local tonode = nodes.tonode
@@ -33,6 +31,7 @@ local getchar = nuts.getchar
local getid = nuts.getid
local getattr = nuts.getattr
local getsubtype = nuts.getsubtype
+local getwidth = nuts.getwidth
local getfield = nuts.getfield
local setchar = nuts.setchar
@@ -59,7 +58,6 @@ local hash = scripts.hash
local numbertodataset = scripts.numbertodataset
local fonthashes = fonts.hashes
-local fontdata = fonthashes.identifiers
local quaddata = fonthashes.quads
local spacedata = fonthashes.spaces
@@ -534,7 +532,7 @@ end
-- nodes.tasks.prependaction("processors","normalizers","scripts.decomposehangul")
-local otffeatures = fonts.constructors.newfeatures("otf")
+local otffeatures = fonts.constructors.features.otf
local registerotffeature = otffeatures.register
registerotffeature {
@@ -961,7 +959,7 @@ local function process(head,first,last)
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 w = getwidth(first)
local s = spacedata[getfont(p)]
if w == s then -- could be option
if trace_details then
diff --git a/tex/context/base/mkiv/sort-ini.lua b/tex/context/base/mkiv/sort-ini.lua
index 3266425cb..7cd28d08f 100644
--- a/tex/context/base/mkiv/sort-ini.lua
+++ b/tex/context/base/mkiv/sort-ini.lua
@@ -50,7 +50,7 @@ just hook those into the replacer code that we reun beforehand.</p>
have language etc properties that then can be used.</p>
]]--
-local gsub, rep, sub, sort, concat, tohash, format = string.gsub, string.rep, string.sub, table.sort, table.concat, table.tohash, string.format
+local gsub, find, rep, sub, sort, concat, tohash, format = string.gsub, string.find, string.rep, string.sub, table.sort, table.concat, table.tohash, string.format
local utfbyte, utfchar, utfcharacters, utfvalues = utf.byte, utf.char, utf.characters, utf.values
local next, type, tonumber, rawget, rawset = next, type, tonumber, rawget, rawset
local P, Cs, R, S, lpegmatch = lpeg.P, lpeg.Cs, lpeg.R, lpeg.S, lpeg.match
@@ -557,7 +557,10 @@ function splitters.utf(str,checked) -- we could append m and u but this is clean
-- todo make an lpeg for this
for k=1,#replacements do
local v = replacements[k]
- str = gsub(str,v[1],v[2])
+ local s = v[1]
+ if find(str,s) then
+ str = gsub(str,s,v[2])
+ end
end
end
local m_case, z_case, p_case, m_mapping, z_mapping, p_mapping, char, byte, n = { }, { }, { }, { }, { }, { }, { }, { }, 0
diff --git a/tex/context/base/mkiv/sort-lan.lua b/tex/context/base/mkiv/sort-lan.lua
index e84692afc..21aabf3eb 100644
--- a/tex/context/base/mkiv/sort-lan.lua
+++ b/tex/context/base/mkiv/sort-lan.lua
@@ -59,7 +59,7 @@ definitions["en"] = { parent = "default" }
definitions['nl'] = {
parent = 'default',
replacements = {
- { "ij", 'y' }, { "IJ", 'Y' }, -- hm
+ -- { "ij", 'y' }, { "IJ", 'Y' }, -- no longer, or will be option
},
}
@@ -593,6 +593,35 @@ definitions["is"] = {
--- Greek
definitions["gr"] = {
+ replacements = {
+ { "α", "αa" }, { "ά", "αb" }, { "ὰ", "αc" }, { "ὰ", "αd" }, { "ᾳ", "αe" },
+ { "ἀ", "αf" }, { "ἁ", "αg" }, { "ἄ", "αh" }, { "ἂ", "αi" }, { "ἆ", "αj" },
+ { "ἁ", "αk" }, { "ἅ", "αl" }, { "ἃ", "αm" }, { "ἇ", "αn" }, { "ᾁ", "αo" },
+ { "ᾴ", "αp" }, { "ᾲ", "αq" }, { "ᾷ", "αr" }, { "ᾄ", "αs" }, { "ὰ", "αt" },
+ { "ᾅ", "αu" }, { "ᾃ", "αv" }, { "ᾆ", "αw" }, { "ᾇ", "αx" },
+ { "ε", "εa" }, { "έ", "εb" }, { "ὲ", "εc" }, { "ἐ", "εd" }, { "ἔ", "εe" },
+ { "ἒ", "εf" }, { "ἑ", "εg" }, { "ἕ", "εh" }, { "ἓ", "εi" },
+ { "η", "η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" },
+ { "ι", "ιa" }, { "ί", "ιb" }, { "ὶ", "ιc" }, { "ῖ", "ιd" }, { "ἰ", "ιe" },
+ { "ἴ", "ιf" }, { "ἲ", "ιg" }, { "ἶ", "ιh" }, { "ἱ", "ιi" }, { "ἵ", "ιj" },
+ { "ἳ", "ιk" }, { "ἷ", "ιl" }, { "ϊ", "ιm" }, { "ΐ", "ιn" }, { "ῒ", "ιo" },
+ { "ῗ", "ιp" },
+ { "ο", "οa" }, { "ό", "οb" }, { "ὸ", "οc" }, { "ὀ", "οd" }, { "ὄ", "οe" },
+ { "ὂ", "οf" }, { "ὁ", "οg" }, { "ὅ", "οh" }, { "ὃ", "οi" },
+ { "ρ", "ρa" }, { "ῤ", "ῤb" }, { "ῥ", "ῥc" },
+ { "υ", "υa" }, { "ύ", "υb" }, { "ὺ", "υc" }, { "ῦ", "υd" }, { "ὐ", "υe" },
+ { "ὔ", "υf" }, { "ὒ", "υg" }, { "ὖ", "υh" }, { "ὑ", "υi" }, { "ὕ", "υj" },
+ { "ὓ", "υk" }, { "ὗ", "υl" }, { "ϋ", "υm" }, { "ΰ", "υn" }, { "ῢ", "υo" },
+ { "ω", "ωa" }, { "ώ", "ωb" }, { "ὼ", "ωc" }, { "ῶ", "ωd" }, { "ῳ", "ωe" },
+ { "ὠ", "ωf" }, { "ὤ", "ωg" }, { "ὢ", "ωh" }, { "ὦ", "ωi" }, { "ᾠ", "ωj" },
+ { "ὡ", "ωk" }, { "ὥ", "ωl" }, { "ὣ", "ωm" }, { "ὧ", "ωn" }, { "ᾡ", "ωo" },
+ { "ῴ", "ωp" }, { "ῲ", "ωq" }, { "ῷ", "ωr" }, { "ᾤ", "ωs" }, { "ᾢ", "ωt" },
+ { "ᾥ", "ωu" }, { "ᾣ", "ωv" }, { "ᾦ", "ωw" }, { "ᾧ", "ωx" },
+ },
entries = {
["α"] = "α", ["ά"] = "α", ["ὰ"] = "α", ["ᾶ"] = "α", ["ᾳ"] = "α",
["ἀ"] = "α", ["ἁ"] = "α", ["ἄ"] = "α", ["ἂ"] = "α", ["ἆ"] = "α",
@@ -617,29 +646,34 @@ definitions["gr"] = {
["υ"] = "υ", ["ύ"] = "υ", ["ὺ"] = "υ", ["ῦ"] = "υ", ["ὐ"] = "υ",
["ὔ"] = "υ", ["ὒ"] = "υ", ["ὖ"] = "υ", ["ὑ"] = "υ", ["ὕ"] = "υ",
["ὓ"] = "υ", ["ὗ"] = "υ", ["ϋ"] = "υ", ["ΰ"] = "υ", ["ῢ"] = "υ",
- ["ῧ"] = "υ", ["φ"] = "φ", ["χ"] = "χ", ["ψ"] = "ω", ["ω"] = "ω",
+ ["ῧ"] = "υ", ["φ"] = "φ", ["χ"] = "χ", ["ψ"] = "ψ", ["ω"] = "ω",
["ώ"] = "ω", ["ὼ"] = "ω", ["ῶ"] = "ω", ["ῳ"] = "ω", ["ὠ"] = "ω",
["ὤ"] = "ω", ["ὢ"] = "ω", ["ὦ"] = "ω", ["ᾠ"] = "ω", ["ὡ"] = "ω",
["ὥ"] = "ω", ["ὣ"] = "ω", ["ὧ"] = "ω", ["ᾡ"] = "ω", ["ῴ"] = "ω",
["ῲ"] = "ω", ["ῷ"] = "ω", ["ᾤ"] = "ω", ["ᾢ"] = "ω", ["ᾥ"] = "ω",
["ᾣ"] = "ω", ["ᾦ"] = "ω", ["ᾧ"] = "ω",
},
+ -- orders = {
+ -- "α", "ά", "ὰ", "ᾶ", "ᾳ", "ἀ", "ἁ", "ἄ", "ἂ", "ἆ",
+ -- "ἁ", "ἅ", "ἃ", "ἇ", "ᾁ", "ᾴ", "ᾲ", "ᾷ", "ᾄ", "ᾂ",
+ -- "ᾅ", "ᾃ", "ᾆ", "ᾇ", "β", "γ", "δ", "ε", "έ", "ὲ",
+ -- "ἐ", "ἔ", "ἒ", "ἑ", "ἕ", "ἓ", "ζ", "η", "η", "ή",
+ -- "ὴ", "ῆ", "ῃ", "ἠ", "ἤ", "ἢ", "ἦ", "ᾐ", "ἡ", "ἥ",
+ -- "ἣ", "ἧ", "ᾑ", "ῄ", "ῂ", "ῇ", "ᾔ", "ᾒ", "ᾕ", "ᾓ",
+ -- "ᾖ", "ᾗ", "θ", "ι", "ί", "ὶ", "ῖ", "ἰ", "ἴ", "ἲ",
+ -- "ἶ", "ἱ", "ἵ", "ἳ", "ἷ", "ϊ", "ΐ", "ῒ", "ῗ", "κ",
+ -- "λ", "μ", "ν", "ξ", "ο", "ό", "ὸ", "ὀ", "ὄ", "ὂ",
+ -- "ὁ", "ὅ", "ὃ", "π", "ρ", "ῤ", "ῥ", "σ", "ς", "τ",
+ -- "υ", "ύ", "ὺ", "ῦ", "ὐ", "ὔ", "ὒ", "ὖ", "ὑ", "ὕ",
+ -- "ὓ", "ὗ", "ϋ", "ΰ", "ῢ", "ῧ", "φ", "χ", "ψ", "ω",
+ -- "ώ", "ὼ", "ῶ", "ῳ", "ὠ", "ὤ", "ὢ", "ὦ", "ᾠ", "ὡ",
+ -- "ὥ", "ὣ", "ὧ", "ᾡ", "ῴ", "ῲ", "ῷ", "ᾤ", "ᾢ", "ᾥ",
+ -- "ᾣ", "ᾦ", "ᾧ",
+ -- },
orders = {
- "α", "ά", "ὰ", "ᾶ", "ᾳ", "ἀ", "ἁ", "ἄ", "ἂ", "ἆ",
- "ἁ", "ἅ", "ἃ", "ἇ", "ᾁ", "ᾴ", "ᾲ", "ᾷ", "ᾄ", "ᾂ",
- "ᾅ", "ᾃ", "ᾆ", "ᾇ", "β", "γ", "δ", "ε", "έ", "ὲ",
- "ἐ", "ἔ", "ἒ", "ἑ", "ἕ", "ἓ", "ζ", "η", "η", "ή",
- "ὴ", "ῆ", "ῃ", "ἠ", "ἤ", "ἢ", "ἦ", "ᾐ", "ἡ", "ἥ",
- "ἣ", "ἧ", "ᾑ", "ῄ", "ῂ", "ῇ", "ᾔ", "ᾒ", "ᾕ", "ᾓ",
- "ᾖ", "ᾗ", "θ", "ι", "ί", "ὶ", "ῖ", "ἰ", "ἴ", "ἲ",
- "ἶ", "ἱ", "ἵ", "ἳ", "ἷ", "ϊ", "ΐ", "ῒ", "ῗ", "κ",
- "λ", "μ", "ν", "ξ", "ο", "ό", "ὸ", "ὀ", "ὄ", "ὂ",
- "ὁ", "ὅ", "ὃ", "π", "ρ", "ῤ", "ῥ", "σ", "ς", "τ",
- "υ", "ύ", "ὺ", "ῦ", "ὐ", "ὔ", "ὒ", "ὖ", "ὑ", "ὕ",
- "ὓ", "ὗ", "ϋ", "ΰ", "ῢ", "ῧ", "φ", "χ", "ψ", "ω",
- "ώ", "ὼ", "ῶ", "ῳ", "ὠ", "ὤ", "ὢ", "ὦ", "ᾠ", "ὡ",
- "ὥ", "ὣ", "ὧ", "ᾡ", "ῴ", "ῲ", "ῷ", "ᾤ", "ᾢ", "ᾥ",
- "ᾣ", "ᾦ", "ᾧ",
+ "α", "β", "γ", "δ", "ε", "ζ", "η", "θ", "ι", "κ",
+ "λ", "μ", "ν", "ξ", "ο", "π", "ρ", "σ", "ς", "τ",
+ "υ", "φ", "χ", "ψ", "ω",
},
}
@@ -722,12 +756,17 @@ definitions["es"] = {
["u"] = "u", ["ú"] = "u", ["ü"] = "u", ["v"] = "v", ["w"] = "w",
["x"] = "x", ["y"] = "y", ["z"] = "z",
},
+ -- orders = {
+ -- "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",
+ -- },
orders = {
- "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",
- }
+ "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",
+ },
}
--- Portuguese
diff --git a/tex/context/base/mkiv/spac-adj.lua b/tex/context/base/mkiv/spac-adj.lua
index cdf9b5051..3db59881b 100644
--- a/tex/context/base/mkiv/spac-adj.lua
+++ b/tex/context/base/mkiv/spac-adj.lua
@@ -8,16 +8,17 @@ if not modules then modules = { } end modules ['spac-adj'] = {
-- sort of obsolete code
-local a_vadjust = attributes.private('graphicvadjust')
+local a_vadjust = attributes.private('graphicvadjust')
-local nodecodes = nodes.nodecodes
+local nodecodes = nodes.nodecodes
-local hlist_code = nodecodes.hlist
-local vlist_code = nodecodes.vlist
+local hlist_code = nodecodes.hlist
+local vlist_code = nodecodes.vlist
-local remove_node = nodes.remove
-local hpack_node = node.hpack
-local vpack_node = node.vpack
+local remove_node = nodes.remove
+local hpack_node = node.hpack
+
+local enableaction = nodes.tasks.enableaction
function nodes.handlers.graphicvadjust(head,groupcode) -- we can make an actionchain for mvl only
if groupcode == "" then -- mvl only
@@ -61,6 +62,6 @@ interfaces.implement {
name = "enablegraphicvadjust",
onlyonce = true,
actions = function()
- nodes.tasks.enableaction("finalizers","nodes.handlers.graphicvadjust")
+ enableaction("finalizers","nodes.handlers.graphicvadjust")
end
}
diff --git a/tex/context/base/mkiv/spac-adj.mkiv b/tex/context/base/mkiv/spac-adj.mkiv
index ad0f92a1f..936e00624 100644
--- a/tex/context/base/mkiv/spac-adj.mkiv
+++ b/tex/context/base/mkiv/spac-adj.mkiv
@@ -23,7 +23,7 @@
\definesystemattribute [graphicvadjust] [public]
\unexpanded\def\enablegraphicvadjust
- {\writestatus\m!systems{graphicvadjusting is no longer needed!}
+ {\writestatus\m!system{graphicvadjusting is no longer needed!}
\clf_enablegraphicvadjust %once anyway
\glet\enablegraphicvadjust\relax}
diff --git a/tex/context/base/mkiv/spac-ali.lua b/tex/context/base/mkiv/spac-ali.lua
index a67a30133..bc77090cf 100644
--- a/tex/context/base/mkiv/spac-ali.lua
+++ b/tex/context/base/mkiv/spac-ali.lua
@@ -19,18 +19,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 getlist = nuts.getlist
local setlist = nuts.setlist
-local getattr = nuts.getattr
-local setattr = nuts.setattr
+local setlink = nuts.setlink
+local takeattr = nuts.takeattr
local getsubtype = nuts.getsubtype
+local getwidth = nuts.getwidth
+local findtail = nuts.tail
local hpack_nodes = nuts.hpack
-local linked_nodes = nuts.linked
local unsetvalue = attributes.unsetvalue
@@ -71,7 +71,7 @@ local function handler(head,leftpage,realpageno)
local id = getid(current)
if id == hlist_code then
if getsubtype(current) == line_code then
- local a = getattr(current,a_realign)
+ local a = takeattr(current,a_realign)
if not a or a == 0 then
-- skip
else
@@ -87,12 +87,16 @@ local function handler(head,leftpage,realpageno)
action = leftpage and 2 or 1
end
if action == 1 then
- setlist(current,hpack_nodes(linked_nodes(getlist(current),new_stretch(3)),getfield(current,"width"),"exactly"))
+ local head = getlist(current)
+ setlink(findtail(head),new_stretch(3)) -- append
+ setlist(current,hpack_nodes(head,getwidth(current),"exactly"))
if trace_realign then
report_realign("flushing left, align %a, page %a, realpage %a",align,pageno,realpageno)
end
elseif action == 2 then
- setlist(current,hpack_nodes(linked_nodes(new_stretch(3),getlist(current)),getfield(current,"width"),"exactly"))
+ local list = getlist(current)
+ local head = setlink(new_stretch(3),list) -- prepend
+ setlist(current,hpack_nodes(head,getwidth(current),"exactly"))
if trace_realign then
report_realign("flushing right. align %a, page %a, realpage %a",align,pageno,realpageno)
end
@@ -102,7 +106,6 @@ local function handler(head,leftpage,realpageno)
done = true
nofrealigned = nofrealigned + 1
end
- setattr(current,a_realign,unsetvalue)
end
end
handler(getlist(current),leftpage,realpageno)
@@ -115,7 +118,7 @@ local function handler(head,leftpage,realpageno)
end
function alignments.handler(head)
- local leftpage = isleftpage(true,false)
+ local leftpage = isleftpage()
local realpageno = texgetcount("realpageno")
local head, done = handler(tonut(head),leftpage,realpageno)
return tonode(head), done
diff --git a/tex/context/base/mkiv/spac-ali.mkiv b/tex/context/base/mkiv/spac-ali.mkiv
index 21714f07c..af02f76ae 100644
--- a/tex/context/base/mkiv/spac-ali.mkiv
+++ b/tex/context/base/mkiv/spac-ali.mkiv
@@ -86,16 +86,6 @@
\spac_directions_lefttoright_hmode
\fi}
-\unexpanded\def\spac_directions_lefttoright_vmode
- {\settrue\displaylefttoright
- \settrue\inlinelefttoright
- \textdir TLT\relax
- \pardir TLT\relax}
-
-\unexpanded\def\spac_directions_lefttoright_hmode
- {\settrue\inlinelefttoright
- \textdir TLT\relax}
-
\unexpanded\def\righttoleft
{\ifvmode
\spac_directions_righttoleft_vmode
@@ -103,15 +93,71 @@
\spac_directions_righttoleft_hmode
\fi}
+\unexpanded\def\spac_directions_lefttoright_vmode
+ {\settrue\displaylefttoright
+ \settrue\inlinelefttoright
+ \textdir TLT\relax
+ \pardir TLT\relax}
+
\unexpanded\def\spac_directions_righttoleft_vmode
{\setfalse\displaylefttoright
\setfalse\inlinelefttoright
\textdir TRT\relax
\pardir TRT\relax}
-\unexpanded\def\spac_directions_righttoleft_hmode
- {\textdir TRT\relax
- \setfalse\inlinelefttoright}
+\newconditional\c_spac_auto_line_dir \settrue\c_spac_auto_line_dir
+
+\ifdefined\linedir
+
+ \unexpanded\def\spac_directions_lefttoright_hmode
+ {\ifconditional\c_spac_auto_line_dir\linedir\else\textdir\fi TLT\relax % linedir keeps subtype
+ \setfalse\inlinerighttoleft}
+
+ \unexpanded\def\spac_directions_righttoleft_hmode
+ {\ifconditional\c_spac_auto_line_dir\linedir\else\textdir\fi TRT\relax % linedir keeps subtype
+ \setfalse\inlinelefttoright}
+
+\else % keep this as reference
+
+ \unexpanded\def\spac_directions_lefttoright_hmode
+ {\settrue\inlinelefttoright
+ \textdir TLT\relax}
+
+ \unexpanded\def\spac_directions_righttoleft_hmode
+ {\textdir TRT\relax
+ \setfalse\inlinelefttoright}
+
+ \unexpanded\def\spac_directions_lefttoright_hmode
+ {\ifconditional\c_spac_auto_line_dir
+ \ifzeropt\lastskip
+ \textdir TLT\relax
+ \else
+ \scratchskip\lastskip
+ \unskip
+ \textdir TLT\relax
+ \hskip\scratchskip
+ \fi
+ \else
+ \textdir TLT\relax
+ \fi
+ \setfalse\inlinerighttoleft}
+
+ \unexpanded\def\spac_directions_righttoleft_hmode
+ {\ifconditional\c_spac_auto_line_dir
+ \ifzeropt\lastskip
+ \textdir TRT\relax
+ \else
+ \scratchskip\lastskip
+ \unskip
+ \textdir TRT\relax
+ \hskip\scratchskip
+ \fi
+ \else
+ \textdir TRT\relax
+ \fi
+ \setfalse\inlinelefttoright}
+
+\fi
% \def\currentdirectionparameters
% {\ifconditional\inlinelefttoright \else
@@ -229,6 +275,8 @@
\fi
\ifx\dohyphens\relax % was 2.5 in old implementation using scratch registers
\hyphenpenalty\dimexpr2.8\hsize/\dimexpr#1\relax\relax % 50 in raggedright/raggedleft
+ %\else
+ % no need to do something as we're in \nohyphens
\fi}
\unexpanded\def\spac_align_set_tolerant
@@ -291,6 +339,7 @@
\newconstant\c_spac_align_state_par_fill
\def\v_spac_align_fill_amount {\plusone fil}
+\def\v_spac_align_fill_amount_hard {\plusone fill}
\def\v_spac_align_fill_amount_negative {\minusone fil}
\def\v_spac_align_fill_amount_double {\plustwo fil}
\def\v_spac_align_fill_amount_space {\plustwo fil} % can be added to xspace if we have a key
@@ -406,6 +455,18 @@
\parindent \zeropoint
\relax}
+\unexpanded\def\spac_align_set_horizontal_flushedright_last_line
+ {\raggedstatus\zerocount
+ \attribute\alignstateattribute\attributeunsetvalue
+ \leftskip \plusone\leftskip \s!plus\v_spac_align_fill_amount\relax
+ \rightskip \plusone\rightskip\s!plus\v_spac_align_fill_amount_negative\relax
+ \spaceskip \zeropoint\relax
+ \xspaceskip \zeropoint\relax
+ \parfillskip \zeropoint
+ \parfillleftskip\zeropoint\s!plus\v_spac_align_fill_amount_hard\relax
+ \parindent \zeropoint
+ \relax}
+
\unexpanded\def\spac_align_set_horizontal_right_tt % a plain command
{\tttf % brrr
\raggedstatus\plusthree
@@ -472,6 +533,10 @@
% 7 centered last line
\spac_align_set_horizontal_centered_last_line
\or
+ % 8 right aligned last line
+ \spac_align_set_horizontal_flushedright_last_line
+ \or
+ % 9 paragraph
\parfillskip\zeropoint
\fi
\relax}
@@ -694,7 +759,8 @@
\c_spac_align_state_broad \plustwo }
\setvalue{\??aligncommand\v!disable }{\c_spac_align_state_horizontal\plussix }
\setvalue{\??aligncommand\v!last }{\c_spac_align_state_horizontal\plusseven}
-\setvalue{\??aligncommand\v!paragraph }{\c_spac_align_state_horizontal\pluseight}
+\setvalue{\??aligncommand\v!end }{\c_spac_align_state_horizontal\pluseight}
+\setvalue{\??aligncommand\v!paragraph }{\c_spac_align_state_horizontal\plusnine}
\setvalue{\??aligncommand\v!lefttoright }{\c_spac_align_state_direction \plusone }
@@ -758,18 +824,19 @@
% Visible commands:
-\let\notragged \spac_align_set_horizontal_none
-\let\raggedleft \spac_align_set_horizontal_left
-\let\raggedcenter \spac_align_set_horizontal_center
-\let\raggedright \spac_align_set_horizontal_right
-\let\veryraggedleft \spac_align_set_horizontal_very_left
-\let\veryraggedcenter\spac_align_set_horizontal_very_center
-\let\veryraggedright \spac_align_set_horizontal_very_right
-\let\raggedwidecenter\spac_align_set_horizontal_wide_center
-\let\centeredlastline\spac_align_set_horizontal_centered_last_line
-\let\ttraggedright \spac_align_set_horizontal_right_tt % a plain command
+\let\notragged \spac_align_set_horizontal_none
+\let\raggedleft \spac_align_set_horizontal_left
+\let\raggedcenter \spac_align_set_horizontal_center
+\let\raggedright \spac_align_set_horizontal_right
+\let\veryraggedleft \spac_align_set_horizontal_very_left
+\let\veryraggedcenter \spac_align_set_horizontal_very_center
+\let\veryraggedright \spac_align_set_horizontal_very_right
+\let\raggedwidecenter \spac_align_set_horizontal_wide_center
+\let\centeredlastline \spac_align_set_horizontal_centered_last_line
+\let\flushedrightlastline\spac_align_set_horizontal_flushedright_last_line
+\let\ttraggedright \spac_align_set_horizontal_right_tt % a plain command
-\let\forgetragged \spac_align_set_horizontal_none
+\let\forgetragged \spac_align_set_horizontal_none
\appendtoks
\spac_align_set_horizontal_none
@@ -889,7 +956,7 @@
\leftskip \rightskip
\spaceskip \xspaceskip
\parindent \parfillskip
- \hyphenpenalty \exhyphenpenalty
+ \hyphenpenalty \exhyphenpenalty \automatichyphenpenalty \explicithyphenpenalty
\displaywidowpenalty \widowpenalty \clubpenalty \brokenpenalty
\doublehyphendemerits \finalhyphendemerits \adjdemerits
\relax}%
@@ -1229,10 +1296,11 @@
% Some obsolete (old) helpers:
-\def\dodefinehbox[#1][#2]%
+\unexpanded\def\definehbox
+ {\dodoubleargument\spac_align_definehbox}
+
+\def\spac_align_definehbox[#1][#2]%
{\setvalue{hbox#1}##1{\hbox to #2{\begstrut##1\endstrut\hss}}}
-\unexpanded\def\definehbox
- {\dodoubleargument\dodefinehbox}
\protect \endinput
diff --git a/tex/context/base/mkiv/spac-chr.lua b/tex/context/base/mkiv/spac-chr.lua
index 97b32c366..fe402ed87 100644
--- a/tex/context/base/mkiv/spac-chr.lua
+++ b/tex/context/base/mkiv/spac-chr.lua
@@ -36,6 +36,7 @@ local getnext = nuts.getnext
local getprev = nuts.getprev
local getattr = nuts.getattr
local setattr = nuts.setattr
+local setattrlist = nuts.setattrlist
local getfont = nuts.getfont
local getchar = nuts.getchar
local setsubtype = nuts.setsubtype
@@ -46,7 +47,6 @@ local setcolor = nodes.tracers.colors.set
local insert_node_before = nuts.insert_before
local insert_node_after = nuts.insert_after
local remove_node = nuts.remove
-local copy_node_list = nuts.copy_list
local traverse_id = nuts.traverse_id
local tasks = nodes.tasks
@@ -60,7 +60,6 @@ local new_rule = nodepool.rule
local nodecodes = nodes.nodecodes
local skipcodes = nodes.skipcodes
local glyph_code = nodecodes.glyph
-local glue_code = nodecodes.glue
local space_skip_code = skipcodes["spaceskip"]
@@ -88,36 +87,33 @@ local c_zero = byte('0')
local c_period = byte('.')
local function inject_quad_space(unicode,head,current,fraction)
- local attr = getfield(current,"attr")
if fraction ~= 0 then
fraction = fraction * fontquads[getfont(current)]
end
local glue = new_glue(fraction)
- setfield(glue,"attr",attr)
- setfield(current,"attr",nil)
+ setattrlist(glue,current)
+ setattrlist(current) -- why reset all
setattr(glue,a_character,unicode)
head, current = insert_node_after(head,current,glue)
return head, current
end
local function inject_char_space(unicode,head,current,parent)
- local attr = getfield(current,"attr")
local font = getfont(current)
local char = fontcharacters[font][parent]
local glue = new_glue(char and char.width or fontparameters[font].space)
- setfield(glue,"attr",attr)
- setfield(current,"attr",nil)
+ setattrlist(glue,current)
+ setattrlist(current) -- why reset all
setattr(glue,a_character,unicode)
head, current = insert_node_after(head,current,glue)
return head, current
end
local function inject_nobreak_space(unicode,head,current,space,spacestretch,spaceshrink)
- local attr = getfield(current,"attr")
local glue = new_glue(space,spacestretch,spaceshrink)
local penalty = new_penalty(10000)
- setfield(glue,"attr",attr)
- setfield(current,"attr",nil)
+ setattrlist(glue,current)
+ setattrlist(current) -- why reset all
setattr(glue,a_character,unicode) -- bombs
head, current = insert_node_after(head,current,penalty)
if trace_nbsp then
@@ -179,7 +175,9 @@ local methods = {
-- The next one uses an attribute assigned to the character but still we
-- don't have the 'local' value.
- [0x001F] = function(head,current)
+ -- maybe also 0x0008 : backspace
+
+ [0x001F] = function(head,current) -- kind of special
local next = getnext(current)
if next then
local char = isglyph(next)
diff --git a/tex/context/base/mkiv/spac-chr.mkiv b/tex/context/base/mkiv/spac-chr.mkiv
index 562fb940c..c4aadd49f 100644
--- a/tex/context/base/mkiv/spac-chr.mkiv
+++ b/tex/context/base/mkiv/spac-chr.mkiv
@@ -62,6 +62,7 @@
% % "2003 % quad == \quad == \hskip\emwidth
\edef\threeperemspace {\normalUchar"2004} % quad/3
\edef\fourperemspace {\normalUchar"2005} % quad/4
+%edef\fiveperemspace {\normalUchar"001E} % quad/5 (bonus)
\edef\sixperemspace {\normalUchar"2006} % quad/6
\edef\figurespace {\normalUchar"2007} % width of zero
\edef\punctuationspace {\normalUchar"2008} % width of period
@@ -71,9 +72,12 @@
\edef\zerowidthnonjoiner {\normalUchar"200C} % 0
\edef\zerowidthjoiner {\normalUchar"200D} % 0
\edef\narrownobreakspace {\normalUchar"202F} % quad/8
-% % "205F % space/8 (math)
-% \zerowidthnobreakspace {\normalUchar"FEFF}
+%edef\mediummathspace {\normalUchar"205F} % space/8 (math)
+%edef\zerowidthnobreakspace {\normalUchar"FEFF}
+%edef\fiveperemspace {\normalUchar"001E}
+
\udef\zerowidthnobreakspace {\penalty\plustenthousand\kern\zeropoint}
+\udef\fiveperemspace {\hskip\dimexpr\emwidth/5\relax}
\let\zwnj\zerowidthnonjoiner
\let\zwj \zerowidthjoiner
@@ -87,9 +91,5 @@
\unexpanded\def~{\nobreakspace}
-% Goodies:
-
-\unexpanded\def\fiveperemspace{\hskip\dimexpr\emwidth/5\relax}
-
\protect \endinput
diff --git a/tex/context/base/mkiv/spac-def.mkiv b/tex/context/base/mkiv/spac-def.mkiv
index 7ead3c63e..24913cbf7 100644
--- a/tex/context/base/mkiv/spac-def.mkiv
+++ b/tex/context/base/mkiv/spac-def.mkiv
@@ -29,6 +29,7 @@
\settopskip % factors set in \forgetverticalstretch
\setmaxdepth % factors set in \forgetverticalstretch
\synchronizeindenting
+ \synchronizeskipamounts
\synchronizeblank
\synchronizewhitespace
\synchronizespacecodes % not needed, frozen factors
diff --git a/tex/context/base/mkiv/spac-grd.mkiv b/tex/context/base/mkiv/spac-grd.mkiv
index 7b3ee6d6c..899b6e890 100644
--- a/tex/context/base/mkiv/spac-grd.mkiv
+++ b/tex/context/base/mkiv/spac-grd.mkiv
@@ -150,7 +150,7 @@
\dp\scratchbox\strutdp
\nointerlineskip
\forgetall
- \ruledvbox{\box\scratchbox}%
+ \ruledvpack{\box\scratchbox}%
\egroup
\prevdepth\strutdp}%
\def\dotopbaselinecorrection
@@ -300,4 +300,30 @@
\normalstartbaselinecorrection
\fi}
+% This is new (and experimental) and might replace some of the above. beware it doesn't always work
+% out well, e.g. when used grouped and such (e.g. before display math doesn't work out well).
+
+\unexpanded\def\spac_fake_next_line_new
+ {\par
+ \begingroup
+ \reseteverypar
+ \dontleavehmode\hpack{\strut}\par
+ \clf_fakenextstrutline
+ \ifdim\pagetotal>\lineheight
+ \pagetotal\dimexpr\pagetotal-\lineheight\relax
+ \fi
+ \endgroup}
+
+% \unexpanded\def\spac_fake_next_line_old
+% {\par
+% \begingroup
+% \reseteverypar
+% \dontleavehmode\hpack to \zeropoint{\page_sides_anchor\hss\strut}% just a tracer
+% \vskip-\parskip
+% \vskip-\struttotal
+% \endgroup}
+
+%let\fakenextstrutline\spac_fake_next_line_old
+\let\fakenextstrutline\spac_fake_next_line_new
+
\protect \endinput
diff --git a/tex/context/base/mkiv/spac-hor.lua b/tex/context/base/mkiv/spac-hor.lua
index 5d5a43e31..17b104459 100644
--- a/tex/context/base/mkiv/spac-hor.lua
+++ b/tex/context/base/mkiv/spac-hor.lua
@@ -6,7 +6,6 @@ if not modules then modules = { } end modules ['spac-hor'] = {
license = "see context related readme files"
}
-local utfbyte = utf.byte
local lpegmatch, P, C = lpeg.match, lpeg.P, lpeg.C
local context = context
diff --git a/tex/context/base/mkiv/spac-hor.mkiv b/tex/context/base/mkiv/spac-hor.mkiv
index 08e5f6343..405abcb5d 100644
--- a/tex/context/base/mkiv/spac-hor.mkiv
+++ b/tex/context/base/mkiv/spac-hor.mkiv
@@ -17,6 +17,9 @@
\registerctxluafile{spac-hor}{1.001}
+\let \parfillrightskip \parfillskip
+\newskip\parfillleftskip
+
\let\v_spac_indentation_current\empty % amount/keyword
\newdimen \d_spac_indentation_par
@@ -525,7 +528,7 @@
% but, since not all fonts have .5em digits:
\unexpanded\def\fixedspace
- {\setbox\scratchbox\hbox{\mathortext{0}{0}}%
+ {\setbox\scratchbox\hpack{\mathortext{0}{0}}% was \hbox
\hskip\wd\scratchbox\relax}
\unexpanded\def\fixedspaces
@@ -605,6 +608,12 @@
\unexpanded\def\charspace{ } % the unexpandable \space (as space can also be delimiter for numbers)
+\unexpanded\def\quads
+ {\dosingleempty\spac_quads}
+
+\def\spac_quads[#1]%
+ {\zwj\dorecurse{\iffirstargument#1\else\plusthree\fi}{\hskip\emwidth\zwj}}
+
% Suggested by GB (not the name -):
\def\rapfillskip{.5\hsize plus .092\hsize minus .5\hsize} % D.A.'s value
@@ -689,7 +698,7 @@
\global\s_spac_narrower_left \zeropoint
\global\s_spac_narrower_right \zeropoint
\global\s_spac_narrower_middle\zeropoint
- \processcommalistwithparameters[#1]\spac_narrower_initialize
+ \normalexpanded{\processcommalistwithparameters[#1]}\spac_narrower_initialize
\advance\leftskip \dimexpr\s_spac_narrower_left +\s_spac_narrower_middle\relax
\advance\rightskip\dimexpr\s_spac_narrower_right+\s_spac_narrower_middle\relax
\seteffectivehsize}
@@ -764,14 +773,14 @@
\let\stopnarrow\spac_narrower_stop
\newdimen\d_spac_effective_hsize \def\effectivehsize {\hsize}
-\newdimen\d_spac_effective_leftskip \def\effectiveleftskip {\leftskip}
-\newdimen\d_spac_effective_rightskip \def\effectiverightskip{\rightskip}
+\newdimen\d_spac_effective_leftskip \def\effectiveleftskip {\dimexpr\leftskip \relax}
+\newdimen\d_spac_effective_rightskip \def\effectiverightskip{\dimexpr\rightskip\relax}
\unexpanded\def\seteffectivehsize
{\setlocalhsize
\d_spac_effective_hsize \localhsize
- \d_spac_effective_leftskip \leftskip
- \d_spac_effective_rightskip\rightskip
+ \d_spac_effective_leftskip 1\leftskip
+ \d_spac_effective_rightskip1\rightskip
\let\effectivehsize \d_spac_effective_hsize
\let\effectiveleftskip \d_spac_effective_leftskip
\let\effectiverightskip\d_spac_effective_rightskip}
@@ -782,15 +791,19 @@
\newskip\leftskipadaption
\newskip\rightskipadaption
-\setvalue{\??skipadaptionleft \v!standard}{\ifdim\d_spac_indentation_par=\zeropoint\narrowerparameter\c!left\else\d_spac_indentation_par\fi}
-\setvalue{\??skipadaptionleft \v!yes }{\ifdim\d_spac_indentation_par=\zeropoint\narrowerparameter\c!left\else\d_spac_indentation_par\fi}
+\setvalue{\??skipadaptionleft \v!yes }{\ifzeropt\d_spac_indentation_par\narrowerparameter\c!left\else\d_spac_indentation_par\fi}
\letvalue{\??skipadaptionleft \v!no }\zeropoint
\letvalue{\??skipadaptionleft \empty }\zeropoint
-\setvalue{\??skipadaptionright\v!standard}{\narrowerparameter\c!right}
\setvalue{\??skipadaptionright\v!yes }{\narrowerparameter\c!right}
\letvalue{\??skipadaptionright\v!no }\zeropoint
\letvalue{\??skipadaptionright\empty }\zeropoint
+% \setvalue{\??skipadaptionleft \v!standard}{\ifdim\d_spac_indentation_par=\zeropoint\narrowerparameter\c!left\else\d_spac_indentation_par\fi}
+% \setvalue{\??skipadaptionright\v!standard}{\narrowerparameter\c!right}
+
+\letcsnamecsname\csname\??skipadaptionleft \v!standard\endcsname\csname\??skipadaptionleft \v!yes\endcsname
+\letcsnamecsname\csname\??skipadaptionright\v!standard\endcsname\csname\??skipadaptionright\v!yes\endcsname
+
% \unexpanded\def\dosetleftskipadaption #1{\leftskipadaption \ifcsname\??skipadaptionleft #1\endcsname\csname\??skipadaptionleft #1\endcsname\else#1\fi\relax}
% \unexpanded\def\dosetrightskipadaption#1{\rightskipadaption\ifcsname\??skipadaptionright#1\endcsname\csname\??skipadaptionright#1\endcsname\else#1\fi\relax}
@@ -1110,7 +1123,7 @@
{\futurelet\nexttoken\spac_spaces_auto_insert_next}
\def\spac_spaces_auto_insert_next
- {\clf_autonextspace{\meaning\nexttoken}} % todo, just consult nexttoken at the lua end
+ {\clf_autonextspace{\normalmeaning\nexttoken}} % todo, just consult nexttoken at the lua end
%D Moved from bib module:
diff --git a/tex/context/base/mkiv/spac-lin.mkiv b/tex/context/base/mkiv/spac-lin.mkiv
index c4c6eb6d9..6558cb111 100644
--- a/tex/context/base/mkiv/spac-lin.mkiv
+++ b/tex/context/base/mkiv/spac-lin.mkiv
@@ -61,7 +61,7 @@
\appendtoks
\setuevalue{\e!start\currentlines}{\spac_lines_start[\currentlines]}%
- \setuevalue{\e!stop \currentlines}{\spac_lines_stop}%
+ \letvalue {\e!stop \currentlines }\spac_lines_stop
\to \everydefinelines
\unexpanded\def\spac_lines_start[#1]%
@@ -107,14 +107,17 @@
\def\spac_lines_after_first_obeyed_line_a % tzt two pass, like itemize
{\linesparameter\c!command
+ \linesparameter\c!left
\glet\spac_after_first_obeyed_line\spac_lines_after_first_obeyed_line_b}
\def\spac_lines_after_first_obeyed_line_b
{\spac_lines_break
- \linesparameter\c!command}
+ \linesparameter\c!command
+ \linesparameter\c!left}
\def\spac_lines_obeyed_line
- {\dostoptagged
+ {\ifdone\linesparameter\c!right\fi
+ \dostoptagged % can be a dummy one as we don't look ahead
\par
\dostarttagged\t!line\empty
\futurelet\next\spac_lines_between}
@@ -128,9 +131,13 @@
\egroup}
\def\spac_lines_between
- {\doifelsemeaning\next\obeyedline % brrr
- {\linesparameter\c!inbetween}
- {\spac_after_first_obeyed_line}}
+ {\ifx\next\spac_lines_stop
+ \donefalse
+ \else
+ \doifelsemeaning\next\obeyedline % brrr
+ {\donefalse\linesparameter\c!inbetween}
+ {\donetrue\spac_after_first_obeyed_line}%
+ \fi}
\definelines[\v!lines]
diff --git a/tex/context/base/mkiv/spac-prf.lua b/tex/context/base/mkiv/spac-prf.lua
index 4cd39336e..841e5d271 100644
--- a/tex/context/base/mkiv/spac-prf.lua
+++ b/tex/context/base/mkiv/spac-prf.lua
@@ -34,13 +34,9 @@ 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
@@ -54,11 +50,23 @@ local getprev = nuts.getprev
local getsubtype = nuts.getsubtype
local getlist = nuts.getlist
local gettexbox = nuts.getbox
+local getwhd = nuts.getwhd
+local getglue = nuts.getglue
+local getkern = nuts.getkern
+local getshift = nuts.getshift
+local getwidth = nuts.getwidth
+local getheight = nuts.getheight
+local getdepth = nuts.getdepth
local setfield = nuts.setfield
local setlink = nuts.setlink
local setlist = nuts.setlist
local setattr = nuts.setattr
+local setwhd = nuts.setwhd
+local setshift = nuts.setshift
+local setwidth = nuts.setwidth
+local setheight = nuts.setheight
+local setdepth = nuts.setdepth
local properties = nodes.properties.data
local setprop = nuts.setprop
@@ -72,7 +80,6 @@ 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
@@ -89,6 +96,8 @@ local v_strict = variables.strict
local setcolor = nodes.tracers.colors.set
local settransparency = nodes.tracers.transparencies.set
+local enableaction = nodes.tasks.enableaction
+
local profiling = { }
builders.profiling = profiling
@@ -120,7 +129,7 @@ local function getprofile(line,step)
local step = step or 65536 -- * 2 -- 2pt
local margin = step / 4
local min = 0
- local max = ceiling(getfield(line,"width")/step) + 1
+ local max = ceiling(getwidth(line)/step) + 1
for i=min,max do
heights[i] = 0
@@ -166,12 +175,10 @@ local function getprofile(line,step)
while current do
local id = getid(current)
if id == glyph_code then
- wd = getfield(current,"width")
- ht = getfield(current,"height")
- dp = getfield(current,"depth")
+ wd, ht, dp = getwhd(current)
progress()
elseif id == kern_code then
- wd = getfield(current,"kern")
+ wd = getkern(current)
ht = 0
dp = 0
progress()
@@ -181,20 +188,26 @@ local function getprofile(line,step)
process(replace)
end
elseif id == glue_code then
- wd = getfield(current,"width")
+ local width, stretch, shrink, stretch_order, shrink_order = getglue(current)
if glue_sign == 1 then
- if getfield(current,"stretch_order") == glue_order then
- wd = wd + getfield(current,"stretch") * glue_set
+ if stretch_order == glue_order then
+ wd = width + stretch * glue_set
+ else
+ wd = width
end
elseif glue_sign == 2 then
- if getfield(current,"shrink_order") == glue_order then
- wd = wd - getfield(current,"shrink") * glue_set
+ if shrink_order == glue_order then
+ wd = width - shrink * glue_set
+ else
+ wd = width
end
+ else
+ wd = width
end
if getsubtype(current) >= leaders_code then
local leader = getleader(current)
- ht = getfield(leader,"height")
- dp = getfield(leader,"depth")
+ local w
+ w, ht, dp = getwhd(leader) -- can become getwhd(current) after 1.003
else
ht = 0
dp = 0
@@ -202,36 +215,34 @@ local function getprofile(line,step)
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")
+ local shift = getshift(current)
+ local w, h, d = getwhd(current)
-- if getattr(current,a_specialcontent) then
if getprop(current,"specialcontent") then
-- like a margin note, maybe check for wd
+ wd = w
ht = 0
dp = 0
else
- ht = getfield(current,"height") - shift
- dp = getfield(current,"depth") + shift
+ wd = w
+ ht = h - shift
+ dp = d + 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
+ local shift = getshift(current) -- todo
+ wd, ht, dp = getwhd(current)
progress()
elseif id == rule_code then
- wd = getfield(current,"width")
- ht = getfield(current,"height")
- dp = getfield(current,"depth")
+ wd, ht, dp = getwhd(current)
progress()
elseif id == math_code then
- wd = getfield(current,"surround")
+ wd = getkern(current) + getwidth(current) -- surround
ht = 0
dp = 0
progress()
elseif id == marginkern_code then
- wd = getfield(current,"width")
+ wd = getwidth(current)
ht = 0
dp = 0
progress()
@@ -300,19 +311,15 @@ local function addstring(height,depth)
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)
+ setshift(httext,- 1.2 * exheight)
+ setshift(dptext, 0.6 * exheight)
+ local text = hpack_nodes(setlink(
+ new_kern(-getwidth(httext)-emwidth),
+ httext,
+ new_kern(-getwidth(dptext)),
+ dptext
+ ))
+ setwhd(text,0,0,0)
return text
end
@@ -389,15 +396,13 @@ local function addprofile(node,profile,step)
local rule = hpack_nodes(head)
- setfield(rule,"width", 0)
- setfield(rule,"height",0)
- setfield(rule,"depth", 0)
+ setwhd(rule,0,0,0)
-- if texttoo then
--
-- local text = addstring(
- -- formatters["%0.4f"](getfield(rule,"height")/65536),
- -- formatters["%0.4f"](getfield(rule,"depth") /65536)
+ -- formatters["%0.4f"](getheight(rule)/65536),
+ -- formatters["%0.4f"](getdepth(rule) /65536)
-- )
--
-- setlink(text,rule)
@@ -486,8 +491,8 @@ methods[v_strict] = function(top,bot,t_profile,b_profile,specification)
local strutdp = specification.depth or texdimen.strutdp
local lineheight = strutht + strutdp
- local depth = getfield(top,"depth")
- local height = getfield(bot,"height")
+ local depth = getdepth(top)
+ local height = getheight(bot)
local total = depth + height
local distance = specification.distance or 0
local delta = lineheight - total
@@ -522,8 +527,8 @@ methods[v_fixed] = function(top,bot,t_profile,b_profile,specification)
local strutdp = specification.depth or texdimen.strutdp
local lineheight = strutht + strutdp
- local depth = getfield(top,"depth")
- local height = getfield(bot,"height")
+ local depth = getdepth(top)
+ local height = getheight(bot)
local total = depth + height
local distance = specification.distance or 0
local delta = lineheight - total
@@ -535,8 +540,8 @@ methods[v_fixed] = function(top,bot,t_profile,b_profile,specification)
-- no distance (yet)
if delta < lineheight then
- setfield(top,"depth",strutdp)
- setfield(bot,"height",strutht)
+ setdepth(top,strutdp)
+ setheight(bot,strutht)
return true
end
@@ -547,13 +552,13 @@ methods[v_fixed] = function(top,bot,t_profile,b_profile,specification)
depth = depth - lineheight
dp = dp + lineheight
end
- setfield(top,"depth",dp)
+ setdepth(top,dp)
local ht = strutht
while height > lineheight - strutht do
height = height - lineheight
ht = ht + lineheight
end
- setfield(bot,"height",ht)
+ setheight(bot,ht)
local lines = floor(delta/lineheight)
if lines > 0 then
inject(top,bot,-lines * lineheight)
@@ -564,17 +569,17 @@ methods[v_fixed] = function(top,bot,t_profile,b_profile,specification)
end
if total < lineheight then
- setfield(top,"depth",strutdp)
- setfield(bot,"height",strutht)
+ setdepth(top,strutdp)
+ setheight(bot,strutht)
return true
end
if depth < strutdp then
- setfield(top,"depth",strutdp)
+ setdepth(top,strutdp)
total = total - depth + strutdp
end
if height < strutht then
- setfield(bot,"height",strutht)
+ setheight(bot,strutht)
total = total - height + strutht
end
@@ -674,7 +679,7 @@ local function profilelist(line,mvl)
end
break
elseif id == glue_code then
- local wd = getfield(current,"width")
+ local wd = getwidth(current)
if not wd or wd == 0 then
-- go on
else
@@ -748,7 +753,7 @@ local function profilelist(line,mvl)
if top then
local subtype = getsubtype(current)
-- if subtype == lineskip_code or subtype == baselineskip_code then
- local wd = getfield(current,"width")
+ local wd = getwidth(current)
if wd > 0 then
distance = wd
lastglue = current
@@ -792,9 +797,9 @@ local enabled = false
function profiling.set(specification)
if not enabled then
- nodes.tasks.enableaction("mvlbuilders", "builders.profiling.pagehandler")
+ 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")
+ -- enableaction("vboxbuilders","builders.profiling.vboxhandler")
enabled = true
end
local n = #specifications + 1
@@ -853,7 +858,7 @@ function profiling.profilebox(specification)
local subtype = getsubtype(current)
if subtype == lineskip_code or subtype == baselineskip_code then
if top then
- local wd = getfield(current,"width")
+ local wd = getwidth(current)
if wd > 0 then
distance = wd
lastglue = current
@@ -889,12 +894,12 @@ function profiling.profilebox(specification)
end
-local ignore = table.tohash {
- "split_keep",
- "split_off",
- -- "vbox",
-}
-
+-- 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)
diff --git a/tex/context/base/mkiv/spac-ver.lua b/tex/context/base/mkiv/spac-ver.lua
index e81e8b81d..2f0191e6a 100644
--- a/tex/context/base/mkiv/spac-ver.lua
+++ b/tex/context/base/mkiv/spac-ver.lua
@@ -30,6 +30,8 @@ if not modules then modules = { } end modules ['spac-ver'] = {
-- todo: strip baselineskip around display math
+-- todo: getglue(n,false) instead of getfield
+
local next, type, tonumber = next, type, tonumber
local gmatch, concat = string.gmatch, table.concat
local ceil, floor = math.ceil, math.floor
@@ -39,8 +41,6 @@ local allocate = utilities.storage.allocate
local todimen = string.todimen
local formatters = string.formatters
-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
@@ -49,13 +49,48 @@ local context = context
local tex = tex
local texlists = tex.lists
+local texget = tex.get
+local texgetcount = tex.getcount
local texgetdimen = tex.getdimen
+local texset = tex.set
local texsetdimen = tex.setdimen
local texnest = tex.nest
local variables = interfaces.variables
local implement = interfaces.implement
+local v_local = variables["local"]
+local v_global = variables["global"]
+local v_box = variables.box
+----- v_page = variables.page -- reserved for future use
+local v_split = variables.split
+local v_min = variables.min
+local v_max = variables.max
+local v_none = variables.none
+local v_line = variables.line
+local v_noheight = variables.noheight
+local v_nodepth = variables.nodepth
+local v_line = variables.line
+local v_halfline = variables.halfline
+local v_line_m = "-" .. variables.line
+local v_halfline_m = "-" .. variables.halfline
+local v_first = variables.first
+local v_last = variables.last
+local v_top = variables.top
+local v_bottom = variables.bottom
+local v_minheight = variables.minheight
+local v_maxheight = variables.maxheight
+local v_mindepth = variables.mindepth
+local v_maxdepth = variables.maxdepth
+local v_offset = variables.offset
+local v_strut = variables.strut
+
+local v_hfraction = variables.hfraction
+local v_dfraction = variables.dfraction
+local v_bfraction = variables.bfraction
+local v_tlines = variables.tlines
+local v_blines = variables.blines
+
-- vertical space handler
local trace_vbox_vspacing = false trackers.register("vspacing.vbox", function(v) trace_vbox_vspacing = v end)
@@ -66,24 +101,22 @@ local trace_vspacing = false trackers.register("vspacing.spacing", fun
local trace_vsnapping = false trackers.register("vspacing.snapping", function(v) trace_vsnapping = v end)
local trace_specials = false trackers.register("vspacing.specials", function(v) trace_specials = v end)
+local remove_math_skips = true directives.register("vspacing.removemathskips", function(v) remnove_math_skips = v end)
+
local report_vspacing = logs.reporter("vspacing","spacing")
local report_collapser = logs.reporter("vspacing","collapsing")
local report_snapper = logs.reporter("vspacing","snapping")
local report_specials = logs.reporter("vspacing","specials")
-local report_page_builder = logs.reporter("builders","page")
local a_skipcategory = attributes.private('skipcategory')
local a_skippenalty = attributes.private('skippenalty')
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
local tonut = nuts.tonut
-local ntostring = nuts.tostring
local getfield = nuts.getfield
local setfield = nuts.setfield
@@ -97,16 +130,29 @@ local getattr = nuts.getattr
local setattr = nuts.setattr
local getsubtype = nuts.getsubtype
local getbox = nuts.getbox
+local getwhd = nuts.getwhd
+local setwhd = nuts.setwhd
+local getprop = nuts.getprop
+local setprop = nuts.setprop
+local getglue = nuts.getglue
+local setglue = nuts.setglue
+local getkern = nuts.getkern
+local getpenalty = nuts.getpenalty
+local setshift = nuts.setshift
+local setwidth = nuts.setwidth
+local getwidth = nuts.getwidth
+local setheight = nuts.setheight
+local getheight = nuts.getheight
+local setdepth = nuts.setdepth
+local getdepth = nuts.getdepth
local find_node_tail = nuts.tail
-local free_node = nuts.free
-local free_node_list = nuts.flush_list
+local flush_node = nuts.flush_node
local traverse_nodes = nuts.traverse
local traverse_nodes_id = nuts.traverse_id
local insert_node_before = nuts.insert_before
-local insert_node_after = nuts.insert_after
local remove_node = nuts.remove
-local count_nodes = nuts.count
+local count_nodes = nuts.countall
local hpack_node = nuts.hpack
local vpack_node = nuts.vpack
----- writable_spec = nuts.writable_spec
@@ -129,6 +175,7 @@ local skipcodes = nodes.skipcodes
local penalty_code = nodecodes.penalty
local kern_code = nodecodes.kern
local glue_code = nodecodes.glue
+local insert_code = nodecodes.ins
local hlist_code = nodecodes.hlist
local vlist_code = nodecodes.vlist
local localpar_code = nodecodes.localpar
@@ -156,19 +203,19 @@ vspacingdata.snapmethods = snapmethods
storage.register("builders/vspacing/data/snapmethods", snapmethods, "builders.vspacing.data.snapmethods")
local default = {
- maxheight = true,
- maxdepth = true,
- strut = true,
- hfraction = 1,
- dfraction = 1,
- bfraction = 0.25,
+ [v_maxheight] = true,
+ [v_maxdepth] = true,
+ [v_strut] = true,
+ [v_hfraction] = 1,
+ [v_dfraction] = 1,
+ [v_bfraction] = 0.25,
}
local fractions = {
- minheight = "hfraction", maxheight = "hfraction",
- mindepth = "dfraction", maxdepth = "dfraction",
- box = "bfraction",
- top = "tlines", bottom = "blines",
+ [v_minheight] = v_hfraction, [v_maxheight] = v_hfraction,
+ [v_mindepth] = v_dfraction, [v_maxdepth] = v_dfraction,
+ [v_box] = v_bfraction,
+ [v_top] = v_tlines, [v_bottom] = v_blines,
}
local values = {
@@ -204,13 +251,14 @@ local function listtohash(str)
else
detail = tonumber("0" .. key)
if detail then
- t.hfraction, t.dfraction = detail, detail
+ t[v_hfraction] = detail
+ t[v_dfraction] = detail
end
end
end
if next(t) then
- t.hfraction = t.hfraction or 1
- t.dfraction = t.dfraction or 1
+ t[v_hfraction] = t[v_hfraction] or 1
+ t[v_dfraction] = t[v_dfraction] or 1
return t
else
return default
@@ -221,21 +269,11 @@ function vspacing.definesnapmethod(name,method)
local n = #snapmethods + 1
local t = listtohash(method)
snapmethods[n] = t
- t.name, t.specification = name, method
+ t.name = name -- not interfaced
+ t.specification = method -- not interfaced
context(n)
end
--- local rule_id = nodecodes.rule
--- local vlist_id = nodecodes.vlist
--- function nodes.makevtop(n)
--- if getid(n) == vlist_id then
--- local list = getlist(n)
--- local height = (list and getid(list) <= rule_id and getfield(list,"height")) or 0
--- setfield(n,"depth",getfield(n,"depth") - height + getfield(n,"height")
--- setfield(n,"height",height
--- end
--- end
-
local function validvbox(parentid,list)
if parentid == hlist_code then
local id = getid(list)
@@ -270,28 +308,32 @@ local function validvbox(parentid,list)
end
end
+-- we can use a property
+
local function already_done(parentid,list,a_snapmethod) -- todo: done when only boxes and all snapped
-- problem: any snapped vbox ends up in a line
if list and parentid == hlist_code then
local id = getid(list)
if id == localpar_code then -- check for initial par subtype
list = getnext(list)
- if not next then
+ if not list then
return false
end
end
---~ local i = 0
for n in traverse_nodes(list) do
local id = getid(n)
---~ i = i + 1 print(i,nodecodes[id],getattr(n,a_snapmethod))
if id == hlist_code or id == vlist_code then
- local a = getattr(n,a_snapmethod)
- if not a then
- -- return true -- not snapped at all
- elseif a == 0 then
- return true -- already snapped
+ -- local a = getattr(n,a_snapmethod)
+ -- if not a then
+ -- -- return true -- not snapped at all
+ -- elseif a == 0 then
+ -- return true -- already snapped
+ -- end
+ local p = getprop(n,"snapper")
+ if p then
+ return p
end
- elseif id == glue_code or id == penalty_code then
+ elseif id == glue_code or id == penalty_code then -- or id == kern_code then
-- go on
else
return false -- whatever
@@ -301,7 +343,6 @@ local function already_done(parentid,list,a_snapmethod) -- todo: done when only
return false
end
-
-- quite tricky: ceil(-something) => -0
local function ceiled(n)
@@ -327,7 +368,18 @@ local function fixedprofile(current)
return profiling and profiling.fixedprofile(current)
end
-local function snap_hlist(where,current,method,height,depth) -- method.strut is default
+-- local function onlyoneentry(t)
+-- local n = 1
+-- for k, v in next, t do
+-- if n > 1 then
+-- return false
+-- end
+-- n = n + 1
+-- end
+-- return true
+-- end
+
+local function snap_hlist(where,current,method,height,depth) -- method[v_strut] is default
if fixedprofile(current) then
return
end
@@ -335,19 +387,18 @@ local function snap_hlist(where,current,method,height,depth) -- method.strut is
local t = trace_vsnapping and { }
if t then
t[#t+1] = formatters["list content: %s"](listtoutf(list))
- t[#t+1] = formatters["parent id: %s"](nodereference(current))
- t[#t+1] = formatters["snap method: %s"](method.name)
- t[#t+1] = formatters["specification: %s"](method.specification)
+ t[#t+1] = formatters["snap method: %s"](method.name) -- not interfaced
+ t[#t+1] = formatters["specification: %s"](method.specification) -- not interfaced
end
local snapht, snapdp
- if method["local"] then
+ if method[v_local] then
-- snapping is done immediately here
snapht = texgetdimen("bodyfontstrutheight")
snapdp = texgetdimen("bodyfontstrutdepth")
if t then
t[#t+1] = formatters["local: snapht %p snapdp %p"](snapht,snapdp)
end
- elseif method["global"] then
+ elseif method[v_global] then
snapht = texgetdimen("globalbodyfontstrutheight")
snapdp = texgetdimen("globalbodyfontstrutdepth")
if t then
@@ -368,32 +419,29 @@ local function snap_hlist(where,current,method,height,depth) -- method.strut is
end
end
- local h = (method.noheight and 0) or height or getfield(current,"height")
- local d = (method.nodepth and 0) or depth or getfield(current,"depth")
- local hr = method.hfraction or 1
- local dr = method.dfraction or 1
- local br = method.bfraction or 0
+ local wd, ht, dp = getwhd(current)
+
+ local h = (method[v_noheight] and 0) or height or ht
+ local d = (method[v_nodepth] and 0) or depth or dp
+ local hr = method[v_hfraction] or 1
+ local dr = method[v_dfraction] or 1
+ local br = method[v_bfraction] or 0
local ch = h
local cd = d
- local tlines = method.tlines or 1
- local blines = method.blines or 1
+ local tlines = method[v_tlines] or 1
+ local blines = method[v_blines] or 1
local done = false
local plusht = snapht
local plusdp = snapdp
local snaphtdp = snapht + snapdp
+ local extra = 0
--- 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 t then
+ t[#t+1] = formatters["hlist: wd %p ht %p (used %p) dp %p (used %p)"](wd,ht,h,dp,d)
+ t[#t+1] = formatters["fractions: hfraction %s dfraction %s bfraction %s tlines %s blines %s"](hr,dr,br,tlines,blines)
+ end
- if method.box then
+ if method[v_box] then
local br = 1 - br
if br < 0 then
br = 0
@@ -404,38 +452,75 @@ local function snap_hlist(where,current,method,height,depth) -- method.strut is
local x = n * snaphtdp - h - d
plusht = h + x / 2
plusdp = d + x / 2
- elseif method.max then
+ if t then
+ t[#t+1] = formatters["%s: plusht %p plusdp %p"](v_box,plusht,plusdp)
+ end
+ elseif method[v_max] then
local n = ceiled((h+d)/snaphtdp)
local x = n * snaphtdp - h - d
plusht = h + x / 2
plusdp = d + x / 2
- elseif method.min then
- local n = floored((h+d)/snaphtdp)
- local x = n * snaphtdp - h - d
- plusht = h + x / 2
- plusdp = d + x / 2
- elseif method.none then
+ if t then
+ t[#t+1] = formatters["%s: plusht %p plusdp %p"](v_max,plusht,plusdp)
+ end
+ elseif method[v_min] then
+ -- we catch a lone min
+ if method.specification ~= v_min then
+ local n = floored((h+d)/snaphtdp)
+ local x = n * snaphtdp - h - d
+ plusht = h + x / 2
+ plusdp = d + x / 2
+ if plusht < 0 then
+ plusht = 0
+ end
+ if plusdp < 0 then
+ plusdp = 0
+ end
+ end
+ if t then
+ t[#t+1] = formatters["%s: plusht %p plusdp %p"](v_min,plusht,plusdp)
+ end
+ elseif method[v_none] then
plusht, plusdp = 0, 0
if t then
- t[#t+1] = "none: plusht 0pt plusdp 0pt"
+ t[#t+1] = formatters["%s: plusht %p plusdp %p"](v_none,0,0)
end
end
- if method.halfline then -- extra halfline
- plusht = plusht + snaphtdp/2
- plusdp = plusdp + snaphtdp/2
+ -- for now, we actually need to tag a box and then check at several points if something ended up
+ -- at the top of a page
+ if method[v_halfline] then -- extra halfline
+ extra = snaphtdp/2
+ plusht = plusht + extra
+ plusdp = plusdp + extra
if t then
- t[#t+1] = formatters["halfline: plusht %p plusdp %p"](plusht,plusdp)
+ t[#t+1] = formatters["%s: plusht %p plusdp %p"](v_halfline,plusht,plusdp)
end
end
- if method.line then -- extra line
- plusht = plusht + snaphtdp
- plusdp = plusdp + snaphtdp
+ if method[v_line] then -- extra line
+ extra = snaphtdp
+ plusht = plusht + extra
+ plusdp = plusdp + extra
if t then
- t[#t+1] = formatters["line: plusht %p plusdp %p"](plusht,plusdp)
+ t[#t+1] = formatters["%s: plusht %p plusdp %p"](v_line,plusht,plusdp)
end
end
-
- if method.first then
+ if method[v_halfline_m] then -- extra halfline
+ extra = - snaphtdp/2
+ plusht = plusht + extra
+ plusdp = plusdp + extra
+ if t then
+ t[#t+1] = formatters["%s: plusht %p plusdp %p"](v_halfline_m,plusht,plusdp)
+ end
+ end
+ if method[v_line_m] then -- extra line
+ extra = - snaphtdp
+ plusht = plusht + extra
+ plusdp = plusdp + extra
+ if t then
+ t[#t+1] = formatters["%s: plusht %p plusdp %p"](v_line_m,plusht,plusdp)
+ end
+ end
+ if method[v_first] then
local thebox = current
local id = getid(thebox)
if id == hlist_code then
@@ -444,15 +529,13 @@ local function snap_hlist(where,current,method,height,depth) -- method.strut is
end
if thebox and id == vlist_code then
local list = getlist(thebox)
- local lh, ld
+ local lw, lh, ld
for n in traverse_nodes_id(hlist_code,list) do
- lh = getfield(n,"height")
- ld = getfield(n,"depth")
+ lw, lh, ld = getwhd(n)
break
end
if lh then
- local ht = getfield(thebox,"height")
- local dp = getfield(thebox,"depth")
+ local wd, ht, dp = getwhd(thebox)
if t then
t[#t+1] = formatters["first line: height %p depth %p"](lh,ld)
t[#t+1] = formatters["dimensions: height %p depth %p"](ht,dp)
@@ -461,7 +544,7 @@ local function snap_hlist(where,current,method,height,depth) -- method.strut is
ch, cd = lh, delta + d
h, d = ch, cd
local shifted = hpack_node(getlist(current))
- setfield(shifted,"shift",delta)
+ setshift(shifted,delta)
setlist(current,shifted)
done = true
if t then
@@ -473,7 +556,7 @@ local function snap_hlist(where,current,method,height,depth) -- method.strut is
elseif t then
t[#t+1] = "first: not done, no vbox"
end
- elseif method.last then
+ elseif method[v_last] then
local thebox = current
local id = getid(thebox)
if id == hlist_code then
@@ -482,14 +565,12 @@ local function snap_hlist(where,current,method,height,depth) -- method.strut is
end
if thebox and id == vlist_code then
local list = getlist(thebox)
- local lh, ld
+ local lw, lh, ld
for n in traverse_nodes_id(hlist_code,list) do
- lh = getfield(n,"height")
- ld = getfield(n,"depth")
+ lw, lh, ld = getwhd(n)
end
if lh then
- local ht = getfield(thebox,"height")
- local dp = getfield(thebox,"depth")
+ local wd, ht, dp = getwhd(thebox)
if t then
t[#t+1] = formatters["last line: height %p depth %p" ](lh,ld)
t[#t+1] = formatters["dimensions: height %p depth %p"](ht,dp)
@@ -498,7 +579,7 @@ local function snap_hlist(where,current,method,height,depth) -- method.strut is
cd, ch = ld, delta + h
h, d = ch, cd
local shifted = hpack_node(getlist(current))
- setfield(shifted,"shift",delta)
+ setshift(shifted,delta)
setlist(current,shifted)
done = true
if t then
@@ -511,12 +592,12 @@ local function snap_hlist(where,current,method,height,depth) -- method.strut is
t[#t+1] = "last: not done, no vbox"
end
end
- if method.minheight then
+ if method[v_minheight] then
ch = floored((h-hr*snapht)/snaphtdp)*snaphtdp + plusht
if t then
t[#t+1] = formatters["minheight: %p"](ch)
end
- elseif method.maxheight then
+ elseif method[v_maxheight] then
ch = ceiled((h-hr*snapht)/snaphtdp)*snaphtdp + plusht
if t then
t[#t+1] = formatters["maxheight: %p"](ch)
@@ -527,12 +608,12 @@ local function snap_hlist(where,current,method,height,depth) -- method.strut is
t[#t+1] = formatters["set height: %p"](ch)
end
end
- if method.mindepth then
+ if method[v_mindepth] then
cd = floored((d-dr*snapdp)/snaphtdp)*snaphtdp + plusdp
if t then
t[#t+1] = formatters["mindepth: %p"](cd)
end
- elseif method.maxdepth then
+ elseif method[v_maxdepth] then
cd = ceiled((d-dr*snapdp)/snaphtdp)*snaphtdp + plusdp
if t then
t[#t+1] = formatters["maxdepth: %p"](cd)
@@ -543,42 +624,43 @@ local function snap_hlist(where,current,method,height,depth) -- method.strut is
t[#t+1] = formatters["set depth: %p"](cd)
end
end
- if method.top then
+ if method[v_top] then
ch = ch + tlines * snaphtdp
if t then
t[#t+1] = formatters["top height: %p"](ch)
end
end
- if method.bottom then
+ if method[v_bottom] then
cd = cd + blines * snaphtdp
if t then
t[#t+1] = formatters["bottom depth: %p"](cd)
end
end
-
- local offset = method.offset
+ local offset = method[v_offset]
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") or 0,getfield(current,"height"),getfield(current,"depth"))
+ local wd, ht, dp = getwhd(current)
+ t[#t+1] = formatters["before offset: %p (width %p height %p depth %p)"](offset,wd,ht,dp)
end
local shifted = hpack_node(getlist(current))
- setfield(shifted,"shift",offset)
+ setshift(shifted,offset)
setlist(current,shifted)
if t then
- 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"))
+ local wd, ht, dp = getwhd(current)
+ t[#t+1] = formatters["after offset: %p (width %p height %p depth %p)"](offset,wd,ht,dp)
end
setattr(shifted,a_snapmethod,0)
setattr(current,a_snapmethod,0)
end
if not height then
- setfield(current,"height",ch)
+ setheight(current,ch)
if t then
t[#t+1] = formatters["forced height: %p"](ch)
end
end
if not depth then
- setfield(current,"depth",cd)
+ setdepth(current,cd)
if t then
t[#t+1] = formatters["forced depth: %p"](cd)
end
@@ -587,9 +669,9 @@ local function snap_hlist(where,current,method,height,depth) -- method.strut is
if t then
local original = (h+d)/snaphtdp
local whatever = (ch+cd)/(texgetdimen("globalbodyfontstrutheight") + texgetdimen("globalbodyfontstrutdepth"))
- t[#t+1] = formatters["final lines: %s -> %s (%s)"](original,lines,whatever)
+ t[#t+1] = formatters["final lines : %p -> %p (%p)"](original,lines,whatever)
t[#t+1] = formatters["final height: %p -> %p"](h,ch)
- t[#t+1] = formatters["final depth: %p -> %p"](d,cd)
+ t[#t+1] = formatters["final depth : %p -> %p"](d,cd)
end
-- todo:
--
@@ -600,12 +682,16 @@ local function snap_hlist(where,current,method,height,depth) -- method.strut is
if t then
report_snapper("trace: %s type %s\n\t%\n\tt",where,nodecodes[getid(current)],t)
end
- return h, d, ch, cd, lines
+ if not method[v_split] then
+ -- so extra will not be compensated at the top of a page
+ extra = 0
+ end
+ return h, d, ch, cd, lines, extra
end
local function snap_topskip(current,method)
- local w = getfield(current,"width") or 0
- setfield(current,"width",0)
+ local w = getwidth(current)
+ setwidth(current,0)
return w, 0
end
@@ -652,7 +738,9 @@ vspacingdata.skip = vspacingdata.skip or { } -- allocate ?
storage.register("builders/vspacing/data/map", vspacingdata.map, "builders.vspacing.data.map")
storage.register("builders/vspacing/data/skip", vspacingdata.skip, "builders.vspacing.data.skip")
-do -- todo: interface.variables
+do -- todo: interface.variables and properties
+
+ local P, C, R, S, Cc = lpeg.P, lpeg.C, lpeg.R, lpeg.S, lpeg.Cc
vspacing.fixed = false
@@ -691,112 +779,6 @@ do -- todo: interface.variables
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)
@@ -880,11 +862,11 @@ local function nodes_to_string(head)
local id = getid(current)
local ty = nodecodes[id]
if id == penalty_code then
- t[#t+1] = formatters["%s:%s"](ty,getfield(current,"penalty"))
+ t[#t+1] = formatters["%s:%s"](ty,getpenalty(current))
elseif id == glue_code then
- t[#t+1] = formatters["%s:%s:%p"](ty,skipcodes[getsubtype(current)],getfield(current,"width"))
+ t[#t+1] = formatters["%s:%s:%p"](ty,skipcodes[getsubtype(current)],getwidth(current))
elseif id == kern_code then
- t[#t+1] = formatters["%s:%p"](ty,getfield(current,"kern"))
+ t[#t+1] = formatters["%s:%p"](ty,getkern(current))
else
t[#t+1] = ty
end
@@ -898,12 +880,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, getfield(data,"width"), sc or "-", so or "-", sp or "-") }
+ trace_list[#trace_list+1] = { "skip", formatters["%s | %p | category %s | order %s | penalty %s"](str, getwidth(data), sc or "-", so or "-", sp or "-") }
tracing_info = true
end
local function trace_natural(str,data)
- trace_list[#trace_list+1] = { "skip", formatters["%s | %p"](str, getfield(data,"width")) }
+ trace_list[#trace_list+1] = { "skip", formatters["%s | %p"](str, getwidth(data)) }
tracing_info = true
end
@@ -923,9 +905,9 @@ end
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")) }
+ trace_list[#trace_list+1] = { "penalty", formatters["%s | %s"](str,getpenalty(data)) }
else
- trace_list[#trace_list+1] = { "glue", formatters["%s | %p"](str,getfield(data,"width")) }
+ trace_list[#trace_list+1] = { "glue", formatters["%s | %p"](str,getwidth(data)) }
end
tracing_info = true
end
@@ -960,8 +942,7 @@ function vspacing.snapbox(n,how)
-- report_snapper("box list not snapped, already done")
end
else
- local ht = getfield(box,"height")
- local dp = getfield(box,"depth")
+ local wd, ht, dp = getwhd(box)
if false then -- todo: already_done
-- assume that the box is already snapped
if trace_vsnapping then
@@ -969,9 +950,16 @@ function vspacing.snapbox(n,how)
ht,dp,listtoutf(list))
end
else
- local h, d, ch, cd, lines = snap_hlist("box",box,sv,ht,dp)
- setfield(box,"height",ch)
- setfield(box,"depth",cd)
+ local h, d, ch, cd, lines, extra = snap_hlist("box",box,sv,ht,dp)
+setprop(box,"snapper",{
+ ht = h,
+ dp = d,
+ ch = ch,
+ cd = cd,
+ extra = extra,
+ current = current,
+})
+ setwhd(box,wd,ch,cd)
if trace_vsnapping then
report_snapper("box list snapped from (%p,%p) to (%p,%p) using method %a (%s) for %a (%s lines): %s",
h,d,ch,cd,sv.name,sv.specification,"direct",lines,listtoutf(list))
@@ -998,10 +986,10 @@ end
local w, h, d = 0, 0, 0
----- w, h, d = 100*65536, 65536, 65536
-local function forced_skip(head,current,width,where,trace)
+local function forced_skip(head,current,width,where,trace) -- looks old ... we have other tricks now
if head == current then
if getsubtype(head) == baselineskip_code then
- width = width - (getfield(head,"width") or 0)
+ width = width - getwidth(head)
end
end
if width == 0 then
@@ -1025,16 +1013,17 @@ end
-- penalty only works well when before skip
-local discard = 0
-local largest = 1
-local force = 2
-local penalty = 3
-local add = 4
-local disable = 5
-local nowhite = 6
-local goback = 7
-local together = 8 -- not used (?)
-local overlay = 9
+local discard = 0
+local largest = 1
+local force = 2
+local penalty = 3
+local add = 4
+local disable = 5
+local nowhite = 6
+local goback = 7
+local together = 8 -- not used (?)
+local overlay = 9
+local enable = 10
-- [whatsits][hlist][glue][glue][penalty]
@@ -1096,7 +1085,7 @@ specialmethods[1] = function(pagehead,pagetail,start,penalty)
report_specials(" context penalty %a, higher level, continue",p)
end
else
- local p = getfield(current,"penalty")
+ local p = getpenalty(current)
if p < 10000 then
-- assume some other mechanism kicks in so we seem to have content
if trace_specials then
@@ -1135,21 +1124,20 @@ local function check_experimental_overlay(head,current)
local c = current
local n = nil
local function overlay(p,n,mvl)
- local p_ht = getfield(p,"height")
- local p_dp = getfield(p,"depth")
- local n_ht = getfield(n,"height")
+ local p_wd, p_ht, p_dp = getwhd(p)
+ local n_wd, n_ht, n_dp = getwhd(n)
local skips = 0
--
-- We deal with this at the tex end .. we don't see spacing .. enabling this code
- -- is probably harmless btu then we need to test it.
+ -- is probably harmless but then we need to test it.
--
local c = getnext(p)
while c and c ~= n do
local id = getid(c)
if id == glue_code then
- skips = skips + (getfield(c,"width") or 0)
+ skips = skips + getwidth(c)
elseif id == kern_code then
- skips = skips + getfield(c,"kern")
+ skips = skips + getkern(c)
end
c = getnext(c)
end
@@ -1159,7 +1147,7 @@ local function check_experimental_overlay(head,current)
local k = new_kern(-delta)
if n_ht > p_ht then
-- we should adapt pagetotal ! (need a hook for that) .. now we have the wrong pagebreak
- setfield(p,"height",n_ht)
+ setheight(p,n_ht)
end
insert_node_before(head,n,k)
if p == head then
@@ -1240,7 +1228,7 @@ end
-- topskip
-- splittopskip
-local experiment = false directives.register("vspacing.experiment",function(v) experiment = v end)
+local experiment = true 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
@@ -1250,6 +1238,7 @@ local function collapser(head,where,what,trace,snap,a_snapmethod) -- maybe also
local glue_order, glue_data, force_glue = 0, nil, false
local penalty_order, penalty_data, natural_penalty, special_penalty = 0, nil, nil, nil
local parskip, ignore_parskip, ignore_following, ignore_whitespace, keep_together = nil, false, false, false, false
+ local lastsnap = nil
--
-- todo: keep_together: between headers
--
@@ -1260,12 +1249,78 @@ local function collapser(head,where,what,trace,snap,a_snapmethod) -- maybe also
if not pagehead then
pagehead = texlists.page_head
if pagehead then
- pagehead = tonut(texlists.page_head)
+ pagehead = tonut(pagehead)
pagetail = find_node_tail(pagehead) -- no texlists.page_tail yet-- no texlists.page_tail yet
end
end
end
--
+ local function compensate(n)
+ local g = 0
+ while n and getid(n) == glue_code do
+ g = g + getwidth(n)
+ n = getnext(n)
+ end
+ if n then
+ local p = getprop(n,"snapper")
+ if p then
+ local extra = p.extra
+ if extra and extra < 0 then -- hm, extra can be unset ... needs checking
+ local h = p.ch -- getheight(n)
+ -- maybe an extra check
+ -- if h - extra < g then
+ setheight(n,h-2*extra)
+ p.extra = 0
+ if trace_vsnapping then
+ report_snapper("removed extra space at top: %p",extra)
+ end
+ -- end
+ end
+ end
+ return n
+ end
+ end
+ --
+ local function removetopsnap()
+ getpagelist()
+ if pagehead then
+ local n = pagehead and compensate(pagehead)
+ if n and n ~= pagetail then
+ local p = getprop(pagetail,"snapper")
+ if p then
+ local e = p.extra
+ if e and e < 0 then
+ local t = texget("pagetotal")
+ if t > 0 then
+ local g = texget("pagegoal") -- 1073741823 is signal
+ local d = g - t
+ if d < -e then
+ local penalty = new_penalty(1000000)
+ setlink(penalty,head)
+ head = penalty
+ report_snapper("force pagebreak due to extra space at bottom: %p",e)
+ end
+ end
+ end
+ end
+ end
+ elseif head then
+ compensate(head)
+ end
+ end
+ --
+ local function getavailable()
+ getpagelist()
+ if pagehead then
+ local t = texget("pagetotal")
+ if t > 0 then
+ local g = texget("pagegoal")
+ return g - t
+ end
+ end
+ return false
+ end
+ --
local function flush(why)
if penalty_data then
local p = new_penalty(penalty_data)
@@ -1299,23 +1354,23 @@ local function collapser(head,where,what,trace,snap,a_snapmethod) -- maybe also
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)
+ head = forced_skip(head,current,getwidth(glue_data,width),"before",trace)
+ flush_node(glue_data)
else
- local w = getfield(glue_data,"width")
- if w ~= 0 then
+ local width, stretch, shrink = getglue(glue_data)
+ if width ~= 0 then
if trace then
trace_done("flushed due to non zero " .. why,glue_data)
end
head = insert_node_before(head,current,glue_data)
- elseif getfield(glue_data,"stretch") ~= 0 or getfield(glue_data,"shrink") ~= 0 then
+ elseif stretch ~= 0 or shrink ~= 0 then
if trace then
trace_done("flushed due to stretch/shrink in" .. why,glue_data)
end
head = insert_node_before(head,current,glue_data)
else
-- report_vspacing("needs checking (%s): %p",skipcodes[getsubtype(glue_data)],w)
- free_node(glue_data)
+ flush_node(glue_data)
end
end
end
@@ -1328,45 +1383,26 @@ local function collapser(head,where,what,trace,snap,a_snapmethod) -- maybe also
parskip, ignore_parskip, ignore_following, ignore_whitespace = nil, false, false, false
end
--
-
--- quick hack, can be done nicer
--- local nobreakfound = nil
--- local function checknobreak()
--- local pagehead, pagetail = getpagelist()
--- local current = pagetail
--- while current do
--- local id = getid(current)
--- if id == hlist_code or id == vlist_code then
--- return false
--- elseif id == penalty_code then
--- return getfield(current,"penalty") >= 10000
--- end
--- current = getprev(current)
--- end
--- return false
--- end
-
- --
if trace_vsnapping then
report_snapper("global ht/dp = %p/%p, local ht/dp = %p/%p",
- texgetdimen("globalbodyfontstrutheight"), texgetdimen("globalbodyfontstrutdepth"),
- texgetdimen("bodyfontstrutheight"), texgetdimen("bodyfontstrutdepth")
+ texgetdimen("globalbodyfontstrutheight"),
+ texgetdimen("globalbodyfontstrutdepth"),
+ texgetdimen("bodyfontstrutheight"),
+ texgetdimen("bodyfontstrutdepth")
)
end
if trace then
trace_info("start analyzing",where,what)
end
-
--- local headprev = getprev(head)
-
+ if snap and where == "page" then
+ removetopsnap()
+ end
while current do
local id = getid(current)
if id == hlist_code or id == vlist_code then
--- if nobreakfound == nil then
--- nobreakfound = false
--- end
-- needs checking, why so many calls
if snap then
+ lastsnap = nil
local list = getlist(current)
local s = getattr(current,a_snapmethod)
if not s then
@@ -1381,15 +1417,24 @@ local function collapser(head,where,what,trace,snap,a_snapmethod) -- maybe also
local sv = snapmethods[s]
if sv then
-- check if already snapped
- if list and already_done(id,list,a_snapmethod) then
- local ht = getfield(current,"height")
- local dp = getfield(current,"depth")
+ local done = list and already_done(id,list,a_snapmethod)
+ if done then
-- assume that the box is already snapped
if trace_vsnapping then
- report_snapper("mvl list already snapped at (%p,%p): %s",ht,dp,listtoutf(list))
+ local w, h, d = getwhd(current)
+ report_snapper("mvl list already snapped at (%p,%p): %s",h,d,listtoutf(list))
end
else
- local h, d, ch, cd, lines = snap_hlist("mvl",current,sv)
+ local h, d, ch, cd, lines, extra = snap_hlist("mvl",current,sv,false,false)
+ lastsnap = {
+ ht = h,
+ dp = d,
+ ch = ch,
+ cd = cd,
+ extra = extra,
+ current = current,
+ }
+ setprop(current,"snapper",lastsnap)
if trace_vsnapping then
report_snapper("mvl %a snapped from (%p,%p) to (%p,%p) using method %a (%s) for %a (%s lines): %s",
nodecodes[id],h,d,ch,cd,sv.name,sv.specification,where,lines,listtoutf(list))
@@ -1407,26 +1452,15 @@ local function collapser(head,where,what,trace,snap,a_snapmethod) -- maybe also
flush("list")
current = getnext(current)
elseif id == penalty_code then
- -- natural_penalty = getfield(current,"penalty")
+ -- natural_penalty = getpenalty(current)
-- if trace then
-- trace_done("removed penalty",current)
-- end
-- head, current = remove_node(head, current, true)
-
--- if nobreakfound == nil then
--- nobreakfound = checknobreak()
--- end
--- if nobreakfound and getfield(current,"penalty") <= 10000 then
--- -- if trace then
--- trace_done("removed penalty",current)
--- -- end
--- head, current = remove_node(head, current, true)
--- end
-
current = getnext(current)
elseif id == kern_code then
- if snap and trace_vsnapping and getfield(current,"kern") ~= 0 then
- report_snapper("kern of %p kept",getfield(current,"kern"))
+ if snap and trace_vsnapping and getkern(current) ~= 0 then
+ report_snapper("kern of %p kept",getkern(current))
end
flush("kern")
current = getnext(current)
@@ -1449,12 +1483,6 @@ local function collapser(head,where,what,trace,snap,a_snapmethod) -- maybe also
special_penalty = sp
sp = p
end
-
--- else
--- if nobreakfound == nil then
--- nobreakfound = checknobreak()
--- end
-
end
if not penalty_data then
penalty_data = sp
@@ -1466,14 +1494,6 @@ local function collapser(head,where,what,trace,snap,a_snapmethod) -- maybe also
if trace then
trace_skip("penalty in skip",sc,so,sp,current)
end
-
--- if nobreakfound then
--- penalty_data = 10000
--- if trace then
--- trace_skip("nobreak found before penalty in skip",sc,so,sp,current)
--- end
--- end
-
head, current = remove_node(head, current, true)
elseif not sc then -- if not sc then
if glue_data then
@@ -1490,11 +1510,10 @@ local function collapser(head,where,what,trace,snap,a_snapmethod) -- maybe also
-- todo: prev can be whatsit (latelua)
local previous = getprev(current)
if previous and getid(previous) == glue_code and getsubtype(previous) == userskip_code then
- 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))
+ local pwidth, pstretch, pshrink, pstretch_order, pshrink_order = getglue(previous)
+ local cwidth, cstretch, cshrink, cstretch_order, cshrink_order = getglue(current)
+ if pstretch_order == 0 and pshrink_order == 0 and cstretch_order == 0 and cshrink_order == 0 then
+ setglue(previous,pwidth + cwidth, pstretch + cstretch, pshrink + cshrink)
if trace then
trace_natural("removed",current)
end
@@ -1516,36 +1535,36 @@ local function collapser(head,where,what,trace,snap,a_snapmethod) -- maybe also
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)
+ elseif sc == disable or sc == enable then
+ local next = getnext(current)
+ if not experiment or next then
+ ignore_following = sc == disable
+ if trace then
+ trace_skip(sc == disable and "disable" or "enable",sc,so,sp,current)
+ end
+ head, current = remove_node(head, current, true)
+ else
+ current = next
end
- 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)
+ local next = getnext(current)
+ if not experiment or next then
+ keep_together = true
+ if trace then
+ trace_skip("together",sc,so,sp,current)
+ end
+ head, current = remove_node(head, current, true)
+ else
+ current = next
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
+ 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)
@@ -1575,18 +1594,18 @@ end
trace_skip("force",sc,so,sp,current)
end
glue_order = so
- free_node(glue_data)
+ flush_node(glue_data)
head, current, glue_data = remove_node(head, current)
elseif glue_order == so then
-- is now exclusive, maybe support goback as combi, else why a set
if sc == largest then
- local cw = getfield(current,"width") or 0
- local gw = getfield(glue_data,"width") or 0
+ local cw = getwidth(current)
+ local gw = getwidth(glue_data)
if cw > gw then
if trace then
trace_skip("largest",sc,so,sp,current)
end
- free_node(glue_data)
+ flush_node(glue_data)
head, current, glue_data = remove_node(head,current)
else
if trace then
@@ -1598,7 +1617,7 @@ end
if trace then
trace_skip("goback",sc,so,sp,current)
end
- free_node(glue_data)
+ flush_node(glue_data)
head, current, glue_data = remove_node(head,current)
elseif sc == force then
-- last one counts, some day we can provide an accumulator and largest etc
@@ -1606,22 +1625,22 @@ end
if trace then
trace_skip("force",sc,so,sp,current)
end
- free_node(glue_data)
+ flush_node(glue_data)
head, current, glue_data = remove_node(head, current)
elseif sc == penalty then
if trace then
trace_skip("penalty",sc,so,sp,current)
end
- free_node(glue_data)
+ flush_node(glue_data)
glue_data = nil
head, current = remove_node(head, current, true)
elseif sc == add then
if trace then
trace_skip("add",sc,so,sp,current)
end
- 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))
+ local cwidth, cstretch, cshrink = getglue(current)
+ local gwidth, gstretch, gshrink = getglue(glue_data)
+ setglue(old,gwidth + cwidth, gstretch + cstretch, gshrink + cshrink)
-- toto: order
head, current = remove_node(head, current, true)
else
@@ -1644,7 +1663,7 @@ end
local s = getattr(current,a_snapmethod)
if s and s ~= 0 then
setattr(current,a_snapmethod,0)
- setfield(current,"width",0)
+ setwidth(current,0)
if trace_vsnapping then
report_snapper("lineskip set to zero")
end
@@ -1666,7 +1685,7 @@ end
local s = getattr(current,a_snapmethod)
if s and s ~= 0 then
setattr(current,a_snapmethod,0)
- setfield(current,"width",0)
+ setwidth(current,0)
if trace_vsnapping then
report_snapper("baselineskip set to zero")
end
@@ -1691,18 +1710,18 @@ end
end
head, current = remove_node(head, current, true)
elseif glue_data then
- local wp = getfield(current,"width") or 0
- if ((w ~= 0) and (w > (getfield(glue_data,"width") or 0))) then
+ local w = getwidth(current)
+ if (w ~= 0) and (w > getwidth(glue_data)) then
glue_data = current
- head, current = remove_node(head, current)
if trace then
trace_natural("taking parskip",current)
end
+ head, current = remove_node(head, current)
else
- head, current = remove_node(head, current, true)
if trace then
trace_natural("removed parskip",current)
end
+ head, current = remove_node(head, current, true)
end
else
if trace then
@@ -1737,7 +1756,7 @@ end
flush("topskip")
end
current = getnext(current)
- elseif subtype == abovedisplayskip_code then
+ elseif subtype == abovedisplayskip_code and remove_math_skips then
--
if trace then
trace_skip("above display skip (normal)",sc,so,sp,current)
@@ -1745,7 +1764,7 @@ end
flush("above display skip (normal)")
current = getnext(current)
--
- elseif subtype == belowdisplayskip_code then
+ elseif subtype == belowdisplayskip_code and remove_math_skips then
--
if trace then
trace_skip("below display skip (normal)",sc,so,sp,current)
@@ -1753,7 +1772,7 @@ end
flush("below display skip (normal)")
current = getnext(current)
--
- elseif subtype == abovedisplayshortskip_code then
+ elseif subtype == abovedisplayshortskip_code and remove_math_skips then
--
if trace then
trace_skip("above display skip (short)",sc,so,sp,current)
@@ -1761,7 +1780,7 @@ end
flush("above display skip (short)")
current = getnext(current)
--
- elseif subtype == belowdisplayshortskip_code then
+ elseif subtype == belowdisplayshortskip_code and remove_math_skips then
--
if trace then
trace_skip("below display skip (short)",sc,so,sp,current)
@@ -1771,7 +1790,7 @@ end
--
else -- other glue
if snap and trace_vsnapping then
- local w = getfield(current,"width") or 0
+ local w = getwidth(current)
if w ~= 0 then
report_snapper("glue %p of type %a kept",w,skipcodes[subtype])
end
@@ -1803,7 +1822,7 @@ end
if trace then
trace_done("result",p)
end
- head, tail = insert_node_after(head,tail,p)
+ setlink(tail,p)
-- if penalty_data > special_penalty_min and penalty_data < special_penalty_max then
local props = properties[p]
if props then
@@ -1821,11 +1840,13 @@ end
trace_done("result",glue_data)
end
if force_glue then
- head, tail = forced_skip(head,tail,getfield(glue_data,"width") or 0,"after",trace)
- free_node(glue_data)
+ head, tail = forced_skip(head,tail,getwidth(glue_data),"after",trace)
+ flush_node(glue_data)
glue_data = nil
+ elseif tail then
+ setlink(tail,glue_data)
else
- head, tail = insert_node_after(head,tail,glue_data)
+ head = glue_data
end
texnest[texnest.ptr].prevdepth = 0 -- appending to the list bypasses tex's prevdepth handler
end
@@ -1838,13 +1859,6 @@ end
trace_info("head has been changed from %a to %a",nodecodes[getid(oldhead)],nodecodes[getid(head)])
end
end
-
--- if headprev then
--- setprev(head,headprev)
--- setnext(headprev,head)
--- end
--- print("C HEAD",tonode(head))
-
return head, true
end
@@ -1926,103 +1940,147 @@ function vspacing.pagehandler(newhead,where)
return nil
end
-local ignore = table.tohash {
- "split_keep",
- "split_off",
- -- "vbox",
-}
+do
-function vspacing.vboxhandler(head,where)
- if head and not ignore[where] then
- local h = tonut(head)
- if getnext(h) then -- what if a one liner and snapping?
- h = collapser(h,"vbox",where,trace_vbox_vspacing,true,a_snapvbox) -- todo: local snapper
- return tonode(h)
+ local ignore = table.tohash {
+ "split_keep",
+ "split_off",
+ -- "vbox",
+ }
+
+ function vspacing.vboxhandler(head,where)
+ if head and not ignore[where] then
+ local h = tonut(head)
+ if getnext(h) then -- what if a one liner and snapping?
+ h = collapser(h,"vbox",where,trace_vbox_vspacing,true,a_snapvbox) -- todo: local snapper
+ return tonode(h)
+ end
end
+ return head
end
- return head
-end
-function vspacing.collapsevbox(n,aslist) -- for boxes but using global a_snapmethod
- local box = getbox(n)
- if box then
- local list = getlist(box)
- if list then
- list = collapser(list,"snapper","vbox",trace_vbox_vspacing,true,a_snapmethod)
- if aslist then
- setlist(box,list) -- beware, dimensions of box are wrong now
- else
- setlist(box,vpack_node(list))
+ function vspacing.collapsevbox(n,aslist) -- for boxes but using global a_snapmethod
+ local box = getbox(n)
+ if box then
+ local list = getlist(box)
+ if list then
+ list = collapser(list,"snapper","vbox",trace_vbox_vspacing,true,a_snapmethod)
+ if aslist then
+ setlist(box,list) -- beware, dimensions of box are wrong now
+ else
+ setlist(box,vpack_node(list))
+ end
end
end
end
+
end
-- This one is needed to prevent bleeding of prevdepth to the next page
--- which doesn't work well with forced skips.
-
-local outer = texnest[0]
-
-function vspacing.resetprevdepth()
- if texlists.hold_head then
- outer.prevdepth = 0
+-- which doesn't work well with forced skips. I'm not that sure if the
+-- following is a good way out.
+
+do
+
+ local outer = texnest[0]
+ local reset = true
+ local trace = false
+ local report = logs.reporter("vspacing")
+
+ directives.register("vspacing.resetprevdepth",function(v) reset = v end)
+ trackers.register ("vspacing.resetprevdepth",function(v) trace = v end)
+
+ function vspacing.resetprevdepth()
+ if reset then
+ local head = texlists.hold_head
+ local skip = 0
+ while head and head.id == insert_code do
+ head = head.next
+ skip = skip + 1
+ end
+ if head then
+ outer.prevdepth = 0
+ end
+ if trace then
+ report("prevdepth %s at page %i, skipped %i, value %p",
+ head and "reset" or "kept",texgetcount("realpageno"),skip,outer.prevdepth)
+ end
+ end
end
+
end
-- interface
-implement {
- name = "vspacing",
- actions = vspacing.analyze,
- scope = "private",
- arguments = "string"
-}
-
-implement {
- name = "resetprevdepth",
- actions = vspacing.resetprevdepth,
- scope = "private"
-}
-
-implement {
- name = "vspacingsetamount",
- actions = vspacing.setskip,
- scope = "private",
- arguments = "string",
-}
-
-implement {
- name = "vspacingdefine",
- actions = vspacing.setmap,
- scope = "private",
- arguments = { "string", "string" }
-}
-
-implement {
- name = "vspacingcollapse",
- actions = vspacing.collapsevbox,
- scope = "private",
- arguments = "integer"
-}
-
-implement {
- name = "vspacingcollapseonly",
- actions = vspacing.collapsevbox,
- scope = "private",
- arguments = { "integer", true }
-}
-
-implement {
- name = "vspacingsnap",
- actions = vspacing.snapbox,
- scope = "private",
- arguments = { "integer", "integer" }
-}
-
-implement {
- name = "definesnapmethod",
- actions = vspacing.definesnapmethod,
- scope = "private",
- arguments = { "string", "string" }
-}
+do
+
+ implement {
+ name = "vspacing",
+ actions = vspacing.analyze,
+ scope = "private",
+ arguments = "string"
+ }
+
+ implement {
+ name = "resetprevdepth",
+ actions = vspacing.resetprevdepth,
+ scope = "private"
+ }
+
+ implement {
+ name = "vspacingsetamount",
+ actions = vspacing.setskip,
+ scope = "private",
+ arguments = "string",
+ }
+
+ implement {
+ name = "vspacingdefine",
+ actions = vspacing.setmap,
+ scope = "private",
+ arguments = { "string", "string" }
+ }
+
+ implement {
+ name = "vspacingcollapse",
+ actions = vspacing.collapsevbox,
+ scope = "private",
+ arguments = "integer"
+ }
+
+ implement {
+ name = "vspacingcollapseonly",
+ actions = vspacing.collapsevbox,
+ scope = "private",
+ arguments = { "integer", true }
+ }
+
+ implement {
+ name = "vspacingsnap",
+ actions = vspacing.snapbox,
+ scope = "private",
+ arguments = { "integer", "integer" }
+ }
+
+ implement {
+ name = "definesnapmethod",
+ actions = vspacing.definesnapmethod,
+ scope = "private",
+ arguments = { "string", "string" }
+ }
+
+ local remove_node = nodes.remove
+ local find_node_tail = nodes.tail
+
+ interfaces.implement {
+ name = "fakenextstrutline",
+ actions = function()
+ local head = texlists.page_head
+ if head then
+ local head = remove_node(head,find_node_tail(head),true)
+ texlists.page_head = head
+ end
+ end
+ }
+end
diff --git a/tex/context/base/mkiv/spac-ver.mkiv b/tex/context/base/mkiv/spac-ver.mkiv
index 250e4e396..229963997 100644
--- a/tex/context/base/mkiv/spac-ver.mkiv
+++ b/tex/context/base/mkiv/spac-ver.mkiv
@@ -527,6 +527,7 @@
\unexpanded\def\spac_lines_start_correction[#1]%
{\edef\m_spac_lines_around{#1}%
+ % todo: play with \fakenextstrutline
\spac_lines_action_around
\d_spac_prevdepth\prevdepth
\spac_lines_initialize_corrections
@@ -556,7 +557,10 @@
\unexpanded\def\spac_lines_stop_correction_ongrid
{\directcheckedvspacing\v!white % \blank[\v!white]%
- \snaptogrid\hpack{\box\scratchbox}}
+ \spac_lines_action_around
+ \snaptogrid\hpack{\box\scratchbox}%
+ \directcheckedvspacing\v!white
+ \spac_lines_action_around}
\unexpanded\def\spac_lines_stop_correction_normal
{\directcheckedvspacing\v!nowhite % \blank[\v!nowhite]%
@@ -1256,14 +1260,14 @@
%D Keyword based strutting:
-\letvalue{\??struts\v!yes }\setstrut % \setvalue{\??struts\v!yes }{\setstrut}
-\letvalue{\??struts\v!auto }\setautostrut % \setvalue{\??struts\v!auto }{\setautostrut}
-\letvalue{\??struts\v!no }\setnostrut % \setvalue{\??struts\v!no }{\setnostrut}
-\letvalue{\??struts\v!cap }\setcapstrut % \setvalue{\??struts\v!cap }{\setcapstrut}
-\letvalue{\??struts\v!fit }\setfontstrut % \setvalue{\??struts\v!fit }{\setfontstrut}
-\letvalue{\??struts\v!line }\setstrut % \setvalue{\??struts\v!line }{\setstrut}
-\letvalue{\??struts\s!default}\setstrut % \setvalue{\??struts\s!default}{\setstrut}
-\letvalue{\??struts\empty }\setstrut % \setvalue{\??struts\empty }{\setstrut}
+\letvalue{\??struts\v!yes }\setstrut
+\letvalue{\??struts\v!auto }\setautostrut
+\letvalue{\??struts\v!no }\setnostrut
+\letvalue{\??struts\v!cap }\setcapstrut
+\letvalue{\??struts\v!fit }\setfontstrut
+\letvalue{\??struts\v!line }\setstrut
+\letvalue{\??struts\s!default}\setstrut
+\letvalue{\??struts\empty }\setstrut
%D Handy:
@@ -1439,12 +1443,13 @@
\installcorenamespace{gridsnappers}
\installcorenamespace{gridsnapperattributes}
+\installcorenamespace{gridsnappersets}
\newskip \bodyfontlineheight
\newdimen \bodyfontstrutheight
\newdimen \bodyfontstrutdepth
-\newskip \globalbodyfontlineheight
+\newskip \globalbodyfontlineheight % why a skip
\newdimen \globalbodyfontstrutheight
\newdimen \globalbodyfontstrutdepth
@@ -1458,12 +1463,34 @@
\attribute \snapvboxattribute \attribute\snapmethodattribute}%
\fi}
-\unexpanded\def\installsnapvalues#1#2% todo: a proper define
- {\edef\currentsnapper{#1:#2}%
- \ifcsname\??gridsnapperattributes\currentsnapper\endcsname \else
- \setevalue{\??gridsnapperattributes\currentsnapper}{\clf_definesnapmethod{#1}{#2}}%
+% \unexpanded\def\installsnapvalues#1#2% todo: a proper define
+% {\edef\currentsnapper{#1:#2}%
+% \ifcsname\??gridsnapperattributes\currentsnapper\endcsname \else
+% \setevalue{\??gridsnapperattributes\currentsnapper}{\clf_definesnapmethod{#1}{#2}}%
+% \fi
+% \setevalue{\??gridsnappers#1}{\attribute\snapmethodattribute\csname\??gridsnapperattributes\currentsnapper\endcsname\space}}
+
+\def\spac_grids_expand_snapper#1%
+ {\edef\m_spac_snapper
+ {\ifx\m_spac_snapper\empty\else\m_spac_snapper,\fi
+ \ifcsname\??gridsnappersets#1\endcsname
+ \lastnamedcs\else#1%
+ \fi}}
+
+\unexpanded\def\installsnapvalues#1#2%
+ {\let\m_spac_snapper\empty
+ \rawprocesscommacommand[#2]\spac_grids_expand_snapper
+ \edef\currentsnapper{#1:\m_spac_snapper}%
+ \ifcsname\??gridsnapperattributes\currentsnapper\endcsname
+ \scratchcounter\lastnamedcs % already defined
+ \else
+ \scratchcounter\clf_definesnapmethod{#1}{\m_spac_snapper}%
+ \setevalue{\??gridsnapperattributes\currentsnapper}{\the\scratchcounter}%
\fi
- \setevalue{\??gridsnappers#1}{\attribute\snapmethodattribute\csname\??gridsnapperattributes\currentsnapper\endcsname\space}}
+ \setevalue{\??gridsnappers#1}{\attribute\snapmethodattribute\the\scratchcounter\relax}%
+ \letvalue{\??gridsnappersets#1}\m_spac_snapper}
+
+\def\theexpandedsnapperset#1{\begincsname\??gridsnappersets#1\endcsname} % only for manuals
\unexpanded\def\usegridparameter#1% no checking here
{\edef\m_spac_grid_asked{#1\c!grid}%
@@ -1474,7 +1501,6 @@
\attribute \snapvboxattribute\attribute\snapmethodattribute
\fi}
-
\unexpanded\def\definegridsnapping
{\dodoubleargument\spac_grids_define}
@@ -1515,6 +1541,9 @@
% offset:-3tp vertical shift within box
% bottom:lines
% top:lines
+% box centers a box rounded upwards (box:.5 -> tolerance)
+% min centers a box rounded downwards
+% max centers a box rounded upwards
%D We're not downward compatible with \MKII !
@@ -1540,15 +1569,18 @@
\definegridsnapping[\v!none] [\v!none]
\definegridsnapping[\v!line] [\v!line]
\definegridsnapping[\v!strut] [\v!strut]
-\definegridsnapping[\v!box] [\v!box] % centers a box rounded upwards (box:.5 -> tolerance)
-\definegridsnapping[\v!min] [\v!min] % centers a box rounded downwards
-\definegridsnapping[\v!max] [\v!max] % centers a box rounded upwards
-
-\definegridsnapping[\v!max] [\v!maxdepth,\v!maxheight,\v!strut]
-\definegridsnapping[\v!min] [\v!mindepth,\v!minheight,\v!strut]
+\definegridsnapping[\v!box] [\v!box]
+\definegridsnapping[\v!min] [\v!min]
+\definegridsnapping[\v!max] [\v!max]
\definegridsnapping[\v!middle] [\v!maxheight,\v!maxdepth] % used in placement
+\definegridsnapping[\v!math] [\v!maxdepth:1.05,\v!maxheight:1.05,\v!strut] % experimental, maybe 1.1
+\definegridsnapping[\v!math:\v!line] [\v!math,\v!line,\v!split]
+\definegridsnapping[\v!math:\v!halfline] [\v!math,\v!halfline,\v!split]
+\definegridsnapping[\v!math:-\v!line] [\v!math,-\v!line,\v!split]
+\definegridsnapping[\v!math:-\v!halfline][\v!math,-\v!halfline,\v!split]
+
\unexpanded\def\synchronizelocallinespecs
{\bodyfontlineheight \normallineheight
\bodyfontstrutheight\strutht
@@ -1572,21 +1604,13 @@
\unexpanded\def\synchronizeskipamounts
{\bigskipamount
- \skipfactor\baselineskip
- plus\skipgluefactor\baselineskip
- minus\skipgluefactor\baselineskip
+ \skipfactor\baselineskip
+ \s!plus\skipgluefactor\baselineskip
+ \s!minus\skipgluefactor\baselineskip
\relax
\medskipamount \bigskipamount \divide\medskipamount \plustwo
\smallskipamount\bigskipamount \divide\smallskipamount\plusfour}
-\appendtoks
- \synchronizeskipamounts
-\to \everysetupglobalinterlinespace
-
-\appendtoks
- \synchronizeskipamounts
-\to \everysetuplocalinterlinespace
-
%D Snapping.
\newif\ifgridsnapping
@@ -1657,6 +1681,73 @@
\spac_grids_check_yes
\fi\fi\fi}
+\unexpanded\def\setupgridsnapping[#1]% less overhead than setuplayout (needs testing)
+ {\setlayoutparameter\c!grid{#1}\synchronizegridsnapping}
+
+\unexpanded\def\checkgridmethod#1%
+ {\edef\p_grid{#1}%
+ \ifx\p_grid\empty
+ \let\checkedgridmethod\empty
+ \let\checkedgridscope \v!local
+ \else
+ \splitatcolon\p_grid\checkedgridscope\checkedgridmethod
+ \ifx\checkedgridmethod\empty
+ \ifx\checkedgridscope\v!local\else\ifx\checkedgridscope\v!global\else
+ \let\checkedgridmethod\checkedgridscope
+ \let\checkedgridscope \v!local
+ \fi\fi
+ \fi
+ \fi}
+
+\unexpanded\def\applygridmethod#1#2#3% content localsettings (used in head rendering)
+ {\checkgridmethod{#1}%
+ \ifx\checkedgridscope\v!global
+ \ifx\checkedgridmethod\empty \else
+ % we assume that the call is grouped because grouping here has the side
+ % effect that the eventually constructed line will get the value outside
+ % the group
+ %
+ % overkill: \setupgridsnapping[\checkedgridmethod]%
+ % maybe : \spac_grids_snap_value_auto\checkedgridmethod
+ \spac_grids_snap_value_set\checkedgridmethod
+ \fi
+ \hbox{#3}%
+ \else
+ % the extra hbox will trigger the global snapper on top of the local and
+ % we really need that in this case (compatibility etc etc) so here we don't
+ % het an already done hit (otherwise we would not snap)
+ \hbox\bgroup
+ \ifx\checkedgridmethod\empty\else
+ \ifconditional\headisdisplay
+ #2%
+ \fi
+ \fi
+ \snaptogrid[\checkedgridmethod]\hbox{#3}%
+ \egroup
+ \fi}
+
+\unexpanded\gdef\page_layouts_calculate_overshoot
+ {\ifgridsnapping\ifcase\layoutlines
+ \getnoflines\textheight
+ \textovershoot\dimexpr\noflines\globalbodyfontlineheight-\textheight\relax
+ \fi\fi}
+
+\unexpanded\def\page_layouts_report_overshoot
+ {\page_layouts_calculate_overshoot
+ \ifdim\textovershoot>\zeropoint
+ \writestatus\m!layouts{gridmode,\space
+ noflines: \the\noflines,\space
+ textheight: \the\textheight,\space
+ textovershoot: \the\textovershoot\space
+ (maybe set number of lines instead)%
+ }%
+ \fi
+ \glet\page_layouts_report_overshoot\page_layouts_calculate_overshoot}
+
+\appendtoks
+ \page_layouts_report_overshoot
+\to \everybeforepagebody
+
%D Visualization:
\definepalet
@@ -2071,6 +2162,8 @@
\definevspacing[\v!preference][penalty:-500] % goodbreak
\definevspacing[\v!samepage] [penalty:10000] % nobreak
+
+\definevspacing[\v!always] [category:0] % hm, internally it's discard
\definevspacing[\v!max] [category:1]
\definevspacing[\v!force] [category:2]
\definevspacing[\v!disable] [category:5]
@@ -2078,7 +2171,8 @@
\definevspacing[\v!back] [category:7]
% together [category:8]
\definevspacing[\v!overlay] [category:9]
-\definevspacing[\v!always] [category:0] % hm, internally it's discard
+\definevspacing[\v!enable] [category:10]
+
\definevspacing[\v!weak] [order:0]
\definevspacing[\v!strong] [order:100]
diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf
index e1434d8c7..ccf6de7ab 100644
--- a/tex/context/base/mkiv/status-files.pdf
+++ b/tex/context/base/mkiv/status-files.pdf
Binary files differ
diff --git a/tex/context/base/mkiv/status-lua.pdf b/tex/context/base/mkiv/status-lua.pdf
index 1a1577b9e..37f242020 100644
--- a/tex/context/base/mkiv/status-lua.pdf
+++ b/tex/context/base/mkiv/status-lua.pdf
Binary files differ
diff --git a/tex/context/base/mkiv/status-mkiv.lua b/tex/context/base/mkiv/status-mkiv.lua
index 3fe9e0d8e..ab1419c98 100644
--- a/tex/context/base/mkiv/status-mkiv.lua
+++ b/tex/context/base/mkiv/status-mkiv.lua
@@ -1,6386 +1,7441 @@
return {
- todo = {
- category = "lua",
- filename = "core-run",
- status = "idea",
- },
- main = {
+ ["core"]={
{
- category = "mkiv",
- filename = "context",
- loading = "parent",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="font-gds",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "lus",
- comment = "stub file for context",
- filename = "context",
- loading = "parent",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="cont-run",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "tex",
- filename = "metatex",
- loading = "parent",
- status = "pending",
+ ["category"]="mkvi",
+ ["filename"]="font-sel",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "lus",
- comment = "stub file for metatex",
- filename = "metatex",
- loading = "parent",
- status = "pending",
+ ["category"]="mkiv",
+ ["filename"]="grph-pat",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "cont-cs",
- loading = "parent",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="grph-rul",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "cont-de",
- loading = "parent",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="lang-rep",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "cont-en",
- loading = "parent",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="luat-usr",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "cont-fr",
- loading = "parent",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="math-mis",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "cont-gb",
- loading = "parent",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="math-rad",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "cont-it",
- loading = "parent",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="page-cst",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "cont-nl",
- loading = "parent",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="page-inj",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "cont-pe",
- loading = "parent",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="page-lin",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "cont-ro",
- loading = "parent",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="publ-imp-author",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mpiv",
- comment = "maybe more delayed loading",
- filename = "metafun",
- loading = "parent",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="publ-imp-cite",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "we keep this around for historic reasons",
- filename = "ppchtex",
- loading = "never",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="publ-imp-commands",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mkvi",
+ ["filename"]="publ-imp-default",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mkvi",
+ ["filename"]="publ-imp-definitions",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mkvi",
+ ["filename"]="publ-imp-list",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mkvi",
+ ["filename"]="publ-imp-page",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mkiv",
+ ["filename"]="spac-flr",
+ ["loading"]="always",
+ ["status"]="okay",
},
- },
- core = {
{
- category = "mkiv",
- filename = "syst-ini",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="spac-prf",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "norm-ctx",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="strc-not",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "syst-pln",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="toks-map",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "syst-mes",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="toks-tra",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "luat-cod",
- loading = "luat-cod",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="typo-chr",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "maybe combine (3)",
- filename = "luat-bas",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="typo-inj",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "maybe combine (3)",
- filename = "luat-lib",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="typo-lig",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "catc-ini",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="typo-lin",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "forward dependency",
- filename = "catc-act",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="typo-par",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "catc-def",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="typo-wrp",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "catc-ctx",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="syst-ini",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "catc-sym",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="norm-ctx",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "catc-xml",
- loading = "module",
- status = "okay",
- comment = "only needed for mkii xml parser",
+ ["category"]="mkiv",
+ ["filename"]="syst-pln",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "maybe combine (1)",
- filename = "cldf-ini",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="syst-mes",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "syst-aux",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="luat-cod",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "maybe combine (1)",
- filename = "syst-lua",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="maybe combine (3)",
+ ["filename"]="luat-bas",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "maybe combine (1)",
- filename = "syst-con",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="maybe combine (3)",
+ ["filename"]="luat-lib",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "maybe combine (1)",
- filename = "syst-fnt",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="catc-ini",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "maybe combine (1)",
- filename = "syst-rtp",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="forward dependency",
+ ["filename"]="catc-act",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- comment = "maybe combine (2)",
- filename = "file-ini",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="catc-def",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- comment = "maybe combine (2)",
- filename = "file-res",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="catc-ctx",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- filename = "file-lib",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="catc-sym",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "supp-dir",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="only needed for mkii xml parser",
+ ["filename"]="catc-xml",
+ ["loading"]="module",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "char-ini",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="maybe combine (1)",
+ ["filename"]="cldf-ini",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "char-utf",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="syst-aux",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "forward dependency",
- filename = "char-act",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="maybe combine (1)",
+ ["filename"]="syst-lua",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "mult-ini",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="maybe combine (1)",
+ ["filename"]="syst-con",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "mult-sys",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="maybe combine (1)",
+ ["filename"]="syst-fnt",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "mult-aux",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="maybe combine (1)",
+ ["filename"]="syst-rtp",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "mult-def",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["comment"]="maybe combine (2)",
+ ["filename"]="file-ini",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "mult-chk",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["comment"]="maybe combine (2)",
+ ["filename"]="file-res",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- filename = "mult-dim",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="file-lib",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "cldf-int",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="supp-dir",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "luat-ini",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="char-ini",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "toks-ini",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="char-utf",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "attr-ini",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="forward dependency",
+ ["filename"]="char-act",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "attr-mkr",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="mult-ini",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "code might move from here",
- filename = "core-ini",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="mult-sys",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "might need more redoing",
- filename = "core-env",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="mult-aux",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "in due time more might move to here",
- filename = "layo-ini",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="mult-def",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "maybe this becomes a runtime module",
- filename = "node-ini",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="mult-chk",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "maybe use context.generics/context.sprint here",
- filename = "cldf-bas",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="mult-dim",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "might need more redoing",
- filename = "node-fin",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="cldf-int",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "needs integration and configuration",
- filename = "node-mig",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="luat-ini",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "typo-bld",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="toks-ini",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "typo-sus",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="attr-ini",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "node-pag",
- loading = "never",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="attr-mkr",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "back-ini",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="code might move from here",
+ ["filename"]="core-ini",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "attr-col",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="might need more redoing",
+ ["filename"]="core-env",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "attr-lay",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="in due time more might move to here",
+ ["filename"]="layo-ini",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "attr-neg",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="maybe this becomes a runtime module",
+ ["filename"]="node-ini",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "attr-eff",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="maybe use context.generics/context.sprint here",
+ ["filename"]="cldf-bas",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "needs more usage",
- filename = "trac-tex",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="might need more redoing",
+ ["filename"]="node-fin",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "trac-deb",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="needs integration and configuration",
+ ["filename"]="node-mig",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "trac-ctx",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="typo-bld",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "supp-box",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="typo-sus",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "supp-ran",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="node-pag",
+ ["loading"]="never",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "will be moved to the math-* modules",
- filename = "supp-mat",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="back-ini",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "will grow",
- filename = "typo-ini",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="attr-col",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- filename = "file-syn",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="attr-lay",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- filename = "file-mod",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="attr-neg",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "core-con",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="attr-eff",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "cont-fil",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="needs more usage",
+ ["filename"]="trac-tex",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "cont-nop",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="trac-deb",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "cont-yes",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="trac-ctx",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "regi-ini",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="supp-box",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "enco-ini",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="supp-ran",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "hand-ini",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="will be moved to the math-* modules",
+ ["filename"]="supp-mat",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "lang-ini",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="will grow",
+ ["filename"]="typo-ini",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "namespace should be languages",
- filename = "lang-lab",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="file-syn",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "lang-hyp",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="file-mod",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "unic-ini",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="core-con",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "core-uti",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="cont-fil",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "maybe rename to core-two",
- filename = "core-two",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="cont-nop",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "core-dat",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="cont-yes",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "colo-ini",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="regi-ini",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "colo-ext",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="enco-ini",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "colo-grp",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="hand-ini",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "node-bck",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="lang-ini",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "pack-cut",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="namespace should be languages",
+ ["filename"]="lang-lab",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "lang-mis",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="lang-hyp",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "lang-url",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="unic-ini",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "lang-def",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="core-uti",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "lang-hyp",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="maybe rename to core-two",
+ ["filename"]="core-two",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "lang-frq",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="core-dat",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "lang-frd",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="colo-ini",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "lang-wrd",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="colo-ext",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- comment = "might need more redoing",
- filename = "file-job",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="colo-grp",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "symb-ini",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="node-bck",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "sort-ini",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="pack-cut",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- filename = "pack-mis",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="lang-mis",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "pack-rul",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="lang-url",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "endpar experimental code",
- filename = "pack-mrl",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="lang-def",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- filename = "pack-bck",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="lang-hyp",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "pack-fen",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="lang-frq",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "lxml-ini",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="lang-frd",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "lxml-sor",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="lang-wrd",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- filename = "typo-prc",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["comment"]="might need more redoing",
+ ["filename"]="file-job",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- filename = "strc-ini",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="symb-ini",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "strc-tag",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="sort-ini",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "this module might go away when code has been moved",
- filename = "strc-doc",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="pack-mis",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "still some rough edges",
- filename = "strc-num",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="pack-rul",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "strc-mar",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="endpar experimental code",
+ ["filename"]="pack-mrl",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "strc-sbe",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="pack-bck",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- filename = "strc-lst",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="pack-fen",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "some of the local current and synchronization macros will be renamed",
- filename = "strc-sec",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="lxml-ini",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "strc-pag",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="lxml-sor",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "(support for) setups might get improved",
- filename = "strc-ren",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="typo-prc",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "this module might go away",
- filename = "strc-xml",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="strc-ini",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "strc-def",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="strc-tag",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- comment = "some more low level names might change",
- filename = "strc-ref",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="this module might go away when code has been moved",
+ ["filename"]="strc-doc",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "use setups for rendering",
- filename = "strc-reg",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="still some rough edges",
+ ["filename"]="strc-num",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- filename = "strc-lev",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="strc-mar",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "maybe some tuning is needed / will happen",
- filename = "spac-ali",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="strc-sbe",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "probably needs some more work",
- filename = "spac-hor",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="strc-lst",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "maybe some changes will happen",
- filename = "spac-ver",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="some of the local current and synchronization macros will be renamed",
+ ["filename"]="strc-sec",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "could be improved if needed",
- filename = "spac-lin",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="strc-pag",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "this needs to be checked occasionally",
- filename = "spac-pag",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="(support for) setups might get improved",
+ ["filename"]="strc-ren",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "spac-par",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="this module might go away",
+ ["filename"]="strc-xml",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "spac-def",
- loading = "always",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="strc-def",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "needs thinking and redoing",
- filename = "spac-grd",
- loading = "always",
- status = "todo",
+ ["category"]="mkvi",
+ ["comment"]="some more low level names might change",
+ ["filename"]="strc-ref",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "in transition",
- filename = "anch-pos",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="use setups for rendering",
+ ["filename"]="strc-reg",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- comment = "maybe change locationattribute names",
- filename = "scrn-ini",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="strc-lev",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- comment = "namespace needs checking",
- filename = "scrn-ref",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="maybe some tuning is needed / will happen",
+ ["filename"]="spac-ali",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "will change when we have objects at lua end",
- filename = "pack-obj",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="probably needs some more work",
+ ["filename"]="spac-hor",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- filename = "strc-itm",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="maybe some changes will happen",
+ ["filename"]="spac-ver",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- comment = "maybe more common counter code here and setups need to be improved",
- filename = "strc-con",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="could be improved if needed",
+ ["filename"]="spac-lin",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- filename = "strc-des",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="this needs to be checked occasionally",
+ ["filename"]="spac-pag",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- comment = "(interactive) coupling is not yet working",
- filename = "strc-enu",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="spac-par",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "strc-ind",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="spac-def",
+ ["loading"]="always",
+ ["status"]="todo",
},
{
- category = "mkiv",
- comment = "needs to be adapted when strc-con/des/enu changes",
- filename = "strc-lab",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="needs thinking and redoing",
+ ["filename"]="spac-grd",
+ ["loading"]="always",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "strc-syn",
- loading = "always",
- status = "todo",
+ ["category"]="mkiv",
+ ["comment"]="in transition",
+ ["filename"]="anch-pos",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "a funny mix",
- filename = "core-sys",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["comment"]="maybe change locationattribute names",
+ ["filename"]="scrn-ini",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "page-var",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["comment"]="namespace needs checking",
+ ["filename"]="scrn-ref",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- filename = "page-otr",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="will change when we have objects at lua end",
+ ["filename"]="pack-obj",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "code might end up elsewhere",
- filename = "page-ini",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="strc-itm",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "dealing with insertions might change",
- filename = "page-ins",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["comment"]="maybe more common counter code here and setups need to be improved",
+ ["filename"]="strc-con",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "page-fac",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="strc-des",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "otr commands will be redone",
- filename = "page-brk",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["comment"]="(interactive) coupling is not yet working",
+ ["filename"]="strc-enu",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "helpers for columns",
- filename = "page-col",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="strc-ind",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "room for improvement and extension",
- filename = "page-inf",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="needs to be adapted when strc-con/des/enu changes",
+ ["filename"]="strc-lab",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "page-grd",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="strc-syn",
+ ["loading"]="always",
+ ["status"]="todo",
},
{
- category = "mkiv",
- comment = "will be extended when columns are redone",
- filename = "page-flt",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="a funny mix",
+ ["filename"]="core-sys",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "page-bck",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="page-var",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "page-not",
- loading = "always",
- status = "todo",
+ ["category"]="mkvi",
+ ["filename"]="page-otr",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "can probably be improved",
- filename = "page-one",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="code might end up elsewhere",
+ ["filename"]="page-ini",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "page-lay",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="dealing with insertions might change",
+ ["filename"]="page-ins",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- filename = "page-box",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="page-fac",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- comment = "a few things left",
- filename = "page-txt",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="otr commands will be redone",
+ ["filename"]="page-brk",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "page-sid",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="helpers for columns",
+ ["filename"]="page-col",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- comment = "in due time we need a further cleanup",
- filename = "strc-flt",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="room for improvement and extension",
+ ["filename"]="page-inf",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "page-pst",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="page-grd",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- comment = "might be extended",
- filename = "page-mbk",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="will be extended when columns are redone",
+ ["filename"]="page-flt",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "will be reimplemented",
- filename = "page-mul",
- loading = "always",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="page-bck",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "work in progress",
- filename = "page-mix",
- loading = "always",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="page-not",
+ ["loading"]="always",
+ ["status"]="todo",
},
{
- category = "mkiv",
- comment = "will be reimplemented",
- filename = "page-set",
- loading = "always",
- status = "todo",
+ ["category"]="mkiv",
+ ["comment"]="can probably be improved",
+ ["filename"]="page-one",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "pack-lyr",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="page-lay",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "pack-pos",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="page-box",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- filename = "page-mak",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["comment"]="a few things left",
+ ["filename"]="page-txt",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "will probably be overhauled some day",
- filename = "page-lin",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="page-sid",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "might get extended",
- filename = "page-par",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["comment"]="in due time we need a further cleanup",
+ ["filename"]="strc-flt",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "typo-pag",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="page-pst",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "typo-mar",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["comment"]="might be extended",
+ ["filename"]="page-mbk",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "typo-itm",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="will be reimplemented",
+ ["filename"]="page-mul",
+ ["loading"]="always",
+ ["status"]="todo",
},
{
- category = "mkiv",
- comment = "check other modules for buffer usage",
- filename = "buff-ini",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="work in progress",
+ ["filename"]="page-mix",
+ ["loading"]="always",
+ ["status"]="todo",
},
{
- category = "mkiv",
- comment = "check obsolete processbuffer",
- filename = "buff-ver",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="will be reimplemented",
+ ["filename"]="page-set",
+ ["loading"]="always",
+ ["status"]="todo",
},
{
- category = "mkvi",
- comment = "experimental code",
- filename = "buff-par",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="pack-lyr",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "buff-imp-tex",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="pack-pos",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "buff-imp-mp",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="page-mak",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "buff-imp-lua",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="might get extended",
+ ["filename"]="page-par",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "buff-imp-xml",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="typo-pag",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "buff-imp-parsed-xml",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="typo-mar",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "buff-imp-default",
- loading = "indirect",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="typo-itm",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "buff-imp-escaped",
- loading = "indirect",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="check other modules for buffer usage",
+ ["filename"]="buff-ini",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "buff-imp-nested",
- loading = "indirect",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="check obsolete processbuffer",
+ ["filename"]="buff-ver",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "strc-blk",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["comment"]="experimental code",
+ ["filename"]="buff-par",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "page-imp",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="symb-imp-cc",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkvi",
- comment = "maybe some extensions and delayed loading, needs checking",
- filename = "page-sel",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="buff-imp-default",
+ ["loading"]="indirect",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "page-com",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="buff-imp-escaped",
+ ["loading"]="indirect",
+ ["status"]="okay",
},
{
- category = "mkvi",
- comment = "namespace needs checking",
- filename = "scrn-pag",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="buff-imp-nested",
+ ["loading"]="indirect",
+ ["status"]="okay",
},
{
- category = "mkvi",
- comment = "functionality needs checking",
- filename = "scrn-wid",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="strc-blk",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- comment = "namespace needs checking",
- filename = "scrn-but",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="page-imp",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- comment = "namespace needs checking",
- filename = "scrn-bar",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["comment"]="maybe some extensions and delayed loading, needs checking",
+ ["filename"]="page-sel",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "strc-bkm",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="page-com",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "typo-tal",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["comment"]="namespace needs checking",
+ ["filename"]="scrn-pag",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "somewhat weird",
- filename = "tabl-com",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["comment"]="functionality needs checking",
+ ["filename"]="scrn-wid",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "unchecked",
- filename = "tabl-pln",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["comment"]="namespace needs checking",
+ ["filename"]="scrn-but",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "tabl-tab",
- loading = "always",
- status = "pending",
+ ["category"]="mkvi",
+ ["comment"]="namespace needs checking",
+ ["filename"]="scrn-bar",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "can probably be improved (names and such)",
- filename = "tabl-tbl",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="strc-bkm",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "frozen functionaly so no drastic cleanup",
- filename = "tabl-ntb",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="typo-tal",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "tabl-mis",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="somewhat weird",
+ ["filename"]="tabl-com",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "tabl-nte",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="unchecked",
+ ["filename"]="tabl-pln",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "will be redone when needed",
- filename = "tabl-ltb",
- loading = "always",
- status = "pending",
+ ["category"]="mkiv",
+ ["filename"]="tabl-tab",
+ ["loading"]="always",
+ ["status"]="pending",
},
{
- category = "mkiv",
- comment = "will be adapted when needed (and rest is done)",
- filename = "tabl-tsp",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="can probably be improved (names and such)",
+ ["filename"]="tabl-tbl",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- comment = "namespace needs checking",
- filename = "tabl-xtb",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="frozen functionaly so no drastic cleanup",
+ ["filename"]="tabl-ntb",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- filename = "tabl-xnt",
- loading = "module",
- status = "okay",
- loading = "always",
- comment = "only when natural tables need a replacement",
+ ["category"]="mkiv",
+ ["filename"]="tabl-mis",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "java-ini",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="tabl-nte",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- comment = "namespace needs checking",
- filename = "scrn-fld",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="will be redone when needed",
+ ["filename"]="tabl-ltb",
+ ["loading"]="always",
+ ["status"]="pending",
},
{
- category = "mkvi",
- comment = "namespace needs checking",
- filename = "scrn-hlp",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="will be adapted when needed (and rest is done)",
+ ["filename"]="tabl-tsp",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "char-enc",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["comment"]="namespace needs checking",
+ ["filename"]="tabl-xtb",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- filename = "font-lib",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["comment"]="only when natural tables need a replacement",
+ ["filename"]="tabl-xnt",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- filename = "font-fil",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="java-ini",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- filename = "font-var",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["comment"]="namespace needs checking",
+ ["filename"]="scrn-fld",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- filename = "font-fea",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["comment"]="namespace needs checking",
+ ["filename"]="scrn-hlp",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- filename = "font-mat",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="char-enc",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- comment = "needs occasional checking and upgrading",
- filename = "font-ini",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="font-lib",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- filename = "font-sym",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="font-fil",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- filename = "font-sty",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="font-var",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- filename = "font-set",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="font-fea",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- filename = "font-emp",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="font-mat",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- filename = "font-col",
- status = "okay",
+ ["category"]="mkvi",
+ ["comment"]="needs occasional checking and upgrading",
+ ["filename"]="font-ini",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "font-pre",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="font-sym",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "font-unk",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="font-sty",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "likely this will become a module",
- filename = "font-tra",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="font-set",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "this could become a module",
- filename = "font-chk",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="font-emp",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "this one might be merged",
- filename = "font-uni",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="font-col",
+ ["status"]="okay",
},
{
- category = "mkvi",
- filename = "font-col",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="font-pre",
+ ["status"]="okay",
},
{
- category = "mkvi",
- filename = "font-gds",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="font-unk",
+ ["status"]="okay",
},
{
- category = "mkvi",
- filename = "font-aux",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="likely this will become a module",
+ ["filename"]="font-tra",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "typo-lan",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="this could become a module",
+ ["filename"]="font-chk",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "this is work in progress",
- filename = "lxml-css",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="this one might be merged",
+ ["filename"]="font-uni",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "spac-chr",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="font-col",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "work in progress",
- filename = "blob-ini",
- loading = "always",
- status = "pending",
+ ["category"]="mkvi",
+ ["filename"]="font-aux",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "trac-vis",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="typo-lan",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "trac-jus",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="this is work in progress",
+ ["filename"]="lxml-css",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- filename = "trac-vis",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="spac-chr",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "typo-cln",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="work in progress",
+ ["filename"]="blob-ini",
+ ["loading"]="always",
+ ["status"]="pending",
},
{
- category = "mkiv",
- filename = "typo-spa",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="trac-jus",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "do we keep the style and color or not",
- filename = "typo-krn",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="trac-vis",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- filename = "typo-itc",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="typo-cln",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "maybe singular setup",
- filename = "typo-dir",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="typo-spa",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "typo-brk",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="do we keep the style and color or not",
+ ["filename"]="typo-krn",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "typo-cap",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="typo-itc",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "typo-dig",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="maybe singular setup",
+ ["filename"]="typo-dir",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "typo-rep",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="typo-brk",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- comment = "maybe there will be a nicer interface",
- filename = "typo-txt",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="typo-cap",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "typo-drp",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="typo-dig",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "typo-fln",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="typo-rep",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- filename = "type-ini",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["comment"]="maybe there will be a nicer interface",
+ ["filename"]="typo-txt",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-set",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="typo-drp",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-def",
- loading = "type-set",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="typo-fln",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-fbk",
- loading = "type-set",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="type-ini",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-lua",
- loading = "type-set",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="type-set",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-one",
- loading = "type-set",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="type-def",
+ ["loading"]="type-set",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-otf",
- loading = "type-set",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="type-fbk",
+ ["loading"]="type-set",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-siz",
- loading = "type-set",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="type-lua",
+ ["loading"]="type-set",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-tmf",
- loading = "never",
- status = "okay",
- comment = "placeholder to prevent other loading",
+ ["category"]="mkiv",
+ ["filename"]="type-one",
+ ["loading"]="type-set",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "scrp-ini",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="type-otf",
+ ["loading"]="type-set",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "this module is obsolete",
- filename = "prop-ini",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="type-siz",
+ ["loading"]="type-set",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "mlib-ctx",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="placeholder to prevent other loading",
+ ["filename"]="type-tmf",
+ ["loading"]="never",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "metapost code is always evolving",
- filename = "meta-ini",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="scrp-ini",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "code used in a project",
- filename = "meta-lua",
- loading = "experimental",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="this module is obsolete",
+ ["filename"]="prop-ini",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "meta-fnt",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="mlib-ctx",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "meta-tex",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="metapost code is always evolving",
+ ["filename"]="meta-ini",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "maybe this one will be merged",
- filename = "meta-fun",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="code used in a project",
+ ["filename"]="meta-lua",
+ ["loading"]="experimental",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "might get updated when mp code gets cleaned up",
- filename = "meta-pag",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="meta-fnt",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "meta-grd",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="meta-tex",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "page-mrk",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="maybe this one will be merged",
+ ["filename"]="meta-fun",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "page-flw",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="might get updated when mp code gets cleaned up",
+ ["filename"]="meta-pag",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "page-spr",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="meta-grd",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "will be made better",
- filename = "page-plg",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="page-mrk",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "needs more work (and thinking)",
- filename = "page-str",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="page-flw",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "in transition",
- filename = "anch-pgr",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="page-spr",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- comment = "in transition",
- filename = "anch-bck",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="will be made better",
+ ["filename"]="page-plg",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "will stay experimental for a while",
- filename = "anch-tab",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="needs more work (and thinking)",
+ ["filename"]="page-str",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "anch-bar",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="in transition",
+ ["filename"]="anch-pgr",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "interesting old mechanism to keep around (module?)",
- filename = "anch-snc",
- loading = "always",
- status = "pending",
+ ["category"]="mkvi",
+ ["comment"]="in transition",
+ ["filename"]="anch-bck",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "math-ini",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="will stay experimental for a while",
+ ["filename"]="anch-tab",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "this file might merge into others",
- filename = "math-pln",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="anch-bar",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "math-for",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="interesting old mechanism to keep around (module?)",
+ ["filename"]="anch-snc",
+ ["loading"]="always",
+ ["status"]="pending",
},
{
- category = "mkiv",
- comment = "eventually this will be split and spread",
- filename = "math-def",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="math-ini",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "will be checked and improved",
- filename = "math-ali",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="this file might merge into others",
+ ["filename"]="math-pln",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "needs testing",
- filename = "math-arr",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="math-for",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- filename = "math-stc",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="eventually this will be split and spread",
+ ["filename"]="math-def",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- filename = "math-acc",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="will be checked and improved",
+ ["filename"]="math-ali",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "at least for the moment",
- filename = "math-frc",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="needs testing",
+ ["filename"]="math-arr",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "math-scr",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="math-stc",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "math-int",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="math-acc",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "code get replaced (by autodelimiters)",
- filename = "math-del",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="at least for the moment",
+ ["filename"]="math-frc",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "math-fen",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="math-scr",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "math-rad",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="math-int",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "code might move to here",
- filename = "math-inl",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="code get replaced (by autodelimiters)",
+ ["filename"]="math-del",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "code might move to here",
- filename = "math-dis",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="math-fen",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "phys-dim",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="code might move to here",
+ ["filename"]="math-inl",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "some more functionality will end up here",
- filename = "strc-mat",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="code might move to here",
+ ["filename"]="math-dis",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "chem-ini",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="phys-dim",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "chem-str",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="some more functionality will end up here",
+ ["filename"]="strc-mat",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "typo-scr",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="chem-ini",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "maybe some cleanup is needed",
- filename = "node-rul",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="chem-str",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "needs testing",
- filename = "font-sol",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="typo-scr",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvI",
- filename = "strc-not",
- loading = "always",
- status = "todo",
+ ["category"]="mkiv",
+ ["comment"]="maybe some cleanup is needed",
+ ["filename"]="node-rul",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkvi",
- comment = "will be extended as part of crited",
- filename = "strc-lnt",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["comment"]="needs testing",
+ ["filename"]="font-sol",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "pack-com",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="strc-not",
+ ["loading"]="always",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "typo-del",
- loading = "always",
- status = "okay",
+ ["category"]="mkvi",
+ ["comment"]="will be extended as part of crited",
+ ["filename"]="strc-lnt",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "grph-trf",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="pack-com",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "grph-inc",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="typo-del",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "grph-fig",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="grph-trf",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "grph-raw",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="grph-inc",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "pack-box",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="grph-fig",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "pack-bar",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="grph-raw",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "page-app",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="pack-box",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "meta-fig",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="pack-bar",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "more or less obsolete",
- filename = "lang-spa",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="page-app",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "bibl-bib",
- loading = "on demand",
- status = "pending",
+ ["category"]="mkiv",
+ ["filename"]="meta-fig",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "bibl-tra",
- loading = "on demand",
- status = "pending",
+ ["category"]="mkiv",
+ ["comment"]="more or less obsolete",
+ ["filename"]="lang-spa",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "not needed",
- filename = "meta-xml",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="bibl-bib",
+ ["loading"]="on demand",
+ ["status"]="pending",
},
{
- category = "mkiv",
- filename = "cont-log",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="bibl-tra",
+ ["loading"]="on demand",
+ ["status"]="pending",
},
{
- category = "mkiv",
- filename = "task-ini",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="not needed",
+ ["filename"]="meta-xml",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "cldf-ver",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="cont-log",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "cldf-com",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="task-ini",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "core-ctx",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="cldf-ver",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "will always be messy",
- filename = "core-def",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="cldf-com",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "object related code might move or change",
- filename = "back-pdf",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="core-ctx",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "back-swf",
- loading = "never",
- status = "okay",
- comment = "no code, just an example of usage",
+ ["category"]="mkiv",
+ ["comment"]="will always be messy",
+ ["filename"]="core-def",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "back-u3d",
- loading = "never",
- status = "okay",
- comment = "no code, just an example of usage",
+ ["category"]="mkiv",
+ ["comment"]="object related code might move or change",
+ ["filename"]="back-pdf",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "mlib-pdf",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="no code, just an example of usage",
+ ["filename"]="back-swf",
+ ["loading"]="never",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "mlib-pps",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="no code, just an example of usage",
+ ["filename"]="back-u3d",
+ ["loading"]="never",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "meta-pdf",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="mlib-pdf",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "might need more work",
- filename = "grph-epd",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="mlib-pps",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "some parameters might move from export to backend",
- filename = "back-exp",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="meta-pdf",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mkiv",
+ ["comment"]="might need more work",
+ ["filename"]="grph-epd",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mkiv",
+ ["comment"]="some parameters might move from export to backend",
+ ["filename"]="back-exp",
+ ["loading"]="always",
+ ["status"]="okay",
},
},
- extras = {
+ ["extras"]={
{
- category = "tex",
- comment = "add-on for mtx-context",
- filename = "mtx-context-arrange",
- loading = "on demand",
- status = "okay",
+ ["category"]="tex",
+ ["comment"]="add-on for mtx-context",
+ ["filename"]="mtx-context-arrange",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "tex",
- comment = "add-on for mtx-context",
- filename = "mtx-context-combine",
- loading = "on demand",
- status = "okay",
+ ["category"]="tex",
+ ["comment"]="add-on for mtx-context",
+ ["filename"]="mtx-context-combine",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "tex",
- comment = "add-on for mtx-context",
- filename = "mtx-context-common",
- loading = "on demand",
- status = "okay",
+ ["category"]="tex",
+ ["comment"]="add-on for mtx-context",
+ ["filename"]="mtx-context-common",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "tex",
- comment = "add-on for mtx-context",
- filename = "mtx-context-ideas",
- loading = "on demand",
- status = "okay",
+ ["category"]="tex",
+ ["comment"]="add-on for mtx-context",
+ ["filename"]="mtx-context-ideas",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "tex",
- comment = "add-on for mtx-context",
- filename = "mtx-context-listing",
- loading = "on demand",
- status = "okay",
+ ["category"]="tex",
+ ["comment"]="add-on for mtx-context",
+ ["filename"]="mtx-context-listing",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "tex",
- comment = "add-on for mtx-context",
- filename = "mtx-context-markdown",
- loading = "on demand",
- status = "okay",
+ ["category"]="tex",
+ ["comment"]="add-on for mtx-context",
+ ["filename"]="mtx-context-markdown",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "tex",
- comment = "add-on for mtx-context",
- filename = "mtx-context-select",
- loading = "on demand",
- status = "okay",
+ ["category"]="tex",
+ ["comment"]="add-on for mtx-context",
+ ["filename"]="mtx-context-select",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "tex",
- comment = "add-on for mtx-context",
- filename = "mtx-context-timing",
- loading = "on demand",
- status = "okay",
+ ["category"]="tex",
+ ["comment"]="add-on for mtx-context",
+ ["filename"]="mtx-context-timing",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
},
- implementations = {
+ ["implementations"]={
+ {
+ ["category"]="mkiv",
+ ["filename"]="symb-imp-fontawesome",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
{
- category = "mkiv",
- filename = "colo-imp-dem",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="type-imp-ebgaramond",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "colo-imp-ema",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="type-imp-gentium",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "colo-imp-rgb",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="type-imp-ipaex",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "colo-imp-x11",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="type-imp-lato",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "colo-imp-xwi",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="type-imp-libertinus",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "java-imp-exa",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="type-imp-mathdigits",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "java-imp-fil",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="type-imp-minion",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "java-imp-fld",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="type-imp-opendyslexic",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "java-imp-rhh",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="type-imp-source",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "java-imp-stp",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="buff-imp-tex",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "meta-imp-clp",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="buff-imp-mp",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "meta-imp-dum",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="buff-imp-lua",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "meta-imp-fen",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="buff-imp-xml",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "meta-imp-mis",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="buff-imp-parsed-xml",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "meta-imp-nav",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="meta-imp-grid",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "meta-imp-pre",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="meta-imp-mat",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "meta-imp-txt",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="meta-imp-outlines",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "symb-imp-cow",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="meta-imp-tab",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "symb-imp-eur",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="publ-imp-apa",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "symb-imp-jmn",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="publ-imp-aps",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "symb-imp-mis",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="colo-imp-crayola",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "symb-imp-mvs",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="colo-imp-rainbow",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "symb-imp-nav",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="colo-imp-ral",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-imp-antykwa",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="colo-imp-dem",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-imp-antykwapoltawskiego",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="colo-imp-ema",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-imp-asana",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="colo-imp-rgb",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-imp-averia",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="colo-imp-x11",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-imp-buy",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="colo-imp-xwi",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-imp-cambria",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="java-imp-exa",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-imp-charter",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="java-imp-fil",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-imp-cleartype",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="java-imp-fld",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-imp-computer-modern-unicode",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="java-imp-rhh",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-imp-cow",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="java-imp-stp",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-imp-dejavu",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="meta-imp-clp",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-imp-euler",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="meta-imp-dum",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-imp-ghz",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="meta-imp-fen",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-imp-hgz",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="meta-imp-mis",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-imp-husayni",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="meta-imp-nav",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-imp-hvmath",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="meta-imp-pre",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-imp-inconsolata",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="meta-imp-txt",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-imp-informal",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="symb-imp-cow",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-imp-iwona",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="symb-imp-eur",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-imp-kurier",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="symb-imp-jmn",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-imp-latinmodern",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="symb-imp-mis",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-imp-liberation",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="symb-imp-mvs",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-imp-libertine",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="symb-imp-nav",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-imp-lmnames",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="type-imp-antykwa",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-imp-lucida-opentype",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="type-imp-antykwapoltawskiego",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-imp-lucida-typeone",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="type-imp-asana",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-imp-mathdesign",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="type-imp-averia",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-imp-mathtimes",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="type-imp-buy",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-imp-mscore",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="type-imp-cambria",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-imp-osx",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="type-imp-charter",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-imp-postscript",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="type-imp-cleartype",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-imp-punknova",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="type-imp-computer-modern-unicode",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-imp-texgyre",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="type-imp-cow",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-imp-unfonts",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="type-imp-dejavu",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-imp-xits",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="type-imp-euler",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-imp-xitsbidi",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="type-imp-ghz",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "publ-ini",
- loading = "always",
- status = "pending",
+ ["category"]="mkiv",
+ ["filename"]="type-imp-hgz",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "publ-old",
- loading = "always",
- status = "pending",
+ ["category"]="mkiv",
+ ["filename"]="type-imp-husayni",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "publ-tra",
- loading = "always",
- status = "pending",
+ ["category"]="mkiv",
+ ["filename"]="type-imp-hvmath",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "publ-usr",
- loading = "always",
- status = "pending",
+ ["category"]="mkiv",
+ ["filename"]="type-imp-inconsolata",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "publ-jrn",
- loading = "always",
- status = "pending",
+ ["category"]="mkiv",
+ ["filename"]="type-imp-informal",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "publ-xml",
- loading = "always",
- status = "pending",
+ ["category"]="mkiv",
+ ["filename"]="type-imp-iwona",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "publ-imp-apa",
- loading = "always",
- status = "pending",
+ ["category"]="mkiv",
+ ["filename"]="type-imp-kurier",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "publ-imp-cite",
- loading = "always",
- status = "pending",
+ ["category"]="mkiv",
+ ["filename"]="type-imp-latinmodern",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "publ-imp-definitions",
- loading = "always",
- status = "pending",
+ ["category"]="mkiv",
+ ["filename"]="type-imp-liberation",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "publ-imp-commands",
- loading = "always",
- status = "pending",
+ ["category"]="mkiv",
+ ["filename"]="type-imp-libertine",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mkiv",
+ ["filename"]="type-imp-lmnames",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mkiv",
+ ["filename"]="type-imp-lucida-opentype",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mkiv",
+ ["filename"]="type-imp-lucida-typeone",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mkiv",
+ ["filename"]="type-imp-mathdesign",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mkiv",
+ ["filename"]="type-imp-mathtimes",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mkiv",
+ ["filename"]="type-imp-mscore",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mkiv",
+ ["filename"]="type-imp-osx",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mkiv",
+ ["filename"]="type-imp-postscript",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mkiv",
+ ["filename"]="type-imp-punknova",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mkiv",
+ ["filename"]="type-imp-texgyre",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mkiv",
+ ["filename"]="type-imp-unfonts",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mkiv",
+ ["filename"]="type-imp-xits",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mkiv",
+ ["filename"]="type-imp-xitsbidi",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mkiv",
+ ["filename"]="publ-ini",
+ ["loading"]="always",
+ ["status"]="pending",
+ },
+ {
+ ["category"]="mkiv",
+ ["filename"]="publ-old",
+ ["loading"]="always",
+ ["status"]="pending",
+ },
+ {
+ ["category"]="mkiv",
+ ["filename"]="publ-tra",
+ ["loading"]="always",
+ ["status"]="pending",
+ },
+ {
+ ["category"]="mkiv",
+ ["filename"]="publ-usr",
+ ["loading"]="always",
+ ["status"]="pending",
+ },
+ {
+ ["category"]="mkiv",
+ ["filename"]="publ-xml",
+ ["loading"]="always",
+ ["status"]="pending",
},
},
- lua = {
+ ["lua"]={
+ {
+ ["category"]="lua",
+ ["filename"]="anch-pgr",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="bibl-tst",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="char-fio",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="cldf-prs",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="cldf-scn",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="cldf-stp",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="cont-run",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="font-cff",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="font-cft",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="font-dsp",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="font-gbn",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="font-hsh",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="font-mps",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="font-nod",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="font-ocl",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="font-odk",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="font-odv",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="font-off",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="font-one",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="font-onr",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="font-osd",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="font-otj",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="font-otl",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="font-oto",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="font-otr",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="font-ots",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="font-oup",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="font-sel",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="font-shp",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="font-ttf",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="font-web",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="font-xtx",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="good-ctx",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="good-gen",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="good-ini",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="good-mth",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="grph-con",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="grph-mem",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="grph-pat",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="grph-rul",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="l-gzip",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="l-lua",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="l-package",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="l-sandbox",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="lang-cnt",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="lang-frq-de",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="lang-frq-en",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="lang-frq-nl",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="lang-frq-pt",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="lang-rep",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="luat-usr",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="lxml-ini",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="math-dir",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="mlib-int",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="mlib-lua",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="node-ltp",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="node-scn",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="node-met",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="node-nut",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="page-cst",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="page-inj",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="publ-imp-apa",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
{
- category = "lua",
- filename = "anch-pos",
- loading = "anch-pos",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="publ-imp-aps",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "attr-col",
- loading = "attr-col",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="publ-imp-default",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "attr-eff",
- loading = "attr-eff",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="publ-imp-replacements",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "attr-ini",
- loading = "attr-ini",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="publ-jrn",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "attr-lay",
- loading = "attr-lay",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="publ-reg",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "attr-neg",
- loading = "attr-neg",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="publ-sor",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "attr-mkr",
- loading = "attr-mkr",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="regi-ibm",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "lua",
- comment = "experimental code, maybe some will move elsewhere",
- filename = "back-exp",
- loading = "back-exp",
- status = "pending",
+ ["category"]="lua",
+ ["filename"]="regi-pdfdoc",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "back-ini",
- loading = "back-ini",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="scrp-tha",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "back-pdf",
- loading = "back-pdf",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="spac-prf",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "bibl-bib",
- loading = "on demand",
+ ["category"]="lua",
+ ["filename"]="toks-map",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "bibl-tra",
- loading = "on demand",
+ ["category"]="lua",
+ ["filename"]="toks-tra",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "blob-ini",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="trac-par",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "buff-imp-default",
- loading = "buff-imp-default",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="typo-chr",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "buff-imp-escaped",
- loading = "buff-imp-escaped",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="typo-duc",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "lua",
- comment = "todo: colorization and nesting as in scite",
- filename = "buff-imp-lua",
- loading = "buff-imp-lua",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="typo-inj",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "lua",
- comment = "todo: colorization and nesting as in scite",
- filename = "buff-imp-mp",
- loading = "buff-imp-mp",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="typo-lin",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "buff-imp-nested",
- loading = "buff-imp-nested",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="typo-tal",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "buff-imp-parsed-xml",
- loading = "buff-imp-parsed-xml",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="typo-wrp",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "lua",
- comment = "todo: colorization and nesting as in scite",
- filename = "buff-imp-tex",
- loading = "buff-imp-tex",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="util-fil",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "lua",
- comment = "todo: colorization and nesting as in scite",
- filename = "buff-imp-xml",
- loading = "buff-imp-xml",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="util-lib-imp-gm",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "buff-ini",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="util-lib-imp-gs",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "buff-par",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="util-ran",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "lua",
- comment = "maybe we will provide a few more (nesting) methods",
- filename = "buff-ver",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="util-sac",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "catc-ini",
- loading = "catc-ini",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="util-sbx",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "char-cjk",
- loading = "char-ini",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="util-sci",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "char-def",
- loading = "char-ini",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="util-soc",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "lua",
- comment = "maybe dataonly",
- filename = "char-enc",
- loading = "char-enc",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="util-sql-imp-client",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "char-ent",
- loading = "char-ent",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="util-sql-imp-library",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- comment = "maybe move blocks table to separate (dataonly) file",
- filename = "char-ini",
- loading = "char-ini",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="util-sql-imp-sqlite",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "char-map",
- loading = "char-ini",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="util-sql-imp-swiglib",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "char-tex",
- loading = "char-ini",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="util-sql-loggers",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "char-utf",
- loading = "char-utf",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="util-sql-sessions",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "chem-ini",
- loading = "chem-ini",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="util-sql-tickets",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "chem-str",
- loading = "chem-str",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="util-sql-tracers",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- comment = "will be extended and can be optimized if needed",
- filename = "cldf-bas",
- loading = "cldf-bas",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="util-sql-users",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- comment = "might change or even go away",
- filename = "cldf-com",
- loading = "cldf-com",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="util-you",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "cldf-ini",
- loading = "cldf-ini",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="m-escrito",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "cldf-int",
- loading = "cldf-int",
- status = "pending",
+ ["category"]="lua",
+ ["filename"]="s-characters-properties",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- comment = "maybe this code can be redone more efficiently/robust",
- filename = "cldf-ver",
- loading = "cldf-ver",
- status = "pending",
+ ["category"]="lua",
+ ["filename"]="s-languages-words",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- comment = "also used in mtx-*",
- filename = "colo-icc",
- loading = "colo-ini",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="s-xml-analyzers",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "colo-ini",
- loading = "colo-ini",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="x-math-svg",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- comment = "this code might move to a module",
- filename = "colo-run",
- loading = "on demand",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="anch-pos",
+ ["loading"]="anch-pos",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "core-con",
- loading = "core-con",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="attr-col",
+ ["loading"]="attr-col",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "core-ctx",
- loading = "core-ctx",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="attr-eff",
+ ["loading"]="attr-eff",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "core-dat",
- loading = "core-dat",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="attr-ini",
+ ["loading"]="attr-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- comment = "maybe abusing the tex namespace is wrong",
- filename = "core-env",
- loading = "core-env",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="attr-lay",
+ ["loading"]="attr-lay",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "core-sys",
- loading = "core-sys",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="attr-neg",
+ ["loading"]="attr-neg",
+ ["status"]="okay",
},
{
- category = "lua",
- commands = "this is in fact replaced by core-dat",
- filename = "core-two",
- loading = "core-two",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="attr-mkr",
+ ["loading"]="attr-mkr",
+ ["status"]="okay",
},
{
- category = "lua",
- comment = "some code will move to better places",
- filename = "core-uti",
- loading = "core-uti",
- status = "okay",
+ ["category"]="lua",
+ ["comment"]="experimental code, maybe some will move elsewhere",
+ ["filename"]="back-exp",
+ ["loading"]="back-exp",
+ ["status"]="pending",
},
{
- category = "lua",
- filename = "data-aux",
- loading = "luat-lib",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="back-ini",
+ ["loading"]="back-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "data-bin",
- loading = "luat-lib",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="back-pdf",
+ ["loading"]="back-pdf",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "data-con",
- loading = "luat-lib",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="bibl-bib",
+ ["loading"]="on demand",
},
{
- category = "lua",
- filename = "data-crl",
- loading = "never",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="bibl-tra",
+ ["loading"]="on demand",
},
{
- category = "lua",
- filename = "data-ctx",
- loading = "luat-lib",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="blob-ini",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "data-env",
- loading = "luat-lib",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="buff-imp-default",
+ ["loading"]="buff-imp-default",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "data-exp",
- loading = "luat-lib",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="buff-imp-escaped",
+ ["loading"]="buff-imp-escaped",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "data-fil",
- loading = "luat-lib",
- status = "todo",
+ ["category"]="lua",
+ ["comment"]="todo: colorization and nesting as in scite",
+ ["filename"]="buff-imp-lua",
+ ["loading"]="buff-imp-lua",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "data-gen",
- status = "todo",
+ ["category"]="lua",
+ ["comment"]="todo: colorization and nesting as in scite",
+ ["filename"]="buff-imp-mp",
+ ["loading"]="buff-imp-mp",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "data-ini",
- loading = "luat-lib",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="buff-imp-nested",
+ ["loading"]="buff-imp-nested",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "data-inp",
- loading = "luat-lib",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="buff-imp-parsed-xml",
+ ["loading"]="buff-imp-parsed-xml",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "data-lst",
- status = "todo",
+ ["category"]="lua",
+ ["comment"]="todo: colorization and nesting as in scite",
+ ["filename"]="buff-imp-tex",
+ ["loading"]="buff-imp-tex",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "data-lua",
- loading = "luat-lib",
- status = "todo",
+ ["category"]="lua",
+ ["comment"]="todo: colorization and nesting as in scite",
+ ["filename"]="buff-imp-xml",
+ ["loading"]="buff-imp-xml",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "data-met",
- loading = "luat-lib",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="buff-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "data-out",
- loading = "luat-lib",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="buff-par",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "data-pre",
- loading = "luat-lib",
- status = "todo",
+ ["category"]="lua",
+ ["comment"]="maybe we will provide a few more (nesting) methods",
+ ["filename"]="buff-ver",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "data-res",
- loading = "luat-lib",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="catc-ini",
+ ["loading"]="catc-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "data-sch",
- loading = "luat-lib",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="char-cjk",
+ ["loading"]="char-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "data-tex",
- loading = "luat-lib",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="char-def",
+ ["loading"]="char-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "data-tmf",
- status = "todo",
+ ["category"]="lua",
+ ["comment"]="maybe dataonly",
+ ["filename"]="char-enc",
+ ["loading"]="char-enc",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "data-tmp",
- loading = "luat-lib",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="char-ent",
+ ["loading"]="char-ent",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "data-tre",
- loading = "luat-lib",
- status = "todo",
+ ["category"]="lua",
+ ["comment"]="maybe move blocks table to separate (dataonly) file",
+ ["filename"]="char-ini",
+ ["loading"]="char-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "data-use",
- loading = "luat-lib",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="char-map",
+ ["loading"]="char-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "data-vir",
- loading = "luat-lib",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="char-tex",
+ ["loading"]="char-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "data-zip",
- loading = "luat-lib",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="char-utf",
+ ["loading"]="char-utf",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "file-ini",
- loading = "file-ini",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="chem-ini",
+ ["loading"]="chem-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "file-job",
- loading = "file-job",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="chem-str",
+ ["loading"]="chem-str",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "file-lib",
- loading = "file-lib",
- status = "okay",
+ ["category"]="lua",
+ ["comment"]="will be extended and can be optimized if needed",
+ ["filename"]="cldf-bas",
+ ["loading"]="cldf-bas",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "file-mod",
- loading = "file-mod",
- status = "okay",
+ ["category"]="lua",
+ ["comment"]="might change or even go away",
+ ["filename"]="cldf-com",
+ ["loading"]="cldf-com",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "file-res",
- loading = "file-res",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="cldf-ini",
+ ["loading"]="cldf-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "file-syn",
- loading = "file-syn",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="cldf-int",
+ ["loading"]="cldf-int",
+ ["status"]="pending",
},
{
- category = "lua",
- filename = "font-afm",
- loading = "font-lib",
- status = "okay",
+ ["category"]="lua",
+ ["comment"]="maybe this code can be redone more efficiently/robust",
+ ["filename"]="cldf-ver",
+ ["loading"]="cldf-ver",
+ ["status"]="pending",
},
{
- category = "lua",
- filename = "font-afk",
- loading = "font-lib",
- status = "okay",
+ ["category"]="lua",
+ ["comment"]="also used in mtx-*",
+ ["filename"]="colo-icc",
+ ["loading"]="colo-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- comment = "only used in luatex-fonts",
- filename = "font-age",
- loading = "never",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="colo-ini",
+ ["loading"]="colo-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "font-agl",
- loading = "on demand",
- status = "okay",
+ ["category"]="lua",
+ ["comment"]="this code might move to a module",
+ ["filename"]="colo-run",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- comment = "needs some documentation in usage",
- filename = "font-aux",
- loading = "font-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="core-con",
+ ["loading"]="core-con",
+ ["status"]="okay",
},
{
- category = "lua",
- comment = "move more to the commands namespace",
- filename = "font-chk",
- loading = "font-chk",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="core-ctx",
+ ["loading"]="core-ctx",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "font-cid",
- loading = "font-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="core-dat",
+ ["loading"]="core-dat",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "font-col",
- loading = "font-col",
- status = "okay",
+ ["category"]="lua",
+ ["comment"]="maybe abusing the tex namespace is wrong",
+ ["filename"]="core-env",
+ ["loading"]="core-env",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "font-con",
- loading = "font-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="core-sys",
+ ["loading"]="core-sys",
+ ["status"]="okay",
},
{
- category = "lua",
- comment = "will be improved over time",
- filename = "font-ctx",
- loading = "font-lib",
- status = "okay",
+ ["category"]="lua",
+ ["commands"]="this is in fact replaced by core-dat",
+ ["filename"]="core-two",
+ ["loading"]="core-two",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "font-def",
- loading = "font-lib",
- status = "okay",
+ ["category"]="lua",
+ ["comment"]="some code will move to better places",
+ ["filename"]="core-uti",
+ ["loading"]="core-uti",
+ ["status"]="okay",
},
{
- category = "lua",
- comment = "part of this code is obsolete",
- filename = "font-enc",
- loading = "font-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="data-aux",
+ ["loading"]="luat-lib",
+ ["status"]="todo",
},
{
- category = "lua",
- comment = "needs documentation at the tex end",
- filename = "font-enh",
- loading = "font-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="data-bin",
+ ["loading"]="luat-lib",
+ ["status"]="todo",
},
{
- category = "lua",
- comment = "maybe some data tables can be be external",
- filename = "font-ext",
- loading = "font-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="data-con",
+ ["loading"]="luat-lib",
+ ["status"]="todo",
},
{
- category = "lua",
- comment = "okay but can be improved",
- filename = "font-fbk",
- loading = "font-lib",
- status = "pending",
+ ["category"]="lua",
+ ["filename"]="data-crl",
+ ["loading"]="never",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "font-gds",
- loading = "font-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="data-ctx",
+ ["loading"]="luat-lib",
+ ["status"]="todo",
},
{
- category = "mkvi",
- filename = "font-hsh",
- loading = "always",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="data-env",
+ ["loading"]="luat-lib",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "font-ini",
- loading = "font-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="data-exp",
+ ["loading"]="luat-lib",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "font-inj",
- loading = "font-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="data-fil",
+ ["loading"]="luat-lib",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "font-ldr",
- loading = "on demand",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="data-gen",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "font-log",
- loading = "font-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="data-ini",
+ ["loading"]="luat-lib",
+ ["status"]="todo",
},
{
- category = "lua",
- comment = "currently rather minimalistic",
- filename = "font-lua",
- loading = "font-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="data-inp",
+ ["loading"]="luat-lib",
+ ["status"]="todo",
},
{
- category = "lua",
- comment = "the lum file support will be dropped / no map files anyway",
- filename = "font-map",
- loading = "font-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="data-lst",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "font-mis",
- loading = "on demand",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="data-lua",
+ ["loading"]="luat-lib",
+ ["status"]="todo",
},
{
- category = "mkvi",
- filename = "font-nod",
- loading = "always",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="data-met",
+ ["loading"]="luat-lib",
+ ["status"]="todo",
},
{
- category = "lua",
- comment = "when more scripts are supported we might end up with imp files",
- filename = "font-ota",
- loading = "font-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="data-out",
+ ["loading"]="luat-lib",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "font-otb",
- loading = "font-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="data-pre",
+ ["loading"]="luat-lib",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "font-otc",
- loading = "font-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="data-res",
+ ["loading"]="luat-lib",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "font-otd",
- loading = "font-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="data-sch",
+ ["loading"]="luat-lib",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "font-otf",
- loading = "font-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="data-tex",
+ ["loading"]="luat-lib",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "font-oth",
- loading = "font-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="data-tmf",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "font-oti",
- loading = "font-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="data-tmp",
+ ["loading"]="luat-lib",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "font-otn",
- loading = "font-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="data-tre",
+ ["loading"]="luat-lib",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "font-otp",
- loading = "font-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="data-use",
+ ["loading"]="luat-lib",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "font-ott",
- loading = "font-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="data-vir",
+ ["loading"]="luat-lib",
+ ["status"]="todo",
},
{
- category = "lua",
- comment = "is mostly replaced by lfg files",
- filename = "font-pat",
- loading = "font-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="data-zip",
+ ["loading"]="luat-lib",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "font-sol",
- loading = "font-sol",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="file-ini",
+ ["loading"]="file-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- comment = "also loaded on demand",
- filename = "font-syn",
- loading = "font-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="file-job",
+ ["loading"]="file-job",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "font-tfm",
- loading = "font-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="file-lib",
+ ["loading"]="file-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "font-trt",
- loading = "font-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="file-mod",
+ ["loading"]="file-mod",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "font-vf",
- loading = "font-lib",
- status = "pending",
+ ["category"]="lua",
+ ["filename"]="file-res",
+ ["loading"]="file-res",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "grph-epd",
- loading = "grph-epd",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="file-syn",
+ ["loading"]="file-syn",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "grph-fil",
- loading = "grph-inc",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="font-afm",
+ ["loading"]="font-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "grph-inc",
- loading = "grph-inc",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="font-afk",
+ ["loading"]="font-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "grph-raw",
- loading = "grph-raw",
- status = "okay",
+ ["category"]="lua",
+ ["comment"]="only used in luatex-fonts",
+ ["filename"]="font-age",
+ ["loading"]="never",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "grph-swf",
- loading = "grph-swf",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="font-agl",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "grph-u3d",
- loading = "grph-u3d",
- status = "okay",
+ ["category"]="lua",
+ ["comment"]="needs some documentation in usage",
+ ["filename"]="font-aux",
+ ["loading"]="font-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- comment = "experiment with graphic magick library",
- filename = "grph-wnd",
- loading = "on demand",
- status = "okay",
+ ["category"]="lua",
+ ["comment"]="move more to the commands namespace",
+ ["filename"]="font-chk",
+ ["loading"]="font-chk",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "java-ini",
- loading = "java-ini",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="font-cid",
+ ["loading"]="font-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "l-boolean",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="font-col",
+ ["loading"]="font-col",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "l-dir",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="font-con",
+ ["loading"]="font-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "l-file",
- status = "todo",
+ ["category"]="lua",
+ ["comment"]="will be improved over time",
+ ["filename"]="font-ctx",
+ ["loading"]="font-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "l-function",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="font-def",
+ ["loading"]="font-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "l-io",
- status = "todo",
+ ["category"]="lua",
+ ["comment"]="part of this code is obsolete",
+ ["filename"]="font-enc",
+ ["loading"]="font-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "l-lpeg",
- status = "todo",
+ ["category"]="lua",
+ ["comment"]="needs documentation at the tex end",
+ ["filename"]="font-enh",
+ ["loading"]="font-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "l-math",
- status = "todo",
+ ["category"]="lua",
+ ["comment"]="maybe some data tables can be be external",
+ ["filename"]="font-ext",
+ ["loading"]="font-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "l-md5",
- status = "todo",
+ ["category"]="lua",
+ ["comment"]="okay but can be improved",
+ ["filename"]="font-fbk",
+ ["loading"]="font-lib",
+ ["status"]="pending",
},
{
- category = "lua",
- filename = "l-number",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="font-ini",
+ ["loading"]="font-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "l-os",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="font-inj",
+ ["loading"]="font-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "l-pdfview",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="font-ldr",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "l-set",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="font-log",
+ ["loading"]="font-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "l-string",
- status = "todo",
+ ["category"]="lua",
+ ["comment"]="currently rather minimalistic",
+ ["filename"]="font-lua",
+ ["loading"]="font-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "l-table",
- status = "todo",
+ ["category"]="lua",
+ ["comment"]="the lum file support will be dropped / no map files anyway",
+ ["filename"]="font-map",
+ ["loading"]="font-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "l-unicode",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="font-mis",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "l-url",
- status = "todo",
+ ["category"]="lua",
+ ["comment"]="when more scripts are supported we might end up with imp files",
+ ["filename"]="font-ota",
+ ["loading"]="font-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "l-xml",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="font-otb",
+ ["loading"]="font-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "lang-def",
- loading = "lang-def",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="font-otc",
+ ["loading"]="font-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "lang-dis",
- loading = "lang-ini",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="font-otd",
+ ["loading"]="font-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "lang-hyp",
- loading = "lang-hyp",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="font-otf",
+ ["loading"]="font-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "lang-ini",
- loading = "lang-ini",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="font-oth",
+ ["loading"]="font-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "lang-lab",
- loading = "lang-lab",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="font-oti",
+ ["loading"]="font-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "lang-hyp",
- loading = "lang-hyp",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="font-otn",
+ ["loading"]="font-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "lang-txt",
- loading = "lang-lab",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="font-otp",
+ ["loading"]="font-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- comment = "maybe another approach is nicer",
- filename = "lang-url",
- loading = "lang-url",
- status = "pending",
+ ["category"]="lua",
+ ["filename"]="font-ott",
+ ["loading"]="font-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "lang-wrd",
- loading = "lang-wrd",
- status = "okay",
+ ["category"]="lua",
+ ["comment"]="is mostly replaced by lfg files",
+ ["filename"]="font-pat",
+ ["loading"]="font-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- comment = "more will end up here",
- filename = "layo-ini",
- loading = "layo-ini",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="font-sol",
+ ["loading"]="font-sol",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "lpdf-ano",
- status = "todo",
+ ["category"]="lua",
+ ["comment"]="also loaded on demand",
+ ["filename"]="font-syn",
+ ["loading"]="font-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "lpdf-res",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="font-tfm",
+ ["loading"]="font-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "lpdf-col",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="font-trt",
+ ["loading"]="font-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "lpdf-enc",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="font-vf",
+ ["loading"]="font-lib",
+ ["status"]="pending",
},
{
- category = "lua",
- filename = "lpdf-epa",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="grph-epd",
+ ["loading"]="grph-epd",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "lpdf-epd",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="grph-fil",
+ ["loading"]="grph-inc",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "lpdf-fld",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="grph-inc",
+ ["loading"]="grph-inc",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "lpdf-fmt",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="grph-raw",
+ ["loading"]="grph-raw",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "lpdf-grp",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="grph-swf",
+ ["loading"]="grph-swf",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "lpdf-ini",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="grph-u3d",
+ ["loading"]="grph-u3d",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "lpdf-mis",
- status = "todo",
+ ["category"]="lua",
+ ["comment"]="experiment with graphic magick library",
+ ["filename"]="grph-wnd",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "lpdf-mov",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="java-ini",
+ ["loading"]="java-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "lpdf-nod",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="l-boolean",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "lpdf-ren",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="l-dir",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "lpdf-swf",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="l-file",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "lpdf-tag",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="l-function",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "lpdf-u3d",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="l-io",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "lpdf-wid",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="l-lpeg",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "lpdf-xmp",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="l-math",
+ ["status"]="todo",
},
{
- category = "lua",
- comment = "replacement code for wd/ht/dp",
- filename = "luat-bwc",
- loading = "luat-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="l-md5",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "luat-cbk",
- loading = "luat-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="l-number",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "luat-cnf",
- loading = "luat-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="l-os",
+ ["status"]="todo",
},
{
- category = "lua",
- comment = "maybe some code should move",
- filename = "luat-cod",
- loading = "luat-cod",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="l-pdfview",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "luat-env",
- loading = "luat-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="l-set",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "luat-exe",
- loading = "luat-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="l-string",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "luat-fio",
- loading = "luat-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="l-table",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "luat-fmt",
- loading = "on demand",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="l-unicode",
+ ["status"]="todo",
},
{
- category = "lua",
- comment = "will be upgraded when we have Lua 5.2",
- filename = "luat-ini",
- loading = "luat-lib",
- status = "pending",
+ ["category"]="lua",
+ ["filename"]="l-url",
+ ["status"]="todo",
},
{
- category = "lua",
- comment = "will be upgraded when we have Lua 5.2",
- filename = "util-env",
- loading = "luat-lib",
- status = "pending",
+ ["category"]="lua",
+ ["filename"]="l-xml",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "luat-iop",
- loading = "luat-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="lang-def",
+ ["loading"]="lang-def",
+ ["status"]="okay",
},
{
- category = "lua",
- comment = "this is likely to change some day",
- filename = "luat-lua",
- loading = "luat-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="lang-dis",
+ ["loading"]="lang-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "luat-mac",
- loading = "luat-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="lang-hyp",
+ ["loading"]="lang-hyp",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "luat-run",
- loading = "luat-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="lang-ini",
+ ["loading"]="lang-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- comment = "related to the socket code",
- filename = "luat-soc",
- loading = "on demand",
- status = "pending",
+ ["category"]="lua",
+ ["filename"]="lang-lab",
+ ["loading"]="lang-lab",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "luat-sta",
- loading = "on demand",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="lang-hyp",
+ ["loading"]="lang-hyp",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "luat-sto",
- loading = "luat-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="lang-txt",
+ ["loading"]="lang-lab",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "lxml-aux",
- loading = "luat-lib",
- status = "todo",
+ ["category"]="lua",
+ ["comment"]="maybe another approach is nicer",
+ ["filename"]="lang-url",
+ ["loading"]="lang-url",
+ ["status"]="pending",
},
{
- category = "lua",
- filename = "lxml-css",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="lang-wrd",
+ ["loading"]="lang-wrd",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "lxml-ctx",
- status = "todo",
+ ["category"]="lua",
+ ["comment"]="more will end up here",
+ ["filename"]="layo-ini",
+ ["loading"]="layo-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "lxml-dir",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="lpdf-ano",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "lxml-ent",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="lpdf-res",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "lxml-inf",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="lpdf-col",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "lxml-lpt",
- loading = "luat-lib",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="lpdf-enc",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "lxml-mis",
- loading = "luat-lib",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="lpdf-epa",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "lxml-sor",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="lpdf-epd",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "lxml-tab",
- loading = "luat-lib",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="lpdf-fld",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "lxml-tex",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="lpdf-fmt",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "lxml-xml",
- loading = "luat-lib",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="lpdf-grp",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "m-chart",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="lpdf-ini",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "m-database",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="lpdf-mis",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "m-nodechart",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="lpdf-mov",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "m-markdown",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="lpdf-nod",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "m-pstricks",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="lpdf-ren",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "m-spreadsheet",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="lpdf-swf",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "m-steps",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="lpdf-tag",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "math-act",
- loading = "math-ini",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="lpdf-u3d",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "math-frc",
- loading = "math-frc",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="lpdf-wid",
+ ["status"]="todo",
},
{
- category = "lua",
- comment = "could be made look nicer, but who cares",
- filename = "math-dim",
- loading = "math-ini",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="lpdf-xmp",
+ ["status"]="todo",
},
{
- category = "lua",
- comment = "the code is related to math-vfu",
- filename = "math-ext",
- loading = "math-ini",
- status = "okay",
+ ["category"]="lua",
+ ["comment"]="replacement code for wd/ht/dp",
+ ["filename"]="luat-bwc",
+ ["loading"]="luat-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "math-fbk",
- loading = "math-ini",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="luat-cbk",
+ ["loading"]="luat-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "math-frc",
- loading = "math-frc",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="luat-cnf",
+ ["loading"]="luat-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- comment = "okay, but we might have a few more low level definers some day",
- filename = "math-ini",
- loading = "math-ini",
- status = "pending",
+ ["category"]="lua",
+ ["comment"]="maybe some code should move",
+ ["filename"]="luat-cod",
+ ["loading"]="luat-cod",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "math-map",
- loading = "math-ini",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="luat-env",
+ ["loading"]="luat-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "math-noa",
- loading = "math-ini",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="luat-exe",
+ ["loading"]="luat-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "math-ren",
- loading = "math-ini",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="luat-fio",
+ ["loading"]="luat-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "math-tag",
- loading = "math-ini",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="luat-fmt",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "math-ttv",
- loading = "math-ini",
- status = "okay",
+ ["category"]="lua",
+ ["comment"]="will be upgraded when we have Lua 5.2",
+ ["filename"]="luat-ini",
+ ["loading"]="luat-lib",
+ ["status"]="pending",
},
{
- category = "lua",
- filename = "math-vfu",
- loading = "math-ini",
- status = "okay",
+ ["category"]="lua",
+ ["comment"]="will be upgraded when we have Lua 5.2",
+ ["filename"]="util-env",
+ ["loading"]="luat-lib",
+ ["status"]="pending",
},
{
- category = "lua",
- comment = "this is just a first version",
- filename = "meta-fun",
- loading = "meta-fun",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="luat-iop",
+ ["loading"]="luat-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "meta-ini",
- loading = "meta-ini",
- status = "okay",
+ ["category"]="lua",
+ ["comment"]="this is likely to change some day",
+ ["filename"]="luat-lua",
+ ["loading"]="luat-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "meta-lua",
- loading = "meta-lua",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="luat-mac",
+ ["loading"]="luat-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "meta-fnt",
- loading = "meta-fnt",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="luat-run",
+ ["loading"]="luat-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- comment = "could be done nicer nowadays but who needs it",
- filename = "meta-pdf",
- loading = "meta-pdf",
- status = "okay",
+ ["category"]="lua",
+ ["comment"]="related to the socket code",
+ ["filename"]="luat-soc",
+ ["loading"]="on demand",
+ ["status"]="pending",
},
{
- category = "lua",
- filename = "meta-pdh",
- loading = "meta-pdh",
- status = "okay",
- loading = "never",
- comment = "this is historic code that we keep around",
+ ["category"]="lua",
+ ["filename"]="luat-sta",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "meta-tex",
- loading = "meta-tex",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="luat-sto",
+ ["loading"]="luat-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "mlib-ctx",
- loading = "mlib-ctx",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="lxml-aux",
+ ["loading"]="luat-lib",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "mlib-pdf",
- loading = "mlib-pdf",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="lxml-css",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "mlib-pps",
- loading = "mlib-pdf",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="lxml-ctx",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "mlib-run",
- loading = "mlib-ctx",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="lxml-dir",
+ ["status"]="todo",
},
{
- category = "lua",
- comment = "this is an experiment, namespaces need to be dealt with properly",
- filename = "mult-aux",
- loading = "mult-aux",
- status = "pending",
+ ["category"]="lua",
+ ["filename"]="lxml-ent",
+ ["status"]="todo",
},
{
- category = "lua",
- comment = "this is an experiment",
- filename = "mult-chk",
- loading = "mult-chk",
- status = "pending",
+ ["category"]="lua",
+ ["filename"]="lxml-inf",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "mult-def",
- loading = "mult-ini",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="lxml-lpt",
+ ["loading"]="luat-lib",
+ ["status"]="todo",
},
{
- category = "lua",
- comment = "used for generating editor lexing files",
- filename = "mult-fun",
- loading = "never",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="lxml-mis",
+ ["loading"]="luat-lib",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "mult-ini",
- loading = "mult-ini",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="lxml-sor",
+ ["status"]="todo",
},
{
- category = "lua",
- comment = "used for generating editor lexing files",
- filename = "mult-low",
- loading = "never",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="lxml-tab",
+ ["loading"]="luat-lib",
+ ["status"]="todo",
},
{
- category = "lua",
- comment = "all messages need to be checked",
- filename = "mult-mes",
- loading = "mult-ini",
- status = "pending",
+ ["category"]="lua",
+ ["filename"]="lxml-tex",
+ ["status"]="todo",
},
{
- category = "lua",
- comment = "used for generating editor lexing files",
- filename = "mult-mps",
- loading = "never",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="lxml-xml",
+ ["loading"]="luat-lib",
+ ["status"]="todo",
},
{
- category = "lua",
- comment = "used for generating editor lexing files",
- filename = "mult-prm",
- loading = "never",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="m-chart",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "node-acc",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="m-database",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "node-aux",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="m-nodechart",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "node-bck",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="m-markdown",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "node-dir",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="m-pstricks",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "node-ext",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="m-spreadsheet",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "node-fin",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="m-steps",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "node-fnt",
- loading = "font-lib",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="math-act",
+ ["loading"]="math-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "node-ini",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="math-frc",
+ ["loading"]="math-frc",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "node-inj",
- loading = "font-lib",
- status = "todo",
+ ["category"]="lua",
+ ["comment"]="could be made look nicer, but who cares",
+ ["filename"]="math-dim",
+ ["loading"]="math-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "node-mig",
- status = "todo",
+ ["category"]="lua",
+ ["comment"]="the code is related to math-vfu",
+ ["filename"]="math-ext",
+ ["loading"]="math-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "node-pag",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="math-fbk",
+ ["loading"]="math-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "node-ppt",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="math-frc",
+ ["loading"]="math-frc",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "node-pro",
- status = "todo",
+ ["category"]="lua",
+ ["comment"]="okay, but we might have a few more low level definers some day",
+ ["filename"]="math-ini",
+ ["loading"]="math-ini",
+ ["status"]="pending",
},
{
- category = "lua",
- filename = "node-ref",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="math-map",
+ ["loading"]="math-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "node-res",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="math-noa",
+ ["loading"]="math-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "node-rul",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="math-ren",
+ ["loading"]="math-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "node-ser",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="math-tag",
+ ["loading"]="math-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "node-shp",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="math-ttv",
+ ["loading"]="math-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "node-tex",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="math-vfu",
+ ["loading"]="math-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "node-tra",
- status = "todo",
+ ["category"]="lua",
+ ["comment"]="this is just a first version",
+ ["filename"]="meta-fun",
+ ["loading"]="meta-fun",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "node-snp",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="meta-ini",
+ ["loading"]="meta-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "node-tsk",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="meta-lua",
+ ["loading"]="meta-lua",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "node-tst",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="meta-fnt",
+ ["loading"]="meta-fnt",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "node-typ",
- status = "todo",
+ ["category"]="lua",
+ ["comment"]="could be done nicer nowadays but who needs it",
+ ["filename"]="meta-pdf",
+ ["loading"]="meta-pdf",
+ ["status"]="okay",
},
{
- category = "lua",
- comment = "will be extended when we have opened up pdf objects",
- filename = "pack-obj",
- loading = "pack-obj",
- status = "okay",
+ ["category"]="lua",
+ ["comment"]="this is historic code that we keep around",
+ ["filename"]="meta-pdh",
+ ["loading"]="never",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "pack-rul",
- loading = "pack-rul",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="meta-tex",
+ ["loading"]="meta-tex",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "page-otr",
- loading = "page-otr",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="mlib-ctx",
+ ["loading"]="mlib-ctx",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "page-flt",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="mlib-pdf",
+ ["loading"]="mlib-pdf",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "page-ins",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="mlib-pps",
+ ["loading"]="mlib-pdf",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "page-lin",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="mlib-run",
+ ["loading"]="mlib-ctx",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "page-mix",
- status = "todo",
+ ["category"]="lua",
+ ["comment"]="this is an experiment, namespaces need to be dealt with properly",
+ ["filename"]="mult-aux",
+ ["loading"]="mult-aux",
+ ["status"]="pending",
},
{
- category = "lua",
- filename = "page-pst",
- status = "todo",
+ ["category"]="lua",
+ ["comment"]="this is an experiment",
+ ["filename"]="mult-chk",
+ ["loading"]="mult-chk",
+ ["status"]="pending",
},
{
- category = "lua",
- filename = "page-str",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="mult-def",
+ ["loading"]="mult-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "phys-dim",
- loading = "phys-dim",
- status = "okay",
+ ["category"]="lua",
+ ["comment"]="used for generating editor lexing files",
+ ["filename"]="mult-fun",
+ ["loading"]="never",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "regi-8859-1",
- loading = "on demand",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="mult-ini",
+ ["loading"]="mult-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "regi-8859-10",
- loading = "on demand",
- status = "okay",
+ ["category"]="lua",
+ ["comment"]="used for generating editor lexing files",
+ ["filename"]="mult-low",
+ ["loading"]="never",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "regi-8859-11",
- loading = "on demand",
- status = "okay",
+ ["category"]="lua",
+ ["comment"]="all messages need to be checked",
+ ["filename"]="mult-mes",
+ ["loading"]="mult-ini",
+ ["status"]="pending",
},
{
- category = "lua",
- filename = "regi-8859-13",
- loading = "on demand",
- status = "okay",
+ ["category"]="lua",
+ ["comment"]="used for generating editor lexing files",
+ ["filename"]="mult-mps",
+ ["loading"]="never",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "regi-8859-14",
- loading = "on demand",
- status = "okay",
+ ["category"]="lua",
+ ["comment"]="used for generating editor lexing files",
+ ["filename"]="mult-prm",
+ ["loading"]="never",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "regi-8859-15",
- loading = "on demand",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="node-acc",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "regi-8859-16",
- loading = "on demand",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="node-aux",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "regi-8859-2",
- loading = "on demand",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="node-bck",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "regi-8859-3",
- loading = "on demand",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="node-dir",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "regi-8859-4",
- loading = "on demand",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="node-ext",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "regi-8859-5",
- loading = "on demand",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="node-fin",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "regi-8859-6",
- loading = "on demand",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="node-fnt",
+ ["loading"]="font-lib",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "regi-8859-7",
- loading = "on demand",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="node-ini",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "regi-8859-8",
- loading = "on demand",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="node-mig",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "regi-8859-9",
- loading = "on demand",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="node-pag",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "regi-cp1250",
- loading = "on demand",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="node-ppt",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "regi-cp1251",
- loading = "on demand",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="node-pro",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "regi-cp1252",
- loading = "on demand",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="node-ref",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "regi-cp1253",
- loading = "on demand",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="node-res",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "regi-cp1254",
- loading = "on demand",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="node-rul",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "regi-cp1255",
- loading = "on demand",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="node-ser",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "regi-cp1256",
- loading = "on demand",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="node-shp",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "regi-cp1257",
- loading = "on demand",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="node-tex",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "regi-cp1258",
- loading = "on demand",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="node-tra",
+ ["status"]="todo",
},
{
- category = "lua",
- comment = "just a demo file",
- filename = "regi-demo",
- loading = "never",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="node-snp",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "regi-ini",
- loading = "regi-ini",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="node-tsk",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "s-fonts-coverage",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="node-tst",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "s-fonts-features",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="node-typ",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "s-fonts-missing",
- status = "okay",
+ ["category"]="lua",
+ ["comment"]="will be extended when we have opened up pdf objects",
+ ["filename"]="pack-obj",
+ ["loading"]="pack-obj",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "s-fonts-shapes",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="pack-rul",
+ ["loading"]="pack-rul",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "s-fonts-system",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="page-otr",
+ ["loading"]="page-otr",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "s-fonts-tables",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="page-flt",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "s-fonts-vectors",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="page-ins",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "s-languages-counters",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="page-lin",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "s-languages-frequencies",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="page-mix",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "s-languages-hyphenation",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="page-pst",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "s-languages-sorting",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="page-str",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "s-languages-system",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="phys-dim",
+ ["loading"]="phys-dim",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "s-math-characters",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="regi-8859-1",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "s-math-coverage",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="regi-8859-10",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "s-math-extensibles",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="regi-8859-11",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "s-fonts-goodies",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="regi-8859-13",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "s-math-parameters",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="regi-8859-14",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "s-physics-units",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="regi-8859-15",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "s-pre-71",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="regi-8859-16",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "s-sql-tables",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="regi-8859-2",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "scrn-but",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="regi-8859-3",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "scrn-fld",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="regi-8859-4",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "scrn-hlp",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="regi-8859-5",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "scrn-ini",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="regi-8859-6",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "scrn-pag",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="regi-8859-7",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "scrn-ref",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="regi-8859-8",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "scrn-wid",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="regi-8859-9",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- comment = "we can speed this up",
- filename = "scrp-cjk",
- loading = "scrp-ini",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="regi-cp1250",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- comment = "we can speed this up",
- filename = "scrp-eth",
- loading = "scrp-ini",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="regi-cp1251",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "scrp-ini",
- loading = "scrp-ini",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="regi-cp1252",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "sort-ini",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="regi-cp1253",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "sort-lan",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="regi-cp1254",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "spac-adj",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="regi-cp1255",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "spac-ali",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="regi-cp1256",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "spac-chr",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="regi-cp1257",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "spac-hor",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="regi-cp1258",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "spac-ver",
- status = "todo",
+ ["category"]="lua",
+ ["comment"]="just a demo file",
+ ["filename"]="regi-demo",
+ ["loading"]="never",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "status-mkiv",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="regi-ini",
+ ["loading"]="regi-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "strc-bkm",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="s-fonts-coverage",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "strc-blk",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="s-fonts-features",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "strc-con",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="s-fonts-missing",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "strc-doc",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="s-fonts-shapes",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "strc-flt",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="s-fonts-system",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "strc-ini",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="s-fonts-tables",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "strc-itm",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="s-fonts-vectors",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "strc-lev",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="s-languages-counters",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "strc-lst",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="s-languages-frequencies",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "strc-mar",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="s-languages-hyphenation",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "strc-mat",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="s-languages-sorting",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "strc-not",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="s-languages-system",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "strc-num",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="s-math-characters",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "strc-pag",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="s-math-coverage",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "strc-ref",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="s-fonts-goodies",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "strc-reg",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="s-math-parameters",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "strc-rsc",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="s-pre-71",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "strc-syn",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="s-sql-tables",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "strc-tag",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="scrn-but",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "supp-box",
- loading = "supp-box",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="scrn-fld",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "supp-ran",
- loading = "supp-ran",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="scrn-hlp",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "symb-ini",
- loading = "symb-ini",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="scrn-ini",
+ ["status"]="todo",
},
{
- category = "lua",
- comment = "there will be more in here",
- filename = "syst-aux",
- loading = "syst-aux",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="scrn-pag",
+ ["status"]="todo",
},
{
- category = "lua",
- comment = "do some tests with speedups (sprint)",
- filename = "syst-con",
- loading = "syst-con",
- status = "pending",
+ ["category"]="lua",
+ ["filename"]="scrn-ref",
+ ["status"]="todo",
},
{
- category = "lua",
- comment = "do some tests with speedups (less tokens)",
- filename = "syst-lua",
- loading = "syst-lua",
- status = "pending",
+ ["category"]="lua",
+ ["filename"]="scrn-wid",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "tabl-tbl",
- loading = "tabl-tbl",
- status = "okay",
+ ["category"]="lua",
+ ["comment"]="we can speed this up",
+ ["filename"]="scrp-cjk",
+ ["loading"]="scrp-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- comment = "work in progress",
- filename = "tabl-xtb",
- loading = "tabl-xtb",
- status = "okay",
+ ["category"]="lua",
+ ["comment"]="we can speed this up",
+ ["filename"]="scrp-eth",
+ ["loading"]="scrp-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- comment = "we need a well defined defintion moment",
- filename = "task-ini",
- loading = "task-ini",
- status = "pending",
+ ["category"]="lua",
+ ["filename"]="scrp-ini",
+ ["loading"]="scrp-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "toks-ini",
- loading = "toks-ini",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="sort-ini",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "toks-scn",
- loading = "toks-ini",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="sort-lan",
+ ["status"]="todo",
},
{
- category = "lua",
- comment = "must be applied in more places",
- filename = "trac-ctx",
- loading = "trac-ctx",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="spac-adj",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "trac-deb",
- loading = "trac-deb",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="spac-ali",
+ ["status"]="todo",
},
{
- category = "lua",
- comment = "for the moment somewhat private",
- filename = "trac-fil",
- loading = "never",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="spac-chr",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "trac-inf",
- loading = "luat-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="spac-hor",
+ ["status"]="todo",
},
{
- category = "lua",
- comment = "will be redone and extended",
- filename = "trac-lmx",
- loading = "luat-lib",
- status = "pending",
+ ["category"]="lua",
+ ["filename"]="spac-ver",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "trac-log",
- loading = "luat-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="status-mkiv",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "trac-xml",
- loading = "mtxrun",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="strc-bkm",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "trac-exp",
- loading = "mtxrun",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="strc-blk",
+ ["status"]="todo",
},
{
- category = "lua",
- comment = "experimental code, will be redone when lua 5.2",
- filename = "trac-pro",
- loading = "luat-lib",
- status = "pending",
+ ["category"]="lua",
+ ["filename"]="strc-con",
+ ["status"]="todo",
},
{
- category = "lua",
- comment = "some code can better be in util-set",
- filename = "trac-set",
- loading = "luat-lib",
- status = "pending",
+ ["category"]="lua",
+ ["filename"]="strc-doc",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "trac-tex",
- loading = "trac-tex",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="strc-flt",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "trac-tim",
- loading = "on demand",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="strc-ini",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "trac-vis",
- loading = "trac-vis",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="strc-itm",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "trac-jus",
- loading = "trac-jus",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="strc-lev",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "type-ini",
- loading = "type-ini",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="strc-lst",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "typo-bld",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="strc-mar",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "typo-sus",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="strc-mat",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "typo-brk",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="strc-not",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "typo-cap",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="strc-num",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "typo-cln",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="strc-pag",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "typo-dig",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="strc-ref",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "typo-dir",
- loading = "typo-dir",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="strc-reg",
+ ["status"]="todo",
},
{
- category = "lua",
- comment = "work in progress",
- filename = "typo-dha",
- loading = "typo-dir",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="strc-rsc",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "typo-dua",
- loading = "typo-dir",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="strc-syn",
+ ["status"]="todo",
},
{
- category = "lua",
- comment = "work in progress",
- filename = "typo-dub",
- loading = "typo-dir",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="strc-tag",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "typo-ini",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="supp-box",
+ ["loading"]="supp-box",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "typo-tal",
- loading = "typo-tal",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="supp-ran",
+ ["loading"]="supp-ran",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "typo-itc",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="symb-ini",
+ ["loading"]="symb-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "typo-krn",
- status = "todo",
+ ["category"]="lua",
+ ["comment"]="there will be more in here",
+ ["filename"]="syst-aux",
+ ["loading"]="syst-aux",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "typo-mar",
- status = "todo",
+ ["category"]="lua",
+ ["comment"]="do some tests with speedups (sprint)",
+ ["filename"]="syst-con",
+ ["loading"]="syst-con",
+ ["status"]="pending",
},
{
- category = "lua",
- filename = "typo-pag",
- status = "todo",
+ ["category"]="lua",
+ ["comment"]="do some tests with speedups (less tokens)",
+ ["filename"]="syst-lua",
+ ["loading"]="syst-lua",
+ ["status"]="pending",
},
{
- category = "lua",
- filename = "typo-drp",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="tabl-tbl",
+ ["loading"]="tabl-tbl",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "typo-fln",
- status = "okay",
+ ["category"]="lua",
+ ["comment"]="work in progress",
+ ["filename"]="tabl-xtb",
+ ["loading"]="tabl-xtb",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "typo-man",
- status = "todo",
+ ["category"]="lua",
+ ["comment"]="we need a well defined defintion moment",
+ ["filename"]="task-ini",
+ ["loading"]="task-ini",
+ ["status"]="pending",
},
{
- category = "lua",
- filename = "typo-prc",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="toks-ini",
+ ["loading"]="toks-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "typo-lan",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="toks-scn",
+ ["loading"]="toks-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "typo-rep",
- status = "todo",
+ ["category"]="lua",
+ ["comment"]="must be applied in more places",
+ ["filename"]="trac-ctx",
+ ["loading"]="trac-ctx",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "typo-spa",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="trac-deb",
+ ["loading"]="trac-deb",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "unic-ini",
- loading = "unic-ini",
- status = "okay",
+ ["category"]="lua",
+ ["comment"]="for the moment somewhat private",
+ ["filename"]="trac-fil",
+ ["loading"]="never",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "util-deb",
- loading = "luat-lib",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="trac-inf",
+ ["loading"]="luat-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "util-dim",
- loading = "luat-lib",
- status = "todo",
+ ["category"]="lua",
+ ["comment"]="will be redone and extended",
+ ["filename"]="trac-lmx",
+ ["loading"]="luat-lib",
+ ["status"]="pending",
},
{
- category = "lua",
- filename = "util-fmt",
- loading = "luat-lib",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="trac-log",
+ ["loading"]="luat-lib",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "util-jsn",
- loading = "m-json",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="trac-xml",
+ ["loading"]="mtxrun",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "util-lua",
- loading = "luat-lib",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="trac-exp",
+ ["loading"]="mtxrun",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "util-lib",
- loading = "luat-lib",
- status = "okay",
+ ["category"]="lua",
+ ["comment"]="experimental code, will be redone when lua 5.2",
+ ["filename"]="trac-pro",
+ ["loading"]="luat-lib",
+ ["status"]="pending",
},
{
- category = "lua",
- filename = "util-mrg",
- loading = "luat-lib",
- status = "todo",
+ ["category"]="lua",
+ ["comment"]="some code can better be in util-set",
+ ["filename"]="trac-set",
+ ["loading"]="luat-lib",
+ ["status"]="pending",
},
{
- category = "lua",
- filename = "util-pck",
- loading = "luat-lib",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="trac-tex",
+ ["loading"]="trac-tex",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "util-prs",
- loading = "luat-lib",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="trac-tim",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "util-seq",
- loading = "luat-lib",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="trac-vis",
+ ["loading"]="trac-vis",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "util-sql",
- loading = "m-sql",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="trac-jus",
+ ["loading"]="trac-jus",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "util-sta",
- loading = "luat-lib",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="type-ini",
+ ["loading"]="type-ini",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "util-sto",
- loading = "luat-lib",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="typo-bld",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "util-str",
- loading = "luat-lib",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="typo-sus",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "util-tab",
- loading = "luat-lib",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="typo-brk",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "util-tpl",
- loading = "luat-lib",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="typo-cap",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "x-asciimath",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="typo-cln",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "x-calcmath",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="typo-dig",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "x-cals",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="typo-dir",
+ ["loading"]="typo-dir",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "x-chemml",
- status = "todo",
+ ["category"]="lua",
+ ["comment"]="work in progress",
+ ["filename"]="typo-dha",
+ ["loading"]="typo-dir",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "x-ct",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="typo-dua",
+ ["loading"]="typo-dir",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "x-ldx",
- status = "todo",
+ ["category"]="lua",
+ ["comment"]="work in progress",
+ ["filename"]="typo-dub",
+ ["loading"]="typo-dir",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "x-mathml",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="typo-ini",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "publ-ini",
- loading = "publ-ini.mkiv",
- status = "pending",
+ ["category"]="mkiv",
+ ["filename"]="typo-tal",
+ ["loading"]="typo-tal",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "publ-aut",
- loading = "publ-ini.mkiv",
- status = "pending",
+ ["category"]="lua",
+ ["filename"]="typo-itc",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "publ-dat",
- loading = "publ-ini.mkiv",
- status = "pending",
+ ["category"]="lua",
+ ["filename"]="typo-krn",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "publ-oth",
- loading = "publ-ini.mkiv",
- status = "pending",
+ ["category"]="lua",
+ ["filename"]="typo-mar",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "publ-fnd",
- loading = "publ-ini.mkiv",
- status = "pending",
+ ["category"]="lua",
+ ["filename"]="typo-pag",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "publ-tra",
- loading = "publ-ini.mkiv",
- status = "pending",
+ ["category"]="lua",
+ ["filename"]="typo-drp",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "publ-usr",
- loading = "publ-ini.mkiv",
- status = "pending",
+ ["category"]="lua",
+ ["filename"]="typo-fln",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="typo-man",
+ ["status"]="todo",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="typo-prc",
+ ["status"]="todo",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="typo-lan",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="typo-rep",
+ ["status"]="todo",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="typo-spa",
+ ["status"]="todo",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="unic-ini",
+ ["loading"]="unic-ini",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="util-deb",
+ ["loading"]="luat-lib",
+ ["status"]="todo",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="util-dim",
+ ["loading"]="luat-lib",
+ ["status"]="todo",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="util-fmt",
+ ["loading"]="luat-lib",
+ ["status"]="todo",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="util-jsn",
+ ["loading"]="m-json",
+ ["status"]="todo",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="util-lua",
+ ["loading"]="luat-lib",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="util-lib",
+ ["loading"]="luat-lib",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="util-mrg",
+ ["loading"]="luat-lib",
+ ["status"]="todo",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="util-pck",
+ ["loading"]="luat-lib",
+ ["status"]="todo",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="util-prs",
+ ["loading"]="luat-lib",
+ ["status"]="todo",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="util-seq",
+ ["loading"]="luat-lib",
+ ["status"]="todo",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="util-sql",
+ ["loading"]="m-sql",
+ ["status"]="todo",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="util-sta",
+ ["loading"]="luat-lib",
+ ["status"]="todo",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="util-sto",
+ ["loading"]="luat-lib",
+ ["status"]="todo",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="util-str",
+ ["loading"]="luat-lib",
+ ["status"]="todo",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="util-tab",
+ ["loading"]="luat-lib",
+ ["status"]="todo",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="util-tpl",
+ ["loading"]="luat-lib",
+ ["status"]="todo",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="x-asciimath",
+ ["status"]="todo",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="x-calcmath",
+ ["status"]="todo",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="x-cals",
+ ["status"]="todo",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="x-chemml",
+ ["status"]="todo",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="x-ct",
+ ["status"]="todo",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="x-ldx",
+ ["status"]="todo",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="x-mathml",
+ ["status"]="todo",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="publ-ini",
+ ["loading"]="publ-ini.mkiv",
+ ["status"]="pending",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="publ-aut",
+ ["loading"]="publ-ini.mkiv",
+ ["status"]="pending",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="publ-dat",
+ ["loading"]="publ-ini.mkiv",
+ ["status"]="pending",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="publ-oth",
+ ["loading"]="publ-ini.mkiv",
+ ["status"]="pending",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="publ-fnd",
+ ["loading"]="publ-ini.mkiv",
+ ["status"]="pending",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="publ-tra",
+ ["loading"]="publ-ini.mkiv",
+ ["status"]="pending",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="publ-usr",
+ ["loading"]="publ-ini.mkiv",
+ ["status"]="pending",
},
},
- metafun = {
+ ["main"]={
+ {
+ ["category"]="mkiv",
+ ["filename"]="context",
+ ["loading"]="parent",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lus",
+ ["comment"]="stub file for context",
+ ["filename"]="context",
+ ["loading"]="parent",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="tex",
+ ["filename"]="metatex",
+ ["loading"]="parent",
+ ["status"]="pending",
+ },
{
- category = "mpiv",
- filename = "mp-base",
- loading = "always",
- status = "okay",
+ ["category"]="lus",
+ ["comment"]="stub file for metatex",
+ ["filename"]="metatex",
+ ["loading"]="parent",
+ ["status"]="pending",
},
{
- category = "mpiv",
- filename = "mp-tool",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="cont-cs",
+ ["loading"]="parent",
+ ["status"]="okay",
},
{
- category = "mpiv",
- filename = "mp-mlib",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="cont-de",
+ ["loading"]="parent",
+ ["status"]="okay",
},
{
- category = "mpiv",
- comment = "sort of obsolete",
- filename = "mp-core",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="cont-en",
+ ["loading"]="parent",
+ ["status"]="okay",
},
{
- category = "mpiv",
- comment = "maybe some nicer synonyms",
- filename = "mp-page",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="cont-fr",
+ ["loading"]="parent",
+ ["status"]="okay",
},
{
- category = "mpiv",
- filename = "mp-butt",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="cont-gb",
+ ["loading"]="parent",
+ ["status"]="okay",
},
{
- category = "mpiv",
- filename = "mp-shap",
- loading = "always",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="cont-it",
+ ["loading"]="parent",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mkiv",
+ ["filename"]="cont-nl",
+ ["loading"]="parent",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mkiv",
+ ["filename"]="cont-pe",
+ ["loading"]="parent",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mkiv",
+ ["filename"]="cont-ro",
+ ["loading"]="parent",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mkiv",
+ ["comment"]="we keep this around for historic reasons",
+ ["filename"]="ppchtex",
+ ["loading"]="never",
+ ["status"]="okay",
+ },
+ },
+ ["metafun"]={
+ {
+ ["category"]="mpiv",
+ ["comment"]="maybe more delayed loading",
+ ["filename"]="metafun",
+ ["loading"]="parent",
+ ["status"]="okay",
},
{
- category = "mpiv",
- filename = "mp-grph",
- loading = "always",
- status = "okay",
+ ["category"]="mpiv",
+ ["filename"]="mp-base",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mpiv",
- filename = "mp-grid",
- loading = "always",
- status = "okay",
+ ["category"]="mpiv",
+ ["filename"]="mp-tool",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mpiv",
- comment = "a hack anyway",
- filename = "mp-form",
- loading = "always",
- status = "okay",
+ ["category"]="mpiv",
+ ["filename"]="mp-mlib",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mpiv",
- filename = "mp-figs",
- loading = "always",
- status = "okay",
+ ["category"]="mpiv",
+ ["comment"]="sort of obsolete",
+ ["filename"]="mp-core",
+ ["status"]="okay",
},
{
- category = "mpiv",
- filename = "mp-func",
- loading = "always",
- status = "okay",
+ ["category"]="mpiv",
+ ["comment"]="maybe some nicer synonyms",
+ ["filename"]="mp-page",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mpiv",
- filename = "mp-text",
- loading = "on demand",
- status = "todo",
+ ["category"]="mpiv",
+ ["filename"]="mp-butt",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mpiv",
- filename = "mp-crop",
- loading = "on demand",
- status = "okay",
+ ["category"]="mpiv",
+ ["filename"]="mp-shap",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mpiv",
- comment = "follows m-chart",
- filename = "mp-char",
- loading = "on demand",
- status = "okay",
+ ["category"]="mpiv",
+ ["filename"]="mp-grph",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mpiv",
- comment = "follows m-steps",
- filename = "mp-step",
- loading = "on demand",
- status = "okay",
+ ["category"]="mpiv",
+ ["filename"]="mp-grid",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mpiv",
- filename = "mp-chem",
- loading = "on demand",
- status = "okay",
+ ["category"]="mpiv",
+ ["comment"]="a hack anyway",
+ ["filename"]="mp-form",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mpiv",
- comment = "maybe some namespace changes",
- filename = "mp-abck",
- loading = "on demand",
- status = "okay",
+ ["category"]="mpiv",
+ ["filename"]="mp-figs",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mpiv",
- comment = "maybe some namespace changes",
- filename = "mp-apos",
- loading = "on demand",
- status = "okay",
+ ["category"]="mpiv",
+ ["filename"]="mp-func",
+ ["loading"]="always",
+ ["status"]="okay",
},
{
- category = "mpiv",
- comment = "will be done when needed",
- filename = "mp-asnc",
- loading = "on demand",
- status = "todo",
+ ["category"]="mpiv",
+ ["filename"]="mp-text",
+ ["loading"]="on demand",
+ ["status"]="todo",
+ },
+ {
+ ["category"]="mpiv",
+ ["filename"]="mp-crop",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mpiv",
+ ["comment"]="follows m-chart",
+ ["filename"]="mp-char",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mpiv",
+ ["comment"]="follows m-steps",
+ ["filename"]="mp-step",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mpiv",
+ ["filename"]="mp-chem",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mpiv",
+ ["comment"]="maybe some namespace changes",
+ ["filename"]="mp-abck",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mpiv",
+ ["comment"]="maybe some namespace changes",
+ ["filename"]="mp-apos",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mpiv",
+ ["comment"]="will be done when needed",
+ ["filename"]="mp-asnc",
+ ["loading"]="on demand",
+ ["status"]="todo",
+ },
+ {
+ ["category"]="mpiv",
+ ["filename"]="mp-back",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mpiv",
+ ["filename"]="mp-bare",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mpiv",
+ ["filename"]="mp-cows",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mpiv",
+ ["filename"]="mp-fobg",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mpiv",
+ ["filename"]="mp-grap",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mpiv",
+ ["filename"]="mp-idea",
+ ["loading"]="on demand",
+ ["status"]="unknown",
+ },
+ {
+ ["category"]="mpiv",
+ ["filename"]="mp-luas",
+ ["loading"]="always",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mpiv",
+ ["filename"]="mp-symb",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
},
- modules = {
+ ["modules"]={
+ {
+ ["category"]="mkiv",
+ ["comment"]="best use m-zint instead",
+ ["filename"]="m-barcodes",
+ ["loading"]="module",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mkvi",
+ ["filename"]="m-chart",
+ ["loading"]="module",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mkiv",
+ ["comment"]="this is a placeholder (chemistry is built-in)",
+ ["filename"]="m-chemic",
+ ["loading"]="never",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mkiv",
+ ["filename"]="m-cweb",
+ ["status"]="todo",
+ },
+ {
+ ["category"]="mkiv",
+ ["filename"]="m-database",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mkvi",
+ ["filename"]="m-nodechart",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="mkiv",
+ ["comment"]="add-on for mtx-context",
+ ["filename"]="m-directives",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
{
- category = "mkiv",
- comment = "best use m-zint instead",
- filename = "m-barcodes",
- loading = "module",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="m-educat",
+ ["status"]="todo",
},
{
- category = "mkvi",
- filename = "m-chart",
- loading = "module",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="m-fields",
+ ["status"]="todo",
},
{
- category = "mkiv",
- comment = "this is a placeholder (chemistry is built-in)",
- filename = "m-chemic",
- loading = "never",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="m-format",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "m-cweb",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="m-graph",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "m-database",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="m-ipsum",
+ ["loading"]="module",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "m-nodechart",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="m-json",
+ ["loading"]="module",
+ ["status"]="okay",
},
{
- category = "tex",
- filename = "m-datastrc",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="m-layout",
+ ["status"]="todo",
},
{
- category = "mkiv",
- comment = "add-on for mtx-context",
- filename = "m-directives",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="add-on for mtx-context",
+ ["filename"]="m-logcategories",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "tex",
- filename = "m-educat",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="m-markdown",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "m-fields",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="m-mathcrap",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "m-format",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="m-mkii",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "m-graph",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="m-mkivhacks",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "m-ipsum",
- loading = "module",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="m-morse",
+ ["loading"]="module",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "m-json",
- loading = "module",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="m-narrowtt",
+ ["loading"]="module",
+ ["status"]="okay",
},
{
- category = "tex",
- filename = "m-layout",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="m-ntb-to-xtb",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "add-on for mtx-context",
- filename = "m-logcategories",
- loading = "on demand",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="m-obsolete",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "m-markdown",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="m-oldfun",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "m-mathcrap",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="m-oldnum",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "m-mkii",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="m-pictex",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "m-mkivhacks",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="m-pstricks",
+ ["status"]="todo",
},
{
- category = "mkvi",
- filename = "m-morse",
- loading = "module",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="keep an eye on changes in lua code",
+ ["filename"]="m-punk",
+ ["status"]="okay",
},
{
- category = "tex",
- filename = "m-narrowtt",
- loading = "module",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="m-spreadsheet",
+ ["status"]="okay",
},
{
- category = "tex",
- filename = "m-newmat",
- status = "todo",
+ ["category"]="mkvi",
+ ["filename"]="m-steps",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "m-ntb-to-xtb",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="m-subsub",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "m-obsolete",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="m-sql",
+ ["loading"]="module",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "m-oldfun",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="m-timing",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "m-oldnum",
- status = "todo",
+ ["category"]="mkiv",
+ ["comment"]="add-on for mtx-context",
+ ["filename"]="m-trackers",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "tex",
- filename = "m-pictex",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="m-translate",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "m-pstricks",
- status = "todo",
+ ["category"]="xsd",
+ ["filename"]="x-chemml",
+ ["status"]="todo",
},
{
- category = "mkiv",
- comment = "keep an eye on changes in lua code",
- filename = "m-punk",
- status = "okay",
+ ["category"]="xsd",
+ ["filename"]="x-contml",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "m-r",
- status = "todo",
+ ["category"]="rng",
+ ["filename"]="x-corres",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "m-spreadsheet",
- status = "okay",
+ ["category"]="dtd",
+ ["filename"]="x-fig-00",
+ ["status"]="todo",
},
{
- category = "mkvi",
- filename = "m-steps",
- status = "todo",
+ ["category"]="xsd",
+ ["filename"]="x-fig-00",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "m-streams",
- status = "todo",
+ ["category"]="ctx",
+ ["filename"]="x-ldx",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "m-subsub",
- status = "todo",
+ ["category"]="xsd",
+ ["filename"]="x-mathml",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "m-sql",
- loading = "module",
- status = "okay",
+ ["category"]="xsl",
+ ["filename"]="x-om2cml",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "m-timing",
- status = "okay",
+ ["category"]="xsl",
+ ["filename"]="x-openmath",
+ ["status"]="todo",
},
{
- category = "mkiv",
- comment = "add-on for mtx-context",
- filename = "m-trackers",
- loading = "on demand",
- status = "okay",
+ ["category"]="ctx",
+ ["comment"]="runner for x-pfs-01",
+ ["filename"]="x-pfsense",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "m-translate",
- status = "okay",
+ ["category"]="xsd",
+ ["filename"]="x-physml",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "m-units",
- status = "todo",
+ ["category"]="xsl",
+ ["filename"]="x-sm2om",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "m-visual",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="m-units",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "m-zint",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="m-visual",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-abr-01",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="m-zint",
+ ["status"]="okay",
},
{
- category = "tex",
- filename = "s-abr-02",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-abr-01",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-abr-03",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-abr-02",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-abr-04",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-abr-03",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "s-art-01",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-abr-04",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-cdr-01",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="s-art-01",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "s-def-01",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-cdr-01",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-faq-00",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="s-def-01",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-faq-01",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-faq-00",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-faq-02",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-faq-01",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-faq-03",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-faq-02",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "s-fnt-10",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-faq-03",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "s-fnt-20",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="s-fnt-10",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "s-fnt-21",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="s-fnt-20",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "s-fnt-24",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="s-fnt-21",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "s-fnt-30",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="s-fnt-24",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "s-fonts-coverage",
- loading = "s-fonts-coverage",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="s-fonts-coverage",
+ ["loading"]="s-fonts-coverage",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "s-fonts-features",
- loading = "s-fonts-features",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="s-fonts-features",
+ ["loading"]="s-fonts-features",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "s-fonts-goodies",
- loading = "s-fonts-goodies",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="s-fonts-goodies",
+ ["loading"]="s-fonts-goodies",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "s-fonts-missing",
- loading = "s-fonts-missing",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="s-fonts-missing",
+ ["loading"]="s-fonts-missing",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "s-fonts-shapes",
- loading = "s-fonts-shapes",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="s-fonts-shapes",
+ ["loading"]="s-fonts-shapes",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "s-fonts-system",
- loading = "s-fonts-system",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="s-fonts-system",
+ ["loading"]="s-fonts-system",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "s-fonts-tables",
- loading = "s-fonts-tables",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="s-fonts-tables",
+ ["loading"]="s-fonts-tables",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "s-fonts-vectors",
- loading = "s-fonts-vectors",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="s-fonts-vectors",
+ ["loading"]="s-fonts-vectors",
+ ["status"]="okay",
},
{
- category = "mkvi",
- filename = "s-inf-01",
- status = "okay",
+ ["category"]="mkvi",
+ ["filename"]="s-inf-01",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "s-inf-02",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="s-inf-02",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "s-inf-03",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="s-inf-03",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "s-inf-04",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="s-inf-04",
+ ["status"]="todo",
},
{
- category = "lua",
- filename = "s-languages-counters",
- loading = "s-languages-counters",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="s-languages-counters",
+ ["loading"]="s-languages-counters",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "s-languages-frequencies",
- loading = "s-languages-frequencies",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="s-languages-frequencies",
+ ["loading"]="s-languages-frequencies",
+ ["status"]="okay",
},
{
- category = "lua",
- filename = "s-languages-hyphenation",
- loading = "s-languages-hyphenation",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="s-languages-hyphenation",
+ ["loading"]="s-languages-hyphenation",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "s-languages-sorting",
- loading = "s-languages-sorting",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="s-languages-sorting",
+ ["loading"]="s-languages-sorting",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "s-languages-system",
- loading = "s-languages-system",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="s-languages-system",
+ ["loading"]="s-languages-system",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "s-lan-03",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="s-mag-01",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "s-lan-04",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="s-map-10",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "s-lan-06",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="s-math-characters",
+ ["loading"]="s-math-characters",
+ ["status"]="okay",
},
{
- category = "tex",
- filename = "s-mag-01",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="s-math-coverage",
+ ["loading"]="s-math-coverage",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "s-map-10",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="s-math-extensibles",
+ ["loading"]="s-math-extensibles",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "s-math-characters",
- loading = "s-math-characters",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="s-math-parameters",
+ ["loading"]="s-math-parameters",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "s-math-coverage",
- loading = "s-math-coverage",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="s-math-repertoire",
+ ["loading"]="s-math-repertoire",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "s-math-extensibles",
- loading = "s-math-extensibles",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="s-mod-00",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "s-math-parameters",
- loading = "s-math-parameters",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="s-mod-01",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "s-math-repertoire",
- loading = "s-math-repertoire",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="s-mod-02",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "s-mod-00",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="s-pages-statistics",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "s-mod-01",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="s-physics-units",
+ ["loading"]="s-physics-units",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "s-mod-02",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-pre-00",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "s-pages-statistics",
- status = "okay",
+ ["category"]="tex",
+ ["filename"]="s-pre-01",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "s-physics-units",
- loading = "s-physics-units",
- status = "okay",
+ ["category"]="tex",
+ ["filename"]="s-pre-02",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-pre-00",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-pre-03",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-pre-01",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-pre-04",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-pre-02",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-pre-05",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-pre-03",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-pre-06",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-pre-04",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-pre-07",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-pre-05",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-pre-08",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-pre-06",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-pre-09",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-pre-07",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-pre-10",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-pre-08",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-pre-11",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-pre-09",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-pre-12",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-pre-10",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-pre-13",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-pre-11",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-pre-14",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-pre-12",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-pre-15",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-pre-13",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-pre-16",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-pre-14",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="s-pre-17",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-pre-15",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-pre-18",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-pre-16",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-pre-19",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-pre-17",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-pre-22",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-pre-18",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-pre-23",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-pre-19",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-pre-26",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-pre-22",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-pre-27",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-pre-23",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="s-pre-30",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-pre-26",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="s-present-tiles",
+ ["status"]="okay",
},
{
- category = "tex",
- filename = "s-pre-27",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-pre-50",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "s-pre-30",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="s-pre-60",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "s-present-tiles",
- status = "okay",
+ ["category"]="tex",
+ ["filename"]="s-pre-61",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-pre-50",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-pre-62",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "s-pre-60",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-pre-63",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-pre-61",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-pre-64",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-pre-62",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-pre-66",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-pre-63",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-pre-67",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-pre-64",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-pre-68",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-pre-66",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="s-pre-69",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-pre-67",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="s-pre-70",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-pre-68",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="s-pre-71",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "s-pre-69",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-pre-93",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "s-pre-70",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="s-pre-96",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "s-pre-71",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="s-reg-01",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-pre-93",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="s-sql-tables",
+ ["loading"]="s-sql-tables",
+ ["status"]="okay",
},
{
- category = "tex",
- filename = "s-pre-96",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="x-asciimath",
+ ["status"]="okay",
},
{
- category = "tex",
- filename = "s-ptj-01",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="x-calcmath",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "s-reg-01",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="x-cals",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "s-set-31",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="x-chemml",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "s-syn-01",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="x-ct",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "s-sql-tables",
- loading = "s-sql-tables",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="x-entities",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "x-asciimath",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="x-foxet",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "x-calcmath",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="x-ldx",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "x-cals",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="x-mathml",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "x-chemml",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="x-newmml",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "x-ct",
- status = "todo",
+ ["category"]="mkiv",
+ ["comment"]="pfsense xml configuration rendering",
+ ["filename"]="x-pfs-01",
+ ["status"]="okay",
},
{
- category = "tex",
- filename = "x-dir-01",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="x-physml",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "x-dir-05",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="x-res-01",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "x-entities",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="x-res-50",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "x-foxet",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="x-udhr",
+ ["status"]="okay",
},
+ },
+ ["optional"]={
{
- category = "mkiv",
- filename = "x-ldx",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="bxml-apa",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "x-mathml",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="colo-run",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "x-newmml",
- status = "todo",
+ ["category"]="mkiv",
+ ["comment"]="always needs some work",
+ ["filename"]="cont-new",
+ ["loading"]="runtime",
+ ["status"]="todo",
},
{
- category = "mkiv",
- comment = "pfsense xml configuration rendering",
- filename = "x-pfs-01",
- status = "okay",
+ ["category"]="mkiv",
+ ["filename"]="font-run",
+ ["loading"]="on demand",
+ ["status"]="todo",
},
{
- category = "mkiv",
- filename = "x-physml",
- status = "todo",
+ ["category"]="mkiv",
+ ["comment"]="this is an experimental module",
+ ["filename"]="lxml-ctx",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "x-res-01",
- status = "todo",
+ ["category"]="mkiv",
+ ["comment"]="this is historic code that we keep around",
+ ["filename"]="meta-pdh",
+ ["loading"]="never",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "x-res-50",
- status = "todo",
+ ["category"]="mkiv",
+ ["comment"]="this is just a helper for generating files",
+ ["filename"]="mult-prm",
+ ["loading"]="never",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "x-set-11",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="page-run",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "x-set-12",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="spac-adj",
+ ["loading"]="never",
+ ["status"]="obsolete",
},
{
- category = "mkiv",
- filename = "x-udhr",
- status = "okay",
+ ["category"]="mkiv",
+ ["comment"]="replaced by a more modern variant",
+ ["filename"]="supp-vis",
+ ["loading"]="never",
+ ["status"]="obsolete",
},
{
- category = "mkiv",
- filename = "x-xtag",
- status = "todo",
+ ["category"]="mkiv",
+ ["filename"]="symb-run",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
},
- optional = {
+ ["patterns"]={
{
- category = "mkiv",
- filename = "bxml-apa",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="lang-af",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "colo-run",
- loading = "on demand",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="lang-agr",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- comment = "always needs some work",
- filename = "cont-new",
- loading = "runtime",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="lang-ala",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "font-run",
- loading = "on demand",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="lang-bg",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "lxml-ctx",
- status = "okay",
- comment = "this is an experimental module",
+ ["category"]="lua",
+ ["filename"]="lang-ca",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "meta-pdh",
- loading = "never",
- status = "okay",
- comment = "this is historic code that we keep around",
+ ["category"]="lua",
+ ["filename"]="lang-cs",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "mult-prm",
- loading = "never",
- status = "okay",
- comment = "this is just a helper for generating files",
+ ["category"]="lua",
+ ["filename"]="lang-cy",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "page-run",
- loading = "on demand",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="lang-da",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "spac-adj",
- loading = "never",
- status = "obsolete",
+ ["category"]="lua",
+ ["filename"]="lang-de",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "supp-vis",
- loading = "never",
- status = "obsolete",
- comment = "replaced by a more modern variant",
+ ["category"]="lua",
+ ["filename"]="lang-deo",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "symb-run",
- loading = "on demand",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="lang-es",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "mkiv",
- filename = "type-run",
- loading = "on demand",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="lang-et",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="lang-eu",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="lang-fi",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="lang-fr",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="lang-gb",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="lang-hr",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="lang-hu",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="lang-is",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="lang-it",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="lang-la",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lua",
+ ["filename"]="lang-lt",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
- },
- resources = {
{
- category = "ori",
- comment = "template for a user configuration file (with suffix mkiv)",
- filename = "cont-sys",
- loading = "runtime",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="lang-lv",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lmx",
- filename = "context-base",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="lang-ml",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lmx",
- filename = "context-characters",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="lang-mn",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lmx",
- filename = "context-debug",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="lang-nb",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lmx",
- filename = "context-error",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="lang-nl",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lmx",
- filename = "context-fonttest",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="lang-nn",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lmx",
- filename = "context-help",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="lang-pl",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "lmx",
- filename = "context-timing",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="lang-pt",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "pdf",
- filename = "context-version",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="lang-ro",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "png",
- filename = "context-version",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="lang-ru",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "css",
- comment = "layout specification for debug and error pages and web services",
- filename = "context",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="lang-sk",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "rme",
- comment = "readme file",
- filename = "context",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="lang-sl",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "ctx",
- comment = "example of a ctx file (for mtx-context)",
- filename = "core-ctx",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="lang-sr",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "css",
- filename = "export-example",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="lang-sv",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "rng",
- filename = "export-example",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="lang-th",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "tex",
- filename = "export-example",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="lang-tk",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "xml",
- comment = "this file is auto-generated by mtx-language",
- filename = "lang-all",
- status = "okay",
+ ["category"]="lua",
+ ["filename"]="lang-tr",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "xml",
- filename = "lpdf-pda",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="lang-uk",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "xml",
- filename = "lpdf-pdx",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="lang-us",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "rlx",
- filename = "rlxcache",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="lang-zh",
+ ["loading"]="on demand",
+ ["status"]="okay",
},
{
- category = "rlx",
- filename = "rlxtools",
- status = "todo",
+ ["category"]="lua",
+ ["filename"]="word-xx",
+ ["loading"]="on demand",
+ ["status"]="okay",
+ },
+ },
+ ["resources"]={
+ {
+ ["category"]="ori",
+ ["comment"]="template for a user configuration file (with suffix mkiv)",
+ ["filename"]="cont-sys",
+ ["loading"]="runtime",
+ ["status"]="okay",
+ },
+ {
+ ["category"]="lmx",
+ ["filename"]="context-base",
+ ["status"]="todo",
+ },
+ {
+ ["category"]="lmx",
+ ["filename"]="context-characters",
+ ["status"]="todo",
+ },
+ {
+ ["category"]="lmx",
+ ["filename"]="context-debug",
+ ["status"]="todo",
+ },
+ {
+ ["category"]="lmx",
+ ["filename"]="context-error",
+ ["status"]="todo",
},
{
- category = "ctx",
- filename = "s-mod",
- status = "todo",
+ ["category"]="lmx",
+ ["filename"]="context-fonttest",
+ ["status"]="todo",
},
{
- category = "pdf",
- filename = "status-files",
- status = "todo",
+ ["category"]="lmx",
+ ["filename"]="context-help",
+ ["status"]="todo",
},
{
- category = "pdf",
- filename = "status-lua",
- status = "todo",
+ ["category"]="lmx",
+ ["filename"]="context-timing",
+ ["status"]="todo",
},
{
- category = "tex",
- filename = "status-mkiv",
- status = "todo",
+ ["category"]="pdf",
+ ["filename"]="context-version",
+ ["status"]="todo",
},
{
- category = "xsd",
- filename = "x-chemml",
- status = "todo",
+ ["category"]="png",
+ ["filename"]="context-version",
+ ["status"]="todo",
},
{
- category = "xsd",
- filename = "x-contml",
- status = "todo",
+ ["category"]="css",
+ ["comment"]="layout specification for debug and error pages and web services",
+ ["filename"]="context",
+ ["status"]="okay",
},
{
- category = "rng",
- filename = "x-corres",
- status = "todo",
+ ["category"]="rme",
+ ["comment"]="readme file",
+ ["filename"]="context",
+ ["status"]="okay",
},
{
- category = "dtd",
- filename = "x-fig-00",
- status = "todo",
+ ["category"]="ctx",
+ ["comment"]="example of a ctx file (for mtx-context)",
+ ["filename"]="core-ctx",
+ ["status"]="okay",
},
{
- category = "xsd",
- filename = "x-fig-00",
- status = "todo",
+ ["category"]="css",
+ ["filename"]="export-example",
+ ["status"]="todo",
},
{
- category = "ctx",
- filename = "x-ldx",
- status = "todo",
+ ["category"]="rng",
+ ["filename"]="export-example",
+ ["status"]="todo",
},
{
- category = "xsd",
- filename = "x-mathml",
- status = "todo",
+ ["category"]="tex",
+ ["filename"]="export-example",
+ ["status"]="todo",
},
{
- category = "xsl",
- filename = "x-om2cml",
- status = "todo",
+ ["category"]="xml",
+ ["comment"]="this file is auto-generated by mtx-language",
+ ["filename"]="lang-all",
+ ["status"]="okay",
},
{
- category = "xsl",
- filename = "x-openmath",
- status = "todo",
+ ["category"]="xml",
+ ["filename"]="lpdf-pda",
+ ["status"]="todo",
},
{
- category = "ctx",
- comment = "runner for x-pfs-01",
- filename = "x-pfsense",
- status = "okay",
+ ["category"]="xml",
+ ["filename"]="lpdf-pdx",
+ ["status"]="todo",
},
{
- category = "xsd",
- filename = "x-physml",
- status = "todo",
+ ["category"]="rlx",
+ ["filename"]="rlxcache",
+ ["status"]="todo",
},
{
- category = "xsl",
- filename = "x-sm2om",
- status = "todo",
+ ["category"]="rlx",
+ ["filename"]="rlxtools",
+ ["status"]="todo",
+ },
+ {
+ ["category"]="ctx",
+ ["filename"]="s-mod",
+ ["status"]="todo",
+ },
+ {
+ ["category"]="pdf",
+ ["filename"]="status-files",
+ ["status"]="todo",
+ },
+ {
+ ["category"]="pdf",
+ ["filename"]="status-lua",
+ ["status"]="todo",
+ },
+ {
+ ["category"]="tex",
+ ["filename"]="status-mkiv",
+ ["status"]="todo",
+ },
+ },
+ ["todo"]={
+ {
+ ["category"]="lua",
+ ["filename"]="core-run",
+ ["status"]="idea",
},
},
}
diff --git a/tex/context/base/mkiv/strc-bkm.lua b/tex/context/base/mkiv/strc-bkm.lua
index a055a97a1..e30a91820 100644
--- a/tex/context/base/mkiv/strc-bkm.lua
+++ b/tex/context/base/mkiv/strc-bkm.lua
@@ -18,7 +18,6 @@ if not modules then modules = { } end modules ['strc-bkm'] = {
local next, type = next, type
local gsub, lower = string.gsub, string.lower
local concat = table.concat
-local utfvalues = utf.values
local settings_to_hash = utilities.parsers.settings_to_hash
local trace_bookmarks = false trackers.register("references.bookmarks", function(v) trace_bookmarks = v end)
@@ -113,11 +112,13 @@ end
function bookmarks.place()
if next(names) then
- local levels = { }
- local noflevels = 0
- local lastlevel = 1
- local nofblocks = #lists.sectionblocks -- always >= 1
+ local levels = { }
+ local noflevels = 0
+ local lastlevel = 1
+ local nofblocks = #lists.sectionblocks -- always >= 1
local showblocktitle = toboolean(numberspec.showblocktitle,true)
+-- local allsections = sections.collected
+ local allblocks = sections.sectionblockdata
for i=1,nofblocks do
local block = lists.sectionblocks[i]
local blockdone = nofblocks == 1
@@ -156,9 +157,9 @@ function bookmarks.place()
if not blockdone then
if showblocktitle then
-- add block entry
- local blockdata = sections.sectionblockdata[block]
- noflevels = noflevels + 1
+ local blockdata = allblocks[block]
local references = li.references
+ noflevels = noflevels + 1
levels[noflevels] = {
level = 1, -- toplevel
title = stripped(blockdata.bookmark ~= "" and blockdata.bookmark or block),
@@ -185,19 +186,29 @@ function bookmarks.place()
title = titledata.title or "?"
-- end
end
- if numbered[name] then
- local sectiondata = sections.collected[li.references.section]
- local numberdata = li.numberdata
- if sectiondata and numberdata then
- if not numberdata.hidenumber then
- -- we could typeset the number and convert it
- local number = sections.typesetnumber(sectiondata,"direct",numberspec,sectiondata)
- if number and #number > 0 then
- title = concat(number) .. " " .. title
- end
- end
- end
- end
+-- if numbered[name] then
+-- local sectiondata = allsections[li.references.section]
+-- if sectiondata then
+-- local numberdata = li.numberdata
+-- if numberdata and not numberdata.hidenumber then
+-- -- we could typeset the number and convert it
+-- local number = sections.typesetnumber(sectiondata,"direct",numberspec,sectiondata)
+-- if number and #number > 0 then
+-- title = concat(number) .. " " .. title
+-- end
+-- end
+-- end
+-- end
+if numbered[name] then
+ local numberdata = li.numberdata
+ if numberdata and not numberdata.hidenumber then
+ -- we could typeset the number and convert it
+ local number = sections.typesetnumber(numberdata,"direct",numberspec,numberdata)
+ if number and #number > 0 then
+ title = concat(number) .. " " .. title
+ end
+ end
+end
noflevels = noflevels + 1
local references = li.references
levels[noflevels] = {
diff --git a/tex/context/base/mkiv/strc-con.mkvi b/tex/context/base/mkiv/strc-con.mkvi
index 25e26bf73..18ce17355 100644
--- a/tex/context/base/mkiv/strc-con.mkvi
+++ b/tex/context/base/mkiv/strc-con.mkvi
@@ -692,8 +692,7 @@
\edef\p_strc_constructions_inbetween{\constructionparameter\c!inbetween}%
\ifx\p_strc_constructions_inbetween\empty \else
\p_strc_constructions_inbetween
- \par
- \nobreak
+ \directcheckedvspacing\v!samepage
\fi
\useconstructionstyleandcolor\c!style\c!color
\ignorespaces
@@ -914,6 +913,9 @@
\global\let\currentconstructionexpansion\v!no
\fi
%
+ \ifx\currentconstructionreferenceprefix\empty
+ \global\let\currentconstructionreferenceprefix\referenceprefix
+ \fi
\ifx\currentconstructionexpansion\s!xml
\xmlstartraw
\xdef\currentconstructiontitle {\constructionparameter\c!title}%
@@ -969,10 +971,10 @@
catcodes \catcodetable
}
references {
- internal \nextinternalreference
- order \nextinternalorderreference
+ internal \locationcount
+ order \locationorder
reference {\currentconstructionreference}
- prefix {\referenceprefix}
+ prefix {\currentconstructionreferenceprefix}
% block {\currentsectionblock}
% section structures.sections.currentid(),
}
@@ -1014,7 +1016,7 @@
\clf_setinternalreference
prefix {\referenceprefix}%
reference {\currentconstructionreference}%
- internal \nextinternalreference
+ internal \locationcount
view {\interactionparameter\c!focus}%
\relax
\normalexpanded{%
diff --git a/tex/context/base/mkiv/strc-def.mkiv b/tex/context/base/mkiv/strc-def.mkiv
index 962c46b48..b2e86c140 100644
--- a/tex/context/base/mkiv/strc-def.mkiv
+++ b/tex/context/base/mkiv/strc-def.mkiv
@@ -193,6 +193,7 @@
\c!header=,
\c!style=\tfc,
\c!distance=.75\emwidth,
+ \c!textdistance=\emwidth plus \emwidth minus .25\emwidth,
\c!before={\blank[2*\v!big]},
\c!after={\blank[2*\v!big]}]
@@ -202,6 +203,7 @@
%\c!indentnext=\v!no,
\c!style=\tfa,
\c!distance=.75\emwidth,
+ \c!textdistance=\emwidth plus \emwidth minus .25\emwidth,
\c!before={\blank[2*\v!big]},
\c!after=\blank]
diff --git a/tex/context/base/mkiv/strc-des.mkvi b/tex/context/base/mkiv/strc-des.mkvi
index 4376d9cdc..76f878f5f 100644
--- a/tex/context/base/mkiv/strc-des.mkvi
+++ b/tex/context/base/mkiv/strc-des.mkvi
@@ -21,11 +21,11 @@
\let\setupdescriptions\setupdescription
-% \setupdescriptions % check with old
+% \setupdescription % check with old
% [\c!alternative=\descriptionparameter\c!location,
% \c!location=\v!left]
-\setupdescriptions % check with old
+\setupdescription % check with old
[\c!alternative=\v!left,
\c!headstyle=\v!bold,
\c!titlestyle=\v!bold,
diff --git a/tex/context/base/mkiv/strc-doc.lua b/tex/context/base/mkiv/strc-doc.lua
index 885e2de0b..57fff5a21 100644
--- a/tex/context/base/mkiv/strc-doc.lua
+++ b/tex/context/base/mkiv/strc-doc.lua
@@ -16,7 +16,7 @@ if not modules then modules = { } end modules ['strc-doc'] = {
-- in lists however zero's are ignored, so there numbersegments=2:4 gives result
local next, type, tonumber, select = next, type, tonumber, select
-local format, gsub, find, gmatch, match = string.format, string.gsub, string.find, string.gmatch, string.match
+local find, match = string.find, string.match
local concat, fastcopy, insert, remove = table.concat, table.fastcopy, table.insert, table.remove
local max, min = math.max, math.min
local allocate, mark, accesstable = utilities.storage.allocate, utilities.storage.mark, utilities.tables.accesstable
@@ -37,7 +37,6 @@ local v_auto = variables.auto
local v_strict = variables.strict
local v_all = variables.all
local v_positive = variables.positive
-local v_by = variables.by
local trace_sectioning = false trackers.register("structures.sectioning", function(v) trace_sectioning = v end)
local trace_detail = false trackers.register("structures.detail", function(v) trace_detail = v end)
@@ -64,8 +63,6 @@ local strippedprocessor = processors.stripped
local convertnumber = converters.convert
-local a_internal = attributes.private('internal')
-
local ctx_convertnumber = context.convertnumber
local ctx_sprint = context.sprint
local ctx_finalizeauto = context.finalizeautostructurelevel
@@ -327,7 +324,7 @@ function sections.setentry(given)
local mappedlevel = levelmap[givenname]
local newdepth = tonumber(mappedlevel or (olddepth > 0 and olddepth) or 1) -- hm, levelmap only works for section-*
local resetset = directives and directives.resetset or ""
- -- local resetter = sets.getall("structure:resets",data.block,resetset)
+ -- local resetter = sets.getall("structure:resets",data.block,resetset)
-- a trick to permit userdata to overload title, ownnumber and reference
-- normally these are passed as argument but nowadays we provide several
-- interfaces (we need this because we want to be compatible)
@@ -414,16 +411,17 @@ function sections.setentry(given)
v[2](k)
end
end
- local n = { }
- for i=1,newdepth do
- n[i] = numbers[i]
- end
- numberdata.numbers = n
+-- local n = { }
+-- for i=1,newdepth do
+-- n[i] = numbers[i]
+-- end
+-- numberdata.numbers = n
+ numberdata.numbers = { unpack(numbers,1,newdepth) }
if not numberdata.block then
numberdata.block = getcurrentblock() -- also in references
end
if #ownnumbers > 0 then
- numberdata.ownnumbers = fastcopy(ownnumbers)
+ numberdata.ownnumbers = fastcopy(ownnumbers) -- { unpack(ownnumbers) }
end
if trace_detail then
report_structure("name %a, numbers % a, own numbers % a",givenname,numberdata.numbers,numberdata.ownnumbers)
diff --git a/tex/context/base/mkiv/strc-doc.mkiv b/tex/context/base/mkiv/strc-doc.mkiv
index c453f199e..5f40521fa 100644
--- a/tex/context/base/mkiv/strc-doc.mkiv
+++ b/tex/context/base/mkiv/strc-doc.mkiv
@@ -23,10 +23,10 @@
{\clf_setinternalreference
prefix {\currentstructurereferenceprefix}%
reference {\currentstructurereference}
- internal \nextinternalreference
+ internal \locationcount
view {\interactionparameter\c!focus}%
\relax
\xdef\currentstructureattribute {\the\lastdestinationattribute}%
- \xdef\currentstructuresynchronize{\strc_lists_inject_enhance{#1}{\nextinternalreference}}}
+ \xdef\currentstructuresynchronize{\strc_lists_inject_enhance{#1}{\the\locationcount}}}
\protect \endinput
diff --git a/tex/context/base/mkiv/strc-enu.mkvi b/tex/context/base/mkiv/strc-enu.mkvi
index 832bdaf82..8eff706bb 100644
--- a/tex/context/base/mkiv/strc-enu.mkvi
+++ b/tex/context/base/mkiv/strc-enu.mkvi
@@ -79,7 +79,7 @@
\let\setupenumerations\setupenumeration
-\setupenumerations % check with old
+\setupenumeration % check with old
[\c!alternative=\v!top,
\c!headstyle=\v!bold,
\c!titlestyle=\v!bold,
@@ -366,7 +366,7 @@
\strc_enumerations_full_number_yes
\edef\p_coupling{\constructionparameter\c!coupling}%
\ifx\p_coupling\empty \else
- \symbolreference[order(construction:\p_coupling:\nextinternalorderreference)]%
+ \symbolreference[order(construction:\p_coupling:\the\locationorder)]%
\fi
\fi}
diff --git a/tex/context/base/mkiv/strc-flt.mkvi b/tex/context/base/mkiv/strc-flt.mkvi
index e83e036fa..3ad2e86fc 100644
--- a/tex/context/base/mkiv/strc-flt.mkvi
+++ b/tex/context/base/mkiv/strc-flt.mkvi
@@ -126,6 +126,7 @@
\c!strut=\v!no,
\c!radius=.5\bodyfontsize,
\c!corner=\v!rectangular,
+ \c!grid=,
%\c!background=,
%\c!backgroundcolor=,
\c!backgroundoffset=\!!zeropoint,
@@ -153,12 +154,13 @@
\c!outermargin=\zeropoint, % idem
\c!leftmargindistance=\zeropoint,
\c!rightmargindistance=\floatparameter\c!leftmargindistance,
- \c!step=\v!big, % the flish side float step (big=line, medium=halfline, small=quarterline, depth=halfline with normaldepth)
+ \c!step=\v!big, % the flush side float step (big=line, medium=halfline, small=quarterline, depth=halfline with normaldepth)
\c!ntop=2,
\c!nbottom=0,
\c!nlines=4, % used?
\c!topoffset=\zeropoint,
\c!bottomoffset=\zeropoint,
+ \c!freeregion=\v!yes,
%\c!local=,
%\c!bottombefore=, % e.g. \vfill
%\c!bottomafter=,
@@ -584,9 +586,11 @@
\edef\savedfloatlocation{\floatcaptionparameter\c!location}%
\setexpandedfloatcaptionparameter\c!topoffset {\floatparameter\c!topoffset}%
\setexpandedfloatcaptionparameter\c!bottomoffset{\floatparameter\c!bottomoffset}%
+ \setexpandedfloatcaptionparameter\c!freeregion {\floatparameter\c!freeregion}%
\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}%
+ \setexpandedfloatparameter\c!freeregion {\floatcaptionparameter\c!freeregion}%
\def\m_strc_floats_saved_userdata{#2}%
\edef\floatlocation{\floatcaptionparameter\c!location}%
\setfloatcaptionparameter\c!location{\savedfloatlocation}% not expanded
@@ -744,7 +748,7 @@
\global\setfalse\c_strc_floats_par_float
\else
\doifelsecommon\floatlocation\flushfloatslist
- {\global\settrue \c_strc_floats_par_float}
+ {\global\settrue \c_strc_floats_par_float}%
{\global\setfalse\c_strc_floats_par_float}%
\fi
\global\d_page_sides_shift \zeropoint
@@ -779,21 +783,26 @@
\global\advance\d_page_sides_bottomskip\floatparameter\c!bottomoffset
\else
\processallactionsinset
- [\floatlocation]
+ [\floatlocation]%
[ 90=>\global\c_strc_floats_rotation\commalistelement\relax,%
180=>\global\c_strc_floats_rotation\commalistelement\relax,%
270=>\global\c_strc_floats_rotation\commalistelement\relax]%
\fi
\doifelseinset\v!nonumber\floatlocation
- {\global\nofloatnumbertrue}
+ {\global\nofloatnumbertrue}%
{\doifelse{\floatcaptionparameter\c!number}\v!yes
- {\global\nofloatnumberfalse}
+ {\global\nofloatnumberfalse}%
{\global\nofloatnumbertrue}}%
\doifelseinset\v!none\floatlocation
- {\global\nofloatcaptiontrue}
+ {\global\nofloatcaptiontrue}%
{\global\nofloatcaptionfalse}%
\doif{\floatcaptionparameter\c!number}\v!none % new
{\global\nofloatcaptiontrue}%
+ \doifinset\v!effective\floatlocation
+ {\letfloatparameter \c!leftmargin \effectiveleftskip
+ \letfloatparameter \c!rightmargin\effectiverightskip
+ \letfloatcaptionparameter\c!leftmargin \effectiveleftskip
+ \letfloatcaptionparameter\c!rightmargin\effectiverightskip}%
\ifemptyfloatcaption \ifnofloatnumber
\global\nofloatcaptiontrue
\fi \fi}
@@ -807,6 +816,8 @@
\else
\doifelseinset\v!local\floatlocation\settrue\setfalse\c_page_floats_center_box_local
\fi
+ \doifelse{\floatparameter\c!freeregion}\v!yes
+ \settrue\setfalse\c_strc_floats_mark_as_free
\doifnotcommon{\v!always,\v!here,\v!force}\floatlocation % ! ! ! ! ! !
{\setfalse\c_page_floats_center_box_global
\setfalse\c_page_floats_center_box_local}}
@@ -1173,8 +1184,8 @@
\strc_floats_calculate_skip\d_page_sides_topskip {\rootfloatparameter\c!sidespacebefore}%
\strc_floats_calculate_skip\d_page_sides_bottomskip{\rootfloatparameter\c!sidespaceafter }%
\global\d_strc_floats_margin \rootfloatparameter\c!margin
- \global\d_page_sided_leftshift \floatparameter \c!leftmargindistance
- \global\d_page_sided_rightshift \floatparameter \c!rightmargindistance
+ \global\d_page_sides_leftshift \floatparameter \c!leftmargindistance
+ \global\d_page_sides_rightshift \floatparameter \c!rightmargindistance
\global\c_page_floats_n_of_top \rootfloatparameter\c!ntop
\global\c_page_floats_n_of_bottom\rootfloatparameter\c!nbottom
\endgroup}
@@ -1309,20 +1320,66 @@
% minwidth=fit,width=max : no overshoot, as wide as graphic
+% keep these as reference:
+%
+% \def\strc_floats_align_content_indeed
+% {\alignstrutmode\zerocount
+% \doifnotcommon{\floatcaptionparameter\c!location}{\v!outermargin,\v!innermargin,\v!leftmargin,\v!rightmargin}
+% {\shiftalignedline
+% {\floatparameter\c!leftmargin }{\floatparameter\c!rightmargin}%
+% {\floatparameter\c!innermargin}{\floatparameter\c!outermargin}}%
+% \alignedline{\floatparameter\c!location}\v!middle}
+%
+% \def\strc_floats_align_caption_indeed
+% {\alignstrutmode\zerocount
+% \shiftalignedline
+% {\floatcaptionparameter\c!leftmargin }{\floatcaptionparameter\c!rightmargin}%
+% {\floatcaptionparameter\c!innermargin}{\floatcaptionparameter\c!outermargin}%
+% \alignedline{\floatparameter\c!location}\v!middle}
+%
+% Test case:
+%
+% \setupfloats[location=left]
+% \setupfloatcaption[width=max]
+%
+% \startfloatcombination
+% \placefigure{}{}
+% \placefigure{}{}
+% \stopfloatcombination
+
+%D In a floatcombination we ignore the margins .. if that is ever needed we need another
+%D state (instead of local).
+
+\def\strc_floats_align_indeed
+ {\alignedline{\floatparameter\c!location}\v!middle}
+
+\def\strc_floats_shift_indeed#1%
+ {\shiftalignedline{#1\c!leftmargin}{#1\c!rightmargin}{#1\c!innermargin}{#1\c!outermargin}}
+
\def\strc_floats_align_content_indeed
{\alignstrutmode\zerocount
- \doifnotcommon{\floatcaptionparameter\c!location}{\v!outermargin,\v!innermargin,\v!leftmargin,\v!rightmargin}
- {\shiftalignedline
- {\floatparameter\c!leftmargin }{\floatparameter\c!rightmargin}%
- {\floatparameter\c!innermargin}{\floatparameter\c!outermargin}}%
- \alignedline{\floatparameter\c!location}\v!middle}
+ \ifx\forcedfloatmethod\v!local \else
+ \doifnotcommon{\floatcaptionparameter\c!location}{\v!outermargin,\v!innermargin,\v!leftmargin,\v!rightmargin}
+ {\strc_floats_shift_indeed\floatparameter}%
+ \expandafter\strc_floats_align_indeed
+ \fi}
\def\strc_floats_align_caption_indeed
{\alignstrutmode\zerocount
- \shiftalignedline
- {\floatcaptionparameter\c!leftmargin }{\floatcaptionparameter\c!rightmargin}%
- {\floatcaptionparameter\c!innermargin}{\floatcaptionparameter\c!outermargin}%
- \alignedline{\floatparameter\c!location}\v!middle}
+ \ifx\forcedfloatmethod\v!local
+ \expandafter\strc_floats_align_indeed_local
+ \else
+ \strc_floats_shift_indeed\floatcaptionparameter
+ \expandafter\strc_floats_align_indeed
+ \fi}
+
+% \def\strc_floats_align_indeed_local#1%
+% {\begingroup
+% \hsize\wd\floatbox
+% \strc_floats_align_indeed{#1}%
+% \endgroup}
+
+\let\strc_floats_align_indeed_local\firstofoneargument
\newdimen\d_strc_floats_content
\newdimen\d_strc_float_temp_height
@@ -1331,6 +1388,8 @@
\def\captionminwidth {15\bodyfontsize}
\def\captionovershoot{2\emwidth}
+\let\strc_floats_mark_pag_as_free\relax
+
\def\strc_floats_set_page_variant
{\bgroup
\strc_floats_set_local_hsize
@@ -1369,10 +1428,13 @@
\fi
\ifcase\c_strc_floats_rotation
\doifnotinset\v!margin\floatlocation % brr, really needed! see wm
- {\postcenterfloatbox\d_strc_floats_content}%
+ {\postcenterfloatbox\d_strc_floats_content
+ \strc_floats_mark_pag_as_free}%
+ % mark as free not done here
\else
\global\setbox\floatbox\vpack
{\rotate[\c!rotation=\number\c_strc_floats_rotation]{\box\floatbox}}%
+ \strc_floats_mark_pag_as_free
\fi
\egroup}
@@ -1618,7 +1680,7 @@
{\strc_floats_build_box_next_right_margin_indeed\rightmargindistance}
\def\strc_floats_build_box_next_left_margin
- {\strc_floats_build_box_next_left_margin_indeed \leftmargindistance }
+ {\strc_floats_build_box_next_left_margin_indeed \leftmargindistance}
\def\strc_floats_build_box_next_outer_margin
{\doifelserightpagefloat
@@ -1835,6 +1897,8 @@
\unexpanded\def\installfloatboxbuilder#1#2{\setvalue{\??floatbuilder#1}{#2}}
+\let\strc_floats_mark_box_as_free\relax
+
\def\strc_floats_build_box
{\global\setbox\floatbox\vbox % pack ? probably not
{\strc_floats_set_local_hsize
@@ -1865,17 +1929,28 @@
\v!outer=>\doifelserightpagefloat{\let\next\strc_floats_relocate_caption_right}{\let\next\strc_floats_relocate_caption_left }]%
\next}
-\installfloatboxbuilder \v!none \strc_floats_build_box_default
-\installfloatboxbuilder \s!default \strc_floats_build_box_default
-\installfloatboxbuilder \v!high \strc_floats_build_box_high
-\installfloatboxbuilder \v!low \strc_floats_build_box_low
-\installfloatboxbuilder \v!middle \strc_floats_build_box_middle
+\installfloatboxbuilder \v!none \strc_floats_build_box_default
+\installfloatboxbuilder \s!default \strc_floats_build_box_default
+\installfloatboxbuilder \v!high \strc_floats_build_box_high
+\installfloatboxbuilder \v!low \strc_floats_build_box_low
+\installfloatboxbuilder \v!middle \strc_floats_build_box_middle
+
+\installfloatboxbuilder \v!rightmargin \strc_floats_build_box_side % added 2016-08-23
+\installfloatboxbuilder \v!leftmargin \strc_floats_build_box_side % added 2016-08-23
+\installfloatboxbuilder \v!innermargin \strc_floats_build_box_side % added 2016-08-23
+\installfloatboxbuilder \v!outermargin \strc_floats_build_box_side % added 2016-08-23
+
+\installfloatboxbuilder \v!left \strc_floats_build_box_side
+\installfloatboxbuilder \v!right \strc_floats_build_box_side
+\installfloatboxbuilder \v!inner \strc_floats_build_box_side % added 2016-08-23
+\installfloatboxbuilder \v!outer \strc_floats_build_box_side % added 2016-08-23
-\installfloatboxbuilder \v!left \strc_floats_build_box_side
-\installfloatboxbuilder \v!right \strc_floats_build_box_side
+\installfloatboxbuilder \v!lefthanging \strc_floats_build_box_side % added 2016-08-23
+\installfloatboxbuilder \v!righthanging \strc_floats_build_box_side % added 2016-08-23
+\installfloatboxbuilder \v!hang \strc_floats_build_box_side % added 2016-08-23
-\installfloatboxbuilder \v!top \strc_floats_build_box_top
-\installfloatboxbuilder \v!bottom \strc_floats_build_box_bottom
+\installfloatboxbuilder \v!top \strc_floats_build_box_top
+\installfloatboxbuilder \v!bottom \strc_floats_build_box_bottom
% \setuplayout[grid=yes] \showgrid \setupcaptions[style=smallbodyfont,location=grid,inbetween=]
%
@@ -1885,7 +1960,7 @@
% test \placefigure{} {\externalfigure[cow.pdf][frame=on,grid=depth]} test \page
% test \placefigure{\input zapf\relax}{\externalfigure[cow.pdf][frame=on,grid=depth]} test \page
% \stoptext
-
+
% This might move to page-flt:
\newif\ifpostponecolumnfloats \postponecolumnfloatsfalse % don't change
@@ -1968,11 +2043,12 @@
\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
+ \setbox\b_strc_floats_caption\vbox
{\forgetall % needed?
\hsize\wd\b_strc_floats_content
\strc_floats_make_complete_caption}%
\else
+ % maybe we should listen to the align option here (now side floats need the max option
\setbox\b_strc_floats_caption\hpack to \wd\b_strc_floats_content
{\hss\hbox{\strc_floats_make_complete_caption}\hss}%
\fi}
@@ -2086,7 +2162,7 @@
\let\floatlabel \empty % set by lua
\let\floatcolumn \empty % set by lua
\let\floatrow \empty % set by lua
-\let\forcedfloatmethod\empty % set by lua
+\let\forcedfloatmethod\empty % set by lua and floatcombinations
\def\setfloatmethodvariables#1% \floatmethod \floatlabel \floatrow \floatcolumn
{\clf_analysefloatmethod{#1}}
diff --git a/tex/context/base/mkiv/strc-itm.mkvi b/tex/context/base/mkiv/strc-itm.mkvi
index 48c8e1a30..a28193415 100644
--- a/tex/context/base/mkiv/strc-itm.mkvi
+++ b/tex/context/base/mkiv/strc-itm.mkvi
@@ -23,6 +23,10 @@
%D no surprise that I had that cd running several times when updating this
%D code. One of the highlights of 2011.
+%D This module needs to be rewritten but that is tricky with respect to
+%D compatibilitity. Basically each major variant (regular, text, columns,
+%D horizontal, etc) needs to be on its own.
+
% todo: check breaks
% todo: check grouping
% todo: fixedconversion
@@ -121,6 +125,11 @@
% \noitem \startitemize[a] \item Item 2.a. \item Item 2.b. \stopitemize
% \stopitemize
%
+% \startitemize[n,repeat][width=0pt]
+% \noitem \startitemize[a][width=2em] \item Item 1.a. \item Item 1.b. \stopitemize
+% \noitem \startitemize[a][width=2em] \item Item 2.a. \item Item 2.b. \stopitemize
+% \stopitemize
+%
% \startbuffer
% \item
% \startitemize[n]
@@ -265,7 +274,7 @@
catcodes \catcodetable
}%
references {%
- internal \nextinternalreference % no: this spoils references
+ internal \locationcount % no: this spoils references
% block {\currentsectionblock}%
view {\interactionparameter\c!focus}%
prefix {\referenceprefix}%
@@ -384,7 +393,7 @@
\def\strc_itemgroups_process_option#option%
{\edef\itemgroupconstantvalue{#option}%
\ifx\itemgroupconstantvalue\empty\else
- \splitstring\itemgroupconstantvalue\at*\to\itemgroupfirst\and\itemgroupsecond
+ \splitatasterisk\itemgroupconstantvalue\itemgroupfirst\itemgroupsecond
\ifx\itemgroupsecond\empty
\let\itemgroupsecond\itemgroupfirst
\let\itemgroupfirst\!!plusone
@@ -401,70 +410,70 @@
\settrue\c_strc_itemgroups_pack
\fi}
-\setvalue{\??itemgroupkeyword\!!zerocount}{} % ignore 0
-\setvalue{\??itemgroupkeyword\v!packed }{\strc_itemgroups_process_set_option_pack}
-\setvalue{\??itemgroupkeyword\v!intro }{\settrue\c_strc_itemgroups_intro} % here? not set to false
-\setvalue{\??itemgroupkeyword\v!autointro}{\settrue\c_strc_itemgroups_auto_intro}
-\setvalue{\??itemgroupkeyword\v!broad }{\ifx\itemgroupfirst\empty
- \let\itemgroupfirst\!!plusone
- \fi
- \letitemgroupparameter\c!factor\itemgroupfirst}
-\setvalue{\??itemgroupkeyword\v!text }{\settrue\c_strc_itemgroups_text
- \settrue\c_strc_itemgroups_inline
- \settrue\c_strc_itemgroups_joined
- \strc_itemgroups_process_set_option_pack}
-\setvalue{\??itemgroupkeyword\v!before }{\settrue\c_strc_itemgroups_before}
-\setvalue{\??itemgroupkeyword\v!after }{\settrue\c_strc_itemgroups_after}
-\setvalue{\??itemgroupkeyword\v!nowhite }{\settrue\c_strc_itemgroups_nowhite}
-\setvalue{\??itemgroupkeyword\v!margin }{\setitemgroupparameter\c!width{-2em}} % signal
-\setvalue{\??itemgroupkeyword\v!inmargin }{\setitemgroupparameter\c!width{-2em}} % signal
-\setvalue{\??itemgroupkeyword\v!atmargin }{\ifnum\c_strc_itemgroups_nesting>\plusone
- \setitemgroupparameter\c!width{0em}%
- \fi} % signal
-\setvalue{\??itemgroupkeyword\v!intext }{\settrue\c_strc_itemgroups_inline}
-\setvalue{\??itemgroupkeyword\v!loose }{\setfalse\c_strc_itemgroups_optimize}
-\setvalue{\??itemgroupkeyword\v!fit }{\settrue\c_strc_itemgroups_fitting}
-\setvalue{\??itemgroupkeyword\v!nofit }{\setfalse\c_strc_itemgroups_fitting}
-\setvalue{\??itemgroupkeyword\v!paragraph}{\settrue\c_strc_itemgroups_paragraph
- \strc_itemgroups_process_set_option_pack}
-\setvalue{\??itemgroupkeyword\v!joinedup }{\settrue\c_strc_itemgroups_joined
- \strc_itemgroups_process_set_option_pack}
-\setvalue{\??itemgroupkeyword\v!serried }{\edef\itemgroupfirst{-\ifx\itemgroupfirst\empty1\else\itemgroupfirst\fi}%
- \letitemgroupparameter\c!factor\itemgroupfirst}
-\setvalue{\??itemgroupkeyword\v!stopper }{\letitemgroupparameter\c!placestopper\v!yes} % keep {}
-\setvalue{\??itemgroupkeyword\v!unpacked }{\setfalse\c_strc_itemgroups_pack}
-\setvalue{\??itemgroupkeyword\v!repeat }{\settrue\c_strc_itemgroups_repeat}
-\setvalue{\??itemgroupkeyword\v!norepeat }{\setfalse\c_strc_itemgroups_repeat}
-\setvalue{\??itemgroupkeyword\v!reverse }{\settrue\c_strc_itemgroups_reverse}
-\setvalue{\??itemgroupkeyword\v!columns }{\settrue\c_strc_itemgroups_columns}
-\setvalue{\??itemgroupkeyword\v!one }{\letitemgroupparameter\c!n\plusone}
-\setvalue{\??itemgroupkeyword\v!two }{\letitemgroupparameter\c!n\plustwo}
-\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!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}
+\setvalue{\??itemgroupkeyword\!!zerocount }{} % ignore 0
+\setvalue{\??itemgroupkeyword\v!packed }{\strc_itemgroups_process_set_option_pack}
+\setvalue{\??itemgroupkeyword\v!intro }{\settrue\c_strc_itemgroups_intro} % here? not set to false
+\setvalue{\??itemgroupkeyword\v!autointro }{\settrue\c_strc_itemgroups_auto_intro}
+\setvalue{\??itemgroupkeyword\v!broad }{\ifx\itemgroupfirst\empty
+ \let\itemgroupfirst\!!plusone
+ \fi
+ \letitemgroupparameter\c!factor\itemgroupfirst}
+\setvalue{\??itemgroupkeyword\v!text }{\settrue\c_strc_itemgroups_text
+ \settrue\c_strc_itemgroups_inline
+ \settrue\c_strc_itemgroups_joined
+ \strc_itemgroups_process_set_option_pack}
+\setvalue{\??itemgroupkeyword\v!before }{\settrue\c_strc_itemgroups_before}
+\setvalue{\??itemgroupkeyword\v!after }{\settrue\c_strc_itemgroups_after}
+\setvalue{\??itemgroupkeyword\v!nowhite }{\settrue\c_strc_itemgroups_nowhite}
+\setvalue{\??itemgroupkeyword\v!margin }{\setitemgroupparameter\c!width{-2em}} % signal
+\setvalue{\??itemgroupkeyword\v!inmargin }{\setitemgroupparameter\c!width{-2em}} % signal
+\setvalue{\??itemgroupkeyword\v!atmargin }{\ifnum\c_strc_itemgroups_nesting>\plusone
+ \setitemgroupparameter\c!width{0em}%
+ \fi} % signal
+\setvalue{\??itemgroupkeyword\v!intext }{\settrue\c_strc_itemgroups_inline}
+\setvalue{\??itemgroupkeyword\v!loose }{\setfalse\c_strc_itemgroups_optimize}
+\setvalue{\??itemgroupkeyword\v!fit }{\settrue\c_strc_itemgroups_fitting}
+\setvalue{\??itemgroupkeyword\v!nofit }{\setfalse\c_strc_itemgroups_fitting}
+\setvalue{\??itemgroupkeyword\v!paragraph }{\settrue\c_strc_itemgroups_paragraph
+ \strc_itemgroups_process_set_option_pack}
+\setvalue{\??itemgroupkeyword\v!joinedup }{\settrue\c_strc_itemgroups_joined
+ \strc_itemgroups_process_set_option_pack}
+\setvalue{\??itemgroupkeyword\v!notjoinedup}{\setfalse\c_strc_itemgroups_joined}
+\setvalue{\??itemgroupkeyword\v!serried }{\edef\itemgroupfirst{-\ifx\itemgroupfirst\empty1\else\itemgroupfirst\fi}%
+ \letitemgroupparameter\c!factor\itemgroupfirst}
+\setvalue{\??itemgroupkeyword\v!stopper }{\letitemgroupparameter\c!placestopper\v!yes} % keep {}
+\setvalue{\??itemgroupkeyword\v!repeat }{\settrue\c_strc_itemgroups_repeat}
+\setvalue{\??itemgroupkeyword\v!norepeat }{\setfalse\c_strc_itemgroups_repeat}
+\setvalue{\??itemgroupkeyword\v!reverse }{\settrue\c_strc_itemgroups_reverse}
+\setvalue{\??itemgroupkeyword\v!columns }{\settrue\c_strc_itemgroups_columns}
+\setvalue{\??itemgroupkeyword\v!one }{\letitemgroupparameter\c!n\plusone}
+\setvalue{\??itemgroupkeyword\v!two }{\letitemgroupparameter\c!n\plustwo}
+\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!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
@@ -1118,6 +1127,7 @@
\dostarttagged\t!itemcontent\empty
\strut
\nobreak % else problems with intext items
+ \seteffectivehsize % NEW !
\hskip\d_strc_itemgroups_signal % concat
\itemgroupparameter\c!command}
@@ -1183,8 +1193,13 @@
\unexpanded\def\strc_itemgroups_start_do_item
{\startitemgroupitem}
-\unexpanded\def\strc_itemgroups_start_no_item % ?
- {\startitemgroupitem}
+\unexpanded\def\strc_itemgroups_start_no_item
+ {\let\currentitemreference\empty
+ \strc_itemgroups_increment_item_counter
+ %\advance\c_strc_itemgroups_n_of_items\plusone
+ \setbox\b_strc_itemgroups\emptyhbox
+ \strc_itemgroups_check_for_repeated
+ \ignorespaces}
\unexpanded\def\strc_itemgroups_start_button[#destination]%
{\edef\m_strc_itemgroups_destination{#destination}%
@@ -1653,7 +1668,14 @@
\c_strc_itemgroups_collected_done \zerocount
\c_strc_itemgroups_collected_current\zerocount
\ifnum\c_strc_itemgroups_collected_stored>\zerocount
- \doubleexpandafter\strc_itemgroups_collected_flush
+ \ifconditional\c_strc_itemgroups_horizontal
+ \strc_itemgroups_before_command
+ \setfalse\c_strc_itemgroups_first
+ \strc_itemgroups_collected_flush
+ %\strc_itemgroups_after_command % triggered elsewhere
+ \else
+ \strc_itemgroups_collected_flush
+ \fi
\fi
\fi}
diff --git a/tex/context/base/mkiv/strc-lev.lua b/tex/context/base/mkiv/strc-lev.lua
index ec5dcf6f0..c06e209f6 100644
--- a/tex/context/base/mkiv/strc-lev.lua
+++ b/tex/context/base/mkiv/strc-lev.lua
@@ -16,7 +16,6 @@ local sections = structures.sections
local implement = interfaces.implement
local v_default = interfaces.variables.default
-local v_auto = interfaces.variables.auto
sections.levels = sections.levels or { }
@@ -36,6 +35,11 @@ local function definesectionlevels(category,list)
levels[category] = list
end
+local ctx_nostarthead = context.nostarthead
+local ctx_dostarthead = context.dostarthead
+local ctx_nostophead = context.nostophead
+local ctx_dostophead = context.dostophead
+
local function startsectionlevel(n,category,current)
category = category ~= "" and category or v_default
local lc = levels[category]
@@ -48,13 +52,13 @@ local function startsectionlevel(n,category,current)
end
level = level + 1
if not lc or level > #lc then
- context.nostarthead { f_two_colon(category,level) }
+ ctx_nostarthead { f_two_colon(category,level) }
else
local lcl = lc[level]
if n > #lcl then
n = #lcl
end
- context.dostarthead { lc[level][n] }
+ ctx_dostarthead { lc[level][n] }
end
insert(categories,{ category, n })
end
@@ -66,9 +70,9 @@ local function stopsectionlevel()
local n = top[2]
local lc = levels[category]
if not lc or level > #lc then
- context.nostophead { f_two_colon(category,level) }
+ ctx_nostophead { f_two_colon(category,level) }
else
- context.dostophead { lc[level][n] }
+ ctx_dostophead { lc[level][n] }
end
level = level - 1
else
diff --git a/tex/context/base/mkiv/strc-lev.mkvi b/tex/context/base/mkiv/strc-lev.mkvi
index ac106f999..6e08e7c07 100644
--- a/tex/context/base/mkiv/strc-lev.mkvi
+++ b/tex/context/base/mkiv/strc-lev.mkvi
@@ -37,7 +37,7 @@
\unexpanded\def\strc_levels_start_section[#category]%
{\doifelseassignment{#category}%
{\clf_startsectionlevel\plusone{\v!default}{\currentnamedsection}[#category]}%
- {\clf_startsectionlevel\plusone {}{\currentnamedsection}{#category}}}
+ {\clf_startsectionlevel\plusone {#category}{\currentnamedsection}}}
\unexpanded\def\strc_levels_start_subject[#category]%
{\doifelseassignment{#category}%
diff --git a/tex/context/base/mkiv/strc-lst.lua b/tex/context/base/mkiv/strc-lst.lua
index 0f5d8e0d7..be8e07112 100644
--- a/tex/context/base/mkiv/strc-lst.lua
+++ b/tex/context/base/mkiv/strc-lst.lua
@@ -83,12 +83,10 @@ local variables = interfaces.variables
local v_all = variables.all
local v_reference = variables.reference
local v_title = variables.title
-local v_number = variables.reference
local v_command = variables.command
local v_text = variables.text
local v_current = variables.current
local v_previous = variables.previous
-local v_next = variables.next
local v_intro = variables.intro
local v_here = variables.here
local v_component = variables.component
diff --git a/tex/context/base/mkiv/strc-lst.mkvi b/tex/context/base/mkiv/strc-lst.mkvi
index 5c2bd74e5..08e56a700 100644
--- a/tex/context/base/mkiv/strc-lst.mkvi
+++ b/tex/context/base/mkiv/strc-lst.mkvi
@@ -145,7 +145,7 @@
{\endgroup}
\unexpanded\def\strc_lists_inject_enhance#listindex#internal%
- {\normalexpanded{\ctxlatecommand{enhancelist(#listindex)}}}
+ {\normalexpanded{\ctxlatecommand{enhancelist(\number#listindex)}}}
\unexpanded\def\strc_lists_inject_yes[#settings][#userdata]% can be used directly
{\setupcurrentlist[\c!type=userdata,\c!location=\v!none,#settings]% grouped (use \let...
@@ -153,7 +153,7 @@
\setnextinternalreference
\scratchcounter\clf_addtolist
references {
- internal \nextinternalreference
+ internal \locationcount
% block {\currentsectionblock}
% section structures.sections.currentid()
% location {\p_location}
@@ -167,12 +167,12 @@
userdata {\detokenize\expandafter{\normalexpanded{#userdata}}}
\relax
\edef\currentlistnumber{\the\scratchcounter}%
-\setxvalue{\??listlocations\currentlist}{\nextinternalreference}%
+\setxvalue{\??listlocations\currentlist}{\the\locationcount}%
\ifx\p_location\v!here
% this branch injects nodes !
- \strc_lists_inject_enhance{\currentlistnumber}{\nextinternalreference}%
+ \strc_lists_inject_enhance{\currentlistnumber}{\the\locationcount}%
\clf_setinternalreference
- internal \nextinternalreference
+ internal \locationcount
view {\interactionparameter\c!focus}%
\relax % this will change
\xdef\currentstructurelistattribute{\the\lastdestinationattribute}%
@@ -271,6 +271,7 @@
\def\strc_lists_place_indeed#tag#list#settings%
{\begingroup
+ \the\t_lists_every_renderingcleanup % \let\currentlistentrylocation\empty
\edef\currentlist{#tag}%
\setupcurrentlist[#settings]%
\the\everystructurelist
@@ -308,7 +309,7 @@
{\strc_lists_complete_indeed[#tag][#tag][#settings]}
\def\strc_lists_complete_indeed[#singular][#plural][#settings]%
- {\normalexpanded{\startnamedsection[\v!title][\c!title=\headtext{#plural},\c!reference=#singular]}%
+ {\normalexpanded{\startnamedsection[\v!title][\c!title=\headtext{#plural},\c!reference=#singular]}% {} around ref ?
\strc_lists_place[#singular][#settings]%
\stopnamedsection}
@@ -349,7 +350,7 @@
\endgroup}
\def\strc_lists_combined_complete[#tag][#settings]%
- {\normalexpanded{\startnamedsection[\v!title][\c!title={\headtext{#tag}},\c!reference=#tag]}%
+ {\normalexpanded{\startnamedsection[\v!title][\c!title={\headtext{#tag}},\c!reference=#tag]}% {} around ref ?
\strc_lists_combined_place[#tag][#settings]%
\stopnamedsection}
@@ -527,6 +528,7 @@
\unexpanded\def\strclistsentryprocess#tag#method#index#extra% This one is called at the lua end!
{\clf_pushlist#index\relax
+ %\let\currentlistentrylocation\empty
\edef\currentlist {#tag}%
\edef\currentlistmethod{#method}%
\edef\currentlistindex {#index}%
diff --git a/tex/context/base/mkiv/strc-mar.lua b/tex/context/base/mkiv/strc-mar.lua
index 8b30e8514..624972af4 100644
--- a/tex/context/base/mkiv/strc-mar.lua
+++ b/tex/context/base/mkiv/strc-mar.lua
@@ -31,7 +31,8 @@ local getlist = nuts.getlist
local getattr = nuts.getattr
local getbox = nuts.getbox
-local traverse_nodes = nuts.traverse
+local traverse = nuts.traverse
+local traverse_id = nuts.traverse_id
local nodecodes = nodes.nodecodes
local glyph_code = nodecodes.glyph
@@ -117,7 +118,7 @@ end
-- identify range
local function sweep(head,first,last)
- for n in traverse_nodes(head) do
+ for n in traverse(head) do
local id = getid(n)
if id == glyph_code then
local a = getattr(n,a_marks)
diff --git a/tex/context/base/mkiv/strc-mat.mkiv b/tex/context/base/mkiv/strc-mat.mkiv
index 85870d547..4308666f3 100644
--- a/tex/context/base/mkiv/strc-mat.mkiv
+++ b/tex/context/base/mkiv/strc-mat.mkiv
@@ -33,13 +33,14 @@
%\c!margin=,
%\c!align=,
%\c!separator=,
- %\c!grid=,
+ \c!grid=\v!math,
\c!location=\v!right,
\c!left=(,
\c!right=),
\c!expansion=\v!yes, % maybe automatically
\c!spacebefore=\v!big,
\c!spaceafter=\formulaparameter\c!spacebefore,
+ \c!width=\hsize,
\c!leftmargin=\zeropoint,
\c!rightmargin=\zeropoint,
\c!indentnext=\v!no,
@@ -47,6 +48,12 @@
\c!strut=\v!no,
\c!distance=2\emwidth]
+\setupformulaframed
+ [%c!location=<auto set>,
+ %c!width=<auto set>,
+ %c!align=<auto set>,
+ \c!offset=.5\exheight]
+
\ifdefined\matheqnogapstep
% we're ok, now we have that quad in the distance which is
% more consistent and not depending on the text font in math
@@ -219,7 +226,6 @@
\to \everyresetformulas
\newconditional\c_strc_formulas_handle_number
-\newconditional\c_strc_formulas_increment
\newconditional\c_strc_formulas_inside_place
\newconditional\c_strc_formulas_inside_place_sub
\newconditional\c_strc_formulas_inside_formulas
@@ -230,12 +236,6 @@
\global\setfalse\c_strc_formulas_inside_place_sub
\to \everyresetformulas
-% \def\strc_formulas_place_numbering % place formula
-% {\settrue\c_strc_formulas_handle_number
-% \strc_formulas_check_reference\c_strc_formulas_place_number_mode\currentplaceformulareference
-% \glet\strc_formulas_place_number\strc_formulas_place_number_indeed
-% \glet\strc_formulas_place_number_nested\strc_formulas_place_number_nested_indeed}
-
\def\strc_formulas_place_numbering % place formula
{\settrue\c_strc_formulas_handle_number
\strc_formulas_check_reference\c_strc_formulas_place_number_mode\currentplaceformulareference
@@ -271,21 +271,6 @@
\let\strc_formulas_reference_trace\relax
\let\strc_formulas_reference_show \relax
-% \def\strc_formulas_reference_trace
-% {\rlap{\hbox{\quad\tt\txx[%
-% \number\c_strc_formulas_place_number_mode,%
-% \number\c_strc_formulas_number_mode,%
-% \number\c_strc_formulas_sub_number_mode,%
-% \number\c_strc_formulas_nested_number_mode
-% ]}}}
-
-% \def\strc_formulas_reference_show
-% {\writestatus{\v!formula}%
-% {place: \number\c_strc_formulas_place_number_mode,\space
-% formula: \number\c_strc_formulas_number_mode,\space
-% subformula: \number\c_strc_formulas_sub_number_mode,\space
-% nested: \number\c_strc_formulas_nested_number_mode]}}
-
\unexpanded\def\placecurrentformulanumber
{\begingroup
\rm % determines the distance and main font
@@ -313,9 +298,6 @@
{\strc_formulas_handle_current_references
\labeltexts\currentformula{\convertedcounter[\v!formula][]}}
-% \def\theboxdestinationattribute#1{\iflocation\ifx#1\relax\else\ifx#1\empty\else attr \destinationattribute#1\fi\fi\fi}
-% \def\thedestinationattribute #1{\iflocation\ifx#1\relax\else\ifx#1\empty\else \attribute\destinationattribute#1\fi\fi\fi}
-
\def\theformuladestinationattribute#1%
{\iflocation\ifx#1\relax\else\ifx#1\empty\else
\attribute\destinationattribute#1%
@@ -479,7 +461,7 @@
\strc_formulas_handle_sub_numbering
\fi
\fi
- \strc_formulas_reference_trace
+ \strc_formulas_reference_trace
\egroup
\fi}
@@ -501,12 +483,19 @@
%D
%D Otherwise we get a missing \type {$$} error reported.
-\let\reqno\eqno
+\let\reqno\eqno % no longer valid as we just nil it
-\unexpanded\def\resetdisplaymatheq % when used?
- {\let\normalleqno\gobbleoneargument \let\leqno\gobbleoneargument
- \let\normalreqno\gobbleoneargument \let\eqno \gobbleoneargument
- \let\strc_formulas_place_number\relax}
+\let\math_native_leqno\leqno
+\let\math_native_reqno\reqno
+
+\unexpanded\def\normaleqno#1{\writestatus\m!system{no native (l)eqno equation number support}}
+
+\let\normalleqno\normaleqno
+\let\normalreqno\normaleqno
+
+\let\leqno\normaleqno
+\let\reqno\normaleqno
+\let\eqno \normaleqno
%D \macros
%D {startsubformulas}
@@ -529,49 +518,181 @@
%D Tricky stuff:
-\newdimen\lastlinewidth
-
\abovedisplayskip \zeropoint
\abovedisplayshortskip \zeropoint % evt. 0pt minus 3pt
\belowdisplayskip \zeropoint
\belowdisplayshortskip \zeropoint % evt. 0pt minus 3pt
\predisplaypenalty \zerocount
-\postdisplaypenalty \zerocount % -5000 gaat mis, zie penalty bij \paragraaf
+\postdisplaypenalty \zerocount % -5000 goes wrong, see penalty at \section
+\mathdisplayskipmode \plusthree % because align also adds
-% we don't use the skip's
+% \predisplaygapfactor \zerocount % default is 2000
\unexpanded\def\strc_formulas_forget_display_skips
- {\abovedisplayskip \zeropoint
+ {\mathdisplayskipmode \plusthree
+ \abovedisplayskip \zeropoint
\belowdisplayskip \zeropoint
\abovedisplayshortskip\zeropoint
\belowdisplayshortskip\zeropoint}
-% \def\predisplaysizethreshhold{2\emwidth} % was 3\emwidth
-
\newdimen\d_strc_formulas_display_skip_left
\newdimen\d_strc_formulas_display_skip_right
\newdimen\d_strc_formulas_display_margin_left
\newdimen\d_strc_formulas_display_margin_right
\newdimen\d_strc_formulas_display_pre_threshold
-\newskip \d_strc_formulas_display_skip_par
+\newdimen\d_strc_formulas_display_width
-\unexpanded\def\beforedisplayspace
- {\edef\p_spacebefore{\formulaparameter\c!spacebefore}%
- \ifx\p_spacebefore\v!none \else
- \blank[\p_spacebefore]%
+\newconstant\c_strc_formulas_mode % this will go away
+\newconstant\c_strc_formulas_space_model
+
+\c_strc_formulas_mode \plustwo % 0=native 1=simple (old) 2=align (new)
+\c_strc_formulas_space_model\plusthree % replaces \plusone
+
+\newconditional\c_strc_formulas_tight
+
+\newbox\b_strc_formulas_number
+\newbox\b_strc_formulas_content
+
+\def\strc_formulas_flush_content_and_number
+ {\noindentation
+ % \dontleavehmode
+ \kern\d_strc_formulas_display_margin_left
+ \ifcase\wd\b_strc_formulas_number
+ \hbox to \displaywidth \bgroup
+ \hfill
+ \box\b_strc_formulas_content
+ \hfill
+ \egroup
+ \else\ifdim\dimexpr\wd\b_strc_formulas_content+\wd\b_strc_formulas_number\relax>\displaywidth
+ \vbox \bgroup
+ \hsize\displaywidth
+ \box\b_strc_formulas_content
+ \par
+ \ifx\p_location\v!left
+ \box\b_strc_formulas_number\hfill
+ \else
+ \hfill\box\b_strc_formulas_number
+ \fi
+ \egroup
+ \else
+ \hbox to \displaywidth \bgroup
+ \ifx\p_location\v!left
+ \rlap{\box\b_strc_formulas_number}%
+ \hfill\box\b_strc_formulas_content\hfill
+ \else
+ \hfill\box\b_strc_formulas_content\hfill
+ \llap{\box\b_strc_formulas_number}%
+ \fi
+ \egroup
+ \fi\fi}
+
+\installcorenamespace{mathdisplayspacemodel}
+
+\setvalue{\??mathdisplayspacemodel\v!before:1}% old
+ {\ifx\p_spacebefore\v!none
+ % nothing
+ \else
+ \directvspacing\p_spacebefore
+ \fi}
+
+\setvalue{\??mathdisplayspacemodel\v!after:1}% old
+ {\prevdepth .5\strutdp
+ \edef\p_spaceafter{\formulaparameter\c!spaceafter}%
+ \ifx\p_spaceafter\v!none
+ % nothing
+ \else
+ \directvspacing\p_spaceafter
\fi}
+\setvalue{\??mathdisplayspacemodel\v!before:2}% old
+ {\ifx\p_spacebefore\v!none
+ % nothing
+ \else
+ \directvspacing\p_spacebefore
+ \fi
+ \prevdepth-\maxdimen} % texbook pagina 79-80
+
+\setvalue{\??mathdisplayspacemodel\v!after:2}% old
+ {\prevdepth\lineheight
+ \edef\p_spaceafter{\formulaparameter\c!spaceafter}%
+ \ifx\p_spaceafter\v!none
+ % nothing
+ \else
+ \directvspacing\p_spaceafter
+ \fi}
+
+\def\strc_math_obey_depth
+ {\ifvmode\ifdim\prevdepth<\zeropoint\else\ifdim\prevdepth<\strutdp
+ % maybe add a tracing option here
+ \ifgridsnapping
+ \directvspacing\v!depth
+ \else
+ \kern\dimexpr\strutdp-\prevdepth\relax
+ \prevdepth\strutdp
+ \fi
+ \fi\fi\fi}
+
+\setvalue{\??mathdisplayspacemodel\v!before:3}%
+ {% not ok, try \stopformula\par\startformula vs \stopformula\startformula
+ \ifdim\lastskip>\zeropoint
+ % bah
+ \else
+ \strc_math_obey_depth % somehow \fakenextstrutline doesn't work here
+ \nointerlineskip
+ \fi
+ \ifx\p_spacebefore\v!none
+ % nothing
+ \else\ifx\p_spaceafter\empty
+ \directvspacing\currentvspacing
+ \else
+ \directvspacing\p_spacebefore
+ \fi\fi}
+
+\setvalue{\??mathdisplayspacemodel\v!after:3}%
+ {\prevdepth\strutdp % \directvspacing\v!depth
+ \ifx\p_spaceafter\v!none
+ % nothing
+ \else\ifx\p_spaceafter\empty
+ \directvspacing\currentvspacing
+ \else
+ \directvspacing\p_spaceafter
+ \fi\fi}
+
+% \newtoks\everybeforedisplay
+% \appendtoks\page_sides_check_floats_indeed\to\everybeforedisplay
+
+\unexpanded\def\beforedisplayspace
+ {\ifhmode
+ \par
+ \fi
+ \ifvmode
+ \edef\p_spacebefore{\formulaparameter\c!spacebefore}%
+ \begincsname\??mathdisplayspacemodel\v!before:\number\c_strc_formulas_space_model\endcsname
+ \fi
+ \ifhmode
+ \par
+ \fi
+ \page_sides_check_floats_indeed} % probably needs more
+
\unexpanded\def\afterdisplayspace
- {\edef\p_spaceafter{\formulaparameter\c!spaceafter}%
- \ifx\p_spaceafter\v!none \else
- \blank[\p_spaceafter]%
+ {\ifhmode
+ \par
+ \fi
+ \ifvmode
+ \edef\p_spaceafter{\formulaparameter\c!spaceafter}%
+ \begincsname\??mathdisplayspacemodel\v!after:\number\c_strc_formulas_space_model\endcsname
+ \fi
+ \ifhmode
+ \par
\fi}
\unexpanded\def\setdisplaydimensions
- {\displayindent\d_strc_formulas_display_skip_left
- \advance\displayindent\d_strc_formulas_display_margin_left
- \displaywidth\hsize
+ {\displayindent\dimexpr
+ \d_strc_formulas_display_skip_left
+ +\d_strc_formulas_display_margin_left
+ \relax
+ \displaywidth\d_strc_formulas_display_width
%\setlocalhsize
%\displaywidth\localhsize
\ifdim\hangindent>\zeropoint
@@ -579,7 +700,11 @@
\else
\advance\displaywidth\hangindent
\fi
- \advance\displaywidth\dimexpr-\displayindent-\d_strc_formulas_display_skip_right-\d_strc_formulas_display_margin_right\relax
+ \advance\displaywidth\dimexpr
+ -\displayindent
+ -\d_strc_formulas_display_skip_right
+ -\d_strc_formulas_display_margin_right
+ \relax
\hsize\displaywidth} % new, else overfull in itemize
\unexpanded\def\strc_formulas_start_formula#1%
@@ -595,40 +720,69 @@
%D
%D \typebuffer \getbuffer
+\setvalue{\??formulaoption\v!packed}%
+ {\c_strc_formulas_space_model\zerocount}
+
+\setvalue{\??formulaoption\v!tight}%
+ {\settrue\c_strc_formulas_tight}
+
+\setvalue{\??formulaoption\v!middle}%
+ {\d_strc_formulas_display_skip_left \zeropoint
+ \d_strc_formulas_display_skip_right\zeropoint}
+
+\setvalue{\??formulaoption\v!line}%
+ {\ifgridsnapping
+ \setformulaparameter\c!grid{\v!math:\v!line}%
+ \fi}
+
+\setvalue{\??formulaoption\v!halfline}%
+ {\ifgridsnapping
+ \setformulaparameter\c!grid{\v!math:\v!halfline}%
+ \fi}
+
+\setvalue{\??formulaoption-\v!line}%
+ {\ifgridsnapping
+ \setformulaparameter\c!grid{\v!math:-\v!line}%
+ \fi}
+
+\setvalue{\??formulaoption-\v!halfline}%
+ {\ifgridsnapping
+ \setformulaparameter\c!grid{\v!math:-\v!halfline}%
+ \fi}
+
\unexpanded\def\strc_formulas_start_formula_indeed[#1][#2]% setting leftskip adaption is slow !
- {\bgroup % HERE
+ {\ifhmode
+ \par
+ \fi
+ \bgroup % HERE
\def\currentformula{#1}%
\dostarttaggedchained\t!formula\currentformula\??formula
- \the\everybeforedisplayformula
- \d_strc_formulas_display_skip_par\parskip\relax
- %\formulastrutdp\strutdepth
- %\formulastrutht\strutheight
- \edef\p_option {\formulaparameter\c!option}%
- \edef\p_margin {\formulaparameter\c!margin}%
- \edef\p_bodyfont{#2}%
- %\ifx\p_bodyfont\empty
- % \edef\p_bodyfont{\formulaparameter\c!bodyfont}%
- %\fi
- \ifx\p_bodyfont\empty \else
- \switchtoformulabodyfont[#2]%
- \fi
- \parskip\d_strc_formulas_display_skip_par\relax
- \ifx\p_option\v!middle
- \d_strc_formulas_display_skip_left \zeropoint
- \d_strc_formulas_display_skip_right\zeropoint
+ \setfalse\c_strc_formulas_tight
+ \d_strc_formulas_display_skip_left \leftskip
+ \d_strc_formulas_display_skip_right \rightskip
+ \d_strc_formulas_display_width \formulaparameter\c!width\relax
+ \d_strc_formulas_display_margin_left \formulaparameter\c!leftmargin\relax
+ \d_strc_formulas_display_margin_right\formulaparameter\c!rightmargin\relax
+ \ifsecondargument
+ \doifelseassignment{#2}% this is new, so that we can also set the grid
+ {\setupcurrentformula[#2]%
+ \edef\p_option{\formulaparameter\c!option}}%
+ {\edef\p_option{\formulaparameter\c!option}%
+ \edef\p_option{\ifx\p_option\empty\else\p_option,\fi#2}}%
\else
- \d_strc_formulas_display_skip_left \leftskip
- \d_strc_formulas_display_skip_right\rightskip
+ \edef\p_option{\formulaparameter\c!option}
\fi
- \d_strc_formulas_display_margin_left \formulaparameter\c!leftmargin \relax
- \d_strc_formulas_display_margin_right\formulaparameter\c!rightmargin\relax
+ \ifx\p_option\empty \else
+ \rawprocesscommacommand[\p_option]\strc_formulas_option
+ \fi
+ \edef\p_margin{\formulaparameter\c!margin}%
\ifx\p_margin\empty \else
\dosetleftskipadaption\p_margin
\d_strc_formulas_display_margin_left\leftskipadaption
\fi
\let\strc_formulas_start_formula\strc_formulas_start_formula_nested
- %\freezedimenmacro\predisplaysizethreshhold
\strc_formulas_forget_display_skips
+ \the\everybeforedisplayformula
\csname\e!start\formulaparameter\c!alternative\v!formula\endcsname}
\unexpanded\def\strc_formulas_start_formula_nested#1%
@@ -643,9 +797,8 @@
% tagging of formulanumbers is not ok (we get two display maths blobs)
\unexpanded\def\strc_formulas_stop_formula
- {\dostarttagged\t!formulacaption\empty
- \strc_formulas_place_number
- \dostoptagged
+ {\strc_formulas_place_number % in case it hasn't happened yet
+ \strc_formulas_flush_number % in case we are in native mode
\dostarttagged\t!formulacontent\empty
\csname\e!stop\formulaparameter\c!alternative\v!formula\endcsname
\dostoptagged
@@ -661,23 +814,28 @@
% experiment:
-\appendtoks
- \edef\p_grid{\formulaparameter\c!grid}%
+\def\strc_formulas_set_grid_snapping
+ {\edef\p_grid{\formulaparameter\c!grid}%
\ifx\p_grid\empty \else
\spac_grids_snap_value_auto\p_grid
- \fi
+ \fi}
+
+\appendtoks
+ \ifgridsnapping
+ \strc_formulas_set_grid_snapping
+ \fi
\to \everybeforedisplayformula
-\unexpanded\def\switchtoformulabodyfont
- {\switchtobodyfont}
+% \unexpanded\def\switchtoformulabodyfont
+% {\switchtobodyfont}
\setuvalue{\v!formula}{\dosingleempty\strc_formulas_formula}
\def\strc_formulas_formula[#1]#2% todo: tagged
{\begingroup
- \edef\p_bodyfont{#1}%
- \ifx\p_bodyfont\empty \else
- \switchtoformulabodyfont[\p_bodyfont]%
+ \edef\p_direct{#1}%
+ \ifx\p_direct\empty \else
+ \rawprocesscommalist[\p_direct]\strc_formulas_option
\fi
% not : \def\strc_formulas_formula[##1]##2{\mathematics{##2}}%
\mathematics{#2}%
@@ -690,68 +848,40 @@
%D \startformula x \stopformula % now has \noindent (in mkii we messed with baselineskip)
%D \stoptyping
-% \unexpanded\def\startdisplaymath
-% {\bgroup
-% \par
-% \informulatrue
-% \beforedisplayspace
-% \par
-% \ifvmode
-% \prevdepth-\maxdimen % texbook pagina 79-80
-% \fi
-% \noindent % else funny hlist with funny baselineskip
-% $$% \Ucheckedstartdisplaymath
-% \setdisplaydimensions
-% \startinnermath}
-%
-% \unexpanded\def\stopdisplaymath
-% {\stopinnermath
-% $$% \Ucheckedstopdisplaymath
-% \par
-% \afterdisplayspace
-% \par
-% \egroup}
-
-\newconstant\c_strc_formulas_space_model
-
-\c_strc_formulas_space_model\plusone
-%c_strc_formulas_space_model\plustwo % needs chdcking with spac-ver
-
\unexpanded\def\startdisplaymath
- {\bgroup
- \par
+ {\ifhmode
+ \par
+ \fi
+ \bgroup
\informulatrue
\beforedisplayspace
- \par
- \ifvmode
- \ifcase\c_strc_formulas_space_model
- % nothing
- \or
- % nothing yet
- \or
- \prevdepth-\maxdimen % texbook pagina 79-80
- \fi
- \fi
- \noindent % else funny hlist with funny baselineskip
- \Ucheckedstartdisplaymath
\setdisplaydimensions
- \startinnermath}
+ \ifcase\c_strc_formulas_mode
+ \noindent % prevents that tex injects empty line (when using native display mechanism)
+ \Ucheckedstartdisplaymath
+ \the\everydisplay % new (probably too much)
+ \or
+ \setbox\b_strc_formulas_content\hbox\bgroup
+ \normalUstartmath
+ \displaystyle
+ \the\everydisplay % new (probably too much)
+ \else
+ \expandafter\startinnermath
+ \fi
+ \begingroup} % less interference with upcoming a \over b
\unexpanded\def\stopdisplaymath
- {\stopinnermath
- \Ucheckedstopdisplaymath
- \par
- \ifvmode
- \ifcase\c_strc_formulas_space_model
- % nothing
- \or
- \prevdepth .5\strutdp
- \or
- \prevdepth\lineheight
- \fi
+ {\endgroup % less interference with upcoming a \over b
+ \ifcase\c_strc_formulas_mode
+ \Ucheckedstopdisplaymath
+ \or
+ \normalUstopmath
+ \egroup
+ \strc_formulas_flush_content_and_number
+ \else
+ \expandafter\stopinnermath
\fi
\afterdisplayspace
- \par
\egroup}
% already defined
@@ -821,49 +951,51 @@
\unexpanded\def\startformulas
{\dosingleempty\strc_formulas_start_formulas}
-\def\strc_formulas_start_formulas[#1]#2\stopformulas % new / to be internationalized
- {\bgroup
+\expandafter\let\csname\e!stop\v!formulas\endcsname\relax
+
+\unexpanded\def\strc_formulas_nested_formula_start
+ {\hbox to \displaywidth \bgroup
+ \hsize\displaywidth
+ \hss
+ %\Ustartmath
+ \dostarttagged\t!formulacontent\empty
+ \csname\e!start\formulaparameter\c!alternative\v!formula\endcsname}
+
+\unexpanded\def\strc_formulas_nested_formula_stop
+ {\csname\e!stop\formulaparameter\c!alternative\v!formula\endcsname
+ \dostoptagged
+ %\Ustopmath
+ \hss
+ \egroup
+ \hss}
+
+\normalexpanded{\def\noexpand\strc_formulas_start_formulas[#1]#2\csname\e!stop\v!formulas\endcsname}%
+ {\startformula
\dostarttagged\t!formulaset\empty
\global\settrue\c_strc_formulas_inside_formulas
\edef\currentformulasreference{#1}%
\strc_formulas_handle_number
\let\currentformula\empty
\strc_formulas_forget_display_skips
- \startdisplaymath
- \setlocalhsize
- \unexpanded\def\startformula##1\stopformula
- {\advance\scratchcounter\plusone}%
+ \unexpanded\def\startformula
+ {\advance\scratchcounter\plusone
+ \expandafter\gobbleuntil\csname\e!stop\v!formula\endcsname}%
\scratchcounter\zerocount
#2% preroll
- \ifcase\scratchcounter\else
- \divide \hsize \scratchcounter
- \fi
- \hbox to \localhsize \bgroup
+ \hbox to \displaywidth \bgroup
+ \divide\displaywidth\scratchcounter
\hss
\let\startformula\strc_formulas_nested_formula_start
\let\stopformula \strc_formulas_nested_formula_stop
#2%
- \egroup
- \stopdisplaymath
+ \egroup
\global\setfalse\c_strc_formulas_inside_formulas
\dostoptagged
- \egroup
+ \stopformula
\the\everyresetformulas
\hangafter\minusone % added for side floats
\hangindent\zeropoint} % added for side floats
-\unexpanded\def\strc_formulas_nested_formula_start
- {\Ustartmath
- \vcenter\bgroup
- \vskip-\strutdepth
- \Ustartdisplaymath}
-
-\unexpanded\def\strc_formulas_nested_formula_stop
- {\Ustopdisplaymath
- \egroup
- \Ustopmath
- \hss}
-
% place
\def\m_strc_formulas_flag_inhibit{-}
@@ -890,16 +1022,14 @@
\unexpanded\def\strc_formulas_number_again[#1]%
{\def\currentformulareference{#1}%
- \strc_formulas_number_indeed}
+ \strc_formulas_place_number_in_box}
\unexpanded\def\placeformula
{\global\settrue\c_strc_formulas_inside_place
- \settrue\c_strc_formulas_increment
\dosingleempty\strc_formulas_place}
\unexpanded\def\placesubformula
{\global\settrue\c_strc_formulas_inside_place_sub
- \setfalse\c_strc_formulas_increment
\dosingleempty\strc_formulas_place}
\unexpanded\def\strc_formulas_place[#1]%
@@ -985,23 +1115,39 @@
\def\strc_formulas_place_number_nested_indeed#1#2%
{\def\currentnestedformulareference{#1}%
\def\currentnestedformulasuffix{#2}%
- \glet\strc_formulas_place_number\relax
\strc_formulas_check_reference\c_strc_formulas_nested_number_mode\currentnestedformulareference
\ifcase\c_strc_formulas_nested_number_mode
% nothing
\or
- \strc_formulas_number % hm, looks ahead for []
+ \glet\strc_formulas_place_number\relax
+ \expandafter\strc_formulas_number % hm, looks ahead for []
\or
% nothing
\or
- \strc_formulas_number % hm, looks ahead for []
+ \glet\strc_formulas_place_number\relax
+ \expandafter\strc_formulas_number % hm, looks ahead for []
\fi}
\def\strc_formulas_place_number_indeed
- {\glet\strc_formulas_place_number\relax
- \doifelse{\formulaparameter\c!location}\v!left
- {\normalleqno{\strc_formulas_number_indeed}}
- {\normalreqno{\strc_formulas_number_indeed}}}
+ {\strc_formulas_place_number_in_box}
+
+\def\strc_formulas_place_number_in_box
+ {\dostarttagged\t!formulacaption\empty
+ \global\setbox\b_strc_formulas_number\naturalhbox{\strc_formulas_number_indeed}%
+ \dostoptagged}
+
+\def\strc_formulas_flush_number
+ {\ifcase\c_strc_formulas_mode
+ \ifzeropt\wd\b_strc_formulas_number
+ % nothing to be done
+ \else
+ \ifx\p_location\v!left
+ \math_native_leqno{\box\b_strc_formulas_number}%
+ \else
+ \math_native_reqno{\box\b_strc_formulas_number}%
+ \fi
+ \fi
+ \fi}
% todo
diff --git a/tex/context/base/mkiv/strc-not.lua b/tex/context/base/mkiv/strc-not.lua
index ddbd2ae06..eff357eea 100644
--- a/tex/context/base/mkiv/strc-not.lua
+++ b/tex/context/base/mkiv/strc-not.lua
@@ -26,8 +26,11 @@ local counterspecials = counters.specials
local texgetcount = tex.getcount
local texgetbox = tex.getbox
+-- todo: allocate
+
notes.states = notes.states or { }
lists.enhancers = lists.enhancers or { }
+notes.numbers = notes.numbers or { }
storage.register("structures/notes/states", notes.states, "structures.notes.states")
@@ -143,6 +146,8 @@ end
notes.setstate = setstate
notes.getstate = getstate
+
+
implement {
name = "setnotestate",
actions = setstate,
@@ -157,6 +162,7 @@ implement {
function notes.define(tag,kind,number)
local state = setstate(tag,kind)
+ notes.numbers[number] = state
state.number = number
end
@@ -448,3 +454,42 @@ function notes.internalid(tag,n)
return r.internal
end
end
+
+-- for the moment here but better in some builder modules
+
+-- gets register "n" and location "i" (where 1 is before)
+
+-- this is an experiment, we will make a more general handler instead
+-- of the current note one
+
+local report_insert = logs.reporter("pagebuilder","insert")
+local trace_insert = false trackers.register("pagebuilder.insert",function(v) trace_insert = v end)
+
+local texgetglue = tex.getglue
+local texsetglue = tex.setglue
+
+local function check_spacing(n,i)
+ local gn, pn, mn = texgetglue(n)
+ local gi, pi, mi = texgetglue(i > 1 and "s_strc_notes_inbetween" or "s_strc_notes_before")
+ local gt, pt, mt = gn+gi, pn+pi, mn+mi
+ if trace_insert then
+ report_insert("%s %i: %p plus %p minus %p","always ",n,gn,pn,mn)
+ report_insert("%s %i: %p plus %p minus %p",i > 1 and "inbetween" or "before ",n,gi,pi,mi)
+ report_insert("%s %i: %p plus %p minus %p","effective",n,gt,pt,mt)
+ end
+ return gt, pt, mt
+end
+
+notes.check_spacing = check_spacing
+
+callback.register("build_page_insert", function(n,i)
+ local state = notes.numbers[n]
+ if state then
+ -- only notes, kind of hardcoded .. bah
+ local gt, pt, mt = check_spacing(n,i)
+ texsetglue(0,gt,pt,mt) -- for the moment we use skip register 0
+ return 0
+ else
+ return n
+ end
+end)
diff --git a/tex/context/base/mkiv/strc-not.mkvi b/tex/context/base/mkiv/strc-not.mkvi
index 81d534937..db27cb5af 100644
--- a/tex/context/base/mkiv/strc-not.mkvi
+++ b/tex/context/base/mkiv/strc-not.mkvi
@@ -404,7 +404,11 @@
\setexpandednoteparameter\s!insert{\namednoteparameter\currentnoteparent\s!insert}%
\definenotation[\currentnote][\currentnoteparent][\c!type=\v!note]%
\fi
- \clf_definenote{\currentnote}{insert}\currentnoteinsertionnumber\relax
+ \clf_definenote
+ {\currentnote}%
+ {insert}%
+ \currentnoteinsertionnumber
+ \relax
\to \everydefinenote
% maybe we will share this at some point:
@@ -1053,17 +1057,55 @@
\newskip \s_strc_notes_distance % we need to implement stretch
\newcount\c_strc_notes_columns
+% \def\strc_notes_set_distance
+% {\begingroup
+% \setbox\scratchbox\vbox % no reuse as it can mirror
+% {\forgetall
+% \restoreglobalbodyfont % really needed
+% \dontcomplain
+% \noteparameter\c!before
+% \placenoterule
+% \noteparameter\c!after}%
+% \expandafter\endgroup\expandafter
+% \s_strc_notes_distance\the\htdp\scratchbox\relax} % also dp now
+
+\newskip \s_strc_notes_before
+\newskip \s_strc_notes_inbetween
+\newconditional\c_strc_notes_first_flushed
+
+\appendtoks
+ \edef\p_spacebefore{\rootnoteparameter\c!spacebefore}%
+ \ifx\p_spacebefore\empty
+ \global\s_strc_notes_before\zeropoint
+ \else
+ \setbox\scratchbox\vbox{\blank[\p_spacebefore]\global\s_strc_notes_before\lastskip}%
+ \fi
+ \edef\p_spaceinbetween{\rootnoteparameter\c!spaceinbetween}%
+ \ifx\p_spaceinbetween\empty
+ \global\s_strc_notes_inbetween\zeropoint
+ \else
+ \setbox\scratchbox\vbox{\blank[\p_spaceinbetween]\global\s_strc_notes_inbetween\lastskip}%
+ \fi
+\to \everysynchronizenote
+
\def\strc_notes_set_distance
{\begingroup
+ \restoreglobalbodyfont
\setbox\scratchbox\vbox % no reuse as it can mirror
{\forgetall
- % \strc_notes_set_bodyfont
\dontcomplain
\noteparameter\c!before
\placenoterule
+ \strut
\noteparameter\c!after}%
+ % also dp now
+ \scratchdimen\dimexpr\htdp\scratchbox-\lineheight\relax
+ \ifgridsnapping
+ \getnoflines\scratchdimen
+ \scratchdimen\noflines\lineheight
+ \fi
\expandafter\endgroup\expandafter
- \s_strc_notes_distance\the\ht\scratchbox\relax}
+ \s_strc_notes_distance\the\scratchdimen\relax}
\def\strc_notes_set_columns
{\c_strc_notes_columns\noteparameter\c!n\relax
@@ -1324,10 +1366,24 @@
\inheritmaintextcolor % but we do want to obey the textcolor
\to \everybeforenoteinsert
+% \def\strc_notes_set_penalties
+% {\doif{\noteparameter\c!scope}\v!page{\floatingpenalty\maxdimen}% experiment
+% %\interlinepenalty\maxdimen % todo
+% \penalty\currentnotepenalty}
+
+\def\strc_notes_set_penalties
+ {% stored in insert node
+ \floatingpenalty \currentnotepenalty
+ % used when typesetting
+ \interlinepenalty\plushundred % plain value
+ % used when we need to split in columns
+ \ifnum\noteparameter\c!n>\plusone
+ \penalty\zerocount % otherwise no split in columns, maybe just always (tex just adds it to accumulated)
+ \fi}
+
+
\appendtoks
- \doif{\noteparameter\c!scope}\v!page{\floatingpenalty\maxdimen}% experiment
- \penalty\currentnotepenalty
- %\interlinepenalty\maxdimen % todo
+ \strc_notes_set_penalties
\forgetall
\strc_notes_set_bodyfont
\redoconvertfont % to undo \undo calls in in headings etc
@@ -1356,14 +1412,18 @@
%
% \dorecurse{6}{\input tufte\footnote{\input ward \input tufte \relax}}
+\newconditional\c_strc_notes_first_placed
+
\unexpanded\def\placenoteinserts
- {\strc_notes_process\strc_notes_place_inserts}
+ {\setfalse\c_strc_notes_first_placed
+ \strc_notes_process\strc_notes_place_inserts}
\def\strc_notes_place_inserts
{\strc_notes_set_delayed % \strc_notes_synchronize % we need to know if it's delayed
\ifconditional\c_strc_notes_delayed \else
\ifdim\ht\currentnoteinsertionnumber>\zeropoint % or a faster delayed test
\strc_notes_place_inserts_indeed
+ \settrue\c_strc_notes_first_placed
\fi
\fi}
@@ -1373,6 +1433,17 @@
\endgraf
\ifvmode
\whitespace
+ \ifconditional\c_strc_notes_first_placed
+ \edef\p_spaceinbetween{\noteparameter\c!spaceinbetween}%
+ \ifx\p_spaceinbetween\empty\else
+ \blank[\p_spaceinbetween]%
+ \fi
+ \else
+ \edef\p_spacebefore{\noteparameter\c!spacebefore}%
+ \ifx\p_spacebefore\empty\else
+ \blank[\p_spacebefore]%
+ \fi
+ \fi
\noteparameter\c!before
\fi
\placenoterule
diff --git a/tex/context/base/mkiv/strc-num.lua b/tex/context/base/mkiv/strc-num.lua
index 0203334ff..98db1b42d 100644
--- a/tex/context/base/mkiv/strc-num.lua
+++ b/tex/context/base/mkiv/strc-num.lua
@@ -9,6 +9,7 @@ if not modules then modules = { } end modules ['strc-num'] = {
local format = string.format
local next, type = next, type
local min, max = math.min, math.max
+local insert, remove, copy = table.insert, table.remove, table.copy
local texsetcount = tex.setcount
-- Counters are managed here. They can have multiple levels which makes it easier to synchronize
@@ -16,6 +17,7 @@ local texsetcount = tex.setcount
local allocate = utilities.storage.allocate
local setmetatableindex = table.setmetatableindex
+local setmetatablecall = table.setmetatablecall
local trace_counters = false trackers.register("structures.counters", function(v) trace_counters = v end)
local report_counters = logs.reporter("structure","counters")
@@ -38,9 +40,6 @@ local v_previous = variables.previous
local v_prev = variables.prev
local v_last = variables.last
----- v_no = variables.no
-local v_backward = variables.backward
-local v_forward = variables.forward
------ v_subs = variables.subs or "subs"
-- states: start stop none reset
@@ -166,7 +165,7 @@ local function enhance()
enhance = nil
end
-local function allocate(name,i) -- can be metatable
+local function allocate(name,i) -- can be metatable but it's a bit messy
local cd = counterdata[name]
if not cd then
cd = {
@@ -183,20 +182,24 @@ local function allocate(name,i) -- can be metatable
cd = cd.data
local ci = cd[i]
if not ci then
- ci = {
- number = 0,
- start = 0,
- saved = 0,
- step = 1,
- range = 1,
- offset = false,
- stop = 0, -- via metatable: last, first, stop only for tracing
- }
- setmetatableindex(ci, function(t,s) return constructor[s](t,name,i) end)
- cd[i] = ci
- tobesaved[name][i] = { }
- else
- if enhance then enhance() end -- not stored in bytecode
+ for i=1,i do
+ if not cd[i] then
+ ci = {
+ number = 0,
+ start = 0,
+ saved = 0,
+ step = 1,
+ range = 1,
+ offset = false,
+ stop = 0, -- via metatable: last, first, stop only for tracing
+ }
+ setmetatableindex(ci, function(t,s) return constructor[s](t,name,i) end)
+ cd[i] = ci
+ tobesaved[name][i] = { }
+ end
+ end
+ elseif enhance then
+ enhance() -- not stored in bytecode
end
return ci
end
@@ -432,14 +435,23 @@ end
function counters.save(name) -- or just number
local cd = counterdata[name]
if cd then
- table.insert(cd.saved,table.copy(cd.data))
+ insert(cd.saved,copy(cd.data))
end
end
function counters.restore(name)
local cd = counterdata[name]
- if cd and cd.saved then
- cd.data = table.remove(cd.saved)
+ if not cd then
+ report_counters("invalid restore, no counter %a",name)
+ return
+ end
+ local saved = cd.saved
+ if not saved then
+ -- is ok
+ elseif #saved > 0 then
+ cd.data = remove(saved)
+ else
+ report_counters("restore without save for counter %a",name)
end
end
@@ -623,7 +635,7 @@ implement { name = "countervalue", actions = { counters.value , con
implement { name = "lastcountervalue", actions = { counters.last , context }, arguments = { "string", 1 } }
implement { name = "firstcountervalue", actions = { counters.first , context }, arguments = { "string", 1 } }
implement { name = "nextcountervalue", actions = { counters.next , context }, arguments = { "string", 1 } }
-implement { name = "prevcountervalue", actions = { counters.previous, context }, arguments = { "string", 1 } }
+implement { name = "previouscountervalue", actions = { counters.previous, context }, arguments = { "string", 1 } }
implement { name = "subcountervalues", actions = { counters.subs , context }, arguments = { "string", 1 } }
implement { name = "rawsubcountervalue", actions = { counters.raw , context }, arguments = { "string", "integer" } }
@@ -643,7 +655,7 @@ implement { name = "decrementedcounter", actions = { add, context }, argume
implement { name = "showcounter", actions = showcounter, arguments = "string" } -- todo
implement { name = "checkcountersetup", actions = checkcountersetup, arguments = { "string", "integer", "integer", "string" } }
-table.setmetatablecall(counterdata,function(t,k) return t[k] end)
+setmetatablecall(counterdata,function(t,k) return t[k] end)
implement { name = "doifelsecounter", actions = { counterdata, commands.doifelse }, arguments = "string" }
implement { name = "doifcounter", actions = { counterdata, commands.doif }, arguments = "string" }
diff --git a/tex/context/base/mkiv/strc-num.mkiv b/tex/context/base/mkiv/strc-num.mkiv
index 2418130f9..4b222801a 100644
--- a/tex/context/base/mkiv/strc-num.mkiv
+++ b/tex/context/base/mkiv/strc-num.mkiv
@@ -545,7 +545,7 @@
\clf_setdestinationattribute
{%
references {%
- internal \nextinternalreference
+ internal \locationcount
% block {\currentsectionblock}% move to lua
view {\interactionparameter\c!focus}%
prefix {\currentstructurecomponentreferenceprefix}%
@@ -621,7 +621,7 @@
\fi
}
references {
- internal \nextinternalreference
+ internal \locationcount
% block {\currentsectionblock}
reference {\currentstructurecomponentreference}
prefix {\currentstructurecomponentreferenceprefix}
@@ -670,10 +670,10 @@
\relax
\xdef\m_strc_counters_last_registered_index{\the\scratchcounter}%
\clf_setinternalreference
- internal \nextinternalreference
+ internal \locationcount
\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}}}
+ \xdef\m_strc_counters_last_registered_synchronize{\strc_lists_inject_enhance{\m_strc_counters_last_registered_index}{\the\locationcount}}}
\let\m_strc_counters_last_registered_index \relax
\let\m_strc_counters_last_registered_attribute \relax
diff --git a/tex/context/base/mkiv/strc-pag.mkiv b/tex/context/base/mkiv/strc-pag.mkiv
index 0a55fb45f..21758d671 100644
--- a/tex/context/base/mkiv/strc-pag.mkiv
+++ b/tex/context/base/mkiv/strc-pag.mkiv
@@ -23,7 +23,7 @@
\countdef\realpageno \zerocount \realpageno \plusone
\countdef\userpageno \plusone \userpageno \plusone
-\countdef\subpageno \plustwo \subpageno \zerocount % !
+\countdef\subpageno \plustwo \subpageno \plusone % was \zerocount but that doesn't work well with bytext
\countdef\arrangeno \plusthree \arrangeno \zerocount % !
\countdef\pagenoshift\plusfour \pagenoshift\zerocount % !
\countdef\lastpageno \plusfive \lastpageno \zerocount % !
@@ -307,12 +307,16 @@
\installdirectcommandhandler \??pagenumbering {pagenumbering}
+% some day ifsinglesided and ifdoublesided will become obsolete
+
\appendtoks
\singlesidedfalse \setfalse\layoutisdoublesided
\doublesidedfalse \setfalse\layoutissinglesided
+ \resetsystemmode\v!singlesided
+ \resetsystemmode\v!doublesided
\processallactionsinset[\directpagenumberingparameter\c!alternative]
- [ \v!singlesided=>\singlesidedtrue\settrue\layoutissinglesided,
- \v!doublesided=>\doublesidedtrue\settrue\layoutisdoublesided]%
+ [ \v!singlesided=>\setsystemmode\v!singlesided\singlesidedtrue\settrue\layoutissinglesided,
+ \v!doublesided=>\setsystemmode\v!doublesided\doublesidedtrue\settrue\layoutisdoublesided]%
\ifdefined\trackingmarginnotestrue
\ifdoublesided
\trackingmarginnotestrue
diff --git a/tex/context/base/mkiv/strc-ref.lua b/tex/context/base/mkiv/strc-ref.lua
index 70d79dc57..a9a7c7121 100644
--- a/tex/context/base/mkiv/strc-ref.lua
+++ b/tex/context/base/mkiv/strc-ref.lua
@@ -20,6 +20,7 @@ local rawget, tonumber, type = rawget, tonumber, type
local lpegmatch = lpeg.match
local insert, remove, copytable = table.insert, table.remove, table.copy
local formatters = string.formatters
+local P, Cs, lpegmatch = lpeg.P, lpeg.Cs, lpeg.match
local allocate = utilities.storage.allocate
local mark = utilities.storage.mark
@@ -33,9 +34,7 @@ local trace_empty = false trackers.register("structures.referencing.empt
local check_duplicates = true
-directives.register("structures.referencing.checkduplicates", function(v)
- check_duplicates = v
-end)
+directives.register("structures.referencing.checkduplicates", function(v) check_duplicates = v end)
local report_references = logs.reporter("references")
local report_unknown = logs.reporter("references","unknown")
@@ -44,10 +43,6 @@ local report_importing = logs.reporter("references","importing")
local report_empty = logs.reporter("references","empty")
local variables = interfaces.variables
-local v_default = variables.default
-local v_url = variables.url
-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
@@ -127,20 +122,18 @@ local componentsplitter = references.componentsplitter
local currentreference = nil
local txtcatcodes = catcodes.numbers.txtcatcodes -- or just use "txtcatcodes"
-local context_delayed = context.delayed
-
-local ctx_pushcatcodes = context.pushcatcodes
-local ctx_popcatcodes = context.popcatcodes
-local ctx_dofinishreference = context.dofinishreference
-local ctx_dofromurldescription = context.dofromurldescription
-local ctx_dofromurlliteral = context.dofromurlliteral
-local ctx_dofromfiledescription = context.dofromfiledescription
-local ctx_dofromfileliteral = context.dofromfileliteral
-local ctx_expandreferenceoperation = context.expandreferenceoperation
-local ctx_expandreferencearguments = context.expandreferencearguments
-local ctx_getreferencestructureprefix = context.getreferencestructureprefix
-local ctx_convertnumber = context.convertnumber
-local ctx_emptyreference = context.emptyreference
+
+local ctx_pushcatcodes = context.pushcatcodes
+local ctx_popcatcodes = context.popcatcodes
+local ctx_dofinishreference = context.dofinishreference
+local ctx_dofromurldescription = context.dofromurldescription
+local ctx_dofromurlliteral = context.dofromurlliteral
+local ctx_dofromfiledescription = context.dofromfiledescription
+local ctx_dofromfileliteral = context.dofromfileliteral
+local ctx_expandreferenceoperation = context.expandreferenceoperation
+local ctx_expandreferencearguments = context.expandreferencearguments
+local ctx_convertnumber = context.convertnumber
+local ctx_emptyreference = context.emptyreference
storage.register("structures/references/defined", references.defined, "structures.references.defined")
@@ -586,13 +579,24 @@ end)
-- urls
-local urls = references.urls or { }
-references.urls = urls
-local urldata = urls.data or { }
-urls.data = urldata
+local urls = references.urls or { }
+references.urls = urls
+local urldata = urls.data or { }
+urls.data = urldata
+
+local p_untexurl = Cs ( (
+ P("\\")/"" * (P("%")/"%%" + P(1))
+ + P(" ")/"%%20"
+ + P(1)
+)^1 )
+
+function urls.untex(url)
+ return lpegmatch(p_untexurl,url) or url
+end
function urls.define(name,url,file,description)
if name and name ~= "" then
+ -- url = lpegmatch(replacer,url)
urldata[name] = { url or "", file or "", description or url or file or ""}
end
end
@@ -790,10 +794,6 @@ implement {
-- shared by urls and files
--- function references.whatfrom(name)
--- context((urldata[name] and v_url) or (filedata[name] and v_file) or v_unknown)
--- end
-
function references.from(name)
local u = urldata[name]
if u then
@@ -896,6 +896,26 @@ local function resolve(prefix,reference,args,set) -- we start with prefix,refere
if var then
var.reference = ri
local vo, vi = var.outer, var.inner
+ -- we catch this here .. it's a way to pass references with commas
+ if vi == "name" then
+ local arguments = var.arguments
+ if arguments then
+ vi = arguments
+ var.inner = arguments
+ var.reference = arguments
+ var.arguments = nil
+ end
+ elseif var.special == "name" then
+ local operation = var.operation
+ if operation then
+ vi = operation
+ var.inner = operation
+ var.reference = operation
+ var.operation = nil
+ var.special = nil
+ end
+ end
+ -- end of catch
if not vo and vi then
-- to be checked
d = defined[prefix][vi] or defined[""][vi]
@@ -2507,8 +2527,8 @@ implement {
arguments = { "string", "boolean", "boolean" }
}
-local function referencerealpage(actions)
- actions = actions or references.currentset
+local function referencerealpage()
+ local actions = references.currentset
return not actions and 0 or actions.realpage or setreferencerealpage(actions)
end
diff --git a/tex/context/base/mkiv/strc-ref.mkvi b/tex/context/base/mkiv/strc-ref.mkvi
index 96cb61b4a..9f2a7b91c 100644
--- a/tex/context/base/mkiv/strc-ref.mkvi
+++ b/tex/context/base/mkiv/strc-ref.mkvi
@@ -219,7 +219,7 @@
\clf_setdestinationattribute
{%
references {%
- internal \nextinternalreference
+ internal \locationcount
% block {\currentsectionblock}%
view {\interactionparameter\c!focus}%
\ifx\referenceprefix\empty\else
@@ -281,7 +281,7 @@
\clf_setdestinationattribute
{%
references {%
- internal \nextinternalreference
+ internal \locationcount
% block {\currentsectionblock}%
view {\interactionparameter\c!focus}%
\ifx\referenceprefix\empty\else
@@ -310,7 +310,7 @@
\clf_setdestinationattribute
{%
references {%
- internal \nextinternalreference
+ internal \locationcount
% block {\currentsectionblock}%
view {\interactionparameter\c!focus}%
\ifx\referenceprefix\empty\else
@@ -401,7 +401,7 @@
prefix {\referenceprefix}%
\fi
reference {#label}%
- internal \nextinternalreference
+ internal \locationcount
}%
metadata {%
kind {\s!page}%
@@ -424,7 +424,7 @@
references {%
view {\interactionparameter\c!focus}%
reference {#label}%
- internal \nextinternalreference
+ internal \locationcount
}%
metadata {%
kind {\s!page}%
@@ -847,7 +847,7 @@
\letvalue{\??savedinternalreference\s!default}\!!zerocount
\unexpanded\def\storeinternalreference#1#2%
- {\setxvalue{\??savedinternalreference\currentstructurename}{#2}}
+ {\setxvalue{\??savedinternalreference\currentstructurename}{\number#2}}
\newconditional\preferpagereferences
diff --git a/tex/context/base/mkiv/strc-reg.lua b/tex/context/base/mkiv/strc-reg.lua
index 66c264a49..32924ad81 100644
--- a/tex/context/base/mkiv/strc-reg.lua
+++ b/tex/context/base/mkiv/strc-reg.lua
@@ -9,8 +9,7 @@ if not modules then modules = { } end modules ['strc-reg'] = {
local next, type = next, type
local format, gmatch = string.format, string.gmatch
local equal, concat, remove = table.are_equal, table.concat, table.remove
-local utfchar = utf.char
-local lpegmatch = lpeg.match
+local lpegmatch, P, C, Ct = lpeg.match, lpeg.P, lpeg.C, lpeg.Ct
local allocate = utilities.storage.allocate
local trace_registers = false trackers.register("structures.registers", function(v) trace_registers = v end)
@@ -43,7 +42,6 @@ local v_yes = variables.yes
local v_packed = variables.packed
local v_current = variables.current
local v_previous = variables.previous
-local v_next = variables.next
local v_first = variables.first
local v_last = variables.last
local v_text = variables.text
@@ -64,9 +62,6 @@ local internalreferences = references.internals
local setinternalreference = references.setinternalreference
local setmetatableindex = table.setmetatableindex
-local texsetattribute = tex.setattribute
-
-local a_destination = attributes.private('destination')
local absmaxlevel = 5 -- \c_strc_registers_maxlevel
@@ -441,7 +436,13 @@ implement {
arguments = { "string", "string" }
}
-local entrysplitter = lpeg.tsplitat('+') -- & obsolete in mkiv
+
+local p_s = P("+")
+local p_e = P("&") * (1-P(";"))^0 * P(";")
+local p_r = C((p_e + (1-p_s))^0)
+
+local entrysplitter_xml = Ct(p_r * (p_s * p_r)^0) -- bah
+local entrysplitter_tex = lpeg.tsplitat('+') -- & obsolete in mkiv
local tagged = { }
@@ -472,6 +473,7 @@ local function preprocessentries(rawdata)
local kt = entries.keys
local entryproc = processors and processors.entry
local pageproc = processors and processors.page
+ local coding = rawdata.metadata.coding
if entryproc == "" then
entryproc = nil
end
@@ -483,14 +485,14 @@ local function preprocessentries(rawdata)
if p then
entryproc = p
end
- et = lpegmatch(entrysplitter,e)
+ et = lpegmatch(coding == "xml" and entrysplitter_xml or entrysplitter_tex,e)
end
if not kt then
local p, k = splitprocessor(entries.key or "")
if p then
pageproc = p
end
- kt = lpegmatch(entrysplitter,k)
+ kt = lpegmatch(coding == "xml" and entrysplitter_xml or entrysplitter_tex,k)
end
--
entries = { }
@@ -1071,6 +1073,8 @@ local function collapsepages(pages)
return #pages
end
+-- todo: create an intermediate structure and flush that
+
function registers.flush(data,options,prefixspec,pagespec)
local compress = options.compress
local collapse_singles = compress == v_yes
diff --git a/tex/context/base/mkiv/strc-reg.mkiv b/tex/context/base/mkiv/strc-reg.mkiv
index 5b32c6fc8..380cc9f22 100644
--- a/tex/context/base/mkiv/strc-reg.mkiv
+++ b/tex/context/base/mkiv/strc-reg.mkiv
@@ -298,7 +298,7 @@
userdata {\detokenize\expandafter{\normalexpanded{#3}}}
}%
\clf_setinternalreference
- internal \nextinternalreference
+ internal \locationcount
view {\interactionparameter\c!focus}%
\relax % this will change
\ifx\currentregisterownnumber\v!yes
@@ -337,7 +337,7 @@
}%
% overlap with the above
% \clf_setinternalreference
- % internal \nextinternalreference
+ % internal \locationcount
% view {\interactionparameter\c!focus}%
\relax % this will change
\xdef\currentregistersynchronize{\ctxlatecommand{enhanceregister("\currentregister",\currentregisternumber)}}%
@@ -524,7 +524,7 @@
}%
}}%
\clf_setinternalreference
- internal \nextinternalreference
+ internal \locationcount
view {\interactionparameter\c!focus}%
\relax % this will change
\dostarttagged\t!registerlocation\currentregister
diff --git a/tex/context/base/mkiv/strc-ren.mkiv b/tex/context/base/mkiv/strc-ren.mkiv
index 6bdd05de9..132f0f115 100644
--- a/tex/context/base/mkiv/strc-ren.mkiv
+++ b/tex/context/base/mkiv/strc-ren.mkiv
@@ -82,24 +82,24 @@
\def\headreferenceattributes
{\iflocation
- % \ctxlua{structures.lists.taglocation(\nextinternalreference)}% maybe ... tags entry as used
+ % \ctxlua{structures.lists.taglocation(\the\locationcount)}% maybe ... tags entry as used
attr \destinationattribute \currentstructureattribute
attr \referenceattribute \currentstructurereferenceattribute
- % attr \internalattribute \nextinternalreference
+ % attr \internalattribute \locationcount
\fi}
\def\setinlineheadreferenceattributes
{\ifconditional\headisdisplay \else \iflocation
\attribute\destinationattribute\currentstructureattribute
\attribute\referenceattribute \currentstructurereferenceattribute
- % \attribute\internalattribute \nextinternalreference
+ % \attribute\internalattribute \locationcount
\fi \fi}
\def\docheckheadreference
{\edef\currentheadinteraction{\headparameter\c!interaction}%
\ifx\currentheadinteraction\v!list
% setuphead[<section>][interaction=list,...]
- \strc_references_get_simple_reference{*\nextinternalreference}%
+ \strc_references_get_simple_reference{*\the\locationcount}%
\let\currentstructurereferenceattribute\currentreferenceattribute
\else\ifx\currentheadinteraction\v!reference
% setuphead[<section>][interaction=reference,...] start<section>[backreference=abc,...]
@@ -167,18 +167,6 @@
% helpers
-% \defineinmargin [ChapterInMargin] [outer] [normal] [distance=0.3em]
-%
-% \defineheadplacement[MyTest][horizontal]#1#2%
-% {\startlocalheadsetup
-% %\ChapterInMargin{\headhbox{\strut#2}}% proper destination, ref okay
-% \ChapterInMargin{\strut#2}% zero destination, ref okay
-% \stoplocalheadsetup}
-%
-% \setuphead
-% [chapter]
-% [alternative=MyTest]
-
\unexpanded\def\headhbox{\hbox\headreferenceattributes}
\unexpanded\def\headvbox{\vbox\headreferenceattributes}
@@ -320,28 +308,88 @@
\d_strc_rendering_hang_height\zeropoint
\fi}
+% \def\strc_rendering_stop_placement
+% {\n_strc_rendering_hang_lines\zerocount
+% \ifconditional\headisdisplay
+% \strc_rendering_initialize_line_hang
+% % kind of special, we want to snap heads also according to local specs local
+% \ifgridsnapping
+% \hbox\bgroup % extra hbox will trigger global snapper on top of local
+% \edef\p_grid{\headparameter\c!grid}%
+% \ifconditional\headisdisplay
+% \ifx\p_grid\empty\else
+% \useheadstyleandcolor\c!style\c!color
+% \setupinterlinespace
+% \useheadstyleandcolor\c!textstyle\c!textcolor
+% \setupinterlinespace
+% \fi
+% \fi
+% \snaptogrid[\p_grid]\hbox
+% {\hskip\dimexpr\d_strc_rendering_local_leftoffset+\headparameter\c!margin\relax\box\b_strc_rendering_head}%
+% \egroup
+% \else
+% \hbox
+% {\hskip\dimexpr\d_strc_rendering_local_leftoffset+\headparameter\c!margin\relax\box\b_strc_rendering_head}%
+% \fi
+% \flushnotes % new, not really needed
+% \endgraf
+% \ifvmode
+% \ifnum\n_strc_rendering_hang_lines>\zerocount
+% \dorecurse\n_strc_rendering_hang_lines{\nointerlineskip\dosomebreak\nobreak\strut\endgraf}% to be checked
+% \fi
+% \nointerlineskip
+% \dosomebreak\nobreak
+% \fi
+% \getheadsyncs
+% \else
+% % somehow this goes ok even when we push in the margin probably because we gobble pars
+% % in the process of collecting index entries etc
+% \strut
+% \flushnotes % new, here since we're in par mode
+% \unhbox\b_strc_rendering_head
+% \getheadsyncs
+% \ifconditional\headissomewhere
+% % nothing special
+% \else
+% %\hskip\headnumberdistance\s!plus\headnumberdistance\s!minus.25\dimexpr\headnumberdistance\relax
+% \hskip\headtextdistance\relax
+% \strc_sectioning_inject_continuous_signal
+% \fi
+% \fi
+% \ifconditional\headisdisplay
+% \ifvmode
+% \ifgridsnapping % important, font related depth, see comment
+% \prevdepth\strutdp
+% \else
+% \prevdepth\d_strc_rendering_local_depth
+% \fi
+% \fi
+% \fi
+% \egroup
+% \egroup
+% \ifconditional\headisdisplay
+% \useindentnextparameter\headparameter
+% \else
+% \nonoindentation % recently added, was a bug
+% \fi}
+
\def\strc_rendering_stop_placement
{\n_strc_rendering_hang_lines\zerocount
\ifconditional\headisdisplay
\strc_rendering_initialize_line_hang
% kind of special, we want to snap heads also according to local specs local
+ \setbox\b_strc_rendering_head\hbox
+ {\hskip\dimexpr\d_strc_rendering_local_leftoffset+\headparameter\c!margin\relax
+ \box\b_strc_rendering_head}%
\ifgridsnapping
- \hbox\bgroup % extra hbox will trigger global snapper on top of local
- \edef\p_grid{\headparameter\c!grid}%
- \ifconditional\headisdisplay
- \ifx\p_grid\empty\else
- \useheadstyleandcolor\c!style\c!color
- \setupinterlinespace
- \useheadstyleandcolor\c!textstyle\c!textcolor
- \setupinterlinespace
- \fi
- \fi
- \snaptogrid[\p_grid]\hbox
- {\hskip\dimexpr\d_strc_rendering_local_leftoffset+\headparameter\c!margin\relax\box\b_strc_rendering_head}%
- \egroup
+ \applygridmethod
+ {\headparameter\c!grid}%
+ {\ifconditional\headisdisplay
+ \strc_rendering_initialize_style_and_color_display\c!textstyle\c!textcolor
+ \fi}%
+ {\box\b_strc_rendering_head}
\else
- \hbox
- {\hskip\dimexpr\d_strc_rendering_local_leftoffset+\headparameter\c!margin\relax\box\b_strc_rendering_head}%
+ \box\b_strc_rendering_head
\fi
\flushnotes % new, not really needed
\endgraf
@@ -354,12 +402,19 @@
\fi
\getheadsyncs
\else
+ % somehow this goes ok even when we push in the margin probably because we gobble pars
+ % in the process of collecting index entries etc
\strut
\flushnotes % new, here since we're in par mode
\unhbox\b_strc_rendering_head
\getheadsyncs
- \hskip\headnumberdistance\s!plus\headnumberdistance\s!minus.25\dimexpr\headnumberdistance\relax
- \strc_sectioning_inject_continuous_signal
+ \ifconditional\headissomewhere
+ % nothing special
+ \else
+ %\hskip\headnumberdistance\s!plus\headnumberdistance\s!minus.25\dimexpr\headnumberdistance\relax
+ \hskip\headtextdistance\relax
+ \strc_sectioning_inject_continuous_signal
+ \fi
\fi
\ifconditional\headisdisplay
\ifvmode
@@ -453,6 +508,7 @@
\newdimen\headwidth
\newdimen\headtextwidth
+\newskip \headtextdistance
\newdimen\headnumberdistance
\newdimen\headnumberwidth
@@ -470,16 +526,22 @@
\let\currentheadrenderingalternative\v!vertical
\fi
\ifx\currentheadrenderingalternative\v!horizontal
- \global\setfalse\headisdisplay % global
+ \global\setfalse\headisdisplay % global
+ \global\setfalse\headissomewhere % global
+ \else\ifx\currentheadrenderingalternative\v!somewhere
+ \global\setfalse\headisdisplay % global
+ \global\settrue \headissomewhere % global
\else
- \global\settrue\headisdisplay % global
- \fi}
+ \global\settrue \headisdisplay % global
+ \global\setfalse\headissomewhere % global
+ \fi\fi}
\unexpanded\def\strc_rendering_initialize_dimensions
- {\headwidth \headparameter\c!width \relax % \zeropoint == unset
- \headnumberwidth \headparameter\c!numberwidth\relax % \zeropoint == unset
- \headnumberdistance\headparameter\c!distance \relax
- \headtextwidth \headparameter\c!textwidth \relax} % \zeropoint == unset
+ {\headwidth \headparameter\c!width \relax % \zeropoint == unset
+ \headnumberwidth \headparameter\c!numberwidth \relax % \zeropoint == unset
+ \headnumberdistance\headparameter\c!distance \relax
+ \headtextdistance \headparameter\c!textdistance\relax
+ \headtextwidth \headparameter\c!textwidth \relax} % \zeropoint == unset
\unexpanded\def\headtextcontent
{\begingroup
@@ -626,23 +688,57 @@
[\c!alternative=\v!vertical,
\c!renderingsetup=\??headrenderings:\v!inmargin]
+% \startsetups[\??headrenderings:\v!inmargin]
+% \vbox {
+% \headsetupspacing
+% \begstrut % use one \strut here!
+% \dontleavehmode % in case there is no strut, else side effects with llap
+% \ifconditional\headshownumber
+% \llap {
+% \signalrightpage
+% \hbox {
+% \hfill
+% \headnumbercontent
+% \doifelserightpage{
+% \scratchdistance\leftmargindistance
+% } {
+% \scratchdistance\rightmargindistance
+% }
+% \hskip\dimexpr\d_strc_rendering_local_leftoffset+\scratchdistance\relax
+% }
+% }
+% \else
+% \fakeheadnumbercontent % will also be done in the other ones (force consistency with numbered)
+% \fi
+% \headtextcontent
+% }
+% \stopsetups
+
\startsetups[\??headrenderings:\v!inmargin]
\vbox {
\headsetupspacing
- \begstrut % use one \strut here!
\dontleavehmode % in case there is no strut, else side effects with llap
+ \begstrut % use one \strut here!
\ifconditional\headshownumber
- \llap {
- \signalrightpage
- \hbox {
- \hfill
+ \doifelsesomething {\headparameter\c!location} {
+ % kind of new
+ \margindata [\headparameter\c!location] {
\headnumbercontent
- \doifelserightpage{
- \scratchdistance\leftmargindistance
- } {
- \scratchdistance\rightmargindistance
+ }
+ } {
+ % normal backward compatible variant
+ \llap {
+ \signalrightpage
+ \hbox {
+ \hfill
+ \headnumbercontent
+ \doifelserightpage{
+ \scratchdistance\leftmargindistance
+ } {
+ \scratchdistance\rightmargindistance
+ }
+ \hskip\dimexpr\d_strc_rendering_local_leftoffset+\scratchdistance\relax
}
- \hskip\dimexpr\d_strc_rendering_local_leftoffset+\scratchdistance\relax
}
}
\else
@@ -786,4 +882,9 @@
\fi
\stopsetups
+% see typo-mar.mkiv:
+%
+% \defineheadalternative
+% [\v!margintext]
+
\protect \endinput
diff --git a/tex/context/base/mkiv/strc-rsc.lua b/tex/context/base/mkiv/strc-rsc.lua
index ee7f885e0..d7dc47827 100644
--- a/tex/context/base/mkiv/strc-rsc.lua
+++ b/tex/context/base/mkiv/strc-rsc.lua
@@ -125,6 +125,10 @@ references.splitcomponent = splitcomponent
-- inspect(splitprefix([[component:::inner]]))
-- inspect(splitprefix([[component:inner]]))
+-- inspect(splitreference([[name(foo)]]))
+-- inspect(splitreference([[name{foo}]]))
+-- inspect(splitreference([[xx::name(foo, bar and me)]]))
+
-- inspect(splitreference([[ ]]))
-- inspect(splitreference([[ inner ]]))
-- inspect(splitreference([[ special ( operation { argument, argument } ) ]]))
diff --git a/tex/context/base/mkiv/strc-sec.mkiv b/tex/context/base/mkiv/strc-sec.mkiv
index 657e6c866..b0771b475 100644
--- a/tex/context/base/mkiv/strc-sec.mkiv
+++ b/tex/context/base/mkiv/strc-sec.mkiv
@@ -176,11 +176,11 @@
\globallet\currentstructurecoding\s!tex
\fi
\setnextinternalreference
- \storeinternalreference\currentstructurename\nextinternalreference %
+ \storeinternalreference\currentstructurename{\the\locationcount}%
\strc_sectioning_set_reference_prefix
\clf_setsectionentry
references {
- internal \nextinternalreference\space
+ internal \locationcount
% block {\currentsectionblock}
prefix {\currentstructurereferenceprefix}
reference {\currentstructurereference}
@@ -225,7 +225,7 @@
numberdata {
% block {\currentsectionblock}
\ifx\currentstructureshownumber\v!no
- hidenumber \space true\space
+ hidenumber \space true\space % space needed for parser
\fi
separatorset {\structureparameter\c!sectionseparatorset}
conversionset {\structureparameter\c!sectionconversionset}
@@ -345,6 +345,7 @@
%\c!deeptextcommand=,
%\c!default=,
\c!distance=\zeropoint,
+ \c!textdistance=\zeropoint,
\c!textwidth=\zeropoint, % signal too
\c!numberwidth=\zeropoint, % signal too
\c!width=\zeropoint, % signal too
@@ -444,7 +445,7 @@
\clf_registersection {\currenthead} {
coupling {\currentsectionheadcoupling}
section {\currentsectionheadsection}
- level \currentsectionlevel
+ level \space \currentsectionlevel \space % space needed for parser
parent {\currentheadparent}
}%
\endgroup
@@ -660,8 +661,9 @@
\newconditional\c_strc_sectioning_empty
\newconditional\c_strc_sectioning_hidden
-\newconditional\headshownumber % public
-\newconditional\headisdisplay % public
+\newconditional\headshownumber % public
+\newconditional\headisdisplay % public
+\newconditional\headissomewhere % public
\setvalue{\??headincrement\v!yes }{\settrue \c_strc_sectioning_increment\settrue \c_strc_sectioning_to_list}
\setvalue{\??headincrement\v!no }{\setfalse\c_strc_sectioning_increment\setfalse\c_strc_sectioning_to_list}
@@ -796,7 +798,7 @@
{\dontleavehmode
\begingroup
\unexpanded\def\\{\space}% messy here, but the default (and needs to be grouped)
- \settrue\headisdisplay % triggers interlinespace checking
+ \global\settrue\headisdisplay % triggers interlinespace checking
\edef\currenthead{#1}%
\strc_rendering_initialize_style_and_color\c!textstyle\c!textcolor
\relax
@@ -807,7 +809,7 @@
\def\strc_sectioning_place_head_number[#1]%
{\dontleavehmode
\begingroup
- \settrue\headisdisplay % triggers interlinespace checking
+ \global\settrue\headisdisplay % triggers interlinespace checking
\edef\currenthead{#1}%
\strc_rendering_initialize_style_and_color\c!numberstyle\c!numbercolor
\relax
diff --git a/tex/context/base/mkiv/strc-syn.lua b/tex/context/base/mkiv/strc-syn.lua
index 5f3557a69..ecc5e19ae 100644
--- a/tex/context/base/mkiv/strc-syn.lua
+++ b/tex/context/base/mkiv/strc-syn.lua
@@ -227,7 +227,6 @@ function synonyms.flush(data,options)
local result = data.result
for i=1,#result do
local sublist = result[i]
- local letter = sublist.tag
local data = sublist.data
for d=1,#data do
local entry = data[d].definition
diff --git a/tex/context/base/mkiv/strc-tag.lua b/tex/context/base/mkiv/strc-tag.lua
index 8f2e18978..9d1fec33e 100644
--- a/tex/context/base/mkiv/strc-tag.lua
+++ b/tex/context/base/mkiv/strc-tag.lua
@@ -315,7 +315,7 @@ function tags.start(tag,specification)
metadata = nil
end
local userdata = specification.userdata
- if user ~= "" and type(userdata) == "string" then
+ if userdata ~= "" and type(userdata) == "string" then
specification.userdata = settings_to_hash(userdata)
end
local detail = specification.detail
diff --git a/tex/context/base/mkiv/strc-tag.mkiv b/tex/context/base/mkiv/strc-tag.mkiv
index c9132bf04..7fdfd7afa 100644
--- a/tex/context/base/mkiv/strc-tag.mkiv
+++ b/tex/context/base/mkiv/strc-tag.mkiv
@@ -215,8 +215,23 @@
\unexpanded\def\strc_tags_element_stop_nop
{}
+\def\strc_tags_report_hyphen#1%
+ {\writestatus\m!languages{setting #1 to U+00AD}}
+
+\unexpanded\def\strc_tags_patch_hyphen
+ {% for the moment here
+ \ifnum\languageparameter\s!lefthyphenchar>\zerocount
+ \setuplanguage[\s!default][\s!lefthyphenchar="AD]%
+ \strc_tags_report_hyphen\s!lefthyphenchar
+ \fi
+ \ifnum\languageparameter\s!righthyphenchar>\zerocount
+ \setuplanguage[\s!default][\s!righthyphenchar="AD]%
+ \strc_tags_report_hyphen\s!righthyphenchar
+ \fi
+ \let\strc_tags_report_hyphen\gobbleoneargument}
+
\unexpanded\def\strc_tags_enable_elements
- {\setuplanguage[\s!default][\s!righthyphenchar="AD]% for the moment here
+ {\strc_tags_patch_hyphen
\let\startelement\strc_tags_element_start_yes
\let\stopelement \strc_tags_element_stop_yes
\let\dosettagproperty\strc_tags_set_aspect_yes}
diff --git a/tex/context/base/mkiv/supp-box.lua b/tex/context/base/mkiv/supp-box.lua
index d3a4f57e5..b9bf0ccf0 100644
--- a/tex/context/base/mkiv/supp-box.lua
+++ b/tex/context/base/mkiv/supp-box.lua
@@ -12,66 +12,68 @@ 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 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 tex = tex
+local context = context
+local nodes = nodes
+
+local implement = interfaces.implement
+
+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 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 getdir = nuts.getdir
+local getwidth = nuts.getwidth
+local takebox = nuts.takebox
+
+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 setdisc = nuts.setdisc
+local setwidth = nuts.setwidth
+local setheight = nuts.setheight
+local setdepth = nuts.setdepth
+
+local flush_node = nuts.flush_node
+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 list_dimensions = nuts.dimensions
+local hpack = nuts.hpack
+
+local listtoutf = nodes.listtoutf
+
+local nodepool = nuts.pool
+local new_penalty = nodepool.penalty
+local new_hlist = nodepool.hlist
+local new_glue = nodepool.glue
+
+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)
@@ -81,12 +83,6 @@ local function hyphenatedlist(head,usecolor)
local prev = getprev(current)
if id == disc_code then
local pre, post, replace = getdisc(current)
- if pre then
- setfield(current,"pre",nil)
- end
- if post then
- setfield(current,"post",nil)
- end
if not usecolor then
-- nothing fancy done
elseif pre and post then
@@ -99,25 +95,33 @@ local function hyphenatedlist(head,usecolor)
end
if replace then
flush_list(replace)
- setfield(current,"replace",nil)
end
- -- setfield(current,"replace",new_rule(65536)) -- new_kern(65536*2))
+ setdisc(current)
setboth(current)
- local list = link_nodes (
+-- local list = setlink (
+-- pre and new_penalty(10000),
+-- pre,
+-- current,
+-- post,
+-- post and new_penalty(10000)
+-- )
+-- local tail = find_tail(list)
+-- if prev then
+-- setlink(prev,list)
+-- end
+-- if next then
+-- setlink(tail,next)
+-- end
+ setlink (
+ prev, -- there had better be one
pre and new_penalty(10000),
pre,
current,
post,
- post and new_penalty(10000)
+ post and new_penalty(10000),
+ next
)
- local tail = find_tail(list)
- if prev then
- setlink(prev,list)
- end
- if next then
- setlink(tail,next)
- end
- -- free_node(current)
+ -- flush_node(current)
elseif id == vlist_code or id == hlist_code then
hyphenatedlist(getlist(current))
end
@@ -335,7 +339,7 @@ implement {
else
tail = prev
end
- free_node(temp)
+ flush_node(temp)
end
-- done
setnext(tail)
@@ -354,9 +358,9 @@ implement {
arguments = "integer",
actions = function(n)
local b = getbox(n)
- local factor = texget("baselineskip").width / texget("hsize")
- setfield(b,"depth",0)
- setfield(b,"height",getfield(b,"width") * factor)
+ local factor = texget("baselineskip",false) / texget("hsize")
+ setdepth(b,0)
+ setheight(b,getwidth(b) * factor)
end
}
@@ -372,7 +376,7 @@ local function getnaturaldimensions(n)
local w, h, d = 0, 0, 0
local l = getlist(getbox(n))
if l then
- w, h, d = dimensions(l)
+ w, h, d = list_dimensions(l)
end
texsetdimen("lastnaturalboxwd",w)
texsetdimen("lastnaturalboxht",h)
@@ -395,13 +399,42 @@ interfaces.implement {
end
}
+interfaces.implement {
+ name = "getnaturalwd",
+ arguments = "integer",
+ actions = function(n)
+ local w, h, d = 0, 0, 0
+ local l = getlist(getbox(n))
+ if l then
+ w, h, d = list_dimensions(l)
+ end
+ context("\\dimexpr%i\\scaledpoint\\relax",w)
+ end
+}
+
+local function setboxtonaturalwd(n)
+ local old = takebox(n)
+ local new = hpack(getlist(old))
+ setlist(old,nil)
+ flush_node(old)
+ setbox(n,new)
+end
+
+interfaces.implement {
+ name = "setnaturalwd",
+ arguments = "integer",
+ actions = setboxtonaturalwd
+}
+
+nodes.setboxtonaturalwd = setboxtonaturalwd
+
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")
+ return getdir(h)
end
end
end
@@ -418,3 +451,166 @@ interfaces.implement {
doifelse(firstdirinbox(n) == "TRT")
end
}
+
+-- new (handy for mp) .. might move to its own module
+
+do
+
+ local flush_list = nodes.flush_list
+ local copy_list = nodes.copy_list
+ local takebox = nodes.takebox
+ local texsetbox = tex.setbox
+
+ local new_hlist = nodes.pool.hlist
+
+ local boxes = { }
+ nodes.boxes = boxes
+ local cache = table.setmetatableindex("table")
+ local report = logs.reporter("boxes","cache")
+ local trace = false
+
+ trackers.register("nodes.boxes",function(v) trace = v end)
+
+ function boxes.save(category,name,box)
+ name = tonumber(name) or name
+ local b = takebox(box)
+ if trace then
+ report("category %a, name %a, %s (%s)",category,name,"save",b and "content" or "empty")
+ end
+ cache[category][name] = b or false
+ end
+
+ function boxes.found(category,name)
+ name = tonumber(name) or name
+ return cache[category][name] and true or false
+ end
+
+ function boxes.direct(category,name,copy)
+ name = tonumber(name) or name
+ local c = cache[category]
+ local b = c[name]
+ if not b then
+ -- do nothing, maybe trace
+ elseif copy then
+ b = copy_list(b)
+ else
+ c[name] = false
+ end
+ if trace then
+ report("category %a, name %a, %s (%s)",category,name,"direct",b and "content" or "empty")
+ end
+ return b or nil
+ end
+
+ function boxes.restore(category,name,box,copy)
+ name = tonumber(name) or name
+ local c = cache[category]
+ local b = takebox(box)
+ if b then
+ flush_list(b)
+ end
+ local b = c[name]
+ if not b then
+ -- do nothing, maybe trace
+ elseif copy then
+ b = copy_list(b)
+ else
+ c[name] = false
+ end
+ if trace then
+ report("category %a, name %a, %s (%s)",category,name,"restore",b and "content" or "empty")
+ end
+ texsetbox(box,b or nil)
+ end
+
+ local getwhd = nodes.getwhd
+
+ function boxes.dimensions(category,name)
+ name = tonumber(name) or name
+ local b = cache[category][name]
+ if b then
+ return getwhd(b)
+ else
+ return 0, 0, 0
+ end
+ end
+
+ function boxes.reset(category,name)
+ name = tonumber(name) or name
+ local c = cache[category]
+ if name and name ~= "" then
+ local b = c[name]
+ if b then
+ flush_list(b)
+ c[name] = false
+ end
+ if trace then
+ report("category %a, name %a, reset",category,name)
+ end
+ else
+ for k, b in next, c do
+ if b then
+ flush_list(b)
+ end
+ end
+ cache[category] = { }
+ if trace then
+ report("category %a, reset",category)
+ end
+ end
+ end
+
+ implement {
+ name = "putboxincache",
+ arguments = { "string", "string", "integer" },
+ actions = boxes.save,
+ }
+
+ implement {
+ name = "getboxfromcache",
+ arguments = { "string", "string", "integer" },
+ actions = boxes.restore,
+ }
+
+ implement {
+ name = "directboxfromcache",
+ arguments = { "string", "string" },
+ actions = { boxes.direct, context },
+ -- actions = function(category,name) local b = boxes.direct(category,name) if b then context(b) end end,
+ }
+
+ implement {
+ name = "directcopyboxfromcache",
+ arguments = { "string", "string", true },
+ actions = { boxes.direct, context },
+ -- actions = function(category,name) local b = boxes.direct(category,name,true) if b then context(b) end end,
+ }
+
+ implement {
+ name = "copyboxfromcache",
+ arguments = { "string", "string", "integer", true },
+ actions = boxes.restore,
+ }
+
+ implement {
+ name = "doifelseboxincache",
+ arguments = { "string", "string" },
+ actions = { boxes.found, doifelse },
+ }
+
+ implement {
+ name = "resetboxesincache",
+ arguments = { "string" },
+ actions = boxes.reset,
+ }
+
+ implement {
+ name = "lastlinewidth",
+ actions = function()
+ local head = tex.lists.page_head
+ -- list dimensions returns 3 value but we take the first
+ context(head and list_dimensions(getlist(find_tail(tonut(tex.lists.page_head)))) or 0)
+ end
+ }
+
+end
diff --git a/tex/context/base/mkiv/supp-box.mkiv b/tex/context/base/mkiv/supp-box.mkiv
index 9f4c58ad7..9d2817cee 100644
--- a/tex/context/base/mkiv/supp-box.mkiv
+++ b/tex/context/base/mkiv/supp-box.mkiv
@@ -905,7 +905,7 @@
\ifzeropt\ht\oldshapebox % \ifdim\ht\oldshapebox=\zeropoint
\setbox\newshapebox\emptyvbox
\else
- \setbox\newshapebox\vbox
+ \setbox\newshapebox\vbox % can be \vpack
{\unvcopy\oldshapebox
\setbox\newshapebox\emptybox
\shapecounter\zerocount
@@ -915,7 +915,7 @@
\ifx\originalshapebox\undefined \let\originalshapebox\oldshapebox \fi
-% We will turn this into a \MKIV\ variant.
+% We will turn this into a \MKIV\ variant (we can use \type {\vpack} too).
\unexpanded\def\insertshapesignal
{\hpack to \shapesignal{\strut\hss}% plus \strut
@@ -1313,8 +1313,7 @@
\egroup}
\unexpanded\def\limitatetext#1#2#3% \expanded added 2003/01/16
- {\expanded{\beforesplitstring#2}\at,\to\leftlimit
- \expanded{\aftersplitstring #2}\at,\to\rightlimit
+ {\splitatcomma{#2}\leftlimit\rightlimit
\ifx\rightlimit\empty
\normallimitatetext {#1}\leftlimit {#3}%
\else
@@ -1727,7 +1726,7 @@
{\ifnum\rigidcolumns=1 % tzt ook h/d correctie
\ifinner\ifhmode\box\else\unvbox\fi\else\unvbox\fi#1\relax
\else
- \vbox
+ \vbox % \vpack
{\forgetall
\nopenalties
\dontcomplain
@@ -2550,9 +2549,15 @@
\fi
\setstackbox{#1}{#2}}
+\unexpanded\def\flushbox#1#2% unwrapped
+ {\ifcsname\??stackbox#1:#2\endcsname
+ \box\lastnamedcs
+ \else
+ \emptybox
+ \fi}
+
\unexpanded\def\restorebox#1#2% unwrapped
{\ifcsname\??stackbox#1:#2\endcsname
- %\copy\csname\??stackbox#1:#2\endcsname
\copy\lastnamedcs
\else
\emptybox
@@ -2561,16 +2566,18 @@
\unexpanded\def\foundbox#1#2% wrapped
{\vpack
{\ifcsname\??stackbox#1:#2\endcsname
- %\copy\csname\??stackbox#1:#2\endcsname
\copy\lastnamedcs
\fi}}
-\unexpanded\def\doifelsebox#1#2#3#4%
+\unexpanded\def\doifelsebox#1#2%
{\ifcsname\??stackbox#1:#2\endcsname
- %\ifvoid\csname\??stackbox#1:#2\endcsname#4\else#3\fi
- \ifvoid\lastnamedcs#4\else#3\fi
+ \ifvoid\lastnamedcs
+ \doubleexpandafter\secondoftwoarguments
+ \else
+ \doubleexpandafter\firstoftwoarguments
+ \fi
\else
- #4%
+ \expandafter\secondoftwoarguments
\fi}
\let\doifboxelse\doifelsebox
@@ -2604,6 +2611,33 @@
\unexpanded\def\globalpushbox{\syst_boxes_push\global}
\unexpanded\def\globalpopbox {\syst_boxes_pop \global}
+%D And here is a more modern one (not yet in i-*):
+%D
+%D \starttyping
+%D \dorecurse {100} {
+%D \setbox\zerocount\hbox{test \recurselevel}
+%D \putboxincache{foo}{\recurselevel}\zerocount
+%D \copyboxfromcache{foo}{\recurselevel}\zerocount
+%D \iftrue
+%D \setbox\zerocount\hbox{\directboxfromcache{foo}{\recurselevel}}%
+%D \else
+%D \getboxfromcache{foo}{\recurselevel}\zerocount
+%D \fi
+%D }
+%D \resetboxesincache{foo}
+%D \stoptyping
+
+\unexpanded\def\putboxincache #1#2#3{\clf_putboxincache {#1}{#2}#3\relax}
+\unexpanded\def\getboxfromcache #1#2#3{\clf_getboxfromcache {#1}{#2}#3\relax}
+\unexpanded\def\doifelseboxincache #1#2{\clf_doifelseboxincache {#1}{#2}}
+\unexpanded\def\copyboxfromcache #1#2#3{\clf_copyboxfromcache {#1}{#2}#3\relax}
+\unexpanded\def\directboxfromcache #1#2{\clf_directboxfromcache {#1}{#2}}
+\unexpanded\def\directcopyboxfromcache#1#2{\clf_directcopyboxfromcache{#1}{#2}}
+\unexpanded\def\resetboxesincache #1{\clf_resetboxesincache {#1}}
+
+\unexpanded\def\putnextboxincache#1#2%
+ {\dowithnextbox{\putboxincache{#1}{#2}\nextbox}}
+
%D \macros
%D {removedepth, obeydepth}
%D
@@ -2619,13 +2653,11 @@
\fi}
\unexpanded\def\obeydepth
- {\par
- \ifvmode
- \ifdim\prevdepth>\zeropoint
- \kern-\prevdepth
- \fi
- \kern\strutdp
- \fi}
+ {\par % watch out for changes in math formulas
+ \ifvmode\ifdim\prevdepth<\zeropoint\else\ifdim\prevdepth<\strutdp
+ \kern\dimexpr\strutdp-\prevdepth\relax
+ \prevdepth\strutdp
+ \fi\fi\fi}
\unexpanded\def\undepthed
{\dowithnextbox{\dp\nextbox\zeropoint\box\nextbox}\hbox}
@@ -2885,10 +2917,64 @@
\let\getnaturaldimensions\clf_getnaturaldimensions % sets three dimensions
\let\naturalwd \clf_naturalwd % calculates and returns wd
+\let\getnaturalwd\clf_getnaturalwd % no intermediate
+\let\setnaturalwd\clf_setnaturalwd % no intermediate
+
\unexpanded\def\doifelserighttoleftinbox{\clf_doifelserighttoleftinbox}
\let\doifrighttoleftinboxelse\doifelserighttoleftinbox
+%D New, used in high/low:
+
+\definesystemattribute [runningtext] [public]
+
+%unexpanded\def\runninghbox{\hbox attr \runningtextattribute \plusone} % not yet in i-*
+\unexpanded\def\runninghbox{\hbox attr \runningtextattribute \fontid\font} % not yet in i-*
+
+%D To complement lua (yet undocumented):
+
+\unexpanded\def\beginhbox{\hbox\bgroup} \let\endhbox\egroup
+\unexpanded\def\beginvbox{\vbox\bgroup} \let\endvbox\egroup
+\unexpanded\def\beginvtop{\vtop\bgroup} \let\endvtop\egroup
+
+\unexpanded\def\sethboxregister#1{\setbox#1\hbox}
+\unexpanded\def\setvboxregister#1{\setbox#1\vbox}
+\unexpanded\def\setvtopregister#1{\setbox#1\vtop}
+
+\unexpanded\def\flushboxregister#1{\box\numexpr#1\relax}
+
+\unexpanded\def\starthboxregister#1{\setbox#1\hbox\bgroup} \let\stophboxregister\egroup
+\unexpanded\def\startvboxregister#1{\setbox#1\vbox\bgroup} \let\stopvboxregister\egroup
+\unexpanded\def\startvtopregister#1{\setbox#1\vtop\bgroup} \let\stopvtopregister\egroup
+
+%D For whatever third party package needs it:
+%D
+%D \starttyping
+%D \newlocalbox\BoxOne
+%D \newlocalbox\BoxTwo
+%D
+%D \setbox\BoxOne\hbox{Box One}
+%D \setbox\BoxTwo\hbox{Box Two}
+%D
+%D [\box\BoxTwo] [\box\BoxOne]
+%D \stoptyping
+
+\installcorenamespace{localbox}
+
+\unexpanded\def\newlocalbox#1%
+ {\expandafter\let\expandafter#1\csname\??localbox\string#1\endcsname
+ \ifx#1\relax
+ \syst_aux_new_localbox#1%
+ \fi}
+
+\def\syst_aux_new_localbox#1%
+ {\expandafter\newbox\csname\??localbox\string#1\endcsname
+ \newlocalbox#1}
+
+%D Who knows when this comes in handy:
+
+\unexpanded\def\lastlinewidth{\dimexpr\clf_lastlinelength\scaledpoint\relax}
+
\protect \endinput
% a bit of test code:
diff --git a/tex/context/base/mkiv/supp-ran.lua b/tex/context/base/mkiv/supp-ran.lua
index 4968e8cfc..8bfc09e58 100644
--- a/tex/context/base/mkiv/supp-ran.lua
+++ b/tex/context/base/mkiv/supp-ran.lua
@@ -10,8 +10,8 @@ if not modules then modules = { } end modules ['supp-ran'] = {
local report_system = logs.reporter("system","randomizer")
-local trace_random = false trackers.register("system.randomizer", function(v) trace_random = v end)
-local trace_random_mp = false trackers.register("system.randomizer.mp",function(v) trace_random_mp = v end)
+local trace_random = false trackers.register("system.randomizer", function(v) trace_random = v end)
+local trace_detail = false trackers.register("system.randomizer.detail",function(v) trace_detail = v end)
local insert, remove = table.insert, table.remove
@@ -26,6 +26,14 @@ local stack = { }
local last = 1
local maxcount = 2^30-1 -- 1073741823
+math.random = function(...)
+ local n = random(...)
+ if trace_detail then
+ report_system("math %s",n)
+ end
+ return n
+end
+
local function setrandomseedi(n)
if n <= 1 then
n = n * maxcount
@@ -33,17 +41,22 @@ local function setrandomseedi(n)
n = n * 1000
end
n = round(n)
- if trace_random then
- report_system("setting seed to %s",n)
- end
randomseed(n)
last = random(0,maxcount) -- we need an initial value
+ if trace_detail then
+ report_system("seed %s from %s",last,n)
+ elseif trace_random then
+ report_system("setting seed %s",n)
+ end
end
math.setrandomseedi = setrandomseedi
local function getrandomnumber(min,max)
last = random(min,max)
+ if trace_detail then
+ report_system("number %s",last)
+ end
return last
end
@@ -56,19 +69,19 @@ local function getrandomseed()
return last
end
-local function getmprandomnumber()
- last = random(0,4095)
- if trace_random_mp then
- report_system("using mp seed %s",last)
- end
- return last
-end
+-- local function getmprandomnumber()
+-- last = random(0,4095)
+-- if trace_detail then
+-- report_system("mp number %s",last)
+-- end
+-- return last
+-- end
-- maybe stack
local function pushrandomseed()
insert(stack,last)
- if trace_random then
+ if trace_random or trace_detail then
report_system("pushing seed %s",last)
end
end
@@ -76,7 +89,7 @@ end
local function reuserandomseed(n)
local seed = stack[#stack]
if seed then
- if trace_random then
+ if trace_random or trace_detail then
report_system("reusing seed %s",last)
end
randomseed(seed)
@@ -86,19 +99,47 @@ end
local function poprandomseed()
local seed = remove(stack)
if seed then
- if trace_random then
+ if trace_random or trace_detail then
report_system("popping seed %s",seed)
end
randomseed(seed)
end
end
+local function getrandom(where,...)
+ if type(where) == "string" then
+ local n = random(...)
+ if trace_detail then
+ report_system("%s %s",where,n)
+ end
+ return n
+ else
+ local n = random(where,...)
+ if trace_detail then
+ report_system("utilities %s",n)
+ end
+ return n
+ end
+end
+
+utilities.randomizer = {
+ setseedi = setrandomseedi,
+ getnumber = getrandomnumber,
+ setseed = setrandomseed,
+ getseed = getrandomseed,
+ -- getmpnumber = getmprandomnumber,
+ pushseed = pushrandomseed,
+ reuseseed = reuserandomseed,
+ popseed = poprandomseed,
+ get = getrandom,
+}
+
-- todo: also open up in utilities.randomizer.*
implement { name = "getrandomnumber", actions = { getrandomnumber, context }, arguments = { "integer", "integer" } }
implement { name = "getrandomdimen", actions = { getrandomnumber, context }, arguments = { "dimen", "dimen" } }
implement { name = "getrandomfloat", actions = { getrandomnumber, context }, arguments = { "number", "number" } }
-implement { name = "getmprandomnumber", actions = { getmprandomnumber, context } }
+--------- { name = "getmprandomnumber", actions = { getmprandomnumber, context } }
implement { name = "setrandomseed", actions = { setrandomseed }, arguments = { "integer" } }
implement { name = "getrandomseed", actions = { getrandomseed, context } }
implement { name = "pushrandomseed", actions = { pushrandomseed } }
diff --git a/tex/context/base/mkiv/supp-ran.mkiv b/tex/context/base/mkiv/supp-ran.mkiv
index f7cfd6e73..5b70a075f 100644
--- a/tex/context/base/mkiv/supp-ran.mkiv
+++ b/tex/context/base/mkiv/supp-ran.mkiv
@@ -20,11 +20,11 @@
\unprotect
-\unexpanded\def\getrandomcount #1#2#3{#1=\clf_getrandomnumber#2 #3\relax}
-\unexpanded\def\getrandomdimen #1#2#3{#1=\clf_getrandomdimen#2 #3 \scaledpoint\relax}
-\unexpanded\def\getrandomnumber#1#2#3{\edef#1{\clf_getrandomnumber#2 #3}}
-\unexpanded\def\getrandomfloat #1#2#3{\edef#1{\clf_getrandomfloat#2 #3}}
-\unexpanded\def\setrandomseed #1{\clf_setrandomseed#1\relax}
+\unexpanded\def\getrandomcount #1#2#3{#1=\clf_getrandomnumber\numexpr#2\relax\numexpr#3\relax\relax}
+\unexpanded\def\getrandomdimen #1#2#3{#1=\clf_getrandomdimen\dimexpr#2\relax\dimexpr#3\relax\scaledpoint\relax}
+\unexpanded\def\getrandomnumber#1#2#3{\edef#1{\clf_getrandomnumber\numexpr#2\relax\numexpr#3\relax}}
+\unexpanded\def\getrandomfloat #1#2#3{\edef#1{\clf_getrandomfloat\dimexpr#2\relax\dimexpr#3\relax}}
+\unexpanded\def\setrandomseed #1{\clf_setrandomseed\numexpr#1\relax}
\unexpanded\def\getrandomseed #1{\edef#1{\clf_getrandomseed}}
\unexpanded\def\pushrandomseed {\clf_pushrandomseed}
\unexpanded\def\poprandomseed {\clf_poprandomseed}
diff --git a/tex/context/base/mkiv/supp-vis.mkiv b/tex/context/base/mkiv/supp-vis.mkiv
index 8b9420162..e12c4c534 100644
--- a/tex/context/base/mkiv/supp-vis.mkiv
+++ b/tex/context/base/mkiv/supp-vis.mkiv
@@ -1360,7 +1360,7 @@
%D \ShowBufferedExample
\def\supp_visualizers_hglue_indeed
- {\leavevmode
+ {\leavevmode % plain tex uses this
\scratchcounter\spacefactor
\visualvrule\s!width\zeropoint
\normalpenalty\plustenthousand
diff --git a/tex/context/base/mkiv/symb-emj.lua b/tex/context/base/mkiv/symb-emj.lua
new file mode 100644
index 000000000..3075e0985
--- /dev/null
+++ b/tex/context/base/mkiv/symb-emj.lua
@@ -0,0 +1,82 @@
+if not modules then modules = { } end modules ['symb-emj'] = {
+ version = 1.001,
+ comment = "companion to symb-emj.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local symbols = fonts.symbols
+
+-- emoji
+
+-- processors.hpack_filter does it all
+
+local resolvedemoji = characters.emoji.resolve
+local processfeatures = fonts.handlers.otf.featuresprocessor
+local injectspacing = nodes.injections.handler
+local protectglyphs = nodes.handlers.protectglyphs
+local tonodes = nodes.tonodes
+local currentfont = font.current
+
+-- fast enough, no need to memoize
+
+local glyph_code = nodes.nodecodes.glyph
+local remove_node = nodes.remove
+local getid = nodes.getid
+local getnext = nodes.getnext
+local getchar = nodes.getchar
+
+local function removemodifiers(head)
+ local current = head
+ while current do
+ if getid(current) == glyph_code then
+ local char = getchar(current) -- using categories is too much
+ if char == 0x200D or (char >= 0x1F3FB and char <= 0x1F3FF) then
+ head, current = remove_node(head,current,true)
+ else
+ current = getnext(current)
+ end
+ else
+ current = getnext(current)
+ end
+ end
+ return head
+end
+
+-- attributes
+
+local function checkedemoji(name,id)
+ local str = resolvedemoji(name)
+ if str then
+ if not id then
+ id = currentfont()
+ end
+ local head = tonodes(str,id,nil,nil,true) -- use current attributes
+ head = processfeatures(head,id,false)
+ if head then
+ head = injectspacing(head)
+ protectglyphs(head)
+ return removemodifiers(head)
+ end
+ end
+end
+
+symbols.emoji = {
+ resolved = resolvedemoji,
+ checked = checkedemoji,
+}
+
+interfaces.implement {
+ name = "resolvedemoji",
+ actions = { resolvedemoji, context.escaped },
+ arguments = "string",
+}
+
+interfaces.implement {
+ name = "checkedemoji",
+ actions = { checkedemoji, context },
+ arguments = "string",
+}
+
+
diff --git a/tex/context/base/mkiv/symb-emj.mkiv b/tex/context/base/mkiv/symb-emj.mkiv
new file mode 100644
index 000000000..22d8b4a07
--- /dev/null
+++ b/tex/context/base/mkiv/symb-emj.mkiv
@@ -0,0 +1,27 @@
+%D \module
+%D [ file=symb-emj,
+%D version=2017.04.21,
+%D title=\CONTEXT\ Symbol Libraries,
+%D subtitle=Emoji,
+%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 Symbol Libraries / Emoji}
+
+\registerctxluafile{symb-emj}{1.001}
+
+\unprotect
+
+ \def\expandedemoji#1{\clf_resolvedemoji{#1}}
+\unexpanded\def\resolvedemoji#1{\clf_resolvedemoji{#1}}
+\unexpanded\def\checkedemoji #1{\clf_checkedemoji {#1}}
+\unexpanded\def\emoji #1{\dontleavehmode{\setdirectsymbolicfont{emoji}\clf_resolvedemoji{#1}}}
+\unexpanded\def\robustemoji #1{\dontleavehmode{\setdirectsymbolicfont{emoji}\clf_checkedemoji {#1}}}
+
+
+\protect \endinput
diff --git a/tex/context/base/mkiv/syst-aux.lua b/tex/context/base/mkiv/syst-aux.lua
index 98b92cef3..34e5c4e88 100644
--- a/tex/context/base/mkiv/syst-aux.lua
+++ b/tex/context/base/mkiv/syst-aux.lua
@@ -121,6 +121,7 @@ implement {
-- \gdef\setpercentdimen#1#2%
-- {#1=\ctxcommand{percentageof("#2",\number#1)}\relax}
+local space = P(" ") / ""
local spaces = P(" ")^0 / ""
local nohash = 1 - P("#")
local digit = R("09")
@@ -130,27 +131,147 @@ 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
+-- first variant:
+--
+-- local texpreamble = nil
+-- local usespaces = 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
+
+-- second variant:
+--
+-- -- default:
+-- --
+-- -- setcatcode(32,10) -- space
+-- -- setcatcode(13, 9) -- ignore
+--
+-- local function catcodes_s()
+-- setcatcode(32,10) -- space
+-- setcatcode(13, 5) -- endofline
+-- return ""
+-- end
+--
+-- local function catcodes_n()
+-- setcatcode(32, 9) -- ignore
+-- setcatcode(13, 9) -- ignore
+-- return ""
+-- end
+--
+-- local pattern = Cs( -- ^-1
+-- ( P("spaces") * space / catcodes_s )^0
+-- * spaces * ( P("nospaces") * space / catcodes_n )^0
+-- * spaces * ( P("global") * space / "\\global" )^0
+-- * spaces * ( P("unexpanded") * space / "\\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 texpreamble = nil
+--
+-- local ctx_dostarttexdefinition = context.dostarttexdefinition
+--
+-- local function texdefinition_one(str)
+-- texpreamble = lpegmatch(pattern,str)
+-- ctx_dostarttexdefinition()
+-- end
+--
+-- local function texdefinition_two()
+-- context(texpreamble)
+-- end
+
+-- third variant:
+
+local global = nil
+local unexpanded = nil
+local expanded = nil
+local optional = nil
+local csname = nil
+local rest = nil
+
+local function catcodes_s()
+ setcatcode(32,10) -- space
+ setcatcode(13, 5) -- endofline
+end
+
+local function catcodes_n()
+ setcatcode(32, 9) -- ignore
+ setcatcode(13, 9) -- ignore
+end
+
+local space = P(" ")
+local spaces = space^0
+
+local option = (
+ P("single")
+ + P("double")
+ + P("triple")
+ + P("quadruple")
+ + P("quintuple")
+ + P("sixtuple")
+ ) * (P("empty") + P("argument"))
+
+local pattern = (
+ ( P("spaces") * space / catcodes_s )^0
+ * spaces * ( P("nospaces") * space / catcodes_n )^0
+ * spaces * ( P("global") * space * Cc(true) + Cc(false) )
+ * spaces * ( P("unexpanded") * space * Cc(true) + Cc(false) )
+ * spaces * ( P("expanded") * space * Cc(true) + Cc(false) )
+ * spaces * ( C(option) * space + Cc(false) )
+ * spaces * ( C((1-S(" #["))^1) )
+ * spaces * Cs(
( P("[") * dargument * P("]") + dargument)^1 * sentinel^-1 * double^-1
+ ( P("[") * sargument * P("]") + sargument)^1 * sentinel^-1 * single^-1
+ sentinel^-1 * (double+single)^-1
@@ -160,24 +281,43 @@ local pattern = Cs( -- ^-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
+ global, unexpanded, expanded, optional, csname, rest = lpegmatch(pattern,str)
ctx_dostarttexdefinition()
end
local function texdefinition_two()
- context(texpreamble)
+ if optional then
+ context (
+ [[\unexpanded\expandafter]] ..
+ (global and [[\xdef]] or [[\edef]]) ..
+ [[\csname ]] ..
+ csname ..
+ [[\endcsname{\expandafter\noexpand\expandafter\do]] ..
+ optional ..
+ [[\csname _do_]] ..
+ csname ..
+ -- [[_\endcsname}\unexpanded\expandafter]] ..
+ [[_\endcsname}\expandafter]] ..
+ (global and [[\gdef]] or [[\edef]]) ..
+ [[\csname _do_]] ..
+ csname ..
+ [[_\endcsname ]] ..
+ rest
+ )
+ else
+ context (
+ [[\unexpanded\expandafter]] ..
+ ( global and (
+ expanded and [[\xdef]] or [[\gdef]]
+ ) or (
+ expanded and [[\edef]] or [[\def]]
+ ) ) ..
+ [[\csname ]] ..
+ csname ..
+ [[\endcsname ]] ..
+ rest
+ )
+ end
end
implement { name = "texdefinition_one", actions = texdefinition_one, scope = "private", arguments = "string" }
diff --git a/tex/context/base/mkiv/syst-aux.mkiv b/tex/context/base/mkiv/syst-aux.mkiv
index 825d18636..eb5b3b90a 100644
--- a/tex/context/base/mkiv/syst-aux.mkiv
+++ b/tex/context/base/mkiv/syst-aux.mkiv
@@ -3040,7 +3040,7 @@
\endgroup}
%D \macros
-%D {writestring,writeline,writebanner,
+%D {writestring,writeline,
%D writestatus,statuswidth,normalwritestatus}
%D
%D Maybe one didn't notice, but we've already introduced a
@@ -3063,11 +3063,8 @@
\ifdefined\writestring \else
- \newtoks\everywritestring
-
- \def\writedirect {\immediate\write\statuswrite}
- \def\writeline {\writedirect{}}
- \unexpanded\def\writestring#1{\begingroup\the\everywritestring\writedirect{#1}\endgroup}
+ \unexpanded\def\writestring{\immediate\write\statuswrite}
+ \unexpanded\def\writeline {\writestring{}}
\fi
@@ -3100,15 +3097,14 @@
%D a macro accepting two arguments and a boolean (in fact a
%D few macro's too).
-\newif\ifdebuggerinfo
-
-\unexpanded\def\debuggerinfo#1#2%
- {\ifdebuggerinfo
- \writestatus{debugger}{#1:: #2}%
- \fi}
-
-\ifdefined\writestatus \else \let\writestatus\normalwritestatus \fi
-\ifdefined\writebanner \else \unexpanded\def\writebanner{\writestring} \fi
+% \newif\ifdebuggerinfo
+%
+% \unexpanded\def\debuggerinfo#1#2%
+% {\ifdebuggerinfo
+% \writestatus{debugger}{#1:: #2}%
+% \fi}
+%
+% \ifdefined\writestatus \else \let\writestatus\normalwritestatus \fi
% % % % % % % % % % % % % % % % % % % % % % % %
@@ -3190,7 +3186,7 @@
%D are needed:
\unexpanded\def\newif#1%
- {\scratchcounter\escapechar
+ {\privatescratchcounter\escapechar
\escapechar\minusone
\expandafter\expandafter\expandafter
\redoglobal\expandafter\expandafter\expandafter
@@ -3199,7 +3195,7 @@
\redoglobal\expandafter\expandafter\expandafter
\edef\@if#1{false}{\let\noexpand#1\noexpand\iffalse}%
\dodoglobal\@if#1{false}%
- \escapechar\scratchcounter}
+ \escapechar\privatescratchcounter}
%D Also new:
@@ -3849,15 +3845,16 @@
\global\expandafter\def\csname\??recurseaction\recursedepth\endcsname##1##2{#4}%
\global\expandafter\let\csname\??recurseindex\recursedepth\endcsname\recurselevel
\csname\??recursestepwise
+ % we need the x in order to avoid the \relax that tex adds
\ifnum#3>\zerocount
- \ifnum#2<#1\else d\fi
+ \ifnum#2<#1x\else d\fi
\else\ifnum#3<\zerocount
- \ifnum#1<#2\else r\fi
+ \ifnum#1<#2x\else r\fi
\fi\fi
\expandafter\endcsname\normalexpanded{{\number#1}{\number#2}{\number#3}}}
% \expandafter\endcsname\expandafter{\number#1\expandafter}\expandafter{\number#2\expandafter}\expandafter{\number#3}}
-\letvalue{\??recursestepwise }\syst_helpers_stepwise_exit
+\letvalue{\??recursestepwise x}\syst_helpers_stepwise_exit
\letvalue{\??recursestepwise d}\syst_helpers_stepwise_recurse
\letvalue{\??recursestepwise r}\syst_helpers_stepwise_reverse
@@ -4200,9 +4197,9 @@
%D Watch the one level expansion of the second argument.
\unexpanded\def\doifelsemeaning#1#2%
- {\edef\m_syst_string_one{\meaning#1}%
+ {\edef\m_syst_string_one{\normalmeaning#1}%
\def \m_syst_string_two{#2}%
- \edef\m_syst_string_two{\meaning\m_syst_string_two}%
+ \edef\m_syst_string_two{\normalmeaning\m_syst_string_two}%
\ifx\m_syst_string_one\m_syst_string_two
\expandafter\firstoftwoarguments
\else
@@ -5141,6 +5138,25 @@
\expandafter\syst_helpers_split_string#1#2#2\empty\\}
%D \macros
+%D {splitatperiod,
+%D {splitatcomma,
+%D splitatasterisk,
+%D splitatcolon,
+%D splitatcolons}
+
+\unexpanded\def\splitatperiod #1{\normalexpanded{\syst_helpers_splitatperiod #1}..\relax}
+\unexpanded\def\splitatcomma #1{\normalexpanded{\syst_helpers_splitatcomma #1},,\relax} % not at ", "
+\unexpanded\def\splitatasterisk#1{\normalexpanded{\syst_helpers_splitatasterisk#1}**\relax}
+\unexpanded\def\splitatcolon #1{\normalexpanded{\syst_helpers_splitatcolon #1}::\relax}
+\unexpanded\def\splitatcolons #1{\normalexpanded{\syst_helpers_splitatcolons #1}::::\relax}
+
+\unexpanded\def\syst_helpers_splitatperiod #1.#2.#3\relax#4#5{\def#4{#1}\def#5{#2}}
+\unexpanded\def\syst_helpers_splitatcomma #1,#2,#3\relax#4#5{\def#4{#1}\def#5{#2}}
+\unexpanded\def\syst_helpers_splitatasterisk #1*#2*#3\relax#4#5{\def#4{#1}\def#5{#2}}
+\unexpanded\def\syst_helpers_splitatcolon #1:#2:#3\relax#4#5{\def#4{#1}\def#5{#2}}
+\unexpanded\def\syst_helpers_splitatcolons #1::#2::#3\relax#4#5{\edef#4{#1}\edef#5{#2}}
+
+%D \macros
%D {removesubstring}
%D
%D A first application of the two routines defined above is:
@@ -5526,7 +5542,7 @@
{\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}
+ \global\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{\csstring#1}%
@@ -6237,23 +6253,23 @@
{\def\m_syst_string_three{#1}%
\ifx\m_syst_string_two\m_syst_string_three \else
\ifx\m_syst_string_one\m_syst_string_three
- \advance\scratchcounter\plusone
+ \advance\privatescratchcounter\plusone
\fi
\expandafter\syst_helpers_count_token
\fi}
\unexpanded\def\counttoken#1\in#2\to#3%
- {\scratchcounter\zerocount
+ {\privatescratchcounter\zerocount
\def\m_syst_string_one{#1}%
\def\m_syst_string_two{\end}%
\syst_helpers_count_token#2\end
- \dodoglobal#3\scratchcounter}
+ \dodoglobal#3\privatescratchcounter}
\unexpanded\def\counttokens#1\to#2%
- {\scratchcounter\zerocount
- \def\syst_helpers_count_token##1{\advance\scratchcounter\plusone}%
+ {\privatescratchcounter\zerocount
+ \def\syst_helpers_count_token##1{\advance\privatescratchcounter\plusone}%
\handletokens#1\with\syst_helpers_count_token
- \dodoglobal#2\scratchcounter}
+ \dodoglobal#2\privatescratchcounter}
%D \macros
%D {splitofftokens}
@@ -6264,10 +6280,10 @@
\unexpanded\def\splitofftokens#1\from#2\to#3% slow but hardly used
{\ifnum#1>\zerocount
- \scratchcounter#1\relax
+ \privatescratchcounter#1\relax
\def\syst_helpers_split_off_tokens##1%
- {\ifnum\scratchcounter>\zerocount
- \advance\scratchcounter \minusone
+ {\ifnum\privatescratchcounter>\zerocount
+ \advance\privatescratchcounter \minusone
\edef#3{#3##1}%
\fi}%
% \let#3\empty % #3 can be #2, so:
@@ -6463,7 +6479,7 @@
{\afterassignment\gobblefourarguments#1=#2#3pt\relax\empty\empty\empty\empty}
\unexpanded\def\freezedimensionwithunit#1#2%
- {\setdimensionwithunit\scratchdimen#1{#2}\edef#1{\the\scratchdimen}}
+ {\setdimensionwithunit\privatescratchdimen#1{#2}\edef#1{\the\privatescratchdimen}}
%D \macros
%D {doifsometokselse, doifsometoks}
@@ -6718,7 +6734,7 @@
%D This is a dirty one: we simply append a unit and discard it when needed.
\def\doifelsedimension#1%
- {\afterassignment\syst_helpers_if_dimension_else\scratchdimen#1pt\relax}
+ {\afterassignment\syst_helpers_if_dimension_else\privatescratchdimen#1pt\relax}
\let\doifdimensionelse\doifelsedimension
@@ -6864,10 +6880,10 @@
\syst_helpers_unspaced}
\unexpanded\def\unspaceargument#1\to#2%
- {\scratchcounter\catcode\spaceasciicode
+ {\privatescratchcounter\catcode\spaceasciicode
\catcode\spaceasciicode\ignorecatcode
\scantextokens{\edef#2{#1}}%
- \catcode\spaceasciicode\scratchcounter}
+ \catcode\spaceasciicode\privatescratchcounter}
\unexpanded\def\unspaceafter#1#2%
{\unspaceargument#2\to\ascii
@@ -6924,7 +6940,7 @@
\def\syst_helpers_if_non_zero_positive_else#1#2\end % #3#4%
{\ifx#1\relax
- \ifcase\scratchcounter
+ \ifcase\privatescratchcounter
\endgroup
\doubleexpandafter\secondoftwoarguments
\else
@@ -6937,7 +6953,7 @@
\fi}
\def\doifelsenonzeropositive#1%
- {\begingroup\afterassignment\syst_helpers_if_non_zero_positive_else\scratchcounter=0#1\relax\empty\end}
+ {\begingroup\afterassignment\syst_helpers_if_non_zero_positive_else\privatescratchcounter=0#1\relax\empty\end}
\let\doifnonzeropositiveelse\doifelsenonzeropositive
@@ -7005,7 +7021,7 @@
\unexpanded\def\retestfeature % timer support is new per 10/5/2005
{\bgroup
\ifcase\interactionmode\let\wait\relax\fi
- \writestatus\m!system{starting feature test}\wait
+ \writestatus\m!system{starting feature test (n=\number\c_syst_helpers_test_feature_m)}\wait
\resettimer
\c_syst_helpers_test_feature_n\zerocount
\syst_helpers_test_feature_step
diff --git a/tex/context/base/mkiv/syst-ini.mkiv b/tex/context/base/mkiv/syst-ini.mkiv
index dc8300e7f..bbc856a5e 100644
--- a/tex/context/base/mkiv/syst-ini.mkiv
+++ b/tex/context/base/mkiv/syst-ini.mkiv
@@ -200,6 +200,16 @@
\countdef \normalpagebox = 127 \normalpagebox = 255 % hardcoded in pdftex/xetex
+% Only to be used by developers in very special cases!
+
+% \def\lastallocatedcount {\the\c_syst_last_allocated_count}
+% \def\lastallocateddimen {\the\c_syst_last_allocated_dimen}
+% \def\lastallocatedskip {\the\c_syst_last_allocated_skip}
+% \def\lastallocatedmuskip {\the\c_syst_last_allocated_muskip}
+% \def\lastallocatedbox {\the\c_syst_last_allocated_dimen}
+% \def\lastallocatedtoks {\the\c_syst_last_allocated_toks}
+% \def\lastallocatedattribute{\the\c_syst_last_allocated_attribute}
+
% A few traditional allocations (these might go):
\countdef \count@ = 255 % hm, used in \newif .. todo: replace it there
@@ -310,14 +320,15 @@
%D scratchtoks}
%D
%D We now define a few scratch registers, so that successive loads at least have
-%D some available.
+%D some available. The private ones are used in cases where we don't want to
+%D intrude on normal scratch ones.
-\newcount \scratchcounter \newcount \globalscratchcounter
-\newdimen \scratchdimen \newdimen \globalscratchdimen
-\newskip \scratchskip \newskip \globalscratchskip
-\newmuskip\scratchmuskip \newmuskip\globalscratchmuskip
-\newtoks \scratchtoks \newtoks \globalscratchtoks
-\newbox \scratchbox \newbox \globalscratchbox
+\newcount \scratchcounter \newcount \globalscratchcounter \newcount \privatescratchcounter
+\newdimen \scratchdimen \newdimen \globalscratchdimen \newdimen \privatescratchdimen
+\newskip \scratchskip \newskip \globalscratchskip \newskip \privatescratchskip
+\newmuskip\scratchmuskip \newmuskip\globalscratchmuskip \newmuskip\privatescratchmuskip
+\newtoks \scratchtoks \newtoks \globalscratchtoks \newtoks \privatescratchtoks
+\newbox \scratchbox \newbox \globalscratchbox \newbox \privatescratchbox
\newcount\scratchcounterone \newcount\scratchcountertwo \newcount\scratchcounterthree
\newdimen \scratchdimenone \newdimen \scratchdimentwo \newdimen \scratchdimenthree
@@ -384,6 +395,7 @@
\newdimen \onepoint \onepoint = 1pt
\newdimen \halfapoint \halfapoint = 0.5pt
\newdimen \maxdimen \maxdimen = 16383.99999pt
+\newcount \maxcount \maxcount = 2147483647
\newdimen \onebasepoint \onebasepoint = 1bp
\newdimen \scaledpoint \scaledpoint = 1sp
\newdimen \thousandpoint \thousandpoint = 1000pt
@@ -1153,7 +1165,20 @@
%D For now:
-\ifdefined\protrusionboundary \else \let\protrusionboundary\boundary \fi
-\ifdefined\wordboundary \else \let\wordboundary \noboundary \fi
+\ifdefined\protrusionboundary \else \let\protrusionboundary\boundary \fi
+\ifdefined\wordboundary \else \let\wordboundary \noboundary \fi
+
+\ifdefined\mathrulesfam \else \newcount\mathrulesfam \fi
+\ifdefined\mathrulesmode \else \newcount\mathrulesmode \fi
+\ifdefined\mathsurroundmode \else \newcount\mathsurroundmode \fi
+\ifdefined\mathitalicsmode \else \newcount\mathitalicsmode \fi
+
+\ifdefined\hyphenpenaltymode \else \newcount\hyphenpenaltymode \fi
+\ifdefined\automatichyphenpenalty \else \newcount\automatichyphenpenalty \fi
+\ifdefined\automatichyphenmode \else \newcount\automatichyphenmode \fi
+\ifdefined\explicithyphenpenalty \else \newcount\explicithyphenpenalty \fi
+
+\ifdefined\explicitdiscretionary \else \let\explicitdiscretionary \- \fi
+\ifdefined\automaticdiscretionary \else \def\automaticdiscretionary{\Uchar\exhyphenchar} \fi
\protect \endinput
diff --git a/tex/context/base/mkiv/syst-lua.lua b/tex/context/base/mkiv/syst-lua.lua
index 422f57a00..ee3b8c327 100644
--- a/tex/context/base/mkiv/syst-lua.lua
+++ b/tex/context/base/mkiv/syst-lua.lua
@@ -10,92 +10,70 @@ local find, match = string.find, string.match
local tonumber = tonumber
local S, C, P, lpegmatch, lpegtsplitat = lpeg.S, lpeg.C, lpeg.P, lpeg.match, lpeg.tsplitat
+commands = commands or { }
+local commands = commands
+local context = context
+local implement = interfaces.implement
-commands = commands or { }
-local commands = commands
-
-local implement = interfaces.implement
+local ctx_protected_cs = context.protected.cs -- more efficient
+local ctx_firstoftwoarguments = ctx_protected_cs.firstoftwoarguments
+local ctx_secondoftwoarguments = ctx_protected_cs.secondoftwoarguments
+local ctx_firstofoneargument = ctx_protected_cs.firstofoneargument
+local ctx_gobbleoneargument = ctx_protected_cs.gobbleoneargument
local two_strings = interfaces.strings[2]
-local context = context
-local csprint = context.sprint
-
-local prtcatcodes = tex.prtcatcodes
-
-implement { -- will b eoverloaded later
+implement { -- will be overloaded later
name = "writestatus",
arguments = two_strings,
actions = logs.status,
}
-local ctx_firstoftwoarguments = context.firstoftwoarguments -- context.constructcsonly("firstoftwoarguments" )
-local ctx_secondoftwoarguments = context.secondoftwoarguments -- context.constructcsonly("secondoftwoarguments")
-local ctx_firstofoneargument = context.firstofoneargument -- context.constructcsonly("firstofoneargument" )
-local ctx_gobbleoneargument = context.gobbleoneargument -- context.constructcsonly("gobbleoneargument" )
-
--- contextsprint(prtcatcodes,[[\ui_fo]]) -- ctx_firstofonearguments
--- contextsprint(prtcatcodes,[[\ui_go]]) -- ctx_gobbleonearguments
--- contextsprint(prtcatcodes,[[\ui_ft]]) -- ctx_firstoftwoarguments
--- contextsprint(prtcatcodes,[[\ui_st]]) -- ctx_secondoftwoarguments
-
function commands.doifelse(b)
if b then
ctx_firstoftwoarguments()
--- csprint(prtcatcodes,[[\ui_ft]]) -- ctx_firstoftwoarguments
else
ctx_secondoftwoarguments()
--- csprint(prtcatcodes,[[\ui_st]]) -- ctx_secondoftwoarguments
end
end
function commands.doifelsesomething(b)
if b and b ~= "" then
ctx_firstoftwoarguments()
--- csprint(prtcatcodes,[[\ui_ft]]) -- ctx_firstoftwoarguments
else
ctx_secondoftwoarguments()
--- csprint(prtcatcodes,[[\ui_st]]) -- ctx_secondoftwoarguments
end
end
function commands.doif(b)
if b then
ctx_firstofoneargument()
--- context.__flushdirect(prtcatcodes,[[\ui_fo]]) -- ctx_firstofonearguments
else
ctx_gobbleoneargument()
--- context.__flushdirect(prtcatcodes,[[\ui_go]]) -- ctx_gobbleonearguments
end
end
function commands.doifsomething(b)
if b and b ~= "" then
ctx_firstofoneargument()
--- context.__flushdirect(prtcatcodes,[[\ui_fo]]) -- ctx_firstofonearguments
else
ctx_gobbleoneargument()
--- context.__flushdirect(prtcatcodes,[[\ui_go]]) -- ctx_gobbleonearguments
end
end
function commands.doifnot(b)
if b then
ctx_gobbleoneargument()
--- csprint(prtcatcodes,[[\ui_go]]) -- ctx_gobbleonearguments
else
ctx_firstofoneargument()
--- csprint(prtcatcodes,[[\ui_fo]]) -- ctx_firstofonearguments
end
end
function commands.doifnotthing(b)
if b and b ~= "" then
ctx_gobbleoneargument()
--- csprint(prtcatcodes,[[\ui_go]]) -- ctx_gobbleonearguments
else
ctx_firstofoneargument()
--- csprint(prtcatcodes,[[\ui_fo]]) -- ctx_firstofonearguments
end
end
diff --git a/tex/context/base/mkiv/syst-mes.mkiv b/tex/context/base/mkiv/syst-mes.mkiv
index 4cd36e24b..3b16d7f97 100644
--- a/tex/context/base/mkiv/syst-mes.mkiv
+++ b/tex/context/base/mkiv/syst-mes.mkiv
@@ -11,12 +11,8 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newtoks\everywritestring
-
-\def\writedirect {\immediate\write\statuswrite}
-\def\writeline {\writedirect{}}
-\def\writestring#1{\begingroup\the\everywritestring\writedirect{#1}\endgroup}
-\let\writebanner \writestring
+\def\writestring {\immediate\write\statuswrite}
+\def\writeline {\writestring{}}
\let\message \normalmessage
\endinput
diff --git a/tex/context/base/mkiv/tabl-frm.mkiv b/tex/context/base/mkiv/tabl-frm.mkiv
new file mode 100644
index 000000000..639d6f06d
--- /dev/null
+++ b/tex/context/base/mkiv/tabl-frm.mkiv
@@ -0,0 +1,209 @@
+%D \module
+%D [ file=tabl-frm,
+%D version=2017.04.11,
+%D title=\CONTEXT\ Table Macros,
+%D subtitle=Framed Tables,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D For Thomas Schmitz who needed 3000 pages long tables.
+
+\unprotect
+
+\writestatus{loading}{ConTeXt Table Macros / Framed Tables}
+
+\installcorenamespace{framedtable}
+\installcorenamespace{framedtablerow}
+\installcorenamespace{framedtablecolumn}
+
+\newcount\c_tabl_framed_c
+\newcount\c_tabl_framed_r
+\newdimen\d_tabl_framed_h
+\newdimen\d_tabl_framed_d
+\newdimen\b_tabl_framed
+
+\initializeboxstack\??framedtable
+
+\defineframed[\??framedtable]
+\defineframed[\??framedtablerow][\??framedtable]
+\defineframed[\??framedtablecolumn][\??framedtable]
+
+\setupframed
+ [\??framedtable]
+ [\c!distance=\zeropoint,
+ \c!before=,
+ \c!after=,
+ \c!inbetween=]
+
+\setupframed
+ [\??framedtablerow]
+ [\c!strut=\v!no,
+ \c!offset=\v!overlay]
+
+% \defineframedtable[foo]
+% \defineframedtable[bar][foo]
+
+\unexpanded\def\defineframedtable
+ {\dodoubleempty\tabl_framed_define}
+
+\def\tabl_framed_define[#1][#2]%
+ {\ifsecondargument
+ \defineframed[\??framedtable#1][\??framedtable#2]%
+ \else\iffirstargument
+ \defineframed[\??framedtable#1][\??framedtable]%
+ \fi\fi}
+
+% \setupframedtable[foo][...]
+
+\unexpanded\def\setupframedtable
+ {\dodoubleempty\tabl_framed_setup}
+
+\def\tabl_framed_setup[#1][#2]%
+ {\ifsecondargument
+ \ifcsname\??framed:\??framedtable#1\endcsname \else
+ \defineframed[\??framedtable#1][\??framedtable]%
+ \fi
+ \setupframed[\??framedtable#1][#2]%
+ \else
+ \setupframed[\??framedtable][#1]%
+ \fi}
+
+% \setupframedtable[1][...]
+% \setupframedtable[foo][1][...]
+
+\unexpanded\def\setupframedtablerow
+ {\dotripleempty\tabl_framed_setup_row}
+
+\def\tabl_framed_setup_row[#1][#2][#3]%
+ {\ifthirdargument
+ \ifcsname\??framed:\??framedtable#1\endcsname \else
+ \defineframed[\??framedtable#1][\??framedtable]%
+ \fi
+ \ifcsname\??framed:\??framedtablerow#1:#2\endcsname \else
+ \defineframed[\??framedtablerow#1:#2][\??framedtable#1]%
+ \fi
+ \setupframed[\??framedtablerow#1:#2][#3]%
+ \else\ifsecondargument
+ \ifcsname\??framed:\??framedtablerow:#1\endcsname \else
+ \defineframed[\??framedtablerow:#1][\??framedtable]%
+ \fi
+ \setupframed[\??framedtablerow:#1][#2]%
+ \fi\fi}
+
+\unexpanded\def\setupframedtablecolumn
+ {\dotripleempty\tabl_framed_setup_column}
+
+\def\tabl_framed_setup_column[#1][#2][#3]%
+ {\ifthirdargument
+ \ifcsname\??framed:\??framedtable#1\endcsname \else
+ \defineframed[\??framedtable#1][\??framedtable]%
+ \fi
+ \ifcsname\??framed:\??framedtablecolumn#1:#2\endcsname \else
+ \defineframed[\??framedtablecolumn#1:#2][\??framedtable#1]%
+ \fi
+ \setupframed[\??framedtablecolumn#1:#2][#3]%
+ \else\ifsecondargument
+ \ifcsname\??framed:\??framedtablecolumn:#1\endcsname \else
+ \defineframed[\??framedtablecolumn:#1][\??framedtable]%
+ \fi
+ \setupframed[\??framedtablecolumn:#1][#2]%
+ \fi\fi}
+
+\unexpanded\def\startframedtable
+ {\dodoubleempty\tabl_framed_start}
+
+\unexpanded\def\tabl_framed_start[#1][#2]%
+ {\begingroup
+ \forgetall
+ \doifelseassignment{#1}%
+ {\let\currentframedtable\empty
+ \setupframed[\??framedtable][#1]}%
+ {\edef\currentframedtable{#1}%
+ \setupframed[\??framedtable][#2]}%
+ \edef\currentframed{\??framedtable\currentframedtable}%
+ \c_tabl_framed_r\zerocount
+ \d_tabl_framed_d\framedparameter\c!distance
+ \framedparameter\c!before}
+
+\unexpanded\def\stopframedtable
+ {\framedparameter\c!after
+ \endgroup}
+
+\unexpanded\def\startframedrow
+ {\advance\c_tabl_framed_r\plusone
+ \c_tabl_framed_c\zerocount
+ \d_tabl_framed_h\zeropoint
+ \bgroup
+ \edef\currentframed{\number\c_tabl_framed_r}%
+ \edef\currentframed
+ {\??framedtablerow\currentframedtable
+ \ifcsname\??framedtablerow\currentframedtable:\currentframed\endcsname
+ :\currentframed
+ \else\ifcsname\??framedtablerow\currentframedtable:\v!each\endcsname
+ :\v!each
+ \fi\fi}%
+ \dosingleempty\pack_framed_start_framed_nop_indeed}
+
+\unexpanded\def\stopframedrow
+ {\dofastloopcs\c_tabl_framed_c\tabl_framed_flush_row
+ \stopframed
+ \nointerlineskip
+ \vskip\zeropoint\relax
+ \framedparameter\c!inbetween}
+
+\unexpanded\def\tabl_framed_flush_row
+ {\vpack to \d_tabl_framed_h{\flushbox\??framedtable{\number\fastloopindex}\vfill}%
+ \ifdim\d_tabl_framed_d=\zeropoint\else\kern\d_tabl_framed_d\fi}
+
+\unexpanded\def\startframedcell
+ {\advance\c_tabl_framed_c\plusone
+ \setbox\b_tabl_framed\hpack\bgroup
+ %\bgroup
+ \edef\currentframed{\number\c_tabl_framed_c}%
+ \edef\currentframed
+ {\??framedtablecolumn\currentframedtable
+ \ifcsname\??framedtablecolumn\currentframedtable:\currentframed\endcsname
+ :\currentframed
+ \else\ifcsname\??framedtablecolumn\currentframedtable:\v!each\endcsname
+ :\v!each
+ \fi\fi}%
+ \dosingleempty\pack_framed_start_framed_nop_indeed}
+
+\unexpanded\def\stopframedcell
+ {\stopframed
+ %\egroup
+ \ifdim\ht\b_tabl_framed>\d_tabl_framed_h
+ \d_tabl_framed_h\ht\b_tabl_framed
+ \fi
+ \savebox\??framedtable{\number\c_tabl_framed_c}{\box\b_tabl_framed}}
+
+\protect \endinput
+
+\starttext
+
+\setupframedtablecolumn [1] [width=3cm,background=color,backgroundcolor=red]
+\setupframedtablecolumn [2] [width=4cm,background=color,backgroundcolor=green,align=normal]
+% \setupframedtablerow [each] [background=color,backgroundcolor=blue,strut=no]
+% \setupframedtablerow [each] [strut=no,offset=overlay]
+
+\startframedtable[inbetween=\kern-0.4pt,distance=-0.4pt]
+
+\testfeatureonce{10000}{
+% \testfeatureonce{10}{
+ \startframedrow
+ \startframedcell%[backgroundcolor=yellow]
+ test
+ \stopframedcell
+ \startframedcell
+ test \par test
+ \stopframedcell
+ \stopframedrow
+}
+\stopframedtable
+
+\stoptext
diff --git a/tex/context/base/mkiv/tabl-ltb.mkiv b/tex/context/base/mkiv/tabl-ltb.mkiv
index b0e3f52e4..3147fa1cc 100644
--- a/tex/context/base/mkiv/tabl-ltb.mkiv
+++ b/tex/context/base/mkiv/tabl-ltb.mkiv
@@ -474,7 +474,8 @@
\ifconditional\c_tabl_lines_preroll \else
\box\b_tabl_lines_cell
% the columncounter is one ahead !
- \dorecurse\c_tabl_lines_step{\strut\hfil}%
+% \dorecurse\c_tabl_lines_step{\strut\hfil}%
+\strut
\hskip\scratchskip
\fi
\fi}
diff --git a/tex/context/base/mkiv/tabl-ntb.mkiv b/tex/context/base/mkiv/tabl-ntb.mkiv
index 78e867546..276f85d31 100644
--- a/tex/context/base/mkiv/tabl-ntb.mkiv
+++ b/tex/context/base/mkiv/tabl-ntb.mkiv
@@ -107,16 +107,18 @@
{% \inhibitblank
\dotagTABLEcell
%\tabl_ntb_next_level
+ \font_styles_math_reset
\usenaturaltablelocalstyleandcolor\c!style\c!color
- \everypar\t_tabl_ntb_cell_start}
+ \everypar\t_tabl_ntb_cell_start
+ \font_styles_math_start}
\unexpanded\def\tabl_ntb_cell_stop
- {\ifhmode
+ {\font_styles_math_stop
+ \ifhmode
\the\t_tabl_ntb_cell_stop
\par % added 13/4/2006
\else
% not sure yet:\naturaltablelocalparameter\c!right
- \par
\ifdim\prevdepth<\zeropoint % =-1000pt ?
\vskip-\strutdp
\else
@@ -124,6 +126,24 @@
\fi
\fi}
+% maybe:
+%
+% \unexpanded\def\tabl_ntb_cell_stop
+% {\ifhmode
+% \the\t_tabl_ntb_cell_stop
+% \par % added 13/4/2006
+% \else
+% % not sure yet:\naturaltablelocalparameter\c!right
+% \par
+% \ifhmode
+% % \removeunwantedspaces
+% \else\ifdim\prevdepth<\zeropoint % =-1000pt ?
+% \vskip-\strutdp
+% \else
+% \removebottomthings
+% \fi\fi
+% \fi}
+
\newcount\c_tabl_ntb_row
\newcount\c_tabl_ntb_col
\newcount\c_tabl_ntb_spn
@@ -235,6 +255,7 @@
\installcorenamespace{naturaltablehei}
\installcorenamespace{naturaltabledis}
\installcorenamespace{naturaltableaut}
+\installcorenamespace{naturaltablebck}
%installcorenamespace{naturaltablefwd} % forcedwidth
\installcorenamespace{naturaltabletxt}
\installcorenamespace{naturaltablespn}
@@ -259,7 +280,7 @@
\def\tabl_ntb_set_nob#1{\expandafter\let\csname\??naturaltablenob\m_tabl_tbl_level:\number#1\endcsname\plusone}
\def\tabl_ntb_get_nob#1{\ifcsname\??naturaltablenob\m_tabl_tbl_level:\number#1\endcsname\plusone\else\zerocount\fi}
-\def\tabl_ntb_set_tag#1#2{\expandafter\edef\csname\??naturaltabletag\m_tabl_tbl_level:\number#1:\number#2\endcsname}
+%def\tabl_ntb_set_tag#1#2{\expandafter\edef\csname\??naturaltabletag\m_tabl_tbl_level:\number#1:\number#2\endcsname}
\def\tabl_ntb_set_col#1#2{\expandafter\edef\csname\??naturaltablecol\m_tabl_tbl_level:\number#1:\number#2\endcsname}
\def\tabl_ntb_set_row#1#2{\expandafter\edef\csname\??naturaltablerow\m_tabl_tbl_level:\number#1:\number#2\endcsname}
@@ -267,17 +288,17 @@
\def\tabl_ntb_let_col#1#2{\expandafter\let\csname\??naturaltablecol\m_tabl_tbl_level:\number#1:\number#2\endcsname}
\def\tabl_ntb_let_row#1#2{\expandafter\let\csname\??naturaltablerow\m_tabl_tbl_level:\number#1:\number#2\endcsname}
-\def\tabl_ntb_set_wd#1#2{\expandafter\xdef\csname\??naturaltablewd\m_tabl_tbl_level:\number#1:\number#2\endcsname} % global !
+%def\tabl_ntb_set_wd#1#2{\expandafter\xdef\csname\??naturaltablewd\m_tabl_tbl_level:\number#1:\number#2\endcsname} % global !
\def\tabl_ntb_set_ht#1#2{\expandafter\xdef\csname\??naturaltableht\m_tabl_tbl_level:\number#1:\number#2\endcsname} % global !
-\def\tabl_ntb_let_wd#1#2{\global\expandafter\let\csname\??naturaltablewd\m_tabl_tbl_level:\number#1:\number#2\endcsname} % global !
+%def\tabl_ntb_let_wd#1#2{\global\expandafter\let\csname\??naturaltablewd\m_tabl_tbl_level:\number#1:\number#2\endcsname} % global !
\def\tabl_ntb_let_ht#1#2{\global\expandafter\let\csname\??naturaltableht\m_tabl_tbl_level:\number#1:\number#2\endcsname} % global !
\def\tabl_ntb_get_tag#1#2{\csname\??naturaltabletag\m_tabl_tbl_level:\number#1:\number#2\endcsname}
\def\tabl_ntb_get_col#1#2{\csname\??naturaltablecol\m_tabl_tbl_level:\number#1:\number#2\endcsname}
\def\tabl_ntb_get_row#1#2{\csname\??naturaltablerow\m_tabl_tbl_level:\number#1:\number#2\endcsname}
-\def\tabl_ntb_get_wd#1#2{\csname\??naturaltablewd\m_tabl_tbl_level:\number#1:\number#2\endcsname}
+%def\tabl_ntb_get_wd#1#2{\csname\??naturaltablewd\m_tabl_tbl_level:\number#1:\number#2\endcsname}
\def\tabl_ntb_get_ht#1#2{\csname\??naturaltableht\m_tabl_tbl_level:\number#1:\number#2\endcsname}
\def\tabl_ntb_set_wid#1{\expandafter\xdef\csname\??naturaltablewid\m_tabl_tbl_level:\number#1\endcsname} % {#2} global !
@@ -295,6 +316,10 @@
\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_let_bck#1#2{\global\expandafter\chardef\csname\??naturaltablebck\m_tabl_tbl_level:\number#1:\number#2\endcsname}
+
+\def\tabl_ntb_get_bck#1#2{\csname\??naturaltablebck\m_tabl_tbl_level:\number#1:\number#2\endcsname}
+
\def\tabl_ntb_tag_pattern#1#2{\??naturaltabletag\m_tabl_tbl_level:\number#1:\number#2}
\def\tabl_ntb_row_pattern#1#2{\??naturaltablerow\m_tabl_tbl_level:\number#1:\number#2}
\def\tabl_ntb_col_pattern#1#2{\??naturaltablecol\m_tabl_tbl_level:\number#1:\number#2}
@@ -1089,7 +1114,7 @@
\fi
\fi
\tabl_ntb_let_ht\c_tabl_ntb_current_row\c_tabl_ntb_current_col\zeropoint
- \tabl_ntb_let_wd\c_tabl_ntb_current_row\c_tabl_ntb_current_col\zeropoint
+ %tabl_ntb_let_wd\c_tabl_ntb_current_row\c_tabl_ntb_current_col\zeropoint
\ifcsname\tabl_ntb_col_pattern\c_tabl_ntb_current_row\c_tabl_ntb_current_col\endcsname \else
\tabl_ntb_let_col\c_tabl_ntb_current_row\c_tabl_ntb_current_col\zerocount
\fi
@@ -1167,7 +1192,7 @@
\global\let\m_tabl_ntb_same_page \empty}
\def\tabl_ntb_prelocate_error
- {\writestatus\m!system{fatal error: use \string\prelocateTBLrows\space to increase table memory (now: \the\c_tabl_prelocated_rows)}}
+ {\writestatus\m!TABLE{fatal error: use \string\prelocateTBLrows\space to increase table memory (now: \the\c_tabl_prelocated_rows)}}
% \prelocateTBLrows{1000} % may speed up large tables
@@ -1288,7 +1313,8 @@
\dostoptagged}
\unexpanded\def\tabl_ntb_span#1%
- {\dorecurse{#1}
+ {\hskip\tabl_ntb_get_dis\c_tabl_ntb_col
+ \dorecurse{#1}
{\hskip\tabl_ntb_get_wid\c_tabl_ntb_col\relax
\global\advance\c_tabl_ntb_col\plusone}}
@@ -1367,7 +1393,7 @@
\fi
\setbox\scratchbox\hbox{\tabl_ntb_get_txt{#1}{#2}}%
\tabl_ntb_set_ht{#1}{#2}{\the\ht\scratchbox}%
- \tabl_ntb_set_wd{#1}{#2}{\the\wd\scratchbox}%
+ %tabl_ntb_set_wd{#1}{#2}{\the\wd\scratchbox}%
\ifdim\ht\scratchbox>\tabl_ntb_get_hei{#1}\relax
\tabl_ntb_set_hei{#1}{\the\ht\scratchbox}%
\fi}%
@@ -1459,6 +1485,20 @@
\let\tabl_ntb_preroll\relax
+\def\tabl_ntb_table_get_max_width#1#2%
+ {#1\wd#2\relax}
+
+% first needs testing (in projects):
+%
+% \def\tabl_ntb_table_get_max_width#1#2%
+% {#1\zeropoint
+% \dorecurse\c_tabl_ntb_maximum_col
+% {\advance#1\tabl_ntb_get_wid\recurselevel
+% \advance#1\tabl_ntb_get_dis\recurselevel}%
+% \ifdim#1<\wd#2\relax
+% #1\wd#2\relax
+% \fi}
+
\def\tabl_ntb_table_stop
{\forgetall % new, here see narrower-004.tex
%\setbox\scratchbox\hbox
@@ -1472,7 +1512,7 @@
% new
\c_tabl_ntb_current_col_one\recurselevel\relax
\dorecurse\c_tabl_ntb_maximum_row
- {\tabl_ntb_let_wd\recurselevel\c_tabl_ntb_current_col_one\zeropoint
+ {%tabl_ntb_let_wd\recurselevel\c_tabl_ntb_current_col_one\zeropoint
\tabl_ntb_let_ht\recurselevel\c_tabl_ntb_current_col_one\zeropoint}%
% till here
\tabl_ntb_let_tal\recurselevel\zerocount
@@ -1481,7 +1521,7 @@
\dorecurse\c_tabl_ntb_maximum_row
{\tabl_ntb_let_hei\recurselevel\maxdimen}%
\tabl_ntb_let_gal\zerocount
-\tabl_ntb_preroll\relax
+ \tabl_ntb_preroll\relax
\c_tabl_tbl_pass\plusone
\let\tabl_ntb_pass\tabl_ntb_pass_one
\let\tabl_ntb_cell_process\tabl_ntb_cell_process_a
@@ -1493,6 +1533,9 @@
\setbox\scratchbox\vbox{\settrialtypesetting \tabl_ntb_flush_content}%
\fi
\tabl_ntb_let_dis\c_tabl_ntb_maximum_col\zeropoint
+ %
+ \tabl_ntb_table_get_max_width\scratchdimen\scratchbox
+ %
\ifautoTBLspread
% experimental, stretch non fixed cells to \hsize
\tabl_ntb_check_widths_one % trial run
@@ -1500,7 +1543,8 @@
\tabl_ntb_stretch_widths
\let\tabl_ntb_cell_process\tabl_ntb_cell_process_b
\setbox\scratchbox\vbox{\settrialtypesetting \tabl_ntb_flush_content}%
- \else\ifdim\wd\scratchbox>\hsize
+ % \else\ifdim\wd\scratchbox>\hsize
+ \else\ifdim\scratchdimen>\hsize
\ifautoTBLhsize
\tabl_ntb_check_widths_one % trial run
\tabl_ntb_check_widths_two % real run
@@ -1514,7 +1558,8 @@
\writestatus\m!TABLE{missing\space\number\numexpr\c_tabl_ntb_maximum_col-\c_tabl_ntb_encountered_max\relax\space column(s), guessing widths}%
\fi
\edef\savedhsize{\the\hsize}%
- \hsize\wd\scratchbox\relax % new per 17/04/2006
+ % \hsize\wd\scratchbox\relax % new per 17/04/2006
+ \hsize\scratchdimen\relax % new per 17/04/2006
\tabl_ntb_check_widths_one % trial run
\tabl_ntb_check_widths_two % real run
\hsize\savedhsize
@@ -1573,9 +1618,10 @@
% \hbox{\registerparoptions\box\b_tabl_ntb_final}% (*) better here
% better :
\ifinsidefloat
- % nothing, else we get a \hsized box
+ % no \dontleavehmode else too wide, otherwise we get a \hsized box
\else
- \registerparoptions % (*) better here
+ \registerparoptions % (*) better here (also does a \dontleavehmode)
+ \ifhmode\else\dontleavehmode\fi
\fi
\box\b_tabl_ntb_final
\afterTABLEbox}
@@ -1632,11 +1678,11 @@
\let\beforeTABLEbox \relax
\let\afterTABLEbox \relax
-\def\tabl_ntb_check_widths_one{\tabl_ntb_check_widths_indeed0} % 0 = trial run
-\def\tabl_ntb_check_widths_two{\tabl_ntb_check_widths_indeed1} % 1 = real run
+\def\tabl_ntb_check_widths_one{\tabl_ntb_check_widths_indeed\zerocount} % 0 = trial run
+\def\tabl_ntb_check_widths_two{\tabl_ntb_check_widths_indeed\plusone } % 1 = real run
\def\tabl_ntb_check_widths_indeed#1%
- {\iftraceTABLE\tabl_ntb_show_widths{B#1}\fi
+ {\iftraceTABLE\tabl_ntb_show_widths B#1\fi
\!!counta\zerocount
\!!dimena\dimexpr
\hsize
@@ -1669,6 +1715,7 @@
\fi
\fi
\fi}%
+ \iftraceTABLE\tabl_ntb_show_widths M#1\fi
\ifcase\!!counta \else \divide\!!dimena \!!counta \fi
\dorecurse\c_tabl_ntb_maximum_col
{\scratchdimen\tabl_ntb_get_wid\recurselevel\relax
@@ -1681,7 +1728,7 @@
\tabl_ntb_set_wid\recurselevel{\the\!!dimena}%
\fi
\fi}%
- \iftraceTABLE\tabl_ntb_show_widths{E#1}\fi}
+ \iftraceTABLE\tabl_ntb_show_widths E#1\fi}
\def\tabl_ntb_check_heights_one_indeed
{\!!countb\tabl_ntb_get_row\c_tabl_ntb_current_row_three\c_tabl_ntb_current_col_three\relax
@@ -1754,13 +1801,15 @@
\def\tabl_ntb_check_heights_two
{}
-\def\tabl_ntb_show_widths#1%
- {\vbox
- {\forgetall
- \tttf[#1]%
- \dorecurse\c_tabl_ntb_maximum_col
- {\scratchdimen\tabl_ntb_get_wid\recurselevel\relax
- [\recurselevel:\the\scratchdimen]}}}
+\def\tabl_ntb_show_widths#1#2%
+ {\begingroup
+ \scratchdimen\zeropoint
+ \dorecurse\c_tabl_ntb_maximum_col
+ {\advance\scratchdimen\tabl_ntb_get_wid\recurselevel\relax}%
+ \writestatus\m!TABLE{#1 \ifcase#2trial\else real\fi: hsize: \the\hsize, total: \the\scratchdimen}%
+ \dorecurse\c_tabl_ntb_maximum_col
+ {\writestatus\m!TABLE{\space\space\recurselevel: \the\dimexpr\tabl_ntb_get_wid\recurselevel}}%
+ \endgroup}
% \def\tabl_ntb_char_align
% {\doifelse{\naturaltablelocalparameter\c!aligncharacter}\v!yes
@@ -1897,7 +1946,13 @@
\ifdim\scratchdimen>\tabl_ntb_get_dis{#2}\relax
\tabl_ntb_set_dis{#2}{\the\scratchdimen}%
\fi
- \inheritednaturaltablelocalframed{\tabl_ntb_cell_start\tabl_ntb_char_align{#1}{#2}#4\tabl_ntb_cell_stop\tabl_ntb_cell_finalize}}%
+ \anch_backgrounds_text_level_start
+ \inheritednaturaltablelocalframed{\tabl_ntb_cell_start\tabl_ntb_char_align{#1}{#2}#4\tabl_ntb_cell_stop\tabl_ntb_cell_finalize}%
+ \anch_backgrounds_text_level_stop
+\ifcase\c_anch_backgrounds_text_count\else
+ \tabl_ntb_let_bck{#1}{#2}\c_anch_backgrounds_text_state
+\fi
+ }%
\scratchdimen\tabl_ntb_get_wid\c_tabl_ntb_col\relax
\ifdim\wd\scratchbox>\scratchdimen
\ifsqueezeTBLspan
@@ -1913,7 +1968,7 @@
\tabl_ntb_set_hei\scratchcounter{\the\ht\scratchbox}% auto set
\fi
\tabl_ntb_set_ht{#1}{#2}{\the\ht\scratchbox}%
- \tabl_ntb_set_wd{#1}{#2}{\the\wd\scratchbox}%
+ %tabl_ntb_set_wd{#1}{#2}{\the\wd\scratchbox}%
\ifautoTBLcheckwidth
\ifdim\wd\scratchbox<.75\hsize % fuzzy guess
\ifdim\ht\scratchbox>2\openlineheight % honor width since this
@@ -1931,11 +1986,11 @@
\fi
\fi
\fi
- \setbox2\emptyhbox
- \wd2\wd\scratchbox
- \ht2\ht\scratchbox
- \dp2\dp\scratchbox
- \box2
+ \setbox\scratchboxone\emptyhbox
+ \wd\scratchboxone\wd\scratchbox
+ \ht\scratchboxone\ht\scratchbox
+ \dp\scratchboxone\dp\scratchbox
+ \box\scratchboxone
\egroup}
\unexpanded\def\tabl_ntb_cell_process_b_c#1#2#3[#4]#5%
@@ -2000,40 +2055,98 @@
\else
\setnaturaltablelocalparameter\c!height{\d_tabl_ntb_height}%
\fi
+\ifcase\c_anch_backgrounds_text_count\else
+ \edef\p_region{\naturaltablelocalparameter\c!region}%
+ \ifx\p_region\empty\ifnum\tabl_ntb_get_bck{#1}{#2}>\zerocount
+ \letnaturaltablelocalparameter\c!region\v!yes
+ \fi\fi
+\fi
\inheritednaturaltablelocalframed{\tabl_ntb_cell_start\tabl_ntb_char_align{#1}{#2}#4\tabl_ntb_cell_stop}}%
\hskip\tabl_ntb_get_dis{#2}}
-\setupTABLE
- [\c!frameoffset=.5\linewidth,
- \c!backgroundoffset=\v!frame,
- % \c!framecolor=\s!black,
- \c!width=\v!fit,
- \c!height=\v!fit,
- \c!autowidth=\v!yes,
- \c!rulethickness=\linewidth,
- \c!strut=\v!yes,
- \c!autostrut=\v!no,
- %
- \c!color=,
- \c!style=,
- \c!headstyle=\v!bold,
- \c!headcolor=,
- \c!aligncharacter=\v!no,
- \c!alignmentcharacter={,},
- \c!option=, % \v!stretch
- \c!header=,
- \c!spaceinbetween=,
- \c!maxwidth=8\emwidth,
- \c!textwidth=\v!local, % was \hsize
- \c!split=\v!auto,
- \c!splitoffset=\zeropoint,
- \c!distance=\zeropoint, % individual column
- \c!columndistance=\zeropoint, % each column (whole table)
- \c!leftmargindistance=\zeropoint, % whole table
- \c!rightmargindistance=\zeropoint,% whole table
- \c!left=,
- \c!right=,
- \c!setups=]
+\newtoks\everyresetTABLEyes
+\newtoks\everyresetTABLEnop
+
+\appendtoks
+ \setupTABLE [%
+ %
+ % framed defaults
+ %
+ \c!width=\v!fit,%
+ \c!height=\v!fit,%
+ \c!lines=,%
+ \c!offset=.25\exheight,%
+ \c!empty=\v!no,%
+ \c!frame=\v!on,%
+ \c!topframe=,%
+ \c!bottomframe=,%
+ \c!leftframe=,%
+ \c!rightframe=,%
+ \c!radius=.5\bodyfontsize,%
+ \c!rulethickness=\linewidth,%
+ \c!corner=\v!rectangular,%
+ \c!depth=\zeropoint,%
+ \c!foregroundcolor=,%
+ \c!foregroundstyle=,%
+ \c!background=,%
+ \c!backgroundcolor=,%
+ \c!backgroundoffset=\v!frame,%
+ \c!framecolor=,%
+ \c!frameoffset=.5\linewidth,%
+ % \c!backgroundcorner=\framedparameter\c!corner,%
+ % \c!backgrounddepth=\framedparameter\c!depth,%
+ % \c!backgroundradius=\framedparameter\c!radius,%
+ % \c!framecorner=\framedparameter\c!corner,%
+ % \c!framedepth=\framedparameter\c!depth,%
+ % \c!frameradius=\framedparameter\c!radius,%
+ \c!component=,%
+ \c!region=,%
+ \c!align=,%
+ \c!bottom=\vss,%
+ \c!top=,%
+ \c!strut=\v!yes,%
+ \c!autostrut=\v!no,%
+ \c!location=\v!normal,%
+ \c!orientation=,%
+ \c!autowidth=\v!yes,%
+ \c!setups=,%
+ \c!loffset=\zeropoint,%
+ \c!roffset=\zeropoint,%
+ \c!toffset=\zeropoint,%
+ \c!boffset=\zeropoint,%
+ %
+ % table specific
+ %
+ \c!aligncharacter=\v!no,%
+ \c!alignmentcharacter={,},%
+ \c!color=,%
+ \c!columndistance=\zeropoint,% each column (whole table)
+ \c!distance=\zeropoint,% individual column
+ \c!headcolor=,%
+ \c!header=,%
+ \c!headstyle=\v!bold,%
+ \c!left=,%
+ \c!leftmargindistance=\zeropoint,% whole table
+ \c!maxwidth=8\emwidth,%
+ \c!option=,% \v!stretch
+ \c!right=,%
+ \c!rightmargindistance=\zeropoint,% whole table
+ \c!spaceinbetween=,%
+ \c!split=\v!auto,%
+ \c!splitoffset=\zeropoint,%
+ \c!style=,%
+ \c!textwidth=\v!local,% was \hsize
+ ]%
+\to \everyresetTABLEyes
+
+\appendtoks
+ \setupTABLE [%
+ \c!width=\v!fit,%
+ \c!height=\v!fit%
+ ]%
+\to \everyresetTABLEnop
+
+\the\everyresetTABLEyes
% \bgroup
% \setupTABLE[column][1][aligncharacter=yes, alignmentcharacter={,}]
@@ -2054,29 +2167,9 @@
\def\tabl_ntb_parameters_reset % we can use setters instead
{\ifnum\m_tabl_tbl_level>\plusone % in ieder geval
\ifconditional\resetTABLEmode
- % not ok yet
- \setupTABLE
- [\c!frameoffset=.5\linewidth,
- \c!backgroundoffset=\v!frame,
- % \c!framecolor=\s!black,
- \c!width=\v!fit,
- \c!height=\v!fit,
- \c!autowidth=\v!yes,
- % \c!rulethickness=\linewidth,
- \c!strut=\v!no,
- \c!strut=\v!yes, % needed for mathml, but ... maybe we need another resetTABLEmode
- \c!autostrut=\v!no,
- \c!color=,
- \c!style=,
- \c!headstyle=,
- \c!headcolor=,
- \c!aligncharacter=\v!no,
- \c!alignmentcharacter={,},
- \c!maxwidth=8\emwidth]%
+ \the\everyresetTABLEyes
\else
- \setupTABLE
- [\c!width=\v!fit,
- \c!height=\v!fit]%
+ \the\everyresetTABLEnop
\fi
\fi}
diff --git a/tex/context/base/mkiv/tabl-tab.mkiv b/tex/context/base/mkiv/tabl-tab.mkiv
index e238447b9..76f7f76c3 100644
--- a/tex/context/base/mkiv/tabl-tab.mkiv
+++ b/tex/context/base/mkiv/tabl-tab.mkiv
@@ -981,7 +981,10 @@
\def\tabl_table_normal_full_rule
{\starttablenoalign
\!ttGetHalfRuleThickness
+ \scratchdistance\directtablesparameter\c!openup
+ \ifzeropt\scratchdistance\else\kern\scratchdistance\fi
\hrule\s!height\scratchdimen\s!depth\scratchdimen
+ \ifzeropt\scratchdistance\else\kern\scratchdistance\fi
\stoptablenoalign}
\def\tabl_table_normal_short_rule % was: \!ttShortHrule
@@ -2268,6 +2271,7 @@
\c!commands=,
\c!background=,
\c!backgroundcolor=,
- \c!split=\v!auto]
+ \c!split=\v!auto,
+ \c!openup=\zeropoint]
\protect \endinput
diff --git a/tex/context/base/mkiv/tabl-tbl.mkiv b/tex/context/base/mkiv/tabl-tbl.mkiv
index 4cd839bd6..b21771009 100644
--- a/tex/context/base/mkiv/tabl-tbl.mkiv
+++ b/tex/context/base/mkiv/tabl-tbl.mkiv
@@ -575,7 +575,7 @@
% future let but just pick up the key.
% \installtabulatepreambleoption \s!unknown %
-% {\writestatus{tabulate}{unknown preamble key [\meaning\next]}%
+% {\writestatus{tabulate}{unknown preamble key [\normalmeaning\next]}%
% \tabl_tabulate_set_preamble}
%
% \def\tabl_tabulate_set_preamble
@@ -787,7 +787,7 @@
\global\d_tabl_tabulate_vrulethickness\d_tabl_tabulate_vrulethickness_default
\rawprocesscommalist[#1]\tabl_tabulate_set_vrule_command
\fi
- \tabl_tabulate_set_preamble#2\relax\relax % permits i without n
+ \tabl_tabulate_set_preamble#2\relax\relax % permits i without n
\ifcase\c_tabl_tabulate_modus\relax
\tabl_tabulate_set_width_normal
\or % fixed width
@@ -1213,10 +1213,89 @@
% todo: spacing around tabulate when bodyfont is set
-\unexpanded\def\tabl_tabulate_start_building
- {\ifinsidefloat \else
+% \let\tabl_tabulate_inside_before \relax
+% \let\tabl_tabulate_inside_after \relax
+% \let\tabl_tabulate_inside_inbetween\relax
+%
+% \def\tabl_tabulate_outside_before
+% {\whitespace
+% \tabulationparameter\c!before}
+%
+% \def\tabl_tabulate_outside_after
+% {\tabulationparameter\c!after}
+
+% \showboxes
+%
+% \startcombination
+% {\insidefloattrue \starttabulate[|||] \NC test \NC test \NC \NR \stoptabulate} {}
+% {\insidefloattrue \starttabulate[|||] \NC test \NC test \NC \NR \stoptabulate} {}
+% \stopcombination
+%
+% \startcombination
+% {\vbox{\starttabulate[|||] \NC test \NC test \NC \NR \stoptabulate}} {}
+% {\vbox{\starttabulate[|||] \NC test \NC test \NC \NR \stoptabulate}} {}
+% \stopcombination
+%
+% \startcombination
+% {\starttabulate[|||] \NC test \NC test \NC \NR \stoptabulate} {}
+% {\starttabulate[|||] \NC test \NC test \NC \NR \stoptabulate} {}
+% \stopcombination
+
+\let\tabl_tabulate_inside_after \relax
+\let\tabl_tabulate_outside_after \relax
+\let\tabl_tabulate_inside_inbetween \relax
+\let\tabl_tabulate_outside_inbetween\relax
+
+\unexpanded\def\tabl_tabulate_inside_before
+ {\ifhmode\par\fi
+ \ifhmode
+ \ifinsidesplitfloat
+ \let\tabl_tabulate_inside_after\relax
+ \else
+ \vbox\bgroup
+ \let\tabl_tabulate_inside_after\egroup
+ \fi
+ \else
+ \let\tabl_tabulate_inside_after\relax
+ \fi}
+
+\unexpanded\def\tabl_tabulate_outside_before
+ {\ifhmode\par\fi
+ \ifhmode
+ \vbox\bgroup
+ \let\tabl_tabulate_outside_after \egroup
+ \let\tabl_tabulate_outside_inbetween\relax
+ \else\ifinner
+ \let\tabl_tabulate_outside_after \relax
+ \let\tabl_tabulate_outside_inbetween\relax
+ \else
\whitespace
\tabulationparameter\c!before
+ \relax
+ \let\tabl_tabulate_outside_after \tabl_tabulate_outside_after_indeed
+ \let\tabl_tabulate_outside_inbetween\tabl_tabulate_outside_inbetween_indeed
+ \fi\fi}
+
+\def\tabl_tabulate_outside_after_indeed
+ {\tabulationparameter\c!after}%
+
+\def\tabl_tabulate_outside_inbetween_indeed
+ {\doifempty{\tabulationparameter\c!after}
+ {\vskip\strutdp
+ \verticalstrut
+ \vskip-\struttotal}}
+
+\def\tabl_tabulate_inside_inbetween % needs checking
+ {\doifempty{\tabulationparameter\c!after}
+ {\vskip\strutdp
+ \verticalstrut
+ \vskip-\struttotal}}
+
+\unexpanded\def\tabl_tabulate_start_building
+ {\ifinsidefloat
+ \tabl_tabulate_inside_before
+ \else
+ \tabl_tabulate_outside_before
\fi
\bgroup % settings
%
@@ -1232,6 +1311,15 @@
\edef\p_rulethickness{\tabulationparameter\c!rulethickness}%
\edef\p_bodyfont {\tabulationparameter\c!bodyfont}
\edef\p_indenting {\tabulationparameter\c!indenting}%
+ \edef\p_keeptogether {\tabulationparameter\c!keeptogether}%
+ %
+ \ifx\p_keeptogether\v!no
+ \settrue \c_tabl_tabulate_tolerant_break
+ %\setfalse\c_tabl_tabulate_handlepbreak
+ \else
+ \setfalse\c_tabl_tabulate_tolerant_break
+ %\settrue \c_tabl_tabulate_handlepbreak
+ \fi
%
\settrue\c_tabl_tabulate_split
\csname\??tabulatesplit\tabulationparameter\c!split\endcsname
@@ -1958,11 +2046,10 @@
\tabl_tabulate_column_rule_separator_inject
\tabl_tabulate_nobreak_inject
\tabl_tabulate_hrule_inject
- \ifinsidefloat\else
- \doifempty{\tabulationparameter\c!after}
- {\vskip\strutdp
- \verticalstrut
- \vskip-\struttotal}%
+ \ifinsidefloat
+ \tabl_tabulate_inside_inbetween
+ \else
+ \tabl_tabulate_outside_inbetween
\fi
\stoptabulatenoalign}
@@ -2072,6 +2159,14 @@
\let\v_tabl_tabulate_align\!!zerocount
+\def\tabl_tabulate_check_side_float % new per 29-07-2016
+ {\ifdefined\page_sides_check_floats_indeed
+ \page_sides_check_floats_indeed
+ \ifdim\hangindent>\zeropoint
+ \advance\d_tabl_tabulate_indent\hangindent
+ \fi
+ \fi}
+
\def\tabl_tabulate_set_local_hsize
{\setlocalhsize
\hsize\localhsize}
@@ -2159,23 +2254,30 @@
\ifinsidefloat
\d_tabl_tabulate_indent\zeropoint
\else
+ \tabl_tabulate_check_side_float
\tabl_tabulate_set_local_hsize
\fi
\dontcomplain
\forgetall % hm, interference with preceding \forgetparindent probably bug, to be solved
\everypar\everytabulatepar
- \setbox0\vbox % outside \if because of line counting
+ \setbox\scratchbox\vbox % outside \if because of line counting
{\notesenabledfalse
\d_tabl_tabulate_indent\zeropoint
\settrialtypesetting % very important
+\anch_backgrounds_text_level_start
\expandafter\halign\expandafter{\the\t_tabl_tabulate_preamble\crcr\tabl_tabulate_insert_content\crcr}}%
+\anch_backgrounds_text_level_stop
+\ifcase\c_anch_backgrounds_text_state\else
+ \global\settrue\tablehaspositions
+\fi
\ifnum\c_tabl_tabulate_nofauto>\zerocount
% so, even if the natural size is larger, in the final run, we force the calculated width
- \d_tabl_tabulate_width\dimexpr\hsize-\wd0-\d_tabl_tabulate_width_p-\d_tabl_tabulate_width_w\relax
+ \d_tabl_tabulate_width\dimexpr\hsize-\wd\scratchbox-\d_tabl_tabulate_width_p-\d_tabl_tabulate_width_w\relax
\ifnum\c_tabl_tabulate_nofauto>\zerocount
\divide\d_tabl_tabulate_width \c_tabl_tabulate_nofauto\relax
\fi
\fi
+ \setbox\scratchbox\emptybox % free memory
\ifconditional\c_tabl_tabulate_split
\splittopskip\strutht
\glet\tabl_tabulate_flush_collected_indeed\empty
@@ -2232,8 +2334,10 @@
\tabl_split_box\b_tabl_tabulate
\fi
%
- \ifinsidefloat \else
- \tabulationparameter\c!after
+ \ifinsidefloat
+ \tabl_tabulate_inside_after
+ \else
+ \tabl_tabulate_outside_after
\fi
\egroup} % whole thing
@@ -2491,4 +2595,34 @@
\definetabulate[tabulate] \setuptabulate[tabulate][\c!format=\v!none] % so no \v! here
+%D The following helpers are just there because we also have them at the \LUA\ end:
+%D
+%D \startbuffer
+%D \starttabulate[|l|c|r|]
+%D \tabulaterow {a,b,c}
+%D \tabulaterowbold{aa,bb,cc}
+%D \tabulaterowtype{aaa,bbb,ccc}
+%D \tabulaterowtyp {aaaa,bbbb,cccc}
+%D \stoptabulate
+%D \stopbuffer
+%D
+%D \typebuffer \getbuffer
+
+\def\tabl_tabulate_compact_row#1#2%
+ {\NC\tabl_tabulate_compact_step#1#2,\end,}
+
+\def\tabl_tabulate_compact_step#1#2#3,%
+ {\ifx#2\end
+ \NR
+ \expandafter\gobbleoneargument
+ \else
+ #1{#2#3}\NC
+ \expandafter\tabl_tabulate_compact_step
+ \fi#1}
+
+\unexpanded\def\tabulaterow {\tabl_tabulate_compact_row\relax}
+\unexpanded\def\tabulaterowbold{\tabl_tabulate_compact_row\bold}
+\unexpanded\def\tabulaterowtype{\tabl_tabulate_compact_row\type}
+\unexpanded\def\tabulaterowtyp {\tabl_tabulate_compact_row\typ}
+
\protect \endinput
diff --git a/tex/context/base/mkiv/tabl-tsp.mkiv b/tex/context/base/mkiv/tabl-tsp.mkiv
index e0c3b9b74..eadcda16c 100644
--- a/tex/context/base/mkiv/tabl-tsp.mkiv
+++ b/tex/context/base/mkiv/tabl-tsp.mkiv
@@ -372,13 +372,13 @@
\page_split_float_process{\tsplitbeforeresult\box\tsplitresult\tsplitafterresult}%
\doifnotinsidesplitfloat\tsplitafter
\endgraf
+ \global\settrue\usesamefloatnumber % new, prevent next increment
\fi
\ifinsidecolumns
\goodbreak % was \doifnotinsidesplitfloat\goodbreak
\else
\page % was \doifnotinsidesplitfloat\page
\fi
- \global\settrue\usesamefloatnumber % new, prevent next increment
\fi}
%D The next one assumes that the split takes place elsewhere. This is
diff --git a/tex/context/base/mkiv/tabl-xtb.lua b/tex/context/base/mkiv/tabl-xtb.lua
index 87d5fa121..dade345fc 100644
--- a/tex/context/base/mkiv/tabl-xtb.lua
+++ b/tex/context/base/mkiv/tabl-xtb.lua
@@ -26,81 +26,84 @@ this mechamism will be improved so that it can replace its older cousin.
-- todo: use linked list instead of r/c array
-- todo: we can use the sum of previously forced widths for column spans
-local tonumber, next = tonumber, next
-
-local commands = commands
-local context = context
-local tex = tex
-
-local implement = interfaces.implement
-
-local texgetcount = tex.getcount
-local texsetcount = tex.setcount
-local texgetdimen = tex.getdimen
-local texsetdimen = tex.setdimen
-local texget = tex.get
-
-local format = string.format
-local concat = table.concat
-local points = number.points
-
-local todimen = string.todimen
-
-local context_beginvbox = context.beginvbox
-local context_endvbox = context.endvbox
-local context_blank = context.blank
-local context_nointerlineskip = context.nointerlineskip
-local context_dummyxcell = context.dummyxcell
-
-local variables = interfaces.variables
-
-local setmetatableindex = table.setmetatableindex
-local settings_to_hash = utilities.parsers.settings_to_hash
-
-local nuts = nodes.nuts -- here nuts gain hardly nothing
-local tonut = nuts.tonut
-local tonode = nuts.tonode
-
-local getnext = nuts.getnext
-local getprev = nuts.getprev
-local getlist = nuts.getlist
-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
-local flush_node_list = nuts.flush_list
-local takebox = nuts.takebox
-
-local nodepool = nuts.pool
-
-local new_glue = nodepool.glue
-local new_kern = nodepool.kern
-local new_penalty = nodepool.penalty
-local new_hlist = nodepool.hlist
-
-local v_stretch = variables.stretch
-local v_normal = variables.normal
-local v_width = variables.width
-local v_height = variables.height
-local v_repeat = variables["repeat"]
-local v_max = variables.max
-local v_fixed = variables.fixed
-local v_auto = variables.auto
-local v_before = variables.before
-local v_after = variables.after
-local v_both = variables.both
-local v_samepage = variables.samepage
-local v_tight = variables.tight
-
-local xtables = { }
-typesetters.xtables = xtables
-
-local trace_xtable = false
-local report_xtable = logs.reporter("xtable")
+local tonumber, next, rawget = tonumber, next, rawget
+
+local commands = commands
+local context = context
+local ctxnode = context.nodes.flush
+
+local implement = interfaces.implement
+
+local tex = tex
+local texgetcount = tex.getcount
+local texsetcount = tex.setcount
+local texgetdimen = tex.getdimen
+local texsetdimen = tex.setdimen
+local texget = tex.get
+
+local format = string.format
+local concat = table.concat
+local points = number.points
+
+local todimen = string.todimen
+
+local ctx_beginvbox = context.beginvbox
+local ctx_endvbox = context.endvbox
+local ctx_blank = context.blank
+local ctx_nointerlineskip = context.nointerlineskip
+local ctx_dummyxcell = context.dummyxcell
+
+local variables = interfaces.variables
+
+local setmetatableindex = table.setmetatableindex
+local settings_to_hash = utilities.parsers.settings_to_hash
+
+local nuts = nodes.nuts -- here nuts gain hardly nothing
+local tonut = nuts.tonut
+local tonode = nuts.tonode
+
+local getnext = nuts.getnext
+local getprev = nuts.getprev
+local getlist = nuts.getlist
+local getfield = nuts.getfield
+local getbox = nuts.getbox
+local getwhd = nuts.getwhd
+
+local setfield = nuts.setfield
+local setlink = nuts.setlink
+local setdir = nuts.setdir
+local setshift = nuts.setshift
+
+local copy_node_list = nuts.copy_list
+local hpack_node_list = nuts.hpack
+local flush_node_list = nuts.flush_list
+local takebox = nuts.takebox
+
+local nodepool = nuts.pool
+
+local new_glue = nodepool.glue
+local new_kern = nodepool.kern
+local new_hlist = nodepool.hlist
+
+local v_stretch = variables.stretch
+local v_normal = variables.normal
+local v_width = variables.width
+local v_height = variables.height
+local v_repeat = variables["repeat"]
+local v_max = variables.max
+local v_fixed = variables.fixed
+----- v_auto = variables.auto
+local v_before = variables.before
+local v_after = variables.after
+local v_both = variables.both
+local v_samepage = variables.samepage
+local v_tight = variables.tight
+
+local xtables = { }
+typesetters.xtables = xtables
+
+local trace_xtable = false
+local report_xtable = logs.reporter("xtable")
trackers.register("xtable.construct", function(v) trace_xtable = v end)
@@ -256,9 +259,7 @@ function xtables.set_reflow_width()
--
drc.list = true -- we don't need to keep the content around as we're in trial mode (no: copy_node_list(tb))
--
- local width = getfield(tb,"width")
- local height = getfield(tb,"height")
- local depth = getfield(tb,"depth")
+ local width, height, depth = getwhd(tb)
--
local widths = data.widths
local heights = data.heights
@@ -428,9 +429,7 @@ function xtables.set_reflow_height()
local tb = getbox("b_tabl_x")
local drc = row[c]
--
- local width = getfield(tb,"width")
- local height = getfield(tb,"height")
- local depth = getfield(tb,"depth")
+ local width, height, depth = getwhd(tb)
--
if drc.ny < 2 then
if data.fixedrows[r] == 0 then -- and drc.dimensionstate < 2
@@ -520,6 +519,7 @@ function xtables.reflow_width()
local nofrows = data.nofrows
local nofcolumns = data.nofcolumns
local rows = data.rows
+-- inspect(rows)
for r=1,nofrows do
local row = rows[r]
for c=1,nofcolumns do
@@ -551,6 +551,7 @@ function xtables.reflow_width()
showwidths("stage 1",widths,autowidths)
end
local noffrozen = 0
+-- here we can also check spans
-- inspect(data.fixedcspans)
if options[v_max] then
for c=1,nofcolumns do
@@ -819,11 +820,10 @@ function xtables.construct()
end
local list = drc.list
if list then
- setfield(list,"shift",getfield(list,"height") + getfield(list,"depth"))
+ local w, h, d = getwhd(list)
+ setshift(list,h+d)
-- list = hpack_node_list(list) -- is somehow needed
- -- setfield(list,"width",0)
- -- setfield(list,"height",0)
- -- setfield(list,"depth",0)
+ -- setwhd(list,0,0,0)
-- faster:
local h = new_hlist(list)
list = h
@@ -872,7 +872,7 @@ function xtables.construct()
-- we have a direction issue here but hpack_node_list(list,0,"exactly","TLT") cannot be used
-- due to the fact that we need the width
local hbox = hpack_node_list(list)
- setfield(hbox,"dir","TLT")
+ setdir(hbox,"TLT")
result[nofr] = {
hbox,
size,
@@ -921,29 +921,29 @@ local function inject(row,copy,package)
row[1] = copy_node_list(list)
end
if package then
- context_beginvbox()
- context(tonode(list))
- context(tonode(new_kern(row[2])))
- context_endvbox()
- context_nointerlineskip() -- figure out a better way
+ ctx_beginvbox()
+ ctxnode(tonode(list))
+ ctxnode(tonode(new_kern(row[2])))
+ ctx_endvbox()
+ ctx_nointerlineskip() -- figure out a better way
if row[4] then
-- nothing as we have a span
elseif row[5] then
if row[3] then
- context_blank { v_samepage, row[3] .. "sp" }
+ ctx_blank { v_samepage, row[3] .. "sp" }
else
- context_blank { v_samepage }
+ ctx_blank { v_samepage }
end
elseif row[3] then
- context_blank { row[3] .. "sp" } -- why blank ?
+ ctx_blank { row[3] .. "sp" } -- why blank ?
else
- context(tonode(new_glue(0)))
+ ctxnode(tonode(new_glue(0)))
end
else
- context(tonode(list))
- context(tonode(new_kern(row[2])))
+ ctxnode(tonode(list))
+ ctxnode(tonode(new_kern(row[2])))
if row[3] then
- context(tonode(new_glue(row[3])))
+ ctxnode(tonode(new_glue(row[3])))
end
end
end
@@ -1000,7 +1000,7 @@ function xtables.flush(directives) -- todo split by size / no inbetween then ..
local repeatheader = settings.header == v_repeat
local repeatfooter = settings.footer == v_repeat
if height and height > 0 then
- context_beginvbox()
+ ctx_beginvbox()
local bodystart = data.bodystart or 1
local bodystop = data.bodystop or #body
if bodystart > 0 and bodystart <= bodystop then
@@ -1016,7 +1016,7 @@ function xtables.flush(directives) -- todo split by size / no inbetween then ..
inject(head[i],repeatheader)
end
if rowdistance > 0 then
- context(tonode(new_glue(rowdistance)))
+ ctxnode(tonode(new_glue(rowdistance)))
end
if not repeatheader then
results[head_mode] = { }
@@ -1029,7 +1029,7 @@ function xtables.flush(directives) -- todo split by size / no inbetween then ..
inject(more[i],true)
end
if rowdistance > 0 then
- context(tonode(new_glue(rowdistance)))
+ ctxnode(tonode(new_glue(rowdistance)))
end
end
elseif headsize > 0 and repeatheader then -- following chunk gets head
@@ -1039,7 +1039,7 @@ function xtables.flush(directives) -- todo split by size / no inbetween then ..
inject(head[i],true)
end
if rowdistance > 0 then
- context(tonode(new_glue(rowdistance)))
+ ctxnode(tonode(new_glue(rowdistance)))
end
end
else -- following chunk gets nothing
@@ -1066,7 +1066,7 @@ function xtables.flush(directives) -- todo split by size / no inbetween then ..
-- all is flushed and footer fits
if footsize > 0 then
if rowdistance > 0 then
- context(tonode(new_glue(rowdistance)))
+ ctxnode(tonode(new_glue(rowdistance)))
end
for i=1,#foot do
inject(foot[i])
@@ -1080,7 +1080,7 @@ function xtables.flush(directives) -- todo split by size / no inbetween then ..
-- todo: try to flush a few more lines
if repeatfooter and footsize > 0 then
if rowdistance > 0 then
- context(tonode(new_glue(rowdistance)))
+ ctxnode(tonode(new_glue(rowdistance)))
end
for i=1,#foot do
inject(foot[i],true)
@@ -1106,7 +1106,7 @@ function xtables.flush(directives) -- todo split by size / no inbetween then ..
end
data.bodystart = bodystart
data.bodystop = bodystop
- context_endvbox()
+ ctx_endvbox()
else
if method == variables.split then
-- maybe also a non float mode with header/footer repeat although
@@ -1115,35 +1115,35 @@ function xtables.flush(directives) -- todo split by size / no inbetween then ..
inject(head[i],false,true)
end
if #head > 0 and rowdistance > 0 then
- context_blank { rowdistance .. "sp" }
+ ctx_blank { rowdistance .. "sp" }
end
for i=1,#body do
inject(body[i],false,true)
end
if #foot > 0 and rowdistance > 0 then
- context_blank { rowdistance .. "sp" }
+ ctx_blank { rowdistance .. "sp" }
end
for i=1,#foot do
inject(foot[i],false,true)
end
else -- normal
- context_beginvbox()
+ ctx_beginvbox()
for i=1,#head do
inject(head[i])
end
if #head > 0 and rowdistance > 0 then
- context(tonode(new_glue(rowdistance)))
+ ctxnode(tonode(new_glue(rowdistance)))
end
for i=1,#body do
inject(body[i])
end
if #foot > 0 and rowdistance > 0 then
- context(tonode(new_glue(rowdistance)))
+ ctxnode(tonode(new_glue(rowdistance)))
end
for i=1,#foot do
inject(foot[i])
end
- context_endvbox()
+ ctx_endvbox()
end
results[head_mode] = { }
results[body_mode] = { }
@@ -1166,10 +1166,8 @@ function xtables.cleanup()
-- local cell = row[i]
-- local list = cell.list
-- if list then
- -- cell.width = getfield(list,"width")
- -- cell.height = getfield(list,"height")
- -- cell.depth = getfield(list,"depth")
- -- cell.list = true
+ -- cell.width, cell.height, cell.depth = getwhd(list)
+ -- cell.list = true
-- end
-- end
-- end
@@ -1188,11 +1186,19 @@ function xtables.next_row(specification)
end
function xtables.finish_row()
- local n = data.nofcolumns - data.currentcolumn
+ local c = data.currentcolumn
+ local r = data.currentrow
+ local d = data.rows[r][c]
+ local n = data.nofcolumns - c
+ if d then
+ local nx = d.nx
+ if nx > 0 then
+ n = n - nx + 1
+ end
+ end
if n > 0 then
- -- message
for i=1,n do
- context_dummyxcell()
+ ctx_dummyxcell()
end
end
end
@@ -1253,19 +1259,20 @@ implement { name = "x_table_c", actions = function() con
do
local context = context
+ local ctxcore = context.core
- local startxtable = context.startxtable
- local stopxtable = context.stopxtable
+ local startxtable = ctxcore.startxtable
+ local stopxtable = ctxcore.stopxtable
local startcollecting = context.startcollecting
local stopcollecting = context.stopcollecting
- function context.startxtable(...)
+ function ctxcore.startxtable(...)
startcollecting()
startxtable(...)
end
- function context.stopxtable()
+ function ctxcore.stopxtable()
stopxtable()
stopcollecting()
end
diff --git a/tex/context/base/mkiv/tabl-xtb.mkvi b/tex/context/base/mkiv/tabl-xtb.mkvi
index 851b6e80f..f7d682631 100644
--- a/tex/context/base/mkiv/tabl-xtb.mkvi
+++ b/tex/context/base/mkiv/tabl-xtb.mkvi
@@ -245,6 +245,8 @@
\d_tabl_x_textwidth\p_textwidth
\fi}
+\newtoks\everypreparextable
+
\unexpanded\def\tabl_x_prepare#settings% assumes \iffirstargument to be set
{\advance\c_tabl_x_nesting\plusone
\dostarttaggedchained\t!table\empty\??xtable
@@ -252,6 +254,7 @@
\tabl_x_set_checked{#settings}%
\fi
\tabl_x_check_textwidth
+ \the\everypreparextable
}% else whitespace mess
\def\tabl_x_get_buffer
@@ -807,4 +810,26 @@
{\tabl_x_stop_row
\endgroup}
+%D A bonus, not advertised but some like it this way:
+
+\unexpanded\def\tabl_x_nc
+ {\startxrow
+ \let\NC\tabl_x_nc_next
+ \let\NR\tabl_x_nr
+ \startxcell}
+
+\unexpanded\def\tabl_x_nc_next
+ {\stopxcell
+ \startxcell}
+
+\unexpanded\def\tabl_x_nr
+ {\stopxcell
+ \stopxrow
+ \let\NC\tabl_x_nc}
+
+\appendtoks
+ \let\NC\tabl_x_nc
+ \let\NR\tabl_x_nr
+\to \everypreparextable
+
\protect \endinput
diff --git a/tex/context/base/mkiv/task-ini.lua b/tex/context/base/mkiv/task-ini.lua
index 696a3b4a9..d0c00f5c8 100644
--- a/tex/context/base/mkiv/task-ini.lua
+++ b/tex/context/base/mkiv/task-ini.lua
@@ -49,13 +49,16 @@ appendaction("processors", "words", "typesetters.firstlines.handler")
appendaction("processors", "fonts", "builders.paragraphs.solutions.splitters.split") -- experimental
appendaction("processors", "fonts", "nodes.handlers.characters") -- maybe todo
-appendaction("processors", "fonts", "nodes.injections.handler") -- maybe todo
+appendaction("processors", "fonts", "nodes.injections.handler")
+appendaction("processors", "fonts", "typesetters.fontkerns.handler")
appendaction("processors", "fonts", "nodes.handlers.protectglyphs", nil, "nohead") -- maybe todo
appendaction("processors", "fonts", "builders.kernel.ligaturing") -- always on (could be selective: if only node mode)
appendaction("processors", "fonts", "builders.kernel.kerning") -- always on (could be selective: if only node mode)
appendaction("processors", "fonts", "nodes.handlers.stripping") -- disabled (might move)
------------("processors", "fonts", "typesetters.italics.handler") -- disabled (after otf/kern handling)
+appendaction("processors", "fonts", "nodes.handlers.flatten")
+appendaction("processors", "lists", "typesetters.rubies.check") -- disabled (maybe someplace else)
appendaction("processors", "lists", "typesetters.characteralign.handler") -- disabled (we need to to this after otf appliance)
appendaction("processors", "lists", "typesetters.spacings.handler") -- disabled
appendaction("processors", "lists", "typesetters.kerns.handler") -- disabled
@@ -63,8 +66,9 @@ appendaction("processors", "lists", "typesetters.digits.handler")
appendaction("processors", "lists", "typesetters.italics.handler") -- disabled (after otf/kern handling)
appendaction("processors", "lists", "languages.visualizediscretionaries") -- disabled
--- appendaction("processors", "lists", "typesetters.initials.handler") -- disabled
+appendaction ("processors", "after", "typesetters.marksuspects")
+appendaction("shipouts", "normalizers", "typesetters.showsuspects")
appendaction("shipouts", "normalizers", "typesetters.margins.finalhandler") -- disabled
------------("shipouts", "normalizers", "nodes.handlers.cleanuppage") -- disabled
appendaction("shipouts", "normalizers", "builders.paragraphs.expansion.trace") -- disabled
@@ -78,6 +82,7 @@ appendaction("shipouts", "normalizers", "nodes.handlers.accessibility")
appendaction("shipouts", "normalizers", "nodes.handlers.backgrounds") -- disabled
appendaction("shipouts", "normalizers", "nodes.handlers.alignbackgrounds") -- disabled
------------("shipouts", "normalizers", "nodes.handlers.export") -- disabled
+appendaction("shipouts", "normalizers", "typesetters.rubies.attach") -- disabled
appendaction("shipouts", "finishers", "nodes.visualizers.handler") -- disabled
appendaction("shipouts", "finishers", "attributes.colors.handler") -- disabled
@@ -105,11 +110,13 @@ appendaction("math", "normalizers", "noads.handlers.resize", nil, "no
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.kernpairs", 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
+------------("math", "builders", "noads.handlers.italics", nil, "nohead") -- disabled
appendaction("math", "builders", "typesetters.directions.processmath") -- disabled (has to happen pretty late)
+appendaction("math", "builders", "noads.handlers.makeup", nil, "nohead") -- disabled (has to happen last)
appendaction("finalizers", "lists", "typesetters.paragraphs.normalize") -- moved here
appendaction("finalizers", "lists", "typesetters.margins.localhandler") -- disabled
@@ -117,8 +124,14 @@ appendaction("finalizers", "lists", "builders.paragraphs.keeptogether")
------------("finalizers", "lists", "nodes.handlers.graphicvadjust") -- todo
appendaction("finalizers", "fonts", "builders.paragraphs.solutions.splitters.optimize") -- experimental
appendaction("finalizers", "lists", "builders.paragraphs.tag")
+
+-- the next can also be in contributers normalizers (when we remove the loop in the handler)
+
appendaction("finalizers", "lists", "nodes.linefillers.handler")
+appendaction("contributers", "normalizers", "nodes.handlers.flattenline")
+appendaction("contributers", "normalizers", "nodes.handlers.textbackgrounds")
+
-- still experimental
appendaction("mvlbuilders", "normalizers", "typesetters.margins.globalhandler") -- disabled
@@ -166,7 +179,12 @@ disableaction("processors", "typesetters.italics.handler")
disableaction("processors", "languages.visualizediscretionaries")
disableaction("processors", "nodes.handlers.stripping")
disableaction("processors", "builders.paragraphs.solutions.splitters.split")
+disableaction("processors", "typesetters.rubies.check")
+disableaction("processors", "typesetters.fontkerns.handler")
+disableaction("processors", "nodes.handlers.flatten")
+disableaction("processors", "typesetters.marksuspects")
+disableaction("shipouts", "typesetters.showsuspects")
disableaction("shipouts", "typesetters.margins.finalhandler")
disableaction("shipouts", "builders.paragraphs.expansion.trace")
disableaction("shipouts", "typesetters.alignments.handler")
@@ -186,6 +204,7 @@ disableaction("shipouts", "nodes.handlers.alignbackgrounds")
disableaction("shipouts", "nodes.references.handler")
disableaction("shipouts", "nodes.destinations.handler")
-------------("shipouts", "nodes.handlers.export")
+disableaction("shipouts", "typesetters.rubies.attach")
disableaction("finalizers", "typesetters.margins.localhandler")
disableaction("finalizers", "builders.paragraphs.keeptogether")
@@ -194,12 +213,17 @@ disableaction("finalizers", "builders.paragraphs.solutions.splitters.optimize")
disableaction("finalizers", "builders.paragraphs.tag")
disableaction("finalizers", "nodes.linefillers.handler")
+disableaction("contributers","nodes.handlers.flattenline")
+disableaction("contributers","nodes.handlers.textbackgrounds")
+
disableaction("math", "noads.handlers.showtree")
disableaction("math", "noads.handlers.tags")
disableaction("math", "noads.handlers.italics")
+disableaction("math", "noads.handlers.kernpairs")
disableaction("math", "noads.handlers.domains")
disableaction("math", "noads.handlers.classes")
disableaction("math", "noads.handlers.autofences")
+disableaction("math", "noads.handlers.makeup")
disableaction("math", "typesetters.directions.processmath")
disableaction("mvlbuilders", "typesetters.margins.globalhandler")
diff --git a/tex/context/base/mkiv/toks-ini.lua b/tex/context/base/mkiv/toks-ini.lua
index 132605d38..0ce7b4836 100644
--- a/tex/context/base/mkiv/toks-ini.lua
+++ b/tex/context/base/mkiv/toks-ini.lua
@@ -68,7 +68,23 @@ local scan_csname = token.scan_csname
local get_next = token.get_next
+if not token.get_macro then
+ local scantoks = tex.scantoks
+ local gettoks = tex.gettoks
+ function token.get_meaning(name)
+ scantoks("t_get_macro",tex.ctxcatcodes,"\\"..name)
+ return gettoks("t_get_macro")
+ end
+ function token.get_macro(name)
+ scantoks("t_get_macro",tex.ctxcatcodes,"\\"..name)
+ local s = gettoks("t_get_macro")
+ return match(s,"^.-%->(.*)$") or s
+ end
+end
+
local set_macro = token.set_macro
+local get_macro = token.get_macro
+local get_meaning = token.get_meaning
local get_cmdname = token.get_cmdname
local create_token = token.create
@@ -238,14 +254,16 @@ tokens.scanners = { -- these expand
}
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,
+ meaning = get_meaning,
+ macro = get_macro,
+ 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 = {
diff --git a/tex/context/base/mkiv/toks-ini.mkiv b/tex/context/base/mkiv/toks-ini.mkiv
index 03ec99742..aaa735207 100644
--- a/tex/context/base/mkiv/toks-ini.mkiv
+++ b/tex/context/base/mkiv/toks-ini.mkiv
@@ -13,13 +13,13 @@
\writestatus{loading}{ConTeXt Token Support / Initialization}
+\unprotect
+
+\newtoks\t_get_macro % will go away
+
\registerctxluafile{toks-ini}{1.001}
\registerctxluafile{toks-scn}{1.001}
\registerctxluafile{cldf-scn}{1.001}
\registerctxluafile{cldf-stp}{1.001}
-\unprotect
-
-% nothing yet
-
\protect \endinput
diff --git a/tex/context/base/mkiv/toks-scn.lua b/tex/context/base/mkiv/toks-scn.lua
index 5c8dee8f3..3c41eedd8 100644
--- a/tex/context/base/mkiv/toks-scn.lua
+++ b/tex/context/base/mkiv/toks-scn.lua
@@ -153,8 +153,25 @@ tokens.converters = {
toglue = "todimen",
}
+-- We could just pickup a keyword but then we really need to make sure
+-- that no number follows it when that is the assignment and adding
+-- an optional = defeats the gain in speed. Currently we have sources
+-- with no spaces (\startcontextdefinitioncode ...) so it fails there.
+--
+-- Another drawback is that we then need to use { } instead of ending
+-- with \relax (as we can do now) but that is no big deal. It's just
+-- that I then need to check the TeX end. More pain than gain and a bit
+-- risky too.
+
local f_if = formatters[ " if scankeyword('%s') then data['%s'] = scan%s()"]
local f_elseif = formatters[" elseif scankeyword('%s') then data['%s'] = scan%s()"]
+
+----- f_if = formatters[" local key = scanword() if key == '' then break elseif key == '%s' then data['%s'] = scan%s()"]
+----- f_elseif = formatters[" elseif key == '%s' then data['%s'] = scan%s()"]
+
+----- f_if_x = formatters[ " if not data['%s'] and scankeyword('%s') then data['%s'] = scan%s()"]
+----- f_elseif_x = formatters[" elseif not data['%s'] and scankeyword('%s') then data['%s'] = scan%s()"]
+
local f_local = formatters["local scan%s = scanners.%s"]
local f_scan = formatters["scan%s()"]
local f_shortcut = formatters["local %s = scanners.converters.%s"]
@@ -163,6 +180,11 @@ local f_if_c = formatters[ " if scankeyword('%s') then data['%s'] = %s(s
local f_elseif_c = formatters[" elseif scankeyword('%s') then data['%s'] = %s(scan%s())"]
local f_scan_c = formatters["%s(scan%s())"]
+-- see above
+--
+----- f_if_c = formatters[" local key = scanword() if key == '' then break elseif key == '%s' then data['%s'] = %s(scan%s())"]
+----- f_elseif_c = formatters[" elseif k == '%s' then data['%s'] = %s(scan%s())"]
+
local f_any = formatters[" else local key = scanword() if key then data[key] = scan%s() else break end end"]
local f_any_c = formatters[" else local key = scanword() if key then data[key] = %s(scan%s()) else break end end"]
local s_done = " else break end"
@@ -269,6 +291,7 @@ function tokens.compile(specification)
else
m = m + 1
r[m] = (m > 1 and f_elseif or f_if )(t1,t1,t2)
+ -- r[m] = (m > 1 and f_elseif_x or f_if_x)(t1,t1,t1,t2)
end
end
end
@@ -291,8 +314,9 @@ function tokens.compile(specification)
end
tokens._action = a
for i=1,#a do
- code = f_action_f(i,code)
- f[#f+1] = f_action_s(i,i)
+ code = f_action_f(i,code)
+ n = n + 1
+ f[n] = f_action_s(i,i)
end
code = f_simple(f,code)
else
@@ -308,8 +332,9 @@ function tokens.compile(specification)
if a then
tokens._action = a
for i=1,#a do
- code = f_action_f(i,code)
- f[#f+1] = f_action_s(i,i)
+ code = f_action_f(i,code)
+ n = n + 1
+ f[n] = f_action_s(i,i)
end
end
code = f_table(f,ti,code)
@@ -317,8 +342,9 @@ function tokens.compile(specification)
code = f_scan(ti)
tokens._action = a
for i=1,#a do
- code = f_action_f(i,code)
- f[#f+1] = f_action_s(i,i)
+ code = f_action_f(i,code)
+ n = n + 1
+ f[n] = f_action_s(i,i)
end
code = f_simple(f,code)
else
@@ -364,8 +390,9 @@ function tokens.compile(specification)
if a then
tokens._action = a
for i=1,#a do
- code = f_action_f(i,code)
- f[#f+1] = f_action_s(i,i)
+ code = f_action_f(i,code)
+ n = n + 1
+ f[n] = f_action_s(i,i)
end
end
code = f_sequence(c,f,p,code)
diff --git a/tex/context/base/mkiv/toks-tra.lua b/tex/context/base/mkiv/toks-tra.lua
index a1408b0b8..3a5bc1306 100644
--- a/tex/context/base/mkiv/toks-tra.lua
+++ b/tex/context/base/mkiv/toks-tra.lua
@@ -5,6 +5,7 @@ if not modules then modules = { } end modules ['toks-ini'] = {
license = "see context related readme files"
}
+-- this will become a module
local utfbyte, utfchar, utfvalues = utf.byte, utf.char, utf.values
local format, gsub = string.format, string.gsub
diff --git a/tex/context/base/mkiv/toks-tra.mkiv b/tex/context/base/mkiv/toks-tra.mkiv
index a3e27eaf8..6186402a7 100644
--- a/tex/context/base/mkiv/toks-tra.mkiv
+++ b/tex/context/base/mkiv/toks-tra.mkiv
@@ -22,10 +22,13 @@
\unexpanded\def\starttokens [#1]{\ctxcommand{collecttokens("#1","stoptokens")}}
\let\stoptokens \relax
- \def\flushtokens [#1]{\ctxcommand{flushtokens("#1")}}
- \def\showtokens [#1]{\ctxcommand{showtokens("#1")}}
- \def\testtokens [#1]{\ctxcommand{testtokens("#1")}}
- \def\registertoken #1{\ctxcommand{registertoken("#1")}}
+\unexpanded\def\flushtokens [#1]{\ctxcommand{flushtokens("#1")}}
+\unexpanded\def\showtokens [#1]{\ctxcommand{showtokens("#1")}}
+\unexpanded\def\testtokens [#1]{\ctxcommand{testtokens("#1")}}
+\unexpanded\def\registertoken #1{\ctxcommand{registertoken("#1")}}
+\let\toks_show\showtokens % we also support the primitive
+
+\unexpanded\def\showtokens{\doifelsenextoptional\toks_show\normalshowtokens}
\protect \endinput
diff --git a/tex/context/base/mkiv/trac-deb.lua b/tex/context/base/mkiv/trac-deb.lua
index 792ad9b56..03df86825 100644
--- a/tex/context/base/mkiv/trac-deb.lua
+++ b/tex/context/base/mkiv/trac-deb.lua
@@ -185,6 +185,7 @@ local function processerror(offset)
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 lastmpserror = match(lasttexerror,[[^.-mp%serror:%s*(.*)$]])
resetmessages()
lastluaerror = gsub(lastluaerror,"%[\\directlua%]","[ctxlua]")
tracers.printerror {
@@ -192,6 +193,7 @@ local function processerror(offset)
linenumber = linenumber,
offset = tonumber(offset) or 10,
lasttexerror = lasttexerror,
+ lastmpserror = lastmpserror,
lastluaerror = lastluaerror,
luaerrorline = luaerrorline,
lastcontext = lastcontext,
@@ -204,9 +206,11 @@ function tracers.printerror(specification)
local filename = specification.filename
local linenumber = specification.linenumber
local lasttexerror = specification.lasttexerror
+ local lastmpserror = specification.lastmpserror
local lastluaerror = specification.lastluaerror
local lastcontext = specification.lasterrorcontext
local luaerrorline = specification.luaerrorline
+ local errortype = specification.errortype
local offset = specification.offset
local report = errorreporter(luaerrorline)
if not filename then
@@ -217,7 +221,8 @@ function tracers.printerror(specification)
report_nl()
if luaerrorline then
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)
+ elseif lastmpserror then
+ report("mp error on line %s in file %s:\n\n%s",linenumber,filename,lastmpserror)
else
report("tex error on line %s in file %s: %s",linenumber,filename,lasttexerror)
if lastcontext then
@@ -321,18 +326,37 @@ end
directives.register("system.showerror", lmx.overloaderror)
-local debugger = utilities.debugger
-
-local function trace_calls(n)
- debugger.enable()
- luatex.registerstopactions(function()
- debugger.disable()
- debugger.savestats(tex.jobname .. "-luacalls.log",tonumber(n))
- end)
- trace_calls = function() end
-end
+-- local debugger = utilities.debugger
+--
+-- local function trace_calls(n)
+-- debugger.enable()
+-- luatex.registerstopactions(function()
+-- debugger.disable()
+-- debugger.savestats(tex.jobname .. "-luacalls.log",tonumber(n))
+-- end)
+-- trace_calls = function() end
+-- end
+--
+-- directives.register("system.tracecalls", function(n)
+-- trace_calls(n)
+-- end) -- indirect is needed for nilling
+
+local editor = [[scite "-open:%filename%" -goto:%linenumber%]]
+
+directives.register("system.editor",function(v)
+ editor = v
+end)
-directives.register("system.tracecalls", function(n) trace_calls(n) end) -- indirect is needed for nilling
+callback.register("call_edit",function(filename,linenumber)
+ if editor then
+ editor = gsub(editor,"%%s",filename)
+ editor = gsub(editor,"%%d",linenumber)
+ editor = gsub(editor,"%%filename%%",filename)
+ editor = gsub(editor,"%%linenumber%%",linenumber)
+ logs.report("system","starting editor: %s",editor)
+ os.execute(editor)
+ end
+end)
implement { name = "showtrackers", actions = trackers.show }
implement { name = "enabletrackers", actions = trackers.enable, arguments = "string" }
@@ -350,3 +374,17 @@ implement { name = "disableexperiments", actions = experiments.disable, argument
implement { name = "showdebuginfo", actions = lmx.showdebuginfo }
implement { name = "overloaderror", actions = lmx.overloaderror }
implement { name = "showlogcategories", actions = logs.show }
+
+local debugger = utilities.debugger
+
+directives.register("system.profile",function(n)
+ luatex.registerstopactions(function()
+ debugger.disable()
+ debugger.savestats("luatex-profile.log",tonumber(n) or 0)
+ report_nl()
+ logs.report("system","profiler stopped, log saved in %a","luatex-profile.log")
+ report_nl()
+ end)
+ logs.report("system","profiler started")
+ debugger.enable()
+end)
diff --git a/tex/context/base/mkiv/trac-inf.lua b/tex/context/base/mkiv/trac-inf.lua
index 401fd01e7..f66485015 100644
--- a/tex/context/base/mkiv/trac-inf.lua
+++ b/tex/context/base/mkiv/trac-inf.lua
@@ -42,11 +42,51 @@ local function resettiming(instance)
timers[instance or "notimer"] = { timing = 0, loadtime = 0 }
end
+local ticks = clock
+local seconds = function(n) return n or 0 end
+
+-- if FFISUPPORTED and ffi and os.type == "windows" then
+--
+-- local okay, kernel = pcall(ffi.load,"kernel32")
+--
+-- if kernel then
+--
+-- local tonumber = ffi.number or tonumber
+--
+-- ffi.cdef[[
+-- int QueryPerformanceFrequency(int64_t *lpFrequency);
+-- int QueryPerformanceCounter(int64_t *lpPerformanceCount);
+-- ]]
+--
+-- local target = ffi.new("__int64[1]")
+--
+-- ticks = function()
+-- if kernel.QueryPerformanceCounter(target) == 1 then
+-- return tonumber(target[0])
+-- else
+-- return 0
+-- end
+-- end
+--
+-- local target = ffi.new("__int64[1]")
+--
+-- seconds = function(ticks)
+-- if kernel.QueryPerformanceFrequency(target) == 1 then
+-- return ticks / tonumber(target[0])
+-- else
+-- return 0
+-- end
+-- end
+--
+-- end
+--
+-- end
+
local function starttiming(instance)
local timer = timers[instance or "notimer"]
local it = timer.timing or 0
if it == 0 then
- timer.starttime = clock()
+ timer.starttime = ticks()
if not timer.loadtime then
timer.loadtime = 0
end
@@ -61,12 +101,13 @@ local function stoptiming(instance)
timer.timing = it - 1
else
local starttime = timer.starttime
- if starttime then
- local stoptime = clock()
- local loadtime = stoptime - starttime
- timer.stoptime = stoptime
- timer.loadtime = timer.loadtime + loadtime
- timer.timing = 0
+ if starttime and starttime > 0 then
+ local stoptime = ticks()
+ local loadtime = stoptime - starttime
+ timer.stoptime = stoptime
+ timer.loadtime = timer.loadtime + loadtime
+ timer.timing = 0
+ timer.starttime = 0
return loadtime
end
end
@@ -78,7 +119,7 @@ local function elapsed(instance)
return instance or 0
else
local timer = timers[instance or "notimer"]
- return timer and timer.loadtime or 0
+ return timer and seconds(timer.loadtime) or 0
end
end
@@ -136,10 +177,13 @@ function statistics.show()
local total, indirect = status.callbacks or 0, status.indirect_callbacks or 0
return format("%s direct, %s indirect, %s total", total-indirect, indirect, total)
end)
- if jit then
- local jitstatus = { jit.status() }
- if jitstatus[1] then
- register("luajit options", concat(jitstatus," ",2))
+ if TEXENGINE == "luajittex" and JITSUPPORTED then
+ local jitstatus = jit.status
+ if jitstatus then
+ local jitstatus = { jitstatus() }
+ if jitstatus[1] then
+ register("luajit options", concat(jitstatus," ",2))
+ end
end
end
-- so far
@@ -183,6 +227,7 @@ end
function statistics.runtime()
stoptiming(statistics)
+ -- stoptiming(statistics) -- somehow we can start the timer twice, but where
return statistics.formatruntime(elapsedtime(statistics))
end
diff --git a/tex/context/base/mkiv/trac-jus.lua b/tex/context/base/mkiv/trac-jus.lua
index ad1a098e2..6d00bf19e 100644
--- a/tex/context/base/mkiv/trac-jus.lua
+++ b/tex/context/base/mkiv/trac-jus.lua
@@ -6,49 +6,51 @@ if not modules then modules = { } end modules ['trac-jus'] = {
license = "see context related readme files"
}
-local checkers = typesetters.checkers or { }
-typesetters.checkers = checkers
+local checkers = typesetters.checkers or { }
+typesetters.checkers = checkers
----- report_justification = logs.reporter("visualize","justification")
-local a_alignstate = attributes.private("alignstate")
-local a_justification = attributes.private("justification")
+local a_alignstate = attributes.private("alignstate")
+local a_justification = attributes.private("justification")
-local nuts = nodes.nuts
-local tonut = nuts.tonut
+local nuts = nodes.nuts
+local tonut = nuts.tonut
-local getfield = nuts.getfield
-local setfield = nuts.setfield
-local getlist = nuts.getlist
-local getattr = nuts.getattr
-local setattr = nuts.setattr
-local setlist = nuts.setlist
+local getfield = nuts.getfield
+local setfield = nuts.setfield
+local getlist = nuts.getlist
+local getattr = nuts.getattr
+local setattr = nuts.setattr
+local setlist = nuts.setlist
+local setlink = nuts.setlink
+local getwidth = nuts.getwidth
+local findtail = nuts.tail
-local traverse_id = nuts.traverse_id
-local get_list_dimensions = nuts.dimensions
-local linked_nodes = nuts.linked
-local copy_node = nuts.copy
+local traverse_id = nuts.traverse_id
+local list_dimensions = nuts.dimensions
+local copy_list = nuts.copy_list
-local tracedrule = nodes.tracers.pool.nuts.rule
+local tracedrule = nodes.tracers.pool.nuts.rule
-local nodepool = nuts.pool
+local nodepool = nuts.pool
-local new_rule = nodepool.rule
-local new_hlist = nodepool.hlist
-local new_glue = nodepool.glue
-local new_kern = nodepool.kern
+local new_hlist = nodepool.hlist
+local new_kern = nodepool.kern
-local hlist_code = nodes.nodecodes.hlist
+local hlist_code = nodes.nodecodes.hlist
-local texsetattribute = tex.setattribute
-local unsetvalue = attributes.unsetvalue
+local texsetattribute = tex.setattribute
+local unsetvalue = attributes.unsetvalue
-local min_threshold = 0
-local max_threshold = 0
+local enableaction = nodes.tasks.enableaction
+
+local min_threshold = 0
+local max_threshold = 0
local function set(n)
- nodes.tasks.enableaction("mvlbuilders", "typesetters.checkers.handler")
- nodes.tasks.enableaction("vboxbuilders","typesetters.checkers.handler")
+ enableaction("mvlbuilders", "typesetters.checkers.handler")
+ enableaction("vboxbuilders","typesetters.checkers.handler")
texsetattribute(a_justification,n or 1)
function typesetters.checkers.set(n)
texsetattribute(a_justification,n or 1)
@@ -79,32 +81,38 @@ function checkers.handler(head)
for current in traverse_id(hlist_code,tonut(head)) do
if getattr(current,a_justification) == 1 then
setattr(current,a_justification,0) -- kind of reset
- local width = getfield(current,"width")
+ local width = getwidth(current)
if width > 0 then
local list = getlist(current)
if list then
- local naturalwidth, naturalheight, naturaldepth = get_list_dimensions(list)
+ local naturalwidth, naturalheight, naturaldepth = list_dimensions(list)
local delta = naturalwidth - width
if naturalwidth == 0 or delta == 0 then
-- special box
elseif delta >= max_threshold then
- local rule = tracedrule(delta,naturalheight,naturaldepth,getfield(list,"glue_set") == 1 and "trace:dr" or "trace:db")
- setlist(current,linked_nodes(list,new_hlist(rule)))
+ local rule = new_hlist(tracedrule(delta,naturalheight,naturaldepth,getfield(list,"glue_set") == 1 and "trace:dr" or "trace:db"))
+ setlink(findtail(list),rule)
+ setlist(current,list)
elseif delta <= min_threshold then
local alignstate = getattr(list,a_alignstate)
if alignstate == 1 then
- local rule = tracedrule(-delta,naturalheight,naturaldepth,"trace:dc")
- setlist(current,linked_nodes(new_hlist(rule),list))
+ local rule = new_hlist(tracedrule(-delta,naturalheight,naturaldepth,"trace:dc"))
+ setlink(rule,list)
+ setlist(current,rule)
elseif alignstate == 2 then
- local lrule = tracedrule(-delta/2,naturalheight,naturaldepth,"trace:dy")
- local rrule = copy_node(lrule)
- setlist(current,linked_nodes(new_hlist(lrule),list,new_kern(delta/2),new_hlist(rrule)))
+ local lrule = new_hlist(tracedrule(-delta/2,naturalheight,naturaldepth,"trace:dy"))
+ local rrule = copy_list(lrule)
+ setlink(lrule,list)
+ setlink(findtail(list),new_kern(delta/2),rrule)
+ setlist(current,lrule)
elseif alignstate == 3 then
- local rule = tracedrule(-delta,naturalheight,naturaldepth,"trace:dm")
- setlist(current,linked_nodes(list,new_kern(delta),new_hlist(rule)))
+ local rule = new_hlist(tracedrule(-delta,naturalheight,naturaldepth,"trace:dm"))
+ setlink(findtail(list),new_kern(delta),rule)
+ setlist(current,list)
else
- local rule = tracedrule(-delta,naturalheight,naturaldepth,"trace:dg")
- setlist(current,linked_nodes(list,new_kern(delta),new_hlist(rule)))
+ local rule = new_hlist(tracedrule(-delta,naturalheight,naturaldepth,"trace:dg"))
+ setlink(findtail(list),new_kern(delta),rule)
+ setlist(current,list)
end
end
end
diff --git a/tex/context/base/mkiv/trac-log.lua b/tex/context/base/mkiv/trac-log.lua
index 86557ef09..b6bb123cf 100644
--- a/tex/context/base/mkiv/trac-log.lua
+++ b/tex/context/base/mkiv/trac-log.lua
@@ -114,6 +114,16 @@ if tex and (tex.jobname or tex.formatname) then
texio.setescape(0) -- or (false)
end
+ if arg then
+ -- we're don't have environment.arguments yet
+ for k, v in next, arg do -- k can be negative !
+ if v == "--ansi" or v == "--c:ansi" then
+ variant = "ansi"
+ break
+ end
+ end
+ end
+
local function useluawrites()
-- quick hack, awaiting speedup in engine (8 -> 6.4 sec for --make with console2)
@@ -793,7 +803,7 @@ end
-- we don't have show_open and show_close callbacks yet
-local report_files = logs.reporter("files")
+----- report_files = logs.reporter("files")
local nesting = 0
local verbose = false
local hasscheme = url.hasscheme
diff --git a/tex/context/base/mkiv/trac-par.lua b/tex/context/base/mkiv/trac-par.lua
index fc3be5b6c..56291f8c8 100644
--- a/tex/context/base/mkiv/trac-par.lua
+++ b/tex/context/base/mkiv/trac-par.lua
@@ -21,16 +21,18 @@ local getnext = nuts.getnext
local getlist = nuts.getlist
local getfont = nuts.getfont
local getchar = nuts.getchar
+local getwidth = nuts.getwidth
local nodecodes = nodes.nodecodes
local hlist_code = nodecodes.hlist
local vlist_code = nodecodes.vlist
local glyph_code = nodecodes.glyph
-local kern_code = nodecodes.kern
local setnodecolor = nodes.tracers.colors.set
local parameters = fonts.hashes.parameters
local basepoints = number.basepoints
+local setaction = nodes.tasks.setaction
+
-- definecolor[hz:positive] [r=0.6]
-- definecolor[hz:negative] [g=0.6]
-- definecolor[hz:zero] [b=0.6]
@@ -99,7 +101,7 @@ local function colorize(n)
if trace_verbose then
length = length + 1
list[length] = utfchar(getchar(n))
- width = width + getfield(n,"width") -- no kerning yet
+ width = width + getwidth(n) -- no kerning yet
end
end
end
@@ -127,17 +129,8 @@ function builders.paragraphs.expansion.trace(head)
return head
end
-local tasks = nodes.tasks
-
--- tasks.prependaction("shipouts","normalizers","builders.paragraphs.expansion.trace")
--- tasks.disableaction("shipouts","builders.paragraphs.expansion.trace")
-
local function set(v)
- if v then
- tasks.enableaction("shipouts","builders.paragraphs.expansion.trace")
- else
- tasks.disableaction("shipouts","builders.paragraphs.expansion.trace")
- end
+ setaction("shipouts","builders.paragraphs.expansion.trace",v)
end
trackers.register("builders.paragraphs.expansion.verbose",set)
diff --git a/tex/context/base/mkiv/trac-set.lua b/tex/context/base/mkiv/trac-set.lua
index 9e2bf8758..d0047650f 100644
--- a/tex/context/base/mkiv/trac-set.lua
+++ b/tex/context/base/mkiv/trac-set.lua
@@ -213,7 +213,6 @@ function setters.list(t) -- pattern
end
function setters.show(t)
- local category = t.name
local list = setters.list(t)
t.report()
for k=1,#list do
diff --git a/tex/context/base/mkiv/trac-tex.lua b/tex/context/base/mkiv/trac-tex.lua
index 86f3b539f..66cdc2c91 100644
--- a/tex/context/base/mkiv/trac-tex.lua
+++ b/tex/context/base/mkiv/trac-tex.lua
@@ -6,29 +6,36 @@ if not modules then modules = { } end modules ['trac-tex'] = {
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 = { }
+local trackers = trackers
+local token = token
+local saved = { }
+local create = token.create
+local undefined = create("undefined").command
function trackers.savehash()
saved = texhashtokens()
+ if type(saved[1]) == "table" then
+ -- LUATEXVERSION < 1.002
+ saved = table.tohash(saved)
+ end
+ return saved
end
function trackers.dumphashtofile(filename,delta)
local list = { }
- local hash = tex.hashtokens()
+ local hash = texhashtokens()
local create = token.create
- for name, token in next, hash do
+ if type(hash[1]) == "table" then
+ -- LUATEXVERSION < 1.002
+ hash = table.sortedkeys(hash)
+ end
+ for i=1,#hash do
+ local name = hash[i]
if not delta or not saved[name] then
- if token[2] ~= 0 then -- still old interface
- local token = create(name)
- -- inspect(token)
+ local token = create(name)
+ if token.command ~= undefined then
local category = token.cmdname
local dk = list[category]
if not dk then
@@ -59,34 +66,11 @@ function trackers.dumphashtofile(filename,delta)
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
+ saved = saved or trackers.savehash()
luatex.registerstopactions(1,function() dump_hash(nil,wanteddelta) end) -- at front
end
delta = wanteddelta
@@ -95,8 +79,6 @@ 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 "?",
diff --git a/tex/context/base/mkiv/trac-vis.lua b/tex/context/base/mkiv/trac-vis.lua
index 061cef8ba..5d98bc24f 100644
--- a/tex/context/base/mkiv/trac-vis.lua
+++ b/tex/context/base/mkiv/trac-vis.lua
@@ -9,7 +9,7 @@ if not modules then modules = { } end modules ['trac-vis'] = {
local string, number, table = string, number, table
local node, nodes, attributes, fonts, tex = node, nodes, attributes, fonts, tex
local type = type
-local format = string.format
+local gmatch = string.gmatch
local formatters = string.formatters
-- This module started out in the early days of mkiv and luatex with
@@ -76,6 +76,8 @@ local setlist = nuts.setlist
local setleader = nuts.setleader
local setsubtype = nuts.setsubtype
local setattr = nuts.setattr
+local setwidth = nuts.setwidth
+local setshift = nuts.setshift
local getfield = nuts.getfield
local getid = nuts.getid
@@ -90,18 +92,22 @@ local getnext = nuts.getnext
local getprev = nuts.getprev
local getboth = nuts.getboth
local getdisc = nuts.getdisc
+local getwhd = nuts.getwhd
+local getkern = nuts.getkern
+local getpenalty = nuts.getpenalty
+local getdir = nuts.getdir
+local getwidth = nuts.getwidth
+local getshift = nuts.getshift
local hpack_nodes = nuts.hpack
local vpack_nodes = nuts.vpack
-local copy_node = nuts.copy
local copy_list = nuts.copy_list
-local free_node = nuts.free
-local free_node_list = nuts.flush_list
+local flush_node_list = nuts.flush_list
local insert_node_before = nuts.insert_before
local insert_node_after = nuts.insert_after
local traverse_nodes = nuts.traverse
-local linked_nodes = nuts.linked
-
+local apply_to_nodes = nuts.apply
+local find_tail = nuts.tail
local effectiveglue = nuts.effective_glue
local hpack_string = nuts.typesetters.tohpack
@@ -123,7 +129,6 @@ local nodepool = nuts.pool
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
@@ -147,6 +152,8 @@ local bit = number.bit
local setbit = number.setbit
local clearbit = number.clearbit
+local enableaction = nodes.tasks.enableaction
+
local trace_hbox
local trace_vbox
local trace_vtop
@@ -159,32 +166,35 @@ local trace_whatsit
local trace_user
local trace_math
local trace_italic
+local trace_discretionary
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,
- italic = 8192,
- origin = 16384,
+ hbox = 1,
+ vbox = 2,
+ vtop = 4,
+ kern = 8,
+ glue = 16,
+ -- skip = 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,
+ discretionary = 32768,
}
local usedfont, exheight, emwidth
-local l_penalty, l_glue, l_kern, l_fontkern, l_hbox, l_vbox, l_vtop, l_strut, l_whatsit, l_glyph, l_user, l_math, l_italic, l_origin
+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, l_discretionary
local enabled = false
local layers = { }
@@ -219,30 +229,31 @@ local function enable()
}
layers[mode] = attributes.viewerlayers.register(tag,true)
end
- l_hbox = layers.hbox
- l_vbox = layers.vbox
- l_vtop = layers.vtop
- l_glue = layers.glue
- l_kern = layers.kern
- l_penalty = layers.penalty
- l_fontkern = layers.fontkern
- l_strut = layers.strut
- l_whatsit = layers.whatsit
- l_glyph = layers.glyph
- l_user = layers.user
- l_math = layers.math
- l_italic = layers.italic
- l_origin = layers.origin
- nodes.tasks.enableaction("shipouts","nodes.visualizers.handler")
+ l_hbox = layers.hbox
+ l_vbox = layers.vbox
+ l_vtop = layers.vtop
+ l_glue = layers.glue
+ l_kern = layers.kern
+ l_penalty = layers.penalty
+ l_fontkern = layers.fontkern
+ l_strut = layers.strut
+ l_whatsit = layers.whatsit
+ l_glyph = layers.glyph
+ l_user = layers.user
+ l_math = layers.math
+ l_italic = layers.italic
+ l_origin = layers.origin
+ l_discretionary = layers.discretionary
+ enableaction("shipouts","nodes.visualizers.handler")
report_visualize("enabled")
enabled = true
tex.setcount("global","c_syst_visualizers_state",1) -- so that we can optimize at the tex end
end
-local function setvisual(n,a,what) -- this will become more efficient when we have the bit lib linked in
+local function setvisual(n,a,what,list) -- this will become more efficient when we have the bit lib linked in
if not n or n == "reset" then
return unsetvalue
- elseif n == "makeup" then
+ elseif n == true or n == "makeup" then
if not a or a == 0 or a == unsetvalue then
a = preset_makeup
else
@@ -263,22 +274,15 @@ local function setvisual(n,a,what) -- this will become more efficient when we ha
a = setbit(a,preset_all)
end
else
- local m = modes[n]
- if not m then
- -- go on
- elseif a == unsetvalue then
- if what == false then
- return unsetvalue
- else
- -- a = setbit(0,m)
+ for s in gmatch(n,"[a-z]+") do
+ local m = modes[s]
+ if not m then
+ -- go on
+ elseif not a or a == 0 or a == unsetvalue then
a = m
+ else
+ a = setbit(a,m)
end
- elseif what == false then
- a = clearbit(a,m)
- elseif not a or a == 0 then
- a = m
- else
- a = setbit(a,m)
end
end
if not a or a == 0 or a == unsetvalue then
@@ -293,6 +297,20 @@ function nuts.setvisual(n,mode)
setattr(n,a_visual,setvisual(mode,getattr(n,a_visual),true))
end
+function nuts.setvisuals(n,mode)
+ setattr(n,a_visual,setvisual(mode,getattr(n,a_visual),true,true))
+end
+
+function nuts.applyvisuals(n,mode)
+ local a = unsetvalue
+ if mode == true then
+ a = texgetattribute (a_visual)
+ elseif mode then
+ a = setvisual(mode)
+ end
+ apply_to_nodes(n,function(n) setattr(n,a_visual,a) end)
+end
+
function nuts.copyvisual(n,m)
setattr(n,a_visual,getattr(m,a_visual))
end
@@ -325,35 +343,37 @@ trackers .register("visualizers.makeup", function(v) set("makeup",v) end)
trackers .register("visualizers.boxes", function(v) set("boxes", v) end)
directives.register("visualizers.fraction", function(v) fraction = (v and tonumber(v)) or (v == "more" and 5) or 10 end)
-local c_positive = "trace:b"
-local c_negative = "trace:r"
-local c_zero = "trace:g"
-local c_text = "trace:s"
-local c_space = "trace:y"
-local c_skip_a = "trace:c"
-local c_skip_b = "trace:m"
-local c_glyph = "trace:o"
-local c_ligature = "trace:s"
-local c_white = "trace:w"
-local c_math = "trace:r"
-local c_origin = "trace:o"
-
-local c_positive_d = "trace:db"
-local c_negative_d = "trace:dr"
-local c_zero_d = "trace:dg"
-local c_text_d = "trace:ds"
-local c_space_d = "trace:dy"
-local c_skip_a_d = "trace:dc"
-local c_skip_b_d = "trace:dm"
-local c_glyph_d = "trace:do"
-local c_ligature_d = "trace:ds"
-local c_white_d = "trace:dw"
-local c_math_d = "trace:dr"
-local c_origin_d = "trace:do"
+local c_positive = "trace:b"
+local c_negative = "trace:r"
+local c_zero = "trace:g"
+local c_text = "trace:s"
+local c_space = "trace:y"
+local c_skip_a = "trace:c"
+local c_skip_b = "trace:m"
+local c_glyph = "trace:o"
+local c_ligature = "trace:s"
+local c_white = "trace:w"
+local c_math = "trace:r"
+local c_origin = "trace:o"
+local c_discretionary = "trace:o"
+
+local c_positive_d = "trace:db"
+local c_negative_d = "trace:dr"
+local c_zero_d = "trace:dg"
+local c_text_d = "trace:ds"
+local c_space_d = "trace:dy"
+local c_skip_a_d = "trace:dc"
+local c_skip_b_d = "trace:dm"
+local c_glyph_d = "trace:do"
+local c_ligature_d = "trace:ds"
+local c_white_d = "trace:dw"
+local c_math_d = "trace:dr"
+local c_origin_d = "trace:do"
+local c_discretionary_d = "trace:do"
local function sometext(str,layer,color,textcolor,lap) -- we can just paste verbatim together .. no typesteting needed
local text = hpack_string(str,usedfont)
- local size = getfield(text,"width")
+ local size = getwidth(text)
local rule = new_rule(size,2*exheight,exheight/2)
local kern = new_kern(-size)
if color then
@@ -362,12 +382,14 @@ local function sometext(str,layer,color,textcolor,lap) -- we can just paste verb
if textcolor then
setlistcolor(getlist(text),textcolor)
end
- local info = linked_nodes(rule,kern,text)
+ local info = setlink(rule,kern,text)
setlisttransparency(info,c_zero)
- info = new_hlist(info)
- local width = getfield(info,"width")
+ info = hpack_nodes(info)
+ local width = getwidth(info)
if lap then
- info = new_hlist(linked_nodes(new_kern(-width),info))
+ info = new_hlist(setlink(new_kern(-width),info))
+ else
+ info = new_hlist(info)
end
if layer then
setattr(info,a_layer,layer)
@@ -375,472 +397,537 @@ local function sometext(str,layer,color,textcolor,lap) -- we can just paste verb
return info, width
end
-local f_cache = { }
+local caches = table.setmetatableindex("table")
-local function fontkern(head,current)
- local kern = getfield(current,"kern") + getfield(current,"expansion_factor")
- local info = f_cache[kern]
- if info then
- -- print("hit fontkern")
- else
- local text = hpack_string(formatters[" %0.3f"](kern*pt_factor),usedfont)
- local rule = new_rule(emwidth/fraction,6*exheight,2*exheight)
- local list = getlist(text)
- if kern > 0 then
- setlistcolor(list,c_positive_d)
- elseif kern < 0 then
- setlistcolor(list,c_negative_d)
+local fontkern do
+
+ local f_cache = caches["fontkern"]
+
+ fontkern = function(head,current)
+ local width = getkern(current)
+ local extra = getfield(current,"expansion_factor")
+ local kern = width + extra
+ local info = f_cache[kern]
+ -- report_visualize("fontkern: %p ex %p",width,extra)
+ if info then
+ -- print("hit fontkern")
else
- setlistcolor(list,c_zero_d)
+ local text = hpack_string(formatters[" %0.3f"](kern*pt_factor),usedfont)
+ local rule = new_rule(emwidth/fraction,6*exheight,2*exheight)
+ local list = getlist(text)
+ if kern > 0 then
+ setlistcolor(list,c_positive_d)
+ elseif kern < 0 then
+ setlistcolor(list,c_negative_d)
+ else
+ setlistcolor(list,c_zero_d)
+ end
+ setlisttransparency(list,c_text_d)
+ setcolor(rule,c_text_d)
+ settransparency(rule,c_text_d)
+ setshift(text,-5 * exheight)
+ info = new_hlist(setlink(rule,text))
+ setattr(info,a_layer,l_fontkern)
+ f_cache[kern] = info
end
- setlisttransparency(list,c_text_d)
- settransparency(rule,c_text_d)
- setfield(text,"shift",-5 * exheight)
- info = new_hlist(linked_nodes(rule,text))
- setattr(info,a_layer,l_fontkern)
- f_cache[kern] = info
+ head = insert_node_before(head,current,copy_list(info))
+ return head, current
end
- head = insert_node_before(head,current,copy_list(info))
- return head, current
-end
-local w_cache = { }
-local tags = {
- 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)
- local what = getsubtype(current)
- local info = w_cache[what]
- if info then
- -- print("hit whatsit")
- else
- local tag = whatsitcodes[what]
- -- maybe different text colors per tag
- info = sometext(formatters["W:%s"](tag and tags[tag] or what),usedfont,nil,c_white)
- setattr(info,a_layer,l_whatsit)
- w_cache[what] = info
- end
- head, current = insert_node_after(head,current,copy_list(info))
- return head, current
end
-local u_cache = { }
+local whatsit do
+
+ local w_cache = caches["whatsit"]
+
+ local tags = {
+ 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 user(head,current)
- local what = getsubtype(current)
- local info = u_cache[what]
- if info then
- -- print("hit user")
- else
- info = sometext(formatters["U:%s"](what),usedfont)
- setattr(info,a_layer,l_user)
- u_cache[what] = info
+ whatsit = function(head,current)
+ local what = getsubtype(current)
+ local info = w_cache[what]
+ if info then
+ -- print("hit whatsit")
+ else
+ local tag = whatsitcodes[what]
+ -- maybe different text colors per tag
+ info = sometext(formatters["W:%s"](tag and tags[tag] or what),usedfont,nil,c_white)
+ setattr(info,a_layer,l_whatsit)
+ w_cache[what] = info
+ end
+ head, current = insert_node_after(head,current,copy_list(info))
+ return head, current
end
- head, current = insert_node_after(head,current,copy_list(info))
- return head, current
+
end
-local m_cache = { }
-local tags = {
- beginmath = "B",
- endmath = "E",
-}
+local user do
-local function math(head,current)
- local what = getsubtype(current)
- local info = m_cache[what]
- if info then
- -- print("hit math")
- else
- local tag = mathcodes[what]
- info = sometext(formatters["M:%s"](tag and tags[tag] or what),usedfont,nil,c_math_d)
- setattr(info,a_layer,l_math)
- m_cache[what] = info
+ local u_cache = caches["user"]
+
+ user = function(head,current)
+ local what = getsubtype(current)
+ local info = u_cache[what]
+ if info then
+ -- print("hit user")
+ else
+ info = sometext(formatters["U:%s"](what),usedfont)
+ setattr(info,a_layer,l_user)
+ u_cache[what] = info
+ end
+ head, current = insert_node_after(head,current,copy_list(info))
+ return head, current
end
- head, current = insert_node_after(head,current,copy_list(info))
- return head, current
+
end
-local b_cache = { }
+local math do
-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 m_cache = {
+ beginmath = caches["bmath"],
+ endmath = caches["emath"],
+ }
-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")
- local dp = getfield(current,"depth")
- local shift = getfield(current,"shift")
- local next = getnext(current)
- local prev = previous
- -- local prev = getprev(current) -- prev can be wrong in math mode < 0.78.3
- 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
- baseline = b_cache.baseline
- 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(size),new_rule(3*size,linewidth,0),new_glue(size))
- leader = hpack_nodes(leader)
- baseline = new_glue(0)
- 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 = 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)
+ local tags = {
+ beginmath = "B",
+ endmath = "E",
+ }
+
+ math = function(head,current)
+ local what = getsubtype(current)
+ local tag = mathcodes[what]
+ local skip = getkern(current) + getwidth(current) -- surround
+ local info = m_cache[tag][skip]
+ if info then
+ -- print("hit math")
+ else
+ local text, width = sometext(formatters["M:%s"](tag and tags[tag] or what),usedfont,nil,c_math_d)
+ local rule = new_rule(skip,-655360/fraction,2*655360/fraction)
+ setcolor(rule,c_math_d)
+ settransparency(rule,c_math_d)
+ setattr(rule,a_layer,l_math)
+ if tag == "beginmath" then
+ info = new_hlist(setlink(new_glue(-skip),rule,new_glue(-width),text))
else
- baseline = new_rule(wd-size,linewidth,0)
- baseskip = new_kern(-wd+size)
+ info = new_hlist(setlink(new_glue(-skip),rule,new_glue(-skip),text))
end
+ setattr(info,a_layer,l_math)
+ m_cache[tag][skip] = info
end
- local this
- if not simple then
- this = b_cache[what]
- if not this then
- local text = hpack_string(what,usedfont)
- this = linked_nodes(new_kern(-getfield(text,"width")),text)
- setlisttransparency(this,c_text)
- this = new_hlist(this)
- b_cache[what] = this
+ head, current = insert_node_after(head,current,copy_list(info))
+ return head, current
+ end
+
+end
+
+local ruledbox do
+
+ local b_cache = caches["box"]
+ local o_cache = caches["origin"]
+
+ table.setmetatableindex(o_cache,function(t,size)
+ local rule = new_rule(2*size,size,size)
+ local origin = hpack_nodes(rule)
+ setcolor(rule,c_origin_d)
+ settransparency(rule,c_origin_d)
+ setattr(rule,a_layer,l_origin)
+ t[size] = origin
+ return origin
+ end)
+
+ ruledbox = function(head,current,vertical,layer,what,simple,previous,trace_origin,parent)
+ local wd, ht, dp = getwhd(current)
+ if wd ~= 0 then
+ local shift = getshift(current)
+ local dir = getdir(current)
+ -- if dir == "LTL" or dir == "RRT" then
+ -- wd, ht, dp = ht + dp, wd, 0
+ -- end
+ local next = getnext(current)
+ local prev = previous
+ -- local prev = getprev(current) -- prev can be wrong in math mode < 0.78.3
+ 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
+ local targetsize = wd - size
+ baseline = b_cache[targetsize]
+ 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 = setlink(new_glue(size),new_rule(3*size,linewidth,0),new_glue(size))
+ leader = hpack_nodes(leader)
+ baseline = new_glue(0,65536,0,2,0)
+ setleader(baseline,leader)
+ setsubtype(baseline,cleaders_code)
+ setlisttransparency(baseline,c_text)
+ baseline = hpack_nodes(baseline,targetsize)
+ b_cache[targetsize] = baseline
+ end
+ baseline = copy_list(baseline)
+ baseskip = new_kern(-wd+linewidth)
+ else
+ baseline = new_rule(wd-size,linewidth,0)
+ baseskip = new_kern(-wd+size)
+ end
end
- end
- -- we need to trigger the right mode (else sometimes no whatits)
- local info = linked_nodes(
- this and copy_list(this) or nil,
- new_rule(linewidth,ht,dp),
- new_rule(wd-size,-dp+linewidth,dp),
- new_rule(linewidth,ht,dp),
- new_kern(-wd+linewidth),
- new_rule(wd-size,ht,-ht+linewidth)
- )
- if baseskip then
- info = linked_nodes(info,baseskip,baseline) -- could be in previous linked
- end
- setlisttransparency(info,c_text)
- info = new_hlist(info)
- --
- setattr(info,a_layer,layer)
- if vertical then
- 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)
+ local this
+ if not simple then
+ this = b_cache[what]
+ if not this then
+ local text = hpack_string(what,usedfont)
+ this = setlink(new_kern(-getwidth(text)),text)
+ setlisttransparency(this,c_text)
+ this = new_hlist(this)
+ b_cache[what] = this
+ end
+ end
+ -- we need to trigger the right mode (else sometimes no whatits)
+ local info = setlink(
+ this and copy_list(this) or nil,
+ new_rule(linewidth,ht,dp),
+ new_rule(wd-size,-dp+linewidth,dp),
+ new_rule(linewidth,ht,dp),
+ new_kern(-wd+linewidth),
+ new_rule(wd-size,ht,-ht+linewidth),
+ baseskip,
+ baseskip and baseline or nil
+ )
+ setlisttransparency(info,c_text)
+ info = new_hlist(info)
+ --
+ setattr(info,a_layer,layer)
+ if vertical then
+ if shift == 0 then
+ info = setlink(current,dp ~= 0 and new_kern(-dp) or nil,info)
+ elseif trace_origin then
+ local size = 2*size
+ local origin = o_cache[size]
+ origin = copy_list(origin)
+ if getid(parent) == vlist_code then
+ setshift(origin,-shift)
+ info = setlink(current,new_kern(-size),origin,new_kern(-size-dp),info)
+ else
+ -- todo .. i need an example
+ info = setlink(current,dp ~= 0 and new_kern(-dp) or nil,info)
+ end
+ setshift(current,0)
else
- -- todo .. i need an example
- info = linked_nodes(current,info)
+ info = setlink(current,new_dp ~= 0 and new_kern(-dp) or nil,info)
+ setshift(current,0)
end
- setfield(current,"shift",0)
+ info = new_vlist(info,wd,ht,dp,shift)
else
- info = linked_nodes(current,info)
- setfield(current,"shift",0)
+ if shift == 0 then
+ info = setlink(current,new_kern(-wd),info)
+ elseif trace_origin then
+ local size = 2*size
+ local origin = o_cache[size]
+ origin = copy_list(origin)
+ if getid(parent) == vlist_code then
+ info = setlink(current,new_kern(-wd-size-shift),origin,new_kern(-size+shift),info)
+ else
+ setshift(origin,-shift)
+ info = setlink(current,new_kern(-wd-size),origin,new_kern(-size),info)
+ end
+ setshift(current,0)
+ else
+ info = setlink(current,new_kern(-wd),info)
+ setshift(current,0)
+ end
+ info = new_hlist(info,wd,ht,dp,shift)
end
- 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)
+ if next then
+ 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(origin,"shift",-shift)
- info = linked_nodes(current,new_kern(-wd-size),origin,new_kern(-size),info)
+ setlink(prev,info)
end
- setfield(current,"shift",0)
+ end
+ if head == current then
+ return info, info
else
- info = linked_nodes(current,new_kern(-wd),info)
- setfield(current,"shift",0)
+ return head, info
end
- info = new_hlist(info,wd,ht,dp,shift)
+ else
+ return head, current
end
+ 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
- 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
+end
+
+local ruledglyph do
+
+ ruledglyph = function(head,current,previous) -- wrong for vertical glyphs
+ local wd = getwidth(current)
+ -- local wd = chardata[getfont(current)][getchar(current)].width
+ if wd ~= 0 then
+ local wd, ht, dp = getwhd(current)
+ -- local dir = getdir(current)
+ -- if dir == "LTL" or dir = "RTT" then
+ -- wd, ht, dp = ht + dp, wd, 0
+ -- end
+ local next = getnext(current)
+ local prev = previous
+ setboth(current)
+ local linewidth = emwidth/(2*fraction)
+ local baseline
+ -- if dp ~= 0 and ht ~= 0 then
+ if (dp >= 0 and ht >= 0) or (dp <= 0 and ht <= 0) then
+ baseline = new_rule(wd-2*linewidth,linewidth,0)
+ end
+ local doublelinewidth = 2*linewidth
+ -- could be a pdf rule (or a user rule now)
+ local info = setlink(
+ new_rule(linewidth,ht,dp),
+ new_rule(wd-doublelinewidth,-dp+linewidth,dp),
+ new_rule(linewidth,ht,dp),
+ new_kern(-wd+linewidth),
+ new_rule(wd-doublelinewidth,ht,-ht+linewidth),
+ new_kern(-wd+doublelinewidth),
+ baseline
+ )
+ 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 = setlink(current,new_kern(-wd),info)
+ info = hpack_nodes(info)
+ setwidth(info,wd)
+ if next then
+ setlink(info,next)
+ end
+ if prev then
setlink(prev,info)
end
- end
- if head == current then
- return info, info
+ if head == current then
+ return info, info
+ else
+ return head, info
+ end
else
- return head, info
+ return head, current
end
- else
- return head, current
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[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
- setboth(current)
- local linewidth = emwidth/(2*fraction)
- local baseline
- -- if dp ~= 0 and ht ~= 0 then
- if (dp >= 0 and ht >= 0) or (dp <= 0 and ht <= 0) then
- baseline = new_rule(wd-2*linewidth,linewidth,0)
- end
- local doublelinewidth = 2*linewidth
- -- 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),
- new_rule(linewidth,ht,dp),
- new_kern(-wd+linewidth),
- new_rule(wd-doublelinewidth,ht,-ht+linewidth),
- new_kern(-wd+doublelinewidth),
- baseline
- )
- 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)
+local ruledglue do
+
+ local g_cache_v = caches["vglue"]
+ local g_cache_h = caches["hglue"]
+
+ local tags = {
+ -- userskip = "US",
+ lineskip = "LS",
+ baselineskip = "BS",
+ parskip = "PS",
+ abovedisplayskip = "DA",
+ belowdisplayskip = "DB",
+ abovedisplayshortskip = "SA",
+ belowdisplayshortskip = "SB",
+ leftskip = "LS",
+ rightskip = "RS",
+ topskip = "TS",
+ splittopskip = "ST",
+ tabskip = "AS",
+ spaceskip = "SS",
+ xspaceskip = "XS",
+ parfillskip = "PF",
+ thinmuskip = "MS",
+ medmuskip = "MM",
+ thickmuskip = "ML",
+ leaders = "NL",
+ cleaders = "CL",
+ xleaders = "XL",
+ gleaders = "GL",
+ -- true = "VS",
+ -- false = "HS",
+ }
+
+ -- we sometimes pass previous as we can have issues in math (not watertight for all)
+
+ ruledglue = function(head,current,vertical,parent)
+ local subtype = getsubtype(current)
+ local width = effectiveglue(current,parent)
+ local amount = formatters["%s:%0.3f"](tags[subtype] or (vertical and "VS") or "HS",width*pt_factor)
+ local info = (vertical and g_cache_v or g_cache_h)[amount]
+ if info then
+ -- print("glue hit")
else
- 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 = hpack_nodes(info)
- setfield(info,"width",wd)
- if next then
- setlink(info,next)
- end
- if prev then
- setlink(prev,info)
+ if subtype == space_code or subtype == xspace_code then -- not yet all space
+ info = sometext(amount,l_glue,c_space)
+ elseif subtype == leftskip_code or subtype == rightskip_code then
+ info = sometext(amount,l_glue,c_skip_a)
+ elseif subtype == userskip_code then
+ if width > 0 then
+ info = sometext(amount,l_glue,c_positive)
+ elseif width < 0 then
+ info = sometext(amount,l_glue,c_negative)
+ else
+ info = sometext(amount,l_glue,c_zero)
+ end
+ else
+ info = sometext(amount,l_glue,c_skip_b)
+ end
+ (vertical and g_cache_v or g_cache_h)[amount] = info
end
- if head == current then
- return info, info
- else
- return head, info
+ info = copy_list(info)
+ if vertical then
+ info = vpack_nodes(info)
end
- else
- return head, current
+ head, current = insert_node_before(head,current,info)
+ return head, getnext(current)
end
+
end
-local g_cache_v = { }
-local g_cache_h = { }
-
-local tags = {
- -- userskip = "US",
- lineskip = "LS",
- baselineskip = "BS",
- parskip = "PS",
- abovedisplayskip = "DA",
- belowdisplayskip = "DB",
- abovedisplayshortskip = "SA",
- belowdisplayshortskip = "SB",
- leftskip = "LS",
- rightskip = "RS",
- topskip = "TS",
- splittopskip = "ST",
- tabskip = "AS",
- spaceskip = "SS",
- xspaceskip = "XS",
- parfillskip = "PF",
- thinmuskip = "MS",
- medmuskip = "MM",
- thickmuskip = "ML",
- leaders = "NL",
- cleaders = "CL",
- xleaders = "XL",
- gleaders = "GL",
- -- true = "VS",
- -- false = "HS",
-}
+local ruledkern do
--- we sometimes pass previous as we can have issues in math (not watertight for all)
+ local k_cache_v = caches["vkern"]
+ local k_cache_h = caches["hkern"]
-local function ruledglue(head,current,vertical,parent)
- local subtype = getsubtype(current)
- local width = effectiveglue(current,parent)
- local amount = formatters["%s:%0.3f"](tags[subtype] or (vertical and "VS") or "HS",width*pt_factor)
- local info = (vertical and g_cache_v or g_cache_h)[amount]
- if info then
- -- print("glue hit")
- else
- if subtype == space_code or subtype == xspace_code then -- not yet all space
- info = sometext(amount,l_glue,c_space)
- elseif subtype == leftskip_code or subtype == rightskip_code then
- info = sometext(amount,l_glue,c_skip_a)
- elseif subtype == userskip_code then
- if width > 0 then
- info = sometext(amount,l_glue,c_positive)
- elseif width < 0 then
- info = sometext(amount,l_glue,c_negative)
+ ruledkern = function(head,current,vertical)
+ local kern = getkern(current)
+ local info = (vertical and k_cache_v or k_cache_h)[kern]
+ if info then
+ -- print("kern hit")
+ else
+ local amount = formatters["%s:%0.3f"](vertical and "VK" or "HK",kern*pt_factor)
+ if kern > 0 then
+ info = sometext(amount,l_kern,c_positive)
+ elseif kern < 0 then
+ info = sometext(amount,l_kern,c_negative)
else
- info = sometext(amount,l_glue,c_zero)
+ info = sometext(amount,l_kern,c_zero)
end
- else
- info = sometext(amount,l_glue,c_skip_b)
+ (vertical and k_cache_v or k_cache_h)[kern] = info
end
- (vertical and g_cache_v or g_cache_h)[amount] = info
- end
- info = copy_list(info)
- if vertical then
- info = vpack_nodes(info)
+ info = copy_list(info)
+ if vertical then
+ info = vpack_nodes(info)
+ end
+ head, current = insert_node_before(head,current,info)
+ return head, getnext(current)
end
- head, current = insert_node_before(head,current,info)
- return head, getnext(current)
+
end
-local k_cache_v = { }
-local k_cache_h = { }
+local ruleditalic do
-local function ruledkern(head,current,vertical)
- local kern = getfield(current,"kern")
- local info = (vertical and k_cache_v or k_cache_h)[kern]
- if info then
- -- print("kern hit")
- else
- local amount = formatters["%s:%0.3f"](vertical and "VK" or "HK",kern*pt_factor)
- if kern > 0 then
- info = sometext(amount,l_kern,c_positive)
- elseif kern < 0 then
- info = sometext(amount,l_kern,c_negative)
+ local i_cache = caches["itatalic"]
+
+ ruleditalic = function(head,current)
+ local kern = getkern(current)
+ local info = i_cache[kern]
+ if info then
+ -- print("kern hit")
else
- info = sometext(amount,l_kern,c_zero)
+ 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
- (vertical and k_cache_v or k_cache_h)[kern] = info
- end
- info = copy_list(info)
- if vertical then
- info = vpack_nodes(info)
+ info = copy_list(info)
+ head, current = insert_node_before(head,current,info)
+ return head, getnext(current)
end
- head, current = insert_node_before(head,current,info)
- return head, getnext(current)
-end
-local i_cache = { }
+end
-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)
+local ruleddiscretionary do
+
+ local d_cache = caches["discretionary"]
+
+ ruleddiscretionary = function(head,current)
+ local d = d_cache[true]
+ if not the_discretionary then
+ local rule = new_rule(4*emwidth/fraction,4*exheight,exheight)
+ local kern = new_kern(-2*emwidth/fraction)
+ setlink(kern,rule)
+ setcolor(rule,c_discretionary_d)
+ settransparency(rule,c_discretionary_d)
+ setattr(rule,a_layer,l_discretionary)
+ d = new_hlist(kern)
+ d_cache[true] = d
end
- i_cache[kern] = info
+ insert_node_after(head,current,copy_list(d))
+ return head, current
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 ruledpenalty do
-local function ruledpenalty(head,current,vertical)
- local penalty = getfield(current,"penalty")
- local info = (vertical and p_cache_v or p_cache_h)[penalty]
- if info then
- -- print("penalty hit")
- else
- local amount = formatters["%s:%s"](vertical and "VP" or "HP",penalty)
- if penalty > 0 then
- info = sometext(amount,l_penalty,c_positive)
- elseif penalty < 0 then
- info = sometext(amount,l_penalty,c_negative)
+ local p_cache_v = caches["vpenalty"]
+ local p_cache_h = caches["hpenalty"]
+
+ ruledpenalty = function(head,current,vertical)
+ local penalty = getpenalty(current)
+ local info = (vertical and p_cache_v or p_cache_h)[penalty]
+ if info then
+ -- print("penalty hit")
else
- info = sometext(amount,l_penalty,c_zero)
+ local amount = formatters["%s:%s"](vertical and "VP" or "HP",penalty)
+ if penalty > 0 then
+ info = sometext(amount,l_penalty,c_positive)
+ elseif penalty < 0 then
+ info = sometext(amount,l_penalty,c_negative)
+ else
+ info = sometext(amount,l_penalty,c_zero)
+ end
+ (vertical and p_cache_v or p_cache_h)[penalty] = info
end
- (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)
+ info = copy_list(info)
+ if vertical then
+ info = vpack_nodes(info)
+ elseif raisepenalties then
+ setshift(info,-65536*4)
+ end
+ head, current = insert_node_before(head,current,info)
+ return head, getnext(current)
end
- head, current = insert_node_before(head,current,info)
- return head, getnext(current)
+
end
local function visualize(head,vertical,forced,parent)
@@ -869,37 +956,39 @@ local function visualize(head,vertical,forced,parent)
if a ~= attr then
prev_trace_fontkern = trace_fontkern
if a == unsetvalue then
- trace_hbox = false
- trace_vbox = false
- trace_vtop = false
- trace_kern = false
- trace_glue = false
- trace_penalty = false
- trace_fontkern = false
- trace_strut = false
- trace_whatsit = false
- trace_glyph = false
- trace_simple = false
- trace_user = false
- trace_math = false
- trace_italic = false
- trace_origin = false
+ trace_hbox = false
+ trace_vbox = false
+ trace_vtop = false
+ trace_kern = false
+ trace_glue = false
+ trace_penalty = false
+ trace_fontkern = false
+ trace_strut = false
+ trace_whatsit = false
+ trace_glyph = false
+ trace_simple = false
+ trace_user = false
+ trace_math = false
+ trace_italic = false
+ trace_origin = false
+ trace_discretionary = false
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_italic = hasbit(a, 8192)
- trace_origin = hasbit(a,16384)
+ 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)
+ trace_discretionary = hasbit(a,32768)
end
attr = a
end
@@ -910,6 +999,9 @@ local function visualize(head,vertical,forced,parent)
head, current = ruledglyph(head,current,previous)
end
elseif id == disc_code then
+ if trace_discretionary then
+ head, current = ruleddiscretionary(head,current)
+ end
local pre, post, replace = getdisc(current)
if pre then
pre = visualize(pre,false,a,parent)
@@ -985,46 +1077,21 @@ end
do
- local function freed(cache)
- local n = 0
- for k, v in next, cache do
- free_node_list(v)
- n = n + 1
+ local function cleanup()
+ for tag, cache in next, caches do
+ for k, v in next, cache do
+ flush_node_list(v)
+ end
end
- if n == 0 then
- return 0, cache
- else
- return n, { }
+ cleanup = function()
+ report_visualize("error, duplicate cleanup")
end
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),true)
- -- texsetattribute(a_layer,l)
- -- texsetattribute(a_visual,v)
- -- -- cleanup()
stoptiming(visualizers)
return tonode(head), true
else
@@ -1091,7 +1158,7 @@ end
statistics.register("visualization time",function()
if enabled then
-- cleanup() -- in case we don't don't do it each time
- return format("%s seconds",statistics.elapsedtime(visualizers))
+ return formatters["%s seconds"](statistics.elapsedtime(visualizers))
end
end)
@@ -1099,9 +1166,38 @@ end)
local implement = interfaces.implement
-implement { name = "setvisual", arguments = "string", actions = visualizers.setvisual }
-implement { name = "getvisual", arguments = "string", actions = { setvisual, context } }
-implement { name = "setvisuallayer", arguments = "string", actions = visualizers.setlayer }
-implement { name = "markvisualfonts", arguments = "integer", actions = visualizers.markfonts }
-implement { name = "setvisualfont", arguments = "integer", actions = visualizers.setfont }
+implement {
+ name = "setvisual",
+ arguments = "string",
+ actions = visualizers.setvisual
+}
+
+implement {
+ name = "setvisuals",
+ arguments = "string",
+ actions = visualizers.setvisual
+}
+
+implement {
+ name = "getvisual",
+ arguments = "string",
+ actions = { setvisual, context }
+}
+
+ implement {
+ name = "setvisuallayer",
+ arguments = "string",
+ actions = visualizers.setlayer
+}
+
+implement {
+ name = "markvisualfonts",
+ arguments = "integer",
+ actions = visualizers.markfonts
+}
+implement {
+ name = "setvisualfont",
+ arguments = "integer",
+ actions = visualizers.setfont
+}
diff --git a/tex/context/base/mkiv/trac-vis.mkiv b/tex/context/base/mkiv/trac-vis.mkiv
index a503981f5..894408222 100644
--- a/tex/context/base/mkiv/trac-vis.mkiv
+++ b/tex/context/base/mkiv/trac-vis.mkiv
@@ -39,7 +39,7 @@
\newconstant\c_syst_visualizers_state
\newtoks \t_syst_visualizers_optimize
-\definesystemattribute[visual][public,global] % global ?
+% \definesystemattribute[visual][public,global] % already defined
% no, but can become an option:
%
diff --git a/tex/context/base/mkiv/trac-xml.lua b/tex/context/base/mkiv/trac-xml.lua
index cd8b8c0a5..7906d76a8 100644
--- a/tex/context/base/mkiv/trac-xml.lua
+++ b/tex/context/base/mkiv/trac-xml.lua
@@ -169,6 +169,7 @@ function reporters.export(t,methods,filename)
if filename then
local fullname = file.replacesuffix(filename,method)
t.report("saving export in %a",fullname)
+ dir.mkdirs(file.pathpart(fullname))
io.savedata(fullname,result)
else
reporters.lines(t,result)
diff --git a/tex/context/base/mkiv/type-set.mkiv b/tex/context/base/mkiv/type-set.mkiv
index e2d7071d4..1ef137d39 100644
--- a/tex/context/base/mkiv/type-set.mkiv
+++ b/tex/context/base/mkiv/type-set.mkiv
@@ -121,4 +121,12 @@
\definefilesynonym [type-imp-mathdesigngaramond.mkiv] [type-imp-mathdesign.mkiv]
\definefilesynonym [type-imp-mathdesignutopia.mkiv] [type-imp-mathdesign.mkiv]
+\definefilesynonym [type-imp-cows.mkiv] [type-imp-koeielettersot.mkiv]
+\definefilesynonym [type-imp-sheep.mkiv] [type-imp-koeielettersot.mkiv]
+\definefilesynonym [type-imp-coloredcows.mkiv] [type-imp-koeielettersot.mkiv]
+\definefilesynonym [type-imp-coloredsheep.mkiv] [type-imp-koeielettersot.mkiv]
+\definefilesynonym [type-imp-koeieletters.mkiv] [type-imp-koeielettersot.mkiv]
+
+\definefilesynonym [type-imp-stixtwo.mkiv] [type-imp-stix.mkiv]
+
\protect \endinput
diff --git a/tex/context/base/mkiv/typo-bld.lua b/tex/context/base/mkiv/typo-bld.lua
index ce6a65baf..153218eef 100644
--- a/tex/context/base/mkiv/typo-bld.lua
+++ b/tex/context/base/mkiv/typo-bld.lua
@@ -37,6 +37,7 @@ local texnest = tex.nest
local texlists = tex.lists
local nodes = nodes
+local nodeidstostring = nodes.idstostring
local nodepool = nodes.pool
local new_baselineskip = nodepool.baselineskip
local new_lineskip = nodepool.lineskip
@@ -46,6 +47,8 @@ local hpack_node = nodes.hpack
local starttiming = statistics.starttiming
local stoptiming = statistics.stoptiming
+local registercallback = callbacks.register
+
storage.register("builders/paragraphs/constructors/names", names, "builders.paragraphs.constructors.names")
storage.register("builders/paragraphs/constructors/numbers", numbers, "builders.paragraphs.constructors.numbers")
@@ -172,7 +175,7 @@ end
function constructors.enable () enabled = true end
function constructors.disable() enabled = false end
-callbacks.register('linebreak_filter', processor, "breaking paragraps into lines")
+registercallback('linebreak_filter', processor, "breaking paragraps into lines")
statistics.register("linebreak processing time", function()
return statistics.elapsedseconds(parbuilders)
@@ -183,8 +186,6 @@ end)
nodes.builders = nodes.builder or { }
local builders = nodes.builders
-local normalize = typesetters.paragraphs.normalize
-
local vboxactions = nodes.tasks.actions("vboxbuilders")
function builders.vpack_filter(head,groupcode,size,packtype,maxdepth,direction)
@@ -227,9 +228,8 @@ end
-- 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
+-- the check can go away
function builders.buildpage_filter(groupcode)
-- the next check saves 1% runtime on 1000 tufte pages
@@ -257,9 +257,9 @@ function builders.buildpage_filter(groupcode)
end
end
-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")
+registercallback('vpack_filter', builders.vpack_filter, "vertical spacing etc")
+registercallback('buildpage_filter', builders.buildpage_filter, "vertical spacing etc (mvl)")
+----------------('contribute_filter', builders.contribute_filter, "adding content to lists")
statistics.register("v-node processing time", function()
return statistics.elapsedseconds(builders)
@@ -298,7 +298,7 @@ local function vpack_quality(how,n,detail,first,last)
end
trackers.register("builders.vpack.quality",function(v)
- callback.register("vpack_quality",v and report_vpack_quality or nil)
+ registercallback("vpack_quality",v and report_vpack_quality or nil,"check vpack quality")
end)
local report, show = false, false
@@ -349,37 +349,40 @@ end
trackers.register("builders.hpack.quality",function(v)
report = v
- callback.register("hpack_quality",(report or show) and hpack_quality or nil)
+ registercallback("hpack_quality",(report or show) and hpack_quality or nil,"check hpack quality")
end)
trackers.register("builders.hpack.overflow",function(v)
show = v
- callback.register("hpack_quality",(report or show) and hpack_quality or nil)
+ registercallback("hpack_quality",(report or show) and hpack_quality or nil,"check hpack quality")
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
+-- registercallback(
+-- "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
--- d = d - box.height
+-- return box, mirrored and box.height or box.depth
-- 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)
---
+-- end,
+-- "experimental prevdepth checking"
+-- )
diff --git a/tex/context/base/mkiv/typo-brk.lua b/tex/context/base/mkiv/typo-brk.lua
index 106bb4954..84eff0654 100644
--- a/tex/context/base/mkiv/typo-brk.lua
+++ b/tex/context/base/mkiv/typo-brk.lua
@@ -32,11 +32,15 @@ local getsubtype = nuts.getsubtype
local getfont = nuts.getfont
local getid = nuts.getid
local getfield = nuts.getfield
-local getattr = nuts.getattr
+----- getattr = nuts.getattr
+local getattrlist = nuts.getattrlist
+local takeattr = nuts.takeattr
+local getlang = nuts.getlang
local isglyph = nuts.isglyph
local setfield = nuts.setfield
local setattr = nuts.setattr
+local setattrlist = nuts.setattrlist
local setlink = nuts.setlink
local setchar = nuts.setchar
local setdisc = nuts.setdisc
@@ -45,9 +49,9 @@ 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 copy_node = nuts.copy_node
+local copy_node_list = nuts.copy_list
+local flush_node = nuts.flush_node
local insert_node_before = nuts.insert_before
local insert_node_after = nuts.insert_after
local remove_node = nuts.remove
@@ -59,7 +63,7 @@ local texsetattribute = tex.setattribute
local unsetvalue = attributes.unsetvalue
local nodepool = nuts.pool
-local tasks = nodes.tasks
+local enableaction = nodes.tasks.enableaction
local v_reset = interfaces.variables.reset
local v_yes = interfaces.variables.yes
@@ -79,7 +83,7 @@ local kern_code = nodecodes.kern
local math_code = nodecodes.math
local fontkern_code = kerncodes.fontkern
-local userkern_code = kerncodes.userkern
+----- userkern_code = kerncodes.userkern
local italickern_code = kerncodes.italiccorrection
local typesetters = typesetters
@@ -109,19 +113,21 @@ end
-- 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))
+ local p = new_penalty(before)
+ local g = new_glue()
+ setattrlist(p,start)
+ setattrlist(g,start)
+ insert_node_before(head,start,p)
+ insert_node_before(head,start,g)
end
- insert_node_after(head,stop,withattribute(new_glue(0),a))
- insert_node_after(head,stop,withattribute(new_penalty(after),a))
+ local p = new_penalty(after)
+ local g = new_glue()
+ setattrlist(p,start)
+ setattrlist(g,start)
+ insert_node_after(head,stop,g)
+ insert_node_after(head,stop,p)
end
methods[1] = function(head,start,stop,settings,kern)
@@ -142,21 +148,15 @@ methods[6] = function(head,start,stop,settings,kern)
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)
+ setattrlist(d,start) -- otherwise basemode is forced and we crash
+ setlink(p,l,d,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))
+ setdisc(d,start,nil,copy_node_list(start))
end
stop = r
end
@@ -167,17 +167,14 @@ 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)
+ local replace
+ head, start, replace = remove_node(head,start)
+ local post = copy_node(replace)
+ local hyphen = copy_node(post)
+ setchar(hyphen,languages.prehyphenchar(getlang(post)))
+ setlink(post,hyphen)
+ head, start = insert_node_before(head,start,new_disc(nil,post,replace))
+ setattrlist(start,replace)
insert_break(head,start,start,10000,10000)
end
return head, start
@@ -186,17 +183,14 @@ 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)
+ local replace
+ head, start, replace = remove_node(head,start)
+ local pre = copy_node(replace)
+ local hyphen = copy_node(pre)
+ setchar(hyphen,languages.prehyphenchar(getlang(pre)))
+ setlink(hyphen,pre)
+ head, start = insert_node_before(head,start,new_disc(hyphen,nil,replace)) -- so not pre !
+ setattrlist(start,tmp)
insert_break(head,start,start,10000,10000)
end
return head, start
@@ -208,8 +202,7 @@ methods[4] = function(head,start) -- - => - - -
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"))
+ setattrlist(start,tmp)
setdisc(start,copy_node(tmp),copy_node(tmp),tmp)
insert_break(head,start,start,10000,10000)
end
@@ -221,11 +214,11 @@ methods[5] = function(head,start,stop,settings) -- x => p q r
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
+ head, start = insert_node_before(head,start,new_disc())
+ local attr = getattrlist(tmp)
+ 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)
@@ -237,9 +230,8 @@ methods[5] = function(head,start,stop,settings) -- x => p q r
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)
+ setattrlist(start,attr)
+ flush_node(tmp)
insert_break(head,start,start,10000,10000)
end
return head, start
@@ -258,7 +250,8 @@ function breakpoints.handler(head)
while current do
local char, id = isglyph(current)
if char then
- local a = getattr(current,a_breakpoints)
+ -- local a = getattr(current,a_breakpoints)
+ local a = takeattr(current,a_breakpoints)
if a and a > 0 then
if a ~= attr then
local data = mapping[a]
@@ -272,9 +265,10 @@ function breakpoints.handler(head)
if map then
local cmap = map[char]
if cmap then
+ -- setattr(current,a_breakpoints,unsetvalue) -- should not be needed
-- for now we collect but when found ok we can move the handler here
-- although it saves nothing in terms of performance
- local lang = getfield(current,"lang")
+ local lang = getlang(current)
local smap = lang and lang >= 0 and lang < 0x7FFF and (cmap[numbers[lang]] or cmap[""])
if smap then
local skip = smap.skip
@@ -301,7 +295,6 @@ function breakpoints.handler(head)
else
current = getnext(current)
end
- setattr(start,a_breakpoints,unsetvalue) -- should not be needed
else
current = getnext(current)
end
@@ -332,7 +325,7 @@ function breakpoints.handler(head)
local stop = data[2]
local cmap = data[3]
local smap = data[4]
--- local lang = getfield(start,"lang")
+-- local lang = getlang(start)
-- -- 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
@@ -454,7 +447,7 @@ function breakpoints.set(n)
if trace_breakpoints then
report_breakpoints("enabling breakpoints handler")
end
- tasks.enableaction("processors","typesetters.breakpoints.handler")
+ enableaction("processors","typesetters.breakpoints.handler")
end
n = n.number
end
@@ -462,10 +455,6 @@ function breakpoints.set(n)
texsetattribute(a_breakpoints,n)
end
--- function breakpoints.enable()
--- tasks.enableaction("processors","typesetters.breakpoints.handler")
--- end
-
-- interface
implement {
diff --git a/tex/context/base/mkiv/typo-cap.lua b/tex/context/base/mkiv/typo-cap.lua
index 62b90b8ab..6bf4669df 100644
--- a/tex/context/base/mkiv/typo-cap.lua
+++ b/tex/context/base/mkiv/typo-cap.lua
@@ -8,7 +8,7 @@ if not modules then modules = { } end modules ['typo-cap'] = {
local next, type = next, type
local format, insert = string.format, table.insert
-local div, randomnumber = math.div, math.random
+local div, getrandom = math.div, utilities.randomizer.get
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)
@@ -25,7 +25,8 @@ local getfield = nuts.getfield
local getnext = nuts.getnext
local getprev = nuts.getprev
local getid = nuts.getid
-local getattr = nuts.getattr
+----- getattr = nuts.getattr
+local takeattr = nuts.takeattr
local getfont = nuts.getfont
local getsubtype = nuts.getsubtype
local getchar = nuts.getchar
@@ -34,12 +35,13 @@ local getdisc = nuts.getdisc
local setfield = nuts.setfield
local setattr = nuts.setattr
local setchar = nuts.setchar
+local setfont = nuts.setfont
local copy_node = nuts.copy
local end_of_math = nuts.end_of_math
-local traverse_nodes = nuts.traverse
local traverse_id = nuts.traverse_id
local insert_after = nuts.insert_after
+local find_attribute = nuts.find_attribute
local nodecodes = nodes.nodecodes
local skipcodes = nodes.skipcodes
@@ -52,7 +54,7 @@ local math_code = nodecodes.math
local kerning_code = kerncodes.kerning
-local tasks = nodes.tasks
+local enableaction = nodes.tasks.enableaction
local newkern = nuts.pool.kern
@@ -63,7 +65,6 @@ local fontchar = fonthashes.characters
local variables = interfaces.variables
local v_reset = variables.reset
-local chardata = characters.data
local texsetattribute = tex.setattribute
local unsetvalue = attributes.unsetvalue
@@ -216,7 +217,7 @@ end
-- elseif dc == char then
-- local lfa = lastfont[n]
-- if lfa then
--- setfield(first,"font",lfa)
+-- setfont(first,lfa)
-- return start, true, true
-- else
-- return start, false, true
@@ -239,7 +240,7 @@ local function mixed(start,attr,lastfont,n,count,where,first)
elseif dc == char then
local lfa = lastfont[n]
if lfa then
- setfield(used,"font",lfa)
+ setfont(used,lfa)
return start, true, true
else
return start, false, true
@@ -276,7 +277,7 @@ local function Capital(start,attr,lastfont,n,count,where,first,once) -- 3
if lfa then
local dc = uccodes[getchar(used)]
if dc then
- setfield(used,"font",lfa)
+ setfont(used,lfa)
end
end
end
@@ -295,7 +296,7 @@ local function none(start,attr,lastfont,n,count,where,first)
return start, false, true
end
-local function random(start,attr,lastfont,n,count,where,first)
+local function randomized(start,attr,lastfont,n,count,where,first)
local used = first or start
local char = getchar(used)
local font = getfont(used)
@@ -304,7 +305,7 @@ local function random(start,attr,lastfont,n,count,where,first)
local kind = categories[char]
if kind == "lu" then
while true do
- local n = randomnumber(0x41,0x5A)
+ local n = getrandom("capital lu",0x41,0x5A)
if tfm[n] then -- this also intercepts tables
setchar(used,n)
return start, true
@@ -312,7 +313,7 @@ local function random(start,attr,lastfont,n,count,where,first)
end
elseif kind == "ll" then
while true do
- local n = randomnumber(0x61,0x7A)
+ local n = getrandom("capital ll",0x61,0x7A)
if tfm[n] then -- this also intercepts tables
setchar(used,n)
return start, true
@@ -329,7 +330,7 @@ register(variables.Words, Words) -- 4
register(variables.capital,capital) -- 5
register(variables.Capital,Capital) -- 6
register(variables.none, none) -- 7 (dummy)
-register(variables.random, random) -- 8
+register(variables.random, randomized) -- 8
register(variables.mixed, mixed) -- 9
register(variables.camel, camel) -- 10
@@ -337,17 +338,18 @@ register(variables.cap, variables.capital) -- clone
register(variables.Cap, variables.Capital) -- clone
function cases.handler(head) -- not real fast but also not used on much data
+ local start = tonut(head)
local lastfont = { }
local lastattr = nil
local done = false
- local start = tonut(head)
local count = 0
local previd = nil
local prev = nil
while start do -- while because start can jump ahead
local id = getid(start)
if id == glyph_code then
- local attr = getattr(start,a_cases)
+ -- local attr = getattr(start,a_cases)
+ local attr = takeattr(start,a_cases)
if attr and attr > 0 and not blocked[attr] then
if attr ~= lastattr then
lastattr = attr
@@ -355,7 +357,7 @@ function cases.handler(head) -- not real fast but also not used on much data
else
count = count + 1
end
- setattr(start,a_cases,unsetvalue)
+ -- setattr(start,a_cases,unsetvalue) -- not needed
local n, id, m = get(attr)
if lastfont[n] == nil then
lastfont[n] = id
@@ -374,13 +376,14 @@ function cases.handler(head) -- not real fast but also not used on much data
end
end
elseif id == disc_code then
- local attr = getattr(start,a_cases)
+ -- local attr = getattr(start,a_cases)
+ local attr = takeattr(start,a_cases)
if attr and attr > 0 and not blocked[attr] then
if attr ~= lastattr then
lastattr = attr
count = 0
end
- setattr(start,a_cases,unsetvalue)
+ -- setattr(start,a_cases,unsetvalue) -- not needed
local n, id, m = get(attr)
if lastfont[n] == nil then
lastfont[n] = id
@@ -392,6 +395,7 @@ function cases.handler(head) -- not real fast but also not used on much data
local cnt = count
for g in traverse_id(glyph_code,replace) do
cnt = cnt + 1
+ takeattr(g,a_cases)
-- setattr(g,a_cases,unsetvalue)
local _, _, quit = action(start,attr,lastfont,n,cnt,"replace",g)
if quit then break end
@@ -401,6 +405,7 @@ function cases.handler(head) -- not real fast but also not used on much data
local cnt = count
for g in traverse_id(glyph_code,pre) do
cnt = cnt + 1
+ takeattr(g,a_cases)
-- setattr(g,a_cases,unsetvalue)
local _, _, quit = action(start,attr,lastfont,n,cnt,"pre",g)
if quit then break end
@@ -410,6 +415,7 @@ function cases.handler(head) -- not real fast but also not used on much data
local cnt = count
for g in traverse_id(glyph_code,post) do
cnt = cnt + 1
+ takeattr(g,a_cases)
-- setattr(g,a_cases,unsetvalue)
local _, _, quit = action(start,attr,lastfont,n,cnt,"post",g)
if quit then break end
@@ -422,7 +428,7 @@ function cases.handler(head) -- not real fast but also not used on much data
start = end_of_math(start)
count = 0
elseif prev_id == kern_code and getsubtype(prev) == kerning_code then
- -- still inside a word ...nomally kerns are added later
+ -- still inside a word ...normally kerns are added later
else
count = 0
end
@@ -435,6 +441,120 @@ function cases.handler(head) -- not real fast but also not used on much data
return head, done
end
+-- function cases.handler(head) -- not real fast but also not used on much data
+-- local attr, start = find_attribute(tonut(head),a_cases)
+-- if not start then
+-- return head, false
+-- end
+-- local lastfont = { }
+-- local lastattr = nil
+-- local done = false
+-- local count = 0
+-- local previd = nil
+-- local prev = nil
+-- while start do
+-- while start do -- while because start can jump ahead
+-- local id = getid(start)
+-- if id == glyph_code then
+-- -- local attr = getattr(start,a_cases)
+-- local attr = takeattr(start,a_cases)
+-- if attr and attr > 0 and not blocked[attr] then
+-- if attr ~= lastattr then
+-- lastattr = attr
+-- count = 1
+-- else
+-- count = count + 1
+-- end
+-- -- setattr(start,a_cases,unsetvalue) -- not needed
+-- local n, id, m = get(attr)
+-- if lastfont[n] == nil then
+-- lastfont[n] = id
+-- end
+-- local action = actions[n] -- map back to low number
+-- if action then
+-- start, ok = action(start,attr,lastfont,n,count)
+-- if ok then
+-- done = true
+-- end
+-- if trace_casing then
+-- report_casing("case trigger %a, instance %a, fontid %a, result %a",n,m,id,ok)
+-- end
+-- elseif trace_casing then
+-- report_casing("unknown case trigger %a",n)
+-- end
+-- end
+-- elseif id == disc_code then
+-- -- local attr = getattr(start,a_cases)
+-- local attr = takeattr(start,a_cases)
+-- if attr and attr > 0 and not blocked[attr] then
+-- if attr ~= lastattr then
+-- lastattr = attr
+-- count = 0
+-- end
+-- -- setattr(start,a_cases,unsetvalue) -- not needed
+-- local n, id, m = get(attr)
+-- if lastfont[n] == nil then
+-- lastfont[n] = id
+-- end
+-- local action = actions[n] -- map back to low number
+-- if action then
+-- local pre, post, replace = getdisc(start)
+-- if replace then
+-- local cnt = count
+-- for g in traverse_id(glyph_code,replace) do
+-- cnt = cnt + 1
+-- takeattr(g,a_cases)
+-- -- setattr(g,a_cases,unsetvalue)
+-- local _, _, quit = action(start,attr,lastfont,n,cnt,"replace",g)
+-- if quit then break end
+-- end
+-- end
+-- if pre then
+-- local cnt = count
+-- for g in traverse_id(glyph_code,pre) do
+-- cnt = cnt + 1
+-- takeattr(g,a_cases)
+-- -- setattr(g,a_cases,unsetvalue)
+-- local _, _, quit = action(start,attr,lastfont,n,cnt,"pre",g)
+-- if quit then break end
+-- end
+-- end
+-- if post then
+-- local cnt = count
+-- for g in traverse_id(glyph_code,post) do
+-- cnt = cnt + 1
+-- takeattr(g,a_cases)
+-- -- setattr(g,a_cases,unsetvalue)
+-- local _, _, quit = action(start,attr,lastfont,n,cnt,"post",g)
+-- if quit then break end
+-- end
+-- end
+-- end
+-- count = count + 1
+-- end
+-- elseif id == math_code then
+-- start = end_of_math(start)
+-- count = 0
+-- elseif prev_id == kern_code and getsubtype(prev) == kerning_code then
+-- -- still inside a word ...normally kerns are added later
+-- else
+-- count = 0
+-- start = getnext(start)
+-- break
+-- end
+-- if start then
+-- prev = start
+-- previd = id
+-- start = getnext(start)
+-- end
+-- end
+-- if start then
+-- attr, start = find_attribute(start,a_cases)
+-- end
+-- end
+-- return head, done
+-- end
+
-- function cases.handler(head) -- let's assume head doesn't change ... no reason
-- local done = false
-- local lastfont = { }
@@ -463,7 +583,7 @@ function cases.set(n,id)
n = registered[n] or tonumber(n)
if n then
if not enabled then
- tasks.enableaction("processors","typesetters.cases.handler")
+ enableaction("processors","typesetters.cases.handler")
if trace_casing then
report_casing("enabling case handler")
end
diff --git a/tex/context/base/mkiv/typo-cap.mkiv b/tex/context/base/mkiv/typo-cap.mkiv
index 114532e4e..96f3e28d6 100644
--- a/tex/context/base/mkiv/typo-cap.mkiv
+++ b/tex/context/base/mkiv/typo-cap.mkiv
@@ -20,7 +20,7 @@
\registerctxluafile{typo-cap}{1.001}
-\definesystemattribute[case][public]
+% \definesystemattribute[case][public] % already predefined
%D \macros
%D {setupcapitals}
diff --git a/tex/context/base/mkiv/typo-chr.lua b/tex/context/base/mkiv/typo-chr.lua
index 041a73e1b..f6bcfde56 100644
--- a/tex/context/base/mkiv/typo-chr.lua
+++ b/tex/context/base/mkiv/typo-chr.lua
@@ -90,11 +90,10 @@ local insert, remove = table.insert, table.remove
local nodecodes = nodes.nodecodes
local glyph_code = nodecodes.glyph
-local whatsit_code = nodecodes.whatsit
local localpar_code = nodecodes.localpar
local texnest = tex.nest
-local free_node = node.free
+local flush_node = node.flush_node
local flush_list = node.flush_list
local settexattribute = tex.setattribute
@@ -135,7 +134,7 @@ local actions = {
remove = function(specification)
local n = pickup()
if n then
- free_node(n)
+ flush_node(n)
end
end,
push = function(specification)
diff --git a/tex/context/base/mkiv/typo-cln.lua b/tex/context/base/mkiv/typo-cln.lua
index bc11f944c..53452f838 100644
--- a/tex/context/base/mkiv/typo-cln.lua
+++ b/tex/context/base/mkiv/typo-cln.lua
@@ -24,7 +24,8 @@ local cleaners = typesetters.cleaners
local variables = interfaces.variables
local nodecodes = nodes.nodecodes
-local tasks = nodes.tasks
+
+local enableaction = nodes.tasks.enableaction
local texsetattribute = tex.setattribute
@@ -91,7 +92,7 @@ function cleaners.set(n)
texsetattribute(a_cleaner,unsetvalue)
else
if not enabled then
- tasks.enableaction("processors","typesetters.cleaners.handler")
+ enableaction("processors","typesetters.cleaners.handler")
if trace_cleaners then
report_cleaners("enabling cleaners")
end
diff --git a/tex/context/base/mkiv/typo-del.mkiv b/tex/context/base/mkiv/typo-del.mkiv
index eb51a06e1..84fe2c469 100644
--- a/tex/context/base/mkiv/typo-del.mkiv
+++ b/tex/context/base/mkiv/typo-del.mkiv
@@ -267,10 +267,67 @@
\def\c_typo_delimited_nesting{\csname\??delimitedtextlevel\currentparentdelimitedtext\endcsname}
-\def\typo_delimited_push#1%
- {\globalpushmacro\currentdelimitedtext
- \def\currentdelimitedtext{#1}%
- \setlanguageparameter\delimitedtextparameter
+% the \setlanguageparameter macro sets but we are ungrouped .. only used here
+%
+% \currentusedlanguage
+% \usedlanguageparameter
+
+%D The optional argument can be a language, a narrower spec, or a outer:inner language
+%D specification.
+%D
+%D \starttabulate
+%D \NC [en] \NC {\tttf en} \quotation[en] {{\tttf <en=\currentlanguage>} something french} \NC \NR
+%D \NC [fr] \NC {\tttf en} \quotation[fr] {{\tttf <fr=\currentlanguage>} something french} \NC \NR
+%D \NC [fr:] \NC {\tttf fr} \quotation[fr:] {{\tttf <en=\currentlanguage>} something french} \NC \NR
+%D \NC [:fr] \NC {\tttf en} \quotation[:fr] {{\tttf <fr=\currentlanguage>} something french} \NC \NR
+%D \NC [fr:fr] \NC {\tttf fr} \quotation[fr:fr]{{\tttf <fr=\currentlanguage>} something french} \NC \NR
+%D \NC [en:fr] \NC {\tttf en} \quotation[en:fr]{{\tttf <fr=\currentlanguage>} something french} \NC \NR
+%D \NC [fr:en] \NC {\tttf fr} \quotation[fr:en]{{\tttf <en=\currentlanguage>} something french} \NC \NR
+%D \stoptabulate
+
+\let\currentdelimitedlanguage\empty
+
+\def\typo_delimited_set_language_nop
+ {\setusedlanguage{\delimitedtextparameter\c!language}}
+
+\def\typo_delimited_set_language_yes
+ {\doiflanguageelse\m_delimited_argument
+ \typo_delimited_set_language_yes_a
+ {\doifelseinstring:\m_delimited_argument
+ \typo_delimited_set_language_yes_b
+ \typo_delimited_set_language_nop}}
+
+\def\typo_delimited_set_language_yes_b
+ {\splitatcolon\m_delimited_argument\outerdelimitedlanguage\innerdelimitedlanguage
+ \ifx\outerdelimitedlanguage\empty
+ \typo_delimited_set_language_nop
+ \else
+ \doiflanguageelse\outerdelimitedlanguage
+ {\setusedlanguage\outerdelimitedlanguage}%
+ \typo_delimited_set_language_nop
+ \fi
+ \ifx\innerdelimitedlanguage\empty
+ \else
+ \doiflanguageelse\innerdelimitedlanguage
+ {\let\currentdelimitedlanguage\innerdelimitedlanguage}%
+ \donothing
+ \fi
+ \let\m_delimited_argument\empty}
+
+\def\typo_delimited_set_language_yes_a
+ {\let\currentdelimitedlanguage\m_delimited_argument
+ \let\m_delimited_argument\empty}
+
+\def\typo_delimited_push#1#2%
+ {\globalpushmacro\currentdelimitedtext % can we combine these two
+ \globalpushmacro\currentdelimitedlanguage % the language used for hyphenation
+ \edef\currentdelimitedtext{#1}%
+ \edef\m_delimited_argument{#2}%
+ \ifx\m_delimited_argument\empty
+ \typo_delimited_set_language_nop
+ \else
+ \typo_delimited_set_language_yes
+ \fi
\let\currentparentdelimitedtext\currentdelimitedtext
\global\advance\c_typo_delimited_nesting\plusone
\edef\delimitedtextlevel{\number\c_typo_delimited_nesting}%
@@ -279,6 +336,7 @@
\def\typo_delimited_pop
{\global\advance\c_typo_delimited_nesting\minusone
+ \globalpopmacro\currentdelimitedlanguage
\globalpopmacro\currentdelimitedtext}
\installcorenamespace{delimitedtext}
@@ -308,6 +366,7 @@
\c!right=,
%\c!level=0,
\c!method=,
+ %\c!language=\v!local,
\c!repeat=\v!no]
\def\typo_delimited_repeat_ideed
@@ -317,9 +376,12 @@
\let\typo_delimited_repeat\relax
-\unexpanded\def\startdelimitedtext[#1]%
+\unexpanded\def\startdelimitedtext
+ {\dodoubleempty\typo_delimited_text_start}
+
+\unexpanded\def\typo_delimited_text_start[#1][#2]%
{\begingroup
- \typo_delimited_push{#1}%
+ \typo_delimited_push{#1}{#2}%
\dostarttaggedchained\t!delimitedblock\currentdelimitedtext\??delimitedtext
\edef\p_delimited_method{\delimitedtextparameter\c!method}%
\ifx\p_delimited_method\s!font
@@ -355,12 +417,40 @@
\fi\fi}
\def\typo_delimitedtexts_finish_font
- {\removeunwantedspaces
+ {\removeunwantedspaces % again ?
\dostarttagged\t!delimitedsymbol\empty
\dotagsetdelimitedsymbol\s!right
\delimitedtextparameter\c!right
\dostoptagged}
+\def\typo_delimited_show_language_indeed#1#2%
+ {\begingroup
+ \infofont
+ \setbox\scratchbox\hpack{\lower\strutht\hbox to \zeropoint{\darkred#1\currentlanguage:\currentdelimitedlanguage#2}}%
+ \vsmashbox\scratchbox
+ \box\scratchbox
+ \endgroup}
+
+\let\typo_delimited_show_language\gobbletwoarguments
+
+\installtextracker{delimited.language}
+ {\let\typo_delimited_show_language\typo_delimited_show_language_indeed}
+ {\let\typo_delimited_show_language\gobbletwoarguments}
+
+\def\typo_delimited_start_content
+ {\dostarttagged\t!delimitedcontent\empty
+ \begingroup
+ \douselanguageparameter\currentdelimitedlanguage
+ \typo_delimited_show_language<\hss
+ \ignorespaces}
+
+\def\typo_delimited_stop_content
+ {\removeunwantedspaces
+ \removelastskip % redundant
+ \typo_delimited_show_language\hss<%
+ \endgroup
+ \dostoptagged}
+
\def\typo_delimited_start_par
{\dosingleempty\typo_delimited_start_par_indeed}
@@ -373,14 +463,19 @@
\blank[\p_delimited_spacebefore]%
\fi
\delimitedtextparameter\c!before
- \edef\m_typo_delimited_narrower{#1}%
- \ifx\m_typo_delimited_narrower\empty
+ \iffirstargument
+ \edef\m_delimited_argument{#1}%
+ \fi
+ \ifx\m_delimited_argument\empty
+ \let\m_delimited_argument\m_delimited_argument
+ \fi
+ \ifx\m_delimited_argument\empty
\endgraf
\doadaptleftskip {\delimitedtextparameter\c!leftmargin}%
\doadaptrightskip{\delimitedtextparameter\c!rightmargin}%
\let\typo_delimited_stop_par_indeed\endgraf
\else % backward compatible direct directive
- \startnarrower[#1]%
+ \startnarrower[\m_delimited_argument]%
\let\typo_delimited_stop_par_indeed\stopnarrower
\fi
% so far
@@ -400,13 +495,10 @@
\setnextleftdelimitedtextmark
\setnextrightdelimitedtextmark
%
- \ignorespaces
- \dostarttagged\t!delimitedcontent\empty}
+ \typo_delimited_start_content}
\def\typo_delimited_stop_par
- {\removeunwantedspaces
- \removelastskip
- \dostoptagged
+ {\typo_delimited_stop_content
\rightdelimitedtextmark
\carryoverpar\endgroup % new per 2013-01-21 ... please left floats
\popmacro\checkindentation
@@ -424,12 +516,10 @@
\begingroup
\usedelimitedtextstyleandcolor\c!style\c!color
\typo_delimited_handle_left\c!left
- \ignorespaces
- \dostarttagged\t!delimitedcontent\empty}
+ \typo_delimited_start_content}
\def\typo_delimited_stop_txt
- {\removeunwantedspaces
- \dostoptagged
+ {\typo_delimited_stop_content
\typo_delimited_handle_right\c!right
\endgroup}
@@ -439,9 +529,12 @@
\typo_delimited_pop
\endgroup}
-\unexpanded\def\delimitedtext[#1]%
+\unexpanded\def\delimitedtext
+ {\dodoubleempty\typo_delimited_text}
+
+\unexpanded\def\typo_delimited_text[#1][#2]%
{\dontleavehmode % following ones can be omited
- \typo_delimited_push{#1}%
+ \typo_delimited_push{#1}{#2}%
\edef\p_delimited_method{\delimitedtextparameter\c!method}%
\ifx\p_delimited_method\s!font
\expandafter\typo_delimited_fontdriven
@@ -569,7 +662,7 @@
% \stoptext
\def\typo_delimited_handle_middle#1%
- {\dostoptagged
+ {\typo_delimited_stop_content
\begingroup
\usedelimitedtextstyleandcolor\c!symstyle\c!symcolor
\setbox\scratchbox\hbox{\delimitedtextparameter#1}%
@@ -591,7 +684,7 @@
\kern\d_typo_delimited_signal % +- \prewordbreak
\fi
\endgroup
- \dostarttagged\t!delimitedcontent\empty}
+ \typo_delimited_start_content}
\def\typo_delimited_handle_left#1%
{\begingroup
@@ -652,10 +745,10 @@
{\dostarttaggedchained\t!delimited\currentdelimitedtext\??delimitedtext % block?
\usedelimitedtextstyleandcolor\c!style\c!color
\typo_delimited_handle_left\c!left
- \dostarttagged\t!delimitedcontent\empty}
- {\dostoptagged
+ \typo_delimited_start_content}
+ {\typo_delimited_stop_content
\typo_delimited_handle_right\c!right
- \removelastskip
+ \removelastskip % hm
\dostoptagged
\typo_delimited_pop}}
@@ -667,52 +760,56 @@
\expandafter\typo_delimited_quoted
\fi}
-\def\typo_delimited_quoted_b
- {\dostarttaggedchained\t!delimited\currentdelimitedtext\??delimitedtext
+\def\typo_delimited_quoted
+ {\dontleavehmode
+ \begingroup
+ \dostarttaggedchained\t!delimited\currentdelimitedtext\??delimitedtext
\typo_delimited_handle_left\c!left
\usedelimitedtextstyleandcolor\c!style\c!color
- \dostarttagged\t!delimitedcontent\empty}
+ \typo_delimited_start_content
+ \bgroup
+ \aftergroup\typo_delimited_quoted_e
+ \let\next=}
\def\typo_delimited_quoted_e
- {\dostoptagged
+ {\typo_delimited_stop_content
\typo_delimited_handle_right\c!right
\removelastskip % ?
\dostoptagged
- \typo_delimited_pop}
+ \typo_delimited_pop
+ \endgroup}
-\def\typo_delimited_attributed_b
- {\dostarttaggedchained\t!delimited\currentdelimitedtext\??delimitedtext
+\def\typo_delimited_attributed
+ {\dontleavehmode
+ \begingroup
+ \dostarttaggedchained\t!delimited\currentdelimitedtext\??delimitedtext
\usedelimitedtextstyleandcolor\c!style\c!color
- \dostarttagged\t!delimitedcontent\empty
- \ignorespaces}
+ \typo_delimited_start_content
+ \typo_delimited_attributed_e
+ \let\next=}
\def\typo_delimited_attributed_e
- {\dostoptagged
+ {\typo_delimited_stop_content
\dostoptagged
- \typo_delimited_pop}
+ \typo_delimited_pop
+ \endgroup}
-\def\typo_delimited_fontdriven_b
- {\dostarttaggedchained\t!delimited\currentdelimitedtext\??delimitedtext
+\def\typo_delimited_fontdriven
+ {\dontleavehmode
+ \begingroup
+ \dostarttaggedchained\t!delimited\currentdelimitedtext\??delimitedtext
\usedlanguageparameter{\c!left\currentparentdelimitedtext}% was: \currentdelimitedtext
\usedelimitedtextstyleandcolor\c!style\c!color
- \dostarttagged\t!delimitedcontent\empty}
+ \typo_delimited_start_content
+ \aftergroup\typo_delimited_fontdriven_e
+ \let\next=}
\def\typo_delimited_fontdriven_e
- {\dostoptagged
+ {\typo_delimited_stop_content
\usedlanguageparameter{\c!right\currentparentdelimitedtext}% was: \currentdelimitedtext
\dostoptagged
- \typo_delimited_pop}
-
-% We now assume proper argument usage (so no longer grouped
-% command).
-
-% \def\typo_delimited_quoted {\groupedcommand \typo_delimited_quoted_b \typo_delimited_quoted_e }
-% \def\typo_delimited_attributed{\groupedcommand \typo_delimited_attributed_b\typo_delimited_attributed_e}
-% \def\typo_delimited_fontdriven{\simplegroupedcommand\typo_delimited_fontdriven_b\typo_delimited_fontdriven_e}
-
-\def\typo_delimited_quoted {\bgroup\typo_delimited_quoted_b \aftergroup\typo_delimited_quoted_e \let\next=}
-\def\typo_delimited_attributed{\bgroup\typo_delimited_attributed_b\aftergroup\typo_delimited_attributed_e\let\next=}
-\def\typo_delimited_fontdriven{\bgroup\typo_delimited_fontdriven_b\aftergroup\typo_delimited_fontdriven_e\let\next=}
+ \typo_delimited_pop
+ \endgroup}
% testcase for nesting:
%
diff --git a/tex/context/base/mkiv/typo-dha.lua b/tex/context/base/mkiv/typo-dha.lua
index 25e92bd28..a32f72e46 100644
--- a/tex/context/base/mkiv/typo-dha.lua
+++ b/tex/context/base/mkiv/typo-dha.lua
@@ -48,7 +48,6 @@ 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
@@ -59,6 +58,7 @@ local getlist = nuts.getlist
local getfield = nuts.getfield
local getattr = nuts.getattr
local getprop = nuts.getprop
+local getdir = nuts.getdir
local isglyph = nuts.isglyph -- or ischar
local setfield = nuts.setfield
@@ -77,11 +77,8 @@ 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
@@ -94,7 +91,6 @@ local formatters = string.formatters
local insert = table.insert
local fonthashes = fonts.hashes
-local fontdata = fonthashes.identifiers
local fontchar = fonthashes.characters
local chardirections = characters.directions
@@ -317,7 +313,7 @@ local function process(start)
elseif id == kern_code then
setprop(current,"direction",'k')
elseif id == dir_code then
- local dir = getfield(current,"dir")
+ local dir = getdir(current)
if dir == "+TRT" then
autodir = -1
elseif dir == "+TLT" then
@@ -334,7 +330,7 @@ local function process(start)
textdir = autodir
setprop(current,"direction",true)
elseif id == localpar_code then
- local dir = getfield(current,"dir")
+ local dir = getdir(current)
if dir == 'TRT' then
autodir = -1
elseif dir == 'TLT' then
diff --git a/tex/context/base/mkiv/typo-dig.lua b/tex/context/base/mkiv/typo-dig.lua
index 09c2f64ee..3d60131c7 100644
--- a/tex/context/base/mkiv/typo-dig.lua
+++ b/tex/context/base/mkiv/typo-dig.lua
@@ -28,13 +28,13 @@ local getprev = nuts.getprev
local getfont = nuts.getfont
local getchar = nuts.getchar
local getid = nuts.getid
+local getwidth = nuts.getwidth
local getfield = nuts.getfield
-local getattr = nuts.getattr
+local takeattr = nuts.takeattr
local setlink = nuts.setlink
local setnext = nuts.setnext
local setprev = nuts.setprev
-local setattr = nuts.setattr
local hpack_node = nuts.hpack
local traverse_id = nuts.traverse_id
@@ -48,14 +48,12 @@ local nodecodes = nodes.nodecodes
local glyph_code = nodecodes.glyph
local nodepool = nuts.pool
-local tasks = nodes.tasks
+local enableaction = nodes.tasks.enableaction
local new_glue = nodepool.glue
local fonthashes = fonts.hashes
-local fontdata = fonthashes.identifiers
local chardata = fonthashes.characters
-local quaddata = fonthashes.quads
local v_reset = interfaces.variables.reset
@@ -106,7 +104,7 @@ actions[1] = function(head,start,attr)
local char = getchar(start)
local unic = chardata[font][char].unicode or char
if charbase[unic].category == "nd" then -- ignore unic tables
- local oldwidth = getfield(start,"width")
+ local oldwidth = getwidth(start)
local newwidth = getdigitwidth(font)
if newwidth ~= oldwidth then
if trace_digits then
@@ -125,9 +123,8 @@ function digits.handler(head)
local done, current, ok = false, head, false
while current do
if getid(current) == glyph_code then
- local attr = getattr(current,a_digits)
+ local attr = takeattr(current,a_digits)
if attr and attr > 0 then
- setattr(current,a_digits,unsetvalue)
local action = actions[attr%100] -- map back to low number
if action then
head, current, ok = action(head,current,attr)
@@ -153,7 +150,7 @@ function digits.set(n) -- number or 'reset'
n = tonumber(n)
if n then
if not enabled then
- tasks.enableaction("processors","typesetters.digits.handler")
+ enableaction("processors","typesetters.digits.handler")
if trace_digits then
report_digits("enabling digit handler")
end
diff --git a/tex/context/base/mkiv/typo-dir.lua b/tex/context/base/mkiv/typo-dir.lua
index 482b7114d..5ecf77a1f 100644
--- a/tex/context/base/mkiv/typo-dir.lua
+++ b/tex/context/base/mkiv/typo-dir.lua
@@ -28,7 +28,6 @@ if not modules then modules = { } end modules ['typo-dir'] = {
local next, type = next, type
local format, insert, sub, find, match = string.format, table.insert, string.sub, string.find, string.match
-local utfchar = utf.char
local formatters = string.formatters
local nodes, node = nodes, node
@@ -38,14 +37,14 @@ local trace_mathdirections = false trackers.register("typesetters.directions.m
local trace_directions = false trackers.register("typesetters.directions", function(v) trace_textdirections = v trace_mathdirections = v end)
local report_textdirections = logs.reporter("typesetting","text directions")
-local report_mathdirections = logs.reporter("typesetting","math directions")
+----- report_mathdirections = logs.reporter("typesetting","math directions")
local hasbit = number.hasbit
local texsetattribute = tex.setattribute
local unsetvalue = attributes.unsetvalue
-local tasks = nodes.tasks
+local enableaction = nodes.tasks.enableaction
local tracers = nodes.tracers
local setcolor = tracers.colors.set
local resetcolor = tracers.colors.reset
@@ -181,16 +180,12 @@ statistics.register("text directions", function()
end
end)
--- function directions.enable()
--- tasks.enableaction("processors","directions.handler")
--- end
-
function directions.set(n) -- todo: names and numbers
if not enabled then
if trace_textdirections then
report_textdirections("enabling directions handler")
end
- tasks.enableaction("processors","typesetters.directions.handler")
+ enableaction("processors","typesetters.directions.handler")
enabled = true
end
if not n or n == 0 then
diff --git a/tex/context/base/mkiv/typo-drp.lua b/tex/context/base/mkiv/typo-drp.lua
index bddcc008e..e27ad75f3 100644
--- a/tex/context/base/mkiv/typo-drp.lua
+++ b/tex/context/base/mkiv/typo-drp.lua
@@ -22,7 +22,10 @@ local initials = typesetters.paragraphs or { }
typesetters.initials = initials or { }
local nodes = nodes
+
local tasks = nodes.tasks
+local enableaction = tasks.enableaction
+local disableaction = tasks.disableaction
local nuts = nodes.nuts
local tonut = nuts.tonut
@@ -35,13 +38,18 @@ local getid = nuts.getid
local getsubtype = nuts.getsubtype
local getfield = nuts.getfield
local getattr = nuts.getattr
+local getwhd = nuts.getwhd
local setfield = nuts.setfield
local setattr = nuts.setattr
local setlink = nuts.setlink
local setprev = nuts.setprev
local setnext = nuts.setnext
+local setfont = nuts.setfont
local setchar = nuts.setchar
+local setwhd = nuts.setwhd
+local setkern = nuts.setkern
+local setoffsets = nuts.setoffsets
local hpack_nodes = nuts.hpack
@@ -55,7 +63,6 @@ local insert_after = nuts.insert_after
local remove_node = nuts.remove
local traverse_id = nuts.traverse_id
local traverse = nuts.traverse
-local free_node = nuts.free
local variables = interfaces.variables
local v_default = variables.default
@@ -65,6 +72,7 @@ local v_first = variables.first
local v_last = variables.last
local texget = tex.get
+local texset = tex.set
local texsetattribute = tex.setattribute
local unsetvalue = attributes.unsetvalue
@@ -80,7 +88,7 @@ initials.actions = actions
local a_initial = attributes.private("initial")
local a_color = attributes.private('color')
local a_transparency = attributes.private('transparency')
-local a_colorspace = attributes.private('colormodel')
+local a_colormodel = attributes.private('colormodel')
local category = characters.category
@@ -89,7 +97,7 @@ local settings = nil
function initials.set(specification)
settings = specification or { }
settings.enabled = true
- tasks.enableaction("processors","typesetters.initials.handler")
+ enableaction("processors","typesetters.initials.handler")
if trace_initials then
report_initials("enabling initials")
end
@@ -156,8 +164,8 @@ actions[v_default] = function(head,setting)
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 parindent = texget("parindent")
+ local baseline = texget("baselineskip",false)
local lines = tonumber(setting.n) or 0
local dynamic = setting.dynamic
local font = setting.font
@@ -248,11 +256,11 @@ actions[v_default] = function(head,setting)
while true do
local id = getid(current)
if id == kern_code then
- setfield(current,"kern",0)
+ setkern(current,0)
elseif id == glyph_code then
local next = getnext(current)
if font then
- setfield(current,"font",font)
+ setfont(current,font)
end
if dynamic > 0 then
setattr(current,0,dynamic)
@@ -264,11 +272,11 @@ actions[v_default] = function(head,setting)
-- nodes.handlers.characters(g)
-- nodes.handlers.protectglyphs(g)
-- setchar(current,g.char)
--- nodes.free(g)
+-- nodes.flush_node(g)
-- can be a helper
if ca and ca > 0 then
- setattr(current,a_colorspace,ma == 0 and 1 or ma)
+ setattr(current,a_colormodel,ma == 0 and 1 or ma)
setattr(current,a_color,ca)
end
if ta and ta > 0 then
@@ -291,12 +299,8 @@ actions[v_default] = function(head,setting)
setprev(first)
setnext(last)
local dropper = hpack_nodes(first)
- local width = getfield(dropper,"width")
- local height = getfield(dropper,"height")
- local depth = getfield(dropper,"depth")
- setfield(dropper,"width",0)
- setfield(dropper,"height",0)
- setfield(dropper,"depth",0)
+ local width, height, depth = getwhd(dropper)
+ setwhd(dropper,0,0,0)
--
setlink(prev,dropper)
setlink(dropper,next)
@@ -318,8 +322,7 @@ actions[v_default] = function(head,setting)
--
local hoffset = width + hoffset + distance + (indent and parindent or 0)
for current in traverse_id(glyph_code,first) do
- setfield(current,"xoffset",- hoffset )
- setfield(current,"yoffset",- voffset) -- no longer - height here
+ setoffsets(current,-hoffset,-voffset) -- no longer - height here
if current == last then
break
end
@@ -340,8 +343,8 @@ actions[v_default] = function(head,setting)
if trace_initials then
report_initials("setting hangafter to %i and hangindent to %p",hangafter,hangindent)
end
- tex.hangafter = hangafter
- tex.hangindent = hangindent
+ texset("hangafter",hangafter)
+ texset("hangindent",hangindent)
end
if indent then
insert_after(first,first,new_kern(-parindent))
@@ -368,7 +371,7 @@ function initials.handler(head)
end
if attr then
-- here as we can process nested boxes first so we need to keep state
- tasks.disableaction("processors","typesetters.initials.handler")
+ disableaction("processors","typesetters.initials.handler")
-- texsetattribute(attribute,unsetvalue)
local alternative = settings.alternative or v_default
local action = actions[alternative] or actions[v_default]
diff --git a/tex/context/base/mkiv/typo-dua.lua b/tex/context/base/mkiv/typo-dua.lua
index f697ac562..c2f3c2763 100644
--- a/tex/context/base/mkiv/typo-dua.lua
+++ b/tex/context/base/mkiv/typo-dua.lua
@@ -69,7 +69,6 @@ local mirrordata = characters.mirrors
local nuts = nodes.nuts
local tonut = nuts.tonut
local tonode = nuts.tonode
-local nutstring = nuts.tostring
local getnext = nuts.getnext
local getid = nuts.getid
@@ -78,10 +77,13 @@ local getlist = nuts.getlist
local getchar = nuts.getchar
local getfield = nuts.getfield
local getprop = nuts.getprop
+local getdir = nuts.getdir
local setfield = nuts.setfield
local setprop = nuts.setprop
local setchar = nuts.setchar
+local setdir = nuts.setdir
+----- setattrlist = nuts.setattrlist
local remove_node = nuts.remove
local insert_node_after = nuts.insert_after
@@ -154,7 +156,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
@@ -233,7 +235,7 @@ local function build_list(head) -- todo: store node pointer ... saves loop
list[size] = { char = 0x0020, direction = "ws", original = "ws", level = 0 }
current = getnext(current)
elseif id == dir_code then
- local dir = getfield(current,"dir")
+ local dir = getdir(current)
if dir == "+TLT" then
list[size] = { char = 0x202A, direction = "lre", original = "lre", level = 0 }
elseif dir == "+TRT" then
@@ -325,7 +327,7 @@ end
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
+ if getdir(head) == "TRT" then
return 1, "TRT", true
else
return 0, "TLT", true
@@ -748,13 +750,13 @@ local function apply_to_list(list,size,head,pardir)
setcolor(current,direction,false,mirror)
end
elseif id == hlist_code or id == vlist_code then
- setfield(current,"dir",pardir) -- is this really needed?
+ setdir(current,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)
setprop(d,"directions",true)
- -- setfield(d,"attr",getfield(current,"attr"))
+ -- setattrlist(d,current)
head = insert_node_before(head,current,d)
enddir = false
done = true
@@ -764,7 +766,7 @@ local function apply_to_list(list,size,head,pardir)
-- localpar should always be the 1st node
local d = new_textdir(begindir)
setprop(d,"directions",true)
- -- setfield(d,"attr",getfield(current,"attr"))
+ -- setattrlist(d,current)
head, current = insert_node_after(head,current,d)
begindir = nil
done = true
@@ -773,7 +775,7 @@ local function apply_to_list(list,size,head,pardir)
if begindir then
local d = new_textdir(begindir)
setprop(d,"directions",true)
- -- setfield(d,"attr",getfield(current,"attr"))
+ -- setattrlist(d,current)
head = insert_node_before(head,current,d)
done = true
end
@@ -787,7 +789,7 @@ local function apply_to_list(list,size,head,pardir)
if enddir then
local d = new_textdir(enddir)
setprop(d,"directions",true)
- -- setfield(d,"attr",getfield(current,"attr"))
+ -- setattrlist(d,current)
head, current = insert_node_after(head,current,d)
done = true
end
@@ -822,7 +824,7 @@ local function process(head)
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)
+ local head, done = apply_to_list(list,size,head,pardir)
return tonode(head), done
end
diff --git a/tex/context/base/mkiv/typo-dub.lua b/tex/context/base/mkiv/typo-dub.lua
index 7ac339799..eea743c6d 100644
--- a/tex/context/base/mkiv/typo-dub.lua
+++ b/tex/context/base/mkiv/typo-dub.lua
@@ -57,7 +57,6 @@ 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
@@ -67,10 +66,13 @@ local getchar = nuts.getchar
local getattr = nuts.getattr
local getfield = nuts.getfield
local getprop = nuts.getprop
+local getdir = nuts.getdir
local setfield = nuts.setfield
local setprop = nuts.setprop
local setchar = nuts.setchar
+local setdir = nuts.setdir
+local setattrlist = nuts.setattrlist
local remove_node = nuts.remove
local insert_node_after = nuts.insert_after
@@ -98,12 +100,6 @@ 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)
@@ -288,7 +284,7 @@ local function build_list(head) -- todo: store node pointer ... saves loop
list[size] = { char = 0x0020, direction = "ws", original = "ws", level = 0 }
current = getnext(current)
elseif id == dir_code then
- local dir = getfield(current,"dir")
+ local dir = getdir(current)
if dir == "+TLT" then
list[size] = { char = 0x202A, direction = "lre", original = "lre", level = 0 }
elseif dir == "+TRT" then
@@ -403,7 +399,7 @@ end
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
+ if getdir(head) == "TRT" then
return 1, "TRT", true
else
return 0, "TLT", true
@@ -901,13 +897,13 @@ local function apply_to_list(list,size,head,pardir)
setcolor(current,direction,false,mirror)
end
elseif id == hlist_code or id == vlist_code then
- setfield(current,"dir",pardir) -- is this really needed?
+ setdir(current,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)
setprop(d,"directions",true)
- -- setfield(d,"attr",getfield(current,"attr"))
+ -- setattrlist(d,current)
head = insert_node_before(head,current,d)
enddir = false
done = true
@@ -917,17 +913,16 @@ local function apply_to_list(list,size,head,pardir)
-- localpar should always be the 1st node
local d = new_textdir(begindir)
setprop(d,"directions",true)
- -- setfield(d,"attr",getfield(current,"attr"))
+ -- setattrlist(d,current)
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"))
+ -- setattrlist(d,current)
head = insert_node_before(head,current,d)
done = true
end
@@ -941,7 +936,7 @@ local function apply_to_list(list,size,head,pardir)
if enddir then
local d = new_textdir(enddir)
setprop(d,"directions",true)
- -- setfield(d,"attr",getfield(current,"attr"))
+ -- setattrlist(d,current)
head, current = insert_node_after(head,current,d)
done = true
end
@@ -983,7 +978,7 @@ local function process(head)
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)
+ local head, done = apply_to_list(list,size,head,pardir)
return tonode(head), done
end
diff --git a/tex/context/base/mkiv/typo-duc.lua b/tex/context/base/mkiv/typo-duc.lua
index fce40932f..7fd49e54e 100644
--- a/tex/context/base/mkiv/typo-duc.lua
+++ b/tex/context/base/mkiv/typo-duc.lua
@@ -58,7 +58,6 @@ 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
@@ -68,10 +67,13 @@ local getlist = nuts.getlist
local getattr = nuts.getattr
local getfield = nuts.getfield
local getprop = nuts.getprop
+local getdir = nuts.getdir
local setfield = nuts.setfield
local setprop = nuts.setprop
local setchar = nuts.setchar
+local setdir = nuts.setdir
+local setattrlist = nuts.setattrlist
local properties = nodes.properties
@@ -101,12 +103,6 @@ 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)
@@ -295,7 +291,7 @@ local function build_list(head) -- todo: store node pointer ... saves loop
setmetatable(t,mt_space)
current = getnext(current)
elseif id == dir_code then
- local dir = getfield(current,"dir")
+ local dir = getdir(current)
if dir == "+TLT" then
t = { }
setmetatable(t,mt_lre)
@@ -419,7 +415,7 @@ end
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
+ if getdir(head) == "TRT" then
return 1, "TRT", true
else
return 0, "TLT", true
@@ -937,13 +933,13 @@ local function apply_to_list(list,size,head,pardir)
setcolor(current,direction,false,mirror)
end
elseif id == hlist_code or id == vlist_code then
- setfield(current,"dir",pardir) -- is this really needed?
+ setdir(current,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"))
+ -- setattrlist(d,current)
head = insert_node_before(head,current,d)
enddir = false
done = true
@@ -953,7 +949,7 @@ local function apply_to_list(list,size,head,pardir)
-- 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"))
+ -- setattrlist(d,current)
head, current = insert_node_after(head,current,d)
begindir = nil
done = true
@@ -962,7 +958,7 @@ local function apply_to_list(list,size,head,pardir)
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"))
+ -- setattrlist(d,current)
head = insert_node_before(head,current,d)
done = true
end
@@ -976,7 +972,7 @@ local function apply_to_list(list,size,head,pardir)
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"))
+ -- setattrlist(d,current)
head, current = insert_node_after(head,current,d)
done = true
end
diff --git a/tex/context/base/mkiv/typo-fkr.lua b/tex/context/base/mkiv/typo-fkr.lua
new file mode 100644
index 000000000..a1135d0f3
--- /dev/null
+++ b/tex/context/base/mkiv/typo-fkr.lua
@@ -0,0 +1,129 @@
+if not modules then modules = { } end modules ['typo-fkr'] = {
+ version = 1.001,
+ comment = "companion to typo-fkr.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local nuts = nodes.nuts
+local tonut = nuts.tonut
+local getid = nuts.getid
+local getnext = nuts.getnext
+local getchar = nuts.getchar
+local getfont = nuts.getfont
+local getattr = nuts.getattr
+
+local nodecodes = nodes.nodecodes
+local glyph_code = nodecodes.glyph
+
+local fontdata = fonts.hashes.identifiers
+local getkernpair = fonts.handlers.otf.getkern
+
+local insert_before = nuts.insert_before
+local new_kern = nuts.pool.fontkern
+
+local enableaction = nodes.tasks.enableaction
+
+local a_extrakern = attributes.private("extrafontkern")
+
+-- 0=none 1=min 2=max 3=mixed
+
+typesetters.fontkerns = { }
+
+function typesetters.fontkerns.handler(head)
+ local kepthead = head
+ local head = tonut(head)
+ local current = head
+ local lastfont = nil
+ local lastchar = nil
+ local lastdata = nil
+ local done = false
+ while current do
+ local id = getid(current)
+ if id == glyph_code then
+ local a = getattr(current,a_extrakern)
+ if a then
+ local char = getchar(current)
+ local font = getfont(current)
+ if font ~= lastfont then
+ if a > 0 and lastchar then
+ if not lastdata then
+ lastdata = fontdata[lastfont]
+ end
+ local kern = nil
+ local data = fontdata[font]
+ local kern1 = getkernpair(lastdata,lastchar,char)
+ local kern2 = getkernpair(data,lastchar,char)
+ if a == 1 then
+ kern = kern1 > kern2 and kern2 or kern1 -- min
+ elseif a == 2 then
+ kern = kern1 > kern2 and kern1 or kern2 -- max
+ else -- 3
+ kern = (kern1 + kern2)/2 -- mixed
+ end
+ if kern ~= 0 then
+ head, current = insert_before(head,current,new_kern(kern))
+ done = true
+ end
+ lastdata = data
+ else
+ lastdata = nil
+ end
+ elseif lastchar then
+ if not lastdata then
+ lastdata = fontdata[lastfont]
+ end
+ local kern = getkernpair(lastdata,lastchar,char)
+ if kern ~= 0 then
+ head, current = insert_before(head,current,new_kern(kern))
+ done = true
+ end
+ end
+ lastchar = char
+ lastfont = font
+ elseif lastfont then
+ lastfont = nil
+ lastchar = nil
+ lastdata = nil
+ end
+ elseif lastfont then
+ lastfont = nil
+ lastchar = nil
+ lastdata = nil
+ end
+ current = getnext(current)
+ end
+ return kepthead, done
+end
+
+if context then
+
+ local variables = interfaces.variables
+ local unsetvalue = attributes.unsetvalue
+ local enabled = false
+ local setattribute = tex.setattribute
+
+ local values = {
+ [variables.none ] = 0,
+ [variables.min ] = 1,
+ [variables.max ] = 2,
+ [variables.mixed] = 3,
+ [variables.reset] = unsetvalue,
+ }
+
+ local function setextrafontkerns(str)
+ if not enabled then
+ enableaction("processors","typesetters.fontkerns.handler")
+ enabled = true
+ end
+ setattribute(a_extrakern,values[str] or unsetvalue)
+ end
+
+ interfaces.implement {
+ name = "setextrafontkerns",
+ arguments = "string",
+ actions = setextrafontkerns,
+ }
+
+end
diff --git a/tex/context/base/mkiv/typo-fkr.mkiv b/tex/context/base/mkiv/typo-fkr.mkiv
new file mode 100644
index 000000000..684d831bc
--- /dev/null
+++ b/tex/context/base/mkiv/typo-fkr.mkiv
@@ -0,0 +1,38 @@
+%D \module
+%D [ file=typo-fkr,
+%D version=2016.10.10,
+%D title=\CONTEXT\ Typesetting Macros,
+%D subtitle=Additional Font Kerning,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{ConTeXt Typesetting Macros / Additional Font Kerning}
+
+\registerctxluafile{typo-fkr}{1.001}
+
+\definesystemattribute[extrafontkern][public]
+
+\unprotect
+
+% none : not across fonts (but still within)
+% min : min value across fonts
+% max : max value across fonts
+% mixed : mean value across fonts
+% reset : disable
+
+\unexpanded\def\setextrafontkerns[#1]%
+ {\clf_setextrafontkerns{#1}}
+
+\unexpanded\def\resetextrafontkerns
+ {\attribute\extrafontkernattribute\attributeunsetvalue}
+
+\appendtoks
+ \resetextrafontkerns
+\to \everyresettypesetting
+
+\protect
diff --git a/tex/context/base/mkiv/typo-fln.lua b/tex/context/base/mkiv/typo-fln.lua
index 1e1a2c44a..cef77cea1 100644
--- a/tex/context/base/mkiv/typo-fln.lua
+++ b/tex/context/base/mkiv/typo-fln.lua
@@ -21,7 +21,10 @@ typesetters.firstlines = typesetters.firstlines or { }
local firstlines = typesetters.firstlines
local nodes = nodes
+
local tasks = nodes.tasks
+local enableaction = tasks.enableaction
+local disableaction = tasks.disableaction
local context = context
local implement = interfaces.implement
@@ -31,6 +34,9 @@ local tonut = nuts.tonut
local tonode = nuts.tonode
local getnext = nuts.getnext
+local getprev = nuts.getprev
+local getboth = nuts.getboth
+local setboth = nuts.setboth
local getid = nuts.getid
local getfield = nuts.getfield
local setfield = nuts.setfield
@@ -39,6 +45,10 @@ local setlist = nuts.setlist
local getattr = nuts.getattr
local setattr = nuts.setattr
local getbox = nuts.getbox
+local getdisc = nuts.getdisc
+local setdisc = nuts.setdisc
+local setlink = nuts.setlink
+local setfont = nuts.setfont
local nodecodes = nodes.nodecodes
local glyph_code = nodecodes.glyph
@@ -46,13 +56,12 @@ local disc_code = nodecodes.disc
local kern_code = nodecodes.kern
local traverse_id = nuts.traverse_id
-local free_node_list = nuts.flush_list
-local free_node = nuts.flush_node
+local flush_node_list = nuts.flush_list
+local flush_node = nuts.flush_node
local copy_node_list = nuts.copy_list
local insert_node_after = nuts.insert_after
-local insert_node_before = nuts.insert_before
-local hpack_node_list = nuts.hpack
local remove_node = nuts.remove
+local list_dimensions = nuts.dimensions
local nodepool = nuts.pool
local newpenalty = nodepool.penalty
@@ -65,7 +74,7 @@ firstlines.actions = actions
local a_firstline = attributes.private('firstline')
local a_color = attributes.private('color')
local a_transparency = attributes.private('transparency')
-local a_colorspace = attributes.private('colormodel')
+local a_colormodel = attributes.private('colormodel')
local texsetattribute = tex.setattribute
local unsetvalue = attributes.unsetvalue
@@ -82,7 +91,7 @@ local settings = nil
function firstlines.set(specification)
settings = specification or { }
- tasks.enableaction("processors","typesetters.firstlines.handler")
+ enableaction("processors","typesetters.firstlines.handler")
if trace_firstlines then
report_firstlines("enabling firstlines")
end
@@ -120,12 +129,31 @@ actions[v_line] = function(head,setting)
local n = 0
local temp = copy_node_list(head)
local linebreaks = { }
- for g in traverse_id(glyph_code,temp) do
- if dynamic > 0 then
- setattr(g,0,dynamic)
+
+ local function set(head)
+ for g in traverse_id(glyph_code,head) do
+ if dynamic > 0 then
+ setattr(g,0,dynamic)
+ end
+ setfont(g,font)
+ end
+ end
+
+ set(temp)
+
+ for g in traverse_id(disc_code,temp) do
+ local pre, post, replace = getdisc(g)
+ if pre then
+ set(pre)
+ end
+ if post then
+ set(post)
+ end
+ if replace then
+ set(replace)
end
- setfield(g,"font",font)
end
+
local start = temp
local list = temp
local prev = temp
@@ -137,25 +165,37 @@ actions[v_line] = function(head,setting)
if i <= - hangafter then
hsize = hsize - hangindent
end
+
+ local function try(extra)
+ local width = list_dimensions(list,start)
+ if extra then
+ width = width + list_dimensions(extra)
+ end
+ if width > hsize then
+ list = prev
+ return true
+ else
+ linebreaks[i] = n
+ prev = start
+ nofchars = n
+ end
+ end
+
while start do
local id = getid(start)
if id == glyph_code then
n = n + 1
elseif id == disc_code then
-- this could be an option
+ n = n + 1
+ if try(getfield(start,"pre")) then
+ break
+ end
elseif id == kern_code then -- todo: fontkern
-- this could be an option
elseif n > 0 then
- local pack = hpack_node_list(copy_node_list(list,start))
- if getfield(pack,"width") > hsize then
- free_node_list(pack)
- list = prev
+ if try() then
break
- else
- linebreaks[i] = n
- prev = start
- free_node_list(pack)
- nofchars = n
end
end
start = getnext(start)
@@ -166,23 +206,69 @@ actions[v_line] = function(head,setting)
end
local start = head
local n = 0
+
+ local function update(start)
+ if dynamic > 0 then
+ setattr(start,0,dynamic)
+ end
+ setfont(start,font)
+ if ca and ca > 0 then
+ setattr(start,a_colormodel,ma == 0 and 1 or ma)
+ setattr(start,a_color,ca)
+ end
+ if ta and ta > 0 then
+ setattr(start,a_transparency,ta)
+ end
+ end
+
for i=1,noflines do
local linebreak = linebreaks[i]
while start and n < nofchars do
local id = getid(start)
- if id == glyph_code then -- or id == disc_code then
- if dynamic > 0 then
- setattr(start,0,dynamic)
- end
- setfield(start,"font",font)
- if ca and ca > 0 then
- setattr(start,a_colorspace,ma == 0 and 1 or ma)
- setattr(start,a_color,ca)
- end
- if ta and ta > 0 then
- setattr(start,a_transparency,ta)
- end
+ if id == glyph_code then
n = n + 1
+ update(start)
+ elseif id == disc_code then
+ n = n + 1
+ local disc = start
+ local pre, post, replace, pretail, posttail, replacetail = getdisc(disc,true)
+ if linebreak == n then
+ local p, n = getboth(start)
+ if pre then
+ for current in traverse_id(glyph_code,pre) do
+ update(current)
+ end
+ setlink(pretail,n)
+ setlink(p,pre)
+ start = pretail
+ pre = nil
+ else
+ setlink(p,n)
+ start = p
+ end
+ if post then
+ local p, n = getboth(start)
+ setlink(posttail,n)
+ setlink(start,post)
+ post = nil
+ end
+ else
+ local p, n = getboth(start)
+ if replace then
+ for current in traverse_id(glyph_code,replace) do
+ update(current)
+ end
+ setlink(replacetail,n)
+ setlink(p,replace)
+ start = replacetail
+ replace = nil
+ else
+ setlink(p,n)
+ start = p
+ end
+ end
+ setdisc(disc,pre,post,replace)
+ flush_node(disc)
end
if linebreak == n then
if trace_firstlines then
@@ -196,7 +282,7 @@ actions[v_line] = function(head,setting)
start = getnext(start)
end
end
- free_node_list(temp)
+ flush_node_list(temp)
return head, true
end
@@ -220,7 +306,7 @@ actions[v_word] = function(head,setting)
ok = true
end
if ca and ca > 0 then
- setattr(start,a_colorspace,ma == 0 and 1 or ma)
+ setattr(start,a_colormodel,ma == 0 and 1 or ma)
setattr(start,a_color,ca)
end
if ta and ta > 0 then
@@ -229,7 +315,7 @@ actions[v_word] = function(head,setting)
if dynamic > 0 then
setattr(start,0,dynamic)
end
- setfield(start,"font",font)
+ setfont(start,font)
elseif id == disc_code then
-- continue
elseif id == kern_code then -- todo: fontkern
@@ -263,7 +349,7 @@ function firstlines.handler(head)
end
if attr then
-- here as we can process nested boxes first so we need to keep state
- tasks.disableaction("processors","typesetters.firstlines.handler")
+ disableaction("processors","typesetters.firstlines.handler")
-- texsetattribute(attribute,unsetvalue)
local alternative = settings.alternative or v_default
local action = actions[alternative] or actions[v_default]
diff --git a/tex/context/base/mkiv/typo-itc.lua b/tex/context/base/mkiv/typo-itc.lua
index ea8103aad..312832d5b 100644
--- a/tex/context/base/mkiv/typo-itc.lua
+++ b/tex/context/base/mkiv/typo-itc.lua
@@ -6,9 +6,9 @@ if not modules then modules = { } end modules ['typo-itc'] = {
license = "see context related readme files"
}
-local utfchar = utf.char
local trace_italics = false trackers.register("typesetters.italics", function(v) trace_italics = v end)
+
local report_italics = logs.reporter("nodes","italics")
local threshold = 0.5 trackers.register("typesetters.threshold", function(v) threshold = v == true and 0.5 or tonumber(v) end)
@@ -23,7 +23,7 @@ local glue_code = nodecodes.glue
local disc_code = nodecodes.disc
local math_code = nodecodes.math
-local tasks = nodes.tasks
+local enableaction = nodes.tasks.enableaction
local nuts = nodes.nuts
local nodepool = nuts.pool
@@ -40,14 +40,18 @@ local getchar = nuts.getchar
local getdisc = nuts.getdisc
local getattr = nuts.getattr
local setattr = nuts.setattr
+local getattrlist = nuts.getattrlist
+local setattrlist = nuts.setattrlist
local setfield = nuts.setfield
local setdisc = nuts.setdisc
local isglyph = nuts.isglyph
+local setkern = nuts.setkern
+local getkern = nuts.getkern
+local getheight = nuts.getheight
local insert_node_after = nuts.insert_after
local delete_node = nuts.delete
local end_of_math = nuts.end_of_math
-local find_tail = nuts.tail
local texgetattribute = tex.getattribute
local texsetattribute = tex.setattribute
@@ -63,6 +67,7 @@ local fonthashes = fonts.hashes
local fontdata = fonthashes.identifiers
local italicsdata = fonthashes.italics
local exheights = fonthashes.exheights
+local chardata = fonthashes.characters
local is_punctuation = characters.is_punctuation
@@ -117,14 +122,14 @@ end
-- todo: clear attribute
local function okay(data,current,font,prevchar,previtalic,char,what)
- if not data then
+ if data then
if trace_italics then
report_italics("ignoring %p between %s italic %C and italic %C",previtalic,what,prevchar,char)
end
return false
end
if threshold then
- local ht = getfield(current,"height")
+ local ht = getheight(current)
local ex = exheights[font]
local th = threshold * ex
if ht <= th then
@@ -149,9 +154,9 @@ end
local function correction_kern(kern,n)
local k = new_correction_kern(kern)
if n then
- local a = getfield(n,"attr")
+ local a = getattrlist(n)
if a then -- maybe not
- setfield(k,"attr",a) -- can be a marked content (border case)
+ setattrlist(k,a) -- can be a marked content (border case)
end
end
return k
@@ -160,9 +165,9 @@ end
local function correction_glue(glue,n)
local g = new_correction_glue(glue)
if n then
- local a = getfield(n,"attr")
+ local a = getattrlist(n)
if a then -- maybe not
- setfield(g,"attr",a) -- can be a marked content (border case)
+ setattrlist(g,a) -- can be a marked content (border case)
end
end
return g
@@ -195,12 +200,37 @@ local function domath(head,current, done)
else
a = a + 100
end
- 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)
+ local i = getkern(kern)
+ local f = getfont(glyph)
+ local c = getchar(glyph)
+ if getheight(next) < 1.25*exheights[f] then
+ if i == 0 then
+ if trace_italics then
+ report_italics("%s italic %p between math %C and punctuation %C","ignoring",i,c,char)
+ end
+ else
+ if trace_italics then
+ report_italics("%s italic between math %C and punctuation %C","removing",i,c,char)
+ end
+ setkern(kern,0) -- or maybe a small value or half the ic
+ done = true
+ end
+ elseif i == 0 then
+ local d = chardata[f][c]
+ local i = d.italic
+ if i == 0 then
+ if trace_italics then
+ report_italics("%s italic %p between math %C and punctuation %C","ignoring",i,c,char)
+ end
+ else
+ setkern(kern,i)
+ if trace_italics then
+ report_italics("%s italic %p between math %C and punctuation %C","setting",i,c,char)
+ end
+ done = true
end
- setfield(kern,"kern",0) -- or maybe a small value or half the ic
- done = true
+ elseif trace_italics then
+ report_italics("%s italic %p between math %C and punctuation %C","keeping",k,c,char)
end
end
end
@@ -253,7 +283,7 @@ local function texthandler(head)
local previnserted = nil
local pre = nil
- local pretail = nil
+ local pretail = nil
local post = nil
local posttail = nil
@@ -568,7 +598,7 @@ function italics.handler(head)
end
enabletext = function()
- tasks.enableaction("processors","typesetters.italics.handler")
+ enableaction("processors","typesetters.italics.handler")
if trace_italics then
report_italics("enabling text/text italics")
end
@@ -577,7 +607,7 @@ enabletext = function()
end
enablemath = function()
- tasks.enableaction("processors","typesetters.italics.handler")
+ enableaction("processors","typesetters.italics.handler")
if trace_italics then
report_italics("enabling math/text italics")
end
diff --git a/tex/context/base/mkiv/typo-krn.lua b/tex/context/base/mkiv/typo-krn.lua
index 7607fc5f5..24a91d6b6 100644
--- a/tex/context/base/mkiv/typo-krn.lua
+++ b/tex/context/base/mkiv/typo-krn.lua
@@ -10,12 +10,12 @@ if not modules then modules = { } end modules ['typo-krn'] = {
-- components: better split on tounicode
local next, type, tonumber = next, type, tonumber
-local utfchar = utf.char
local nodes = nodes
local fonts = fonts
-local tasks = nodes.tasks
+local enableaction = nodes.tasks.enableaction
+
local nuts = nodes.nuts
local nodepool = nuts.pool
@@ -25,27 +25,31 @@ local tonut = nuts.tonut
-- check what is used
local find_node_tail = nuts.tail
-local free_node = nuts.free
+local flush_node = nuts.flush_node
local insert_node_before = nuts.insert_before
local insert_node_after = nuts.insert_after
local end_of_math = nuts.end_of_math
+local use_components = nuts.use_components
local getfield = nuts.getfield
local getnext = nuts.getnext
local getprev = nuts.getprev
-local getboth = nuts.getboth
local getid = nuts.getid
local getfont = nuts.getfont
local getsubtype = nuts.getsubtype
local getchar = nuts.getchar
local getdisc = nuts.getdisc
+local getglue = nuts.getglue
+local getkern = nuts.getkern
local isglyph = nuts.isglyph
local setfield = nuts.setfield
local getattr = nuts.getattr
-local setattr = nuts.setattr
+local takeattr = nuts.takeattr
local setlink = nuts.setlink
-local setsubtype = nuts.setsubtype
+local setdisc = nuts.setdisc
+local setglue = nuts.setglue
+local setkern = nuts.setkern
local texsetattribute = tex.setattribute
local unsetvalue = attributes.unsetvalue
@@ -82,7 +86,6 @@ local spaceskip_code = skipcodes.spaceskip
local xspaceskip_code = skipcodes.xspaceskip
local fonthashes = fonts.hashes
-local fontdata = fonthashes.identifiers
local chardata = fonthashes.characters
local quaddata = fonthashes.quads
local markdata = fonthashes.marks
@@ -104,11 +107,8 @@ typesetters.kerns = typesetters.kerns or { }
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)
+local trace_ligatures = false trackers.register("typesetters.kerns.ligatures", function(v) trace_ligatures = v end)
+local trace_ligatures_d = false trackers.register("typesetters.kerns.ligatures.detail",function(v) trace_ligatures_d = v end)
kerns.mapping = kerns.mapping or { }
kerns.factors = kerns.factors or { }
@@ -146,18 +146,24 @@ function kerns.keepligature(n) -- might become default
local c = getchar(n)
local d = fontdescriptions[f][c].name
if a > 0 and contextsetups[a].keepligatures == v_auto then
- report("font %!font:name!, glyph %a, slot %X -> ligature %s, by %s feature %a",f,d,c,"kept","dynamic","keepligatures")
+ if trace_ligatures_d then
+ report("font %!font:name!, glyph %a, slot %X -> ligature %s, by %s feature %a",f,d,c,"kept","dynamic","keepligatures")
+ end
setcolor(n,"darkred")
return true
end
local k = fontfeatures[f].keepligatures
if k == v_auto then
- report("font %!font:name!, glyph %a, slot %X -> ligature %s, by %s feature %a",f,d,c,"kept","static","keepligatures")
+ if trace_ligatures_d then
+ report("font %!font:name!, glyph %a, slot %X -> ligature %s, by %s feature %a",f,d,c,"kept","static","keepligatures")
+ end
setcolor(n,"darkgreen")
return true
end
if not k then
- report("font %!font:name!, glyph %a, slot %X -> ligature %s, by %s feature %a",f,d,c,"split","static","keepligatures")
+ if trace_ligatures_d then
+ report("font %!font:name!, glyph %a, slot %X -> ligature %s, by %s feature %a",f,d,c,"split","static","keepligatures")
+ end
resetcolor(n)
return false
end
@@ -227,8 +233,7 @@ 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)
- setsubtype(boundary,userkern_code)
- setfield(boundary,"kern",getfield(boundary,"kern") + quaddata[getfont(prev)]*krn)
+ setkern(boundary,getkern(boundary) + quaddata[getfont(prev)]*krn,userkern_code)
return boundary, true
end
end
@@ -264,8 +269,7 @@ 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)
- setsubtype(tail,userkern_code)
- setfield(tail,"kern",getfield(tail,"kern") + quaddata[getfont(next)]*krn)
+ setkern(tail,getkern(tail) + quaddata[getfont(next)]*krn,userkern_code)
return boundary, true
end
end
@@ -279,7 +283,7 @@ local function inject_end(boundary,next,keeptogether,krn,ok)
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))
+ setlink(tail,new_kern(kern))
return boundary, true
end
end
@@ -315,8 +319,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)
- setsubtype(prev,userkern_code)
- setfield(prev,"kern",getfield(prev,"kern") + kern)
+ setkern(prev,getkern(prev) + kern,userkern_code)
okay = true
end
end
@@ -378,9 +381,8 @@ function kerns.handler(head)
-- fontkerns don't get the attribute but they always sit between glyphs so
-- are always valid bound .. disc nodes also somtimes don't get them
local id = getid(start)
- local attr = getattr(start,a_kerns)
+ local attr = takeattr(start,a_kerns)
if attr and attr > 0 then
- setattr(start,a_kerns,0) -- unsetvalue)
local krn = mapping[attr]
if krn == v_max then
krn = .25
@@ -390,31 +392,13 @@ function kerns.handler(head)
end
if not krn or krn == 0 then
bound = false
- elseif id == glyph_code then -- we could use the subtype ligature
- local c = getfield(start,"components")
- if not c then
- -- fine
- elseif keepligature and keepligature(start) then
+ elseif id == glyph_code then
+ if keepligature and keepligature(start) then
-- keep 'm
- c = nil
else
- while c do
- local s = start
- local t = find_node_tail(c)
- local p, n = getboth(s)
- if p then
- setlink(p,c)
- else
- head = c
- end
- if n then
- setlink(t,n)
- end
- start = c
- setfield(s,"components",nil)
- free_node(s)
- c = getfield(start,"components")
- end
+ -- we could use the subtype ligature but that's also a call
+ -- todo: check tounicode and use that information to split
+ head, start = use_components(head,start)
end
local char = getchar(start)
local font = getfont(start)
@@ -433,8 +417,7 @@ function kerns.handler(head)
end
if inject then
-- not yet ok, as injected kerns can be overlays (from node-inj.lua)
- setsubtype(prev,userkern_code)
- setfield(prev,"kern",getfield(prev,"kern") + quaddata[font]*krn)
+ setkern(prev,getkern(prev) + quaddata[font]*krn,userkern_code)
done = true
end
end
@@ -446,11 +429,7 @@ function kerns.handler(head)
local data = chardata[font][prevchar]
local kerns = data and data.kerns
local kern = (kerns and kerns[char] or 0) + quaddata[font]*krn
- 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
+ insert_node_before(head,start,kern_injector(fillup,kern))
done = true
end
else
@@ -480,12 +459,7 @@ function kerns.handler(head)
languages.expand(start,pglyph and prev)
end
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
- -- pretail etc fields in a disc node
- --
- -- maybe i'll merge the now split functions
+ local indeed = false
if pre then
local okay = false
if not prev then
@@ -497,8 +471,7 @@ function kerns.handler(head)
end
pre, okay = process_list(pre,keeptogether,krn,false,okay)
if okay then
- setfield(start,"pre",pre)
- done = true
+ indeed = true
end
end
if post then
@@ -512,8 +485,7 @@ function kerns.handler(head)
end
post, okay = process_list(post,keeptogether,krn,false,okay)
if okay then
- setfield(start,"post",post)
- done = true
+ indeed = true
end
end
if replace then
@@ -534,11 +506,14 @@ function kerns.handler(head)
end
replace, okay = process_list(replace,keeptogether,krn,false,okay)
if okay then
- setfield(start,"replace",replace)
- done = true
+ indeed = true
end
elseif prevfont then
- setfield(start,"replace",new_kern(quaddata[prevfont]*krn))
+ replace = new_kern(quaddata[prevfont]*krn)
+ indeed = true
+ end
+ if indeed then
+ setdisc(start,pre,post,replace)
done = true
end
bound = false
@@ -549,21 +524,18 @@ 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 w = getfield(start,"width")
- if w > 0 then
- local width = w + gluefactor * w * krn
- local stretch = getfield(start,"stretch") * width / w
- local shrink = getfield(start,"shrink") * width / w
+ local width, stretch, shrink, stretch_order, shrink_order = getglue(start)
+ if width > 0 then
+ local w = width + gluefactor * width * krn
+ stretch = stretch * w / width
+ shrink = shrink * w / width
if fillup then
stretch = 2 * stretch
shrink = 2 * shrink
- setfield(start,"stretch_order",1)
- -- shrink_order ?
+ stretch_order = 1
+ -- shrink_order = 1 ?
end
- setfield(start,"width",width)
- setfield(start,"stretch",stretch)
- setfield(start,"shrink", shrink)
- --
+ setglue(start,w,stretch,shrink,stretch_order,shrink_order)
done = true
end
end
@@ -612,7 +584,7 @@ function kerns.set(factor)
end
if factor == v_max or factor ~= 0 then
if not enabled then
- tasks.enableaction("processors","typesetters.kerns.handler")
+ enableaction("processors","typesetters.kerns.handler")
enabled = true
end
local a = factors[factor]
diff --git a/tex/context/base/mkiv/typo-lin.lua b/tex/context/base/mkiv/typo-lin.lua
index a74a635f6..d702bcb8c 100644
--- a/tex/context/base/mkiv/typo-lin.lua
+++ b/tex/context/base/mkiv/typo-lin.lua
@@ -65,7 +65,7 @@ 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
+----- localpar_code = nodecodes.localpar
local leftskip_code = gluecodes.leftskip
local rightskip_code = gluecodes.rightskip
local parfillskip_code = gluecodes.parfillskip
@@ -77,6 +77,7 @@ local traverse_id = nuts.traverse_id
local insert_before = nuts.insert_before
local insert_after = nuts.insert_after
local find_tail = nuts.tail
+local rehpack = nuts.rehpack
----- remove_node = nuts.remove
local getsubtype = nuts.getsubtype
@@ -88,6 +89,14 @@ local getprev = nuts.getprev
local getboth = nuts.getboth
local getfield = nuts.getfield
local setfield = nuts.setfield
+local setlink = nuts.setlink
+local setkern = nuts.setkern
+local getkern = nuts.getkern
+local getdir = nuts.getdir
+local getshift = nuts.getshift
+local setshift = nuts.setshift
+local getwidth = nuts.getwidth
+local setwidth = nuts.setwidth
local setprop = nuts.setprop
local getprop = nuts.rawprop -- getprop
@@ -95,16 +104,15 @@ 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 new_glue = nodepool.glue
local texgetcount = tex.getcount
+local texgetglue = tex.getglue
local setmetatableindex = table.setmetatableindex
local formatters = string.formatters
@@ -135,8 +143,8 @@ 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 shift = getshift(line) -- dangerous as it can be vertical as well
+ local reverse = getdir(line) == "TRT" or false
local pack = new_hlist()
local head = getlist(line)
local delta = 0
@@ -168,7 +176,7 @@ local function normalize(line,islocal) -- assumes prestine lines, nothing pre/ap
local head = oldhead
local leftskip = nil
local rightskip = nil
- local width = getfield(line,"width")
+ local width = getwidth(line)
local hsize = islocal and width or tex.hsize
local lskip = 0
local rskip = 0
@@ -179,7 +187,7 @@ local function normalize(line,islocal) -- assumes prestine lines, nothing pre/ap
local subtype = getsubtype(head)
if subtype == leftskip_code then
leftskip = head
- lskip = getfield(head,"width") or 0
+ lskip = getwidth(head) or 0
end
current = getnext(head)
id = getid(current)
@@ -194,7 +202,7 @@ local function normalize(line,islocal) -- assumes prestine lines, nothing pre/ap
if id == glue_code then
if getsubtype(current) == rightskip_code then
rightskip = tail
- rskip = getfield(current,"width") or 0
+ rskip = getwidth(current) or 0
current = getprev(tail)
id = getid(current)
end
@@ -241,9 +249,47 @@ function paragraphs.normalize(head,islocal)
-- can be an option, maybe we need a proper state in lua itself ... is this check still needed?
return head, false
end
+ -- this can become a separate handler but it makes sense to integrate it here
+ local l_width, l_stretch, l_shrink = texgetglue("parfillleftskip")
+ if l_width ~= 0 or l_stretch ~= 0 or l_shrink ~= 0 then
+ local last = nil -- a nut
+ local done = false
+ for line in traverse_id(hlist_code,tonut(head)) do
+ if getsubtype(line) == line_code and not getprop(line,"line") then
+ if done then
+ last = line
+ else
+ done = true
+ end
+ end
+ end
+ if last then -- only if we have more than one line
+ local head = getlist(last)
+ local current = head
+ if current then
+ if getid(current) == glue_code and getsubtype(current,leftskip_code) then
+ current = getnext(current)
+ end
+ if current then
+ head, current = insert_before(head,current,new_glue(l_width,l_stretch,l_shrink))
+ if head == current then
+ setlist(last,head)
+ end
+ -- can be a 'rehpack(h )'
+ rehpack(last)
+ end
+ end
+ end
+ end
+ -- normalizer
for line in traverse_id(hlist_code,tonut(head)) do
if getsubtype(line) == line_code and not getprop(line,"line") then
normalize(line)
+ if done then
+ last = line
+ else
+ done = true
+ end
end
end
return head, true
@@ -317,12 +363,14 @@ local function addanchortoline(n,anchor)
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)
+ anchor = new_hlist(setlink(
+ anchor,
+ new_kern(-65536/4),
+ new_rule(65536/2,4*65536,4*65536),
+ new_kern(-65536/4-4*65536),
+ new_rule(8*65536,65536/4,65536/4)
+ ))
+ setwidth(anchor,0)
end
if where.tail then
local head = where.head
@@ -355,15 +403,15 @@ function paragraphs.moveinline(n,blob,dx,dy)
if dx ~= 0 then
local prev, next = getboth(blob)
if prev and getid(prev) == kern_code then
- setfield(prev,"kern",getfield(prev,"kern") + dx)
+ setkern(prev,getkern(prev) + dx)
end
if next and getid(next) == kern_code then
- setfield(next,"kern",getfield(next,"kern") - dx)
+ setkern(next,getkern(next) - dx)
end
end
if dy ~= 0 then
if getid(blob) == hlist_code then
- setfield(blob,"shift",getfield(blob,"shift") + dy)
+ setshift(blob,getshift(blob) + dy)
end
end
else
@@ -372,13 +420,6 @@ function paragraphs.moveinline(n,blob,dx,dy)
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 lateluafunction = nodepool.lateluafunction
local setposition = job.positions.set
local t_anchor = { x = true, c = true }
diff --git a/tex/context/base/mkiv/typo-mar.lua b/tex/context/base/mkiv/typo-mar.lua
index 727846678..a5d607cd7 100644
--- a/tex/context/base/mkiv/typo-mar.lua
+++ b/tex/context/base/mkiv/typo-mar.lua
@@ -9,70 +9,8 @@ if not modules then modules = { } end modules ['typo-mar'] = {
-- todo:
--
-- * autoleft/right depending on available space (or distance to margin)
--- * stack across paragraphs, but that is messy and one should reconsider
--- using margin data then as also vertical spacing kicks in
-- * floating margin data, with close-to-call anchoring
--- -- experiment (does not work, too much interference)
---
--- local pdfprint = pdf.print
--- local format = string.format
---
--- anchors = anchors or { }
---
--- local whatever = { }
--- local factor = (7200/7227)/65536
---
--- function anchors.set(tag)
--- whatever[tag] = { pdf.h, pdf.v }
--- end
---
--- function anchors.reset(tag)
--- whatever[tag] = nil
--- end
---
--- function anchors.startmove(tag,how) -- save/restore nodes but they don't support moves
--- local w = whatever[tag]
--- if not w then
--- -- error
--- elseif how == "horizontal" or how == "h" then
--- pdfprint("page",format(" q 1 0 0 1 %f 0 cm ", (w[1] - pdf.h) * factor))
--- elseif how == "vertical" or how == "v" then
--- pdfprint("page",format(" q 1 0 0 1 0 %f cm ", (w[2] - pdf.v) * factor))
--- else
--- pdfprint("page",format(" q 1 0 0 1 %f %f cm ", (w[1] - pdf.h) * factor, (w[2] - pdf.v) * factor))
--- end
--- end
---
--- function anchors.stopmove(tag)
--- local w = whatever[tag]
--- if not w then
--- -- error
--- else
--- pdfprint("page"," Q ")
--- end
--- end
---
--- local latelua = nodes.pool.latelua
---
--- function anchors.node_set(tag)
--- return latelua(formatters["anchors.set(%q)"](tag))
--- end
---
--- function anchors.node_reset(tag)
--- return latelua(formatters["anchors.reset(%q)"](tag))
--- end
---
--- function anchors.node_start_move(tag,how)
--- return latelua(formatters["anchors.startmove(%q,%q)](tag,how))
--- end
---
--- function anchors.node_stop_move(tag)
--- return latelua(formatters["anchors.stopmove(%q)"](tag))
--- end
-
--- so far
-
local format, validstring = string.format, string.valid
local insert, remove, sortedkeys, fastcopy = table.insert, table.remove, table.sortedkeys, table.fastcopy
local setmetatable, next = setmetatable, next
@@ -104,8 +42,6 @@ local v_local = variables["local"]
local v_global = variables["global"]
local v_left = variables.left
local v_right = variables.right
-local v_flushleft = variables.flushleft
-local v_flushright = variables.flushright
local v_inner = variables.inner
local v_outer = variables.outer
local v_margin = variables.margin
@@ -117,9 +53,7 @@ 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
@@ -127,13 +61,9 @@ local nodepool = nuts.pool
local tonode = nuts.tonode
local tonut = nuts.tonut
-local copy_node_list = nuts.copy_list
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
-local insert_node_before = nuts.insert_before
-local linked_nodes = nuts.linked
+local flush_node_list = nuts.flush_list
local getfield = nuts.getfield
local setfield = nuts.setfield
@@ -143,9 +73,18 @@ local getid = nuts.getid
local getattr = nuts.getattr
local setattr = nuts.setattr
local getsubtype = nuts.getsubtype
-local getbox = nuts.getbox
local getlist = nuts.getlist
+local getwhd = nuts.getwhd
local setlist = nuts.setlist
+local setlink = nuts.setlink
+local getshift = nuts.getshift
+local setshift = nuts.setshift
+local getwidth = nuts.getwidth
+local setwidth = nuts.setwidth
+local getheight = nuts.getheight
+
+local getbox = nuts.getbox
+local takebox = nuts.takebox
local setprop = nuts.setprop
local getprop = nuts.getprop
@@ -157,25 +96,18 @@ local whatsitcodes = nodes.whatsitcodes
local hlist_code = nodecodes.hlist
local vlist_code = nodecodes.vlist
-local glue_code = nodecodes.glue
-local kern_code = nodecodes.kern
-local penalty_code = nodecodes.penalty
local whatsit_code = nodecodes.whatsit
-local line_code = listcodes.line
-local cell_code = listcodes.cell
-local alignment_code = listcodes.alignment
local userdefined_code = whatsitcodes.userdefined
local nodepool = nuts.pool
-local new_kern = nodepool.kern
local new_usernumber = nodepool.usernumber
-local new_latelua = nodepool.latelua
+local new_hlist = nodepool.hlist
local lateluafunction = nodepool.lateluafunction
-local texgetcount = tex.getcount
local texgetdimen = tex.getdimen
+local texgetcount = tex.getcount
local texget = tex.get
local isleftpage = layouts.status.isleftpage
@@ -186,7 +118,6 @@ local addtoline = paragraphs.addtoline
local moveinline = paragraphs.moveinline
local calculatedelta = paragraphs.calculatedelta
------ a_specialcontent = attributes.private("specialcontent")
local a_linenumber = attributes.private('linenumber')
local inline_mark = nodepool.userids["margins.inline"]
@@ -207,6 +138,7 @@ local nofsaved = 0
local nofstored = 0
local nofinlined = 0
local nofdelayed = 0
+local nofinjected = 0
local h_anchors = 0
local v_anchors = 0
@@ -269,8 +201,7 @@ end
function margins.save(t)
setmetatable(t,defaults)
- local content = getbox(t.number)
- -- setattr(content,a_specialcontent,1)
+ local content = takebox(t.number)
setprop(content,"specialcontent","margindata")
local location = t.location
local category = t.category
@@ -316,12 +247,13 @@ function margins.save(t)
showstore(store,"before",location)
end
if name and name ~= "" then
+ -- this can be used to overload
if inlinestore then -- todo: inline store has to be done differently (not sparse)
local t = sortedkeys(store) for j=#t,1,-1 do local i = t[j]
local si = store[i]
if si.name == name then
local s = remove(store,i)
- free_node_list(s.box)
+ flush_node_list(s.box)
end
end
else
@@ -329,7 +261,7 @@ function margins.save(t)
local si = store[i]
if si.name == name then
local s = remove(store,i)
- free_node_list(s.box)
+ flush_node_list(s.box)
end
end
end
@@ -341,16 +273,17 @@ function margins.save(t)
local leftmargindistance = texgetdimen("naturalleftmargindistance")
local rightmargindistance = texgetdimen("naturalrightmargindistance")
local strutbox = getbox("strutbox")
+ local _, strutht, strutdp = getwhd(strutbox)
-- better make a new table and make t entry in t
- t.box = copy_node_list(content)
+ t.box = content
t.n = nofsaved
-- used later (we will clean up this natural mess later)
-- nice is to make a special status table mechanism
- 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.strutheight = strutht
+ t.strutdepth = strutdp
+ -- beware: can be different from the applied one (we're not in forgetall)
+ t.leftskip = texget("leftskip",false)
+ t.rightskip = texget("rightskip",false)
--
t.leftmargindistance = leftmargindistance -- todo:layoutstatus table
t.rightmargindistance = rightmargindistance
@@ -387,19 +320,6 @@ end
-- When the prototype inner/outer code that was part of this proved to be
-- okay it was moved elsewhere.
--- 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
-
local function realign(current,candidate)
local location = candidate.location
local margin = candidate.margin
@@ -417,7 +337,7 @@ local function realign(current,candidate)
local atleft = true
local hmove = 0
local delta = 0
- local leftpage = isleftpage(false,true)
+ local leftpage = isleftpage()
local leftdelta = 0
local rightdelta = 0
local leftdistance = distance
@@ -451,6 +371,8 @@ local function realign(current,candidate)
if not leftpage then
atleft = false
end
+ else
+ -- v_left
end
local islocal = scope == v_local
@@ -502,20 +424,23 @@ end
-- table gets saved when the v_continue case is active. We use a special variant
-- of position tracking, after all we only need the page number and vertical position.
-local stacked = { } -- left/right keys depending on location
+local validstacknames = {
+ [v_left ] = v_left ,
+ [v_right] = v_right,
+ [v_inner] = v_inner,
+ [v_outer] = v_outer,
+}
+
local cache = { }
-local anchors = { }
-
-local function resetstacked(location)
- if location then
- local s = { }
- stacked[location] = s
- anchors[location] = false
- return s
- else
- stacked = { }
- anchors = { }
- return stacked
+local stacked = { [v_yes] = { }, [v_continue] = { } }
+local anchors = { [v_yes] = { }, [v_continue] = { } }
+
+local function resetstacked(all)
+ stacked[v_yes] = { }
+ anchors[v_yes] = { }
+ if all then
+ stacked[v_continue] = { }
+ anchors[v_continue] = { }
end
end
@@ -523,103 +448,65 @@ end
local function sa(tag) -- maybe l/r keys ipv left/right keys
local p = cache[tag]
- if trace_marginstack then
- report_margindata("updating anchor %a",tag)
+ if p then
+ if trace_marginstack then
+ report_margindata("updating anchor %a",tag)
+ end
+ p.p = true
+ p.y = true
+ setposition('md:v',tag,p)
+ cache[tag] = nil -- do this later, per page a cleanup
end
- p.p = true
- p.y = true
--- p.a = tag
- setposition('md:v',tag,p)
- cache[tag] = nil
end
local function setanchor(v_anchor) -- freezes the global here
return lateluafunction(function() sa(v_anchor) end)
end
+local function aa(tag,n) -- maybe l/r keys ipv left/right keys
+ local p = jobpositions.gettobesaved('md:v',tag)
+ if p then
+ if trace_marginstack then
+ report_margindata("updating injected %a",tag)
+ end
+ local pages = p.pages
+ if not pages then
+ pages = { }
+ p.pages = pages
+ end
+ pages[n] = texgetcount("realpageno")
+ elseif trace_marginstack then
+ report_margindata("not updating injected %a",tag)
+ end
+end
+
+local function addtoanchor(v_anchor,n) -- freezes the global here
+ return lateluafunction(function() aa(v_anchor,n) end)
+end
+
local function markovershoot(current) -- todo: alleen als offset > line
v_anchors = v_anchors + 1
cache[v_anchors] = fastcopy(stacked)
--- cache[v_anchors] = stacked -- so we adapt the previous too
local anchor = setanchor(v_anchors)
- -- 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))
+ -- local list = hpack_nodes(setlink(anchor,getlist(current))) -- not ok, we need to retain width
+ -- local list = setlink(anchor,getlist(current)) -- why not this ... better play safe
+ local list = hpack_nodes(setlink(anchor,getlist(current)),getwidth(current),"exactly")--
if trace_marginstack then
report_margindata("marking anchor %a",v_anchors)
end
setlist(current,list)
end
--- local function getovershoot(location)
--- local p = getposition("md:v",v_anchors)
--- local c = getposition("md:v",v_anchors+1)
--- if p and c and p.p and p.p == c.p then
--- local distance = p.y - c.y
--- local offset = p[location] or 0
--- local overshoot = offset - distance
--- if trace_marginstack then
--- report_margindata("location %a, anchor %a, distance %p, offset %p, overshoot %p",location,v_anchors,distance,offset,overshoot)
--- end
--- if overshoot > 0 then
--- return overshoot, offset, distance
--- else
--- return 0, offset, distance
--- end
--- elseif trace_marginstack then
--- report_margindata("location %a, anchor %a, nothing to correct",location,v_anchors)
--- end
--- return 0, 0, 0
--- end
-
-local function getovershoot(location)
- local c = getposition("md:v",v_anchors+1)
- if c then
- local p = false
- local cp = c.p
- for i=v_anchors,1,-1 do
- local pi = getposition("md:v",i)
- if pi.p == cp then
- p = pi
- else
- break
- end
- end
- if p then
- local distance = p.y - c.y
- local offset = p[location] or 0
- local overshoot = offset - distance
- if trace_marginstack then
- report_margindata("location %a, anchor %a, distance %p, offset %p, overshoot %p",location,v_anchors,distance,offset,overshoot)
- end
- if overshoot > 0 then
- return overshoot, offset, distance
- else
- return 0, offset, distance
- end
- end
- end
- if trace_marginstack then
- report_margindata("location %a, anchor %a, nothing to correct",location,v_anchors)
- end
- return 0, 0, 0
-end
-
-local function getanchor(location,anchor)
- return getposition("md:v",anchor)
-end
-
local function inject(parent,head,candidate)
local box = candidate.box
if not box then
return head, nil, false -- we can have empty texts
end
- local width = getfield(box,"width")
- local height = getfield(box,"height")
- local depth = getfield(box,"depth")
- local shift = getfield(box,"shift")
+ local width, height, depth
+ = getwhd(box)
+ local shift = getshift(box)
local stack = candidate.stack
+ local stackname = candidate.stackname
local location = candidate.location
local method = candidate.method
local voffset = candidate.voffset
@@ -629,8 +516,18 @@ local function inject(parent,head,candidate)
local strutdepth = candidate.strutdepth
local inline = candidate.inline
local psubtype = getsubtype(parent)
- local offset = stacked[location]
+ -- This stackname is experimental and therefore undocumented and basically
+ -- unsupported. It was introduced when we needed to support overlapping
+ -- of different anchors.
+ if not stackname or stackname == "" then
+ stackname = location
+ else
+ stackname = validstacknames[stackname] or location
+ end
+ local isstacked = stack == v_continue or stack == v_yes
+ local offset = isstacked and stacked[stack][stackname]
local firstonstack = offset == false or offset == nil
+ nofinjected = nofinjected + 1
nofdelayed = nofdelayed + 1
-- yet untested
baseline = tonumber(baseline)
@@ -647,63 +544,81 @@ local function inject(parent,head,candidate)
baseline = false -- strutheight -- actually a hack
end
end
- candidate.width = width
- candidate.hsize = getfield(parent,"width") -- we can also pass textwidth
- candidate.psubtype = psubtype
+ candidate.width = width
+ candidate.hsize = getwidth(parent) -- we can also pass textwidth
+ candidate.psubtype = psubtype
+ candidate.stackname = stackname
if trace_margindata then
report_margindata("processing, index %s, height %p, depth %p, parent %a, method %a",candidate.n,height,depth,listcodes[psubtype],method)
end
- -- The next section handles the inline notes that are checked for overlap which
- -- is somewhat tricky as that mechanism is mostly for paragraph boundnotes.
- local stackedinline = inline and (stack == v_yes or stack == v_continue)
- if stackedinline then
+ -- Overlap detection is somewhat complex because we have display and inline
+ -- notes mixed as well as inner and outer positioning. We do need to
+ -- handle it in the stream because we also keep lines together so we keep
+ -- track of page numbers of notes.
+
+ if isstacked then
firstonstack = true
- if anchors[location] then
- local a1 = getanchor(location,anchors[location])
- local a2 = getanchor(location,v_anchors+1)
- if a1 and a2 then
- local distance = a1.y - a2.y
- if distance > offset then
- -- report_margindata("location %s, no overlap, case 1",location)
- elseif offset > 0 then
- offset = offset - distance
- firstonstack = false
- -- report_margindata("location %s, overlap %a",location,offset)
- -- else
- -- report_margindata("location %s, no overlap, case 2",location)
+ local anchor = getposition("md:v")
+ if anchor and (location == v_inner or location == v_outer) then
+ local pages = anchor.pages
+ if pages then
+ local page = pages[nofinjected]
+ if page then
+ if isleftpage(page) then
+ stackname = location == v_inner and v_right or v_left
+ else
+ stackname = location == v_inner and v_left or v_right
+ end
+ candidate.stackname = stackname
+ offset = stack and stack ~= "" and stacked[stack][stackname]
end
- -- else
- -- report_margindata("location %s, no overlap, case 3",location)
end
- -- else
- -- report_margindata("location %s, no overlap, case 4",location)
end
- anchors[location] = v_anchors + 1
- end
- -- end of special section
- if firstonstack then
- offset = 0
- else
- -- offset = offset + height
- end
- if stack == v_yes then
+ local current = v_anchors + 1
+ local previous = anchors[stack][stackname]
+ if trace_margindata then
+ report_margindata("anchor %i, offset so far %p",current,offset or 0)
+ end
+ local ap = anchor and anchor[previous]
+ local ac = anchor and anchor[current]
+ if not previous then
+ elseif previous == current then
+ firstonstack = false
+ elseif ap and ac and ap.p == ac.p then
+ local distance = ap.y - ac.y
+ if trace_margindata then
+ report_margindata("distance %p",distance)
+ end
+ if offset > distance then
+ -- we already overflow
+ offset = offset - distance
+ firstonstack = false
+ else
+ offset = 0
+ end
+ else
+ -- what to do
+ end
+ anchors[v_yes] [stackname] = current
+ anchors[v_continue][stackname] = current
+ if firstonstack then
+ offset = 0
+ end
offset = offset + candidate.dy -- always
shift = shift + offset
- elseif stack == v_continue then
- offset = offset + candidate.dy -- always
+ else
if firstonstack then
- offset = offset + getovershoot(location)
+ offset = 0
end
- shift = shift + offset
+ offset = offset + candidate.dy -- always
+ shift = shift + offset
end
- -- -- --
-- Maybe we also need to patch offset when we apply methods, but how ...
-- This needs a bit of playing as it depends on the stack setting of the
-- following which we don't know yet ... so, consider stacking partially
-- experimental.
- -- -- --
if method == v_top then
- local delta = height - getfield(parent,"height")
+ local delta = height - getheight(parent)
if trace_margindata then
report_margindata("top aligned by %p",delta)
end
@@ -711,8 +626,9 @@ local function inject(parent,head,candidate)
shift = shift + voffset + delta
end
elseif method == v_line then
- if getfield(parent,"depth") == 0 then
- local delta = height - getfield(parent,"height")
+ local _, ph, pd = getwhd(parent)
+ if pd == 0 then
+ local delta = height - ph
if trace_margindata then
report_margindata("top aligned by %p (no depth)",delta)
end
@@ -756,14 +672,20 @@ local function inject(parent,head,candidate)
shift = shift + delta
offset = offset + delta
end
- setfield(box,"shift",shift)
- setfield(box,"width",0)
+ setshift(box,shift)
+ setwidth(box,0) -- not needed when wrapped
+ --
+ if isstacked then
+ setlink(box,addtoanchor(v_anchor,nofinjected))
+ box = new_hlist(box)
+ -- set height / depth ?
+ end
--
candidate.hook, candidate.node = addtoline(parent,box)
--
setprop(box,"margindata",candidate)
if trace_margindata then
- report_margindata("injected, location %a, shift %p",location,shift)
+ report_margindata("injected, location %a, stack %a, shift %p",location,stackname,shift)
end
-- we need to add line etc to offset as well
offset = offset + depth
@@ -772,16 +694,17 @@ local function inject(parent,head,candidate)
depth = offset,
slack = candidate.bottomspace, -- todo: 'depth' => strutdepth
lineheight = candidate.lineheight, -- only for tracing
- stacked = stackedinline,
+ stacked = inline and isstacked,
}
offset = offset + height
-- we need a restart ... when there is no overlap at all
- stacked[location] = offset
+ stacked[v_yes] [stackname] = offset
+ stacked[v_continue][stackname] = offset
-- todo: if no real depth then zero
if trace_margindata then
report_margindata("status, offset %s",offset)
end
- return getlist(parent), room, stackedinline or (stack == v_continue)
+ return getlist(parent), room, inline and isstacked or (stack == v_continue)
end
local function flushinline(parent,head)
@@ -863,7 +786,7 @@ local function flushed(scope,parent) -- current is hlist
if done then
local a = getattr(head,a_linenumber) -- hack .. we need a more decent critical attribute inheritance mechanism
if false then
- local l = hpack_nodes(head,getfield(parent,"width"),"exactly")
+ local l = hpack_nodes(head,getwidth(parent),"exactly")
setlist(parent,l)
if a then
setattr(l,a_linenumber,a)
@@ -875,7 +798,6 @@ local function flushed(scope,parent) -- current is hlist
setattr(parent,a_linenumber,a)
end
end
- -- resetstacked()
end
return done, continue
end
@@ -915,9 +837,7 @@ local function handler(scope,head,group)
report_margindata("flushing stage one, nothing done, %s left",nofstored)
end
end
- -- if done then
- resetstacked() -- why doesn't done work ok here?
- -- end
+resetstacked()
return tonode(head), done
else
return head, false
@@ -926,6 +846,9 @@ end
local trialtypesetting = context.trialtypesetting
+-- maybe change this to an action applied to the to be shipped out box (that is
+-- the mvl list in there so that we don't need to traverse global
+
function margins.localhandler(head,group) -- sometimes group is "" which is weird
if trialtypesetting() then
@@ -986,7 +909,6 @@ local function finalhandler(head)
local id = getid(current)
if id == hlist_code then -- only lines?
local a = getprop(current,"margindata")
--- if not a or a == 0 then
if not a then
finalhandler(getlist(current))
elseif realigned(current,a) then
@@ -1013,9 +935,12 @@ function margins.finalhandler(head)
end
head = tonut(head)
local head, done = finalhandler(head)
+-- resetstacked(true)
+resetstacked(nofdelayed==0)
head = tonode(head)
return head, done
else
+ resetstacked()
return head, false
end
end
@@ -1023,14 +948,6 @@ end
-- Somehow the vbox builder (in combinations) gets pretty confused and decides to
-- go horizontal. So this needs more testing.
-prependaction("finalizers", "lists", "typesetters.margins.localhandler")
-prependaction("mvlbuilders", "normalizers", "typesetters.margins.globalhandler")
-prependaction("shipouts", "normalizers", "typesetters.margins.finalhandler")
-
-disableaction("finalizers", "typesetters.margins.localhandler")
-disableaction("mvlbuilders", "typesetters.margins.globalhandler")
-disableaction("shipouts", "typesetters.margins.finalhandler")
-
enablelocal = function()
enableaction("finalizers", "typesetters.margins.localhandler")
enableaction("shipouts", "typesetters.margins.finalhandler")
@@ -1077,6 +994,7 @@ interfaces.implement {
{ "align" },
{ "option" },
{ "line", "integer" },
+ { "stackname" },
{ "stack" },
}
}
diff --git a/tex/context/base/mkiv/typo-mar.mkiv b/tex/context/base/mkiv/typo-mar.mkiv
index 90ccd46e2..462cc633e 100644
--- a/tex/context/base/mkiv/typo-mar.mkiv
+++ b/tex/context/base/mkiv/typo-mar.mkiv
@@ -122,6 +122,7 @@
\c!scope=\v!global,
\c!width=,
% \c!stack=,
+ % \c!stackname=,
% \c!option=, % \v!paragraph (follow shape)
\c!line=0,
\c!anchor=\v!text,
@@ -131,8 +132,8 @@
\c!hoffset=\zeropoint,
\c!voffset=\zeropoint]
-\setupmarginframed % so, align should be set with the data command
- [\c!strut=\v!yes,
+\setupmarginframed % so, align should be set with the data command
+ [\c!strut=\v!yes, % so by default we scale the strut to the font !
\c!offset=\v!overlay,
\c!fr!analyze=\v!yes,
\c!frame=\v!off,
@@ -195,6 +196,8 @@
% todo: naturalhbox
+% when name is set we overload
+
\let\margindatahbox\naturalhbox % \hbox
\unexpanded\def\typo_margins_data_yes_indeed[#dataparameters][#textparameters]#content%
@@ -301,6 +304,7 @@
% \fi
align {\margindataparameter\c!align}%
line \numexpr\margindataparameter\c!line\relax
+ stackname {\margindataparameter\c!stackname}%
stack {\margindataparameter\c!stack}%
\relax
\else
@@ -435,4 +439,46 @@
% \let\dostophanchoring \dostopanchoring
% \let\dostopvanchoring \dostopanchoring
+%D Here because in strc-ren we are too early:
+
+% % \definemargindata
+% % [margintext:chapter]
+% % [margintext:section]
+% %
+% % \defineheadalternative
+% % [margintext:chapter]
+% % [margintext]
+% % [margintext=margintext:chapter]
+% %
+% % \setuphead
+% % [chapter]
+% % [alternative=margintext:chapter]
+%
+% \setuphead
+% [chapter]
+% [alternative=margintext]
+
+\definemargindata
+ [\v!margintext:\v!section]
+ [\v!left]
+ [\c!margin=\v!margin,
+ \c!width=\leftmarginwidth,
+ \c!align=\v!flushright]
+
+\defineheadalternative
+ [\v!margintext]
+ [\c!alternative=\v!somewhere,
+ \c!margintext=\v!margintext:\v!section,
+ \c!renderingsetup=\??headrenderings:\v!margintext]
+
+\startsetups[\??headrenderings:\v!margintext]
+ \executeifdefined{\headalternativeparameter\c!margintext}\margintext {
+ \ifconditional\headshownumber
+ \headnumbercontent
+ \hskip\headnumberdistance
+ \fi
+ \headtextcontent
+ }
+\stopsetups
+
\protect \endinput
diff --git a/tex/context/base/mkiv/typo-pag.lua b/tex/context/base/mkiv/typo-pag.lua
index 355becff6..d6f71c8cc 100644
--- a/tex/context/base/mkiv/typo-pag.lua
+++ b/tex/context/base/mkiv/typo-pag.lua
@@ -34,7 +34,13 @@ local getnext = nuts.getnext
local getprev = nuts.getprev
local getid = nuts.getid
local getattr = nuts.getattr
+local takeattr = nuts.takeattr
local setattr = nuts.setattr
+local getwhd = nuts.getwhd
+local getkern = nuts.getkern
+local setpenalty = nuts.setpenalty
+local getwidth = nuts.getwidth
+local getdepth = nuts.getdepth
local insert_node_after = nuts.insert_after
local new_penalty = nuts.pool.penalty
@@ -42,6 +48,8 @@ local new_penalty = nuts.pool.penalty
local trace_keeptogether = false
local report_keeptogether = logs.reporter("parbuilders","keeptogether")
+local enableaction = nodes.tasks.enableaction
+
local cache = { }
local last = 0
local enabled = false
@@ -56,7 +64,7 @@ function parbuilders.registertogether(line,specification) -- might change
return
end
if not enabled then
- nodes.tasks.enableaction("finalizers","builders.paragraphs.keeptogether")
+ enableaction("finalizers","builders.paragraphs.keeptogether")
end
local a = getattr(line,a_keeptogether)
local c = a and cache[a]
@@ -109,7 +117,7 @@ local function keeptogether(start,a)
if a then
local current = getnext(start)
local previous = start
- local total = getfield(previous,"depth")
+ local total = getdepth(previous)
local slack = specification.slack
local threshold = specification.depth - slack
if trace_keeptogether then
@@ -118,13 +126,14 @@ local function keeptogether(start,a)
while current do
local id = getid(current)
if id == vlist_code or id == hlist_code then
- total = total + getfield(current,"height") + getfield(current,"depth")
+ local wd, ht, dp = getwhd(current)
+ total = total + ht + dp
if trace_keeptogether then
report_keeptogether("%s, index %s, total %p, threshold %p","list",a,total,threshold)
end
if total <= threshold then
if getid(previous) == penalty_code then
- setfield(previous,"penalty",10000)
+ setpenalty(previous,10000)
else
insert_node_after(head,previous,new_penalty(10000))
end
@@ -133,13 +142,13 @@ local function keeptogether(start,a)
end
elseif id == glue_code then
-- hm, breakpoint, maybe turn this into kern
- total = total + getfield(current,"width")
+ total = total + getwidth(current)
if trace_keeptogether then
report_keeptogether("%s, index %s, total %p, threshold %p","glue",a,total,threshold)
end
if total <= threshold then
if getid(previous) == penalty_code then
- setfield(previous,"penalty",10000)
+ setpenalty(previous,10000)
else
insert_node_after(head,previous,new_penalty(10000))
end
@@ -147,13 +156,13 @@ local function keeptogether(start,a)
break
end
elseif id == kern_code then
- total = total + getfield(current,"kern")
+ total = total + getkern(current)
if trace_keeptogether then
report_keeptogether("%s, index %s, total %s, threshold %s","kern",a,total,threshold)
end
if total <= threshold then
if getid(previous) == penalty_code then
- setfield(previous,"penalty",10000)
+ setpenalty(previous,10000)
else
insert_node_after(head,previous,new_penalty(10000))
end
@@ -163,9 +172,9 @@ local function keeptogether(start,a)
elseif id == penalty_code then
if total <= threshold then
if getid(previous) == penalty_code then
- setfield(previous,"penalty",10000)
+ setpenalty(previous,10000)
end
- setfield(current,"penalty",10000)
+ setpenalty(current,10000)
else
break
end
@@ -184,10 +193,9 @@ function parbuilders.keeptogether(head)
local current = tonut(head)
while current do
if getid(current) == hlist_code then
- local a = getattr(current,a_keeptogether)
+ local a = takeattr(current,a_keeptogether)
if a and a > 0 then
keeptogether(current,a)
- setattr(current,a_keeptogether,unsetvalue)
cache[a] = nil
done = true
end
diff --git a/tex/context/base/mkiv/typo-rep.lua b/tex/context/base/mkiv/typo-rep.lua
index a8925a2ce..5266aa103 100644
--- a/tex/context/base/mkiv/typo-rep.lua
+++ b/tex/context/base/mkiv/typo-rep.lua
@@ -18,7 +18,7 @@ local trace_stripping = false trackers.register("nodes.stripping", function(v)
local report_stripping = logs.reporter("fonts","stripping")
local nodes = nodes
-local tasks = nodes.tasks
+local enableaction = nodes.tasks.enableaction
local nuts = nodes.nuts
local tonut = nuts.tonut
@@ -35,11 +35,9 @@ local replace_node = nuts.replace
local copy_node = nuts.copy
local nodecodes = nodes.nodecodes
-local glyph_code = nodecodes.glyph
local chardata = characters.data
local collected = false
-local fontdata = fonts.hashes.identifiers
local a_stripping = attributes.private("stripping")
local texsetattribute = tex.setattribute
@@ -121,7 +119,7 @@ function stripping.set(n) -- number or 'reset'
if n then
if not enabled then
if initialize then initialize() end
- tasks.enableaction("processors","nodes.handlers.stripping")
+ enableaction("processors","nodes.handlers.stripping")
enabled = true
end
else
@@ -131,11 +129,6 @@ function stripping.set(n) -- number or 'reset'
texsetattribute(a_stripping,n)
end
--- why not in task-ini?
-
-tasks.appendaction("processors","fonts","nodes.handlers.stripping",nil,"nodes.handlers.characters")
-tasks.disableaction("processors","nodes.handlers.stripping")
-
-- interface
interfaces.implement {
diff --git a/tex/context/base/mkiv/typo-rub.lua b/tex/context/base/mkiv/typo-rub.lua
new file mode 100644
index 000000000..9621a6218
--- /dev/null
+++ b/tex/context/base/mkiv/typo-rub.lua
@@ -0,0 +1,419 @@
+if not modules then modules = { } end modules ['typo-rub'] = {
+ version = 1.001,
+ comment = "companion to typo-rub.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- todo: recycle slots better
+-- todo: hoffset
+-- todo: auto-increase line height
+-- todo: only hpack when start <> stop
+
+-- A typical bit of afternoon hackery ... with some breaks for watching
+-- Ghost-Note on youtube (Robert Searight and Nate Werth) ... which expands
+-- my to-be-had cd/dvd list again.
+
+local lpegmatch = lpeg.match
+local utfcharacters = utf.characters
+local setmetatableindex = table.setmetatableindex
+
+local variables = interfaces.variables
+local implement = interfaces.implement
+
+local texsetattribute = tex.setattribute
+
+local v_flushleft = variables.flushleft
+local v_middle = variables.middle
+local v_flushright = variables.flushright
+local v_yes = variables.yes
+local v_no = variables.no
+local v_auto = variables.auto
+
+local nuts = nodes.nuts
+
+local tonut = nodes.tonut
+local tonode = nodes.tonode
+local getid = nuts.getid
+local getsubtype = nuts.getsubtype
+local getattr = nuts.getattr
+local setattr = nuts.setattr
+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 setlink = nuts.setlink
+local getlist = nuts.getlist
+local setlist = nuts.setlist
+local setshift = nuts.setshift
+local getwidth = nuts.getwidth
+local setwidth = nuts.setwidth
+
+local hpack = nuts.hpack
+local insert_after = nuts.insert_after
+local takebox = nuts.takebox
+local traverse_id = nuts.traverse_id
+
+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 penalty_code = nodecodes.penalty
+local hlist_code = nodecodes.hlist
+local vlist_code = nodecodes.vlist
+local whatsit_code = nodecodes.whatsit
+local localpar_code = nodecodes.localpar
+
+local whatsitcodes = nodes.whatsitcodes
+----- late_luacode = whatsitcodes.latelua
+
+local kerncodes = nodes.kerncodes
+local font_code = kerncodes.font
+
+local nodepool = nuts.pool
+local new_kern = nodepool.kern
+
+local setprop = nuts.setprop
+local getprop = nuts.getprop
+
+local enableaction = nodes.tasks.enableaction
+
+local nofrubies = 0
+local rubylist = { }
+
+local a_ruby = attributes.private("ruby")
+
+local rubies = { }
+typesetters.rubies = rubies
+
+local trace_rubies = false trackers.register("typesetters.rubies",function(v) trace_rubies = v end)
+local report_rubies = logs.reporter("rubies")
+
+do
+
+ local shared = nil
+ local splitter = lpeg.tsplitat("|")
+
+ local function enable()
+ enableaction("processors","typesetters.rubies.check")
+ enableaction("shipouts", "typesetters.rubies.attach")
+ enable = false
+ end
+
+ local ctx_setruby = context.core.setruby
+
+ local function ruby(settings)
+ local base = settings.base
+ local comment = settings.comment
+ shared = settings
+ local c = lpegmatch(splitter,comment)
+ if #c == 1 then
+ ctx_setruby(base,comment)
+ if trace_rubies then
+ report_rubies("- %s -> %s",base,comment)
+ end
+ else
+ local i = 0
+ for b in utfcharacters(base) do
+ i = i + 1
+ local r = c[i]
+ if r then
+ ctx_setruby(b,r)
+ if trace_rubies then
+ report_rubies("%i: %s -> %s",i,b,r)
+ end
+ else
+ ctx_setruby(b,"")
+ if trace_rubies then
+ report_rubies("%i: %s",i,b)
+ end
+ end
+ end
+ end
+ if enable then
+ enable()
+ end
+ end
+
+ local function startruby(settings)
+ shared = settings
+ if enable then
+ enable()
+ end
+ end
+
+ implement {
+ name = "ruby",
+ actions = ruby,
+ arguments = {
+ {
+ { "align" },
+ { "stretch" },
+ { "hoffset", "dimension" },
+ { "voffset", "dimension" },
+ { "comment" },
+ { "base" },
+ }
+ },
+ }
+
+ implement {
+ name = "startruby",
+ actions = startruby,
+ arguments = {
+ {
+ { "align" },
+ { "stretch" },
+ { "hoffset", "dimension" },
+ { "voffset", "dimension" },
+ }
+ },
+ }
+
+ local function setruby(n,m)
+ nofrubies = nofrubies + 1
+ local r = takebox(n)
+ rubylist[nofrubies] = setmetatableindex({
+ text = r,
+ width = getwidth(r),
+ basewidth = 0,
+ start = false,
+ stop = false,
+ }, shared)
+ texsetattribute(a_ruby,nofrubies)
+ end
+
+ implement {
+ name = "setruby",
+ actions = setruby,
+ arguments = "integer",
+ }
+
+end
+
+function rubies.check(head)
+ local head = tonut(head)
+ local current = head
+ local start = nil
+ local stop = nil
+ local found = nil
+
+ local function flush(where)
+ local r = rubylist[found]
+ if r then
+ local prev = getprev(start)
+ local next = getnext(stop)
+ setprev(start)
+ setnext(stop)
+ local h = hpack(start)
+ if prev == head then
+ head = h
+ else
+ setlink(prev,h)
+ end
+ setlink(h,next)
+ local bwidth = getwidth(h)
+ local rwidth = r.width
+ r.basewidth = bwidth
+ r.start = start
+ r.stop = stop
+ setprop(h,"ruby",found)
+ if rwidth > bwidth then
+ -- ruby is wider
+ setwidth(h,rwidth)
+ end
+ end
+ end
+
+ while current do
+ local nx = getnext(current)
+ local id = getid(current)
+ if id == glyph_code then
+ local a = getattr(current,a_ruby)
+ if not a then
+ if found then
+ flush("flush 1")
+ found = nil
+ end
+ elseif a == found then
+ stop = current
+ else
+ if found then
+ flush("flush 2")
+ end
+ found = a
+ start = current
+ stop = current
+ end
+ elseif id == kern_code and getsubtype(current,font_code) then
+ -- go on
+ elseif found and id == disc_code then
+ -- go on (todo: look into disc)
+ elseif found then
+ flush("flush 4")
+ found = nil
+ end
+ current = nx
+ end
+ if found then
+ flush("flush 5")
+ end
+ return tonode(head), true
+end
+
+local attach
+
+local function whatever(current)
+ local a = getprop(current,"ruby")
+ if a then
+ local ruby = rubylist[a]
+ local align = ruby.align or v_middle
+ local stretch = ruby.stretch or v_no
+ local hoffset = ruby.hoffset or 0
+ local voffset = ruby.voffset or 0
+ local start = ruby.start
+ local stop = ruby.stop
+ local text = ruby.text
+ local rwidth = ruby.width
+ local bwidth = ruby.basewidth
+ local delta = rwidth - bwidth
+ setwidth(text,0)
+ if voffset ~= 0 then
+ setshift(text,voffset)
+ end
+ -- center them
+ if delta > 0 then
+ -- ruby is wider
+ if stretch == v_yes then
+ setlink(text,start)
+ while start and start ~= stop do
+ local s = nodepool.stretch()
+ local n = getnext(start)
+ setlink(start,s,n)
+ start = n
+ end
+ text = hpack(text,rwidth,"exactly")
+ else
+ local left = new_kern(delta/2)
+ local right = new_kern(delta/2)
+-- setlink(left,start)
+-- setlink(stop,right)
+-- setlink(text,left)
+ setlink(text,left,start)
+ setlink(stop,right)
+ end
+ setlist(current,text)
+ elseif delta < 0 then
+ -- ruby is narrower
+ if align == v_auto then
+ local l = true
+ local c = getprev(current)
+ while c do
+ local id = getid(c)
+ if id == glue_code or id == penalty_code or id == kern_code or (id == whatsit_code and getsubtype(current,localpar_code)) then
+ -- go on
+ elseif id == hlist_code and getwidth(c) == 0 then
+ -- go on
+ elseif id == whatsit_code or id == localpar_code then
+ -- go on
+ else
+ l = false
+ break
+ end
+ c = getprev(c)
+ end
+ local r = true
+ local c = getnext(current)
+ while c do
+ local id = getid(c)
+ if id == glue_code or id == penalty_code or id == kern_code then
+ -- go on
+ elseif id == hlist_code and getwidth(c) == 0 then
+ -- go on
+ else
+ r = false
+ break
+ end
+ c = getnext(c)
+ end
+ if l and not r then
+ align = v_flushleft
+ elseif r and not l then
+ align = v_flushright
+ else
+ align = v_middle
+ end
+ end
+ if align == v_flushleft then
+ setlink(text,start)
+ setlist(current,text)
+ elseif align == v_flushright then
+ local left = new_kern(-delta)
+ local right = new_kern(delta)
+-- setlink(left,text)
+-- setlink(text,right)
+-- setlink(right,start)
+ setlink(left,text,right,start)
+ setlist(current,left)
+ else
+ local left = new_kern(-delta/2)
+ local right = new_kern(delta/2)
+-- setlink(left,text)
+-- setlink(text,right)
+-- setlink(right,start)
+ setlink(left,text,right,start)
+ setlist(current,left)
+ end
+ else
+ setlink(text,start)
+ setlist(current,text)
+ end
+ setprop(current,"ruby",false)
+ rubylist[a] = nil
+ else
+ local list = getlist(current)
+ if list then
+ attach(list)
+ end
+ end
+end
+
+attach = function(head)
+ for current in traverse_id(hlist_code,head) do
+ whatever(current)
+ end
+ for current in traverse_id(vlist_code,head) do
+ whatever(current)
+ end
+ return head, true
+end
+
+function rubies.attach(head)
+ local h, d = attach(tonut(head))
+ return tonode(h), d
+end
+
+-- for now there is no need to be compact
+
+-- local data = { }
+-- rubies.data = data
+--
+-- function rubies.define(settings)
+-- data[#data+1] = settings
+-- return #data
+-- end
+--
+-- implement {
+-- name = "defineruby",
+-- actions = { rubies.define, context },
+-- arguments = {
+-- {
+-- { "align" },
+-- { "stretch" },
+-- }
+-- }
+-- }
diff --git a/tex/context/base/mkiv/typo-rub.mkiv b/tex/context/base/mkiv/typo-rub.mkiv
new file mode 100644
index 000000000..7b996089b
--- /dev/null
+++ b/tex/context/base/mkiv/typo-rub.mkiv
@@ -0,0 +1,170 @@
+%D \module
+%D [ file=typo-rub,
+%D version=2016.10.10,
+%D title=\CONTEXT\ Typesetting Macros,
+%D subtitle=Rubies,
+%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 Experimental and unfinished.
+
+% todo: distance
+
+\writestatus{loading}{ConTeXt Typesetting Macros / Rubies}
+
+\unprotect
+
+\registerctxluafile{typo-rub}{1.001}
+
+\definesystemattribute[ruby][public]
+
+\installcorenamespace {ruby}
+\installcorenamespace {rubyanalyze}
+\installcorenamespace {rubyplacement}
+
+\installcommandhandler \??ruby {ruby} \??ruby
+
+% \appendtoks
+% \clf_defineruby
+% align {\rubyparameter\c!align}
+% stretch {\rubyparameter\c!stretch}
+% hoffset \rubyparameter\c!hoffset
+% voffset \rubyparameter\c!voffset
+% \relax
+% \to \everydefineruby
+
+\unexpanded\def\ruby
+ {\dosingleempty\typo_ruby_yes}
+
+\unexpanded\def\typo_ruby_yes[#1]#2#3%
+ {\dontleavehmode
+ \begingroup
+ \let\typo_ruby_yes\typo_ruby_nop % no nesting
+ \edef\currentruby{#1}%
+ \edef\p_location{\rubyparameter\c!location}%
+ \let|\relax
+ \ifcsname\??rubyanalyze\p_location\endcsname
+ \expandafter\lastnamedcs\else\expandafter\typo_ruby_analyze
+ \fi{#2}{#3}%
+ \endgroup}
+
+\unexpanded\def\typo_ruby_nop[#1]#2#3%
+ {#2}
+
+\def\typo_ruby_analyze#1#2%
+ {\clf_ruby
+ base {#1}%
+ comment {#2}
+ \relax}
+
+\setvalue{\??rubyanalyze\v!top}#1#2%
+ {\clf_ruby
+ align {\rubyparameter\c!align}%
+ stretch {\rubyparameter\c!stretch}%
+ hoffset \rubyparameter\c!hoffset
+ voffset \rubyparameter\c!voffset
+ base {#1}%
+ comment {#2}
+ \relax}
+
+\setvalue{\??rubyplacement\v!top}#1#2%
+ {\setbox\scratchbox\hbox\bgroup
+ \userubystyleandcolor\c!style\c!color
+ #2%
+ \egroup
+ \clf_setruby \scratchbox
+ \relax
+ #1}
+
+\setvalue{\??rubyplacement\v!right}#1#2%
+ {#1%
+ \edef\p_distance{\rubyparameter\c!distance}%
+ \ifx\p_distance\empty\else\ifx\p_distance\v!none\else\hskip\p_distance\fi\fi
+ \begingroup
+ \userubystyleandcolor\c!style\c!color
+ \rubyparameter\c!left#2\rubyparameter\c!right
+ \endgroup}
+
+\setvalue{\??rubyplacement\v!left}#1#2%
+ {\begingroup
+ \userubystyleandcolor\c!style\c!color
+ \rubyparameter\c!left#2\rubyparameter\c!right
+ \endgroup
+ \edef\p_distance{\rubyparameter\c!distance}%
+ \ifx\p_distance\empty\else\ifx\p_distance\v!none\else\hskip\p_distance\fi\fi
+ #1}
+
+\unexpanded\def\setruby#1#2%
+ {\begingroup
+ \ifcsname\??rubyplacement\p_location\endcsname
+ \lastnamedcs{#1}{#2}%
+ \else
+ #1%
+ \fi
+ \endgroup}
+
+\unexpanded\def\startruby
+ {\dosingleempty\typo_ruby_start_yes}
+
+\unexpanded\def\typo_ruby_start_yes[#1]%
+ {\dontleavehmode
+ \begingroup
+ \let\typo_ruby_start_yes\begingroup
+ \edef\currentruby{#1}%
+ \clf_startruby
+ align {\rubyparameter\c!align}%
+ stretch {\rubyparameter\c!stretch}%
+ hoffset \rubyparameter\c!hoffset
+ voffset \rubyparameter\c!voffset
+ \relax}
+
+\unexpanded\def\stopruby
+ {\endgroup}
+
+\setupruby
+ [\c!style=\txx,
+ \c!location=\v!top,
+ \c!left=(,
+ \c!right=),
+ \c!distance=\zeropoint, % \v!none means no skip at all so no break either
+ \c!hoffset=\zeropoint,
+ \c!voffset=-2\exheight]
+
+\protect \endinput
+
+% \usemodule[art-01]\setupbodyfont[dejavu,12pt]
+%
+% \defineruby[auto] [align=auto,color=darkred]
+% \defineruby[left] [align=flushleft,color=darkred]
+% \defineruby[right] [align=flushright,color=darkred]
+% \defineruby[spread][stretch=yes]
+%
+% \showframe \showglyphs \showfontkerns \setupinterlinespace[22pt]
+%
+% \starttext
+%
+% \startbuffer
+% \dorecurse{20}{\ruby{XYZ}{a|bc|d} }\par
+% \dorecurse{20}{\ruby{PQR}{p|q|r} }\par
+% \dorecurse{20}{\ruby{XYZ}{1|22|333} }\par
+% \dorecurse{20}{\ruby{XYZ}{111|222|333} }\par
+% \dorecurse{20}{\ruby{XYZ}{foobar} }\par
+% \dorecurse{20}{\ruby{XYZ}{fooledbar} }\par
+% \dorecurse{20}{\ruby[spread]{XYZ}{fooledbar} }\par
+% \dorecurse{20}{\ruby{extremely}{wide} }\par
+% \dorecurse{20}{\ruby{wide}{extremely} }\par
+% stopbuffer
+%
+% \testfeatureonce{1}{\start \setupinterlinespace[16pt] \setupruby[location=none] \getbuffer \stop \page}
+% \testfeatureonce{1}{\start \setupinterlinespace[16pt] \setupruby[location=right] \getbuffer \stop \page}
+% \testfeatureonce{1}{\start \setupinterlinespace[28pt] \setupruby[align=auto,color=darkred] \getbuffer \stop \page}
+% \testfeatureonce{1}{\start \setupinterlinespace[28pt] \setupruby[align=flushleft,color=darkgreen] \getbuffer \stop \page}
+% \testfeatureonce{1}{\start \setupinterlinespace[28pt] \setupruby[align=flushright,color=darkblue] \getbuffer \stop \page}
+% \testfeatureonce{1}{\start \setupinterlinespace[28pt] \setupruby[align=middle,color=darkyellow] \getbuffer \stop \page}
+%
+% \stoptext
diff --git a/tex/context/base/mkiv/typo-scr.mkiv b/tex/context/base/mkiv/typo-scr.mkiv
index 6249c390a..7b8d62dfb 100644
--- a/tex/context/base/mkiv/typo-scr.mkiv
+++ b/tex/context/base/mkiv/typo-scr.mkiv
@@ -53,7 +53,7 @@
\begingroup
\edef\currentlow{#1}%
\kern\lowparameter\c!distance\relax
- \setbox\scratchbox\hbox\bgroup
+ \setbox\scratchbox\runninghbox\bgroup
\lower\lowparameter\c!down\hbox\bgroup
\ifx\fontsize\empty
\ifmmode
@@ -79,7 +79,7 @@
\begingroup
\edef\currenthigh{#1}%
\kern\highparameter\c!distance\relax
- \setbox\scratchbox\hbox\bgroup
+ \setbox\scratchbox\runninghbox\bgroup
\raise\highparameter\c!up\hbox\bgroup
\ifx\fontsize\empty
\ifmmode
@@ -136,7 +136,7 @@
\unexpanded\def\typo_scripts_lowhigh#1% #2
{\dontleavehmode
- \hbox\bgroup
+ \runninghbox\bgroup
\edef\currentlowhigh{#1}%
\dosingleempty} % #2
@@ -228,7 +228,8 @@
\to \everydefinelowmidhigh
\unexpanded\def\typo_scripts_lowmidhigh#1#2#3#4%
- {\dontleavehmode \hbox \bgroup
+ {\dontleavehmode
+ \runninghbox\bgroup
\edef\currentlowmidhigh{#1}%
\dostarttagged\t!subsup\currentlowmidhigh
\uselowmidhighstyleandcolor\c!style\c!color
diff --git a/tex/context/base/mkiv/typo-spa.lua b/tex/context/base/mkiv/typo-spa.lua
index f00e3ae6b..bda139719 100644
--- a/tex/context/base/mkiv/typo-spa.lua
+++ b/tex/context/base/mkiv/typo-spa.lua
@@ -7,7 +7,6 @@ if not modules then modules = { } end modules ['typo-spa'] = {
}
local next, type = next, type
-local utfchar = utf.char
local trace_spacing = false trackers.register("typesetters.spacing", function(v) trace_spacing = v end)
@@ -15,10 +14,7 @@ local report_spacing = logs.reporter("typesetting","spacing")
local nodes, fonts, node = nodes, fonts, node
-local tasks = nodes.tasks
-
local fonthashes = fonts.hashes
-local fontdata = fonthashes.identifiers
local quaddata = fonthashes.quads
local texsetattribute = tex.setattribute
@@ -33,8 +29,7 @@ local tonode = nuts.tonode
local getnext = nuts.getnext
local getprev = nuts.getprev
local getfont = nuts.getfont
-local getattr = nuts.getattr
-local setattr = nuts.setattr
+local takeattr = nuts.takeattr
local isglyph = nuts.isglyph
local insert_node_before = nuts.insert_before
@@ -47,12 +42,13 @@ local new_penalty = nodepool.penalty
local new_glue = nodepool.glue
local nodecodes = nodes.nodecodes
-local glyph_code = nodecodes.glyph
local math_code = nodecodes.math
local somespace = nodes.somespace
local somepenalty = nodes.somepenalty
+local enableaction = nodes.tasks.enableaction
+
typesetters = typesetters or { }
local typesetters = typesetters
@@ -85,12 +81,11 @@ function spacings.handler(head)
while start do
local char, id = isglyph(start)
if char then
- local attr = getattr(start,a_spacings)
+ local attr = takeattr(start,a_spacings)
if attr and attr > 0 then
local data = mapping[attr]
if data then
local map = data.characters[char]
- setattr(start,a_spacings,unsetvalue) -- needed?
if map then
local left = map.left
local right = map.right
@@ -213,7 +208,7 @@ function spacings.set(name)
local data = numbers[name]
if data then
if not enabled then
- tasks.enableaction("processors","typesetters.spacings.handler")
+ enableaction("processors","typesetters.spacings.handler")
enabled = true
end
n = data.number or unsetvalue
diff --git a/tex/context/base/mkiv/typo-sus.lua b/tex/context/base/mkiv/typo-sus.lua
index ce1933330..f728993f6 100644
--- a/tex/context/base/mkiv/typo-sus.lua
+++ b/tex/context/base/mkiv/typo-sus.lua
@@ -48,9 +48,12 @@ local getfield = nuts.getfield
local getattr = nuts.getattr
local getfont = nuts.getfont
local getlist = nuts.getlist
+local getkern = nuts.getkern
+local getpenalty = nuts.getpenalty
+local getwidth = nuts.getwidth
+local getwhd = nuts.getwhd
local isglyph = nuts.isglyph
-local setfield = nuts.setfield
local setattr = nuts.setattr
local setlist = nuts.setlist
@@ -72,22 +75,21 @@ local a_suspect = attributes.private('suspect')
local texsetattribute = tex.setattribute
local enabled = false
+local enableaction = nodes.tasks.enableaction
+
local threshold = 65536 / 4
local function special(n)
if n then
local id = getid(n)
if id == kern_code then
- local kern = getfield(n,"kern")
- return kern < threshold
+ return getkern(n) < threshold
elseif id == penalty_code then
return true
elseif id == glue_code then
- local width = getfield(n,"width")
- return width < threshold
+ return getwidth(n) < threshold
elseif id == hlist_code then
- local width = getfield(n,"width")
- return width < threshold
+ return getwidth(n) < threshold
end
else
return false
@@ -118,23 +120,23 @@ 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(current,"width")
+ local width = getwidth(current)
local rule = new_rule(width)
local kern = new_kern(-width)
head = insert_before(head,current,rule)
head = insert_before(head,current,kern)
setcolor(rule,color)
-- elseif id == kern_code then
- -- local width = getfield(current,"kern")
+ -- local width = getkern(current)
-- local rule = new_rule(width)
-- local kern = new_kern(-width)
-- head = insert_before(head,current,rule)
-- head = insert_before(head,current,kern)
-- setcolor(rule,color)
else
- local width = getfield(current,"width")
+ local width, height, depth = getwhd(current)
local extra = fonts.hashes.xheights[getfont(current)] / 2
- local rule = new_rule(width,getfield(current,"height")+extra,getfield(current,"depth")+extra)
+ local rule = new_rule(width,height+extra,depth+extra)
local hlist = new_hlist(rule)
head = insert_before(head,current,hlist)
setcolor(rule,color)
@@ -232,7 +234,7 @@ function typesetters.marksuspects(head)
local prev = getprev(current)
local prid = prev and getid(prev)
local done = false
- if prid == penalty_code and getfield(prev,"penalty") == 10000 then
+ if prid == penalty_code and getpenalty(prev) == 10000 then
done = 8 -- orange
else
done = 5 -- darkmagenta
@@ -292,19 +294,13 @@ function typesetters.showsuspects(head)
end
end
-nodes.tasks.appendaction ("processors","after", "typesetters.marksuspects")
-nodes.tasks.prependaction("shipouts", "normalizers","typesetters.showsuspects")
-
-nodes.tasks.disableaction("processors","typesetters.marksuspects")
-nodes.tasks.disableaction("shipouts", "typesetters.showsuspects")
-
-- or maybe a directive
trackers.register("typesetters.suspects",function(v)
texsetattribute(a_suspecting,v and 1 or unsetvalue)
if v and not enabled then
- nodes.tasks.enableaction("processors","typesetters.marksuspects")
- nodes.tasks.enableaction("shipouts", "typesetters.showsuspects")
+ enableaction("processors","typesetters.marksuspects")
+ enableaction("shipouts", "typesetters.showsuspects")
enabled = true
end
end)
diff --git a/tex/context/base/mkiv/typo-tal.lua b/tex/context/base/mkiv/typo-tal.lua
index 21c6794c4..67380f24b 100644
--- a/tex/context/base/mkiv/typo-tal.lua
+++ b/tex/context/base/mkiv/typo-tal.lua
@@ -41,18 +41,16 @@ local getprev = nuts.getprev
local getid = nuts.getid
local getfont = nuts.getfont
local getchar = nuts.getchar
-local getfield = nuts.getfield
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
local traverse_list_by_id = nuts.traverse_id
-local dimensions_of_list = nuts.dimensions
+local list_dimensions = nuts.dimensions
local first_glyph = nuts.first_glyph
local setglue = nuts.setglue
@@ -64,6 +62,8 @@ local tracers = nodes.tracers
local setcolor = tracers.colors.set
local tracedrule = tracers.pool.nuts.rule
+local enableaction = nodes.tasks.enableaction
+
local characteralign = { }
typesetters.characteralign = characteralign
@@ -102,7 +102,7 @@ local validsigns = {
local function setcharacteralign(column,separator)
if not enabled then
- nodes.tasks.enableaction("processors","typesetters.characteralign.handler")
+ enableaction("processors","typesetters.characteralign.handler")
enabled = true
end
if not datasets then
@@ -381,8 +381,8 @@ function characteralign.handler(originalhead,where)
end
else
entry = {
- before = b_start and dimensions_of_list(b_start,getnext(b_stop)) or 0,
- after = a_start and dimensions_of_list(a_start,getnext(a_stop)) or 0,
+ before = b_start and list_dimensions(b_start,getnext(b_stop)) or 0,
+ after = a_start and list_dimensions(a_start,getnext(a_stop)) or 0,
}
list[row] = entry
end
diff --git a/tex/context/base/mkiv/typo-wrp.lua b/tex/context/base/mkiv/typo-wrp.lua
index 394e15090..07e34cd6c 100644
--- a/tex/context/base/mkiv/typo-wrp.lua
+++ b/tex/context/base/mkiv/typo-wrp.lua
@@ -23,9 +23,11 @@ local find_node_tail = nuts.tail
local getprev = nuts.getprev
local getid = nuts.getid
local getsubtype = nuts.getsubtype
-local getfield = nuts.getfield
+local getpenalty = nuts.getpenalty
local remove = nuts.remove
+local enableaction = nodes.tasks.enableaction
+
local wrappers = { }
typesetters.wrappers = wrappers
@@ -39,9 +41,9 @@ local report = logs.reporter("paragraphs","wrappers")
local function remove_dangling_crlf(head,tail)
if tail and getid(tail) == glue_code and getsubtype(tail) == parfill_skip_code then
tail = getprev(tail)
- if tail and getid(tail) == penalty_code and getsubtype(tail) == user_penalty_code and getfield(tail,"penalty") == 10000 then
+ if tail and getid(tail) == penalty_code and getsubtype(tail) == user_penalty_code and getpenalty(tail) == 10000 then
tail = getprev(tail)
- if tail and getid(tail) == penalty_code and getsubtype(tail) == user_penalty_code and getfield(tail,"penalty") == -10000 then
+ if tail and getid(tail) == penalty_code and getsubtype(tail) == user_penalty_code and getpenalty(tail) == -10000 then
if tail == head then
-- can't happen
else
@@ -71,6 +73,6 @@ interfaces.implement {
name = "enablecrlf",
onlyonce = true,
actions = function()
- nodes.tasks.enableaction("processors","typesetters.wrappers.handler")
+ enableaction("processors","typesetters.wrappers.handler")
end
}
diff --git a/tex/context/base/mkiv/util-deb.lua b/tex/context/base/mkiv/util-deb.lua
index ee732b3b5..57e015386 100644
--- a/tex/context/base/mkiv/util-deb.lua
+++ b/tex/context/base/mkiv/util-deb.lua
@@ -12,87 +12,255 @@ if not modules then modules = { } end modules ['util-deb'] = {
local debug = require "debug"
-local getinfo = debug.getinfo
-local type, next, tostring = type, next, tostring
-local format, find = string.format, string.find
-local is_boolean = string.is_boolean
+local getinfo, sethook = debug.getinfo, debug.sethook
+local type, next, tostring, tonumber = type, next, tostring, tonumber
+local format, find, sub, gsub = string.format, string.find, string.sub, string.gsub
+local insert, remove, sort = table.insert, table.remove, table.sort
+local setmetatableindex = table.setmetatableindex
utilities = utilities or { }
local debugger = utilities.debugger or { }
utilities.debugger = debugger
-local counters = { }
+local report = logs.reporter("debugger")
+
+local ticks = os.gettimeofday or os.clock
+local seconds = function(n) return n or 0 end
+local overhead = 0
+local dummycalls = 10*1000
+local nesting = 0
local names = { }
-local report = logs.reporter("debugger")
+local initialize = false
--- one
+if not (FFISUPPORTED and ffi) then
-local function hook()
- local f = getinfo(2) -- "nS"
- if f then
- local n = "unknown"
- if f.what == "C" then
- n = f.name or '<anonymous>'
- if not names[n] then
- names[n] = format("%42s",n)
+ -- we have no precise timer
+
+elseif os.type == "windows" then
+
+ initialize = function()
+ local kernel = ffilib("kernel32","system") -- no checking
+ if kernel then
+ local tonumber = ffi.number or tonumber
+ ffi.cdef[[
+ int QueryPerformanceFrequency(int64_t *lpFrequency);
+ int QueryPerformanceCounter(int64_t *lpPerformanceCount);
+ ]]
+ local target = ffi.new("__int64[1]")
+ ticks = function()
+ if kernel.QueryPerformanceCounter(target) == 1 then
+ return tonumber(target[0])
+ else
+ return 0
+ end
end
- else
- -- source short_src linedefined what name namewhat nups func
- n = f.name or f.namewhat or f.what
- if not n or n == "" then
- n = "?"
+ local target = ffi.new("__int64[1]")
+ seconds = function(ticks)
+ if kernel.QueryPerformanceFrequency(target) == 1 then
+ return ticks / tonumber(target[0])
+ else
+ return 0
+ end
+ end
+ end
+ initialize = false
+ end
+
+elseif os.type == "unix" then
+
+ -- for the values: echo '#include <time.h>' > foo.h; gcc -dM -E foo.h
+
+ initialize = function()
+ local C = ffi.C
+ local tonumber = ffi.number or tonumber
+ ffi.cdef [[
+ /* what a mess */
+ typedef int clk_id_t;
+ typedef enum { CLOCK_REALTIME, CLOCK_MONOTONIC, CLOCK_PROCESS_CPUTIME_ID } clk_id;
+ typedef struct timespec { long sec; long nsec; } ctx_timespec;
+ int clock_gettime(clk_id_t timerid, struct timespec *t);
+ ]]
+ local target = ffi.new("ctx_timespec[?]",1)
+ local clock = C.CLOCK_PROCESS_CPUTIME_ID
+ ticks = function ()
+ C.clock_gettime(clock,target)
+ return tonumber(target[0].sec*1000000000 + target[0].nsec)
+ end
+ seconds = function(ticks)
+ return ticks/1000000000
+ end
+ initialize = false
+ end
+
+end
+
+setmetatableindex(names,function(t,name)
+ local v = setmetatableindex(function(t,source)
+ local v = setmetatableindex(function(t,line)
+ local v = { total = 0, count = 0 }
+ t[line] = v
+ return v
+ end)
+ t[source] = v
+ return v
+ end)
+ t[name] = v
+ return v
+end)
+
+local function hook(where)
+ local f = getinfo(2,"nSl")
+ if f then
+ local source = f.short_src
+ if not source then
+ return
+ end
+ local line = f.linedefined or 0
+ local name = f.name
+ if not name then
+ local what = f.what
+ if what == "C" then
+ name = "<anonymous>"
+ else
+ name = f.namewhat or what or "<unknown>"
end
- if not names[n] then
- names[n] = format("%42s : % 5i : %s",n,f.linedefined or 0,f.short_src or "unknown source")
+ end
+ local data = names[name][source][line]
+ if where == "call" then
+ data.count = data.count + 1
+ insert(data,ticks())
+ elseif where == "return" then
+ local t = remove(data)
+ if t then
+ data.total = data.total + ticks() - t
end
end
- counters[n] = (counters[n] or 0) + 1
end
end
-function debugger.showstats(printer,threshold) -- hm, something has changed, rubish now
- printer = printer or report
- threshold = threshold or 0
- local total, grandtotal, functions = 0, 0, 0
- local dataset = { }
- for name, count in next, counters do
- dataset[#dataset+1] = { name, count }
+function debugger.showstats(printer,threshold)
+ local printer = printer or report
+ local calls = 0
+ local functions = 0
+ local dataset = { }
+ local length = 0
+ local wholetime = 0
+ local threshold = threshold or 0
+ for name, sources in next, names do
+ for source, lines in next, sources do
+ for line, data in next, lines do
+ local count = data.count
+ if count > threshold then
+ if #name > length then
+ length = #name
+ end
+ local total = data.total
+ local real = total
+ if real > 0 then
+ real = total - (count * overhead / dummycalls)
+ if real < 0 then
+ real = 0
+ end
+ wholetime = wholetime + real
+ end
+ if line < 0 then
+ line = 0
+ end
+ -- if name = "a" then
+ -- -- weird name
+ -- end
+ dataset[#dataset+1] = { real, total, count, name, source, line }
+ end
+ end
+ end
end
- table.sort(dataset,function(a,b) return a[2] == b[2] and b[1] > a[1] or a[2] > b[2] end)
- for i=1,#dataset do
- local d = dataset[i]
- local name = d[1]
- local count = d[2]
- if count > threshold and not find(name,"for generator") then -- move up
- printer(format("%8i %s\n", count, names[name]))
- total = total + count
+ sort(dataset,function(a,b)
+ if a[1] == b[1] then
+ if a[2] == b[2] then
+ if a[3] == b[3] then
+ if a[4] == b[4] then
+ if a[5] == b[5] then
+ return a[6] < b[6]
+ else
+ return a[5] < b[5]
+ end
+ else
+ return a[4] < b[4]
+ end
+ else
+ return b[3] < a[3]
+ end
+ else
+ return b[2] < a[2]
+ end
+ else
+ return b[1] < a[1]
end
- grandtotal = grandtotal + count
+ end)
+ if length > 50 then
+ length = 50
+ end
+ local fmt = string.formatters["%4.9k %4.9k %3.3k %8i %-" .. length .. "s %4i %s"]
+ for i=1,#dataset do
+ local data = dataset[i]
+ local real = data[1]
+ local total = data[2]
+ local count = data[3]
+ local name = data[4]
+ local source = data[5]
+ local line = data[6]
+ local percent = real / wholetime
+ calls = calls + count
functions = functions + 1
+ name = gsub(name,"%s+"," ")
+ if #name > length then
+ name = sub(name,1,length)
+ end
+ printer(fmt(seconds(total),seconds(real),percent,count,name,line,source))
end
- printer("\n")
- printer(format("functions : % 10i\n", functions))
- printer(format("total : % 10i\n", total))
- printer(format("grand total: % 10i\n", grandtotal))
- printer(format("threshold : % 10i\n", threshold))
+ printer("")
+ printer(format("functions : %i", functions))
+ printer(format("calls : %i", calls))
+ printer(format("overhead : %f", seconds(overhead/1000)))
+
+ -- table.save("luatex-profile.lua",names)
end
function debugger.savestats(filename,threshold)
local f = io.open(filename,'w')
if f then
- debugger.showstats(function(str) f:write(str) end,threshold)
+ debugger.showstats(function(str) f:write(str,"\n") end,threshold)
f:close()
end
end
function debugger.enable()
- debug.sethook(hook,"c")
+ if nesting == 0 then
+ running = true
+ if initialize then
+ initialize()
+ end
+ sethook(hook,"cr")
+ local function dummy() end
+ local t = ticks()
+ for i=1,dummycalls do
+ dummy()
+ end
+ overhead = ticks() - t
+ end
+ if nesting > 0 then
+ nesting = nesting + 1
+ end
end
function debugger.disable()
- debug.sethook()
- -- counters[debug.getinfo(2,"f").func] = nil
+ if nesting > 0 then
+ nesting = nesting - 1
+ end
+ if nesting == 0 then
+ sethook()
+ end
end
-- debugger.enable()
diff --git a/tex/context/base/mkiv/util-env.lua b/tex/context/base/mkiv/util-env.lua
index b72226900..0b832e72e 100644
--- a/tex/context/base/mkiv/util-env.lua
+++ b/tex/context/base/mkiv/util-env.lua
@@ -15,14 +15,58 @@ local concat, insert, remove = table.concat, table.insert, table.remove
environment = environment or { }
local environment = environment
--- precautions
+-- locales are a useless feature in and even dangerous for luatex
-os.setlocale(nil,nil) -- useless feature and even dangerous in luatex
+os.setlocale(nil,nil) -- setlocale("all","C")
function os.setlocale()
-- no way you can mess with it
end
+-- do
+--
+-- local setlocale = os.setlocale
+--
+-- function os.resetlocale()
+-- setlocale(nil,nil)
+-- end
+--
+-- function os.pushlocale(l,...)
+-- insert(stack, {
+-- collate = setlocale(nil,"collate"),
+-- ctype = setlocale(nil,"ctype"),
+-- monetary = setlocale(nil,"monetary"),
+-- numeric = setlocale(nil,"numeric"),
+-- time = setlocale(nil,"time"),
+-- })
+-- if l then
+-- setlocale(l,...)
+-- else
+-- setlocale(status.lc_collate ,"collate"),
+-- setlocale(status.lc_ctype ,"ctype"),
+-- setlocale(status.lc_monetary,"monetary"),
+-- setlocale(status.lc_numeric ,"numeric"),
+-- setlocale(status.lc_time ,"time"),
+-- end
+-- end
+--
+-- function os.poplocale(...)
+-- local l = remove(stack)
+-- if l then
+-- setlocale(unpack(l))
+-- else
+-- resetlocale()
+-- end
+-- end
+--
+-- function os.setlocale()
+-- -- no way you can mess with it, use push/pop
+-- end
+--
+-- setlocale(nil,nil) -- setlocale("all","C")
+--
+-- end
+
-- dirty tricks (we will replace the texlua call by luatex --luaonly)
local validengines = allocate {
diff --git a/tex/context/base/mkiv/util-fil.lua b/tex/context/base/mkiv/util-fil.lua
index 28c92c7c3..01bcd571e 100644
--- a/tex/context/base/mkiv/util-fil.lua
+++ b/tex/context/base/mkiv/util-fil.lua
@@ -6,8 +6,10 @@ if not modules then modules = { } end modules ['util-fil'] = {
license = "see context related readme files"
}
-local byte = string.byte
-local extract = bit32.extract
+local byte = string.byte
+local char = string.char
+local extract = bit32 and bit32.extract
+local floor = math.floor
-- 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
@@ -36,6 +38,8 @@ function files.size(f)
return f:seek("end")
end
+files.getsize = files.size
+
function files.setposition(f,n)
if zerobased[f] then
f:seek("set",n)
@@ -79,6 +83,12 @@ function files.readbytes(f,n)
return byte(f:read(n),1,n)
end
+function files.readbytetable(f,n)
+ -- return { byte(f:read(n),1,n) }
+ local s = f:read(n or 1)
+ return { byte(s,1,#s) } -- best use the real length
+end
+
function files.readchar(f)
return f:read(1)
end
@@ -89,29 +99,43 @@ end
function files.readinteger1(f) -- one byte
local n = byte(f:read(1))
- if n >= 0x80 then
- return n - 0xFF - 1
+ if n >= 0x80 then
+ return n - 0x100
else
return n
end
end
-files.readcardinal1 = files.readbyte -- one byte
-files.readcardinal = files.readcardinal1
-files.readinteger = files.readinteger1
+files.readcardinal1 = files.readbyte -- one byte
+files.readcardinal = files.readcardinal1
+files.readinteger = files.readinteger1
+files.readsignedbyte = files.readinteger1
function files.readcardinal2(f)
local a, b = byte(f:read(2),1,2)
return 0x100 * a + b
end
+function files.readcardinal2le(f)
+ local b, a = 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
+ if a >= 0x80 then
+ return 0x100 * a + b - 0x10000
else
- return n
+ return 0x100 * a + b
+ end
+end
+
+function files.readinteger2le(f)
+ local b, a = byte(f:read(2),1,2)
+ if a >= 0x80 then
+ return 0x100 * a + b - 0x10000
+ else
+ return 0x100 * a + b
end
end
@@ -120,44 +144,115 @@ function files.readcardinal3(f)
return 0x10000 * a + 0x100 * b + c
end
+function files.readcardinal3le(f)
+ local c, b, a = byte(f:read(3),1,3)
+ return 0x10000 * a + 0x100 * b + c
+end
+
+function files.readinteger3(f)
+ local a, b, c = byte(f:read(3),1,3)
+ if a >= 0x80 then
+ return 0x10000 * a + 0x100 * b + c - 0x1000000
+ else
+ return 0x10000 * a + 0x100 * b + c
+ end
+end
+
+function files.readinteger3le(f)
+ local c, b, a = byte(f:read(3),1,3)
+ if a >= 0x80 then
+ return 0x10000 * a + 0x100 * b + c - 0x1000000
+ else
+ return 0x10000 * a + 0x100 * b + c
+ end
+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.readcardinal4le(f)
+ local d, c, b, a = 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
+ if a >= 0x80 then
+ return 0x1000000 * a + 0x10000 * b + 0x100 * c + d - 0x100000000
else
- return n
+ return 0x1000000 * a + 0x10000 * b + 0x100 * c + d
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
+function files.readinteger4le(f)
+ local d, c, b, a = byte(f:read(4),1,4)
+ if a >= 0x80 then
+ return 0x1000000 * a + 0x10000 * b + 0x100 * c + d - 0x100000000
else
- return n + (0x100 * c + d)/0xFFFF
+ return 0x1000000 * a + 0x10000 * b + 0x100 * c + d
end
end
-function files.read2dot14(f)
+-- function files.readfixed2(f)
+-- local a, b = byte(f:read(2),1,2)
+-- if a >= 0x80 then
+-- return (0x100 * a + b - 0x10000)/256.0
+-- else
+-- return (0x100 * a + b)/256.0
+-- end
+-- end
+
+function files.readfixed2(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
+ if a >= 0x80 then
+ return (a - 0x100) + b/0x100
else
- n = extract(n,30,2)
- return n + m/0x4000
+ return (a ) + b/0x100
end
end
+-- (real) (n>>16) + ((n&0xffff)/65536.0))
+
+-- function files.readfixed4(f)
+-- local a, b, c, d = byte(f:read(4),1,4)
+-- if a >= 0x80 then
+-- return (0x1000000 * a + 0x10000 * b + 0x100 * c + d - 0x100000000)/65536.0
+-- else
+-- return (0x1000000 * a + 0x10000 * b + 0x100 * c + d)/65536.0
+-- end
+-- end
+
+function files.readfixed4(f)
+ local a, b, c, d = byte(f:read(4),1,4)
+ if a >= 0x80 then
+ return (0x100 * a + b - 0x10000) + (0x100 * c + d)/0x10000
+ else
+ return (0x100 * a + b ) + (0x100 * c + d)/0x10000
+ end
+end
+
+if extract then
+
+ local extract = bit32.extract
+ local band = bit32.band
+
+ -- (real) ((n<<16)>>(16+14)) + ((n&0x3fff)/16384.0))
+
+ function files.read2dot14(f)
+ local a, b = byte(f:read(2),1,2)
+ if a >= 0x80 then
+ local n = -(0x100 * a + b)
+ return - (extract(n,14,2) + (band(n,0x3FFF) / 16384.0))
+ else
+ local n = 0x100 * a + b
+ return (extract(n,14,2) + (band(n,0x3FFF) / 16384.0))
+ end
+ end
+
+end
+
function files.skipshort(f,n)
f:read(2*(n or 1))
end
@@ -165,3 +260,68 @@ end
function files.skiplong(f,n)
f:read(4*(n or 1))
end
+
+-- writers (kind of slow)
+
+function files.writecardinal2(f,n)
+ local a = char(n % 256)
+ n = floor(n/256)
+ local b = char(n % 256)
+ f:write(b,a)
+end
+
+function files.writecardinal4(f,n)
+ local a = char(n % 256)
+ n = floor(n/256)
+ local b = char(n % 256)
+ n = floor(n/256)
+ local c = char(n % 256)
+ n = floor(n/256)
+ local d = char(n % 256)
+ f:write(d,c,b,a)
+end
+
+function files.writestring(f,s)
+ f:write(char(byte(s,1,#s)))
+end
+
+function files.writebyte(f,b)
+ f:write(char(b))
+end
+
+if fio and fio.readcardinal1 then
+
+ files.readcardinal1 = fio.readcardinal1
+ files.readcardinal2 = fio.readcardinal2
+ files.readcardinal3 = fio.readcardinal3
+ files.readcardinal4 = fio.readcardinal4
+ files.readinteger1 = fio.readinteger1
+ files.readinteger2 = fio.readinteger2
+ files.readinteger3 = fio.readinteger3
+ files.readinteger4 = fio.readinteger4
+ -- files.readfixed2 = fio.readfixed2 -- needs recent luatex
+ -- files.readfixed4 = fio.readfixed4 -- needs recent luatex
+ files.read2dot14 = fio.read2dot14
+ files.setposition = fio.setposition
+ files.getposition = fio.getposition
+
+ files.readbyte = files.readcardinal1
+ files.readsignedbyte = files.readinteger1
+ files.readcardinal = files.readcardinal1
+ files.readinteger = files.readinteger1
+
+ local skipposition = fio.skipposition
+ files.skipposition = skipposition
+
+ files.readbytes = fio.readbytes
+ files.readbytetable = fio.readbytetable
+
+ function files.skipshort(f,n)
+ skipposition(f,2*(n or 1))
+ end
+
+ function files.skiplong(f,n)
+ skipposition(f,4*(n or 1))
+ end
+
+end
diff --git a/tex/context/base/mkiv/util-jsn.lua b/tex/context/base/mkiv/util-jsn.lua
index bbe25d89d..e835c07d6 100644
--- a/tex/context/base/mkiv/util-jsn.lua
+++ b/tex/context/base/mkiv/util-jsn.lua
@@ -64,18 +64,19 @@ local jnumber = (1-whitespace-rparent-rbrace-comma)^1 / tonumber
local key = jstring
local jsonconverter = { "value",
- object = lbrace * Cf(Ct("") * V("pair") * (comma * V("pair"))^0,rawset) * rbrace,
- pair = Cg(optionalws * key * optionalws * colon * V("value")),
- array = Ct(lparent * V("value") * (comma * V("value"))^0 * rparent),
- value = optionalws * (jstring + V("object") + V("array") + jtrue + jfalse + jnull + jnumber + #rparent) * optionalws,
+ hash = lbrace * Cf(Ct("") * (V("pair") * (comma * V("pair"))^0 + optionalws),rawset) * rbrace,
+ pair = Cg(optionalws * key * optionalws * colon * V("value")),
+ array = Ct(lparent * (V("value") * (comma * V("value"))^0 + optionalws) * rparent),
+-- value = optionalws * (jstring + V("hash") + V("array") + jtrue + jfalse + jnull + jnumber + #rparent) * optionalws,
+ value = optionalws * (jstring + V("hash") + V("array") + jtrue + jfalse + jnull + jnumber) * optionalws,
}
-- local jsonconverter = { "value",
--- object = lbrace * Cf(Ct("") * V("pair") * (comma * V("pair"))^0,rawset) * rbrace,
--- pair = Cg(optionalws * V("string") * optionalws * colon * V("value")),
--- array = Ct(lparent * V("value") * (comma * V("value"))^0 * rparent),
--- string = jstring,
--- value = optionalws * (V("string") + V("object") + V("array") + jtrue + jfalse + jnull + jnumber) * optionalws,
+-- hash = lbrace * Cf(Ct("") * (V("pair") * (comma * V("pair"))^0 + optionalws),rawset) * rbrace,
+-- pair = Cg(optionalws * V("string") * optionalws * colon * V("value")),
+-- array = Ct(lparent * (V("value") * (comma * V("value"))^0 + optionalws) * rparent),
+-- string = jstring,
+-- value = optionalws * (V("string") + V("hash") + V("array") + jtrue + jfalse + jnull + jnumber) * optionalws,
-- }
-- lpeg.print(jsonconverter) -- size 181
@@ -156,3 +157,5 @@ end
-- inspect(tmp)
-- inspect(json.tostring(true))
+
+return json
diff --git a/tex/context/base/mkiv/util-lib-imp-gm.lua b/tex/context/base/mkiv/util-lib-imp-gm.lua
index 4c5254721..d1ffde879 100644
--- a/tex/context/base/mkiv/util-lib-imp-gm.lua
+++ b/tex/context/base/mkiv/util-lib-imp-gm.lua
@@ -9,9 +9,9 @@ if not modules then modules = { } end modules ['util-lib-imp-gm'] = {
local graphicmagick = utilities.graphicmagick or { }
utilities.graphicmagick = graphicmagick
-local report_gm = logs.reporter("swiglib gm")
+local report_gm = logs.reporter("swiglib graphicsmagick")
-local gm = swiglib("gmwand.core")
+local gm = swiglib("graphicsmagick.core")
if gm then
report_gm("library loaded")
diff --git a/tex/context/base/mkiv/util-lib-imp-gs.lua b/tex/context/base/mkiv/util-lib-imp-gs.lua
index 8fd2dd458..0eceda7aa 100644
--- a/tex/context/base/mkiv/util-lib-imp-gs.lua
+++ b/tex/context/base/mkiv/util-lib-imp-gs.lua
@@ -12,9 +12,9 @@ local formatters = string.formatters
local ghostscript = utilities.ghostscript or { }
utilities.ghostscript = ghostscript
-local report_gs = logs.reporter("swiglib gs")
+local report_gs = logs.reporter("swiglib ghostscript")
-local gs = swiglib("gs.core")
+local gs = swiglib("ghostscript.core")
local helpers = swiglib("helpers.core")
if gs then
diff --git a/tex/context/base/mkiv/util-lib.lua b/tex/context/base/mkiv/util-lib.lua
index 2601b2e57..e7b6e4875 100644
--- a/tex/context/base/mkiv/util-lib.lua
+++ b/tex/context/base/mkiv/util-lib.lua
@@ -6,9 +6,6 @@ if not modules then modules = { } end modules ['util-lib'] = {
license = "see context related readme files",
}
--- This is experimental code for Hans and Luigi. Don't depend on it! There
--- will be a plain variant.
-
--[[
The problem with library bindings is manyfold. They are of course platform
@@ -73,47 +70,59 @@ and then without.
]]--
--- seems to be clua in recent texlive
-
-local gsub, find = string.gsub, string.find
-local pathpart, nameonly, joinfile = file.pathpart, file.nameonly, file.join
-local findfile, findfiles = resolvers and resolvers.findfile, resolvers and resolvers.findfiles
-
-local loaded = package.loaded
+local type = type
+local next = next
+local pcall = pcall
+local gsub = string.gsub
+local find = string.find
+local sort = table.sort
+local pathpart = file.pathpart
+local nameonly = file.nameonly
+local joinfile = file.join
+local removesuffix = file.removesuffix
+local findfile = resolvers.findfile
+local findfiles = resolvers.findfiles
+local expandpaths = resolvers.expandedpathlistfromvariable
+local qualifiedpath = file.is_qualified_path
+local isfile = lfs.isfile
-local report_swiglib = logs.reporter("swiglib")
-local trace_swiglib = false trackers.register("resolvers.swiglib", function(v) trace_swiglib = v end)
+local done = false
-- We can check if there are more that one component, and if not, we can
-- append 'core'.
-local done = false
-
-local function requireswiglib(required,version)
- local trace_swiglib = trace_swiglib or package.helpers.trace
- local library = loaded[required]
- if library == nil then
- if trace_swiglib then
- report_swiglib("requiring library %a with version %a",required,version or "any")
+local function locate(required,version,trace,report,action)
+ if type(required) ~= "string" then
+ report("provide a proper library name")
+ return
+ end
+ if trace then
+ report("requiring library %a with version %a",required,version or "any")
+ end
+ local found_library = nil
+ local required_full = gsub(required,"%.","/") -- package.helpers.lualibfile
+ local required_path = pathpart(required_full)
+ local required_base = nameonly(required_full)
+ if qualifiedpath(required) then
+ if isfile(required) then
+ found_library = required
end
+ else
-- initialize a few variables
- local required_full = gsub(required,"%.","/") -- package.helpers.lualibfile
- local required_path = pathpart(required_full)
- local required_base = nameonly(required_full)
local required_name = required_base .. "." .. os.libsuffix
local version = type(version) == "string" and version ~= "" and version or false
local engine = environment.ownmain or false
--
- if trace_swiglib and not done then
- local list = resolvers.expandedpathlistfromvariable("lib") -- fresh, no reuse
+ if trace and not done then
+ local list = expandpaths("lib") -- fresh, no reuse
for i=1,#list do
- report_swiglib("tds path %i: %s",i,list[i])
+ report("tds path %i: %s",i,list[i])
end
end
-- helpers
local function found(locate,asked_library,how,...)
- if trace_swiglib then
- report_swiglib("checking %s: %a",how,asked_library)
+ if trace then
+ report("checking %s: %a",how,asked_library)
end
return locate(asked_library,...)
end
@@ -121,15 +130,15 @@ local function requireswiglib(required,version)
local found = nil
if version then
local asked_library = joinfile(required_path,version,required_name)
- if trace_swiglib then
- report_swiglib("checking %s: %a","with version",asked_library)
+ if trace then
+ report("checking %s: %a","with version",asked_library)
end
found = locate(asked_library,...)
end
if not found or found == "" then
local asked_library = joinfile(required_path,required_name)
- if trace_swiglib then
- report_swiglib("checking %s: %a","with version",asked_library)
+ if trace then
+ report("checking %s: %a","with version",asked_library)
end
found = locate(asked_library,...)
end
@@ -140,32 +149,32 @@ local function requireswiglib(required,version)
-- match anyway.
local function attempt(checkpattern)
-- check cnf spec using name and version
- if trace_swiglib then
- report_swiglib("checking tds lib paths strictly")
+ if trace then
+ report("checking tds lib paths strictly")
end
local found = findfile and check(findfile,"lib")
if found and (not checkpattern or find(found,checkpattern)) then
return found
end
-- check cnf spec using wildcard
- if trace_swiglib then
- report_swiglib("checking tds lib paths with wildcard")
+ if trace then
+ report("checking tds lib paths with wildcard")
end
local asked_library = joinfile(required_path,".*",required_name)
- if trace_swiglib then
- report_swiglib("checking %s: %a","latest version",asked_library)
+ if trace then
+ report("checking %s: %a","latest version",asked_library)
end
local list = findfiles(asked_library,"lib",true)
if list and #list > 0 then
- table.sort(list)
+ sort(list)
local found = list[#list]
if found and (not checkpattern or find(found,checkpattern)) then
return found
end
end
-- Check lib paths using name and version.
- if trace_swiglib then
- report_swiglib("checking lib paths")
+ if trace then
+ report("checking lib paths")
end
package.extralibpath(environment.ownpath)
local paths = package.libpaths()
@@ -177,59 +186,87 @@ local function requireswiglib(required,version)
end
return false
end
- local found_library = nil
if engine then
- if trace_swiglib then
- report_swiglib("attemp 1, engine %a",engine)
+ if trace then
+ report("attemp 1, engine %a",engine)
end
found_library = attempt("/"..engine.."/")
if not found_library then
- if trace_swiglib then
- report_swiglib("attemp 2, no engine",asked_library)
+ if trace then
+ report("attemp 2, no engine",asked_library)
end
found_library = attempt()
end
else
found_library = attempt()
end
- -- load and initialize when found
- if not found_library then
- if trace_swiglib then
- report_swiglib("not found: %a",required)
- end
- library = false
- else
- local path = pathpart(found_library)
- local base = nameonly(found_library)
- dir.push(path)
- if trace_swiglib then
- report_swiglib("found: %a",found_library)
- end
- local message = nil
- local opener = "luaopen_" .. required_base
- library, message = package.loadlib(found_library,opener)
- local libtype = type(library)
- if libtype == "function" then
- library = library()
- else
- report_swiglib("load error: %a returns %a, message %a, library %a",opener,libtype,(string.gsub(message or "no message","[%s]+$","")),found_library or "no library")
- library = false
- end
- dir.pop()
- end
- -- cache result
- if not library then
- report_swiglib("unknown: %a",required)
- elseif trace_swiglib then
- report_swiglib("stored: %a",required)
+ end
+ -- load and initialize when found
+ if not found_library then
+ if trace then
+ report("not found: %a",required)
end
- loaded[required] = library
+ library = false
else
- report_swiglib("reused: %a",required)
+ if trace then
+ report("found: %a",found_library)
+ end
+ local message, result = action(found_library,required_base)
+ if result then
+ library = result
+ else
+ library = false
+ report("load error: message %a, library %a",tostring(message),found_library or "no library")
+ end
+ end
+ if not library then
+ report("unknown: %a",required)
+ elseif trace then
+ report("stored: %a",required)
end
return library
end
+do
+
+ local report_swiglib = logs.reporter("swiglib")
+ local trace_swiglib = false
+ local savedrequire = require
+ local loadedlibs = { }
+ local loadlib = package.loadlib
+
+ local pushdir = dir.push
+ local popdir = dir.pop
+
+ trackers.register("resolvers.swiglib", function(v) trace_swiglib = v end)
+
+ function requireswiglib(required,version)
+ local library = loadedlibs[library]
+ if library == nil then
+ local trace_swiglib = trace_swiglib or package.helpers.trace
+ library = locate(required,version,trace_swiglib,report_swiglib,function(name,base)
+ pushdir(pathpart(name))
+ local opener = "luaopen_" .. base
+ if trace_swiglib then
+ report_swiglib("opening: %a with %a",name,opener)
+ end
+ local library, message = loadlib(name,opener)
+ local libtype = type(library)
+ if libtype == "function" then
+ library = library()
+ message = true
+ else
+ report_swiglib("load error: %a returns %a, message %a, library %a",opener,libtype,(string.gsub(message or "no message","[%s]+$","")),found_library or "no library")
+ library = false
+ end
+ popdir()
+ return message, library
+ end)
+ loadedlibs[required] = library or false
+ end
+ return library
+ end
+
--[[
For convenience we make the require loader function swiglib aware. Alternatively
@@ -237,15 +274,13 @@ we could put the specific loader in the global namespace.
]]--
-local savedrequire = require
-
-function require(name,version)
- if find(name,"^swiglib%.") then
- return requireswiglib(name,version)
- else
- return savedrequire(name)
+ function require(name,version)
+ if find(name,"^swiglib%.") then
+ return requireswiglib(name,version)
+ else
+ return savedrequire(name)
+ end
end
-end
--[[
@@ -255,43 +290,93 @@ recommended loader.
]]--
-local swiglibs = { }
-local initializer = "core"
+ local swiglibs = { }
+ local initializer = "core"
-function swiglib(name,version)
- local library = swiglibs[name]
- if not library then
- statistics.starttiming(swiglibs)
- if trace_swiglib then
- report_swiglib("loading %a",name)
+ function swiglib(name,version)
+ local library = swiglibs[name]
+ if not library then
+ statistics.starttiming(swiglibs)
+ if trace_swiglib then
+ report_swiglib("loading %a",name)
+ end
+ if not find(name,"%." .. initializer .. "$") then
+ fullname = "swiglib." .. name .. "." .. initializer
+ else
+ fullname = "swiglib." .. name
+ end
+ library = requireswiglib(fullname,version)
+ swiglibs[name] = library
+ statistics.stoptiming(swiglibs)
+ end
+ return library
+ end
+
+ statistics.register("used swiglibs", function()
+ if next(swiglibs) then
+ return string.format("%s, initial load time %s seconds",table.concat(table.sortedkeys(swiglibs)," "),statistics.elapsedtime(swiglibs))
end
- if not find(name,"%." .. initializer .. "$") then
- fullname = "swiglib." .. name .. "." .. initializer
+ end)
+
+end
+
+if FFISUPPORTED and ffi and ffi.load then
+
+--[[
+
+We use the same lookup logic for ffi loading.
+
+]]--
+
+ local report_ffilib = logs.reporter("ffilib")
+ local trace_ffilib = false
+ local savedffiload = ffi.load
+
+ trackers.register("resolvers.ffilib", function(v) trace_ffilib = v end)
+
+ local function locateindeed(name)
+ local message, library = pcall(savedffiload,removesuffix(name))
+ if type(library) == "userdata" then
+ return library
else
- fullname = "swiglib." .. name
+ return false
end
- library = requireswiglib(fullname,version)
- swiglibs[name] = library
- statistics.stoptiming(swiglibs)
end
- return library
-end
-statistics.register("used swiglibs", function()
- if next(swiglibs) then
- return string.format("%s, initial load time %s seconds",table.concat(table.sortedkeys(swiglibs)," "),statistics.elapsedtime(swiglibs))
+ function ffilib(required,version)
+ if version == "system" then
+ return locateindeed(name)
+ else
+ return locate(required,version,trace_ffilib,report_ffilib,locateindeed)
+ end
+ end
+
+ function ffi.load(name)
+ local library = ffilib(name)
+ if type(library) == "userdata" then
+ return library
+ else
+ report_ffilib("trying to load %a using normal loader",name)
+ return savedffiload(name)
+ end
end
-end)
+
+end
--[[
-So, we now have:
+-- So, we now have:
-local gm = require("swiglib.gmwand.core")
-local gm = swiglib("gmwand.core")
+trackers.enable("resolvers.ffilib")
+trackers.enable("resolvers.swiglib")
+
+local gm = require("swiglib.graphicsmagick.core")
+local gm = swiglib("graphicsmagick.core")
local sq = swiglib("mysql.core")
local sq = swiglib("mysql.core","5.6")
-Watch out, the last one is less explicit and lacks the swiglib prefix.
+ffilib("libmysql","5.6.14")
+
+-- Watch out, the last one is less explicit and lacks the swiglib prefix.
]]--
diff --git a/tex/context/base/mkiv/util-lua.lua b/tex/context/base/mkiv/util-lua.lua
index e1dcdc94d..b3346006c 100644
--- a/tex/context/base/mkiv/util-lua.lua
+++ b/tex/context/base/mkiv/util-lua.lua
@@ -158,3 +158,21 @@ end
-- luautilities.registerdatatype(lpeg.P("!"),"lpeg")
--
-- print(luautilities.datatype(lpeg.P("oeps")))
+
+-- These finalizers will only be invoked when we have a proper lua_close
+-- call (which is not happening in luatex tex node yes) or finish with an
+-- os.exit(n,true).
+
+local finalizers = { }
+
+setmetatable(finalizers, {
+ __gc = function(t)
+ for i=1,#t do
+ pcall(t[i]) -- let's not crash
+ end
+ end
+} )
+
+function luautilities.registerfinalizer(f)
+ finalizers[#finalizers+1] = f
+end
diff --git a/tex/context/base/mkiv/util-prs.lua b/tex/context/base/mkiv/util-prs.lua
index 02729dd0e..650a7ead6 100644
--- a/tex/context/base/mkiv/util-prs.lua
+++ b/tex/context/base/mkiv/util-prs.lua
@@ -83,10 +83,6 @@ local pattern_b = spaces * comma^0 * spaces * (key * ((spaces * equal * spaces *
-- "a=1, b=2, c=3, d={a{b,c}d}, e=12345, f=xx{a{b,c}d}xx, g={}" : outer {} removes, leading spaces ignored
--- todo: rewrite to fold etc
---
--- parse = lpeg.Cf(lpeg.Carg(1) * lpeg.Cg(key * equal * value) * separator^0,rawset)^0 -- lpeg.match(parse,"...",1,hash)
-
local hash = { }
local function set(key,value)
@@ -197,6 +193,23 @@ function parsers.settings_to_array(str,strict)
end
end
+function parsers.settings_to_numbers(str)
+ if not str or str == "" then
+ return { }
+ end
+ if type(str) == "table" then
+ -- fall through
+ elseif find(str,",",1,true) then
+ str = lpegmatch(pattern,str)
+ else
+ return { tonumber(str) }
+ end
+ for i=1,#str do
+ str[i] = tonumber(str[i])
+ end
+ return str
+end
+
local value = P(lbrace * C((nobrace + nestedbraces)^0) * rbrace)
+ C((nestedbraces + nestedbrackets + nestedparents + (1-comma))^0)
local pattern = spaces * Ct(value*(separator*value)^0)
diff --git a/tex/context/base/mkiv/util-sac.lua b/tex/context/base/mkiv/util-sac.lua
index 8a12e7cf0..b509d9a9b 100644
--- a/tex/context/base/mkiv/util-sac.lua
+++ b/tex/context/base/mkiv/util-sac.lua
@@ -10,7 +10,7 @@ if not modules then modules = { } end modules ['util-sac'] = {
-- with bytes)
local byte, sub = string.byte, string.sub
-local extract = bit32.extract
+local extract = bit32 and bit32.extract
utilities = utilities or { }
local streams = { }
@@ -82,6 +82,13 @@ function streams.readbytes(f,n)
return byte(f[1],i,j-1)
end
+function streams.readbytetable(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
@@ -104,7 +111,7 @@ function streams.readinteger1(f) -- one byte
f[2] = i + 1
local n = byte(f[1],i)
if n >= 0x80 then
- return n - 0xFF - 1
+ return n - 0x100
else
return n
end
@@ -122,16 +129,35 @@ function streams.readcardinal2(f)
return 0x100 * a + b
end
+function streams.readcardinal2LE(f)
+ local i = f[2]
+ local j = i + 1
+ f[2] = j + 1
+ local b, a = 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
+ if a >= 0x80 then
+ return 0x100 * a + b - 0x10000
else
- return n
+ return 0x100 * a + b
+ end
+end
+
+function streams.readinteger2le(f)
+ local i = f[2]
+ local j = i + 1
+ f[2] = j + 1
+ local b, a = byte(f[1],i,j)
+ if a >= 0x80 then
+ return 0x100 * a + b - 0x10000
+ else
+ return 0x100 * a + b
end
end
@@ -143,6 +169,38 @@ function streams.readcardinal3(f)
return 0x10000 * a + 0x100 * b + c
end
+function streams.readcardinal3le(f)
+ local i = f[2]
+ local j = i + 2
+ f[2] = j + 1
+ local c, b, a = byte(f[1],i,j)
+ return 0x10000 * a + 0x100 * b + c
+end
+
+function streams.readinteger3(f)
+ local i = f[2]
+ local j = i + 3
+ f[2] = j + 1
+ local a, b, c = byte(f[1],i,j)
+ if a >= 0x80 then
+ return 0x10000 * a + 0x100 * b + c - 0x1000000
+ else
+ return 0x10000 * a + 0x100 * b + c
+ end
+end
+
+function streams.readinteger3le(f)
+ local i = f[2]
+ local j = i + 3
+ f[2] = j + 1
+ local c, b, a = byte(f[1],i,j)
+ if a >= 0x80 then
+ return 0x10000 * a + 0x100 * b + c - 0x1000000
+ else
+ return 0x10000 * a + 0x100 * b + c
+ end
+end
+
function streams.readcardinal4(f)
local i = f[2]
local j = i + 3
@@ -156,11 +214,22 @@ function streams.readinteger4(f)
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
+ if a >= 0x80 then
+ return 0x1000000 * a + 0x10000 * b + 0x100 * c + d - 0x100000000
else
- return n
+ return 0x1000000 * a + 0x10000 * b + 0x100 * c + d
+ end
+end
+
+function streams.readinteger4le(f)
+ local i = f[2]
+ local j = i + 3
+ f[2] = j + 1
+ local d, c, b, a = byte(f[1],i,j)
+ if a >= 0x80 then
+ return 0x1000000 * a + 0x10000 * b + 0x100 * c + d - 0x100000000
+ else
+ return 0x1000000 * a + 0x10000 * b + 0x100 * c + d
end
end
@@ -169,30 +238,46 @@ function streams.readfixed4(f)
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
+ if a >= 0x80 then
+ return (0x100 * a + b - 0x10000) + (0x100 * c + d)/0x10000
else
- return n + (0x100 * c + d)/0xFFFF
+ return (0x100 * a + b ) + (0x100 * c + d)/0x10000
end
end
-function streams.read2dot14(f)
+function streams.readfixed2(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
+ if a >= 0x80 then
+ return (a - 0x100) + b/0x100
else
- n = extract(n,30,2)
- return n + m/0x4000
+ return (a ) + b/0x100
end
end
+if extract then
+
+ local extract = bit32.extract
+ local band = bit32.band
+
+ function streams.read2dot14(f)
+ local i = f[2]
+ local j = i + 1
+ f[2] = j + 1
+ local a, b = byte(f[1],i,j)
+ if a >= 0x80 then
+ local n = -(0x100 * a + b)
+ return - (extract(n,14,2) + (band(n,0x3FFF) / 16384.0))
+ else
+ local n = 0x100 * a + b
+ return (extract(n,14,2) + (band(n,0x3FFF) / 16384.0))
+ end
+ end
+
+end
+
function streams.skipshort(f,n)
f[2] = f[2] + 2*(n or 1)
end
@@ -200,3 +285,104 @@ end
function streams.skiplong(f,n)
f[2] = f[2] + 4*(n or 1)
end
+
+if sio and sio.readcardinal2 then
+
+ local readcardinal1 = sio.readcardinal1
+ local readcardinal2 = sio.readcardinal2
+ local readcardinal3 = sio.readcardinal3
+ local readcardinal4 = sio.readcardinal4
+ local readinteger1 = sio.readinteger1
+ local readinteger2 = sio.readinteger2
+ local readinteger3 = sio.readinteger3
+ local readinteger4 = sio.readinteger4
+ local readfixed2 = sio.readfixed2
+ local readfixed4 = sio.readfixed4
+ local read2dot14 = sio.read2dot14
+ local readbytes = sio.readbytes
+ local readbytetable = sio.readbytetable
+
+ function streams.readcardinal1(f)
+ local i = f[2]
+ f[2] = i + 1
+ return readcardinal1(f[1],i)
+ end
+ function streams.readcardinal2(f)
+ local i = f[2]
+ f[2] = i + 2
+ return readcardinal2(f[1],i)
+ end
+ function streams.readcardinal3(f)
+ local i = f[2]
+ f[2] = i + 3
+ return readcardinal3(f[1],i)
+ end
+ function streams.readcardinal4(f)
+ local i = f[2]
+ f[2] = i + 4
+ return readcardinal4(f[1],i)
+ end
+ function streams.readinteger1(f)
+ local i = f[2]
+ f[2] = i + 1
+ return readinteger1(f[1],i)
+ end
+ function streams.readinteger2(f)
+ local i = f[2]
+ f[2] = i + 2
+ return readinteger2(f[1],i)
+ end
+ function streams.readinteger3(f)
+ local i = f[2]
+ f[2] = i + 3
+ return readinteger3(f[1],i)
+ end
+ function streams.readinteger4(f)
+ local i = f[2]
+ f[2] = i + 4
+ return readinteger4(f[1],i)
+ end
+ -- function streams.readfixed2(f) -- needs recent luatex
+ -- local i = f[2]
+ -- f[2] = i + 2
+ -- return readfixed2(f[1],i)
+ -- end
+ -- function streams.readfixed4(f) -- needs recent luatex
+ -- local i = f[2]
+ -- f[2] = i + 4
+ -- return readfixed4(f[1],i)
+ -- end
+ function streams.read2dot4(f)
+ local i = f[2]
+ f[2] = i + 2
+ return read2dot4(f[1],i)
+ end
+ function streams.readbytes(f,n)
+ local i = f[2]
+ local s = f[3]
+ local p = i + n
+ if p > s then
+ f[2] = s + 1
+ else
+ f[2] = p
+ end
+ return readbytes(f[1],i,n)
+ end
+ function streams.readbytetable(f,n)
+ local i = f[2]
+ local s = f[3]
+ local p = i + n
+ if p > s then
+ f[2] = s + 1
+ else
+ f[2] = p
+ end
+ return readbytetable(f[1],i,n)
+ end
+
+ streams.readbyte = streams.readcardinal1
+ streams.readsignedbyte = streams.readinteger1
+ streams.readcardinal = streams.readcardinal1
+ streams.readinteger = streams.readinteger1
+
+end
diff --git a/tex/context/base/mkiv/util-sbx.lua b/tex/context/base/mkiv/util-sbx.lua
index 260e8b3b5..66a650875 100644
--- a/tex/context/base/mkiv/util-sbx.lua
+++ b/tex/context/base/mkiv/util-sbx.lua
@@ -23,19 +23,23 @@ local platform = os.type
local P, S, C = lpeg.P, lpeg.S, lpeg.C
local gsub = string.gsub
local lower = string.lower
+local find = string.find
+local concat = string.concat
local unquoted = string.unquoted
local optionalquoted = string.optionalquoted
+local basename = file.basename
local sandbox = sandbox
local validroots = { }
local validrunners = { }
-local validbinaries = { }
+local validbinaries = true -- all permitted
+local validlibraries = true -- all permitted
local validators = { }
-local p_validroot = nil
local finalized = nil
-local norunners = false
local trace = false
-local p_split = lpeg.tsplitat(" ") -- more spaces?
+
+local p_validroot = nil
+local p_split = lpeg.firstofsplit(" ")
local report = logs.reporter("sandbox")
@@ -43,69 +47,87 @@ trackers.register("sandbox",function(v) trace = v end) -- often too late anyway
sandbox.setreporter(report)
-sandbox.finalizer(function()
- finalized = true
-end)
+sandbox.finalizer {
+ category = "files",
+ action = function()
+ finalized = true
+ end
+}
local function registerroot(root,what) -- what == read|write
if finalized then
report("roots are already finalized")
else
- root = collapsepath(expandname(root))
- if platform == "windows" then
- root = lower(root) -- we assume ascii names
+ if type(root) == "table" then
+ root, what = root[1], root[2]
+ end
+ if type(root) == "string" and root ~= "" then
+ root = collapsepath(expandname(root))
+ -- if platform == "windows" then
+ -- root = lower(root) -- we assume ascii names
+ -- end
+ if what == "r" or what == "ro" or what == "readable" then
+ what = "read"
+ elseif what == "w" or what == "wo" or what == "writable" then
+ what = "write"
+ end
+ -- true: read & write | false: read
+ validroots[root] = what == "write" or false
end
- -- true: read & write | false: read
- validroots[root] = what == "write" or false
end
end
-sandbox.finalizer(function() -- initializers can set the path
- if p_validroot then
- report("roots are already initialized")
- else
- sandbox.registerroot(".","write") -- always ok
- -- also register texmf as read
- for name in sortedhash(validroots) do
- if p_validroot then
- p_validroot = P(name) + p_validroot
- else
- p_validroot = P(name)
+sandbox.finalizer {
+ category = "files",
+ action = function() -- initializers can set the path
+ if p_validroot then
+ report("roots are already initialized")
+ else
+ sandbox.registerroot(".","write") -- always ok
+ -- also register texmf as read
+ for name in sortedhash(validroots) do
+ if p_validroot then
+ p_validroot = P(name) + p_validroot
+ else
+ p_validroot = P(name)
+ end
end
+ p_validroot = p_validroot / validroots
end
- p_validroot = p_validroot / validroots
end
-end)
+}
-local function registerrunner(specification)
+local function registerbinary(name)
if finalized then
- report("runners are already finalized")
- else
- local name = specification.name
- if not name then
- report("no runner name specified")
+ report("binaries are already finalized")
+ elseif type(name) == "string" and name ~= "" then
+ if not validbinaries then
return
end
- local program = specification.program
- if type(program) == "string" then
- -- common for all platforms
- elseif type(program) == "table" then
- program = program[platform]
- end
- if type(program) ~= "string" or program == "" then
- report("invalid runner %a specified for platform %a",name,platform)
- return
+ if validbinaries == true then
+ validbinaries = { [name] = true }
+ else
+ validbinaries[name] = true
end
- specification.program = program
- validrunners[name] = specification
+ elseif name == true then
+ validbinaries = { }
end
end
-local function registerbinary(name)
+local function registerlibrary(name)
if finalized then
- report("binaries are already finalized")
+ report("libraries are already finalized")
elseif type(name) == "string" and name ~= "" then
- validbinaries[name] = true
+ if not validlibraries then
+ return
+ end
+ if validlibraries == true then
+ validlibraries = { [name] = true }
+ else
+ validlibraries[name] = true
+ end
+ elseif name == true then
+ validlibraries = { }
end
end
@@ -134,9 +156,9 @@ end
local function validfilename(name,what)
if p_validroot and type(name) == "string" and lpegmatch(p_path,name) then
local asked = collapsepath(expandname(name))
- if platform == "windows" then
- asked = lower(asked) -- we assume ascii names
- end
+ -- if platform == "windows" then
+ -- asked = lower(asked) -- we assume ascii names
+ -- end
local okay = lpegmatch(p_validroot,asked)
if okay == true then
-- read and write access
@@ -163,39 +185,53 @@ local function validfilename(name,what)
end
return name
end
- else
- if filenamelogger then
- filenamelogger(name,"*",name,false)
- end
+ elseif filenamelogger then
+ filenamelogger(name,"*",name,false)
end
else
return name
end
end
-local function readable(name)
- if platform == "windows" then
- name = lower(name) -- we assume ascii names
- end
+local function readable(name,finalized)
+-- if platform == "windows" then -- yes or no
+-- name = lower(name) -- we assume ascii names
+-- end
+ return validfilename(name,"r")
+end
+
+local function normalizedreadable(name,finalized)
+-- if platform == "windows" then -- yes or no
+-- name = lower(name) -- we assume ascii names
+-- end
local valid = validfilename(name,"r")
if valid then
return normalized(valid)
end
end
-local function writeable(name)
- if platform == "windows" then
- name = lower(name) -- we assume ascii names
- end
+local function writeable(name,finalized)
+-- if platform == "windows" then
+-- name = lower(name) -- we assume ascii names
+-- end
+ return validfilename(name,"w")
+end
+
+local function normalizedwriteable(name,finalized)
+-- if platform == "windows" then
+-- name = lower(name) -- we assume ascii names
+-- end
local valid = validfilename(name,"w")
if valid then
return normalized(valid)
end
end
-validators.readable = readable
-validators.writeable = writeable
-validators.filename = readable
+validators.readable = readable
+validators.writeable = normalizedwriteable
+validators.normalizedreadable = normalizedreadable
+validators.normalizedwriteable = writeable
+validators.filename = readable
table.setmetatableindex(validators,function(t,k)
if k then
@@ -204,23 +240,39 @@ table.setmetatableindex(validators,function(t,k)
return readable
end)
-function validators.string(s)
- return s -- can be used to prevent filename checking
+function validators.string(s,finalized)
+ -- can be used to prevent filename checking (todo: only when registered)
+ if finalized and suspicious(s) then
+ return ""
+ else
+ return s
+ end
end
--- end of validators
+function validators.cache(s)
+ if finalized then
+ return basename(s)
+ else
+ return s
+ end
+end
+
+function validators.url(s)
+ if finalized and find("^file:") then
+ return ""
+ else
+ return s
+ end
+end
-sandbox.registerroot = registerroot
-sandbox.registerrunner = registerrunner
-sandbox.registerbinary = registerbinary
-sandbox.validfilename = validfilename
+-- end of validators
local function filehandlerone(action,one,...)
local checkedone = validfilename(one)
if checkedone then
return action(one,...)
else
--- report("file %a is unreachable",one)
+ -- report("file %a is unreachable",one)
end
end
@@ -231,10 +283,10 @@ local function filehandlertwo(action,one,two,...)
if checkedtwo then
return action(one,two,...)
else
--- report("file %a is unreachable",two)
+ -- report("file %a is unreachable",two)
end
else
--- report("file %a is unreachable",one)
+ -- report("file %a is unreachable",one)
end
end
@@ -254,101 +306,289 @@ end
-- runners can be strings or tables
--
-- os.execute : string
--- os.exec : table with program in [0|1]
--- os.spawn : table with program in [0|1]
+-- os.exec : string or table with program in [0|1]
+-- os.spawn : string or table with program in [0|1]
--
-- our execute: registered program with specification
-local function runhandler(action,name,specification)
- local kind = type(name)
- if kind ~= "string" then
+local osexecute = sandbox.original(os.execute)
+local iopopen = sandbox.original(io.popen)
+local reported = { }
+
+local function validcommand(name,program,template,checkers,defaults,variables,reporter,strict)
+ if validbinaries ~= false and (validbinaries == true or validbinaries[program]) then
+ if variables then
+ for variable, value in next, variables do
+ local checker = validators[checkers[variable]]
+ if checker then
+ value = checker(unquoted(value),strict)
+ if value then
+ variables[variable] = optionalquoted(value)
+ else
+ report("variable %a with value %a fails the check",variable,value)
+ return
+ end
+ else
+ report("variable %a has no checker",variable)
+ return
+ end
+ end
+ for variable, default in next, defaults do
+ local value = variables[variable]
+ if not value or value == "" then
+ local checker = validators[checkers[variable]]
+ if checker then
+ default = checker(unquoted(default),strict)
+ if default then
+ variables[variable] = optionalquoted(default)
+ else
+ report("variable %a with default %a fails the check",variable,default)
+ return
+ end
+ end
+ end
+ end
+ end
+ local command = program .. " " .. replace(template,variables)
+ if reporter then
+ reporter("executing runner %a: %s",name,command)
+ elseif trace then
+ report("executing runner %a: %s",name,command)
+ end
+ return command
+ elseif not reported[name] then
+ report("executing program %a of runner %a is not permitted",program,name)
+ reported[name] = true
+ end
+end
+
+local runners = {
+ --
+ -- name,program,template,checkers,variables,reporter
+ --
+ resultof = function(...)
+ local command = validcommand(...)
+ if command then
+ if trace then
+ report("resultof: %s",command)
+ end
+ local handle = iopopen(command,"r") -- already has flush
+ if handle then
+ local result = handle:read("*all") or ""
+ handle:close()
+ return result
+ end
+ end
+ end,
+ execute = function(...)
+ local command = validcommand(...)
+ if command then
+ if trace then
+ report("execute: %s",command)
+ end
+ return osexecute(command)
+ end
+ end,
+ pipeto = function(...)
+ local command = validcommand(...)
+ if command then
+ if trace then
+ report("pipeto: %s",command)
+ end
+ return iopopen(command,"w") -- already has flush
+ end
+ end,
+}
+
+function sandbox.registerrunner(specification)
+ if type(specification) == "string" then
+ local wrapped = validrunners[specification]
+ inspect(table.sortedkeys(validrunners))
+ if wrapped then
+ return wrapped
+ else
+ report("unknown predefined runner %a",specification)
+ return
+ end
+ end
+ if type(specification) ~= "table" then
+ report("specification should be a table (or string)")
return
end
- if norunners then
- report("no runners permitted, ignoring command: %s",name)
+ local name = specification.name
+ if type(name) ~= "string" then
+ report("invalid name, string expected",name)
return
end
- local spec = validrunners[name]
- if not spec then
- report("unknown runner: %s",name)
+ if validrunners[name] then
+ report("invalid name, runner %a already defined")
return
end
- -- specs are already checked
- local program = spec.program
- local variables = { }
- local checkers = spec.checkers or { }
- if specification then
- -- we only handle runners that are defined before the sandbox is
- -- closed so in principle we cannot have user runs with no files
- -- while for context runners we assume a robust specification
- for k, v in next, specification do
- local checker = validators[checkers[k]]
- local value = checker(unquoted(v)) -- todo: write checkers
- if value then
- variables[k] = optionalquoted(value)
- else
- report("suspicious argument found, run blocked: %s",v)
- return
- end
- end
+ local program = specification.program
+ if type(program) == "string" then
+ -- common for all platforms
+ elseif type(program) == "table" then
+ program = program[platform] or program.default or program.unix
+ end
+ if type(program) ~= "string" or program == "" then
+ report("invalid runner %a specified for platform %a",name,platform)
+ return
end
- local command = replace(program,variables)
- if trace then
- report("executing runner: %s",command)
+ local template = specification.template
+ if not template then
+ report("missing template for runner %a",name)
+ return
end
- return action(command)
+ local method = specification.method or "execute"
+ local checkers = specification.checkers or { }
+ local defaults = specification.defaults or { }
+ local runner = runners[method]
+ if runner then
+ local finalized = finalized -- so, the current situation is frozen
+ local wrapped = function(variables)
+ return runner(name,program,template,checkers,defaults,variables,specification.reporter,finalized)
+ end
+ validrunners[name] = wrapped
+ return wrapped
+ else
+ validrunners[name] = nil
+ report("invalid method for runner %a",name)
+ end
+end
+
+function sandbox.getrunner(name)
+ return name and validrunners[name]
end
--- only registered (from list) -- no checking on writable so let's assume harmless
--- runs
+local function suspicious(str)
+ return (find(str,"[/\\]") or find(command,"%.%.")) and true or false
+end
-local function binaryhandler(action,name)
- local kind = type(name)
- local list = name
- if kind == "string" then
- list = lpegmatch(p_split,name)
+local function binaryrunner(action,command,...)
+ if validbinaries == false then
+ -- nothing permitted
+ report("no binaries permitted, ignoring command: %s",command)
+ return
end
- local program = name[0] or name[1]
- if type(program) ~= "string" or program == "" then
- return --silently ignore
+ if type(command) ~= "string" then
+ -- we only handle strings, maybe some day tables
+ report("command should be a string")
+ return
end
- if norunners then
- report("no binaries permitted, ignoring command: %s",program)
+ local program = lpegmatch(p_split,command)
+ if not program or program == "" then
+ report("unable to filter binary from command: %s",command)
return
end
- if not validbinaries[program] then
- report("binary is not permitted: %s",program)
+ if validbinaries == true then
+ -- everything permitted
+ elseif not validbinaries[program] then
+ report("binary not permitted, ignoring command: %s",command)
+ return
+ elseif suspicious(command) then
+ report("/ \\ or .. found, ignoring command (use sandbox.registerrunner): %s",command)
return
end
- for i=0,#list do
- local n = list[i]
- if n then
- local v = readable(unquoted(n))
- if v then
- list[i] = optionalquoted(v)
- else
- report("suspicious argument found, run blocked: %s",n)
- return
- end
- end
+ return action(command,...)
+end
+
+-- local function binaryrunner(action,command,...)
+-- local original = command
+-- if validbinaries == false then
+-- -- nothing permitted
+-- report("no binaries permitted, ignoring command: %s",command)
+-- return
+-- end
+-- local program
+-- if type(command) == "table" then
+-- program = command[0]
+-- if program then
+-- command = concat(command," ",0)
+-- else
+-- program = command[1]
+-- if program then
+-- command = concat(command," ")
+-- end
+-- end
+-- elseif type(command) = "string" then
+-- program = lpegmatch(p_split,command)
+-- else
+-- report("command should be a string or table")
+-- return
+-- end
+-- if not program or program == "" then
+-- report("unable to filter binary from command: %s",command)
+-- return
+-- end
+-- if validbinaries == true then
+-- -- everything permitted
+-- elseif not validbinaries[program] then
+-- report("binary not permitted, ignoring command: %s",command)
+-- return
+-- elseif find(command,"[/\\]") or find(command,"%.%.") then
+-- report("/ \\ or .. found, ignoring command (use sandbox.registerrunner): %s",command)
+-- return
+-- end
+-- return action(original,...)
+-- end
+
+local function dummyrunner(action,command,...)
+ if type(command) == "table" then
+ command = concat(command," ",command[0] and 0 or 1)
end
- return action(name)
+ report("ignoring command: %s",command)
end
sandbox.filehandlerone = filehandlerone
sandbox.filehandlertwo = filehandlertwo
sandbox.iohandler = iohandler
-sandbox.runhandler = runhandler
-sandbox.binaryhandler = binaryhandler
function sandbox.disablerunners()
- norunners = true
+ validbinaries = false
end
-local execute = sandbox.original(os.execute)
+function sandbox.disablelibraries()
+ validlibraries = false
+end
+
+if FFISUPPORTED and ffi then
+
+ function sandbox.disablelibraries()
+ validlibraries = false
+ for k, v in next, ffi do
+ if k ~= "gc" then
+ ffi[k] = nil
+ end
+ end
+ end
+
+ local load = ffi.load
+
+ if load then
+
+ local reported = { }
+
+ function ffi.load(name,...)
+ if validlibraries == false then
+ -- all blocked
+ elseif validlibraries == true then
+ -- all permitted
+ return load(name,...)
+ elseif validlibraries[name] then
+ -- 'name' permitted
+ return load(name,...)
+ else
+ -- 'name' not permitted
+ end
+ if not reported[name] then
+ report("using library %a is not permitted",name)
+ reported[name] = true
+ end
+ return nil
+ end
+
+ end
-function sandbox.run(name,specification)
- return runhandler(execute,name,specification)
end
-------------------
@@ -360,16 +600,18 @@ local register = sandbox.register
if io then
overload(io.open, filehandlerone,"io.open")
- overload(io.popen, filehandlerone,"io.popen")
+ overload(io.popen, binaryrunner, "io.popen")
overload(io.input, iohandler, "io.input")
overload(io.output, iohandler, "io.output")
overload(io.lines, filehandlerone,"io.lines")
end
if os then
- overload(os.execute, binaryhandler, "os.execute")
- overload(os.spawn, binaryhandler, "os.spawn")
- overload(os.exec, binaryhandler, "os.exec")
+ overload(os.execute, binaryrunner, "os.execute")
+ overload(os.spawn, dummyrunner, "os.spawn")
+ overload(os.exec, dummyrunner, "os.exec")
+ overload(os.resultof, binaryrunner, "os.resultof")
+ overload(os.pipeto, binaryrunner, "os.pipeto")
overload(os.rename, filehandlertwo,"os.rename")
overload(os.remove, filehandlerone,"os.remove")
end
@@ -406,6 +648,11 @@ if epdf then
epdf.open = register(epdf.open, filehandlerone,"epdf.open")
end
+sandbox.registerroot = registerroot
+sandbox.registerbinary = registerbinary
+sandbox.registerlibrary = registerlibrary
+sandbox.validfilename = validfilename
+
-- not used in a normal mkiv run : os.spawn = os.execute
-- not used in a normal mkiv run : os.exec = os.exec
diff --git a/tex/context/base/mkiv/util-sci.lua b/tex/context/base/mkiv/util-sci.lua
index 43d873b63..e028d2f95 100644
--- a/tex/context/base/mkiv/util-sci.lua
+++ b/tex/context/base/mkiv/util-sci.lua
@@ -17,11 +17,25 @@ utilities.scite = scite
local report = logs.reporter("scite")
-local lexerroot = file.dirname(resolvers.find_file("scite-context-lexer.lua"))
+do
+ local lexerroot = "c:/data/system/scite/wscite/context/lexers"
+ if not lexerroot then
+ lexerroot = file.dirname(resolvers.find_file("scite-context-lexer.lua"))
+ end
+ if lfs.isdir(lexerroot) then
+ package.extraluapath(lexerroot)
+ package.extraluapath(lexerroot.."/themes")
+ package.extraluapath(lexerroot.."/data")
+ report("using lexer root %a",lexerroot)
+ else
+ report("no valid lexer root")
+ end
+end
local knownlexers = {
tex = "tex", mkiv = "tex", mkvi = "tex", mkxi = "tex", mkix = "tex", mkii = "tex", cld = "tex",
lua = "lua", lfg = "lua", lus = "lua",
+ mp = "mps", mpiv = "mps", mpii = "mps",
w = "web", ww = "web",
c = "cpp", h = "cpp", cpp = "cpp", hpp = "cpp", cxx = "cpp", hxx = "cpp",
xml = "xml", lmx = "xml", ctx = "xml", xsl = "xml", xsd = "xml", rlx = "xml", css = "xml", dtd = "xml",
@@ -34,20 +48,16 @@ lexer = nil -- main lexer, global (for the moment needed for themes)
local function loadscitelexer()
if not lexer then
- dir.push(lexerroot)
- lexer = dofile("scite-context-lexer.lua")
- dofile("themes/scite-context-theme.lua")
- dir.pop()
+ lexer = require("scite-context-lexer")
+ require("scite-context-theme") -- uses lexer
end
return lexer
end
local loadedlexers = setmetatableindex(function(t,k)
local l = knownlexers[k] or k
- dir.push(lexerroot)
loadscitelexer()
local v = lexer.load(formatters["scite-context-lexer-%s"](l))
- dir.pop()
t[l] = v
t[k] = v
return v
@@ -57,8 +67,8 @@ scite.loadedlexers = loadedlexers
scite.knownlexers = knownlexers
scite.loadscitelexer = loadscitelexer
-local f_fore_bold = formatters['.%s { display: inline ; font-weight: bold ; color: #%s%s%s ; }']
-local f_fore_none = formatters['.%s { display: inline ; font-weight: normal ; color: #%s%s%s ; }']
+local f_fore_bold = formatters['.%s { display: inline ; font-weight: bold ; color: #%02X%02X%02X ; }']
+local f_fore_none = formatters['.%s { display: inline ; font-weight: normal ; color: #%02X%02X%02X ; }']
local f_none_bold = formatters['.%s { display: inline ; font-weight: bold ; }']
local f_none_none = formatters['.%s { display: inline ; font-weight: normal ; }']
local f_div_class = formatters['<div class="%s">%s</div>']
@@ -91,7 +101,7 @@ local function exportcsslexing()
if not css then
loadscitelexer()
local function black(f)
- return (f[1] == f[2]) and (f[2] == f[3]) and (f[3] == '00')
+ return (#f == 0 and f[1] == 0) or ((f[1] == f[2]) and (f[2] == f[3]) and (f[3] == 0))
end
local result, r = { }, 0
for k, v in table.sortedhash(lexer.context.styles) do
@@ -99,17 +109,10 @@ local function exportcsslexing()
local fore = v.fore
r = r + 1
if fore and not black(fore) then
- if bold then
- result[r] = f_fore_bold(k,fore[1],fore[2],fore[3])
- else
- result[r] = f_fore_none(k,fore[1],fore[2],fore[3])
- end
+ local cr, cg, cb = fore[1], fore[2], fore[3]
+ result[r] = (bold and f_fore_bold or f_fore_none)(k,cr,cg or cr,cb or cr)
else
- if bold then
- result[r] = f_none_bold(k)
- else
- result[r] = f_none_none(k)
- end
+ result[r] = (bold and f_none_bold or f_none_none)(k)
end
end
css = concat(result,"\n")
diff --git a/tex/context/base/mkiv/util-seq.lua b/tex/context/base/mkiv/util-seq.lua
index 32fe59096..5836f5eca 100644
--- a/tex/context/base/mkiv/util-seq.lua
+++ b/tex/context/base/mkiv/util-seq.lua
@@ -293,7 +293,7 @@ sequencers.compile = compile
-- todo: use sequencer (can have arguments and returnvalues etc now)
-local template_yes = [[
+local template_yes_state = [[
%s
return function(head%s)
local ok, done = false, false
@@ -301,6 +301,13 @@ return function(head%s)
return head, done
end]]
+local template_yes_nostate = [[
+%s
+return function(head%s)
+%s
+ return head, true
+end]]
+
local template_nop = [[
return function()
return false, false
@@ -308,6 +315,7 @@ end]]
function sequencers.nodeprocessor(t,nofarguments) -- todo: handle 'kind' in plug into tostring
local list, order, kind, gskip, askip = t.list, t.order, t.kind, t.gskip, t.askip
+ local nostate = t.nostate
local vars, calls, args, n = { }, { }, nil, 0
if nofarguments == 0 then
args = ""
@@ -335,18 +343,24 @@ function sequencers.nodeprocessor(t,nofarguments) -- todo: handle 'kind' in plug
n = n + 1
vars[n] = formatters["local %s = %s"](localized,action)
-- only difference with tostring is kind and rets (why no return)
- if kind[action] == "nohead" then
- calls[n] = formatters[" ok = %s(head%s) done = done or ok"](localized,args)
+ if nostate then
+ if kind[action] == "nohead" then
+ calls[n] = formatters[" %s(head%s)"](localized,args)
+ else
+ calls[n] = formatters[" head = %s(head%s)"](localized,args)
+ end
else
- calls[n] = formatters[" head, ok = %s(head%s) done = done or ok"](localized,args)
+ if kind[action] == "nohead" then
+ calls[n] = formatters[" ok = %s(head%s) if ok then done = true end"](localized,args)
+ else
+ calls[n] = formatters[" head, ok = %s(head%s) if ok then done = true end"](localized,args)
+ end
end
--- local s = " print('" .. tostring(group) .. " " .. tostring(action) .. " : ' .. tostring(head)) "
--- calls[n] = s .. calls[n] .. s
end
end
end
end
- local processor = #calls > 0 and formatters[template_yes](concat(vars,"\n"),args,concat(calls,"\n")) or template_nop
+ local processor = #calls > 0 and formatters[nostate and template_yes_nostate or template_yes_state](concat(vars,"\n"),args,concat(calls,"\n")) or template_nop
-- print(processor)
return processor
end
diff --git a/tex/context/base/mkiv/util-sql-imp-client.lua b/tex/context/base/mkiv/util-sql-imp-client.lua
index 9a0fbc299..a2763feac 100644
--- a/tex/context/base/mkiv/util-sql-imp-client.lua
+++ b/tex/context/base/mkiv/util-sql-imp-client.lua
@@ -1,4 +1,4 @@
-if not modules then modules = { } end modules ['util-sql-client'] = {
+if not modules then modules = { } end modules ['util-sql-imp-client'] = {
version = 1.001,
comment = "companion to util-sql.lua",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
@@ -26,6 +26,8 @@ local serialize = sql.serialize
local deserialize = sql.deserialize
local getserver = sql.getserver
+local osclock = os.gettimeofday
+
-- 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.
@@ -107,11 +109,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
+ 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
@@ -132,6 +134,11 @@ local t_runner = {
mssql = [[sqlcmd -S %host% %?U: -U "%username%" ?% %?P: -P "%password%" ?% -I -W -w 65535 -s"]] .. "\t" .. [[" -m 1 -i "%queryfile%" -o "%resultfile%"]],
}
+local t_runner_login = {
+ mysql = [[mysql --login-path="%login%" --batch --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;
@@ -144,10 +151,10 @@ SET NOCOUNT ON;
]],
}
-local function dataprepared(specification,client)
+local function dataprepared(specification)
local query = preparetemplate(specification)
if query then
- local preamble = t_preamble[getserver()] or t_preamble.mysql
+ local preamble = t_preamble[getserver()] or t_preamble.mysql
if preamble then
preamble = replacetemplate(preamble,specification.variables,'sql')
query = preamble .. "\n" .. query
@@ -165,14 +172,16 @@ local function dataprepared(specification,client)
end
end
-local function datafetched(specification,client)
- local runner = t_runner[getserver()] or t_runner.mysql
+local function datafetched(specification)
+ local runner = (specification.login and t_runner_login or t_runner)[getserver()] or t_runner.mysql
local command = replacetemplate(runner,specification)
if trace_sql then
local t = osclock()
report_state("command: %s",command)
+ -- for now we don't use sandbox.registerrunners as this module is
+ -- also used outside context
local okay = os.execute(command)
- report_state("fetchtime: %.3f sec",osclock()-t) -- not okay under linux
+ report_state("fetchtime: %.3f sec, return code: %i",osclock()-t,okay) -- not okay under linux
return okay == 0
else
return os.execute(command) == 0
@@ -220,12 +229,12 @@ local function execute(specification)
report_state("error in specification")
return
end
- if not dataprepared(specification,methods.client) then
+ if not dataprepared(specification) then
report_state("error in preparation")
return
end
- if not datafetched(specification,methods.client) then
- report_state("error in fetching, query: %s",string.collapsespaces(io.loaddata(specification.queryfile)))
+ if not datafetched(specification) then
+ report_state("error in fetching, query: %s",string.collapsespaces(io.loaddata(specification.queryfile) or "?"))
return
end
local data = dataloaded(specification)
diff --git a/tex/context/base/mkiv/util-sql-imp-library.lua b/tex/context/base/mkiv/util-sql-imp-library.lua
index 15754e26a..e16853612 100644
--- a/tex/context/base/mkiv/util-sql-imp-library.lua
+++ b/tex/context/base/mkiv/util-sql-imp-library.lua
@@ -1,4 +1,4 @@
-if not modules then modules = { } end modules ['util-sql-library'] = {
+if not modules then modules = { } end modules ['util-sql-imp-library'] = {
version = 1.001,
comment = "companion to util-sql.lua",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
@@ -143,7 +143,7 @@ local function fetched(specification,query,converter)
local q = query[i]
local r, m = connection:execute(q)
if m then
- report_state("error in query to host %a: %s",specification.host,string.collapsespaces(q))
+ report_state("error in query to host %a: %s",specification.host,string.collapsespaces(q or "?"))
if m then
report_state("message: %s",m)
end
diff --git a/tex/context/base/mkiv/util-sql-imp-sqlite.lua b/tex/context/base/mkiv/util-sql-imp-sqlite.lua
new file mode 100644
index 000000000..1a960c1c3
--- /dev/null
+++ b/tex/context/base/mkiv/util-sql-imp-sqlite.lua
@@ -0,0 +1,237 @@
+if not modules then modules = { } end modules ['util-sql-imp-sqlite'] = {
+ version = 1.001,
+ comment = "companion to util-sql.lua",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local next = next
+
+local sql = require("util-sql")
+----- sql = utilities.sql
+local sqlite = require("swiglib.sqlite.core")
+local swighelpers = require("swiglib.helpers.core")
+
+-- sql.sqlite = sqlite -- maybe in the module itself
+
+-- inspect(table.sortedkeys(sqlite))
+
+local trace_sql = false trackers.register("sql.trace", function(v) trace_sql = v end)
+local trace_queries = false trackers.register("sql.queries",function(v) trace_queries = v end)
+local report_state = logs.reporter("sql","sqlite")
+
+local helpers = sql.helpers
+local methods = sql.methods
+local validspecification = helpers.validspecification
+local preparetemplate = helpers.preparetemplate
+local splitdata = helpers.splitdata
+local serialize = sql.serialize
+local deserialize = sql.deserialize
+local getserver = sql.getserver
+
+local setmetatable = setmetatable
+local formatters = string.formatters
+
+local get_list_item = sqlite.char_p_array_getitem
+local is_okay = sqlite.SQLITE_OK
+local execute_query = sqlite.sqlite3_exec_lua_callback
+local error_message = sqlite.sqlite3_errmsg
+
+local new_db = sqlite.new_sqlite3_p_array
+local open_db = sqlite.sqlite3_open
+local get_db = sqlite.sqlite3_p_array_getitem
+local close_db = sqlite.sqlite3_close
+local dispose_db = sqlite.delete_sqlite3_p_array
+
+local cache = { }
+
+setmetatable(cache, {
+ __gc = function(t)
+ for k, v in next, t do
+ if trace_sql then
+ report_state("closing session %a",k)
+ end
+ close_db(v.dbh)
+ dispose_db(v.db)
+ end
+ end
+})
+
+-- synchronous journal_mode locking_mode 1000 logger inserts
+--
+-- normal normal normal 6.8
+-- off off normal 0.1
+-- normal off normal 2.1
+-- normal persist normal 5.8
+-- normal truncate normal 4.2
+-- normal truncate exclusive 4.1
+
+local f_preamble = formatters[ [[
+ATTACH `%s` AS `%s` ;
+PRAGMA `%s`.synchronous = normal ;
+PRAGMA journal_mode = truncate ;
+]] ]
+
+local function execute(specification)
+ if trace_sql then
+ report_state("executing sqlite")
+ end
+ if not validspecification(specification) then
+ report_state("error in specification")
+ end
+ local query = preparetemplate(specification)
+ if not query then
+ report_state("error in preparation")
+ return
+ end
+ local base = specification.database -- or specification.presets and specification.presets.database
+ if not base then
+ report_state("no database specified")
+ return
+ end
+ local filename = file.addsuffix(base,"db")
+ local result = { }
+ local keys = { }
+ local id = specification.id
+ local db = nil
+ local dbh = nil
+ local okay = false
+ local preamble = nil
+ if id then
+ local session = cache[id]
+ if session then
+ dbh = session.dbh
+ okay = is_okay
+ else
+ db = new_db(1)
+ okay = open_db(filename,db)
+ dbh = get_db(db,0)
+ preamble = f_preamble(filename,base,base)
+ if okay ~= is_okay then
+ report_state("no session database specified")
+ else
+ cache[id] = {
+ name = filename,
+ db = db,
+ dbh = dbh,
+ }
+ end
+ end
+ else
+ db = new_db(1)
+ okay = open_db(filename,db)
+ dbh = get_db(db,0)
+ preamble = f_preamble(filename,base,base)
+ end
+ if okay ~= is_okay then
+ report_state("no database opened")
+ else
+ local converter = specification.converter
+ local keysdone = false
+ local nofrows = 0
+ local callback = nil
+ if preamble then
+ query = preamble .. query -- only needed in open
+ end
+ if converter then
+ converter = converter.sqlite
+ callback = function(data,nofcolumns,values,fields)
+ local column = { }
+ for i=0,nofcolumns-1 do
+ column[i+1] = get_list_item(values,i)
+ end
+ nofrows = nofrows + 1
+ result[nofrows] = converter(column)
+ return is_okay
+ end
+ --
+ -- callback = converter.sqlite
+ else
+ callback = function(data,nofcolumns,values,fields)
+ local column = { }
+ for i=0,nofcolumns-1 do
+ local field
+ if keysdone then
+ field = keys[i+1]
+ else
+ field = get_list_item(fields,i)
+ keys[i+1] = field
+ end
+ column[field] = get_list_item(values,i)
+ end
+ nofrows = nofrows + 1
+ keysdone = true
+ result[nofrows] = column
+ return is_okay
+ end
+ end
+ local okay = execute_query(dbh,query,callback,nil,nil)
+ if okay ~= is_okay then
+ report_state("error: %s",error_message(dbh))
+ -- elseif converter then
+ -- result = converter.sqlite(result)
+ end
+ end
+ if not id then
+ close_db(dbh)
+ dispose_db(db)
+ end
+ return result, keys
+end
+
+local wraptemplate = [[
+local converters = utilities.sql.converters
+local deserialize = utilities.sql.deserialize
+
+local tostring = tostring
+local tonumber = tonumber
+local booleanstring = string.booleanstring
+
+%s
+
+return function(cells)
+ -- %s (not needed)
+ -- %s (not needed)
+ return {
+ %s
+ }
+end
+]]
+
+local celltemplate = "cells[%s]"
+
+-- todo: how to deal with result ... pass via temp global .. bah .. or
+-- also pass the execute here ... not now
+--
+-- local wraptemplate = [[
+-- local converters = utilities.sql.converters
+-- local deserialize = utilities.sql.deserialize
+--
+-- local tostring = tostring
+-- local tonumber = tonumber
+-- local booleanstring = string.booleanstring
+--
+-- local get_list_item = utilities.sql.sqlite.char_p_array_getitem
+-- local is_okay = utilities.sql.sqlite.SQLITE_OK
+--
+-- %s
+--
+-- return function(data,nofcolumns,values,fields)
+-- -- no %s (data) needed
+-- -- no %s (i) needed
+-- local cells = { }
+-- for i=0,nofcolumns-1 do
+-- cells[i+1] = get_list_item(values,i)
+-- end
+-- result[#result+1] = { %s }
+-- return is_okay
+-- end
+-- ]]
+
+methods.sqlite = {
+ execute = execute,
+ usesfiles = false,
+ wraptemplate = wraptemplate,
+ celltemplate = celltemplate,
+}
diff --git a/tex/context/base/mkiv/util-sql-imp-swiglib.lua b/tex/context/base/mkiv/util-sql-imp-swiglib.lua
index af7012392..786b4bffc 100644
--- a/tex/context/base/mkiv/util-sql-imp-swiglib.lua
+++ b/tex/context/base/mkiv/util-sql-imp-swiglib.lua
@@ -1,4 +1,4 @@
-if not modules then modules = { } end modules ['util-sql-swiglib'] = {
+if not modules then modules = { } end modules ['util-sql-imp-swiglib'] = {
version = 1.001,
comment = "companion to util-sql.lua",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
@@ -132,31 +132,31 @@ end
--
-local typemap = mysql.MYSQL_TYPE_VAR_STRING and {
- [mysql.MYSQL_TYPE_VAR_STRING ] = "string",
- [mysql.MYSQL_TYPE_STRING ] = "string",
- [mysql.MYSQL_TYPE_DECIMAL ] = "number",
- [mysql.MYSQL_TYPE_SHORT ] = "number",
- [mysql.MYSQL_TYPE_LONG ] = "number",
- [mysql.MYSQL_TYPE_FLOAT ] = "number",
- [mysql.MYSQL_TYPE_DOUBLE ] = "number",
- [mysql.MYSQL_TYPE_LONGLONG ] = "number",
- [mysql.MYSQL_TYPE_INT24 ] = "number",
- [mysql.MYSQL_TYPE_YEAR ] = "number",
- [mysql.MYSQL_TYPE_TINY ] = "number",
- [mysql.MYSQL_TYPE_TINY_BLOB ] = "binary",
- [mysql.MYSQL_TYPE_MEDIUM_BLOB] = "binary",
- [mysql.MYSQL_TYPE_LONG_BLOB ] = "binary",
- [mysql.MYSQL_TYPE_BLOB ] = "binary",
- [mysql.MYSQL_TYPE_DATE ] = "date",
- [mysql.MYSQL_TYPE_NEWDATE ] = "date",
- [mysql.MYSQL_TYPE_DATETIME ] = "datetime",
- [mysql.MYSQL_TYPE_TIME ] = "time",
- [mysql.MYSQL_TYPE_TIMESTAMP ] = "time",
- [mysql.MYSQL_TYPE_ENUM ] = "set",
- [mysql.MYSQL_TYPE_SET ] = "set",
- [mysql.MYSQL_TYPE_NULL ] = "null",
-}
+-- local typemap = mysql.MYSQL_TYPE_VAR_STRING and {
+-- [mysql.MYSQL_TYPE_VAR_STRING ] = "string",
+-- [mysql.MYSQL_TYPE_STRING ] = "string",
+-- [mysql.MYSQL_TYPE_DECIMAL ] = "number",
+-- [mysql.MYSQL_TYPE_SHORT ] = "number",
+-- [mysql.MYSQL_TYPE_LONG ] = "number",
+-- [mysql.MYSQL_TYPE_FLOAT ] = "number",
+-- [mysql.MYSQL_TYPE_DOUBLE ] = "number",
+-- [mysql.MYSQL_TYPE_LONGLONG ] = "number",
+-- [mysql.MYSQL_TYPE_INT24 ] = "number",
+-- [mysql.MYSQL_TYPE_YEAR ] = "number",
+-- [mysql.MYSQL_TYPE_TINY ] = "number",
+-- [mysql.MYSQL_TYPE_TINY_BLOB ] = "binary",
+-- [mysql.MYSQL_TYPE_MEDIUM_BLOB] = "binary",
+-- [mysql.MYSQL_TYPE_LONG_BLOB ] = "binary",
+-- [mysql.MYSQL_TYPE_BLOB ] = "binary",
+-- [mysql.MYSQL_TYPE_DATE ] = "date",
+-- [mysql.MYSQL_TYPE_NEWDATE ] = "date",
+-- [mysql.MYSQL_TYPE_DATETIME ] = "datetime",
+-- [mysql.MYSQL_TYPE_TIME ] = "time",
+-- [mysql.MYSQL_TYPE_TIMESTAMP ] = "time",
+-- [mysql.MYSQL_TYPE_ENUM ] = "set",
+-- [mysql.MYSQL_TYPE_SET ] = "set",
+-- [mysql.MYSQL_TYPE_NULL ] = "null",
+-- }
-- real_escape_string
@@ -436,7 +436,7 @@ local function datafetched(specification,query,converter)
local q = query[i]
local r, m = connection:execute(q)
if m then
- report_state("error in query, stage: %s",string.collapsespaces(q))
+ report_state("error in query, stage: %s",string.collapsespaces(q or "?"))
message = message and format("%s\n%s",message,m) or m
end
if type(r) == "table" then
diff --git a/tex/context/base/mkiv/util-sql-loggers.lua b/tex/context/base/mkiv/util-sql-loggers.lua
index ceb1ff75c..4473f8971 100644
--- a/tex/context/base/mkiv/util-sql-loggers.lua
+++ b/tex/context/base/mkiv/util-sql-loggers.lua
@@ -65,12 +65,21 @@ local template = [[
DEFAULT CHARSET = utf8 ;
]]
+local sqlite_template = [[
+ CREATE TABLE IF NOT EXISTS %basename% (
+ `id` INTEGER PRIMARY KEY AUTOINCREMENT,
+ `time` INTEGER NOT NULL,
+ `type` INTEGER NOT NULL,
+ `action` TEXT NOT NULL,
+ `data` TEXT
+ ) ;
+]]
+
function loggers.createdb(presets,datatable)
local db = checkeddb(presets,datatable)
-
db.execute {
- template = template,
+ template = db.usedmethod == "sqlite" and sqlite_template or template,
variables = {
basename = db.basename,
},
@@ -115,7 +124,11 @@ local template =[[
) ;
]]
-function loggers.save(db,data) -- beware, we pass type and action in the data (saves a table)
+-- beware, when we either pass a dat afield explicitly or we're using
+-- a flat table and then nill type and action in the data (which
+-- saves a table)
+
+function loggers.save(db,data)
if data then
@@ -123,8 +136,16 @@ function loggers.save(db,data) -- beware, we pass type and action in the data (s
local kind = totype[data.type]
local action = data.action or "unknown"
- data.type = nil
- data.action = nil
+ local extra = data.data
+
+ if extra then
+ -- we have a dedicated data table
+ data = extra
+ else
+ -- we have a flat table
+ data.type = nil
+ data.action = nil
+ end
db.execute {
template = template,
@@ -141,28 +162,49 @@ function loggers.save(db,data) -- beware, we pass type and action in the data (s
end
--- local template =[[
--- REMOVE FROM
--- %basename%
--- WHERE
--- `token` = '%token%' ;
--- ]]
---
--- function loggers.remove(db,token)
---
--- db.execute {
--- template = template,
--- variables = {
--- basename = db.basename,
--- token = token,
--- },
--- }
---
--- if trace_sql then
--- report("removed: %s",token)
--- end
---
--- end
+local template =[[
+ DELETE FROM %basename% %WHERE% ;
+]]
+
+function loggers.cleanup(db,specification)
+
+ specification = specification or { }
+
+ local today = os.date("*t")
+ local before = specification.before or today
+ local where = { }
+
+ if type(before) == "number" then
+ before = os.date(before)
+ end
+
+ before = os.time {
+ day = before.day or today.day,
+ month = before.month or today.month,
+ year = before.year or today.year,
+ hour = before.hour or 0,
+ minute = before.minute or 0,
+ second = before.second or 0,
+ isdst = true,
+ }
+
+ where[#where+1] = format("`time` < %s",before)
+
+ db.execute {
+ template = template,
+ variables = {
+ basename = db.basename,
+ WHERE = format("WHERE\n%s",concat(where," AND ")),
+ },
+ }
+
+ if db.usedmethod == "sqlite" then
+ db.execute {
+ template = "VACUUM ;",
+ }
+ end
+
+end
local template_nop =[[
SELECT
diff --git a/tex/context/base/mkiv/util-sql-tickets.lua b/tex/context/base/mkiv/util-sql-tickets.lua
index 5e958299d..f392c0b91 100644
--- a/tex/context/base/mkiv/util-sql-tickets.lua
+++ b/tex/context/base/mkiv/util-sql-tickets.lua
@@ -53,7 +53,7 @@ tickets.statustags = statustags
local s_unknown = status.unknown
local s_pending = status.pending
local s_busy = status.busy
-local s_finished = status.finished
+----- s_finished = status.finished
local s_dependent = status.dependent
local s_error = status.error
local s_deleted = status.deleted
@@ -398,7 +398,8 @@ local template_cleanup_nop =[[
function tickets.cleanupdb(db,delta,nodata) -- maybe delta in db
- local time = delta and (ostime() - delta) or 0
+ local now = ostime()
+ local time = delta and (now - delta) or now
local records, keys = db.execute {
template = nodata and template_cleanup_nop or template_cleanup_yes,
diff --git a/tex/context/base/mkiv/util-sql.lua b/tex/context/base/mkiv/util-sql.lua
index 84cbb1692..09056c048 100644
--- a/tex/context/base/mkiv/util-sql.lua
+++ b/tex/context/base/mkiv/util-sql.lua
@@ -65,8 +65,6 @@ local P, S, V, C, Cs, Ct, Cc, Cg, Cf, patterns, lpegmatch = lpeg.P, lpeg.S, lpeg
local concat = table.concat
local osuuid = os.uuid
-local osclock = os.clock or os.time
-local ostime = os.time
local setmetatableindex = table.setmetatableindex
local trace_sql = false trackers.register("sql.trace", function(v) trace_sql = v end)
@@ -242,8 +240,9 @@ local function validspecification(specification)
setmetatable(specification,defaults)
end
local templatefile = specification.templatefile or "query"
- local queryfile = specification.queryfile or presets.queryfile or file.nameonly(templatefile) .. "-temp.sql"
- local resultfile = specification.resultfile or presets.resultfile or file.nameonly(templatefile) .. "-temp.dat"
+ local name = file.nameonly(templatefile)
+ local queryfile = specification.queryfile or presets.queryfile or format("%s-temp.sql",name)
+ local resultfile = specification.resultfile or presets.resultfile or format("%s-temp.dat",name)
specification.queryfile = queryfile
specification.resultfile = resultfile
if trace_sql then
@@ -313,21 +312,36 @@ sql.setserver("mysql")
-- helper:
+local sqlmethods = sql.methods
+
function sql.usedatabase(presets,datatable)
local name = datatable or presets.datatable
if name then
- local method = presets.method and sql.methods[presets.method] or sql.methods.client
+ local usedmethod = presets.method
+ local method = usedmethod and sqlmethods[usedmethod]
+ if not method then
+ usedmethod = currentmethod
+ method = usedmethod and sqlmethods[usedmethod]
+ end
+ if not method then
+ usedmethod = sql.methods.client
+ method = usedmethod and sqlmethods[usedmethod]
+ end
local base = presets.database or "test"
local basename = format("`%s`.`%s`",base,name)
local execute = nil
local m_execute = method.execute
- if method.usesfiles then
+ if not m_execute then
+ execute = function()
+ report_state("no valid execute handler")
+ end
+ elseif method.usesfiles then
local queryfile = presets.queryfile or format("%s-temp.sql",name)
local resultfile = presets.resultfile or format("%s-temp.dat",name)
execute = function(specification) -- variables template
- if not specification.presets then specification.presets = presets end
- if not specification.queryfile then specification.queryfile = queryfile end
- if not specification.resultfile then specification.resultfile = queryfile end
+ if not specification.presets then specification.presets = presets end
+ if not specification.queryfile then specification.queryfile = queryfile end
+ if not specification.resultfile then specification.resultfile = resultfile end
return m_execute(specification)
end
else
@@ -349,6 +363,7 @@ function sql.usedatabase(presets,datatable)
end
end
return {
+ usedmethod = usedmethod,
presets = preset,
base = base,
name = name,
diff --git a/tex/context/base/mkiv/util-str.lua b/tex/context/base/mkiv/util-str.lua
index 28b75dbc5..cebbc6be2 100644
--- a/tex/context/base/mkiv/util-str.lua
+++ b/tex/context/base/mkiv/util-str.lua
@@ -10,7 +10,7 @@ utilities = utilities or { }
utilities.strings = utilities.strings or { }
local strings = utilities.strings
-local format, gsub, rep, sub = string.format, string.gsub, string.rep, string.sub
+local format, gsub, rep, sub, find = string.format, string.gsub, string.rep, string.sub, string.find
local load, dump = load, string.dump
local tonumber, type, tostring = tonumber, type, tostring
local unpack, concat = table.unpack, table.concat
@@ -141,6 +141,7 @@ local pattern =
)^1)
function strings.tabtospace(str,tab)
+ -- no real gain in first checking if a \t is there
return lpegmatch(pattern,str,1,tab or 7)
end
@@ -385,6 +386,43 @@ function number.signed(i)
end
end
+-- maybe to util-num
+
+local digit = patterns.digit
+local period = patterns.period
+local three = digit * digit * digit
+
+local splitter = Cs (
+ (((1 - (three^1 * period))^1 + C(three)) * (Carg(1) * three)^1 + C((1-period)^1))
+ * (P(1)/"" * Carg(2)) * C(2)
+)
+
+patterns.formattednumber = splitter
+
+function number.formatted(n,sep1,sep2)
+ local s = type(s) == "string" and n or format("%0.2f",n)
+ if sep1 == true then
+ return lpegmatch(splitter,s,1,".",",")
+ elseif sep1 == "." then
+ return lpegmatch(splitter,s,1,sep1,sep2 or ",")
+ elseif sep1 == "," then
+ return lpegmatch(splitter,s,1,sep1,sep2 or ".")
+ else
+ return lpegmatch(splitter,s,1,sep1 or ",",sep2 or ".")
+ end
+end
+
+-- print(number.formatted(1))
+-- print(number.formatted(12))
+-- print(number.formatted(123))
+-- print(number.formatted(1234))
+-- print(number.formatted(12345))
+-- print(number.formatted(123456))
+-- print(number.formatted(1234567))
+-- print(number.formatted(12345678))
+-- print(number.formatted(12345678,true))
+-- print(number.formatted(1234.56,"!","?"))
+
local zero = P("0")^1 / ""
local plus = P("+") / ""
local minus = P("-")
@@ -412,6 +450,31 @@ function number.sparseexponent(f,n)
return tostring(n)
end
+local hf = { }
+local hs = { }
+
+setmetatable(hf, { __index = function(t,k)
+ local v = "%." .. k .. "f"
+ t[k] = v
+ return v
+end } )
+
+setmetatable(hs, { __index = function(t,k)
+ local v = "%" .. k .. "s"
+ t[k] = v
+ return v
+end } )
+
+function number.formattedfloat(n,b,a)
+ local s = format(hf[a],n)
+ local l = (b or 0) + (a or 0) + 1
+ if #s < l then
+ return format(hs[l],s)
+ else
+ return s
+ end
+end
+
local template = [[
%s
%s
@@ -442,6 +505,7 @@ local autodouble=string.autodouble
local sequenced=table.sequenced
local formattednumber=number.formatted
local sparseexponent=number.sparseexponent
+local formattedfloat=number.formattedfloat
]]
else
@@ -467,6 +531,7 @@ else
sequenced = table.sequenced,
formattednumber = number.formatted,
sparseexponent = number.sparseexponent,
+ formattedfloat = number.formattedfloat
}
end
@@ -484,6 +549,9 @@ setmetatable(arguments, { __index =
})
local prefix_any = C((S("+- .") + R("09"))^0)
+local prefix_sub = (C((S("+-") + R("09"))^0) + Cc(0))
+ * P(".")
+ * (C((S("+-") + R("09"))^0) + Cc(0))
local prefix_tab = P("{") * C((1-P("}"))^0) * P("}") + C((1-R("az","AZ","09","%%"))^0)
-- we've split all cases as then we can optimize them (let's omit the fuzzy u)
@@ -557,6 +625,11 @@ local format_F = function(f) -- beware, no cast to number
end
end
+local format_k = function(b,a) -- slow
+ n = n + 1
+ return format("formattedfloat(a%s,%i,%i)",n,b or 0, a or 0)
+end
+
local format_g = function(f)
n = n + 1
return format("format('%%%sg',a%s)",f,n)
@@ -732,43 +805,6 @@ local format_W = function(f) -- handy when doing depth related indent
return format("nspaces[%s]",tonumber(f) or 0)
end
--- maybe to util-num
-
-local digit = patterns.digit
-local period = patterns.period
-local three = digit * digit * digit
-
-local splitter = Cs (
- (((1 - (three^1 * period))^1 + C(three)) * (Carg(1) * three)^1 + C((1-period)^1))
- * (P(1)/"" * Carg(2)) * C(2)
-)
-
-patterns.formattednumber = splitter
-
-function number.formatted(n,sep1,sep2)
- local s = type(s) == "string" and n or format("%0.2f",n)
- if sep1 == true then
- return lpegmatch(splitter,s,1,".",",")
- elseif sep1 == "." then
- return lpegmatch(splitter,s,1,sep1,sep2 or ",")
- elseif sep1 == "," then
- return lpegmatch(splitter,s,1,sep1,sep2 or ".")
- else
- return lpegmatch(splitter,s,1,sep1 or ",",sep2 or ".")
- end
-end
-
--- print(number.formatted(1))
--- print(number.formatted(12))
--- print(number.formatted(123))
--- print(number.formatted(1234))
--- print(number.formatted(12345))
--- print(number.formatted(123456))
--- print(number.formatted(1234567))
--- print(number.formatted(12345678))
--- print(number.formatted(12345678,true))
--- print(number.formatted(1234.56,"!","?"))
-
local format_m = function(f)
n = n + 1
if not f or f == "" then
@@ -801,9 +837,16 @@ end
local format_extension = function(extensions,f,name)
local extension = extensions[name] or "tostring(%s)"
local f = tonumber(f) or 1
+ local w = find(extension,"%.%.%.")
if f == 0 then
+ if w then
+ extension = gsub(extension,"%.%.%.","")
+ end
return extension
elseif f == 1 then
+ if w then
+ extension = gsub(extension,"%.%.%.","%%s")
+ end
n = n + 1
local a = "a" .. n
return format(extension,a,a) -- maybe more times?
@@ -811,10 +854,16 @@ local format_extension = function(extensions,f,name)
local a = "a" .. (n + f + 1)
return format(extension,a,a)
else
+ if w then
+ extension = gsub(extension,"%.%.%.",rep("%%s,",f-1).."%%s")
+ end
+ -- we could fill an array and then n = n + 1 unpack(t,n,n+f) but as we
+ -- cache we don't save much and there are hardly any extensions anyway
local t = { }
for i=1,f do
n = n + 1
- t[#t+1] = "a" .. n
+ -- t[#t+1] = "a" .. n
+ t[i] = "a" .. n
end
return format(extension,unpack(t))
end
@@ -824,6 +873,8 @@ end
-- extensions : %!tag!
+-- can be made faster but not called that often
+
local builder = Cs { "start",
start = (
(
@@ -840,6 +891,7 @@ local builder = Cs { "start",
+ V("S") -- new
+ V("Q") -- new
+ V("N") -- new
+ + V("k") -- new
--
+ V("r")
+ V("h") + V("H") + V("u") + V("U")
@@ -852,10 +904,10 @@ local builder = Cs { "start",
+ V("a") -- new
+ V("A") -- new
+ V("j") + V("J") -- stripped e E
- + V("m") + V("M") -- new
+ + V("m") + V("M") -- new (formatted number)
+ V("z") -- new
--
- -- + V("?") -- ignores probably messed up %
+ -- + V("?") -- ignored, probably messed up %
)
+ V("*")
)
@@ -879,6 +931,7 @@ local builder = Cs { "start",
["S"] = (prefix_any * P("S")) / format_S, -- %S => %s (tostring)
["Q"] = (prefix_any * P("Q")) / format_S, -- %Q => %q (tostring)
["N"] = (prefix_any * P("N")) / format_N, -- %N => tonumber (strips leading zeros)
+ ["k"] = (prefix_sub * P("k")) / format_k, -- %k => like f but with n.m
["c"] = (prefix_any * P("c")) / format_c, -- %c => utf character (extension to regular)
["C"] = (prefix_any * P("C")) / format_C, -- %c => U+.... utf character
--
@@ -1065,10 +1118,6 @@ patterns.luaquoted = Cs(Cc('"') * ((1-S('"\n'))^1 + P('"')/'\\"' + P('\n')/'\\n"
-- escaping by lpeg is faster for strings without quotes, slower on a string with quotes, but
-- faster again when other q-escapables are found (the ones we don't need to escape)
--- add(formatters,"xml", [[lpegmatch(xmlescape,%s)]],[[local xmlescape = lpeg.patterns.xmlescape]])
--- add(formatters,"tex", [[lpegmatch(texescape,%s)]],[[local texescape = lpeg.patterns.texescape]])
--- add(formatters,"lua", [[lpegmatch(luaescape,%s)]],[[local luaescape = lpeg.patterns.luaescape]])
-
if _LUAVERSION < 5.2 then
add(formatters,"xml",[[lpegmatch(xmlescape,%s)]],"local xmlescape = lpeg.patterns.xmlescape")
diff --git a/tex/context/base/mkiv/util-tab.lua b/tex/context/base/mkiv/util-tab.lua
index a6239adf4..fb2702228 100644
--- a/tex/context/base/mkiv/util-tab.lua
+++ b/tex/context/base/mkiv/util-tab.lua
@@ -12,7 +12,7 @@ local tables = utilities.tables
local format, gmatch, gsub, sub = string.format, string.gmatch, string.gsub, string.sub
local concat, insert, remove, sort = table.concat, table.insert, table.remove, table.sort
-local setmetatable, getmetatable, tonumber, tostring = setmetatable, getmetatable, tonumber, tostring
+local setmetatable, getmetatable, tonumber, tostring, rawget = setmetatable, getmetatable, tonumber, tostring, rawget
local type, next, rawset, tonumber, tostring, load, select = type, next, rawset, tonumber, tostring, load, select
local lpegmatch, P, Cs, Cc = lpeg.match, lpeg.P, lpeg.Cs, lpeg.Cc
local sortedkeys, sortedpairs = table.sortedkeys, table.sortedpairs
@@ -169,7 +169,8 @@ function table.tocsv(t,specification)
r[f] = tostring(field)
end
end
- result[#result+1] = concat(r,separator)
+ -- result[#result+1] = concat(r,separator)
+ result[i+1] = concat(r,separator)
end
return concat(result,"\n")
else
@@ -485,11 +486,12 @@ end
local selfmapper = { __index = function(t,k) t[k] = k return k end }
-function table.twowaymapper(t)
- if not t then
- t = { }
- else
- for i=0,#t do
+function table.twowaymapper(t) -- takes a 0/1 .. n indexed table and returns
+ if not t then -- it with string-numbers as indices + reverse
+ t = { } -- mapping (all strings) .. used in cvs etc but
+ else -- typically a helper that one forgets about
+ local zero = rawget(t,0) -- so it might move someplace else
+ for i=zero and 0 or 1,#t do
local ti = t[i] -- t[1] = "one"
if ti then
local i = tostring(i)
@@ -497,7 +499,6 @@ function table.twowaymapper(t)
t[ti] = i -- t["one"] = "1"
end
end
- t[""] = t[0] or ""
end
-- setmetatableindex(t,"key")
setmetatable(t,selfmapper)
@@ -563,98 +564,68 @@ local original_serialize = table.serialize -- the extensive one, the one we star
-- 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
-local function serialize(root,name,specification)
-
- if type(specification) == "table" then
- return original_serialize(root,name,specification) -- the original one
- end
+local is_simple_table = table.is_simple_table
- local t -- = { }
- local n = 1
- local unknown = false
-
--- local function simple_table(t)
--- local ts = #t
--- if ts > 0 then
--- local n = 0
--- for _, v in next, t do
--- n = n + 1
--- if type(v) == "table" then
+-- local function is_simple_table(t)
+-- local nt = #t
+-- if nt > 0 then
+-- local n = 0
+-- for _, v in next, t do
+-- n = n + 1
+-- if type(v) == "table" then
+-- return nil
+-- end
+-- end
+-- -- local haszero = t[0]
+-- local haszero = rawget(t,0) -- don't trigger meta
+-- if n == nt then
+-- local tt = { }
+-- for i=1,nt do
+-- local v = t[i]
+-- local tv = type(v)
+-- if tv == "number" then
+-- tt[i] = v -- not needed tostring(v)
+-- elseif tv == "string" then
+-- tt[i] = format("%q",v) -- f_string(v)
+-- elseif tv == "boolean" then
+-- tt[i] = v and "true" or "false"
+-- else
-- return nil
-- end
-- end
--- if n == ts then
--- local tt = { }
--- local nt = 0
--- for i=1,ts do
--- local v = t[i]
--- local tv = type(v)
--- nt = nt + 1
--- if tv == "number" then
--- tt[nt] = v
--- elseif tv == "string" then
--- tt[nt] = format("%q",v) -- f_string(v)
--- elseif tv == "boolean" then
--- tt[nt] = v and "true" or "false"
--- else
--- return nil
--- 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
--- return tt
-- end
+-- tt[1] = "[0] = " .. tt[1]
+-- return tt
-- end
--- return nil
-- end
+-- return nil
+-- end
- local function simple_table(t)
- local nt = #t
- if nt > 0 then
- local n = 0
- for _, v in next, t do
- n = n + 1
- if type(v) == "table" then
- return nil
- end
- end
- local haszero = t[0]
- if n == nt then
- local tt = { }
- for i=1,nt do
- local v = t[i]
- local tv = type(v)
- if tv == "number" then
- tt[i] = v -- not needed tostring(v)
- elseif tv == "string" then
- tt[i] = format("%q",v) -- f_string(v)
- elseif tv == "boolean" then
- tt[i] = v and "true" or "false"
- else
- return nil
- 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
+local function serialize(root,name,specification)
+
+ if type(specification) == "table" then
+ return original_serialize(root,name,specification) -- the original one
end
+ local t -- = { }
+ local n = 1
+ local unknown = false
+
local function do_serialize(root,name,depth,level,indexed)
if level > 0 then
n = n + 1
@@ -680,7 +651,8 @@ local function serialize(root,name,specification)
local last = 0
last = #root
for k=1,last do
- if root[k] == nil then
+ if rawget(root,k) == nil then
+ -- if root[k] == nil then
last = k - 1
break
end
@@ -703,7 +675,7 @@ local function serialize(root,name,specification)
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)
+ local st = is_simple_table(v)
if st then
n = n + 1 t[n] = f_val_seq(depth,st)
else
@@ -747,7 +719,7 @@ local function serialize(root,name,specification)
n = n + 1 t[n] = f_key_str_value_not(depth,tostring(k))
end
else
- local st = simple_table(v)
+ local st = is_simple_table(v)
if not st then
do_serialize(v,k,depth,level+1)
elseif tk == "number" then
@@ -810,14 +782,15 @@ local function serialize(root,name,specification)
if root then
-- The dummy access will initialize a table that has a delayed initialization
- -- using a metatable. (maybe explicitly test for metatable)
+ -- using a metatable. (maybe explicitly test for metatable). This can crash on
+ -- metatables that check the index against a number.
if getmetatable(root) then -- todo: make this an option, maybe even per subtable
- local dummy = root._w_h_a_t_e_v_e_r_
+ local dummy = root._w_h_a_t_e_v_e_r_ -- needed
root._w_h_a_t_e_v_e_r_ = nil
end
-- Let's forget about empty tables.
if next(root) ~= nil then
- local st = simple_table(root)
+ local st = is_simple_table(root)
if st then
return t[1] .. f_fin_seq(st) -- todo: move up and in one go
else
@@ -833,5 +806,10 @@ end
table.serialize = serialize
if setinspector then
- setinspector("table",function(v) if type(v) == "table" then print(serialize(v,"table",{})) return true end end)
+ setinspector("table",function(v)
+ if type(v) == "table" then
+ print(serialize(v,"table",{ metacheck = false }))
+ return true
+ end
+ end)
end
diff --git a/tex/context/fonts/mkiv/bonum-math.lfg b/tex/context/fonts/mkiv/bonum-math.lfg
new file mode 100644
index 000000000..00576aaef
--- /dev/null
+++ b/tex/context/fonts/mkiv/bonum-math.lfg
@@ -0,0 +1,19 @@
+local kern_200 = { bottomright = { { kern = -200 } } }
+local kern_100 = { bottomright = { { kern = -100 } } }
+
+return {
+ name = "bonum-math",
+ version = "1.00",
+ comment = "Goodies that complement bonum.",
+ author = "Hans Hagen",
+ copyright = "ConTeXt development team",
+ mathematics = {
+ kerns = {
+ [0x1D449] = kern_200, --
+ [0x1D44A] = kern_100, -- 𝑊
+ },
+ alternates = {
+ dotless = { feature = 'dtls', value = 1, comment = "Mathematical Dotless Forms" },
+ },
+ },
+}
diff --git a/tex/context/fonts/mkiv/cambria-math.lfg b/tex/context/fonts/mkiv/cambria-math.lfg
index 6415069e6..ae875e64d 100644
--- a/tex/context/fonts/mkiv/cambria-math.lfg
+++ b/tex/context/fonts/mkiv/cambria-math.lfg
@@ -44,6 +44,11 @@ return {
mathematics = {
parameters = {
DisplayOperatorMinHeight = FixDisplayOperatorMinHeight,
- }
- }
+ },
+ -- kernpairs = { -- \setupmathematics[kernpairs=yes]
+ -- [0x1D44E] = {
+ -- [0x1D44F] = 1000, -- 𝑎𝑏 demo
+ -- }
+ -- },
+ },
}
diff --git a/tex/context/fonts/mkiv/dejavu-math.lfg b/tex/context/fonts/mkiv/dejavu-math.lfg
new file mode 100644
index 000000000..d28c69060
--- /dev/null
+++ b/tex/context/fonts/mkiv/dejavu-math.lfg
@@ -0,0 +1,18 @@
+local kern_250 = { bottomright = { { kern = -250 } } }
+
+return {
+ name = "dejavu-math",
+ version = "1.00",
+ comment = "Goodies that complement dejavu.",
+ author = "Hans Hagen",
+ copyright = "ConTeXt development team",
+ mathematics = {
+ kerns = {
+ [0x1D449] = kern_250, --
+ [0x1D44A] = kern_250, -- 𝑊
+ },
+ alternates = {
+ dotless = { feature = 'dtls', value = 1, comment = "Mathematical Dotless Forms" },
+ },
+ },
+}
diff --git a/tex/context/fonts/mkiv/hanbatanglvt.lfg b/tex/context/fonts/mkiv/hanbatanglvt.lfg
index 333743348..a7ec0224a 100644
--- a/tex/context/fonts/mkiv/hanbatanglvt.lfg
+++ b/tex/context/fonts/mkiv/hanbatanglvt.lfg
@@ -1,19 +1,30 @@
--- Maybe some day I will do this more efficient but for the moment it's okay. (We need
--- access to the names table then.)
-
-local f_uni_base = string.formatters["uni%04X"]
-local f_uni_plus = string.formatters["uni%04X.y%s"]
-
-local function range(first,last)
- local t = { }
- for i=first,last do
- t[#t+1] = f_uni_base(i)
- for j=0,19 do
- t[#t+1] = f_uni_plus(i,j)
- end
- end
- return t
-end
+-- local f_uni_base = string.formatters["uni%04X"]
+-- local f_uni_plus = string.formatters["uni%04X.y%s"]
+--
+-- local function range(first,last)
+-- local t = { }
+-- for i=first,last do
+-- t[#t+1] = f_uni_base(i)
+-- for j=0,19 do
+-- t[#t+1] = f_uni_plus(i,j)
+-- end
+-- end
+-- return t
+-- end
+--
+-- return {
+-- name = "hanbatanglvt",
+-- version = "1.00",
+-- comment = "Goodies that complement the hanbatanglvt fonts.",
+-- author = "Hans Hagen",
+-- colorschemes = {
+-- default = {
+-- range(0x01100,0x0115F), -- jamo_initial (r/c)
+-- range(0x01160,0x011A7), -- jamo_medial (g/m)
+-- range(0x011A8,0x011FF), -- jamo_final (b/y)
+-- }
+-- }
+-- }
return {
name = "hanbatanglvt",
@@ -22,9 +33,10 @@ return {
author = "Hans Hagen",
colorschemes = {
default = {
- range(0x01100,0x0115F), -- jamo_initial (r/c)
- range(0x01160,0x011A7), -- jamo_medial (g/m)
- range(0x011A8,0x011FF), -- jamo_final (b/y)
+ { "0x01100:0x0115F" }, -- jamo_initial (r/c)
+ { "0x01160:0x011A7" }, -- jamo_medial (g/m)
+ { "0x011A8:0x011FF" }, -- jamo_final (b/y)
}
}
}
+
diff --git a/tex/context/fonts/mkiv/koeielettersot.lfg b/tex/context/fonts/mkiv/koeielettersot.lfg
new file mode 100644
index 000000000..74bf2dd49
--- /dev/null
+++ b/tex/context/fonts/mkiv/koeielettersot.lfg
@@ -0,0 +1,16 @@
+return {
+ name = "koeielettersot",
+ version = "1.00",
+ comment = "Goodies that complement koeielettersot",
+ author = "Hans Hagen",
+ copyright = "ConTeXt development team",
+ mathematics = {
+ rules = {
+ ["radical.extender"] = "radical.extender",
+ ["radical.end"] = "radical.end",
+ ["hrule.begin"] = "rule.begin",
+ ["hrule.extender"] = "rule.ex",
+ ["hrule.end"] = "rule.end",
+ }
+ }
+}
diff --git a/tex/context/fonts/mkiv/lm.lfg b/tex/context/fonts/mkiv/lm.lfg
index 546d18def..aebedd01b 100644
--- a/tex/context/fonts/mkiv/lm.lfg
+++ b/tex/context/fonts/mkiv/lm.lfg
@@ -1,6 +1,9 @@
-- In order to be able to use beta math fonts, we use our own file name and
-- always remap.
+local kern_150 = { bottomright = { { kern = -150 } } }
+local kern_200 = { bottomright = { { kern = -200 } } }
+
return {
name = "latin modern",
version = "1.00",
@@ -14,11 +17,24 @@ return {
-- mathematics.tweaks.fixoverline,
},
},
+ kerns = {
+ [0x1D449] = kern_150, --
+ [0x1D44A] = kern_200, -- 𝑊
+ },
dimensions = {
-- always applied
-- default = {
-- },
-- driven by 'mathdimensions' feature
+ default = {
+ -- the root is quite displaced
+ [0x221A] = {
+ -- 73, -960, 853, 40
+ yoffset = 960 - 40,
+ height = 960,
+ depth = 40,
+ },
+ },
signs = {
-- set dimensions
-- [0x00B1] = { -- ±
diff --git a/tex/context/fonts/mkiv/lucida-opentype-math.lfg b/tex/context/fonts/mkiv/lucida-opentype-math.lfg
index 946458dea..29206da1a 100644
--- a/tex/context/fonts/mkiv/lucida-opentype-math.lfg
+++ b/tex/context/fonts/mkiv/lucida-opentype-math.lfg
@@ -1,3 +1,5 @@
+----- kern_250 = { bottomright = { { kern = -250 } }, force = true }
+
return {
name = "lucida-opentype-math",
version = "1.00",
@@ -13,6 +15,10 @@ return {
zero = { feature = 'ss05', value = 1, comment = "Mathematical Alternative Zero" },
partial = { feature = 'ss20', value = 1, comment = "Mathematical Alternative Upright Partial Differential" },
},
+ -- kerns = {
+ -- [0x1D449] = kern_250, --
+ -- [0x1D44A] = kern_250, -- 𝑊
+ -- },
dimensions = {
default = { -- experimental values
[0x2044] = { xoffset = 275, width = 600 },
diff --git a/tex/context/fonts/mkiv/minion-math.lfg b/tex/context/fonts/mkiv/minion-math.lfg
new file mode 100644
index 000000000..a4f539ec7
--- /dev/null
+++ b/tex/context/fonts/mkiv/minion-math.lfg
@@ -0,0 +1,30 @@
+local kern_100 = { bottomright = { { kern = -100 } } }
+local kern_150 = { bottomright = { { kern = -150 } } }
+local kern_200 = { bottomright = { { kern = -200 } } }
+
+return {
+ name = "minion-math",
+ version = "1.00",
+ comment = "Goodies that complement minion math.",
+ author = "Hans Hagen",
+ copyright = "ConTeXt development team",
+ designsizes = {
+ ["Minion-Math"] = {
+ ["8.4pt"] = "file:MinionMath-Tiny.otf",
+ ["9.8pt"] = "file:MinionMath-Capt.otf",
+ default = "file:MinionMath-Regular.otf",
+ },
+ ["Minion-BoldMath"] = {
+ default = "file:MinionMath-Semibold.otf",
+ },
+ ["Minion-MediumMath"] = {
+ default = "file:MinionMath-Semibold.otf",
+ },
+ },
+ mathematics = {
+ kerns = {
+ [0x1D449] = kern_200, -- 𝑉
+ [0x1D44A] = kern_150, -- 𝑊
+ },
+ },
+}
diff --git a/tex/context/fonts/mkiv/minion.lfg b/tex/context/fonts/mkiv/minion.lfg
new file mode 100644
index 000000000..84f01b6a9
--- /dev/null
+++ b/tex/context/fonts/mkiv/minion.lfg
@@ -0,0 +1,54 @@
+-- We just assume that Minion Pro is used. After all it's a commercial font so
+-- that is probably whey people will buy.
+
+return {
+ name = "minion",
+ version = "1.00",
+ comment = "Goodies that complement minion pro.",
+ author = "Hans Hagen and Mathias Schickel",
+ copyright = "ConTeXt development team",
+ designsizes = {
+ ["Minion-Regular"] = {
+ ["9.5pt"] = "file:MinionPro-Capt.otf",
+ ["12.5pt"] = "file:MinionPro-Regular.otf",
+ ["14.5pt"] = "file:MinionPro-Subh.otf",
+ ["16pt"] = "file:MinionPro-Disp.otf",
+ default = "file:MinionPro-Regular.otf",
+ },
+ ["Minion-Italic"] = {
+ ["9.5pt"] = "file:MinionPro-ItCapt.otf",
+ ["12.5pt"] = "file:MinionPro-It.otf",
+ ["14.5pt"] = "file:MinionPro-ItSubh.otf",
+ ["16pt"] = "file:MinionPro-ItDisp.otf",
+ default = "file:MinionPro-It.otf",
+ },
+ ["Minion-Bold"] = {
+ ["9.5pt"] = "file:MinionPro-BoldCapt.otf",
+ ["12.5pt"] = "file:MinionPro-Bold.otf",
+ ["14.5pt"] = "file:MinionPro-BoldSubh.otf",
+ ["16pt"] = "file:MinionPro-BoldDisp.otf",
+ default = "file:MinionPro-Bold.otf",
+ },
+ ["Minion-BoldItalic"] = {
+ ["9.5pt"] = "file:MinionPro-BoldItCapt.otf",
+ ["12.5pt"] = "file:MinionPro-BoldIt.otf",
+ ["14.5pt"] = "file:MinionPro-BoldItSubh.otf",
+ ["16pt"] = "file:MinionPro-BoldItDisp.otf",
+ default = "file:MinionPro-It.otf",
+ },
+ ["Minion-Medium"] = {
+ ["9.5pt"] = "file:MinionPro-SemiboldCapt.otf",
+ ["12.5pt"] = "file:MinionPro-Semibold.otf",
+ ["14.5pt"] = "file:MinionPro-SemiboldSubh.otf",
+ ["16pt"] = "file:MinionPro-SemiboldDisp.otf",
+ default = "file:MinionPro-Semibold.otf",
+ },
+ ["Minion-MediumItalic"] = {
+ ["9.5pt"] = "file:MinionPro-SemiboldItCapt.otf",
+ ["12.5pt"] = "file:MinionPro-SemiboldIt.otf",
+ ["14.5pt"] = "file:MinionPro-SemiboldItSubh.otf",
+ ["16pt"] = "file:MinionPro-SemiboldItDisp.otf",
+ default = "file:MinionPro-SemiboldIt.otf",
+ },
+ },
+}
diff --git a/tex/context/fonts/mkiv/pagella-math.lfg b/tex/context/fonts/mkiv/pagella-math.lfg
new file mode 100644
index 000000000..40d50383b
--- /dev/null
+++ b/tex/context/fonts/mkiv/pagella-math.lfg
@@ -0,0 +1,19 @@
+local kern_200 = { bottomright = { { kern = -200 } } }
+local kern_100 = { bottomright = { { kern = -100 } } }
+
+return {
+ name = "pagella-math",
+ version = "1.00",
+ comment = "Goodies that complement pagella.",
+ author = "Hans Hagen",
+ copyright = "ConTeXt development team",
+ mathematics = {
+ kerns = {
+ [0x1D449] = kern_200, --
+ [0x1D44A] = kern_100, -- 𝑊
+ },
+ alternates = {
+ dotless = { feature = 'dtls', value = 1, comment = "Mathematical Dotless Forms" },
+ },
+ },
+}
diff --git a/tex/context/fonts/mkiv/schola-math.lfg b/tex/context/fonts/mkiv/schola-math.lfg
new file mode 100644
index 000000000..9787c18a9
--- /dev/null
+++ b/tex/context/fonts/mkiv/schola-math.lfg
@@ -0,0 +1,19 @@
+local kern_200_050 = { bottomright = { { kern = -200 } }, topright = { { kern = 50 } } }
+local kern_100_050 = { bottomright = { { kern = -100 } }, topright = { { kern = 50 } } }
+
+return {
+ name = "schola-math",
+ version = "1.00",
+ comment = "Goodies that complement schola.",
+ author = "Hans Hagen",
+ copyright = "ConTeXt development team",
+ mathematics = {
+ kerns = {
+ [0x1D449] = kern_200_050, --
+ [0x1D44A] = kern_100_050, -- 𝑊
+ },
+ alternates = {
+ dotless = { feature = 'dtls', value = 1, comment = "Mathematical Dotless Forms" },
+ },
+ },
+}
diff --git a/tex/context/fonts/mkiv/stix-two-math.lfg b/tex/context/fonts/mkiv/stix-two-math.lfg
new file mode 100644
index 000000000..ded97f92e
--- /dev/null
+++ b/tex/context/fonts/mkiv/stix-two-math.lfg
@@ -0,0 +1,27 @@
+return {
+ name = "stix-two-math",
+ version = "1.00",
+ comment = "Goodies that complement stix two opentype.",
+ author = "Hans Hagen",
+ copyright = "ConTeXt development team",
+ mathematics = {
+ -- these tags are suggestions and can still change
+ alternates = {
+ calligraphic = { feature = 'ss01', value = 1, comment = "Mathematical Alternative Calligraphic Characters" },
+ italic = { feature = 'ss02', value = 1, comment = "Mathematical Alternative Lowercase Italic" },
+ barred = { feature = 'ss03', value = 1, comment = "Mathematical Alternative Barred Characters" }, -- hbar, lambdabar etc
+ primes = { feature = 'ss04', value = 1, comment = "Mathematical Alternative Primes" }, -- larger/lower primes, minute etc
+ arrow = { feature = 'ss05', value = 1, comment = "Mathematical Alternative Smaller Arrows" },
+ narrower = { feature = 'ss06', value = 1, comment = "Mathematical Alternative Narrower Elements" }, -- narrower/shorter element etc
+ small = { feature = 'ss07', value = 1, comment = "Mathematical Alternative Smaller Operators" },
+ upright = { feature = 'ss08', value = 1, comment = "Mathematical Alternative Upright Symbols" }, -- upright integrals etc.
+ negated = { feature = 'ss09', value = 1, comment = "Mathematical Alternative Negated Symbols" },
+ relation = { feature = 'ss10', value = 1, comment = "Mathematical Alternative Relations" },
+ negatedset = { feature = 'ss09', value = 1, comment = "Mathematical Alternative Negated Set Symbols" },
+ -- todo = { feature = 'ss14', value = 1, comment = "" },
+ circled = { feature = 'ss16', value = 1, comment = "Mathematical Alternative Circled Operators" },
+ },
+ },
+}
+
+
diff --git a/tex/context/fonts/mkiv/termes-math.lfg b/tex/context/fonts/mkiv/termes-math.lfg
new file mode 100644
index 000000000..557216cb1
--- /dev/null
+++ b/tex/context/fonts/mkiv/termes-math.lfg
@@ -0,0 +1,19 @@
+local kern_200 = { bottomright = { { kern = -200 } } }
+local kern_100 = { bottomright = { { kern = -100 } } }
+
+return {
+ name = "termes-math",
+ version = "1.00",
+ comment = "Goodies that complement termes.",
+ author = "Hans Hagen",
+ copyright = "ConTeXt development team",
+ mathematics = {
+ kerns = {
+ [0x1D449] = kern_200, --
+ [0x1D44A] = kern_100, -- 𝑊
+ },
+ alternates = {
+ dotless = { feature = 'dtls', value = 1, comment = "Mathematical Dotless Forms" },
+ },
+ },
+}
diff --git a/tex/context/fonts/mkiv/type-imp-asana.mkiv b/tex/context/fonts/mkiv/type-imp-asana.mkiv
index b87c969e2..c48d3b7ad 100644
--- a/tex/context/fonts/mkiv/type-imp-asana.mkiv
+++ b/tex/context/fonts/mkiv/type-imp-asana.mkiv
@@ -21,7 +21,7 @@
\starttypescript [\s!math] [asana] [\s!name]
\loadfontgoodies[asana-math]
- \definefontsynonym [MathRoman] [AsanaMath] [\s!features=\s!math\mathsizesuffix,\s!goodies=asana-math]
+ \definefontsynonym [MathRoman] [AsanaMath] [\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=asana-math]
\stoptypescript
\starttypescript[asana]
diff --git a/tex/context/fonts/mkiv/type-imp-cambria.mkiv b/tex/context/fonts/mkiv/type-imp-cambria.mkiv
index 8154817bd..f5679fd92 100644
--- a/tex/context/fonts/mkiv/type-imp-cambria.mkiv
+++ b/tex/context/fonts/mkiv/type-imp-cambria.mkiv
@@ -42,15 +42,15 @@
\starttypescript [\s!math] [cambria,cambria-m,cambria-a] [\s!name]
\loadfontgoodies[cambria-math]
- \definefontsynonym [\s!MathRoman] [CambriaMath] [\s!features=\s!math\mathsizesuffix,\s!goodies=cambria-math]
+ \definefontsynonym [\s!MathRoman] [CambriaMath] [\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=cambria-math]
\stoptypescript
\starttypescript [\s!math] [cambria-x] [\s!name]
\loadfontgoodies[cambria-math]
- \definefontsynonym [\s!MathRoman] [CambriaMath] [\s!features=\s!math,\s!goodies=cambria-math]
+ \definefontsynonym [\s!MathRoman] [CambriaMath] [\s!features={\s!math,mathextra},\s!goodies=cambria-math]
\stoptypescript
\starttypescript [\s!math] [cambria-y] [\s!name]
\loadfontgoodies[cambria-math]
- \definefontsynonym [\s!MathRoman] [CambriaMath] [\s!features=\s!math-nostack\mathsizesuffix,\s!goodies=cambria-math]
+ \definefontsynonym [\s!MathRoman] [CambriaMath] [\s!features={\s!math-nostack\mathsizesuffix,mathextra},\s!goodies=cambria-math]
\stoptypescript
\starttypescript [\s!serif] [cambria,cambria-m,cambria-a] [\s!name]
diff --git a/tex/context/fonts/mkiv/type-imp-dejavu.mkiv b/tex/context/fonts/mkiv/type-imp-dejavu.mkiv
index 41cf1f701..710aada5d 100644
--- a/tex/context/fonts/mkiv/type-imp-dejavu.mkiv
+++ b/tex/context/fonts/mkiv/type-imp-dejavu.mkiv
@@ -40,15 +40,15 @@
\stoptypescript
\starttypescript [\s!math][dejavu][\s!name]
- %\loadfontgoodies[dejavu]
- \definefontsynonym[\s!MathRoman][file:dejavu-math.otf][\s!features=\s!math\mathsizesuffix]
+ \loadfontgoodies[dejavu-math]
+ \definefontsynonym[\s!MathRoman][file:texgyredejavu-math][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=dejavu-math]
\stoptypescript
\starttypescript[dejavu]
\definetypeface [dejavu] [\s!rm] [\s!serif] [dejavu] [\s!default]
\definetypeface [dejavu] [\s!ss] [\s!sans] [dejavu] [\s!default]
\definetypeface [dejavu] [\s!tt] [\s!mono] [dejavu] [\s!default]
-% \definetypeface [dejavu] [\s!mm] [\s!math] [xits] [\s!default] [\s!rscale=1.2]
+ % \definetypeface [dejavu] [\s!mm] [\s!math] [xits] [\s!default] [\s!rscale=1.2]
\definetypeface [dejavu] [\s!mm] [\s!math] [dejavu] [\s!default]
\stoptypescript
@@ -99,7 +99,7 @@
\definetypeface [dejavu-condensed] [\s!rm] [\s!serif] [dejavu-condensed] [\s!default]
\definetypeface [dejavu-condensed] [\s!ss] [\s!sans] [dejavu-condensed] [\s!default]
\definetypeface [dejavu-condensed] [\s!tt] [\s!mono] [dejavu-condensed] [\s!default]
-% \definetypeface [dejavu-condensed] [\s!mm] [\s!math] [xits] [\s!default] [\s!rscale=1.2]
+ % \definetypeface [dejavu-condensed] [\s!mm] [\s!math] [xits] [\s!default] [\s!rscale=1.2]
\definetypeface [dejavu-condensed] [\s!mm] [\s!math] [dejavu] [\s!default]
\stoptypescript
diff --git a/tex/context/fonts/mkiv/type-imp-ebgaramond.mkiv b/tex/context/fonts/mkiv/type-imp-ebgaramond.mkiv
index 838654d49..cd474242f 100644
--- a/tex/context/fonts/mkiv/type-imp-ebgaramond.mkiv
+++ b/tex/context/fonts/mkiv/type-imp-ebgaramond.mkiv
@@ -11,6 +11,8 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
+% Why so many features ... dead slow too
+
\definefontfeature
[eb-garamond-normal]
[default]
@@ -32,7 +34,7 @@
\setups[font:fallback:serif]
\definefontsynonym [Serif] [file:ebgaramond-regular] [features=eb-garamond-normal]
\definefontsynonym [SerifItalic] [file:ebgaramond-italic] [features=eb-garamond-normal]
- \definefontsynonym [SerifBold] [file:ebgaramond-bold] [features=eb-garamond-normal]
+ \definefontsynonym [SerifBold] [file:ebgaramond-regular] [features=eb-garamond-normal] % there is no bold
\definefontsynonym [SerifCaps] [Serif] [features=eb-garamond-smallcaps]
\stoptypescript
diff --git a/tex/context/fonts/mkiv/type-imp-euler.mkiv b/tex/context/fonts/mkiv/type-imp-euler.mkiv
index d3b552b56..e98a6e963 100644
--- a/tex/context/fonts/mkiv/type-imp-euler.mkiv
+++ b/tex/context/fonts/mkiv/type-imp-euler.mkiv
@@ -49,7 +49,7 @@
\starttypescript [\s!math] [eulernova] [\s!name]
\loadfontgoodies[euler-math]
- \definefontsynonym [MathRoman] [\s!file:euler.otf] [\s!features=\s!math\mathsizesuffix]
+ \definefontsynonym [MathRoman] [\s!file:euler.otf] [\s!features={\s!math\mathsizesuffix,mathextra}]
\stoptypescript
\starttypescript [pagella-eulernova]
@@ -67,11 +67,11 @@
\stoptypescript
\starttypescript [\s!math] [euleroverpagella] [\s!name]
- \definefontsynonym [MathRoman] [texgyrepagella-math] [\s!features=\s!math\mathsizesuffix,\s!fallbacks=euleroverpagella]
+ \definefontsynonym [MathRoman] [texgyrepagella-math] [\s!features={\s!math\mathsizesuffix,mathextra},\s!fallbacks=euleroverpagella]
\stoptypescript
\starttypescript [\s!math] [pagellaovereuler] [\s!name]
- \definefontsynonym [MathRoman] [\s!file:euler.otf] [\s!features=\s!math\mathsizesuffix,\s!fallbacks=pagellaovereuler]
+ \definefontsynonym [MathRoman] [\s!file:euler.otf] [\s!features={\s!math\mathsizesuffix,mathextra},\s!fallbacks=pagellaovereuler]
\stoptypescript
\starttypescript [pagella-with-euler]
diff --git a/tex/context/fonts/mkiv/type-imp-gentium.mkiv b/tex/context/fonts/mkiv/type-imp-gentium.mkiv
index b2ad35a96..751ca87e7 100644
--- a/tex/context/fonts/mkiv/type-imp-gentium.mkiv
+++ b/tex/context/fonts/mkiv/type-imp-gentium.mkiv
@@ -7,6 +7,8 @@
%D date=\currentdate,
%D copyright={Mojca and Thomas}]
+% One probably has to enable the 'aalt' feature too.
+
\starttypescript [serif] [gentium]
\definefontsynonym [Gentium-Roman] [file:GentiumPlus-R] [features=default]
\definefontsynonym [Gentium-Italic] [file:GentiumPlus-I] [features=default]
diff --git a/tex/context/fonts/mkiv/type-imp-ipaex.mkiv b/tex/context/fonts/mkiv/type-imp-ipaex.mkiv
index b11f96878..9a071ed3c 100644
--- a/tex/context/fonts/mkiv/type-imp-ipaex.mkiv
+++ b/tex/context/fonts/mkiv/type-imp-ipaex.mkiv
@@ -94,7 +94,7 @@
\definefontsynonym[ipaexgmonoboldslanted] [\s!file:ipaexg][\s!features=jp-slanted,\s!fallbacks=jp-monoboldslanted]
\definefontsynonym[ipaexgmonocaps] [\s!file:ipaexg][\s!features=jp-default,\s!fallbacks=jp-monocaps]
\stoptypescript
-
+
\starttypescript [\s!serif] [ipaexm] [\s!name]
\definefontsynonym[\s!Serif] [ipaexm]
\definefontsynonym[\s!SerifBold] [ipaexmbold]
diff --git a/tex/context/fonts/mkiv/type-imp-koeielettersot.mkiv b/tex/context/fonts/mkiv/type-imp-koeielettersot.mkiv
new file mode 100644
index 000000000..e3e8fc277
--- /dev/null
+++ b/tex/context/fonts/mkiv/type-imp-koeielettersot.mkiv
@@ -0,0 +1,179 @@
+%D \module
+%D [ file=type-cowotf,
+%D version=2016.09.16,
+%D title=\CONTEXT\ Typescript Macros,
+%D subtitle=Cow Fonts (otf version),
+%D author={Taco Hoekwater \& Hans Hagen},
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D The cow fonts are a project of Duane Bibby, Hans Hagen and Taco
+%D Hoekwater.
+
+\unprotect
+
+\definefontfeature
+ [sheepdigits]
+ [mode=node,
+ script=latn,
+ ss01=yes]
+
+\definefontfeature
+ [mathsheepdigits]
+ [sheepdigits]
+ [mode=base]
+
+\definefontfeature
+ [cowslogos]
+ [mode=node,
+ script=latn,
+ ss02=yes,
+ dlig=yes]
+
+\definefontfeature
+ [cowsligatures]
+ [mode=node,
+ script=latn,
+ dlig=yes]
+
+\definefontfeature
+ [cowscolors]
+ [mode=node,
+ colr=yes,
+ ss02=yes,
+ dlig=yes]
+
+\definefontfeature
+ [cowsdefault]
+ [default]
+ [mode=node,
+ compose=yes]
+
+\definefontfeature
+ [sheepdefault]
+ [cowsdefault,sheepdigits]
+
+\definefontfeature
+ [cowscolored]
+ [cowsdefault,cowscolors]
+
+\definefontfeature
+ [sheepcolored]
+ [sheepdefault,cowscolors]
+
+\starttypescriptcollection[koeielettersot]
+
+ \loadfontgoodies[koeielettersot]
+
+ \starttypescript [\s!all] [cowsotf]
+ \definefontsynonym [Cows] [koeielettersot][\s!features=cowsdefault]
+ \definefontsynonym [CowsLogo] [koeielettersot][\s!features=cowslogos]
+ \definefontsynonym [CowsMathRoman][koeielettersot][\s!features=mathextra,\s!goodies=koeielettersot]
+ \stoptypescript
+
+ \starttypescript [\s!all] [koeielettersotf,sheepotf]
+ \definefontsynonym [Sheep] [koeielettersot][\s!features=sheepdefault]
+ \definefontsynonym [SheepLogo] [koeielettersot][\s!features=cowslogos]
+ \definefontsynonym [SheepMathRoman][koeielettersot][\s!features={mathsheepdigits,mathextra},\s!goodies=koeielettersot]
+ \stoptypescript
+
+% \definefontsynonym[\s!MathRoman][file:texgyredejavu-math][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=dejavu-math]
+
+ \starttypescript [\s!all] [coloredcowsotf]
+ \definefontsynonym [Cows] [koeielettersot][\s!features=cowscolored]
+ \definefontsynonym [CowsLogo] [koeielettersot][\s!features=cowslogos]
+ \definefontsynonym [CowsMathRoman][koeielettersot][\s!features=mathextra,\s!goodies=koeielettersot]
+ \stoptypescript
+
+ \starttypescript [\s!all] [coloredsheepotf]
+ \definefontsynonym [Sheep] [koeielettersot][\s!features=sheepcolored]
+ \definefontsynonym [SheepLogo] [koeielettersot][\s!features=cowslogos]
+ \definefontsynonym [SheepMathRoman][koeielettersot][\s!features={mathsheepdigits,mathextra},\s!goodies=koeielettersot]
+ \stoptypescript
+
+ \starttypescript [\s!serif] [cowsotf,coloredcowsotf]
+ \setups[\s!font:\s!fallback:\s!serif]
+ \definefontsynonym [\s!Serif] [Cows]
+ \definefontsynonym [\s!Serif Logo][CowsLogo]
+ \stoptypescript
+
+ \starttypescript [\s!serif] [koeielettersotf,sheepotf,coloredsheepotf]
+ \setups[\s!font:\s!fallback:\s!serif]
+ \definefontsynonym [\s!Serif] [Sheep]
+ \definefontsynonym [\s!Serif Logo][SheepLogo]
+ \stoptypescript
+
+ \starttypescript [\s!math] [cowsotf,coloredcowsotf]
+ \definefontsynonym [\s!MathRoman][CowsMathRoman]
+ \enablemathrules % uses \fontclass, for now this way
+ \stoptypescript
+
+ \starttypescript [\s!math] [koeielettersotf,sheepotf,coloredsheepotf]
+ \definefontsynonym [\s!MathRoman][SheepMathRoman]
+ \enablemathrules % uses \fontclass, for now this way
+ \stoptypescript
+
+ \starttypescript [koeieletters,cows,sheep,coloredcows,coloredsheep]
+ \definetypeface [\typescriptone][\s!rm][\s!serif][\typescriptone otf][\s!default]
+ \definetypeface [\typescriptone][\s!ss][\s!serif][\typescriptone otf][\s!default]
+ \definetypeface [\typescriptone][\s!mm][\s!math] [\typescriptone otf][\s!default]
+ \definetypeface [\typescriptone][\s!tt][\s!mono] [modern] [\s!default][\s!rscale=0.85]
+ \stoptypescript
+
+\stoptypescriptcollection
+
+\protect
+
+\continueifinputfile{type-imp-koeielettersot.mkiv}
+
+\starttext
+
+\setupbodyfont[cows]
+
+\input tufte
+
+\stoptext
+
+\starttext
+
+\loadtypescriptfile[cowotf]
+
+\definecolor[cowred] [r=.50]
+\definecolor[cowgreen] [g=.50]
+\definecolor[cowblue] [b=.50]
+\definecolor[cowyellow][y=.25]
+
+\startluacode
+ fonts.handlers.otf.registerpalette("demo", {
+ { g = .50 },
+ { y = .25 },
+ { b = .50 },
+ { r = .50 },
+ })
+\stopluacode
+
+\definefontcolorpalette[cows][cowgreen,cowyellow,cowblue,cowred]
+
+\adaptfontfeature[cowscolored] [colr=cows]
+
+\setupbodyfont[coloredcows,12pt]
+
+\input zapf
+
+\definefontsynonym
+ [CowsColored]
+ [koeielettersot]
+
+\showotfcomposition
+ {koeielettersot*default,cowscolors}
+ {1}
+ {context}
+
+\scale[width=\textwidth]{\getnamedglyphdirect{CowsColored*default,cowscolors}{contextlogo}}
+\scale[width=\textwidth]{\definedfont[CowsColored*default,cowscolors]context}
+
+\stoptext
diff --git a/tex/context/fonts/mkiv/type-imp-latinmodern.mkiv b/tex/context/fonts/mkiv/type-imp-latinmodern.mkiv
index fe4b669bd..63f74027b 100644
--- a/tex/context/fonts/mkiv/type-imp-latinmodern.mkiv
+++ b/tex/context/fonts/mkiv/type-imp-latinmodern.mkiv
@@ -28,7 +28,7 @@
\starttypescriptcollection[latinmodern]
- \starttypescript [\s!serif] [simple] [\s!name]% for old times sake (manuals)
+ \starttypescript [\s!serif] [simple] [\s!name]
\definefontsynonym [\s!Simple] [\s!file:lmmonoproplt10-regular] [\s!features=\s!default]
\stoptypescript
@@ -82,9 +82,9 @@
\starttypescript [\s!serif] [modern-variable,latin-modern-variable-designsize,latin-modern-variable] [\s!name]
\loadfontgoodies[lm]
\definefontsynonym [\s!Serif] [LMTypewriterVarWd-Regular] [\s!features=\s!default]
- \definefontsynonym [\s!SerifBold] [LMTypewriterVarWd-Oblique] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifBold] [LMTypewriterVarWd-Dark] [\s!features=\s!default]
\definefontsynonym [\s!SerifItalic] [LMTypewriterVarWd-Oblique] [\s!features=\s!default]
- \definefontsynonym [\s!SerifSlanted] [LMTypewriterVarWd-Dark] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifSlanted] [LMTypewriterVarWd-Oblique] [\s!features=\s!default]
\definefontsynonym [\s!SerifBoldItalic] [LMTypewriterVarWd-DarkOblique] [\s!features=\s!default]
\definefontsynonym [\s!SerifBoldSlanted] [LMTypewriterVarWd-DarkOblique] [\s!features=\s!default]
\definefontsynonym [\s!SerifCaps] [LMTypewriterVarWd-Regular] [\s!features=\s!default]
@@ -173,14 +173,14 @@
% \starttypescript [\s!math] [modern,latin-modern]
% \loadfontgoodies[lm]
-% \definefontsynonym [LMMathRoman-Regular] [\v!file:latinmodern-math-regular.otf] [\s!features=\s!math\mathsizesuffix,\s!goodies=lm]
-% \definefontsynonym [LMMathRoman-Bold] [\v!file:latinmodern-math-regular.otf] [\s!features=\s!math\mathsizesuffix,\s!goodies=lm]
+% \definefontsynonym [LMMathRoman-Regular] [\v!file:latinmodern-math-regular.otf] [\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=lm]
+% \definefontsynonym [LMMathRoman-Bold] [\v!file:latinmodern-math-regular.otf] [\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=lm]
% \stoptypescript
\starttypescript [\s!math] [modern,latin-modern]
\loadfontgoodies[lm]
- \definefontsynonym [LMMathRoman-Regular] [\v!file:latinmodern-math-regular.otf] [\s!features={\s!math\mathsizesuffix,lm-math},\s!goodies=lm]
- \definefontsynonym [LMMathRoman-Bold] [\v!file:latinmodern-math-regular.otf] [\s!features={\s!math\mathsizesuffix,lm-math},\s!goodies=lm]
+ \definefontsynonym [LMMathRoman-Regular] [\v!file:latinmodern-math-regular.otf] [\s!features={\s!math\mathsizesuffix,lm-math,mathextra},\s!goodies=lm]
+ \definefontsynonym [LMMathRoman-Bold] [\v!file:latinmodern-math-regular.otf] [\s!features={\s!math\mathsizesuffix,lm-math,mathextra},\s!goodies=lm]
\stoptypescript
\starttypescript [modern-designsize-virtual]
diff --git a/tex/context/fonts/mkiv/type-imp-libertinus.mkiv b/tex/context/fonts/mkiv/type-imp-libertinus.mkiv
new file mode 100644
index 000000000..1ceda8737
--- /dev/null
+++ b/tex/context/fonts/mkiv/type-imp-libertinus.mkiv
@@ -0,0 +1,82 @@
+%D \module
+%D [ file=type-imp-libertinus,
+%D version=2016.08.18,
+%D title=\CONTEXT\ Typescript Macros,
+%D subtitle=Libertine fonts,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D This typescript (submitted by by Henri Menke) is a follow up on libertine
+%D which is no longer maintained cq.\ developed further.
+
+\starttypescriptcollection[libertinus]
+
+ \starttypescript [\s!serif] [libertinus]
+ \definefontsynonym [LibertinusSerif-Regular] [\s!file:libertinusserif-regular]
+ \definefontsynonym [LibertinusSerif-Italic] [\s!file:libertinusserif-italic]
+ \definefontsynonym [LibertinusSerif-Slanted] [\s!file:libertinusserif-italic]
+ \definefontsynonym [LibertinusSerif-Bold] [\s!file:libertinusserif-bold]
+ \definefontsynonym [LibertinusSerif-BoldItalic] [\s!file:libertinusserif-bolditalic]
+ \definefontsynonym [LibertinusSerif-BoldSlanted] [\s!file:libertinusserif-bolditalic]
+ \stoptypescript
+
+ \starttypescript [\s!serif] [libertinus] [\s!name]
+ \setups[\s!font:\s!fallback:\s!serif]
+ \definefontsynonym [\s!Serif] [LibertinusSerif-Regular] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifItalic] [LibertinusSerif-Italic] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifSlanted] [LibertinusSerif-Slanted] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifBold] [LibertinusSerif-Bold] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifBoldItalic] [LibertinusSerif-BoldItalic] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifBoldSlanted] [LibertinusSerif-BoldSlanted] [\s!features=\s!default]
+ \definefontsynonym [SerifCaps] [LibertinusSerif-Regular] [\s!features=\s!smallcaps]
+ \stoptypescript
+
+ \starttypescript [\s!sans] [libertinus]
+ \setups[\s!font:\s!fallback:\s!sans]
+ \definefontsynonym [LibertinusSans-Regular] [\s!file:libertinussans-regular]
+ \definefontsynonym [LibertinusSans-Italic] [\s!file:libertinussans-italic]
+ \definefontsynonym [LibertinusSans-Slanted] [\s!file:libertinussans-italic]
+ \definefontsynonym [LibertinusSans-Bold] [\s!file:libertinussans-bold]
+ \definefontsynonym [LibertinusSans-BoldItalic] [\s!file:libertinussans-bold]
+ \definefontsynonym [LibertinusSans-BoldSlanted] [\s!file:libertinussans-bold]
+ \stoptypescript
+
+ \starttypescript [\s!sans] [libertinus] [\s!name]
+ \setups[\s!font:\s!fallback:\s!sans]
+ \definefontsynonym [\s!Sans] [LibertinusSans-Regular] [\s!features=\s!default]
+ \definefontsynonym [\s!SansBold] [LibertinusSans-Bold] [\s!features=\s!default]
+ \definefontsynonym [\s!SansItalic] [LibertinusSans-Italic] [\s!features=\s!default]
+ \definefontsynonym [\s!SansSlanted] [LibertinusSans-Slanted] [\s!features=\s!default]
+ \definefontsynonym [\s!SansBoldItalic] [LibertinusSans-BoldSlanted] [\s!features=\s!default]
+ \definefontsynonym [SansCaps] [LibertinusSans-Regular] [\s!features=\s!smallcaps]
+ \stoptypescript
+
+ \starttypescript [\s!mono] [libertinus]
+ \setups[\s!font:\s!fallback:\s!mono]
+ \definefontsynonym [LibertinusMono-Regular] [\s!file:libertinusmono-regular]
+ \stoptypescript
+
+ \starttypescript [\s!mono] [libertinus] [\s!name]
+ \setups[\s!font:\s!fallback:\s!mono]
+ \definefontsynonym [\s!Mono] [LibertinusMono-Regular] [\s!features=\s!default]
+ \stoptypescript
+
+ \starttypescript [\s!math] [libertinus] [\s!name]
+ \definefontsynonym[\s!MathRoman ] [\s!file:libertinusmath-regular.otf] [\s!features={\s!math\mathsizesuffix,mathextra}]
+ \definefontsynonym[\s!MathRomanBold] [\s!file:libertinusmath-regular.otf] [\s!features={\s!math\mathsizesuffix,mathextra}]
+ \stoptypescript
+
+ \starttypescript [libertinus]
+ \definetypeface [libertinus] [\s!rm] [\s!serif] [libertinus] [\s!default]
+ \definetypeface [libertinus] [\s!ss] [\s!sans] [libertinus] [\s!default]
+ \definetypeface [libertinus] [\s!tt] [\s!mono] [libertinus] [\s!default]
+ \definetypeface [libertinus] [\s!mm] [\s!math] [libertinus] [\s!default]
+ \quittypescriptscanning
+ \stoptypescript
+
+\stoptypescriptcollection
diff --git a/tex/context/fonts/mkiv/type-imp-lucida-opentype.mkiv b/tex/context/fonts/mkiv/type-imp-lucida-opentype.mkiv
index f39ed6e1f..61002ff06 100644
--- a/tex/context/fonts/mkiv/type-imp-lucida-opentype.mkiv
+++ b/tex/context/fonts/mkiv/type-imp-lucida-opentype.mkiv
@@ -65,8 +65,8 @@
\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]
+ \definefontsynonym [\s!MathRoman] [\s!file:LucidaBrightMathOT.otf] [\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=lucida-opentype-math]
+ \definefontsynonym [\s!MathRomanBold] [\s!file:LucidaBrightMathOT-Demi.otf] [\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=lucida-opentype-math]
\stoptypescript
\starttypescript [\s!handwriting] [lucidaot,lucidadk]
diff --git a/tex/context/fonts/mkiv/type-imp-minion.mkiv b/tex/context/fonts/mkiv/type-imp-minion.mkiv
new file mode 100644
index 000000000..b158deddf
--- /dev/null
+++ b/tex/context/fonts/mkiv/type-imp-minion.mkiv
@@ -0,0 +1,54 @@
+%D \module
+%D [ file=type-imp-minion,
+%D version=2016.06.14,
+%D title=\CONTEXT\ Typescript Macros,
+%D subtitle=Minion,
+%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.
+
+\definefontfallback[MinionMathFallback] [file:latinmodern-math.otf][uppercasescript]
+\definefontfallback[MinionBoldMathFallback][file:latinmodern-math.otf][uppercasescript]
+
+\starttypescriptcollection[minion]
+
+ \starttypescript [\s!serif][minion][\s!all]
+ \loadfontgoodies[minion]
+ \definefontsynonym[\s!Serif] [Minion-Regular] [\s!features=\s!default,\s!goodies=minion]
+ \definefontsynonym[\s!SerifBold] [Minion-Bold] [\s!features=\s!default,\s!goodies=minion]
+ \definefontsynonym[\s!SerifItalic] [Minion-Italic] [\s!features=\s!default,\s!goodies=minion]
+ \definefontsynonym[\s!SerifBoldItalic][Minion-BoldItalic][\s!features=\s!default,\s!goodies=minion]
+ \stoptypescript
+
+ \starttypescript [\s!serif][minion-medium][\s!all]
+ \loadfontgoodies[minion]
+ \definefontsynonym[\s!Serif] [Minion-Regular] [\s!features=\s!default,\s!goodies=minion]
+ \definefontsynonym[\s!SerifBold] [Minion-Medium] [\s!features=\s!default,\s!goodies=minion]
+ \definefontsynonym[\s!SerifItalic] [Minion-Italic] [\s!features=\s!default,\s!goodies=minion]
+ \definefontsynonym[\s!SerifBoldItalic][Minion-MediumItalic][\s!features=\s!default,\s!goodies=minion]
+ \stoptypescript
+
+ \starttypescript [\s!math][minion][\s!all]
+ \loadfontgoodies[minion-math]
+ \definefontsynonym[\s!MathRoman] [Minion-Math] [\s!features={\s!math\mathsizesuffix,mathextra},\s!designsize=\s!auto,\s!goodies=minion-math,\s!fallbacks=MinionMathFallback]
+ \definefontsynonym[\s!MathRomanBold][Minion-BoldMath][\s!features={\s!math\mathsizesuffix,mathextra},\s!designsize=\s!auto,\s!goodies=minion-math,\s!fallbacks=MinionBoldMathFallback]
+ \stoptypescript
+
+ \starttypescript [\s!math][minion-medium][\s!all]
+ \loadfontgoodies[minion-math]
+ \definefontsynonym[\s!MathRoman] [Minion-Math] [\s!features={\s!math\mathsizesuffix,mathextra},\s!designsize=\s!auto,\s!goodies=minion-math,\s!fallbacks=MinionMathFallback]
+ \definefontsynonym[\s!MathRomanBold][Minion-MediumMath][\s!features={\s!math\mathsizesuffix,mathextra},\s!designsize=\s!auto,\s!goodies=minion-math,\s!fallbacks=MinionBoldMathFallback]
+ \stoptypescript
+
+ \starttypescript [minion,minion-medium]
+ \definetypeface [\typescriptone] [\s!rm] [\s!serif] [\typescriptone] [\s!default]
+ \definetypeface [\typescriptone] [\s!ss] [\s!sans] [dejavu] [\s!default] [\s!rscale=0.8]
+ \definetypeface [\typescriptone] [\s!tt] [\s!mono] [dejavu] [\s!default] [\s!rscale=0.8]
+ \definetypeface [\typescriptone] [\s!mm] [\s!math] [\typescriptone] [\s!default]
+ \stoptypescript
+
+\stoptypescriptcollection
diff --git a/tex/context/fonts/mkiv/type-imp-source.mkiv b/tex/context/fonts/mkiv/type-imp-source.mkiv
new file mode 100644
index 000000000..91396f965
--- /dev/null
+++ b/tex/context/fonts/mkiv/type-imp-source.mkiv
@@ -0,0 +1,66 @@
+%D \module
+%D [ file=type-imp-source,
+%D version=2010.06.21,
+%D title=\CONTEXT\ Typescript Macros,
+%D subtitle=Adobe Source Fonts (https://fonts.google.com/),
+%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.
+
+\starttypescriptcollection[source]
+
+ \definefontfeature[source-serif-slanted][slant=0.2]
+
+ \starttypescript [\s!serif] [source] [\s!name]
+ \setups[\s!font:\s!fallback:\s!serif]
+ \definefontsynonym [\s!Serif] [\s!file:SourceSerifPro-Regular.ttf] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifBold] [\s!file:SourceSerifPro-Bold.ttf] [\s!features=\s!default]
+ % \definefontsynonym [\s!SerifBold] [\s!file:SourceSerifPro-Semibold.ttf] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifItalic] [\s!file:SourceSerifPro-Regular.ttf] [\s!features={\s!default,source-serif-slanted}]
+ \definefontsynonym [\s!SerifBoldItalic] [\s!file:SourceSerifPro-Bold.ttf] [\s!features={\s!default,source-serif-slanted}]
+ \stoptypescript
+
+ \starttypescript [\s!sans] [source] [\s!name]
+ \setups[\s!font:\s!fallback:\s!sans]
+ % \definefontsynonym [\s!Sans] [\s!file:SourceSansPro-ExtraLight.ttf] [\s!features=\s!default]
+ % \definefontsynonym [\s!Sans] [\s!file:SourceSansPro-Light.ttf] [\s!features=\s!default]
+ \definefontsynonym [\s!Sans] [\s!file:SourceSansPro-Regular.ttf] [\s!features=\s!default]
+ % \definefontsynonym [\s!SansBold] [\s!file:SourceSansPro-Semibold.ttf] [\s!features=\s!default]
+ \definefontsynonym [\s!SansBold] [\s!file:SourceSansPro-Bold.ttf] [\s!features=\s!default]
+ % \definefontsynonym [\s!SansBold] [\s!file:SourceSansPro-Black.ttf] [\s!features=\s!default]
+ % \definefontsynonym [\s!SansItalic] [\s!file:SourceSansPro-ExtraLightItalic.ttf] [\s!features=\s!default]
+ % \definefontsynonym [\s!SansItalic] [\s!file:SourceSansPro-LightItalic.ttf] [\s!features=\s!default]
+ \definefontsynonym [\s!SansItalic] [\s!file:SourceSansPro-Italic.ttf] [\s!features=\s!default]
+ % \definefontsynonym [\s!SansBoldItalic] [\s!file:SourceSansPro-SemiboldItalic.ttf] [\s!features=\s!default]
+ \definefontsynonym [\s!SansBoldItalic] [\s!file:SourceSansPro-BoldItalic.ttf] [\s!features=\s!default]
+ % \definefontsynonym [\s!SansBoldItalic] [\s!file:SourceSansPro-BlackItalic.ttf] [\s!features=\s!default]
+ \stoptypescript
+
+ \starttypescript [\s!mono] [source] [\s!name]
+ \setups[\s!font:\s!fallback:\s!mono]
+ % \definefontsynonym [\s!Mono] [\s!file:SourceCodePro-ExtraLight.ttf] [\s!features=\s!none]
+ % \definefontsynonym [\s!Mono] [\s!file:SourceCodePro-Light.ttf] [\s!features=\s!none]
+ \definefontsynonym [\s!Mono] [\s!file:SourceCodePro-Regular.ttf] [\s!features=\s!none]
+ % \definefontsynonym [\s!MonoBold] [\s!file:SourceCodePro-Medium.ttf] [\s!features=\s!none]
+ % \definefontsynonym [\s!MonoBold] [\s!file:SourceCodePro-Semibold.ttf] [\s!features=\s!none]
+ \definefontsynonym [\s!MonoBold] [\s!file:SourceCodePro-Bold.ttf] [\s!features=\s!none]
+ % \definefontsynonym [\s!MonoBold] [\s!file:SourceCodePro-Black.ttf] [\s!features=\s!none]
+ \stoptypescript
+
+ \starttypescript [\s!math][source][\s!name]
+ % \loadfontgoodies[texgyre]
+ \definefontsynonym[\s!MathRoman][file:texgyredejavu-math][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=dejavu-math]
+ \stoptypescript
+
+ \starttypescript[source]
+ \definetypeface [source] [\s!rm] [\s!serif] [source] [\s!default]
+ \definetypeface [source] [\s!ss] [\s!sans] [source] [\s!default]
+ \definetypeface [source] [\s!tt] [\s!mono] [source] [\s!default]
+ \definetypeface [source] [\s!mm] [\s!math] [source] [\s!default] % [\s!rscale=1.2]
+ \stoptypescript
+
+\stoptypescriptcollection
diff --git a/tex/context/fonts/mkiv/type-imp-stix.mkiv b/tex/context/fonts/mkiv/type-imp-stix.mkiv
new file mode 100644
index 000000000..697037b43
--- /dev/null
+++ b/tex/context/fonts/mkiv/type-imp-stix.mkiv
@@ -0,0 +1,64 @@
+%D \module
+%D [ file=type-otf,
+%D version=2007.07.30,
+%D title=\CONTEXT\ Typescript Macros,
+%D subtitle=Stix,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D We provide typescripts for version one and two of the stix fonts. There is a
+%D xits variant based on the first (not opentype) release that also provides
+%D bidirectional math.
+
+\definefontfeature
+ [stixtwomath]
+ [ss02=yes] % otherwise weird (non italic) g
+
+\starttypescriptcollection[stix]
+
+ % version one
+
+ \starttypescript [\s!math] [stix] [\s!name]
+ \definefontsynonym[MathRoman][\s!file:stixmath-regular.otf] [\s!features={\s!math\mathsizesuffix,mathextra}]
+ \stoptypescript
+
+ \starttypescript [\s!serif] [stix] [\s!name]
+ \setups[\s!font:\s!fallback:\s!serif]
+ \definefontsynonym[\s!Serif] [\s!file:stix-regular.otf] [\s!features=\s!default]
+ \definefontsynonym[\s!SerifBold] [\s!file:stix-bold.otf] [\s!features=\s!default]
+ \definefontsynonym[\s!SerifItalic] [\s!file:stix-italic.otf] [\s!features=\s!default]
+ \definefontsynonym[\s!SerifBoldItalic][\s!file:stix-bolditalic.otf][\s!features=\s!default]
+ \stoptypescript
+
+ \starttypescript[stix]
+ \definetypeface [stix] [\s!rm] [\s!serif] [stix] [\s!default]
+ \definetypeface [stix] [\s!mm] [\s!math] [stix] [\s!default]
+ \stoptypescript
+
+ % version two
+
+ \starttypescript [\s!math] [stixtwo] [\s!name]
+ \definefontsynonym[MathRoman][\s!file:stix2math.otf] [\s!features={\s!math\mathsizesuffix,stixtwomath,mathextra},\s!goodies=stix-two-math]
+ \stoptypescript
+
+ \starttypescript [\s!serif] [stixtwo] [\s!name]
+ \setups[\s!font:\s!fallback:\s!serif]
+ \definefontsynonym[\s!Serif] [\s!file:stix2text-regular.otf] [\s!features=\s!default]
+ \definefontsynonym[\s!SerifBold] [\s!file:stix2text-bold.otf] [\s!features=\s!default]
+ \definefontsynonym[\s!SerifItalic] [\s!file:stix2text-italic.otf] [\s!features=\s!default]
+ \definefontsynonym[\s!SerifBoldItalic][\s!file:stix2text-bolditalic.otf][\s!features=\s!default]
+ \stoptypescript
+
+ \starttypescript[stixtwo]
+ \definetypeface [\typescriptone] [\s!rm] [\s!serif] [stixtwo] [\s!default]
+ \definetypeface [\typescriptone] [\s!ss] [\s!serif] [stixtwo] [\s!default]
+ \definetypeface [\typescriptone] [\s!tt] [\s!mono] [dejavu] [\s!default] [\s!rscale=0.895]
+ \definetypeface [\typescriptone] [\s!mm] [\s!math] [stixtwo] [\s!default]
+ \stoptypescript
+
+\stoptypescriptcollection
diff --git a/tex/context/fonts/mkiv/type-imp-texgyre.mkiv b/tex/context/fonts/mkiv/type-imp-texgyre.mkiv
index 86db8c603..a7c2d06be 100644
--- a/tex/context/fonts/mkiv/type-imp-texgyre.mkiv
+++ b/tex/context/fonts/mkiv/type-imp-texgyre.mkiv
@@ -215,6 +215,8 @@
\stoptypescriptcollection
+% tricky: we cannot mix now as the file is loaded only once
+
\startmode[txmath]
\starttypescriptcollection[texgyre-math-times]
@@ -234,8 +236,9 @@
\starttypescriptcollection[texgyre-math-times]
\starttypescript [\s!math][times,termes][\s!all]
- \loadfontgoodies[texgyre]
- \definefontsynonym[\s!MathRoman][file:texgyre-termes-math-regular.otf][\s!features=\s!math\mathsizesuffix,\s!goodies=texgyre]
+ % \loadfontgoodies[texgyre]
+ % \definefontsynonym[\s!MathRoman][file:texgyre-termes-math-regular.otf][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=texgyre]
+ \definefontsynonym[\s!MathRoman][file:texgyretermes-math.otf][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=termes-math]
\stoptypescript
\stoptypescriptcollection
@@ -261,8 +264,9 @@
\starttypescriptcollection[texgyre-math-pagella]
\starttypescript [\s!math][palatino,pagella][\s!all]
- \loadfontgoodies[texgyre]
- \definefontsynonym[\s!MathRoman][file:texgyre-pagella-math-regular.otf][\s!features=\s!math\mathsizesuffix,\s!goodies=texgyre]
+ % \loadfontgoodies[texgyre]
+ % \definefontsynonym[\s!MathRoman][file:texgyre-pagella-math-regular.otf][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=texgyre]
+ \definefontsynonym[\s!MathRoman][file:texgyrepagella-math.otf][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=pagella-math]
\stoptypescript
\stoptypescriptcollection
@@ -272,8 +276,9 @@
\starttypescriptcollection[texgyre-math-bonum]
\starttypescript [\s!math][bookman,bonum][\s!all]
- \loadfontgoodies[texgyre]
- \definefontsynonym[\s!MathRoman][file:texgyre-bonum-math-regular.otf][\s!features=\s!math\mathsizesuffix,\s!goodies=texgyre]
+ % \loadfontgoodies[texgyre]
+ % \definefontsynonym[\s!MathRoman][file:texgyre-bonum-math-regular.otf][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=texgyre]
+ \definefontsynonym[\s!MathRoman][file:texgyrebonum-math.otf][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=bonum-math]
\stoptypescript
\stoptypescriptcollection
@@ -281,8 +286,11 @@
\starttypescriptcollection[texgyre-math-schola]
\starttypescript [\s!math][schoolbook,schola][\s!all]
- \loadfontgoodies[texgyre]
- \definefontsynonym[\s!MathRoman][file:texgyre-schola-math-regular.otf][\s!features=\s!math\mathsizesuffix,\s!goodies=texgyre]
+ % \loadfontgoodies[texgyre]
+ % \definefontsynonym[\s!MathRoman][file:texgyre-schola-math-regular.otf][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=texgyre]
+ \definefontsynonym[\s!MathRoman][file:texgyreschola-math.otf][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=schola-math]
\stoptypescript
\stoptypescriptcollection
+
+
diff --git a/tex/context/fonts/mkiv/type-imp-xits.mkiv b/tex/context/fonts/mkiv/type-imp-xits.mkiv
index f83050e14..145ddc7a8 100644
--- a/tex/context/fonts/mkiv/type-imp-xits.mkiv
+++ b/tex/context/fonts/mkiv/type-imp-xits.mkiv
@@ -23,12 +23,12 @@
\starttypescript [\s!math] [xits,xitsbidi] [\s!name]
\loadfontgoodies[xits-math]
- \definefontsynonym[\s!MathRoman ][\s!file:xits-math.otf] [\s!features=\s!math\mathsizesuffix,\s!goodies=xits-math]
- \definefontsynonym[\s!MathRoman L2R][\s!file:xits-math.otf] [\s!features=\s!math\mathsizesuffix-l2r,\s!goodies=xits-math]
- \definefontsynonym[\s!MathRoman R2L][\s!file:xits-math.otf] [\s!features=\s!math\mathsizesuffix-r2l,\s!goodies=xits-math]
- \definefontsynonym[\s!MathRomanBold ][\s!file:xits-mathbold.otf][\s!features=\s!math\mathsizesuffix,\s!goodies=xits-math]
- \definefontsynonym[\s!MathRomanBold L2R][\s!file:xits-mathbold.otf][\s!features=\s!math\mathsizesuffix-l2r,\s!goodies=xits-math]
- \definefontsynonym[\s!MathRomanBold R2L][\s!file:xits-mathbold.otf][\s!features=\s!math\mathsizesuffix-r2l,\s!goodies=xits-math]
+ \definefontsynonym[\s!MathRoman ][\s!file:xits-math.otf] [\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=xits-math]
+ \definefontsynonym[\s!MathRoman L2R][\s!file:xits-math.otf] [\s!features={\s!math\mathsizesuffix-l2r,mathextra},\s!goodies=xits-math]
+ \definefontsynonym[\s!MathRoman R2L][\s!file:xits-math.otf] [\s!features={\s!math\mathsizesuffix-r2l,mathextra},\s!goodies=xits-math]
+ \definefontsynonym[\s!MathRomanBold ][\s!file:xits-mathbold.otf][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=xits-math]
+ \definefontsynonym[\s!MathRomanBold L2R][\s!file:xits-mathbold.otf][\s!features={\s!math\mathsizesuffix-l2r,mathextra},\s!goodies=xits-math]
+ \definefontsynonym[\s!MathRomanBold R2L][\s!file:xits-mathbold.otf][\s!features={\s!math\mathsizesuffix-r2l,mathextra},\s!goodies=xits-math]
\stoptypescript
\starttypescript [\s!serif] [xits] [\s!name]
diff --git a/tex/context/fonts/mkiv/xits-math.lfg b/tex/context/fonts/mkiv/xits-math.lfg
index 8e1274365..372224940 100644
--- a/tex/context/fonts/mkiv/xits-math.lfg
+++ b/tex/context/fonts/mkiv/xits-math.lfg
@@ -27,16 +27,21 @@ return {
-- italics = {
-- ["xits-math"] = italics,
-- },
+ -- kernpairs = {
+ -- [0x1D44A] = { -- 𝑊
+ -- [0x1D434] = -200, -- 𝐴
+ -- },
+ -- },
alternates = {
- cal = { feature = 'ss01', value = 1, comment = "Mathematical Calligraphic Alphabet" },
- greekssup = { feature = 'ss02', value = 1, comment = "Mathematical Greek Sans Serif Alphabet" },
- greekssit = { feature = 'ss03', value = 1, comment = "Mathematical Italic Sans Serif Digits" },
- monobfnum = { feature = 'ss04', value = 1, comment = "Mathematical Bold Monospace Digits" },
- mathbbbf = { feature = 'ss05', value = 1, comment = "Mathematical Bold Double-Struck Alphabet" },
- mathbbit = { feature = 'ss06', value = 1, comment = "Mathematical Italic Double-Struck Alphabet" },
- mathbbbi = { feature = 'ss07', value = 1, comment = "Mathematical Bold Italic Double-Struck Alphabet" },
- upint = { feature = 'ss08', value = 1, comment = "Upright Integrals" },
- vertnot = { feature = 'ss09', value = 1, comment = "Negated Symbols With Vertical Stroke" },
+ calligraphic = { feature = 'ss01', value = 1, comment = "Mathematical Calligraphic Alphabet" },
+ greekssup = { feature = 'ss02', value = 1, comment = "Mathematical Greek Sans Serif Alphabet" },
+ greekssit = { feature = 'ss03', value = 1, comment = "Mathematical Italic Sans Serif Digits" },
+ monobfnum = { feature = 'ss04', value = 1, comment = "Mathematical Bold Monospace Digits" },
+ mathbbbf = { feature = 'ss05', value = 1, comment = "Mathematical Bold Double-Struck Alphabet" },
+ mathbbit = { feature = 'ss06', value = 1, comment = "Mathematical Italic Double-Struck Alphabet" },
+ mathbbbi = { feature = 'ss07', value = 1, comment = "Mathematical Bold Italic Double-Struck Alphabet" },
+ upint = { feature = 'ss08', value = 1, comment = "Upright Integrals" },
+ vertnot = { feature = 'ss09', value = 1, comment = "Negated Symbols With Vertical Stroke" },
},
}
}
diff --git a/tex/context/interface/mkii/cont-nl.xml b/tex/context/interface/mkii/cont-nl.xml
index ac955ae54..ac0b3a4dd 100644
--- a/tex/context/interface/mkii/cont-nl.xml
+++ b/tex/context/interface/mkii/cont-nl.xml
@@ -1211,7 +1211,7 @@
<cd:command name="localfootnotes" type="environment" file="core-not.tex" category="footnotes">
<cd:sequence>
- <cd:string value="localfootnotes"/>
+ <cd:string value="lokalevoetnoten"/>
</cd:sequence>
</cd:command>
@@ -2740,7 +2740,7 @@
<cd:command name="marginblock" type="environment" file="page-flt.tex">
<cd:sequence>
- <cd:string value="marginblock"/>
+ <cd:string value="margeblok"/>
</cd:sequence>
</cd:command>
@@ -7122,7 +7122,7 @@
<cd:command name="linecorrection" type="environment">
<cd:sequence>
- <cd:string value="linecorrection"/>
+ <cd:string value="regelcorrectie"/>
</cd:sequence>
</cd:command>
@@ -7221,7 +7221,7 @@
<cd:command name="alignment" type="environment" file="core-spa.tex">
<cd:sequence>
- <cd:string value="alignment"/>
+ <cd:string value="uitlijnen"/>
</cd:sequence>
<cd:arguments>
<cd:keywords n="1" optional="yes" list="yes">
diff --git a/tex/context/interface/mkii/keys-cs.xml b/tex/context/interface/mkii/keys-cs.xml
index ce8e41016..9ce2a779a 100644
--- a/tex/context/interface/mkii/keys-cs.xml
+++ b/tex/context/interface/mkii/keys-cs.xml
@@ -79,6 +79,7 @@
<cd:variable name='all' value='vse'/>
<cd:variable name='alphabetic' value='alphabetic'/>
<cd:variable name='always' value='vzdy'/>
+ <cd:variable name='anchor' value='anchor'/>
<cd:variable name='and' value='and'/>
<cd:variable name='answerarea' value='answerarea'/>
<cd:variable name='appendices' value='dodatky'/>
@@ -172,9 +173,11 @@
<cd:variable name='down' value='down'/>
<cd:variable name='each' value='kazdy'/>
<cd:variable name='edge' value='hrana'/>
+ <cd:variable name='effective' value='effective'/>
<cd:variable name='eight' value='eight'/>
<cd:variable name='embed' value='embed'/>
<cd:variable name='empty' value='prazdne'/>
+ <cd:variable name='enable' value='enable'/>
<cd:variable name='end' value='end'/>
<cd:variable name='endnote' value='endnote'/>
<cd:variable name='enumeration' value='vycet'/>
@@ -209,9 +212,10 @@
<cd:variable name='force' value='sila'/>
<cd:variable name='foreground' value='popredi'/>
<cd:variable name='formula' value='rovnice'/>
- <cd:variable name='formulae' value='rovnice'/>
+ <cd:variable name='formulas' value='rovnice'/>
<cd:variable name='forward' value='vpred'/>
<cd:variable name='four' value='ctyri'/>
+ <cd:variable name='fractions' value='fractions'/>
<cd:variable name='frame' value='ramecek'/>
<cd:variable name='framedtext' value='oramovanytext'/>
<cd:variable name='friday' value='patek'/>
@@ -236,6 +240,7 @@
<cd:variable name='here' value='zde'/>
<cd:variable name='hereafter' value='nize'/>
<cd:variable name='hidden' value='skryte'/>
+ <cd:variable name='hiddenbar' value='hiddenbar'/>
<cd:variable name='hiding' value='skryt'/>
<cd:variable name='high' value='vysoko'/>
<cd:variable name='horizontal' value='horizontalne'/>
@@ -379,6 +384,7 @@
<cd:variable name='note' value='note'/>
<cd:variable name='nothanging' value='nothanging'/>
<cd:variable name='nothyphenated' value='nothyphenated'/>
+ <cd:variable name='notjoinedup' value='notjoinedup'/>
<cd:variable name='november' value='listopad'/>
<cd:variable name='nowhere' value='nikde'/>
<cd:variable name='nowhite' value='zadnabila'/>
@@ -627,6 +633,7 @@
<cd:constant name='anchor' value='anchor'/>
<cd:constant name='andtext' value='andtext'/>
<cd:constant name='apa' value='apa'/>
+ <cd:constant name='arguments' value='arguments'/>
<cd:constant name='arrow' value='sipka'/>
<cd:constant name='artauthor' value='artauthor'/>
<cd:constant name='artauthoretaldisplay' value='artauthoretaldisplay'/>
@@ -727,6 +734,7 @@
<cd:constant name='controls' value='controls'/>
<cd:constant name='conversion' value='konverze'/>
<cd:constant name='convertfile' value='konverzesouboru'/>
+ <cd:constant name='copies' value='copies'/>
<cd:constant name='corner' value='roh'/>
<cd:constant name='coupling' value='propojeni'/>
<cd:constant name='couplingway' value='zpusobpropojeni'/>
@@ -775,6 +783,7 @@
<cd:constant name='etaloption' value='etaloption'/>
<cd:constant name='etaltext' value='etaltext'/>
<cd:constant name='evenmargin' value='sudamarginalie'/>
+ <cd:constant name='exact' value='exact'/>
<cd:constant name='exitoffset' value='exitoffset'/>
<cd:constant name='expansion' value='expanzen'/>
<cd:constant name='export' value='export'/>
@@ -817,6 +826,7 @@
<cd:constant name='frameoffset' value='offsetramecku'/>
<cd:constant name='frameradius' value='polomerramecku'/>
<cd:constant name='frames' value='ramecky'/>
+ <cd:constant name='freeregion' value='freeregion'/>
<cd:constant name='from' value='z'/>
<cd:constant name='functioncolor' value='functioncolor'/>
<cd:constant name='functionstyle' value='functionstyle'/>
@@ -1166,6 +1176,7 @@
<cd:constant name='splitoffset' value='splitoffset'/>
<cd:constant name='spot' value='spot'/>
<cd:constant name='stack' value='stack'/>
+ <cd:constant name='stackname' value='stackname'/>
<cd:constant name='start' value='start'/>
<cd:constant name='starter' value='starter'/>
<cd:constant name='state' value='status'/>
@@ -1176,6 +1187,7 @@
<cd:constant name='strip' value='strip'/>
<cd:constant name='strut' value='strut'/>
<cd:constant name='style' value='pismeno'/>
+ <cd:constant name='stylealternative' value='stylealternative'/>
<cd:constant name='sub' value='pod'/>
<cd:constant name='subtitle' value='podtitulek'/>
<cd:constant name='suffix' value='suffix'/>
@@ -1231,6 +1243,7 @@
<cd:constant name='topspace' value='svrchnimezera'/>
<cd:constant name='topstate' value='statusvrsku'/>
<cd:constant name='totalnumber' value='totalnumber'/>
+ <cd:constant name='transform' value='transform'/>
<cd:constant name='translate' value='translate'/>
<cd:constant name='trimoffset' value='trimoffset'/>
<cd:constant name='type' value='typ'/>
@@ -1317,6 +1330,7 @@
<cd:command name='Words' value='Slova'/>
<cd:command name='about' value='oref'/>
<cd:command name='adaptlayout' value='prizpusobvzhled'/>
+ <cd:command name='alignment' value='alignment'/>
<cd:command name='arg' value='arg'/>
<cd:command name='at' value='pref'/>
<cd:command name='atleftmargin' value='atleftmargin'/>
@@ -1533,11 +1547,13 @@
<cd:command name='leftmargindistance' value='vzdalenostlevemarginalie'/>
<cd:command name='leftmarginwidth' value='sirkalevemarginalie'/>
<cd:command name='leg' value='leg'/>
+ <cd:command name='linecorrection' value='linecorrection'/>
<cd:command name='linewidth' value='tloustkacary'/>
<cd:command name='listheight' value='vyskaseznamu'/>
<cd:command name='listlength' value='delkaseznamu'/>
<cd:command name='listsymbol' value='listsymbol'/>
<cd:command name='listwidth' value='sirkaseznamu'/>
+ <cd:command name='localfootnotes' value='localfootnotes'/>
<cd:command name='logfields' value='zaznamovepole'/>
<cd:command name='lohi' value='nivy'/>
<cd:command name='low' value='nizky'/>
@@ -1546,6 +1562,7 @@
<cd:command name='makeupheight' value='vyskasazby'/>
<cd:command name='makeupwidth' value='sirkasazby'/>
<cd:command name='mar' value='okr'/>
+ <cd:command name='marginblock' value='marginblock'/>
<cd:command name='margindistance' value='vzdalenostmarginalie'/>
<cd:command name='marginrule' value='marginalnilinka'/>
<cd:command name='margintext' value='marginalnitext'/>
@@ -1645,6 +1662,7 @@
<cd:command name='rightmarginwidth' value='sirkapravemarginalie'/>
<cd:command name='romannumerals' value='rimskecislice'/>
<cd:command name='rotate' value='otocit'/>
+ <cd:command name='savebuffer' value='savebuffer'/>
<cd:command name='scale' value='meritko'/>
<cd:command name='screen' value='obrazovka'/>
<cd:command name='selectblocks' value='vyberbloky'/>
@@ -1680,7 +1698,9 @@
<cd:command name='setupcombinations' value='nastavspojeni'/>
<cd:command name='setupcombinedlist' value='nastavkombinovanyseznam'/>
<cd:command name='setupcomment' value='nastavkomentar'/>
+ <cd:command name='setupdescription' value='setupdescription'/>
<cd:command name='setupdescriptions' value='nastavpopisy'/>
+ <cd:command name='setupenumeration' value='setupenumeration'/>
<cd:command name='setupenumerations' value='nastavvycty'/>
<cd:command name='setupexternalfigures' value='nastavexterniobrazy'/>
<cd:command name='setupfield' value='nastavpole'/>
@@ -1695,8 +1715,10 @@
<cd:command name='setupfootnotedefinition' value='nastavdefinicipoznamekpodcarou'/>
<cd:command name='setupfootnotes' value='nastavpoznamkypodcarou'/>
<cd:command name='setupforms' value='setupforms'/>
+ <cd:command name='setupformula' value='setupformula'/>
<cd:command name='setupformulas' value='nastavrovnice'/>
<cd:command name='setupframed' value='nastavoramovani'/>
+ <cd:command name='setupframedtext' value='setupframedtext'/>
<cd:command name='setupframedtexts' value='nastavoramovanetexty'/>
<cd:command name='setuphead' value='nastavnadpis'/>
<cd:command name='setupheader' value='nastavzahlavi'/>
@@ -1725,7 +1747,9 @@
<cd:command name='setuplinewidth' value='nastavsirkucary'/>
<cd:command name='setuplist' value='nastavseznam'/>
<cd:command name='setupmakeup' value='nastavupravu'/>
+ <cd:command name='setupmarginblock' value='setupmarginblock'/>
<cd:command name='setupmarginblocks' value='nastavmarginalniblok'/>
+ <cd:command name='setupmargindata' value='setupmargindata'/>
<cd:command name='setupmarginrules' value='nastavmarginalnilinky'/>
<cd:command name='setupmarking' value='nastavznaceni'/>
<cd:command name='setupmathalignment' value='setupmathalignment'/>
@@ -1904,6 +1928,7 @@
<cd:command name='testcolumn' value='testcolumn'/>
<cd:command name='testpage' value='testpage'/>
<cd:command name='tex' value='tex'/>
+ <cd:command name='textbackground' value='textbackground'/>
<cd:command name='textheight' value='vyskatextu'/>
<cd:command name='textreference' value='odkaznatext'/>
<cd:command name='textrule' value='textovalinka'/>
diff --git a/tex/context/interface/mkii/keys-de.xml b/tex/context/interface/mkii/keys-de.xml
index 5c7ecc651..404f8da89 100644
--- a/tex/context/interface/mkii/keys-de.xml
+++ b/tex/context/interface/mkii/keys-de.xml
@@ -79,6 +79,7 @@
<cd:variable name='all' value='alles'/>
<cd:variable name='alphabetic' value='alphabetic'/>
<cd:variable name='always' value='immer'/>
+ <cd:variable name='anchor' value='anchor'/>
<cd:variable name='and' value='und'/>
<cd:variable name='answerarea' value='answerarea'/>
<cd:variable name='appendices' value='anhaenge'/>
@@ -172,9 +173,11 @@
<cd:variable name='down' value='down'/>
<cd:variable name='each' value='jede'/>
<cd:variable name='edge' value='kante'/>
+ <cd:variable name='effective' value='effective'/>
<cd:variable name='eight' value='acht'/>
<cd:variable name='embed' value='embed'/>
<cd:variable name='empty' value='leer'/>
+ <cd:variable name='enable' value='enable'/>
<cd:variable name='end' value='end'/>
<cd:variable name='endnote' value='endnote'/>
<cd:variable name='enumeration' value='nummerierung'/>
@@ -209,9 +212,10 @@
<cd:variable name='force' value='zwinge'/>
<cd:variable name='foreground' value='vordergrund'/>
<cd:variable name='formula' value='formel'/>
- <cd:variable name='formulae' value='formeln'/>
+ <cd:variable name='formulas' value='formeln'/>
<cd:variable name='forward' value='vorwaerts'/>
<cd:variable name='four' value='vier'/>
+ <cd:variable name='fractions' value='fractions'/>
<cd:variable name='frame' value='rahmen'/>
<cd:variable name='framedtext' value='umrahmtertext'/>
<cd:variable name='friday' value='freitag'/>
@@ -236,6 +240,7 @@
<cd:variable name='here' value='hier'/>
<cd:variable name='hereafter' value='nachher'/>
<cd:variable name='hidden' value='versteckt'/>
+ <cd:variable name='hiddenbar' value='hiddenbar'/>
<cd:variable name='hiding' value='verbergen'/>
<cd:variable name='high' value='hoch'/>
<cd:variable name='horizontal' value='horizontal'/>
@@ -379,6 +384,7 @@
<cd:variable name='note' value='note'/>
<cd:variable name='nothanging' value='nothanging'/>
<cd:variable name='nothyphenated' value='nothyphenated'/>
+ <cd:variable name='notjoinedup' value='notjoinedup'/>
<cd:variable name='november' value='november'/>
<cd:variable name='nowhere' value='nirgens'/>
<cd:variable name='nowhite' value='keinweiss'/>
@@ -627,6 +633,7 @@
<cd:constant name='anchor' value='anchor'/>
<cd:constant name='andtext' value='andtext'/>
<cd:constant name='apa' value='apa'/>
+ <cd:constant name='arguments' value='arguments'/>
<cd:constant name='arrow' value='pfeil'/>
<cd:constant name='artauthor' value='artauthor'/>
<cd:constant name='artauthoretaldisplay' value='artauthoretaldisplay'/>
@@ -727,6 +734,7 @@
<cd:constant name='controls' value='controls'/>
<cd:constant name='conversion' value='konversion'/>
<cd:constant name='convertfile' value='konvertieredatei'/>
+ <cd:constant name='copies' value='copies'/>
<cd:constant name='corner' value='winkel'/>
<cd:constant name='coupling' value='verknuepfung'/>
<cd:constant name='couplingway' value='verkopplungsart'/>
@@ -775,6 +783,7 @@
<cd:constant name='etaloption' value='etaloption'/>
<cd:constant name='etaltext' value='etaltext'/>
<cd:constant name='evenmargin' value='geraderand'/>
+ <cd:constant name='exact' value='exact'/>
<cd:constant name='exitoffset' value='exitoffset'/>
<cd:constant name='expansion' value='expansion'/>
<cd:constant name='export' value='export'/>
@@ -817,6 +826,7 @@
<cd:constant name='frameoffset' value='rahmenoffset'/>
<cd:constant name='frameradius' value='rahmenradius'/>
<cd:constant name='frames' value='umrahmen'/>
+ <cd:constant name='freeregion' value='freeregion'/>
<cd:constant name='from' value='von'/>
<cd:constant name='functioncolor' value='functioncolor'/>
<cd:constant name='functionstyle' value='functionstyle'/>
@@ -1166,6 +1176,7 @@
<cd:constant name='splitoffset' value='splitoffset'/>
<cd:constant name='spot' value='spot'/>
<cd:constant name='stack' value='stack'/>
+ <cd:constant name='stackname' value='stackname'/>
<cd:constant name='start' value='start'/>
<cd:constant name='starter' value='starter'/>
<cd:constant name='state' value='status'/>
@@ -1176,6 +1187,7 @@
<cd:constant name='strip' value='strip'/>
<cd:constant name='strut' value='strut'/>
<cd:constant name='style' value='stil'/>
+ <cd:constant name='stylealternative' value='stylealternative'/>
<cd:constant name='sub' value='unter'/>
<cd:constant name='subtitle' value='untertitel'/>
<cd:constant name='suffix' value='suffix'/>
@@ -1231,6 +1243,7 @@
<cd:constant name='topspace' value='kopfspatium'/>
<cd:constant name='topstate' value='statusoben'/>
<cd:constant name='totalnumber' value='totalnumber'/>
+ <cd:constant name='transform' value='transform'/>
<cd:constant name='translate' value='translate'/>
<cd:constant name='trimoffset' value='trimoffset'/>
<cd:constant name='type' value='typ'/>
@@ -1317,6 +1330,7 @@
<cd:command name='Words' value='Woerter'/>
<cd:command name='about' value='ueber'/>
<cd:command name='adaptlayout' value='passelayoutan'/>
+ <cd:command name='alignment' value='alignment'/>
<cd:command name='arg' value='arg'/>
<cd:command name='at' value='bei'/>
<cd:command name='atleftmargin' value='atleftmargin'/>
@@ -1533,11 +1547,13 @@
<cd:command name='leftmargindistance' value='linkemarginalafstand'/>
<cd:command name='leftmarginwidth' value='linkemarginalbreite'/>
<cd:command name='leg' value='leg'/>
+ <cd:command name='linecorrection' value='linecorrection'/>
<cd:command name='linewidth' value='liniendicke'/>
<cd:command name='listheight' value='listenhoehe'/>
<cd:command name='listlength' value='listenlaenge'/>
<cd:command name='listsymbol' value='listsymbol'/>
<cd:command name='listwidth' value='listenbreite'/>
+ <cd:command name='localfootnotes' value='localfootnotes'/>
<cd:command name='logfields' value='registrierefelder'/>
<cd:command name='lohi' value='tiho'/>
<cd:command name='low' value='tief'/>
@@ -1546,6 +1562,7 @@
<cd:command name='makeupheight' value='satzhoehe'/>
<cd:command name='makeupwidth' value='satzbreite'/>
<cd:command name='mar' value='mar'/>
+ <cd:command name='marginblock' value='marginblock'/>
<cd:command name='margindistance' value='marginalafstand'/>
<cd:command name='marginrule' value='marginallinie'/>
<cd:command name='margintext' value='marginaltext'/>
@@ -1645,6 +1662,7 @@
<cd:command name='rightmarginwidth' value='rechtemarginalbreite'/>
<cd:command name='romannumerals' value='roemischezahlen'/>
<cd:command name='rotate' value='drehen'/>
+ <cd:command name='savebuffer' value='savebuffer'/>
<cd:command name='scale' value='format'/>
<cd:command name='screen' value='bildschirm'/>
<cd:command name='selectblocks' value='waehlebloeckeaus'/>
@@ -1680,7 +1698,9 @@
<cd:command name='setupcombinations' value='stellekombinationein'/>
<cd:command name='setupcombinedlist' value='stellezusammengestelltelisteein'/>
<cd:command name='setupcomment' value='stellekommentarein'/>
+ <cd:command name='setupdescription' value='setupdescription'/>
<cd:command name='setupdescriptions' value='definierebeschreibungen'/>
+ <cd:command name='setupenumeration' value='setupenumeration'/>
<cd:command name='setupenumerations' value='stellebeschreibungein'/>
<cd:command name='setupexternalfigures' value='stelleexterneabbildungenein'/>
<cd:command name='setupfield' value='stellefeldein'/>
@@ -1695,8 +1715,10 @@
<cd:command name='setupfootnotedefinition' value='stellefussnotendefinitionein'/>
<cd:command name='setupfootnotes' value='stellefussnotenein'/>
<cd:command name='setupforms' value='setupforms'/>
+ <cd:command name='setupformula' value='setupformula'/>
<cd:command name='setupformulas' value='stelleformelnein'/>
<cd:command name='setupframed' value='stelleumrahmtein'/>
+ <cd:command name='setupframedtext' value='setupframedtext'/>
<cd:command name='setupframedtexts' value='stelleumrahmtetexteein'/>
<cd:command name='setuphead' value='stelleueberschriftein'/>
<cd:command name='setupheader' value='stellekopfzeileein'/>
@@ -1725,7 +1747,9 @@
<cd:command name='setuplinewidth' value='stellelinienbreiteein'/>
<cd:command name='setuplist' value='stellelisteein'/>
<cd:command name='setupmakeup' value='stelleumbruchein'/>
+ <cd:command name='setupmarginblock' value='setupmarginblock'/>
<cd:command name='setupmarginblocks' value='stellemarginalblockein'/>
+ <cd:command name='setupmargindata' value='setupmargindata'/>
<cd:command name='setupmarginrules' value='stellemarginallinieein'/>
<cd:command name='setupmarking' value='stellebeschriftungein'/>
<cd:command name='setupmathalignment' value='setupmathalignment'/>
@@ -1904,6 +1928,7 @@
<cd:command name='testcolumn' value='testcolumn'/>
<cd:command name='testpage' value='testpage'/>
<cd:command name='tex' value='tex'/>
+ <cd:command name='textbackground' value='textbackground'/>
<cd:command name='textheight' value='texthoehe'/>
<cd:command name='textreference' value='textreferenz'/>
<cd:command name='textrule' value='textlinie'/>
diff --git a/tex/context/interface/mkii/keys-en.xml b/tex/context/interface/mkii/keys-en.xml
index 621cbd763..a1c935db8 100644
--- a/tex/context/interface/mkii/keys-en.xml
+++ b/tex/context/interface/mkii/keys-en.xml
@@ -79,6 +79,7 @@
<cd:variable name='all' value='all'/>
<cd:variable name='alphabetic' value='alphabetic'/>
<cd:variable name='always' value='always'/>
+ <cd:variable name='anchor' value='anchor'/>
<cd:variable name='and' value='and'/>
<cd:variable name='answerarea' value='answerarea'/>
<cd:variable name='appendices' value='appendices'/>
@@ -172,9 +173,11 @@
<cd:variable name='down' value='down'/>
<cd:variable name='each' value='each'/>
<cd:variable name='edge' value='edge'/>
+ <cd:variable name='effective' value='effective'/>
<cd:variable name='eight' value='eight'/>
<cd:variable name='embed' value='embed'/>
<cd:variable name='empty' value='empty'/>
+ <cd:variable name='enable' value='enable'/>
<cd:variable name='end' value='end'/>
<cd:variable name='endnote' value='endnote'/>
<cd:variable name='enumeration' value='enumeration'/>
@@ -209,9 +212,10 @@
<cd:variable name='force' value='force'/>
<cd:variable name='foreground' value='foreground'/>
<cd:variable name='formula' value='formula'/>
- <cd:variable name='formulae' value='formulae'/>
+ <cd:variable name='formulas' value='formulas'/>
<cd:variable name='forward' value='forward'/>
<cd:variable name='four' value='four'/>
+ <cd:variable name='fractions' value='fractions'/>
<cd:variable name='frame' value='frame'/>
<cd:variable name='framedtext' value='framedtext'/>
<cd:variable name='friday' value='friday'/>
@@ -236,6 +240,7 @@
<cd:variable name='here' value='here'/>
<cd:variable name='hereafter' value='hereafter'/>
<cd:variable name='hidden' value='hidden'/>
+ <cd:variable name='hiddenbar' value='hiddenbar'/>
<cd:variable name='hiding' value='hiding'/>
<cd:variable name='high' value='high'/>
<cd:variable name='horizontal' value='horizontal'/>
@@ -379,6 +384,7 @@
<cd:variable name='note' value='note'/>
<cd:variable name='nothanging' value='nothanging'/>
<cd:variable name='nothyphenated' value='nothyphenated'/>
+ <cd:variable name='notjoinedup' value='notjoinedup'/>
<cd:variable name='november' value='november'/>
<cd:variable name='nowhere' value='nowhere'/>
<cd:variable name='nowhite' value='nowhite'/>
@@ -627,6 +633,7 @@
<cd:constant name='anchor' value='anchor'/>
<cd:constant name='andtext' value='andtext'/>
<cd:constant name='apa' value='apa'/>
+ <cd:constant name='arguments' value='arguments'/>
<cd:constant name='arrow' value='arrow'/>
<cd:constant name='artauthor' value='artauthor'/>
<cd:constant name='artauthoretaldisplay' value='artauthoretaldisplay'/>
@@ -727,6 +734,7 @@
<cd:constant name='controls' value='controls'/>
<cd:constant name='conversion' value='conversion'/>
<cd:constant name='convertfile' value='convertfile'/>
+ <cd:constant name='copies' value='copies'/>
<cd:constant name='corner' value='corner'/>
<cd:constant name='coupling' value='coupling'/>
<cd:constant name='couplingway' value='couplingway'/>
@@ -775,6 +783,7 @@
<cd:constant name='etaloption' value='etaloption'/>
<cd:constant name='etaltext' value='etaltext'/>
<cd:constant name='evenmargin' value='evenmargin'/>
+ <cd:constant name='exact' value='exact'/>
<cd:constant name='exitoffset' value='exitoffset'/>
<cd:constant name='expansion' value='expansion'/>
<cd:constant name='export' value='export'/>
@@ -817,6 +826,7 @@
<cd:constant name='frameoffset' value='frameoffset'/>
<cd:constant name='frameradius' value='frameradius'/>
<cd:constant name='frames' value='frames'/>
+ <cd:constant name='freeregion' value='freeregion'/>
<cd:constant name='from' value='from'/>
<cd:constant name='functioncolor' value='functioncolor'/>
<cd:constant name='functionstyle' value='functionstyle'/>
@@ -1166,6 +1176,7 @@
<cd:constant name='splitoffset' value='splitoffset'/>
<cd:constant name='spot' value='spot'/>
<cd:constant name='stack' value='stack'/>
+ <cd:constant name='stackname' value='stackname'/>
<cd:constant name='start' value='start'/>
<cd:constant name='starter' value='starter'/>
<cd:constant name='state' value='state'/>
@@ -1176,6 +1187,7 @@
<cd:constant name='strip' value='strip'/>
<cd:constant name='strut' value='strut'/>
<cd:constant name='style' value='style'/>
+ <cd:constant name='stylealternative' value='stylealternative'/>
<cd:constant name='sub' value='sub'/>
<cd:constant name='subtitle' value='subtitle'/>
<cd:constant name='suffix' value='suffix'/>
@@ -1231,6 +1243,7 @@
<cd:constant name='topspace' value='topspace'/>
<cd:constant name='topstate' value='topstate'/>
<cd:constant name='totalnumber' value='totalnumber'/>
+ <cd:constant name='transform' value='transform'/>
<cd:constant name='translate' value='translate'/>
<cd:constant name='trimoffset' value='trimoffset'/>
<cd:constant name='type' value='type'/>
@@ -1317,6 +1330,7 @@
<cd:command name='Words' value='Words'/>
<cd:command name='about' value='about'/>
<cd:command name='adaptlayout' value='adaptlayout'/>
+ <cd:command name='alignment' value='alignment'/>
<cd:command name='arg' value='arg'/>
<cd:command name='at' value='at'/>
<cd:command name='atleftmargin' value='atleftmargin'/>
@@ -1533,11 +1547,13 @@
<cd:command name='leftmargindistance' value='leftmargindistance'/>
<cd:command name='leftmarginwidth' value='leftmarginwidth'/>
<cd:command name='leg' value='leg'/>
+ <cd:command name='linecorrection' value='linecorrection'/>
<cd:command name='linewidth' value='linethickness'/>
<cd:command name='listheight' value='listheight'/>
<cd:command name='listlength' value='listlength'/>
<cd:command name='listsymbol' value='listsymbol'/>
<cd:command name='listwidth' value='listwidth'/>
+ <cd:command name='localfootnotes' value='localfootnotes'/>
<cd:command name='logfields' value='logfields'/>
<cd:command name='lohi' value='lohi'/>
<cd:command name='low' value='low'/>
@@ -1546,6 +1562,7 @@
<cd:command name='makeupheight' value='makeupheight'/>
<cd:command name='makeupwidth' value='makeupwidth'/>
<cd:command name='mar' value='mar'/>
+ <cd:command name='marginblock' value='marginblock'/>
<cd:command name='margindistance' value='margindistance'/>
<cd:command name='marginrule' value='marginrule'/>
<cd:command name='margintext' value='margintext'/>
@@ -1645,6 +1662,7 @@
<cd:command name='rightmarginwidth' value='rightmarginwidth'/>
<cd:command name='romannumerals' value='romannumerals'/>
<cd:command name='rotate' value='rotate'/>
+ <cd:command name='savebuffer' value='savebuffer'/>
<cd:command name='scale' value='scale'/>
<cd:command name='screen' value='screen'/>
<cd:command name='selectblocks' value='selectblocks'/>
@@ -1680,7 +1698,9 @@
<cd:command name='setupcombinations' value='setupcombinations'/>
<cd:command name='setupcombinedlist' value='setupcombinedlist'/>
<cd:command name='setupcomment' value='setupcomment'/>
+ <cd:command name='setupdescription' value='setupdescription'/>
<cd:command name='setupdescriptions' value='setupdescriptions'/>
+ <cd:command name='setupenumeration' value='setupenumeration'/>
<cd:command name='setupenumerations' value='setupenumerations'/>
<cd:command name='setupexternalfigures' value='setupexternalfigures'/>
<cd:command name='setupfield' value='setupfield'/>
@@ -1695,8 +1715,10 @@
<cd:command name='setupfootnotedefinition' value='setupfootnotedefinition'/>
<cd:command name='setupfootnotes' value='setupfootnotes'/>
<cd:command name='setupforms' value='setupforms'/>
+ <cd:command name='setupformula' value='setupformula'/>
<cd:command name='setupformulas' value='setupformulae'/>
<cd:command name='setupframed' value='setupframed'/>
+ <cd:command name='setupframedtext' value='setupframedtext'/>
<cd:command name='setupframedtexts' value='setupframedtexts'/>
<cd:command name='setuphead' value='setuphead'/>
<cd:command name='setupheader' value='setupheader'/>
@@ -1725,7 +1747,9 @@
<cd:command name='setuplinewidth' value='setuplinewidth'/>
<cd:command name='setuplist' value='setuplist'/>
<cd:command name='setupmakeup' value='setupmakeup'/>
+ <cd:command name='setupmarginblock' value='setupmarginblock'/>
<cd:command name='setupmarginblocks' value='setupmarginblocks'/>
+ <cd:command name='setupmargindata' value='setupmargindata'/>
<cd:command name='setupmarginrules' value='setupmarginrules'/>
<cd:command name='setupmarking' value='setupmarking'/>
<cd:command name='setupmathalignment' value='setupmathalignment'/>
@@ -1904,6 +1928,7 @@
<cd:command name='testcolumn' value='testcolumn'/>
<cd:command name='testpage' value='testpage'/>
<cd:command name='tex' value='tex'/>
+ <cd:command name='textbackground' value='textbackground'/>
<cd:command name='textheight' value='textheight'/>
<cd:command name='textreference' value='textreference'/>
<cd:command name='textrule' value='textrule'/>
diff --git a/tex/context/interface/mkii/keys-fr.xml b/tex/context/interface/mkii/keys-fr.xml
index 301f94628..db6e35ac6 100644
--- a/tex/context/interface/mkii/keys-fr.xml
+++ b/tex/context/interface/mkii/keys-fr.xml
@@ -79,6 +79,7 @@
<cd:variable name='all' value='tout'/>
<cd:variable name='alphabetic' value='alphabetic'/>
<cd:variable name='always' value='toujours'/>
+ <cd:variable name='anchor' value='anchor'/>
<cd:variable name='and' value='and'/>
<cd:variable name='answerarea' value='answerarea'/>
<cd:variable name='appendices' value='annexes'/>
@@ -172,9 +173,11 @@
<cd:variable name='down' value='down'/>
<cd:variable name='each' value='chaque'/>
<cd:variable name='edge' value='bord'/>
+ <cd:variable name='effective' value='effective'/>
<cd:variable name='eight' value='eight'/>
<cd:variable name='embed' value='embed'/>
<cd:variable name='empty' value='vide'/>
+ <cd:variable name='enable' value='enable'/>
<cd:variable name='end' value='end'/>
<cd:variable name='endnote' value='notefin'/>
<cd:variable name='enumeration' value='enumeration'/>
@@ -209,9 +212,10 @@
<cd:variable name='force' value='force'/>
<cd:variable name='foreground' value='premierplan'/>
<cd:variable name='formula' value='formule'/>
- <cd:variable name='formulae' value='formules'/>
+ <cd:variable name='formulas' value='formules'/>
<cd:variable name='forward' value='avance'/>
<cd:variable name='four' value='quatre'/>
+ <cd:variable name='fractions' value='fractions'/>
<cd:variable name='frame' value='cadre'/>
<cd:variable name='framedtext' value='texteencadre'/>
<cd:variable name='friday' value='vendredi'/>
@@ -236,6 +240,7 @@
<cd:variable name='here' value='ici'/>
<cd:variable name='hereafter' value='suivant'/>
<cd:variable name='hidden' value='cache'/>
+ <cd:variable name='hiddenbar' value='hiddenbar'/>
<cd:variable name='hiding' value='cache'/>
<cd:variable name='high' value='haut'/>
<cd:variable name='horizontal' value='horizontale'/>
@@ -379,6 +384,7 @@
<cd:variable name='note' value='note'/>
<cd:variable name='nothanging' value='nonsuspendu'/>
<cd:variable name='nothyphenated' value='nothyphenated'/>
+ <cd:variable name='notjoinedup' value='notjoinedup'/>
<cd:variable name='november' value='novembre'/>
<cd:variable name='nowhere' value='nulpart'/>
<cd:variable name='nowhite' value='sansblanc'/>
@@ -627,6 +633,7 @@
<cd:constant name='anchor' value='anchor'/>
<cd:constant name='andtext' value='andtext'/>
<cd:constant name='apa' value='apa'/>
+ <cd:constant name='arguments' value='arguments'/>
<cd:constant name='arrow' value='fleche'/>
<cd:constant name='artauthor' value='artauthor'/>
<cd:constant name='artauthoretaldisplay' value='artauthoretaldisplay'/>
@@ -727,6 +734,7 @@
<cd:constant name='controls' value='controles'/>
<cd:constant name='conversion' value='conversion'/>
<cd:constant name='convertfile' value='conversionfichier'/>
+ <cd:constant name='copies' value='copies'/>
<cd:constant name='corner' value='coin'/>
<cd:constant name='coupling' value='couplage'/>
<cd:constant name='couplingway' value='modecouplage'/>
@@ -775,6 +783,7 @@
<cd:constant name='etaloption' value='etaloption'/>
<cd:constant name='etaltext' value='etaltext'/>
<cd:constant name='evenmargin' value='margepaire'/>
+ <cd:constant name='exact' value='exact'/>
<cd:constant name='exitoffset' value='exitoffset'/>
<cd:constant name='expansion' value='expansion'/>
<cd:constant name='export' value='export'/>
@@ -817,6 +826,7 @@
<cd:constant name='frameoffset' value='decalagecadre'/>
<cd:constant name='frameradius' value='rayoncadre'/>
<cd:constant name='frames' value='cadres'/>
+ <cd:constant name='freeregion' value='freeregion'/>
<cd:constant name='from' value='de'/>
<cd:constant name='functioncolor' value='functioncolor'/>
<cd:constant name='functionstyle' value='functionstyle'/>
@@ -1166,6 +1176,7 @@
<cd:constant name='splitoffset' value='splitoffset'/>
<cd:constant name='spot' value='spot'/>
<cd:constant name='stack' value='stack'/>
+ <cd:constant name='stackname' value='stackname'/>
<cd:constant name='start' value='demarre'/>
<cd:constant name='starter' value='starter'/>
<cd:constant name='state' value='etat'/>
@@ -1176,6 +1187,7 @@
<cd:constant name='strip' value='strip'/>
<cd:constant name='strut' value='strut'/>
<cd:constant name='style' value='style'/>
+ <cd:constant name='stylealternative' value='stylealternative'/>
<cd:constant name='sub' value='sous'/>
<cd:constant name='subtitle' value='soustitre'/>
<cd:constant name='suffix' value='suffix'/>
@@ -1231,6 +1243,7 @@
<cd:constant name='topspace' value='espacesup'/>
<cd:constant name='topstate' value='etatsup'/>
<cd:constant name='totalnumber' value='totalnumber'/>
+ <cd:constant name='transform' value='transform'/>
<cd:constant name='translate' value='translate'/>
<cd:constant name='trimoffset' value='trimoffset'/>
<cd:constant name='type' value='type'/>
@@ -1317,6 +1330,7 @@
<cd:command name='Words' value='Mots'/>
<cd:command name='about' value='concernant'/>
<cd:command name='adaptlayout' value='adaptedisposition'/>
+ <cd:command name='alignment' value='alignment'/>
<cd:command name='arg' value='arg'/>
<cd:command name='at' value='a'/>
<cd:command name='atleftmargin' value='atleftmargin'/>
@@ -1533,11 +1547,13 @@
<cd:command name='leftmargindistance' value='distancemargegauche'/>
<cd:command name='leftmarginwidth' value='largeurmargegauche'/>
<cd:command name='leg' value='leg'/>
+ <cd:command name='linecorrection' value='linecorrection'/>
<cd:command name='linewidth' value='largeurligne'/>
<cd:command name='listheight' value='hauteurliste'/>
<cd:command name='listlength' value='llongueurliste'/>
<cd:command name='listsymbol' value='listesymbole'/>
<cd:command name='listwidth' value='largeurliste'/>
+ <cd:command name='localfootnotes' value='localfootnotes'/>
<cd:command name='logfields' value='logchamp'/>
<cd:command name='lohi' value='baha'/>
<cd:command name='low' value='bas'/>
@@ -1546,6 +1562,7 @@
<cd:command name='makeupheight' value='hauteurmakeup'/>
<cd:command name='makeupwidth' value='largeurmakeup'/>
<cd:command name='mar' value='mar'/>
+ <cd:command name='marginblock' value='marginblock'/>
<cd:command name='margindistance' value='distancemarge'/>
<cd:command name='marginrule' value='margereglee'/>
<cd:command name='margintext' value='textemarge'/>
@@ -1645,6 +1662,7 @@
<cd:command name='rightmarginwidth' value='largeurmargedroite'/>
<cd:command name='romannumerals' value='chiffresromains'/>
<cd:command name='rotate' value='oriente'/>
+ <cd:command name='savebuffer' value='savebuffer'/>
<cd:command name='scale' value='echelle'/>
<cd:command name='screen' value='ecran'/>
<cd:command name='selectblocks' value='selectionneblocs'/>
@@ -1680,7 +1698,9 @@
<cd:command name='setupcombinations' value='reglecombinaisons'/>
<cd:command name='setupcombinedlist' value='reglelisteimbriquee'/>
<cd:command name='setupcomment' value='reglecommentaire'/>
+ <cd:command name='setupdescription' value='setupdescription'/>
<cd:command name='setupdescriptions' value='regledescriptions'/>
+ <cd:command name='setupenumeration' value='setupenumeration'/>
<cd:command name='setupenumerations' value='regleenumerations'/>
<cd:command name='setupexternalfigures' value='reglefiguresexternes'/>
<cd:command name='setupfield' value='reglechamp'/>
@@ -1695,8 +1715,10 @@
<cd:command name='setupfootnotedefinition' value='definitnotepdp'/>
<cd:command name='setupfootnotes' value='reglenotepdp'/>
<cd:command name='setupforms' value='regleformulaires'/>
+ <cd:command name='setupformula' value='setupformula'/>
<cd:command name='setupformulas' value='regleformules'/>
<cd:command name='setupframed' value='regleencadre'/>
+ <cd:command name='setupframedtext' value='setupframedtext'/>
<cd:command name='setupframedtexts' value='setupframedtexts'/>
<cd:command name='setuphead' value='regletete'/>
<cd:command name='setupheader' value='regleentete'/>
@@ -1725,7 +1747,9 @@
<cd:command name='setuplinewidth' value='regleepaisseurligne'/>
<cd:command name='setuplist' value='regleliste'/>
<cd:command name='setupmakeup' value='reglemakeup'/>
+ <cd:command name='setupmarginblock' value='setupmarginblock'/>
<cd:command name='setupmarginblocks' value='regleblocmarge'/>
+ <cd:command name='setupmargindata' value='setupmargindata'/>
<cd:command name='setupmarginrules' value='reglemargereglee'/>
<cd:command name='setupmarking' value='reglemarquage'/>
<cd:command name='setupmathalignment' value='setupmathalignment'/>
@@ -1904,6 +1928,7 @@
<cd:command name='testcolumn' value='testcolumn'/>
<cd:command name='testpage' value='testpage'/>
<cd:command name='tex' value='tex'/>
+ <cd:command name='textbackground' value='textbackground'/>
<cd:command name='textheight' value='hauteurtexte'/>
<cd:command name='textreference' value='referencetexte'/>
<cd:command name='textrule' value='ligneregleetexte'/>
diff --git a/tex/context/interface/mkii/keys-it.xml b/tex/context/interface/mkii/keys-it.xml
index 458acd5c1..86d6868b4 100644
--- a/tex/context/interface/mkii/keys-it.xml
+++ b/tex/context/interface/mkii/keys-it.xml
@@ -79,6 +79,7 @@
<cd:variable name='all' value='tutti'/>
<cd:variable name='alphabetic' value='alphabetic'/>
<cd:variable name='always' value='sempre'/>
+ <cd:variable name='anchor' value='anchor'/>
<cd:variable name='and' value='and'/>
<cd:variable name='answerarea' value='answerarea'/>
<cd:variable name='appendices' value='appendici'/>
@@ -172,9 +173,11 @@
<cd:variable name='down' value='down'/>
<cd:variable name='each' value='ogni'/>
<cd:variable name='edge' value='bordo'/>
+ <cd:variable name='effective' value='effective'/>
<cd:variable name='eight' value='eight'/>
<cd:variable name='embed' value='embed'/>
<cd:variable name='empty' value='vuoto'/>
+ <cd:variable name='enable' value='enable'/>
<cd:variable name='end' value='end'/>
<cd:variable name='endnote' value='endnote'/>
<cd:variable name='enumeration' value='enumerazione'/>
@@ -209,9 +212,10 @@
<cd:variable name='force' value='forza'/>
<cd:variable name='foreground' value='foreground'/>
<cd:variable name='formula' value='formula'/>
- <cd:variable name='formulae' value='formule'/>
+ <cd:variable name='formulas' value='formule'/>
<cd:variable name='forward' value='avanti'/>
<cd:variable name='four' value='quattro'/>
+ <cd:variable name='fractions' value='fractions'/>
<cd:variable name='frame' value='cornice'/>
<cd:variable name='framedtext' value='testoincorniciato'/>
<cd:variable name='friday' value='venerdi'/>
@@ -236,6 +240,7 @@
<cd:variable name='here' value='qui'/>
<cd:variable name='hereafter' value='seguente'/>
<cd:variable name='hidden' value='nascosto'/>
+ <cd:variable name='hiddenbar' value='hiddenbar'/>
<cd:variable name='hiding' value='nascondere'/>
<cd:variable name='high' value='alto'/>
<cd:variable name='horizontal' value='orizzontale'/>
@@ -379,6 +384,7 @@
<cd:variable name='note' value='note'/>
<cd:variable name='nothanging' value='nonsospeso'/>
<cd:variable name='nothyphenated' value='nonsillabato'/>
+ <cd:variable name='notjoinedup' value='notjoinedup'/>
<cd:variable name='november' value='novembre'/>
<cd:variable name='nowhere' value='danessunaparte'/>
<cd:variable name='nowhite' value='nobianco'/>
@@ -627,6 +633,7 @@
<cd:constant name='anchor' value='anchor'/>
<cd:constant name='andtext' value='andtext'/>
<cd:constant name='apa' value='apa'/>
+ <cd:constant name='arguments' value='arguments'/>
<cd:constant name='arrow' value='freccia'/>
<cd:constant name='artauthor' value='artauthor'/>
<cd:constant name='artauthoretaldisplay' value='artauthoretaldisplay'/>
@@ -727,6 +734,7 @@
<cd:constant name='controls' value='controlli'/>
<cd:constant name='conversion' value='conversione'/>
<cd:constant name='convertfile' value='convertifile'/>
+ <cd:constant name='copies' value='copies'/>
<cd:constant name='corner' value='angolo'/>
<cd:constant name='coupling' value='accoppiamento'/>
<cd:constant name='couplingway' value='modoaccoppiamento'/>
@@ -775,6 +783,7 @@
<cd:constant name='etaloption' value='etaloption'/>
<cd:constant name='etaltext' value='etaltext'/>
<cd:constant name='evenmargin' value='marginepari'/>
+ <cd:constant name='exact' value='exact'/>
<cd:constant name='exitoffset' value='exitoffset'/>
<cd:constant name='expansion' value='espansione'/>
<cd:constant name='export' value='export'/>
@@ -817,6 +826,7 @@
<cd:constant name='frameoffset' value='offsetcornice'/>
<cd:constant name='frameradius' value='raggiocornice'/>
<cd:constant name='frames' value='cornici'/>
+ <cd:constant name='freeregion' value='freeregion'/>
<cd:constant name='from' value='da'/>
<cd:constant name='functioncolor' value='functioncolor'/>
<cd:constant name='functionstyle' value='functionstyle'/>
@@ -1166,6 +1176,7 @@
<cd:constant name='splitoffset' value='splitoffset'/>
<cd:constant name='spot' value='spot'/>
<cd:constant name='stack' value='stack'/>
+ <cd:constant name='stackname' value='stackname'/>
<cd:constant name='start' value='inizia'/>
<cd:constant name='starter' value='starter'/>
<cd:constant name='state' value='stato'/>
@@ -1176,6 +1187,7 @@
<cd:constant name='strip' value='strip'/>
<cd:constant name='strut' value='strut'/>
<cd:constant name='style' value='stile'/>
+ <cd:constant name='stylealternative' value='stylealternative'/>
<cd:constant name='sub' value='sotto'/>
<cd:constant name='subtitle' value='sottotitolo'/>
<cd:constant name='suffix' value='suffix'/>
@@ -1231,6 +1243,7 @@
<cd:constant name='topspace' value='spaziocima'/>
<cd:constant name='topstate' value='statocima'/>
<cd:constant name='totalnumber' value='totalnumber'/>
+ <cd:constant name='transform' value='transform'/>
<cd:constant name='translate' value='translate'/>
<cd:constant name='trimoffset' value='trimoffset'/>
<cd:constant name='type' value='type'/>
@@ -1317,6 +1330,7 @@
<cd:command name='Words' value='Parole'/>
<cd:command name='about' value='intorno'/>
<cd:command name='adaptlayout' value='adattalayout'/>
+ <cd:command name='alignment' value='alignment'/>
<cd:command name='arg' value='arg'/>
<cd:command name='at' value='al'/>
<cd:command name='atleftmargin' value='atleftmargin'/>
@@ -1533,11 +1547,13 @@
<cd:command name='leftmargindistance' value='distanzamarginesinistro'/>
<cd:command name='leftmarginwidth' value='ampiezzamarginesinistro'/>
<cd:command name='leg' value='leg'/>
+ <cd:command name='linecorrection' value='linecorrection'/>
<cd:command name='linewidth' value='spessoreriga'/>
<cd:command name='listheight' value='altezzaelenco'/>
<cd:command name='listlength' value='lunghezzaelenco'/>
<cd:command name='listsymbol' value='listsymbol'/>
<cd:command name='listwidth' value='ampiezzaelenco'/>
+ <cd:command name='localfootnotes' value='localfootnotes'/>
<cd:command name='logfields' value='logcampi'/>
<cd:command name='lohi' value='pedap'/>
<cd:command name='low' value='ped'/>
@@ -1546,6 +1562,7 @@
<cd:command name='makeupheight' value='altezzamakeup'/>
<cd:command name='makeupwidth' value='ampiezzamakeup'/>
<cd:command name='mar' value='mar'/>
+ <cd:command name='marginblock' value='marginblock'/>
<cd:command name='margindistance' value='distanzamargine'/>
<cd:command name='marginrule' value='lineamargine'/>
<cd:command name='margintext' value='testoinmargine'/>
@@ -1645,6 +1662,7 @@
<cd:command name='rightmarginwidth' value='ampiezzamarginedestro'/>
<cd:command name='romannumerals' value='numeriromani'/>
<cd:command name='rotate' value='ruota'/>
+ <cd:command name='savebuffer' value='savebuffer'/>
<cd:command name='scale' value='scala'/>
<cd:command name='screen' value='schermo'/>
<cd:command name='selectblocks' value='selezionablocchi'/>
@@ -1680,7 +1698,9 @@
<cd:command name='setupcombinations' value='impostacombinazioni'/>
<cd:command name='setupcombinedlist' value='impostaelencocombinato'/>
<cd:command name='setupcomment' value='impostacommento'/>
+ <cd:command name='setupdescription' value='setupdescription'/>
<cd:command name='setupdescriptions' value='impostadescrizioni'/>
+ <cd:command name='setupenumeration' value='setupenumeration'/>
<cd:command name='setupenumerations' value='impostaenumerazioni'/>
<cd:command name='setupexternalfigures' value='impostafigureesterne'/>
<cd:command name='setupfield' value='impostacampo'/>
@@ -1695,8 +1715,10 @@
<cd:command name='setupfootnotedefinition' value='impostadefinizionenotepdp'/>
<cd:command name='setupfootnotes' value='impostanotepdp'/>
<cd:command name='setupforms' value='impostaforms'/>
+ <cd:command name='setupformula' value='setupformula'/>
<cd:command name='setupformulas' value='impostaformule'/>
<cd:command name='setupframed' value='impostaincorniciato'/>
+ <cd:command name='setupframedtext' value='setupframedtext'/>
<cd:command name='setupframedtexts' value='impostatestiincorniciati'/>
<cd:command name='setuphead' value='impostatesta'/>
<cd:command name='setupheader' value='impostainstestazione'/>
@@ -1725,7 +1747,9 @@
<cd:command name='setuplinewidth' value='impostaampiezzariga'/>
<cd:command name='setuplist' value='impostaelenco'/>
<cd:command name='setupmakeup' value='impostamakeup'/>
+ <cd:command name='setupmarginblock' value='setupmarginblock'/>
<cd:command name='setupmarginblocks' value='impostablocchimargine'/>
+ <cd:command name='setupmargindata' value='setupmargindata'/>
<cd:command name='setupmarginrules' value='impostalineemargine'/>
<cd:command name='setupmarking' value='impostamarcatura'/>
<cd:command name='setupmathalignment' value='setupmathalignment'/>
@@ -1904,6 +1928,7 @@
<cd:command name='testcolumn' value='testcolumn'/>
<cd:command name='testpage' value='testpage'/>
<cd:command name='tex' value='tex'/>
+ <cd:command name='textbackground' value='textbackground'/>
<cd:command name='textheight' value='altezzatesto'/>
<cd:command name='textreference' value='riferimentotesto'/>
<cd:command name='textrule' value='lineatesto'/>
diff --git a/tex/context/interface/mkii/keys-nl.xml b/tex/context/interface/mkii/keys-nl.xml
index 5e214c8bb..1c6077d1e 100644
--- a/tex/context/interface/mkii/keys-nl.xml
+++ b/tex/context/interface/mkii/keys-nl.xml
@@ -79,6 +79,7 @@
<cd:variable name='all' value='alles'/>
<cd:variable name='alphabetic' value='alphabetic'/>
<cd:variable name='always' value='altijd'/>
+ <cd:variable name='anchor' value='anker'/>
<cd:variable name='and' value='en'/>
<cd:variable name='answerarea' value='antwoordgebied'/>
<cd:variable name='appendices' value='bijlagen'/>
@@ -142,7 +143,7 @@
<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='combination' value='combinatie'/>
<cd:variable name='command' value='commando'/>
<cd:variable name='commands' value='commandos'/>
<cd:variable name='comment' value='commentaar'/>
@@ -172,9 +173,11 @@
<cd:variable name='down' value='omlaag'/>
<cd:variable name='each' value='elk'/>
<cd:variable name='edge' value='rand'/>
+ <cd:variable name='effective' value='effectief'/>
<cd:variable name='eight' value='acht'/>
<cd:variable name='embed' value='sluitin'/>
<cd:variable name='empty' value='leeg'/>
+ <cd:variable name='enable' value='enable'/>
<cd:variable name='end' value='eind'/>
<cd:variable name='endnote' value='eindnoot'/>
<cd:variable name='enumeration' value='doornummering'/>
@@ -209,9 +212,10 @@
<cd:variable name='force' value='forceer'/>
<cd:variable name='foreground' value='voorgrond'/>
<cd:variable name='formula' value='formule'/>
- <cd:variable name='formulae' value='formules'/>
+ <cd:variable name='formulas' value='formules'/>
<cd:variable name='forward' value='vooruit'/>
<cd:variable name='four' value='vier'/>
+ <cd:variable name='fractions' value='fractions'/>
<cd:variable name='frame' value='kader'/>
<cd:variable name='framedtext' value='kadertekst'/>
<cd:variable name='friday' value='vrijdag'/>
@@ -236,6 +240,7 @@
<cd:variable name='here' value='hier'/>
<cd:variable name='hereafter' value='hieronder'/>
<cd:variable name='hidden' value='verborgen'/>
+ <cd:variable name='hiddenbar' value='hiddenbar'/>
<cd:variable name='hiding' value='verbergen'/>
<cd:variable name='high' value='hoog'/>
<cd:variable name='horizontal' value='horizontaal'/>
@@ -379,6 +384,7 @@
<cd:variable name='note' value='note'/>
<cd:variable name='nothanging' value='niethangend'/>
<cd:variable name='nothyphenated' value='nietafgebroken'/>
+ <cd:variable name='notjoinedup' value='nietaansluitend'/>
<cd:variable name='november' value='november'/>
<cd:variable name='nowhere' value='nergens'/>
<cd:variable name='nowhite' value='geenwit'/>
@@ -627,6 +633,7 @@
<cd:constant name='anchor' value='anker'/>
<cd:constant name='andtext' value='andtext'/>
<cd:constant name='apa' value='apa'/>
+ <cd:constant name='arguments' value='argumenten'/>
<cd:constant name='arrow' value='pijl'/>
<cd:constant name='artauthor' value='artauthor'/>
<cd:constant name='artauthoretaldisplay' value='artauthoretaldisplay'/>
@@ -727,6 +734,7 @@
<cd:constant name='controls' value='sturing'/>
<cd:constant name='conversion' value='conversie'/>
<cd:constant name='convertfile' value='converteerfile'/>
+ <cd:constant name='copies' value='kopieen'/>
<cd:constant name='corner' value='hoek'/>
<cd:constant name='coupling' value='koppeling'/>
<cd:constant name='couplingway' value='koppelwijze'/>
@@ -775,6 +783,7 @@
<cd:constant name='etaloption' value='etaloption'/>
<cd:constant name='etaltext' value='etaltext'/>
<cd:constant name='evenmargin' value='evenmarge'/>
+ <cd:constant name='exact' value='exact'/>
<cd:constant name='exitoffset' value='exitoffset'/>
<cd:constant name='expansion' value='expansie'/>
<cd:constant name='export' value='exporteer'/>
@@ -817,6 +826,7 @@
<cd:constant name='frameoffset' value='kaderoffset'/>
<cd:constant name='frameradius' value='kaderstraal'/>
<cd:constant name='frames' value='hokjes'/>
+ <cd:constant name='freeregion' value='vrijgebied'/>
<cd:constant name='from' value='van'/>
<cd:constant name='functioncolor' value='functioncolor'/>
<cd:constant name='functionstyle' value='functionstyle'/>
@@ -1166,6 +1176,7 @@
<cd:constant name='splitoffset' value='splitsoffset'/>
<cd:constant name='spot' value='spot'/>
<cd:constant name='stack' value='stapel'/>
+ <cd:constant name='stackname' value='stapelnaam'/>
<cd:constant name='start' value='start'/>
<cd:constant name='starter' value='opener'/>
<cd:constant name='state' value='status'/>
@@ -1176,6 +1187,7 @@
<cd:constant name='strip' value='strip'/>
<cd:constant name='strut' value='strut'/>
<cd:constant name='style' value='letter'/>
+ <cd:constant name='stylealternative' value='stylevariant'/>
<cd:constant name='sub' value='sub'/>
<cd:constant name='subtitle' value='subtitel'/>
<cd:constant name='suffix' value='suffix'/>
@@ -1231,6 +1243,7 @@
<cd:constant name='topspace' value='kopwit'/>
<cd:constant name='topstate' value='bovenstatus'/>
<cd:constant name='totalnumber' value='totalnumber'/>
+ <cd:constant name='transform' value='transformatie'/>
<cd:constant name='translate' value='translate'/>
<cd:constant name='trimoffset' value='trimoffset'/>
<cd:constant name='type' value='type'/>
@@ -1317,6 +1330,7 @@
<cd:command name='Words' value='Woorden'/>
<cd:command name='about' value='about'/>
<cd:command name='adaptlayout' value='paslayoutaan'/>
+ <cd:command name='alignment' value='uitlijnen'/>
<cd:command name='arg' value='arg'/>
<cd:command name='at' value='op'/>
<cd:command name='atleftmargin' value='oplinkermarge'/>
@@ -1533,11 +1547,13 @@
<cd:command name='leftmargindistance' value='linkermargeafstand'/>
<cd:command name='leftmarginwidth' value='linkermargebreedte'/>
<cd:command name='leg' value='leg'/>
+ <cd:command name='linecorrection' value='regelcorrectie'/>
<cd:command name='linewidth' value='lijndikte'/>
<cd:command name='listheight' value='lijsthoogte'/>
<cd:command name='listlength' value='lijstlengte'/>
<cd:command name='listsymbol' value='lijstsymbool'/>
<cd:command name='listwidth' value='lijstbreedte'/>
+ <cd:command name='localfootnotes' value='lokalevoetnoten'/>
<cd:command name='logfields' value='registreervelden'/>
<cd:command name='lohi' value='laho'/>
<cd:command name='low' value='laag'/>
@@ -1546,6 +1562,7 @@
<cd:command name='makeupheight' value='zethoogte'/>
<cd:command name='makeupwidth' value='zetbreedte'/>
<cd:command name='mar' value='mar'/>
+ <cd:command name='marginblock' value='margeblok'/>
<cd:command name='margindistance' value='margeafstand'/>
<cd:command name='marginrule' value='kantlijn'/>
<cd:command name='margintext' value='margetekst'/>
@@ -1645,6 +1662,7 @@
<cd:command name='rightmarginwidth' value='rechtermargebreedte'/>
<cd:command name='romannumerals' value='romeins'/>
<cd:command name='rotate' value='roteer'/>
+ <cd:command name='savebuffer' value='bewaarbuffer'/>
<cd:command name='scale' value='schaal'/>
<cd:command name='screen' value='scherm'/>
<cd:command name='selectblocks' value='selecteerblokken'/>
@@ -1680,7 +1698,9 @@
<cd:command name='setupcombinations' value='stelcombinatiesin'/>
<cd:command name='setupcombinedlist' value='stelsamengesteldelijstin'/>
<cd:command name='setupcomment' value='stelcommentaarin'/>
+ <cd:command name='setupdescription' value='steldoordefinierenin'/>
<cd:command name='setupdescriptions' value='steldoordefinierenin'/>
+ <cd:command name='setupenumeration' value='steldoornummerenin'/>
<cd:command name='setupenumerations' value='steldoornummerenin'/>
<cd:command name='setupexternalfigures' value='stelexternefigurenin'/>
<cd:command name='setupfield' value='stelveldin'/>
@@ -1695,8 +1715,10 @@
<cd:command name='setupfootnotedefinition' value='stelvoetnootdefinitiein'/>
<cd:command name='setupfootnotes' value='stelvoetnotenin'/>
<cd:command name='setupforms' value='stelformulierenin'/>
+ <cd:command name='setupformula' value='stelformulein'/>
<cd:command name='setupformulas' value='stelformulesin'/>
<cd:command name='setupframed' value='stelomlijndin'/>
+ <cd:command name='setupframedtext' value='stelkadertekstin'/>
<cd:command name='setupframedtexts' value='stelkadertekstenin'/>
<cd:command name='setuphead' value='stelkopin'/>
<cd:command name='setupheader' value='stelhoofdin'/>
@@ -1725,7 +1747,9 @@
<cd:command name='setuplinewidth' value='stellijndiktein'/>
<cd:command name='setuplist' value='stellijstin'/>
<cd:command name='setupmakeup' value='stelopmaakin'/>
+ <cd:command name='setupmarginblock' value='stelmargeblokkenin'/>
<cd:command name='setupmarginblocks' value='stelmargeblokkenin'/>
+ <cd:command name='setupmargindata' value='stelinmargein'/>
<cd:command name='setupmarginrules' value='stelkantlijnin'/>
<cd:command name='setupmarking' value='stelmarkeringin'/>
<cd:command name='setupmathalignment' value='stelwiskundeuitlijnenin'/>
@@ -1904,6 +1928,7 @@
<cd:command name='testcolumn' value='testkolom'/>
<cd:command name='testpage' value='testpagina'/>
<cd:command name='tex' value='tex'/>
+ <cd:command name='textbackground' value='tekstachtergrond'/>
<cd:command name='textheight' value='teksthoogte'/>
<cd:command name='textreference' value='tekstreferentie'/>
<cd:command name='textrule' value='tekstlijn'/>
@@ -1937,7 +1962,7 @@
<cd:command name='useexternalsoundtrack' value='gebruikexterngeluidsfragment'/>
<cd:command name='usemodule' value='gebruikmodule'/>
<cd:command name='usemodules' value='gebruikmodules'/>
- <cd:command name='usepath' value='gebruikgebied'/>
+ <cd:command name='usepath' value='gebruikpad'/>
<cd:command name='usereferences' value='gebruikreferenties'/>
<cd:command name='usespecials' value='gebruikspecials'/>
<cd:command name='usesymbols' value='gebruiksymbolen'/>
diff --git a/tex/context/interface/mkii/keys-pe.xml b/tex/context/interface/mkii/keys-pe.xml
index 1afb96c9a..91f778c5e 100644
--- a/tex/context/interface/mkii/keys-pe.xml
+++ b/tex/context/interface/mkii/keys-pe.xml
@@ -79,6 +79,7 @@
<cd:variable name='all' value='همه'/>
<cd:variable name='alphabetic' value='alphabetic'/>
<cd:variable name='always' value='همواره'/>
+ <cd:variable name='anchor' value='anchor'/>
<cd:variable name='and' value='and'/>
<cd:variable name='answerarea' value='answerarea'/>
<cd:variable name='appendices' value='پیوستها'/>
@@ -172,9 +173,11 @@
<cd:variable name='down' value='down'/>
<cd:variable name='each' value='هر'/>
<cd:variable name='edge' value='لبه'/>
+ <cd:variable name='effective' value='effective'/>
<cd:variable name='eight' value='eight'/>
<cd:variable name='embed' value='embed'/>
<cd:variable name='empty' value='تهی'/>
+ <cd:variable name='enable' value='enable'/>
<cd:variable name='end' value='end'/>
<cd:variable name='endnote' value='ته‌نوشت'/>
<cd:variable name='enumeration' value='شماره‌بندی'/>
@@ -209,9 +212,10 @@
<cd:variable name='force' value='اجبار'/>
<cd:variable name='foreground' value='پیش‌زمینه'/>
<cd:variable name='formula' value='فرمول'/>
- <cd:variable name='formulae' value='فرمولها'/>
+ <cd:variable name='formulas' value='فرمولها'/>
<cd:variable name='forward' value='به‌جلو'/>
<cd:variable name='four' value='چهار'/>
+ <cd:variable name='fractions' value='fractions'/>
<cd:variable name='frame' value='قالب'/>
<cd:variable name='framedtext' value='متن‌قالبی'/>
<cd:variable name='friday' value='جمعه'/>
@@ -236,6 +240,7 @@
<cd:variable name='here' value='اینجا'/>
<cd:variable name='hereafter' value='ازاین‌به‌بعد'/>
<cd:variable name='hidden' value='پنهانی'/>
+ <cd:variable name='hiddenbar' value='hiddenbar'/>
<cd:variable name='hiding' value='پنهان‌کردن'/>
<cd:variable name='high' value='بلند'/>
<cd:variable name='horizontal' value='افقی'/>
@@ -379,6 +384,7 @@
<cd:variable name='note' value='note'/>
<cd:variable name='nothanging' value='بدون‌آویزان‌کردن'/>
<cd:variable name='nothyphenated' value='بدون‌شکست'/>
+ <cd:variable name='notjoinedup' value='notjoinedup'/>
<cd:variable name='november' value='نوامبر'/>
<cd:variable name='nowhere' value='هیچ‌حا'/>
<cd:variable name='nowhite' value='سفید‌نه'/>
@@ -627,6 +633,7 @@
<cd:constant name='anchor' value='anchor'/>
<cd:constant name='andtext' value='andtext'/>
<cd:constant name='apa' value='apa'/>
+ <cd:constant name='arguments' value='arguments'/>
<cd:constant name='arrow' value='پیکان'/>
<cd:constant name='artauthor' value='artauthor'/>
<cd:constant name='artauthoretaldisplay' value='artauthoretaldisplay'/>
@@ -727,6 +734,7 @@
<cd:constant name='controls' value='کنترلها'/>
<cd:constant name='conversion' value='تبدیل'/>
<cd:constant name='convertfile' value='پرونده‌تبدیل'/>
+ <cd:constant name='copies' value='copies'/>
<cd:constant name='corner' value='گوشه'/>
<cd:constant name='coupling' value='تزویج'/>
<cd:constant name='couplingway' value='روش‌تزویج'/>
@@ -775,6 +783,7 @@
<cd:constant name='etaloption' value='etaloption'/>
<cd:constant name='etaltext' value='etaltext'/>
<cd:constant name='evenmargin' value='حاشیه‌زوج'/>
+ <cd:constant name='exact' value='exact'/>
<cd:constant name='exitoffset' value='exitoffset'/>
<cd:constant name='expansion' value='گسترش'/>
<cd:constant name='export' value='export'/>
@@ -817,6 +826,7 @@
<cd:constant name='frameoffset' value='آفست‌قالب'/>
<cd:constant name='frameradius' value='شعاع‌قالب'/>
<cd:constant name='frames' value='قالبها'/>
+ <cd:constant name='freeregion' value='freeregion'/>
<cd:constant name='from' value='از'/>
<cd:constant name='functioncolor' value='functioncolor'/>
<cd:constant name='functionstyle' value='functionstyle'/>
@@ -1166,6 +1176,7 @@
<cd:constant name='splitoffset' value='شکافتن‌آفست'/>
<cd:constant name='spot' value='لکه'/>
<cd:constant name='stack' value='توده'/>
+ <cd:constant name='stackname' value='stackname'/>
<cd:constant name='start' value='شروع'/>
<cd:constant name='starter' value='starter'/>
<cd:constant name='state' value='وضعیت'/>
@@ -1176,6 +1187,7 @@
<cd:constant name='strip' value='strip'/>
<cd:constant name='strut' value='بست'/>
<cd:constant name='style' value='سبک'/>
+ <cd:constant name='stylealternative' value='stylealternative'/>
<cd:constant name='sub' value='زیر'/>
<cd:constant name='subtitle' value='زیرعنوان'/>
<cd:constant name='suffix' value='پسوند'/>
@@ -1231,6 +1243,7 @@
<cd:constant name='topspace' value='فضای‌بالا'/>
<cd:constant name='topstate' value='وضعیت‌بالا'/>
<cd:constant name='totalnumber' value='totalnumber'/>
+ <cd:constant name='transform' value='transform'/>
<cd:constant name='translate' value='translate'/>
<cd:constant name='trimoffset' value='trimoffset'/>
<cd:constant name='type' value='تایپ'/>
@@ -1317,6 +1330,7 @@
<cd:command name='Words' value='Words'/>
<cd:command name='about' value='درمورد'/>
<cd:command name='adaptlayout' value='تنظیم‌طرح‌بندی'/>
+ <cd:command name='alignment' value='alignment'/>
<cd:command name='arg' value='افزودن'/>
<cd:command name='at' value='در'/>
<cd:command name='atleftmargin' value='درحاشیه‌چپ'/>
@@ -1533,11 +1547,13 @@
<cd:command name='leftmargindistance' value='فاصله‌حاشیه‌چپ'/>
<cd:command name='leftmarginwidth' value='عرض‌حاشیه‌چپ'/>
<cd:command name='leg' value='پا'/>
+ <cd:command name='linecorrection' value='linecorrection'/>
<cd:command name='linewidth' value='عرض‌خط'/>
<cd:command name='listheight' value='ارتفاع‌خط'/>
<cd:command name='listlength' value='طول‌لیست'/>
<cd:command name='listsymbol' value='نمادلیست'/>
<cd:command name='listwidth' value='عرض‌لیست'/>
+ <cd:command name='localfootnotes' value='localfootnotes'/>
<cd:command name='logfields' value='میدانهای‌گزارش'/>
<cd:command name='lohi' value='پابا'/>
<cd:command name='low' value='پایین'/>
@@ -1546,6 +1562,7 @@
<cd:command name='makeupheight' value='ارتفاع‌آرایش'/>
<cd:command name='makeupwidth' value='عرض‌آرایش'/>
<cd:command name='mar' value='حاش'/>
+ <cd:command name='marginblock' value='marginblock'/>
<cd:command name='margindistance' value='فاصله‌حاشیه'/>
<cd:command name='marginrule' value='خط‌حاشیه'/>
<cd:command name='margintext' value='متن‌حاشیه'/>
@@ -1645,6 +1662,7 @@
<cd:command name='rightmarginwidth' value='عرض‌حاشیه‌راست'/>
<cd:command name='romannumerals' value='اعدادلاتین'/>
<cd:command name='rotate' value='دوران'/>
+ <cd:command name='savebuffer' value='savebuffer'/>
<cd:command name='scale' value='مقیاس'/>
<cd:command name='screen' value='پرده'/>
<cd:command name='selectblocks' value='انتخاب‌بلوکها'/>
@@ -1680,7 +1698,9 @@
<cd:command name='setupcombinations' value='بارگذاری‌ترکیب‌ها'/>
<cd:command name='setupcombinedlist' value='بارگذاری‌لیست‌ترکیبی'/>
<cd:command name='setupcomment' value='بارگذاری‌توضیح'/>
+ <cd:command name='setupdescription' value='setupdescription'/>
<cd:command name='setupdescriptions' value='بارگذاری‌شرح'/>
+ <cd:command name='setupenumeration' value='setupenumeration'/>
<cd:command name='setupenumerations' value='بارگذاری‌شماره‌گذاریها'/>
<cd:command name='setupexternalfigures' value='بارگذاری‌شکلهای‌خارجی'/>
<cd:command name='setupfield' value='بارگذاری‌میدان'/>
@@ -1695,8 +1715,10 @@
<cd:command name='setupfootnotedefinition' value='بارگذاری‌تعریف‌پانوشت'/>
<cd:command name='setupfootnotes' value='بارگذاری‌پانوشتها'/>
<cd:command name='setupforms' value='بارگذاری‌طرح'/>
+ <cd:command name='setupformula' value='setupformula'/>
<cd:command name='setupformulas' value='بارگذاری‌فرمولها'/>
<cd:command name='setupframed' value='بارگذاری‌قالبی'/>
+ <cd:command name='setupframedtext' value='setupframedtext'/>
<cd:command name='setupframedtexts' value='بارگذاری‌متن‌قالبی'/>
<cd:command name='setuphead' value='بارگذاری‌سر'/>
<cd:command name='setupheader' value='بارگذاری‌سربرگ'/>
@@ -1725,7 +1747,9 @@
<cd:command name='setuplinewidth' value='بارگذاری‌عرض‌خط'/>
<cd:command name='setuplist' value='بارگذاری‌لیست'/>
<cd:command name='setupmakeup' value='بارگذاری‌آرایش'/>
+ <cd:command name='setupmarginblock' value='setupmarginblock'/>
<cd:command name='setupmarginblocks' value='بارگذاری‌بلوکهای‌حاشیه'/>
+ <cd:command name='setupmargindata' value='setupmargindata'/>
<cd:command name='setupmarginrules' value='بارگذاری‌خطهای‌حاشیه'/>
<cd:command name='setupmarking' value='بارگذاری‌نشانه‌گذاری'/>
<cd:command name='setupmathalignment' value='بارگذاری‌تنظیم‌ریاضی'/>
@@ -1904,6 +1928,7 @@
<cd:command name='testcolumn' value='ستون‌امتحان'/>
<cd:command name='testpage' value='صفحه‌تست'/>
<cd:command name='tex' value='تک'/>
+ <cd:command name='textbackground' value='textbackground'/>
<cd:command name='textheight' value='ارتفاع‌متن'/>
<cd:command name='textreference' value='مرجع‌متن'/>
<cd:command name='textrule' value='خط‌متن'/>
diff --git a/tex/context/interface/mkii/keys-ro.xml b/tex/context/interface/mkii/keys-ro.xml
index 8a7707a2d..a4566c4b4 100644
--- a/tex/context/interface/mkii/keys-ro.xml
+++ b/tex/context/interface/mkii/keys-ro.xml
@@ -79,6 +79,7 @@
<cd:variable name='all' value='tot'/>
<cd:variable name='alphabetic' value='alphabetic'/>
<cd:variable name='always' value='totdeauna'/>
+ <cd:variable name='anchor' value='anchor'/>
<cd:variable name='and' value='and'/>
<cd:variable name='answerarea' value='answerarea'/>
<cd:variable name='appendices' value='apendixuri'/>
@@ -172,9 +173,11 @@
<cd:variable name='down' value='down'/>
<cd:variable name='each' value='fiecare'/>
<cd:variable name='edge' value='bordura'/>
+ <cd:variable name='effective' value='effective'/>
<cd:variable name='eight' value='eight'/>
<cd:variable name='embed' value='embed'/>
<cd:variable name='empty' value='gol'/>
+ <cd:variable name='enable' value='enable'/>
<cd:variable name='end' value='end'/>
<cd:variable name='endnote' value='endnote'/>
<cd:variable name='enumeration' value='enumerare'/>
@@ -209,9 +212,10 @@
<cd:variable name='force' value='fortat'/>
<cd:variable name='foreground' value='primplan'/>
<cd:variable name='formula' value='formula'/>
- <cd:variable name='formulae' value='formule'/>
+ <cd:variable name='formulas' value='formule'/>
<cd:variable name='forward' value='avans'/>
<cd:variable name='four' value='patru'/>
+ <cd:variable name='fractions' value='fractions'/>
<cd:variable name='frame' value='incadrat'/>
<cd:variable name='framedtext' value='textinconjurat'/>
<cd:variable name='friday' value='vineri'/>
@@ -236,6 +240,7 @@
<cd:variable name='here' value='aici'/>
<cd:variable name='hereafter' value='urmator'/>
<cd:variable name='hidden' value='ascuns'/>
+ <cd:variable name='hiddenbar' value='hiddenbar'/>
<cd:variable name='hiding' value='ascundere'/>
<cd:variable name='high' value='inalt'/>
<cd:variable name='horizontal' value='orizontal'/>
@@ -379,6 +384,7 @@
<cd:variable name='note' value='note'/>
<cd:variable name='nothanging' value='nothanging'/>
<cd:variable name='nothyphenated' value='nedespsilabe'/>
+ <cd:variable name='notjoinedup' value='notjoinedup'/>
<cd:variable name='november' value='noiembrie'/>
<cd:variable name='nowhere' value='niciunde'/>
<cd:variable name='nowhite' value='faraalb'/>
@@ -627,6 +633,7 @@
<cd:constant name='anchor' value='anchor'/>
<cd:constant name='andtext' value='andtext'/>
<cd:constant name='apa' value='apa'/>
+ <cd:constant name='arguments' value='arguments'/>
<cd:constant name='arrow' value='sageata'/>
<cd:constant name='artauthor' value='artauthor'/>
<cd:constant name='artauthoretaldisplay' value='artauthoretaldisplay'/>
@@ -727,6 +734,7 @@
<cd:constant name='controls' value='controale'/>
<cd:constant name='conversion' value='conversie'/>
<cd:constant name='convertfile' value='convertestefisier'/>
+ <cd:constant name='copies' value='copies'/>
<cd:constant name='corner' value='colt'/>
<cd:constant name='coupling' value='cuplare'/>
<cd:constant name='couplingway' value='modcuplare'/>
@@ -775,6 +783,7 @@
<cd:constant name='etaloption' value='etaloption'/>
<cd:constant name='etaltext' value='etaltext'/>
<cd:constant name='evenmargin' value='marginepara'/>
+ <cd:constant name='exact' value='exact'/>
<cd:constant name='exitoffset' value='exitoffset'/>
<cd:constant name='expansion' value='expansiune'/>
<cd:constant name='export' value='export'/>
@@ -817,6 +826,7 @@
<cd:constant name='frameoffset' value='offsetframe'/>
<cd:constant name='frameradius' value='razaframe'/>
<cd:constant name='frames' value='frames'/>
+ <cd:constant name='freeregion' value='freeregion'/>
<cd:constant name='from' value='dela'/>
<cd:constant name='functioncolor' value='functioncolor'/>
<cd:constant name='functionstyle' value='functionstyle'/>
@@ -1166,6 +1176,7 @@
<cd:constant name='splitoffset' value='splitoffset'/>
<cd:constant name='spot' value='spot'/>
<cd:constant name='stack' value='stack'/>
+ <cd:constant name='stackname' value='stackname'/>
<cd:constant name='start' value='start'/>
<cd:constant name='starter' value='starter'/>
<cd:constant name='state' value='stare'/>
@@ -1176,6 +1187,7 @@
<cd:constant name='strip' value='strip'/>
<cd:constant name='strut' value='strut'/>
<cd:constant name='style' value='stil'/>
+ <cd:constant name='stylealternative' value='stylealternative'/>
<cd:constant name='sub' value='sub'/>
<cd:constant name='subtitle' value='subtitlu'/>
<cd:constant name='suffix' value='suffix'/>
@@ -1231,6 +1243,7 @@
<cd:constant name='topspace' value='spatiusus'/>
<cd:constant name='topstate' value='staresus'/>
<cd:constant name='totalnumber' value='totalnumber'/>
+ <cd:constant name='transform' value='transform'/>
<cd:constant name='translate' value='translate'/>
<cd:constant name='trimoffset' value='trimoffset'/>
<cd:constant name='type' value='type'/>
@@ -1317,6 +1330,7 @@
<cd:command name='Words' value='Cuvinte'/>
<cd:command name='about' value='despre'/>
<cd:command name='adaptlayout' value='adapteazaaspect'/>
+ <cd:command name='alignment' value='alignment'/>
<cd:command name='arg' value='arg'/>
<cd:command name='at' value='la'/>
<cd:command name='atleftmargin' value='atleftmargin'/>
@@ -1533,11 +1547,13 @@
<cd:command name='leftmargindistance' value='distantamarginestanga'/>
<cd:command name='leftmarginwidth' value='latimemarginestanga'/>
<cd:command name='leg' value='leg'/>
+ <cd:command name='linecorrection' value='linecorrection'/>
<cd:command name='linewidth' value='grosimelinie'/>
<cd:command name='listheight' value='inaltimelista'/>
<cd:command name='listlength' value='lungimelista'/>
<cd:command name='listsymbol' value='listsymbol'/>
<cd:command name='listwidth' value='latimelista'/>
+ <cd:command name='localfootnotes' value='localfootnotes'/>
<cd:command name='logfields' value='logcampuri'/>
<cd:command name='lohi' value='jossus'/>
<cd:command name='low' value='jos'/>
@@ -1546,6 +1562,7 @@
<cd:command name='makeupheight' value='inaltimemakeup'/>
<cd:command name='makeupwidth' value='latimemakeup'/>
<cd:command name='mar' value='mar'/>
+ <cd:command name='marginblock' value='marginblock'/>
<cd:command name='margindistance' value='distantamargine'/>
<cd:command name='marginrule' value='liniemargine'/>
<cd:command name='margintext' value='textmarginal'/>
@@ -1645,6 +1662,7 @@
<cd:command name='rightmarginwidth' value='latimemarginedreapta'/>
<cd:command name='romannumerals' value='numereromane'/>
<cd:command name='rotate' value='roteste'/>
+ <cd:command name='savebuffer' value='savebuffer'/>
<cd:command name='scale' value='scala'/>
<cd:command name='screen' value='ecran'/>
<cd:command name='selectblocks' value='selecteazablocuri'/>
@@ -1680,7 +1698,9 @@
<cd:command name='setupcombinations' value='seteazacombinari'/>
<cd:command name='setupcombinedlist' value='seteazalistacombinata'/>
<cd:command name='setupcomment' value='seteazacomentariu'/>
+ <cd:command name='setupdescription' value='setupdescription'/>
<cd:command name='setupdescriptions' value='seteazadescriere'/>
+ <cd:command name='setupenumeration' value='setupenumeration'/>
<cd:command name='setupenumerations' value='seteazaenumerare'/>
<cd:command name='setupexternalfigures' value='seteazafiguriexterne'/>
<cd:command name='setupfield' value='seteazacamp'/>
@@ -1695,8 +1715,10 @@
<cd:command name='setupfootnotedefinition' value='seteazadefinireanotasubsol'/>
<cd:command name='setupfootnotes' value='seteazanotasubsol'/>
<cd:command name='setupforms' value='seteazaformulare'/>
+ <cd:command name='setupformula' value='setupformula'/>
<cd:command name='setupformulas' value='seteazaformule'/>
<cd:command name='setupframed' value='seteazainconjurat'/>
+ <cd:command name='setupframedtext' value='setupframedtext'/>
<cd:command name='setupframedtexts' value='definestetexteinconjurate'/>
<cd:command name='setuphead' value='seteazatitlu'/>
<cd:command name='setupheader' value='seteazaantet'/>
@@ -1725,7 +1747,9 @@
<cd:command name='setuplinewidth' value='seteazagrosimelinie'/>
<cd:command name='setuplist' value='seteazalista'/>
<cd:command name='setupmakeup' value='seteazamakeup'/>
+ <cd:command name='setupmarginblock' value='setupmarginblock'/>
<cd:command name='setupmarginblocks' value='seteazablocurimarginale'/>
+ <cd:command name='setupmargindata' value='setupmargindata'/>
<cd:command name='setupmarginrules' value='seteazaliniimargine'/>
<cd:command name='setupmarking' value='seteazamarcaje'/>
<cd:command name='setupmathalignment' value='setupmathalignment'/>
@@ -1904,6 +1928,7 @@
<cd:command name='testcolumn' value='testcolumn'/>
<cd:command name='testpage' value='testpage'/>
<cd:command name='tex' value='tex'/>
+ <cd:command name='textbackground' value='textbackground'/>
<cd:command name='textheight' value='inaltimetext'/>
<cd:command name='textreference' value='referintatext'/>
<cd:command name='textrule' value='riglatext'/>
diff --git a/tex/context/interface/mkiv/context-en.xml b/tex/context/interface/mkiv/context-en.xml
new file mode 100644
index 000000000..e8353dbdc
--- /dev/null
+++ b/tex/context/interface/mkiv/context-en.xml
@@ -0,0 +1,45488 @@
+<?xml version='1.0'?>
+<!-- expanded and compacted i-context.xml -->
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+ <cd:interface file="i-anchor.xml">
+ <cd:command file="pack-box.mkiv" name="defineanchor">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="pack-box.mkiv" name="anchor">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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>
+ <cd:interface file="i-attachment.xml">
+ <cd:command file="scrn-wid.mkvi" name="defineattachment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupattachment"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-wid.mkvi" name="setupattachment">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 default="yes" type="start"/>
+ <cd:constant type="stop"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:constant default="yes" type="normal"/>
+ <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 default="yes" type="text"/>
+ <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 file="scrn-wid.mkvi" name="registerattachment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupattachment"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-wid.mkvi" generated="yes" name="attachment" variant="example">
+ <cd:sequence>
+ <cd:variable value="attachment"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupattachment"/>
+ </cd:assignments>
+ </cd:arguments>
+ <cd:instances>
+ <cd:constant value="attachment"/>
+ </cd:instances>
+ </cd:command>
+ <cd:command file="scrn-wid.mkvi" generated="yes" name="attachment" type="environment" variant="example">
+ <cd:sequence>
+ <cd:variable value="attachment"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupattachment"/>
+ </cd:assignments>
+ </cd:arguments>
+ <cd:instances>
+ <cd:constant value="attachment"/>
+ </cd:instances>
+ </cd:command>
+ <cd:command file="scrn-wid.mkvi" name="placeattachments"/>
+ <cd:command file="scrn-wid.mkvi" name="attachment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupattachment"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-wid.mkvi" name="attachment" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupattachment"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-attribute.xml">
+ <cd:command file="attr-ini.mkiv" name="pushattribute">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="attr-ini.mkiv" name="popattribute">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="attr-ini.mkiv" name="installattributestack">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="attr-ini.mkiv" name="defineattribute">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant default="yes" type="local"/>
+ <cd:constant type="global"/>
+ <cd:constant default="yes" type="public"/>
+ <cd:constant type="private"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="attr-ini.mkiv" name="definesystemattribute">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant default="yes" type="local"/>
+ <cd:constant type="global"/>
+ <cd:constant type="public"/>
+ <cd:constant default="yes" type="private"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="attr-ini.mkiv" name="newattribute">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="attr-ini.mkiv" name="dosetattribute">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="attr-ini.mkiv" name="doresetattribute">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="attr-ini.mkiv" name="dogetattribute">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="attr-ini.mkiv" name="dogetattributeid">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="attr-ini.mkiv" name="resetallattributes"/>
+ <cd:command file="attr-ini.mkiv" name="savecurrentattributes">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="attr-ini.mkiv" name="restorecurrentattributes">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="attr-ini.mkiv" name="showattributes"/>
+ </cd:interface>
+ <cd:interface file="i-backend.xml">
+ <cd:command file="back-ini.mkiv" name="setupbackend">
+ <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 default="yes" type="no"/>
+ </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>
+ <cd:interface file="i-background.xml">
+ <cd:command file="pack-bck.mkvi" name="definebackground">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupbackground"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-bck.mkvi" name="setupbackground">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="pack-bck.mkvi" generated="yes" name="background" type="environment" variant="example">
+ <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:instances>
+ <cd:constant value="background"/>
+ </cd:instances>
+ </cd:command>
+ <cd:command file="pack-bck.mkvi" name="background" type="environment">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupbackground"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-bck.mkvi" generated="yes" name="background" variant="example">
+ <cd:sequence>
+ <cd:variable value="background"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ <cd:instances>
+ <cd:constant value="background"/>
+ </cd:instances>
+ </cd:command>
+ <cd:command file="pack-bck.mkvi" name="background">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-bck.mkvi" name="backgroundline">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-bck.mkiv" name="setupbackgrounds">
+ <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 file="page-bck.mkiv" name="setupbackgrounds" variant="page">
+ <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 default="yes" type="start"/>
+ <cd:constant type="stop"/>
+ </cd:parameter>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command begin="push" end="pop" file="page-bck.mkiv" name="background" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-bck.mkiv" name="doifelsesomebackground">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-bck.mkiv" name="doifsomebackgroundelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-bck.mkiv" name="doifsomebackground">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-bar.xml">
+ <cd:command file="node-rul.mkiv" name="definebar">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupbar"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="node-rul.mkiv" name="setupbar">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 default="yes" type="no"/>
+ <cd:constant type="all"/>
+ </cd:parameter>
+ <cd:parameter name="empty">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </cd:parameter>
+ <cd:parameter name="unit">
+ <cd:constant default="yes" 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:parameter>
+ <cd:parameter name="order">
+ <cd:constant default="yes" type="foreground"/>
+ <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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </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:parameter name="left">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="node-rul.mkiv" generated="yes" name="bar" variant="example">
+ <cd:sequence>
+ <cd:variable value="bar"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ <cd:instances>
+ <cd:constant value="overbar"/>
+ <cd:constant value="underbar"/>
+ <cd:constant value="overstrike"/>
+ <cd:constant value="understrike"/>
+ <cd:constant value="overbars"/>
+ <cd:constant value="underbars"/>
+ <cd:constant value="overstrikes"/>
+ <cd:constant value="understrikes"/>
+ <cd:constant value="underrandom"/>
+ <cd:constant value="underrandoms"/>
+ <cd:constant value="underdash"/>
+ <cd:constant value="underdashes"/>
+ <cd:constant value="underdot"/>
+ <cd:constant value="underdots"/>
+ <cd:constant value="nobar"/>
+ <cd:constant value="hiddenbar"/>
+ </cd:instances>
+ </cd:command>
+ <cd:command file="node-rul.mkiv" name="bar" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="node-rul.mkiv" name="setbar">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="node-rul.mkiv" name="directsetbar">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command begin="push" end="pop" file="node-rul.mkiv" name="bar" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="node-rul.mkiv" name="overbar">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="node-rul.mkiv" name="underbar">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="node-rul.mkiv" name="hiddenbar">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="node-rul.mkiv" name="overstrike">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="node-rul.mkiv" name="understrike">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="node-rul.mkiv" name="overbars">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="node-rul.mkiv" name="underbars">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="node-rul.mkiv" name="overstrikes">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="node-rul.mkiv" name="understrikes">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="node-rul.mkiv" name="underrandom">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="node-rul.mkiv" name="underrandoms">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="node-rul.mkiv" name="underdash">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="node-rul.mkiv" name="underdashes">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="node-rul.mkiv" name="underdot">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="node-rul.mkiv" name="underdots">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="node-rul.mkiv" name="nobar">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="node-rul.mkiv" name="resetbar"/>
+ </cd:interface>
+ <cd:interface file="i-blackrule.xml">
+ <cd:command file="pack-mrl.mkiv" name="setupblackrules">
+ <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 default="yes" type="a"/>
+ <cd:constant type="b"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="type">
+ <cd:constant type="mp"/>
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="mp">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-mrl.mkiv" name="blackrule">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupblackrules"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-mrl.mkiv" name="blackrules">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupblackrules"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-mrl.mkiv" name="vl">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-mrl.mkiv" name="hl">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-mis.mkiv" name="somekindoftab">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="alternative">
+ <cd:constant type="horizontal"/>
+ <cd:constant default="yes" type="vertical"/>
+ </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>
+ <cd:interface file="i-bleed.xml">
+ <cd:command file="pack-box.mkiv" name="setupbleeding">
+ <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 default="yes" type="l"/>
+ <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 default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="page">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-box.mkiv" name="bleed">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupbleeding"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-box.mkiv" name="bleedwidth"/>
+ <cd:command file="pack-box.mkiv" name="bleedheight"/>
+ </cd:interface>
+ <cd:interface file="i-block.xml">
+ <cd:command file="strc-blk.mkiv" name="defineblock">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupblock"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-blk.mkiv" name="setupblock">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </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="inner">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command begin="begin" end="end" file="strc-blk.mkiv" generated="yes" name="block" type="environment" variant="example">
+ <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 file="strc-blk.mkiv" name="hideblocks">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="+"/>
+ <cd:constant type="-"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-blk.mkiv" name="keepblocks">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="+"/>
+ <cd:constant type="-"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-blk.mkiv" name="useblocks">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 default="yes" type="text"/>
+ <cd:constant type="cd:section"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-blk.mkiv" name="processblocks">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 default="yes" type="text"/>
+ <cd:constant type="cd:section"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-blk.mkiv" name="selectblocks">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 default="yes" type="text"/>
+ <cd:constant type="cd:section"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-bookmark.xml">
+ <cd:command file="strc-bkm.mkiv" name="setupbookmark">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="force">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </cd:parameter>
+ <cd:parameter name="number">
+ <cd:constant default="yes" type="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:constant type="cd:number"/>
+ <cd:constant method="range" prefix="cd:number" type="cd:number"/>
+ <cd:constant method="range" prefix="cd:number" type="*"/>
+ <cd:constant method="range" prefix="cd:number" type="all"/>
+ <cd:constant type="cd:section"/>
+ <cd:constant method="range" prefix="cd:section" type="cd:section"/>
+ <cd:constant method="range" prefix="cd:section" type="*"/>
+ <cd:constant method="range" prefix="cd:section" type="all"/>
+ </cd:parameter>
+ <cd:parameter name="sectionblock">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-bkm.mkiv" name="bookmark">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:section"/>
+ <cd:constant type="cd:list"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="src-bkm.mkiv" name="placebookmarks">
+ <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>
+ <cd:interface file="i-boxes.xml">
+ <cd:command file="supp-box.mkiv" name="doiftext">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="doifelsetext">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="doiftextelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="dowithnextbox">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="dowithnextboxcs">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="nextboxwd"/>
+ <cd:command file="supp-box.mkiv" name="nextboxht"/>
+ <cd:command file="supp-box.mkiv" name="nextboxdp"/>
+ <cd:command file="supp-box.mkiv" name="nextboxhtdp"/>
+ <cd:command file="supp-box.mkiv" name="flushnextbox"/>
+ <cd:command file="supp-box.mkiv" name="nextbox"/>
+ <cd:command file="supp-box.mkiv" name="nextdepth"/>
+ <cd:command file="supp-box.mkiv" name="dowithnextboxcontent">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="dowithnextboxcontentcs">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="rlap">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="llap">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="clap">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="tlap">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="blap">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="reshapebox">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command begin="beginof" end="endof" file="supp-box.mkiv" name="shapebox" type="environment"/>
+ <cd:command file="supp-box.mkiv" name="flushshapebox"/>
+ <cd:command file="supp-box.mkiv" name="innerflushshapebox"/>
+ <cd:command file="supp-box.mkiv" name="shapedhbox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="processtokens">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="doboundtext">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="limitatetext">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant prefix="cd:sign" type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="limitatetext" variant="list">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant prefix="cd:sign" type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="limtatefirstline">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="processisolatedchars">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="processisolatedwords">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="applytocharacters">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="applytowords">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="applytosplitstringchar">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="applytosplitstringword">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="applytosplitstringline">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="applytosplitstringcharspaced">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="applytosplitstringwordspaced">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="applytosplitstringlinespaced">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="sbox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="inlinedbox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="struttedbox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="topskippedbox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="centeredbox">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="centerednextbox">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="centerbox">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="setrigidcolumnhsize">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="setrigidcolumnbalance">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="vboxtohbox" type="environment"/>
+ <cd:command file="supp-box.mkiv" name="vboxtohboxseparator" type="environment"/>
+ <cd:command file="supp-box.mkiv" name="convertvboxtohbox"/>
+ <cd:command file="supp-box.mkiv" name="hboxestohbox" type="environment"/>
+ <cd:command file="supp-box.mkiv" name="unhhbox">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:delimiter name="with"/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="hboxofvbox">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="doifcontent">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="overlay" type="environment"/>
+ <cd:command file="supp-box.mkiv" name="fakebox">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="lbox">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="cbox">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="rbox">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="ltop">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="ctop">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="rtop">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="tbox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="bbox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="lhbox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="mhbox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="rhbox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="lefthbox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="midhbox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="righthbox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="boxofsize">
+ <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 file="supp-box.mkiv" name="limitatelines">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="fittopbaselinegrid">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="boxcursor"/>
+ <cd:command file="supp-box.mkiv" name="placedbox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="rightbox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="leftbox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="topbox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="bottombox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="lefttopbox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="righttopbox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="leftbottombox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="rightbottombox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="topleftbox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="toprightbox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="bottomleftbox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="bottomrightbox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="middlebox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="baselinemiddlebox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="baselineleftbox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="baselinerightbox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="lrtbbox">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="toplinebox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="setstackbox">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="initializeboxstack">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="savebox">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="restorebox">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="foundbox">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="doifelsebox">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="doifboxelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="localpushbox">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="localpopbox">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="globalpushbox">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="globalpopbox">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="removedepth"/>
+ <cd:command file="supp-box.mkiv" name="obeydepth"/>
+ <cd:command file="supp-box.mkiv" name="undepthed">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="removebottomthings"/>
+ <cd:command file="supp-box.mkiv" name="removelastskip"/>
+ <cd:command file="supp-box.mkiv" name="makestrutofbox">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="raisebox">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="lowerbox">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="halfwaybox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="depthonlybox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="naturalhbox">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="naturalvbox">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="naturalvtop">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="naturalvcenter">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="naturalhpack">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="naturalvpack">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="frozenhbox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="setboxllx">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="setboxlly">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="gsetboxllx">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="gsetboxlly">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="getboxllx">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="getboxlly">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="directgetboxllx">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="directgetboxlly">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="shownextbox">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="spreadhbox">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="minimalhbox">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="nodetostring">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="getnaturaldimensions">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="lastnaturalboxwd"/>
+ <cd:command file="supp-box.mkiv" name="lastnaturalboxht"/>
+ <cd:command file="supp-box.mkiv" name="lastnaturalboxdp"/>
+ <cd:command file="supp-box.mkiv" name="naturalwd">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="doifelserighttoleftinbox">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="doifrighttoleftinboxelse">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="runninghbox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command begin="begin" end="end" file="supp-box.mkiv" name="vbox" type="environment"/>
+ <cd:command begin="begin" end="end" file="supp-box.mkiv" name="hbox" type="environment"/>
+ <cd:command begin="begin" end="end" file="supp-box.mkiv" name="vtop" type="environment"/>
+ <cd:command file="supp-box.mkiv" name="setvboxregister">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="sethboxregister">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="setvtopregister">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="flushboxregister">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="vboxregister" type="environment">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="hboxregister" type="environment">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="vtopregister" type="environment">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ali.mkiv" name="righttolefthbox">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ali.mkiv" name="lefttorighthbox">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ali.mkiv" name="righttoleftvbox">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ali.mkiv" name="lefttorightvbox">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ali.mkiv" name="righttoleftvtop">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ali.mkiv" name="lefttorightvtop">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ali.mkiv" name="autodirhbox">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ali.mkiv" name="autodirvbox">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ali.mkiv" name="autodirvtop">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ali.mkiv" name="leftorrighthbox">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ali.mkiv" name="leftorrightvbox">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ali.mkiv" name="leftorrightvtop">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ali.mkiv" name="ibox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ali.mkiv" name="obox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ali.mkiv" name="definehbox">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ali.mkiv" generated="yes" name="hbox" variant="example">
+ <cd:sequence>
+ <cd:string value="hbox"/>
+ <cd:variable value="box"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="lastlinewidth"/>
+ </cd:interface>
+ <cd:interface file="i-buffer.xml">
+ <cd:command file="buff-ini.mkiv" name="doifelsebuffer">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:buffer"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-ini.mkiv" name="doifbufferelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:buffer"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-ini.mkiv" name="resetbuffer">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:buffer"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-ini.mkiv" name="buffer" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-ini.mkiv" name="grabbufferdata">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:category"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-ini.mkiv" name="grabbufferdatadirect">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command begin="set" end="end" file="buff-ini.mkiv" name="buffer" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-ini.mkiv" name="setupbuffer">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:buffer"/>
+ </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:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-ini.mkiv" name="definebuffer">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:buffer"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupbuffer"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-ini.mkiv" name="getbuffer">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:buffer"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-ini.mkiv" name="getdefinedbuffer">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:buffer"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-ini.mkiv" name="inlinebuffer">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:buffer"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-ini.mkiv" generated="yes" name="buffer" type="environment" variant="example">
+ <cd:sequence>
+ <cd:variable value="buffer"/>
+ </cd:sequence>
+ <cd:instances>
+ <cd:constant value="hiding"/>
+ </cd:instances>
+ </cd:command>
+ <cd:command file="buff-ini.mkiv" generated="yes" name="getbuffer" variant="example">
+ <cd:sequence>
+ <cd:string value="get"/>
+ <cd:variable value="buffer"/>
+ </cd:sequence>
+ </cd:command>
+ <cd:command file="buff-ini.mkiv" name="hiding" type="environment"/>
+ <cd:command file="buff-ini.mkiv" name="processtexbuffer">
+ <cd:sequence>
+ <cd:string value="processTEXbuffer"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:buffer"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-ini.mkiv" name="savebuffer" variant="list">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:buffer"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-ini.mkiv" name="savebuffer">
+ <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 default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-ini.mkiv" name="ctxluabuffer">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:buffer"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-ini.mkiv" name="mkvibuffer">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:buffer"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-ini.mkiv" name="getbufferdata">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:buffer"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-ver.mkiv" name="typebuffer">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:buffer"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptyping"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-ver.mkiv" generated="yes" name="typebuffer" variant="example">
+ <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 file="buff-ver.mkiv" name="typedefinedbuffer">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:buffer"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptyping"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-button.xml">
+ <cd:command file="scrn-but.mkvi" name="definebutton">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupbutton"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-but.mkvi" name="setupbutton">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant default="yes" type="start"/>
+ <cd:constant type="stop"/>
+ </cd:parameter>
+ <cd:parameter name="samepage">
+ <cd:constant default="yes" type="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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </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 file="scrn-but.mkvi" generated="yes" name="button" variant="example">
+ <cd:sequence>
+ <cd:variable value="button"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupbutton"/>
+ </cd:assignments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ <cd:instances>
+ <cd:constant value="button"/>
+ </cd:instances>
+ </cd:command>
+ <cd:command file="scrn-but.mkvi" name="button">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupbutton"/>
+ </cd:assignments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-but.mkvi" name="overlaybutton">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-but.mkvi" name="overlaybutton" variant="direct">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-but.mkvi" name="MPmenubuttons">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-fld.mkvi" name="overlayrollbutton">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-fld.mkvi" name="definepushbutton">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfieldcontentframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-fld.mkvi" name="pushbutton">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-fld.mkvi" name="definepushsymbol">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="n"/>
+ <cd:constant type="r"/>
+ <cd:constant type="d"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-fld.mkvi" name="rollbutton" variant="interactionmenu">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupinteractionmenu"/>
+ </cd:assignments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-fld.mkvi" name="rollbutton" variant="button">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupbutton"/>
+ </cd:assignments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-capitals.xml">
+ <cd:command file="typo-cap.mkiv" name="definecapitals">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupcapitals"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-cap.mkiv" name="setupcapitals">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="title">
+ <cd:constant default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="sc">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-cap.mkiv" name="setcharactercasing">
+ <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 file="typo-cap.mkiv" name="WORD">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-cap.mkiv" name="word">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-cap.mkiv" name="Word">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-cap.mkiv" name="Words">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-cap.mkiv" name="camel">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-cap.mkiv" name="WORDS">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-cap.mkiv" name="words">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-cap.mkiv" name="pseudosmallcapped">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-cap.mkiv" name="pseudoSmallcapped">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-cap.mkiv" name="pseudoSmallCapped">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-cap.mkiv" name="pseudoMixedCapped">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-cap.mkiv" name="realsmallcapped">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-cap.mkiv" name="realSmallcapped">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-cap.mkiv" name="realSmallCapped">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-cap.mkiv" name="notsmallcapped">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-cap.mkiv" name="smallcapped">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-cap.mkiv" name="Smallcapped">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-cap.mkiv" name="SmallCapped">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-cap.mkiv" name="autocap">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-cap.mkiv" name="mixedcaps">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-cap.mkiv" name="kap">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-cap.mkiv" name="Caps">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-cap.mkiv" name="uppercased">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-cap.mkiv" name="lowercased">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-cap.mkiv" name="randomizetext">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-cap.mkiv" name="randomized" type="environment"/>
+ </cd:interface>
+ <cd:interface file="i-catcodes.xml">
+ <cd:command file="catc-ctx.mkiv" name="texcode" type="environment"/>
+ <cd:command file="catc-ctx.mkiv" name="contextcode" type="environment"/>
+ <cd:command file="catc-ctx.mkiv" name="contextdefinitioncode" type="environment"/>
+ <cd:command begin="un" end="​" file="catc-def.mkiv" name="protect" type="environment"/>
+ <cd:command file="catc-ini.mkiv" name="newcatcodetable">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="catc-ini.mkiv" name="catcodetable" type="environment">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="catc-ini.mkiv" name="extendedcatcodetable" type="environment">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="catc-act.mkiv" name="installactivecharacter">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="catc-act.mkiv" name="defineactivecharacter">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="catc-act.mkiv" name="installanddefineactivecharacter">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="catc-act.mkiv" name="makecharacteractive">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="catc-ini.mkiv" name="permitcircumflexescape"/>
+ <cd:command file="catc-ini.mkiv" name="permitcaretescape"/>
+ <cd:command file="catc-ini.mkiv" name="letcatcodecommand">
+ <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 file="catc-ini.mkiv" name="defcatcodecommand">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:character"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="catc-ini.mkiv" name="uedcatcodecommand">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:character"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command begin="push" end="pop" file="catc-ini.mkiv" name="catcodetable" type="environment"/>
+ <cd:command file="catc-ini.mkiv" name="restorecatcodes"/>
+ <cd:command file="catc-ini.mkiv" name="setcatcodetable">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="catc-ini.mkiv" name="tracecatcodetables"/>
+ <cd:command file="catc-ini.mkiv" name="catcodetablename"/>
+ <cd:command file="catc-sym.mkiv" name="rescan">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="catc-sym.mkiv" name="rescanwithsetup">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-character.xml">
+ <cd:command file="catc-sym.mkiv" name="letteropenbrace"/>
+ <cd:command file="catc-sym.mkiv" name="letterclosebrace"/>
+ <cd:command file="catc-sym.mkiv" name="letterampersand"/>
+ <cd:command file="catc-sym.mkiv" name="letterless"/>
+ <cd:command file="catc-sym.mkiv" name="lettermore"/>
+ <cd:command file="catc-sym.mkiv" name="letterhash"/>
+ <cd:command file="catc-sym.mkiv" name="letterdoublequote"/>
+ <cd:command file="catc-sym.mkiv" name="lettersinglequote"/>
+ <cd:command file="catc-sym.mkiv" name="letterdollar"/>
+ <cd:command file="catc-sym.mkiv" name="letterpercent"/>
+ <cd:command file="catc-sym.mkiv" name="letterhat"/>
+ <cd:command file="catc-sym.mkiv" name="letterunderscore"/>
+ <cd:command file="catc-sym.mkiv" name="letterbar"/>
+ <cd:command file="catc-sym.mkiv" name="lettertilde"/>
+ <cd:command file="catc-sym.mkiv" name="letterbackslash"/>
+ <cd:command file="catc-sym.mkiv" name="letterslash"/>
+ <cd:command file="catc-sym.mkiv" name="letterquestionmark"/>
+ <cd:command file="catc-sym.mkiv" name="letterat"/>
+ <cd:command file="catc-sym.mkiv" name="lettercolon"/>
+ <cd:command file="catc-sym.mkiv" name="letterescape"/>
+ <cd:command file="catc-sym.mkiv" name="letterbgroup"/>
+ <cd:command file="catc-sym.mkiv" name="letteregroup"/>
+ <cd:command file="catc-sym.mkiv" name="letterleftbrace"/>
+ <cd:command file="catc-sym.mkiv" name="letterrightbrace"/>
+ <cd:command file="catc-sym.mkiv" name="letterexclamationmark"/>
+ <cd:command file="char-ini.mkiv" name="utfchar">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="char-ini.mkiv" name="safechar">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="char-ini.mkiv" name="checkedchar">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="char-ini.mkiv" name="textormathchar">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="char-ini.mkiv" name="chardescription">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="enco-ini.mkiv" name="percent"/>
+ <cd:command file="enco-ini.mkiv" name="procent"/>
+ <cd:command file="enco-ini.mkiv" name="ampersand"/>
+ <cd:command file="enco-ini.mkiv" name="dollar"/>
+ <cd:command file="enco-ini.mkiv" name="hash"/>
+ <cd:command file="enco-ini.mkiv" name="hyphen"/>
+ <cd:command file="enco-ini.mkiv" name="lowerleftsingleninequote"/>
+ <cd:command file="enco-ini.mkiv" name="lowerleftdoubleninequote"/>
+ <cd:command file="enco-ini.mkiv" name="lowerrightsingleninequote"/>
+ <cd:command file="enco-ini.mkiv" name="lowerrightdoubleninequote"/>
+ <cd:command file="enco-ini.mkiv" name="upperleftsingleninequote"/>
+ <cd:command file="enco-ini.mkiv" name="upperleftdoubleninequote"/>
+ <cd:command file="enco-ini.mkiv" name="upperrightsingleninequote"/>
+ <cd:command file="enco-ini.mkiv" name="upperrightdoubleninequote"/>
+ <cd:command file="enco-ini.mkiv" name="upperleftsinglesixquote"/>
+ <cd:command file="enco-ini.mkiv" name="upperleftdoublesixquote"/>
+ <cd:command file="enco-ini.mkiv" name="upperrightsinglesixquote"/>
+ <cd:command file="enco-ini.mkiv" name="upperrightdoublesixquote"/>
+ <cd:command file="enco-ini.mkiv" name="leftsubguillemot"/>
+ <cd:command file="enco-ini.mkiv" name="rightsubguillemot"/>
+ <cd:command file="enco-ini.mkiv" name="textcontrolspace"/>
+ <cd:command file="enco-ini.mkiv" name="textvisiblespace"/>
+ <cd:command file="enco-ini.mkiv" name="textminus"/>
+ <cd:command file="enco-ini.mkiv" name="textplus"/>
+ </cd:interface>
+ <cd:interface file="i-characteralign.xml">
+ <cd:command file="typo-tal.mkiv" name="singalcharacteralign">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-tal.mkiv" name="setcharacteralign">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ <cd:constant method="apply" prefix="number" type="cd:text"/>
+ <cd:constant method="apply" prefix="text" type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-tal.mkiv" name="resetcharacteralign"/>
+ <cd:command file="typo-tal.mkiv" name="alignmentcharacter"/>
+ <cd:command file="typo-tal.mkiv" name="characteralign" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ <cd:constant method="apply" prefix="number" type="cd:text"/>
+ <cd:constant method="apply" prefix="text" type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-tal.mkiv" name="checkcharacteralign">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-characterspacing.xml">
+ <cd:command file="typo-spa.mkiv" name="definecharacterspacing">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-spa.mkiv" name="setupcharacterspacing">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <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 file="typo-spa.mkiv" name="setcharacterspacing">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="reset"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-spa.mkiv" name="resetcharacterspacing"/>
+ </cd:interface>
+ <cd:interface file="i-characterstripping.xml">
+ <cd:command file="typo-rep.mkiv" name="setcharacterstripping">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="reset"/>
+ <cd:constant type="1"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-rep.mkiv" name="resetcharacterstripping"/>
+ <cd:command file="typo-rep.mkiv" name="forcecharacterstripping"/>
+ </cd:interface>
+ <cd:interface file="i-charwidth.xml">
+ <cd:command file="typo-lan.mkiv" name="charwidthlanguage"/>
+ <cd:command file="typo-lan.mkiv" name="averagecharwidth"/>
+ <cd:command file="typo-lan.mkiv" name="languagecharwidth">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-chemical.xml">
+ <cd:command file="chem-ini.mkiv" name="molecule">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="chem-ini.mkiv" name="chem">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="chem-str.mkiv" name="setupchemical">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="strut">
+ <cd:inherit name="value-strut"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant default="yes" type="fit"/>
+ <cd:constant type="none"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant default="yes" type="fit"/>
+ <cd:constant type="none"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="left">
+ <cd:constant default="yes" type="fit"/>
+ <cd:constant type="none"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant default="yes" type="fit"/>
+ <cd:constant type="none"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="top">
+ <cd:constant default="yes" type="fit"/>
+ <cd:constant type="none"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="bottom">
+ <cd:constant default="yes" type="fit"/>
+ <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 default="yes" type="normal"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="rotation">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="symalign">
+ <cd:constant default="yes" type="auto"/>
+ </cd:parameter>
+ <cd:parameter name="axis">
+ <cd:constant type="on"/>
+ <cd:constant default="yes" 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="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 default="yes" type="medium"/>
+ <cd:constant type="big"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="chem-str.mkiv" name="setupchemicalframed">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="chem-str.mkiv" name="definechemical">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="chem-str.mkiv" name="definechemicalsymbol">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="chem-str.mkiv" name="chemicalsymbol">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="chem-str.mkiv" name="chemicaltext">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="chem-str.mkiv" name="chemical" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupchemical"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="chem-str.mkiv" name="chemical">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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:command file="chem-str.mkiv" name="chemicaltoptext">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="chem-str.mkiv" name="chemicalbottext">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="chem-str.mkiv" name="chemicalmidtext">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="chem-str.mkiv" name="definechemicals">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupchemical"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-cleaning.xml">
+ <cd:command begin="push" end="pop" file="typo-chr.mkiv" name="punctuation" type="environment"/>
+ <cd:command file="typo-chr.mkiv" name="removepunctuation"/>
+ <cd:command file="typo-chr.mkiv" name="markcontent">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="reset"/>
+ <cd:constant default="yes" type="all"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-chr.mkiv" name="markedcontent" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="reset"/>
+ <cd:constant default="yes" type="all"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-chr.mkiv" name="removemarkedcontent">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-cln.mkiv" name="setcharactercleaning">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="reset"/>
+ <cd:constant type="1"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-clipping.xml">
+ <cd:command file="grph-trf.mkiv" name="setupclipping">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant default="yes" type="start"/>
+ <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 file="grph-trf.mkiv" name="clip">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupclipping"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-collector.xml">
+ <cd:command file="pack-box.mkiv" name="definecollector">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupcollector"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-box.mkiv" name="setupcollector">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 default="yes" type="left"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="right"/>
+ <cd:constant default="yes" type="top"/>
+ <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: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:parameter>
+ <cd:parameter name="state">
+ <cd:constant default="yes" type="start"/>
+ <cd:constant type="stop"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-box.mkiv" name="setcollector">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupcollector"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-box.mkiv" name="resetcollector">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-box.mkiv" name="flushcollector">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-box.mkiv" name="composedcollector">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-box.mkiv" name="adaptcollector">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupcollector"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-box.mkiv" name="collectedtext">
+ <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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-color.xml">
+ <cd:command file="colo-ext.mkiv" name="negatecolorbox">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ext.mkiv" name="colorintent" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="knockout"/>
+ <cd:constant type="overprint"/>
+ <cd:constant type="none"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ext.mkiv" name="overprint" type="environment"/>
+ <cd:command file="colo-ext.mkiv" name="knockout" type="environment"/>
+ <cd:command file="colo-ext.mkiv" name="textcolorintent" type="environment"/>
+ <cd:command file="colo-grp.mkiv" name="definecolorgroup">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="gray"/>
+ <cd:constant default="yes" type="rgb"/>
+ <cd:constant type="cmyk"/>
+ <cd:constant type="spot"/>
+ </cd:keywords>
+ <cd:triplet list="yes"/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="definecolor">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="colo-ini.mkiv" name="definecolor" variant="name">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="defineglobalcolor">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="definecolor"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="defineglobalcolor" variant="name">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="definenamedcolor">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="definecolor"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="definenamedcolor" variant="name">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="defineprocesscolor">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="definecolor"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="definespotcolor">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ <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 file="colo-ini.mkiv" name="definemultitonecolor">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="colo-ini.mkiv" name="definetransparency" variant="1">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="definetransparency" variant="2">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="definetransparency" variant="3">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="switchtocolor">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="color">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="coloronly">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="transparent">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="graycolor">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="colored" variant="name">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="colored">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="definecolor"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="color" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="coloronly" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="transparent" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="directcolor">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="directcolored" variant="name">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="directcolored">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="definecolor"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="currentcolor" type="environment"/>
+ <cd:command file="colo-ini.mkiv" name="colorset" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="usecolors">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="setupcolor">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="setupcolors">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant default="yes" type="start"/>
+ <cd:constant type="stop"/>
+ </cd:parameter>
+ <cd:parameter name="spot">
+ <cd:constant default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="expansion">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </cd:parameter>
+ <cd:parameter name="factor">
+ <cd:constant default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="rgb">
+ <cd:constant default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="cmyk">
+ <cd:constant default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="conversion">
+ <cd:constant default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="always"/>
+ </cd:parameter>
+ <cd:parameter name="pagecolormodel">
+ <cd:constant type="auto"/>
+ <cd:constant default="yes" type="none"/>
+ <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 default="yes" type="none"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command begin="push" end="pop" file="colo-ini.mkiv" name="color" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command begin="save" end="restore" file="colo-ini.mkiv" name="color" type="environment"/>
+ <cd:command file="colo-ini.mkiv" name="definepalet">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="cd:name">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="definepalet" variant="name">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="getpaletsize">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="paletsize"/>
+ <cd:command file="colo-ini.mkiv" name="setuppalet">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="setcolormodell">
+ <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 default="yes" type="all"/>
+ <cd:constant type="none"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="protectedcolors" type="environment"/>
+ <cd:command file="colo-ini.mkiv" name="defineintermediatecolor">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="color-ini.mkiv" name="doifelsecolor">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="color-ini.mkiv" name="doifcolorelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="color-ini.mkiv" name="doifcolor">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="textcolor" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="MPcolor">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="MPcoloronly">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="MPtransparency">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="MPoptions">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="colorvalue">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="grayvalue">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="colorcomponents">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="transparencycomponents">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="processcolorcomponents">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="doifelseblack">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="doifblackelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="doifelsedrawingblack">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-ini.mkiv" name="doifdrawingblackelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-run.mkiv" name="showcolorbar">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-run.mkiv" name="showcolor">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-run.mkiv" name="showcolorset">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-run.mkiv" name="showcolorcomponents">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-run.mkiv" name="showpalet">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant default="yes" type="horizontal"/>
+ <cd:constant type="vertical"/>
+ <cd:constant type="number"/>
+ <cd:constant type="value"/>
+ <cd:constant type="name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-run.mkiv" name="comparepalet">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-run.mkiv" name="showcolorgroup">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant default="yes" type="horizontal"/>
+ <cd:constant type="vertical"/>
+ <cd:constant type="number"/>
+ <cd:constant type="value"/>
+ <cd:constant type="name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="colo-run.mkiv" name="comparecolorgroup">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-columns.xml">
+ <cd:command file="page-mul.mkiv" name="setupcolumns">
+ <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 default="yes" type="right"/>
+ </cd:parameter>
+ <cd:parameter name="balance">
+ <cd:constant default="yes" type="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 default="yes" type="off"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-mul.mkiv" name="columns" type="environment">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupcolumns"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-mul.mkiv" name="setupcolumnspan">
+ <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 file="page-mul.mkiv" name="columnspan" type="environment">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupcolumnspan"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-mul.mkiv" name="setsimplecolumnhsize">
+ <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 file="page-mul.mkiv" name="simplecolumns" type="environment">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setsimplecolumnhsize"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-combination.xml">
+ <cd:command file="pack-com.mkiv" name="definecombination">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupcombination"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-com.mkiv" name="setupcombination">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 default="yes" type="bottom"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="label"/>
+ <cd:constant default="yes" type="text"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="continue">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" 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="inbetween">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-com.mkiv" name="combination" type="environment" variant="matrix">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:matrix"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-com.mkiv" name="combination" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupcombination"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-com.mkiv" name="floatcombination" type="environment" variant="matrix">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:matrix"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-com.mkiv" name="floatcombination" type="environment">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupcombination"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-commandhandler.xml">
+ <cd:command file="mult-aux.mkiv" name="installparameterhandler">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="installrootparameterhandler">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="installparameterhashhandler">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="installparametersethandler">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="installstyleandcolorhandler">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="installdefinehandler">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="installsetuphandler">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="installswitchsetuphandler">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="installautosetuphandler">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="installbasicparameterhandler">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="installbasicautosetuphandler">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="installcommandhandler">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="installswitchcommandhandler">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="installautocommandhandler">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="installsimplecommandhandler">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="installdirectparameterhandler">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="installdirectsetuphandler">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="installdirectparametersethandler">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="installdirectstyleandcolorhandler">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="installdirectcommandhandler">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="installsetuponlycommandhandler">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="relateparameterhandlers">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="installactionhandler">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="installnamespace">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="installcorenamespace">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="definenamespace">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 default="yes" type="no"/>
+ </cd:parameter>
+ <cd:parameter name="command">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ <cd:constant type="list"/>
+ </cd:parameter>
+ <cd:parameter name="setup">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ <cd:constant type="list"/>
+ </cd:parameter>
+ <cd:parameter name="set">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ <cd:constant type="list"/>
+ </cd:parameter>
+ <cd:parameter name="frame">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="listnamespaces"/>
+ <cd:command file="mult-aux.mkiv" name="showparentchain">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="doifelsecommandhandler">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="doifcommandhandlerelse">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="doifcommandhandler">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="doifnotcommandhandler">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="installdefinitionset">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="installdefinitionsetmember">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="installparentinjector">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-rul.mkiv" name="installframedcommandhandler">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-rul.mkiv" name="installframedautocommandhandler">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-rul.mkiv" name="installsimpleframedcommandhandler">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-comment.xml">
+ <cd:command file="scrn-wid.mkvi" name="definecomment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupcomment"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-wid.mkvi" name="setupcomment">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant default="yes" type="start"/>
+ <cd:constant type="stop"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:constant default="yes" type="normal"/>
+ <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 default="yes" 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 file="scrn-wid.mkvi" generated="yes" name="comment" variant="example">
+ <cd:sequence>
+ <cd:variable value="comment"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupcomment"/>
+ </cd:assignments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ <cd:instances>
+ <cd:constant value="comment"/>
+ </cd:instances>
+ </cd:command>
+ <cd:command file="scrn-wid.mkvi" generated="yes" name="comment" type="environment" variant="example">
+ <cd:sequence>
+ <cd:variable value="comment"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupcomment"/>
+ </cd:assignments>
+ </cd:arguments>
+ <cd:instances>
+ <cd:constant value="comment"/>
+ </cd:instances>
+ </cd:command>
+ <cd:command file="scrn-wid.mkvi" name="placecomments"/>
+ <cd:command file="scrn-wid.mkvi" name="comment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupcomment"/>
+ </cd:assignments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-wid.mkvi" name="comment" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupcomment"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-conversion.xml">
+ <cd:command file="core-con.mkiv" name="numbers">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="Numbers">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="romannumerals">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="Romannumerals">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="abjadnumerals">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="abjadnodotnumerals">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="abjadnaivenumerals">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="languagecharacters">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="languageCharacters">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="alphabeticnumerals">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="Alphabeticnumerals">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="thainumerals">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="devanagarinumerals">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="gurmurkhinumerals">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="gujaratinumerals">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="tibetannumerals">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="greeknumerals">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="Greeknumerals">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="arabicnumerals">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="persiannumerals">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="arabicdecimals">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="persiandecimals">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="arabicexnumerals">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="koreannumerals">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="koreannumeralsp">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="koreannumeralsc">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="koreanparentnumerals">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="koreancirclenumerals">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="chinesenumerals">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="chinesecapnumerals">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="chineseallnumerals">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="character">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="Character">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="characters">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="Characters">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="monthlong">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="monthshort">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="convertmonth">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="month">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="MONTH">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="MONTHLONG">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="MONTHSHORT">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="weekday">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="WEEKDAY">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="dayoftheweek">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="getdayoftheweek">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="doifelseleapyear">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="doifleapyearelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="dayspermonth">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="getdayspermonth">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="currentdate">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="year"/>
+ <cd:constant type="month"/>
+ <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:constant type="referral"/>
+ <cd:constant type="day:+"/>
+ <cd:constant type="day:++"/>
+ <cd:constant type="d:+"/>
+ <cd:constant type="d:++"/>
+ <cd:constant type="dd:+"/>
+ <cd:constant type="dd:++"/>
+ <cd:constant type="D:+"/>
+ <cd:constant type="D:++"/>
+ <cd:constant type="month:jalali"/>
+ <cd:constant type="m:jalali"/>
+ <cd:constant type="jalali:to"/>
+ <cd:constant type="jalali:from"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="date">
+ <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 file="core-con.mkiv" name="rawdate">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:inherit name="currentdate"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="currenttime">
+ <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 file="core-con.mkiv" name="processmonth">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="processyear">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="defineconversion">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:csname"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="defineconversion" variant="list">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="convertnumber">
+ <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"/>
+ <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:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="uconvertnumber">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:inherit name="convertnumber"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="doifelseconversiondefined">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="doifconversiondefinedelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="doifelseconversionnumber">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="doifconversionnumberelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="wordtonumber">
+ <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:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="highordinalstr">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="ordinalstr">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="ordinaldaynumber">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="verbosenumber">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="VerboseNumber">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="smallcappedromannumerals">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="smallcappedcharacters">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="sloveniannumerals">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="slovenianNumerals">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="spanishnumerals">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="spanishNumerals">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="unihex">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-con.mkiv" name="continuednumber">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-counter.xml">
+ <cd:command file="strc-num.mkiv" name="definecounter">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupcounter"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="setupcounter">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <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 default="yes" type="start"/>
+ <cd:constant type="stop"/>
+ </cd:parameter>
+ <cd:parameter name="way">
+ <cd:constant method="none" prefix="by" type="page"/>
+ <cd:constant method="none" prefix="by" type="block"/>
+ <cd:constant method="none" prefix="by" type="text"/>
+ <cd:constant method="none" prefix="by" type="head"/>
+ <cd:constant method="none" prefix="by" type="cd:section"/>
+ </cd:parameter>
+ <cd:parameter name="prefix">
+ <cd:constant default="yes" 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:constant type="cd:command"/>
+ <cd:constant method="apply" prefix="cd:processor" type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="prefixstopper">
+ <cd:constant type="cd:command"/>
+ <cd:constant method="apply" prefix="cd:processor" type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="prefixset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="prefixsegments">
+ <cd:constant type="cd:number"/>
+ <cd:constant method="range" prefix="cd:number" type="cd:number"/>
+ <cd:constant method="range" prefix="cd:number" type="*"/>
+ <cd:constant method="range" prefix="cd:number" type="all"/>
+ <cd:constant type="cd:section"/>
+ <cd:constant method="range" prefix="cd:section" type="cd:section"/>
+ <cd:constant method="range" prefix="cd:section" type="*"/>
+ <cd:constant method="range" prefix="cd:section" type="all"/>
+ </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:constant type="cd:command"/>
+ <cd:constant method="apply" prefix="cd:processor" type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="numberstopper">
+ <cd:constant type="cd:command"/>
+ <cd:constant method="apply" prefix="cd:processor" type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="numbersegments">
+ <cd:constant type="cd:number"/>
+ <cd:constant method="range" prefix="cd:number" type="cd:number"/>
+ <cd:constant method="range" prefix="cd:number" type="*"/>
+ <cd:constant method="range" prefix="cd:number" type="all"/>
+ </cd:parameter>
+ <cd:parameter name="type">
+ <cd:constant type="first"/>
+ <cd:constant type="previous"/>
+ <cd:constant type="next"/>
+ <cd:constant type="last"/>
+ <cd:constant default="yes" type="number"/>
+ </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:constant type="cd:command"/>
+ <cd:constant method="apply" prefix="cd:processor" type="cd:command"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="doifelsecounter">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="doifcounterelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="doifcounter">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="doifnotcounter">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="setcounter">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="setcounterown">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="restartcounter">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="resetcounter">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="incrementcounter">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="decrementcounter">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="rawcounter">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="lastcounter">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="firstcounter">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="nextcounter">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="prevcounter">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="countersubs">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="savecounter">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="restorecounter">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="showcounter">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="incrementedcounter">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="decrementedcounter">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="rawcountervalue">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="lastcountervalue">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="firstcountervalue">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="nextcountervalue">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="prevcountervalue">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="rawsubcountervalue">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="lastsubcountervalue">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="firstsubcountervalue">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="nextsubcountervalue">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="prevsubcountervalue">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="convertedcounter">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupcounter"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="convertedsubcounter">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:number"/>
+ <cd:constant method="range" prefix="cd:number" type="cd:number"/>
+ <cd:constant method="range" prefix="cd:number" type="*"/>
+ <cd:constant method="range" prefix="cd:number" type="all"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupcounter"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="directconvertedcounter">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="first"/>
+ <cd:constant type="previous"/>
+ <cd:constant type="next"/>
+ <cd:constant type="last"/>
+ <cd:constant type="number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="doifelsedefinedcounter">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="doifdefinedcounterelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="doifdefinedcounter">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-num.mkiv" name="doifundefinedcounter">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ini.mkvi" name="defineresetset">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ <cd:constant method="range" prefix="cd:sectionblock" type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ini.mkvi" name="defineseparatorset">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ <cd:constant method="range" prefix="cd:sectionblock" type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:command"/>
+ <cd:constant method="apply" prefix="cd:processor" type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:command"/>
+ <cd:constant method="apply" prefix="cd:processor" type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ini.mkvi" name="defineconversionset">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ <cd:constant method="range" prefix="cd:sectionblock" type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ <cd:constant method="apply" prefix="cd:processor" type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ <cd:constant method="apply" prefix="cd:processor" type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ini.mkvi" name="defineprefixset">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ <cd:constant method="range" prefix="cd:sectionblock" type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:section"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:section"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-dataset.xml">
+ <cd:command file="core-dat.mkiv" name="definedataset">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupdataset"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-dat.mkiv" name="setupdataset">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="delay">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-dat.mkiv" name="setdataset">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-dat.mkiv" name="datasetvariable">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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>
+ <cd:interface file="i-define.xml">
+ <cd:command file="core-sys.mkiv" name="define">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-sys.mkiv" name="defineexpandable">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-delimitedtext.xml">
+ <cd:command file="typo-del.mkiv" name="definedelimitedtext">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupdelimitedtext"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-del.mkiv" name="setupdelimitedtext">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </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="language">
+ <cd:constant type="local"/>
+ <cd:constant type="global"/>
+ <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 default="yes" type="no"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:constant type="text"/>
+ <cd:constant type="paragraph"/>
+ <cd:constant default="yes" type="margin"/>
+ </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:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="standard"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rightmargin">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="standard"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="indenting">
+ <cd:inherit name="setupindenting"/>
+ </cd:parameter>
+ <cd:parameter name="indentnext">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="auto"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="symstyle">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="symcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-del.mkiv" generated="yes" name="delimitedtext" variant="example">
+ <cd:sequence>
+ <cd:variable value="delimitedtext"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ <cd:instances>
+ <cd:constant value="quotation"/>
+ <cd:constant value="quote"/>
+ <cd:constant value="blockquote"/>
+ <cd:constant value="speech"/>
+ <cd:constant value="aside"/>
+ </cd:instances>
+ </cd:command>
+ <cd:command file="typo-del.mkiv" generated="yes" name="delimitedtext" type="environment" variant="example">
+ <cd:sequence>
+ <cd:variable value="delimitedtext"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="startnarrower"/>
+ </cd:keywords>
+ </cd:arguments>
+ <cd:instances>
+ <cd:constant value="quotation"/>
+ <cd:constant value="quote"/>
+ <cd:constant value="blockquote"/>
+ <cd:constant value="speech"/>
+ <cd:constant value="aside"/>
+ </cd:instances>
+ </cd:command>
+ <cd:command file="typo-del.mkiv" name="delimitedtext">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-del.mkiv" name="delimitedtext" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="startnarrower"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-del.mkiv" name="delimited">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-del.mkiv" name="delimited" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="startnarrower"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-del.mkiv" name="quotation">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-del.mkiv" name="quotation" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="startnarrower"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-del.mkiv" name="quote">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-del.mkiv" name="quote" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-del.mkiv" name="blockquote">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-del.mkiv" name="blockquote" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="startnarrower"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-del.mkiv" name="speech">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-del.mkiv" name="aside" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="startnarrower"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-del.mkiv" name="aside">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-del.mkiv" name="speech" type="environment">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="startnarrower"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-del.mkiv" name="setupquotation">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupdelimitedtext"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-del.mkiv" name="setupquote">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupdelimitedtext"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-del.mkiv" name="subsentence">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-del.mkiv" name="subsentence" type="environment"/>
+ </cd:interface>
+ <cd:interface file="i-description.xml">
+ <cd:command file="strc-des.mkvi" name="definedescription">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupdescription"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-des.mkvi" name="setupdescription">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="title">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </cd:parameter>
+ <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 default="yes" 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="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 default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="indentnext">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="auto"/>
+ </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 default="yes" type="no"/>
+ <cd:constant type="xml"/>
+ </cd:parameter>
+ <cd:parameter name="sample">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="margin">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="standard"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="headstyle">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="headcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-des.mkvi" generated="yes" name="description" type="environment" variant="example">
+ <cd:sequence>
+ <cd:variable value="description"/>
+ </cd:sequence>
+ <cd:arguments>
+ <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:arguments>
+ </cd:command>
+ <cd:command file="strc-des.mkvi" generated="yes" name="description" type="environment" variant="example:title">
+ <cd:sequence>
+ <cd:variable value="description"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-des.mkvi" generated="yes" name="description" variant="example">
+ <cd:sequence>
+ <cd:variable value="description"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:content"/>
+ </cd:keywords>
+ <cd:delimiter name="par"/>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-digits.xml">
+ <cd:command file="typo-dig.mkiv" name="setdigitsmanipulation">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="reset"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-dig.mkiv" name="resetdigitsmanipulation"/>
+ <cd:command file="typo-dig.mkiv" name="equaldigits">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-dig.mkiv" name="dummydigit"/>
+ </cd:interface>
+ <cd:interface file="i-dimension.xml">
+ <cd:command file="mult-dim.mkvi" name="assigndimension">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant method="none" prefix="cd:sign" type="small"/>
+ <cd:constant method="none" prefix="cd:sign" type="medium"/>
+ <cd:constant method="none" prefix="cd:sign" type="big"/>
+ <cd:constant type="none"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-dim.mkvi" name="assignalfadimension">
+ <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:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-dim.mkvi" name="assignwidth">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="fit"/>
+ <cd:constant type="broad"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-dim.mkvi" name="assignvalue">
+ <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:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-direction.xml">
+ <cd:command file="typo-dir.mkiv" name="setupdirections">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="bidi">
+ <cd:constant type="on"/>
+ <cd:constant default="yes" type="off"/>
+ <cd:constant type="local"/>
+ <cd:constant type="global"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:constant type="one"/>
+ <cd:constant type="two"/>
+ <cd:constant default="yes" type="default"/>
+ </cd:parameter>
+ <cd:parameter name="fences">
+ <cd:constant default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-dir.mkiv" name="setdirection">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-dir.mkiv" name="resetdirection"/>
+ <cd:command file="supp-dir.mkiv" name="showdirsinmargin"/>
+ <cd:command file="supp-dir.mkiv" name="istltdir">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="TLT"/>
+ <cd:constant type="TRT"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-dir.mkiv" name="istrtdir">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="TLT"/>
+ <cd:constant type="TRT"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-document.xml">
+ <cd:command file="file-job.mkvi" name="text" type="environment"/>
+ <cd:command begin="autostart" end="autostop" file="file-job.mkvi" name="text" type="environment"/>
+ <cd:command file="file-job.mkvi" name="notext" type="environment"/>
+ <cd:command file="file-job.mkvi" name="environment" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ <cd:constant type="*"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="environment" type="environment" variant="string">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:file"/>
+ <cd:constant type="*"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="environment" variant="string">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="useenvironment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="currentenvironment"/>
+ <cd:command file="file-job.mkvi" name="project" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ <cd:constant type="*"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="project" type="environment" variant="string">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:file"/>
+ <cd:constant type="*"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="project">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="project" variant="string">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="useproject">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="currentproject"/>
+ <cd:command file="file-job.mkvi" name="product" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ <cd:constant type="*"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="product" type="environment" variant="string">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:file"/>
+ <cd:constant type="*"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="product">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="product" variant="string">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="useproduct">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="currentproduct"/>
+ <cd:command file="file-job.mkvi" name="component" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ <cd:constant type="*"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="component" type="environment" variant="string">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:file"/>
+ <cd:constant type="*"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="component">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="component" variant="string">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="usecomponent">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="currentcomponent"/>
+ <cd:command file="file-job.mkvi" name="document" type="environment">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupdocument"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="setupdocument">
+ <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 file="file-job.mkvi" name="presetdocument">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupdocument"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="documentvariable">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-dummy.xml">
+ <cd:command file="mult-aux.mkiv" name="getdummyparameters">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="dummyparameter">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="directdummyparameter">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="setdummyparameter">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="letdummyparameter">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="usedummystyleandcolor">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="usedummystyleparameter">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-aux.mkiv" name="usedummycolorparameter">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-effect.xml">
+ <cd:command file="attr-eff.mkiv" name="defineeffect">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupeffect"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="attr-eff.mkiv" name="setupeffect">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="method">
+ <cd:constant default="yes" type="none"/>
+ <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 default="yes" type="normal"/>
+ <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 file="attr-eff.mkiv" name="effect" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="attr-eff.mkiv" generated="yes" name="effect" type="environment" variant="example">
+ <cd:sequence>
+ <cd:variable value="effect"/>
+ </cd:sequence>
+ </cd:command>
+ <cd:command file="attr-eff.mkiv" name="effect">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-enumeration.xml">
+ <cd:command file="strc-enu.mkvi" name="defineenumeration">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupenumeration"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-enu.mkvi" name="setupenumeration">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="title">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </cd:parameter>
+ <cd:parameter name="number">
+ <cd:constant default="yes" type="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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </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>
+ <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 default="yes" 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 default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="indentnext">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="auto"/>
+ </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 default="yes" type="no"/>
+ <cd:constant type="xml"/>
+ </cd:parameter>
+ <cd:parameter name="sample">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="margin">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="standard"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="headstyle">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="headcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:inherit name="setupcounter"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-enu.mkvi" generated="yes" name="enumeration" type="environment" variant="example">
+ <cd:sequence>
+ <cd:variable value="enumeration"/>
+ </cd:sequence>
+ <cd:arguments>
+ <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:arguments>
+ </cd:command>
+ <cd:command file="strc-enu.mkvi" generated="yes" name="enumeration" type="environment" variant="example:title">
+ <cd:sequence>
+ <cd:variable value="enumeration"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-enu.mkvi" generated="yes" name="enumeration" variant="example">
+ <cd:sequence>
+ <cd:variable value="enumeration"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:content"/>
+ </cd:keywords>
+ <cd:delimiter name="par"/>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-export.xml">
+ <cd:command file="back-exp.mkiv" name="setelementexporttag">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant default="yes" type="export"/>
+ <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 file="back-exp.mkiv" name="setupexport">
+ <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 default="yes" type="no"/>
+ </cd:parameter>
+ <cd:parameter name="hyphen">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </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>
+ <cd:interface file="i-field.xml">
+ <cd:command file="scrn-fld.mkvi" name="presetfieldsymbols">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-fld.mkvi" name="definefieldcategory">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfieldcategory"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-fld.mkvi" name="setupfieldcategory">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="start">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </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 file="scrn-fld.mkvi" name="doifelsefieldcategory">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-fld.mkvi" name="doiffieldcategoryelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-fld.mkvi" name="definefieldbody">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfieldbody"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-fld.mkvi" name="setupfieldbody">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="scrn-fld.mkvi" name="fieldbody">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfieldbody"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-fld.mkvi" name="definefieldbodyset">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-fld.mkvi" name="doifelsefieldbody">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-fld.mkvi" name="doiffieldbodyelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-fld.mkvi" name="definefield">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-fld.mkvi" name="definesubfield">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-fld.mkvi" name="clonefield">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-fld.mkvi" name="copyfield">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-fld.mkvi" name="fitfieldframed">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-fld.mkvi" name="fitfield">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfieldbody"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-fld.mkvi" name="setupfieldlabelframed">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-fld.mkvi" name="setupfieldcontentframed">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupframed"/>
+ <cd:inherit name="setupfieldcategory"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-fld.mkvi" name="setupfieldtotalframed">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </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="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 file="scrn-fld.mkvi" name="setupfield">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="scrn-fld.mkvi" name="setupfields">
+ <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 file="scrn-fld.mkvi" name="field">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-fld.mkvi" name="definefieldstack">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfieldcategory"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-fld.mkvi" name="fieldstack">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfieldcategory"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-figure.xml">
+ <cd:command file="grph-fig.mkiv" name="figure" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="externalfigure"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="grph-fig.mkiv" name="referring">
+ <cd:arguments>
+ <cd:position list="yes"/>
+ <cd:position list="yes"/>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="grph-fig.mkiv" name="marking">
+ <cd:arguments>
+ <cd:position list="yes"/>
+ <cd:position list="yes"/>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="grph-fig.mkiv" name="remark">
+ <cd:arguments>
+ <cd:position list="yes"/>
+ <cd:position list="yes"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="grph-fig.mkiv" name="colorbar">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-file.xml">
+ <cd:command file="file-ini.mkvi" name="input">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-ini.mkvi" name="input" variant="string">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-ini.mkvi" name="doiffile">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-ini.mkvi" name="doifnotfile">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-ini.mkvi" name="doifelsefile">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-ini.mkvi" name="doiffileelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-sys.mkiv" name="jobfilename"/>
+ <cd:command file="core-sys.mkiv" name="jobfilesuffix"/>
+ <cd:command file="core-sys.mkiv" name="inputfilebarename"/>
+ <cd:command file="core-sys.mkiv" name="inputfilerealsuffix"/>
+ <cd:command file="core-sys.mkiv" name="inputfilesuffix"/>
+ <cd:command file="core-sys.mkiv" name="inputfilename"/>
+ <cd:command file="core-sys.mkiv" name="outputfilename"/>
+ <cd:command file="file-ini.mkvi" name="readingfile" type="environment"/>
+ <cd:command begin="push" end="pop" file="file-ini.mkvi" name="endofline" type="environment"/>
+ <cd:command file="file-ini.mkvi" name="restoreendofline"/>
+ <cd:command file="file-ini.mkvi" name="inputgivenfile">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-ini.mkvi" name="doifelsepath">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:path"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-ini.mkvi" name="doifpathelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:path"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-ini.mkvi" name="doifelsefileexists">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-ini.mkvi" name="doiffileexistselse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-ini.mkvi" name="doifelsepathexists">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:path"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-ini.mkvi" name="doifpathexistselse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:path"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-ini.mkvi" name="doifelseparentfile">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-ini.mkvi" name="doifparentfileelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-ini.mkvi" name="splitfilename">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-ini.mkvi" name="splitofffull"/>
+ <cd:command file="file-ini.mkvi" name="splitoffpath"/>
+ <cd:command file="file-ini.mkvi" name="splitoffbase"/>
+ <cd:command file="file-ini.mkvi" name="splitoffname"/>
+ <cd:command file="file-ini.mkvi" name="splitofftype"/>
+ <cd:command file="file-ini.mkvi" name="splitoffkind"/>
+ <cd:command file="file-ini.mkvi" name="splitoffroot"/>
+ <cd:command file="file-job.mkvi" name="doifelseinputfile">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="doifinputfileelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-ini.mkvi" name="processfile">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="usepath">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:path"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="usesubpath">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:path"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command begin="push" end="pop" file="file-job.mkvi" name="path" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:path"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="resetpath"/>
+ <cd:command file="file-job.mkvi" name="allinputpaths"/>
+ <cd:command file="file-ini.mkvi" name="locatefilepath">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="locatedfilepath"/>
+ <cd:command file="file-job.mkvi" name="usezipfile">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="processfilemany">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="processfileonce">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="processfilenone">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="loadtexfile">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="loadluafile">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="loadcldfile">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="loadanyfile">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="loadtexfileonce">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="loadluafileonce">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="loadcldfileonce">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="loadanyfileonce">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-job.mkvi" name="continueifinputfile">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-res.mkvi" name="readjobfile">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-res.mkvi" name="readlocfile">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-res.mkvi" name="readsysfile">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-res.mkvi" name="readfixfile">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:path"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-res.mkvi" name="readsetfile">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:path"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-res.mkvi" name="readfile">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-res.mkvi" name="ReadFile">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-res.mkvi" name="readtexfile">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-res.mkvi" name="readxmlfile">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-res.mkvi" name="doifelselocfile">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-res.mkvi" name="doiflocfileelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-res.mkvi" name="locfilename">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-sys.mkvi" name="definefilesynonym">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-sys.mkvi" name="definefilefallback">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-sys.mkvi" name="truefilename">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-filler.xml">
+ <cd:command file="spac-flr.mkiv" name="definefiller">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfiller"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-flr.mkiv" name="setupfiller">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 default="yes" type="symbol"/>
+ <cd:constant type="stretch"/>
+ <cd:constant type="rule"/>
+ <cd:constant type="space"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:constant default="yes" type="local"/>
+ <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: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:parameter>
+ <cd:parameter name="symbol">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-flr.mkiv" name="filler">
+ <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 file="spac-flr.mkiv" name="checkedfiller">
+ <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:command file="node-rul.mkiv" name="definelinefiller">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplinefiller"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="node-rul.mkiv" name="setuplinefiller">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="location">
+ <cd:constant type="left"/>
+ <cd:constant type="right"/>
+ <cd:constant default="yes" type="both"/>
+ </cd:parameter>
+ <cd:parameter name="scope">
+ <cd:constant type="left"/>
+ <cd:constant type="right"/>
+ <cd:constant default="yes" type="local"/>
+ </cd:parameter>
+ <cd:parameter name="mp">
+ <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="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="threshold">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rulethickness">
+ <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="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="textstyle">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="textcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="node-rul.mkiv" name="setuplinefillers">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuplinefiller"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="node-rul.mkiv" name="linefiller" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="filler"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplinefiller"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="node-rul.mkiv" name="setlinefiller">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="filler"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-fillinline.xml">
+ <cd:command file="pack-mrl.mkiv" name="setupfillinlines">
+ <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 file="pack-mrl.mkiv" name="fillinline">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupfillinlines"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-fillinrule.xml">
+ <cd:command file="pack-mrl.mkiv" name="setupfillinrules">
+ <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 default="yes" type="small"/>
+ <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 default="yes" 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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-mrl.mkiv" name="fillinrules">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfillinrules"/>
+ </cd:assignments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-mrl.mkiv" name="fillintext">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfillinrules"/>
+ </cd:assignments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-firstline.xml">
+ <cd:command file="typo-fln.mkiv" name="definefirstline">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfirstline"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-fln.mkiv" name="setupfirstline">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 default="yes" type="line"/>
+ <cd:constant type="word"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-fln.mkiv" name="setfirstline">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-fln.mkiv" name="applytofirstcharacter">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-fittingpage.xml">
+ <cd:command file="page-app.mkiv" name="definefittingpage">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfittingpage"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-app.mkiv" name="setupfittingpage">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="pagestate">
+ <cd:constant type="start"/>
+ <cd:constant default="yes" type="stop"/>
+ </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 default="yes" type="defaut"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-app.mkiv" name="fittingpage" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfittingpage"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-app.mkiv" generated="yes" name="fittingpage" type="environment" variant="example">
+ <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:instances>
+ <cd:constant value="TEXpage"/>
+ <cd:constant value="MPpage"/>
+ </cd:instances>
+ </cd:command>
+ <cd:command file="page-app.mkiv" name="TEXpage" type="environment">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfittingpage"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-app.mkiv" name="setupTEXpage">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupfittingpage"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-fig.mkiv" name="MPpage" type="environment">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfittingpage"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-fig.mkiv" name="setupMPpage">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupfittingpage"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-floats.xml">
+ <cd:command file="strc-flt.mkvi" name="definefloat">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:singular"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:plural"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfloat"/>
+ </cd:assignments>
+ </cd:arguments>
+ <cd:instances>
+ <cd:constant value="chemical"/>
+ <cd:constant value="figure"/>
+ <cd:constant value="table"/>
+ <cd:constant value="intermezzo"/>
+ <cd:constant value="graphic"/>
+ </cd:instances>
+ </cd:command>
+ <cd:command file="strc-flt.mkvi" name="definefloat" variant="name">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:singular"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:plural"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:singular"/>
+ </cd:keywords>
+ </cd:arguments>
+ <cd:instances>
+ <cd:constant value="chemical"/>
+ <cd:constant value="figure"/>
+ <cd:constant value="table"/>
+ <cd:constant value="intermezzo"/>
+ <cd:constant value="graphic"/>
+ </cd:instances>
+ </cd:command>
+ <cd:command file="strc-flt.mkvi" name="setupfloat">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:singular"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="indentnext">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="auto"/>
+ </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 default="yes" type="normal"/>
+ </cd:parameter>
+ <cd:parameter name="grid">
+ <cd:constant type="cd:string"/>
+ </cd:parameter>
+ <cd:parameter name="local">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </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: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: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>
+ <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 default="yes" type="big"/>
+ <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 default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-flt.mkvi" name="setupfloatcaption">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 default="yes" type="bottom"/>
+ <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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </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 default="yes" type="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 default="yes" type="fit"/>
+ <cd:constant type="max"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="minwidth">
+ <cd:constant default="yes" type="fit"/>
+ <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 file="strc-flt.mkvi" name="setupcaption">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupfloatcaption"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-flt.mkvi" generated="yes" name="placefloat" variant="instance">
+ <cd:sequence>
+ <cd:string value="place"/>
+ <cd:instance value="float"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <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 method="none" prefix="cd:sign" type="line"/>
+ <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 method="none" prefix="cd:sign" type="hang"/>
+ <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="header"/>
+ <cd:constant type="footer"/>
+ <cd:constant type="somewhere"/>
+ <cd:constant type="effective"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ <cd:instances>
+ <cd:constant value="chemical"/>
+ <cd:constant value="figure"/>
+ <cd:constant value="table"/>
+ <cd:constant value="intermezzo"/>
+ <cd:constant value="graphic"/>
+ </cd:instances>
+ </cd:command>
+ <cd:command file="strc-flt.mkvi" name="placefloat">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:singular"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <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 method="none" prefix="cd:sign" type="line"/>
+ <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 method="none" prefix="cd:sign" type="hang"/>
+ <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="header"/>
+ <cd:constant type="footer"/>
+ <cd:constant type="somewhere"/>
+ <cd:constant type="effective"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-flt.mkvi" generated="yes" name="placefloat" type="environment" variant="instance">
+ <cd:sequence>
+ <cd:string value="place"/>
+ <cd:instance value="float"/>
+ </cd:sequence>
+ <cd:arguments>
+ <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: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 method="none" prefix="cd:sign" type="line"/>
+ <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 method="none" prefix="cd:sign" type="hang"/>
+ <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="header"/>
+ <cd:constant type="footer"/>
+ <cd:constant type="somewhere"/>
+ <cd:constant type="effective"/>
+ </cd:parameter>
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ <cd:instances>
+ <cd:constant value="chemical"/>
+ <cd:constant value="figure"/>
+ <cd:constant value="table"/>
+ <cd:constant value="intermezzo"/>
+ <cd:constant value="graphic"/>
+ </cd:instances>
+ </cd:command>
+ <cd:command file="strc-flt.mkvi" generated="yes" name="floattext" type="environment" variant="example">
+ <cd:sequence>
+ <cd:variable value="float"/>
+ <cd:string value="text"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <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 method="none" prefix="cd:sign" type="line"/>
+ <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 method="none" prefix="cd:sign" type="hang"/>
+ <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="header"/>
+ <cd:constant type="footer"/>
+ <cd:constant type="somewhere"/>
+ <cd:constant type="effective"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-flt.mkvi" generated="yes" name="placelistoffloats" variant="example">
+ <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 file="strc-flt.mkvi" generated="yes" name="completelistoffloats" variant="example">
+ <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 file="strc-flt.mkvi" name="floatuserdataparameter">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-flt.mkvi" name="doifelserightpagefloat">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-flt.mkvi" name="doifrightpagefloatelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-flt.mkvi" name="doifelseoddpagefloat">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-flt.mkvi" name="doifoddpagefloatelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-flt.mkvi" name="doifelsemainfloatbody">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-flt.mkvi" name="doifmainfloatbodyelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-flt.mkvi" name="setuplocalfloats">
+ <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 file="strc-flt.mkvi" name="noflocalfloats"/>
+ <cd:command file="strc-flt.mkvi" name="resetlocalfloats"/>
+ <cd:command file="strc-flt.mkvi" name="somelocalfloat"/>
+ <cd:command file="strc-flt.mkvi" name="getlocalfloats"/>
+ <cd:command file="strc-flt.mkvi" name="flushlocalfloats"/>
+ <cd:command file="strc-flt.mkvi" name="getlocalfloat">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-flt.mkvi" name="forcelocalfloats"/>
+ <cd:command file="tabl-tsp.mkiv" name="setupfloatsplitting">
+ <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 file="tabl-tsp.mkiv" name="splitfloat">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfloatsplitting"/>
+ </cd:assignments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-tsp.mkiv" name="doifnotinsidesplitfloat">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-flt.mkiv" name="placenamedfloat">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-flt.mkiv" name="placefloatwithsetups">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <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 method="none" prefix="cd:sign" type="line"/>
+ <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 method="none" prefix="cd:sign" type="hang"/>
+ <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="header"/>
+ <cd:constant type="footer"/>
+ <cd:constant type="somewhere"/>
+ <cd:constant type="effective"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-fontfamily.xml">
+ <cd:command file="font-sel.mkvi" name="definefontfamily">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant default="yes" type="rm"/>
+ <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:keywords>
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ <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 file="font-sel.mkvi" name="definefontfamily" variant="preset">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant default="yes" type="rm"/>
+ <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:keywords>
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-sel.mkvi" name="definefallbackfamily">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant default="yes" type="rm"/>
+ <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:keywords>
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ <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 default="yes" type="no"/>
+ </cd:parameter>
+ <cd:parameter name="force">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" 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 file="font-sel.mkvi" name="definefallbackfamily" variant="preset">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant default="yes" type="rm"/>
+ <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:keywords>
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-sel.mkvi" name="definefontfamilypreset">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="definefontfamily"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-sel.mkvi" name="definefontfamilypreset" variant="name">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-fonts.xml">
+ <cd:command file="font-col.mkvi" name="definefontfallback">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 default="yes" type="no"/>
+ </cd:parameter>
+ <cd:parameter name="check">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </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 file="font-col.mkvi" name="resetfontfallback">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-emp.mkvi" name="emphasistypeface"/>
+ <cd:command file="font-emp.mkvi" name="emphasisboldface"/>
+ <cd:command file="font-emp.mkvi" name="normalboldface"/>
+ <cd:command file="font-emp.mkvi" name="normaltypeface"/>
+ <cd:command file="font-emp.mkvi" name="swaptypeface"/>
+ <cd:command file="font-emp.mkvi" name="typeface"/>
+ <cd:command file="font-emp.mkvi" name="boldface"/>
+ <cd:command file="font-emp.mkvi" name="swapface"/>
+ <cd:command file="font-fea.mkvi" name="definefontfeature">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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="checkmarks">
+ <cd:constant default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="cd:name">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </cd:parameter>
+ <cd:parameter name="mathnolimitsmode">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-fea.mkvi" name="adaptfontfeature">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="definefontfeature"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-fea.mkvi" name="fontfeaturelist">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-fea.mkvi" name="addfeature">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-fea.mkvi" name="addfeature" variant="direct">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-fea.mkvi" name="subtractfeature">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-fea.mkvi" name="subtractfeature" variant="direct">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-fea.mkvi" name="replacefeature">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-fea.mkvi" name="replacefeature" variant="direct">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-fea.mkvi" name="resetandaddfeature">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-fea.mkvi" name="resetandaddfeature" variant="direct">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-fea.mkvi" name="resetfeature"/>
+ <cd:command file="font-fea.mkvi" name="revivefeature"/>
+ <cd:command file="font-fea.mkvi" name="setfontfeature">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-fea.mkvi" name="feature">
+ <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:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-fea.mkvi" name="feature" variant="direct">
+ <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:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-fea.mkvi" name="doifelsecurrentfonthasfeature">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-fea.mkvi" name="doifcurrentfonthasfeatureelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-fea.mkvi" name="doaddfeature">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-fea.mkvi" name="dosubtractfeature">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-fea.mkvi" name="doreplacefeature">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-fea.mkvi" name="doresetandafffeature">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-fil.mkvi" name="fontclass" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="each"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-fil.mkvi" name="classfont">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-fil.mkvi" name="definefontsynonym">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ <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 file="font-fil.mkvi" name="definefontfile">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <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 file="font-fil.mkvi" name="truefontname">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-fil.mkvi" name="expandfontsynonym">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-fil.mkvi" name="doifelsefontsynonym">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-fil.mkvi" name="doiffontsynonymelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-fil.mkvi" name="tracedfontname">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-fil.mkvi" name="fontclassname">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-gds.mkvi" name="loadfontgoodies">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-gds.mkvi" name="setfontcolorsheme">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-gds.mkvi" name="resetfontcolorsheme"/>
+ <cd:command file="font-ini.mkvi" name="definedfont">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-ini.mkvi" name="font" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-ini.mkvi" name="bodyfontsize"/>
+ <cd:command file="font-ini.mkvi" name="normalizebodyfontsize">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-ini.mkvi" name="thenormalizedbodyfontsize">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-fil.mkvi" name="mapfontsize">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-ini.mkvi" name="definefontstyle">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-ini.mkvi" name="definefontsize">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-ini.mkvi" name="definefontalternative">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-ini.mkvi" name="definefont">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupinterlinespace"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-ini.mkvi" name="definefont" variant="argument">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-ini.mkvi" name="definefrozenfont">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-ini.mkvi" name="definebodyfontenvironment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="*">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-fil.mkvi" name="processbodyfontenvironmentlist">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-fil.mkvi" name="bodyfontenvironmentlist"/>
+ <cd:command file="font-fil.mkvi" name="registerfontclass">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-fil.mkvi" name="setcurrentfontclass">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-ini.mkvi" name="tx"/>
+ <cd:command file="font-ini.mkvi" name="txx"/>
+ <cd:command file="font-fil.mkvi" name="definebodyfont">
+ <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 default="yes" type="rm"/>
+ <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 file="font-fil.mkvi" name="definebodyfont" variant="argument">
+ <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 default="yes" type="rm"/>
+ <cd:constant type="ss"/>
+ <cd:constant type="tt"/>
+ <cd:constant type="hw"/>
+ <cd:constant type="cg"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-ini.mkiv" name="setupfonts">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="language">
+ <cd:constant default="yes" type="no"/>
+ <cd:constant type="auto"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-ini.mkiv" name="setupbodyfont">
+ <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 file="font-ini.mkvi" name="switchtobodyfont">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:inherit name="setupbodyfont"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-ini.mkiv" name="fastswitchtobodyfont">
+ <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 file="font-ini.mkvi" name="usebodyfont">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:inherit name="setupbodyfont"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-ini.mkvi" name="usebodyfontparameter">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-ini.mkvi" name="fontchar">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-ini.mkvi" name="fontcharbyindex">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-ini.mkvi" name="tochar">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-ini.mkiv" name="switchstyleonly">
+ <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 file="font-ini.mkiv" name="switchstyleonly" variant="command">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-ini.mkvi" name="definebodyfontswitch">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes">
+ <cd:inherit name="setupbodyfont"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-ini.mkvi" name="setsmallbodyfont"/>
+ <cd:command file="font-ini.mkvi" name="setbigbodyfont"/>
+ <cd:command file="font-ini.mkvi" name="setmainbodyfont"/>
+ <cd:command file="font-ini.mkvi" name="restoreglobalbodyfont"/>
+ <cd:command file="font-ini.mkvi" name="predefinefont">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-ini.mkvi" name="predefinedfont">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-run.mkiv" name="showbodyfont">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:inherit name="setupbodyfont"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-run.mkiv" name="showbodyfontenvironment">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:inherit name="setupbodyfont"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-run.mkiv" name="showfont">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-run.mkiv" name="showfontstyle">
+ <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 file="font-run.mkiv" name="showligature">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-run.mkiv" name="showligatures">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-run.mkiv" name="showfontstrip">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:inherit name="setupbodyfont"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-run.mkiv" name="showminimalbaseline"/>
+ <cd:command file="font-run.mkiv" name="showkerning">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-run.mkiv" name="showcharratio">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-run.mkiv" name="showfontparameters"/>
+ <cd:command file="font-pre.mkiv" name="setsmallcaps"/>
+ <cd:command file="font-pre.mkiv" name="setoldstyle"/>
+ <cd:command file="font-pre.mkiv" name="settabular"/>
+ <cd:command file="font-pre.mkiv" name="setfractions"/>
+ <cd:command file="font-pre.mkiv" name="setsuperiors"/>
+ <cd:command file="font-pre.mkiv" name="tinyfont"/>
+ <cd:command file="font-pre.mkiv" name="infofont"/>
+ <cd:command file="font-pre.mkiv" name="infofontbold"/>
+ <cd:command file="font-pre.mkiv" name="smallbodyfont"/>
+ <cd:command file="font-pre.mkiv" name="bigbodyfont"/>
+ <cd:command file="font-pre.mkiv" name="smaller"/>
+ <cd:command file="font-pre.mkiv" name="bigger"/>
+ <cd:command file="font-pre.mkiv" name="normal"/>
+ <cd:command file="font-pre.mkiv" name="bold"/>
+ <cd:command file="font-pre.mkiv" name="mono"/>
+ <cd:command file="font-pre.mkiv" name="monobold"/>
+ <cd:command file="font-pre.mkiv" name="slanted"/>
+ <cd:command file="font-pre.mkiv" name="italic"/>
+ <cd:command file="font-pre.mkiv" name="boldslanted"/>
+ <cd:command file="font-pre.mkiv" name="slantedbold"/>
+ <cd:command file="font-pre.mkiv" name="bolditalic"/>
+ <cd:command file="font-pre.mkiv" name="italicbold"/>
+ <cd:command file="font-pre.mkiv" name="small"/>
+ <cd:command file="font-pre.mkiv" name="smallnormal"/>
+ <cd:command file="font-pre.mkiv" name="smallbold"/>
+ <cd:command file="font-pre.mkiv" name="smalltype"/>
+ <cd:command file="font-pre.mkiv" name="smallslanted"/>
+ <cd:command file="font-pre.mkiv" name="smallboldslanted"/>
+ <cd:command file="font-pre.mkiv" name="smallslantedbold"/>
+ <cd:command file="font-pre.mkiv" name="smallbolditalic"/>
+ <cd:command file="font-pre.mkiv" name="smallitalicbold"/>
+ <cd:command file="font-pre.mkiv" name="sans"/>
+ <cd:command file="font-pre.mkiv" name="sansserif"/>
+ <cd:command file="font-pre.mkiv" name="roman"/>
+ <cd:command file="font-pre.mkiv" name="serif"/>
+ <cd:command file="font-pre.mkiv" name="regular"/>
+ <cd:command file="font-pre.mkiv" name="handwritten"/>
+ <cd:command file="font-pre.mkiv" name="calligraphic"/>
+ <cd:command file="font-pre.mkiv" name="sansnormal"/>
+ <cd:command file="font-pre.mkiv" name="sansbold"/>
+ <cd:command file="font-pre.mkiv" name="serifnormal"/>
+ <cd:command file="font-pre.mkiv" name="serifbold"/>
+ <cd:command file="font-pre.mkiv" name="mononormal"/>
+ <cd:command file="font-pre.mkiv" name="monobold"/>
+ <cd:command file="font-sol.mkvi" name="definefontsolution">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfontsolution"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-sol.mkvi" name="setupfontsolution">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="font-sol.mkvi" name="setfontsolution">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-sol.mkvi" name="resetfontsolution"/>
+ <cd:command file="font-sol.mkvi" name="fontsolution" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-sty.mkvi" name="definealternativestyle">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-sty.mkvi" name="applyalternativestyle">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-sty.mkvi" name="dontconvertfont"/>
+ <cd:command file="font-sty.mkvi" name="redoconvertfont"/>
+ <cd:command file="font-sty.mkvi" name="definestyle">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupstyle"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-sty.mkvi" name="setupstyle">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="method">
+ <cd:constant type="command"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-sty.mkvi" generated="yes" name="style" type="environment" variant="example">
+ <cd:sequence>
+ <cd:variable value="style"/>
+ </cd:sequence>
+ </cd:command>
+ <cd:command file="font-sty.mkvi" generated="yes" name="style" variant="example">
+ <cd:sequence>
+ <cd:variable value="style"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-sty.mkvi" name="style" type="environment" variant="argument">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-sty.mkvi" name="style" type="environment">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupstyle"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-sty.mkvi" name="style" variant="argument">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-sty.mkvi" name="style">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupstyle"/>
+ </cd:assignments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-sty.mkvi" name="definestyleinstance">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="font-sty.mkvi" name="styleinstance">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-sym.mkvi" name="doifelseitalic">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-sym.mkvi" name="doifitalicelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-ini.mkvi" name="getprivateslot">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-ini.mkvi" name="getprivatechar">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-sym.mkvi" name="glyphfontfile">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-sym.mkvi" name="getnamedglyphstyled">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-sym.mkvi" name="getnamedglyphdirect">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-sym.mkvi" name="getglyphstyled">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-sym.mkvi" name="getglyphdirect">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-sym.mkvi" name="resolvedglyphstyled">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-sym.mkvi" name="resolvedglyphdirect">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-sym.mkvi" name="setfont">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-sym.mkvi" name="doifelsefontchar">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-sym.mkvi" name="doiffontcharelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-tra.mkiv" name="showchardata">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-tra.mkiv" name="showfontdata"/>
+ <cd:command file="font-tra.mkiv" name="doifelsefontpresent">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-tra.mkiv" name="doiffontpresentelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-tra.mkiv" name="showotfcomposition">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ <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:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="font-var.mkvi" name="fontclass"/>
+ <cd:command file="font-var.mkvi" name="fontbody"/>
+ <cd:command file="font-var.mkvi" name="fontstyle"/>
+ <cd:command file="font-var.mkvi" name="fontalternative"/>
+ <cd:command file="font-var.mkvi" name="fontsize"/>
+ <cd:command file="font-var.mkvi" name="fontface"/>
+ <cd:command file="type-ini.mkvi" name="typescriptone"/>
+ <cd:command file="type-ini.mkvi" name="typescripttwo"/>
+ <cd:command file="type-ini.mkvi" name="typescriptthree"/>
+ <cd:command file="type-ini.mkvi" name="typescriptcollection" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="type-ini.mkvi" name="usetypescriptfile">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="reset"/>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="type-ini.mkvi" name="usetypescript">
+ <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 file="type-ini.mkvi" name="loadtypescriptfile">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="type-ini.mkvi" name="quittypescriptscanning"/>
+ <cd:command file="type-ini.mkvi" name="definetypescriptsynonym">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="type-ini.mkvi" name="typescript" type="environment">
+ <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:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="size"/>
+ <cd:constant type="name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="type-ini.mkvi" name="definetypescriptprefix">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="type-ini.mkvi" name="typescriptprefix">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="type-ini.mkvi" name="definetypeface">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant default="yes" type="default"/>
+ <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 file="hand-ini.mkiv" name="setupfontexpansion">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="hand-ini.mkiv" name="setupfontprotrusion">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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:command file="font-fea.mkiv" name="blockligatures">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:list"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-form.xml">
+ <cd:command file="scrn-fld.mkvi" name="setupforms">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="method">
+ <cd:constant default="yes" type="XML"/>
+ <cd:constant type="HTML"/>
+ <cd:constant type="PDF"/>
+ </cd:parameter>
+ <cd:parameter name="export">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-formula.xml">
+ <cd:command file="math-for.mkiv" name="defineformula">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupformula"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-for.mkiv" name="setupformula">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="location">
+ <cd:constant type="left"/>
+ <cd:constant default="yes" type="right"/>
+ </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 default="yes" type="no"/>
+ </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="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="numberstyle">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="numbercolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="option">
+ <cd:constant type="packed"/>
+ <cd:constant type="tight"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="frame"/>
+ <cd:inherit name="setupbodyfont"/>
+ </cd:parameter>
+ <cd:parameter name="margin">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="standard"/>
+ <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="alternative">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="indentnext">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="auto"/>
+ </cd:parameter>
+ <cd:parameter name="grid">
+ <cd:inherit name="snaptogrid"/>
+ </cd:parameter>
+ <cd:parameter name="frame">
+ <cd:constant type="number"/>
+ </cd:parameter>
+ <cd:inherit name="setupcounter"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-for.mkiv" name="definesubformula">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupsubformula"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-for.mkiv" name="setupsubformula">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="indentnext">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="auto"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-mat.mkiv" generated="yes" name="formula" type="environment" variant="example">
+ <cd:sequence>
+ <cd:variable value="formula"/>
+ <cd:string value="formula"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="packed"/>
+ <cd:constant type="tight"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="frame"/>
+ <cd:inherit name="setupbodyfont"/>
+ </cd:keywords>
+ </cd:arguments>
+ <cd:instances>
+ <cd:constant value="sp"/>
+ <cd:constant value="sd"/>
+ <cd:constant value="mp"/>
+ <cd:constant value="md"/>
+ </cd:instances>
+ </cd:command>
+ <cd:command file="strc-mat.mkiv" name="formula" type="environment">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="packed"/>
+ <cd:constant type="tight"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="frame"/>
+ <cd:inherit name="setupbodyfont"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-mat.mkiv" name="spformula" type="environment">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="packed"/>
+ <cd:constant type="tight"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="frame"/>
+ <cd:inherit name="setupbodyfont"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-mat.mkiv" name="sdformula" type="environment">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="packed"/>
+ <cd:constant type="tight"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="frame"/>
+ <cd:inherit name="setupbodyfont"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-mat.mkiv" name="mpformula" type="environment">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="packed"/>
+ <cd:constant type="tight"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="frame"/>
+ <cd:inherit name="setupbodyfont"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-mat.mkiv" name="mdformula" type="environment">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="packed"/>
+ <cd:constant type="tight"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="frame"/>
+ <cd:inherit name="setupbodyfont"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-mat.mkiv" name="defineformulaalternative">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:csname"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:csname"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-mat.mkiv" name="formula">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="packed"/>
+ <cd:constant type="tight"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="frame"/>
+ <cd:inherit name="setupbodyfont"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-mat.mkiv" name="displaymath" type="environment"/>
+ <cd:command file="strc-mat.mkiv" name="formulas" type="environment">
+ <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 file="strc-mat.mkiv" name="subformulas" type="environment">
+ <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 file="strc-mat.mkiv" name="namedsubformulas" type="environment">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="+"/>
+ <cd:constant type="-"/>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-mat.mkiv" name="placeformula">
+ <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 file="strc-mat.mkiv" name="placeformula" type="environment">
+ <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:reference"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-mat.mkiv" name="placeformula" type="environment" variant="argument">
+ <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 file="strc-mat.mkiv" name="placenamedformula">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="+"/>
+ <cd:constant type="-"/>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-mat.mkiv" name="placesubformula">
+ <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 file="strc-mat" name="formulanumber">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-mat" name="placecurrentformulanumber"/>
+ </cd:interface>
+ <cd:interface file="i-fraction.xml">
+ <cd:command file="math-frc.mkiv" name="definemathfraction">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathfraction"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-frc.mkiv" name="setupmathfraction">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="math"/>
+ <cd:constant type="tight"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant default="yes" type="inner"/>
+ <cd:constant type="outer"/>
+ <cd:constant type="both"/>
+ </cd:parameter>
+ <cd:parameter name="rule">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant default="yes" type="auto"/>
+ </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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="no"/>
+ <cd:constant default="yes" type="none"/>
+ <cd:constant type="overlay"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-frc.mkiv" generated="yes" name="fraction" variant="example">
+ <cd:sequence>
+ <cd:variable value="fraction"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ <cd:instances>
+ <cd:constant value="xfrac"/>
+ <cd:constant value="xxfrac"/>
+ <cd:constant value="frac"/>
+ <cd:constant value="sfrac"/>
+ <cd:constant value="dfrac"/>
+ <cd:constant value="binom"/>
+ <cd:constant value="dbinom"/>
+ <cd:constant value="tbinom"/>
+ </cd:instances>
+ </cd:command>
+ <cd:command file="math-frc.mkiv" name="frac">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-frc.mkiv" name="xfrac">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-frc.mkiv" name="xxfrac">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-frc.mkiv" name="tfrac">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-frc.mkiv" name="sfrac">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-frc.mkiv" name="dfrac">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-frc.mkiv" name="binom">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-frc.mkiv" name="dbinom">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-frc.mkiv" name="tbinom">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-frc.mkiv" name="splitfrac">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-frc.mkiv" name="splitdfrac">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-frc.mkiv" name="cfrac">
+ <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>
+ <cd:interface file="i-framed.xml">
+ <cd:command file="pack-rul.mkiv" name="defineframed">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-rul.mkiv" name="setupframed">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="corner">
+ <cd:constant default="yes" type="rectangular"/>
+ <cd:constant type="round"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="framecorner">
+ <cd:constant default="yes" type="rectangular"/>
+ <cd:constant type="round"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="backgroundcorner">
+ <cd:constant default="yes" type="rectangular"/>
+ <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 default="yes" type="on"/>
+ <cd:constant type="off"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="bottomframe">
+ <cd:constant default="yes" type="on"/>
+ <cd:constant type="off"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="leftframe">
+ <cd:constant default="yes" type="on"/>
+ <cd:constant type="off"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="rightframe">
+ <cd:constant default="yes" type="on"/>
+ <cd:constant type="off"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="region">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </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 default="yes" type="on"/>
+ <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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </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 default="yes" type="fit"/>
+ <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 default="yes" type="broad"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="strut">
+ <cd:constant default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="none"/>
+ <cd:constant type="local"/>
+ <cd:constant type="global"/>
+ </cd:parameter>
+ <cd:parameter name="autostrut">
+ <cd:constant default="yes" type="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="formula"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant default="yes" type="normal"/>
+ </cd:parameter>
+ <cd:parameter name="autowidth">
+ <cd:constant default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="force"/>
+ </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 default="yes" type="no"/>
+ </cd:parameter>
+ <cd:parameter name="profile">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="empty">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </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:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-rul.mkiv" name="frameddimension">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-rul.mkiv" name="framedparameter">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-rul.mkiv" name="framed">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-rul.mkiv" generated="yes" name="framed" variant="example">
+ <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:instances>
+ <cd:constant value="unframed"/>
+ <cd:constant value="fitfieldframed"/>
+ </cd:instances>
+ </cd:command>
+ <cd:command file="pack-rul.mkiv" name="normalframedwithsettings">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-rul.mkiv" name="framed" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-rul.mkiv" name="fastlocalframed">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-rul.mkiv" name="localframed">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-rul.mkiv" name="directlocalframed">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-rul.mkiv" name="localframedwithsettings">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-rul.mkiv" name="placeframed">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-rul.mkiv" name="inframed">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-rul.mkiv" name="unframed">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-rul.mkiv" name="definemathframed">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-rul.mkiv" name="setupmathframed">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-rul.mkiv" generated="yes" name="mathframed" variant="example">
+ <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:instances>
+ <cd:constant value="mframed"/>
+ <cd:constant value="inmframed"/>
+ <cd:constant value="mcframed"/>
+ </cd:instances>
+ </cd:command>
+ <cd:command file="pack-rul.mkiv" name="mframed">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-rul.mkiv" name="inmframed">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-rul.mkiv" name="mcframed">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-for.mkiv" name="defineformulaframed">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupformulaframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-for.mkiv" name="setupformulaframed">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-rul.mkiv" name="defineframedtext">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupframedtext"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-rul.mkiv" name="setupframedtext">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 default="yes" type="on"/>
+ <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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </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 file="pack-rul.mkiv" generated="yes" name="framedtext" variant="example">
+ <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:instances>
+ <cd:constant value="framedtext"/>
+ </cd:instances>
+ </cd:command>
+ <cd:command file="pack-rul.mkiv" generated="yes" name="framedtext" type="environment" variant="example">
+ <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:instances>
+ <cd:constant value="framedtext"/>
+ </cd:instances>
+ </cd:command>
+ <cd:command file="pack-rul.mkiv" name="framedtext">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupframedtext"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-rul.mkiv" name="framedtext" type="environment">
+ <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 file="pack-rul.mkiv" name="defineframedcontent">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupframedcontent"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-rul.mkiv" name="setupframedcontent">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 default="yes" type="no"/>
+ </cd:parameter>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-rul.mkiv" name="framedcontent" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="off"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-fen.mkiv" name="installleftframerenderer">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-fen.mkiv" name="installrightframerenderer">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-fen.mkiv" name="installtopframerenderer">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-fen.mkiv" name="installbottomframerenderer">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-graphics.xml">
+ <cd:command file="grph-inc.mkiv" name="defineexternalfigure">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupexternalfigure"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="grph-inc.mkvi" name="setupexternalfigure">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 default="yes" type="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 default="yes" type="no"/>
+ </cd:parameter>
+ <cd:parameter name="preview">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </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="arguments">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="repeat">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </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 default="yes" type="local"/>
+ <cd:constant default="yes" type="global"/>
+ <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 default="yes" type="no"/>
+ </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 default="yes" type="off"/>
+ </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 default="yes" type="off"/>
+ </cd:parameter>
+ <cd:parameter name="interaction">
+ <cd:constant type="yes"/>
+ <cd:constant type="all"/>
+ <cd:constant default="yes" type="none"/>
+ <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"/>
+ </cd:parameter>
+ <cd:parameter name="conversion">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="order">
+ <cd:constant type="cd:list"/>
+ </cd:parameter>
+ <cd:parameter name="crossreference">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="grph-inc.mkiv" name="useexternalfigure">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupexternalfigure"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="grph-inc.mkiv" name="externalfigure">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupexternalfigure"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="grph-inc.mkiv" name="getfiguredimensions">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupexternalfigure"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="grph-inc.mkiv" name="figurewidth"/>
+ <cd:command file="grph-inc.mkiv" name="figureheight"/>
+ <cd:command file="grph-inc.mkiv" name="figurenaturalwidth"/>
+ <cd:command file="grph-inc.mkiv" name="figurenaturalheight"/>
+ <cd:command file="grph-inc.mkiv" name="figurefullname"/>
+ <cd:command file="grph-inc.mkiv" name="figurefilename"/>
+ <cd:command file="grph-inc.mkiv" name="figurefilepath"/>
+ <cd:command file="grph-inc.mkiv" name="figurefiletype"/>
+ <cd:command file="grph-inc.mkiv" name="noffigurepages"/>
+ <cd:command file="grph-inc.mkiv" name="definegraphictypesynonym">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="grph-inc.mkiv" name="doifelsefigure">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="grph-inc.mkiv" name="doiffigureelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="grph-inc.mkiv" name="registerexternalfigure">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupexternalfigure"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="grph-inc.mkiv" name="usefigurebase">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="reset"/>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="grph-inc.mkiv" name="externalfigurecollection" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="grph-inc.mkiv" name="externalfigurecollectionminwidth">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="grph-inc.mkiv" name="externalfigurecollectionmaxwidth">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="grph-inc.mkiv" name="externalfigurecollectionminheight">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="grph-inc.mkiv" name="externalfigurecollectionmaxheight">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="grph-inc.mkiv" name="externalfigurecollectionparameter">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="grph-inc.mkiv" name="efcminwidth">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="grph-inc.mkiv" name="efcmaxwidth">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="grph-inc.mkiv" name="efcminheight">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="grph-inc.mkiv" name="efcmaxheight">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="grph-inc.mkiv" name="efcparameter">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="grph-inc.mkiv" name="overlayfigure">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="grph-inc.mkiv" name="bitmapimage">
+ <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 file="grph-inc.mkiv" name="bitmapimage" type="environment">
+ <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 file="grph-fig.mkiv" name="typesetbuffer">
+ <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 file="grph-fig.mkiv" name="definetypesetting">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <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 file="grph-fig.mkiv" name="typesetfile">
+ <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 file="pack-box.mkiv" name="backgroundimage">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-box.mkiv" name="backgroundimagefill">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-grid.xml">
+ <cd:command file="page-grd.mkiv" name="showgrid">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="reset"/>
+ <cd:constant default="yes" type="bottom"/>
+ <cd:constant type="top"/>
+ <cd:constant type="none"/>
+ <cd:constant default="yes" type="all"/>
+ <cd:constant type="lines"/>
+ <cd:constant type="frame"/>
+ <cd:constant type="nonumber"/>
+ <cd:constant default="yes" type="right"/>
+ <cd:constant type="left"/>
+ <cd:constant type="outer"/>
+ <cd:constant default="yes" type="columns"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="definegridsnapping">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 method="range" prefix="minheight" type="cd:number"/>
+ <cd:constant method="range" prefix="maxheight" type="cd:number"/>
+ <cd:constant method="range" prefix="mindepth" type="cd:number"/>
+ <cd:constant method="range" prefix="maxdepth" type="cd:number"/>
+ <cd:constant method="range" prefix="box" type="cd:number"/>
+ <cd:constant method="range" prefix="top" type="cd:number"/>
+ <cd:constant method="range" prefix="bottom" type="cd:number"/>
+ <cd:constant method="range" prefix="offset" type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="snaptogrid">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <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:keywords>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="snaptogrid" variant="list">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="definegridsnapping"/>
+ </cd:keywords>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="placeongrid">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <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:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="placeongrid" variant="list">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="definegridsnapping"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="gridsnapping" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <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:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="gridsnapping" type="environment" variant="list">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="definegridsnapping"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="usegridparameter">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="showgridsnapping"/>
+ <cd:command file="meta-grd.mkiv" name="basegrid">
+ <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 default="yes" type="cm"/>
+ <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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-grd.mkiv" name="grid">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="basegrid"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-help.xml">
+ <cd:command file="scrn-hlp.mkvi" name="definehelp">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuphelp"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-hlp.mkvi" name="setuphelp">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-hlp.mkvi" generated="yes" name="help" variant="example">
+ <cd:sequence>
+ <cd:variable value="help"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ <cd:instances>
+ <cd:constant value="helptext"/>
+ </cd:instances>
+ </cd:command>
+ <cd:command file="scrn-hlp.mkvi" generated="yes" name="help" type="environment" variant="example">
+ <cd:sequence>
+ <cd:variable value="help"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ <cd:instances>
+ <cd:constant value="helptext"/>
+ </cd:instances>
+ </cd:command>
+ <cd:command file="scrn-hlp.mkvi" name="doifelsehelp">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-hlp.mkvi" name="doifhelpelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-hlp.mkvi" name="placehelp"/>
+ <cd:command file="scrn-hlp.mkvi" name="showhelp">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-hlp.mkvi" name="helptext">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-hlp.mkvi" name="helptext" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-highlight.xml">
+ <cd:command file="core-sys.mkiv" name="definehighlight">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuphighlight"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-sys.mkiv" name="setuphighlight">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="command">
+ <cd:constant default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-sys.mkiv" generated="yes" name="highlight" variant="example">
+ <cd:sequence>
+ <cd:variable value="highlight"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-sys.mkiv" name="highlight">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-sys.mkiv" name="highlight" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-sys.mkiv" name="directhighlight">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-hspace.xml">
+ <cd:command file="spac-hor.mkiv" name="definehspace">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-hor.mkiv" name="hspace">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="small"/>
+ <cd:constant type="medium"/>
+ <cd:constant type="big"/>
+ <cd:constant type="normal"/>
+ <cd:constant default="yes" type="default"/>
+ <cd:constant type="none"/>
+ <cd:constant type=".5"/>
+ <cd:constant type="1"/>
+ <cd:constant type="2"/>
+ <cd:constant type="3"/>
+ <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 file="spac-hor.mkiv" name="hairspace"/>
+ <cd:command file="spac-hor.mkiv" name="thinspace"/>
+ <cd:command file="spac-hor.mkiv" name="medspace"/>
+ <cd:command file="spac-hor.mkiv" name="thickspace"/>
+ <cd:command file="spac-hor.mkiv" name="autoinsertnextspace"/>
+ <cd:command file="spac-ver.mkiv" name="hglue">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-hor.mkiv" name="frenchspacing"/>
+ <cd:command file="spac-hor.mkiv" name="newfrenchspacing"/>
+ <cd:command file="spac-hor.mkiv" name="nonfrenchspacing"/>
+ <cd:command file="spac-hor.mkiv" name="setupspacing">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="fixed"/>
+ <cd:constant default="yes" type="packed"/>
+ <cd:constant type="broad"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-hor.mkiv" name="space"/>
+ <cd:command file="spac-hor.mkiv" name="removelastspace"/>
+ <cd:command file="spac-hor.mkiv" name="nospace"/>
+ <cd:command file="spac-hor.mkiv" name="fixedspace"/>
+ <cd:command file="spac-hor.mkiv" name="fixedspaces"/>
+ <cd:command file="spac-hor.mkiv" name="keepunwantedspaces"/>
+ <cd:command file="spac-hor.mkiv" name="removeunwantedspaces"/>
+ <cd:command file="spac-hor.mkiv" name="thinspace"/>
+ <cd:command file="spac-hor.mkiv" name="negthinspace"/>
+ <cd:command file="spac-hor.mkiv" name="enspace"/>
+ <cd:command file="spac-hor.mkiv" name="enskip"/>
+ <cd:command file="spac-hor.mkiv" name="quad"/>
+ <cd:command file="spac-hor.mkiv" name="qquad"/>
+ <cd:command file="spac-hor.mkiv" name="emspace"/>
+ <cd:command file="spac-hor.mkiv" name="dotfskip">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-hor.mkiv" name="leftskipadaption"/>
+ <cd:command file="spac-hor.mkiv" name="rightskipadaption"/>
+ <cd:command file="spac-hor.mkiv" name="dosetleftskipadaption">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="standard"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-hor.mkiv" name="dosetrightskipadaption">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="standard"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-hor.mkiv" name="doadaptleftskip">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="standard"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-hor.mkiv" name="doadaptrightskip">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="standard"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-hor.mkiv" name="activatespacehandler">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="on"/>
+ <cd:constant default="yes" type="off"/>
+ <cd:constant type="yes"/>
+ <cd:constant type="fixed"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-hor.mkiv" name="quads">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-hyphenation.xml">
+ <cd:command file="lang-hyp.mkiv" name="setuphyphenation">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="method">
+ <cd:constant type="original"/>
+ <cd:constant type="tex"/>
+ <cd:constant default="yes" type="default"/>
+ <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 file="lang-hyp.mkiv" name="hyphenation" type="environment">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="original"/>
+ <cd:constant type="tex"/>
+ <cd:constant default="yes" type="default"/>
+ <cd:constant type="hyphenate"/>
+ <cd:constant type="expanded"/>
+ <cd:constant type="traditional"/>
+ <cd:constant type="none"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="lang-hyp.mkiv" name="definehypenationfeatures">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 default="yes" type="hyphenate"/>
+ <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 file="lang-hyp.mkiv" name="sethyphenationfeatures">
+ <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 file="lang-hyp.mkiv" name="resethyphenationfeatures"/>
+ <cd:command file="lang-hyp.mkiv" name="registerhyphenationpattern">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="lang-hyp.mkiv" name="unregisterhyphenationpattern">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="lang-hyp.mkiv" name="showhyphenationtrace">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="lang-hyp.mkiv" name="registerhyphenationexception">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-del.mkiv" name="setuphyphenmark">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="sign">
+ <cd:constant type="normal"/>
+ <cd:constant default="yes" type="wide"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-brk.mkiv" name="definebreakpoints">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-brk.mkiv" name="definebreakpoint">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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="range">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </cd:parameter>
+ <cd:parameter name="language">
+ <cd:constant type="cd:language"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-brk.mkiv" name="setbreakpoints">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="reset"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-brk.mkiv" name="resetbreakpoints"/>
+ <cd:command file="supp-box.mkiv" name="showhyphens">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="hyphenatedword">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="hyphenatedpar">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="hyphenatedfile">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="hyphenatedcoloredword">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="hyphenatedhbox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="lang-url.mkiv" name="sethyphenatedurlbefore">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="lang-url.mkiv" name="sethyphenatedurlafter">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="lang-url.mkiv" name="sethyphenatedurlnormal">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="lang-url.mkiv" name="hyphenatedurl">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="lang-url.mkiv" name="hyphenatedfilename">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-imposition.xml">
+ <cd:command file="page-imp.mkiv" name="installshipoutmethod">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-imp.mkiv" name="invokepageheandler">
+ <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 file="page-imp.mkiv" name="setuparranging">
+ <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 file="page-imp.mkiv" name="installpagearrangement">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command begin="push" end="pop" file="page-imp.mkiv" name="arrangedpages" type="environment"/>
+ </cd:interface>
+ <cd:interface file="i-indent.xml">
+ <cd:command file="spac-hor.mkiv" name="defineindenting">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes">
+ <cd:constant method="none" prefix="cd:sign" type="small"/>
+ <cd:constant method="none" prefix="cd:sign" type="medium"/>
+ <cd:constant method="none" prefix="cd:sign" type="big"/>
+ <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 file="spac-hor.mkiv" name="setupindenting">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant method="none" prefix="cd:sign" type="small"/>
+ <cd:constant method="none" prefix="cd:sign" type="medium"/>
+ <cd:constant method="none" prefix="cd:sign" type="big"/>
+ <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 file="spac-hor.mkiv" name="synchronizeindenting"/>
+ <cd:command file="spac-hor.mkiv" name="useindentingparameter">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command coreprimitive="yes" file="spac-hor.mkiv" name="indentation"/>
+ <cd:command coreprimitive="yes" file="spac-hor.mkiv" name="noindentation"/>
+ <cd:command coreprimitive="yes" file="spac-hor.mkiv" name="doindentation"/>
+ <cd:command file="spac-hor.mkiv" name="checknextindentation">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="auto"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-hor.mkiv" name="useindentnextparameter">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-hor.mkiv" name="dorechecknextindentation"/>
+ <cd:command begin="push" end="pop" file="spac-hor.mkiv" name="indentation" type="environment"/>
+ </cd:interface>
+ <cd:interface file="i-indentedtext.xml">
+ <cd:command file="strc-ind.mkiv" name="defineindentedtext">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupindentedtext"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ind.mkiv" name="setupindentedtext">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </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="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 default="yes" type="fit"/>
+ <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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="headstyle">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="headcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ind.mkiv" generated="yes" name="indentedtext" type="environment" variant="example">
+ <cd:sequence>
+ <cd:variable value="indentedtext"/>
+ </cd:sequence>
+ </cd:command>
+ <cd:command file="strc-ind.mkiv" name="indentedtext" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-initial.xml">
+ <cd:command file="typo-drp.mkiv" name="defineinitial">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupinitial"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-drp.mkiv" name="setupinitial">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 default="yes" type="line"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </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 default="yes" type="text"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:constant type="first"/>
+ <cd:constant type="last"/>
+ <cd:constant type="auto"/>
+ <cd:constant default="yes" type="none"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-drp.mkiv" name="placeinitial">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-drp.mkiv" name="setinitial">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupinitial"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-injector.xml">
+ <cd:command file="typo-inj.mkiv" name="resetinjector">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-inj.mkiv" name="markinjector">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-inj.mkiv" name="checkinjector">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-inj.mkiv" name="checkpreviousinjector">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-inj.mkiv" name="checknextinjector">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-inj.mkiv" name="setinjector">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-inj.mkiv" name="showinjector">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-insertion.xml">
+ <cd:command file="page-ins.mkiv" name="defineinsertion">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupinsertion"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-ins.mkiv" name="setupinsertion">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="location">
+ <cd:constant default="yes" type="page"/>
+ <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 file="page-ins.mkiv" name="doifelseinsertion">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-ins.mkiv" name="doifinsertionelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-interaction.xml">
+ <cd:command file="scrn-ini.mkvi" name="defineinteraction">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupinteraction"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-ini.mkvi" name="setupinteraction">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant type="start"/>
+ <cd:constant default="yes" type="stop"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </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 default="yes" type="fit"/>
+ <cd:constant type="tight"/>
+ </cd:parameter>
+ <cd:parameter name="menu">
+ <cd:constant type="on"/>
+ <cd:constant default="yes" type="off"/>
+ </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 default="yes" type="no"/>
+ <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 file="scrn-ini.mkvi" name="setupinteraction" variant="name">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-ini.mkvi" name="interaction" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="hidden"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-ini.mkvi" name="setinteraction">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="hidden"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-ini.mkvi" name="doifelselocation">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-ini.mkvi" name="doiflocationelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-interactionbar.xml">
+ <cd:command file="scrn-bar.mkvi" name="defineinteractionbar">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupinteractionbar"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-bar.mkvi" name="setupinteractionbar">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="alternative">
+ <cd:constant default="yes" type="a"/>
+ <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 default="yes" type="start"/>
+ <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 default="yes" type="medium"/>
+ <cd:constant type="big"/>
+ </cd:parameter>
+ <cd:parameter name="backgroundcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </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 default="yes" type="no"/>
+ </cd:parameter>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-bar.mkvi" name="interactionbar">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupinteractionbar"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-bar.mkvi" name="interactionbuttons">
+ <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>
+ <cd:interface file="i-interactionmenu.xml">
+ <cd:command file="scrn-but.mkvi" name="defineinteractionmenu">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupinteractionmenu"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-but.mkvi" name="setupinteractionmenu">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 default="yes" type="start"/>
+ <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 default="yes" type="no"/>
+ </cd:parameter>
+ <cd:parameter name="middle">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="samepage">
+ <cd:constant default="yes" type="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 file="scrn-but.mkvi" name="interactionmenu" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-but.mkvi" name="resetinteractionmenu">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-but.mkvi" name="includemenu">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-but.mkvi" name="interactionmenu">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupinteractionmenu"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-but.mkvi" name="menubutton" variant="interactionmenu">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupinteractionmenu"/>
+ </cd:assignments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-but.mkvi" name="menubutton" variant="button">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupbutton"/>
+ </cd:assignments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-but.mkvi" name="registermenubuttons">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-interactionscreen.xml">
+ <cd:command file="scrn-pag.mkvi" name="setupinteractionscreen">
+ <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 list="yes" name="option">
+ <cd:constant type="fit"/>
+ <cd:constant type="max"/>
+ <cd:constant type="singlesided"/>
+ <cd:constant type="doublesided"/>
+ <cd:constant type="bookmark"/>
+ <cd:constant default="yes" type="auto"/>
+ <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:constant type="paper"/>
+ </cd:parameter>
+ <cd:parameter name="copies">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="delay">
+ <cd:constant default="yes" type="none"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-pag.mkvi" name="screen">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="page"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-interface.xml">
+ <cd:command file="mult-ini.mkiv" name="defaultinterface"/>
+ <cd:command file="mult-ini.mkiv" name="currentinterface"/>
+ <cd:command file="mult-ini.mkiv" name="currentresponses"/>
+ <cd:command file="mult-ini.mkiv" name="interface" type="environment">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="all"/>
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-ini.mkiv" name="defineinterfaceconstant">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-ini.mkiv" name="defineinterfacevariable">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-ini.mkiv" name="defineinterfaceelement">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-ini.mkiv" name="definefileconstant">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-ini.mkiv" name="definesystemconstant">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-ini.mkiv" name="definemessageconstant">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-ini.mkiv" name="definesystemvariable">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-ini.mkiv" name="setinterfacemessage">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="title"/>
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-ini.mkiv" name="setmessagetext">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-ini.mkiv" name="currentmessagetext"/>
+ <cd:command file="mult-ini.mkiv" name="getmessage">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-ini.mkiv" name="doifelsemessage">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-ini.mkiv" name="doifmessageelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-ini.mkiv" name="showmessage">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-ini.mkiv" name="writestatus">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-ini.mkiv" name="message">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-ini.mkiv" name="inlinemessage">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-ini.mkiv" name="displaymessage">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-ini.mkiv" name="showwarning">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-ini.mkiv" name="setinterfaceconstant">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-ini.mkiv" name="setinterfacevariable">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-ini.mkiv" name="setinterfaceelements">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="mult-ini.mkiv" name="setinterfacecommand">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-interlinespace.xml">
+ <cd:command file="spac-ver.mkiv" name="defineinterlinespace">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupinterlinespace"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="setupinterlinespace">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="spac-ver.mkiv" name="setupinterlinespace" variant="argument">
+ <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 file="spac-ver.mkiv" name="setupinterlinespace" variant="name">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="setuplocalinterlinespace">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupinterlinespace"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="setuplocalinterlinespace" variant="argument">
+ <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 file="spac-ver.mkiv" name="setuplocalinterlinespace" variant="name">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="switchtointerlinespace">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupinterlinespace"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="switchtointerlinespace" variant="argument">
+ <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 file="spac-ver.mkiv" name="switchtointerlinespace" variant="name">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="dosetupcheckedinterlinespace">
+ <cd:arguments>
+ <cd:assignments delimiters="braces" list="yes">
+ <cd:inherit name="setupinterlinespace"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="dosetupcheckedinterlinespace" variant="argument">
+ <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 file="spac-ver.mkiv" name="dosetupcheckedinterlinespace" variant="name">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="useinterlinespaceparameter">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-interlinespace.xml">
+ <cd:command file="spac-ver.mkiv" name="defineinterlinespace">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupinterlinespace"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="setupinterlinespace">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="spac-ver.mkiv" name="setupinterlinespace" variant="argument">
+ <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 file="spac-ver.mkiv" name="setupinterlinespace" variant="name">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="setuplocalinterlinespace">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupinterlinespace"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="setuplocalinterlinespace" variant="argument">
+ <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 file="spac-ver.mkiv" name="setuplocalinterlinespace" variant="name">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="switchtointerlinespace">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupinterlinespace"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="switchtointerlinespace" variant="argument">
+ <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 file="spac-ver.mkiv" name="switchtointerlinespace" variant="name">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="dosetupcheckedinterlinespace">
+ <cd:arguments>
+ <cd:assignments delimiters="braces" list="yes">
+ <cd:inherit name="setupinterlinespace"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="dosetupcheckedinterlinespace" variant="argument">
+ <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 file="spac-ver.mkiv" name="dosetupcheckedinterlinespace" variant="name">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="useinterlinespaceparameter">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-italiccorrection.xml">
+ <cd:command file="typo-itc.mkvi" name="setitaliccorrection">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="reset"/>
+ <cd:constant type="1"/>
+ <cd:constant type="2"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-itc.mkvi" name="resetitaliccorrection"/>
+ <cd:command file="typo-itc.mkvi" name="italiccorrection"/>
+ <cd:command file="typo-itc.mkvi" name="setupitaliccorrection">
+ <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>
+ <cd:interface file="i-itemgroup.xml">
+ <cd:command file="strc-itm.mkvi" name="defineitemgroup">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupitemgroup"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-itm.mkvi" name="setupitemgroup">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 method="factor" prefix="cd:number" type="broad"/>
+ <cd:constant method="factor" prefix="cd:number" type="serried"/>
+ <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:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="standard"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="leftmargin">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="standard"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rightmargin">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="standard"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="indenting">
+ <cd:inherit 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:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="auto"/>
+ </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: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:parameter>
+ <cd:parameter name="alignsymbol">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </cd:parameter>
+ <cd:parameter name="textdistance">
+ <cd:constant type="small"/>
+ <cd:constant type="medium"/>
+ <cd:constant type="big"/>
+ <cd:constant type="none"/>
+ <cd:constant default="yes" type="space"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="placestopper">
+ <cd:constant default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="headstyle">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="headcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="marstyle">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="marcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="symstyle">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </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 file="strc-itm.mkvi" name="setupitemgroup" variant="assignment">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ <cd:constant method="range" prefix="cd:name" type="cd:number"/>
+ </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 method="factor" prefix="cd:number" type="broad"/>
+ <cd:constant method="factor" prefix="cd:number" type="serried"/>
+ <cd:constant type="horizontal"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="margin">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="standard"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="leftmargin">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="standard"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rightmargin">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="standard"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="indenting">
+ <cd:inherit 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:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="auto"/>
+ </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: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:parameter>
+ <cd:parameter name="alignsymbol">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </cd:parameter>
+ <cd:parameter name="textdistance">
+ <cd:constant type="small"/>
+ <cd:constant type="medium"/>
+ <cd:constant type="big"/>
+ <cd:constant type="none"/>
+ <cd:constant default="yes" type="space"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="placestopper">
+ <cd:constant default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="headstyle">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="headcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="marstyle">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="marcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="symstyle">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </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 file="strc-itm.mkvi" name="setupitemgroups">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ <cd:constant method="range" prefix="cd:name" type="cd:number"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupitemgroup"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-itm.mkvi" generated="yes" name="setupitemgroup" variant="instance">
+ <cd:sequence>
+ <cd:string value="setup"/>
+ <cd:instance value="itemgroup"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="each"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <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:instances>
+ <cd:constant value="itemize"/>
+ </cd:instances>
+ </cd:command>
+ <cd:command file="strc-itm.mkvi" generated="yes" name="itemgroup" type="environment" variant="instance">
+ <cd:sequence>
+ <cd:instance 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:instances>
+ <cd:constant value="itemize"/>
+ </cd:instances>
+ </cd:command>
+ <cd:command file="strc-itm.mkvi" name="itemgroup" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="strc-itm.mkvi" name="item" scope="itemgroup">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-itm.mkvi" name="noitem" scope="itemgroup"/>
+ <cd:command file="strc-itm.mkvi" name="itemtag" scope="itemgroup">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-itm.mkvi" name="item" scope="itemgroup" type="environment">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-itm.mkvi" name="head" scope="itemgroup" type="environment">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-itm.mkvi" name="specialitem" scope="itemgroup" type="environment" variant="item">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant default="yes" type="item"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-itm.mkvi" name="specialitem" scope="itemgroup" type="environment" variant="symbol">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="sym"/>
+ <cd:constant type="ran"/>
+ <cd:constant type="mar"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-itm.mkvi" name="specialitem" scope="itemgroup" type="environment" variant="none">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="sub"/>
+ <cd:constant type="its"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-items.xml">
+ <cd:command file="typo-itm.mkiv" name="defineitems">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupitems"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-itm.mkiv" name="setupitems">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="alternative">
+ <cd:constant default="yes" type="left"/>
+ <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 default="yes" type="middle"/>
+ <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 default="yes" type="flushleft"/>
+ <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 file="typo-itm.mkiv" name="items">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupitems"/>
+ </cd:assignments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-javascript.xml">
+ <cd:command file="java-ini.mkiv" name="JScode" type="environment">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="none">
+ <cd:constant type="uses"/>
+ </cd:keywords>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="java-ini.mkiv" name="JSpreamble" type="environment">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="java-ini.mkiv" name="setJSpreamble">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="java-ini.mkiv" name="addtoJSpreamble">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="java-ini.mkiv" name="useJSscripts">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-kerning.xml">
+ <cd:command file="typo-krn.mkiv" name="definecharacterkerning">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupcharacterkerning"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-krn.mkiv" name="setupcharacterkerning">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-krn.mkiv" name="setcharacterkerning">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="reset"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-krn.mkiv" name="resetcharacterkerning"/>
+ <cd:command file="typo-krn.mkiv" generated="yes" name="characterkerning" variant="example">
+ <cd:sequence>
+ <cd:variable value="characterkerning"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-krn.mkiv" name="kerncharacters">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-krn.mkiv" name="letterspacing">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-krn.mkiv" name="stretched">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupstretched"/>
+ </cd:assignments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-krn.mkiv" name="setupstretched">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupcharacterkerning"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-label.xml">
+ <cd:command file="strc-lab.mkiv" name="definelabel">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplabel"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-lab.mkiv" name="setuplabel">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="title">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </cd:parameter>
+ <cd:parameter name="number">
+ <cd:constant default="yes" type="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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </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>
+ <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 default="yes" type="intext"/>
+ <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 default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="indentnext">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="auto"/>
+ </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 default="yes" type="no"/>
+ <cd:constant type="xml"/>
+ </cd:parameter>
+ <cd:parameter name="referenceprefix">
+ <cd:constant type="+"/>
+ <cd:constant type="-"/>
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="sample">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="margin">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="standard"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="headstyle">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="headcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:inherit name="setupcounter"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-lab.mkiv" generated="yes" name="label" variant="example">
+ <cd:sequence>
+ <cd:variable value="label"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-lab.mkiv" generated="yes" name="currentlabel" variant="example">
+ <cd:sequence>
+ <cd:string value="current"/>
+ <cd:variable value="label"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-labeltext.xml">
+ <cd:command file="lang-lab.mkiv" name="definelabelclass">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="lang-lab.mkiv" generated="yes" name="setuplabeltext" variant="instance">
+ <cd:sequence>
+ <cd:string value="setup"/>
+ <cd:instance value="label"/>
+ <cd:string value="text"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="lang-lab.mkiv" generated="yes" name="presetlabeltext" variant="instance">
+ <cd:sequence>
+ <cd:string value="preset"/>
+ <cd:instance value="label"/>
+ <cd:string value="text"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="lang-lab.mkiv" generated="yes" name="copylabeltext" variant="instance">
+ <cd:sequence>
+ <cd:string value="copy"/>
+ <cd:instance value="label"/>
+ <cd:string value="text"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:key"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="lang-lab.mkiv" generated="yes" name="labeltext" type="environment" variant="instance">
+ <cd:sequence>
+ <cd:instance value="label"/>
+ <cd:string value="text"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="lang-lab.mkiv" generated="yes" name="labellanguage" variant="instance">
+ <cd:sequence>
+ <cd:instance value="label"/>
+ <cd:string value="language"/>
+ </cd:sequence>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="lang-lab.mkiv" generated="yes" name="labeltext" variant="instance">
+ <cd:sequence>
+ <cd:instance value="label"/>
+ <cd:string value="text"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="lang-lab.mkiv" generated="yes" name="labeltexts" variant="instance">
+ <cd:sequence>
+ <cd:instance value="label"/>
+ <cd:string value="texts"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="lang-lab.mkiv" generated="yes" name="leftlabeltext" variant="instance">
+ <cd:sequence>
+ <cd:string value="left"/>
+ <cd:instance value="label"/>
+ <cd:string value="text"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="lang-lab.mkiv" generated="yes" name="rightlabeltext" variant="instance">
+ <cd:sequence>
+ <cd:string value="right"/>
+ <cd:instance value="label"/>
+ <cd:string value="text"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-language.xml">
+ <cd:command file="lang-ini.mkiv" name="installlanguage">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuplanguage"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="lang-ini.mkiv" name="installlanguage" variant="name">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="lang-ini.mkiv" name="setuplanguage">
+ <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 default="yes" type="start"/>
+ <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 default="yes" type="broad"/>
+ <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:parameter name="factor">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="lang-ini.mkiv" name="doifelselanguage">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="lang-ini.mkiv" name="doiflanguageelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="lang-ini.mkiv" name="doifelsepatterns">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="lang-ini.mkiv" name="doifpatternselse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="lang-ini.mkiv" generated="yes" name="language" variant="example">
+ <cd:sequence>
+ <cd:variable value="language"/>
+ </cd:sequence>
+ </cd:command>
+ <cd:command file="lang-ini.mkiv" name="language">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="lang-ini.mkiv" name="mainlanguage">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="lang-ini.mkiv" name="uselanguageparameter">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="lang-ini.mkiv" name="exceptions" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="lang-ini.mkiv" name="currentlanguage"/>
+ <cd:command file="lang-ini.mkiv" name="currentmainlanguage"/>
+ <cd:command file="lang-lab.mkiv" name="commalistsentence">
+ <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>
+ <cd:interface file="i-layer.xml">
+ <cd:command file="pack-box.mkiv" name="setuplayeredtext">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </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 file="pack-box.mkiv" name="layeredtext">
+ <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:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-box.mkiv" name="placelayeredtext">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-box.mkiv" name="setlayerframed">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="pack-box.mkiv" name="setlayerframed" variant="combination">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplayer"/>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-box.mkiv" name="setlayertext">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-lyr.mkiv" name="definelayer">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplayer"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-lyr.mkiv" name="setuplayer">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant default="yes" type="start"/>
+ <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 default="yes" type="no"/>
+ <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 default="yes" type="left"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="right"/>
+ <cd:constant default="yes" type="top"/>
+ <cd:constant type="bottom"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:constant type="grid"/>
+ <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: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 default="yes" type="normal"/>
+ <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 default="yes" type="overlay"/>
+ </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 file="pack-lyr.mkiv" name="resetlayer">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-lyr.mkiv" name="flushlayer">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-lyr.mkiv" name="tightlayer">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-lyr.mkiv" name="placelayer">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-lyr.mkiv" name="composedlayer">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-lyr.mkiv" name="setlayer">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="pack-lyr.mkiv" name="definelayerpreset">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuplayer"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-lyr.mkiv" name="definelayerpreset" variant="name">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-lyr.mkiv" name="doifelselayerdata">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-lyr.mkiv" name="doiflayerdataelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-lyr.mkiv" name="layerwidth"/>
+ <cd:command file="pack-lyr.mkiv" name="layerheight"/>
+ <cd:command file="pack-lyr.mkiv" name="setMPlayer">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplayer"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-lyr.mkiv" name="getMPlayer">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-layout.xml">
+ <cd:command file="page-lay.mkiv" name="definelayout">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplayout"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-lay.mkiv" name="setuplayout">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant default="yes" type="start"/>
+ <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 default="name" type="normal"/>
+ <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 default="yes" type="off"/>
+ <cd:constant type="page"/>
+ <cd:constant type="empty"/>
+ <cd:constant type="color"/>
+ <cd:constant type="one"/>
+ <cd:constant type="two"/>
+ <cd:constant type="four"/>
+ </cd:parameter>
+ <cd:parameter name="grid">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ <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 default="yes" type="normal"/>
+ <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 file="page-lay.mkiv" name="setuplayout" variant="name">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="reset"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-lay.mkiv" name="doifelselayoutdefined">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-lay.mkiv" name="doiflayoutdefinedelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-lay.mkiv" name="adaptlayout">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <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 file="page-lay.mkiv" name="layout" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-lay.mkiv" name="doifelseoddpage">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-lay.mkiv" name="doifoddpageelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-lay.mkiv" name="doifbothsidesoverruled">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-lay.mkiv" name="doifbothsides">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-lay.mkiv" name="rightorleftpageaction">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-run.mkiv" name="showprint">
+ <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 file="page-run.mkiv" name="showframe">
+ <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 file="page-run.mkiv" name="showsetups">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant default="yes" type="pt"/>
+ <cd:constant type="bp"/>
+ <cd:constant default="yes" type="cm"/>
+ <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 file="page-run.mkiv" name="showlayout">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant default="yes" type="pt"/>
+ <cd:constant type="bp"/>
+ <cd:constant default="yes" type="cm"/>
+ <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 file="page-run.mkiv" name="showmargins"/>
+ <cd:command file="page-spr.mkiv" name="spread" type="environment"/>
+ </cd:interface>
+ <cd:interface file="i-linenumber.xml">
+ <cd:command file="page-lin.mkvi" name="definelinenumbering">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplinenumbering"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-lin.mkvi" name="setuplinenumbering">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 default="yes" type="first"/>
+ <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 default="yes" type="no"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:constant type="text"/>
+ <cd:constant type="begin"/>
+ <cd:constant type="end"/>
+ <cd:constant default="yes" type="default"/>
+ <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 default="yes" type="auto"/>
+ </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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-lin.mkvi" name="linenumbering" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="continue">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </cd:parameter>
+ <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 default="yes" type="first"/>
+ <cd:constant type="next"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-lin.mkvi" name="linenumbering" type="environment" variant="argument">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="continue"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-lin.mkvi" name="someline">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-lin.mkvi" name="startline">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-lin.mkvi" name="stopline">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-lin.mkvi" name="doifelsesamelinereference">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-lin.mkvi" name="doifsamelinereferenceelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-lin.mkvi" name="inline">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-lin.mkvi" name="inlinerange">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-lines.xml">
+ <cd:command file="supp-box.mkiv" name="noflines"/>
+ <cd:command file="supp-box.mkiv" name="getnoflines">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="getroundednoflines">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="getrawnoflines">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="determinenoflines">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-lin.mkiv" name="definelines">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplines"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-lin.mkiv" name="setuplines">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 default="yes" type="default"/>
+ </cd:parameter>
+ <cd:parameter name="command">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </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 file="spac-lin.mkiv" generated="yes" name="lines" type="environment" variant="instance">
+ <cd:sequence>
+ <cd:instance value="lines"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplines"/>
+ </cd:assignments>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="spac-lin.mkiv" name="emptylines">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-linetable.xml">
+ <cd:command file="tabl-ltb.mkiv" name="setuplinetable">
+ <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">
+ <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 default="yes" type="no"/>
+ <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 default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <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 default="yes" type="fit"/>
+ <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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-ltb.mkiv" name="linetablecell" type="environment">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplinetable"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-ltb.mkiv" name="linetable" type="environment"/>
+ <cd:command file="tabl-ltb.mkiv" name="linetablehead" type="environment"/>
+ <cd:command file="tabl-ltb.mkiv" name="linetablebody" type="environment"/>
+ <cd:command file="tabl-ltb.mkiv" name="processlinetablebuffer">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:buffer"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-ltb.mkiv" name="processlinetablefile">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-linewidth.xml">
+ <cd:command file="pack-rul.mkiv" name="setuplinewidth">
+ <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 file="pack-rul.mkiv" name="linewidth"/>
+ </cd:interface>
+ <cd:interface file="i-list.xml">
+ <cd:command file="strc-lst.mkvi" name="definelist">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:list"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-lst.mkvi" name="setuplist">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:list"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant default="yes" type="start"/>
+ <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 default="yes" type="local"/>
+ <cd:constant type="intro"/>
+ <cd:constant type="reference"/>
+ <cd:constant method="range" prefix="cd:sectionblock" type="reference"/>
+ <cd:constant type="all"/>
+ <cd:constant method="range" prefix="cd:sectionblock" type="all"/>
+ <cd:constant type="text"/>
+ <cd:constant method="range" prefix="cd:sectionblock" type="text"/>
+ <cd:constant type="current"/>
+ <cd:constant method="range" prefix="cd:sectionblock" type="current"/>
+ <cd:constant type="here"/>
+ <cd:constant type="previous"/>
+ <cd:constant method="range" prefix="cd:sectionblock" type="previous"/>
+ <cd:constant type="component"/>
+ <cd:constant type="cd:section"/>
+ <cd:constant method="range" prefix="cd:sectionblock" type="cd:section"/>
+ </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 default="yes" type="broad"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="depth">
+ <cd:constant type="fit"/>
+ <cd:constant default="yes" type="broad"/>
+ <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 default="yes" type="default"/>
+ </cd:parameter>
+ <cd:parameter name="label">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ <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:threearguments"/>
+ </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 default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="always"/>
+ </cd:parameter>
+ <cd:parameter name="headnumber">
+ <cd:constant default="yes" type="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 default="yes" type="no"/>
+ </cd:parameter>
+ <cd:parameter name="numberalign">
+ <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:parameter>
+ <cd:parameter name="align">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="hang">
+ <cd:constant default="yes" type="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 default="yes" type="all"/>
+ <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:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="numberstyle">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="numbercolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="textstyle">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="textcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="pagestyle">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </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 default="yes" type="b"/>
+ <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:constant type="cd:number"/>
+ <cd:constant method="range" prefix="cd:number" type="cd:number"/>
+ <cd:constant method="range" prefix="cd:number" type="*"/>
+ <cd:constant method="range" prefix="cd:number" type="all"/>
+ <cd:constant type="cd:section"/>
+ <cd:constant method="range" prefix="cd:section" type="cd:section"/>
+ <cd:constant method="range" prefix="cd:section" type="*"/>
+ <cd:constant method="range" prefix="cd:section" type="all"/>
+ </cd:parameter>
+ <cd:parameter name="pageprefixconnector">
+ <cd:constant type="cd:command"/>
+ <cd:constant method="apply" prefix="cd:processor" type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="pageconversionset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="pagestarter">
+ <cd:constant type="cd:command"/>
+ <cd:constant method="apply" prefix="cd:processor" type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="pagestopper">
+ <cd:constant type="cd:command"/>
+ <cd:constant method="apply" prefix="cd:processor" type="cd:command"/>
+ </cd:parameter>
+ <cd:inherit name="setupcounter"/>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-lst.mkvi" name="doifelselist">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:list"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-lst.mkvi" name="doiflistelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:list"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-lst.mkvi" name="writebetweenlist">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:list"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-lst.mkvi" name="writedatatolist">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:list"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ <cd:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-lst.mkvi" name="writetolist">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:list"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-lst.mkvi" name="placelist">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:list"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-lst.mkvi" name="placerawlist">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:list"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-lst.mkvi" name="completelist">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:list"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-lst.mkvi" name="definecombinedlist">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:list"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-lst.mkvi" name="setupcombinedlist">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:list"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-lst.mkvi" name="placecombinedlist">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:list"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-lst.mkvi" generated="yes" name="setupcombinedlist" variant="instance">
+ <cd:sequence>
+ <cd:string value="setup"/>
+ <cd:instance value="combinedlist"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="strc-lst.mkvi" generated="yes" name="placecombinedlist" variant="instance">
+ <cd:sequence>
+ <cd:string value="place"/>
+ <cd:instance value="combinedlist"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="strc-lst.mkvi" generated="yes" name="completecombinedlist" variant="instance">
+ <cd:sequence>
+ <cd:string value="complete"/>
+ <cd:instance value="combinedlist"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="strc-lst.mkvi" name="structurelistuservariable">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-lst.mkvi" name="rawstructurelistuservariable">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-lst.mkvi" name="doifelsestructurelisthaspage">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-lst.mkvi" name="doifstructurelisthaspageelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-lst.mkvi" name="doifelsestructurelisthasnumber">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-lst.mkvi" name="doifstructurelisthasnumberelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-lst.mkvi" name="definelistextra">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplistextra"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-lst.mkvi" name="setuplistextra">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </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:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-lst.mkvi" name="definelistalternative">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplistalternative"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-lst.mkvi" name="setuplistalternative">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </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="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 file="strc-lst.mkvi" name="determinelistcharacteristics">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:list"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-lst.mkvi" name="currentlistentrynumber"/>
+ <cd:command file="strc-lst.mkvi" name="currentlistentrytitle"/>
+ <cd:command file="strc-lst.mkvi" name="currentlistentrytitlerendered"/>
+ <cd:command file="strc-lst.mkvi" name="currentlistentrypagenumber"/>
+ <cd:command file="strc-lst.mkvi" name="currentlistsymbol"/>
+ <cd:command file="strc-lst.mkvi" name="listlength"/>
+ <cd:command file="strc-lst.mkvi" name="currentlistentrywrapper" type="environment"/>
+ <cd:command file="strc-lst.mkvi" name="currentlistentryreferenceattribute">
+ <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 file="strc-lst.mkvi" name="currentlistentrydestinationattribute"/>
+ <cd:command file="strc-lst.mkvi" name="currentlistentrylimitedtext">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-logo.xml">
+ <cd:command file="cont-log.mkiv" name="TeX"/>
+ <cd:command file="cont-log.mkiv" name="ConTeXt"/>
+ <cd:command file="cont-log.mkiv" name="PPCHTeX"/>
+ <cd:command file="cont-log.mkiv" name="PRAGMA"/>
+ <cd:command file="cont-log.mkiv" name="LaTeX"/>
+ <cd:command file="cont-log.mkiv" name="TaBlE"/>
+ <cd:command file="cont-log.mkiv" name="PiCTeX"/>
+ <cd:command file="cont-log.mkiv" name="AmSTeX"/>
+ <cd:command file="cont-log.mkiv" name="LamSTeX"/>
+ <cd:command file="cont-log.mkiv" name="Context"/>
+ <cd:command file="cont-log.mkiv" name="MetaFont"/>
+ <cd:command file="cont-log.mkiv" name="MetaPost"/>
+ <cd:command file="cont-log.mkiv" name="MetaFun"/>
+ <cd:command file="cont-log.mkiv" name="eTeX"/>
+ <cd:command file="cont-log.mkiv" name="pdfTeX"/>
+ <cd:command file="cont-log.mkiv" name="pdfeTeX"/>
+ <cd:command file="cont-log.mkiv" name="Lua"/>
+ <cd:command file="cont-log.mkiv" name="luaTeX"/>
+ <cd:command file="cont-log.mkiv" name="luajitTeX"/>
+ <cd:command file="cont-log.mkiv" name="metaTeX"/>
+ <cd:command file="cont-log.mkiv" name="XeTeX"/>
+ <cd:command file="cont-log.mkiv" name="LuaTeX"/>
+ <cd:command file="cont-log.mkiv" name="LuajitTeX"/>
+ <cd:command file="cont-log.mkiv" name="MKII"/>
+ <cd:command file="cont-log.mkiv" name="MKIV"/>
+ <cd:command file="cont-log.mkiv" name="MKVI"/>
+ <cd:command file="cont-log.mkiv" name="MKIX"/>
+ <cd:command file="cont-log.mkiv" name="MKXI"/>
+ <cd:command file="cont-log.mkiv" name="MPII"/>
+ <cd:command file="cont-log.mkiv" name="MPIV"/>
+ <cd:command file="cont-log.mkiv" name="MPVI"/>
+ <cd:command file="cont-log.mkiv" name="METAFONT"/>
+ <cd:command file="cont-log.mkiv" name="METAPOST"/>
+ <cd:command file="cont-log.mkiv" name="PPCHTEX"/>
+ <cd:command file="cont-log.mkiv" name="CONTEXT"/>
+ <cd:command file="cont-log.mkiv" name="METAFUN"/>
+ <cd:command file="cont-log.mkiv" name="TEX"/>
+ <cd:command file="cont-log.mkiv" name="LATEX"/>
+ <cd:command file="cont-log.mkiv" name="PICTEX"/>
+ <cd:command file="cont-log.mkiv" name="TABLE"/>
+ <cd:command file="cont-log.mkiv" name="AMSTEX"/>
+ <cd:command file="cont-log.mkiv" name="LAMSTEX"/>
+ <cd:command file="cont-log.mkiv" name="INRSTEX"/>
+ <cd:command file="cont-log.mkiv" name="ETEX"/>
+ <cd:command file="cont-log.mkiv" name="PDFTEX"/>
+ <cd:command file="cont-log.mkiv" name="PDFETEX"/>
+ <cd:command file="cont-log.mkiv" name="LUATEX"/>
+ <cd:command file="cont-log.mkiv" name="LUAJITTEX"/>
+ <cd:command file="cont-log.mkiv" name="XETEX"/>
+ </cd:interface>
+ <cd:interface file="i-lohi.xml">
+ <cd:command file="typo-scr.mkiv" name="definelow">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplow"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-scr.mkiv" name="setuplow">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-scr.mkiv" generated="yes" name="low" variant="instance">
+ <cd:sequence>
+ <cd:instance value="low"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="typo-scr.mkiv" name="low">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-scr.mkiv" name="definehigh">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuphigh"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-scr.mkiv" name="setuphigh">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-scr.mkiv" generated="yes" name="high" variant="instance">
+ <cd:sequence>
+ <cd:instance value="high"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="typo-scr.mkiv" name="high">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-scr.mkiv" name="definelowhigh">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplowhigh"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-scr.mkiv" name="setuplowhigh">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-scr.mkiv" generated="yes" name="lowhigh" variant="instance">
+ <cd:sequence>
+ <cd:instance value="lowhigh"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="left"/>
+ <cd:constant default="yes" type="right"/>
+ </cd:keywords>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-scr.mkiv" name="lohi">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="left"/>
+ <cd:constant default="yes" type="right"/>
+ </cd:keywords>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-scr.mkiv" name="hilo">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="left"/>
+ <cd:constant default="yes" type="right"/>
+ </cd:keywords>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-scr.mkiv" name="definelowmidhigh">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplowmidhigh"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-scr.mkiv" name="setuplowmidhigh">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-scr.mkiv" generated="yes" name="lowmidhigh" variant="instance">
+ <cd:sequence>
+ <cd:instance value="lowmidhigh"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-scr.mkiv" name="lomihi">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-scr.mkiv" name="himilo">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-lua.xml">
+ <cd:command file="back-exp.mkiv" name="taggedctxcommand">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="cldf-ini.mkiv" name="luafunction">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="cldf-ini.mkiv" name="cldprocessfile">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="cldf-ini.mkiv" name="cldloadfile">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="cldf-ini.mkiv" name="cldcontext">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="cldf-ini.mkiv" name="cldcommand">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="luat-cod.mkiv" name="ctxdirectlua">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="luat-cod.mkiv" name="ctxlatelua">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="luat-cod.mkiv" name="ctxsprint">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="luat-cod.mkiv" name="ctxcommand">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="luat-cod.mkiv" name="ctxdirectcommand">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="luat-cod.mkiv" name="ctxlatecommand">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="luat-cod.mkiv" name="ctxreport">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="luat-cod.mkiv" name="ctxlua">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="luat-cod.mkiv" name="luacode">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="luat-cod.mkiv" name="lateluacode">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="luat-cod.mkiv" name="directluacode">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="luat-cod.mkiv" name="luaversion"/>
+ <cd:command file="luat-cod.mkiv" name="registerctxluafile">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="luat-cod.mkiv" name="ctxloadluafile">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="luat-ini.mkiv" name="lua" type="environment"/>
+ <cd:command file="luat-ini.mkiv" name="luacode" type="environment"/>
+ <cd:command file="luat-ini.mkiv" name="luamajorversion"/>
+ <cd:command file="luat-ini.mkiv" name="luaminorversion"/>
+ <cd:command file="luat-ini.mkiv" name="luaexpanded">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="luat-ini.mkiv" name="luaparameterset" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="luat-ini.mkiv" name="luaparameterset">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="luat-ini.mkiv" name="luaconditional">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="luat-ini.mkiv" name="ctxluacode">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="luat-ini.mkiv" name="ctxfunctiondefinition" type="environment">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="luat-ini.mkiv" generated="yes" name="ctxfunctiondefinition" variant="example">
+ <cd:sequence>
+ <cd:variable value="ctxfunctiondefinition"/>
+ </cd:sequence>
+ </cd:command>
+ <cd:command file="luat-ini.mkiv" name="ctxfunction" type="environment">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="luat-ini.mkiv" name="ctxfunction">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="luat-ini.mkiv" generated="yes" name="ctxfunction" variant="example">
+ <cd:sequence>
+ <cd:variable value="ctxfunction"/>
+ </cd:sequence>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-makeup.xml">
+ <cd:command file="page-mak.mkvi" name="definemakeup">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmakeup"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-mak.mkvi" name="setupmakeup">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 default="yes" type="stop"/>
+ </cd:parameter>
+ <cd:parameter name="headerstate">
+ <cd:constant type="start"/>
+ <cd:constant default="yes" type="stop"/>
+ <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 default="yes" type="stop"/>
+ <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 default="yes" type="normal"/>
+ </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 default="yes" type="normal"/>
+ </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 default="yes" type="normal"/>
+ </cd:parameter>
+ <cd:parameter name="doublesided">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant default="yes" type="empty"/>
+ </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:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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="instance">
+ <cd:sequence>
+ <cd:instance 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:command>
+ </cd:interface>
+ <cd:interface file="i-marginblock.xml">
+ <cd:command file="page-mbk.mkvi" name="definemarginblock">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmarginblock"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-mbk.mkvi" name="setupmarginblock">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant default="yes" type="start"/>
+ <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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </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 default="yes" type="inmargin"/>
+ </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 file="page-mbk.mkvi" name="marginblock" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-margindata.xml">
+ <cd:command file="typo-mar.mkiv" name="definemargindata">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmargindata"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-mar.mkiv" name="setupmargindata">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="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: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 default="yes" type="text"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:constant default="yes" type="left"/>
+ <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="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 default="yes" type="normal"/>
+ <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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-mar.mkiv" name="setupmarginframed">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-mar.mkiv" generated="yes" name="margindata" variant="instance">
+ <cd:sequence>
+ <cd:instance 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:instances/>
+ </cd:command>
+ <cd:command file="typo-mar.mkiv" name="margindata">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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>
+ <cd:interface file="i-marker.xml">
+ <cd:command file="attr-mkr.mkiv" name="definemarker">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="attr-mkr.mkiv" name="setmarker">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="attr-mkr.mkiv" name="resetmarker">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="attr-mkr.mkiv" name="boxmarker">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-marking.xml">
+ <cd:command file="strc-mar.mkiv" name="definemarking">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:mark"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmarking"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-mar.mkiv" name="setupmarking">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:mark"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant default="yes" type="start"/>
+ <cd:constant type="stop"/>
+ </cd:parameter>
+ <cd:parameter name="expansion">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </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 file="strc-mar.mkiv" name="relatemarking">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:mark"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:mark"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-mar.mkiv" name="setmarking">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:mark"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-mar.mkiv" name="resetmarking">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:mark"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-mar.mkiv" name="synchronizemarking">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:mark"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="keep"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-mar.mkiv" name="doifelsemarking">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:mark"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-mar.mkiv" name="doifmarkingelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:mark"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-mar.mkiv" name="getmarking">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:mark"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant default="yes" type="page"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <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 method="range" prefix="first" type="nocheck"/>
+ <cd:constant method="range" prefix="last" type="nocheck"/>
+ <cd:constant method="range" prefix="previous" type="nocheck"/>
+ <cd:constant method="range" prefix="next" type="nocheck"/>
+ <cd:constant method="range" prefix="top" type="nocheck"/>
+ <cd:constant method="range" prefix="bottom" type="nocheck"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-mar.mkiv" name="fetchonemark">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:mark"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <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 method="range" prefix="first" type="nocheck"/>
+ <cd:constant method="range" prefix="last" type="nocheck"/>
+ <cd:constant method="range" prefix="previous" type="nocheck"/>
+ <cd:constant method="range" prefix="next" type="nocheck"/>
+ <cd:constant method="range" prefix="top" type="nocheck"/>
+ <cd:constant method="range" prefix="bottom" type="nocheck"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-mar.mkiv" name="fetchtwomarks">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:mark"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-mar.mkiv" name="fetchallmarks">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:mark"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-mar.mkiv" name="fetchmark">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:mark"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <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 method="range" prefix="first" type="nocheck"/>
+ <cd:constant method="range" prefix="last" type="nocheck"/>
+ <cd:constant method="range" prefix="previous" type="nocheck"/>
+ <cd:constant method="range" prefix="next" type="nocheck"/>
+ <cd:constant method="range" prefix="top" type="nocheck"/>
+ <cd:constant method="range" prefix="bottom" type="nocheck"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-mar.mkiv" name="fetchmarking">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:mark"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="page"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <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 method="range" prefix="first" type="nocheck"/>
+ <cd:constant method="range" prefix="last" type="nocheck"/>
+ <cd:constant method="range" prefix="previous" type="nocheck"/>
+ <cd:constant method="range" prefix="next" type="nocheck"/>
+ <cd:constant method="range" prefix="top" type="nocheck"/>
+ <cd:constant method="range" prefix="bottom" type="nocheck"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-mar.mkiv" name="fetchonemarking">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:mark"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="page"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <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 method="range" prefix="first" type="nocheck"/>
+ <cd:constant method="range" prefix="last" type="nocheck"/>
+ <cd:constant method="range" prefix="previous" type="nocheck"/>
+ <cd:constant method="range" prefix="next" type="nocheck"/>
+ <cd:constant method="range" prefix="top" type="nocheck"/>
+ <cd:constant method="range" prefix="bottom" type="nocheck"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-mar.mkiv" name="fetchtwomarkings">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:mark"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="page"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-mar.mkiv" name="fetchallmarkings">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:mark"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="page"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-math.xml">
+ <cd:command category="mathematics" file="math-ini.mkiv" name="definemathematics">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathematics"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command category="mathematics" file="math-ini.mkiv" name="setupmathematics">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="openup">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </cd:parameter>
+ <cd:parameter name="symbolset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="functionstyle">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="compact">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:constant default="yes" type="l2r"/>
+ <cd:constant type="r2l"/>
+ </cd:parameter>
+ <cd:parameter name="bidi">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </cd:parameter>
+ <cd:parameter name="sygreek">
+ <cd:constant type="normal"/>
+ <cd:constant default="yes" type="italic"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ <cd:parameter name="lcgreek">
+ <cd:constant type="normal"/>
+ <cd:constant default="yes" type="italic"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ <cd:parameter name="ucgreek">
+ <cd:constant default="yes" type="normal"/>
+ <cd:constant type="italic"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ <cd:parameter name="italics">
+ <cd:constant type="1"/>
+ <cd:constant type="2"/>
+ <cd:constant default="yes" type="3"/>
+ <cd:constant type="4"/>
+ <cd:constant type="none"/>
+ <cd:constant type="reset"/>
+ </cd:parameter>
+ <cd:parameter name="autopunctuation">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ <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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="textcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="functioncolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="integral">
+ <cd:constant type="limits"/>
+ <cd:constant type="nolimits"/>
+ <cd:constant default="yes" type="autolimits"/>
+ <cd:constant type="displaylimits"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ <cd:parameter name="stylealternative">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="default">
+ <cd:constant type="normal"/>
+ <cd:constant default="yes" type="italic"/>
+ </cd:parameter>
+ <cd:parameter name="fraction">
+ <cd:constant type="ams"/>
+ <cd:constant default="yes" type="ctx"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command category="mathematics" file="math-ini.mkiv" name="inlineordisplaymath">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command category="mathematics" file="math-ini.mkiv" name="mathematics">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command category="mathematics" file="math-ini.mkiv" name="math">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command category="mathematics" file="math-ini.mkiv" name="m">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command category="mathematics" file="math-ini.mkiv" name="definemathcommand">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 default="yes" type="nothing"/>
+ <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 file="math-ini.mkiv" generated="yes" name="mathcommand" variant="example">
+ <cd:sequence>
+ <cd:variable value="mathcommand"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-ini.mkiv" name="mathcommand">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-ini.mkiv" name="mathop">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-ini.mkiv" name="mbox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-ini.mkiv" name="mtext">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command category="mathematics" file="math-ini.mkiv" name="mathfunction">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command category="mathematics" file="math-ini.mkiv" name="mfunction">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-ini.mkiv" name="mfunctionlabeltext">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-ini.mkiv" name="stackrel">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-ini.mkiv" name="apply">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-ini.mkiv" name="definemathstyle">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes">
+ <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:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-ini.mkiv" name="setupmathstyle">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <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:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-ini.mkiv" name="setmathstyle">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes">
+ <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:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-ini.mkiv" name="mathstyle" type="environment">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <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:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command begin="push" end="pop" file="math-ini.mkiv" name="mathstyle" type="environment"/>
+ <cd:command file="math-ini.mkiv" name="usemathstyleparameter">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-ini.mkiv" name="usemathstyleparameter" type="environment">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-ini.mkiv" name="mathtext">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-ini.mkiv" name="mathtexttf">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-ini.mkiv" name="mathtextit">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-ini.mkiv" name="mathtextsl">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-ini.mkiv" name="mathtextbf">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-ini.mkiv" name="mathtextbi">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-ini.mkiv" name="mathtextbs">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-ini.mkiv" name="mathword">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-ini.mkiv" name="mathwordtf">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-ini.mkiv" name="mathwordit">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-ini.mkiv" name="mathwordsl">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-ini.mkiv" name="mathwordbf">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-ini.mkiv" name="mathwordbi">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-ini.mkiv" name="mathwordbs">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-ini.mkiv" name="mathrm"/>
+ <cd:command file="math-ini.mkiv" name="mathss"/>
+ <cd:command file="math-ini.mkiv" name="mathtt"/>
+ <cd:command file="math-ini.mkiv" name="mathtf"/>
+ <cd:command file="math-ini.mkiv" name="mathsl"/>
+ <cd:command file="math-ini.mkiv" name="mathit"/>
+ <cd:command file="math-ini.mkiv" name="mathbf"/>
+ <cd:command file="math-ini.mkiv" name="mathbi"/>
+ <cd:command file="math-ini.mkiv" name="mathbs"/>
+ <cd:command file="math-ini.mkiv" name="mathitalic"/>
+ <cd:command file="math-ini.mkiv" name="mathupright"/>
+ <cd:command file="math-ini.mkiv" name="mathdefault"/>
+ <cd:command file="math-ini.mkiv" name="mathscript"/>
+ <cd:command file="math-ini.mkiv" name="mathfraktur"/>
+ <cd:command file="math-ini.mkiv" name="mathblackboard"/>
+ <cd:command file="supp-mat.mkiv" name="displaymath">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-mat.mkiv" name="inlinemath">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-mat.mkiv" name="textmath">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-mat.mkiv" name="imath" type="environment"/>
+ <cd:command file="supp-mat.mkiv" name="dmath" type="environment"/>
+ <cd:command file="supp-mat.mkiv" name="mathmode" type="environment"/>
+ <cd:command file="supp-mat.mkiv" name="nonmathematics">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-mat.mkiv" name="displaymathematics">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-mat.mkiv" name="inlinemathematics">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-mat.mkiv" name="automathematics">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-mat.mkiv" name="cramped">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-mat.mkiv" name="crampedllap">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-mat.mkiv" name="crampedrlap">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-mat.mkiv" name="crampedclap">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-mathalignment.xml">
+ <cd:command file="math-ali.mkiv" name="definemathalignment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathalignment"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-ali.mkiv" name="setupmathalignment">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 default="yes" type="normal"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-ali.mkiv" generated="yes" name="mathalignment" type="environment" variant="instance">
+ <cd:sequence>
+ <cd:instance value="mathalignment"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathalignment"/>
+ </cd:assignments>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-mathcases.xml">
+ <cd:command file="math-ali.mkiv" name="definemathcases">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathcases"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-ali.mkiv" name="setupmathcases">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </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 file="math-ali.mkiv" generated="yes" name="mathcases" type="environment" variant="instance">
+ <cd:sequence>
+ <cd:instance value="mathcases"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathcases"/>
+ </cd:assignments>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-mathfence.xml">
+ <cd:command file="math-fen.mkiv" name="definemathfence">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathfence"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-fen.mkiv" name="setupmathfence">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="command">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </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: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:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="state">
+ <cd:constant type="auto"/>
+ </cd:parameter>
+ <cd:parameter name="factor">
+ <cd:constant default="yes" type="auto"/>
+ <cd:constant type="none"/>
+ <cd:constant type="number"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-fen.mkiv" generated="yes" name="fence" variant="example">
+ <cd:sequence>
+ <cd:variable value="fence"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-fen.mkiv" name="fenced">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-fen.mkiv" name="fence"/>
+ <cd:command file="math-fen.mkiv" name="left">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-fen.mkiv" name="middle">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-fen.mkiv" name="right">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-fen.mkiv" name="big">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-fen.mkiv" name="Big">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-fen.mkiv" name="bigg">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-fen.mkiv" name="Bigg">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-fen.mkiv" name="bigl">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-fen.mkiv" name="bigm">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-fen.mkiv" name="bigr">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-fen.mkiv" name="Bigl">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-fen.mkiv" name="Bigm">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-fen.mkiv" name="Bigr">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-fen.mkiv" name="biggl">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-fen.mkiv" name="biggm">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-fen.mkiv" name="biggr">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-fen.mkiv" name="Biggl">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-fen.mkiv" name="Biggm">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-fen.mkiv" name="Biggr">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-fen.mkiv" name="lfence">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-fen.mkiv" name="mfence">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-fen.mkiv" name="rfence">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-fen.mkiv" name="checkedfences" type="environment"/>
+ </cd:interface>
+ <cd:interface file="i-mathmatrix.xml">
+ <cd:command file="math-ali.mkiv" name="definemathmatrix">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathmatrix"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-ali.mkiv" name="setupmathmatrix">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 default="yes" type="middle"/>
+ <cd:constant type="right"/>
+ <cd:constant type="normal"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </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 default="yes" type="normal"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-ali.mkiv" generated="yes" name="mathmatrix" type="environment" variant="instance">
+ <cd:sequence>
+ <cd:instance value="mathmatrix"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathmatrix"/>
+ </cd:assignments>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="math-ali.mkiv" name="matrices" type="environment">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathmatrix"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-ali.mkiv" name="intertext" type="environment"/>
+ <cd:command file="math-ali.mkiv" name="intertext">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-ali.mkiv" name="substack" type="environment"/>
+ <cd:command file="math-ali.mkiv" name="overset">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-ali.mkiv" name="underset">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-mathornament.xml">
+ <cd:command file="math-rad.mkvi" name="definemathornament">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathornament"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-rad.mkvi" name="setupmathornament">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="math-rad.mkvi" generated="yes" name="mathornament" variant="example">
+ <cd:sequence>
+ <cd:variable value="mathornament"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-mathradical.xml">
+ <cd:command file="math-rad.mkvi" name="definemathradical">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathradical"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-rad.mkvi" name="setupmathradical">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="alternative">
+ <cd:constant type="default"/>
+ <cd:constant default="yes" type="normal"/>
+ <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 file="math-rad.mkvi" generated="yes" name="mathradical" variant="example">
+ <cd:sequence>
+ <cd:variable value="mathradical"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-rad.mkvi" name="sqrt">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-mathstackers.xml">
+ <cd:command file="math-stc.mkvi" name="definemathstackers">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathstackers"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="setupmathstackers">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 default="yes" type="rel"/>
+ <cd:constant type="ord"/>
+ </cd:parameter>
+ <cd:parameter name="offset">
+ <cd:constant type="min"/>
+ <cd:constant type="max"/>
+ <cd:constant default="yes" type="normal"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:constant default="yes" type="top"/>
+ <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 default="yes" type="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 default="yes" type="normal"/>
+ <cd:constant type="reverse"/>
+ </cd:parameter>
+ <cd:parameter name="mathlimits">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-sty.mkvi" name="definemathextensible">
+ <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:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" generated="yes" name="mathextensible" variant="example">
+ <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:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-sty.mkvi" name="definemathoverextensible">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="top"/>
+ <cd:constant type="vfenced"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" generated="yes" name="mathoverextensible" variant="example">
+ <cd:sequence>
+ <cd:variable value="mathoverextensible"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-sty.mkvi" name="definemathunderextensible">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="bottom"/>
+ <cd:constant type="vfenced"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" generated="yes" name="mathunderextensible" variant="example">
+ <cd:sequence>
+ <cd:variable value="mathunderextensible"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-sty.mkvi" name="definemathdoubleextensible">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="both"/>
+ <cd:constant type="vfenced"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" generated="yes" name="mathdoubleextensible" variant="example">
+ <cd:sequence>
+ <cd:variable value="mathdoubleextensible"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-sty.mkvi" name="definemathovertextextensible">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="bothtext"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" generated="yes" name="mathovertextextensible" variant="example">
+ <cd:sequence>
+ <cd:variable value="mathovertextextensible"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-sty.mkvi" name="definemathundertextextensible">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="bothtext"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" generated="yes" name="mathundertextextensible" variant="example">
+ <cd:sequence>
+ <cd:variable value="mathundertextextensible"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-sty.mkvi" name="definemathtriplet">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" generated="yes" name="mathtriplet" variant="example">
+ <cd:sequence>
+ <cd:variable value="mathtriplet"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="mathtriplet">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="xrel">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="xequal">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="xleftarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="xrightarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="xleftrightarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="xLeftarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="xRightarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="xLeftrightarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="xtwoheadleftarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="xtwoheadrightarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="xmapsto">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="xhookleftarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="xhookrightarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="xleftharpoondown">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="xleftharpoonup">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="xrightharpoondown">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="xrightharpoonup">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="xrightoverleftarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="xleftrightharpoons">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="xrightleftharpoons">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="xtriplerel">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="mrel">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="mequal">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="mleftarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="mrightarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="mleftrightarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="mLeftarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="mRightarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="mLeftrightarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="mtwoheadleftarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="mtwoheadrightarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="mmapsto">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="mhookleftarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="mhookrightarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="mleftharpoondown">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="mleftharpoonup">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="mrightharpoondown">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="mrightharpoonup">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="mrightoverleftarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="mleftrightharpoons">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="mrightleftharpoons">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="mtriplerel">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="eleftarrowfill">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="erightarrowfill">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="eleftrightarrowfill">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="etwoheadrightarrowfill">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="eleftharpoondownfill">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="eleftharpoonupfill">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="erightharpoondownfill">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="erightharpoonupfill">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="eoverbarfill">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="eunderbarfill">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="eoverbracefill">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="eunderbracefill">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="eoverparentfill">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="eunderparentfill">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="eoverbracketfill">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="eunderbracketfill">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="trel">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="tequal">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="tmapsto">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="tleftarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="trightarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="tleftrightarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="tLeftarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="tRightarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="tLeftrightarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="ttwoheadleftarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="ttwoheadrightarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="thookleftarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="thookrightarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="tleftharpoondown">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="tleftharpoonup">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="trightharpoondown">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="trightharpoonup">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="trightoverleftarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="tleftrightharpoons">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="trightleftharpoons">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="ttriplerel">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="cleftarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="crightarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="crightoverleftarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="underleftarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="underrightarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="underleftrightarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="undertwoheadleftarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="undertwoheadrightarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="underleftharpoondown">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="underleftharpoonup">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="underrightharpoondown">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="underrightharpoonup">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="underbar">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="underbrace">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="underparent">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="underbracket">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="overleftarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="overrightarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="overleftrightarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="overtwoheadleftarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="overtwoheadrightarrow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="overleftharpoondown">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="overleftharpoonup">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="overrightharpoondown">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="overrightharpoonup">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="overbar">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="overbrace">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="overparent">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="overbracket">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="doublebar">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="doublebrace">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="doubleparent">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="doublebracket">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="overbarunderbar">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="overbraceunderbrace">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="overparentunderparent">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="overbracketunderbracket">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="overbartext">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="overbracetext">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="overparenttext">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="overbrackettext">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="underbartext">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="underbracetext">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="underparenttext">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="underbrackettext">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="singlebond"/>
+ <cd:command file="math-stc.mkvi" name="doublebond"/>
+ <cd:command file="math-stc.mkvi" name="triplebond"/>
+ <cd:command file="math-stc.mkvi" name="definemathunstacked">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="wide"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" generated="yes" name="mathunstacked" variant="example">
+ <cd:sequence>
+ <cd:variable value="mathunstacked"/>
+ </cd:sequence>
+ </cd:command>
+ <cd:command file="math-stc.mkvi" name="And"/>
+ <cd:command file="math-stc.mkvi" name="impliedby"/>
+ <cd:command file="math-stc.mkvi" name="implies"/>
+ <cd:command file="math-stc.mkvi" name="iff"/>
+ </cd:interface>
+ <cd:interface file="i-metapost.xml">
+ <cd:command file="meta-ini.mkiv" name="MPdefinitions" type="environment">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="MPextensions" type="environment">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="MPinitializations" type="environment"/>
+ <cd:command file="meta-ini.mkiv" name="MPinclusions" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="+"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="MPinclusions">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="+"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="defineMPinstance">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupMPinstance"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="setupMPinstance">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="format">
+ <cd:constant default="yes" type="metafun"/>
+ <cd:constant type="mpost"/>
+ </cd:parameter>
+ <cd:parameter name="initializations">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </cd:parameter>
+ <cd:parameter name="setups">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="textstyle">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="textcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="extensions">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:constant type="binary"/>
+ <cd:constant type="decimal"/>
+ <cd:constant type="double"/>
+ <cd:constant type="scaled"/>
+ <cd:constant default="yes" type="default"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="resetMPinstance">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="processMPfigurefile">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="MPdrawing" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="-"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="resetMPdrawing"/>
+ <cd:command file="meta-ini.mkiv" name="getMPdrawing"/>
+ <cd:command begin="push" end="pop" file="meta-ini.mkiv" name="MPdrawing" type="environment"/>
+ <cd:command file="meta-ini.mkiv" name="MPdrawing">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="MPclip" type="environment">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="MPfontsizehskip">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="setupMPvariables">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="setMPvariables">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="setMPvariable">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments>
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="MPrawvar">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="MPvariable">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="MPvar">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="useMPvariables">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="uniqueMPgraphic" type="environment">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" list="yes" optional="yes">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="uniqueMPgraphic">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="meta-ini.mkiv" name="useMPgraphic" type="environment">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" list="yes" optional="yes">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="useMPgraphic">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="meta-ini.mkiv" name="usableMPgraphic" type="environment">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" list="yes" optional="yes">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="reuseMPgraphic">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="meta-ini.mkiv" name="reusableMPgraphic" type="environment">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" list="yes" optional="yes">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="reusableMPgraphic">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="meta-ini.mkiv" name="uniqueMPpagegraphic" type="environment">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" list="yes" optional="yes">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="uniqueMPpagegraphic">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="meta-ini.mkiv" name="processMPbuffer">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="runMPbuffer">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="MPenvironment" type="environment">
+ <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 file="meta-ini.mkiv" name="resetMPenvironment"/>
+ <cd:command file="meta-ini.mkiv" name="useMPenvironmentbuffer">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="MPcode" type="environment">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="MPcode">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="MPrun" type="environment">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="useMPrun">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="useMPlibrary">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="setMPtext">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="MPtext">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="MPstring">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="MPbetex">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="doifelseMPgraphic">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="doifMPgraphicelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="staticMPfigure" type="environment">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="staticMPgraphic" type="environment">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" list="yes" optional="yes">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="usestaticMPfigure">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupscale"/>
+ </cd:assignments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="meta-ini.mkiv" name="setupMPgraphics">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="color">
+ <cd:constant default="yes" type="local"/>
+ <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>
+ <cd:interface file="i-mixedcolumns.xml">
+ <cd:command file="page-mix.mkiv" name="definemixedcolumns">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmixedcolumns"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-mix.mkiv" name="setupmixedcolumns">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="grid">
+ <cd:inherit name="definegridsnapping"/>
+ </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 default="yes" type="no"/>
+ </cd:parameter>
+ <cd:parameter name="splitmethod">
+ <cd:constant type="none"/>
+ <cd:constant type="fixed"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant default="yes" type="local"/>
+ <cd:constant type="global"/>
+ </cd:parameter>
+ <cd:parameter name="internalgrid">
+ <cd:constant default="yes" type="line"/>
+ <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 default="yes" type="normal"/>
+ <cd:constant type="reverse"/>
+ </cd:parameter>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-mix.mkiv" name="mixedcolumns" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmixedcolumns"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-mix.mkiv" generated="yes" name="mixedcolumns" type="environment" variant="instance">
+ <cd:sequence>
+ <cd:instance value="mixedcolumns"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmixedcolumns"/>
+ </cd:assignments>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-modes.xml">
+ <cd:command file="core-env.mkiv" name="newmode">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="setmode">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="resetmode">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="newsystemmode">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="setsystemmode">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="resetsystemmode">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="preventmode">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="enablemode">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="disablemode">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="globalpreventmode">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="globalenablemode">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="globaldisablemode">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="definemode">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ <cd:constant type="keep"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="booleanmodevalue">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="doifelsemode">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="doifmodeelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="doifmode">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="doifnotmode">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="mode" type="environment">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="notmode" type="environment">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="doifelseallmodes">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="doifallmodeselse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="doifallmodes">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="doifnotallmodes">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="allmodes" type="environment">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="notallmodes" type="environment">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="modeset" type="environment">
+ <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 file="core-env.mkiv" name="pushmode">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="popmode">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="pushsystemmode">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="popsystemmode">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-modules.xml">
+ <cd:command file="file-mod.mkvi" name="usemodule">
+ <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:keywords list="yes">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <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 file="file-mod.mkvi" name="usetexmodule">
+ <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:keywords list="yes">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <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 file="file-mod.mkvi" name="module" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-mod.mkvi" name="module" type="environment" variant="string">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-mod.mkvi" name="setupmodule">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="test">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </cd:parameter>
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-mod.mkvi" name="moduleparameter">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-mod.mkvi" name="currentmoduleparameter">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-mod.mkvi" name="moduletestsection" type="environment"/>
+ <cd:command file="file-mod.mkvi" name="fetchruntinecommand">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-mod.mkvi" name="luaenvironment">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-mod.mkvi" name="useluamodule">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-narrow.xml">
+ <cd:command file="spac-hor.mkiv" name="definenarrower">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupnarrower"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-hor.mkiv" name="setupnarrower">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 method="none" prefix="cd:sign" type="left"/>
+ <cd:constant default="yes" method="none" prefix="cd:sign" type="middle"/>
+ <cd:constant method="none" prefix="cd:sign" type="right"/>
+ <cd:constant method="factor" prefix="cd:number" type="left"/>
+ <cd:constant method="factor" prefix="cd:number" type="middle"/>
+ <cd:constant method="factor" prefix="cd:number" type="right"/>
+ <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 file="spac-hor.mkiv" name="narrower" type="environment">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant method="none" prefix="cd:sign" type="left"/>
+ <cd:constant method="none" prefix="cd:sign" type="middle"/>
+ <cd:constant method="none" prefix="cd:sign" type="right"/>
+ <cd:constant method="factor" prefix="cd:number" type="left"/>
+ <cd:constant method="factor" prefix="cd:number" type="middle"/>
+ <cd:constant method="factor" prefix="cd:number" type="right"/>
+ <cd:constant type="reset"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-hor.mkiv" generated="yes" name="narrower" type="environment" variant="example">
+ <cd:sequence>
+ <cd:variable value="narrower"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant method="none" prefix="cd:sign" type="left"/>
+ <cd:constant method="none" prefix="cd:sign" type="middle"/>
+ <cd:constant method="none" prefix="cd:sign" type="right"/>
+ <cd:constant method="factor" prefix="cd:number" type="left"/>
+ <cd:constant method="factor" prefix="cd:number" type="middle"/>
+ <cd:constant method="factor" prefix="cd:number" type="right"/>
+ <cd:constant type="reset"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-hor.mkiv" name="narrow" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupnarrower"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-hor.mkiv" name="narrow" type="environment" variant="name">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant method="none" prefix="cd:sign" type="left"/>
+ <cd:constant method="none" prefix="cd:sign" type="middle"/>
+ <cd:constant method="none" prefix="cd:sign" type="right"/>
+ <cd:constant method="factor" prefix="cd:number" type="left"/>
+ <cd:constant method="factor" prefix="cd:number" type="middle"/>
+ <cd:constant method="factor" prefix="cd:number" type="right"/>
+ <cd:constant type="reset"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-hor.mkiv" name="narrow" type="environment" variant="assignment">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupnarrower"/>
+ </cd:assignments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant method="none" prefix="cd:sign" type="left"/>
+ <cd:constant method="none" prefix="cd:sign" type="middle"/>
+ <cd:constant method="none" prefix="cd:sign" type="right"/>
+ <cd:constant method="factor" prefix="cd:number" type="left"/>
+ <cd:constant method="factor" prefix="cd:number" type="middle"/>
+ <cd:constant method="factor" prefix="cd:number" type="right"/>
+ <cd:constant type="reset"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-naturaltable.xml">
+ <cd:command file="tabl-ntb.mkiv" name="setupTABLE">
+ <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 method="none" prefix="-" type="cd:number"/>
+ </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 method="none" prefix="-" type="cd:number"/>
+ </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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </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 default="yes" type="local"/>
+ </cd:parameter>
+ <cd:parameter name="split">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="repeat"/>
+ <cd:constant default="yes" type="auto"/>
+ </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 default="yes" type="no"/>
+ </cd:parameter>
+ <cd:parameter name="alignmentcharacter">
+ <cd:constant type="cd:text"/>
+ <cd:constant method="apply" prefix="number" type="cd:text"/>
+ <cd:constant method="apply" prefix="text" 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:constant type="math"/>
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command begin="b" end="e" file="tabl-ntb.mkiv" name="TABLE" type="environment">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupTABLE"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command begin="b" end="e" file="tabl-ntb.mkiv" name="TD" type="environment">
+ <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 begin="b" end="e" file="tabl-ntb.mkiv" name="TR" type="environment">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupTABLE"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command begin="b" end="e" file="tabl-ntb.mkiv" name="TC" type="environment">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="bTD"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command begin="b" end="e" file="tabl-ntb.mkiv" name="TX" type="environment">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="bTD"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command begin="b" end="e" file="tabl-ntb.mkiv" name="TY" type="environment">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupTABLE"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command begin="b" end="e" file="tabl-ntb.mkiv" name="TH" type="environment">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="bTD"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command begin="b" end="e" file="tabl-ntb.mkiv" name="TN" type="environment">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="bTD"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command begin="b" end="e" file="tabl-ntb.mkiv" name="TABLEhead" type="environment">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupTABLE"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command begin="b" end="e" file="tabl-ntb.mkiv" name="TABLEnext" type="environment">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupTABLE"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command begin="b" end="e" file="tabl-ntb.mkiv" name="TABLEbody" type="environment">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupTABLE"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command begin="b" end="e" file="tabl-ntb.mkiv" name="TABLEfoot" type="environment">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupTABLE"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-ntb.mkiv" name="defineTABLEsetup">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupTABLE"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command begin="b" end="e" file="tabl-ntb.mkiv" name="TDs" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command begin="b" end="e" file="tabl-ntb.mkiv" name="TRs" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-ntb.mkiv" name="TABLE" type="environment">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupTABLE"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-ntb.mkiv" name="TABLEhead" type="environment">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupTABLE"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-ntb.mkiv" name="TABLEnext" type="environment">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupTABLE"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-ntb.mkiv" name="TABLEbody" type="environment">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupTABLE"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-ntb.mkiv" name="TABLEfoot" type="environment">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupTABLE"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-note.xml">
+ <cd:command file="strc-not.mkvi" name="setupnotation">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="title">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </cd:parameter>
+ <cd:parameter name="number">
+ <cd:constant default="yes" type="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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </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>
+ <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 default="yes" type="note"/>
+ <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 default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="indentnext">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="auto"/>
+ </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 default="yes" type="no"/>
+ <cd:constant type="xml"/>
+ </cd:parameter>
+ <cd:parameter name="referenceprefix">
+ <cd:constant type="+"/>
+ <cd:constant type="-"/>
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="sample">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="margin">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="standard"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="headstyle">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="headcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:inherit name="setupcounter"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-not.mkvi" name="setupnotations">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupnotation"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-not.mkvi" generated="yes" name="note" type="environment" variant="instance:assignment">
+ <cd:sequence>
+ <cd:instance value="note"/>
+ </cd:sequence>
+ <cd:arguments>
+ <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:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="strc-not.mkvi" generated="yes" name="note" type="environment" variant="instance">
+ <cd:sequence>
+ <cd:instance value="note"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="strc-not.mkvi" generated="yes" name="note" variant="instance">
+ <cd:sequence>
+ <cd:instance value="note"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="strc-not.mkvi" generated="yes" name="note" variant="instance:assignment">
+ <cd:sequence>
+ <cd:instance value="note"/>
+ </cd:sequence>
+ <cd:arguments>
+ <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:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="strc-not.mkvi" name="definenote">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupnote"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-not.mkvi" name="setupnote">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="interaction">
+ <cd:constant default="yes" type="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 default="yes" type="no"/>
+ </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 default="yes" type="on"/>
+ <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 default="yes" type="tolerant"/>
+ <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 default="yes" 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="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 default="yes" type="no"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="grid"/>
+ <cd:constant type="fixed"/>
+ <cd:constant type="columns"/>
+ <cd:constant default="yes" type="note"/>
+ <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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </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 file="strc-not.mkvi" name="setupnotes">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupnote"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-not.mkvi" name="setnote">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-not.mkvi" name="setnote" variant="assignment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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:arguments>
+ </cd:command>
+ <cd:command file="strc-not.mkvi" name="setnotetext">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-not.mkvi" name="setnotetext" variant="assignment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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:arguments>
+ </cd:command>
+ <cd:command file="strc-not.mkvi" name="placenotes">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupnote"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-not.mkvi" name="localnotes" type="environment">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-not.mkvi" name="placelocalnotes">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupnote"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-not.mkvi" name="postponenotes"/>
+ <cd:command file="strc-not.mkvi" name="flushnotes"/>
+ <cd:command file="strc-not.mkvi" name="doifelsenoteonsamepage">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-not.mkvi" name="doifnoteonsamepageelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-not.mkvi" name="doifnotescollected">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-not.mkvi" name="notesymbol">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-not.mkvi" name="note">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-not.mkvi" name="footnotetext">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-not.mkvi" name="footnotetext" variant="assignment">
+ <cd:arguments>
+ <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:arguments>
+ </cd:command>
+ <cd:command file="strc-not.mkvi" name="placefootnotes">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupnote"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-not.mkvi" name="localfootnotes" type="environment"/>
+ <cd:command file="strc-not.mkvi" name="placelocalfootnotes">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupnote"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-lnt.mkvi" name="definelinenote">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplinenote"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-lnt.mkvi" name="setuplinenote">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="compress">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </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 file="strc-lnt.mkvi" generated="yes" name="linenote" variant="instance">
+ <cd:sequence>
+ <cd:instance value="linenote"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="strc-lnt.mkvi" generated="yes" name="startlinenote" variant="instance">
+ <cd:sequence>
+ <cd:string value="start"/>
+ <cd:instance value="linenote"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="strc-lnt.mkvi" generated="yes" name="stoplinenote" variant="instance">
+ <cd:sequence>
+ <cd:string value="stop"/>
+ <cd:instance value="linenote"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="strc-lnt.mkvi" name="fromlinenote">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-lnt.mkvi" name="tolinenote">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-object.xml">
+ <cd:command file="pack-obj.mkiv" name="ifinobject">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:delimiter name="else"/>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ <cd:delimiter name="fi"/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-obj.mkiv" name="objectmargin"/>
+ <cd:command file="pack-obj.mkiv" name="objectwidth"/>
+ <cd:command file="pack-obj.mkiv" name="objectheight"/>
+ <cd:command file="pack-obj.mkiv" name="objectdepth"/>
+ <cd:command file="pack-obj.mkiv" name="setreferencedobject">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-obj.mkiv" name="settightreferencedobject">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-obj.mkiv" name="setunreferencedobject">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-obj.mkiv" name="settightunreferencedobject">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-obj.mkiv" name="setobject">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-obj.mkiv" name="settightobject">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-obj.mkiv" name="getobject">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-obj.mkiv" name="getobjectdimensions">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-obj.mkiv" name="defaultobjectreference"/>
+ <cd:command file="pack-obj.mkiv" name="defaultobjectpage"/>
+ <cd:command file="pack-obj.mkiv" name="doifelseobjectfound">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-obj.mkiv" name="doifobjectfoundelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-obj.mkiv" name="doifelseobjectreferencefound">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-obj.mkiv" name="doifobjectreferencefoundelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-offset.xml">
+ <cd:command file="pack-box.mkiv" name="setupoffsetbox">
+ <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: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:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-box.mkiv" name="setupoffset">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupoffsetbox"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-box.mkiv" name="offsetbox">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupoffsetbox"/>
+ </cd:assignments>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-box.mkiv" name="offset">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupoffset"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-opposite.xml">
+ <cd:command file="page-fac.mkiv" name="setupoppositeplacing">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant default="yes" type="start"/>
+ <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 file="page-fac.mkiv" name="opposite" type="environment"/>
+ </cd:interface>
+ <cd:interface file="i-ornament.xml">
+ <cd:command file="pack-box.mkiv" name="ornamenttext" variant="collector">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="alternative">
+ <cd:constant default="yes" type="a"/>
+ <cd:constant type="b"/>
+ </cd:parameter>
+ <cd:inherit name="setupcollector"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-box.mkiv" name="ornamenttext" variant="layer">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="alternative">
+ <cd:constant type="a"/>
+ <cd:constant default="yes" type="b"/>
+ </cd:parameter>
+ <cd:inherit name="setuplayer"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplayeredtext"/>
+ </cd:assignments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-box.mkiv" name="ornamenttext" variant="direct">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-box.mkiv" name="defineornament" variant="collector">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="alternative">
+ <cd:constant default="yes" type="a"/>
+ <cd:constant type="b"/>
+ </cd:parameter>
+ <cd:inherit name="setupcollector"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </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 file="pack-box.mkiv" name="defineornament" variant="layer">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="alternative">
+ <cd:constant type="a"/>
+ <cd:constant default="yes" type="b"/>
+ </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 file="pack-box.mkiv" generated="yes" name="ornament" variant="example">
+ <cd:sequence>
+ <cd:variable value="ornament"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-output.xml">
+ <cd:command file="page-otr.mkvi" name="defineoutputroutine">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupoutputroutine"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-otr.mkvi" name="setupoutputroutine">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:csname"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-otr.mkvi" name="setupoutputroutine" variant="name">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-otr.mkvi" name="defineoutputroutinecommand">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-otr.mkvi" name="traceoutputroutines"/>
+ <cd:command file="page-otr.mkvi" name="installoutputroutine">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-overlay.xml">
+ <cd:command file="pack-lyr.mkiv" name="defineoverlay">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-rul.mkiv" name="overlaycolor"/>
+ <cd:command file="pack-rul.mkiv" name="overlaylinecolor"/>
+ <cd:command file="pack-rul.mkiv" name="overlaywidth"/>
+ <cd:command file="pack-rul.mkiv" name="overlayheight"/>
+ <cd:command file="pack-rul.mkiv" name="overlaydepth"/>
+ <cd:command file="pack-rul.mkiv" name="overlayoffset"/>
+ <cd:command file="pack-rul.mkiv" name="overlaylinewidth"/>
+ <cd:command file="pack-rul.mkiv" name="doifelseoverlay">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-rul.mkiv" name="doifoverlayelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-pagebreak.xml">
+ <cd:command file="page-brk.mkiv" name="definepagebreak">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes">
+ <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 method="none" prefix="+" type="cd:number"/>
+ <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:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-brk.mkiv" name="pagebreak">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <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 method="none" prefix="+" type="cd:number"/>
+ <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:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-brk.mkiv" name="page">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="pagebreak"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-brk.mkiv" name="definecolumnbreak">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes">
+ <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:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-brk.mkiv" name="columnbreak">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <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:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-brk.mkiv" name="column">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="columnbreak"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-brk.mkiv" name="definepagechecker">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppagechecker"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-brk.mkiv" name="setuppagechecker">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="page-brk.mkiv" name="checkpage">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppagechecker"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-brk.mkiv" name="testpage">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-brk.mkiv" name="testpageonly">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-brk.mkiv" name="testpagesync">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-brk.mkiv" name="testcolumn">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-pagecomment.xml">
+ <cd:command file="page-com.mkiv" name="setuppagecomment">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="location">
+ <cd:constant type="left"/>
+ <cd:constant type="right"/>
+ <cd:constant type="top"/>
+ <cd:constant default="yes" type="bottom"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ <cd:parameter name="state">
+ <cd:constant type="start"/>
+ <cd:constant type="stop"/>
+ <cd:constant default="yes" type="none"/>
+ </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 file="page-com.mkiv" name="pagecomment" type="environment"/>
+ </cd:interface>
+ <cd:interface file="i-pagefigure.xml">
+ <cd:command file="page-app.mkiv" name="pagefigure">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupexternalfigure"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-app.mkiv" name="pagefigure" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupexternalfigure"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-pagegrid.xml">
+ <cd:command file="page-cst.mkiv" name="definepagegrid">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppagegrid"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-cst.mkiv" name="setuppagegrid">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 default="yes" type="normal"/>
+ <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 file="page-cst.mkiv" generated="yes" name="pagegrid" type="environment" variant="example">
+ <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 file="page-cst.mkiv" name="pagegrid" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppagegrid"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-cst.mkiv" name="setpagegrid">
+ <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 default="yes" type="none"/>
+ </cd:parameter>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-cst.mkiv" name="definepagegridspan">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppagegridspan"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-cst.mkiv" name="setuppagegridspan">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </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 file="page-cst.mkiv" name="pagegridspan" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppagegridspan"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-cst.mkiv" name="pagegridspanwidth">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-cst.mkiv" name="definepagegridarea">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppagegridarea"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-cst.mkiv" name="setuppagegridarea">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant type="start"/>
+ <cd:constant default="yes" type="stop"/>
+ <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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </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 file="page-cst.mkiv" name="setuppagegridareatext">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-cst.mkiv" name="setuppagegridlines">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-cst.mkiv" name="setuppagegridstart">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-pageinjection.xml">
+ <cd:command file="page-inj.mkvi" name="definepageinjection">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppageinjection"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-inj.mkvi" name="setuppageinjection">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant type="previous"/>
+ <cd:constant default="yes" type="next"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="delay">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant default="yes" type="figure"/>
+ <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 default="yes" type="start"/>
+ <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 file="page-inj.mkvi" name="pageinjection">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="page-inj.mkvi" name="pageinjection" variant="assignment">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppageinjection"/>
+ </cd:assignments>
+ <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 file="page-inj.mkvi" name="definepageinjectionalternative">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppageinjectionalternative"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-inj.mkvi" name="setuppageinjectionalternative">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="renderingsetup">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-pagelayout.xml">
+ <cd:command file="page-plg.mkiv" name="pagearea">
+ <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 default="yes" type="middletext"/>
+ <cd:constant type="righttext"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-plg.mkiv" name="pagelayout" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="page"/>
+ <cd:constant type="leftpage"/>
+ <cd:constant type="rightpage"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-pagenumber.xml">
+ <cd:command file="strc-pag.mkiv" name="setuprealpagenumber">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupcounter"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-pag.mkiv" name="setupuserpagenumber">
+ <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 file="strc-pag.mkiv" name="setupsubpagenumber">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupcounter"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-pag.mkiv" name="setuppagenumber">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupuserpagenumber"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-pag.mkiv" name="resetuserpagenumber"/>
+ <cd:command file="strc-pag.mkiv" name="resetsubpagenumber"/>
+ <cd:command file="strc-pag.mkiv" name="resetpagenumber"/>
+ <cd:command file="strc-pag.mkiv" name="setuppagenumbering">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="alternative">
+ <cd:constant default="yes" type="singlesided"/>
+ <cd:constant type="doublesided"/>
+ </cd:parameter>
+ <cd:parameter name="page">
+ <cd:inherit name="page"/>
+ </cd:parameter>
+ <cd:parameter name="strut">
+ <cd:constant default="yes" type="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 default="yes" type="start"/>
+ <cd:constant type="stop"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:constant default="yes" type="header"/>
+ <cd:constant type="footer"/>
+ <cd:constant type="left"/>
+ <cd:constant default="yes" type="middle"/>
+ <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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-pag.mkiv" name="firstrealpagenumber"/>
+ <cd:command file="strc-pag.mkiv" name="firstuserpagenumber"/>
+ <cd:command file="strc-pag.mkiv" name="firstsubpagenumber"/>
+ <cd:command file="strc-pag.mkiv" name="lastrealpagenumber"/>
+ <cd:command file="strc-pag.mkiv" name="lastuserpagenumber"/>
+ <cd:command file="strc-pag.mkiv" name="lastsubpagenumber"/>
+ <cd:command file="strc-pag.mkiv" name="prevrealpagenumber"/>
+ <cd:command file="strc-pag.mkiv" name="prevuserpagenumber"/>
+ <cd:command file="strc-pag.mkiv" name="prevsubpagenumber"/>
+ <cd:command file="strc-pag.mkiv" name="nextrealpagenumber"/>
+ <cd:command file="strc-pag.mkiv" name="nextuserpagenumber"/>
+ <cd:command file="strc-pag.mkiv" name="nextsubpagenumber"/>
+ <cd:command file="strc-pag.mkiv" name="firstrealpage"/>
+ <cd:command file="strc-pag.mkiv" name="firstuserpage"/>
+ <cd:command file="strc-pag.mkiv" name="firstsubpage"/>
+ <cd:command file="strc-pag.mkiv" name="prevrealpage"/>
+ <cd:command file="strc-pag.mkiv" name="prevuserpage"/>
+ <cd:command file="strc-pag.mkiv" name="prevsubpage"/>
+ <cd:command file="strc-pag.mkiv" name="nextrealpage"/>
+ <cd:command file="strc-pag.mkiv" name="nextuserpage"/>
+ <cd:command file="strc-pag.mkiv" name="nextsubpage"/>
+ <cd:command file="strc-pag.mkiv" name="lastrealpage"/>
+ <cd:command file="strc-pag.mkiv" name="lastuserpage"/>
+ <cd:command file="strc-pag.mkiv" name="lastsubpage"/>
+ <cd:command file="strc-pag.mkiv" name="realpagenumber"/>
+ <cd:command file="strc-pag.mkiv" name="userpagenumber"/>
+ <cd:command file="strc-pag.mkiv" name="subpagenumber"/>
+ <cd:command file="strc-pag.mkiv" name="pagenumber"/>
+ <cd:command file="strc-pag.mkiv" name="prefixedpagenumber"/>
+ <cd:command file="strc-pag.mkiv" name="incrementpagenumber"/>
+ <cd:command file="strc-pag.mkiv" name="incrementsubpagenumber"/>
+ <cd:command file="strc-pag.mkiv" name="decrementpagenumber"/>
+ <cd:command file="strc-pag.mkiv" name="decrementsubpagenumber"/>
+ <cd:command file="strc-pag.mkiv" name="completepagenumber"/>
+ <cd:command file="strc-pag.mkiv" name="placepagenumber"/>
+ </cd:interface>
+ <cd:interface file="i-pageselection.xml">
+ <cd:command file="page-sel.mkvi" name="insertpages">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:number"/>
+ </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:parameter name="category">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-sel.mkvi" name="filterpages">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords list="yes">
+ <cd:constant type="even"/>
+ <cd:constant type="odd"/>
+ <cd:constant type="cd:number"/>
+ <cd:constant method="range" prefix="cd:number" type="cd:number"/>
+ </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:parameter name="category">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-sel.mkvi" name="copypages">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="marking">
+ <cd:constant type="on"/>
+ <cd:constant default="yes" type="off"/>
+ </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 file="page-sel.mkvi" name="combinepages">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="alternative">
+ <cd:constant default="yes" type="a"/>
+ <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 default="yes" type="off"/>
+ </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 file="page-sel.mkvi" name="slicepages">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <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>
+ <cd:interface file="i-pageshift.xml">
+ <cd:command file="page-imp.mkiv" name="definepageshift">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="horizontal"/>
+ <cd:constant type="vertical"/>
+ </cd:keywords>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-imp.mkiv" name="setuppageshift">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant default="yes" type="page"/>
+ <cd:constant type="paper"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-pagestate.xml">
+ <cd:command file="core-dat.mkiv" name="definepagestate">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppagestate"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-dat.mkiv" name="setuppagestate">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="delay">
+ <cd:constant default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-dat.mkiv" name="setpagestate">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-dat.mkiv" name="pagestaterealpage">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-dat.mkiv" name="setpagestaterealpageno">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-pairedbox.xml">
+ <cd:command file="pack-com.mkiv" name="definepairedbox">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppairedbox"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-com.mkiv" name="setuppairedbox">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </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="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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-com.mkiv" name="placepairedbox">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppairedbox"/>
+ </cd:assignments>
+ <cd:content/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-com.mkiv" name="placepairedbox" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppairedbox"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-com.mkiv" generated="yes" name="setuppairedbox" variant="instance">
+ <cd:sequence>
+ <cd:string value="setup"/>
+ <cd:instance value="pairedbox"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuppairedbox"/>
+ </cd:assignments>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="pack-com.mkiv" generated="yes" name="placepairedbox" variant="instance">
+ <cd:sequence>
+ <cd:string value="place"/>
+ <cd:instance value="pairedbox"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppairedbox"/>
+ </cd:assignments>
+ <cd:content/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="pack-com.mkiv" generated="yes" name="placepairedbox" type="environment" variant="instance">
+ <cd:sequence>
+ <cd:string value="place"/>
+ <cd:instance value="pairedbox"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppairedbox"/>
+ </cd:assignments>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="pack-com.mkiv" name="placeontopofeachother">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-com.mkiv" name="placesidebyside">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-papersize.xml">
+ <cd:command file="page-lay.mkiv" name="definepapersize">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="page-lay.mkiv" name="definepapersize" variant="name">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="page-lay.mkiv" name="setuppapersize" variant="name">
+ <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 file="page-lay.mkiv" name="setuppapersize">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 default="yes" type="normal"/>
+ <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 default="yes" type="max"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-lay.mkiv" name="setuppaper">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuppapersize"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-lay.mkiv" name="adaptpapersize">
+ <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>
+ <cd:interface file="i-paragraph.xml">
+ <cd:command file="strc-tag.mkiv" name="defineparagraph">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupparagraph"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-tag.mkiv" name="setupparagraph">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </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 file="strc-tag.mkiv" name="paragraph" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupparagraph"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-tag.mkiv" name="par" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupparagraph"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command begin="b" end="e" file="strc-tag.mkiv" name="par" type="environment"/>
+ <cd:command file="spac-par.mkiv" name="setupparagraphintro">
+ <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>
+ <cd:interface file="i-paragraphnumber.xml">
+ <cd:command file="page-par.mkiv" name="setupparagraphnumbering">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant type="start"/>
+ <cd:constant default="yes" type="stop"/>
+ <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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-paragraphs.xml">
+ <cd:command file="tabl-mis.mkiv" name="defineparagraphs">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupparagraphs"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-mis.mkiv" name="setupparagraphs">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 default="yes" type="fit"/>
+ </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 default="yes" type="off"/>
+ </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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-mis.mkiv" name="setupparagraphs" variant="assignment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant method="range" prefix="cd:name" 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 default="yes" type="fit"/>
+ </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 default="yes" type="off"/>
+ </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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-mis.mkiv" name="paragraphs" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-mis.mkiv" name="nextparagraphs"/>
+ <cd:command file="tabl-mis.mkiv" generated="yes" name="paragraphs" type="environment" variant="example">
+ <cd:sequence>
+ <cd:variable value="paragraphs"/>
+ </cd:sequence>
+ </cd:command>
+ <cd:command file="tabl-mis.mkiv" generated="yes" name="paragraphs" variant="example">
+ <cd:sequence>
+ <cd:variable value="paragraphs"/>
+ </cd:sequence>
+ </cd:command>
+ <cd:command file="tabl-mis.mkiv" generated="yes" name="nextparagraphs" variant="example">
+ <cd:sequence>
+ <cd:string value="next"/>
+ <cd:variable value="paragraphs"/>
+ </cd:sequence>
+ </cd:command>
+ <cd:command file="tabl-mis.mkiv" name="paragraphscell" type="environment"/>
+ </cd:interface>
+ <cd:interface file="i-parallel.xml">
+ <cd:command file="buff-par.mkvi" name="defineparallel">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-par.mkvi" name="setupparallel">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="buff-par.mkvi" name="placeparallel">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupparallel"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-par.mkvi" name="doifelseparallel">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:name"/>
+ <cd:constant default="yes" type="all"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-par.mkvi" name="doifparallelelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:name"/>
+ <cd:constant default="yes" type="all"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-par.mkvi" name="resetparallel">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ <cd:constant default="yes" type="all"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-par.mkvi" generated="yes" name="parallel" type="environment" variant="example">
+ <cd:sequence>
+ <cd:variable value="parallel"/>
+ </cd:sequence>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-parbuilder.xml">
+ <cd:command file="typo-bld.mkiv" name="defineparbuilder">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-bld.mkiv" name="parbuilder" type="environment">
+ <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 file="typo-bld.mkiv" name="setmainparbuilder">
+ <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>
+ <cd:interface file="i-pdf.xml">
+ <cd:command file="back-pdf.mkiv" name="pdfbackendsetcatalog">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="back-pdf.mkiv" name="pdfbackendsetinfo">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="back-pdf.mkiv" name="pdfbackendsetname">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="back-pdf.mkiv" name="pdfbackendsetpageattribute">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="back-pdf.mkiv" name="pdfbackendsetpagesattribute">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="back-pdf.mkiv" name="pdfbackendsetpageresource">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="back-pdf.mkiv" name="pdfbackendsetextgstate">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="back-pdf.mkiv" name="pdfbackendsetcolorspace">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="back-pdf.mkiv" name="pdfbackendsetpattern">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="back-pdf.mkiv" name="pdfbackendsetshade">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="back-pdf.mkiv" name="pdfbackendcurrentresources"/>
+ <cd:command file="back-pdf.mkiv" name="pdfcolor">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="back-pdf.mkiv" name="PDFcolor">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="back-pdf.mkiv" name="TransparencyHack"/>
+ <cd:command file="pack-obj.mkiv" name="lastpredefinedsymbol"/>
+ <cd:command file="pack-obj.mkiv" name="predefinesymbol">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="back-pdf.mkiv" name="pdfbackendactualtext">
+ <cd:arguments>
+ <cd:content/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="back-pdf.mkiv" name="pdfactualtext">
+ <cd:arguments>
+ <cd:content/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="attr-neg.mkiv" name="negative" type="environment"/>
+ <cd:command file="attr-neg.mkiv" name="positive" type="environment"/>
+ <cd:command file="scrn-pag.mkvi" name="setuppagetransitions">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant default="yes" type="reset"/>
+ <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>
+ <cd:interface file="i-penalty.xml">
+ <cd:command file="spac-ver.mkiv" name="resetpenalties">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="setpenalties">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="keeplinestogether">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="setdefaultpenalties"/>
+ </cd:interface>
+ <cd:interface file="i-periods.xml">
+ <cd:command file="enco-ini.mkiv" name="setupperiods">
+ <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 file="enco-ini.mkiv" name="periods">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="enco-ini.mkiv" name="periods" variant="assignment">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupperiods"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="enco-ini.mkiv" name="unknown"/>
+ </cd:interface>
+ <cd:interface file="i-phantom.xml">
+ <cd:command file="supp-box.mkiv" name="phantom">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="hphantom">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="vphantom">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-box.mkiv" name="phantombox">
+ <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>
+ <cd:interface file="i-placement.xml">
+ <cd:command file="pack-mis.mkiv" name="defineplacement">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupplacement"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-mis.mkiv" name="setupplacement">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </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="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 default="yes" type="off"/>
+ </cd:parameter>
+ <cd:parameter name="depthcorrection">
+ <cd:constant type="on"/>
+ <cd:constant default="yes" type="off"/>
+ </cd:parameter>
+ <cd:parameter name="margin">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant default="yes" type="standard"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-mis.mkiv" name="placement">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupplacement"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-mis.mkiv" generated="yes" name="placement" variant="example">
+ <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>
+ <cd:interface file="i-position.xml">
+ <cd:command file="anch-pgr.mkiv" name="doifpositionaction">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pgr.mkiv" name="doifelsepositionaction">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pgr.mkiv" name="doifpositionactionelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pgr.mkiv" name="dopositionaction">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pgr.mkiv" name="positionoverlay">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pgr.mkiv" name="MPoverlayanchor">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pgr.mkiv" name="positionregionoverlay">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pgr.mkiv" name="positionoverlay" type="environment">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pgr.mkiv" name="MPpositiongraphic" type="environment">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" list="yes" optional="yes">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pgr.mkiv" name="MPpositiongraphic">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="anch-pgr.mkiv" name="MPpositionmethod" type="environment">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pgr.mkiv" name="setMPpositiongraphic">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="anch-pgr.mkiv" name="setMPpositiongraphicrange">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="anch-pgr.mkiv" name="MPgetposboxes">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pgr.mkiv" name="MPgetmultipars">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pgr.mkiv" name="MPgetmultishape">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="MPp">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="MPr">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="MPc">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="MPn">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="MPx">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="MPy">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="MPw">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="MPh">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="MPd">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="MPwhd">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="MPxy">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="MPll">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="MPlr">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="MPur">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="MPul">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="MPpos">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="MPls">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="MPrs">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="MPpardata">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="MPxywhd">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="MPposset">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="MPpage">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="MPregion">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="MPcolumn">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="MPanchor">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="MPleftskip">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="MPrightskip">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="MPplus">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="MPv">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="MPrest">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="MPvv">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="setpositiononly">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="setposition">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="setpositiondata">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="setpositionbox">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="setpositionstrut">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="setpositiondataplus">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="setpositionplus">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="copyposition">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="doifposition">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="doifelseposition">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="doifpositionelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="doifelsepositiononpage">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="doifpositiononpageelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="xypos">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="hpos">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="vpos">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="bpos">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="epos">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="tracepositions"/>
+ <cd:command file="anch-pos.mkiv" name="enableparpositions"/>
+ <cd:command file="anch-pos.mkiv" name="disableparpositions"/>
+ <cd:command file="anch-pos.mkiv" name="doifelseoverlapping">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="doifoverlappingelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="doifelsepositionsonsamepage">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="doifpositionsonsamepageelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="doifelsepositionsonthispage">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="doifpositionsonthispageelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="doifelsepositionsused">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-pos.mkiv" name="doifpositionsusedelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-positionbar.xml">
+ <cd:command file="pack-bar.mkiv" name="setuppositionbar">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </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 file="pack-bar.mkiv" name="horizontalpositionbar">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuppositionbar"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-bar.mkiv" name="verticalpositionbar">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuppositionbar"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-bar.mkiv" name="horizontalgrowingbar">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuppositionbar"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-bar.mkiv" name="verticalgrowingbar">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuppositionbar"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-positioning.xml">
+ <cd:command file="pack-pos.mkiv" name="definepositioning">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppositioning"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-pos.mkiv" name="setuppositioning">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="offset">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </cd:parameter>
+ <cd:parameter name="unit">
+ <cd:constant type="ex"/>
+ <cd:constant type="em"/>
+ <cd:constant type="pt"/>
+ <cd:constant type="in"/>
+ <cd:constant default="yes" 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="state">
+ <cd:constant default="yes" type="start"/>
+ <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 default="yes" type="absolute"/>
+ <cd:constant type="relative"/>
+ </cd:parameter>
+ <cd:parameter name="ystep">
+ <cd:constant default="yes" type="absolute"/>
+ <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 file="pack-pos.mkiv" name="positioning" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppositioning"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-pos.mkiv" name="position">
+ <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>
+ <cd:interface file="i-postponing.xml">
+ <cd:command file="page-pst.mkiv" name="postponing" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant method="none" prefix="cd:sign" type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-processor.xml">
+ <cd:command file="typo-prc.mkvi" name="defineprocessor">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupprocessor"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-prc.mkvi" name="setupprocessor">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant default="yes" type="start"/>
+ <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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-prc.mkvi" name="applyprocessor">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-profile.xml">
+ <cd:command file="spac-prf.mkvi" name="defineprofile">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupprofile"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-prf.mkvi" name="setupprofile">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 default="yes" type="strict"/>
+ <cd:constant type="fixed"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-prf.mkvi" name="setprofile">
+ <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 file="spac-prf.mkvi" name="resetprofile"/>
+ <cd:command file="spac-prf.mkvi" name="useprofileparameter">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-prf.mkvi" name="profiledbox">
+ <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 file="spac-prf.mkvi" name="profilegivenbox">
+ <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:keywords delimiters="none">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-publication.xml">
+ <cd:command file="publ-ini.mkiv" name="btxrenderingdefinitions" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="loadbtxdefinitionfile">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="loadbtxreplacementfile">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="definebtx">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupbtx"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="setupbtx">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 default="yes" type="start"/>
+ <cd:constant type="stop"/>
+ <cd:constant type="all"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <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:parameter>
+ <cd:parameter name="sorttype">
+ <cd:constant default="yes" type="normal"/>
+ <cd:constant type="reverse"/>
+ </cd:parameter>
+ <cd:parameter name="compress">
+ <cd:constant default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="default">
+ <cd:constant type="default"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="setupbtx" variant="name">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="usingbtxspecification" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="definebtxdataset">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupbtxdataset"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="setupbtxdataset">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="language">
+ <cd:constant type="cd:language"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="definebtxregister">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupbtxregister"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="setupbtxregister">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="definebtxrendering">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupbtxrendering"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="setupbtxrendering">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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="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="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="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 file="publ-ini.mkiv" name="usebtxdataset">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <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 file="publ-ini.mkiv" name="publication" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="publ-ini.mkiv" name="setupbtxlist">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="completebtxrendering">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupbtxrendering"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="placebtxrendering">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupbtxrendering"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="completelistofpublications">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupbtxrendering"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="placelistofpublications">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupbtxrendering"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxhybridcite">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <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: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:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxhybridcite" variant="userdata">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <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: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:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxhybridcite" variant="alternative">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <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:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxhybridcite" variant="direct">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxlistcitation">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <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: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:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxlistcitation" variant="userdata">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <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: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:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxlistcitation" variant="alternative">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <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:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxtextcitation">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <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: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:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxtextcitation" variant="userdata">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <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: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:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxtextcitation" variant="alternative">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <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:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxalwayscitation">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <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: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:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxalwayscitation" variant="userdata">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <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: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:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxalwayscitation" variant="alternative">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <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:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="bthiddencitation">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="listcitation">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <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: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:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="listcitation" variant="userdata">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <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: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:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="listcitation" variant="alternative">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <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:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="listcite">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <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: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:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="listcite" variant="userdata">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <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: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:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="listcite" variant="alternative">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <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:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="textcitation">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <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: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:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="textcitation" variant="userdata">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <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: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:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="textcitation" variant="alternative">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <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:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="textcite">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <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: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:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="textcite" variant="userdata">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <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: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:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="textcite" variant="alternative">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <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:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="alwayscitation">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <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: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:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="alwayscitation" variant="userdata">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <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: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:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="alwayscitation" variant="alternative">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <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:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="alwayscite">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <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: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:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="alwayscite" variant="userdata">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <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: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:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="alwayscite" variant="alternative">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <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:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="hiddencitation">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="hiddencite">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="citation">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <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: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:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="citation" variant="userdata">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <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: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:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="citation" variant="alternative">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <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:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="citation" variant="direct">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="cite">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <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: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:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="cite" variant="userdata">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <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: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:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="cite" variant="alternative">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <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:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="cite" variant="direct">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="nocitation">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="nocitation" variant="direct">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="nocite">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="nocite" variant="direct">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="savebtxdataset">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <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 method="range" prefix="cd:sectionblock" type="all"/>
+ <cd:constant method="range" prefix="cd:sectionblock" type="reference"/>
+ <cd:constant method="range" prefix="cd:sectionblock" type="current"/>
+ <cd:constant method="range" prefix="cd:sectionblock" type="previous"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="placecitation">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="usebtxdefinitions">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxfield">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <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:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxdetail">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <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:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxflush">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <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:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxdirect">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <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:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxfieldname">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <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:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxfieldtype">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <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:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxfoundname">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <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:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxfoundtype">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <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:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxauthorfield">
+ <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 file="publ-ini.mkiv" name="btxdoifelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <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:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxdoif">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <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:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxdoifnot">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <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:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxsetup">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxdoifelsesameaspreviouschecked">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="always"/>
+ <cd:constant type="doublesided"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <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:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxdoifelsesameasprevious">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <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:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxdoifelsecombiinlist">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxdoifsameaspreviouscheckedelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="always"/>
+ <cd:constant type="doublesided"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <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:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxdoifsameaspreviouselse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <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:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxdoifcombiinlistelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="currentbtxuservariable">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxdoifelseuservariable">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxdoifuservariableelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxremapauthor">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxflushauthor">
+ <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:keywords delimiters="braces">
+ <cd:constant type="author"/>
+ <cd:constant type="editor"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxflushsuffix"/>
+ <cd:command file="publ-ini.mkiv" name="btxflushauthorname">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="author"/>
+ <cd:constant type="editor"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxflushauthornormal">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="author"/>
+ <cd:constant type="editor"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxflushauthornormalshort">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="author"/>
+ <cd:constant type="editor"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxflushauthorinverted">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="author"/>
+ <cd:constant type="editor"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxflushauthorinvertedshort">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="author"/>
+ <cd:constant type="editor"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxsingularplural">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="editor"/>
+ <cd:constant type="producer"/>
+ <cd:constant type="director"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxsingularorplural">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="editor"/>
+ <cd:constant type="producer"/>
+ <cd:constant type="director"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxoneorrange">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="volume"/>
+ <cd:constant type="pages"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxfirstofrange">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="volume"/>
+ <cd:constant type="pages"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxloadjournalist">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxsavejournalist">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxaddjournal">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxexpandedjournal">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-ini.mkiv" name="btxabbreviatedjournal">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-tra.mkiv" name="showbtxdatasetfields">
+ <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: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:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-tra.mkiv" name="showbtxdatasetfields" variant="argument">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-tra.mkiv" name="showbtxdatasetcompleteness">
+ <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: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:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-tra.mkiv" name="showbtxdatasetcompleteness" variant="argument">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-tra.mkiv" name="showbtxdatasetauthors">
+ <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: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:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-tra.mkiv" name="showbtxdatasetauthors" variant="argument">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-tra.mkiv" name="showbtxhashedauthors">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-tra.mkiv" name="showbtxfields">
+ <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 file="publ-tra.mkiv" name="showbtxfields" variant="argument">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="publ-tra.mkiv" name="showbtxtables">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-random.xml">
+ <cd:command file="supp-ran.mkiv" name="getrandomcount">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-ran.mkiv" name="getrandomdimen">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-ran.mkiv" name="getrandomnumber">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-ran.mkiv" name="getrandomfloat">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-ran.mkiv" name="setrandomseed">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-ran.mkiv" name="getrandomseed">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command begin="push" end="pop" file="supp-ran.mkiv" name="randomseed" type="environment"/>
+ <cd:command file="supp-ran.mkiv" name="reuserandomseed"/>
+ <cd:command file="supp-ran.mkiv" name="randomnumber">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-ran.mkiv" name="mprandomnumber"/>
+ </cd:interface>
+ <cd:interface file="i-references.xml">
+ <cd:command file="strc-ref.mkvi" name="setupreferencing">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant default="yes" type="start"/>
+ <cd:constant type="stop"/>
+ </cd:parameter>
+ <cd:parameter name="expansion">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ <cd:constant type="xml"/>
+ </cd:parameter>
+ <cd:parameter name="autofile">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </cd:parameter>
+ <cd:parameter name="export">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" 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="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 default="yes" type="all"/>
+ </cd:parameter>
+ <cd:parameter name="separator">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="prefix">
+ <cd:constant type="+"/>
+ <cd:constant type="-"/>
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="textreference">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="pagereference">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="reference">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="setreference">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="usereferenceparameter">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="boxreference">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="hboxreference">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="vboxreference">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="contentreference">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="definereference">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="resetreference">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="setpagereference">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="doifelsereferencefound">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="doifreferencefoundelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="setupreferenceprefix">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="+"/>
+ <cd:constant type="-"/>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="setupglobalreferenceprefix">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="+"/>
+ <cd:constant type="-"/>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command begin="push" end="pop" file="strc-ref.mkvi" name="referenceprefix" type="environment">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="+"/>
+ <cd:constant type="-"/>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command begin="globalpush" end="globalpop" file="strc-ref.mkvi" name="referenceprefix" type="environment">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="+"/>
+ <cd:constant type="-"/>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="referenceprefix"/>
+ <cd:command file="strc-ref.mkvi" name="in">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="at">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="about">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="from">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="over">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="filterreference">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <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:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="getreferenceentry">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <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:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="getreference">
+ <cd:arguments>
+ <cd:keywords>
+ <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:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="ref">
+ <cd:arguments>
+ <cd:keywords>
+ <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:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="somewhere">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="docheckedpagestate">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="someplace">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="atpage">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="symbolreference">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="definereferenceformat">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupreferenceformat"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="setupreferenceformat">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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:constant type="default"/>
+ <cd:constant type="text"/>
+ <cd:constant type="title"/>
+ <cd:constant type="number"/>
+ <cd:constant type="page"/>
+ <cd:constant type="realpage"/>
+ </cd:parameter>
+ <cd:parameter name="setups">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="autocase">
+ <cd:constant default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="text">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" generated="yes" name="referenceformat" variant="example">
+ <cd:sequence>
+ <cd:variable value="referenceformat"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="goto">
+ <cd:arguments>
+ <cd:content/>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="goto" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="gotobox">
+ <cd:arguments>
+ <cd:content/>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="useurl">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:url"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="useURL">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:url"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="usefile">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="useexternaldocument">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="doifelseurldefined">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="doifurldefinedelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="doifelsefiledefined">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="doiffiledefinedelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="setupurl">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="url">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="defineprogram">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="setupprograms">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="program">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="definepage">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="gotopage">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ref.mkvi" name="setupreferencestructureprefix">
+ <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:constant type="cd:command"/>
+ <cd:constant method="apply" prefix="cd:processor" type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="prefixstopper">
+ <cd:constant type="cd:command"/>
+ <cd:constant method="apply" prefix="cd:processor" type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="prefixset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="prefixsegments">
+ <cd:constant type="cd:number"/>
+ <cd:constant method="range" prefix="cd:number" type="cd:number"/>
+ <cd:constant method="range" prefix="cd:number" type="*"/>
+ <cd:constant method="range" prefix="cd:number" type="all"/>
+ <cd:constant type="cd:section"/>
+ <cd:constant method="range" prefix="cd:section" type="cd:section"/>
+ <cd:constant method="range" prefix="cd:section" type="*"/>
+ <cd:constant method="range" prefix="cd:section" type="all"/>
+ </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:constant type="cd:command"/>
+ <cd:constant method="apply" prefix="cd:processor" type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="numberstopper">
+ <cd:constant type="cd:command"/>
+ <cd:constant method="apply" prefix="cd:processor" type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="numbersegments">
+ <cd:constant type="cd:number"/>
+ <cd:constant method="range" prefix="cd:number" type="cd:number"/>
+ <cd:constant method="range" prefix="cd:number" type="*"/>
+ <cd:constant method="range" prefix="cd:number" type="all"/>
+ </cd:parameter>
+ <cd:parameter name="numberseparatorset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="prefixconnector">
+ <cd:constant type="cd:command"/>
+ <cd:constant method="apply" prefix="cd:processor" type="cd:command"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-regime.xml">
+ <cd:command file="regi-ini.mkiv" name="currentregime"/>
+ <cd:command file="regi-ini.mkiv" name="disableregime"/>
+ <cd:command file="regi-ini.mkiv" name="enableregime">
+ <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 file="regi-ini.mkiv" name="regime" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:inherit name="enableregime"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-register.xml">
+ <cd:command file="strc-reg.mkiv" name="defineregister">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupregister"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-reg.mkiv" name="setupregister" variant="argument">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:number"/>
+ </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 default="yes" type="no"/>
+ <cd:constant type="xml"/>
+ </cd:parameter>
+ <cd:parameter name="ownnumber">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </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: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:parameter>
+ <cd:parameter name="compress">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ <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 default="yes" type="all"/>
+ <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:constant type="cd:command"/>
+ <cd:constant method="apply" prefix="cd:processor" type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="pageprefixstopper">
+ <cd:constant type="cd:command"/>
+ <cd:constant method="apply" prefix="cd:processor" type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="pageprefixset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="pageprefixsegments">
+ <cd:constant type="cd:number"/>
+ <cd:constant method="range" prefix="cd:number" type="cd:number"/>
+ <cd:constant method="range" prefix="cd:number" type="*"/>
+ <cd:constant method="range" prefix="cd:number" type="all"/>
+ <cd:constant type="cd:section"/>
+ <cd:constant method="range" prefix="cd:section" type="cd:section"/>
+ <cd:constant method="range" prefix="cd:section" type="*"/>
+ <cd:constant method="range" prefix="cd:section" type="all"/>
+ </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:constant type="cd:command"/>
+ <cd:constant method="apply" prefix="cd:processor" type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="pagestopper">
+ <cd:constant type="cd:command"/>
+ <cd:constant method="apply" prefix="cd:processor" type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="pagesegments">
+ <cd:constant type="cd:number"/>
+ <cd:constant method="range" prefix="cd:number" type="cd:number"/>
+ <cd:constant method="range" prefix="cd:number" type="*"/>
+ <cd:constant method="range" prefix="cd:number" type="all"/>
+ </cd:parameter>
+ <cd:parameter name="maxwidth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="indicator">
+ <cd:constant default="yes" 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="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 default="yes" type="pagenumber"/>
+ </cd:parameter>
+ <cd:parameter name="pagenumber">
+ <cd:constant default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="symbol">
+ <cd:constant type="a"/>
+ <cd:constant default="yes" type="n"/>
+ <cd:constant type="none"/>
+ <cd:constant type="1"/>
+ <cd:constant type="2"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="language">
+ <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:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="textstyle">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="textcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="pagestyle">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </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 default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="numberorder">
+ <cd:constant default="yes" type="numbers"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-reg.mkiv" name="setupregister">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ <cd:constant method="range" prefix="cd:name" type="cd:number"/>
+ </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 default="yes" type="no"/>
+ <cd:constant type="xml"/>
+ </cd:parameter>
+ <cd:parameter name="ownnumber">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </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: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:parameter>
+ <cd:parameter name="compress">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ <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 default="yes" type="all"/>
+ <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:constant type="cd:command"/>
+ <cd:constant method="apply" prefix="cd:processor" type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="pageprefixstopper">
+ <cd:constant type="cd:command"/>
+ <cd:constant method="apply" prefix="cd:processor" type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="pageprefixset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="pageprefixsegments">
+ <cd:constant type="cd:number"/>
+ <cd:constant method="range" prefix="cd:number" type="cd:number"/>
+ <cd:constant method="range" prefix="cd:number" type="*"/>
+ <cd:constant method="range" prefix="cd:number" type="all"/>
+ <cd:constant type="cd:section"/>
+ <cd:constant method="range" prefix="cd:section" type="cd:section"/>
+ <cd:constant method="range" prefix="cd:section" type="*"/>
+ <cd:constant method="range" prefix="cd:section" type="all"/>
+ </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:constant type="cd:command"/>
+ <cd:constant method="apply" prefix="cd:processor" type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="pagestopper">
+ <cd:constant type="cd:command"/>
+ <cd:constant method="apply" prefix="cd:processor" type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="pagesegments">
+ <cd:constant type="cd:number"/>
+ <cd:constant method="range" prefix="cd:number" type="cd:number"/>
+ <cd:constant method="range" prefix="cd:number" type="*"/>
+ <cd:constant method="range" prefix="cd:number" type="all"/>
+ </cd:parameter>
+ <cd:parameter name="maxwidth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="indicator">
+ <cd:constant default="yes" 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="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 default="yes" type="pagenumber"/>
+ </cd:parameter>
+ <cd:parameter name="pagenumber">
+ <cd:constant default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="symbol">
+ <cd:constant type="a"/>
+ <cd:constant default="yes" type="n"/>
+ <cd:constant type="none"/>
+ <cd:constant type="1"/>
+ <cd:constant type="2"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="language">
+ <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:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="textstyle">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="textcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="pagestyle">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </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 default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="numberorder">
+ <cd:constant default="yes" type="numbers"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-reg.mkiv" name="setupregisters" variant="argument">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupregister"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-reg.mkiv" name="setupregisters">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ <cd:constant method="range" prefix="cd:name" type="cd:number"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupregister"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-reg.mkiv" generated="yes" name="register" variant="instance">
+ <cd:sequence>
+ <cd:instance value="register"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ <cd:constant method="apply" prefix="cd:processor" type="cd:text"/>
+ </cd:keywords>
+ <cd:index list="yes"/>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="strc-reg.mkiv" generated="yes" name="register" variant="instance:ownnumber">
+ <cd:sequence>
+ <cd:instance value="register"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ <cd:constant method="apply" prefix="cd:processor" type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:index list="yes"/>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="strc-reg.mkiv" generated="yes" name="seeregister" variant="instance">
+ <cd:sequence>
+ <cd:string value="see"/>
+ <cd:instance value="register"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ <cd:constant method="apply" prefix="cd:processor" type="cd:text"/>
+ </cd:keywords>
+ <cd:index list="yes"/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ <cd:constant method="apply" prefix="cd:processor" type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="strc-reg.mkiv" generated="yes" name="placeregister" variant="instance">
+ <cd:sequence>
+ <cd:string value="place"/>
+ <cd:instance value="register"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupregister"/>
+ </cd:assignments>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="strc-reg.mkiv" generated="yes" name="completeregister" variant="instance">
+ <cd:sequence>
+ <cd:string value="complete"/>
+ <cd:instance value="register"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupregister"/>
+ </cd:assignments>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="strc-reg.mkiv" generated="yes" name="setupregister" variant="instance">
+ <cd:sequence>
+ <cd:string value="setup"/>
+ <cd:instance value="register"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupregister"/>
+ </cd:assignments>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="strc-reg.mkiv" name="startregister">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ <cd:constant method="apply" prefix="cd:processor" type="cd:text"/>
+ </cd:keywords>
+ <cd:index list="yes"/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-reg.mkiv" name="stopregister">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-reg.mkiv" name="setregisterentry">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 method="apply" prefix="cd:processor" type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="entries">
+ <cd:constant type="cd:text"/>
+ <cd:constant method="apply" prefix="cd:processor" type="cd:text"/>
+ </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: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 file="strc-reg.mkiv" name="finishregisterentry">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 method="apply" prefix="cd:processor" type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="entries">
+ <cd:constant type="cd:text"/>
+ <cd:constant method="apply" prefix="cd:processor" type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ </cd:assignments>
+ <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 file="strc-reg.mkiv" name="setstructurepageregister">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 method="apply" prefix="cd:processor" type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="entries">
+ <cd:constant type="cd:text"/>
+ <cd:constant method="apply" prefix="cd:processor" type="cd:text"/>
+ </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: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 file="strc-reg.mkiv" name="startstructurepageregister">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 method="apply" prefix="cd:processor" type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="entries">
+ <cd:constant type="cd:text"/>
+ <cd:constant method="apply" prefix="cd:processor" type="cd:text"/>
+ </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: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 file="strc-reg.mkiv" name="stopstructurepageregister">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-reg.mkiv" name="determineregistercharacteristics">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="language">
+ <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:parameter>
+ <cd:parameter name="method">
+ <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:parameter>
+ <cd:parameter name="numberorder">
+ <cd:constant default="yes" type="numbers"/>
+ </cd:parameter>
+ <cd:parameter name="compress">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ <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 default="yes" type="all"/>
+ <cd:constant type="cd:section"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-reg.mkiv" name="utilityregisterlength"/>
+ <cd:command file="strc-reg.mkiv" name="placeregister">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupregister"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-reg.mkiv" name="completeregister">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupregister"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-reg.mkiv" name="currentregisterpageuserdata">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-renderingwindow.xml">
+ <cd:command file="scrn-wid.mkvi" name="useexternalrendering">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="auto"/>
+ <cd:constant type="embed"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-wid.mkvi" name="setinternalrendering">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="auto"/>
+ <cd:constant type="embed"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-wid.mkvi" name="definerenderingwindow">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuprenderingwindow"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-wid.mkvi" name="setuprenderingwindow">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="scrn-wid.mkvi" name="placerenderingwindow">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-replacement.xml">
+ <cd:command file="lang-rep.mkiv" name="replaceword">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="lang-rep.mkiv" name="setreplacement">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="reset"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="lang-rep.mkiv" name="resetreplacement"/>
+ </cd:interface>
+ <cd:interface file="i-rotatation.xml">
+ <cd:command file="grph-trf.mkiv" name="mirror">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="grph-trf.mkiv" name="setuprotate">
+ <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 file="grph-trf.mkiv" name="rotate">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuprotate"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="grph-trf.mkiv" name="dorotatebox">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-scale.xml">
+ <cd:command file="grph-trf.mkiv" name="definescale">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupscale"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="grph-trf.mkiv" name="setupscale">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 default="yes" type="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 file="grph-trf.mkiv" name="scale">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupscale"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="grph-trf.mkiv" name="fastscale">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="grph-trf.mkiv" name="fastsxsy">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-script.xml">
+ <cd:command file="scrp-ini.mkvi" name="definescript">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupscript"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrp-ini.mkvi" name="setupscript">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="scrp-ini.mkvi" name="setupscripts">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupscript"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrp-ini.mkvi" name="setscript">
+ <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 file="scrp-ini.mkvi" name="resetscript"/>
+ <cd:command file="scrp-ini.mkvi" name="script" type="environment">
+ <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 file="scrp-ini.mkvi" generated="yes" name="script" varianet="instance">
+ <cd:sequence>
+ <cd:instance value="script"/>
+ </cd:sequence>
+ <cd:instances/>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-section.xml">
+ <cd:command file="strc-sec.mkiv" name="definehead">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:section"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuphead"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-sec.mkiv" name="setuphead">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:section"/>
+ </cd:keywords>
+ <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 default="yes" type="no"/>
+ <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:constant type="cd:command"/>
+ <cd:constant method="apply" prefix="cd:processor" type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="sectionstopper">
+ <cd:constant type="cd:command"/>
+ <cd:constant method="apply" prefix="cd:processor" type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="sectionset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="sectionsegments">
+ <cd:constant type="cd:number"/>
+ <cd:constant method="range" prefix="cd:number" type="cd:number"/>
+ <cd:constant method="range" prefix="cd:number" type="*"/>
+ <cd:constant method="range" prefix="cd:number" type="all"/>
+ <cd:constant type="cd:section"/>
+ <cd:constant method="range" prefix="cd:section" type="cd:section"/>
+ <cd:constant method="range" prefix="cd:section" type="*"/>
+ <cd:constant method="range" prefix="cd:section" type="all"/>
+ </cd:parameter>
+ <cd:parameter name="referenceprefix">
+ <cd:constant type="+"/>
+ <cd:constant type="-"/>
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="textstyle">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="textcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="numberstyle">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </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 default="yes" type="no"/>
+ </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 default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="list"/>
+ <cd:constant type="empty"/>
+ </cd:parameter>
+ <cd:parameter name="placehead">
+ <cd:constant default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="hidden"/>
+ <cd:constant type="empty"/>
+ </cd:parameter>
+ <cd:parameter name="number">
+ <cd:constant default="yes" type="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="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:parameter>
+ <cd:parameter name="text">
+ <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:parameter>
+ <cd:parameter name="footer">
+ <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: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 default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="aligntitle">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ <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: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: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 default="yes" type="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 default="yes" type="none"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="margin">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="indentnext">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="auto"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="text"/>
+ <cd:constant type="paragraph"/>
+ <cd:constant default="yes" type="normal"/>
+ <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="margintext"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <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="textdistance">
+ <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 file="strc-sec.mkiv" name="setupheads">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:section"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuphead"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-sec.mkiv" generated="yes" name="section" variant="instance">
+ <cd:sequence>
+ <cd:instance value="section"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ <cd:instances>
+ <cd:constant value="chapter"/>
+ <cd:constant value="section"/>
+ <cd:constant value="subsection"/>
+ <cd:constant value="subsubsection"/>
+ <cd:constant value="subsubsubsection"/>
+ <cd:constant value="subsubsubsubsection"/>
+ <cd:constant value="title"/>
+ <cd:constant value="subject"/>
+ <cd:constant value="subsubject"/>
+ <cd:constant value="subsubsubject"/>
+ <cd:constant value="subsubsubsubject"/>
+ <cd:constant value="subsubsubsubsubject"/>
+ </cd:instances>
+ </cd:command>
+ <cd:command file="strc-sec.mkiv" generated="yes" name="section" variant="instance:ownnumber">
+ <cd:sequence>
+ <cd:instance value="section"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ <cd:instances>
+ <cd:constant value="chapter"/>
+ <cd:constant value="section"/>
+ <cd:constant value="subsection"/>
+ <cd:constant value="subsubsection"/>
+ <cd:constant value="subsubsubsection"/>
+ <cd:constant value="subsubsubsubsection"/>
+ <cd:constant value="title"/>
+ <cd:constant value="subject"/>
+ <cd:constant value="subsubject"/>
+ <cd:constant value="subsubsubject"/>
+ <cd:constant value="subsubsubsubject"/>
+ <cd:constant value="subsubsubsubsubject"/>
+ </cd:instances>
+ </cd:command>
+ <cd:command file="strc-sec.mkiv" generated="yes" name="section" variant="instance:assignment">
+ <cd:sequence>
+ <cd:instance value="section"/>
+ </cd:sequence>
+ <cd:arguments>
+ <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:arguments>
+ <cd:instances>
+ <cd:constant value="chapter"/>
+ <cd:constant value="section"/>
+ <cd:constant value="subsection"/>
+ <cd:constant value="subsubsection"/>
+ <cd:constant value="subsubsubsection"/>
+ <cd:constant value="subsubsubsubsection"/>
+ <cd:constant value="title"/>
+ <cd:constant value="subject"/>
+ <cd:constant value="subsubject"/>
+ <cd:constant value="subsubsubject"/>
+ <cd:constant value="subsubsubsubject"/>
+ <cd:constant value="subsubsubsubsubject"/>
+ </cd:instances>
+ </cd:command>
+ <cd:command file="strc-sec.mkiv" generated="yes" name="section" type="environment" variant="instance">
+ <cd:sequence>
+ <cd:instance value="section"/>
+ </cd:sequence>
+ <cd:arguments>
+ <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:assignments list="yes" optional="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ <cd:instances>
+ <cd:constant value="chapter"/>
+ <cd:constant value="section"/>
+ <cd:constant value="subsection"/>
+ <cd:constant value="subsubsection"/>
+ <cd:constant value="subsubsubsection"/>
+ <cd:constant value="subsubsubsubsection"/>
+ <cd:constant value="title"/>
+ <cd:constant value="subject"/>
+ <cd:constant value="subsubject"/>
+ <cd:constant value="subsubsubject"/>
+ <cd:constant value="subsubsubsubject"/>
+ <cd:constant value="subsubsubsubsubject"/>
+ </cd:instances>
+ </cd:command>
+ <cd:command file="strc-sec.mkiv" name="namedsection" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:section"/>
+ </cd:keywords>
+ <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: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 file="strc-sec.mkiv" name="definesection">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-sec.mkiv" name="placeheadtext">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:section"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-sec.mkiv" name="placeheadnumber">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:section"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-sec.mkiv" name="setupheadnumber">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:section"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant method="none" prefix="cd:sign" type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-sec.mkiv" name="determineheadnumber">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:section"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-sec.mkiv" name="currentheadnumber"/>
+ <cd:command file="strc-sec.mkiv" name="namedheadnumber">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:section"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-sec.mkiv" name="somenamedheadnumber">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:section"/>
+ </cd:keywords>
+ <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 file="strc-sec.mkiv" name="headnumber">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:section"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="previous"/>
+ <cd:constant default="yes" type="current"/>
+ <cd:constant type="next"/>
+ <cd:constant type="first"/>
+ <cd:constant type="last"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-sec.mkiv" name="someheadnumber">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:section"/>
+ </cd:keywords>
+ <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 file="strc-sec.mkiv" name="namedstructureheadlocation">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:section"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-sec.mkiv" name="structurenumber"/>
+ <cd:command file="strc-sec.mkiv" name="structuretitle"/>
+ <cd:command file="strc-sec.mkiv" name="structurevariable">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-sec.mkiv" name="structureuservariable">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-sec.mkiv" name="namedstructurevariable">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:section"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-sec.mkiv" name="namedstructureuservariable">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:section"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-lev.mkvi" name="definesectionlevels">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:section"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-lev.mkvi" name="sectionlevel" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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: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 file="strc-lev.mkvi" name="subjectlevel" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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: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 file="strc-ren.mkiv" name="defineheadalternative">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupheadalternative"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ren.mkiv" name="setupheadalternative">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="alternative">
+ <cd:constant type="horizontal"/>
+ <cd:constant default="yes" type="vertical"/>
+ <cd:constant type="somewhere"/>
+ </cd:parameter>
+ <cd:parameter name="renderingsetup">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ren.mkiv" name="localheadsetup" type="environment"/>
+ <cd:command file="strc-ren.mkiv" name="headhbox">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ren.mkiv" name="headvbox">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-ren.mkiv" name="headreferenceattributes"/>
+ <cd:command file="strc-ren.mkiv" name="headnumbercontent"/>
+ <cd:command file="strc-ren.mkiv" name="headtextcontent"/>
+ <cd:command file="strc-ren.mkiv" name="headwidth"/>
+ <cd:command file="strc-ren.mkiv" name="headtextwidth"/>
+ <cd:command file="strc-ren.mkiv" name="headnumberwidth"/>
+ <cd:command file="strc-ren.mkiv" name="headnumberdistance"/>
+ <cd:command file="strc-ren.mkiv" name="headtextdistance"/>
+ <cd:command file="strc-ren.mkiv" name="headsetupspacing"/>
+ </cd:interface>
+ <cd:interface file="i-sectionblock.xml">
+ <cd:command file="strc-sbe.mkiv" name="definesectionblock">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupsectionblock"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-sbe.mkiv" name="setupsectionblock">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-sbe.mkiv" name="setsectionblock">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="strc-sbe.mkiv" name="sectionblock" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="strc-sbe.mkiv" generated="yes" name="sectionblock" type="environment" variant="instance">
+ <cd:sequence>
+ <cd:instance 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:instances/>
+ </cd:command>
+ <cd:command file="strc-sbe.mkiv" name="sectionblockenvironment" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-selector.xml">
+ <cd:command file="core-env.mkiv" name="defineselector">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupselector"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="setupselector">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="core-env.mkiv" name="select">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="core-env.mkiv" name="directselect">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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>
+ <cd:interface file="i-setups.xml">
+ <cd:command file="core-env.mkiv" name="setups">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="setups" variant="direct">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="setup">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="setup" variant="direct">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="directsetup">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="fastsetup">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="texsetup">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="luasetup">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="systemsetups">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="resetsetups">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="showsetupsdefinition">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="setupwithargument">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="fastsetupwithargument">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="setupwithargumentswapped">
+ <cd:arguments>
+ <cd:content/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="fastsetupwithargumentswapped">
+ <cd:arguments>
+ <cd:content/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="usesetupsparameter">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="autosetups">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="doprocesslocalsetups">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="doifelsesetups">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="doifsetupselse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="doifsetups">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="doifnotsetups">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="luasetups" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="grid"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="luasetups" type="environment" variant="string">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="xmlsetups" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="grid"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="xmlsetups" type="environment" variant="string">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="rawsetups" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="grid"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="rawsetups" type="environment" variant="string">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="localsetups" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="grid"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="localsetups" type="environment" variant="string">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="setups" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="grid"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="setups" type="environment" variant="string">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-shift.xml">
+ <cd:command file="node.rul.mkiv" name="defineshift">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupshift"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="node-rul.mkiv" name="setupshift">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="continue">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </cd:parameter>
+ <cd:parameter name="unit">
+ <cd:constant default="yes" 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: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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="node-rul.mkiv" generated="yes" name="shift" variant="instance">
+ <cd:sequence>
+ <cd:instance value="shift"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="node-rul.mkiv" name="shift" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-sidebar.xml">
+ <cd:command file="anch-bar.mkiv" name="definesidebar">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupsidebar"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-bar.mkiv" name="setupsidebar">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="anch-bar.mkiv" name="sidebar" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupsidebar"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-bar.mkiv" name="setupmarginrule">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupsidebar"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-bar.mkiv" name="setupmarginrules">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupmarginrule"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-bar.mkiv" name="marginrule" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-bar.mkiv" name="marginrule" type="environment" variant="assignment">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmarginrule"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-smash.xml">
+ <cd:command file="supp-box.mkiv" name="smashbox">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="smashboxed">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="hsmashbox">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="vsmashbox">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="hsmash">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="vsmash">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="hsmashed">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="vsmashed">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="smashedhbox">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="smashedvbox">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="supp-box.mkiv" name="smash">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="w"/>
+ <cd:constant default="yes" type="h"/>
+ <cd:constant default="yes" type="d"/>
+ <cd:constant type="t"/>
+ <cd:constant type="b"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-sort.xml">
+ <cd:command file="strc-syn.mkiv" name="definesorting">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:singular"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:plural"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="none"/>
+ <cd:constant type="cd:csname"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-syn.mkiv" name="setupsorting">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:singular"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="expansion">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ <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: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:parameter>
+ <cd:parameter name="method">
+ <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:parameter>
+ <cd:parameter name="criterium">
+ <cd:constant type="current"/>
+ <cd:constant type="previous"/>
+ <cd:constant type="local"/>
+ <cd:constant type="text"/>
+ <cd:constant default="yes" type="all"/>
+ <cd:constant type="cd:section"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="textstyle">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="textcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="synonymstyle">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="synonymcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-syn.mkiv" generated="yes" name="sorting" variant="instance">
+ <cd:sequence>
+ <cd:instance value="sorting"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="strc-syn.mkiv" name="definesort">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:singular"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-syn.mkiv" generated="yes" name="placelistofsorts" variant="instance">
+ <cd:sequence>
+ <cd:string value="placelistof"/>
+ <cd:instance value="sorts"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupsorting"/>
+ </cd:assignments>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="strc-syn.mkiv" generated="yes" name="completelistofsorts" variant="instance">
+ <cd:sequence>
+ <cd:string value="completelistof"/>
+ <cd:instance value="sorts"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupsorting"/>
+ </cd:assignments>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="strc-syn.mkiv" name="doifelsecurrentsortingused">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-syn.mkiv" name="resetusedsortings">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:singular"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-syn.mkiv" name="registersort">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:singular"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-syn.mkiv" name="placelistofsorts">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:singular"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupsorting"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-syn.mkiv" name="completelistofsorts">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:singular"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupsorting"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-soundtrack.xml">
+ <cd:command file="scrn-wid.mkvi" name="setupexternalsoundtracks">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="option">
+ <cd:constant type="repeat"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-wid.mkvi" name="useexternalsoundtrack">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-wid.mkvi" name="checksoundtrack">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-spellchecking.xml">
+ <cd:command file="lang-wrd.mkiv" name="setupspellchecking">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant type="start"/>
+ <cd:constant defult="yes" type="stop"/>
+ </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 file="lang-wrd.mkiv" name="loadspellchecklist">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-startstop.xml">
+ <cd:command file="core-sys.mkiv" name="definestartstop">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupstartstop"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-sys.mkiv" name="setupstartstop">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </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="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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-sys.mkiv" generated="yes" name="startstop" type="environment" variant="example">
+ <cd:sequence>
+ <cd:variable value="startstop"/>
+ </cd:sequence>
+ </cd:command>
+ <cd:command file="core-sys.mkiv" name="startstop" type="environment">
+ <cd:sequence>
+ <cd:string value="​"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-sys.mkiv" generated="yes" name="startstop" variant="example">
+ <cd:sequence>
+ <cd:variable value="startstop"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-stream.xml">
+ <cd:command file="page-str.mkiv" name="currentoutputstream"/>
+ <cd:command file="page-str.mkiv" name="ifinoutputstream">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:delimiter name="else"/>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ <cd:delimiter name="fi"/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-str.mkiv" name="enableoutputstream">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-str.mkiv" name="disableoutputstream"/>
+ <cd:command file="page-str.mkiv" name="outputstream" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-str.mkiv" name="flushoutputstream">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-str.mkiv" name="outputstreambox">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-str.mkiv" name="outputstreamcopy">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-str.mkiv" name="outputstreamunvbox">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-str.mkiv" name="outputstreamunvcopy">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-str.mkiv" name="synchronizeoutputstreams">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-str.mkiv" name="pushoutputstream">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-string.xml">
+ <cd:command file="blob-ini.mkiv" name="wdofstring">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="blob-ini.mkiv" name="htofstring">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="blob-ini.mkiv" name="dpofstring">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="blob-ini.mkiv" name="hdofstring">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="blob-ini.mkiv" name="htdpofstring">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="blob-ini.mkiv" name="widthofstring">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="blob-ini.mkiv" name="heightofstring">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="blob-ini.mkiv" name="depthofstring">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="blob-ini.mkiv" name="heightanddepthofstring">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="blob-ini.mkiv" name="setwidthof">
+ <cd:arguments>
+ <cd:text/>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-strut.xml">
+ <cd:command file="supp-box.mkiv" name="strutdp"/>
+ <cd:command file="supp-box.mkiv" name="strutht"/>
+ <cd:command file="supp-box.mkiv" name="strutwd"/>
+ <cd:command file="supp-box.mkiv" name="struthtdp"/>
+ <cd:command file="spac-ver.mkiv" name="setupstruts">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <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:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="synchronizestrut">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <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:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="strut"/>
+ <cd:command file="spac-ver.mkiv" name="setstrut"/>
+ <cd:command file="spac-ver.mkiv" name="setcharstrut">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="setfontstrut"/>
+ <cd:command file="spac-ver.mkiv" name="setcapstrut"/>
+ <cd:command file="spac-ver.mkiv" name="setnostrut"/>
+ <cd:command file="spac-ver.mkiv" name="showstruts"/>
+ <cd:command file="spac-ver.mkiv" name="showcolorstruts"/>
+ <cd:command begin="beg" end="end" file="spac-ver.mkiv" name="strut" type="environment"/>
+ </cd:interface>
+ <cd:interface file="i-symbol.xml">
+ <cd:command file="symb-ini.mkiv" name="definesymbol">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="symb-ini.mkiv" name="doifelseinsymbolset">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="symb-ini.mkiv" name="doifinsymbolsetelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="symb-ini.mkiv" name="doifinsymbolset">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="symb-ini.mkiv" name="doifelsesymbolset">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="symb-ini.mkiv" name="doifsymbolsetelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="symb-ini.mkiv" name="symbol">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="symb-ini.mkiv" name="symbol" variant="direct">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="symb-ini.mkiv" name="directsymbol">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="symb-ini.mkiv" name="definefiguresymbol">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="symb-ini.mkiv" name="figuresymbol">
+ <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 file="symb-ini.mkiv" name="doifelsesymboldefined">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="symb-ini.mkiv" name="doifsymboldefinedelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="symb-ini.mkiv" name="symbolset" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="symb-ini.mkiv" name="setupsymbolset">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="symb-ini.mkiv" name="resetsymbolset"/>
+ <cd:command file="symb-ini.mkiv" name="usesymbols">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="symb-run.mkiv" name="showsymbolset">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-synonym.xml">
+ <cd:command file="strc-syn.mkiv" name="definesynonyms">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:singular"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:plural"/>
+ </cd:keywords>
+ <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 file="strc-syn.mkiv" name="setupsynonyms">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:singular"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="expansion">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ <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: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:parameter>
+ <cd:parameter name="method">
+ <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:parameter>
+ <cd:parameter name="criterium">
+ <cd:constant type="current"/>
+ <cd:constant type="previous"/>
+ <cd:constant type="local"/>
+ <cd:constant type="text"/>
+ <cd:constant default="yes" type="all"/>
+ <cd:constant type="cd:section"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="textstyle">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="textcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="synonymstyle">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="synonymcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-syn.mkiv" generated="yes" name="synonym" variant="instance">
+ <cd:sequence>
+ <cd:instance value="synonym"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="strc-syn.mkiv" name="definesynonym">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:singular"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-syn.mkiv" generated="yes" name="placelistofsynonyms" variant="instance">
+ <cd:sequence>
+ <cd:string value="placelistof"/>
+ <cd:instance value="synonyms"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupsynonyms"/>
+ </cd:assignments>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="strc-syn.mkiv" generated="yes" name="completelistofsynonyms" variant="instance">
+ <cd:sequence>
+ <cd:string value="completelistof"/>
+ <cd:instance value="synonyms"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupsynonyms"/>
+ </cd:assignments>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="strc-syn.mkiv" name="registersynonym">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:singular"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-syn.mkiv" name="doifelsecurrentsynonymused">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-syn.mkiv" name="doifelsecurrentsynonymshown">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-syn.mkiv" name="resetusedsynonyms">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:singular"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-syn.mkiv" name="resetshownsynonyms">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:singular"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-syn.mkiv" name="placelistofsynonyms">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:singular"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupsynonyms"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-syn.mkiv" name="completelistofsynonyms">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:singular"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupsynonyms"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-syn.mkiv" name="infull">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-system.xml">
+ <cd:command file="syst-aux.mkiv" name="expanded">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="expanded" type="environment"/>
+ <cd:command file="syst-aux.mkiv" name="gobbleoneargument">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="gobbletwoarguments">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="gobblethreearguments">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="gobblefourarguments">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="gobblefivearguments">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="gobblesixarguments">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="gobblesevenarguments">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="gobbleeightarguments">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="gobbleninearguments">
+ <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 file="syst-aux.mkiv" name="gobbletenarguments">
+ <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 file="syst-aux.mkiv" name="gobbleoneoptional">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="gobbletwooptionals">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="gobblethreeoptionals">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="gobblefouroptionals">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="gobblefiveoptionals">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="donothing"/>
+ <cd:command file="syst-aux.mkiv" name="doifelsenextchar">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifnextcharelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifelsenextoptional">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifnextoptionalelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifelsenextoptionalcs">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifnextoptionalcselse">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifelsenextbgroup">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifnextbgroupelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifelsenextbgroupcs">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifnextbgroupcselse">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifelsenextparenthesis">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifnextparenthesiselse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifelsefastoptionalcheck">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doiffastoptionalcheckelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifelsefastoptionalcheckcs">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doiffastoptionalcheckcselse">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="assumelongusagecs">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="setvalue">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="setgvalue">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="setevalue">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="setxvalue">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="getvalue">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="letvalue">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="letgvalue">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="resetvalue">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="undefinevalue">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="ignorevalue">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="setuvalue">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="setuevalue">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="setugvalue">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="setuxvalue">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="getuvalue">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifelseundefined">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifundefinedelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifelsedefined">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifdefinedelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifundefined">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifdefined">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="letbeundefined">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="localundefine">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="globalundefine">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifelsealldefined">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifalldefinedelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doif">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifnot">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifelse">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifelseempty">
+ <cd:arguments>
+ <cd:content/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifemptyelse">
+ <cd:arguments>
+ <cd:content/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifempty">
+ <cd:arguments>
+ <cd:content/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifnotempty">
+ <cd:arguments>
+ <cd:content/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifelseinset">
+ <cd:arguments>
+ <cd:content/>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:content/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifinsetelse">
+ <cd:arguments>
+ <cd:content/>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:content/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifinset">
+ <cd:arguments>
+ <cd:content/>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:content/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifnotinset">
+ <cd:arguments>
+ <cd:content/>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:content/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifelsecommon">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:content/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:content/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifcommonelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:content/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:content/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifcommon">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:content/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:content/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifnotcommon">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:content/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:content/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="processcommalist">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="quitcommalist"/>
+ <cd:command file="syst-aux.mkiv" name="quitprevcommalist"/>
+ <cd:command file="syst-aux.mkiv" name="processcommacommand">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="processcommalistwithparameters">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="processcommalist" type="environment">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="processcommacommand" type="environment">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="currentcommalistitem"/>
+ <cd:command file="syst-aux.mkiv" name="processaction">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:apply list="yes"/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="processfirstactioninset">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:apply list="yes"/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="processallactionsinset">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:apply list="yes"/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="commalistelement"/>
+ <cd:command file="syst-aux.mkiv" name="firstcharacter"/>
+ <cd:command file="syst-aux.mkiv" name="remainingcharacters"/>
+ <cd:command file="syst-aux.mkiv" name="getfirstcharacter">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifelsefirstchar">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doiffirstcharelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="thefirstcharacter">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="theremainingcharacters">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifelseinstring">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifinstringelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifinstring">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifnotinstring">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifelseincsname">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:csname"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifincsnameelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:csname"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifelsenumber">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifnumberelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifnumber">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifnotnumber">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="percentdimen">
+ <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 method="none" prefix="cd:number" type="%"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="setpercentdimen">
+ <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 method="none" prefix="cd:number" type="%"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="makerawcommalist">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="rawprocesscommalist">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="rawprocesscommacommand">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="rawdoifelseinset">
+ <cd:arguments>
+ <cd:content/>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:content/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="rawdoifinsetelse">
+ <cd:arguments>
+ <cd:content/>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:content/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="rawdoifinset">
+ <cd:arguments>
+ <cd:content/>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:content/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="rawprocessaction">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:apply list="yes"/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="currentvalue"/>
+ <cd:command file="syst-aux.mkiv" name="getparameters">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="geteparameters">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="getgparameters">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="getxparameters">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="forgetparameters">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="getexpandedparameters">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doassign">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:assignments>
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doeassign">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:assignments>
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="undoassign">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:assignments>
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doassignempty">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:assignments>
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="processassignmentlist">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="processassignmentcommand">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="processassignmentlist" type="environment">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="processassignmentcommand" type="environment">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="currentassignmentlistkey"/>
+ <cd:command file="syst-aux.mkiv" name="currentassignmentlistvalue"/>
+ <cd:command file="syst-aux.mkiv" name="getemptyparameters">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="copyparameters">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="checkparameters">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="ifparameters">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:delimiter name="else"/>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ <cd:delimiter name="fi"/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="commalistsize"/>
+ <cd:command file="syst-aux.mkiv" name="getcommalistsize">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="getcommacommandsize">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="getfromcommalist">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="getfromcommacommand">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="dogetcommacommandelement">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:delimiter name="from"/>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="dosingleempty">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="dodoubleempty">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="dotripleempty">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doquadrupleempty">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doquintupleempty">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="dosixtupleempty">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doseventupleempty">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="dosingleargument">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="dodoubleargument">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="dotripleargument">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doquadrupleargument">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doquintupleargument">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="dosixtupleargument">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doseventupleargument">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="strippedcsname">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="strippedcsname" variant="string">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="complexorsimple">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="complexorsimple" variant="argument">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ <cd:constant type="cd:csname"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="complexorsimpleempty">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="complexorsimpleempty" variant="argument">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ <cd:constant type="cd:csname"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="definecomplexorsimple">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="definecomplexorsimple" variant="argument">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ <cd:constant type="cd:csname"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="definecomplexorsimpleempty">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="definecomplexorsimpleempty" variant="argument">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ <cd:constant type="cd:csname"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="permitspacesbetweengroups"/>
+ <cd:command file="syst-aux.mkiv" name="dontpermitspacesbetweengroups"/>
+ <cd:command file="syst-aux.mkiv" name="dosinglegroupempty">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="dodoublegroupempty">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="dotriplegroupempty">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doquadruplegroupempty">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doquintuplegroupempty">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="firstofoneargument">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="firstoftwoarguments">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="secondoftwoarguments">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="firstofthreearguments">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="secondofthreearguments">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="thirdofthreearguments">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="firstoffourarguments">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="secondoffourarguments">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="thirdoffourarguments">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="fourthoffourarguments">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="firstoffivearguments">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="secondoffivearguments">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="thirdoffivearguments">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="fourthoffivearguments">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="fifthoffivearguments">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="firstofsixarguments">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="secondofsixarguments">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="thirdofsixarguments">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="fourthofsixarguments">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="fifthofsixarguments">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="sixthofsixarguments">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="firstofoneunexpanded">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="firstoftwounexpanded">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="secondoftwounexpanded">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="firstofthreeunexpanded">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="secondofthreeunexpanded">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="thirdofthreeunexpanded">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="letempty">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="globalletempty">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="letvalueempty">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="letgvalueempty">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="letvaluerelax">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="letgvalurelax">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="relaxvalueifundefined">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="rawgetparameters">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="texdefinition" type="environment">
+ <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 file="syst-aux.mkiv" name="texdefinition">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="texcode" type="environment"/>
+ <cd:command file="syst-aux.mkiv" name="newcounter">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="fastincrement">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="fastdecrement">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="increment">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="increment" variant="argument">
+ <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 file="syst-aux.mkiv" name="decrement">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="decrement" variant="argument">
+ <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 file="syst-aux.mkiv" name="incrementvalue">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="decrementvalue">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="newsignal">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="checkedstrippedcsname">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="checkedstrippedcsname" variant="string">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="savenormalmeaning">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="recursedepth"/>
+ <cd:command file="syst-aux.mkiv" name="recurselevel"/>
+ <cd:command file="syst-aux.mkiv" name="dostepwiserecurse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant method="none" prefix="cd:sign" type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="dorecurse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doexpandedrecurse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="dowith">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doloop">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="exitloop"/>
+ <cd:command file="syst-aux.mkiv" name="exitloopnow"/>
+ <cd:command file="syst-aux.mkiv" name="dorecurse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doloopoverlist">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="recursestring"/>
+ <cd:command file="syst-aux.mkiv" name="newevery">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="EveryPar">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="EveryLine">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="forgeteverypar"/>
+ <cd:command file="syst-aux.mkiv" name="convertvalue">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="defconvertedvalue">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifelseassignment">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifassignmentelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="docheckassignment">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="ifassignment">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:delimiter name="else"/>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ <cd:delimiter name="fi"/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="convertargument">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="convertcommand">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="defconvertedargument">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="defconvertedcommand">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="edefconvertedargument">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="gdefconvertedargument">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="gdefconvertedcommand">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="xdefconvertedargument">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="showvalue">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifelsemeaning">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifmeaningelse">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifelsesamestring">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifsamestringelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifsamestring">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifnotsamestring">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="ConvertToConstant">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="ConvertConstantAfter">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="assignifempty">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="grabuntil">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="processbetween">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="gobbleuntil">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="gobbleuntilrelax">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:content"/>
+ </cd:keywords>
+ <cd:delimiter name="relax"/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="processuntil">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="groupedcommand">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="simplegroupedcommand">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="pickupgroupedcommand">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="BeforePar">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="AfterPar">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="GetPar"/>
+ <cd:command file="syst-aux.mkiv" name="GotoPar"/>
+ <cd:command file="syst-aux.mkiv" name="dowithpargument">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="dowithwargument">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="dorepeatwithcommand">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ <cd:constant method="factor" prefix="cd:number" type="cd:text"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifelsestringinstring">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifstringinstringelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="appendtoks">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="prependtoks">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="appendtoksonce">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="prependtoksonce">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifelseintoks">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifintokselse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="collecting" type="environment"/>
+ <cd:command file="syst-aux.mkiv" name="collect" type="environment"/>
+ <cd:command file="syst-aux.mkiv" name="expandedcollect" type="environment"/>
+ <cd:command file="syst-aux.mkiv" name="collect">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="collectexpanded">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="removetoks">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:delimiter name="from"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="appendetoks">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="prependetoks">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="flushtoks">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="dotoks">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="beforesplitstring">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:delimiter name="at"/>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="aftersplitstring">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:delimiter name="at"/>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="splitstring">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:delimiter name="at"/>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ <cd:delimiter name="and"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="greedysplitstring">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:delimiter name="at"/>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ <cd:delimiter name="and"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="beforetestandsplitstring">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:delimiter name="at"/>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="aftertestandsplitstring">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:delimiter name="at"/>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="testandsplitstring">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:delimiter name="at"/>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ <cd:delimiter name="and"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="splitatcolon">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="splitatcomma">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="splitatasterisk">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="splitatcolon">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="splitatcolons">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="removesubstring">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:delimiter name="from"/>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="appendtocommalist">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="prependtocommalist">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="addtocommalist">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="pretocommalist">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="robustdoifelseinset">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:content/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:content/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="robustdoifinsetelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:content/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:content/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="robustaddtocommalist">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="robustpretocommalist">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="xsplitstring">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="removefromcommalist">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="substituteincommalist">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="replaceincommalist">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="globalprocesscommalist">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="withoutpt">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="PtToCm">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="dimensiontocount">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="numberofpoints">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="swapdimens">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="swapcounts">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="swapmacros">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="globalswapdimens">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="globalswapcounts">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="globalswapmacros">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="globalpushmacro">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="localpushmacro">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="globalpopmacro">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="localpopmacro">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="pushmacro">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="popmacro">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="localhsize"/>
+ <cd:command file="syst-aux.mkiv" name="setlocalhsize">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant method="none" prefix="cd:sign" type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="availablehsize"/>
+ <cd:command file="syst-aux.mkiv" name="distributedhsize">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="hsizefraction">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifvalue">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifnotvalue">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifelsevalue">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifvalueelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifnothing">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifsomething">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifelsenothing">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifnothingelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifelsesomething">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifsomethingelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifvaluenothing">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifvaluesomething">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifelsevaluenothing">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifvaluenothingelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifelseemptyvalue">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifemptyvalueelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifemptyvalue">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifnotemptyvalue">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifelseallcommon">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:content/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:content/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifallcommonelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:content/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:content/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifallcommon">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:content/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:content/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifnotallcommon">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:content/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:content/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="dodoubleemptywithset">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="dotripleemptywithset">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="dodoubleargumentwithset">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="dotripleargumentwithset">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="stripcharacter">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ <cd:delimiter name="from"/>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="stripspaces">
+ <cd:arguments>
+ <cd:delimiter name="from"/>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="unspacestring">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="executeifdefined">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifelsesomespace">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifsomespaceelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="processseparatedlist">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="processlist">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="processassignlist">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="untexargument">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="untexcommand">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:csname"/>
+ </cd:keywords>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="PointsToBigPoints">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="PointsToWholeBigPoints">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="ScaledPointsToBigPoints">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="ScaledPointsToWholeBigPoints">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="PointsToReal">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="dontleavehmode"/>
+ <cd:command file="syst-aux.mkiv" name="utfupper">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="utflower">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="uppercasestring">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="lowercasestring">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="counttoken">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:delimiter name="in"/>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="counttokens">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="splitofftokens">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:delimiter name="from"/>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="handletokens">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:delimiter name="with"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="settrialtypesetting"/>
+ <cd:command file="syst-aux.mkiv" name="resettrialtypesetting"/>
+ <cd:command file="syst-aux.mkiv" name="iftrialtypesetting">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:delimiter name="else"/>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ <cd:delimiter name="fi"/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="integerrounding">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="onedigitrounding">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="twodigitrounding">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="threedigitrounding">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="processcontent">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="dogobblesingleempty">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="dogobbledoubleempty">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="gobblesingleempty">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="gobbledoubleempty">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifelsesometoks">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifsometokselse">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifsometoks">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifemptytoks">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="strictinspectnextcharacter" type="environment"/>
+ <cd:command file="syst-aux.mkiv" name="strictdoifelsenextoptional">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="strictdoifnextoptionalelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="gobblespacetokens"/>
+ <cd:command file="syst-aux.mkiv" name="verbatimstring">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="lastdigit">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="lasttwodigits">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="serializedcommalist"/>
+ <cd:command file="syst-aux.mkiv" name="serializecommalist">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="purenumber">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="filterfromvalue">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="filterfromnext">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:content/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:content/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:content/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:content/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:content/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="definemeasure">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="freezemeasure">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="setmeasure">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="setgmeasure">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="setemeasure">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="setxmeasure">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="measure">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="measured">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="dividedsize">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifelsedimension">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifdimensionelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifelsedimenstring">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifdimenstringelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="compresult"/>
+ <cd:command file="syst-aux.mkiv" name="comparedimension">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="comparedimensioneps">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="letcscsname">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:delimiter name="csname"/>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:delimiter name="endcsname"/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="letcsnamecs">
+ <cd:arguments>
+ <cd:delimiter name="csname"/>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:delimiter name="endcsname"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="letcsnamecsname">
+ <cd:arguments>
+ <cd:delimiter name="csname"/>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:delimiter name="endcsname"/>
+ <cd:delimiter name="csname"/>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:delimiter name="endcsname"/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="addvalue">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="unspaced">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="unspaceargument">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="unspaceafter">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifelsehasspace">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifhasspaceelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="setflag">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="resetflag">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="flag">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifelseflagged">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifflaggedelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifnotflagged">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="inheritparameter">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifelsenonzeropositive">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="doifnonzeropositiveelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="getrawparameters">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="getraweparameters">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="getrawgparameters">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="getrawxparameters">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="unprotected">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:content"/>
+ </cd:keywords>
+ <cd:delimiter name="par"/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="resettimer"/>
+ <cd:command file="syst-aux.mkiv" name="elapsedtime"/>
+ <cd:command file="syst-aux.mkiv" name="elapsedseconds"/>
+ <cd:command file="syst-aux.mkiv" name="currentfeaturetest"/>
+ <cd:command file="syst-aux.mkiv" name="testfeature">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:content/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="showtimer">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="testfeatureonce">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:content/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="freezedimenmacro">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="negated">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="assigndimen">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="appendvalue">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="appendgvalue">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="prependvalue">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="prependgvalue">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="processranges">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:number"/>
+ <cd:constant method="range" prefix="cd:number" type="cd:number"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="dowithrange">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:number"/>
+ <cd:constant method="range" prefix="cd:number" type="cd:number"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="ignoreimplicitspaces"/>
+ <cd:command file="syst-aux.mkiv" name="nointerference" type="environment"/>
+ <cd:command file="syst-aux.mkiv" name="expandcheckedcsname">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="docheckedpair">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="constantnumber">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="constantnumberargument">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="constantdimen">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="constantdimenargument">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="constantemptyargument">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="getsubstring">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="syst-aux.mkiv" name="converteddimen">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <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 file="syst-aux.mkiv" name="ntimes">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-systemlog.xml">
+ <cd:command file="core-sys.mkiv" name="systemlog">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-sys.mkiv" name="systemlogfirst">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-sys.mkiv" name="systemloglast">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-table.xml">
+ <cd:command file="tabl-tab.mkiv" name="table" type="environment">
+ <cd:arguments>
+ <cd:template/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptables"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-tab.mkiv" name="table" type="environment" variant="name">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptables"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-tab.mkiv" name="definetabletemplate">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:template/>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-tab.mkiv" name="tables" type="environment">
+ <cd:arguments>
+ <cd:template/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-tab.mkiv" name="tables" type="environment" variant="name">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-tab.mkiv" name="tablehead" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-tab.mkiv" name="tabletail" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-tab.mkiv" name="setuptables">
+ <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 default="yes" type="auto"/>
+ </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 default="yes" type="medium"/>
+ <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 default="yes" type="medium"/>
+ <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 default="yes" type="medium"/>
+ <cd:constant type="big"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:constant type="left"/>
+ <cd:constant type="middle"/>
+ <cd:constant default="yes" type="right"/>
+ </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:parameter name="openup">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-tabulation.xml">
+ <cd:command file="tabl-tbl.mkiv" name="definetabulation">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptabulation"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-tbl.mkiv" name="setuptabulation">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 default="yes" type="medium"/>
+ <cd:constant type="big"/>
+ <cd:constant type="none"/>
+ <cd:constant type="blank"/>
+ <cd:constant default="yes" type="depth"/>
+ <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 default="yes" type="normal"/>
+ </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 default="yes" type="no"/>
+ </cd:parameter>
+ <cd:parameter name="split">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="repeat"/>
+ <cd:constant default="yes" type="auto"/>
+ </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 default="yes" type="yes"/>
+ <cd:constant type="repeat"/>
+ <cd:constant type="text"/>
+ </cd:parameter>
+ <cd:parameter name="frame">
+ <cd:constant type="on"/>
+ <cd:constant default="yes" type="off"/>
+ </cd:parameter>
+ <cd:parameter name="title">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="keeptogether">
+ <cd:constant default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-tbl.mkiv" generated="yes" name="tabulation" type="environment" variant="example">
+ <cd:sequence>
+ <cd:variable value="tabulation"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptabulation"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-tbl.mkiv" name="definetabulate">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:template optional="yes"/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-tbl.mkiv" name="setuptabulate">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuptabulation"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-tbl.mkiv" name="tabulate" type="environment">
+ <cd:arguments>
+ <cd:template optional="yes"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptabulate"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-tbl.mkiv" generated="yes" name="tabulate" type="environment" variant="instance">
+ <cd:sequence>
+ <cd:instance value="tabulate"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptabulate"/>
+ </cd:assignments>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="tabl-tbl.mkiv" name="tabulatehead" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-tbl.mkiv" name="tabulatetail" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-tbl.mkiv" name="tabulaterule"/>
+ <cd:command file="tabl-tbl.mkiv" name="tabulateline"/>
+ <cd:command file="tabl-tbl.mkiv" name="tabulateautorule"/>
+ <cd:command file="tabl-tbl.mkiv" name="tabulateautoline"/>
+ </cd:interface>
+ <cd:interface file="i-tagging.xml">
+ <cd:command file="strc-tag.mkiv" name="setuptagging">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant type="start"/>
+ <cd:constant default="yes" type="stop"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:constant type="auto"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command begin="dostart" end="dostop" file="strc-tag.mkiv" name="tagged" type="environment">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-tag.mkiv" name="element" type="environment">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="strc-tag.mkiv" name="doifelseinelement">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-tag.mkiv" name="doifinelementelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-tag.mkiv" name="taggedlabeltexts">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-tag.mkiv" name="namedtaggedlabeltexts">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="strc-tag.mkiv" name="settaggedmetadata">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-textbackground.xml">
+ <cd:command file="anch-bck.mkiv" name="definetextbackground">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptextbackground"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-bck.mkiv" name="setuptextbackground">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant default="yes" type="start"/>
+ <cd:constant type="stop"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:constant default="yes" type="text"/>
+ <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 default="yes" type="rectangular"/>
+ <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 default="yes" type="on"/>
+ <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:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="standard"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rightoffset">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="standard"/>
+ <cd:constant type="cd:dimension"/>
+ </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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-bck.mkiv" name="textbackground" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptextbackground"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-bck.mkiv" generated="yes" name="textbackground" type="environment" variant="example">
+ <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 file="anch-bck.mkiv" generated="yes" name="textbackground" variant="example">
+ <cd:sequence>
+ <cd:variable value="textbackground"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="anch-bck.mkiv" name="textbackgroundmanual" type="environment"/>
+ </cd:interface>
+ <cd:interface file="i-textflow.xml">
+ <cd:command file="page-flw.mkiv" name="definetextflow">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptextflow"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-flw.mkiv" name="setuptextflow">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-flw.mkiv" name="textflowcollector">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-flw.mkiv" name="doifelsetextflowcollector">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-flw.mkiv" name="doiftextflowcollectorelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-flw.mkiv" name="doifelsetextflow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-flw.mkiv" name="doiftextflowelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-flw.mkiv" name="textflow" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-flw.mkiv" name="flushtextflow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-textrule.xml">
+ <cd:command file="pack-mrl.mkiv" name="setuptextrules">
+ <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 default="yes" type="left"/>
+ <cd:constant type="inmargin"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </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 default="yes" type="on"/>
+ <cd:constant type="off"/>
+ </cd:parameter>
+ <cd:parameter name="bodyfont">
+ <cd:inherit name="setupbodyfont"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-mrl.mkiv" name="textrule">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="top"/>
+ <cd:constant type="middle"/>
+ <cd:constant default="yes" type="bottom"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="pack-mrl.mkiv" name="textrule" type="environment">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-texts.xml">
+ <cd:command file="page-txt.mkvi" name="setuplayouttext">
+ <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 default="yes" type="normal"/>
+ <cd:constant type="nomarking"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="strut">
+ <cd:constant default="yes" type="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:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="rightstyle">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </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 file="page-txt.mkvi" name="setuptop">
+ <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 file="page-txt.mkvi" name="setupheader">
+ <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 file="page-txt.mkvi" name="setuptext">
+ <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 file="page-txt.mkvi" name="setupfooter">
+ <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 file="page-txt.mkvi" name="setupbottom">
+ <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 file="page-txt.mkvi" name="doifelselayouttextline">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-txt.mkvi" name="doiflayouttextlineelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-txt.mkvi" name="doifelselayoutsomeline">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-txt.mkvi" name="doiflayoutsomelineelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-txt.mkvi" name="noheaderandfooterlines"/>
+ <cd:command file="page-txt.mkvi" name="notopandbottomlines"/>
+ <cd:command file="page-txt.mkvi" name="setuptoptexts">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant default="yes" type="text"/>
+ <cd:constant type="margin"/>
+ <cd:constant type="edge"/>
+ </cd:keywords>
+ <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: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: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: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:arguments>
+ </cd:command>
+ <cd:command file="page-txt.mkvi" name="setupheadertexts">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant default="yes" type="text"/>
+ <cd:constant type="margin"/>
+ <cd:constant type="edge"/>
+ </cd:keywords>
+ <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: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: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: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:arguments>
+ </cd:command>
+ <cd:command file="page-txt.mkvi" name="setuptexttexts">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant default="yes" type="text"/>
+ <cd:constant type="margin"/>
+ <cd:constant type="edge"/>
+ </cd:keywords>
+ <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: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: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: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:arguments>
+ </cd:command>
+ <cd:command file="page-txt.mkvi" name="setupfootertexts">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant default="yes" type="text"/>
+ <cd:constant type="margin"/>
+ <cd:constant type="edge"/>
+ </cd:keywords>
+ <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: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: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: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:arguments>
+ </cd:command>
+ <cd:command file="page-txt.mkvi" name="setupbottomtexts">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant default="yes" type="text"/>
+ <cd:constant type="margin"/>
+ <cd:constant type="edge"/>
+ </cd:keywords>
+ <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: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: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: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:arguments>
+ </cd:command>
+ <cd:command file="page-txt.mkvi" name="settextcontent">
+ <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 default="yes" type="middle"/>
+ <cd:constant type="right"/>
+ </cd:keywords>
+ <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: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:arguments>
+ </cd:command>
+ <cd:command file="page-txt.mkvi" name="definetext">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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>
+ <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: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: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: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:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-thinrule.xml">
+ <cd:command file="pack-mrl.mkiv" name="setupthinrules">
+ <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 default="yes" type="on"/>
+ <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 default="yes" type="b"/>
+ <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 default="yes" type="small"/>
+ <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 file="pack-mrl.mkiv" name="thinrule"/>
+ <cd:command file="pack-mrl.mkiv" name="hairline"/>
+ <cd:command file="pack-mrl.mkiv" name="thinrules">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupthinrules"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-token.xml">
+ <cd:command file="toks-tra.mkiv" name="tokens" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="toks-tra.mkiv" name="flushtokens">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="toks-tra.mkiv" name="showtokens">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="toks-tra.mkiv" name="testtokens">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-tolerance.xml">
+ <cd:command file="spac-hor.mkiv" name="setuptolerance">
+ <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>
+ <cd:interface file="i-tooltip.xml">
+ <cd:command file="scrn-fld.mkvi" name="definetooltip">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptooltip"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-fld.mkvi" name="setuptooltip">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="location">
+ <cd:constant type="left"/>
+ <cd:constant type="middle"/>
+ <cd:constant default="yes" type="right"/>
+ </cd:parameter>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="scrn-fld.mkvi" generated="yes" name="tooltip" variant="instance">
+ <cd:sequence>
+ <cd:instance value="tooltip"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptooltip"/>
+ </cd:assignments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="scrn-fld.mkvi" generated="yes" name="tooltip" variant="instance:argument">
+ <cd:sequence>
+ <cd:instance 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:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-tracker.xml">
+ <cd:command file="trac-ctx.mkiv" name="installtextracker">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="trac-ctx.mkiv" name="installtexdirective">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="trac-deb.mkiv" name="enabletrackers">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="trac-deb.mkiv" name="disabletrackers">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="trac-deb.mkiv" name="resettrackers"/>
+ <cd:command file="trac-deb.mkiv" name="showtrackers"/>
+ <cd:command file="trac-deb.mkiv" name="enabledirectives">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="trac-deb.mkiv" name="disabledirectives">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="trac-deb.mkiv" name="showdirectives"/>
+ <cd:command file="trac-deb.mkiv" name="enableexperiments">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="trac-deb.mkiv" name="disableexperiments">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="trac-deb.mkiv" name="showexperiments"/>
+ <cd:command file="trac-deb.mkiv" name="showedebuginfo"/>
+ <cd:command file="trac-deb.mkiv" name="overloaderror"/>
+ <cd:command file="trac-deb.mkiv" name="showlogcategories"/>
+ <cd:command file="trac-jus.mkiv" name="showjustification"/>
+ </cd:interface>
+ <cd:interface file="i-translation.xml">
+ <cd:command file="lang-lab.mkiv" name="translate">
+ <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 file="lang-lab.mkiv" name="assigntranslation">
+ <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>
+ <cd:interface file="i-twopassdata.xml">
+ <cd:command file="core-two.mkiv" name="immediatesavetwopassdata">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-two.mkiv" name="savetwopassdata">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-two.mkiv" name="lazysavetwopassdata">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-two.mkiv" name="savetaggedtwopassdata">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-two.mkiv" name="lazysavetaggedtwopassdata">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-two.mkiv" name="definetwopasslist">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-two.mkiv" name="gettwopassdata">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-two.mkiv" name="checktwopassdata">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-two.mkiv" name="findtwopassdata">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-two.mkiv" name="getfirsttwopassdata">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-two.mkiv" name="getlasttwopassdata">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-two.mkiv" name="getnamedtwopassdatalist">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-two.mkiv" name="gettwopassdatalist">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-two.mkiv" name="doifelseintwopassdata">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-two.mkiv" name="doifintwopassdataelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-two.mkiv" name="getfromtwopassdata">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-typography.xml">
+ <cd:command file="typo-txt.mkvi" name="normalizetextwidth">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-txt.mkvi" name="normalizetextheight">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-txt.mkvi" name="normalizetextdepth">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-txt.mkvi" name="normalizetextline">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-txt.mkvi" name="normalizefontwidth">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-txt.mkvi" name="normalizefontheight">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-txt.mkvi" name="normalizefontdepth">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-txt.mkvi" name="normalizefontline">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-txt.mkvi" name="widthspanningtext">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-txt.mkvi" name="heightspanningtext">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-txt.mkvi" name="depthspanningtext">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-txt.mkvi" name="linespanningtext">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-txt.mkvi" name="normalizedfontsize"/>
+ <cd:command file="typo-txt.mkvi" name="NormalizeTextWidth">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-txt.mkvi" name="NormalizeTextHeight">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-txt.mkvi" name="NormalizeFontWidth">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-txt.mkvi" name="NormalizeFontHeight">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-txt.mkvi" name="WidthSpanningText">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="typo-txt.mkvi" name="TheNormalizedFontSize"/>
+ <cd:command file="typo-txt.mkvi" name="nicelyfilledbox" type="environment">
+ <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 default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-unit.xml">
+ <cd:command file="phys-dim.mkiv" name="digits">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="phys-dim.mkiv" name="digits" variant="string">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="phys-dim.mkiv" name="defineunit">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupunit"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="phys-dim.mkiv" name="setupunit">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 default="yes" type="normal"/>
+ </cd:parameter>
+ <cd:parameter name="separator">
+ <cd:constant type="small"/>
+ <cd:constant type="medium"/>
+ <cd:constant type="big"/>
+ <cd:constant default="yes" type="normal"/>
+ <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 default="yes" type="normal"/>
+ <cd:constant type="none"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="phys-dim.mkiv" generated="yes" name="unit" variant="instance">
+ <cd:sequence>
+ <cd:instance value="unit"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="phys-dim.mkiv" name="installunitsseparator">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="phys-dim.mkiv" name="installunitsspace">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="phys-dim.mkiv" name="registerunit">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="prefix"/>
+ <cd:constant default="yes" type="unit"/>
+ <cd:constant type="operator"/>
+ <cd:constant type="suffixe"/>
+ <cd:constant type="symbol"/>
+ <cd:constant type="packaged"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-variables.xml">
+ <cd:command file="core-env.mkiv" name="setvariables">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="core-env.mkiv" name="setevariables">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="core-env.mkiv" name="setgvariables">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="core-env.mkiv" name="setxvariables">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="core-env.mkiv" name="checkvariables">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="core-env.mkiv" name="setvariable">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:value"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="setevariable">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:value"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="setgvariable">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:value"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="setxvariable">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:value"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="getvariable">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="showvariable">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="doifelsevariable">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="doifvariableelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="doifvariable">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="doifnotvariable">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="doifelseemptyvariable">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="doifemptyvariableelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="doifemptyvariable">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="doifnotemptyvariable">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="getvariabledefault">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="setupenv">
+ <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 file="core-env.mkiv" name="doifelseenv">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="doifenvelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="doifenv">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="doifnotenv">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="env">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="core-env.mkiv" name="envvar">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="luat-ini.mkiv" name="setdocumentfilename">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="luat-ini.mkiv" name="setdocumentargument">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="luat-ini.mkiv" name="setdocumentargumentdefault">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="luat-ini.mkiv" name="getdocumentfilename">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="luat-ini.mkiv" name="getdocumentargument">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="luat-ini.mkiv" name="getdocumentargumentdefault">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="luat-ini.mkiv" name="doifelsedocumentargument">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="luat-ini.mkiv" name="doifdocumentargumentelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="luat-ini.mkiv" name="doifdocumentargument">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="luat-ini.mkiv" name="doifnotdocumentargument">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="luat-ini.mkiv" name="doifelsedocumentfilename">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="luat-ini.mkiv" name="doifdocumentfilenameelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="luat-ini.mkiv" name="doifdocumentfilename">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="luat-ini.mkiv" name="doifnotdocumentfilename">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-verbatim.xml">
+ <cd:command file="buff-ver.mkiv" name="definetype">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptype"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-ver.mkiv" name="setuptype">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 default="yes" type="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 default="yes" type="all"/>
+ </cd:parameter>
+ <cd:parameter name="escape">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ <cd:constant type="cd:text"/>
+ <cd:constant method="apply" prefix="cd:processor" type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="lines">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ <cd:constant type="normal"/>
+ <cd:constant type="hyphenated"/>
+ </cd:parameter>
+ <cd:parameter name="space">
+ <cd:constant type="on"/>
+ <cd:constant default="yes" type="off"/>
+ <cd:constant type="normal"/>
+ <cd:constant type="fixed"/>
+ <cd:constant type="stretch"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-ver.mkiv" name="type">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptype"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-ver.mkiv" name="type" variant="angles">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptype"/>
+ </cd:assignments>
+ <cd:angles/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-ver.mkiv" name="typ">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptype"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-ver.mkiv" name="typ" variant="angles">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptype"/>
+ </cd:assignments>
+ <cd:angles/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-ver.mkiv" generated="yes" name="type" variant="example">
+ <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 file="buff-ver.mkiv" generated="yes" name="type" variant="example:angles">
+ <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 file="buff-ver.mkiv" name="definetyping">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptyping"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-ver.mkiv" name="setuptyping">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="standard"/>
+ <cd:constant type="cd:dimension"/>
+ </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 default="yes" type="none"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </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 default="yes" type="no"/>
+ <cd:constant type="normal"/>
+ <cd:constant type="hyphenated"/>
+ </cd:parameter>
+ <cd:parameter name="space">
+ <cd:constant type="on"/>
+ <cd:constant default="yes" type="off"/>
+ <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 default="yes" type="no"/>
+ <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 default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="escape">
+ <cd:constant type="yes"/>
+ <cd:constant default="yes" type="no"/>
+ <cd:constant type="cd:text"/>
+ <cd:constant method="apply" prefix="cd:processor" type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="indentnext">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="auto"/>
+ </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 file="buff-ver.mkiv" generated="yes" name="typing" type="environment" variant="instance">
+ <cd:sequence>
+ <cd:instance value="typing"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptyping"/>
+ </cd:assignments>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="buff-ver.mkiv" generated="yes" name="typing" type="environment" variant="instance:argument">
+ <cd:sequence>
+ <cd:instance value="typing"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="continue"/>
+ </cd:keywords>
+ </cd:arguments>
+ <cd:instances/>
+ </cd:command>
+ <cd:command file="buff-ver.mkiv" name="tex">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-ver.mkiv" name="arg">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-ver.mkiv" name="mat">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-ver.mkiv" name="dis">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-ver.mkiv" name="astype">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-ver.mkiv" name="asciistr">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-ver.mkiv" name="verbatim">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-ver.mkiv" name="filename">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-ver.mkiv" name="typefile">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptyping"/>
+ </cd:assignments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-ver.mkiv" name="doifelsetypingfile">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="buff-ver.mkiv" name="doiftypingfileelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-version.xml">
+ <cd:command file="page-inf.mkiv" name="setupversion">
+ <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 file="page-inf.mkiv" name="version">
+ <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 file="page-inf.mkiv" name="installversioninfo">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="page-inf.mkiv" name="includeversioninfo">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-mod.mkvi" name="doifelseolderversion">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-mod.mkvi" name="doifolderversionelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-mod.mkvi" name="doifelseoldercontext">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="file-mod.mkvi" name="doifoldercontextelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-viewerlayer.xml">
+ <cd:command file="attr-lay.mkiv" name="defineviewerlayer">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupviewerlayer"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="attr-lay.mkiv" name="setupviewerlayer">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="title">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="state">
+ <cd:constant default="yes" type="start"/>
+ <cd:constant type="stop"/>
+ </cd:parameter>
+ <cd:parameter name="export">
+ <cd:constant default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="printable">
+ <cd:constant default="yes" type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="scope">
+ <cd:constant default="yes" type="local"/>
+ <cd:constant type="global"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:constant default="yes" type="none"/>
+ <cd:constant type="command"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="attr-lay.mkiv" name="viewerlayer" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="attr-lay.mkiv" generated="yes" name="viewerlayer" type="environment" variant="example">
+ <cd:sequence>
+ <cd:variable value="viewerlayer"/>
+ </cd:sequence>
+ </cd:command>
+ <cd:command file="attr-lay.mkiv" name="viewerlayer">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="attr-lay.mkiv" name="showlayoutcomponents"/>
+ </cd:interface>
+ <cd:interface file="i-visualizer.xml">
+ <cd:command file="trac-vis.mkiv" name="ruledhbox">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="trac-vis.mkiv" name="ruledvbox">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="trac-vis.mkiv" name="ruledvtop">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="trac-vis.mkiv" name="ruledtopv">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="trac-vis.mkiv" name="ruledhpack">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="trac-vis.mkiv" name="ruledvpack">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="trac-vis.mkiv" name="ruledtpack">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="trac-vis.mkiv" name="ruledmbox">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="trac-vis.mkiv" name="filledhboxr">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="trac-vis.mkiv" name="filledhboxg">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="trac-vis.mkiv" name="filledhboxb">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="trac-vis.mkiv" name="filledhboxc">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="trac-vis.mkiv" name="filledhboxm">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="trac-vis.mkiv" name="filledhboxy">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="trac-vis.mkiv" name="filledhboxk">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="trc-vis.mkiv" name="showmakeup">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant default="yes" type="makeup"/>
+ <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 file="trc-vis.mkiv" name="showallmakeup"/>
+ <cd:command file="trc-vis.mkiv" name="showboxes"/>
+ <cd:command file="trc-vis.mkiv" name="showglyphs"/>
+ <cd:command file="trc-vis.mkiv" name="showfontkerns"/>
+ <cd:command file="trc-vis.mkiv" name="setvisualizerfont">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="trc-vis.mkiv" name="resetvisualizers"/>
+ </cd:interface>
+ <cd:interface file="i-vspace.xml">
+ <cd:command file="spac-ver.mkiv" name="definevspacingamount">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="definevspacing">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:inherit name="vspacing"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="vspacing">
+ <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="enable"/>
+ <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 method="factor" prefix="cd:number" type="small"/>
+ <cd:constant method="factor" prefix="cd:number" type="medium"/>
+ <cd:constant method="factor" prefix="cd:number" type="big"/>
+ <cd:constant method="factor" prefix="cd:number" type="line"/>
+ <cd:constant method="factor" prefix="cd:number" type="halfline"/>
+ <cd:constant method="factor" prefix="cd:number" type="quarterline"/>
+ <cd:constant method="factor" prefix="cd:number" type="formula"/>
+ <cd:constant method="factor" prefix="cd:number" type="white"/>
+ <cd:constant method="factor" prefix="cd:number" type="height"/>
+ <cd:constant method="factor" prefix="cd:number" type="depth"/>
+ <cd:constant method="range" prefix="category" type="cd:number"/>
+ <cd:constant method="range" prefix="order" type="cd:number"/>
+ <cd:constant method="range" prefix="penalty" type="cd:number"/>
+ <cd:constant type="cd:dimension"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="directvspacing">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:inherit name="vspacing"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="setupvspacing">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="vspacing"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="setupblank">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="vspacing"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="blank">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="vspacing"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="useblankparameter">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="inhibitblank"/>
+ <cd:command file="spac-ver.mkiv" name="synchronizeblank"/>
+ <cd:command file="spac-ver.mkiv" name="definevspace">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="vspace">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="godown">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="vglue">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="smallskip"/>
+ <cd:command file="spac-ver.mkiv" name="medskip"/>
+ <cd:command file="spac-ver.mkiv" name="bigskip"/>
+ </cd:interface>
+ <cd:interface file="i-whitespace.xml">
+ <cd:command file="spac-ver.mkiv" name="setupwhitespace">
+ <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 default="yes" type="none"/>
+ <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 file="spac-ver.mkiv" name="synchronizewhitespace"/>
+ <cd:command file="spac-ver.mkiv" name="correctwhitespace">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="packed" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="blank"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="unpacked" type="environment"/>
+ <cd:command file="spac-ver.mkiv" name="linecorrection" type="environment">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="blank"/>
+ <cd:inherit name="blank"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="spac-ver.mkiv" name="locallinecorrection" type="environment">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="blank"/>
+ <cd:inherit name="blank"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-xml.xml">
+ <cd:command name="xmlmain">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlflush">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmltext">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:lpath"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlpure">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:lpath"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlflushtext">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlflushpure">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlnonspace">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:lpath"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlflushspacewise">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlflushlinewise">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlall">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:lpath"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmllastmatch"/>
+ <cd:command name="xmlfirst">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:lpath"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmllast">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:lpath"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlcontext">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:lpath"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlflushcontext">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlshow">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlinfo">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlfilter">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:lpath"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlstrip">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:lpath"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlstripped">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:lpath"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlstripnolines">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:lpath"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlstrippednolines">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:lpath"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlposition">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:lpath"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlelement">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlpos">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlsnippet">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlconcat">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:lpath"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlconcatrange">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:lpath"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:first"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:last"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlcommand">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:lpath"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:xmlsetup"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlinlineverbatim">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlinlineverbatim" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmldisplayverbatim">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmldisplayverbatim" type="environment">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlverbatim">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlprettyprint">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlloadfile">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:xmlsetup"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlloadbuffer">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:buffer"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:xmlsetup"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlloaddata">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:xmlsetup"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlloadonly">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:xmlsetup"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlprocessfile">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:xmlsetup"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlprocessbuffer">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:buffer"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:xmlsetup"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlprocessdata">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:xmlsetup"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlinclude">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:lpath"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlname">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlpath">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlnamespace">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmltag">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlcount">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlatt">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlattdef">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlrefatt">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmllastatt"/>
+ <cd:command name="xmlattribute">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:lpath"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlattributedef">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:lpath"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlchainatt">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlchainattdef">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmldirectives">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmldirectivesbefore">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmldirectivesafter">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlinstalldirective">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:csname"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlsetup">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:setup"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlsetsetup">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:lpath"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:setup"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlremovesetup">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:setup"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlremovedocumentsetup">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:setup"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlflushdocumentsetups">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:setup"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlresetsetups">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlresetdocumentsetups">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlprependsetup">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:setup"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlappendsetup">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:setup"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlbeforesetup">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:setup"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:setup"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlaftersetup">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:setup"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:setup"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlprependdocumentsetup">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:setup"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlappenddocumentsetup">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:setup"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlbeforedocumentsetup">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:setup"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:setup"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlafterdocumentsetup">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:setup"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:setup"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlregisteredsetups"/>
+ <cd:command name="xmlregistereddocumentsetups">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:setup"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlsetfunction">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:lpath"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:luafunction"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmldoif">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:lpath"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmldoifnot">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:lpath"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmldoifelse">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:lpath"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmldoiftext">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:lpath"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmldoifnottext">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:lpath"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmldoifelsetext">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:lpath"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmldoifselfempty">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmldoifnotselfempty">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmldoifelseselfempty">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmldoifelseempty">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:lpath"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlregisterns">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:url"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlregisterns">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlremapname">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:lpath"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlremapnamespace">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlchecknamespace">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlmapvalue">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:category"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlvalue">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:category"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmldoifelsevalue">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:category"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlloaddirectives">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlsave">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmltofile">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:lpath"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmltobuffer">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:lpath"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:buffer"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmltobufferverbose">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:lpath"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:buffer"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmladdindex">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlinclusion">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlinclusions">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlbadinclusions">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlraw">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlraw" type="environment"/>
+ <cd:command name="xmlresetinjectors"/>
+ <cd:command name="xmlsetinjectors">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlinjector">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlapplyselectors">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmlsetentity">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command name="xmltexentity">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <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:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ </cd:interface>
+ <cd:interface file="i-xtable.xml">
+ <cd:command file="tabl-xtb.mkvi" name="definextable">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupxtable"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-xtb.mkvi" name="setupxtable">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="textwidth">
+ <cd:constant type="cd:dimension"/>
+ <cd:constant default="yes" type="local"/>
+ </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 default="yes" type="auto"/>
+ </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 file="tabl-xtb.mkvi" name="xtable" type="environment">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupxtable"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-xtb.mkvi" name="xtable" type="environment" variant="name">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-xtb.mkvi" name="embeddedxtable" type="environment">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupxtable"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-xtb.mkvi" name="embeddedxtable" type="environment" variant="name">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-xtb.mkvi" generated="yes" name="xtable" type="environment" variant="example">
+ <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 file="tabl-xtb.mkvi" name="processxtablebuffer">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-xtb.mkvi" name="xrow" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupxtable"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-xtb.mkvi" name="xcell" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <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 file="tabl-xtb.mkvi" name="xtablehead" type="environment">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupxtable"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-xtb.mkvi" name="xtablehead" type="environment" variant="name">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-xtb.mkvi" name="xtablefoot" type="environment">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupxtable"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-xtb.mkvi" name="xtablefoot" type="environment" variant="name">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-xtb.mkvi" name="xtablenext" type="environment">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupxtable"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-xtb.mkvi" name="xtablenext" type="environment" variant="name">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-xtb.mkvi" name="xtablebody" type="environment">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupxtable"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-xtb.mkvi" name="xtablebody" type="environment" variant="name">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-xtb.mkvi" name="xgroup" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupxtable"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-xtb.mkvi" name="xrowgroup" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupxtable"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-xtb.mkvi" name="xcellgroup" type="environment">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupxtable"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+ <cd:command file="tabl-xtb.mkvi" name="currentxtablerow"/>
+ <cd:command file="tabl-xtb.mkvi" name="currentxtablecolumn"/>
+ </cd:interface>
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-align.xml b/tex/context/interface/mkiv/i-align.xml
index 07a66d2dd..d8b75a463 100644
--- a/tex/context/interface/mkiv/i-align.xml
+++ b/tex/context/interface/mkiv/i-align.xml
@@ -32,6 +32,7 @@
<cd:constant type="center"/>
<cd:constant type="disable"/>
<cd:constant type="last"/>
+ <cd:constant type="end"/>
<cd:constant type="paragraph"/>
<cd:constant type="lefttoright"/>
<cd:constant type="righttoleft"/>
@@ -242,6 +243,8 @@
<cd:command name="centeredlastline" file="spac-ali.mkiv"/>
+ <cd:command name="flushedrightlastline" file="spac-ali.mkiv"/>
+
<cd:command name="ttraggedright" file="spac-ali.mkiv"/>
<cd:command name="forgetragged" file="spac-ali.mkiv"/>
diff --git a/tex/context/interface/mkiv/i-attachment.xml b/tex/context/interface/mkiv/i-attachment.xml
index 6aadc0304..82056a0ad 100644
--- a/tex/context/interface/mkiv/i-attachment.xml
+++ b/tex/context/interface/mkiv/i-attachment.xml
@@ -107,7 +107,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="attachment" generated="yes" variant="generated" file="scrn-wid.mkvi">
+ <cd:command name="attachment" generated="yes" variant="example" file="scrn-wid.mkvi">
<cd:sequence>
<cd:variable value="attachment"/>
</cd:sequence>
@@ -117,9 +117,12 @@
<cd:inherit name="setupattachment"/>
</cd:assignments>
</cd:arguments>
+ <cd:instances>
+ <cd:constant value="attachment"/>
+ </cd:instances>
</cd:command>
- <cd:command name="attachment" type="environment" generated="yes" variant="generated" file="scrn-wid.mkvi">
+ <cd:command name="attachment" type="environment" generated="yes" variant="example" file="scrn-wid.mkvi">
<cd:sequence>
<cd:variable value="attachment"/>
</cd:sequence>
@@ -129,6 +132,9 @@
<cd:inherit name="setupattachment"/>
</cd:assignments>
</cd:arguments>
+ <cd:instances>
+ <cd:constant value="attachment"/>
+ </cd:instances>
</cd:command>
<cd:command name="placeattachments" file="scrn-wid.mkvi"/>
diff --git a/tex/context/interface/mkiv/i-attribute.xml b/tex/context/interface/mkiv/i-attribute.xml
index eb699b99e..cd1e807d2 100644
--- a/tex/context/interface/mkiv/i-attribute.xml
+++ b/tex/context/interface/mkiv/i-attribute.xml
@@ -93,4 +93,4 @@
<cd:command name="showattributes" file="attr-ini.mkiv"/>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-background.xml b/tex/context/interface/mkiv/i-background.xml
index 400e01454..f51a0247c 100644
--- a/tex/context/interface/mkiv/i-background.xml
+++ b/tex/context/interface/mkiv/i-background.xml
@@ -45,7 +45,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="background" type="environment" generated="yes" variant="generated" file="pack-bck.mkvi">
+ <cd:command name="background" type="environment" generated="yes" variant="example" file="pack-bck.mkvi">
<cd:sequence>
<cd:variable value="background"/>
</cd:sequence>
@@ -54,6 +54,9 @@
<cd:inherit name="setupbackground"/>
</cd:assignments>
</cd:arguments>
+ <cd:instances>
+ <cd:constant value="background"/>
+ </cd:instances>
</cd:command>
<cd:command name="background" type="environment" file="pack-bck.mkvi">
@@ -64,13 +67,16 @@
</cd:arguments>
</cd:command>
- <cd:command name="background" generated="yes" variant="generated" file="pack-bck.mkvi">
+ <cd:command name="background" generated="yes" variant="example" file="pack-bck.mkvi">
<cd:sequence>
<cd:variable value="background"/>
</cd:sequence>
<cd:arguments>
<cd:content/>
</cd:arguments>
+ <cd:instances>
+ <cd:constant value="background"/>
+ </cd:instances>
</cd:command>
<cd:command name="background" file="pack-bck.mkvi">
@@ -86,7 +92,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="setupbackgrounds" variant="1" file="page-bck.mkiv">
+ <cd:command name="setupbackgrounds" file="page-bck.mkiv">
<cd:arguments>
<cd:keywords list="yes">
<cd:constant type="top"/>
@@ -108,7 +114,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="setupbackgrounds" variant="2" file="page-bck.mkiv">
+ <cd:command name="setupbackgrounds" variant="page" file="page-bck.mkiv">
<cd:arguments>
<cd:keywords list="yes" optional="yes">
<cd:constant type="paper"/>
@@ -158,4 +164,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-bar.xml b/tex/context/interface/mkiv/i-bar.xml
index 3f339b9a0..951448249 100644
--- a/tex/context/interface/mkiv/i-bar.xml
+++ b/tex/context/interface/mkiv/i-bar.xml
@@ -26,6 +26,10 @@
<cd:constant type="no" default="yes"/>
<cd:constant type="all"/>
</cd:parameter>
+ <cd:parameter name="empty">
+ <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"/>
@@ -68,6 +72,12 @@
<cd:parameter name="mp">
<cd:constant type="cd:name"/>
</cd:parameter>
+ <cd:parameter name="left">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -85,13 +95,31 @@
-->
- <cd:command name="bar" generated="yes" variant="generated" file="node-rul.mkiv">
+ <cd:command name="bar" generated="yes" variant="example" file="node-rul.mkiv">
<cd:sequence>
<cd:variable value="bar"/>
</cd:sequence>
<cd:arguments>
<cd:content/>
</cd:arguments>
+ <cd:instances>
+ <cd:constant value="overbar"/>
+ <cd:constant value="underbar"/>
+ <cd:constant value="overstrike"/>
+ <cd:constant value="understrike"/>
+ <cd:constant value="overbars"/>
+ <cd:constant value="underbars"/>
+ <cd:constant value="overstrikes"/>
+ <cd:constant value="understrikes"/>
+ <cd:constant value="underrandom"/>
+ <cd:constant value="underrandoms"/>
+ <cd:constant value="underdash"/>
+ <cd:constant value="underdashes"/>
+ <cd:constant value="underdot"/>
+ <cd:constant value="underdots"/>
+ <cd:constant value="nobar"/>
+ <cd:constant value="hiddenbar"/>
+ </cd:instances>
</cd:command>
<cd:command name="bar" type="environment" file="node-rul.mkiv">
@@ -130,6 +158,12 @@
</cd:arguments>
</cd:command>
+ <cd:command name="hiddenbar" file="node-rul.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
<cd:command name="overstrike" file="node-rul.mkiv">
<cd:arguments>
<cd:content/>
@@ -202,4 +236,12 @@
</cd:arguments>
</cd:command>
+ <cd:command name="nobar" file="node-rul.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetbar" file="node-rul.mkiv"/>
+
</cd:interface>
diff --git a/tex/context/interface/mkiv/i-bleed.xml b/tex/context/interface/mkiv/i-bleed.xml
index 15a2fe5f7..301f7d066 100644
--- a/tex/context/interface/mkiv/i-bleed.xml
+++ b/tex/context/interface/mkiv/i-bleed.xml
@@ -61,4 +61,4 @@
<cd:command name="bleedheight" file="pack-box.mkiv"/>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-block.xml b/tex/context/interface/mkiv/i-block.xml
index 980b5b435..837b2133d 100644
--- a/tex/context/interface/mkiv/i-block.xml
+++ b/tex/context/interface/mkiv/i-block.xml
@@ -37,7 +37,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="block" type="environment" generated="yes" variant="generated" begin="begin" end="end" file="strc-blk.mkiv">
+ <cd:command name="block" type="environment" generated="yes" variant="example" begin="begin" end="end" file="strc-blk.mkiv">
<cd:sequence>
<cd:variable value="block"/>
</cd:sequence>
@@ -117,4 +117,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-bookmark.xml b/tex/context/interface/mkiv/i-bookmark.xml
index 5b7aec9a8..68d893609 100644
--- a/tex/context/interface/mkiv/i-bookmark.xml
+++ b/tex/context/interface/mkiv/i-bookmark.xml
@@ -76,4 +76,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-boxes.xml b/tex/context/interface/mkiv/i-boxes.xml
index a9eeb96ae..648106b89 100644
--- a/tex/context/interface/mkiv/i-boxes.xml
+++ b/tex/context/interface/mkiv/i-boxes.xml
@@ -142,7 +142,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="limitatetext" variant="1" file="supp-box.mkiv">
+ <cd:command name="limitatetext" file="supp-box.mkiv">
<cd:arguments>
<cd:resolve name="argument-text"/>
<cd:keywords delimiters="braces">
@@ -152,7 +152,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="limitatetext" variant="2" file="supp-box.mkiv">
+ <cd:command name="limitatetext" variant="list" file="supp-box.mkiv">
<cd:arguments>
<cd:resolve name="argument-text"/>
<cd:keywords delimiters="braces" list="yes">
@@ -444,7 +444,7 @@
<cd:content/>
</cd:arguments>
</cd:command>
-
+
<cd:command name="limitatelines" file="supp-box.mkiv">
<cd:arguments>
<cd:resolve name="argument-number"/>
@@ -866,6 +866,63 @@
</cd:arguments>
</cd:command>
+ <cd:command name="runninghbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="vbox" type="environment" begin="begin" end="end" file="supp-box.mkiv"/>
+
+ <cd:command name="hbox" type="environment" begin="begin" end="end" file="supp-box.mkiv"/>
+
+ <cd:command name="vtop" type="environment" begin="begin" end="end" file="supp-box.mkiv"/>
+
+ <cd:command name="setvboxregister" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-box"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="sethboxregister" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-box"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setvtopregister" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-box"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="flushboxregister" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-box"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="vboxregister" type="environment" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-box"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="hboxregister" type="environment" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-box"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="vtopregister" type="environment" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-box"/>
+ </cd:arguments>
+ </cd:command>
+
<cd:command name="righttolefthbox" file="spac-ali.mkiv">
<cd:arguments>
<cd:resolve name="string-boxoptions"/>
@@ -969,7 +1026,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="hbox" generated="yes" variant="generated" file="spac-ali.mkiv">
+ <cd:command name="hbox" generated="yes" variant="example" file="spac-ali.mkiv">
<cd:sequence>
<cd:string value="hbox"/>
<cd:variable value="box"/>
@@ -979,4 +1036,7 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+ <cd:command name="lastlinewidth" file="supp-box.mkiv">
+ </cd:command>
+
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-buffer.xml b/tex/context/interface/mkiv/i-buffer.xml
index ad1ffd519..38571fcd4 100644
--- a/tex/context/interface/mkiv/i-buffer.xml
+++ b/tex/context/interface/mkiv/i-buffer.xml
@@ -97,13 +97,16 @@
</cd:arguments>
</cd:command>
- <cd:command name="buffer" type="environment" generated="yes" variant="generated" file="buff-ini.mkiv">
+ <cd:command name="buffer" type="environment" generated="yes" variant="example" file="buff-ini.mkiv">
<cd:sequence>
<cd:variable value="buffer"/>
</cd:sequence>
+ <cd:instances>
+ <cd:constant value="hiding"/>
+ </cd:instances>
</cd:command>
- <cd:command name="getbuffer" generated="yes" variant="generated" file="buff-ini.mkiv">
+ <cd:command name="getbuffer" generated="yes" variant="example" file="buff-ini.mkiv">
<cd:sequence>
<cd:string value="get"/>
<cd:variable value="buffer"/>
@@ -121,14 +124,14 @@
</cd:arguments>
</cd:command>
- <cd:command name="savebuffer" variant="1" file="buff-ini.mkiv">
+ <cd:command name="savebuffer" variant="list" 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:command name="savebuffer" file="buff-ini.mkiv">
<cd:arguments>
<cd:assignments list="yes">
<cd:parameter name="list">
@@ -172,7 +175,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="typebuffer" generated="yes" variant="generated" file="buff-ver.mkiv">
+ <cd:command name="typebuffer" generated="yes" variant="example" file="buff-ver.mkiv">
<cd:sequence>
<cd:string value="type"/>
<cd:variable value="buffer"/>
@@ -193,4 +196,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-button.xml b/tex/context/interface/mkiv/i-button.xml
index 1f6dfd5bf..0ccb2d28d 100644
--- a/tex/context/interface/mkiv/i-button.xml
+++ b/tex/context/interface/mkiv/i-button.xml
@@ -60,7 +60,7 @@
-->
- <cd:command name="button" generated="yes" variant="generated" file="scrn-but.mkvi">
+ <cd:command name="button" generated="yes" variant="example" file="scrn-but.mkvi">
<cd:sequence>
<cd:variable value="button"/>
</cd:sequence>
@@ -71,6 +71,9 @@
<cd:resolve name="argument-text"/>
<cd:resolve name="keyword-reference"/>
</cd:arguments>
+ <cd:instances>
+ <cd:constant value="button"/>
+ </cd:instances>
</cd:command>
<cd:command name="button" file="scrn-but.mkvi">
@@ -83,13 +86,13 @@
</cd:arguments>
</cd:command>
- <cd:command name="overlaybutton" variant="1" file="scrn-but.mkvi">
+ <cd:command name="overlaybutton" 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:command name="overlaybutton" variant="direct" file="scrn-but.mkvi">
<cd:arguments>
<cd:resolve name="argument-reference"/>
</cd:arguments>
@@ -135,21 +138,25 @@
</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="psh" scope="interactionmenu" 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" scope="interactionmenu" 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:command name="rollbutton" variant="interactionmenu" file="scrn-fld.mkvi">
<cd:arguments>
<cd:resolve name="keyword-name-optional"/>
<cd:assignments list="yes" optional="yes">
@@ -160,7 +167,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="rollbutton" variant="2" file="scrn-fld.mkvi">
+ <cd:command name="rollbutton" variant="button" file="scrn-fld.mkvi">
<cd:arguments>
<cd:assignments list="yes">
<cd:inherit name="setupbutton"/>
@@ -170,18 +177,22 @@
</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:command name="rob" scope="interactionmenu" 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" type="environment" scope="interactionmenu" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ -->
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-capitals.xml b/tex/context/interface/mkiv/i-capitals.xml
index bfbb6bb2b..154a1a040 100644
--- a/tex/context/interface/mkiv/i-capitals.xml
+++ b/tex/context/interface/mkiv/i-capitals.xml
@@ -205,4 +205,4 @@
<cd:command name="randomized" type="environment" file="typo-cap.mkiv"/>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-catcodes.xml b/tex/context/interface/mkiv/i-catcodes.xml
index 7c3f649d5..b8636ceee 100644
--- a/tex/context/interface/mkiv/i-catcodes.xml
+++ b/tex/context/interface/mkiv/i-catcodes.xml
@@ -120,4 +120,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-character.xml b/tex/context/interface/mkiv/i-character.xml
index 47bc714fa..f7f0e08db 100644
--- a/tex/context/interface/mkiv/i-character.xml
+++ b/tex/context/interface/mkiv/i-character.xml
@@ -133,4 +133,4 @@
<cd:command name="textplus" file="enco-ini.mkiv"/>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-characteralign.xml b/tex/context/interface/mkiv/i-characteralign.xml
index 2ee8d0cd9..a515ba1e9 100644
--- a/tex/context/interface/mkiv/i-characteralign.xml
+++ b/tex/context/interface/mkiv/i-characteralign.xml
@@ -42,4 +42,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-chart.xml b/tex/context/interface/mkiv/i-chart.xml
new file mode 100644
index 000000000..06c356041
--- /dev/null
+++ b/tex/context/interface/mkiv/i-chart.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">
+
+ <?context-directive job ctxfile x-setups.ctx ?>
+
+ <!-- still incomplete -->
+
+ <cd:command name="setupFLOWcharts" file="m-chart.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="height">
+ <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="nx">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="ny">
+ <cd:constant type="cd:number"/>
+ </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="labeloffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="commentoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="exitoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="split">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="bodyfont">
+ <cd:inherit name="setupbodyfont"/>
+ </cd:parameter>
+ <cd:parameter name="option">
+ <cd:constant type="test"/>
+ </cd:parameter>
+ <!-- dot: private option -->
+ <cd:parameter name="focus">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="autofocus">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="autofocus">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="background">
+ <cd:resolve name="value-background"/>
+ </cd:parameter>
+ <cd:parameter name="framecolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="backgroundcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="rulethickness">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="frame">
+ <cd:constant type="on" default="yes"/>
+ <cd:constant type="off"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupFLOWlines" file="m-chart.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="color">
+ <cd:constant name="round"/>
+ <cd:constant name="normal" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="arrow">
+ <cd:constant name="yes" default="yes"/>
+ <cd:constant name="no"/>
+ </cd:parameter>
+ <cd:parameter name="dash">
+ <cd:constant name="yes"/>
+ <cd:constant name="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="radius">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant name="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="rulethickness">
+ <cd:constant name="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="offset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupFLOWshapes" file="m-chart.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="default">
+ <cd:resolve name="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="framecolor">
+ <cd:constant name="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="background">
+ <cd:resolve name="value-background"/>
+ </cd:parameter>
+ <cd:parameter name="backgroundcolor">
+ <cd:constant name="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="rulethickness">
+ <cd:constant name="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="offset">
+ <cd:constant type="none"/>
+ <cd:constant type="overlay"/>
+ <cd:constant type="standard"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupFLOWfocus" file="m-chart.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="background">
+ <cd:inherit name="setupFLOWshape"/>
+ </cd:parameter>
+ <cd:parameter name="backgroundcolor">
+ <cd:inherit name="setupFLOWshape"/>
+ </cd:parameter>
+ <cd:parameter name="rulethickness">
+ <cd:inherit name="setupFLOWshape"/>
+ </cd:parameter>
+ <cd:parameter name="offset">
+ <cd:inherit name="setupFLOWshape"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupFLOWsplit" file="m-chart.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="dx">
+ <cd:constant name="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="dy">
+ <cd:constant name="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="nx">
+ <cd:constant name="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="ny">
+ <cd:constant name="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="command">
+ <cd:constant name="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant name="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant name="cd:command"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ startFLOWchart [name]
+ FLOWchart [name]
+ startFLOWcell [key=value]
+ includeFLOWchart
+
+ name shape destination focus overlay location text label comment exit
+ connection include figure connect locate
+ -->
+
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-chemical.xml b/tex/context/interface/mkiv/i-chemical.xml
index d300f9008..1a81b82fc 100644
--- a/tex/context/interface/mkiv/i-chemical.xml
+++ b/tex/context/interface/mkiv/i-chemical.xml
@@ -252,4 +252,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-cleaning.xml b/tex/context/interface/mkiv/i-cleaning.xml
index d982a5dd5..e37eb7999 100644
--- a/tex/context/interface/mkiv/i-cleaning.xml
+++ b/tex/context/interface/mkiv/i-cleaning.xml
@@ -44,4 +44,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-collector.xml b/tex/context/interface/mkiv/i-collector.xml
index dab49f14c..a75f3534e 100644
--- a/tex/context/interface/mkiv/i-collector.xml
+++ b/tex/context/interface/mkiv/i-collector.xml
@@ -111,4 +111,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-color.xml b/tex/context/interface/mkiv/i-color.xml
index 3f98914e4..4168216a9 100644
--- a/tex/context/interface/mkiv/i-color.xml
+++ b/tex/context/interface/mkiv/i-color.xml
@@ -39,7 +39,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="definecolor" variant="1" file="colo-ini.mkiv">
+ <cd:command name="definecolor" file="colo-ini.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name"/>
<cd:assignments list="yes">
@@ -77,24 +77,7 @@
<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:resolve name="value-transparency"/>
</cd:parameter>
<cd:parameter name="t">
<cd:constant type="cd:number"/>
@@ -103,14 +86,14 @@
</cd:arguments>
</cd:command>
- <cd:command name="definecolor" variant="2" file="colo-ini.mkiv">
+ <cd:command name="definecolor" variant="name" 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:command name="defineglobalcolor" file="colo-ini.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name"/>
<cd:assignments list="yes">
@@ -119,14 +102,14 @@
</cd:arguments>
</cd:command>
- <cd:command name="defineglobalcolor" variant="2" file="colo-ini.mkiv">
+ <cd:command name="defineglobalcolor" variant="name" 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:command name="definenamedcolor" file="colo-ini.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name"/>
<cd:assignments list="yes">
@@ -135,7 +118,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="definenamedcolor" variant="2" file="colo-ini.mkiv">
+ <cd:command name="definenamedcolor" variant="name" file="colo-ini.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name"/>
<cd:resolve name="keyword-color"/>
@@ -158,24 +141,7 @@
<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:resolve name="value-transparency"/>
</cd:parameter>
<cd:parameter name="t">
<cd:constant type="cd:number"/>
@@ -207,13 +173,34 @@
</cd:arguments>
</cd:command>
- <cd:command name="definetransparency" file="colo-ini.mkiv">
+ <cd:command name="definetransparency" variant="1" file="colo-ini.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name"/>
<cd:resolve name="keyword-number"/>
</cd:arguments>
</cd:command>
+ <cd:command name="definetransparency" variant="2" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="a">
+ <cd:resolve name="value-transparency"/>
+ </cd:parameter>
+ <cd:parameter name="t">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definetransparency" variant="3" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
<cd:command name="switchtocolor" file="colo-ini.mkiv">
<cd:arguments>
<cd:resolve name="keyword-color"/>
@@ -227,6 +214,20 @@
</cd:arguments>
</cd:command>
+ <cd:command name="coloronly" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-color"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="transparent" 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"/>
@@ -234,14 +235,14 @@
</cd:arguments>
</cd:command>
- <cd:command name="colored" variant="1" file="colo-ini.mkiv">
+ <cd:command name="colored" variant="name" 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:command name="colored" file="colo-ini.mkiv">
<cd:arguments>
<cd:assignments list="yes">
<cd:inherit name="definecolor"/>
@@ -256,19 +257,31 @@
</cd:arguments>
</cd:command>
+ <cd:command name="coloronly" type="environment" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-color"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="transparent" 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:command name="directcolored" variant="name" 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:command name="directcolored" file="colo-ini.mkiv">
<cd:arguments>
<cd:assignments list="yes">
<cd:inherit name="definecolor"/>
@@ -353,7 +366,7 @@
<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:command name="definepalet" file="colo-ini.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name"/>
<cd:assignments list="yes">
@@ -364,7 +377,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="definepalet" variant="2" file="colo-ini.mkiv">
+ <cd:command name="definepalet" variant="name" file="colo-ini.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name"/>
<cd:resolve name="keyword-name"/>
@@ -594,4 +607,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-combination.xml b/tex/context/interface/mkiv/i-combination.xml
index 4e7ea2d52..492edadd0 100644
--- a/tex/context/interface/mkiv/i-combination.xml
+++ b/tex/context/interface/mkiv/i-combination.xml
@@ -85,7 +85,7 @@
-->
- <cd:command name="combination" type="environment" variant="1" file="pack-com.mkiv">
+ <cd:command name="combination" type="environment" variant="matrix" file="pack-com.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name-optional"/>
<cd:keywords optional="yes">
@@ -94,7 +94,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="combination" type="environment" variant="2" file="pack-com.mkiv">
+ <cd:command name="combination" type="environment" file="pack-com.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name-optional"/>
<cd:assignments list="yes" optional="yes">
@@ -105,13 +105,13 @@
<!--
- <cd:command name="content" type="environment" variant="combination" file="pack-com.mkiv"/>
+ <cd:command name="content" type="environment" scope="combination" file="pack-com.mkiv"/>
- <cd:command name="caption" type="environment" variant="combination" file="pack-com.mkiv"/>
+ <cd:command name="caption" type="environment" scope="combination" file="pack-com.mkiv"/>
-->
- <cd:command name="floatcombination" type="environment" variant="1" file="pack-com.mkiv">
+ <cd:command name="floatcombination" type="environment" variant="matrix" file="pack-com.mkiv">
<cd:arguments>
<cd:keywords optional="yes">
<cd:constant type="cd:matrix"/>
@@ -120,7 +120,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="floatcombination" type="environment" variant="2" file="pack-com.mkiv">
+ <cd:command name="floatcombination" type="environment" file="pack-com.mkiv">
<cd:arguments>
<cd:assignments list="yes" optional="yes">
<cd:inherit name="setupcombination"/>
@@ -128,4 +128,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-commandhandler.xml b/tex/context/interface/mkiv/i-commandhandler.xml
index 210690d3e..6550898b6 100644
--- a/tex/context/interface/mkiv/i-commandhandler.xml
+++ b/tex/context/interface/mkiv/i-commandhandler.xml
@@ -311,4 +311,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-comment.xml b/tex/context/interface/mkiv/i-comment.xml
index 52d54398b..e7f18fb0e 100644
--- a/tex/context/interface/mkiv/i-comment.xml
+++ b/tex/context/interface/mkiv/i-comment.xml
@@ -91,7 +91,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="comment" generated="yes" variant="generated" file="scrn-wid.mkvi">
+ <cd:command name="comment" generated="yes" variant="example" file="scrn-wid.mkvi">
<cd:sequence>
<cd:variable value="comment"/>
</cd:sequence>
@@ -102,9 +102,12 @@
</cd:assignments>
<cd:resolve name="argument-text"/>
</cd:arguments>
+ <cd:instances>
+ <cd:constant value="comment"/>
+ </cd:instances>
</cd:command>
- <cd:command name="comment" type="environment" generated="yes" variant="generated" file="scrn-wid.mkvi">
+ <cd:command name="comment" type="environment" generated="yes" variant="example" file="scrn-wid.mkvi">
<cd:sequence>
<cd:variable value="comment"/>
</cd:sequence>
@@ -114,6 +117,9 @@
<cd:inherit name="setupcomment"/>
</cd:assignments>
</cd:arguments>
+ <cd:instances>
+ <cd:constant value="comment"/>
+ </cd:instances>
</cd:command>
<cd:command name="placecomments" file="scrn-wid.mkvi"/>
diff --git a/tex/context/interface/mkiv/i-common-argument.xml b/tex/context/interface/mkiv/i-common-argument.xml
index 9e7429800..b3b2cd5bc 100644
--- a/tex/context/interface/mkiv/i-common-argument.xml
+++ b/tex/context/interface/mkiv/i-common-argument.xml
@@ -1,7 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<?context-directive job ctxfile x-setups.ctx ?>
-
<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
<!-- * -->
@@ -91,6 +89,32 @@
</cd:keywords>
</cd:define>
+ <!-- @WS: These were unresolved. Shouldn't they become text? -->
+
+ <cd:define name="argument-content">
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:content/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="argument-content-optional">
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:content/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="argument-content-list">
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:content/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="argument-content-list-optional">
+ <cd:keywords delimiters="braces" list="yes" optional="yes">
+ <cd:content/>
+ </cd:keywords>
+ </cd:define>
+
<!-- * -->
<!-- \... {...} -->
<!-- -->
@@ -120,6 +144,35 @@
</cd:keywords>
</cd:define>
+ <!-- * -->
+ <!-- \... {...} -->
+ <!-- -->
+ <!-- * PATH -->
+
+ <cd:define name="argument-path">
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:path"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="argument-path-optional">
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:path"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="argument-path-list">
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:path"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="argument-path-list-optional">
+ <cd:keywords delimiters="braces" list="yes" optional="yes">
+ <cd:constant type="cd:path"/>
+ </cd:keywords>
+ </cd:define>
+
<!-- * -->
<!-- \... {...} -->
<!-- -->
@@ -494,4 +547,4 @@
</cd:keywords>
</cd:define>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-common-assignment.xml b/tex/context/interface/mkiv/i-common-assignment.xml
index 0f11d0137..900a75452 100644
--- a/tex/context/interface/mkiv/i-common-assignment.xml
+++ b/tex/context/interface/mkiv/i-common-assignment.xml
@@ -1,7 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<?context-directive job ctxfile x-setups.ctx ?>
-
<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
<!-- * -->
diff --git a/tex/context/interface/mkiv/i-common-definitions.xml b/tex/context/interface/mkiv/i-common-definitions.xml
index 1bb84efdc..9f6d461f9 100644
--- a/tex/context/interface/mkiv/i-common-definitions.xml
+++ b/tex/context/interface/mkiv/i-common-definitions.xml
@@ -1,7 +1,5 @@
<?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"/>
@@ -9,5 +7,6 @@
<cd:interfacefile filename="i-common-keyword.xml"/>
<cd:interfacefile filename="i-common-string.xml"/>
<cd:interfacefile filename="i-common-value.xml"/>
+ <cd:interfacefile filename="i-common-instance.xml"/>
</cd:interface>
diff --git a/tex/context/interface/mkiv/i-common-instance.xml b/tex/context/interface/mkiv/i-common-instance.xml
new file mode 100644
index 000000000..8cde55b2e
--- /dev/null
+++ b/tex/context/interface/mkiv/i-common-instance.xml
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:define name="instance-float">
+ <cd:constant value="chemical"/>
+ <cd:constant value="figure"/>
+ <cd:constant value="table"/>
+ <cd:constant value="intermezzo"/>
+ <cd:constant value="graphic"/>
+ </cd:define>
+
+ <cd:define name="instance-itemgroup">
+ <cd:constant value="itemize"/>
+ </cd:define>
+
+ <cd:define name="instance-labeltext">
+ <!-- tode -->
+ </cd:define>
+
+ <cd:define name="instance-labelclass">
+ <!-- tode -->
+ </cd:define>
+
+ <cd:define name="instance-lines">
+ <!-- tode -->
+ </cd:define>
+
+ <cd:define name="instance-combinedlist">
+ <!-- tode -->
+ </cd:define>
+
+ <cd:define name="instance-low">
+ <!-- tode -->
+ </cd:define>
+
+ <cd:define name="instance-high">
+ <!-- tode -->
+ </cd:define>
+
+ <cd:define name="instance-makeup">
+ <!-- tode -->
+ </cd:define>
+
+ <cd:define name="instance-margindata">
+ <!-- tode -->
+ </cd:define>
+
+ <cd:define name="instance-mathalignment">
+ <!-- tode -->
+ </cd:define>
+
+ <cd:define name="instance-mathcases">
+ <!-- tode -->
+ </cd:define>
+
+ <cd:define name="instance-mathmatrix">
+ <!-- tode -->
+ </cd:define>
+
+ <cd:define name="instance-mixedcolumns">
+ <!-- tode -->
+ </cd:define>
+
+ <cd:define name="instance-note">
+ <!-- tode -->
+ </cd:define>
+
+ <cd:define name="instance-linenote">
+ <!-- tode -->
+ </cd:define>
+
+ <cd:define name="instance-pairedbox">
+ <!-- tode -->
+ </cd:define>
+
+ <cd:define name="instance-register">
+ <!-- tode -->
+ </cd:define>
+
+ <cd:define name="instance-script">
+ <!-- tode -->
+ </cd:define>
+
+ <cd:define name="instance-section">
+ <cd:constant value="chapter"/>
+ <cd:constant value="section"/>
+ <cd:constant value="subsection"/>
+ <cd:constant value="subsubsection"/>
+ <cd:constant value="subsubsubsection"/>
+ <cd:constant value="subsubsubsubsection"/>
+ <cd:constant value="title"/>
+ <cd:constant value="subject"/>
+ <cd:constant value="subsubject"/>
+ <cd:constant value="subsubsubject"/>
+ <cd:constant value="subsubsubsubject"/>
+ <cd:constant value="subsubsubsubsubject"/>
+ </cd:define>
+
+ <cd:define name="instance-sectionblock">
+ <!-- tode -->
+ </cd:define>
+
+ <cd:define name="instance-shift">
+ <!-- tode -->
+ </cd:define>
+
+ <cd:define name="instance-sort">
+ <!-- tode -->
+ </cd:define>
+
+ <cd:define name="instance-sortlist">
+ <!-- tode -->
+ </cd:define>
+
+ <cd:define name="instance-synonym">
+ <!-- tode -->
+ </cd:define>
+
+ <cd:define name="instance-synonymlist">
+ <!-- tode -->
+ </cd:define>
+
+ <cd:define name="instance-tabulate">
+ <!-- tode -->
+ </cd:define>
+
+ <cd:define name="instance-tooltip">
+ <!-- tode -->
+ </cd:define>
+
+ <cd:define name="instance-unit">
+ <!-- tode -->
+ </cd:define>
+
+ <cd:define name="instance-typing">
+ <!-- tode -->
+ </cd:define>
+
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-common-keyword.xml b/tex/context/interface/mkiv/i-common-keyword.xml
index 15eed8628..e087ea5ac 100644
--- a/tex/context/interface/mkiv/i-common-keyword.xml
+++ b/tex/context/interface/mkiv/i-common-keyword.xml
@@ -1,7 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<?context-directive job ctxfile x-setups.ctx ?>
-
<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
<!-- * -->
@@ -471,6 +469,35 @@
<!-- * -->
<!-- \... [...] -->
<!-- -->
+ <!-- * PATH -->
+
+ <cd:define name="keyword-path">
+ <cd:keywords>
+ <cd:constant type="cd:path"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-path-optional">
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:path"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-path-list">
+ <cd:keywords list="yes">
+ <cd:constant type="cd:path"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-path-list-optional">
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:path"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... [...] -->
+ <!-- -->
<!-- * FONT -->
<cd:define name="keyword-font">
@@ -701,4 +728,26 @@
</cd:keywords>
</cd:define>
+ <!-- * -->
+ <!-- \... [...] -->
+ <!-- -->
+ <!-- * FORMULA -->
+
+ <cd:define name="keyword-formula-list-optional">
+ <cd:keywords list="yes" optional="yes">
+ <cd:resolve name="value-formula"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... [...] -->
+ <!-- -->
+ <!-- * FORMULAREFERENCE -->
+
+ <cd:define name="keyword-formulareference-list-optional">
+ <cd:keywords list="yes" optional="yes">
+ <cd:resolve name="value-formulareference"/>
+ </cd:keywords>
+ </cd:define>
+
</cd:interface> \ No newline at end of file
diff --git a/tex/context/interface/mkiv/i-common-string.xml b/tex/context/interface/mkiv/i-common-string.xml
index 8e940e6f3..68bde02ed 100644
--- a/tex/context/interface/mkiv/i-common-string.xml
+++ b/tex/context/interface/mkiv/i-common-string.xml
@@ -1,7 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<?context-directive job ctxfile x-setups.ctx ?>
-
<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
<!-- * -->
diff --git a/tex/context/interface/mkiv/i-common-value.xml b/tex/context/interface/mkiv/i-common-value.xml
index f111292b8..36f2c1d52 100644
--- a/tex/context/interface/mkiv/i-common-value.xml
+++ b/tex/context/interface/mkiv/i-common-value.xml
@@ -1,9 +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">
+ <!-- background = ... -->
+
+ <cd:define name="value-background">
+ <cd:constant type="foreground"/>
+ <cd:constant type="color"/>
+ <cd:constant type="cd:name"/>
+ </cd:define>
+
<!-- style = ... -->
<cd:define name="value-style">
@@ -11,6 +17,29 @@
<cd:constant type="cd:command"/>
</cd:define>
+ <!-- a = ... -->
+
+ <cd:define name="value-transparency">
+ <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:define>
+
<!-- mathstyle = ... -->
<cd:define name="value-mathstyle">
@@ -267,7 +296,10 @@
<cd:constant type="page"/>
<cd:constant type="leftpage"/>
<cd:constant type="rightpage"/>
+ <cd:constant type="header"/>
+ <cd:constant type="footer"/>
<cd:constant type="somewhere"/>
+ <cd:constant type="effective"/>
</cd:define>
<!-- sortorder = ... -->
@@ -543,4 +575,22 @@
<cd:constant type="editor"/>
</cd:define>
-</cd:interface> \ No newline at end of file
+ <!-- formula = ... -->
+
+ <cd:define name="value-formula">
+ <cd:constant type="packed"/>
+ <cd:constant type="tight"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="frame"/>
+ <cd:inherit name="setupbodyfont"/>
+ </cd:define>
+
+ <!-- formula = ... -->
+
+ <cd:define name="value-formulareference">
+ <cd:constant type="+"/>
+ <cd:constant type="-"/>
+ <cd:constant type="cd:reference"/>
+ </cd:define>
+
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-context.pdf b/tex/context/interface/mkiv/i-context.pdf
index fb29c8b5b..27a797b07 100644
--- a/tex/context/interface/mkiv/i-context.pdf
+++ b/tex/context/interface/mkiv/i-context.pdf
Binary files differ
diff --git a/tex/context/interface/mkiv/i-conversion.xml b/tex/context/interface/mkiv/i-conversion.xml
index b4755c27c..47440ddac 100644
--- a/tex/context/interface/mkiv/i-conversion.xml
+++ b/tex/context/interface/mkiv/i-conversion.xml
@@ -317,8 +317,8 @@
<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="year"/>
+ <cd:constant type="month"/>
<cd:constant type="day"/>
<cd:constant type="weekday"/>
<cd:constant type="y"/>
@@ -341,6 +341,19 @@
<cd:constant type="dd:ord"/>
<cd:constant type="D:ord"/>
<cd:constant type="cd:text"/>
+ <cd:constant type="referral"/>
+ <cd:constant type="day:+"/>
+ <cd:constant type="day:++"/>
+ <cd:constant type="d:+"/>
+ <cd:constant type="d:++"/>
+ <cd:constant type="dd:+"/>
+ <cd:constant type="dd:++"/>
+ <cd:constant type="D:+"/>
+ <cd:constant type="D:++"/>
+ <cd:constant type="month:jalali"/>
+ <cd:constant type="m:jalali"/>
+ <cd:constant type="jalali:to"/>
+ <cd:constant type="jalali:from"/>
</cd:keywords>
</cd:arguments>
</cd:command>
@@ -399,7 +412,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="defineconversion" variant="1" file="core-con.mkiv">
+ <cd:command name="defineconversion" file="core-con.mkiv">
<cd:arguments>
<cd:resolve name="keyword-language-optional"/>
<cd:resolve name="keyword-name"/>
@@ -407,7 +420,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="defineconversion" variant="2" file="core-con.mkiv">
+ <cd:command name="defineconversion" variant="list" file="core-con.mkiv">
<cd:arguments>
<cd:resolve name="keyword-language-optional"/>
<cd:resolve name="keyword-name"/>
@@ -629,4 +642,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-counter.xml b/tex/context/interface/mkiv/i-counter.xml
index 7701d40cd..55630b511 100644
--- a/tex/context/interface/mkiv/i-counter.xml
+++ b/tex/context/interface/mkiv/i-counter.xml
@@ -514,4 +514,4 @@
-->
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-dataset.xml b/tex/context/interface/mkiv/i-dataset.xml
index 914fe0af1..6f4f9fb9f 100644
--- a/tex/context/interface/mkiv/i-dataset.xml
+++ b/tex/context/interface/mkiv/i-dataset.xml
@@ -16,7 +16,7 @@
<cd:command name="setupdataset" file="core-dat.mkiv">
<cd:arguments>
- <cd:resolve name="keyword-name-optional-list"/>
+ <cd:resolve name="keyword-name-list-optional"/>
<cd:assignments list="yes">
<cd:parameter name="delay">
<cd:constant type="yes"/>
diff --git a/tex/context/interface/mkiv/i-define.xml b/tex/context/interface/mkiv/i-define.xml
index 0d0398e5d..2db8614c0 100644
--- a/tex/context/interface/mkiv/i-define.xml
+++ b/tex/context/interface/mkiv/i-define.xml
@@ -20,4 +20,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-delimitedtext.xml b/tex/context/interface/mkiv/i-delimitedtext.xml
index 24fa581fd..d75fb957e 100644
--- a/tex/context/interface/mkiv/i-delimitedtext.xml
+++ b/tex/context/interface/mkiv/i-delimitedtext.xml
@@ -25,6 +25,8 @@
<cd:constant type="cd:command"/>
</cd:parameter>
<cd:parameter name="language">
+ <cd:constant type="local"/>
+ <cd:constant type="global"/>
<cd:constant type="cd:language"/>
</cd:parameter>
<cd:parameter name="method">
@@ -88,29 +90,46 @@
</cd:arguments>
</cd:command>
- <cd:command name="delimitedtext" generated="yes" variant="generated" file="typo-del.mkiv">
+ <cd:command name="delimitedtext" generated="yes" variant="example" file="typo-del.mkiv">
<cd:sequence>
<cd:variable value="delimitedtext"/>
</cd:sequence>
<cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
<cd:content/>
</cd:arguments>
+ <cd:instances>
+ <cd:constant value="quotation"/>
+ <cd:constant value="quote"/>
+ <cd:constant value="blockquote"/>
+ <cd:constant value="speech"/>
+ <cd:constant value="aside"/>
+ </cd:instances>
</cd:command>
- <cd:command name="delimitedtext" type="environment" generated="yes" variant="generated" file="typo-del.mkiv">
+ <cd:command name="delimitedtext" type="environment" generated="yes" variant="example" file="typo-del.mkiv">
<cd:sequence>
<cd:variable value="delimitedtext"/>
</cd:sequence>
<cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
<cd:keywords list="yes" optional="yes">
<cd:inherit name="startnarrower"/>
</cd:keywords>
</cd:arguments>
+ <cd:instances>
+ <cd:constant value="quotation"/>
+ <cd:constant value="quote"/>
+ <cd:constant value="blockquote"/>
+ <cd:constant value="speech"/>
+ <cd:constant value="aside"/>
+ </cd:instances>
</cd:command>
<cd:command name="delimitedtext" file="typo-del.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-language-optional"/>
<cd:content/>
</cd:arguments>
</cd:command>
@@ -118,6 +137,7 @@
<cd:command name="delimitedtext" type="environment" file="typo-del.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-language-optional"/>
<cd:keywords list="yes" optional="yes">
<cd:inherit name="startnarrower"/>
</cd:keywords>
@@ -127,6 +147,7 @@
<cd:command name="delimited" file="typo-del.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-language-optional"/>
<cd:content/>
</cd:arguments>
</cd:command>
@@ -134,6 +155,7 @@
<cd:command name="delimited" type="environment" file="typo-del.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-language-optional"/>
<cd:keywords list="yes" optional="yes">
<cd:inherit name="startnarrower"/>
</cd:keywords>
@@ -142,12 +164,14 @@
<cd:command name="quotation" file="typo-del.mkiv">
<cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
<cd:content/>
</cd:arguments>
</cd:command>
<cd:command name="quotation" type="environment" file="typo-del.mkiv">
<cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
<cd:keywords list="yes" optional="yes">
<cd:inherit name="startnarrower"/>
</cd:keywords>
@@ -156,20 +180,27 @@
<cd:command name="quote" file="typo-del.mkiv">
<cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
<cd:content/>
</cd:arguments>
</cd:command>
- <cd:command name="quote" type="environment" file="typo-del.mkiv"/>
+ <cd:command name="quote" type="environment" file="typo-del.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ </cd:arguments>
+ </cd:command>
<cd:command name="blockquote" file="typo-del.mkiv">
<cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
<cd:content/>
</cd:arguments>
</cd:command>
<cd:command name="blockquote" type="environment" file="typo-del.mkiv">
<cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
<cd:keywords list="yes" optional="yes">
<cd:inherit name="startnarrower"/>
</cd:keywords>
@@ -178,6 +209,23 @@
<cd:command name="speech" file="typo-del.mkiv">
<cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="aside" type="environment" file="typo-del.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="startnarrower"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="aside" file="typo-del.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
<cd:content/>
</cd:arguments>
</cd:command>
@@ -214,4 +262,4 @@
<cd:command name="subsentence" type="environment" file="typo-del.mkiv"/>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-description.xml b/tex/context/interface/mkiv/i-description.xml
index 0204b3466..13b056d71 100644
--- a/tex/context/interface/mkiv/i-description.xml
+++ b/tex/context/interface/mkiv/i-description.xml
@@ -138,7 +138,7 @@
-->
- <cd:command name="description" type="environment" generated="yes" variant="generated:1" file="strc-des.mkvi">
+ <cd:command name="description" type="environment" generated="yes" variant="example" file="strc-des.mkvi">
<cd:sequence>
<cd:variable value="description"/>
</cd:sequence>
@@ -147,7 +147,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="description" type="environment" generated="yes" variant="generated:2" file="strc-des.mkvi">
+ <cd:command name="description" type="environment" generated="yes" variant="example:title" file="strc-des.mkvi">
<cd:sequence>
<cd:variable value="description"/>
</cd:sequence>
@@ -157,7 +157,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="description" generated="yes" variant="generated" file="strc-des.mkvi">
+ <cd:command name="description" generated="yes" variant="example" file="strc-des.mkvi">
<cd:sequence>
<cd:variable value="description"/>
</cd:sequence>
@@ -169,4 +169,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-digits.xml b/tex/context/interface/mkiv/i-digits.xml
index 325febab3..d9a4b9d2d 100644
--- a/tex/context/interface/mkiv/i-digits.xml
+++ b/tex/context/interface/mkiv/i-digits.xml
@@ -23,4 +23,4 @@
<cd:command name="dummydigit" file="typo-dig.mkiv"/>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-dimension.xml b/tex/context/interface/mkiv/i-dimension.xml
index 2962a3aef..7bf59467b 100644
--- a/tex/context/interface/mkiv/i-dimension.xml
+++ b/tex/context/interface/mkiv/i-dimension.xml
@@ -64,4 +64,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-direction.xml b/tex/context/interface/mkiv/i-direction.xml
index 725e215a3..630f07cb7 100644
--- a/tex/context/interface/mkiv/i-direction.xml
+++ b/tex/context/interface/mkiv/i-direction.xml
@@ -66,4 +66,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-document.xml b/tex/context/interface/mkiv/i-document.xml
index a2ed222d0..e2417ec63 100644
--- a/tex/context/interface/mkiv/i-document.xml
+++ b/tex/context/interface/mkiv/i-document.xml
@@ -10,7 +10,7 @@
<cd:command name="notext" type="environment" file="file-job.mkvi"/>
- <cd:command name="environment" type="environment" variant="1" file="file-job.mkvi">
+ <cd:command name="environment" type="environment" file="file-job.mkvi">
<cd:arguments>
<cd:keywords>
<cd:constant type="cd:file"/>
@@ -19,7 +19,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="environment" type="environment" variant="2" file="file-job.mkvi">
+ <cd:command name="environment" type="environment" variant="string" file="file-job.mkvi">
<cd:arguments>
<cd:keywords delimiters="none">
<cd:constant type="cd:file"/>
@@ -28,13 +28,13 @@
</cd:arguments>
</cd:command>
- <cd:command name="environment" variant="1" file="file-job.mkvi">
+ <cd:command name="environment" 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:command name="environment" variant="string" file="file-job.mkvi">
<cd:arguments>
<cd:resolve name="string-file"/>
</cd:arguments>
@@ -48,7 +48,7 @@
<cd:command name="currentenvironment" file="file-job.mkvi"/>
- <cd:command name="project" type="environment" variant="1" file="file-job.mkvi">
+ <cd:command name="project" type="environment" file="file-job.mkvi">
<cd:arguments>
<cd:keywords>
<cd:constant type="cd:file"/>
@@ -57,7 +57,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="project" type="environment" variant="2" file="file-job.mkvi">
+ <cd:command name="project" type="environment" variant="string" file="file-job.mkvi">
<cd:arguments>
<cd:keywords delimiters="none">
<cd:constant type="cd:file"/>
@@ -66,13 +66,13 @@
</cd:arguments>
</cd:command>
- <cd:command name="project" variant="1" file="file-job.mkvi">
+ <cd:command name="project" 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:command name="project" variant="string" file="file-job.mkvi">
<cd:arguments>
<cd:resolve name="string-file"/>
</cd:arguments>
@@ -86,7 +86,7 @@
<cd:command name="currentproject" file="file-job.mkvi"/>
- <cd:command name="product" type="environment" variant="1" file="file-job.mkvi">
+ <cd:command name="product" type="environment" file="file-job.mkvi">
<cd:arguments>
<cd:keywords>
<cd:constant type="cd:file"/>
@@ -95,7 +95,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="product" type="environment" variant="2" file="file-job.mkvi">
+ <cd:command name="product" type="environment" variant="string" file="file-job.mkvi">
<cd:arguments>
<cd:keywords delimiters="none">
<cd:constant type="cd:file"/>
@@ -104,13 +104,13 @@
</cd:arguments>
</cd:command>
- <cd:command name="product" variant="1" file="file-job.mkvi">
+ <cd:command name="product" 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:command name="product" variant="string" file="file-job.mkvi">
<cd:arguments>
<cd:resolve name="string-file"/>
</cd:arguments>
@@ -124,7 +124,7 @@
<cd:command name="currentproduct" file="file-job.mkvi"/>
- <cd:command name="component" type="environment" variant="1" file="file-job.mkvi">
+ <cd:command name="component" type="environment" file="file-job.mkvi">
<cd:arguments>
<cd:keywords>
<cd:constant type="cd:file"/>
@@ -133,7 +133,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="component" type="environment" variant="2" file="file-job.mkvi">
+ <cd:command name="component" type="environment" variant="string" file="file-job.mkvi">
<cd:arguments>
<cd:keywords delimiters="none">
<cd:constant type="cd:file"/>
@@ -142,13 +142,13 @@
</cd:arguments>
</cd:command>
- <cd:command name="component" variant="1" file="file-job.mkvi">
+ <cd:command name="component" 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:command name="component" variant="string" file="file-job.mkvi">
<cd:arguments>
<cd:resolve name="string-file"/>
</cd:arguments>
diff --git a/tex/context/interface/mkiv/i-dummy.xml b/tex/context/interface/mkiv/i-dummy.xml
index 452ac311e..6c7d4288f 100644
--- a/tex/context/interface/mkiv/i-dummy.xml
+++ b/tex/context/interface/mkiv/i-dummy.xml
@@ -55,4 +55,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-effect.xml b/tex/context/interface/mkiv/i-effect.xml
index c46c689e2..f6fd3e042 100644
--- a/tex/context/interface/mkiv/i-effect.xml
+++ b/tex/context/interface/mkiv/i-effect.xml
@@ -46,7 +46,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="effect" type="environment" generated="yes" variant="generated" file="attr-eff.mkiv">
+ <cd:command name="effect" type="environment" generated="yes" variant="example" file="attr-eff.mkiv">
<cd:sequence>
<cd:variable value="effect"/>
</cd:sequence>
diff --git a/tex/context/interface/mkiv/i-enumeration.xml b/tex/context/interface/mkiv/i-enumeration.xml
index abd1da232..70823cff3 100644
--- a/tex/context/interface/mkiv/i-enumeration.xml
+++ b/tex/context/interface/mkiv/i-enumeration.xml
@@ -4,7 +4,7 @@
<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
- <cd:command name="defineenumerations" file="strc-enu.mkvi">
+ <cd:command name="defineenumeration" file="strc-enu.mkvi">
<cd:arguments>
<cd:resolve name="keyword-name"/>
<cd:resolve name="keyword-name-optional"/>
@@ -185,7 +185,7 @@
-->
- <cd:command name="enumeration" type="environment" generated="yes" variant="generated:1" file="strc-enu.mkvi">
+ <cd:command name="enumeration" type="environment" generated="yes" variant="example" file="strc-enu.mkvi">
<cd:sequence>
<cd:variable value="enumeration"/>
</cd:sequence>
@@ -194,7 +194,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="enumeration" type="environment" generated="yes" variant="generated:2" file="strc-enu.mkvi">
+ <cd:command name="enumeration" type="environment" generated="yes" variant="example:title" file="strc-enu.mkvi">
<cd:sequence>
<cd:variable value="enumeration"/>
</cd:sequence>
@@ -204,7 +204,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="enumeration" generated="yes" variant="generated" file="strc-enu.mkvi">
+ <cd:command name="enumeration" generated="yes" variant="example" file="strc-enu.mkvi">
<cd:sequence>
<cd:variable value="enumeration"/>
</cd:sequence>
@@ -216,4 +216,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-export.xml b/tex/context/interface/mkiv/i-export.xml
index 40c73ee51..067649402 100644
--- a/tex/context/interface/mkiv/i-export.xml
+++ b/tex/context/interface/mkiv/i-export.xml
@@ -74,4 +74,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-field.xml b/tex/context/interface/mkiv/i-field.xml
index 67ff40ccf..828ab204f 100644
--- a/tex/context/interface/mkiv/i-field.xml
+++ b/tex/context/interface/mkiv/i-field.xml
@@ -380,4 +380,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-figure.xml b/tex/context/interface/mkiv/i-figure.xml
index a53678e89..4b1439f41 100644
--- a/tex/context/interface/mkiv/i-figure.xml
+++ b/tex/context/interface/mkiv/i-figure.xml
@@ -47,4 +47,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-file.xml b/tex/context/interface/mkiv/i-file.xml
index 4805c0faf..a5ed9daa3 100644
--- a/tex/context/interface/mkiv/i-file.xml
+++ b/tex/context/interface/mkiv/i-file.xml
@@ -4,13 +4,13 @@
<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
- <cd:command name="input" variant="1" file="file-ini.mkvi">
+ <cd:command name="input" 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:command name="input" variant="string" file="file-ini.mkvi">
<cd:arguments>
<cd:resolve name="string-file"/>
</cd:arguments>
@@ -74,7 +74,7 @@
<cd:command name="doifelsepath" file="file-ini.mkvi">
<cd:arguments>
- <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-path"/>
<cd:resolve name="argument-true"/>
<cd:resolve name="argument-false"/>
</cd:arguments>
@@ -82,7 +82,7 @@
<cd:command name="doifpathelse" file="file-ini.mkvi">
<cd:arguments>
- <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-path"/>
<cd:resolve name="argument-true"/>
<cd:resolve name="argument-false"/>
</cd:arguments>
@@ -106,7 +106,7 @@
<cd:command name="doifelsepathexists" file="file-ini.mkvi">
<cd:arguments>
- <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-path"/>
<cd:resolve name="argument-true"/>
<cd:resolve name="argument-false"/>
</cd:arguments>
@@ -114,7 +114,7 @@
<cd:command name="doifpathexistselse" file="file-ini.mkvi">
<cd:arguments>
- <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-path"/>
<cd:resolve name="argument-true"/>
<cd:resolve name="argument-false"/>
</cd:arguments>
@@ -180,19 +180,19 @@
<cd:command name="usepath" file="file-job.mkvi">
<cd:arguments>
- <cd:resolve name="keyword-file-list"/>
+ <cd:resolve name="keyword-path-list"/>
</cd:arguments>
</cd:command>
<cd:command name="usesubpath" file="file-job.mkvi">
<cd:arguments>
- <cd:resolve name="keyword-file-list"/>
+ <cd:resolve name="keyword-path-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:resolve name="keyword-path"/>
</cd:arguments>
</cd:command>
@@ -313,7 +313,7 @@
<cd:command name="readfixfile" file="file-res.mkvi">
<cd:arguments>
- <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-path"/>
<cd:resolve name="argument-file"/>
<cd:resolve name="argument-true"/>
<cd:resolve name="argument-false"/>
@@ -322,7 +322,7 @@
<cd:command name="readsetfile" file="file-res.mkvi">
<cd:arguments>
- <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-path"/>
<cd:resolve name="argument-file"/>
<cd:resolve name="argument-true"/>
<cd:resolve name="argument-false"/>
@@ -401,4 +401,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-filler.xml b/tex/context/interface/mkiv/i-filler.xml
index 919267b30..894780063 100644
--- a/tex/context/interface/mkiv/i-filler.xml
+++ b/tex/context/interface/mkiv/i-filler.xml
@@ -113,4 +113,98 @@
</cd:arguments>
</cd:command>
+ <cd:command name="definelinefiller" 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="setuplinefiller"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuplinefiller" file="node-rul.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"/>
+ <cd:constant type="both" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="scope">
+ <cd:constant type="left"/>
+ <cd:constant type="right"/>
+ <cd:constant type="local" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="mp">
+ <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="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="threshold">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rulethickness">
+ <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="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="align">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuplinefillers" file="node-rul.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuplinefiller"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="linefiller" type="environment" file="node-rul.mkiv">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="filler"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplinefiller"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setlinefiller" file="node-rul.mkiv">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="filler"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
</cd:interface> \ No newline at end of file
diff --git a/tex/context/interface/mkiv/i-firstline.xml b/tex/context/interface/mkiv/i-firstline.xml
index ffa706e3d..59579a18c 100644
--- a/tex/context/interface/mkiv/i-firstline.xml
+++ b/tex/context/interface/mkiv/i-firstline.xml
@@ -49,4 +49,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-fittingpage.xml b/tex/context/interface/mkiv/i-fittingpage.xml
index 3489c55e2..29816601f 100644
--- a/tex/context/interface/mkiv/i-fittingpage.xml
+++ b/tex/context/interface/mkiv/i-fittingpage.xml
@@ -50,7 +50,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="fittingpage" type="environment" generated="yes" variant="generated" file="page-app.mkiv">
+ <cd:command name="fittingpage" type="environment" generated="yes" variant="example" file="page-app.mkiv">
<cd:sequence>
<cd:variable value="fittingpage"/>
</cd:sequence>
@@ -59,6 +59,10 @@
<cd:inherit name="setupfittingpage"/>
</cd:assignments>
</cd:arguments>
+ <cd:instances>
+ <cd:constant value="TEXpage"/>
+ <cd:constant value="MPpage"/>
+ </cd:instances>
</cd:command>
<cd:command name="TEXpage" type="environment" file="page-app.mkiv">
diff --git a/tex/context/interface/mkiv/i-floats.xml b/tex/context/interface/mkiv/i-floats.xml
index d786769fc..edc7f7f03 100644
--- a/tex/context/interface/mkiv/i-floats.xml
+++ b/tex/context/interface/mkiv/i-floats.xml
@@ -4,7 +4,7 @@
<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
- <cd:command name="definefloat" variant="1" file="strc-flt.mkvi">
+ <cd:command name="definefloat" file="strc-flt.mkvi">
<cd:arguments>
<cd:resolve name="keyword-singular"/>
<cd:resolve name="keyword-plural-optional"/>
@@ -12,14 +12,20 @@
<cd:inherit name="setupfloat"/>
</cd:assignments>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-float"/>
+ </cd:instances>
</cd:command>
- <cd:command name="definefloat" variant="2" file="strc-flt.mkvi">
+ <cd:command name="definefloat" variant="name" 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:instances>
+ <cd:resolve name="instance-float"/>
+ </cd:instances>
</cd:command>
<cd:command name="setupfloat" file="strc-flt.mkvi">
@@ -58,6 +64,9 @@
<cd:constant type="grid"/>
<cd:constant type="normal" default="yes"/>
</cd:parameter>
+ <cd:parameter name="grid">
+ <cd:constant type="cd:string"/>
+ </cd:parameter>
<!--
<cd:parameter name="topoffset">
<cd:constant type="cd:dimension"/>
@@ -325,10 +334,13 @@
-->
- <cd:command name="placefloat" generated="yes" variant="generated" file="strc-flt.mkvi">
+ <cd:command name="placefloat" generated="yes" variant="instance" file="strc-flt.mkvi">
<cd:sequence>
<cd:string value="place"/>
+ <cd:instance value="float"/>
+<!--
<cd:variable value="float"/>
+-->
</cd:sequence>
<cd:arguments>
<cd:resolve name="keyword-floatlocation-list-optional"/>
@@ -336,6 +348,9 @@
<cd:resolve name="argument-text"/>
<cd:content/>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-float"/>
+ </cd:instances>
</cd:command>
<cd:command name="placefloat" file="strc-flt.mkvi">
@@ -348,26 +363,47 @@
</cd:arguments>
</cd:command>
- <cd:command name="placefloat" type="environment" generated="yes" variant="generated" file="strc-flt.mkvi">
+<!--
+ <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="placefloat" generated="yes" variant="instance" file="strc-flt.mkvi">
<cd:sequence>
<cd:string value="place"/>
- <cd:variable value="float"/>
+ <cd:instance value="float"/>
</cd:sequence>
<cd:arguments>
<cd:resolve name="assignment-floatdata-list-optional"/>
<cd:resolve name="assignment-userdata-list-optional"/>
+ <cd:resolve name="argument-text"/>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-float"/>
+ </cd:instances>
</cd:command>
- <cd:command name="placefloat" type="environment" file="strc-flt.mkvi">
+-->
+
+ <cd:command name="placefloat" type="environment" generated="yes" variant="instance" file="strc-flt.mkvi">
+ <cd:sequence>
+ <cd:string value="place"/>
+ <cd:instance value="float"/>
+ </cd:sequence>
<cd:arguments>
- <cd:resolve name="keyword-singular"/>
<cd:resolve name="assignment-floatdata-list-optional"/>
<cd:resolve name="assignment-userdata-list-optional"/>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-float"/>
+ </cd:instances>
</cd:command>
- <cd:command name="floattext" type="environment" generated="yes" variant="generated" file="strc-flt.mkvi">
+ <cd:command name="floattext" type="environment" generated="yes" variant="example" file="strc-flt.mkvi">
<cd:sequence>
<cd:variable value="float"/>
<cd:string value="text"/>
@@ -379,7 +415,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="placelistoffloats" generated="yes" variant="generated" file="strc-flt.mkvi">
+ <cd:command name="placelistoffloats" generated="yes" variant="example" file="strc-flt.mkvi">
<cd:sequence>
<cd:string value="placelistof"/>
<cd:variable value="floats"/>
@@ -391,7 +427,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="completelistoffloats" generated="yes" variant="generated" file="strc-flt.mkvi">
+ <cd:command name="completelistoffloats" generated="yes" variant="example" file="strc-flt.mkvi">
<cd:sequence>
<cd:string value="completelistof"/>
<cd:variable value="floats"/>
@@ -451,7 +487,9 @@
</cd:arguments>
</cd:command>
- <cd:command name="placefigure" file="strc-flt.mkvi">
+<!--
+
+ <cd:command file="strc-flt.mkvi" name="placefigure">
<cd:arguments>
<cd:resolve name="keyword-floatlocation-list-optional"/>
<cd:resolve name="keyword-reference-list-optional"/>
@@ -642,6 +680,7 @@
</cd:assignments>
</cd:arguments>
</cd:command>
+-->
<cd:command name="setuplocalfloats" file="strc-flt.mkvi">
<cd:arguments>
@@ -733,4 +772,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-fontfamily.xml b/tex/context/interface/mkiv/i-fontfamily.xml
index c069a4c17..2cf2fb403 100644
--- a/tex/context/interface/mkiv/i-fontfamily.xml
+++ b/tex/context/interface/mkiv/i-fontfamily.xml
@@ -4,7 +4,7 @@
<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
- <cd:command name="definefontfamily" variant="1" file="font-sel.mkvi">
+ <cd:command name="definefontfamily" file="font-sel.mkvi">
<cd:arguments>
<cd:resolve name="keyword-name"/>
<cd:keywords>
@@ -68,7 +68,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="definefontfamily" variant="2" file="font-sel.mkvi">
+ <cd:command name="definefontfamily" variant="preset" file="font-sel.mkvi">
<cd:arguments>
<cd:resolve name="keyword-name"/>
<cd:keywords>
@@ -97,7 +97,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="definefallbackfamily" variant="1" file="font-sel.mkvi">
+ <cd:command name="definefallbackfamily" file="font-sel.mkvi">
<cd:arguments>
<cd:resolve name="keyword-name"/>
<cd:keywords>
@@ -146,8 +146,8 @@
<cd:constant type="no" default="yes"/>
</cd:parameter>
<cd:parameter name="force">
- <cd:constant type="yes" default="yes"/>
- <cd:constant type="no"/>
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
</cd:parameter>
<cd:parameter name="features">
<cd:constant type="cd:name"/>
@@ -177,7 +177,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="definefallbackfamily" variant="2" file="font-sel.mkvi">
+ <cd:command name="definefallbackfamily" variant="preset" file="font-sel.mkvi">
<cd:arguments>
<cd:resolve name="keyword-name"/>
<cd:keywords>
@@ -206,20 +206,20 @@
</cd:arguments>
</cd:command>
- <cd:command name="definefontfamilypreset" variant="1" file="font-sel.mkvi">
+ <cd:command name="definefontfamilypreset" file="font-sel.mkvi">
<cd:arguments>
<cd:resolve name="keyword-name"/>
- <cd:assignment list="yes">
+ <cd:assignments list="yes">
<cd:inherit name="definefontfamily"/>
- </cd:assignment>
+ </cd:assignments>
</cd:arguments>
</cd:command>
- <cd:command name="definefontfamilypreset" variant="2" file="font-sel.mkvi">
+ <cd:command name="definefontfamilypreset" variant="name" 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
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-fonts.xml b/tex/context/interface/mkiv/i-fonts.xml
index 112b93c6e..c246905f0 100644
--- a/tex/context/interface/mkiv/i-fonts.xml
+++ b/tex/context/interface/mkiv/i-fonts.xml
@@ -65,31 +65,31 @@
<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"/>
@@ -259,10 +259,26 @@
<cd:constant type="yes"/>
<cd:constant type="no"/>
</cd:parameter>
+ <cd:parameter name="checkmarks">
+ <cd:constant type="yes" default="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:parameter name="mathnolimitsmode">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="adaptfontfeature" file="font-fea.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/> <!-- pattern -->
+ <cd:assignments list="yes">
+ <cd:inherit name="definefontfeature"/>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -274,49 +290,49 @@
</cd:arguments>
</cd:command>
- <cd:command name="addfeature" variant="1" file="font-fea.mkvi">
+ <cd:command name="addfeature" 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:command name="addfeature" variant="direct" 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:command name="subtractfeature" 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:command name="subtractfeature" variant="direct" 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:command name="replacefeature" 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:command name="replacefeature" variant="direct" 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:command name="resetandaddfeature" 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:command name="resetandaddfeature" variant="direct" file="font-fea.mkvi">
<cd:arguments>
<cd:resolve name="argument-name"/>
</cd:arguments>
@@ -332,7 +348,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="feature" variant="1" file="font-fea.mkvi">
+ <cd:command name="feature" file="font-fea.mkvi">
<cd:arguments>
<cd:keywords>
<cd:constant type="+"/>
@@ -353,7 +369,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="feature" variant="2" file="font-fea.mkvi">
+ <cd:command name="feature" variant="direct" file="font-fea.mkvi">
<cd:arguments>
<cd:keywords delimiters="braces">
<cd:constant type="+"/>
@@ -583,7 +599,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="definefont" variant="1" file="font-ini.mkvi">
+ <cd:command name="definefont" file="font-ini.mkvi">
<cd:arguments>
<cd:resolve name="keyword-name"/>
<cd:resolve name="keyword-font"/>
@@ -593,7 +609,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="definefont" variant="2" file="font-ini.mkvi">
+ <cd:command name="definefont" variant="argument" file="font-ini.mkvi">
<cd:arguments>
<cd:resolve name="keyword-name"/>
<cd:resolve name="keyword-font"/>
@@ -716,7 +732,7 @@
<cd:command name="txx" file="font-ini.mkvi"/>
- <cd:command name="definebodyfont" variant="1" file="font-fil.mkvi">
+ <cd:command name="definebodyfont" file="font-fil.mkvi">
<cd:arguments>
<cd:keywords list="yes" optional="yes">
<cd:constant type="cd:name"/>
@@ -777,7 +793,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="definebodyfont" variant="2" file="font-fil.mkvi">
+ <cd:command name="definebodyfont" variant="argument" file="font-fil.mkvi">
<cd:arguments>
<cd:keywords list="yes" optional="yes">
<cd:constant type="cd:name"/>
@@ -798,6 +814,17 @@
</cd:arguments>
</cd:command>
+ <cd:command name="setupfonts" file="font-ini.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="language">
+ <cd:constant type="no" default="yes"/>
+ <cd:constant type="auto"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
<cd:command name="setupbodyfont" file="font-ini.mkiv">
<cd:arguments>
<cd:keywords list="yes" optional="yes">
@@ -884,7 +911,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="switchstyleonly" variant="1" file="font-ini.mkiv">
+ <cd:command name="switchstyleonly" file="font-ini.mkiv">
<cd:arguments>
<cd:keywords>
<cd:constant type="rm"/>
@@ -907,7 +934,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="switchstyleonly" variant="2" file="font-ini.mkiv">
+ <cd:command name="switchstyleonly" variant="command" file="font-ini.mkiv">
<cd:arguments>
<cd:csname/>
</cd:arguments>
@@ -1036,6 +1063,8 @@
<cd:command name="settabular" file="font-pre.mkiv"/>
+ <cd:command name="setfractions" file="font-pre.mkiv"/>
+
<cd:command name="setsuperiors" file="font-pre.mkiv"/>
<cd:command name="tinyfont" file="font-pre.mkiv"/>
@@ -1228,13 +1257,13 @@
</cd:arguments>
</cd:command>
- <cd:command name="style" type="environment" generated="yes" variant="generated" file="font-sty.mkvi">
+ <cd:command name="style" type="environment" generated="yes" variant="example" 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:command name="style" generated="yes" variant="example" file="font-sty.mkvi">
<cd:sequence>
<cd:variable value="style"/>
</cd:sequence>
@@ -1243,7 +1272,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="style" type="environment" variant="1" file="font-sty.mkvi">
+ <cd:command name="style" type="environment" variant="argument" file="font-sty.mkvi">
<cd:arguments>
<cd:keywords>
<cd:constant type="cd:name"/>
@@ -1252,7 +1281,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="style" type="environment" variant="2" file="font-sty.mkvi">
+ <cd:command name="style" type="environment" file="font-sty.mkvi">
<cd:arguments>
<cd:assignments list="yes">
<cd:inherit name="setupstyle"/>
@@ -1260,7 +1289,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="style" variant="1" file="font-sty.mkvi">
+ <cd:command name="style" variant="argument" file="font-sty.mkvi">
<cd:arguments>
<cd:keywords>
<cd:constant type="cd:name"/>
@@ -1270,7 +1299,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="style" variant="2" file="font-sty.mkvi">
+ <cd:command name="style" file="font-sty.mkvi">
<cd:arguments>
<cd:assignments list="yes">
<cd:inherit name="setupstyle"/>
@@ -1325,6 +1354,18 @@
</cd:arguments>
</cd:command>
+ <cd:command name="getprivateslot" file="font-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getprivatechar" file="font-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
<cd:command name="glyphfontfile" file="font-sym.mkvi">
<cd:arguments>
<cd:resolve name="argument-font"/>
@@ -1365,6 +1406,24 @@
</cd:arguments>
</cd:command>
+ <cd:command name="resolvedglyphstyled" file="font-sym.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-font"/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resolvedglyphdirect" file="font-sym.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-font"/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
<cd:command name="setfont" file="font-sym.mkvi">
<cd:arguments>
<cd:resolve name="string-font"/>
@@ -1624,4 +1683,10 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+ <cd:command name="blockligatures" file="font-fea.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-list"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-form.xml b/tex/context/interface/mkiv/i-form.xml
index 0f02d0670..13e669427 100644
--- a/tex/context/interface/mkiv/i-form.xml
+++ b/tex/context/interface/mkiv/i-form.xml
@@ -20,4 +20,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-formula.xml b/tex/context/interface/mkiv/i-formula.xml
index da1d1c0cf..f6522fca4 100644
--- a/tex/context/interface/mkiv/i-formula.xml
+++ b/tex/context/interface/mkiv/i-formula.xml
@@ -53,8 +53,17 @@
<cd:parameter name="numbercommand">
<cd:constant type="cd:oneargument"/>
</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="option">
- <cd:constant type="middle"/>
+ <cd:resolve name="value-formula"/>
</cd:parameter>
<cd:parameter name="margin">
<cd:resolve name="value-leftskip"/>
@@ -74,6 +83,9 @@
<cd:parameter name="grid">
<cd:inherit name="snaptogrid"/>
</cd:parameter>
+ <cd:parameter name="frame">
+ <cd:constant type="number"/>
+ </cd:parameter>
<cd:inherit name="setupcounter"/>
</cd:assignments>
</cd:arguments>
@@ -126,55 +138,49 @@
-->
- <cd:command name="formula" type="environment" generated="yes" variant="generated" file="strc-mat.mkiv">
+ <cd:command name="formula" type="environment" generated="yes" variant="example" 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:resolve name="keyword-formula-list-optional"/>
</cd:arguments>
+ <cd:instances>
+ <cd:constant value="sp"/>
+ <cd:constant value="sd"/>
+ <cd:constant value="mp"/>
+ <cd:constant value="md"/>
+ </cd:instances>
</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:resolve name="keyword-formula-list-optional"/>
</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:resolve name="keyword-formula-list-optional"/>
</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:resolve name="keyword-formula-list-optional"/>
</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:resolve name="keyword-formula-list-optional"/>
</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:resolve name="keyword-formula-list-optional"/>
</cd:arguments>
</cd:command>
@@ -188,9 +194,7 @@
<cd:command name="formula" file="strc-mat.mkiv">
<cd:arguments>
- <cd:keywords list="yes" optional="yes">
- <cd:inherit name="setupbodyfont"/>
- </cd:keywords>
+ <cd:resolve name="keyword-formula-list-optional"/>
<cd:content/>
</cd:arguments>
</cd:command>
@@ -199,46 +203,30 @@
<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:resolve name="keyword-formulareference-list-optional"/>
</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:resolve name="keyword-formulareference-list-optional"/>
</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="keyword-formulareference-list-optional"/>
<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:resolve name="keyword-formulareference-list-optional"/>
</cd:arguments>
</cd:command>
- <cd:command name="placeformula" type="environment" variant="1" file="strc-mat.mkiv">
+ <cd:command name="placeformula" type="environment" file="strc-mat.mkiv">
<cd:arguments>
<cd:assignments list="yes" optional="yes">
<cd:parameter name="title">
@@ -248,42 +236,28 @@
<cd:constant type="cd:text"/>
</cd:parameter>
<cd:parameter name="reference">
- <cd:constant type="+"/>
- <cd:constant type="-"/>
- <cd:constant type="cd:text"/>
+ <cd:resolve name="value-formulareference"/>
</cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
- <cd:command name="placeformula" type="environment" variant="2" file="strc-mat.mkiv">
+ <cd:command name="placeformula" type="environment" variant="argument" 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="keyword-formulareference-list-optional"/>
</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="keyword-formulareference-list-optional"/>
<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:resolve name="keyword-formulareference-list-optional"/>
</cd:arguments>
</cd:command>
@@ -295,4 +269,4 @@
<cd:command name="placecurrentformulanumber" file="strc-mat"/>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-fraction.xml b/tex/context/interface/mkiv/i-fraction.xml
index 444784dfa..2624b8a5c 100644
--- a/tex/context/interface/mkiv/i-fraction.xml
+++ b/tex/context/interface/mkiv/i-fraction.xml
@@ -80,7 +80,7 @@
-->
- <cd:command name="fraction" generated="yes" variant="generated" file="math-frc.mkiv">
+ <cd:command name="fraction" generated="yes" variant="example" file="math-frc.mkiv">
<cd:sequence>
<cd:variable value="fraction"/>
</cd:sequence>
@@ -88,6 +88,16 @@
<cd:content/>
<cd:content/>
</cd:arguments>
+ <cd:instances>
+ <cd:constant value="xfrac"/>
+ <cd:constant value="xxfrac"/>
+ <cd:constant value="frac"/>
+ <cd:constant value="sfrac"/>
+ <cd:constant value="dfrac"/>
+ <cd:constant value="binom"/>
+ <cd:constant value="dbinom"/>
+ <cd:constant value="tbinom"/>
+ </cd:instances>
</cd:command>
<cd:command name="frac" file="math-frc.mkiv">
diff --git a/tex/context/interface/mkiv/i-framed.xml b/tex/context/interface/mkiv/i-framed.xml
index 1c214322a..c7633aa91 100644
--- a/tex/context/interface/mkiv/i-framed.xml
+++ b/tex/context/interface/mkiv/i-framed.xml
@@ -4,8 +4,6 @@
<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"/>
@@ -93,9 +91,7 @@
<cd:constant type="none"/>
</cd:parameter>
<cd:parameter name="background">
- <cd:constant type="foreground"/>
- <cd:constant type="color"/>
- <cd:constant type="cd:name"/>
+ <cd:resolve name="value-background"/>
</cd:parameter>
<cd:parameter name="backgroundoffset">
<cd:constant type="frame"/>
@@ -142,6 +138,7 @@
<cd:parameter name="strut">
<cd:constant type="yes" default="yes"/>
<cd:constant type="no"/>
+ <cd:constant type="none"/>
<cd:constant type="local"/>
<cd:constant type="global"/>
</cd:parameter>
@@ -161,6 +158,7 @@
<cd:constant type="lohi"/>
<cd:constant type="hanging"/>
<cd:constant type="keep"/>
+ <cd:constant type="formula"/>
<cd:constant type="mathematics"/>
<cd:constant type="normal" default="yes"/>
</cd:parameter>
@@ -243,7 +241,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="framed" generated="yes" variant="generated" file="pack-rul.mkiv">
+ <cd:command name="framed" generated="yes" variant="example" file="pack-rul.mkiv">
<cd:sequence>
<cd:variable value="framed"/>
</cd:sequence>
@@ -253,6 +251,10 @@
</cd:assignments>
<cd:content/>
</cd:arguments>
+ <cd:instances>
+ <cd:constant value="unframed"/>
+ <cd:constant value="fitfieldframed"/>
+ </cd:instances>
</cd:command>
<cd:command name="normalframedwithsettings" file="pack-rul.mkiv">
@@ -357,7 +359,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="mathframed" generated="yes" variant="generated" file="pack-rul.mkiv">
+ <cd:command name="mathframed" generated="yes" variant="example" file="pack-rul.mkiv">
<cd:sequence>
<cd:variable value="mathframed"/>
</cd:sequence>
@@ -367,6 +369,11 @@
</cd:assignments>
<cd:content/>
</cd:arguments>
+ <cd:instances>
+ <cd:constant value="mframed"/>
+ <cd:constant value="inmframed"/>
+ <cd:constant value="mcframed"/>
+ </cd:instances>
</cd:command>
<cd:command name="mframed" file="pack-rul.mkiv">
@@ -396,6 +403,25 @@
</cd:arguments>
</cd:command>
+ <cd:command name="defineformulaframed" 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="setupformulaframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupformulaframed" file="math-for.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="defineframedtext" file="pack-rul.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name"/>
@@ -460,7 +486,7 @@
-->
- <cd:command name="framedtext" generated="yes" variant="generated" file="pack-rul.mkiv">
+ <cd:command name="framedtext" generated="yes" variant="example" file="pack-rul.mkiv">
<cd:sequence>
<cd:variable value="framedtext"/>
</cd:sequence>
@@ -470,9 +496,12 @@
</cd:assignments>
<cd:content/>
</cd:arguments>
+ <cd:instances>
+ <cd:constant value="framedtext"/>
+ </cd:instances>
</cd:command>
- <cd:command name="framedtext" type="environment" generated="yes" variant="generated" file="pack-rul.mkiv">
+ <cd:command name="framedtext" type="environment" generated="yes" variant="example" file="pack-rul.mkiv">
<cd:sequence>
<cd:variable value="framedtext"/>
</cd:sequence>
@@ -487,6 +516,9 @@
<cd:inherit name="setupframedtext"/>
</cd:assignments>
</cd:arguments>
+ <cd:instances>
+ <cd:constant value="framedtext"/>
+ </cd:instances>
</cd:command>
<cd:command name="framedtext" file="pack-rul.mkiv">
diff --git a/tex/context/interface/mkiv/i-graphics.xml b/tex/context/interface/mkiv/i-graphics.xml
index 4e90a0c81..e66a039dc 100644
--- a/tex/context/interface/mkiv/i-graphics.xml
+++ b/tex/context/interface/mkiv/i-graphics.xml
@@ -85,6 +85,9 @@
<cd:parameter name="color">
<cd:constant type="cd:color"/>
</cd:parameter>
+ <cd:parameter name="arguments">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
<cd:parameter name="repeat">
<cd:constant type="yes"/>
<cd:constant type="no" default="yes"/>
diff --git a/tex/context/interface/mkiv/i-grid.xml b/tex/context/interface/mkiv/i-grid.xml
index d98a1a544..ac678e544 100644
--- a/tex/context/interface/mkiv/i-grid.xml
+++ b/tex/context/interface/mkiv/i-grid.xml
@@ -59,7 +59,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="snaptogrid" variant="1" file="spac-ver.mkiv">
+ <cd:command name="snaptogrid" file="spac-ver.mkiv">
<cd:arguments>
<cd:keywords optional="yes">
<cd:resolve name="value-grid"/>
@@ -69,7 +69,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="snaptogrid" variant="2" file="spac-ver.mkiv">
+ <cd:command name="snaptogrid" variant="list" file="spac-ver.mkiv">
<cd:arguments>
<cd:keywords list="yes" optional="yes">
<cd:inherit name="definegridsnapping"/>
@@ -79,7 +79,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="placeongrid" variant="1" file="spac-ver.mkiv">
+ <cd:command name="placeongrid" file="spac-ver.mkiv">
<cd:arguments>
<cd:keywords optional="yes">
<cd:resolve name="value-grid"/>
@@ -88,7 +88,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="placeongrid" variant="2" file="spac-ver.mkiv">
+ <cd:command name="placeongrid" variant="list" file="spac-ver.mkiv">
<cd:arguments>
<cd:keywords list="yes" optional="yes">
<cd:inherit name="definegridsnapping"/>
@@ -97,7 +97,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="gridsnapping" type="environment" variant="1" file="spac-ver.mkiv">
+ <cd:command name="gridsnapping" type="environment" file="spac-ver.mkiv">
<cd:arguments>
<cd:keywords optional="yes">
<cd:resolve name="value-grid"/>
@@ -105,7 +105,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="gridsnapping" type="environment" variant="2" file="spac-ver.mkiv">
+ <cd:command name="gridsnapping" type="environment" variant="list" file="spac-ver.mkiv">
<cd:arguments>
<cd:keywords list="yes" optional="yes">
<cd:inherit name="definegridsnapping"/>
diff --git a/tex/context/interface/mkiv/i-help.xml b/tex/context/interface/mkiv/i-help.xml
index db2128d53..d0c0aa103 100644
--- a/tex/context/interface/mkiv/i-help.xml
+++ b/tex/context/interface/mkiv/i-help.xml
@@ -23,7 +23,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="help" generated="yes" variant="generated" file="scrn-hlp.mkvi">
+ <cd:command name="help" generated="yes" variant="example" file="scrn-hlp.mkvi">
<cd:sequence>
<cd:variable value="help"/>
</cd:sequence>
@@ -32,15 +32,21 @@
<cd:resolve name="argument-text"/>
<cd:resolve name="argument-text"/>
</cd:arguments>
+ <cd:instances>
+ <cd:constant value="helptext"/>
+ </cd:instances>
</cd:command>
- <cd:command name="help" type="environment" generated="yes" variant="generated" file="scrn-hlp.mkvi">
+ <cd:command name="help" type="environment" generated="yes" variant="example" file="scrn-hlp.mkvi">
<cd:sequence>
<cd:variable value="help"/>
</cd:sequence>
<cd:arguments>
<cd:resolve name="keyword-reference-optional"/>
</cd:arguments>
+ <cd:instances>
+ <cd:constant value="helptext"/>
+ </cd:instances>
</cd:command>
<cd:command name="doifelsehelp" file="scrn-hlp.mkvi">
diff --git a/tex/context/interface/mkiv/i-highlight.xml b/tex/context/interface/mkiv/i-highlight.xml
index 1cc4ed4ca..7a990b13b 100644
--- a/tex/context/interface/mkiv/i-highlight.xml
+++ b/tex/context/interface/mkiv/i-highlight.xml
@@ -32,7 +32,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="highlight" generated="yes" variant="generated" file="core-sys.mkiv">
+ <cd:command name="highlight" generated="yes" variant="example" file="core-sys.mkiv">
<cd:sequence>
<cd:variable value="highlight"/>
</cd:sequence>
@@ -61,4 +61,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-hspace.xml b/tex/context/interface/mkiv/i-hspace.xml
index 3c96fc247..9b9c777a5 100644
--- a/tex/context/interface/mkiv/i-hspace.xml
+++ b/tex/context/interface/mkiv/i-hspace.xml
@@ -156,4 +156,10 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+ <cd:command name="quads" file="spac-hor.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-number-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-hyphenation.xml b/tex/context/interface/mkiv/i-hyphenation.xml
index 934751712..36cbc67e4 100644
--- a/tex/context/interface/mkiv/i-hyphenation.xml
+++ b/tex/context/interface/mkiv/i-hyphenation.xml
@@ -173,6 +173,10 @@
<cd:parameter name="right">
<cd:constant type="cd:command"/>
</cd:parameter>
+ <cd:parameter name="range">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
<cd:parameter name="language">
<cd:constant type="cd:language"/>
</cd:parameter>
@@ -257,4 +261,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-indent.xml b/tex/context/interface/mkiv/i-indent.xml
index 666388b6a..7e2fb5ca3 100644
--- a/tex/context/interface/mkiv/i-indent.xml
+++ b/tex/context/interface/mkiv/i-indent.xml
@@ -62,11 +62,11 @@
</cd:arguments>
</cd:command>
- <cd:command name="indentation" file="spac-hor.mkiv"/>
+ <cd:command name="indentation" file="spac-hor.mkiv" coreprimitive="yes"/>
- <cd:command name="noindentation" file="spac-hor.mkiv"/>
+ <cd:command name="noindentation" file="spac-hor.mkiv" coreprimitive="yes"/>
- <cd:command name="doindentation" file="spac-hor.mkiv"/>
+ <cd:command name="doindentation" file="spac-hor.mkiv" coreprimitive="yes"/>
<cd:command name="checknextindentation" file="spac-hor.mkiv">
<cd:arguments>
@@ -88,4 +88,4 @@
<cd:command name="indentation" type="environment" begin="push" end="pop" file="spac-hor.mkiv"/>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-indentedtext.xml b/tex/context/interface/mkiv/i-indentedtext.xml
index c70fb5ba0..98812d5e0 100644
--- a/tex/context/interface/mkiv/i-indentedtext.xml
+++ b/tex/context/interface/mkiv/i-indentedtext.xml
@@ -57,7 +57,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="indentedtext" type="environment" generated="yes" variant="generated" file="strc-ind.mkiv">
+ <cd:command name="indentedtext" type="environment" generated="yes" variant="example" file="strc-ind.mkiv">
<cd:sequence>
<cd:variable value="indentedtext"/>
</cd:sequence>
@@ -69,4 +69,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-initial.xml b/tex/context/interface/mkiv/i-initial.xml
index 170a5e1ba..d50a7bc61 100644
--- a/tex/context/interface/mkiv/i-initial.xml
+++ b/tex/context/interface/mkiv/i-initial.xml
@@ -78,4 +78,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-injector.xml b/tex/context/interface/mkiv/i-injector.xml
index c13e544db..321aa75c8 100644
--- a/tex/context/interface/mkiv/i-injector.xml
+++ b/tex/context/interface/mkiv/i-injector.xml
@@ -70,4 +70,4 @@
-->
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-interaction.xml b/tex/context/interface/mkiv/i-interaction.xml
index 06b104f4c..1c3285b84 100644
--- a/tex/context/interface/mkiv/i-interaction.xml
+++ b/tex/context/interface/mkiv/i-interaction.xml
@@ -14,7 +14,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="setupinteraction" variant="1" file="scrn-ini.mkvi">
+ <cd:command name="setupinteraction" file="scrn-ini.mkvi">
<cd:arguments>
<cd:resolve name="keyword-name-list-optional"/>
<cd:assignments list="yes">
@@ -119,7 +119,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="setupinteraction" variant="2" file="scrn-ini.mkvi">
+ <cd:command name="setupinteraction" variant="name" file="scrn-ini.mkvi">
<cd:arguments>
<cd:resolve name="keyword-name-optional"/>
</cd:arguments>
@@ -157,4 +157,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-interactionmenu.xml b/tex/context/interface/mkiv/i-interactionmenu.xml
index 6bf2f9674..22b928a5a 100644
--- a/tex/context/interface/mkiv/i-interactionmenu.xml
+++ b/tex/context/interface/mkiv/i-interactionmenu.xml
@@ -148,83 +148,87 @@
</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="raw" scope="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" 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" scope="interactionmenu" file="scrn-but.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ </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="but" scope="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" 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" scope="interactionmenu" file="scrn-but.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ </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="got" scope="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="nop" variant="interactionmenu" file="scrn-but.mkvi">
- <cd:arguments>
- <cd:resolve name="string-text"/>
- <cd:delimiter name="\"/>
- </cd:arguments>
- </cd:command>
+ <cd:command name="got" type="environment" scope="interactionmenu" file="scrn-but.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
- <cd:command name="nop" type="environment" variant="interactionmenu" file="scrn-but.mkvi"/>
+ <cd:command name="nop" scope="interactionmenu" file="scrn-but.mkvi">
+ <cd:arguments>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="\"/>
+ </cd:arguments>
+ </cd:command>
- <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="nop" type="environment" scope="interactionmenu" file="scrn-but.mkvi"/>
+
+ <cd:command name="txt" scope="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="txt" type="environment" scope="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" scope="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="rul" type="environment" scope="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" scope="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="com" type="environment" scope="interactionmenu" file="scrn-but.mkvi"/>
+
+ -->
<cd:command name="includemenu" file="scrn-but.mkvi">
<cd:arguments>
@@ -241,7 +245,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="menubutton" variant="1" file="scrn-but.mkvi">
+ <cd:command name="menubutton" variant="interactionmenu" file="scrn-but.mkvi">
<cd:arguments>
<cd:resolve name="keyword-name"/>
<cd:assignments list="yes" optional="yes">
@@ -254,7 +258,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="menubutton" variant="2" file="scrn-but.mkvi">
+ <cd:command name="menubutton" variant="button" file="scrn-but.mkvi">
<cd:arguments>
<cd:assignments list="yes">
<cd:inherit name="setupbutton"/>
diff --git a/tex/context/interface/mkiv/i-interactionscreen.xml b/tex/context/interface/mkiv/i-interactionscreen.xml
index 69edbcdb9..6e337f6d6 100644
--- a/tex/context/interface/mkiv/i-interactionscreen.xml
+++ b/tex/context/interface/mkiv/i-interactionscreen.xml
@@ -31,7 +31,7 @@
<cd:parameter name="topspace">
<cd:constant type="cd:dimension"/>
</cd:parameter>
- <cd:parameter name="option">
+ <cd:parameter name="option" list="yes">
<cd:constant type="fit"/>
<cd:constant type="max"/>
<cd:constant type="singlesided"/>
@@ -44,6 +44,10 @@
<cd:constant type="landscape"/>
<cd:constant type="portrait"/>
<cd:constant type="page"/>
+ <cd:constant type="paper"/>
+ </cd:parameter>
+ <cd:parameter name="copies">
+ <cd:constant type="cd:number"/>
</cd:parameter>
<cd:parameter name="delay">
<cd:constant type="none" default="yes"/>
@@ -61,4 +65,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-interface.xml b/tex/context/interface/mkiv/i-interface.xml
index c8c93b72b..a9b35bbe5 100644
--- a/tex/context/interface/mkiv/i-interface.xml
+++ b/tex/context/interface/mkiv/i-interface.xml
@@ -199,4 +199,4 @@
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-interlinespace.xml b/tex/context/interface/mkiv/i-interlinespace.xml
index 99f5e11af..b93bac7f5 100644
--- a/tex/context/interface/mkiv/i-interlinespace.xml
+++ b/tex/context/interface/mkiv/i-interlinespace.xml
@@ -14,7 +14,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="setupinterlinespace" variant="1" file="spac-ver.mkiv">
+ <cd:command name="setupinterlinespace" file="spac-ver.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name-list-optional"/>
<cd:assignments list="yes">
@@ -53,7 +53,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="setupinterlinespace" variant="2" file="spac-ver.mkiv">
+ <cd:command name="setupinterlinespace" variant="argument" file="spac-ver.mkiv">
<cd:arguments>
<cd:keywords list="yes" optional="yes">
<cd:constant type="on"/>
@@ -69,13 +69,13 @@
</cd:arguments>
</cd:command>
- <cd:command name="setupinterlinespace" variant="3" file="spac-ver.mkiv">
+ <cd:command name="setupinterlinespace" variant="name" 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:command name="setuplocalinterlinespace" file="spac-ver.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name-list-optional"/>
<cd:assignments list="yes">
@@ -84,7 +84,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="setuplocalinterlinespace" variant="2" file="spac-ver.mkiv">
+ <cd:command name="setuplocalinterlinespace" variant="argument" file="spac-ver.mkiv">
<cd:arguments>
<cd:keywords list="yes" optional="yes">
<cd:constant type="on"/>
@@ -100,13 +100,13 @@
</cd:arguments>
</cd:command>
- <cd:command name="setuplocalinterlinespace" variant="3" file="spac-ver.mkiv">
+ <cd:command name="setuplocalinterlinespace" variant="name" 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:command name="switchtointerlinespace" file="spac-ver.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name-list-optional"/>
<cd:assignments list="yes">
@@ -115,7 +115,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="switchtointerlinespace" variant="2" file="spac-ver.mkiv">
+ <cd:command name="switchtointerlinespace" variant="argument" file="spac-ver.mkiv">
<cd:arguments>
<cd:keywords list="yes" optional="yes">
<cd:constant type="on"/>
@@ -131,13 +131,13 @@
</cd:arguments>
</cd:command>
- <cd:command name="switchtointerlinespace" variant="3" file="spac-ver.mkiv">
+ <cd:command name="switchtointerlinespace" variant="name" 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:command name="dosetupcheckedinterlinespace" file="spac-ver.mkiv">
<cd:arguments>
<cd:assignments delimiters="braces" list="yes">
<cd:inherit name="setupinterlinespace"/>
@@ -145,7 +145,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="dosetupcheckedinterlinespace" variant="2" file="spac-ver.mkiv">
+ <cd:command name="dosetupcheckedinterlinespace" variant="argument" file="spac-ver.mkiv">
<cd:arguments>
<cd:keywords delimiters="braces" list="yes">
<cd:constant type="on"/>
@@ -161,7 +161,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="dosetupcheckedinterlinespace" variant="3" file="spac-ver.mkiv">
+ <cd:command name="dosetupcheckedinterlinespace" variant="name" file="spac-ver.mkiv">
<cd:arguments>
<cd:resolve name="argument-name"/>
</cd:arguments>
@@ -173,4 +173,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-ipsum.xml b/tex/context/interface/mkiv/i-ipsum.xml
new file mode 100644
index 000000000..f96fc5229
--- /dev/null
+++ b/tex/context/interface/mkiv/i-ipsum.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="defineipsum" file="m-ipsum.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupipsum"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupipsum" file="m-ipsum.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="alternative">
+ <cd:constant type="paragraph" default="yes"/>
+ <cd:constant type="line"/>
+ <cd:constant type="lines"/>
+ <cd:constant type="word"/>
+ <cd:constant type="words"/>
+ </cd:parameter>
+ <cd:parameter name="file">
+ <cd:constant type="cd:file"/>
+ </cd:parameter>
+ <cd:parameter name="n">
+ <cd:constant type="random"/>
+ <cd:constant type="cd:number"/>
+ </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="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="language">
+ <cd:constant type="cd:language"/>
+ </cd:parameter>
+ <cd:parameter name="separator">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ipsum" file="m-ipsum.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupipsum"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="directipsum" file="m-ipsum.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/tex/context/interface/mkiv/i-itemgroup.xml b/tex/context/interface/mkiv/i-itemgroup.xml
index 69e817efd..6fb28b635 100644
--- a/tex/context/interface/mkiv/i-itemgroup.xml
+++ b/tex/context/interface/mkiv/i-itemgroup.xml
@@ -14,7 +14,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="setupitemgroup" variant="1" file="strc-itm.mkvi">
+ <cd:command name="setupitemgroup" file="strc-itm.mkvi">
<cd:arguments>
<cd:resolve name="keyword-name"/>
<cd:keywords list="yes" optional="yes">
@@ -116,7 +116,7 @@
<cd:inherit name="setupalign"/>
</cd:parameter>
<cd:parameter name="indenting">
- <cd:resolve name="setupindenting"/>
+ <cd:inherit name="setupindenting"/>
</cd:parameter>
<cd:parameter name="start">
<cd:constant type="cd:number"/>
@@ -198,7 +198,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="setupitemgroup" variant="2" file="strc-itm.mkvi">
+ <cd:command name="setupitemgroup" variant="assignment" file="strc-itm.mkvi">
<cd:arguments>
<cd:keywords list="yes" optional="yes">
<cd:constant type="cd:name"/>
@@ -299,7 +299,7 @@
<cd:inherit name="setupalign"/>
</cd:parameter>
<cd:parameter name="indenting">
- <cd:resolve name="setupindenting"/>
+ <cd:inherit name="setupindenting"/>
</cd:parameter>
<cd:parameter name="start">
<cd:constant type="cd:number"/>
@@ -381,23 +381,45 @@
</cd:arguments>
</cd:command>
- <cd:command name="itemgroup" type="environment" generated="yes" variant="generated" file="strc-itm.mkvi">
+ <cd:command name="setupitemgroups" 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:inherit name="setupitemgroup"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupitemgroup" generated="yes" variant="instance" file="strc-itm.mkvi">
<cd:sequence>
- <cd:variable value="itemgroup"/>
+ <cd:string value="setup"/>
+ <cd:instance value="itemgroup"/>
</cd:sequence>
<cd:arguments>
<cd:keywords list="yes" optional="yes">
+ <cd:constant type="each"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <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:instances>
+ <cd:resolve name="instance-itemgroup"/>
+ </cd:instances>
</cd:command>
- <cd:command name="itemgroup" type="environment" file="strc-itm.mkvi">
+ <cd:command name="itemgroup" type="environment" generated="yes" variant="instance" file="strc-itm.mkvi">
+ <cd:sequence>
+ <cd:instance value="itemgroup"/>
+ </cd:sequence>
<cd:arguments>
- <cd:resolve name="keyword-name"/>
<cd:keywords list="yes" optional="yes">
<cd:inherit name="setupitemgroup"/>
</cd:keywords>
@@ -405,93 +427,114 @@
<cd:inherit name="setupitemgroup"/>
</cd:assignments>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-itemgroup"/>
+ </cd:instances>
</cd:command>
- <cd:command name="item" variant="itemgroup" file="strc-itm.mkvi">
+ <cd:command name="itemgroup" type="environment" file="strc-itm.mkvi">
<cd:arguments>
- <cd:resolve name="keyword-reference-list-optional"/>
+ <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="itemtag" variant="itemgroup" file="strc-itm.mkvi">
+ <cd:command name="item" scope="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="noitem" scope="itemgroup" file="strc-itm.mkvi"/>
- <cd:command name="but" variant="itemgroup" file="strc-itm.mkvi">
+ <cd:command name="itemtag" scope="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="itm" scope="itemgroup" file="strc-itm.mkvi">
+ <cd:arguments>
+ <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="but" scope="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="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="nop" scope="itemgroup" file="strc-itm.mkvi"/>
- <cd:command name="sym" variant="itemgroup" file="strc-itm.mkvi">
- <cd:arguments>
- <cd:resolve name="argument-text"/>
- </cd:arguments>
- </cd:command>
+ <cd:command name="txt" scope="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="ran" variant="itemgroup" file="strc-itm.mkvi">
- <cd:arguments>
- <cd:resolve name="argument-text"/>
- </cd:arguments>
- </cd:command>
+ <cd:command name="head" scope="itemgroup" file="strc-itm.mkvi">
+ <cd:arguments>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="par"/>
+ </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="headsym" scope="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" scope="itemgroup" file="strc-itm.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ran" scope="itemgroup" file="strc-itm.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mar" scope="itemgroup" file="strc-itm.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="sub" scope="itemgroup" file="strc-itm.mkvi"/>
- <cd:command name="sub" variant="itemgroup" file="strc-itm.mkvi"/>
+ <cd:command name="its" scope="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:command name="item" type="environment" scope="itemgroup" 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:command name="head" type="environment" scope="itemgroup" 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:command name="specialitem" type="environment" variant="item" scope="itemgroup" file="strc-itm.mkvi">
<cd:arguments>
<cd:keywords optional="yes">
<cd:constant type="item" default="yes"/>
@@ -500,7 +543,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="specialitem" type="environment" variant="2" file="strc-itm.mkvi">
+ <cd:command name="specialitem" type="environment" variant="symbol" scope="itemgroup" file="strc-itm.mkvi">
<cd:arguments>
<cd:keywords>
<cd:constant type="sym"/>
@@ -511,7 +554,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="specialitem" type="environment" variant="3" file="strc-itm.mkvi">
+ <cd:command name="specialitem" type="environment" variant="none" scope="itemgroup" file="strc-itm.mkvi">
<cd:arguments>
<cd:keywords>
<cd:constant type="sub"/>
@@ -520,15 +563,34 @@
</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: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:command name="setupitemize" file="strc-itm.mkvi">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="each"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <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/tex/context/interface/mkiv/i-javascript.xml b/tex/context/interface/mkiv/i-javascript.xml
index 790d13523..965ed5388 100644
--- a/tex/context/interface/mkiv/i-javascript.xml
+++ b/tex/context/interface/mkiv/i-javascript.xml
@@ -48,4 +48,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-kerning.xml b/tex/context/interface/mkiv/i-kerning.xml
index 167bfc4f8..aacb4a6ea 100644
--- a/tex/context/interface/mkiv/i-kerning.xml
+++ b/tex/context/interface/mkiv/i-kerning.xml
@@ -49,7 +49,7 @@
<cd:command name="resetcharacterkerning" file="typo-krn.mkiv"/>
- <cd:command name="characterkerning" generated="yes" variant="generated" file="typo-krn.mkiv">
+ <cd:command name="characterkerning" generated="yes" variant="example" file="typo-krn.mkiv">
<cd:sequence>
<cd:variable value="characterkerning"/>
</cd:sequence>
@@ -90,4 +90,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-label.xml b/tex/context/interface/mkiv/i-label.xml
index 320c105f9..fe7851d9d 100644
--- a/tex/context/interface/mkiv/i-label.xml
+++ b/tex/context/interface/mkiv/i-label.xml
@@ -149,6 +149,9 @@
<cd:constant type="no" default="yes"/>
<cd:constant type="xml"/>
</cd:parameter>
+ <cd:parameter name="referenceprefix">
+ <cd:resolve name="value-referenceprefix"/>
+ </cd:parameter>
<cd:parameter name="sample">
<cd:constant type="cd:text"/>
</cd:parameter>
@@ -186,7 +189,7 @@
-->
- <cd:command name="label" generated="yes" variant="generated" file="strc-lab.mkiv">
+ <cd:command name="label" generated="yes" variant="example" file="strc-lab.mkiv">
<cd:sequence>
<cd:variable value="label"/>
</cd:sequence>
@@ -196,7 +199,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="currentlabel" generated="yes" variant="generated" file="strc-lab.mkiv">
+ <cd:command name="currentlabel" generated="yes" variant="example" file="strc-lab.mkiv">
<cd:sequence>
<cd:string value="current"/>
<cd:variable value="label"/>
@@ -207,4 +210,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-labeltext.xml b/tex/context/interface/mkiv/i-labeltext.xml
index 247783762..34c70231f 100644
--- a/tex/context/interface/mkiv/i-labeltext.xml
+++ b/tex/context/interface/mkiv/i-labeltext.xml
@@ -11,486 +11,513 @@
</cd:arguments>
</cd:command>
- <cd:command name="setuplabeltext" generated="yes" variant="generated" file="lang-lab.mkiv">
+ <cd:command name="setuplabeltext" generated="yes" variant="instance" file="lang-lab.mkiv">
<cd:sequence>
<cd:string value="setup"/>
- <cd:variable value="label"/>
+ <cd:instance 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:instances>
+ <cd:resolve name="instance-labelclass"/>
+ </cd:instances>
</cd:command>
- <cd:command name="presetlabeltext" generated="yes" variant="generated" file="lang-lab.mkiv">
+ <cd:command name="presetlabeltext" generated="yes" variant="instance" file="lang-lab.mkiv">
<cd:sequence>
<cd:string value="preset"/>
- <cd:variable value="label"/>
+ <cd:instance 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:instances>
+ <cd:resolve name="instance-labelclass"/>
+ </cd:instances>
</cd:command>
- <cd:command name="copylabeltext" generated="yes" variant="generated" file="lang-lab.mkiv">
+ <cd:command name="copylabeltext" generated="yes" variant="instance" file="lang-lab.mkiv">
<cd:sequence>
<cd:string value="copy"/>
- <cd:variable value="label"/>
+ <cd:instance 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:instances>
+ <cd:resolve name="instance-labelclass"/>
+ </cd:instances>
</cd:command>
- <cd:command name="labeltext" type="environment" generated="yes" variant="generated" file="lang-lab.mkiv">
+ <cd:command name="labeltext" type="environment" generated="yes" variant="instance" file="lang-lab.mkiv">
<cd:sequence>
- <cd:variable value="label"/>
+ <cd:instance value="label"/>
<cd:string value="text"/>
</cd:sequence>
<cd:arguments>
<cd:resolve name="keyword-language-optional"/>
<cd:resolve name="keyword-key"/>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-labelclass"/>
+ </cd:instances>
</cd:command>
- <cd:command name="labellanguage" generated="yes" variant="generated" file="lang-lab.mkiv">
+ <cd:command name="labellanguage" generated="yes" variant="instance" file="lang-lab.mkiv">
<cd:sequence>
- <cd:variable value="label"/>
+ <cd:instance value="label"/>
<cd:string value="language"/>
</cd:sequence>
+ <cd:instances>
+ <cd:resolve name="instance-labelclass"/>
+ </cd:instances>
</cd:command>
- <cd:command name="labeltext" generated="yes" variant="generated" file="lang-lab.mkiv">
+ <cd:command name="labeltext" generated="yes" variant="instance" file="lang-lab.mkiv">
<cd:sequence>
- <cd:variable value="label"/>
+ <cd:instance value="label"/>
<cd:string value="text"/>
</cd:sequence>
<cd:arguments>
<cd:resolve name="argument-key"/>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-labelclass"/>
+ </cd:instances>
</cd:command>
- <cd:command name="labeltexts" generated="yes" variant="generated" file="lang-lab.mkiv">
+ <cd:command name="labeltexts" generated="yes" variant="instance" file="lang-lab.mkiv">
<cd:sequence>
- <cd:variable value="label"/>
+ <cd:instance value="label"/>
<cd:string value="texts"/>
</cd:sequence>
<cd:arguments>
<cd:resolve name="argument-key"/>
<cd:resolve name="argument-text"/>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-labeltext"/>
+ </cd:instances>
</cd:command>
- <cd:command name="leftlabeltext" generated="yes" variant="generated" file="lang-lab.mkiv">
+ <cd:command name="leftlabeltext" generated="yes" variant="instance" file="lang-lab.mkiv">
<cd:sequence>
<cd:string value="left"/>
- <cd:variable value="label"/>
+ <cd:instance value="label"/>
<cd:string value="text"/>
</cd:sequence>
<cd:arguments>
<cd:resolve name="argument-key"/>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-labeltext"/>
+ </cd:instances>
</cd:command>
- <cd:command name="rightlabeltext" generated="yes" variant="generated" file="lang-lab.mkiv">
+ <cd:command name="rightlabeltext" generated="yes" variant="instance" file="lang-lab.mkiv">
<cd:sequence>
<cd:string value="right"/>
- <cd:variable value="label"/>
+ <cd:instance 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
+ <cd:instances>
+ <cd:resolve name="instance-labeltext"/>
+ </cd:instances>
+ </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>
diff --git a/tex/context/interface/mkiv/i-language.xml b/tex/context/interface/mkiv/i-language.xml
index 26bdbf060..395e08c34 100644
--- a/tex/context/interface/mkiv/i-language.xml
+++ b/tex/context/interface/mkiv/i-language.xml
@@ -4,7 +4,7 @@
<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
- <cd:command name="installlanguage" variant="1" file="lang-ini.mkiv">
+ <cd:command name="installlanguage" file="lang-ini.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name"/>
<cd:assignments list="yes">
@@ -13,7 +13,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="installlanguage" variant="2" file="lang-ini.mkiv">
+ <cd:command name="installlanguage" variant="name" file="lang-ini.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name"/>
<cd:resolve name="keyword-language"/>
@@ -116,6 +116,10 @@
<cd:parameter name="rightsubsentence">
<cd:constant type="cd:command"/>
</cd:parameter>
+ <cd:parameter name="factor">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -152,7 +156,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="language" generated="yes" variant="generated" file="lang-ini.mkiv">
+ <cd:command name="language" generated="yes" variant="example" file="lang-ini.mkiv">
<cd:sequence>
<cd:variable value="language"/>
</cd:sequence>
@@ -197,4 +201,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-layer.xml b/tex/context/interface/mkiv/i-layer.xml
index 6be7cccc9..9157ecdbf 100644
--- a/tex/context/interface/mkiv/i-layer.xml
+++ b/tex/context/interface/mkiv/i-layer.xml
@@ -46,7 +46,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="setlayerframed" variant="1" file="pack-box.mkiv">
+ <cd:command name="setlayerframed" file="pack-box.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name"/>
<cd:assignments list="yes" optional="yes">
@@ -59,7 +59,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="setlayerframed" variant="2" file="pack-box.mkiv">
+ <cd:command name="setlayerframed" variant="combination" file="pack-box.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name"/>
<cd:assignments list="yes" optional="yes">
@@ -267,7 +267,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="definelayerpreset" variant="1" file="pack-lyr.mkiv">
+ <cd:command name="definelayerpreset" file="pack-lyr.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name"/>
<cd:assignments list="yes">
@@ -276,7 +276,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="definelayerpreset" variant="2" file="pack-lyr.mkiv">
+ <cd:command name="definelayerpreset" variant="name" file="pack-lyr.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name"/>
<cd:resolve name="keyword-name"/>
@@ -324,4 +324,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-layout.xml b/tex/context/interface/mkiv/i-layout.xml
index 984995f10..f3e42515e 100644
--- a/tex/context/interface/mkiv/i-layout.xml
+++ b/tex/context/interface/mkiv/i-layout.xml
@@ -14,7 +14,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="setuplayout" variant="1" file="page-lay.mkiv">
+ <cd:command name="setuplayout" file="page-lay.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name-optional"/>
<cd:assignments list="yes">
@@ -174,6 +174,9 @@
<cd:constant type="page"/>
<cd:constant type="empty"/>
<cd:constant type="color"/>
+ <cd:constant type="one"/>
+ <cd:constant type="two"/>
+ <cd:constant type="four"/>
</cd:parameter>
<cd:parameter name="grid">
<cd:constant type="yes"/>
@@ -208,7 +211,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="setuplayout" variant="2" file="page-lay.mkiv">
+ <cd:command name="setuplayout" variant="name" file="page-lay.mkiv">
<cd:arguments>
<cd:keywords>
<cd:constant type="reset"/>
@@ -364,4 +367,4 @@
<cd:command name="spread" type="environment" file="page-spr.mkiv"/>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-linenumber.xml b/tex/context/interface/mkiv/i-linenumber.xml
index 623595140..1c7ca2f75 100644
--- a/tex/context/interface/mkiv/i-linenumber.xml
+++ b/tex/context/interface/mkiv/i-linenumber.xml
@@ -89,16 +89,30 @@
</cd:arguments>
</cd:command>
- <cd:command name="linenumbering" type="environment" variant="1" file="page-lin.mkvi">
+ <cd:command name="linenumbering" type="environment" file="page-lin.mkvi">
<cd:arguments>
<cd:resolve name="keyword-name-optional"/>
<cd:assignments list="yes" optional="yes">
- <cd:inherit name="setuplinenumbering"/>
+ <cd:parameter name="continue">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <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:assignments>
</cd:arguments>
</cd:command>
- <cd:command name="linenumbering" type="environment" variant="2" file="page-lin.mkvi">
+ <cd:command name="linenumbering" type="environment" variant="argument" file="page-lin.mkvi">
<cd:arguments>
<cd:resolve name="keyword-name-optional"/>
<cd:keywords optional="yes">
diff --git a/tex/context/interface/mkiv/i-lines.xml b/tex/context/interface/mkiv/i-lines.xml
index e43945e4d..32c3c6b70 100644
--- a/tex/context/interface/mkiv/i-lines.xml
+++ b/tex/context/interface/mkiv/i-lines.xml
@@ -78,28 +78,41 @@
<cd:parameter name="color">
<cd:constant type="cd:color"/>
</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="lines" type="environment" generated="yes" variant="generated" file="spac-lin.mkiv">
+ <cd:command name="lines" type="environment" generated="yes" variant="instance" file="spac-lin.mkiv">
<cd:sequence>
- <cd:variable value="lines"/>
+ <cd:instance value="lines"/>
</cd:sequence>
<cd:arguments>
<cd:assignments list="yes" optional="yes">
<cd:inherit name="setuplines"/>
</cd:assignments>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-lines"/>
+ </cd:instances>
</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="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>
@@ -107,4 +120,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-linetable.xml b/tex/context/interface/mkiv/i-linetable.xml
index a10479161..9b4cae16a 100644
--- a/tex/context/interface/mkiv/i-linetable.xml
+++ b/tex/context/interface/mkiv/i-linetable.xml
@@ -162,4 +162,4 @@
-->
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-list.xml b/tex/context/interface/mkiv/i-list.xml
index 38e534252..7e0def052 100644
--- a/tex/context/interface/mkiv/i-list.xml
+++ b/tex/context/interface/mkiv/i-list.xml
@@ -88,7 +88,7 @@
<cd:constant type="cd:command"/>
</cd:parameter>
<cd:parameter name="command">
- <cd:constant type="cd:threeargument"/>
+ <cd:constant type="cd:threearguments"/>
</cd:parameter>
<cd:parameter name="numbercommand">
<cd:constant type="cd:oneargument"/>
@@ -409,65 +409,78 @@
</cd:arguments>
</cd:command>
- <cd:command name="setupcombinedlist" generated="yes" variant="generated" file="strc-lst.mkvi">
+ <cd:command name="setupcombinedlist" generated="yes" variant="instance" file="strc-lst.mkvi">
<cd:sequence>
<cd:string value="setup"/>
- <cd:variable value="combinedlist"/>
+ <cd:instance value="combinedlist"/>
</cd:sequence>
<cd:arguments>
<cd:assignments list="yes">
<cd:inherit name="setuplist"/>
</cd:assignments>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-combinedlist"/>
+ </cd:instances>
</cd:command>
- <cd:command name="placecombinedlist" generated="yes" variant="generated" file="strc-lst.mkvi">
+ <cd:command name="placecombinedlist" generated="yes" variant="instance" file="strc-lst.mkvi">
<cd:sequence>
<cd:string value="place"/>
- <cd:variable value="combinedlist"/>
+ <cd:instance value="combinedlist"/>
</cd:sequence>
<cd:arguments>
<cd:assignments list="yes" optional="yes">
<cd:inherit name="setuplist"/>
</cd:assignments>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-combinedlist"/>
+ </cd:instances>
</cd:command>
- <cd:command name="completecombinedlist" generated="yes" variant="generated" file="strc-lst.mkvi">
+ <cd:command name="completecombinedlist" generated="yes" variant="instance" file="strc-lst.mkvi">
<cd:sequence>
<cd:string value="complete"/>
- <cd:variable value="combinedlist"/>
+ <cd:instance value="combinedlist"/>
</cd:sequence>
<cd:arguments>
<cd:assignments list="yes" optional="yes">
<cd:inherit name="setuplist"/>
</cd:assignments>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-combinedlist"/>
+ </cd:instances>
</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="setupcontent" file="strc-lst.mkvi">
+ <cd:arguments>
+ <cd:assignments list="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="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>
diff --git a/tex/context/interface/mkiv/i-lohi.xml b/tex/context/interface/mkiv/i-lohi.xml
index 7cfd489eb..1fe891b2c 100644
--- a/tex/context/interface/mkiv/i-lohi.xml
+++ b/tex/context/interface/mkiv/i-lohi.xml
@@ -34,13 +34,16 @@
</cd:arguments>
</cd:command>
- <cd:command name="low" generated="yes" variant="generated" file="typo-scr.mkiv">
+ <cd:command name="low" generated="yes" variant="instance" file="typo-scr.mkiv">
<cd:sequence>
- <cd:variable value="low"/>
+ <cd:instance value="low"/>
</cd:sequence>
<cd:arguments>
<cd:content/>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-low"/>
+ </cd:instances>
</cd:command>
<cd:command name="low" file="typo-scr.mkiv">
@@ -79,13 +82,16 @@
</cd:arguments>
</cd:command>
- <cd:command name="high" generated="yes" variant="generated" file="typo-scr.mkiv">
+ <cd:command name="high" generated="yes" variant="instance" file="typo-scr.mkiv">
<cd:sequence>
- <cd:variable value="high"/>
+ <cd:instance value="high"/>
</cd:sequence>
<cd:arguments>
<cd:content/>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-high"/>
+ </cd:instances>
</cd:command>
<cd:command name="high" file="typo-scr.mkiv">
@@ -127,9 +133,9 @@
</cd:arguments>
</cd:command>
- <cd:command name="lowhigh" generated="yes" variant="generated" file="typo-scr.mkiv">
+ <cd:command name="lowhigh" generated="yes" variant="instance" file="typo-scr.mkiv">
<cd:sequence>
- <cd:variable value="lowhigh"/>
+ <cd:instance value="lowhigh"/>
</cd:sequence>
<cd:arguments>
<cd:keywords optional="yes">
@@ -193,9 +199,9 @@
</cd:arguments>
</cd:command>
- <cd:command name="lowmidhigh" generated="yes" variant="generated" file="typo-scr.mkiv">
+ <cd:command name="lowmidhigh" generated="yes" variant="instance" file="typo-scr.mkiv">
<cd:sequence>
- <cd:variable value="lowmidhigh"/>
+ <cd:instance value="lowmidhigh"/>
</cd:sequence>
<cd:arguments>
<cd:content/>
@@ -220,4 +226,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-lua.xml b/tex/context/interface/mkiv/i-lua.xml
index 525753723..ef970609b 100644
--- a/tex/context/interface/mkiv/i-lua.xml
+++ b/tex/context/interface/mkiv/i-lua.xml
@@ -166,7 +166,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="ctxfunctiondefinition" generated="yes" variant="generated" file="luat-ini.mkiv">
+ <cd:command name="ctxfunctiondefinition" generated="yes" variant="example" file="luat-ini.mkiv">
<cd:sequence>
<cd:variable value="ctxfunctiondefinition"/>
</cd:sequence>
@@ -184,10 +184,10 @@
</cd:arguments>
</cd:command>
- <cd:command name="ctxfunction" generated="yes" variant="generated" file="luat-ini.mkiv">
+ <cd:command name="ctxfunction" generated="yes" variant="example" file="luat-ini.mkiv">
<cd:sequence>
<cd:variable value="ctxfunction"/>
</cd:sequence>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-makeup.xml b/tex/context/interface/mkiv/i-makeup.xml
index 2128464ef..8831a8b0b 100644
--- a/tex/context/interface/mkiv/i-makeup.xml
+++ b/tex/context/interface/mkiv/i-makeup.xml
@@ -113,7 +113,7 @@
</cd:arguments>
</cd:command>
- <cd:command file="page-mak.mkvi" name="makeup" type="environment">
+ <cd:command name="makeup" type="environment" file="page-mak.mkvi">
<cd:arguments>
<cd:resolve name="keyword-name"/>
<cd:assignments list="yes" optional="yes">
@@ -122,9 +122,9 @@
</cd:arguments>
</cd:command>
- <cd:command file="page-mak.mkvi" generated="yes" name="makeup" type="environment" variant="generated">
+ <cd:command name="makeup" type="environment" generated="yes" variant="instance" file="page-mak.mkvi">
<cd:sequence>
- <cd:variable value="makeup"/>
+ <cd:instance value="makeup"/>
<cd:string value="makeup"/>
</cd:sequence>
<cd:arguments>
@@ -133,47 +133,43 @@
</cd:assignments>
</cd:arguments>
<cd:instances>
- <cd:constant value="standard"/>
- <cd:constant value="page"/>
- <cd:constant value="text"/>
- <cd:constant value="middle"/>
+ <cd:resolve name="instance-makeup"/>
</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="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="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="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: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>
-->
diff --git a/tex/context/interface/mkiv/i-margindata.xml b/tex/context/interface/mkiv/i-margindata.xml
index 5a2b014ea..a54362fec 100644
--- a/tex/context/interface/mkiv/i-margindata.xml
+++ b/tex/context/interface/mkiv/i-margindata.xml
@@ -128,9 +128,9 @@
</cd:arguments>
</cd:command>
- <cd:command name="margindata" generated="yes" variant="generated" file="typo-mar.mkiv">
+ <cd:command name="margindata" generated="yes" variant="instance" file="typo-mar.mkiv">
<cd:sequence>
- <cd:variable value="margindata"/>
+ <cd:instance value="margindata"/>
</cd:sequence>
<cd:arguments>
<cd:assignments list="yes" optional="yes">
@@ -144,6 +144,9 @@
</cd:assignments>
<cd:content/>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-margindata"/>
+ </cd:instances>
</cd:command>
<cd:command name="margindata" file="typo-mar.mkiv">
@@ -162,292 +165,253 @@
</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="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: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="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: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="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: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="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: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="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: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="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: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="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: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="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: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="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: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="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: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="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="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="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="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="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="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="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="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="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="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="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="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="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: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="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: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:content/>
+ </cd:arguments>
+ </cd:command>
<cd:command name="inothermargin" file="typo-mar.mkiv">
<cd:arguments>
@@ -466,4 +430,4 @@
-->
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-marker.xml b/tex/context/interface/mkiv/i-marker.xml
index 103fc5e55..fe491650e 100644
--- a/tex/context/interface/mkiv/i-marker.xml
+++ b/tex/context/interface/mkiv/i-marker.xml
@@ -30,4 +30,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-marking.xml b/tex/context/interface/mkiv/i-marking.xml
index a556f1007..644f0ac5b 100644
--- a/tex/context/interface/mkiv/i-marking.xml
+++ b/tex/context/interface/mkiv/i-marking.xml
@@ -171,4 +171,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-math.xml b/tex/context/interface/mkiv/i-math.xml
index d16ba5173..58890d6ea 100644
--- a/tex/context/interface/mkiv/i-math.xml
+++ b/tex/context/interface/mkiv/i-math.xml
@@ -4,7 +4,7 @@
<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
- <cd:command name="definemathematics" file="math-ini.mkiv">
+ <cd:command name="definemathematics" category="mathematics" file="math-ini.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name"/>
<cd:resolve name="keyword-name-optional"/>
@@ -14,7 +14,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="setupmathematics" file="math-ini.mkiv">
+ <cd:command name="setupmathematics" category="mathematics" file="math-ini.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name-list-optional"/>
<cd:assignments list="yes">
@@ -81,8 +81,8 @@
<cd:parameter name="textcolor">
<cd:constant type="cd:color"/>
</cd:parameter>
- <cd:parameter name="functionstyle">
- <cd:resolve name="value-style"/>
+ <cd:parameter name="functioncolor">
+ <cd:constant type="cd:color"/>
</cd:parameter>
<cd:parameter name="integral">
<cd:constant type="limits"/>
@@ -91,43 +91,50 @@
<cd:constant type="displaylimits"/>
<cd:constant type="none"/>
</cd:parameter>
+ <cd:parameter name="stylealternative">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
<cd:parameter name="default">
<cd:constant type="normal"/>
<cd:constant type="italic" default="yes"/>
</cd:parameter>
+ <cd:parameter name="fraction">
+ <cd:constant type="ams"/>
+ <cd:constant type="ctx" default="yes"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
- <cd:command name="inlineordisplaymath" file="math-ini.mkiv">
+ <cd:command name="inlineordisplaymath" category="mathematics" file="math-ini.mkiv">
<cd:arguments>
<cd:content/>
<cd:content/>
</cd:arguments>
</cd:command>
- <cd:command name="mathematics" file="math-ini.mkiv">
+ <cd:command name="mathematics" category="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:command name="math" category="mathematics" 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:command name="m" category="mathematics" 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:command name="definemathcommand" category="mathematics" file="math-ini.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name"/>
<cd:keywords optional="yes">
@@ -157,7 +164,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="mathcommand" generated="yes" variant="generated" file="math-ini.mkiv">
+ <cd:command name="mathcommand" generated="yes" variant="example" file="math-ini.mkiv">
<cd:sequence>
<cd:variable value="mathcommand"/>
</cd:sequence>
@@ -191,13 +198,13 @@
</cd:arguments>
</cd:command>
- <cd:command name="mathfunction" file="math-ini.mkiv">
+ <cd:command name="mathfunction" category="mathematics" file="math-ini.mkiv">
<cd:arguments>
<cd:content/>
</cd:arguments>
</cd:command>
- <cd:command name="mfunction" file="math-ini.mkiv">
+ <cd:command name="mfunction" category="mathematics" file="math-ini.mkiv">
<cd:arguments>
<cd:content/>
</cd:arguments>
@@ -275,84 +282,98 @@
<cd:command name="mathtext" file="math-ini.mkiv">
<cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
<cd:resolve name="argument-text"/>
</cd:arguments>
</cd:command>
<cd:command name="mathtexttf" file="math-ini.mkiv">
<cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
<cd:resolve name="argument-text"/>
</cd:arguments>
</cd:command>
<cd:command name="mathtextit" file="math-ini.mkiv">
<cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
<cd:resolve name="argument-text"/>
</cd:arguments>
</cd:command>
<cd:command name="mathtextsl" file="math-ini.mkiv">
<cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
<cd:resolve name="argument-text"/>
</cd:arguments>
</cd:command>
<cd:command name="mathtextbf" file="math-ini.mkiv">
<cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
<cd:resolve name="argument-text"/>
</cd:arguments>
</cd:command>
<cd:command name="mathtextbi" file="math-ini.mkiv">
<cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
<cd:resolve name="argument-text"/>
</cd:arguments>
</cd:command>
<cd:command name="mathtextbs" file="math-ini.mkiv">
<cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
<cd:resolve name="argument-text"/>
</cd:arguments>
</cd:command>
<cd:command name="mathword" file="math-ini.mkiv">
<cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
<cd:resolve name="argument-text"/>
</cd:arguments>
</cd:command>
<cd:command name="mathwordtf" file="math-ini.mkiv">
<cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
<cd:resolve name="argument-text"/>
</cd:arguments>
</cd:command>
<cd:command name="mathwordit" file="math-ini.mkiv">
<cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
<cd:resolve name="argument-text"/>
</cd:arguments>
</cd:command>
<cd:command name="mathwordsl" file="math-ini.mkiv">
<cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
<cd:resolve name="argument-text"/>
</cd:arguments>
</cd:command>
<cd:command name="mathwordbf" file="math-ini.mkiv">
<cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
<cd:resolve name="argument-text"/>
</cd:arguments>
</cd:command>
<cd:command name="mathwordbi" file="math-ini.mkiv">
<cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
<cd:resolve name="argument-text"/>
</cd:arguments>
</cd:command>
<cd:command name="mathwordbs" file="math-ini.mkiv">
<cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
<cd:resolve name="argument-text"/>
</cd:arguments>
</cd:command>
diff --git a/tex/context/interface/mkiv/i-mathalignment.xml b/tex/context/interface/mkiv/i-mathalignment.xml
index cc0ff6fa7..5caa1348c 100644
--- a/tex/context/interface/mkiv/i-mathalignment.xml
+++ b/tex/context/interface/mkiv/i-mathalignment.xml
@@ -37,31 +37,38 @@
</cd:arguments>
</cd:command>
- <cd:command name="mathalignment" type="environment" generated="yes" variant="generated" file="math-ali.mkiv">
+ <cd:command name="mathalignment" type="environment" generated="yes" variant="instance" file="math-ali.mkiv">
<cd:sequence>
- <cd:variable value="mathalignment"/>
+ <cd:instance value="mathalignment"/>
</cd:sequence>
<cd:arguments>
<cd:assignments list="yes" optional="yes">
<cd:inherit name="setupmathalignment"/>
</cd:assignments>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-mathalignment"/>
+ </cd:instances>
</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: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/tex/context/interface/mkiv/i-mathcases.xml b/tex/context/interface/mkiv/i-mathcases.xml
index 9744fa9e5..8a27c4413 100644
--- a/tex/context/interface/mkiv/i-mathcases.xml
+++ b/tex/context/interface/mkiv/i-mathcases.xml
@@ -41,31 +41,38 @@
</cd:arguments>
</cd:command>
- <cd:command name="mathcases" type="environment" generated="yes" variant="generated" file="math-ali.mkiv">
+ <cd:command name="mathcases" type="environment" generated="yes" variant="instance" file="math-ali.mkiv">
<cd:sequence>
- <cd:variable value="mathcases"/>
+ <cd:instance value="mathcases"/>
</cd:sequence>
<cd:arguments>
<cd:assignments list="yes" optional="yes">
<cd:inherit name="setupmathcases"/>
</cd:assignments>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-mathcases"/>
+ </cd:instances>
</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: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/tex/context/interface/mkiv/i-mathfence.xml b/tex/context/interface/mkiv/i-mathfence.xml
index b23f8558e..9676e2a37 100644
--- a/tex/context/interface/mkiv/i-mathfence.xml
+++ b/tex/context/interface/mkiv/i-mathfence.xml
@@ -40,11 +40,16 @@
<cd:parameter name="state">
<cd:constant type="auto"/>
</cd:parameter>
+ <cd:parameter name="factor">
+ <cd:constant type="auto" default="yes"/>
+ <cd:constant type="none"/>
+ <cd:constant type="number"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
- <cd:command name="fence" generated="yes" variant="generated" file="math-fen.mkiv">
+ <cd:command name="fence" generated="yes" variant="example" file="math-fen.mkiv">
<cd:sequence>
<cd:variable value="fence"/>
</cd:sequence>
@@ -196,4 +201,4 @@
<cd:command name="checkedfences" type="environment" file="math-fen.mkiv"/>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-mathmatrix.xml b/tex/context/interface/mkiv/i-mathmatrix.xml
index a934d2b31..50f99205a 100644
--- a/tex/context/interface/mkiv/i-mathmatrix.xml
+++ b/tex/context/interface/mkiv/i-mathmatrix.xml
@@ -53,32 +53,39 @@
</cd:arguments>
</cd:command>
- <cd:command name="mathmatrix" type="environment" generated="yes" variant="generated" file="math-ali.mkiv">
+ <cd:command name="mathmatrix" type="environment" generated="yes" variant="instance" file="math-ali.mkiv">
<cd:sequence>
- <cd:variable value="mathmatrix"/>
+ <cd:instance value="mathmatrix"/>
</cd:sequence>
<cd:arguments>
<cd:assignments list="yes" optional="yes">
<cd:inherit name="setupmathmatrix"/>
</cd:assignments>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-mathmatrix"/>
+ </cd:instances>
</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="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>
@@ -112,4 +119,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-mathornament.xml b/tex/context/interface/mkiv/i-mathornament.xml
index 6009b7921..cfa7b0d18 100644
--- a/tex/context/interface/mkiv/i-mathornament.xml
+++ b/tex/context/interface/mkiv/i-mathornament.xml
@@ -34,7 +34,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="mathornament" generated="yes" variant="generated" file="math-rad.mkvi">
+ <cd:command name="mathornament" generated="yes" variant="example" file="math-rad.mkvi">
<cd:sequence>
<cd:variable value="mathornament"/>
</cd:sequence>
@@ -43,4 +43,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-mathradical.xml b/tex/context/interface/mkiv/i-mathradical.xml
index cedbb4200..e3ab9a6aa 100644
--- a/tex/context/interface/mkiv/i-mathradical.xml
+++ b/tex/context/interface/mkiv/i-mathradical.xml
@@ -36,7 +36,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="mathradical" generated="yes" variant="generated" file="math-rad.mkvi">
+ <cd:command name="mathradical" generated="yes" variant="example" file="math-rad.mkvi">
<cd:sequence>
<cd:variable value="mathradical"/>
</cd:sequence>
@@ -53,4 +53,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-mathstackers.xml b/tex/context/interface/mkiv/i-mathstackers.xml
index 37b5737ff..ef8d9d5e3 100644
--- a/tex/context/interface/mkiv/i-mathstackers.xml
+++ b/tex/context/interface/mkiv/i-mathstackers.xml
@@ -120,7 +120,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="mathextensible" generated="yes" variant="generated" file="math-stc.mkvi">
+ <cd:command name="mathextensible" generated="yes" variant="example" file="math-stc.mkvi">
<cd:sequence>
<cd:variable value="mathextensible"/>
</cd:sequence>
@@ -147,7 +147,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="mathoverextensible" generated="yes" variant="generated" file="math-stc.mkvi">
+ <cd:command name="mathoverextensible" generated="yes" variant="example" file="math-stc.mkvi">
<cd:sequence>
<cd:variable value="mathoverextensible"/>
</cd:sequence>
@@ -167,7 +167,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="mathunderextensible" generated="yes" variant="generated" file="math-stc.mkvi">
+ <cd:command name="mathunderextensible" generated="yes" variant="example" file="math-stc.mkvi">
<cd:sequence>
<cd:variable value="mathunderextensible"/>
</cd:sequence>
@@ -188,7 +188,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="mathdoubleextensible" generated="yes" variant="generated" file="math-stc.mkvi">
+ <cd:command name="mathdoubleextensible" generated="yes" variant="example" file="math-stc.mkvi">
<cd:sequence>
<cd:variable value="mathdoubleextensible"/>
</cd:sequence>
@@ -207,7 +207,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="mathovertextextensible" generated="yes" variant="generated" file="math-stc.mkvi">
+ <cd:command name="mathovertextextensible" generated="yes" variant="example" file="math-stc.mkvi">
<cd:sequence>
<cd:variable value="mathovertextextensible"/>
</cd:sequence>
@@ -227,7 +227,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="mathundertextextensible" generated="yes" variant="generated" file="math-stc.mkvi">
+ <cd:command name="mathundertextextensible" generated="yes" variant="example" file="math-stc.mkvi">
<cd:sequence>
<cd:variable value="mathundertextextensible"/>
</cd:sequence>
@@ -245,7 +245,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="mathtriplet" generated="yes" variant="generated" file="math-stc.mkvi">
+ <cd:command name="mathtriplet" generated="yes" variant="example" file="math-stc.mkvi">
<cd:sequence>
<cd:variable value="mathtriplet"/>
</cd:sequence>
@@ -1772,7 +1772,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="mathunstacked" generated="yes" variant="generated" file="math-stc.mkvi">
+ <cd:command name="mathunstacked" generated="yes" variant="example" file="math-stc.mkvi">
<cd:sequence>
<cd:variable value="mathunstacked"/>
</cd:sequence>
@@ -1786,4 +1786,4 @@
<cd:command name="iff" file="math-stc.mkvi"/>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-metapost.xml b/tex/context/interface/mkiv/i-metapost.xml
index ca15ebb9d..00250f787 100644
--- a/tex/context/interface/mkiv/i-metapost.xml
+++ b/tex/context/interface/mkiv/i-metapost.xml
@@ -389,7 +389,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="setupMPgraphics" file="meta-ini">
+ <cd:command name="setupMPgraphics" file="meta-ini.mkiv">
<cd:arguments>
<cd:assignments list="yes">
<cd:parameter name="color">
@@ -403,4 +403,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-mixedcolumns.xml b/tex/context/interface/mkiv/i-mixedcolumns.xml
index 09e0f3b34..6d0142536 100644
--- a/tex/context/interface/mkiv/i-mixedcolumns.xml
+++ b/tex/context/interface/mkiv/i-mixedcolumns.xml
@@ -19,7 +19,7 @@
<cd:resolve name="keyword-name-list-optional"/>
<cd:assignments list="yes">
<cd:parameter name="grid">
- <cd:inherit name="setupgrid"/>
+ <cd:inherit name="definegridsnapping"/>
</cd:parameter>
<cd:parameter name="rulethickness">
<cd:constant type="cd:dimension"/>
@@ -105,23 +105,30 @@
</cd:arguments>
</cd:command>
- <cd:command name="mixedcolumns" type="environment" generated="yes" variant="generated" file="page-mix.mkiv">
+ <cd:command name="mixedcolumns" type="environment" generated="yes" variant="instance" file="page-mix.mkiv">
<cd:sequence>
- <cd:variable value="mixedcolumns"/>
+ <cd:instance value="mixedcolumns"/>
</cd:sequence>
<cd:arguments>
<cd:assignments list="yes" optional="yes">
<cd:inherit name="setupmixedcolumns"/>
</cd:assignments>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-mixedcolumns"/>
+ </cd:instances>
</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: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/tex/context/interface/mkiv/i-modes.xml b/tex/context/interface/mkiv/i-modes.xml
index 8df4c27f6..0a0abc7c7 100644
--- a/tex/context/interface/mkiv/i-modes.xml
+++ b/tex/context/interface/mkiv/i-modes.xml
@@ -213,4 +213,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-modules.xml b/tex/context/interface/mkiv/i-modules.xml
index 9567cb9af..d8eda7fba 100644
--- a/tex/context/interface/mkiv/i-modules.xml
+++ b/tex/context/interface/mkiv/i-modules.xml
@@ -62,13 +62,13 @@
</cd:arguments>
</cd:command>
- <cd:command name="module" type="environment" variant="1" file="file-mod.mkvi">
+ <cd:command name="module" type="environment" 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:command name="module" type="environment" variant="string" file="file-mod.mkvi">
<cd:arguments>
<cd:resolve name="string-file"/>
</cd:arguments>
@@ -123,4 +123,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-narrow.xml b/tex/context/interface/mkiv/i-narrow.xml
index 1fa8699e1..25e40fd08 100644
--- a/tex/context/interface/mkiv/i-narrow.xml
+++ b/tex/context/interface/mkiv/i-narrow.xml
@@ -60,7 +60,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="narrower" type="environment" generated="yes" variant="generated" file="spac-hor.mkiv">
+ <cd:command name="narrower" type="environment" generated="yes" variant="example" file="spac-hor.mkiv">
<cd:sequence>
<cd:variable value="narrower"/>
</cd:sequence>
@@ -77,7 +77,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="narrow" type="environment" variant="1" file="spac-hor.mkiv">
+ <cd:command name="narrow" type="environment" file="spac-hor.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name-optional"/>
<cd:assignments list="yes" optional="yes">
@@ -86,7 +86,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="narrow" type="environment" variant="2" file="spac-hor.mkiv">
+ <cd:command name="narrow" type="environment" variant="name" file="spac-hor.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name-optional"/>
<cd:keywords list="yes" optional="yes">
@@ -101,7 +101,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="narrow" type="environment" variant="3" file="spac-hor.mkiv">
+ <cd:command name="narrow" type="environment" variant="assignment" file="spac-hor.mkiv">
<cd:arguments>
<cd:assignments list="yes" optional="yes">
<cd:inherit name="setupnarrower"/>
@@ -118,4 +118,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-naturaltable.xml b/tex/context/interface/mkiv/i-naturaltable.xml
index d7ba1aac8..e18be1b79 100644
--- a/tex/context/interface/mkiv/i-naturaltable.xml
+++ b/tex/context/interface/mkiv/i-naturaltable.xml
@@ -105,6 +105,8 @@
</cd:parameter>
<cd:parameter name="alignmentcharacter">
<cd:constant type="cd:text"/>
+ <cd:constant type="cd:text" prefix="number" method="apply"/>
+ <cd:constant type="cd:text" prefix="text" method="apply"/>
</cd:parameter>
<cd:parameter name="distance">
<cd:constant type="cd:dimension"/>
@@ -113,6 +115,7 @@
<cd:constant type="cd:color"/>
</cd:parameter>
<cd:parameter name="style">
+ <cd:constant type="math"/>
<cd:resolve name="value-style"/>
</cd:parameter>
<cd:inherit name="setupframed"/>
diff --git a/tex/context/interface/mkiv/i-note.xml b/tex/context/interface/mkiv/i-note.xml
index be74ca3a6..a7ecb5401 100644
--- a/tex/context/interface/mkiv/i-note.xml
+++ b/tex/context/interface/mkiv/i-note.xml
@@ -156,6 +156,9 @@
<cd:constant type="no" default="yes"/>
<cd:constant type="xml"/>
</cd:parameter>
+ <cd:parameter name="referenceprefix">
+ <cd:resolve name="value-referenceprefix"/>
+ </cd:parameter>
<cd:parameter name="sample">
<cd:constant type="cd:text"/>
</cd:parameter>
@@ -180,54 +183,62 @@
</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="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:command name="note" type="environment" generated="yes" variant="instance:assignment" file="strc-not.mkvi">
<cd:sequence>
- <cd:variable value="note"/>
+ <cd:instance value="note"/>
</cd:sequence>
<cd:arguments>
<cd:resolve name="assignment-constructiondata-list-optional"/>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-note"/>
+ </cd:instances>
</cd:command>
- <cd:command name="note" type="environment" generated="yes" variant="generated:2" file="strc-not.mkvi">
+ <cd:command name="note" type="environment" generated="yes" variant="instance" file="strc-not.mkvi">
<cd:sequence>
- <cd:variable value="note"/>
+ <cd:instance value="note"/>
</cd:sequence>
<cd:arguments>
<cd:resolve name="keyword-reference-list-optional"/>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-note"/>
+ </cd:instances>
</cd:command>
- <cd:command name="note" generated="yes" variant="generated:1" file="strc-not.mkvi">
+ <cd:command name="note" generated="yes" variant="instance" file="strc-not.mkvi">
<cd:sequence>
- <cd:variable value="note"/>
+ <cd:instance value="note"/>
</cd:sequence>
<cd:arguments>
<cd:resolve name="keyword-reference-list-optional"/>
<cd:resolve name="argument-text"/>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-note"/>
+ </cd:instances>
</cd:command>
- <cd:command name="note" generated="yes" variant="generated:2" file="strc-not.mkvi">
+ <cd:command name="note" generated="yes" variant="instance:assignment" file="strc-not.mkvi">
<cd:sequence>
- <cd:variable value="note"/>
+ <cd:instance value="note"/>
</cd:sequence>
<cd:arguments>
<cd:resolve name="assignment-constructiondata-list"/>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-note"/>
+ </cd:instances>
</cd:command>
<cd:command name="definenote" file="strc-not.mkvi">
@@ -330,7 +341,7 @@
<cd:constant type="cd:command"/>
</cd:parameter>
<cd:parameter name="after">
- <cd:constant type="cd.command"/>
+ <cd:constant type="cd:command"/>
</cd:parameter>
<cd:parameter name="inbetween">
<cd:constant type="cd:command"/>
@@ -375,20 +386,16 @@
</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="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:command name="setnote" file="strc-not.mkvi">
<cd:arguments>
<cd:resolve name="keyword-name"/>
<cd:resolve name="keyword-reference-list-optional"/>
@@ -396,14 +403,14 @@
</cd:arguments>
</cd:command>
- <cd:command name="setnote" variant="2" file="strc-not.mkvi">
+ <cd:command name="setnote" variant="assignment" 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:command name="setnotetext" file="strc-not.mkvi">
<cd:arguments>
<cd:resolve name="keyword-name"/>
<cd:resolve name="keyword-reference-list-optional"/>
@@ -411,7 +418,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="setnotetext" variant="2" file="strc-not.mkvi">
+ <cd:command name="setnotetext" variant="assignment" file="strc-not.mkvi">
<cd:arguments>
<cd:resolve name="keyword-name"/>
<cd:resolve name="assignment-constructiondata-list"/>
@@ -483,39 +490,43 @@
</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" type="environment" variant="assignment" file="strc-not.mkvi">
+ <cd:arguments>
+ <cd:resolve name="assignment-constructiondata-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" type="environment" file="strc-not.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ </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="footnote" 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="assignment" 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:command name="footnotetext" 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:command name="footnotetext" variant="assignment" file="strc-not.mkvi">
<cd:arguments>
<cd:resolve name="assignment-constructiondata-list"/>
</cd:arguments>
@@ -539,30 +550,34 @@
</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" type="environment" variant="assignment" file="strc-not.mkvi">
+ <cd:arguments>
+ <cd:resolve name="assignment-constructiondata-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" type="environment" file="strc-not.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ </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="endnote" 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="assignment" 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>
@@ -598,34 +613,43 @@
</cd:arguments>
</cd:command>
- <cd:command name="linenote" generated="yes" variant="generated" file="strc-lnt.mkvi">
+ <cd:command name="linenote" generated="yes" variant="instance" file="strc-lnt.mkvi">
<cd:sequence>
- <cd:variable value="linenote"/>
+ <cd:instance value="linenote"/>
</cd:sequence>
<cd:arguments>
<cd:resolve name="argument-text"/>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-linenote"/>
+ </cd:instances>
</cd:command>
- <cd:command name="startlinenote" generated="yes" variant="generated" file="strc-lnt.mkvi">
+ <cd:command name="startlinenote" generated="yes" variant="instance" file="strc-lnt.mkvi">
<cd:sequence>
<cd:string value="start"/>
- <cd:variable value="linenote"/>
+ <cd:instance value="linenote"/>
</cd:sequence>
<cd:arguments>
<cd:resolve name="keyword-reference"/>
<cd:resolve name="argument-text"/>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-linenote"/>
+ </cd:instances>
</cd:command>
- <cd:command name="stoplinenote" generated="yes" variant="generated" file="strc-lnt.mkvi">
+ <cd:command name="stoplinenote" generated="yes" variant="instance" file="strc-lnt.mkvi">
<cd:sequence>
<cd:string value="stop"/>
- <cd:variable value="linenote"/>
+ <cd:instance value="linenote"/>
</cd:sequence>
<cd:arguments>
<cd:resolve name="keyword-reference"/>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-linenote"/>
+ </cd:instances>
</cd:command>
<cd:command name="fromlinenote" file="strc-lnt.mkvi">
@@ -641,23 +665,27 @@
</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="linenote" file="strc-lnt.mkvi">
+ <cd:arguments>
+ <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: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
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-object.xml b/tex/context/interface/mkiv/i-object.xml
index 804d17af8..6e105b377 100644
--- a/tex/context/interface/mkiv/i-object.xml
+++ b/tex/context/interface/mkiv/i-object.xml
@@ -129,4 +129,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-offset.xml b/tex/context/interface/mkiv/i-offset.xml
index 8e68a3bef..fc759673d 100644
--- a/tex/context/interface/mkiv/i-offset.xml
+++ b/tex/context/interface/mkiv/i-offset.xml
@@ -71,4 +71,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-ornament.xml b/tex/context/interface/mkiv/i-ornament.xml
index 8ad0b7cfb..f4ae43a6d 100644
--- a/tex/context/interface/mkiv/i-ornament.xml
+++ b/tex/context/interface/mkiv/i-ornament.xml
@@ -4,7 +4,7 @@
<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
- <cd:command name="ornamenttext" variant="1" file="pack-box.mkiv">
+ <cd:command name="ornamenttext" variant="collector" file="pack-box.mkiv">
<cd:arguments>
<cd:assignments list="yes">
<cd:parameter name="alternative">
@@ -27,7 +27,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="ornamenttext" variant="2" file="pack-box.mkiv">
+ <cd:command name="ornamenttext" variant="layer" file="pack-box.mkiv">
<cd:arguments>
<cd:assignments list="yes">
<cd:parameter name="alternative">
@@ -44,7 +44,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="ornamenttext" variant="3" file="pack-box.mkiv">
+ <cd:command name="ornamenttext" variant="direct" file="pack-box.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name"/>
<cd:resolve name="argument-text"/>
@@ -52,7 +52,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="defineornament" variant="1" file="pack-box.mkiv">
+ <cd:command name="defineornament" variant="collector" file="pack-box.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name"/>
<cd:assignments list="yes">
@@ -74,7 +74,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="defineornament" variant="2" file="pack-box.mkiv">
+ <cd:command name="defineornament" variant="layer" file="pack-box.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name"/>
<cd:assignments list="yes">
@@ -90,7 +90,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="ornament" generated="yes" variant="generated" file="pack-box.mkiv">
+ <cd:command name="ornament" generated="yes" variant="example" file="pack-box.mkiv">
<cd:sequence>
<cd:variable value="ornament"/>
</cd:sequence>
@@ -100,4 +100,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-output.xml b/tex/context/interface/mkiv/i-output.xml
index 1f59284ff..bf719ca6a 100644
--- a/tex/context/interface/mkiv/i-output.xml
+++ b/tex/context/interface/mkiv/i-output.xml
@@ -14,7 +14,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="setupoutputroutine" variant="1" file="page-otr.mkvi">
+ <cd:command name="setupoutputroutine" file="page-otr.mkvi">
<cd:arguments>
<cd:resolve name="keyword-name-optional"/>
<cd:assignments list="yes">
@@ -25,7 +25,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="setupoutputroutine" variant="2" file="page-otr.mkvi">
+ <cd:command name="setupoutputroutine" variant="name" file="page-otr.mkvi">
<cd:arguments>
<cd:resolve name="keyword-name"/>
</cd:arguments>
@@ -46,4 +46,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-overlay.xml b/tex/context/interface/mkiv/i-overlay.xml
index dd2d43363..91e9f4873 100644
--- a/tex/context/interface/mkiv/i-overlay.xml
+++ b/tex/context/interface/mkiv/i-overlay.xml
@@ -42,4 +42,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-pagebreak.xml b/tex/context/interface/mkiv/i-pagebreak.xml
index abc586ea6..917e4a718 100644
--- a/tex/context/interface/mkiv/i-pagebreak.xml
+++ b/tex/context/interface/mkiv/i-pagebreak.xml
@@ -132,4 +132,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-pagegrid.xml b/tex/context/interface/mkiv/i-pagegrid.xml
index 29810d7db..21f906a0c 100644
--- a/tex/context/interface/mkiv/i-pagegrid.xml
+++ b/tex/context/interface/mkiv/i-pagegrid.xml
@@ -55,7 +55,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="pagegrid" type="environment" generated="yes" variant="generated" file="page-cst.mkiv">
+ <cd:command name="pagegrid" type="environment" generated="yes" variant="example" file="page-cst.mkiv">
<cd:sequence>
<cd:variable value="pagegrid"/>
</cd:sequence>
@@ -217,4 +217,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-pageinjection.xml b/tex/context/interface/mkiv/i-pageinjection.xml
index 64becc385..c069dbc8b 100644
--- a/tex/context/interface/mkiv/i-pageinjection.xml
+++ b/tex/context/interface/mkiv/i-pageinjection.xml
@@ -49,14 +49,14 @@
</cd:arguments>
</cd:command>
- <cd:command name="pageinjection" variant="1" file="page-inj.mkvi">
+ <cd:command name="pageinjection" 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:command name="pageinjection" variant="assignment" file="page-inj.mkvi">
<cd:arguments>
<cd:assignments list="yes" optional="yes">
<cd:inherit name="setuppageinjection"/>
diff --git a/tex/context/interface/mkiv/i-pageselection.xml b/tex/context/interface/mkiv/i-pageselection.xml
index 45c433269..99d55bb8a 100644
--- a/tex/context/interface/mkiv/i-pageselection.xml
+++ b/tex/context/interface/mkiv/i-pageselection.xml
@@ -15,6 +15,9 @@
<cd:parameter name="n">
<cd:constant type="cd:number"/>
</cd:parameter>
+ <cd:parameter name="category">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -35,6 +38,9 @@
<cd:parameter name="n">
<cd:constant type="cd:number"/>
</cd:parameter>
+ <cd:parameter name="category">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
diff --git a/tex/context/interface/mkiv/i-pagestate.xml b/tex/context/interface/mkiv/i-pagestate.xml
index 0d6a94811..82396d000 100644
--- a/tex/context/interface/mkiv/i-pagestate.xml
+++ b/tex/context/interface/mkiv/i-pagestate.xml
@@ -16,7 +16,7 @@
<cd:command name="setuppagestate" file="core-dat.mkiv">
<cd:arguments>
- <cd:resolve name="keyword-name-optional-list"/>
+ <cd:resolve name="keyword-name-list-optional"/>
<cd:assignments list="yes">
<cd:parameter name="delay">
<cd:constant type="yes" default="yes"/>
diff --git a/tex/context/interface/mkiv/i-pairedbox.xml b/tex/context/interface/mkiv/i-pairedbox.xml
index fbf190257..bbab966ba 100644
--- a/tex/context/interface/mkiv/i-pairedbox.xml
+++ b/tex/context/interface/mkiv/i-pairedbox.xml
@@ -90,22 +90,25 @@
</cd:arguments>
</cd:command>
- <cd:command name="setuppairedbox" generated="yes" variant="generated" file="pack-com.mkiv">
+ <cd:command name="setuppairedbox" generated="yes" variant="instance" file="pack-com.mkiv">
<cd:sequence>
<cd:string value="setup"/>
- <cd:variable value="pairedbox"/>
+ <cd:instance value="pairedbox"/>
</cd:sequence>
<cd:arguments>
<cd:assignments list="yes">
<cd:inherit name="setuppairedbox"/>
</cd:assignments>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-pairedbox"/>
+ </cd:instances>
</cd:command>
- <cd:command name="placepairedbox" generated="yes" variant="generated" file="pack-com.mkiv">
+ <cd:command name="placepairedbox" generated="yes" variant="instance" file="pack-com.mkiv">
<cd:sequence>
<cd:string value="place"/>
- <cd:variable value="pairedbox"/>
+ <cd:instance value="pairedbox"/>
</cd:sequence>
<cd:arguments>
<cd:assignments list="yes" optional="yes">
@@ -114,45 +117,55 @@
<cd:content/>
<cd:resolve name="argument-text"/>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-pairedbox"/>
+ </cd:instances>
</cd:command>
- <cd:command name="placepairedbox" type="environment" generated="yes" variant="generated" file="pack-com.mkiv">
+ <cd:command name="placepairedbox" type="environment" generated="yes" variant="instance" file="pack-com.mkiv">
<cd:sequence>
<cd:string value="place"/>
- <cd:variable value="pairedbox"/>
+ <cd:instance value="pairedbox"/>
</cd:sequence>
<cd:arguments>
<cd:assignments list="yes" optional="yes">
<cd:inherit name="setuppairedbox"/>
</cd:assignments>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-pairedbox"/>
+ </cd:instances>
</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="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" 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="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>
@@ -168,4 +181,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-papersize.xml b/tex/context/interface/mkiv/i-papersize.xml
index 99d6b9d9d..dab5e03bd 100644
--- a/tex/context/interface/mkiv/i-papersize.xml
+++ b/tex/context/interface/mkiv/i-papersize.xml
@@ -102,7 +102,7 @@
-->
- <cd:command name="definepapersize" variant="1" file="page-lay.mkiv">
+ <cd:command name="definepapersize" file="page-lay.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name"/>
<cd:assignments list="yes">
@@ -137,7 +137,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="definepapersize" variant="2" file="page-lay.mkiv">
+ <cd:command name="definepapersize" variant="name" file="page-lay.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name"/>
<cd:keywords list="yes">
@@ -149,7 +149,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="setuppapersize" variant="1" file="page-lay.mkiv">
+ <cd:command name="setuppapersize" variant="name" file="page-lay.mkiv">
<cd:arguments>
<cd:keywords list="yes" optional="yes">
<cd:constant type="reset"/>
@@ -178,7 +178,7 @@
<!--
- <cd:command name="setuppapersize" variant="2" file="page-lay.mkiv">
+ <cd:command name="setuppapersize" file="page-lay.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name-optional"/>
<cd:assignments list="yes">
@@ -197,7 +197,7 @@
-->
- <cd:command name="setuppapersize" variant="2" file="page-lay.mkiv">
+ <cd:command name="setuppapersize" file="page-lay.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name-optional"/>
<cd:assignments list="yes">
diff --git a/tex/context/interface/mkiv/i-paragraph.xml b/tex/context/interface/mkiv/i-paragraph.xml
index 63ddab64f..8a88f72fc 100644
--- a/tex/context/interface/mkiv/i-paragraph.xml
+++ b/tex/context/interface/mkiv/i-paragraph.xml
@@ -68,4 +68,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-paragraphs.xml b/tex/context/interface/mkiv/i-paragraphs.xml
index 6c1dae0db..99092f668 100644
--- a/tex/context/interface/mkiv/i-paragraphs.xml
+++ b/tex/context/interface/mkiv/i-paragraphs.xml
@@ -14,7 +14,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="setupparagraphs" variant="1" file="tabl-mis.mkiv">
+ <cd:command name="setupparagraphs" file="tabl-mis.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name-optional"/>
<cd:keywords list="yes" optional="yes">
@@ -76,7 +76,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="setupparagraphs" variant="2" file="tabl-mis.mkiv">
+ <cd:command name="setupparagraphs" variant="assignment" file="tabl-mis.mkiv">
<cd:arguments>
<cd:keywords optional="yes">
<cd:constant type="cd:number" prefix="cd:name" method="range"/>
@@ -144,19 +144,19 @@
<cd:command name="nextparagraphs" file="tabl-mis.mkiv"/>
- <cd:command name="paragraphs" type="environment" generated="yes" variant="generated" file="tabl-mis.mkiv">
+ <cd:command name="paragraphs" type="environment" generated="yes" variant="example" 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:command name="paragraphs" generated="yes" variant="example" 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:command name="nextparagraphs" generated="yes" variant="example" file="tabl-mis.mkiv">
<cd:sequence>
<cd:string value="next"/>
<cd:variable value="paragraphs"/>
diff --git a/tex/context/interface/mkiv/i-parallel.xml b/tex/context/interface/mkiv/i-parallel.xml
index ef2c55f3f..ed1c50c86 100644
--- a/tex/context/interface/mkiv/i-parallel.xml
+++ b/tex/context/interface/mkiv/i-parallel.xml
@@ -76,10 +76,10 @@
</cd:arguments>
</cd:command>
- <cd:command name="parallel" type="environment" generated="yes" variant="generated" file="buff-par.mkvi">
+ <cd:command name="parallel" type="environment" generated="yes" variant="example" file="buff-par.mkvi">
<cd:sequence>
<cd:variable value="parallel"/>
</cd:sequence>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-pdf.xml b/tex/context/interface/mkiv/i-pdf.xml
index 9d75ddfd3..5b4eab2c3 100644
--- a/tex/context/interface/mkiv/i-pdf.xml
+++ b/tex/context/interface/mkiv/i-pdf.xml
@@ -128,4 +128,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-penalty.xml b/tex/context/interface/mkiv/i-penalty.xml
index 8cadf672b..ee241b9ff 100644
--- a/tex/context/interface/mkiv/i-penalty.xml
+++ b/tex/context/interface/mkiv/i-penalty.xml
@@ -26,4 +26,4 @@
<cd:command name="setdefaultpenalties" file="spac-ver.mkiv"/>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-periods.xml b/tex/context/interface/mkiv/i-periods.xml
index e72152c38..9114ae550 100644
--- a/tex/context/interface/mkiv/i-periods.xml
+++ b/tex/context/interface/mkiv/i-periods.xml
@@ -24,13 +24,13 @@
</cd:arguments>
</cd:command>
- <cd:command name="periods" variant="1" file="enco-ini.mkiv">
+ <cd:command name="periods" 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:command name="periods" variant="assignment" file="enco-ini.mkiv">
<cd:arguments>
<cd:assignments list="yes" optional="yes">
<cd:inherit name="setupperiods"/>
diff --git a/tex/context/interface/mkiv/i-placement.xml b/tex/context/interface/mkiv/i-placement.xml
index 4db307957..958ffaa6f 100644
--- a/tex/context/interface/mkiv/i-placement.xml
+++ b/tex/context/interface/mkiv/i-placement.xml
@@ -60,7 +60,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="placement" generated="yes" variant="generated" file="pack-mis.mkiv">
+ <cd:command name="placement" generated="yes" variant="example" file="pack-mis.mkiv">
<cd:sequence>
<cd:variable value="placement"/>
</cd:sequence>
diff --git a/tex/context/interface/mkiv/i-position.xml b/tex/context/interface/mkiv/i-position.xml
index 54bc952dc..e43ee58ef 100644
--- a/tex/context/interface/mkiv/i-position.xml
+++ b/tex/context/interface/mkiv/i-position.xml
@@ -183,6 +183,12 @@
</cd:arguments>
</cd:command>
+ <cd:command name="MPwhd" 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"/>
@@ -525,4 +531,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-positionbar.xml b/tex/context/interface/mkiv/i-positionbar.xml
index e6dadf8c5..481540691 100644
--- a/tex/context/interface/mkiv/i-positionbar.xml
+++ b/tex/context/interface/mkiv/i-positionbar.xml
@@ -70,4 +70,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-processor.xml b/tex/context/interface/mkiv/i-processor.xml
index a43037754..0c313c77a 100644
--- a/tex/context/interface/mkiv/i-processor.xml
+++ b/tex/context/interface/mkiv/i-processor.xml
@@ -48,4 +48,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-profile.xml b/tex/context/interface/mkiv/i-profile.xml
index 2df175cdf..a3fe7ea6e 100644
--- a/tex/context/interface/mkiv/i-profile.xml
+++ b/tex/context/interface/mkiv/i-profile.xml
@@ -97,4 +97,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-publication.xml b/tex/context/interface/mkiv/i-publication.xml
index 4d3583e7e..83cb6c2c8 100644
--- a/tex/context/interface/mkiv/i-publication.xml
+++ b/tex/context/interface/mkiv/i-publication.xml
@@ -32,7 +32,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="setupbtx" variant="1" file="publ-ini.mkiv">
+ <cd:command name="setupbtx" file="publ-ini.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name-optional"/>
<cd:assignments list="yes">
@@ -114,7 +114,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="setupbtx" variant="2" file="publ-ini.mkiv">
+ <cd:command name="setupbtx" variant="name" file="publ-ini.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name"/>
</cd:arguments>
@@ -370,90 +370,90 @@
</cd:arguments>
</cd:command>
- <cd:command name="btxhybridcite" variant="1" file="publ-ini.mkiv">
+ <cd:command name="btxhybridcite" 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:command name="btxhybridcite" variant="userdata" 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:command name="btxhybridcite" variant="alternative" 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:command name="btxhybridcite" variant="direct" 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:command name="btxlistcitation" 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:command name="btxlistcitation" variant="userdata" 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:command name="btxlistcitation" variant="alternative" 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:command name="btxtextcitation" 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:command name="btxtextcitation" variant="userdata" 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:command name="btxtextcitation" variant="alternative" 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:command name="btxalwayscitation" 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:command name="btxalwayscitation" variant="userdata" 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:command name="btxalwayscitation" variant="alternative" file="publ-ini.mkiv">
<cd:arguments>
<cd:resolve name="keyword-btxalternative-optional"/>
<cd:resolve name="keyword-reference"/>
@@ -466,126 +466,126 @@
</cd:arguments>
</cd:command>
- <cd:command name="listcitation" variant="1" file="publ-ini.mkiv">
+ <cd:command name="listcitation" 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:command name="listcitation" variant="userdata" 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:command name="listcitation" variant="alternative" 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:command name="listcite" 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:command name="listcite" variant="userdata" 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:command name="listcite" variant="alternative" 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:command name="textcitation" 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:command name="textcitation" variant="userdata" 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:command name="textcitation" variant="alternative" 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:command name="textcite" 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:command name="textcite" variant="userdata" 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:command name="textcite" variant="alternative" 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:command name="alwayscitation" 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:command name="alwayscitation" variant="userdata" 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:command name="alwayscitation" variant="alternative" 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:command name="alwayscite" 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:command name="alwayscite" variant="userdata" 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:command name="alwayscite" variant="alternative" file="publ-ini.mkiv">
<cd:arguments>
<cd:resolve name="keyword-btxalternative-optional"/>
<cd:resolve name="keyword-reference"/>
@@ -604,79 +604,79 @@
</cd:arguments>
</cd:command>
- <cd:command name="citation" variant="1" file="publ-ini.mkiv">
+ <cd:command name="citation" 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:command name="citation" variant="userdata" 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:command name="citation" variant="alternative" 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:command name="citation" variant="direct" 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:command name="cite" 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:command name="cite" variant="userdata" 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:command name="cite" variant="alternative" 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:command name="cite" variant="direct" 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:command name="nocitation" 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:command name="nocitation" variant="direct" 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:command name="nocite" 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:command name="nocite" variant="direct" file="publ-ini.mkiv">
<cd:arguments>
<cd:resolve name="argument-reference"/>
</cd:arguments>
@@ -1024,7 +1024,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="showbtxdatasetfields" variant="1" file="publ-tra.mkiv">
+ <cd:command name="showbtxdatasetfields" file="publ-tra.mkiv">
<cd:arguments>
<cd:assignments list="yes" optional="yes">
<cd:parameter name="specification">
@@ -1040,13 +1040,13 @@
</cd:arguments>
</cd:command>
- <cd:command name="showbtxdatasetfields" variant="2" file="publ-tra.mkiv">
+ <cd:command name="showbtxdatasetfields" variant="argument" 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:command name="showbtxdatasetcompleteness" file="publ-tra.mkiv">
<cd:arguments>
<cd:assignments list="yes" optional="yes">
<cd:parameter name="specification">
@@ -1062,13 +1062,13 @@
</cd:arguments>
</cd:command>
- <cd:command name="showbtxdatasetcompleteness" variant="2" file="publ-tra.mkiv">
+ <cd:command name="showbtxdatasetcompleteness" variant="argument" 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:command name="showbtxdatasetauthors" file="publ-tra.mkiv">
<cd:arguments>
<cd:assignments list="yes" optional="yes">
<cd:parameter name="specification">
@@ -1084,7 +1084,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="showbtxdatasetauthors" variant="2" file="publ-tra.mkiv">
+ <cd:command name="showbtxdatasetauthors" variant="argument" file="publ-tra.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name-optional"/>
</cd:arguments>
@@ -1096,7 +1096,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="showbtxfields" variant="1" file="publ-tra.mkiv">
+ <cd:command name="showbtxfields" file="publ-tra.mkiv">
<cd:arguments>
<cd:assignments list="yes" optional="yes">
<cd:parameter name="rotation">
@@ -1109,7 +1109,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="showbtxfields" variant="2" file="publ-tra.mkiv">
+ <cd:command name="showbtxfields" variant="argument" file="publ-tra.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name-optional"/>
</cd:arguments>
@@ -1121,4 +1121,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-random.xml b/tex/context/interface/mkiv/i-random.xml
index 969cef05f..54dc66c5f 100644
--- a/tex/context/interface/mkiv/i-random.xml
+++ b/tex/context/interface/mkiv/i-random.xml
@@ -61,4 +61,4 @@
<cd:command name="mprandomnumber" file="supp-ran.mkiv"/>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-readme.pdf b/tex/context/interface/mkiv/i-readme.pdf
index 652553799..e08b84165 100644
--- a/tex/context/interface/mkiv/i-readme.pdf
+++ b/tex/context/interface/mkiv/i-readme.pdf
Binary files differ
diff --git a/tex/context/interface/mkiv/i-references.xml b/tex/context/interface/mkiv/i-references.xml
index 7b117e4f7..e7a713796 100644
--- a/tex/context/interface/mkiv/i-references.xml
+++ b/tex/context/interface/mkiv/i-references.xml
@@ -346,7 +346,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="referenceformat" generated="yes" variant="generated" file="strc-ref.mkvi">
+ <cd:command name="referenceformat" generated="yes" variant="example" file="strc-ref.mkvi">
<cd:sequence>
<cd:variable value="referenceformat"/>
</cd:sequence>
@@ -563,4 +563,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-regime.xml b/tex/context/interface/mkiv/i-regime.xml
index 6c9e5b356..cd0374023 100644
--- a/tex/context/interface/mkiv/i-regime.xml
+++ b/tex/context/interface/mkiv/i-regime.xml
@@ -85,4 +85,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-register.xml b/tex/context/interface/mkiv/i-register.xml
index 561912f6a..e13b009ea 100644
--- a/tex/context/interface/mkiv/i-register.xml
+++ b/tex/context/interface/mkiv/i-register.xml
@@ -14,7 +14,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="setupregister" variant="1" file="strc-reg.mkiv">
+ <cd:command name="setupregister" variant="argument" file="strc-reg.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name-list-optional"/>
<cd:resolve name="keyword-number-list-optional"/>
@@ -178,9 +178,10 @@
</cd:arguments>
</cd:command>
- <cd:command name="setupregister" variant="2" file="strc-reg.mkiv">
+ <cd:command name="setupregister" file="strc-reg.mkiv">
<cd:arguments>
<cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
<cd:constant type="cd:number" prefix="cd:name" method="range"/>
</cd:keywords>
<cd:assignments list="yes">
@@ -343,34 +344,31 @@
</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="setupregisters" variant="argument" 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" file="strc-reg.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ <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:command name="register" generated="yes" variant="instance" file="strc-reg.mkiv">
<cd:sequence>
- <cd:variable value="register"/>
+ <cd:instance value="register"/>
</cd:sequence>
<cd:arguments>
<cd:keywords optional="yes">
@@ -379,11 +377,14 @@
</cd:keywords>
<cd:index list="yes"/>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-register"/>
+ </cd:instances>
</cd:command>
- <cd:command name="register" generated="yes" variant="generated:2" file="strc-reg.mkiv">
+ <cd:command name="register" generated="yes" variant="instance:ownnumber" file="strc-reg.mkiv">
<cd:sequence>
- <cd:variable value="register"/>
+ <cd:instance value="register"/>
</cd:sequence>
<cd:arguments>
<cd:keywords optional="yes">
@@ -393,12 +394,15 @@
<cd:resolve name="argument-text"/>
<cd:index list="yes"/>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-register"/>
+ </cd:instances>
</cd:command>
- <cd:command name="seeregister" generated="yes" variant="generated" file="strc-reg.mkiv">
+ <cd:command name="seeregister" generated="yes" variant="instance" file="strc-reg.mkiv">
<cd:sequence>
<cd:string value="see"/>
- <cd:variable value="register"/>
+ <cd:instance value="register"/>
</cd:sequence>
<cd:arguments>
<cd:keywords optional="yes">
@@ -411,36 +415,45 @@
<cd:constant type="cd:text" prefix="cd:processor" method="apply"/>
</cd:keywords>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-register"/>
+ </cd:instances>
</cd:command>
- <cd:command name="placeregister" generated="yes" variant="generated" file="strc-reg.mkiv">
+ <cd:command name="placeregister" generated="yes" variant="instance" file="strc-reg.mkiv">
<cd:sequence>
<cd:string value="place"/>
- <cd:variable value="register"/>
+ <cd:instance value="register"/>
</cd:sequence>
<cd:arguments>
<cd:assignments list="yes" optional="yes">
<cd:inherit name="setupregister"/>
</cd:assignments>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-register"/>
+ </cd:instances>
</cd:command>
- <cd:command name="completeregister" generated="yes" variant="generated" file="strc-reg.mkiv">
+ <cd:command name="completeregister" generated="yes" variant="instance" file="strc-reg.mkiv">
<cd:sequence>
<cd:string value="complete"/>
- <cd:variable value="register"/>
+ <cd:instance value="register"/>
</cd:sequence>
<cd:arguments>
<cd:assignments list="yes" optional="yes">
<cd:inherit name="setupregister"/>
</cd:assignments>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-register"/>
+ </cd:instances>
</cd:command>
- <cd:command name="setupregister" generated="yes" variant="generated" file="strc-reg.mkiv">
+ <cd:command name="setupregister" generated="yes" variant="instance" file="strc-reg.mkiv">
<cd:sequence>
<cd:string value="setup"/>
- <cd:variable value="register"/>
+ <cd:instance value="register"/>
</cd:sequence>
<cd:arguments>
<cd:resolve name="keyword-number-list-optional"/>
@@ -448,67 +461,74 @@
<cd:inherit name="setupregister"/>
</cd:assignments>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-register"/>
+ </cd:instances>
</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="index" 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="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="index" variant="ownnumber" 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="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="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="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="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="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="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>
@@ -643,4 +663,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-rotatation.xml b/tex/context/interface/mkiv/i-rotatation.xml
index 95a5815e9..3e8eb6699 100644
--- a/tex/context/interface/mkiv/i-rotatation.xml
+++ b/tex/context/interface/mkiv/i-rotatation.xml
@@ -51,4 +51,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-ruby.xml b/tex/context/interface/mkiv/i-ruby.xml
new file mode 100644
index 000000000..698e4f24f
--- /dev/null
+++ b/tex/context/interface/mkiv/i-ruby.xml
@@ -0,0 +1,76 @@
+<?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="defineruby" file="typo-rub.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupruby"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupruby" file="typo-rub.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="location">
+ <cd:constant type="top" default="yes"/>
+ <cd:constant type="left"/>
+ <cd:constant type="right"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:constant type="auto"/>
+ <cd:constant type="flushleft"/>
+ <cd:constant type="middle" default="yes"/>
+ <cd:constant type="flushright"/>
+ </cd:parameter>
+ <cd:parameter name="stretch">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </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="distance">
+ <cd:constant type="none"/>
+ <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="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="ruby" file="typo-rub.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ruby" type="environment" file="typo-rub.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-scite.xml b/tex/context/interface/mkiv/i-scite.xml
new file mode 100644
index 000000000..e62bc9067
--- /dev/null
+++ b/tex/context/interface/mkiv/i-scite.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="scite" type="environment" file="m-scite.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-scite-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="scitefile" file="m-scite.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="scitebuffer" file="m-scite.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-scite-optional"/>
+ <cd:resolve name="keyword-buffer"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/tex/context/interface/mkiv/i-script.xml b/tex/context/interface/mkiv/i-script.xml
index f1aee232a..10ae6a79e 100644
--- a/tex/context/interface/mkiv/i-script.xml
+++ b/tex/context/interface/mkiv/i-script.xml
@@ -36,18 +36,14 @@
</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="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>
@@ -79,28 +75,31 @@
</cd:arguments>
</cd:command>
- <cd:command name="script" generated="yes" varianet="generated" file="scrp-ini.mkvi">
+ <cd:command name="script" generated="yes" varianet="instance" file="scrp-ini.mkvi">
<cd:sequence>
- <cd:variable value="script"/>
+ <cd:instance value="script"/>
</cd:sequence>
+ <cd:instances>
+ <cd:resolve name="instance-script"/>
+ </cd:instances>
</cd:command>
- <cd:command name="hangul" file="scrp-ini.mkvi"/>
+ <!--
- <cd:command name="hanzi" file="scrp-ini.mkvi"/>
+ <cd:command name="hangul" file="scrp-ini.mkvi"/>
- <cd:command name="nihongo" file="scrp-ini.mkvi"/>
+ <cd:command name="hanzi" file="scrp-ini.mkvi"/>
- <cd:command name="ethiopic" file="scrp-ini.mkvi"/>
+ <cd:command name="nihongo" file="scrp-ini.mkvi"/>
- <cd:command name="thai" file="scrp-ini.mkvi"/>
+ <cd:command name="ethiopic" file="scrp-ini.mkvi"/>
- <cd:command name="latin" 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
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-section.xml b/tex/context/interface/mkiv/i-section.xml
index 32b79323d..bcdc836af 100644
--- a/tex/context/interface/mkiv/i-section.xml
+++ b/tex/context/interface/mkiv/i-section.xml
@@ -125,9 +125,6 @@
<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">
@@ -200,6 +197,11 @@
<cd:constant type="middle"/>
<cd:constant type="bottom"/>
<cd:constant type="reverse"/>
+ <cd:constant type="margintext"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <!-- optional margin location -->
<cd:constant type="cd:name"/>
</cd:parameter>
<cd:parameter name="width">
@@ -214,6 +216,9 @@
<cd:parameter name="distance">
<cd:constant type="cd:dimension"/>
</cd:parameter>
+ <cd:parameter name="textdistance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
<cd:parameter name="commandbefore">
<cd:constant type="cd:command"/>
</cd:parameter>
@@ -239,240 +244,252 @@
</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="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:command name="section" generated="yes" variant="instance" file="strc-sec.mkiv">
<cd:sequence>
- <cd:variable value="section"/>
+ <cd:instance value="section"/>
</cd:sequence>
<cd:arguments>
<cd:resolve name="keyword-reference-list-optional"/>
<cd:resolve name="argument-text"/>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-section"/>
+ </cd:instances>
</cd:command>
- <cd:command name="section" generated="yes" variant="generated:2" file="strc-sec.mkiv">
+ <cd:command name="section" generated="yes" variant="instance:ownnumber" file="strc-sec.mkiv">
<cd:sequence>
- <cd:variable value="section"/>
+ <cd:instance 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:instances>
+ <cd:resolve name="instance-section"/>
+ </cd:instances>
</cd:command>
- <cd:command name="section" generated="yes" variant="generated:3" file="strc-sec.mkiv">
+ <cd:command name="section" generated="yes" variant="instance:assignment" file="strc-sec.mkiv">
<cd:sequence>
- <cd:variable value="section"/>
+ <cd:instance value="section"/>
</cd:sequence>
<cd:arguments>
<cd:resolve name="assignment-sectiondata-list"/>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-section"/>
+ </cd:instances>
</cd:command>
- <cd:command name="section" type="environment" generated="yes" variant="generated" file="strc-sec.mkiv">
+ <cd:command name="section" type="environment" generated="yes" variant="instance" file="strc-sec.mkiv">
<cd:sequence>
- <cd:variable value="section"/>
+ <cd:instance value="section"/>
</cd:sequence>
<cd:arguments>
<cd:resolve name="assignment-sectiondata-list-optional"/>
<cd:resolve name="assignment-userdata-list-optional"/>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-section"/>
+ </cd:instances>
</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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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>
@@ -638,6 +655,7 @@
<cd:parameter name="alternative">
<cd:constant type="horizontal"/>
<cd:constant type="vertical" default="yes"/>
+ <cd:constant type="somewhere"/>
</cd:parameter>
<cd:parameter name="renderingsetup">
<cd:constant type="cd:name"/>
@@ -676,4 +694,8 @@
<cd:command name="headnumberdistance" file="strc-ren.mkiv"/>
+ <cd:command name="headtextdistance" file="strc-ren.mkiv"/>
+
+ <cd:command name="headsetupspacing" file="strc-ren.mkiv"/>
+
</cd:interface>
diff --git a/tex/context/interface/mkiv/i-sectionblock.xml b/tex/context/interface/mkiv/i-sectionblock.xml
index fc6d87cff..d6fc97ee0 100644
--- a/tex/context/interface/mkiv/i-sectionblock.xml
+++ b/tex/context/interface/mkiv/i-sectionblock.xml
@@ -58,9 +58,9 @@
</cd:arguments>
</cd:command>
- <cd:command name="sectionblock" type="environment" generated="yes" variant="generated" file="strc-sbe.mkiv">
+ <cd:command name="sectionblock" type="environment" generated="yes" variant="instance" file="strc-sbe.mkiv">
<cd:sequence>
- <cd:variable value="sectionblock"/>
+ <cd:instance value="sectionblock"/>
</cd:sequence>
<cd:arguments>
<cd:assignments list="yes" optional="yes">
@@ -70,6 +70,9 @@
<cd:inherit name="setupsectionblock"/>
</cd:assignments>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-sectionblock"/>
+ </cd:instances>
</cd:command>
<cd:command name="sectionblockenvironment" type="environment" file="strc-sbe.mkiv">
@@ -78,48 +81,52 @@
</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="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="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="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="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: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/tex/context/interface/mkiv/i-setup.xml b/tex/context/interface/mkiv/i-setup.xml
new file mode 100644
index 000000000..4771230eb
--- /dev/null
+++ b/tex/context/interface/mkiv/i-setup.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="setupsetup" file="x-setups-basics.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <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:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="basicsetup" file="x-setups-basics.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="basicsetup" variant="argument" file="x-setups-basics.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="shortsetup" file="x-setups-basics.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="shortsetup" variant="argument" file="x-setups-basics.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setup" file="x-setups-basics.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setup" variant="argument" file="x-setups-basics.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showsetup" file="x-setups-basics.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showsetup" variant="argument" file="x-setups-basics.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="cmdinternal" file="x-setups-basics.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="cmdbasicsetup" file="x-setups-basics.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="cmdbasicsetup" variant="argument" file="x-setups-basics.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="cmdshortsetup" file="x-setups-basics.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="cmdshortsetup" variant="argument" file="x-setups-basics.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="cmdfullsetup" file="x-setups-basics.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="cmdfullsetup" variant="argument" file="x-setups-basics.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="cmdbasicsetupinstance" file="x-setups-basics.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="cmdshortsetupinstance" file="x-setups-basics.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="cmdfullsetupinstance" file="x-setups-basics.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showdefinition" file="x-setups-basics.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definition" file="x-setups-basics.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-text-list"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/tex/context/interface/mkiv/i-setups.xml b/tex/context/interface/mkiv/i-setups.xml
index fec773f2e..d6b7b4d5a 100644
--- a/tex/context/interface/mkiv/i-setups.xml
+++ b/tex/context/interface/mkiv/i-setups.xml
@@ -4,25 +4,25 @@
<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
- <cd:command name="setups" variant="1" file="core-env.mkiv">
+ <cd:command name="setups" 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:command name="setups" variant="direct" 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:command name="setup" 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:command name="setup" variant="direct" file="core-env.mkiv">
<cd:arguments>
<cd:resolve name="argument-name"/>
</cd:arguments>
@@ -146,7 +146,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="luasetups" type="environment" variant="1" file="core-env.mkiv">
+ <cd:command name="luasetups" type="environment" file="core-env.mkiv">
<cd:arguments>
<cd:keywords optional="yes">
<cd:constant type="grid"/>
@@ -155,13 +155,13 @@
</cd:arguments>
</cd:command>
- <cd:command name="luasetups" type="environment" variant="2" file="core-env.mkiv">
+ <cd:command name="luasetups" type="environment" variant="string" 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:command name="xmlsetups" type="environment" file="core-env.mkiv">
<cd:arguments>
<cd:keywords optional="yes">
<cd:constant type="grid"/>
@@ -170,13 +170,13 @@
</cd:arguments>
</cd:command>
- <cd:command name="xmlsetups" type="environment" variant="2" file="core-env.mkiv">
+ <cd:command name="xmlsetups" type="environment" variant="string" 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:command name="rawsetups" type="environment" file="core-env.mkiv">
<cd:arguments>
<cd:keywords optional="yes">
<cd:constant type="grid"/>
@@ -185,13 +185,13 @@
</cd:arguments>
</cd:command>
- <cd:command name="rawsetups" type="environment" variant="2" file="core-env.mkiv">
+ <cd:command name="rawsetups" type="environment" variant="string" 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:command name="localsetups" type="environment" file="core-env.mkiv">
<cd:arguments>
<cd:keywords optional="yes">
<cd:constant type="grid"/>
@@ -200,13 +200,13 @@
</cd:arguments>
</cd:command>
- <cd:command name="localsetups" type="environment" variant="2" file="core-env.mkiv">
+ <cd:command name="localsetups" type="environment" variant="string" 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:command name="setups" type="environment" file="core-env.mkiv">
<cd:arguments>
<cd:keywords optional="yes">
<cd:constant type="grid"/>
@@ -215,10 +215,10 @@
</cd:arguments>
</cd:command>
- <cd:command name="setups" type="environment" variant="2" file="core-env.mkiv">
+ <cd:command name="setups" type="environment" variant="string" file="core-env.mkiv">
<cd:arguments>
<cd:resolve name="string-name"/>
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-shift.xml b/tex/context/interface/mkiv/i-shift.xml
index d9b8bf7e4..792a8d84f 100644
--- a/tex/context/interface/mkiv/i-shift.xml
+++ b/tex/context/interface/mkiv/i-shift.xml
@@ -55,13 +55,16 @@
</cd:arguments>
</cd:command>
- <cd:command name="shift" generated="yes" variant="generated" file="node-rul.mkiv">
+ <cd:command name="shift" generated="yes" variant="instance" file="node-rul.mkiv">
<cd:sequence>
- <cd:variable value="shift"/>
+ <cd:instance value="shift"/>
</cd:sequence>
<cd:arguments>
<cd:content/>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-shift"/>
+ </cd:instances>
</cd:command>
<cd:command name="shift" type="environment" file="node-rul.mkiv">
@@ -70,16 +73,20 @@
</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: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
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-sidebar.xml b/tex/context/interface/mkiv/i-sidebar.xml
index 8c00ce1ff..25a7ed306 100644
--- a/tex/context/interface/mkiv/i-sidebar.xml
+++ b/tex/context/interface/mkiv/i-sidebar.xml
@@ -86,13 +86,13 @@
</cd:arguments>
</cd:command>
- <cd:command name="marginrule" type="environment" variant="1" file="anch-bar.mkiv">
+ <cd:command name="marginrule" type="environment" 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:command name="marginrule" type="environment" variant="assignment" file="anch-bar.mkiv">
<cd:arguments>
<cd:assignments list="yes" optional="yes">
<cd:inherit name="setupmarginrule"/>
@@ -100,4 +100,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-sort.xml b/tex/context/interface/mkiv/i-sort.xml
index 5ecc83f18..a72df624b 100644
--- a/tex/context/interface/mkiv/i-sort.xml
+++ b/tex/context/interface/mkiv/i-sort.xml
@@ -78,14 +78,17 @@
</cd:arguments>
</cd:command>
- <cd:command name="sorting" generated="yes" variant="generated" file="strc-syn.mkiv">
+ <cd:command name="sorting" generated="yes" variant="instance" file="strc-syn.mkiv">
<cd:sequence>
- <cd:variable value="sorting"/>
+ <cd:instance value="sorting"/>
</cd:sequence>
<cd:arguments>
<cd:resolve name="keyword-name-optional"/>
<cd:content/>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-sort"/>
+ </cd:instances>
</cd:command>
<cd:command name="definesort" file="strc-syn.mkiv">
@@ -100,28 +103,34 @@
</cd:arguments>
</cd:command>
- <cd:command name="placelistofsorts" generated="yes" variant="generated" file="strc-syn.mkiv">
+ <cd:command name="placelistofsorts" generated="yes" variant="instance" file="strc-syn.mkiv">
<cd:sequence>
<cd:string value="placelistof"/>
- <cd:variable value="sorts"/>
+ <cd:instance value="sorts"/>
</cd:sequence>
<cd:arguments>
<cd:assignments list="yes" optional="yes">
<cd:inherit name="setupsorting"/>
</cd:assignments>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-sortlist"/>
+ </cd:instances>
</cd:command>
- <cd:command name="completelistofsorts" generated="yes" variant="generated" file="strc-syn.mkiv">
+ <cd:command name="completelistofsorts" generated="yes" variant="instance" file="strc-syn.mkiv">
<cd:sequence>
<cd:string value="completelistof"/>
- <cd:variable value="sorts"/>
+ <cd:instance value="sorts"/>
</cd:sequence>
<cd:arguments>
<cd:assignments list="yes" optional="yes">
<cd:inherit name="setupsorting"/>
</cd:assignments>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-sortlist"/>
+ </cd:instances>
</cd:command>
<cd:command name="doifelsecurrentsortingused" file="strc-syn.mkiv">
@@ -162,27 +171,31 @@
</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: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/tex/context/interface/mkiv/i-spreadsheet.xml b/tex/context/interface/mkiv/i-spreadsheet.xml
new file mode 100644
index 000000000..9f6273891
--- /dev/null
+++ b/tex/context/interface/mkiv/i-spreadsheet.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="definespreadsheet" file="m-spreadsheet.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupspreadsheet"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupspreadsheet" file="m-spreadsheet.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="period">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="comma">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="split">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetspreadsheet" file="m-spreadsheet.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="spreadsheet" type="environment" file="m-spreadsheet.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showspreadsheet" file="m-spreadsheet.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="inspectspreadsheet" file="m-spreadsheet.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setspreadsheet" file="m-spreadsheet.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-number"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getspreadsheet" file="m-spreadsheet.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-number"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsespreadsheetcell" file="m-spreadsheet.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <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="doifspreadsheetcellelse" file="m-spreadsheet.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <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="TABLEsetspreadsheet" file="m-spreadsheet.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="TABLEgetspreadsheet" file="m-spreadsheet.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setspr" file="m-spreadsheet.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getspr" file="m-spreadsheet.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="spreadsheettable" type="environment" file="m-spreadsheet.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupTABLE"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="row" type="environment" file="m-spreadsheet.mkiv"/>
+
+ <cd:command name="cell" type="environment" file="m-spreadsheet.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="bTD"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/tex/context/interface/mkiv/i-startstop.xml b/tex/context/interface/mkiv/i-startstop.xml
index e23485fd6..2a6be1393 100644
--- a/tex/context/interface/mkiv/i-startstop.xml
+++ b/tex/context/interface/mkiv/i-startstop.xml
@@ -51,7 +51,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="startstop" type="environment" generated="yes" variant="generated" file="core-sys.mkiv">
+ <cd:command name="startstop" type="environment" generated="yes" variant="example" file="core-sys.mkiv">
<cd:sequence>
<cd:variable value="startstop"/>
</cd:sequence>
@@ -66,7 +66,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="startstop" generated="yes" variant="generated" file="core-sys.mkiv">
+ <cd:command name="startstop" generated="yes" variant="example" file="core-sys.mkiv">
<cd:sequence>
<cd:variable value="startstop"/>
</cd:sequence>
diff --git a/tex/context/interface/mkiv/i-steps.xml b/tex/context/interface/mkiv/i-steps.xml
new file mode 100644
index 000000000..47a3b45ca
--- /dev/null
+++ b/tex/context/interface/mkiv/i-steps.xml
@@ -0,0 +1,412 @@
+<?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="setupSTEPchart" file="m-steps.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="category">
+ <cd:constant type="cd:name"/>
+ </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="alternative">
+ <cd:constant type="horizontal" default="yes"/>
+ <cd:constant type="vertical"/>
+ <cd:constant type="three"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupSTEPcharts" file="m-steps.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupSTEPchart"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="setupSTEPcharts" file="m-steps.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="category">
+ <cd:constant type="cd:name"/>
+ </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="alternative">
+ <cd:constant type="horizontal" default="yes"/>
+ <cd:constant type="vertical"/>
+ <cd:constant type="three"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="setupSTEPcell" file="m-steps.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="offset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rulethickness">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="framecolor">
+ <cd:constant type="cd:color"/>
+ </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="dx">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="dy">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupSTEPcells" file="m-steps.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupSTEPcell"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="setupSTEPcells" file="m-steps.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="offset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rulethickness">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="framecolor">
+ <cd:constant type="cd:color"/>
+ </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="dx">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="dy">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="setupSTEPtext" file="m-steps.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes">
+ <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="rulethickness">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="framecolor">
+ <cd:constant type="cd:color"/>
+ </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="alternative">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupSTEPtexts" file="m-steps.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupSTEPtexts"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="setupSTEPtexts" file="m-steps.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes">
+ <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="rulethickness">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="framecolor">
+ <cd:constant type="cd:color"/>
+ </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="alternative">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="setupSTEPline" file="m-steps.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="rulethickness">
+ <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="offset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupSTEPlines" file="m-steps.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupSTEPline"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="setupSTEPlines" file="m-steps.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="rulethickness">
+ <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="offset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="STEPchart" type="environment" file="m-steps.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupSTEPchart"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="STEPtable" type="environment" file="m-steps.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupSTEPchart"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="STEPaligntable" type="environment" file="m-steps.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupSTEPchart"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="STEPchart" file="m-steps.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupSTEPchart"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="makeSTEPchart" file="m-steps.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="STEPcell" type="environment" file="m-steps.mkvi"/>
+
+ <cd:command name="cells" file="m-steps.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="cells" variant="aligntable" file="m-steps.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="texts" file="m-steps.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="cell" file="m-steps.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="text" file="m-steps.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="toptext" file="m-steps.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="bottext" file="m-steps.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="topcell" file="m-steps.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="botcell" file="m-steps.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/tex/context/interface/mkiv/i-stream.xml b/tex/context/interface/mkiv/i-stream.xml
index 40ddc89de..97be35774 100644
--- a/tex/context/interface/mkiv/i-stream.xml
+++ b/tex/context/interface/mkiv/i-stream.xml
@@ -71,4 +71,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-string.xml b/tex/context/interface/mkiv/i-string.xml
index b3efe552b..7a7eb1c98 100644
--- a/tex/context/interface/mkiv/i-string.xml
+++ b/tex/context/interface/mkiv/i-string.xml
@@ -66,4 +66,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-symbol.xml b/tex/context/interface/mkiv/i-symbol.xml
index 33d5b4707..7797a3bee 100644
--- a/tex/context/interface/mkiv/i-symbol.xml
+++ b/tex/context/interface/mkiv/i-symbol.xml
@@ -55,14 +55,14 @@
</cd:arguments>
</cd:command>
- <cd:command name="symbol" variant="1" file="symb-ini.mkiv">
+ <cd:command name="symbol" 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:command name="symbol" variant="direct" file="symb-ini.mkiv">
<cd:arguments>
<cd:resolve name="argument-name"/>
</cd:arguments>
@@ -142,4 +142,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-synonym.xml b/tex/context/interface/mkiv/i-synonym.xml
index c64c1c759..6c615b12a 100644
--- a/tex/context/interface/mkiv/i-synonym.xml
+++ b/tex/context/interface/mkiv/i-synonym.xml
@@ -80,15 +80,18 @@
</cd:arguments>
</cd:command>
- <cd:command name="synonym" generated="yes" variant="generated" file="strc-syn.mkiv">
+ <cd:command name="synonym" generated="yes" variant="instance" file="strc-syn.mkiv">
<cd:sequence>
- <cd:variable value="synonym"/>
+ <cd:instance value="synonym"/>
</cd:sequence>
<cd:arguments>
<cd:resolve name="keyword-name-optional"/>
<cd:resolve name="argument-text"/>
<cd:content/>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-synonym"/>
+ </cd:instances>
</cd:command>
<cd:command name="definesynonym" file="strc-syn.mkiv">
@@ -104,28 +107,34 @@
</cd:arguments>
</cd:command>
- <cd:command name="placelistofsynonyms" generated="yes" variant="generated" file="strc-syn.mkiv">
+ <cd:command name="placelistofsynonyms" generated="yes" variant="instance" file="strc-syn.mkiv">
<cd:sequence>
<cd:string value="placelistof"/>
- <cd:variable value="synonyms"/>
+ <cd:instance value="synonyms"/>
</cd:sequence>
<cd:arguments>
<cd:assignments list="yes" optional="yes">
<cd:inherit name="setupsynonyms"/>
</cd:assignments>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-synonymlist"/>
+ </cd:instances>
</cd:command>
- <cd:command name="completelistofsynonyms" generated="yes" variant="generated" file="strc-syn.mkiv">
+ <cd:command name="completelistofsynonyms" generated="yes" variant="instance" file="strc-syn.mkiv">
<cd:sequence>
<cd:string value="completelistof"/>
- <cd:variable value="synonyms"/>
+ <cd:instance value="synonyms"/>
</cd:sequence>
<cd:arguments>
<cd:assignments list="yes" optional="yes">
<cd:inherit name="setupsynonyms"/>
</cd:assignments>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-synonymlist"/>
+ </cd:instances>
</cd:command>
<cd:command name="registersynonym" file="strc-syn.mkiv">
@@ -179,34 +188,38 @@
</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: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="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
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-system.xml b/tex/context/interface/mkiv/i-system.xml
index e1404754e..aa12bd779 100644
--- a/tex/context/interface/mkiv/i-system.xml
+++ b/tex/context/interface/mkiv/i-system.xml
@@ -1157,13 +1157,13 @@
</cd:arguments>
</cd:command>
- <cd:command name="strippedcsname" variant="1" file="syst-aux.mkiv">
+ <cd:command name="strippedcsname" file="syst-aux.mkiv">
<cd:arguments>
<cd:csname/>
</cd:arguments>
</cd:command>
- <cd:command name="strippedcsname" variant="2" file="syst-aux.mkiv">
+ <cd:command name="strippedcsname" variant="string" file="syst-aux.mkiv">
<cd:arguments>
<cd:keywords delimiters="none">
<cd:constant type="cd:text"/>
@@ -1171,13 +1171,13 @@
</cd:arguments>
</cd:command>
- <cd:command name="complexorsimple" variant="1" file="syst-aux.mkiv">
+ <cd:command name="complexorsimple" file="syst-aux.mkiv">
<cd:arguments>
<cd:csname/>
</cd:arguments>
</cd:command>
- <cd:command name="complexorsimple" variant="2" file="syst-aux.mkiv">
+ <cd:command name="complexorsimple" variant="argument" file="syst-aux.mkiv">
<cd:arguments>
<cd:keywords delimiters="braces">
<cd:constant type="cd:text"/>
@@ -1186,13 +1186,13 @@
</cd:arguments>
</cd:command>
- <cd:command name="complexorsimpleempty" variant="1" file="syst-aux.mkiv">
+ <cd:command name="complexorsimpleempty" file="syst-aux.mkiv">
<cd:arguments>
<cd:csname/>
</cd:arguments>
</cd:command>
- <cd:command name="complexorsimpleempty" variant="2" file="syst-aux.mkiv">
+ <cd:command name="complexorsimpleempty" variant="argument" file="syst-aux.mkiv">
<cd:arguments>
<cd:keywords delimiters="braces">
<cd:constant type="cd:text"/>
@@ -1201,13 +1201,13 @@
</cd:arguments>
</cd:command>
- <cd:command name="definecomplexorsimple" variant="1" file="syst-aux.mkiv">
+ <cd:command name="definecomplexorsimple" file="syst-aux.mkiv">
<cd:arguments>
<cd:csname/>
</cd:arguments>
</cd:command>
- <cd:command name="definecomplexorsimple" variant="2" file="syst-aux.mkiv">
+ <cd:command name="definecomplexorsimple" variant="argument" file="syst-aux.mkiv">
<cd:arguments>
<cd:keywords delimiters="braces">
<cd:constant type="cd:text"/>
@@ -1216,13 +1216,13 @@
</cd:arguments>
</cd:command>
- <cd:command name="definecomplexorsimpleempty" variant="1" file="syst-aux.mkiv">
+ <cd:command name="definecomplexorsimpleempty" file="syst-aux.mkiv">
<cd:arguments>
<cd:csname/>
</cd:arguments>
</cd:command>
- <cd:command name="definecomplexorsimpleempty" variant="2" file="syst-aux.mkiv">
+ <cd:command name="definecomplexorsimpleempty" variant="argument" file="syst-aux.mkiv">
<cd:arguments>
<cd:keywords delimiters="braces">
<cd:constant type="cd:text"/>
@@ -1619,13 +1619,13 @@
</cd:arguments>
</cd:command>
- <cd:command name="increment" variant="1" file="syst-aux.mkiv">
+ <cd:command name="increment" file="syst-aux.mkiv">
<cd:arguments>
<cd:csname/>
</cd:arguments>
</cd:command>
- <cd:command name="increment" variant="2" file="syst-aux.mkiv">
+ <cd:command name="increment" variant="argument" file="syst-aux.mkiv">
<cd:arguments>
<cd:keywords delimiters="parentheses" list="yes">
<cd:constant type="cd:csname"/>
@@ -1634,28 +1634,13 @@
</cd:arguments>
</cd:command>
- <cd:command name="increment" variant="1" file="syst-aux.mkiv">
+ <cd:command name="decrement" 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:command name="decrement" variant="argument" file="syst-aux.mkiv">
<cd:arguments>
<cd:keywords delimiters="parentheses" list="yes">
<cd:constant type="cd:csname"/>
@@ -1682,13 +1667,13 @@
</cd:arguments>
</cd:command>
- <cd:command name="checkedstrippedcsname" variant="1" file="syst-aux.mkiv">
+ <cd:command name="checkedstrippedcsname" file="syst-aux.mkiv">
<cd:arguments>
<cd:csname/>
</cd:arguments>
</cd:command>
- <cd:command name="checkedstrippedcsname" variant="2" file="syst-aux.mkiv">
+ <cd:command name="checkedstrippedcsname" variant="string" file="syst-aux.mkiv">
<cd:arguments>
<cd:resolve name="string-text"/>
</cd:arguments>
@@ -2259,6 +2244,46 @@
</cd:arguments>
</cd:command>
+ <cd:command name="splitatcolon" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-text"/>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="splitatcomma" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-text"/>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="splitatasterisk" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-text"/>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="splitatcolon" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-text"/>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="splitatcolons" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-text"/>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
<cd:command name="removesubstring" file="syst-aux.mkiv">
<cd:arguments>
<cd:resolve name="string-text"/>
@@ -3531,4 +3556,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-systemlog.xml b/tex/context/interface/mkiv/i-systemlog.xml
index 3f2967912..02c4bece9 100644
--- a/tex/context/interface/mkiv/i-systemlog.xml
+++ b/tex/context/interface/mkiv/i-systemlog.xml
@@ -28,4 +28,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-table.xml b/tex/context/interface/mkiv/i-table.xml
index 649b198ae..950a9ff34 100644
--- a/tex/context/interface/mkiv/i-table.xml
+++ b/tex/context/interface/mkiv/i-table.xml
@@ -4,7 +4,7 @@
<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
- <cd:command name="table" type="environment" variant="1" file="tabl-tab.mkiv">
+ <cd:command name="table" type="environment" file="tabl-tab.mkiv">
<cd:arguments>
<cd:template/>
<cd:assignments list="yes" optional="yes">
@@ -13,7 +13,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="table" type="environment" variant="2" file="tabl-tab.mkiv">
+ <cd:command name="table" type="environment" variant="name" file="tabl-tab.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name"/>
<cd:assignments list="yes" optional="yes">
@@ -31,13 +31,13 @@
</cd:arguments>
</cd:command>
- <cd:command name="tables" type="environment" variant="1" file="tabl-tab.mkiv">
+ <cd:command name="tables" type="environment" 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:command name="tables" type="environment" variant="name" file="tabl-tab.mkiv">
<cd:arguments>
<cd:resolve name="keyword-name"/>
</cd:arguments>
@@ -117,6 +117,9 @@
<cd:constant type="strut"/>
<cd:constant type="cd:number"/>
</cd:parameter>
+ <cd:parameter name="openup">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -170,7 +173,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="Raise" variant="1" scope="table" file="tabl-tab.mkiv">
+ <cd:command name="Raise" variant="argument" scope="table" file="tabl-tab.mkiv">
<cd:arguments>
<cd:keywords delimiters="parentheses" optional="yes">
<cd:constant type="cd:dimension"/>
@@ -179,14 +182,14 @@
</cd:arguments>
</cd:command>
- <cd:command name="Raise" variant="2" scope="table" file="tabl-tab.mkiv">
+ <cd:command name="Raise" variant="string" 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:command name="Lower" variant="argument" scope="table" file="tabl-tab.mkiv">
<cd:arguments>
<cd:keywords delimiters="parentheses" optional="yes">
<cd:constant type="cd:dimension"/>
@@ -195,14 +198,14 @@
</cd:arguments>
</cd:command>
- <cd:command name="Lower" variant="2" scope="table" file="tabl-tab.mkiv">
+ <cd:command name="Lower" variant="string" 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:command name="BackSpace" variant="argument" scope="table" file="tabl-tab.mkiv">
<cd:arguments>
<cd:keywords delimiters="parentheses" optional="yes">
<cd:constant type="cd:dimension"/>
@@ -210,13 +213,13 @@
</cd:arguments>
</cd:command>
- <cd:command name="BackSpace" variant="2" scope="table" file="tabl-tab.mkiv">
+ <cd:command name="BackSpace" variant="string" 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:command name="Vspace" variant="argument" scope="table" file="tabl-tab.mkiv">
<cd:arguments>
<cd:keywords delimiters="parentheses" optional="yes">
<cd:constant type="cd:dimension"/>
@@ -224,7 +227,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="Vspace" variant="2" scope="table" file="tabl-tab.mkiv">
+ <cd:command name="Vspace" variant="string" scope="table" file="tabl-tab.mkiv">
<cd:arguments>
<cd:resolve name="string-number-optional"/>
</cd:arguments>
@@ -404,4 +407,4 @@
-->
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-tabulation.xml b/tex/context/interface/mkiv/i-tabulation.xml
index 1e6dfc1fc..be3a602ac 100644
--- a/tex/context/interface/mkiv/i-tabulation.xml
+++ b/tex/context/interface/mkiv/i-tabulation.xml
@@ -91,11 +91,15 @@
<cd:parameter name="title">
<cd:constant type="cd:text"/>
</cd:parameter>
+ <cd:parameter name="keeptogether">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
- <cd:command name="tabulation" type="environment" generated="yes" variant="generated" file="tabl-tbl.mkiv">
+ <cd:command name="tabulation" type="environment" generated="yes" variant="example" file="tabl-tbl.mkiv">
<cd:sequence>
<cd:variable value="tabulation"/>
</cd:sequence>
@@ -134,9 +138,9 @@
</cd:arguments>
</cd:command>
- <cd:command name="tabulate" type="environment" generated="yes" variant="generated" file="tabl-tbl.mkiv">
+ <cd:command name="tabulate" type="environment" generated="yes" variant="instance" file="tabl-tbl.mkiv">
<cd:sequence>
- <cd:variable value="tabulate"/>
+ <cd:instance value="tabulate"/>
</cd:sequence>
<cd:arguments>
<cd:resolve name="keyword-name-optional"/>
@@ -144,6 +148,9 @@
<cd:inherit name="setuptabulate"/>
</cd:assignments>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-tabulate"/>
+ </cd:instances>
</cd:command>
<cd:command name="tabulatehead" type="environment" file="tabl-tbl.mkiv">
@@ -166,25 +173,25 @@
<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="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>
diff --git a/tex/context/interface/mkiv/i-tagging.xml b/tex/context/interface/mkiv/i-tagging.xml
index 14f413ce3..063a0c436 100644
--- a/tex/context/interface/mkiv/i-tagging.xml
+++ b/tex/context/interface/mkiv/i-tagging.xml
@@ -25,6 +25,13 @@
</cd:arguments>
</cd:command>
+ <cd:command name="element" type="environment" file="strc-tag.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="assignment-userdata-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
<cd:command name="doifelseinelement" file="strc-tag.mkiv">
<cd:arguments>
<cd:resolve name="argument-name"/>
diff --git a/tex/context/interface/mkiv/i-textbackground.xml b/tex/context/interface/mkiv/i-textbackground.xml
index 3b17e0efd..bc16ffa8d 100644
--- a/tex/context/interface/mkiv/i-textbackground.xml
+++ b/tex/context/interface/mkiv/i-textbackground.xml
@@ -122,7 +122,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="textbackground" type="environment" generated="yes" variant="generated" file="anch-bck.mkiv">
+ <cd:command name="textbackground" type="environment" generated="yes" variant="example" file="anch-bck.mkiv">
<cd:sequence>
<cd:variable value="textbackground"/>
</cd:sequence>
@@ -133,7 +133,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="textbackground" generated="yes" variant="generated" file="anch-bck.mkiv">
+ <cd:command name="textbackground" generated="yes" variant="example" file="anch-bck.mkiv">
<cd:sequence>
<cd:variable value="textbackground"/>
</cd:sequence>
@@ -144,4 +144,4 @@
<cd:command name="textbackgroundmanual" type="environment" file="anch-bck.mkiv"/>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-tolerance.xml b/tex/context/interface/mkiv/i-tolerance.xml
index 26b554132..b33fef05d 100644
--- a/tex/context/interface/mkiv/i-tolerance.xml
+++ b/tex/context/interface/mkiv/i-tolerance.xml
@@ -19,4 +19,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-tooltip.xml b/tex/context/interface/mkiv/i-tooltip.xml
index 775d0abcf..f46ffb091 100644
--- a/tex/context/interface/mkiv/i-tooltip.xml
+++ b/tex/context/interface/mkiv/i-tooltip.xml
@@ -28,9 +28,9 @@
</cd:arguments>
</cd:command>
- <cd:command name="tooltip" generated="yes" variant="generated:1" file="scrn-fld.mkvi">
+ <cd:command name="tooltip" generated="yes" variant="instance" file="scrn-fld.mkvi">
<cd:sequence>
- <cd:variable value="tooltip"/>
+ <cd:instance value="tooltip"/>
</cd:sequence>
<cd:arguments>
<cd:assignments list="yes" optional="yes">
@@ -39,11 +39,14 @@
<cd:resolve name="argument-text"/>
<cd:resolve name="argument-text"/>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-tooltip"/>
+ </cd:instances>
</cd:command>
- <cd:command name="tooltip" generated="yes" variant="generated:2" file="scrn-fld.mkvi">
+ <cd:command name="tooltip" generated="yes" variant="instance:argument" file="scrn-fld.mkvi">
<cd:sequence>
- <cd:variable value="tooltip"/>
+ <cd:instance value="tooltip"/>
</cd:sequence>
<cd:arguments>
<cd:keywords optional="yes">
@@ -54,28 +57,35 @@
<cd:resolve name="argument-text"/>
<cd:resolve name="argument-text"/>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-tooltip"/>
+ </cd:instances>
</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:command name="tooltip" 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="argument" 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/tex/context/interface/mkiv/i-tracker.xml b/tex/context/interface/mkiv/i-tracker.xml
index e2b48ade2..4dbc31886 100644
--- a/tex/context/interface/mkiv/i-tracker.xml
+++ b/tex/context/interface/mkiv/i-tracker.xml
@@ -72,4 +72,4 @@
<cd:command name="showjustification" file="trac-jus.mkiv"/>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-translate.xml b/tex/context/interface/mkiv/i-translate.xml
new file mode 100644
index 000000000..ba3510f0b
--- /dev/null
+++ b/tex/context/interface/mkiv/i-translate.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="translateinput" file="m-translate.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-text"/>
+ <cd:resolve name="keyword-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetinputtranslation" file="m-translate.mkiv"/>
+
+ <cd:command name="enableinputtranslation" file="m-translate.mkiv"/>
+
+ <cd:command name="disableinputtranslation" file="m-translate.mkiv"/>
+
+ <cd:command name="readtranslatedfile" file="m-translate.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/tex/context/interface/mkiv/i-twopassdata.xml b/tex/context/interface/mkiv/i-twopassdata.xml
index f30b8bb23..508294f08 100644
--- a/tex/context/interface/mkiv/i-twopassdata.xml
+++ b/tex/context/interface/mkiv/i-twopassdata.xml
@@ -121,4 +121,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-typography.xml b/tex/context/interface/mkiv/i-typography.xml
index ffb80c211..6c2aa7389 100644
--- a/tex/context/interface/mkiv/i-typography.xml
+++ b/tex/context/interface/mkiv/i-typography.xml
@@ -170,4 +170,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-unit.xml b/tex/context/interface/mkiv/i-unit.xml
index 3502b544a..3380585dc 100644
--- a/tex/context/interface/mkiv/i-unit.xml
+++ b/tex/context/interface/mkiv/i-unit.xml
@@ -4,13 +4,13 @@
<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
- <cd:command name="digits" variant="1" file="phys-dim.mkiv">
+ <cd:command name="digits" 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:command name="digits" variant="string" file="phys-dim.mkiv">
<cd:arguments>
<cd:resolve name="string-number"/>
</cd:arguments>
@@ -75,20 +75,27 @@
</cd:arguments>
</cd:command>
- <cd:command name="unit" generated="yes" variant="generated" file="phys-dim.mkiv">
+ <cd:command name="unit" generated="yes" variant="instance" file="phys-dim.mkiv">
<cd:sequence>
- <cd:variable value="unit"/>
+ <cd:instance value="unit"/>
</cd:sequence>
<cd:arguments>
<cd:content/>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-unit"/>
+ </cd:instances>
</cd:command>
- <cd:command name="unit" file="phys-dim.mkiv">
- <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>
@@ -118,4 +125,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-variables.xml b/tex/context/interface/mkiv/i-variables.xml
index 28aaa6df4..63b34329c 100644
--- a/tex/context/interface/mkiv/i-variables.xml
+++ b/tex/context/interface/mkiv/i-variables.xml
@@ -72,6 +72,23 @@
</cd:arguments>
</cd:command>
+ <cd:command name="checkvariables" 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"/>
@@ -353,4 +370,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-verbatim.xml b/tex/context/interface/mkiv/i-verbatim.xml
index 7026d2b10..b23f57efe 100644
--- a/tex/context/interface/mkiv/i-verbatim.xml
+++ b/tex/context/interface/mkiv/i-verbatim.xml
@@ -75,9 +75,9 @@
</cd:parameter>
</cd:assignments>
</cd:arguments>
- </cd:command>
+ </cd:command>
- <cd:command name="type" variant="1" file="buff-ver.mkiv">
+ <cd:command name="type" file="buff-ver.mkiv">
<cd:arguments>
<cd:assignments list="yes" optional="yes">
<cd:inherit name="setuptype"/>
@@ -86,7 +86,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="type" variant="2" file="buff-ver.mkiv">
+ <cd:command name="type" variant="angles" file="buff-ver.mkiv">
<cd:arguments>
<cd:assignments list="yes" optional="yes">
<cd:inherit name="setuptype"/>
@@ -95,7 +95,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="typ" variant="1" file="buff-ver.mkiv">
+ <cd:command name="typ" file="buff-ver.mkiv">
<cd:arguments>
<cd:assignments list="yes" optional="yes">
<cd:inherit name="setuptype"/>
@@ -104,7 +104,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="typ" variant="2" file="buff-ver.mkiv">
+ <cd:command name="typ" variant="angles" file="buff-ver.mkiv">
<cd:arguments>
<cd:assignments list="yes" optional="yes">
<cd:inherit name="setuptype"/>
@@ -113,7 +113,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="type" generated="yes" variant="generated:1" file="buff-ver.mkiv">
+ <cd:command name="type" generated="yes" variant="example" file="buff-ver.mkiv">
<cd:sequence>
<cd:variable value="type"/>
</cd:sequence>
@@ -125,7 +125,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="type" generated="yes" variant="generated:2" file="buff-ver.mkiv">
+ <cd:command name="type" generated="yes" variant="example:angles" file="buff-ver.mkiv">
<cd:sequence>
<cd:variable value="type"/>
</cd:sequence>
@@ -149,7 +149,7 @@
<cd:command name="setuptyping" file="buff-ver.mkiv">
<cd:arguments>
- <cd:resolve name="keyword-name-optional-list"/>
+ <cd:resolve name="keyword-name-list-optional"/>
<cd:assignments list="yes">
<cd:parameter name="oddmargin">
<cd:constant type="cd:dimension"/>
@@ -251,42 +251,32 @@
</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:command name="typing" type="environment" generated="yes" variant="instance" file="buff-ver.mkiv">
<cd:sequence>
- <cd:variable value="typing"/>
+ <cd:instance value="typing"/>
</cd:sequence>
<cd:arguments>
<cd:assignments list="yes" optional="yes">
<cd:inherit name="setuptyping"/>
</cd:assignments>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-typing"/>
+ </cd:instances>
</cd:command>
- <cd:command name="typing" type="environment" generated="yes" variant="generated:2" file="buff-ver.mkiv">
+ <cd:command name="typing" type="environment" generated="yes" variant="instance:argument" file="buff-ver.mkiv">
<cd:sequence>
- <cd:variable value="typing"/>
+ <cd:instance value="typing"/>
</cd:sequence>
<cd:arguments>
<cd:keywords list="yes" optional="yes">
<cd:constant type="continue"/>
</cd:keywords>
</cd:arguments>
+ <cd:instances>
+ <cd:resolve name="instance-typing"/>
+ </cd:instances>
</cd:command>
<cd:command name="tex" file="buff-ver.mkiv">
@@ -363,87 +353,107 @@
</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
+ <!--
+
+ <cd:command name="typing" type="environment" 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="argument" 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="LUA" type="environment" 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="argument" 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" 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="argument" 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" 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="argument" 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" 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="argument" 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" 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="argument" file="buff-ver.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="continue"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-version.xml b/tex/context/interface/mkiv/i-version.xml
index d01659815..9f7864e8a 100644
--- a/tex/context/interface/mkiv/i-version.xml
+++ b/tex/context/interface/mkiv/i-version.xml
@@ -75,4 +75,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-viewerlayer.xml b/tex/context/interface/mkiv/i-viewerlayer.xml
index 3de29b1fd..8e321971e 100644
--- a/tex/context/interface/mkiv/i-viewerlayer.xml
+++ b/tex/context/interface/mkiv/i-viewerlayer.xml
@@ -50,7 +50,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="viewerlayer" type="environment" generated="yes" variant="generated" file="attr-lay.mkiv">
+ <cd:command name="viewerlayer" type="environment" generated="yes" variant="example" file="attr-lay.mkiv">
<cd:sequence>
<cd:variable value="viewerlayer"/>
</cd:sequence>
@@ -65,4 +65,4 @@
<cd:command name="showlayoutcomponents" file="attr-lay.mkiv"/>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-visual.xml b/tex/context/interface/mkiv/i-visual.xml
new file mode 100644
index 000000000..64ae3f79d
--- /dev/null
+++ b/tex/context/interface/mkiv/i-visual.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="fakerule" file="m-visual.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dimension"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dorandomrecurse" file="m-visual.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fakelines" file="m-visual.mkiv">
+ <cd:arguments>
+ <cd:keywords name="keywords" delimiters="braces">
+ <cd:constant type="cd:number"/>
+ <cd:constant type="cd:nothing"/>
+ </cd:keywords>
+ <cd:keywords name="keywords" delimiters="braces">
+ <cd:constant type="cd:number"/>
+ <cd:constant type="cd:nothing"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fakewords" file="m-visual.mkiv">
+ <cd:arguments>
+ <cd:keywords name="keywords" delimiters="braces">
+ <cd:constant type="cd:number"/>
+ <cd:constant type="cd:nothing"/>
+ </cd:keywords>
+ <cd:keywords name="keywords" delimiters="braces">
+ <cd:constant type="cd:number"/>
+ <cd:constant type="cd:nothing"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fakenwords" file="m-visual.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:keywords name="keywords" delimiters="braces">
+ <cd:constant type="cd:number"/>
+ <cd:constant type="cd:nothing"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showfakewords" file="m-visual.mkiv"/>
+
+ <cd:command name="fakeword" file="m-visual.mkiv"/>
+
+ <cd:command name="fakeparindent" file="m-visual.mkiv"/>
+
+ <cd:command name="fakeddroppedcaps" file="m-visual.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fakefigure" file="m-visual.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="placefloat"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-dimension"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fakeimage" file="m-visual.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-dimension"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fakeformula" file="m-visual.mkiv"/>
+
+ <cd:command name="fakespacingformula" file="m-visual.mkiv"/>
+
+ <cd:command name="smashedgrid" file="m-visual.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="basegrid"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="bodyfontgrid" file="m-visual.mkiv"/>
+
+ <cd:command name="emexgrid" file="m-visual.mkiv"/>
+
+ <cd:command name="simplethesis" file="m-visual.mkiv"/>
+
+ <cd:command name="showbaselines" file="m-visual.mkiv"/>
+
+ <cd:command name="showpagebuilder" file="m-visual.mkiv"/>
+
+ <cd:command name="tagbox" file="m-visual.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:keywords optional="yes">
+ <cd:constant type="l"/>
+ <cd:constant type="r"/>
+ <cd:constant type="t"/>
+ <cd:constant type="b"/>
+ <cd:constant type="lt"/>
+ <cd:constant type="lb"/>
+ <cd:constant type="rt"/>
+ <cd:constant type="rb"/>
+ <cd:constant type="tl"/>
+ <cd:constant type="bl"/>
+ <cd:constant type="tr"/>
+ <cd:constant type="br"/>
+ </cd:keywords>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="coloredhbox" file="m-visual.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="coloredvbox" file="m-visual.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="coloredvtop" file="m-visual.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="coloredstrut" file="m-visual.mkiv"/>
+
+</cd:interface> \ No newline at end of file
diff --git a/tex/context/interface/mkiv/i-visualizer.xml b/tex/context/interface/mkiv/i-visualizer.xml
index fd7198f9d..3d30b7f4d 100644
--- a/tex/context/interface/mkiv/i-visualizer.xml
+++ b/tex/context/interface/mkiv/i-visualizer.xml
@@ -153,4 +153,4 @@
<cd:command name="resetvisualizers" file="trc-vis.mkiv"/>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-vspace.xml b/tex/context/interface/mkiv/i-vspace.xml
index b6d7381ee..4618fc00a 100644
--- a/tex/context/interface/mkiv/i-vspace.xml
+++ b/tex/context/interface/mkiv/i-vspace.xml
@@ -28,6 +28,7 @@
<cd:constant type="samepage"/>
<cd:constant type="max"/>
<cd:constant type="force"/>
+ <cd:constant type="enable"/>
<cd:constant type="disable"/>
<cd:constant type="nowhite"/>
<cd:constant type="back"/>
diff --git a/tex/context/interface/mkiv/i-whitespace.xml b/tex/context/interface/mkiv/i-whitespace.xml
index 8f9fa0823..06e1997c5 100644
--- a/tex/context/interface/mkiv/i-whitespace.xml
+++ b/tex/context/interface/mkiv/i-whitespace.xml
@@ -59,4 +59,4 @@
</cd:arguments>
</cd:command>
-</cd:interface> \ No newline at end of file
+</cd:interface>
diff --git a/tex/context/interface/mkiv/i-xtable.xml b/tex/context/interface/mkiv/i-xtable.xml
index 31b4a6842..7500ff47f 100644
--- a/tex/context/interface/mkiv/i-xtable.xml
+++ b/tex/context/interface/mkiv/i-xtable.xml
@@ -82,7 +82,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="xtable" type="environment" variant="1" file="tabl-xtb.mkvi">
+ <cd:command name="xtable" type="environment" file="tabl-xtb.mkvi">
<cd:arguments>
<cd:assignments list="yes" optional="yes">
<cd:inherit name="setupxtable"/>
@@ -90,13 +90,13 @@
</cd:arguments>
</cd:command>
- <cd:command name="xtable" type="environment" variant="2" file="tabl-xtb.mkvi">
+ <cd:command name="xtable" type="environment" variant="name" 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:command name="embeddedxtable" type="environment" file="tabl-xtb.mkvi">
<cd:arguments>
<cd:assignments list="yes" optional="yes">
<cd:inherit name="setupxtable"/>
@@ -104,13 +104,13 @@
</cd:arguments>
</cd:command>
- <cd:command name="embeddedxtable" type="environment" variant="2" file="tabl-xtb.mkvi">
+ <cd:command name="embeddedxtable" type="environment" variant="name" 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:command name="xtable" type="environment" generated="yes" variant="example" file="tabl-xtb.mkvi">
<cd:sequence>
<cd:variable value="xtable"/>
</cd:sequence>
@@ -157,7 +157,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="xtablehead" type="environment" variant="1" file="tabl-xtb.mkvi">
+ <cd:command name="xtablehead" type="environment" file="tabl-xtb.mkvi">
<cd:arguments>
<cd:assignments list="yes" optional="yes">
<cd:inherit name="setupxtable"/>
@@ -165,13 +165,13 @@
</cd:arguments>
</cd:command>
- <cd:command name="xtablehead" type="environment" variant="2" file="tabl-xtb.mkvi">
+ <cd:command name="xtablehead" type="environment" variant="name" 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:command name="xtablefoot" type="environment" file="tabl-xtb.mkvi">
<cd:arguments>
<cd:assignments list="yes" optional="yes">
<cd:inherit name="setupxtable"/>
@@ -179,13 +179,13 @@
</cd:arguments>
</cd:command>
- <cd:command name="xtablefoot" type="environment" variant="2" file="tabl-xtb.mkvi">
+ <cd:command name="xtablefoot" type="environment" variant="name" 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:command name="xtablenext" type="environment" file="tabl-xtb.mkvi">
<cd:arguments>
<cd:assignments list="yes" optional="yes">
<cd:inherit name="setupxtable"/>
@@ -193,13 +193,13 @@
</cd:arguments>
</cd:command>
- <cd:command name="xtablenext" type="environment" variant="2" file="tabl-xtb.mkvi">
+ <cd:command name="xtablenext" type="environment" variant="name" 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:command name="xtablebody" type="environment" file="tabl-xtb.mkvi">
<cd:arguments>
<cd:assignments list="yes" optional="yes">
<cd:inherit name="setupxtable"/>
@@ -207,7 +207,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="xtablebody" type="environment" variant="2" file="tabl-xtb.mkvi">
+ <cd:command name="xtablebody" type="environment" variant="name" file="tabl-xtb.mkvi">
<cd:arguments>
<cd:resolve name="keyword-name-optional"/>
</cd:arguments>
diff --git a/tex/context/modules/common/s-abr-01.tex b/tex/context/modules/common/s-abr-01.tex
index 00a1a5c1e..fd6c66419 100644
--- a/tex/context/modules/common/s-abr-01.tex
+++ b/tex/context/modules/common/s-abr-01.tex
@@ -127,7 +127,8 @@
\logo [GUST] {Gust}
\logo [GCC] {gcc}
\logo [GWTEX] {gw\TeX}
-\logo [HSB] {hsb}
+\logo [HSB] {hsb} % ?
+\logo [HSV] {hsv}
\logo [HTML] {html}
\logo [HTTP] {http}
\logo [HZ] {hz}
@@ -178,6 +179,7 @@
\logo [METATYPE] {MetaType1}
\logo [MODULA] {Modula}
\logo [MOV] {mov}
+\logo [MPEG] {mpeg}
\logo [MPS] {mps}
\logo [MPTOPDF] {mptopdf}
\logo [MPLIB] {mplib}
diff --git a/tex/context/modules/common/s-pre-00.tex b/tex/context/modules/common/s-pre-00.tex
index 7f217d5bb..2acbc13b7 100644
--- a/tex/context/modules/common/s-pre-00.tex
+++ b/tex/context/modules/common/s-pre-00.tex
@@ -11,6 +11,8 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
+% This might go away!
+
%D This module provides some non core functionality that can
%D be used in the presentations styles. This module contains
%D experimental macros.
diff --git a/tex/context/modules/common/s-pre-12.tex b/tex/context/modules/common/s-pre-12.tex
index 23418fbba..64949e30c 100644
--- a/tex/context/modules/common/s-pre-12.tex
+++ b/tex/context/modules/common/s-pre-12.tex
@@ -63,7 +63,7 @@
\dorecurse{\CurrentMaxItem}
{\startMPdrawing
initialize_box(\MPpos{item-\realfolio-\recurselevel}) ;
- linewidth := .25cm ;
+ linewidth := .25cm ;
p := tensecircle (wxy,hxy,linewidth) shifted cxy ;
fill p withcolor .9white ;
pickup pencircle scaled linewidth ;
@@ -73,8 +73,8 @@
\else
draw p withcolor \MPcolor{DoneColor} ;
\fi
- dxab := xpart a-xpart b ;
- dyab := ypart a-ypart b ;
+ dxab := xpart a-xpart b ;
+ dyab := ypart a-ypart b ;
sign := if dyab>0 : - fi 1 ;
drawarrow
a --
@@ -82,7 +82,7 @@
if abs(dyab)>4linewidth :
a shifted (-dxab/2,+sign*2linewidth) --
b shifted (+dxab/2,-sign*2linewidth) ..
- fi
+ fi
{left} b shifted (-2linewidth+dxab/2,0) --
b
withcolor \MPcolor{ArrowColor} ;
@@ -107,7 +107,7 @@
\setupinteraction[color=GotoColor,contrastcolor=GotoColor]
\defineoverlay [shape] [\SomeShape]
-\defineoverlay [next] [\overlaybutton{forward}]
+\defineoverlay [next] [\overlaybutton{forward}]
\setupbackgrounds
[page]
@@ -183,44 +183,44 @@
\vfil#1\vfil\vfil
\stopstandardmakeup}
-\endinput
-
-% \starttext
-%
-% \StartIdea
-% \StartTopic
-% What a topic
-% \StopTopic
-% \StartItem
-% \input reich \relax
-% \StopItem
-% \StartItem
-% \input reich \relax
-% \StopItem
-% \StartItem
-% \input reich \relax
-% \StopItem
-% \StopIdea
-%
-% \StartIdea
-% \StartTopic
-% One More Nice Idea
-% \StopTopic
-% \StartItem
-% \input reich \relax
-% \StopItem
-% \StartItem
-% \input reich \relax
-% \StopItem
-% \StopIdea
-%
-% \StartIdea
-% \StartTopic
-% The Last Idea
-% \StopTopic
-% \StartItem
-% \input tufte \relax
-% \StopItem
-% \StopIdea
-%
-% \stoptext
+\doifnotmode{demo}{\endinput}
+
+\starttext
+
+\StartIdea
+ \StartTopic
+ What a topic
+ \StopTopic
+ \StartItem
+ \input reich \relax
+ \StopItem
+ \StartItem
+ \input reich \relax
+ \StopItem
+ \StartItem
+ \input reich \relax
+ \StopItem
+\StopIdea
+
+\StartIdea
+ \StartTopic
+ One More Nice Idea
+ \StopTopic
+ \StartItem
+ \input reich \relax
+ \StopItem
+ \StartItem
+ \input reich \relax
+ \StopItem
+\StopIdea
+
+\StartIdea
+ \StartTopic
+ The Last Idea
+ \StopTopic
+ \StartItem
+ \input tufte \relax
+ \StopItem
+\StopIdea
+
+\stoptext
diff --git a/tex/context/modules/common/s-pre-16.tex b/tex/context/modules/common/s-pre-16.tex
index 715936890..a7e127828 100644
--- a/tex/context/modules/common/s-pre-16.tex
+++ b/tex/context/modules/common/s-pre-16.tex
@@ -1,6 +1,6 @@
%D \module
%D [ file=s-pre-16,
-%D version=1999.09.01,
+%D version=1999.09.01,
%D title=\CONTEXT\ Style File,
%D subtitle=Presentation Environment 16,
%D author=Hans Hagen,
@@ -13,7 +13,7 @@
%D The first version of this style was made late summer 1999,
%D but its first usage was during a course I gave in BRNO.
-%D It's a rather simple style with a dominating background.
+%D It's a rather simple style with a dominating background.
\setuppapersize
[S6][S6]
@@ -42,11 +42,11 @@
[state=start]
\definecolor[gray] [s=.4]
-\definecolor[white][s=.8]
+\definecolor[white][s=.8]
-\definecolor[red] [r=.8] \definecolor[cyan] [g=.8,b=.8]
-\definecolor[green][g=.8] \definecolor[magenta][r=.8,b=.8]
-\definecolor[blue] [b=.8] \definecolor[yellow] [r=.8,g=.8]
+\definecolor[red] [r=.8] \definecolor[cyan] [g=.8,b=.8]
+\definecolor[green][g=.8] \definecolor[magenta][r=.8,b=.8]
+\definecolor[blue] [b=.8] \definecolor[yellow] [r=.8,g=.8]
\definecolor[PageColor][gray]
\definecolor[TextColor][yellow]
@@ -66,49 +66,49 @@
symbol=FuzzyDot]
\startuseMPgraphic{FuzzyCircle}
- path p ; numeric w, h, l ;
- w := OverlayWidth ; h := OverlayHeight ;
- def dd = (1 randomized (1/5)) enddef ;
+ path p ; numeric w, h, l ;
+ w := OverlayWidth ; h := OverlayHeight ;
+ def dd = (1 randomized (1/5)) enddef ;
pickup pencircle xscaled 10pt yscaled 2pt rotated 30;
- for i:=1 upto 50 :
- p := (-dd,-dd)..(dd,-dd)..(dd,dd)..(-dd,dd)..cycle ;
- p := p rotatedaround (center p, uniformdeviate 360) ;
- p := p xscaled (w/2) yscaled (h/2) ;
- l := length(p)/2 ;
- p := p cutbefore point (uniformdeviate l) of p ;
- p := p cutafter point (l+uniformdeviate l) of p ;
+ for i:=1 upto 50 :
+ p := (-dd,-dd)..(dd,-dd)..(dd,dd)..(-dd,dd)..cycle ;
+ p := p rotatedaround (center p, uniformdeviate 360) ;
+ p := p xscaled (w/2) yscaled (h/2) ;
+ l := length(p)/2 ;
+ p := p cutbefore point (uniformdeviate l) of p ;
+ p := p cutafter point (l+uniformdeviate l) of p ;
draw p withcolor \MPcolor{LineColor} randomized (.4,1) ;
- endfor ;
+ endfor ;
picture s ; s := currentpicture xysized (w-15,h-15) ;
currentpicture := nullpicture ;
- fill boundingbox s enlarged 60pt withcolor \MPcolor{PageColor} ;
- addto currentpicture also s ;
+ fill boundingbox s enlarged 60pt withcolor \MPcolor{PageColor} ;
+ addto currentpicture also s ;
\stopuseMPgraphic
\startuseMPgraphic{FuzzyDot}
- path p ; numeric w ;
- w := BodyFontSize/2 ;
- def dd = (w randomized (w/2)) enddef ;
+ path p ; numeric w ;
+ w := BodyFontSize/2 ;
+ def dd = (w randomized (w/2)) enddef ;
pickup pencircle xscaled (w/2) yscaled (w/3) rotated 30 ;
- for i=0 step 45 until 135 :
+ for i=0 step 45 until 135 :
p := (-dd,0)--(dd,0) ;
p := p rotatedaround (origin,i-w+uniformdeviate w) ;
draw p withcolor \MPcolor{LineColor} randomized (.3,.8) ;
- endfor ;
+ endfor ;
\stopuseMPgraphic
\defineoverlay [FuzzyCircle] [\useMPgraphic{FuzzyCircle}]
\defineoverlay [GoOn] [{\setupinteraction[click=no]\overlaybutton{forward}}]
\defineoverlay [Again] [\overlaybutton{firstpage}]
-\definesymbol
- [FuzzyDot]
+\definesymbol
+ [FuzzyDot]
[\lower\dp\strutbox\hbox{\useMPgraphic{FuzzyDot}}]
\def\Item%
{\par\noindent\symbol[FuzzyDot]\hskip.5em\nobreak}
-\setupitemize
+\setupitemize
[all]
[packed]
[symbol=FuzzyDot]
@@ -134,15 +134,15 @@
[alternative=g,
interaction=all]
-%D Since we want a colored text, and since color directive
-%D can spoil the spacing, we use a foregroundcolor.
+%D Since we want a colored text, and since color directive
+%D can spoil the spacing, we use a foregroundcolor.
\setupbackgrounds
[text]
[foregroundcolor=TextColor]
-%D Unfortunately this does not work when on the page colors
-%D are set, so we play safe and say:
+%D Unfortunately this does not work when on the page colors
+%D are set, so we play safe and say:
\setupmakeup
[standard]
@@ -165,13 +165,13 @@
\stopcolumns
\page}
-%D Some fakes.
+%D Some fakes.
\def\Subject {\Topic}
\def\Subjects {}
-%D A bonus (copied from \type {s-pre-02} but with a different
-%D vertical alignment.
+%D A bonus (copied from \type {s-pre-02} but with a different
+%D vertical alignment.
\def\StartTitlePage%
{\startstandardmakeup
@@ -188,16 +188,16 @@
{\StartTitlePage#1\StopTitlePage}
\doifnotmode{demo}{\endinput}
-
-\starttext
+
+\starttext
\Topics{...}
-\StartIdea
+\StartIdea
\Topic{...}
- ...
- \NextIdea
+ ...
+ \NextIdea
...
\StopIdea
-\stoptext
+\stoptext
diff --git a/tex/context/modules/common/s-pre-23.tex b/tex/context/modules/common/s-pre-23.tex
index f9983a89e..c5ae82eed 100644
--- a/tex/context/modules/common/s-pre-23.tex
+++ b/tex/context/modules/common/s-pre-23.tex
@@ -14,7 +14,7 @@
%D This style looks a lot like number 22. This time we don't
%D cycle but build up the page. One can click on the text go
%D to the page wanted. Clicking on the titl ebrings you to the
-%D previous page.
+%D previous page.
\startmode [demo]
\disablemode[demo] \usemodule[pre-22] \enablemode[demo]
@@ -24,13 +24,13 @@
\usemodule[pre-22]
\stopnotmode
-%D We use a simple two||color scheme.
+%D We use a simple two||color scheme.
\definecolor[DotColor][r=.5,g=.6,b=.7]
\definecolor[TopColor][r=.7,g=.6,b=.5]
\definecolor[BotColor][TopColor]
-%D We will not delay page building.
+%D We will not delay page building.
\let\BuildPage\relax
@@ -51,14 +51,14 @@
\setlayer[temp]{\foundbox{Subtext}\CurrentSummary}
\stopstandardmakeup}
-%D The title page is not added to the main layer (or
-%D actually, it is, but we erase the layer before it's
-%D used).
+%D The title page is not added to the main layer (or
+%D actually, it is, but we erase the layer before it's
+%D used).
\long\def\MakeTitlePage#1#2%
{\startstandardmakeup
\definereference[thispage][]
- \switchtobodyfont[32pt]
+ \switchtobodyfont[32pt]
\StartSummary{#1}{}#2\StopSummary
\resetlayer[main]
\setlayer[temp]{\foundbox{Summary}\CurrentSummary}
diff --git a/tex/context/modules/common/s-pre-50.tex b/tex/context/modules/common/s-pre-50.tex
index ff3e48631..8b55cf67a 100644
--- a/tex/context/modules/common/s-pre-50.tex
+++ b/tex/context/modules/common/s-pre-50.tex
@@ -90,9 +90,9 @@
\StartSteps
\title[whow]{How Much?} \FlushStep
- \item More \FlushStep
- \item And More \FlushStep
- \item And Even More \FlushStep
+ \startitem More \stopitem \FlushStep
+ \startitem And More \stopitem \FlushStep
+ \startitem And Even More \stopitem \FlushStep
\StartStep And So On \StopStep
diff --git a/tex/context/modules/mkii/m-quest.mkii b/tex/context/modules/mkii/m-quest.mkii
new file mode 100644
index 000000000..596abaa0a
--- /dev/null
+++ b/tex/context/modules/mkii/m-quest.mkii
@@ -0,0 +1,232 @@
+%D \module
+%D [ file=m-invull,
+%D version=1995.01.10,
+%D title=\CONTEXT\ Extra Modules,
+%D subtitle=Exercise,
+%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.
+
+%I Invuloefeningen kunnen worden vormgegeven met het
+%I de commando's:
+%I
+%I \definieerinvulwoord[trefwoord]{woord,woord}
+%I \invulwoord[trefwoord]
+%I \invulwoord{woord,woord,...}
+%I
+%I Daarbij kan het een en ander worden ingesteld met
+%I
+%I \stelinvullenin[status=,nummer=,links=,rechts=,letter=]
+%P
+%I Er zijn drie manieren om woorden in te vullen. De meest
+%I eenvoudige is die waarbij de in te vullen woorden in de
+%I tekst staan.
+%I
+%I bla bla \invulwoord{een,alfa} bla bla bla bla bla bla
+%I bla bla bla bla bla bla bla bla \invulwoord{twee,beta}.
+%I
+%I De gezette tekst hangt af van de instellingen:
+%I
+%I [status=leeg] ________
+%I [status=vol,nummer=1] 'een' respectievelijk 'twee'
+%I [status=vol,nummer=2] 'alfa' respectievelijk 'beta'
+%I
+%I Het nummer heeft dus betrekking op het volgnummer in de
+%I opgegeven reeks.
+%P
+%I Bij de tweede manier worden eerste de alternatieven
+%I gedefinieerd:
+%I
+%I \definieerinvulwoord{een,alfa}
+%I \definieerinvulwoord{twee,beta}
+%I
+%I die vervolgens worden opgeroepen:
+%I
+%I bla \invulwoord[+] bla bla bla bla bla bla bla bla bla
+%I bla bla bla bla bla bla bla bla bla bla \invulwoord[+].
+%I
+%I De mogelijke instellingen komen overeen met die van de
+%I eerste manier.
+%P
+%I De derde manier is een variant op de tweede. Bij grote
+%I teksten kan men het overzicht kwijtraken. Het is daarom
+%I mogelijk 'logische' namen toe te kennen aan woorden.
+%I
+%I \definieerinvulwoord[a]{een,alfa}
+%I \definieerinvulwoord[b]{twee,beta}
+%I
+%I die vervolgens worden opgeroepen:
+%I
+%I bla \invulwoord[a] bla bla bla bla bla bla bla bla bla
+%I bla bla bla bla bla bla bla bla bla bla \invulwoord[b].
+%I
+%I Dit maakt het bovendien mogelijk woorden meerdere malen
+%I (in een willekeurige volgorde op te roepen:
+%I
+%I bla \invulwoord[a] bla \invulwoord[b] bla bla bla bla
+%I bla bla bla bla \invulwoord[b] bla bla \invulwoord[a].
+%P
+%I Bij [status=leeg] wordt een streep gezet die in breedte
+%I overeenkomt met het woord dat er eigenlijk hoort te
+%I staan. De ingevulde tekst komt visueel daardoor overeen
+%I met de in te vullen tekst, wat vergelijken vereenvoudigd.
+%I
+%I Met [status=reset] worden enkele tellers weer op 0 gezet.
+%I Dit kan nodig zijn als meerdere invuloefeningen in een
+%I tekst worden gezet.
+%I
+%I Als \versie[voorlopig] is ingesteld, worden bij invullers
+%I zonder logische namen tussen haakjes de volgnummers
+%I getoond.
+
+%S \startsetup
+%S \command
+%S [stelinvullenin]
+%S \type
+%S [\c!vars!]
+%S \variable
+%S [\c!letter]
+%S [\v!normaal,\v!vet,\v!schuin,\v!vetschuin,\v!type,\v!kap,
+%S \v!klein...,\c!command!]
+%S [\v!vet]
+%S \variable
+%S [\c!links]
+%S [\c!text!]
+%S []
+%S \variable
+%S [\c!rechts]
+%S [\c!text!]
+%S []
+%S \variable
+%S [\c!status]
+%S [\v!leeg,\v!vol,\v!reset]
+%S [\v!vol]
+%S \variable
+%S [\c!nummer]
+%S [\c!number!]
+%S [1]
+%S \variable
+%S [\c!lijn]
+%S [\v!aan,\v!uit]
+%S [\v!aan]
+%S \stopsetup
+
+%S \startsetup
+%S \command
+%S [invulwoord]
+%S \type
+%S [\c!ref!,\c!opt!\c!val!\c!opt!\c!args!]
+%S \value
+%S [\c!text!]
+%S \stopsetup
+
+%S \startsetup
+%S \command
+%S [definieerinvulwoord]
+%S \type
+%S [\c!ref!,\c!opt!\c!val!\c!args!]
+%S \value
+%S [\c!text!]
+%S \stopsetup
+
+% Mogelijke uitbreidingen
+%
+% - [breedte=<maat>,passend,ruim]
+% - invullijst met nummers
+% - weergeven lijst tijdens definitie blokkeren
+% - door elkaar definieren
+
+\unprotect
+
+\definesystemvariable {iv}
+
+\definereferenceconstant {fillin} {:iv:}
+
+\newcount\invulteller \newcount\invulput \newcount\invulget
+
+\def\stelinvullenin
+ {\dosingleargument\dostelinvullenin}
+
+\def\dostelinvullenin[#1]%
+ {\getparameters[\??iv][#1]%
+ \doif\@@ivstate\v!reset
+ {\global\invulput\zerocount
+ \global\invulget\zerocount
+ \let\@@ivstate\empty}}
+
+\def\definieerinvulwoord
+ {\dosingleempty\dodefinieerinvulwoord}
+
+\def\dodefinieerinvulwoord[#1]#2%
+ {\iffirstargument
+ \setgvalue{\r!fillin#1}{\simpleinvulwoord{#2}}%
+ \else
+ \global\advance\invulput \plusone
+ \setgvalue{\r!fillin\the\invulput}{\simpleinvulwoord{#2}}%
+ \fi
+ \doifconcepttracing
+ {\ifnum\invulput>\zerocount
+ \setbox\scratchbox\hbox{~\ttx(\the\invulput)}%
+ \wd\scratchbox\zeropoint
+ \box\scratchbox
+ \par
+ \fi}}
+
+\def\dosimpleinvulwoord#1%
+ {\ifnum\@@ivnumber>\zerocount \advance\invulteller \plusone \fi
+ \ifnum\invulteller=\@@ivnumber\relax
+ \bgroup
+ \doconvertfont\@@ivstyle
+ {\@@ivleft
+ \doifelse\@@ivstate\v!empty
+ {\doifelse\@@ivrule\v!on\leeginvulwoord\geeninvulwoord}
+ {\doifelse\@@ivrule\v!on\underbar \firstofoneargument}%
+ {#1}%
+ \@@ivright}%
+ \egroup
+ \fi}%
+
+\def\simpleinvulwoord#1%
+ {\ifnum\@@ivnumber>0
+ \invulteller\zerocount
+ \processcommalist[#1]\dosimpleinvulwoord
+ \else
+ \dosimpleinvulwoord{#1}%
+ \fi}
+
+\def\complexinvulwoord[#1]%
+ {\bgroup
+ \doifsomething{#1}
+ {\global\advance\invulget \plusone
+ \doconvertfont\@@ivstyle
+ {\@@ivleft\getvalue{\r!fillin\the\invulget}\@@ivright}}
+ {\doconvertfont\@@ivstyle
+ {\@@ivleft\getvalue{\r!fillin #1}\@@ivright}}%
+ \egroup}
+
+\definecomplexorsimple\invulwoord
+
+\def\leeginvulwoord#1%
+ {{\let\redounderbar\dodounderbar
+ \def\dodounderbar##1{\redounderbar{\hphantom{##1}}}%
+ \underbar{#1}}}
+
+\def\geeninvulwoord#1%
+ {{\def\dodounderbar##1{\hphantom{##1}}%
+ \underbar{#1}}}
+
+% when nummer > 0, then commalist processing; beware of $(1,2)$, use { } there
+
+\stelinvullenin
+ [\c!number=0,
+ \c!style=\v!bold,
+ \c!rule=\v!on,
+ \c!left=,
+ \c!right=,
+ \c!state=]
+
+\protect \endinput
diff --git a/tex/context/modules/mkii/m-streams.mkii b/tex/context/modules/mkii/m-streams.mkii
new file mode 100644
index 000000000..a8589a89c
--- /dev/null
+++ b/tex/context/modules/mkii/m-streams.mkii
@@ -0,0 +1,446 @@
+%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/tex/context/modules/mkii/s-mag-01.mkii b/tex/context/modules/mkii/s-mag-01.mkii
new file mode 100644
index 000000000..e2d30f4e5
--- /dev/null
+++ b/tex/context/modules/mkii/s-mag-01.mkii
@@ -0,0 +1,438 @@
+%D \module
+%D [ file=s-mag-01,
+%D version=2002.12.14,
+%D title=\CONTEXT\ Style File,
+%D subtitle=\CONTEXT\ Magazine Base Style,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+% This style is used for producing explanationary documents.
+% Don't misuse it for other purposes, since it may confuse
+% users. Don't change the title either, since it provides a
+% way to categorize documents. Numbers are disabled in
+% instances produced outside PRAGMA ADE.
+%
+% The layout setup is such that one has several text areas
+% available: headers and footers, margins and edges as well
+% as the main text area. The surrounding (gray) makes the
+% main page stand out and is suitable for viewing in spread
+% mode.
+%
+% Since this style is under constant construction, messing
+% around with settings will produce unwanted side effects.
+% So, if some feature or settings is needed, let me know.
+
+% todo: mp frames
+
+\setvariables[magazine][number=0]
+\setvariables[magazine][author=]
+\setvariables[magazine][title={Zero Issue}]
+\setvariables[magazine][date=\currentdate]
+
+% These are reserved for PRAGMA-ADE, don't use them yourself!
+
+% \setvariables[magazine][main=Tricky]
+% \setvariables[magazine][main=Update]
+% \setvariables[magazine][main=HOWTO]
+
+% \setvariables[magazine][main=This Way] % preludes to a/the manual
+% \setvariables[magazine][main=A Better Way] % dirty versus clean
+% \setvariables[magazine][main=No Way] % how users should not do it
+% \setvariables[magazine][main=Your Way] % how users do it
+% \setvariables[magazine][main=My Way] % how users do it
+% \setvariables[magazine][main=Our Way] % how we do things at pragma
+% \setvariables[magazine][main=Their Way] % how to do latex things in context
+
+\setvariables[magazine][main=My Way]
+
+\startmode[atpragma]
+ \setvariables[magazine][main=This Way]
+\stopmode
+
+\definepapersize
+ [magazine]
+ [width=\dimexpr\paperwidth-.1\paperwidth\relax,
+ height=\dimexpr\paperheight-.1\paperheight\relax]
+
+\setuppapersize
+ [magazine]
+ [A4]
+
+\setupinteractionscreen
+ [option=doublesided]
+
+\definecolor[OuterColor][s=.3]
+\definecolor[InnerColor][s=.8]
+\definecolor[MainColor] [s=.2]
+\definecolor[TitleColor][s=.7]
+
+\definecolor[MyRed] [r=.6]
+\definecolor[MyGreen][g=.6]
+\definecolor[MyBlue] [b=.6]
+
+\startuseMPgraphic{paper}
+ sh := define_circular_shade(a,a,0,bbheight(OverlayBox),
+ \MPcolor{InnerColor},\MPcolor{OuterColor}) ;
+ fill OverlayBox withshade sh ;
+\stopuseMPgraphic
+
+\startreusableMPgraphic{middlepaper}
+ pair a ; a := center OverlayBox ;
+ \includeMPgraphic{paper}
+\stopreusableMPgraphic
+
+\startreusableMPgraphic{rightpaper}
+ pair a ; a := .5[urcorner OverlayBox,lrcorner OverlayBox] ;
+ \includeMPgraphic{paper}
+\stopreusableMPgraphic
+
+\startreusableMPgraphic{leftpaper}
+ pair a ; a := .5[ulcorner OverlayBox,llcorner OverlayBox] ;
+ \includeMPgraphic{paper}
+\stopreusableMPgraphic
+
+\startreusableMPgraphic{page}
+ fill OverlayBox withcolor white ;
+\stopreusableMPgraphic
+
+\startusableMPgraphic{text}
+ StartPage ;
+ for i = Header,Text,Footer :
+ for j = LeftEdge, LeftMargin, Text, RightMargin, RightEdge :
+ draw Field[i][j] withpen pencircle scaled .5pt ;
+ endfor ;
+ endfor ;
+ StopPage ;
+ setbounds currentpicture to Field[Text][Text] ;
+\stopusableMPgraphic
+
+\startsetups[paper]
+
+ \doifmodeelse{*makeup}
+ {\reuseMPgraphic{middlepaper}}
+ {\doifoddpageelse
+ {\reuseMPgraphic{rightpaper}}
+ {\reuseMPgraphic{leftpaper}}}
+
+\stopsetups
+
+\defineoverlay[paper] [\setups{paper}]
+\defineoverlay[page] [\reuseMPgraphic{page}]
+\defineoverlay[text] [\doifmode{frame}{\useMPgraphic{text}}]
+
+\setupbackgrounds [paper] [background=paper]
+\setupbackgrounds [page] [background={page,title}]
+\setupbackgrounds [text] [background=text]
+
+\definelayer
+ [title]
+ [state=repeat,
+ hoffset=-1cm,
+ voffset=1cm,
+ width=\paperwidth,
+ height=\paperheight]
+
+\setupoutput
+ [pdftex]
+
+\setuplayout
+ [width=middle,
+ topspace=1.5cm,
+ height=middle,
+ header=1.5cm,
+ footer=1cm,
+ %grid=yes,
+ headerdistance=.25cm,
+ footerdistance=.5cm,
+ backspace=3cm,
+ margin=1.5cm,
+ margindistance=.25cm,
+ edge=.75cm,
+ edgedistance=.25cm,
+ bottomdistance=1.5cm,
+ bottom=.1\printpaperheight]
+
+\definelayout
+ [makeup]
+ [topspace=1cm,
+ backspace=1cm,
+ header=0pt,
+ footer=0pt,
+ bottom=0pt]
+
+\setuppagenumbering
+ [alternative=doublesided]
+
+\setupcolors
+ [state=start]
+
+\usetypescript
+ [palatino][\defaultencoding]
+
+\setupbodyfont
+ [palatino,10pt]
+
+\setuptolerance
+ [verytolerant,stretch]
+
+\appendtoks\setups[papershift]\to\beforeeverypage
+
+\startsetups[papershift]
+
+ \setuppapersize[top=\vskip.5cm,bottom=\vss]
+
+ \doifmodeelse{*makeup}
+ {\setuppapersize[left=\hfill,right=\hfill]}
+ {\doifoddpageelse
+ {\setuppapersize[right=\hfill]}
+ {\setuppapersize[left=\hfill]}}
+
+\stopsetups
+
+\setupbottomtexts
+ [\setups{rightbanner}] []
+ [] [\setups{leftbanner}]
+
+\startsetups [leftbanner]
+
+ \definedfont[Regular at \the\bottomheight]
+ \setbox\scratchbox\hbox{\TitleColor\getvariable{magazine}{main}}
+ \ht\scratchbox1ex
+ \dp\scratchbox\zeropoint
+ \MainColor
+ \definedfont[Regular sa 2]
+ \doifsomething{\getvariable{magazine}{number}}
+ {\doifnot{\getvariable{magazine}{number}}{0}
+ {\#\getvariable{magazine}{number}}}
+ \quad
+ \currentdate
+ \quad
+ \scale[height=.25\bottomheight]{\box\scratchbox}
+ \quad
+ \hbox to 1.5em{\hss\pagenumber\hss}
+ \quad
+ \hskip-\backspace
+
+\stopsetups
+
+\startsetups [rightbanner]
+
+ \definedfont[Regular at \the\bottomheight]
+ \setbox\scratchbox\hbox{\TitleColor\getvariable{magazine}{main}}
+ \ht\scratchbox1ex
+ \dp\scratchbox\zeropoint
+ \MainColor
+ \hskip-\backspace
+ \definedfont[Regular sa 2]
+ \quad
+ \hbox to 1.5em{\hss\pagenumber\hss}
+ \quad
+ \scale[height=.25\bottomheight]{\box\scratchbox}
+ \quad
+ \currentdate
+ \quad
+ \doifmode{atpragma}{\#\getvariable{magazine}{number}}
+
+\stopsetups
+
+\startsetups[titlepage]
+
+ \disablemode[frame]
+
+ \setuplayout[makeup]
+
+ \startstandardmakeup[doublesided=no]
+
+ \dontcomplain
+
+ \definelayer
+ [makeup]
+ [width=\textwidth,
+ height=\textheight]
+
+ \setlayerframed
+ [makeup]
+ [corner={left,top},location={right,bottom}]
+ [frame=off,
+ foregroundcolor=MainColor]
+ {\scale
+ [width=\makeupwidth]
+ {\definedfont[Regular sa 10]%
+ \getvariable{magazine}{main}}}
+
+ \setlayerframed
+ [makeup]
+ [corner={right,top},location={left},y=.4\textheight]
+ [frame=off,
+ foregroundcolor=MainColor,
+ width=\textwidth,
+ align=left]
+ {\definedfont[Regular sa 2.5]\setupinterlinespace
+ \startmode[atpragma]
+ \strut \ConTeXt\ magazine \#\getvariable{magazine}{number}\endgraf
+ \stopmode
+ \strut \getvariable{magazine}{date} \endgraf
+ \blank
+ \strut \getvariable{magazine}{title}\endgraf
+ \doifsomething{\getvariable{magazine}{author}}
+ {\strut \getvariable{magazine}{author}\endgraf}
+ \doifsomething{\getvariable{magazine}{affiliation}}
+ {\strut \getvariable{magazine}{affiliation}\endgraf}}
+
+ \setlayerframed
+ [makeup]
+ [corner={right,bottom},location={left,top}]
+ [frame=off,
+ align=normal,
+ width=.8\textwidth,
+ foregroundcolor=MainColor]
+ {\getbuffer[abstract]}
+
+ \flushlayer[makeup]
+
+ \stopstandardmakeup
+
+ \setuplayout[reset]
+
+\stopsetups
+
+\startsetups[listing]
+
+ \page \disablemode[frame]
+
+ \setuptexttexts [][] \setuptexttexts []
+ \setupheadertexts[][] \setupheadertexts[source code of this document]
+ \setupfootertexts[][] \setupfootertexts[]
+
+ \start \dontcomplain
+
+ \typefile[TEX]{\inputfilename}
+
+ \stop
+
+\stopsetups
+
+\startsetups[lastpage]
+
+ \page \disablemode[frame] \page[even]
+
+ \doifoddpageelse
+ {}
+ {\setuplayout[makeup]
+ \startstandardmakeup[doublesided=no,page=]
+ \stopstandardmakeup
+ \setuplayout[reset]}
+
+\stopsetups
+
+\startsetups[title]
+
+ \disablemode[frame]
+
+ \setlayerframed
+ [title]
+ [corner={left,top},location={left,bottom},
+ rotation=90]
+ [frame=off,
+ foregroundcolor=MainColor]
+ {\definedfont[RegularBold sa 2]\strut\getvariable{magazine}{title}}
+
+ \setlayerframed
+ [title]
+ [corner={right,top},
+ rotation=270]
+ [frame=off,
+ foregroundcolor=MainColor]
+ {\definedfont[RegularBold sa 2]\strut\getvariable{magazine}{title}}
+
+\stopsetups
+
+\startbuffer[abstract]
+ % no abstract
+\stopbuffer
+
+\setuphead
+ [chapter]
+ [page=yes,
+ after={\blank[2*big]},
+ color=MainColor,
+ style=\bfc]
+
+\setuphead
+ [section]
+ [before={\blank[2*big]},
+ after=\blank,
+ color=MainColor,
+ style=\bfb]
+
+\setuphead
+ [subsection]
+ [before=\blank,
+ after=,
+ color=MainColor,
+ style=\bf]
+
+\setupwhitespace
+ [big]
+
+\definetyping[xtyping] [style=\ttx]
+\definetyping[xxtyping][style=\ttxx]
+
+\definetypeface
+ [narrowtt] [tt]
+ [mono] [modern-cond] [default] [encoding=\defaultencoding]
+
+\definetyping[ntyping] \setuptyping[ntyping][style=\narrowtt]
+\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]
+ 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/tex/context/modules/mkii/s-pre-01.mkii b/tex/context/modules/mkii/s-pre-01.mkii
new file mode 100644
index 000000000..89c5642f9
--- /dev/null
+++ b/tex/context/modules/mkii/s-pre-01.mkii
@@ -0,0 +1,404 @@
+%D \module
+%D [ file=s-pre-01,
+%D version=1997.07.22,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment 1,
+%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 environment can be used to typeset interactive
+%D presentations. This module was first used at the 1997 \TUG\
+%D meeting.
+
+\usemodule[pre-general]
+
+%D \macros
+%D {language}
+%D
+%D Because this module is defined in english, we default to the
+%D english hyphenation patterns and labels too.
+
+\language
+ [en]
+
+%D \macros
+%D {setupbodyfont,setuplayout}
+%D
+%D For screen reading, a Lucida Bright font looks nice. We use
+%D a 14.4 point bodyfont for the main text, but switch back to
+%D 12 points for ornaments.
+
+\startmode[asintended] \setupbodyfont[lbr] \stopmode
+
+\setupbodyfont[14.4pt]
+
+\setuplayout
+ [style=smallbodyfont]
+
+%D \macros
+%D {setupcolors,definecolor}
+%D
+%D Screen presentations without color just look dull, so we
+%D enable color support. We define ourselves a yellowish
+%D backgroundcolor and a not too dark blue interactioncolor.
+
+\setupcolors
+ [state=start]
+
+\definecolor [BackgroundColor] [r=1, g=1, b=.7]
+\definecolor [InteractionColor] [r=.1, g=.5, b=.8]
+\definecolor [ContrastColor] [r=.9, g=.5, b=.2]
+
+%D \macros
+%D {setuppapersize,setuplayout,setupinteractionscreen}
+%D
+%D
+%D We use a nice large screen, and dedicate the right edge and
+%D bottom part to navigational tools. We automatically set
+%D the width and height of the page and start up full screen.
+
+\setuppapersize
+ [S6][S6]
+
+\setuplayout
+ [topspace=12pt,
+ header=0pt,
+ footer=0pt,
+ height=402pt, % 450 - 12 - 15 - 12 - 12 + 3
+ bottomdistance=15pt,
+ bottom=12pt,
+ backspace=12pt,
+ margin=0pt,
+ width=fit,
+ edgedistance=12pt,
+ rightedge=96pt]
+
+\setupinteractionscreen
+ [option=max]
+
+%D \macros
+%D {setupbackgrounds}
+%D
+%D We set the pagecolor to yellow except the part of the screen
+%D that is used to display the running text. By seting the
+%D offset to 3pt the text will not touch the yellow parts. We
+%D do not set the depth.
+
+\setupbackgrounds
+ [page]
+ [background=color,
+ backgroundcolor=BackgroundColor,
+ offset=3pt]
+
+\setupbackgrounds
+ [text][text]
+ [background=color,
+ backgroundcolor=white]
+
+%D I considered the next setup too, but finaly decided to
+%D comment it out.
+%D
+%D \starttyping
+%D \setupbackgrounds
+%D [bottom][text]
+%D [frame=on,
+%D framecolor=white]
+%D \stoptyping
+
+%D \macros
+%D {setupinteraction}
+%D
+%D We did not enable interactive text support yet, so let's do
+%D that now. We force page reference to circumvent problems
+%D with named destinations in buggy viewers.
+
+\setupinteraction
+ [page=yes,
+ color=InteractionColor,
+ contrastcolor=ContrastColor,
+ menu=on,
+ state=start]
+
+%D \macros
+%D {setupinteractionmenu,startinteractionmenu}
+%D
+%D At the bottom of the screen we show two navigational bars.
+%D At the left we show the subpage bar, at the right we use a
+%D non default backward|/|forward bar.
+
+\setupinteractionmenu
+ [bottom]
+ [leftoffset=-3pt,
+ rightoffset=-3pt]
+
+\startinteractionmenu[bottom]
+ \txt \InteractionBar \\
+ \txt \InteractionButtons \\
+\stopinteractionmenu
+
+%D \macros
+%D {interactionbar}
+%D
+%D The left bar gets a white border (on the yellow background).
+%D Because we don't want to typeset an empty frame when no
+%D subpage bar is shown, we check for the number of subpages.
+
+\def\InteractionBar%
+ {\ifnum\nofsubpages>1
+ \framed
+ [framecolor=white,rulethickness=1pt,
+ height=\bottomheight,strut=no]
+ {\interactionbar[alternative=f,width=.5\makeupwidth,height=1ex]}
+ \fi}
+
+%D \macros
+%D {setupinteractionbar, interactionbuttons}
+%D
+%D The right hand buttons enable us to jump backward and forward,
+%D as well as to the previous and next jump. We also enable to
+%D close the presentation.
+
+\setupinteractionbar
+ [framecolor=white,rulethickness=1pt,
+ height=\bottomheight,strut=no]
+
+\def\InteractionButtons%
+ {\interactionbuttons
+ [width=15em]
+ [PreviousJump,NextJump,
+ firstpage,
+ firstsubpage,previouspage,nextpage,lastsubpage,
+ lastpage,
+ CloseDocument]}
+
+%D \macros
+%D {StartTitlePage, TitlePage}
+%D
+%D The titlepage is rather simple and can be typeset in two
+%D ways:
+%D
+%D \starttyping
+%D \StartTitlePage
+%D text \\ text \\ text
+%D \StopTitlepage
+%D \stoptyping
+%D
+%D or more straightforward:
+%D
+%D \starttyping
+%D \TitlePage{text\\text\\text}
+%D \stoptyping
+%D
+%D The first alternative can be used for more complicated
+%D title pages.
+
+\def\StartTitlePage%
+ {\startstandardmakeup
+ \bfd\setupinterlinespace
+ \setupalign[middle]
+ \vfil
+ \let\\=\vfil}
+
+\def\StopTitlePage%
+ {\vfil\vfil\vfil
+ \stopstandardmakeup}
+
+\def\TitlePage#1%
+ {\StartTitlePage#1\StopTitlePage}
+
+%D \macros
+%D {TitlePage, Topics, Topic, Subject}
+%D
+%D A presentation after loading this module looks like:
+%D
+%D \starttyping
+%D \TitlePage {About Whatever\\Topics}
+%D
+%D \Topics {Todays Talk}
+%D
+%D \Topic {Some topic}
+%D
+%D \Subject {Alfa}
+%D
+%D .....
+%D
+%D \Subject {Beta}
+%D
+%D .....
+%D \stoptyping
+
+%D \macros
+%D {definehead}
+%D
+%D The commands \type{\Topic} and \type{\Subject} are defined
+%D as copies of head. We use \type{\Nopic} for internal
+%D purposes.
+
+\definehead [Topic] [chapter]
+\definehead [Subject] [section]
+
+\definehead [Nopic] [title]
+
+%D \macros
+%D {setuphead}
+%D
+%D Because chapters and sections do not make sense in
+%D presentations, we use our own command for typesetting the
+%D titles. Sectionnumbers are of course hidden from viewing.
+%D Each topic is followed by a list of subjects that belong
+%D to the topic.
+
+\setuphead
+ [Topic, Nopic, Subject]
+ [command=\HeadLine,
+ page=yes,
+ style=\tfb,
+ after=\blank,
+ sectionnumber=no]
+
+\setuphead
+ [Topic]
+ [after=\PlaceSubjectList]
+
+\setuphead
+ [Subject]
+ [continue=no]
+
+%D \macros
+%D {framed, midalined}
+%D
+%D The command used to typeset the head lines is rather simple.
+%D We just center the framed title. The frame macro optimizes
+%D the alignment and at the same time enables us to typeset a
+%D nice colored rule.
+
+\def\HeadLine#1#2%
+ {\midaligned
+ {\framed
+ [framecolor=BackgroundColor,rulethickness=1pt,
+ width=.8\hsize,align=middle,strut=no]
+ {#2}}}
+
+%D \macros
+%D {setuplist}
+%D
+%D The subject list is automatically placed. We center each
+%D subject line by using one of the default alternatives (g). We
+%D could have said:
+%D
+%D \starttyping
+%D \setuplist
+%D [Subject]
+%D [alternative=none,
+%D command=\SubjectListLine,
+%D interaction=all]
+%D
+%D \def\SubjectListLine#1#2#3%
+%D {\midaligned{#2}}
+%D \stoptyping
+%D
+%D But why should we complicate things when we can use
+%D alternative~\type{g}. The test is only needed if one
+%D does not automatically goes a new page with each subject.
+
+\def\PlaceSubjectList%
+ {\blank
+ \determinelistcharacteristics[Subject]
+ % \ifnum\utilitylistlength>0 \placelist[Subject] \fi}
+ \doifmode{*list}{\placelist[Subject]}}
+
+\setuplist
+ [Subject, Topic]
+ [alternative=g,
+ interaction=all,
+ before=,
+ after=]
+
+% %D \macros
+% %D {setuptexttexts}
+% %D
+% %D The topics will be listed in the right edge, using:
+%
+% \setuptexttexts
+% [edge]
+% [][\TopicList]
+
+%D \macros
+%D {setuplist, placelist,startinteractionmenu}
+%D
+%D The actual topic list is typeset using a \type{\vbox}. We
+%D have to specify \type{criteriumcriterium=all} because otherwise no
+%D list will be typeset. (By default lists are typeset
+%D locally.)
+
+\startinteractionmenu[right]
+ \placelist
+ [Topic]
+ [alternative=f, % command, % none,
+ maxwidth=\hsize,
+ width=\hsize,
+ offset=0pt,
+ criterium=all,
+ align=left,
+ style=\setsmallbodyfont\bfx]
+\stopinteractionmenu
+
+\def\Topics#1% temporary hack
+ {\Nopic{#1}
+ \placelist[Topic][criterium=all]}
+
+\def\Subjects%
+ {}
+
+%D \macros
+%D {setuptexttexts, button}
+%D
+%D During a presentation, we want to use the cursor to point to
+%D parts of the text. Furthermore we want to be able to jump to
+%D the next page, without the need to move the cursor on buttons.
+%D Therefore we make the text part of the screen into an
+%D invisible button.
+
+\setuptexttexts
+ [\GotoNextPage][]
+
+\def\GotoNextPage
+ {\button[width=\hsize,height=\vsize,frame=off]{}[nextpage]}
+
+%D \macros
+%D {setupsubpagenumber}
+%D
+%D The left bottom navigation bar shows the subpages, which will
+%D be counted by text. One can change this in the preentation
+%D itself by saying \type {[way=byTopic]}.
+
+\setupsubpagenumber
+ [way=bytext, % Topic,
+ state=start]
+
+\doifnotmode{demo}{\endinput}
+
+%D The (rather silly) demo section.
+
+\starttext
+
+\TitlePage{Title Page\\pre-original}
+
+\Topics{Some Nice Quotes}
+
+\Topic{A Few}
+
+\Subject{Knuth} \input knuth
+\Subject{Tufte} \input tufte
+
+\Topic{Some More}
+
+\Subject{Zapf} \input zapf
+\Subject{Bryson} \input bryson
+
+\stoptext
diff --git a/tex/context/modules/mkii/s-pre-02.mkii b/tex/context/modules/mkii/s-pre-02.mkii
new file mode 100644
index 000000000..d7a6fe458
--- /dev/null
+++ b/tex/context/modules/mkii/s-pre-02.mkii
@@ -0,0 +1,381 @@
+%D \module
+%D [ file=s-pre-02,
+%D version=1998.04.21,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment 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.
+
+%D This environment can be used to typeset interactive
+%D presentations. This module was first used at the 1998
+%D publishers conference of the European Portable Document
+%D Association (now merged into a graphics association).
+
+\usemodule[pre-general]
+
+%D \macros
+%D {setupbodyfont, switchtobodyfont, setuplayout}
+%D
+%D At \PRAGMA\ we prefer using the Lucida Bright fonts, but
+%D one can of course load another typeface.
+
+\startmode[asintended] \setupbodyfont[lbr] \stopmode
+
+\setupbodyfont[14.4pt]
+
+\setuplayout
+ [style=smallbodyfont]
+
+%D \macros
+%D {setuppapersize, setuplayout}
+%D
+%D The papersize suits the screen dimensions. The layout is
+%D rather simple. We use the whole width of the screen and only
+%D have navigational tools at the bottom of the screen.
+
+\setuppapersize
+ [S6][S6]
+
+\setuplayout
+ [backspace=1cm,
+ topspace=1cm,
+ margin=0pt,
+ header=0pt,
+ footer=0pt,
+ bottomdistance=.875cm,
+ bottom=1cm,
+ width=fit,
+ height=fit]
+
+%D \macros
+%D {setupwhitespace, setuptyping}
+%D
+%D We don't have much height, so we use a more cramped
+%D spacing. Verbatim text looks better when indented.
+%D
+
+\setupwhitespace
+ [medium]
+
+\setuptyping
+ [margin=standard]
+
+%D \macros
+%D {definecolor, setupcolors}
+%D
+%D Of course we enable color. We define some logical colors,
+%D of which most default to the same green shade.
+
+\definecolor [BackgroundColor] [r=.8, g=.8, b=.8]
+\definecolor [OrnamentColor] [r= 0, g=.7, b=.4]
+
+\setupcolors
+ [state=start]
+
+%D \macros
+%D {setupinteraction, setupinteractionscreen}
+%D
+%D We still have to enable interaction mode. We go full
+%D screen!
+
+\setupinteraction
+ [state=start,
+ color=OrnamentColor,
+ contrastcolor=OrnamentColor]
+
+\setupinteractionscreen
+ [option=max,
+ width=fit,
+ height=fit]
+
+%D \macros
+%D {setupitemize}
+%D
+%D And why not bring some color in itemizations too?
+
+\setupitemize
+ [color=OrnamentColor]
+
+%D \macros
+%D {defineoverlay, setupbackgrounds}
+%D
+%D The navigational elements and the backgrounds are
+%D provided by \METAPOST.
+%D
+%D When \METAPOST\ is used, it makes sense to generate the
+%D graphics at runtime. This is supported when one enables
+%D system calls in the local \type {texmf.cnf} file and add the
+%D switch \type {\runMPgraphicstrue} to the local file \type
+%D {cont-sys.tex}. When direct processing is disabled or not
+%D supported, \TEXEXEC\ will take care of graphic generation.
+
+\startuniqueMPgraphic{PageBackground}
+ fill unitsquare
+ xyscaled(OverlayWidth,OverlayHeight)
+ withcolor OverlayColor ;
+ draw unitsquare
+ xyscaled(OverlayWidth,OverlayHeight)
+ enlarged (-2*OverlayLineWidth)
+ withpen pencircle scaled OverlayLineWidth
+ withcolor OverlayLineColor ;
+\stopuniqueMPgraphic
+
+\defineoverlay
+ [PageBackground]
+ [\uniqueMPgraphic{PageBackground}]
+
+\setupbackgrounds
+ [page]
+ [background=PageBackground,
+ backgroundcolor=BackgroundColor,
+ rulethickness=.125cm,
+ framecolor=OrnamentColor]
+
+%D \macros
+%D {setuptexttexts}
+%D
+%D By clicking on the text area, one goes to the next page.
+%D We hook this feature into the text backgrounds.
+
+\startuniqueMPgraphic{TextBackground}
+ draw unitsquare
+ xyscaled(OverlayWidth,OverlayHeight)
+ enlarged (4*OverlayLineWidth)
+ withpen pencircle scaled OverlayLineWidth
+ withcolor OverlayLineColor ;
+\stopuniqueMPgraphic
+
+\defineoverlay
+ [TextBackground]
+ [\uniqueMPgraphic{TextBackground}]
+
+\defineoverlay
+ [NextPage]
+ [\overlaybutton{nextpage}]
+
+\setupbackgrounds
+ [text]
+ [background={TextBackground,NextPage},
+ backgroundcolor=BackgroundColor,
+ rulethickness=.0625cm,
+ framecolor=OrnamentColor]
+
+%D \macros
+%D {setupinteractionmenu,startinteractionmenu}
+%D
+%D At the bottom of the screen, we show three buttons. These
+%D direct us to the previous or next jump or exit the document.
+
+\setupMPvariables[RightArrow][height=\bottomheight]
+\setupMPvariables[LeftArrow] [height=\bottomheight]
+\setupMPvariables[Circle] [height=\bottomheight]
+\setupMPvariables[UpArrow] [height=\bottomheight]
+
+\startuniqueMPgraphic{RightArrow}{height}
+ z1=(0,0) ; z2=(\MPvar{height},.5y3) ; z3=(0,\MPvar{height}) ;
+ drawfill z1--z2--z3--cycle
+ withpen pencircle scaled (\MPvar{height}/5)
+ withcolor \MPcolor{OrnamentColor} ;
+\stopuniqueMPgraphic
+
+\startuniqueMPgraphic{LeftArrow}{height}
+ z1=(\MPvar{height},0) ; z2=(0,.5y3) ; z3=(\MPvar{height},\MPvar{height}) ;
+ drawfill z1--z2--z3--cycle
+ withpen pencircle scaled (\MPvar{height}/5)
+ withcolor \MPcolor{OrnamentColor} ;
+\stopuniqueMPgraphic
+
+\startuniqueMPgraphic{Circle}{height}
+ drawfill fullcircle scaled \MPvar{height}
+ withpen pencircle scaled (\MPvar{height}/5)
+ withcolor \MPcolor{OrnamentColor} ;
+\stopuniqueMPgraphic
+
+\startuniqueMPgraphic{UpArrow}{height}
+ z1=(0,0) ; z2=(\MPvar{height},0) ; z3=(.5x2,\MPvar{height}) ;
+ drawfill z1--z2--z3--cycle
+ withpen pencircle scaled (\MPvar{height}/5)
+ withcolor \MPcolor{OrnamentColor} ;
+\stopuniqueMPgraphic
+
+\setupinteractionmenu
+ [bottom]
+ [state=start,
+ frame=off,
+ width=.3\textwidth,
+ height=\bottomheight]
+
+\setupinteraction
+ [menu=on]
+
+\def\WhateverButton
+ {\doifreferencefoundelse{Whatever}
+ {\raw [Whatever] \uniqueMPgraphic{UpArrow} \\}
+ {}}
+
+\startinteractionmenu[bottom]
+ \but [Topics] \\ % secret button
+ \hfill
+ \WhateverButton % user specific
+ \kern2\bottomheight
+ \raw [previouspage] \uniqueMPgraphic{LeftArrow} \\
+ \kern.5\bottomheight
+ \raw [CloseDocument] \uniqueMPgraphic{Circle} \\
+ \kern.5\bottomheight
+ \raw [nextpage] \uniqueMPgraphic{RightArrow} \\
+ \kern.5\bottomheight
+\stopinteractionmenu
+
+%D \macros
+%D {TitlePage, Topics, Topic, Subject}
+%D
+%D A presentation after loading this module looks like:
+%D
+%D \starttyping
+%D \TitlePage {About Whatever\\Topics}
+%D
+%D \Topics {Todays Talk}
+%D
+%D \Topic {Some topic}
+%D
+%D .....
+%D
+%D \Topic {Next Topic}
+%D
+%D .....
+%D \stoptyping
+
+%D \macros
+%D {StartTitlePage, TitlePage}
+%D
+%D The titlepage is rather simple and can be typeset in two
+%D ways:
+%D
+%D \starttyping
+%D \StartTitlePage
+%D text \\ text \\ text
+%D \StopTitlepage
+%D \stoptyping
+%D
+%D or as one||liner:
+%D
+%D \starttyping
+%D \TitlePage{text\\text\\text}
+%D \stoptyping
+%D
+%D The first alternative can be used for more complicated
+%D title pages.
+
+\def\StartTitlePage%
+ {\startstandardmakeup
+ \bfd\setupinterlinespace
+ \setupalign[middle]
+ \vfil
+ \let\\=\vfil}
+
+\def\StopTitlePage%
+ {\vfil\vfil\vfil
+ \stopstandardmakeup}
+
+\def\TitlePage#1%
+ {\StartTitlePage#1\StopTitlePage}
+
+%D \macros
+%D {definehead}
+%D
+%D The commands \type{\Topic} and \type{\Subject} are defined
+%D as copies of head. We use \type{\Nopic} for internal
+%D purposes.
+
+\definehead [Topic] [chapter]
+\definehead [Subject] [section]
+
+\definehead [Nopic] [title]
+
+%D \macros
+%D {setuphead}
+%D
+%D We use our own command for typesetting the titles. We hide
+%D sectionnumbers from viewing. Each topic is followed by a
+%D list of subjects that belong to the topic.
+
+\setuphead
+ [Topic, Nopic]
+ [after={\blank[3*medium]},
+ number=no,
+ style=\tfb,
+ page=yes,
+ alternative=middle]
+
+\setuphead
+ [Subject]
+ [after=\blank,
+ number=no,
+ page=yes,
+ continue=no,
+ style=\tfa]
+
+%D \macros
+%D {setuplist}
+%D
+%D When found, the subject list is automatically placed
+%D after the topic head.
+
+\setuplist
+ [Topic,Subject]
+ [alternative=g,
+ interaction=all,
+ before=,
+ after=]
+
+\setuplist
+ [Topic]
+ [criterium=all]
+
+\def\Topics#1%
+ {\determinelistcharacteristics[Topic]
+ \doifmode{*list}
+ {\Nopic[Topics]{#1}
+ \startcolumns
+ \placelist[Topic]
+ \stopcolumns}}
+
+\setuplist
+ [Subject]
+ [criterium=Topic]
+
+\def\Subjects%
+ {\determinelistcharacteristics[Subject]
+ \doifmode{*list}
+ {\placelist[Subject]}}
+
+\setuphead
+ [Topic]
+ [after={\blank[3*medium]\Subjects}]
+
+\doifnotmode{demo}{\endinput}
+
+%D The (rather silly) demo section.
+
+\starttext
+
+\TitlePage{Title Page\\pre-green}
+
+\Topics{Some Nice Quotes}
+
+\Topic{A Few}
+
+\Subject{Knuth} \input knuth
+\Subject{Tufte} \input tufte
+
+\Topic{Some More}
+
+\Subject{Zapf} \input zapf
+\Subject{Bryson} \input bryson
+
+\stoptext
diff --git a/tex/context/modules/mkii/s-pre-03.mkii b/tex/context/modules/mkii/s-pre-03.mkii
new file mode 100644
index 000000000..19a11d24e
--- /dev/null
+++ b/tex/context/modules/mkii/s-pre-03.mkii
@@ -0,0 +1,257 @@
+%D \module
+%D [ file=s-pre-03,
+%D version=1998.09.06,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment 3,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D This is the third environment for typesetting interactive
+%D presentations. I used this style for a talk on \TEX\ and
+%D \JAVASCRIPT\ at \TUG98, mainly because I didn't want to
+%D use the same style three times. Therefore this is a rather
+%D simple, silly style.
+
+\usemodule[pre-general]
+
+%D \macros
+%D {setupbodyfont}
+%D
+%D We use a large bodyfont. Combined with the fancy
+%D background, this does not leave that much room for text, but
+%D presentations should use much text anyway.
+
+\startmode[asintended] \setupbodyfont[lbr] \stopmode
+
+\setupbodyfont[14.4pt]
+
+%D \macros
+%D {setuppapersize,setuplayout,setupinteractionscreen}
+%D
+%D The page dimensions are set to size \type {S6}, being
+%D 600pt by 450pt. We use wide margins and discard headers
+%D and footers. We also launch the document full screen.
+
+\setuppapersize
+ [S6][S6]
+
+\setuplayout
+ [width=middle,
+ height=middle,
+ topspace=75pt,
+ backspace=100pt,
+ header=0pt,
+ footer=0pt]
+
+\setupinteractionscreen
+ [option=max]
+
+%D \macros
+%D {setupcolors,definecolor}
+%D
+%D Next, color support is turned on and a dark red color is
+%D defined. Other red shades will be derived from this one
+%D color.
+
+\setupcolors
+ [state=start]
+
+\definecolor [PageColor] [black]
+\definecolor [BackgroundColor] [s=.85]
+\definecolor [OrnamentColor] [r=.75]
+
+%D \macros
+%D {setupinteraction}
+%D
+%D We turn on interaction mode and use the same color for
+%D hyperlinks and redundant hyperlinks (the ones that point
+%D to the current page).
+
+\setupinteraction
+ [state=start,
+ contrastcolor=OrnamentColor,
+ color=OrnamentColor]
+
+%D \macros
+%D {defineoverlay, setupbackgrounds}
+%D
+%D The joke in this presentation is the elliptical shape of
+%D which the bottom part includes a page indication.
+
+\defineoverlay
+ [PageShape][\useMPgraphic{PageShape}]
+
+% \startuseMPgraphic{PageShape}
+% lin := 20pt ; off := .75lin ;
+% wid := \overlaywidth ; hei := \overlayheight ;
+% pos := \currentpage ; tot := \lastpage ;
+% path bb; bb := unitsquare xscaled wid yscaled hei ;
+% filldraw bb withcolor \MPcolor{PageColor} ;
+% pickup pencircle xscaled .5lin yscaled lin rotated 45 ;
+% pair r, t, l, b ;
+% r := (wid-off,.5hei) ; t := (.5wid,hei-off) ;
+% l := (off,.5hei) ; b := (.5wid,off) ;
+% path p; p := superellipse(r,t,l,b,.8) ;
+% fill p withcolor \MPcolor{Backgroundcolor} ;
+% draw p withcolor \MPcolor{OrnamentColor} ;
+% color contrastcolor ; contrastcolor = 2/3 * \MPcolor{OrnamentColor} ;
+% if (pos>0) and (tot>0):
+% pair pa ; pa := point 5 of p ;
+% pair pb ; pb := point 7 of p ;
+% draw pa withcolor contrastcolor ;
+% draw pb withcolor contrastcolor ;
+% len := 2/tot ;
+% pair pa ; pa := point (5+len*pos) of p ;
+% pair pb ; pb := point (5+len*(pos-1)) of p ;
+% p := p cutafter pa ;
+% p := p cutbefore pb ;
+% draw p withcolor contrastcolor ;
+% fi ;
+% setbounds currentpicture to bb ;
+% \stopuseMPgraphic
+
+\startuseMPgraphic{PageShape}
+ StartPage ;
+ path p ; pair pa, pb ; numeric len ; color contrastcolor ;
+ fill Page withcolor \MPcolor {PageColor} ;
+ pickup pencircle rotated 45 xscaled 10pt yscaled 20pt ;
+ p := Page enlarged (-10pt,-15pt) superellipsed .8 ;
+ p := p shifted (-1.5pt,0) ; % looks better
+ fill p withcolor \MPcolor{BackgroundColor} ;
+ draw p withcolor \MPcolor{OrnamentColor} ;
+ contrastcolor = 2/3 * \MPcolor{OrnamentColor} ;
+ if (PageNumber>0) and (NOfPages>0):
+ draw point 5 of p withcolor contrastcolor ;
+ draw point 7 of p withcolor contrastcolor ;
+ len := 2/NOfPages ;
+ pa := point (5+len*PageNumber) of p ;
+ pb := point (5+len*(PageNumber-1)) of p ;
+ draw (p cutafter pa) cutbefore pb
+ withcolor contrastcolor ;
+ fi ;
+ StopPage ;
+\stopuseMPgraphic
+
+%D We use the viewer provided feature to go to the previous or
+%D next page.
+
+\defineoverlay[PrevButton][\overlaybutton{PreviousPage}]
+\defineoverlay[NextButton][\overlaybutton{NextPage}]
+
+\setupbackgrounds
+ [page]
+ [background={PageShape,PrevButton}]
+
+\setupbackgrounds
+ [text][text]
+ [background=NextButton]
+
+% or using hard coded next/prev pages:
+%
+% \defineoverlay[PrevButton][\overlaybutton{previouspage}]
+% \defineoverlay[NextButton][\overlaybutton{nextpage}]
+%
+% \setupbackgrounds[state=repeat]
+% \setupbackground[text][text][background=NextButton]
+%
+% or simply (using an repeated layer):
+%
+% \setupbackground[text][background=NextButton]
+
+%D \macros
+%D {definehead, setuphead}
+%D
+%D Like the other presentation styles, we use \type {\Topic}
+%D instead of \type {\chapters}. This time we don't provide
+%D an additional sectioning. So we have:
+%D
+%D \starttyping
+%D \TitlePage{How nice}
+%D
+%D \Topics{This is about ...}
+%D
+%D \Topic{The first one}
+%D
+%D \Topic{Another one}
+%D \stoptyping
+
+\definehead [Topic] [chapter]
+\definehead [Nopic] [title]
+
+\setuphead
+ [Topic,Nopic]
+ [after={\blank[3*medium]},
+ number=no,
+ style=\tfb,
+ page=yes,
+ alternative=middle]
+
+\setuplist
+ [Topic]
+ [alternative=g,
+ interaction=all,
+ before=,
+ after=]
+
+\def\Subject
+ {\Topic}
+
+%D The tables of contents is associated with \type
+%D {\Topics}.
+
+\def\Topics#1%
+ {\Nopic[Topics]{#1}
+ \placelist[Topic][criterium=all]}
+
+\def\Subjects
+ {}
+
+%D Instead of \type {\TitlePage}, one can use the pair
+%D \type {\StartTitlePage} -- \type {\StopTitlePage}:
+%D
+%D \starttyping
+%D \StartTitlePage
+%D A Self Made Title
+%D \StopTitlePage
+%D \stoptyping
+
+\def\StartTitlePage%
+ {\startstandardmakeup
+ \bfd\setupinterlinespace
+ \setupalign[middle]
+ \vfil
+ \def\\{\vfil\bfb\setupinterlinespace}}
+
+\def\StopTitlePage%
+ {\vfil\vfil\vfil
+ \stopstandardmakeup}
+
+\def\TitlePage#1%
+ {\StartTitlePage#1\StopTitlePage}
+
+\doifnotmode{demo}{\endinput}
+
+%D The (rather silly) demo section.
+
+\starttext
+
+\TitlePage{Title Page\\pre-funny}
+
+\Topics{Some Nice Quotes}
+
+\Topic{A Few}
+
+\Subject{Knuth} \input knuth
+\Subject{Tufte} \input tufte
+
+\Topic{Some More}
+
+\Subject{Zapf} \input zapf
+\Subject{Bryson} \input bryson
+
+\stoptext
diff --git a/tex/context/modules/mkii/s-pre-04.mkii b/tex/context/modules/mkii/s-pre-04.mkii
new file mode 100644
index 000000000..088f4e510
--- /dev/null
+++ b/tex/context/modules/mkii/s-pre-04.mkii
@@ -0,0 +1,377 @@
+%D \module
+%D [ file=s-pre-04,
+%D version=1998.09.06,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment 4,
+%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.
+
+\usemodule[pre-general]
+
+%D \macros
+%D {setupbodyfont}
+%D
+%D This is just another environment for typesetting interactive
+%D presentations. I wrote this module on behalf of a course I
+%D gave for the United Kingdom \TeX\ users group.
+
+\setupbodyfont[ams,pos,14.4pt]
+
+%D \macros
+%D {setupcolors,definecolor}
+%D
+%D I started using dark blue for the navigational elements. In
+%D that context, dark red is a logical choice for the contrast
+%D color. While playing around with the navigational elements
+%D I decided to use the not so dominant color yellow for the
+%D status bar.
+%D
+%D A few days before I wrote this style, the recent acquisition
+%D of Mondriaans last painting by the Dutch governement was a
+%D hot topic in the dutch news scenary. Therefore I decided to
+%D replace the rather dull title page by something more
+%D colorful, in mondriaan colors, but far more random than any
+%D of his paintings. For consistence we remap the already
+%D defined primary colors.
+
+\setupcolors [state=start]
+
+\definecolor [NoneColor] [s=.6]
+\definecolor [GotoColor] [b=.6] \definecolor[blue] [GotoColor]
+\definecolor [ExitColor] [r=.6] \definecolor[red] [ExitColor]
+\definecolor [JumpColor] [s=.6]
+\definecolor [UserColor] [g=.6] \definecolor[green] [UserColor]
+\definecolor [StepColor] [r=.6,g=.6] \definecolor[yellow][StepColor]
+
+\definecolor [PageColor] [s=.80] \definecolor[gray] [PageColor]
+\definecolor [TextColor] [s=.90]
+
+%D \macros
+%D {setuppapersize}
+%D
+%D As usual, we take a screen oriented paper size:
+
+\setuppapersize
+ [S6][S6]
+
+%D \macros
+%D {setuplayout,setupinteractionscreen}
+%D
+%D The layout definition fits into this $600\times450$ point
+%D area, but the dimensions are somewhat diffused by the text
+%D background offset.
+
+\setuplayout
+ [width=530pt,
+ height=400pt,
+ header=0pt,
+ footer=0pt,
+ backspace=15pt,
+ topspace=15pt,
+ bottomdistance=15pt,
+ bottom=10pt,
+ margin=0pt,
+ rightedgedistance=15pt,
+ rightedge=30pt]
+
+\setupinteractionscreen
+ [option=max]
+
+%D \macros
+%D {setupbackgrounds}
+%D
+%D Both the page and the text area have a gray background.
+%D The \type {[text,text]} area also has an offset. Later we
+%D will see that we have to compensate for that in the
+%D navigational areas.
+
+\setupbackgrounds
+ [page]
+ [background=color,
+ backgroundcolor=PageColor]
+
+\setupbackgrounds
+ [text][text]
+ [background=color,
+ backgroundcolor=TextColor,
+ backgroundoffset=5pt]
+
+%D \macros
+%D {setupinteraction}
+%D
+%D For convenient navigation, we turn on interaction.
+
+\setupinteraction
+ [state=start,
+ menu=on,
+ color=UserColor,
+ contrastcolor=NoneColor]
+
+%D \macros
+%D {setupsubpagenumber}
+%D
+%D When navigating the document, we keep the title page out
+%D of sight, therefore we use sub page numbers.
+
+\setupsubpagenumber
+ [state=start,
+ way=bytext]
+
+%D \macros
+%D {setupinteractionmenu}
+%D
+%D There is only one interaction menu, located in the right
+%D edge of the screen. Both offsets enlarge the edge by the
+%D same amount as the text background offset.
+
+\setupinteractionmenu
+ [right]
+ [state=start,
+ frame=off,
+ strut=no,
+ offset=0pt,
+ inbetween=,
+ bottomoffset=-5pt,
+ topoffset=-5pt]
+
+%D \macros
+%D {startinteractionmenu}
+%D
+%D The menu itself is not that spectacular. We use the
+%D start||stop alternative for setting the content. The macro
+%D \type {\interactioncolor} expands into either the
+%D interaction color or the contrast color, the latter only
+%D when no jump is possible.
+
+\startinteractionmenu[right]
+ \setupinteraction[color=GotoColor]
+ \but [previoussubpage] \Triangle {90}\framedwidth\interactioncolor \\
+ \vskip10pt
+ \but [nextsubpage] \Triangle{270}\framedwidth\interactioncolor \\
+ \vfill
+ \but [PreviousJump] \Triangle{180}\framedwidth{NoneColor} \\
+ \vskip-5pt
+ \but [NextJump] \Triangle {0}\framedwidth{NoneColor} \\
+\stopinteractionmenu
+
+%D \macros
+%D {setupinteractionbar}
+%D
+%D The interaction bar at the bottom is also larger than the
+%D normal width of the bottom area.
+
+\setupinteractionbar
+ [alternative=f,
+ width=\textwidth,
+ height=\bottomheight,
+ distance=10pt,
+ color=NoneColor,
+ contrastcolor=StepColor]
+
+%D \macros
+%D {setupbottomtexts}
+%D
+%D The bar is centered in the middle.
+
+\setupbottomtexts
+ [\interactionbar]
+
+%D We can exit viewing with a close button, located on the
+%D rightmost bottom area.
+
+\def\CloseButton
+ {\button
+ [width=\rightedgewidth,height=\bottomheight,offset=overlay,
+ background=color,backgroundcolor=ExitColor,frame=off]
+ {}%
+ [CloseDocument]}
+
+\setupbottomtexts
+ [edge][][\CloseButton]
+
+%D \macros
+%D {definesymbol,setupitemize}
+%D
+%D Because some prominent things are rectangular or triangular,
+%D we prefer some different symbols in itemizations:
+
+\definesymbol[1][$\blacktriangleright$]
+\definesymbol[2][$\blacktriangledown$]
+\definesymbol[3][$\blacktriangleright$]
+\definesymbol[4][$\blacktriangledown$]
+
+\setupitemize[each][color=NoneColor]
+
+%D \macros
+%D {TitlePage,defineoverlay,button,setupalign,
+%D setupbackgrounds,setupinteraction,setupinteractionbar,
+%D startstandardmakeup,switchtobodyfont,setupinterlinespace}
+%D
+%D Now the main layout and navigational definitions are
+%D done, it makes sense to define and tune some structuring
+%D commands. First we build the titlepage.
+
+\defineoverlay [TitleGraphic] [\useMPgraphic{title}]
+\defineoverlay [NextPage] [\overlaybutton{nextpage}]
+
+\def\StartTitlePage
+ {\setupbackgrounds[page][background={color,TitleGraphic,NextPage}]
+ \setupbackgrounds[text][text][background=]
+ \setupinteraction[menu=off]
+ \setupinteractionbar[state=stop]
+ \startstandardmakeup
+ \switchtobodyfont[24pt]
+ \bfd\setupinterlinespace
+ \setupalign[middle]
+ \vfil
+ \let\\=\vfil}
+
+\def\StopTitlePage
+ {\vfil\vfil\vfil
+ \stopstandardmakeup
+ \setupinteraction[menu=on]
+ \setupinteractionbar[state=start]
+ \setupbackgrounds[page][background=color]
+ \setupbackgrounds[text][text][background=color]
+ \setupsubpagenumber[reset]}
+
+\def\TitlePage#1%
+ {\StartTitlePage#1\StopTitlePage}
+
+%D \macros
+%D {Topic, Nopic, Subject,
+%D definehead, setuphead}
+%D
+%D We use \type {\Topic} and \type {\Subject} instead of
+%D chapters and sections. The \type {\Nopic} alternative is
+%D meant for internal use.
+
+\definehead [Topic] [chapter]
+\definehead [Nopic] [title]
+\definehead [Subject] [section]
+
+\setuphead
+ [Topic, Nopic]
+ [after={\blank[3*medium]},
+ number=no,
+ style=\tfb,
+ page=yes,
+ alternative=middle]
+
+\setuphead
+ [Subject]
+ [after=\blank,
+ number=no,
+ page=yes,
+ continue=no,
+ style=\tfa]
+
+%D \macros
+%D {Topics, Subjects,
+%D setuplist, placelist, startcolumns}
+%D
+%D This style is meant for the more large presentations, and
+%D therefore provided for a list of topics as well as local
+%D lists of subjects. When many topics are introduces, the
+%D list is typeset in columns.
+
+\setuplist
+ [Topic,Subject]
+ [alternative=g,
+ interaction=all,
+ before=,
+ after=]
+
+\setuplist
+ [Topic]
+ [criterium=all]
+
+\def\Topics#1%
+ {\determinelistcharacteristics[Topic]
+ \ifnum\utilitylistlength>0
+ \Nopic[Topics]{#1}
+ \ifnum\utilitylistlength>12
+ \startcolumns
+ \placelist[Topic]
+ \stopcolumns
+ \else
+ \placelist[Topic]
+ \fi
+ \fi}
+
+\def\Subjects%
+ {\placelist[Subject]}
+
+%D Last we define the overlays. Look at the way colors are
+%D linked into the macros.
+
+\startMPinclusions
+ def triangle (expr wid, rot, col) =
+ x1 := x3 := y1 := 0 ; x2 := y3 := wid ; y2 := .5y3 ;
+ fill (z1--z2--z3--cycle) rotated rot withcolor col ;
+ currentpicture := currentpicture xysized (wid,wid) ;
+ enddef ;
+\stopMPinclusions
+
+\setupMPvariables
+ [triangle]
+ [width=1cm,
+ rotation=0,
+ color=black]
+
+\startuniqueMPgraphic{triangle}{width,rotation,color}
+ triangle(\MPvar{width},\MPvar{rotation},\MPvar{color}) ;
+\stopuniqueMPgraphic
+
+\def\Triangle#1#2#3%
+ {\uniqueMPgraphic{triangle}{rotation=#1,width=#2,color=#3}}
+
+\startuseMPgraphic{title} % can be simplified with "randomized"
+ color c ; path p ;
+ for i=1 upto 250 :
+ x0 := uniformdeviate \overlaywidth ;
+ y0 := uniformdeviate \overlayheight ;
+ sx := uniformdeviate 20 ;
+ sy := uniformdeviate 20 ;
+ cc := round(uniformdeviate 2) ;
+ if cc=0 : c := \MPcolor{GotoColor} fi ;
+ if cc=1 : c := \MPcolor{ExitColor} fi ;
+ if cc=2 : c := \MPcolor{StepColor} fi ;
+ qq := round(uniformdeviate 1) ;
+ if qq=0 :
+ p := unitsquare xscaled sx yscaled sy ;
+ else :
+ rr := round(uniformdeviate 3) * 90 ;
+ x1 := x3 := y1 := 0 ; x2 := y3 := sx; y2 := .5y3 ;
+ p := (z1--z2--z3--cycle) rotated rr ;
+ fi ;
+ fill p shifted z0 withcolor c ;
+ endfor ;
+\stopuseMPgraphic
+
+\doifnotmode{demo}{\endinput}
+
+%D The (rather silly) demo section.
+
+\starttext
+
+\TitlePage{Title Page\\pre-colorfull}
+
+\Topics{Some Nice Quotes}
+
+\Topic{A Few}
+
+\Subject{Knuth} \input knuth
+\Subject{Tufte} \input tufte
+
+\Topic{Some More}
+
+\Subject{Zapf} \input zapf
+\Subject{Bryson} \input bryson
+
+\stoptext
diff --git a/tex/context/modules/mkii/s-pre-05.mkii b/tex/context/modules/mkii/s-pre-05.mkii
new file mode 100644
index 000000000..dcb3f5e81
--- /dev/null
+++ b/tex/context/modules/mkii/s-pre-05.mkii
@@ -0,0 +1,240 @@
+%D \module
+%D [ file=s-pre-05,
+%D version=1998.12.12,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment 5,
+%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.
+
+\usemodule[pre-general]
+
+%D As all styles sofar, this one has the same structuring
+%D commands.
+
+\startmode[asintended] \setupbodyfont[ludicaot] \stopmode
+
+\setupbodyfont[14.4pt]
+
+\setupcolors [state=start]
+
+\definecolor [BackgroundColor] [s=.95]
+\definecolor [OrnamentColor] [r=.6,g=.7,b=.8]
+
+\setuppapersize
+ [S6][S6]
+
+\setuplayout
+ [width=430pt,
+ height=400pt,
+ header=0pt,
+ footer=0pt,
+ margin=0pt,
+ backspace=25pt,
+ topspace=25pt,
+ rightedgedistance=20pt,
+ rightedge=110pt]
+
+\setupinteractionscreen
+ [option=max]
+
+\setupbackgrounds
+ [state=repeat]
+
+\setupbackgrounds
+ [page]
+ [backgroundcolor=white]
+
+\setupbackgrounds
+ [text][text]
+ [background={HashFrameA,NextPage},
+ backgroundoffset=20pt]
+
+\defineoverlay
+ [HashFrameA]
+ [\useMPgraphic{HashFrameA}]
+
+\defineoverlay
+ [HashFrameB]
+ [\useMPgraphic{HashFrameB}]
+
+\setupinteraction
+ [state=start,
+ menu=on,
+ color=OrnamentColor,
+ contrastcolor=OrnamentColor]
+
+%D Watch how we use a list alternative that matches the
+%D menu.
+
+\setupinteractionmenu
+ [right]
+ [background=HashFrameB,
+ style=smallbold,
+ frame=off,
+ offset=10pt,
+ height=35pt,
+ before=,
+ after=,
+ inbetween=\endgraf,
+ width=\rightedgewidth]
+
+\startinteractionmenu[right]
+ \placelist
+ [Topic]
+ [criterium=all,
+ alternative=right,
+ maxwidth=.8\rightedgewidth,
+ interaction=all,
+ before=,
+ after=]
+ \vfill
+ \setupinteractionmenu
+ [right]
+ [height=30pt]
+ \but [CloseDocument] Close \\
+\stopinteractionmenu
+
+\setupwhitespace
+ [big]
+
+\setupblank
+ [big]
+
+%D \macros
+%D {TitlePage}
+%D
+%D Now the main layout and navigational definitions are
+%D done, it makes sense to define and tune some structuring
+%D commands. First we build the titlepage.
+
+\defineoverlay [TitleGraphic] [\useMPgraphic{TitleGraphic}]
+\defineoverlay [NextPage] [\overlaybutton{forward}]
+
+\unexpanded\def\StartTitlePage
+ {\setupbackgrounds[page][background={color,TitleGraphic,NextPage}]
+ \setupbackgrounds[text][text][background=]
+ \setupinteraction[menu=off]
+ \setupinteractionbar[state=stop]
+ \setuplayout[width=550pt,rightedge=0pt]
+ \startstandardmakeup
+ \switchtobodyfont[24pt]
+ \bfd\setupinterlinespace
+ \setupalign[middle]
+ \vfil
+ \let\\=\vfil}
+
+\unexpanded\def\StopTitlePage
+ {\vfil\vfil\vfil
+ \stopstandardmakeup
+ \setuplayout[width=430pt,rightedge=110pt]
+ \setupinteraction[menu=on]
+ \setupinteractionbar[state=start]
+ \setupbackgrounds[page][background=color]
+ \setupbackgrounds[text][text][background={HashFrameA,NextPage}]}
+
+\unexpanded\def\TitlePage#1%
+ {\StartTitlePage#1\StopTitlePage}
+
+%D \macros
+%D {Topics,Subjects}
+%D
+%D Since the lists are in the menu, we don't honor list
+%D placement macros.
+
+\unexpanded\def\Topics#1{}
+\unexpanded\def\Subjects{}
+
+%D \macros
+%D {Topic, Nopic, Subject}
+%D
+%D Since t his style is meant for rather flat structured
+%D documents, only \type {\Topic} makes sense.
+
+\definehead [Topic] [chapter]
+\definehead [Nopic] [title]
+\definehead [Subject] [section]
+
+\setuphead
+ [Topic, Nopic]
+ [after={\blank[3*medium]},
+ number=no,
+ style=\tfb,
+ page=yes,
+ alternative=middle]
+
+\setuphead
+ [Subject]
+ [after=\blank,
+ number=no,
+ page=yes,
+ continue=no,
+ style=\tfa]
+
+%D We use only one kind of base graphic, which is sligthly
+%D tuned for the different usage.
+
+\startMPinclusions
+ def random_hash_frame (expr width, height, offset, linewidth ) =
+
+ def delta = ((uniformdeviate .5offset) + .25offset) enddef ;
+ x1 := offset ; y1 := offset ; x2 := width-offset ; y2 := height-offset ;
+
+ drawoptions(withpen pencircle scaled linewidth withcolor \MPcolor{BackgroundColor}) ;
+ fill z1--(x2,y1)--z2--(x1,y2)--cycle ;
+
+ drawoptions(withpen pencircle scaled linewidth withcolor \MPcolor{OrnamentColor}) ;
+ draw (x1-delta,y1)--(x2+delta,y1) ;
+ draw (x2,y1-delta)--(x2,y2+delta) ;
+ draw (x2+delta,y2)--(x1-delta,y2) ;
+ draw (x1,y2+delta)--(x1,y1-delta) ;
+
+ drawoptions();
+ setbounds currentpicture to unitsquare xscaled width yscaled height ;
+ enddef ;
+\stopMPinclusions
+
+\startuseMPgraphic{HashFrameA}
+ random_hash_frame(OverlayWidth,OverlayHeight,15pt,2pt) ;
+\stopuseMPgraphic
+
+\startuseMPgraphic{HashFrameB}
+ random_hash_frame(OverlayWidth,OverlayHeight, 5pt,2pt) ;
+\stopuseMPgraphic
+
+\startuseMPgraphic{TitleGraphic}
+ for i=1 upto 300 :
+ offset := uniformdeviate 10pt ;
+ width := 2*offset + 30pt + uniformdeviate 30pt ;
+ height := 2*offset + 10pt + uniformdeviate 10pt ;
+ addto currentpicture also
+ image(random_hash_frame(width,height,offset,1pt)) shifted
+ (uniformdeviate OverlayWidth, uniformdeviate OverlayHeight) ;
+ endfor ;
+\stopuseMPgraphic
+
+\doifnotmode{demo}{\endinput}
+
+%D The (rather silly) demo section.
+
+\starttext
+
+\TitlePage{Title Page\\pre-fuzzy}
+
+\Topics{Some Nice Quotes}
+
+\Topic{A Few}
+
+\Subject{Knuth} \input knuth
+\Subject{Tufte} \input tufte
+
+\Topic{Some More}
+
+\Subject{Zapf} \input zapf
+\Subject{Bryson} \input bryson
+
+\stoptext
diff --git a/tex/context/modules/mkii/s-pre-09.mkii b/tex/context/modules/mkii/s-pre-09.mkii
new file mode 100644
index 000000000..a20b9f31a
--- /dev/null
+++ b/tex/context/modules/mkii/s-pre-09.mkii
@@ -0,0 +1,380 @@
+%D \module
+%D [ file=s-pre-09,
+%D version=unknown,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment 9,
+%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 made this style when I had to give a presentation on
+%D the \MAPS\ bibliography production for several user group
+%D meetings. This style is rather tuned for combinations of
+%D examples and explanations. The colors match the \MAPS\
+%D bibliography colors.
+
+\startmode[asintended] \setupbodyfont[lbr] \stopmode
+
+\setupbodyfont[14.4pt]
+
+%D A couple of years later, in 2001 this style was documented
+%D and made public. While documenting, I also changed box
+%D building on top of overlays into the now available layer
+%D positioning. So, this styles demonstrates quite some
+%D tricks.
+
+\setuppapersize
+ [S6][S6]
+
+\setuplayout
+ [topspace=0cm,
+ backspace=0cm,
+ header=0pt,
+ footer=0pt,
+ width=middle,
+ height=middle]
+
+%D Local environments can be set by using the setups commands.
+%D For downward compatibility, we keep supporting the \type
+%D {\...Settings} hooks. Using local environments is seldom
+%D needed.
+
+\let\TextSettings \empty
+\let\SampleSettings\empty
+
+\startsetups [text] \TextSettings \stopsetups
+\startsetups [sample] \SampleSettings \stopsetups
+
+%D The dimensions are kind of fixed.
+
+\def\FrameWidth {448pt}
+\def\FrameHeight {348pt}
+\def\FrameOffset {24pt}
+\def\FrameSkip {12pt}
+
+%D But they {\em can} and {\em will} be changed.
+
+\def\FrameWidth {408pt}
+\def\FrameHeight {318pt}
+
+%D The funny values come from the $3:4$ display aspect
+%D ratio.
+
+\setupcolors
+ [state=start]
+
+\definecolor[PageColor] [s=.40]
+\definecolor[TextColor] [s=.90]
+\definecolor[InteractionColor][r=.40]
+\definecolor[LineColor] [r=.60,g=.60]
+
+%D Of course we go interactive and since we will probably
+%D open other documents, we make sure that the viewer opens a
+%D new window.
+
+\setupinteraction
+ [color=InteractionColor,
+ contrastcolor=LineColor,
+ display=new,
+ state=start]
+
+\setupinteractionscreen
+ [option=max]
+
+%D Before we come to the real macros, we do a little bit of
+%D tuning.
+
+\setupitemize
+ [1][packed]
+
+\setuptyping
+ [blank=medium]
+
+%D Apart from the titlepage, the page gets a simple colored
+%D background. Later we will activate the background.
+
+\setupbackgrounds
+ [page]
+ [backgroundcolor=PageColor]
+
+%D Everything gets frames by a nice \METAPOST\ frame.
+
+\defineoverlay [background] [\uniqueMPgraphic{background}]
+
+\startuniqueMPgraphic{background}
+ path p ; color c, w, d ;
+ c := \MPcolor{PageColor} ;
+ w := \MPcolor{TextColor} ;
+ d := \MPcolor{LineColor} ;
+ p := unitsquare xscaled OverlayWidth yscaled OverlayHeight ;
+ pickup pencircle scaled (1.5*\FrameSkip) ;
+ draw p withcolor c ;
+ pickup pencircle scaled \FrameSkip ;
+ fill p withcolor w ;
+ draw p withcolor d ;
+\stopuniqueMPgraphic
+
+%D We will present samples and explanation pair||wise, so
+%D we need a hyperlink that skips a page.
+
+\defineoverlay [nextpage] [\overlaybutton{nextpage}]
+\defineoverlay [previouspage] [\overlaybutton{previouspage}]
+\defineoverlay [skippage] [\overlaybutton{page(+2)}]
+
+%D Layers are normally used to position multiple content on
+%D a specific overlay. Here we will use them to position
+%D only and since the samples and text will swap place, we
+%D will use quite a few layers.
+
+\defineoverlay [text] [\composedlayer{text}]
+\defineoverlay [sample] [\composedlayer{sample}]
+\defineoverlay [common] [\composedlayer{common}]
+
+%D There are three positions. When combined, the sample and
+%D text windows overlap, otherwise the lone window is
+%D centered. We could have used one layer and reversed the
+%D order by setting the \type {direction} parameter, but
+%D this approach is more readable.
+
+\definelayer
+ [text]
+ [x=\makeupwidth,y=\makeupheight,location=lt,
+ hoffset=-\FrameSkip,voffset=-\FrameSkip]
+
+\definelayer
+ [sample]
+ [hoffset=\FrameSkip,voffset=\FrameSkip]
+
+\definelayer
+ [common]
+ [x=.5\makeupwidth,y=.5\makeupheight,location=c]
+
+%D The topic is put in the lower right corner of the text
+%D window.
+
+\defineoverlay [topic] [\composedlayer{topic}]
+
+\definelayer
+ [topic]
+ [x=\FrameWidth,y=\FrameHeight,location=lt,
+ hoffset=-\FrameOffset,voffset=-\FrameSkip]
+
+%D The topic is put in a framed box. That way we can make
+%D sure that it gets a background, which looks better when
+%D it covers something else. Otherwise we could have stuct
+%D to:
+%D
+%D \starttyping
+%D \def\Topic#1%
+%D {\setlayer[topic]{\color[PageColor]{\bfb\setstrut#1}}}
+%D \stoptyping
+%D
+%D But, we go for the nice alternative:
+
+\def\Topic#1%
+ {\doifsomething{#1}
+ {\setlayer [topic]
+ {\bfb\setstrut
+ \inframed
+ [frame=off,foregroundcolor=PageColor,offset=0pt,
+ background=color,backgroundcolor=TextColor]
+ {#1}}}}
+
+%D The sample as well as the explanation will be collected in
+%D a buffer. That way we can reuse the content. We could
+%D have used a box instead, but can we be sure that the content
+%D is not adapting itself? So, buffers we use.
+
+\resetbuffer[sample]
+\resetbuffer[text]
+
+%D Both the sample and explanation are kind of windowed.
+
+\defineframedtext
+ [SampleText]
+ [width=\FrameWidth,height=\FrameHeight,offset=\FrameOffset,
+ frame=off,align=normal,strut=no,before=,after=,
+ background={background,nextpage}]
+
+%D We safe some keying in by combining things in one macro.
+
+\def\DoSampleText#1#2#3% kind layer overlays
+ {\setupframedtexts[SampleText][background={background,#3}]
+ \setlayer[#2]
+ {\startSampleText[none]
+ \setups[#1]
+ \getbuffer[#1]
+ \stopSampleText}}
+
+\def\StartSample{\dostartbuffer[sample][StartSample][StopSample]}
+\def\StartText {\dostartbuffer[text] [StartText] [StopText]}
+
+%D The following definitions apply at the outer level.
+
+\def\StopSample
+ {\startstandardmakeup
+ \DoSampleText{sample}{common}{nextpage}
+ \stopstandardmakeup
+ \resetbuffer[sample]}
+
+\def\StopText
+ {\startstandardmakeup
+ \DoSampleText{text}{common}{topic,nextpage}
+ \stopstandardmakeup
+ \resetbuffer[text]}
+
+\setupbackgrounds[page][background={color,nextpage}]
+\setupbackgrounds[text][background=common]
+
+%D When we combine sample and text, we get slightly
+%D different definitions. As you can see we generate two
+%D pages. Watch how we manipulate the order of the
+%D overlays and teh nature of the buttons. Here data
+%D abstraction really pays off.
+
+\def\StartIdea
+ {\bgroup
+ \let\StopSample\relax
+ \let\StopText \relax}
+
+\def\StopIdea%
+ {\setupbackgrounds[page][background={color,skippage}]
+ \setupbackgrounds[text][background={text,sample}]
+ \startstandardmakeup
+ \DoSampleText{sample}{sample}{previouspage}
+ \DoSampleText{text} {text} {topic,nextpage}
+ \stopstandardmakeup
+ \setupbackgrounds[page][background={color,nextpage}]
+ \setupbackgrounds[text][background={sample,text}]
+ \startstandardmakeup
+ \DoSampleText{sample}{sample}{previouspage}
+ \DoSampleText{text} {text} {topic,nextpage}
+ \stopstandardmakeup
+ \egroup}
+
+%D The rest of the definitions takes care of the title page.
+%D Please don't steal this one for your own documents.
+
+\defineoverlay[joke] [\useMPgraphic{joke}{n=0}] % not to be changed!
+
+\startuseMPgraphic{joke}{n}
+ StartPage ;
+ path p, q ; numeric w ; pair xy ;
+ set_grid(OverlayWidth,OverlayHeight,OverlayWidth/8,OverlayHeight/8) ;
+ if \MPvar{n}=1 :
+ p := fulldiamond ; fill Page withcolor \MPcolor{TextColor} ;
+ else :
+ p := fullsquare ; fill Page withcolor \MPcolor{PageColor} ;
+ fi ;
+ forever :
+ xy := center Page randomized (OverlayWidth,OverlayHeight) ;
+ if new_on_grid(xpart xy, ypart xy) :
+ q := (p xyscaled (OverlayWidth/5,OverlayHeight/5))
+ randomized (\FrameSkip,\FrameSkip)
+ shifted xy ;
+ w := (\FrameSkip) randomized (\FrameSkip/2) ;
+ draw q withcolor \MPcolor{PageColor} withpen pencircle scaled (1.5w) ;
+ fill q withcolor \MPcolor{TextColor} ;
+ draw q withcolor \MPcolor{LineColor} withpen pencircle scaled ( w) ;
+ fi ;
+ exitif grid_full ;
+ endfor ;
+ StopPage ;
+\stopuseMPgraphic
+
+\defineoverlay[fuzzy][\useMPgraphic{fuzzy}]
+
+\startuseMPgraphic{fuzzy}
+ path p ; numeric w ;
+ p := (fullsquare xyscaled (OverlayWidth,OverlayHeight))
+ randomized (\FrameSkip,\FrameSkip) ;
+ w := (\FrameSkip) randomized (\FrameSkip/2) ;
+ draw p withcolor \MPcolor{PageColor} withpen pencircle scaled (1.5w) ;
+ fill p withcolor \MPcolor{TextColor} ;
+ draw p withcolor \MPcolor{LineColor} withpen pencircle scaled ( w) ;
+\stopuseMPgraphic
+
+%D This time we use a fit window, but with a slightly randomized
+%D frame, our trademark so to say.
+
+\def\StartTitlePage
+ {\bgroup
+ \setupbackgrounds[page][background={joke,nextpage}]
+ \startstandardmakeup
+ \switchtobodyfont[big]
+ \setupframedtexts
+ [SampleText]
+ [background=fuzzy,
+ foregroundcolor=PageColor,
+ width=fit,
+ height=fit,
+ align=middle]
+ \startSampleText[middle]
+ \bfd\setupinterlinespace
+ \def\\{\bfb\setupinterlinespace\vfil\def\\{\vfil}}}
+
+\def\StopTitlePage
+ {\stopSampleText
+ \stopstandardmakeup
+ \egroup}
+
+\def\TitlePage#1%
+ {\StartTitlePage#1\StopTitlePage}
+
+%D Let's nill some error prone presentation macros.
+
+\let\Subject \Topic
+\let\Topics \gobbleoneargument
+\let\Subjects \relax
+
+%D We will avoid \quote {overfull} messages.
+
+\dontcomplain
+
+\doifnotmode{demo}{\endinput}
+
+%D The (rather silly) demo section.
+
+\starttext
+
+\setupbodyfont[12pt]
+
+\TitlePage{Quotes, Quotes\\and more quotes}
+
+\StartIdea
+ \StartSample
+ \input knuth \par
+ \StopSample
+ \StartText
+ \Topic{Tufte}
+ \input tufte \par
+ \StopText
+ \StopIdea
+
+\StartIdea
+ \StartSample
+ \input materie \par
+ \StopSample
+ \StartText
+ \input reich \par
+ \StopText
+\StopIdea
+
+\StartText
+ \input tufte \par
+\StopText
+
+\StartIdea
+ \StartSample
+ \input knuth \par
+ \StopSample
+ \StartText
+ \input tufte \par
+ \StopText
+\StopIdea
+
+\stoptext
diff --git a/tex/context/modules/mkii/s-pre-10.mkii b/tex/context/modules/mkii/s-pre-10.mkii
new file mode 100644
index 000000000..a92e5af01
--- /dev/null
+++ b/tex/context/modules/mkii/s-pre-10.mkii
@@ -0,0 +1,308 @@
+%D \module
+%D [ file=s-pre-10,
+%D version=unknown,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment 10,
+%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 style is derived from the ninth style, which was
+%D used first at \EUROTEX\ 99 and later at \TUG\ 2000. This
+%D alternative build up a page.
+
+\startmode [demo]
+ \disablemode[demo] \usemodule[pre-09] \enablemode[demo]
+\stopmode
+
+\startnotmode [demo]
+ \usemodule[pre-09]
+\stopnotmode
+
+%D We use blue colors instead of yellow ones. Since we have
+%D used symbolic names, we can easily overload the existing
+%D scheme.
+
+\definecolor[LineColor][r=.40,g=.40,b=1.00]
+
+%D Here we don't use fixed dimensions, but fit the sample
+%D windows and derive the text windows's width from this one.
+
+\setupframedtexts
+ [SampleText]
+ [width=fit,height=fit,
+ background={background,nextpage}]
+
+%D The topic goes to the top right corner of the screen which
+%D means that it is positioned left down to the reference
+%D point. Watch how we make data on this layer (here only
+%D the topic but it can be more) persistent.
+
+\setuplayer
+ [topic]
+ [y=0pt,x=\makeupwidth,location=lb,state=repeat,
+ hoffset=-\FrameSkip,voffset=\FrameSkip]
+
+%D Clicking on the page brings us back.
+
+\setupbackgrounds
+ [page]
+ [background={previouspage,color,topic}]
+
+%D All layers end up on the text area. This could have been
+%D the page area too since these have the same dimensions.
+
+\setupbackgrounds
+ [text]
+ [background={common,sample,text}]
+
+%D Because we build up the text window step by step, we will
+%D separate the entries by white space.
+
+\startsetups [always]
+ \setupwhitespace[big]
+ \setupblank[big]
+\stopsetups
+
+%D The \type {\Topic} commands can be simplified to:
+
+\def\Topic#1%
+ {\resetlayer[topic]
+ \setlayer[topic]{\bfb\setstrut\color[TextColor]{#1}}}
+
+%D We also provide a way to erase the topic.
+
+\def\NoTopic
+ {\resetlayer[topic]}
+
+%D We have to redefine the structuring commands to support
+%D the resetting of buffer counters.
+
+\newcounter\TextN
+
+\def\StartSample
+ {\doglobal\newcounter\TextN
+ \dostartbuffer[sample][StartSample][StopSample]}
+
+\def\StartText
+ {\doglobal\newcounter\TextN
+ \dostartbuffer[text][StartText][StopText]}
+
+\def\StartSubText
+ {\doglobal\increment\TextN
+ \dostartbuffer[text-\TextN][StartSubText][StopSubText]}
+
+\def\StopText
+ {\startstandardmakeup
+ \DoSampleText{text}{common}{nextpage}
+ \stopstandardmakeup}
+
+\def\StopSubText
+ {\startstandardmakeup
+ \DoSampleText{text}{common}{nextpage}
+ \stopstandardmakeup}
+
+%D The \type {\DoSampleText} command is adapted to support
+%D addition of subtexts (each subtext goes into its own
+%D buffer).
+
+\def\DoSampleText#1#2#3%
+ {\setupframedtexts[SampleText][background={background,#3}]
+ \bgroup
+ \setups[#1]%
+ \setups[always]%
+ \setbox\nextbox=\hbox
+ {\startSampleText[none]
+ \getbuffer[#1]\par
+ \doif{#1}{text}
+ {\dorecurse{\TextN}{\getbuffer[text-\recurselevel]\par}}
+ \stopSampleText}
+ \xdef\SampleTextWidth{\the\wd\nextbox}
+ \setlayer[#2]{\box\nextbox}%
+ \egroup}
+
+%D Since we are no longer swapping windows, we end up with a
+%D much simplier \type {\Stopidea} macro. We don't reset
+%D samples at the inner level.
+
+\def\StartIdea%
+ {\bgroup
+ \let\StopSample \relax
+ \let\StopText \relax
+ \let\StopSubText\relax
+ \def\StartSample{\dostartbuffer[sample][StartSample][StopSample]}}
+
+\def\StopIdea%
+ {\startstandardmakeup
+ \DoSampleText{sample}{sample}{nextpage}
+ \SetTextWidth
+ \DoSampleText{text} {text} {nextpage}
+ \stopstandardmakeup
+ \egroup}
+
+%D Here we determine the width of the text window. It is
+%D derived from the width of the sample and stays the same
+%D within a sequence.
+
+\def\SetTextWidth
+ {\ifnum\TextN<1 % yes or no, may change
+ \scratchdimen=\makeupwidth
+ \advance\scratchdimen by -\SampleTextWidth
+ \advance\scratchdimen by \FrameSkip
+ \xdef\SampleWidth{\the\scratchdimen}%
+ \fi
+ \setupframedtexts
+ [SampleText]
+ [width=\SampleWidth]}
+
+%D We use the (already implemented) second alternative of
+%D the titlepage graphic. Please don't change this.
+
+\defineoverlay[joke] [\useMPgraphic{joke}{n=1}] % not to be changed !
+
+\doifnotmode{demo}{\endinput}
+
+%D The demo section. The original presentation uses proper
+%D graphics and has better spacing.
+
+\def\SomeSymbol#1#2{\definedfont[ContextNavigation at #1]\char#2}
+
+\setupcombinations[distance=\FrameOffset,inbetween=\vskip\FrameOffset]
+
+\starttext
+
+\TitlePage{Some Famous Symbols}
+
+\Topic{Symbols}
+
+\StartSample
+ \startcombination[2*2]
+ {\SomeSymbol{5cm}{1}} {}
+ {\SomeSymbol{5cm}{3}} {}
+ {\SomeSymbol{5cm}{2}} {}
+ {\SomeSymbol{5cm}{4}} {}
+ \stopcombination
+\StopSample
+
+\Topic{Previous}
+
+\StartIdea
+ \StartSample
+ \SomeSymbol{7cm}{1}
+ \StopSample
+ \StartText
+ This symbol can be used to indicate a hyperlink to a
+ previous page.
+ \StopText
+\StopIdea
+
+\StartIdea
+ \StartSubText
+ As one can expect there is also a symbol for going to
+ the next page.
+ \StopSubText
+\StopIdea
+
+\Topic{Previous}
+
+\StartIdea
+ \StartSample
+ \SomeSymbol{9cm}{2}
+ \StopSample
+ \StartText
+ This symbol is actually just a mirrored version of the
+ first symbol we showed.
+ \StopText
+\StopIdea
+
+\NoTopic
+
+\StartText
+ Is this nice or not?
+\StopText
+
+\Topic{First and Last}
+
+\StartSample
+ \SomeSymbol{11cm}{3}
+\StopSample
+
+\StartSample
+ \SomeSymbol{11cm}{4}
+\StopSample
+
+\StartIdea
+ \StartSample
+ \SomeSymbol{5cm}{3}
+ \StopSample
+ \StartText
+ A few screens back, we saw this symbol.
+ \StopText
+\StopIdea
+
+\StartIdea
+ \StartSubText
+ This symbol represents the beginning of something.
+ \StopSubText
+\StopIdea
+
+\StartIdea
+ \StartSample
+ \SomeSymbol{5cm}{4}
+ \StopSample
+ \StartSubText
+ Just like this one represents an end.
+ \StopSubText
+\StopIdea
+
+\StartIdea
+ \StartSubText
+ They look just like the symbols found on audio and
+ video players.
+ \StopSubText
+\StopIdea
+
+\Topic{Summary}
+
+\StartIdea
+ \StartSample
+ \SomeSymbol{6cm}{1}
+ \StopSample
+ \StartText
+ So we have a symbol for previous \unknown
+ \StopText
+\StopIdea
+
+\StartIdea
+ \StartSample
+ \SomeSymbol{6cm}{2}
+ \StopSample
+ \StartSubText
+ \unknown\ and one for next \unknown
+ \StopSubText
+\StopIdea
+
+\StartIdea
+ \StartSample
+ \SomeSymbol{6cm}{3}
+ \StopSample
+ \StartSubText
+ \unknown\ and yet another for first \unknown
+ \StopSubText
+\StopIdea
+
+\StartIdea
+ \StartSample
+ \SomeSymbol{6cm}{4}
+ \StopSample
+ \StartSubText
+ \unknown\ and of course for last.
+ \StopSubText
+\StopIdea
+
+\stoptext
+
diff --git a/tex/context/modules/mkii/s-pre-11.mkii b/tex/context/modules/mkii/s-pre-11.mkii
new file mode 100644
index 000000000..0c445054f
--- /dev/null
+++ b/tex/context/modules/mkii/s-pre-11.mkii
@@ -0,0 +1,220 @@
+%D \module
+%D [ file=s-pre-11,
+%D version=1999.08.20,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment 11,
+%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.
+
+\setuppapersize
+ [S6][S6]
+
+\setuplayout
+ [topspace=0cm,
+ backspace=0cm,
+ header=0pt,
+ footer=0pt,
+ width=middle,
+ height=middle]
+
+\setupbodyfont
+ [14.4pt,lbr]
+
+\setupcolors
+ [state=start]
+
+\setupinteraction
+ [click=no,
+ display=new,
+ state=start]
+
+\setupinteractionscreen
+ [option=max]
+
+\unexpanded\def\SomeShape
+ {\resetMPdrawing
+ \startMPdrawing
+ path p[], q[] ; pair a, b ;
+ StartPage ;
+ \stopMPdrawing
+ \dorecurse{\CurrentTopic}
+ {\startMPdrawing
+ initialize_box(\MPpos{topic-\realfolio-\recurselevel}) ;
+ p[\recurselevel] := tensecircle (wxy,hxy,.25cm) shifted cxy ;
+ fill p[\recurselevel] withcolor .9white ;
+ pickup pencircle scaled .25cm ;
+ if \recurselevel = \CurrentTopic :
+ draw p[\recurselevel] withcolor \MPcolor{ShowColor} ;
+ else :
+ draw p[\recurselevel] withcolor \MPcolor{DoneColor} ;
+ fi ;
+ \stopMPdrawing}%
+ \dorecurse{\CurrentMaxItem}
+ {\startMPdrawing
+ initialize_box(\MPpos{item-\realfolio-\recurselevel}) ;
+ linewidth := .25cm ;
+ q[\recurselevel] := tensecircle (wxy,hxy,linewidth) shifted cxy ;
+ fill q[\recurselevel] withcolor .9white ;
+ pickup pencircle scaled linewidth ;
+ if \recurselevel = \CurrentMaxItem :
+ draw q[\recurselevel] withcolor \MPcolor{ShowColor} ;
+ else :
+ draw q[\recurselevel] withcolor \MPcolor{DoneColor} ;
+ fi ;
+ \stopMPdrawing}%
+ \dostepwiserecurse{2}{\CurrentTopic}{1}
+ {\startMPdrawing
+ draw
+ rt point 3 of p[\recurselevel-1] --
+ lft point 7 of p[\recurselevel]
+ withcolor \MPcolor{ArrowColor} ;
+ \stopMPdrawing}%
+ \dostepwiserecurse{2}{\CurrentMaxItem}{1}
+ {\startMPdrawing
+ draw
+ bot point 9 of q[\recurselevel-1] --
+ top point 5 of q[\recurselevel]
+ withcolor \MPcolor{ArrowColor} ;
+ \stopMPdrawing}%
+ \startMPdrawing
+ draw Page
+ withpen pencircle scaled .5cm
+ withcolor \MPcolor{EdgeColor} ;
+ StopPage ;
+ \stopMPdrawing
+ \MPdrawingdonetrue
+ \getMPdrawing}
+
+\unexpanded\def\TitlePage#1%
+ {\startstandardmakeup
+ \setupalign[middle]
+ \def\\{\vfil\bfb\setupinterlinespace}
+ \bfd\setupinterlinespace
+ \vfil#1\vfil\vfil
+ \stopstandardmakeup}
+
+\definecolor[PageColor][r=.5,g=.4,b=.3]
+\definecolor[LineColor][r=.7,g=.6,b=.5]
+
+\definecolor[PageColor] [s=.60]
+\definecolor[ShowColor] [r=.40]
+\definecolor[EdgeColor] [g=.40]
+\definecolor[DoneColor] [r=.40,g=.40]
+\definecolor[ArrowColor] [b=.40]
+\definecolor[LineColor] [r=.60,g=.60]
+\definecolor[GotoColor] [ArrowColor]
+
+\setupinteraction[color=GotoColor,contrastcolor=GotoColor]
+
+\defineoverlay [shape] [\SomeShape]
+\defineoverlay [next] [\overlaybutton{forward}] % [{nextpage}]
+
+\setupbackgrounds
+ [page]
+ [background={color,next,shape},
+ backgroundcolor=PageColor]
+
+\doglobal\newcounter\CurrentMaxItem
+\doglobal\newcounter\CurrentItem
+\doglobal\newcounter\CurrentTopic
+
+\unexpanded\def\StartIdea
+ {\doglobal\newcounter\CurrentItem}
+
+\unexpanded\def\StartTopic
+ {\doglobal\increment\CurrentTopic
+ \dostartbuffer[topic-\CurrentTopic][StartTopic][StopTopic]}
+
+\unexpanded\def\StopIdea
+ {\dorecurse{\CurrentItem}
+ {\let\CurrentMaxItem\recurselevel
+ \doStopIdea}}
+
+\unexpanded\def\doStopIdea
+ {\startstandardmakeup
+ \dontcomplain
+ \vskip.875cm
+ \hbox to \makeupwidth
+ {\hfill
+ \dorecurse{\CurrentTopic}
+ {\edef\Topic{topic-\realfolio-\recurselevel}%
+ \hpos
+ {\Topic}
+ {\framed
+ [frame=off,align=middle,offset=.25cm]
+ {\getbuffer[topic-\recurselevel]}}%
+ \ifnum\recurselevel<\CurrentTopic
+ \hskip.875cm
+ \fi}%
+ \hfill}
+ \vskip.875cm
+ \vfilll
+ \dorecurse{\CurrentMaxItem}
+ {\edef\Item{item-\realfolio-\recurselevel}
+ \hbox to \makeupwidth
+ {\hfill
+ \hpos
+ {\Item}
+ {\framed
+ [width=.75\makeupwidth,
+ frame=off,
+ align=middle,offset=.125cm]
+ {\getbuffer[item-\recurselevel]}}%
+ \hfill}
+ \vskip.875cm}
+ \vfilll
+ \stopstandardmakeup}
+
+\unexpanded\def\StartItem
+ {\doglobal\increment\CurrentItem
+ \dostartbuffer[item-\CurrentItem][StartItem][StopItem]}
+
+\lefthyphenmin =\maxdimen
+\righthyphenmin=\maxdimen
+
+% \doifnotmode{demo}{\endinput}
+
+\starttext
+
+\StartIdea
+ \StartTopic
+ A Nice Idea
+ \StopTopic
+ \StartItem
+ \input reich \relax
+ \StopItem
+ \StartItem
+ \input reich \relax
+ \StopItem
+ \StartItem
+ \input reich \relax
+ \StopItem
+\StopIdea
+
+\StartIdea
+ \StartTopic
+ One More Nice Idea
+ \StopTopic
+ \StartItem
+ \input reich \relax
+ \StopItem
+ \StartItem
+ \input reich \relax
+ \StopItem
+\StopIdea
+
+\StartIdea
+ \StartTopic
+ The Last Idea
+ \StopTopic
+ \StartItem
+ \input tufte \relax
+ \StopItem
+\StopIdea
+
+\stoptext
diff --git a/tex/context/modules/mkii/s-pre-14.mkii b/tex/context/modules/mkii/s-pre-14.mkii
new file mode 100644
index 000000000..c137df863
--- /dev/null
+++ b/tex/context/modules/mkii/s-pre-14.mkii
@@ -0,0 +1,263 @@
+%D \module
+%D [ file=s-pre-14,
+%D version=1999.08.20,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment 14,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D In the process of making a couple of simple styles for
+%D \EUROTEX\ 99, I came to this one. The joke is in the
+%D pagenumber. This style can be used for short presentations
+%D with much text.
+
+\startmode[asintended] \setupbodyfont[lbr] \stopmode
+
+\setupbodyfont[14.4pt]
+
+%D Since we expect text, we can best be very tolerant.
+
+\setuptolerance
+ [verytolerant,stretch]
+
+%D As most styles we choose a large screen page size.
+
+\setuppapersize
+ [S6][S6]
+
+\setuplayout
+ [width=fit,
+ rightedge=3cm,
+ margin=0pt,
+ rightedgedistance=2cm,
+ height=middle,
+ header=0pt,
+ footer=0pt,
+ topspace=1cm,
+ backspace=1cm]
+
+%D We only use two colors, named \type {One} and \type
+%D {Two}:
+
+\setupcolors
+ [state=start]
+
+\definecolor [One] [r=.6,g=.4,b=.4]
+\definecolor [Two] [r=.4,g=.6,b=.6]
+
+%D If you've looked at the demo file, you will have noticed
+%D that the background consists of four pieces: two filled
+%D rectangles and two half numbers. These are put on th epage
+%D using four overlays:
+
+\setupbackgrounds
+ [page]
+ [background={one,two,three,four}]
+
+%D When we code this in \TEX, we get the following
+%D definitions. As an alternative we coudl have used layers
+%D but I'm afraid that it would not have led to less code.
+
+\defineoverlay
+ [one]
+ [{\framed
+ [frame=off,background=color,backgroundcolor=Two,
+ width=\overlaywidth,height=\overlayheight]
+ {}}]
+
+\defineoverlay
+ [three]
+ [{\hbox to \overlaywidth
+ {\hfill\SetOverlayWidth
+ \framed
+ [frame=off,background=color,backgroundcolor=One,
+ width=\overlaywidth,height=\overlayheight]
+ {}}}]
+
+%D We could have used the main backgroundcolor instead of
+%D overlay \type {one}.
+
+\definefont[NumberFont][RegularBold at 3cm]
+
+\defineoverlay
+ [two]
+ [{\framed
+ [frame=off,width=\overlaywidth,height=\overlayheight,
+ offset=overlay]
+ {\vfill
+ \NumberFont\setstrut\SetOverlayWidth
+ \hbox to \hsize
+ {\hfill
+ \setupinteraction[style=,color=]%
+ \setbox0=\hbox{\strut\One\pagenumber}%
+ \hbox to 0pt{\hss\gotobox{\box0}[previouspage]\hss}%
+ \hskip\overlaywidth}}}]
+
+\defineoverlay
+ [four]
+ [{\framed
+ [frame=off,width=\overlaywidth,height=\overlayheight,offset=overlay]
+ {\vfill
+ \hbox to \hsize
+ {\hfill
+ \SetOverlayWidth
+ \framed
+ [frame=off,width=\overlaywidth,height=\overlayheight,offset=overlay]
+ {\vfill\NumberFont\setstrut
+ \setbox0=\hbox{\strut\Two\pagenumber}%
+ \setbox2=\hbox{\clip[nx=2,ny=1,x=2,y=1]{\copy0}}%
+ \dp2=\dp0
+ \hbox to \hsize{\hbox to 0pt{\hss\hskip.5\wd0\box2\hss}\hfill}}}}}]
+
+\def\SetOverlayWidth%
+ {\scratchdimen = \rightedgedistance
+ \divide\scratchdimen by 2
+ \advance\scratchdimen by \rightedgewidth
+ \advance\scratchdimen by \backspace
+ \edef\overlaywidth{\the\scratchdimen}}
+
+%D A much cleaner implementation is the following. If you hate
+%D \METAPOST, you can run this style in the specified mode:
+
+\startnotmode[no-metapost]
+
+\setupbackgrounds
+ [page]
+ [background={number}]
+
+\defineoverlay[number][\useMPgraphic{number}]
+
+\startuseMPgraphic{number}
+ StartPage ;
+ path Vage ; picture Left, Right ;
+ x1 = x2 = xpart (llcorner Field[Text][RightEdge] shifted (-RightEdgeDistance/2,0)) ;
+ y1 = ypart llcorner Page ;
+ y2 = ypart ulcorner Page ;
+ Vage := llcorner Page -- z1 -- z2 -- ulcorner Page -- cycle ;
+ fill Page withcolor \MPcolor {One} ;
+ fill Vage withcolor \MPcolor {Two} ;
+ if PageNumber>0 :
+ defaultfont := "\truefontname{RegularBold}" ;
+ Left := Right := thelabel("\folio",origin) ysized 3cm ;
+ clip Right to boundingbox Right shifted (bbwidth(Right)/2,0) ;
+ draw Left shifted z1 shifted (0,2.25cm) withcolor \MPcolor {One} ;
+ draw Right shifted z1 shifted (0,2.25cm) withcolor \MPcolor {Two} ;
+ fi ;
+ StopPage ;
+\stopuseMPgraphic
+
+\stopnotmode
+
+%D We use the simple label typesetting present in \METAPOST\
+%D because digits are seldom kerned so real \TEX ing is not
+%D needed. As in the previous method, we let the graphics
+%D overlap so that we don't get white lines due to rounding
+%D problems in viewers.
+%D
+%D We put a button behind the text (this overlay is calculated
+%D each page).
+
+\defineoverlay
+ [nextpage]
+ [\overlaybutton{nextpage}]
+
+\setupbackgrounds
+ [text]
+ [backgroundoffset=.5cm,
+ background=nextpage]
+
+%D We still have to turn on interaction mode.
+
+\setupinteraction
+ [state=start,
+ display=new,
+ menu=on]
+
+\setupinteraction
+ [color=,
+ contrastcolor=]
+
+%D Next we define structuring commands.
+
+\definehead[Topic] [chapter] \setuphead[Topic] [style=\bfc]
+\definehead[Subject][section] \setuphead[Subject][style=\bfa]
+
+\setuphead
+ [Topic,Subject]
+ [number=no,
+ after={\blank[big]}]
+
+%D Because we will provide a menu, we don't offer lists.
+
+\let\Topics \gobbleoneargument
+\let\Subjects\relax
+
+%D The table of contents goes to the right edge.
+
+\startinteractionmenu[right]
+ \setupinteraction
+ [color=black,
+ contrastcolor=Two]
+ \placelist
+ [Topic]
+ [alternative=e,
+ frame=off,
+ criterium=all]
+ \vfill
+\stopinteractionmenu
+
+\setuplist
+ [Topic]
+ [width=\rightedgewidth,
+ maxwidth=\rightedgewidth,
+ style=\bfa]
+
+%D We safe some space:
+
+\setupwhitespace
+ [medium]
+
+\setupblank
+ [medium]
+
+%D In the titlepage, we still use the \TEX\ overlays,
+%D so that we don't have to define a second graphic.
+
+\def\TitlePage#1%
+ {\StartTitlePage#1\StopTitlePage}
+
+\def\StartTitlePage%
+ {\bgroup
+ \setupbackgrounds[page][background={one,three}]
+ \startstandardmakeup
+ \setupalign[middle]
+ \def\\{\vfil\bfb\setupinterlinespace}
+ \bfd\setupinterlinespace
+ \vfil}
+
+\def\StopTitlePage%
+ {\vfil\vfil\vfil
+ \stopstandardmakeup
+ \egroup}
+
+%D This is it.
+
+\doifnotmode{demo}{\endinput}
+
+\starttext
+
+\TitlePage{Some Quotes\\(that you probably know by now)}
+
+\Topic{Tufte} \input tufte
+\Topic{Knuth} \input knuth
+\Topic{Reich} \input reich
+\Topic{Zapf} \input zapf
+\Topic{Materie} \input materie
+%Topic{Stork} \input stork
+
+\stoptext
diff --git a/tex/context/modules/mkii/s-pre-15.mkii b/tex/context/modules/mkii/s-pre-15.mkii
new file mode 100644
index 000000000..d1d8053b6
--- /dev/null
+++ b/tex/context/modules/mkii/s-pre-15.mkii
@@ -0,0 +1,186 @@
+%D \module
+%D [ file=s-pre-15,
+%D version=1999.09.01,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment 15,
+%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 one of the styles I made for the presentation on
+%D the \NTS\ project at Euro\TeX\ 1998. You need balls to let
+%D \TEX\ typeset graphics, but this style demonstrates that it
+%D can be done.
+%D
+%D This presentation is meant for presentations that build up
+%D an idea stepwise.
+%D
+%D \starttyping
+%D \TitlePage{Do you know \TEX ?}
+%D
+%D \StartIdea
+%D \StartItem We use \TEX\ for typesetting \unknown \StopItem
+%D \StartItem mathematical text \unknown \StopItem
+%D \StartItem but also for text that has no math \unknown \StopItem
+%D \StartItem or presentations like this \unknown \StopItem
+%D \StartItem and whatever you can come up with! \StopItem
+%D \StopIdea
+%D \stoptyping
+
+%D The basic layout is rather simple and used as much of the
+%D screen as possible.
+
+\setuppapersize
+ [S6][S6]
+
+\setuplayout
+ [backspace=25pt,
+ topspace=25pt,
+ width=middle,
+ height=middle,
+ header=0pt,
+ footer=0pt]
+
+\setupinteraction
+ [state=start,
+ display=new,
+ color=LineColor,
+ contrastcolor=LineColor,
+ click=no]
+
+\setupinteractionscreen
+ [option=max]
+
+\startmode[asintended] \setupbodyfont[lbr] \stopmode
+
+\setupbodyfont[14.4pt]
+
+%D We use a lot of color. You can remap them if you want
+%D different ones. The ideas circulate over the colors.
+
+\setupcolors
+ [state=start]
+
+\definecolor[TextColor][s=.8]
+\definecolor[PageColor][s=.6]
+\definecolor[LineColor][s=.4]
+
+\definecolor[red] [r=.4] \definecolor[cyan] [g=.4,b=.4]
+\definecolor[green][g=.4] \definecolor[magenta][r=.4,b=.4]
+\definecolor[blue] [b=.4] \definecolor[yellow] [r=.4,g=.4]
+
+\definecolor[linecolor 1][red] \definecolor[linecolor 5][cyan]
+\definecolor[linecolor 2][green] \definecolor[linecolor 6][magenta]
+\definecolor[linecolor 3][blue] \definecolor[linecolor 4][yellow]
+
+%D We use variables to make sure that the graphics are reused
+%D but unique.
+
+\setupMPvariables[pageframe][pagecolor=PageColor,linecolor=LineColor]
+\setupMPvariables[textframe][textcolor=TextColor,linecolor=LineColor]
+
+\setupbackgrounds
+ [page]
+ [background={pageframe,nextpage}]
+
+\defineoverlay [pageframe] [\uniqueMPgraphic{pageframe}]
+\defineoverlay [textframe] [\uniqueMPgraphic{textframe}]
+\defineoverlay [nextpage] [\overlaybutton{forward}]
+
+\startuniqueMPgraphic{pageframe}{pagecolor,linecolor}
+ path p ; p := fullsquare xyscaled (OverlayWidth,OverlayHeight) ;
+ pickup pencircle scaled 10pt ;
+ fill p withcolor \MPvar{pagecolor} ;
+ draw p withcolor \MPvar{linecolor} ;
+\stopuniqueMPgraphic
+
+\startuniqueMPgraphic{textframe}{textcolor,linecolor}
+ path p ; p := fullcircle xyscaled (OverlayWidth,OverlayHeight) ;
+ pickup pencircle scaled 10pt ;
+ fill p withcolor \MPvar{textcolor} ;
+ draw p withcolor \MPvar{linecolor} ;
+\stopuniqueMPgraphic
+
+%D The rest of the file implements the nasty part: typesetting
+%D text embedded in a graphic. The text is collected in a box
+%D so that we can reuse it.
+
+\newbox\CollectedIdeas
+\newcounter\CurrentTopic
+
+\def\StartItem%
+ {\setbox\CollectedIdeas=\hbox\bgroup
+ \ifdim\wd\CollectedIdeas>0pt \unhbox\CollectedIdeas\hskip25pt \fi
+ \setbox\scratchbox=\hbox\bgroup
+ \framed
+ [width=160pt,height=160pt,align=middle,frame=off,
+ background=textframe,offset=15pt,top=\vfill,bottom=\vfill]
+ \bgroup}
+
+\def\StopItem%
+ {\egroup
+ \egroup
+ \setbox\scratchbox=\hbox{\lower.5\ht\scratchbox\box\scratchbox}%
+ \ht\scratchbox=.5\ht\scratchbox
+ \dp\scratchbox= \ht\scratchbox
+ \box\scratchbox
+ \egroup
+ \startstandardmakeup
+ \dontcomplain
+ \leftskip 0pt plus 50pt
+ \rightskip 0pt plus 50pt
+ \parfillskip 0pt
+ \baselineskip 100pt
+ \unhcopy\CollectedIdeas
+ \stopstandardmakeup}
+
+\def\StartIdea%
+ {\ifnum\CurrentTopic=6 \doglobal\newcounter\CurrentTopic \fi
+ \doglobal\increment\CurrentTopic
+ \definecolor[LineColor][linecolor \CurrentTopic]
+ \setbox\CollectedIdeas=\null}
+
+\def\StopIdea%
+ {}
+
+\def\StartTitlePage%
+ {\startstandardmakeup
+ \setupalign[middle]
+ \def\\{\vfil\bfb\setupinterlinespace}
+ \bfd\setupinterlinespace
+ \vfil}
+
+\def\StopTitlePage%
+ {\vfil\vfil
+ \stopstandardmakeup}
+
+\def\TitlePage#1%
+ {\StartTitlePage#1\StopTitlePage}
+
+\doifnotmode{demo}{\endinput}
+
+%D A simple test on functionality.
+
+\setupoutput[pdftex]
+
+\starttext
+
+\TitlePage{Do you know \TEX ?}
+
+\startbuffer
+\StartIdea
+ \StartItem We use \TEX\ for typesetting \unknown \StopItem
+ \StartItem mathematical text \unknown \StopItem
+ \StartItem but also for text that has no math \unknown \StopItem
+ \StartItem or presentations like this \unknown \StopItem
+ \StartItem and whatever you can come up with! \StopItem
+\StopIdea
+\stopbuffer
+
+\dorecurse{6}{\getbuffer}
+
+\stoptext
diff --git a/tex/context/modules/mkii/s-pre-19.mkii b/tex/context/modules/mkii/s-pre-19.mkii
new file mode 100644
index 000000000..991d311ce
--- /dev/null
+++ b/tex/context/modules/mkii/s-pre-19.mkii
@@ -0,0 +1,347 @@
+%D \module
+%D [ file=s-pre-19,
+%D version=2000.07.31,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment 19,
+%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 style is made in the process or writing the \METAFUN\
+%D manual. It exploits a few tricks, like graphics calculated
+%D using positional information. It also uses the (at that
+%D moment) new menu list placement alternative. If you forget
+%D about the definition of the button shapes, which is
+%D complicated in any system, this style is not even that hard
+%D to follow. Watch how the left side of the buttons follow
+%D the right side of the text graphic.
+%D
+%D While playing bit with this style, the random alternative
+%D made me think of those organic building with non equal
+%D windows (we have a few in The Netherlands), so I decided to
+%D label this style as \type {pre-organic}.
+%D
+%D At the end of this file, there is a small test file, so
+%D when you process this file with \TEXEXEC\ and the options
+%D \type {--mode=demo} and \type {--pdf}, you will get a demo
+%D document.
+
+%D We use one of the standard screen \quote {paper} sizes, and
+%D map it onto the same size, so that we get a nicely cropped
+%D page.
+
+\setuppapersize
+ [S6][S6]
+
+%D Like in the \METAFUN\ manual, we use the Palatino as main
+%D bodyfont. This font is quite readable on even low
+%D resolution screens, although I admit that this style is
+%D developed using an $1400\times1050$ pixel LCD screen, so I
+%D may be biased.
+
+%\startmode[asintended] \setupbodyfont[ppl] \stopmode
+
+%D The layout specification sets up a text area and a right
+%D edge area where the menus will go. Watch the rather large
+%D edge distance. By setting the header and footer dimensions
+%D to zero, we automatically get rid of page body ornaments,
+%D like the pagenumber.
+
+\setuplayout
+ [topspace=48pt,
+ backspace=48pt,
+ cutspace=12pt,
+ width=400pt,
+ margin=0cm,
+ rightedge=88pt,
+ rightedgedistance=48pt,
+ header=0cm,
+ footer=0cm,
+ height=middle]
+
+%D We use a moderate, about a line height, interparagraph
+%D white space.
+
+\setupwhitespace
+ [big]
+
+%D Of course we use colors, since on computer displays they
+%D come for free.
+
+\setupcolors
+ [state=start]
+
+\definecolor [red] [r=.75]
+\definecolor [yellow] [r=.75,g=.75]
+\definecolor [gray] [s=.50]
+\definecolor [white] [s=.85]
+
+\definecolor [PageColor] [yellow]
+\definecolor [TextColor] [white]
+\definecolor [OrnamentColor] [red]
+\definecolor [InteractionColor] [red]
+\definecolor [ContrastColor] [gray]
+
+%D This is an interactive document, so we enable interaction.
+%D In this style, we disable the viewer's \quote {highlight a
+%D hyperlink when it's clicked on} feature. We will use a
+%D menu, so we enable menus. Later we will see the contract
+%D color |<|hyperlinks gets that color when we are already on
+%D the location|>| in action.
+
+\setupinteraction
+ [state=start,
+ click=off,
+ color=InteractionColor,
+ contrastcolor=ContrastColor,
+ menu=on]
+
+%D The menu itself is set up as follows. Because we will
+%D calculate menubuttons based on their position on the page,
+%D we have to keep track of the positions. Therefore, we set
+%D the \type {position} variable to \type {yes}.
+
+\setupinteractionmenu
+ [right]
+ [frame=off,
+ position=yes,
+ align=middle,
+ topoffset=-.75cm,
+ bottomoffset=-.75cm,
+ color=gray,
+ contrastcolor=gray,
+ style=bold,
+ before=,
+ after=]
+
+%D The menu content is rather sober: a list of topics (later
+%D we will define the command that generates topic entries),
+%D and a close button.
+
+\startinteractionmenu[right]
+ \placelist[Topic][alternative=right]
+ \vfill
+ \but [CloseDocument] close \\
+\stopinteractionmenu
+
+%D We have now arived at the more interesting part of the style
+%D definition: the graphic that goes in the page background.
+%D Because this graphic will change, we define a usable
+%D \METAPOST\ graphic. Page backgrounds are recalculated each
+%D page, opposite to the other backgrounds that are calculated
+%D when a new background is defined, or when repetitive
+%D calculation is turned on.
+
+\setupbackgrounds
+ [page]
+ [background=page]
+
+\defineoverlay
+ [page]
+ [\useMPgraphic{page}]
+
+\setupMPvariables
+ [page]
+ [alternative=3]
+
+\startuseMPgraphic{page}
+
+ \includeMPgraphic{rightsuperbutton}
+
+ StartPage ;
+
+ path p, q ; pickup pencircle scaled 3pt ;
+
+ p := Field[Text][Text] enlarged 36pt superellipsed .90 ;
+
+ fill Page withcolor \MPcolor{PageColor} ;
+ fill p withcolor \MPcolor{TextColor} ;
+ draw p withcolor \MPcolor{OrnamentColor} ;
+
+ p := Field[Text][Text] enlarged 48pt superellipsed .90 ;
+
+ def right_menu_button (expr nn, rr, pp, xx, yy, ww, hh, dd) =
+ if (pp>0) and (rr>0) :
+ q := rightsuperbutton(p,xx,yy,RightEdgeWidth,hh) ;
+ fill q withcolor \MPcolor{TextColor} ;
+ draw q withcolor if rr=2 : \MPcolor{ContrastColor}
+ else : \MPcolor{InteractionColor} fi ;
+ fi ;
+ enddef ;
+
+ \MPmenubuttons{right}
+
+ StopPage ;
+\stopuseMPgraphic
+
+\startuseMPgraphic{page}
+
+ \includeMPgraphic{rightsuperbutton}
+
+ StartPage ;
+
+ numeric alternative, seed, superness, squeezeness, randomness ;
+ path p, q ; transform t ;
+
+ alternative := \MPvar{alternative} ;
+ seed := uniformdeviate 100 ;
+
+ if alternative > 10 :
+ superness := .85 + ((\realfolio-1)/\lastpage) * .15 ;
+ squeezeness := 12pt - ((\realfolio-1)/\lastpage) * 10pt ;
+ else :
+ superness := .90 ;
+ squeezeness := 12pt ;
+ fi ;
+
+ randomness := squeezeness ;
+
+ alternative := alternative mod 10 ;
+
+ t := identity if alternative=3: shifted (9pt,-9pt) fi ;
+
+ % first we draw the shape that surrounds the text
+
+ randomseed := seed ;
+
+ p := Field[Text][Text] enlarged if
+ alternative = 1 : 36pt superellipsed superness elseif
+ alternative = 2 : 36pt squeezed squeezeness elseif
+ alternative = 3 : 36pt randomized randomness else
+ : 36pt fi ;
+ pickup pencircle scaled 3pt ;
+
+ fill Page withcolor \MPcolor{PageColor} ;
+ fill p withcolor \MPcolor{TextColor} ;
+ draw p withcolor \MPcolor{OrnamentColor} ;
+
+ % we set p to the wider shape from which we will chip off pieces
+
+ randomseed := seed ;
+
+ p := ( Field[Text][Text] enlarged if
+ alternative = 1 : 48pt superellipsed superness elseif
+ alternative = 2 : 48pt squeezed squeezeness elseif
+ alternative = 3 : 36pt randomized randomness else
+ : 48pt fi ) transformed t ;
+
+ % calls to *_menu_button are generated automatically ...
+
+ vardef right_menu_button (expr nn, rr, pp, xx, yy, ww, hh, dd) =
+ save q ; path q ;
+ if (pp>0) and (rr>0) :
+ q := rightsuperbutton(p,xx,yy,RightEdgeWidth,hh) ; % \MPw{menu:right:\realfolio}
+ fill q withcolor \MPcolor{TextColor} ;
+ draw q withcolor if rr=2 : \MPcolor{ContrastColor}
+ else : \MPcolor{InteractionColor} fi ;
+ fi ;
+ enddef ;
+
+ % ... and inserted when the graphic data is flushed here ...
+
+ \MPmenubuttons{right}
+
+ StopPage ;
+\stopuseMPgraphic
+
+\startuseMPgraphic{rightsuperbutton}
+
+vardef rightsuperbutton (expr pat, xpos, ypos, wid, hei) =
+
+ save p, ptop, pbot, t, b, edge, shift, width, height ;
+ path p, ptop, pbot ; pair t, b ; numeric edge, shift, width, height ;
+
+ edge := xpos + wid ; shift := ypos + hei ;
+
+ p := rightpath pat ;
+
+ ptop := ((-infinity,shift)--(edge,shift)) ;
+ pbot := ((-infinity,shift-hei)--(edge,shift-hei)) ;
+
+ t := p intersection_point ptop ;
+ b := p intersection_point pbot ;
+
+ p := subpath(0,xpart (p intersectiontimes ptop)) of p ;
+ p := subpath(xpart (p intersectiontimes pbot),length(p)) of p ;
+
+ (p -- t -- point 1 of ptop &
+ point 1 of ptop -- point 1 of pbot &
+ point 1 of pbot -- b
+ -- cycle)
+
+enddef ;
+
+\stopuseMPgraphic
+
+%D Topics are identified with \type {\Topic}, which is an
+%D instance of chapter headings. The number is made invisible.
+%D Since it still is a numbered section header, \CONTEXT\ will
+%D write the header to the table of contents.
+
+\definehead
+ [Topic]
+ [chapter]
+
+\setuphead
+ [Topic]
+ [number=no]
+
+%D We will use a bold font in the table of contents. We also
+%D force a complete list.
+
+\setuplist
+ [Topic]
+ [criterium=all,
+ style=bold,
+ before=,
+ after=]
+
+%D The \type {\TitlePage} macro looks horrible, because we
+%D want to keep the interface simple: a list of small
+%D sentences, separated by \type {\\}.
+
+\def\StartTitlePage
+ {\startstandardmakeup
+ \switchtobodyfont[big]
+ \def\\{\vfill\bfb\let\\=\par}
+ \bfd\setupinterlinespace\gray
+ \vskip.5cm}
+
+\def\StopTitlePage
+ {\\\vskip.5cm % the \\ is really needed
+ \stopstandardmakeup}
+
+\def\TitlePage#1%
+ {\StartTitlePage#1\StopTitlePage}
+
+%D A couple of goodies:
+
+\def\Subject {\Topic}
+\def\Topics #1{}
+\def\Subjects {}
+
+%D For those who want to test:
+
+\doifnotmode{demo}{\endinput}
+
+\starttext
+
+\setupMPvariables[page][alternative=3]
+
+\TitlePage
+ {A Few Nice Quotes\\
+ A Simple Style Demo\\
+ Hans Hagen, August 2000}
+
+
+\Topic {Douglas R. Hofstadter} \input douglas \page
+\Topic {Donald E. Knuth} \input knuth \page
+\Topic {Edward R. Tufte} \input tufte \page
+\Topic {Hermann Zapf} \input zapf \page
+%Topic {David F. Stork} \input stork \page
+
+\stoptext
diff --git a/tex/context/modules/mkii/s-pre-61.mkii b/tex/context/modules/mkii/s-pre-61.mkii
new file mode 100644
index 000000000..48b9d09a0
--- /dev/null
+++ b/tex/context/modules/mkii/s-pre-61.mkii
@@ -0,0 +1,275 @@
+%D \module
+%D [ file=s-pre-61,
+%D version=2004.03.15,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment 61,
+%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 Optima
+
+\usemodule[pre-60]
+
+\doifmodeelse {mkiv} {
+ \usetypescriptfile[ghz]
+ \definetypeface[mainface][ss][sans][optima-nova][default]
+} {
+ \usetypescriptfile[type-ghz]
+ \definetypeface[mainface][ss][sans][optima-nova][default][encoding=\defaultencoding]
+}
+
+\setupbodyfont[mainface,ss,18pt]
+\setupinterlinespace[line=3.25ex]
+
+\setuppapersize
+ [S6][S6]
+
+% \setuppapersize
+% [SW][SW]
+
+\setuplayout
+ [topspace=10pt,
+ header=30pt,
+ headerdistance=20pt,
+ height=middle,
+ footerdistance=20pt,
+ footer=0pt,
+ bottomdistance=20pt,
+ bottom=20pt,
+ bottomspace=50pt,
+ backspace=30pt,
+ width=middle]
+
+\setupinteraction
+ [state=start,
+ click=off,
+ menu=on,
+ style=,
+ color=interactioncolor,
+ contrastcolor=interactioncolor]
+
+\setupinteractionscreen
+ [option=max]
+
+\setupinteractionmenu
+ [bottom]
+ [color=maincolor,
+ contrastcolor=maincolor,
+ style=\tfa, % acceptable
+ left=\hfill,
+ middle=,
+ right=,
+ height=\bottomheight,
+ width=2\bottomheight,
+ offset=overlay,
+ frame=off]
+
+\startinteractionmenu[bottom]
+ \but [firstpage] \symbol[firstpage] \\
+ \but [previouspage] \symbol[previouspage] \\
+ \but [InvokeStepper] \StartBusy\symbol[PauseRendering]\StopBusy \\
+ \but [nextpage] \symbol[nextpage] \\
+ \but [lastpage] \symbol[lastpage] \\
+ \but [CloseDocument] \symbol[CloseDocument] \\
+\stopinteractionmenu
+
+% maybe in colo-sjk : \setupcolor[sjk]
+
+\definecolor [dark] [s=.4]
+\definecolor [bright] [s=.9]
+
+\definecolor [red] [r=.4,g=.2,b=.2]
+\definecolor [green] [r=.2,g=.4,b=.2]
+\definecolor [blue] [r=.2,g=.2,b=.4]
+
+\definecolor [cyan] [r=.2,g=.4,b=.4]
+\definecolor [magenta][r=.4,g=.2,b=.4]
+\definecolor [yellow] [r=.4,g=.4,b=.2]
+
+\definecolor [pagecolor] [dark]
+\definecolor [maincolor] [bright]
+\definecolor [textcolor] [red]
+
+\definecolor [interactioncolor] [r=.8,g=.8,b=.6]
+
+\setupcolors
+ [state=start,
+ textcolor=maincolor]
+
+\setupbackgrounds
+ [page]
+ [background=page,
+ backgroundcolor=textcolor]
+
+\setupbackgrounds
+ [text]% [text]
+ [background={comments,text,invoke}]
+
+\definelayer
+ [text]
+ [width=\textwidth,
+ height=\textheight]
+
+\defineoverlay
+ [comments]
+ [{\setlayer[text][preset=middle]{\placecomments}}]
+
+\defineoverlay[page][\uniqueMPgraphic{page-\ifcase\realpageno\or one\else plus\fi}]
+
+\startuniqueMPgraphic{page-one}
+ StartPage ;
+ fill Page
+ enlarged 4pt
+ withcolor \MPcolor{pagecolor} ;
+ fill Field[Text][Text]
+ enlarged 10pt
+% topenlarged (HeaderHeight+HeaderDistance)
+ leftenlarged (BackSpace+4pt)
+ rightenlarged (CutSpace +4pt)
+ withcolor OverlayColor ;
+ StopPage ;
+\stopuniqueMPgraphic
+
+\startuniqueMPgraphic{page-plus}
+ StartPage ;
+ fill Page
+ enlarged 4pt
+ withcolor \MPcolor{pagecolor} ;
+ fill Field[Text][Text]
+ enlarged 10pt
+ leftenlarged (BackSpace+4pt)
+ rightenlarged (CutSpace+4pt)
+ withcolor OverlayColor ;
+ StopPage ;
+\stopuniqueMPgraphic
+
+% this needs to be sorted out !
+
+\appendtoks
+ \NormalizeFontHeight \HeadFont {\setstrut\strut\quad} {1.0\headerheight} {SansBold}
+ \NormalizeFontHeight \TitleFont {\setstrut\strut\quad} {2.0\headerheight} {SansBold}
+ \NormalizeFontHeight \SubTitleFont {\setstrut\strut\quad} {1.5\headerheight} {SansBold}
+ \NormalizeFontHeight \SubSubTitleFont {\setstrut\strut\quad} {1.0\headerheight} {SansBold}
+\to \everystarttext
+
+\appendtoks
+ \NormalizeFontHeight \HeadFont {\setstrut\strut\quad} {1.0\headerheight} {SansBold}
+ \NormalizeFontHeight \TitleFont {\setstrut\strut\quad} {2.0\headerheight} {SansBold}
+ \NormalizeFontHeight \SubTitleFont {\setstrut\strut\quad} {1.5\headerheight} {SansBold}
+ \NormalizeFontHeight \SubSubTitleFont {\setstrut\strut\quad} {1.0\headerheight} {SansBold}
+\to \everystoptext
+
+\setuphead
+ [chapter]
+ [placehead=empty,
+ after={\blank[medium]},
+ color=maincolor,
+ placenumber=no,
+ style=\HeadFont]
+
+\setupheadertexts
+ [\doiftextelse{\currentheadnumber}{\placeheadtext[Topic]}{\placeheadtext[Nopic]}]
+ []
+
+\setuppagenumbering
+ [location=]
+
+\definesymbol
+ [emdash]
+ [\emdash]
+
+\setupitemize
+ [each]
+ [loose,serried,joinedup,broad]
+ [symbol=emdash]
+
+\setupalign
+ [broad,right]
+
+\def\doTitlePage#1#2#3%
+ {\startstandardmakeup[headerstate=high]
+ \def\\{\def\\{\endgraf\quad\quad}\endgraf\quad\ignorespaces#2}%
+ #1\setstrut\setupinterlinespace\vfil#3\vfil\vfil
+ \stopstandardmakeup}
+
+\def\TitlePage {\doTitlePage\TitleFont\relax}
+\def\SubTitlePage{\doTitlePage\TitleFont\SubTitleFont}
+
+\definehead[Topic][chapter]
+\definehead[Nopic][title]
+
+\def\Topics#1%
+ {\Nopic[topics]{#1}
+ \startcolumns
+ \placelist[Topic]
+ \stopcolumns}
+
+\setuplist
+ [Topic]
+ [alternative=f,
+ color=maincolor,
+ contrastcolor=maincolor,
+ criterium=all]
+
+\defineoverlay[topics][\overlaybutton{topics}]
+
+\setupbackgrounds
+ [bottom] [text]
+ [background=topics]
+
+\continueifinputfile{s-pre-61.tex}
+
+\starttext
+
+\TitlePage{Stepwise\\Refinement}
+
+\Topics{Topics}
+
+\Topic{Female Artists}
+
+\StartSteps
+
+\startitemize
+\item Fiona Apple \FlushStep
+\item Tori Amos \FlushStep
+\item Kate Bush \FlushStep
+\item Heather Nova \FlushStep
+\item Alanis Morissette \FlushStep
+\item Suzanne Vega \FlushStep
+\stopitemize
+
+\StopSteps
+
+\Topic{Male Composers}
+
+\StartSteps
+
+\startitemize
+\item John Adams \FlushStep
+\item Steve Reich \FlushStep
+\item Louis Andriessen \FlushStep
+\item Olivier Messiaen \FlushStep
+\stopitemize
+
+\StopSteps
+
+\Topic{And Some More}
+
+\StartSteps
+
+\startitemize
+\item Mark Hollis \FlushStep
+\item Roger Waters \FlushStep
+\item David Gilmore \FlushStep
+\item Peter Gabriel \FlushStep
+\item Randy Newman \FlushStep
+\stopitemize
+
+\StopSteps
+
+\stoptext
diff --git a/tex/context/modules/mkii/s-pre-62.mkii b/tex/context/modules/mkii/s-pre-62.mkii
new file mode 100644
index 000000000..a1a405c23
--- /dev/null
+++ b/tex/context/modules/mkii/s-pre-62.mkii
@@ -0,0 +1,224 @@
+%D \module
+%D [ file=s-pre-62,
+%D version=2005.03.04,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment 62,
+%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 Melior
+
+\usemodule[pre-60]
+
+\usetypescriptfile
+ [type-ghz]
+
+\doifmodeelse {mkiv} {
+
+ \definetypeface[mainface][rm][serif][melior] [default]
+ \definetypeface[mainface][tt][mono] [modern] [default][rscale=1.05]
+ \definetypeface[mainface][ss][serif][melior] [default]
+ \definetypeface[mainface][mm][math] [palatino][default][rscale=0.95]
+
+} {
+
+ \definetypeface[mainface][rm][serif][melior] [default][encoding=texnansi]
+ \definetypeface[mainface][tt][mono] [modern] [default][encoding=texnansi,rscale=1.05]
+ \definetypeface[mainface][ss][serif][melior] [default][encoding=texnansi]
+ \definetypeface[mainface][mm][math] [palatino][default][encoding=texnansi,rscale=0.95]
+
+}
+
+\setupbodyfont
+ [mainface,14.4pt]
+
+\setuppapersize
+ [S6][S6]
+
+\setvariables[layout][dx=0,dy=1,nx=2,ny=2,step=64]
+
+\definemeasure[layoutwd][\dimexpr\paperwidth /\getvariable{layout}{step}\relax]
+\definemeasure[layoutht][\dimexpr\paperheight/\getvariable{layout}{step}\relax]
+
+\setuplayout
+ [ width=middle,
+ height=middle,
+ header=0pt,
+ footer=0pt,
+ margin=0pt,
+ backspace=5\measure{layoutwd},
+ topspace=5\measure{layoutht}]
+
+\definelayout
+ [step]
+ [ backspace=\numexpr2+ \getvariable{layout}{dx}\relax\measure{layoutwd},
+ cutspace=\numexpr3+\getvariable{layout}{nx}-\getvariable{layout}{dx}\relax\measure{layoutwd},
+ topspace=\numexpr2+ \getvariable{layout}{dy}\relax\measure{layoutht},
+ bottomspace=\numexpr3+\getvariable{layout}{ny}-\getvariable{layout}{dy}\relax\measure{layoutht}]
+
+\definecolor[layout:left] [t=.5,a=1,b=1]
+\definecolor[layout:right] [t=.5,a=1,r=1]
+\definecolor[layout:top] [t=.5,a=1,g=1]
+\definecolor[layout:bottom][t=.5,a=1,y=1]
+\definecolor[layout:page] [s=.75]
+
+\definehspace[menu][\measure{layoutwd}]
+
+\setupinteraction
+ [state=start,
+ click=off,
+ style=,
+ color=interactioncolor,
+ contrastcolor=interactioncolor]
+
+\setupinteractionscreen
+ [option=max]
+
+\setupbuttons
+ [color=maincolor,
+ contrastcolor=maincolor,
+ style=\tf, % acceptable
+ height=2\measure{layoutht},
+ width=2\measure{layoutwd},
+ offset=overlay,
+ frame=off]
+
+\definecolor[interactioncolor][darkgray]
+\definecolor[maincolor] [lightgray]
+
+\setuptexttexts
+ []
+ [\vbox to \textheight{\vfill\hfill\setups{menu:content}}]
+
+\startsetups menu:content
+
+ \button{\symbol[firstpage]}[firstpage]
+ \hspace[menu]
+ \button{\symbol[previouspage]}[previouspage]
+ \hspace[menu]
+ \button{\StartBusy\symbol[PauseRendering]\StopBusy}[InvokeStepper]
+ \hspace[menu]
+ \button{\symbol[nextpage]}[nextpage]
+ \hspace[menu]
+ \button{\symbol[lastpage]}[lastpage]
+ \hspace[menu]
+ \button{\symbol[CloseDocument]}[CloseDocument]
+
+\stopsetups
+
+\startuseMPgraphic{page}{step}
+ StartPage ;
+ numeric dx, dy ; dx := PaperWidth/\MPvar{step} ; dy := PaperHeight/\MPvar{step} ;
+ fill Page withcolor .5white ;
+ fill
+ ulcorner Page -- urcorner Page --
+ urcorner Page shifted (0,-TopSpace+dy) -- ulcorner Page shifted (0,-TopSpace+dy) -- cycle
+ withcolor \MPcolor{layout:top} ;
+ fill
+ llcorner Page -- lrcorner Page --
+ lrcorner Page shifted (0,BottomSpace-dy) -- llcorner Page shifted (0,BottomSpace-dy) -- cycle
+ withcolor \MPcolor{layout:bottom} ;
+ fill
+ ulcorner Page -- llcorner Page --
+ llcorner Page shifted (BackSpace-dx,0) -- ulcorner Page shifted (BackSpace-dx,0) -- cycle
+ withcolor \MPcolor{layout:left} ;
+ fill
+ urcorner Page -- lrcorner Page --
+ lrcorner Page shifted (-CutSpace+dx,0) -- urcorner Page shifted (-CutSpace+dx,0) -- cycle
+ withcolor \MPcolor{layout:right} ;
+ fill Field[Text][Text] enlarged (dx,dy) withcolor white ;
+ fill Field[Text][Text] enlarged (dx,dy) withcolor \MPcolor{layout:page} ;
+ StopPage ;
+\stopuseMPgraphic
+
+\defineoverlay[page][\useMPgraphic{page}{step=\getvariable{layout}{step}}]
+
+\setupbackgrounds
+ [page]
+ [background=page]
+
+\setupcolors
+ [state=start]
+
+\startsetups nextstep
+ % pagebreak handlers are grouped, so we need to set global
+ \ifnum\getvariable{layout}{dx}=\getvariable{layout}{nx}\relax
+ \ifnum\getvariable{layout}{dy}=\getvariable{layout}{ny}\relax
+ \setxvariables[layout][dy=1]
+ \else
+ \setxvariables[layout][dy=\the\numexpr\getvariable{layout}{dy}+1\relax]
+ \fi
+ \setxvariables[layout][dx=1]
+ \else
+ \setxvariables[layout][dx=\the\numexpr\getvariable{layout}{dx}+1\relax]
+ \fi
+ % global anyway
+ \setuplayout[step]
+\stopsetups
+
+\definefontsynonym[MainTitleFont][SerifBold]
+
+\definefont[ChapterTitleFont][MainTitleFont sa 2]
+
+\appendtoks
+ \NormalizeFontHeight \TitleFont {\setstrut\strut\quad} {4\lineheight} {MainTitleFont}
+ \NormalizeFontHeight \SubTitleFont {\setstrut\strut\quad} {3\lineheight} {MainTitleFont}
+ \NormalizeFontHeight \ChapterNumberFont {XVI} {4\lineheight} {MainTitleFont}
+\to \everystarttext
+
+\setupsection
+ [section-2]
+ [bodypartconversion=Romannumerals]
+
+\installpagebreakhandler {step} {\setups{nextstep}}
+
+\definepagebreak[chapter][yes,step]
+
+\setuphead
+ [chapter]
+ [page=chapter,
+ command=\MyChapterCommand]
+
+\definehead[Topic][chapter]
+\definehead[Nopic][title]
+
+\setuphead[chapter,Topic,Nopic]
+ [numberstyle=\ChapterNumberFont,
+ textstyle=\ChapterTitleFont,
+ numbercolor=lightgray,
+ textcolor=darkgray]
+
+\def\MyChapterCommand#1#2%
+ {\hbox \bgroup % we need to nil the strut added by the headplacement
+ \setupframed[frame=off,lines=4,offset=overlay]%
+ \rlap{\hskip2\lineheight\framed{\setnostrut#1}}\framed{#2}%
+ \egroup}
+
+\setupitemize
+ [each]
+ [R,broad]
+ [stopper=,
+ color=lightgray]
+
+\def\doTitlePage#1#2#3%
+ {\startstandardmakeup[headerstate=high,textstate=stop]
+ \setupalign[middle]
+ \def\\{\def\\{\endgraf}\endgraf\vfil\ignorespaces#2}%
+ \startcolor[darkgray]
+ #1\setstrut\setupinterlinespace\vfil#3\vfil
+ \stopcolor
+ \stopstandardmakeup}
+
+\def\TitlePage {\doTitlePage\TitleFont\relax}
+\def\SubTitlePage{\doTitlePage\TitleFont\SubTitleFont}
+
+\long\def\StartTitlePage #1\StopTitlePage {\TitlePage {#1}}
+\long\def\StartSubTitlePage#1\StopSubTitlePage{\SubTitlePage{#1}}
+
+\endinput
+
diff --git a/tex/context/modules/mkii/s-pre-63.mkii b/tex/context/modules/mkii/s-pre-63.mkii
new file mode 100644
index 000000000..9ecb2cb1a
--- /dev/null
+++ b/tex/context/modules/mkii/s-pre-63.mkii
@@ -0,0 +1,73 @@
+%D \module
+%D [ file=s-pre-63,
+%D version=2006.05.11,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment 63,
+%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.
+
+\usemodule[pre-61,streams]
+
+\definemeasure[textgap] [\dimexpr24pt\relax]
+
+\definemeasure[leftwidth] [\dimexpr.25\textwidth-.5\measure{textgap}\relax]
+\definemeasure[rightwidth][\dimexpr.75\textwidth-.5\measure{textgap}\relax]
+
+\definestreamlayer[left] [width=\measure{leftwidth}]
+\definestreamlayer[right][width=\measure{rightwidth}]
+
+\setupbodyfont[12pt]
+
+\definefont[LeftFont][Normal sa 3]
+
+\setupheader[style=\tfc,before=\vss,after=\vss]
+
+\startsetups streamlayer:left:settings
+ \hsize\measure{leftwidth}
+ \LeftFont
+ \setupinterlinespace
+\stopsetups
+
+\startsetups streamlayer:right:settings
+ \hsize\measure{rightwidth}
+\stopsetups
+
+\definecombination[both][distance=\measure{textgap},location=top]
+
+\startsetups place:both
+ \startcombination[both]
+ {\StartLocalStep\placestreamlayer[left]\StopLocalStep} {}
+ {\StartLocalStep\placestreamlayer[right]\StopLocalStep} {}
+ \stopcombination
+\stopsetups
+
+\def\StartPage {\page \StartLocalSteps}
+\def\StopPage {\StopLocalSteps \page}
+
+\def\StartLeft {\startstreamlayer[left]}
+\def\StartRight{\startstreamlayer[right]}
+
+\def\StopLeft {\stopstreamlayer}
+\def\StopRight {\stopstreamlayer}
+
+\def\StartPair {}
+\def\StopPair {\setups[place:both]}
+
+\doifnotmode {demo} {\endinput}
+
+\setupbodyfont[8pt] \definefont[BigFont][Normal sa 4]
+
+\starttext
+
+\StartPage
+ \StartPair \StartLeft ZAPF \StopLeft \StartRight \input zapf \StopRight \StopPair
+ \StartPair \StartLeft DAVIS \StopLeft \StartRight \input davis \StopRight \StopPair
+ \StartPair \StartLeft WARD \StopLeft \StartRight \input ward \StopRight \StopPair
+\StopPage
+
+\stoptext
diff --git a/tex/context/modules/mkii/s-pre-64.mkii b/tex/context/modules/mkii/s-pre-64.mkii
new file mode 100644
index 000000000..ef4889bbb
--- /dev/null
+++ b/tex/context/modules/mkii/s-pre-64.mkii
@@ -0,0 +1,208 @@
+%D \module
+%D [ file=s-pre-64,
+%D version=2006.05.11,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment 64,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+% To be documented, used in 2007
+
+\usemodule[s][pre-60]
+
+\newcounter\shapesynctag
+\newdimen\slantedshapedimen
+\newdimen\slantedshapestep
+\newdimen\slantedshapeleftskip
+\newdimen\slantedshapeoffset
+\newdimen\slantedshapeextra
+
+\positioningtrue
+
+\def\AdaptShape
+ {\doglobal\increment\shapesynctag
+ \getnoflines\textheight
+ \slantedshapestep\dimexpr\slantedshapeleftskip/\noflines\relax
+ \leftskip\slantedshapeleftskip
+ \scratchdimen\dimexpr\MPy{text:\MPp\shapesynctag}+\MPh{text:\MPp\shapesynctag}-\topskip-\MPy\shapesynctag\relax
+ \advance\scratchdimen\slantedshapeextra
+ \getnoflines\scratchdimen
+ \slantedshapedimen \noflines \slantedshapestep
+ \scratchtoks\emptytoks
+ \dorecurse{30}
+ {\appendetoks
+ \the\dimexpr-\slantedshapedimen+\slantedshapeoffset \relax\space
+ \the\dimexpr \hsize-2\slantedshapeoffset\relax\space
+ \to\scratchtoks
+ \advance\slantedshapedimen \slantedshapestep}%
+ \parshape 30 \the\scratchtoks
+ \strut\xypos\shapesynctag}
+
+\def\AdaptShapeX
+ {\doglobal\increment\shapesynctag
+ \getnoflines\textheight
+ \slantedshapestep\dimexpr\slantedshapeleftskip/\noflines\relax
+ \leftskip\slantedshapeleftskip
+ \scratchdimen\dimexpr\MPy{text:\MPp\shapesynctag}+\MPh{text:\MPp\shapesynctag}-\topskip-\MPy\shapesynctag\relax
+ \advance\scratchdimen\slantedshapeextra
+ \getnoflines\scratchdimen
+ \slantedshapedimen \noflines \slantedshapestep
+ \scratchtoks\emptytoks
+ \dorecurse{30}
+ {\appendetoks
+ \the\dimexpr-\slantedshapedimen+\slantedshapeoffset +5cm \relax\space
+ \the\dimexpr \hsize-2\slantedshapeoffset\relax\space
+ \to\scratchtoks
+ \advance\slantedshapedimen \slantedshapestep}%
+ \parshape 30 \the\scratchtoks
+ \strut\xypos\shapesynctag}
+
+\setuppapersize[S6][S6]
+
+\setupinteraction
+ [state=start,
+ click=no]
+
+\setupinteractionscreen
+ [option=max]
+
+\setuplayout
+ [backspace=12pt,
+ topspace=24pt,
+ height=middle,
+ width=middle,
+ header=0pt,
+ footer=0pt]
+
+\definecolor[maincolor][b=.5]
+\definecolor[somecolor][g=.5]
+\definecolor[morecolor][r=.5]
+
+\setupcolors
+ [textcolor=maincolor,
+ state=start]
+
+\setupbackgrounds
+ [text]% [text]
+ [background={base,text,invoke}]
+
+\definelayer
+ [text]
+ [width=\textwidth,
+ height=\textheight]
+
+\definelayer
+ [base]
+ [width=\textwidth,
+ height=\textheight]
+
+\definetype [epet] [style=,color=morecolor]
+\setuptype [style=,color=somecolor]
+
+\slantedshapeleftskip150pt
+\slantedshapeoffset12pt
+\slantedshapeextra10pt
+
+\startreusableMPgraphic{page}
+ StartPage ;
+ fill Page withcolor \MPcolor{maincolor} ;
+ path p ; p := Field[Text][Text] enlarged 6pt ;
+ p :=
+ llcorner p shifted (0,-12pt) --
+ lrcorner p shifted (-150pt,0) --
+ urcorner p shifted (0,12pt) --
+ ulcorner p shifted (150pt,0) --
+ cycle ;
+ fill p
+ withcolor .9white ;
+ StopPage ;
+\stopreusableMPgraphic
+
+\defineoverlay[page][\reuseMPgraphic{page}]
+\setupbackgrounds[page][background=page]
+
+\setupalign[flushleft]
+
+\def\StartItem
+ {\blank[line]
+ \begingroup
+ \EveryPar {\AdaptShape}} % beware: \ABBREV aan begin gaat fout
+
+\def\StopItem
+ {\endgraf
+ \endgroup
+ \blank[line]}
+
+\def\StartType
+ {\blank[halfline]
+ \begingroup
+ \EveryPar {\AdaptShape}
+ \dontleavehmode \quad}
+
+\def\StopType
+ {\endgraf
+ \endgroup
+ \blank[halfline]}
+
+\def\Title#1%
+ {\page
+ \setlayer
+ [text]
+ [preset=lefttop,
+ rotation=90]
+ {\color[white]{\scale[height=24pt]{\strut#1}}}}
+
+\def\SetBanner#1%
+ {\setuplayer[base][state=repeat]
+ \setlayer[base][preset=rightbottom]{\color[white]{\scale[height=9pt]{\strut#1}}}}
+
+\let\TitleFont\relax
+
+\startmode[atpragma]
+ \definefontfeature[default][method=node,script=latn,language=dflt,liga=yes,onum=yes,kern=yes]
+ \definefont[TitleFont][palatinosanscom-bold*default at 48pt]
+ \definefont[MainTextFont][palatinosanscom-regular*default at 12pt] \setupinterlinespace[line=15pt]
+ \appendtoks
+ \MainTextFont % hack, as we define a bodyfont at that point (better have a proper typeface)
+ \to \everystarttext
+\stopmode
+
+\doifnotmode{demo}{\endinput}
+
+\starttext
+
+\usemodule[abr-01]
+
+\SetBanner{tug 2007 san diego}
+
+\Title {hans hagen}
+
+\startstandardmakeup \TitleFont \setupinterlinespace[line=3ex] \vfill
+
+\StartItem \dontleavehmode \quad {\morecolor zapfino, a} \StopItem
+\StartItem \dontleavehmode \quad {\morecolor torture test} \StopItem
+\StartItem \dontleavehmode \quad {\morecolor for luatex} \StopItem
+
+\vfill \stopstandardmakeup
+
+\Title{loading fonts}
+
+\StartSteps
+
+\StartItem the \OPENTYPE\ font reader is borrowed from \FONTFORGE\ \FlushStep \StopItem
+\StartItem once it was ready, we could look into such a font \FlushStep \StopItem
+\StartItem it tooks while to figure out the format due to rather fuzzy specs \FlushStep \StopItem
+\StartItem it took us even more time to find out that the loader was flawed \FlushStep \StopItem
+\StartItem one reason was that fonts themselves may have bugs or be incomplete \FlushStep \StopItem
+\StartItem then we changed to \FONTFORGE\ version 2 \FlushStep \StopItem
+\StartItem this made the missing pieces surface in more complex feature handling \FlushStep \StopItem
+\StartItem while implementing features the new table format was cleaned up \FlushStep \StopItem
+
+\StopSteps
+
+\stoptext
diff --git a/tex/context/modules/mkii/s-pre-68.mkii b/tex/context/modules/mkii/s-pre-68.mkii
new file mode 100644
index 000000000..c22640efd
--- /dev/null
+++ b/tex/context/modules/mkii/s-pre-68.mkii
@@ -0,0 +1,152 @@
+%D \module
+%D [ file=s-pre-68,
+%D version=2009.08.28,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment 68,
+%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.
+
+\usemodule[pre-60,abr-02]
+
+% style
+
+\setuppapersize
+ [S66][S66]
+
+\setuplayout
+ [height=middle,
+ width=middle,
+ header=0pt,
+ footer=0pt,
+ backspace=2cm,
+ topspace=2cm]
+
+\setupinteraction
+ [state=start,
+ click=no]
+
+\definecolor[maincolor][r=.4]
+
+\startreusableMPgraphic{page}
+ StartPage ;
+ fill Page enlarged 5mm withcolor \MPcolor{maincolor} ;
+ StopPage ;
+\stopreusableMPgraphic
+
+\startreusableMPgraphic{next}
+ fill ultriangle scaled .15PaperWidth withcolor white ;
+\stopreusableMPgraphic
+
+\startreusableMPgraphic{last}
+ fill boundingbox(ultriangle scaled .15PaperWidth) withcolor white ;
+\stopreusableMPgraphic
+
+\startuniqueMPgraphic{bullit}
+ fill ultriangle scaled 2ExHeight withcolor white ;
+\stopuniqueMPgraphic
+
+\definelayer
+ [extra]
+ [width=\paperwidth,
+ height=\paperheight]
+
+\defineoverlay
+ [page]
+ [\reuseMPgraphic{page}]
+
+\setupbackgrounds
+ [page]
+ [background={page,extra}]
+
+\setupcolors
+ [state=start,
+ textcolor=white]
+
+\setuphead
+ [chapter]
+ [style=\bfc]
+
+\definehead[Title][title]
+
+\definesymbol[MyBullet][\uniqueMPgraphic{bullit}]
+
+\setupitemgroup[itemize][each][symbol=MyBullet]
+
+\startmode[asintended]
+ \usetypescript[cambria]
+ \setupbodyfont[cambria,14.4pt]
+\stopmode
+
+% interface
+
+\def\StartItems
+ {\begingroup
+ \StartSteps
+ \startitemize
+ \def\StartItems{\startitemize\def\StopItems{\stopitemize}}}
+
+\def\StopItems
+ {\FlushStep
+ \stopitemize
+ \NextPageSymbol
+ \StopSteps
+ \endgroup}
+
+\def\Item
+ {\def\Item{\FlushStep\item}
+ \item}
+
+\def\NextPageSymbol
+ {\setlayer
+ [extra]
+ [preset=rightbottom,offset=2mm]
+ {\ifnum\realpageno=\lastpage
+ \reuseMPgraphic{last}%
+ \else\ifnum\realpageno>1
+ \reuseMPgraphic{next}%
+ \fi\fi
+ \FlushStep}}
+
+\def\TitlePage#1#2%
+ {\startstandardmakeup[bottom=,top=]
+ \scale[width=\textwidth]{\framed[align=flushleft,foregroundstyle=\bf,frame=off]{#1}}
+ \vfilll
+ \hfill\scale[width=.5\textwidth]{\framed[align=flushright,foregroundstyle=\bf,frame=off]{#2}}
+ \stopstandardmakeup}
+
+\doifnotmode{demo}{\endinput}
+
+\starttext
+
+\TitlePage{I'm running\\out of examples}{Hans Hagen\\Someplace, 2031}
+
+\Title{Alpha}
+
+\StartItems
+\Item one
+\Item two
+\Item three
+\StopItems
+
+\Title{Beta}
+
+\StartItems
+\Item four
+\Item five
+\Item six
+\StopItems
+
+\Title{Gamma}
+
+\StartItems
+\Item seven
+\Item eight
+\Item nine
+\StopItems
+
+\stoptext
diff --git a/tex/context/modules/mkiv/m-asymptote.lua b/tex/context/modules/mkiv/m-asymptote.lua
new file mode 100644
index 000000000..de8d032c8
--- /dev/null
+++ b/tex/context/modules/mkiv/m-asymptote.lua
@@ -0,0 +1,48 @@
+if not modules then modules = { } end modules ['m-asymptote'] = {
+ version = 1.001,
+ comment = "companion to m-pstricks.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- See m-asymptote.mkiv for some comment.
+
+local context = context
+local replacesuffix = file.replacesuffix
+
+moduledata.asymptote = { }
+
+sandbox.registerrunner {
+ name = "asymptote prc",
+ program = "asy",
+ method = "execute",
+ template = '-noV -config="" -tex=context -outformat="prc" "%filename%"',
+ checkers = { filename = "readable" },
+}
+
+sandbox.registerrunner {
+ name = "asymptote pdf",
+ program = "asy",
+ method = "execute",
+ template = '-noV -config="" -tex=context -outformat="pdf" "%filename%"',
+ checkers = { filename = "readable" },
+}
+
+function moduledata.asympote.process(name,type)
+ if type == "prc" then
+ local result = buffers.run(name,false,"asymptote prc","prc")
+ local jsdata = { js = replacesuffix(result,"js") }
+ local parset = parametersets[name]
+ if parset then
+ -- so we can overload at the tex end
+ setmetatableindex(parset,jsdata)
+ else
+ parametersets[name] = jsdata
+ end
+ context(result)
+ else
+ local result = buffers.run(name,false,"asymptote pdf","pdf")
+ context(result)
+ end
+end
diff --git a/tex/context/modules/mkiv/m-asymptote.mkiv b/tex/context/modules/mkiv/m-asymptote.mkiv
new file mode 100644
index 000000000..c236ceee5
--- /dev/null
+++ b/tex/context/modules/mkiv/m-asymptote.mkiv
@@ -0,0 +1,143 @@
+%D \module
+%D [ file=m-asymptote,
+%D version=2017.03.24,
+%D title=\CONTEXT\ Extra Modules,
+%D subtitle=Asymptote,
+%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.
+
+% \enabletrackers[sandbox,buffers.run]
+
+%D Currently asymptote assumes \MKII\ but better is to only support \MKIV. A problem
+%D is that asymptote has this hard coded while for \CONTEXT\ it's better to stick to
+%D something simple:
+%D
+%D \starttyping
+%D \starttext
+%D
+%D \startasymptotepage
+%D some label
+%D \stopasymptotepage
+%D
+%D \startasymptotepage
+%D some label
+%D \stopasymptotepage
+%D
+%D \stoptext
+%D \stoptyping
+%D
+%D Which is then run with:
+%D
+%D \starttyping
+%D context --nonstopmode --purge somefile.tex
+%D \stoptyping
+%D
+%D For the moment add "settings.prc=true;" to a graphic that is meant to produce that
+%D format. See end of file for some examples.
+
+\registerctxluafile{m-asymptote}{}
+
+\unprotect
+
+\unexpanded\def\asymptote
+ {\dodoubleempty\module_asymptote}
+
+\unexpanded\def\module_asymptote[#1][#2]%
+ {\iffirstargument
+ \begingroup
+ \getdummyparameters[#2]%
+ \edef\lasttypesetbuffer{\ctxlua{moduledata.asympote.process("asymptote:#1","\dummyparameter\c!type")}}%
+ \externalfigure
+ [\lasttypesetbuffer]%
+ [\c!controls=\lasttypesetbuffer,#2]%
+ \endgroup
+ \fi}
+
+\unexpanded\def\startasymptote[#1]%
+ {\begingroup
+ \dostartbuffer[asymptote:#1][startasymptote][stopasymptote]}
+
+\unexpanded\def\stopasymptote
+ {\endgroup}
+
+\definefittingpage
+ [asymptotepage]
+ [\c!align=\v!normal]
+
+\protect
+
+\continueifinputfile{m-asymptote.mkiv}
+
+\starttext
+
+\startasymptote[demo-1]
+settings.prc=true;
+
+import graph3;
+import palette;
+
+size(6cm,6cm);
+size3(5cm,0);
+
+currentprojection=orthographic(3,-6,12);
+currentlight=light(8,10,2);
+
+real g(pair z) {return 1-z.x^2-z.y^2;}
+real f(pair z) {return -2z.x+2;}
+
+real x(real t) {return t;}
+real y(real t) {return 0;}
+real z(real t) {return 1-t^2;}
+real a(real t) {return 1;}
+real b(real t) {return t;}
+real c(real t) {return -t^2;}
+
+path3 p=graph(x,y,z,-2,2,operator ..);
+path3 o=graph(a,b,c,-2,2,operator ..);
+
+surface r=surface(f,(0,-1),(2,1),nx=3,Spline);
+surface s=surface(g,(-2,-2),(2,2),nx=5,Spline);
+
+path3 q=(-2,-2,-7)--(2,-2,-7)--(2,2,-7)--(-2,2,-7)--cycle;
+
+draw(q);
+
+draw(p,blue+thick(),Arrow3);
+draw(o,blue+thick(),Arrow3);
+
+draw(s,lightgray+opacity(0.8),nolight,meshpen=black+thick());
+draw(r,lightgray+opacity(0.8),nolight,meshpen=black+thick());
+
+draw((1,0,0)--(2,0,-2),black,Arrow3);
+draw((1,0,0)--(1,1,0),black,Arrow3);
+\stopasymptote
+
+\startasymptote[demo-2]
+size(6cm,6cm);
+
+fill((1cm,2cm)--(3cm,3cm)--(4cm,0cm)--cycle);
+\stopasymptote
+
+% see end of grph-inc.mkiv for some more options:
+
+\startluaparameterset[demo-1]
+ toolbar = true,
+ tree = false,
+ view = 'ortho'
+\stopluaparameterset
+
+\asymptote[demo-1][type=prc,width=5cm,height=5cm,frame=on,display=yes,controls=yes,preview=yes]
+\asymptote[demo-2][type=pdf,width=8cm,frame=on]
+
+% \typebuffer[asymptote:demo-1]
+
+% \startasymptotepage
+% test
+% \stopasymptotepage
+
+\stoptext
diff --git a/tex/context/modules/mkiv/m-chart.lua b/tex/context/modules/mkiv/m-chart.lua
index f1e7f4cb9..5a9311387 100644
--- a/tex/context/modules/mkiv/m-chart.lua
+++ b/tex/context/modules/mkiv/m-chart.lua
@@ -10,24 +10,28 @@ if not modules then modules = { } end modules ['x-flow'] = {
-- use metapost.graphic(....) directly
-- todo: labels
+-- todo: named colors
-moduledata.charts = moduledata.charts or { }
+local type, tonumber, rawget, next = type, tonumber, rawget, next
+local gsub, find, lower = string.gsub, string.find, string.lower
+local P, S, C, Cc, lpegmatch = lpeg.P, lpeg.S, lpeg.C, lpeg.Cc, lpeg.match
-local gsub, match, find, format, lower = string.gsub, string.match, string.find, string.format, string.lower
+local formatters = string.formatters
local setmetatableindex = table.setmetatableindex
-local P, S, C, Cc, lpegmatch = lpeg.P, lpeg.S, lpeg.C, lpeg.Cc, lpeg.match
-local report_chart = logs.reporter("chart")
+moduledata.charts = moduledata.charts or { }
+
+local report_chart = logs.reporter("chart")
-local variables = interfaces.variables
+local variables = interfaces.variables
-local v_yes = variables.yes
-local v_no = variables.no
-local v_none = variables.none
-local v_standard = variables.standard
-local v_overlay = variables.overlay
-local v_round = variables.round
-local v_test = variables.test
+local v_yes = variables.yes
+local v_no = variables.no
+local v_none = variables.none
+local v_standard = variables.standard
+local v_overlay = variables.overlay
+local v_round = variables.round
+local v_test = variables.test
local defaults = {
chart = {
@@ -252,8 +256,8 @@ end
function commands.flow_set_text(align,str)
temp.texts[#temp.texts+1] = {
- location = align,
- text = str,
+ align = align,
+ text = str,
}
end
@@ -429,6 +433,7 @@ function commands.flow_set_location(x,y)
if type(x) == "string" and not y then
x, y = lpegmatch(splitter,x)
end
+ local oldx, oldy = x, y
if not x or x == "" then
x = last_x
elseif type(x) == "number" then
@@ -455,6 +460,15 @@ function commands.flow_set_location(x,y)
else
y = tonumber(y)
end
+ if x < 1 or y < 1 then
+ report_chart("the cell (%s,%s) ends up at (%s,%s) and gets relocated to (1,1)",oldx or"?", oldy or "?", x,y)
+ if x < 1 then
+ x = 1
+ end
+ if y < 1 then
+ y = 1
+ end
+ end
temp.x = x or 1
temp.y = y or 1
temp.realx = x or 1
@@ -504,7 +518,7 @@ local function process_cells(chart,xoffset,yoffset)
if shapedata.kind == "line" then
local linesettings = settings.line
context("flow_shape_line_color := \\MPcolor{%s} ;", linesettings.color)
- context("flow_shape_fill_color := \\MPcolor{%s} ;", linesettings.backgroundcolor)
+ context("flow_shape_fill_color := black ;")
context("flow_shape_line_width := %p ; ", linesettings.rulethickness)
elseif focus[cell.focus] or focus[cell.name] then
local focussettings = settings.focus
@@ -567,6 +581,7 @@ local function process_connections(chart,xoffset,yoffset)
local settings = chart.settings
for i=1,#data do
local cell = visible(chart,data[i])
+-- local cell = data[i]
if cell then
local connections = cell.connections
for j=1,#connections do
@@ -576,7 +591,7 @@ local function process_connections(chart,xoffset,yoffset)
if othercell then -- and visible(chart,data[i]) then
local cellx, celly = cell.x, cell.y
local otherx, othery, location = othercell.x, othercell.y, connection.location
- if otherx > 0 and othery > 0 and cellx > 0 and celly > 0 and connection.location then
+ if otherx > 0 and othery > 0 and cellx > 0 and celly > 0 and location then
local what_cell, where_cell, what_other, where_other = lpegmatch(what,location)
if what_cell and where_cell and what_other and where_other then
local linesettings = settings.line
@@ -597,9 +612,17 @@ local function process_connections(chart,xoffset,yoffset)
end
end
-local texttemplate = "\\setvariables[flowcell:text][x=%s,y=%s,text={%s},align={%s},figure={%s},destination={%s}]"
+local f_texttemplate_t = formatters["\\setvariables[flowcell:text][x=%s,y=%s,n=%i,align={%s},figure={%s},overlay={%s},destination={%s}]"]
+local f_texttemplate_l = formatters["\\doFLOWlabel{%i}{%i}{%i}"]
-local splitter = lpeg.splitat(":")
+local splitter = lpeg.splitat(":")
+local charttexts = { } -- permits " etc in mp
+
+function commands.flow_get_text(n)
+ if n > 0 then
+ context(charttexts[n])
+ end
+end
local function process_texts(chart,xoffset,yoffset)
local data = chart.data
@@ -607,41 +630,59 @@ local function process_texts(chart,xoffset,yoffset)
if not data then
return
end
+ charttexts = { }
for i=1,#data do
local cell = visible(chart,data[i])
if cell then
- local x = cell.x or 1
- local y = cell.y or 1
- local texts = cell.texts
- for i=1,#texts do
- local text = texts[i]
- local data = text.text
- local align = validlabellocations[text.align or ""] or text.align or ""
- local figure = i == 1 and cell.figure or ""
- local destination = i == 1 and cell.destination or ""
- context('flow_chart_draw_text(%s,%s,textext("%s")) ;',x,y,format(texttemplate,x,y,data,align,figure,destination))
+ local x = cell.x or 1
+ local y = cell.y or 1
+ local figure = cell.figure or ""
+ local overlay = cell.overlay or ""
+ local destination = cell.destination or ""
+ local texts = cell.texts
+ local noftexts = #texts
+ if noftexts > 0 then
+ for i=1,noftexts do
+ local text = texts[i]
+ local data = text.text
+ local align = text.align or ""
+ local align = validlabellocations[align] or align
+ charttexts[#charttexts+1] = data
+ context('flow_chart_draw_text(%s,%s,textext("%s")) ;',x,y,f_texttemplate_t(x,y,#charttexts,align,figure,overlay,destination))
+ if i == 1 then
+ figure = ""
+ overlay = ""
+ destination = ""
+ end
+ end
+ elseif figure ~= "" or overlay ~= "" or destination ~= "" then
+ context('flow_chart_draw_text(%s,%s,textext("%s")) ;',x,y,f_texttemplate_t(x,y,0,"",figure,overlay,destination))
end
local labels = cell.labels
for i=1,#labels do
- local label = labels[i]
- local text = label.text
- local location = validlabellocations[label.location or ""] or label.location or ""
- if text and location then
- context('flow_chart_draw_label(%s,%s,"%s",textext("\\strut %s")) ;',x,y,location,text)
+ local label = labels[i]
+ local text = label.text
+ local location = label.location or ""
+ local location = validlabellocations[location] or location
+ if text and text ~= "" then
+ charttexts[#charttexts+1] = text
+ context('flow_chart_draw_label(%s,%s,"%s",textext("%s")) ;',x,y,location,f_texttemplate_l(x,y,#charttexts))
end
end
local exits = cell.exits
for i=1,#exits do
- local exit = exits[i]
- local text = exit.text
- local location = validlabellocations[exit.location or ""]
- if text and location then
+ local exit = exits[i]
+ local text = exit.text
+ local location = exit.location or ""
+ local location = validlabellocations[location] or location
+ if text ~= "" then
-- maybe make autoexit an option
if location == "l" and x == chart.from_x + 1 or
location == "r" and x == chart.to_x - 1 or
location == "t" and y == chart.to_y - 1 or
location == "b" and y == chart.from_y + 1 then
- context('flow_chart_draw_exit(%s,%s,"%s",textext("\\strut %s")) ;',x,y,location,text)
+ charttexts[#charttexts+1] = text
+ context('flow_chart_draw_exit(%s,%s,"%s",textext("%s")) ;',x,y,location,f_texttemplate_l(x,y,#charttexts))
end
end
end
@@ -649,10 +690,10 @@ local function process_texts(chart,xoffset,yoffset)
for i=1,#connections do
local comments = connections[i].comments
for j=1,#comments do
- local comment = comments[j]
- local text = comment.text
+ local comment = comments[j]
+ local text = comment.text
local location = comment.location or ""
- local length = 0
+ local length = 0
-- "tl" "tl:*" "tl:0.5"
local loc, len = lpegmatch(splitter,location) -- do the following in lpeg
if len == "*" then
@@ -664,12 +705,13 @@ local function process_texts(chart,xoffset,yoffset)
end
elseif loc then
location = validcommentlocations[loc] or "*"
- length = tonumber(len) or 0
+ length = tonumber(len) or 0
else
location = validcommentlocations[location] or ""
end
- if text and location then
- context('flow_chart_draw_comment(%s,%s,%s,"%s",%s,textext("\\strut %s")) ;',x,y,i,location,length,text)
+ if text and text ~= "" then
+ charttexts[#charttexts+1] = text
+ context('flow_chart_draw_comment(%s,%s,%s,"%s",%s,textext("%s")) ;',x,y,i,location,length,f_texttemplate_l(x,y,#charttexts))
end
end
end
@@ -692,7 +734,6 @@ local function getchart(settings,forced_x,forced_y,forced_nx,forced_ny)
print("no such chart",chartname)
return
end
--- chart = table.copy(chart)
chart = expanded(chart,settings)
local chartsettings = chart.settings.chart
local autofocus = chart.settings.chart.autofocus
@@ -721,6 +762,14 @@ local function getchart(settings,forced_x,forced_y,forced_nx,forced_ny)
if miny == 0 or y > maxy then maxy = y end
end
end
+-- optional:
+if x + nx > maxx then
+ nx = maxx - x + 1
+end
+if y + ny > maxy then
+ ny = maxy - y + 1
+end
+ --
-- print("1>",x,y,nx,ny)
-- print("2>",minx, miny, maxx, maxy)
-- check of window should be larger (maybe autofocus + nx/ny?)
@@ -837,6 +886,9 @@ local function makechart(chart)
context("flow_chart_offset := %p ;",offset)
--
context("flow_reverse_y := true ;")
+ if chartsettings.option == v_test then
+ context("flow_draw_test_shapes ;")
+ end
process_cells(chart,0,0)
process_connections(chart,0,0)
process_texts(chart,0,0)
@@ -875,9 +927,9 @@ local function splitchart(chart)
if done then
last_x = to_x
end
--- if first_x >= to_x then
--- break
--- end
+ -- if first_x >= to_x then
+ -- break
+ -- end
local part_y = 0
local first_y = from_y
while true do
@@ -887,31 +939,31 @@ local function splitchart(chart)
if done then
last_y = to_y
end
--- if first_y >= to_y then
--- break
--- end
+ -- if first_y >= to_y then
+ -- break
+ -- end
--
-local data = chart.data
-for i=1,#data do
- local cell = data[i]
--- inspect(cell)
- local cx, cy = cell.x, cell.y
- if cx >= first_x and cx <= last_x then
- if cy >= first_y and cy <= last_y then
- report_chart("part (%s,%s) of %a is split from (%s,%s) -> (%s,%s)",part_x,part_y,name,first_x,first_y,last_x,last_y)
- local x = first_x
- local y = first_y
- local nx = last_x - first_x + 1
- local ny = last_y - first_y + 1
- context.beforeFLOWsplit()
- context.handleFLOWsplit(function()
- makechart(getchart(settings,x,y,nx,ny)) -- we need to pass frozen settings !
- end)
- context.afterFLOWsplit()
- break
- end
- end
-end
+ local data = chart.data
+ for i=1,#data do
+ local cell = data[i]
+ -- inspect(cell)
+ local cx, cy = cell.x, cell.y
+ if cx >= first_x and cx <= last_x then
+ if cy >= first_y and cy <= last_y then
+ report_chart("part (%s,%s) of %a is split from (%s,%s) -> (%s,%s)",part_x,part_y,name,first_x,first_y,last_x,last_y)
+ local x = first_x
+ local y = first_y
+ local nx = last_x - first_x + 1
+ local ny = last_y - first_y + 1
+ context.beforeFLOWsplit()
+ context.handleFLOWsplit(function()
+ makechart(getchart(settings,x,y,nx,ny)) -- we need to pass frozen settings !
+ end)
+ context.afterFLOWsplit()
+ break
+ end
+ end
+ end
--
if done then
break
diff --git a/tex/context/modules/mkiv/m-chart.mkvi b/tex/context/modules/mkiv/m-chart.mkvi
index a0c8b2244..69d90f47b 100644
--- a/tex/context/modules/mkiv/m-chart.mkvi
+++ b/tex/context/modules/mkiv/m-chart.mkvi
@@ -15,7 +15,6 @@
% flowsets
% autoscaling (bodyfontsteps)
% comment
-% overlay
%
% todo:
% \useFLOWchart[name][parent][setting,setting][additional settings]
@@ -63,8 +62,6 @@
\c!commentoffset=.5\bodyfontsize,
\c!exitoffset=\zeropoint,
% \c!split=\v!no,
- % \c!maxwidth=,
- % \c!maxheight=,
% \c!option=,
% \c!bodyfont=,
% \c!dot=, % private option
@@ -256,11 +253,11 @@
\unexpanded\def\FLOWcharts
{\dodoubleempty\FLOW_charts}
-\def\FLOW_charts[#name][#settings]
+\def\FLOW_charts[#name][#settings]%
{\begingroup
\setupFLOWchart[\c!split=\v!yes]%
\setupFLOWsplit[#settings]%
- \module_charts_process[#name][]% \FLOWchart...
+ \FLOWchart[#name]%
\endgroup}
\appendtoks
@@ -307,7 +304,7 @@
\unexpanded\def\module_charts_FLOW_include [#name][#settings]{%
\begingroup
- \getparameters[FLOWi][x=1,y=1,#settings]%
+ \getparameters[FLOWi][\c!x=1,\c!y=1,#settings]%
\ctxcommand{flow_set_include("#name",\number\FLOWix,\number\FLOWiy,\!!bs\detokenize{#settings}\!!es)}%
\endgroup
\ignorespaces
@@ -315,7 +312,8 @@
\setvariables
[flowcell:text]
- [x=1,
+ [n=0,
+ x=1,
y=1,
text=,
align=,
@@ -324,8 +322,6 @@
\def\FLOWx{\getvariable{flowcell:text}{x}} % compatibility (for Willi)
\def\FLOWy{\getvariable{flowcell:text}{y}} % compatibility (for Willi)
-% \c!background={\@@FLOWbackground,\FLOWoverlay},
-
\defineoverlay
[flowcell:figure]
[\overlayfigure{\getvariable{flowcell:text}{figure}}]
@@ -335,13 +331,15 @@
\iftrialtypesetting
\directsetup{flowcell:text:place:indeed}
\else \iflocation
- \doifelsenothing {\getvariable{flowcell:text}{destination}} {
+ \edef\flowcelldestination{\getvariable{flowcell:text}{destination}}%
+ \ifx\flowcelldestination\empty
\directsetup{flowcell:text:place:indeed}
- } {
+ \else
% tricky: scaling and moving around is not taken into account
- \setupinteraction[\c!color=,\c!contrastcolor=]
- \gotobox{\directsetup{flowcell:text:place:indeed}}[\getvariable{flowcell:text}{destination}]
- }
+ \letinteractionparameter\c!color\empty
+ \letinteractionparameter\c!contrastcolor\empty
+ \gotobox{\directsetup{flowcell:text:place:indeed}}[\flowcelldestination]
+ \fi
\else
\directsetup{flowcell:text:place:indeed}
\fi \fi
@@ -351,17 +349,41 @@
\startsetups flowcell:text:place:indeed
\begingroup
\directsetup{flowcell:text:user}
- \doifelsenothing {\getvariable{flowcell:text}{figure}} {
- \expandcheckedcsname{flowcell:}{\getvariable{flowcell:text}{align}}\empty
- {\getvariable{flowcell:text}{text}}
- } {
- \expandcheckedcsname{flowcell:}{\getvariable{flowcell:text}{align}}\empty
- [\c!background=flowcell:figure]
- {\getvariable{flowcell:text}{text}}
- }
+ \edef\flowcellfigure {\getvariable{flowcell:text}{figure}}%
+ \edef\flowcelloverlay{\getvariable{flowcell:text}{overlay}}%
+ \edef\flowcellalign {\getvariable{flowcell:text}{align}}%
+ \edef\flowcellindex {\getvariable{flowcell:text}{n}}%
+ \ifx\flowcellfigure\empty
+ \ifx\flowcelloverlay\empty
+ \expandcheckedcsname{flowcell:}\flowcellalign\empty
+ % {\getvariable{flowcell:text}{text}}
+ {\getFLOWtext\flowcellindex}
+ \else
+ \expandcheckedcsname{flowcell:}\flowcellalign\empty
+ [\c!background={\flowcelloverlay}]
+ % {\getvariable{flowcell:text}{text}}
+ {\getFLOWtext\flowcellindex}
+ \fi
+ \else
+ \expandcheckedcsname{flowcell:}\flowcellalign\empty
+ [\c!background=flowcell:figure]
+ % {\getvariable{flowcell:text}{text}}
+ {\getFLOWtext\flowcellindex}
+ \fi
\endgroup
\stopsetups
+\unexpanded\def\doFLOWlabel#1#2#3%
+ {\begingroup
+ \def\FLOWx{#1}%
+ \def\FLOWy{#2}%
+ \strut
+ \getFLOWtext{#3}%
+ \endgroup}
+
+\unexpanded\def\getFLOWtext#1%
+ {\ifcase#1\else\ctxcommand{flow_get_text(#1)}\fi}
+
\defineframed % to be discussed: shape or global
[flowcell:base]
[\c!offset=\v!overlay, % no strut ?
diff --git a/tex/context/modules/mkiv/m-educat.mkiv b/tex/context/modules/mkiv/m-educat.mkiv
index 93b1a6c5d..e39738e99 100644
--- a/tex/context/modules/mkiv/m-educat.mkiv
+++ b/tex/context/modules/mkiv/m-educat.mkiv
@@ -47,7 +47,8 @@
{\begingroup
\dontcomplain
\setupanswerarea
- [\c!n=0,\c!m=,#1,\c!location=\v!text]%
+ [\c!n=0,\c!m=#1,\c!location=\v!text]%
+ \let\currenttextbackground\v!answerarea
\doifelsenothing{\textbackgroundparameter\c!m}
{\expandafter\donoanswerspace}
{\expandafter\dodoanswerspace}%
@@ -110,6 +111,7 @@
\dontcomplain
\setupanswerarea
[\c!n=0,\c!m=,#1,\c!location=\v!text]%
+ \let\currenttextbackground\v!answerarea
\doifnot{\textbackgroundparameter\c!option}\v!joinedup\softbreak
\doifelsenothing{\textbackgroundparameter\c!m}
{\expandafter\donostartanswerlines}
@@ -156,8 +158,10 @@
#2%
\getvalue{\e!stop\e!answerlines}}
-\protect \doifnotmode{demo}{\endinput}
-
+\protect
+
+\continueifinputfile{m-educat.mkiv}
+
%D Test materiaal.
\starttext
diff --git a/tex/context/modules/mkiv/m-graph.mkiv b/tex/context/modules/mkiv/m-graph.mkiv
index 62c4ec4cb..8946732d0 100644
--- a/tex/context/modules/mkiv/m-graph.mkiv
+++ b/tex/context/modules/mkiv/m-graph.mkiv
@@ -25,7 +25,8 @@
\c!method=\s!double]
\startMPdefinitions{graph}
- if unknown context_grap : input mp-grap.mpiv ; fi ;
+ loadmodule "grap" ;
+% input mp-grap.mpiv ;
\stopMPdefinitions
\protect
@@ -71,8 +72,6 @@
label.rt(formatted("(@j,@j)",(1.23,4.56)),(0cm,-5.0cm)) ;
\stopMPpage
-\stoptext
-
% \startMPpage[instance=graph]
% draw begingraph(3in,2in);
% gdraw "t:/metapost/grphdata/agepop91.d";
@@ -131,3 +130,5 @@
% autogrid(otick.bot,otick.rt);
% endgraph;
% \stopMPpage
+
+\stoptext
diff --git a/tex/context/modules/mkiv/m-ipsum.mkiv b/tex/context/modules/mkiv/m-ipsum.mkiv
index 1c5901d86..7ba78ee2e 100644
--- a/tex/context/modules/mkiv/m-ipsum.mkiv
+++ b/tex/context/modules/mkiv/m-ipsum.mkiv
@@ -127,6 +127,7 @@ end
\startsetups[handler:action:ipsum]
\useipsumstyleandcolor\c!style\c!color
+ % hm, also changes dates
\uselanguageparameter\ipsumparameter
\ctxlua{moduledata.ipsum.typeset {
alternative = "\ipsumparameter\c!alternative",
diff --git a/tex/context/modules/mkiv/m-matrix.mkiv b/tex/context/modules/mkiv/m-matrix.mkiv
index ccb376e39..f59363e94 100644
--- a/tex/context/modules/mkiv/m-matrix.mkiv
+++ b/tex/context/modules/mkiv/m-matrix.mkiv
@@ -28,6 +28,9 @@ local formatters = string.formatters
local copy = table.copy
local insert = table.insert
local remove = table.remove
+local random = math.random
+
+local context = context
local matrix = { }
moduledata.matrix = matrix
@@ -67,35 +70,120 @@ end
-- todo: define a matrix at the tex end so that we have more control
-local fences_p = {
- left = "\\left(\\,",
- right = "\\,\\right)",
+local fences = {
+ parentheses = { left = "\\left(\\,", right = "\\,\\right)" },
+ brackets = { left = "\\left[\\,", right = "\\,\\right]" },
+ bars = { left = "\\left|\\,", right = "\\,\\right|" },
}
-local fences_b = {
- left = "\\left[\\,",
- right = "\\,\\right]",
-}
+-- one can add more fences
+
+fences.bar = fences.bars
+fences.parenthesis = fences.parentheses
+fences.bracket = fences.brackets
+
+-- one can set the template
+
+matrix.template = "%0.3F"
function matrix.typeset(m,options)
- local options = settings_to_hash(options or "")
- context.startmatrix(options.determinant and fences_b or fences_p)
- for i=1, #m do
- local mi = m[i]
- for j=1,#mi do
- context.NC(mi[j])
- end
- context.NR()
+ if type(m) == "table" then
+ local options = settings_to_hash(options or "")
+ local whatever = options.determinant == "yes" and fences.bars or fences.parentheses
+ if options.fences then
+ whatever = fences[options.fences] or whatever
+ elseif options.determinant then
+ -- whatever = fences.brackets
+ whatever = fences.bars
end
- context.stopmatrix()
+ local template = options.template or matrix.template
+ if template == "yes" then
+ template = matrix.template
+ elseif template == "no" then
+ template = false
+ elseif tonumber(template) then
+ template = "%0." .. template .. "F"
+ end
+ context.startmatrix(whatever)
+ for i=1, #m do
+ local mi = m[i]
+ for j=1,#mi do
+ context.NC()
+ local n = mi[j]
+ if template and tonumber(n) then
+ context(template,n)
+ else
+ context(mi[j])
+ end
+ end
+ context.NR()
+ end
+ context.stopmatrix()
+ elseif m then
+ context(m)
+ end
end
-- interchange two rows (i-th, j-th)
-function matrix.swap(t,i,j)
- t[i], t[j] = t[j], t[i]
+-- function matrix.swaprows(t,i,j)
+-- if i <= #t and j <= #t then
+-- t[i], t[j] = t[j], t[i]
+-- return t
+-- else
+-- return "error: out of bound"
+-- end
+-- end
+
+function matrix.swaprows(t,i,j)
+ local ti = t[i]
+ if not ti then
+ return "error: no row i"
+ end
+ local tj = t[j]
+ if not tj then
+ return "error: no row j"
+ end
+ t[i], t[j] = tj, ti
+ return t
+end
+
+-- interchange two columns (i-th, j-th)
+
+-- function matrix.swapcolumns(t, i, j)
+-- if i <= #t[1] and j <= #t[1] then
+-- for k = 1, #t do
+-- t[k][i], t[k][j] = t[k][j], t[k][i]
+-- end
+-- return t
+-- else
+-- return "error: out of bound"
+-- end
+-- end
+
+function matrix.swapcolumns(t, i, j)
+ local t1 = t[1]
+ if not t1 then
+ return "error: no rows"
+ end
+ local n = #t1
+ if i <= n then
+ return "error: no row i"
+ end
+ if j <= n then
+ return "error: no row j"
+ end
+ for k = 1, #t do
+ local tk = t[k]
+ tk[i], tk[j] = tk[j], tk[i]
+ end
+ return t
end
+matrix.swapC = matrix.swapcolumns
+matrix.swapR = matrix.swaprows
+matrix.swap = matrix.swaprows
+
-- replace i-th row with factor * (i-th row)
function matrix.multiply(m,i,factor)
@@ -151,7 +239,7 @@ function matrix.inner(u,v)
end
local nv = #v
if nv ~= nu then
- return 0
+ return "error: size mismatch"
end
local result = 0
for i=1,nu do
@@ -163,8 +251,8 @@ end
-- product of two matrices
function matrix.product(m1,m2)
- local product = { }
if #m1[1] == #m2 then
+ local product = { }
for i=1,#m1 do
local m1i = m1[i]
local mrow = { }
@@ -177,8 +265,10 @@ function matrix.product(m1,m2)
end
product[i] = mrow
end
+ return product
+ else
+ return "error: size mismatch"
end
- return product
end
local function uppertri(m,sign)
@@ -216,7 +306,7 @@ end
matrix.uppertri = uppertri
-function matrix.determinant(m)
+local function determinant(m)
if #m == #m[1] then
local d = 1
local t, s = uppertri(m,1)
@@ -225,10 +315,12 @@ function matrix.determinant(m)
end
return s*d
else
- return 0
+ return "error: not a square matrix"
end
end
+matrix.determinant = determinant
+
local function rowechelon(m,r)
local temp = copy(m)
local pRow = 1
@@ -293,9 +385,102 @@ end
matrix.rowechelon = rowechelon
matrix.rowEchelon = rowechelon
+-- make matrices until its determinant is not 0
+
+function matrix.make(n,m,low,high)
+ if not n then
+ n = 10
+ end
+ if not m then
+ m = 10
+ end
+ if not low then
+ low = 0
+ end
+ if not high then
+ high = 100
+ end
+ local t = { } -- make an empty n1 x n2 array
+ local again = true
+ for i=1,n do
+ t[i] = { }
+ end
+ while true do
+ for i=1,n do
+ local ti = t[i]
+ for j=1,m do
+ ti[j] = random(low,high)
+ end
+ end
+ if n ~= m or determinant(t,1) ~= 0 then
+ return t
+ end
+ end
+end
+
+-- extract submatrix by using
+
+local function submatrix(t,i,j)
+ local rows = #t
+ local columns = #t[1]
+ local sign = 1 -- not used
+ if i <= rows and j <= columns then
+ local c = copy(t)
+ remove(c,i)
+ for k=1,rows-1 do
+ remove(c[k],j)
+ end
+ return c
+ else
+ return "error: out of bound"
+ end
+end
+
+matrix.submatrix = submatrix
+
+-- calculating determinant using Laplace Expansion
+
+function matrix.laplace(t) -- not sure if this is the most effient but
+ local factors = { 1 } -- it's not used for number crunching anyway
+ local data = copy(t)
+ local det = 0
+ while #data > 0 do
+ local mat = { }
+ local siz = #data[1]
+ if siz == 0 then
+ return "error: no determinant"
+ elseif siz == 1 then
+ det = data[1][1]
+ return det
+ end
+ for i=1,siz do
+ mat[i] = data[1]
+ remove(data,1)
+ end
+ local factor = remove(factors,1)
+ local m1 = mat[1]
+ if siz == 2 then
+ local m2 = mat[2]
+ det = det + factor * (m1[1]*m2[2] - m1[2]*m2[1])
+ else
+ for j=1,#m1 do
+ local m1j = m1[j]
+ if m1j ~= 0 then
+ insert(factors, (-1)^(j+1) * factor * m1j)
+ local m = submatrix(mat,1,j)
+ for k, v in next, m do
+ insert(data,v)
+ end
+ end
+ end
+ end
+ end
+ return det
+end
+
-- solve the linear equation m X = c
-local function solve(m,c)
+local function solve(m,c)
local n = #m
if n ~= #c then
return copy(m)
@@ -393,14 +578,14 @@ moduledata.matrix.typeset(moduledata.matrix.multiply(document.DemoMatrixA, 2, 3)
\stopsubject
-\startsubject[title={Row 2 + $3 \times r_4$}]
+\startsubject[title={Row 2 + $4 \times r_3$}]
\startluacode
moduledata.matrix.typeset(document.DemoMatrixA)
context.blank()
moduledata.matrix.sumrow(document.DemoMatrixA, 2, 3, 4)
context.blank()
-moduledata.matrix.typeset(document.DemoMatrixA)
+moduledata.matrix.typeset(document.DemoMatrixA,{ fences = "bars" } )
\stopluacode
\stopsubject
@@ -445,7 +630,7 @@ local m = {
{ 0, 0, 2 },
{ 2, 2, -6 },
}
-context(moduledata.matrix.determinant(m))
+context(moduledata.matrix.determinant(m, "determinant=yes" ))
\stopluacode
\stopsubject
@@ -461,7 +646,8 @@ local m = {
}
moduledata.matrix.typeset(m)
-moduledata.matrix.typeset(moduledata.matrix.rowechelon(m,1))
+context.blank()
+moduledata.matrix.typeset(moduledata.matrix.rowechelon(m,1), { determinant = "yes" })
\stopluacode
\stopsubject
@@ -479,6 +665,14 @@ local m = {
local c = { 5, 2, 6, 8 }
moduledata.matrix.typeset(moduledata.matrix.solve(m,c))
+context.blank()
+moduledata.matrix.typeset(moduledata.matrix.solve(m,c), { template = 6 })
+context.blank()
+moduledata.matrix.typeset(moduledata.matrix.solve(m,c), { template = "no" })
+context.blank()
+moduledata.matrix.typeset(moduledata.matrix.solve(m,c), { template = "%0.3f" })
+context.blank()
+moduledata.matrix.typeset(moduledata.matrix.solve(m,c), { template = "%0.4F" })
\stopluacode
\stopsubject
diff --git a/tex/context/modules/mkiv/m-punk.mkiv b/tex/context/modules/mkiv/m-punk.mkiv
index 331e90d2e..f7e17da83 100644
--- a/tex/context/modules/mkiv/m-punk.mkiv
+++ b/tex/context/modules/mkiv/m-punk.mkiv
@@ -11,11 +11,6 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\ifx\luaversion\undefined \endinput \fi
-
-% At some point the font generation code will move into the
-% ConTeXt MkIV kernel.
-
\startluacode
local concat = table.concat
local chardata = characters.data
@@ -242,7 +237,7 @@ end)
\definetypeface [punk] [rm] [serif] [punk] [default]
\stoptypescript
-\endinput
+\continueifinputfile{m-punk.mkiv}
\usetypescript[punk]
diff --git a/tex/context/modules/mkiv/m-scite.mkiv b/tex/context/modules/mkiv/m-scite.mkiv
index fd4a3c7a1..a7d9f8b5c 100644
--- a/tex/context/modules/mkiv/m-scite.mkiv
+++ b/tex/context/modules/mkiv/m-scite.mkiv
@@ -56,11 +56,11 @@ buffers.scite = scite
-- context output:
-local f_def_color = formatters["\\definecolor[slxc%s][h=%s%s%s]%%"]
-local f_fore_none = formatters["\\def\\slx%s#1{{\\slxc%s#1}}%%"]
-local f_fore_bold = formatters["\\def\\slx%s#1{{\\slxc%s\\bf#1}}%%"]
-local f_none_bold = formatters["\\def\\slx%s#1{{\\bf#1}}%%"]
-local f_none_none = formatters["\\def\\slx%s#1{{#1}}%%"]
+local f_def_color = formatters["\\definecolor[slxc%s][h=%02X%02X%02X]%%"]
+local f_fore_none = formatters["\\unexpanded\\def\\slx%s#1{{\\slxc%s#1}}%%"]
+local f_fore_bold = formatters["\\unexpanded\\def\\slx%s#1{{\\slxc%s\\bf#1}}%%"]
+local f_none_bold = formatters["\\unexpanded\\def\\slx%s#1{{\\bf#1}}%%"]
+local f_none_none = formatters["\\unexpanded\\def\\slx%s#1{{#1}}%%"]
local f_texstyled = formatters["\\slx%s{%s}"]
local f_hanging = formatters["\\slxb{%s}%s\\slxe"]
@@ -90,7 +90,7 @@ local replacer = lpeg.replacer {
["\\"] = "\\slxB ",
["%"] = "\\slxP ",
["~"] = "\\slxT ",
- [" "] = "\\slxS ",
+ [" "] = "\\slxS ", -- can be made more efficient: \\slxF{n}
}
local colors = nil
@@ -99,14 +99,14 @@ local function exportcolors()
if not colors then
scite.loadscitelexer()
local function black(f)
- return (f[1] == f[2]) and (f[2] == f[3]) and (f[3] == '00')
+ return (f[1] == f[2]) and (f[2] == f[3]) and (f[3] == 0)
end
local result, r = { f_mapping }, 1
for k, v in table.sortedhash(lexer.context.styles) do
local fore = v.fore
if fore and not black(fore) then
r = r + 1
- result[r] = f_def_color(k,fore[1],fore[2],fore[3])
+ result[r] = f_def_color(k,fore[1],fore[2] or fore[1],fore[3] or fore[1])
end
end
r = r + 1
@@ -169,6 +169,10 @@ end
local p1 = lpeg.tsplitat(lpeg.patterns.newline)
local p2 = lpeg.P("\\slxS ")^1
+local p3 = lpeg.Cs((lpeg.Cp() * lpeg.P(" ") * lpeg.Cp() / function(b,e) return "\\slxF{" .. (e-b-1) .. "}" end
+ + (1-lpeg.P(" "))^1)^0)
+
+-- slxb could have a \hskip so then we can replace the slxS's
local function indent(str)
local l = lpegmatch(p1,str)
@@ -181,7 +185,10 @@ local function indent(str)
else
n = 0
end
- l[i] = f_hanging(n,s)
+s = lpegmatch(p3,s) -- can be combined
+ l[i] = f_hanging(n,s) -- "\\slxb{%s}%s\\slxe "
+-- print(">",s)
+-- print("<",l[i])
end
end
return concat(l,"\n")
@@ -211,10 +218,12 @@ end
\unprotect
+\newdimen\scitespaceskip
+
\unexpanded\def\buff_scite_slxb#1%
{%\begingroup
- \hangindent\dimexpr\numexpr#1+1\relax\emwidth\relax
- \hangafter \numexpr\numexpr#1+1\relax}
+ \hangindent\numexpr#1+2\relax\scitespaceskip
+ \hangafter 1\relax}
\unexpanded\def\buff_scite_slxe
{\par
@@ -223,7 +232,9 @@ end
\unexpanded\def\installscitecommands
{\ctxlua{buffers.scite.installcommands()}%
\let\installscitecommands\relax
- \def\slxS{\fixedspace\allowbreak}%
+ \scitespaceskip\fontcharwd\font`0\relax
+ \unexpanded\def\slxS{\hskip\scitespaceskip}%
+ \unexpanded\def\slxF##1{\hskip##1\scitespaceskip\relax}%
\let\slxb\buff_scite_slxb
\let\slxe\buff_scite_slxe}
@@ -251,7 +262,7 @@ end
\raggedright
\startcontextcode
\startlines
- \getbuffer[lex]%
+ \getbuffer[lex]
\stoplines
\stopcontextcode
\stop}
diff --git a/tex/context/modules/mkiv/m-steps.lua b/tex/context/modules/mkiv/m-steps.lua
index 8eb481550..ce84866a4 100644
--- a/tex/context/modules/mkiv/m-steps.lua
+++ b/tex/context/modules/mkiv/m-steps.lua
@@ -8,11 +8,20 @@ if not modules then modules = { } end modules ['x-flow'] = {
-- when we can resolve mpcolor at the lua end we will use metapost.graphic(....) directly
+local tonumber = tonumber
+
moduledata.steps = moduledata.steps or { }
-local variables = interfaces.variables
+local context = context
+local variables = interfaces.variables
+local formatters = string.formatters
+----- mpcolor = attributes.colors.mpnamedcolor
+local concat = table.concat
+
+local report = logs.reporter("stepcharts")
+local trace = false
-local trace_charts = false
+trackers.register("stepcharts",function(v) trace = v end)
local defaults = {
chart = {
@@ -48,179 +57,494 @@ local defaults = {
-- maybe: includes
-- maybe: flush ranges
-local charts = { }
+local charts = { } -- not used but we could support nesting
+local chart = nil
local steps = { }
+local count = 0
-function commands.step_start_chart(name)
+local function step_start_chart(name,alternative)
name = name or ""
- steps = { }
- charts[name] = {
- steps = steps,
+ steps = table.setmetatableindex(function(t,k)
+ local v = { -- could be metatable
+ cell_top = false,
+ cell_bot = false,
+ text_top = false,
+ text_mid = false,
+ text_bot = false,
+ start_t = k,
+ start_m = k,
+ start_b = k,
+ cell_ali = false,
+ }
+ t[k] = v
+ return v
+ end)
+ count = 0
+ chart = {
+ steps = steps,
+ count = count,
+ alternative = alternative,
}
+ charts[name] = chart
end
-function commands.step_stop_chart()
+local function step_stop_chart()
+ chart.count = count
end
-function commands.step_make_chart(settings)
+local function step_make_chart(settings)
local chartsettings = settings.chart
if not chartsettings then
- print("no chart")
+ if trace then
+ report("no chart")
+ end
return
end
local chartname = chartsettings.name
if not chartname then
- print("no name given")
+ if trace then
+ report("no name given")
+ end
return
end
local chart = charts[chartname]
if not chart then
- print("no such chart",chartname)
+ if trace then
+ report("no such chart: %s",chartname)
+ end
return
end
local steps = chart.steps or { }
--
table.setmetatableindex(settings,defaults)
--
- if trace_charts then
- inspect(steps)
+ if trace then
+ report(table.serialize(steps,"chartdata"))
end
--
local textsettings = settings.text
local cellsettings = settings.cell
local linesettings = settings.line
+
+ local start = nil
+ local stop = nil
+ local flush = nil
+
+ if false then
+
+ -- some 2% faster at most, so neglectable as this kind of graphics
+ -- is hardly used in quantity but it saves mem and tokens in tracing
+ -- and we lose some aspects, like outer color and so (currently)
+
+ local mpcode = false
+
+ start = function()
+ mpcode = { }
+ end
+ stop = function()
+ local code = concat(mpcode,"\n")
+ -- print(code)
+ metapost.graphic {
+ -- instance = "metafun",
+ instance = "steps",
+ format = "metafun",
+ data = code,
+ -- initializations = "",
+ -- extensions = "",
+ -- inclusions = "",
+ definitions = 'loadmodule "step" ;',
+ -- figure = "",
+ method = "double",
+ }
+ mpcode = false
+ end
+ flush = function(fmt,first,...)
+ if first then
+ mpcode[#mpcode+1] = formatters[fmt](first,...)
+ else
+ mpcode[#mpcode+1] = fmt
+ end
+ end
+
+ else
+
+ start = function() context.startMPcode("steps") end
+ stop = context.stopMPcode
+ flush = context
+
+ end
+ --
+ start()
+ flush("step_begin_chart ;")
+ --
+ local alternative = chartsettings.alternative
+ if not alternative or alternative == "" then
+ alternative = chart.alternative
+ end
+ if not alternative or alternative == "" then
+ alternative = variables.horizontal
+ end
+ local alternative = utilities.parsers.settings_to_hash(alternative)
+ local vertical = alternative[variables.vertical]
+ local align = alternative[variables.three]
+ local category = chartsettings.category
--
- context.startMPcode()
- context("if unknown context_cell : input mp-step.mpiv ; fi ;")
- context("step_begin_chart ;")
+ flush('chart_category := "%s" ;',category)
--
- if chartsettings.alternative == variables.vertical then
- context("chart_vertical := true ;")
+ if vertical then
+ flush("chart_vertical := true ;")
+ end
+ if align then
+ flush("chart_align := true ;")
end
--
- context("text_line_color := \\MPcolor{%s} ;", textsettings.framecolor)
- context("text_line_width := %p ;", textsettings.rulethickness)
- context("text_fill_color := \\MPcolor{%s} ;", textsettings.backgroundcolor)
- context("text_offset := %p ;", textsettings.offset)
- context("text_distance_set := %p ;", textsettings.distance)
+ flush("text_line_color := %q ;", textsettings.framecolor)
+ flush("text_line_width := %p ;", textsettings.rulethickness)
+ flush("text_fill_color := %q ;", textsettings.backgroundcolor)
+ flush("text_offset := %p ;", textsettings.offset)
+ flush("text_distance_set := %p ;", textsettings.distance)
--
- context("cell_line_color := \\MPcolor{%s} ;", cellsettings.framecolor)
- context("cell_line_width := %p ;", cellsettings.rulethickness)
- context("cell_fill_color := \\MPcolor{%s} ;", cellsettings.backgroundcolor)
- context("cell_offset := %p ;", cellsettings.offset)
- context("cell_distance_x := %p ;", cellsettings.dx)
- context("cell_distance_y := %p ;", cellsettings.dy)
+ flush("cell_line_color := %q ;", cellsettings.framecolor)
+ flush("cell_line_width := %p ;", cellsettings.rulethickness)
+ flush("cell_fill_color := %q ;", cellsettings.backgroundcolor)
+ flush("cell_offset := %p ;", cellsettings.offset)
+ flush("cell_distance_x := %p ;", cellsettings.dx)
+ flush("cell_distance_y := %p ;", cellsettings.dy)
--
- context("line_line_color := \\MPcolor{%s} ;", linesettings.color)
- context("line_line_width := %p ;", linesettings.rulethickness)
- context("line_distance := %p ;", linesettings.distance)
- context("line_offset := %p ;", linesettings.offset)
+ flush("line_line_color := %q ;", linesettings.color)
+ flush("line_line_width := %p ;", linesettings.rulethickness)
+ flush("line_distance := %p ;", linesettings.distance)
+ flush("line_offset := %p ;", linesettings.offset)
+ flush("line_height := %p ;", linesettings.height)
--
- for i=1,#steps do
+ for i=1,chart.count do
local step = steps[i]
- context("step_begin_cell ;")
- if step.cell_top ~= "" then
- context('step_cell_top("%s") ;',string.strip(step.cell_top))
+ flush("step_begin_cell ;")
+ local ali = step.cell_ali
+ local top = step.cell_top
+ local bot = step.cell_bot
+ if ali then
+ local text = ali.text
+ local shape = ali.shape
+ flush('step_cell_ali(%s,%s,%s,%q,%q,%p,%i) ;',
+ tonumber(text.left) or 0,
+ tonumber(text.middle) or 0,
+ tonumber(text.right) or 0,
+ shape.framecolor,
+ shape.backgroundcolor,
+ shape.rulethickness,
+ tonumber(shape.alternative) or 24
+ )
end
- if step.cell_bot ~= "" then
- context('step_cell_bot("%s") ;',string.strip(step.cell_bot))
+ if top then
+ local shape = top.shape
+ flush('step_cell_top(%s,%q,%q,%p,%i) ;',
+ tonumber(top.text.top) or 0,
+ shape.framecolor,
+ shape.backgroundcolor,
+ shape.rulethickness,
+ tonumber(shape.alternative) or 24
+ )
end
- if step.text_top ~= "" then
- context('step_text_top("%s") ;',string.strip(step.text_top))
+ if bot then
+ local shape = bot.shape
+ flush('step_cell_bot(%s,%q,%q,%p,%i) ;',
+ tonumber(bot.text.bot) or 0,
+ shape.framecolor,
+ shape.backgroundcolor,
+ shape.rulethickness,
+ tonumber(shape.alternative) or 24
+ )
end
- if step.text_mid ~= "" then
- context('step_text_mid("%s") ;',string.strip(step.text_mid))
+ local top = step.text_top
+ local mid = step.text_mid
+ local bot = step.text_bot
+ local s_t = step.start_t
+ local s_m = step.start_m
+ local s_b = step.start_b
+ if top then
+ local shape = top.shape
+ local line = top.line
+ flush('step_text_top(%s,%q,%q,%p,%i,%q,%p,%i) ;',
+ tonumber(top.text.top) or 0,
+ shape.framecolor,
+ shape.backgroundcolor,
+ shape.rulethickness,
+ tonumber(shape.alternative) or 24,
+ line.color,
+ line.rulethickness,
+ tonumber(line.alternative) or 1
+ )
end
- if step.text_bot ~= "" then
- context('step_text_bot("%s") ;',string.strip(step.text_bot))
+ if mid then -- used ?
+ local shape = mid.shape
+ local line = mid.line
+ flush('step_text_mid(%s,%q,%q,%p,%i,%q,%p,%i) ;',
+ tonumber(mid.text.mid) or 0,
+ shape.framecolor,
+ shape.backgroundcolor,
+ shape.rulethickness,
+ tonumber(shape.alternative) or 24,
+ line.color,
+ line.rulethickness,
+ tonumber(line.alternative) or 1
+ )
end
- context("step_end_cell ;")
+ if bot then
+ local shape = bot.shape
+ local line = bot.line
+ flush('step_text_bot(%s,%q,%q,%p,%i,%q,%p,%i) ;',
+ tonumber(bot.text.bot) or 0,
+ shape.framecolor,
+ shape.backgroundcolor,
+ shape.rulethickness,
+ tonumber(shape.alternative) or 24,
+ line.color,
+ line.rulethickness,
+ tonumber(line.alternative) or 1
+ )
+ end
+ flush('start_t[%i] := %i ;',i,s_t)
+ flush('start_m[%i] := %i ;',i,s_m)
+ flush('start_b[%i] := %i ;',i,s_b)
+ flush("step_end_cell ;")
end
--
- context("step_end_chart ;")
- context.stopMPcode()
+ flush("step_end_chart ;")
+ stop()
end
-function commands.step_cells(top,bot)
- steps[#steps+1] = {
- cell_top = top or "",
- cell_bot = bot or "",
- text_top = "",
- text_mid = "",
- text_bot = "",
- }
+local function step_cells(spec)
+ count = count + 1
+ local step = steps[count]
+ step.cell_top = spec
+ step.cell_bot = spec
end
-function commands.step_texts(top,bot)
- if #steps > 0 then
- steps[#steps].text_top = top or ""
- steps[#steps].text_bot = bot or ""
- end
+local function step_cells_three(spec)
+ count = count + 1
+ local step = steps[count]
+ step.cell_ali = spec
end
-function commands.step_cell(top)
- steps[#steps+1] = {
- cell_top = top or "",
- cell_bot = "",
- text_top = "",
- text_mid = "",
- text_bot = "",
- }
+local function step_texts(spec)
+ if count > 0 then
+ local step = steps[count]
+ step.text_top = spec
+ step.text_bot = spec
+ end
end
-function commands.step_text(top)
- if #steps > 0 then
- steps[#steps].text_top = top or ""
- end
+local function step_cell(spec)
+ count = count + 1
+ steps[count].cell_top = spec
end
-function commands.step_textset(left,middle,right)
- if #steps > 0 then
- steps[#steps].text_top = left or ""
- steps[#steps].text_mid = middle or ""
- steps[#steps].text_bot = right or ""
+local function step_text(spec)
+ if count > 0 then
+ local c = count
+ while true do
+ local step = steps[c]
+ if step.text_top then
+ c = c + 1
+ step = steps[c]
+ else
+ step.text_top = spec
+ step.start_b = count
+ break
+ end
+ end
end
end
-function commands.step_start_cell()
- steps[#steps+1] = {
- cell_top = "",
- cell_bot = "",
- text_top = "",
- text_mid = "",
- text_bot = "",
- }
+local function step_start_cell()
+ count = count + 1
+ local step = steps[count] -- creates
end
-function commands.step_stop_cell()
+local function step_stop_cell()
end
-function commands.step_text_top(str)
- if #steps > 0 then
- steps[#steps].text_top = str or ""
+local function step_text_top(spec)
+ if count > 0 then
+ steps[count].text_top = spec
end
end
-function commands.step_text_mid(str)
- if #steps > 0 then
- steps[#steps].text_mid = str or ""
+local function step_text_mid(spec)
+ if count > 0 then
+ steps[count].text_mid = spec
end
end
-function commands.step_text_bot(str)
- if #steps > 0 then
- steps[#steps].text_bot = str or ""
+local function step_text_bot(spec)
+ if count > 0 then
+ steps[count].text_bot = spec
end
end
-function commands.step_cell_top(str)
- if #steps > 0 then
- steps[#steps].cell_top = str or ""
+local function step_cell_top(spec)
+ if count > 0 then
+ steps[count].cell_top = spec
end
end
-function commands.step_cell_bot(str)
- if #steps > 0 then
- steps[#steps].cell_bot = str or ""
+local function step_cell_bot(spec)
+ if count > 0 then
+ steps[count].cell_bot = spec
end
end
+
+--
+
+interfaces.implement {
+ name = "step_start_chart",
+ arguments = { "string", "string" },
+ actions = step_start_chart,
+}
+
+interfaces.implement {
+ name = "step_stop_chart",
+ actions = step_stop_chart,
+}
+
+interfaces.implement {
+ name = "step_make_chart",
+ actions = step_make_chart,
+ arguments = {
+ {
+ { "chart", {
+ { "category" },
+ { "name" },
+ { "alternative" },
+ }
+ },
+ { "cell", {
+ { "alternative" },
+ { "offset", "dimension" },
+ { "rulethickness", "dimension" },
+ { "framecolor" },
+ { "backgroundcolor" },
+ { "dx", "dimension" },
+ { "dy", "dimension" },
+ }
+ },
+ { "text", {
+ { "alternative" },
+ { "offset", "dimension" },
+ { "distance", "dimension" },
+ { "rulethickness", "dimension" },
+ { "framecolor" },
+ { "backgroundcolor" },
+ }
+ },
+ { "line", {
+ { "alternative" },
+ { "rulethickness", "dimension" },
+ { "height", "dimension" },
+ { "distance", "dimension" },
+ { "offset", "dimension" },
+ { "color" },
+ }
+ }
+ }
+ }
+}
+
+local step_spec = {
+ {
+ { "text", {
+ { "top" },
+ { "middle" },
+ { "mid" },
+ { "bot" },
+ { "left" },
+ { "right" },
+ }
+ },
+ { "shape", {
+ { "rulethickness", "dimension" },
+ { "alternative" },
+ { "framecolor" },
+ { "backgroundcolor" },
+ }
+ },
+ { "line", {
+ { "alternative" },
+ { "rulethickness", "dimension" },
+ { "color" },
+ { "offset", "dimension" },
+ }
+ }
+ }
+}
+
+interfaces.implement {
+ name = "step_cell",
+ arguments = step_spec,
+ actions = step_cell,
+}
+
+interfaces.implement {
+ name = "step_text",
+ arguments = step_spec,
+ actions = step_text,
+}
+
+interfaces.implement {
+ name = "step_text_top",
+ arguments = step_spec,
+ actions = step_text_top,
+}
+
+interfaces.implement {
+ name = "step_text_mid",
+ arguments = step_spec,
+ actions = step_text_mid,
+}
+
+interfaces.implement {
+ name = "step_text_bot",
+ arguments = step_spec,
+ actions = step_text_bot,
+}
+
+interfaces.implement {
+ name = "step_cell_top",
+ arguments = step_spec,
+ actions = step_cell_top,
+}
+
+interfaces.implement {
+ name = "step_cell_bot",
+ arguments = step_spec,
+ actions = step_cell_bot,
+}
+
+interfaces.implement {
+ name = "step_start_cell",
+ actions = step_start_cell,
+}
+
+interfaces.implement {
+ name = "step_stop_cell",
+ actions = step_stop_cell,
+}
+
+interfaces.implement {
+ name = "step_texts",
+ arguments = step_spec,
+ actions = step_texts,
+}
+
+interfaces.implement {
+ name = "step_cells",
+ arguments = step_spec,
+ actions = step_cells,
+}
+
+interfaces.implement {
+ name = "step_cells_three",
+ arguments = step_spec,
+ actions = step_cells_three,
+}
diff --git a/tex/context/modules/mkiv/m-steps.mkvi b/tex/context/modules/mkiv/m-steps.mkvi
index c9c5a0636..873015fd6 100644
--- a/tex/context/modules/mkiv/m-steps.mkvi
+++ b/tex/context/modules/mkiv/m-steps.mkvi
@@ -11,66 +11,71 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-% multiple texts?
+% This code is not optimized.
\registerctxluafile{m-steps}{}
\unprotect
+\defineMPinstance
+ [steps]
+ [\s!format=metafun,
+ \s!extensions=\v!yes,
+ \s!initializations=\v!yes]
+ %\c!method=\s!double]
+
+\startMPdefinitions{steps}
+ loadmodule "step" ;
+\stopMPdefinitions
+
\installcorenamespace {stepcharts}
-\installcorenamespace {steptables}
\installcorenamespace {stepcells}
\installcorenamespace {steptexts}
\installcorenamespace {steplines}
-\installsimplecommandhandler \??stepcharts {STEPchart} \??stepcharts
-\installsimplecommandhandler \??steptables {STEPtable} \??steptables
-\installsimplecommandhandler \??stepcells {STEPcell} \??stepcells
-\installsimplecommandhandler \??steptexts {STEPtext} \??steptexts
-\installsimplecommandhandler \??steplines {STEPline} \??steplines
+\installstylisticautosetuphandler \??stepcharts {STEPchart} \??stepcharts
+\installstylisticautosetuphandler \??stepcells {STEPcell} \??stepcells
+\installstylisticautosetuphandler \??steptexts {STEPtext} \??steptexts
+\installstylisticautosetuphandler \??steplines {STEPline} \??steplines
\let\setupSTEPcharts\setupSTEPchart
-\let\setupSTEPtables\setupSTEPtable
+\let\setupSTEPtables\setupSTEPchart % one can define categories so no need
\let\setupSTEPcells \setupSTEPcell
\let\setupSTEPtexts \setupSTEPtext
\let\setupSTEPlines \setupSTEPline
+\let\setSTEPchartsparameter\setSTEPchartparameter
+\let\setSTEPcellsparameter \setSTEPcellparameter
+\let\setSTEPtextsparameter \setSTEPtextparameter
+\let\setSTEPlinesparameter \setSTEPlineparameter
+
% numeric text_text_distance ; text_text_distance := 20pt ;
% numeric step_distance ; step_distance := 20pt ;
\setupSTEPcharts
- [\c!alternative=\v!horizontal,
+ [%c!alternative=\v!horizontal, % travels with stored so dealt with in lua
+ %\c!offset=.15\bodyfontsize
+ %\c!height=2ex
\c!before=\blank,
\c!after=\blank]
-% \c!offset=.15\bodyfontsize
-% \c!height=2ex
-
-% \setupSTEPtables
-% [\c!before=\blank,
-% \c!after=\blank,
-% \c!distance=.25em,
-% \c!voffset=1ex,
-% \c!method=1,
-% \c!width=4em,
-% \c!offset=.15\bodyfontsize]
\setupSTEPcells
- [\c!alternative=1, % TODO
-% \c!style=,
-% \c!color=,
+ [\c!alternative=24,
+ \c!style=,
+ \c!color=,
\c!dx=\bodyfontsize,
\c!dy=\bodyfontsize,
- \c!background=\v!color,
+ % \c!background=\v!color,
\c!backgroundcolor=STEPbackgroundcolor,
\c!rulethickness=.1\bodyfontsize,
\c!framecolor=STEPframecolor,
\c!offset=.25\bodyfontsize]
\setupSTEPtexts
- [\c!alternative=1, % TODO
-% \c!style=\v!smallbodyfont,
-% \c!color=,
- \c!background=\v!color,
+ [\c!alternative=24,
+ \c!style=\v!smallbodyfont,
+ \c!color=,
+ % \c!background=\v!color,
\c!backgroundcolor=STEPbackgroundcolor,
\c!rulethickness=.1\bodyfontsize,
\c!framecolor=STEPframecolor,
@@ -78,9 +83,10 @@
\c!offset=.25\bodyfontsize]
\setupSTEPlines
- [\c!alternative=1, % TODO
+ [\c!alternative=1,
\c!rulethickness=.15\bodyfontsize,
- \c!height=3\bodyfontsize,
+ \c!height=\STEPlineparameter\c!width,
+ \c!width=3\bodyfontsize,
\c!distance=.5\bodyfontsize,
\c!offset=.25\bodyfontsize,
\c!color=STEPlinecolor]
@@ -89,31 +95,78 @@
\definecolor [STEPframecolor] [s=.7]
\definecolor [STEPbackgroundcolor] [s=.9]
+\newcount\c_module_steps_tag
+\newmacro\m_module_steps_category
+
+\unexpanded\def\setSTEPbox#tag#str%
+ {\setbox\scratchbox\hbox\bgroup
+ \begstrut
+ \ignorespaces
+ #str%
+ \removeunwantedspaces
+ \endstrut
+ \egroup
+ \ifzeropt\wd\scratchbox
+ \let#1\empty
+ \else
+ \global\advance\c_module_steps_tag\plusone
+ \edef#tag{\the\c_module_steps_tag}%
+ \putboxincache{\??stepcharts\m_module_steps_category}{#tag}\scratchbox
+ \fi}
+
\newtoks\everySTEPchart
+% we used to save charts but that is tricky with so much delegated to lua
+% and mp so now we do support a buffered way only
+
+\def\module_steps_syncronize
+ {\let\currentSTEPtext\p_category
+ \let\currentSTEPcell\p_category
+ \let\currentSTEPline\p_category
+ \checkSTEPcellparent
+ \checkSTEPtextparent
+ \checkSTEPlineparent}
+
\unexpanded\def\startSTEPchart
{\begingroup
\dodoubleempty\module_steps_start_chart}
\def\module_steps_start_chart[#name][#settings]%
- {\startnointerference
- \iffirstargument
+ {\iffirstargument
\doifelseassignment{#name}
{\let\currentSTEPchart\empty
- \xdef\module_steps_flush_chart{\module_steps_chart[][#name]}}
+ \let\m_module_steps_category\empty
+ \setupcurrentSTEPchart[#name]%
+ \def\module_steps_flush_chart{\module_steps_chart[][#name]}}
{\edef\currentSTEPchart{#name}%
- \glet\module_steps_flush_chart\relax}% settings are not stored
+ \setupcurrentSTEPchart[#settings]%
+ \let\m_module_steps_category\currentSTEPchart
+ \resetboxesincache{\??stepcharts\m_module_steps_category}%
+ \doifelse{\STEPchartparameter\c!buffer}\v!no
+ {\def\module_steps_flush_chart{\STEPchart[#name]}}
+ {\let\module_steps_flush_chart\relax}}%
\else
\let\currentSTEPchart\empty
- \gdef\module_steps_flush_chart{\module_steps_chart[][]}%
+ \def\module_steps_flush_chart{\module_steps_chart[][]}%
\fi
+ \edef\p_category{\STEPchartparameter\c!category}%
+ \let\currentSTEPtext\p_category
+ \let\currentSTEPcell\p_category
+ \let\currentSTEPline\p_category
+ \checkSTEPcellparent
+ \checkSTEPtextparent
+ \checkSTEPlineparent
\the\everySTEPchart
- \ctxcommand{step_start_chart("\currentSTEPchart")}}
+ \startnointerference
+ \clf_step_start_chart{\currentSTEPchart}{\STEPchartparameter\c!alternative}}
\unexpanded\def\stopSTEPchart
- {\ctxcommand{step_stop_chart()}%
+ {\clf_step_stop_chart
\stopnointerference
\module_steps_flush_chart
+ \ifx\m_module_steps_category\empty
+ \resetboxesincache{\??stepcharts}%
+ \fi
\endgroup}
\unexpanded\def\startSTEPtable
@@ -123,13 +176,24 @@
\let\stopSTEPtable\stopSTEPchart
+\unexpanded\def\startSTEPaligntable
+ {\begingroup
+ \setupSTEPchart[\c!alternative={\v!vertical,\v!three}]%
+ \let\module_steps_cells\module_steps_cells_three % no nesting yet
+ \dodoubleempty\module_steps_start_chart}
+
+\let\stopSTEPaligntable\stopSTEPchart
+
\let\module_steps_flush_chart\relax
+% \resetboxesincache\??stepcharts
+
\unexpanded\def\STEPchart
{\dodoubleempty\module_steps_chart}
\unexpanded\def\module_steps_chart[#name][#settings]%
{\begingroup
+ \edef\m_module_steps_category{#name}%
\setupSTEPchart[#settings]%
\ifinsidefloat
\makeSTEPchart[#name]%
@@ -137,129 +201,300 @@
\STEPchartparameter\c!before
\startbaselinecorrection
\setlocalhsize
- \makeSTEPchart[#name]%
+ \dontleavehmode\vpack{\makeSTEPchart[#name]}% we need to ensure leftskip
\stopbaselinecorrection
\STEPchartparameter\c!after
\fi
\endgroup}
\unexpanded\def\makeSTEPchart[#name]%
- {\ctxcommand{step_make_chart {
- chart = {
- name = "#name",
- alternative = "\STEPchartparameter\c!alternative",
- },
- cell = {
- alternative = "\STEPcellparameter\c!alternative", % TODO: shapes
- offset = \number\dimexpr\STEPcellparameter\c!offset,
- rulethickness = \number\dimexpr\STEPcellparameter\c!rulethickness,
- framecolor = "\STEPcellparameter\c!framecolor",
- backgroundcolor = "\STEPcellparameter\c!backgroundcolor",
- dx = \number\dimexpr\STEPcellparameter\c!dx,
- dy = \number\dimexpr\STEPcellparameter\c!dy,
- },
- text = {
- alternative = "\STEPtextparameter\c!alternative", % TODO: shapes
- offset = \number\dimexpr\STEPtextparameter\c!offset,
- distance = \number\dimexpr\STEPtextparameter\c!distance,
- rulethickness = \number\dimexpr\STEPtextparameter\c!rulethickness,
- framecolor = "\STEPtextparameter\c!framecolor",
- backgroundcolor = "\STEPtextparameter\c!backgroundcolor",
- },
- line = {
- alternative = "\STEPlineparameter\c!alternative", % TODO: dash, arrow
- rulethickness = \number\dimexpr\STEPlineparameter\c!rulethickness,
- height = \number\dimexpr\STEPlineparameter\c!height,
- distance = \number\dimexpr\STEPlineparameter\c!distance,
- offset = \number\dimexpr\STEPlineparameter\c!offset,
- color = "\STEPlineparameter\c!color",
- },
- }}}
-
-\unexpanded\def\startSTEPcell
- {\ctxcommand{step_start_cell()}}
-
-\unexpanded\def\stopSTEPcell
- {\ctxcommand{step_stop_cell()}}
-
-\unexpanded\def\module_steps_cells#top#bot%
- {\ctxcommand{step_cells(\!!bs\detokenize{#top}\!!es,\!!bs\detokenize{#bot}\!!es)}}
-
-\unexpanded\def\module_steps_texts#top#bot%
- {\ctxcommand{step_texts(\!!bs\detokenize{#top}\!!es,\!!bs\detokenize{#bot}\!!es)}}
-
-\unexpanded\def\module_steps_cell#str%
- {\ctxcommand{step_cell(\!!bs\detokenize{#str}\!!es)}}
-
-\unexpanded\def\module_steps_text#str%
- {\ctxcommand{step_text(\!!bs\detokenize{#str}\!!es)}}
-
-\unexpanded\def\module_steps_textset#left#middle#right%
- {\ctxcommand{step_textset(\!!bs\detokenize{#left}\!!es,\!!bs\detokenize{#middle}\!!es,\!!bs\detokenize{#right}\!!es)}}
-
-\unexpanded\def\module_steps_toptext#top%
- {\ctxcommand{step_text_top(\!!bs\detokenize{#top}\!!es)}}
-
-\unexpanded\def\module_steps_bottext#bot%
- {\ctxcommand{step_text_bot(\!!bs\detokenize{#bot}\!!es)}}
-
-\unexpanded\def\module_steps_topcell#top%
- {\ctxcommand{step_cell_top(\!!bs\detokenize{#top}\!!es)}}
-
-\unexpanded\def\module_steps_botcell#bot%
- {\ctxcommand{step_cell_bot(\!!bs\detokenize{#bot}\!!es)}}
+ {\clf_step_make_chart
+ chart {
+ category {\??stepcharts\m_module_steps_category}
+ name {#name}
+ alternative {\STEPchartparameter\c!alternative}
+ }
+ cell {
+ alternative {\STEPcellparameter\c!alternative}
+ offset \dimexpr\STEPcellparameter\c!offset\relax
+ rulethickness \dimexpr\STEPcellparameter\c!rulethickness\relax
+ framecolor {\STEPcellparameter\c!framecolor}
+ backgroundcolor {\STEPcellparameter\c!backgroundcolor}
+ dx \dimexpr\STEPcellparameter\c!dx\relax
+ dy \dimexpr\STEPcellparameter\c!dy\relax
+ }
+ text {
+ alternative {\STEPtextparameter\c!alternative}
+ offset \dimexpr\STEPtextparameter\c!offset\relax
+ distance \dimexpr\STEPtextparameter\c!distance\relax
+ rulethickness \dimexpr\STEPtextparameter\c!rulethickness\relax
+ framecolor {\STEPtextparameter\c!framecolor}
+ backgroundcolor {\STEPtextparameter\c!backgroundcolor}
+ }
+ line {
+ alternative {\STEPlineparameter\c!alternative}
+ rulethickness \dimexpr\STEPlineparameter\c!rulethickness\relax
+ height \dimexpr\STEPlineparameter\c!height\relax
+ distance \dimexpr\STEPlineparameter\c!distance\relax
+ offset \dimexpr\STEPlineparameter\c!offset\relax
+ color {\STEPlineparameter\c!color}
+ }
+ \relax}
+
+\unexpanded\def\startSTEPcell{\clf_step_start_cell}
+\unexpanded\def\stopSTEPcell {\clf_step_stop_cell}
+
+\unexpanded\def\module_steps_cells {\dosingleempty\module_steps_cells_indeed}
+\unexpanded\def\module_steps_cells_three{\dosingleempty\module_steps_cells_three_indeed}
+\unexpanded\def\module_steps_texts {\dosingleempty\module_steps_texts_indeed}
+\unexpanded\def\module_steps_cell {\dosingleempty\module_steps_cell_indeed}
+\unexpanded\def\module_steps_text {\dosingleempty\module_steps_text_indeed}
+\unexpanded\def\module_steps_toptext {\dosingleempty\module_steps_toptext_indeed}
+\unexpanded\def\module_steps_bottext {\dosingleempty\module_steps_bottext_indeed}
+\unexpanded\def\module_steps_topcell {\dosingleempty\module_steps_topcell_indeed}
+\unexpanded\def\module_steps_botcell {\dosingleempty\module_steps_botcell_indeed}
+
+\def\module_steps_check_cell#category%
+ {\edef\p_category{#category}%
+ \ifx\p_category\empty \else
+ \let\currentSTEPcell\p_category
+ \let\currentSTEPline\p_category
+ \checkSTEPcellparent
+ \checkSTEPlineparent
+ \fi}
+
+\def\module_steps_check_text#category%
+ {\edef\p_category{#category}%
+ \ifx\p_category\empty \else
+ \let\currentSTEPtext\p_category
+ \let\currentSTEPline\p_category
+ \checkSTEPtextparent
+ \checkSTEPlineparent
+ \fi}
+
+\def\module_steps_pass_data#1#2%
+ {{
+ text {
+ #2
+ }
+ shape {
+ rulethickness \dimexpr#1\c!rulethickness\relax
+ alternative {#1\c!alternative}
+ framecolor {#1\c!framecolor}
+ backgroundcolor {#1\c!backgroundcolor}
+ }
+ line {
+ rulethickness \dimexpr\STEPlineparameter\c!rulethickness\relax
+ alternative {\STEPlineparameter\c!alternative}
+ color {\STEPlineparameter\c!color}
+ offset \dimexpr\STEPlineparameter\c!offset\relax
+ }
+ }}
+
+\def\module_steps_cells_indeed[#category]#top#bot%
+ {\begingroup
+ \iffirstargument
+ \module_steps_check_cell{#category}%
+ \fi
+ \useSTEPcellstyleandcolor\c!style\c!color
+ \setSTEPbox\module_steps_tag_a{#top}%
+ \setSTEPbox\module_steps_tag_b{#bot}%
+ \clf_step_cells \module_steps_pass_data \STEPcellparameter {
+ top {\module_steps_tag_a}
+ bot {\module_steps_tag_b}
+ }
+ \endgroup}
+
+\def\module_steps_cells_three_indeed[#category]#one#two#three%
+ {\begingroup
+ \iffirstargument
+ \module_steps_check_cell{#category}%
+ \fi
+ \useSTEPcellstyleandcolor\c!style\c!color
+ \setSTEPbox\module_steps_tag_a{#one}%
+ \setSTEPbox\module_steps_tag_b{#two}%
+ \setSTEPbox\module_steps_tag_c{#three}%
+ \clf_step_cells_three \module_steps_pass_data \STEPcellparameter {
+ left {\module_steps_tag_a}
+ middle {\module_steps_tag_b}
+ right {\module_steps_tag_c}
+ }%
+ \endgroup}
+
+\def\module_steps_texts_indeed[#category]#top#bot%
+ {\begingroup
+ \iffirstargument
+ \module_steps_check_text{#category}%
+ \fi
+ \useSTEPtextstyleandcolor\c!style\c!color
+ \setSTEPbox\module_steps_tag_a{#top}%
+ \setSTEPbox\module_steps_tag_b{#bot}%
+ \clf_step_texts \module_steps_pass_data \STEPtextparameter {
+ top {\module_steps_tag_a}
+ bot {\module_steps_tag_b}
+ }%
+ \endgroup}
+
+\def\module_steps_cell_indeed[#category]#str%
+ {\begingroup
+ \iffirstargument
+ \module_steps_check_cell{#category}%
+ \fi
+ \useSTEPcellstyleandcolor\c!style\c!color
+ \setSTEPbox\module_steps_tag_a{#str}%
+ \clf_step_cell \module_steps_pass_data \STEPcellparameter {
+ top {\module_steps_tag_a}
+ }%
+ \endgroup}
+
+\def\module_steps_text_indeed[#category]#str%
+ {\begingroup
+ \iffirstargument
+ \module_steps_check_text{#category}%
+ \fi
+ \useSTEPtextstyleandcolor\c!style\c!color
+ \setSTEPbox\module_steps_tag_a{#str}%
+ \clf_step_text \module_steps_pass_data \STEPtextparameter {
+ top {\module_steps_tag_a}
+ }%
+ \endgroup}
+
+\def\module_steps_toptext_indeed[#category]#top%
+ {\begingroup
+ \iffirstargument
+ \module_steps_check_text{#category}%
+ \fi
+ \useSTEPtextstyleandcolor\c!style\c!color
+ \setSTEPbox\module_steps_tag_a{#top}%
+ \clf_step_text_top \module_steps_pass_data \STEPtextparameter {
+ top {\module_steps_tag_a}
+ }%
+ \endgroup}
+
+\def\module_steps_bottext_indeed[#category]#bot%
+ {\begingroup
+ \iffirstargument
+ \module_steps_check_text{#category}%
+ \fi
+ \useSTEPtextstyleandcolor\c!style\c!color
+ \setSTEPbox\module_steps_tag_a{#bot}%
+ \clf_step_text_bot \module_steps_pass_data \STEPtextparameter {
+ bot {\module_steps_tag_a}
+ }%
+ \endgroup}
+
+\def\module_steps_topcell_indeed[#category]#top%
+ {\begingroup
+ \iffirstargument
+ \module_steps_check_cell{#category}%
+ \fi
+ \useSTEPcellstyleandcolor\c!style\c!color
+ \setSTEPbox\module_steps_tag_a{#top}%
+ \clf_step_cell_top \module_steps_pass_data \STEPcellparameter {
+ top {\module_steps_tag_a}
+ }%
+ \endgroup}
+
+\def\module_steps_botcell_indeed[#category]#bot%
+ {\begingroup
+ \iffirstargument
+ \module_steps_check_cell{#category}%
+ \fi
+ \useSTEPcellstyleandcolor\c!style\c!color
+ \setSTEPbox\module_steps_tag_a{#bot}%
+ \clf_step_cell_bot \module_steps_pass_data \STEPcellparameter {
+ bot {\module_steps_tag_a}
+ }%
+ \endgroup}
\appendtoks
\let\cells \module_steps_cells
\let\texts \module_steps_texts
\let\cell \module_steps_cell
\let\text \module_steps_text
- \let\textset\module_steps_textset
\let\toptext\module_steps_toptext
\let\bottext\module_steps_bottext
\let\topcell\module_steps_topcell
\let\botcell\module_steps_botcell
\to \everySTEPchart
-% todo: mapping can be done in lua
+% The xml interface:
+
+\unexpanded\def\setSTEPxmldirective#1#2#3%
+ {\begincsname setSTEP#1parameter\endcsname{#2}{#3}}
+
+\xmlinstalldirective{stepchart}{setSTEPxmldirective}
\startxmlsetups xml:step:define
- \xmlsetsetup{#1} {stepchart|steptable} {xml:step:*}
+ \xmlsetsetup
+ {#1}
+ {stepchart|steptable|stepaligntable|cells|texts|stepcell|cell|text}
+ {xml:step:*}
\stopxmlsetups
\xmlregistersetup{xml:step:define}
\startxmlsetups xml:step:stepchart
- \startSTEPchart
- \xmlfilter{#1}{/(cells|texts|stepcell|cell|text)/command(xml:step:*)}
+ \startSTEPchart[\c!category=\xmlatt{#1}{class}]
+ \xmlflush{#1}
\stopSTEPchart
\stopxmlsetups
\startxmlsetups xml:step:steptable
- \startSTEPtable
- \xmlfilter{#1}{/(cells|texts|stepcell|cell|text)/command(xml:step:*)}
+ \startSTEPtable[\c!category=\xmlatt{#1}{class}]
+ \xmlflush{#1}
\stopSTEPtable
\stopxmlsetups
+\startxmlsetups xml:step:stepaligntable
+ \startSTEPaligntable[\c!category=\xmlatt{#1}{class}]
+ \xmlflush{#1}
+ \stopSTEPaligntable
+\stopxmlsetups
+
\startxmlsetups xml:step:cells
- \cells {\xmltext{#1}{/top}} {\xmltext{#1}{/bot}}
+ \xmldoifelse {#1} {/c1} {
+ \cells
+ [\xmlatt{#1}{class}]
+ {\xmltext{#1}{/c1}}
+ {\xmltext{#1}{/c2}}
+ {\xmltext{#1}{/c3}}
+ } {
+ \cells
+ [\xmlatt{#1}{class}]
+ {\xmltext{#1}{/top}}
+ {\xmltext{#1}{/bot}}
+ }
\stopxmlsetups
\startxmlsetups xml:step:texts
- \texts {\xmltext{#1}{/top}} {\xmltext{#1}{/bot}}
+ \texts
+ [\xmlatt{#1}{class}]
+ {\xmltext{#1}{/top}}
+ {\xmltext{#1}{/bot}}
\stopxmlsetups
\startxmlsetups xml:step:stepcell
- \cells {\xmltext{#1}{/topcell}} {\xmltext{#1}{/botcell}}
- \texts {\xmltext{#1}{/toptext}} {\xmltext{#1}{/bottext}}
+ \cells
+ [\xmlatt{#1}{class}]
+ {\xmltext{#1}{/topcell}}
+ {\xmltext{#1}{/botcell}}
+ \texts
+ [\xmlatt{#1}{class}]
+ {\xmltext{#1}{/toptext}}
+ {\xmltext{#1}{/bottext}}
\stopxmlsetups
\startxmlsetups xml:step:cell
- \cell {\xmlflush{#1}}
+ \cell
+ [\xmlatt{#1}{class}]
+ {\xmlflush{#1}}
\stopxmlsetups
\startxmlsetups xml:step:text
- \text {\xmlflush{#1}}
+ \text
+ [\xmlatt{#1}{class}]
+ {\xmlflush{#1}}
\stopxmlsetups
\protect
@@ -268,11 +503,13 @@
\starttext
+\setupSTEPcells[demo-1][style=bold]
+
\startbuffer
<stepchart>
<cell> some cell </cell>
<text> some text </text>
- <cell> some cell </cell>
+ <cell class="demo-1"> some cell </cell>
<text> some text </text>
<cell> some cell </cell>
</stepchart>
@@ -280,7 +517,6 @@
\typebuffer \processxmlbuffer
-
\startbuffer
<steptable>
<cell> some cell </cell>
@@ -304,15 +540,6 @@
\cells {five} {one}
\stopSTEPchart
-\startSTEPtable
- \cell {one} \textset{$x$} {=}{$a+b+c$}
- \cell {two} \textset{$c+d$}{=}{$y$}
- \cell {three}
-\stopSTEPtable
-
-
-\page
-
\startbuffer
<stepchart>
<cells> <top> some text </top> <bot> some text </bot> </cells>
@@ -379,4 +606,53 @@
\page
+\setupSTEPchart
+ [mytable]
+ [before={\blank[2*big]},
+ after={\blank[2*big]}]
+
+\starttext
+
+\startSTEPaligntable[mytable]
+ \cells {$2c$} {$=$} {$2a+3b$}
+ \text {with $a=5$}
+ \cells {$2c$}{$=$} {$10+3b$}
+ \text {and $b=6$}
+ \cells {$2c$} {$=$} {$10+18$}
+ \text {we get}
+ \cells {$2c$} {$=$} {$28$}
+ \text {and therefore}
+ \cells {$c$} {$=$} {$28/2$}
+ \text {which reduces to}
+ \cells {$c$} {$=$} {$14$}
+\stopSTEPaligntable
+
+\input tufte
+
+\STEPchart[mytable]
+
+\input tufte
+
+\setupSTEPchart
+ [mytable]
+ [buffer=no]
+
+\startSTEPaligntable[mytable]
+ \cells {$2c$} {$=$} {$2a+3b$}
+ \text {with $a=5$}
+ \cells {$2c$}{$=$} {$10+3b$}
+ \text {and $b=6$}
+ \cells {$2c$} {$=$} {$10+18$}
+ \text {we get}
+ \cells {$2c$} {$=$} {$28$}
+ \text {and therefore}
+ \cells {$c$} {$=$} {$28/2$}
+ \text {which reduces to}
+ \cells {$c$} {$=$} {$14$}
+\stopSTEPaligntable
+
+\input tufte
+
+\STEPchart[mytable]
+
\stoptext
diff --git a/tex/context/modules/mkiv/m-visual.mkiv b/tex/context/modules/mkiv/m-visual.mkiv
index 01fae49e2..6ec0a52b0 100644
--- a/tex/context/modules/mkiv/m-visual.mkiv
+++ b/tex/context/modules/mkiv/m-visual.mkiv
@@ -14,7 +14,8 @@
\unprotect
%D Much will probably be replaced by \LUA\ based solutions which is
-%D rather trivial and fun doing.
+%D rather trivial and fun doing. A lot here makes no sense any more,
+%D for instance whatsits are not used.
%D This module collect a few more visual debugger features. I
%D needed them for manuals and styles. The macros are documented
@@ -24,13 +25,18 @@
\definecolor[fakebaselinecolor] [green]
\definecolor[fakeparindentcolor][blue]
-\newif\iffakebaseline \fakebaselinetrue
-\newif\iffaketrigger \faketriggerfalse
+\newif \iffakebaseline \fakebaselinetrue
+\newif \iffaketrigger \faketriggerfalse
+\newdimen \fakerulewidth \fakerulewidth=.2pt
\unexpanded\def\fakerule#1%
{\strut
\begingroup
- \directcolored[fakerulecolor]%
+ \ifx\fakerulecolor\relax
+ \directcolored[fr\recurselevel c]%
+ \else
+ \directcolored[fakerulecolor]%
+ \fi
\iffakebaseline
\vrule\s!height1.25\exheight\s!depth-.05\exheight\s!width#1%
\kern-#1%
@@ -75,7 +81,9 @@
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}%
+ {\dontleavehmode
+ \ifvmode\noindentation\fi
+ \getrandomcount\scratchcounter{\ifcase0#1 10\else#1\fi}{\ifcase0#2 40\else#2\fi}%
\dofakewords\scratchcounter
} % no \par
@@ -102,7 +110,7 @@
\def\doshowfakewords#1%
{\bgroup
\setuppalet[fakerule]%
- \definecolor[fakerulecolor]%
+ \let\fakerulecolor\relax
\dorecurse{#1}
{\getrandomcount\scratchcounter{1}{5}%
\dorecurse\scratchcounter
@@ -141,19 +149,17 @@
\def\dofakedroppedcaps
{\setbox\scratchbox\hpack
{\setbox\scratchbox\hpack{W}%
- \scratchdimen#1\lineheight
- \advance\scratchdimen -\lineheight
- \advance\scratchdimen \dp\strutbox
+ \scratchdimen\dimexpr#1\lineheight-\lineheight+\dp\strutbox\relax
\vrule
\s!width#1\wd\scratchbox
\s!height\ht\scratchbox
\s!depth\scratchdimen}%
\ht\scratchbox\ht\strutbox
\dp\scratchbox\dp\strutbox
- \hangindent\wd\scratchbox
- \advance\hangindent .5em
+ \hangindent\dimexpr\wd\scratchbox+.5\emwidth\relax
\wd\scratchbox\hangindent
- \hangafter-#1\noindent
+ \hangafter-#1%
+ \noindent
\llap{\fakeparindentcolor\box\scratchbox}}%
\fi}
@@ -169,13 +175,15 @@
\doifelseinset{#1}{\v!left,\v!right}
{\fakewords{2}{4}}
{\fakewords{4}{10}}}%
- {\doifinset{#1}{\v!left,\v!right}
- {\dimen0=.75\dimen0
- \ifdim\dimen0>.6\hsize \dimen0=.5\hsize\fi
- \ifdim\dimen0<.3\hsize \dimen0=.3\hsize\fi}%
+ {\getrandomdimen\scratchdimenone{#3}{#4}%
+ \getrandomdimen\scratchdimentwo{#5}{#6}%
+ \doifinset{#1}{\v!left,\v!right}
+ {\scratchdimenone.75\scratchdimenone
+ \ifdim\scratchdimenone>.6\hsize \scratchdimenone.5\hsize\fi
+ \ifdim\scratchdimenone<.3\hsize \scratchdimenone.3\hsize\fi}%
\framed
- [\c!width=\dimen0,
- \c!height=\dimen2,
+ [\c!width=\scratchdimenone,
+ \c!height=\scratchdimentwo,
\c!frame=\v!off,
\c!background=\v!color,
\c!backgroundcolor=fakeparindentcolor]
@@ -183,25 +191,25 @@
\defrostrandomseed}
\unexpanded\def\fakeimage#1#2#3#4%
- {\getrandomdimen{\dimen0}{#1}{#3}%
- \getrandomdimen{\dimen2}{#2}{#4}%
+ {\getrandomdimen\scratchdimenone{#1}{#3}%
+ \getrandomdimen\scratchdimentwo{#2}{#4}%
\framed
- [\c!width=\dimen0,
- \c!height=\dimen2,
+ [\c!width=\scratchdimenone,
+ \c!height=\scratchdimentwo,
\c!frame=\v!off,
\c!background=\v!color,
\c!backgroundcolor=fakeparindentcolor]
{}}
\unexpanded\def\fakeformula
- {\dimen0\zeropoint
+ {\scratchdimenone\zeropoint
\getrandomcount\scratchcounter{3}{6}%
\dorecurse\scratchcounter
- {\getrandomdimen\scratchdimen{0.5em}{1.5em}%
- \mathord{\red\fakerule\scratchdimen}%
+ {\getrandomdimen\scratchdimentwo{0.5\emwidth}{1.5\emwidth}%
+ \mathord{\red\fakerule\scratchdimentwo}%
\ifnum\recurselevel<\scratchcounter+\fi
- \advance\scratchdimen\dimen0}%
- =\mathinner{\red\fakerule\scratchdimen}}
+ \advance\scratchdimentwo\scratchdimenone}%
+ =\mathinner{\red\fakerule\scratchdimentwo}}
\unexpanded\def\fakespacingformula
{\color[fakebaselinecolor]{\ruledbaseline}\fakeformula}
@@ -306,11 +314,10 @@
\scratchdimen#1\relax
\dontinterfere
\dontcomplain
- %boxrulewidth5\testrulewidth
#3#4\relax
\setbox\scratchbox\normalhbox to \scratchdimen
{#2{\ruledhbox to \scratchdimen
- {\vrule #5 20\testrulewidth \s!width \zeropoint
+ {\vrule #5 20\fakerulewidth \s!width \zeropoint
\normalhss}}}%
\smashbox\scratchbox
\normalpenalty\plustenthousand
@@ -321,8 +328,7 @@
{\ifdim\hangindent>\zeropoint
\ifnum\hangafter<\zerocount
\normalhbox
- {%boxrulewidth5\testrulewidth
- \setbox\scratchbox\ruledhbox to \hangindent
+ {\setbox\scratchbox\ruledhbox to \hangindent
{\scratchdimen\strutht
\advance\scratchdimen \strutdp
\vrule
@@ -354,7 +360,7 @@
\unexpanded\def\ruledpar
{\relax
\ifhmode
- \showparagraphcue{40\testrulewidth}\relax\rightrulefalse\relax\s!height
+ \showparagraphcue{40\fakerulewidth}\relax\rightrulefalse\relax\s!height
\fi
\normalpar}
@@ -362,7 +368,7 @@
{\relax
\normalnoindent
\ruledparagraphcues
- \showparagraphcue{40\testrulewidth}\llap\leftrulefalse\relax\s!height}
+ \showparagraphcue{40\fakerulewidth}\llap\leftrulefalse\relax\s!height}
\unexpanded\def\ruledindent
{\relax
@@ -371,7 +377,7 @@
\ifdim\parindent>\zeropoint
\showparagraphcue\parindent\relax\relax\relax\s!height
\else
- \showparagraphcue{40\testrulewidth}\llap\relax\relax\s!height
+ \showparagraphcue{40\fakerulewidth}\llap\relax\relax\s!height
\fi
\normalhskip\parindent}
@@ -381,10 +387,9 @@
\let\par \normalpar}
\unexpanded\def\showimplicits
- {\testrulewidth \defaulttestrulewidth
- \let\noindent \rulednoindent
- \let\indent \ruledindent
- \let\par \ruledpar}
+ {\let\noindent \rulednoindent
+ \let\indent \ruledindent
+ \let\par \ruledpar}
%D The next few||line examples show the four cues. Keep in
%D mind that we only see them when we explicitly open or close
@@ -434,8 +439,8 @@
\normalhbox
{\strut
\vrule
- \s!height \testrulewidth
- \s!depth \testrulewidth
+ \s!height \fakerulewidth
+ \s!depth \fakerulewidth
\s!width 120\points}
\normalvfill}%
\smashbox\scratchbox
@@ -452,8 +457,7 @@
\egroup}
\unexpanded\def\showbaselines
- {\testrulewidth\defaulttestrulewidth
- \EveryPar{\ruledbaseline}}
+ {\EveryPar{\ruledbaseline}}
%D \macros
%D {showpagebuilder}
@@ -504,7 +508,7 @@
{\vss\hpack to 3em{\hss#2\hss}\vss}%
\fi}}
-\def\colorrangeA#1%
+\unexpanded\def\colorrangeA#1%
{\vpack
{\startcolor[\s!white]%
\scratchdimen\dimexpr(-\colormarklength*4+\tractempheight+\tractempdepth)/21\relax
@@ -526,7 +530,7 @@
{\vss\hpack to \scratchdimen{\hss#1\hss}\vss}%
\fi}
-\def\colorrangeB
+\unexpanded\def\colorrangeB
{\hpack
{\startcolor[\s!white]%
\scratchdimen\dimexpr(-\colormarklength*\plustwo+\tractempwidth)/11\relax
@@ -553,7 +557,7 @@
{\vss\hpack to \scratchdimen{\hss#1\hss}\vss}%
\fi}
-\def\colorrangeC
+\unexpanded\def\colorrangeC
{\hpack
{\startcolor[\s!white]%
\scratchdimen\dimexpr(-\colormarklength*2+\tractempwidth)/14\relax
@@ -641,10 +645,10 @@
\let\supernormalmarks \normalmarks % mark may already been superseded
\unexpanded\def\showwhatsits
- {\protected\def\normalmark {\visualwhatsit100+m\supernormalmark }%
- \protected\def\normalmarks{\visualwhatsit100+m\supernormalmarks}%
- \protected\def\special {\visualwhatsit0100s\normalspecial }%
- \protected\def\write {\visualwhatsit001-w\normalwrite }%
+ {\unexpanded\def\normalmark {\visualwhatsit100+m\supernormalmark }%
+ \unexpanded\def\normalmarks{\visualwhatsit100+m\supernormalmarks}%
+ \unexpanded\def\special {\visualwhatsit0100s\normalspecial }%
+ \unexpanded\def\write {\visualwhatsit001-w\normalwrite }%
\let\immediate\immediatewhatsit
\appendtoks\dontshowwhatsits\to\everystoptext}
diff --git a/tex/context/modules/mkiv/s-characters-properties.lua b/tex/context/modules/mkiv/s-characters-properties.lua
new file mode 100644
index 000000000..dc9fb8f93
--- /dev/null
+++ b/tex/context/modules/mkiv/s-characters-properties.lua
@@ -0,0 +1,83 @@
+if not modules then modules = { } end modules ['s-characters-properties'] = {
+ version = 1.001,
+ comment = "companion to s-characters-properties.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+moduledata.characters = moduledata.characters or { }
+moduledata.characters.properties = moduledata.characters.properties or { }
+
+local catcodenames = { [0] =
+ "escape", "begingroup", "endgroup", "mathshift",
+ "alignment", "endofline", "parameter", "superscript",
+ "subscript", "ignore", "space", "letter",
+ "other", "active", "comment", "invalid",
+}
+
+table.swapped(catcodes,catcodes)
+
+local catcodes = context.catcodes
+local getcatcode = tex.getcatcode
+local c_context = catcodes.context
+local c_tex = catcodes.tex
+local c_protect = catcodes.protect
+local c_text = catcodes.text
+local c_verbatim = catcodes.verbatim
+
+local context = context
+local ctx_NC = context.NC
+local ctx_NR = context.NR
+local ctx_MR = context.MR
+local ctx_ML = context.ML
+local ctx_bold = context.bold
+local ctx_verbatim = context.verbatim
+
+function moduledata.characters.properties.showcatcodes(specification)
+
+ local function range(f,l,quit)
+ if quit then
+ ctx_MR()
+ end
+ for i=f,l do
+ ctx_NC()
+ if quit then
+ ctx_verbatim("%c .. %c",f,l)
+ else
+ ctx_verbatim("%c",i)
+ end
+ ctx_NC() context(catcodenames[getcatcode(c_tex,i)])
+ ctx_NC() context(catcodenames[getcatcode(c_context,i)])
+ ctx_NC() context(catcodenames[getcatcode(c_protect,i)])
+ ctx_NC() context(catcodenames[getcatcode(c_text,i)])
+ ctx_NC() context(catcodenames[getcatcode(c_verbatim,i)])
+ ctx_NC() ctx_NR()
+ if quit then
+ ctx_MR()
+ break
+ end
+ end
+ end
+
+ context.starttabulate { "|c|c|c|c|c|c|" }
+ ctx_ML()
+ ctx_NC() ctx_bold("ascii")
+ ctx_NC() ctx_bold("context")
+ ctx_NC() ctx_bold("tex")
+ ctx_NC() ctx_bold("protect")
+ ctx_NC() ctx_bold("text")
+ ctx_NC() ctx_bold("verbatim")
+ ctx_NC() ctx_NR()
+ ctx_ML()
+ range(32,47)
+ range(48,57,true)
+ range(58,64)
+ range(65,90,true)
+ range(91,96)
+ range(97,122,true)
+ range(123,126)
+ ctx_ML()
+ context.stoptabulate()
+
+end
diff --git a/tex/context/modules/mkiv/s-characters-properties.mkiv b/tex/context/modules/mkiv/s-characters-properties.mkiv
new file mode 100644
index 000000000..3c486c39c
--- /dev/null
+++ b/tex/context/modules/mkiv/s-characters-properties.mkiv
@@ -0,0 +1,30 @@
+%D \module
+%D [ file=s-characters-properties,
+%D version=2016.07.24, % moved here
+%D title=\CONTEXT\ Style File,
+%D subtitle=Character properties,
+%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[characters-properties]
+
+\registerctxluafile{s-characters-properties}{}
+
+\installmodulecommandluasingle \showcharactercatcodes {moduledata.characters.properties.showcatcodes}
+
+\stopmodule
+
+\continueifinputfile{s-characters-properties.mkiv}
+
+\usemodule[art-01]
+
+\starttext
+
+ \showcharactercatcodes
+
+\stoptext
diff --git a/tex/context/modules/mkiv/s-domotica-settings.lua b/tex/context/modules/mkiv/s-domotica-settings.lua
new file mode 100644
index 000000000..a564ddf0e
--- /dev/null
+++ b/tex/context/modules/mkiv/s-domotica-settings.lua
@@ -0,0 +1,165 @@
+if not modules then modules = { } end modules ['s-domotica-settings'] = {
+ version = 1.001,
+ comment = "companion to s-domotica-settings.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+moduledata.domotica = moduledata.domotica or { }
+moduledata.domotica.settings = moduledata.domotica.settings or { }
+
+-- bah, no proper wrapper around value|help
+
+moduledata.zwave = moduledata.zwave or { }
+moduledata.hue = moduledata.hue or { }
+
+local NC = context.NC
+local BC = context.BC
+local NR = context.NR
+
+function moduledata.zwave.show_settings(pattern)
+
+ local function show(setting)
+
+ context.starttabulate { "|r|r|r|r|l|p|" }
+ BC() context("index")
+ -- BC() context("genre")
+ -- BC() context("instance")
+ BC() context("value")
+ BC() context("min")
+ BC() context("max")
+ BC() context("type")
+ BC() context("label")
+ BC() NR()
+ for value in xml.collected(setting,"/Value") do
+ local at = value.at
+ NC() context(at.index)
+ -- NC() context(at.genre)
+ -- NC() context(at.instance)
+ NC() context(at.value)
+ NC() context(at.min)
+ NC() context(at.max)
+ NC() context(at.type)
+ NC() context.escaped(at.label)
+ NC() NR()
+ end
+ context.stoptabulate()
+
+ end
+
+ if string.find(pattern,"%*") then
+
+ local list = dir.glob(pattern)
+ local last = nil
+
+ for i=1,#list do
+
+ local filename = list[i]
+ local root = xml.load(filename)
+ local settings = xml.all(root,"/Product/CommandClass[@id='112']")
+
+ if settings then
+
+ local brand = file.nameonly(file.pathpart(filename))
+ local device = file.nameonly(filename)
+
+ if last ~= brand then
+ context.startchapter { title = brand }
+ end
+
+ context.startsection { title = device }
+ for i=1,#settings do
+ show(settings[i])
+ end
+ context.stopsection()
+
+ if last ~= brand then
+ last = brand
+ context.stopchapter()
+ end
+
+ end
+
+ end
+
+ else
+
+ local root = xml.load(pattern)
+ local settings = xml.all(root,"/Product/CommandClass[@id='112']")
+
+ if settings then
+ for i=1,#settings do
+ show(settings[i])
+ end
+ end
+
+ end
+
+end
+
+function moduledata.hue.show_state(filename)
+
+ require("control-common")
+ require("control-hue")
+
+ local specification = domotica.hue.check(filename)
+ local instances = specification.instances
+
+ local ctx_NC, ctx_BC, ctx_NR = context.NC, context.BC, context.NR
+
+ for i=1,#instances do
+ local known = instances[i].knowndevices
+
+ if #instances > 1 then
+ context.subject("instance %i",i)
+ end
+
+ context.starttabulate { "|l|c|c|c|c|c|l|" }
+ ctx_BC() context("light name")
+ ctx_BC() context("id")
+ ctx_BC() context("state")
+ ctx_BC() context("level")
+ ctx_BC() context("color")
+ ctx_BC() context("seen")
+ ctx_BC() context("internal")
+ ctx_BC() ctx_NR()
+ for id, entry in table.sortedhash(known.lights) do
+ if entry.used then
+ local state = entry.state
+ local name = entry.name
+ local internal = entry.internalname
+ ctx_NC() context(entry.name)
+ ctx_NC() context(entry.identifier)
+ ctx_NC() context(state.on and "on " or "off")
+ ctx_NC() context(state.brightness or 0)
+ ctx_NC() context(state.temperature or 0)
+ ctx_NC() context((state.reachable or entry.reachable) and "yes" or "no ")
+ ctx_NC() if name == internal then context(name) else context.emphasized(internal) end
+ ctx_NC() ctx_NR()
+ end
+ end
+ context.stoptabulate()
+ context.starttabulate { "|l|c|c|c|l|" }
+ ctx_BC() context("sensor name")
+ ctx_BC() context("id")
+ ctx_BC() context("seen")
+ ctx_BC() context("battery")
+ ctx_BC() context("internal")
+ ctx_BC() ctx_NR()
+ for id, entry in table.sortedhash(known.sensors) do
+ if entry.used then
+ local state = entry.state
+ local name = entry.name
+ local internal = entry.internalname
+ ctx_NC() context(name)
+ ctx_NC() context(entry.identifier)
+ ctx_NC() context((state.reachable or entry.reachable) and "yes" or "no ")
+ ctx_NC() context(entry.battery or "")
+ ctx_NC() if name == internal then context(name) else context.emphasized(internal) end
+ ctx_NC() ctx_NR()
+ end
+ end
+ context.stoptabulate()
+ end
+end
diff --git a/tex/context/modules/mkiv/s-domotica-settings.mkiv b/tex/context/modules/mkiv/s-domotica-settings.mkiv
new file mode 100644
index 000000000..d32e53830
--- /dev/null
+++ b/tex/context/modules/mkiv/s-domotica-settings.mkiv
@@ -0,0 +1,26 @@
+%D \module
+%D [ file=s-domotica-setting,
+%D version=2016.10.20,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Domotica Helpers,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D This module is part of some experiments that I do with gadgets that
+%D communicate with zwave, zigbee and other (wireless) protocols used in
+%D smart home applications.
+
+% see mtx-context-domotica.tex for usage example(s)
+
+\startmodule[domotica-settings]
+
+\registerctxluafile{s-domotica-settings}{}
+
+% \installmodulecommandluasingle \showopenzwavesettings {.....}
+
+\stopmodule
diff --git a/tex/context/modules/mkiv/s-fonts-coverage.mkiv b/tex/context/modules/mkiv/s-fonts-coverage.mkiv
index c09d943bc..305bb9b7b 100644
--- a/tex/context/modules/mkiv/s-fonts-coverage.mkiv
+++ b/tex/context/modules/mkiv/s-fonts-coverage.mkiv
@@ -38,6 +38,9 @@
[list={texgyrepagella-regular.otf,texgyretermes-regular.otf,texgyrebonum-regular.otf},
pattern=ogonek]
+% \showfontcomparison
+% [list={texgyrepagella-regular.otf,texgyretermes-regular.otf,nimbusroman-regular.afm}]
+
\page
% $e=mc²$ ${}²$ $²$ $x²ᶞ$ $x⁽²⁺²⁼²⁺²⁾$ $x²⁺²⁼²⁺²$ $x₅²$ $x²₅²$
diff --git a/tex/context/modules/mkiv/s-fonts-emoji.mkiv b/tex/context/modules/mkiv/s-fonts-emoji.mkiv
new file mode 100644
index 000000000..59fdda124
--- /dev/null
+++ b/tex/context/modules/mkiv/s-fonts-emoji.mkiv
@@ -0,0 +1,331 @@
+%D \module
+%D [ file=s-fonts-emoji,
+%D version=2017.04.26,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Emoji Helpers,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\startluacode
+moduledata.emoji = moduledata.emoji or { }
+
+local find = string.find
+local sortedhash = table.sortedhash
+local utfvalues = string.utfvalues
+
+local context = context
+
+local traverse_id = node.traverse_id
+local glyph_code = nodes.nodecodes.glyph
+
+local descriptions = fonts.hashes.descriptions
+local checkedemoji = fonts.symbols.emoji.checked
+local compactemoji = characters.emoji.compact
+local resolvedemoji = characters.emoji.resolve
+local knownemoji = characters.emoji.known
+
+local function emojisnippets(name)
+ local d = descriptions[true]
+ if d then
+ local e = resolvedemoji(name)
+ local s = { }
+ for b in utfvalues(e) do
+ if not (b == 0x200D or (b >= 0x1F3FB and b <= 0x1F3FF)) then
+ local t = { }
+ s[#s+1] = t
+ local c = d[b]
+ if c then
+ c = c.colors
+ if c then
+ for i=1,#c do
+ t[#t+1] = c[i].slot
+ end
+ else
+ t[#t+1] = b
+ end
+ end
+ end
+ end
+ return #s > 0 and s or nil
+ end
+end
+
+local function emojiglyphs(name)
+ local d = descriptions[true]
+ if d then
+ local e = checkedemoji(name)
+ local s = { }
+ for n in traverse_id(glyph_code,e) do
+ local b = n.char
+ if not (b == 0x200D or (b >= 0x1F3FB and b <= 0x1F3FF)) then
+ local t = { }
+ s[#s+1] = t
+ local c = d[b]
+ if c then
+ c = c.colors
+ if c then
+ for i=1,#c do
+ t[#t+1] = c[i].slot
+ end
+ else
+ t[#t+1] = b
+ end
+ end
+ end
+ end
+ nodes.flush_list(e)
+ return #s > 0 and s or nil
+ end
+end
+
+characters.emojisnippets = emojisnippets
+fonts.symbols.emojiglyphs = emojiglyphs
+
+function moduledata.emoji.showsnippets(name)
+ local s = emojisnippets(name)
+ if s then
+ local ni = #s
+ for i=1,ni do
+ local si = s[i]
+ local nj = #si
+ for j=1,nj do
+ context.WrapEmojiSnippet(i,ni,j,nj,si[j])
+ end
+ end
+ end
+end
+
+function moduledata.emoji.showglyphs(name)
+ local s = emojiglyphs(name)
+ if s then
+ local ni = #s
+ for i=1,ni do
+ local si = s[i]
+ local nj = #si
+ for j=1,nj do
+ context.WrapEmojiSnippet(i,ni,j,nj,si[j])
+ end
+ end
+ end
+end
+
+function moduledata.emoji.showknown(list)
+ local hash = knownemoji()
+ local size = 0
+ if list then
+ list = utilities.parsers.settings_to_array(list)
+ size = #list
+ if size == 0 then
+ list = false
+ else
+ for i=1,size do
+ list[i] = string.escapedpattern(list[i])
+ end
+ end
+ end
+ for k, v in sortedhash(hash) do
+ local okay = true
+ if find(compactemoji(k),"%-s%-t") then
+ okay = false
+ elseif list then
+ okay = false
+ for i=1,size do
+ if find(k,list[i]) then
+ okay = true
+ break
+ end
+ end
+ end
+ if okay then
+ context("\\WrapEmojiPlusText{%s}{%!tex!}",k,v)
+ end
+ end
+end
+
+local function convert(t,k)
+ local v = { }
+ for i=1,#k do
+ local p = k[i]
+ end
+ return v
+end
+
+function moduledata.emoji.showpalette(list)
+ local colorpalettes = fonts.hashes.resources[true].colorpalettes
+ if colorpalettes then
+ if list then
+ list = utilities.parsers.settings_to_hash(list)
+ if not next(list) then
+ list = false
+ end
+ end
+ context.starttabulate { "||lp|" }
+ for i=1,#colorpalettes do
+ if not list or list[tostring(i)] then
+ local palette = colorpalettes[i]
+ context.BC()
+ context.type(i)
+ context.NC()
+ for j=1,#palette do
+ local p = palette[j]
+ local r, g, b = p[1]/255, p[2]/255, p[3]/255
+ local s = attributes.colors.rgbtogray(r,g,b)
+ context.WrapEmojiColorEntry(j,s,r,g,b)
+ end
+ context.NC()
+ context.NR()
+ end
+ end
+ context.stoptabulate()
+ end
+end
+
+\stopluacode
+
+\unexpanded\def\WrapEmojiPlusText#1#2%
+ {\dontleavehmode\hbox\bgroup
+ \tttf % determines em
+ \hpack to 8\emwidth{\setfontid\scratchcounter#2\hss}%
+ \hpack to 8\emwidth{\setfontid\scratchcounter\checkedemoji{#1}\hss}%
+ #1%
+ \egroup\par}
+
+\unexpanded\def\ShowEmoji
+ {\dosingleempty\doShowEmoji}
+
+\unexpanded\def\doShowEmoji[#1]%
+ {\begingroup
+ \scratchcounter\fontid\font
+ \ctxlua{moduledata.emoji.showknown([[#1]])}%
+ \endgroup}
+
+\unexpanded\def\WrapEmojiSnippet#1#2#3#4#5%
+ {\ifnum#3=\plusone
+ \par
+ \dontleavehmode\ruledhbox\bgroup
+ \fi
+ \ruledhbox to 2\emwidth{\hss\char#5\hss}%
+ \ifnum#3=#4\relax
+ \egroup
+ \par
+ \fi}
+
+\unexpanded\def\ShowEmojiSnippets[#1]%
+ {\ctxlua{moduledata.emoji.showsnippets("#1")}}
+
+\unexpanded\def\ShowEmojiGlyphs[#1]%
+ {\ctxlua{moduledata.emoji.showglyphs("#1")}}
+
+\unexpanded\def\OverlayEmojiSnippet#1#2#3#4#5%
+ {\setbox\scratchbox\hbox{\color[trace:#3]{\char#5}}%
+ \ifnum#3=\plusone
+ \ifnum#1=\plusone
+ \dontleavehmode\ruledhbox\bgroup
+ \fi
+ \hbox\bgroup
+ \else
+ \hskip-\wd\scratchbox
+ \fi
+ \box\scratchbox
+ \ifnum#3=#4\relax
+ \egroup
+ \ifnum#1=#2\relax
+ \egroup
+ \fi
+ \fi}
+
+\unexpanded\def\ShowEmojiSnippetsOverlay[#1]%
+ {\begingroup
+ \let\WrapEmojiSnippet\OverlayEmojiSnippet
+ \ctxlua{moduledata.emoji.showsnippets("#1")}%
+ \endgroup}
+
+\unexpanded\def\WrapEmojiColorEntry#1#2#3#4#5%
+ {\dontleavehmode\hpack\bgroup
+ \definecolor
+ [dummy]
+ [r=#3,g=#4,b=#5]%
+ \backgroundline
+ [dummy]
+ {\setbox\scratchbox\hpack to 2\emwidth{\hss\ifdim#2pt<.5pt\white\fi\ttx#1\hss}%
+ \ht\scratchbox.8\strutht\dp\scratchbox.6\strutdp\box\scratchbox}%
+ \egroup
+ \quad}
+
+\unexpanded\def\ShowEmojiPalettes
+ {\dosingleempty\doShowEmojiPalettes}
+
+\unexpanded\def\doShowEmojiPalettes[#1]%
+ {\ctxlua{moduledata.emoji.showpalette([[#1]])}}
+
+% \definefontfeature[bandw:overlay][ccmp=yes,dist=yes]
+% \definefontfeature[color:overlay][ccmp=yes,dist=yes,colr=yes]
+% %definefontfeature[bandw:svg] [ccmp=yes,dist=yes]
+% \definefontfeature[color:svg] [ccmp=yes,dist=yes,svg=yes]
+% %definefontfeature[bandw:bitmap] [ccmp=yes,dist=yes,sbix=yes]
+% \definefontfeature[color:bitmap] [ccmp=yes,dist=yes,sbix=yes]
+
+\definefontfeature[seguiemj-cl][color:overlay]
+\definefontfeature[seguiemj-bw][bandw:overlay]
+
+% \definefont[MyEmoji] [seguiemj*seguiemj-bw]
+% \definefont[MyEmoji] [seguiemj*seguiemj-cl]
+% \definefont[MyEmoji] [emojionecolor-svginot*default,svg]
+% \definefont[MyEmoji] [emojionemozilla*default,overlay]
+% \definefont[MyEmoji] [applecoloremoji*default,bitmap]
+
+% \definecolor[trace:1][s=0,t=.5,a=1]
+% \definecolor[trace:2][s=0,t=.5,a=1]
+% \definecolor[trace:3][s=0,t=.5,a=1]
+% \definecolor[trace:4][s=0,t=.5,a=1]
+% \definecolor[trace:5][s=0,t=.5,a=1]
+% \definecolor[trace:6][s=0,t=.5,a=1]
+
+\continueifinputfile{s-fonts-emoji.mkiv}
+
+\starttext
+
+\start
+
+\definedfont[seguiemj*seguiemj-cl]
+
+\ShowEmojiSnippets
+ [family man light skin tone woman dark skin tone girl medium skin tone boy medium skin tone]
+
+\ShowEmojiSnippetsOverlay
+ [family man light skin tone woman dark skin tone girl medium skin tone boy medium skin tone]
+
+\ShowEmojiGlyphs
+ [family man light skin tone woman dark skin tone girl medium skin tone boy medium skin tone]
+
+\page
+
+\ShowEmoji[^man]
+
+\page
+
+\definecolor[emoji-base][r=.4]
+\definecolor[emoji-gray][s=.5,t=.5,a=1]
+
+\definefontcolorpalette
+ [emoji-gray]
+ [emoji-base,emoji-gray]
+
+\definefontfeature[seguiemj-cl][ccmp=yes,dist=yes,colr=emoji-gray]
+
+\definedfont[seguiemj*seguiemj-cl]
+
+\ShowEmoji
+
+\page
+
+\ShowEmojiPalettes[1]
+
+\stop
+
+\stoptext
diff --git a/tex/context/modules/mkiv/s-fonts-features.lua b/tex/context/modules/mkiv/s-fonts-features.lua
index 0a7cf8b13..6f4032948 100644
--- a/tex/context/modules/mkiv/s-fonts-features.lua
+++ b/tex/context/modules/mkiv/s-fonts-features.lua
@@ -13,6 +13,10 @@ moduledata.fonts.features = moduledata.fonts.features or { }
local sortedhash = table.sortedhash
+local v_yes = interfaces.variables.yes
+local v_no = interfaces.variables.no
+local c_name = interfaces.constants.name
+
local NC, NR, bold = context.NC, context.NR, context.bold
function moduledata.fonts.features.showused(specification)
@@ -49,12 +53,12 @@ function moduledata.fonts.features.showused(specification)
elseif rawget(descriptions,feature) then
NC() context(feature)
NC() context("+") -- extra
- NC() context(descriptions[feature])
+ NC() context.escaped(descriptions[feature])
done = true
elseif rawget(features,feature) then
NC() context(feature)
NC() -- otf
- NC() context(features[feature])
+ NC() context.escaped(features[feature])
done = true
else
NC() context(feature)
@@ -83,6 +87,51 @@ local function collectkerns(tfmdata,feature)
local lookuphash = resources.lookuphash
local feature = feature or "kern"
if sequences then
+
+ if true then
+
+ for i=1,#sequences do
+ local sequence = sequences[i]
+ if sequence.features and sequence.features[feature] then
+ local steps = sequence.steps
+ for i=1,#steps do
+ local step = steps[i]
+ local format = step.format
+ for unicode, hash in table.sortedhash(step.coverage) do
+ local kerns = combinations[unicode]
+ if not kerns then
+ kerns = { }
+ combinations[unicode] = kerns
+ end
+ for otherunicode, kern in table.sortedhash(hash) do
+ if format == "pair" then
+ local f = kern[1]
+ local s = kern[2]
+ if f then
+ if s then
+ -- todo
+ else
+ if not kerns[otherunicode] and f[3] ~= 0 then
+ kerns[otherunicode] = f[3]
+ end
+ end
+ elseif s then
+ -- todo
+ end
+ elseif format == "kern" then
+ if not kerns[otherunicode] and kern ~= 0 then
+ kerns[otherunicode] = kern
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+
+ else -- old loader
+
for i=1,#sequences do
local sequence = sequences[i]
if sequence.features and sequence.features[feature] then
@@ -107,7 +156,9 @@ local function collectkerns(tfmdata,feature)
end
end
end
+
end
+
return combinations
end
@@ -142,6 +193,7 @@ function moduledata.fonts.features.showallkerns(specification)
local tfmdata = fonts.hashes.identifiers[id]
local allkerns = collectkerns(tfmdata)
local characters = tfmdata.characters
+ local hfactor = tfmdata.parameters.hfactor
if next(allkerns) then
for first, pairs in sortedhash(allkerns) do
context.par()
@@ -150,7 +202,7 @@ function moduledata.fonts.features.showallkerns(specification)
-- if not kerns and pairs[second] then
-- -- weird
-- end
- showkernpair(first,kern,second,0)
+ showkernpair(first,kern*hfactor,second)
end
context.par()
end
@@ -159,3 +211,22 @@ function moduledata.fonts.features.showallkerns(specification)
context.par()
end
end
+
+function moduledata.fonts.features.showfeatureset(specification)
+ specification = interfaces.checkedspecification(specification)
+ local name = specification[c_name]
+ if name then
+ local s = fonts.specifiers.contextsetups[name]
+ if s then
+ local t = table.copy(s)
+ t.number = nil
+ if t and next(t) then
+ context.starttabulate { "|T|T|" }
+ for k, v in sortedhash(t) do
+ NC() context(k) NC() context(v == true and v_yes or v == false and v_no or tostring(v)) NC() NR()
+ end
+ context.stoptabulate()
+ end
+ end
+ end
+end
diff --git a/tex/context/modules/mkiv/s-fonts-features.mkiv b/tex/context/modules/mkiv/s-fonts-features.mkiv
index b81b53a71..2dca059ff 100644
--- a/tex/context/modules/mkiv/s-fonts-features.mkiv
+++ b/tex/context/modules/mkiv/s-fonts-features.mkiv
@@ -18,12 +18,13 @@
\installmodulecommandluasingle \showusedfeatures {moduledata.fonts.features.showused}
\installmodulecommandluasingle \showallkerns {moduledata.fonts.features.showallkerns}
\installmodulecommandluasingle \showbasekerns {moduledata.fonts.features.showbasekerns}
+\installmodulecommandluasingle \showfeatureset {moduledata.fonts.features.showfeatureset}
-\def\kernpairheight{\strutheight}
-\def\kernpairdepth {\strutdepth}
+\def\kernpairheight{.8\strutht}
+\def\kernpairdepth {.8\strutdp}
\def\kernpairwidth {\onepoint}
-\unexpanded\def\showkernpair#1#2#3% first second kern
+\unexpanded\def\showkernpair#1#2#3% first kern second
{\dontleavehmode
\hbox \bgroup
\scratchdimen#2\scaledpoint
diff --git a/tex/context/modules/mkiv/s-fonts-missing.lua b/tex/context/modules/mkiv/s-fonts-missing.lua
index 9a75676a9..7db5c2fb8 100644
--- a/tex/context/modules/mkiv/s-fonts-missing.lua
+++ b/tex/context/modules/mkiv/s-fonts-missing.lua
@@ -10,8 +10,7 @@ moduledata.fonts = moduledata.fonts or { }
moduledata.fonts.missing = moduledata.fonts.missing or { }
local function legend(id)
- local c = fonts.hashes.identifiers[id]
- local privates = c.properties.privates
+ local privates = fonts.helpers.getprivates(id)
if privates then
local categories = table.swapped(fonts.loggers.category_to_placeholder)
context.starttabulate { "|c|l|" }
diff --git a/tex/context/modules/mkiv/s-fonts-shapes.lua b/tex/context/modules/mkiv/s-fonts-shapes.lua
index 8f872e4bc..ebdf04c22 100644
--- a/tex/context/modules/mkiv/s-fonts-shapes.lua
+++ b/tex/context/modules/mkiv/s-fonts-shapes.lua
@@ -113,11 +113,8 @@ local function showglyphshape(specification)
local tfmdata = fontdata[id]
local charnum = tonumber(specification.character)
if not charnum then
- charnum = fonts.helpers.nametoslot(n)
+ charnum = fonts.helpers.nametoslot(specification.character)
end
- context.start()
- context.dontleavehmode()
- context.obeyMPboxdepth()
local characters = tfmdata.characters
local descriptions = tfmdata.descriptions
local parameters = tfmdata.parameters
@@ -130,6 +127,9 @@ local function showglyphshape(specification)
local width, italic = (d.width or 0)*factor, (d.italic or 0)*factor
local top_accent, bot_accent = (d.top_accent or 0)*factor, (d.bot_accent or 0)*factor
local anchors, math = d.anchors, d.math
+ context.start()
+ context.dontleavehmode()
+ context.obeyMPboxdepth()
context.startMPcode()
context("numeric lw ; lw := .125bp ;")
context("pickup pencircle scaled lw ;")
@@ -143,7 +143,7 @@ local function showglyphshape(specification)
if #v > 0 then
local l = { }
for kk, vv in ipairs(v) do
- local h, k = vv.height, vv.kern
+ local h, k = vv.height or 0, vv.kern or 0
if h and k then
l[#l+1] = formatters["((%s,%s) shifted (%s,%s))"](xsign*k*factor,ysign*h*factor,dx,dy)
end
@@ -160,7 +160,7 @@ local function showglyphshape(specification)
if #v > 0 then
local l = { }
for kk, vv in ipairs(v) do
- local h, k = vv.height, vv.kern
+ local h, k = vv.height or 0, vv.kern or 0
if h and k then
l[#l+1] = formatters["((%s,%s) shifted (%s,%s))"](xsign*k*factor,ysign*h*factor,dx,dy)
end
@@ -171,7 +171,7 @@ local function showglyphshape(specification)
context('label.%s("\\type{%s}",%s shifted (0,2bp)) ;',loc,txt,l[1])
end
for kk, vv in ipairs(v) do
- local h, k = vv.height, vv.kern
+ local h, k = vv.height or 0, vv.kern or 0
if h and k then
context('label.top("(%s,%s)",%s shifted (0,-2bp));',k,h,l[kk])
end
@@ -183,13 +183,13 @@ local function showglyphshape(specification)
if kerns then
for _, slant in ipairs { slant_1, slant_2 } do
for k,v in pairs(kerns) do
- if k == "top_right" then
+ if k == "topright" then
slant(v,width+italic,0,k,1,1,"top","ulft")
- elseif k == "bottom_right" then
+ elseif k == "bottomright" then
slant(v,width,0,k,1,1,"bot","lrt")
- elseif k == "top_left" then
+ elseif k == "topleft" then
slant(v,0,0,k,-1,1,"top","ulft")
- elseif k == "bottom_left" then
+ elseif k == "bottomleft" then
slant(v,0,0,k,-1,1,"bot","lrt")
end
end
@@ -257,6 +257,7 @@ local function showglyphshape(specification)
context("setbounds currentpicture to boundingbox currentpicture enlarged 1bp ;")
context("currentpicture := currentpicture scaled 8 ;")
context.stopMPcode()
+ context.stop()
-- elseif c then
-- lastdata, lastunicode = nil, nil
-- local factor = (7200/7227)/65536
@@ -290,10 +291,9 @@ local function showglyphshape(specification)
-- context("currentpicture := currentpicture scaled 8 ;")
-- context.stopMPcode()
else
- lastdata, lastunicode = nil, nil
- context("no such shape: 0x%05X",charnum)
+ -- lastdata, lastunicode = nil, nil
+ -- context("no such shape: 0x%05X",charnum)
end
- context.stop()
end
moduledata.fonts.shapes.showglyphshape = showglyphshape
diff --git a/tex/context/modules/mkiv/s-fonts-shapes.mkiv b/tex/context/modules/mkiv/s-fonts-shapes.mkiv
index c1e9d61d2..4a0377ada 100644
--- a/tex/context/modules/mkiv/s-fonts-shapes.mkiv
+++ b/tex/context/modules/mkiv/s-fonts-shapes.mkiv
@@ -11,12 +11,14 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
+%D I will redo this module (using outlines).
+
\startmodule[fonts-shapes]
\registerctxluafile{s-fonts-shapes}{}
\installmodulecommandluasingle \showfontshapes {moduledata.fonts.shapes.showlist}
-\installmodulecommandluasingle \showglyphshape {moduledata.fonts.shapes.showglypshape}
+\installmodulecommandluasingle \showglyphshape {moduledata.fonts.shapes.showglyphshape}
\installmodulecommandluatwo \showlastglyphshapefield {moduledata.fonts.shapes.showlastglyphshapefield}
\installmodulecommandluasingle \showallglyphshapes {moduledata.fonts.shapes.showallglypshapes}
@@ -107,9 +109,10 @@
% \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x1D45D}\stopTEXpage
% \page
- % \showallglyphshapes[name=name:cambria-math,size=100bp]
+\showallglyphshapes[name=name:cambria-math,size=100bp]
% \showallglyphshapes[name=name:dejavuserif,size=100bp]
-\showallglyphshapes[name=file:brill.otf,size=100bp]
+% \showallglyphshapes[name=file:brill.otf,size=100bp]
+% \showallglyphshapes[name=file:minionmath-regular.otf,size=100bp]
\stoptext
diff --git a/tex/context/modules/mkiv/s-fonts-variable.lua b/tex/context/modules/mkiv/s-fonts-variable.lua
new file mode 100644
index 000000000..43f5f0d3d
--- /dev/null
+++ b/tex/context/modules/mkiv/s-fonts-variable.lua
@@ -0,0 +1,313 @@
+if not modules then modules = { } end modules ['s-fonts-variable'] = {
+ version = 1.001,
+ comment = "companion to s-fonts-variable.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+moduledata.fonts = moduledata.fonts or { }
+moduledata.fonts.variable = moduledata.fonts.variable or { }
+
+local format = string.format
+local stripstring = string.nospaces
+local lower = string.lower
+local rep = string.rep
+
+local context = context
+local NC, NR, HL, ML = context.NC, context.NR, context.HL, context.ML
+local bold, monobold, mono, formattedmono = context.bold, context.monobold, context.mono, context.formatted.mono
+
+local show_glyphs = false trackers.register("modules.fonts.variables.glyphs", function(v) show_glyphs = v end)
+local show_kerns = false trackers.register("modules.fonts.variables.kerns", function(v) show_kerns = v end)
+
+function moduledata.fonts.variable.showvariations(specification)
+
+ specification = interfaces.checkedspecification(specification)
+
+ local fontfile = specification.font
+ local maximum = tonumber(specification.max) or 0xFFFF
+ local fontname = format("testfont-%s",i)
+ local fontsize = tex.dimen.bodyfontsize
+ if not fontfile then
+ return
+ end
+ local id, fontdata = fonts.definers.define {
+ name = fontfile,
+ -- size = fontsize,
+ cs = fontname,
+ }
+
+ if not fontdata then
+ context.type("no font with name %a found",fontname)
+ return
+ end
+
+ local resources = fontdata.resources
+
+ if not resources then
+ return
+ end
+
+ local variabledata = resources.variabledata or { }
+
+-- if not variabledata then
+-- return
+-- end
+
+if not fontdata.shared.rawdata.metadata.fullname then
+ fontdata.shared.rawdata.metadata.fullname = fontdata.shared.rawdata.metadata.fontname
+end
+
+ context.starttitle { title = fontdata.shared.rawdata.metadata.fullname }
+
+ local parameters = fontdata.parameters
+
+ context.startsubject { title = "parameters" }
+ if parameters then
+ context.starttabulate { "|||" }
+ NC() monobold("ascender") NC() context("%p",parameters.ascender) NC() NR()
+ NC() monobold("descender") NC() context("%p",parameters.descender) NC() NR()
+ NC() monobold("emwidth") NC() context("%p",parameters.em) NC() NR()
+ NC() monobold("exheight") NC() context("%p",parameters.ex) NC() NR()
+ NC() monobold("size") NC() context("%p",parameters.size) NC() NR()
+ NC() monobold("slant") NC() context("%s",parameters.slant) NC() NR()
+ NC() monobold("space") NC() context("%p",parameters.space) NC() NR()
+ NC() monobold("shrink") NC() context("%p",parameters.spaceshrink) NC() NR()
+ NC() monobold("stretch") NC() context("%p",parameters.spacestretch) NC() NR()
+ NC() monobold("units") NC() context("%s",parameters.units) NC() NR()
+ context.stoptabulate()
+ else
+ context("no parameters")
+ end
+ context.stopsubject()
+
+ local features = fontdata.shared.rawdata.resources.features
+
+ context.startsubject { title = "features" }
+ if features then
+ local function f(g)
+ if g then
+ local t = table.sortedkeys(g)
+ local n = 0
+ for i=1,#t do
+ if #t[i] <= 4 then
+ n = n + 1
+ t[n] = t[i]
+ end
+ end
+ return table.concat(t," ",1,n)
+ end
+ end
+ context.starttabulate { "||p|" }
+ NC() monobold("gpos") NC() mono(f(features.gpos)) NC() NR()
+ NC() monobold("gsub") NC() mono(f(features.gsub)) NC() NR()
+ context.stoptabulate()
+ else
+ context("no features")
+ end
+ context.stopsubject()
+
+ local designaxis = variabledata.designaxis
+
+ context.startsubject { title = "design axis" }
+ if designaxis then
+ context.starttabulate { "||||c|c|c|c|c|" }
+ NC() bold("tag")
+ NC() bold("name")
+ NC() bold("variant")
+ NC() bold("flags")
+ NC() bold("value")
+ NC() bold("min")
+ NC() bold("max")
+ NC() bold("link")
+ NC() NR()
+ HL()
+ for k=1,#designaxis do
+ local axis = designaxis[k]
+ local tag = axis.tag
+ local name = axis.name
+ local variants = axis.variants
+ local first = variants and variants[1]
+ if first then
+ local haslimits = first.maximum
+ local haslink = first.link
+ for i=1,#variants do
+ local variant = variants[i]
+ NC() monobold(tag)
+ NC() context(name)
+ NC() context(variant.name)
+ NC() formattedmono("0x%04x",variant.flags)
+ NC() context(variant.value)
+ NC() context(variant.minimum or "-")
+ NC() context(variant.maximum or "-")
+ NC() context(variant.link or "-")
+ NC() NR()
+ tag = nil
+ name = nil
+ end
+ end
+ end
+ context.stoptabulate()
+ else
+ context("no design axis defined (no \\type{stat} table)")
+ end
+ context.stopsubject()
+
+ local axis = variabledata.axis
+ local instances = variabledata.instances
+ local list = { }
+
+ context.startsubject { title = "axis" }
+ if axis then
+ context.starttabulate { "|||c|c|c|" }
+ NC() bold("tag")
+ NC() bold("name")
+ NC() bold("min")
+ NC() bold("def")
+ NC() bold("max")
+ NC() NR()
+ HL()
+ for k=1,#axis do
+ local a = axis[k]
+ NC() monobold(a.tag)
+ NC() context(a.name)
+ NC() context(a.minimum)
+ NC() context(a.default)
+ NC() context(a.maximum)
+ NC() NR()
+ list[#list+1] = a.tag
+ end
+ context.stoptabulate()
+ else
+ context("no axis defined, incomplete \\type{fvar} table")
+ end
+ context.stopsubject()
+
+ local collected = { }
+
+ context.startsubject { title = "instances" }
+ if not instances or #instances == 0 or not list or #list == 0 then
+ context("no instances defined, incomplete \\type{fvar}/\\type{stat} table")
+ else
+ if #axis > 8 then
+ context.start()
+ context.switchtobodyfont { "small" }
+ if #axis > 12 then
+ context.switchtobodyfont { "small" }
+ end
+ end
+ context.starttabulate { "||" .. rep("c|",#list) .. "|" }
+ NC()
+ for i=1,#list do
+ NC() monobold(list[i])
+ end
+ NC()
+ local fullname = lower(stripstring(fontdata.shared.rawdata.metadata.fullname))
+ formattedmono("%s*",fullname)
+ NC() NR()
+ ML()
+ for k=1,#instances do
+ local i = instances[k]
+ NC() monobold(i.subfamily)
+ local values = i.values
+ local hash = { }
+ for k=1,#values do
+ local v = values[k]
+ hash[v.axis] = v.value
+ end
+ for i=1,#list do
+ NC() context(hash[list[i]])
+ end
+ NC()
+ local instance = lower(stripstring(i.subfamily))
+ mono(instance)
+ collected[#collected+1] = fullname .. instance
+ NC() NR()
+ end
+ context.stoptabulate()
+ if #axis > 8 then
+ context.stop()
+ end
+ end
+ context.stopsubject()
+
+ local sample = specification.sample
+
+ for i=1,#collected do
+
+ local instance = collected[i]
+ context.startsubject { title = instance }
+ context.start()
+ context.definedfont { "name:" .. instance .. "*default" }
+ context.start()
+ if show_glyphs then
+ context.showglyphs()
+ end
+ if show_kerns then
+ context.showfontkerns()
+ end
+ if sample and sample ~= "" then
+ context(sample)
+ else
+ context.input("zapf.tex")
+ end
+ context.stop()
+ context.blank { "big,samepage"}
+ context.showfontspacing()
+ context.par()
+ context.stop()
+ context.stopsubject()
+
+ if i > maximum then
+ context.startsubject { title = "And so on" }
+ context("no more than %i instances are shown",maximum)
+ context.par()
+ context.stopsubject()
+ break
+ end
+ end
+
+ -- local function showregions(tag)
+ --
+ -- local regions = variabledata[tag]
+ --
+ -- context.startsubject { title = tag }
+ -- if regions then
+ -- context.starttabulate { "|r|c|r|r|r|" }
+ -- NC() bold("n")
+ -- NC() bold("axis")
+ -- NC() bold("start")
+ -- NC() bold("peak")
+ -- NC() bold("stop")
+ -- NC() NR()
+ -- HL()
+ -- local designaxis = designaxis or axis
+ -- for i=1,#regions do
+ -- local axis = regions[i]
+ -- for j=1,#axis do
+ -- local a = axis[j]
+ -- NC() monobold(i)
+ -- NC() monobold(designaxis[j].tag)
+ -- NC() context("%0.3f",a.start)
+ -- NC() context("%0.3f",a.peak)
+ -- NC() context("%0.3f",a.stop)
+ -- NC() NR()
+ -- i = nil
+ -- end
+ -- end
+ -- context.stoptabulate()
+ -- else
+ -- context("no %s defined",tag)
+ -- end
+ -- context.stopsubject()
+ --
+ -- end
+ --
+ -- showregions("gregions")
+ -- showregions("mregions")
+ -- showregions("hregions")
+
+ context.stoptitle()
+
+end
diff --git a/tex/context/modules/mkiv/s-fonts-variable.mkiv b/tex/context/modules/mkiv/s-fonts-variable.mkiv
new file mode 100644
index 000000000..64348b324
--- /dev/null
+++ b/tex/context/modules/mkiv/s-fonts-variable.mkiv
@@ -0,0 +1,111 @@
+%D \module
+%D [ file=s-fonts-variable,
+%D version=2017.02.18,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Show Variable Font Properties ,
+%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 : variable information (experimental)
+%
+% comment : variable fonts contain extra information styles, axis, regions
+% status : experimental, used for luatex testing
+%
+% end info
+
+\startmodule[fonts-variable]
+
+\registerctxluafile{s-fonts-variable}{}
+
+\installmodulecommandluasingle \showfontvariations {moduledata.fonts.variable.showvariations}
+
+\unexpanded\def\showfontspacing
+ {\begingroup
+ \scratchskip \interwordspace plus \interwordstretch minus \interwordshrink
+ \normalexpanded{\hpack\bgroup
+ \tttf
+ sp: \the\scratchskip \hskip\emwidth
+ es: \the\extraspace\hskip\emwidth
+ ex: \the\exheight \hskip\emwidth
+ em: \the\emwidth \hskip\emwidth
+ \egroup}%
+ \endgroup}
+
+\stopmodule
+
+\continueifinputfile{s-fonts-variable.mkiv}
+
+\usemodule[art-01]
+
+\setuphead[section][before={\testpage[5]\blank[2*big]}]
+
+\enabletrackers[modules.fonts.variables.glyphs]
+\enabletrackers[modules.fonts.variables.kerns]
+
+\starttext
+
+ \startbuffer[zycon]
+ \char008986\relax\quad
+ \char009728\relax\quad
+ \char010031\relax\quad
+ \char010143\relax\quad
+ \char011044\relax\quad
+ \char127773\relax\quad
+ \char127989\relax\quad
+ \char128008\relax\quad
+ \char128021\relax\quad
+ \char128034\relax\quad
+ \char128161\relax\quad
+ \char128274\relax\quad
+ \char128347\relax\quad
+ \char128400\relax\quad
+ \char128692\relax\quad
+ \char129417\relax\quad
+ \char129422\relax\quad
+ \char983040\relax\par
+ \stopbuffer
+
+% \showfontvariations
+% [font=file:VotoSerifGX.ttf,
+% max=6]
+
+ \showfontvariations
+ [font=file:adobevfprototype.otf]
+
+ \showfontvariations
+ [font=file:avenirnextvariable.ttf]
+
+ \showfontvariations
+ [font=file:DecoVar-VF.ttf]
+
+ \showfontvariations
+ [font=file:VotoSerifGX.ttf,
+ max=15]
+
+ \showfontvariations
+ [font=file:Selawik-Variable.ttf]
+
+ \showfontvariations
+ [font=file:LibreFranklinGX-Romans.ttf]
+
+ \showfontvariations
+ [font=file:Zycon.ttf,
+ sample={\getbuffer[zycon]}]
+
+ % \showfontvariations
+ % [font=file:kairossansvariable.ttf]
+
+ % \showfontvariations
+ % [font=file:sourcecode-regular.otf]
+
+ % \showfontvariations
+ % [font=file:AmstelvarAlpha-VF.ttf]
+
+\stoptext
diff --git a/tex/context/modules/mkiv/s-inf-01.mkvi b/tex/context/modules/mkiv/s-inf-01.mkvi
index 2c0c1681e..2fda9997a 100644
--- a/tex/context/modules/mkiv/s-inf-01.mkvi
+++ b/tex/context/modules/mkiv/s-inf-01.mkvi
@@ -39,7 +39,7 @@
"colo%-pan.tex", ".*test.*"
}
local types = {
- "tex", "mkii", "mkiv", "mkvi", "lua"
+ "tex", "mkii", "mkiv", "mkvi", "lua", -- "mpiv"
}
local patterns = {
"^([a-z][a-z][a-z][a-z])%-[a-z0-9%-]+%.[a-z]+",
@@ -150,7 +150,7 @@
for k, v in table.sortedpairs(what) do
local c = what == size and comp[k] or nope
context.NC()
- context("%s~%s~~%s~~%s",
+ context("\\bf %s~%s~~%s~~%s",
(used.mkii[k] and "ii") or "~~",
(used.mkiv[k] and "iv") or "~~",
(used.mkvi[k] and "vi") or "~~",
@@ -197,7 +197,7 @@
\starttexdefinition Top #what#fraction#total#bigones
\hbox to 5em{\hss#total}%
\enspace
- \hbox {#what\ifnum#total=#bigones\else~#bigones\rlap{~+}\fi\hss}%
+ \hbox {{\bf#what}\ifnum#total=#bigones\else~#bigones\rlap{~+}\fi\hss}%
\stoptexdefinition
\starttexdefinition Bar #color#size#nobigones#fraction
@@ -225,19 +225,26 @@
\stoptexdefinition
\starttexdefinition Up #color#width
- \scratchdimen#width\dimexpr 16em\relax
+% \scratchdimen#width\dimexpr 16em\relax
+ \scratchdimen#width\dimexpr 40em\relax
\ifdim\scratchdimen=\zeropoint
\kern1em
+ \else\ifdim\scratchdimen>13em
+ \blackrule[color=bar:#color,height=15em,width=1em]%
+ \hskip-1.1em
+ \blackrule[color=white,height=14em,width=1.2em]%
+ \hskip-1.1em
+ \blackrule[color=bar:#color,height=13em,width=1em]%
\else
\ifdim\scratchdimen<\onepoint \scratchdimen\onepoint \fi
\blackrule[color=bar:#color,height=\scratchdimen,width=1em]%
- \fi
+ \fi\fi
\stoptexdefinition
\starttexdefinition Show #title#how#what
\startTEXpage[offset=1em,width=fit]
\hbox{\tttf\strut\currentdate~-~#title}
- \par
+ \blank[line]
\ctxlua{document.context_state_\number#how("#what")}
\stopTEXpage
\stoptexdefinition
@@ -249,7 +256,7 @@
{The number of files used in ConTeXt (base modules and styles).}
{1}{number}
\Show
- {The size of (core) files used in ConTeXt (- indicates exclusion of large data files; + indicates inclusion of large data files; comment and spaces removed.)}
+ {The size of (core) files used in ConTeXt (- : large data files excluded; + : large data files included; comment and spaces removed)}
{1}{size}
\Show
{The relative number of files used in ConTeXt (tex, mkii, mkiv, mkvi, lua).}
diff --git a/tex/context/modules/mkiv/s-inf-03.mkiv b/tex/context/modules/mkiv/s-inf-03.mkiv
index a253bed77..d2acb7341 100644
--- a/tex/context/modules/mkiv/s-inf-03.mkiv
+++ b/tex/context/modules/mkiv/s-inf-03.mkiv
@@ -16,7 +16,7 @@
\definefont
[TitlePageFont]
- [MonoBold at 15pt]
+ [MonoBold at 14pt]
\setupbodyfont
[tt,8pt]
@@ -25,7 +25,7 @@
\definefont
[TitlePageFont]
- [MonoBold at 18pt]
+ [MonoBold at 17pt]
\setupbodyfont
[tt]
@@ -158,13 +158,11 @@ local upper = string.upper
local skipglobal = table.tohash {
"_G", "_M", "_ENV", "",
"context", "modules", "global", "arg", "utf", 1,
- "_ptbs_", "_pcol_", "_plib_", "_clib_", "_tlib_",
- "kpse", "commands",
+ "kpse", "commands", "ffi",
}
local skipkeys = table.tohash {
- "_pcol_", "_plib_", "_clib_", "_tlib_", "_bpnf_", "_ptbs_",
- "_cldf_", "_cldn_", "_cldo_",
+ -- "_cldf_", "_cldn_", "_cldo_",
"_clmb_", "_clme_", "_clmm_", "_clmn_", "_clma_", "_clmh_",
"_G", "_M", "_ENV", "",
-- "global", "shortcuts",
@@ -215,11 +213,10 @@ local function childtables(key,tab,handler,depth)
if marked(v) then
t = "data"
handler(s,t,depth)
+ elseif done[v] then
+ -- logs.report("inf-03","key %a in %a already done",k,v)
else
-if done[v] then
- -- logs.report("inf-03","key %a in %a already done",k,v)
-else
- done[v] = true
+ done[v] = true
handler(s,t,depth)
if variant == 3 then
childtables(false,v,handler,depth+1)
@@ -229,7 +226,6 @@ else
childtables(s,v,handler,depth+1)
end
end
-end
else
handler(s,t,depth)
end
@@ -252,7 +248,7 @@ end
local function show(title,subtitle,alias,builtin,t,lib,libcolor,glo,glocolor,mark,obsolete)
-- todo: table as argument
--- print(title,subtitle,alias,builtin,t,lib,libcolor,glo,glocolor,mark,obsolete)
+ -- print(title,subtitle,alias,builtin,t,lib,libcolor,glo,glocolor,mark,obsolete)
local keys = sortedkeys(t) -- no sorted_pairs
if #keys > 0 then
local fulltitle = title
@@ -269,7 +265,7 @@ local function show(title,subtitle,alias,builtin,t,lib,libcolor,glo,glocolor,mar
end
context.startcolumns { n = 2 }
context.starttabulate { "|||" }
- local t_obsolete = t.obsolete
+ local t_obsolete = rawget(t,"obsolete") -- tricky a t.obsolete fails
if type(t_obsolete) ~= "table" then
t_obsolete = nil
end
diff --git a/tex/context/modules/mkiv/s-languages-frequencies.lua b/tex/context/modules/mkiv/s-languages-frequencies.lua
index 16213a412..4ff5cfe03 100644
--- a/tex/context/modules/mkiv/s-languages-frequencies.lua
+++ b/tex/context/modules/mkiv/s-languages-frequencies.lua
@@ -31,3 +31,7 @@ function moduledata.languages.frequencies.showlist(specification)
end
context.stoptabulate()
end
+
+-- function MP.frqc(language,slot)
+-- mp.print(languages.frequencies.getdata(language).frequencies[slot])
+-- end
diff --git a/tex/context/modules/mkiv/s-languages-hyphenation.lua b/tex/context/modules/mkiv/s-languages-hyphenation.lua
index 971ca3d8f..6d3cf3d3e 100644
--- a/tex/context/modules/mkiv/s-languages-hyphenation.lua
+++ b/tex/context/modules/mkiv/s-languages-hyphenation.lua
@@ -39,6 +39,8 @@ local getdisc = nuts.getdisc
local getattr = nuts.getattr
local getfont = nuts.getfont
local getfield = nuts.getfield
+local getlang = nuts.getlang
+local setlang = nuts.setlang
local setlink = nuts.setlink
local setdisc = nuts.setdisc
local setfield = nuts.setfield
@@ -129,7 +131,7 @@ local function getlanguage(head,l,left,right)
local t = { }
for n in traverse_by_id(glyph_code,tonut(head)) do
t[n] = {
- getfield(n,"lang"),
+ getlang(n),
getfield(n,"left"),
getfield(n,"right"),
}
@@ -148,7 +150,7 @@ function moduledata.languages.hyphenation.showhyphens(head)
-- somehow assigning -1 fails
for n in traverse_by_id(glyph_code,tonut(head)) do
cached[n] = {
- getfield(n,"lang"),
+ getlang(n),
getfield(n,"left"),
getfield(n,"right")
}
@@ -161,7 +163,7 @@ function moduledata.languages.hyphenation.showhyphens(head)
local lmin = s.lefthyphenmin
local rmin = s.righthyphenmin
for n in next, cached do
- setfield(n,"lang",l)
+ setlang(n,l)
setfield(n,"left",lmin)
setfield(n,"right",rmin)
end
@@ -173,7 +175,7 @@ function moduledata.languages.hyphenation.showhyphens(head)
mark(head,marked[i],1/16,l/2,l/4,"hyphenation:"..(colorbytag and tags[i] or i))
end
for n, d in next, cached do
- setfield(n,"lang",d[1])
+ setlang(n,d[1])
setfield(n,"left",d[2])
setfield(n,"right",d[3])
end
diff --git a/tex/context/modules/mkiv/s-mag-01.mkiv b/tex/context/modules/mkiv/s-mag-01.mkiv
new file mode 100644
index 000000000..7191d760c
--- /dev/null
+++ b/tex/context/modules/mkiv/s-mag-01.mkiv
@@ -0,0 +1,505 @@
+%D \module
+%D [ file=s-mag-01,
+%D version=2016.09.12, % mkiv version of 2002.12.14,
+%D title=\CONTEXT\ Style File,
+%D subtitle=\CONTEXT\ Magazine Base Style,
+%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 style is used for producing explanationary documents. Don't misuse it for
+%D other purposes, since it may confuse users. Don't change the title either, since
+%D it provides a way to categorize documents. Numbers are disabled in instances
+%D produced outside PRAGMA ADE.
+%D
+%D The layout setup is such that one has several text areas available: headers and
+%D footers, margins and edges as well as the main text area. The surrounding (gray)
+%D makes the main page stand out and is suitable for viewing in spread mode.
+%D
+%D Since this style is under constant construction, messing around with settings
+%D will produce unwanted side effects. So, if some feature or settings is needed,
+%D let me know.
+
+% These are reserved for PRAGMA-ADE, don't use them yourself!
+
+% \setupdocument[main=Tricky]
+% \setupdocument[main=Update]
+% \setupdocument[main=HOWTO]
+
+% \setupdocument[main=This Way] % preludes to a/the manual
+% \setupdocument[main=A Better Way] % dirty versus clean
+% \setupdocument[main=No Way] % how users should not do it
+% \setupdocument[main=Your Way] % how users do it
+% \setupdocument[main=My Way] % how users do it
+% \setupdocument[main=Our Way] % how we do things at pragma
+% \setupdocument[main=Their Way] % how to do latex things in context
+
+\usemodule[narrowtt,scite]
+
+\definepapersize
+ [magazine]
+ [width=\dimexpr\paperwidth-.1\paperwidth\relax,
+ height=\dimexpr\paperheight-.1\paperheight\relax]
+
+\setuppapersize
+ [magazine]
+ [A4]
+
+\setupinteractionscreen
+ [option=doublesided]
+
+\setupexternalfigures
+ [location={local,default}]
+
+\definecolor[OuterColor][s=.3]
+\definecolor[InnerColor][s=.8]
+\definecolor[MainColor] [s=.2]
+\definecolor[TitleColor][s=.9]
+
+\definecolor[MyRed] [r=.6]
+\definecolor[MyGreen][g=.6]
+\definecolor[MyBlue] [b=.6]
+
+\startreusableMPgraphic{middlepaper}
+ fill OverlayBox
+ withshademethod "circular"
+ withshadecenter center (0.5,0.5)
+ withshadecolors ("InnerColor","OuterColor") ;
+\stopreusableMPgraphic
+
+\startreusableMPgraphic{rightpaper}
+ fill OverlayBox
+ withshademethod "circular"
+ withshadecenter center (0,0.5)
+ withshadecolors ("InnerColor","OuterColor") ;
+\stopreusableMPgraphic
+
+\startreusableMPgraphic{leftpaper}
+ fill OverlayBox
+ withshademethod "circular"
+ withshadecenter center (1,0.5)
+ withshadecolors ("InnerColor","OuterColor") ;
+\stopreusableMPgraphic
+
+\startreusableMPgraphic{page}
+ fill OverlayBox withcolor white ;
+\stopreusableMPgraphic
+
+\startusableMPgraphic{text}
+ StartPage ;
+ for i = Header,Text,Footer :
+ for j = LeftEdge, LeftMargin, Text, RightMargin, RightEdge :
+ draw Field[i][j] withpen pencircle scaled .5pt ;
+ endfor ;
+ endfor ;
+ StopPage ;
+ setbounds currentpicture to Field[Text][Text] ;
+\stopusableMPgraphic
+
+\startsetups[paper]
+
+ \doifmodeelse{*makeup} {
+ \reuseMPgraphic{middlepaper}
+ } {
+ \doifoddpageelse {
+ \reuseMPgraphic{rightpaper}
+ } {
+ \reuseMPgraphic{leftpaper}}
+ }
+
+\stopsetups
+
+\defineoverlay[paper] [\setups{paper}]
+\defineoverlay[page] [\reuseMPgraphic{page}]
+\defineoverlay[text] [\doifmode{frame}{\useMPgraphic{text}}]
+
+\setupbackgrounds [paper] [background=paper]
+\setupbackgrounds [page] [background={page,title}]
+\setupbackgrounds [text] [background=text]
+
+\definelayer
+ [title]
+ [state=repeat,
+ hoffset=-1cm,
+ voffset=1cm,
+ width=\paperwidth,
+ height=\paperheight]
+
+\setuplayout
+ [width=middle,
+ topspace=1.5cm,
+ height=middle,
+ header=1.5cm,
+ footer=1cm,
+ %grid=yes,
+ headerdistance=.25cm,
+ footerdistance=.5cm,
+ backspace=3cm,
+ margin=1.5cm,
+ margindistance=.25cm,
+ edge=.75cm,
+ edgedistance=.25cm,
+ bottomdistance=1.5cm,
+ bottom=.1\printpaperheight]
+
+\definelayout
+ [listing]
+ [backspace=15mm,
+ curspace=15mm]
+
+\definelayout
+ [makeup]
+ [topspace=1cm,
+ backspace=1cm,
+ header=0pt,
+ footer=0pt,
+ bottom=0pt]
+
+\setuppagenumbering
+ [alternative=doublesided]
+
+\setupbodyfont
+ [pagella,10pt]
+
+\setuptolerance
+ [verytolerant,stretch]
+
+\appendtoks
+ \setups[papershift]%
+\to \beforeeverypage
+
+\startsetups[papershift]
+
+ \setuppapersize[top=\vskip.5cm,bottom=\vss]
+
+ \doifmodeelse{*makeup} {
+ \setuppapersize[left=\hfill,right=\hfill]
+ } {
+ \doifoddpageelse {
+ \setuppapersize[right=\hfill]
+ } {
+ \setuppapersize[left=\hfill]
+ }
+ }
+
+\stopsetups
+
+\setupbottomtexts
+ [\setups{rightbanner}] []
+ [] [\setups{leftbanner}]
+
+\startsetups [leftbanner]
+
+ \definedfont[Regular*default at \the\bottomheight]
+
+ \TitleColor
+
+ \setbox\scratchbox\hbox {
+ \documentvariable{main}
+ }
+ \ht\scratchbox\exheight
+ \dp\scratchbox\zeropoint
+
+ \definedfont[Regular*default sa 2]
+ \doifsomething {\documentvariable{number}} {
+ \doifnot {\documentvariable{number}} {0} {
+ \#\documentvariable{number}
+ }
+ }
+ \quad
+ \currentdate
+ \quad
+ \scale
+ [height=.25\bottomheight]
+ {\box\scratchbox}
+ \quad
+ \hbox to 1.5em{\hss\pagenumber\hss}
+ \quad
+ \hskip-\backspace
+
+\stopsetups
+
+\startsetups [rightbanner]
+
+ \definedfont[Regular*default at \the\bottomheight]
+
+ \TitleColor
+
+ \setbox\scratchbox\hbox {
+ \documentvariable{main}
+ }
+ \ht\scratchbox\exheight
+ \dp\scratchbox\zeropoint
+
+ \hskip-\backspace
+ \definedfont[Regular*default sa 2]
+ \quad
+ \hbox to 1.5em{\hss\pagenumber\hss}
+ \quad
+ \scale
+ [height=.25\bottomheight]
+ {\box\scratchbox}
+ \quad
+ \currentdate
+ \quad
+ \doifmode {atpragma} {
+ \#\documentvariable{number}
+ }
+
+\stopsetups
+
+\startsetups[titlepage]
+
+ \disablemode[frame]
+
+ \doifmode {atpragma} {
+ \definecolor[pragmacolor] [r=1,g=.62,b=.06] % (Pantone 138 CV)
+ \definecolor[OuterColor][.3(\documentvariable{color})]
+ }
+
+ \setuplayout[makeup]
+
+ \startstandardmakeup[doublesided=no]
+
+ \dontcomplain
+
+ \definelayer
+ [makeup]
+ [width=\textwidth,
+ height=\textheight]
+
+ \setlayerframed [
+ makeup
+ ] [
+ corner={left,top},
+ location={right,bottom}
+ ] [
+ frame=off,
+ foregroundcolor=MainColor
+ ] {
+ \scale
+ [width=\makeupwidth]
+ {
+ \definedfont[Regular*default sa 10]
+ \documentvariable{main}
+ }
+ }
+
+ \setlayerframed [
+ makeup
+ ] [
+ corner={right,top},
+ location={left},
+ y=.4\textheight
+ ] [
+ frame=off,
+ foregroundcolor=MainColor,
+ width=\textwidth,
+ align=left
+ ] {
+ \definedfont[Regular*default sa 2.5]
+ \setupinterlinespace
+ \startmode[atpragma]
+ \strut \ConTeXt\ magazine \#\documentvariable{number}\endgraf
+ \stopmode
+ \strut \documentvariable{date} \endgraf
+ \blank
+ \strut \documentvariable{title}\endgraf
+ \doifsomething {\documentvariable{author}} {
+ \strut \documentvariable{author}\endgraf
+ }
+ \doifsomething {\documentvariable{affiliation}} {
+ \strut \documentvariable{affiliation}\endgraf
+ }
+ }
+
+ \setlayerframed [
+ makeup
+ ] [
+ corner={right,bottom},
+ location={left,top}
+ ] [
+ frame=off,
+ align=normal,
+ width=.8\textwidth,
+ foregroundcolor=MainColor
+ ] {
+ \getbuffer[abstract]
+ }
+
+ \flushlayer[makeup]
+
+ \stopstandardmakeup
+
+ \setuplayout[reset]
+
+\stopsetups
+
+\startsetups[cleanup]
+
+ \page
+
+ \setuptexttexts
+ [margin]
+ [] []
+
+\stopsetups
+
+\startsetups[listing]
+
+ \page \disablemode[frame]
+
+ \setuptexttexts [][] \setuptexttexts []
+ \setupheadertexts[][] \setupheadertexts[source code of this document]
+ \setupfootertexts[][] \setupfootertexts[]
+
+ \setuplayout[listing]
+
+ \start
+
+ \dontcomplain
+
+ \switchtobodyfont[8pt]
+
+ \scitefile[\jobfilefullname]
+
+ \page
+
+ \stop
+
+ \setuplayout
+
+\stopsetups
+
+\startsetups[lastpage]
+
+ \page \disablemode[frame] \page[even]
+
+ \doifoddpageelse {
+ } {
+ \setuplayout[makeup]
+ \startstandardmakeup[doublesided=no,page=]
+ \stopstandardmakeup
+ \setuplayout[reset]
+ }
+
+\stopsetups
+
+\startsetups[title]
+
+ \disablemode[frame]
+
+ \setlayerframed [
+ title
+ ] [
+ corner={left,top},
+ location={left,bottom},
+ rotation=90
+ ] [
+ frame=off,
+ foregroundcolor=TitleColor
+ ] {
+ \definedfont[RegularBold*default sa 2]
+ \strut\documentvariable{title}
+ }
+
+ \setlayerframed [
+ title
+ ] [
+ corner={right,top},
+ rotation=270
+ ] [
+ frame=off,
+ foregroundcolor=TitleColor
+ ] {
+ \definedfont[RegularBold*default sa 2]
+ \strut\documentvariable{title}
+ }
+
+ \doifsomething {\documentvariable{subtitle}} {
+ \setupheadertexts[\documentvariable{subtitle}]
+ }
+
+\stopsetups
+
+\startbuffer[abstract]
+ % no abstract
+\stopbuffer
+
+\setuphead
+ [chapter]
+ [page=yes,
+ after={\blank[2*big]},
+ color=MainColor,
+ style=\bfc]
+
+\setuphead
+ [section]
+ [before={\blank[2*big]},
+ after=\blank,
+ color=MainColor,
+ style=\bfb]
+
+\setuphead
+ [subsection]
+ [before=\blank,
+ after=,
+ color=MainColor,
+ style=\bf]
+
+\setupwhitespace
+ [big]
+
+\definetyping[xtyping] [style=\ttx]
+\definetyping[xxtyping][style=\ttxx]
+
+\definetyping[ntyping] \setuptyping[ntyping][style=\narrowtt]
+\definetype [ntype] \setuptype [ntype] [style=\narrowtt]
+
+\setupdocument
+ [main={\doifelsemode{atpragma}{This Way}{My Way}},
+ %color=pragmacolor,
+ title={No Title},
+ subtitle=,
+ author={No Author},
+ affiliation=,
+ date={No Date},
+ number=0,
+ before={\setups[titlepage,title]},
+ after={\setups[cleanup,listing,lastpage]}]
+
+\continueifinputfile {s-mag-01.mkiv}
+
+\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
+
+\startdocument
+ [title={Introduction},
+ subtitle={Welcome},
+ author={Hans Hagen},
+ affiliation=PRAGMA ADE,
+ date=Januari 2003,
+ number=0 \MKIV]
+
+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 or color) 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.
+
+\stopdocument
diff --git a/tex/context/modules/mkiv/s-math-characters.lua b/tex/context/modules/mkiv/s-math-characters.lua
index 8ff3a8660..757e843da 100644
--- a/tex/context/modules/mkiv/s-math-characters.lua
+++ b/tex/context/modules/mkiv/s-math-characters.lua
@@ -53,8 +53,14 @@ function moduledata.math.characters.showlist(specification)
local sorted = { }
if type(list) == "string" then
sorted = utilities.parsers.settings_to_array(list)
+ for i=1,#sorted do
+ sorted[i] = tonumber(sorted[i])
+ end
elseif type(list) == "table" then
sorted = list
+ for i=1,#sorted do
+ sorted[i] = tonumber(sorted[i])
+ end
elseif fillinthegaps then
sorted = table.keys(characters)
for k, v in next, gaps do
diff --git a/tex/context/modules/mkiv/s-math-characters.mkiv b/tex/context/modules/mkiv/s-math-characters.mkiv
index 3b273cb6c..e5e0d084f 100644
--- a/tex/context/modules/mkiv/s-math-characters.mkiv
+++ b/tex/context/modules/mkiv/s-math-characters.mkiv
@@ -56,8 +56,8 @@
\directsetup{s-math-characters:reset}
- \unexpanded\def\showmathcharactersstartentry {\blank\begingroup\raggedright}
- \unexpanded\def\showmathcharactersstopentry {\endgroup\blank}
+ \unexpanded\def\showmathcharactersstartentry {\blank\startpacked\raggedright}
+ \unexpanded\def\showmathcharactersstopentry {\stoppacked\blank}
\def\showmathcharactersentryhexdectit##1##2##3%
{##1:\space{\char##2}\space\ruledhbox{\char##2}\space##3\par
@@ -177,7 +177,7 @@
% \setupbodyfont[stix, 12pt]
% \setupbodyfont[xits, 12pt]
% \setupbodyfont[lucida, 12pt]
- % \setupbodyfont[lucidanova,12pt]
+ % \setupbodyfont[lucidaot, 12pt]
% \setupbodyfont[pagella, 12pt]
% \setupbodyfont[bonum, 12pt]
diff --git a/tex/context/modules/mkiv/s-math-extensibles.mkiv b/tex/context/modules/mkiv/s-math-extensibles.mkiv
index f9ff8547a..cc6fd1b00 100644
--- a/tex/context/modules/mkiv/s-math-extensibles.mkiv
+++ b/tex/context/modules/mkiv/s-math-extensibles.mkiv
@@ -48,9 +48,9 @@
\def\modulemathextensiblesalternativea#1#2#3%
{\NC U+#1
\NC \filledhboxm{\math{\char"#1}}
- \NC \hbox{\math{\mathextensible[demo]{"#1}{top}{bottom}}}
- \NC \hbox{\math{\mathextensible[demo]{"#1}{}{bottom}}}
- \NC \hbox{\math{\mathextensible[demo]{"#1}{top}{}}}
+ \NC \hbox{\math{\mathstacker[demo]{"#1}{top}{bottom}}}
+ \NC \hbox{\math{\mathstacker[demo]{"#1}{}{bottom}}}
+ \NC \hbox{\math{\mathstacker[demo]{"#1}{top}{}}}
\NC \nohyphens \veryraggedright #2
\NC\NR}
diff --git a/tex/context/modules/mkiv/s-math-repertoire.mkiv b/tex/context/modules/mkiv/s-math-repertoire.mkiv
index 230eb513e..91af45dfc 100644
--- a/tex/context/modules/mkiv/s-math-repertoire.mkiv
+++ b/tex/context/modules/mkiv/s-math-repertoire.mkiv
@@ -13,13 +13,13 @@
\usemodule[s][math-characters]
-% context --jit --global --bodyfont=lucidanova --result=math-repertoire-lucidanova s-math-repertoire.mkiv
-% context --jit --global --bodyfont=cambria --result=math-repertoire-cambria s-math-repertoire.mkiv
-% context --jit --global --bodyfont=xits --result=math-repertoire-xits s-math-repertoire.mkiv
-% context --jit --global --bodyfont=modern --result=math-repertoire-modern s-math-repertoire.mkiv
-% context --jit --global --bodyfont=pagella --result=math-repertoire-pagella s-math-repertoire.mkiv
-% context --jit --global --bodyfont=termes --result=math-repertoire-termes s-math-repertoire.mkiv
-% context --jit --global --bodyfont=bonum --result=math-repertoire-bonum s-math-repertoire.mkiv
+% context --jit --global --bodyfont=lucidaot --result=math-repertoire-lucidaot s-math-repertoire.mkiv
+% context --jit --global --bodyfont=cambria --result=math-repertoire-cambria s-math-repertoire.mkiv
+% context --jit --global --bodyfont=xits --result=math-repertoire-xits s-math-repertoire.mkiv
+% context --jit --global --bodyfont=modern --result=math-repertoire-modern s-math-repertoire.mkiv
+% context --jit --global --bodyfont=pagella --result=math-repertoire-pagella s-math-repertoire.mkiv
+% context --jit --global --bodyfont=termes --result=math-repertoire-termes s-math-repertoire.mkiv
+% context --jit --global --bodyfont=bonum --result=math-repertoire-bonum s-math-repertoire.mkiv
\startmodule[math-repertoire]
@@ -473,7 +473,8 @@
% \setupbodyfont[pagella, 12pt]
% \setupbodyfont[bonum, 12pt]
% \setupbodyfont[schola, 12pt]
- \setupbodyfont[dejavu, 12pt]
+ % \setupbodyfont[dejavu, 12pt]
+ \setupbodyfont[lucidaot, 12pt]
} {
diff --git a/tex/context/modules/mkiv/s-pre-17.mkiv b/tex/context/modules/mkiv/s-pre-17.mkiv
index 9c46b4ed7..558d5afd2 100644
--- a/tex/context/modules/mkiv/s-pre-17.mkiv
+++ b/tex/context/modules/mkiv/s-pre-17.mkiv
@@ -52,10 +52,6 @@
\defineoverlay [blowdown] [{\hboxreference[page:\realfolio]{\overlaybutton{page:\realfolio}}}]
\defineoverlay [forward] [\overlaybutton{forward}]
-\startMPinclusions
- input "mp-abck.mpiv" ;
-\stopMPinclusions
-
\startMPpositiongraphic{mppos:connection}
path pa, pb, pc ; pair ca, cb ;
initialize_box(\MPpos{\MPvar{self}}) ; pa := pxy ; ca := cxy ;
diff --git a/tex/context/modules/mkiv/s-present-balls.mkiv b/tex/context/modules/mkiv/s-present-balls.mkiv
new file mode 100644
index 000000000..6774b8340
--- /dev/null
+++ b/tex/context/modules/mkiv/s-present-balls.mkiv
@@ -0,0 +1,194 @@
+%D \module
+%D [ file=s-present-balls, % s-pre-15,
+%D version=1999.09.01,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment Balls,
+%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[present-balls]
+
+%D This is one of the styles I made for the presentation on the \NTS\ project at
+%D Euro\TeX\ 1998. You need balls to let \TEX\ typeset graphics, but this style
+%D demonstrates that it can be done.
+%D
+%D This presentation is meant for presentations that build up an idea stepwise.
+%D
+%D \starttyping
+%D \TitlePage{Do you know \TEX ?}
+%D
+%D \StartIdea
+%D \StartItem We use \TEX\ for typesetting \unknown \StopItem
+%D \StartItem mathematical text \unknown \StopItem
+%D \StartItem but also for text that has no math \unknown \StopItem
+%D \StartItem or presentations like this \unknown \StopItem
+%D \StartItem and whatever you can come up with! \StopItem
+%D \StopIdea
+%D \stoptyping
+%D
+%D The basic layout is rather simple and used as much of the screen as possible.
+
+\setuppapersize
+ [S6][S6]
+
+\setuplayout
+ [backspace=25pt,
+ topspace=25pt,
+ width=middle,
+ height=middle,
+ header=0pt,
+ footer=0pt]
+
+\setupinteraction
+ [state=start,
+ display=new,
+ color=LineColor,
+ contrastcolor=LineColor,
+ click=no]
+
+\setupinteractionscreen
+ [option=max]
+
+\startmode[asintended,atpragma] \setupbodyfont[lucidaot] \stopmode
+
+\setupbodyfont[14.4pt]
+
+%D We use a lot of color. You can remap them if you want different ones. The ideas
+%D circulate over the colors.
+
+\definecolor[TextColor][s=.8]
+\definecolor[PageColor][s=.6]
+\definecolor[LineColor][s=.4]
+
+\definecolor[red] [r=.4] \definecolor[cyan] [g=.4,b=.4]
+\definecolor[green][g=.4] \definecolor[magenta][r=.4,b=.4]
+\definecolor[blue] [b=.4] \definecolor[yellow] [r=.4,g=.4]
+
+\definecolor[linecolor 1][red] \definecolor[linecolor 5][cyan]
+\definecolor[linecolor 2][green] \definecolor[linecolor 6][magenta]
+\definecolor[linecolor 3][blue] \definecolor[linecolor 4][yellow]
+
+%D We use variables to make sure that the graphics are reused but unique.
+
+\setupMPvariables[pageframe][pagecolor=PageColor,linecolor=LineColor]
+\setupMPvariables[textframe][textcolor=TextColor,linecolor=LineColor]
+
+\setupbackgrounds
+ [page]
+ [background={pageframe,nextpage}]
+
+\defineoverlay [pageframe] [\uniqueMPgraphic{pageframe}]
+\defineoverlay [textframe] [\uniqueMPgraphic{textframe}]
+\defineoverlay [nextpage] [\overlaybutton{forward}]
+
+\startuniqueMPgraphic{pageframe}{pagecolor,linecolor}
+ path p ; p := fullsquare xyscaled (OverlayWidth,OverlayHeight) ;
+ pickup pencircle scaled 10pt ;
+ fill p withcolor \MPvar{pagecolor} ;
+ draw p withcolor \MPvar{linecolor} ;
+\stopuniqueMPgraphic
+
+\startuniqueMPgraphic{textframe}{textcolor,linecolor}
+ path p ; p := fullcircle xyscaled (OverlayWidth,OverlayHeight) ;
+ pickup pencircle scaled 10pt ;
+ fill p withcolor \MPvar{textcolor} ;
+ draw p withcolor \MPvar{linecolor} ;
+\stopuniqueMPgraphic
+
+%D The rest of the file implements the nasty part: typesetting text embedded in a
+%D graphic. The text is collected in a box so that we can reuse it.
+
+\newbox \CollectedIdeas
+\newcount\CurrentTopic
+
+\unexpanded\def\StartItem
+ {\setbox\CollectedIdeas=\hbox\bgroup
+ \ifdim\wd\CollectedIdeas>\zeropoint
+ \unhbox\CollectedIdeas
+ \hskip25pt
+ \fi
+ \setbox\scratchbox=\hbox\bgroup
+ \framed
+ [width=160pt,
+ height=160pt,
+ align=middle,
+ frame=off,
+ background=textframe,
+ offset=15pt,
+ top=\vfill,
+ bottom=\vfill]
+ \bgroup}
+
+\unexpanded\def\StopItem
+ {\egroup
+ \egroup
+ \setbox\scratchbox=\hbox{\lower.5\ht\scratchbox\box\scratchbox}%
+ \ht\scratchbox=.5\ht\scratchbox
+ \dp\scratchbox= \ht\scratchbox
+ \box\scratchbox
+ \egroup
+ \startstandardmakeup
+ \dontcomplain
+ \leftskip 0pt plus 50pt
+ \rightskip 0pt plus 50pt
+ \parfillskip 0pt
+ \baselineskip 100pt
+ \unhcopy\CollectedIdeas
+ \stopstandardmakeup}
+
+\unexpanded\def\StartIdea
+ {\ifnum\CurrentTopic=6
+ \global\CurrentTopic\plusone
+ \else
+ \global\advance\CurrentTopic\plusone
+ \fi
+ \definecolor[LineColor][linecolor \number\CurrentTopic]
+ \setbox\CollectedIdeas\null}
+
+\unexpanded\def\StopIdea
+ {}
+
+\unexpanded\def\StartTitlePage
+ {\startstandardmakeup
+ \setupalign[middle]
+ \unexpanded\def\\{\vfil\bfb\setupinterlinespace}
+ \bfd\setupinterlinespace
+ \vfil}
+
+\unexpanded\def\StopTitlePage
+ {\vfil\vfil
+ \stopstandardmakeup}
+
+\unexpanded\def\TitlePage#1%
+ {\StartTitlePage#1\StopTitlePage}
+
+\startsetups document:start
+ \StartTitlePage
+ \documentvariable{title}
+ \doifsomething {\documentvariable{subtitle}} {
+ \\
+ \documentvariable{subtitle}
+ }
+ \doifsomething {\documentvariable{location}} {
+ \\
+ \documentvariable{location}
+ }
+ \StopTitlePage
+\stopsetups
+
+\startsetups document:stop
+ %
+\stopsetups
+
+\stopmodule
+
+\continueifinputfile{s-present-balls.mkiv}
+
+\usemodule[present-common]
+
+\inputpresentationfile{examples/present-balls-001.tex}
diff --git a/tex/context/modules/mkiv/s-present-banner.mkiv b/tex/context/modules/mkiv/s-present-banner.mkiv
new file mode 100644
index 000000000..d93c033f2
--- /dev/null
+++ b/tex/context/modules/mkiv/s-present-banner.mkiv
@@ -0,0 +1,132 @@
+
+%D [ file=s-present-banner,
+%D version=2016.04.30, % around
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment Banner,
+%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 style was made for the Bacho\TeX\ 2016 conference. The banner below
+%D the text advances through the title.
+
+\startmodule[present-banner]
+
+\definecolor[maincolor] [b=.65]
+\definecolor[othercolor][s=.35]
+
+\startluacode
+ function mp.Banner(s,mode)
+ -- local r = tex.count.realpageno
+ local r = tex.count.realpageno - 1
+ local n = #s
+ local i = mode and 1 or 0
+ local t = string.gsub(s,".",function(s)
+ if s == " " or i > n then
+ return s
+ elseif i == r then
+ i = i + 1
+ if mode then
+ return "\\color[othercolor]{" .. s .. "}"
+ else
+ return "\\maincolor " .. s
+ end
+ else
+ i = i + 1
+ return s
+ end
+ end)
+ mp.quoted(t)
+ end
+\stopluacode
+
+\startuseMPgraphic{page}
+ StartPage ;
+ fill Page withcolor \MPcolor{maincolor} ;
+ draw anchored(image (
+ % draw textext.top (lua.mp.Banner("\documentvariable{title}",true))
+ draw textext.top (lua.mp.Banner("\documentvariable{title}",false))
+ xsized (.9PaperWidth)
+ withcolor white;
+ ), center bottomboundary Page);
+ % fill Field[Text][Text] enlarged 10pt withcolor (\MPcolor{maincolor})/1.5 ;
+ fill Field[Text][Text] enlarged 10pt withcolor .1white ;
+ StopPage ;
+\stopuseMPgraphic
+
+\setupbackgrounds
+ [page]
+ [background=page]
+
+\defineoverlay
+ [page]
+ [\useMPgraphic{page}]
+
+\setupbodyfont
+ [lucidaot,10pt]
+
+\setuppapersize
+ [S6]
+
+\setuplayout
+ [backspace=30pt,
+ width=middle,
+ height=middle,
+ topspace=30pt,
+ bottomspace=100pt,
+ header=0pt,
+ footer=0pt,
+ margin=0pt]
+
+\setupcolors
+ [textcolor=white]
+
+\setupwhitespace
+ [big]
+
+\setuphead
+ [chapter]
+ [style=\bfd,
+ after={\blank[big]}]
+
+\setuphead
+ [section]
+ [style=\bfa,
+ before=\blank,
+ after={\blank[medium]}]
+
+\definehighlight[nb][style=bold]
+
+\setupitemgroup[itemize][before=,after=]
+\setupitemgroup[itemize][packed]
+
+\setupdocument
+ [title=Title,
+ subtitle=Subtitle,
+ location=\currentdate]
+
+\startsetups document:start
+
+ \startstandardmakeup
+
+ \raggedcenter
+
+ \dontleavehmode\scale[width=1.00\textwidth]{\documentvariable{title}} \vfil
+ \dontleavehmode\scale[width=0.75\textwidth]{\documentvariable{subtitle}} \vfil
+ \dontleavehmode\scale[width=0.45\textwidth]{\documentvariable{location}} \vfil
+
+ \stopstandardmakeup
+
+\stopsetups
+
+\stopmodule
+
+\continueifinputfile{s-present-banner.mkiv}
+
+\usemodule[present-common]
+
+\inputpresentationfile{bachotex/2016/bachotex-2016-opentype.tex}
diff --git a/tex/context/modules/mkiv/s-present-bars.mkiv b/tex/context/modules/mkiv/s-present-bars.mkiv
new file mode 100644
index 000000000..13c09ff3b
--- /dev/null
+++ b/tex/context/modules/mkiv/s-present-bars.mkiv
@@ -0,0 +1,128 @@
+%D \module
+%D [ file=s-present-bars,
+%D version=2012.07.10,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment bars,
+%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 Okay, this one makes me a bit ashamed as it's probably too simple and unattractive but
+%D as it was used for a whole bunch of presentations it made it into a module anyway.
+
+\startmodule[present-bars]
+
+\setupbodyfont
+ [dejavu]
+
+\setuppapersize
+ [S6]
+
+\setuplayout
+ [backspace=12pt,
+ width=middle,
+ height=middle,
+ topspace=12pt,
+ header=36pt,
+ footer=36pt,
+ headerdistance=12pt,
+ footerdistance=12pt]
+
+\definecolor
+ [maincolor]
+ [darkblue]
+
+\startreusableMPgraphic{page}
+ StartPage ;
+ fill
+ Page
+ withcolor \MPcolor{maincolor} ;
+ fill
+ Field[Text][Header]
+ leftenlarged BackSpace
+ rightenlarged CutSpace
+ withcolor darkgray ;
+ fill
+ Field[Text][Footer]
+ leftenlarged BackSpace
+ rightenlarged CutSpace
+ withcolor darkgray ;
+ StopPage ;
+\stopreusableMPgraphic
+
+\setupheader
+ [color=maincolor,
+ style=bold,
+ before=\vss,
+ after=\vss]
+
+\setupheader
+ [color=maincolor,
+ style=bold,
+ before=\vss,
+ after=\vss]
+
+\setupheadertexts
+ [Breskens 2012]
+ [\getvariable{document}{title}]
+
+\setupbackgrounds
+ [page]
+ [background=page]
+
+\defineoverlay
+ [page]
+ [\reuseMPgraphic{page}]
+
+\setupbackgrounds
+ [footer][text]
+ [background=goback]
+
+\defineoverlay
+ [goback]
+ [\overlaybutton{PreviousPage}]
+
+\setuppagenumbering
+ [location=]
+
+\setupcolors
+ [textcolor=white]
+
+\setvariables
+ [document]
+ [maincolor=darkblue,
+ set=\setups{document:setup}]
+
+\startsetups document:setup
+
+ \doifsomething {\getvariable{document}{color}} {
+
+ \definecolor[maincolor][\getvariable{document}{color}]
+
+ }
+
+\stopsetups
+
+\setupinteraction
+ [state=start,
+ click=no]
+
+\usemodule[abr-01]
+\usemodule[pre-60]
+
+\stopmodule
+
+\continueifinputfile{s-present-bars.mkiv}
+
+\usemodule[present-common]
+
+%\inputpresentationfile{context/2012/context-2012-after-the-cleanup.tex}
+%\inputpresentationfile{context/2012/context-2012-the-script.tex}
+%\inputpresentationfile{context/2012/context-2012-lexing-sources.tex}
+%\inputpresentationfile{context/2012/context-2012-mixed-columns.tex}
+%\inputpresentationfile{context/2012/context-2012-visual-debugging.tex}
+\inputpresentationfile{context/2012/context-2012-xml-news.tex}
diff --git a/tex/context/modules/mkiv/s-present-colorful.mkiv b/tex/context/modules/mkiv/s-present-colorful.mkiv
new file mode 100644
index 000000000..ed4b5f7c4
--- /dev/null
+++ b/tex/context/modules/mkiv/s-present-colorful.mkiv
@@ -0,0 +1,384 @@
+%D \module
+%D [ file=s-present-colorful, % was s-pre-04
+%D version=1998.09.06,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment Colorful,
+%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.
+
+\usemodule[present-general]
+
+\startmodule[present-colorful]
+
+%D \macros
+%D {setupbodyfont}
+%D
+%D This is just another environment for typesetting interactive presentations. I
+%D wrote this module on behalf of a course I gave for the United Kingdom \TeX\ users
+%D group.
+
+\setupbodyfont[postscript,14.4pt]
+
+%D \macros
+%D {setupcolors,definecolor}
+%D
+%D I started using dark blue for the navigational elements. In that context, dark
+%D red is a logical choice for the contrast color. While playing around with the
+%D navigational elements I decided to use the not so dominant color yellow for the
+%D status bar.
+%D
+%D A few days before I wrote this style, the recent acquisition of Mondriaans last
+%D painting by the Dutch governement was a hot topic in the Dutch news scenary.
+%D Therefore I decided to replace the rather dull title page by something more
+%D colorful, in mondriaan colors, but far more random than any of his paintings. For
+%D consistence we remap the already defined primary colors.
+%D
+%D The \MKIV\ version is adapted abit so that the title is better visible.
+
+\setupcolors [state=start]
+
+\definecolor [NoneColor] [s=.6]
+\definecolor [GotoColor] [b=.6] \definecolor[blue] [GotoColor]
+\definecolor [ExitColor] [r=.6] \definecolor[red] [ExitColor]
+\definecolor [JumpColor] [s=.6]
+\definecolor [UserColor] [g=.6] \definecolor[green] [UserColor]
+%definecolor [StepColor] [r=.6,g=.6] \definecolor[yellow][StepColor]
+\definecolor [StepColor] [y=.8] \definecolor[yellow][StepColor]
+
+\definecolor [PageColor] [s=.80] \definecolor[gray] [PageColor]
+\definecolor [TextColor] [s=.90]
+\definecolor [TitleColor][s=.90]
+
+%D \macros
+%D {setuppapersize}
+%D
+%D As usual, we take a screen oriented paper size:
+
+\setuppapersize
+ [S6][S6]
+
+%D \macros
+%D {setuplayout,setupinteractionscreen}
+%D
+%D The layout definition fits into this $600\times450$ point area, but the
+%D dimensions are somewhat diffused by the text background offset.
+
+\setuplayout
+ [width=530pt,
+ height=400pt,
+ header=0pt,
+ footer=0pt,
+ backspace=15pt,
+ topspace=15pt,
+ bottomdistance=15pt,
+ bottom=10pt,
+ margin=0pt,
+ rightedgedistance=15pt,
+ rightedge=30pt]
+
+\setupinteractionscreen
+ [option=max]
+
+%D \macros
+%D {setupbackgrounds}
+%D
+%D Both the page and the text area have a gray background. The \type {[text,text]}
+%D area also has an offset. Later we will see that we have to compensate for that in
+%D the navigational areas.
+
+\setupbackgrounds
+ [page]
+ [background=color,
+ backgroundcolor=PageColor]
+
+\setupbackgrounds
+ [text][text]
+ [background=color,
+ backgroundcolor=TextColor,
+ backgroundoffset=5pt]
+
+%D \macros
+%D {setupinteraction}
+%D
+%D For convenient navigation, we turn on interaction.
+
+\setupinteraction
+ [state=start,
+ menu=on,
+ color=UserColor,
+ contrastcolor=NoneColor]
+
+%D \macros
+%D {setupsubpagenumber}
+%D
+%D When navigating the document, we keep the title page out of sight, therefore we
+%D use sub page numbers.
+
+\setupsubpagenumber
+ [state=start,
+ way=bytext]
+
+%D \macros
+%D {setupinteractionmenu}
+%D
+%D There is only one interaction menu, located in the right edge of the screen. Both
+%D offsets enlarge the edge by the same amount as the text background offset.
+
+\setupinteractionmenu
+ [right]
+ [state=start,
+ frame=off,
+ strut=no,
+ offset=0pt,
+ inbetween=,
+ bottomoffset=-5pt,
+ topoffset=-5pt]
+
+%D \macros
+%D {startinteractionmenu}
+%D
+%D The menu itself is not that spectacular. We use the start||stop alternative for
+%D setting the content. The macro \type {\interactioncolor} expands into either the
+%D interaction color or the contrast color, the latter only when no jump is
+%D possible.
+
+\startinteractionmenu[right]
+ \setupinteraction[color=GotoColor]
+ \but [previoussubpage] \Triangle {90}\hsize\interactioncolor \\
+ \vskip10pt
+ \but [nextsubpage] \Triangle{270}\hsize\interactioncolor \\
+ \vfill
+ \but [PreviousJump] \Triangle{180}\hsize{NoneColor} \\
+ \vskip-5pt
+ \but [NextJump] \Triangle {0}\hsize{NoneColor} \\
+\stopinteractionmenu
+
+%D \macros
+%D {setupinteractionbar}
+%D
+%D The interaction bar at the bottom is also larger than the normal width of the
+%D bottom area.
+
+\setupinteractionbar
+ [width=\textwidth,
+ height=\bottomheight,
+ distance=10pt,
+ color=NoneColor,
+ contrastcolor=StepColor]
+
+%D \macros
+%D {setupbottomtexts}
+%D
+%D The bar is centered in the middle.
+
+\setupbottomtexts
+ [{\interactionbar[alternative=f]}]
+
+%D We can exit viewing with a close button, located on the rightmost bottom area.
+
+\unexpanded\def\CloseButton
+ {\ifnum\realpageno>\plusone
+ \button
+ [width=\rightedgewidth,
+ height=\bottomheight,
+ offset=overlay,
+ background=color,
+ backgroundcolor=ExitColor,
+ frame=off]
+ {}%
+ [CloseDocument]%
+ \fi}
+
+\setupbottomtexts
+ [edge][][\CloseButton]
+
+%D \macros
+%D {definesymbol,setupitemize}
+%D
+%D Because some prominent things are rectangular or triangular, we prefer some
+%D different symbols in itemizations:
+
+\definesymbol[1][\blacktriangleright]
+\definesymbol[2][\blacktriangledown]
+\definesymbol[3][\blacktriangleright]
+\definesymbol[4][\blacktriangledown]
+
+\setupitemize[each][color=NoneColor]
+
+%D \macros
+%D {TitlePage,defineoverlay,button,setupalign,
+%D setupbackgrounds,setupinteraction,setupinteractionbar,
+%D startstandardmakeup,switchtobodyfont,setupinterlinespace}
+%D
+%D Now the main layout and navigational definitions are done, it makes sense to
+%D define and tune some structuring commands. First we build the titlepage.
+
+\defineoverlay [TitleGraphic] [\useMPgraphic{title}]
+\defineoverlay [NextPage] [\overlaybutton{nextpage}]
+
+\unexpanded\def\StartTitlePage
+ {\setupbackgrounds[page][background={color,TitleGraphic,NextPage}]
+ \setupbackgrounds[text][text][background=]
+ \setupinteraction[menu=off]
+ \setupinteractionbar[state=stop]
+ \startpagemakeup
+ \switchtobodyfont[24pt]
+ \bfd\setupinterlinespace
+ \setupalign[middle]
+ \vfil
+ \let\\=\vfil
+ \scale
+ [factor=max]\bgroup
+ \framed
+ [frame=off,
+ align=middle,
+ foregroundcolor=TitleColor,
+ offset=.05\textwidth]
+ \bgroup}
+
+\unexpanded\def\StopTitlePage
+ {\egroup
+ \egroup
+ \vfil\vfil\vfil
+ \stoppagemakeup
+ \setupinteraction[menu=on]
+ \setupinteractionbar[state=start]
+ \setupbackgrounds[page][background=color]
+ \setupbackgrounds[text][text][background=color]}
+
+\unexpanded\def\TitlePage#1%
+ {\StartTitlePage#1\StopTitlePage}
+
+%D \macros
+%D {Topic, Nopic, Subject,
+%D definehead, setuphead}
+%D
+%D We use \type {\Topic} and \type {\Subject} instead of chapters and sections. The
+%D \type {\Nopic} alternative is meant for internal use.
+
+\definehead [Topic] [chapter]
+\definehead [Nopic] [title]
+\definehead [Subject] [section]
+
+\setuphead
+ [Topic,Nopic]
+ [after={\blank[3*medium]},
+ number=no,
+ style=\bfb,
+ page=yes,
+ alternative=middle]
+
+\setuphead
+ [Subject]
+ [after=\blank,
+ number=no,
+ page=yes,
+ continue=no,
+ style=\bfa]
+
+%D \macros
+%D {Topics, Subjects,
+%D setuplist, placelist, startcolumns}
+%D
+%D This style is meant for the more large presentations, and therefore provided for
+%D a list of topics as well as local lists of subjects. When many topics are
+%D introduces, the list is typeset in columns.
+
+\setuplist
+ [Topic,Subject]
+ [alternative=g,
+ interaction=all,
+ before=,
+ after=]
+
+\setuplist
+ [Topic]
+ [criterium=all]
+
+\unexpanded\def\Topics#1%
+ {\determinelistcharacteristics[Topic]
+ \ifnum\utilitylistlength>0
+ \Nopic[Topics]{#1}
+ \ifnum\utilitylistlength>12
+ \startcolumns
+ \placelist[Topic]
+ \stopcolumns
+ \else
+ \placelist[Topic]
+ \fi
+ \fi}
+
+\unexpanded\def\Subjects%
+ {\placelist[Subject]}
+
+%D Last we define the overlays. Look at the way colors are linked into the macros.
+
+\setupMPvariables
+ [triangle]
+ [width=1cm,
+ rotation=0,
+ color=black]
+
+\startuniqueMPgraphic{triangle}{width,rotation,color}
+ fill triangle xsized \MPvar{width} rotated \MPvar{rotation} withcolor \MPvar{color} ;
+\stopuniqueMPgraphic
+
+\unexpanded\def\Triangle#1#2#3%
+ {\uniqueMPgraphic{triangle}{rotation=#1,width=#2,c:color=#3}}
+
+% \startuseMPgraphic{title}
+% path p ; numeric sx, sy, cc ;
+% for i=1 upto 250 :
+% sx := uniformdeviate 30 ;
+% sy := uniformdeviate 30 ;
+% cc := round(uniformdeviate 2) ;
+% if round(uniformdeviate 1) = 0 :
+% p := unitsquare xscaled sx yscaled sy ;
+% else :
+% p := unittriangle scaled sx rotated (round(uniformdeviate 3) * 90) ;
+% fi ;
+% p := p shifted (uniformdeviate OverlayWidth,uniformdeviate OverlayHeight) ;
+% fill p
+% withcolor
+% if cc = 0 : "GotoColor"
+% elseif cc = 1 : "ExitColor"
+% elseif cc = 2 : "StepColor" fi ;
+% endfor ;
+% \stopuseMPgraphic
+
+\startuseMPgraphic{title}
+ path p ; numeric sx, sy, cc ;
+ fill Page withcolor "StepColor" ;
+ for i=1 upto 1000 :
+ sx := 50 + uniformdeviate 50 ;
+ sy := 50 + uniformdeviate 50 ;
+ cc := round(uniformdeviate 2) ;
+ if round(uniformdeviate 1) = 0 :
+ p := unitsquare xscaled sx yscaled sy ;
+ else :
+ p := unittriangle scaled sx rotated (round(uniformdeviate 3) * 90) ;
+ fi ;
+ p := p shifted (uniformdeviate OverlayWidth,uniformdeviate OverlayHeight) ;
+ fill p
+ withcolor
+ if cc = 0 : "GotoColor"
+ elseif cc = 1 : "ExitColor"
+ elseif cc = 2 : "StepColor" fi ;
+ draw p
+ withpen pencircle scaled 1/2
+ withcolor white ;
+ endfor ;
+\stopuseMPgraphic
+
+\stopmodule
+
+\continueifinputfile{s-present-colorful.mkiv}
+
+\usemodule[present-common]
+
+\inputpresentationfile{examples/present-colorful-001.tex}
diff --git a/tex/context/modules/mkiv/s-present-common.mkiv b/tex/context/modules/mkiv/s-present-common.mkiv
new file mode 100644
index 000000000..b4b422ca5
--- /dev/null
+++ b/tex/context/modules/mkiv/s-present-common.mkiv
@@ -0,0 +1,43 @@
+%D \module
+%D [ file=s-present-common,
+%D version=2016.10.20,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Common Helpers,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\startmodule[present-common]
+
+\startluacode
+
+ -- sources -> presentations
+ -- tex/context/base/mkiv -> doc/context/presentations
+
+ function commands.inputpresentationfile(name)
+ local mkivpath = file.pathpart(resolvers.findfile("context.mkiv"))
+ local filename = file.join(mkivpath,"../presentations",name)
+ if lfs.isfile(filename) then
+ context.input(filename)
+ return
+ end
+ filename = file.join(mkivpath,"../../../../doc/context/presentations",name)
+ if lfs.isfile(filename) then
+ context.input(filename)
+ return
+ end
+ context.starttext()
+ context.formatted.type("missing file: %s",name)
+ context.stoptext()
+ end
+
+\stopluacode
+
+\unexpanded\def\inputpresentationfile#1%
+ {\ctxcommand{inputpresentationfile("#1")}}
+
+\stopmodule
diff --git a/tex/context/modules/mkiv/s-present-four.mkiv b/tex/context/modules/mkiv/s-present-four.mkiv
new file mode 100644
index 000000000..347790e26
--- /dev/null
+++ b/tex/context/modules/mkiv/s-present-four.mkiv
@@ -0,0 +1,188 @@
+%D \module
+%D [ file=s-present-four,
+%D version=2011.04.15, % about
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment Four,
+%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 another one-time used Bacho\TEX\ presentation style that I found back
+%D when cleaning up old files. It's just simple pages in a shape and this time
+%D we hook it into a section command.
+
+\startmodule[present-four]
+
+\setupbodyfont
+ [dejavu,11pt]
+
+\setupcolors
+ [textcolor=white]
+
+\setupalign
+ [flushleft]
+
+\startuseMPgraphic{page}
+ vardef One =
+ ulcorner Page --
+ .75[ulcorner Page, urcorner Page] --
+ .60[ulcorner Page, lrcorner Page] --
+ .75[ulcorner Page, llcorner Page] --
+ cycle
+ enddef;
+ vardef One =
+ ulcorner Page --
+ .80[ulcorner Page, urcorner Page] --
+ .65[ulcorner Page, lrcorner Page] --
+ .80[ulcorner Page, llcorner Page] --
+ cycle
+ enddef;
+ vardef Two = One rotatedaround(center Page, 90) enddef ;
+ vardef Three = One rotatedaround(center Page,180) enddef ;
+ vardef Four = One rotatedaround(center Page,270) enddef ;
+ StartPage ;
+ if CurrentLayout = "layout:0" :
+ fill Two withcolor .25[red,blue] ;
+ fill Three withcolor .25[blue,yellow] ;
+ fill Four withcolor .25[yellow,blue] ;
+ fill One withcolor .5white ;
+ elseif CurrentLayout = "layout:1" :
+ fill Two withcolor .25[red,blue] ;
+ fill Three withcolor .25[blue,yellow] ;
+ fill Four withcolor .25[yellow,blue] ;
+ fill One withcolor .25[green,red] ;
+ elseif CurrentLayout = "layout:2" :
+ fill One withcolor .25[green,red] ;
+ fill Two withcolor .25[red,blue] ;
+ fill Three withcolor .25[blue,yellow] ;
+ fill Four withcolor .25[yellow,blue] ;
+ elseif CurrentLayout = "layout:3" :
+ fill One withcolor .25[green,red] ;
+ fill Two withcolor .25[red,blue] ;
+ fill Four withcolor .25[yellow,blue] ;
+ fill Three withcolor .25[blue,yellow] ;
+ elseif CurrentLayout = "layout:4" :
+ fill One withcolor .25[green,red] ;
+ fill Three withcolor .25[blue,yellow] ;
+ fill Four withcolor .25[yellow,blue] ;
+ fill Two withcolor .25[red,blue] ;
+ fi ;
+ StopPage ;
+\stopuseMPgraphic
+
+\setupbackgrounds
+ [page]
+ [background={page}]
+
+\setupinteraction
+ [state=start,
+ click=no]
+
+\setupinteractionscreen
+ [option=max]
+
+\defineoverlay
+ [page]
+ [\useMPgraphic{page}]
+
+\definepapersize
+ [mine]
+ [width=400pt,
+ height=400pt]
+
+\setuppapersize
+ [mine]
+
+\setuplayout
+ [header=0pt,
+ footer=0pt,
+ margin=0pt,
+ width=middle,
+ height=middle]
+
+% \showframe
+
+\definelayout
+ [layout:0]
+ [backspace=10pt,cutspace=.375\paperwidth,
+ bottomspace=.35\paperheight,topspace=10pt]
+
+\definelayout
+ [layout:1]
+ [backspace=10pt,cutspace=.375\paperwidth,
+ bottomspace=.35\paperheight,topspace=10pt]
+
+\definelayout
+ [layout:2]
+ [backspace=.35\paperwidth,cutspace=10pt,
+ bottomspace=.375\paperheight,topspace=10pt]
+
+\definelayout
+ [layout:3]
+ [backspace=.375\paperwidth,cutspace=10pt,
+ bottomspace=10pt,topspace=.375\paperheight]
+
+\definelayout
+ [layout:4]
+ [backspace=10pt,cutspace=.375\paperwidth,
+ bottomspace=10pt,topspace=.35\paperheight]
+
+\setuptyping
+ [space=fixed]
+
+\startluacode
+ local n = -1
+ function documentdata.StartPage()
+ if n == 4 then
+ n = 1
+ else
+ n = n + 1
+ end
+ context.setuplayout { string.format("layout:%s",n) }
+ end
+ function documentdata.StopPage()
+ context.page()
+ end
+\stopluacode
+
+\unexpanded\def\StartPage
+ {\bgroup
+ \ctxlua{documentdata.StartPage()}}
+
+\unexpanded\def\StopPage
+ {\ctxlua{documentdata.StopPage()}
+ \egroup}
+
+\startsetups subject:start
+ \bgroup
+ \ctxlua{documentdata.StartPage()}
+\stopsetups
+
+\startsetups subject:stop
+ \ctxlua{documentdata.StopPage()}
+ \egroup
+\stopsetups
+
+\setuphead[subject]
+ [beforesection=\directsetup{subject:start},
+ aftersection=\directsetup{subject:stop}]
+
+\startsetups document:start
+ \StartPage
+ \definedfont[SerifBold*default at 48pt]
+ \setupinterlinespace
+ \documentvariable{title}
+ \StopPage
+\stopsetups
+
+\stopmodule
+
+\continueifinputfile{s-present-four.mkiv}
+
+\usemodule[present-common]
+
+\inputpresentationfile{bachotex/2011/bachotex-2011-cld-and-mkvi.tex}
diff --git a/tex/context/modules/mkiv/s-present-funny.mkiv b/tex/context/modules/mkiv/s-present-funny.mkiv
new file mode 100644
index 000000000..4948766ad
--- /dev/null
+++ b/tex/context/modules/mkiv/s-present-funny.mkiv
@@ -0,0 +1,208 @@
+%D \module
+%D [ file=s-present-funny, % was s-pre-03
+%D version=1998.09.06,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment Funny,
+%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[present-funny]
+
+%D This is the third environment for typesetting interactive presentations. I used
+%D this style for a talk on \TEX\ and \JAVASCRIPT\ at \TUG98, mainly because I
+%D didn't want to use the same style three times. Therefore this is a rather simple,
+%D silly style.
+
+\usemodule[pre-general]
+
+%D \macros
+%D {setupbodyfont}
+%D
+%D We use a large bodyfont. Combined with the fancy
+%D background, this does not leave that much room for text, but
+%D presentations should use much text anyway.
+
+\doifelsemode {asintended} {
+ \setupbodyfont[ludicaot,14.4pt]
+} {
+ \setupbodyfont[pagella,14.4pt]
+}
+
+%D \macros
+%D {setuppapersize,setuplayout,setupinteractionscreen}
+%D
+%D The page dimensions are set to size \type {S6}, being 600pt by 450pt. We use wide
+%D margins and discard headers and footers. We also launch the document full screen.
+
+\setuppapersize
+ [S6][S6]
+
+\setuplayout
+ [width=middle,
+ height=middle,
+ topspace=75pt,
+ backspace=100pt,
+ header=0pt,
+ footer=0pt]
+
+\setupinteractionscreen
+ [option=max]
+
+%D \macros
+%D {definecolor}
+%D
+%D Next, color support is turned on and a dark red color is defined. Other red
+%D shades will be derived from this one color.
+
+\definecolor [PageColor] [black]
+\definecolor [BackgroundColor] [s=.85]
+\definecolor [OrnamentColor] [r=.75]
+\definecolor [PositionColor] [s=.55]
+
+%D \macros
+%D {setupinteraction}
+%D
+%D We turn on interaction mode and use the same color for hyperlinks and redundant
+%D hyperlinks (the ones that point to the current page).
+
+\setupinteraction
+ [state=start,
+ contrastcolor=OrnamentColor,
+ color=OrnamentColor]
+
+%D \macros
+%D {defineoverlay, setupbackgrounds}
+%D
+%D The joke in this presentation is the elliptical shape of which the bottom part
+%D includes a page indication.
+
+\defineoverlay
+ [PageShape][\useMPgraphic{PageShape}]
+
+\startuseMPgraphic{PageShape}
+ StartPage ;
+ path p ; pair pa, pb ; numeric len ; color contrastcolor ;
+ fill Page withcolor \MPcolor {PageColor} ;
+ pickup pencircle rotated 45 xscaled 10pt yscaled 20pt ;
+ p := Page enlarged (-10pt,-15pt) superellipsed .8 ;
+ p := p shifted (-1.5pt,0) ; % looks better
+ fill p withcolor \MPcolor{BackgroundColor} ;
+ draw p withcolor \MPcolor{OrnamentColor} ;
+ contrastcolor = \MPcolor{PositionColor} ;
+ if (RealPageNumber > 0) and (NOfPages > 0):
+ draw point 5 of p withcolor contrastcolor ;
+ draw point 7 of p withcolor contrastcolor ;
+ len := 2/NOfPages ;
+ pa := point (5+len* RealPageNumber ) of p ;
+ pb := point (5+len*(RealPageNumber-1)) of p ;
+ draw (p cutafter pa) cutbefore pb
+ withcolor contrastcolor ;
+ fi ;
+ StopPage ;
+\stopuseMPgraphic
+
+%D We use the viewer provided feature to go to the previous or next page.
+
+\defineoverlay[PrevButton][\overlaybutton{PreviousPage}]
+\defineoverlay[NextButton][\overlaybutton{NextPage}]
+
+\setupbackgrounds
+ [page]
+ [background={PageShape,PrevButton}]
+
+\setupbackgrounds
+ [text][text]
+ [background=NextButton]
+
+% or using hard coded next/prev pages:
+%
+% \defineoverlay[PrevButton][\overlaybutton{previouspage}]
+% \defineoverlay[NextButton][\overlaybutton{nextpage}]
+%
+% \setupbackgrounds[state=repeat]
+% \setupbackground[text][text][background=NextButton]
+%
+% or simply (using an repeated layer):
+%
+% \setupbackground[text][background=NextButton]
+
+%D \macros
+%D {definehead, setuphead}
+%D
+%D Like the other presentation styles, we use \type {\Topic} instead of \type
+%D {\chapters}. This time we don't provide an additional sectioning. So we have:
+%D
+%D \starttyping
+%D \TitlePage{How nice}
+%D
+%D \Topics{This is about ...}
+%D
+%D \Topic{The first one}
+%D
+%D \Topic{Another one}
+%D \stoptyping
+
+\definehead [Topic] [chapter]
+\definehead [Nopic] [title]
+
+\setuphead
+ [Topic,Nopic]
+ [after={\blank[3*medium]},
+ number=no,
+ style=\bfb,
+ page=yes,
+ alternative=middle]
+
+\setuplist
+ [Topic]
+ [alternative=g,
+ interaction=all,
+ before=,
+ after=]
+
+\let\Subject\Topic
+
+%D The tables of contents is associated with \type {\Topics}.
+
+\unexpanded\def\Topics#1%
+ {\Nopic[Topics]{#1}
+ \placelist[Topic][criterium=all]}
+
+\unexpanded\def\Subjects
+ {}
+
+%D Instead of \type {\TitlePage}, one can use the pair \type {\StartTitlePage} --
+%D \type {\StopTitlePage}:
+%D
+%D \starttyping
+%D \StartTitlePage
+%D A Self Made Title
+%D \StopTitlePage
+%D \stoptyping
+
+\unexpanded\def\StartTitlePage
+ {\startstandardmakeup
+ \bfd\setupinterlinespace
+ \setupalign[middle]
+ \vfil
+ \def\\{\vfil\bfb\setupinterlinespace}}
+
+\unexpanded\def\StopTitlePage
+ {\vfil\vfil\vfil
+ \stopstandardmakeup}
+
+\unexpanded\def\TitlePage#1%
+ {\StartTitlePage#1\StopTitlePage}
+
+\stopmodule
+
+\continueifinputfile{s-present-funny.mkiv}
+
+\usemodule[present-common]
+
+\inputpresentationfile{examples/present-funny-001.tex}
diff --git a/tex/context/modules/mkiv/s-present-fuzzy.mkiv b/tex/context/modules/mkiv/s-present-fuzzy.mkiv
new file mode 100644
index 000000000..ee029b0e6
--- /dev/null
+++ b/tex/context/modules/mkiv/s-present-fuzzy.mkiv
@@ -0,0 +1,225 @@
+%D \module
+%D [ file=s-present-fuzzy, % was s-pre-05
+%D version=1998.12.12,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment Fuzzy,
+%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.
+
+\usemodule[present-general]
+
+\startmodule[present-fuzzy]
+
+%D As all styles sofar, this one has the same structuring commands.
+
+\doifelsemode {asintended} {
+ \setupbodyfont[ludicaot,14.4pt]
+} {
+ \setupbodyfont[pagella,14.4pt]
+}
+
+\definecolor [BackgroundColor] [s=.95]
+\definecolor [OrnamentColor] [r=.6,g=.7,b=.8]
+
+\setuppapersize
+ [S6][S6]
+
+\setuplayout
+ [width=430pt,
+ height=400pt,
+ header=0pt,
+ footer=0pt,
+ margin=0pt,
+ backspace=25pt,
+ topspace=25pt,
+ rightedgedistance=20pt,
+ rightedge=110pt]
+
+\setupinteractionscreen
+ [option=max]
+
+\setupbackgrounds
+ [state=repeat]
+
+\setupbackgrounds
+ [page]
+ [backgroundcolor=white]
+
+\setupbackgrounds
+ [text][text]
+ [background={HashFrameA,NextPage},
+ backgroundoffset=20pt]
+
+\defineoverlay
+ [HashFrameA]
+ [\useMPgraphic{HashFrameA}]
+
+\defineoverlay
+ [HashFrameB]
+ [\useMPgraphic{HashFrameB}]
+
+\setupinteraction
+ [state=start,
+ menu=on,
+ color=OrnamentColor,
+ contrastcolor=OrnamentColor]
+
+%D Watch how we use a list alternative that matches the menu.
+
+\setupinteractionmenu
+ [right]
+ [background=HashFrameB,
+ style=smallbold,
+ frame=off,
+ offset=10pt,
+ height=35pt,
+ before=,
+ after=,
+ inbetween=\endgraf,
+ width=\rightedgewidth]
+
+\startinteractionmenu[right]
+ \placelist
+ [Topic]
+ [criterium=all,
+ alternative=right,
+ maxwidth=.8\rightedgewidth,
+ interaction=all,
+ before=,
+ after=]
+ \vfill
+ \setupinteractionmenu
+ [right]
+ [height=30pt]
+ \but [CloseDocument] Close \\
+\stopinteractionmenu
+
+\setupwhitespace
+ [big]
+
+\setupblank
+ [big]
+
+%D \macros
+%D {TitlePage}
+%D
+%D Now the main layout and navigational definitions are done, it makes sense to
+%D define and tune some structuring commands. First we build the titlepage.
+
+\defineoverlay [TitleGraphic] [\useMPgraphic{TitleGraphic}]
+\defineoverlay [NextPage] [\overlaybutton{forward}]
+
+\unexpanded\def\StartTitlePage
+ {\setupbackgrounds[page][background={color,TitleGraphic,NextPage}]
+ \setupbackgrounds[text][text][background=]
+ \setupinteraction[menu=off]
+ \setupinteractionbar[state=stop]
+ \setuplayout[width=550pt,rightedge=0pt]
+ \startstandardmakeup
+ \switchtobodyfont[24pt]
+ \bfd\setupinterlinespace
+ \setupalign[middle]
+ \vfil
+ \let\\=\vfil}
+
+\unexpanded\def\StopTitlePage
+ {\vfil\vfil\vfil
+ \stopstandardmakeup
+ \setuplayout[width=430pt,rightedge=110pt]
+ \setupinteraction[menu=on]
+ \setupinteractionbar[state=start]
+ \setupbackgrounds[page][background=color]
+ \setupbackgrounds[text][text][background={HashFrameA,NextPage}]}
+
+\unexpanded\def\TitlePage#1%
+ {\StartTitlePage#1\StopTitlePage}
+
+%D \macros
+%D {Topics,Subjects}
+%D
+%D Because the lists are in the menu, we don't honor list placement macros.
+
+\unexpanded\def\Topics#1{}
+\unexpanded\def\Subjects{}
+
+%D \macros
+%D {Topic, Nopic, Subject}
+%D
+%D Since this style is meant for rather flat structured documents, only \type
+%D {\Topic} makes sense.
+
+\definehead [Topic] [chapter]
+\definehead [Nopic] [title]
+\definehead [Subject] [section]
+
+\setuphead
+ [Topic, Nopic]
+ [after={\blank[3*medium]},
+ number=no,
+ style=\tfb,
+ page=yes,
+ alternative=middle]
+
+\setuphead
+ [Subject]
+ [after=\blank,
+ number=no,
+ page=yes,
+ continue=no,
+ style=\tfa]
+
+%D We use only one kind of base graphic, which is sligthly
+%D tuned for the different usage.
+
+\startMPdefinitions
+ def random_hash_frame (expr width, height, offset, linewidth ) =
+
+ def delta = ((uniformdeviate .5offset) + .25offset) enddef ;
+ x1 := offset ; y1 := offset ; x2 := width-offset ; y2 := height-offset ;
+
+ drawoptions(withpen pencircle scaled linewidth withcolor \MPcolor{BackgroundColor}) ;
+ fill z1--(x2,y1)--z2--(x1,y2)--cycle ;
+
+ drawoptions(withpen pencircle scaled linewidth withcolor \MPcolor{OrnamentColor}) ;
+ draw (x1-delta,y1)--(x2+delta,y1) ;
+ draw (x2,y1-delta)--(x2,y2+delta) ;
+ draw (x2+delta,y2)--(x1-delta,y2) ;
+ draw (x1,y2+delta)--(x1,y1-delta) ;
+
+ drawoptions();
+ setbounds currentpicture to unitsquare xscaled width yscaled height ;
+ enddef ;
+\stopMPdefinitions
+
+\startuseMPgraphic{HashFrameA}
+ random_hash_frame(OverlayWidth,OverlayHeight,15pt,2pt) ;
+\stopuseMPgraphic
+
+\startuseMPgraphic{HashFrameB}
+ random_hash_frame(OverlayWidth,OverlayHeight, 5pt,2pt) ;
+\stopuseMPgraphic
+
+\startuseMPgraphic{TitleGraphic}
+ numeric offset, width, height ;
+ for i=1 upto 300 :
+ offset := uniformdeviate 10pt ;
+ width := 2*offset + 30pt + uniformdeviate 30pt ;
+ height := 2*offset + 10pt + uniformdeviate 10pt ;
+ addto currentpicture also
+ image(random_hash_frame(width,height,offset,1pt)) shifted
+ (uniformdeviate OverlayWidth, uniformdeviate OverlayHeight) ;
+ endfor ;
+\stopuseMPgraphic
+
+\stopmodule
+
+\continueifinputfile{s-present-fuzzy.mkiv}
+
+\usemodule[present-common]
+
+\inputpresentationfile{examples/present-fuzzy-001.tex}
diff --git a/tex/context/modules/mkiv/s-present-green.mkiv b/tex/context/modules/mkiv/s-present-green.mkiv
new file mode 100644
index 000000000..e62257ff3
--- /dev/null
+++ b/tex/context/modules/mkiv/s-present-green.mkiv
@@ -0,0 +1,349 @@
+%D \module
+%D [ file=s-present-green, % was s-pre-02
+%D version=1998.04.21,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment Green,
+%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[present-green]
+
+%D Here is another original presentation style, actually the second one we made.
+%D Not much adaption was needed for \MKIV.
+
+\usemodule[pre-general]
+
+%D \macros
+%D {setupbodyfont, switchtobodyfont, setuplayout}
+%D
+%D At \PRAGMA\ we prefer using the Lucida Bright fonts, but one can of course load
+%D another typeface.
+
+\doifelsemode {asintended} {
+ \setupbodyfont[ludicaot,14.4pt]
+} {
+ \setupbodyfont[pagella,14.4pt]
+}
+
+\setuplayout
+ [style=smallbodyfont]
+
+%D \macros
+%D {setuppapersize, setuplayout}
+%D
+%D The papersize suits the screen dimensions. The layout is rather simple. We use
+%D the whole width of the screen and only have navigational tools at the bottom of
+%D the screen.
+
+\setuppapersize
+ [S6][S6]
+
+\setuplayout
+ [backspace=1cm,
+ topspace=1cm,
+ margin=0pt,
+ header=0pt,
+ footer=0pt,
+ bottomdistance=.875cm,
+ bottom=1cm,
+ width=fit,
+ height=fit]
+
+%D \macros
+%D {setupwhitespace, setuptyping}
+%D
+%D We don't have much height, so we use a more cramped spacing. Verbatim text looks
+%D better when indented.
+
+\setupwhitespace
+ [medium]
+
+\setuptyping
+ [margin=standard]
+
+%D \macros
+%D {definecolor}
+%D
+%D Of course we enable color. We define some logical colors, of which most default
+%D to the same green shade.
+
+\definecolor [BackgroundColor] [r=.8, g=.8, b=.8]
+\definecolor [OrnamentColor] [r= 0, g=.7, b=.4]
+
+%D \macros
+%D {setupinteraction, setupinteractionscreen}
+%D
+%D We still have to enable interaction mode. We go full screen!
+
+\setupinteraction
+ [state=start,
+ color=OrnamentColor,
+ contrastcolor=OrnamentColor]
+
+\setupinteractionscreen
+ [option=max,
+ width=fit,
+ height=fit]
+
+%D \macros
+%D {setupitemize}
+%D
+%D And why not bring some color in itemizations too?
+
+\setupitemize
+ [color=OrnamentColor]
+
+%D \macros
+%D {defineoverlay, setupbackgrounds}
+%D
+%D The navigational elements and the backgrounds are provided by \METAPOST.
+
+\startuniqueMPgraphic{PageBackground}
+ fill unitsquare
+ xyscaled(OverlayWidth,OverlayHeight)
+ withcolor OverlayColor ;
+ draw unitsquare
+ xyscaled(OverlayWidth,OverlayHeight)
+ enlarged (-2*OverlayLineWidth)
+ withpen pencircle scaled OverlayLineWidth
+ withcolor OverlayLineColor ;
+\stopuniqueMPgraphic
+
+\defineoverlay
+ [PageBackground]
+ [\uniqueMPgraphic{PageBackground}]
+
+\setupbackgrounds
+ [page]
+ [background=PageBackground,
+ backgroundcolor=BackgroundColor,
+ rulethickness=.125cm,
+ framecolor=OrnamentColor]
+
+%D \macros
+%D {setuptexttexts}
+%D
+%D By clicking on the text area, one goes to the next page. We hook this feature
+%D into the text backgrounds.
+
+\startuniqueMPgraphic{TextBackground}
+ draw unitsquare
+ xyscaled(OverlayWidth,OverlayHeight)
+ enlarged (4*OverlayLineWidth)
+ withpen pencircle scaled OverlayLineWidth
+ withcolor OverlayLineColor ;
+\stopuniqueMPgraphic
+
+\defineoverlay
+ [TextBackground]
+ [\uniqueMPgraphic{TextBackground}]
+
+\defineoverlay
+ [NextPage]
+ [\overlaybutton{nextpage}]
+
+\setupbackgrounds
+ [text]
+ [background={TextBackground,NextPage},
+ backgroundcolor=BackgroundColor,
+ rulethickness=.0625cm,
+ framecolor=OrnamentColor]
+
+%D \macros
+%D {setupinteractionmenu,startinteractionmenu}
+%D
+%D At the bottom of the screen, we show three buttons. These direct us to the
+%D previous or next jump or exit the document.
+
+\setupMPvariables[RightArrow][height=\bottomheight]
+\setupMPvariables[LeftArrow] [height=\bottomheight]
+\setupMPvariables[Circle] [height=\bottomheight]
+\setupMPvariables[UpArrow] [height=\bottomheight]
+
+\startuniqueMPgraphic{RightArrow}{height}
+ fill righttriangle xysized(\MPvar{height},\MPvar{height})
+ withpen pencircle scaled (\MPvar{height}/5)
+ withcolor "OrnamentColor" ;
+\stopuniqueMPgraphic
+
+\startuniqueMPgraphic{LeftArrow}{height}
+ fill lefttriangle xysized(\MPvar{height},\MPvar{height})
+ withpen pencircle scaled (\MPvar{height}/5)
+ withcolor "OrnamentColor" ;
+\stopuniqueMPgraphic
+
+\startuniqueMPgraphic{Circle}{height}
+ fill fullcircle sized \MPvar{height}
+ withpen pencircle scaled (\MPvar{height}/5)
+ withcolor "OrnamentColor" ;
+\stopuniqueMPgraphic
+
+\startuniqueMPgraphic{UpArrow}{height}
+ fill uptriangle xysized(\MPvar{height},\MPvar{height})
+ withpen pencircle scaled (\MPvar{height}/5)
+ withcolor "OrnamentColor" ;
+\stopuniqueMPgraphic
+
+\setupinteractionmenu
+ [bottom]
+ [state=start,
+ frame=off,
+ width=.3\textwidth,
+ height=\bottomheight]
+
+\setupinteraction
+ [menu=on]
+
+\def\WhateverButton
+ {\doifreferencefoundelse{Whatever}
+ {\raw [Whatever] \uniqueMPgraphic{UpArrow} \\}
+ {}}
+
+\startinteractionmenu[bottom]
+ \but [Topics] \\ % secret button
+ \hfill
+ \WhateverButton % user specific
+ \kern2\bottomheight
+ \raw [previouspage] \uniqueMPgraphic{LeftArrow} \\
+ \kern.5\bottomheight
+ \raw [CloseDocument] \uniqueMPgraphic{Circle} \\
+ \kern.5\bottomheight
+ \raw [nextpage] \uniqueMPgraphic{RightArrow} \\
+ \kern.5\bottomheight
+\stopinteractionmenu
+
+%D \macros
+%D {TitlePage, Topics, Topic, Subject}
+%D
+%D A presentation after loading this module looks like:
+%D
+%D \starttyping
+%D \TitlePage {About Whatever\\Topics}
+%D
+%D \Topics {Todays Talk}
+%D
+%D \Topic {Some topic}
+%D
+%D .....
+%D
+%D \Topic {Next Topic}
+%D
+%D .....
+%D \stoptyping
+
+%D \macros
+%D {StartTitlePage, TitlePage}
+%D
+%D The titlepage is rather simple and can be typeset in two
+%D ways:
+%D
+%D \starttyping
+%D \StartTitlePage
+%D text \\ text \\ text
+%D \StopTitlepage
+%D \stoptyping
+%D
+%D or as one||liner:
+%D
+%D \starttyping
+%D \TitlePage{text\\text\\text}
+%D \stoptyping
+%D
+%D The first alternative can be used for more complicated title pages.
+
+\unexpanded\def\StartTitlePage
+ {\startstandardmakeup
+ \bfd\setupinterlinespace
+ \setupalign[middle]
+ \vfil
+ \let\\=\vfil}
+
+\unexpanded\def\StopTitlePage
+ {\vfil\vfil\vfil
+ \stopstandardmakeup}
+
+\unexpanded\def\TitlePage#1%
+ {\StartTitlePage#1\StopTitlePage}
+
+%D \macros
+%D {definehead}
+%D
+%D The commands \type{\Topic} and \type{\Subject} are defined as copies of head. We
+%D use \type{\Nopic} for internal purposes.
+
+\definehead [Topic] [chapter]
+\definehead [Subject] [section]
+
+\definehead [Nopic] [title]
+
+%D \macros
+%D {setuphead}
+%D
+%D We use our own command for typesetting the titles. We hide sectionnumbers from
+%D viewing. Each topic is followed by a list of subjects that belong to the topic.
+
+\setuphead
+ [Topic, Nopic]
+ [after={\blank[3*medium]},
+ number=no,
+ style=\bfb,
+ page=yes,
+ alternative=middle]
+
+\setuphead
+ [Subject]
+ [after=\blank,
+ number=no,
+ page=yes,
+ continue=no,
+ style=\tfa]
+
+%D \macros
+%D {setuplist}
+%D
+%D When found, the subject list is automatically placed after the topic head.
+
+\setuplist
+ [Topic,Subject]
+ [alternative=g,
+ interaction=all,
+ before=,
+ after=]
+
+\setuplist
+ [Topic]
+ [criterium=all]
+
+\unexpanded\def\Topics#1%
+ {\determinelistcharacteristics[Topic]
+ \doifmode{*list}
+ {\Nopic[Topics]{#1}
+ \startcolumns
+ \placelist[Topic]
+ \stopcolumns}}
+
+\setuplist
+ [Subject]
+ [criterium=Topic]
+
+\unexpanded\def\Subjects
+ {\determinelistcharacteristics[Subject]
+ \doifmode{*list}
+ {\placelist[Subject]}}
+
+\setuphead
+ [Topic]
+ [after={\blank[3*medium]\Subjects}]
+
+\stopmodule
+
+\continueifinputfile{s-present-green.mkiv}
+
+\usemodule[present-common]
+
+\inputpresentationfile{examples/present-green-001.tex}
diff --git a/tex/context/modules/mkiv/s-present-grow.mkiv b/tex/context/modules/mkiv/s-present-grow.mkiv
new file mode 100644
index 000000000..b4971e40f
--- /dev/null
+++ b/tex/context/modules/mkiv/s-present-grow.mkiv
@@ -0,0 +1,171 @@
+%D \module
+%D [ file=s-present-grow, % was s-pre-10
+%D version=unknown,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment Grow,
+%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 style is derived from the ninth style, which was used first at \EUROTEX\ 99
+%D and later at \TUG\ 2000. This alternative builds up a page.
+
+\usemodule[present-windows] % not that much used
+
+\startmodule[present-grow]
+
+%D We use blue colors instead of yellow ones. Since we have used symbolic names, we
+%D can easily overload the existing scheme.
+
+\definecolor[LineColor][r=.40,g=.40,b=1.00]
+
+%D Here we don't use fixed dimensions, but fit the sample windows and derive the
+%D text windows's width from this one.
+
+\setupframedtexts
+ [SampleText]
+ [width=fit,height=fit,
+ background={background,nextpage}]
+
+%D The topic goes to the top right corner of the screen which means that it is
+%D positioned left down to the reference point. Watch how we make data on this layer
+%D (here only the topic but it can be more) persistent.
+
+\setuplayer
+ [topic]
+ [y=0pt,x=\makeupwidth,
+ location=lb,
+ state=repeat,
+ hoffset=-\FrameSkip,
+ voffset=\FrameSkip]
+
+%D Clicking on the page brings us back.
+
+\setupbackgrounds
+ [page]
+ [background={previouspage,color,topic}]
+
+%D All layers end up on the text area. This could have been the page area too since
+%D these have the same dimensions.
+
+\setupbackgrounds
+ [text]
+ [background={common,sample,text}]
+
+%D We overload this one (\MKIV):
+
+\defineoverlay [samepage] [\overlaybutton{nextpage}]
+
+%D Because we build up the text window step by step, we will separate the entries by
+%D white space.
+
+\startsetups [always]
+ \setupwhitespace[big]
+ \setupblank[big]
+\stopsetups
+
+%D The \type {\Topic} commands can be simplified to:
+
+\unexpanded\def\Topic#1%
+ {\resetlayer[topic]
+ \setlayer[topic]{\bfb\setstrut\color[TextColor]{#1}}}
+
+%D We also provide a way to erase the topic.
+
+\unexpanded\def\NoTopic
+ {\resetlayer[topic]}
+
+%D We have to redefine the structuring commands to support the resetting of buffer
+%D counters.
+
+\newcounter\TextN
+
+\unexpanded\def\StartSample
+ {\doglobal\newcounter\TextN
+ \dostartbuffer[sample][StartSample][StopSample]}
+
+\unexpanded\def\StartText
+ {\doglobal\newcounter\TextN
+ \dostartbuffer[text][StartText][StopText]}
+
+\unexpanded\def\StartSubText
+ {\doglobal\increment\TextN
+ \dostartbuffer[text-\TextN][StartSubText][StopSubText]}
+
+\unexpanded\def\StopText
+ {\startstandardmakeup
+ \DoSampleText{text}{common}{nextpage}
+ \stopstandardmakeup}
+
+\unexpanded\def\StopSubText
+ {\startstandardmakeup
+ \DoSampleText{text}{common}{nextpage}
+ \stopstandardmakeup}
+
+%D The \type {\DoSampleText} command is adapted to support addition of subtexts
+%D (each subtext goes into its own buffer).
+
+\unexpanded\def\DoSampleText#1#2#3%
+ {\setupframedtexts[SampleText][background={background,#3}]
+ \bgroup
+ \setups[#1]%
+ \setups[always]%
+ \setbox\nextbox=\hbox
+ {\startSampleText[none]
+ \getbuffer[#1]\par
+ \doif{#1}{text}
+ {\dorecurse{\TextN}{\getbuffer[text-\recurselevel]\par}}
+ \stopSampleText}
+ \xdef\SampleTextWidth{\the\wd\nextbox}
+ \setlayer[#2]{\box\nextbox}%
+ \egroup}
+
+%D Since we are no longer swapping windows, we end up with a much simplier \type
+%D {\Stopidea} macro. We don't reset samples at the inner level.
+
+\unexpanded\def\StartIdea
+ {\bgroup
+ \let\StopSample \relax
+ \let\StopText \relax
+ \let\StopSubText\relax
+ \def\StartSample{\dostartbuffer[sample][StartSample][StopSample]}}
+
+\unexpanded\def\StopIdea
+ {\startstandardmakeup
+ \DoSampleText{sample}{sample}{nextpage}
+ \SetTextWidth
+ \DoSampleText{text} {text} {nextpage}
+ \stopstandardmakeup
+ \egroup}
+
+%D Here we determine the width of the text window. It is derived from the width of
+%D the sample and stays the same within a sequence.
+
+\unexpanded\def\SetTextWidth
+ {\ifnum\TextN<1 % yes or no, may change
+ \scratchdimen=\makeupwidth
+ \advance\scratchdimen by -\SampleTextWidth
+ \advance\scratchdimen by \FrameSkip
+ \xdef\SampleWidth{\the\scratchdimen}%
+ \fi
+ \setupframedtexts
+ [SampleText]
+ [width=\SampleWidth]}
+
+%D We use the (already implemented) second alternative of the titlepage graphic.
+%D Please don't change this.
+
+\defineoverlay[joke] [\useMPgraphic{joke}{n=1}] % not to be changed !
+
+\stopmodule
+
+\continueifinputfile{s-present-grow.mkiv}
+
+\usemodule[present-common]
+
+\inputpresentationfile{examples/present-grow-001.tex}
+
diff --git a/tex/context/modules/mkiv/s-present-organic.mkiv b/tex/context/modules/mkiv/s-present-organic.mkiv
new file mode 100644
index 000000000..657b786f2
--- /dev/null
+++ b/tex/context/modules/mkiv/s-present-organic.mkiv
@@ -0,0 +1,335 @@
+%D \module
+%D [ file=s-present-organic, % s-pre-19,
+%D version=2000.07.31,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment Organic,
+%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[present-organic]
+
+%D This style is made in the process or writing the \METAFUN\ manual. It exploits a
+%D few tricks, like graphics calculated using positional information. It also uses
+%D the (at that moment) new menu list placement alternative. If you forget about the
+%D definition of the button shapes, which is complicated in any system, this style
+%D is not even that hard to follow. Watch how the left side of the buttons follow
+%D the right side of the text graphic.
+%D
+%D While playing bit with this style, the random alternative made me think of those
+%D organic building with non equal windows (we have a few in The Netherlands), so I
+%D decided to label this style as \type {pre-organic}.
+%D
+%D At the end of this file, there is a small test file, so when you process this
+%D file with \TEXEXEC\ and the options \type {--mode=demo} and \type {--pdf}, you
+%D will get a demo document.
+%D
+%D We use one of the standard screen \quote {paper} sizes, and map it onto the same
+%D size, so that we get a nicely cropped page.
+
+\setuppapersize
+ [S6][S6]
+
+%D Like in the \METAFUN\ manual, we use the Palatino as main bodyfont. This font is
+%D quite readable on even low resolution screens, although I admit that this style
+%D is developed using an $1400\times1050$ pixel LCD screen, so I may be biased.
+
+\setupbodyfont[pagella]
+
+%D The layout specification sets up a text area and a right edge area where the
+%D menus will go. Watch the rather large edge distance. By setting the header and
+%D footer dimensions to zero, we automatically get rid of page body ornaments, like
+%D the pagenumber.
+
+\setuplayout
+ [topspace=48pt,
+ backspace=48pt,
+ cutspace=12pt,
+ width=400pt,
+ margin=0cm,
+ rightedge=88pt,
+ rightedgedistance=48pt,
+ header=0cm,
+ footer=0cm,
+ height=middle]
+
+%D We use a moderate, about a line height, interparagraph white space.
+
+\setupwhitespace
+ [big]
+
+%D Of course we use colors, since on computer displays they come for free.
+
+\definecolor [red] [r=.75]
+\definecolor [yellow] [r=.75,g=.75]
+\definecolor [gray] [s=.50]
+\definecolor [white] [s=.85]
+
+\definecolor [PageColor] [yellow]
+\definecolor [TextColor] [white]
+\definecolor [OrnamentColor] [red]
+\definecolor [InteractionColor] [red]
+\definecolor [ContrastColor] [gray]
+
+%D This is an interactive document, so we enable interaction. In this style, we
+%D disable the viewer's \quote {highlight a hyperlink when it's clicked on} feature.
+%D We will use a menu, so we enable menus. Later we will see the contract color
+%D |<|hyperlinks gets that color when we are already on the location|>| in action.
+
+\setupinteraction
+ [state=start,
+ click=off,
+ color=InteractionColor,
+ contrastcolor=ContrastColor,
+ menu=on]
+
+%D The menu itself is set up as follows. Because we will calculate menubuttons based
+%D on their position on the page, we have to keep track of the positions. Therefore,
+%D we set the \type {position} variable to \type {yes}.
+
+\setupinteractionmenu
+ [right]
+ [frame=off,
+ position=yes,
+ align=middle,
+ topoffset=.75cm, % watch out, these are negative in mkii
+ bottomoffset=.75cm, % watch out, these are negative in mkii
+ color=gray,
+ contrastcolor=gray,
+ style=bold,
+ before=,
+ after=]
+
+%D The menu content is rather sober: a list of topics (later we will define the
+%D command that generates topic entries), and a close button.
+
+\startinteractionmenu[right]
+ \placelist[Topic][alternative=right]
+ \vfill
+ \but [CloseDocument] close \\
+\stopinteractionmenu
+
+%D We have now arived at the more interesting part of the style definition: the
+%D graphic that goes in the page background. Because this graphic will change, we
+%D define a usable \METAPOST\ graphic. Page backgrounds are recalculated each page,
+%D opposite to the other backgrounds that are calculated when a new background is
+%D defined, or when repetitive calculation is turned on.
+
+\setupbackgrounds
+ [page]
+ [background=page]
+
+\defineoverlay
+ [page]
+ [\useMPgraphic{page}]
+
+\setupMPvariables
+ [page]
+ [alternative=3]
+
+\startuseMPgraphic{page}
+
+ \includeMPgraphic{rightsuperbutton}
+
+ StartPage ;
+
+ path p, q ; pickup pencircle scaled 3pt ;
+
+ p := Field[Text][Text] enlarged 36pt superellipsed .90 ;
+
+ fill Page withcolor \MPcolor{PageColor} ;
+ fill p withcolor \MPcolor{TextColor} ;
+ draw p withcolor \MPcolor{OrnamentColor} ;
+
+ p := Field[Text][Text] enlarged 48pt superellipsed .90 ;
+
+ def right_menu_button (expr nn, rr, pp, xx, yy, ww, hh, dd) =
+ if (pp>0) and (rr>0) :
+ q := rightsuperbutton(p,xx,yy,RightEdgeWidth,hh) ;
+ fill q withcolor \MPcolor{TextColor} ;
+ draw q withcolor if rr=2 : \MPcolor{ContrastColor}
+ else : \MPcolor{InteractionColor} fi ;
+ fi ;
+ enddef ;
+
+ \MPmenubuttons{right}
+
+ StopPage ;
+\stopuseMPgraphic
+
+\startuseMPgraphic{page}
+
+ \includeMPgraphic{rightsuperbutton}
+
+ StartPage ;
+
+ numeric alternative, seed, superness, squeezeness, randomness ;
+ path p, q ; transform t ;
+
+ alternative := \MPvar{alternative} ;
+ seed := uniformdeviate 100 ;
+
+ if alternative > 10 :
+ superness := .85 + ((\realfolio-1)/max(\lastpage,1)) * .15 ;
+ squeezeness := 12pt - ((\realfolio-1)/max(\lastpage,1)) * 10pt ;
+ else :
+ superness := .90 ;
+ squeezeness := 12pt ;
+ fi ;
+
+ randomness := squeezeness ;
+
+ alternative := alternative mod 10 ;
+
+ t := identity if alternative=3: shifted (9pt,-9pt) fi ;
+
+ % first we draw the shape that surrounds the text
+
+ randomseed := seed ;
+
+ p := Field[Text][Text] enlarged if
+ alternative = 1 : 36pt superellipsed superness elseif
+ alternative = 2 : 36pt squeezed squeezeness elseif
+ alternative = 3 : 36pt randomized randomness else
+ : 36pt fi ;
+
+ pickup pencircle scaled 3pt ;
+
+ fill Page withcolor \MPcolor{PageColor} ;
+ fill p withcolor \MPcolor{TextColor} ;
+ draw p withcolor \MPcolor{OrnamentColor} ;
+
+ % we set p to the wider shape from which we will chip off pieces
+
+ randomseed := seed ;
+
+ p := ( Field[Text][Text] enlarged if
+ alternative = 1 : 48pt superellipsed superness elseif
+ alternative = 2 : 48pt squeezed squeezeness elseif
+ alternative = 3 : 36pt randomized randomness else
+ : 48pt fi ) transformed t ;
+
+ % calls to *_menu_button are generated automatically ...
+
+ vardef right_menu_button (expr nn, rr, pp, xx, yy, ww, hh, dd) =
+ save q ; path q ;
+ if (pp>0) and (rr>0) :
+ q := rightsuperbutton(p,xx,yy,RightEdgeWidth,hh) ; % \MPw{menu:right:\realfolio}
+ fill q withcolor \MPcolor{TextColor} ;
+ draw q withcolor if rr=2 : \MPcolor{ContrastColor}
+ else : \MPcolor{InteractionColor} fi ;
+ fi ;
+ enddef ;
+
+ % ... and inserted when the graphic data is flushed here ...
+
+ \MPmenubuttons{right}
+
+ StopPage ;
+\stopuseMPgraphic
+
+\startuseMPgraphic{rightsuperbutton}
+
+ vardef rightsuperbutton (expr pat, xpos, ypos, wid, hei) =
+
+ save p, ptop, pbot, t, b, edge, shift, width, height ;
+ path p, ptop, pbot ; pair t, b ; numeric edge, shift, width, height ;
+
+ edge := xpos + wid ; shift := ypos + hei ;
+
+ p := rightpath pat ;
+
+ ptop := ((-infinity,shift)--(edge,shift)) ;
+ pbot := ((-infinity,shift-hei)--(edge,shift-hei)) ;
+
+ t := p intersection_point ptop ;
+ b := p intersection_point pbot ;
+
+ p := subpath(0,xpart (p intersectiontimes ptop)) of p ;
+ p := subpath(xpart (p intersectiontimes pbot),length(p)) of p ;
+
+ (p -- t -- point 1 of ptop &
+ point 1 of ptop -- point 1 of pbot &
+ point 1 of pbot -- b
+ -- cycle)
+
+ enddef ;
+
+\stopuseMPgraphic
+
+%D Topics are identified with \type {\Topic}, which is an instance of chapter
+%D headings. The number is made invisible. Since it still is a numbered section
+%D header, \CONTEXT\ will write the header to the table of contents.
+
+\definehead
+ [Topic]
+ [chapter]
+
+\setuphead
+ [Topic]
+ [number=no]
+
+%D We will use a bold font in the table of contents. We also force a complete
+%D list.
+
+\setuplist
+ [Topic]
+ [criterium=all,
+ style=bold,
+ before=,
+ after=]
+
+%D The \type {\TitlePage} macro looks horrible, because we want to keep the
+%D interface simple: a list of small sentences, separated by \type {\\}.
+
+\unexpanded\def\StartTitlePage
+ {\startstandardmakeup
+ \switchtobodyfont[big]
+ \def\\{\vfill\bfb\let\\=\par}
+ \bfd\setupinterlinespace\gray
+ \vskip.5cm\relax}
+
+\unexpanded\def\StopTitlePage
+ {\\ % the \\ is really needed
+ \vskip.5cm\relax
+ \stopstandardmakeup}
+
+\unexpanded\def\TitlePage#1%
+ {\StartTitlePage#1\StopTitlePage}
+
+%D A couple of goodies:
+
+\unexpanded\def\Subject {\Topic}
+\unexpanded\def\Topics #1{}
+\unexpanded\def\Subjects {}
+
+\startsetups document:start
+ \StartTitlePage
+ \documentvariable{title}
+ \doifsomething {\documentvariable{subtitle}} {
+ \\
+ \documentvariable{subtitle}
+ }
+ \doifsomething {\documentvariable{location}} {
+ \\
+ \documentvariable{location}
+ }
+ \StopTitlePage
+\stopsetups
+
+\startsetups document:stop
+ %
+\stopsetups
+
+\stopmodule
+
+\continueifinputfile{s-present-organic.mkiv}
+
+\usemodule[present-common]
+
+\inputpresentationfile{examples/present-organic-001.tex}
+
diff --git a/tex/context/modules/mkiv/s-present-original.mkiv b/tex/context/modules/mkiv/s-present-original.mkiv
new file mode 100644
index 000000000..809f7b2cb
--- /dev/null
+++ b/tex/context/modules/mkiv/s-present-original.mkiv
@@ -0,0 +1,397 @@
+%D \module
+%D [ file=s-present-original, % was s-pre-01
+%D version=1997.07.22,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment Original,
+%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 environment can be used to typeset interactive presentations. This module
+%D was first used at the 1997 \TUG\ meeting. The \MKIV\ variant is mostly the same
+%D but we adapted the colors a bit.
+
+\usemodule[present-general]
+
+\startmodule[present-original]
+
+%D \macros
+%D {language}
+%D
+%D Because this module is defined in english, we default to the english hyphenation
+%D patterns and labels too. This is default anyway.
+
+\mainlanguage
+ [en]
+
+%D \macros
+%D {setupbodyfont,setuplayout}
+%D
+%D For screen reading, a Lucida Bright font looks nice. We use a 14.4 point bodyfont
+%D for the main text, but switch back to 12 points for ornaments.
+
+\doifelsemode {asintended} {
+ \setupbodyfont[ludicaot,14.4pt]
+} {
+ \setupbodyfont[pagella,14.4pt]
+}
+
+\setuplayout
+ [style=smallbodyfont]
+
+\setupalign
+ [tolerant,stretch]
+
+%D \macros
+%D {definecolor}
+%D
+%D Screen presentations without color just look dull, so we enable color support. We
+%D define ourselves a yellowish backgroundcolor and a not too dark blue
+%D interactioncolor.
+
+% \definecolor [BackgroundColor] [r=1, g=1, b=.7]
+% \definecolor [InteractionColor] [r=.1, g=.5, b=.8]
+% \definecolor [ContrastColor] [r=.9, g=.5, b=.2]
+
+\definecolor [BackgroundColor] [r=.7, g=.7, b=.3]
+\definecolor [InteractionColor] [r=.1, g=.5, b=.8]
+\definecolor [ContrastColor] [r=.9, g=.5, b=.2]
+
+%D \macros
+%D {setuppapersize,setuplayout,setupinteractionscreen}
+%D
+%D We use a nice large screen, and dedicate the right edge and bottom part to
+%D navigational tools. We automatically set the width and height of the page and
+%D start up full screen.
+
+\setuppapersize
+ [S6][S6]
+
+\setuplayout
+ [topspace=12pt,
+ header=0pt,
+ footer=0pt,
+ height=402pt, % 450 - 12 - 15 - 12 - 12 + 3
+ bottomdistance=15pt,
+ bottom=12pt,
+ backspace=12pt,
+ margin=0pt,
+ width=fit,
+ edgedistance=12pt,
+ rightedge=96pt]
+
+\setupinteractionscreen
+ [option=max]
+
+%D \macros
+%D {setupbackgrounds}
+%D
+%D We set the pagecolor to yellow except the part of the screen that is used to
+%D display the running text. By seting the offset to 3pt the text will not touch the
+%D yellow parts. We do not set the depth.
+
+\setupbackgrounds
+ [page]
+ [background=color,
+ backgroundcolor=BackgroundColor]
+
+\setupbackgrounds
+ [text][text]
+ [background=color,
+ backgroundcolor=white,
+ backgroundoffset=3pt]
+
+%D I considered the next setup too, but finaly decided to
+%D comment it out.
+%D
+%D \starttyping
+%D \setupbackgrounds
+%D [bottom][text]
+%D [frame=on,
+%D framecolor=white]
+%D \stoptyping
+
+%D \macros
+%D {setupinteraction}
+%D
+%D We did not enable interactive text support yet, so let's do that now. We force
+%D page reference to circumvent problems with named destinations in buggy viewers.
+
+\setupinteraction
+ [page=yes,
+ color=InteractionColor,
+ contrastcolor=ContrastColor,
+ menu=on,
+ state=start]
+
+%D \macros
+%D {setupinteractionmenu,startinteractionmenu}
+%D
+%D At the bottom of the screen we show two navigational bars. At the left we show
+%D the subpage bar, at the right we use a non default backward|/|forward bar.
+
+\setupinteractionmenu
+ [bottom]
+ [leftoffset=3pt,
+ rightoffset=3pt]
+
+\startinteractionmenu[bottom]
+ \startcom \InteractionBar \stopcom
+ \hfill
+ \startcom \InteractionButtons \stopcom
+\stopinteractionmenu
+
+%D \macros
+%D {interactionbar}
+%D
+%D The left bar gets a white border (on the yellow background). Because we don't
+%D want to typeset an empty frame when no subpage bar is shown, we check for the
+%D number of subpages.
+
+\unexpanded\def\InteractionBar
+ {\ifnum\nofsubpages>\plusone
+ \framed
+ [framecolor=white,
+ rulethickness=1pt,
+ height=\bottomheight,
+ strut=no]
+ {\interactionbar[alternative=f,width=.5\makeupwidth,height=1ex]}
+ \fi}
+
+%D \macros
+%D {setupinteractionbar, interactionbuttons}
+%D
+%D The right hand buttons enable us to jump backward and forward, as well as to the
+%D previous and next jump. We also enable to close the presentation.
+
+\setupinteractionbar
+ [framecolor=white,
+ rulethickness=1pt,
+ height=\bottomheight,
+ strut=no]
+
+\unexpanded\def\InteractionButtons
+ {\interactionbuttons
+ [width=15em,
+ framecolor=white,
+ rulethickness=1pt,
+ height=\bottomheight,
+ strut=no,
+ distance=.5em]
+ [PreviousJump,NextJump,
+ firstpage,
+ firstsubpage,previouspage,nextpage,lastsubpage,
+ lastpage,
+ CloseDocument]}
+
+%D \macros
+%D {StartTitlePage, TitlePage}
+%D
+%D The titlepage is rather simple and can be typeset in two ways:
+%D
+%D \starttyping
+%D \StartTitlePage
+%D text \\ text \\ text
+%D \StopTitlepage
+%D \stoptyping
+%D
+%D or more straightforward:
+%D
+%D \starttyping
+%D \TitlePage{text\\text\\text}
+%D \stoptyping
+%D
+%D The first alternative can be used for more complicated title pages.
+
+\unexpanded\def\StartTitlePage
+ {\startstandardmakeup
+ \bfd
+ \setupinterlinespace
+ \setupalign[middle]
+ \vfil
+ \let\\=\vfil}
+
+\unexpanded\def\StopTitlePage
+ {\vfil\vfil\vfil
+ \stopstandardmakeup}
+
+\unexpanded\def\TitlePage#1%
+ {\StartTitlePage#1\StopTitlePage}
+
+%D \macros
+%D {TitlePage, Topics, Topic, Subject}
+%D
+%D A presentation after loading this module looks like:
+%D
+%D \starttyping
+%D \TitlePage {About Whatever\\Topics}
+%D
+%D \Topics {Todays Talk}
+%D
+%D \Topic {Some topic}
+%D
+%D \Subject {Alfa}
+%D
+%D .....
+%D
+%D \Subject {Beta}
+%D
+%D .....
+%D \stoptyping
+
+%D \macros
+%D {definehead}
+%D
+%D The commands \type{\Topic} and \type{\Subject} are defined as copies of head. We
+%D use \type{\Nopic} for internal purposes.
+
+\definehead [Topic] [chapter]
+\definehead [Subject] [section]
+
+\definehead [Nopic] [title]
+
+%D \macros
+%D {setuphead}
+%D
+%D Because chapters and sections do not make sense in presentations, we use our own
+%D command for typesetting the titles. Sectionnumbers are of course hidden from
+%D viewing. Each topic is followed by a list of subjects that belong to the topic.
+
+\setuphead
+ [Topic,Nopic,Subject]
+ [command=\HeadLine,
+ page=yes,
+ style=\bfb,
+ after=\blank,
+ sectionnumber=no]
+
+\setuphead
+ [Topic]
+ [after=\PlaceSubjectList]
+
+\setuphead
+ [Subject]
+ [continue=no]
+
+%D \macros
+%D {framed, midalined}
+%D
+%D The command used to typeset the head lines is rather simple. We just center the
+%D framed title. The frame macro optimizes the alignment and at the same time
+%D enables us to typeset a nice colored rule.
+
+\unexpanded\def\HeadLine#1#2%
+ {\midaligned
+ {\framed
+ [framecolor=BackgroundColor,
+ rulethickness=1pt,
+ width=.8\hsize,
+ align=middle,
+ strut=no]
+ {#2}}}
+
+%D \macros
+%D {setuplist}
+%D
+%D The subject list is automatically placed. We center each subject line by using
+%D one of the default alternatives (g). We could have said:
+%D
+%D \starttyping
+%D \setuplist
+%D [Subject]
+%D [alternative=none,
+%D command=\SubjectListLine,
+%D interaction=all]
+%D
+%D \def\SubjectListLine#1#2#3%
+%D {\midaligned{#2}}
+%D \stoptyping
+%D
+%D But why should we complicate things when we can use alternative~\type{g}. The
+%D test is only needed if one does not automatically goes a new page with each
+%D subject.
+
+\unexpanded\def\PlaceSubjectList
+ {\blank
+ \determinelistcharacteristics[Subject]
+ \doifmode{*list}{\placelist[Subject]}}
+
+\setuplist
+ [Subject,Topic]
+ [alternative=g,
+ interaction=all,
+ before=,
+ after=]
+
+% %D \macros
+% %D {setuptexttexts}
+% %D
+% %D The topics will be listed in the right edge, using:
+%
+% \setuptexttexts
+% [edge]
+% [][\TopicList]
+
+%D \macros
+%D {setuplist, placelist,startinteractionmenu}
+%D
+%D The actual topic list is typeset using a \type{\vbox}. We have to specify
+%D \type{criteriumcriterium=all} because otherwise no list will be typeset. (By
+%D default lists are typeset locally.)
+
+\startinteractionmenu[right]
+ \placelist
+ [Topic]
+ [alternative=f, % command, % none,
+ maxwidth=\hsize,
+ width=\hsize,
+ offset=0pt,
+ criterium=all,
+ align=left,
+ style=\smallbodyfont\bfx]
+\stopinteractionmenu
+
+\unexpanded\def\Topics#1% temporary hack
+ {\Nopic{#1}
+ \placelist[Topic][criterium=all]}
+
+\unexpanded\def\Subjects
+ {}
+
+%D \macros
+%D {setupbackgrounds, overlaybutton}
+%D
+%D During a presentation, we want to use the cursor to point to parts of the text.
+%D Furthermore we want to be able to jump to the next page, without the need to move
+%D the cursor on buttons. Therefore we make the text part of the screen into an
+%D invisible button.
+%D
+%D In \MKII\ we put a button in he texttextsm here we just use an extra background.
+
+\defineoverlay[nextpage][\overlaybutton{nextpage}]
+
+\setupbackgrounds
+ [text][text]
+ [background={color,nextpage}]
+
+%D \macros
+%D {setupsubpagenumber}
+%D
+%D The left bottom navigation bar shows the subpages, which will be counted by text.
+%D One can change this in the preentation itself by saying \type {[way=byTopic]}.
+
+\setupsubpagenumber
+ [way=bytext, % byTopic,
+ state=start]
+
+\stopmodule
+
+\continueifinputfile{s-present-original.mkiv}
+
+\usemodule[present-common]
+
+\inputpresentationfile{examples/present-original-001.tex}
diff --git a/tex/context/modules/mkiv/s-present-ovals.mkiv b/tex/context/modules/mkiv/s-present-ovals.mkiv
new file mode 100644
index 000000000..45af6c823
--- /dev/null
+++ b/tex/context/modules/mkiv/s-present-ovals.mkiv
@@ -0,0 +1,94 @@
+%D \module
+%D [ file=s-present-ovals,
+%D version=2015.04.20,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment Ovals,
+%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 style was made for some of the font and language related presentations at
+%D Bacho\TeX\ 2015. It's a bit boring but it suits simple presentations. It provides
+%D no structure as each page content is kind of special.
+
+\startmodule[s-present-ovals]
+
+\setuppapersize[S6]
+
+\definecolor[maincolor] [darkred]
+\definecolor[othercolor][maincolor]
+
+\startuseMPgraphic{page}
+
+ fill Page enlarged 2mm withcolor .5[white,\MPcolor{othercolor}] ;
+
+ if NOfPages > 1 :
+
+ numeric PageFraction ; PageFraction := (RealPageNumber-1) / (NOfPages-1) ;
+ numeric WidthDelta ; WidthDelta := 2 * PaperWidth / 10 ;
+ numeric HeightDelta ; HeightDelta := 2 * PaperHeight / 10 ;
+ numeric WidthOffset ; WidthOffset := WidthDelta + PageFraction*(PaperWidth - 2WidthDelta ) ;
+ numeric HeightOffset ; HeightOffset := HeightDelta + PageFraction*(PaperHeight - 2HeightDelta) ;
+
+ fill
+ (ulcorner Page) shifted (WidthOffset,0) ..
+ (urcorner Page) shifted (0,-HeightOffset) ..
+ (lrcorner Page) shifted (-WidthOffset,0) ..
+ (llcorner Page) shifted (0,HeightOffset) ..
+ cycle withcolor \MPcolor{maincolor} ;
+
+ clip currentpicture to Page ;
+
+ fi ;
+
+\stopuseMPgraphic
+
+% e-mess has always been okay by definition which makes it easier to blame generators
+
+\defineoverlay
+ [page]
+ [\useMPgraphic{page}]
+
+\setupbackgrounds
+ [page]
+ [background=page]
+
+\setupalign
+ [middle,broad]
+
+\setupcolors
+ [textcolor=white]
+
+\setupbodyfont
+ [pagella,17.3pt]
+
+\setuplayout
+ [height=middle,
+ width=middle,
+ topspace=.05\paperheight,
+ backspace=.15\paperwidth,
+ header=0pt,
+ footer=0pt]
+
+\setupwhitespace
+ [line]
+
+\setuphead
+ [title]
+ [style=\bfb,
+ alternative=middle,
+ before=,
+ number=no]
+
+\stopmodule
+
+\continueifinputfile{s-present-ovals.mkiv}
+
+\usemodule[present-common]
+
+\inputpresentationfile{bachotex/2015/bachotex-2015-ligatures.tex}
+%inputpresentationfile{bachotex/2015/context-2015-status.tex}
diff --git a/tex/context/modules/mkiv/s-present-overlap.mkiv b/tex/context/modules/mkiv/s-present-overlap.mkiv
new file mode 100644
index 000000000..053455b4b
--- /dev/null
+++ b/tex/context/modules/mkiv/s-present-overlap.mkiv
@@ -0,0 +1,233 @@
+%D \module
+%D [ file=s-present-overlap, % was s-pre-62,
+%D version=2005.03.04,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment Overlap,
+%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.
+
+\usemodule[present-stepwise]
+
+\startmodule[present-overlap]
+
+\doifmodeelse {atpragma} {
+
+ \usetypescriptfile
+ [type-ghz]
+
+ \definetypeface[mainface][rm][serif][melior] [default][encoding=texnansi]
+ \definetypeface[mainface][tt][mono] [modern] [default][encoding=texnansi,rscale=1.05]
+ \definetypeface[mainface][ss][serif][melior] [default][encoding=texnansi]
+ \definetypeface[mainface][mm][math] [palatino][default][encoding=texnansi,rscale=0.95]
+
+ \setupbodyfont
+ [mainface,14.4pt]
+
+} {
+
+ \setupbodyfont[dejavu,14.4pt]
+
+}
+
+\setuppapersize
+ [S6][S6]
+
+\setvariables[layout][dx=0,dy=1,nx=2,ny=2,step=64]
+
+\definemeasure[layoutwd][\dimexpr\paperwidth /\getvariable{layout}{step}\relax]
+\definemeasure[layoutht][\dimexpr\paperheight/\getvariable{layout}{step}\relax]
+
+\setuplayout
+ [ width=middle,
+ height=middle,
+ header=0pt,
+ footer=0pt,
+ margin=0pt,
+ backspace=5\measured{layoutwd},
+ topspace=5\measured{layoutht}]
+
+\definelayout
+ [step]
+ [ backspace=\numexpr2+ \getvariable{layout}{dx}\relax\measured{layoutwd},
+ cutspace=\numexpr3+\getvariable{layout}{nx}-\getvariable{layout}{dx}\relax\measured{layoutwd},
+ topspace=\numexpr2+ \getvariable{layout}{dy}\relax\measured{layoutht},
+ bottomspace=\numexpr3+\getvariable{layout}{ny}-\getvariable{layout}{dy}\relax\measured{layoutht}]
+
+\definecolor[layout:left] [t=.5,a=1,b=1]
+\definecolor[layout:right] [t=.5,a=1,r=1]
+\definecolor[layout:top] [t=.5,a=1,g=1]
+\definecolor[layout:bottom][t=.5,a=1,y=1]
+\definecolor[layout:page] [s=.75]
+
+\definehspace[menu][\measured{layoutwd}]
+
+\setupinteraction
+ [state=start,
+ click=off,
+ style=,
+ color=interactioncolor,
+ contrastcolor=interactioncolor]
+
+\setupinteractionscreen
+ [option=max]
+
+\setupbuttons
+ [color=maincolor,
+ contrastcolor=maincolor,
+ style=\tf, % acceptable
+ height=2\measure{layoutht},
+ width=2\measure{layoutwd},
+ offset=overlay,
+ frame=off]
+
+\definecolor[interactioncolor][darkgray]
+\definecolor[maincolor] [lightgray]
+
+\setuptexttexts
+ []
+ [\vbox to \textheight{\vfill\hfill\setups{menu:content}}]
+
+\startsetups menu:content
+
+ \button{\symbol[firstpage]}[firstpage]
+ \hspace[menu]
+ \button{\symbol[previouspage]}[previouspage]
+ \hspace[menu]
+ \button{\StartBusy\symbol[PauseRendering]\StopBusy}[InvokeStepper]
+ \hspace[menu]
+ \button{\symbol[nextpage]}[nextpage]
+ \hspace[menu]
+ \button{\symbol[lastpage]}[lastpage]
+ \hspace[menu]
+ \button{\symbol[CloseDocument]}[CloseDocument]
+
+\stopsetups
+
+\startuseMPgraphic{page}{step}
+ StartPage ;
+ numeric dx ; dx := PaperWidth /\MPvar{step} ;
+ numeric dy ; dy := PaperHeight/\MPvar{step} ;
+ fill Page withcolor .5white ;
+ fill
+ ulcorner Page -- urcorner Page --
+ urcorner Page shifted (0,-TopSpace+dy) -- ulcorner Page shifted (0,-TopSpace+dy) -- cycle
+ withcolor "layout:top" ;
+ fill
+ llcorner Page -- lrcorner Page --
+ lrcorner Page shifted (0,BottomSpace-dy) -- llcorner Page shifted (0,BottomSpace-dy) -- cycle
+ withcolor "layout:bottom" ;
+ fill
+ ulcorner Page -- llcorner Page --
+ llcorner Page shifted (BackSpace-dx,0) -- ulcorner Page shifted (BackSpace-dx,0) -- cycle
+ withcolor "layout:left" ;
+ fill
+ urcorner Page -- lrcorner Page --
+ lrcorner Page shifted (-CutSpace+dx,0) -- urcorner Page shifted (-CutSpace+dx,0) -- cycle
+ withcolor "layout:right" ;
+ fill Field[Text][Text] enlarged (dx,dy) withcolor white ;
+ fill Field[Text][Text] enlarged (dx,dy) withcolor "layout:page" ;
+ StopPage ;
+\stopuseMPgraphic
+
+\defineoverlay[page][\useMPgraphic{page}{step=\getvariable{layout}{step}}]
+
+\setupbackgrounds
+ [page]
+ [background=page]
+
+\setupcolors
+ [state=start]
+
+\startsetups nextstep
+ % pagebreak handlers are grouped, so we need to set global
+ \ifnum\getvariable{layout}{dx}=\getvariable{layout}{nx}\relax
+ \ifnum\getvariable{layout}{dy}=\getvariable{layout}{ny}\relax
+ \setxvariables[layout][dy=1]
+ \else
+ \setxvariables[layout][dy=\the\numexpr\getvariable{layout}{dy}+1\relax]
+ \fi
+ \setxvariables[layout][dx=1]
+ \else
+ \setxvariables[layout][dx=\the\numexpr\getvariable{layout}{dx}+1\relax]
+ \fi
+ % global anyway
+ \setuplayout[step]
+\stopsetups
+
+\appendtoks
+ \definefont[ChapterTitleFont][SerifBold*default sa 2]
+ \NormalizeFontHeight \SubTitleFont {\setstrut\strut\quad} {3\lineheight} {SerifBold*default}
+ \NormalizeFontHeight \ChapterNumberFont {XVI} {4\lineheight} {SerifBold*default}
+\to \everystarttext
+
+\setupsection
+ [section-2]
+ [bodypartconversion=Romannumerals]
+
+\installpagebreakhandler {step} {\setups{nextstep}}
+
+\definepagebreak[chapter][yes,step]
+
+\setuphead
+ [chapter]
+ [page=chapter,
+ command=\MyChapterCommand,
+ after=\nowhitespace]
+
+\definehead[Topic][chapter]
+\definehead[Nopic][title]
+
+\setuphead[chapter,Topic,Nopic]
+ [numberstyle=\ChapterNumberFont,
+ textstyle=\ChapterTitleFont,
+ numbercolor=lightgray,
+ textcolor=darkgray]
+
+\unexpanded\def\MyChapterCommand#1#2%
+ {\hbox \bgroup % we need to nil the strut added by the headplacement
+ \setupframed[frame=off,lines=3,offset=overlay]%
+ \rlap{\hskip2\lineheight\framed{\setnostrut#1}}%
+ \framed{#2}%
+ \egroup}
+
+\setupitemize
+ [each]
+ [R,broad]
+ [stopper=,
+ color=lightgray]
+
+\startsetups document:start
+
+ \startstandardmakeup[headerstate=high,textstate=stop]
+
+ \setupalign[middle]
+
+ \vfil
+ \startcolor[darkgray]
+ \dontleavehmode\scale[width=.9\textwidth]{\bf\setstrut\strut\documentvariable{title}}
+ \vfil
+ \dontleavehmode\scale[width=.7\textwidth]{\bf\setstrut\strut\documentvariable{subtitle}}
+ \vfil \vfil \vfil
+ \dontleavehmode\scale[width=.5\textwidth]{\bf\setstrut\strut\documentvariable{location}}
+ \stopcolor
+ \vfil \vfil \vfil
+
+ \stopstandardmakeup
+
+\stopsetups
+
+\stopmodule
+
+\continueifinputfile{s-present-overlap.mkiv}
+
+\usemodule[present-common]
+
+\inputpresentationfile{context/2011/context-2011-mathml-update.tex}
+%\inputpresentationfile{context/2011/context-2011-metapost-how-we-adapt.tex}
+%\inputpresentationfile{context/2011/context-2011-ebook-export.tex}
+%\inputpresentationfile{context/2011/context-2011-sorting-registers.tex}
diff --git a/tex/context/modules/mkiv/s-present-phone.mkiv b/tex/context/modules/mkiv/s-present-phone.mkiv
new file mode 100644
index 000000000..d041ad822
--- /dev/null
+++ b/tex/context/modules/mkiv/s-present-phone.mkiv
@@ -0,0 +1,108 @@
+%D \module
+%D [ file=s-present-phone,
+%D version=2016.04.20, % or about
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment Phone,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D The theme of Bacho\TeX\ was \quote {Getting \TEX\ out of the closet}. And, as I'm
+%D always a bit sceptical about efforts to get a specialized toolbox like \TEX\
+%D accepted in a large scale generic user base, I decided to give a talk dedicated
+%D to Jerzy (the always optimistic organizer). (One can actually wonder if \TEX\ was
+%D ever hidden in a closet.) And, because I had to get the attention of some nephew
+%D and nieces I took there I gave the presentation without beamer but on my phone.
+%D On such a device one just swipes but I still added two buttons. Watch the small
+%D full|-|hd|-|ratio paper dimensions and 6 point font size.
+
+\startmodule[s-present-phone]
+
+\setupinteraction
+ [state=start]
+
+\definepapersize
+ [phone]
+ [width=108.0pt,
+ height=192.0pt]
+
+\definelayout
+ [phone]
+ [backspace=3pt,
+ topspace=6pt,
+ bottomspace=3pt,
+ header=0pt,
+ footer=0pt,
+ bottom=10pt,
+ bottomdistance=5pt,
+ height=fit,
+ width=middle]
+
+\setuplayout
+ [phone]
+
+\setuppapersize
+ [phone]
+
+\setupbodyfont
+ [dejavu,ss,6pt]
+
+\setupalign
+ [tolerant,flushleft]
+
+\setupbackgrounds
+ [page]
+ [background=color,
+ backgroundcolor=maincolor]
+
+\setupbackgrounds
+ [bottom]
+ [text]
+ [background=color,
+ backgroundcolor=othercolor,
+ backgroundoffset=\backspace]
+
+\definecolor[maincolor] [r=.7,g=.3,b=0]
+\definecolor[othercolor][r=0,g=.3,b=.7]
+
+\setupcolors
+ [textcolor=white]
+
+\setupinteraction
+ [menu=on,
+ color=white,
+ contrastcolor=white]
+
+\setupinteractionmenu
+ [bottom]
+ [state=start,
+ style=\ss\bf]
+
+\setupitemgroup
+ [itemize]
+ [inbetween={\blank[medium]}]
+
+\startinteractionmenu[bottom]
+ \startgot [previouspage] \textminus \stopgot
+ \starttxt \getmarking[section] \stoptxt
+ \startgot [nextpage] \textplus \stopgot
+\stopinteractionmenu
+
+\setuphead
+ [section]
+ [page=yes,
+ before=,
+ after={\blank[disable]},
+ placehead=empty]
+
+\stopmodule
+
+\continueifinputfile{s-present-phone.mkiv}
+
+\usemodule[present-common]
+
+\inputpresentationfile{bachotex/2016/bachotex-2016-toolbox.tex}
diff --git a/tex/context/modules/mkiv/s-present-punk.mkiv b/tex/context/modules/mkiv/s-present-punk.mkiv
new file mode 100644
index 000000000..346f7eae8
--- /dev/null
+++ b/tex/context/modules/mkiv/s-present-punk.mkiv
@@ -0,0 +1,158 @@
+%D \module
+%D [ file=s-present-punk,
+%D version=2008.04.15,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment Punk,
+%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[present-punk]
+
+%D At the cost of more runtime and a larger output file, we
+%D turn on randomization. The instances are cached in the
+%D MkIV cache, so successive runs use the same shapes.
+
+% \usemodule[punk] \usetypescript[punk] \setupbodyfont[punk,20pt]
+%
+% \EnableRandomPunk
+
+\setupbodyfont[punknova,20pt] % we now use the opentype variant
+
+%D We use the regular screen size paper and layout setup.
+
+\setuppapersize
+ [S6][S6]
+
+\setuplayout
+ [topspace=30pt,
+ backspace=30pt,
+ width=middle,
+ height=fit,
+ header=0pt,
+ footer=0pt,
+ bottomdistance=24pt,
+ bottom=30pt,
+ bottom=18pt,
+ top=0pt]
+
+\setupinterlinespace
+ [top=height,
+ line=1.25\bodyfontsize]
+
+\setupcolors
+ [state=start,
+ textcolor=white]
+
+\setupinteraction
+ [state=start,
+ %click=off,
+ menu=on]
+
+%D We predefine a few palets. Of course you can define more.
+
+\definecolor[punkblue] [r=.4,b=.8,g=.4]
+\definecolor[punkgreen] [r=.4,b=.4,g=.8]
+\definecolor[punkred] [r=.8,b=.4,g=.4]
+\definecolor[punkyellow][r=.6,g=.6,b=.2]
+
+\definepalet [punk-one] [textcolor=punkblue,pagecolor=punkgreen]
+\definepalet [punk-two] [textcolor=punkred,pagecolor=punkyellow]
+\definepalet [punk-three] [textcolor=punkblue,pagecolor=punkyellow]
+\definepalet [punk-one-reverse] [textcolor=punkgreen,pagecolor=punkblue]
+\definepalet [punk-two-reverse] [textcolor=punkyellow,pagecolor=punkred]
+\definepalet [punk-three-reverse] [textcolor=punkyellow,pagecolor=punkblue]
+
+\setuppalet[punk-one]
+
+%D We use a few backgrounds. The hyperlink that invokes the stepper is hooked
+%D into the text background.
+
+\definelayer
+ [page]
+ [width=\paperwidth,
+ height=\paperheight]
+
+\setupbackgrounds
+ [page]
+ [background={color,page},
+ backgroundcolor=pagecolor,
+ setups=pagestuff]
+
+\setupbackgrounds
+ [text]
+ [background={color,invoke},
+ backgroundoffset=12pt,
+ backgroundcolor=textcolor]
+
+%D We need different symbols for itemized lists.
+
+\definesymbol[1][\hbox{\lower1ex\hbox{*}}]
+\definesymbol[2][\endash]
+\definesymbol[3][\letterhash]
+\definesymbol[3][>]
+
+%D We don't want these reversed clicked areas in Acrobat.
+
+\setupinteraction
+ [click=no,
+ color=white, % pagecolor,
+ contrastcolor=white] % pagecolor,
+
+%D We define a rather simple navigational panel at the bottom
+
+\setupinteractionmenu
+ [bottom]
+ [color=white, % pagecolor,
+ contrastcolor=white, % pagecolor,
+ background=color,
+ backgroundcolor=textcolor,
+ frame=off,
+ height=24pt,
+ left=\hfill,
+ middle=\hskip12pt]
+
+\setupsubpagenumber
+ [state=start]
+
+\startinteractionmenu[bottom]
+ \starttxt
+ \interactionbar
+ [alternative=d,
+ symbol=yes,
+ color=white,
+ contrastcolor=textcolor]
+ \stoptxt
+ \hfilll
+ \startbut [previouspage] < < < \stopbut
+ \startbut [nextpage] > > > \stopbut
+\stopinteractionmenu
+
+%D Instead of the normal symbols we use more punky ones.
+
+\startsymbolset [punk]
+ \definesymbol[previous] [\string<\string<]
+ \definesymbol[somewhere] [\string^\string^]
+ \definesymbol[next] [\string>\string>]
+\stopsymbolset
+
+\setupinteraction
+ [symbolset=punk]
+
+%D Because the font is rather large, we use less whitespace.
+
+\setuphead
+ [chapter]
+ [after={\blank[big]}]
+
+\stopmodule
+
+\continueifinputfile{s-present-punk.mkiv}
+
+\usemodule[present-common]
+
+\inputpresentationfile{examples/present-punk-001.tex}
diff --git a/tex/context/modules/mkiv/s-present-random.lua b/tex/context/modules/mkiv/s-present-random.lua
new file mode 100644
index 000000000..f32d7aaea
--- /dev/null
+++ b/tex/context/modules/mkiv/s-present-random.lua
@@ -0,0 +1,66 @@
+if not modules then modules = { } end modules ['present-random'] = {
+ version = 1.001,
+ comment = "companion to s-present-random.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- For the moment we keep the namespace steps because it can become some
+-- shared module some day.
+
+moduledata.steps = moduledata.steps or { }
+local steps = moduledata.steps
+
+local locations = {
+ 'lefttop',
+ 'middletop',
+ 'righttop',
+ 'middleleft',
+ 'middle',
+ 'middleright',
+ 'leftbottom',
+ 'middlebottom',
+ 'rightbottom',
+}
+
+local done, current, previous, n
+
+function steps.reset_locations()
+ done, current, previous, n = table.tohash(locations,false), 0, 0, 0
+end
+
+function steps.next_location(loc)
+ previous = current
+ n = n + 1
+ loc = loc and loc ~= "" and tonumber(loc)
+ while true do
+ current = loc or math.random(1,#locations)
+ if not done[current] then
+ done[current] = true
+ break
+ end
+ end
+end
+
+function steps.current_location()
+ context(locations[current] or "")
+end
+
+function steps.previous_location()
+ context(locations[previous] or "")
+end
+
+function steps.current_n()
+ context(current)
+end
+
+function steps.previous_n()
+ context(previous)
+end
+
+function steps.step()
+ context(n)
+end
+
+steps.reset_locations()
diff --git a/tex/context/modules/mkiv/s-present-random.mkiv b/tex/context/modules/mkiv/s-present-random.mkiv
new file mode 100644
index 000000000..5744241fc
--- /dev/null
+++ b/tex/context/modules/mkiv/s-present-random.mkiv
@@ -0,0 +1,215 @@
+%D \module
+%D [ file=s-present-random,
+%D version=2008.08.05, % updated 2016.10.20
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment Random,
+%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[present-random]
+
+%D Unfortunately there are not that many viewers that support javascript
+%D control over layers.
+
+% \enablemode[numbers]
+% \enablemode[paper]
+% \usemodule[present-stepwise]
+
+\registerctxluafile{s-present-random}{}
+
+\setupinteraction
+ [state=start,
+ click=off]
+
+\definepapersize
+ [wide]
+ [width=900pt,
+ height=600pt]
+
+\setuppapersize
+ [wide]
+ [wide]
+
+\setuplayout
+ [page]
+
+\setupsorting
+ [logo]
+ [style=]
+
+\startnotmode[paper]
+
+ \setupbackgrounds
+ [page]
+ [background=color,
+ backgroundcolor=black]
+
+\stopnotmode
+
+\definelayer
+ [page]
+ [width=\paperwidth,
+ height=\paperheight]
+
+\definecolor[TopicColor-1][r=.3,g=.4,b=.5]
+\definecolor[TopicColor-2][r=.3,g=.5,b=.4]
+\definecolor[TopicColor-3][r=.4,g=.3,b=.5]
+\definecolor[TopicColor-4][r=.4,g=.5,b=.3]
+\definecolor[TopicColor-5][r=.5,g=.3,b=.4]
+\definecolor[TopicColor-6][r=.5,g=.4,b=.3]
+\definecolor[TopicColor-7][r=.35,g=.35,b=.6]
+\definecolor[TopicColor-8][r=.6,g=.35,b=.35]
+\definecolor[TopicColor-9][r=.35,g=.6,b=.35]
+
+\definecolor[TopicColor-0][t=.5,a=1,s=.5]
+\definecolor[TopicColor] [s=1]
+
+\setupcolors
+ [textcolor=TopicColor]
+
+\starttexdefinition unexpanded StartTopics
+ \doifelsemode {paper} {
+ \disablemode[stepper]
+ \enablemode[onepagestepper]
+ } {
+ \doifelsedefined {NextStep} {
+ \enablemode[stepper]
+ \disablemode[onepagestepper]
+ } {
+ \disablemode[stepper]
+ \disablemode[onepagestepper]
+ }
+ }
+ \doifelsemode {onepagestepper} {
+ \startstandardmakeup[top=,bottom=\vfill]
+ } {
+ \setuplayer[state=repeat]
+ \resetlayer[page]
+ }
+ \ctxlua{moduledata.steps.reset_locations()}
+ \doifmode {interactivestepper} {
+ \StartLocalSteps
+ }
+\stoptexdefinition
+
+\starttexdefinition unexpanded StopTopics
+ \doifmode {interactivestepper} {
+ \StopLocalSteps
+ }
+ \doifelsemode {onepagestepper} {
+ \flushlayer[page]
+ \stopstandardmakeup
+ } {
+ \resetlayer[page]
+ }
+\stoptexdefinition
+
+\starttexdefinition unexpanded StartTopic
+ \dosingleempty\doStartTopic
+\stoptexdefinition
+
+\starttexdefinition unexpanded doStartTopic [#1]
+ \doifmode {interactivestepper} {
+ \NextStep
+ }
+ \ctxlua{moduledata.steps.next_location("#1")}
+ \doifmode {paper} {
+ \doifnothing {#1} {
+ \ifcase\ctxlua{moduledata.steps.previous_n()}\else
+ \setlayer
+ [page]
+ [preset=\ctxlua{moduledata.steps.previous_location()}]
+ \bgroup
+ \doifmode {interactivestepper} {
+ \startviewerlayer[\StepLayer]
+ }
+ \framed
+ [offset=20pt,
+ strut=no,
+ align=normal,
+ frame=off,
+ height=\dimexpr\paperheight/3\relax,
+ width=\dimexpr\paperwidth/3\relax,
+ background=color,
+ backgroundcolor=TopicColor-0]
+ {}
+ \doifmode {interactivestepper} {
+ \stopviewerlayer
+ }
+ \egroup
+ \fi
+ }
+ }
+ \setlayer
+ [page]
+ [preset=\ctxlua{moduledata.steps.current_location()}]
+ \bgroup
+ \doifmode {interactivestepper} {
+ \startviewerlayer[\StepLayer]
+ }
+ \framed
+ [offset=20pt,
+ strut=no,
+ align=\expdoifelse{#1}{}{normal}{middle,lohi},
+ align=\expdoifelse{#1}{}{flushleft,verytolerant}{middle,lohi},
+ frame=off,
+ height=\dimexpr\paperheight/3\relax,
+ width=\dimexpr\paperwidth/3\relax,
+ background=color,
+ backgroundcolor=TopicColor-\ctxlua{moduledata.steps.current_n()}]
+ \bgroup
+ \ignorespaces
+\stoptexdefinition
+
+\starttexdefinition unexpanded StopTopic
+ \removeunwantedspaces
+ \egroup
+ \doifmode {interactivestepper} {
+ \stopviewerlayer
+ }
+ \egroup
+ \doifmode {numbers} {
+ \setlayerframed
+ [page]
+ [preset=\ctxlua{moduledata.steps.current_location()}]
+ [height=\dimexpr\paperheight/3\relax,
+ width=\dimexpr\paperwidth/3\relax,
+ frame=off,
+ foregroundstyle=\bfa,
+ align={flushright,low}]
+ \bgroup
+ \doifmode {interactivestepper} {
+ \startviewerlayer[\StepLayer]
+ }
+ \ctxlua{moduledata.steps.step()}\kern\strutdepth
+ \doifmode {interactivestepper} {
+ \stopviewerlayer
+ }
+ \egroup
+ }
+ \doifnotmode {onepagestepper} {
+ \startstandardmakeup[top=,bottom=\vfill]
+ \flushlayer[page]
+ \stopstandardmakeup
+ }
+\stoptexdefinition
+
+\definefont[TitleFont][SansBold*default at 60pt]
+\definefont[TempFont] [SansBold*default at 12pt]
+
+\let\StartText\starttext % for old times sake
+\let\StopText \stoptext % for old times sake
+
+\stopmodule
+
+\continueifinputfile{s-present-random.mkiv}
+
+\usemodule[present-common]
+
+\inputpresentationfile{examples/present-random-001.tex}
+
diff --git a/tex/context/modules/mkiv/s-present-shaded.mkiv b/tex/context/modules/mkiv/s-present-shaded.mkiv
new file mode 100644
index 000000000..df6ab9c5c
--- /dev/null
+++ b/tex/context/modules/mkiv/s-present-shaded.mkiv
@@ -0,0 +1,161 @@
+%D \module
+%D [ file=s-present-shaded,
+%D version=2014.04.30,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment Shaded 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.
+
+%D As usual, this style was made for a Bacho\TeX\ conference. It doesn't do anything
+%D special apart from progressively changing the shaded backgrounds. You can
+%D redefine the colors \type {maincolor} and \type {othercolor} to suit your taste.
+
+\startmodule[present-shaded]
+
+\setuppapersize[S6]
+
+\setuplayout
+ [cutspace=120pt,
+ rightmargin=100pt,
+ margindistance=10pt,
+ rightmargin=0pt,
+ margindistance=0pt,
+ rightedge=100pt,
+ edgedistance=12.5pt,
+ backspace=10pt,
+ topspace=10pt,
+ bottomspace=10pt,
+ header=0pt,
+ footer=0pt,
+ width=middle,
+ height=middle]
+
+\setupbodyfont
+ [dejavu]
+
+\setuplist
+ [chapter]
+ [before=,
+ after=,
+ inbetween=\vskip5pt,
+ inbetween=\vfill,
+ alternative=e,
+ width=\hsize,
+ height=\measure{menu-item-height},
+ style=bold,
+ frame=off,
+ background=color,
+ backgroundcolor=\structurelistuservariable{color},
+ criterium=text]
+
+\setupcolors
+ [textcolor=white]
+
+\setupinteraction
+ [state=start,
+ menu=on,
+ color=white,
+ click=off,
+ contrastcolor=white]
+
+\setupinteractionmenu
+ [right]
+ [topoffset=5pt,
+ bottomoffset=5pt]
+
+\startinteractionmenu[right]
+ \placelist[chapter]
+\stopinteractionmenu
+
+\definecolor[maincolor] [b=.4]
+\definecolor[othercolor][s=.4]
+
+\definecolor[verydark][s=.2]
+\definecolor[lessdark][1.5(verydark)]
+
+% we need some extra counter values: \getstructurenumber{self}
+
+\setupmodule
+ [n=\the\numexpr\lastpage-\plusone\relax]
+
+\appendtoks
+ \dorecurse {\moduleparameter{present-shaded}{n}} {
+ \definecolor[shade:#1][\luaexpr{.8*#1/\moduleparameter{present-shaded}{n}}(maincolor,othercolor)]
+ }
+\to \everystarttext
+
+\setupbackgrounds
+ [page]
+ [background=color,
+ backgroundoffset=5pt,
+ backgroundcolor=verydark]
+
+\setupbackgrounds
+ [text]
+ [background={invoke,color},
+ backgroundoffset=5pt,
+ backgroundcolor=\namedstructureuservariable{chapter}{color}]
+
+\definemeasure
+ [menu-item-height]
+ [(\textheight-\numexpr\moduleparameter{present-shaded}{n}-1\relax\dimexpr5pt\relax)/\moduleparameter{present-shaded}{n}]
+
+\setupitemgroup
+ [itemize]
+ [packed]
+
+\setuphead
+ [chapter]
+ [number=no,
+ style=\bfc]
+
+\setuphead
+ [section]
+ [number=no,
+ style=\bf,
+ before=\blank,
+ after=\blank]
+
+\setupdocument
+ [title=Title,
+ subtitle=Subtitle,
+ location=\currentdate]
+
+\startsetups document:start
+
+ \setupbackgrounds
+ [text]
+ [backgroundcolor=lessdark]
+
+ \startstandardmakeup
+
+ \setupalign[middle]
+
+ \vfil
+ \dontleavehmode \scale[width=.8\textwidth] {\documentvariable{title}}
+ \vfil
+ \dontleavehmode \scale[width=.6\textwidth] {\documentvariable{subtitle}}
+ \vfil \vfil \vfil
+ \dontleavehmode \scale[width=.4\textwidth] {\documentvariable{location}}
+ \vfil
+
+ \stopstandardmakeup
+
+ \setupbackgrounds
+ [text]
+ [backgroundcolor=\namedstructureuservariable{chapter}{color}]
+
+\stopsetups
+
+\stopmodule
+
+\continueifinputfile{s-present-shaded.mkiv}
+
+\usemodule[present-common]
+
+\inputpresentationfile{examples/present-shaded-001.tex}
diff --git a/tex/context/modules/mkiv/s-present-simple.mkiv b/tex/context/modules/mkiv/s-present-simple.mkiv
new file mode 100644
index 000000000..4fadf1f9f
--- /dev/null
+++ b/tex/context/modules/mkiv/s-present-simple.mkiv
@@ -0,0 +1,151 @@
+%D \module
+%D [ file=s-present-simple, % was: s-pre-68,
+%D version=2009.08.28,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment Simple,
+%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.
+
+\usemodule[present-stepwise]
+
+\startmodule[present-simple]
+
+% style
+
+\setuppapersize
+ [S66][S66]
+
+\setuplayout
+ [height=middle,
+ width=middle,
+ header=0pt,
+ footer=0pt,
+ backspace=2cm,
+ topspace=2cm]
+
+\setupinteraction
+ [state=start,
+ click=no]
+
+\definecolor[maincolor][r=.4]
+
+\startreusableMPgraphic{page}
+ StartPage ;
+ fill Page enlarged 5mm withcolor "maincolor" ;
+ StopPage ;
+\stopreusableMPgraphic
+
+\startreusableMPgraphic{next}
+ fill ultriangle scaled .15PaperWidth withcolor white ;
+\stopreusableMPgraphic
+
+\startreusableMPgraphic{last}
+ fill boundingbox(ultriangle scaled .15PaperWidth) withcolor white ;
+\stopreusableMPgraphic
+
+\startuniqueMPgraphic{bullit}
+ fill ultriangle scaled 2ExHeight withcolor white ;
+\stopuniqueMPgraphic
+
+\definelayer
+ [extra]
+ [width=\paperwidth,
+ height=\paperheight]
+
+\defineoverlay
+ [page]
+ [\reuseMPgraphic{page}]
+
+\setupbackgrounds
+ [page]
+ [background={page,extra}]
+
+\setupcolors
+ [state=start,
+ textcolor=white]
+
+\setuphead
+ [chapter]
+ [style=\bfc]
+
+\definehead
+ [Title]
+ [title]
+
+\definesymbol
+ [MyBullet]
+ [\uniqueMPgraphic{bullit}]
+
+\setupitemgroup
+ [itemize]
+ [each]
+ [symbol=MyBullet]
+
+\doifelsemode {asintended,atpragma} {
+ \setupbodyfont[cambria,14.4pt]
+} {
+ \setupbodyfont[pagella,14.4pt]
+}
+
+% interface
+
+\unexpanded\def\StartItems
+ {\begingroup
+ \StartSteps
+ \startitemize
+ \unexpanded\def\StartItems{\startitemize\unexpanded\def\StopItems{\stopitemize}}}
+
+\unexpanded\def\StopItems
+ {\FlushStep
+ \stopitemize
+ \NextPageSymbol
+ \StopSteps
+ \endgroup}
+
+\unexpanded\def\Item
+ {\unexpanded\def\Item{\FlushStep\item}
+ \item}
+
+\unexpanded\def\NextPageSymbol
+ {\setlayer
+ [extra]
+ [preset=rightbottom,offset=2mm]
+ {\ifnum\realpageno=\lastpage\relax
+ \reuseMPgraphic{last}%
+ \else\ifnum\realpageno>\plusone
+ \reuseMPgraphic{next}%
+ \fi\fi
+ \FlushStep}}
+
+\unexpanded\def\TitlePage#1#2%
+ {\startstandardmakeup[bottom=,top=]
+ \scale[width=\textwidth]{\framed[align=flushleft,foregroundstyle=\bf,frame=off]{#1}}
+ \vfilll
+ \hfill\scale[width=.5\textwidth]{\framed[align=flushright,foregroundstyle=\bf,frame=off]{#2}}
+ \stopstandardmakeup}
+
+\unexpanded\def\StartTopic#1%
+ {\Title{#1}}
+
+\unexpanded\def\StopTopic
+ {\page}
+
+\startsetups document:start
+ \TitlePage
+ {\documentvariable{title}}
+ {\documentvariable{author}\\
+ \documentvariable{location}}
+\stopsetups
+
+\stopmodule
+
+\continueifinputfile{s-present-simple.mkiv}
+
+\usemodule[present-common]
+
+\inputpresentationfile{examples/present-simple-001.tex}
diff --git a/tex/context/modules/mkiv/s-present-slanted.mkiv b/tex/context/modules/mkiv/s-present-slanted.mkiv
new file mode 100644
index 000000000..a68e0cd8e
--- /dev/null
+++ b/tex/context/modules/mkiv/s-present-slanted.mkiv
@@ -0,0 +1,206 @@
+%D \module
+%D [ file=s-present-slanted, % was: s-pre-64,
+%D version=2006.05.11,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment Slanted,
+%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 style is kept as reference (but can be usedof course). It was used at the
+%D TUG conference in San Diego in 2007 (the very early days if \LUATEX\ and \MKIV).
+%D
+%D This was one of he four presentations, each with a different style. The other
+%D styles were quite ok but I just lack time (ane motivation) to generalize them,
+
+\usemodule[s][pre-60]
+
+\newcounter\shapesynctag
+\newdimen \slantedshapedimen
+\newdimen \slantedshapestep
+\newdimen \slantedshapeleftskip
+\newdimen \slantedshapeoffset
+\newdimen \slantedshapeextra
+\newdimen \slantedshapedelta
+
+\positioningtrue
+
+\unexpanded\def\AdaptShape
+ {\doglobal\increment\shapesynctag
+ \getnoflines\textheight
+ \slantedshapestep\dimexpr\slantedshapeleftskip/\noflines\relax
+ \leftskip\slantedshapeleftskip
+ \scratchdimen\dimexpr
+ \MPy{text:\MPp\shapesynctag}
+ +\MPh{text:\MPp\shapesynctag}
+ -\topskip
+ -\MPy\shapesynctag
+ +\slantedshapeextra
+ \relax
+ \getnoflines\scratchdimen
+ \slantedshapedimen \noflines \slantedshapestep
+ \scratchtoks\emptytoks
+ \dorecurse{30}
+ {\appendetoks
+ \the\dimexpr
+ -\slantedshapedimen
+ +\slantedshapeoffset
+ +\slantedshapedelta
+ \relax
+ \space
+ \the\dimexpr
+ \hsize
+ -2\slantedshapeoffset
+ \relax
+ \space
+ \to\scratchtoks
+ \advance\slantedshapedimen \slantedshapestep}%
+ \parshape 30 \the\scratchtoks
+ \strut\xypos\shapesynctag}
+
+\setuppapersize[S6][S6]
+
+\setupinteraction
+ [state=start,
+ click=no]
+
+\setupinteractionscreen
+ [option=max]
+
+\setuplayout
+ [backspace=12pt,
+ topspace=24pt,
+ height=middle,
+ width=middle,
+ header=0pt,
+ footer=0pt]
+
+\definecolor[maincolor][b=.5]
+\definecolor[somecolor][g=.5]
+\definecolor[morecolor][r=.5]
+
+\setupcolors
+ [textcolor=maincolor]
+
+\setupbodyfont
+ [pagella]
+
+\setupbackgrounds
+ [text]% [text]
+ [background={base,text,invoke}]
+
+\definelayer
+ [text]
+ [width=\textwidth,
+ height=\textheight]
+
+\definelayer
+ [base]
+ [width=\textwidth,
+ height=\textheight]
+
+\definetype [epet] [style=,color=morecolor]
+\setuptype [style=,color=somecolor]
+\slantedshapeleftskip150pt
+\slantedshapeoffset 12pt
+\slantedshapeextra 10pt
+
+\startreusableMPgraphic{page}
+ StartPage ;
+ fill Page withcolor \MPcolor{maincolor} ;
+ path p ; p := Field[Text][Text] enlarged 6pt ;
+ p :=
+ llcorner p shifted (0,-12pt) --
+ lrcorner p shifted (-150pt,0) --
+ urcorner p shifted (0,12pt) --
+ ulcorner p shifted (150pt,0) --
+ cycle ;
+ fill p
+ withcolor .9white ;
+ StopPage ;
+\stopreusableMPgraphic
+
+\defineoverlay
+ [page]
+ [\reuseMPgraphic{page}]
+
+\setupbackgrounds
+ [page]
+ [background=page]
+
+\setupalign
+ [flushleft]
+
+\unexpanded\def\StartItem
+ {\blank[line]
+ \begingroup
+ \EveryPar {\AdaptShape}} % beware: \ABBREV aan begin gaat fout
+
+\unexpanded\def\StopItem
+ {\endgraf
+ \endgroup
+ \blank[line]}
+
+\unexpanded\def\StartType
+ {\blank[halfline]
+ \begingroup
+ \EveryPar {\AdaptShape}
+ \dontleavehmode \quad}
+
+\unexpanded\def\StopType
+ {\endgraf
+ \endgroup
+ \blank[halfline]}
+
+\unexpanded\def\StartTopic#1%
+ {\page
+ \setlayer
+ [text]
+ [preset=lefttop,
+ rotation=90]
+ {\color[white]{\scale[height=24pt]{\strut#1}}}}
+
+\unexpanded\def\StopTopic
+ {\page}
+
+\startsetups document:start
+ \ifdefined\TitleFont \else
+ \definedfont[TitleFont][Bold*default sa 4]
+ \fi
+ \ifdefined\MainTextFont
+ \MainTextFont
+ \fi
+ \Banner{\documentvariable{location}}
+ \StartTopic{\documentvariable{author}}
+ \startstandardmakeup
+ \TitleFont
+ \setupinterlinespace[line=3ex]
+ \vfill
+ \def\docommand##1{\StartItem\dontleavehmode\quad{\morecolor##1}\StopItem}
+ \processcommacommand[\documentvariable{title}]\docommand
+ \vfill
+ \stopstandardmakeup
+ \StopTopic
+\stopsetups
+
+\startsetups document:stop
+\stopsetups
+
+\unexpanded\def\Banner#1%
+ {\setuplayer
+ [base]
+ [state=repeat]
+ \setlayer
+ [base]
+ [preset=rightbottom]
+ {\color[white]{\scale[height=9pt]{\strut#1}}}}
+
+\continueifinputfile{s-present-slanted.mkiv}
+
+\usemodule[present-common]
+
+\inputpresentationfile{tug/2007/tug-2007-fonts.tex}
diff --git a/tex/context/modules/mkiv/s-present-split.mkiv b/tex/context/modules/mkiv/s-present-split.mkiv
new file mode 100644
index 000000000..48be7ca81
--- /dev/null
+++ b/tex/context/modules/mkiv/s-present-split.mkiv
@@ -0,0 +1,191 @@
+%D \module
+%D [ file=s-present-split, % s-pre-14,
+%D version=1999.08.20,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment Split,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D In the process of making a couple of simple styles for \EUROTEX\ 99, I came to
+%D this one. The joke is in the pagenumber. This style can be used for short
+%D presentations with much text.
+
+\startmodule[present-split]
+
+\startmode[asintended,atpragma] \setupbodyfont[lucidaot] \stopmode
+
+\setupbodyfont[14.4pt]
+
+%D Since we expect text, we can best be very tolerant.
+
+\setuptolerance
+ [verytolerant,stretch]
+
+%D As most styles we choose a large screen page size.
+
+\setuppapersize
+ [S6][S6]
+
+\setuplayout
+ [width=fit,
+ rightedge=3cm,
+ margin=0pt,
+ rightedgedistance=2cm,
+ height=middle,
+ header=0pt,
+ footer=0pt,
+ topspace=1cm,
+ backspace=1cm]
+
+%D We only use two colors, named \type {ColorOne} and \type {ColorTwo}:
+
+\definecolor [ColorOne] [r=.6,g=.4,b=.4]
+\definecolor [ColorTwo] [r=.4,g=.6,b=.6]
+
+%D If you've looked at the demo file, you will have noticed that the background
+%D consists of four pieces: two filled rectangles and two half numbers. In older
+%D versions these are put on the page using four overlays, here we use a much
+%D cleaner implementation is the following. If you hate \METAPOST, you can run
+%D this style in the specified mode:
+
+\setupbackgrounds
+ [page]
+ [background={number}]
+
+\defineoverlay[number][\useMPgraphic{number}]
+
+\startuseMPgraphic{number}
+ StartPage ;
+ picture Left, Right ;
+ numeric Shift ; Shift := -TextWidth - BackSpace - RightEdgeDistance/2 ;
+ fill Page withcolor "ColorOne" ;
+ fill Page leftenlarged Shift withcolor "ColorTwo" ;
+ if RealPageNumber > 1 :
+ Left := Right := textext("\bf\folio") ysized 3cm ;
+ clip Right to boundingbox Right shifted ( bbwidth(Right)/2,0) ;
+ clip Left to boundingbox Left shifted (-bbwidth(Left) /2,0) ;
+ draw Left shifted (-Shift,2.25cm) withcolor "ColorTwo" ;
+ draw Right shifted (-Shift,2.25cm) withcolor "ColorOne" ;
+ fi ;
+ StopPage ;
+\stopuseMPgraphic
+
+%D We use the simple label typesetting present in \METAPOST\ because digits are
+%D seldom kerned so real \TEX ing is not needed. As in the previous method, we let
+%D the graphics overlap so that we don't get white lines due to rounding problems in
+%D viewers.
+%D
+%D We put a button behind the text (this overlay is calculated each page).
+
+\defineoverlay
+ [nextpage]
+ [\overlaybutton{nextpage}]
+
+\setupbackgrounds
+ [text]
+ [backgroundoffset=.5cm,
+ background=nextpage]
+
+%D We still have to turn on interaction mode.
+
+\setupinteraction
+ [state=start,
+ display=new,
+ menu=on]
+
+\setupinteraction
+ [color=,
+ contrastcolor=]
+
+%D Next we define structuring commands.
+
+\definehead[Topic] [chapter] \setuphead[Topic] [style=\bfc]
+\definehead[Subject][section] \setuphead[Subject][style=\bfa]
+
+\setuphead
+ [Topic,Subject]
+ [number=no,
+ after={\blank[big]}]
+
+%D Because we will provide a menu, we don't offer lists.
+
+\let\Topics \gobbleoneargument
+\let\Subjects\relax
+
+%D The table of contents goes to the right edge.
+
+\startinteractionmenu[right]
+ \setupinteraction
+ [color=black,
+ contrastcolor=Two]
+ \placelist
+ [Topic]
+ [alternative=e,
+ frame=off,
+ criterium=all]
+ \vfill
+\stopinteractionmenu
+
+\setuplist
+ [Topic]
+ [width=\rightedgewidth,
+ maxwidth=\rightedgewidth,
+ style=\bfa]
+
+%D We safe some space:
+
+\setupwhitespace
+ [medium]
+
+\setupblank
+ [medium]
+
+%D In the titlepage, we still use the \TEX\ overlays, so that we don't have to
+%D define a second graphic.
+
+\unexpanded\def\TitlePage#1%
+ {\StartTitlePage#1\StopTitlePage}
+
+\unexpanded\def\StartTitlePage
+ {\startstandardmakeup
+ \setupalign[middle]
+ \unexpanded\def\\{\vfil\bfb\setupinterlinespace}
+ \bfd\setupinterlinespace
+ \vfil}
+
+\unexpanded\def\StopTitlePage
+ {\vfil\vfil\vfil
+ \stopstandardmakeup}
+
+\startsetups document:start
+ \StartTitlePage
+ \documentvariable{title}
+ \doifsomething {\documentvariable{subtitle}} {
+ \\
+ \documentvariable{subtitle}
+ }
+ \doifsomething {\documentvariable{location}} {
+ \\
+ \documentvariable{location}
+ }
+ \StopTitlePage
+\stopsetups
+
+\startsetups document:stop
+ %
+\stopsetups
+
+\stopmodule
+
+%D This is it.
+
+\continueifinputfile{s-present-split.mkiv}
+
+\usemodule[present-common]
+
+\inputpresentationfile{examples/present-split-001.tex}
diff --git a/tex/context/modules/mkiv/s-present-stack.mkiv b/tex/context/modules/mkiv/s-present-stack.mkiv
new file mode 100644
index 000000000..4cc75404f
--- /dev/null
+++ b/tex/context/modules/mkiv/s-present-stack.mkiv
@@ -0,0 +1,194 @@
+%D \module
+%D [ file=s-present-stack, % was s-pre-11
+%D version=1999.08.20,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment Stack,
+%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[present-stack]
+
+%D This is ancient but shows a few tricks so we keep it around in \MKIV\
+%D anyway.
+
+\setuppapersize
+ [S6][S6]
+
+\setuplayout
+ [topspace=0cm,
+ backspace=0cm,
+ header=0pt,
+ footer=0pt,
+ width=middle,
+ height=middle]
+
+\doifelsemode {asintended} {
+ \setupbodyfont[ludicaot,14.4pt]
+} {
+ \setupbodyfont[pagella,14.4pt]
+}
+
+\setupinteraction
+ [click=no,
+ display=new,
+ state=start]
+
+\setupinteractionscreen
+ [option=max]
+
+\unexpanded\def\SomeShape
+ {\resetMPdrawing
+ \startMPdrawing
+ path p[], q[] ; pair a, b ;
+ StartPage ;
+ \stopMPdrawing
+ \dorecurse{\CurrentTopic}
+ {\startMPdrawing
+ initialize_box(\MPpos{topic-\realfolio-\recurselevel}) ;
+ p[\recurselevel] := tensecircle (wxy,hxy,.25cm) shifted cxy ;
+ fill p[\recurselevel] withcolor .9white ;
+ pickup pencircle scaled .25cm ;
+ if \recurselevel = \CurrentTopic :
+ draw p[\recurselevel] withcolor \MPcolor{ShowColor} ;
+ else :
+ draw p[\recurselevel] withcolor \MPcolor{DoneColor} ;
+ fi ;
+ \stopMPdrawing}%
+ \dorecurse{\CurrentMaxItem}
+ {\startMPdrawing
+ initialize_box(\MPpos{item-\realfolio-\recurselevel}) ;
+ linewidth := .25cm ;
+ q[\recurselevel] := tensecircle (wxy,hxy,linewidth) shifted cxy ;
+ fill q[\recurselevel] withcolor .9white ;
+ pickup pencircle scaled linewidth ;
+ if \recurselevel = \CurrentMaxItem :
+ draw q[\recurselevel] withcolor \MPcolor{ShowColor} ;
+ else :
+ draw q[\recurselevel] withcolor \MPcolor{DoneColor} ;
+ fi ;
+ \stopMPdrawing}%
+ \dostepwiserecurse{2}{\CurrentTopic}{1}
+ {\startMPdrawing
+ draw
+ rt point 3 of p[\recurselevel-1] --
+ lft point 7 of p[\recurselevel]
+ withcolor \MPcolor{ArrowColor} ;
+ \stopMPdrawing}%
+ \dostepwiserecurse{2}{\CurrentMaxItem}{1}
+ {\startMPdrawing
+ draw
+ bot point 9 of q[\recurselevel-1] --
+ top point 5 of q[\recurselevel]
+ withcolor \MPcolor{ArrowColor} ;
+ \stopMPdrawing}%
+ \startMPdrawing
+ draw Page
+ withpen pencircle scaled .5cm
+ withcolor \MPcolor{EdgeColor} ;
+ StopPage ;
+ \stopMPdrawing
+ \MPdrawingdonetrue
+ \getMPdrawing}
+
+\unexpanded\def\TitlePage#1%
+ {\startstandardmakeup
+ \setupalign[middle]
+ \def\\{\vfil\bfb\setupinterlinespace}
+ \bfd\setupinterlinespace
+ \vfil#1\vfil\vfil
+ \stopstandardmakeup}
+
+\definecolor[PageColor][r=.5,g=.4,b=.3]
+\definecolor[LineColor][r=.7,g=.6,b=.5]
+
+\definecolor[PageColor] [s=.60]
+\definecolor[ShowColor] [r=.40]
+\definecolor[EdgeColor] [g=.40]
+\definecolor[DoneColor] [r=.40,g=.40]
+\definecolor[ArrowColor] [b=.40]
+\definecolor[LineColor] [r=.60,g=.60]
+\definecolor[GotoColor] [ArrowColor]
+
+\setupinteraction
+ [color=GotoColor,
+ contrastcolor=GotoColor]
+
+\defineoverlay [shape] [\SomeShape]
+\defineoverlay [next] [\overlaybutton{forward}] % [{nextpage}]
+
+\setupbackgrounds
+ [page]
+ [background={color,next,shape},
+ backgroundcolor=PageColor]
+
+\doglobal\newcounter\CurrentMaxItem
+\doglobal\newcounter\CurrentItem
+\doglobal\newcounter\CurrentTopic
+
+\unexpanded\def\StartIdea
+ {\doglobal\newcounter\CurrentItem}
+
+\unexpanded\def\StartTopic
+ {\doglobal\increment\CurrentTopic
+ \dostartbuffer[topic-\CurrentTopic][StartTopic][StopTopic]}
+
+\unexpanded\def\StopIdea
+ {\dorecurse{\CurrentItem}
+ {\let\CurrentMaxItem\recurselevel
+ \doStopIdea}}
+
+\unexpanded\def\doStopIdea
+ {\startstandardmakeup
+ \dontcomplain
+ \vskip.875cm
+ \hbox to \makeupwidth
+ {\hfill
+ \dorecurse{\CurrentTopic}
+ {\edef\Topic{topic-\realfolio-\recurselevel}%
+ \hpos
+ {\Topic}
+ {\framed
+ [frame=off,align=middle,offset=.25cm]
+ {\getbuffer[topic-\recurselevel]}}%
+ \ifnum\recurselevel<\CurrentTopic
+ \hskip.875cm
+ \fi}%
+ \hfill}
+ \vskip.875cm
+ \vfilll
+ \dorecurse{\CurrentMaxItem}
+ {\edef\Item{item-\realfolio-\recurselevel}
+ \hbox to \makeupwidth
+ {\hfill
+ \hpos
+ {\Item}
+ {\framed
+ [width=.75\makeupwidth,
+ frame=off,
+ align=middle,offset=.125cm]
+ {\getbuffer[item-\recurselevel]}}%
+ \hfill}
+ \vskip.875cm}
+ \vfilll
+ \stopstandardmakeup}
+
+\unexpanded\def\StartItem
+ {\doglobal\increment\CurrentItem
+ \dostartbuffer[item-\CurrentItem][StartItem][StopItem]}
+
+\setupalign
+ [nothyphenated]
+
+\stopmodule
+
+\continueifinputfile{s-present-stack.mkiv}
+
+\usemodule[present-common]
+
+\inputpresentationfile{examples/present-stack-001.tex}
+
diff --git a/tex/context/modules/mkiv/s-present-stepper.mkiv b/tex/context/modules/mkiv/s-present-stepper.mkiv
new file mode 100644
index 000000000..3dd8d9dcd
--- /dev/null
+++ b/tex/context/modules/mkiv/s-present-stepper.mkiv
@@ -0,0 +1,227 @@
+%D \module
+%D [ file=s-present-stepper, % was s-pre-61
+%D version=2004.03.15,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment Stepper,
+%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 Optima
+
+\startmodule[present-stepper]
+
+\usemodule[pre-60]
+
+\doifmodeelse {atpragma,asintended} {
+ \usetypescriptfile[ghz]
+ \definetypeface[mainface][ss][sans][optima-nova][default]
+} {
+ \usetypescriptfile[type-ghz]
+ \definetypeface[mainface][ss][sans][optima-nova][default][encoding=\defaultencoding]
+}
+
+\setupbodyfont[mainface,ss,18pt]
+
+\setupinterlinespace
+ [line=3.25ex]
+
+\setuppapersize
+ [S6][S6]
+
+% \setuppapersize
+% [SW][SW]
+
+\setuplayout
+ [topspace=10pt,
+ header=30pt,
+ headerdistance=20pt,
+ height=middle,
+ footerdistance=20pt,
+ footer=0pt,
+ bottomdistance=20pt,
+ bottom=20pt,
+ bottomspace=50pt,
+ backspace=30pt,
+ width=middle]
+
+\setupinteraction
+ [state=start,
+ click=off,
+ menu=on,
+ style=,
+ color=interactioncolor,
+ contrastcolor=interactioncolor]
+
+\setupinteractionscreen
+ [option=max]
+
+\setupinteractionmenu
+ [bottom]
+ [color=maincolor,
+ contrastcolor=maincolor,
+ style=\tfa, % acceptable
+ left=\hfill,
+ middle=,
+ right=,
+ height=\bottomheight,
+ width=2\bottomheight,
+ offset=overlay,
+ frame=off]
+
+\startinteractionmenu[bottom]
+ \but [firstpage] \symbol[firstpage] \\
+ \but [previouspage] \symbol[previouspage] \\
+ \but [InvokeStepper] \StartBusy\symbol[PauseRendering]\StopBusy \\
+ \but [nextpage] \symbol[nextpage] \\
+ \but [lastpage] \symbol[lastpage] \\
+ \but [CloseDocument] \symbol[CloseDocument] \\
+\stopinteractionmenu
+
+% maybe in colo-sjk : \setupcolor[sjk]
+
+\definecolor [dark] [s=.4]
+\definecolor [bright] [s=.9]
+
+\definecolor [red] [r=.4,g=.2,b=.2]
+\definecolor [green] [r=.2,g=.4,b=.2]
+\definecolor [blue] [r=.2,g=.2,b=.4]
+
+\definecolor [cyan] [r=.2,g=.4,b=.4]
+\definecolor [magenta] [r=.4,g=.2,b=.4]
+\definecolor [yellow] [r=.4,g=.4,b=.2]
+
+\definecolor [pagecolor] [dark]
+\definecolor [maincolor] [bright]
+\definecolor [textcolor] [red]
+
+\definecolor [interactioncolor] [r=.8,g=.8,b=.6]
+
+\setupcolors
+ [textcolor=maincolor]
+
+\setupbackgrounds
+ [page]
+ [background=page,
+ backgroundcolor=textcolor]
+
+\setupbackgrounds
+ [text]% [text]
+ [background={comments,text,invoke}]
+
+\definelayer
+ [text]
+ [width=\textwidth,
+ height=\textheight]
+
+\defineoverlay
+ [comments]
+ [{\setlayer[text][preset=middle]{\placecomments}}]
+
+\defineoverlay[page][\uniqueMPgraphic{page-\ifcase\realpageno\or one\else plus\fi}]
+
+\startuniqueMPgraphic{page-one}
+ StartPage ;
+ fill Page
+ enlarged 4pt
+ withcolor \MPcolor{pagecolor} ;
+ fill Field[Text][Text]
+ enlarged 10pt
+ % topenlarged (HeaderHeight+HeaderDistance)
+ leftenlarged (BackSpace+4pt)
+ rightenlarged (CutSpace +4pt)
+ withcolor OverlayColor ;
+ StopPage ;
+\stopuniqueMPgraphic
+
+\startuniqueMPgraphic{page-plus}
+ StartPage ;
+ fill Page
+ enlarged 4pt
+ withcolor \MPcolor{pagecolor} ;
+ fill Field[Text][Text]
+ enlarged 10pt
+ leftenlarged (BackSpace+4pt)
+ rightenlarged (CutSpace+4pt)
+ withcolor OverlayColor ;
+ StopPage ;
+\stopuniqueMPgraphic
+
+\startsetups fonts:normalize
+ \definefont[HeadFont] [SansBold*default ht \the\dimexpr0.750\headerheight\relax]
+ \definefont[TitleFont] [SansBold*default ht \the\dimexpr1.500\headerheight\relax]
+ \definefont[SubTitleFont] [SansBold*default ht \the\dimexpr0.375\headerheight\relax]
+ \definefont[SubSubTitleFont] [SansBold*default ht \the\dimexpr0.750\headerheight\relax]
+\stopsetups
+
+\setuphead
+ [chapter]
+ [placehead=empty,
+ after={\blank[medium]},
+ color=maincolor,
+ placenumber=no,
+ style=\HeadFont]
+
+\setupheadertexts
+ [\doiftextelse{\currentheadnumber}{\placeheadtext[Topic]}{\placeheadtext[Nopic]}]
+ []
+
+\setuppagenumbering
+ [location=]
+
+\definesymbol
+ [emdash]
+ [\emdash]
+
+\setupitemize
+ [each]
+ [loose,serried,joinedup,broad]
+ [symbol=emdash]
+
+\setupalign
+ [broad,right]
+
+\def\doTitlePage#1#2#3%
+ {\setups[fonts:normalize]
+ \resetsetups[fonts:normalize]
+ \startstandardmakeup[headerstate=high]
+ \def\\{\def\\{\endgraf\quad\quad}\endgraf\quad\ignorespaces#2}%
+ #1\setstrut\setupinterlinespace\vfil#3\vfil\vfil
+ \stopstandardmakeup}
+
+\unexpanded\def\TitlePage {\doTitlePage\TitleFont\relax}
+\unexpanded\def\SubTitlePage{\doTitlePage\TitleFont\SubTitleFont}
+
+\definehead[Topic][chapter]
+\definehead[Nopic][title]
+
+\unexpanded\def\Topics#1%
+ {\Nopic[topics]{#1}
+ \startcolumns
+ \placelist[Topic]
+ \stopcolumns}
+
+\setuplist
+ [Topic]
+ [alternative=f,
+ color=maincolor,
+ contrastcolor=maincolor,
+ criterium=all]
+
+\defineoverlay[topics][\overlaybutton{topics}]
+
+\setupbackgrounds
+ [bottom] [text]
+ [background=topics]
+
+\stopmodule
+
+\continueifinputfile{s-present-stepper.mkiv}
+
+\usemodule[present-common]
+
+\inputpresentationfile{examples/present-stepper-001.tex}
diff --git a/tex/context/modules/mkiv/s-present-stepwise.mkiv b/tex/context/modules/mkiv/s-present-stepwise.mkiv
new file mode 100644
index 000000000..bc781c499
--- /dev/null
+++ b/tex/context/modules/mkiv/s-present-stepwise.mkiv
@@ -0,0 +1,216 @@
+%D \module
+%D [ file=s-present-stepwise, % was s-pre-60
+%D version=2004.03.15,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment Stepwise,
+%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.
+
+% use lua instead of global mess
+
+\startmodule[present-stepwise]
+
+\unprotect
+
+\startmode[paper,print]
+ \let\StartSteps\relax
+ \let\StopSteps \relax
+ \let\FlushStep \relax
+ \let\ResetStep \relax
+ \let\StartBusy \relax
+ \let\StopBusy \relax
+ \endinput
+\stopmode
+
+\newcount\c_module_pre_steps_current
+\newcount\c_module_pre_steps_maximum
+\newcount\c_module_pre_steps_nesting_step
+\newcount\c_module_pre_steps_nesting_steps
+\newcount\c_module_pre_steps_nesting_busy
+
+\def\StepCounter {\the\c_module_pre_steps_current}
+\def\StepMaximum {\the\c_module_pre_steps_maximum}
+\def\StepLayer {step:\the\c_module_pre_steps_current}
+\def\NextStepLayer {step:\the\numexpr\c_module_pre_steps_current+\plusone\relax}
+\def\FirstStepLayer{step:1}
+
+\useJSscripts[stp]
+
+\startsetups[set-stepper]
+
+ \ifnum\getvariable{stepper}{nofsteps}>\c_module_pre_steps_maximum
+
+ \dostepwiserecurse {\numexpr\c_module_pre_steps_maximum+\plusone\relax} {\getvariable{stepper}{nofsteps}} {1} {
+ \doifnotmode{nosteps,nostep} {
+ \expanded{\defineviewerlayer[step:\recurselevel][state=stop,scope=global]}
+ }
+ }
+
+ \global\c_module_pre_steps_maximum\getvariable{stepper}{nofsteps}\relax
+
+ \fi
+
+\stopsetups
+
+\setvariables
+ [stepper]
+ [set=\setups{set-stepper},
+ nofsteps=50]
+
+\defineviewerlayer[step:busy][state=start]
+
+\definereference [SetupStepper] [JS(SetupStepper{step,\StepMaximum})]
+\definereference [ResetStepper] [JS(ResetStepper)]
+\definereference [CheckStepper] [JS(CheckStepper{\StepCounter})]
+\definereference [InvokeStepper] [JS(InvokeStepper)]
+
+% todo: roll back blank
+
+\unexpanded\def\ResetStep
+ {\iftrialtypesetting\else
+ \global\c_module_pre_steps_current\zerocount
+ \fi}
+
+\unexpanded\def\NextStep
+ {\iftrialtypesetting\else
+ \global\advance\c_module_pre_steps_current\plusone
+ \fi}
+
+\unexpanded\def\PrevStep
+ {\iftrialtypesetting\else
+ \global\advance\c_module_pre_steps_current\minusone
+ \fi}
+
+\unexpanded\def\FlushStep
+ {\iftrialtypesetting\else
+ \StopStep
+ \NextStep
+ \StartStep
+ \fi}
+
+\unexpanded\def\StartStep
+ {\iftrialtypesetting\else
+ \global\advance\c_module_pre_steps_nesting_step\plusone
+ \ifcase\c_module_pre_steps_nesting_step\or
+ \startviewerlayer[\StepLayer]%
+ \fi
+ \fi
+ \ignorespaces}
+
+\unexpanded\def\StopStep
+ {\removeunwantedspaces
+ \iftrialtypesetting\else
+ \ifcase\c_module_pre_steps_nesting_step\or
+ \stopviewerlayer
+ \fi
+ \global\advance\c_module_pre_steps_nesting_step\minusone
+ \fi}
+
+\unexpanded\def\StartSteps
+ {\iftrialtypesetting\else
+ \global\advance\c_module_pre_steps_nesting_steps\plusone
+ \ifcase\c_module_pre_steps_nesting_steps\or
+ \ResetStep
+ \NextStep
+ \StartStep
+ \fi
+ \fi}
+
+\unexpanded\def\StopSteps
+ {\iftrialtypesetting\else
+ \ifcase\c_module_pre_steps_nesting_steps\or
+ \StopStep
+ \PrevStep
+ \fi
+ \global\advance\c_module_pre_steps_nesting_steps\minusone
+ \fi}
+
+\unexpanded\def\StartBusy
+ {\iftrialtypesetting\else
+ \global\advance\c_module_pre_steps_nesting_busy\plusone
+ \ifcase\c_module_pre_steps_nesting_busy\or
+ \startviewerlayer[step:busy]
+ \fi
+ \fi
+ \ignorespaces}
+
+\unexpanded\def\StopBusy
+ {\removeunwantedspaces
+ \iftrialtypesetting\else
+ \ifcase\c_module_pre_steps_nesting_busy\or
+ \stopviewerlayer
+ \fi
+ \global\advance\c_module_pre_steps_nesting_busy\minusone
+ \fi}
+
+%D Handy:
+
+\unexpanded\def\StartLocalSteps
+ {\ResetStep}
+
+\unexpanded\def\StopLocalSteps
+ {}
+
+\unexpanded\def\StartLocalStep
+ {\NextStep
+ \StartStep}
+
+\unexpanded\def\StopLocalStep
+ {\StopStep}
+
+\appendtoks
+ \ResetStep
+\to \everyaftershipout
+
+\setupinteraction
+ [%openaction=SetupStepper,
+ closeaction=ResetStepper,
+ openpageaction=CheckStepper,
+ closepageaction=ResetStepper]
+
+\defineoverlay[invoke][\overlaybutton{InvokeStepper}]
+
+\setupbackgrounds
+ [text]
+ [background=invoke]
+
+% bonus
+
+\useMPlibrary[nav]
+
+\definepalet
+ [navplus]
+ [attach=interactioncolor,
+ comment=interactioncolor]
+
+\setupcomment
+ [symbol={comment-normal,comment-down},
+ textlayer=\StepLayer,
+ option=buffer,
+ height=\textheight,
+ width=\textwidth,
+ margin=0pt]
+
+\setupattachments
+ [symbol={attach-normal,attach-down},
+ textlayer=\StepLayer]
+
+%D used as (given some definitions):
+%D
+%D \starttyping
+%D \StartLocalSteps
+%D \startcombination[both]
+%D {\StartLocalStep\placestreamlayer[left]\StopLocalStep} {}
+%D {\StartLocalStep\placestreamlayer[right]\StopLocalStep} {}
+%D \stopcombination
+%D \StopLocalSteps
+%D \stoptyping
+
+\protect
+
+\stopmodule
diff --git a/tex/context/modules/mkiv/s-present-tiles.mkiv b/tex/context/modules/mkiv/s-present-tiles.mkiv
index b68a34ef4..566a610a4 100644
--- a/tex/context/modules/mkiv/s-present-tiles.mkiv
+++ b/tex/context/modules/mkiv/s-present-tiles.mkiv
@@ -11,15 +11,18 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-%D The Bacho\TeX\ 2013 style.
+%D In this style the table of contents is a bunch of rectangular blobs. The layout
+%D adapts itself upto 25 pages. This style was made for Bacho\TeX\ 2013.
+
+\startmodule[present-tiles]
\setupbodyfont[pagella,14.4pt]
\setuppapersize[S6][S6]
-\definecolor[primarycolor] [.50(darkblue,darkgreen)]
-\definecolor[secondarycolor][.25(darkblue,darkyellow)]
-\definecolor[mixedcolor] [s=.35]
+\definecolor[maincolor] [.50(darkblue,darkgreen)]
+\definecolor[othercolor][.25(darkblue,darkyellow)]
+\definecolor[mixedcolor][s=.35]
\setupcolors
[textcolor=white]
@@ -88,7 +91,7 @@
background=color,
frame=off,
foregroundstyle=MyTopicListFont,
- backgroundcolor=primarycolor,
+ backgroundcolor=maincolor,
foregroundcolor=white]
\setupwhitespace
@@ -171,7 +174,7 @@
frame=off]
\defineframed[nb] [bb] [empty=yes]
-\defineframed[rb] [bb] [backgroundcolor=white,foregroundcolor=secondarycolor]
+\defineframed[rb] [bb] [backgroundcolor=white,foregroundcolor=othercolor]
\defineframed[db] [bb] [backgroundcolor=mixedcolor,foregroundcolor=white]
\definepushbutton [prev]
@@ -235,7 +238,7 @@
align={flushleft,lohi},
background=color,
backgroundcolor=white,
- foregroundcolor=secondarycolor]
+ foregroundcolor=othercolor]
\startsetups [document:titlepage]
@@ -245,12 +248,12 @@
\setupbackgrounds
[page]
[background={color,menupage},
- backgroundcolor=secondarycolor]
+ backgroundcolor=othercolor]
\setupbackgrounds
[text]
[background={color,menupage},
- backgroundcolor=secondarycolor]
+ backgroundcolor=othercolor]
\starttopicmakeup[reference=homepage]
@@ -277,12 +280,12 @@
\setupbackgrounds
[page]
[background={color,homepage},
- backgroundcolor=secondarycolor]
+ backgroundcolor=othercolor]
\setupbackgrounds
[text]
[background={color,menupage},
- backgroundcolor=secondarycolor]
+ backgroundcolor=othercolor]
\startcontentmakeup[reference=menupage]
@@ -296,23 +299,33 @@
[page]
% [background={color,menupage},
[background={color,invoke},
- backgroundcolor=primarycolor]
+ backgroundcolor=maincolor]
\setupbackgrounds
[text]
% [background={color,nextpage,setbuttons,buttons},
[background={color,setbuttons,buttons},
- backgroundcolor=secondarycolor]
+ backgroundcolor=othercolor]
\stopsetups
\setupdocument
[before=\directsetup{document:titlepage}]
-\continueifinputfile{s-present-tiles.mkiv}
-
-\startdocument[title=Whatever We\\Want Here,subtitle=Whatever We\\Want There]
+\stopmodule
- \dorecurse{12}{\starttopic[title=Topic #1]\input tufte \stoptopic}
+\continueifinputfile{s-present-tiles.mkiv}
-\stopdocument
+\usemodule[present-common]
+
+%inputpresentationfile{examples/present-tiles-001.tex}
+%inputpresentationfile{context/2013/context-2013-speed.tex}
+\inputpresentationfile{context/2013/context-2013-math.tex}
+%inputpresentationfile{bachotex/2013/bachotex-2013-bits.tex}
+%inputpresentationfile{bachotex/2013/bachotex-2013-bits.pdf}
+%inputpresentationfile{bachotex/2013/bachotex-2013-luatex.tex}
+%inputpresentationfile{bachotex/2013/bachotex-2013-luatex.pdf}
+%inputpresentationfile{bachotex/2013/bachotex-2013-sense.tex}
+%inputpresentationfile{bachotex/2013/bachotex-2013-sense.pdf}
+%inputpresentationfile{bachotex/2013/bachotex-2013-speed.tex}
+%inputpresentationfile{bachotex/2013/bachotex-2013-speed.pdf}
diff --git a/tex/context/modules/mkiv/s-present-windows.mkiv b/tex/context/modules/mkiv/s-present-windows.mkiv
new file mode 100644
index 000000000..22d6fdba1
--- /dev/null
+++ b/tex/context/modules/mkiv/s-present-windows.mkiv
@@ -0,0 +1,350 @@
+%D \module
+%D [ file=s-resent-windows, % was s-pre-09
+%D version=unknown,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment Windows,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\startmodule[present-windows]
+
+%D I made this style when I had to give a presentation on the \MAPS\ bibliography
+%D production for several user group meetings. This style is rather tuned for
+%D combinations of examples and explanations. The colors match the \MAPS\
+%D bibliography colors.
+
+\doifelsemode {asintended} {
+ \setupbodyfont[ludicaot,14.4pt]
+} {
+ \setupbodyfont[pagella,14.4pt]
+}
+
+%D A couple of years later, in 2001 this style was documented and made public. While
+%D documenting, I also changed box building on top of overlays into the now
+%D available layer positioning. So, this styles demonstrates quite some tricks.
+%D
+%D I'm sure that nowadays it can be done with less code but therei sno real need to
+%D rewrite history.
+
+\setuppapersize
+ [S6][S6]
+
+\setuplayout
+ [topspace=0cm,
+ backspace=0cm,
+ header=0pt,
+ footer=0pt,
+ width=middle,
+ height=middle]
+
+%D Local environments can be set by using the setups commands. For downward
+%D compatibility, we keep supporting the \type {\...Settings} hooks. Using local
+%D environments is seldom needed.
+
+\let\TextSettings \empty
+\let\SampleSettings\empty
+
+\startsetups [text] \TextSettings \stopsetups
+\startsetups [sample] \SampleSettings \stopsetups
+
+%D The dimensions are kind of fixed.
+
+\def\FrameWidth {448pt}
+\def\FrameHeight {348pt}
+\def\FrameOffset {24pt}
+\def\FrameSkip {12pt}
+
+%D But they {\em can} and {\em will} be changed.
+
+\def\FrameWidth {408pt}
+\def\FrameHeight {318pt}
+
+%D The funny values come from the $3:4$ display aspect ratio.
+
+\definecolor[PageColor] [s=.40]
+\definecolor[TextColor] [s=.90]
+\definecolor[InteractionColor][r=.40]
+\definecolor[LineColor] [r=.60,g=.60]
+
+%D Of course we go interactive and since we will probably open other documents, we
+%D make sure that the viewer opens a new window.
+
+\setupinteraction
+ [color=InteractionColor,
+ contrastcolor=LineColor,
+ display=new,
+ state=start]
+
+\setupinteractionscreen
+ [option=max]
+
+%D Before we come to the real macros, we do a little bit of tuning.
+
+\setupitemize
+ [1][packed]
+
+\setuptyping
+ [blank=medium]
+
+%D Apart from the titlepage, the page gets a simple colored background. Later we
+%D will activate the background.
+
+\setupbackgrounds
+ [page]
+ [backgroundcolor=PageColor]
+
+%D Everything gets frames by a nice \METAPOST\ frame.
+
+\defineoverlay [background] [\uniqueMPgraphic{background}]
+
+\startuniqueMPgraphic{background}
+ pickup pencircle scaled (1.5*\FrameSkip) ;
+ draw OverlayBox withcolor "PageColor" ;
+ pickup pencircle scaled \FrameSkip ;
+ fill OverlayBox withcolor "TextColor" ;
+ draw OverlayBox withcolor "LineColor" ;
+\stopuniqueMPgraphic
+
+%D We will present samples and explanation pair||wise, so we need a hyperlink that
+%D skips a page. Contrary to \MKII\ we put the next button in the page background and
+%D the two windows get buttons that toggle between them. This is easier.
+
+\defineoverlay [nextpage] [\overlaybutton{nextpage}]
+\defineoverlay [previouspage] [\overlaybutton{previouspage}]
+\defineoverlay [skippage] [\overlaybutton{realpage(\number\numexpr\realpageno+2\relax)}]
+\defineoverlay [samepage] [\overlaybutton{realpage(\number\numexpr\realpageno \relax)}]
+
+%D Layers are normally used to position multiple content on a specific overlay. Here
+%D we will use them to position only and since the samples and text will swap place,
+%D we will use quite a few layers.
+
+\defineoverlay [text] [\composedlayer{text}]
+\defineoverlay [sample] [\composedlayer{sample}]
+\defineoverlay [common] [\composedlayer{common}]
+
+%D There are three positions. When combined, the sample and text windows overlap,
+%D otherwise the lone window is centered. We could have used one layer and reversed
+%D the order by setting the \type {direction} parameter, but this approach is more
+%D readable.
+
+\definelayer
+ [text]
+ [x=\makeupwidth,
+ y=\makeupheight,
+ location=lt,
+ hoffset=-\FrameSkip,
+ voffset=-\FrameSkip]
+
+\definelayer
+ [sample]
+ [hoffset=\FrameSkip,
+ voffset=\FrameSkip]
+
+\definelayer
+ [common]
+ [x=.5\makeupwidth,
+ y=.5\makeupheight,
+ location=c]
+
+%D The topic is put in the lower right corner of the text window.
+
+\defineoverlay [topic] [\composedlayer{topic}]
+
+\definelayer
+ [topic]
+ [x=\FrameWidth,
+ y=\FrameHeight,
+ location=lt,
+ hoffset=-\FrameOffset,
+ voffset=-\FrameSkip]
+
+%D The topic is put in a framed box. That way we can make sure that it gets a
+%D background, which looks better when it covers something else. Otherwise we could
+%D have stuck to:
+%D
+%D \starttyping
+%D \def\Topic#1%
+%D {\setlayer[topic]{\color[PageColor]{\bfb\setstrut#1}}}
+%D \stoptyping
+%D
+%D But, we go for the nice alternative:
+
+\unexpanded\def\Topic#1%
+ {\doifsomething{#1}
+ {\setlayer [topic]
+ {\bfb\setstrut
+ \inframed
+ [frame=off,
+ foregroundcolor=PageColor,
+ offset=0pt,
+ background=color,
+ backgroundcolor=TextColor]
+ {#1}}}}
+
+%D The sample as well as the explanation will be collected in a buffer. That way we
+%D can reuse the content. We could have used a box instead, but can we be sure that
+%D the content is not adapting itself? So, buffers we use.
+
+\resetbuffer[sample]
+\resetbuffer[text]
+
+%D Both the sample and explanation are kind of windowed.
+
+\defineframedtext
+ [SampleText]
+ [width=\FrameWidth,
+ height=\FrameHeight,
+ offset=\FrameOffset,
+ frame=off,
+ align=normal,
+ strut=no,
+ before=,
+ after=,
+ background=background]
+
+%D We safe some keying in by combining things in one macro.
+
+\unexpanded\def\DoSampleText#1#2#3% kind layer overlays
+ {\setupframedtexts[SampleText][background={background,#3}]
+ \setlayer[#2]
+ {\startSampleText[none]
+ \setups[#1]
+ \getbuffer[#1]
+ \stopSampleText}}
+
+\unexpanded\def\StartSample{\dostartbuffer[sample][StartSample][StopSample]}
+\unexpanded\def\StartText {\dostartbuffer[text] [StartText] [StopText]}
+
+%D The following definitions apply at the outer level.
+
+\unexpanded\def\StopSample
+ {\startstandardmakeup
+ \DoSampleText{sample}{common}{samepage}
+ \stopstandardmakeup
+ \resetbuffer[sample]}
+
+\unexpanded\def\StopText
+ {\startstandardmakeup
+ \DoSampleText{text}{common}{topic,samepage}
+ \stopstandardmakeup
+ \resetbuffer[text]}
+
+\setupbackgrounds[page][background={color,nextpage}]
+\setupbackgrounds[text][background=common]
+
+%D When we combine sample and text, we get slightly different definitions. As you
+%D can see we generate two pages. Watch how we manipulate the order of the overlays
+%D and teh nature of the buttons. Here some abstraction really pays off.
+
+\unexpanded\def\StartIdea
+ {\bgroup
+ \let\StopSample\relax
+ \let\StopText \relax}
+
+\unexpanded\def\StopIdea
+ {\setupbackgrounds[page][background={color,skippage}]
+ \setupbackgrounds[text][background={text,sample}]
+ \startstandardmakeup
+ \DoSampleText{sample}{sample}{nextpage}
+ \DoSampleText{text} {text} {topic,nextpage}
+ \stopstandardmakeup
+ \setupbackgrounds[page][background={color,nextpage}]
+ \setupbackgrounds[text][background={sample,text}]
+ \startstandardmakeup
+ \DoSampleText{sample}{sample}{previouspage}
+ \DoSampleText{text} {text} {topic,previouspage}
+ \stopstandardmakeup
+ \egroup}
+
+%D The rest of the definitions takes care of the title page. Please don't steal this
+%D one for your own documents.
+
+\defineoverlay[joke] [\useMPgraphic{joke}{n=0}] % not to be changed!
+
+\startuseMPgraphic{joke}{n}
+ StartPage ;
+ path p, q ; numeric w ; pair xy ;
+ set_grid(OverlayWidth,OverlayHeight,OverlayWidth/8,OverlayHeight/8) ;
+ if \MPvar{n}=1 :
+ p := fulldiamond ; fill Page withcolor \MPcolor{TextColor} ;
+ else :
+ p := fullsquare ; fill Page withcolor \MPcolor{PageColor} ;
+ fi ;
+ forever :
+ xy := center Page randomized (OverlayWidth,OverlayHeight) ;
+ if new_on_grid(xpart xy, ypart xy) :
+ q := (p xyscaled (OverlayWidth/5,OverlayHeight/5))
+ randomized (\FrameSkip,\FrameSkip)
+ shifted xy ;
+ w := (\FrameSkip) randomized (\FrameSkip/2) ;
+ draw q withcolor \MPcolor{PageColor} withpen pencircle scaled (1.5w) ;
+ fill q withcolor \MPcolor{TextColor} ;
+ draw q withcolor \MPcolor{LineColor} withpen pencircle scaled ( w) ;
+ fi ;
+ exitif grid_full ;
+ endfor ;
+ StopPage ;
+\stopuseMPgraphic
+
+\defineoverlay[fuzzy][\useMPgraphic{fuzzy}]
+
+\startuseMPgraphic{fuzzy}
+ path p ; numeric w ;
+ p := (fullsquare xyscaled (OverlayWidth,OverlayHeight))
+ randomized (\FrameSkip,\FrameSkip) ;
+ w := (\FrameSkip) randomized (\FrameSkip/2) ;
+ draw p withcolor \MPcolor{PageColor} withpen pencircle scaled (1.5w) ;
+ fill p withcolor \MPcolor{TextColor} ;
+ draw p withcolor \MPcolor{LineColor} withpen pencircle scaled ( w) ;
+\stopuseMPgraphic
+
+%D This time we use a fit window, but with a slightly randomized frame, our
+%D trademark so to say.
+
+\unexpanded\def\StartTitlePage
+ {\bgroup
+ \setupbackgrounds[page][background={joke,nextpage}]
+ \startstandardmakeup
+ \switchtobodyfont[big]
+ \setupframedtexts
+ [SampleText]
+ [background=fuzzy,
+ foregroundcolor=PageColor,
+ width=fit,
+ height=fit,
+ align=middle]
+ \startSampleText[middle]
+ \bfd\setupinterlinespace
+ \def\\{\bfb\setupinterlinespace\vfil\def\\{\vfil}}}
+
+\unexpanded\def\StopTitlePage
+ {\stopSampleText
+ \stopstandardmakeup
+ \egroup}
+
+\unexpanded\def\TitlePage#1%
+ {\StartTitlePage#1\StopTitlePage}
+
+%D Let's nil some error prone presentation macros.
+
+\let\Subject \Topic
+\let\Topics \gobbleoneargument
+\let\Subjects \relax
+
+%D We will avoid \quote {overfull} messages.
+
+\dontcomplain
+
+\stopmodule
+
+\continueifinputfile{s-present-windows.mkiv}
+
+\usemodule[present-common]
+
+\inputpresentationfile{examples/present-windows-001.tex}
+
diff --git a/tex/context/modules/mkiv/s-present-wobbling.mkiv b/tex/context/modules/mkiv/s-present-wobbling.mkiv
new file mode 100644
index 000000000..e61b262f4
--- /dev/null
+++ b/tex/context/modules/mkiv/s-present-wobbling.mkiv
@@ -0,0 +1,339 @@
+%D \module
+%D [ file=s-prent-wobbling,
+%D version=2010.04.28,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment Wobbling,
+%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 a bit old stuyls and I should adapt it a bit but as it sort of works ok I'll
+%D not do that now.
+
+\startmodule[present-wobbling]
+
+%setuppapersize[S6][S6]
+\setuppapersize[SM][SM]
+
+\setupinteraction
+ [state=start,
+ contrastcolor=white,
+ color=white,
+ click=no]
+
+\setuplayout
+ [location=middle,
+ topspace=60pt,
+ bottomspace=80pt,
+ backspace=80pt,
+ header=0pt,
+ footer=0pt,
+ width=middle,
+ height=middle]
+
+\setupcolors
+ [textcolor=white]
+
+\setupbodyfont[pagella]
+
+\definecolor[maincolor] [blue]
+\definecolor[extracolor][green]
+
+% \definecolor[maincolor] [red]
+% \definecolor[extracolor][blue]
+
+\startMPdefinitions
+ picture MySoFar ; MySoFar := nullpicture ;
+ path MyLastOne ; MyLastOne := origin -- cycle ;
+ path MyLeftSteps, MyRightSteps ;
+ boolean MyPageDone ; MyPageDone := false ;
+
+ vardef MySmallShape(expr parent) =
+ path p ; p := boundingbox parent ;
+ numeric w, h ; w := bbwidth(p) ; h := bbheight(p) ;
+ urcorner p shifted (-uniformdeviate w/4,0) --
+ lrcorner p shifted (0,uniformdeviate h/4) --
+ llcorner p shifted (uniformdeviate w/4,0) --
+ ulcorner p shifted (0,-uniformdeviate h/4) -- cycle
+ enddef ;
+
+ vardef MyShape(expr parent) =
+ path p ; p := boundingbox parent ;
+ if MyPageDone :
+ MyPageDone := false ;
+ urcorner p shifted (-EmWidth + -uniformdeviate CutSpace/2,0) --
+ lrcorner p shifted (0,EmWidth + uniformdeviate BottomSpace/2) --
+ llcorner p shifted (EmWidth + uniformdeviate BackSpace/2,0) --
+ ulcorner p shifted (0,-EmWidth + -uniformdeviate TopSpace/2) -- cycle
+ else :
+ MyPageDone := true ;
+ urcorner p shifted (0,-EmWidth + -uniformdeviate TopSpace/2) --
+ lrcorner p shifted (-EmWidth + -uniformdeviate CutSpace/2,0) --
+ llcorner p shifted (0,EmWidth + uniformdeviate BottomSpace/2) --
+ ulcorner p shifted (EmWidth + uniformdeviate BackSpace/2,0) -- cycle
+ fi
+ enddef ;
+
+ vardef MyMakeOne =
+ MyLastOne := MyShape(Page) ;
+ enddef ;
+
+ vardef MyAddOne =
+ addto MySoFar also image(fill MyLastOne withcolor "maincolor" withtransparency(1,.25) ; ) ;
+ enddef ;
+
+ vardef MyDrawOne =
+ fill MyLastOne withcolor black ;
+ fill MyLastOne withcolor "maincolor" withtransparency(1,.25) ;
+ enddef ;
+
+ vardef MyDrawPage =
+ draw MySoFar ;
+ enddef ;
+
+ vardef MySetSteps =
+ path l, r ; numeric s ; path ll[], rr[] ; path t ;
+ l := point 2 of MyLastOne -- point 3 of MyLastOne ;
+ r := point 0 of MyLastOne -- point 1 of MyLastOne ;
+ t := topboundary Field[Text][Text] rightenlarged TextWidth leftenlarged TextWidth ;
+ s := bbheight(Field[Text][Text])/LineHeight + 2 ;
+ t := t shifted (0,-TopSkip) ;
+ for i=1 upto s :
+ ll[i] := t intersectionpoint l ;
+ rr[i] := t intersectionpoint r ;
+ t := t shifted (0,-LineHeight) ;
+ endfor ;
+ MyLeftSteps := for i=1 upto s : ll[i] -- endfor cycle ;
+ MyRightSteps := for i=1 upto s : rr[i] -- endfor cycle ;
+ enddef ;
+
+ vardef MyDrawText(expr txt) =
+ pair a ; a := (point 1 of MyLastOne) - (point 2 of MyLastOne) ;
+ picture p ; p := txt ;
+ p := p
+ shifted (-EmWidth,EmWidth)
+ shifted ulcorner txt
+ shifted point 1 of MyLastOne ;
+ p := p rotatedaround(lrcorner p, radian * tan(ypart a/xpart a)) ;
+ setbounds p to origin -- cycle ;
+ draw p ;
+ enddef ;
+
+ vardef MyDrawTitle(expr txt) =
+ % pair a ; a := (point 2 of MyLastOne) - (point 3 of MyLastOne) ;
+ pair a ; a := (point 3 of MyLastOne) - (point 4 of MyLastOne) ;
+ picture p ;
+ if bbheight(txt) > bbwidth(txt) :
+ p := txt ysized(0.8*TextHeight) ;
+ else :
+ p := txt xsized(0.8*TextWidth) ;
+ fi ;
+ numeric d ; d := arclength(point 2 of MyLastOne -- point 3 of MyLastOne) - bbheight(p) ;
+ p := p
+ shifted (BackSpace,-d/2)
+ shifted -ulcorner p
+ shifted point 3 of MyLastOne ;
+ % p := p rotatedaround(ulcorner p, - radian * tan(xpart a/ypart a)) ;
+ % p := p rotatedaround(ulcorner p, radian * tan(ypart a/xpart a)) ;
+ setbounds p to origin -- cycle ;
+ draw p ;
+ enddef ;
+
+ vardef MyDrawSteps =
+ s := bbheight(Field[Text][Text])/LineHeight + 2 ;
+ for i=1 upto s :
+ draw ll[i] withpen pencircle scaled 1mm ;
+ draw rr[i] withpen pencircle scaled 1mm ;
+ draw ll[i] -- rr[i] ;
+ endfor ;
+ draw Field[Text][Text] ;
+ enddef ;
+
+\stopMPdefinitions
+
+\startuseMPgraphic{initialization}
+ StartPage ;
+ MySoFar := image(fill Page enlarged 12pt withcolor "maincolor" withtransparency(1,.25) ;) ;
+ MyMakeOne ;
+ MySetSteps ;
+ StopPage ;
+\stopuseMPgraphic
+
+\appendtoks
+ \startnointerference
+ \useMPgraphic{initialization}
+ \stopnointerference
+\to \everystarttext
+
+\unexpanded\def\TitleCommand#1%
+ {\framed
+ [frame=off,
+ offset=overlay,
+ align=flushleft,
+ foregroundcolor=white,
+ foregroundstyle={\tfd},
+ bottom=\vskip2\lineheight]
+ {\setupinterlinespace
+ \setupwhitespace[halfline]%
+ %\showstruts
+ \begstrut
+ #1%
+ \endstrut}}
+
+\unexpanded\def\TopicCommand#1%
+ {\color[white]{\tfb#1}}
+
+\startuseMPgraphic{page}
+ StartPage ;
+ MyDrawPage ;
+ MyDrawOne ;
+ MySetSteps ;
+ if RealPageNumber == 1 :
+ MyDrawTitle(textext("\TitleCommand{\documentvariable{title}}")) ;
+ MyDrawText (textext("\TopicCommand{\documentvariable{topic}}")) ;
+ fi ;
+ %
+ % we have multiple runs when we have text
+ %
+ % MyDrawSteps ;
+ % MyMakeOne ;
+ % MySetSteps ;
+ StopPage ;
+\stopuseMPgraphic
+
+\appendtoks
+ \startnointerference
+ \startMPcode
+ MyAddOne ;
+ MyMakeOne ;
+ MySetSteps ;
+ \stopMPcode
+ \stopnointerference
+\to \everyshipout
+
+\defineoverlay[page][\useMPgraphic{page}]
+
+\startuseMPgraphic{symbol}
+ path p ; p := MySmallShape(unitsquare scaled (.6*LineHeight)) ;
+ fill p withcolor white ;
+ fill p withcolor "extracolor" withtransparency(1,.25) ;
+\stopuseMPgraphic
+
+\definesymbol[mysymbol][\struttedbox{\useMPgraphic{symbol}}]
+
+\setupitemgroup
+ [itemize] [1]
+ [symbol=mysymbol]
+
+\setupbackgrounds
+ [page]
+ [background=page]
+
+\startluacode
+ local texdimen = tex.dimen
+ function document.SetParShape()
+ local leftpath = metapost.getclippath { mpx = "metafun", data = "clip currentpicture to MyLeftSteps ;" }
+ local rightpath = metapost.getclippath { mpx = "metafun", data = "clip currentpicture to MyRightSteps ;" }
+ local shape = { }
+ for i=1,#leftpath do
+ local left = leftpath[i].x_coord
+ local right = rightpath[i].x_coord
+ local hsize = right - left - (texdimen.backspace + texdimen.cutspace)*number.dimenfactors.bp
+ shape[#shape+1] = string.format("%sbp %sbp",left,hsize)
+ end
+ -- print(table.serialize(shape))
+ -- context.parshape(string.format("%s %s ",#shape,table.concat(shape," ")))
+ context("\\parshape %s %s ",#shape,table.concat(shape," "))
+ end
+\stopluacode
+
+\nopenalties \dontcomplain
+
+\setupwhitespace[none]
+
+\startsetups document:start
+ \bgroup
+ \let\crlf\endgraf % \par in a mp textext doesn't work well
+ \startstandardmakeup
+ % dummy page
+ \stopstandardmakeup
+ \egroup
+\stopsetups
+
+\unexpanded\def\StartText#1#2% for old times sake
+ {\startdocument[title={#1},subtitle={#2}]}
+
+\unexpanded\def\StopText
+ {\stopdocument
+ \setupdocument[title=,topic=]}
+
+\unexpanded\def\StartItems#1%
+ {\setupdocument[topic={#1}]
+ \startstandardmakeup[top=,bottom=\vss]
+ \startelement[items][title={#1}]%
+ \ctxlua{document.SetParShape()}
+ \StartSteps}
+
+\unexpanded\def\StopItems
+ {\StopSteps
+ \stopelement
+ \stopstandardmakeup}
+
+\unexpanded\def\StartItem
+ {\dontleavehmode
+ \startelement[item]%
+ \llap{\symbol[mysymbol]\quad}% graphic
+ \ignorespaces}
+
+\unexpanded\def\StopItem
+ {\removeunwantedspaces
+ \nobreak
+ \crlf
+ \stopelement
+ \crlf
+ \FlushStep}
+
+\unexpanded\def\ShapeParagraph
+ {\ctxlua{document.SetParShape()}}
+
+% no parshape yet
+
+\unexpanded\def\StartParagraphs#1%
+ {\setupdocument[topic={#1}]
+ \startstandardmakeup[top=,bottom=\vss]
+ %\ctxlua{document.SetParShape()}
+ \startelement[paragraphs]%
+ \StartSteps}
+
+\unexpanded\def\StopParagraphs
+ {\StopSteps
+ \stopelement
+ \stopstandardmakeup}
+
+\unexpanded\def\StartParagraph
+ {\startelement[paragraph]}
+
+\unexpanded\def\StopParagraph
+ {\par
+ \stopelement
+ \FlushStep}
+
+% experiment .. likely to change
+
+\setelementexporttag[items] [nature][display]
+\setelementexporttag[item] [nature][mixed]
+\setelementexporttag[paragraphs][nature][display]
+\setelementexporttag[paragraph] [nature][mixed]
+
+\stopmodule
+
+\continueifinputfile{s-present-wobbling.mkiv}
+
+\usemodule[present-common]
+
+%inputpresentationfile{bachotex/2010/bachotex-2010-clash.tex}
+\inputpresentationfile{bachotex/2010/bachotex-2010-move.tex}
diff --git a/tex/context/modules/mkiv/s-syntax.mkiv b/tex/context/modules/mkiv/s-syntax.mkiv
index 96312f771..d9492af3e 100644
--- a/tex/context/modules/mkiv/s-syntax.mkiv
+++ b/tex/context/modules/mkiv/s-syntax.mkiv
@@ -31,7 +31,7 @@
\unexpanded\def\module_syntax_Tex #1{\Sugar{\type{#1}}}
\unexpanded\def\module_syntax_Literal #1{\Sugar{\type{#1}}}
\unexpanded\def\module_syntax_Syntax #1{\strut\kern-.25em{#1}\kern-.25em}
-\unexpanded\def\module_syntax_Next {\crlf\hbox to 2em{}\nobreak}
+\unexpanded\def\module_syntax_Next {\par\strut\kern4em} % {\crlf\hbox to 2em{}\nobreak}
\unexpanded\def\module_syntax_Whatever #1{\Sugar{\mathematics{(\hbox{#1})}}}
\unexpanded\def\module_syntax_Quote #1{\Sugar{\quote{#1}}}
\unexpanded\def\module_syntax_Or {\Sugar{\module_syntax_Indent{\mathematics{\vert}}}}
@@ -70,6 +70,7 @@
\let\L \module_syntax_Literal
\let\S \module_syntax_Something
\let\M \module_syntax_Means
+ \let\N \module_syntax_Next
\let\O \module_syntax_Or
\let\Q \module_syntax_Quote
\let\LB \module_syntax_Lbrace
diff --git a/tex/context/modules/mkiv/s-xml-analyzers.lua b/tex/context/modules/mkiv/s-xml-analyzers.lua
index c356d4c37..6e7f7f2ba 100644
--- a/tex/context/modules/mkiv/s-xml-analyzers.lua
+++ b/tex/context/modules/mkiv/s-xml-analyzers.lua
@@ -11,6 +11,8 @@ moduledata.xml.analyzers = moduledata.xml.analyzers or { }
local next, type = next, type
local utfvalues = string.utfvalues
+local formatters = string.formatters
+local setmetatableindex = table.setmetatableindex
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
@@ -43,28 +45,29 @@ local function analyze(filename)
attr = { }
ents = { }
- table.setmetatableindex(tags,function(t,k)
+ local function att(t,k)
+ local v = setmetatableindex("number")
+ t[k] = v
+ return v
+ end
+
+ local function add(t,k)
local v = {
n = 0,
- attributes = { },
- children = { },
+ attributes = setmetatableindex(att),
+ children = setmetatableindex(add),
}
t[k] = v
return v
- end)
+ end
- table.setmetatableindex(char,function(t,k)
- t[k] = 0
- return 0
- end)
+ setmetatableindex(tags,add)
- table.setmetatableindex(attr,function(t,k)
- char[k] = char[k] or 0
- t[k] = 0
- return 0
- end)
+ setmetatableindex(ents,"number")
+ setmetatableindex(char,"number")
- table.setmetatableindex(ents,function(t,k)
+ setmetatableindex(attr,function(t,k)
+ char[k] = char[k] or 0
t[k] = 0
return 0
end)
@@ -85,24 +88,25 @@ local function analyze(filename)
local tg = e.tg
local tag = tags[tg]
tag.n = tag.n + 1
+ local children = parent and tags[parent].children[tg]
+ local childatt = children and children.attributes
+ if children then
+ children.n = children.n + 1
+ end
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 }
+ a[v] = a[v] + 1
+ if childatt then
+ local a = childatt[k]
+ a[v] = a[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]
@@ -119,7 +123,11 @@ local function analyze(filename)
end
for i=1,#filename do
- local root = xml.load(filename[i])
+ local name = filename[i]
+ local root = xml.load(name)
+ --
+ logs.report("xml analyze","loaded: %s",name)
+ --
collect(root)
--
local names = root.statistics.entities.names
@@ -128,10 +136,10 @@ local function analyze(filename)
end
end
- table.setmetatableindex(tags,nil)
- table.setmetatableindex(char,nil)
- table.setmetatableindex(attr,nil)
- table.setmetatableindex(ents,nil)
+ setmetatableindex(tags,nil)
+ setmetatableindex(char,nil)
+ setmetatableindex(attr,nil)
+ setmetatableindex(ents,nil)
end
@@ -153,16 +161,20 @@ function moduledata.xml.analyzers.structure(filename)
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()
+ local t = { }
+ for k, v in next, children do
+ t[k] = v.n
+ end
+ NC() context.bold("children") NC() context.puretext(sequenced(t)) 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()
+ NC() context("@%s",attribute) NC() context("%s different values",n) NC() NR()
else
- NC() context(attribute) NC() context.puretext(sequenced(values)) NC() NR()
+ NC() context("@%s",attribute) NC() context.puretext(sequenced(values)) NC() NR()
end
end
end
@@ -195,4 +207,121 @@ function moduledata.xml.analyzers.entities(filename)
context.stoptabulate()
end
+local f_parent_s = formatters["xml:%s"]
+local f_parent_n = formatters["\\startxmlsetups xml:%s\n \\xmlflush{#1}\n\\stopxmlsetups"]
+local f_parent_a = formatters["\\startxmlsetups xml:%s\n %% @ % t\n \\xmlflush{#1}\n\\stopxmlsetups"]
+local f_child_s = formatters["xml:%s:%s"]
+local f_child_n = formatters["\\startxmlsetups xml:%s:%s\n \\xmlflush{#1}\n\\stopxmlsetups"]
+local f_child_a = formatters["\\startxmlsetups xml:%s:%s\n %% @ % t\n \\xmlflush{#1}\n\\stopxmlsetups"]
+
+local f_template = formatters [ [[
+%% file: %s
+
+%% Beware, these are all (first level) setups. If you have a complex document
+%% it often makes sense to use \\xmlfilter or similar local filter options.
+
+%% presets
+
+\startxmlsetup xml:presets:all
+ \xmlsetsetups {#1} {
+ %s
+ }
+\stopxmlsetups
+
+%% setups
+
+%s
+]] ]
+
+function moduledata.xml.analyzers.allsetups(filename,usedname)
+ analyze(filename)
+ local result = { }
+ local setups = { }
+ for name, data in table.sortedhash(tags) do
+ local children = data.children
+ local attributes = data.attributes
+ if next(attributes) then
+ result[#result+1] = f_parent_a(name,sortedkeys(attributes))
+ else
+ result[#result+1] = f_parent_n(name)
+ end
+ setups[#setups+1] = f_parent_s(name)
+ if next(children) then
+ for k, v in sortedhash(children) do
+ local attributes = v.attributes
+ if next(attributes) then
+ result[#result+1] = f_child_a(name,k,sortedkeys(attributes))
+ else
+ result[#result+1] = f_child_n(name,k)
+ end
+ setups[#setups+1] = f_child_s(name,k)
+ end
+ end
+ end
+ table.sort(setups)
+ --
+ if type(filename) == "table" then
+ filename = concat(filename," | ")
+ end
+ --
+ usedname = usedname or "xml-analyze-template.tex"
+ --
+ io.savedata(usedname,f_template(filename,concat(setups,"|\n "),concat(result,"\n\n")))
+ logs.report("xml analyze","presets saved in: %s",usedname)
+end
+
+-- example:
+
+-- local t = { }
+-- local x = xml.load("music-collection.xml")
+-- for c in xml.collected(x,"//*") do
+-- if not c.special and not t[c.tg] then
+-- t[c.tg] = true
+-- end
+-- end
+-- inspect(table.sortedkeys(t))
+
+-- xml.finalizers.taglist = function(collected)
+-- local t = { }
+-- for i=1,#collected do
+-- local c = collected[i]
+-- if not c.special then
+-- local tg = c.tg
+-- if tg and not t[tg] then
+-- t[tg] = true
+-- end
+-- end
+-- end
+-- return t
+-- end
+-- local x = xml.load("music-collection.xml")
+-- inspect(table.sortedkeys(xml.applylpath(x,"//*/taglist()")))
+
+-- xml.finalizers.taglist = function(collected,parenttoo)
+-- local t = { }
+-- for i=1,#collected do
+-- local c = collected[i]
+-- if not c.special then
+-- local tg = c.tg
+-- if tg and not t[tg] then
+-- t[tg] = true
+-- end
+-- if parenttoo then
+-- local p = c.__p__
+-- if p and not p.special then
+-- local tg = p.tg .. ":" .. tg
+-- if tg and not t[tg] then
+-- t[tg] = true
+-- end
+-- end
+-- end
+-- end
+-- end
+-- return t
+-- end
+
+-- local x = xml.load("music-collection.xml")
+-- inspect(table.sortedkeys(xml.applylpath(x,"//*/taglist()")))
+-- local x = xml.load("music-collection.xml")
+-- inspect(table.sortedkeys(xml.applylpath(x,"//*/taglist(true)")))
diff --git a/tex/context/modules/mkiv/s-xml-analyzers.mkiv b/tex/context/modules/mkiv/s-xml-analyzers.mkiv
index af11fc984..4104f023a 100644
--- a/tex/context/modules/mkiv/s-xml-analyzers.mkiv
+++ b/tex/context/modules/mkiv/s-xml-analyzers.mkiv
@@ -18,6 +18,7 @@
\installmodulecommandluasingle \showxmlstructure {moduledata.xml.analyzers.structure}
\installmodulecommandluasingle \showxmlcharacters {moduledata.xml.analyzers.characters}
\installmodulecommandluasingle \showxmlentities {moduledata.xml.analyzers.entities}
+\installmodulecommandluasingle \showxmlallsetups {moduledata.xml.analyzers.allsetups}
\stopmodule
@@ -33,6 +34,9 @@
\starttext
- \showxmlcharacters[\FileName]
+ \showxmlstructure [\FileName] \page
+ \showxmlentities [\FileName] \page
+ \showxmlcharacters[\FileName] \page
+ \showxmlallsetups [\FileName] \page
\stoptext
diff --git a/tex/context/modules/mkiv/x-asciimath.lua b/tex/context/modules/mkiv/x-asciimath.lua
index e0a4a714b..677d3519b 100644
--- a/tex/context/modules/mkiv/x-asciimath.lua
+++ b/tex/context/modules/mkiv/x-asciimath.lua
@@ -295,8 +295,8 @@ local reserved = {
["sigma"] = { true, "σ" },
["tau"] = { true, "τ" },
["upsilon"] = { true, "υ" },
- ["phi"] = { true, "φ" },
- ["varphi"] = { true, "ϕ" },
+ ["phi"] = { true, "ϕ" },
+ ["varphi"] = { true, "φ" },
["chi"] = { true, "χ" },
["psi"] = { true, "ψ" },
["omega"] = { true, "ω" },
@@ -1274,6 +1274,15 @@ local function collapse_bars(t)
i = i + 1
end
if l then
+ -- problem: we can have a proper nesting
+local d = false
+for i=1,m do
+ if find(t[i],"\\left") then
+ d = true
+ break
+ end
+end
+if not d then
local tt = { s_lnothing } -- space fools final checker
local tm = 1
for i=1,m do
@@ -1290,6 +1299,7 @@ local function collapse_bars(t)
tt[tm] = s_rnothing -- space fools final checker
m = tm
t = tt
+end
elseif m < n then
for i=n,m+1,-1 do
t[i] = nil
@@ -1739,7 +1749,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_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
diff --git a/tex/context/modules/mkiv/x-asciimath.mkiv b/tex/context/modules/mkiv/x-asciimath.mkiv
index d3a629c81..5c96d4f8a 100644
--- a/tex/context/modules/mkiv/x-asciimath.mkiv
+++ b/tex/context/modules/mkiv/x-asciimath.mkiv
@@ -299,7 +299,7 @@
%D This will become an extra.
-\showframe
+\starttext
\setups[asciimath:layout]
@@ -312,10 +312,12 @@
% % \ShowAsciiMathSave[e:/temporary/asciimath/asciimath.lua]
% \stoptext
-\starttext
-\unexpanded\def\MyAsciiMath#1{\startformula\asciimath{#1}\stopformula}
-\startlines
-\MyAsciiMath{x^2 / 10 // z_12^34 / 20}
+\subject{Some tests}
+
+% \unexpanded\def\MyAsciiMath#1{\startformula\asciimath{#1}\stopformula}
+%
+% \startlines
+% \MyAsciiMath{x^2 / 10 // z_12^34 / 20}
% \MyAsciiMath{{:{:x^2:} / 10:} // {:{:z_12^34 :} / 20:}}
% \MyAsciiMath{x^2+y_1+z_12^34}
% \MyAsciiMath{sin^-1(x)}
@@ -399,38 +401,82 @@
% \MyAsciiMath{x^ (-1 1/2) =1/x^ (1 1/2)=1/ (x^1*x^ (1/2)) =1/ (xsqrt(x))}
% \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
+% \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
+
+% \definemixedcolumns[asciimath][n=3,balance=yes]
+%
+% \startluacode
+% local asciimath = moduledata.asciimath
+% local variables = { "w", "x", "y", "z", "p", "q", "r" }
+% local constants = { "a", "b", "c" }
+% local functions = { "g", "h", "i" }
+% local iterators = { "i", "j", "k" }
+% local vectors = { "A", "B", "C", "D", "E", "P", "Q", "R" }
+% local reserved = { }
+% local reserved = {
+% -- "vdots","ddots","oint",
+% "grad", "prod", "prop", "sube", "supe", "sum",
+% "vvv", "nnn", "uuu", "sub", "sup",
+% "iff", "int", "del",
+% "sinh", "cosh", "tanh", "sin", "cos", "tan", "csc", "sec", "cot",
+% "atan", "asin", "acos", "arctan", "arcsin", "arccos",
+% "log", "ln", "det", "lim", "mod", "gcd", -- "lcm",
+% "min", "max",
+% "xx", "in", "ox", "vv", "nn", "uu", "oo", "bb",
+% "not", "and", "or", "if",
+% "AA", "EE", "TT",
+% "sqrt", "root", "frac", "stackrel",
+% "hat", "overbar", "underline", "vec",
+% "dx", "dy", "dz",
+% }
+% for c=1,#constants do
+% for r=1,#reserved do
+% context.startmixedcolumns { "asciimath" }
+% for v1=1,#variables do
+% for v2=1,#variables do
+% local str = constants[c] .. variables[v1] .. reserved[r] .. variables[v2]
+% context.type(str)
+% context.quad()
+% commands.asciimath(str)
+% context.par()
+% end
+% end
+% context.stopmixedcolumns()
+% context.blank()
+% end
+% end
+% \stopluacode
\stoptext
diff --git a/tex/context/modules/mkiv/x-html.mkiv b/tex/context/modules/mkiv/x-html.mkiv
index e1806eb9e..723872dfd 100644
--- a/tex/context/modules/mkiv/x-html.mkiv
+++ b/tex/context/modules/mkiv/x-html.mkiv
@@ -148,9 +148,11 @@
%
% we can also use \xmlmap for border etc
+% \registerctxluafile{lxml-css}{1.001}
+
\starttexdefinition cssgetsinglepadding #1
\ctxlua {
- context((moduledata.css.padding(
+ context((xml.css.padding(
"#1",
\number\dimexpr0.1ex,
\number\dimexpr0.01\hsize,
diff --git a/tex/context/modules/mkiv/x-math-svg.mkvi b/tex/context/modules/mkiv/x-math-svg.mkvi
new file mode 100644
index 000000000..4645f75d8
--- /dev/null
+++ b/tex/context/modules/mkiv/x-math-svg.mkvi
@@ -0,0 +1,65 @@
+%D \module
+%D [ file=x-math-svg,
+%D version=2014.09.19,
+%D title=\CONTEXT\ XML Modules,
+%D subtitle=\MATHML\ to \SVG,
+%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 XML Macros / MathML to SVG Converter}
+
+\usemodule[x][mathml]
+
+\registerctxluafile{x-math-svg}{}
+
+\starttexdefinition MakeSVGMath #index#page#mode
+ \setbox\scratchbox\hbox\bgroup
+ \xmlprocessbuffer{main}{math-#page}{}
+ \egroup
+ \ctxlua {
+ moduledata.svgmath.register(#index, #page, {
+ mode = "#mode",
+ width = \number\wd\scratchbox,
+ height = \number\ht\scratchbox,
+ depth = \number\dp\scratchbox,
+ } )
+ }
+ \startTEXpage
+ \box\scratchbox
+ \stopTEXpage
+\stoptexdefinition
+
+\starttexdefinition ReuseSVGMath #index#page
+ \ctxlua {
+ moduledata.svgmath.register(#index,#page)
+ }
+\stoptexdefinition
+
+% assume the same font .. what to do with size
+
+\startluacode
+
+ local svgstyle = document.arguments.svgstyle or ""
+
+ if type(svgstyle) == "string" and svgstyle ~= "" then
+ context.environment { svgstyle }
+ else
+ context.setupbodyfont { "pagella" }
+ end
+
+\stopluacode
+
+% \continueifinputfile{x-math-svg.mkvi}
+
+\starttext
+
+ \startluacode
+ moduledata.svgmath.process(environment.arguments.inputfile)
+ \stopluacode
+
+\stoptext
diff --git a/tex/context/modules/mkiv/x-mathml.lua b/tex/context/modules/mkiv/x-mathml.lua
index 7d0b42d21..9650afab8 100644
--- a/tex/context/modules/mkiv/x-mathml.lua
+++ b/tex/context/modules/mkiv/x-mathml.lua
@@ -187,6 +187,7 @@ local i_replacements = {
["true"] = "{\\mathrm true}",
["declare"] = "{\\mathrm declare}",
["as"] = "{\\mathrm as}",
+
}
-- we could use a metatable or when accessing fallback on the
diff --git a/tex/context/modules/mkiv/x-mathml.mkiv b/tex/context/modules/mkiv/x-mathml.mkiv
index a5be5ddb0..50d31da0e 100644
--- a/tex/context/modules/mkiv/x-mathml.mkiv
+++ b/tex/context/modules/mkiv/x-mathml.mkiv
@@ -1,6 +1,6 @@
%D \module
%D [ file=x-mathml,
-%D version=2008.05.29,
+%D version=2008.05.29, (evolved from pre 2000 code)
%D title=\CONTEXT\ XML Modules,
%D subtitle=\MATHML,
%D author=Hans Hagen,
@@ -13,20 +13,14 @@
% \xmlfilter{#1}{/*/name()} -> \xmltag
-% This module is under construction and will be cleaned up. We use a funny mix of
-% xml, tex and lua. I could rewrite the lot but it also shows how context evolves.
+% This implementation looks like a hack ... this is because we deal with all weird
+% cases we ran into, including abuse that was supposed to render ok (even if it
+% didn't in other renderers) .. it was simply expected to work that way.
%
-% I might end up with a lua-only implementation some day. I must find a good reason
-% to spend time on it. In fact, it might even be more messy.
-%
-% no m:text strip (needs checking, maybe nbsp is mandate
-%
-% todo: more will be moved to lua (less hassle)
-% todo: move left/right to the lua end
-%
-% this implememation looks like a hack ... this is because we deal with all weird cases we
-% ran into, including abuse that was supposed to render ok (even if it didn't in other
-% renderers) .. it was simply expected to work that way.
+% So, consider this module to be under constant construction and clean up. We still
+% use a funny mix of xml, tex and lua. I could rewrite the lot but it also shows how
+% context evolves. I might end up with a lua-only implementation some day, but I must
+% find a real good reason to spend time on it as so far it never paid back.
\writestatus{loading}{ConTeXt XML Macros / MathML Renderer}
@@ -210,7 +204,7 @@
%D The second implementation expanded the whole math sequence
%D into an internal \TEX\ representation. This is a rather clean
%D and fast process. Filtering and testing takes place by
-%D redefining teh internal representation macros.
+%D redefining the internal representation macros.
%D
%D The third implementation may look a bit more messy in some
%D respects. This is because in \TEX\ it's not that trivial to
@@ -1855,9 +1849,13 @@
\let\mmlfrac\frac
\xmlmapvalue {mml:l} {+} {\let\mmlfrac\sfrac}
+\xmlmapvalue {mml:d} {true} {\displaystyle}
+\xmlmapvalue {mml:d} {false} {\textstyle} % or whatever
+
% todo: displaystyle=true/false (or whatever else shows up)
\starttexdefinition setmmlmathstyle #1
+ \xmlval{mml:d}{\xmlatt{#1}{displaystyle}}\empty % was: \mmmr
\xmlval{mml:s}{\xmlatt{#1}{mathvariant}}\empty % was: \mmmr
\stoptexdefinition
@@ -2042,7 +2040,11 @@
\expanded{\doifelseinset {mml:enclose:radical} {\mmlmenclosenotation}} {
\sqrt{\xmlflush{#1}}
} {
- \xmlflush{#1}
+ \expanded{\doifelseinset {mml:enclose:rule} {\mmlmenclosenotation}} {
+ \overline{\strut\xmlflush{#1}}
+ } {
+ \xmlflush{#1}
+ }
}
}
}
@@ -2270,9 +2272,9 @@
\def\mmlextensible#1{\ctxmodulemathml{extensible(\!!bs#1\!!es)}}
-\definemathtriplet [\v!mathematics] [mmlovertriplet] % or will we use a special instance
-\definemathtriplet [\v!mathematics] [mmlundertriplet] % or will we use a special instance
-\definemathtriplet [\v!mathematics] [mmldoubletriplet] % or will we use a special instance
+\definemathtriplet [\v!mathematics] [mmlovertriplet] % or will we use a special instance
+\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 : will become core helper (speed up too)
@@ -2321,9 +2323,15 @@
\startxmlsetups mml:mover
\edef\mmlbasetoken{\mmlextensible{\xmlraw{#1}{/mml:*[1]}}}% /text()
- \doifelseutfmathfiller\mmlbasetoken \mmloverbasefiller \mmloveraccentchecker {#1}
+ \doifelseutfmathlimop\mmlbasetoken
+ {\mmllimopover{#1}}
+ {\doifelseutfmathfiller\mmlbasetoken \mmloverbasefiller \mmloveraccentchecker {#1}}
\stopxmlsetups
+\starttexdefinition mmllimopover #1
+ \mmlbasetoken ^{\mmlfencedsecond{#1}}
+\stoptexdefinition
+
% munder
\starttexdefinition unexpanded mmlunderbelow #1
@@ -2353,9 +2361,15 @@
\startxmlsetups mml:munder
\edef\mmlbasetoken{\mmlextensible{\xmlraw{#1}{/mml:*[1]}}}% /text()
- \doifelseutfmathfiller\mmlbasetoken \mmlunderbasefiller \mmlunderaccentchecker {#1}
+ \doifelseutfmathlimop\mmlbasetoken
+ {\mmllimopunder{#1}}
+ {\doifelseutfmathfiller\mmlbasetoken \mmlunderbasefiller \mmlunderaccentchecker {#1}}
\stopxmlsetups
+\starttexdefinition mmllimopunder #1
+ \mmlbasetoken _{\mmlfencedsecond{#1}}
+\stoptexdefinition
+
% munderover
\starttexdefinition unexpanded mmlunderoveraccentcheckerUO #1
@@ -2414,11 +2428,18 @@
\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}
+ \doifelseutfmathlimop\mmlbasetoken
+ {\mmllimopunderover{#1}}
+ {\doifelseutfmathfiller\mmlbasetoken \mmlunderoverbasefiller \mmlunderoveraccentchecker {#1}}
\stopxmlsetups
+\starttexdefinition mmllimopunderover #1
+ \mmlbasetoken ^{\mmlfencedthird{#1}}_{\mmlfencedsecond{#1}}
+\stoptexdefinition
+
% tables (mml:mtable, mml:mtr, mml:mlabledtr, mml:mtd)
\startxmlsetups mml:mtable % some more attributes need to be supported
@@ -2430,7 +2451,7 @@
\stopxmlsetups
\startxmlsetups mml:mcolumn
- \ctxmodulemathml{mcolumn("#1")}
+ \vbox{\ctxmodulemathml{mcolumn("#1")}}% needs checking
\stopxmlsetups
\def\mmlsetfakewidth#1{\setbox\scratchbox\hbox{#1}\scratchdimen\wd\scratchbox}
diff --git a/tex/context/modules/mkiv/x-setups-basics.mkiv b/tex/context/modules/mkiv/x-setups-basics.mkiv
index 4a7859c7f..1c0eb8346 100644
--- a/tex/context/modules/mkiv/x-setups-basics.mkiv
+++ b/tex/context/modules/mkiv/x-setups-basics.mkiv
@@ -25,6 +25,8 @@
%D Currently we load the \XML\ file and when not in the english interface we just
%D remap the relevant words to their translation.
+%D Todo: use lua instead of synonyms
+
\unprotect
\defineregister
@@ -45,7 +47,7 @@
[\c!width=\hsize,
\c!height=\v!fit,
\c!align=\v!right,
- \c!offset=0.75\emwidth]
+ \c!offset=0.75\emwidth] % \exheight
\popmacro\setuptext
@@ -69,7 +71,8 @@
\unexpanded\def\setupalwcolor{}
\unexpanded\def\setupoptcolor{darkgray}
-\unexpanded\def\setupvarword#1{{\sl\detokenize{#1}}}
+% \unexpanded\def\setupvarword#1{{\sl\detokenize{#1}}}
+\unexpanded\def\setupvarword#1{\detokenize{#1}}
\unexpanded\def\setupintword#1{\WORD{\detokenize{#1}}}
\unexpanded\def\setuptxtword#1{\detokenize{#1}}
@@ -119,16 +122,68 @@
}
\stopxmlsetups
+\startxmlsetups xml:setups:assemblename:instance
+ \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
+% \doifelse {\xmlatt{#1}{variant}} {instance} {
+% \def\docommand##1%
+% {\def\currentSETUPname{##1}%
+% \xmlsetup{#1}{xml:setups:assemblename:instance}
+% \expanded{\texcommand[stp:x:\currentSETUPfullname]{{#1}{##1}}}}%
+% \processcommacommand[\clf_getinstances{#1}]\docommand
+% } {
+% \xmlsetup{#1}{xml:setups:assemblename}
+% % not really needed if we just use setups
+% \expanded{\texcommand[stp:x:\currentSETUPfullname]{{#1}{}}}
+% }
+% \stopxmlsetups
+
\startxmlsetups xml:setups:register
+ \doif {\xmlatt{#1}{variant}} {instance} {
+ \def\docommand##1%
+ {\xmlsetup{#1}{xml:setups:assemblename:instance}
+ \expanded{\texcommand[stp:x:\currentSETUPfullname:##1]{{#1}{##1}}}}%
+ \processcommacommand[\clf_getinstances{#1}]\docommand
+ }
\xmlsetup{#1}{xml:setups:assemblename}
% not really needed if we just use setups
- \expanded{\texcommand[stp:x:\currentSETUPfullname]{#1}}
+ \expanded{\texcommand[stp:x:\currentSETUPfullname]{{#1}{}}}
\stopxmlsetups
\startluacode
local find, gsub = string.find, string.gsub
+ local xmlcollected = xml.collected
+ local xmlcount = xml.count
+ local xmlfirst = xml.first
+
+ local lxmlgetid = lxml.getid
+ local lxmlflush = lxml.flush
+
local context = context
local setupvarword = context.formatted.setupvarword
@@ -146,12 +201,11 @@
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
+ local x = lxmlgetid(id)
+ for c in xmlcollected(x,"cd:interface/cd:define") do
definitions[c.at.name] = c
end
-
- for c in xml.collected(x,"cd:interface/cd:interface") do
+ for c in xmlcollected(x,"cd:interface/cd:interface") do
c.at.file = c.__f__
c.at["xmlns:cd"] = nil
-- c.dt[#c.dt+1] = " "
@@ -166,22 +220,23 @@
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]
+ local function replace(pattern,attribute,one,two,three)
+ for e in xmlcollected(x,pattern) do
+ local a = e.at
+ local t = a[attribute]
if t then
- local c = one[t] or (two and two[t])
+ local c = one[t] or (two and two[t]) or (three and three[t])
if c then
local v = c[interface]
if v then
- e.at[attribute] = v
+ a[attribute] = v
end
end
end
end
end
- replace('cd:command', 'name', commands, elements)
+ replace('cd:command', 'name', commands, elements, variables)
replace('cd:string', 'value', commands, elements)
replace('cd:variable' , 'value', variables)
@@ -191,19 +246,74 @@
replace('cd:variable', 'type', variables)
replace('cd:inherit', 'name', commands, elements)
+ replace('cd:instances/cd:constant', 'value', variables)
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)
+ --
+ -- the reload is a hack .. we could make a handler instead
+ --
+ local filename = "context-" .. interface .. ".xml"
+ local xmlroot = x
+ local xmlblob = tostring(xmlroot)
+ io.savedata(filename,xmlblob)
+ xmlroot = xml.load(filename)
+ --
+ local definitions = { }
+ for e in xml.collected(xmlroot,"cd:interface/cd:define") do
+ definitions[e.at.name] = e.dt
+ end
+ local function resolve(root)
+ for e in xmlcollected(root,"*") do
+ if e.tg == "resolve" then
+ local name = e.at.name or ""
+ local resolved = definitions[name]
+ if resolved then
+ e.__p__.dt[e.ni] = resolved
+ resolve(resolved)
+ -- logs.report("setups","resolved: %a",name)
+ else
+ logs.report("setups","unable to resolve: %a",name)
+ end
+ end
+ end
+ end
+ resolve(xmlroot)
+ for e in xml.collected(xmlroot,"cd:interface/cd:define") do
+ e.__p__.dt[e.ni] = ""
+ end
+ xml.delete(xmlroot,"/cd:interface/cd:interface/cd:interface/..")
+ --
+ xmlblob = xml.tostring(xmlroot)
+ io.savedata(filename,xmlblob)
+ xmlroot = xml.load(filename)
+ --
+ local spacer = utilities.strings.newrepeater(" ")
+ local function simplify(dt,n)
+ local nt, nn = { }, 0
+ for i=1,#dt do
+ local d = dt[i]
+ if d.special then
+ --
+ elseif type(d) ~= "string" then
+ d.dt = simplify(d.dt,n+1)
+ nn = nn + 1 nt[nn] = "\n" .. spacer[n]
+ nn = nn + 1 nt[nn] = d
+ nn = nn + 1 nt[nn] = "\n" .. spacer[n-1]
+ end
+ end
+ return nn == 0 and "" or nt
+ end
+ xmlroot.dt = simplify(xmlroot.dt,0)
+ --
+ xmlblob = "<?xml version='1.0'?>\n<!-- expanded and compacted i-context.xml -->\n" .. xml.tostring(xmlroot)
+ xmlblob = gsub(xmlblob,"\n *\n","\n")
+ io.savedata(filename,xmlblob)
end
-
end
function moduledata.setups.resolved(name)
- lxml.flush(definitions[name])
+ lxmlflush(definitions[name])
end
function xml.finalizers.s_count(collected)
@@ -213,7 +323,7 @@
local tg = c.tg
if tg == "resolve" then
local d = definitions[c.at.name]
- n = n + xml.count(d,"/*")
+ n = n + xmlcount(d,"/*")
elseif tg == "delimiter" then
-- skip
else
@@ -223,13 +333,30 @@
context(n)
end
+ local function getinstances(id)
+ local t = { }
+ local x = lxmlgetid(id)
+ local r = xmlfirst(x,"/instances/resolve")
+ if r then
+ local x = setups.definitions[r.at.name]
+ for c in xmlcollected(x,"constant") do
+ t[#t+1] = c.at.value
+ end
+ else
+ for c in xmlcollected(x,"/instances/constant") do
+ t[#t+1] = c.at.value
+ end
+ end
+ return t
+ end
+
interfaces.implement {
name = "getsetupstring",
actions = function(s)
local g = getsetupstring(s)
if not find(s,"^cd:") then
setuptxtword(g)
- elseif find(s,"%-.$") then
+ elseif find(s,"%-.$") then -- singular | plural
setupvarword(g)
else
setupintword(g) -- cap
@@ -246,6 +373,12 @@
arguments = "string",
}
+ interfaces.implement {
+ name = "getinstances",
+ actions = { getinstances, function(t) context("%,t",t) end },
+ overload = true,
+ arguments = { "string" },
+ }
\stopluacode
% <?xml version="1.0" encoding="UTF-8"?>
@@ -297,13 +430,20 @@
\let \m_cmd_current_hash \empty
\let \m_cmd_current_file \empty
+% todo: use different names (and a backward compatible extra module then)
+
\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}
+ {%(#1)(#2)(#3)\par
+ \edef\m_cmd_instance{\secondoftwoarguments#3}%
+ \c_cmd_kind\plustwo
+ \xmlsetup{\firstoftwoarguments#3}{xml:setups:typeset}
+ \let\m_cmd_instance\empty
+ \par}
\installtextracker
{cmd.showsetup}
@@ -327,7 +467,12 @@
\fi
\startelement[setup][name=#1]%
\startelement[noexport][comment={setup definition #1}]%
- \xmlsetup{\rawsynonymname{texcommand}{stp:x:#1}}{xml:setups:typeset}
+ \edef\cmd_id{\rawsynonymname{texcommand}{stp:x:#1}}%
+ \ifx\cmd_id\empty
+ missing: stp:x:#1
+ \else
+ \xmlsetup{\expandafter\firstoftwoarguments\cmd_id}{xml:setups:typeset}
+ \fi
\stopelement
\stopelement}
@@ -358,8 +503,16 @@
\xmlatt{#1}{value}
\stopxmlsetups
+\startxmlsetups xml:setups:make:instance
+ \ifx\m_cmd_instance\empty
+ \setupintfont{\xmlatt{#1}{value}}
+ \else
+ \m_cmd_instance
+ \fi
+\stopxmlsetups
+
\startxmlsetups xml:setups:make:variable
- \xmlatt{#1}{value}
+ \setupintfont{\xmlatt{#1}{value}}
\stopxmlsetups
\let\m_cmd_current_hash\empty
@@ -368,6 +521,7 @@
\let\m_cmd_name \empty
\let\m_cmd_start \empty
\let\m_cmd_stop \empty
+\let\m_cmd_instance \empty
\startxmlsetups xml:setups:make:prepare
\edef\m_cmd_current_hash{\xmlatt{#1}{hash}}
@@ -375,7 +529,7 @@
\xmldoifelseempty{#1}{/sequence} {
\edef\m_cmd_name{\xmlatt{#1}{name}}
} {
- \edef\m_cmd_name{\xmlfilter{#1}{/sequence/(string|variable)/command(xml:setups:make:*)}}
+ \edef\m_cmd_name{\xmlfilter{#1}{/sequence/(string|variable|instance)/command(xml:setups:make:*)}}
}
\doifelse {\xmlatt{#1}{type}} {environment} {
\doifsomethingelse {\xmlatt{#1}{begin}} {
@@ -474,17 +628,23 @@
\stopxmlsetups
\startxmlsetups xml:setups:instance
- \xmlatt{#1}{value}\enspace
+ \doifelse {\xmltag{#1}} {resolve} {
+ \ctxlua{lxml.command(moduledata.setups.definitions['\xmlatt{#1}{name}'],"constant","xml:setups:instance")}
+ } {
+ \xmlatt{#1}{value}\enskip % we need a break
+ }
\stopxmlsetups
\startxmlsetups xml:setups:typeset:instances
- \xmldoif{#1}{/instances} {
- \godown[.75\lineheight]
- {\ttbf instances:}
- \enspace
- \xmlfilter{#1}{/instances/constant/command(xml:setups:instance)}
- \removeunwantedspaces
- }
+ \ifx\m_cmd_instance\empty
+ \xmldoif{#1}{/instances} {
+ \godown[.75\lineheight]
+ {\ttbf instances:}
+ \enspace
+ \xmlfilter{#1}{/instances/(constant|resolve)/command(xml:setups:instance)}
+ \removeunwantedspaces
+ }
+ \fi
\stopxmlsetups
\startxmlsetups xml:setups:typeset:yes
@@ -742,26 +902,35 @@
\unexpanded\def\show_setup_any#1#2%
{\bgroup
\global\advance\c_cmd_current_argument\plusone
+ \doifelse{\xmlatt{#1}{optional}}{yes}\donetrue\donefalse
\setbox0=\hbox
- {\doifelse{\xmlatt{#1}{list}}{yes}
+ {\ifdone\sl\fi
+ \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}%
+ \ifcase\c_cmd_kind\else
+ \ifcase\c_cmd_maximum_argument \relax
+ \or
+ \raise1.25\exheight\hbox
+ {\txx *}%
+ \else
+ \raise1.25\exheight\hbox
+ {\txx\the\c_cmd_current_argument}%
+ \fi
+ \fi
\hss}%
\setbox4=\hbox to \wd0
{\hss
- \lower2\exheight\hbox
- \bgroup
- \txx
- \doif {\xmlatt{#1}{optional}} {yes}
- {\getsetupstring{cd:optional}}%
- \egroup
- \hss}%
+ \ifdone
+ \lower2\exheight\hbox
+ \bgroup
+ \txx
+ \getsetupstring{cd:optional}%
+ \egroup
+ \hss
+ \fi}%
\ht2\ht\strutbox
\dp4\dp\strutbox
\hskip.5\emwidth
@@ -871,9 +1040,10 @@
}
\blank[\v!big,\v!samepage]
\starttabulate[|l|p|]
+ % no /interface here
\xmlall
{#1}
- {/interface/command[@name=='\currentsetupparametercommand' or @handler=='\currentsetupparametercommand']/arguments/assignments/parameter/command(xml:setups:parameters:value)}
+ {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
@@ -903,6 +1073,15 @@
\let\cmdshortsetup\shortsetup
\let\cmdfullsetup \showsetup
+\unexpanded\def\cmd_with_instance#1#2#3%
+ {\edef\m_cmd_instance{#3}%
+ #1{#2}%
+ \let\m_cmd_instance\empty}
+
+\unexpanded\def\cmdbasicsetupinstance{\cmd_with_instance\cmdbasicsetup}
+\unexpanded\def\cmdshortsetupinstance{\cmd_with_instance\cmdshortsetup}
+\unexpanded\def\cmdfullsetupinstance {\cmd_with_instance\cmdfullsetup }
+
% bonus
\definefloat
@@ -912,7 +1091,13 @@
[definition]
[align=flushright]
-\unexpanded\def\showdefinition#1%
+\unexpanded\def\showdefinition
+ {\doifelsenextoptional\cmd_show_definition_yes\cmd_show_definition_nop}
+
+\unexpanded\def\cmd_show_definition_nop#1%
+ {\cmd_show_definition_yes[#1]}
+
+\unexpanded\def\cmd_show_definition_yes[#1]%
{\placedefinition[here][definition:#1]{\tex{#1}}{\showsetup{#1}}}
\unexpanded\def\definition[#1]%
diff --git a/tex/context/modules/mkiv/x-setups-overview.mkiv b/tex/context/modules/mkiv/x-setups-overview.mkiv
index 8cfe14439..c0047f13a 100644
--- a/tex/context/modules/mkiv/x-setups-overview.mkiv
+++ b/tex/context/modules/mkiv/x-setups-overview.mkiv
@@ -14,6 +14,8 @@
% context --interface=en --global --result=setup-en x-setups-overview.mkiv
+% \enablemode[setups:save]
+
\usemodule[setups-basics]
\unprotect
diff --git a/tex/context/modules/mkiv/x-setups-proofing.mkiv b/tex/context/modules/mkiv/x-setups-proofing.mkiv
index e40ee2ad1..5583b8861 100644
--- a/tex/context/modules/mkiv/x-setups-proofing.mkiv
+++ b/tex/context/modules/mkiv/x-setups-proofing.mkiv
@@ -17,9 +17,6 @@
\unprotect
-\loadsetups
- [\jobname.xml]
-
\setupbodyfont
[10pt]
@@ -45,6 +42,8 @@
\loadsetups[i-common-definitions]
+ \loadsetups[\jobname.xml]
+
\placeeverysetup
\stoptext
diff --git a/tex/context/modules/mkiv/x-steps.mkiv b/tex/context/modules/mkiv/x-steps.mkiv
index 29b3f7eaa..02b4cda77 100644
--- a/tex/context/modules/mkiv/x-steps.mkiv
+++ b/tex/context/modules/mkiv/x-steps.mkiv
@@ -18,6 +18,8 @@
\usemodule[m][steps]
+\endinput
+
\unprotect
\installcorenamespace {xmlstepchart}
@@ -46,40 +48,40 @@
\xmlregistersetup{xml:ct:define}
-\startxmlsetups xml:ct:prep
- \expanded{\prep[\xmltoparameters{#1}]}{\xmlflush{#1}}
-\stopxmlsetups
+% \startxmlsetups xml:ct:prep
+% \normalexpanded{\prep[\xmltoparameters{#1}]}{\xmlflush{#1}}
+% \stopxmlsetups
\startxmlsetups xml:ct:text
- \expanded{\text[\xmltoparameters{#1}]}{\xmlflush{#1}}
+ \normalexpanded{\text[\xmltoparameters{#1}]}{\xmlflush{#1}}
\stopxmlsetups
\startxmlsetups xml:ct:texts
- \expanded{\texts[\xmltoparameters{#1}]}{\xmltext{#1}{/top}} {\xmltext{#1}{/bot}}
+ \normalexpanded{\texts[\xmltoparameters{#1}]}{\xmltext{#1}{/top}} {\xmltext{#1}{/bot}}
\stopxmlsetups
\startxmlsetups xml:ct:cell
- \expanded{\cell[\xmltoparameters{#1}]}{\xmlflush{#1}}
+ \normalexpanded{\cell[\xmltoparameters{#1}]}{\xmlflush{#1}}
\stopxmlsetups
\startxmlsetups xml:ct:cells
- \expanded{\cells[\xmltoparameters{#1}]}{\xmltext{#1}{/top}} {\xmltext{#1}{/bot}}
+ \normalexpanded{\cells[\xmltoparameters{#1}]}{\xmltext{#1}{/top}} {\xmltext{#1}{/bot}}
\stopxmlsetups
\startxmlsetups xml:ct:lines
- \expanded{\startlines[\xmltoparameters{#1}]}
+ \normalexpanded{\startlines[\xmltoparameters{#1}]}
\xmlflush{#1}
\stoplines
\stopxmlsetups
\startxmlsetups xml:ct:steptable
- \expanded{\startSTEPtable[\xmltoparameters{#1}]}
+ \normalexpanded{\startSTEPtable[\xmltoparameters{#1}]}
\xmlflush{#1}
\stopSTEPtable
\stopxmlsetups
\startxmlsetups xml:ct:stepchart
- \expanded{\startSTEPchart[\xmltoparameters{#1}]}
+ \normalexpanded{\startSTEPchart[\xmltoparameters{#1}]}
\xmlflush{#1}
\stopSTEPchart
\stopxmlsetups
diff --git a/tex/context/sample/common/carrol.tex b/tex/context/sample/common/carrol.tex
new file mode 100644
index 000000000..1b653d69c
--- /dev/null
+++ b/tex/context/sample/common/carrol.tex
@@ -0,0 +1,5 @@
+The fraction of fossil olfactory receptor genes is significantly
+higher in all species with full color vision. This suggests that
+the evolution of trichromatic vision --- which allows these
+primates to detect food, mates, and danger with visual cues ---
+has reduced their reliance on the sense of smell.
diff --git a/tex/context/sample/common/douglas.tex b/tex/context/sample/common/douglas.tex
index 838c6d24d..0aa9486e6 100644
--- a/tex/context/sample/common/douglas.tex
+++ b/tex/context/sample/common/douglas.tex
@@ -4,7 +4,7 @@ of his forthcoming books|=|from the typesetting and layout
down to the very shapes of the letters! Seldom has an
author had anything remotely like this power to control the
final appearance of his or her work. Knuth's \TEX\
-typesetting system has become well|-|known and as available in
+typesetting system has become well|-|known and is available in
many countries around the world. By contrast, his
\METAFONT\ system for designing families of typefaces has
not become as well known or as available.
diff --git a/tex/context/sample/common/khatt-en.tex b/tex/context/sample/common/khatt-en.tex
index f994513e7..52891af25 100644
--- a/tex/context/sample/common/khatt-en.tex
+++ b/tex/context/sample/common/khatt-en.tex
@@ -1,4 +1,4 @@
-ʿAlī ibn Abī Ṭālib said to his scribe ʿUbaydullāh ibn Abī Rāfiʿ:
-your inkwell before you, sharpen the edge of your pen, make sure
+ʿAlī ibn Abī Ṭālib said to his scribe ʿUbaydullāh ibn Abī Rāfiʿ: Set
+down your inkwell before you, sharpen the edge of your pen, make sure
there is open space between the lines, and set your letter|-|spacing
closely. Now {\em that} is the way to make the script shine!
diff --git a/tex/context/sample/common/knuth.tex b/tex/context/sample/common/knuth.tex
index 30b6310cc..2f6a2f8e7 100644
--- a/tex/context/sample/common/knuth.tex
+++ b/tex/context/sample/common/knuth.tex
@@ -13,4 +13,4 @@ But a system cannot be successful if it is too strongly
influenced by a single person. Once the initial design is
complete and fairly robust, the real test begins as people
with many different viewpoints undertake their own
-experiments.
+experiments.
diff --git a/tex/context/sample/common/samples.tex b/tex/context/sample/common/samples.tex
index 0201ab318..8d1477e1c 100644
--- a/tex/context/sample/common/samples.tex
+++ b/tex/context/sample/common/samples.tex
@@ -48,6 +48,8 @@ used in testing bibliographic references and citations.
\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
+\NC sapolsky.tex \NC Robert M. Sapolsky \NC Why Zebras Don't Have Ulsters, means for life in the universe,
+ St Martin's Press, 2004 \NC \NR
\stoptabulate
% Tufte: This quote will always produce hyphenated text, apart from the content,
diff --git a/tex/context/sample/common/sapolsky.tex b/tex/context/sample/common/sapolsky.tex
new file mode 100644
index 000000000..37c3ae4f3
--- /dev/null
+++ b/tex/context/sample/common/sapolsky.tex
@@ -0,0 +1,11 @@
+Agriculture is a fairly recent human invention, and in many ways it was one of
+the great stupid moves of all time. Hunter|-|gatherers have thousands of wild
+sources of food to subsist on. Agriculture changed that all, generating an
+overwhelming reliance on a few dozen domesticated food sources, making you
+extremely vulnerable to the next famine, the next locust infestation, the next
+potato blight. Agriculture allowed for stockpiling of surplus resources and thus,
+inevitably, the unequal stockpiling of them --- stratification of society and
+the invention of classes. Thus, it allowed for the invention of poverty. I think
+that the punch line of the primate|-|human difference is that when humans
+invented poverty, they came up with a way of subjugating the low|-|ranking like
+nothing ever seen before in the primate world.
diff --git a/tex/context/test/mkiv/pdf-a2a.mkiv b/tex/context/test/mkiv/pdf-a2a.mkiv
new file mode 100644
index 000000000..eea567f34
--- /dev/null
+++ b/tex/context/test/mkiv/pdf-a2a.mkiv
@@ -0,0 +1,40 @@
+% PDF/A-2a
+
+\enabletrackers[structure.tags,backend.tags]
+
+\setupbackend
+ [format=PDF/A-2a,
+ intent=sRGB IEC61966-2.1, % use <info> entry here; otherwise problems with predefined default profile
+ profile=sRGB.icc, % use <filename> here
+ level=0]
+
+\setuptagging[state=start]
+
+\setupcolors[cmyk=no]
+\definecolor[rgbblack][b=0.01]
+\definecolor[transtest][r=1,g=1,t=.5]
+
+\placebookmarks[chapter][all][force=yes]
+
+\starttext
+
+\starttextcolor[rgbblack]
+
+\startchapter[title=aa,bookmark=bb,list=cc,marking=dd]
+
+Test it
+
+\stopchapter
+
+\stoptextcolor
+
+\hbox\bgroup
+ \blackrule[width=1cm,height=1cm,color=red]
+ \blackrule[width=1cm,height=1cm,color=green]
+ \blackrule[width=1cm,height=1cm,color=blue]
+ \blackrule[width=1cm,height=1cm,color=rgbblack]
+ \blackrule[width=1cm,height=1cm,color=transtest]\hskip-.5cm
+ \blackrule[width=1cm,height=1cm,color=transtest]
+\egroup
+
+\stoptext
diff --git a/tex/context/test/mkiv/pdf-a3a.mkiv b/tex/context/test/mkiv/pdf-a3a.mkiv
new file mode 100644
index 000000000..e7bba6fd8
--- /dev/null
+++ b/tex/context/test/mkiv/pdf-a3a.mkiv
@@ -0,0 +1,43 @@
+% PDF/A-3a
+
+\nopdfcompression
+
+
+\enabletrackers[structure.tags,backend.tags]
+
+\setupbackend
+ [format=PDF/A-3a,
+ intent=sRGB IEC61966-2.1, % use <info> entry here; otherwise problems with predefined default profile
+ profile=sRGB.icc, % use <filename> here
+ level=0]
+
+\setuptagging[state=start]
+
+\setupcolors[cmyk=no]
+\definecolor[rgbblack][b=0.01]
+\definecolor[transtest][r=1,g=1,t=.5]
+
+\placebookmarks[chapter][all][force=yes]
+
+\starttext
+
+\starttextcolor[rgbblack]
+
+\startchapter[title=aa,bookmark=bb,list=cc,marking=dd]
+
+Test it
+
+\stopchapter
+
+\stoptextcolor
+
+\hbox\bgroup
+ \blackrule[width=1cm,height=1cm,color=red]
+ \blackrule[width=1cm,height=1cm,color=green]
+ \blackrule[width=1cm,height=1cm,color=blue]
+ \blackrule[width=1cm,height=1cm,color=rgbblack]
+ \blackrule[width=1cm,height=1cm,color=transtest]\hskip-.5cm
+ \blackrule[width=1cm,height=1cm,color=transtest]
+\egroup
+
+\stoptext
diff --git a/tex/generic/context/luatex/luatex-basics-gen.lua b/tex/generic/context/luatex/luatex-basics-gen.lua
index 2a68b1c18..2be55ccea 100644
--- a/tex/generic/context/luatex/luatex-basics-gen.lua
+++ b/tex/generic/context/luatex/luatex-basics-gen.lua
@@ -97,6 +97,7 @@ local remapper = {
-- fea = "font feature files", -- no longer supported
pfb = "type1 fonts", -- needed for vector loading
afm = "afm",
+ enc = "enc files",
}
function resolvers.findfile(name,fileformat)
@@ -257,45 +258,84 @@ function caches.is_writable(path,name)
return fullname and file.is_writable(fullname)
end
-function caches.loaddata(paths,name)
- for i=1,#paths do
- local data = false
- local luaname, lucname = makefullname(paths[i],name)
- if lucname and not lfs.isfile(lucname) and type(caches.compile) == "function" then
- -- in case we used luatex and luajittex mixed ... lub or luc file
- texio.write(string.format("(compiling luc: %s)",lucname))
- data = loadfile(luaname)
- if data then
- data = data()
- end
- if data then
- caches.compile(data,luaname,lucname)
- return data
- end
- end
- if lucname and lfs.isfile(lucname) then -- maybe also check for size
+-- function caches.loaddata(paths,name)
+-- for i=1,#paths do
+-- local data = false
+-- local luaname, lucname = makefullname(paths[i],name)
+-- if lucname and not lfs.isfile(lucname) and type(caches.compile) == "function" then
+-- -- in case we used luatex and luajittex mixed ... lub or luc file
+-- texio.write(string.format("(compiling luc: %s)",lucname))
+-- data = loadfile(luaname)
+-- if data then
+-- data = data()
+-- end
+-- if data then
+-- caches.compile(data,luaname,lucname)
+-- return data
+-- end
+-- end
+-- if lucname and lfs.isfile(lucname) then -- maybe also check for size
+-- texio.write(string.format("(load luc: %s)",lucname))
+-- data = loadfile(lucname)
+-- if data then
+-- data = data()
+-- end
+-- if data then
+-- return data
+-- else
+-- texio.write(string.format("(loading failed: %s)",lucname))
+-- end
+-- end
+-- if luaname and lfs.isfile(luaname) then
+-- texio.write(string.format("(load lua: %s)",luaname))
+-- data = loadfile(luaname)
+-- if data then
+-- data = data()
+-- end
+-- if data then
+-- return data
+-- end
+-- end
+-- end
+-- end
+
+function caches.loaddata(readables,name,writable)
+ for i=1,#readables do
+ local path = readables[i]
+ local loader = false
+ local luaname, lucname = makefullname(path,name)
+ if lfs.isfile(lucname) then
texio.write(string.format("(load luc: %s)",lucname))
- data = loadfile(lucname)
- if data then
- data = data()
+ loader = loadfile(lucname)
+ end
+ if not loader and lfs.isfile(luaname) then
+ -- can be different paths when we read a file database from disk
+ local luacrap, lucname = makefullname(writable,name)
+ texio.write(string.format("(compiling luc: %s)",lucname))
+ if lfs.isfile(lucname) then
+ loader = loadfile(lucname)
end
- if data then
- return data
+ caches.compile(data,luaname,lucname)
+ if lfs.isfile(lucname) then
+ texio.write(string.format("(load luc: %s)",lucname))
+ loader = loadfile(lucname)
else
texio.write(string.format("(loading failed: %s)",lucname))
end
- end
- if luaname and lfs.isfile(luaname) then
- texio.write(string.format("(load lua: %s)",luaname))
- data = loadfile(luaname)
- if data then
- data = data()
- end
- if data then
- return data
+ if not loader then
+ texio.write(string.format("(load lua: %s)",luaname))
+ loader = loadfile(luaname)
+ else
+ texio.write(string.format("(loading failed: %s)",luaname))
end
end
+ if loader then
+ loader = loader()
+ collectgarbage("step")
+ return loader
+ end
end
+ return false
end
function caches.savedata(path,name,data)
diff --git a/tex/generic/context/luatex/luatex-basics-nod.lua b/tex/generic/context/luatex/luatex-basics-nod.lua
index e7b5ab24f..5571a82ba 100644
--- a/tex/generic/context/luatex/luatex-basics-nod.lua
+++ b/tex/generic/context/luatex/luatex-basics-nod.lua
@@ -71,7 +71,7 @@ nodes.nodecodes = nodecodes
nodes.glyphcodes = glyphcodes
nodes.disccodes = disccodes
-local free_node = node.free
+local flush_node = node.flush_node
local remove_node = node.remove
local new_node = node.new
local traverse_id = node.traverse_id
@@ -95,7 +95,7 @@ function nodes.remove(head, current, free_too)
head, current = remove_node(head,current)
if t then
if free_too then
- free_node(t)
+ flush_node(t)
t = nil
else
t.next, t.prev = nil, nil
@@ -128,12 +128,14 @@ nodes.setattr = setfield
nodes.tostring = node.tostring or tostring
nodes.copy = node.copy
+nodes.copy_node = node.copy
nodes.copy_list = node.copy_list
nodes.delete = node.delete
nodes.dimensions = node.dimensions
nodes.end_of_math = node.end_of_math
nodes.flush_list = node.flush_list
nodes.flush_node = node.flush_node
+nodes.flush = node.flush_node
nodes.free = node.free
nodes.insert_after = node.insert_after
nodes.insert_before = node.insert_before
@@ -149,7 +151,6 @@ nodes.first_glyph = node.first_glyph
nodes.has_glyph = node.has_glyph or node.first_glyph
nodes.current_attr = node.current_attr
-nodes.do_ligature_n = node.do_ligature_n
nodes.has_field = node.has_field
nodes.last_node = node.last_node
nodes.usedlist = node.usedlist
@@ -170,6 +171,8 @@ nodes.mlist_to_hlist = node.mlist_to_hlist
-- we can go nuts (e.g. experimental); this split permits us us keep code
-- used elsewhere stable but at the same time play around in context
+-- much of this will go away
+
local direct = node.direct
local nuts = { }
nodes.nuts = nuts
@@ -200,16 +203,39 @@ 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.setsubtype = direct.setsubtype
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
+nuts.setlist = direct.setlist
+
+nuts.getoffsets = direct.getoffsets or
+ function(n)
+ return getfield(n,"xoffset"), getfield(n,"yoffset")
+ end
+nuts.setoffsets = direct.setoffsets or
+ function(n,x,y)
+ if x then setfield(n,"xoffset",x) end
+ if y then setfield(n,"xoffset",y) end
+ end
+
+nuts.getleader = direct.getleader or function(n) return getfield(n,"leader") end
+nuts.setleader = direct.setleader or function(n,l) setfield(n,"leader",l) end
+nuts.getcomponents = direct.getcomponents or function(n) return getfield(n,"components") end
+nuts.setcomponents = direct.setcomponents or function(n,c) setfield(n,"components",c) end
+nuts.getkern = direct.getkern or function(n) return getfield(n,"kern") end
+nuts.setkern = direct.setkern or function(n,k) setfield(n,"kern",k) end
+nuts.getdir = direct.getkern or function(n) return getfield(n,"dir") end
+nuts.setdir = direct.setkern or function(n,d) setfield(n,"dir",d) end
+nuts.getwidth = direct.getwidth or function(n) return getfield(n,"width") end
+nuts.setwidth = direct.setwidth or function(n,w) return setfield(n,"width",w) end
+nuts.getheight = direct.getheight or function(n) return getfield(n,"height") end
+nuts.setheight = direct.setheight or function(n,h) return setfield(n,"height",h) end
+nuts.getdepth = direct.getdepth or function(n) return getfield(n,"depth") end
+nuts.setdepth = direct.setdepth or function(n,d) return setfield(n,"depth",d) end
if not direct.is_glyph then
local getchar = direct.getchar
@@ -253,9 +279,12 @@ nuts.insert_before = direct.insert_before
nuts.insert_after = direct.insert_after
nuts.delete = direct.delete
nuts.copy = direct.copy
+nuts.copy_node = direct.copy
nuts.copy_list = direct.copy_list
nuts.tail = direct.tail
nuts.flush_list = direct.flush_list
+nuts.flush_node = direct.flush_node
+nuts.flush = direct.flush
nuts.free = direct.free
nuts.remove = direct.remove
nuts.is_node = direct.is_node
@@ -308,3 +337,128 @@ end
nodes.setprop = nodes.setproperty
nodes.getprop = nodes.getproperty
+
+-- a few helpers (we need to keep 'm in sync with context) .. some day components
+-- might go so here we isolate them
+
+local setprev = nuts.setprev
+local setnext = nuts.setnext
+local getnext = nuts.getnext
+local setlink = nuts.setlink
+local getfield = nuts.getfield
+local setfield = nuts.setfield
+local getcomponents = nuts.getcomponents
+local setcomponents = nuts.setcomponents
+
+local find_tail = nuts.tail
+local flush_list = nuts.flush_list
+local flush_node = nuts.flush_node
+local traverse_id = nuts.traverse_id
+local copy_node = nuts.copy_node
+
+local glyph_code = nodes.nodecodes.glyph
+
+function nuts.set_components(target,start,stop)
+ local head = getcomponents(target)
+ if head then
+ flush_list(head)
+ head = nil
+ end
+ if start then
+ setprev(start)
+ else
+ return nil
+ end
+ if stop then
+ setnext(stop)
+ end
+ local tail = nil
+ while start do
+ local c = getcomponents(start)
+ local n = getnext(start)
+ if c then
+ if head then
+ setlink(tail,c)
+ else
+ head = c
+ end
+ tail = find_tail(c)
+ setcomponents(start)
+ flush_node(start)
+ else
+ if head then
+ setlink(tail,start)
+ else
+ head = start
+ end
+ tail = start
+ end
+ start = n
+ end
+ setcomponents(target,head)
+ -- maybe also upgrade the subtype but we don't use it anyway
+ return head
+end
+
+nuts.get_components = nuts.getcomponents
+
+function nuts.take_components(target)
+ local c = getcomponents(target)
+ setcomponents(target)
+ -- maybe also upgrade the subtype but we don't use it anyway
+ return c
+end
+
+function nuts.count_components(n,marks)
+ local components = getcomponents(n)
+ if components then
+ if marks then
+ local i = 0
+ for g in traverse_id(glyph_code,components) do
+ if not marks[getchar(g)] then
+ i = i + 1
+ end
+ end
+ return i
+ else
+ return count(glyph_code,components)
+ end
+ else
+ return 0
+ end
+end
+
+function nuts.copy_no_components(g,copyinjection)
+ local components = getcomponents(g)
+ if components then
+ setcomponents(g)
+ local n = copy_node(g)
+ if copyinjection then
+ copyinjection(n,g)
+ end
+ setcomponents(g,components)
+ -- maybe also upgrade the subtype but we don't use it anyway
+ return n
+ else
+ local n = copy_node(g)
+ if copyinjection then
+ copyinjection(n,g)
+ end
+ return n
+ end
+end
+
+function nuts.copy_only_glyphs(current)
+ local head = nil
+ local previous = nil
+ for n in traverse_id(glyph_code,current) do
+ n = copy_node(n)
+ if head then
+ setlink(previous,n)
+ else
+ head = n
+ end
+ previous = n
+ end
+ return head
+end
diff --git a/tex/generic/context/luatex/luatex-core.lua b/tex/generic/context/luatex/luatex-core.lua
new file mode 100644
index 000000000..16df01707
--- /dev/null
+++ b/tex/generic/context/luatex/luatex-core.lua
@@ -0,0 +1,210 @@
+-- if not modules then modules = { } end modules ['luatex-core'] = {
+-- version = 1.001,
+-- comment = 'companion to luatex',
+-- author = 'Hans Hagen & Luigi Scarso',
+-- copyright = 'LuaTeX Development Team',
+-- }
+
+LUATEXCOREVERSION = 1.002
+
+-- This file overloads some Lua functions. The readline variants provide the same
+-- functionality as LuaTeX <= 1.04 and doing it this way permits us to keep the
+-- original io libraries clean. Performance is probably even a bit better now.
+
+local type, next, getmetatable, require = type, next, getmetatable, require
+local find, gsub = string.find, string.gsub
+
+local io_open = io.open
+local io_popen = io.popen
+local io_line = io.lines
+
+local fio_readline = fio.readline
+local fio_checkpermission = fio.checkpermission
+local fio_recordfilename = fio.recordfilename
+
+local mt = getmetatable(io.stderr)
+local mt_lines = mt.lines
+local saferoption = status.safer_option
+local shellescape = status.shell_escape -- 0 (disabled) 1 (anything) 2 (restricted)
+local kpseused = status.kpse_used -- 0 1
+
+io.saved_open = io_open -- can be protected
+io.saved_popen = io_popen -- can be protected
+io.saved_lines = io_lines -- always readonly
+mt.saved_lines = mt_lines -- always readonly
+
+local function luatex_io_open(name,how)
+ if not how then
+ how = 'r'
+ end
+ local f = io_open(name,how)
+ if f then
+ if type(how) == 'string' and find(how,'w') then
+ fio_recordfilename(name,'w')
+ else
+ fio_recordfilename(name,'r')
+ end
+ end
+ return f
+end
+
+local function luatex_io_open_readonly(name,how)
+ if how then
+ how = 'r'
+ else
+ how = gsub(how,'[^rb]','')
+ if how == '' then
+ how = 'r'
+ end
+ end
+ local f = io_open(name,how)
+ if f then
+ fio_recordfilename(name,'r')
+ end
+ return f
+end
+
+local function luatex_io_popen(name,...)
+ local okay, found = fio_checkpermission(name)
+ if okay and found then
+ return io_popen(found,...)
+ end
+end
+
+local function luatex_io_lines(name)
+ local f = io_open(name,'r')
+ if f then
+ return function()
+ return fio_readline(f)
+ end
+ end
+end
+
+local function luatex_io_readline(f)
+ return function()
+ return fio_readline(f)
+ end
+end
+
+io.lines = luatex_io_lines
+mt.lines = luatex_io_readline
+
+-- We assume management to be provided by the replacement of kpse. This is the
+-- case in ConTeXt.
+
+if kpseused == 1 then
+
+ io.open = luatex_io_open
+ io.popen = luatex_io_popen
+
+end
+
+if saferoption == 1 then
+
+ os.execute = nil
+ os.spawn = nil
+ os.exec = nil
+ os.setenv = nil
+ os.tempdir = nil
+
+ io.popen = nil
+ io.open = nil
+
+ os.rename = nil
+ os.remove = nil
+
+ io.tmpfile = nil
+ io.output = nil
+
+ lfs.chdir = nil
+ lfs.lock = nil
+ lfs.touch = nil
+ lfs.rmdir = nil
+ lfs.mkdir = nil
+
+ io.saved_popen = nil
+ io.saved_open = luatex_io_open_readonly
+
+end
+
+if saferoption == 1 or shellescape ~= 1 then
+
+ ffi = require('ffi')
+ for k, v in next, ffi do
+ if k ~= 'gc' then
+ ffi[k] = nil
+ end
+ end
+ ffi = nil
+
+end
+
+-- os.[execute|os.spawn|os.exec] already are shellescape aware)
+
+
+if md5 then
+
+ local sum = md5.sum
+ local gsub = string.gsub
+ local format = string.format
+ local byte = string.byte
+
+ function md5.sumhexa(k)
+ return (gsub(sum(k), ".", function(c)
+ return format("%02x",byte(c))
+ end))
+ end
+
+ function md5.sumHEXA(k)
+ return (gsub(sum(k), ".", function(c)
+ return format("%02X",byte(c))
+ end))
+ end
+
+end
+
+if utilities and utilities.merger and utilities.merger.compact then
+
+ local byte, format, gmatch = string.byte, string.format, string.gmatch
+ local concat = table.concat
+
+ local data = gsub(io.loaddata('luatex-core.lua'),'if%s+utilities.*','')
+ local t = { }
+ local r = { }
+ local n = 0
+ local d = gsub(data,'\r\n','\n') -- be nice for unix
+ local s = utilities.merger.compact(d) -- no comments and less spaces
+
+ t[#t+1] = '/* generated from and by luatex-core.lua */'
+ t[#t+1] = ''
+ -- t[#t+1] = format('/*\n\n%s\n\n*/',d)
+ -- t[#t+1] = ''
+ t[#t+1] = '#include "lua.h"'
+ t[#t+1] = '#include "lauxlib.h"'
+ t[#t+1] = ''
+ t[#t+1] = 'int load_luatex_core_lua (lua_State * L);'
+ t[#t+1] = ''
+ t[#t+1] = 'int load_luatex_core_lua (lua_State * L)'
+ t[#t+1] = '{'
+ t[#t+1] = ' static unsigned char luatex_core_lua[] = {'
+ for c in gmatch(d,'.') do
+ if n == 16 then
+ n = 1
+ t[#t+1] = ' ' .. concat(r,', ') .. ','
+ else
+ n = n + 1
+ end
+ r[n] = format('0x%02x',byte(c))
+ end
+ n = n + 1
+ r[n] = '0x00'
+ t[#t+1] = ' ' .. concat(r,', ',1,n)
+ t[#t+1] = ' };'
+ -- t[#t+1] = format('unsigned int luatex_core_lua_len = 0x%x;',#d+1)
+ t[#t+1] = ' return luaL_dostring(L, (const char*) luatex_core_lua);'
+ t[#t+1] = '}'
+
+ io.savedata('luatex-core.c',concat(t,'\n'))
+ io.savedata('luatex-core-stripped.lua',s)
+
+end
diff --git a/tex/generic/context/luatex/luatex-core.tex b/tex/generic/context/luatex/luatex-core.tex
new file mode 100644
index 000000000..2e7c7d5d4
--- /dev/null
+++ b/tex/generic/context/luatex/luatex-core.tex
@@ -0,0 +1,30 @@
+\starttext
+
+\startluacode
+
+ local report = logs.reporter("core")
+
+ report("kpse used : %i",status.kpse_used)
+ report("shell escape : %i",status.shell_escape)
+ report("shell restricted : %i",status.shell_restricted)
+ report("safer option : %i",status.safer_option)
+
+ if false then
+
+ for l in io.open("luatex-core.lua"):lines() do
+ print(l)
+ end
+
+ for l in io.lines("luatex-core.lua") do
+ print(l)
+ end
+
+ end
+
+\stopluacode
+
+\startTEXpage[foregroundstyle=mono,offset=10pt]
+ LUATEXCOREVERSION: \cldcontext{LUATEXCOREVERSION}
+\stopTEXpage
+
+\stoptext
diff --git a/tex/generic/context/luatex/luatex-fonts-demo-vf-1.lua b/tex/generic/context/luatex/luatex-fonts-demo-vf-1.lua
index 13acd16ca..793526f7b 100644
--- a/tex/generic/context/luatex/luatex-fonts-demo-vf-1.lua
+++ b/tex/generic/context/luatex/luatex-fonts-demo-vf-1.lua
@@ -1,3 +1,11 @@
+if not modules then modules = { } end modules ['luatex-fonts-demo-vf-1'] = {
+ 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"
+}
+
local identifiers = fonts.hashes.identifiers
return function(specification)
diff --git a/tex/generic/context/luatex/luatex-fonts-demo-vf-4.lua b/tex/generic/context/luatex/luatex-fonts-demo-vf-4.lua
index 00fc636a1..92ce4ffcb 100644
--- a/tex/generic/context/luatex/luatex-fonts-demo-vf-4.lua
+++ b/tex/generic/context/luatex/luatex-fonts-demo-vf-4.lua
@@ -1,3 +1,10 @@
+if not modules then modules = { } end modules ['luatex-fonts-demo-vf-4'] = {
+ 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"
+}
return function(specification)
local t = { }
diff --git a/tex/generic/context/luatex/luatex-fonts-enc.lua b/tex/generic/context/luatex/luatex-fonts-enc.lua
index 2e1c6a466..c076d5947 100644
--- a/tex/generic/context/luatex/luatex-fonts-enc.lua
+++ b/tex/generic/context/luatex/luatex-fonts-enc.lua
@@ -11,19 +11,66 @@ if context then
os.exit()
end
-local fonts = fonts
-fonts.encodings = { }
-fonts.encodings.agl = { }
-fonts.encodings.known = { }
+local fonts = fonts
+local encodings = { }
+fonts.encodings = encodings
+encodings.agl = { }
+encodings.known = { }
-setmetatable(fonts.encodings.agl, { __index = function(t,k)
+setmetatable(encodings.agl, { __index = function(t,k)
if k == "unicodes" then
texio.write(" <loading (extended) adobe glyph list>")
local unicodes = dofile(resolvers.findfile("font-age.lua"))
- fonts.encodings.agl = { unicodes = unicodes }
+ encodings.agl = { unicodes = unicodes }
return unicodes
else
return nil
end
end })
+-- adapted for generic
+
+encodings.cache = containers.define("fonts", "enc", encodings.version, true)
+
+function encodings.load(filename)
+ local name = file.removesuffix(filename)
+ local data = containers.read(encodings.cache,name)
+ if data then
+ return data
+ end
+ local vector, tag, hash, unicodes = { }, "", { }, { }
+ local foundname = resolvers.findfile(filename,'enc')
+ if foundname and foundname ~= "" then
+ local ok, encoding, size = resolvers.loadbinfile(foundname)
+ if ok and encoding then
+ encoding = string.gsub(encoding,"%%(.-)\n","")
+ local unicoding = encodings.agl.unicodes
+ local tag, vec = string.match(encoding,"/(%w+)%s*%[(.*)%]%s*def")
+ local i = 0
+ for ch in string.gmatch(vec,"/([%a%d%.]+)") do
+ if ch ~= ".notdef" then
+ vector[i] = ch
+ if not hash[ch] then
+ hash[ch] = i
+ else
+ -- duplicate, play safe for tex ligs and take first
+ end
+ local u = unicoding[ch]
+ if u then
+ unicodes[u] = i
+ end
+ end
+ i = i + 1
+ end
+ end
+ end
+ local data = {
+ name = name,
+ tag = tag,
+ vector = vector,
+ hash = hash,
+ unicodes = unicodes
+ }
+ return containers.write(encodings.cache, name, data)
+end
+
diff --git a/tex/generic/context/luatex/luatex-fonts-ext.lua b/tex/generic/context/luatex/luatex-fonts-ext.lua
index b60d04512..7d9c58ccb 100644
--- a/tex/generic/context/luatex/luatex-fonts-ext.lua
+++ b/tex/generic/context/luatex/luatex-fonts-ext.lua
@@ -12,7 +12,7 @@ if context then
end
local fonts = fonts
-local otffeatures = fonts.constructors.newfeatures("otf")
+local otffeatures = fonts.constructors.features.otf
-- A few generic extensions.
@@ -270,3 +270,60 @@ otffeatures.register {
node = reencode,
}
}
+
+local function ignore(tfmdata,key,value)
+ if value then
+ tfmdata.mathparameters = nil
+ end
+end
+
+otffeatures.register {
+ name = "ignoremathconstants",
+ description = "ignore math constants table",
+ initializers = {
+ base = ignore,
+ node = ignore,
+ }
+}
+
+local setmetatableindex = table.setmetatableindex
+
+local function additalictowidth(tfmdata,key,value)
+ local characters = tfmdata.characters
+ local resources = tfmdata.resources
+ local additions = { }
+ local private = resources.private
+ for unicode, old_c in next, characters do
+ -- maybe check for math
+ local oldwidth = old_c.width
+ local olditalic = old_c.italic
+ if olditalic and olditalic ~= 0 then
+ private = private + 1
+ local new_c = {
+ width = oldwidth + olditalic,
+ height = old_c.height,
+ depth = old_c.depth,
+ commands = {
+ { "slot", 1, private },
+ { "right", olditalic },
+ },
+ }
+ setmetatableindex(new_c,old_c)
+ characters[unicode] = new_c
+ additions[private] = old_c
+ end
+ end
+ for k, v in next, additions do
+ characters[k] = v
+ end
+ resources.private = private
+end
+
+otffeatures.register {
+ name = "italicwidths",
+ description = "add italic to width",
+ manipulators = {
+ base = additalictowidth,
+ -- node = additalictowidth, -- only makes sense for math
+ }
+}
diff --git a/tex/generic/context/luatex/luatex-fonts-lig.lua b/tex/generic/context/luatex/luatex-fonts-lig.lua
new file mode 100644
index 000000000..c5347aa19
--- /dev/null
+++ b/tex/generic/context/luatex/luatex-fonts-lig.lua
@@ -0,0 +1,2067 @@
+-- this file is generated by context
+
+fonts.handlers.otf.addfeature {
+ ["dataset"]={
+ {
+ ["data"]={
+ ["À"]={ "A", "̀" },
+ ["Á"]={ "A", "́" },
+ ["Â"]={ "A", "̂" },
+ ["Ã"]={ "A", "̃" },
+ ["Ä"]={ "A", "̈" },
+ ["Å"]={ "A", "̊" },
+ ["Ç"]={ "C", "̧" },
+ ["È"]={ "E", "̀" },
+ ["É"]={ "E", "́" },
+ ["Ê"]={ "E", "̂" },
+ ["Ë"]={ "E", "̈" },
+ ["Ì"]={ "I", "̀" },
+ ["Í"]={ "I", "́" },
+ ["Î"]={ "I", "̂" },
+ ["Ï"]={ "I", "̈" },
+ ["Ñ"]={ "N", "̃" },
+ ["Ò"]={ "O", "̀" },
+ ["Ó"]={ "O", "́" },
+ ["Ô"]={ "O", "̂" },
+ ["Õ"]={ "O", "̃" },
+ ["Ö"]={ "O", "̈" },
+ ["Ù"]={ "U", "̀" },
+ ["Ú"]={ "U", "́" },
+ ["Û"]={ "U", "̂" },
+ ["Ü"]={ "U", "̈" },
+ ["Ý"]={ "Y", "́" },
+ ["à"]={ "a", "̀" },
+ ["á"]={ "a", "́" },
+ ["â"]={ "a", "̂" },
+ ["ã"]={ "a", "̃" },
+ ["ä"]={ "a", "̈" },
+ ["å"]={ "a", "̊" },
+ ["ç"]={ "c", "̧" },
+ ["è"]={ "e", "̀" },
+ ["é"]={ "e", "́" },
+ ["ê"]={ "e", "̂" },
+ ["ë"]={ "e", "̈" },
+ ["ì"]={ "i", "̀" },
+ ["í"]={ "i", "́" },
+ ["î"]={ "i", "̂" },
+ ["ï"]={ "i", "̈" },
+ ["ñ"]={ "n", "̃" },
+ ["ò"]={ "o", "̀" },
+ ["ó"]={ "o", "́" },
+ ["ô"]={ "o", "̂" },
+ ["õ"]={ "o", "̃" },
+ ["ö"]={ "o", "̈" },
+ ["ù"]={ "u", "̀" },
+ ["ú"]={ "u", "́" },
+ ["û"]={ "u", "̂" },
+ ["ü"]={ "u", "̈" },
+ ["ý"]={ "y", "́" },
+ ["ÿ"]={ "y", "̈" },
+ ["Ā"]={ "A", "̄" },
+ ["ā"]={ "a", "̄" },
+ ["Ă"]={ "A", "̆" },
+ ["ă"]={ "a", "̆" },
+ ["Ą"]={ "A", "̨" },
+ ["ą"]={ "a", "̨" },
+ ["Ć"]={ "C", "́" },
+ ["ć"]={ "c", "́" },
+ ["Ĉ"]={ "C", "̂" },
+ ["ĉ"]={ "c", "̂" },
+ ["Ċ"]={ "C", "̇" },
+ ["ċ"]={ "c", "̇" },
+ ["Č"]={ "C", "̌" },
+ ["č"]={ "c", "̌" },
+ ["Ď"]={ "D", "̌" },
+ ["ď"]={ "d", "̌" },
+ ["Ē"]={ "E", "̄" },
+ ["ē"]={ "e", "̄" },
+ ["Ĕ"]={ "E", "̆" },
+ ["ĕ"]={ "e", "̆" },
+ ["Ė"]={ "E", "̇" },
+ ["ė"]={ "e", "̇" },
+ ["Ę"]={ "E", "̨" },
+ ["ę"]={ "e", "̨" },
+ ["Ě"]={ "E", "̌" },
+ ["ě"]={ "e", "̌" },
+ ["Ĝ"]={ "G", "̂" },
+ ["ĝ"]={ "g", "̂" },
+ ["Ğ"]={ "G", "̆" },
+ ["ğ"]={ "g", "̆" },
+ ["Ġ"]={ "G", "̇" },
+ ["ġ"]={ "g", "̇" },
+ ["Ģ"]={ "G", "̧" },
+ ["ģ"]={ "g", "̧" },
+ ["Ĥ"]={ "H", "̂" },
+ ["ĥ"]={ "h", "̂" },
+ ["Ĩ"]={ "I", "̃" },
+ ["ĩ"]={ "i", "̃" },
+ ["Ī"]={ "I", "̄" },
+ ["ī"]={ "i", "̄" },
+ ["Ĭ"]={ "I", "̆" },
+ ["ĭ"]={ "i", "̆" },
+ ["Į"]={ "I", "̨" },
+ ["į"]={ "i", "̨" },
+ ["İ"]={ "I", "̇" },
+ ["Ĵ"]={ "J", "̂" },
+ ["ĵ"]={ "j", "̂" },
+ ["Ķ"]={ "K", "̧" },
+ ["ķ"]={ "k", "̧" },
+ ["Ĺ"]={ "L", "́" },
+ ["ĺ"]={ "l", "́" },
+ ["Ļ"]={ "L", "̧" },
+ ["ļ"]={ "l", "̧" },
+ ["Ľ"]={ "L", "̌" },
+ ["ľ"]={ "l", "̌" },
+ ["Ń"]={ "N", "́" },
+ ["ń"]={ "n", "́" },
+ ["Ņ"]={ "N", "̧" },
+ ["ņ"]={ "n", "̧" },
+ ["Ň"]={ "N", "̌" },
+ ["ň"]={ "n", "̌" },
+ ["Ō"]={ "O", "̄" },
+ ["ō"]={ "o", "̄" },
+ ["Ŏ"]={ "O", "̆" },
+ ["ŏ"]={ "o", "̆" },
+ ["Ő"]={ "O", "̋" },
+ ["ő"]={ "o", "̋" },
+ ["Ŕ"]={ "R", "́" },
+ ["ŕ"]={ "r", "́" },
+ ["Ŗ"]={ "R", "̧" },
+ ["ŗ"]={ "r", "̧" },
+ ["Ř"]={ "R", "̌" },
+ ["ř"]={ "r", "̌" },
+ ["Ś"]={ "S", "́" },
+ ["ś"]={ "s", "́" },
+ ["Ŝ"]={ "S", "̂" },
+ ["ŝ"]={ "s", "̂" },
+ ["Ş"]={ "S", "̧" },
+ ["ş"]={ "s", "̧" },
+ ["Š"]={ "S", "̌" },
+ ["š"]={ "s", "̌" },
+ ["Ţ"]={ "T", "̧" },
+ ["ţ"]={ "t", "̧" },
+ ["Ť"]={ "T", "̌" },
+ ["ť"]={ "t", "̌" },
+ ["Ũ"]={ "U", "̃" },
+ ["ũ"]={ "u", "̃" },
+ ["Ū"]={ "U", "̄" },
+ ["ū"]={ "u", "̄" },
+ ["Ŭ"]={ "U", "̆" },
+ ["ŭ"]={ "u", "̆" },
+ ["Ů"]={ "U", "̊" },
+ ["ů"]={ "u", "̊" },
+ ["Ű"]={ "U", "̋" },
+ ["ű"]={ "u", "̋" },
+ ["Ų"]={ "U", "̨" },
+ ["ų"]={ "u", "̨" },
+ ["Ŵ"]={ "W", "̂" },
+ ["ŵ"]={ "w", "̂" },
+ ["Ŷ"]={ "Y", "̂" },
+ ["ŷ"]={ "y", "̂" },
+ ["Ÿ"]={ "Y", "̈" },
+ ["Ź"]={ "Z", "́" },
+ ["ź"]={ "z", "́" },
+ ["Ż"]={ "Z", "̇" },
+ ["ż"]={ "z", "̇" },
+ ["Ž"]={ "Z", "̌" },
+ ["ž"]={ "z", "̌" },
+ ["Ơ"]={ "O", "̛" },
+ ["ơ"]={ "o", "̛" },
+ ["Ư"]={ "U", "̛" },
+ ["ư"]={ "u", "̛" },
+ ["Ǎ"]={ "A", "̌" },
+ ["ǎ"]={ "a", "̌" },
+ ["Ǐ"]={ "I", "̌" },
+ ["ǐ"]={ "i", "̌" },
+ ["Ǒ"]={ "O", "̌" },
+ ["ǒ"]={ "o", "̌" },
+ ["Ǔ"]={ "U", "̌" },
+ ["ǔ"]={ "u", "̌" },
+ ["Ǖ"]={ "Ü", "̄" },
+ ["ǖ"]={ "ü", "̄" },
+ ["Ǘ"]={ "Ü", "́" },
+ ["ǘ"]={ "ü", "́" },
+ ["Ǚ"]={ "Ü", "̌" },
+ ["ǚ"]={ "ü", "̌" },
+ ["Ǜ"]={ "Ü", "̀" },
+ ["ǜ"]={ "ü", "̀" },
+ ["Ǟ"]={ "Ä", "̄" },
+ ["ǟ"]={ "ä", "̄" },
+ ["Ǡ"]={ "Ȧ", "̄" },
+ ["ǡ"]={ "ȧ", "̄" },
+ ["Ǣ"]={ "Æ", "̄" },
+ ["ǣ"]={ "æ", "̄" },
+ ["Ǧ"]={ "G", "̌" },
+ ["ǧ"]={ "g", "̌" },
+ ["Ǩ"]={ "K", "̌" },
+ ["ǩ"]={ "k", "̌" },
+ ["Ǫ"]={ "O", "̨" },
+ ["ǫ"]={ "o", "̨" },
+ ["Ǭ"]={ "Ǫ", "̄" },
+ ["ǭ"]={ "ǫ", "̄" },
+ ["Ǯ"]={ "Ʒ", "̌" },
+ ["ǯ"]={ "ʒ", "̌" },
+ ["ǰ"]={ "j", "̌" },
+ ["Ǵ"]={ "G", "́" },
+ ["ǵ"]={ "g", "́" },
+ ["Ǹ"]={ "N", "̀" },
+ ["ǹ"]={ "n", "̀" },
+ ["Ǻ"]={ "Å", "́" },
+ ["ǻ"]={ "å", "́" },
+ ["Ǽ"]={ "Æ", "́" },
+ ["ǽ"]={ "æ", "́" },
+ ["Ǿ"]={ "Ø", "́" },
+ ["ǿ"]={ "ø", "́" },
+ ["Ȁ"]={ "A", "̏" },
+ ["ȁ"]={ "a", "̏" },
+ ["Ȃ"]={ "A", "̑" },
+ ["ȃ"]={ "a", "̑" },
+ ["Ȅ"]={ "E", "̏" },
+ ["ȅ"]={ "e", "̏" },
+ ["Ȇ"]={ "E", "̑" },
+ ["ȇ"]={ "e", "̑" },
+ ["Ȉ"]={ "I", "̏" },
+ ["ȉ"]={ "i", "̏" },
+ ["Ȋ"]={ "I", "̑" },
+ ["ȋ"]={ "i", "̑" },
+ ["Ȍ"]={ "O", "̏" },
+ ["ȍ"]={ "o", "̏" },
+ ["Ȏ"]={ "O", "̑" },
+ ["ȏ"]={ "o", "̑" },
+ ["Ȑ"]={ "R", "̏" },
+ ["ȑ"]={ "r", "̏" },
+ ["Ȓ"]={ "R", "̑" },
+ ["ȓ"]={ "r", "̑" },
+ ["Ȕ"]={ "U", "̏" },
+ ["ȕ"]={ "u", "̏" },
+ ["Ȗ"]={ "U", "̑" },
+ ["ȗ"]={ "u", "̑" },
+ ["Ș"]={ "S", "̦" },
+ ["ș"]={ "s", "̦" },
+ ["Ț"]={ "T", "̦" },
+ ["ț"]={ "t", "̦" },
+ ["Ȟ"]={ "H", "̌" },
+ ["ȟ"]={ "h", "̌" },
+ ["Ȧ"]={ "A", "̇" },
+ ["ȧ"]={ "a", "̇" },
+ ["Ȩ"]={ "E", "̧" },
+ ["ȩ"]={ "e", "̧" },
+ ["Ȫ"]={ "Ö", "̄" },
+ ["ȫ"]={ "ö", "̄" },
+ ["Ȭ"]={ "Õ", "̄" },
+ ["ȭ"]={ "õ", "̄" },
+ ["Ȯ"]={ "O", "̇" },
+ ["ȯ"]={ "o", "̇" },
+ ["Ȱ"]={ "Ȯ", "̄" },
+ ["ȱ"]={ "ȯ", "̄" },
+ ["Ȳ"]={ "Y", "̄" },
+ ["ȳ"]={ "y", "̄" },
+ ["̈́"]={ "̈", "́" },
+ ["΅"]={ "¨", "́" },
+ ["Ά"]={ "Α", "́" },
+ ["Έ"]={ "Ε", "́" },
+ ["Ή"]={ "Η", "́" },
+ ["Ί"]={ "Ι", "́" },
+ ["Ό"]={ "Ο", "́" },
+ ["Ύ"]={ "Υ", "́" },
+ ["Ώ"]={ "Ω", "́" },
+ ["ΐ"]={ "ϊ", "́" },
+ ["Ϊ"]={ "Ι", "̈" },
+ ["Ϋ"]={ "Υ", "̈" },
+ ["ά"]={ "α", "́" },
+ ["έ"]={ "ε", "́" },
+ ["ή"]={ "η", "́" },
+ ["ί"]={ "ι", "́" },
+ ["ΰ"]={ "ϋ", "́" },
+ ["ϊ"]={ "ι", "̈" },
+ ["ϋ"]={ "υ", "̈" },
+ ["ό"]={ "ο", "́" },
+ ["ύ"]={ "υ", "́" },
+ ["ώ"]={ "ω", "́" },
+ ["ϓ"]={ "ϒ", "́" },
+ ["ϔ"]={ "ϒ", "̈" },
+ ["Ѐ"]={ "Е", "̀" },
+ ["Ё"]={ "Е", "̈" },
+ ["Ѓ"]={ "Г", "́" },
+ ["Ї"]={ "І", "̈" },
+ ["Ќ"]={ "К", "́" },
+ ["Ѝ"]={ "И", "̀" },
+ ["Ў"]={ "У", "̆" },
+ ["Й"]={ "И", "̆" },
+ ["й"]={ "и", "̆" },
+ ["ѐ"]={ "е", "̀" },
+ ["ё"]={ "е", "̈" },
+ ["ѓ"]={ "г", "́" },
+ ["ї"]={ "і", "̈" },
+ ["ќ"]={ "к", "́" },
+ ["ѝ"]={ "и", "̀" },
+ ["ў"]={ "у", "̆" },
+ ["Ѷ"]={ "Ѵ", "̏" },
+ ["ѷ"]={ "ѵ", "̏" },
+ ["Ӂ"]={ "Ж", "̆" },
+ ["ӂ"]={ "ж", "̆" },
+ ["Ӑ"]={ "А", "̆" },
+ ["ӑ"]={ "а", "̆" },
+ ["Ӓ"]={ "А", "̈" },
+ ["ӓ"]={ "а", "̈" },
+ ["Ӗ"]={ "Е", "̆" },
+ ["ӗ"]={ "е", "̆" },
+ ["Ӛ"]={ "Ә", "̈" },
+ ["ӛ"]={ "ә", "̈" },
+ ["Ӝ"]={ "Ж", "̈" },
+ ["ӝ"]={ "ж", "̈" },
+ ["Ӟ"]={ "З", "̈" },
+ ["ӟ"]={ "з", "̈" },
+ ["Ӣ"]={ "И", "̄" },
+ ["ӣ"]={ "и", "̄" },
+ ["Ӥ"]={ "И", "̈" },
+ ["ӥ"]={ "и", "̈" },
+ ["Ӧ"]={ "О", "̈" },
+ ["ӧ"]={ "о", "̈" },
+ ["Ӫ"]={ "Ө", "̈" },
+ ["ӫ"]={ "ө", "̈" },
+ ["Ӭ"]={ "Э", "̈" },
+ ["ӭ"]={ "э", "̈" },
+ ["Ӯ"]={ "У", "̄" },
+ ["ӯ"]={ "у", "̄" },
+ ["Ӱ"]={ "У", "̈" },
+ ["ӱ"]={ "у", "̈" },
+ ["Ӳ"]={ "У", "̋" },
+ ["ӳ"]={ "у", "̋" },
+ ["Ӵ"]={ "Ч", "̈" },
+ ["ӵ"]={ "ч", "̈" },
+ ["Ӹ"]={ "Ы", "̈" },
+ ["ӹ"]={ "ы", "̈" },
+ ["آ"]={ "ا", "ٓ" },
+ ["أ"]={ "ا", "ٔ" },
+ ["ؤ"]={ "و", "ٔ" },
+ ["إ"]={ "ا", "ٕ" },
+ ["ئ"]={ "ي", "ٔ" },
+ ["ۀ"]={ "ە", "ٔ" },
+ ["ۂ"]={ "ہ", "ٔ" },
+ ["ۓ"]={ "ے", "ٔ" },
+ ["ऩ"]={ "न", "़" },
+ ["ऱ"]={ "र", "़" },
+ ["ऴ"]={ "ळ", "़" },
+ ["क़"]={ "क", "़" },
+ ["ख़"]={ "ख", "़" },
+ ["ग़"]={ "ग", "़" },
+ ["ज़"]={ "ज", "़" },
+ ["ड़"]={ "ड", "़" },
+ ["ढ़"]={ "ढ", "़" },
+ ["फ़"]={ "फ", "़" },
+ ["य़"]={ "य", "़" },
+ ["ো"]={ "ে", "া" },
+ ["ৌ"]={ "ে", "ৗ" },
+ ["ড়"]={ "ড", "়" },
+ ["ঢ়"]={ "ঢ", "়" },
+ ["য়"]={ "য", "়" },
+ ["ਲ਼"]={ "ਲ", "਼" },
+ ["ਸ਼"]={ "ਸ", "਼" },
+ ["ਖ਼"]={ "ਖ", "਼" },
+ ["ਗ਼"]={ "ਗ", "਼" },
+ ["ਜ਼"]={ "ਜ", "਼" },
+ ["ਫ਼"]={ "ਫ", "਼" },
+ ["ୈ"]={ "େ", "ୖ" },
+ ["ୋ"]={ "େ", "ା" },
+ ["ୌ"]={ "େ", "ୗ" },
+ ["ଡ଼"]={ "ଡ", "଼" },
+ ["ଢ଼"]={ "ଢ", "଼" },
+ ["ஔ"]={ "ஒ", "ௗ" },
+ ["ொ"]={ "ெ", "ா" },
+ ["ோ"]={ "ே", "ா" },
+ ["ௌ"]={ "ெ", "ௗ" },
+ ["ై"]={ "ె", "ౖ" },
+ ["ೀ"]={ "ಿ", "ೕ" },
+ ["ೇ"]={ "ೆ", "ೕ" },
+ ["ೈ"]={ "ೆ", "ೖ" },
+ ["ೊ"]={ "ೆ", "ೂ" },
+ ["ೋ"]={ "ೊ", "ೕ" },
+ ["ൊ"]={ "െ", "ാ" },
+ ["ോ"]={ "േ", "ാ" },
+ ["ൌ"]={ "െ", "ൗ" },
+ ["ේ"]={ "ෙ", "්" },
+ ["ො"]={ "ෙ", "ා" },
+ ["ෝ"]={ "ො", "්" },
+ ["ෞ"]={ "ෙ", "ෟ" },
+ ["གྷ"]={ "ག", "ྷ" },
+ ["ཌྷ"]={ "ཌ", "ྷ" },
+ ["དྷ"]={ "ད", "ྷ" },
+ ["བྷ"]={ "བ", "ྷ" },
+ ["ཛྷ"]={ "ཛ", "ྷ" },
+ ["ཀྵ"]={ "ཀ", "ྵ" },
+ ["ཱི"]={ "ཱ", "ི" },
+ ["ཱུ"]={ "ཱ", "ུ" },
+ ["ྲྀ"]={ "ྲ", "ྀ" },
+ ["ླྀ"]={ "ླ", "ྀ" },
+ ["ཱྀ"]={ "ཱ", "ྀ" },
+ ["ྒྷ"]={ "ྒ", "ྷ" },
+ ["ྜྷ"]={ "ྜ", "ྷ" },
+ ["ྡྷ"]={ "ྡ", "ྷ" },
+ ["ྦྷ"]={ "ྦ", "ྷ" },
+ ["ྫྷ"]={ "ྫ", "ྷ" },
+ ["ྐྵ"]={ "ྐ", "ྵ" },
+ ["ဦ"]={ "ဥ", "ီ" },
+ ["ᬆ"]={ "ᬅ", "ᬵ" },
+ ["ᬈ"]={ "ᬇ", "ᬵ" },
+ ["ᬊ"]={ "ᬉ", "ᬵ" },
+ ["ᬌ"]={ "ᬋ", "ᬵ" },
+ ["ᬎ"]={ "ᬍ", "ᬵ" },
+ ["ᬒ"]={ "ᬑ", "ᬵ" },
+ ["ᬻ"]={ "ᬺ", "ᬵ" },
+ ["ᬽ"]={ "ᬼ", "ᬵ" },
+ ["ᭀ"]={ "ᬾ", "ᬵ" },
+ ["ᭁ"]={ "ᬿ", "ᬵ" },
+ ["ᭃ"]={ "ᭂ", "ᬵ" },
+ ["Ḁ"]={ "A", "̥" },
+ ["ḁ"]={ "a", "̥" },
+ ["Ḃ"]={ "B", "̇" },
+ ["ḃ"]={ "b", "̇" },
+ ["Ḅ"]={ "B", "̣" },
+ ["ḅ"]={ "b", "̣" },
+ ["Ḇ"]={ "B", "̱" },
+ ["ḇ"]={ "b", "̱" },
+ ["Ḉ"]={ "Ç", "́" },
+ ["ḉ"]={ "ç", "́" },
+ ["Ḋ"]={ "D", "̇" },
+ ["ḋ"]={ "d", "̇" },
+ ["Ḍ"]={ "D", "̣" },
+ ["ḍ"]={ "d", "̣" },
+ ["Ḏ"]={ "D", "̱" },
+ ["ḏ"]={ "d", "̱" },
+ ["Ḑ"]={ "D", "̧" },
+ ["ḑ"]={ "d", "̧" },
+ ["Ḓ"]={ "D", "̭" },
+ ["ḓ"]={ "d", "̭" },
+ ["Ḕ"]={ "Ē", "̀" },
+ ["ḕ"]={ "ē", "̀" },
+ ["Ḗ"]={ "Ē", "́" },
+ ["ḗ"]={ "ē", "́" },
+ ["Ḙ"]={ "E", "̭" },
+ ["ḙ"]={ "e", "̭" },
+ ["Ḛ"]={ "E", "̰" },
+ ["ḛ"]={ "e", "̰" },
+ ["Ḝ"]={ "Ȩ", "̆" },
+ ["ḝ"]={ "ȩ", "̆" },
+ ["Ḟ"]={ "F", "̇" },
+ ["ḟ"]={ "f", "̇" },
+ ["Ḡ"]={ "G", "̄" },
+ ["ḡ"]={ "g", "̄" },
+ ["Ḣ"]={ "H", "̇" },
+ ["ḣ"]={ "h", "̇" },
+ ["Ḥ"]={ "H", "̣" },
+ ["ḥ"]={ "h", "̣" },
+ ["Ḧ"]={ "H", "̈" },
+ ["ḧ"]={ "h", "̈" },
+ ["Ḩ"]={ "H", "̧" },
+ ["ḩ"]={ "h", "̧" },
+ ["Ḫ"]={ "H", "̮" },
+ ["ḫ"]={ "h", "̮" },
+ ["Ḭ"]={ "I", "̰" },
+ ["ḭ"]={ "i", "̰" },
+ ["Ḯ"]={ "Ï", "́" },
+ ["ḯ"]={ "ï", "́" },
+ ["Ḱ"]={ "K", "́" },
+ ["ḱ"]={ "k", "́" },
+ ["Ḳ"]={ "K", "̣" },
+ ["ḳ"]={ "k", "̣" },
+ ["Ḵ"]={ "K", "̱" },
+ ["ḵ"]={ "k", "̱" },
+ ["Ḷ"]={ "L", "̣" },
+ ["ḷ"]={ "l", "̣" },
+ ["Ḹ"]={ "Ḷ", "̄" },
+ ["ḹ"]={ "ḷ", "̄" },
+ ["Ḻ"]={ "L", "̱" },
+ ["ḻ"]={ "l", "̱" },
+ ["Ḽ"]={ "L", "̭" },
+ ["ḽ"]={ "l", "̭" },
+ ["Ḿ"]={ "M", "́" },
+ ["ḿ"]={ "m", "́" },
+ ["Ṁ"]={ "M", "̇" },
+ ["ṁ"]={ "m", "̇" },
+ ["Ṃ"]={ "M", "̣" },
+ ["ṃ"]={ "m", "̣" },
+ ["Ṅ"]={ "N", "̇" },
+ ["ṅ"]={ "n", "̇" },
+ ["Ṇ"]={ "N", "̣" },
+ ["ṇ"]={ "n", "̣" },
+ ["Ṉ"]={ "N", "̱" },
+ ["ṉ"]={ "n", "̱" },
+ ["Ṋ"]={ "N", "̭" },
+ ["ṋ"]={ "n", "̭" },
+ ["Ṍ"]={ "Õ", "́" },
+ ["ṍ"]={ "õ", "́" },
+ ["Ṏ"]={ "Õ", "̈" },
+ ["ṏ"]={ "õ", "̈" },
+ ["Ṑ"]={ "Ō", "̀" },
+ ["ṑ"]={ "ō", "̀" },
+ ["Ṓ"]={ "Ō", "́" },
+ ["ṓ"]={ "ō", "́" },
+ ["Ṕ"]={ "P", "́" },
+ ["ṕ"]={ "p", "́" },
+ ["Ṗ"]={ "P", "̇" },
+ ["ṗ"]={ "p", "̇" },
+ ["Ṙ"]={ "R", "̇" },
+ ["ṙ"]={ "r", "̇" },
+ ["Ṛ"]={ "R", "̣" },
+ ["ṛ"]={ "r", "̣" },
+ ["Ṝ"]={ "Ṛ", "̄" },
+ ["ṝ"]={ "ṛ", "̄" },
+ ["Ṟ"]={ "R", "̱" },
+ ["ṟ"]={ "r", "̱" },
+ ["Ṡ"]={ "S", "̇" },
+ ["ṡ"]={ "s", "̇" },
+ ["Ṣ"]={ "S", "̣" },
+ ["ṣ"]={ "s", "̣" },
+ ["Ṥ"]={ "Ś", "̇" },
+ ["ṥ"]={ "ś", "̇" },
+ ["Ṧ"]={ "Š", "̇" },
+ ["ṧ"]={ "š", "̇" },
+ ["Ṩ"]={ "Ṣ", "̇" },
+ ["ṩ"]={ "ṣ", "̇" },
+ ["Ṫ"]={ "T", "̇" },
+ ["ṫ"]={ "t", "̇" },
+ ["Ṭ"]={ "T", "̣" },
+ ["ṭ"]={ "t", "̣" },
+ ["Ṯ"]={ "T", "̱" },
+ ["ṯ"]={ "t", "̱" },
+ ["Ṱ"]={ "T", "̭" },
+ ["ṱ"]={ "t", "̭" },
+ ["Ṳ"]={ "U", "̤" },
+ ["ṳ"]={ "u", "̤" },
+ ["Ṵ"]={ "U", "̰" },
+ ["ṵ"]={ "u", "̰" },
+ ["Ṷ"]={ "U", "̭" },
+ ["ṷ"]={ "u", "̭" },
+ ["Ṹ"]={ "Ũ", "́" },
+ ["ṹ"]={ "ũ", "́" },
+ ["Ṻ"]={ "Ū", "̈" },
+ ["ṻ"]={ "ū", "̈" },
+ ["Ṽ"]={ "V", "̃" },
+ ["ṽ"]={ "v", "̃" },
+ ["Ṿ"]={ "V", "̣" },
+ ["ṿ"]={ "v", "̣" },
+ ["Ẁ"]={ "W", "̀" },
+ ["ẁ"]={ "w", "̀" },
+ ["Ẃ"]={ "W", "́" },
+ ["ẃ"]={ "w", "́" },
+ ["Ẅ"]={ "W", "̈" },
+ ["ẅ"]={ "w", "̈" },
+ ["Ẇ"]={ "W", "̇" },
+ ["ẇ"]={ "w", "̇" },
+ ["Ẉ"]={ "W", "̣" },
+ ["ẉ"]={ "w", "̣" },
+ ["Ẋ"]={ "X", "̇" },
+ ["ẋ"]={ "x", "̇" },
+ ["Ẍ"]={ "X", "̈" },
+ ["ẍ"]={ "x", "̈" },
+ ["Ẏ"]={ "Y", "̇" },
+ ["ẏ"]={ "y", "̇" },
+ ["Ẑ"]={ "Z", "̂" },
+ ["ẑ"]={ "z", "̂" },
+ ["Ẓ"]={ "Z", "̣" },
+ ["ẓ"]={ "z", "̣" },
+ ["Ẕ"]={ "Z", "̱" },
+ ["ẕ"]={ "z", "̱" },
+ ["ẖ"]={ "h", "̱" },
+ ["ẗ"]={ "t", "̈" },
+ ["ẘ"]={ "w", "̊" },
+ ["ẙ"]={ "y", "̊" },
+ ["ẛ"]={ "ſ", "̇" },
+ ["Ạ"]={ "A", "̣" },
+ ["ạ"]={ "a", "̣" },
+ ["Ả"]={ "A", "̉" },
+ ["ả"]={ "a", "̉" },
+ ["Ấ"]={ "Â", "́" },
+ ["ấ"]={ "â", "́" },
+ ["Ầ"]={ "Â", "̀" },
+ ["ầ"]={ "â", "̀" },
+ ["Ẩ"]={ "Â", "̉" },
+ ["ẩ"]={ "â", "̉" },
+ ["Ẫ"]={ "Â", "̃" },
+ ["ẫ"]={ "â", "̃" },
+ ["Ậ"]={ "Ạ", "̂" },
+ ["ậ"]={ "ạ", "̂" },
+ ["Ắ"]={ "Ă", "́" },
+ ["ắ"]={ "ă", "́" },
+ ["Ằ"]={ "Ă", "̀" },
+ ["ằ"]={ "ă", "̀" },
+ ["Ẳ"]={ "Ă", "̉" },
+ ["ẳ"]={ "ă", "̉" },
+ ["Ẵ"]={ "Ă", "̃" },
+ ["ẵ"]={ "ă", "̃" },
+ ["Ặ"]={ "Ạ", "̆" },
+ ["ặ"]={ "ạ", "̆" },
+ ["Ẹ"]={ "E", "̣" },
+ ["ẹ"]={ "e", "̣" },
+ ["Ẻ"]={ "E", "̉" },
+ ["ẻ"]={ "e", "̉" },
+ ["Ẽ"]={ "E", "̃" },
+ ["ẽ"]={ "e", "̃" },
+ ["Ế"]={ "Ê", "́" },
+ ["ế"]={ "ê", "́" },
+ ["Ề"]={ "Ê", "̀" },
+ ["ề"]={ "ê", "̀" },
+ ["Ể"]={ "Ê", "̉" },
+ ["ể"]={ "ê", "̉" },
+ ["Ễ"]={ "Ê", "̃" },
+ ["ễ"]={ "ê", "̃" },
+ ["Ệ"]={ "Ẹ", "̂" },
+ ["ệ"]={ "ẹ", "̂" },
+ ["Ỉ"]={ "I", "̉" },
+ ["ỉ"]={ "i", "̉" },
+ ["Ị"]={ "I", "̣" },
+ ["ị"]={ "i", "̣" },
+ ["Ọ"]={ "O", "̣" },
+ ["ọ"]={ "o", "̣" },
+ ["Ỏ"]={ "O", "̉" },
+ ["ỏ"]={ "o", "̉" },
+ ["Ố"]={ "Ô", "́" },
+ ["ố"]={ "ô", "́" },
+ ["Ồ"]={ "Ô", "̀" },
+ ["ồ"]={ "ô", "̀" },
+ ["Ổ"]={ "Ô", "̉" },
+ ["ổ"]={ "ô", "̉" },
+ ["Ỗ"]={ "Ô", "̃" },
+ ["ỗ"]={ "ô", "̃" },
+ ["Ộ"]={ "Ọ", "̂" },
+ ["ộ"]={ "ọ", "̂" },
+ ["Ớ"]={ "Ơ", "́" },
+ ["ớ"]={ "ơ", "́" },
+ ["Ờ"]={ "Ơ", "̀" },
+ ["ờ"]={ "ơ", "̀" },
+ ["Ở"]={ "Ơ", "̉" },
+ ["ở"]={ "ơ", "̉" },
+ ["Ỡ"]={ "Ơ", "̃" },
+ ["ỡ"]={ "ơ", "̃" },
+ ["Ợ"]={ "Ơ", "̣" },
+ ["ợ"]={ "ơ", "̣" },
+ ["Ụ"]={ "U", "̣" },
+ ["ụ"]={ "u", "̣" },
+ ["Ủ"]={ "U", "̉" },
+ ["ủ"]={ "u", "̉" },
+ ["Ứ"]={ "Ư", "́" },
+ ["ứ"]={ "ư", "́" },
+ ["Ừ"]={ "Ư", "̀" },
+ ["ừ"]={ "ư", "̀" },
+ ["Ử"]={ "Ư", "̉" },
+ ["ử"]={ "ư", "̉" },
+ ["Ữ"]={ "Ư", "̃" },
+ ["ữ"]={ "ư", "̃" },
+ ["Ự"]={ "Ư", "̣" },
+ ["ự"]={ "ư", "̣" },
+ ["Ỳ"]={ "Y", "̀" },
+ ["ỳ"]={ "y", "̀" },
+ ["Ỵ"]={ "Y", "̣" },
+ ["ỵ"]={ "y", "̣" },
+ ["Ỷ"]={ "Y", "̉" },
+ ["ỷ"]={ "y", "̉" },
+ ["Ỹ"]={ "Y", "̃" },
+ ["ỹ"]={ "y", "̃" },
+ ["ἀ"]={ "α", "̓" },
+ ["ἁ"]={ "α", "̔" },
+ ["ἂ"]={ "ἀ", "̀" },
+ ["ἃ"]={ "ἁ", "̀" },
+ ["ἄ"]={ "ἀ", "́" },
+ ["ἅ"]={ "ἁ", "́" },
+ ["ἆ"]={ "ἀ", "͂" },
+ ["ἇ"]={ "ἁ", "͂" },
+ ["Ἀ"]={ "Α", "̓" },
+ ["Ἁ"]={ "Α", "̔" },
+ ["Ἂ"]={ "Ἀ", "̀" },
+ ["Ἃ"]={ "Ἁ", "̀" },
+ ["Ἄ"]={ "Ἀ", "́" },
+ ["Ἅ"]={ "Ἁ", "́" },
+ ["Ἆ"]={ "Ἀ", "͂" },
+ ["Ἇ"]={ "Ἁ", "͂" },
+ ["ἐ"]={ "ε", "̓" },
+ ["ἑ"]={ "ε", "̔" },
+ ["ἒ"]={ "ἐ", "̀" },
+ ["ἓ"]={ "ἑ", "̀" },
+ ["ἔ"]={ "ἐ", "́" },
+ ["ἕ"]={ "ἑ", "́" },
+ ["Ἐ"]={ "Ε", "̓" },
+ ["Ἑ"]={ "Ε", "̔" },
+ ["Ἒ"]={ "Ἐ", "̀" },
+ ["Ἓ"]={ "Ἑ", "̀" },
+ ["Ἔ"]={ "Ἐ", "́" },
+ ["Ἕ"]={ "Ἑ", "́" },
+ ["ἠ"]={ "η", "̓" },
+ ["ἡ"]={ "η", "̔" },
+ ["ἢ"]={ "ἠ", "̀" },
+ ["ἣ"]={ "ἡ", "̀" },
+ ["ἤ"]={ "ἠ", "́" },
+ ["ἥ"]={ "ἡ", "́" },
+ ["ἦ"]={ "ἠ", "͂" },
+ ["ἧ"]={ "ἡ", "͂" },
+ ["Ἠ"]={ "Η", "̓" },
+ ["Ἡ"]={ "Η", "̔" },
+ ["Ἢ"]={ "Ἠ", "̀" },
+ ["Ἣ"]={ "Ἡ", "̀" },
+ ["Ἤ"]={ "Ἠ", "́" },
+ ["Ἥ"]={ "Ἡ", "́" },
+ ["Ἦ"]={ "Ἠ", "͂" },
+ ["Ἧ"]={ "Ἡ", "͂" },
+ ["ἰ"]={ "ι", "̓" },
+ ["ἱ"]={ "ι", "̔" },
+ ["ἲ"]={ "ἰ", "̀" },
+ ["ἳ"]={ "ἱ", "̀" },
+ ["ἴ"]={ "ἰ", "́" },
+ ["ἵ"]={ "ἱ", "́" },
+ ["ἶ"]={ "ἰ", "͂" },
+ ["ἷ"]={ "ἱ", "͂" },
+ ["Ἰ"]={ "Ι", "̓" },
+ ["Ἱ"]={ "Ι", "̔" },
+ ["Ἲ"]={ "Ἰ", "̀" },
+ ["Ἳ"]={ "Ἱ", "̀" },
+ ["Ἴ"]={ "Ἰ", "́" },
+ ["Ἵ"]={ "Ἱ", "́" },
+ ["Ἶ"]={ "Ἰ", "͂" },
+ ["Ἷ"]={ "Ἱ", "͂" },
+ ["ὀ"]={ "ο", "̓" },
+ ["ὁ"]={ "ο", "̔" },
+ ["ὂ"]={ "ὀ", "̀" },
+ ["ὃ"]={ "ὁ", "̀" },
+ ["ὄ"]={ "ὀ", "́" },
+ ["ὅ"]={ "ὁ", "́" },
+ ["Ὀ"]={ "Ο", "̓" },
+ ["Ὁ"]={ "Ο", "̔" },
+ ["Ὂ"]={ "Ὀ", "̀" },
+ ["Ὃ"]={ "Ὁ", "̀" },
+ ["Ὄ"]={ "Ὀ", "́" },
+ ["Ὅ"]={ "Ὁ", "́" },
+ ["ὐ"]={ "υ", "̓" },
+ ["ὑ"]={ "υ", "̔" },
+ ["ὒ"]={ "ὐ", "̀" },
+ ["ὓ"]={ "ὑ", "̀" },
+ ["ὔ"]={ "ὐ", "́" },
+ ["ὕ"]={ "ὑ", "́" },
+ ["ὖ"]={ "ὐ", "͂" },
+ ["ὗ"]={ "ὑ", "͂" },
+ ["Ὑ"]={ "Υ", "̔" },
+ ["Ὓ"]={ "Ὑ", "̀" },
+ ["Ὕ"]={ "Ὑ", "́" },
+ ["Ὗ"]={ "Ὑ", "͂" },
+ ["ὠ"]={ "ω", "̓" },
+ ["ὡ"]={ "ω", "̔" },
+ ["ὢ"]={ "ὠ", "̀" },
+ ["ὣ"]={ "ὡ", "̀" },
+ ["ὤ"]={ "ὠ", "́" },
+ ["ὥ"]={ "ὡ", "́" },
+ ["ὦ"]={ "ὠ", "͂" },
+ ["ὧ"]={ "ὡ", "͂" },
+ ["Ὠ"]={ "Ω", "̓" },
+ ["Ὡ"]={ "Ω", "̔" },
+ ["Ὢ"]={ "Ὠ", "̀" },
+ ["Ὣ"]={ "Ὡ", "̀" },
+ ["Ὤ"]={ "Ὠ", "́" },
+ ["Ὥ"]={ "Ὡ", "́" },
+ ["Ὦ"]={ "Ὠ", "͂" },
+ ["Ὧ"]={ "Ὡ", "͂" },
+ ["ὰ"]={ "α", "̀" },
+ ["ὲ"]={ "ε", "̀" },
+ ["ὴ"]={ "η", "̀" },
+ ["ὶ"]={ "ι", "̀" },
+ ["ὸ"]={ "ο", "̀" },
+ ["ὺ"]={ "υ", "̀" },
+ ["ὼ"]={ "ω", "̀" },
+ ["ᾀ"]={ "ἀ", "ͅ" },
+ ["ᾁ"]={ "ἁ", "ͅ" },
+ ["ᾂ"]={ "ἂ", "ͅ" },
+ ["ᾃ"]={ "ἃ", "ͅ" },
+ ["ᾄ"]={ "ἄ", "ͅ" },
+ ["ᾅ"]={ "ἅ", "ͅ" },
+ ["ᾆ"]={ "ἆ", "ͅ" },
+ ["ᾇ"]={ "ἇ", "ͅ" },
+ ["ᾈ"]={ "Ἀ", "ͅ" },
+ ["ᾉ"]={ "Ἁ", "ͅ" },
+ ["ᾊ"]={ "Ἂ", "ͅ" },
+ ["ᾋ"]={ "Ἃ", "ͅ" },
+ ["ᾌ"]={ "Ἄ", "ͅ" },
+ ["ᾍ"]={ "Ἅ", "ͅ" },
+ ["ᾎ"]={ "Ἆ", "ͅ" },
+ ["ᾏ"]={ "Ἇ", "ͅ" },
+ ["ᾐ"]={ "ἠ", "ͅ" },
+ ["ᾑ"]={ "ἡ", "ͅ" },
+ ["ᾒ"]={ "ἢ", "ͅ" },
+ ["ᾓ"]={ "ἣ", "ͅ" },
+ ["ᾔ"]={ "ἤ", "ͅ" },
+ ["ᾕ"]={ "ἥ", "ͅ" },
+ ["ᾖ"]={ "ἦ", "ͅ" },
+ ["ᾗ"]={ "ἧ", "ͅ" },
+ ["ᾘ"]={ "Ἠ", "ͅ" },
+ ["ᾙ"]={ "Ἡ", "ͅ" },
+ ["ᾚ"]={ "Ἢ", "ͅ" },
+ ["ᾛ"]={ "Ἣ", "ͅ" },
+ ["ᾜ"]={ "Ἤ", "ͅ" },
+ ["ᾝ"]={ "Ἥ", "ͅ" },
+ ["ᾞ"]={ "Ἦ", "ͅ" },
+ ["ᾟ"]={ "Ἧ", "ͅ" },
+ ["ᾠ"]={ "ὠ", "ͅ" },
+ ["ᾡ"]={ "ὡ", "ͅ" },
+ ["ᾢ"]={ "ὢ", "ͅ" },
+ ["ᾣ"]={ "ὣ", "ͅ" },
+ ["ᾤ"]={ "ὤ", "ͅ" },
+ ["ᾥ"]={ "ὥ", "ͅ" },
+ ["ᾦ"]={ "ὦ", "ͅ" },
+ ["ᾧ"]={ "ὧ", "ͅ" },
+ ["ᾨ"]={ "Ὠ", "ͅ" },
+ ["ᾩ"]={ "Ὡ", "ͅ" },
+ ["ᾪ"]={ "Ὢ", "ͅ" },
+ ["ᾫ"]={ "Ὣ", "ͅ" },
+ ["ᾬ"]={ "Ὤ", "ͅ" },
+ ["ᾭ"]={ "Ὥ", "ͅ" },
+ ["ᾮ"]={ "Ὦ", "ͅ" },
+ ["ᾯ"]={ "Ὧ", "ͅ" },
+ ["ᾰ"]={ "α", "̆" },
+ ["ᾱ"]={ "α", "̄" },
+ ["ᾲ"]={ "ὰ", "ͅ" },
+ ["ᾳ"]={ "α", "ͅ" },
+ ["ᾴ"]={ "ά", "ͅ" },
+ ["ᾶ"]={ "α", "͂" },
+ ["ᾷ"]={ "ᾶ", "ͅ" },
+ ["Ᾰ"]={ "Α", "̆" },
+ ["Ᾱ"]={ "Α", "̄" },
+ ["Ὰ"]={ "Α", "̀" },
+ ["ᾼ"]={ "Α", "ͅ" },
+ ["῁"]={ "¨", "͂" },
+ ["ῂ"]={ "ὴ", "ͅ" },
+ ["ῃ"]={ "η", "ͅ" },
+ ["ῄ"]={ "ή", "ͅ" },
+ ["ῆ"]={ "η", "͂" },
+ ["ῇ"]={ "ῆ", "ͅ" },
+ ["Ὲ"]={ "Ε", "̀" },
+ ["Ὴ"]={ "Η", "̀" },
+ ["ῌ"]={ "Η", "ͅ" },
+ ["῍"]={ "᾿", "̀" },
+ ["῎"]={ "᾿", "́" },
+ ["῏"]={ "᾿", "͂" },
+ ["ῐ"]={ "ι", "̆" },
+ ["ῑ"]={ "ι", "̄" },
+ ["ῒ"]={ "ϊ", "̀" },
+ ["ῖ"]={ "ι", "͂" },
+ ["ῗ"]={ "ϊ", "͂" },
+ ["Ῐ"]={ "Ι", "̆" },
+ ["Ῑ"]={ "Ι", "̄" },
+ ["Ὶ"]={ "Ι", "̀" },
+ ["῝"]={ "῾", "̀" },
+ ["῞"]={ "῾", "́" },
+ ["῟"]={ "῾", "͂" },
+ ["ῠ"]={ "υ", "̆" },
+ ["ῡ"]={ "υ", "̄" },
+ ["ῢ"]={ "ϋ", "̀" },
+ ["ῤ"]={ "ρ", "̓" },
+ ["ῥ"]={ "ρ", "̔" },
+ ["ῦ"]={ "υ", "͂" },
+ ["ῧ"]={ "ϋ", "͂" },
+ ["Ῠ"]={ "Υ", "̆" },
+ ["Ῡ"]={ "Υ", "̄" },
+ ["Ὺ"]={ "Υ", "̀" },
+ ["Ῥ"]={ "Ρ", "̔" },
+ ["῭"]={ "¨", "̀" },
+ ["ῲ"]={ "ὼ", "ͅ" },
+ ["ῳ"]={ "ω", "ͅ" },
+ ["ῴ"]={ "ώ", "ͅ" },
+ ["ῶ"]={ "ω", "͂" },
+ ["ῷ"]={ "ῶ", "ͅ" },
+ ["Ὸ"]={ "Ο", "̀" },
+ ["Ὼ"]={ "Ω", "̀" },
+ ["ῼ"]={ "Ω", "ͅ" },
+ ["↚"]={ "←", "̸" },
+ ["↛"]={ "→", "̸" },
+ ["↮"]={ "↔", "̸" },
+ ["⇍"]={ "⇐", "̸" },
+ ["⇎"]={ "⇔", "̸" },
+ ["⇏"]={ "⇒", "̸" },
+ ["∄"]={ "∃", "̸" },
+ ["∉"]={ "∈", "̸" },
+ ["∌"]={ "∋", "̸" },
+ ["∤"]={ "∣", "̸" },
+ ["∦"]={ "∥", "̸" },
+ ["≁"]={ "∼", "̸" },
+ ["≄"]={ "≃", "̸" },
+ ["≇"]={ "≅", "̸" },
+ ["≉"]={ "≈", "̸" },
+ ["≠"]={ "=", "̸" },
+ ["≢"]={ "≡", "̸" },
+ ["≭"]={ "≍", "̸" },
+ ["≮"]={ "<", "̸" },
+ ["≯"]={ ">", "̸" },
+ ["≰"]={ "≤", "̸" },
+ ["≱"]={ "≥", "̸" },
+ ["≴"]={ "≲", "̸" },
+ ["≵"]={ "≳", "̸" },
+ ["≸"]={ "≶", "̸" },
+ ["≹"]={ "≷", "̸" },
+ ["⊀"]={ "≺", "̸" },
+ ["⊁"]={ "≻", "̸" },
+ ["⊄"]={ "⊂", "̸" },
+ ["⊅"]={ "⊃", "̸" },
+ ["⊈"]={ "⊆", "̸" },
+ ["⊉"]={ "⊇", "̸" },
+ ["⊬"]={ "⊢", "̸" },
+ ["⊭"]={ "⊨", "̸" },
+ ["⊮"]={ "⊩", "̸" },
+ ["⊯"]={ "⊫", "̸" },
+ ["⋠"]={ "≼", "̸" },
+ ["⋡"]={ "≽", "̸" },
+ ["⋢"]={ "⊑", "̸" },
+ ["⋣"]={ "⊒", "̸" },
+ ["⋪"]={ "⊲", "̸" },
+ ["⋫"]={ "⊳", "̸" },
+ ["⋬"]={ "⊴", "̸" },
+ ["⋭"]={ "⊵", "̸" },
+ ["⫝̸"]={ "⫝", "̸" },
+ ["が"]={ "か", "゙" },
+ ["ぎ"]={ "き", "゙" },
+ ["ぐ"]={ "く", "゙" },
+ ["げ"]={ "け", "゙" },
+ ["ご"]={ "こ", "゙" },
+ ["ざ"]={ "さ", "゙" },
+ ["じ"]={ "し", "゙" },
+ ["ず"]={ "す", "゙" },
+ ["ぜ"]={ "せ", "゙" },
+ ["ぞ"]={ "そ", "゙" },
+ ["だ"]={ "た", "゙" },
+ ["ぢ"]={ "ち", "゙" },
+ ["づ"]={ "つ", "゙" },
+ ["で"]={ "て", "゙" },
+ ["ど"]={ "と", "゙" },
+ ["ば"]={ "は", "゙" },
+ ["ぱ"]={ "は", "゚" },
+ ["び"]={ "ひ", "゙" },
+ ["ぴ"]={ "ひ", "゚" },
+ ["ぶ"]={ "ふ", "゙" },
+ ["ぷ"]={ "ふ", "゚" },
+ ["べ"]={ "へ", "゙" },
+ ["ぺ"]={ "へ", "゚" },
+ ["ぼ"]={ "ほ", "゙" },
+ ["ぽ"]={ "ほ", "゚" },
+ ["ゔ"]={ "う", "゙" },
+ ["ゞ"]={ "ゝ", "゙" },
+ ["ガ"]={ "カ", "゙" },
+ ["ギ"]={ "キ", "゙" },
+ ["グ"]={ "ク", "゙" },
+ ["ゲ"]={ "ケ", "゙" },
+ ["ゴ"]={ "コ", "゙" },
+ ["ザ"]={ "サ", "゙" },
+ ["ジ"]={ "シ", "゙" },
+ ["ズ"]={ "ス", "゙" },
+ ["ゼ"]={ "セ", "゙" },
+ ["ゾ"]={ "ソ", "゙" },
+ ["ダ"]={ "タ", "゙" },
+ ["ヂ"]={ "チ", "゙" },
+ ["ヅ"]={ "ツ", "゙" },
+ ["デ"]={ "テ", "゙" },
+ ["ド"]={ "ト", "゙" },
+ ["バ"]={ "ハ", "゙" },
+ ["パ"]={ "ハ", "゚" },
+ ["ビ"]={ "ヒ", "゙" },
+ ["ピ"]={ "ヒ", "゚" },
+ ["ブ"]={ "フ", "゙" },
+ ["プ"]={ "フ", "゚" },
+ ["ベ"]={ "ヘ", "゙" },
+ ["ペ"]={ "ヘ", "゚" },
+ ["ボ"]={ "ホ", "゙" },
+ ["ポ"]={ "ホ", "゚" },
+ ["ヴ"]={ "ウ", "゙" },
+ ["ヷ"]={ "ワ", "゙" },
+ ["ヸ"]={ "ヰ", "゙" },
+ ["ヹ"]={ "ヱ", "゙" },
+ ["ヺ"]={ "ヲ", "゙" },
+ ["ヾ"]={ "ヽ", "゙" },
+ ["יִ"]={ "י", "ִ" },
+ ["ײַ"]={ "ײ", "ַ" },
+ ["שׁ"]={ "ש", "ׁ" },
+ ["שׂ"]={ "ש", "ׂ" },
+ ["שּׁ"]={ "שּ", "ׁ" },
+ ["שּׂ"]={ "שּ", "ׂ" },
+ ["אַ"]={ "א", "ַ" },
+ ["אָ"]={ "א", "ָ" },
+ ["אּ"]={ "א", "ּ" },
+ ["בּ"]={ "ב", "ּ" },
+ ["גּ"]={ "ג", "ּ" },
+ ["דּ"]={ "ד", "ּ" },
+ ["הּ"]={ "ה", "ּ" },
+ ["וּ"]={ "ו", "ּ" },
+ ["זּ"]={ "ז", "ּ" },
+ ["טּ"]={ "ט", "ּ" },
+ ["יּ"]={ "י", "ּ" },
+ ["ךּ"]={ "ך", "ּ" },
+ ["כּ"]={ "כ", "ּ" },
+ ["לּ"]={ "ל", "ּ" },
+ ["מּ"]={ "מ", "ּ" },
+ ["נּ"]={ "נ", "ּ" },
+ ["סּ"]={ "ס", "ּ" },
+ ["ףּ"]={ "ף", "ּ" },
+ ["פּ"]={ "פ", "ּ" },
+ ["צּ"]={ "צ", "ּ" },
+ ["קּ"]={ "ק", "ּ" },
+ ["רּ"]={ "ר", "ּ" },
+ ["שּ"]={ "ש", "ּ" },
+ ["תּ"]={ "ת", "ּ" },
+ ["וֹ"]={ "ו", "ֹ" },
+ ["בֿ"]={ "ב", "ֿ" },
+ ["כֿ"]={ "כ", "ֿ" },
+ ["פֿ"]={ "פ", "ֿ" },
+ ["𑂚"]={ "𑂙", "𑂺" },
+ ["𑂜"]={ "𑂛", "𑂺" },
+ ["𑂫"]={ "𑂥", "𑂺" },
+ ["𑄮"]={ "𑄱", "𑄧" },
+ ["𑄯"]={ "𑄲", "𑄧" },
+ ["𑍋"]={ "𑍇", "𑌾" },
+ ["𑍌"]={ "𑍇", "𑍗" },
+ ["𑒻"]={ "𑒹", "𑒺" },
+ ["𑒼"]={ "𑒹", "𑒰" },
+ ["𑒾"]={ "𑒹", "𑒽" },
+ ["𑖺"]={ "𑖸", "𑖯" },
+ ["𑖻"]={ "𑖹", "𑖯" },
+ ["𝅗𝅥"]={ "𝅗", "𝅥" },
+ ["𝅘𝅥"]={ "𝅘", "𝅥" },
+ ["𝅘𝅥𝅮"]={ "𝅘𝅥", "𝅮" },
+ ["𝅘𝅥𝅯"]={ "𝅘𝅥", "𝅯" },
+ ["𝅘𝅥𝅰"]={ "𝅘𝅥", "𝅰" },
+ ["𝅘𝅥𝅱"]={ "𝅘𝅥", "𝅱" },
+ ["𝅘𝅥𝅲"]={ "𝅘𝅥", "𝅲" },
+ ["𝆹𝅥"]={ "𝆹", "𝅥" },
+ ["𝆺𝅥"]={ "𝆺", "𝅥" },
+ ["𝆹𝅥𝅮"]={ "𝆹𝅥", "𝅮" },
+ ["𝆺𝅥𝅮"]={ "𝆺𝅥", "𝅮" },
+ ["𝆹𝅥𝅯"]={ "𝆹𝅥", "𝅯" },
+ ["𝆺𝅥𝅯"]={ "𝆺𝅥", "𝅯" },
+ },
+ },
+ {
+ ["data"]={
+ ["À"]={ "A", "̀" },
+ ["Á"]={ "A", "́" },
+ ["Â"]={ "A", "̂" },
+ ["Ã"]={ "A", "̃" },
+ ["Ä"]={ "A", "̈" },
+ ["Å"]={ "A", "̊" },
+ ["Ç"]={ "C", "̧" },
+ ["È"]={ "E", "̀" },
+ ["É"]={ "E", "́" },
+ ["Ê"]={ "E", "̂" },
+ ["Ë"]={ "E", "̈" },
+ ["Ì"]={ "I", "̀" },
+ ["Í"]={ "I", "́" },
+ ["Î"]={ "I", "̂" },
+ ["Ï"]={ "I", "̈" },
+ ["Ñ"]={ "N", "̃" },
+ ["Ò"]={ "O", "̀" },
+ ["Ó"]={ "O", "́" },
+ ["Ô"]={ "O", "̂" },
+ ["Õ"]={ "O", "̃" },
+ ["Ö"]={ "O", "̈" },
+ ["Ù"]={ "U", "̀" },
+ ["Ú"]={ "U", "́" },
+ ["Û"]={ "U", "̂" },
+ ["Ü"]={ "U", "̈" },
+ ["Ý"]={ "Y", "́" },
+ ["à"]={ "a", "̀" },
+ ["á"]={ "a", "́" },
+ ["â"]={ "a", "̂" },
+ ["ã"]={ "a", "̃" },
+ ["ä"]={ "a", "̈" },
+ ["å"]={ "a", "̊" },
+ ["ç"]={ "c", "̧" },
+ ["è"]={ "e", "̀" },
+ ["é"]={ "e", "́" },
+ ["ê"]={ "e", "̂" },
+ ["ë"]={ "e", "̈" },
+ ["ì"]={ "i", "̀" },
+ ["í"]={ "i", "́" },
+ ["î"]={ "i", "̂" },
+ ["ï"]={ "i", "̈" },
+ ["ñ"]={ "n", "̃" },
+ ["ò"]={ "o", "̀" },
+ ["ó"]={ "o", "́" },
+ ["ô"]={ "o", "̂" },
+ ["õ"]={ "o", "̃" },
+ ["ö"]={ "o", "̈" },
+ ["ù"]={ "u", "̀" },
+ ["ú"]={ "u", "́" },
+ ["û"]={ "u", "̂" },
+ ["ü"]={ "u", "̈" },
+ ["ý"]={ "y", "́" },
+ ["ÿ"]={ "y", "̈" },
+ ["Ā"]={ "A", "̄" },
+ ["ā"]={ "a", "̄" },
+ ["Ă"]={ "A", "̆" },
+ ["ă"]={ "a", "̆" },
+ ["Ą"]={ "A", "̨" },
+ ["ą"]={ "a", "̨" },
+ ["Ć"]={ "C", "́" },
+ ["ć"]={ "c", "́" },
+ ["Ĉ"]={ "C", "̂" },
+ ["ĉ"]={ "c", "̂" },
+ ["Ċ"]={ "C", "̇" },
+ ["ċ"]={ "c", "̇" },
+ ["Č"]={ "C", "̌" },
+ ["č"]={ "c", "̌" },
+ ["Ď"]={ "D", "̌" },
+ ["ď"]={ "d", "̌" },
+ ["Ē"]={ "E", "̄" },
+ ["ē"]={ "e", "̄" },
+ ["Ĕ"]={ "E", "̆" },
+ ["ĕ"]={ "e", "̆" },
+ ["Ė"]={ "E", "̇" },
+ ["ė"]={ "e", "̇" },
+ ["Ę"]={ "E", "̨" },
+ ["ę"]={ "e", "̨" },
+ ["Ě"]={ "E", "̌" },
+ ["ě"]={ "e", "̌" },
+ ["Ĝ"]={ "G", "̂" },
+ ["ĝ"]={ "g", "̂" },
+ ["Ğ"]={ "G", "̆" },
+ ["ğ"]={ "g", "̆" },
+ ["Ġ"]={ "G", "̇" },
+ ["ġ"]={ "g", "̇" },
+ ["Ģ"]={ "G", "̧" },
+ ["ģ"]={ "g", "̧" },
+ ["Ĥ"]={ "H", "̂" },
+ ["ĥ"]={ "h", "̂" },
+ ["Ĩ"]={ "I", "̃" },
+ ["ĩ"]={ "i", "̃" },
+ ["Ī"]={ "I", "̄" },
+ ["ī"]={ "i", "̄" },
+ ["Ĭ"]={ "I", "̆" },
+ ["ĭ"]={ "i", "̆" },
+ ["Į"]={ "I", "̨" },
+ ["į"]={ "i", "̨" },
+ ["İ"]={ "I", "̇" },
+ ["Ĵ"]={ "J", "̂" },
+ ["ĵ"]={ "j", "̂" },
+ ["Ķ"]={ "K", "̧" },
+ ["ķ"]={ "k", "̧" },
+ ["Ĺ"]={ "L", "́" },
+ ["ĺ"]={ "l", "́" },
+ ["Ļ"]={ "L", "̧" },
+ ["ļ"]={ "l", "̧" },
+ ["Ľ"]={ "L", "̌" },
+ ["ľ"]={ "l", "̌" },
+ ["Ń"]={ "N", "́" },
+ ["ń"]={ "n", "́" },
+ ["Ņ"]={ "N", "̧" },
+ ["ņ"]={ "n", "̧" },
+ ["Ň"]={ "N", "̌" },
+ ["ň"]={ "n", "̌" },
+ ["Ō"]={ "O", "̄" },
+ ["ō"]={ "o", "̄" },
+ ["Ŏ"]={ "O", "̆" },
+ ["ŏ"]={ "o", "̆" },
+ ["Ő"]={ "O", "̋" },
+ ["ő"]={ "o", "̋" },
+ ["Ŕ"]={ "R", "́" },
+ ["ŕ"]={ "r", "́" },
+ ["Ŗ"]={ "R", "̧" },
+ ["ŗ"]={ "r", "̧" },
+ ["Ř"]={ "R", "̌" },
+ ["ř"]={ "r", "̌" },
+ ["Ś"]={ "S", "́" },
+ ["ś"]={ "s", "́" },
+ ["Ŝ"]={ "S", "̂" },
+ ["ŝ"]={ "s", "̂" },
+ ["Ş"]={ "S", "̧" },
+ ["ş"]={ "s", "̧" },
+ ["Š"]={ "S", "̌" },
+ ["š"]={ "s", "̌" },
+ ["Ţ"]={ "T", "̧" },
+ ["ţ"]={ "t", "̧" },
+ ["Ť"]={ "T", "̌" },
+ ["ť"]={ "t", "̌" },
+ ["Ũ"]={ "U", "̃" },
+ ["ũ"]={ "u", "̃" },
+ ["Ū"]={ "U", "̄" },
+ ["ū"]={ "u", "̄" },
+ ["Ŭ"]={ "U", "̆" },
+ ["ŭ"]={ "u", "̆" },
+ ["Ů"]={ "U", "̊" },
+ ["ů"]={ "u", "̊" },
+ ["Ű"]={ "U", "̋" },
+ ["ű"]={ "u", "̋" },
+ ["Ų"]={ "U", "̨" },
+ ["ų"]={ "u", "̨" },
+ ["Ŵ"]={ "W", "̂" },
+ ["ŵ"]={ "w", "̂" },
+ ["Ŷ"]={ "Y", "̂" },
+ ["ŷ"]={ "y", "̂" },
+ ["Ÿ"]={ "Y", "̈" },
+ ["Ź"]={ "Z", "́" },
+ ["ź"]={ "z", "́" },
+ ["Ż"]={ "Z", "̇" },
+ ["ż"]={ "z", "̇" },
+ ["Ž"]={ "Z", "̌" },
+ ["ž"]={ "z", "̌" },
+ ["Ơ"]={ "O", "̛" },
+ ["ơ"]={ "o", "̛" },
+ ["Ư"]={ "U", "̛" },
+ ["ư"]={ "u", "̛" },
+ ["Ǎ"]={ "A", "̌" },
+ ["ǎ"]={ "a", "̌" },
+ ["Ǐ"]={ "I", "̌" },
+ ["ǐ"]={ "i", "̌" },
+ ["Ǒ"]={ "O", "̌" },
+ ["ǒ"]={ "o", "̌" },
+ ["Ǔ"]={ "U", "̌" },
+ ["ǔ"]={ "u", "̌" },
+ ["Ǖ"]={ "Ü", "̄" },
+ ["ǖ"]={ "ü", "̄" },
+ ["Ǘ"]={ "Ü", "́" },
+ ["ǘ"]={ "ü", "́" },
+ ["Ǚ"]={ "Ü", "̌" },
+ ["ǚ"]={ "ü", "̌" },
+ ["Ǜ"]={ "Ü", "̀" },
+ ["ǜ"]={ "ü", "̀" },
+ ["Ǟ"]={ "Ä", "̄" },
+ ["ǟ"]={ "ä", "̄" },
+ ["Ǡ"]={ "Ȧ", "̄" },
+ ["ǡ"]={ "ȧ", "̄" },
+ ["Ǣ"]={ "Æ", "̄" },
+ ["ǣ"]={ "æ", "̄" },
+ ["Ǧ"]={ "G", "̌" },
+ ["ǧ"]={ "g", "̌" },
+ ["Ǩ"]={ "K", "̌" },
+ ["ǩ"]={ "k", "̌" },
+ ["Ǫ"]={ "O", "̨" },
+ ["ǫ"]={ "o", "̨" },
+ ["Ǭ"]={ "Ǫ", "̄" },
+ ["ǭ"]={ "ǫ", "̄" },
+ ["Ǯ"]={ "Ʒ", "̌" },
+ ["ǯ"]={ "ʒ", "̌" },
+ ["ǰ"]={ "j", "̌" },
+ ["Ǵ"]={ "G", "́" },
+ ["ǵ"]={ "g", "́" },
+ ["Ǹ"]={ "N", "̀" },
+ ["ǹ"]={ "n", "̀" },
+ ["Ǻ"]={ "Å", "́" },
+ ["ǻ"]={ "å", "́" },
+ ["Ǽ"]={ "Æ", "́" },
+ ["ǽ"]={ "æ", "́" },
+ ["Ǿ"]={ "Ø", "́" },
+ ["ǿ"]={ "ø", "́" },
+ ["Ȁ"]={ "A", "̏" },
+ ["ȁ"]={ "a", "̏" },
+ ["Ȃ"]={ "A", "̑" },
+ ["ȃ"]={ "a", "̑" },
+ ["Ȅ"]={ "E", "̏" },
+ ["ȅ"]={ "e", "̏" },
+ ["Ȇ"]={ "E", "̑" },
+ ["ȇ"]={ "e", "̑" },
+ ["Ȉ"]={ "I", "̏" },
+ ["ȉ"]={ "i", "̏" },
+ ["Ȋ"]={ "I", "̑" },
+ ["ȋ"]={ "i", "̑" },
+ ["Ȍ"]={ "O", "̏" },
+ ["ȍ"]={ "o", "̏" },
+ ["Ȏ"]={ "O", "̑" },
+ ["ȏ"]={ "o", "̑" },
+ ["Ȑ"]={ "R", "̏" },
+ ["ȑ"]={ "r", "̏" },
+ ["Ȓ"]={ "R", "̑" },
+ ["ȓ"]={ "r", "̑" },
+ ["Ȕ"]={ "U", "̏" },
+ ["ȕ"]={ "u", "̏" },
+ ["Ȗ"]={ "U", "̑" },
+ ["ȗ"]={ "u", "̑" },
+ ["Ș"]={ "S", "̦" },
+ ["ș"]={ "s", "̦" },
+ ["Ț"]={ "T", "̦" },
+ ["ț"]={ "t", "̦" },
+ ["Ȟ"]={ "H", "̌" },
+ ["ȟ"]={ "h", "̌" },
+ ["Ȧ"]={ "A", "̇" },
+ ["ȧ"]={ "a", "̇" },
+ ["Ȩ"]={ "E", "̧" },
+ ["ȩ"]={ "e", "̧" },
+ ["Ȫ"]={ "Ö", "̄" },
+ ["ȫ"]={ "ö", "̄" },
+ ["Ȭ"]={ "Õ", "̄" },
+ ["ȭ"]={ "õ", "̄" },
+ ["Ȯ"]={ "O", "̇" },
+ ["ȯ"]={ "o", "̇" },
+ ["Ȱ"]={ "Ȯ", "̄" },
+ ["ȱ"]={ "ȯ", "̄" },
+ ["Ȳ"]={ "Y", "̄" },
+ ["ȳ"]={ "y", "̄" },
+ ["̈́"]={ "̈", "́" },
+ ["΅"]={ "¨", "́" },
+ ["Ά"]={ "Α", "́" },
+ ["Έ"]={ "Ε", "́" },
+ ["Ή"]={ "Η", "́" },
+ ["Ί"]={ "Ι", "́" },
+ ["Ό"]={ "Ο", "́" },
+ ["Ύ"]={ "Υ", "́" },
+ ["Ώ"]={ "Ω", "́" },
+ ["ΐ"]={ "ϊ", "́" },
+ ["Ϊ"]={ "Ι", "̈" },
+ ["Ϋ"]={ "Υ", "̈" },
+ ["ά"]={ "α", "́" },
+ ["έ"]={ "ε", "́" },
+ ["ή"]={ "η", "́" },
+ ["ί"]={ "ι", "́" },
+ ["ΰ"]={ "ϋ", "́" },
+ ["ϊ"]={ "ι", "̈" },
+ ["ϋ"]={ "υ", "̈" },
+ ["ό"]={ "ο", "́" },
+ ["ύ"]={ "υ", "́" },
+ ["ώ"]={ "ω", "́" },
+ ["ϓ"]={ "ϒ", "́" },
+ ["ϔ"]={ "ϒ", "̈" },
+ ["Ѐ"]={ "Е", "̀" },
+ ["Ё"]={ "Е", "̈" },
+ ["Ѓ"]={ "Г", "́" },
+ ["Ї"]={ "І", "̈" },
+ ["Ќ"]={ "К", "́" },
+ ["Ѝ"]={ "И", "̀" },
+ ["Ў"]={ "У", "̆" },
+ ["Й"]={ "И", "̆" },
+ ["й"]={ "и", "̆" },
+ ["ѐ"]={ "е", "̀" },
+ ["ё"]={ "е", "̈" },
+ ["ѓ"]={ "г", "́" },
+ ["ї"]={ "і", "̈" },
+ ["ќ"]={ "к", "́" },
+ ["ѝ"]={ "и", "̀" },
+ ["ў"]={ "у", "̆" },
+ ["Ѷ"]={ "Ѵ", "̏" },
+ ["ѷ"]={ "ѵ", "̏" },
+ ["Ӂ"]={ "Ж", "̆" },
+ ["ӂ"]={ "ж", "̆" },
+ ["Ӑ"]={ "А", "̆" },
+ ["ӑ"]={ "а", "̆" },
+ ["Ӓ"]={ "А", "̈" },
+ ["ӓ"]={ "а", "̈" },
+ ["Ӗ"]={ "Е", "̆" },
+ ["ӗ"]={ "е", "̆" },
+ ["Ӛ"]={ "Ә", "̈" },
+ ["ӛ"]={ "ә", "̈" },
+ ["Ӝ"]={ "Ж", "̈" },
+ ["ӝ"]={ "ж", "̈" },
+ ["Ӟ"]={ "З", "̈" },
+ ["ӟ"]={ "з", "̈" },
+ ["Ӣ"]={ "И", "̄" },
+ ["ӣ"]={ "и", "̄" },
+ ["Ӥ"]={ "И", "̈" },
+ ["ӥ"]={ "и", "̈" },
+ ["Ӧ"]={ "О", "̈" },
+ ["ӧ"]={ "о", "̈" },
+ ["Ӫ"]={ "Ө", "̈" },
+ ["ӫ"]={ "ө", "̈" },
+ ["Ӭ"]={ "Э", "̈" },
+ ["ӭ"]={ "э", "̈" },
+ ["Ӯ"]={ "У", "̄" },
+ ["ӯ"]={ "у", "̄" },
+ ["Ӱ"]={ "У", "̈" },
+ ["ӱ"]={ "у", "̈" },
+ ["Ӳ"]={ "У", "̋" },
+ ["ӳ"]={ "у", "̋" },
+ ["Ӵ"]={ "Ч", "̈" },
+ ["ӵ"]={ "ч", "̈" },
+ ["Ӹ"]={ "Ы", "̈" },
+ ["ӹ"]={ "ы", "̈" },
+ ["آ"]={ "ا", "ٓ" },
+ ["أ"]={ "ا", "ٔ" },
+ ["ؤ"]={ "و", "ٔ" },
+ ["إ"]={ "ا", "ٕ" },
+ ["ئ"]={ "ي", "ٔ" },
+ ["ۀ"]={ "ە", "ٔ" },
+ ["ۂ"]={ "ہ", "ٔ" },
+ ["ۓ"]={ "ے", "ٔ" },
+ ["ऩ"]={ "न", "़" },
+ ["ऱ"]={ "र", "़" },
+ ["ऴ"]={ "ळ", "़" },
+ ["क़"]={ "क", "़" },
+ ["ख़"]={ "ख", "़" },
+ ["ग़"]={ "ग", "़" },
+ ["ज़"]={ "ज", "़" },
+ ["ड़"]={ "ड", "़" },
+ ["ढ़"]={ "ढ", "़" },
+ ["फ़"]={ "फ", "़" },
+ ["य़"]={ "य", "़" },
+ ["ো"]={ "ে", "া" },
+ ["ৌ"]={ "ে", "ৗ" },
+ ["ড়"]={ "ড", "়" },
+ ["ঢ়"]={ "ঢ", "়" },
+ ["য়"]={ "য", "়" },
+ ["ਲ਼"]={ "ਲ", "਼" },
+ ["ਸ਼"]={ "ਸ", "਼" },
+ ["ਖ਼"]={ "ਖ", "਼" },
+ ["ਗ਼"]={ "ਗ", "਼" },
+ ["ਜ਼"]={ "ਜ", "਼" },
+ ["ਫ਼"]={ "ਫ", "਼" },
+ ["ୈ"]={ "େ", "ୖ" },
+ ["ୋ"]={ "େ", "ା" },
+ ["ୌ"]={ "େ", "ୗ" },
+ ["ଡ଼"]={ "ଡ", "଼" },
+ ["ଢ଼"]={ "ଢ", "଼" },
+ ["ஔ"]={ "ஒ", "ௗ" },
+ ["ொ"]={ "ெ", "ா" },
+ ["ோ"]={ "ே", "ா" },
+ ["ௌ"]={ "ெ", "ௗ" },
+ ["ై"]={ "ె", "ౖ" },
+ ["ೀ"]={ "ಿ", "ೕ" },
+ ["ೇ"]={ "ೆ", "ೕ" },
+ ["ೈ"]={ "ೆ", "ೖ" },
+ ["ೊ"]={ "ೆ", "ೂ" },
+ ["ೋ"]={ "ೊ", "ೕ" },
+ ["ൊ"]={ "െ", "ാ" },
+ ["ോ"]={ "േ", "ാ" },
+ ["ൌ"]={ "െ", "ൗ" },
+ ["ේ"]={ "ෙ", "්" },
+ ["ො"]={ "ෙ", "ා" },
+ ["ෝ"]={ "ො", "්" },
+ ["ෞ"]={ "ෙ", "ෟ" },
+ ["གྷ"]={ "ག", "ྷ" },
+ ["ཌྷ"]={ "ཌ", "ྷ" },
+ ["དྷ"]={ "ད", "ྷ" },
+ ["བྷ"]={ "བ", "ྷ" },
+ ["ཛྷ"]={ "ཛ", "ྷ" },
+ ["ཀྵ"]={ "ཀ", "ྵ" },
+ ["ཱི"]={ "ཱ", "ི" },
+ ["ཱུ"]={ "ཱ", "ུ" },
+ ["ྲྀ"]={ "ྲ", "ྀ" },
+ ["ླྀ"]={ "ླ", "ྀ" },
+ ["ཱྀ"]={ "ཱ", "ྀ" },
+ ["ྒྷ"]={ "ྒ", "ྷ" },
+ ["ྜྷ"]={ "ྜ", "ྷ" },
+ ["ྡྷ"]={ "ྡ", "ྷ" },
+ ["ྦྷ"]={ "ྦ", "ྷ" },
+ ["ྫྷ"]={ "ྫ", "ྷ" },
+ ["ྐྵ"]={ "ྐ", "ྵ" },
+ ["ဦ"]={ "ဥ", "ီ" },
+ ["ᬆ"]={ "ᬅ", "ᬵ" },
+ ["ᬈ"]={ "ᬇ", "ᬵ" },
+ ["ᬊ"]={ "ᬉ", "ᬵ" },
+ ["ᬌ"]={ "ᬋ", "ᬵ" },
+ ["ᬎ"]={ "ᬍ", "ᬵ" },
+ ["ᬒ"]={ "ᬑ", "ᬵ" },
+ ["ᬻ"]={ "ᬺ", "ᬵ" },
+ ["ᬽ"]={ "ᬼ", "ᬵ" },
+ ["ᭀ"]={ "ᬾ", "ᬵ" },
+ ["ᭁ"]={ "ᬿ", "ᬵ" },
+ ["ᭃ"]={ "ᭂ", "ᬵ" },
+ ["Ḁ"]={ "A", "̥" },
+ ["ḁ"]={ "a", "̥" },
+ ["Ḃ"]={ "B", "̇" },
+ ["ḃ"]={ "b", "̇" },
+ ["Ḅ"]={ "B", "̣" },
+ ["ḅ"]={ "b", "̣" },
+ ["Ḇ"]={ "B", "̱" },
+ ["ḇ"]={ "b", "̱" },
+ ["Ḉ"]={ "Ç", "́" },
+ ["ḉ"]={ "ç", "́" },
+ ["Ḋ"]={ "D", "̇" },
+ ["ḋ"]={ "d", "̇" },
+ ["Ḍ"]={ "D", "̣" },
+ ["ḍ"]={ "d", "̣" },
+ ["Ḏ"]={ "D", "̱" },
+ ["ḏ"]={ "d", "̱" },
+ ["Ḑ"]={ "D", "̧" },
+ ["ḑ"]={ "d", "̧" },
+ ["Ḓ"]={ "D", "̭" },
+ ["ḓ"]={ "d", "̭" },
+ ["Ḕ"]={ "Ē", "̀" },
+ ["ḕ"]={ "ē", "̀" },
+ ["Ḗ"]={ "Ē", "́" },
+ ["ḗ"]={ "ē", "́" },
+ ["Ḙ"]={ "E", "̭" },
+ ["ḙ"]={ "e", "̭" },
+ ["Ḛ"]={ "E", "̰" },
+ ["ḛ"]={ "e", "̰" },
+ ["Ḝ"]={ "Ȩ", "̆" },
+ ["ḝ"]={ "ȩ", "̆" },
+ ["Ḟ"]={ "F", "̇" },
+ ["ḟ"]={ "f", "̇" },
+ ["Ḡ"]={ "G", "̄" },
+ ["ḡ"]={ "g", "̄" },
+ ["Ḣ"]={ "H", "̇" },
+ ["ḣ"]={ "h", "̇" },
+ ["Ḥ"]={ "H", "̣" },
+ ["ḥ"]={ "h", "̣" },
+ ["Ḧ"]={ "H", "̈" },
+ ["ḧ"]={ "h", "̈" },
+ ["Ḩ"]={ "H", "̧" },
+ ["ḩ"]={ "h", "̧" },
+ ["Ḫ"]={ "H", "̮" },
+ ["ḫ"]={ "h", "̮" },
+ ["Ḭ"]={ "I", "̰" },
+ ["ḭ"]={ "i", "̰" },
+ ["Ḯ"]={ "Ï", "́" },
+ ["ḯ"]={ "ï", "́" },
+ ["Ḱ"]={ "K", "́" },
+ ["ḱ"]={ "k", "́" },
+ ["Ḳ"]={ "K", "̣" },
+ ["ḳ"]={ "k", "̣" },
+ ["Ḵ"]={ "K", "̱" },
+ ["ḵ"]={ "k", "̱" },
+ ["Ḷ"]={ "L", "̣" },
+ ["ḷ"]={ "l", "̣" },
+ ["Ḹ"]={ "Ḷ", "̄" },
+ ["ḹ"]={ "ḷ", "̄" },
+ ["Ḻ"]={ "L", "̱" },
+ ["ḻ"]={ "l", "̱" },
+ ["Ḽ"]={ "L", "̭" },
+ ["ḽ"]={ "l", "̭" },
+ ["Ḿ"]={ "M", "́" },
+ ["ḿ"]={ "m", "́" },
+ ["Ṁ"]={ "M", "̇" },
+ ["ṁ"]={ "m", "̇" },
+ ["Ṃ"]={ "M", "̣" },
+ ["ṃ"]={ "m", "̣" },
+ ["Ṅ"]={ "N", "̇" },
+ ["ṅ"]={ "n", "̇" },
+ ["Ṇ"]={ "N", "̣" },
+ ["ṇ"]={ "n", "̣" },
+ ["Ṉ"]={ "N", "̱" },
+ ["ṉ"]={ "n", "̱" },
+ ["Ṋ"]={ "N", "̭" },
+ ["ṋ"]={ "n", "̭" },
+ ["Ṍ"]={ "Õ", "́" },
+ ["ṍ"]={ "õ", "́" },
+ ["Ṏ"]={ "Õ", "̈" },
+ ["ṏ"]={ "õ", "̈" },
+ ["Ṑ"]={ "Ō", "̀" },
+ ["ṑ"]={ "ō", "̀" },
+ ["Ṓ"]={ "Ō", "́" },
+ ["ṓ"]={ "ō", "́" },
+ ["Ṕ"]={ "P", "́" },
+ ["ṕ"]={ "p", "́" },
+ ["Ṗ"]={ "P", "̇" },
+ ["ṗ"]={ "p", "̇" },
+ ["Ṙ"]={ "R", "̇" },
+ ["ṙ"]={ "r", "̇" },
+ ["Ṛ"]={ "R", "̣" },
+ ["ṛ"]={ "r", "̣" },
+ ["Ṝ"]={ "Ṛ", "̄" },
+ ["ṝ"]={ "ṛ", "̄" },
+ ["Ṟ"]={ "R", "̱" },
+ ["ṟ"]={ "r", "̱" },
+ ["Ṡ"]={ "S", "̇" },
+ ["ṡ"]={ "s", "̇" },
+ ["Ṣ"]={ "S", "̣" },
+ ["ṣ"]={ "s", "̣" },
+ ["Ṥ"]={ "Ś", "̇" },
+ ["ṥ"]={ "ś", "̇" },
+ ["Ṧ"]={ "Š", "̇" },
+ ["ṧ"]={ "š", "̇" },
+ ["Ṩ"]={ "Ṣ", "̇" },
+ ["ṩ"]={ "ṣ", "̇" },
+ ["Ṫ"]={ "T", "̇" },
+ ["ṫ"]={ "t", "̇" },
+ ["Ṭ"]={ "T", "̣" },
+ ["ṭ"]={ "t", "̣" },
+ ["Ṯ"]={ "T", "̱" },
+ ["ṯ"]={ "t", "̱" },
+ ["Ṱ"]={ "T", "̭" },
+ ["ṱ"]={ "t", "̭" },
+ ["Ṳ"]={ "U", "̤" },
+ ["ṳ"]={ "u", "̤" },
+ ["Ṵ"]={ "U", "̰" },
+ ["ṵ"]={ "u", "̰" },
+ ["Ṷ"]={ "U", "̭" },
+ ["ṷ"]={ "u", "̭" },
+ ["Ṹ"]={ "Ũ", "́" },
+ ["ṹ"]={ "ũ", "́" },
+ ["Ṻ"]={ "Ū", "̈" },
+ ["ṻ"]={ "ū", "̈" },
+ ["Ṽ"]={ "V", "̃" },
+ ["ṽ"]={ "v", "̃" },
+ ["Ṿ"]={ "V", "̣" },
+ ["ṿ"]={ "v", "̣" },
+ ["Ẁ"]={ "W", "̀" },
+ ["ẁ"]={ "w", "̀" },
+ ["Ẃ"]={ "W", "́" },
+ ["ẃ"]={ "w", "́" },
+ ["Ẅ"]={ "W", "̈" },
+ ["ẅ"]={ "w", "̈" },
+ ["Ẇ"]={ "W", "̇" },
+ ["ẇ"]={ "w", "̇" },
+ ["Ẉ"]={ "W", "̣" },
+ ["ẉ"]={ "w", "̣" },
+ ["Ẋ"]={ "X", "̇" },
+ ["ẋ"]={ "x", "̇" },
+ ["Ẍ"]={ "X", "̈" },
+ ["ẍ"]={ "x", "̈" },
+ ["Ẏ"]={ "Y", "̇" },
+ ["ẏ"]={ "y", "̇" },
+ ["Ẑ"]={ "Z", "̂" },
+ ["ẑ"]={ "z", "̂" },
+ ["Ẓ"]={ "Z", "̣" },
+ ["ẓ"]={ "z", "̣" },
+ ["Ẕ"]={ "Z", "̱" },
+ ["ẕ"]={ "z", "̱" },
+ ["ẖ"]={ "h", "̱" },
+ ["ẗ"]={ "t", "̈" },
+ ["ẘ"]={ "w", "̊" },
+ ["ẙ"]={ "y", "̊" },
+ ["ẛ"]={ "ſ", "̇" },
+ ["Ạ"]={ "A", "̣" },
+ ["ạ"]={ "a", "̣" },
+ ["Ả"]={ "A", "̉" },
+ ["ả"]={ "a", "̉" },
+ ["Ấ"]={ "Â", "́" },
+ ["ấ"]={ "â", "́" },
+ ["Ầ"]={ "Â", "̀" },
+ ["ầ"]={ "â", "̀" },
+ ["Ẩ"]={ "Â", "̉" },
+ ["ẩ"]={ "â", "̉" },
+ ["Ẫ"]={ "Â", "̃" },
+ ["ẫ"]={ "â", "̃" },
+ ["Ậ"]={ "Ạ", "̂" },
+ ["ậ"]={ "ạ", "̂" },
+ ["Ắ"]={ "Ă", "́" },
+ ["ắ"]={ "ă", "́" },
+ ["Ằ"]={ "Ă", "̀" },
+ ["ằ"]={ "ă", "̀" },
+ ["Ẳ"]={ "Ă", "̉" },
+ ["ẳ"]={ "ă", "̉" },
+ ["Ẵ"]={ "Ă", "̃" },
+ ["ẵ"]={ "ă", "̃" },
+ ["Ặ"]={ "Ạ", "̆" },
+ ["ặ"]={ "ạ", "̆" },
+ ["Ẹ"]={ "E", "̣" },
+ ["ẹ"]={ "e", "̣" },
+ ["Ẻ"]={ "E", "̉" },
+ ["ẻ"]={ "e", "̉" },
+ ["Ẽ"]={ "E", "̃" },
+ ["ẽ"]={ "e", "̃" },
+ ["Ế"]={ "Ê", "́" },
+ ["ế"]={ "ê", "́" },
+ ["Ề"]={ "Ê", "̀" },
+ ["ề"]={ "ê", "̀" },
+ ["Ể"]={ "Ê", "̉" },
+ ["ể"]={ "ê", "̉" },
+ ["Ễ"]={ "Ê", "̃" },
+ ["ễ"]={ "ê", "̃" },
+ ["Ệ"]={ "Ẹ", "̂" },
+ ["ệ"]={ "ẹ", "̂" },
+ ["Ỉ"]={ "I", "̉" },
+ ["ỉ"]={ "i", "̉" },
+ ["Ị"]={ "I", "̣" },
+ ["ị"]={ "i", "̣" },
+ ["Ọ"]={ "O", "̣" },
+ ["ọ"]={ "o", "̣" },
+ ["Ỏ"]={ "O", "̉" },
+ ["ỏ"]={ "o", "̉" },
+ ["Ố"]={ "Ô", "́" },
+ ["ố"]={ "ô", "́" },
+ ["Ồ"]={ "Ô", "̀" },
+ ["ồ"]={ "ô", "̀" },
+ ["Ổ"]={ "Ô", "̉" },
+ ["ổ"]={ "ô", "̉" },
+ ["Ỗ"]={ "Ô", "̃" },
+ ["ỗ"]={ "ô", "̃" },
+ ["Ộ"]={ "Ọ", "̂" },
+ ["ộ"]={ "ọ", "̂" },
+ ["Ớ"]={ "Ơ", "́" },
+ ["ớ"]={ "ơ", "́" },
+ ["Ờ"]={ "Ơ", "̀" },
+ ["ờ"]={ "ơ", "̀" },
+ ["Ở"]={ "Ơ", "̉" },
+ ["ở"]={ "ơ", "̉" },
+ ["Ỡ"]={ "Ơ", "̃" },
+ ["ỡ"]={ "ơ", "̃" },
+ ["Ợ"]={ "Ơ", "̣" },
+ ["ợ"]={ "ơ", "̣" },
+ ["Ụ"]={ "U", "̣" },
+ ["ụ"]={ "u", "̣" },
+ ["Ủ"]={ "U", "̉" },
+ ["ủ"]={ "u", "̉" },
+ ["Ứ"]={ "Ư", "́" },
+ ["ứ"]={ "ư", "́" },
+ ["Ừ"]={ "Ư", "̀" },
+ ["ừ"]={ "ư", "̀" },
+ ["Ử"]={ "Ư", "̉" },
+ ["ử"]={ "ư", "̉" },
+ ["Ữ"]={ "Ư", "̃" },
+ ["ữ"]={ "ư", "̃" },
+ ["Ự"]={ "Ư", "̣" },
+ ["ự"]={ "ư", "̣" },
+ ["Ỳ"]={ "Y", "̀" },
+ ["ỳ"]={ "y", "̀" },
+ ["Ỵ"]={ "Y", "̣" },
+ ["ỵ"]={ "y", "̣" },
+ ["Ỷ"]={ "Y", "̉" },
+ ["ỷ"]={ "y", "̉" },
+ ["Ỹ"]={ "Y", "̃" },
+ ["ỹ"]={ "y", "̃" },
+ ["ἀ"]={ "α", "̓" },
+ ["ἁ"]={ "α", "̔" },
+ ["ἂ"]={ "ἀ", "̀" },
+ ["ἃ"]={ "ἁ", "̀" },
+ ["ἄ"]={ "ἀ", "́" },
+ ["ἅ"]={ "ἁ", "́" },
+ ["ἆ"]={ "ἀ", "͂" },
+ ["ἇ"]={ "ἁ", "͂" },
+ ["Ἀ"]={ "Α", "̓" },
+ ["Ἁ"]={ "Α", "̔" },
+ ["Ἂ"]={ "Ἀ", "̀" },
+ ["Ἃ"]={ "Ἁ", "̀" },
+ ["Ἄ"]={ "Ἀ", "́" },
+ ["Ἅ"]={ "Ἁ", "́" },
+ ["Ἆ"]={ "Ἀ", "͂" },
+ ["Ἇ"]={ "Ἁ", "͂" },
+ ["ἐ"]={ "ε", "̓" },
+ ["ἑ"]={ "ε", "̔" },
+ ["ἒ"]={ "ἐ", "̀" },
+ ["ἓ"]={ "ἑ", "̀" },
+ ["ἔ"]={ "ἐ", "́" },
+ ["ἕ"]={ "ἑ", "́" },
+ ["Ἐ"]={ "Ε", "̓" },
+ ["Ἑ"]={ "Ε", "̔" },
+ ["Ἒ"]={ "Ἐ", "̀" },
+ ["Ἓ"]={ "Ἑ", "̀" },
+ ["Ἔ"]={ "Ἐ", "́" },
+ ["Ἕ"]={ "Ἑ", "́" },
+ ["ἠ"]={ "η", "̓" },
+ ["ἡ"]={ "η", "̔" },
+ ["ἢ"]={ "ἠ", "̀" },
+ ["ἣ"]={ "ἡ", "̀" },
+ ["ἤ"]={ "ἠ", "́" },
+ ["ἥ"]={ "ἡ", "́" },
+ ["ἦ"]={ "ἠ", "͂" },
+ ["ἧ"]={ "ἡ", "͂" },
+ ["Ἠ"]={ "Η", "̓" },
+ ["Ἡ"]={ "Η", "̔" },
+ ["Ἢ"]={ "Ἠ", "̀" },
+ ["Ἣ"]={ "Ἡ", "̀" },
+ ["Ἤ"]={ "Ἠ", "́" },
+ ["Ἥ"]={ "Ἡ", "́" },
+ ["Ἦ"]={ "Ἠ", "͂" },
+ ["Ἧ"]={ "Ἡ", "͂" },
+ ["ἰ"]={ "ι", "̓" },
+ ["ἱ"]={ "ι", "̔" },
+ ["ἲ"]={ "ἰ", "̀" },
+ ["ἳ"]={ "ἱ", "̀" },
+ ["ἴ"]={ "ἰ", "́" },
+ ["ἵ"]={ "ἱ", "́" },
+ ["ἶ"]={ "ἰ", "͂" },
+ ["ἷ"]={ "ἱ", "͂" },
+ ["Ἰ"]={ "Ι", "̓" },
+ ["Ἱ"]={ "Ι", "̔" },
+ ["Ἲ"]={ "Ἰ", "̀" },
+ ["Ἳ"]={ "Ἱ", "̀" },
+ ["Ἴ"]={ "Ἰ", "́" },
+ ["Ἵ"]={ "Ἱ", "́" },
+ ["Ἶ"]={ "Ἰ", "͂" },
+ ["Ἷ"]={ "Ἱ", "͂" },
+ ["ὀ"]={ "ο", "̓" },
+ ["ὁ"]={ "ο", "̔" },
+ ["ὂ"]={ "ὀ", "̀" },
+ ["ὃ"]={ "ὁ", "̀" },
+ ["ὄ"]={ "ὀ", "́" },
+ ["ὅ"]={ "ὁ", "́" },
+ ["Ὀ"]={ "Ο", "̓" },
+ ["Ὁ"]={ "Ο", "̔" },
+ ["Ὂ"]={ "Ὀ", "̀" },
+ ["Ὃ"]={ "Ὁ", "̀" },
+ ["Ὄ"]={ "Ὀ", "́" },
+ ["Ὅ"]={ "Ὁ", "́" },
+ ["ὐ"]={ "υ", "̓" },
+ ["ὑ"]={ "υ", "̔" },
+ ["ὒ"]={ "ὐ", "̀" },
+ ["ὓ"]={ "ὑ", "̀" },
+ ["ὔ"]={ "ὐ", "́" },
+ ["ὕ"]={ "ὑ", "́" },
+ ["ὖ"]={ "ὐ", "͂" },
+ ["ὗ"]={ "ὑ", "͂" },
+ ["Ὑ"]={ "Υ", "̔" },
+ ["Ὓ"]={ "Ὑ", "̀" },
+ ["Ὕ"]={ "Ὑ", "́" },
+ ["Ὗ"]={ "Ὑ", "͂" },
+ ["ὠ"]={ "ω", "̓" },
+ ["ὡ"]={ "ω", "̔" },
+ ["ὢ"]={ "ὠ", "̀" },
+ ["ὣ"]={ "ὡ", "̀" },
+ ["ὤ"]={ "ὠ", "́" },
+ ["ὥ"]={ "ὡ", "́" },
+ ["ὦ"]={ "ὠ", "͂" },
+ ["ὧ"]={ "ὡ", "͂" },
+ ["Ὠ"]={ "Ω", "̓" },
+ ["Ὡ"]={ "Ω", "̔" },
+ ["Ὢ"]={ "Ὠ", "̀" },
+ ["Ὣ"]={ "Ὡ", "̀" },
+ ["Ὤ"]={ "Ὠ", "́" },
+ ["Ὥ"]={ "Ὡ", "́" },
+ ["Ὦ"]={ "Ὠ", "͂" },
+ ["Ὧ"]={ "Ὡ", "͂" },
+ ["ὰ"]={ "α", "̀" },
+ ["ὲ"]={ "ε", "̀" },
+ ["ὴ"]={ "η", "̀" },
+ ["ὶ"]={ "ι", "̀" },
+ ["ὸ"]={ "ο", "̀" },
+ ["ὺ"]={ "υ", "̀" },
+ ["ὼ"]={ "ω", "̀" },
+ ["ᾀ"]={ "ἀ", "ͅ" },
+ ["ᾁ"]={ "ἁ", "ͅ" },
+ ["ᾂ"]={ "ἂ", "ͅ" },
+ ["ᾃ"]={ "ἃ", "ͅ" },
+ ["ᾄ"]={ "ἄ", "ͅ" },
+ ["ᾅ"]={ "ἅ", "ͅ" },
+ ["ᾆ"]={ "ἆ", "ͅ" },
+ ["ᾇ"]={ "ἇ", "ͅ" },
+ ["ᾈ"]={ "Ἀ", "ͅ" },
+ ["ᾉ"]={ "Ἁ", "ͅ" },
+ ["ᾊ"]={ "Ἂ", "ͅ" },
+ ["ᾋ"]={ "Ἃ", "ͅ" },
+ ["ᾌ"]={ "Ἄ", "ͅ" },
+ ["ᾍ"]={ "Ἅ", "ͅ" },
+ ["ᾎ"]={ "Ἆ", "ͅ" },
+ ["ᾏ"]={ "Ἇ", "ͅ" },
+ ["ᾐ"]={ "ἠ", "ͅ" },
+ ["ᾑ"]={ "ἡ", "ͅ" },
+ ["ᾒ"]={ "ἢ", "ͅ" },
+ ["ᾓ"]={ "ἣ", "ͅ" },
+ ["ᾔ"]={ "ἤ", "ͅ" },
+ ["ᾕ"]={ "ἥ", "ͅ" },
+ ["ᾖ"]={ "ἦ", "ͅ" },
+ ["ᾗ"]={ "ἧ", "ͅ" },
+ ["ᾘ"]={ "Ἠ", "ͅ" },
+ ["ᾙ"]={ "Ἡ", "ͅ" },
+ ["ᾚ"]={ "Ἢ", "ͅ" },
+ ["ᾛ"]={ "Ἣ", "ͅ" },
+ ["ᾜ"]={ "Ἤ", "ͅ" },
+ ["ᾝ"]={ "Ἥ", "ͅ" },
+ ["ᾞ"]={ "Ἦ", "ͅ" },
+ ["ᾟ"]={ "Ἧ", "ͅ" },
+ ["ᾠ"]={ "ὠ", "ͅ" },
+ ["ᾡ"]={ "ὡ", "ͅ" },
+ ["ᾢ"]={ "ὢ", "ͅ" },
+ ["ᾣ"]={ "ὣ", "ͅ" },
+ ["ᾤ"]={ "ὤ", "ͅ" },
+ ["ᾥ"]={ "ὥ", "ͅ" },
+ ["ᾦ"]={ "ὦ", "ͅ" },
+ ["ᾧ"]={ "ὧ", "ͅ" },
+ ["ᾨ"]={ "Ὠ", "ͅ" },
+ ["ᾩ"]={ "Ὡ", "ͅ" },
+ ["ᾪ"]={ "Ὢ", "ͅ" },
+ ["ᾫ"]={ "Ὣ", "ͅ" },
+ ["ᾬ"]={ "Ὤ", "ͅ" },
+ ["ᾭ"]={ "Ὥ", "ͅ" },
+ ["ᾮ"]={ "Ὦ", "ͅ" },
+ ["ᾯ"]={ "Ὧ", "ͅ" },
+ ["ᾰ"]={ "α", "̆" },
+ ["ᾱ"]={ "α", "̄" },
+ ["ᾲ"]={ "ὰ", "ͅ" },
+ ["ᾳ"]={ "α", "ͅ" },
+ ["ᾴ"]={ "ά", "ͅ" },
+ ["ᾶ"]={ "α", "͂" },
+ ["ᾷ"]={ "ᾶ", "ͅ" },
+ ["Ᾰ"]={ "Α", "̆" },
+ ["Ᾱ"]={ "Α", "̄" },
+ ["Ὰ"]={ "Α", "̀" },
+ ["ᾼ"]={ "Α", "ͅ" },
+ ["῁"]={ "¨", "͂" },
+ ["ῂ"]={ "ὴ", "ͅ" },
+ ["ῃ"]={ "η", "ͅ" },
+ ["ῄ"]={ "ή", "ͅ" },
+ ["ῆ"]={ "η", "͂" },
+ ["ῇ"]={ "ῆ", "ͅ" },
+ ["Ὲ"]={ "Ε", "̀" },
+ ["Ὴ"]={ "Η", "̀" },
+ ["ῌ"]={ "Η", "ͅ" },
+ ["῍"]={ "᾿", "̀" },
+ ["῎"]={ "᾿", "́" },
+ ["῏"]={ "᾿", "͂" },
+ ["ῐ"]={ "ι", "̆" },
+ ["ῑ"]={ "ι", "̄" },
+ ["ῒ"]={ "ϊ", "̀" },
+ ["ῖ"]={ "ι", "͂" },
+ ["ῗ"]={ "ϊ", "͂" },
+ ["Ῐ"]={ "Ι", "̆" },
+ ["Ῑ"]={ "Ι", "̄" },
+ ["Ὶ"]={ "Ι", "̀" },
+ ["῝"]={ "῾", "̀" },
+ ["῞"]={ "῾", "́" },
+ ["῟"]={ "῾", "͂" },
+ ["ῠ"]={ "υ", "̆" },
+ ["ῡ"]={ "υ", "̄" },
+ ["ῢ"]={ "ϋ", "̀" },
+ ["ῤ"]={ "ρ", "̓" },
+ ["ῥ"]={ "ρ", "̔" },
+ ["ῦ"]={ "υ", "͂" },
+ ["ῧ"]={ "ϋ", "͂" },
+ ["Ῠ"]={ "Υ", "̆" },
+ ["Ῡ"]={ "Υ", "̄" },
+ ["Ὺ"]={ "Υ", "̀" },
+ ["Ῥ"]={ "Ρ", "̔" },
+ ["῭"]={ "¨", "̀" },
+ ["ῲ"]={ "ὼ", "ͅ" },
+ ["ῳ"]={ "ω", "ͅ" },
+ ["ῴ"]={ "ώ", "ͅ" },
+ ["ῶ"]={ "ω", "͂" },
+ ["ῷ"]={ "ῶ", "ͅ" },
+ ["Ὸ"]={ "Ο", "̀" },
+ ["Ὼ"]={ "Ω", "̀" },
+ ["ῼ"]={ "Ω", "ͅ" },
+ ["↚"]={ "←", "̸" },
+ ["↛"]={ "→", "̸" },
+ ["↮"]={ "↔", "̸" },
+ ["⇍"]={ "⇐", "̸" },
+ ["⇎"]={ "⇔", "̸" },
+ ["⇏"]={ "⇒", "̸" },
+ ["∄"]={ "∃", "̸" },
+ ["∉"]={ "∈", "̸" },
+ ["∌"]={ "∋", "̸" },
+ ["∤"]={ "∣", "̸" },
+ ["∦"]={ "∥", "̸" },
+ ["≁"]={ "∼", "̸" },
+ ["≄"]={ "≃", "̸" },
+ ["≇"]={ "≅", "̸" },
+ ["≉"]={ "≈", "̸" },
+ ["≠"]={ "=", "̸" },
+ ["≢"]={ "≡", "̸" },
+ ["≭"]={ "≍", "̸" },
+ ["≮"]={ "<", "̸" },
+ ["≯"]={ ">", "̸" },
+ ["≰"]={ "≤", "̸" },
+ ["≱"]={ "≥", "̸" },
+ ["≴"]={ "≲", "̸" },
+ ["≵"]={ "≳", "̸" },
+ ["≸"]={ "≶", "̸" },
+ ["≹"]={ "≷", "̸" },
+ ["⊀"]={ "≺", "̸" },
+ ["⊁"]={ "≻", "̸" },
+ ["⊄"]={ "⊂", "̸" },
+ ["⊅"]={ "⊃", "̸" },
+ ["⊈"]={ "⊆", "̸" },
+ ["⊉"]={ "⊇", "̸" },
+ ["⊬"]={ "⊢", "̸" },
+ ["⊭"]={ "⊨", "̸" },
+ ["⊮"]={ "⊩", "̸" },
+ ["⊯"]={ "⊫", "̸" },
+ ["⋠"]={ "≼", "̸" },
+ ["⋡"]={ "≽", "̸" },
+ ["⋢"]={ "⊑", "̸" },
+ ["⋣"]={ "⊒", "̸" },
+ ["⋪"]={ "⊲", "̸" },
+ ["⋫"]={ "⊳", "̸" },
+ ["⋬"]={ "⊴", "̸" },
+ ["⋭"]={ "⊵", "̸" },
+ ["⫝̸"]={ "⫝", "̸" },
+ ["が"]={ "か", "゙" },
+ ["ぎ"]={ "き", "゙" },
+ ["ぐ"]={ "く", "゙" },
+ ["げ"]={ "け", "゙" },
+ ["ご"]={ "こ", "゙" },
+ ["ざ"]={ "さ", "゙" },
+ ["じ"]={ "し", "゙" },
+ ["ず"]={ "す", "゙" },
+ ["ぜ"]={ "せ", "゙" },
+ ["ぞ"]={ "そ", "゙" },
+ ["だ"]={ "た", "゙" },
+ ["ぢ"]={ "ち", "゙" },
+ ["づ"]={ "つ", "゙" },
+ ["で"]={ "て", "゙" },
+ ["ど"]={ "と", "゙" },
+ ["ば"]={ "は", "゙" },
+ ["ぱ"]={ "は", "゚" },
+ ["び"]={ "ひ", "゙" },
+ ["ぴ"]={ "ひ", "゚" },
+ ["ぶ"]={ "ふ", "゙" },
+ ["ぷ"]={ "ふ", "゚" },
+ ["べ"]={ "へ", "゙" },
+ ["ぺ"]={ "へ", "゚" },
+ ["ぼ"]={ "ほ", "゙" },
+ ["ぽ"]={ "ほ", "゚" },
+ ["ゔ"]={ "う", "゙" },
+ ["ゞ"]={ "ゝ", "゙" },
+ ["ガ"]={ "カ", "゙" },
+ ["ギ"]={ "キ", "゙" },
+ ["グ"]={ "ク", "゙" },
+ ["ゲ"]={ "ケ", "゙" },
+ ["ゴ"]={ "コ", "゙" },
+ ["ザ"]={ "サ", "゙" },
+ ["ジ"]={ "シ", "゙" },
+ ["ズ"]={ "ス", "゙" },
+ ["ゼ"]={ "セ", "゙" },
+ ["ゾ"]={ "ソ", "゙" },
+ ["ダ"]={ "タ", "゙" },
+ ["ヂ"]={ "チ", "゙" },
+ ["ヅ"]={ "ツ", "゙" },
+ ["デ"]={ "テ", "゙" },
+ ["ド"]={ "ト", "゙" },
+ ["バ"]={ "ハ", "゙" },
+ ["パ"]={ "ハ", "゚" },
+ ["ビ"]={ "ヒ", "゙" },
+ ["ピ"]={ "ヒ", "゚" },
+ ["ブ"]={ "フ", "゙" },
+ ["プ"]={ "フ", "゚" },
+ ["ベ"]={ "ヘ", "゙" },
+ ["ペ"]={ "ヘ", "゚" },
+ ["ボ"]={ "ホ", "゙" },
+ ["ポ"]={ "ホ", "゚" },
+ ["ヴ"]={ "ウ", "゙" },
+ ["ヷ"]={ "ワ", "゙" },
+ ["ヸ"]={ "ヰ", "゙" },
+ ["ヹ"]={ "ヱ", "゙" },
+ ["ヺ"]={ "ヲ", "゙" },
+ ["ヾ"]={ "ヽ", "゙" },
+ ["יִ"]={ "י", "ִ" },
+ ["ײַ"]={ "ײ", "ַ" },
+ ["שׁ"]={ "ש", "ׁ" },
+ ["שׂ"]={ "ש", "ׂ" },
+ ["שּׁ"]={ "שּ", "ׁ" },
+ ["שּׂ"]={ "שּ", "ׂ" },
+ ["אַ"]={ "א", "ַ" },
+ ["אָ"]={ "א", "ָ" },
+ ["אּ"]={ "א", "ּ" },
+ ["בּ"]={ "ב", "ּ" },
+ ["גּ"]={ "ג", "ּ" },
+ ["דּ"]={ "ד", "ּ" },
+ ["הּ"]={ "ה", "ּ" },
+ ["וּ"]={ "ו", "ּ" },
+ ["זּ"]={ "ז", "ּ" },
+ ["טּ"]={ "ט", "ּ" },
+ ["יּ"]={ "י", "ּ" },
+ ["ךּ"]={ "ך", "ּ" },
+ ["כּ"]={ "כ", "ּ" },
+ ["לּ"]={ "ל", "ּ" },
+ ["מּ"]={ "מ", "ּ" },
+ ["נּ"]={ "נ", "ּ" },
+ ["סּ"]={ "ס", "ּ" },
+ ["ףּ"]={ "ף", "ּ" },
+ ["פּ"]={ "פ", "ּ" },
+ ["צּ"]={ "צ", "ּ" },
+ ["קּ"]={ "ק", "ּ" },
+ ["רּ"]={ "ר", "ּ" },
+ ["שּ"]={ "ש", "ּ" },
+ ["תּ"]={ "ת", "ּ" },
+ ["וֹ"]={ "ו", "ֹ" },
+ ["בֿ"]={ "ב", "ֿ" },
+ ["כֿ"]={ "כ", "ֿ" },
+ ["פֿ"]={ "פ", "ֿ" },
+ ["𑂚"]={ "𑂙", "𑂺" },
+ ["𑂜"]={ "𑂛", "𑂺" },
+ ["𑂫"]={ "𑂥", "𑂺" },
+ ["𑄮"]={ "𑄱", "𑄧" },
+ ["𑄯"]={ "𑄲", "𑄧" },
+ ["𑍋"]={ "𑍇", "𑌾" },
+ ["𑍌"]={ "𑍇", "𑍗" },
+ ["𑒻"]={ "𑒹", "𑒺" },
+ ["𑒼"]={ "𑒹", "𑒰" },
+ ["𑒾"]={ "𑒹", "𑒽" },
+ ["𑖺"]={ "𑖸", "𑖯" },
+ ["𑖻"]={ "𑖹", "𑖯" },
+ ["𝅗𝅥"]={ "𝅗", "𝅥" },
+ ["𝅘𝅥"]={ "𝅘", "𝅥" },
+ ["𝅘𝅥𝅮"]={ "𝅘𝅥", "𝅮" },
+ ["𝅘𝅥𝅯"]={ "𝅘𝅥", "𝅯" },
+ ["𝅘𝅥𝅰"]={ "𝅘𝅥", "𝅰" },
+ ["𝅘𝅥𝅱"]={ "𝅘𝅥", "𝅱" },
+ ["𝅘𝅥𝅲"]={ "𝅘𝅥", "𝅲" },
+ ["𝆹𝅥"]={ "𝆹", "𝅥" },
+ ["𝆺𝅥"]={ "𝆺", "𝅥" },
+ ["𝆹𝅥𝅮"]={ "𝆹𝅥", "𝅮" },
+ ["𝆺𝅥𝅮"]={ "𝆺𝅥", "𝅮" },
+ ["𝆹𝅥𝅯"]={ "𝆹𝅥", "𝅯" },
+ ["𝆺𝅥𝅯"]={ "𝆺𝅥", "𝅯" },
+ },
+ },
+ },
+ ["name"]="collapse",
+ ["prepend"]=true,
+ ["type"]="ligature",
+} \ No newline at end of file
diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua
index b8d5ef8f0..dbd0a5227 100644
--- a/tex/generic/context/luatex/luatex-fonts-merged.lua
+++ b/tex/generic/context/luatex/luatex-fonts-merged.lua
@@ -1,6 +1,6 @@
-- merged file : c:/data/develop/context/sources/luatex-fonts-merged.lua
-- parent file : c:/data/develop/context/sources/luatex-fonts.lua
--- merge date : 05/19/16 13:43:44
+-- merge date : 05/14/17 19:09:26
do -- begin closure to overcome local limits and interference
@@ -108,6 +108,16 @@ if flush then
local spawn=os.spawn if spawn then function os.spawn (...) flush() return spawn (...) end end
local popen=io.popen if popen then function io.popen (...) flush() return popen (...) end end
end
+FFISUPPORTED=type(ffi)=="table" and ffi.os~="" and ffi.arch~="" and ffi.load
+if not FFISUPPORTED then
+ local okay;okay,ffi=pcall(require,"ffi")
+ FFISUPPORTED=type(ffi)=="table" and ffi.os~="" and ffi.arch~="" and ffi.load
+end
+if not FFISUPPORTED then
+ ffi=nil
+elseif not ffi.number then
+ ffi.number=tonumber
+end
end -- closure
@@ -203,6 +213,7 @@ patterns.nonwhitespace=nonwhitespace
local stripper=spacer^0*C((spacer^0*nonspacer^1)^0)
local fullstripper=whitespace^0*C((whitespace^0*nonwhitespace^1)^0)
local collapser=Cs(spacer^0/""*nonspacer^0*((spacer^0/" "*nonspacer^1)^0))
+local nospacer=Cs((whitespace^1/""+nonwhitespace^1)^0)
local b_collapser=Cs(whitespace^0/""*(nonwhitespace^1+whitespace^1/" ")^0)
local e_collapser=Cs((whitespace^1*P(-1)/""+nonwhitespace^1+whitespace^1/" ")^0)
local m_collapser=Cs((nonwhitespace^1+whitespace^1/" ")^0)
@@ -212,6 +223,7 @@ local m_stripper=Cs((nonspacer^1+spacer^1/" ")^0)
patterns.stripper=stripper
patterns.fullstripper=fullstripper
patterns.collapser=collapser
+patterns.nospacer=nospacer
patterns.b_collapser=b_collapser
patterns.m_collapser=m_collapser
patterns.e_collapser=e_collapser
@@ -678,27 +690,7 @@ function lpeg.append(list,pp,delayed,checked)
end
local p_false=P(false)
local p_true=P(true)
-local function make(t)
- local function making(t)
- local p=p_false
- local keys=sortedkeys(t)
- for i=1,#keys do
- local k=keys[i]
- if k~="" then
- local v=t[k]
- if v==true then
- p=p+P(k)*p_true
- elseif v==false then
- else
- p=p+P(k)*making(v)
- end
- end
- end
- if t[""] then
- p=p+p_true
- end
- return p
- end
+local function make(t,rest)
local p=p_false
local keys=sortedkeys(t)
for i=1,#keys do
@@ -709,10 +701,13 @@ local function make(t)
p=p+P(k)*p_true
elseif v==false then
else
- p=p+P(k)*making(v)
+ p=p+P(k)*make(v,v[""])
end
end
end
+ if rest then
+ p=p+p_true
+ end
return p
end
local function collapse(t,x)
@@ -962,22 +957,26 @@ end
local stripper=patterns.stripper
local fullstripper=patterns.fullstripper
local collapser=patterns.collapser
+local nospacer=patterns.nospacer
local longtostring=patterns.longtostring
function string.strip(str)
- return lpegmatch(stripper,str) or ""
+ return str and lpegmatch(stripper,str) or ""
end
function string.fullstrip(str)
- return lpegmatch(fullstripper,str) or ""
+ return str and lpegmatch(fullstripper,str) or ""
end
function string.collapsespaces(str)
- return lpegmatch(collapser,str) or ""
+ return str and lpegmatch(collapser,str) or ""
+end
+function string.nospaces(str)
+ return str and lpegmatch(nospacer,str) or ""
end
function string.longtostring(str)
- return lpegmatch(longtostring,str) or ""
+ return str and lpegmatch(longtostring,str) or ""
end
local pattern=P(" ")^0*P(-1)
function string.is_empty(str)
- if str=="" then
+ if not str or str=="" then
return true
else
return lpegmatch(pattern,str) and true or false
@@ -1022,6 +1021,21 @@ function string.tformat(fmt,...)
end
string.quote=string.quoted
string.unquote=string.unquoted
+if not string.bytetable then
+ local limit=5000
+ function string.bytetable(str)
+ local n=#str
+ if n>limit then
+ local t={ byte(str,1,limit) }
+ for i=limit+1,n do
+ t[i]=byte(str,i)
+ end
+ return t
+ else
+ return { byte(str,1,n) }
+ end
+ end
+end
end -- closure
@@ -1352,19 +1366,23 @@ function table.fromhash(t)
end
return hsh
end
-local noquotes,hexify,handle,compact,inline,functions
+local noquotes,hexify,handle,compact,inline,functions,metacheck
local reserved=table.tohash {
'and','break','do','else','elseif','end','false','for','function','if',
'in','local','nil','not','or','repeat','return','then','true','until','while',
'NaN','goto',
}
-local function simple_table(t)
+local function is_simple_table(t,hexify)
local nt=#t
if nt>0 then
local n=0
for _,v in next,t do
n=n+1
+ if type(v)=="table" then
+ return nil
+ end
end
+ local haszero=rawget(t,0)
if n==nt then
local tt={}
for i=1,nt do
@@ -1374,10 +1392,10 @@ local function simple_table(t)
if hexify then
tt[i]=format("0x%X",v)
else
- tt[i]=tostring(v)
+ tt[i]=v
end
elseif tv=="string" then
- tt[i]=format("%q",v)
+ tt[i]=format("%q",v)
elseif tv=="boolean" then
tt[i]=v and "true" or "false"
else
@@ -1385,10 +1403,32 @@ local function simple_table(t)
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
+ if hexify then
+ tt[i+1]=format("0x%X",v)
+ else
+ tt[i+1]=v
+ end
+ 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
end
+table.is_simple_table=is_simple_table
local propername=patterns.propername
local function dummy() end
local function do_serialize(root,name,depth,level,indexed)
@@ -1422,7 +1462,7 @@ local function do_serialize(root,name,depth,level,indexed)
if compact then
last=#root
for k=1,last do
- if root[k]==nil then
+ if rawget(root,k)==nil then
last=k-1
break
end
@@ -1450,7 +1490,7 @@ local function do_serialize(root,name,depth,level,indexed)
if next(v)==nil then
handle(format("%s {},",depth))
elseif inline then
- local st=simple_table(v)
+ local st=is_simple_table(v,hexify)
if st then
handle(format("%s { %s },",depth,concat(st,", ")))
else
@@ -1487,6 +1527,7 @@ local function do_serialize(root,name,depth,level,indexed)
else
handle(format("%s [%s]=%s,",depth,k and "true" or "false",v))
end
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
if hexify then
handle(format("%s %s=0x%X,",depth,k,v))
@@ -1509,6 +1550,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=%q,",depth,k and "true" or "false",v))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=%q,",depth,k,v))
else
@@ -1524,13 +1566,14 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]={},",depth,k and "true" or "false"))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s={},",depth,k))
else
handle(format("%s [%q]={},",depth,k))
end
elseif inline then
- local st=simple_table(v)
+ local st=is_simple_table(v,hexify)
if st then
if tk=="number" then
if hexify then
@@ -1540,6 +1583,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]={ %s },",depth,k and "true" or "false",concat(st,", ")))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s={ %s },",depth,k,concat(st,", ")))
else
@@ -1560,6 +1604,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=%s,",depth,tostring(k),v and "true" or "false"))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=%s,",depth,k,v and "true" or "false"))
else
@@ -1576,6 +1621,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=load(%q),",depth,k and "true" or "false",f))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=load(%q),",depth,k,f))
else
@@ -1591,6 +1637,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=%q,",depth,k and "true" or "false",tostring(v)))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=%q,",depth,k,tostring(v)))
else
@@ -1612,6 +1659,7 @@ local function serialize(_handle,root,name,specification)
functions=specification.functions
compact=specification.compact
inline=specification.inline and compact
+ metacheck=specification.metacheck
if functions==nil then
functions=true
end
@@ -1621,6 +1669,9 @@ local function serialize(_handle,root,name,specification)
if inline==nil then
inline=compact
end
+ if metacheck==nil then
+ metacheck=true
+ end
else
noquotes=false
hexify=false
@@ -1628,6 +1679,7 @@ local function serialize(_handle,root,name,specification)
compact=true
inline=true
functions=true
+ metacheck=true
end
if tname=="string" then
if name=="return" then
@@ -1651,7 +1703,7 @@ local function serialize(_handle,root,name,specification)
handle("t={")
end
if root then
- if getmetatable(root) then
+ if metacheck and getmetatable(root) then
local dummy=root._w_h_a_t_e_v_e_r_
root._w_h_a_t_e_v_e_r_=nil
end
@@ -1727,6 +1779,38 @@ local function flattened(t,f,depth)
return f
end
table.flattened=flattened
+local function collapsed(t,f,h)
+ if f==nil then
+ f={}
+ h={}
+ end
+ for k=1,#t do
+ local v=t[k]
+ if type(v)=="table" then
+ collapsed(v,f,h)
+ elseif not h[v] then
+ f[#f+1]=v
+ h[v]=true
+ end
+ end
+ return f
+end
+local function collapsedhash(t,h)
+ if h==nil then
+ h={}
+ end
+ for k=1,#t do
+ local v=t[k]
+ if type(v)=="table" then
+ collapsedhash(v,h)
+ else
+ h[v]=true
+ end
+ end
+ return h
+end
+table.collapsed=collapsed
+table.collapsedhash=collapsedhash
local function unnest(t,f)
if not f then
f={}
@@ -1833,6 +1917,12 @@ function table.swapped(t,s)
end
return n
end
+function table.hashed(t)
+ for i=1,#t do
+ t[t[i]]=i
+ end
+ return t
+end
function table.mirrored(t)
local n={}
for k,v in next,t do
@@ -2006,6 +2096,7 @@ if not modules then modules={} end modules ['l-io']={
license="see context related readme files"
}
local io=io
+local open,flush,write,read=io.open,io.flush,io.write,io.read
local byte,find,gsub,format=string.byte,string.find,string.gsub,string.format
local concat=table.concat
local floor=math.floor
@@ -2015,50 +2106,56 @@ if string.find(os.getenv("PATH"),";",1,true) then
else
io.fileseparator,io.pathseparator="/",":"
end
-local function readall(f)
- return f:read("*all")
-end
+local large=2^24
+local medium=large/16
+local small=medium/8
local function readall(f)
local size=f:seek("end")
- if size==0 then
- return ""
- elseif size<1024*1024 then
+ if size>0 then
f:seek("set",0)
- return f:read('*all')
+ return f:read(size)
else
- local done=f:seek("set",0)
- local step
- if size<1024*1024 then
- step=1024*1024
- elseif size>16*1024*1024 then
- step=16*1024*1024
- else
- step=floor(size/(1024*1024))*1024*1024/8
- end
- local data={}
- while true do
- local r=f:read(step)
- if not r then
- return concat(data)
- else
- data[#data+1]=r
- end
- end
+ return ""
end
end
io.readall=readall
function io.loaddata(filename,textmode)
- local f=io.open(filename,(textmode and 'r') or 'rb')
+ local f=open(filename,(textmode and 'r') or 'rb')
if f then
- local data=readall(f)
+ local size=f:seek("end")
+ local data=nil
+ if size>0 then
+ f:seek("set",0)
+ data=f:read(size)
+ end
f:close()
- if #data>0 then
- return data
+ return data
+ end
+end
+function io.copydata(source,target,action)
+ local f=open(source,"rb")
+ if f then
+ local g=open(target,"wb")
+ if g then
+ local size=f:seek("end")
+ if size>0 then
+ f:seek("set",0)
+ local data=f:read(size)
+ if action then
+ data=action(data)
+ end
+ if data then
+ g:write(data)
+ end
+ end
+ g:close()
end
+ f:close()
+ flush()
end
end
function io.savedata(filename,data,joiner)
- local f=io.open(filename,"wb")
+ local f=open(filename,"wb")
if f then
if type(data)=="table" then
f:write(concat(data,joiner or ""))
@@ -2068,40 +2165,70 @@ function io.savedata(filename,data,joiner)
f:write(data or "")
end
f:close()
- io.flush()
+ flush()
return true
else
return false
end
end
-function io.loadlines(filename,n)
- local f=io.open(filename,'r')
- if not f then
- elseif n then
- local lines={}
- for i=1,n do
- local line=f:read("*lines")
- if line then
- lines[#lines+1]=line
- else
- break
+if fio and fio.readline then
+ local readline=fio.readline
+ function io.loadlines(filename,n)
+ local f=open(filename,'r')
+ if not f then
+ elseif n then
+ local lines={}
+ for i=1,n do
+ local line=readline(f)
+ if line then
+ lines[i]=line
+ else
+ break
+ end
+ end
+ f:close()
+ lines=concat(lines,"\n")
+ if #lines>0 then
+ return lines
+ end
+ else
+ local line=readline(f)
+ f:close()
+ if line and #line>0 then
+ return line
end
end
- f:close()
- lines=concat(lines,"\n")
- if #lines>0 then
- return lines
- end
- else
- local line=f:read("*line") or ""
- f:close()
- if #line>0 then
- return line
+ end
+else
+ function io.loadlines(filename,n)
+ local f=open(filename,'r')
+ if not f then
+ elseif n then
+ local lines={}
+ for i=1,n do
+ local line=f:read("*lines")
+ if line then
+ lines[i]=line
+ else
+ break
+ end
+ end
+ f:close()
+ lines=concat(lines,"\n")
+ if #lines>0 then
+ return lines
+ end
+ else
+ local line=f:read("*line") or ""
+ f:close()
+ if #line>0 then
+ return line
+ end
end
end
end
function io.loadchunk(filename,n)
- local f=io.open(filename,'rb')
+ local f=open(filename,'rb')
if f then
local data=f:read(n or 1024)
f:close()
@@ -2111,7 +2238,7 @@ function io.loadchunk(filename,n)
end
end
function io.exists(filename)
- local f=io.open(filename)
+ local f=open(filename)
if f==nil then
return false
else
@@ -2120,7 +2247,7 @@ function io.exists(filename)
end
end
function io.size(filename)
- local f=io.open(filename)
+ local f=open(filename)
if f==nil then
return 0
else
@@ -2129,11 +2256,11 @@ function io.size(filename)
return s
end
end
-function io.noflines(f)
+local function noflines(f)
if type(f)=="string" then
- local f=io.open(filename)
+ local f=open(filename)
if f then
- local n=f and io.noflines(f) or 0
+ local n=f and noflines(f) or 0
f:close()
return n
else
@@ -2148,6 +2275,7 @@ function io.noflines(f)
return n
end
end
+io.noflines=noflines
local nextchar={
[ 4]=function(f)
return f:read(1,1,1,1)
@@ -2225,16 +2353,16 @@ function io.bytes(f,n)
end
function io.ask(question,default,options)
while true do
- io.write(question)
+ write(question)
if options then
- io.write(format(" [%s]",concat(options,"|")))
+ write(format(" [%s]",concat(options,"|")))
end
if default then
- io.write(format(" [%s]",default))
+ write(format(" [%s]",default))
end
- io.write(format(" "))
- io.flush()
- local answer=io.read()
+ write(format(" "))
+ flush()
+ local answer=read()
answer=gsub(answer,"^%s*(.*)%s*$","%1")
if answer=="" and default then
return default
@@ -2256,7 +2384,7 @@ function io.ask(question,default,options)
end
end
end
-local function readnumber(f,n,m)
+local function readnumber(f,n,m)
if m then
f:seek("set",n)
n=m
@@ -2265,31 +2393,31 @@ local function readnumber(f,n,m)
return byte(f:read(1))
elseif n==2 then
local a,b=byte(f:read(2),1,2)
- return 256*a+b
+ return 0x100*a+b
elseif n==3 then
local a,b,c=byte(f:read(3),1,3)
- return 256*256*a+256*b+c
+ return 0x10000*a+0x100*b+c
elseif n==4 then
local a,b,c,d=byte(f:read(4),1,4)
- return 256*256*256*a+256*256*b+256*c+d
+ return 0x1000000*a+0x10000*b+0x100*c+d
elseif n==8 then
local a,b=readnumber(f,4),readnumber(f,4)
- return 256*a+b
+ return 0x100*a+b
elseif n==12 then
local a,b,c=readnumber(f,4),readnumber(f,4),readnumber(f,4)
- return 256*256*a+256*b+c
+ return 0x10000*a+0x100*b+c
elseif n==-2 then
local b,a=byte(f:read(2),1,2)
- return 256*a+b
+ return 0x100*a+b
elseif n==-3 then
local c,b,a=byte(f:read(3),1,3)
- return 256*256*a+256*b+c
+ return 0x10000*a+0x100*b+c
elseif n==-4 then
local d,c,b,a=byte(f:read(4),1,4)
- return 256*256*256*a+256*256*b+256*c+d
+ return 0x1000000*a+0x10000*b+0x100*c+d
elseif n==-8 then
local h,g,f,e,d,c,b,a=byte(f:read(8),1,8)
- return 256*256*256*256*256*256*256*a+256*256*256*256*256*256*b+256*256*256*256*256*c+256*256*256*256*d+256*256*256*e+256*256*f+256*g+h
+ return 0x100000000000000*a+0x1000000000000*b+0x10000000000*c+0x100000000*d+0x1000000*e+0x10000*f+0x100*g+h
else
return 0
end
@@ -2643,13 +2771,15 @@ function file.robustname(str,strict)
end
end
end
-file.readdata=io.loaddata
-file.savedata=io.savedata
+local loaddata=io.loaddata
+local savedata=io.savedata
+file.readdata=loaddata
+file.savedata=savedata
function file.copy(oldname,newname)
if oldname and newname then
- local data=io.loaddata(oldname)
+ local data=loaddata(oldname)
if data and data~="" then
- file.savedata(newname,data)
+ savedata(newname,data)
end
end
end
@@ -2785,6 +2915,637 @@ end -- closure
do -- begin closure to overcome local limits and interference
+if not modules then modules={} end modules ['l-unicode']={
+ 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"
+}
+utf=utf or (unicode and unicode.utf8) or {}
+utf.characters=utf.characters or string.utfcharacters
+utf.values=utf.values or string.utfvalues
+local type=type
+local char,byte,format,sub,gmatch=string.char,string.byte,string.format,string.sub,string.gmatch
+local concat=table.concat
+local P,C,R,Cs,Ct,Cmt,Cc,Carg,Cp=lpeg.P,lpeg.C,lpeg.R,lpeg.Cs,lpeg.Ct,lpeg.Cmt,lpeg.Cc,lpeg.Carg,lpeg.Cp
+local lpegmatch=lpeg.match
+local patterns=lpeg.patterns
+local tabletopattern=lpeg.utfchartabletopattern
+local bytepairs=string.bytepairs
+local finder=lpeg.finder
+local replacer=lpeg.replacer
+local utfvalues=utf.values
+local utfgmatch=utf.gmatch
+local p_utftype=patterns.utftype
+local p_utfstricttype=patterns.utfstricttype
+local p_utfoffset=patterns.utfoffset
+local p_utf8char=patterns.utf8character
+local p_utf8byte=patterns.utf8byte
+local p_utfbom=patterns.utfbom
+local p_newline=patterns.newline
+local p_whitespace=patterns.whitespace
+if not unicode then
+ unicode={ utf=utf }
+end
+if not utf.char then
+ local floor,char=math.floor,string.char
+ function utf.char(n)
+ if n<0x80 then
+ return char(n)
+ elseif n<0x800 then
+ return char(
+ 0xC0+floor(n/0x40),
+ 0x80+(n%0x40)
+ )
+ elseif n<0x10000 then
+ return char(
+ 0xE0+floor(n/0x1000),
+ 0x80+(floor(n/0x40)%0x40),
+ 0x80+(n%0x40)
+ )
+ elseif n<0x200000 then
+ return char(
+ 0xF0+floor(n/0x40000),
+ 0x80+(floor(n/0x1000)%0x40),
+ 0x80+(floor(n/0x40)%0x40),
+ 0x80+(n%0x40)
+ )
+ else
+ return ""
+ end
+ end
+end
+if not utf.byte then
+ local utf8byte=patterns.utf8byte
+ function utf.byte(c)
+ return lpegmatch(utf8byte,c)
+ end
+end
+local utfchar,utfbyte=utf.char,utf.byte
+function utf.filetype(data)
+ return data and lpegmatch(p_utftype,data) or "unknown"
+end
+local toentities=Cs (
+ (
+ patterns.utf8one+(
+ patterns.utf8two+patterns.utf8three+patterns.utf8four
+ )/function(s) local b=utfbyte(s) if b<127 then return s else return format("&#%X;",b) end end
+ )^0
+)
+patterns.toentities=toentities
+function utf.toentities(str)
+ return lpegmatch(toentities,str)
+end
+local one=P(1)
+local two=C(1)*C(1)
+local four=C(R(utfchar(0xD8),utfchar(0xFF)))*C(1)*C(1)*C(1)
+local pattern=P("\254\255")*Cs((
+ four/function(a,b,c,d)
+ local ab=0xFF*byte(a)+byte(b)
+ local cd=0xFF*byte(c)+byte(d)
+ return utfchar((ab-0xD800)*0x400+(cd-0xDC00)+0x10000)
+ end+two/function(a,b)
+ return utfchar(byte(a)*256+byte(b))
+ end+one
+ )^1 )+P("\255\254")*Cs((
+ four/function(b,a,d,c)
+ local ab=0xFF*byte(a)+byte(b)
+ local cd=0xFF*byte(c)+byte(d)
+ return utfchar((ab-0xD800)*0x400+(cd-0xDC00)+0x10000)
+ end+two/function(b,a)
+ return utfchar(byte(a)*256+byte(b))
+ end+one
+ )^1 )
+function string.toutf(s)
+ return lpegmatch(pattern,s) or s
+end
+local validatedutf=Cs (
+ (
+ patterns.utf8one+patterns.utf8two+patterns.utf8three+patterns.utf8four+P(1)/"�"
+ )^0
+)
+patterns.validatedutf=validatedutf
+function utf.is_valid(str)
+ return type(str)=="string" and lpegmatch(validatedutf,str) or false
+end
+if not utf.len then
+ local n,f=0,1
+ local utfcharcounter=patterns.utfbom^-1*Cmt (
+ Cc(1)*patterns.utf8one^1+Cc(2)*patterns.utf8two^1+Cc(3)*patterns.utf8three^1+Cc(4)*patterns.utf8four^1,
+ function(_,t,d)
+ n=n+(t-f)/d
+ f=t
+ return true
+ end
+ )^0
+ function utf.len(str)
+ n,f=0,1
+ lpegmatch(utfcharcounter,str or "")
+ return n
+ end
+end
+utf.length=utf.len
+if not utf.sub then
+ local utflength=utf.length
+ local b,e,n,first,last=0,0,0,0,0
+ local function slide_zero(s,p)
+ n=n+1
+ if n>=last then
+ e=p-1
+ else
+ return p
+ end
+ end
+ local function slide_one(s,p)
+ n=n+1
+ if n==first then
+ b=p
+ end
+ if n>=last then
+ e=p-1
+ else
+ return p
+ end
+ end
+ local function slide_two(s,p)
+ n=n+1
+ if n==first then
+ b=p
+ else
+ return true
+ end
+ end
+ local pattern_zero=Cmt(p_utf8char,slide_zero)^0
+ local pattern_one=Cmt(p_utf8char,slide_one )^0
+ local pattern_two=Cmt(p_utf8char,slide_two )^0
+ local pattern_first=C(patterns.utf8character)
+ function utf.sub(str,start,stop)
+ if not start then
+ return str
+ end
+ if start==0 then
+ start=1
+ end
+ if not stop then
+ if start<0 then
+ local l=utflength(str)
+ start=l+start
+ else
+ start=start-1
+ end
+ b,n,first=0,0,start
+ lpegmatch(pattern_two,str)
+ if n>=first then
+ return sub(str,b)
+ else
+ return ""
+ end
+ end
+ if start<0 or stop<0 then
+ local l=utf.length(str)
+ if start<0 then
+ start=l+start
+ if start<=0 then
+ start=1
+ else
+ start=start+1
+ end
+ end
+ if stop<0 then
+ stop=l+stop
+ if stop==0 then
+ stop=1
+ else
+ stop=stop+1
+ end
+ end
+ end
+ if start==1 and stop==1 then
+ return lpegmatch(pattern_first,str) or ""
+ elseif start>stop then
+ return ""
+ elseif start>1 then
+ b,e,n,first,last=0,0,0,start-1,stop
+ lpegmatch(pattern_one,str)
+ if n>=first and e==0 then
+ e=#str
+ end
+ return sub(str,b,e)
+ else
+ b,e,n,last=1,0,0,stop
+ lpegmatch(pattern_zero,str)
+ if e==0 then
+ e=#str
+ end
+ return sub(str,b,e)
+ end
+ end
+end
+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)
+ return function(str)
+ if not str or str=="" then
+ return ""
+ else
+ if not pattern then
+ pattern=Cs((tabletopattern(mapping)/action+p_utf8char)^0)
+ end
+ return lpegmatch(pattern,str)
+ end
+ end
+ elseif option=="pattern" then
+ return Cs((tabletopattern(mapping)/action+p_utf8char)^0)
+ else
+ local pattern=Cs((tabletopattern(mapping)/action+p_utf8char)^0)
+ return function(str)
+ if not str or str=="" then
+ return ""
+ else
+ return lpegmatch(pattern,str)
+ end
+ end,pattern
+ end
+ elseif variant=="function" then
+ if option=="pattern" then
+ return Cs((p_utf8char/mapping+p_utf8char)^0)
+ else
+ local pattern=Cs((p_utf8char/mapping+p_utf8char)^0)
+ return function(str)
+ if not str or str=="" then
+ return ""
+ else
+ return lpegmatch(pattern,str)
+ end
+ end,pattern
+ end
+ else
+ return function(str)
+ return str or ""
+ end
+ end
+end
+function utf.replacer(t)
+ local r=replacer(t,false,false,true)
+ return function(str)
+ return lpegmatch(r,str)
+ end
+end
+function utf.subtituter(t)
+ local f=finder (t)
+ local r=replacer(t,false,false,true)
+ return function(str)
+ local i=lpegmatch(f,str)
+ if not i then
+ return str
+ elseif i>#str then
+ return str
+ else
+ return lpegmatch(r,str)
+ end
+ end
+end
+local utflinesplitter=p_utfbom^-1*lpeg.tsplitat(p_newline)
+local utfcharsplitter_ows=p_utfbom^-1*Ct(C(p_utf8char)^0)
+local utfcharsplitter_iws=p_utfbom^-1*Ct((p_whitespace^1+C(p_utf8char))^0)
+local utfcharsplitter_raw=Ct(C(p_utf8char)^0)
+patterns.utflinesplitter=utflinesplitter
+function utf.splitlines(str)
+ return lpegmatch(utflinesplitter,str or "")
+end
+function utf.split(str,ignorewhitespace)
+ if ignorewhitespace then
+ return lpegmatch(utfcharsplitter_iws,str or "")
+ else
+ return lpegmatch(utfcharsplitter_ows,str or "")
+ end
+end
+function utf.totable(str)
+ return lpegmatch(utfcharsplitter_raw,str)
+end
+function utf.magic(f)
+ local str=f:read(4) or ""
+ local off=lpegmatch(p_utfoffset,str)
+ if off<4 then
+ f:seek('set',off)
+ end
+ return lpegmatch(p_utftype,str)
+end
+local utf16_to_utf8_be,utf16_to_utf8_le
+local utf32_to_utf8_be,utf32_to_utf8_le
+local utf_16_be_getbom=patterns.utfbom_16_be^-1
+local utf_16_le_getbom=patterns.utfbom_16_le^-1
+local utf_32_be_getbom=patterns.utfbom_32_be^-1
+local utf_32_le_getbom=patterns.utfbom_32_le^-1
+local utf_16_be_linesplitter=utf_16_be_getbom*lpeg.tsplitat(patterns.utf_16_be_nl)
+local utf_16_le_linesplitter=utf_16_le_getbom*lpeg.tsplitat(patterns.utf_16_le_nl)
+local utf_32_be_linesplitter=utf_32_be_getbom*lpeg.tsplitat(patterns.utf_32_be_nl)
+local utf_32_le_linesplitter=utf_32_le_getbom*lpeg.tsplitat(patterns.utf_32_le_nl)
+local more=0
+local p_utf16_to_utf8_be=C(1)*C(1)/function(left,right)
+ local now=256*byte(left)+byte(right)
+ if more>0 then
+ now=(more-0xD800)*0x400+(now-0xDC00)+0x10000
+ more=0
+ return utfchar(now)
+ elseif now>=0xD800 and now<=0xDBFF then
+ more=now
+ return ""
+ else
+ return utfchar(now)
+ end
+end
+local p_utf16_to_utf8_le=C(1)*C(1)/function(right,left)
+ local now=256*byte(left)+byte(right)
+ if more>0 then
+ now=(more-0xD800)*0x400+(now-0xDC00)+0x10000
+ more=0
+ return utfchar(now)
+ elseif now>=0xD800 and now<=0xDBFF then
+ more=now
+ return ""
+ else
+ return utfchar(now)
+ end
+end
+local p_utf32_to_utf8_be=C(1)*C(1)*C(1)*C(1)/function(a,b,c,d)
+ return utfchar(256*256*256*byte(a)+256*256*byte(b)+256*byte(c)+byte(d))
+end
+local p_utf32_to_utf8_le=C(1)*C(1)*C(1)*C(1)/function(a,b,c,d)
+ return utfchar(256*256*256*byte(d)+256*256*byte(c)+256*byte(b)+byte(a))
+end
+p_utf16_to_utf8_be=P(true)/function() more=0 end*utf_16_be_getbom*Cs(p_utf16_to_utf8_be^0)
+p_utf16_to_utf8_le=P(true)/function() more=0 end*utf_16_le_getbom*Cs(p_utf16_to_utf8_le^0)
+p_utf32_to_utf8_be=P(true)/function() more=0 end*utf_32_be_getbom*Cs(p_utf32_to_utf8_be^0)
+p_utf32_to_utf8_le=P(true)/function() more=0 end*utf_32_le_getbom*Cs(p_utf32_to_utf8_le^0)
+patterns.utf16_to_utf8_be=p_utf16_to_utf8_be
+patterns.utf16_to_utf8_le=p_utf16_to_utf8_le
+patterns.utf32_to_utf8_be=p_utf32_to_utf8_be
+patterns.utf32_to_utf8_le=p_utf32_to_utf8_le
+utf16_to_utf8_be=function(s)
+ if s and s~="" then
+ return lpegmatch(p_utf16_to_utf8_be,s)
+ else
+ return s
+ end
+end
+local utf16_to_utf8_be_t=function(t)
+ if not t then
+ return nil
+ elseif type(t)=="string" then
+ t=lpegmatch(utf_16_be_linesplitter,t)
+ end
+ for i=1,#t do
+ local s=t[i]
+ if s~="" then
+ t[i]=lpegmatch(p_utf16_to_utf8_be,s)
+ end
+ end
+ return t
+end
+utf16_to_utf8_le=function(s)
+ if s and s~="" then
+ return lpegmatch(p_utf16_to_utf8_le,s)
+ else
+ return s
+ end
+end
+local utf16_to_utf8_le_t=function(t)
+ if not t then
+ return nil
+ elseif type(t)=="string" then
+ t=lpegmatch(utf_16_le_linesplitter,t)
+ end
+ for i=1,#t do
+ local s=t[i]
+ if s~="" then
+ t[i]=lpegmatch(p_utf16_to_utf8_le,s)
+ end
+ end
+ return t
+end
+utf32_to_utf8_be=function(s)
+ if s and s~="" then
+ return lpegmatch(p_utf32_to_utf8_be,s)
+ else
+ return s
+ end
+end
+local utf32_to_utf8_be_t=function(t)
+ if not t then
+ return nil
+ elseif type(t)=="string" then
+ t=lpegmatch(utf_32_be_linesplitter,t)
+ end
+ for i=1,#t do
+ local s=t[i]
+ if s~="" then
+ t[i]=lpegmatch(p_utf32_to_utf8_be,s)
+ end
+ end
+ return t
+end
+utf32_to_utf8_le=function(s)
+ if s and s~="" then
+ return lpegmatch(p_utf32_to_utf8_le,s)
+ else
+ return s
+ end
+end
+local utf32_to_utf8_le_t=function(t)
+ if not t then
+ return nil
+ elseif type(t)=="string" then
+ t=lpegmatch(utf_32_le_linesplitter,t)
+ end
+ for i=1,#t do
+ local s=t[i]
+ if s~="" then
+ t[i]=lpegmatch(p_utf32_to_utf8_le,s)
+ end
+ end
+ return t
+end
+utf.utf16_to_utf8_le_t=utf16_to_utf8_le_t
+utf.utf16_to_utf8_be_t=utf16_to_utf8_be_t
+utf.utf32_to_utf8_le_t=utf32_to_utf8_le_t
+utf.utf32_to_utf8_be_t=utf32_to_utf8_be_t
+utf.utf16_to_utf8_le=utf16_to_utf8_le
+utf.utf16_to_utf8_be=utf16_to_utf8_be
+utf.utf32_to_utf8_le=utf32_to_utf8_le
+utf.utf32_to_utf8_be=utf32_to_utf8_be
+function utf.utf8_to_utf8_t(t)
+ return type(t)=="string" and lpegmatch(utflinesplitter,t) or t
+end
+function utf.utf16_to_utf8_t(t,endian)
+ return endian and utf16_to_utf8_be_t(t) or utf16_to_utf8_le_t(t) or t
+end
+function utf.utf32_to_utf8_t(t,endian)
+ return endian and utf32_to_utf8_be_t(t) or utf32_to_utf8_le_t(t) or t
+end
+local function little(b)
+ if b<0x10000 then
+ return char(b%256,b/256)
+ else
+ b=b-0x10000
+ local b1,b2=b/1024+0xD800,b%1024+0xDC00
+ return char(b1%256,b1/256,b2%256,b2/256)
+ end
+end
+local function big(b)
+ if b<0x10000 then
+ return char(b/256,b%256)
+ else
+ b=b-0x10000
+ local b1,b2=b/1024+0xD800,b%1024+0xDC00
+ return char(b1/256,b1%256,b2/256,b2%256)
+ end
+end
+local l_remap=Cs((p_utf8byte/little+P(1)/"")^0)
+local b_remap=Cs((p_utf8byte/big+P(1)/"")^0)
+local function utf8_to_utf16_be(str,nobom)
+ if nobom then
+ return lpegmatch(b_remap,str)
+ else
+ return char(254,255)..lpegmatch(b_remap,str)
+ end
+end
+local function utf8_to_utf16_le(str,nobom)
+ if nobom then
+ return lpegmatch(l_remap,str)
+ else
+ return char(255,254)..lpegmatch(l_remap,str)
+ end
+end
+utf.utf8_to_utf16_be=utf8_to_utf16_be
+utf.utf8_to_utf16_le=utf8_to_utf16_le
+function utf.utf8_to_utf16(str,littleendian,nobom)
+ if littleendian then
+ return utf8_to_utf16_le(str,nobom)
+ else
+ return utf8_to_utf16_be(str,nobom)
+ end
+end
+local pattern=Cs (
+ (p_utf8byte/function(unicode ) return format("0x%04X",unicode) end)*(p_utf8byte*Carg(1)/function(unicode,separator) return format("%s0x%04X",separator,unicode) end)^0
+)
+function utf.tocodes(str,separator)
+ return lpegmatch(pattern,str,1,separator or " ")
+end
+function utf.ustring(s)
+ return format("U+%05X",type(s)=="number" and s or utfbyte(s))
+end
+function utf.xstring(s)
+ return format("0x%05X",type(s)=="number" and s or utfbyte(s))
+end
+function utf.toeight(str)
+ if not str or str=="" then
+ return nil
+ end
+ local utftype=lpegmatch(p_utfstricttype,str)
+ if utftype=="utf-8" then
+ return sub(str,4)
+ elseif utftype=="utf-16-be" then
+ return utf16_to_utf8_be(str)
+ elseif utftype=="utf-16-le" then
+ return utf16_to_utf8_le(str)
+ else
+ return str
+ end
+end
+local p_nany=p_utf8char/""
+if utfgmatch then
+ function utf.count(str,what)
+ if type(what)=="string" then
+ local n=0
+ for _ in utfgmatch(str,what) do
+ n=n+1
+ end
+ return n
+ else
+ return #lpegmatch(Cs((P(what)/" "+p_nany)^0),str)
+ end
+ end
+else
+ local cache={}
+ function utf.count(str,what)
+ if type(what)=="string" then
+ local p=cache[what]
+ if not p then
+ p=Cs((P(what)/" "+p_nany)^0)
+ cache[p]=p
+ end
+ return #lpegmatch(p,str)
+ else
+ return #lpegmatch(Cs((P(what)/" "+p_nany)^0),str)
+ end
+ end
+end
+if not utf.characters then
+ function utf.characters(str)
+ return gmatch(str,".[\128-\191]*")
+ end
+ string.utfcharacters=utf.characters
+end
+if not utf.values then
+ local find=string.find
+ local dummy=function()
+ end
+ function utf.values(str)
+ local n=#str
+ if n==0 then
+ return dummy
+ elseif n==1 then
+ return function() return utfbyte(str) end
+ else
+ local p=1
+ return function()
+ local b,e=find(str,".[\128-\191]*",p)
+ if b then
+ p=e+1
+ return utfbyte(sub(str,b,e))
+ end
+ end
+ end
+ end
+ string.utfvalues=utf.values
+end
+function utf.chrlen(u)
+ return
+ (u<0x80 and 1) or
+ (u<0xE0 and 2) or
+ (u<0xF0 and 3) or
+ (u<0xF8 and 4) or
+ (u<0xFC and 5) or
+ (u<0xFE and 6) or 0
+end
+local extract=bit32.extract
+local char=string.char
+function unicode.toutf32string(n)
+ if n<=0xFF then
+ return
+ char(n).."\000\000\000"
+ elseif n<=0xFFFF then
+ return
+ char(extract(n,0,8))..char(extract(n,8,8)).."\000\000"
+ elseif n<=0xFFFFFF then
+ return
+ char(extract(n,0,8))..char(extract(n,8,8))..char(extract(n,16,8)).."\000"
+ else
+ return
+ char(extract(n,0,8))..char(extract(n,8,8))..char(extract(n,16,8))..char(extract(n,24,8))
+ end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
if not modules then modules={} end modules ['util-str']={
version=1.001,
comment="companion to luat-lib.mkiv",
@@ -2795,7 +3556,7 @@ if not modules then modules={} end modules ['util-str']={
utilities=utilities or {}
utilities.strings=utilities.strings or {}
local strings=utilities.strings
-local format,gsub,rep,sub=string.format,string.gsub,string.rep,string.sub
+local format,gsub,rep,sub,find=string.format,string.gsub,string.rep,string.sub,string.find
local load,dump=load,string.dump
local tonumber,type,tostring=tonumber,type,tostring
local unpack,concat=table.unpack,table.concat
@@ -2978,6 +3739,25 @@ function number.signed(i)
return "-",-i
end
end
+local digit=patterns.digit
+local period=patterns.period
+local three=digit*digit*digit
+local splitter=Cs (
+ (((1-(three^1*period))^1+C(three))*(Carg(1)*three)^1+C((1-period)^1))*(P(1)/""*Carg(2))*C(2)
+)
+patterns.formattednumber=splitter
+function number.formatted(n,sep1,sep2)
+ local s=type(s)=="string" and n or format("%0.2f",n)
+ if sep1==true then
+ return lpegmatch(splitter,s,1,".",",")
+ elseif sep1=="." then
+ return lpegmatch(splitter,s,1,sep1,sep2 or ",")
+ elseif sep1=="," then
+ return lpegmatch(splitter,s,1,sep1,sep2 or ".")
+ else
+ return lpegmatch(splitter,s,1,sep1 or ",",sep2 or ".")
+ end
+end
local zero=P("0")^1/""
local plus=P("+")/""
local minus=P("-")
@@ -3003,6 +3783,27 @@ function number.sparseexponent(f,n)
end
return tostring(n)
end
+local hf={}
+local hs={}
+setmetatable(hf,{ __index=function(t,k)
+ local v="%."..k.."f"
+ t[k]=v
+ return v
+end } )
+setmetatable(hs,{ __index=function(t,k)
+ local v="%"..k.."s"
+ t[k]=v
+ return v
+end } )
+function number.formattedfloat(n,b,a)
+ local s=format(hf[a],n)
+ local l=(b or 0)+(a or 0)+1
+ if #s<l then
+ return format(hs[l],s)
+ else
+ return s
+ end
+end
local template=[[
%s
%s
@@ -3030,6 +3831,7 @@ local autodouble=string.autodouble
local sequenced=table.sequenced
local formattednumber=number.formatted
local sparseexponent=number.sparseexponent
+local formattedfloat=number.formattedfloat
]]
else
environment={
@@ -3053,6 +3855,7 @@ else
sequenced=table.sequenced,
formattednumber=number.formatted,
sparseexponent=number.sparseexponent,
+ formattedfloat=number.formattedfloat
}
end
local arguments={ "a1" }
@@ -3063,6 +3866,7 @@ setmetatable(arguments,{ __index=function(t,k)
end
})
local prefix_any=C((S("+- .")+R("09"))^0)
+local prefix_sub=(C((S("+-")+R("09"))^0)+Cc(0))*P(".")*(C((S("+-")+R("09"))^0)+Cc(0))
local prefix_tab=P("{")*C((1-P("}"))^0)*P("}")+C((1-R("az","AZ","09","%%"))^0)
local format_s=function(f)
n=n+1
@@ -3113,6 +3917,10 @@ local format_F=function(f)
return format("format((a%s %% 1 == 0) and '%%i' or '%%%sf',a%s)",n,f,n)
end
end
+local format_k=function(b,a)
+ n=n+1
+ return format("formattedfloat(a%s,%i,%i)",n,b or 0,a or 0)
+end
local format_g=function(f)
n=n+1
return format("format('%%%sg',a%s)",f,n)
@@ -3261,25 +4069,6 @@ end
local format_W=function(f)
return format("nspaces[%s]",tonumber(f) or 0)
end
-local digit=patterns.digit
-local period=patterns.period
-local three=digit*digit*digit
-local splitter=Cs (
- (((1-(three^1*period))^1+C(three))*(Carg(1)*three)^1+C((1-period)^1))*(P(1)/""*Carg(2))*C(2)
-)
-patterns.formattednumber=splitter
-function number.formatted(n,sep1,sep2)
- local s=type(s)=="string" and n or format("%0.2f",n)
- if sep1==true then
- return lpegmatch(splitter,s,1,".",",")
- elseif sep1=="." then
- return lpegmatch(splitter,s,1,sep1,sep2 or ",")
- elseif sep1=="," then
- return lpegmatch(splitter,s,1,sep1,sep2 or ".")
- else
- return lpegmatch(splitter,s,1,sep1 or ",",sep2 or ".")
- end
-end
local format_m=function(f)
n=n+1
if not f or f=="" then
@@ -3304,9 +4093,16 @@ end
local format_extension=function(extensions,f,name)
local extension=extensions[name] or "tostring(%s)"
local f=tonumber(f) or 1
+ local w=find(extension,"%.%.%.")
if f==0 then
+ if w then
+ extension=gsub(extension,"%.%.%.","")
+ end
return extension
elseif f==1 then
+ if w then
+ extension=gsub(extension,"%.%.%.","%%s")
+ end
n=n+1
local a="a"..n
return format(extension,a,a)
@@ -3314,10 +4110,13 @@ local format_extension=function(extensions,f,name)
local a="a"..(n+f+1)
return format(extension,a,a)
else
+ if w then
+ extension=gsub(extension,"%.%.%.",rep("%%s,",f-1).."%%s")
+ end
local t={}
for i=1,f do
n=n+1
- t[#t+1]="a"..n
+ t[i]="a"..n
end
return format(extension,unpack(t))
end
@@ -3330,7 +4129,8 @@ local builder=Cs { "start",
+V("s")+V("q")+V("i")+V("d")+V("f")+V("F")+V("g")+V("G")+V("e")+V("E")+V("x")+V("X")+V("o")
+V("c")+V("C")+V("S")
+V("Q")
-+V("N")
++V("N")
++V("k")
+V("r")+V("h")+V("H")+V("u")+V("U")+V("p")+V("b")+V("t")+V("T")+V("l")+V("L")+V("I")+V("w")
+V("W")
+V("a")
@@ -3357,6 +4157,7 @@ local builder=Cs { "start",
["S"]=(prefix_any*P("S"))/format_S,
["Q"]=(prefix_any*P("Q"))/format_S,
["N"]=(prefix_any*P("N"))/format_N,
+ ["k"]=(prefix_sub*P("k"))/format_k,
["c"]=(prefix_any*P("c"))/format_c,
["C"]=(prefix_any*P("C"))/format_C,
["r"]=(prefix_any*P("r"))/format_r,
@@ -3482,7 +4283,9 @@ if not modules then modules={} end modules ['util-fil']={
license="see context related readme files"
}
local byte=string.byte
-local extract=bit32.extract
+local char=string.char
+local extract=bit32 and bit32.extract
+local floor=math.floor
utilities=utilities or {}
local files={}
utilities.files=files
@@ -3501,6 +4304,7 @@ end
function files.size(f)
return f:seek("end")
end
+files.getsize=files.size
function files.setposition(f,n)
if zerobased[f] then
f:seek("set",n)
@@ -3538,6 +4342,10 @@ end
function files.readbytes(f,n)
return byte(f:read(n),1,n)
end
+function files.readbytetable(f,n)
+ local s=f:read(n or 1)
+ return { byte(s,1,#s) }
+end
function files.readchar(f)
return f:read(1)
end
@@ -3547,7 +4355,7 @@ end
function files.readinteger1(f)
local n=byte(f:read(1))
if n>=0x80 then
- return n-0xFF-1
+ return n-0x100
else
return n
end
@@ -3555,55 +4363,107 @@ end
files.readcardinal1=files.readbyte
files.readcardinal=files.readcardinal1
files.readinteger=files.readinteger1
+files.readsignedbyte=files.readinteger1
function files.readcardinal2(f)
local a,b=byte(f:read(2),1,2)
return 0x100*a+b
end
+function files.readcardinal2le(f)
+ local b,a=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
+ if a>=0x80 then
+ return 0x100*a+b-0x10000
else
- return n
+ return 0x100*a+b
+ end
+end
+function files.readinteger2le(f)
+ local b,a=byte(f:read(2),1,2)
+ if a>=0x80 then
+ return 0x100*a+b-0x10000
+ else
+ return 0x100*a+b
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.readcardinal3le(f)
+ local c,b,a=byte(f:read(3),1,3)
+ return 0x10000*a+0x100*b+c
+end
+function files.readinteger3(f)
+ local a,b,c=byte(f:read(3),1,3)
+ if a>=0x80 then
+ return 0x10000*a+0x100*b+c-0x1000000
+ else
+ return 0x10000*a+0x100*b+c
+ end
+end
+function files.readinteger3le(f)
+ local c,b,a=byte(f:read(3),1,3)
+ if a>=0x80 then
+ return 0x10000*a+0x100*b+c-0x1000000
+ else
+ return 0x10000*a+0x100*b+c
+ end
+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.readcardinal4le(f)
+ local d,c,b,a=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
+ if a>=0x80 then
+ return 0x1000000*a+0x10000*b+0x100*c+d-0x100000000
else
- return n
+ return 0x1000000*a+0x10000*b+0x100*c+d
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
+function files.readinteger4le(f)
+ local d,c,b,a=byte(f:read(4),1,4)
+ if a>=0x80 then
+ return 0x1000000*a+0x10000*b+0x100*c+d-0x100000000
else
- return n+(0x100*c+d)/0xFFFF
+ return 0x1000000*a+0x10000*b+0x100*c+d
end
end
-function files.read2dot14(f)
+function files.readfixed2(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
+ if a>=0x80 then
+ return (a-0x100)+b/0x100
+ else
+ return (a )+b/0x100
+ end
+end
+function files.readfixed4(f)
+ local a,b,c,d=byte(f:read(4),1,4)
+ if a>=0x80 then
+ return (0x100*a+b-0x10000)+(0x100*c+d)/0x10000
else
- n=extract(n,30,2)
- return n+m/0x4000
+ return (0x100*a+b )+(0x100*c+d)/0x10000
+ end
+end
+if extract then
+ local extract=bit32.extract
+ local band=bit32.band
+ function files.read2dot14(f)
+ local a,b=byte(f:read(2),1,2)
+ if a>=0x80 then
+ local n=-(0x100*a+b)
+ return-(extract(n,14,2)+(band(n,0x3FFF)/16384.0))
+ else
+ local n=0x100*a+b
+ return (extract(n,14,2)+(band(n,0x3FFF)/16384.0))
+ end
end
end
function files.skipshort(f,n)
@@ -3612,6 +4472,55 @@ end
function files.skiplong(f,n)
f:read(4*(n or 1))
end
+function files.writecardinal2(f,n)
+ local a=char(n%256)
+ n=floor(n/256)
+ local b=char(n%256)
+ f:write(b,a)
+end
+function files.writecardinal4(f,n)
+ local a=char(n%256)
+ n=floor(n/256)
+ local b=char(n%256)
+ n=floor(n/256)
+ local c=char(n%256)
+ n=floor(n/256)
+ local d=char(n%256)
+ f:write(d,c,b,a)
+end
+function files.writestring(f,s)
+ f:write(char(byte(s,1,#s)))
+end
+function files.writebyte(f,b)
+ f:write(char(b))
+end
+if fio and fio.readcardinal1 then
+ files.readcardinal1=fio.readcardinal1
+ files.readcardinal2=fio.readcardinal2
+ files.readcardinal3=fio.readcardinal3
+ files.readcardinal4=fio.readcardinal4
+ files.readinteger1=fio.readinteger1
+ files.readinteger2=fio.readinteger2
+ files.readinteger3=fio.readinteger3
+ files.readinteger4=fio.readinteger4
+ files.read2dot14=fio.read2dot14
+ files.setposition=fio.setposition
+ files.getposition=fio.getposition
+ files.readbyte=files.readcardinal1
+ files.readsignedbyte=files.readinteger1
+ files.readcardinal=files.readcardinal1
+ files.readinteger=files.readinteger1
+ local skipposition=fio.skipposition
+ files.skipposition=skipposition
+ files.readbytes=fio.readbytes
+ files.readbytetable=fio.readbytetable
+ function files.skipshort(f,n)
+ skipposition(f,2*(n or 1))
+ end
+ function files.skiplong(f,n)
+ skipposition(f,4*(n or 1))
+ end
+end
end -- closure
@@ -3697,6 +4606,7 @@ local remapper={
cidmap="cid maps",
pfb="type1 fonts",
afm="afm",
+ enc="enc files",
}
function resolvers.findfile(name,fileformat)
name=string.gsub(name,"\\","/")
@@ -3810,44 +4720,42 @@ function caches.is_writable(path,name)
local fullname=makefullname(path,name)
return fullname and file.is_writable(fullname)
end
-function caches.loaddata(paths,name)
- for i=1,#paths do
- local data=false
- local luaname,lucname=makefullname(paths[i],name)
- if lucname and not lfs.isfile(lucname) and type(caches.compile)=="function" then
- texio.write(string.format("(compiling luc: %s)",lucname))
- data=loadfile(luaname)
- if data then
- data=data()
- end
- if data then
- caches.compile(data,luaname,lucname)
- return data
- end
- end
- if lucname and lfs.isfile(lucname) then
+function caches.loaddata(readables,name,writable)
+ for i=1,#readables do
+ local path=readables[i]
+ local loader=false
+ local luaname,lucname=makefullname(path,name)
+ if lfs.isfile(lucname) then
texio.write(string.format("(load luc: %s)",lucname))
- data=loadfile(lucname)
- if data then
- data=data()
+ loader=loadfile(lucname)
+ end
+ if not loader and lfs.isfile(luaname) then
+ local luacrap,lucname=makefullname(writable,name)
+ texio.write(string.format("(compiling luc: %s)",lucname))
+ if lfs.isfile(lucname) then
+ loader=loadfile(lucname)
end
- if data then
- return data
+ caches.compile(data,luaname,lucname)
+ if lfs.isfile(lucname) then
+ texio.write(string.format("(load luc: %s)",lucname))
+ loader=loadfile(lucname)
else
texio.write(string.format("(loading failed: %s)",lucname))
end
- end
- if luaname and lfs.isfile(luaname) then
- texio.write(string.format("(load lua: %s)",luaname))
- data=loadfile(luaname)
- if data then
- data=data()
- end
- if data then
- return data
+ if not loader then
+ texio.write(string.format("(load lua: %s)",luaname))
+ loader=loadfile(luaname)
+ else
+ texio.write(string.format("(loading failed: %s)",luaname))
end
end
+ if loader then
+ loader=loader()
+ collectgarbage("step")
+ return loader
+ end
end
+ return false
end
function caches.savedata(path,name,data)
local luaname,lucname=makefullname(path,name)
@@ -3974,7 +4882,7 @@ function containers.read(container,name)
local storage=container.storage
local stored=storage[name]
if not stored and container.enabled and caches and containers.usecache then
- stored=caches.loaddata(container.readables,name)
+ stored=caches.loaddata(container.readables,name,container.writable)
if stored and stored.cache_version==container.version then
if trace_cache or trace_containers then
report_containers("action %a, category %a, name %a","load",container.subcategory,name)
@@ -4073,7 +4981,7 @@ end
nodes.nodecodes=nodecodes
nodes.glyphcodes=glyphcodes
nodes.disccodes=disccodes
-local free_node=node.free
+local flush_node=node.flush_node
local remove_node=node.remove
local new_node=node.new
local traverse_id=node.traverse_id
@@ -4093,7 +5001,7 @@ function nodes.remove(head,current,free_too)
head,current=remove_node(head,current)
if t then
if free_too then
- free_node(t)
+ flush_node(t)
t=nil
else
t.next,t.prev=nil,nil
@@ -4117,12 +5025,14 @@ nodes.getattr=getfield
nodes.setattr=setfield
nodes.tostring=node.tostring or tostring
nodes.copy=node.copy
+nodes.copy_node=node.copy
nodes.copy_list=node.copy_list
nodes.delete=node.delete
nodes.dimensions=node.dimensions
nodes.end_of_math=node.end_of_math
nodes.flush_list=node.flush_list
nodes.flush_node=node.flush_node
+nodes.flush=node.flush_node
nodes.free=node.free
nodes.insert_after=node.insert_after
nodes.insert_before=node.insert_before
@@ -4136,7 +5046,6 @@ nodes.vpack=node.vpack
nodes.first_glyph=node.first_glyph
nodes.has_glyph=node.has_glyph or node.first_glyph
nodes.current_attr=node.current_attr
-nodes.do_ligature_n=node.do_ligature_n
nodes.has_field=node.has_field
nodes.last_node=node.last_node
nodes.usedlist=node.usedlist
@@ -4173,16 +5082,37 @@ 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.setsubtype=direct.setsubtype
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
+nuts.setlist=direct.setlist
+nuts.getoffsets=direct.getoffsets or
+ function(n)
+ return getfield(n,"xoffset"),getfield(n,"yoffset")
+ end
+nuts.setoffsets=direct.setoffsets or
+ function(n,x,y)
+ if x then setfield(n,"xoffset",x) end
+ if y then setfield(n,"xoffset",y) end
+ end
+nuts.getleader=direct.getleader or function(n) return getfield(n,"leader") end
+nuts.setleader=direct.setleader or function(n,l) setfield(n,"leader",l) end
+nuts.getcomponents=direct.getcomponents or function(n) return getfield(n,"components") end
+nuts.setcomponents=direct.setcomponents or function(n,c) setfield(n,"components",c) end
+nuts.getkern=direct.getkern or function(n) return getfield(n,"kern") end
+nuts.setkern=direct.setkern or function(n,k) setfield(n,"kern",k) end
+nuts.getdir=direct.getkern or function(n) return getfield(n,"dir") end
+nuts.setdir=direct.setkern or function(n,d) setfield(n,"dir",d) end
+nuts.getwidth=direct.getwidth or function(n) return getfield(n,"width") end
+nuts.setwidth=direct.setwidth or function(n,w) return setfield(n,"width",w) end
+nuts.getheight=direct.getheight or function(n) return getfield(n,"height") end
+nuts.setheight=direct.setheight or function(n,h) return setfield(n,"height",h) end
+nuts.getdepth=direct.getdepth or function(n) return getfield(n,"depth") end
+nuts.setdepth=direct.setdepth or function(n,d) return setfield(n,"depth",d) end
if not direct.is_glyph then
local getchar=direct.getchar
local getid=direct.getid
@@ -4223,9 +5153,12 @@ nuts.insert_before=direct.insert_before
nuts.insert_after=direct.insert_after
nuts.delete=direct.delete
nuts.copy=direct.copy
+nuts.copy_node=direct.copy
nuts.copy_list=direct.copy_list
nuts.tail=direct.tail
nuts.flush_list=direct.flush_list
+nuts.flush_node=direct.flush_node
+nuts.flush=direct.flush
nuts.free=direct.free
nuts.remove=direct.remove
nuts.is_node=direct.is_node
@@ -4267,6 +5200,116 @@ nuts.setprop=function(n,k,v)
end
nodes.setprop=nodes.setproperty
nodes.getprop=nodes.getproperty
+local setprev=nuts.setprev
+local setnext=nuts.setnext
+local getnext=nuts.getnext
+local setlink=nuts.setlink
+local getfield=nuts.getfield
+local setfield=nuts.setfield
+local getcomponents=nuts.getcomponents
+local setcomponents=nuts.setcomponents
+local find_tail=nuts.tail
+local flush_list=nuts.flush_list
+local flush_node=nuts.flush_node
+local traverse_id=nuts.traverse_id
+local copy_node=nuts.copy_node
+local glyph_code=nodes.nodecodes.glyph
+function nuts.set_components(target,start,stop)
+ local head=getcomponents(target)
+ if head then
+ flush_list(head)
+ head=nil
+ end
+ if start then
+ setprev(start)
+ else
+ return nil
+ end
+ if stop then
+ setnext(stop)
+ end
+ local tail=nil
+ while start do
+ local c=getcomponents(start)
+ local n=getnext(start)
+ if c then
+ if head then
+ setlink(tail,c)
+ else
+ head=c
+ end
+ tail=find_tail(c)
+ setcomponents(start)
+ flush_node(start)
+ else
+ if head then
+ setlink(tail,start)
+ else
+ head=start
+ end
+ tail=start
+ end
+ start=n
+ end
+ setcomponents(target,head)
+ return head
+end
+nuts.get_components=nuts.getcomponents
+function nuts.take_components(target)
+ local c=getcomponents(target)
+ setcomponents(target)
+ return c
+end
+function nuts.count_components(n,marks)
+ local components=getcomponents(n)
+ if components then
+ if marks then
+ local i=0
+ for g in traverse_id(glyph_code,components) do
+ if not marks[getchar(g)] then
+ i=i+1
+ end
+ end
+ return i
+ else
+ return count(glyph_code,components)
+ end
+ else
+ return 0
+ end
+end
+function nuts.copy_no_components(g,copyinjection)
+ local components=getcomponents(g)
+ if components then
+ setcomponents(g)
+ local n=copy_node(g)
+ if copyinjection then
+ copyinjection(n,g)
+ end
+ setcomponents(g,components)
+ return n
+ else
+ local n=copy_node(g)
+ if copyinjection then
+ copyinjection(n,g)
+ end
+ return n
+ end
+end
+function nuts.copy_only_glyphs(current)
+ local head=nil
+ local previous=nil
+ for n in traverse_id(glyph_code,current) do
+ n=copy_node(n)
+ if head then
+ setlink(previous,n)
+ else
+ head=n
+ end
+ previous=n
+ end
+ return head
+end
end -- closure
@@ -5034,7 +6077,6 @@ if not modules then modules={} end modules ['font-ini']={
license="see context related readme files"
}
local allocate=utilities.storage.allocate
-local report_defining=logs.reporter("fonts","defining")
fonts=fonts or {}
local fonts=fonts
fonts.hashes={ identifiers=allocate() }
@@ -5060,10 +6102,11 @@ if not modules then modules={} end modules ['font-con']={
license="see context related readme files"
}
local next,tostring,rawget=next,tostring,rawget
-local format,match,lower,gsub=string.format,string.match,string.lower,string.gsub
-local utfbyte=utf.byte
-local sort,insert,concat,sortedkeys,serialize,fastcopy=table.sort,table.insert,table.concat,table.sortedkeys,table.serialize,table.fastcopy
+local format,match,lower,gsub,find=string.format,string.match,string.lower,string.gsub,string.find
+local sort,insert,concat=table.sort,table.insert,table.concat
+local sortedkeys,sortedhash,serialize,fastcopy=table.sortedkeys,table.sortedhash,table.serialize,table.fastcopy
local derivetable=table.derive
+local ioflush=io.flush
local trace_defining=false trackers.register("fonts.defining",function(v) trace_defining=v end)
local trace_scaling=false trackers.register("fonts.scaling",function(v) trace_scaling=v end)
local report_defining=logs.reporter("fonts","defining")
@@ -5081,89 +6124,6 @@ constructors.version=1.01
constructors.cache=containers.define("fonts","constructors",constructors.version,false)
constructors.privateoffset=0xF0000
constructors.cacheintex=true
-constructors.keys={
- properties={
- encodingbytes="number",
- embedding="number",
- cidinfo={},
- format="string",
- fontname="string",
- fullname="string",
- filename="filename",
- psname="string",
- name="string",
- virtualized="boolean",
- hasitalics="boolean",
- autoitalicamount="basepoints",
- nostackmath="boolean",
- noglyphnames="boolean",
- mode="string",
- hasmath="boolean",
- mathitalics="boolean",
- textitalics="boolean",
- finalized="boolean",
- },
- parameters={
- mathsize="number",
- scriptpercentage="float",
- scriptscriptpercentage="float",
- units="cardinal",
- designsize="scaledpoints",
- expansion={
- stretch="integerscale",
- shrink="integerscale",
- step="integerscale",
- auto="boolean",
- },
- protrusion={
- auto="boolean",
- },
- slantfactor="float",
- extendfactor="float",
- factor="float",
- hfactor="float",
- vfactor="float",
- size="scaledpoints",
- units="scaledpoints",
- scaledpoints="scaledpoints",
- slantperpoint="scaledpoints",
- spacing={
- width="scaledpoints",
- stretch="scaledpoints",
- shrink="scaledpoints",
- extra="scaledpoints",
- },
- xheight="scaledpoints",
- quad="scaledpoints",
- ascender="scaledpoints",
- descender="scaledpoints",
- synonyms={
- space="spacing.width",
- spacestretch="spacing.stretch",
- spaceshrink="spacing.shrink",
- extraspace="spacing.extra",
- x_height="xheight",
- space_stretch="spacing.stretch",
- space_shrink="spacing.shrink",
- extra_space="spacing.extra",
- em="quad",
- ex="xheight",
- slant="slantperpoint",
- },
- },
- description={
- width="basepoints",
- height="basepoints",
- depth="basepoints",
- boundingbox={},
- },
- character={
- width="scaledpoints",
- height="scaledpoints",
- depth="scaledpoints",
- italic="scaledpoints",
- },
-}
local designsizes=allocate()
constructors.designsizes=designsizes
local loadedfonts=allocate()
@@ -5209,7 +6169,9 @@ end
local unscaled={
ScriptPercentScaleDown=true,
ScriptScriptPercentScaleDown=true,
- RadicalDegreeBottomRaisePercent=true
+ RadicalDegreeBottomRaisePercent=true,
+ NoLimitSupFactor=true,
+ NoLimitSubFactor=true,
}
function constructors.assignmathparameters(target,original)
local mathparameters=original.mathparameters
@@ -5288,6 +6250,36 @@ function constructors.enhanceparameters(parameters)
extra=extra,
}
end
+local function mathkerns(v,vdelta)
+ local k={}
+ for i=1,#v do
+ local entry=v[i]
+ local height=entry.height
+ local kern=entry.kern
+ k[i]={
+ height=height and vdelta*height or 0,
+ kern=kern and vdelta*kern or 0,
+ }
+ end
+ return k
+end
+local psfake=0
+local function fixedpsname(psname,fallback)
+ local usedname=psname
+ if psname and psname~="" then
+ if find(psname," ") then
+ usedname=gsub(psname,"[%s]+","-")
+ else
+ end
+ elseif not fallback or fallback=="" then
+ psfake=psfake+1
+ psname="fakename-"..psfake
+ else
+ psname=fallback
+ usedname=gsub(psname,"[^a-zA-Z0-9]+","-")
+ end
+ return usedname,psname~=usedname
+end
function constructors.scale(tfmdata,specification)
local target={}
if tonumber(specification) then
@@ -5361,14 +6353,12 @@ function constructors.scale(tfmdata,specification)
target.cidinfo=properties.cidinfo
target.format=properties.format
target.cache=constructors.cacheintex and "yes" or "renew"
- local fontname=properties.fontname or tfmdata.fontname
- local fullname=properties.fullname or tfmdata.fullname
- local filename=properties.filename or tfmdata.filename
- local psname=properties.psname or tfmdata.psname
+ local fontname=properties.fontname or tfmdata.fontname
+ local fullname=properties.fullname or tfmdata.fullname
+ local filename=properties.filename or tfmdata.filename
+ local psname=properties.psname or tfmdata.psname
local name=properties.name or tfmdata.name
- if not psname or psname=="" then
- psname=fontname or (fullname and fonts.names.cleanname(fullname))
- end
+ local psname,psfixed=fixedpsname(psname,fontname or fullname or file.nameonly(filename))
target.fontname=fontname
target.fullname=fullname
target.filename=filename
@@ -5418,10 +6408,14 @@ function constructors.scale(tfmdata,specification)
local haskerns=properties.haskerns or properties.mode=="base"
local hasligatures=properties.hasligatures or properties.mode=="base"
local realdimensions=properties.realdimensions
+ local writingmode=properties.writingmode or "horizontal"
+ local identity=properties.identity or "horizontal"
if changed and not next(changed) then
changed=false
end
target.type=isvirtual and "virtual" or "real"
+ target.writingmode=writingmode=="vertical" and "vertical" or "horizontal"
+ target.identity=identity=="vertical" and "vertical" or "horizontal"
target.postprocessors=tfmdata.postprocessors
local targetslant=(parameters.slant or parameters[1] or 0)*factors.pt
local targetspace=(parameters.space or parameters[2] or 0)*hdelta
@@ -5481,8 +6475,9 @@ function constructors.scale(tfmdata,specification)
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",hasitalics and "enabled" or "disabled")
+ report_defining("defining tfm, name %a, fullname %a, filename %a, %spsname %a, hscale %a, vscale %a, math %a, italics %a",
+ name,fullname,filename,psfixed and "(fixed) " or "",psname,hdelta,vdelta,
+ hasmath and "enabled" or "disabled",hasitalics and "enabled" or "disabled")
end
constructors.beforecopyingcharacters(target,tfmdata)
local sharedkerns={}
@@ -5626,22 +6621,15 @@ function constructors.scale(tfmdata,specification)
chr.top_accent=vdelta*va
end
if stackmath then
- local mk=character.mathkerns
+ local mk=character.mathkerns
if mk then
- local kerns={}
- local v=mk.top_right if v then local k={} for i=1,#v do local vi=v[i]
- k[i]={ height=vdelta*vi.height,kern=vdelta*vi.kern }
- end kerns.top_right=k end
- local v=mk.top_left if v then local k={} for i=1,#v do local vi=v[i]
- k[i]={ height=vdelta*vi.height,kern=vdelta*vi.kern }
- end kerns.top_left=k end
- local v=mk.bottom_left if v then local k={} for i=1,#v do local vi=v[i]
- k[i]={ height=vdelta*vi.height,kern=vdelta*vi.kern }
- end kerns.bottom_left=k end
- local v=mk.bottom_right if v then local k={} for i=1,#v do local vi=v[i]
- k[i]={ height=vdelta*vi.height,kern=vdelta*vi.kern }
- end kerns.bottom_right=k end
- chr.mathkern=kerns
+ local tr,tl,br,bl=mk.topright,mk.topleft,mk.bottomright,mk.bottomleft
+ chr.mathkern={
+ top_right=tr and mathkerns(tr,vdelta) or nil,
+ top_left=tl and mathkerns(tl,vdelta) or nil,
+ bottom_right=br and mathkerns(br,vdelta) or nil,
+ bottom_left=bl and mathkerns(bl,vdelta) or nil,
+ }
end
end
if hasitalics then
@@ -5813,6 +6801,8 @@ function constructors.finalize(tfmdata)
cidinfo=tfmdata.cidinfo or nil,
format=tfmdata.format or "type1",
direction=tfmdata.direction or 0,
+ writingmode=tfmdata.writingmode or "horizontal",
+ identity=tfmdata.identity or "horizontal",
}
end
if not tfmdata.resources then
@@ -5859,20 +6849,20 @@ constructors.hashmethods=hashmethods
function constructors.hashfeatures(specification)
local features=specification.features
if features then
- local t,tn={},0
- for category,list in next,features do
+ local t,n={},0
+ for category,list in sortedhash(features) do
if next(list) then
local hasher=hashmethods[category]
if hasher then
local hash=hasher(list)
if hash then
- tn=tn+1
- t[tn]=category..":"..hash
+ n=n+1
+ t[n]=category..":"..hash
end
end
end
end
- if tn>0 then
+ if n>0 then
return concat(t," & ")
end
end
@@ -5886,15 +6876,11 @@ hashmethods.normal=function(list)
elseif k=="number" or k=="features" then
else
n=n+1
- s[n]=k
+ s[n]=k..'='..tostring(v)
end
end
if n>0 then
sort(s)
- for i=1,n do
- local k=s[i]
- s[i]=k..'='..tostring(list[k])
- end
return concat(s,"+")
end
end
@@ -5954,119 +6940,231 @@ setmetatableindex(formats,function(t,k)
end
return rawget(t,file.suffix(l))
end)
-local locations={}
-local function setindeed(mode,target,group,name,action,position)
- local t=target[mode]
- if not t then
- report_defining("fatal error in setting feature %a, group %a, mode %a",name,group,mode)
- os.exit()
- elseif position then
- insert(t,position,{ name=name,action=action })
- else
- for i=1,#t do
- local ti=t[i]
- if ti.name==name then
- ti.action=action
- return
+do
+ local function setindeed(mode,source,target,group,name,position)
+ local action=source[mode]
+ if not action then
+ return
+ end
+ local t=target[mode]
+ if not t then
+ report_defining("fatal error in setting feature %a, group %a, mode %a",name,group,mode)
+ os.exit()
+ elseif position then
+ insert(t,position,{ name=name,action=action })
+ else
+ for i=1,#t do
+ local ti=t[i]
+ if ti.name==name then
+ ti.action=action
+ return
+ end
end
+ insert(t,{ name=name,action=action })
end
- insert(t,{ name=name,action=action })
end
-end
-local function set(group,name,target,source)
- target=target[group]
- if not target then
- report_defining("fatal target error in setting feature %a, group %a",name,group)
- os.exit()
- end
- local source=source[group]
- if not source then
- report_defining("fatal source error in setting feature %a, group %a",name,group)
- os.exit()
- end
- local node=source.node
- local base=source.base
- local position=source.position
- if node then
- setindeed("node",target,group,name,node,position)
- end
- if base then
- setindeed("base",target,group,name,base,position)
- end
-end
-local function register(where,specification)
- local name=specification.name
- if name and name~="" then
- local default=specification.default
- local description=specification.description
- local initializers=specification.initializers
- local processors=specification.processors
- local manipulators=specification.manipulators
- local modechecker=specification.modechecker
- if default then
- where.defaults[name]=default
- end
- if description and description~="" then
- where.descriptions[name]=description
- end
- if initializers then
- set('initializers',name,where,specification)
+ local function set(group,name,target,source)
+ target=target[group]
+ if not target then
+ report_defining("fatal target error in setting feature %a, group %a",name,group)
+ os.exit()
end
- if processors then
- set('processors',name,where,specification)
- end
- if manipulators then
- set('manipulators',name,where,specification)
+ local source=source[group]
+ if not source then
+ report_defining("fatal source error in setting feature %a, group %a",name,group)
+ os.exit()
end
- if modechecker then
- where.modechecker=modechecker
+ local position=source.position
+ setindeed("node",source,target,group,name,position)
+ setindeed("base",source,target,group,name,position)
+ setindeed("plug",source,target,group,name,position)
+ end
+ local function register(where,specification)
+ local name=specification.name
+ if name and name~="" then
+ local default=specification.default
+ local description=specification.description
+ local initializers=specification.initializers
+ local processors=specification.processors
+ local manipulators=specification.manipulators
+ local modechecker=specification.modechecker
+ if default then
+ where.defaults[name]=default
+ end
+ if description and description~="" then
+ where.descriptions[name]=description
+ end
+ if initializers then
+ set('initializers',name,where,specification)
+ end
+ if processors then
+ set('processors',name,where,specification)
+ end
+ if manipulators then
+ set('manipulators',name,where,specification)
+ end
+ if modechecker then
+ where.modechecker=modechecker
+ end
end
end
-end
-constructors.registerfeature=register
-function constructors.getfeatureaction(what,where,mode,name)
- what=handlers[what].features
- if what then
- where=what[where]
- if where then
- mode=where[mode]
- if mode then
- for i=1,#mode do
- local m=mode[i]
- if m.name==name then
- return m.action
+ constructors.registerfeature=register
+ function constructors.getfeatureaction(what,where,mode,name)
+ what=handlers[what].features
+ if what then
+ where=what[where]
+ if where then
+ mode=where[mode]
+ if mode then
+ for i=1,#mode do
+ local m=mode[i]
+ if m.name==name then
+ return m.action
+ end
end
end
end
end
end
-end
-function constructors.newhandler(what)
- local handler=handlers[what]
- if not handler then
- handler={}
- handlers[what]=handler
+ local newfeatures={}
+ constructors.newfeatures=newfeatures
+ constructors.features=newfeatures
+ local function setnewfeatures(what)
+ local handler=handlers[what]
+ local features=handler.features
+ if not features then
+ local tables=handler.tables
+ local statistics=handler.statistics
+ features=allocate {
+ defaults={},
+ descriptions=tables and tables.features or {},
+ used=statistics and statistics.usedfeatures or {},
+ initializers={ base={},node={},plug={} },
+ processors={ base={},node={},plug={} },
+ manipulators={ base={},node={},plug={} },
+ }
+ features.register=function(specification) return register(features,specification) end
+ handler.features=features
+ end
+ return features
end
- return handler
+ setmetatable(newfeatures,{
+ __call=function(t,k) local v=t[k] return v end,
+ __index=function(t,k) local v=setnewfeatures(k) t[k]=v return v end,
+ })
end
-function constructors.newfeatures(what)
- local handler=handlers[what]
- local features=handler.features
- if not features then
- local tables=handler.tables
- local statistics=handler.statistics
- features=allocate {
- defaults={},
- descriptions=tables and tables.features or {},
- used=statistics and statistics.usedfeatures or {},
- initializers={ base={},node={} },
- processors={ base={},node={} },
- manipulators={ base={},node={} },
- }
- features.register=function(specification) return register(features,specification) end
- handler.features=features
+do
+ local newhandler={}
+ constructors.handlers=newhandler
+ constructors.newhandler=newhandler
+ local function setnewhandler(what)
+ local handler=handlers[what]
+ if not handler then
+ handler={}
+ handlers[what]=handler
+ end
+ return handler
+ end
+ setmetatable(newhandler,{
+ __call=function(t,k) local v=t[k] return v end,
+ __index=function(t,k) local v=setnewhandler(k) t[k]=v return v end,
+ })
+end
+do
+ local newenhancer={}
+ constructors.enhancers=newenhancer
+ constructors.newenhancer=newenhancer
+ local function setnewenhancer(format)
+ local handler=handlers[format]
+ local enhancers=handler.enhancers
+ if not enhancers then
+ local actions=allocate()
+ local before=allocate()
+ local after=allocate()
+ local order=allocate()
+ local patches={ before=before,after=after }
+ local trace=false
+ local report=logs.reporter("fonts",format.." enhancing")
+ trackers.register(format..".loading",function(v) trace=v end)
+ local function enhance(name,data,filename,raw)
+ local enhancer=actions[name]
+ if enhancer then
+ if trace then
+ report("apply enhancement %a to file %a",name,filename)
+ ioflush()
+ end
+ enhancer(data,filename,raw)
+ else
+ end
+ end
+ local function apply(data,filename,raw)
+ local basename=file.basename(lower(filename))
+ if trace then
+ report("%s enhancing file %a","start",filename)
+ end
+ ioflush()
+ for e=1,#order do
+ local enhancer=order[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()
+ end
+ if trace then
+ report("%s enhancing file %a","stop",filename)
+ end
+ ioflush()
+ end
+ local function register(what,action)
+ if action then
+ if actions[what] then
+ else
+ order[#order+1]=what
+ end
+ actions[what]=action
+ else
+ report("bad enhancer %a",what)
+ end
+ end
+ local function patch(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
+ enhancers={
+ register=register,
+ apply=apply,
+ patch=patch,
+ patches={ register=patch },
+ }
+ handler.enhancers=enhancers
+ end
+ return enhancers
end
- return features
+ setmetatable(newenhancer,{
+ __call=function(t,k) local v=t[k] return v end,
+ __index=function(t,k) local v=setnewenhancer(k) t[k]=v return v end,
+ })
end
function constructors.checkedfeatures(what,features)
local defaults=handlers[what].features.defaults
@@ -6087,7 +7185,6 @@ function constructors.initializefeatures(what,tfmdata,features,trace,report)
local properties=tfmdata.properties or {}
local whathandler=handlers[what]
local whatfeatures=whathandler.features
- local whatinitializers=whatfeatures.initializers
local whatmodechecker=whatfeatures.modechecker
local mode=properties.mode or (whatmodechecker and whatmodechecker(tfmdata,features,features.mode)) or features.mode or "base"
properties.mode=mode
@@ -6222,19 +7319,61 @@ if context then
os.exit()
end
local fonts=fonts
-fonts.encodings={}
-fonts.encodings.agl={}
-fonts.encodings.known={}
-setmetatable(fonts.encodings.agl,{ __index=function(t,k)
+local encodings={}
+fonts.encodings=encodings
+encodings.agl={}
+encodings.known={}
+setmetatable(encodings.agl,{ __index=function(t,k)
if k=="unicodes" then
texio.write(" <loading (extended) adobe glyph list>")
local unicodes=dofile(resolvers.findfile("font-age.lua"))
- fonts.encodings.agl={ unicodes=unicodes }
+ encodings.agl={ unicodes=unicodes }
return unicodes
else
return nil
end
end })
+encodings.cache=containers.define("fonts","enc",encodings.version,true)
+function encodings.load(filename)
+ local name=file.removesuffix(filename)
+ local data=containers.read(encodings.cache,name)
+ if data then
+ return data
+ end
+ local vector,tag,hash,unicodes={},"",{},{}
+ local foundname=resolvers.findfile(filename,'enc')
+ if foundname and foundname~="" then
+ local ok,encoding,size=resolvers.loadbinfile(foundname)
+ if ok and encoding then
+ encoding=string.gsub(encoding,"%%(.-)\n","")
+ local unicoding=encodings.agl.unicodes
+ local tag,vec=string.match(encoding,"/(%w+)%s*%[(.*)%]%s*def")
+ local i=0
+ for ch in string.gmatch(vec,"/([%a%d%.]+)") do
+ if ch~=".notdef" then
+ vector[i]=ch
+ if not hash[ch] then
+ hash[ch]=i
+ else
+ end
+ local u=unicoding[ch]
+ if u then
+ unicodes[u]=i
+ end
+ end
+ i=i+1
+ end
+ end
+ end
+ local data={
+ name=name,
+ tag=tag,
+ vector=vector,
+ hash=hash,
+ unicodes=unicodes
+ }
+ return containers.write(encodings.cache,name,data)
+end
end -- closure
@@ -6403,13 +7542,13 @@ if not modules then modules={} end modules ['font-map']={
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 sortedhash,sortedkeys=table.sortedhash,table.sortedkeys
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 trace_mapping=false trackers.register("fonts.mapping",function(v) trace_mapping=v end)
+local report_fonts=logs.reporter("fonts","loading")
+local force_ligatures=true directives.register("fonts.mapping.forceligatures",function(v) force_ligatures=v end)
local fonts=fonts or {}
local mappings=fonts.mappings or {}
fonts.mappings=mappings
@@ -6438,7 +7577,7 @@ local function makenameparser(str)
end
local f_single=formatters["%04X"]
local f_double=formatters["%04X%04X"]
-local function tounicode16(unicode,name)
+local function tounicode16(unicode)
if unicode<0xD7FF or (unicode>0xDFFF and unicode<=0xFFFF) then
return f_single(unicode)
else
@@ -6446,7 +7585,7 @@ local function tounicode16(unicode,name)
return f_double(floor(unicode/1024)+0xD800,unicode%1024+0xDC00)
end
end
-local function tounicode16sequence(unicodes,name)
+local function tounicode16sequence(unicodes)
local t={}
for l=1,#unicodes do
local u=unicodes[l]
@@ -6497,36 +7636,44 @@ 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 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
+do
+ 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 } },
+ }
+ local o={}
+ for k,v in next,overloads do
+ local name=v.name
+ local mess=v.mess
+ if name then
+ o[name]=v
+ end
+ if mess then
+ o[mess]=v
+ end
+ o[k]=v
end
+ mappings.overloads=o
end
-mappings.overloads=overloads
function mappings.addtounicode(data,filename,checklookups)
local resources=data.resources
local unicodes=resources.unicodes
if not unicodes then
+ if trace_mapping then
+ report_fonts("no unicode list, quitting tounicode for %a",filename)
+ end
return
end
local properties=data.properties
local descriptions=data.descriptions
+ local overloads=mappings.overloads
unicodes['space']=unicodes['space'] or 32
unicodes['hyphen']=unicodes['hyphen'] or 45
unicodes['zwj']=unicodes['zwj'] or 0x200D
@@ -6549,10 +7696,13 @@ function mappings.addtounicode(data,filename,checklookups)
end
local ns=0
local nl=0
- for du,glyph in next,descriptions do
+ local dlist=sortedkeys(descriptions)
+ for i=1,#dlist do
+ local du=dlist[i]
+ local glyph=descriptions[du]
local name=glyph.name
if name then
- local overload=overloads[name]
+ local overload=overloads[name] or overloads[du]
if overload then
glyph.unicode=overload.unicode
else
@@ -6671,37 +7821,52 @@ function mappings.addtounicode(data,filename,checklookups)
end
end
end
+ else
+ local overload=overloads[du]
+ if overload then
+ glyph.unicode=overload.unicode
+ end
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
+ local collected=fonts.handlers.otf.readers.getcomponents(data)
+ local function resolve(glyph,u)
+ local n=#u
+ for i=1,n do
+ if u[i]>private then
+ n=0
+ break
end
- local u=collected[unicode]
+ end
+ if n>0 then
+ if n>1 then
+ glyph.unicode=u
+ else
+ glyph.unicode=u[1]
+ end
+ unicoded=unicoded+1
+ end
+ end
+ if not collected then
+ elseif force_ligatures then
+ for i=1,#dlist do
+ local du=dlist[i]
+ local u=collected[du]
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
+ resolve(descriptions[du],u)
+ end
+ end
+ else
+ for i=1,#dlist do
+ local du=dlist[i]
+ local glyph=descriptions[du]
+ if glyph.class=="ligature" and not glyph.unicode then
+ local u=collected[du]
+ if u then
+ resolve(glyph,u)
end
end
end
@@ -6710,9 +7875,11 @@ function mappings.addtounicode(data,filename,checklookups)
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
+ for i=1,#dlist do
+ local du=dlist[i]
+ local glyph=descriptions[du]
+ local name=glyph.name or "-"
+ local index=glyph.index or 0
local unicode=glyph.unicode
if unicode then
if type(unicode)=="table" then
@@ -6720,12 +7887,12 @@ function mappings.addtounicode(data,filename,checklookups)
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)
+ report_fonts("internal slot %U, name %a, unicode %U, tounicode % t",index,name,du,unicodes)
else
- report_fonts("internal slot %U, name %a, unicode %U, tounicode %U",index,name,unic,unicode)
+ report_fonts("internal slot %U, name %a, unicode %U, tounicode %U",index,name,du,unicode)
end
else
- report_fonts("internal slot %U, name %a, unicode %U",index,name,unic)
+ report_fonts("internal slot %U, name %a, unicode %U",index,name,du)
end
end
end
@@ -6815,165 +7982,6 @@ end -- closure
do -- begin closure to overcome local limits and interference
-if not modules then modules={} end modules ['font-tfm']={
- version=1.001,
- comment="companion to font-ini.mkiv",
- author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
- copyright="PRAGMA ADE / ConTeXt Development Team",
- license="see context related readme files"
-}
-local next=next
-local match=string.match
-local trace_defining=false trackers.register("fonts.defining",function(v) trace_defining=v end)
-local trace_features=false trackers.register("tfm.features",function(v) trace_features=v end)
-local report_defining=logs.reporter("fonts","defining")
-local report_tfm=logs.reporter("fonts","tfm loading")
-local findbinfile=resolvers.findbinfile
-local fonts=fonts
-local handlers=fonts.handlers
-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.ofm="type1"
-function tfm.setfeatures(tfmdata,features)
- local okay=constructors.initializefeatures("tfm",tfmdata,features,trace_features,report_tfm)
- if okay then
- return constructors.collectprocessors("tfm",tfmdata,features,trace_features,report_tfm)
- else
- 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
- local tfmdata=font.read_tfm(filename,size)
- if tfmdata then
- local features=specification.features and specification.features.normal or {}
- local resources=tfmdata.resources or {}
- local properties=tfmdata.properties or {}
- local parameters=tfmdata.parameters or {}
- local shared=tfmdata.shared or {}
- properties.name=tfmdata.name
- properties.fontname=tfmdata.fontname
- properties.psname=tfmdata.psname
- properties.filename=specification.filename
- properties.format=fonts.formats.tfm
- parameters.size=size
- tfmdata.properties=properties
- tfmdata.resources=resources
- tfmdata.parameters=parameters
- tfmdata.shared=shared
- shared.rawdata={}
- shared.features=features
- shared.processes=next(features) and tfm.setfeatures(tfmdata,features) or nil
- parameters.slant=parameters.slant or parameters[1] or 0
- parameters.space=parameters.space or parameters[2] or 0
- parameters.space_stretch=parameters.space_stretch or parameters[3] or 0
- parameters.space_shrink=parameters.space_shrink or parameters[4] or 0
- parameters.x_height=parameters.x_height or parameters[5] or 0
- parameters.quad=parameters.quad or parameters[6] or 0
- parameters.extra_space=parameters.extra_space or parameters[7] or 0
- constructors.enhanceparameters(parameters)
- if constructors.resolvevirtualtoo then
- fonts.loggers.register(tfmdata,file.suffix(filename),specification)
- local vfname=findbinfile(specification.name,'ovf')
- if vfname and vfname~="" then
- local vfdata=font.read_vf(vfname,size)
- if vfdata then
- local chars=tfmdata.characters
- for k,v in next,vfdata.characters do
- chars[k].commands=v.commands
- 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
- local allfeatures=tfmdata.shared.features or specification.features.normal
- constructors.applymanipulators("tfm",tfmdata,allfeatures.normal,trace_features,report_tfm)
- if not features.encoding then
- local encoding,filename=match(properties.filename,"^(.-)%-(.*)$")
- if filename and encoding and encodings.known and encodings.known[encoding] then
- features.encoding=encoding
- end
- end
- properties.haskerns=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)
- local foundname=findbinfile(fullname,'tfm') or ""
- if foundname=="" then
- foundname=findbinfile(fullname,'ofm') or ""
- end
- if foundname=="" then
- foundname=fonts.names.getfilename(fullname,"tfm") or ""
- end
- if foundname~="" then
- specification.filename=foundname
- specification.format="ofm"
- return read_from_tfm(specification)
- elseif trace_defining then
- report_defining("loading tfm with name %a fails",specification.name)
- end
-end
-readers.check_tfm=check_tfm
-function 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
- return check_tfm(specification,fullname)
-end
-readers.ofm=readers.tfm
-
-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",
@@ -6984,8 +7992,8 @@ if not modules then modules={} end modules ['font-oti']={
local lower=string.lower
local fonts=fonts
local constructors=fonts.constructors
-local otf=constructors.newhandler("otf")
-local otffeatures=constructors.newfeatures("otf")
+local otf=constructors.handlers.otf
+local otffeatures=constructors.features.otf
local registerotffeature=otffeatures.register
local otftables=otf.tables or {}
otf.tables=otftables
@@ -7000,6 +8008,7 @@ local function setmode(tfmdata,value)
tfmdata.properties.mode=lower(value)
end
end
+otf.modeinitializer=setmode
local function setlanguage(tfmdata,value)
if value then
local cleanvalue=lower(value)
@@ -7034,6 +8043,7 @@ registerotffeature {
initializers={
base=setmode,
node=setmode,
+ plug=setmode,
}
}
registerotffeature {
@@ -7042,6 +8052,7 @@ registerotffeature {
initializers={
base=setlanguage,
node=setlanguage,
+ plug=setlanguage,
}
}
registerotffeature {
@@ -7050,6 +8061,7 @@ registerotffeature {
initializers={
base=setscript,
node=setscript,
+ plug=setscript,
}
}
otftables.featuretypes=allocate {
@@ -7122,21 +8134,20 @@ if not modules then modules={} end modules ['font-otr']={
copyright="PRAGMA ADE / ConTeXt Development Team",
license="see context related readme files"
}
-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,abs,sqrt,round=math.floor,math.abs,math.sqrt,math.round
+local next,type=next,type
+local byte,lower,char,gsub=string.byte,string.lower,string.char,string.gsub
+local floor,round=math.floor,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 stripstring=string.nospaces
local utf16_to_utf8_be=utf.utf16_to_utf8_be
local report=logs.reporter("otf reader")
local trace_cmap=false
+local trace_cmap_detail=false
fonts=fonts or {}
local handlers=fonts.handlers or {}
fonts.handlers=handlers
@@ -7145,10 +8156,11 @@ handlers.otf=otf
local readers=otf.readers or {}
otf.readers=readers
local streamreader=utilities.files
+local streamwriter=utilities.files
readers.streamreader=streamreader
+readers.streamwriter=streamwriter
local openfile=streamreader.open
local closefile=streamreader.close
-local skipbytes=streamreader.skip
local setposition=streamreader.setposition
local skipshort=streamreader.skipshort
local readbytes=streamreader.readbytes
@@ -7156,32 +8168,24 @@ 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 readulong=streamreader.readcardinal4
local readshort=streamreader.readinteger2
local readlong=streamreader.readinteger4
local readfixed=streamreader.readfixed4
+local read2dot14=streamreader.read2dot14
local readfword=readshort
local readufword=readushort
local readoffset=readushort
-local read2dot14=streamreader.read2dot14
function streamreader.readtag(f)
- return lower(strip(readstring(f,4)))
+ return lower(stripstring(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 privateoffset=fonts.constructors and fonts.constructors.privateoffset or 0xF0000
local reservednames={ [0]="copyright",
"family",
"subfamily",
@@ -7207,6 +8211,7 @@ local reservednames={ [0]="copyright",
"wwssubfamily",
"lightbackgroundpalette",
"darkbackgroundpalette",
+ "variationspostscriptnameprefix",
}
local platforms={ [0]="unicode",
"macintosh",
@@ -7372,6 +8377,37 @@ local panosewidths={
[ 8]="verycondensed",
[ 9]="monospaced",
}
+local helpers={}
+readers.helpers=helpers
+local function gotodatatable(f,fontdata,tag,criterium)
+ if criterium and f then
+ local datatable=fontdata.tables[tag]
+ if datatable then
+ local tableoffset=datatable.offset
+ setposition(f,tableoffset)
+ return tableoffset
+ end
+ end
+end
+local function reportskippedtable(f,fontdata,tag,criterium)
+ if criterium and f then
+ local datatable=fontdata.tables[tag]
+ if datatable then
+ report("loading of table %a skipped",tag)
+ end
+ end
+end
+local function setvariabledata(fontdata,tag,data)
+ local variabledata=fontdata.variabledata
+ if variabledata then
+ variabledata[tag]=data
+ else
+ fontdata.variabledata={ [tag]=data }
+ end
+end
+helpers.gotodatatable=gotodatatable
+helpers.setvariabledata=setvariabledata
+helpers.reportskippedtable=reportskippedtable
local platformnames={
postscriptname=true,
fullname=true,
@@ -7382,13 +8418,12 @@ local platformnames={
compatiblefullname=true,
}
function readers.name(f,fontdata,specification)
- local datatable=fontdata.tables.name
- if datatable then
- setposition(f,datatable.offset)
+ local tableoffset=gotodatatable(f,fontdata,"name",true)
+ if tableoffset then
local format=readushort(f)
local nofnames=readushort(f)
local offset=readushort(f)
- local start=datatable.offset+offset
+ local start=tableoffset+offset
local namelists={
unicode={},
windows={},
@@ -7407,19 +8442,17 @@ function readers.name(f,fontdata,specification)
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
+ local index=readushort(f)
+ local name=reservednames[index]
+ namelist[#namelist+1]={
+ platform=platform,
+ encoding=encoding,
+ language=language,
+ name=name,
+ index=index,
+ length=readushort(f),
+ offset=start+readushort(f),
+ }
else
skipshort(f,3)
end
@@ -7435,12 +8468,14 @@ function readers.name(f,fontdata,specification)
end
local names={}
local done={}
+ local extras={}
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 index=name.index
+ if not done[nametag or i] then
local encoding=name.encoding
local language=name.language
if (not e or encoding==e) and (not l or language==l) then
@@ -7453,13 +8488,16 @@ function readers.name(f,fontdata,specification)
if decoder then
content=decoder(content)
end
- names[nametag]={
- content=content,
- platform=platform,
- encoding=encoding,
- language=language,
- }
- done[nametag]=true
+ if nametag then
+ names[nametag]={
+ content=content,
+ platform=platform,
+ encoding=encoding,
+ language=language,
+ }
+ end
+ extras[index]=content
+ done[nametag or i]=true
end
end
end
@@ -7470,6 +8508,7 @@ function readers.name(f,fontdata,specification)
filter("macintosh")
filter("unicode")
fontdata.names=names
+ fontdata.extras=extras
if specification.platformnames then
local collected={}
for platform,namelist in next,namelists do
@@ -7517,9 +8556,8 @@ local function getname(fontdata,key)
end
end
readers["os/2"]=function(f,fontdata)
- local datatable=fontdata.tables["os/2"]
- if datatable then
- setposition(f,datatable.offset)
+ local tableoffset=gotodatatable(f,fontdata,"os/2",true)
+ if tableoffset then
local version=readushort(f)
local windowsmetrics={
version=version,
@@ -7569,9 +8607,8 @@ readers["os/2"]=function(f,fontdata)
end
end
readers.head=function(f,fontdata)
- local datatable=fontdata.tables.head
- if datatable then
- setposition(f,datatable.offset)
+ local tableoffset=gotodatatable(f,fontdata,"head",true)
+ if tableoffset then
local fontheader={
version=readfixed(f),
revision=readfixed(f),
@@ -7598,108 +8635,155 @@ readers.head=function(f,fontdata)
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),
+ local tableoffset=gotodatatable(f,fontdata,"hhea",specification.details)
+ if tableoffset then
+ 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),
+ nofmetrics=readushort(f),
+ }
+ else
+ fontdata.horizontalheader={
+ nofmetrics=0,
+ }
+ end
+end
+readers.vhea=function(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"vhea",specification.details)
+ if tableoffset then
+ fontdata.verticalheader={
+ version=readfixed(f),
+ ascender=readfword(f),
+ descender=readfword(f),
+ linegap=readfword(f),
+ maxadvanceheight=readufword(f),
+ mintopsidebearing=readfword(f),
+ minbottomsidebearing=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),
+ nofmetrics=readushort(f),
+ }
+ else
+ fontdata.verticalheader={
+ nofmetrics=0,
+ }
+ end
+end
+readers.maxp=function(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"maxp",specification.details)
+ if tableoffset then
+ local version=readfixed(f)
+ local nofglyphs=readushort(f)
+ fontdata.nofglyphs=nofglyphs
+ if version==0.5 then
+ fontdata.maximumprofile={
+ version=version,
+ nofglyphs=nofglyphs,
+ }
+ 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),
}
else
- fontdata.horizontalheader={
- nofhmetrics=0,
+ fontdata.maximumprofile={
+ version=version,
+ nofglyphs=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
+readers.hmtx=function(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"hmtx",specification.glyphs)
+ if tableoffset then
+ local horizontalheader=fontdata.horizontalheader
+ local nofmetrics=horizontalheader.nofmetrics
+ 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
- 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
+readers.vmtx=function(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"vmtx",specification.glyphs)
+ if tableoffset then
+ local verticalheader=fontdata.verticalheader
+ local nofmetrics=verticalheader.nofmetrics
+ local glyphs=fontdata.glyphs
+ local nofglyphs=fontdata.nofglyphs
+ local vheight=0
+ local vdefault=verticalheader.ascender+verticalheader.descender
+ local topsidebearing=0
+ for i=0,nofmetrics-1 do
+ local glyph=glyphs[i]
+ vheight=readshort(f)
+ topsidebearing=readshort(f)
+ if vheight~=0 and vheight~=vdefault then
+ glyph.vheight=vheight
end
- for i=nofmetrics,nofglyphs-1 do
- local glyph=glyphs[i]
- if width~=0 then
- glyph.width=width
- end
+ end
+ for i=nofmetrics,nofglyphs-1 do
+ local glyph=glyphs[i]
+ if vheight~=0 and vheight~=vdefault then
+ glyph.vheight=vheight
end
end
end
end
+readers.vorg=function(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"vorg",specification.glyphs)
+end
readers.post=function(f,fontdata,specification)
- local datatable=fontdata.tables.post
- if datatable then
- setposition(f,datatable.offset)
+ local tableoffset=gotodatatable(f,fontdata,"post",true)
+ if tableoffset then
local version=readfixed(f)
fontdata.postscript={
version=version,
@@ -7756,9 +8840,7 @@ readers.post=function(f,fontdata,specification)
end
end
readers.cff=function(f,fontdata,specification)
- if specification.glyphs then
- reportskippedtable("cff")
- end
+ reportskippedtable(f,fontdata,"cff",specification.glyphs)
end
local formatreaders={}
local duplicatestoo=true
@@ -7770,11 +8852,13 @@ local sequence={
{ 0,0,6 },
{ 3,0,6 },
{ 0,5,14 },
+{ 0,4,12 },
{ 3,10,13 },
}
local supported={}
for i=1,#sequence do
- local sp,se,sf=unpack(sequence[i])
+ local si=sequence[i]
+ local sp,se,sf=si[1],si[2],si[3]
local p=supported[sp]
if not p then
p={}
@@ -7828,7 +8912,7 @@ formatreaders[4]=function(f,fontdata,offset)
elseif startchar==0xFFFF and offset==0 then
elseif offset==0xFFFF then
elseif offset==0 then
- if trace_cmap then
+ if trace_cmap_detail then
report("format 4.%i segment %2i from %C upto %C at index %H",1,segment,startchar,endchar,(startchar+delta)%65536)
end
for unicode=startchar,endchar do
@@ -7860,7 +8944,7 @@ formatreaders[4]=function(f,fontdata,offset)
end
else
local shift=(segment-nofsegments+offset/2)-startchar
- if trace_cmap then
+ if trace_cmap_detail then
report("format 4.%i segment %2i from %C upto %C at index %H",0,segment,startchar,endchar,(startchar+delta)%65536)
end
for unicode=startchar,endchar do
@@ -7908,7 +8992,7 @@ formatreaders[6]=function(f,fontdata,offset)
local count=readushort(f)
local stop=start+count-1
local nofdone=0
- if trace_cmap then
+ if trace_cmap_detail then
report("format 6 from %C to %C",2,start,stop)
end
for unicode=start,stop do
@@ -7941,7 +9025,7 @@ formatreaders[12]=function(f,fontdata,offset)
local first=readulong(f)
local last=readulong(f)
local index=readulong(f)
- if trace_cmap then
+ if trace_cmap_detail then
report("format 12 from %C to %C starts at index %i",first,last,index)
end
for unicode=first,last do
@@ -7980,7 +9064,7 @@ formatreaders[13]=function(f,fontdata,offset)
local last=readulong(f)
local index=readulong(f)
if first<privateoffset then
- if trace_cmap then
+ if trace_cmap_detail then
report("format 13 from %C to %C get index %i",first,last,index)
end
local glyph=glyphs[index]
@@ -8070,75 +9154,81 @@ local function checkcmap(f,fontdata,records,platform,encoding,format)
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)
+ if trace_cmap then
+ report("cmap checked: platform %i (%s), encoding %i (%s), format %i, new unicodes %i",platform,p,encoding,e and e[encoding] or "?",format,n)
+ end
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={},
- }
+ local tableoffset=gotodatatable(f,fontdata,"cmap",specification.glyphs)
+ if tableoffset then
+ 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 subtables=record[encoding]
- if not subtables then
- record[encoding]={
- offsets={ offset },
- formats={},
- }
- else
- local offsets=subtables.offsets
- offsets[#offsets+1]=offset
- end
+ local offsets=subtables.offsets
+ offsets[#offsets+1]=offset
end
end
+ end
+ if trace_cmap then
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 "?"
+ end
+ for platform,record in sortedhash(records) do
+ local p=platforms[platform]
+ local e=encodings[p]
+ local sp=supported[platform]
+ local ps=p or "?"
+ if trace_cmap then
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 "?"
+ end
+ for encoding,subtables in sortedhash(record) do
+ local se=sp and sp[encoding]
+ local es=e and e[encoding] or "?"
+ if trace_cmap then
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
+ 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
+ if trace_cmap then
local list=sortedkeys(formats)
for i=1,#list do
if not (se and se[list[i]]) then
@@ -8148,203 +9238,110 @@ function readers.cmap(f,fontdata,specification)
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
+ local ok=false
+ for i=1,#sequence do
+ local si=sequence[i]
+ local sp,se,sf=si[1],si[2],si[3]
+ if checkcmap(f,fontdata,records,sp,se,sf)>0 then
+ ok=true
end
- fontdata.cidmaps={
- version=version,
- noftables=noftables,
- records=records,
- }
- else
- fontdata.cidmaps={}
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
function readers.loca(f,fontdata,specification)
- if specification.glyphs then
- reportskippedtable("loca")
- end
+ reportskippedtable(f,fontdata,"loca",specification.glyphs)
end
function readers.glyf(f,fontdata,specification)
- if specification.glyphs then
- reportskippedtable("glyf")
- end
+ reportskippedtable(f,fontdata,"glyf",specification.glyphs)
+end
+function readers.colr(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"colr",specification.glyphs)
+end
+function readers.cpal(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"cpal",specification.glyphs)
+end
+function readers.svg(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"svg",specification.glyphs)
+end
+function readers.sbix(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"sbix",specification.glyphs)
+end
+function readers.cbdt(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"cbdt",specification.glyphs)
+end
+function readers.cblc(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"cblc",specification.glyphs)
+end
+function readers.ebdt(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"ebdt",specification.glyphs)
+end
+function readers.ebsc(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"ebsc",specification.glyphs)
+end
+function readers.eblc(f,fontdata,specification)
+ reportskippedtable(f,fontdata,"eblc",specification.glyphs)
end
function readers.kern(f,fontdata,specification)
- if specification.kerns then
- local datatable=fontdata.tables.kern
- if datatable then
- setposition(f,datatable.offset)
+ local tableoffset=gotodatatable(f,fontdata,"kern",specification.kerns)
+ if tableoffset then
+ local version=readushort(f)
+ local noftables=readushort(f)
+ for i=1,noftables do
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
+ 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
- elseif format==2 then
- report("todo: kern classes")
- else
- report("todo: kerns")
end
+ elseif format==2 then
+ report("todo: kern classes")
+ else
+ report("todo: kerns")
end
end
end
end
function readers.gdef(f,fontdata,specification)
- if specification.details then
- reportskippedtable("gdef")
- end
+ reportskippedtable(f,fontdata,"gdef",specification.details)
end
function readers.gsub(f,fontdata,specification)
- if specification.details then
- reportskippedtable("gsub")
- end
+ reportskippedtable(f,fontdata,"gsub",specification.details)
end
function readers.gpos(f,fontdata,specification)
- if specification.details then
- reportskippedtable("gpos")
- end
+ reportskippedtable(f,fontdata,"gpos",specification.details)
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 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
- 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
+ reportskippedtable(f,fontdata,"math",specification.details)
end
-otf.packoutlines=packoutlines
-otf.unpackoutlines=unpackoutlines
-local function getinfo(maindata,sub,platformnames,rawfamilynames)
+local function getinfo(maindata,sub,platformnames,rawfamilynames,metricstoo,instancenames)
local fontdata=sub and maindata.subfonts and maindata.subfonts[sub] or maindata
local names=fontdata.names
local info=nil
@@ -8354,8 +9351,8 @@ local function getinfo(maindata,sub,platformnames,rawfamilynames)
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 weight=getname(fontdata,"weight") or (cffinfo and cffinfo.weight) or (metrics and metrics.weight)
+ local width=getname(fontdata,"width") or (cffinfo and cffinfo.width ) or (metrics and metrics.width )
local fontname=getname(fontdata,"postscriptname")
local fullname=getname(fontdata,"fullname")
local family=getname(fontdata,"family")
@@ -8368,6 +9365,25 @@ local function getinfo(maindata,sub,platformnames,rawfamilynames)
if not familyname then familyname=family end
if not subfamilyname then subfamilyname=subfamily end
end
+ if platformnames then
+ platformnames=fontdata.platformnames
+ end
+ if instancenames then
+ local variabledata=fontdata.variabledata
+ if variabledata then
+ local instances=variabledata and variabledata.instances
+ if instances then
+ instancenames={}
+ for i=1,#instances do
+ instancenames[i]=lower(stripstring(instances[i].subfamily))
+ end
+ else
+ instancenames=nil
+ end
+ else
+ instancenames=nil
+ end
+ end
info={
subfontindex=fontdata.subfontindex or sub or 0,
version=getname(fontdata,"version"),
@@ -8395,8 +9411,30 @@ local function getinfo(maindata,sub,platformnames,rawfamilynames)
capheight=metrics.capheight,
ascender=metrics.typoascender,
descender=metrics.typodescender,
- platformnames=platformnames and fontdata.platformnames or nil,
+ platformnames=platformnames or nil,
+ instancenames=instancenames or nil,
}
+ if metricstoo then
+ local keys={
+ "version",
+ "ascender","descender","linegap",
+ "maxadvancewidth","maxadvanceheight","maxextent",
+ "minbottomsidebearing","mintopsidebearing",
+ }
+ local h=fontdata.horizontalheader or {}
+ local v=fontdata.verticalheader or {}
+ if h then
+ local th={}
+ local tv={}
+ for i=1,#keys do
+ local key=keys[i]
+ th[key]=h[key] or 0
+ tv[key]=v[key] or 0
+ end
+ info.horizontalmetrics=th
+ info.verticalmetrics=tv
+ end
+ end
elseif n then
info={
filename=fontdata.filename,
@@ -8428,6 +9466,7 @@ local function loadtables(f,specification,offset)
entryselector=readushort(f),
rangeshift=readushort(f),
tables=tables,
+ foundtables=false,
}
for i=1,fontdata.noftables do
local tag=lower(stripstring(readstring(f,4)))
@@ -8443,7 +9482,8 @@ local function loadtables(f,specification,offset)
length=length,
}
end
- if tables.cff then
+ fontdata.foundtables=sortedkeys(tables)
+ if tables.cff or tables.cff2 then
fontdata.format="opentype"
else
fontdata.format="truetype"
@@ -8461,12 +9501,25 @@ local function prepareglyps(fontdata)
fontdata.glyphs=glyphs
fontdata.mapping={}
end
+local function readtable(tag,f,fontdata,specification,...)
+ local reader=readers[tag]
+ if reader then
+ reader(f,fontdata,specification,...)
+ end
+end
+local variablefonts_supported=(context and true) or (logs and logs.application and true) or false
local function readdata(f,offset,specification)
local fontdata=loadtables(f,specification,offset)
if specification.glyphs then
prepareglyps(fontdata)
end
- readers["name"](f,fontdata,specification)
+ if not variablefonts_supported then
+ specification.instance=nil
+ specification.variable=nil
+ specification.factors=nil
+ end
+ fontdata.temporary={}
+ readtable("name",f,fontdata,specification)
local askedname=specification.askedname
if askedname then
local fullname=getname(fontdata,"fullname") or ""
@@ -8476,21 +9529,98 @@ local function readdata(f,offset,specification)
return
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)
+ readtable("stat",f,fontdata,specification)
+ readtable("avar",f,fontdata,specification)
+ readtable("fvar",f,fontdata,specification)
+ if variablefonts_supported then
+ local variabledata=fontdata.variabledata
+ if variabledata then
+ local instances=variabledata.instances
+ local axis=variabledata.axis
+ if axis and (not instances or #instances==0) then
+ instances={}
+ variabledata.instances=instances
+ local function add(n,subfamily,value)
+ local values={}
+ for i=1,#axis do
+ local a=axis[i]
+ values[i]={
+ axis=a.tag,
+ value=i==n and value or a.default,
+ }
+ end
+ instances[#instances+1]={
+ subfamily=subfamily,
+ values=values,
+ }
+ end
+ for i=1,#axis do
+ local a=axis[i]
+ local tag=a.tag
+ add(i,"default"..tag,a.default)
+ add(i,"minimum"..tag,a.minimum)
+ add(i,"maximum"..tag,a.maximum)
+ end
+ end
+ end
+ if not specification.factors then
+ local instance=specification.instance
+ if type(instance)=="string" then
+ local factors=helpers.getfactors(fontdata,instance)
+ if factors then
+ specification.factors=factors
+ fontdata.factors=factors
+ fontdata.instance=instance
+ report("user instance: %s, factors: % t",instance,factors)
+ else
+ report("user instance: %s, bad factors",instance)
+ end
+ end
+ end
+ if not fontdata.factors then
+ if fontdata.variabledata then
+ local factors=helpers.getfactors(fontdata,true)
+ if factors then
+ specification.factors=factors
+ fontdata.factors=factors
+ report("factors: % t",factors)
+ else
+ report("bad factors")
+ end
+ else
+ end
+ end
+ end
+ readtable("os/2",f,fontdata,specification)
+ readtable("head",f,fontdata,specification)
+ readtable("maxp",f,fontdata,specification)
+ readtable("hhea",f,fontdata,specification)
+ readtable("vhea",f,fontdata,specification)
+ readtable("hmtx",f,fontdata,specification)
+ readtable("vmtx",f,fontdata,specification)
+ readtable("vorg",f,fontdata,specification)
+ readtable("post",f,fontdata,specification)
+ readtable("mvar",f,fontdata,specification)
+ readtable("hvar",f,fontdata,specification)
+ readtable("vvar",f,fontdata,specification)
+ readtable("gdef",f,fontdata,specification)
+ readtable("cff",f,fontdata,specification)
+ readtable("cff2",f,fontdata,specification)
+ readtable("cmap",f,fontdata,specification)
+ readtable("loca",f,fontdata,specification)
+ readtable("glyf",f,fontdata,specification)
+ readtable("colr",f,fontdata,specification)
+ readtable("cpal",f,fontdata,specification)
+ readtable("svg",f,fontdata,specification)
+ readtable("sbix",f,fontdata,specification)
+ readtable("cbdt",f,fontdata,specification)
+ readtable("cblc",f,fontdata,specification)
+ readtable("ebdt",f,fontdata,specification)
+ readtable("eblc",f,fontdata,specification)
+ readtable("kern",f,fontdata,specification)
+ readtable("gsub",f,fontdata,specification)
+ readtable("gpos",f,fontdata,specification)
+ readtable("math",f,fontdata,specification)
fontdata.locations=nil
fontdata.tables=nil
fontdata.cidmaps=nil
@@ -8567,7 +9697,7 @@ local function loadfontdata(specification)
return fontdata or {}
end
end
-local function loadfont(specification,n)
+local function loadfont(specification,n,instance)
if type(specification)=="string" then
specification={
filename=specification,
@@ -8576,10 +9706,12 @@ local function loadfont(specification,n)
glyphs=true,
shapes=true,
kerns=true,
+ variable=true,
globalkerns=true,
lookups=true,
subfont=n or true,
tounicode=false,
+ instance=instance
}
end
if specification.shapes or specification.lookups or specification.kerns then
@@ -8594,6 +9726,10 @@ local function loadfont(specification,n)
if specification.platformnames then
specification.platformnames=true
end
+ if specification.instance or instance then
+ specification.variable=true
+ specification.instance=specification.instance or instance
+ end
local function message(str)
report("fatal error in file %a: %s\n%s",specification.filename,str,debug.traceback())
end
@@ -8602,12 +9738,22 @@ local function loadfont(specification,n)
return result
end
end
-function readers.loadshapes(filename,n)
+function readers.loadshapes(filename,n,instance,streams)
local fontdata=loadfont {
filename=filename,
shapes=true,
+ streams=streams,
+ variable=true,
subfont=n,
+ instance=instance,
}
+ if fontdata then
+ for k,v in next,fontdata.glyphs do
+ v.class=nil
+ v.index=nil
+ v.math=nil
+ end
+ end
return fontdata and {
filename=filename,
format=fontdata.format,
@@ -8620,13 +9766,15 @@ function readers.loadshapes(filename,n)
units=0,
}
end
-function readers.loadfont(filename,n)
+function readers.loadfont(filename,n,instance)
local fontdata=loadfont {
filename=filename,
glyphs=true,
shapes=false,
lookups=true,
+ variable=true,
subfont=n,
+ instance=instance,
}
if fontdata then
return {
@@ -8638,9 +9786,13 @@ function readers.loadfont(filename,n)
descriptions=fontdata.descriptions,
format=fontdata.format,
goodies={},
- metadata=getinfo(fontdata,n),
+ metadata=getinfo(fontdata,n,false,false,true,true),
properties={
hasitalics=fontdata.hasitalics or false,
+ maxcolorclass=fontdata.maxcolorclass,
+ hascolor=fontdata.hascolor or false,
+ instance=fontdata.instance,
+ factors=fontdata.factors,
},
resources={
filename=filename,
@@ -8656,6 +9808,11 @@ function readers.loadfont(filename,n)
version=getname(fontdata,"version"),
cidinfo=fontdata.cidinfo,
mathconstants=fontdata.mathconstants,
+ colorpalettes=fontdata.colorpalettes,
+ svgshapes=fontdata.svgshapes,
+ sbixshapes=fontdata.sbixshapes,
+ variabledata=fontdata.variabledata,
+ foundtables=fontdata.foundtables,
},
}
end
@@ -8664,6 +9821,7 @@ function readers.getinfo(filename,specification)
local subfont=nil
local platformnames=false
local rawfamilynames=false
+ local instancenames=true
if type(specification)=="table" then
subfont=tonumber(specification.subfont)
platformnames=specification.platformnames
@@ -8675,19 +9833,20 @@ function readers.getinfo(filename,specification)
filename=filename,
details=true,
platformnames=platformnames,
+ instancenames=true,
}
if fontdata then
local subfonts=fontdata.subfonts
if not subfonts then
- return getinfo(fontdata,nil,platformnames,rawfamilynames)
+ return getinfo(fontdata,nil,platformnames,rawfamilynames,false,instancenames)
elseif not subfont then
local info={}
for i=1,#subfonts do
- info[i]=getinfo(fontdata,i,platformnames,rawfamilynames)
+ info[i]=getinfo(fontdata,i,platformnames,rawfamilynames,false,instancenames)
end
return info
elseif subfont>=1 and subfont<=#subfonts then
- return getinfo(fontdata,subfont,platformnames,rawfamilynames)
+ return getinfo(fontdata,subfont,platformnames,rawfamilynames,false,instancenames)
else
return {
filename=filename,
@@ -8733,56 +9892,6 @@ function readers.extend(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={
- 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
end -- closure
@@ -8796,14 +9905,15 @@ if not modules then modules={} end modules ['font-cff']={
license="see context related readme files"
}
local next,type,tonumber=next,type,tonumber
-local byte=string.byte
+local byte,char,gmatch=string.byte,string.char,string.gmatch
local concat,remove=table.concat,table.remove
-local floor,abs,round,ceil=math.floor,math.abs,math.round,math.ceil
+local floor,abs,round,ceil,min,max=math.floor,math.abs,math.round,math.ceil,math.min,math.max
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 formatters=string.formatters
+local bytetable=string.bytetable
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
@@ -8811,6 +9921,7 @@ local readuint=streamreader.readcardinal3
local readulong=streamreader.readcardinal4
local setposition=streamreader.setposition
local getposition=streamreader.getposition
+local readbytetable=streamreader.readbytetable
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")
@@ -8819,6 +9930,8 @@ local parsecharstring
local parsecharstrings
local resetcharstrings
local parseprivates
+local startparsing
+local stopparsing
local defaultstrings={ [0]=
".notdef","space","exclam","quotedbl","numbersign","dollar","percent",
"ampersand","quoteright","parenleft","parenright","asterisk","plus",
@@ -8894,18 +10007,24 @@ local cffreaders={
}
local function readheader(f)
local offset=getposition(f)
+ local major=readbyte(f)
local header={
offset=offset,
- major=readbyte(f),
+ major=major,
minor=readbyte(f),
size=readbyte(f),
- osize=readbyte(f),
}
+ if major==1 then
+ header.dsize=readbyte(f)
+ elseif major==2 then
+ header.dsize=readushort(f)
+ else
+ end
setposition(f,offset+header.size)
return header
end
-local function readlengths(f)
- local count=readushort(f)
+local function readlengths(f,longcount)
+ local count=longcount and readulong(f) or readushort(f)
if count==0 then
return {}
end
@@ -8919,7 +10038,12 @@ local function readlengths(f)
local previous=read(f)
for i=1,count do
local offset=read(f)
- lengths[i]=offset-previous
+ local length=offset-previous
+ if length<0 then
+ report("bad offset: %i",length)
+ length=0
+ end
+ lengths[i]=length
previous=offset
end
return lengths
@@ -8984,7 +10108,7 @@ do
end+P("\16")/function()
result.encoding=stack[top]
top=0
- end+P("\17")/function()
+ end+P("\17")/function()
result.charstrings=stack[top]
top=0
end+P("\18")/function()
@@ -8995,10 +10119,20 @@ do
top=0
end+P("\19")/function()
result.subroutines=stack[top]
+ top=0
end+P("\20")/function()
result.defaultwidthx=stack[top]
+ top=0
end+P("\21")/function()
result.nominalwidthx=stack[top]
+ top=0
+ end
++P("\24")/function()
+ result.vstore=stack[top]
+ top=0
+ end+P("\25")/function()
+ result.maxstack=stack[top]
+ top=0
end
local p_double=P("\12")*(
P("\00")/function()
@@ -9022,7 +10156,7 @@ do
end+P("\06")/function()
result.charstringtype=stack[top]
top=0
- end+P("\07")/function()
+ end+P("\07")/function()
result.fontmatrix={ unpack(stack,1,6) }
top=0
end+P("\08")/function()
@@ -9060,10 +10194,10 @@ do
end+P("\35")/function()
result.cid.uidbase=stack[top]
top=0
- end+P("\36")/function()
+ end+P("\36")/function()
result.cid.fdarray=stack[top]
top=0
- end+P("\37")/function()
+ end+P("\37")/function()
result.cid.fdselect=stack[top]
top=0
end+P("\38")/function()
@@ -9128,12 +10262,12 @@ do
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)
+ parsedictionaries=function(data,dictionaries,what)
stack={}
strings=data.strings
for i=1,#dictionaries do
top=0
- result={
+ result=what=="cff" and {
monospaced=false,
italicangle=0,
underlineposition=-100,
@@ -9151,6 +10285,12 @@ do
fonttype=0,
count=8720,
}
+ } or {
+ charstringtype=2,
+ charset=0,
+ vstore=0,
+ cid={
+ },
}
lpegmatch(p_dictionary,dictionaries[i])
dictionaries[i]=result
@@ -9192,6 +10332,9 @@ do
local stems=0
local globalbias=0
local localbias=0
+ local nominalwidth=0
+ local defaultwidth=0
+ local charset=false
local globals=false
local locals=false
local depth=1
@@ -9201,6 +10344,13 @@ do
local ymax=0
local checked=false
local keepcurve=false
+ local version=2
+ local regions=false
+ local nofregions=0
+ local region=false
+ local factors=false
+ local axis=false
+ local vsindex=0
local function showstate(where)
report("%w%-10s : [%s] n=%i",depth*2,where,concat(stack," ",1,top),top)
end
@@ -9211,14 +10361,14 @@ do
report("%w%-10s : %s",depth*2,where,tostring(value))
end
end
- local function moveto(x,y)
+ local function xymoveto()
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
+ if x>xmax then xmax=x elseif x<xmin then xmin=x end
+ if y>ymax then ymax=y elseif y<ymin then ymin=y end
else
xmin=x
ymin=y
@@ -9227,14 +10377,55 @@ do
checked=true
end
end
- local function lineto(x,y)
+ local function xmoveto()
+ if keepcurve then
+ r=r+1
+ result[r]={ x,y,"m" }
+ end
+ if not checked then
+ xmin=x
+ ymin=y
+ xmax=x
+ ymax=y
+ checked=true
+ elseif x>xmax then
+ xmax=x
+ elseif x<xmin then
+ xmin=x
+ end
+ end
+ local function ymoveto()
+ if keepcurve then
+ r=r+1
+ result[r]={ x,y,"m" }
+ end
+ if not checked then
+ xmin=x
+ ymin=y
+ xmax=x
+ ymax=y
+ checked=true
+ elseif y>ymax then
+ ymax=y
+ elseif y<ymin then
+ ymin=y
+ end
+ end
+ local function moveto()
+ if trace_charstrings then
+ showstate("moveto")
+ end
+ top=0
+ xymoveto()
+ end
+ local function xylineto()
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
+ if x>xmax then xmax=x elseif x<xmin then xmin=x end
+ if y>ymax then ymax=y elseif y<ymin then ymin=y end
else
xmin=x
ymin=y
@@ -9243,14 +10434,51 @@ do
checked=true
end
end
- local function curveto(x1,y1,x2,y2,x3,y3)
+ local function xlineto()
+ if keepcurve then
+ r=r+1
+ result[r]={ x,y,"l" }
+ end
+ if not checked then
+ xmin=x
+ ymin=y
+ xmax=x
+ ymax=y
+ checked=true
+ elseif x>xmax then
+ xmax=x
+ elseif x<xmin then
+ xmin=x
+ end
+ end
+ local function ylineto()
+ if keepcurve then
+ r=r+1
+ result[r]={ x,y,"l" }
+ end
+ if not checked then
+ xmin=x
+ ymin=y
+ xmax=x
+ ymax=y
+ checked=true
+ elseif y>ymax then
+ ymax=y
+ elseif y<ymin then
+ ymin=y
+ end
+ end
+ local function xycurveto(x1,y1,x2,y2,x3,y3)
+ if trace_charstrings then
+ showstate("curveto")
+ end
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
+ if x1>xmax then xmax=x1 elseif x1<xmin then xmin=x1 end
+ if y1>ymax then ymax=y1 elseif y1<ymin then ymin=y1 end
else
xmin=x1
ymin=y1
@@ -9258,21 +10486,21 @@ do
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
+ if x2>xmax then xmax=x2 elseif x2<xmin then xmin=x2 end
+ if y2>ymax then ymax=y2 elseif y2<ymin then ymin=y2 end
+ if x3>xmax then xmax=x3 elseif x3<xmin then xmin=x3 end
+ if y3>ymax then ymax=y3 elseif y3<ymin then ymin=y3 end
end
local function rmoveto()
- if top>2 then
- if not width then
+ if not width then
+ if top>2 then
width=stack[1]
if trace_charstrings then
- showvalue("width",width)
+ showvalue("backtrack width",width)
end
+ else
+ width=true
end
- elseif not width then
- width=true
end
if trace_charstrings then
showstate("rmoveto")
@@ -9280,43 +10508,43 @@ do
x=x+stack[top-1]
y=y+stack[top]
top=0
- moveto(x,y)
+ xymoveto()
end
local function hmoveto()
- if top>1 then
- if not width then
+ if not width then
+ if top>1 then
width=stack[1]
if trace_charstrings then
- showvalue("width",width)
+ showvalue("backtrack width",width)
end
+ else
+ width=true
end
- elseif not width then
- width=true
end
if trace_charstrings then
showstate("hmoveto")
end
x=x+stack[top]
top=0
- moveto(x,y)
+ xmoveto()
end
local function vmoveto()
- if top>1 then
- if not width then
+ if not width then
+ if top>1 then
width=stack[1]
if trace_charstrings then
- showvalue("width",width)
+ showvalue("backtrack width",width)
end
+ else
+ width=true
end
- elseif not width then
- width=true
end
if trace_charstrings then
showstate("vmoveto")
end
y=y+stack[top]
top=0
- moveto(x,y)
+ ymoveto()
end
local function rlineto()
if trace_charstrings then
@@ -9325,20 +10553,7 @@ do
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)
+ xylineto()
end
top=0
end
@@ -9346,13 +10561,47 @@ do
if trace_charstrings then
showstate("hlineto")
end
- xlineto(true)
+ if top==1 then
+ x=x+stack[1]
+ xlineto()
+ else
+ local swap=true
+ for i=1,top do
+ if swap then
+ x=x+stack[i]
+ xlineto()
+ swap=false
+ else
+ y=y+stack[i]
+ ylineto()
+ swap=true
+ end
+ end
+ end
+ top=0
end
local function vlineto()
if trace_charstrings then
showstate("vlineto")
end
- xlineto(false)
+ if top==1 then
+ y=y+stack[1]
+ ylineto()
+ else
+ local swap=false
+ for i=1,top do
+ if swap then
+ x=x+stack[i]
+ xlineto()
+ swap=false
+ else
+ y=y+stack[i]
+ ylineto()
+ swap=true
+ end
+ end
+ end
+ top=0
end
local function rrcurveto()
if trace_charstrings then
@@ -9363,9 +10612,9 @@ do
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)
+ x=bx+stack[i+4]
+ y=by+stack[i+5]
+ xycurveto(ax,ay,bx,by,x,y)
end
top=0
end
@@ -9375,17 +10624,17 @@ do
end
local s=1
if top%2~=0 then
- y=y+stack[1]
+ y=y+stack[1]
s=2
end
for i=s,top,4 do
- local ax=x+stack[i]
+ 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]
+ x=bx+stack[i+3]
y=by
- curveto(ax,ay,bx,by,x,y)
+ xycurveto(ax,ay,bx,by,x,y)
end
top=0
end
@@ -9396,17 +10645,17 @@ do
local s=1
local d=0
if top%2~=0 then
- d=stack[1]
+ d=stack[1]
s=2
end
for i=s,top,4 do
local ax=x+d
- local ay=y+stack[i]
+ 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)
+ y=by+stack[i+3]
+ xycurveto(ax,ay,bx,by,x,y)
d=0
end
top=0
@@ -9416,7 +10665,6 @@ do
if last then
top=top-1
end
- local sw=swap
for i=1,top,4 do
local ax,ay,bx,by
if swap then
@@ -9444,7 +10692,7 @@ do
end
swap=true
end
- curveto(ax,ay,bx,by,x,y)
+ xycurveto(ax,ay,bx,by,x,y)
end
top=0
end
@@ -9471,11 +10719,11 @@ do
local by=ay+stack[i+3]
x=bx+stack[i+4]
y=by+stack[i+5]
- curveto(ax,ay,bx,by,x,y)
+ xycurveto(ax,ay,bx,by,x,y)
end
x=x+stack[top-1]
y=y+stack[top]
- lineto(x,y)
+ xylineto()
top=0
end
local function rlinecurve()
@@ -9486,7 +10734,7 @@ do
for i=1,top-6,2 do
x=x+stack[i]
y=y+stack[i+1]
- lineto(x,y)
+ xylineto()
end
end
local ax=x+stack[top-5]
@@ -9495,7 +10743,7 @@ do
local by=ay+stack[top-2]
x=bx+stack[top-1]
y=by+stack[top]
- curveto(ax,ay,bx,by,x,y)
+ xycurveto(ax,ay,bx,by,x,y)
top=0
end
local function flex()
@@ -9508,33 +10756,33 @@ do
local by=ay+stack[4]
local cx=bx+stack[5]
local cy=by+stack[6]
- curveto(ax,ay,bx,by,cx,cy)
+ xycurveto(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)
+ xycurveto(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 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)
+ xycurveto(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)
+ xycurveto(dx,dy,ex,ey,x,y)
top=0
end
local function hflex1()
@@ -9547,13 +10795,13 @@ do
local by=ay+stack[4]
local cx=bx+stack[5]
local cy=by
- curveto(ax,ay,bx,by,cx,cy)
+ xycurveto(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)
+ xycurveto(dx,dy,ex,ey,x,y)
top=0
end
local function flex1()
@@ -9566,7 +10814,7 @@ do
local by=ay+stack[4]
local cx=bx+stack[5]
local cy=by+stack[6]
- curveto(ax,ay,bx,by,cx,cy)
+ xycurveto(ax,ay,bx,by,cx,cy)
local dx=cx+stack[7]
local dy=cy+stack[8]
local ex=dx+stack[9]
@@ -9576,7 +10824,7 @@ do
else
y=ey+stack[11]
end
- curveto(dx,dy,ex,ey,x,y)
+ xycurveto(dx,dy,ex,ey,x,y)
top=0
end
local function getstem()
@@ -9623,12 +10871,180 @@ do
return floor((stems+7)/8)
end
end
- local function unsupported()
+ local function unsupported(t)
+ if trace_charstrings then
+ showstate("unsupported "..t)
+ end
+ top=0
+ end
+ local function unsupportedsub(t)
if trace_charstrings then
- showstate("unsupported")
+ showstate("unsupported sub "..t)
+ end
+ top=0
+ end
+ local function getstem3()
+ if trace_charstrings then
+ showstate("stem3")
+ end
+ top=0
+ end
+ local function divide()
+ if version==1 then
+ local d=stack[top]
+ top=top-1
+ stack[top]=stack[top]/d
+ end
+ end
+ local function closepath()
+ if version==1 then
+ if trace_charstrings then
+ showstate("closepath")
+ end
+ end
+ top=0
+ end
+ local function hsbw()
+ if version==1 then
+ if trace_charstrings then
+ showstate("dotsection")
+ end
+ width=stack[top]
end
top=0
end
+ local function seac()
+ if version==1 then
+ if trace_charstrings then
+ showstate("seac")
+ end
+ end
+ top=0
+ end
+ local function sbw()
+ if version==1 then
+ if trace_charstrings then
+ showstate("sbw")
+ end
+ width=stack[top-1]
+ end
+ top=0
+ end
+ local function callothersubr()
+ if version==1 then
+ if trace_charstrings then
+ showstate("callothersubr (unsupported)")
+ end
+ end
+ top=0
+ end
+ local function pop()
+ if version==1 then
+ if trace_charstrings then
+ showstate("pop (unsupported)")
+ end
+ top=top+1
+ stack[top]=0
+ else
+ top=0
+ end
+ end
+ local function setcurrentpoint()
+ if version==1 then
+ if trace_charstrings then
+ showstate("pop (unsupported)")
+ end
+ x=x+stack[top-1]
+ y=y+stack[top]
+ end
+ top=0
+ end
+ local reginit=false
+ local function updateregions(n)
+ if regions then
+ local current=regions[n] or regions[1]
+ nofregions=#current
+ if axis and n~=reginit then
+ factors={}
+ for i=1,nofregions do
+ local region=current[i]
+ local s=1
+ for j=1,#axis do
+ local f=axis[j]
+ local r=region[j]
+ local start=r.start
+ local peak=r.peak
+ local stop=r.stop
+ if start>peak or peak>stop then
+ elseif start<0 and stop>0 and peak~=0 then
+ elseif peak==0 then
+ elseif f<start or f>stop then
+ s=0
+ break
+ elseif f<peak then
+ s=s*(f-start)/(peak-start)
+ elseif f>peak then
+ s=s*(stop-f)/(stop-peak)
+ else
+ end
+ end
+ factors[i]=s
+ end
+ end
+ end
+ reginit=n
+ end
+ local function setvsindex()
+ local vsindex=stack[top]
+ if trace_charstrings then
+ showstate(formatters["vsindex %i"](vsindex))
+ end
+ updateregions(vsindex)
+ top=top-1
+ end
+ local function blend()
+ local n=stack[top]
+ top=top-1
+ if axis then
+ if trace_charstrings then
+ local t=top-nofregions*n
+ local m=t-n
+ for i=1,n do
+ local k=m+i
+ local d=m+n+(i-1)*nofregions
+ local old=stack[k]
+ local new=old
+ for r=1,nofregions do
+ new=new+stack[d+r]*factors[r]
+ end
+ stack[k]=new
+ showstate(formatters["blend %i of %i: %s -> %s"](i,n,old,new))
+ end
+ top=t
+ elseif n==1 then
+ top=top-nofregions
+ local v=stack[top]
+ for r=1,nofregions do
+ v=v+stack[top+r]*factors[r]
+ end
+ stack[top]=v
+ else
+ top=top-nofregions*n
+ local d=top
+ local k=top-n
+ for i=1,n do
+ k=k+1
+ local v=stack[k]
+ for r=1,nofregions do
+ v=v+stack[d+r]*factors[r]
+ end
+ stack[k]=v
+ d=d+nofregions
+ end
+ end
+ else
+ end
+ end
local actions={ [0]=unsupported,
getstem,
unsupported,
@@ -9642,10 +11058,10 @@ do
unsupported,
unsupported,
unsupported,
+ hsbw,
unsupported,
- unsupported,
- unsupported,
- unsupported,
+ setvsindex,
+ blend,
unsupported,
getstem,
getmask,
@@ -9663,75 +11079,158 @@ do
hvcurveto,
}
local subactions={
+ [000]=dotsection,
+ [001]=getstem3,
+ [002]=getstem3,
+ [006]=seac,
+ [007]=sbw,
+ [012]=divide,
+ [016]=callothersubr,
+ [017]=pop,
+ [033]=setcurrentpoint,
[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)
+ local c_endchar=char(14)
+ local passon do
+ local rshift=bit32.rshift
+ local band=bit32.band
+ local round=math.round
+ local encode=table.setmetatableindex(function(t,i)
+ for i=-2048,-1130 do
+ t[i]=char(28,band(rshift(i,8),0xFF),band(i,0xFF))
+ end
+ for i=-1131,-108 do
+ local v=0xFB00-i-108
+ t[i]=char(band(rshift(v,8),0xFF),band(v,0xFF))
+ end
+ for i=-107,107 do
+ t[i]=char(i+139)
+ end
+ for i=108,1131 do
+ local v=0xF700+i-108
+ t[i]=char(band(rshift(v,8),0xFF),band(v,0xFF))
+ end
+ for i=1132,2048 do
+ t[i]=char(28,band(rshift(i,8),0xFF),band(i,0xFF))
+ end
+ return t[i]
+ end)
+ local function setvsindex()
+ local vsindex=stack[top]
+ updateregions(vsindex)
+ top=top-1
end
- local str=list[index]
- if str then
- if type(str)=="string" then
- str=lpegmatch(p_bytes,str)
- list[index]=str
+ local function blend()
+ local n=stack[top]
+ top=top-1
+ if not axis then
+ elseif n==1 then
+ top=top-nofregions
+ local v=stack[top]
+ for r=1,nofregions do
+ v=v+stack[top+r]*factors[r]
+ end
+ stack[top]=round(v)
+ else
+ top=top-nofregions*n
+ local d=top
+ local k=top-n
+ for i=1,n do
+ k=k+1
+ local v=stack[k]
+ for r=1,nofregions do
+ v=v+stack[d+r]*factors[r]
+ end
+ stack[k]=round(v)
+ d=d+nofregions
+ end
end
- depth=depth+1
- process(str)
- depth=depth-1
+ end
+ passon=function(operation)
+ if operation==15 then
+ setvsindex()
+ elseif operation==16 then
+ blend()
+ else
+ for i=1,top do
+ r=r+1
+ result[r]=encode[stack[i]]
+ end
+ r=r+1
+ result[r]=char(operation)
+ top=0
+ end
+ end
+ end
+ local process
+ local function call(scope,list,bias)
+ depth=depth+1
+ if top==0 then
+ showstate(formatters["unknown %s call"](scope))
+ top=0
else
- report("unknown %s %i",scope,index)
+ local index=stack[top]+bias
+ top=top-1
+ if trace_charstrings then
+ showvalue(scope,index,true)
+ end
+ local tab=list[index]
+ if tab then
+ process(tab)
+ else
+ showstate(formatters["unknown %s call %i"](scope,index))
+ top=0
+ end
end
+ depth=depth-1
end
- local function process(tab)
+ local justpass=false
+ process=function(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
+ if t>=32 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
+ if t<=246 then
+ stack[top]=t-139
+ i=i+1
+ elseif t<=250 then
+ stack[top]=t*256-63124+tab[i+1]
+ i=i+2
+ elseif t<=254 then
+ stack[top]=-t*256+64148-tab[i+1]
+ i=i+2
+ else
+ local n=0x100*tab[i+1]+tab[i+2]
+ if n>=0x8000 then
+ stack[top]=n-0x10000+(0x100*tab[i+3]+tab[i+4])/0xFFFF
+ else
+ stack[top]=n+(0x100*tab[i+3]+tab[i+4])/0xFFFF
+ end
+ i=i+5
+ end
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
+ stack[top]=n-0x10000
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
+ elseif t==11 then
if trace_charstrings then
showstate("return")
end
return
elseif t==10 then
- call("local",locals,localbias,process)
+ call("local",locals,localbias)
i=i+1
- elseif t==14 then
+ elseif t==14 then
if width then
elseif top>0 then
width=stack[1]
@@ -9746,14 +11245,14 @@ do
end
return
elseif t==29 then
- call("global",globals,globalbias,process)
+ call("global",globals,globalbias)
i=i+1
elseif t==12 then
i=i+1
local t=tab[i]
local a=subactions[t]
if a then
- a()
+ a(t)
else
if trace_charstrings then
showvalue("<subaction>",t)
@@ -9761,112 +11260,49 @@ do
top=0
end
i=i+1
+ elseif justpass then
+ passon(t)
+ i=i+1
else
local a=actions[t]
if a then
- local s=a()
+ local s=a(t)
if s then
- i=i+s
+ i=i+s+1
+ else
+ i=i+1
end
else
if trace_charstrings then
showvalue("<action>",t)
end
top=0
+ i=i+1
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
+ local function setbias(globals,locals)
+ if version==1 then
+ return
+ false,
+ false
+ else
+ local g,l=#globals,#locals
+ return
+ ((g<1240 and 107) or (g<33900 and 1131) or 32768)+1,
+ ((l<1240 and 107) or (l<33900 and 1131) or 32768)+1
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)
+ local function processshape(tab,index)
+ tab=bytetable(tab)
x=0
y=0
width=false
r=0
top=0
stems=0
- result={}
+ result={}
xmin=0
xmax=0
ymin=0
@@ -9874,26 +11310,35 @@ do
checked=false
if trace_charstrings then
report("glyph: %i",index)
- report("data: % t",tab)
+ report("data : % t",tab)
+ end
+ if regions then
+ updateregions(vsindex)
end
process(tab)
- local boundingbox={ xmin,ymin,xmax,ymax }
+ local boundingbox={
+ round(xmin),
+ round(ymin),
+ round(xmax),
+ round(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
+ if justpass then
+ r=r+1
+ result[r]=c_endchar
+ local stream=concat(result)
+ if glyph then
+ glyph.stream=stream
+ else
+ glyphs[index]={ stream=stream }
+ end
+ elseif glyph then
+ glyph.segments=keepcurve~=false and result or nil
glyph.boundingbox=boundingbox
if not glyph.width then
glyph.width=width
@@ -9901,23 +11346,93 @@ index=index-1
if charset and not glyph.name then
glyph.name=charset[index]
end
+ elseif keepcurve then
+ glyphs[index]={
+ segments=result,
+ boundingbox=boundingbox,
+ width=width,
+ name=charset and charset[index] or nil,
+ }
+ else
+ glyphs[index]={
+ boundingbox=boundingbox,
+ width=width,
+ name=charset and charset[index] or nil,
+ }
end
if trace_charstrings then
- report("width: %s",tostring(width))
+ report("width : %s",tostring(width))
report("boundingbox: % t",boundingbox)
end
- return charstring
end
- resetcharstrings=function()
+ startparsing=function(fontdata,data,streams)
+ reginit=false
+ axis=false
+ regions=data.regions
+ justpass=streams==true
+ if regions then
+ regions={ regions }
+ axis=data.factors or false
+ end
+ end
+ stopparsing=function(fontdata,data)
+ stack={}
+ glyphs=false
result={}
top=0
- stack={}
+ locals=false
+ globals=false
+ strings=false
+ end
+ local function setwidths(private)
+ if not private then
+ return 0,0
+ end
+ local privatedata=private.data
+ if not privatedata then
+ return 0,0
+ end
+ return privatedata.nominalwidthx or 0,privatedata.defaultwidthx or 0
+ end
+ parsecharstrings=function(fontdata,data,glphs,doshapes,tversion,streams)
+ local dictionary=data.dictionaries[1]
+ local charstrings=dictionary.charstrings
+ keepcurve=doshapes
+ version=tversion
+ strings=data.strings
+ globals=data.routines or {}
+ locals=dictionary.subroutines or {}
+ charset=dictionary.charset
+ vsindex=dictionary.vsindex or 0
+ glyphs=glphs or {}
+ globalbias,localbias=setbias(globals,locals)
+ nominalwidth,defaultwidth=setwidths(dictionary.private)
+ startparsing(fontdata,data,streams)
+ for index=1,#charstrings do
+ processshape(charstrings[index],index-1)
+ charstrings[index]=nil
+ end
+ stopparsing(fontdata,data)
+ return glyphs
+ end
+ parsecharstring=function(fontdata,data,dictionary,tab,glphs,index,doshapes,tversion)
+ keepcurve=doshapes
+ version=tversion
+ strings=data.strings
+ globals=data.routines or {}
+ locals=dictionary.subroutines or {}
+ charset=false
+ vsindex=dictionary.vsindex or 0
+ glyphs=glphs or {}
+ globalbias,localbias=setbias(globals,locals)
+ nominalwidth,defaultwidth=setwidths(dictionary.private)
+ processshape(tab,index-1)
end
end
local function readglobals(f,data)
local routines=readlengths(f)
for i=1,#routines do
- routines[i]=readstring(f,routines[i])
+ routines[i]=readbytetable(f,routines[i])
end
data.routines=routines
end
@@ -9929,7 +11444,7 @@ local function readcharsets(f,data,dictionary)
local strings=data.strings
local nofglyphs=data.nofglyphs
local charsetoffset=dictionary.charset
- if charsetoffset~=0 then
+ if charsetoffset and charsetoffset~=0 then
setposition(f,header.offset+charsetoffset)
local format=readbyte(f)
local charset={ [0]=".notdef" }
@@ -9955,6 +11470,9 @@ local function readcharsets(f,data,dictionary)
else
report("cff parser: unsupported charset format %a",format)
end
+ else
+ dictionary.nocharset=true
+ dictionary.charset=nil
end
end
local function readprivates(f,data)
@@ -9975,7 +11493,7 @@ local function readlocals(f,data,dictionary)
setposition(f,header.offset+private.offset+subroutineoffset)
local subroutines=readlengths(f)
for i=1,#subroutines do
- subroutines[i]=readstring(f,subroutines[i])
+ subroutines[i]=readbytetable(f,subroutines[i])
end
dictionary.subroutines=subroutines
private.data.subroutines=nil
@@ -9986,15 +11504,16 @@ local function readlocals(f,data,dictionary)
dictionary.subroutines={}
end
end
-local function readcharstrings(f,data)
+local function readcharstrings(f,data,what)
local header=data.header
local dictionaries=data.dictionaries
local dictionary=dictionaries[1]
- local type=dictionary.charstringtype
+ local stringtype=dictionary.charstringtype
local offset=dictionary.charstrings
- if type==2 then
+ if type(offset)~="number" then
+ elseif stringtype==2 then
setposition(f,header.offset+offset)
- local charstrings=readlengths(f)
+ local charstrings=readlengths(f,what=="cff2")
local nofglyphs=#charstrings
for i=1,nofglyphs do
charstrings[i]=readstring(f,charstrings[i])
@@ -10002,7 +11521,7 @@ local function readcharstrings(f,data)
data.nofglyphs=nofglyphs
dictionary.charstrings=charstrings
else
- report("unsupported charstr type %i",type)
+ report("unsupported charstr type %i",stringtype)
data.nofglyphs=0
dictionary.charstrings={}
end
@@ -10020,28 +11539,36 @@ local function readcidprivates(f,data)
end
parseprivates(data,dictionaries)
end
-local function readnoselect(f,data,glyphs,doshapes)
+readers.parsecharstrings=parsecharstrings
+local function readnoselect(f,fontdata,data,glyphs,doshapes,version,streams)
local dictionaries=data.dictionaries
local dictionary=dictionaries[1]
readglobals(f,data)
- readcharstrings(f,data)
- readencodings(f,data)
- readcharsets(f,data,dictionary)
+ readcharstrings(f,data,version)
+ if version=="cff2" then
+ dictionary.charset=nil
+ else
+ readencodings(f,data)
+ readcharsets(f,data,dictionary)
+ end
readprivates(f,data)
parseprivates(data,data.dictionaries)
readlocals(f,data,dictionary)
- parsecharstrings(data,glyphs,doshapes)
- resetcharstrings()
+ startparsing(fontdata,data,streams)
+ parsecharstrings(fontdata,data,glyphs,doshapes,version,streams)
+ stopparsing(fontdata,data)
end
-local function readfdselect(f,data,glyphs,doshapes)
+local function readfdselect(f,fontdata,data,glyphs,doshapes,version,streams)
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)
+ readcharstrings(f,data,version)
+ if version~="cff2" then
+ readencodings(f,data)
+ end
local charstrings=dictionary.charstrings
local fdindex={}
local nofglyphs=data.nofglyphs
@@ -10090,68 +11617,133 @@ local function readfdselect(f,data,glyphs,doshapes)
for i=1,#dictionaries do
readlocals(f,data,dictionaries[i])
end
+ startparsing(fontdata,data,streams)
for i=1,#charstrings do
- parsecharstring(data,dictionaries[fdindex[i]+1],charstrings[i],glyphs,i,doshapes)
+ parsecharstring(fontdata,data,dictionaries[fdindex[i]+1],charstrings[i],glyphs,i,doshapes,version)
+ charstrings[i]=nil
end
- resetcharstrings()
+ stopparsing(fontdata,data)
end
end
+local gotodatatable=readers.helpers.gotodatatable
+local function cleanup(data,dictionaries)
+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
+ local tableoffset=gotodatatable(f,fontdata,"cff",specification.details)
+ if tableoffset then
+ local header=readheader(f)
+ if header.major~=1 then
+ report("only version %s is supported for table %a",1,"cff")
+ return
+ end
+ local glyphs=fontdata.glyphs
+ 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,dictionaries,"cff")
+ local dic=dictionaries[1]
+ local cid=dic.cid
+ fontdata.cffinfo={
+ familynamename=dic.familyname,
+ fullname=dic.fullname,
+ boundingbox=dic.boundingbox,
+ weight=dic.weight,
+ italicangle=dic.italicangle,
+ underlineposition=dic.underlineposition,
+ underlinethickness=dic.underlinethickness,
+ monospaced=dic.monospaced,
+ }
+ fontdata.cidinfo=cid and {
+ registry=cid.registry,
+ ordering=cid.ordering,
+ supplement=cid.supplement,
+ }
+ if specification.glyphs then
+ local all=specification.shapes or false
+ if cid and cid.fdselect then
+ readfdselect(f,fontdata,data,glyphs,all,"cff")
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
+ readnoselect(f,fontdata,data,glyphs,all,"cff")
end
end
+ cleanup(data,dictionaries)
+ end
+end
+function readers.cff2(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"cff2",specification.glyphs)
+ if tableoffset then
+ local header=readheader(f)
+ if header.major~=2 then
+ report("only version %s is supported for table %a",2,"cff2")
+ return
+ end
+ local glyphs=fontdata.glyphs
+ local dictionaries={ readstring(f,header.dsize) }
+ local data={
+ header=header,
+ dictionaries=dictionaries,
+ nofglyphs=fontdata.nofglyphs,
+ }
+ parsedictionaries(data,dictionaries,"cff2")
+ local offset=dictionaries[1].vstore
+ if offset>0 then
+ local storeoffset=dictionaries[1].vstore+data.header.offset+2
+ local regions,deltas=readers.helpers.readvariationdata(f,storeoffset,factors)
+ data.regions=regions
+ data.deltas=deltas
+ else
+ data.regions={}
+ data.deltas={}
+ end
+ data.factors=specification.factors
+ local cid=data.dictionaries[1].cid
+ local all=specification.shapes or false
+ if cid and cid.fdselect then
+ readfdselect(f,fontdata,data,glyphs,all,"cff2",specification.streams)
+ else
+ readnoselect(f,fontdata,data,glyphs,all,"cff2",specification.streams)
+ end
+ cleanup(data,dictionaries)
+ end
+end
+function readers.cffcheck(filename)
+ local f=io.open(filename,"rb")
+ if f then
+ local fontdata={
+ glyphs={},
+ }
+ local header=readheader(f)
+ if header.major~=1 then
+ report("only version %s is supported for table %a",1,"cff")
+ return
+ end
+ local names=readfontnames(f)
+ local dictionaries=readtopdictionaries(f)
+ local strings=readstrings(f)
+ local glyphs={}
+ local data={
+ header=header,
+ names=names,
+ dictionaries=dictionaries,
+ strings=strings,
+ glyphs=glyphs,
+ nofglyphs=4,
+ }
+ parsedictionaries(data,dictionaries,"cff")
+ local cid=data.dictionaries[1].cid
+ if cid and cid.fdselect then
+ readfdselect(f,fontdata,data,glyphs,false)
+ else
+ readnoselect(f,fontdata,data,glyphs,false)
+ end
+ return data
end
end
@@ -10167,9 +11759,12 @@ if not modules then modules={} end modules ['font-ttf']={
license="see context related readme files"
}
local next,type,unpack=next,type,unpack
-local bittest=bit32.btest
-local sqrt=math.sqrt
+local bittest,band,rshift=bit32.btest,bit32.band,bit32.rshift
+local sqrt,round=math.sqrt,math.round
+local char=string.char
+local concat=table.concat
local report=logs.reporter("otf reader","ttf")
+local trace_deltas=false
local readers=fonts.handlers.otf.readers
local streamreader=readers.streamreader
local setposition=streamreader.setposition
@@ -10181,22 +11776,30 @@ local readulong=streamreader.readcardinal4
local readchar=streamreader.readinteger1
local readshort=streamreader.readinteger2
local read2dot14=streamreader.read2dot14
+local readinteger=streamreader.readinteger1
+local helpers=readers.helpers
+local gotodatatable=helpers.gotodatatable
local function mergecomposites(glyphs,shapes)
local function merge(index,shape,components)
local contours={}
+ local points={}
local nofcontours=0
+ local nofpoints=0
+ local offset=0
+ local deltas=shape.deltas
for i=1,#components do
local component=components[i]
local subindex=component.index
local subshape=shapes[subindex]
local subcontours=subshape.contours
+ local subpoints=subshape.points
if not subcontours then
local subcomponents=subshape.components
if subcomponents then
- subcontours=merge(subindex,subshape,subcomponents)
+ subcontours,subpoints=merge(subindex,subshape,subcomponents)
end
end
- if subcontours then
+ if subpoints then
local matrix=component.matrix
local xscale=matrix[1]
local xrotate=matrix[2]
@@ -10204,35 +11807,38 @@ local function mergecomposites(glyphs,shapes)
local yscale=matrix[4]
local xoffset=matrix[5]
local yoffset=matrix[6]
+ for i=1,#subpoints do
+ local p=subpoints[i]
+ local x=p[1]
+ local y=p[2]
+ nofpoints=nofpoints+1
+ points[nofpoints]={
+ xscale*x+xrotate*y+xoffset,
+ yscale*y+yrotate*x+yoffset,
+ p[3]
+ }
+ end
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
+ contours[nofcontours]=offset+subcontours[i]
end
+ offset=offset+#subpoints
else
report("missing contours composite %s, component %s of %s, glyph %s",index,i,#components,subindex)
end
end
+ shape.points=points
shape.contours=contours
shape.components=nil
- return contours
+ return contours,points
end
for index=1,#glyphs do
local shape=shapes[index]
- local components=shape.components
- if components then
- merge(index,shape,components)
+ if shape then
+ local components=shape.components
+ if components then
+ merge(index,shape,components)
+ end
end
end
end
@@ -10242,123 +11848,510 @@ local function readnothing(f,nofcontours)
}
end
local function curveto(m_x,m_y,l_x,l_y,r_x,r_y)
- return {
+ 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"
- }
+ r_x,r_y,"c"
+end
+local function applyaxis(glyph,shape,deltas,dowidth)
+ local points=shape.points
+ if points then
+ local nofpoints=#points
+ local h=nofpoints+2
+ local l=nofpoints+1
+ local dw=0
+ local dl=0
+ for i=1,#deltas do
+ local deltaset=deltas[i]
+ local xvalues=deltaset.xvalues
+ local yvalues=deltaset.yvalues
+ local dpoints=deltaset.points
+ local factor=deltaset.factor
+ if dpoints then
+ local nofdpoints=#dpoints
+ for i=1,nofdpoints do
+ local d=dpoints[i]
+ local p=points[d]
+ if p then
+ if xvalues then
+ local x=xvalues[i]
+ if x and x~=0 then
+ p[1]=p[1]+factor*x
+ end
+ end
+ if yvalues then
+ local y=yvalues[i]
+ if y and y~=0 then
+ p[2]=p[2]+factor*y
+ end
+ end
+ elseif dowidth then
+ if d==h then
+ local x=xvalues[i]
+ if x then
+ dw=dw+factor*x
+ end
+ elseif d==l then
+ local x=xvalues[i]
+ if x then
+ dl=dl+factor*x
+ end
+ end
+ end
+ end
+ else
+ for i=1,nofpoints do
+ local p=points[i]
+ if xvalues then
+ local x=xvalues[i]
+ if x and x~=0 then
+ p[1]=p[1]+factor*x
+ end
+ end
+ if yvalues then
+ local y=yvalues[i]
+ if y and y~=0 then
+ p[2]=p[2]+factor*y
+ end
+ end
+ end
+ if dowidth then
+ local x=xvalues[h]
+ if x then
+ dw=dw+factor*x
+ end
+ local x=xvalues[l]
+ if x then
+ dl=dl+factor*x
+ end
+ end
+ end
+ end
+ if dowidth then
+ local width=glyph.width or 0
+ glyph.width=width+dw-dl
+ end
+ else
+ report("no points for glyph %a",glyph.name)
+ end
end
-local function contours2outlines(glyphs,shapes)
- local quadratic=true
+local quadratic=false
+local function contours2outlines_normal(glyphs,shapes)
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
+ if shape then
+ local glyph=glyphs[index]
+ local contours=shape.contours
+ local points=shape.points
+ if contours then
+ local nofcontours=#contours
+ local segments={}
+ local nofsegments=0
+ glyph.segments=segments
+ if nofcontours>0 then
+ local px,py=0,0
+ local first=1
+ for i=1,nofcontours do
+ local last=contours[i]
+ if last>=first then
+ local first_pt=points[first]
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
+ if first==last then
+ first_pt[3]="m"
+ nofsegments=nofsegments+1
+ segments[nofsegments]=first_pt
+ else
+ local first_on=first_pt[3]
+ local last_pt=points[last]
+ local last_on=last_pt[3]
+ local start=1
+ local control_pt=false
+ if first_on then
+ start=2
else
- first_pt={ (first_pt[1]+last_pt[1])/2,(first_pt[2]+last_pt[2])/2,false }
+ 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
- control_pt=first_pt
- end
- 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
+ local x,y=first_pt[1],first_pt[2]
+ if not done then
+ xmin,ymin,xmax,ymax=x,y,x,y
+ done=true
+ end
+ nofsegments=nofsegments+1
+ segments[nofsegments]={ x,y,"m" }
+ if not quadratic then
+ px,py=x,y
+ end
+ local previous_pt=first_pt
+ for i=first,last do
+ local current_pt=points[i]
+ local current_on=current_pt[3]
+ local previous_on=previous_pt[3]
+ if previous_on then
+ if current_on then
+ local x,y=current_pt[1],current_pt[2]
+ nofsegments=nofsegments+1
+ segments[nofsegments]={ x,y,"l" }
+ if not quadratic then
+ px,py=x,y
+ end
+ else
+ control_pt=current_pt
+ end
+ elseif current_on then
+ local x1,y1=control_pt[1],control_pt[2]
+ local x2,y2=current_pt[1],current_pt[2]
nofsegments=nofsegments+1
- segments[nofsegments]={ current_pt[1],current_pt[2],"l" }
+ if quadratic then
+ segments[nofsegments]={ x1,y1,x2,y2,"q" }
+ else
+ x1,y1,x2,y2,px,py=curveto(x1,y1,px,py,x2,y2)
+ segments[nofsegments]={ x1,y1,x2,y2,px,py,"c" }
+ end
+ control_pt=false
else
+ local x2,y2=(previous_pt[1]+current_pt[1])/2,(previous_pt[2]+current_pt[2])/2
+ local x1,y1=control_pt[1],control_pt[2]
+ nofsegments=nofsegments+1
+ if quadratic then
+ segments[nofsegments]={ x1,y1,x2,y2,"q" }
+ else
+ x1,y1,x2,y2,px,py=curveto(x1,y1,px,py,x2,y2)
+ segments[nofsegments]={ x1,y1,x2,y2,px,py,"c" }
+ end
control_pt=current_pt
end
- elseif current_on then
- local ps=segments[nofsegments]
+ previous_pt=current_pt
+ end
+ if first_pt==last_pt then
+ else
nofsegments=nofsegments+1
- if quadratic then
- segments[nofsegments]={ control_pt[1],control_pt[2],current_pt[1],current_pt[2],"q" }
+ local x2,y2=first_pt[1],first_pt[2]
+ if not control_pt then
+ segments[nofsegments]={ x2,y2,"l" }
+ elseif quadratic then
+ local x1,y1=control_pt[1],control_pt[2]
+ segments[nofsegments]={ x1,y1,x2,y2,"q" }
+ else
+ local x1,y1=control_pt[1],control_pt[2]
+ x1,y1,x2,y2,px,py=curveto(x1,y1,px,py,x2,y2)
+ segments[nofsegments]={ x1,y1,x2,y2,px,py,"c" }
+ end
+ end
+ end
+ end
+ first=last+1
+ end
+ end
+ end
+ end
+ end
+end
+local function contours2outlines_shaped(glyphs,shapes,keepcurve)
+ for index=1,#glyphs do
+ local shape=shapes[index]
+ if shape then
+ local glyph=glyphs[index]
+ local contours=shape.contours
+ local points=shape.points
+ if contours then
+ local nofcontours=#contours
+ local segments=keepcurve and {} or nil
+ local nofsegments=0
+ if keepcurve then
+ glyph.segments=segments
+ end
+ if nofcontours>0 then
+ local xmin,ymin,xmax,ymax,done=0,0,0,0,false
+ local px,py=0,0
+ local first=1
+ for i=1,nofcontours do
+ local last=contours[i]
+ if last>=first then
+ local first_pt=points[first]
+ local first_on=first_pt[3]
+ if first==last then
+ if keepcurve then
+ first_pt[3]="m"
+ nofsegments=nofsegments+1
+ segments[nofsegments]=first_pt
+ end
+ else
+ local first_on=first_pt[3]
+ local last_pt=points[last]
+ 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
- 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])
+ first_pt={ (first_pt[1]+last_pt[1])/2,(first_pt[2]+last_pt[2])/2,false }
end
- control_pt=false
+ control_pt=first_pt
+ end
+ local x,y=first_pt[1],first_pt[2]
+ if not done then
+ xmin,ymin,xmax,ymax=x,y,x,y
+ done=true
else
+ 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
+ if keepcurve then
nofsegments=nofsegments+1
- local halfway_x=(previous_pt[1]+current_pt[1])/2
- local halfway_y=(previous_pt[2]+current_pt[2])/2
+ segments[nofsegments]={ x,y,"m" }
+ end
+ if not quadratic then
+ px,py=x,y
+ end
+ local previous_pt=first_pt
+ for i=first,last do
+ local current_pt=points[i]
+ local current_on=current_pt[3]
+ local previous_on=previous_pt[3]
+ if previous_on then
+ if current_on then
+ local x,y=current_pt[1],current_pt[2]
+ 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
+ if keepcurve then
+ nofsegments=nofsegments+1
+ segments[nofsegments]={ x,y,"l" }
+ end
+ if not quadratic then
+ px,py=x,y
+ end
+ else
+ control_pt=current_pt
+ end
+ elseif current_on then
+ local x1,y1=control_pt[1],control_pt[2]
+ local x2,y2=current_pt[1],current_pt[2]
+ if quadratic 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
+ if keepcurve then
+ nofsegments=nofsegments+1
+ segments[nofsegments]={ x1,y1,x2,y2,"q" }
+ end
+ else
+ x1,y1,x2,y2,px,py=curveto(x1,y1,px,py,x2,y2)
+ 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
+ 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 px<xmin then xmin=px elseif px>xmax then xmax=px end
+ if py<ymin then ymin=py elseif py>ymax then ymax=py end
+ if keepcurve then
+ nofsegments=nofsegments+1
+ segments[nofsegments]={ x1,y1,x2,y2,px,py,"c" }
+ end
+ end
+ control_pt=false
+ else
+ local x2,y2=(previous_pt[1]+current_pt[1])/2,(previous_pt[2]+current_pt[2])/2
+ local x1,y1=control_pt[1],control_pt[2]
+ if quadratic 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
+ if keepcurve then
+ nofsegments=nofsegments+1
+ segments[nofsegments]={ x1,y1,x2,y2,"q" }
+ end
+ else
+ x1,y1,x2,y2,px,py=curveto(x1,y1,px,py,x2,y2)
+ 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
+ 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 px<xmin then xmin=px elseif px>xmax then xmax=px end
+ if py<ymin then ymin=py elseif py>ymax then ymax=py end
+ if keepcurve then
+ nofsegments=nofsegments+1
+ segments[nofsegments]={ x1,y1,x2,y2,px,py,"c" }
+ end
+ end
+ control_pt=current_pt
+ end
+ previous_pt=current_pt
+ end
+ if first_pt==last_pt then
+ elseif not control_pt then
+ if keepcurve then
+ nofsegments=nofsegments+1
+ segments[nofsegments]={ first_pt[1],first_pt[2],"l" }
+ end
+ else
+ local x1,y1=control_pt[1],control_pt[2]
+ local x2,y2=first_pt[1],first_pt[2]
+ 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
if quadratic then
- segments[nofsegments]={ control_pt[1],control_pt[2],halfway_x,halfway_y,"q" }
+ if keepcurve then
+ nofsegments=nofsegments+1
+ segments[nofsegments]={ x1,y1,x2,y2,"q" }
+ end
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)
+ x1,y1,x2,y2,px,py=curveto(x1,y1,px,py,x2,y2)
+ 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 px<xmin then xmin=px elseif px>xmax then xmax=px end
+ if py<ymin then ymin=py elseif py>ymax then ymax=py end
+ if keepcurve then
+ nofsegments=nofsegments+1
+ segments[nofsegments]={ x1,y1,x2,y2,px,py,"c" }
+ end
end
- control_pt=current_pt
end
- previous_pt=current_pt
end
- if first_pt==last_pt then
+ end
+ first=last+1
+ end
+ glyph.boundingbox={ round(xmin),round(ymin),round(xmax),round(ymax) }
+ end
+ end
+ end
+ end
+end
+local c_zero=char(0)
+local s_zero=char(0,0)
+local function toushort(n)
+ return char(band(rshift(n,8),0xFF),band(n,0xFF))
+end
+local function toshort(n)
+ if n<0 then
+ n=n+0x10000
+ end
+ return char(band(rshift(n,8),0xFF),band(n,0xFF))
+end
+local function repackpoints(glyphs,shapes)
+ local noboundingbox={ 0,0,0,0 }
+ local result={}
+ for index=1,#glyphs do
+ local shape=shapes[index]
+ if shape then
+ local r=0
+ local glyph=glyphs[index]
+ if false then
+ else
+ local contours=shape.contours
+ local nofcontours=contours and #contours or 0
+ local boundingbox=glyph.boundingbox or noboundingbox
+ r=r+1 result[r]=toshort(nofcontours)
+ r=r+1 result[r]=toshort(boundingbox[1])
+ r=r+1 result[r]=toshort(boundingbox[2])
+ r=r+1 result[r]=toshort(boundingbox[3])
+ r=r+1 result[r]=toshort(boundingbox[4])
+ if nofcontours>0 then
+ for i=1,nofcontours do
+ r=r+1 result[r]=toshort(contours[i]-1)
+ end
+ r=r+1 result[r]=s_zero
+ local points=shape.points
+ local currentx=0
+ local currenty=0
+ local xpoints={}
+ local ypoints={}
+ local x=0
+ local y=0
+ local lastflag=nil
+ local nofflags=0
+ for i=1,#points do
+ local pt=points[i]
+ local px=pt[1]
+ local py=pt[2]
+ local fl=pt[3] and 0x01 or 0x00
+ if px==currentx then
+ fl=fl+0x10
+ else
+ local dx=round(px-currentx)
+ if dx<-255 or dx>255 then
+ x=x+1 xpoints[x]=toshort(dx)
+ elseif dx<0 then
+ fl=fl+0x02
+ x=x+1 xpoints[x]=char(-dx)
+ elseif dx>0 then
+ fl=fl+0x12
+ x=x+1 xpoints[x]=char(dx)
else
- 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
+ fl=fl+0x02
+ x=x+1 xpoints[x]=c_zero
end
end
+ if py==currenty then
+ fl=fl+0x20
+ else
+ local dy=round(py-currenty)
+ if dy<-255 or dy>255 then
+ y=y+1 ypoints[y]=toshort(dy)
+ elseif dy<0 then
+ fl=fl+0x04
+ y=y+1 ypoints[y]=char(-dy)
+ elseif dy>0 then
+ fl=fl+0x24
+ y=y+1 ypoints[y]=char(dy)
+ else
+ fl=fl+0x04
+ y=y+1 ypoints[y]=c_zero
+ end
+ end
+ currentx=px
+ currenty=py
+ if lastflag==fl then
+ nofflags=nofflags+1
+ else
+ if nofflags==1 then
+ r=r+1 result[r]=char(lastflag)
+ elseif nofflags==2 then
+ r=r+1 result[r]=char(lastflag,lastflag)
+ elseif nofflags>2 then
+ lastflag=lastflag+0x08
+ r=r+1 result[r]=char(lastflag,nofflags-1)
+ end
+ nofflags=1
+ lastflag=fl
+ end
+ end
+ if nofflags==1 then
+ r=r+1 result[r]=char(lastflag)
+ elseif nofflags==2 then
+ r=r+1 result[r]=char(lastflag,lastflag)
+ elseif nofflags>2 then
+ lastflag=lastflag+0x08
+ r=r+1 result[r]=char(lastflag,nofflags-1)
end
+ r=r+1 result[r]=concat(xpoints)
+ r=r+1 result[r]=concat(ypoints)
end
end
+ glyph.stream=concat(result,"",1,r)
+ else
end
end
end
-local function readglyph(f,nofcontours)
+local function readglyph(f,nofcontours)
local points={}
- local endpoints={}
+ local contours={}
local instructions={}
local flags={}
for i=1,nofcontours do
- endpoints[i]=readshort(f)+1
+ contours[i]=readshort(f)+1
end
- local nofpoints=endpoints[nofcontours]
+ local nofpoints=contours[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
+ if bittest(flag,0x08) then
for j=1,readbyte(f) do
i=i+1
flags[i]=flag
@@ -10369,8 +12362,8 @@ local function readglyph(f,nofcontours)
local x=0
for i=1,nofpoints do
local flag=flags[i]
- local short=bittest(flag,0x0002)
- local same=bittest(flag,0x0010)
+ local short=bittest(flag,0x02)
+ local same=bittest(flag,0x10)
if short then
if same then
x=x+readbyte(f)
@@ -10381,13 +12374,13 @@ local function readglyph(f,nofcontours)
else
x=x+readshort(f)
end
- points[i]={ x,y,bittest(flag,0x0001) }
+ points[i]={ x,0,bittest(flag,0x01) }
end
local y=0
for i=1,nofpoints do
local flag=flags[i]
- local short=bittest(flag,0x0004)
- local same=bittest(flag,0x0020)
+ local short=bittest(flag,0x04)
+ local same=bittest(flag,0x20)
if short then
if same then
y=y+readbyte(f)
@@ -10400,15 +12393,11 @@ local function readglyph(f,nofcontours)
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,
+ points=points,
+ contours=contours,
+ nofpoints=nofpoints,
}
end
local function readcomposite(f)
@@ -10499,15 +12488,13 @@ function readers.loca(f,fontdata,specification)
local locations={}
setposition(f,datatable.offset)
if format==1 then
- local nofglyphs=datatable.length/4-1
- -1
+ local nofglyphs=datatable.length/4-2
for i=0,nofglyphs do
locations[i]=offset+readulong(f)
end
fontdata.nofglyphs=nofglyphs
else
- local nofglyphs=datatable.length/2-1
- -1
+ local nofglyphs=datatable.length/2-2
for i=0,nofglyphs do
locations[i]=offset+readushort(f)*2
end
@@ -10518,53 +12505,317 @@ function readers.loca(f,fontdata,specification)
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)
+ local tableoffset=gotodatatable(f,fontdata,"glyf",specification.glyphs)
+ if tableoffset 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 or specification.instance
+ 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
+ shapes[index]=readcomposite(f,nofcontours)
+ end
+ else
+ if loadshapes then
+ shapes[index]={}
+ end
+ glyphs[index].boundingbox=nothing
+ end
+ end
+ if loadshapes then
+ if readers.gvar then
+ readers.gvar(f,fontdata,specification,glyphs,shapes)
+ end
+ mergecomposites(glyphs,shapes)
+ if specification.instance then
+ if specification.streams then
+ repackpoints(glyphs,shapes)
+ else
+ contours2outlines_shaped(glyphs,shapes,specification.shapes)
+ end
+ elseif specification.shapes then
+ contours2outlines_normal(glyphs,shapes)
+ end
+ end
+ end
+ end
+end
+local function readtuplerecord(f,nofaxis)
+ local record={}
+ for i=1,nofaxis do
+ record[i]=read2dot14(f)
+ end
+ return record
+end
+local function readpoints(f)
+ local count=readbyte(f)
+ if count==0 then
+ return nil,0
+ else
+ if count<128 then
+ elseif bittest(count,0x80) then
+ count=band(count,0x7F)*256+readbyte(f)
+ else
+ end
+ local points={}
+ local p=0
+ local n=1
+ while p<count do
+ local control=readbyte(f)
+ local runreader=bittest(control,0x80) and readushort or readbyte
+ local runlength=band(control,0x7F)
+ for i=1,runlength+1 do
+ n=n+runreader(f)
+ p=p+1
+ points[p]=n
+ end
+ end
+ return points,p
+ end
+end
+local function readdeltas(f,nofpoints)
+ local deltas={}
+ local p=0
+ local z=0
+ while nofpoints>0 do
+ local control=readbyte(f)
+if not control then
+ break
+end
+ local allzero=bittest(control,0x80)
+ local runlength=band(control,0x3F)+1
+ if allzero then
+ z=z+runlength
+ else
+ local runreader=bittest(control,0x40) and readshort or readinteger
+ if z>0 then
+ for i=1,z do
+ p=p+1
+ deltas[p]=0
+ end
+ z=0
+ end
+ for i=1,runlength do
+ p=p+1
+ deltas[p]=runreader(f)
+ end
+ end
+ nofpoints=nofpoints-runlength
+ end
+ if p>0 then
+ return deltas
+ else
+ end
+end
+local function readdeltas(f,nofpoints)
+ local deltas={}
+ local p=0
+ while nofpoints>0 do
+ local control=readbyte(f)
+ if control then
+ local allzero=bittest(control,0x80)
+ local runlength=band(control,0x3F)+1
+ if allzero then
+ for i=1,runlength do
+ p=p+1
+ deltas[p]=0
+ end
+ else
+ local runreader=bittest(control,0x40) and readshort or readinteger
+ for i=1,runlength do
+ p=p+1
+ deltas[p]=runreader(f)
+ end
+ end
+ nofpoints=nofpoints-runlength
+ else
+ break
+ end
+ end
+ if p>0 then
+ return deltas
+ else
+ end
+end
+function readers.gvar(f,fontdata,specification,glyphdata,shapedata)
+ local instance=specification.instance
+ if not instance then
+ return
+ end
+ local factors=specification.factors
+ if not factors then
+ return
+ end
+ local tableoffset=gotodatatable(f,fontdata,"gvar",specification.variable or specification.shapes)
+ if tableoffset then
+ local version=readulong(f)
+ local nofaxis=readushort(f)
+ local noftuples=readushort(f)
+ local tupleoffset=tableoffset+readulong(f)
+ local nofglyphs=readushort(f)
+ local flags=readushort(f)
+ local dataoffset=tableoffset+readulong(f)
+ local data={}
+ local tuples={}
+ local glyphdata=fontdata.glyphs
+ local dowidth=not fontdata.variabledata.hvarwidths
+ if bittest(flags,0x0001) then
+ for i=1,nofglyphs+1 do
+ data[i]=dataoffset+readulong(f)
+ end
+ else
+ for i=1,nofglyphs+1 do
+ data[i]=dataoffset+2*readushort(f)
+ end
+ end
+ if noftuples>0 then
+ setposition(f,tupleoffset)
+ for i=1,noftuples do
+ tuples[i]=readtuplerecord(f,nofaxis)
+ end
+ end
+ local nextoffset=false
+ local startoffset=data[1]
+ for i=1,nofglyphs do
+ nextoffset=data[i+1]
+ local glyph=glyphdata[i-1]
+ local name=trace_deltas and glyph.name
+ if startoffset==nextoffset then
+ if name then
+ report("no deltas for glyph %a",name)
+ end
+ else
+ local shape=shapedata[i-1]
+ if not shape then
+ if name then
+ report("no shape for glyph %a",name)
+ end
+ else
+ lastoffset=startoffset
+ setposition(f,startoffset)
+ local flags=readushort(f)
+ local count=band(flags,0x0FFF)
+ local offset=startoffset+readushort(f)
+ local deltas={}
+ local allpoints=(shape.nofpoints or 0)
+ local shared=false
+ local nofshared=0
+ if bittest(flags,0x8000) then
+ local current=getposition(f)
+ setposition(f,offset)
+ shared,nofshared=readpoints(f)
+ offset=getposition(f)
+ setposition(f,current)
+ end
+ for j=1,count do
+ local size=readushort(f)
+ local flags=readushort(f)
+ local index=band(flags,0x0FFF)
+ local haspeak=bittest(flags,0x8000)
+ local intermediate=bittest(flags,0x4000)
+ local private=bittest(flags,0x2000)
+ local peak=nil
+ local start=nil
+ local stop=nil
+ local xvalues=nil
+ local yvalues=nil
+ local points=shared
+ local nofpoints=nofshared
+ if haspeak then
+ peak=readtuplerecord(f,nofaxis)
else
- shapes[index]=readcomposite(f,nofcontours)
+ if index+1>#tuples then
+ report("error, bad tuple index",index)
+ end
+ peak=tuples[index+1]
end
- else
- if loadshapes then
- shapes[index]={}
+ if intermediate then
+ start=readtuplerecord(f,nofaxis)
+ stop=readtuplerecord(f,nofaxis)
+ end
+ if size>0 then
+ local current=getposition(f)
+ setposition(f,offset)
+ if private then
+ points,nofpoints=readpoints(f)
+ end
+ if nofpoints==0 then
+ nofpoints=allpoints+4
+ end
+ if nofpoints>0 then
+ xvalues=readdeltas(f,nofpoints)
+ yvalues=readdeltas(f,nofpoints)
+ end
+ offset=offset+size
+ setposition(f,current)
+ end
+ if not xvalues and not yvalues then
+ points=nil
+ end
+ local s=1
+ for i=1,nofaxis do
+ local f=factors[i]
+ local peak=peak and peak [i] or 0
+ local start=start and start[i] or (peak<0 and peak or 0)
+ local stop=stop and stop [i] or (peak>0 and peak or 0)
+ if start>peak or peak>stop then
+ elseif start<0 and stop>0 and peak~=0 then
+ elseif peak==0 then
+ elseif f<start or f>stop then
+ s=0
+ break
+ elseif f<peak then
+ s=s*(f-start)/(peak-start)
+ elseif f>peak then
+ s=s*(stop-f)/(stop-peak)
+ else
+ end
+ end
+ if s==0 then
+ if name then
+ report("no deltas applied for glyph %a",name)
+ end
+ else
+ deltas[#deltas+1]={
+ factor=s,
+ points=points,
+ xvalues=xvalues,
+ yvalues=yvalues,
+ }
end
- glyphs[index].boundingbox=nothing
end
- end
- if loadshapes then
- mergecomposites(glyphs,shapes)
- contours2outlines(glyphs,shapes)
+ if shape.type=="glyph" then
+ applyaxis(glyph,shape,deltas,dowidth)
+ else
+ shape.deltas=deltas
+ end
end
end
+ startoffset=nextoffset
end
end
end
@@ -10582,13 +12833,23 @@ if not modules then modules={} end modules ['font-dsp']={
}
local next,type=next,type
local bittest=bit32.btest
+local band=bit32.band
+local extract=bit32.extract
+local bor=bit32.bor
+local lshift=bit32.lshift
local rshift=bit32.rshift
-local concat=table.concat
+local gsub=string.gsub
local lower=string.lower
local sub=string.sub
local strip=string.strip
local tohash=table.tohash
+local concat=table.concat
+local copy=table.copy
local reversed=table.reversed
+local sort=table.sort
+local insert=table.insert
+local round=math.round
+local lpegmatch=lpeg.match
local setmetatableindex=table.setmetatableindex
local formatters=string.formatters
local sortedkeys=table.sortedkeys
@@ -10597,16 +12858,28 @@ 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 getposition=streamreader.getposition
local readushort=streamreader.readcardinal2
local readulong=streamreader.readcardinal4
+local readinteger=streamreader.readinteger1
local readshort=streamreader.readinteger2
-local readfword=readshort
local readstring=streamreader.readstring
local readtag=streamreader.readtag
+local readbytes=streamreader.readbytes
+local readfixed=streamreader.readfixed4
+local read2dot14=streamreader.read2dot14
+local skipshort=streamreader.skipshort
+local skipbytes=streamreader.skip
+local readfword=readshort
+local readbytetable=streamreader.readbytetable
+local readbyte=streamreader.readbyte
local gsubhandlers={}
local gposhandlers={}
+readers.gsubhandlers=gsubhandlers
+readers.gposhandlers=gposhandlers
+local helpers=readers.helpers
+local gotodatatable=helpers.gotodatatable
+local setvariabledata=helpers.setvariabledata
local lookupidoffset=-1
local classes={
"base",
@@ -10640,6 +12913,51 @@ local chaindirections={
chainedcontext=1,
reversechainedcontextsingle=-1,
}
+local function setmetrics(data,where,tag,d)
+ local w=data[where]
+ if w then
+ local v=w[tag]
+ if v then
+ w[tag]=v+d
+ end
+ end
+end
+local variabletags={
+ hasc=function(data,d) setmetrics(data,"windowsmetrics","typoascender",d) end,
+ hdsc=function(data,d) setmetrics(data,"windowsmetrics","typodescender",d) end,
+ hlgp=function(data,d) setmetrics(data,"windowsmetrics","typolinegap",d) end,
+ hcla=function(data,d) setmetrics(data,"windowsmetrics","winascent",d) end,
+ hcld=function(data,d) setmetrics(data,"windowsmetrics","windescent",d) end,
+ vasc=function(data,d) setmetrics(data,"vhea not done","ascent",d) end,
+ vdsc=function(data,d) setmetrics(data,"vhea not done","descent",d) end,
+ vlgp=function(data,d) setmetrics(data,"vhea not done","linegap",d) end,
+ xhgt=function(data,d) setmetrics(data,"windowsmetrics","xheight",d) end,
+ cpht=function(data,d) setmetrics(data,"windowsmetrics","capheight",d) end,
+ sbxs=function(data,d) setmetrics(data,"windowsmetrics","subscriptxsize",d) end,
+ sbys=function(data,d) setmetrics(data,"windowsmetrics","subscriptysize",d) end,
+ sbxo=function(data,d) setmetrics(data,"windowsmetrics","subscriptxoffset",d) end,
+ sbyo=function(data,d) setmetrics(data,"windowsmetrics","subscriptyoffset",d) end,
+ spxs=function(data,d) setmetrics(data,"windowsmetrics","superscriptxsize",d) end,
+ spys=function(data,d) setmetrics(data,"windowsmetrics","superscriptysize",d) end,
+ spxo=function(data,d) setmetrics(data,"windowsmetrics","superscriptxoffset",d) end,
+ spyo=function(data,d) setmetrics(data,"windowsmetrics","superscriptyoffset",d) end,
+ strs=function(data,d) setmetrics(data,"windowsmetrics","strikeoutsize",d) end,
+ stro=function(data,d) setmetrics(data,"windowsmetrics","strikeoutpos",d) end,
+ unds=function(data,d) setmetrics(data,"postscript","underlineposition",d) end,
+ undo=function(data,d) setmetrics(data,"postscript","underlinethickness",d) end,
+}
+local read_cardinal={
+ streamreader.readcardinal1,
+ streamreader.readcardinal2,
+ streamreader.readcardinal3,
+ streamreader.readcardinal4,
+}
+local read_integer={
+ streamreader.readinteger1,
+ streamreader.readinteger2,
+ streamreader.readinteger3,
+ streamreader.readinteger4,
+}
local lookupnames={
gsub={
single="gsub_single",
@@ -10671,6 +12989,213 @@ local lookupflags=setmetatableindex(function(t,k)
t[k]=v
return v
end)
+local pattern=lpeg.Cf (
+ lpeg.Ct("")*lpeg.Cg (
+ lpeg.C((lpeg.R("az","09")+lpeg.P(" "))^1)*lpeg.S(" :=")*(lpeg.patterns.number/tonumber)*lpeg.S(" ,")^0
+ )^1,rawset
+)
+local hash=table.setmetatableindex(function(t,k)
+ local v=lpegmatch(pattern,k)
+ local t={}
+ for k,v in sortedhash(v) do
+ t[#t+1]=k.."="..v
+ end
+ v=concat(t,",")
+ t[k]=v
+ return v
+end)
+helpers.normalizedaxishash=hash
+local cleanname=fonts.names and fonts.names.cleanname or function(name)
+ return name and (gsub(lower(name),"[^%a%d]","")) or nil
+end
+helpers.cleanname=cleanname
+function helpers.normalizedaxis(str)
+ return hash[str] or str
+end
+local function axistofactors(str)
+ return lpegmatch(pattern,str)
+end
+local function getaxisscale(segments,minimum,default,maximum,user)
+ if not minimum or not default or not maximum then
+ return false
+ end
+ if user<minimum then
+ user=minimum
+ elseif user>maximum then
+ user=maximum
+ end
+ if user<default then
+ default=- (default-user)/(default-minimum)
+ elseif user>default then
+ default=(user-default)/(maximum-default)
+ else
+ default=0
+ end
+ if not segments then
+ return default
+ end
+ local e
+ for i=1,#segments do
+ local s=segments[i]
+ if type(s)~="number" then
+ report("using default axis scale")
+ return default
+ elseif s[1]>=default then
+ if s[2]==default then
+ return default
+ else
+ e=i
+ break
+ end
+ end
+ end
+ if e then
+ local b=segments[e-1]
+ local e=segments[e]
+ return b[2]+(e[2]-b[2])*(default-b[1])/(e[1]-b[1])
+ else
+ return false
+ end
+end
+local function getfactors(data,instancespec)
+ if instancespec==true then
+ elseif type(instancespec)~="string" or instancespec=="" then
+ return
+ end
+ local variabledata=data.variabledata
+ if not variabledata then
+ return
+ end
+ local instances=variabledata.instances
+ local axis=variabledata.axis
+ local segments=variabledata.segments
+ if instances and axis then
+ local values
+ if instancespec==true then
+ values={}
+ for i=1,#axis do
+ values[i]={
+ value=axis[i].default,
+ }
+ end
+ else
+ for i=1,#instances do
+ local instance=instances[i]
+ if cleanname(instance.subfamily)==instancespec then
+ values=instance.values
+ break
+ end
+ end
+ end
+ if values then
+ local factors={}
+ for i=1,#axis do
+ local a=axis[i]
+ factors[i]=getaxisscale(segments,a.minimum,a.default,a.maximum,values[i].value)
+ end
+ return factors
+ end
+ local values=axistofactors(hash[instancespec] or instancespec)
+ if values then
+ local factors={}
+ for i=1,#axis do
+ local a=axis[i]
+ local d=a.default
+ factors[i]=getaxisscale(segments,a.minimum,d,a.maximum,values[a.name or a.tag] or d)
+ end
+ return factors
+ end
+ end
+end
+local function getscales(regions,factors)
+ local scales={}
+ for i=1,#regions do
+ local region=regions[i]
+ local s=1
+ for j=1,#region do
+ local axis=region[j]
+ local f=factors[j]
+ local start=axis.start
+ local peak=axis.peak
+ local stop=axis.stop
+ if start>peak or peak>stop then
+ elseif start<0 and stop>0 and peak~=0 then
+ elseif peak==0 then
+ elseif f<start or f>stop then
+ s=0
+ break
+ elseif f<peak then
+ s=s*(f-start)/(peak-start)
+ elseif f>peak then
+ s=s*(stop-f)/(stop-peak)
+ else
+ end
+ end
+ scales[i]=s
+ end
+ return scales
+end
+helpers.getaxisscale=getaxisscale
+helpers.getfactors=getfactors
+helpers.getscales=getscales
+helpers.axistofactors=axistofactors
+local function readvariationdata(f,storeoffset,factors)
+ local position=getposition(f)
+ setposition(f,storeoffset)
+ local format=readushort(f)
+ local regionoffset=storeoffset+readulong(f)
+ local nofdeltadata=readushort(f)
+ local deltadata={}
+ for i=1,nofdeltadata do
+ deltadata[i]=readulong(f)
+ end
+ setposition(f,regionoffset)
+ local nofaxis=readushort(f)
+ local nofregions=readushort(f)
+ local regions={}
+ for i=1,nofregions do
+ local t={}
+ for i=1,nofaxis do
+ t[i]={
+ start=read2dot14(f),
+ peak=read2dot14(f),
+ stop=read2dot14(f),
+ }
+ end
+ regions[i]=t
+ end
+ if factors then
+ for i=1,nofdeltadata do
+ setposition(f,storeoffset+deltadata[i])
+ local nofdeltasets=readushort(f)
+ local nofshorts=readushort(f)
+ local nofregions=readushort(f)
+ local usedregions={}
+ local deltas={}
+ for i=1,nofregions do
+ usedregions[i]=regions[readushort(f)+1]
+ end
+ for i=1,nofdeltasets do
+ local t={}
+ for i=1,nofshorts do
+ t[i]=readshort(f)
+ end
+ for i=nofshorts+1,nofregions do
+ t[i]=readinteger(f)
+ end
+ deltas[i]=t
+ end
+ deltadata[i]={
+ regions=usedregions,
+ deltas=deltas,
+ scales=factors and getscales(usedregions,factors) or nil,
+ }
+ end
+ end
+ setposition(f,position)
+ return regions,deltadata
+end
+helpers.readvariationdata=readvariationdata
local function readcoverage(f,offset,simple)
setposition(f,offset)
local coverageformat=readushort(f)
@@ -10710,10 +13235,15 @@ local function readcoverage(f,offset,simple)
end
return coverage
end
-local function readclassdef(f,offset)
+local function readclassdef(f,offset,preset)
setposition(f,offset)
local classdefformat=readushort(f)
local classdef={}
+ if type(preset)=="number" then
+ for k=0,preset-1 do
+ classdef[k]=1
+ end
+ end
if classdefformat==1 then
local index=readushort(f)
local nofclassdef=readushort(f)
@@ -10735,6 +13265,13 @@ local function readclassdef(f,offset)
else
report("unknown classdef format %a ",classdefformat)
end
+ if type(preset)=="table" then
+ for k in next,preset do
+ if not classdef[k] then
+ classdef[k]=1
+ end
+ end
+ end
return classdef
end
local function classtocoverage(defs)
@@ -10751,34 +13288,150 @@ local function classtocoverage(defs)
return list
end
end
-local function readposition(f,format)
+local skips={ [0]=0,
+ 1,
+ 1,
+ 2,
+ 1,
+ 2,
+ 2,
+ 3,
+ 2,
+ 2,
+ 3,
+ 2,
+ 3,
+ 3,
+ 4,
+}
+local function readvariation(f,offset)
+ local p=getposition(f)
+ setposition(f,offset)
+ local outer=readushort(f)
+ local inner=readushort(f)
+ local format=readushort(f)
+ setposition(f,p)
+ if format==0x8000 then
+ return outer,inner
+ end
+end
+local function readposition(f,format,mainoffset,getdelta)
if format==0 then
- return nil
+ return
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
+ if format==0x04 then
+ local h=readshort(f)
+ if h==0 then
+ return
+ else
+ return { 0,0,h,0 }
+ end
+ end
+ if format==0x05 then
+ local x=readshort(f)
+ local h=readshort(f)
+ if x==0 and h==0 then
+ return
+ else
+ return { x,0,h,0 }
+ end
+ end
+ if format==0x44 then
+ local h=readshort(f)
+ if getdelta then
+ local d=readshort(f)
+ if d>0 then
+ local outer,inner=readvariation(f,mainoffset+d)
+ if outer then
+ h=h+getdelta(outer,inner)
+ end
+ end
+ else
+ skipshort(f,1)
+ end
+ if h==0 then
+ return
+ else
+ return { 0,0,h,0 }
+ end
+ end
+ local x=bittest(format,0x01) and readshort(f) or 0
+ local y=bittest(format,0x02) and readshort(f) or 0
+ local h=bittest(format,0x04) and readshort(f) or 0
+ local v=bittest(format,0x08) and readshort(f) or 0
+ if format>=0x10 then
+ local X=bittest(format,0x10) and skipshort(f) or 0
+ local Y=bittest(format,0x20) and skipshort(f) or 0
+ local H=bittest(format,0x40) and skipshort(f) or 0
+ local V=bittest(format,0x80) and skipshort(f) or 0
+ local s=skips[extract(format,4,4)]
+ if s>0 then
+ skipshort(f,s)
+ end
+ if getdelta then
+ if X>0 then
+ local outer,inner=readvariation(f,mainoffset+X)
+ if outer then
+ x=x+getdelta(outer,inner)
+ end
+ end
+ if Y>0 then
+ local outer,inner=readvariation(f,mainoffset+Y)
+ if outer then
+ y=y+getdelta(outer,inner)
+ end
+ end
+ if H>0 then
+ local outer,inner=readvariation(f,mainoffset+H)
+ if outer then
+ h=h+getdelta(outer,inner)
+ end
+ end
+ if V>0 then
+ local outer,inner=readvariation(f,mainoffset+V)
+ if outer then
+ v=v+getdelta(outer,inner)
+ end
+ end
+ end
+ return { x,y,h,v }
+ elseif x==0 and y==0 and h==0 and v==0 then
+ return
else
return { x,y,h,v }
end
end
-local function readanchor(f,offset)
+local function readanchor(f,offset,getdelta)
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
+ local format=readshort(f)
+ local x=readshort(f)
+ local y=readshort(f)
+ if format==3 then
+ if getdelta then
+ local X=readshort(f)
+ local Y=readshort(f)
+ if X>0 then
+ local outer,inner=readvariation(f,offset+X)
+ if outer then
+ x=x+getdelta(outer,inner)
+ end
+ end
+ if Y>0 then
+ local outer,inner=readvariation(f,offset+Y)
+ if outer then
+ y=y+getdelta(outer,inner)
+ end
+ end
+ else
+ skipshort(f,2)
+ end
+ return { x,y }
+ else
+ return { x,y }
end
- return { readshort(f),readshort(f) }
end
local function readfirst(f,offset)
if offset then
@@ -10834,6 +13487,31 @@ local function covered(subset,all)
end
return used
end
+local function readlookuparray(f,noflookups,nofcurrent)
+ local lookups={}
+ if noflookups>0 then
+ local length=0
+ for i=1,noflookups do
+ local index=readushort(f)+1
+ if index>length then
+ length=index
+ end
+ local lookup=readushort(f)+1
+ local list=lookups[index]
+ if list then
+ list[#list+1]=lookup
+ else
+ lookups[index]={ lookup }
+ end
+ end
+ for index=1,length do
+ if not lookups[index] then
+ lookups[index]=false
+ end
+ end
+ end
+ return lookups
+end
local function unchainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,what)
local tableoffset=lookupoffset+offset
setposition(f,tableoffset)
@@ -10858,10 +13536,7 @@ local function unchainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,n
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
+ local lookups=readlookuparray(f,noflookups,nofcurrent)
rules[#rules+1]={
current=current,
lookups=lookups
@@ -10883,7 +13558,7 @@ local function unchainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,n
local rules={}
if subclasssets then
coverage=readcoverage(f,tableoffset+coverage)
- currentclassdef=readclassdef(f,tableoffset+currentclassdef)
+ currentclassdef=readclassdef(f,tableoffset+currentclassdef,coverage)
local currentclasses=classtocoverage(currentclassdef,fontdata.glyphs)
for class=1,#subclasssets do
local offset=subclasssets[class]
@@ -10902,10 +13577,7 @@ local function unchainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,n
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
+ local lookups=readlookuparray(f,noflookups,nofcurrent)
rules[#rules+1]={
current=current,
lookups=lookups
@@ -10929,10 +13601,7 @@ local function unchainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,n
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
+ local lookups=readlookuparray(f,noflookups,#current)
current=readcoveragearray(f,tableoffset,current,true)
return {
format="coverage",
@@ -10987,10 +13656,7 @@ local function chainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nof
end
end
local noflookups=readushort(f)
- local lookups={}
- for i=1,noflookups do
- lookups[readushort(f)+1]=readushort(f)+1
- end
+ local lookups=readlookuparray(f,noflookups,nofcurrent)
rules[#rules+1]={
before=before,
current=current,
@@ -11016,9 +13682,9 @@ local function chainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nof
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 beforeclassdef=readclassdef(f,tableoffset+beforeclassdef,nofglyphs)
+ local currentclassdef=readclassdef(f,tableoffset+currentclassdef,coverage)
+ local afterclassdef=readclassdef(f,tableoffset+afterclassdef,nofglyphs)
local beforeclasses=classtocoverage(beforeclassdef,fontdata.glyphs)
local currentclasses=classtocoverage(currentclassdef,fontdata.glyphs)
local afterclasses=classtocoverage(afterclassdef,fontdata.glyphs)
@@ -11055,10 +13721,7 @@ local function chainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nof
end
end
local noflookups=readushort(f)
- local lookups={}
- for i=1,noflookups do
- lookups[readushort(f)+1]=readushort(f)+1
- end
+ local lookups=readlookuparray(f,noflookups,nofcurrent)
rules[#rules+1]={
before=before,
current=current,
@@ -11086,10 +13749,7 @@ local function chainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nof
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
+ local lookups=readlookuparray(f,noflookups,#current)
before=readcoveragearray(f,tableoffset,before,true)
current=readcoveragearray(f,tableoffset,current,true)
after=readcoveragearray(f,tableoffset,after,true)
@@ -11297,20 +13957,21 @@ function gsubhandlers.reversechainedcontextsingle(f,fontdata,lookupid,lookupoffs
report("unsupported subtype %a in %a substitution",subtype,"reversechainedcontextsingle")
end
end
-local function readpairsets(f,tableoffset,sets,format1,format2)
+local function readpairsets(f,tableoffset,sets,format1,format2,mainoffset,getdelta)
local done={}
for i=1,#sets do
local offset=sets[i]
local reused=done[offset]
if not reused then
- setposition(f,tableoffset+offset)
+ offset=tableoffset+offset
+ setposition(f,offset)
local n=readushort(f)
reused={}
for i=1,n do
reused[i]={
readushort(f),
- readposition(f,format1),
- readposition(f,format2)
+ readposition(f,format1,offset,getdelta),
+ readposition(f,format2,offset,getdelta),
}
end
done[offset]=reused
@@ -11319,14 +13980,14 @@ local function readpairsets(f,tableoffset,sets,format1,format2)
end
return sets
end
-local function readpairclasssets(f,nofclasses1,nofclasses2,format1,format2)
+local function readpairclasssets(f,nofclasses1,nofclasses2,format1,format2,mainoffset,getdelta)
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)
+ local one=readposition(f,format1,mainoffset,getdelta)
+ local two=readposition(f,format2,mainoffset,getdelta)
if one or two then
classlist2[j]={ one,two }
else
@@ -11340,25 +14001,26 @@ function gposhandlers.single(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofg
local tableoffset=lookupoffset+offset
setposition(f,tableoffset)
local subtype=readushort(f)
+ local getdelta=fontdata.temporary.getdelta
if subtype==1 then
local coverage=readushort(f)
local format=readushort(f)
- local value=readposition(f,format)
+ local value=readposition(f,format,tableoffset,getdelta)
local coverage=readcoverage(f,tableoffset+coverage)
for index,newindex in next,coverage do
coverage[index]=value
end
return {
format="pair",
- coverage=coverage
+ coverage=coverage,
}
elseif subtype==2 then
local coverage=readushort(f)
local format=readushort(f)
- local values={}
local nofvalues=readushort(f)
+ local values={}
for i=1,nofvalues do
- values[i]=readposition(f,format)
+ values[i]=readposition(f,format,tableoffset,getdelta)
end
local coverage=readcoverage(f,tableoffset+coverage)
for index,newindex in next,coverage do
@@ -11366,7 +14028,7 @@ function gposhandlers.single(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofg
end
return {
format="pair",
- coverage=coverage
+ coverage=coverage,
}
else
report("unsupported subtype %a in %a positioning",subtype,"single")
@@ -11376,12 +14038,13 @@ function gposhandlers.pair(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofgly
local tableoffset=lookupoffset+offset
setposition(f,tableoffset)
local subtype=readushort(f)
+ local getdelta=fontdata.temporary.getdelta
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)
+ sets=readpairsets(f,tableoffset,sets,format1,format2,mainoffset,getdelta)
coverage=readcoverage(f,tableoffset+coverage)
for index,newindex in next,coverage do
local set=sets[newindex+1]
@@ -11403,7 +14066,7 @@ function gposhandlers.pair(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofgly
end
return {
format="pair",
- coverage=coverage
+ coverage=coverage,
}
elseif subtype==2 then
local coverage=readushort(f)
@@ -11413,10 +14076,10 @@ function gposhandlers.pair(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofgly
local classdef2=readushort(f)
local nofclasses1=readushort(f)
local nofclasses2=readushort(f)
- local classlist=readpairclasssets(f,nofclasses1,nofclasses2,format1,format2)
+ local classlist=readpairclasssets(f,nofclasses1,nofclasses2,format1,format2,tableoffset,getdelta)
coverage=readcoverage(f,tableoffset+coverage)
- classdef1=readclassdef(f,tableoffset+classdef1)
- classdef2=readclassdef(f,tableoffset+classdef2)
+ classdef1=readclassdef(f,tableoffset+classdef1,coverage)
+ classdef2=readclassdef(f,tableoffset+classdef2,nofglyphs)
local usedcoverage={}
for g1,c1 in next,classdef1 do
if coverage[g1] then
@@ -11440,7 +14103,7 @@ function gposhandlers.pair(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofgly
end
return {
format="pair",
- coverage=usedcoverage
+ coverage=usedcoverage,
}
elseif subtype==3 then
report("yet unsupported subtype %a in %a positioning",subtype,"pair")
@@ -11452,6 +14115,7 @@ function gposhandlers.cursive(f,fontdata,lookupid,lookupoffset,offset,glyphs,nof
local tableoffset=lookupoffset+offset
setposition(f,tableoffset)
local subtype=readushort(f)
+ local getdelta=fontdata.temporary.getdelta
if subtype==1 then
local coverage=tableoffset+readushort(f)
local nofrecords=readushort(f)
@@ -11469,15 +14133,15 @@ function gposhandlers.cursive(f,fontdata,lookupid,lookupoffset,offset,glyphs,nof
local r=records[i]
records[i]={
1,
- readanchor(f,r.entry) or nil,
- readanchor(f,r.exit ) or nil,
+ readanchor(f,r.entry,getdelta) or nil,
+ readanchor(f,r.exit,getdelta) or nil,
}
end
for index,newindex in next,coverage do
coverage[index]=records[newindex+1]
end
return {
- coverage=coverage
+ coverage=coverage,
}
else
report("unsupported subtype %a in %a positioning",subtype,"cursive")
@@ -11487,6 +14151,7 @@ local function handlemark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyp
local tableoffset=lookupoffset+offset
setposition(f,tableoffset)
local subtype=readushort(f)
+ local getdelta=fontdata.temporary.getdelta
if subtype==1 then
local markcoverage=tableoffset+readushort(f)
local basecoverage=tableoffset+readushort(f)
@@ -11513,7 +14178,7 @@ local function handlemark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyp
for i=1,nofmarkclasses do
local mc=markclasses[i]
if mc then
- mc[2]=readanchor(f,mc[2])
+ mc[2]=readanchor(f,mc[2],getdelta)
end
end
setposition(f,baseoffset)
@@ -11561,7 +14226,7 @@ local function handlemark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyp
local classes=components[c]
if classes then
for i=1,nofclasses do
- local anchor=readanchor(f,classes[i])
+ local anchor=readanchor(f,classes[i],getdelta)
local bclass=baseclasses[i]
local bentry=bclass[b]
if bentry then
@@ -11603,7 +14268,7 @@ local function handlemark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyp
local r=baserecords[i]
local b=basecoverage[i]
for j=1,nofclasses do
- baseclasses[j][b]=readanchor(f,r[j])
+ baseclasses[j][b]=readanchor(f,r[j],getdelta)
end
end
for index,newindex in next,markcoverage do
@@ -11639,15 +14304,39 @@ function gposhandlers.extension(f,fontdata,lookupid,lookupoffset,offset,glyphs,n
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
+ function plugins.size(f,fontdata,tableoffset,feature)
+ if fontdata.designsize then
+ else
+ local function check(offset)
+ setposition(f,offset)
+ local designsize=readushort(f)
+ if designsize>0 then
+ local fontstyleid=readushort(f)
+ local guimenuid=readushort(f)
+ local minsize=readushort(f)
+ local maxsize=readushort(f)
+ if minsize==0 and maxsize==0 and fontstyleid==0 and guimenuid==0 then
+ minsize=designsize
+ maxsize=designsize
+ end
+ if designsize>=minsize and designsize<=maxsize then
+ return minsize,maxsize,designsize
+ end
+ end
+ end
+ local minsize,maxsize,designsize=check(tableoffset+feature.offset+feature.parameters)
+ if not designsize then
+ minsize,maxsize,designsize=check(tableoffset+feature.parameters)
+ if designsize then
+ report("bad size feature in %a, falling back to wrong offset",fontdata.filename or "?")
+ else
+ report("bad size feature in %a,",fontdata.filename or "?")
+ end
+ end
+ if designsize then
+ fontdata.minsize=minsize
+ fontdata.maxsize=maxsize
fontdata.designsize=designsize
- skipshort(f,2)
- fontdata.minsize=readushort(f)
- fontdata.maxsize=readushort(f)
end
end
end
@@ -11784,7 +14473,7 @@ do
feature.parameters=parameters
local plugin=plugins[feature.tag]
if plugin then
- plugin(f,fontdata,offset,parameters)
+ plugin(f,fontdata,featureoffset,feature)
end
end
end
@@ -11798,8 +14487,8 @@ do
lookups[i]=readushort(f)
end
for lookupid=1,noflookups do
- local index=lookups[lookupid]
- setposition(f,lookupoffset+index)
+ local offset=lookups[lookupid]
+ setposition(f,lookupoffset+offset)
local subtables={}
local typebits=readushort(f)
local flagbits=readushort(f)
@@ -11807,8 +14496,7 @@ do
local lookupflags=lookupflags[flagbits]
local nofsubtables=readushort(f)
for j=1,nofsubtables do
- local offset=readushort(f)
- subtables[j]=offset+index
+ subtables[j]=offset+readushort(f)
end
local markclass=bittest(flagbits,0x0010)
if markclass then
@@ -11830,20 +14518,8 @@ do
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 function resolvelookups(f,lookupoffset,fontdata,lookups,lookuptypes,lookuphandlers,what,tableoffset)
local sequences=fontdata.sequences or {}
local sublookuplist=fontdata.sublookups or {}
fontdata.sequences=sequences
@@ -11961,6 +14637,13 @@ do
end
end
local reported={}
+ local function report_issue(i,what,sequence,kind)
+ local name=sequence.name
+ if not reported[name] then
+ report("rule %i in %s lookup %a has %s lookups",i,what,name,kind)
+ reported[name]=true
+ end
+ end
for i=lastsequence+1,nofsequences do
local sequence=sequences[i]
local steps=sequence.steps
@@ -11972,41 +14655,65 @@ 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
+ report_issue(i,what,sequence,"no")
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
+ report_issue(i,what,sequence,"empty")
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
+ local length=#rlookups
+ for index=1,length do
+ local lookuplist=rlookups[index]
+ if lookuplist then
+ local length=#lookuplist
+ local found={}
+ local noffound=0
+ for index=1,length do
+ local lookupid=lookuplist[index]
+ if lookupid then
+ local h=sublookuphash[lookupid]
+ if not h then
+ local lookup=lookups[lookupid]
+ if lookup then
+ local d=lookup.done
+ if d then
+ nofsublookups=nofsublookups+1
+ h={
+ index=nofsublookups,
+ name=f_lookupname(lookupprefix,"d",lookupid+lookupidoffset),
+ derived=true,
+ steps=d.steps,
+ nofsteps=d.nofsteps,
+ type=d.lookuptype or "gsub_single",
+ markclass=d.markclass or nil,
+ flags=d.flags,
+ }
+ sublookuplist[nofsublookups]=copy(h)
+ sublookuphash[lookupid]=nofsublookups
+ sublookupcheck[lookupid]=1
+ h=nofsublookups
+ else
+ report_issue(i,what,sequence,"missing")
+ rule.lookups=nil
+ break
+ end
+ else
+ report_issue(i,what,sequence,"bad")
+ rule.lookups=nil
+ break
+ end
+ else
+ sublookupcheck[lookupid]=sublookupcheck[lookupid]+1
+ end
+ if h then
+ noffound=noffound+1
+ found[noffound]=h
+ end
+ end
+ end
+ rlookups[index]=noffound>0 and found or false
else
- sublookupcheck[lookupid]=sublookupcheck[lookupid]+1
+ rlookups[index]=false
end
- rlookups[index]=h
end
end
end
@@ -12022,33 +14729,110 @@ do
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
+ local function loadvariations(f,fontdata,variationsoffset,lookuptypes,featurehash,featureorder)
+ setposition(f,variationsoffset)
+ local version=readulong(f)
+ local nofrecords=readulong(f)
+ local records={}
+ for i=1,nofrecords do
+ records[i]={
+ conditions=readulong(f),
+ substitutions=readulong(f),
+ }
end
- local scriptoffset,featureoffset,lookupoffset=readscriptoffsets(f,fontdata,tableoffset)
- if not scriptoffset then
- return
+ for i=1,nofrecords do
+ local record=records[i]
+ local offset=record.conditions
+ if offset==0 then
+ record.condition=nil
+ record.matchtype="always"
+ else
+ setposition(f,variationsoffset+offset)
+ local nofconditions=readushort(f)
+ local conditions={}
+ for i=1,nofconditions do
+ conditions[i]=variationsoffset+offset+readulong(f)
+ end
+ record.conditions=conditions
+ record.matchtype="condition"
+ end
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 }
+ for i=1,nofrecords do
+ local record=records[i]
+ if record.matchtype=="condition" then
+ local conditions=record.conditions
+ for i=1,#conditions do
+ setposition(f,conditions[i])
+ conditions[i]={
+ format=readushort(f),
+ axis=readushort(f),
+ minvalue=read2dot14(f),
+ maxvalue=read2dot14(f),
+ }
+ end
+ end
end
- if not lookupstoo then
- return
+ for i=1,nofrecords do
+ local record=records[i]
+ local offset=record.substitutions
+ if offset==0 then
+ record.substitutions={}
+ else
+ setposition(f,variationsoffset+offset)
+ local version=readulong(f)
+ local nofsubstitutions=readushort(f)
+ local substitutions={}
+ for i=1,nofsubstitutions do
+ substitutions[readushort(f)]=readulong(f)
+ end
+ for index,alternates in sortedhash(substitutions) do
+ if index==0 then
+ record.substitutions=false
+ else
+ local tableoffset=variationsoffset+offset+alternates
+ setposition(f,tableoffset)
+ local parameters=readulong(f)
+ local noflookups=readushort(f)
+ local lookups={}
+ for i=1,noflookups do
+ lookups[i]=readushort(f)
+ end
+ record.substitutions=lookups
+ end
+ end
+ end
end
- local lookups=readlookups(f,lookupoffset,lookuptypes,featurehash,featureorder)
- if lookups then
- resolvelookups(f,lookupoffset,fontdata,lookups,lookuptypes,lookuphandlers,what)
+ setvariabledata(fontdata,"features",records)
+ end
+ local function readscripts(f,fontdata,what,lookuptypes,lookuphandlers,lookupstoo)
+ local tableoffset=gotodatatable(f,fontdata,what,true)
+ if tableoffset then
+ local version=readulong(f)
+ local scriptoffset=tableoffset+readushort(f)
+ local featureoffset=tableoffset+readushort(f)
+ local lookupoffset=tableoffset+readushort(f)
+ local variationsoffset=version>0x00010000 and (tableoffset+readulong(f)) or 0
+ 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,tableoffset)
+ end
+ if variationsoffset>0 then
+ loadvariations(f,fontdata,variationsoffset,lookuptypes,featurehash,featureorder)
+ end
end
end
local function checkkerns(f,fontdata,specification)
@@ -12067,57 +14851,61 @@ do
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)
+ if noftables>1 then
+ report("adding global kern table as gpos feature %a",name)
+ 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
- elseif format==2 then
+ 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
- end
- local feature={ dflt={ dflt=true } }
- if not features then
- fontdata.features={ gpos={ [name]=feature } }
- elseif not gposfeatures then
- fontdata.features.gpos={ [name]=feature }
+ 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 },
+ }
else
- gposfeatures[name]=feature
+ report("ignoring empty kern table of feature %a",name)
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
function readers.gsub(f,fontdata,specification)
if specification.details then
@@ -12134,86 +14922,114 @@ do
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
+ if not specification.glyphs then
+ return
+ end
+ 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 varsetsoffset=version>=0x00010003 and (tableoffset+readulong(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=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
+ 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
- setposition(f,markclassoffset)
- local classformat=readushort(f)
- if classformat==1 then
+ 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=firstindex+readushort(f)-1
+ local lastindex=readushort(f)
+ local class=markclasses[readushort(f)]
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
+ class[index]=true
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
+ if marksetsoffset and marksetsoffset>tableoffset 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
+ local factors=specification.factors
+ if (specification.variable or factors) and varsetsoffset and varsetsoffset>tableoffset then
+ local regions,deltas=readvariationdata(f,varsetsoffset,factors)
+ if factors then
+ fontdata.temporary.getdelta=function(outer,inner)
+ local delta=deltas[outer+1]
+ if delta then
+ local d=delta.deltas[inner+1]
+ if d then
+ local scales=delta.scales
+ local dd=0
+ for i=1,#scales do
+ local di=d[i]
+ if di then
+ dd=dd+scales[i]*di
+ else
+ break
+ end
+ end
+ return round(dd)
end
end
+ return 0
end
end
end
@@ -12343,7 +15159,13 @@ local function readmathglyphinfo(f,fontdata,offset)
local function get(offset)
setposition(f,kernoffset+offset)
local n=readushort(f)
- if n>0 then
+ if n==0 then
+ local k=readmathvalue(f)
+ if k==0 then
+ else
+ return { { kern=k } }
+ end
+ else
local l={}
for i=1,n do
l[i]={ height=readmathvalue(f) }
@@ -12379,10 +15201,10 @@ local function readmathglyphinfo(f,fontdata,offset)
if next(kernset) then
local glyph=glyphs[coverage[i]]
local math=glyph.math
- if not math then
- glyph.math={ kerns=kernset }
- else
+ if math then
math.kerns=kernset
+ else
+ glyph.math={ kerns=kernset }
end
end
end
@@ -12479,29 +15301,501 @@ local function readmathvariants(f,fontdata,offset)
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
+ local tableoffset=gotodatatable(f,fontdata,"math",specification.glyphs)
+ if tableoffset then
+ local version=readulong(f)
+ 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
+function readers.colr(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"colr",specification.glyphs)
+ if tableoffset then
+ local version=readushort(f)
+ if version~=0 then
+ report("table version %a of %a is not supported (yet), maybe font %s is bad",version,"colr",fontdata.filename)
+ return
+ end
+ if not fontdata.tables.cpal then
+ report("color table %a in font %a has no mandate %a table","colr",fontdata.filename,"cpal")
+ fontdata.colorpalettes={}
+ end
+ local glyphs=fontdata.glyphs
+ local nofglyphs=readushort(f)
+ local baseoffset=readulong(f)
+ local layeroffset=readulong(f)
+ local noflayers=readushort(f)
+ local layerrecords={}
+ local maxclass=0
+ setposition(f,tableoffset+layeroffset)
+ for i=1,noflayers do
+ local slot=readushort(f)
+ local class=readushort(f)
+ if class<0xFFFF then
+ class=class+1
+ if class>maxclass then
+ maxclass=class
+ end
+ end
+ layerrecords[i]={
+ slot=slot,
+ class=class,
+ }
+ end
+ fontdata.maxcolorclass=maxclass
+ setposition(f,tableoffset+baseoffset)
+ for i=0,nofglyphs-1 do
+ local glyphindex=readushort(f)
+ local firstlayer=readushort(f)
+ local noflayers=readushort(f)
+ local t={}
+ for i=1,noflayers do
+ t[i]=layerrecords[firstlayer+i]
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)
+ glyphs[glyphindex].colors=t
+ end
+ end
+ fontdata.hascolor=true
+end
+function readers.cpal(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"cpal",specification.glyphs)
+ if tableoffset then
+ local version=readushort(f)
+ local nofpaletteentries=readushort(f)
+ local nofpalettes=readushort(f)
+ local nofcolorrecords=readushort(f)
+ local firstcoloroffset=readulong(f)
+ local colorrecords={}
+ local palettes={}
+ for i=1,nofpalettes do
+ palettes[i]=readushort(f)
+ end
+ if version==1 then
+ local palettettypesoffset=readulong(f)
+ local palettelabelsoffset=readulong(f)
+ local paletteentryoffset=readulong(f)
+ end
+ setposition(f,tableoffset+firstcoloroffset)
+ for i=1,nofcolorrecords do
+ local b,g,r,a=readbytes(f,4)
+ colorrecords[i]={
+ r,g,b,a~=255 and a or nil,
+ }
+ end
+ for i=1,nofpalettes do
+ local p={}
+ local o=palettes[i]
+ for j=1,nofpaletteentries do
+ p[j]=colorrecords[o+j]
+ end
+ palettes[i]=p
+ end
+ fontdata.colorpalettes=palettes
+ end
+end
+function readers.svg(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"svg",specification.glyphs)
+ if tableoffset then
+ local version=readushort(f)
+ local glyphs=fontdata.glyphs
+ local indexoffset=tableoffset+readulong(f)
+ local reserved=readulong(f)
+ setposition(f,indexoffset)
+ local nofentries=readushort(f)
+ local entries={}
+ for i=1,nofentries do
+ entries[i]={
+ first=readushort(f),
+ last=readushort(f),
+ offset=indexoffset+readulong(f),
+ length=readulong(f),
+ }
+ end
+ for i=1,nofentries do
+ local entry=entries[i]
+ setposition(f,entry.offset)
+ entries[i]={
+ first=entry.first,
+ last=entry.last,
+ data=readstring(f,entry.length)
+ }
+ end
+ fontdata.svgshapes=entries
+ end
+ fontdata.hascolor=true
+end
+function readers.sbix(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"sbix",specification.glyphs)
+ if tableoffset then
+ local version=readushort(f)
+ local flags=readushort(f)
+ local nofstrikes=readulong(f)
+ local strikes={}
+ local nofglyphs=fontdata.nofglyphs
+ for i=1,nofstrikes do
+ strikes[i]=readulong(f)
+ end
+ local shapes={}
+ local done=0
+ for i=1,nofstrikes do
+ local strikeoffset=strikes[i]+tableoffset
+ setposition(f,strikeoffset)
+ strikes[i]={
+ ppem=readushort(f),
+ ppi=readushort(f),
+ offset=strikeoffset
+ }
end
- if glyphinfo~=0 then
- readmathglyphinfo(f,fontdata,tableoffset+glyphinfo)
+ sort(strikes,function(a,b)
+ if b.ppem==a.ppem then
+ return b.ppi<a.ppi
+ else
+ return b.ppem<a.ppem
+ end
+ end)
+ local glyphs={}
+ for i=1,nofstrikes do
+ local strike=strikes[i]
+ local strikeppem=strike.ppem
+ local strikeppi=strike.ppi
+ local strikeoffset=strike.offset
+ setposition(f,strikeoffset)
+ for i=0,nofglyphs do
+ glyphs[i]=readulong(f)
+ end
+ local glyphoffset=glyphs[0]
+ for i=0,nofglyphs-1 do
+ local nextoffset=glyphs[i+1]
+ if not shapes[i] then
+ local datasize=nextoffset-glyphoffset
+ if datasize>0 then
+ setposition(f,strikeoffset+glyphoffset)
+ shapes[i]={
+ x=readshort(f),
+ y=readshort(f),
+ tag=readtag(f),
+ data=readstring(f,datasize-8),
+ ppem=strikeppem,
+ ppi=strikeppi,
+ }
+ done=done+1
+ if done==nofglyphs then
+ break
+ end
+ end
+ end
+ glyphoffset=nextoffset
+ end
end
- if variants~=0 then
- readmathvariants(f,fontdata,tableoffset+variants)
+ fontdata.sbixshapes=shapes
+ end
+end
+function readers.stat(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"stat",true)
+ if tableoffset then
+ local extras=fontdata.extras
+ local version=readulong(f)
+ local axissize=readushort(f)
+ local nofaxis=readushort(f)
+ local axisoffset=readulong(f)
+ local nofvalues=readushort(f)
+ local valuesoffset=readulong(f)
+ local fallbackname=extras[readushort(f)]
+ local axis={}
+ local values={}
+ setposition(f,tableoffset+axisoffset)
+ for i=1,nofaxis do
+ axis[i]={
+ tag=readtag(f),
+ name=lower(extras[readushort(f)]),
+ ordering=readushort(f),
+ variants={}
+ }
+ end
+ setposition(f,tableoffset+valuesoffset)
+ for i=1,nofvalues do
+ values[i]=readushort(f)
+ end
+ for i=1,nofvalues do
+ setposition(f,tableoffset+valuesoffset+values[i])
+ local format=readushort(f)
+ local index=readushort(f)+1
+ local flags=readushort(f)
+ local name=lower(extras[readushort(f)])
+ local value=readfixed(f)
+ local variant
+ if format==1 then
+ variant={
+ flags=flags,
+ name=name,
+ value=value,
+ }
+ elseif format==2 then
+ variant={
+ flags=flags,
+ name=name,
+ value=value,
+ minimum=readfixed(f),
+ maximum=readfixed(f),
+ }
+ elseif format==3 then
+ variant={
+ flags=flags,
+ name=name,
+ value=value,
+ link=readfixed(f),
+ }
+ end
+ insert(axis[index].variants,variant)
+ end
+ sort(axis,function(a,b)
+ return a.ordering<b.ordering
+ end)
+ for i=1,#axis do
+ local a=axis[i]
+ sort(a.variants,function(a,b)
+ return a.name<b.name
+ end)
+ a.ordering=nil
+ end
+ setvariabledata(fontdata,"designaxis",axis)
+ setvariabledata(fontdata,"fallbackname",fallbackname)
+ end
+end
+function readers.avar(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"avar",true)
+ if tableoffset then
+ local function collect()
+ local nofvalues=readushort(f)
+ local values={}
+ local lastfrom=false
+ local lastto=false
+ for i=1,nofvalues do
+ local f,t=read2dot14(f),read2dot14(f)
+ if lastfrom and f<=lastfrom then
+ elseif lastto and t>=lastto then
+ else
+ values[#values+1]={ f,t }
+ lastfrom,lastto=f,t
+ end
+ end
+ nofvalues=#values
+ if nofvalues>2 then
+ local some=values[1]
+ if some[1]==-1 and some[2]==-1 then
+ some=values[nofvalues]
+ if some[1]==1 and some[2]==1 then
+ for i=2,nofvalues-1 do
+ some=values[i]
+ if some[1]==0 and some[2]==0 then
+ return values
+ end
+ end
+ end
+ end
+ end
+ return false
+ end
+ local majorversion=readushort(f)
+ local minorversion=readushort(f)
+ local reserved=readushort(f)
+ local nofaxis=readushort(f)
+ local segments={}
+ for i=1,nofaxis do
+ segments[i]=collect()
+ end
+ setvariabledata(fontdata,"segments",segments)
+ end
+end
+function readers.fvar(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"fvar",true)
+ if tableoffset then
+ local version=readulong(f)
+ local offsettoaxis=tableoffset+readushort(f)
+ local reserved=skipshort(f)
+ local nofaxis=readushort(f)
+ local sizeofaxis=readushort(f)
+ local nofinstances=readushort(f)
+ local sizeofinstances=readushort(f)
+ local extras=fontdata.extras
+ local axis={}
+ local instances={}
+ setposition(f,offsettoaxis)
+ for i=1,nofaxis do
+ axis[i]={
+ tag=readtag(f),
+ minimum=readfixed(f),
+ default=readfixed(f),
+ maximum=readfixed(f),
+ flags=readushort(f),
+ name=lower(extras[readushort(f)] or "bad name"),
+ }
+ local n=sizeofaxis-20
+ if n>0 then
+ skipbytes(f,n)
+ elseif n<0 then
+ end
+ end
+ local nofbytes=2+2+2+nofaxis*4
+ local readpsname=nofbytes<=sizeofinstances
+ local skippable=sizeofinstances-nofbytes
+ for i=1,nofinstances do
+ local subfamid=readushort(f)
+ local flags=readushort(f)
+ local values={}
+ for i=1,nofaxis do
+ values[i]={
+ axis=axis[i].tag,
+ value=readfixed(f),
+ }
+ end
+ local psnameid=readpsname and readushort(f) or 0xFFFF
+ if subfamid==2 or subfamid==17 then
+ elseif subfamid==0xFFFF then
+ subfamid=nil
+ elseif subfamid<=256 or subfamid>=32768 then
+ subfamid=nil
+ end
+ if psnameid==6 then
+ elseif psnameid==0xFFFF then
+ psnameid=nil
+ elseif psnameid<=256 or psnameid>=32768 then
+ psnameid=nil
+ end
+ instances[i]={
+ subfamily=extras[subfamid],
+ psname=psnameid and extras[psnameid] or nil,
+ values=values,
+ }
+ if skippable>0 then
+ skipbytes(f,skippable)
+ end
+ end
+ setvariabledata(fontdata,"axis",axis)
+ setvariabledata(fontdata,"instances",instances)
+ end
+end
+function readers.hvar(f,fontdata,specification)
+ local factors=specification.factors
+ if not factors then
+ return
+ end
+ local tableoffset=gotodatatable(f,fontdata,"hvar",specification.variable)
+ if not tableoffset then
+ return
+ end
+ local version=readulong(f)
+ local variationoffset=tableoffset+readulong(f)
+ local advanceoffset=tableoffset+readulong(f)
+ local lsboffset=tableoffset+readulong(f)
+ local rsboffset=tableoffset+readulong(f)
+ local regions={}
+ local variations={}
+ local innerindex={}
+ local outerindex={}
+ if variationoffset>0 then
+ regions,deltas=readvariationdata(f,variationoffset,factors)
+ end
+ if not regions then
+ return
+ end
+ if advanceoffset>0 then
+ setposition(f,advanceoffset)
+ local format=readushort(f)
+ local mapcount=readushort(f)
+ local entrysize=rshift(band(format,0x0030),4)+1
+ local nofinnerbits=band(format,0x000F)+1
+ local innermask=lshift(1,nofinnerbits)-1
+ local readcardinal=read_cardinal[entrysize]
+ for i=0,mapcount-1 do
+ local mapdata=readcardinal(f)
+ outerindex[i]=rshift(mapdata,nofinnerbits)
+ innerindex[i]=band(mapdata,innermask)
+ end
+ setvariabledata(fontdata,"hvarwidths",true)
+ local glyphs=fontdata.glyphs
+ for i=0,fontdata.nofglyphs-1 do
+ local glyph=glyphs[i]
+ local width=glyph.width
+ if width then
+ local outer=outerindex[i] or 0
+ local inner=innerindex[i] or i
+ if outer and inner then
+ local delta=deltas[outer+1]
+ if delta then
+ local d=delta.deltas[inner+1]
+ if d then
+ local scales=delta.scales
+ local deltaw=0
+ for i=1,#scales do
+ local di=d[i]
+ if di then
+ deltaw=deltaw+scales[i]*di
+ else
+ break
+ end
+ end
+ glyph.width=width+round(deltaw)
+ end
+ end
+ end
+ end
+ end
+ end
+end
+function readers.vvar(f,fontdata,specification)
+ if not specification.variable then
+ return
+ end
+end
+function readers.mvar(f,fontdata,specification)
+ local tableoffset=gotodatatable(f,fontdata,"mvar",specification.variable)
+ if tableoffset then
+ local version=readulong(f)
+ local reserved=skipshort(f,1)
+ local recordsize=readushort(f)
+ local nofrecords=readushort(f)
+ local offsettostore=tableoffset+readushort(f)
+ local dimensions={}
+ local factors=specification.factors
+ if factors then
+ local regions,deltas=readvariationdata(f,offsettostore,factors)
+ for i=1,nofrecords do
+ local tag=readtag(f)
+ local var=variabletags[tag]
+ if var then
+ local outer=readushort(f)
+ local inner=readushort(f)
+ local delta=deltas[outer+1]
+ if delta then
+ local d=delta.deltas[inner+1]
+ if d then
+ local scales=delta.scales
+ local dd=0
+ for i=1,#scales do
+ dd=dd+scales[i]*d[i]
+ end
+ var(fontdata,round(dd))
+ end
+ end
+ else
+ skipshort(f,2)
+ end
+ if recordsize>8 then
+ skipbytes(recordsize-8)
+ end
end
end
end
@@ -12535,7 +15829,11 @@ 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 check_duplicates=true
+local check_soft_hyphen=false
+directives.register("otf.checksofthyphen",function(v)
+ check_soft_hyphen=v
+end)
local function replaced(list,index,replacement)
if type(list)=="number" then
return replacement
@@ -12603,7 +15901,7 @@ local function unifyresources(fontdata,indices)
end
end
local done={}
- local duplicates=doduplicates and resources.duplicates
+ local duplicates=check_duplicates and resources.duplicates
if duplicates and not next(duplicates) then
duplicates=false
end
@@ -12840,10 +16138,31 @@ local function unifyresources(fontdata,indices)
unifythem(resources.sublookups)
end
local function copyduplicates(fontdata)
- if doduplicates then
+ if check_duplicates then
local descriptions=fontdata.descriptions
local resources=fontdata.resources
local duplicates=resources.duplicates
+ if check_soft_hyphen then
+ local ds=descriptions[0xAD]
+ if not ds or ds.width==0 then
+ if ds then
+ descriptions[0xAD]=nil
+ report("patching soft hyphen")
+ else
+ report("adding soft hyphen")
+ end
+ if not duplicates then
+ duplicates={}
+ resources.duplicates=duplicates
+ end
+ local dh=duplicates[0x2D]
+ if dh then
+ dh[#dh+1]={ [0xAD]=true }
+ else
+ duplicates[0x2D]={ [0xAD]=true }
+ end
+ end
+ end
if duplicates then
for u,d in next,duplicates do
local du=descriptions[u]
@@ -13163,6 +16482,18 @@ local function unifyglyphs(fontdata,usenames)
end
end
end
+ local colorpalettes=resources.colorpalettes
+ if colorpalettes then
+ for index=1,#glyphs do
+ local colors=glyphs[index].colors
+ if colors then
+ for i=1,#colors do
+ local c=colors[i]
+ c.slot=indices[c.slot]
+ end
+ end
+ end
+ end
fontdata.private=private
fontdata.glyphs=nil
fontdata.names=names
@@ -13272,6 +16603,7 @@ function readers.getcomponents(fontdata)
end
end
end
+readers.unifymissing=unifymissing
function readers.rehash(fontdata,hashmethod)
if not (fontdata and fontdata.glyphs) then
return
@@ -13285,7 +16617,7 @@ function readers.rehash(fontdata,hashmethod)
copyduplicates(fontdata)
unifymissing(fontdata)
else
- fontdata.hashmethod="unicode"
+ fontdata.hashmethod="unicodes"
local indices=unifyglyphs(fontdata)
unifyresources(fontdata,indices)
copyduplicates(fontdata)
@@ -13300,10 +16632,10 @@ function readers.checkhash(fontdata)
elseif hashmethod=="names" and fontdata.names then
unifyresources(fontdata,fontdata.names)
copyduplicates(fontdata)
- fontdata.hashmethod="unicode"
+ fontdata.hashmethod="unicodes"
fontdata.names=nil
else
- readers.rehash(fontdata,"unicode")
+ readers.rehash(fontdata,"unicodes")
end
end
function readers.addunicodetable(fontdata)
@@ -13563,6 +16895,8 @@ function readers.pack(data)
local sequences=resources.sequences
local sublookups=resources.sublookups
local features=resources.features
+ local palettes=resources.colorpalettes
+ local variable=resources.variabledata
local chardata=characters and characters.data
local descriptions=data.descriptions or data.glyphs
if not descriptions then
@@ -13674,7 +17008,7 @@ function readers.pack(data)
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.replacements if r then rule.replacements=pack_flat (r) end
end
end
end
@@ -13705,6 +17039,54 @@ function readers.pack(data)
end
end
end
+ if palettes then
+ for i=1,#palettes do
+ local p=palettes[i]
+ for j=1,#p do
+ p[j]=pack_indexed(p[j])
+ end
+ end
+ end
+ if variable then
+ local instances=variable.instances
+ if instances then
+ for i=1,#instances do
+ local v=instances[i].values
+ for j=1,#v do
+ v[j]=pack_normal(v[j])
+ end
+ end
+ end
+ local function packdeltas(main)
+ if main then
+ local deltas=main.deltas
+ if deltas then
+ for i=1,#deltas do
+ local di=deltas[i]
+ local d=di.deltas
+ local r=di.regions
+ for j=1,#d do
+ d[j]=pack_indexed(d[j])
+ end
+ di.regions=pack_indexed(di.regions)
+ end
+ end
+ local regions=main.regions
+ if regions then
+ for i=1,#regions do
+ local r=regions[i]
+ for j=1,#r do
+ r[j]=pack_normal(r[j])
+ end
+ end
+ end
+ end
+ end
+ packdeltas(variable.global)
+ packdeltas(variable.horizontal)
+ packdeltas(variable.vertical)
+ packdeltas(variable.metrics)
+ end
if not success(1,pass) then
return
end
@@ -13768,7 +17150,19 @@ function readers.pack(data)
if sublookups then
packthem(sublookups)
end
- if not success(2,pass) then
+ if variable then
+ local function unpackdeltas(main)
+ if main then
+ local regions=main.regions
+ if regions then
+ main.regions=pack_normal(regions)
+ end
+ end
+ end
+ unpackdeltas(variable.global)
+ unpackdeltas(variable.horizontal)
+ unpackdeltas(variable.vertical)
+ unpackdeltas(variable.metrics)
end
end
for pass=1,2 do
@@ -13825,6 +17219,8 @@ function readers.unpack(data)
local sequences=resources.sequences
local sublookups=resources.sublookups
local features=resources.features
+ local palettes=resources.colorpalettes
+ local variable=resources.variabledata
local unpacked={}
setmetatable(unpacked,unpacked_mt)
for unicode,description in next,descriptions do
@@ -14011,7 +17407,7 @@ function readers.unpack(data)
end
local replacements=rule.replacements
if replacements then
- local tv=tables[replace]
+ local tv=tables[replacements]
if tv then
rule.replacements=tv
end
@@ -14063,6 +17459,74 @@ function readers.unpack(data)
end
end
end
+ if palettes then
+ for i=1,#palettes do
+ local p=palettes[i]
+ for j=1,#p do
+ local tv=tables[p[j]]
+ if tv then
+ p[j]=tv
+ end
+ end
+ end
+ end
+ if variable then
+ local instances=variable.instances
+ if instances then
+ for i=1,#instances do
+ local v=instances[i].values
+ for j=1,#v do
+ local tv=tables[v[j]]
+ if tv then
+ v[j]=tv
+ end
+ end
+ end
+ end
+ local function unpackdeltas(main)
+ if main then
+ local deltas=main.deltas
+ if deltas then
+ for i=1,#deltas do
+ local di=deltas[i]
+ local d=di.deltas
+ local r=di.regions
+ for j=1,#d do
+ local tv=tables[d[j]]
+ if tv then
+ d[j]=tv
+ end
+ end
+ local tv=di.regions
+ if tv then
+ di.regions=tv
+ end
+ end
+ end
+ local regions=main.regions
+ if regions then
+ local tv=tables[regions]
+ if tv then
+ main.regions=tv
+ regions=tv
+ end
+ for i=1,#regions do
+ local r=regions[i]
+ for j=1,#r do
+ local tv=tables[r[j]]
+ if tv then
+ r[j]=tv
+ end
+ end
+ end
+ end
+ end
+ end
+ unpackdeltas(variable.global)
+ unpackdeltas(variable.horizontal)
+ unpackdeltas(variable.vertical)
+ unpackdeltas(variable.metrics)
+ end
data.tables=nil
end
end
@@ -14444,14 +17908,19 @@ function readers.expand(data)
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
+ for i=1,#lookups do
+ local lookups=lookups[i]
+ 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
- else
end
end
end
@@ -14496,10 +17965,9 @@ if not modules then modules={} end modules ['font-otl']={
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 lower=string.lower
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
@@ -14516,19 +17984,22 @@ local trace_defining=false registertracker("fonts.defining",function(v) trace_de
local report_otf=logs.reporter("fonts","otf loading")
local fonts=fonts
local otf=fonts.handlers.otf
-otf.version=3.020
+otf.version=3.029
otf.cache=containers.define("fonts","otl",otf.version,true)
+otf.svgcache=containers.define("fonts","svg",otf.version,true)
+otf.sbixcache=containers.define("fonts","sbix",otf.version,true)
+otf.pdfcache=containers.define("fonts","pdf",otf.version,true)
+otf.svgenabled=false
+otf.sbixenabled=false
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 otffeatures=constructors.features.otf
local registerotffeature=otffeatures.register
-local enhancers=allocate()
-otf.enhancers=enhancers
-local patches={}
-enhancers.patches=patches
+local otfenhancers=constructors.enhancers.otf
+local registerotfenhancer=otfenhancers.register
local forceload=false
local cleanup=0
local syncspace=true
@@ -14544,86 +18015,13 @@ registerdirective("fonts.otf.loader.cleanup",function(v) cleanup=tonumber(v) or
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
- enhancer(data,filename,raw)
- else
- 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()
- 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()
- end
- 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
- end
-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
+registerotfenhancer("check extra features",function() end)
+function otf.load(filename,sub,instance)
local base=file.basename(file.removesuffix(filename))
- local name=file.removesuffix(base)
+ 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
@@ -14631,27 +18029,10 @@ function otf.load(filename,sub,featurefile)
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
+ if instance then
+ hash=hash.."-"..instance
end
+ hash=containers.cleanname(hash)
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
@@ -14661,8 +18042,39 @@ function otf.load(filename,sub,featurefile)
if reload then
report_otf("loading %a, hash %a",filename,hash)
starttiming(otfreaders)
- data=otfreaders.loadfont(filename,sub or 1)
+ data=otfreaders.loadfont(filename,sub or 1,instance)
if data then
+ local resources=data.resources
+ local svgshapes=resources.svgshapes
+ local sbixshapes=resources.sbixshapes
+ if svgshapes then
+ resources.svgshapes=nil
+ if otf.svgenabled then
+ local timestamp=os.date()
+ containers.write(otf.svgcache,hash,{
+ svgshapes=svgshapes,
+ timestamp=timestamp,
+ })
+ data.properties.svg={
+ hash=hash,
+ timestamp=timestamp,
+ }
+ end
+ end
+ if sbixshapes then
+ resources.sbixshapes=nil
+ if otf.sbixenabled then
+ local timestamp=os.date()
+ containers.write(otf.sbixcache,hash,{
+ sbixshapes=sbixshapes,
+ timestamp=timestamp,
+ })
+ data.properties.sbix={
+ hash=hash,
+ timestamp=timestamp,
+ }
+ end
+ end
otfreaders.compact(data)
otfreaders.rehash(data,"unicodes")
otfreaders.addunicodetable(data)
@@ -14675,7 +18087,7 @@ function otf.load(filename,sub,featurefile)
collectgarbage("collect")
end
stoptiming(otfreaders)
- if elapsedtime then
+ if elapsedtime then
report_otf("loading, optimizing, packing and caching time %s",elapsedtime(otfreaders))
end
if cleanup>3 then
@@ -14697,11 +18109,22 @@ function otf.load(filename,sub,featurefile)
otfreaders.unpack(data)
otfreaders.expand(data)
otfreaders.addunicodetable(data)
- enhancers.apply(data,filename,data)
+ otfenhancers.apply(data,filename,data)
if applyruntimefixes then
applyruntimefixes(filename,data)
end
data.metadata.math=data.resources.mathconstants
+ local classes=data.resources.classes
+ if not classes then
+ local descriptions=data.descriptions
+ classes=setmetatableindex(function(t,k)
+ local d=descriptions[k]
+ local v=(d and d.class or "base") or false
+ t[k]=v
+ return v
+ end)
+ data.resources.classes=classes
+ end
end
return data
end
@@ -14716,7 +18139,6 @@ end
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)
@@ -14838,13 +18260,13 @@ local function copytotfm(data,cache_id)
spaceunits,spacer=charwidth,"charwidth"
end
end
- spaceunits=tonumber(spaceunits) or 500
+ spaceunits=tonumber(spaceunits) or units/2
parameters.slant=0
- parameters.space=spaceunits
+ parameters.space=spaceunits
parameters.space_stretch=1*units/2
- parameters.space_shrink=1*units/3
- parameters.x_height=2*units/5
- parameters.quad=units
+ parameters.space_shrink=1*units/3
+ parameters.x_height=2*units/5
+ parameters.quad=units
if spaceunits<2*units/5 then
end
if italicangle and italicangle~=0 then
@@ -14897,16 +18319,45 @@ local function copytotfm(data,cache_id)
}
end
end
+local converters={
+ woff={
+ cachename="webfonts",
+ action=otf.readers.woff2otf,
+ }
+}
+local function checkconversion(specification)
+ local filename=specification.filename
+ local converter=converters[lower(file.suffix(filename))]
+ if converter then
+ local base=file.basename(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 size>0 then
+ local cleanname=containers.cleanname(name)
+ local cachename=caches.setfirstwritablefile(cleanname,converter.cachename)
+ if not io.exists(cachename) or (time~=lfs.attributes(cachename).modification) then
+ report_otf("caching font %a in %a",filename,cachename)
+ converter.action(filename,cachename)
+ lfs.touch(cachename,time,time)
+ end
+ specification.filename=cachename
+ end
+ end
+end
local function otftotfm(specification)
local cache_id=specification.hash
local tfmdata=containers.read(constructors.cache,cache_id)
if not tfmdata then
+ checkconversion(specification)
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)
+ local instance=specification.instance or (features and features.axis)
+ local rawdata=otf.load(filename,sub,instance)
if rawdata and next(rawdata) then
local descriptions=rawdata.descriptions
rawdata.lookuphash={}
@@ -15030,7 +18481,6 @@ local function getgsub(tfmdata,k,kind,value)
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
@@ -15051,7 +18501,7 @@ local function getgsub(tfmdata,k,kind,value)
end
otf.getgsub=getgsub
function otf.getsubstitution(tfmdata,k,kind,value)
- local found,kind=getgsub(tfmdata,k,kind)
+ local found,kind=getgsub(tfmdata,k,kind,value)
if not found then
elseif kind=="gsub_single" then
return found
@@ -15108,9 +18558,13 @@ local function opentypereader(specification,suffix)
end
end
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.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.woff(specification)
+ checkconversion(specification)
+ opentypereader(specification,"")
+end
function otf.scriptandlanguage(tfmdata,attr)
local properties=tfmdata.properties
return properties.script or "dflt",properties.language or "dflt"
@@ -15170,8 +18624,6 @@ 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)
@@ -15256,7 +18708,7 @@ local function registerbasehash(tfmdata)
basehash[hash]=base
end
properties.basehash=base
- properties.fullname=properties.fullname.."-"..base
+ properties.fullname=(properties.fullname or properties.name).."-"..base
applied={}
end
local function registerbasefeature(feature,value)
@@ -15324,6 +18776,10 @@ local function preparesubstitutions(tfmdata,feature,value,validlookups,lookuplis
local trace_singles=trace_baseinit and trace_singles
local trace_alternatives=trace_baseinit and trace_alternatives
local trace_ligatures=trace_baseinit and trace_ligatures
+ if not changed then
+ changed={}
+ tfmdata.changed=changed
+ end
for i=1,#lookuplist do
local sequence=lookuplist[i]
local steps=sequence.steps
@@ -15331,12 +18787,10 @@ local function preparesubstitutions(tfmdata,feature,value,validlookups,lookuplis
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
@@ -15477,7 +18931,8 @@ local function featuresinitializer(tfmdata,value)
local properties=tfmdata.properties
local script=properties.script
local language=properties.language
- local rawfeatures=rawdata.resources.features
+ local rawresources=rawdata.resources
+ local rawfeatures=rawresources and rawresources.features
local basesubstitutions=rawfeatures and rawfeatures.gsub
local basepositionings=rawfeatures and rawfeatures.gpos
if basesubstitutions or basepositionings then
@@ -15542,15 +18997,13 @@ if not modules then modules={} end modules ['font-otj']={
license="see context related readme files",
}
if not nodes.properties then return end
-local next,rawget=next,rawget
-local utfchar=utf.char
+local next,rawget,tonumber=next,rawget,tonumber
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)
-local use_advance=false directives.register("fonts.injections.advance",function(v) use_advance=v end)
+local trace_spaces=false registertracker("fonts.injections.spaces",function(v) trace_spaces=v end)
local report_injections=logs.reporter("fonts","injections")
local report_spaces=logs.reporter("fonts","spaces")
local attributes,nodes,node=attributes,nodes,node
@@ -15578,17 +19031,22 @@ 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 getoffsets=nuts.getoffsets
local getboth=nuts.getboth
-local ischar=nuts.is_char
local getdisc=nuts.getdisc
local setdisc=nuts.setdisc
+local setoffsets=nuts.setoffsets
+local ischar=nuts.is_char
+local getkern=nuts.getkern
+local setkern=nuts.setkern
+local setlink=nuts.setlink
+local setwidth=nuts.setwidth
+local getwidth=nuts.getwidth
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
@@ -15626,7 +19084,7 @@ function injections.copy(target,source)
if tp then
tp.injections=si
else
- propertydata[target]={
+ properties[target]={
injections=si,
}
end
@@ -15816,7 +19274,7 @@ function injections.setkern(current,factor,rlmode,x,injection)
return 0,0
end
end
-function injections.setmark(start,base,factor,rlmode,ba,ma,tfmbase,mkmk)
+function injections.setmark(start,base,factor,rlmode,ba,ma,tfmbase,mkmk,checkmark)
local dx,dy=factor*(ba[1]-ma[1]),factor*(ba[2]-ma[2])
nofregisteredmarks=nofregisteredmarks+1
if rlmode>=0 then
@@ -15834,6 +19292,7 @@ function injections.setmark(start,base,factor,rlmode,ba,ma,tfmbase,mkmk)
i.markbase=nofregisteredmarks
i.markbasenode=base
i.markmark=mkmk
+ i.checkmark=checkmark
end
else
p.injections={
@@ -15843,6 +19302,7 @@ function injections.setmark(start,base,factor,rlmode,ba,ma,tfmbase,mkmk)
markbase=nofregisteredmarks,
markbasenode=base,
markmark=mkmk,
+ checkmark=checkmark,
}
end
else
@@ -15854,6 +19314,7 @@ function injections.setmark(start,base,factor,rlmode,ba,ma,tfmbase,mkmk)
markbase=nofregisteredmarks,
markbasenode=base,
markmark=mkmk,
+ checkmark=checkmark,
},
}
end
@@ -15952,11 +19413,12 @@ local function show_result(head)
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"))
+ local w=getwidth(current)
+ local x,y=getoffsets(current)
+ report_injections("char: %C, width %p, xoffset %p, yoffset %p",getchar(current),w,x,y)
skipping=false
elseif id==kern_code then
- report_injections("kern: %p",getfield(current,"kern"))
+ report_injections("kern: %p",getkern(current))
skipping=false
elseif not skipping then
report_injections()
@@ -15982,70 +19444,58 @@ local function inject_kerns_only(head,where)
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 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
- insert_node_before(head,current,newkern(leftkern))
+ local char,id=ischar(current)
+ if char then
+ local p=rawget(properties,current)
+ if p then
+ local i=p.injections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ head=insert_node_before(head,current,newkern(leftkern))
+ 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
+ setlink(posttail,newkern(leftkern))
+ done=true
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
- if use_advance then
- setfield(post,"xadvance",leftkern)
- else
- insert_node_after(post,posttail,newkern(leftkern))
- done=true
- end
- end
+ if replace then
+ local i=p.replaceinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ setlink(replacetail,newkern(leftkern))
+ done=true
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
+ 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
- if done then
- setdisc(prevdisc,pre,post,replace)
- end
+ end
+ if done then
+ setdisc(prevdisc,pre,post,replace)
end
end
end
prevdisc=nil
prevglyph=current
+ elseif char==false then
+ prevdisc=nil
+ prevglyph=current
elseif id==disc_code then
pre,post,replace,pretail,posttail,replacetail=getdisc(current,true)
local done=false
@@ -16057,13 +19507,8 @@ local function inject_kerns_only(head,where)
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
+ pre=insert_node_before(pre,n,newkern(leftkern))
+ done=true
end
end
end
@@ -16077,13 +19522,8 @@ local function inject_kerns_only(head,where)
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
+ post=insert_node_before(post,n,newkern(leftkern))
+ done=true
end
end
end
@@ -16097,13 +19537,8 @@ local function inject_kerns_only(head,where)
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
+ replace=insert_node_before(replace,n,newkern(leftkern))
+ done=true
end
end
end
@@ -16145,78 +19580,79 @@ local function inject_pairs_only(head,where)
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 i=p.injections
+ local char,id=ischar(current)
+ if char 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
+ setoffsets(current,false,yoffset)
+ end
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ head=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 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
+ if next and getid(next)==disc_code then
+ if replace then
+ else
+ setfield(next,"replace",newkern(rightkern))
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
- insert_node_after(post,posttail,newkern(leftkern))
- done=true
- 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
+ setlink(posttail,newkern(leftkern))
+ done=true
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
- if i then
- local leftkern=i.leftkern
- if leftkern and leftkern~=0 then
- setfield(prev,"replace",newkern(leftkern))
- end
+ end
+ if replace then
+ local i=p.replaceinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ setlink(replacetail,newkern(leftkern))
+ done=true
end
end
- if done then
- setdisc(prevdisc,pre,post,replace)
+ 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
prevdisc=nil
prevglyph=current
+ elseif char==false then
+ prevdisc=nil
+ prevglyph=current
elseif id==disc_code then
pre,post,replace,pretail,posttail,replacetail=getdisc(current,true)
local done=false
@@ -16228,7 +19664,7 @@ local function inject_pairs_only(head,where)
if i then
local yoffset=i.yoffset
if yoffset and yoffset~=0 then
- setfield(n,"yoffset",yoffset)
+ setoffsets(n,false,yoffset)
end
local leftkern=i.leftkern
if leftkern and leftkern~=0 then
@@ -16252,7 +19688,7 @@ local function inject_pairs_only(head,where)
if i then
local yoffset=i.yoffset
if yoffset and yoffset~=0 then
- setfield(n,"yoffset",yoffset)
+ setoffsets(n,false,yoffset)
end
local leftkern=i.leftkern
if leftkern and leftkern~=0 then
@@ -16276,7 +19712,7 @@ local function inject_pairs_only(head,where)
if i then
local yoffset=i.yoffset
if yoffset and yoffset~=0 then
- setfield(n,"yoffset",yoffset)
+ setoffsets(n,false,yoffset)
end
local leftkern=i.leftkern
if leftkern and leftkern~=0 then
@@ -16340,11 +19776,8 @@ local function inject_pairs_only(head,where)
return tonode(head),true
end
local function showoffset(n,flag)
- local o=getfield(n,"xoffset")
- if o==0 then
- o=getfield(n,"yoffset")
- end
- if o~=0 then
+ local x,y=getoffsets(n)
+ if x~=0 or y~=0 then
setcolor(n,flag and "darkred" or "darkgreen")
else
resetcolor(n)
@@ -16378,7 +19811,8 @@ local function inject_everything(head,where)
local marks={}
local nofmarks=0
local function processmark(p,n,pn)
- local px=getfield(p,"xoffset")
+ local px,py=getoffsets(p)
+ local nx,ny=getoffsets(n)
local ox=0
local rightkern=nil
local pp=rawget(properties,p)
@@ -16400,167 +19834,174 @@ local function inject_everything(head,where)
ox=px-pn.markx
end
else
- ox=px-pn.markx
+ ox=px-pn.markx-rightkern
end
end
else
ox=px-pn.markx
- local wn=getfield(n,"width")
- if wn~=0 then
- pn.leftkern=-wn/2
- pn.rightkern=-wn/2
+ if pn.checkmark then
+ local wn=getwidth(n)
+ if wn and wn~=0 then
+ wn=wn/2
+ if trace_injections then
+ report_injections("correcting non zero width mark %C",getchar(n))
+ end
+ insert_node_before(n,n,newkern(-wn))
+ insert_node_after(n,n,newkern(-wn))
+ end
end
end
- local oy=getfield(n,"yoffset")+getfield(p,"yoffset")+pn.marky
- setfield(n,"xoffset",ox)
- setfield(n,"yoffset",oy)
+ local oy=ny+py+pn.marky
+ setoffsets(n,ox,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(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
+ local char,id=ischar(current)
+ if char 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
+ local yoffset=i.yoffset
+ if yoffset and yoffset~=0 then
+ setoffsets(current,false,yoffset)
+ end
+ 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=0
+ maxc=maxc+1
+ glyphs[maxc]=cursiveanchor
end
- elseif maxc>0 then
- local ny=getfield(current,"yoffset")
+ properties[cursiveanchor].cursivedy=i.cursivey
+ last=current
+ else
+ maxc=0
+ end
+ elseif maxc>0 then
+ local nx,ny=getoffsets(current)
+ for i=maxc,minc,-1 do
+ local ti=glyphs[i]
+ ny=ny+properties[ti].cursivedy
+ setoffsets(ti,false,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 nx,ny=getoffsets(current)
for i=maxc,minc,-1 do
local ti=glyphs[i]
ny=ny+properties[ti].cursivedy
- setfield(ti,"yoffset",ny)
+ setoffsets(ti,false,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))
+ cursiveanchor=nil
end
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
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ head=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=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
- 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
+ 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
+ setlink(posttail,newkern(leftkern))
+ done=true
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
- if i then
- local leftkern=i.leftkern
- if leftkern and leftkern~=0 then
- setfield(prev,"replace",newkern(leftkern))
- end
+ end
+ if replace then
+ local i=p.replaceinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ setlink(replacetail,newkern(leftkern))
+ done=true
end
end
- if done then
- setdisc(prevdisc,pre,post,replace)
+ 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
- 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)
+ if done then
+ setdisc(prevdisc,pre,post,replace)
end
- maxc=0
- cursiveanchor=nil
end
end
+ else
+ if hascursives and maxc>0 then
+ local nx,ny=getoffsets(current)
+ for i=maxc,minc,-1 do
+ local ti=glyphs[i]
+ ny=ny+properties[ti].cursivedy
+ local xi,yi=getoffsets(ti)
+ setoffsets(ti,xi,yi+ny)
+ end
+ maxc=0
+ cursiveanchor=nil
+ end
end
prevdisc=nil
prevglyph=current
+ elseif char==false then
+ prevdisc=nil
+ prevglyph=current
elseif id==disc_code then
pre,post,replace,pretail,posttail,replacetail=getdisc(current,true)
local done=false
@@ -16572,7 +20013,7 @@ local function inject_everything(head,where)
if i then
local yoffset=i.yoffset
if yoffset and yoffset~=0 then
- setfield(n,"yoffset",yoffset)
+ setoffsets(n,false,yoffset)
end
local leftkern=i.leftkern
if leftkern and leftkern~=0 then
@@ -16587,7 +20028,7 @@ local function inject_everything(head,where)
if hasmarks then
local pm=i.markbasenode
if pm then
- processmark(pm,current,i)
+ processmark(pm,n,i)
end
end
end
@@ -16602,7 +20043,7 @@ local function inject_everything(head,where)
if i then
local yoffset=i.yoffset
if yoffset and yoffset~=0 then
- setfield(n,"yoffset",yoffset)
+ setoffsets(n,false,yoffset)
end
local leftkern=i.leftkern
if leftkern and leftkern~=0 then
@@ -16617,7 +20058,7 @@ local function inject_everything(head,where)
if hasmarks then
local pm=i.markbasenode
if pm then
- processmark(pm,current,i)
+ processmark(pm,n,i)
end
end
end
@@ -16632,7 +20073,7 @@ local function inject_everything(head,where)
if i then
local yoffset=i.yoffset
if yoffset and yoffset~=0 then
- setfield(n,"yoffset",yoffset)
+ setoffsets(n,false,yoffset)
end
local leftkern=i.leftkern
if leftkern and leftkern~=0 then
@@ -16647,7 +20088,7 @@ local function inject_everything(head,where)
if hasmarks then
local pm=i.markbasenode
if pm then
- processmark(pm,current,i)
+ processmark(pm,n,i)
end
end
end
@@ -16695,11 +20136,11 @@ local function inject_everything(head,where)
current=next
end
if hascursives and maxc>0 then
- local ny=getfield(last,"yoffset")
+ local nx,ny=getoffsets(last)
for i=maxc,minc,-1 do
local ti=glyphs[i]
ny=ny+properties[ti].cursivedy
- setfield(ti,"yoffset",ny)
+ setoffsets(ti,false,ny)
if trace_cursive then
showoffset(ti)
end
@@ -16733,6 +20174,37 @@ function nodes.injections.setspacekerns(font,sequence)
triggers={ [font]=sequence }
end
end
+local getthreshold
+if context then
+ local threshold=1
+ local parameters=fonts.hashes.parameters
+ directives.register("otf.threshold",function(v) threshold=tonumber(v) or 1 end)
+ getthreshold=function(font)
+ local p=parameters[font]
+ local f=p.factor
+ local s=p.spacing
+ local t=threshold*(s and s.width or p.space or 0)-2
+ return t>0 and t or 0,f
+ end
+else
+ injections.threshold=0
+ getthreshold=function(font)
+ local p=fontdata[font].parameters
+ local f=p.factor
+ local s=p.spacing
+ local t=injections.threshold*(s and s.width or p.space or 0)-2
+ return t>0 and t or 0,f
+ end
+end
+injections.getthreshold=getthreshold
+function injections.isspace(n,threshold,id)
+ if (id or getid(n))==glue_code then
+ local w=getwidth(n)
+ if threshold and w>threshold then
+ return 32
+ end
+ end
+end
local function injectspaces(head)
if not triggers then
return head,false
@@ -16748,10 +20220,9 @@ local function injectspaces(head)
local function updatefont(font,trig)
leftkerns=trig.left
rightkerns=trig.right
- local par=fontdata[font].parameters
- factor=par.factor
- threshold=par.spacing.width-1
lastfont=font
+ threshold,
+ factor=getthreshold(font)
end
for n in traverse_id(glue_code,tonut(head)) do
local prev,next=getboth(n)
@@ -16770,7 +20241,7 @@ local function injectspaces(head)
end
end
if prevchar then
- local font=getfont(next)
+ local font=getfont(prev)
local trig=triggers[font]
if trig then
if lastfont~=font then
@@ -16782,32 +20253,32 @@ local function injectspaces(head)
end
end
if leftkern then
- local old=getfield(n,"width")
- if old>=threshold then
+ local old=getwidth(n)
+ 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)
+ setwidth(n,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)
+ setwidth(n,new)
end
end
leftkern=false
elseif rightkern then
- local old=getfield(n,"width")
- if old>=threshold then
+ local old=getwidth(n)
+ 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)
+ setwidth(n,new)
end
rightkern=false
end
@@ -16820,10 +20291,19 @@ function injections.handler(head,where)
head=injectspaces(head)
end
if nofregisteredmarks>0 or nofregisteredcursives>0 then
+ if trace_injections then
+ report_injections("injection variant %a","everything")
+ end
return inject_everything(head,where)
elseif nofregisteredpairs>0 then
+ if trace_injections then
+ report_injections("injection variant %a","pairs")
+ end
return inject_pairs_only(head,where)
elseif nofregisteredkerns>0 then
+ if trace_injections then
+ report_injections("injection variant %a","kerns")
+ end
return inject_kerns_only(head,where)
else
return head,false
@@ -16854,7 +20334,6 @@ analyzers.methods=methods
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 getprev=nuts.getprev
@@ -16865,7 +20344,6 @@ 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 disc_code=nodecodes.disc
@@ -16873,7 +20351,7 @@ 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 otffeatures=fonts.constructors.features.otf
local registerotffeature=otffeatures.register
local s_init=1 local s_rphf=7
local s_medi=2 local s_half=8
@@ -17038,33 +20516,40 @@ local mappers={
}
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")
+ local f_arabic,l_arabic=characters.blockrange("arabic")
+ local f_syriac,l_syriac=characters.blockrange("syriac")
+ local f_mandiac,l_mandiac=characters.blockrange("mandiac")
+ local f_nko,l_nko=characters.blockrange("nko")
+ local f_ext_a,l_ext_a=characters.blockrange("arabicextendeda")
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
+ if type(k)=="number" then
+ 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>=f_arabic and k<=l_arabic) or
+ (k>=f_syriac and k<=l_syriac) or
+ (k>=f_mandiac and k<=l_mandiac) or
+ (k>=f_nko and k<=l_nko) or
+ (k>=f_ext_a and k<=l_ext_a) then
+ if categories[k]=="mn" then
+ v=s_mark
+ else
+ v=s_rest
+ end
end
end
+ t[k]=v
+ return v
end
- t[k]=v
- return v
end)
+ characters.classifiers=classifiers
end
function methods.arab(head,font,attr)
local first,last=nil,nil
@@ -17221,12 +20706,14 @@ 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 logs=logs
+local trackers=trackers
+local nodes=nodes
+local attributes=attributes
local fonts=fonts
local otf=fonts.handlers.otf
-local trace_lookups=false registertracker("otf.lookups",function(v) trace_lookups=v end)
+local tracers=nodes.tracers
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)
@@ -17238,31 +20725,26 @@ local trace_cursive=false registertracker("otf.cursive",function(v) trace_cursiv
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_plugins=false registertracker("otf.plugins",function(v) trace_plugins=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_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")
+registertracker("otf.sample","otf.steps,otf.actions,otf.analyzing")
local nuts=nodes.nuts
local tonode=nuts.tonode
local tonut=nuts.tonut
@@ -17287,24 +20769,26 @@ local setchar=nuts.setchar
local getdisc=nuts.getdisc
local setdisc=nuts.setdisc
local setlink=nuts.setlink
+local getcomponents=nuts.getcomponents
+local setcomponents=nuts.setcomponents
+local getdir=nuts.getdir
+local getwidth=nuts.getwidth
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 flush_node=nuts.flush_node
local end_of_math=nuts.end_of_math
local traverse_nodes=nuts.traverse
local traverse_id=nuts.traverse_id
+local set_components=nuts.set_components
+local take_components=nuts.take_components
+local count_components=nuts.count_components
+local copy_no_components=nuts.copy_no_components
+local copy_only_glyphs=nuts.copy_only_glyphs
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
@@ -17316,8 +20800,8 @@ local dir_code=nodecodes.dir
local localpar_code=nodecodes.localpar
local discretionary_code=disccodes.discretionary
local ligature_code=glyphcodes.ligature
-local privateattribute=attributes.private
-local a_state=privateattribute('state')
+local a_state=attributes.private('state')
+local a_noligature=attributes.private("noligature")
local injections=nodes.injections
local setmark=injections.setmark
local setcursive=injections.setcursive
@@ -17327,20 +20811,22 @@ 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 fontdata=fonts.hashes.identifiers
+local fontfeatures=fonts.hashes.features
+local otffeatures=fonts.constructors.features.otf
local registerotffeature=otffeatures.register
local onetimemessage=fonts.loggers.onetimemessage or function() end
+local getrandom=utilities and utilities.randomizer and utilities.randomizer.get
otf.defaultnodealternate="none"
local tfmdata=false
local characters=false
local descriptions=false
local marks=false
+local classes=false
local currentfont=false
local factor=0
local threshold=0
+local checkmarks=false
local sweepnode=nil
local sweepprev=nil
local sweepnext=nil
@@ -17349,17 +20835,17 @@ local notmatchpre={}
local notmatchpost={}
local notmatchreplace={}
local handlers={}
-local function isspace(n)
- if getid(n)==glue_code then
- local w=getfield(n,"width")
- if w>=threshold then
- return 32
- end
- end
+local isspace=injections.isspace
+local getthreshold=injections.getthreshold
+local checkstep=(tracers and tracers.steppers.check) or function() end
+local registerstep=(tracers and tracers.steppers.register) or function() end
+local registermessage=(tracers and tracers.steppers.message) or function() end
+local function checkdisccontent(d)
+ local pre,post,replace=getdisc(d)
+ if pre then for n in traverse_id(glue_code,pre) do print("pre",nodes.idstostring(pre)) break end end
+ if post then for n in traverse_id(glue_code,post) do print("pos",nodes.idstostring(post)) break end end
+ if replace then for n in traverse_id(glue_code,replace) do print("rep",nodes.idstostring(replace)) break 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
local function logprocess(...)
if trace_steps then
registermessage(...)
@@ -17417,26 +20903,19 @@ local function mref(rlmode)
return "l2r"
end
end
-local function copy_glyph(g)
- local components=getfield(g,"components")
- if components then
- setfield(g,"components",nil)
- local n=copy_node(g)
- copyinjection(n,g)
- setfield(g,"components",components)
- return n
- else
- local n=copy_node(g)
- copyinjection(n,g)
- 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)
+ local pre,post,replace,pretail,posttail,replacetail=getdisc(disc,true)
+ local prev,next=getboth(disc)
+ local ishead=head==disc
+ setdisc(disc)
+ flush_node(disc)
+ if pre then
+ flush_node_list(pre)
+ end
+ if post then
+ flush_node_list(post)
+ end
+ if ishead then
if replace then
if next then
setlink(replacetail,next)
@@ -17448,7 +20927,6 @@ local function flattendisk(head,disc)
return
end
else
- local prev,next=getboth(disc)
if replace then
if next then
setlink(replacetail,next)
@@ -17468,54 +20946,54 @@ local function appenddisc(disc,list)
if post then
setlink(posttail,posthead)
else
- post=phead
+ post=posthead
end
if replace then
setlink(replacetail,replacehead)
else
- replace=rhead
+ replace=replacehead
end
setdisc(disc,pre,post,replace)
end
+local take_components=getcomponents
+local set_components=setcomponents
+local function count_components(start,marks)
+ if getid(start)~=glyph_code then
+ return 0
+ elseif getsubtype(start)==ligature_code then
+ local i=0
+ local components=getcomponents(start)
+ while components do
+ i=i+count_components(components,marks)
+ components=getnext(components)
+ end
+ return i
+ elseif not marks[getchar(start)] then
+ return 1
+ else
+ return 0
+ end
+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)
- setprev(start,nil)
- setnext(stop,nil)
- local base=copy_glyph(start)
+ setprev(start)
+ setnext(stop)
+ local base=copy_no_components(start,copyinjection)
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)
+ set_components(base,start)
+ setlink(prev,base,next)
return head,base
end
end
-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
-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
@@ -17525,29 +21003,20 @@ local function toligature(head,start,stop,char,dataset,sequence,markflag,discfou
setchar(start,char)
return head,start
end
- local components=getfield(start,"components")
- if components then
- end
local prev=getprev(start)
local next=getnext(stop)
local comp=start
- setprev(start,nil)
- setnext(stop,nil)
- local base=copy_glyph(start)
+ setprev(start)
+ setnext(stop)
+ local base=copy_no_components(start,copyinjection)
if start==head then
head=base
end
resetinjection(base)
setchar(base,char)
setsubtype(base,ligature_code)
- setfield(base,"components",comp)
- if prev then
- setnext(prev,base)
- end
- if next then
- setprev(next,base)
- end
- setboth(base,prev,next)
+ set_components(base,comp)
+ setlink(prev,base,next)
if not discfound then
local deletemarks=markflag~="mark"
local components=start
@@ -17559,7 +21028,7 @@ local function toligature(head,start,stop,char,dataset,sequence,markflag,discfou
local char=getchar(start)
if not marks[char] then
baseindex=baseindex+componentindex
- componentindex=getcomponentindex(start)
+ componentindex=count_components(start,marks)
elseif not deletemarks then
setligaindex(start,baseindex+getligaindex(start,componentindex))
if trace_marks then
@@ -17594,47 +21063,35 @@ local function toligature(head,start,stop,char,dataset,sequence,markflag,discfou
local discprev,discnext=getboth(discfound)
if discprev and discnext then
local pre,post,replace,pretail,posttail,replacetail=getdisc(discfound,true)
- if not replace then
+ if not replace then
local prev=getprev(base)
-local current=comp
-local previous=nil
-local copied=nil
-while current do
- if getid(current)==glyph_code then
- local n=copy_node(current)
- if copied then
- setlink(previous,n)
- else
- copied=n
- end
- previous=n
- end
- current=getnext(current)
-end
- setprev(discnext,nil)
- setnext(discprev,nil)
+ local comp=take_components(base)
+ local copied=copy_only_glyphs(comp)
if pre then
setlink(discprev,pre)
+ else
+ setnext(discprev)
end
pre=comp
if post then
setlink(posttail,discnext)
- setprev(post,nil)
+ setprev(post)
else
post=discnext
+ setprev(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
+ setlink(prev,discfound,next)
+ setboth(base)
+ set_components(base,copied)
+ replace=base
+ setdisc(discfound,pre,post,replace)
+ base=prev
end
end
end
return head,base
end
-local function multiple_glyphs(head,start,multiple,ignoremarks)
+local function multiple_glyphs(head,start,multiple,ignoremarks,what)
local nofmultiples=#multiple
if nofmultiples>0 then
resetinjection(start)
@@ -17648,6 +21105,17 @@ local function multiple_glyphs(head,start,multiple,ignoremarks)
insert_node_after(head,start,n)
start=n
end
+ if what==true then
+ elseif what>1 then
+ local m=multiple[nofmultiples]
+ for i=2,what do
+ local n=copy_node(start)
+ resetinjection(n)
+ setchar(n,m)
+ insert_node_after(head,start,n)
+ start=n
+ end
+ end
end
return head,start,true
else
@@ -17659,8 +21127,10 @@ local function multiple_glyphs(head,start,multiple,ignoremarks)
end
local function get_alternative_glyph(start,alternatives,value)
local n=#alternatives
- if value=="random" then
- local r=random(1,n)
+ if n==1 then
+ return alternatives[1],trace_alternatives and "1 (only one present)"
+ elseif value=="random" then
+ local r=getrandom and getrandom("glyph",1,n) or 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)
@@ -17718,7 +21188,7 @@ 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])
+ return multiple_glyphs(head,start,multiple,sequence.flags[1],dataset[1])
end
function handlers.gsub_ligature(head,start,dataset,sequence,ligature)
local current=getnext(start)
@@ -17851,7 +21321,6 @@ function handlers.gpos_pair(head,start,dataset,sequence,kerns,rlmode,step,i,inje
return head,start,false
else
local prev=start
- local done=false
while snext do
local nextchar=ischar(snext,currentfont)
if nextchar then
@@ -17869,8 +21338,7 @@ function handlers.gpos_pair(head,start,dataset,sequence,kerns,rlmode,step,i,inje
if trace_kerns then
logprocess("%s: shifting single %s by %p",pref(dataset,sequence),gref(nextchar),k)
end
- done=true
- break
+ return head,start,true
end
end
if a and #a>0 then
@@ -17887,15 +21355,13 @@ function handlers.gpos_pair(head,start,dataset,sequence,kerns,rlmode,step,i,inje
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
+ return head,start,true
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
+ return head,start,true
else
break
end
@@ -17903,7 +21369,7 @@ function handlers.gpos_pair(head,start,dataset,sequence,kerns,rlmode,step,i,inje
break
end
end
- return head,start,done
+ return head,start,false
end
end
function handlers.gpos_mark2base(head,start,dataset,sequence,markanchors,rlmode)
@@ -17939,7 +21405,7 @@ function handlers.gpos_mark2base(head,start,dataset,sequence,markanchors,rlmode)
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])
+ local dx,dy,bound=setmark(start,base,factor,rlmode,ba,ma,characters[basechar],false,checkmarks)
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)
@@ -17994,7 +21460,7 @@ function handlers.gpos_mark2ligature(head,start,dataset,sequence,markanchors,rlm
local index=getligaindex(start)
ba=ba[index]
if ba then
- local dx,dy,bound=setmark(start,base,factor,rlmode,ba,ma,characters[basechar])
+ local dx,dy,bound=setmark(start,base,factor,rlmode,ba,ma,characters[basechar],false,checkmarks)
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)
@@ -18041,7 +21507,7 @@ function handlers.gpos_mark2mark(head,start,dataset,sequence,markanchors,rlmode)
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)
+ local dx,dy,bound=setmark(start,base,factor,rlmode,ba,ma,characters[basechar],true,checkmarks)
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)
@@ -18056,7 +21522,6 @@ function handlers.gpos_mark2mark(head,start,dataset,sequence,markanchors,rlmode)
return head,start,false
end
function handlers.gpos_cursive(head,start,dataset,sequence,exitanchors,rlmode,step,i)
- local done=false
local startchar=getchar(start)
if marks[startchar] then
if trace_cursive then
@@ -18064,7 +21529,7 @@ function handlers.gpos_cursive(head,start,dataset,sequence,exitanchors,rlmode,st
end
else
local nxt=getnext(start)
- while not done and nxt do
+ while nxt do
local nextchar=ischar(nxt,currentfont)
if not nextchar then
break
@@ -18081,7 +21546,7 @@ function handlers.gpos_cursive(head,start,dataset,sequence,exitanchors,rlmode,st
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
+ return head,start,true
end
end
end
@@ -18089,7 +21554,7 @@ function handlers.gpos_cursive(head,start,dataset,sequence,exitanchors,rlmode,st
end
end
end
- return head,start,done
+ return head,start,false
end
local chainprocs={}
local function logprocess(...)
@@ -18121,6 +21586,9 @@ local function reversesub(head,start,stop,dataset,sequence,replacements,rlmode)
end
end
chainprocs.reversesub=reversesub
+local function reportzerosteps(dataset,sequence)
+ logwarning("%s: no steps",cref(dataset,sequence))
+end
local function reportmoresteps(dataset,sequence)
logwarning("%s: more than 1 step",cref(dataset,sequence))
end
@@ -18130,29 +21598,34 @@ function chainprocs.gsub_single(head,start,stop,dataset,sequence,currentlookup,c
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))
+ if nofsteps==0 then
+ reportzerosteps(dataset,sequence)
+ else
+ local current=start
+ local mapping=steps[1].coverage
+ while current do
+ local currentchar=ischar(current)
+ if currentchar then
+ local replacement=mapping[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
+ break
+ elseif current==stop then
+ break
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)
+ current=getnext(current)
end
- return head,start,true
- elseif currentchar==false then
- break
- elseif current==stop then
- break
- else
- current=getnext(current)
end
end
return head,start,false
@@ -18163,17 +21636,21 @@ function chainprocs.gsub_multiple(head,start,stop,dataset,sequence,currentlookup
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
+ if nofsteps==0 then
+ reportzerosteps(dataset,sequence)
else
- if trace_multiples then
- logprocess("%s: replacing %s by multiple characters %s",cref(dataset,sequence),gref(startchar),gref(replacement))
+ 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,sequence.flags[1],dataset[1])
end
- return multiple_glyphs(head,start,replacement,currentlookup.flags[1])
end
return head,start,false
end
@@ -18183,35 +21660,40 @@ function chainprocs.gsub_alternate(head,start,stop,dataset,sequence,currentlooku
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)
+ if nofsteps==0 then
+ reportzerosteps(dataset,sequence)
+ else
+ local kind=dataset[4]
+ local what=dataset[1]
+ local value=what==true and tfmdata.shared.features[kind] or what
+ local current=start
+ local mapping=steps[1].coverage
+ while current do
+ local currentchar=ischar(current)
+ if currentchar then
+ local alternatives=mapping[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
+ break
+ elseif current==stop then
+ break
+ else
+ current=getnext(current)
end
- return head,start,true
- elseif currentchar==false then
- break
- elseif current==stop then
- break
- else
- current=getnext(current)
end
end
return head,start,false
@@ -18222,70 +21704,74 @@ function chainprocs.gsub_ligature(head,start,stop,dataset,sequence,currentlookup
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
+ if nofsteps==0 then
+ reportzerosteps(dataset,sequence)
else
- 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
- current=getnext(current)
- end
- else
- local schar=getchar(current)
- if skipmark and marks[schar] then
+ 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]
+ 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
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
+ local schar=getchar(current)
+ if skipmark and marks[schar] then
current=getnext(current)
- end
else
- break
+ 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
- end
- local ligature=ligatures.ligature
- if ligature then
- if chainindex then
- stop=last
- end
- if trace_ligatures then
+ 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
- logprocess("%s: replacing character %s by ligature %s case 3",cref(dataset,sequence,chainindex),gref(startchar),gref(ligature))
+ logwarning("%s: replacing character %s by ligature fails",cref(dataset,sequence,chainindex),gref(startchar))
else
- logprocess("%s: replacing character %s upto %s by ligature %s case 4",cref(dataset,sequence,chainindex),gref(startchar),gref(getchar(stop)),gref(ligature))
+ logwarning("%s: replacing character %s upto %s by ligature fails",cref(dataset,sequence,chainindex),gref(startchar),gref(getchar(stop)))
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
@@ -18296,19 +21782,23 @@ function chainprocs.gpos_single(head,start,stop,dataset,sequence,currentlookup,r
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
- 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)
+ if nofsteps==0 then
+ reportzerosteps(dataset,sequence)
+ else
+ 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
+ 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
end
return head,start,false
@@ -18319,65 +21809,64 @@ function chainprocs.gpos_pair(head,start,stop,dataset,sequence,currentlookup,rlm
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 nofsteps==0 then
+ reportzerosteps(dataset,sequence)
+ else
+ 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
+ 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,true
+ 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 single %s by %p",cref(dataset,sequence),gref(startchar),k)
+ 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
- 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)
+ 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
- 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")
+ return head,start,true
+ elseif krn~=0 then
+ local k=setkern(snext,factor,rlmode,krn)
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)
+ logprocess("%s: inserting kern %s between %s and %s",cref(dataset,sequence),k,gref(getchar(prev)),gref(nextchar))
end
+ return head,start,true
+ else
+ break
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
@@ -18388,60 +21877,64 @@ function chainprocs.gpos_mark2base(head,start,stop,dataset,sequence,currentlooku
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
+ if nofsteps==0 then
+ reportzerosteps(dataset,sequence)
+ else
+ 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
+ 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),1)
+ logwarning("%s: no base for mark %s, case %i",pref(dataset,sequence),gref(markchar),2)
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)
+ 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],false,checkmarks)
+ 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
- return head,start,true
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),1)
+ logwarning("%s: prev node is no char, case %i",cref(dataset,sequence),2)
end
elseif trace_bugs then
- logwarning("%s: prev node is no char, case %i",cref(dataset,sequence),2)
+ logwarning("%s: mark %s has no anchors",cref(dataset,sequence),gref(markchar))
end
elseif trace_bugs then
- logwarning("%s: mark %s has no anchors",cref(dataset,sequence),gref(markchar))
+ logwarning("%s: mark %s is no mark",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
@@ -18451,64 +21944,68 @@ function chainprocs.gpos_mark2ligature(head,start,stop,dataset,sequence,currentl
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
+ if nofsteps==0 then
+ reportzerosteps(dataset,sequence)
+ else
+ 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
+ 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,1)
+ logwarning("%s: no base for mark %s, case %i",cref(dataset,sequence),markchar,2)
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)
+ 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],false,checkmarks)
+ 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
- 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),1)
+ logwarning("%s, prev node is no char, case %i",cref(dataset,sequence),2)
end
elseif trace_bugs then
- logwarning("%s, prev node is no char, case %i",cref(dataset,sequence),2)
+ logwarning("%s, mark %s has no anchors",cref(dataset,sequence),gref(markchar))
end
elseif trace_bugs then
- logwarning("%s, mark %s has no anchors",cref(dataset,sequence),gref(markchar))
+ logwarning("%s, mark %s is no mark",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
@@ -18518,48 +22015,52 @@ function chainprocs.gpos_mark2mark(head,start,stop,dataset,sequence,currentlooku
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)
- local slc=getligaindex(start)
- if slc then
- while base do
- local blc=getligaindex(base)
- if blc and blc~=slc then
- base=getprev(base)
- else
- break
+ if nofsteps==0 then
+ reportzerosteps(dataset,sequence)
+ else
+ local markchar=getchar(start)
+ if marks[markchar] then
+ local markanchors=steps[1].coverage[markchar]
+ if markanchors then
+ local base=getprev(start)
+ local slc=getligaindex(start)
+ if slc then
+ while base do
+ local blc=getligaindex(base)
+ if blc and blc~=slc then
+ base=getprev(base)
+ else
+ break
+ end
end
end
- 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)
+ 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,checkmarks)
+ 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
- return head,start,true
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),1)
+ logwarning("%s: prev node is no mark, case %i",cref(dataset,sequence),2)
end
elseif trace_bugs then
- logwarning("%s: prev node is no mark, case %i",cref(dataset,sequence),2)
+ logwarning("%s: mark %s has no anchors",cref(dataset,sequence),gref(markchar))
end
elseif trace_bugs then
- logwarning("%s: mark %s has no anchors",cref(dataset,sequence),gref(markchar))
+ logwarning("%s: mark %s is no mark",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
@@ -18569,56 +22070,171 @@ function chainprocs.gpos_cursive(head,start,stop,dataset,sequence,currentlookup,
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))
+ if nofsteps==0 then
+ reportzerosteps(dataset,sequence)
+ else
+ local startchar=getchar(start)
+ local exitanchors=steps[1].coverage[startchar]
+ if exitanchors then
+ 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 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
+ return head,start,true
+ end
+ end
+ elseif trace_bugs then
+ onetimemessage(currentfont,startchar,"no entry anchors",report_fonts)
+ end
+ break
+ end
+ end
+ end
+ elseif trace_cursive and trace_details then
+ logprocess("%s, cursive %s is already done",pref(dataset,sequence),gref(getchar(start)),alreadydone)
+ end
+ end
+ return head,start,false
+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 new_kern=nuts.pool.kern
+local function checked(head)
+ local current=head
+ while current do
+ if getid(current)==glue_code then
+ local kern=new_kern(getwidth(current))
+ if head==current then
+ local next=getnext(current)
+ if next then
+ setlink(kern,next)
+ end
+ flush_node(current)
+ head=kern
+ current=next
+ else
+ local prev,next=getboth(current)
+ setlink(prev,kern,next)
+ flush_node(current)
+ current=next
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)
+ current=getnext(current)
+ end
+ end
+ return head
+end
+local function setdiscchecked(d,pre,post,replace)
+ if pre then pre=checked(pre) end
+ if post then post=checked(post) end
+ if replace then replace=checked(replace) end
+ setdisc(d,pre,post,replace)
+end
+local noflags={ false,false,false,false }
+local function chainrun(head,start,last,dataset,sequence,rlmode,ck,skipped)
+ local size=ck[5]-ck[4]+1
+ local flags=sequence.flags or noflags
+ local done=false
+ local skipmark=flags[1]
+ local chainlookups=ck[6]
+ if chainlookups then
+ local nofchainlookups=#chainlookups
+ if size==1 then
+ local chainlookup=chainlookups[1]
+ for j=1,#chainlookup do
+ local chainstep=chainlookup[j]
+ local chainkind=chainstep.type
+ local chainproc=chainprocs[chainkind]
+ if chainproc then
+ local ok
+ head,start,ok=chainproc(head,start,last,dataset,sequence,chainstep,rlmode,1)
+ if ok then
+ done=true
+ end
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
+ logprocess("%s: %s is not yet supported (1)",cref(dataset,sequence),chainkind)
+ end
+ end
+ else
+ local i=1
+ while start do
+ if skipped then
+ while start do
+ local char=getchar(start)
+ local class=classes[char]
+ if class then
+ 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 chainlookup=chainlookups[i]
+ if chainlookup then
+ for j=1,#chainlookup do
+ local chainstep=chainlookup[j]
+ local chainkind=chainstep.type
+ local chainproc=chainprocs[chainkind]
+ if chainproc then
+ local ok,n
+ head,start,ok,n=chainproc(head,start,last,dataset,sequence,chainstep,rlmode,i)
+ if ok then
+ done=true
+ if n and n>1 and i+n>nofchainlookups then
+ break
+ end
+ end
+ else
+ logprocess("%s: %s is not yet supported (2)",cref(dataset,sequence),chainkind)
end
- elseif trace_bugs then
- onetimemessage(currentfont,startchar,"no entry anchors",report_fonts)
end
+ end
+ i=i+1
+ if i>size or not start then
break
+ elseif start then
+ start=getnext(start)
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)
+ local replacements=ck[7]
+ if replacements then
+ head,start,done=reversesub(head,start,last,dataset,sequence,replacements,rlmode)
+ else
+ done=true
+ if trace_contexts then
+ logprocess("%s: skipping match",cref(dataset,sequence))
+ end
end
- return head,start,false
end
+ return head,start,done
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)
+local function chaindisk(head,start,dataset,sequence,rlmode,ck,skipped)
if not start then
return head,start,false
end
@@ -18631,13 +22247,13 @@ local function chaindisk(head,start,last,dataset,sequence,chainlookup,rlmode,k,c
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 hasglue=false
local i=f
while i<=l do
local id=getid(current)
@@ -18645,21 +22261,30 @@ local function chaindisk(head,start,last,dataset,sequence,chainlookup,rlmode,k,c
i=i+1
last=current
current=getnext(current)
+ elseif id==glue_code then
+ i=i+1
+ last=current
+ current=getnext(current)
+ hasglue=true
elseif id==disc_code then
if keepdisc then
keepdisc=false
- if notmatchpre[current]~=notmatchreplace[current] then
- lookaheaddisc=current
- end
+ lookaheaddisc=current
local replace=getfield(current,"replace")
- while replace and i<=l do
- if getid(replace)==glyph_code then
- i=i+1
+ if not replace then
+ sweepoverflow=true
+ sweepnode=current
+ current=getnext(current)
+ else
+ while replace and i<=l do
+ if getid(replace)==glyph_code then
+ i=i+1
+ end
+ replace=getnext(replace)
end
- replace=getnext(replace)
+ current=getnext(replace)
end
last=current
- current=getnext(c)
else
head,current=flattendisk(head,current)
end
@@ -18694,8 +22319,8 @@ local function chaindisk(head,start,last,dataset,sequence,chainlookup,rlmode,k,c
tail=find_node_tail(head)
end
setnext(sweepnode,current)
- setprev(head,nil)
- setnext(tail,nil)
+ setprev(head)
+ setnext(tail)
appenddisc(sweepnode,head)
end
end
@@ -18707,13 +22332,17 @@ local function chaindisk(head,start,last,dataset,sequence,chainlookup,rlmode,k,c
if id==glyph_code then
i=i+1
current=getnext(current)
+ elseif id==glue_code then
+ i=i+1
+ current=getnext(current)
+ hasglue=true
elseif id==disc_code then
if keepdisc then
keepdisc=false
if notmatchpre[current]~=notmatchreplace[current] then
lookaheaddisc=current
end
- local replace=getfield(c,"replace")
+ local replace=getfield(current,"replace")
while replace and i<s do
if getid(replace)==glyph_code then
i=i+1
@@ -18748,6 +22377,9 @@ local function chaindisk(head,start,last,dataset,sequence,chainlookup,rlmode,k,c
local id=getid(current)
if id==glyph_code then
i=i-1
+ elseif id==glue_code then
+ i=i-1
+ hasglue=true
elseif id==disc_code then
if keepdisc then
keepdisc=false
@@ -18771,7 +22403,7 @@ local function chaindisk(head,start,last,dataset,sequence,chainlookup,rlmode,k,c
end
end
end
- local ok=false
+ local done=false
if lookaheaddisc then
local cf=start
local cl=getprev(lookaheaddisc)
@@ -18788,42 +22420,53 @@ local function chaindisk(head,start,last,dataset,sequence,chainlookup,rlmode,k,c
break
end
end
- setprev(lookaheaddisc,cprev)
- if cprev then
- setnext(cprev,lookaheaddisc)
- end
- setprev(cf,nil)
- setnext(cl,nil)
+ setlink(cprev,lookaheaddisc)
+ setprev(cf)
+ setnext(cl)
if startishead then
head=lookaheaddisc
end
local pre,post,replace=getdisc(lookaheaddisc)
local new=copy_node_list(cf)
local cnew=new
+ if pre then
+ setlink(find_node_tail(cf),pre)
+ end
+ if replace then
+ local tail=find_node_tail(new)
+ setlink(tail,replace)
+ end
for i=1,insertedmarks do
cnew=getnext(cnew)
end
+ cl=start
local clast=cnew
for i=f,l do
+ cl=getnext(cl)
clast=getnext(clast)
end
if not notmatchpre[lookaheaddisc] then
- cf,start,ok=chainproc(cf,start,last,dataset,sequence,chainlookup,rlmode,k)
+ local ok=false
+ cf,start,ok=chainrun(cf,start,cl,dataset,sequence,rlmode,ck,skipped)
+ if ok then
+ done=true
+ end
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)
+ local ok=false
+ new,cnew,ok=chainrun(new,cnew,clast,dataset,sequence,rlmode,ck,skipped)
+ if ok then
+ done=true
+ end
end
- if replace then
- local tail=find_node_tail(new)
- setlink(tail,replace)
+ if hasglue then
+ setdiscchecked(lookaheaddisc,cf,post,new)
+ else
+ setdisc(lookaheaddisc,cf,post,new)
end
- setdisc(lookaheaddisc,cf,post,new)
start=getprev(lookaheaddisc)
sweephead[cf]=getnext(clast)
- sweephead[new]=getnext(last)
+ sweephead[new]=getnext(cl)
elseif backtrackdisc then
local cf=getnext(backtrackdisc)
local cl=start
@@ -18843,8 +22486,8 @@ local function chaindisk(head,start,last,dataset,sequence,chainlookup,rlmode,k,c
setprev(cnext,backtrackdisc)
end
setnext(backtrackdisc,cnext)
- setprev(cf,nil)
- setnext(cl,nil)
+ setprev(cf)
+ setnext(cl)
local pre,post,replace,pretail,posttail,replacetail=getdisc(backtrackdisc,true)
local new=copy_node_list(cf)
local cnew=find_node_tail(new)
@@ -18856,10 +22499,18 @@ local function chaindisk(head,start,last,dataset,sequence,chainlookup,rlmode,k,c
clast=getnext(clast)
end
if not notmatchpost[backtrackdisc] then
- cf,start,ok=chainproc(cf,start,last,dataset,sequence,chainlookup,rlmode,k)
+ local ok=false
+ cf,start,ok=chainrun(cf,start,last,dataset,sequence,rlmode,ck,skipped)
+ if ok then
+ done=true
+ end
end
if not notmatchreplace[backtrackdisc] then
- new,cnew,ok=chainproc(new,cnew,clast,dataset,sequence,chainlookup,rlmode,k)
+ local ok=false
+ new,cnew,ok=chainrun(new,cnew,clast,dataset,sequence,rlmode,ck,skipped)
+ if ok then
+ done=true
+ end
end
if post then
setlink(posttail,cf)
@@ -18871,22 +22522,39 @@ local function chaindisk(head,start,last,dataset,sequence,chainlookup,rlmode,k,c
else
replace=new
end
- setdisc(backtrackdisc,pre,post,replace)
+ if hasglue then
+ setdiscchecked(backtrackdisc,pre,post,replace)
+ else
+ setdisc(backtrackdisc,pre,post,replace)
+ end
start=getprev(backtrackdisc)
sweephead[post]=getnext(clast)
sweephead[replace]=getnext(last)
else
- head,start,ok=chainproc(head,start,last,dataset,sequence,chainlookup,rlmode,k)
+ local ok=false
+ head,start,ok=chainrun(head,start,last,dataset,sequence,rlmode,ck,skipped)
+ if ok then
+ done=true
+ end
end
- return head,start,ok
+ return head,start,done
+end
+local function chaintrac(head,start,dataset,sequence,rlmode,ck,skipped)
+ local rule=ck[1]
+ local lookuptype=ck[8] or ck[2]
+ local nofseq=#ck[3]
+ 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,nofseq-last,lookuptype)
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 checkdisc=sweeptype and getprev(head)
local flags=sequence.flags or noflags
local done=false
local skipmark=flags[1]
@@ -18894,6 +22562,8 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)
local skipbase=flags[3]
local markclass=sequence.markclass
local skipped=false
+ local startprev,
+ startnext=getboth(start)
for k=1,#contexts do
local match=true
local current=start
@@ -18901,155 +22571,165 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)
local ck=contexts[k]
local seq=ck[3]
local s=#seq
+ local size=1
if s==1 then
local char=ischar(current,currentfont)
if char then
- match=seq[1][char]
+ if not seq[1][char] then
+ match=false
+ end
end
else
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 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
+ size=l-f+1
+ if size>1 then
+ local discfound
+ local n=f+1
+ last=startnext
+ 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 class=classes[char]
+ if class then
+ if class==skipmark or class==skipligature or class==skipbase or (markclass and class=="mark" and not markclass[char]) then
+ skipped=true
+ if trace_skips then
+ show_skip(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
- else
- if discfound then
- notmatchreplace[discfound]=true
- match=not notmatchpre[discfound]
- else
- match=false
- end
- break
end
+ n=n+1
else
if discfound then
notmatchreplace[discfound]=true
- match=not notmatchpre[discfound]
+ if notmatchpre[discfound] then
+ match=false
+ end
else
match=false
end
break
end
- elseif char==false then
+ else
if discfound then
notmatchreplace[discfound]=true
- match=not notmatchpre[discfound]
+ if notmatchpre[discfound] then
+ match=false
+ end
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
+ end
+ elseif char==false then
+ if discfound then
+ notmatchreplace[discfound]=true
+ if notmatchpre[discfound] then
+ match=false
+ end
+ 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
- end
- if n<=l then
+ else
notmatchpre[last]=true
+ break
end
- else
+ end
+ if n<=l then
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]
+ 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
+ if notmatchpre[last] then
+ match=false
+ end
+ break
end
- match=not notmatchpre[last]
end
- last=getnext(last)
- else
- match=false
- break
+ if notmatchpre[last] then
+ match=false
+ end
end
+ last=getnext(last)
else
match=false
break
end
+ else
+ match=false
+ break
end
end
end
if match and f>1 then
- local prev=getprev(start)
- if prev then
+ if startprev then
+ local prev=startprev
if prev==checkdisc and (sweeptype=="pre" or sweeptype=="replace") then
prev=getprev(sweepnode)
end
if prev then
- local discfound=nil
+ local discfound
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
+ local class=classes[char]
+ if class then
if class==skipmark or class==skipligature or class==skipbase or (markclass and class=="mark" and not markclass[char]) then
skipped=true
if trace_skips then
show_skip(dataset,sequence,char,ck,class)
end
- prev=getprev(prev)
+ prev=getprev(prev)
elseif seq[n][char] then
- if n>1 then
- prev=getprev(prev)
+ if n>1 then
+ prev=getprev(prev)
end
n=n-1
else
if discfound then
notmatchreplace[discfound]=true
- match=not notmatchpost[discfound]
+ if notmatchpost[discfound] then
+ match=false
+ end
else
match=false
end
@@ -19058,7 +22738,9 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)
else
if discfound then
notmatchreplace[discfound]=true
- match=not notmatchpost[discfound]
+ if notmatchpost[discfound] then
+ match=false
+ end
else
match=false
end
@@ -19067,7 +22749,9 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)
elseif char==false then
if discfound then
notmatchreplace[discfound]=true
- match=not notmatchpost[discfound]
+ if notmatchpost[discfound] then
+ match=false
+ end
else
match=false
end
@@ -19118,7 +22802,9 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)
end
else
notmatchreplace[prev]=true
- match=not notmatchpost[prev]
+ if notmatchpost[prev] then
+ match=false
+ end
break
end
end
@@ -19128,16 +22814,13 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)
end
end
prev=getprev(prev)
- elseif seq[n][32] then
+ elseif id==glue_code and seq[n][32] and isspace(prev,threshold,id) then
n=n-1
prev=getprev(prev)
else
match=false
break
end
- elseif seq[n][32] then
- n=n-1
- prev=getprev(prev)
else
match=false
break
@@ -19152,21 +22835,18 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)
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
+ if not current and (sweeptype=="post" or sweeptype=="replace") then
+ current=getnext(sweepnode)
end
if current then
- local discfound=nil
+ local discfound
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
+ local class=classes[char]
+ if class then
if class==skipmark or class==skipligature or class==skipbase or (markclass and class=="mark" and not markclass[char]) then
skipped=true
if trace_skips then
@@ -19181,7 +22861,9 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)
else
if discfound then
notmatchreplace[discfound]=true
- match=not notmatchpre[discfound]
+ if notmatchpre[discfound] then
+ match=false
+ end
else
match=false
end
@@ -19190,7 +22872,9 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)
else
if discfound then
notmatchreplace[discfound]=true
- match=not notmatchpre[discfound]
+ if notmatchpre[discfound] then
+ match=false
+ end
else
match=false
end
@@ -19199,7 +22883,9 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)
elseif char==false then
if discfound then
notmatchreplace[discfound]=true
- match=not notmatchpre[discfound]
+ if notmatchpre[discfound] then
+ match=false
+ end
else
match=false
end
@@ -19241,7 +22927,9 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)
end
else
notmatchreplace[current]=true
- match=notmatchpre[current]
+ if not notmatchpre[current] then
+ match=false
+ end
break
end
end
@@ -19251,15 +22939,13 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)
else
end
current=getnext(current)
- elseif seq[n][32] then
+ elseif id==glue_code and seq[n][32] and isspace(current,threshold,id) then
n=n+1
+ current=getnext(current)
else
match=false
break
end
- elseif seq[n][32] then
- n=n+1
- current=getnext(current)
else
match=false
break
@@ -19271,99 +22957,13 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)
end
end
if match then
- 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
- 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
- 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
- local chainlookup=chainlookups[1]
- if not chainlookup then
- i=i+1
- 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
- if ok then
- done=true
- 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 or not start then
- break
- elseif start then
- start=getnext(start)
- end
- end
- end
+ chaintrac(head,start,dataset,sequence,rlmode,ck,skipped)
+ end
+ if diskseen or sweepnode then
+ head,start,done=chaindisk(head,start,dataset,sequence,rlmode,ck,skipped)
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
- if trace_contexts then
- logprocess("%s: skipping match",cref(dataset,sequence))
- end
- end
+ head,start,done=chainrun(head,start,last,dataset,sequence,rlmode,ck,skipped)
end
if done then
break
@@ -19420,73 +23020,79 @@ local sequencelists=setmetatableindex(function(t,font)
t[font]=sequences
return sequences
end)
-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 }
+do
+ local autofeatures=fonts.analyzers.features
+ local featuretypes=otf.tables.featuretypes
+ local defaultscript=otf.features.checkeddefaultscript
+ local defaultlanguage=otf.features.checkeddefaultlanguage
+ local wildcard="*"
+ local default="dflt"
+ 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
end
- else
end
+ return false
end
- return false
-end
-function otf.dataset(tfmdata,font)
- 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={
- }
- 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
+ function otf.dataset(tfmdata,font)
+ 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={
+ }
+ rs[language]=rl
+ local sequences=tfmdata.resources.sequences
+ if sequences then
+ 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
end
+ return rl
end
- return rl
end
local function report_disc(what,n)
report_run("%s: %s > %s",what,n,languages.serializediscretionary(n))
@@ -19508,10 +23114,10 @@ local function kernrun(disc,k_run,font,attr,...)
break
end
end
- if prev and (pre or replace) and not ischar(prev,font) then
+ if prev and not ischar(prev,font) then
prev=false
end
- if next and (post or replace) and not ischar(next,font) then
+ if next and not ischar(next,font) then
next=false
end
if pre then
@@ -19537,7 +23143,7 @@ local function kernrun(disc,k_run,font,attr,...)
if k_run(posttail,"postinjections",next,font,attr,...) then
done=true
end
- setnext(posttail,nil)
+ setnext(posttail)
setprev(next,disc)
end
end
@@ -19559,7 +23165,7 @@ local function kernrun(disc,k_run,font,attr,...)
if k_run(replacetail,"replaceinjections",next,font,attr,...) then
done=true
end
- setnext(replacetail,nil)
+ setnext(replacetail)
setprev(next,disc)
end
elseif prev and next then
@@ -19567,12 +23173,11 @@ local function kernrun(disc,k_run,font,attr,...)
if k_run(prevmarks,"emptyinjections",next,font,attr,...) then
done=true
end
- setlink(prev,disc)
- setlink(disc,next)
+ setlink(prev,disc,next)
end
return nextstart,done
end
-local function comprun(disc,c_run,...)
+local function comprun(disc,c_run,...)
if trace_compruns then
report_disc("comp",disc)
end
@@ -19622,17 +23227,58 @@ local function testrun(disc,t_run,c_run,...)
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
+ if (post or replace) and prev then
+ if post then
+ setlink(posttail,next)
+ else
+ post=next
+ end
+ if replace then
+ setlink(replacetail,next)
else
+ replace=next
+ end
+ local d_post=t_run(post,next,...)
+ local d_replace=t_run(replace,next,...)
+ if (d_post and d_post>0) or (d_replace and d_replace>0) then
+ local d=d_replace or d_post
+ if d_post and d<d_post then
+ d=d_post
+ end
+ local head,tail=getnext(disc),disc
+ for i=1,d do
+ tail=getnext(tail)
+ if getid(tail)==disc_code then
+ head,tail=flattendisk(head,tail)
+ end
+ end
+ local next=getnext(tail)
+ setnext(tail)
+ setprev(head)
+ local new=copy_node_list(head)
+ if posttail then
+ setlink(posttail,head)
+ else
+ post=head
+ end
+ if replacetail then
+ setlink(replacetail,new)
+ else
+ replace=new
+ end
+ setlink(disc,next)
+ else
+ if posttail then
+ setnext(posttail)
+ else
+ post=nil
+ end
setnext(replacetail)
+ if replacetail then
+ setnext(replacetail)
+ else
+ replace=nil
+ end
setprev(next,disc)
end
end
@@ -19686,7 +23332,10 @@ local function c_run_single(head,font,attr,lookupcache,step,dataset,sequence,rlm
while start do
local char=ischar(start,font)
if char then
- local a=attr and getattr(start,0)
+ local a
+ if attr then
+ a=getattr(start,0)
+ end
if not a or (a==attr) then
local lookupmatch=lookupcache[char]
if lookupmatch then
@@ -19713,43 +23362,82 @@ local function c_run_single(head,font,attr,lookupcache,step,dataset,sequence,rlm
return head,done
end
local function t_run_single(start,stop,font,attr,lookupcache)
+ local lastd=nil
while start~=stop do
local char=ischar(start,font)
if char then
- local a=attr and getattr(start,0)
+ local a
+ if attr then
+ a=getattr(start,0)
+ end
+ local startnext=getnext(start)
if not a or (a==attr) then
local lookupmatch=lookupcache[char]
if lookupmatch then
- local s=getnext(start)
+ local s=startnext
+ local ss=nil
+ local sstop=s==stop
+ if not s then
+ s=ss
+ ss=nil
+ end
+ while getid(s)==disc_code do
+ ss=getnext(s)
+ s=getfield(s,"replace")
+ if not s then
+ s=ss
+ ss=nil
+ end
+ end
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
+ if sstop then
+ d=1
+ elseif d>0 then
+ d=d+1
+ end
l=lg
s=getnext(s)
+ sstop=s==stop
+ if not s then
+ s=ss
+ ss=nil
+ end
+ while getid(s)==disc_code do
+ ss=getnext(s)
+ s=getfield(s,"replace")
+ if not s then
+ s=ss
+ ss=nil
+ end
+ end
else
break
end
end
if l and l.ligature then
- return true,d>1
+ lastd=d
end
end
+ else
end
- start=getnext(start)
+ if lastd then
+ return lastd
+ end
+ start=startnext
else
break
end
end
end
local function k_run_single(sub,injection,last,font,attr,lookupcache,step,dataset,sequence,rlmode,handler)
- local a=attr and getattr(sub,0)
+ local a
+ if attr then
+ a=getattr(sub,0)
+ end
if not a or (a==attr) then
for n in traverse_nodes(sub) do
if n==last then
@@ -19780,7 +23468,10 @@ local function c_run_multiple(head,font,attr,steps,nofsteps,dataset,sequence,rlm
while start do
local char=ischar(start,font)
if char then
- local a=attr and getattr(start,0)
+ local a
+ if attr then
+ a=getattr(start,0)
+ end
if not a or (a==attr) then
for i=1,nofsteps do
local step=steps[i]
@@ -19818,10 +23509,15 @@ local function c_run_multiple(head,font,attr,steps,nofsteps,dataset,sequence,rlm
return head,done
end
local function t_run_multiple(start,stop,font,attr,steps,nofsteps)
+ local lastd=nil
while start~=stop do
local char=ischar(start,font)
if char then
- local a=attr and getattr(start,0)
+ local a
+ if attr then
+ a=getattr(start,0)
+ end
+ local startnext=getnext(start)
if not a or (a==attr) then
for i=1,nofsteps do
local step=steps[i]
@@ -19829,40 +23525,74 @@ local function t_run_multiple(start,stop,font,attr,steps,nofsteps)
if lookupcache then
local lookupmatch=lookupcache[char]
if lookupmatch then
- local s=getnext(start)
+ local s=startnext
+ local ss=nil
+ local sstop=s==stop
+ if not s then
+ s=ss
+ ss=nil
+ end
+ while getid(s)==disc_code do
+ ss=getnext(s)
+ s=getfield(s,"replace")
+ if not s then
+ s=ss
+ ss=nil
+ end
+ end
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
+ if sstop then
+ d=1
+ elseif d>0 then
+ d=d+1
+ end
l=lg
s=getnext(s)
+ sstop=s==stop
+ if not s then
+ s=ss
+ ss=nil
+ end
+ while getid(s)==disc_code do
+ ss=getnext(s)
+ s=getfield(s,"replace")
+ if not s then
+ s=ss
+ ss=nil
+ end
+ end
else
break
end
end
if l and l.ligature then
- return true,d>1
+ lastd=d
end
end
else
report_missing_coverage(dataset,sequence)
end
end
+ else
end
- start=getnext(start)
+ if lastd then
+ return lastd
+ end
+ start=startnext
else
break
end
end
end
local function k_run_multiple(sub,injection,last,font,attr,steps,nofsteps,dataset,sequence,rlmode,handler)
- local a=attr and getattr(sub,0)
+ local a
+ if attr then
+ a=getattr(sub,0)
+ end
if not a or (a==attr) then
for n in traverse_nodes(sub) do
if n==last then
@@ -19890,7 +23620,7 @@ local function k_run_multiple(sub,injection,last,font,attr,steps,nofsteps,datase
end
end
local function txtdirstate(start,stack,top,rlparmode)
- local dir=getfield(start,"dir")
+ local dir=getdir(start)
local new=1
if dir=="+TRT" then
top=top+1
@@ -19913,7 +23643,7 @@ local function txtdirstate(start,stack,top,rlparmode)
return getnext(start),top,new
end
local function pardirstate(start)
- local dir=getfield(start,"dir")
+ local dir=getdir(start)
local new=0
if dir=="TLT" then
new=1
@@ -19925,7 +23655,10 @@ local function pardirstate(start)
end
return getnext(start),new,new
end
-local function featuresprocessor(head,font,attr)
+otf.helpers=otf.helpers or {}
+otf.helpers.txtdirstate=txtdirstate
+otf.helpers.pardirstate=pardirstate
+local function featuresprocessor(head,font,attr,direction)
local sequences=sequencelists[font]
if not sequencelists then
return head,false
@@ -19934,24 +23667,24 @@ local function featuresprocessor(head,font,attr)
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
+ descriptions=tfmdata.descriptions
+ characters=tfmdata.characters
+ local resources=tfmdata.resources
+ marks=resources.marks
+ classes=resources.classes
+ threshold,
+ factor=getthreshold(font)
+ checkmarks=tfmdata.properties.checkmarks
elseif currentfont~=font then
report_warning("nested call with a different font, level %s, quitting",nesting)
nesting=nesting-1
return head,false
end
- if attr==0 then
- attr=false
- end
head=tonut(head)
if trace_steps then
checkstep(head)
end
- local rlmode=0
+ local initialrl=direction=="TRT" and -1 or 0
local done=false
local datasets=otf.dataset(tfmdata,font,attr)
local dirstack={}
@@ -19960,31 +23693,31 @@ local function featuresprocessor(head,font,attr)
local dataset=datasets[s]
local attribute=dataset[2]
local sequence=dataset[3]
- local rlparmode=0
+ local rlparmode=initialrl
local topstack=0
- local success=false
local typ=sequence.type
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)
+ local h,d,ok=handler(head,head,dataset,sequence,nil,nil,nil,0,font,attr)
if ok then
- success=true
+ done=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)
+ local rlmode=0
while start do
local char=ischar(start,font)
if char then
- local a=attr and getattr(start,0)
+ local a
+ if attr then
+ a=getattr(start,0)
+ end
if not a or (a==attr) then
for i=1,nofsteps do
local step=steps[i]
@@ -19995,7 +23728,7 @@ local function featuresprocessor(head,font,attr)
local ok
head,start,ok=handler(head,start,dataset,sequence,lookupmatch,rlmode,step,i)
if ok then
- success=true
+ done=true
break
end
end
@@ -20014,8 +23747,8 @@ local function featuresprocessor(head,font,attr)
end
end
else
- local start=head
- rlmode=0
+ local start=head
+ local rlmode=initialrl
if nofsteps==1 then
local step=steps[1]
local lookupcache=step.coverage
@@ -20025,11 +23758,13 @@ local function featuresprocessor(head,font,attr)
while start do
local char,id=ischar(start,font)
if char then
- local a=attr and 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
+ local a
+ if attr then
+ if getattr(start,0)==attr and (not attribute or getprop(start,a_state)==attribute) then
+ a=true
+ end
+ elseif not attribute or getprop(start,a_state)==attribute then
+ a=true
end
if a then
local lookupmatch=lookupcache[char]
@@ -20037,7 +23772,7 @@ local function featuresprocessor(head,font,attr)
local ok
head,start,ok=handler(head,start,dataset,sequence,lookupmatch,rlmode,step,1)
if ok then
- success=true
+ done=true
end
end
if start then
@@ -20048,6 +23783,8 @@ local function featuresprocessor(head,font,attr)
end
elseif char==false then
start=getnext(start)
+ elseif id==glue_code then
+ start=getnext(start)
elseif id==disc_code then
local ok
if gpossing then
@@ -20058,7 +23795,7 @@ local function featuresprocessor(head,font,attr)
start,ok=comprun(start,c_run_single,font,attr,lookupcache,step,dataset,sequence,rlmode,handler)
end
if ok then
- success=true
+ done=true
end
elseif id==math_code then
start=getnext(end_of_math(start))
@@ -20075,11 +23812,13 @@ local function featuresprocessor(head,font,attr)
while start do
local char,id=ischar(start,font)
if char then
- local a=attr and 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
+ local a
+ if attr then
+ if getattr(start,0)==attr and (not attribute or getprop(start,a_state)==attribute) then
+ a=true
+ end
+ elseif not attribute or getprop(start,a_state)==attribute then
+ a=true
end
if a then
for i=1,nofsteps do
@@ -20091,7 +23830,7 @@ local function featuresprocessor(head,font,attr)
local ok
head,start,ok=handler(head,start,dataset,sequence,lookupmatch,rlmode,step,i)
if ok then
- success=true
+ done=true
break
elseif not start then
break
@@ -20109,6 +23848,8 @@ local function featuresprocessor(head,font,attr)
end
elseif char==false then
start=getnext(start)
+ elseif id==glue_code then
+ start=getnext(start)
elseif id==disc_code then
local ok
if gpossing then
@@ -20119,7 +23860,7 @@ local function featuresprocessor(head,font,attr)
start,ok=comprun(start,c_run_multiple,font,attr,steps,nofsteps,dataset,sequence,rlmode,handler)
end
if ok then
- success=true
+ done=true
end
elseif id==math_code then
start=getnext(end_of_math(start))
@@ -20133,9 +23874,6 @@ local function featuresprocessor(head,font,attr)
end
end
end
- if success then
- done=true
- end
if trace_steps then
registerstep(head)
end
@@ -20144,6 +23882,30 @@ local function featuresprocessor(head,font,attr)
head=tonode(head)
return head,done
end
+local plugins={}
+otf.plugins=plugins
+function otf.registerplugin(name,f)
+ if type(name)=="string" and type(f)=="function" then
+ plugins[name]={ name,f }
+ end
+end
+local function plugininitializer(tfmdata,value)
+ if type(value)=="string" then
+ tfmdata.shared.plugin=plugins[value]
+ end
+end
+local function pluginprocessor(head,font)
+ local s=fontdata[font].shared
+ local p=s and s.plugin
+ if p then
+ if trace_plugins then
+ report_process("applying plugin %a",p[1])
+ end
+ return p[2](head,font)
+ else
+ return head,false
+ end
+end
local function featuresinitializer(tfmdata,value)
end
registerotffeature {
@@ -20153,18 +23915,36 @@ registerotffeature {
initializers={
position=1,
node=featuresinitializer,
+ plug=plugininitializer,
},
processors={
node=featuresprocessor,
+ plug=pluginprocessor,
}
}
otf.nodemodeinitializer=featuresinitializer
otf.featuresprocessor=featuresprocessor
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
+if fontfeatures then
+ function otf.handlers.trigger_space_kerns(head,start,dataset,sequence,_,_,_,_,font,attr)
+ local features=fontfeatures[font]
+ local enabled=features and features.spacekern and features.kern
+ if enabled then
+ setspacekerns(font,sequence)
+ end
+ return head,start,enabled
+ end
+else
+ function otf.handlers.trigger_space_kerns(head,start,dataset,sequence,_,_,_,_,font,attr)
+ local shared=fontdata[font].shared
+ local features=shared and shared.features
+ local enabled=features and features.spacekern and features.kern
+ if enabled then
+ setspacekerns(font,sequence)
+ end
+ return head,start,enabled
+ end
end
local function hasspacekerns(data)
local sequences=data.resources.sequences
@@ -20198,8 +23978,8 @@ otf.readers.registerextender {
local function spaceinitializer(tfmdata,value)
local resources=tfmdata.resources
local spacekerns=resources and resources.spacekerns
- if spacekerns==nil then
- local properties=tfmdata.properties
+ local properties=tfmdata.properties
+ if value and spacekerns==nil then
if properties and properties.hasspacekerns then
local sequences=resources.sequences
local left={}
@@ -20212,28 +23992,55 @@ local function spaceinitializer(tfmdata,value)
if steps then
local kern=sequence.features.kern
if kern then
- feat=feat or kern
+ if feat then
+ for script,languages in next,kern do
+ local f=feat[script]
+ if f then
+ for l in next,languages do
+ f[l]=true
+ end
+ else
+ feat[script]=languages
+ end
+ end
+ else
+ feat=kern
+ end
for i=1,#steps do
local step=steps[i]
local coverage=step.coverage
- if coverage then
+ local rules=step.rules
+ local format=step.format
+ if rules then
+ elseif coverage then
+ local single=format==gpos_single
local kerns=coverage[32]
if kerns then
for k,v in next,kerns do
- if type(v)=="table" then
- right[k]=v[3]
- else
+ if type(v)~="table" then
right[k]=v
+ elseif single then
+ right[k]=v[3]
+ else
+ local one=v[1]
+ if one then
+ right[k]=one[3]
+ end
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]
- else
+ if type(kern)~="table" then
left[k]=kern
+ elseif single then
+ left[k]=v[3]
+ else
+ local one=v[1]
+ if one then
+ left[k]=one[3]
+ end
end
end
end
@@ -20281,6 +24088,18 @@ registerotffeature {
node=spaceinitializer,
},
}
+local function markinitializer(tfmdata,value)
+ local properties=tfmdata.properties
+ properties.checkmarks=value
+end
+registerotffeature {
+ name="checkmarks",
+ description="check mark widths",
+ default=true,
+ initializers={
+ node=markinitializer,
+ },
+}
end -- closure
@@ -20300,11 +24119,9 @@ 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 otffeatures=fonts.constructors.features.otf
local registerotffeature=otffeatures.register
local nuts=nodes.nuts
local tonode=nuts.tonode
@@ -20325,9 +24142,9 @@ 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 flush_node=nuts.flush_node
local copyinjection=nodes.injections.copy
local unsetvalue=attributes.unsetvalue
local fontdata=fonts.hashes.identifiers
@@ -20686,9 +24503,11 @@ local function initializedevanagi(tfmdata)
local steps=sequence.steps
local nofsteps=sequence.nofsteps
local features=sequence.features
- if features["rphf"] then
+ local has_rphf=features.rphf
+ local has_blwf=features.blwf
+ if has_rphf and has_rphf.deva then
devanagari.reph=true
- elseif features["blwf"] then
+ elseif has_blwf and has_blwf.deva then
devanagari.vattu=true
for i=1,nofsteps do
local step=steps[i]
@@ -20702,57 +24521,60 @@ local function initializedevanagi(tfmdata)
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
+ for kind,spec in next,features do
+ if spec.dev2 and valid[kind] then
+ for i=1,nofsteps do
+ local step=steps[i]
+ local coverage=step.coverage
+ if coverage then
+ local reph=false
+ if kind=="rphf" then
+ if true 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
- if reph then
- break
- end
+ else
end
end
- else
+ seqsubset[#seqsubset+1]={ kind,coverage,reph }
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 kind=="pref" then
+ 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
- pre_base_reordering_consonants[k]=found
break
end
end
- if found then
- break
- end
end
end
end
@@ -20837,7 +24659,7 @@ local function deva_reorder(head,start,stop,font,attr,nbspaces)
if current==stop then
stop=getprev(stop)
head=remove_node(head,current)
- free_node(current)
+ flush_node(current)
return head,stop,nbspaces
else
nbspaces=nbspaces+1
@@ -20875,7 +24697,7 @@ local function deva_reorder(head,start,stop,font,attr,nbspaces)
setchar(current,getchar(tempcurrent))
local freenode=getnext(current)
setlink(current,tmp)
- free_node(freenode)
+ flush_node(freenode)
flush_list(tempcurrent)
if changestop then
stop=current
@@ -21112,7 +24934,7 @@ local function deva_reorder(head,start,stop,font,attr,nbspaces)
if getchar(base)==c_nbsp then
nbspaces=nbspaces-1
head=remove_node(head,base)
- free_node(base)
+ flush_node(base)
end
return head,stop,nbspaces
end
@@ -21139,6 +24961,8 @@ function handlers.devanagari_reorder_matras(head,start)
start=startnext
break
end
+ else
+ break
end
current=next
end
@@ -21151,12 +24975,12 @@ function handlers.devanagari_reorder_reph(head,start)
local startfont=getfont(start)
local startattr=getprop(start,a_syllabe)
while current do
- local char=ischar(current,font)
+ local char=ischar(current,startfont)
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)
+ local nextchar=ischar(next,startfont)
if nextchar and zw_char[nextchar] and getprop(next,a_syllabe)==startattr then
current=next
next=getnext(current)
@@ -21178,13 +25002,12 @@ function handlers.devanagari_reorder_reph(head,start)
if not startnext then
current=getnext(start)
while current do
- local char=ischar(current,font)
+ local char=ischar(current,startfont)
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(getprev(current),start)
setlink(start,current)
start=startnext
startattr=getprop(start,a_syllabe)
@@ -21200,7 +25023,7 @@ function handlers.devanagari_reorder_reph(head,start)
current=getnext(start)
local c=nil
while current do
- local char=ischar(current,font)
+ local char=ischar(current,startfont)
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
@@ -21213,8 +25036,7 @@ function handlers.devanagari_reorder_reph(head,start)
if c then
startnext=getnext(start)
head=remove_node(head,start)
- local prev=getprev(c)
- setlink(prev,start)
+ setlink(getprev(c),start)
setlink(start,c)
start=startnext
startattr=getprop(start,a_syllabe)
@@ -21224,7 +25046,7 @@ function handlers.devanagari_reorder_reph(head,start)
current=start
local next=getnext(current)
while next do
- local nextchar=ischar(next,font)
+ local nextchar=ischar(next,startfont)
if nextchar and getprop(next,a_syllabe)==startattr then
current=next
next=getnext(current)
@@ -21235,9 +25057,8 @@ function handlers.devanagari_reorder_reph(head,start)
if start~=current then
startnext=getnext(start)
head=remove_node(head,start)
- local next=getnext(current)
- setlink(start,next)
- setlink(current,"next",start)
+ setlink(start,getnext(current))
+ setlink(current,start)
start=startnext
end
end
@@ -21250,12 +25071,12 @@ function handlers.devanagari_reorder_pre_base_reordering_consonants(head,start)
local startfont=getfont(start)
local startattr=getprop(start,a_syllabe)
while current do
- local char=ischar(current,font)
+ local char=ischar(current,startfont)
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)
+ local nextchar=ischar(next,startfont)
if nextchar and getprop(next,a_syllabe)==startattr then
if nextchar==c_zwnj or nextchar==c_zwj then
current=next
@@ -21279,13 +25100,12 @@ function handlers.devanagari_reorder_pre_base_reordering_consonants(head,start)
current=getnext(start)
startattr=getprop(start,a_syllabe)
while current do
- local char=ischar(current,font)
+ local char=ischar(current,startfont)
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(getprev(current),start)
setlink(start,current)
start=startnext
break
@@ -21345,21 +25165,7 @@ local function dev2_reorder(head,start,stop,font,attr,nbspaces)
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
+ reph=subset[3]
local current=start
local last=getnext(stop)
while current~=last do
@@ -21392,7 +25198,7 @@ local function dev2_reorder(head,start,stop,font,attr,nbspaces)
if current~=stop then
local c=locl[current] or getchar(current)
local found=lookupcache[c]
- if found then
+ if found then
local next=getnext(current)
local n=locl[next] or getchar(next)
if found[n] then
@@ -21480,7 +25286,7 @@ local function dev2_reorder(head,start,stop,font,attr,nbspaces)
if current==stop then
stop=getprev(stop)
head=remove_node(head,current)
- free_node(current)
+ flush_node(current)
return head,stop,nbspaces
else
nbspaces=nbspaces+1
@@ -21592,8 +25398,7 @@ local function dev2_reorder(head,start,stop,font,attr,nbspaces)
end
start=current
end
- local prev=getprev(halfpos)
- setlink(prev,current)
+ setlink(getprev(halfpos),current)
setlink(current,halfpos)
halfpos=current
elseif above_mark[char] then
@@ -21619,12 +25424,11 @@ local function dev2_reorder(head,start,stop,font,attr,nbspaces)
local prev=getprev(current)
if prev~=target then
local next=getnext(current)
- setlink(next,prev)
+ setlink(prev,next)
if current==stop then
stop=prev
end
- local next=getnext(target)
- setlink(current,next)
+ setlink(current,getnext(target))
setlink(target,current)
end
end
@@ -21649,8 +25453,7 @@ local function dev2_reorder(head,start,stop,font,attr,nbspaces)
if stop==next then
stop=current
end
- local prev=getprev(c)
- setlink(next,prev)
+ setlink(getprev(c),next)
local nextnext=getnext(next)
setnext(current,nextnext)
local nextnextnext=getnext(nextnext)
@@ -21663,9 +25466,12 @@ local function dev2_reorder(head,start,stop,font,attr,nbspaces)
current=getnext(current)
end
if getchar(base)==c_nbsp then
+ if base==stop then
+ stop=getprev(stop)
+ end
nbspaces=nbspaces-1
head=remove_node(head,base)
- free_node(base)
+ flush_node(base)
end
return head,stop,nbspaces
end
@@ -21704,7 +25510,7 @@ local function analyze_next_chars_one(c,font,variant)
elseif (vv==c_zwnj or vv==c_zwj) and halant[vvv] then
local nnnn=getnext(nnn)
if nnnn then
- local vvvv=ischar(nnnn)
+ local vvvv=ischar(nnnn,font)
if vvvv and consonant[vvvv] then
c=nnnn
end
@@ -21727,7 +25533,7 @@ local function analyze_next_chars_one(c,font,variant)
local nn=getnext(n)
if nn then
local vv=ischar(nn,font)
- if vv and zw_char[vv] then
+ if vv and zw_char[v] then
n=nn
v=vv
nn=getnext(nn)
@@ -22257,6 +26063,1340 @@ end -- closure
do -- begin closure to overcome local limits and interference
+if not modules then modules={} end modules ['font-ocl']={
+ 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 tostring,next,format=tostring,next,string.format
+local round,max=math.round,math.round
+local sortedkeys,sortedhash=table.sortedkeys,table.sortedhash
+local setmetatableindex=table.setmetatableindex
+local formatters=string.formatters
+local tounicode=fonts.mappings.tounicode
+local otf=fonts.handlers.otf
+local f_color=formatters["pdf:direct:%f %f %f rg"]
+local f_gray=formatters["pdf:direct:%f g"]
+if context then
+ local startactualtext=nil
+ local stopactualtext=nil
+ function otf.getactualtext(s)
+ if not startactualtext then
+ startactualtext=backends.codeinjections.startunicodetoactualtextdirect
+ stopactualtext=backends.codeinjections.stopunicodetoactualtextdirect
+ end
+ return startactualtext(s),stopactualtext()
+ end
+else
+ local tounicode=fonts.mappings.tounicode16
+ function otf.getactualtext(s)
+ return
+ "/Span << /ActualText <feff"..n.."> >> BDC",
+ "EMC"
+ end
+end
+local sharedpalettes={}
+local hash=setmetatableindex(function(t,k)
+ local v={ "special",k }
+ t[k]=v
+ return v
+end)
+if context then
+ local colors=attributes.list[attributes.private('color')] or {}
+ local transparencies=attributes.list[attributes.private('transparency')] or {}
+ function otf.registerpalette(name,values)
+ sharedpalettes[name]=values
+ for i=1,#values do
+ local v=values[i]
+ local c=nil
+ local t=nil
+ if type(v)=="table" then
+ c=colors.register(name,"rgb",
+ max(round((v.r or 0)*255),255)/255,
+ max(round((v.g or 0)*255),255)/255,
+ max(round((v.b or 0)*255),255)/255
+ )
+ else
+ c=colors[v]
+ t=transparencies[v]
+ end
+ if c and t then
+ values[i]=hash["pdf:direct:"..lpdf.color(1,c).." "..lpdf.transparency(t)]
+ elseif c then
+ values[i]=hash["pdf:direct:"..lpdf.color(1,c)]
+ elseif t then
+ values[i]=hash["pdf:direct:"..lpdf.color(1,t)]
+ end
+ end
+ end
+else
+ function otf.registerpalette(name,values)
+ sharedpalettes[name]=values
+ for i=1,#values do
+ local v=values[i]
+ values[i]=hash[f_color(
+ max(round((v.r or 0)*255),255)/255,
+ max(round((v.g or 0)*255),255)/255,
+ max(round((v.b or 0)*255),255)/255
+ )]
+ end
+ end
+end
+local function convert(t,k)
+ local v={}
+ for i=1,#k do
+ local p=k[i]
+ local r,g,b=p[1],p[2],p[3]
+ if r==g and g==b then
+ v[i]=hash[f_gray(r/255)]
+ else
+ v[i]=hash[f_color(r/255,g/255,b/255)]
+ end
+ end
+ t[k]=v
+ return v
+end
+local function initializecolr(tfmdata,kind,value)
+ if value then
+ local resources=tfmdata.resources
+ local palettes=resources.colorpalettes
+ if palettes then
+ local converted=resources.converted
+ if not converted then
+ converted=setmetatableindex(convert)
+ resources.converted=converted
+ end
+ local colorvalues=sharedpalettes[value] or converted[palettes[tonumber(value) or 1] or palettes[1]] or {}
+ local classes=#colorvalues
+ if classes==0 then
+ return
+ end
+ local characters=tfmdata.characters
+ local descriptions=tfmdata.descriptions
+ local properties=tfmdata.properties
+ properties.virtualized=true
+ tfmdata.fonts={
+ { id=0 }
+ }
+ local widths=setmetatableindex(function(t,k)
+ local v={ "right",-k }
+ t[k]=v
+ return v
+ end)
+ local getactualtext=otf.getactualtext
+ local default=colorvalues[#colorvalues]
+ local b,e=getactualtext(tounicode(0xFFFD))
+ local start={ "special","pdf:page:q" }
+ local stop={ "special","pdf:raw:Q" }
+ local actualb={ "special","pdf:page:"..b }
+ local actuale={ "special","pdf:page:"..e }
+ local cache=setmetatableindex(function(t,k)
+ local v={ "char",k }
+ t[k]=v
+ return v
+ end)
+ for unicode,character in next,characters do
+ local description=descriptions[unicode]
+ if description then
+ local colorlist=description.colors
+ if colorlist then
+ local u=description.unicode or characters[unicode].unicode
+ local w=character.width or 0
+ local s=#colorlist
+ local goback=w~=0 and widths[w] or nil
+ local t={
+ start,
+ not u and actualb or { "special","pdf:raw:"..getactualtext(tounicode(u)) }
+ }
+ local n=2
+ local l=nil
+ for i=1,s do
+ local entry=colorlist[i]
+ local v=colorvalues[entry.class] or default
+ if v and l~=v then
+ n=n+1 t[n]=v
+ l=v
+ end
+ n=n+1 t[n]=cache[entry.slot]
+ if s>1 and i<s and goback then
+ n=n+1 t[n]=goback
+ end
+ end
+ n=n+1 t[n]=actuale
+ n=n+1 t[n]=stop
+ character.commands=t
+ end
+ end
+ end
+ end
+ end
+end
+fonts.handlers.otf.features.register {
+ name="colr",
+ description="color glyphs",
+ manipulators={
+ base=initializecolr,
+ node=initializecolr,
+ }
+}
+do
+ local nofstreams=0
+ local f_name=formatters[ [[pdf-glyph-%05i]] ]
+ local f_used=context and formatters[ [[original:///%s]] ] or formatters[ [[%s]] ]
+ local hashed={}
+ local cache={}
+ function otf.storepdfdata(pdf)
+ local done=hashed[pdf]
+ if not done then
+ nofstreams=nofstreams+1
+ local o,n=epdf.openMemStream(pdf,#pdf,f_name(nofstreams))
+ cache[n]=o
+ done=f_used(n)
+ hashed[pdf]=done
+ end
+ return nil,done,nil
+ end
+end
+local function pdftovirtual(tfmdata,pdfshapes,kind)
+ if not tfmdata or not pdfshapes or not kind then
+ return
+ end
+ local characters=tfmdata.characters
+ local properties=tfmdata.properties
+ local parameters=tfmdata.parameters
+ local hfactor=parameters.hfactor
+ properties.virtualized=true
+ tfmdata.fonts={
+ { id=0 }
+ }
+ local getactualtext=otf.getactualtext
+ local storepdfdata=otf.storepdfdata
+ for unicode,character in sortedhash(characters) do
+ local index=character.index
+ if index then
+ local pdf=pdfshapes[index]
+ local typ=type(pdf)
+ local data=nil
+ local dx=nil
+ local dy=nil
+ if typ=="table" then
+ data=pdf.data
+ dx=pdf.dx or 0
+ dy=pdf.dy or 0
+ elseif typ=="string" then
+ data=pdf
+ dx=0
+ dy=0
+ end
+ if data then
+ local setcode,name,nilcode=storepdfdata(data)
+ if name then
+ local bt,et=getactualtext(unicode)
+ local wd=character.width or 0
+ local ht=character.height or 0
+ local dp=character.depth or 0
+ character.commands={
+ { "special","pdf:direct:"..bt },
+ { "down",dp+dy*hfactor },
+ { "right",dx*hfactor },
+ { "image",{ filename=name,width=wd,height=ht,depth=dp } },
+ { "special","pdf:direct:"..et },
+ }
+ character[kind]=true
+ end
+ end
+ end
+ end
+end
+local otfsvg=otf.svg or {}
+otf.svg=otfsvg
+otf.svgenabled=true
+do
+ local report_svg=logs.reporter("fonts","svg conversion")
+ local loaddata=io.loaddata
+ local savedata=io.savedata
+ local remove=os.remove
+ if context and xml.convert then
+ local xmlconvert=xml.convert
+ local xmlfirst=xml.first
+ function otfsvg.filterglyph(entry,index)
+ local svg=xmlconvert(entry.data)
+ local root=svg and xmlfirst(svg,"/svg[@id='glyph"..index.."']")
+ local data=root and tostring(root)
+ return data
+ end
+ else
+ function otfsvg.filterglyph(entry,index)
+ return entry.data
+ end
+ end
+ local runner=sandbox and sandbox.registerrunner {
+ name="otfsvg",
+ program="inkscape",
+ method="pipeto",
+ template="--shell > temp-otf-svg-shape.log",
+ reporter=report_svg,
+ }
+ if not runner then
+ runner=function()
+ return io.open("inkscape --shell > temp-otf-svg-shape.log","w")
+ end
+ end
+ function otfsvg.topdf(svgshapes)
+ local pdfshapes={}
+ local inkscape=runner()
+ if inkscape then
+ local nofshapes=#svgshapes
+ local f_svgfile=formatters["temp-otf-svg-shape-%i.svg"]
+ local f_pdffile=formatters["temp-otf-svg-shape-%i.pdf"]
+ local f_convert=formatters["%s --export-pdf=%s\n"]
+ local filterglyph=otfsvg.filterglyph
+ local nofdone=0
+ report_svg("processing %i svg containers",nofshapes)
+ statistics.starttiming()
+ for i=1,nofshapes do
+ local entry=svgshapes[i]
+ for index=entry.first,entry.last do
+ local data=filterglyph(entry,index)
+ if data and data~="" then
+ local svgfile=f_svgfile(index)
+ local pdffile=f_pdffile(index)
+ savedata(svgfile,data)
+ inkscape:write(f_convert(svgfile,pdffile))
+ pdfshapes[index]=true
+ nofdone=nofdone+1
+ if nofdone%100==0 then
+ report_svg("%i shapes processed",nofdone)
+ end
+ end
+ end
+ end
+ inkscape:write("quit\n")
+ inkscape:close()
+ report_svg("processing %i pdf results",nofshapes)
+ for index in next,pdfshapes do
+ local svgfile=f_svgfile(index)
+ local pdffile=f_pdffile(index)
+ pdfshapes[index]=loaddata(pdffile)
+ remove(svgfile)
+ remove(pdffile)
+ end
+ statistics.stoptiming()
+ if statistics.elapsedseconds then
+ report_svg("svg conversion time %s",statistics.elapsedseconds() or "-")
+ end
+ end
+ return pdfshapes
+ end
+end
+local function initializesvg(tfmdata,kind,value)
+ if value and otf.svgenabled then
+ local svg=tfmdata.properties.svg
+ local hash=svg and svg.hash
+ local timestamp=svg and svg.timestamp
+ if not hash then
+ return
+ end
+ local pdffile=containers.read(otf.pdfcache,hash)
+ local pdfshapes=pdffile and pdffile.pdfshapes
+ if not pdfshapes or pdffile.timestamp~=timestamp then
+ local svgfile=containers.read(otf.svgcache,hash)
+ local svgshapes=svgfile and svgfile.svgshapes
+ pdfshapes=svgshapes and otfsvg.topdf(svgshapes) or {}
+ containers.write(otf.pdfcache,hash,{
+ pdfshapes=pdfshapes,
+ timestamp=timestamp,
+ })
+ end
+ pdftovirtual(tfmdata,pdfshapes,"svg")
+ end
+end
+fonts.handlers.otf.features.register {
+ name="svg",
+ description="svg glyphs",
+ manipulators={
+ base=initializesvg,
+ node=initializesvg,
+ }
+}
+local otfsbix=otf.sbix or {}
+otf.sbix=otfsbix
+otf.sbixenabled=true
+do
+ local report_sbix=logs.reporter("fonts","sbix conversion")
+ local loaddata=io.loaddata
+ local savedata=io.savedata
+ local remove=os.remove
+ local runner=sandbox and sandbox.registerrunner {
+ name="otfsbix",
+ program="gm",
+ template="convert -quality 100 temp-otf-sbix-shape.sbix temp-otf-sbix-shape.pdf > temp-otf-svg-shape.log",
+ }
+ if not runner then
+ runner=function()
+ return os.execute("gm convert -quality 100 temp-otf-sbix-shape.sbix temp-otf-sbix-shape.pdf > temp-otf-svg-shape.log")
+ end
+ end
+ function otfsbix.topdf(sbixshapes)
+ local pdfshapes={}
+ local sbixfile="temp-otf-sbix-shape.sbix"
+ local pdffile="temp-otf-sbix-shape.pdf"
+ local nofdone=0
+ local indices=sortedkeys(sbixshapes)
+ local nofindices=#indices
+ report_sbix("processing %i sbix containers",nofindices)
+ statistics.starttiming()
+ for i=1,nofindices do
+ local index=indices[i]
+ local entry=sbixshapes[index]
+ local data=entry.data
+ local x=entry.x
+ local y=entry.y
+ savedata(sbixfile,data)
+ runner()
+ pdfshapes[index]={
+ x=x~=0 and x or nil,
+ y=y~=0 and y or nil,
+ data=loaddata(pdffile),
+ }
+ nofdone=nofdone+1
+ if nofdone%100==0 then
+ report_sbix("%i shapes processed",nofdone)
+ end
+ end
+ report_sbix("processing %i pdf results",nofindices)
+ remove(sbixfile)
+ remove(pdffile)
+ statistics.stoptiming()
+ if statistics.elapsedseconds then
+ report_sbix("sbix conversion time %s",statistics.elapsedseconds() or "-")
+ end
+ return pdfshapes
+ end
+end
+local function initializesbix(tfmdata,kind,value)
+ if value and otf.sbixenabled then
+ local sbix=tfmdata.properties.sbix
+ local hash=sbix and sbix.hash
+ local timestamp=sbix and sbix.timestamp
+ if not hash then
+ return
+ end
+ local pdffile=containers.read(otf.pdfcache,hash)
+ local pdfshapes=pdffile and pdffile.pdfshapes
+ if not pdfshapes or pdffile.timestamp~=timestamp then
+ local sbixfile=containers.read(otf.sbixcache,hash)
+ local sbixshapes=sbixfile and sbixfile.sbixshapes
+ pdfshapes=sbixshapes and otfsbix.topdf(sbixshapes) or {}
+ containers.write(otf.pdfcache,hash,{
+ pdfshapes=pdfshapes,
+ timestamp=timestamp,
+ })
+ end
+ pdftovirtual(tfmdata,pdfshapes,"sbix")
+ end
+end
+fonts.handlers.otf.features.register {
+ name="sbix",
+ description="sbix glyphs",
+ manipulators={
+ base=initializesbix,
+ node=initializesbix,
+ }
+}
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+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,utflen,utfsplit=utf.byte,utf.len,utf.split
+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",
+}
+local names={
+ gsub_single="gsub",
+ gsub_multiple="gsub",
+ gsub_alternate="gsub",
+ gsub_ligature="gsub",
+ gsub_context="gsub",
+ gsub_contextchain="gsub",
+ gsub_reversecontextchain="gsub",
+ gpos_single="gpos",
+ gpos_pair="gpos",
+ gpos_cursive="gpos",
+ gpos_mark2base="gpos",
+ gpos_mark2ligature="gpos",
+ gpos_mark2mark="gpos",
+ gpos_context="gpos",
+ gpos_contextchain="gpos",
+}
+setmetatableindex(types,function(t,k) t[k]=k return k end)
+local everywhere={ ["*"]={ ["*"]=true } }
+local noflags={ false,false,false,false }
+local function getrange(sequences,category)
+ local count=#sequences
+ local first=nil
+ local last=nil
+ for i=1,count do
+ local t=sequences[i].type
+ if t and names[t]==category then
+ if not first then
+ first=i
+ end
+ last=i
+ end
+ end
+ return first or 1,last or count
+end
+local function validspecification(specification,name)
+ local dataset=specification.dataset
+ if dataset then
+ elseif specification[1] then
+ dataset=specification
+ specification={ dataset=dataset }
+ else
+ dataset={ { data=specification.data } }
+ specification.data=nil
+ specification.dataset=dataset
+ end
+ local first=dataset[1]
+ if first then
+ first=first.data
+ end
+ if not first then
+ report_otf("invalid feature specification, no dataset")
+ return
+ end
+ if type(name)~="string" then
+ name=specification.name or first.name
+ end
+ if type(name)~="string" then
+ report_otf("invalid feature specification, no name")
+ return
+ end
+ local n=#dataset
+ if n>0 then
+ for i=1,n do
+ setmetatableindex(dataset[i],specification)
+ end
+ return specification,name
+ end
+end
+local function addfeature(data,feature,specifications)
+ if not specifications then
+ report_otf("missing specification")
+ return
+ end
+ local descriptions=data.descriptions
+ local resources=data.resources
+ local features=resources.features
+ local sequences=resources.sequences
+ if not features or not sequences then
+ report_otf("missing specification")
+ return
+ end
+ local alreadydone=resources.alreadydone
+ if not alreadydone then
+ alreadydone={}
+ resources.alreadydone=alreadydone
+ end
+ if alreadydone[specifications] then
+ return
+ else
+ alreadydone[specifications]=true
+ end
+ local fontfeatures=resources.features or everywhere
+ local unicodes=resources.unicodes
+ local splitter=lpeg.splitter(" ",unicodes)
+ local done=0
+ local skip=0
+ local aglunicodes=false
+ local specifications=validspecification(specifications,feature)
+ if not specifications then
+ return
+ end
+ local function tounicode(code)
+ if not code then
+ return
+ end
+ if type(code)=="number" then
+ return code
+ end
+ local u=unicodes[code]
+ if u then
+ return u
+ end
+ if utflen(code)==1 then
+ u=utfbyte(code)
+ if u then
+ return u
+ end
+ end
+ if not aglunicodes then
+ aglunicodes=fonts.encodings.agl.unicodes
+ end
+ return aglunicodes[code]
+ end
+ local coverup=otf.coverup
+ local coveractions=coverup.actions
+ local stepkey=coverup.stepkey
+ local register=coverup.register
+ local function prepare_substitution(list,featuretype,nocheck)
+ local coverage={}
+ local cover=coveractions[featuretype]
+ for code,replacement in next,list do
+ local unicode=tounicode(code)
+ local description=descriptions[unicode]
+ if not nocheck and not description then
+ skip=skip+1
+ else
+ 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
+ end
+ end
+ return coverage
+ end
+ local function prepare_alternate(list,featuretype,nocheck)
+ local coverage={}
+ local cover=coveractions[featuretype]
+ for code,replacement in next,list do
+ local unicode=tounicode(code)
+ local description=descriptions[unicode]
+ if not nocheck and 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]=(nocheck or 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,nocheck)
+ local coverage={}
+ local cover=coveractions[featuretype]
+ for code,replacement in next,list do
+ local unicode=tounicode(code)
+ local description=descriptions[unicode]
+ if not nocheck and 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 nocheck or 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,nocheck)
+ local coverage={}
+ local cover=coveractions[featuretype]
+ for code,ligature in next,list do
+ local unicode=tounicode(code)
+ local description=descriptions[unicode]
+ if not nocheck and not description then
+ skip=skip+1
+ else
+ 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 nocheck or 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
+ end
+ end
+ return coverage
+ end
+ local function resetspacekerns()
+ data.properties.hasspacekerns=true
+ data.resources .spacekerns=nil
+ end
+ local function prepare_kern(list,featuretype)
+ local coverage={}
+ local cover=coveractions[featuretype]
+ local isspace=false
+ 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
+ if u==32 then
+ isspace=true
+ end
+ end
+ end
+ if next(r) then
+ cover(coverage,unicode,r)
+ done=done+1
+ if unicode==32 then
+ isspace=true
+ end
+ else
+ skip=skip+1
+ end
+ else
+ skip=skip+1
+ end
+ end
+ if isspace then
+ resetspacekerns()
+ end
+ return coverage
+ end
+ local function prepare_pair(list,featuretype)
+ local coverage={}
+ local cover=coveractions[featuretype]
+ if cover then
+ 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
+ if u==32 then
+ isspace=true
+ end
+ end
+ end
+ if next(r) then
+ cover(coverage,unicode,r)
+ done=done+1
+ if unicode==32 then
+ isspace=true
+ end
+ else
+ skip=skip+1
+ end
+ else
+ skip=skip+1
+ end
+ end
+ if isspace then
+ resetspacekerns()
+ end
+ else
+ report_otf("unknown cover type %a",featuretype)
+ end
+ return coverage
+ end
+ local function prepare_chain(list,featuretype,sublookups)
+ 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 t=type(v)
+ if t=="table" then
+ for i=1,#v do
+ local vi=v[i]
+ if type(vi)~="table" then
+ v[i]={ vi }
+ end
+ end
+ elseif t=="number" then
+ local lookup=sublookups[v]
+ if lookup then
+ lookups[k]={ lookup }
+ if not subtype then
+ subtype=lookup.type
+ end
+ else
+ lookups[k]=false
+ end
+ else
+ lookups[k]=false
+ end
+ end
+ end
+ if nofsequences>0 then
+ 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
+ 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
+ return coverage
+ end
+ local dataset=specifications.dataset
+ local function report(name,category,position,first,last,sequences)
+ report_otf("injecting name %a of category %a at position %i in [%i,%i] of [%i,%i]",
+ name,category,position,first,last,1,#sequences)
+ end
+ local function inject(specification,sequences,sequence,first,last,category,name)
+ local position=specification.position or false
+ if not position then
+ position=specification.prepend
+ if position==true then
+ if trace_loading then
+ report(name,category,first,first,last,sequences)
+ end
+ insert(sequences,first,sequence)
+ return
+ end
+ end
+ if not position then
+ position=specification.append
+ if position==true then
+ if trace_loading then
+ report(name,category,last+1,first,last,sequences)
+ end
+ insert(sequences,last+1,sequence)
+ return
+ end
+ end
+ local kind=type(position)
+ if kind=="string" then
+ local index=false
+ for i=first,last do
+ local s=sequences[i]
+ local f=s.features
+ if f then
+ for k in next,f do
+ if k==position then
+ index=i
+ break
+ end
+ end
+ if index then
+ break
+ end
+ end
+ end
+ if index then
+ position=index
+ else
+ position=last+1
+ end
+ elseif kind=="number" then
+ if position<0 then
+ position=last-position+1
+ end
+ if position>last then
+ position=last+1
+ elseif position<first then
+ position=first
+ end
+ else
+ position=last+1
+ end
+ if trace_loading then
+ report(name,category,position,first,last,sequences)
+ end
+ insert(sequences,position,sequence)
+ end
+ for s=1,#dataset do
+ local specification=dataset[s]
+ local valid=specification.valid
+ local feature=specification.name or feature
+ if not feature or feature=="" then
+ report_otf("no valid name given for extra feature")
+ elseif not valid or valid(data,specification,feature) then
+ local initialize=specification.initialize
+ if initialize then
+ 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 nocheck=specification.nocheck
+ local futuresteps=specification.futuresteps
+ 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,nocheck)
+ elseif featuretype=="ligature" then
+ coverage=prepare_ligature(list,featuretype,nocheck)
+ elseif featuretype=="alternate" then
+ coverage=prepare_alternate(list,featuretype,nocheck)
+ elseif featuretype=="multiple" then
+ coverage=prepare_multiple(list,featuretype,nocheck)
+ 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,
+ flags=featureflags,
+ 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,nocheck)
+ elseif featuretype=="ligature" then
+ category="gsub"
+ coverage=prepare_ligature(list,featuretype,nocheck)
+ elseif featuretype=="alternate" then
+ category="gsub"
+ coverage=prepare_alternate(list,featuretype,nocheck)
+ elseif featuretype=="multiple" then
+ category="gsub"
+ coverage=prepare_multiple(list,featuretype,nocheck)
+ 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
+ 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 steptype=types[featuretype]
+ local sequence={
+ chain=featurechain,
+ features={ [feature]=askedfeatures },
+ flags=featureflags,
+ name=feature,
+ order=featureorder,
+ [stepkey]=steps,
+ nofsteps=nofsteps,
+ type=steptype,
+ }
+ local first,last=getrange(sequences,category)
+ inject(specification,sequences,sequence,first,last,category,feature)
+ 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={}
+local knownfeatures={}
+function otf.addfeature(name,specification)
+ if type(name)=="table" then
+ specification=name
+ end
+ if type(specification)~="table" then
+ report_otf("invalid feature specification, no valid table")
+ return
+ end
+ specification,name=validspecification(specification,name)
+ if name and specification then
+ local slot=knownfeatures[name]
+ if not slot then
+ slot=#extrafeatures+1
+ knownfeatures[name]=slot
+ elseif specification.overload==false then
+ slot=#extrafeatures+1
+ knownfeatures[name]=slot
+ else
+ end
+ specification.name=name
+ extrafeatures[slot]=specification
+ end
+end
+local function enhance(data,filename,raw)
+ for slot=1,#extrafeatures do
+ local specification=extrafeatures[slot]
+ addfeature(data,specification.name,specification)
+ end
+end
+otf.enhancers.enhance=enhance
+otf.enhancers.register("check extra features",enhance)
+local tlig={
+ [0x2013]={ 0x002D,0x002D },
+ [0x2014]={ 0x002D,0x002D,0x002D },
+}
+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',
+}
+local trep={
+ [0x0027]=0x2019,
+}
+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',
+}
+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)
+registerotffeature {
+ name='anum',
+ description='arabic digits',
+}
+local lookups={}
+local protect={}
+local revert={}
+local zwj={ 0x200C }
+otf.addfeature {
+ name="blockligatures",
+ type="chainsubstitution",
+ nocheck=true,
+ prepend=true,
+ future=true,
+ lookups={
+ {
+ type="multiple",
+ data=lookups,
+ },
+ },
+ data={
+ rules=protect,
+ }
+}
+otf.addfeature {
+ name="blockligatures",
+ type="chainsubstitution",
+ nocheck=true,
+ append=true,
+ overload=false,
+ lookups={
+ {
+ type="ligature",
+ data=lookups,
+ },
+ },
+ data={
+ rules=revert,
+ }
+}
+registerotffeature {
+ name='blockligatures',
+ description='block certain ligatures',
+}
+local settings_to_array=utilities.parsers and utilities.parsers.settings_to_array
+ or function(s) return string.split(s,",") end
+local function blockligatures(str)
+ local t=settings_to_array(str)
+ for i=1,#t do
+ local ti=utfsplit(t[i])
+ if #ti>1 then
+ local one=ti[1]
+ local two=ti[2]
+ lookups[one]={ one,0x200C }
+ local one={ one }
+ local two={ two }
+ local new=#protect+1
+ protect[new]={
+ current={ one,two },
+ lookups={ 1 },
+ }
+ revert[new]={
+ current={ one,zwj },
+ after={ two },
+ lookups={ 1 },
+ }
+ end
+ end
+end
+otf.helpers.blockligatures=blockligatures
+if context then
+ interfaces.implement {
+ name="blockligatures",
+ arguments="string",
+ actions=blockligatures,
+ }
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
if not modules then modules={} end modules ['font-onr']={
version=1.001,
comment="companion to font-ini.mkiv",
@@ -22265,51 +27405,25 @@ if not modules then modules={} end modules ['font-onr']={
license="see context related readme files"
}
local fonts,logs,trackers,resolvers=fonts,logs,trackers,resolvers
-local next,type,tonumber,rawget=next,type,tonumber,rawget
+local next,type,tonumber,rawget,rawset=next,type,tonumber,rawget,rawset
local match,lower,gsub,strip,find=string.match,string.lower,string.gsub,string.strip,string.find
local char,byte,sub=string.char,string.byte,string.sub
local abs=math.abs
local bxor,rshift=bit32.bxor,bit32.rshift
-local P,S,R,Cmt,C,Ct,Cs,Carg=lpeg.P,lpeg.S,lpeg.R,lpeg.Cmt,lpeg.C,lpeg.Ct,lpeg.Cs,lpeg.Carg
+local P,S,R,Cmt,C,Ct,Cs,Carg,Cf,Cg=lpeg.P,lpeg.S,lpeg.R,lpeg.Cmt,lpeg.C,lpeg.Ct,lpeg.Cs,lpeg.Carg,lpeg.Cf,lpeg.Cg
local lpegmatch,patterns=lpeg.match,lpeg.patterns
local trace_indexing=false trackers.register("afm.indexing",function(v) trace_indexing=v end)
local trace_loading=false trackers.register("afm.loading",function(v) trace_loading=v end)
local report_afm=logs.reporter("fonts","afm loading")
-local report_afm=logs.reporter("fonts","pfb loading")
-fonts=fonts or {}
-local handlers=fonts.handlers or {}
-fonts.handlers=handlers
+local report_pfb=logs.reporter("fonts","pfb loading")
+local handlers=fonts.handlers
local afm=handlers.afm or {}
handlers.afm=afm
local readers=afm.readers or {}
afm.readers=readers
afm.version=1.512
-local get_indexes
+local get_indexes,get_shapes
do
- 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
@@ -22319,13 +27433,75 @@ do
r=((cipher+r)*c1+c2)%65536
return char(plain)
end
- decrypt=function(binary)
- r,c1,c2,n=55665,52845,22719,4
+ decrypt=function(binary,initial,seed)
+ r,c1,c2,n=initial,52845,22719,seed
binary=gsub(binary,".",step)
return sub(binary,n+1)
end
end
- local function loadpfbvector(filename)
+ local charstrings=P("/CharStrings")
+ local subroutines=P("/Subrs")
+ local encoding=P("/Encoding")
+ local dup=P("dup")
+ local put=P("put")
+ local array=P("array")
+ local name=P("/")*C((R("az")+R("AZ")+R("09")+S("-_."))^1)
+ local digits=R("09")^1
+ local cardinal=digits/tonumber
+ local spaces=P(" ")^1
+ local spacing=patterns.whitespace^0
+ local routines,vector,chars,n,m
+ local initialize=function(str,position,size)
+ n=0
+ m=size
+ return position+1
+ end
+ local setroutine=function(str,position,index,size)
+ local forward=position+tonumber(size)
+ local stream=decrypt(sub(str,position+1,forward),4330,4)
+ routines[index]={ byte(stream,1,#stream) }
+ return forward
+ end
+ local setvector=function(str,position,name,size)
+ local forward=position+tonumber(size)
+ if n>=m then
+ return #str
+ elseif forward<#str then
+ vector[n]=name
+ n=n+1
+ return forward
+ else
+ return #str
+ end
+ end
+ local setshapes=function(str,position,name,size)
+ local forward=position+tonumber(size)
+ local stream=sub(str,position+1,forward)
+ if n>m then
+ return #str
+ elseif forward<#str then
+ vector[n]=name
+ n=n+1
+ chars [n]=decrypt(stream,4330,4)
+ return forward
+ else
+ return #str
+ end
+ end
+ local p_rd=spacing*(P("RD")+P("-|"))
+ local p_np=spacing*(P("NP")+P("|"))
+ local p_nd=spacing*(P("ND")+P("|"))
+ local p_filterroutines=
+ (1-subroutines)^0*subroutines*spaces*Cmt(cardinal,initialize)*(Cmt(cardinal*spaces*cardinal*p_rd,setroutine)*p_np+P(1))^1
+ local p_filtershapes=
+ (1-charstrings)^0*charstrings*spaces*Cmt(cardinal,initialize)*(Cmt(name*spaces*cardinal*p_rd,setshapes)*p_nd+P(1))^1
+ local p_filternames=Ct (
+ (1-charstrings)^0*charstrings*spaces*Cmt(cardinal,initialize)*(Cmt(name*spaces*cardinal,setvector)+P(1))^1
+ )
+ local p_filterencoding=(1-encoding)^0*encoding*spaces*digits*spaces*array*(1-dup)^0*Cf(
+ Ct("")*Cg(spacing*dup*spaces*cardinal*spaces*name*spaces*put)^1
+,rawset)
+ local function loadpfbvector(filename,shapestoo)
local data=io.loaddata(resolvers.findfile(filename))
if not data then
report_pfb("no data in %a",filename)
@@ -22340,17 +27516,34 @@ do
report_pfb("no binary data in %a",filename)
return
end
- binary=decrypt(binary,4)
- local vector=lpegmatch(p_filternames,binary)
- if vector[1]==".notdef" then
- vector[0]=table.remove(vector,1)
- end
- if not vector then
- report_pfb("no vector in %a",filename)
- return
+ binary=decrypt(binary,55665,4)
+ local names={}
+ local encoding=lpegmatch(p_filterencoding,ascii)
+ local glyphs={}
+ routines,vector,chars={},{},{}
+ if shapestoo then
+ lpegmatch(p_filterroutines,binary)
+ lpegmatch(p_filtershapes,binary)
+ local data={
+ dictionaries={
+ {
+ charstrings=chars,
+ charset=vector,
+ subroutines=routines,
+ }
+ },
+ }
+ fonts.handlers.otf.readers.parsecharstrings(false,data,glyphs,true,true)
+ else
+ lpegmatch(p_filternames,binary)
end
- return vector
+ names=vector
+ routines,vector,chars=nil,nil,nil
+ return names,encoding,glyphs
end
+ local pfb=handlers.pfb or {}
+ handlers.pfb=pfb
+ pfb.loadvector=loadpfbvector
get_indexes=function(data,pfbname)
local vector=loadpfbvector(pfbname)
if vector then
@@ -22370,6 +27563,10 @@ do
end
end
end
+ get_shapes=function(pfbname)
+ local vector,encoding,glyphs=loadpfbvector(pfbname,true)
+ return glyphs
+ end
end
local spacer=patterns.spacer
local whitespace=patterns.whitespace
@@ -22506,16 +27703,31 @@ function readers.loadfont(afmname,pfbname)
local data=read(resolvers.findfile(afmname),fullparser)
if data then
if not pfbname or pfbname=="" then
- pfbname=file.replacesuffix(file.nameonly(afmname),"pfb")
- pfbname=resolvers.findfile(pfbname)
+ pfbname=resolvers.findfile(file.replacesuffix(file.nameonly(afmname),"pfb"))
end
if pfbname and pfbname~="" then
data.resources.filename=resolvers.unresolve(pfbname)
get_indexes(data,pfbname)
- elseif trace_loading then
+ return data
+ else
report_afm("no pfb file for %a",afmname)
end
- return data
+ end
+end
+function readers.loadshapes(filename)
+ local fullname=resolvers.findfile(filename) or ""
+ if fullname=="" then
+ return {
+ filename="not found: "..filename,
+ glyphs={}
+ }
+ else
+ return {
+ filename=fullname,
+ format="opentype",
+ glyphs=get_shapes(fullname) or {},
+ units=1000,
+ }
end
end
function readers.getinfo(filename)
@@ -22555,43 +27767,22 @@ local findbinfile=resolvers.findbinfile
local definers=fonts.definers
local readers=fonts.readers
local constructors=fonts.constructors
-local afm=constructors.newhandler("afm")
-local pfb=constructors.newhandler("pfb")
+local afm=constructors.handlers.afm
+local pfb=constructors.handlers.pfb
local otf=fonts.handlers.otf
local otfreaders=otf.readers
local otfenhancers=otf.enhancers
-local afmfeatures=constructors.newfeatures("afm")
+local afmfeatures=constructors.features.afm
local registerafmfeature=afmfeatures.register
+local afmenhancers=constructors.enhancers.afm
+local registerafmenhancer=afmenhancers.register
afm.version=1.512
-afm.cache=containers.define("fonts","afm",afm.version,true)
+afm.cache=containers.define("fonts","one",afm.version,true)
afm.autoprefixed=true
afm.helpdata={}
afm.syncspace=true
local overloads=fonts.mappings.overloads
local applyruntimefixes=fonts.treatments and fonts.treatments.applyfixes
-local enhancers={
-}
-local steps={
- "unify names",
- "add ligatures",
- "add extra kerns",
- "normalize features",
- "fix names",
-}
-local function applyenhancers(data,filename)
- for i=1,#steps do
- local step=steps[i]
- local enhancer=enhancers[step]
- if enhancer then
- if trace_loading then
- report_afm("applying enhancer %a",step)
- end
- enhancer(data,filename)
- else
- report_afm("invalid enhancer %a",step)
- end
- end
-end
function afm.load(filename)
filename=resolvers.findfile(filename,'afm') or ""
if filename~="" and not fonts.names.ignoredfile(filename) then
@@ -22614,7 +27805,7 @@ function afm.load(filename)
report_afm("reading %a",filename)
data=afm.readers.loadfont(filename,pfbname)
if data then
- applyenhancers(data,filename)
+ afmenhancers.apply(data,filename)
fonts.mappings.addtounicode(data,filename)
otfreaders.pack(data)
data.size=size
@@ -22639,7 +27830,7 @@ function afm.load(filename)
end
end
local uparser=fonts.mappings.makenameparser()
-enhancers["unify names"]=function(data,filename)
+local function enhance_unify_names(data,filename)
local unicodevector=fonts.encodings.agl.unicodes
local unicodes={}
local names={}
@@ -22691,7 +27882,7 @@ enhancers["unify names"]=function(data,filename)
end
local everywhere={ ["*"]={ ["*"]=true } }
local noflags={ false,false,false,false }
-enhancers["normalize features"]=function(data)
+local function enhance_normalize_features(data)
local ligatures=setmetatableindex("table")
local kerns=setmetatableindex("table")
local extrakerns=setmetatableindex("table")
@@ -22789,7 +27980,7 @@ enhancers["normalize features"]=function(data)
data.resources.features=features
data.resources.sequences=sequences
end
-enhancers["fix names"]=function(data)
+local function enhance_fix_names(data)
for k,v in next,data.descriptions do
local n=v.name
local r=overloads[n]
@@ -22828,10 +28019,10 @@ local addthem=function(rawdata,ligatures)
end
end
end
-enhancers["add ligatures"]=function(rawdata)
+local function enhance_add_ligatures(rawdata)
addthem(rawdata,afm.helpdata.ligatures)
end
-enhancers["add extra kerns"]=function(rawdata)
+local function enhance_add_extra_kerns(rawdata)
local descriptions=rawdata.descriptions
local resources=rawdata.resources
local unicodes=resources.unicodes
@@ -23150,17 +28341,12 @@ local function read_from_afm(specification)
end
return tfmdata
end
-local function setmode(tfmdata,value)
- if value then
- tfmdata.properties.mode=lower(value)
- end
-end
registerafmfeature {
name="mode",
description="mode",
initializers={
- base=setmode,
- node=setmode,
+ base=otf.modeinitializer,
+ node=otf.modeinitializer,
}
}
registerafmfeature {
@@ -23175,7 +28361,6 @@ registerafmfeature {
node=otf.featuresprocessor,
}
}
-local check_tfm=readers.check_tfm
fonts.formats.afm="type1"
fonts.formats.pfb="type1"
local function check_afm(specification,fullname)
@@ -23210,7 +28395,8 @@ function readers.afm(specification,method)
tfmdata=check_afm(specification,specification.name.."."..forced)
end
if not tfmdata then
- method=method or definers.method or "afm or tfm"
+ local check_tfm=readers.check_tfm
+ method=(check_tfm and (method or definers.method or "afm or tfm")) or "afm"
if method=="tfm" then
tfmdata=check_tfm(specification,specification.name)
elseif method=="afm" then
@@ -23244,6 +28430,12 @@ function readers.pfb(specification,method)
swap("specification")
return readers.afm(specification,method)
end
+registerafmenhancer("unify names",enhance_unify_names)
+registerafmenhancer("add ligatures",enhance_add_ligatures)
+registerafmenhancer("add extra kerns",enhance_add_extra_kerns)
+registerafmenhancer("normalize features",enhance_normalize_features)
+registerafmenhancer("check extra features",otfenhancers.enhance)
+registerafmenhancer("fix names",enhance_fix_names)
end -- closure
@@ -23418,6 +28610,514 @@ end -- closure
do -- begin closure to overcome local limits and interference
+if not modules then modules={} end modules ['font-tfm']={
+ version=1.001,
+ comment="companion to font-ini.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 match,format=string.match,string.format
+local concat,sortedhash=table.concat,table.sortedhash
+local trace_defining=false trackers.register("fonts.defining",function(v) trace_defining=v end)
+local trace_features=false trackers.register("tfm.features",function(v) trace_features=v end)
+local report_defining=logs.reporter("fonts","defining")
+local report_tfm=logs.reporter("fonts","tfm loading")
+local findbinfile=resolvers.findbinfile
+local setmetatableindex=table.setmetatableindex
+local fonts=fonts
+local handlers=fonts.handlers
+local readers=fonts.readers
+local constructors=fonts.constructors
+local encodings=fonts.encodings
+local tfm=constructors.handlers.tfm
+tfm.version=1.000
+tfm.maxnestingdepth=5
+tfm.maxnestingsize=65536*1024
+local otf=fonts.handlers.otf
+local otfenhancers=otf.enhancers
+local tfmfeatures=constructors.features.tfm
+local registertfmfeature=tfmfeatures.register
+local tfmenhancers=constructors.enhancers.tfm
+local registertfmenhancer=tfmenhancers.register
+constructors.resolvevirtualtoo=false
+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
+ return constructors.collectprocessors("tfm",tfmdata,features,trace_features,report_tfm)
+ else
+ 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
+ local tfmdata=font.read_tfm(filename,size)
+ if tfmdata then
+ local features=specification.features and specification.features.normal or {}
+ local features=constructors.checkedfeatures("tfm",features)
+ specification.features.normal=features
+ local newtfmdata=(depth[filename]==1) and tfm.reencode(tfmdata,specification)
+ if newtfmdata then
+ tfmdata=newtfmdata
+ end
+ local resources=tfmdata.resources or {}
+ local properties=tfmdata.properties or {}
+ local parameters=tfmdata.parameters or {}
+ local shared=tfmdata.shared or {}
+ shared.features=features
+ shared.resources=resources
+ properties.name=tfmdata.name
+ properties.fontname=tfmdata.fontname
+ properties.psname=tfmdata.psname
+ properties.fullname=tfmdata.fullname
+ properties.filename=specification.filename
+ properties.format=fonts.formats.tfm
+ tfmdata.properties=properties
+ tfmdata.resources=resources
+ tfmdata.parameters=parameters
+ tfmdata.shared=shared
+ shared.rawdata={ resources=resources }
+ shared.features=features
+ if newtfmdata then
+ if not resources.marks then
+ resources.marks={}
+ end
+ if not resources.sequences then
+ resources.sequences={}
+ end
+ if not resources.features then
+ resources.features={
+ gsub={},
+ gpos={},
+ }
+ end
+ if not tfmdata.changed then
+ tfmdata.changed={}
+ end
+ if not tfmdata.descriptions then
+ tfmdata.descriptions=tfmdata.characters
+ end
+ otf.readers.addunicodetable(tfmdata)
+ tfmenhancers.apply(tfmdata,filename)
+ constructors.applymanipulators("tfm",tfmdata,features,trace_features,report_tfm)
+ otf.readers.unifymissing(tfmdata)
+ fonts.mappings.addtounicode(tfmdata,filename)
+ tfmdata.tounicode=1
+ local tounicode=fonts.mappings.tounicode
+ for unicode,v in next,tfmdata.characters do
+ local u=v.unicode
+ if u then
+ v.tounicode=tounicode(u)
+ end
+ end
+ if tfmdata.usedbitmap then
+ tfm.addtounicode(tfmdata)
+ end
+ end
+ shared.processes=next(features) and tfm.setfeatures(tfmdata,features) or nil
+ parameters.factor=1
+ parameters.size=size
+ parameters.slant=parameters.slant or parameters[1] or 0
+ parameters.space=parameters.space or parameters[2] or 0
+ parameters.space_stretch=parameters.space_stretch or parameters[3] or 0
+ parameters.space_shrink=parameters.space_shrink or parameters[4] or 0
+ parameters.x_height=parameters.x_height or parameters[5] or 0
+ parameters.quad=parameters.quad or parameters[6] or 0
+ parameters.extra_space=parameters.extra_space or parameters[7] or 0
+ constructors.enhanceparameters(parameters)
+ if newtfmdata then
+ elseif constructors.resolvevirtualtoo then
+ fonts.loggers.register(tfmdata,file.suffix(filename),specification)
+ local vfname=findbinfile(specification.name,'ovf')
+ if vfname and vfname~="" then
+ local vfdata=font.read_vf(vfname,size)
+ if vfdata then
+ local chars=tfmdata.characters
+ for k,v in next,vfdata.characters do
+ chars[k].commands=v.commands
+ 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
+ properties.haskerns=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)
+ local foundname=findbinfile(fullname,'tfm') or ""
+ if foundname=="" then
+ foundname=findbinfile(fullname,'ofm') or ""
+ end
+ if foundname=="" then
+ foundname=fonts.names.getfilename(fullname,"tfm") or ""
+ end
+ if foundname~="" then
+ specification.filename=foundname
+ specification.format="ofm"
+ return read_from_tfm(specification)
+ elseif trace_defining then
+ report_defining("loading tfm with name %a fails",specification.name)
+ end
+end
+readers.check_tfm=check_tfm
+function 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
+ return check_tfm(specification,fullname)
+end
+readers.ofm=readers.tfm
+do
+ local outfiles={}
+ local tfmcache=table.setmetatableindex(function(t,tfmdata)
+ local id=font.define(tfmdata)
+ t[tfmdata]=id
+ return id
+ end)
+ local encdone=table.setmetatableindex("table")
+ function tfm.reencode(tfmdata,specification)
+ local features=specification.features
+ if not features then
+ return
+ end
+ local features=features.normal
+ if not features then
+ return
+ end
+ local tfmfile=file.basename(tfmdata.name)
+ local encfile=features.reencode
+ local pfbfile=features.pfbfile
+ local bitmap=features.bitmap
+ if not encfile then
+ return
+ end
+ local pfbfile=outfiles[tfmfile]
+ if pfbfile==nil then
+ if bitmap then
+ pfbfile=false
+ elseif type(pfbfile)~="string" then
+ pfbfile=tfmfile
+ end
+ if type(pfbfile)=="string" then
+ pfbfile=file.addsuffix(pfbfile,"pfb")
+ report_tfm("using type1 shapes from %a for %a",pfbfile,tfmfile)
+ else
+ report_tfm("using bitmap shapes for %a",tfmfile)
+ pfbfile=false
+ end
+ outfiles[tfmfile]=pfbfile
+ end
+ local encoding=false
+ local vector=false
+ if type(pfbfile)=="string" then
+ local pfb=fonts.constructors.handlers.pfb
+ if pfb and pfb.loadvector then
+ local v,e=pfb.loadvector(pfbfile)
+ if v then
+ vector=v
+ end
+ if e then
+ encoding=e
+ end
+ end
+ end
+ if type(encfile)=="string" and encfile~="auto" then
+ encoding=fonts.encodings.load(file.addsuffix(encfile,"enc"))
+ if encoding then
+ encoding=encoding.vector
+ end
+ end
+ if not encoding then
+ report_tfm("bad encoding for %a, quitting",tfmfile)
+ return
+ end
+ local unicoding=fonts.encodings.agl and fonts.encodings.agl.unicodes
+ local virtualid=tfmcache[tfmdata]
+ local tfmdata=table.copy(tfmdata)
+ local characters={}
+ local originals=tfmdata.characters
+ local indices={}
+ local parentfont={ "font",1 }
+ local private=fonts.constructors.privateoffset
+ local reported=encdone[tfmfile][encfile]
+ local backmap=vector and table.swapped(vector)
+ local done={}
+ for index,name in sortedhash(encoding) do
+ local unicode=unicoding[name]
+ local original=originals[index]
+ if original then
+ if unicode then
+ original.unicode=unicode
+ else
+ unicode=private
+ private=private+1
+ if not reported then
+ report_tfm("glyph %a in font %a with encoding %a gets unicode %U",name,tfmfile,encfile,unicode)
+ end
+ end
+ characters[unicode]=original
+ indices[index]=unicode
+ original.name=name
+ if backmap then
+ original.index=backmap[name]
+ else
+ original.commands={ parentfont,{ "char",index } }
+ original.oindex=index
+ end
+ done[name]=true
+ elseif not done[name] then
+ report_tfm("bad index %a in font %a with name %a",index,tfmfile,name)
+ end
+ end
+ encdone[tfmfile][encfile]=true
+ for k,v in next,characters do
+ local kerns=v.kerns
+ if kerns then
+ local t={}
+ for k,v in next,kerns do
+ local i=indices[k]
+ if i then
+ t[i]=v
+ end
+ end
+ v.kerns=next(t) and t or nil
+ end
+ local ligatures=v.ligatures
+ if ligatures then
+ local t={}
+ for k,v in next,ligatures do
+ local i=indices[k]
+ if i then
+ t[i]=v
+ v.char=indices[v.char]
+ end
+ end
+ v.ligatures=next(t) and t or nil
+ end
+ end
+ tfmdata.fonts={ { id=virtualid } }
+ tfmdata.characters=characters
+ tfmdata.fullname=tfmdata.fullname or tfmdata.name
+ tfmdata.psname=file.nameonly(pfbfile or tfmdata.name)
+ tfmdata.filename=pfbfile
+ tfmdata.encodingbytes=2
+ tfmdata.format="type1"
+ tfmdata.tounicode=1
+ tfmdata.embedding="subset"
+ tfmdata.usedbitmap=bitmap and virtualid
+ return tfmdata
+ end
+end
+do
+ local template=[[
+/CIDInit /ProcSet findresource begin
+ 12 dict begin
+ begincmap
+ /CIDSystemInfo << /Registry (TeX) /Ordering (bitmap-%s) /Supplement 0 >> def
+ /CMapName /TeX-bitmap-%s def
+ /CMapType 2 def
+ 1 begincodespacerange
+ <00> <FF>
+ endcodespacerange
+ %s beginbfchar
+%s
+ endbfchar
+ endcmap
+CMapName currentdict /CMap defineresource pop end
+end
+end
+]]
+ local flushstreamobject=lpdf and lpdf.flushstreamobject
+ local setfontattributes=pdf.setfontattributes
+ if not flushstreamobject then
+ flushstreamobject=function(data)
+ return pdf.obj {
+ immediate=true,
+ type="stream",
+ string=data,
+ }
+ end
+ end
+ if not setfontattributes then
+ setfontattributes=function(id,data)
+ print(format("your luatex is too old so no tounicode bitmap font%i",id))
+ end
+ end
+ function tfm.addtounicode(tfmdata)
+ local id=tfmdata.usedbitmap
+ local map={}
+ local char={}
+ for k,v in next,tfmdata.characters do
+ local index=v.oindex
+ local tounicode=v.tounicode
+ if index and tounicode then
+ map[index]=tounicode
+ end
+ end
+ for k,v in sortedhash(map) do
+ char[#char+1]=format("<%02X> <%s>",k,v)
+ end
+ char=concat(char,"\n")
+ local stream=format(template,id,id,#char,char)
+ local reference=flushstreamobject(stream,nil,true)
+ setfontattributes(id,format("/ToUnicode %i 0 R",reference))
+ end
+end
+do
+ local everywhere={ ["*"]={ ["*"]=true } }
+ local noflags={ false,false,false,false }
+ local function enhance_normalize_features(data)
+ local ligatures=setmetatableindex("table")
+ local kerns=setmetatableindex("table")
+ local characters=data.characters
+ for u,c in next,characters do
+ local l=c.ligatures
+ local k=c.kerns
+ if l then
+ ligatures[u]=l
+ for u,v in next,l do
+ l[u]={ ligature=v.char }
+ end
+ c.ligatures=nil
+ end
+ if k then
+ kerns[u]=k
+ for u,v in next,k do
+ k[u]=v
+ end
+ c.kerns=nil
+ end
+ end
+ for u,l in next,ligatures do
+ for k,v in next,l do
+ local vl=v.ligature
+ local dl=ligatures[vl]
+ if dl then
+ for kk,vv in next,dl do
+ v[kk]=vv
+ end
+ end
+ end
+ end
+ local features={
+ gpos={},
+ gsub={},
+ }
+ local sequences={
+ }
+ if next(ligatures) then
+ features.gsub.liga=everywhere
+ data.properties.hasligatures=true
+ sequences[#sequences+1]={
+ features={
+ liga=everywhere,
+ },
+ flags=noflags,
+ name="s_s_0",
+ nofsteps=1,
+ order={ "liga" },
+ type="gsub_ligature",
+ steps={
+ {
+ coverage=ligatures,
+ },
+ },
+ }
+ end
+ if next(kerns) then
+ features.gpos.kern=everywhere
+ data.properties.haskerns=true
+ sequences[#sequences+1]={
+ features={
+ kern=everywhere,
+ },
+ flags=noflags,
+ name="p_s_0",
+ nofsteps=1,
+ order={ "kern" },
+ type="gpos_pair",
+ steps={
+ {
+ format="kern",
+ coverage=kerns,
+ },
+ },
+ }
+ end
+ data.resources.features=features
+ data.resources.sequences=sequences
+ data.shared.resources=data.shared.resources or resources
+ end
+ registertfmenhancer("normalize features",enhance_normalize_features)
+ registertfmenhancer("check extra features",otfenhancers.enhance)
+end
+registertfmfeature {
+ name="mode",
+ description="mode",
+ initializers={
+ base=otf.modeinitializer,
+ node=otf.modeinitializer,
+ }
+}
+registertfmfeature {
+ name="features",
+ description="features",
+ default=true,
+ initializers={
+ base=otf.basemodeinitializer,
+ node=otf.nodemodeinitializer,
+ },
+ processors={
+ node=otf.featuresprocessor,
+ }
+}
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
if not modules then modules={} end modules ['font-lua']={
version=1.001,
comment="companion to font-ini.mkiv",
@@ -23467,10 +29167,12 @@ if not modules then modules={} end modules ['font-def']={
copyright="PRAGMA ADE / ConTeXt Development Team",
license="see context related readme files"
}
-local format,gmatch,match,find,lower,gsub=string.format,string.gmatch,string.match,string.find,string.lower,string.gsub
+local lower,gsub=string.lower,string.gsub
local tostring,next=tostring,next
local lpegmatch=lpeg.match
-local suffixonly,removesuffix=file.suffix,file.removesuffix
+local suffixonly,removesuffix,basename=file.suffix,file.removesuffix,file.basename
+local formatters=string.formatters
+local sortedhash,sortedkeys=table.sortedhash,table.sortedkeys
local allocate=utilities.storage.allocate
local trace_defining=false trackers .register("fonts.defining",function(v) trace_defining=v end)
local directive_embedall=false directives.register("fonts.embedall",function(v) directive_embedall=v end)
@@ -23572,11 +29274,28 @@ end
function resolvers.name(specification)
local resolve=fonts.names.resolve
if resolve then
- local resolved,sub,subindex=resolve(specification.name,specification.sub,specification)
+ local resolved,sub,subindex,instance=resolve(specification.name,specification.sub,specification)
if resolved then
specification.resolved=resolved
specification.sub=sub
specification.subindex=subindex
+ if instance then
+ specification.instance=instance
+ local features=specification.features
+ if not features then
+ features={}
+ specification.features=features
+ end
+ local normal=features.normal
+ if not normal then
+ normal={}
+ features.normal=normal
+ end
+ normal.instance=instance
+ if not callbacks.supported.glyph_stream_provider then
+ normal.variableshapes=true
+ end
+ end
local suffix=lower(suffixonly(resolved))
if fonts.formats[suffix] then
specification.forced=suffix
@@ -23631,7 +29350,7 @@ function definers.applypostprocessors(tfmdata)
local extrahash=postprocessors[i](tfmdata)
if type(extrahash)=="string" and extrahash~="" then
extrahash=gsub(lower(extrahash),"[^a-z]","-")
- properties.fullname=format("%s-%s",properties.fullname,extrahash)
+ properties.fullname=formatters["%s-%s"](properties.fullname,extrahash)
end
end
end
@@ -23654,6 +29373,60 @@ local function checkembedding(tfmdata)
end
tfmdata.embedding=embedding
end
+local function checkfeatures(tfmdata)
+ local resources=tfmdata.resources
+ local shared=tfmdata.shared
+ if resources and shared then
+ local features=resources.features
+ local usedfeatures=shared.features
+ if features and usedfeatures then
+ local usedlanguage=usedfeatures.language or "dflt"
+ local usedscript=usedfeatures.script or "dflt"
+ local function check(what)
+ if what then
+ local foundlanguages={}
+ for feature,scripts in next,what do
+ if usedscript=="auto" or scripts["*"] then
+ elseif not scripts[usedscript] then
+ else
+ for script,languages in next,scripts do
+ if languages["*"] then
+ elseif not languages[usedlanguage] then
+ report_defining("font %!font:name!, feature %a, script %a, no language %a",
+ tfmdata,feature,script,usedlanguage)
+ end
+ end
+ end
+ for script,languages in next,scripts do
+ for language in next,languages do
+ foundlanguages[language]=true
+ end
+ end
+ end
+ if false then
+ foundlanguages["*"]=nil
+ foundlanguages=sortedkeys(foundlanguages)
+ for feature,scripts in sortedhash(what) do
+ for script,languages in next,scripts do
+ if not languages["*"] then
+ for i=1,#foundlanguages do
+ local language=foundlanguages[i]
+ if not languages[language] then
+ report_defining("font %!font:name!, feature %a, script %a, no language %a",
+ tfmdata,feature,script,language)
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ check(features.gsub)
+ check(features.gpos)
+ end
+ end
+end
function definers.loadfont(specification)
local hash=constructors.hashinstance(specification)
local tfmdata=loadedfonts[hash]
@@ -23687,6 +29460,7 @@ function definers.loadfont(specification)
checkembedding(tfmdata)
loadedfonts[hash]=tfmdata
designsizes[specification.hash]=tfmdata.parameters.designsize
+ checkfeatures(tfmdata)
end
end
if not tfmdata then
@@ -23779,7 +29553,7 @@ function definers.read(specification,size,id)
local parameters=tfmdata.parameters or {}
report_defining("using %a font with id %a, name %a, size %a, bytes %a, encoding %a, fullname %a, filename %a",
properties.format or "unknown",id,properties.name,parameters.size,properties.encodingbytes,
- properties.encodingname,properties.fullname,file.basename(properties.filename))
+ properties.encodingname,properties.fullname,basename(properties.filename))
end
statistics.stoptiming(fonts)
return tfmdata
@@ -23887,7 +29661,7 @@ if context then
os.exit()
end
local fonts=fonts
-local otffeatures=fonts.constructors.newfeatures("otf")
+local otffeatures=fonts.constructors.features.otf
local function initializeitlc(tfmdata,value)
if value then
local parameters=tfmdata.parameters
@@ -24089,11 +29863,2131 @@ otffeatures.register {
node=reencode,
}
}
+local function ignore(tfmdata,key,value)
+ if value then
+ tfmdata.mathparameters=nil
+ end
+end
+otffeatures.register {
+ name="ignoremathconstants",
+ description="ignore math constants table",
+ initializers={
+ base=ignore,
+ node=ignore,
+ }
+}
+local setmetatableindex=table.setmetatableindex
+local function additalictowidth(tfmdata,key,value)
+ local characters=tfmdata.characters
+ local resources=tfmdata.resources
+ local additions={}
+ local private=resources.private
+ for unicode,old_c in next,characters do
+ local oldwidth=old_c.width
+ local olditalic=old_c.italic
+ if olditalic and olditalic~=0 then
+ private=private+1
+ local new_c={
+ width=oldwidth+olditalic,
+ height=old_c.height,
+ depth=old_c.depth,
+ commands={
+ { "slot",1,private },
+ { "right",olditalic },
+ },
+ }
+ setmetatableindex(new_c,old_c)
+ characters[unicode]=new_c
+ additions[private]=old_c
+ end
+ end
+ for k,v in next,additions do
+ characters[k]=v
+ end
+ resources.private=private
+end
+otffeatures.register {
+ name="italicwidths",
+ description="add italic to width",
+ manipulators={
+ base=additalictowidth,
+ }
+}
end -- closure
do -- begin closure to overcome local limits and interference
+
+fonts.handlers.otf.addfeature {
+ ["dataset"]={
+ {
+ ["data"]={
+ ["À"]={ "A","̀" },
+ ["Á"]={ "A","́" },
+ ["Â"]={ "A","̂" },
+ ["Ã"]={ "A","̃" },
+ ["Ä"]={ "A","̈" },
+ ["Å"]={ "A","̊" },
+ ["Ç"]={ "C","̧" },
+ ["È"]={ "E","̀" },
+ ["É"]={ "E","́" },
+ ["Ê"]={ "E","̂" },
+ ["Ë"]={ "E","̈" },
+ ["Ì"]={ "I","̀" },
+ ["Í"]={ "I","́" },
+ ["Î"]={ "I","̂" },
+ ["Ï"]={ "I","̈" },
+ ["Ñ"]={ "N","̃" },
+ ["Ò"]={ "O","̀" },
+ ["Ó"]={ "O","́" },
+ ["Ô"]={ "O","̂" },
+ ["Õ"]={ "O","̃" },
+ ["Ö"]={ "O","̈" },
+ ["Ù"]={ "U","̀" },
+ ["Ú"]={ "U","́" },
+ ["Û"]={ "U","̂" },
+ ["Ü"]={ "U","̈" },
+ ["Ý"]={ "Y","́" },
+ ["à"]={ "a","̀" },
+ ["á"]={ "a","́" },
+ ["â"]={ "a","̂" },
+ ["ã"]={ "a","̃" },
+ ["ä"]={ "a","̈" },
+ ["å"]={ "a","̊" },
+ ["ç"]={ "c","̧" },
+ ["è"]={ "e","̀" },
+ ["é"]={ "e","́" },
+ ["ê"]={ "e","̂" },
+ ["ë"]={ "e","̈" },
+ ["ì"]={ "i","̀" },
+ ["í"]={ "i","́" },
+ ["î"]={ "i","̂" },
+ ["ï"]={ "i","̈" },
+ ["ñ"]={ "n","̃" },
+ ["ò"]={ "o","̀" },
+ ["ó"]={ "o","́" },
+ ["ô"]={ "o","̂" },
+ ["õ"]={ "o","̃" },
+ ["ö"]={ "o","̈" },
+ ["ù"]={ "u","̀" },
+ ["ú"]={ "u","́" },
+ ["û"]={ "u","̂" },
+ ["ü"]={ "u","̈" },
+ ["ý"]={ "y","́" },
+ ["ÿ"]={ "y","̈" },
+ ["Ā"]={ "A","̄" },
+ ["ā"]={ "a","̄" },
+ ["Ă"]={ "A","̆" },
+ ["ă"]={ "a","̆" },
+ ["Ą"]={ "A","̨" },
+ ["ą"]={ "a","̨" },
+ ["Ć"]={ "C","́" },
+ ["ć"]={ "c","́" },
+ ["Ĉ"]={ "C","̂" },
+ ["ĉ"]={ "c","̂" },
+ ["Ċ"]={ "C","̇" },
+ ["ċ"]={ "c","̇" },
+ ["Č"]={ "C","̌" },
+ ["č"]={ "c","̌" },
+ ["Ď"]={ "D","̌" },
+ ["ď"]={ "d","̌" },
+ ["Ē"]={ "E","̄" },
+ ["ē"]={ "e","̄" },
+ ["Ĕ"]={ "E","̆" },
+ ["ĕ"]={ "e","̆" },
+ ["Ė"]={ "E","̇" },
+ ["ė"]={ "e","̇" },
+ ["Ę"]={ "E","̨" },
+ ["ę"]={ "e","̨" },
+ ["Ě"]={ "E","̌" },
+ ["ě"]={ "e","̌" },
+ ["Ĝ"]={ "G","̂" },
+ ["ĝ"]={ "g","̂" },
+ ["Ğ"]={ "G","̆" },
+ ["ğ"]={ "g","̆" },
+ ["Ġ"]={ "G","̇" },
+ ["ġ"]={ "g","̇" },
+ ["Ģ"]={ "G","̧" },
+ ["ģ"]={ "g","̧" },
+ ["Ĥ"]={ "H","̂" },
+ ["ĥ"]={ "h","̂" },
+ ["Ĩ"]={ "I","̃" },
+ ["ĩ"]={ "i","̃" },
+ ["Ī"]={ "I","̄" },
+ ["ī"]={ "i","̄" },
+ ["Ĭ"]={ "I","̆" },
+ ["ĭ"]={ "i","̆" },
+ ["Į"]={ "I","̨" },
+ ["į"]={ "i","̨" },
+ ["İ"]={ "I","̇" },
+ ["Ĵ"]={ "J","̂" },
+ ["ĵ"]={ "j","̂" },
+ ["Ķ"]={ "K","̧" },
+ ["ķ"]={ "k","̧" },
+ ["Ĺ"]={ "L","́" },
+ ["ĺ"]={ "l","́" },
+ ["Ļ"]={ "L","̧" },
+ ["ļ"]={ "l","̧" },
+ ["Ľ"]={ "L","̌" },
+ ["ľ"]={ "l","̌" },
+ ["Ń"]={ "N","́" },
+ ["ń"]={ "n","́" },
+ ["Ņ"]={ "N","̧" },
+ ["ņ"]={ "n","̧" },
+ ["Ň"]={ "N","̌" },
+ ["ň"]={ "n","̌" },
+ ["Ō"]={ "O","̄" },
+ ["ō"]={ "o","̄" },
+ ["Ŏ"]={ "O","̆" },
+ ["ŏ"]={ "o","̆" },
+ ["Ő"]={ "O","̋" },
+ ["ő"]={ "o","̋" },
+ ["Ŕ"]={ "R","́" },
+ ["ŕ"]={ "r","́" },
+ ["Ŗ"]={ "R","̧" },
+ ["ŗ"]={ "r","̧" },
+ ["Ř"]={ "R","̌" },
+ ["ř"]={ "r","̌" },
+ ["Ś"]={ "S","́" },
+ ["ś"]={ "s","́" },
+ ["Ŝ"]={ "S","̂" },
+ ["ŝ"]={ "s","̂" },
+ ["Ş"]={ "S","̧" },
+ ["ş"]={ "s","̧" },
+ ["Š"]={ "S","̌" },
+ ["š"]={ "s","̌" },
+ ["Ţ"]={ "T","̧" },
+ ["ţ"]={ "t","̧" },
+ ["Ť"]={ "T","̌" },
+ ["ť"]={ "t","̌" },
+ ["Ũ"]={ "U","̃" },
+ ["ũ"]={ "u","̃" },
+ ["Ū"]={ "U","̄" },
+ ["ū"]={ "u","̄" },
+ ["Ŭ"]={ "U","̆" },
+ ["ŭ"]={ "u","̆" },
+ ["Ů"]={ "U","̊" },
+ ["ů"]={ "u","̊" },
+ ["Ű"]={ "U","̋" },
+ ["ű"]={ "u","̋" },
+ ["Ų"]={ "U","̨" },
+ ["ų"]={ "u","̨" },
+ ["Ŵ"]={ "W","̂" },
+ ["ŵ"]={ "w","̂" },
+ ["Ŷ"]={ "Y","̂" },
+ ["ŷ"]={ "y","̂" },
+ ["Ÿ"]={ "Y","̈" },
+ ["Ź"]={ "Z","́" },
+ ["ź"]={ "z","́" },
+ ["Ż"]={ "Z","̇" },
+ ["ż"]={ "z","̇" },
+ ["Ž"]={ "Z","̌" },
+ ["ž"]={ "z","̌" },
+ ["Ơ"]={ "O","̛" },
+ ["ơ"]={ "o","̛" },
+ ["Ư"]={ "U","̛" },
+ ["ư"]={ "u","̛" },
+ ["Ǎ"]={ "A","̌" },
+ ["ǎ"]={ "a","̌" },
+ ["Ǐ"]={ "I","̌" },
+ ["ǐ"]={ "i","̌" },
+ ["Ǒ"]={ "O","̌" },
+ ["ǒ"]={ "o","̌" },
+ ["Ǔ"]={ "U","̌" },
+ ["ǔ"]={ "u","̌" },
+ ["Ǖ"]={ "Ü","̄" },
+ ["ǖ"]={ "ü","̄" },
+ ["Ǘ"]={ "Ü","́" },
+ ["ǘ"]={ "ü","́" },
+ ["Ǚ"]={ "Ü","̌" },
+ ["ǚ"]={ "ü","̌" },
+ ["Ǜ"]={ "Ü","̀" },
+ ["ǜ"]={ "ü","̀" },
+ ["Ǟ"]={ "Ä","̄" },
+ ["ǟ"]={ "ä","̄" },
+ ["Ǡ"]={ "Ȧ","̄" },
+ ["ǡ"]={ "ȧ","̄" },
+ ["Ǣ"]={ "Æ","̄" },
+ ["ǣ"]={ "æ","̄" },
+ ["Ǧ"]={ "G","̌" },
+ ["ǧ"]={ "g","̌" },
+ ["Ǩ"]={ "K","̌" },
+ ["ǩ"]={ "k","̌" },
+ ["Ǫ"]={ "O","̨" },
+ ["ǫ"]={ "o","̨" },
+ ["Ǭ"]={ "Ǫ","̄" },
+ ["ǭ"]={ "ǫ","̄" },
+ ["Ǯ"]={ "Ʒ","̌" },
+ ["ǯ"]={ "ʒ","̌" },
+ ["ǰ"]={ "j","̌" },
+ ["Ǵ"]={ "G","́" },
+ ["ǵ"]={ "g","́" },
+ ["Ǹ"]={ "N","̀" },
+ ["ǹ"]={ "n","̀" },
+ ["Ǻ"]={ "Å","́" },
+ ["ǻ"]={ "å","́" },
+ ["Ǽ"]={ "Æ","́" },
+ ["ǽ"]={ "æ","́" },
+ ["Ǿ"]={ "Ø","́" },
+ ["ǿ"]={ "ø","́" },
+ ["Ȁ"]={ "A","̏" },
+ ["ȁ"]={ "a","̏" },
+ ["Ȃ"]={ "A","̑" },
+ ["ȃ"]={ "a","̑" },
+ ["Ȅ"]={ "E","̏" },
+ ["ȅ"]={ "e","̏" },
+ ["Ȇ"]={ "E","̑" },
+ ["ȇ"]={ "e","̑" },
+ ["Ȉ"]={ "I","̏" },
+ ["ȉ"]={ "i","̏" },
+ ["Ȋ"]={ "I","̑" },
+ ["ȋ"]={ "i","̑" },
+ ["Ȍ"]={ "O","̏" },
+ ["ȍ"]={ "o","̏" },
+ ["Ȏ"]={ "O","̑" },
+ ["ȏ"]={ "o","̑" },
+ ["Ȑ"]={ "R","̏" },
+ ["ȑ"]={ "r","̏" },
+ ["Ȓ"]={ "R","̑" },
+ ["ȓ"]={ "r","̑" },
+ ["Ȕ"]={ "U","̏" },
+ ["ȕ"]={ "u","̏" },
+ ["Ȗ"]={ "U","̑" },
+ ["ȗ"]={ "u","̑" },
+ ["Ș"]={ "S","̦" },
+ ["ș"]={ "s","̦" },
+ ["Ț"]={ "T","̦" },
+ ["ț"]={ "t","̦" },
+ ["Ȟ"]={ "H","̌" },
+ ["ȟ"]={ "h","̌" },
+ ["Ȧ"]={ "A","̇" },
+ ["ȧ"]={ "a","̇" },
+ ["Ȩ"]={ "E","̧" },
+ ["ȩ"]={ "e","̧" },
+ ["Ȫ"]={ "Ö","̄" },
+ ["ȫ"]={ "ö","̄" },
+ ["Ȭ"]={ "Õ","̄" },
+ ["ȭ"]={ "õ","̄" },
+ ["Ȯ"]={ "O","̇" },
+ ["ȯ"]={ "o","̇" },
+ ["Ȱ"]={ "Ȯ","̄" },
+ ["ȱ"]={ "ȯ","̄" },
+ ["Ȳ"]={ "Y","̄" },
+ ["ȳ"]={ "y","̄" },
+ ["̈́"]={ "̈","́" },
+ ["΅"]={ "¨","́" },
+ ["Ά"]={ "Α","́" },
+ ["Έ"]={ "Ε","́" },
+ ["Ή"]={ "Η","́" },
+ ["Ί"]={ "Ι","́" },
+ ["Ό"]={ "Ο","́" },
+ ["Ύ"]={ "Υ","́" },
+ ["Ώ"]={ "Ω","́" },
+ ["ΐ"]={ "ϊ","́" },
+ ["Ϊ"]={ "Ι","̈" },
+ ["Ϋ"]={ "Υ","̈" },
+ ["ά"]={ "α","́" },
+ ["έ"]={ "ε","́" },
+ ["ή"]={ "η","́" },
+ ["ί"]={ "ι","́" },
+ ["ΰ"]={ "ϋ","́" },
+ ["ϊ"]={ "ι","̈" },
+ ["ϋ"]={ "υ","̈" },
+ ["ό"]={ "ο","́" },
+ ["ύ"]={ "υ","́" },
+ ["ώ"]={ "ω","́" },
+ ["ϓ"]={ "ϒ","́" },
+ ["ϔ"]={ "ϒ","̈" },
+ ["Ѐ"]={ "Е","̀" },
+ ["Ё"]={ "Е","̈" },
+ ["Ѓ"]={ "Г","́" },
+ ["Ї"]={ "І","̈" },
+ ["Ќ"]={ "К","́" },
+ ["Ѝ"]={ "И","̀" },
+ ["Ў"]={ "У","̆" },
+ ["Й"]={ "И","̆" },
+ ["й"]={ "и","̆" },
+ ["ѐ"]={ "е","̀" },
+ ["ё"]={ "е","̈" },
+ ["ѓ"]={ "г","́" },
+ ["ї"]={ "і","̈" },
+ ["ќ"]={ "к","́" },
+ ["ѝ"]={ "и","̀" },
+ ["ў"]={ "у","̆" },
+ ["Ѷ"]={ "Ѵ","̏" },
+ ["ѷ"]={ "ѵ","̏" },
+ ["Ӂ"]={ "Ж","̆" },
+ ["ӂ"]={ "ж","̆" },
+ ["Ӑ"]={ "А","̆" },
+ ["ӑ"]={ "а","̆" },
+ ["Ӓ"]={ "А","̈" },
+ ["ӓ"]={ "а","̈" },
+ ["Ӗ"]={ "Е","̆" },
+ ["ӗ"]={ "е","̆" },
+ ["Ӛ"]={ "Ә","̈" },
+ ["ӛ"]={ "ә","̈" },
+ ["Ӝ"]={ "Ж","̈" },
+ ["ӝ"]={ "ж","̈" },
+ ["Ӟ"]={ "З","̈" },
+ ["ӟ"]={ "з","̈" },
+ ["Ӣ"]={ "И","̄" },
+ ["ӣ"]={ "и","̄" },
+ ["Ӥ"]={ "И","̈" },
+ ["ӥ"]={ "и","̈" },
+ ["Ӧ"]={ "О","̈" },
+ ["ӧ"]={ "о","̈" },
+ ["Ӫ"]={ "Ө","̈" },
+ ["ӫ"]={ "ө","̈" },
+ ["Ӭ"]={ "Э","̈" },
+ ["ӭ"]={ "э","̈" },
+ ["Ӯ"]={ "У","̄" },
+ ["ӯ"]={ "у","̄" },
+ ["Ӱ"]={ "У","̈" },
+ ["ӱ"]={ "у","̈" },
+ ["Ӳ"]={ "У","̋" },
+ ["ӳ"]={ "у","̋" },
+ ["Ӵ"]={ "Ч","̈" },
+ ["ӵ"]={ "ч","̈" },
+ ["Ӹ"]={ "Ы","̈" },
+ ["ӹ"]={ "ы","̈" },
+ ["آ"]={ "ا","ٓ" },
+ ["أ"]={ "ا","ٔ" },
+ ["ؤ"]={ "و","ٔ" },
+ ["إ"]={ "ا","ٕ" },
+ ["ئ"]={ "ي","ٔ" },
+ ["ۀ"]={ "ە","ٔ" },
+ ["ۂ"]={ "ہ","ٔ" },
+ ["ۓ"]={ "ے","ٔ" },
+ ["ऩ"]={ "न","़" },
+ ["ऱ"]={ "र","़" },
+ ["ऴ"]={ "ळ","़" },
+ ["क़"]={ "क","़" },
+ ["ख़"]={ "ख","़" },
+ ["ग़"]={ "ग","़" },
+ ["ज़"]={ "ज","़" },
+ ["ड़"]={ "ड","़" },
+ ["ढ़"]={ "ढ","़" },
+ ["फ़"]={ "फ","़" },
+ ["य़"]={ "य","़" },
+ ["ো"]={ "ে","া" },
+ ["ৌ"]={ "ে","ৗ" },
+ ["ড়"]={ "ড","়" },
+ ["ঢ়"]={ "ঢ","়" },
+ ["য়"]={ "য","়" },
+ ["ਲ਼"]={ "ਲ","਼" },
+ ["ਸ਼"]={ "ਸ","਼" },
+ ["ਖ਼"]={ "ਖ","਼" },
+ ["ਗ਼"]={ "ਗ","਼" },
+ ["ਜ਼"]={ "ਜ","਼" },
+ ["ਫ਼"]={ "ਫ","਼" },
+ ["ୈ"]={ "େ","ୖ" },
+ ["ୋ"]={ "େ","ା" },
+ ["ୌ"]={ "େ","ୗ" },
+ ["ଡ଼"]={ "ଡ","଼" },
+ ["ଢ଼"]={ "ଢ","଼" },
+ ["ஔ"]={ "ஒ","ௗ" },
+ ["ொ"]={ "ெ","ா" },
+ ["ோ"]={ "ே","ா" },
+ ["ௌ"]={ "ெ","ௗ" },
+ ["ై"]={ "ె","ౖ" },
+ ["ೀ"]={ "ಿ","ೕ" },
+ ["ೇ"]={ "ೆ","ೕ" },
+ ["ೈ"]={ "ೆ","ೖ" },
+ ["ೊ"]={ "ೆ","ೂ" },
+ ["ೋ"]={ "ೊ","ೕ" },
+ ["ൊ"]={ "െ","ാ" },
+ ["ോ"]={ "േ","ാ" },
+ ["ൌ"]={ "െ","ൗ" },
+ ["ේ"]={ "ෙ","්" },
+ ["ො"]={ "ෙ","ා" },
+ ["ෝ"]={ "ො","්" },
+ ["ෞ"]={ "ෙ","ෟ" },
+ ["གྷ"]={ "ག","ྷ" },
+ ["ཌྷ"]={ "ཌ","ྷ" },
+ ["དྷ"]={ "ད","ྷ" },
+ ["བྷ"]={ "བ","ྷ" },
+ ["ཛྷ"]={ "ཛ","ྷ" },
+ ["ཀྵ"]={ "ཀ","ྵ" },
+ ["ཱི"]={ "ཱ","ི" },
+ ["ཱུ"]={ "ཱ","ུ" },
+ ["ྲྀ"]={ "ྲ","ྀ" },
+ ["ླྀ"]={ "ླ","ྀ" },
+ ["ཱྀ"]={ "ཱ","ྀ" },
+ ["ྒྷ"]={ "ྒ","ྷ" },
+ ["ྜྷ"]={ "ྜ","ྷ" },
+ ["ྡྷ"]={ "ྡ","ྷ" },
+ ["ྦྷ"]={ "ྦ","ྷ" },
+ ["ྫྷ"]={ "ྫ","ྷ" },
+ ["ྐྵ"]={ "ྐ","ྵ" },
+ ["ဦ"]={ "ဥ","ီ" },
+ ["ᬆ"]={ "ᬅ","ᬵ" },
+ ["ᬈ"]={ "ᬇ","ᬵ" },
+ ["ᬊ"]={ "ᬉ","ᬵ" },
+ ["ᬌ"]={ "ᬋ","ᬵ" },
+ ["ᬎ"]={ "ᬍ","ᬵ" },
+ ["ᬒ"]={ "ᬑ","ᬵ" },
+ ["ᬻ"]={ "ᬺ","ᬵ" },
+ ["ᬽ"]={ "ᬼ","ᬵ" },
+ ["ᭀ"]={ "ᬾ","ᬵ" },
+ ["ᭁ"]={ "ᬿ","ᬵ" },
+ ["ᭃ"]={ "ᭂ","ᬵ" },
+ ["Ḁ"]={ "A","̥" },
+ ["ḁ"]={ "a","̥" },
+ ["Ḃ"]={ "B","̇" },
+ ["ḃ"]={ "b","̇" },
+ ["Ḅ"]={ "B","̣" },
+ ["ḅ"]={ "b","̣" },
+ ["Ḇ"]={ "B","̱" },
+ ["ḇ"]={ "b","̱" },
+ ["Ḉ"]={ "Ç","́" },
+ ["ḉ"]={ "ç","́" },
+ ["Ḋ"]={ "D","̇" },
+ ["ḋ"]={ "d","̇" },
+ ["Ḍ"]={ "D","̣" },
+ ["ḍ"]={ "d","̣" },
+ ["Ḏ"]={ "D","̱" },
+ ["ḏ"]={ "d","̱" },
+ ["Ḑ"]={ "D","̧" },
+ ["ḑ"]={ "d","̧" },
+ ["Ḓ"]={ "D","̭" },
+ ["ḓ"]={ "d","̭" },
+ ["Ḕ"]={ "Ē","̀" },
+ ["ḕ"]={ "ē","̀" },
+ ["Ḗ"]={ "Ē","́" },
+ ["ḗ"]={ "ē","́" },
+ ["Ḙ"]={ "E","̭" },
+ ["ḙ"]={ "e","̭" },
+ ["Ḛ"]={ "E","̰" },
+ ["ḛ"]={ "e","̰" },
+ ["Ḝ"]={ "Ȩ","̆" },
+ ["ḝ"]={ "ȩ","̆" },
+ ["Ḟ"]={ "F","̇" },
+ ["ḟ"]={ "f","̇" },
+ ["Ḡ"]={ "G","̄" },
+ ["ḡ"]={ "g","̄" },
+ ["Ḣ"]={ "H","̇" },
+ ["ḣ"]={ "h","̇" },
+ ["Ḥ"]={ "H","̣" },
+ ["ḥ"]={ "h","̣" },
+ ["Ḧ"]={ "H","̈" },
+ ["ḧ"]={ "h","̈" },
+ ["Ḩ"]={ "H","̧" },
+ ["ḩ"]={ "h","̧" },
+ ["Ḫ"]={ "H","̮" },
+ ["ḫ"]={ "h","̮" },
+ ["Ḭ"]={ "I","̰" },
+ ["ḭ"]={ "i","̰" },
+ ["Ḯ"]={ "Ï","́" },
+ ["ḯ"]={ "ï","́" },
+ ["Ḱ"]={ "K","́" },
+ ["ḱ"]={ "k","́" },
+ ["Ḳ"]={ "K","̣" },
+ ["ḳ"]={ "k","̣" },
+ ["Ḵ"]={ "K","̱" },
+ ["ḵ"]={ "k","̱" },
+ ["Ḷ"]={ "L","̣" },
+ ["ḷ"]={ "l","̣" },
+ ["Ḹ"]={ "Ḷ","̄" },
+ ["ḹ"]={ "ḷ","̄" },
+ ["Ḻ"]={ "L","̱" },
+ ["ḻ"]={ "l","̱" },
+ ["Ḽ"]={ "L","̭" },
+ ["ḽ"]={ "l","̭" },
+ ["Ḿ"]={ "M","́" },
+ ["ḿ"]={ "m","́" },
+ ["Ṁ"]={ "M","̇" },
+ ["ṁ"]={ "m","̇" },
+ ["Ṃ"]={ "M","̣" },
+ ["ṃ"]={ "m","̣" },
+ ["Ṅ"]={ "N","̇" },
+ ["ṅ"]={ "n","̇" },
+ ["Ṇ"]={ "N","̣" },
+ ["ṇ"]={ "n","̣" },
+ ["Ṉ"]={ "N","̱" },
+ ["ṉ"]={ "n","̱" },
+ ["Ṋ"]={ "N","̭" },
+ ["ṋ"]={ "n","̭" },
+ ["Ṍ"]={ "Õ","́" },
+ ["ṍ"]={ "õ","́" },
+ ["Ṏ"]={ "Õ","̈" },
+ ["ṏ"]={ "õ","̈" },
+ ["Ṑ"]={ "Ō","̀" },
+ ["ṑ"]={ "ō","̀" },
+ ["Ṓ"]={ "Ō","́" },
+ ["ṓ"]={ "ō","́" },
+ ["Ṕ"]={ "P","́" },
+ ["ṕ"]={ "p","́" },
+ ["Ṗ"]={ "P","̇" },
+ ["ṗ"]={ "p","̇" },
+ ["Ṙ"]={ "R","̇" },
+ ["ṙ"]={ "r","̇" },
+ ["Ṛ"]={ "R","̣" },
+ ["ṛ"]={ "r","̣" },
+ ["Ṝ"]={ "Ṛ","̄" },
+ ["ṝ"]={ "ṛ","̄" },
+ ["Ṟ"]={ "R","̱" },
+ ["ṟ"]={ "r","̱" },
+ ["Ṡ"]={ "S","̇" },
+ ["ṡ"]={ "s","̇" },
+ ["Ṣ"]={ "S","̣" },
+ ["ṣ"]={ "s","̣" },
+ ["Ṥ"]={ "Ś","̇" },
+ ["ṥ"]={ "ś","̇" },
+ ["Ṧ"]={ "Š","̇" },
+ ["ṧ"]={ "š","̇" },
+ ["Ṩ"]={ "Ṣ","̇" },
+ ["ṩ"]={ "ṣ","̇" },
+ ["Ṫ"]={ "T","̇" },
+ ["ṫ"]={ "t","̇" },
+ ["Ṭ"]={ "T","̣" },
+ ["ṭ"]={ "t","̣" },
+ ["Ṯ"]={ "T","̱" },
+ ["ṯ"]={ "t","̱" },
+ ["Ṱ"]={ "T","̭" },
+ ["ṱ"]={ "t","̭" },
+ ["Ṳ"]={ "U","̤" },
+ ["ṳ"]={ "u","̤" },
+ ["Ṵ"]={ "U","̰" },
+ ["ṵ"]={ "u","̰" },
+ ["Ṷ"]={ "U","̭" },
+ ["ṷ"]={ "u","̭" },
+ ["Ṹ"]={ "Ũ","́" },
+ ["ṹ"]={ "ũ","́" },
+ ["Ṻ"]={ "Ū","̈" },
+ ["ṻ"]={ "ū","̈" },
+ ["Ṽ"]={ "V","̃" },
+ ["ṽ"]={ "v","̃" },
+ ["Ṿ"]={ "V","̣" },
+ ["ṿ"]={ "v","̣" },
+ ["Ẁ"]={ "W","̀" },
+ ["ẁ"]={ "w","̀" },
+ ["Ẃ"]={ "W","́" },
+ ["ẃ"]={ "w","́" },
+ ["Ẅ"]={ "W","̈" },
+ ["ẅ"]={ "w","̈" },
+ ["Ẇ"]={ "W","̇" },
+ ["ẇ"]={ "w","̇" },
+ ["Ẉ"]={ "W","̣" },
+ ["ẉ"]={ "w","̣" },
+ ["Ẋ"]={ "X","̇" },
+ ["ẋ"]={ "x","̇" },
+ ["Ẍ"]={ "X","̈" },
+ ["ẍ"]={ "x","̈" },
+ ["Ẏ"]={ "Y","̇" },
+ ["ẏ"]={ "y","̇" },
+ ["Ẑ"]={ "Z","̂" },
+ ["ẑ"]={ "z","̂" },
+ ["Ẓ"]={ "Z","̣" },
+ ["ẓ"]={ "z","̣" },
+ ["Ẕ"]={ "Z","̱" },
+ ["ẕ"]={ "z","̱" },
+ ["ẖ"]={ "h","̱" },
+ ["ẗ"]={ "t","̈" },
+ ["ẘ"]={ "w","̊" },
+ ["ẙ"]={ "y","̊" },
+ ["ẛ"]={ "ſ","̇" },
+ ["Ạ"]={ "A","̣" },
+ ["ạ"]={ "a","̣" },
+ ["Ả"]={ "A","̉" },
+ ["ả"]={ "a","̉" },
+ ["Ấ"]={ "Â","́" },
+ ["ấ"]={ "â","́" },
+ ["Ầ"]={ "Â","̀" },
+ ["ầ"]={ "â","̀" },
+ ["Ẩ"]={ "Â","̉" },
+ ["ẩ"]={ "â","̉" },
+ ["Ẫ"]={ "Â","̃" },
+ ["ẫ"]={ "â","̃" },
+ ["Ậ"]={ "Ạ","̂" },
+ ["ậ"]={ "ạ","̂" },
+ ["Ắ"]={ "Ă","́" },
+ ["ắ"]={ "ă","́" },
+ ["Ằ"]={ "Ă","̀" },
+ ["ằ"]={ "ă","̀" },
+ ["Ẳ"]={ "Ă","̉" },
+ ["ẳ"]={ "ă","̉" },
+ ["Ẵ"]={ "Ă","̃" },
+ ["ẵ"]={ "ă","̃" },
+ ["Ặ"]={ "Ạ","̆" },
+ ["ặ"]={ "ạ","̆" },
+ ["Ẹ"]={ "E","̣" },
+ ["ẹ"]={ "e","̣" },
+ ["Ẻ"]={ "E","̉" },
+ ["ẻ"]={ "e","̉" },
+ ["Ẽ"]={ "E","̃" },
+ ["ẽ"]={ "e","̃" },
+ ["Ế"]={ "Ê","́" },
+ ["ế"]={ "ê","́" },
+ ["Ề"]={ "Ê","̀" },
+ ["ề"]={ "ê","̀" },
+ ["Ể"]={ "Ê","̉" },
+ ["ể"]={ "ê","̉" },
+ ["Ễ"]={ "Ê","̃" },
+ ["ễ"]={ "ê","̃" },
+ ["Ệ"]={ "Ẹ","̂" },
+ ["ệ"]={ "ẹ","̂" },
+ ["Ỉ"]={ "I","̉" },
+ ["ỉ"]={ "i","̉" },
+ ["Ị"]={ "I","̣" },
+ ["ị"]={ "i","̣" },
+ ["Ọ"]={ "O","̣" },
+ ["ọ"]={ "o","̣" },
+ ["Ỏ"]={ "O","̉" },
+ ["ỏ"]={ "o","̉" },
+ ["Ố"]={ "Ô","́" },
+ ["ố"]={ "ô","́" },
+ ["Ồ"]={ "Ô","̀" },
+ ["ồ"]={ "ô","̀" },
+ ["Ổ"]={ "Ô","̉" },
+ ["ổ"]={ "ô","̉" },
+ ["Ỗ"]={ "Ô","̃" },
+ ["ỗ"]={ "ô","̃" },
+ ["Ộ"]={ "Ọ","̂" },
+ ["ộ"]={ "ọ","̂" },
+ ["Ớ"]={ "Ơ","́" },
+ ["ớ"]={ "ơ","́" },
+ ["Ờ"]={ "Ơ","̀" },
+ ["ờ"]={ "ơ","̀" },
+ ["Ở"]={ "Ơ","̉" },
+ ["ở"]={ "ơ","̉" },
+ ["Ỡ"]={ "Ơ","̃" },
+ ["ỡ"]={ "ơ","̃" },
+ ["Ợ"]={ "Ơ","̣" },
+ ["ợ"]={ "ơ","̣" },
+ ["Ụ"]={ "U","̣" },
+ ["ụ"]={ "u","̣" },
+ ["Ủ"]={ "U","̉" },
+ ["ủ"]={ "u","̉" },
+ ["Ứ"]={ "Ư","́" },
+ ["ứ"]={ "ư","́" },
+ ["Ừ"]={ "Ư","̀" },
+ ["ừ"]={ "ư","̀" },
+ ["Ử"]={ "Ư","̉" },
+ ["ử"]={ "ư","̉" },
+ ["Ữ"]={ "Ư","̃" },
+ ["ữ"]={ "ư","̃" },
+ ["Ự"]={ "Ư","̣" },
+ ["ự"]={ "ư","̣" },
+ ["Ỳ"]={ "Y","̀" },
+ ["ỳ"]={ "y","̀" },
+ ["Ỵ"]={ "Y","̣" },
+ ["ỵ"]={ "y","̣" },
+ ["Ỷ"]={ "Y","̉" },
+ ["ỷ"]={ "y","̉" },
+ ["Ỹ"]={ "Y","̃" },
+ ["ỹ"]={ "y","̃" },
+ ["ἀ"]={ "α","̓" },
+ ["ἁ"]={ "α","̔" },
+ ["ἂ"]={ "ἀ","̀" },
+ ["ἃ"]={ "ἁ","̀" },
+ ["ἄ"]={ "ἀ","́" },
+ ["ἅ"]={ "ἁ","́" },
+ ["ἆ"]={ "ἀ","͂" },
+ ["ἇ"]={ "ἁ","͂" },
+ ["Ἀ"]={ "Α","̓" },
+ ["Ἁ"]={ "Α","̔" },
+ ["Ἂ"]={ "Ἀ","̀" },
+ ["Ἃ"]={ "Ἁ","̀" },
+ ["Ἄ"]={ "Ἀ","́" },
+ ["Ἅ"]={ "Ἁ","́" },
+ ["Ἆ"]={ "Ἀ","͂" },
+ ["Ἇ"]={ "Ἁ","͂" },
+ ["ἐ"]={ "ε","̓" },
+ ["ἑ"]={ "ε","̔" },
+ ["ἒ"]={ "ἐ","̀" },
+ ["ἓ"]={ "ἑ","̀" },
+ ["ἔ"]={ "ἐ","́" },
+ ["ἕ"]={ "ἑ","́" },
+ ["Ἐ"]={ "Ε","̓" },
+ ["Ἑ"]={ "Ε","̔" },
+ ["Ἒ"]={ "Ἐ","̀" },
+ ["Ἓ"]={ "Ἑ","̀" },
+ ["Ἔ"]={ "Ἐ","́" },
+ ["Ἕ"]={ "Ἑ","́" },
+ ["ἠ"]={ "η","̓" },
+ ["ἡ"]={ "η","̔" },
+ ["ἢ"]={ "ἠ","̀" },
+ ["ἣ"]={ "ἡ","̀" },
+ ["ἤ"]={ "ἠ","́" },
+ ["ἥ"]={ "ἡ","́" },
+ ["ἦ"]={ "ἠ","͂" },
+ ["ἧ"]={ "ἡ","͂" },
+ ["Ἠ"]={ "Η","̓" },
+ ["Ἡ"]={ "Η","̔" },
+ ["Ἢ"]={ "Ἠ","̀" },
+ ["Ἣ"]={ "Ἡ","̀" },
+ ["Ἤ"]={ "Ἠ","́" },
+ ["Ἥ"]={ "Ἡ","́" },
+ ["Ἦ"]={ "Ἠ","͂" },
+ ["Ἧ"]={ "Ἡ","͂" },
+ ["ἰ"]={ "ι","̓" },
+ ["ἱ"]={ "ι","̔" },
+ ["ἲ"]={ "ἰ","̀" },
+ ["ἳ"]={ "ἱ","̀" },
+ ["ἴ"]={ "ἰ","́" },
+ ["ἵ"]={ "ἱ","́" },
+ ["ἶ"]={ "ἰ","͂" },
+ ["ἷ"]={ "ἱ","͂" },
+ ["Ἰ"]={ "Ι","̓" },
+ ["Ἱ"]={ "Ι","̔" },
+ ["Ἲ"]={ "Ἰ","̀" },
+ ["Ἳ"]={ "Ἱ","̀" },
+ ["Ἴ"]={ "Ἰ","́" },
+ ["Ἵ"]={ "Ἱ","́" },
+ ["Ἶ"]={ "Ἰ","͂" },
+ ["Ἷ"]={ "Ἱ","͂" },
+ ["ὀ"]={ "ο","̓" },
+ ["ὁ"]={ "ο","̔" },
+ ["ὂ"]={ "ὀ","̀" },
+ ["ὃ"]={ "ὁ","̀" },
+ ["ὄ"]={ "ὀ","́" },
+ ["ὅ"]={ "ὁ","́" },
+ ["Ὀ"]={ "Ο","̓" },
+ ["Ὁ"]={ "Ο","̔" },
+ ["Ὂ"]={ "Ὀ","̀" },
+ ["Ὃ"]={ "Ὁ","̀" },
+ ["Ὄ"]={ "Ὀ","́" },
+ ["Ὅ"]={ "Ὁ","́" },
+ ["ὐ"]={ "υ","̓" },
+ ["ὑ"]={ "υ","̔" },
+ ["ὒ"]={ "ὐ","̀" },
+ ["ὓ"]={ "ὑ","̀" },
+ ["ὔ"]={ "ὐ","́" },
+ ["ὕ"]={ "ὑ","́" },
+ ["ὖ"]={ "ὐ","͂" },
+ ["ὗ"]={ "ὑ","͂" },
+ ["Ὑ"]={ "Υ","̔" },
+ ["Ὓ"]={ "Ὑ","̀" },
+ ["Ὕ"]={ "Ὑ","́" },
+ ["Ὗ"]={ "Ὑ","͂" },
+ ["ὠ"]={ "ω","̓" },
+ ["ὡ"]={ "ω","̔" },
+ ["ὢ"]={ "ὠ","̀" },
+ ["ὣ"]={ "ὡ","̀" },
+ ["ὤ"]={ "ὠ","́" },
+ ["ὥ"]={ "ὡ","́" },
+ ["ὦ"]={ "ὠ","͂" },
+ ["ὧ"]={ "ὡ","͂" },
+ ["Ὠ"]={ "Ω","̓" },
+ ["Ὡ"]={ "Ω","̔" },
+ ["Ὢ"]={ "Ὠ","̀" },
+ ["Ὣ"]={ "Ὡ","̀" },
+ ["Ὤ"]={ "Ὠ","́" },
+ ["Ὥ"]={ "Ὡ","́" },
+ ["Ὦ"]={ "Ὠ","͂" },
+ ["Ὧ"]={ "Ὡ","͂" },
+ ["ὰ"]={ "α","̀" },
+ ["ὲ"]={ "ε","̀" },
+ ["ὴ"]={ "η","̀" },
+ ["ὶ"]={ "ι","̀" },
+ ["ὸ"]={ "ο","̀" },
+ ["ὺ"]={ "υ","̀" },
+ ["ὼ"]={ "ω","̀" },
+ ["ᾀ"]={ "ἀ","ͅ" },
+ ["ᾁ"]={ "ἁ","ͅ" },
+ ["ᾂ"]={ "ἂ","ͅ" },
+ ["ᾃ"]={ "ἃ","ͅ" },
+ ["ᾄ"]={ "ἄ","ͅ" },
+ ["ᾅ"]={ "ἅ","ͅ" },
+ ["ᾆ"]={ "ἆ","ͅ" },
+ ["ᾇ"]={ "ἇ","ͅ" },
+ ["ᾈ"]={ "Ἀ","ͅ" },
+ ["ᾉ"]={ "Ἁ","ͅ" },
+ ["ᾊ"]={ "Ἂ","ͅ" },
+ ["ᾋ"]={ "Ἃ","ͅ" },
+ ["ᾌ"]={ "Ἄ","ͅ" },
+ ["ᾍ"]={ "Ἅ","ͅ" },
+ ["ᾎ"]={ "Ἆ","ͅ" },
+ ["ᾏ"]={ "Ἇ","ͅ" },
+ ["ᾐ"]={ "ἠ","ͅ" },
+ ["ᾑ"]={ "ἡ","ͅ" },
+ ["ᾒ"]={ "ἢ","ͅ" },
+ ["ᾓ"]={ "ἣ","ͅ" },
+ ["ᾔ"]={ "ἤ","ͅ" },
+ ["ᾕ"]={ "ἥ","ͅ" },
+ ["ᾖ"]={ "ἦ","ͅ" },
+ ["ᾗ"]={ "ἧ","ͅ" },
+ ["ᾘ"]={ "Ἠ","ͅ" },
+ ["ᾙ"]={ "Ἡ","ͅ" },
+ ["ᾚ"]={ "Ἢ","ͅ" },
+ ["ᾛ"]={ "Ἣ","ͅ" },
+ ["ᾜ"]={ "Ἤ","ͅ" },
+ ["ᾝ"]={ "Ἥ","ͅ" },
+ ["ᾞ"]={ "Ἦ","ͅ" },
+ ["ᾟ"]={ "Ἧ","ͅ" },
+ ["ᾠ"]={ "ὠ","ͅ" },
+ ["ᾡ"]={ "ὡ","ͅ" },
+ ["ᾢ"]={ "ὢ","ͅ" },
+ ["ᾣ"]={ "ὣ","ͅ" },
+ ["ᾤ"]={ "ὤ","ͅ" },
+ ["ᾥ"]={ "ὥ","ͅ" },
+ ["ᾦ"]={ "ὦ","ͅ" },
+ ["ᾧ"]={ "ὧ","ͅ" },
+ ["ᾨ"]={ "Ὠ","ͅ" },
+ ["ᾩ"]={ "Ὡ","ͅ" },
+ ["ᾪ"]={ "Ὢ","ͅ" },
+ ["ᾫ"]={ "Ὣ","ͅ" },
+ ["ᾬ"]={ "Ὤ","ͅ" },
+ ["ᾭ"]={ "Ὥ","ͅ" },
+ ["ᾮ"]={ "Ὦ","ͅ" },
+ ["ᾯ"]={ "Ὧ","ͅ" },
+ ["ᾰ"]={ "α","̆" },
+ ["ᾱ"]={ "α","̄" },
+ ["ᾲ"]={ "ὰ","ͅ" },
+ ["ᾳ"]={ "α","ͅ" },
+ ["ᾴ"]={ "ά","ͅ" },
+ ["ᾶ"]={ "α","͂" },
+ ["ᾷ"]={ "ᾶ","ͅ" },
+ ["Ᾰ"]={ "Α","̆" },
+ ["Ᾱ"]={ "Α","̄" },
+ ["Ὰ"]={ "Α","̀" },
+ ["ᾼ"]={ "Α","ͅ" },
+ ["῁"]={ "¨","͂" },
+ ["ῂ"]={ "ὴ","ͅ" },
+ ["ῃ"]={ "η","ͅ" },
+ ["ῄ"]={ "ή","ͅ" },
+ ["ῆ"]={ "η","͂" },
+ ["ῇ"]={ "ῆ","ͅ" },
+ ["Ὲ"]={ "Ε","̀" },
+ ["Ὴ"]={ "Η","̀" },
+ ["ῌ"]={ "Η","ͅ" },
+ ["῍"]={ "᾿","̀" },
+ ["῎"]={ "᾿","́" },
+ ["῏"]={ "᾿","͂" },
+ ["ῐ"]={ "ι","̆" },
+ ["ῑ"]={ "ι","̄" },
+ ["ῒ"]={ "ϊ","̀" },
+ ["ῖ"]={ "ι","͂" },
+ ["ῗ"]={ "ϊ","͂" },
+ ["Ῐ"]={ "Ι","̆" },
+ ["Ῑ"]={ "Ι","̄" },
+ ["Ὶ"]={ "Ι","̀" },
+ ["῝"]={ "῾","̀" },
+ ["῞"]={ "῾","́" },
+ ["῟"]={ "῾","͂" },
+ ["ῠ"]={ "υ","̆" },
+ ["ῡ"]={ "υ","̄" },
+ ["ῢ"]={ "ϋ","̀" },
+ ["ῤ"]={ "ρ","̓" },
+ ["ῥ"]={ "ρ","̔" },
+ ["ῦ"]={ "υ","͂" },
+ ["ῧ"]={ "ϋ","͂" },
+ ["Ῠ"]={ "Υ","̆" },
+ ["Ῡ"]={ "Υ","̄" },
+ ["Ὺ"]={ "Υ","̀" },
+ ["Ῥ"]={ "Ρ","̔" },
+ ["῭"]={ "¨","̀" },
+ ["ῲ"]={ "ὼ","ͅ" },
+ ["ῳ"]={ "ω","ͅ" },
+ ["ῴ"]={ "ώ","ͅ" },
+ ["ῶ"]={ "ω","͂" },
+ ["ῷ"]={ "ῶ","ͅ" },
+ ["Ὸ"]={ "Ο","̀" },
+ ["Ὼ"]={ "Ω","̀" },
+ ["ῼ"]={ "Ω","ͅ" },
+ ["↚"]={ "←","̸" },
+ ["↛"]={ "→","̸" },
+ ["↮"]={ "↔","̸" },
+ ["⇍"]={ "⇐","̸" },
+ ["⇎"]={ "⇔","̸" },
+ ["⇏"]={ "⇒","̸" },
+ ["∄"]={ "∃","̸" },
+ ["∉"]={ "∈","̸" },
+ ["∌"]={ "∋","̸" },
+ ["∤"]={ "∣","̸" },
+ ["∦"]={ "∥","̸" },
+ ["≁"]={ "∼","̸" },
+ ["≄"]={ "≃","̸" },
+ ["≇"]={ "≅","̸" },
+ ["≉"]={ "≈","̸" },
+ ["≠"]={ "=","̸" },
+ ["≢"]={ "≡","̸" },
+ ["≭"]={ "≍","̸" },
+ ["≮"]={ "<","̸" },
+ ["≯"]={ ">","̸" },
+ ["≰"]={ "≤","̸" },
+ ["≱"]={ "≥","̸" },
+ ["≴"]={ "≲","̸" },
+ ["≵"]={ "≳","̸" },
+ ["≸"]={ "≶","̸" },
+ ["≹"]={ "≷","̸" },
+ ["⊀"]={ "≺","̸" },
+ ["⊁"]={ "≻","̸" },
+ ["⊄"]={ "⊂","̸" },
+ ["⊅"]={ "⊃","̸" },
+ ["⊈"]={ "⊆","̸" },
+ ["⊉"]={ "⊇","̸" },
+ ["⊬"]={ "⊢","̸" },
+ ["⊭"]={ "⊨","̸" },
+ ["⊮"]={ "⊩","̸" },
+ ["⊯"]={ "⊫","̸" },
+ ["⋠"]={ "≼","̸" },
+ ["⋡"]={ "≽","̸" },
+ ["⋢"]={ "⊑","̸" },
+ ["⋣"]={ "⊒","̸" },
+ ["⋪"]={ "⊲","̸" },
+ ["⋫"]={ "⊳","̸" },
+ ["⋬"]={ "⊴","̸" },
+ ["⋭"]={ "⊵","̸" },
+ ["⫝̸"]={ "⫝","̸" },
+ ["が"]={ "か","゙" },
+ ["ぎ"]={ "き","゙" },
+ ["ぐ"]={ "く","゙" },
+ ["げ"]={ "け","゙" },
+ ["ご"]={ "こ","゙" },
+ ["ざ"]={ "さ","゙" },
+ ["じ"]={ "し","゙" },
+ ["ず"]={ "す","゙" },
+ ["ぜ"]={ "せ","゙" },
+ ["ぞ"]={ "そ","゙" },
+ ["だ"]={ "た","゙" },
+ ["ぢ"]={ "ち","゙" },
+ ["づ"]={ "つ","゙" },
+ ["で"]={ "て","゙" },
+ ["ど"]={ "と","゙" },
+ ["ば"]={ "は","゙" },
+ ["ぱ"]={ "は","゚" },
+ ["び"]={ "ひ","゙" },
+ ["ぴ"]={ "ひ","゚" },
+ ["ぶ"]={ "ふ","゙" },
+ ["ぷ"]={ "ふ","゚" },
+ ["べ"]={ "へ","゙" },
+ ["ぺ"]={ "へ","゚" },
+ ["ぼ"]={ "ほ","゙" },
+ ["ぽ"]={ "ほ","゚" },
+ ["ゔ"]={ "う","゙" },
+ ["ゞ"]={ "ゝ","゙" },
+ ["ガ"]={ "カ","゙" },
+ ["ギ"]={ "キ","゙" },
+ ["グ"]={ "ク","゙" },
+ ["ゲ"]={ "ケ","゙" },
+ ["ゴ"]={ "コ","゙" },
+ ["ザ"]={ "サ","゙" },
+ ["ジ"]={ "シ","゙" },
+ ["ズ"]={ "ス","゙" },
+ ["ゼ"]={ "セ","゙" },
+ ["ゾ"]={ "ソ","゙" },
+ ["ダ"]={ "タ","゙" },
+ ["ヂ"]={ "チ","゙" },
+ ["ヅ"]={ "ツ","゙" },
+ ["デ"]={ "テ","゙" },
+ ["ド"]={ "ト","゙" },
+ ["バ"]={ "ハ","゙" },
+ ["パ"]={ "ハ","゚" },
+ ["ビ"]={ "ヒ","゙" },
+ ["ピ"]={ "ヒ","゚" },
+ ["ブ"]={ "フ","゙" },
+ ["プ"]={ "フ","゚" },
+ ["ベ"]={ "ヘ","゙" },
+ ["ペ"]={ "ヘ","゚" },
+ ["ボ"]={ "ホ","゙" },
+ ["ポ"]={ "ホ","゚" },
+ ["ヴ"]={ "ウ","゙" },
+ ["ヷ"]={ "ワ","゙" },
+ ["ヸ"]={ "ヰ","゙" },
+ ["ヹ"]={ "ヱ","゙" },
+ ["ヺ"]={ "ヲ","゙" },
+ ["ヾ"]={ "ヽ","゙" },
+ ["יִ"]={ "י","ִ" },
+ ["ײַ"]={ "ײ","ַ" },
+ ["שׁ"]={ "ש","ׁ" },
+ ["שׂ"]={ "ש","ׂ" },
+ ["שּׁ"]={ "שּ","ׁ" },
+ ["שּׂ"]={ "שּ","ׂ" },
+ ["אַ"]={ "א","ַ" },
+ ["אָ"]={ "א","ָ" },
+ ["אּ"]={ "א","ּ" },
+ ["בּ"]={ "ב","ּ" },
+ ["גּ"]={ "ג","ּ" },
+ ["דּ"]={ "ד","ּ" },
+ ["הּ"]={ "ה","ּ" },
+ ["וּ"]={ "ו","ּ" },
+ ["זּ"]={ "ז","ּ" },
+ ["טּ"]={ "ט","ּ" },
+ ["יּ"]={ "י","ּ" },
+ ["ךּ"]={ "ך","ּ" },
+ ["כּ"]={ "כ","ּ" },
+ ["לּ"]={ "ל","ּ" },
+ ["מּ"]={ "מ","ּ" },
+ ["נּ"]={ "נ","ּ" },
+ ["סּ"]={ "ס","ּ" },
+ ["ףּ"]={ "ף","ּ" },
+ ["פּ"]={ "פ","ּ" },
+ ["צּ"]={ "צ","ּ" },
+ ["קּ"]={ "ק","ּ" },
+ ["רּ"]={ "ר","ּ" },
+ ["שּ"]={ "ש","ּ" },
+ ["תּ"]={ "ת","ּ" },
+ ["וֹ"]={ "ו","ֹ" },
+ ["בֿ"]={ "ב","ֿ" },
+ ["כֿ"]={ "כ","ֿ" },
+ ["פֿ"]={ "פ","ֿ" },
+ ["𑂚"]={ "𑂙","𑂺" },
+ ["𑂜"]={ "𑂛","𑂺" },
+ ["𑂫"]={ "𑂥","𑂺" },
+ ["𑄮"]={ "𑄱","𑄧" },
+ ["𑄯"]={ "𑄲","𑄧" },
+ ["𑍋"]={ "𑍇","𑌾" },
+ ["𑍌"]={ "𑍇","𑍗" },
+ ["𑒻"]={ "𑒹","𑒺" },
+ ["𑒼"]={ "𑒹","𑒰" },
+ ["𑒾"]={ "𑒹","𑒽" },
+ ["𑖺"]={ "𑖸","𑖯" },
+ ["𑖻"]={ "𑖹","𑖯" },
+ ["𝅗𝅥"]={ "𝅗","𝅥" },
+ ["𝅘𝅥"]={ "𝅘","𝅥" },
+ ["𝅘𝅥𝅮"]={ "𝅘𝅥","𝅮" },
+ ["𝅘𝅥𝅯"]={ "𝅘𝅥","𝅯" },
+ ["𝅘𝅥𝅰"]={ "𝅘𝅥","𝅰" },
+ ["𝅘𝅥𝅱"]={ "𝅘𝅥","𝅱" },
+ ["𝅘𝅥𝅲"]={ "𝅘𝅥","𝅲" },
+ ["𝆹𝅥"]={ "𝆹","𝅥" },
+ ["𝆺𝅥"]={ "𝆺","𝅥" },
+ ["𝆹𝅥𝅮"]={ "𝆹𝅥","𝅮" },
+ ["𝆺𝅥𝅮"]={ "𝆺𝅥","𝅮" },
+ ["𝆹𝅥𝅯"]={ "𝆹𝅥","𝅯" },
+ ["𝆺𝅥𝅯"]={ "𝆺𝅥","𝅯" },
+ },
+ },
+ {
+ ["data"]={
+ ["À"]={ "A","̀" },
+ ["Á"]={ "A","́" },
+ ["Â"]={ "A","̂" },
+ ["Ã"]={ "A","̃" },
+ ["Ä"]={ "A","̈" },
+ ["Å"]={ "A","̊" },
+ ["Ç"]={ "C","̧" },
+ ["È"]={ "E","̀" },
+ ["É"]={ "E","́" },
+ ["Ê"]={ "E","̂" },
+ ["Ë"]={ "E","̈" },
+ ["Ì"]={ "I","̀" },
+ ["Í"]={ "I","́" },
+ ["Î"]={ "I","̂" },
+ ["Ï"]={ "I","̈" },
+ ["Ñ"]={ "N","̃" },
+ ["Ò"]={ "O","̀" },
+ ["Ó"]={ "O","́" },
+ ["Ô"]={ "O","̂" },
+ ["Õ"]={ "O","̃" },
+ ["Ö"]={ "O","̈" },
+ ["Ù"]={ "U","̀" },
+ ["Ú"]={ "U","́" },
+ ["Û"]={ "U","̂" },
+ ["Ü"]={ "U","̈" },
+ ["Ý"]={ "Y","́" },
+ ["à"]={ "a","̀" },
+ ["á"]={ "a","́" },
+ ["â"]={ "a","̂" },
+ ["ã"]={ "a","̃" },
+ ["ä"]={ "a","̈" },
+ ["å"]={ "a","̊" },
+ ["ç"]={ "c","̧" },
+ ["è"]={ "e","̀" },
+ ["é"]={ "e","́" },
+ ["ê"]={ "e","̂" },
+ ["ë"]={ "e","̈" },
+ ["ì"]={ "i","̀" },
+ ["í"]={ "i","́" },
+ ["î"]={ "i","̂" },
+ ["ï"]={ "i","̈" },
+ ["ñ"]={ "n","̃" },
+ ["ò"]={ "o","̀" },
+ ["ó"]={ "o","́" },
+ ["ô"]={ "o","̂" },
+ ["õ"]={ "o","̃" },
+ ["ö"]={ "o","̈" },
+ ["ù"]={ "u","̀" },
+ ["ú"]={ "u","́" },
+ ["û"]={ "u","̂" },
+ ["ü"]={ "u","̈" },
+ ["ý"]={ "y","́" },
+ ["ÿ"]={ "y","̈" },
+ ["Ā"]={ "A","̄" },
+ ["ā"]={ "a","̄" },
+ ["Ă"]={ "A","̆" },
+ ["ă"]={ "a","̆" },
+ ["Ą"]={ "A","̨" },
+ ["ą"]={ "a","̨" },
+ ["Ć"]={ "C","́" },
+ ["ć"]={ "c","́" },
+ ["Ĉ"]={ "C","̂" },
+ ["ĉ"]={ "c","̂" },
+ ["Ċ"]={ "C","̇" },
+ ["ċ"]={ "c","̇" },
+ ["Č"]={ "C","̌" },
+ ["č"]={ "c","̌" },
+ ["Ď"]={ "D","̌" },
+ ["ď"]={ "d","̌" },
+ ["Ē"]={ "E","̄" },
+ ["ē"]={ "e","̄" },
+ ["Ĕ"]={ "E","̆" },
+ ["ĕ"]={ "e","̆" },
+ ["Ė"]={ "E","̇" },
+ ["ė"]={ "e","̇" },
+ ["Ę"]={ "E","̨" },
+ ["ę"]={ "e","̨" },
+ ["Ě"]={ "E","̌" },
+ ["ě"]={ "e","̌" },
+ ["Ĝ"]={ "G","̂" },
+ ["ĝ"]={ "g","̂" },
+ ["Ğ"]={ "G","̆" },
+ ["ğ"]={ "g","̆" },
+ ["Ġ"]={ "G","̇" },
+ ["ġ"]={ "g","̇" },
+ ["Ģ"]={ "G","̧" },
+ ["ģ"]={ "g","̧" },
+ ["Ĥ"]={ "H","̂" },
+ ["ĥ"]={ "h","̂" },
+ ["Ĩ"]={ "I","̃" },
+ ["ĩ"]={ "i","̃" },
+ ["Ī"]={ "I","̄" },
+ ["ī"]={ "i","̄" },
+ ["Ĭ"]={ "I","̆" },
+ ["ĭ"]={ "i","̆" },
+ ["Į"]={ "I","̨" },
+ ["į"]={ "i","̨" },
+ ["İ"]={ "I","̇" },
+ ["Ĵ"]={ "J","̂" },
+ ["ĵ"]={ "j","̂" },
+ ["Ķ"]={ "K","̧" },
+ ["ķ"]={ "k","̧" },
+ ["Ĺ"]={ "L","́" },
+ ["ĺ"]={ "l","́" },
+ ["Ļ"]={ "L","̧" },
+ ["ļ"]={ "l","̧" },
+ ["Ľ"]={ "L","̌" },
+ ["ľ"]={ "l","̌" },
+ ["Ń"]={ "N","́" },
+ ["ń"]={ "n","́" },
+ ["Ņ"]={ "N","̧" },
+ ["ņ"]={ "n","̧" },
+ ["Ň"]={ "N","̌" },
+ ["ň"]={ "n","̌" },
+ ["Ō"]={ "O","̄" },
+ ["ō"]={ "o","̄" },
+ ["Ŏ"]={ "O","̆" },
+ ["ŏ"]={ "o","̆" },
+ ["Ő"]={ "O","̋" },
+ ["ő"]={ "o","̋" },
+ ["Ŕ"]={ "R","́" },
+ ["ŕ"]={ "r","́" },
+ ["Ŗ"]={ "R","̧" },
+ ["ŗ"]={ "r","̧" },
+ ["Ř"]={ "R","̌" },
+ ["ř"]={ "r","̌" },
+ ["Ś"]={ "S","́" },
+ ["ś"]={ "s","́" },
+ ["Ŝ"]={ "S","̂" },
+ ["ŝ"]={ "s","̂" },
+ ["Ş"]={ "S","̧" },
+ ["ş"]={ "s","̧" },
+ ["Š"]={ "S","̌" },
+ ["š"]={ "s","̌" },
+ ["Ţ"]={ "T","̧" },
+ ["ţ"]={ "t","̧" },
+ ["Ť"]={ "T","̌" },
+ ["ť"]={ "t","̌" },
+ ["Ũ"]={ "U","̃" },
+ ["ũ"]={ "u","̃" },
+ ["Ū"]={ "U","̄" },
+ ["ū"]={ "u","̄" },
+ ["Ŭ"]={ "U","̆" },
+ ["ŭ"]={ "u","̆" },
+ ["Ů"]={ "U","̊" },
+ ["ů"]={ "u","̊" },
+ ["Ű"]={ "U","̋" },
+ ["ű"]={ "u","̋" },
+ ["Ų"]={ "U","̨" },
+ ["ų"]={ "u","̨" },
+ ["Ŵ"]={ "W","̂" },
+ ["ŵ"]={ "w","̂" },
+ ["Ŷ"]={ "Y","̂" },
+ ["ŷ"]={ "y","̂" },
+ ["Ÿ"]={ "Y","̈" },
+ ["Ź"]={ "Z","́" },
+ ["ź"]={ "z","́" },
+ ["Ż"]={ "Z","̇" },
+ ["ż"]={ "z","̇" },
+ ["Ž"]={ "Z","̌" },
+ ["ž"]={ "z","̌" },
+ ["Ơ"]={ "O","̛" },
+ ["ơ"]={ "o","̛" },
+ ["Ư"]={ "U","̛" },
+ ["ư"]={ "u","̛" },
+ ["Ǎ"]={ "A","̌" },
+ ["ǎ"]={ "a","̌" },
+ ["Ǐ"]={ "I","̌" },
+ ["ǐ"]={ "i","̌" },
+ ["Ǒ"]={ "O","̌" },
+ ["ǒ"]={ "o","̌" },
+ ["Ǔ"]={ "U","̌" },
+ ["ǔ"]={ "u","̌" },
+ ["Ǖ"]={ "Ü","̄" },
+ ["ǖ"]={ "ü","̄" },
+ ["Ǘ"]={ "Ü","́" },
+ ["ǘ"]={ "ü","́" },
+ ["Ǚ"]={ "Ü","̌" },
+ ["ǚ"]={ "ü","̌" },
+ ["Ǜ"]={ "Ü","̀" },
+ ["ǜ"]={ "ü","̀" },
+ ["Ǟ"]={ "Ä","̄" },
+ ["ǟ"]={ "ä","̄" },
+ ["Ǡ"]={ "Ȧ","̄" },
+ ["ǡ"]={ "ȧ","̄" },
+ ["Ǣ"]={ "Æ","̄" },
+ ["ǣ"]={ "æ","̄" },
+ ["Ǧ"]={ "G","̌" },
+ ["ǧ"]={ "g","̌" },
+ ["Ǩ"]={ "K","̌" },
+ ["ǩ"]={ "k","̌" },
+ ["Ǫ"]={ "O","̨" },
+ ["ǫ"]={ "o","̨" },
+ ["Ǭ"]={ "Ǫ","̄" },
+ ["ǭ"]={ "ǫ","̄" },
+ ["Ǯ"]={ "Ʒ","̌" },
+ ["ǯ"]={ "ʒ","̌" },
+ ["ǰ"]={ "j","̌" },
+ ["Ǵ"]={ "G","́" },
+ ["ǵ"]={ "g","́" },
+ ["Ǹ"]={ "N","̀" },
+ ["ǹ"]={ "n","̀" },
+ ["Ǻ"]={ "Å","́" },
+ ["ǻ"]={ "å","́" },
+ ["Ǽ"]={ "Æ","́" },
+ ["ǽ"]={ "æ","́" },
+ ["Ǿ"]={ "Ø","́" },
+ ["ǿ"]={ "ø","́" },
+ ["Ȁ"]={ "A","̏" },
+ ["ȁ"]={ "a","̏" },
+ ["Ȃ"]={ "A","̑" },
+ ["ȃ"]={ "a","̑" },
+ ["Ȅ"]={ "E","̏" },
+ ["ȅ"]={ "e","̏" },
+ ["Ȇ"]={ "E","̑" },
+ ["ȇ"]={ "e","̑" },
+ ["Ȉ"]={ "I","̏" },
+ ["ȉ"]={ "i","̏" },
+ ["Ȋ"]={ "I","̑" },
+ ["ȋ"]={ "i","̑" },
+ ["Ȍ"]={ "O","̏" },
+ ["ȍ"]={ "o","̏" },
+ ["Ȏ"]={ "O","̑" },
+ ["ȏ"]={ "o","̑" },
+ ["Ȑ"]={ "R","̏" },
+ ["ȑ"]={ "r","̏" },
+ ["Ȓ"]={ "R","̑" },
+ ["ȓ"]={ "r","̑" },
+ ["Ȕ"]={ "U","̏" },
+ ["ȕ"]={ "u","̏" },
+ ["Ȗ"]={ "U","̑" },
+ ["ȗ"]={ "u","̑" },
+ ["Ș"]={ "S","̦" },
+ ["ș"]={ "s","̦" },
+ ["Ț"]={ "T","̦" },
+ ["ț"]={ "t","̦" },
+ ["Ȟ"]={ "H","̌" },
+ ["ȟ"]={ "h","̌" },
+ ["Ȧ"]={ "A","̇" },
+ ["ȧ"]={ "a","̇" },
+ ["Ȩ"]={ "E","̧" },
+ ["ȩ"]={ "e","̧" },
+ ["Ȫ"]={ "Ö","̄" },
+ ["ȫ"]={ "ö","̄" },
+ ["Ȭ"]={ "Õ","̄" },
+ ["ȭ"]={ "õ","̄" },
+ ["Ȯ"]={ "O","̇" },
+ ["ȯ"]={ "o","̇" },
+ ["Ȱ"]={ "Ȯ","̄" },
+ ["ȱ"]={ "ȯ","̄" },
+ ["Ȳ"]={ "Y","̄" },
+ ["ȳ"]={ "y","̄" },
+ ["̈́"]={ "̈","́" },
+ ["΅"]={ "¨","́" },
+ ["Ά"]={ "Α","́" },
+ ["Έ"]={ "Ε","́" },
+ ["Ή"]={ "Η","́" },
+ ["Ί"]={ "Ι","́" },
+ ["Ό"]={ "Ο","́" },
+ ["Ύ"]={ "Υ","́" },
+ ["Ώ"]={ "Ω","́" },
+ ["ΐ"]={ "ϊ","́" },
+ ["Ϊ"]={ "Ι","̈" },
+ ["Ϋ"]={ "Υ","̈" },
+ ["ά"]={ "α","́" },
+ ["έ"]={ "ε","́" },
+ ["ή"]={ "η","́" },
+ ["ί"]={ "ι","́" },
+ ["ΰ"]={ "ϋ","́" },
+ ["ϊ"]={ "ι","̈" },
+ ["ϋ"]={ "υ","̈" },
+ ["ό"]={ "ο","́" },
+ ["ύ"]={ "υ","́" },
+ ["ώ"]={ "ω","́" },
+ ["ϓ"]={ "ϒ","́" },
+ ["ϔ"]={ "ϒ","̈" },
+ ["Ѐ"]={ "Е","̀" },
+ ["Ё"]={ "Е","̈" },
+ ["Ѓ"]={ "Г","́" },
+ ["Ї"]={ "І","̈" },
+ ["Ќ"]={ "К","́" },
+ ["Ѝ"]={ "И","̀" },
+ ["Ў"]={ "У","̆" },
+ ["Й"]={ "И","̆" },
+ ["й"]={ "и","̆" },
+ ["ѐ"]={ "е","̀" },
+ ["ё"]={ "е","̈" },
+ ["ѓ"]={ "г","́" },
+ ["ї"]={ "і","̈" },
+ ["ќ"]={ "к","́" },
+ ["ѝ"]={ "и","̀" },
+ ["ў"]={ "у","̆" },
+ ["Ѷ"]={ "Ѵ","̏" },
+ ["ѷ"]={ "ѵ","̏" },
+ ["Ӂ"]={ "Ж","̆" },
+ ["ӂ"]={ "ж","̆" },
+ ["Ӑ"]={ "А","̆" },
+ ["ӑ"]={ "а","̆" },
+ ["Ӓ"]={ "А","̈" },
+ ["ӓ"]={ "а","̈" },
+ ["Ӗ"]={ "Е","̆" },
+ ["ӗ"]={ "е","̆" },
+ ["Ӛ"]={ "Ә","̈" },
+ ["ӛ"]={ "ә","̈" },
+ ["Ӝ"]={ "Ж","̈" },
+ ["ӝ"]={ "ж","̈" },
+ ["Ӟ"]={ "З","̈" },
+ ["ӟ"]={ "з","̈" },
+ ["Ӣ"]={ "И","̄" },
+ ["ӣ"]={ "и","̄" },
+ ["Ӥ"]={ "И","̈" },
+ ["ӥ"]={ "и","̈" },
+ ["Ӧ"]={ "О","̈" },
+ ["ӧ"]={ "о","̈" },
+ ["Ӫ"]={ "Ө","̈" },
+ ["ӫ"]={ "ө","̈" },
+ ["Ӭ"]={ "Э","̈" },
+ ["ӭ"]={ "э","̈" },
+ ["Ӯ"]={ "У","̄" },
+ ["ӯ"]={ "у","̄" },
+ ["Ӱ"]={ "У","̈" },
+ ["ӱ"]={ "у","̈" },
+ ["Ӳ"]={ "У","̋" },
+ ["ӳ"]={ "у","̋" },
+ ["Ӵ"]={ "Ч","̈" },
+ ["ӵ"]={ "ч","̈" },
+ ["Ӹ"]={ "Ы","̈" },
+ ["ӹ"]={ "ы","̈" },
+ ["آ"]={ "ا","ٓ" },
+ ["أ"]={ "ا","ٔ" },
+ ["ؤ"]={ "و","ٔ" },
+ ["إ"]={ "ا","ٕ" },
+ ["ئ"]={ "ي","ٔ" },
+ ["ۀ"]={ "ە","ٔ" },
+ ["ۂ"]={ "ہ","ٔ" },
+ ["ۓ"]={ "ے","ٔ" },
+ ["ऩ"]={ "न","़" },
+ ["ऱ"]={ "र","़" },
+ ["ऴ"]={ "ळ","़" },
+ ["क़"]={ "क","़" },
+ ["ख़"]={ "ख","़" },
+ ["ग़"]={ "ग","़" },
+ ["ज़"]={ "ज","़" },
+ ["ड़"]={ "ड","़" },
+ ["ढ़"]={ "ढ","़" },
+ ["फ़"]={ "फ","़" },
+ ["य़"]={ "य","़" },
+ ["ো"]={ "ে","া" },
+ ["ৌ"]={ "ে","ৗ" },
+ ["ড়"]={ "ড","়" },
+ ["ঢ়"]={ "ঢ","়" },
+ ["য়"]={ "য","়" },
+ ["ਲ਼"]={ "ਲ","਼" },
+ ["ਸ਼"]={ "ਸ","਼" },
+ ["ਖ਼"]={ "ਖ","਼" },
+ ["ਗ਼"]={ "ਗ","਼" },
+ ["ਜ਼"]={ "ਜ","਼" },
+ ["ਫ਼"]={ "ਫ","਼" },
+ ["ୈ"]={ "େ","ୖ" },
+ ["ୋ"]={ "େ","ା" },
+ ["ୌ"]={ "େ","ୗ" },
+ ["ଡ଼"]={ "ଡ","଼" },
+ ["ଢ଼"]={ "ଢ","଼" },
+ ["ஔ"]={ "ஒ","ௗ" },
+ ["ொ"]={ "ெ","ா" },
+ ["ோ"]={ "ே","ா" },
+ ["ௌ"]={ "ெ","ௗ" },
+ ["ై"]={ "ె","ౖ" },
+ ["ೀ"]={ "ಿ","ೕ" },
+ ["ೇ"]={ "ೆ","ೕ" },
+ ["ೈ"]={ "ೆ","ೖ" },
+ ["ೊ"]={ "ೆ","ೂ" },
+ ["ೋ"]={ "ೊ","ೕ" },
+ ["ൊ"]={ "െ","ാ" },
+ ["ോ"]={ "േ","ാ" },
+ ["ൌ"]={ "െ","ൗ" },
+ ["ේ"]={ "ෙ","්" },
+ ["ො"]={ "ෙ","ා" },
+ ["ෝ"]={ "ො","්" },
+ ["ෞ"]={ "ෙ","ෟ" },
+ ["གྷ"]={ "ག","ྷ" },
+ ["ཌྷ"]={ "ཌ","ྷ" },
+ ["དྷ"]={ "ད","ྷ" },
+ ["བྷ"]={ "བ","ྷ" },
+ ["ཛྷ"]={ "ཛ","ྷ" },
+ ["ཀྵ"]={ "ཀ","ྵ" },
+ ["ཱི"]={ "ཱ","ི" },
+ ["ཱུ"]={ "ཱ","ུ" },
+ ["ྲྀ"]={ "ྲ","ྀ" },
+ ["ླྀ"]={ "ླ","ྀ" },
+ ["ཱྀ"]={ "ཱ","ྀ" },
+ ["ྒྷ"]={ "ྒ","ྷ" },
+ ["ྜྷ"]={ "ྜ","ྷ" },
+ ["ྡྷ"]={ "ྡ","ྷ" },
+ ["ྦྷ"]={ "ྦ","ྷ" },
+ ["ྫྷ"]={ "ྫ","ྷ" },
+ ["ྐྵ"]={ "ྐ","ྵ" },
+ ["ဦ"]={ "ဥ","ီ" },
+ ["ᬆ"]={ "ᬅ","ᬵ" },
+ ["ᬈ"]={ "ᬇ","ᬵ" },
+ ["ᬊ"]={ "ᬉ","ᬵ" },
+ ["ᬌ"]={ "ᬋ","ᬵ" },
+ ["ᬎ"]={ "ᬍ","ᬵ" },
+ ["ᬒ"]={ "ᬑ","ᬵ" },
+ ["ᬻ"]={ "ᬺ","ᬵ" },
+ ["ᬽ"]={ "ᬼ","ᬵ" },
+ ["ᭀ"]={ "ᬾ","ᬵ" },
+ ["ᭁ"]={ "ᬿ","ᬵ" },
+ ["ᭃ"]={ "ᭂ","ᬵ" },
+ ["Ḁ"]={ "A","̥" },
+ ["ḁ"]={ "a","̥" },
+ ["Ḃ"]={ "B","̇" },
+ ["ḃ"]={ "b","̇" },
+ ["Ḅ"]={ "B","̣" },
+ ["ḅ"]={ "b","̣" },
+ ["Ḇ"]={ "B","̱" },
+ ["ḇ"]={ "b","̱" },
+ ["Ḉ"]={ "Ç","́" },
+ ["ḉ"]={ "ç","́" },
+ ["Ḋ"]={ "D","̇" },
+ ["ḋ"]={ "d","̇" },
+ ["Ḍ"]={ "D","̣" },
+ ["ḍ"]={ "d","̣" },
+ ["Ḏ"]={ "D","̱" },
+ ["ḏ"]={ "d","̱" },
+ ["Ḑ"]={ "D","̧" },
+ ["ḑ"]={ "d","̧" },
+ ["Ḓ"]={ "D","̭" },
+ ["ḓ"]={ "d","̭" },
+ ["Ḕ"]={ "Ē","̀" },
+ ["ḕ"]={ "ē","̀" },
+ ["Ḗ"]={ "Ē","́" },
+ ["ḗ"]={ "ē","́" },
+ ["Ḙ"]={ "E","̭" },
+ ["ḙ"]={ "e","̭" },
+ ["Ḛ"]={ "E","̰" },
+ ["ḛ"]={ "e","̰" },
+ ["Ḝ"]={ "Ȩ","̆" },
+ ["ḝ"]={ "ȩ","̆" },
+ ["Ḟ"]={ "F","̇" },
+ ["ḟ"]={ "f","̇" },
+ ["Ḡ"]={ "G","̄" },
+ ["ḡ"]={ "g","̄" },
+ ["Ḣ"]={ "H","̇" },
+ ["ḣ"]={ "h","̇" },
+ ["Ḥ"]={ "H","̣" },
+ ["ḥ"]={ "h","̣" },
+ ["Ḧ"]={ "H","̈" },
+ ["ḧ"]={ "h","̈" },
+ ["Ḩ"]={ "H","̧" },
+ ["ḩ"]={ "h","̧" },
+ ["Ḫ"]={ "H","̮" },
+ ["ḫ"]={ "h","̮" },
+ ["Ḭ"]={ "I","̰" },
+ ["ḭ"]={ "i","̰" },
+ ["Ḯ"]={ "Ï","́" },
+ ["ḯ"]={ "ï","́" },
+ ["Ḱ"]={ "K","́" },
+ ["ḱ"]={ "k","́" },
+ ["Ḳ"]={ "K","̣" },
+ ["ḳ"]={ "k","̣" },
+ ["Ḵ"]={ "K","̱" },
+ ["ḵ"]={ "k","̱" },
+ ["Ḷ"]={ "L","̣" },
+ ["ḷ"]={ "l","̣" },
+ ["Ḹ"]={ "Ḷ","̄" },
+ ["ḹ"]={ "ḷ","̄" },
+ ["Ḻ"]={ "L","̱" },
+ ["ḻ"]={ "l","̱" },
+ ["Ḽ"]={ "L","̭" },
+ ["ḽ"]={ "l","̭" },
+ ["Ḿ"]={ "M","́" },
+ ["ḿ"]={ "m","́" },
+ ["Ṁ"]={ "M","̇" },
+ ["ṁ"]={ "m","̇" },
+ ["Ṃ"]={ "M","̣" },
+ ["ṃ"]={ "m","̣" },
+ ["Ṅ"]={ "N","̇" },
+ ["ṅ"]={ "n","̇" },
+ ["Ṇ"]={ "N","̣" },
+ ["ṇ"]={ "n","̣" },
+ ["Ṉ"]={ "N","̱" },
+ ["ṉ"]={ "n","̱" },
+ ["Ṋ"]={ "N","̭" },
+ ["ṋ"]={ "n","̭" },
+ ["Ṍ"]={ "Õ","́" },
+ ["ṍ"]={ "õ","́" },
+ ["Ṏ"]={ "Õ","̈" },
+ ["ṏ"]={ "õ","̈" },
+ ["Ṑ"]={ "Ō","̀" },
+ ["ṑ"]={ "ō","̀" },
+ ["Ṓ"]={ "Ō","́" },
+ ["ṓ"]={ "ō","́" },
+ ["Ṕ"]={ "P","́" },
+ ["ṕ"]={ "p","́" },
+ ["Ṗ"]={ "P","̇" },
+ ["ṗ"]={ "p","̇" },
+ ["Ṙ"]={ "R","̇" },
+ ["ṙ"]={ "r","̇" },
+ ["Ṛ"]={ "R","̣" },
+ ["ṛ"]={ "r","̣" },
+ ["Ṝ"]={ "Ṛ","̄" },
+ ["ṝ"]={ "ṛ","̄" },
+ ["Ṟ"]={ "R","̱" },
+ ["ṟ"]={ "r","̱" },
+ ["Ṡ"]={ "S","̇" },
+ ["ṡ"]={ "s","̇" },
+ ["Ṣ"]={ "S","̣" },
+ ["ṣ"]={ "s","̣" },
+ ["Ṥ"]={ "Ś","̇" },
+ ["ṥ"]={ "ś","̇" },
+ ["Ṧ"]={ "Š","̇" },
+ ["ṧ"]={ "š","̇" },
+ ["Ṩ"]={ "Ṣ","̇" },
+ ["ṩ"]={ "ṣ","̇" },
+ ["Ṫ"]={ "T","̇" },
+ ["ṫ"]={ "t","̇" },
+ ["Ṭ"]={ "T","̣" },
+ ["ṭ"]={ "t","̣" },
+ ["Ṯ"]={ "T","̱" },
+ ["ṯ"]={ "t","̱" },
+ ["Ṱ"]={ "T","̭" },
+ ["ṱ"]={ "t","̭" },
+ ["Ṳ"]={ "U","̤" },
+ ["ṳ"]={ "u","̤" },
+ ["Ṵ"]={ "U","̰" },
+ ["ṵ"]={ "u","̰" },
+ ["Ṷ"]={ "U","̭" },
+ ["ṷ"]={ "u","̭" },
+ ["Ṹ"]={ "Ũ","́" },
+ ["ṹ"]={ "ũ","́" },
+ ["Ṻ"]={ "Ū","̈" },
+ ["ṻ"]={ "ū","̈" },
+ ["Ṽ"]={ "V","̃" },
+ ["ṽ"]={ "v","̃" },
+ ["Ṿ"]={ "V","̣" },
+ ["ṿ"]={ "v","̣" },
+ ["Ẁ"]={ "W","̀" },
+ ["ẁ"]={ "w","̀" },
+ ["Ẃ"]={ "W","́" },
+ ["ẃ"]={ "w","́" },
+ ["Ẅ"]={ "W","̈" },
+ ["ẅ"]={ "w","̈" },
+ ["Ẇ"]={ "W","̇" },
+ ["ẇ"]={ "w","̇" },
+ ["Ẉ"]={ "W","̣" },
+ ["ẉ"]={ "w","̣" },
+ ["Ẋ"]={ "X","̇" },
+ ["ẋ"]={ "x","̇" },
+ ["Ẍ"]={ "X","̈" },
+ ["ẍ"]={ "x","̈" },
+ ["Ẏ"]={ "Y","̇" },
+ ["ẏ"]={ "y","̇" },
+ ["Ẑ"]={ "Z","̂" },
+ ["ẑ"]={ "z","̂" },
+ ["Ẓ"]={ "Z","̣" },
+ ["ẓ"]={ "z","̣" },
+ ["Ẕ"]={ "Z","̱" },
+ ["ẕ"]={ "z","̱" },
+ ["ẖ"]={ "h","̱" },
+ ["ẗ"]={ "t","̈" },
+ ["ẘ"]={ "w","̊" },
+ ["ẙ"]={ "y","̊" },
+ ["ẛ"]={ "ſ","̇" },
+ ["Ạ"]={ "A","̣" },
+ ["ạ"]={ "a","̣" },
+ ["Ả"]={ "A","̉" },
+ ["ả"]={ "a","̉" },
+ ["Ấ"]={ "Â","́" },
+ ["ấ"]={ "â","́" },
+ ["Ầ"]={ "Â","̀" },
+ ["ầ"]={ "â","̀" },
+ ["Ẩ"]={ "Â","̉" },
+ ["ẩ"]={ "â","̉" },
+ ["Ẫ"]={ "Â","̃" },
+ ["ẫ"]={ "â","̃" },
+ ["Ậ"]={ "Ạ","̂" },
+ ["ậ"]={ "ạ","̂" },
+ ["Ắ"]={ "Ă","́" },
+ ["ắ"]={ "ă","́" },
+ ["Ằ"]={ "Ă","̀" },
+ ["ằ"]={ "ă","̀" },
+ ["Ẳ"]={ "Ă","̉" },
+ ["ẳ"]={ "ă","̉" },
+ ["Ẵ"]={ "Ă","̃" },
+ ["ẵ"]={ "ă","̃" },
+ ["Ặ"]={ "Ạ","̆" },
+ ["ặ"]={ "ạ","̆" },
+ ["Ẹ"]={ "E","̣" },
+ ["ẹ"]={ "e","̣" },
+ ["Ẻ"]={ "E","̉" },
+ ["ẻ"]={ "e","̉" },
+ ["Ẽ"]={ "E","̃" },
+ ["ẽ"]={ "e","̃" },
+ ["Ế"]={ "Ê","́" },
+ ["ế"]={ "ê","́" },
+ ["Ề"]={ "Ê","̀" },
+ ["ề"]={ "ê","̀" },
+ ["Ể"]={ "Ê","̉" },
+ ["ể"]={ "ê","̉" },
+ ["Ễ"]={ "Ê","̃" },
+ ["ễ"]={ "ê","̃" },
+ ["Ệ"]={ "Ẹ","̂" },
+ ["ệ"]={ "ẹ","̂" },
+ ["Ỉ"]={ "I","̉" },
+ ["ỉ"]={ "i","̉" },
+ ["Ị"]={ "I","̣" },
+ ["ị"]={ "i","̣" },
+ ["Ọ"]={ "O","̣" },
+ ["ọ"]={ "o","̣" },
+ ["Ỏ"]={ "O","̉" },
+ ["ỏ"]={ "o","̉" },
+ ["Ố"]={ "Ô","́" },
+ ["ố"]={ "ô","́" },
+ ["Ồ"]={ "Ô","̀" },
+ ["ồ"]={ "ô","̀" },
+ ["Ổ"]={ "Ô","̉" },
+ ["ổ"]={ "ô","̉" },
+ ["Ỗ"]={ "Ô","̃" },
+ ["ỗ"]={ "ô","̃" },
+ ["Ộ"]={ "Ọ","̂" },
+ ["ộ"]={ "ọ","̂" },
+ ["Ớ"]={ "Ơ","́" },
+ ["ớ"]={ "ơ","́" },
+ ["Ờ"]={ "Ơ","̀" },
+ ["ờ"]={ "ơ","̀" },
+ ["Ở"]={ "Ơ","̉" },
+ ["ở"]={ "ơ","̉" },
+ ["Ỡ"]={ "Ơ","̃" },
+ ["ỡ"]={ "ơ","̃" },
+ ["Ợ"]={ "Ơ","̣" },
+ ["ợ"]={ "ơ","̣" },
+ ["Ụ"]={ "U","̣" },
+ ["ụ"]={ "u","̣" },
+ ["Ủ"]={ "U","̉" },
+ ["ủ"]={ "u","̉" },
+ ["Ứ"]={ "Ư","́" },
+ ["ứ"]={ "ư","́" },
+ ["Ừ"]={ "Ư","̀" },
+ ["ừ"]={ "ư","̀" },
+ ["Ử"]={ "Ư","̉" },
+ ["ử"]={ "ư","̉" },
+ ["Ữ"]={ "Ư","̃" },
+ ["ữ"]={ "ư","̃" },
+ ["Ự"]={ "Ư","̣" },
+ ["ự"]={ "ư","̣" },
+ ["Ỳ"]={ "Y","̀" },
+ ["ỳ"]={ "y","̀" },
+ ["Ỵ"]={ "Y","̣" },
+ ["ỵ"]={ "y","̣" },
+ ["Ỷ"]={ "Y","̉" },
+ ["ỷ"]={ "y","̉" },
+ ["Ỹ"]={ "Y","̃" },
+ ["ỹ"]={ "y","̃" },
+ ["ἀ"]={ "α","̓" },
+ ["ἁ"]={ "α","̔" },
+ ["ἂ"]={ "ἀ","̀" },
+ ["ἃ"]={ "ἁ","̀" },
+ ["ἄ"]={ "ἀ","́" },
+ ["ἅ"]={ "ἁ","́" },
+ ["ἆ"]={ "ἀ","͂" },
+ ["ἇ"]={ "ἁ","͂" },
+ ["Ἀ"]={ "Α","̓" },
+ ["Ἁ"]={ "Α","̔" },
+ ["Ἂ"]={ "Ἀ","̀" },
+ ["Ἃ"]={ "Ἁ","̀" },
+ ["Ἄ"]={ "Ἀ","́" },
+ ["Ἅ"]={ "Ἁ","́" },
+ ["Ἆ"]={ "Ἀ","͂" },
+ ["Ἇ"]={ "Ἁ","͂" },
+ ["ἐ"]={ "ε","̓" },
+ ["ἑ"]={ "ε","̔" },
+ ["ἒ"]={ "ἐ","̀" },
+ ["ἓ"]={ "ἑ","̀" },
+ ["ἔ"]={ "ἐ","́" },
+ ["ἕ"]={ "ἑ","́" },
+ ["Ἐ"]={ "Ε","̓" },
+ ["Ἑ"]={ "Ε","̔" },
+ ["Ἒ"]={ "Ἐ","̀" },
+ ["Ἓ"]={ "Ἑ","̀" },
+ ["Ἔ"]={ "Ἐ","́" },
+ ["Ἕ"]={ "Ἑ","́" },
+ ["ἠ"]={ "η","̓" },
+ ["ἡ"]={ "η","̔" },
+ ["ἢ"]={ "ἠ","̀" },
+ ["ἣ"]={ "ἡ","̀" },
+ ["ἤ"]={ "ἠ","́" },
+ ["ἥ"]={ "ἡ","́" },
+ ["ἦ"]={ "ἠ","͂" },
+ ["ἧ"]={ "ἡ","͂" },
+ ["Ἠ"]={ "Η","̓" },
+ ["Ἡ"]={ "Η","̔" },
+ ["Ἢ"]={ "Ἠ","̀" },
+ ["Ἣ"]={ "Ἡ","̀" },
+ ["Ἤ"]={ "Ἠ","́" },
+ ["Ἥ"]={ "Ἡ","́" },
+ ["Ἦ"]={ "Ἠ","͂" },
+ ["Ἧ"]={ "Ἡ","͂" },
+ ["ἰ"]={ "ι","̓" },
+ ["ἱ"]={ "ι","̔" },
+ ["ἲ"]={ "ἰ","̀" },
+ ["ἳ"]={ "ἱ","̀" },
+ ["ἴ"]={ "ἰ","́" },
+ ["ἵ"]={ "ἱ","́" },
+ ["ἶ"]={ "ἰ","͂" },
+ ["ἷ"]={ "ἱ","͂" },
+ ["Ἰ"]={ "Ι","̓" },
+ ["Ἱ"]={ "Ι","̔" },
+ ["Ἲ"]={ "Ἰ","̀" },
+ ["Ἳ"]={ "Ἱ","̀" },
+ ["Ἴ"]={ "Ἰ","́" },
+ ["Ἵ"]={ "Ἱ","́" },
+ ["Ἶ"]={ "Ἰ","͂" },
+ ["Ἷ"]={ "Ἱ","͂" },
+ ["ὀ"]={ "ο","̓" },
+ ["ὁ"]={ "ο","̔" },
+ ["ὂ"]={ "ὀ","̀" },
+ ["ὃ"]={ "ὁ","̀" },
+ ["ὄ"]={ "ὀ","́" },
+ ["ὅ"]={ "ὁ","́" },
+ ["Ὀ"]={ "Ο","̓" },
+ ["Ὁ"]={ "Ο","̔" },
+ ["Ὂ"]={ "Ὀ","̀" },
+ ["Ὃ"]={ "Ὁ","̀" },
+ ["Ὄ"]={ "Ὀ","́" },
+ ["Ὅ"]={ "Ὁ","́" },
+ ["ὐ"]={ "υ","̓" },
+ ["ὑ"]={ "υ","̔" },
+ ["ὒ"]={ "ὐ","̀" },
+ ["ὓ"]={ "ὑ","̀" },
+ ["ὔ"]={ "ὐ","́" },
+ ["ὕ"]={ "ὑ","́" },
+ ["ὖ"]={ "ὐ","͂" },
+ ["ὗ"]={ "ὑ","͂" },
+ ["Ὑ"]={ "Υ","̔" },
+ ["Ὓ"]={ "Ὑ","̀" },
+ ["Ὕ"]={ "Ὑ","́" },
+ ["Ὗ"]={ "Ὑ","͂" },
+ ["ὠ"]={ "ω","̓" },
+ ["ὡ"]={ "ω","̔" },
+ ["ὢ"]={ "ὠ","̀" },
+ ["ὣ"]={ "ὡ","̀" },
+ ["ὤ"]={ "ὠ","́" },
+ ["ὥ"]={ "ὡ","́" },
+ ["ὦ"]={ "ὠ","͂" },
+ ["ὧ"]={ "ὡ","͂" },
+ ["Ὠ"]={ "Ω","̓" },
+ ["Ὡ"]={ "Ω","̔" },
+ ["Ὢ"]={ "Ὠ","̀" },
+ ["Ὣ"]={ "Ὡ","̀" },
+ ["Ὤ"]={ "Ὠ","́" },
+ ["Ὥ"]={ "Ὡ","́" },
+ ["Ὦ"]={ "Ὠ","͂" },
+ ["Ὧ"]={ "Ὡ","͂" },
+ ["ὰ"]={ "α","̀" },
+ ["ὲ"]={ "ε","̀" },
+ ["ὴ"]={ "η","̀" },
+ ["ὶ"]={ "ι","̀" },
+ ["ὸ"]={ "ο","̀" },
+ ["ὺ"]={ "υ","̀" },
+ ["ὼ"]={ "ω","̀" },
+ ["ᾀ"]={ "ἀ","ͅ" },
+ ["ᾁ"]={ "ἁ","ͅ" },
+ ["ᾂ"]={ "ἂ","ͅ" },
+ ["ᾃ"]={ "ἃ","ͅ" },
+ ["ᾄ"]={ "ἄ","ͅ" },
+ ["ᾅ"]={ "ἅ","ͅ" },
+ ["ᾆ"]={ "ἆ","ͅ" },
+ ["ᾇ"]={ "ἇ","ͅ" },
+ ["ᾈ"]={ "Ἀ","ͅ" },
+ ["ᾉ"]={ "Ἁ","ͅ" },
+ ["ᾊ"]={ "Ἂ","ͅ" },
+ ["ᾋ"]={ "Ἃ","ͅ" },
+ ["ᾌ"]={ "Ἄ","ͅ" },
+ ["ᾍ"]={ "Ἅ","ͅ" },
+ ["ᾎ"]={ "Ἆ","ͅ" },
+ ["ᾏ"]={ "Ἇ","ͅ" },
+ ["ᾐ"]={ "ἠ","ͅ" },
+ ["ᾑ"]={ "ἡ","ͅ" },
+ ["ᾒ"]={ "ἢ","ͅ" },
+ ["ᾓ"]={ "ἣ","ͅ" },
+ ["ᾔ"]={ "ἤ","ͅ" },
+ ["ᾕ"]={ "ἥ","ͅ" },
+ ["ᾖ"]={ "ἦ","ͅ" },
+ ["ᾗ"]={ "ἧ","ͅ" },
+ ["ᾘ"]={ "Ἠ","ͅ" },
+ ["ᾙ"]={ "Ἡ","ͅ" },
+ ["ᾚ"]={ "Ἢ","ͅ" },
+ ["ᾛ"]={ "Ἣ","ͅ" },
+ ["ᾜ"]={ "Ἤ","ͅ" },
+ ["ᾝ"]={ "Ἥ","ͅ" },
+ ["ᾞ"]={ "Ἦ","ͅ" },
+ ["ᾟ"]={ "Ἧ","ͅ" },
+ ["ᾠ"]={ "ὠ","ͅ" },
+ ["ᾡ"]={ "ὡ","ͅ" },
+ ["ᾢ"]={ "ὢ","ͅ" },
+ ["ᾣ"]={ "ὣ","ͅ" },
+ ["ᾤ"]={ "ὤ","ͅ" },
+ ["ᾥ"]={ "ὥ","ͅ" },
+ ["ᾦ"]={ "ὦ","ͅ" },
+ ["ᾧ"]={ "ὧ","ͅ" },
+ ["ᾨ"]={ "Ὠ","ͅ" },
+ ["ᾩ"]={ "Ὡ","ͅ" },
+ ["ᾪ"]={ "Ὢ","ͅ" },
+ ["ᾫ"]={ "Ὣ","ͅ" },
+ ["ᾬ"]={ "Ὤ","ͅ" },
+ ["ᾭ"]={ "Ὥ","ͅ" },
+ ["ᾮ"]={ "Ὦ","ͅ" },
+ ["ᾯ"]={ "Ὧ","ͅ" },
+ ["ᾰ"]={ "α","̆" },
+ ["ᾱ"]={ "α","̄" },
+ ["ᾲ"]={ "ὰ","ͅ" },
+ ["ᾳ"]={ "α","ͅ" },
+ ["ᾴ"]={ "ά","ͅ" },
+ ["ᾶ"]={ "α","͂" },
+ ["ᾷ"]={ "ᾶ","ͅ" },
+ ["Ᾰ"]={ "Α","̆" },
+ ["Ᾱ"]={ "Α","̄" },
+ ["Ὰ"]={ "Α","̀" },
+ ["ᾼ"]={ "Α","ͅ" },
+ ["῁"]={ "¨","͂" },
+ ["ῂ"]={ "ὴ","ͅ" },
+ ["ῃ"]={ "η","ͅ" },
+ ["ῄ"]={ "ή","ͅ" },
+ ["ῆ"]={ "η","͂" },
+ ["ῇ"]={ "ῆ","ͅ" },
+ ["Ὲ"]={ "Ε","̀" },
+ ["Ὴ"]={ "Η","̀" },
+ ["ῌ"]={ "Η","ͅ" },
+ ["῍"]={ "᾿","̀" },
+ ["῎"]={ "᾿","́" },
+ ["῏"]={ "᾿","͂" },
+ ["ῐ"]={ "ι","̆" },
+ ["ῑ"]={ "ι","̄" },
+ ["ῒ"]={ "ϊ","̀" },
+ ["ῖ"]={ "ι","͂" },
+ ["ῗ"]={ "ϊ","͂" },
+ ["Ῐ"]={ "Ι","̆" },
+ ["Ῑ"]={ "Ι","̄" },
+ ["Ὶ"]={ "Ι","̀" },
+ ["῝"]={ "῾","̀" },
+ ["῞"]={ "῾","́" },
+ ["῟"]={ "῾","͂" },
+ ["ῠ"]={ "υ","̆" },
+ ["ῡ"]={ "υ","̄" },
+ ["ῢ"]={ "ϋ","̀" },
+ ["ῤ"]={ "ρ","̓" },
+ ["ῥ"]={ "ρ","̔" },
+ ["ῦ"]={ "υ","͂" },
+ ["ῧ"]={ "ϋ","͂" },
+ ["Ῠ"]={ "Υ","̆" },
+ ["Ῡ"]={ "Υ","̄" },
+ ["Ὺ"]={ "Υ","̀" },
+ ["Ῥ"]={ "Ρ","̔" },
+ ["῭"]={ "¨","̀" },
+ ["ῲ"]={ "ὼ","ͅ" },
+ ["ῳ"]={ "ω","ͅ" },
+ ["ῴ"]={ "ώ","ͅ" },
+ ["ῶ"]={ "ω","͂" },
+ ["ῷ"]={ "ῶ","ͅ" },
+ ["Ὸ"]={ "Ο","̀" },
+ ["Ὼ"]={ "Ω","̀" },
+ ["ῼ"]={ "Ω","ͅ" },
+ ["↚"]={ "←","̸" },
+ ["↛"]={ "→","̸" },
+ ["↮"]={ "↔","̸" },
+ ["⇍"]={ "⇐","̸" },
+ ["⇎"]={ "⇔","̸" },
+ ["⇏"]={ "⇒","̸" },
+ ["∄"]={ "∃","̸" },
+ ["∉"]={ "∈","̸" },
+ ["∌"]={ "∋","̸" },
+ ["∤"]={ "∣","̸" },
+ ["∦"]={ "∥","̸" },
+ ["≁"]={ "∼","̸" },
+ ["≄"]={ "≃","̸" },
+ ["≇"]={ "≅","̸" },
+ ["≉"]={ "≈","̸" },
+ ["≠"]={ "=","̸" },
+ ["≢"]={ "≡","̸" },
+ ["≭"]={ "≍","̸" },
+ ["≮"]={ "<","̸" },
+ ["≯"]={ ">","̸" },
+ ["≰"]={ "≤","̸" },
+ ["≱"]={ "≥","̸" },
+ ["≴"]={ "≲","̸" },
+ ["≵"]={ "≳","̸" },
+ ["≸"]={ "≶","̸" },
+ ["≹"]={ "≷","̸" },
+ ["⊀"]={ "≺","̸" },
+ ["⊁"]={ "≻","̸" },
+ ["⊄"]={ "⊂","̸" },
+ ["⊅"]={ "⊃","̸" },
+ ["⊈"]={ "⊆","̸" },
+ ["⊉"]={ "⊇","̸" },
+ ["⊬"]={ "⊢","̸" },
+ ["⊭"]={ "⊨","̸" },
+ ["⊮"]={ "⊩","̸" },
+ ["⊯"]={ "⊫","̸" },
+ ["⋠"]={ "≼","̸" },
+ ["⋡"]={ "≽","̸" },
+ ["⋢"]={ "⊑","̸" },
+ ["⋣"]={ "⊒","̸" },
+ ["⋪"]={ "⊲","̸" },
+ ["⋫"]={ "⊳","̸" },
+ ["⋬"]={ "⊴","̸" },
+ ["⋭"]={ "⊵","̸" },
+ ["⫝̸"]={ "⫝","̸" },
+ ["が"]={ "か","゙" },
+ ["ぎ"]={ "き","゙" },
+ ["ぐ"]={ "く","゙" },
+ ["げ"]={ "け","゙" },
+ ["ご"]={ "こ","゙" },
+ ["ざ"]={ "さ","゙" },
+ ["じ"]={ "し","゙" },
+ ["ず"]={ "す","゙" },
+ ["ぜ"]={ "せ","゙" },
+ ["ぞ"]={ "そ","゙" },
+ ["だ"]={ "た","゙" },
+ ["ぢ"]={ "ち","゙" },
+ ["づ"]={ "つ","゙" },
+ ["で"]={ "て","゙" },
+ ["ど"]={ "と","゙" },
+ ["ば"]={ "は","゙" },
+ ["ぱ"]={ "は","゚" },
+ ["び"]={ "ひ","゙" },
+ ["ぴ"]={ "ひ","゚" },
+ ["ぶ"]={ "ふ","゙" },
+ ["ぷ"]={ "ふ","゚" },
+ ["べ"]={ "へ","゙" },
+ ["ぺ"]={ "へ","゚" },
+ ["ぼ"]={ "ほ","゙" },
+ ["ぽ"]={ "ほ","゚" },
+ ["ゔ"]={ "う","゙" },
+ ["ゞ"]={ "ゝ","゙" },
+ ["ガ"]={ "カ","゙" },
+ ["ギ"]={ "キ","゙" },
+ ["グ"]={ "ク","゙" },
+ ["ゲ"]={ "ケ","゙" },
+ ["ゴ"]={ "コ","゙" },
+ ["ザ"]={ "サ","゙" },
+ ["ジ"]={ "シ","゙" },
+ ["ズ"]={ "ス","゙" },
+ ["ゼ"]={ "セ","゙" },
+ ["ゾ"]={ "ソ","゙" },
+ ["ダ"]={ "タ","゙" },
+ ["ヂ"]={ "チ","゙" },
+ ["ヅ"]={ "ツ","゙" },
+ ["デ"]={ "テ","゙" },
+ ["ド"]={ "ト","゙" },
+ ["バ"]={ "ハ","゙" },
+ ["パ"]={ "ハ","゚" },
+ ["ビ"]={ "ヒ","゙" },
+ ["ピ"]={ "ヒ","゚" },
+ ["ブ"]={ "フ","゙" },
+ ["プ"]={ "フ","゚" },
+ ["ベ"]={ "ヘ","゙" },
+ ["ペ"]={ "ヘ","゚" },
+ ["ボ"]={ "ホ","゙" },
+ ["ポ"]={ "ホ","゚" },
+ ["ヴ"]={ "ウ","゙" },
+ ["ヷ"]={ "ワ","゙" },
+ ["ヸ"]={ "ヰ","゙" },
+ ["ヹ"]={ "ヱ","゙" },
+ ["ヺ"]={ "ヲ","゙" },
+ ["ヾ"]={ "ヽ","゙" },
+ ["יִ"]={ "י","ִ" },
+ ["ײַ"]={ "ײ","ַ" },
+ ["שׁ"]={ "ש","ׁ" },
+ ["שׂ"]={ "ש","ׂ" },
+ ["שּׁ"]={ "שּ","ׁ" },
+ ["שּׂ"]={ "שּ","ׂ" },
+ ["אַ"]={ "א","ַ" },
+ ["אָ"]={ "א","ָ" },
+ ["אּ"]={ "א","ּ" },
+ ["בּ"]={ "ב","ּ" },
+ ["גּ"]={ "ג","ּ" },
+ ["דּ"]={ "ד","ּ" },
+ ["הּ"]={ "ה","ּ" },
+ ["וּ"]={ "ו","ּ" },
+ ["זּ"]={ "ז","ּ" },
+ ["טּ"]={ "ט","ּ" },
+ ["יּ"]={ "י","ּ" },
+ ["ךּ"]={ "ך","ּ" },
+ ["כּ"]={ "כ","ּ" },
+ ["לּ"]={ "ל","ּ" },
+ ["מּ"]={ "מ","ּ" },
+ ["נּ"]={ "נ","ּ" },
+ ["סּ"]={ "ס","ּ" },
+ ["ףּ"]={ "ף","ּ" },
+ ["פּ"]={ "פ","ּ" },
+ ["צּ"]={ "צ","ּ" },
+ ["קּ"]={ "ק","ּ" },
+ ["רּ"]={ "ר","ּ" },
+ ["שּ"]={ "ש","ּ" },
+ ["תּ"]={ "ת","ּ" },
+ ["וֹ"]={ "ו","ֹ" },
+ ["בֿ"]={ "ב","ֿ" },
+ ["כֿ"]={ "כ","ֿ" },
+ ["פֿ"]={ "פ","ֿ" },
+ ["𑂚"]={ "𑂙","𑂺" },
+ ["𑂜"]={ "𑂛","𑂺" },
+ ["𑂫"]={ "𑂥","𑂺" },
+ ["𑄮"]={ "𑄱","𑄧" },
+ ["𑄯"]={ "𑄲","𑄧" },
+ ["𑍋"]={ "𑍇","𑌾" },
+ ["𑍌"]={ "𑍇","𑍗" },
+ ["𑒻"]={ "𑒹","𑒺" },
+ ["𑒼"]={ "𑒹","𑒰" },
+ ["𑒾"]={ "𑒹","𑒽" },
+ ["𑖺"]={ "𑖸","𑖯" },
+ ["𑖻"]={ "𑖹","𑖯" },
+ ["𝅗𝅥"]={ "𝅗","𝅥" },
+ ["𝅘𝅥"]={ "𝅘","𝅥" },
+ ["𝅘𝅥𝅮"]={ "𝅘𝅥","𝅮" },
+ ["𝅘𝅥𝅯"]={ "𝅘𝅥","𝅯" },
+ ["𝅘𝅥𝅰"]={ "𝅘𝅥","𝅰" },
+ ["𝅘𝅥𝅱"]={ "𝅘𝅥","𝅱" },
+ ["𝅘𝅥𝅲"]={ "𝅘𝅥","𝅲" },
+ ["𝆹𝅥"]={ "𝆹","𝅥" },
+ ["𝆺𝅥"]={ "𝆺","𝅥" },
+ ["𝆹𝅥𝅮"]={ "𝆹𝅥","𝅮" },
+ ["𝆺𝅥𝅮"]={ "𝆺𝅥","𝅮" },
+ ["𝆹𝅥𝅯"]={ "𝆹𝅥","𝅯" },
+ ["𝆺𝅥𝅯"]={ "𝆺𝅥","𝅯" },
+ },
+ },
+ },
+ ["name"]="collapse",
+ ["prepend"]=true,
+ ["type"]="ligature",
+}
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
if not modules then modules={} end modules ['font-gbn']={
version=1.001,
comment="companion to luatex-*.tex",
@@ -24109,8 +32003,7 @@ local fonts=fonts
local nodes=nodes
local nuts=nodes.nuts
local traverse_id=nuts.traverse_id
-local remove_node=nuts.remove
-local free_node=nuts.free
+local flush_node=nuts.flush_node
local glyph_code=nodes.nodecodes.glyph
local disc_code=nodes.nodecodes.disc
local tonode=nuts.tonode
@@ -24234,7 +32127,7 @@ function nodes.handlers.nodepass(head)
end
end
end
- free_node(r)
+ flush_node(r)
end
end
for d in traverse_id(disc_code,nuthead) do
diff --git a/tex/generic/context/luatex/luatex-fonts.lua b/tex/generic/context/luatex/luatex-fonts.lua
index c493844c8..20690992c 100644
--- a/tex/generic/context/luatex/luatex-fonts.lua
+++ b/tex/generic/context/luatex/luatex-fonts.lua
@@ -186,6 +186,7 @@ if non_generic_context.luatex_fonts.skip_loading ~= true then
loadmodule("l-file.lua")
loadmodule("l-boolean.lua")
loadmodule("l-math.lua")
+ loadmodule("l-unicode.lua")
-- A few slightly higher level support modules:
@@ -229,7 +230,6 @@ if non_generic_context.luatex_fonts.skip_loading ~= true then
loadmodule('luatex-fonts-syn.lua')
- loadmodule('font-tfm.lua')
loadmodule('font-oti.lua')
-- These are the old loader and processing modules. These use the built-in font loader and
@@ -257,6 +257,9 @@ if non_generic_context.luatex_fonts.skip_loading ~= true then
loadmodule('font-ota.lua')
loadmodule('font-ots.lua')
loadmodule('font-osd.lua')
+ loadmodule('font-ocl.lua') -- svg needs 0.97 (for fix in memstreams)
+
+ loadmodule('font-otc.lua')
-- type one code
@@ -264,12 +267,17 @@ if non_generic_context.luatex_fonts.skip_loading ~= true then
loadmodule('font-one.lua') -- was font-afm.lua
loadmodule('font-afk.lua')
+ -- traditional code
+
+ loadmodule('font-tfm.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
+ -- loadmodule('luatex-fonts-lig.lua') -- and another one
-- We need to plug into a callback and the following module implements the handlers. Actual
-- plugging in happens later.
diff --git a/tex/generic/context/luatex/luatex-math.tex b/tex/generic/context/luatex/luatex-math.tex
index 604b4a1f8..acf1d2308 100644
--- a/tex/generic/context/luatex/luatex-math.tex
+++ b/tex/generic/context/luatex/luatex-math.tex
@@ -13,9 +13,14 @@
%D approach (and thereby far from the \CONTEXT\ way). This file is mainly meant for
%D Boguslaw Jackowski.
+%D In the perspective of the TUG Lucida Opentype project Bruno Voisin checked the code
+%D and definitions below and suggested some improvements.
+
% we provide a remap feature
-\directlua{dofile(kpse.find_file('luatex-math.lua'))}
+\ifdefined\directlua
+ \directlua{dofile(kpse.find_file('luatex-math.lua'))}
+\fi
% a bunch of fonts:
@@ -40,14 +45,22 @@
\font\tenbf = file:lmroman10-bold.otf:+liga;+kern;+tlig;+trep at 10pt
\font\tenbi = file:lmroman10-bolditalic.otf:+liga;+kern;+tlig;+trep at 10pt
%
- \font\mathfonttextupright = file:latinmodern-math.otf:ssty=0;fixmath=yes at 10pt
- \font\mathfontscriptupright = file:latinmodern-math.otf:ssty=1;fixmath=yes at 7pt
- \font\mathfontscriptscriptupright = file:latinmodern-math.otf:ssty=2;fixmath=yes at 5pt
+ \font\tenos = file:lmroman10-regular.otf:+onum;+liga;+kern;+tlig;+trep at 10pt
+ \font\sevenos = file:lmroman7-regular.otf:+onum;+liga;+kern;+tlig;+trep at 7pt
+ \font\fiveos = file:lmroman5-regular.otf:+onum;+liga;+kern;+tlig;+trep at 5pt
+ %
+ \font\mathfonttextupright = file:latinmodern-math.otf:script=math;ssty=0;mathsize=yes at 10pt
+ \font\mathfontscriptupright = file:latinmodern-math.otf:script=math;ssty=1;mathsize=yes at 7pt
+ \font\mathfontscriptscriptupright = file:latinmodern-math.otf:script=math;ssty=2;mathsize=yes at 5pt
%
\textfont 0 = \mathfonttextupright
\scriptfont 0 = \mathfontscriptupright
\scriptscriptfont 0 = \mathfontscriptscriptupright
%
+ \textfont 1 = \tenos
+ \scriptfont 1 = \sevenos
+ \scriptscriptfont 1 = \fiveos
+ %
\tenrm}
\def\lucidabright
@@ -55,32 +68,41 @@
\font\sevenrm = file:lucidabrightot.otf:+liga;+kern;+tlig;+trep at 7pt
\font\fiverm = file:lucidabrightot.otf:+liga;+kern;+tlig;+trep at 5pt
%
- \font\tentt = file:lucidabrightot.otf at 10pt
- \font\tenit = file:lucidabrightot.otf:+liga;+kern;+tlig;+trep at 10pt
- \font\tenit = file:lucidabrightot-italic.otf:+liga;+kern;+tlig;+trep at 10pt
- \font\tenbf = file:lucidabrightot-demi.otf:+liga;+kern;+tlig;+trep at 10pt
- \font\tenbi = file:lucidabrightot-demiitalic.otf:+liga;+kern;+tlig;+trep at 10pt
+ \font\tentt = file:lucidasanstypewriterot.otf at 10pt
+ \font\tensl = file:lucidabrightot.otf:slant=0.167;+liga;+kern;+tlig;+trep at 10pt
+ \font\tenit = file:lucidabrightot-italic.otf:+liga;+kern;+tlig;+trep at 10pt
+ \font\tenbf = file:lucidabrightot-demi.otf:+liga;+kern;+tlig;+trep at 10pt
+ \font\tenbi = file:lucidabrightot-demiitalic.otf:+liga;+kern;+tlig;+trep at 10pt
%
- \font\mathfonttextupright = file:lucidabrightmathot.otf:ssty=0;fixmath=yes at 10pt
- \font\mathfontscriptupright = file:lucidabrightmathot.otf:ssty=1;fixmath=yes at 7pt
- \font\mathfontscriptscriptupright = file:lucidabrightmathot.otf:ssty=2;fixmath=yes at 5pt
+ \font\tenos = file:lucidabrightot.otf:+onum;+liga;+kern;+tlig;+trep at 10pt
+ \font\sevenos = file:lucidabrightot.otf:+onum;+liga;+kern;+tlig;+trep at 7pt
+ \font\fiveos = file:lucidabrightot.otf:+onum;+liga;+kern;+tlig;+trep at 5pt
+ %
+ \font\mathfonttextupright = file:lucidabrightmathot.otf:script=math;ssty=0;mathsize=yes at 10pt
+ \font\mathfontscriptupright = file:lucidabrightmathot.otf:script=math;ssty=1;mathsize=yes at 7pt
+ \font\mathfontscriptscriptupright = file:lucidabrightmathot.otf:script=math;ssty=2;mathsize=yes at 5pt
%
\textfont 0 = \mathfonttextupright
\scriptfont 0 = \mathfontscriptupright
\scriptscriptfont 0 = \mathfontscriptscriptupright
%
+ \textfont 1 = \tenos
+ \scriptfont 1 = \sevenos
+ \scriptscriptfont 1 = \fiveos
+ %
\tenrm}
-\directlua {
- if arguments["mtx:lucidabright"] then
- tex.print("\string\\lucidabright")
- else
- tex.print("\string\\latinmodern")
- end
-}
+\ifdefined\directlua
+ \directlua {
+ if arguments["mtx:lucidabright"] then
+ tex.print("\string\\lucidabright")
+ else
+ tex.print("\string\\latinmodern")
+ end
+ }
+\fi
\newtoks\everymathrm
-\newtoks\everymathmit
\newtoks\everymathcal
\newtoks\everymathit
\newtoks\everymathsl
@@ -88,6 +110,8 @@
\newtoks\everymathbi
\newtoks\everymathtt
+% the following commands switch text as well as math
+
\def\rm{\fam0\relax\the\everymathrm\relax\tenrm\relax}
\def\it{\fam0\relax\the\everymathit\relax\tenit\relax}
\def\sl{\fam0\relax\the\everymathsl\relax\tensl\relax}
@@ -95,13 +119,10 @@
\def\bi{\fam0\relax\the\everymathbi\relax\tenbi\relax}
\def\tt{\fam0\relax\the\everymathtt\relax\tentt\relax}
-\let\mit \relax % use names or \Uchar or define a vector
-\let\cal \relax % idem, i'm not in the mood for this now
-\let\oldstyle\relax % no longer misuse of math mode
-
% tex is fast enough for this kind of assignments:
\everymathrm {%
+ % codes
\Umathcode"0041="0"0"0041%
\Umathcode"0042="0"0"0042%
\Umathcode"0043="0"0"0043%
@@ -212,18 +233,69 @@
\Umathcode"03F5="0"0"03F5%
\Umathcode"2202="0"0"2202%
\Umathcode"2207="0"0"2207%
+ % commands
+ \Umathchardef\Alpha "0"0"000391%
+ \Umathchardef\Beta "0"0"000392%
+ \Umathchardef\Gamma "0"0"000393%
+ \Umathchardef\Delta "0"0"000394%
+ \Umathchardef\Epsilon "0"0"000395%
+ \Umathchardef\Zeta "0"0"000396%
+ \Umathchardef\Eta "0"0"000397%
+ \Umathchardef\Theta "0"0"000398%
+ \Umathchardef\Iota "0"0"000399%
+ \Umathchardef\Kappa "0"0"00039A%
+ \Umathchardef\Lambda "0"0"00039B%
+ \Umathchardef\Mu "0"0"00039C%
+ \Umathchardef\Nu "0"0"00039D%
+ \Umathchardef\Xi "0"0"00039E%
+ \Umathchardef\Omicron "0"0"00039F%
+ \Umathchardef\Pi "0"0"0003A0%
+ \Umathchardef\Rho "0"0"0003A1%
+ \Umathchardef\Sigma "0"0"0003A3%
+ \Umathchardef\Tau "0"0"0003A4%
+ \Umathchardef\Upsilon "0"0"0003A5%
+ \Umathchardef\Phi "0"0"0003A6%
+ \Umathchardef\Chi "0"0"0003A7%
+ \Umathchardef\Psi "0"0"0003A8%
+ \Umathchardef\Omega "0"0"0003A9%
+ \Umathchardef\alpha "0"0"0003B1%
+ \Umathchardef\beta "0"0"0003B2%
+ \Umathchardef\gamma "0"0"0003B3%
+ \Umathchardef\delta "0"0"0003B4%
+ \Umathchardef\varepsilon"0"0"0003B5%
+ \Umathchardef\zeta "0"0"0003B6%
+ \Umathchardef\eta "0"0"0003B7%
+ \Umathchardef\theta "0"0"0003B8%
+ \Umathchardef\iota "0"0"0003B9%
+ \Umathchardef\kappa "0"0"0003BA%
+ \Umathchardef\lambda "0"0"0003BB%
+ \Umathchardef\mu "0"0"0003BC%
+ \Umathchardef\nu "0"0"0003BD%
+ \Umathchardef\xi "0"0"0003BE%
+ \Umathchardef\omicron "0"0"0003BF%
+ \Umathchardef\pi "0"0"0003C0%
+ \Umathchardef\rho "0"0"0003C1%
+ \Umathchardef\varsigma "0"0"0003C2%
+ \Umathchardef\sigma "0"0"0003C3%
+ \Umathchardef\tau "0"0"0003C4%
+ \Umathchardef\upsilon "0"0"0003C5%
+ \Umathchardef\varphi "0"0"0003C6%
+ \Umathchardef\chi "0"0"0003C7%
+ \Umathchardef\psi "0"0"0003C8%
+ \Umathchardef\omega "0"0"0003C9%
+ \Umathchardef\vartheta "0"0"0003D1%
+ \Umathchardef\phi "0"0"0003D5%
+ \Umathchardef\varpi "0"0"0003D6%
+ \Umathchardef\varkappa "0"0"0003F0%
+ \Umathchardef\varrho "0"0"0003F1%
+ \Umathchardef\epsilon "0"0"0003F5%
+ \Umathchardef\varTheta "0"0"0003F4%
+ \Umathchardef\digamma "0"0"0003DC%
\relax
}
-\everymathmit {%
- % not done
-}
-
-\everymathcal {%
- % not done
-}
-
\everymathit {%
+ % codes
\Umathcode"0041="0"0"1D434%
\Umathcode"0042="0"0"1D435%
\Umathcode"0043="0"0"1D436%
@@ -334,6 +406,64 @@
\Umathcode"03F5="0"0"1D716%
\Umathcode"2202="0"0"1D715%
\Umathcode"2207="0"0"1D6FB%
+ % commands
+ \Umathchardef\Alpha "0"0"01D6E2%
+ \Umathchardef\Beta "0"0"01D6E3%
+ \Umathchardef\Gamma "0"0"01D6E4%
+ \Umathchardef\Delta "0"0"01D6E5%
+ \Umathchardef\Epsilon "0"0"01D6E6%
+ \Umathchardef\Zeta "0"0"01D6E7%
+ \Umathchardef\Eta "0"0"01D6E8%
+ \Umathchardef\Theta "0"0"01D6E9%
+ \Umathchardef\Iota "0"0"01D6EA%
+ \Umathchardef\Kappa "0"0"01D6EB%
+ \Umathchardef\Lambda "0"0"01D6EC%
+ \Umathchardef\Mu "0"0"01D6ED%
+ \Umathchardef\Nu "0"0"01D6EE%
+ \Umathchardef\Xi "0"0"01D6EF%
+ \Umathchardef\Omicron "0"0"01D6F0%
+ \Umathchardef\Pi "0"0"01D6F1%
+ \Umathchardef\Rho "0"0"01D6F2%
+ \Umathchardef\Sigma "0"0"01D6F4%
+ \Umathchardef\Tau "0"0"01D6F5%
+ \Umathchardef\Upsilon "0"0"01D6F6%
+ \Umathchardef\Phi "0"0"01D6F7%
+ \Umathchardef\Chi "0"0"01D6F8%
+ \Umathchardef\Psi "0"0"01D6F9%
+ \Umathchardef\Omega "0"0"01D6FA%
+ \Umathchardef\alpha "0"0"01D6FC%
+ \Umathchardef\beta "0"0"01D6FD%
+ \Umathchardef\gamma "0"0"01D6FE%
+ \Umathchardef\delta "0"0"01D6FF%
+ \Umathchardef\varepsilon"0"0"01D700%
+ \Umathchardef\zeta "0"0"01D701%
+ \Umathchardef\eta "0"0"01D702%
+ \Umathchardef\theta "0"0"01D703%
+ \Umathchardef\iota "0"0"01D704%
+ \Umathchardef\kappa "0"0"01D705%
+ \Umathchardef\lambda "0"0"01D706%
+ \Umathchardef\mu "0"0"01D707%
+ \Umathchardef\nu "0"0"01D708%
+ \Umathchardef\xi "0"0"01D709%
+ \Umathchardef\omicron "0"0"01D70A%
+ \Umathchardef\pi "0"0"01D70B%
+ \Umathchardef\rho "0"0"01D70C%
+ \Umathchardef\varsigma "0"0"01D70D%
+ \Umathchardef\sigma "0"0"01D70E%
+ \Umathchardef\tau "0"0"01D70F%
+ \Umathchardef\upsilon "0"0"01D710%
+ \Umathchardef\varphi "0"0"01D711%
+ \Umathchardef\chi "0"0"01D712%
+ \Umathchardef\psi "0"0"01D713%
+ \Umathchardef\omega "0"0"01D714%
+ \Umathchardef\epsilon "0"0"01D716%
+ \Umathchardef\vartheta "0"0"01D717%
+ \Umathchardef\varkappa "0"0"01D718%
+ \Umathchardef\phi "0"0"01D719%
+ \Umathchardef\varrho "0"0"01D71A%
+ \Umathchardef\varpi "0"0"01D71B%
+ \Umathchardef\varTheta "0"0"01D6F3%
+ \Umathchardef\digamma "0"0"0003DC%
\relax
}
@@ -342,6 +472,7 @@
}
\everymathbf {%
+ % codes
\Umathcode"0030="0"0"1D7CE%
\Umathcode"0031="0"0"1D7CF%
\Umathcode"0032="0"0"1D7D0%
@@ -462,10 +593,69 @@
\Umathcode"03F5="0"0"1D6DC%
\Umathcode"2202="0"0"1D6DB%
\Umathcode"2207="0"0"1D6C1%
+ % commands
+ \Umathchardef\Alpha "0"0"01D6A8%
+ \Umathchardef\Beta "0"0"01D6A9%
+ \Umathchardef\Gamma "0"0"01D6AA%
+ \Umathchardef\Delta "0"0"01D6AB%
+ \Umathchardef\Epsilon "0"0"01D6AC%
+ \Umathchardef\Zeta "0"0"01D6AD%
+ \Umathchardef\Eta "0"0"01D6AE%
+ \Umathchardef\Theta "0"0"01D6AF%
+ \Umathchardef\Iota "0"0"01D6B0%
+ \Umathchardef\Kappa "0"0"01D6B1%
+ \Umathchardef\Lambda "0"0"01D6B2%
+ \Umathchardef\Mu "0"0"01D6B3%
+ \Umathchardef\Nu "0"0"01D6B4%
+ \Umathchardef\Xi "0"0"01D6B5%
+ \Umathchardef\Omicron "0"0"01D6B6%
+ \Umathchardef\Pi "0"0"01D6B7%
+ \Umathchardef\Rho "0"0"01D6B8%
+ \Umathchardef\Sigma "0"0"01D6BA%
+ \Umathchardef\Tau "0"0"01D6BB%
+ \Umathchardef\Upsilon "0"0"01D6BC%
+ \Umathchardef\Phi "0"0"01D6BD%
+ \Umathchardef\Chi "0"0"01D6BE%
+ \Umathchardef\Psi "0"0"01D6BF%
+ \Umathchardef\Omega "0"0"01D6C0%
+ \Umathchardef\alpha "0"0"01D6C2%
+ \Umathchardef\beta "0"0"01D6C3%
+ \Umathchardef\gamma "0"0"01D6C4%
+ \Umathchardef\delta "0"0"01D6C5%
+ \Umathchardef\varepsilon"0"0"01D6C6%
+ \Umathchardef\zeta "0"0"01D6C7%
+ \Umathchardef\eta "0"0"01D6C8%
+ \Umathchardef\theta "0"0"01D6C9%
+ \Umathchardef\iota "0"0"01D6CA%
+ \Umathchardef\kappa "0"0"01D6CB%
+ \Umathchardef\lambda "0"0"01D6CC%
+ \Umathchardef\mu "0"0"01D6CD%
+ \Umathchardef\nu "0"0"01D6CE%
+ \Umathchardef\xi "0"0"01D6CF%
+ \Umathchardef\omicron "0"0"01D6D0%
+ \Umathchardef\pi "0"0"01D6D1%
+ \Umathchardef\rho "0"0"01D6D2%
+ \Umathchardef\varsigma "0"0"01D6D3%
+ \Umathchardef\sigma "0"0"01D6D4%
+ \Umathchardef\tau "0"0"01D6D5%
+ \Umathchardef\upsilon "0"0"01D6D6%
+ \Umathchardef\varphi "0"0"01D6D7%
+ \Umathchardef\chi "0"0"01D6D8%
+ \Umathchardef\psi "0"0"01D6D9%
+ \Umathchardef\omega "0"0"01D6DA%
+ \Umathchardef\epsilon "0"0"01D6DC%
+ \Umathchardef\vartheta "0"0"01D6DD%
+ \Umathchardef\varkappa "0"0"01D6DE%
+ \Umathchardef\phi "0"0"01D6DF%
+ \Umathchardef\varrho "0"0"01D6E0%
+ \Umathchardef\varpi "0"0"01D6E1%
+ \Umathchardef\varTheta "0"0"01D6B9%
+ \Umathchardef\digamma "0"0"01D7CA%
\relax
}
\everymathbi {%
+ % codes
\Umathcode"0030="0"0"1D7CE%
\Umathcode"0031="0"0"1D7CF%
\Umathcode"0032="0"0"1D7D0%
@@ -586,6 +776,64 @@
\Umathcode"03F5="0"0"1D750%
\Umathcode"2202="0"0"1D74F%
\Umathcode"2207="0"0"1D735%
+ % commands
+ \Umathchardef\Alpha "0"0"01D71C%
+ \Umathchardef\Beta "0"0"01D71D%
+ \Umathchardef\Gamma "0"0"01D71E%
+ \Umathchardef\Delta "0"0"01D71F%
+ \Umathchardef\Epsilon "0"0"01D720%
+ \Umathchardef\Zeta "0"0"01D721%
+ \Umathchardef\Eta "0"0"01D722%
+ \Umathchardef\Theta "0"0"01D723%
+ \Umathchardef\Iota "0"0"01D724%
+ \Umathchardef\Kappa "0"0"01D725%
+ \Umathchardef\Lambda "0"0"01D726%
+ \Umathchardef\Mu "0"0"01D727%
+ \Umathchardef\Nu "0"0"01D728%
+ \Umathchardef\Xi "0"0"01D729%
+ \Umathchardef\Omicron "0"0"01D72A%
+ \Umathchardef\Pi "0"0"01D72B%
+ \Umathchardef\Rho "0"0"01D72C%
+ \Umathchardef\Sigma "0"0"01D72E%
+ \Umathchardef\Tau "0"0"01D72F%
+ \Umathchardef\Upsilon "0"0"01D730%
+ \Umathchardef\Phi "0"0"01D731%
+ \Umathchardef\Chi "0"0"01D732%
+ \Umathchardef\Psi "0"0"01D733%
+ \Umathchardef\Omega "0"0"01D734%
+ \Umathchardef\alpha "0"0"01D736%
+ \Umathchardef\beta "0"0"01D737%
+ \Umathchardef\gamma "0"0"01D738%
+ \Umathchardef\delta "0"0"01D739%
+ \Umathchardef\varepsilon"0"0"01D73A%
+ \Umathchardef\zeta "0"0"01D73B%
+ \Umathchardef\eta "0"0"01D73C%
+ \Umathchardef\theta "0"0"01D73D%
+ \Umathchardef\iota "0"0"01D73E%
+ \Umathchardef\kappa "0"0"01D73F%
+ \Umathchardef\lambda "0"0"01D740%
+ \Umathchardef\mu "0"0"01D741%
+ \Umathchardef\nu "0"0"01D742%
+ \Umathchardef\xi "0"0"01D743%
+ \Umathchardef\omicron "0"0"01D744%
+ \Umathchardef\pi "0"0"01D745%
+ \Umathchardef\rho "0"0"01D746%
+ \Umathchardef\varsigma "0"0"01D747%
+ \Umathchardef\sigma "0"0"01D748%
+ \Umathchardef\tau "0"0"01D749%
+ \Umathchardef\upsilon "0"0"01D74A%
+ \Umathchardef\varphi "0"0"01D74B%
+ \Umathchardef\chi "0"0"01D74C%
+ \Umathchardef\psi "0"0"01D74D%
+ \Umathchardef\omega "0"0"01D74E%
+ \Umathchardef\epsilon "0"0"01D750%
+ \Umathchardef\vartheta "0"0"01D751%
+ \Umathchardef\varkappa "0"0"01D752%
+ \Umathchardef\phi "0"0"01D753%
+ \Umathchardef\varrho "0"0"01D754%
+ \Umathchardef\varpi "0"0"01D755%
+ \Umathchardef\varTheta "0"0"01D72D%
+ \Umathchardef\digamma "0"0"01D7CA%
\relax
}
@@ -593,6 +841,75 @@
% not done
}
+% Nothing special here:
+
+\let\mit\it
+
+% We use a special family for this, not that oldstyle in math makes
+% much sense, it's more that in good old tex oldstyle was taken from
+% math fonts. So, just something compatible:
+
+\def\oldstyle{\fam1\relax\tenos\relax}
+
+% Again a text and math one and it had better be used grouped.
+
+\def\cal{\fam0\relax\the\everymathcal\relax\tenit\relax}
+
+\everymathcal {%
+ \Umathcode"0041="0"0"1D49C% A
+ \Umathcode"0042="0"0"0212C% B
+ \Umathcode"0043="0"0"1D49E% C
+ \Umathcode"0044="0"0"1D49F% D
+ \Umathcode"0045="0"0"02130% E
+ \Umathcode"0046="0"0"02131% F
+ \Umathcode"0047="0"0"1D4A2% G
+ \Umathcode"0048="0"0"0210B% H
+ \Umathcode"0049="0"0"02110% I
+ \Umathcode"004A="0"0"1D4A5% J
+ \Umathcode"004B="0"0"1D4A6% K
+ \Umathcode"004C="0"0"02112% L
+ \Umathcode"004D="0"0"02133% M
+ \Umathcode"004E="0"0"1D4A9% N
+ \Umathcode"004F="0"0"1D4AA% O
+ \Umathcode"0050="0"0"1D4AB% P
+ \Umathcode"0051="0"0"1D4AC% Q
+ \Umathcode"0052="0"0"0211B% R
+ \Umathcode"0053="0"0"1D4AE% S
+ \Umathcode"0054="0"0"1D4AF% T
+ \Umathcode"0055="0"0"1D4B0% U
+ \Umathcode"0056="0"0"1D4B1% V
+ \Umathcode"0057="0"0"1D4B2% W
+ \Umathcode"0058="0"0"1D4B3% X
+ \Umathcode"0059="0"0"1D4B4% Y
+ \Umathcode"005A="0"0"1D4B5% Z
+ \Umathcode"0061="0"0"1D4B6% a
+ \Umathcode"0062="0"0"1D4B7% b
+ \Umathcode"0063="0"0"1D4B8% c
+ \Umathcode"0064="0"0"1D4B9% d
+ \Umathcode"0065="0"0"0212F% e
+ \Umathcode"0066="0"0"1D4BB% f
+ \Umathcode"0067="0"0"0210A% g
+ \Umathcode"0068="0"0"1D4BD% h
+ \Umathcode"0069="0"0"1D4BE% i
+ \Umathcode"006A="0"0"1D4BF% j
+ \Umathcode"006B="0"0"1D4C0% k
+ \Umathcode"006C="0"0"1D4C1% l
+ \Umathcode"006D="0"0"1D4C2% m
+ \Umathcode"006E="0"0"1D4C3% n
+ \Umathcode"006F="0"0"02134% o
+ \Umathcode"0070="0"0"1D4C5% p
+ \Umathcode"0071="0"0"1D4C6% q
+ \Umathcode"0072="0"0"1D4C7% r
+ \Umathcode"0073="0"0"1D4C8% s
+ \Umathcode"0074="0"0"1D4C9% t
+ \Umathcode"0075="0"0"1D4CA% u
+ \Umathcode"0076="0"0"1D4CB% v
+ \Umathcode"0077="0"0"1D4CC% w
+ \Umathcode"0078="0"0"1D4CD% x
+ \Umathcode"0079="0"0"1D4CE% y
+ \Umathcode"007A="0"0"1D4CF% z
+}
+
\Udelcode "00021 = "0 "00021
\Udelcode "00028 = "0 "00028
\Udelcode "00028 = "0 "00028
@@ -1827,6 +2144,44 @@
\def\Zeta {\Umathchar "0"0"000396 }
\def\zeta {\Umathchar "0"0"0003B6 }
+%D The following are suggested by Bruno. As I don't use plain and as the above are
+%D taken from text unicode greek I suppose his list is better:
+
+\def\alpha {\Umathchar "0"0"01D6FC }
+\def\beta {\Umathchar "0"0"01D6FD }
+\def\chi {\Umathchar "0"0"01D712 }
+\def\delta {\Umathchar "0"0"01D6FF }
+\def\digamma {\Umathchar "0"0"0003DC }
+\def\epsilon {\Umathchar "0"0"01D716 }
+\def\eta {\Umathchar "0"0"01D702 }
+\def\gamma {\Umathchar "0"0"01D6FE }
+\def\iota {\Umathchar "0"0"01D704 }
+\def\kappa {\Umathchar "0"0"01D705 }
+\def\lambda {\Umathchar "0"0"01D706 }
+\def\mu {\Umathchar "0"0"01D707 }
+\def\nu {\Umathchar "0"0"01D708 }
+\def\omega {\Umathchar "0"0"01D714 }
+\def\omicron {\Umathchar "0"0"01D70A }
+\def\phi {\Umathchar "0"0"01D719 }
+\def\pi {\Umathchar "0"0"01D70B }
+\def\psi {\Umathchar "0"0"01D713 }
+\def\rho {\Umathchar "0"0"01D70C }
+\def\sigma {\Umathchar "0"0"01D70E }
+\def\tau {\Umathchar "0"0"01D70F }
+\def\theta {\Umathchar "0"0"01D703 }
+\def\upsilon {\Umathchar "0"0"01D710 }
+\def\varepsilon {\Umathchar "0"0"01D700 }
+\def\varkappa {\Umathchar "0"0"01D718 }
+\def\varphi {\Umathchar "0"0"01D711 }
+\def\varpi {\Umathchar "0"0"01D71B }
+\def\varrho {\Umathchar "0"0"01D71A }
+\def\varsigma {\Umathchar "0"0"01D70D }
+\def\vartheta {\Umathchar "0"0"01D717 }
+\def\xi {\Umathchar "0"0"01D709 }
+\def\zeta {\Umathchar "0"0"01D701 }
+
+\def\varTheta {\Umathchar "0"0"0003F4 }
+
% a few definitions:
\def\sqrt {\Uroot "0 "221A{}}
@@ -1849,26 +2204,52 @@
\let\OE Œ
\let\O Ø
\let\i ı
+\let\j ȷ
\let\aa å
\let\l ł
\let\L Ł
\let\AA Å
\let\copyright ©
+\let\S §
+\let\P ¶
+\let\dag †
+\let\ddag ‡
+\let\pounds £
% just use utf
-\def\`#1{\string\`\string{#1\string}}
-\def\'#1{\string\'\string{#1\string}}
-\def\v#1{\string\v\string{#1\string}}
-\def\u#1{\string\u\string{#1\string}}
-\def\=#1{\string\=\string{#1\string}}
-\def\^#1{\string\^\string{#1\string}}
-\def\.#1{\string\.\string{#1\string}}
-\def\H#1{\string\H\string{#1\string}}
-\def\~#1{\string\~\string{#1\string}}
-\def\"#1{\string\"\string{#1\string}}
-\def\d#1{\string\d\string{#1\string}}
-\def\b#1{\string\b\string{#1\string}}
-\def\c#1{\string\c\string{#1\string}}
+\def\`#1{#1^^^^0300}
+\def\'#1{#1^^^^0301}
+\def\^#1{#1^^^^0302}
+\def\~#1{#1^^^^0303}
+\def\=#1{#1^^^^0304}
+\def\u#1{#1^^^^0306}
+\def\.#1{#1^^^^0307}
+\def\"#1{#1^^^^0308}
+\def\r#1{#1^^^^030a} % not in plain
+\def\H#1{#1^^^^030b}
+\def\v#1{#1^^^^030c}
+\def\d#1{#1^^^^0323}
+\def\c#1{#1^^^^0327}
+\def\k#1{#1^^^^0328} % not in plain
+\def\b#1{#1^^^^0331}
+
+% for Bruno, when he tests this file with xetex:
+
+\ifdefined\directlua \else
+
+ \catcode`@=11
+
+ \def\sqrt{\Uradical "0 "221A }
+
+ \def\root#1\of
+ {\setbox\rootbox\hbox\bgroup
+ $\m@th\scriptscriptstyle{#1}$%
+ \egroup}%
+ \mathpalette\r@@t}
+
+ \catcode`@=12
+
+\fi
\endinput
diff --git a/tex/generic/context/luatex/luatex-mplib.lua b/tex/generic/context/luatex/luatex-mplib.lua
index fd6eb975c..976bb59f9 100644
--- a/tex/generic/context/luatex/luatex-mplib.lua
+++ b/tex/generic/context/luatex/luatex-mplib.lua
@@ -352,7 +352,7 @@ else
return not (sx==1 and rx==0 and ry==0 and sy==1 and tx==0 and ty==0), t.width
end
- local function concat(px, py) -- no tx, ty here
+ local function concatinated(px, py) -- no tx, ty here
return (sy*px-ry*py)/divider,(sx*py-rx*px)/divider
end
@@ -401,29 +401,29 @@ else
for i=1,#path do
pth = path[i]
if not ith then
- pdf_literalcode("%f %f m",concat(pth.x_coord,pth.y_coord))
+ pdf_literalcode("%f %f m",concatinated(pth.x_coord,pth.y_coord))
elseif curved(ith,pth) then
- local a, b = concat(ith.right_x,ith.right_y)
- local c, d = concat(pth.left_x,pth.left_y)
- pdf_literalcode("%f %f %f %f %f %f c",a,b,c,d,concat(pth.x_coord, pth.y_coord))
+ local a, b = concatinated(ith.right_x,ith.right_y)
+ local c, d = concatinated(pth.left_x,pth.left_y)
+ pdf_literalcode("%f %f %f %f %f %f c",a,b,c,d,concatinated(pth.x_coord, pth.y_coord))
else
- pdf_literalcode("%f %f l",concat(pth.x_coord, pth.y_coord))
+ pdf_literalcode("%f %f l",concatinated(pth.x_coord, pth.y_coord))
end
ith = pth
end
if not open then
local one = path[1]
if curved(pth,one) then
- local a, b = concat(pth.right_x,pth.right_y)
- local c, d = concat(one.left_x,one.left_y)
- pdf_literalcode("%f %f %f %f %f %f c",a,b,c,d,concat(one.x_coord, one.y_coord))
+ local a, b = concatinated(pth.right_x,pth.right_y)
+ local c, d = concatinated(one.left_x,one.left_y)
+ pdf_literalcode("%f %f %f %f %f %f c",a,b,c,d,concatinated(one.x_coord, one.y_coord))
else
- pdf_literalcode("%f %f l",concat(one.x_coord,one.y_coord))
+ pdf_literalcode("%f %f l",concatinated(one.x_coord,one.y_coord))
end
elseif #path == 1 then
-- special case .. draw point
local one = path[1]
- pdf_literalcode("%f %f l",concat(one.x_coord,one.y_coord))
+ pdf_literalcode("%f %f l",concatinated(one.x_coord,one.y_coord))
end
return t
end
diff --git a/tex/generic/context/luatex/luatex-pdf.tex b/tex/generic/context/luatex/luatex-pdf.tex
index 81eb872ab..57004c6f8 100644
--- a/tex/generic/context/luatex/luatex-pdf.tex
+++ b/tex/generic/context/luatex/luatex-pdf.tex
@@ -168,7 +168,7 @@
\global\pdfobjcompresslevel 1
\global\pdfdecimaldigits 4
\global\pdfgamma 1000
- \global\pdfimageresolution 71
+ \global\pdfimageresolution 72
\global\pdfimageapplygamma 0
\global\pdfimagegamma 2200
\global\pdfimagehicolor 1
diff --git a/tex/generic/context/luatex/luatex-plain.tex b/tex/generic/context/luatex/luatex-plain.tex
index 99347ed2c..0a806c76f 100644
--- a/tex/generic/context/luatex/luatex-plain.tex
+++ b/tex/generic/context/luatex/luatex-plain.tex
@@ -17,7 +17,9 @@
\input luatex-pdf \relax
\fi
-\pdfoutput 1
+\outputmode 1
+
+% \outputmode 0 \magnification\magstep5
% We set the page dimensions because otherwise the backend does weird things
% when we have for instance this on a line of its own:
@@ -31,8 +33,8 @@
% 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
+\pagewidth 8.5truein
+\pageheight 11.0truein
% We load some code at runtime:
diff --git a/tex/generic/context/luatex/luatex-swiglib-test.lua b/tex/generic/context/luatex/luatex-swiglib-test.lua
index db6a72909..00d7c5a4e 100644
--- a/tex/generic/context/luatex/luatex-swiglib-test.lua
+++ b/tex/generic/context/luatex/luatex-swiglib-test.lua
@@ -1,25 +1,743 @@
-local gm = swiglib("gmwand.core")
-gm.InitializeMagick(".")
-local magick_wand = gm.NewMagickWand()
-local drawing_wand = gm.NewDrawingWand()
+-- local gm = require("swiglib.gmwand.core") -- local gm = swiglib("gmwand.core")
+--
+-- gm.InitializeMagick(".")
+--
+-- local magick_wand = gm.NewMagickWand()
+-- local drawing_wand = gm.NewDrawingWand()
+--
+-- gm.MagickSetSize(magick_wand,800,600)
+-- gm.MagickReadImage(magick_wand,"xc:red")
+--
+-- gm.DrawPushGraphicContext(drawing_wand)
+--
+-- gm.DrawSetFillColor(drawing_wand,gm.NewPixelWand())
+--
+-- -- gm.DrawSetFont(drawing_wand, kpse.findfile("DejaVuSerifBold.ttf"))
+-- -- gm.DrawSetFontSize(drawing_wand, 96)
+-- -- gm.DrawAnnotation(drawing_wand,300,200, "LuaTeX")
+--
+-- gm.DrawPopGraphicContext(drawing_wand)
+-- gm.MagickDrawImage(magick_wand,drawing_wand)
+--
+-- gm.MagickWriteImages(magick_wand,"./luatex-swiglib-test.jpg",1)
+--
+-- gm.DestroyDrawingWand(drawing_wand)
+-- gm.DestroyMagickWand(magick_wand)
-gm.MagickSetSize(magick_wand,800,600)
-gm.MagickReadImage(magick_wand,"xc:red")
+local swighelpers = require("swiglib.helpers.core")
+local sqlite = require("swiglib.sqlite.core")
-gm.DrawPushGraphicContext(drawing_wand)
+-- s.sqlite3_create_function_v2_lua_callback(function() end)
-gm.DrawSetFillColor(drawing_wand,gm.NewPixelWand())
--- gm.DrawSetFont(drawing_wand, kpse.findfile("DejaVuSerifBold.ttf"))
--- gm.DrawSetFontSize(drawing_wand, 96)
--- gm.DrawAnnotation(drawing_wand,300,200, "LuaTeX")
+local t = [[
+ CREATE TABLE IF NOT EXISTS loggers (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `time` int(11) NOT NULL,
+ `type` int(11) NOT NULL,
+ `action` varchar(15) NOT NULL,
+ `data` longtext,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `id_unique_key` (`id`)
+ )
+ DEFAULT CHARSET = utf8 ;
+]]
-gm.DrawPopGraphicContext(drawing_wand)
-gm.MagickDrawImage(magick_wand,drawing_wand)
+local t = [[
+CREATE TABLE IF NOT EXISTS loggers (
+ `id` INTEGER PRIMARY KEY AUTOINCREMENT,
+ `time` int(11) NOT NULL,
+ `type` int(11) NOT NULL,
+ `action` varchar(15) NOT NULL,
+ `data` longtext
+ );
+]]
-gm.MagickWriteImages(magick_wand,"./luatex-swiglib-test.jpg",1)
+local function execute(name,query)
+ local db = sqlite.new_sqlite3_p_array(1)
+ local okay = sqlite.sqlite3_open(name,db)
+ local dbh = sqlite.sqlite3_p_array_getitem(db,0)
+ if okay ~= sqlite.SQLITE_OK then
+ return false, sqlite.sqlite3_errmsg(dbh)
+ end
+ local result = { }
+ local callback = function(data,nofcolumns,values,fields)
+ local r = { }
+ for i=0,nofcolumns-1 do
+ local field = sqlite.char_p_array_getitem(fields,i)
+ local value = sqlite.char_p_array_getitem(values,i)
+ r[field] = value
+ end
+ result[#result+1] = r
+ return sqlite.SQLITE_OK
+ end
+ local data = nil
+ local message = nil
+ local okay = sqlite.sqlite3_exec_lua_callback(dbh,query,callback,data,message)
+ if okay ~= sqlite.SQLITE_OK then
+ return false, sqlite.sqlite3_errmsg(dbh)
+ end
+ sqlite.sqlite3_close(dbh)
+ sqlite.delete_sqlite3_p_array(db)
+ return result
+end
-gm.DestroyDrawingWand(drawing_wand)
-gm.DestroyMagickWand(magick_wand)
+execute("foo.db",t)
+-- execute("test.db",t)
+
+local template =[[
+ INSERT INTO loggers (
+ `time`,
+ `type`,
+ `action`,
+ `data`
+ ) VALUES (
+ %s,
+ %s,
+ '%s',
+ '%s'
+ ) ;
+]]
+
+-- for i=1,100 do
+-- local t = string.format(template,os.time(),1,"oeps " .. i,"more")
+-- execute("foo.db",t)
+-- end
+
+
+local r = execute("foo.db","select * from loggers;")
+inspect(r)
+
+
+-- inspect(table.sortedkeys(sqlite))
+-- inspect(table.sortedkeys(swighelpers))
+
+
+
+t={
+ "FULLY_WITHIN",
+ "NOT_WITHIN",
+ "PARTLY_WITHIN",
+ "SQLITE3_TEXT",
+ "SQLITE_ABORT",
+ "SQLITE_ABORT_ROLLBACK",
+ "SQLITE_ACCESS_EXISTS",
+ "SQLITE_ACCESS_READ",
+ "SQLITE_ACCESS_READWRITE",
+ "SQLITE_ALTER_TABLE",
+ "SQLITE_ANALYZE",
+ "SQLITE_ANY",
+ "SQLITE_ATTACH",
+ "SQLITE_AUTH",
+ "SQLITE_AUTH_USER",
+ "SQLITE_BLOB",
+ "SQLITE_BUSY",
+ "SQLITE_BUSY_RECOVERY",
+ "SQLITE_BUSY_SNAPSHOT",
+ "SQLITE_CANTOPEN",
+ "SQLITE_CANTOPEN_CONVPATH",
+ "SQLITE_CANTOPEN_FULLPATH",
+ "SQLITE_CANTOPEN_ISDIR",
+ "SQLITE_CANTOPEN_NOTEMPDIR",
+ "SQLITE_CHECKPOINT_FULL",
+ "SQLITE_CHECKPOINT_PASSIVE",
+ "SQLITE_CHECKPOINT_RESTART",
+ "SQLITE_CONFIG_COVERING_INDEX_SCAN",
+ "SQLITE_CONFIG_GETMALLOC",
+ "SQLITE_CONFIG_GETMUTEX",
+ "SQLITE_CONFIG_GETPCACHE",
+ "SQLITE_CONFIG_GETPCACHE2",
+ "SQLITE_CONFIG_HEAP",
+ "SQLITE_CONFIG_LOG",
+ "SQLITE_CONFIG_LOOKASIDE",
+ "SQLITE_CONFIG_MALLOC",
+ "SQLITE_CONFIG_MEMSTATUS",
+ "SQLITE_CONFIG_MMAP_SIZE",
+ "SQLITE_CONFIG_MULTITHREAD",
+ "SQLITE_CONFIG_MUTEX",
+ "SQLITE_CONFIG_PAGECACHE",
+ "SQLITE_CONFIG_PCACHE",
+ "SQLITE_CONFIG_PCACHE2",
+ "SQLITE_CONFIG_SCRATCH",
+ "SQLITE_CONFIG_SERIALIZED",
+ "SQLITE_CONFIG_SINGLETHREAD",
+ "SQLITE_CONFIG_SQLLOG",
+ "SQLITE_CONFIG_URI",
+ "SQLITE_CONFIG_WIN32_HEAPSIZE",
+ "SQLITE_CONSTRAINT",
+ "SQLITE_CONSTRAINT_CHECK",
+ "SQLITE_CONSTRAINT_COMMITHOOK",
+ "SQLITE_CONSTRAINT_FOREIGNKEY",
+ "SQLITE_CONSTRAINT_FUNCTION",
+ "SQLITE_CONSTRAINT_NOTNULL",
+ "SQLITE_CONSTRAINT_PRIMARYKEY",
+ "SQLITE_CONSTRAINT_ROWID",
+ "SQLITE_CONSTRAINT_TRIGGER",
+ "SQLITE_CONSTRAINT_UNIQUE",
+ "SQLITE_CONSTRAINT_VTAB",
+ "SQLITE_COPY",
+ "SQLITE_CORRUPT",
+ "SQLITE_CORRUPT_VTAB",
+ "SQLITE_CREATE_INDEX",
+ "SQLITE_CREATE_TABLE",
+ "SQLITE_CREATE_TEMP_INDEX",
+ "SQLITE_CREATE_TEMP_TABLE",
+ "SQLITE_CREATE_TEMP_TRIGGER",
+ "SQLITE_CREATE_TEMP_VIEW",
+ "SQLITE_CREATE_TRIGGER",
+ "SQLITE_CREATE_VIEW",
+ "SQLITE_CREATE_VTABLE",
+ "SQLITE_DBCONFIG_ENABLE_FKEY",
+ "SQLITE_DBCONFIG_ENABLE_TRIGGER",
+ "SQLITE_DBCONFIG_LOOKASIDE",
+ "SQLITE_DBSTATUS_CACHE_HIT",
+ "SQLITE_DBSTATUS_CACHE_MISS",
+ "SQLITE_DBSTATUS_CACHE_USED",
+ "SQLITE_DBSTATUS_CACHE_WRITE",
+ "SQLITE_DBSTATUS_DEFERRED_FKS",
+ "SQLITE_DBSTATUS_LOOKASIDE_HIT",
+ "SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL",
+ "SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE",
+ "SQLITE_DBSTATUS_LOOKASIDE_USED",
+ "SQLITE_DBSTATUS_MAX",
+ "SQLITE_DBSTATUS_SCHEMA_USED",
+ "SQLITE_DBSTATUS_STMT_USED",
+ "SQLITE_DELETE",
+ "SQLITE_DENY",
+ "SQLITE_DETACH",
+ "SQLITE_DETERMINISTIC",
+ "SQLITE_DONE",
+ "SQLITE_DROP_INDEX",
+ "SQLITE_DROP_TABLE",
+ "SQLITE_DROP_TEMP_INDEX",
+ "SQLITE_DROP_TEMP_TABLE",
+ "SQLITE_DROP_TEMP_TRIGGER",
+ "SQLITE_DROP_TEMP_VIEW",
+ "SQLITE_DROP_TRIGGER",
+ "SQLITE_DROP_VIEW",
+ "SQLITE_DROP_VTABLE",
+ "SQLITE_EMPTY",
+ "SQLITE_ERROR",
+ "SQLITE_FAIL",
+ "SQLITE_FCNTL_BUSYHANDLER",
+ "SQLITE_FCNTL_CHUNK_SIZE",
+ "SQLITE_FCNTL_COMMIT_PHASETWO",
+ "SQLITE_FCNTL_FILE_POINTER",
+ "SQLITE_FCNTL_HAS_MOVED",
+ "SQLITE_FCNTL_LOCKSTATE",
+ "SQLITE_FCNTL_MMAP_SIZE",
+ "SQLITE_FCNTL_OVERWRITE",
+ "SQLITE_FCNTL_PERSIST_WAL",
+ "SQLITE_FCNTL_POWERSAFE_OVERWRITE",
+ "SQLITE_FCNTL_PRAGMA",
+ "SQLITE_FCNTL_SIZE_HINT",
+ "SQLITE_FCNTL_SYNC",
+ "SQLITE_FCNTL_SYNC_OMITTED",
+ "SQLITE_FCNTL_TEMPFILENAME",
+ "SQLITE_FCNTL_TRACE",
+ "SQLITE_FCNTL_VFSNAME",
+ "SQLITE_FCNTL_WIN32_AV_RETRY",
+ "SQLITE_FCNTL_WIN32_SET_HANDLE",
+ "SQLITE_FLOAT",
+ "SQLITE_FORMAT",
+ "SQLITE_FULL",
+ "SQLITE_FUNCTION",
+ "SQLITE_GET_LOCKPROXYFILE",
+ "SQLITE_IGNORE",
+ "SQLITE_INDEX_CONSTRAINT_EQ",
+ "SQLITE_INDEX_CONSTRAINT_GE",
+ "SQLITE_INDEX_CONSTRAINT_GT",
+ "SQLITE_INDEX_CONSTRAINT_LE",
+ "SQLITE_INDEX_CONSTRAINT_LT",
+ "SQLITE_INDEX_CONSTRAINT_MATCH",
+ "SQLITE_INSERT",
+ "SQLITE_INTEGER",
+ "SQLITE_INTERNAL",
+ "SQLITE_INTERRUPT",
+ "SQLITE_IOCAP_ATOMIC",
+ "SQLITE_IOCAP_ATOMIC16K",
+ "SQLITE_IOCAP_ATOMIC1K",
+ "SQLITE_IOCAP_ATOMIC2K",
+ "SQLITE_IOCAP_ATOMIC32K",
+ "SQLITE_IOCAP_ATOMIC4K",
+ "SQLITE_IOCAP_ATOMIC512",
+ "SQLITE_IOCAP_ATOMIC64K",
+ "SQLITE_IOCAP_ATOMIC8K",
+ "SQLITE_IOCAP_IMMUTABLE",
+ "SQLITE_IOCAP_POWERSAFE_OVERWRITE",
+ "SQLITE_IOCAP_SAFE_APPEND",
+ "SQLITE_IOCAP_SEQUENTIAL",
+ "SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN",
+ "SQLITE_IOERR",
+ "SQLITE_IOERR_ACCESS",
+ "SQLITE_IOERR_BLOCKED",
+ "SQLITE_IOERR_CHECKRESERVEDLOCK",
+ "SQLITE_IOERR_CLOSE",
+ "SQLITE_IOERR_CONVPATH",
+ "SQLITE_IOERR_DELETE",
+ "SQLITE_IOERR_DELETE_NOENT",
+ "SQLITE_IOERR_DIR_CLOSE",
+ "SQLITE_IOERR_DIR_FSYNC",
+ "SQLITE_IOERR_FSTAT",
+ "SQLITE_IOERR_FSYNC",
+ "SQLITE_IOERR_GETTEMPPATH",
+ "SQLITE_IOERR_LOCK",
+ "SQLITE_IOERR_MMAP",
+ "SQLITE_IOERR_NOMEM",
+ "SQLITE_IOERR_RDLOCK",
+ "SQLITE_IOERR_READ",
+ "SQLITE_IOERR_SEEK",
+ "SQLITE_IOERR_SHMLOCK",
+ "SQLITE_IOERR_SHMMAP",
+ "SQLITE_IOERR_SHMOPEN",
+ "SQLITE_IOERR_SHMSIZE",
+ "SQLITE_IOERR_SHORT_READ",
+ "SQLITE_IOERR_TRUNCATE",
+ "SQLITE_IOERR_UNLOCK",
+ "SQLITE_IOERR_WRITE",
+ "SQLITE_LAST_ERRNO",
+ "SQLITE_LIMIT_ATTACHED",
+ "SQLITE_LIMIT_COLUMN",
+ "SQLITE_LIMIT_COMPOUND_SELECT",
+ "SQLITE_LIMIT_EXPR_DEPTH",
+ "SQLITE_LIMIT_FUNCTION_ARG",
+ "SQLITE_LIMIT_LENGTH",
+ "SQLITE_LIMIT_LIKE_PATTERN_LENGTH",
+ "SQLITE_LIMIT_SQL_LENGTH",
+ "SQLITE_LIMIT_TRIGGER_DEPTH",
+ "SQLITE_LIMIT_VARIABLE_NUMBER",
+ "SQLITE_LIMIT_VDBE_OP",
+ "SQLITE_LIMIT_WORKER_THREADS",
+ "SQLITE_LOCKED",
+ "SQLITE_LOCKED_SHAREDCACHE",
+ "SQLITE_LOCK_EXCLUSIVE",
+ "SQLITE_LOCK_NONE",
+ "SQLITE_LOCK_PENDING",
+ "SQLITE_LOCK_RESERVED",
+ "SQLITE_LOCK_SHARED",
+ "SQLITE_MISMATCH",
+ "SQLITE_MISUSE",
+ "SQLITE_MUTEX_FAST",
+ "SQLITE_MUTEX_RECURSIVE",
+ "SQLITE_MUTEX_STATIC_APP1",
+ "SQLITE_MUTEX_STATIC_APP2",
+ "SQLITE_MUTEX_STATIC_APP3",
+ "SQLITE_MUTEX_STATIC_LRU",
+ "SQLITE_MUTEX_STATIC_LRU2",
+ "SQLITE_MUTEX_STATIC_MASTER",
+ "SQLITE_MUTEX_STATIC_MEM",
+ "SQLITE_MUTEX_STATIC_MEM2",
+ "SQLITE_MUTEX_STATIC_OPEN",
+ "SQLITE_MUTEX_STATIC_PMEM",
+ "SQLITE_MUTEX_STATIC_PRNG",
+ "SQLITE_NOLFS",
+ "SQLITE_NOMEM",
+ "SQLITE_NOTADB",
+ "SQLITE_NOTFOUND",
+ "SQLITE_NOTICE",
+ "SQLITE_NOTICE_RECOVER_ROLLBACK",
+ "SQLITE_NOTICE_RECOVER_WAL",
+ "SQLITE_NULL",
+ "SQLITE_OK",
+ "SQLITE_OPEN_AUTOPROXY",
+ "SQLITE_OPEN_CREATE",
+ "SQLITE_OPEN_DELETEONCLOSE",
+ "SQLITE_OPEN_EXCLUSIVE",
+ "SQLITE_OPEN_FULLMUTEX",
+ "SQLITE_OPEN_MAIN_DB",
+ "SQLITE_OPEN_MAIN_JOURNAL",
+ "SQLITE_OPEN_MASTER_JOURNAL",
+ "SQLITE_OPEN_MEMORY",
+ "SQLITE_OPEN_NOMUTEX",
+ "SQLITE_OPEN_PRIVATECACHE",
+ "SQLITE_OPEN_READONLY",
+ "SQLITE_OPEN_READWRITE",
+ "SQLITE_OPEN_SHAREDCACHE",
+ "SQLITE_OPEN_SUBJOURNAL",
+ "SQLITE_OPEN_TEMP_DB",
+ "SQLITE_OPEN_TEMP_JOURNAL",
+ "SQLITE_OPEN_TRANSIENT_DB",
+ "SQLITE_OPEN_URI",
+ "SQLITE_OPEN_WAL",
+ "SQLITE_PERM",
+ "SQLITE_PRAGMA",
+ "SQLITE_PROTOCOL",
+ "SQLITE_RANGE",
+ "SQLITE_READ",
+ "SQLITE_READONLY",
+ "SQLITE_READONLY_CANTLOCK",
+ "SQLITE_READONLY_DBMOVED",
+ "SQLITE_READONLY_RECOVERY",
+ "SQLITE_READONLY_ROLLBACK",
+ "SQLITE_RECURSIVE",
+ "SQLITE_REINDEX",
+ "SQLITE_REPLACE",
+ "SQLITE_ROLLBACK",
+ "SQLITE_ROW",
+ "SQLITE_SAVEPOINT",
+ "SQLITE_SCHEMA",
+ "SQLITE_SELECT",
+ "SQLITE_SET_LOCKPROXYFILE",
+ "SQLITE_SHM_EXCLUSIVE",
+ "SQLITE_SHM_LOCK",
+ "SQLITE_SHM_NLOCK",
+ "SQLITE_SHM_SHARED",
+ "SQLITE_SHM_UNLOCK",
+ "SQLITE_SOURCE_ID",
+ "SQLITE_STATUS_MALLOC_COUNT",
+ "SQLITE_STATUS_MALLOC_SIZE",
+ "SQLITE_STATUS_MEMORY_USED",
+ "SQLITE_STATUS_PAGECACHE_OVERFLOW",
+ "SQLITE_STATUS_PAGECACHE_SIZE",
+ "SQLITE_STATUS_PAGECACHE_USED",
+ "SQLITE_STATUS_PARSER_STACK",
+ "SQLITE_STATUS_SCRATCH_OVERFLOW",
+ "SQLITE_STATUS_SCRATCH_SIZE",
+ "SQLITE_STATUS_SCRATCH_USED",
+ "SQLITE_STMTSTATUS_AUTOINDEX",
+ "SQLITE_STMTSTATUS_FULLSCAN_STEP",
+ "SQLITE_STMTSTATUS_SORT",
+ "SQLITE_STMTSTATUS_VM_STEP",
+ "SQLITE_SYNC_DATAONLY",
+ "SQLITE_SYNC_FULL",
+ "SQLITE_SYNC_NORMAL",
+ "SQLITE_TESTCTRL_ALWAYS",
+ "SQLITE_TESTCTRL_ASSERT",
+ "SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS",
+ "SQLITE_TESTCTRL_BITVEC_TEST",
+ "SQLITE_TESTCTRL_BYTEORDER",
+ "SQLITE_TESTCTRL_EXPLAIN_STMT",
+ "SQLITE_TESTCTRL_FAULT_INSTALL",
+ "SQLITE_TESTCTRL_FIRST",
+ "SQLITE_TESTCTRL_ISINIT",
+ "SQLITE_TESTCTRL_ISKEYWORD",
+ "SQLITE_TESTCTRL_LAST",
+ "SQLITE_TESTCTRL_LOCALTIME_FAULT",
+ "SQLITE_TESTCTRL_NEVER_CORRUPT",
+ "SQLITE_TESTCTRL_OPTIMIZATIONS",
+ "SQLITE_TESTCTRL_PENDING_BYTE",
+ "SQLITE_TESTCTRL_PRNG_RESET",
+ "SQLITE_TESTCTRL_PRNG_RESTORE",
+ "SQLITE_TESTCTRL_PRNG_SAVE",
+ "SQLITE_TESTCTRL_RESERVE",
+ "SQLITE_TESTCTRL_SCRATCHMALLOC",
+ "SQLITE_TESTCTRL_SORTER_MMAP",
+ "SQLITE_TESTCTRL_VDBE_COVERAGE",
+ "SQLITE_TEXT",
+ "SQLITE_TOOBIG",
+ "SQLITE_TRANSACTION",
+ "SQLITE_UPDATE",
+ "SQLITE_UTF16",
+ "SQLITE_UTF16BE",
+ "SQLITE_UTF16LE",
+ "SQLITE_UTF16_ALIGNED",
+ "SQLITE_UTF8",
+ "SQLITE_VERSION",
+ "SQLITE_VERSION_NUMBER",
+ "SQLITE_VTAB_CONSTRAINT_SUPPORT",
+ "SQLITE_WARNING",
+ "SQLITE_WARNING_AUTOINDEX",
+ "call_callback_sqlite3_create_collation_v2_1",
+ "call_callback_sqlite3_create_collation_v2_2",
+ "call_callback_sqlite3_create_function16_1",
+ "call_callback_sqlite3_create_function16_2",
+ "call_callback_sqlite3_create_function16_3",
+ "call_callback_sqlite3_create_function_1",
+ "call_callback_sqlite3_create_function_2",
+ "call_callback_sqlite3_create_function_3",
+ "call_callback_sqlite3_create_function_v2_1",
+ "call_callback_sqlite3_create_function_v2_2",
+ "call_callback_sqlite3_create_function_v2_3",
+ "call_callback_sqlite3_create_function_v2_4",
+ "call_callback_sqlite3_rtree_query_callback_1",
+ "call_callback_sqlite3_rtree_query_callback_2",
+ "char_p_array_getitem",
+ "char_p_array_setitem",
+ "delete_char_p_array",
+ "delete_sqlite3_p_array",
+ "delete_sqlite3_rtree_dbl_array",
+ "delete_sqlite3_stmt_p_array",
+ "delete_sqlite3_value_p_array",
+ "delete_sqlite3_vtab_cursor_p_array",
+ "delete_sqlite3_vtab_p_array",
+ "delete_void_p_array",
+ "new_char_p_array",
+ "new_sqlite3_p_array",
+ "new_sqlite3_rtree_dbl_array",
+ "new_sqlite3_stmt_p_array",
+ "new_sqlite3_value_p_array",
+ "new_sqlite3_vtab_cursor_p_array",
+ "new_sqlite3_vtab_p_array",
+ "new_void_p_array",
+ "sqlite3_aggregate_context",
+ "sqlite3_aggregate_count",
+ "sqlite3_auto_extension",
+ "sqlite3_auto_extension_lua_callback",
+ "sqlite3_backup_finish",
+ "sqlite3_backup_init",
+ "sqlite3_backup_pagecount",
+ "sqlite3_backup_remaining",
+ "sqlite3_backup_step",
+ "sqlite3_bind_blob",
+ "sqlite3_bind_blob64",
+ "sqlite3_bind_blob64_lua_callback",
+ "sqlite3_bind_blob_lua_callback",
+ "sqlite3_bind_double",
+ "sqlite3_bind_int",
+ "sqlite3_bind_int64",
+ "sqlite3_bind_null",
+ "sqlite3_bind_parameter_count",
+ "sqlite3_bind_parameter_index",
+ "sqlite3_bind_parameter_name",
+ "sqlite3_bind_text",
+ "sqlite3_bind_text16",
+ "sqlite3_bind_text16_lua_callback",
+ "sqlite3_bind_text64",
+ "sqlite3_bind_text64_lua_callback",
+ "sqlite3_bind_text_lua_callback",
+ "sqlite3_bind_value",
+ "sqlite3_bind_zeroblob",
+ "sqlite3_blob_bytes",
+ "sqlite3_blob_close",
+ "sqlite3_blob_open",
+ "sqlite3_blob_read",
+ "sqlite3_blob_reopen",
+ "sqlite3_blob_write",
+ "sqlite3_busy_handler",
+ "sqlite3_busy_handler_lua_callback",
+ "sqlite3_busy_timeout",
+ "sqlite3_cancel_auto_extension",
+ "sqlite3_cancel_auto_extension_lua_callback",
+ "sqlite3_changes",
+ "sqlite3_clear_bindings",
+ "sqlite3_close",
+ "sqlite3_close_v2",
+ "sqlite3_collation_needed",
+ "sqlite3_collation_needed16",
+ "sqlite3_collation_needed16_lua_callback",
+ "sqlite3_collation_needed_lua_callback",
+ "sqlite3_column_blob",
+ "sqlite3_column_bytes",
+ "sqlite3_column_bytes16",
+ "sqlite3_column_count",
+ "sqlite3_column_decltype",
+ "sqlite3_column_decltype16",
+ "sqlite3_column_double",
+ "sqlite3_column_int",
+ "sqlite3_column_int64",
+ "sqlite3_column_name",
+ "sqlite3_column_name16",
+ "sqlite3_column_text",
+ "sqlite3_column_text16",
+ "sqlite3_column_type",
+ "sqlite3_column_value",
+ "sqlite3_commit_hook",
+ "sqlite3_commit_hook_lua_callback",
+ "sqlite3_compileoption_get",
+ "sqlite3_compileoption_used",
+ "sqlite3_complete",
+ "sqlite3_complete16",
+ "sqlite3_config",
+ "sqlite3_context_db_handle",
+ "sqlite3_create_collation",
+ "sqlite3_create_collation16",
+ "sqlite3_create_collation16_lua_callback",
+ "sqlite3_create_collation_lua_callback",
+ "sqlite3_create_collation_v2",
+ "sqlite3_create_collation_v2_lua_callback",
+ "sqlite3_create_function",
+ "sqlite3_create_function16",
+ "sqlite3_create_function16_lua_callback",
+ "sqlite3_create_function_lua_callback",
+ "sqlite3_create_function_v2",
+ "sqlite3_create_function_v2_lua_callback",
+ "sqlite3_create_module",
+ "sqlite3_create_module_v2",
+ "sqlite3_create_module_v2_lua_callback",
+ "sqlite3_data_count",
+ "sqlite3_db_config",
+ "sqlite3_db_filename",
+ "sqlite3_db_handle",
+ "sqlite3_db_mutex",
+ "sqlite3_db_readonly",
+ "sqlite3_db_release_memory",
+ "sqlite3_db_status",
+ "sqlite3_declare_vtab",
+ "sqlite3_enable_load_extension",
+ "sqlite3_enable_shared_cache",
+ "sqlite3_errcode",
+ "sqlite3_errmsg",
+ "sqlite3_errmsg16",
+ "sqlite3_errstr",
+ "sqlite3_exec",
+ "sqlite3_exec_lua_callback",
+ "sqlite3_expired",
+ "sqlite3_extended_errcode",
+ "sqlite3_extended_result_codes",
+ "sqlite3_file",
+ "sqlite3_file_control",
+ "sqlite3_finalize",
+ "sqlite3_free",
+ "sqlite3_free_table",
+ "sqlite3_get_autocommit",
+ "sqlite3_get_auxdata",
+ "sqlite3_get_table",
+ "sqlite3_global_recover",
+ "sqlite3_index_info",
+ "sqlite3_index_info_aConstraint",
+ "sqlite3_index_info_aConstraintUsage",
+ "sqlite3_index_info_aOrderBy",
+ "sqlite3_initialize",
+ "sqlite3_interrupt",
+ "sqlite3_io_methods",
+ "sqlite3_last_insert_rowid",
+ "sqlite3_libversion",
+ "sqlite3_libversion_number",
+ "sqlite3_limit",
+ "sqlite3_load_extension",
+ "sqlite3_log",
+ "sqlite3_malloc",
+ "sqlite3_malloc64",
+ "sqlite3_mem_methods",
+ "sqlite3_memory_alarm",
+ "sqlite3_memory_highwater",
+ "sqlite3_memory_used",
+ "sqlite3_module",
+ "sqlite3_mprintf",
+ "sqlite3_msize",
+ "sqlite3_mutex_alloc",
+ "sqlite3_mutex_enter",
+ "sqlite3_mutex_free",
+ "sqlite3_mutex_leave",
+ "sqlite3_mutex_methods",
+ "sqlite3_mutex_try",
+ "sqlite3_next_stmt",
+ "sqlite3_open",
+ "sqlite3_open16",
+ "sqlite3_open_v2",
+ "sqlite3_os_end",
+ "sqlite3_os_init",
+ "sqlite3_overload_function",
+ "sqlite3_p_array_getitem",
+ "sqlite3_p_array_setitem",
+ "sqlite3_pcache_methods",
+ "sqlite3_pcache_methods2",
+ "sqlite3_pcache_page",
+ "sqlite3_prepare",
+ "sqlite3_prepare16",
+ "sqlite3_prepare16_v2",
+ "sqlite3_prepare_v2",
+ "sqlite3_profile",
+ "sqlite3_progress_handler",
+ "sqlite3_progress_handler_lua_callback",
+ "sqlite3_randomness",
+ "sqlite3_realloc",
+ "sqlite3_realloc64",
+ "sqlite3_release_memory",
+ "sqlite3_reset",
+ "sqlite3_reset_auto_extension",
+ "sqlite3_result_blob",
+ "sqlite3_result_blob64",
+ "sqlite3_result_blob64_lua_callback",
+ "sqlite3_result_blob_lua_callback",
+ "sqlite3_result_double",
+ "sqlite3_result_error",
+ "sqlite3_result_error16",
+ "sqlite3_result_error_code",
+ "sqlite3_result_error_nomem",
+ "sqlite3_result_error_toobig",
+ "sqlite3_result_int",
+ "sqlite3_result_int64",
+ "sqlite3_result_null",
+ "sqlite3_result_text",
+ "sqlite3_result_text16",
+ "sqlite3_result_text16_lua_callback",
+ "sqlite3_result_text16be",
+ "sqlite3_result_text16be_lua_callback",
+ "sqlite3_result_text16le",
+ "sqlite3_result_text16le_lua_callback",
+ "sqlite3_result_text64",
+ "sqlite3_result_text64_lua_callback",
+ "sqlite3_result_text_lua_callback",
+ "sqlite3_result_value",
+ "sqlite3_result_zeroblob",
+ "sqlite3_rollback_hook",
+ "sqlite3_rollback_hook_lua_callback",
+ "sqlite3_rtree_dbl_array_getitem",
+ "sqlite3_rtree_dbl_array_setitem",
+ "sqlite3_rtree_geometry",
+ "sqlite3_rtree_geometry_callback",
+ "sqlite3_rtree_geometry_callback_lua_callback",
+ "sqlite3_rtree_query_callback",
+ "sqlite3_rtree_query_callback_lua_callback",
+ "sqlite3_rtree_query_info",
+ "sqlite3_set_authorizer",
+ "sqlite3_set_authorizer_lua_callback",
+ "sqlite3_set_auxdata",
+ "sqlite3_set_auxdata_lua_callback",
+ "sqlite3_shutdown",
+ "sqlite3_sleep",
+ "sqlite3_snprintf",
+ "sqlite3_soft_heap_limit",
+ "sqlite3_soft_heap_limit64",
+ "sqlite3_sourceid",
+ "sqlite3_sql",
+ "sqlite3_status",
+ "sqlite3_step",
+ "sqlite3_stmt_busy",
+ "sqlite3_stmt_p_array_getitem",
+ "sqlite3_stmt_p_array_setitem",
+ "sqlite3_stmt_readonly",
+ "sqlite3_stmt_status",
+ "sqlite3_strglob",
+ "sqlite3_stricmp",
+ "sqlite3_strnicmp",
+ "sqlite3_test_control",
+ "sqlite3_thread_cleanup",
+ "sqlite3_threadsafe",
+ "sqlite3_total_changes",
+ "sqlite3_trace",
+ "sqlite3_trace_lua_callback",
+ "sqlite3_transfer_bindings",
+ "sqlite3_update_hook",
+ "sqlite3_update_hook_lua_callback",
+ "sqlite3_uri_boolean",
+ "sqlite3_uri_int64",
+ "sqlite3_uri_parameter",
+ "sqlite3_user_data",
+ "sqlite3_value_blob",
+ "sqlite3_value_bytes",
+ "sqlite3_value_bytes16",
+ "sqlite3_value_double",
+ "sqlite3_value_int",
+ "sqlite3_value_int64",
+ "sqlite3_value_numeric_type",
+ "sqlite3_value_p_array_getitem",
+ "sqlite3_value_p_array_setitem",
+ "sqlite3_value_text",
+ "sqlite3_value_text16",
+ "sqlite3_value_text16be",
+ "sqlite3_value_text16le",
+ "sqlite3_value_type",
+ "sqlite3_vfs",
+ "sqlite3_vfs_find",
+ "sqlite3_vfs_register",
+ "sqlite3_vfs_unregister",
+ "sqlite3_vtab",
+ "sqlite3_vtab_config",
+ "sqlite3_vtab_cursor",
+ "sqlite3_vtab_cursor_p_array_getitem",
+ "sqlite3_vtab_cursor_p_array_setitem",
+ "sqlite3_vtab_on_conflict",
+ "sqlite3_vtab_p_array_getitem",
+ "sqlite3_vtab_p_array_setitem",
+ "sqlite3_wal_autocheckpoint",
+ "sqlite3_wal_checkpoint",
+ "sqlite3_wal_checkpoint_v2",
+ "sqlite3_wal_hook",
+ "sqlite3_wal_hook_lua_callback",
+ "void_p_array_getitem",
+ "void_p_array_setitem",
+}
diff --git a/tex/generic/context/luatex/luatex-swiglib.lua b/tex/generic/context/luatex/luatex-swiglib.lua
index 7ffcdc375..3108dd43f 100644
--- a/tex/generic/context/luatex/luatex-swiglib.lua
+++ b/tex/generic/context/luatex/luatex-swiglib.lua
@@ -8,7 +8,8 @@ if not modules then modules = { } end modules ['luatex-swiglib'] = {
local savedrequire = require
-local libsuffix = os.type == "windows" and ".dll" or ".so"
+local libsuffix = os.type == "windows" and ".dll" or ".so"
+local pathsplit = "([^" .. io.pathseparator .. "]+)"
function requireswiglib(required,version)
local library = package.loaded[required]
@@ -17,7 +18,7 @@ function requireswiglib(required,version)
else
local name = string.gsub(required,"%.","/") .. libsuffix
local list = kpse.show_path("clua")
- for root in string.gmatch(list,"([^;]+)") do
+ for root in string.gmatch(list,pathsplit) do
local full = false
if type(version) == "string" and version ~= "" then
full = root .. "/" .. version .. "/" .. name
diff --git a/tex/generic/context/luatex/luatex-test.tex b/tex/generic/context/luatex/luatex-test.tex
index 0bb752b3f..2aa4f22d9 100644
--- a/tex/generic/context/luatex/luatex-test.tex
+++ b/tex/generic/context/luatex/luatex-test.tex
@@ -158,4 +158,16 @@ $\sin{x}$
% \textdir TRT\amiri بِسْمِ اللَّـهِ الرَّ‌حْمَـٰنِ الرَّ‌حِيمِ
% \egroup
+% assumes csr10.tfm csr10.pfb csr.enc to be present
+
+% \font\foo=file:luatex-plain-tfm.lua:tfm=csr10;enc=csr;pfb=csr10 at 12pt
+%
+% \foo áäčďěíĺľňóôŕřšťúýž ff ffi
+
+% \font\foo=file:csr10.tfm:reencode=csr
+% \font\foo=file:csr10.tfm:reencode=csr;bitmap=yes % use map file
+% \font\foo=file:csr10.tfm:reencode=auto
+%
+% \foo áäčďěíĺľňóôŕřšťúýž ff ffi \input tufte\par
+
\end
diff --git a/web2c/contextcnf.lua b/web2c/contextcnf.lua
index a2025e6ef..cd948c23e 100644
--- a/web2c/contextcnf.lua
+++ b/web2c/contextcnf.lua
@@ -144,8 +144,8 @@ return {
["luatex.maxprintline"] = " 10000", -- 79
["luatex.maxstrings"] = "500000", -- 15000 -- obsolete
["luatex.paramsize"] = "25000", -- 60
- ["luatex.savesize"] = "50000", -- 4000
- ["luatex.stacksize"] = "10000", -- 300
+ ["luatex.savesize"] = "100000", -- 4000
+ ["luatex.stacksize"] = "100000", -- 300
-- A few process related variables come next.
@@ -155,17 +155,33 @@ return {
["system.compile.cleanup"] = "no", -- remove tma files
["system.compile.strip"] = "yes", -- strip tmc files
- -- The io modes are similar to the traditional ones. Possible values
- -- are all, paranoid and restricted.
-
- -- ["system.outputmode"] = "restricted",
- -- ["system.inputmode"] = "any",
-
- -- The following variable is under consideration. We do have protection
- -- mechanims but it's not enabled by default.
-
- ["system.commandmode"] = "any", -- any none list
- ["system.commandlist"] = "mtxrun, convert, inkscape, gs, imagemagick, curl, bibtex, pstoedit",
+ -- sandboxing (these only kick in when --sandbox is given) .. the examples
+ -- below are just that, examples, as sandboxing is off by default ... when
+ -- turned on, restrictions kick in, and programs registered at runtime have
+ -- (even) more restrictions than already registered ones
+
+ -- ["system.rootlist"] = { "/data" }, -- { { "/data", "read" }, ... }
+ --
+ -- ["system.executionmode"] = "list", -- none | list | all
+ -- ["system.executionlist"] = {
+ -- "context",
+ -- "bibtex", "mlbibcontext",
+ -- "curl",
+ -- "gswin64c", "gswin32c", "gs",
+ -- "gm", "graphicmagick", "imagemagick",
+ -- "pdftops",
+ -- "pstoedit",
+ -- "inkscape",
+ -- "woff2_decompress",
+ -- "hb-shape",
+ -- },
+ --
+ -- ["system.librarymode"] = "list", -- none | list | all
+ -- ["system.librarylist"] = {
+ -- "mysql",
+ -- "sqlite3",
+ -- "libharfbuzz", "libharfbuzz-0",
+ -- }
-- The mplib library support mechanisms have their own
-- configuration. Normally these variables can be left as
diff --git a/web2c/readme.txt b/web2c/readme.txt
new file mode 100644
index 000000000..1f19746c0
--- /dev/null
+++ b/web2c/readme.txt
@@ -0,0 +1,5 @@
+In order for context and its tools to be able to locate files in the tds
+compliant tree you need to copy 'contextcnf.lua' to 'texmfcnf.lua'. There
+is a fallback to 'contextcnf.lua' when no 'texmfcnf.lua' is found. You can
+have multiple 'texmfcnf.lua' files which means that you can overload global
+settings.